@codingame/monaco-editor-wrapper 2.2.3 → 3.1.0

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 (41) hide show
  1. package/README.md +1 -3
  2. package/dist/_monaco-editor_commonjs-external.js +28 -2
  3. package/dist/configuration/index.d.ts +3 -3
  4. package/dist/css.worker.js +1 -1
  5. package/dist/features/extensionConfigurations.js +1 -2
  6. package/dist/features/htmlContribution.js +7 -7
  7. package/dist/features/jsonContribution.js +6 -66
  8. package/dist/features/typescriptContribution.d.ts +0 -4
  9. package/dist/features/typescriptContribution.js +1 -29
  10. package/dist/hacks.d.ts +15 -2
  11. package/dist/html.worker.js +1 -1
  12. package/dist/index.d.ts +1 -4
  13. package/dist/index.js +1343 -4899
  14. package/dist/index2.js +2191 -1309
  15. package/dist/json.worker.js +1 -1
  16. package/dist/keybindings/index.d.ts +1 -1
  17. package/dist/languages/extensions/extensionConfigurationLoader.d.ts +2 -2
  18. package/dist/languages/extensions/languageConfigurationLoader.d.ts +1 -10
  19. package/dist/languages/extensions/snippetLoader.d.ts +1 -2
  20. package/dist/languages/extensions/themeLoader.d.ts +1 -2
  21. package/dist/languages/index.d.ts +1 -0
  22. package/dist/languages/textMate/index.d.ts +0 -2
  23. package/dist/main.js +4342 -10
  24. package/dist/monaco.d.ts +2 -2
  25. package/dist/theme/index.d.ts +2 -2
  26. package/dist/ts.worker.js +1 -1
  27. package/dist/vim.js +45 -20
  28. package/dist/worker.js +1 -1
  29. package/package.json +26 -25
  30. package/stats.html +1455 -110
  31. package/dist/_rollupPluginBabelHelpers.js +0 -42
  32. package/dist/index3.js +0 -2208
  33. package/dist/keybindings/keybindingHelper.d.ts +0 -2
  34. package/dist/languages/monarch/index.d.ts +0 -7
  35. package/dist/languages/monarch/stub-generator.d.ts +0 -2
  36. package/dist/languages/textMate/CGTMGrammarFactory.d.ts +0 -5
  37. package/dist/languages/textMate/CGTMTokenizationSupport.d.ts +0 -8
  38. package/dist/stub-generator.js +0 -15
  39. package/dist/theme/registry.d.ts +0 -9
  40. package/dist/theme/semanticHighlight.d.ts +0 -1
  41. package/dist/theme/tools.d.ts +0 -12
@@ -1,6 +1,6 @@
1
1
  import { c as createBase64WorkerFactory } from './worker.js';
2
2
 
3
- var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdGVuZXJzPVtdLHRoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcj1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KCgoKT0+e2lmKGUuc3RhY2spdGhyb3cgbmV3IEVycm9yKGUubWVzc2FnZSsiXG5cbiIrZS5zdGFjayk7dGhyb3cgZX0pLDApfX1hZGRMaXN0ZW5lcihlKXtyZXR1cm4gdGhpcy5saXN0ZW5lcnMucHVzaChlKSwoKT0+e3RoaXMuX3JlbW92ZUxpc3RlbmVyKGUpfX1lbWl0KGUpe3RoaXMubGlzdGVuZXJzLmZvckVhY2goKHQ9Pnt0KGUpfSkpfV9yZW1vdmVMaXN0ZW5lcihlKXt0aGlzLmxpc3RlbmVycy5zcGxpY2UodGhpcy5saXN0ZW5lcnMuaW5kZXhPZihlKSwxKX1zZXRVbmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcj1lfWdldFVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoKXtyZXR1cm4gdGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyfW9uVW5leHBlY3RlZEVycm9yKGUpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcihlKSx0aGlzLmVtaXQoZSl9b25VbmV4cGVjdGVkRXh0ZXJuYWxFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSl9fWNvbnN0IHQ9bmV3IGU7ZnVuY3Rpb24gbihlKXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09aSYmZS5tZXNzYWdlPT09aX0pKGUpfHx0Lm9uVW5leHBlY3RlZEVycm9yKGUpfWZ1bmN0aW9uIHIoZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXR7bmFtZTp0LG1lc3NhZ2U6bn09ZTtyZXR1cm57JGlzRXJyb3I6ITAsbmFtZTp0LG1lc3NhZ2U6bixzdGFjazplLnN0YWNrdHJhY2V8fGUuc3RhY2t9fXJldHVybiBlfWNvbnN0IGk9IkNhbmNlbGVkIjtjbGFzcyBvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcihpKSx0aGlzLm5hbWU9dGhpcy5tZXNzYWdlfX1mdW5jdGlvbiBhKGUpe2NvbnN0IHQ9dGhpcztsZXQgbixyPSExO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByfHwocj0hMCxuPWUuYXBwbHkodCxhcmd1bWVudHMpKSxufX12YXIgcyxsOyFmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlW1N5bWJvbC5pdGVyYXRvcl19O2NvbnN0IHQ9T2JqZWN0LmZyZWV6ZShbXSk7ZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0fSxlLnNpbmdsZT1mdW5jdGlvbiooZSl7eWllbGQgZX0sZS5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybiBlfHx0fSxlLmlzRW1wdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIWV8fCEwPT09ZVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmV9LGUuZmlyc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS52YWx1ZX0sZS5zb21lPWZ1bmN0aW9uKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSlpZih0KG4pKXJldHVybiEwO3JldHVybiExfSxlLmZpbmQ9ZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKHQobikpcmV0dXJuIG59LGUuZmlsdGVyPWZ1bmN0aW9uKihlLHQpe2Zvcihjb25zdCBuIG9mIGUpdChuKSYmKHlpZWxkIG4pfSxlLm1hcD1mdW5jdGlvbiooZSx0KXtsZXQgbj0wO2Zvcihjb25zdCByIG9mIGUpeWllbGQgdChyLG4rKyl9LGUuY29uY2F0PWZ1bmN0aW9uKiguLi5lKXtmb3IoY29uc3QgdCBvZiBlKWZvcihjb25zdCBlIG9mIHQpeWllbGQgZX0sZS5jb25jYXROZXN0ZWQ9ZnVuY3Rpb24qKGUpe2Zvcihjb25zdCB0IG9mIGUpZm9yKGNvbnN0IGUgb2YgdCl5aWVsZCBlfSxlLnJlZHVjZT1mdW5jdGlvbihlLHQsbil7bGV0IHI9bjtmb3IoY29uc3QgbiBvZiBlKXI9dChyLG4pO3JldHVybiByfSxlLnNsaWNlPWZ1bmN0aW9uKihlLHQsbj1lLmxlbmd0aCl7Zm9yKHQ8MCYmKHQrPWUubGVuZ3RoKSxuPDA/bis9ZS5sZW5ndGg6bj5lLmxlbmd0aCYmKG49ZS5sZW5ndGgpO3Q8bjt0KyspeWllbGQgZVt0XX0sZS5jb25zdW1lPWZ1bmN0aW9uKHQsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHI9W107aWYoMD09PW4pcmV0dXJuW3IsdF07Y29uc3QgaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCB0PWkubmV4dCgpO2lmKHQuZG9uZSlyZXR1cm5bcixlLmVtcHR5KCldO3IucHVzaCh0LnZhbHVlKX1yZXR1cm5bcix7W1N5bWJvbC5pdGVyYXRvcl06KCk9Pml9XX0sZS5lcXVhbHM9ZnVuY3Rpb24oZSx0LG49KChlLHQpPT5lPT09dCkpe2NvbnN0IHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe2NvbnN0IGU9ci5uZXh0KCksdD1pLm5leHQoKTtpZihlLmRvbmUhPT10LmRvbmUpcmV0dXJuITE7aWYoZS5kb25lKXJldHVybiEwO2lmKCFuKGUudmFsdWUsdC52YWx1ZSkpcmV0dXJuITF9fX0oc3x8KHM9e30pKTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUuIEVycm9yczogWyR7ZS5qb2luKCIsICIpfV1gKSx0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiB1KGUpe2lmKHMuaXMoZSkpe2xldCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpaWYobil0cnl7bi5kaXNwb3NlKCl9Y2F0Y2goZSl7dC5wdXNoKGUpfWlmKDE9PT10Lmxlbmd0aCl0aHJvdyB0WzBdO2lmKHQubGVuZ3RoPjEpdGhyb3cgbmV3IGModCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/W106ZX1pZihlKXJldHVybiBlLmRpc3Bvc2UoKSxlfWZ1bmN0aW9uIGgoZSl7cmV0dXJue2Rpc3Bvc2U6YSgoKCk9PntlKCl9KSl9fWNsYXNzIGZ7Y29uc3RydWN0b3IoKXt0aGlzLl90b0Rpc3Bvc2U9bmV3IFNldCx0aGlzLl9pc0Rpc3Bvc2VkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5faXNEaXNwb3NlZD0hMCx0aGlzLmNsZWFyKCkpfWdldCBpc0Rpc3Bvc2VkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWR9Y2xlYXIoKXt0cnl7dSh0aGlzLl90b0Rpc3Bvc2UudmFsdWVzKCkpfWZpbmFsbHl7dGhpcy5fdG9EaXNwb3NlLmNsZWFyKCl9fWFkZChlKXtpZighZSlyZXR1cm4gZTtpZihlPT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkP2YuRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HfHxjb25zb2xlLndhcm4obmV3IEVycm9yKCJUcnlpbmcgdG8gYWRkIGEgZGlzcG9zYWJsZSB0byBhIERpc3Bvc2FibGVTdG9yZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuIFRoZSBhZGRlZCBvYmplY3Qgd2lsbCBiZSBsZWFrZWQhIikuc3RhY2spOnRoaXMuX3RvRGlzcG9zZS5hZGQoZSksZX19Zi5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkc9ITE7Y2xhc3MgZHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyBmLHRoaXMuX3N0b3JlfWRpc3Bvc2UoKXt0aGlzLl9zdG9yZS5kaXNwb3NlKCl9X3JlZ2lzdGVyKGUpe2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX3N0b3JlLmFkZChlKX19ZC5Ob25lPU9iamVjdC5mcmVlemUoe2Rpc3Bvc2UoKXt9fSk7Y2xhc3MgbXtjb25zdHJ1Y3Rvcigpe3RoaXMuZGlzcG9zZT0oKT0+e30sdGhpcy51bnNldD0oKT0+e30sdGhpcy5pc3NldD0oKT0+ITF9c2V0KGUpe2xldCB0PWU7cmV0dXJuIHRoaXMudW5zZXQ9KCk9PnQ9dm9pZCAwLHRoaXMuaXNzZXQ9KCk9PnZvaWQgMCE9PXQsdGhpcy5kaXNwb3NlPSgpPT57dCYmKHQoKSx0PXZvaWQgMCl9LHRoaXN9fWNsYXNzIGd7Y29uc3RydWN0b3IoZSl7dGhpcy5lbGVtZW50PWUsdGhpcy5uZXh0PWcuVW5kZWZpbmVkLHRoaXMucHJldj1nLlVuZGVmaW5lZH19Zy5VbmRlZmluZWQ9bmV3IGcodm9pZCAwKTtjbGFzcyBwe2NvbnN0cnVjdG9yKCl7dGhpcy5fZmlyc3Q9Zy5VbmRlZmluZWQsdGhpcy5fbGFzdD1nLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1pc0VtcHR5KCl7cmV0dXJuIHRoaXMuX2ZpcnN0PT09Zy5VbmRlZmluZWR9Y2xlYXIoKXtsZXQgZT10aGlzLl9maXJzdDtmb3IoO2UhPT1nLlVuZGVmaW5lZDspe2NvbnN0IHQ9ZS5uZXh0O2UucHJldj1nLlVuZGVmaW5lZCxlLm5leHQ9Zy5VbmRlZmluZWQsZT10fXRoaXMuX2ZpcnN0PWcuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9Zy5VbmRlZmluZWQsdGhpcy5fc2l6ZT0wfXVuc2hpZnQoZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCExKX1wdXNoKGUpe3JldHVybiB0aGlzLl9pbnNlcnQoZSwhMCl9X2luc2VydChlLHQpe2NvbnN0IG49bmV3IGcoZSk7aWYodGhpcy5fZmlyc3Q9PT1nLlVuZGVmaW5lZCl0aGlzLl9maXJzdD1uLHRoaXMuX2xhc3Q9bjtlbHNlIGlmKHQpe2NvbnN0IGU9dGhpcy5fbGFzdDt0aGlzLl9sYXN0PW4sbi5wcmV2PWUsZS5uZXh0PW59ZWxzZXtjb25zdCBlPXRoaXMuX2ZpcnN0O3RoaXMuX2ZpcnN0PW4sbi5uZXh0PWUsZS5wcmV2PW59dGhpcy5fc2l6ZSs9MTtsZXQgcj0hMTtyZXR1cm4oKT0+e3J8fChyPSEwLHRoaXMuX3JlbW92ZShuKSl9fXNoaWZ0KCl7aWYodGhpcy5fZmlyc3QhPT1nLlVuZGVmaW5lZCl7Y29uc3QgZT10aGlzLl9maXJzdC5lbGVtZW50O3JldHVybiB0aGlzLl9yZW1vdmUodGhpcy5fZmlyc3QpLGV9fXBvcCgpe2lmKHRoaXMuX2xhc3QhPT1nLlVuZGVmaW5lZCl7Y29uc3QgZT10aGlzLl9sYXN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9sYXN0KSxlfX1fcmVtb3ZlKGUpe2lmKGUucHJldiE9PWcuVW5kZWZpbmVkJiZlLm5leHQhPT1nLlVuZGVmaW5lZCl7Y29uc3QgdD1lLnByZXY7dC5uZXh0PWUubmV4dCxlLm5leHQucHJldj10fWVsc2UgZS5wcmV2PT09Zy5VbmRlZmluZWQmJmUubmV4dD09PWcuVW5kZWZpbmVkPyh0aGlzLl9maXJzdD1nLlVuZGVmaW5lZCx0aGlzLl9sYXN0PWcuVW5kZWZpbmVkKTplLm5leHQ9PT1nLlVuZGVmaW5lZD8odGhpcy5fbGFzdD10aGlzLl9sYXN0LnByZXYsdGhpcy5fbGFzdC5uZXh0PWcuVW5kZWZpbmVkKTplLnByZXY9PT1nLlVuZGVmaW5lZCYmKHRoaXMuX2ZpcnN0PXRoaXMuX2ZpcnN0Lm5leHQsdGhpcy5fZmlyc3QucHJldj1nLlVuZGVmaW5lZCk7dGhpcy5fc2l6ZS09MX0qW1N5bWJvbC5pdGVyYXRvcl0oKXtsZXQgZT10aGlzLl9maXJzdDtmb3IoO2UhPT1nLlVuZGVmaW5lZDspeWllbGQgZS5lbGVtZW50LGU9ZS5uZXh0fX1jb25zdCBiPSJlbiI7bGV0IHYseSxDLHc9ITEsXz0hMSxTPSExLEE9ITEsRT1iO2NvbnN0IE49Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiBnbG9iYWw/Z2xvYmFsOnt9O2xldCB4O3ZvaWQgMCE9PU4udnNjb2RlJiZ2b2lkIDAhPT1OLnZzY29kZS5wcm9jZXNzP3g9Ti52c2NvZGUucHJvY2VzczoidW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJih4PXByb2Nlc3MpO2NvbnN0IEw9InN0cmluZyI9PXR5cGVvZihudWxsPT09KGw9bnVsbD09eD92b2lkIDA6eC52ZXJzaW9ucyl8fHZvaWQgMD09PWw/dm9pZCAwOmwuZWxlY3Ryb24pJiYicmVuZGVyZXIiPT09KG51bGw9PXg/dm9pZCAwOngudHlwZSk7aWYoIm9iamVjdCIhPXR5cGVvZiBuYXZpZ2F0b3J8fEwpaWYoIm9iamVjdCI9PXR5cGVvZiB4KXt3PSJ3aW4zMiI9PT14LnBsYXRmb3JtLF89ImRhcndpbiI9PT14LnBsYXRmb3JtLFM9ImxpbnV4Ij09PXgucGxhdGZvcm0sUyYmeC5lbnYuU05BUCYmeC5lbnYuU05BUF9SRVZJU0lPTix4LmVudi5DSXx8eC5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLHY9YixFPWI7Y29uc3QgZT14LmVudi5WU0NPREVfTkxTX0NPTkZJRztpZihlKXRyeXtjb25zdCB0PUpTT04ucGFyc2UoZSksbj10LmF2YWlsYWJsZUxhbmd1YWdlc1siKiJdO3Y9dC5sb2NhbGUsRT1ufHxiLHk9dC5fdHJhbnNsYXRpb25zQ29uZmlnRmlsZX1jYXRjaChlKXt9fWVsc2UgY29uc29sZS5lcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgcGxhdGZvcm0uIik7ZWxzZSBDPW5hdmlnYXRvci51c2VyQWdlbnQsdz1DLmluZGV4T2YoIldpbmRvd3MiKT49MCxfPUMuaW5kZXhPZigiTWFjaW50b3NoIik+PTAsKEMuaW5kZXhPZigiTWFjaW50b3NoIik+PTB8fEMuaW5kZXhPZigiaVBhZCIpPj0wfHxDLmluZGV4T2YoImlQaG9uZSIpPj0wKSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMsUz1DLmluZGV4T2YoIkxpbnV4Iik+PTAsQT0hMCx2PW5hdmlnYXRvci5sYW5ndWFnZSxFPXY7Y29uc3Qgaz13LFQ9XztBJiZOLmltcG9ydFNjcmlwdHM7Y29uc3QgTz1DOygoKT0+e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBOLnBvc3RNZXNzYWdlJiYhTi5pbXBvcnRTY3JpcHRzKXtsZXQgZT1bXTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWVbbl07aWYoci5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIHIuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksTi5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6cn0sIioiKX19fSkoKTtjb25zdCBNPSEhKE8mJk8uaW5kZXhPZigiQ2hyb21lIik+PTApO08mJk8uaW5kZXhPZigiRmlyZWZveCIpLCFNJiZPJiZPLmluZGV4T2YoIlNhZmFyaSIpLE8mJk8uaW5kZXhPZigiRWRnLyIpLE8mJk8uaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IEk9Ti5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIE4ucGVyZm9ybWFuY2Uubm93O2NsYXNzIFJ7Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249SSYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IFIoZSl9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9OLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBQLEY7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBhKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIGEoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBVKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtuPWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe24uZGlzcG9zZSgpfX0pO3JldHVybiB0JiZ0LmFkZChyKSxyLmV2ZW50fWZ1bmN0aW9uIHMoZSx0LG49MTAwLHI9ITEsaSxvKXtsZXQgYSxzLGwsYz0wO2NvbnN0IHU9bmV3IFUoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7YT1lKChlPT57YysrLHM9dChzLGUpLHImJiFsJiYodS5maXJlKHMpLHM9dm9pZCAwKSxjbGVhclRpbWVvdXQobCksbD1zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IGU9cztzPXZvaWQgMCxsPXZvaWQgMCwoIXJ8fGM+MSkmJnUuZmlyZShlKSxjPTB9KSxuKX0pKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXthLmRpc3Bvc2UoKX19KTtyZXR1cm4gbyYmby5hZGQodSksdS5ldmVudH1mdW5jdGlvbiBsKGUsdD0oKGUsdCk9PmU9PT10KSxuKXtsZXQgcixvPSEwO3JldHVybiBpKGUsKGU9Pntjb25zdCBuPW98fCF0KGUscik7cmV0dXJuIG89ITEscj1lLG59KSxuKX1lLk5vbmU9KCk9PmQuTm9uZSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIGgoKCgpPT51KGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPXMsZS5sYXRjaD1sLGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybltlLmZpbHRlcih0LG4sciksZS5maWx0ZXIodCwoZT0+IW4oZSkpLHIpXX0sZS5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLG49W10pe2xldCByPW4uc2xpY2UoKSxpPWUoKGU9PntyP3IucHVzaChlKTphLmZpcmUoZSl9KSk7Y29uc3Qgbz0oKT0+e3ImJnIuZm9yRWFjaCgoZT0+YS5maXJlKGUpKSkscj1udWxsfSxhPW5ldyBVKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtpfHwoaT1lKChlPT5hLmZpcmUoZSkpKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe3ImJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIGN7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lfW1hcChlKXtyZXR1cm4gbmV3IGMobih0aGlzLmV2ZW50LGUpKX1mb3JFYWNoKGUpe3JldHVybiBuZXcgYyhyKHRoaXMuZXZlbnQsZSkpfWZpbHRlcihlKXtyZXR1cm4gbmV3IGMoaSh0aGlzLmV2ZW50LGUpKX1yZWR1Y2UoZSx0KXtyZXR1cm4gbmV3IGMobyh0aGlzLmV2ZW50LGUsdCkpfWxhdGNoKCl7cmV0dXJuIG5ldyBjKGwodGhpcy5ldmVudCkpfWRlYm91bmNlKGUsdD0xMDAsbj0hMSxyKXtyZXR1cm4gbmV3IGMocyh0aGlzLmV2ZW50LGUsdCxuLHIpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX19ZS5jaGFpbj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGMoZSl9LGUuZnJvbU5vZGVFdmVudEVtaXR0ZXI9ZnVuY3Rpb24oZSx0LG49KGU9PmUpKXtjb25zdCByPSguLi5lKT0+aS5maXJlKG4oLi4uZSkpLGk9bmV3IFUoe29uRmlyc3RMaXN0ZW5lckFkZDooKT0+ZS5vbih0LHIpLG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT5lLnJlbW92ZUxpc3RlbmVyKHQscil9KTtyZXR1cm4gaS5ldmVudH0sZS5mcm9tRE9NRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBVKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUuYWRkRXZlbnRMaXN0ZW5lcih0LHIpLG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX0pO3JldHVybiBpLmV2ZW50fSxlLnRvUHJvbWlzZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKG49PnQoZSkobikpKX0sZS5ydW5BbmRTdWJzY3JpYmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCh2b2lkIDApLGUoKGU9PnQoZSkpKX0sZS5ydW5BbmRTdWJzY3JpYmVXaXRoU3RvcmU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1udWxsO2Z1bmN0aW9uIHIoZSl7bnVsbD09bnx8bi5kaXNwb3NlKCksbj1uZXcgZix0KGUsbil9cih2b2lkIDApO2NvbnN0IGk9ZSgoZT0+cihlKSkpO3JldHVybiBoKCgoKT0+e2kuZGlzcG9zZSgpLG51bGw9PW58fG4uZGlzcG9zZSgpfSkpfX0oUHx8KFA9e30pKTtjbGFzcyBEe2NvbnN0cnVjdG9yKGUpe3RoaXMuX2xpc3RlbmVyQ291bnQ9MCx0aGlzLl9pbnZvY2F0aW9uQ291bnQ9MCx0aGlzLl9lbGFwc2VkT3ZlcmFsbD0wLHRoaXMuX25hbWU9YCR7ZX1fJHtELl9pZFBvb2wrK31gfXN0YXJ0KGUpe3RoaXMuX3N0b3BXYXRjaD1uZXcgUighMCksdGhpcy5fbGlzdGVuZXJDb3VudD1lfXN0b3AoKXtpZih0aGlzLl9zdG9wV2F0Y2gpe2NvbnN0IGU9dGhpcy5fc3RvcFdhdGNoLmVsYXBzZWQoKTt0aGlzLl9lbGFwc2VkT3ZlcmFsbCs9ZSx0aGlzLl9pbnZvY2F0aW9uQ291bnQrPTEsY29uc29sZS5pbmZvKGBkaWQgRklSRSAke3RoaXMuX25hbWV9OiBlbGFwc2VkX21zOiAke2UudG9GaXhlZCg1KX0sIGxpc3RlbmVyOiAke3RoaXMuX2xpc3RlbmVyQ291bnR9IChlbGFwc2VkX292ZXJhbGw6ICR7dGhpcy5fZWxhcHNlZE92ZXJhbGwudG9GaXhlZCgyKX0sIGludm9jYXRpb25zOiAke3RoaXMuX2ludm9jYXRpb25Db3VudH0pYCksdGhpcy5fc3RvcFdhdGNoPXZvaWQgMH19fUQuX2lkUG9vbD0wO2NsYXNzIFZ7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT1lfXN0YXRpYyBjcmVhdGUoKXt2YXIgZTtyZXR1cm4gbmV3IFYobnVsbCE9PShlPShuZXcgRXJyb3IpLnN0YWNrKSYmdm9pZCAwIT09ZT9lOiIiKX1wcmludCgpe2NvbnNvbGUud2Fybih0aGlzLnZhbHVlLnNwbGl0KCJcbiIpLnNsaWNlKDIpLmpvaW4oIlxuIikpfX1jbGFzcyBLe2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmNhbGxiYWNrPWUsdGhpcy5jYWxsYmFja1RoaXM9dCx0aGlzLnN0YWNrPW4sdGhpcy5zdWJzY3JpcHRpb249bmV3IG19aW52b2tlKGUpe3RoaXMuY2FsbGJhY2suY2FsbCh0aGlzLmNhbGxiYWNrVGhpcyxlKX19Y2xhc3MgVXtjb25zdHJ1Y3RvcihlKXt2YXIgdDt0aGlzLl9kaXNwb3NlZD0hMSx0aGlzLl9vcHRpb25zPWUsdGhpcy5fbGVha2FnZU1vbj12b2lkIDAsdGhpcy5fcGVyZk1vbj0obnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Ll9wcm9mTmFtZSk/bmV3IEQodGhpcy5fb3B0aW9ucy5fcHJvZk5hbWUpOnZvaWQgMH1kaXNwb3NlKCl7dmFyIGUsdCxuLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcigpLG51bGw9PT0obj1udWxsPT09KHQ9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQub25MYXN0TGlzdGVuZXJSZW1vdmUpfHx2b2lkIDA9PT1ufHxuLmNhbGwodCksbnVsbD09PShyPXRoaXMuX2xlYWthZ2VNb24pfHx2b2lkIDA9PT1yfHxyLmRpc3Bvc2UoKSl9Z2V0IGV2ZW50KCl7cmV0dXJuIHRoaXMuX2V2ZW50fHwodGhpcy5fZXZlbnQ9KGUsdCxuKT0+e3ZhciByLGksbzt0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9bmV3IHApO2NvbnN0IGE9dGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKTtsZXQgcyxsO2EmJihudWxsPT09KHI9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXI/dm9pZCAwOnIub25GaXJzdExpc3RlbmVyQWRkKSYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQodGhpcyksdGhpcy5fbGVha2FnZU1vbiYmdGhpcy5fbGlzdGVuZXJzLnNpemU+PTMwJiYobD1WLmNyZWF0ZSgpLHM9dGhpcy5fbGVha2FnZU1vbi5jaGVjayhsLHRoaXMuX2xpc3RlbmVycy5zaXplKzEpKTtjb25zdCBjPW5ldyBLKGUsdCxsKSx1PXRoaXMuX2xpc3RlbmVycy5wdXNoKGMpO2EmJihudWxsPT09KGk9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PWk/dm9pZCAwOmkub25GaXJzdExpc3RlbmVyRGlkQWRkKSYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJEaWRBZGQodGhpcyksKG51bGw9PT0obz10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09bz92b2lkIDA6by5vbkxpc3RlbmVyRGlkQWRkKSYmdGhpcy5fb3B0aW9ucy5vbkxpc3RlbmVyRGlkQWRkKHRoaXMsZSx0KTtjb25zdCBoPWMuc3Vic2NyaXB0aW9uLnNldCgoKCk9PntpZihzJiZzKCksIXRoaXMuX2Rpc3Bvc2VkJiYodSgpLHRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUpKXt0aGlzLl9saXN0ZW5lcnMmJiF0aGlzLl9saXN0ZW5lcnMuaXNFbXB0eSgpfHx0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKHRoaXMpfX0pKTtyZXR1cm4gbiBpbnN0YW5jZW9mIGY/bi5hZGQoaCk6QXJyYXkuaXNBcnJheShuKSYmbi5wdXNoKGgpLGh9KSx0aGlzLl9ldmVudH1maXJlKGUpe3ZhciB0LHI7aWYodGhpcy5fbGlzdGVuZXJzKXt0aGlzLl9kZWxpdmVyeVF1ZXVlfHwodGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgcCk7Zm9yKGxldCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2goW3QsZV0pO2ZvcihudWxsPT09KHQ9dGhpcy5fcGVyZk1vbil8fHZvaWQgMD09PXR8fHQuc3RhcnQodGhpcy5fZGVsaXZlcnlRdWV1ZS5zaXplKTt0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemU+MDspe2NvbnN0W2UsdF09dGhpcy5fZGVsaXZlcnlRdWV1ZS5zaGlmdCgpO3RyeXtlLmludm9rZSh0KX1jYXRjaChlKXtuKGUpfX1udWxsPT09KHI9dGhpcy5fcGVyZk1vbil8fHZvaWQgMD09PXJ8fHIuc3RvcCgpfX19ZnVuY3Rpb24gQihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIGooZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1jbGFzcyBxe2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9Z2V0VmFsdWUoKXtpZighdGhpcy5fZGlkUnVuKXRyeXt0aGlzLl92YWx1ZT10aGlzLmV4ZWN1dG9yKCl9Y2F0Y2goZSl7dGhpcy5fZXJyb3I9ZX1maW5hbGx5e3RoaXMuX2RpZFJ1bj0hMH1pZih0aGlzLl9lcnJvcil0aHJvdyB0aGlzLl9lcnJvcjtyZXR1cm4gdGhpcy5fdmFsdWV9Z2V0IHJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiAkKGUsdCxuPTAscj1lLmxlbmd0aCxpPTAsbz10Lmxlbmd0aCl7Zm9yKDtuPHImJmk8bztuKyssaSsrKXtsZXQgcj1lLmNoYXJDb2RlQXQobiksbz10LmNoYXJDb2RlQXQoaSk7aWYocjxvKXJldHVybi0xO2lmKHI+bylyZXR1cm4gMX1jb25zdCBhPXItbixzPW8taTtyZXR1cm4gYTxzPy0xOmE+cz8xOjB9ZnVuY3Rpb24gVyhlKXtyZXR1cm4gZT49OTcmJmU8PTEyMn1mdW5jdGlvbiBIKGUpe3JldHVybiBlPj02NSYmZTw9OTB9ZnVuY3Rpb24geihlLHQpe2NvbnN0IG49dC5sZW5ndGg7cmV0dXJuISh0Lmxlbmd0aD5lLmxlbmd0aCkmJjA9PT1mdW5jdGlvbihlLHQsbj0wLHI9ZS5sZW5ndGgsaT0wLG89dC5sZW5ndGgpe2Zvcig7bjxyJiZpPG87bisrLGkrKyl7bGV0IGE9ZS5jaGFyQ29kZUF0KG4pLHM9dC5jaGFyQ29kZUF0KGkpO2lmKGE9PT1zKWNvbnRpbnVlO2lmKGE+PTEyOHx8cz49MTI4KXJldHVybiAkKGUudG9Mb3dlckNhc2UoKSx0LnRvTG93ZXJDYXNlKCksbixyLGksbyk7VyhhKSYmKGEtPTMyKSxXKHMpJiYocy09MzIpO2NvbnN0IGw9YS1zO2lmKDAhPT1sKXJldHVybiBsfWNvbnN0IGE9ci1uLHM9by1pO3JldHVybiBhPHM/LTE6YT5zPzE6MH0oZSx0LDAsbil9ZnVuY3Rpb24gRyhlKXtyZXR1cm4gNTUyOTY8PWUmJmU8PTU2MzE5fWZ1bmN0aW9uIEooZSx0LG4pe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pO2lmKEcocikmJm4rMTx0KXtjb25zdCB0PWUuY2hhckNvZGVBdChuKzEpO2lmKGZ1bmN0aW9uKGUpe3JldHVybiA1NjMyMDw9ZSYmZTw9NTczNDN9KHQpKXJldHVybiB0LTU2MzIwKyhyLTU1Mjk2PDwxMCkrNjU1MzZ9cmV0dXJuIHJ9Y29uc3QgWD0vXltcdFxuXHJceDIwLVx4N0VdKiQvO2NsYXNzIFp7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeT1lfXN0YXRpYyBnZXRJbnN0YW5jZShlKXtyZXR1cm4gWi5jYWNoZS5nZXQoQXJyYXkuZnJvbShlKSl9c3RhdGljIGdldExvY2FsZXMoKXtyZXR1cm4gWi5fbG9jYWxlcy5nZXRWYWx1ZSgpfWlzQW1iaWd1b3VzKGUpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmhhcyhlKX1nZXRQcmltYXJ5Q29uZnVzYWJsZShlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5nZXQoZSl9Z2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKXtyZXR1cm4gbmV3IFNldCh0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmtleXMoKSl9fUY9WixaLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3IHEoKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjVdLCJfZGVmYXVsdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJjcyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZGUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImVzIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImZyIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sIml0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJqYSI6WzgyMTEsNDUsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MjkyLDQ0LDY1MzA3LDU5XSwia28iOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInBsIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInB0LUJSIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInFwcy1wbG9jIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInJ1IjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywzMDUsMTA1LDkyMSw3MywxMDA5LDExMiwyMTUsMTIwLDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwidHIiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiemgtaGFucyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4OCw0MCw2NTI4OSw0MV0sInpoLWhhbnQiOls4MjExLDQ1LDY1Mzc0LDEyNiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUzMDcsNTldfScpKSksWi5jYWNoZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wdXRlRm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09dCYmKHRoaXMubGFzdEFyZ0tleT10LHRoaXMubGFzdENhY2hlPXRoaXMuY29tcHV0ZUZuKGUpKSx0aGlzLmxhc3RDYWNoZX19KChlPT57ZnVuY3Rpb24gdChlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz0yKXQuc2V0KGVbbl0sZVtuKzFdKTtyZXR1cm4gdH1mdW5jdGlvbiBuKGUsdCl7aWYoIWUpcmV0dXJuIHQ7Y29uc3Qgbj1uZXcgTWFwO2Zvcihjb25zdFtyLGldb2YgZSl0LmhhcyhyKSYmbi5zZXQocixpKTtyZXR1cm4gbn1jb25zdCByPUYuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS5nZXRWYWx1ZSgpO2xldCBpLG89ZS5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSYmZSBpbiByKSk7MD09PW8ubGVuZ3RoJiYobz1bIl9kZWZhdWx0Il0pO2Zvcihjb25zdCBlIG9mIG8pe2k9bihpLHQocltlXSkpfWNvbnN0IGE9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPW5ldyBNYXAoZSk7Zm9yKGNvbnN0W2Uscl1vZiB0KW4uc2V0KGUscik7cmV0dXJuIG59KHQoci5fY29tbW9uKSxpKTtyZXR1cm4gbmV3IFooYSl9KSksWi5fbG9jYWxlcz1uZXcgcSgoKCk9Pk9iamVjdC5rZXlzKFouYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS5nZXRWYWx1ZSgpKS5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpKSk7Y2xhc3MgWXtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KFkuZ2V0UmF3RGF0YSgpKSksdGhpcy5fZGF0YX1zdGF0aWMgaXNJbnZpc2libGVDaGFyYWN0ZXIoZSl7cmV0dXJuIFkuZ2V0RGF0YSgpLmhhcyhlKX1zdGF0aWMgZ2V0IGNvZGVQb2ludHMoKXtyZXR1cm4gWS5nZXREYXRhKCl9fVkuX2RhdGE9dm9pZCAwO2NsYXNzIFF7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5tZXRob2Q9bix0aGlzLmFyZ3M9cix0aGlzLnR5cGU9MH19Y2xhc3MgZWV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy52c1dvcmtlcj1lLHRoaXMuc2VxPXQsdGhpcy5yZXM9bix0aGlzLmVycj1yLHRoaXMudHlwZT0xfX1jbGFzcyB0ZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50TmFtZT1uLHRoaXMuYXJnPXIsdGhpcy50eXBlPTJ9fWNsYXNzIG5le2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50PW4sdGhpcy50eXBlPTN9fWNsYXNzIHJle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy50eXBlPTR9fWNsYXNzIGlle2NvbnN0cnVjdG9yKGUpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9ZSx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKGUpe3RoaXMuX3dvcmtlcklkPWV9c2VuZE1lc3NhZ2UoZSx0KXtjb25zdCBuPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbbl09e3Jlc29sdmU6cixyZWplY3Q6aX0sdGhpcy5fc2VuZChuZXcgUSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSkpfWxpc3RlbihlLHQpe2xldCBuPW51bGw7Y29uc3Qgcj1uZXcgVSh7b25GaXJzdExpc3RlbmVyQWRkOigpPT57bj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChuLHIpLHRoaXMuX3NlbmQobmV3IHRlKHRoaXMuX3dvcmtlcklkLG4sZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShuKSx0aGlzLl9zZW5kKG5ldyByZSh0aGlzLl93b3JrZXJJZCxuKSksbj1udWxsfX0pO3JldHVybiByLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKGUpe2lmKCF0aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV0pcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJHb3QgcmVwbHkgdG8gdW5rbm93biBzZXEiKTtsZXQgdD10aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV07aWYoZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXSxlLmVycil7bGV0IG49ZS5lcnI7cmV0dXJuIGUuZXJyLiRpc0Vycm9yJiYobj1uZXcgRXJyb3Isbi5uYW1lPWUuZXJyLm5hbWUsbi5tZXNzYWdlPWUuZXJyLm1lc3NhZ2Usbi5zdGFjaz1lLmVyci5zdGFjayksdm9pZCB0LnJlamVjdChuKX10LnJlc29sdmUoZS5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKXtsZXQgdD1lLnJlcTt0aGlzLl9oYW5kbGVyLmhhbmRsZU1lc3NhZ2UoZS5tZXRob2QsZS5hcmdzKS50aGVuKChlPT57dGhpcy5fc2VuZChuZXcgZWUodGhpcy5fd29ya2VySWQsdCxlLHZvaWQgMCkpfSksKGU9PntlLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoZS5kZXRhaWw9cihlLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IGVlKHRoaXMuX3dvcmtlcklkLHQsdm9pZCAwLHIoZSkpKX0pKX1faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpe2NvbnN0IHQ9ZS5yZXEsbj10aGlzLl9oYW5kbGVyLmhhbmRsZUV2ZW50KGUuZXZlbnROYW1lLGUuYXJnKSgoZT0+e3RoaXMuX3NlbmQobmV3IG5lKHRoaXMuX3dvcmtlcklkLHQsZSkpfSkpO3RoaXMuX3BlbmRpbmdFdmVudHMuc2V0KHQsbil9X2hhbmRsZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRW1pdHRlcnMuaGFzKGUucmVxKT90aGlzLl9wZW5kaW5nRW1pdHRlcnMuZ2V0KGUucmVxKS5maXJlKGUuZXZlbnQpOmNvbnNvbGUud2FybigiR290IGV2ZW50IGZvciB1bmtub3duIHJlcSIpfV9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRXZlbnRzLmhhcyhlLnJlcSk/KHRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KGUucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUoZS5yZXEpKTpjb25zb2xlLndhcm4oIkdvdCB1bnN1YnNjcmliZSBmb3IgdW5rbm93biByZXEiKX1fc2VuZChlKXtsZXQgdD1bXTtpZigwPT09ZS50eXBlKWZvcihsZXQgbj0wO248ZS5hcmdzLmxlbmd0aDtuKyspZS5hcmdzW25daW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUuYXJnc1tuXSk7ZWxzZSAxPT09ZS50eXBlJiZlLnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LnB1c2goZS5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UoZSx0KX19ZnVuY3Rpb24gb2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmSChlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIGFlKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZIKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3Mgc2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9dCx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBpZSh7c2VuZE1lc3NhZ2U6KHQsbik9PntlKHQsbil9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKGFlKGUpKXtjb25zdCBuPXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIG59aWYob2UoZSkpe2NvbnN0IHQ9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGV2ZW50IG5hbWUgJHtlfWApfWluaXRpYWxpemUoZSx0LG4scil7dGhpcy5fcHJvdG9jb2wuc2V0V29ya2VySWQoZSk7Y29uc3QgaT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LGk9ZT0+ZnVuY3Rpb24odCl7cmV0dXJuIG4oZSx0KX07bGV0IG89e307Zm9yKGNvbnN0IHQgb2YgZSlhZSh0KT9vW3RdPWkodCk6b2UodCk/b1t0XT1uKHQsdm9pZCAwKTpvW3RdPXIodCk7cmV0dXJuIG99KHIsKChlLHQpPT50aGlzLl9wcm90b2NvbC5zZW5kTWVzc2FnZShlLHQpKSwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihlLHQpKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT8odGhpcy5fcmVxdWVzdEhhbmRsZXI9dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5KGkpLFByb21pc2UucmVzb2x2ZShCKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOih0JiYodm9pZCAwIT09dC5iYXNlVXJsJiZkZWxldGUgdC5iYXNlVXJsLHZvaWQgMCE9PXQucGF0aHMmJnZvaWQgMCE9PXQucGF0aHMudnMmJmRlbGV0ZSB0LnBhdGhzLnZzLHZvaWQgMCE9PXR5cGVvZiB0LnRydXN0ZWRUeXBlc1BvbGljeSYmZGVsZXRlIHQudHJ1c3RlZFR5cGVzUG9saWN5LHQuY2F0Y2hFcnJvcj0hMCxOLnJlcXVpcmUuY29uZmlnKHQpKSxuZXcgUHJvbWlzZSgoKGUsdCk9PnsoMCxOLnJlcXVpcmUpKFtuXSwobj0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyPW4uY3JlYXRlKGkpLHRoaXMuX3JlcXVlc3RIYW5kbGVyP2UoQih0aGlzLl9yZXF1ZXN0SGFuZGxlcikpOnQobmV3IEVycm9yKCJObyBSZXF1ZXN0SGFuZGxlciEiKSl9KSx0KX0pKSl9fWNsYXNzIGxle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMub3JpZ2luYWxTdGFydD1lLHRoaXMub3JpZ2luYWxMZW5ndGg9dCx0aGlzLm1vZGlmaWVkU3RhcnQ9bix0aGlzLm1vZGlmaWVkTGVuZ3RoPXJ9Z2V0T3JpZ2luYWxFbmQoKXtyZXR1cm4gdGhpcy5vcmlnaW5hbFN0YXJ0K3RoaXMub3JpZ2luYWxMZW5ndGh9Z2V0TW9kaWZpZWRFbmQoKXtyZXR1cm4gdGhpcy5tb2RpZmllZFN0YXJ0K3RoaXMubW9kaWZpZWRMZW5ndGh9fWZ1bmN0aW9uIGNlKGUsdCl7cmV0dXJuKHQ8PDUpLXQrZXwwfWZ1bmN0aW9uIHVlKGUsdCl7dD1jZSgxNDk0MTcsdCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQ9Y2UoZS5jaGFyQ29kZUF0KG4pLHQpO3JldHVybiB0fWNsYXNzIGhle2NvbnN0cnVjdG9yKGUpe3RoaXMuc291cmNlPWV9Z2V0RWxlbWVudHMoKXtjb25zdCBlPXRoaXMuc291cmNlLHQ9bmV3IEludDMyQXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W25dPWUuY2hhckNvZGVBdChuKTtyZXR1cm4gdH19ZnVuY3Rpb24gZmUoZSx0LG4pe3JldHVybiBuZXcgcGUobmV3IGhlKGUpLG5ldyBoZSh0KSkuQ29tcHV0ZURpZmYobikuY2hhbmdlc31jbGFzcyBkZXtzdGF0aWMgQXNzZXJ0KGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKHQpfX1jbGFzcyBtZXtzdGF0aWMgQ29weShlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX1zdGF0aWMgQ29weTIoZSx0LG4scixpKXtmb3IobGV0IG89MDtvPGk7bysrKW5bcitvXT1lW3Qrb119fWNsYXNzIGdle2NvbnN0cnVjdG9yKCl7dGhpcy5tX2NoYW5nZXM9W10sdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0LHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MH1NYXJrTmV4dENoYW5nZSgpeyh0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5tX2NoYW5nZXMucHVzaChuZXcgbGUodGhpcy5tX29yaWdpbmFsU3RhcnQsdGhpcy5tX29yaWdpbmFsQ291bnQsdGhpcy5tX21vZGlmaWVkU3RhcnQsdGhpcy5tX21vZGlmaWVkQ291bnQpKSx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTAsdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0fUFkZE9yaWdpbmFsRWxlbWVudChlLHQpe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LGUpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LHQpLHRoaXMubV9vcmlnaW5hbENvdW50Kyt9QWRkTW9kaWZpZWRFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkQ291bnQrK31nZXRDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXN9Z2V0UmV2ZXJzZUNoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlcy5yZXZlcnNlKCksdGhpcy5tX2NoYW5nZXN9fWNsYXNzIHBle2NvbnN0cnVjdG9yKGUsdCxuPW51bGwpe3RoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlPW4sdGhpcy5fb3JpZ2luYWxTZXF1ZW5jZT1lLHRoaXMuX21vZGlmaWVkU2VxdWVuY2U9dDtjb25zdFtyLGksb109cGUuX2dldEVsZW1lbnRzKGUpLFthLHMsbF09cGUuX2dldEVsZW1lbnRzKHQpO3RoaXMuX2hhc1N0cmluZ3M9byYmbCx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1pLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9YSx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPXMsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkoZSl7cmV0dXJuIGUubGVuZ3RoPjAmJiJzdHJpbmciPT10eXBlb2YgZVswXX1zdGF0aWMgX2dldEVsZW1lbnRzKGUpe2NvbnN0IHQ9ZS5nZXRFbGVtZW50cygpO2lmKHBlLl9pc1N0cmluZ0FycmF5KHQpKXtjb25zdCBlPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZVtuXT11ZSh0W25dLDApO3JldHVyblt0LGUsITBdfXJldHVybiB0IGluc3RhbmNlb2YgSW50MzJBcnJheT9bW10sdCwhMV06W1tdLG5ldyBJbnQzMkFycmF5KHQpLCExXX1FbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1FbGVtZW50c0FyZVN0cmljdEVxdWFsKGUsdCl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlLHQpKXJldHVybiExO3JldHVybiBwZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLGUpPT09cGUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSx0KX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRTdHJpY3RFbGVtZW50P2UuZ2V0U3RyaWN0RWxlbWVudCh0KTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1Db21wdXRlRGlmZihlKXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSxlKX1fQ29tcHV0ZURpZmYoZSx0LG4scixpKXtjb25zdCBvPVshMV07bGV0IGE9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLG8pO3JldHVybiBpJiYoYT10aGlzLlByZXR0aWZ5Q2hhbmdlcyhhKSkse3F1aXRFYXJseTpvWzBdLGNoYW5nZXM6YX19Q29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LG4scixpKXtmb3IoaVswXT0hMTtlPD10JiZuPD1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZSxuKTspZSsrLG4rKztmb3IoO3Q+PWUmJnI+PW4mJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LHIpOyl0LS0sci0tO2lmKGU+dHx8bj5yKXtsZXQgaTtyZXR1cm4gbjw9cj8oZGUuQXNzZXJ0KGU9PT10KzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGk9W25ldyBsZShlLDAsbixyLW4rMSldKTplPD10PyhkZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bbmV3IGxlKGUsdC1lKzEsbiwwKV0pOihkZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksZGUuQXNzZXJ0KG49PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGk9W10pLGl9Y29uc3Qgbz1bMF0sYT1bMF0scz10aGlzLkNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLG8sYSxpKSxsPW9bMF0sYz1hWzBdO2lmKG51bGwhPT1zKXJldHVybiBzO2lmKCFpWzBdKXtjb25zdCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSxsLG4sYyxpKTtsZXQgYT1bXTtyZXR1cm4gYT1pWzBdP1tuZXcgbGUobCsxLHQtKGwrMSkrMSxjKzEsci0oYysxKSsxKV06dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShsKzEsdCxjKzEscixpKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhvLGEpfXJldHVybltuZXcgbGUoZSx0LWUrMSxuLHItbisxKV19V0FMS1RSQUNFKGUsdCxuLHIsaSxvLGEscyxsLGMsdSxoLGYsZCxtLGcscCxiKXtsZXQgdj1udWxsLHk9bnVsbCxDPW5ldyBnZSx3PXQsXz1uLFM9ZlswXS1nWzBdLXIsQT0tMTA3Mzc0MTgyNCxFPXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCB0PVMrZTt0PT09d3x8dDxfJiZsW3QtMV08bFt0KzFdPyhkPSh1PWxbdCsxXSktUy1yLHU8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9dSxDLkFkZE1vZGlmaWVkRWxlbWVudCh1KzEsZCksUz10KzEtZSk6KGQ9KHU9bFt0LTFdKzEpLVMtcix1PEEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUtMSxDLkFkZE9yaWdpbmFsRWxlbWVudCh1LGQrMSksUz10LTEtZSksRT49MCYmKGU9KGw9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W0VdKVswXSx3PTEsXz1sLmxlbmd0aC0xKX13aGlsZSgtLUU+PS0xKTtpZih2PUMuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxiWzBdKXtsZXQgZT1mWzBdKzEsdD1nWzBdKzE7aWYobnVsbCE9PXYmJnYubGVuZ3RoPjApe2NvbnN0IG49dlt2Lmxlbmd0aC0xXTtlPU1hdGgubWF4KGUsbi5nZXRPcmlnaW5hbEVuZCgpKSx0PU1hdGgubWF4KHQsbi5nZXRNb2RpZmllZEVuZCgpKX15PVtuZXcgbGUoZSxoLWUrMSx0LG0tdCsxKV19ZWxzZXtDPW5ldyBnZSx3PW8sXz1hLFM9ZlswXS1nWzBdLXMsQT0xMDczNzQxODI0LEU9cD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IGU9UytpO2U9PT13fHxlPF8mJmNbZS0xXT49Y1tlKzFdPyhkPSh1PWNbZSsxXS0xKS1TLXMsdT5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11KzEsQy5BZGRPcmlnaW5hbEVsZW1lbnQodSsxLGQrMSksUz1lKzEtaSk6KGQ9KHU9Y1tlLTFdKS1TLXMsdT5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11LEMuQWRkTW9kaWZpZWRFbGVtZW50KHUrMSxkKzEpLFM9ZS0xLWkpLEU+PTAmJihpPShjPXRoaXMubV9yZXZlcnNlSGlzdG9yeVtFXSlbMF0sdz0xLF89Yy5sZW5ndGgtMSl9d2hpbGUoLS1FPj0tMSk7eT1DLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXModix5KX1Db21wdXRlUmVjdXJzaW9uUG9pbnQoZSx0LG4scixpLG8sYSl7bGV0IHM9MCxsPTAsYz0wLHU9MCxoPTAsZj0wO2UtLSxuLS0saVswXT0wLG9bMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IGQ9dC1lKyhyLW4pLG09ZCsxLGc9bmV3IEludDMyQXJyYXkobSkscD1uZXcgSW50MzJBcnJheShtKSxiPXItbix2PXQtZSx5PWUtbixDPXQtcix3PSh2LWIpJTI9PTA7Z1tiXT1lLHBbdl09dCxhWzBdPSExO2ZvcihsZXQgXz0xO188PWQvMisxO18rKyl7bGV0IGQ9MCxTPTA7Yz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGItXyxfLGIsbSksdT10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGIrXyxfLGIsbSk7Zm9yKGxldCBlPWM7ZTw9dTtlKz0yKXtzPWU9PT1jfHxlPHUmJmdbZS0xXTxnW2UrMV0/Z1tlKzFdOmdbZS0xXSsxLGw9cy0oZS1iKS15O2NvbnN0IG49cztmb3IoO3M8dCYmbDxyJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocysxLGwrMSk7KXMrKyxsKys7aWYoZ1tlXT1zLHMrbD5kK1MmJihkPXMsUz1sKSwhdyYmTWF0aC5hYnMoZS12KTw9Xy0xJiZzPj1wW2VdKXJldHVybiBpWzBdPXMsb1swXT1sLG48PXBbZV0mJl88PTE0NDg/dGhpcy5XQUxLVFJBQ0UoYixjLHUseSx2LGgsZixDLGcscCxzLHQsaSxsLHIsbyx3LGEpOm51bGx9Y29uc3QgQT0oZC1lKyhTLW4pLV8pLzI7aWYobnVsbCE9PXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoZCxBKSlyZXR1cm4gYVswXT0hMCxpWzBdPWQsb1swXT1TLEE+MCYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGMsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGwscixvLHcsYSk6KGUrKyxuKyssW25ldyBsZShlLHQtZSsxLG4sci1uKzEpXSk7aD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYtXyxfLHYsbSksZj10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYrXyxfLHYsbSk7Zm9yKGxldCBkPWg7ZDw9ZjtkKz0yKXtzPWQ9PT1ofHxkPGYmJnBbZC0xXT49cFtkKzFdP3BbZCsxXS0xOnBbZC0xXSxsPXMtKGQtdiktQztjb25zdCBtPXM7Zm9yKDtzPmUmJmw+biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHMsbCk7KXMtLSxsLS07aWYocFtkXT1zLHcmJk1hdGguYWJzKGQtYik8PV8mJnM8PWdbZF0pcmV0dXJuIGlbMF09cyxvWzBdPWwsbT49Z1tkXSYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGMsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGwscixvLHcsYSk6bnVsbH1pZihfPD0xNDQ3KXtsZXQgZT1uZXcgSW50MzJBcnJheSh1LWMrMik7ZVswXT1iLWMrMSxtZS5Db3B5MihnLGMsZSwxLHUtYysxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChlKSxlPW5ldyBJbnQzMkFycmF5KGYtaCsyKSxlWzBdPXYtaCsxLG1lLkNvcHkyKHAsaCxlLDEsZi1oKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKGUpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0UoYixjLHUseSx2LGgsZixDLGcscCxzLHQsaSxsLHIsbyx3LGEpfVByZXR0aWZ5Q2hhbmdlcyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLHI9dDxlLmxlbmd0aC0xP2VbdCsxXS5vcmlnaW5hbFN0YXJ0OnRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLGk9dDxlLmxlbmd0aC0xP2VbdCsxXS5tb2RpZmllZFN0YXJ0OnRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLG89bi5vcmlnaW5hbExlbmd0aD4wLGE9bi5tb2RpZmllZExlbmd0aD4wO2Zvcig7bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGg8ciYmbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGg8aSYmKCFvfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpKSYmKCFhfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpKTspe2NvbnN0IGU9dGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkU3RhcnQpO2lmKHRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkmJiFlKWJyZWFrO24ub3JpZ2luYWxTdGFydCsrLG4ubW9kaWZpZWRTdGFydCsrfWxldCBzPVtudWxsXTt0PGUubGVuZ3RoLTEmJnRoaXMuQ2hhbmdlc092ZXJsYXAoZVt0XSxlW3QrMV0scykmJihlW3RdPXNbMF0sZS5zcGxpY2UodCsxLDEpLHQtLSl9Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDt0LS0pe2NvbnN0IG49ZVt0XTtsZXQgcj0wLGk9MDtpZih0PjApe2NvbnN0IG49ZVt0LTFdO3I9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgsaT1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aH1jb25zdCBvPW4ub3JpZ2luYWxMZW5ndGg+MCxhPW4ubW9kaWZpZWRMZW5ndGg+MDtsZXQgcz0wLGw9dGhpcy5fYm91bmRhcnlTY29yZShuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbExlbmd0aCxuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZExlbmd0aCk7Zm9yKGxldCBlPTE7O2UrKyl7Y29uc3QgdD1uLm9yaWdpbmFsU3RhcnQtZSxjPW4ubW9kaWZpZWRTdGFydC1lO2lmKHQ8cnx8YzxpKWJyZWFrO2lmKG8mJiF0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbCh0LHQrbi5vcmlnaW5hbExlbmd0aCkpYnJlYWs7aWYoYSYmIXRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGMsYytuLm1vZGlmaWVkTGVuZ3RoKSlicmVhaztjb25zdCB1PSh0PT09ciYmYz09PWk/NTowKSt0aGlzLl9ib3VuZGFyeVNjb3JlKHQsbi5vcmlnaW5hbExlbmd0aCxjLG4ubW9kaWZpZWRMZW5ndGgpO3U+bCYmKGw9dSxzPWUpfW4ub3JpZ2luYWxTdGFydC09cyxuLm1vZGlmaWVkU3RhcnQtPXM7Y29uc3QgYz1bbnVsbF07dD4wJiZ0aGlzLkNoYW5nZXNPdmVybGFwKGVbdC0xXSxlW3RdLGMpJiYoZVt0LTFdPWNbMF0sZS5zcGxpY2UodCwxKSx0KyspfWlmKHRoaXMuX2hhc1N0cmluZ3MpZm9yKGxldCB0PTEsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWVbdC0xXSxyPWVbdF0saT1yLm9yaWdpbmFsU3RhcnQtbi5vcmlnaW5hbFN0YXJ0LW4ub3JpZ2luYWxMZW5ndGgsbz1uLm9yaWdpbmFsU3RhcnQsYT1yLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aCxzPWEtbyxsPW4ubW9kaWZpZWRTdGFydCxjPXIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoLHU9Yy1sO2lmKGk8NSYmczwyMCYmdTwyMCl7Y29uc3QgZT10aGlzLl9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKG8scyxsLHUsaSk7aWYoZSl7Y29uc3RbdCxvXT1lO3Q9PT1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCYmbz09PW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RofHwobi5vcmlnaW5hbExlbmd0aD10LW4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkTGVuZ3RoPW8tbi5tb2RpZmllZFN0YXJ0LHIub3JpZ2luYWxTdGFydD10K2ksci5tb2RpZmllZFN0YXJ0PW8raSxyLm9yaWdpbmFsTGVuZ3RoPWEtci5vcmlnaW5hbFN0YXJ0LHIubW9kaWZpZWRMZW5ndGg9Yy1yLm1vZGlmaWVkU3RhcnQpfX19cmV0dXJuIGV9X2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UoZSx0LG4scixpKXtpZih0PGl8fHI8aSlyZXR1cm4gbnVsbDtjb25zdCBvPWUrdC1pKzEsYT1uK3ItaSsxO2xldCBzPTAsbD0wLGM9MDtmb3IobGV0IHQ9ZTt0PG87dCsrKWZvcihsZXQgZT1uO2U8YTtlKyspe2NvbnN0IG49dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxlLGkpO24+MCYmbj5zJiYocz1uLGw9dCxjPWUpfXJldHVybiBzPjA/W2wsY106bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUoZSx0LG4pe2xldCByPTA7Zm9yKGxldCBpPTA7aTxuO2krKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlK2ksdCtpKSlyZXR1cm4gMDtyKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2UraV0ubGVuZ3RofXJldHVybiByfV9PcmlnaW5hbElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdKX1fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZih0PjApe2NvbnN0IG49ZSt0O2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShuLTEpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkobikpcmV0dXJuITB9cmV0dXJuITF9X01vZGlmaWVkSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV0pfV9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKHQ+MCl7Y29uc3Qgbj1lK3Q7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KG4tMSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShuKSlyZXR1cm4hMH1yZXR1cm4hMX1fYm91bmRhcnlTY29yZShlLHQsbixyKXtyZXR1cm4odGhpcy5fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCk/MTowKSsodGhpcy5fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KG4scik/MTowKX1Db25jYXRlbmF0ZUNoYW5nZXMoZSx0KXtsZXQgbj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gdC5sZW5ndGg+MD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0sbikpe2NvbnN0IHI9bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBtZS5Db3B5KGUsMCxyLDAsZS5sZW5ndGgtMSkscltlLmxlbmd0aC0xXT1uWzBdLG1lLkNvcHkodCwxLHIsZS5sZW5ndGgsdC5sZW5ndGgtMSkscn17Y29uc3Qgbj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpO3JldHVybiBtZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgpLG1lLkNvcHkodCwwLG4sZS5sZW5ndGgsdC5sZW5ndGgpLG59fUNoYW5nZXNPdmVybGFwKGUsdCxuKXtpZihkZS5Bc3NlcnQoZS5vcmlnaW5hbFN0YXJ0PD10Lm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZGUuQXNzZXJ0KGUubW9kaWZpZWRTdGFydDw9dC5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnR8fGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoPj10Lm1vZGlmaWVkU3RhcnQpe2NvbnN0IHI9ZS5vcmlnaW5hbFN0YXJ0O2xldCBpPWUub3JpZ2luYWxMZW5ndGg7Y29uc3Qgbz1lLm1vZGlmaWVkU3RhcnQ7bGV0IGE9ZS5tb2RpZmllZExlbmd0aDtyZXR1cm4gZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGg+PXQub3JpZ2luYWxTdGFydCYmKGk9dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtZS5vcmlnaW5hbFN0YXJ0KSxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0JiYoYT10Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC1lLm1vZGlmaWVkU3RhcnQpLG5bMF09bmV3IGxlKHIsaSxvLGEpLCEwfXJldHVybiBuWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LG4scil7aWYoZT49MCYmZTxyKXJldHVybiBlO2NvbnN0IGk9dCUyPT0wO2lmKGU8MCl7cmV0dXJuIGk9PT0obiUyPT0wKT8wOjF9cmV0dXJuIGk9PT0oKHItbi0xKSUyPT0wKT9yLTE6ci0yfX1sZXQgYmU7aWYodm9pZCAwIT09Ti52c2NvZGUmJnZvaWQgMCE9PU4udnNjb2RlLnByb2Nlc3Mpe2NvbnN0IGU9Ti52c2NvZGUucHJvY2VzcztiZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGUucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIGUuYXJjaH0sZ2V0IGVudigpe3JldHVybiBlLmVudn0sY3dkOigpPT5lLmN3ZCgpfX1lbHNlIGJlPSJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2Vzcz97Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIHByb2Nlc3MucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIHByb2Nlc3MuYXJjaH0sZ2V0IGVudigpe3JldHVybiBwcm9jZXNzLmVudn0sY3dkOigpPT5wcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfTp7Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGs/IndpbjMyIjpUPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZDooKT0+Ii8ifTtjb25zdCB2ZT1iZS5jd2QseWU9YmUuZW52LENlPWJlLnBsYXRmb3JtLHdlPTQ2LF9lPTQ3LFNlPTkyLEFlPTU4O2NsYXNzIEVlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LG4pe2xldCByOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhyPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IGk9LTEhPT1lLmluZGV4T2YoIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IG89YFRoZSAiJHtlfSIgJHtpfSAke3J9IG9mIHR5cGUgJHt0fWA7bys9Ii4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBuLHN1cGVyKG8pLHRoaXMuY29kZT0iRVJSX0lOVkFMSURfQVJHX1RZUEUifX1mdW5jdGlvbiBOZShlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRWUodCwic3RyaW5nIixlKX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4gZT09PV9lfHxlPT09U2V9ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIGU9PT1fZX1mdW5jdGlvbiBrZShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfHxlPj05NyYmZTw9MTIyfWZ1bmN0aW9uIFRlKGUsdCxuLHIpe2xldCBpPSIiLG89MCxhPS0xLHM9MCxsPTA7Zm9yKGxldCBjPTA7Yzw9ZS5sZW5ndGg7KytjKXtpZihjPGUubGVuZ3RoKWw9ZS5jaGFyQ29kZUF0KGMpO2Vsc2V7aWYocihsKSlicmVhaztsPV9lfWlmKHIobCkpe2lmKGE9PT1jLTF8fDE9PT1zKTtlbHNlIGlmKDI9PT1zKXtpZihpLmxlbmd0aDwyfHwyIT09b3x8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09d2V8fGkuY2hhckNvZGVBdChpLmxlbmd0aC0yKSE9PXdlKXtpZihpLmxlbmd0aD4yKXtjb25zdCBlPWkubGFzdEluZGV4T2Yobik7LTE9PT1lPyhpPSIiLG89MCk6KGk9aS5zbGljZSgwLGUpLG89aS5sZW5ndGgtMS1pLmxhc3RJbmRleE9mKG4pKSxhPWMscz0wO2NvbnRpbnVlfWlmKDAhPT1pLmxlbmd0aCl7aT0iIixvPTAsYT1jLHM9MDtjb250aW51ZX19dCYmKGkrPWkubGVuZ3RoPjA/YCR7bn0uLmA6Ii4uIixvPTIpfWVsc2UgaS5sZW5ndGg+MD9pKz1gJHtufSR7ZS5zbGljZShhKzEsYyl9YDppPWUuc2xpY2UoYSsxLGMpLG89Yy1hLTE7YT1jLHM9MH1lbHNlIGw9PT13ZSYmLTEhPT1zPysrczpzPS0xfXJldHVybiBpfWZ1bmN0aW9uIE9lKGUsdCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgRWUoInBhdGhPYmplY3QiLCJPYmplY3QiLHQpO2NvbnN0IG49dC5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8YCR7dC5uYW1lfHwiIn0ke3QuZXh0fHwiIn1gO3JldHVybiBuP249PT10LnJvb3Q/YCR7bn0ke3J9YDpgJHtufSR7ZX0ke3J9YDpyfWNvbnN0IE1lPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIscj0hMTtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0tMTtpLS0pe2xldCBvO2lmKGk+PTApe2lmKG89ZVtpXSxOZShvLCJwYXRoIiksMD09PW8ubGVuZ3RoKWNvbnRpbnVlfWVsc2UgMD09PXQubGVuZ3RoP289dmUoKToobz15ZVtgPSR7dH1gXXx8dmUoKSwodm9pZCAwPT09b3x8by5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJm8uY2hhckNvZGVBdCgyKT09PVNlKSYmKG89YCR7dH1cXGApKTtjb25zdCBhPW8ubGVuZ3RoO2xldCBzPTAsbD0iIixjPSExO2NvbnN0IHU9by5jaGFyQ29kZUF0KDApO2lmKDE9PT1hKXhlKHUpJiYocz0xLGM9ITApO2Vsc2UgaWYoeGUodSkpaWYoYz0hMCx4ZShvLmNoYXJDb2RlQXQoMSkpKXtsZXQgZT0yLHQ9ZTtmb3IoO2U8YSYmIXhlKG8uY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGEmJmUhPT10KXtjb25zdCBuPW8uc2xpY2UodCxlKTtmb3IodD1lO2U8YSYmeGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YSYmZSE9PXQpe2Zvcih0PWU7ZTxhJiYheGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2UhPT1hJiZlPT09dHx8KGw9YFxcXFwke259XFwke28uc2xpY2UodCxlKX1gLHM9ZSl9fX1lbHNlIHM9MTtlbHNlIGtlKHUpJiZvLmNoYXJDb2RlQXQoMSk9PT1BZSYmKGw9by5zbGljZSgwLDIpLHM9MixhPjImJnhlKG8uY2hhckNvZGVBdCgyKSkmJihjPSEwLHM9MykpO2lmKGwubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYobC50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1sO2lmKHIpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke28uc2xpY2Uocyl9XFwke259YCxyPWMsYyYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1UZShuLCFyLCJcXCIseGUpLHI/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe05lKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiIuIjtsZXQgbixyPTAsaT0hMTtjb25zdCBvPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4gTGUobyk/IlxcIjplO2lmKHhlKG8pKWlmKGk9ITAseGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiF4ZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Y29uc3QgYT1lLnNsaWNlKG8saSk7Zm9yKG89aTtpPHQmJnhlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIXhlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm5gXFxcXCR7YX1cXCR7ZS5zbGljZShvKX1cXGA7aSE9PW8mJihuPWBcXFxcJHthfVxcJHtlLnNsaWNlKG8saSl9YCxyPWkpfX19ZWxzZSByPTE7ZWxzZSBrZShvKSYmZS5jaGFyQ29kZUF0KDEpPT09QWUmJihuPWUuc2xpY2UoMCwyKSxyPTIsdD4yJiZ4ZShlLmNoYXJDb2RlQXQoMikpJiYoaT0hMCxyPTMpKTtsZXQgYT1yPHQ/VGUoZS5zbGljZShyKSwhaSwiXFwiLHhlKToiIjtyZXR1cm4gMCE9PWEubGVuZ3RofHxpfHwoYT0iLiIpLGEubGVuZ3RoPjAmJnhlKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHZvaWQgMD09PW4/aT9gXFwke2F9YDphOmk/YCR7bn1cXCR7YX1gOmAke259JHthfWB9LGlzQWJzb2x1dGUoZSl7TmUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHhlKG4pfHx0PjImJmtlKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT1BZSYmeGUoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3Ipe2NvbnN0IGk9ZVtyXTtOZShpLCJwYXRoIiksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1uPWk6dCs9YFxcJHtpfWApfWlmKHZvaWQgMD09PXQpcmV0dXJuIi4iO2xldCByPSEwLGk9MDtpZigic3RyaW5nIj09dHlwZW9mIG4mJnhlKG4uY2hhckNvZGVBdCgwKSkpeysraTtjb25zdCBlPW4ubGVuZ3RoO2U+MSYmeGUobi5jaGFyQ29kZUF0KDEpKSYmKCsraSxlPjImJih4ZShuLmNoYXJDb2RlQXQoMikpPysraTpyPSExKSl9aWYocil7Zm9yKDtpPHQubGVuZ3RoJiZ4ZSh0LmNoYXJDb2RlQXQoaSkpOylpKys7aT49MiYmKHQ9YFxcJHt0LnNsaWNlKGkpfWApfXJldHVybiBNZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoTmUoZSwiZnJvbSIpLE5lKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1NZS5yZXNvbHZlKGUpLHI9TWUucmVzb2x2ZSh0KTtpZihuPT09cilyZXR1cm4iIjtpZigoZT1uLnRvTG93ZXJDYXNlKCkpPT09KHQ9ci50b0xvd2VyQ2FzZSgpKSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09U2U7KWkrKztsZXQgbz1lLmxlbmd0aDtmb3IoO28tMT5pJiZlLmNoYXJDb2RlQXQoby0xKT09PVNlOylvLS07Y29uc3QgYT1vLWk7bGV0IHM9MDtmb3IoO3M8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChzKT09PVNlOylzKys7bGV0IGw9dC5sZW5ndGg7Zm9yKDtsLTE+cyYmdC5jaGFyQ29kZUF0KGwtMSk9PT1TZTspbC0tO2NvbnN0IGM9bC1zLHU9YTxjP2E6YztsZXQgaD0tMSxmPTA7Zm9yKDtmPHU7ZisrKXtjb25zdCBuPWUuY2hhckNvZGVBdChpK2YpO2lmKG4hPT10LmNoYXJDb2RlQXQocytmKSlicmVhaztuPT09U2UmJihoPWYpfWlmKGYhPT11KXtpZigtMT09PWgpcmV0dXJuIHJ9ZWxzZXtpZihjPnUpe2lmKHQuY2hhckNvZGVBdChzK2YpPT09U2UpcmV0dXJuIHIuc2xpY2UocytmKzEpO2lmKDI9PT1mKXJldHVybiByLnNsaWNlKHMrZil9YT51JiYoZS5jaGFyQ29kZUF0KGkrZik9PT1TZT9oPWY6Mj09PWYmJihoPTMpKSwtMT09PWgmJihoPTApfWxldCBkPSIiO2ZvcihmPWkraCsxO2Y8PW87KytmKWYhPT1vJiZlLmNoYXJDb2RlQXQoZikhPT1TZXx8KGQrPTA9PT1kLmxlbmd0aD8iLi4iOiJcXC4uIik7cmV0dXJuIHMrPWgsZC5sZW5ndGg+MD9gJHtkfSR7ci5zbGljZShzLGwpfWA6KHIuY2hhckNvZGVBdChzKT09PVNlJiYrK3Msci5zbGljZShzLGwpKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGU7aWYoMD09PWUubGVuZ3RoKXJldHVybiIiO2NvbnN0IHQ9TWUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1TZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09U2Upe2NvbnN0IGU9dC5jaGFyQ29kZUF0KDIpO2lmKDYzIT09ZSYmZSE9PXdlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihrZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT1BZSYmdC5jaGFyQ29kZUF0KDIpPT09U2UpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtOZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiB4ZShpKT9lOiIuIjtpZih4ZShpKSl7aWYobj1yPTEseGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiF4ZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJnhlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIXhlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm4gZTtpIT09byYmKG49cj1pKzEpfX19fWVsc2Uga2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PUFlJiYobj10PjImJnhlKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IG89LTEsYT0hMDtmb3IobGV0IG49dC0xO24+PXI7LS1uKWlmKHhlKGUuY2hhckNvZGVBdChuKSkpe2lmKCFhKXtvPW47YnJlYWt9fWVsc2UgYT0hMTtpZigtMT09PW8pe2lmKC0xPT09bilyZXR1cm4iLiI7bz1ufXJldHVybiBlLnNsaWNlKDAsbyl9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYmTmUodCwiZXh0IiksTmUoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYoZS5sZW5ndGg+PTImJmtlKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PUFlJiYocj0yKSx2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEscz0tMTtmb3Iobj1lLmxlbmd0aC0xO24+PXI7LS1uKXtjb25zdCBsPWUuY2hhckNvZGVBdChuKTtpZih4ZShsKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYobz0hMSxzPW4rMSksYT49MCYmKGw9PT10LmNoYXJDb2RlQXQoYSk/LTE9PS0tYSYmKGk9bik6KGE9LTEsaT1zKSl9cmV0dXJuIHI9PT1pP2k9czotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbilpZih4ZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe05lKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEsbz0hMCxhPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PUFlJiZrZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PXQ7LS1zKXtjb25zdCB0PWUuY2hhckNvZGVBdChzKTtpZih4ZSh0KSl7aWYoIW8pe3I9cysxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPXMrMSksdD09PXdlPy0xPT09bj9uPXM6MSE9PWEmJihhPTEpOi0xIT09biYmKGE9LTEpfXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6T2UuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe05lKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcj0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiB4ZShpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZih4ZShpKSl7aWYocj0xLHhlKGUuY2hhckNvZGVBdCgxKSkpe2xldCB0PTIsaT10O2Zvcig7dDxuJiYheGUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiZ4ZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7aWYodDxuJiZ0IT09aSl7Zm9yKGk9dDt0PG4mJiF4ZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7dD09PW4/cj10OnQhPT1pJiYocj10KzEpfX19fWVsc2UgaWYoa2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PUFlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHI9Mix4ZShlLmNoYXJDb2RlQXQoMikpKXtpZigzPT09bilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBvPS0xLGE9cixzPS0xLGw9ITAsYz1lLmxlbmd0aC0xLHU9MDtmb3IoO2M+PXI7LS1jKWlmKGk9ZS5jaGFyQ29kZUF0KGMpLHhlKGkpKXtpZighbCl7YT1jKzE7YnJlYWt9fWVsc2UtMT09PXMmJihsPSExLHM9YysxKSxpPT09d2U/LTE9PT1vP289YzoxIT09dSYmKHU9MSk6LTEhPT1vJiYodT0tMSk7cmV0dXJuLTEhPT1zJiYoLTE9PT1vfHwwPT09dXx8MT09PXUmJm89PT1zLTEmJm89PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGEscyk6KHQubmFtZT1lLnNsaWNlKGEsbyksdC5iYXNlPWUuc2xpY2UoYSxzKSx0LmV4dD1lLnNsaWNlKG8scykpKSx0LmRpcj1hPjAmJmEhPT1yP2Uuc2xpY2UoMCxhLTEpOnQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sSWU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTp2ZSgpO05lKGksInBhdGgiKSwwIT09aS5sZW5ndGgmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09X2UpfXJldHVybiB0PVRlKHQsIW4sIi8iLExlKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKE5lKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09X2Usbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT1fZTtyZXR1cm4gMD09PShlPVRlKGUsIXQsIi8iLExlKSkubGVuZ3RoP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZTplPT4oTmUoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PV9lKSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtOZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1yOnQrPWAvJHtyfWApfXJldHVybiB2b2lkIDA9PT10PyIuIjpJZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoTmUoZSwiZnJvbSIpLE5lKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9SWUucmVzb2x2ZShlKSk9PT0odD1JZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjtjb25zdCBuPWUubGVuZ3RoLHI9bi0xLGk9dC5sZW5ndGgtMSxvPXI8aT9yOmk7bGV0IGE9LTEscz0wO2Zvcig7czxvO3MrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMStzKTtpZihuIT09dC5jaGFyQ29kZUF0KDErcykpYnJlYWs7bj09PV9lJiYoYT1zKX1pZihzPT09bylpZihpPm8pe2lmKHQuY2hhckNvZGVBdCgxK3MpPT09X2UpcmV0dXJuIHQuc2xpY2UoMStzKzEpO2lmKDA9PT1zKXJldHVybiB0LnNsaWNlKDErcyl9ZWxzZSByPm8mJihlLmNoYXJDb2RlQXQoMStzKT09PV9lP2E9czowPT09cyYmKGE9MCkpO2xldCBsPSIiO2ZvcihzPTErYSsxO3M8PW47KytzKXMhPT1uJiZlLmNoYXJDb2RlQXQocykhPT1fZXx8KGwrPTA9PT1sLmxlbmd0aD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtsfSR7dC5zbGljZSgxK2EpfWB9LHRvTmFtZXNwYWNlZFBhdGg6ZT0+ZSxkaXJuYW1lKGUpe2lmKE5lKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09X2U7bGV0IG49LTEscj0hMDtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0xOy0tdClpZihlLmNoYXJDb2RlQXQodCk9PT1fZSl7aWYoIXIpe249dDticmVha319ZWxzZSByPSExO3JldHVybi0xPT09bj90PyIvIjoiLiI6dCYmMT09PW4/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYmTmUodCwiZXh0IiksTmUoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYodm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3QgbD1lLmNoYXJDb2RlQXQobik7aWYobD09PV9lKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PXMmJihvPSExLHM9bisxKSxhPj0wJiYobD09PXQuY2hhckNvZGVBdChhKT8tMT09LS1hJiYoaT1uKTooYT0tMSxpPXMpKX1yZXR1cm4gcj09PWk/aT1zOi0xPT09aSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UocixpKX1mb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWlmKGUuY2hhckNvZGVBdChuKT09PV9lKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe05lKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscj0tMSxpPSEwLG89MDtmb3IobGV0IGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7aWYocyE9PV9lKS0xPT09ciYmKGk9ITEscj1hKzEpLHM9PT13ZT8tMT09PXQ/dD1hOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtuPWErMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PXJ8fDA9PT1vfHwxPT09byYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpPZS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtOZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09X2U7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxvPTAsYT0tMSxzPSEwLGw9ZS5sZW5ndGgtMSxjPTA7Zm9yKDtsPj1yOy0tbCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobCk7aWYodCE9PV9lKS0xPT09YSYmKHM9ITEsYT1sKzEpLHQ9PT13ZT8tMT09PWk/aT1sOjEhPT1jJiYoYz0xKTotMSE9PWkmJihjPS0xKTtlbHNlIGlmKCFzKXtvPWwrMTticmVha319aWYoLTEhPT1hKXtjb25zdCByPTA9PT1vJiZuPzE6bzstMT09PWl8fDA9PT1jfHwxPT09YyYmaT09PWEtMSYmaT09PW8rMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocixhKToodC5uYW1lPWUuc2xpY2UocixpKSx0LmJhc2U9ZS5zbGljZShyLGEpLHQuZXh0PWUuc2xpY2UoaSxhKSl9cmV0dXJuIG8+MD90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtJZS53aW4zMj1NZS53aW4zMj1NZSxJZS5wb3NpeD1NZS5wb3NpeD1JZSwid2luMzIiPT09Q2U/TWUubm9ybWFsaXplOkllLm5vcm1hbGl6ZSwid2luMzIiPT09Q2U/TWUucmVzb2x2ZTpJZS5yZXNvbHZlLCJ3aW4zMiI9PT1DZT9NZS5yZWxhdGl2ZTpJZS5yZWxhdGl2ZSwid2luMzIiPT09Q2U/TWUuZGlybmFtZTpJZS5kaXJuYW1lLCJ3aW4zMiI9PT1DZT9NZS5iYXNlbmFtZTpJZS5iYXNlbmFtZSwid2luMzIiPT09Q2U/TWUuZXh0bmFtZTpJZS5leHRuYW1lLCJ3aW4zMiI9PT1DZT9NZS5zZXA6SWUuc2VwO2NvbnN0IFJlPS9eXHdbXHdcZCsuLV0qJC8sUGU9L15cLy8sRmU9L15cL1wvLztmdW5jdGlvbiBEZShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVJlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFQZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihGZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9Y29uc3QgVmU9IiIsS2U9Ii8iLFVlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2NsYXNzIEJle2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvPSExKXsib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHxWZSx0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8VmUsdGhpcy5wYXRoPWUucGF0aHx8VmUsdGhpcy5xdWVyeT1lLnF1ZXJ5fHxWZSx0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fFZlKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXx8dD9lOiJmaWxlIn0oZSxvKSx0aGlzLmF1dGhvcml0eT10fHxWZSx0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PUtlJiYodD1LZSt0KTp0PUtlfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxWZSksdGhpcy5xdWVyeT1yfHxWZSx0aGlzLmZyYWdtZW50PWl8fFZlLERlKHRoaXMsbykpfXN0YXRpYyBpc1VyaShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEJlfHwhIWUmJigic3RyaW5nIj09dHlwZW9mIGUuYXV0aG9yaXR5JiYic3RyaW5nIj09dHlwZW9mIGUuZnJhZ21lbnQmJiJzdHJpbmciPT10eXBlb2YgZS5wYXRoJiYic3RyaW5nIj09dHlwZW9mIGUucXVlcnkmJiJzdHJpbmciPT10eXBlb2YgZS5zY2hlbWUmJiJzdHJpbmciPT10eXBlb2YgZS5mc1BhdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLndpdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvU3RyaW5nKX1nZXQgZnNQYXRoKCl7cmV0dXJuIHplKHRoaXMsITEpfXdpdGgoZSl7aWYoIWUpcmV0dXJuIHRoaXM7bGV0e3NjaGVtZTp0LGF1dGhvcml0eTpuLHBhdGg6cixxdWVyeTppLGZyYWdtZW50Om99PWU7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9VmUpLHZvaWQgMD09PW4/bj10aGlzLmF1dGhvcml0eTpudWxsPT09biYmKG49VmUpLHZvaWQgMD09PXI/cj10aGlzLnBhdGg6bnVsbD09PXImJihyPVZlKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9VmUpLHZvaWQgMD09PW8/bz10aGlzLmZyYWdtZW50Om51bGw9PT1vJiYobz1WZSksdD09PXRoaXMuc2NoZW1lJiZuPT09dGhpcy5hdXRob3JpdHkmJnI9PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZvPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBxZSh0LG4scixpLG8pfXN0YXRpYyBwYXJzZShlLHQ9ITEpe2NvbnN0IG49VWUuZXhlYyhlKTtyZXR1cm4gbj9uZXcgcWUoblsyXXx8VmUsWmUobls0XXx8VmUpLFplKG5bNV18fFZlKSxaZShuWzddfHxWZSksWmUobls5XXx8VmUpLHQpOm5ldyBxZShWZSxWZSxWZSxWZSxWZSl9c3RhdGljIGZpbGUoZSl7bGV0IHQ9VmU7aWYoayYmKGU9ZS5yZXBsYWNlKC9cXC9nLEtlKSksZVswXT09PUtlJiZlWzFdPT09S2Upe2NvbnN0IG49ZS5pbmRleE9mKEtlLDIpOy0xPT09bj8odD1lLnN1YnN0cmluZygyKSxlPUtlKToodD1lLnN1YnN0cmluZygyLG4pLGU9ZS5zdWJzdHJpbmcobil8fEtlKX1yZXR1cm4gbmV3IHFlKCJmaWxlIix0LGUsVmUsVmUpfXN0YXRpYyBmcm9tKGUpe2NvbnN0IHQ9bmV3IHFlKGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQpO3JldHVybiBEZSh0LCEwKSx0fXN0YXRpYyBqb2luUGF0aChlLC4uLnQpe2lmKCFlLnBhdGgpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBjYW5ub3QgY2FsbCBqb2luUGF0aCBvbiBVUkkgd2l0aG91dCBwYXRoIik7bGV0IG47cmV0dXJuIG49ayYmImZpbGUiPT09ZS5zY2hlbWU/QmUuZmlsZShNZS5qb2luKHplKGUsITApLC4uLnQpKS5wYXRoOkllLmpvaW4oZS5wYXRoLC4uLnQpLGUud2l0aCh7cGF0aDpufSl9dG9TdHJpbmcoZT0hMSl7cmV0dXJuIEdlKHRoaXMsZSl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZShlKXtpZihlKXtpZihlIGluc3RhbmNlb2YgQmUpcmV0dXJuIGU7e2NvbnN0IHQ9bmV3IHFlKGUpO3JldHVybiB0Ll9mb3JtYXR0ZWQ9ZS5leHRlcm5hbCx0Ll9mc1BhdGg9ZS5fc2VwPT09amU/ZS5mc1BhdGg6bnVsbCx0fX1yZXR1cm4gZX19Y29uc3QgamU9az8xOnZvaWQgMDtjbGFzcyBxZSBleHRlbmRzIEJle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb3JtYXR0ZWQ9bnVsbCx0aGlzLl9mc1BhdGg9bnVsbH1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD16ZSh0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKGU9ITEpe3JldHVybiBlP0dlKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9R2UodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgZT17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoZS5mc1BhdGg9dGhpcy5fZnNQYXRoLGUuX3NlcD1qZSksdGhpcy5fZm9ybWF0dGVkJiYoZS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGUucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoZS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoZS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihlLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihlLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGV9fWNvbnN0ICRlPXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gV2UoZSx0KXtsZXQgbixyPS0xO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBvPWUuY2hhckNvZGVBdChpKTtpZihvPj05NyYmbzw9MTIyfHxvPj02NSYmbzw9OTB8fG8+PTQ4JiZvPD01N3x8NDU9PT1vfHw0Nj09PW98fDk1PT09b3x8MTI2PT09b3x8dCYmNDc9PT1vKS0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSx2b2lkIDAhPT1uJiYobis9ZS5jaGFyQXQoaSkpO2Vsc2V7dm9pZCAwPT09biYmKG49ZS5zdWJzdHIoMCxpKSk7Y29uc3QgdD0kZVtvXTt2b2lkIDAhPT10PygtMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksbis9dCk6LTE9PT1yJiYocj1pKX19cmV0dXJuLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIpKSksdm9pZCAwIT09bj9uOmV9ZnVuY3Rpb24gSGUoZSl7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pOzM1PT09cnx8NjM9PT1yPyh2b2lkIDA9PT10JiYodD1lLnN1YnN0cigwLG4pKSx0Kz0kZVtyXSk6dm9pZCAwIT09dCYmKHQrPWVbbl0pfXJldHVybiB2b2lkIDAhPT10P3Q6ZX1mdW5jdGlvbiB6ZShlLHQpe2xldCBuO3JldHVybiBuPWUuYXV0aG9yaXR5JiZlLnBhdGgubGVuZ3RoPjEmJiJmaWxlIj09PWUuc2NoZW1lP2AvLyR7ZS5hdXRob3JpdHl9JHtlLnBhdGh9YDo0Nz09PWUucGF0aC5jaGFyQ29kZUF0KDApJiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJjU4PT09ZS5wYXRoLmNoYXJDb2RlQXQoMik/dD9lLnBhdGguc3Vic3RyKDEpOmUucGF0aFsxXS50b0xvd2VyQ2FzZSgpK2UucGF0aC5zdWJzdHIoMik6ZS5wYXRoLGsmJihuPW4ucmVwbGFjZSgvXC8vZywiXFwiKSksbn1mdW5jdGlvbiBHZShlLHQpe2NvbnN0IG49dD9IZTpXZTtsZXQgcj0iIix7c2NoZW1lOmksYXV0aG9yaXR5Om8scGF0aDphLHF1ZXJ5OnMsZnJhZ21lbnQ6bH09ZTtpZihpJiYocis9aSxyKz0iOiIpLChvfHwiZmlsZSI9PT1pKSYmKHIrPUtlLHIrPUtlKSxvKXtsZXQgZT1vLmluZGV4T2YoIkAiKTtpZigtMSE9PWUpe2NvbnN0IHQ9by5zdWJzdHIoMCxlKTtvPW8uc3Vic3RyKGUrMSksZT10LmluZGV4T2YoIjoiKSwtMT09PWU/cis9bih0LCExKToocis9bih0LnN1YnN0cigwLGUpLCExKSxyKz0iOiIscis9bih0LnN1YnN0cihlKzEpLCExKSkscis9IkAifW89by50b0xvd2VyQ2FzZSgpLGU9by5pbmRleE9mKCI6IiksLTE9PT1lP3IrPW4obywhMSk6KHIrPW4oby5zdWJzdHIoMCxlKSwhMSkscis9by5zdWJzdHIoZSkpfWlmKGEpe2lmKGEubGVuZ3RoPj0zJiY0Nz09PWEuY2hhckNvZGVBdCgwKSYmNTg9PT1hLmNoYXJDb2RlQXQoMikpe2NvbnN0IGU9YS5jaGFyQ29kZUF0KDEpO2U+PTY1JiZlPD05MCYmKGE9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7YS5zdWJzdHIoMyl9YCl9ZWxzZSBpZihhLmxlbmd0aD49MiYmNTg9PT1hLmNoYXJDb2RlQXQoMSkpe2NvbnN0IGU9YS5jaGFyQ29kZUF0KDApO2U+PTY1JiZlPD05MCYmKGE9YCR7U3RyaW5nLmZyb21DaGFyQ29kZShlKzMyKX06JHthLnN1YnN0cigyKX1gKX1yKz1uKGEsITApfXJldHVybiBzJiYocis9Ij8iLHIrPW4ocywhMSkpLGwmJihyKz0iIyIscis9dD9sOldlKGwsITEpKSxyfWZ1bmN0aW9uIEplKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrSmUoZS5zdWJzdHIoMykpOmV9fWNvbnN0IFhlPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIFplKGUpe3JldHVybiBlLm1hdGNoKFhlKT9lLnJlcGxhY2UoWGUsKGU9PkplKGUpKSk6ZX1jbGFzcyBZZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGluZU51bWJlcj1lLHRoaXMuY29sdW1uPXR9d2l0aChlPXRoaXMubGluZU51bWJlcix0PXRoaXMuY29sdW1uKXtyZXR1cm4gZT09PXRoaXMubGluZU51bWJlciYmdD09PXRoaXMuY29sdW1uP3RoaXM6bmV3IFllKGUsdCl9ZGVsdGEoZT0wLHQ9MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrZSx0aGlzLmNvbHVtbit0KX1lcXVhbHMoZSl7cmV0dXJuIFllLmVxdWFscyh0aGlzLGUpfXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4hZSYmIXR8fCEhZSYmISF0JiZlLmxpbmVOdW1iZXI9PT10LmxpbmVOdW1iZXImJmUuY29sdW1uPT09dC5jb2x1bW59aXNCZWZvcmUoZSl7cmV0dXJuIFllLmlzQmVmb3JlKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlKGUsdCl7cmV0dXJuIGUubGluZU51bWJlcjx0LmxpbmVOdW1iZXJ8fCEodC5saW5lTnVtYmVyPGUubGluZU51bWJlcikmJmUuY29sdW1uPHQuY29sdW1ufWlzQmVmb3JlT3JFcXVhbChlKXtyZXR1cm4gWWUuaXNCZWZvcmVPckVxdWFsKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbChlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjw9dC5jb2x1bW59c3RhdGljIGNvbXBhcmUoZSx0KXtjb25zdCBuPTB8ZS5saW5lTnVtYmVyLHI9MHx0LmxpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuY29sdW1uKS0oMHx0LmNvbHVtbil9cmV0dXJuIG4tcn1jbG9uZSgpe3JldHVybiBuZXcgWWUodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdChlKXtyZXR1cm4gbmV3IFllKGUubGluZU51bWJlcixlLmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmNvbHVtbn19Y2xhc3MgUWV7Y29uc3RydWN0b3IoZSx0LG4scil7ZT5ufHxlPT09biYmdD5yPyh0aGlzLnN0YXJ0TGluZU51bWJlcj1uLHRoaXMuc3RhcnRDb2x1bW49cix0aGlzLmVuZExpbmVOdW1iZXI9ZSx0aGlzLmVuZENvbHVtbj10KToodGhpcy5zdGFydExpbmVOdW1iZXI9ZSx0aGlzLnN0YXJ0Q29sdW1uPXQsdGhpcy5lbmRMaW5lTnVtYmVyPW4sdGhpcy5lbmRDb2x1bW49cil9aXNFbXB0eSgpe3JldHVybiBRZS5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KGUpe3JldHVybiBlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24oZSl7cmV0dXJuIFFlLmNvbnRhaW5zUG9zaXRpb24odGhpcyxlKX1zdGF0aWMgY29udGFpbnNQb3NpdGlvbihlLHQpe3JldHVybiEodC5saW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmxpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5saW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuY29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQubGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5jb2x1bW4+ZS5lbmRDb2x1bW4pKX1zdGF0aWMgc3RyaWN0Q29udGFpbnNQb3NpdGlvbihlLHQpe3JldHVybiEodC5saW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmxpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5saW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuY29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPj1lLmVuZENvbHVtbikpfWNvbnRhaW5zUmFuZ2UoZSl7cmV0dXJuIFFlLmNvbnRhaW5zUmFuZ2UodGhpcyxlKX1zdGF0aWMgY29udGFpbnNSYW5nZShlLHQpe3JldHVybiEodC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj5lLmVuZENvbHVtbikpKX1zdHJpY3RDb250YWluc1JhbmdlKGUpe3JldHVybiBRZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsZSl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPj1lLmVuZENvbHVtbikpKX1wbHVzUmFuZ2UoZSl7cmV0dXJuIFFlLnBsdXNSYW5nZSh0aGlzLGUpfXN0YXRpYyBwbHVzUmFuZ2UoZSx0KXtsZXQgbixyLGksbztyZXR1cm4gdC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXI/KG49dC5zdGFydExpbmVOdW1iZXIscj10LnN0YXJ0Q29sdW1uKTp0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyPyhuPXQuc3RhcnRMaW5lTnVtYmVyLHI9TWF0aC5taW4odC5zdGFydENvbHVtbixlLnN0YXJ0Q29sdW1uKSk6KG49ZS5zdGFydExpbmVOdW1iZXIscj1lLnN0YXJ0Q29sdW1uKSx0LmVuZExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyPyhpPXQuZW5kTGluZU51bWJlcixvPXQuZW5kQ29sdW1uKTp0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXI/KGk9dC5lbmRMaW5lTnVtYmVyLG89TWF0aC5tYXgodC5lbmRDb2x1bW4sZS5lbmRDb2x1bW4pKTooaT1lLmVuZExpbmVOdW1iZXIsbz1lLmVuZENvbHVtbiksbmV3IFFlKG4scixpLG8pfWludGVyc2VjdFJhbmdlcyhlKXtyZXR1cm4gUWUuaW50ZXJzZWN0UmFuZ2VzKHRoaXMsZSl9c3RhdGljIGludGVyc2VjdFJhbmdlcyhlLHQpe2xldCBuPWUuc3RhcnRMaW5lTnVtYmVyLHI9ZS5zdGFydENvbHVtbixpPWUuZW5kTGluZU51bWJlcixvPWUuZW5kQ29sdW1uLGE9dC5zdGFydExpbmVOdW1iZXIscz10LnN0YXJ0Q29sdW1uLGw9dC5lbmRMaW5lTnVtYmVyLGM9dC5lbmRDb2x1bW47cmV0dXJuIG48YT8obj1hLHI9cyk6bj09PWEmJihyPU1hdGgubWF4KHIscykpLGk+bD8oaT1sLG89Yyk6aT09PWwmJihvPU1hdGgubWluKG8sYykpLG4+aXx8bj09PWkmJnI+bz9udWxsOm5ldyBRZShuLHIsaSxvKX1lcXVhbHNSYW5nZShlKXtyZXR1cm4gUWUuZXF1YWxzUmFuZ2UodGhpcyxlKX1zdGF0aWMgZXF1YWxzUmFuZ2UoZSx0KXtyZXR1cm4hIWUmJiEhdCYmZS5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PXQuc3RhcnRDb2x1bW4mJmUuZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmZS5lbmRDb2x1bW49PT10LmVuZENvbHVtbn1nZXRFbmRQb3NpdGlvbigpe3JldHVybiBRZS5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24oZSl7cmV0dXJuIG5ldyBZZShlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pfWdldFN0YXJ0UG9zaXRpb24oKXtyZXR1cm4gUWUuZ2V0U3RhcnRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0U3RhcnRQb3NpdGlvbihlKXtyZXR1cm4gbmV3IFllKGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLmVuZExpbmVOdW1iZXIrIiwiK3RoaXMuZW5kQ29sdW1uKyJdIn1zZXRFbmRQb3NpdGlvbihlLHQpe3JldHVybiBuZXcgUWUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbixlLHQpfXNldFN0YXJ0UG9zaXRpb24oZSx0KXtyZXR1cm4gbmV3IFFlKGUsdCx0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiBRZS5jb2xsYXBzZVRvU3RhcnQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9TdGFydChlKXtyZXR1cm4gbmV3IFFlKGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4sZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9c3RhdGljIGZyb21Qb3NpdGlvbnMoZSx0PWUpe3JldHVybiBuZXcgUWUoZS5saW5lTnVtYmVyLGUuY29sdW1uLHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGxpZnQoZSl7cmV0dXJuIGU/bmV3IFFlKGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4sZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKTpudWxsfXN0YXRpYyBpc0lSYW5nZShlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLnN0YXJ0TGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnN0YXJ0Q29sdW1uJiYibnVtYmVyIj09dHlwZW9mIGUuZW5kTGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmVuZENvbHVtbn1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nT3JUb3VjaGluZyhlLHQpe3JldHVybiEoZS5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxlLmVuZExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmZS5lbmRDb2x1bW48dC5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48ZS5zdGFydENvbHVtbil9c3RhdGljIGFyZUludGVyc2VjdGluZyhlLHQpe3JldHVybiEoZS5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxlLmVuZExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmZS5lbmRDb2x1bW48PXQuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPD1lLnN0YXJ0Q29sdW1uKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKGUsdCl7aWYoZSYmdCl7Y29uc3Qgbj0wfGUuc3RhcnRMaW5lTnVtYmVyLHI9MHx0LnN0YXJ0TGluZU51bWJlcjtpZihuPT09cil7Y29uc3Qgbj0wfGUuc3RhcnRDb2x1bW4scj0wfHQuc3RhcnRDb2x1bW47aWYobj09PXIpe2NvbnN0IG49MHxlLmVuZExpbmVOdW1iZXIscj0wfHQuZW5kTGluZU51bWJlcjtpZihuPT09cil7cmV0dXJuKDB8ZS5lbmRDb2x1bW4pLSgwfHQuZW5kQ29sdW1uKX1yZXR1cm4gbi1yfXJldHVybiBuLXJ9cmV0dXJuIG4tcn1yZXR1cm4oZT8xOjApLSh0PzE6MCl9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ0VuZHMoZSx0KXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyP2UuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW4/ZS5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlcj9lLnN0YXJ0Q29sdW1uLXQuc3RhcnRDb2x1bW46ZS5zdGFydExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXI6ZS5lbmRDb2x1bW4tdC5lbmRDb2x1bW46ZS5lbmRMaW5lTnVtYmVyLXQuZW5kTGluZU51bWJlcn1zdGF0aWMgc3BhbnNNdWx0aXBsZUxpbmVzKGUpe3JldHVybiBlLmVuZExpbmVOdW1iZXI+ZS5zdGFydExpbmVOdW1iZXJ9dG9KU09OKCl7cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIGV0KGUsdCxuLHIpe3JldHVybiBuZXcgcGUoZSx0LG4pLkNvbXB1dGVEaWZmKHIpfWNsYXNzIHR0e2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9W10sbj1bXTtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspdFtyXT1hdChlW3JdLDEpLG5bcl09c3QoZVtyXSwxKTt0aGlzLmxpbmVzPWUsdGhpcy5fc3RhcnRDb2x1bW5zPXQsdGhpcy5fZW5kQ29sdW1ucz1ufWdldEVsZW1lbnRzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxuPXRoaXMubGluZXMubGVuZ3RoO3Q8bjt0KyspZVt0XT10aGlzLmxpbmVzW3RdLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbdF0tMSx0aGlzLl9lbmRDb2x1bW5zW3RdLTEpO3JldHVybiBlfWdldFN0cmljdEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMubGluZXNbZV19Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQsbil7Y29uc3Qgcj1bXSxpPVtdLG89W107bGV0IGE9MDtmb3IobGV0IHM9dDtzPD1uO3MrKyl7Y29uc3QgdD10aGlzLmxpbmVzW3NdLG49ZT90aGlzLl9zdGFydENvbHVtbnNbc106MSxsPWU/dGhpcy5fZW5kQ29sdW1uc1tzXTp0Lmxlbmd0aCsxO2ZvcihsZXQgZT1uO2U8bDtlKyspclthXT10LmNoYXJDb2RlQXQoZS0xKSxpW2FdPXMrMSxvW2FdPWUsYSsrfXJldHVybiBuZXcgbnQocixpLG8pfX1jbGFzcyBudHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5fY2hhckNvZGVzPWUsdGhpcy5fbGluZU51bWJlcnM9dCx0aGlzLl9jb2x1bW5zPW59Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fY2hhckNvZGVzfWdldFN0YXJ0TGluZU51bWJlcihlKXtyZXR1cm4gdGhpcy5fbGluZU51bWJlcnNbZV19Z2V0U3RhcnRDb2x1bW4oZSl7cmV0dXJuIHRoaXMuX2NvbHVtbnNbZV19Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4gdGhpcy5fbGluZU51bWJlcnNbZV19Z2V0RW5kQ29sdW1uKGUpe3JldHVybiB0aGlzLl9jb2x1bW5zW2VdKzF9fWNsYXNzIHJ0e2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvLGEscyl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1yLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9aSx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49byx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1hLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49c31zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UoZSx0LG4pe2xldCByLGksbyxhLHMsbCxjLHU7cmV0dXJuIDA9PT1lLm9yaWdpbmFsTGVuZ3RoPyhyPTAsaT0wLG89MCxhPTApOihyPXQuZ2V0U3RhcnRMaW5lTnVtYmVyKGUub3JpZ2luYWxTdGFydCksaT10LmdldFN0YXJ0Q29sdW1uKGUub3JpZ2luYWxTdGFydCksbz10LmdldEVuZExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSksYT10LmdldEVuZENvbHVtbihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSksMD09PWUubW9kaWZpZWRMZW5ndGg/KHM9MCxsPTAsYz0wLHU9MCk6KHM9bi5nZXRTdGFydExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0KSxsPW4uZ2V0U3RhcnRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0KSxjPW4uZ2V0RW5kTGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKSx1PW4uZ2V0RW5kQ29sdW1uKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpKSxuZXcgcnQocixpLG8sYSxzLGwsYyx1KX19Y2xhc3MgaXR7Y29uc3RydWN0b3IoZSx0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KGUsdCxuLHIsaSxvLGEpe2xldCBzLGwsYyx1LGg7aWYoMD09PXQub3JpZ2luYWxMZW5ndGg/KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KS0xLGw9MCk6KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxsPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSksMD09PXQubW9kaWZpZWRMZW5ndGg/KGM9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KS0xLHU9MCk6KGM9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSx1PXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSksbyYmdC5vcmlnaW5hbExlbmd0aD4wJiZ0Lm9yaWdpbmFsTGVuZ3RoPDIwJiZ0Lm1vZGlmaWVkTGVuZ3RoPjAmJnQubW9kaWZpZWRMZW5ndGg8MjAmJmkoKSl7Y29uc3Qgbz1uLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQub3JpZ2luYWxTdGFydCx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxzPXIuY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5tb2RpZmllZFN0YXJ0LHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO2xldCBsPWV0KG8scyxpLCEwKS5jaGFuZ2VzO2EmJihsPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IHQ9W2VbMF1dO2xldCBuPXRbMF07Zm9yKGxldCByPTEsaT1lLmxlbmd0aDtyPGk7cisrKXtjb25zdCBpPWVbcl0sbz1pLm9yaWdpbmFsU3RhcnQtKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoKSxhPWkubW9kaWZpZWRTdGFydC0obi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpO01hdGgubWluKG8sYSk8Mz8obi5vcmlnaW5hbExlbmd0aD1pLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1pLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aC1uLm1vZGlmaWVkU3RhcnQpOih0LnB1c2goaSksbj1pKX1yZXR1cm4gdH0obCkpLGg9W107Zm9yKGxldCBlPTAsdD1sLmxlbmd0aDtlPHQ7ZSsrKWgucHVzaChydC5jcmVhdGVGcm9tRGlmZkNoYW5nZShsW2VdLG8scykpfXJldHVybiBuZXcgaXQocyxsLGMsdSxoKX19Y2xhc3Mgb3R7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzPW4uc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcz1uLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZT1uLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmY9bi5zaG91bGRNYWtlUHJldHR5RGlmZix0aGlzLm9yaWdpbmFsTGluZXM9ZSx0aGlzLm1vZGlmaWVkTGluZXM9dCx0aGlzLm9yaWdpbmFsPW5ldyB0dChlKSx0aGlzLm1vZGlmaWVkPW5ldyB0dCh0KSx0aGlzLmNvbnRpbnVlTGluZURpZmY9bHQobi5tYXhDb21wdXRhdGlvblRpbWUpLHRoaXMuY29udGludWVDaGFyRGlmZj1sdCgwPT09bi5tYXhDb21wdXRhdGlvblRpbWU/MDpNYXRoLm1pbihuLm1heENvbXB1dGF0aW9uVGltZSw1ZTMpKX1jb21wdXRlRGlmZigpe2lmKDE9PT10aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMub3JpZ2luYWwubGluZXNbMF0ubGVuZ3RoKXJldHVybiAxPT09dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD97cXVpdEVhcmx5OiExLGNoYW5nZXM6W119OntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjEsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgsY2hhckNoYW5nZXM6W3ttb2RpZmllZEVuZENvbHVtbjowLG1vZGlmaWVkRW5kTGluZU51bWJlcjowLG1vZGlmaWVkU3RhcnRDb2x1bW46MCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjowLG9yaWdpbmFsRW5kQ29sdW1uOjAsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjAsb3JpZ2luYWxTdGFydENvbHVtbjowLG9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjB9XX1dfTtpZigxPT09dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aClyZXR1cm57cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjp0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjoxLGNoYXJDaGFuZ2VzOlt7bW9kaWZpZWRFbmRDb2x1bW46MCxtb2RpZmllZEVuZExpbmVOdW1iZXI6MCxtb2RpZmllZFN0YXJ0Q29sdW1uOjAsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MCxvcmlnaW5hbEVuZENvbHVtbjowLG9yaWdpbmFsRW5kTGluZU51bWJlcjowLG9yaWdpbmFsU3RhcnRDb2x1bW46MCxvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjowfV19XX07Y29uc3QgZT1ldCh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLHQ9ZS5jaGFuZ2VzLG49ZS5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZS5wdXNoKGl0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdFtuXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6bixjaGFuZ2VzOmV9fWNvbnN0IHI9W107bGV0IGk9MCxvPTA7Zm9yKGxldCBlPS0xLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3QgYT1lKzE8bj90W2UrMV06bnVsbCxzPWE/YS5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsbD1hP2EubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7aTxzJiZvPGw7KXtjb25zdCBlPXRoaXMub3JpZ2luYWxMaW5lc1tpXSx0PXRoaXMubW9kaWZpZWRMaW5lc1tvXTtpZihlIT09dCl7e2xldCBuPWF0KGUsMSksYT1hdCh0LDEpO2Zvcig7bj4xJiZhPjE7KXtpZihlLmNoYXJDb2RlQXQobi0yKSE9PXQuY2hhckNvZGVBdChhLTIpKWJyZWFrO24tLSxhLS19KG4+MXx8YT4xKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGkrMSwxLG4sbysxLDEsYSl9e2xldCBuPXN0KGUsMSksYT1zdCh0LDEpO2NvbnN0IHM9ZS5sZW5ndGgrMSxsPXQubGVuZ3RoKzE7Zm9yKDtuPHMmJmE8bDspe2lmKGUuY2hhckNvZGVBdChuLTEpIT09ZS5jaGFyQ29kZUF0KGEtMSkpYnJlYWs7bisrLGErK30objxzfHxhPGwpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLG4scyxvKzEsYSxsKX19aSsrLG8rK31hJiYoci5wdXNoKGl0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsYSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLGkrPWEub3JpZ2luYWxMZW5ndGgsbys9YS5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTpuLGNoYW5nZXM6cn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSl7aWYodGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSkpcmV0dXJuO2xldCBzO3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiYocz1bbmV3IHJ0KHQsbix0LHIsaSxvLGksYSldKSxlLnB1c2gobmV3IGl0KHQsdCxpLGkscykpfV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKXtjb25zdCBzPWUubGVuZ3RoO2lmKDA9PT1zKXJldHVybiExO2NvbnN0IGw9ZVtzLTFdO3JldHVybiAwIT09bC5vcmlnaW5hbEVuZExpbmVOdW1iZXImJjAhPT1sLm1vZGlmaWVkRW5kTGluZU51bWJlciYmKGwub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzE9PT10JiZsLm1vZGlmaWVkRW5kTGluZU51bWJlcisxPT09aSYmKGwub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXQsbC5tb2RpZmllZEVuZExpbmVOdW1iZXI9aSx0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBydCh0LG4sdCxyLGksbyxpLGEpKSwhMCkpfX1mdW5jdGlvbiBhdChlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWUuY2hhckNvZGVBdCh0KTtpZigzMiE9PW4mJjkhPT1uKXJldHVybiB0fXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzF9ZnVuY3Rpb24gc3QoZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IG49dDtuPj0wO24tLSl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobik7aWYoMzIhPT10JiY5IT09dClyZXR1cm4gbn1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1uP3Q6bisyfWZ1bmN0aW9uIGx0KGUpe2lmKDA9PT1lKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfWZ1bmN0aW9uIGN0KGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6MHxlfWZ1bmN0aW9uIHV0KGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTowfGV9Y2xhc3MgaHR7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZXM9ZSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkoZS5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKGUsdCl7ZT11dChlKTtjb25zdCBuPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW0saT10Lmxlbmd0aDtyZXR1cm4gMCE9PWkmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgraSksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlKSxlK2kpLHRoaXMudmFsdWVzLnNldCh0LGUpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9c2V0VmFsdWUoZSx0KXtyZXR1cm4gZT11dChlKSx0PXV0KHQpLHRoaXMudmFsdWVzW2VdIT09dCYmKHRoaXMudmFsdWVzW2VdPXQsZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLCEwKX1yZW1vdmVWYWx1ZXMoZSx0KXtlPXV0KGUpLHQ9dXQodCk7Y29uc3Qgbj10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtO2lmKGU+PW4ubGVuZ3RoKXJldHVybiExO2NvbnN0IGk9bi5sZW5ndGgtZTtyZXR1cm4gdD49aSYmKHQ9aSksMCE9PXQmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgtdCksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlK3QpLGUpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9Z2V0VG90YWxTdW0oKXtyZXR1cm4gMD09PXRoaXMudmFsdWVzLmxlbmd0aD8wOnRoaXMuX2dldFByZWZpeFN1bSh0aGlzLnZhbHVlcy5sZW5ndGgtMSl9Z2V0UHJlZml4U3VtKGUpe3JldHVybiBlPDA/MDooZT11dChlKSx0aGlzLl9nZXRQcmVmaXhTdW0oZSkpfV9nZXRQcmVmaXhTdW0oZSl7aWYoZTw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKXJldHVybiB0aGlzLnByZWZpeFN1bVtlXTtsZXQgdD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMTswPT09dCYmKHRoaXMucHJlZml4U3VtWzBdPXRoaXMudmFsdWVzWzBdLHQrKyksZT49dGhpcy52YWx1ZXMubGVuZ3RoJiYoZT10aGlzLnZhbHVlcy5sZW5ndGgtMSk7Zm9yKGxldCBuPXQ7bjw9ZTtuKyspdGhpcy5wcmVmaXhTdW1bbl09dGhpcy5wcmVmaXhTdW1bbi0xXSt0aGlzLnZhbHVlc1tuXTtyZXR1cm4gdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPU1hdGgubWF4KHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSxlKSx0aGlzLnByZWZpeFN1bVtlXX1nZXRJbmRleE9mKGUpe2U9TWF0aC5mbG9vcihlKSx0aGlzLmdldFRvdGFsU3VtKCk7bGV0IHQ9MCxuPXRoaXMudmFsdWVzLmxlbmd0aC0xLHI9MCxpPTAsbz0wO2Zvcig7dDw9bjspaWYocj10KyhuLXQpLzJ8MCxpPXRoaXMucHJlZml4U3VtW3JdLG89aS10aGlzLnZhbHVlc1tyXSxlPG8pbj1yLTE7ZWxzZXtpZighKGU+PWkpKWJyZWFrO3Q9cisxfXJldHVybiBuZXcgZnQocixlLW8pfX1jbGFzcyBmdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10LHRoaXMuX3ByZWZpeFN1bUluZGV4T2ZSZXN1bHRCcmFuZD12b2lkIDAsdGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXR9fWNvbnN0IGR0PWZ1bmN0aW9uKGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgbiBvZiJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iKWUuaW5kZXhPZihuKT49MHx8KHQrPSJcXCIrbik7cmV0dXJuIHQrPSJcXHNdKykiLG5ldyBSZWdFeHAodCwiZyIpfSgpO2NvbnN0IG10PXttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9O2Z1bmN0aW9uIGd0KGUsdCxuLHIsaT1tdCl7aWYobi5sZW5ndGg+aS5tYXhMZW4pe2xldCBvPWUtaS5tYXhMZW4vMjtyZXR1cm4gbzwwP289MDpyKz1vLGd0KGUsdCxuPW4uc3Vic3RyaW5nKG8sZStpLm1heExlbi8yKSxyLGkpfWNvbnN0IG89RGF0ZS5ub3coKSxhPWUtMS1yO2xldCBzPS0xLGw9bnVsbDtmb3IobGV0IGU9MTshKERhdGUubm93KCktbz49aS50aW1lQnVkZ2V0KTtlKyspe2NvbnN0IHI9YS1pLndpbmRvd1NpemUqZTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLHIpO2NvbnN0IG89cHQodCxuLGEscyk7aWYoIW8mJmwpYnJlYWs7aWYobD1vLHI8PTApYnJlYWs7cz1yfWlmKGwpe2NvbnN0IGU9e3dvcmQ6bFswXSxzdGFydENvbHVtbjpyKzErbC5pbmRleCxlbmRDb2x1bW46cisxK2wuaW5kZXgrbFswXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcHQoZSx0LG4scil7bGV0IGk7Zm9yKDtpPWUuZXhlYyh0KTspe2NvbnN0IHQ9aS5pbmRleHx8MDtpZih0PD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gaTtpZihyPjAmJnQ+cilyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH1jbGFzcyBidHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PWN0KGUpO3RoaXMuX2RlZmF1bHRWYWx1ZT10LHRoaXMuX2FzY2lpTWFwPWJ0Ll9jcmVhdGVBc2NpaU1hcCh0KSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKGUpe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IG49MDtuPDI1NjtuKyspdFtuXT1lO3JldHVybiB0fXNldChlLHQpe2NvbnN0IG49Y3QodCk7ZT49MCYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV09bjp0aGlzLl9tYXAuc2V0KGUsbil9Z2V0KGUpe3JldHVybiBlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXTp0aGlzLl9tYXAuZ2V0KGUpfHx0aGlzLl9kZWZhdWx0VmFsdWV9fWNsYXNzIHZ0e2NvbnN0cnVjdG9yKGUsdCxuKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBpPTAsbz1lKnQ7aTxvO2krKylyW2ldPW47dGhpcy5fZGF0YT1yLHRoaXMucm93cz1lLHRoaXMuY29scz10fWdldChlLHQpe3JldHVybiB0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdfXNldChlLHQsbil7dGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XT1ufX1jbGFzcyB5dHtjb25zdHJ1Y3RvcihlKXtsZXQgdD0wLG49MDtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0W2ksbyxhXT1lW3JdO28+dCYmKHQ9byksaT5uJiYobj1pKSxhPm4mJihuPWEpfXQrKyxuKys7Y29uc3Qgcj1uZXcgdnQobix0LDApO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3RbbixpLG9dPWVbdF07ci5zZXQobixpLG8pfXRoaXMuX3N0YXRlcz1yLHRoaXMuX21heENoYXJDb2RlPXR9bmV4dFN0YXRlKGUsdCl7cmV0dXJuIHQ8MHx8dD49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KGUsdCl9fWxldCBDdD1udWxsO2xldCB3dD1udWxsO2NsYXNzIF90e3N0YXRpYyBfY3JlYXRlTGluayhlLHQsbixyLGkpe2xldCBvPWktMTtkb3tjb25zdCBuPXQuY2hhckNvZGVBdChvKTtpZigyIT09ZS5nZXQobikpYnJlYWs7by0tfXdoaWxlKG8+cik7aWYocj4wKXtjb25zdCBlPXQuY2hhckNvZGVBdChyLTEpLG49dC5jaGFyQ29kZUF0KG8pOyg0MD09PWUmJjQxPT09bnx8OTE9PT1lJiY5Mz09PW58fDEyMz09PWUmJjEyNT09PW4pJiZvLS19cmV0dXJue3JhbmdlOntzdGFydExpbmVOdW1iZXI6bixzdGFydENvbHVtbjpyKzEsZW5kTGluZU51bWJlcjpuLGVuZENvbHVtbjpvKzJ9LHVybDp0LnN1YnN0cmluZyhyLG8rMSl9fXN0YXRpYyBjb21wdXRlTGlua3MoZSx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT1DdCYmKEN0PW5ldyB5dChbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSksQ3R9KCkpe2NvbnN0IG49ZnVuY3Rpb24oKXtpZihudWxsPT09d3Qpe3d0PW5ldyBidCgwKTtjb25zdCBlPSIgXHQ8PidcIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApiI7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspd3Quc2V0KGUuY2hhckNvZGVBdCh0KSwxKTtjb25zdCB0PSIuLDsiO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXd0LnNldCh0LmNoYXJDb2RlQXQoZSksMil9cmV0dXJuIHd0fSgpLHI9W107Zm9yKGxldCBpPTEsbz1lLmdldExpbmVDb3VudCgpO2k8PW87aSsrKXtjb25zdCBvPWUuZ2V0TGluZUNvbnRlbnQoaSksYT1vLmxlbmd0aDtsZXQgcz0wLGw9MCxjPTAsdT0xLGg9ITEsZj0hMSxkPSExLG09ITE7Zm9yKDtzPGE7KXtsZXQgZT0hMTtjb25zdCBhPW8uY2hhckNvZGVBdChzKTtpZigxMz09PXUpe2xldCB0O3N3aXRjaChhKXtjYXNlIDQwOmg9ITAsdD0wO2JyZWFrO2Nhc2UgNDE6dD1oPzA6MTticmVhaztjYXNlIDkxOmQ9ITAsZj0hMCx0PTA7YnJlYWs7Y2FzZSA5MzpkPSExLHQ9Zj8wOjE7YnJlYWs7Y2FzZSAxMjM6bT0hMCx0PTA7YnJlYWs7Y2FzZSAxMjU6dD1tPzA6MTticmVhaztjYXNlIDM5OnQ9MzQ9PT1jfHw5Nj09PWM/MDoxO2JyZWFrO2Nhc2UgMzQ6dD0zOT09PWN8fDk2PT09Yz8wOjE7YnJlYWs7Y2FzZSA5Njp0PTM5PT09Y3x8MzQ9PT1jPzA6MTticmVhaztjYXNlIDQyOnQ9NDI9PT1jPzE6MDticmVhaztjYXNlIDEyNDp0PTEyND09PWM/MTowO2JyZWFrO2Nhc2UgMzI6dD1kPzA6MTticmVhaztkZWZhdWx0OnQ9bi5nZXQoYSl9MT09PXQmJihyLnB1c2goX3QuX2NyZWF0ZUxpbmsobixvLGksbCxzKSksZT0hMCl9ZWxzZSBpZigxMj09PXUpe2xldCB0OzkxPT09YT8oZj0hMCx0PTApOnQ9bi5nZXQoYSksMT09PXQ/ZT0hMDp1PTEzfWVsc2UgdT10Lm5leHRTdGF0ZSh1LGEpLDA9PT11JiYoZT0hMCk7ZSYmKHU9MSxoPSExLGY9ITEsbT0hMSxsPXMrMSxjPWEpLHMrK30xMz09PXUmJnIucHVzaChfdC5fY3JlYXRlTGluayhuLG8saSxsLGEpKX1yZXR1cm4gcn19Y2xhc3MgU3R7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VmFsdWVTZXQ9W1sidHJ1ZSIsImZhbHNlIl0sWyJUcnVlIiwiRmFsc2UiXSxbIlByaXZhdGUiLCJQdWJsaWMiLCJGcmllbmQiLCJSZWFkT25seSIsIlBhcnRpYWwiLCJQcm90ZWN0ZWQiLCJXcml0ZU9ubHkiXSxbInB1YmxpYyIsInByb3RlY3RlZCIsInByaXZhdGUiXV19bmF2aWdhdGVWYWx1ZVNldChlLHQsbixyLGkpe2lmKGUmJnQpe2NvbnN0IG49dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQodCxpKTtpZihuKXJldHVybntyYW5nZTplLHZhbHVlOm59fWlmKG4mJnIpe2NvbnN0IGU9dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQocixpKTtpZihlKXJldHVybntyYW5nZTpuLHZhbHVlOmV9fXJldHVybiBudWxsfWRvTmF2aWdhdGVWYWx1ZVNldChlLHQpe2NvbnN0IG49dGhpcy5udW1iZXJSZXBsYWNlKGUsdCk7cmV0dXJuIG51bGwhPT1uP246dGhpcy50ZXh0UmVwbGFjZShlLHQpfW51bWJlclJlcGxhY2UoZSx0KXtjb25zdCBuPU1hdGgucG93KDEwLGUubGVuZ3RoLShlLmxhc3RJbmRleE9mKCIuIikrMSkpO2xldCByPU51bWJlcihlKSxpPXBhcnNlRmxvYXQoZSk7cmV0dXJuIGlzTmFOKHIpfHxpc05hTihpKXx8ciE9PWk/bnVsbDowIT09cnx8dD8ocj1NYXRoLmZsb29yKHIqbikscis9dD9uOi1uLFN0cmluZyhyL24pKTpudWxsfXRleHRSZXBsYWNlKGUsdCl7cmV0dXJuIHRoaXMudmFsdWVTZXRzUmVwbGFjZSh0aGlzLl9kZWZhdWx0VmFsdWVTZXQsZSx0KX12YWx1ZVNldHNSZXBsYWNlKGUsdCxuKXtsZXQgcj1udWxsO2ZvcihsZXQgaT0wLG89ZS5sZW5ndGg7bnVsbD09PXImJmk8bztpKyspcj10aGlzLnZhbHVlU2V0UmVwbGFjZShlW2ldLHQsbik7cmV0dXJuIHJ9dmFsdWVTZXRSZXBsYWNlKGUsdCxuKXtsZXQgcj1lLmluZGV4T2YodCk7cmV0dXJuIHI+PTA/KHIrPW4/MTotMSxyPDA/cj1lLmxlbmd0aC0xOnIlPWUubGVuZ3RoLGVbcl0pOm51bGx9fVN0LklOU1RBTkNFPW5ldyBTdDtjb25zdCBBdD1PYmplY3QuZnJlZXplKChmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pKTt2YXIgRXQ7IWZ1bmN0aW9uKGUpe2UuaXNDYW5jZWxsYXRpb25Ub2tlbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuTm9uZXx8dD09PWUuQ2FuY2VsbGVkfHwodCBpbnN0YW5jZW9mIE50fHwhKCF0fHwib2JqZWN0IiE9dHlwZW9mIHQpJiYoImJvb2xlYW4iPT10eXBlb2YgdC5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCYmImZ1bmN0aW9uIj09dHlwZW9mIHQub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQpKX0sZS5Ob25lPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiExLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOlAuTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOkF0fSl9KEV0fHwoRXQ9e30pKTtjbGFzcyBOdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/QXQ6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBVKSx0aGlzLl9lbWl0dGVyLmV2ZW50KX1kaXNwb3NlKCl7dGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZGlzcG9zZSgpLHRoaXMuX2VtaXR0ZXI9bnVsbCl9fWNsYXNzIHh0e2NvbnN0cnVjdG9yKGUpe3RoaXMuX3Rva2VuPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9ZSYmZS5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCh0aGlzLmNhbmNlbCx0aGlzKX1nZXQgdG9rZW4oKXtyZXR1cm4gdGhpcy5fdG9rZW58fCh0aGlzLl90b2tlbj1uZXcgTnQpLHRoaXMuX3Rva2VufWNhbmNlbCgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgTnQmJnRoaXMuX3Rva2VuLmNhbmNlbCgpOnRoaXMuX3Rva2VuPUV0LkNhbmNlbGxlZH1kaXNwb3NlKGU9ITEpe2UmJnRoaXMuY2FuY2VsKCksdGhpcy5fcGFyZW50TGlzdGVuZXImJnRoaXMuX3BhcmVudExpc3RlbmVyLmRpc3Bvc2UoKSx0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIE50JiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49RXQuTm9uZX19Y2xhc3MgTHR7Y29uc3RydWN0b3IoKXt0aGlzLl9rZXlDb2RlVG9TdHI9W10sdGhpcy5fc3RyVG9LZXlDb2RlPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVmaW5lKGUsdCl7dGhpcy5fa2V5Q29kZVRvU3RyW2VdPXQsdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV09ZX1rZXlDb2RlVG9TdHIoZSl7cmV0dXJuIHRoaXMuX2tleUNvZGVUb1N0cltlXX1zdHJUb0tleUNvZGUoZSl7cmV0dXJuIHRoaXMuX3N0clRvS2V5Q29kZVtlLnRvTG93ZXJDYXNlKCldfHwwfX1jb25zdCBrdD1uZXcgTHQsVHQ9bmV3IEx0LE90PW5ldyBMdCxNdD1uZXcgQXJyYXkoMjMwKSxJdD1PYmplY3QuY3JlYXRlKG51bGwpLFJ0PU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIFB0OyFmdW5jdGlvbigpe2NvbnN0IGU9IiIsdD1bWzAsMSwwLCJOb25lIiwwLCJ1bmtub3duIiwwLCJWS19VTktOT1dOIixlLGVdLFswLDEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDIsIlN1cGVyIiwwLGUsMCxlLGUsZV0sWzAsMSwzLCJGbiIsMCxlLDAsZSxlLGVdLFswLDEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzAsMSw1LCJTdXNwZW5kIiwwLGUsMCxlLGUsZV0sWzAsMSw2LCJSZXN1bWUiLDAsZSwwLGUsZSxlXSxbMCwxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzAsMSw4LCJTbGVlcCIsMCxlLDAsIlZLX1NMRUVQIixlLGVdLFswLDEsOSwiV2FrZVVwIiwwLGUsMCxlLGUsZV0sWzMxLDAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsZSxlXSxbMzIsMCwxMSwiS2V5QiIsMzIsIkIiLDY2LCJWS19CIixlLGVdLFszMywwLDEyLCJLZXlDIiwzMywiQyIsNjcsIlZLX0MiLGUsZV0sWzM0LDAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsZSxlXSxbMzUsMCwxNCwiS2V5RSIsMzUsIkUiLDY5LCJWS19FIixlLGVdLFszNiwwLDE1LCJLZXlGIiwzNiwiRiIsNzAsIlZLX0YiLGUsZV0sWzM3LDAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsZSxlXSxbMzgsMCwxNywiS2V5SCIsMzgsIkgiLDcyLCJWS19IIixlLGVdLFszOSwwLDE4LCJLZXlJIiwzOSwiSSIsNzMsIlZLX0kiLGUsZV0sWzQwLDAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsZSxlXSxbNDEsMCwyMCwiS2V5SyIsNDEsIksiLDc1LCJWS19LIixlLGVdLFs0MiwwLDIxLCJLZXlMIiw0MiwiTCIsNzYsIlZLX0wiLGUsZV0sWzQzLDAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsZSxlXSxbNDQsMCwyMywiS2V5TiIsNDQsIk4iLDc4LCJWS19OIixlLGVdLFs0NSwwLDI0LCJLZXlPIiw0NSwiTyIsNzksIlZLX08iLGUsZV0sWzQ2LDAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsZSxlXSxbNDcsMCwyNiwiS2V5USIsNDcsIlEiLDgxLCJWS19RIixlLGVdLFs0OCwwLDI3LCJLZXlSIiw0OCwiUiIsODIsIlZLX1IiLGUsZV0sWzQ5LDAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsZSxlXSxbNTAsMCwyOSwiS2V5VCIsNTAsIlQiLDg0LCJWS19UIixlLGVdLFs1MSwwLDMwLCJLZXlVIiw1MSwiVSIsODUsIlZLX1UiLGUsZV0sWzUyLDAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsZSxlXSxbNTMsMCwzMiwiS2V5VyIsNTMsIlciLDg3LCJWS19XIixlLGVdLFs1NCwwLDMzLCJLZXlYIiw1NCwiWCIsODgsIlZLX1giLGUsZV0sWzU1LDAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsZSxlXSxbNTYsMCwzNSwiS2V5WiIsNTYsIloiLDkwLCJWS19aIixlLGVdLFsyMiwwLDM2LCJEaWdpdDEiLDIyLCIxIiw0OSwiVktfMSIsZSxlXSxbMjMsMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLGUsZV0sWzI0LDAsMzgsIkRpZ2l0MyIsMjQsIjMiLDUxLCJWS18zIixlLGVdLFsyNSwwLDM5LCJEaWdpdDQiLDI1LCI0Iiw1MiwiVktfNCIsZSxlXSxbMjYsMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLGUsZV0sWzI3LDAsNDEsIkRpZ2l0NiIsMjcsIjYiLDU0LCJWS182IixlLGVdLFsyOCwwLDQyLCJEaWdpdDciLDI4LCI3Iiw1NSwiVktfNyIsZSxlXSxbMjksMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLGUsZV0sWzMwLDAsNDQsIkRpZ2l0OSIsMzAsIjkiLDU3LCJWS185IixlLGVdLFsyMSwwLDQ1LCJEaWdpdDAiLDIxLCIwIiw0OCwiVktfMCIsZSxlXSxbMywxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzksMSw0NywiRXNjYXBlIiw5LCJFc2NhcGUiLDI3LCJWS19FU0NBUEUiLGUsZV0sWzEsMSw0OCwiQmFja3NwYWNlIiwxLCJCYWNrc3BhY2UiLDgsIlZLX0JBQ0siLGUsZV0sWzIsMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMTAsMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFs4MywwLDUxLCJNaW51cyIsODMsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFs4MSwwLDUyLCJFcXVhbCIsODEsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbODcsMCw1MywiQnJhY2tldExlZnQiLDg3LCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzg5LDAsNTQsIkJyYWNrZXRSaWdodCIsODksIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbODgsMCw1NSwiQmFja3NsYXNoIiw4OCwiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsMCw1NiwiSW50bEhhc2giLDAsZSwwLGUsZSxlXSxbODAsMCw1NywiU2VtaWNvbG9uIiw4MCwiOyIsMTg2LCJWS19PRU1fMSIsIjsiLCJPRU1fMSJdLFs5MCwwLDU4LCJRdW90ZSIsOTAsIiciLDIyMiwiVktfT0VNXzciLCInIiwiT0VNXzciXSxbODYsMCw1OSwiQmFja3F1b3RlIiw4NiwiYCIsMTkyLCJWS19PRU1fMyIsImAiLCJPRU1fMyJdLFs4MiwwLDYwLCJDb21tYSIsODIsIiwiLDE4OCwiVktfT0VNX0NPTU1BIiwiLCIsIk9FTV9DT01NQSJdLFs4NCwwLDYxLCJQZXJpb2QiLDg0LCIuIiwxOTAsIlZLX09FTV9QRVJJT0QiLCIuIiwiT0VNX1BFUklPRCJdLFs4NSwwLDYyLCJTbGFzaCIsODUsIi8iLDE5MSwiVktfT0VNXzIiLCIvIiwiT0VNXzIiXSxbOCwxLDYzLCJDYXBzTG9jayIsOCwiQ2Fwc0xvY2siLDIwLCJWS19DQVBJVEFMIixlLGVdLFs1OSwxLDY0LCJGMSIsNTksIkYxIiwxMTIsIlZLX0YxIixlLGVdLFs2MCwxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIixlLGVdLFs2MSwxLDY2LCJGMyIsNjEsIkYzIiwxMTQsIlZLX0YzIixlLGVdLFs2MiwxLDY3LCJGNCIsNjIsIkY0IiwxMTUsIlZLX0Y0IixlLGVdLFs2MywxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IixlLGVdLFs2NCwxLDY5LCJGNiIsNjQsIkY2IiwxMTcsIlZLX0Y2IixlLGVdLFs2NSwxLDcwLCJGNyIsNjUsIkY3IiwxMTgsIlZLX0Y3IixlLGVdLFs2NiwxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IixlLGVdLFs2NywxLDcyLCJGOSIsNjcsIkY5IiwxMjAsIlZLX0Y5IixlLGVdLFs2OCwxLDczLCJGMTAiLDY4LCJGMTAiLDEyMSwiVktfRjEwIixlLGVdLFs2OSwxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIixlLGVdLFs3MCwxLDc1LCJGMTIiLDcwLCJGMTIiLDEyMywiVktfRjEyIixlLGVdLFswLDEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzc5LDEsNzcsIlNjcm9sbExvY2siLDc5LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbNywxLDc4LCJQYXVzZSIsNywiUGF1c2VCcmVhayIsMTksIlZLX1BBVVNFIixlLGVdLFsxOSwxLDc5LCJJbnNlcnQiLDE5LCJJbnNlcnQiLDQ1LCJWS19JTlNFUlQiLGUsZV0sWzE0LDEsODAsIkhvbWUiLDE0LCJIb21lIiwzNiwiVktfSE9NRSIsZSxlXSxbMTEsMSw4MSwiUGFnZVVwIiwxMSwiUGFnZVVwIiwzMywiVktfUFJJT1IiLGUsZV0sWzIwLDEsODIsIkRlbGV0ZSIsMjAsIkRlbGV0ZSIsNDYsIlZLX0RFTEVURSIsZSxlXSxbMTMsMSw4MywiRW5kIiwxMywiRW5kIiwzNSwiVktfRU5EIixlLGVdLFsxMiwxLDg0LCJQYWdlRG93biIsMTIsIlBhZ2VEb3duIiwzNCwiVktfTkVYVCIsZSxlXSxbMTcsMSw4NSwiQXJyb3dSaWdodCIsMTcsIlJpZ2h0QXJyb3ciLDM5LCJWS19SSUdIVCIsIlJpZ2h0IixlXSxbMTUsMSw4NiwiQXJyb3dMZWZ0IiwxNSwiTGVmdEFycm93IiwzNywiVktfTEVGVCIsIkxlZnQiLGVdLFsxOCwxLDg3LCJBcnJvd0Rvd24iLDE4LCJEb3duQXJyb3ciLDQwLCJWS19ET1dOIiwiRG93biIsZV0sWzE2LDEsODgsIkFycm93VXAiLDE2LCJVcEFycm93IiwzOCwiVktfVVAiLCJVcCIsZV0sWzc4LDEsODksIk51bUxvY2siLDc4LCJOdW1Mb2NrIiwxNDQsIlZLX05VTUxPQ0siLGUsZV0sWzEwOCwxLDkwLCJOdW1wYWREaXZpZGUiLDEwOCwiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEwMywxLDkxLCJOdW1wYWRNdWx0aXBseSIsMTAzLCJOdW1QYWRfTXVsdGlwbHkiLDEwNiwiVktfTVVMVElQTFkiLGUsZV0sWzEwNiwxLDkyLCJOdW1wYWRTdWJ0cmFjdCIsMTA2LCJOdW1QYWRfU3VidHJhY3QiLDEwOSwiVktfU1VCVFJBQ1QiLGUsZV0sWzEwNCwxLDkzLCJOdW1wYWRBZGQiLDEwNCwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzMsMSw5NCwiTnVtcGFkRW50ZXIiLDMsZSwwLGUsZSxlXSxbOTQsMSw5NSwiTnVtcGFkMSIsOTQsIk51bVBhZDEiLDk3LCJWS19OVU1QQUQxIixlLGVdLFs5NSwxLDk2LCJOdW1wYWQyIiw5NSwiTnVtUGFkMiIsOTgsIlZLX05VTVBBRDIiLGUsZV0sWzk2LDEsOTcsIk51bXBhZDMiLDk2LCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbOTcsMSw5OCwiTnVtcGFkNCIsOTcsIk51bVBhZDQiLDEwMCwiVktfTlVNUEFENCIsZSxlXSxbOTgsMSw5OSwiTnVtcGFkNSIsOTgsIk51bVBhZDUiLDEwMSwiVktfTlVNUEFENSIsZSxlXSxbOTksMSwxMDAsIk51bXBhZDYiLDk5LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEwMCwxLDEwMSwiTnVtcGFkNyIsMTAwLCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLGUsZV0sWzEwMSwxLDEwMiwiTnVtcGFkOCIsMTAxLCJOdW1QYWQ4IiwxMDQsIlZLX05VTVBBRDgiLGUsZV0sWzEwMiwxLDEwMywiTnVtcGFkOSIsMTAyLCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzkzLDEsMTA0LCJOdW1wYWQwIiw5MywiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEwNywxLDEwNSwiTnVtcGFkRGVjaW1hbCIsMTA3LCJOdW1QYWRfRGVjaW1hbCIsMTEwLCJWS19ERUNJTUFMIixlLGVdLFs5MiwwLDEwNiwiSW50bEJhY2tzbGFzaCIsOTIsIk9FTV8xMDIiLDIyNiwiVktfT0VNXzEwMiIsZSxlXSxbNTgsMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLGUsZSxlXSxbMCwxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDEwOSwiTnVtcGFkRXF1YWwiLDAsZSwwLGUsZSxlXSxbNzEsMSwxMTAsIkYxMyIsNzEsIkYxMyIsMTI0LCJWS19GMTMiLGUsZV0sWzcyLDEsMTExLCJGMTQiLDcyLCJGMTQiLDEyNSwiVktfRjE0IixlLGVdLFs3MywxLDExMiwiRjE1Iiw3MywiRjE1IiwxMjYsIlZLX0YxNSIsZSxlXSxbNzQsMSwxMTMsIkYxNiIsNzQsIkYxNiIsMTI3LCJWS19GMTYiLGUsZV0sWzc1LDEsMTE0LCJGMTciLDc1LCJGMTciLDEyOCwiVktfRjE3IixlLGVdLFs3NiwxLDExNSwiRjE4Iiw3NiwiRjE4IiwxMjksIlZLX0YxOCIsZSxlXSxbNzcsMSwxMTYsIkYxOSIsNzcsIkYxOSIsMTMwLCJWS19GMTkiLGUsZV0sWzAsMSwxMTcsIkYyMCIsMCxlLDAsIlZLX0YyMCIsZSxlXSxbMCwxLDExOCwiRjIxIiwwLGUsMCwiVktfRjIxIixlLGVdLFswLDEsMTE5LCJGMjIiLDAsZSwwLCJWS19GMjIiLGUsZV0sWzAsMSwxMjAsIkYyMyIsMCxlLDAsIlZLX0YyMyIsZSxlXSxbMCwxLDEyMSwiRjI0IiwwLGUsMCwiVktfRjI0IixlLGVdLFswLDEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjMsIkhlbHAiLDAsZSwwLGUsZSxlXSxbMCwxLDEyNCwiU2VsZWN0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjYsIlVuZG8iLDAsZSwwLGUsZSxlXSxbMCwxLDEyNywiQ3V0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMCwxLDEyOSwiUGFzdGUiLDAsZSwwLGUsZSxlXSxbMCwxLDEzMCwiRmluZCIsMCxlLDAsZSxlLGVdLFswLDEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExMiwiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFswLDEsMTMyLCJBdWRpb1ZvbHVtZVVwIiwxMTMsIkF1ZGlvVm9sdW1lVXAiLDE3NSwiVktfVk9MVU1FX1VQIixlLGVdLFswLDEsMTMzLCJBdWRpb1ZvbHVtZURvd24iLDExNCwiQXVkaW9Wb2x1bWVEb3duIiwxNzQsIlZLX1ZPTFVNRV9ET1dOIixlLGVdLFsxMDUsMSwxMzQsIk51bXBhZENvbW1hIiwxMDUsIk51bVBhZF9TZXBhcmF0b3IiLDEwOCwiVktfU0VQQVJBVE9SIixlLGVdLFsxMTAsMCwxMzUsIkludGxSbyIsMTEwLCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzAsMSwxMzYsIkthbmFNb2RlIiwwLGUsMCxlLGUsZV0sWzAsMCwxMzcsIkludGxZZW4iLDAsZSwwLGUsZSxlXSxbMCwxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFswLDEsMTM5LCJOb25Db252ZXJ0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDAsIkxhbmcxIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDIsIkxhbmczIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDMsIkxhbmc0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDUsIkFib3J0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDYsIlByb3BzIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ4LCJOdW1wYWRQYXJlblJpZ2h0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCxlLDAsZSxlLGVdLFswLDEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFswLDEsMTUxLCJOdW1wYWRNZW1vcnlSZWNhbGwiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTQsIk51bXBhZE1lbW9yeVN1YnRyYWN0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNTUsIk51bXBhZENsZWFyIiwxMjYsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLGUsZV0sWzAsMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbNSwxLDAsZSw1LCJDdHJsIiwxNywiVktfQ09OVFJPTCIsZSxlXSxbNCwxLDAsZSw0LCJTaGlmdCIsMTYsIlZLX1NISUZUIixlLGVdLFs2LDEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzU3LDEsMCxlLDU3LCJNZXRhIiwwLCJWS19DT01NQU5EIixlLGVdLFs1LDEsMTU3LCJDb250cm9sTGVmdCIsNSxlLDAsIlZLX0xDT05UUk9MIixlLGVdLFs0LDEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzYsMSwxNTksIkFsdExlZnQiLDYsZSwwLCJWS19MTUVOVSIsZSxlXSxbNTcsMSwxNjAsIk1ldGFMZWZ0Iiw1NyxlLDAsIlZLX0xXSU4iLGUsZV0sWzUsMSwxNjEsIkNvbnRyb2xSaWdodCIsNSxlLDAsIlZLX1JDT05UUk9MIixlLGVdLFs0LDEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFs2LDEsMTYzLCJBbHRSaWdodCIsNixlLDAsIlZLX1JNRU5VIixlLGVdLFs1NywxLDE2NCwiTWV0YVJpZ2h0Iiw1NyxlLDAsIlZLX1JXSU4iLGUsZV0sWzAsMSwxNjUsIkJyaWdodG5lc3NVcCIsMCxlLDAsZSxlLGVdLFswLDEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFswLDEsMTY3LCJNZWRpYVBsYXkiLDAsZSwwLGUsZSxlXSxbMCwxLDE2OCwiTWVkaWFSZWNvcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFswLDEsMTcwLCJNZWRpYVJld2luZCIsMCxlLDAsZSxlLGVdLFsxMTQsMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMTksIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzExNSwxLDE3MiwiTWVkaWFUcmFja1ByZXZpb3VzIiwxMjAsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTc3LCJWS19NRURJQV9QUkVWX1RSQUNLIixlLGVdLFsxMTYsMSwxNzMsIk1lZGlhU3RvcCIsMTIxLCJNZWRpYVN0b3AiLDE3OCwiVktfTUVESUFfU1RPUCIsZSxlXSxbMCwxLDE3NCwiRWplY3QiLDAsZSwwLGUsZSxlXSxbMTE3LDEsMTc1LCJNZWRpYVBsYXlQYXVzZSIsMTIyLCJNZWRpYVBsYXlQYXVzZSIsMTc5LCJWS19NRURJQV9QTEFZX1BBVVNFIixlLGVdLFswLDEsMTc2LCJNZWRpYVNlbGVjdCIsMTIzLCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIixlLGVdLFswLDEsMTc3LCJMYXVuY2hNYWlsIiwxMjQsIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzAsMSwxNzgsIkxhdW5jaEFwcDIiLDEyNSwiTGF1bmNoQXBwMiIsMTgzLCJWS19NRURJQV9MQVVOQ0hfQVBQMiIsZSxlXSxbMCwxLDE3OSwiTGF1bmNoQXBwMSIsMCxlLDAsIlZLX01FRElBX0xBVU5DSF9BUFAxIixlLGVdLFswLDEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzAsMSwxODEsIkxhdW5jaFNjcmVlblNhdmVyIiwwLGUsMCxlLGUsZV0sWzAsMSwxODIsIkJyb3dzZXJTZWFyY2giLDExNSwiQnJvd3NlclNlYXJjaCIsMTcwLCJWS19CUk9XU0VSX1NFQVJDSCIsZSxlXSxbMCwxLDE4MywiQnJvd3NlckhvbWUiLDExNiwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxMTIsMSwxODQsIkJyb3dzZXJCYWNrIiwxMTcsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsZSxlXSxbMTEzLDEsMTg1LCJCcm93c2VyRm9yd2FyZCIsMTE4LCJCcm93c2VyRm9yd2FyZCIsMTY3LCJWS19CUk9XU0VSX0ZPUldBUkQiLGUsZV0sWzAsMSwxODYsIkJyb3dzZXJTdG9wIiwwLGUsMCwiVktfQlJPV1NFUl9TVE9QIixlLGVdLFswLDEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMCwxLDE4OCwiQnJvd3NlckZhdm9yaXRlcyIsMCxlLDAsIlZLX0JST1dTRVJfRkFWT1JJVEVTIixlLGVdLFswLDEsMTg5LCJab29tVG9nZ2xlIiwwLGUsMCxlLGUsZV0sWzAsMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFswLDEsMTkxLCJNYWlsRm9yd2FyZCIsMCxlLDAsZSxlLGVdLFswLDEsMTkyLCJNYWlsU2VuZCIsMCxlLDAsZSxlLGVdLFsxMDksMSwwLGUsMTA5LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksZSxlLGVdLFsxMTEsMSwwLGUsMTExLCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzkxLDEsMCxlLDkxLCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfS0FOQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEFOR1VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRklOQUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hBTkpBIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQ09OVkVSVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTk9OQ09OVkVSVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19NT0RFQ0hBTkdFIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19TRUxFQ1QiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FWEVDVVRFIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19TTkFQU0hPVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQVBQUyIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUFJPQ0VTU0tFWSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19EQkVfU0JDU0NIQVIiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0RCRV9EQkNTQ0hBUiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQ1JTRUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0VYU0VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUExBWSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfWk9PTSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QQTEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX09FTV9DTEVBUiIsZSxlXV07bGV0IG49W10scj1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdFt0LGksbyxhLHMsbCxjLHUsaCxmXT1lO2lmKHJbb118fChyW29dPSEwLEl0W2FdPW8sUnRbYS50b0xvd2VyQ2FzZSgpXT1vKSwhbltzXSl7aWYobltzXT0hMCwhbCl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke3N9IGFyb3VuZCBzY2FuIGNvZGUgJHthfWApO2t0LmRlZmluZShzLGwpLFR0LmRlZmluZShzLGh8fGwpLE90LmRlZmluZShzLGZ8fGh8fGwpfWMmJihNdFtjXT1zKX19KCksZnVuY3Rpb24oZSl7ZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4ga3Qua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGt0LnN0clRvS2V5Q29kZShlKX0sZS50b1VzZXJTZXR0aW5nc1VTPWZ1bmN0aW9uKGUpe3JldHVybiBUdC5rZXlDb2RlVG9TdHIoZSl9LGUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBPdC5rZXlDb2RlVG9TdHIoZSl9LGUuZnJvbVVzZXJTZXR0aW5ncz1mdW5jdGlvbihlKXtyZXR1cm4gVHQuc3RyVG9LZXlDb2RlKGUpfHxPdC5zdHJUb0tleUNvZGUoZSl9LGUudG9FbGVjdHJvbkFjY2VsZXJhdG9yPWZ1bmN0aW9uKGUpe2lmKGU+PTkzJiZlPD0xMDgpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgMTY6cmV0dXJuIlVwIjtjYXNlIDE4OnJldHVybiJEb3duIjtjYXNlIDE1OnJldHVybiJMZWZ0IjtjYXNlIDE3OnJldHVybiJSaWdodCJ9cmV0dXJuIGt0LmtleUNvZGVUb1N0cihlKX19KFB0fHwoUHQ9e30pKTtjbGFzcyBGdCBleHRlbmRzIFFle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3N1cGVyKGUsdCxuLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj10LHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPW4sdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKGUpe3JldHVybiBGdC5zZWxlY3Rpb25zRXF1YWwodGhpcyxlKX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKGUsdCl7cmV0dXJuIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJmUuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10LnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZlLnBvc2l0aW9uTGluZU51bWJlcj09PXQucG9zaXRpb25MaW5lTnVtYmVyJiZlLnBvc2l0aW9uQ29sdW1uPT09dC5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBGdCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLGUsdCk6bmV3IEZ0KGUsdCx0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgWWUodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IFllKHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IEZ0KGUsdCx0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyBGdCh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sZSx0KX1zdGF0aWMgZnJvbVBvc2l0aW9ucyhlLHQ9ZSl7cmV0dXJuIG5ldyBGdChlLmxpbmVOdW1iZXIsZS5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKGUsdCl7cmV0dXJuIDA9PT10P25ldyBGdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bmV3IEZ0KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbixlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbihlKXtyZXR1cm4gbmV3IEZ0KGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4sZS5wb3NpdGlvbkxpbmVOdW1iZXIsZS5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbChlLHQpe2lmKGUmJiF0fHwhZSYmdClyZXR1cm4hMTtpZighZSYmIXQpcmV0dXJuITA7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25MaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25Db2x1bW59c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gMD09PWk/bmV3IEZ0KGUsdCxuLHIpOm5ldyBGdChuLHIsZSx0KX19dmFyIER0LFZ0LEt0LFV0LEJ0LGp0LHF0LCR0LFd0LEh0LHp0LEd0LEp0LFh0LFp0LFl0LFF0LGVuLHRuLG5uLHJuLG9uLGFuLHNuLGxuLGNuLHVuLGhuLGZuLGRuLG1uLGduLHBuLGJuLHZuLHluLENuLHduLF9uLFNuLEFuLEVuLE5uLHhuLExuLGtuLFRuLE9uLE1uLEluLFJuLFBuLEZuLERuLFZuLEtuLFVuLEJuLGpuLHFuLCRuLFduLEhuLHpuLEduLEpuLFhuPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2woci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtsKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9bCgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBabiBleHRlbmRzIGR7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5fcmVnaXN0cnk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fZmFjdG9yeT1uLHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5fcmVzb2x2ZVByb21pc2U9bnVsbCx0aGlzLl9pc1Jlc29sdmVkPSExfWdldCBpc1Jlc29sdmVkKCl7cmV0dXJuIHRoaXMuX2lzUmVzb2x2ZWR9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWQ9ITAsc3VwZXIuZGlzcG9zZSgpfXJlc29sdmUoKXtyZXR1cm4gWG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9KSl9X2NyZWF0ZSgpe3JldHVybiBYbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZhY3RvcnkuY3JlYXRlVG9rZW5pemF0aW9uU3VwcG9ydCgpKTt0aGlzLl9pc1Jlc29sdmVkPSEwLGUmJiF0aGlzLl9pc0Rpc3Bvc2VkJiZ0aGlzLl9yZWdpc3Rlcih0aGlzLl9yZWdpc3RyeS5yZWdpc3Rlcih0aGlzLl9sYW5ndWFnZUlkLGUpKX0pKX19Y2xhc3MgWW57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuaWQ9ZSx0aGlzLmRlZmluaXRpb249dCx0aGlzLmRlc2NyaXB0aW9uPW4sWW4uX2FsbENvZGljb25zLnB1c2godGhpcyl9Z2V0IGNsYXNzTmFtZXMoKXtyZXR1cm4iY29kaWNvbiBjb2RpY29uLSIrdGhpcy5pZH1nZXQgY2xhc3NOYW1lc0FycmF5KCl7cmV0dXJuWyJjb2RpY29uIiwiY29kaWNvbi0iK3RoaXMuaWRdfWdldCBjc3NTZWxlY3Rvcigpe3JldHVybiIuY29kaWNvbi5jb2RpY29uLSIrdGhpcy5pZH1zdGF0aWMgZ2V0QWxsKCl7cmV0dXJuIFluLl9hbGxDb2RpY29uc319WW4uX2FsbENvZGljb25zPVtdLFluLmFkZD1uZXcgWW4oImFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MCJ9KSxZbi5wbHVzPW5ldyBZbigicGx1cyIsWW4uYWRkLmRlZmluaXRpb24pLFluLmdpc3ROZXc9bmV3IFluKCJnaXN0LW5ldyIsWW4uYWRkLmRlZmluaXRpb24pLFluLnJlcG9DcmVhdGU9bmV3IFluKCJyZXBvLWNyZWF0ZSIsWW4uYWRkLmRlZmluaXRpb24pLFluLmxpZ2h0YnVsYj1uZXcgWW4oImxpZ2h0YnVsYiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MSJ9KSxZbi5saWdodEJ1bGI9bmV3IFluKCJsaWdodC1idWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLFluLnJlcG89bmV3IFluKCJyZXBvIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLFluLnJlcG9EZWxldGU9bmV3IFluKCJyZXBvLWRlbGV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxZbi5naXN0Rm9yaz1uZXcgWW4oImdpc3QtZm9yayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxZbi5yZXBvRm9ya2VkPW5ldyBZbigicmVwby1mb3JrZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjMifSksWW4uZ2l0UHVsbFJlcXVlc3Q9bmV3IFluKCJnaXQtcHVsbC1yZXF1ZXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTY0In0pLFluLmdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkPW5ldyBZbigiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksWW4ucmVjb3JkS2V5cz1uZXcgWW4oInJlY29yZC1rZXlzIix7Zm9udENoYXJhY3RlcjoiXFxlYTY1In0pLFluLmtleWJvYXJkPW5ldyBZbigia2V5Ym9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjUifSksWW4udGFnPW5ldyBZbigidGFnIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLFluLnRhZ0FkZD1uZXcgWW4oInRhZy1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjYifSksWW4udGFnUmVtb3ZlPW5ldyBZbigidGFnLXJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NiJ9KSxZbi5wZXJzb249bmV3IFluKCJwZXJzb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksWW4ucGVyc29uRm9sbG93PW5ldyBZbigicGVyc29uLWZvbGxvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxZbi5wZXJzb25PdXRsaW5lPW5ldyBZbigicGVyc29uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksWW4ucGVyc29uRmlsbGVkPW5ldyBZbigicGVyc29uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxZbi5naXRCcmFuY2g9bmV3IFluKCJnaXQtYnJhbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLFluLmdpdEJyYW5jaENyZWF0ZT1uZXcgWW4oImdpdC1icmFuY2gtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLFluLmdpdEJyYW5jaERlbGV0ZT1uZXcgWW4oImdpdC1icmFuY2gtZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLFluLnNvdXJjZUNvbnRyb2w9bmV3IFluKCJzb3VyY2UtY29udHJvbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxZbi5taXJyb3I9bmV3IFluKCJtaXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjkifSksWW4ubWlycm9yUHVibGljPW5ldyBZbigibWlycm9yLXB1YmxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxZbi5zdGFyPW5ldyBZbigic3RhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxZbi5zdGFyQWRkPW5ldyBZbigic3Rhci1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksWW4uc3RhckRlbGV0ZT1uZXcgWW4oInN0YXItZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLFluLnN0YXJFbXB0eT1uZXcgWW4oInN0YXItZW1wdHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksWW4uY29tbWVudD1uZXcgWW4oImNvbW1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmIifSksWW4uY29tbWVudEFkZD1uZXcgWW4oImNvbW1lbnQtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLFluLmFsZXJ0PW5ldyBZbigiYWxlcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksWW4ud2FybmluZz1uZXcgWW4oIndhcm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksWW4uc2VhcmNoPW5ldyBZbigic2VhcmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLFluLnNlYXJjaFNhdmU9bmV3IFluKCJzZWFyY2gtc2F2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZCJ9KSxZbi5sb2dPdXQ9bmV3IFluKCJsb2ctb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZlIn0pLFluLnNpZ25PdXQ9bmV3IFluKCJzaWduLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxZbi5sb2dJbj1uZXcgWW4oImxvZy1pbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZiJ9KSxZbi5zaWduSW49bmV3IFluKCJzaWduLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYTZmIn0pLFluLmV5ZT1uZXcgWW4oImV5ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxZbi5leWVVbndhdGNoPW5ldyBZbigiZXllLXVud2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksWW4uZXllV2F0Y2g9bmV3IFluKCJleWUtd2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksWW4uY2lyY2xlRmlsbGVkPW5ldyBZbigiY2lyY2xlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxZbi5wcmltaXRpdmVEb3Q9bmV3IFluKCJwcmltaXRpdmUtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLFluLmNsb3NlRGlydHk9bmV3IFluKCJjbG9zZS1kaXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnQ9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLFluLmRlYnVnQnJlYWtwb2ludERpc2FibGVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxZbi5kZWJ1Z0hpbnQ9bmV3IFluKCJkZWJ1Zy1oaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLFluLnByaW1pdGl2ZVNxdWFyZT1uZXcgWW4oInByaW1pdGl2ZS1zcXVhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzIifSksWW4uZWRpdD1uZXcgWW4oImVkaXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksWW4ucGVuY2lsPW5ldyBZbigicGVuY2lsIix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLFluLmluZm89bmV3IFluKCJpbmZvIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLFluLmlzc3VlT3BlbmVkPW5ldyBZbigiaXNzdWUtb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLFluLmdpc3RQcml2YXRlPW5ldyBZbigiZ2lzdC1wcml2YXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLFluLmdpdEZvcmtQcml2YXRlPW5ldyBZbigiZ2l0LWZvcmstcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxZbi5sb2NrPW5ldyBZbigibG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxZbi5taXJyb3JQcml2YXRlPW5ldyBZbigibWlycm9yLXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksWW4uY2xvc2U9bmV3IFluKCJjbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxZbi5yZW1vdmVDbG9zZT1uZXcgWW4oInJlbW92ZS1jbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxZbi54PW5ldyBZbigieCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxZbi5yZXBvU3luYz1uZXcgWW4oInJlcG8tc3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxZbi5zeW5jPW5ldyBZbigic3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxZbi5jbG9uZT1uZXcgWW4oImNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYTc4In0pLFluLmRlc2t0b3BEb3dubG9hZD1uZXcgWW4oImRlc2t0b3AtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksWW4uYmVha2VyPW5ldyBZbigiYmVha2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLFluLm1pY3Jvc2NvcGU9bmV3IFluKCJtaWNyb3Njb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLFluLnZtPW5ldyBZbigidm0iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksWW4uZGV2aWNlRGVza3RvcD1uZXcgWW4oImRldmljZS1kZXNrdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTdhIn0pLFluLmZpbGU9bmV3IFluKCJmaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLFluLmZpbGVUZXh0PW5ldyBZbigiZmlsZS10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLFluLm1vcmU9bmV3IFluKCJtb3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdjIn0pLFluLmVsbGlwc2lzPW5ldyBZbigiZWxsaXBzaXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2MifSksWW4ua2ViYWJIb3Jpem9udGFsPW5ldyBZbigia2ViYWItaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxZbi5tYWlsUmVwbHk9bmV3IFluKCJtYWlsLXJlcGx5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdkIn0pLFluLnJlcGx5PW5ldyBZbigicmVwbHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2QifSksWW4ub3JnYW5pemF0aW9uPW5ldyBZbigib3JnYW5pemF0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLFluLm9yZ2FuaXphdGlvbkZpbGxlZD1uZXcgWW4oIm9yZ2FuaXphdGlvbi1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksWW4ub3JnYW5pemF0aW9uT3V0bGluZT1uZXcgWW4oIm9yZ2FuaXphdGlvbi1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLFluLm5ld0ZpbGU9bmV3IFluKCJuZXctZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxZbi5maWxlQWRkPW5ldyBZbigiZmlsZS1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2YifSksWW4ubmV3Rm9sZGVyPW5ldyBZbigibmV3LWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MCJ9KSxZbi5maWxlRGlyZWN0b3J5Q3JlYXRlPW5ldyBZbigiZmlsZS1kaXJlY3RvcnktY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLFluLnRyYXNoPW5ldyBZbigidHJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhODEifSksWW4udHJhc2hjYW49bmV3IFluKCJ0cmFzaGNhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MSJ9KSxZbi5oaXN0b3J5PW5ldyBZbigiaGlzdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxZbi5jbG9jaz1uZXcgWW4oImNsb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYTgyIn0pLFluLmZvbGRlcj1uZXcgWW4oImZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxZbi5maWxlRGlyZWN0b3J5PW5ldyBZbigiZmlsZS1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksWW4uc3ltYm9sRm9sZGVyPW5ldyBZbigic3ltYm9sLWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxZbi5sb2dvR2l0aHViPW5ldyBZbigibG9nby1naXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksWW4ubWFya0dpdGh1Yj1uZXcgWW4oIm1hcmstZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLFluLmdpdGh1Yj1uZXcgWW4oImdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxZbi50ZXJtaW5hbD1uZXcgWW4oInRlcm1pbmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLFluLmNvbnNvbGU9bmV3IFluKCJjb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLFluLnJlcGw9bmV3IFluKCJyZXBsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLFluLnphcD1uZXcgWW4oInphcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxZbi5zeW1ib2xFdmVudD1uZXcgWW4oInN5bWJvbC1ldmVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxZbi5lcnJvcj1uZXcgWW4oImVycm9yIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLFluLnN0b3A9bmV3IFluKCJzdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLFluLnZhcmlhYmxlPW5ldyBZbigidmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksWW4uc3ltYm9sVmFyaWFibGU9bmV3IFluKCJzeW1ib2wtdmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksWW4uYXJyYXk9bmV3IFluKCJhcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxZbi5zeW1ib2xBcnJheT1uZXcgWW4oInN5bWJvbC1hcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxZbi5zeW1ib2xNb2R1bGU9bmV3IFluKCJzeW1ib2wtbW9kdWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLFluLnN5bWJvbFBhY2thZ2U9bmV3IFluKCJzeW1ib2wtcGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxZbi5zeW1ib2xOYW1lc3BhY2U9bmV3IFluKCJzeW1ib2wtbmFtZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLFluLnN5bWJvbE9iamVjdD1uZXcgWW4oInN5bWJvbC1vYmplY3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksWW4uc3ltYm9sTWV0aG9kPW5ldyBZbigic3ltYm9sLW1ldGhvZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxZbi5zeW1ib2xGdW5jdGlvbj1uZXcgWW4oInN5bWJvbC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxZbi5zeW1ib2xDb25zdHJ1Y3Rvcj1uZXcgWW4oInN5bWJvbC1jb25zdHJ1Y3RvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxZbi5zeW1ib2xCb29sZWFuPW5ldyBZbigic3ltYm9sLWJvb2xlYW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhOGYifSksWW4uc3ltYm9sTnVsbD1uZXcgWW4oInN5bWJvbC1udWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLFluLnN5bWJvbE51bWVyaWM9bmV3IFluKCJzeW1ib2wtbnVtZXJpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MCJ9KSxZbi5zeW1ib2xOdW1iZXI9bmV3IFluKCJzeW1ib2wtbnVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkwIn0pLFluLnN5bWJvbFN0cnVjdHVyZT1uZXcgWW4oInN5bWJvbC1zdHJ1Y3R1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksWW4uc3ltYm9sU3RydWN0PW5ldyBZbigic3ltYm9sLXN0cnVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MSJ9KSxZbi5zeW1ib2xQYXJhbWV0ZXI9bmV3IFluKCJzeW1ib2wtcGFyYW1ldGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkyIn0pLFluLnN5bWJvbFR5cGVQYXJhbWV0ZXI9bmV3IFluKCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksWW4uc3ltYm9sS2V5PW5ldyBZbigic3ltYm9sLWtleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxZbi5zeW1ib2xUZXh0PW5ldyBZbigic3ltYm9sLXRleHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksWW4uc3ltYm9sUmVmZXJlbmNlPW5ldyBZbigic3ltYm9sLXJlZmVyZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxZbi5nb1RvRmlsZT1uZXcgWW4oImdvLXRvLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTQifSksWW4uc3ltYm9sRW51bT1uZXcgWW4oInN5bWJvbC1lbnVtIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLFluLnN5bWJvbFZhbHVlPW5ldyBZbigic3ltYm9sLXZhbHVlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLFluLnN5bWJvbFJ1bGVyPW5ldyBZbigic3ltYm9sLXJ1bGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLFluLnN5bWJvbFVuaXQ9bmV3IFluKCJzeW1ib2wtdW5pdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxZbi5hY3RpdmF0ZUJyZWFrcG9pbnRzPW5ldyBZbigiYWN0aXZhdGUtYnJlYWtwb2ludHMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTcifSksWW4uYXJjaGl2ZT1uZXcgWW4oImFyY2hpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTgifSksWW4uYXJyb3dCb3RoPW5ldyBZbigiYXJyb3ctYm90aCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5OSJ9KSxZbi5hcnJvd0Rvd249bmV3IFluKCJhcnJvdy1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlhIn0pLFluLmFycm93TGVmdD1uZXcgWW4oImFycm93LWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWIifSksWW4uYXJyb3dSaWdodD1uZXcgWW4oImFycm93LXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTljIn0pLFluLmFycm93U21hbGxEb3duPW5ldyBZbigiYXJyb3ctc21hbGwtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZCJ9KSxZbi5hcnJvd1NtYWxsTGVmdD1uZXcgWW4oImFycm93LXNtYWxsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWUifSksWW4uYXJyb3dTbWFsbFJpZ2h0PW5ldyBZbigiYXJyb3ctc21hbGwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWYifSksWW4uYXJyb3dTbWFsbFVwPW5ldyBZbigiYXJyb3ctc21hbGwtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTAifSksWW4uYXJyb3dVcD1uZXcgWW4oImFycm93LXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWExIn0pLFluLmJlbGw9bmV3IFluKCJiZWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWEyIn0pLFluLmJvbGQ9bmV3IFluKCJib2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWEzIn0pLFluLmJvb2s9bmV3IFluKCJib29rIix7Zm9udENoYXJhY3RlcjoiXFxlYWE0In0pLFluLmJvb2ttYXJrPW5ldyBZbigiYm9va21hcmsiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTUifSksWW4uZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE2In0pLFluLmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZD1uZXcgWW4oImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE4In0pLFluLmRlYnVnQnJlYWtwb2ludERhdGE9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksWW4uZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1kYXRhLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLFluLmRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFhIn0pLFluLmRlYnVnQnJlYWtwb2ludExvZz1uZXcgWW4oImRlYnVnLWJyZWFrcG9pbnQtbG9nIix7Zm9udENoYXJhY3RlcjoiXFxlYWFiIn0pLFluLmRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1sb2ctZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWIifSksWW4uYnJpZWZjYXNlPW5ldyBZbigiYnJpZWZjYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWFjIn0pLFluLmJyb2FkY2FzdD1uZXcgWW4oImJyb2FkY2FzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZCJ9KSxZbi5icm93c2VyPW5ldyBZbigiYnJvd3NlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZSJ9KSxZbi5idWc9bmV3IFluKCJidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWYifSksWW4uY2FsZW5kYXI9bmV3IFluKCJjYWxlbmRhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMCJ9KSxZbi5jYXNlU2Vuc2l0aXZlPW5ldyBZbigiY2FzZS1zZW5zaXRpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjEifSksWW4uY2hlY2s9bmV3IFluKCJjaGVjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMiJ9KSxZbi5jaGVja2xpc3Q9bmV3IFluKCJjaGVja2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjMifSksWW4uY2hldnJvbkRvd249bmV3IFluKCJjaGV2cm9uLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhYjQifSksWW4uZHJvcERvd25CdXR0b249bmV3IFluKCJkcm9wLWRvd24tYnV0dG9uIixZbi5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxZbi5jaGV2cm9uTGVmdD1uZXcgWW4oImNoZXZyb24tbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNSJ9KSxZbi5jaGV2cm9uUmlnaHQ9bmV3IFluKCJjaGV2cm9uLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWI2In0pLFluLmNoZXZyb25VcD1uZXcgWW4oImNoZXZyb24tdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjcifSksWW4uY2hyb21lQ2xvc2U9bmV3IFluKCJjaHJvbWUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjgifSksWW4uY2hyb21lTWF4aW1pemU9bmV3IFluKCJjaHJvbWUtbWF4aW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjkifSksWW4uY2hyb21lTWluaW1pemU9bmV3IFluKCJjaHJvbWUtbWluaW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmEifSksWW4uY2hyb21lUmVzdG9yZT1uZXcgWW4oImNocm9tZS1yZXN0b3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYWJiIn0pLFluLmNpcmNsZU91dGxpbmU9bmV3IFluKCJjaXJjbGUtb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYyJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJjIn0pLFluLmNpcmNsZVNsYXNoPW5ldyBZbigiY2lyY2xlLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWJkIn0pLFluLmNpcmN1aXRCb2FyZD1uZXcgWW4oImNpcmN1aXQtYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmUifSksWW4uY2xlYXJBbGw9bmV3IFluKCJjbGVhci1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmYifSksWW4uY2xpcHB5PW5ldyBZbigiY2xpcHB5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWMwIn0pLFluLmNsb3NlQWxsPW5ldyBZbigiY2xvc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWMxIn0pLFluLmNsb3VkRG93bmxvYWQ9bmV3IFluKCJjbG91ZC1kb3dubG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMiJ9KSxZbi5jbG91ZFVwbG9hZD1uZXcgWW4oImNsb3VkLXVwbG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMyJ9KSxZbi5jb2RlPW5ldyBZbigiY29kZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNCJ9KSxZbi5jb2xsYXBzZUFsbD1uZXcgWW4oImNvbGxhcHNlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNSJ9KSxZbi5jb2xvck1vZGU9bmV3IFluKCJjb2xvci1tb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM2In0pLFluLmNvbW1lbnREaXNjdXNzaW9uPW5ldyBZbigiY29tbWVudC1kaXNjdXNzaW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWM3In0pLFluLmNvbXBhcmVDaGFuZ2VzPW5ldyBZbigiY29tcGFyZS1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLFluLmNyZWRpdENhcmQ9bmV3IFluKCJjcmVkaXQtY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjOSJ9KSxZbi5kYXNoPW5ldyBZbigiZGFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjYyJ9KSxZbi5kYXNoYm9hcmQ9bmV3IFluKCJkYXNoYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2QifSksWW4uZGF0YWJhc2U9bmV3IFluKCJkYXRhYmFzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZSJ9KSxZbi5kZWJ1Z0NvbnRpbnVlPW5ldyBZbigiZGVidWctY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2YifSksWW4uZGVidWdEaXNjb25uZWN0PW5ldyBZbigiZGVidWctZGlzY29ubmVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMCJ9KSxZbi5kZWJ1Z1BhdXNlPW5ldyBZbigiZGVidWctcGF1c2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDEifSksWW4uZGVidWdSZXN0YXJ0PW5ldyBZbigiZGVidWctcmVzdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMiJ9KSxZbi5kZWJ1Z1N0YXJ0PW5ldyBZbigiZGVidWctc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDMifSksWW4uZGVidWdTdGVwSW50bz1uZXcgWW4oImRlYnVnLXN0ZXAtaW50byIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNCJ9KSxZbi5kZWJ1Z1N0ZXBPdXQ9bmV3IFluKCJkZWJ1Zy1zdGVwLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNSJ9KSxZbi5kZWJ1Z1N0ZXBPdmVyPW5ldyBZbigiZGVidWctc3RlcC1vdmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ2In0pLFluLmRlYnVnU3RvcD1uZXcgWW4oImRlYnVnLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDcifSksWW4uZGVidWc9bmV3IFluKCJkZWJ1ZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOCJ9KSxZbi5kZXZpY2VDYW1lcmFWaWRlbz1uZXcgWW4oImRldmljZS1jYW1lcmEtdmlkZW8iLHtmb250Q2hhcmFjdGVyOiJcXGVhZDkifSksWW4uZGV2aWNlQ2FtZXJhPW5ldyBZbigiZGV2aWNlLWNhbWVyYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYSJ9KSxZbi5kZXZpY2VNb2JpbGU9bmV3IFluKCJkZXZpY2UtbW9iaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYWRiIn0pLFluLmRpZmZBZGRlZD1uZXcgWW4oImRpZmYtYWRkZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGMifSksWW4uZGlmZklnbm9yZWQ9bmV3IFluKCJkaWZmLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGQifSksWW4uZGlmZk1vZGlmaWVkPW5ldyBZbigiZGlmZi1tb2RpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZSJ9KSxZbi5kaWZmUmVtb3ZlZD1uZXcgWW4oImRpZmYtcmVtb3ZlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZiJ9KSxZbi5kaWZmUmVuYW1lZD1uZXcgWW4oImRpZmYtcmVuYW1lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMCJ9KSxZbi5kaWZmPW5ldyBZbigiZGlmZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMSJ9KSxZbi5kaXNjYXJkPW5ldyBZbigiZGlzY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMiJ9KSxZbi5lZGl0b3JMYXlvdXQ9bmV3IFluKCJlZGl0b3ItbGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWUzIn0pLFluLmVtcHR5V2luZG93PW5ldyBZbigiZW1wdHktd2luZG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU0In0pLFluLmV4Y2x1ZGU9bmV3IFluKCJleGNsdWRlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU1In0pLFluLmV4dGVuc2lvbnM9bmV3IFluKCJleHRlbnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYWU2In0pLFluLmV5ZUNsb3NlZD1uZXcgWW4oImV5ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTcifSksWW4uZmlsZUJpbmFyeT1uZXcgWW4oImZpbGUtYmluYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU4In0pLFluLmZpbGVDb2RlPW5ldyBZbigiZmlsZS1jb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU5In0pLFluLmZpbGVNZWRpYT1uZXcgWW4oImZpbGUtbWVkaWEiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWEifSksWW4uZmlsZVBkZj1uZXcgWW4oImZpbGUtcGRmIix7Zm9udENoYXJhY3RlcjoiXFxlYWViIn0pLFluLmZpbGVTdWJtb2R1bGU9bmV3IFluKCJmaWxlLXN1Ym1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYyJ9KSxZbi5maWxlU3ltbGlua0RpcmVjdG9yeT1uZXcgWW4oImZpbGUtc3ltbGluay1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWQifSksWW4uZmlsZVN5bWxpbmtGaWxlPW5ldyBZbigiZmlsZS1zeW1saW5rLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWUifSksWW4uZmlsZVppcD1uZXcgWW4oImZpbGUtemlwIix7Zm9udENoYXJhY3RlcjoiXFxlYWVmIn0pLFluLmZpbGVzPW5ldyBZbigiZmlsZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjAifSksWW4uZmlsdGVyPW5ldyBZbigiZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWYxIn0pLFluLmZsYW1lPW5ldyBZbigiZmxhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjIifSksWW4uZm9sZERvd249bmV3IFluKCJmb2xkLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZjMifSksWW4uZm9sZFVwPW5ldyBZbigiZm9sZC11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNCJ9KSxZbi5mb2xkPW5ldyBZbigiZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNSJ9KSxZbi5mb2xkZXJBY3RpdmU9bmV3IFluKCJmb2xkZXItYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYWY2In0pLFluLmZvbGRlck9wZW5lZD1uZXcgWW4oImZvbGRlci1vcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjcifSksWW4uZ2Vhcj1uZXcgWW4oImdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjgifSksWW4uZ2lmdD1uZXcgWW4oImdpZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjkifSksWW4uZ2lzdFNlY3JldD1uZXcgWW4oImdpc3Qtc2VjcmV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZhIn0pLFluLmdpc3Q9bmV3IFluKCJnaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZiIn0pLFluLmdpdENvbW1pdD1uZXcgWW4oImdpdC1jb21taXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmMifSksWW4uZ2l0Q29tcGFyZT1uZXcgWW4oImdpdC1jb21wYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLFluLmdpdE1lcmdlPW5ldyBZbigiZ2l0LW1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZlIn0pLFluLmdpdGh1YkFjdGlvbj1uZXcgWW4oImdpdGh1Yi1hY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZmYifSksWW4uZ2l0aHViQWx0PW5ldyBZbigiZ2l0aHViLWFsdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMCJ9KSxZbi5nbG9iZT1uZXcgWW4oImdsb2JlIix7Zm9udENoYXJhY3RlcjoiXFxlYjAxIn0pLFluLmdyYWJiZXI9bmV3IFluKCJncmFiYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjAyIn0pLFluLmdyYXBoPW5ldyBZbigiZ3JhcGgiLHtmb250Q2hhcmFjdGVyOiJcXGViMDMifSksWW4uZ3JpcHBlcj1uZXcgWW4oImdyaXBwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDQifSksWW4uaGVhcnQ9bmV3IFluKCJoZWFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNSJ9KSxZbi5ob21lPW5ldyBZbigiaG9tZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNiJ9KSxZbi5ob3Jpem9udGFsUnVsZT1uZXcgWW4oImhvcml6b250YWwtcnVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNyJ9KSxZbi5odWJvdD1uZXcgWW4oImh1Ym90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjA4In0pLFluLmluYm94PW5ldyBZbigiaW5ib3giLHtmb250Q2hhcmFjdGVyOiJcXGViMDkifSksWW4uaXNzdWVDbG9zZWQ9bmV3IFluKCJpc3N1ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksWW4uaXNzdWVSZW9wZW5lZD1uZXcgWW4oImlzc3VlLXJlb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjBiIn0pLFluLmlzc3Vlcz1uZXcgWW4oImlzc3VlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYyJ9KSxZbi5pdGFsaWM9bmV3IFluKCJpdGFsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGQifSksWW4uamVyc2V5PW5ldyBZbigiamVyc2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjBlIn0pLFluLmpzb249bmV3IFluKCJqc29uIix7Zm9udENoYXJhY3RlcjoiXFxlYjBmIn0pLFluLmtlYmFiVmVydGljYWw9bmV3IFluKCJrZWJhYi12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMCJ9KSxZbi5rZXk9bmV3IFluKCJrZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMTEifSksWW4ubGF3PW5ldyBZbigibGF3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjEyIn0pLFluLmxpZ2h0YnVsYkF1dG9maXg9bmV3IFluKCJsaWdodGJ1bGItYXV0b2ZpeCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMyJ9KSxZbi5saW5rRXh0ZXJuYWw9bmV3IFluKCJsaW5rLWV4dGVybmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjE0In0pLFluLmxpbms9bmV3IFluKCJsaW5rIix7Zm9udENoYXJhY3RlcjoiXFxlYjE1In0pLFluLmxpc3RPcmRlcmVkPW5ldyBZbigibGlzdC1vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE2In0pLFluLmxpc3RVbm9yZGVyZWQ9bmV3IFluKCJsaXN0LXVub3JkZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNyJ9KSxZbi5saXZlU2hhcmU9bmV3IFluKCJsaXZlLXNoYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYjE4In0pLFluLmxvYWRpbmc9bmV3IFluKCJsb2FkaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjE5In0pLFluLmxvY2F0aW9uPW5ldyBZbigibG9jYXRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWEifSksWW4ubWFpbFJlYWQ9bmV3IFluKCJtYWlsLXJlYWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMWIifSksWW4ubWFpbD1uZXcgWW4oIm1haWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMWMifSksWW4ubWFya2Rvd249bmV3IFluKCJtYXJrZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZCJ9KSxZbi5tZWdhcGhvbmU9bmV3IFluKCJtZWdhcGhvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMWUifSksWW4ubWVudGlvbj1uZXcgWW4oIm1lbnRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWYifSksWW4ubWlsZXN0b25lPW5ldyBZbigibWlsZXN0b25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjIwIn0pLFluLm1vcnRhckJvYXJkPW5ldyBZbigibW9ydGFyLWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYjIxIn0pLFluLm1vdmU9bmV3IFluKCJtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjIyIn0pLFluLm11bHRpcGxlV2luZG93cz1uZXcgWW4oIm11bHRpcGxlLXdpbmRvd3MiLHtmb250Q2hhcmFjdGVyOiJcXGViMjMifSksWW4ubXV0ZT1uZXcgWW4oIm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjQifSksWW4ubm9OZXdsaW5lPW5ldyBZbigibm8tbmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNSJ9KSxZbi5ub3RlPW5ldyBZbigibm90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNiJ9KSxZbi5vY3RvZmFjZT1uZXcgWW4oIm9jdG9mYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI3In0pLFluLm9wZW5QcmV2aWV3PW5ldyBZbigib3Blbi1wcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjI4In0pLFluLnBhY2thZ2VfPW5ldyBZbigicGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyOSJ9KSxZbi5wYWludGNhbj1uZXcgWW4oInBhaW50Y2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYjJhIn0pLFluLnBpbj1uZXcgWW4oInBpbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYiJ9KSxZbi5wbGF5PW5ldyBZbigicGxheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxZbi5ydW49bmV3IFluKCJydW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksWW4ucGx1Zz1uZXcgWW4oInBsdWciLHtmb250Q2hhcmFjdGVyOiJcXGViMmQifSksWW4ucHJlc2VydmVDYXNlPW5ldyBZbigicHJlc2VydmUtY2FzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZSJ9KSxZbi5wcmV2aWV3PW5ldyBZbigicHJldmlldyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZiJ9KSxZbi5wcm9qZWN0PW5ldyBZbigicHJvamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMCJ9KSxZbi5wdWxzZT1uZXcgWW4oInB1bHNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjMxIn0pLFluLnF1ZXN0aW9uPW5ldyBZbigicXVlc3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMzIifSksWW4ucXVvdGU9bmV3IFluKCJxdW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMyJ9KSxZbi5yYWRpb1Rvd2VyPW5ldyBZbigicmFkaW8tdG93ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzQifSksWW4ucmVhY3Rpb25zPW5ldyBZbigicmVhY3Rpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjM1In0pLFluLnJlZmVyZW5jZXM9bmV3IFluKCJyZWZlcmVuY2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjM2In0pLFluLnJlZnJlc2g9bmV3IFluKCJyZWZyZXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjM3In0pLFluLnJlZ2V4PW5ldyBZbigicmVnZXgiLHtmb250Q2hhcmFjdGVyOiJcXGViMzgifSksWW4ucmVtb3RlRXhwbG9yZXI9bmV3IFluKCJyZW1vdGUtZXhwbG9yZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzkifSksWW4ucmVtb3RlPW5ldyBZbigicmVtb3RlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNhIn0pLFluLnJlbW92ZT1uZXcgWW4oInJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYiJ9KSxZbi5yZXBsYWNlQWxsPW5ldyBZbigicmVwbGFjZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViM2MifSksWW4ucmVwbGFjZT1uZXcgWW4oInJlcGxhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViM2QifSksWW4ucmVwb0Nsb25lPW5ldyBZbigicmVwby1jbG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzZSJ9KSxZbi5yZXBvRm9yY2VQdXNoPW5ldyBZbigicmVwby1mb3JjZS1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjNmIn0pLFluLnJlcG9QdWxsPW5ldyBZbigicmVwby1wdWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjQwIn0pLFluLnJlcG9QdXNoPW5ldyBZbigicmVwby1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjQxIn0pLFluLnJlcG9ydD1uZXcgWW4oInJlcG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MiJ9KSxZbi5yZXF1ZXN0Q2hhbmdlcz1uZXcgWW4oInJlcXVlc3QtY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MyJ9KSxZbi5yb2NrZXQ9bmV3IFluKCJyb2NrZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNDQifSksWW4ucm9vdEZvbGRlck9wZW5lZD1uZXcgWW4oInJvb3QtZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NSJ9KSxZbi5yb290Rm9sZGVyPW5ldyBZbigicm9vdC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNDYifSksWW4ucnNzPW5ldyBZbigicnNzIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ3In0pLFluLnJ1Ynk9bmV3IFluKCJydWJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ4In0pLFluLnNhdmVBbGw9bmV3IFluKCJzYXZlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0OSJ9KSxZbi5zYXZlQXM9bmV3IFluKCJzYXZlLWFzIix7Zm9udENoYXJhY3RlcjoiXFxlYjRhIn0pLFluLnNhdmU9bmV3IFluKCJzYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjRiIn0pLFluLnNjcmVlbkZ1bGw9bmV3IFluKCJzY3JlZW4tZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0YyJ9KSxZbi5zY3JlZW5Ob3JtYWw9bmV3IFluKCJzY3JlZW4tbm9ybWFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjRkIn0pLFluLnNlYXJjaFN0b3A9bmV3IFluKCJzZWFyY2gtc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZSJ9KSxZbi5zZXJ2ZXI9bmV3IFluKCJzZXJ2ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNTAifSksWW4uc2V0dGluZ3NHZWFyPW5ldyBZbigic2V0dGluZ3MtZ2VhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MSJ9KSxZbi5zZXR0aW5ncz1uZXcgWW4oInNldHRpbmdzIix7Zm9udENoYXJhY3RlcjoiXFxlYjUyIn0pLFluLnNoaWVsZD1uZXcgWW4oInNoaWVsZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MyJ9KSxZbi5zbWlsZXk9bmV3IFluKCJzbWlsZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViNTQifSksWW4uc29ydFByZWNlZGVuY2U9bmV3IFluKCJzb3J0LXByZWNlZGVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNTUifSksWW4uc3BsaXRIb3Jpem9udGFsPW5ldyBZbigic3BsaXQtaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NiJ9KSxZbi5zcGxpdFZlcnRpY2FsPW5ldyBZbigic3BsaXQtdmVydGljYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTcifSksWW4uc3F1aXJyZWw9bmV3IFluKCJzcXVpcnJlbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OCJ9KSxZbi5zdGFyRnVsbD1uZXcgWW4oInN0YXItZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OSJ9KSxZbi5zdGFySGFsZj1uZXcgWW4oInN0YXItaGFsZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YSJ9KSxZbi5zeW1ib2xDbGFzcz1uZXcgWW4oInN5bWJvbC1jbGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YiJ9KSxZbi5zeW1ib2xDb2xvcj1uZXcgWW4oInN5bWJvbC1jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxZbi5zeW1ib2xDdXN0b21Db2xvcj1uZXcgWW4oInN5bWJvbC1jdXN0b21jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxZbi5zeW1ib2xDb25zdGFudD1uZXcgWW4oInN5bWJvbC1jb25zdGFudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZCJ9KSxZbi5zeW1ib2xFbnVtTWVtYmVyPW5ldyBZbigic3ltYm9sLWVudW0tbWVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjVlIn0pLFluLnN5bWJvbEZpZWxkPW5ldyBZbigic3ltYm9sLWZpZWxkIix7Zm9udENoYXJhY3RlcjoiXFxlYjVmIn0pLFluLnN5bWJvbEZpbGU9bmV3IFluKCJzeW1ib2wtZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MCJ9KSxZbi5zeW1ib2xJbnRlcmZhY2U9bmV3IFluKCJzeW1ib2wtaW50ZXJmYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjYxIn0pLFluLnN5bWJvbEtleXdvcmQ9bmV3IFluKCJzeW1ib2wta2V5d29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MiJ9KSxZbi5zeW1ib2xNaXNjPW5ldyBZbigic3ltYm9sLW1pc2MiLHtmb250Q2hhcmFjdGVyOiJcXGViNjMifSksWW4uc3ltYm9sT3BlcmF0b3I9bmV3IFluKCJzeW1ib2wtb3BlcmF0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNjQifSksWW4uc3ltYm9sUHJvcGVydHk9bmV3IFluKCJzeW1ib2wtcHJvcGVydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksWW4ud3JlbmNoPW5ldyBZbigid3JlbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLFluLndyZW5jaFN1YmFjdGlvbj1uZXcgWW4oIndyZW5jaC1zdWJhY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksWW4uc3ltYm9sU25pcHBldD1uZXcgWW4oInN5bWJvbC1zbmlwcGV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjY2In0pLFluLnRhc2tsaXN0PW5ldyBZbigidGFza2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGViNjcifSksWW4udGVsZXNjb3BlPW5ldyBZbigidGVsZXNjb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYjY4In0pLFluLnRleHRTaXplPW5ldyBZbigidGV4dC1zaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYjY5In0pLFluLnRocmVlQmFycz1uZXcgWW4oInRocmVlLWJhcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmEifSksWW4udGh1bWJzZG93bj1uZXcgWW4oInRodW1ic2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmIifSksWW4udGh1bWJzdXA9bmV3IFluKCJ0aHVtYnN1cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2YyJ9KSxZbi50b29scz1uZXcgWW4oInRvb2xzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZkIn0pLFluLnRyaWFuZ2xlRG93bj1uZXcgWW4oInRyaWFuZ2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmUifSksWW4udHJpYW5nbGVMZWZ0PW5ldyBZbigidHJpYW5nbGUtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2ZiJ9KSxZbi50cmlhbmdsZVJpZ2h0PW5ldyBZbigidHJpYW5nbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzAifSksWW4udHJpYW5nbGVVcD1uZXcgWW4oInRyaWFuZ2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYjcxIn0pLFluLnR3aXR0ZXI9bmV3IFluKCJ0d2l0dGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjcyIn0pLFluLnVuZm9sZD1uZXcgWW4oInVuZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MyJ9KSxZbi51bmxvY2s9bmV3IFluKCJ1bmxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGViNzQifSksWW4udW5tdXRlPW5ldyBZbigidW5tdXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYjc1In0pLFluLnVudmVyaWZpZWQ9bmV3IFluKCJ1bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc2In0pLFluLnZlcmlmaWVkPW5ldyBZbigidmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzcifSksWW4udmVyc2lvbnM9bmV3IFluKCJ2ZXJzaW9ucyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OCJ9KSxZbi52bUFjdGl2ZT1uZXcgWW4oInZtLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OSJ9KSxZbi52bU91dGxpbmU9bmV3IFluKCJ2bS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYjdhIn0pLFluLnZtUnVubmluZz1uZXcgWW4oInZtLXJ1bm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViN2IifSksWW4ud2F0Y2g9bmV3IFluKCJ3YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YyJ9KSxZbi53aGl0ZXNwYWNlPW5ldyBZbigid2hpdGVzcGFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZCJ9KSxZbi53aG9sZVdvcmQ9bmV3IFluKCJ3aG9sZS13b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjdlIn0pLFluLndpbmRvdz1uZXcgWW4oIndpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZiJ9KSxZbi53b3JkV3JhcD1uZXcgWW4oIndvcmQtd3JhcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MCJ9KSxZbi56b29tSW49bmV3IFluKCJ6b29tLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYjgxIn0pLFluLnpvb21PdXQ9bmV3IFluKCJ6b29tLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MiJ9KSxZbi5saXN0RmlsdGVyPW5ldyBZbigibGlzdC1maWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViODMifSksWW4ubGlzdEZsYXQ9bmV3IFluKCJsaXN0LWZsYXQiLHtmb250Q2hhcmFjdGVyOiJcXGViODQifSksWW4ubGlzdFNlbGVjdGlvbj1uZXcgWW4oImxpc3Qtc2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLFluLnNlbGVjdGlvbj1uZXcgWW4oInNlbGVjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NSJ9KSxZbi5saXN0VHJlZT1uZXcgWW4oImxpc3QtdHJlZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NiJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvblVudmVyaWZpZWQ9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODcifSksWW4uZGVidWdCcmVha3BvaW50RnVuY3Rpb249bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLFluLmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLFluLmRlYnVnU3RhY2tmcmFtZUFjdGl2ZT1uZXcgWW4oImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg5In0pLFluLmRlYnVnU3RhY2tmcmFtZURvdD1uZXcgWW4oImRlYnVnLXN0YWNrZnJhbWUtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjhhIn0pLFluLmRlYnVnU3RhY2tmcmFtZT1uZXcgWW4oImRlYnVnLXN0YWNrZnJhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGIifSksWW4uZGVidWdTdGFja2ZyYW1lRm9jdXNlZD1uZXcgWW4oImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnRVbnN1cHBvcnRlZD1uZXcgWW4oImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOGMifSksWW4uc3ltYm9sU3RyaW5nPW5ldyBZbigic3ltYm9sLXN0cmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZCJ9KSxZbi5kZWJ1Z1JldmVyc2VDb250aW51ZT1uZXcgWW4oImRlYnVnLXJldmVyc2UtY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGUifSksWW4uZGVidWdTdGVwQmFjaz1uZXcgWW4oImRlYnVnLXN0ZXAtYmFjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZiJ9KSxZbi5kZWJ1Z1Jlc3RhcnRGcmFtZT1uZXcgWW4oImRlYnVnLXJlc3RhcnQtZnJhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTAifSksWW4uY2FsbEluY29taW5nPW5ldyBZbigiY2FsbC1pbmNvbWluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MiJ9KSxZbi5jYWxsT3V0Z29pbmc9bmV3IFluKCJjYWxsLW91dGdvaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjkzIn0pLFluLm1lbnU9bmV3IFluKCJtZW51Iix7Zm9udENoYXJhY3RlcjoiXFxlYjk0In0pLFluLmV4cGFuZEFsbD1uZXcgWW4oImV4cGFuZC1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOTUifSksWW4uZmVlZGJhY2s9bmV3IFluKCJmZWVkYmFjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NiJ9KSxZbi5ncm91cEJ5UmVmVHlwZT1uZXcgWW4oImdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk3In0pLFluLnVuZ3JvdXBCeVJlZlR5cGU9bmV3IFluKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk4In0pLFluLmFjY291bnQ9bmV3IFluKCJhY2NvdW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYjk5In0pLFluLmJlbGxEb3Q9bmV3IFluKCJiZWxsLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YSJ9KSxZbi5kZWJ1Z0NvbnNvbGU9bmV3IFluKCJkZWJ1Zy1jb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYjliIn0pLFluLmxpYnJhcnk9bmV3IFluKCJsaWJyYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjljIn0pLFluLm91dHB1dD1uZXcgWW4oIm91dHB1dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZCJ9KSxZbi5ydW5BbGw9bmV3IFluKCJydW4tYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjllIn0pLFluLnN5bmNJZ25vcmVkPW5ldyBZbigic3luYy1pZ25vcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjlmIn0pLFluLnBpbm5lZD1uZXcgWW4oInBpbm5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMCJ9KSxZbi5naXRodWJJbnZlcnRlZD1uZXcgWW4oImdpdGh1Yi1pbnZlcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMSJ9KSxZbi5kZWJ1Z0FsdD1uZXcgWW4oImRlYnVnLWFsdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MSJ9KSxZbi5zZXJ2ZXJQcm9jZXNzPW5ldyBZbigic2VydmVyLXByb2Nlc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViYTIifSksWW4uc2VydmVyRW52aXJvbm1lbnQ9bmV3IFluKCJzZXJ2ZXItZW52aXJvbm1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTMifSksWW4ucGFzcz1uZXcgWW4oInBhc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksWW4uc3RvcENpcmNsZT1uZXcgWW4oInN0b3AtY2lyY2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYmE1In0pLFluLnBsYXlDaXJjbGU9bmV3IFluKCJwbGF5LWNpcmNsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNiJ9KSxZbi5yZWNvcmQ9bmV3IFluKCJyZWNvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTcifSksWW4uZGVidWdBbHRTbWFsbD1uZXcgWW4oImRlYnVnLWFsdC1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhOCJ9KSxZbi52bUNvbm5lY3Q9bmV3IFluKCJ2bS1jb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmE5In0pLFluLmNsb3VkPW5ldyBZbigiY2xvdWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWEifSksWW4ubWVyZ2U9bmV3IFluKCJtZXJnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhYiJ9KSxZbi5leHBvcnRJY29uPW5ldyBZbigiZXhwb3J0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFjIn0pLFluLmdyYXBoTGVmdD1uZXcgWW4oImdyYXBoLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWQifSksWW4ubWFnbmV0PW5ldyBZbigibWFnbmV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFlIn0pLFluLm5vdGVib29rPW5ldyBZbigibm90ZWJvb2siLHtmb250Q2hhcmFjdGVyOiJcXGViYWYifSksWW4ucmVkbz1uZXcgWW4oInJlZG8iLHtmb250Q2hhcmFjdGVyOiJcXGViYjAifSksWW4uY2hlY2tBbGw9bmV3IFluKCJjaGVjay1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViYjEifSksWW4ucGlubmVkRGlydHk9bmV3IFluKCJwaW5uZWQtZGlydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjIifSksWW4ucGFzc0ZpbGxlZD1uZXcgWW4oInBhc3MtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmIzIn0pLFluLmNpcmNsZUxhcmdlRmlsbGVkPW5ldyBZbigiY2lyY2xlLWxhcmdlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNCJ9KSxZbi5jaXJjbGVMYXJnZU91dGxpbmU9bmV3IFluKCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNSJ9KSxZbi5jb21iaW5lPW5ldyBZbigiY29tYmluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxZbi5nYXRoZXI9bmV3IFluKCJnYXRoZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViYjYifSksWW4udGFibGU9bmV3IFluKCJ0YWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNyJ9KSxZbi52YXJpYWJsZUdyb3VwPW5ldyBZbigidmFyaWFibGUtZ3JvdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViYjgifSksWW4udHlwZUhpZXJhcmNoeT1uZXcgWW4oInR5cGUtaGllcmFyY2h5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmI5In0pLFluLnR5cGVIaWVyYXJjaHlTdWI9bmV3IFluKCJ0eXBlLWhpZXJhcmNoeS1zdWIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmEifSksWW4udHlwZUhpZXJhcmNoeVN1cGVyPW5ldyBZbigidHlwZS1oaWVyYXJjaHktc3VwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmIifSksWW4uZ2l0UHVsbFJlcXVlc3RDcmVhdGU9bmV3IFluKCJnaXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYyJ9KSxZbi5ydW5BYm92ZT1uZXcgWW4oInJ1bi1hYm92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZCJ9KSxZbi5ydW5CZWxvdz1uZXcgWW4oInJ1bi1iZWxvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZSJ9KSxZbi5ub3RlYm9va1RlbXBsYXRlPW5ldyBZbigibm90ZWJvb2stdGVtcGxhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYmYifSksWW4uZGVidWdSZXJ1bj1uZXcgWW4oImRlYnVnLXJlcnVuIix7Zm9udENoYXJhY3RlcjoiXFxlYmMwIn0pLFluLndvcmtzcGFjZVRydXN0ZWQ9bmV3IFluKCJ3b3Jrc3BhY2UtdHJ1c3RlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMSJ9KSxZbi53b3Jrc3BhY2VVbnRydXN0ZWQ9bmV3IFluKCJ3b3Jrc3BhY2UtdW50cnVzdGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMyIn0pLFluLndvcmtzcGFjZVVuc3BlY2lmaWVkPW5ldyBZbigid29ya3NwYWNlLXVuc3BlY2lmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMzIn0pLFluLnRlcm1pbmFsQ21kPW5ldyBZbigidGVybWluYWwtY21kIix7Zm9udENoYXJhY3RlcjoiXFxlYmM0In0pLFluLnRlcm1pbmFsRGViaWFuPW5ldyBZbigidGVybWluYWwtZGViaWFuIix7Zm9udENoYXJhY3RlcjoiXFxlYmM1In0pLFluLnRlcm1pbmFsTGludXg9bmV3IFluKCJ0ZXJtaW5hbC1saW51eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNiJ9KSxZbi50ZXJtaW5hbFBvd2Vyc2hlbGw9bmV3IFluKCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmM3In0pLFluLnRlcm1pbmFsVG11eD1uZXcgWW4oInRlcm1pbmFsLXRtdXgiLHtmb250Q2hhcmFjdGVyOiJcXGViYzgifSksWW4udGVybWluYWxVYnVudHU9bmV3IFluKCJ0ZXJtaW5hbC11YnVudHUiLHtmb250Q2hhcmFjdGVyOiJcXGViYzkifSksWW4udGVybWluYWxCYXNoPW5ldyBZbigidGVybWluYWwtYmFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjYSJ9KSxZbi5hcnJvd1N3YXA9bmV3IFluKCJhcnJvdy1zd2FwIix7Zm9udENoYXJhY3RlcjoiXFxlYmNiIn0pLFluLmNvcHk9bmV3IFluKCJjb3B5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmNjIn0pLFluLnBlcnNvbkFkZD1uZXcgWW4oInBlcnNvbi1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGViY2QifSksWW4uZmlsdGVyRmlsbGVkPW5ldyBZbigiZmlsdGVyLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZSJ9KSxZbi53YW5kPW5ldyBZbigid2FuZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZiJ9KSxZbi5kZWJ1Z0xpbmVCeUxpbmU9bmV3IFluKCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDAifSksWW4uaW5zcGVjdD1uZXcgWW4oImluc3BlY3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDEifSksWW4ubGF5ZXJzPW5ldyBZbigibGF5ZXJzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQyIn0pLFluLmxheWVyc0RvdD1uZXcgWW4oImxheWVycy1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDMifSksWW4ubGF5ZXJzQWN0aXZlPW5ldyBZbigibGF5ZXJzLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNCJ9KSxZbi5jb21wYXNzPW5ldyBZbigiY29tcGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNSJ9KSxZbi5jb21wYXNzRG90PW5ldyBZbigiY29tcGFzcy1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDYifSksWW4uY29tcGFzc0FjdGl2ZT1uZXcgWW4oImNvbXBhc3MtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ3In0pLFluLmF6dXJlPW5ldyBZbigiYXp1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDgifSksWW4uaXNzdWVEcmFmdD1uZXcgWW4oImlzc3VlLWRyYWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQ5In0pLFluLmdpdFB1bGxSZXF1ZXN0Q2xvc2VkPW5ldyBZbigiZ2l0LXB1bGwtcmVxdWVzdC1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGEifSksWW4uZ2l0UHVsbFJlcXVlc3REcmFmdD1uZXcgWW4oImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGIifSksWW4uZGVidWdBbGw9bmV3IFluKCJkZWJ1Zy1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZGMifSksWW4uZGVidWdDb3ZlcmFnZT1uZXcgWW4oImRlYnVnLWNvdmVyYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmRkIn0pLFluLnJ1bkVycm9ycz1uZXcgWW4oInJ1bi1lcnJvcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZGUifSksWW4uZm9sZGVyTGlicmFyeT1uZXcgWW4oImZvbGRlci1saWJyYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmRmIn0pLFluLmRlYnVnQ29udGludWVTbWFsbD1uZXcgWW4oImRlYnVnLWNvbnRpbnVlLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmUwIn0pLFluLmJlYWtlclN0b3A9bmV3IFluKCJiZWFrZXItc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMSJ9KSxZbi5ncmFwaExpbmU9bmV3IFluKCJncmFwaC1saW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmUyIn0pLFluLmdyYXBoU2NhdHRlcj1uZXcgWW4oImdyYXBoLXNjYXR0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZTMifSksWW4ucGllQ2hhcnQ9bmV3IFluKCJwaWUtY2hhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZTQifSksWW4uYnJhY2tldD1uZXcgWW4oImJyYWNrZXQiLFluLmpzb24uZGVmaW5pdGlvbiksWW4uYnJhY2tldERvdD1uZXcgWW4oImJyYWNrZXQtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmU1In0pLFluLmJyYWNrZXRFcnJvcj1uZXcgWW4oImJyYWNrZXQtZXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViZTYifSksWW4ubG9ja1NtYWxsPW5ldyBZbigibG9jay1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNyJ9KSxZbi5henVyZURldm9wcz1uZXcgWW4oImF6dXJlLWRldm9wcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlOCJ9KSxZbi52ZXJpZmllZEZpbGxlZD1uZXcgWW4oInZlcmlmaWVkLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlOSJ9KSxZbi5uZXdMaW5lPW5ldyBZbigibmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYSJ9KSxZbi5sYXlvdXQ9bmV3IFluKCJsYXlvdXQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWIifSksWW4ubGF5b3V0QWN0aXZpdHliYXJMZWZ0PW5ldyBZbigibGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWMifSksWW4ubGF5b3V0QWN0aXZpdHliYXJSaWdodD1uZXcgWW4oImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZCJ9KSxZbi5sYXlvdXRQYW5lbExlZnQ9bmV3IFluKCJsYXlvdXQtcGFuZWwtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZSJ9KSxZbi5sYXlvdXRQYW5lbENlbnRlcj1uZXcgWW4oImxheW91dC1wYW5lbC1jZW50ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZWYifSksWW4ubGF5b3V0UGFuZWxKdXN0aWZ5PW5ldyBZbigibGF5b3V0LXBhbmVsLWp1c3RpZnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZjAifSksWW4ubGF5b3V0UGFuZWxSaWdodD1uZXcgWW4oImxheW91dC1wYW5lbC1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMSJ9KSxZbi5sYXlvdXRQYW5lbD1uZXcgWW4oImxheW91dC1wYW5lbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMiJ9KSxZbi5sYXlvdXRTaWRlYmFyTGVmdD1uZXcgWW4oImxheW91dC1zaWRlYmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjMifSksWW4ubGF5b3V0U2lkZWJhclJpZ2h0PW5ldyBZbigibGF5b3V0LXNpZGViYXItcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjQifSksWW4ubGF5b3V0U3RhdHVzYmFyPW5ldyBZbigibGF5b3V0LXN0YXR1c2JhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNSJ9KSxZbi5sYXlvdXRNZW51YmFyPW5ldyBZbigibGF5b3V0LW1lbnViYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZjYifSksWW4ubGF5b3V0Q2VudGVyZWQ9bmV3IFluKCJsYXlvdXQtY2VudGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjcifSksWW4udGFyZ2V0PW5ldyBZbigidGFyZ2V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY4In0pLFluLmluZGVudD1uZXcgWW4oImluZGVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmOSJ9KSxZbi5yZWNvcmRTbWFsbD1uZXcgWW4oInJlY29yZC1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYSJ9KSxZbi5lcnJvclNtYWxsPW5ldyBZbigiZXJyb3Itc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZmIifSksWW4uYXJyb3dDaXJjbGVEb3duPW5ldyBZbigiYXJyb3ctY2lyY2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViZmMifSksWW4uYXJyb3dDaXJjbGVMZWZ0PW5ldyBZbigiYXJyb3ctY2lyY2xlLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZmQifSksWW4uYXJyb3dDaXJjbGVSaWdodD1uZXcgWW4oImFycm93LWNpcmNsZS1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmZSJ9KSxZbi5hcnJvd0NpcmNsZVVwPW5ldyBZbigiYXJyb3ctY2lyY2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYmZmIn0pLFluLmRpYWxvZ0Vycm9yPW5ldyBZbigiZGlhbG9nLWVycm9yIixZbi5lcnJvci5kZWZpbml0aW9uKSxZbi5kaWFsb2dXYXJuaW5nPW5ldyBZbigiZGlhbG9nLXdhcm5pbmciLFluLndhcm5pbmcuZGVmaW5pdGlvbiksWW4uZGlhbG9nSW5mbz1uZXcgWW4oImRpYWxvZy1pbmZvIixZbi5pbmZvLmRlZmluaXRpb24pLFluLmRpYWxvZ0Nsb3NlPW5ldyBZbigiZGlhbG9nLWNsb3NlIixZbi5jbG9zZS5kZWZpbml0aW9uKSxZbi50cmVlSXRlbUV4cGFuZGVkPW5ldyBZbigidHJlZS1pdGVtLWV4cGFuZGVkIixZbi5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxZbi50cmVlRmlsdGVyT25UeXBlT249bmV3IFluKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIixZbi5saXN0RmlsdGVyLmRlZmluaXRpb24pLFluLnRyZWVGaWx0ZXJPblR5cGVPZmY9bmV3IFluKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9mZiIsWW4ubGlzdFNlbGVjdGlvbi5kZWZpbml0aW9uKSxZbi50cmVlRmlsdGVyQ2xlYXI9bmV3IFluKCJ0cmVlLWZpbHRlci1jbGVhciIsWW4uY2xvc2UuZGVmaW5pdGlvbiksWW4udHJlZUl0ZW1Mb2FkaW5nPW5ldyBZbigidHJlZS1pdGVtLWxvYWRpbmciLFluLmxvYWRpbmcuZGVmaW5pdGlvbiksWW4ubWVudVNlbGVjdGlvbj1uZXcgWW4oIm1lbnUtc2VsZWN0aW9uIixZbi5jaGVjay5kZWZpbml0aW9uKSxZbi5tZW51U3VibWVudT1uZXcgWW4oIm1lbnUtc3VibWVudSIsWW4uY2hldnJvblJpZ2h0LmRlZmluaXRpb24pLFluLm1lbnVCYXJNb3JlPW5ldyBZbigibWVudWJhci1tb3JlIixZbi5tb3JlLmRlZmluaXRpb24pLFluLnNjcm9sbGJhckJ1dHRvbkxlZnQ9bmV3IFluKCJzY3JvbGxiYXItYnV0dG9uLWxlZnQiLFluLnRyaWFuZ2xlTGVmdC5kZWZpbml0aW9uKSxZbi5zY3JvbGxiYXJCdXR0b25SaWdodD1uZXcgWW4oInNjcm9sbGJhci1idXR0b24tcmlnaHQiLFluLnRyaWFuZ2xlUmlnaHQuZGVmaW5pdGlvbiksWW4uc2Nyb2xsYmFyQnV0dG9uVXA9bmV3IFluKCJzY3JvbGxiYXItYnV0dG9uLXVwIixZbi50cmlhbmdsZVVwLmRlZmluaXRpb24pLFluLnNjcm9sbGJhckJ1dHRvbkRvd249bmV3IFluKCJzY3JvbGxiYXItYnV0dG9uLWRvd24iLFluLnRyaWFuZ2xlRG93bi5kZWZpbml0aW9uKSxZbi50b29sQmFyTW9yZT1uZXcgWW4oInRvb2xiYXItbW9yZSIsWW4ubW9yZS5kZWZpbml0aW9uKSxZbi5xdWlja0lucHV0QmFjaz1uZXcgWW4oInF1aWNrLWlucHV0LWJhY2siLFluLmFycm93TGVmdC5kZWZpbml0aW9uKSxmdW5jdGlvbihlKXtlLmljb25OYW1lU2VnbWVudD0iW0EtWmEtejAtOV0rIixlLmljb25OYW1lRXhwcmVzc2lvbj0iW0EtWmEtejAtOS1dKyIsZS5pY29uTW9kaWZpZXJFeHByZXNzaW9uPSJ+W0EtWmEtel0rIixlLmljb25OYW1lQ2hhcmFjdGVyPSJbQS1aYS16MC05fi1dIjtjb25zdCB0PW5ldyBSZWdFeHAoYF4oJHtlLmljb25OYW1lRXhwcmVzc2lvbn0pKCR7ZS5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/JGApO2Z1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIFluKXJldHVyblsiY29kaWNvbiIsImNvZGljb24tIitlLmlkXTtjb25zdCByPXQuZXhlYyhlLmlkKTtpZighcilyZXR1cm4gbihZbi5lcnJvcik7bGV0WyxpLG9dPXI7Y29uc3QgYT1bImNvZGljb24iLCJjb2RpY29uLSIraV07cmV0dXJuIG8mJmEucHVzaCgiY29kaWNvbi1tb2RpZmllci0iK28uc3Vic3RyKDEpKSxhfWUuYXNDbGFzc05hbWVBcnJheT1uLGUuYXNDbGFzc05hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSkuam9pbigiICIpfSxlLmFzQ1NTU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIi4iK24oZSkuam9pbigiLiIpfX0oRHR8fChEdD17fSkpO2NsYXNzIFFue2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLl90b2tlbkJyYW5kPXZvaWQgMCx0aGlzLm9mZnNldD1lLHRoaXMudHlwZT10LHRoaXMubGFuZ3VhZ2U9bn10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fWNsYXNzIGVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fdG9rZW5pemF0aW9uUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMudG9rZW5zPWUsdGhpcy5lbmRTdGF0ZT10fX1jbGFzcyB0cntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2VuY29kZWRUb2tlbml6YXRpb25SZXN1bHRCcmFuZD12b2lkIDAsdGhpcy50b2tlbnM9ZSx0aGlzLmVuZFN0YXRlPXR9fSFmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxZbi5zeW1ib2xNZXRob2QpLHQuc2V0KDEsWW4uc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDIsWW4uc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMsWW4uc3ltYm9sRmllbGQpLHQuc2V0KDQsWW4uc3ltYm9sVmFyaWFibGUpLHQuc2V0KDUsWW4uc3ltYm9sQ2xhc3MpLHQuc2V0KDYsWW4uc3ltYm9sU3RydWN0KSx0LnNldCg3LFluLnN5bWJvbEludGVyZmFjZSksdC5zZXQoOCxZbi5zeW1ib2xNb2R1bGUpLHQuc2V0KDksWW4uc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLFluLnN5bWJvbEV2ZW50KSx0LnNldCgxMSxZbi5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIsWW4uc3ltYm9sVW5pdCksdC5zZXQoMTMsWW4uc3ltYm9sVmFsdWUpLHQuc2V0KDE1LFluLnN5bWJvbEVudW0pLHQuc2V0KDE0LFluLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSxZbi5zeW1ib2xFbnVtKSx0LnNldCgxNixZbi5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyxZbi5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyxZbi5zeW1ib2xTbmlwcGV0KSx0LnNldCgxOCxZbi5zeW1ib2xUZXh0KSx0LnNldCgxOSxZbi5zeW1ib2xDb2xvciksdC5zZXQoMjAsWW4uc3ltYm9sRmlsZSksdC5zZXQoMjEsWW4uc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMixZbi5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsWW4uc3ltYm9sRm9sZGVyKSx0LnNldCgyNCxZbi5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSxZbi5hY2NvdW50KSx0LnNldCgyNixZbi5pc3N1ZXMpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitlKSxuPVluLnN5bWJvbFByb3BlcnR5KSxufTtjb25zdCBuPW5ldyBNYXA7bi5zZXQoIm1ldGhvZCIsMCksbi5zZXQoImZ1bmN0aW9uIiwxKSxuLnNldCgiY29uc3RydWN0b3IiLDIpLG4uc2V0KCJmaWVsZCIsMyksbi5zZXQoInZhcmlhYmxlIiw0KSxuLnNldCgiY2xhc3MiLDUpLG4uc2V0KCJzdHJ1Y3QiLDYpLG4uc2V0KCJpbnRlcmZhY2UiLDcpLG4uc2V0KCJtb2R1bGUiLDgpLG4uc2V0KCJwcm9wZXJ0eSIsOSksbi5zZXQoImV2ZW50IiwxMCksbi5zZXQoIm9wZXJhdG9yIiwxMSksbi5zZXQoInVuaXQiLDEyKSxuLnNldCgidmFsdWUiLDEzKSxuLnNldCgiY29uc3RhbnQiLDE0KSxuLnNldCgiZW51bSIsMTUpLG4uc2V0KCJlbnVtLW1lbWJlciIsMTYpLG4uc2V0KCJlbnVtTWVtYmVyIiwxNiksbi5zZXQoImtleXdvcmQiLDE3KSxuLnNldCgic25pcHBldCIsMjcpLG4uc2V0KCJ0ZXh0IiwxOCksbi5zZXQoImNvbG9yIiwxOSksbi5zZXQoImZpbGUiLDIwKSxuLnNldCgicmVmZXJlbmNlIiwyMSksbi5zZXQoImN1c3RvbWNvbG9yIiwyMiksbi5zZXQoImZvbGRlciIsMjMpLG4uc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLG4uc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCksbi5zZXQoImFjY291bnQiLDI1KSxuLnNldCgiaXNzdWUiLDI2KSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXtsZXQgcj1uLmdldChlKTtyZXR1cm4gdm9pZCAwIT09cnx8dHx8KHI9OSkscn19KFZ0fHwoVnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifShLdHx8KEt0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifShVdHx8KFV0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0oQnR8fChCdD17fSkpLGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLFluLnN5bWJvbEZpbGUpLHQuc2V0KDEsWW4uc3ltYm9sTW9kdWxlKSx0LnNldCgyLFluLnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyxZbi5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LFluLnN5bWJvbENsYXNzKSx0LnNldCg1LFluLnN5bWJvbE1ldGhvZCksdC5zZXQoNixZbi5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyxZbi5zeW1ib2xGaWVsZCksdC5zZXQoOCxZbi5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSxZbi5zeW1ib2xFbnVtKSx0LnNldCgxMCxZbi5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDExLFluLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMixZbi5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsWW4uc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE0LFluLnN5bWJvbFN0cmluZyksdC5zZXQoMTUsWW4uc3ltYm9sTnVtYmVyKSx0LnNldCgxNixZbi5zeW1ib2xCb29sZWFuKSx0LnNldCgxNyxZbi5zeW1ib2xBcnJheSksdC5zZXQoMTgsWW4uc3ltYm9sT2JqZWN0KSx0LnNldCgxOSxZbi5zeW1ib2xLZXkpLHQuc2V0KDIwLFluLnN5bWJvbE51bGwpLHQuc2V0KDIxLFluLnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLFluLnN5bWJvbFN0cnVjdCksdC5zZXQoMjMsWW4uc3ltYm9sRXZlbnQpLHQuc2V0KDI0LFluLnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSxZbi5zeW1ib2xUeXBlUGFyYW1ldGVyKSxlLnRvSWNvbj1mdW5jdGlvbihlKXtsZXQgbj10LmdldChlKTtyZXR1cm4gbnx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK2UpLG49WW4uc3ltYm9sUHJvcGVydHkpLG59fShqdHx8KGp0PXt9KSksZnVuY3Rpb24oZSl7ZS5pcz1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpJiYoInN0cmluZyI9PXR5cGVvZiBlLmlkJiYic3RyaW5nIj09dHlwZW9mIGUudGl0bGUpfX0ocXR8fChxdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSgkdHx8KCR0PXt9KSksbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXAsdGhpcy5fZmFjdG9yaWVzPW5ldyBNYXAsdGhpcy5fb25EaWRDaGFuZ2U9bmV3IFUsdGhpcy5vbkRpZENoYW5nZT10aGlzLl9vbkRpZENoYW5nZS5ldmVudCx0aGlzLl9jb2xvck1hcD1udWxsfWZpcmUoZSl7dGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczplLGNoYW5nZWRDb2xvck1hcDohMX0pfXJlZ2lzdGVyKGUsdCl7cmV0dXJuIHRoaXMuX21hcC5zZXQoZSx0KSx0aGlzLmZpcmUoW2VdKSxoKCgoKT0+e3RoaXMuX21hcC5nZXQoZSk9PT10JiYodGhpcy5fbWFwLmRlbGV0ZShlKSx0aGlzLmZpcmUoW2VdKSl9KSl9cmVnaXN0ZXJGYWN0b3J5KGUsdCl7dmFyIG47bnVsbD09PShuPXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSkpfHx2b2lkIDA9PT1ufHxuLmRpc3Bvc2UoKTtjb25zdCByPW5ldyBabih0aGlzLGUsdCk7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQoZSxyKSxoKCgoKT0+e2NvbnN0IHQ9dGhpcy5fZmFjdG9yaWVzLmdldChlKTt0JiZ0PT09ciYmKHRoaXMuX2ZhY3Rvcmllcy5kZWxldGUoZSksdC5kaXNwb3NlKCkpfSkpfWdldE9yQ3JlYXRlKGUpe3JldHVybiBYbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9dGhpcy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBuPXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7cmV0dXJuIW58fG4uaXNSZXNvbHZlZD9udWxsOih5aWVsZCBuLnJlc29sdmUoKSx0aGlzLmdldChlKSl9KSl9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUpfHxudWxsfWlzUmVzb2x2ZWQoZSl7aWYodGhpcy5nZXQoZSkpcmV0dXJuITA7Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiEodCYmIXQuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAoZSl7dGhpcy5fY29sb3JNYXA9ZSx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fbWFwLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJnRoaXMuX2NvbG9yTWFwLmxlbmd0aD4yP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fSxmdW5jdGlvbihlKXtlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkRpc2FibGVkPTFdPSJEaXNhYmxlZCIsZVtlLkVuYWJsZWQ9Ml09IkVuYWJsZWQifShXdHx8KFd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5EZWZhdWx0Rm9yZWdyb3VuZD0xXT0iRGVmYXVsdEZvcmVncm91bmQiLGVbZS5EZWZhdWx0QmFja2dyb3VuZD0yXT0iRGVmYXVsdEJhY2tncm91bmQifShIdHx8KEh0PXt9KSksZnVuY3Rpb24oZSl7ZS5EQVJLPSJkYXJrIixlLkxJR0hUPSJsaWdodCIsZS5ISUdIX0NPTlRSQVNUPSJoYyJ9KHp0fHwoenQ9e30pKSxmdW5jdGlvbihlKXtlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifShHdHx8KEd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KEp0fHwoSnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KFh0fHwoWHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KFp0fHwoWnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuQVBQTElDQVRJT049MV09IkFQUExJQ0FUSU9OIixlW2UuTUFDSElORT0yXT0iTUFDSElORSIsZVtlLldJTkRPVz0zXT0iV0lORE9XIixlW2UuUkVTT1VSQ0U9NF09IlJFU09VUkNFIixlW2UuTEFOR1VBR0VfT1ZFUlJJREFCTEU9NV09IkxBTkdVQUdFX09WRVJSSURBQkxFIixlW2UuTUFDSElORV9PVkVSUklEQUJMRT02XT0iTUFDSElORV9PVkVSUklEQUJMRSJ9KFl0fHwoWXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuVVNFUj0xXT0iVVNFUiIsZVtlLlVTRVJfTE9DQUw9Ml09IlVTRVJfTE9DQUwiLGVbZS5VU0VSX1JFTU9URT0zXT0iVVNFUl9SRU1PVEUiLGVbZS5XT1JLU1BBQ0U9NF09IldPUktTUEFDRSIsZVtlLldPUktTUEFDRV9GT0xERVI9NV09IldPUktTUEFDRV9GT0xERVIiLGVbZS5ERUZBVUxUPTZdPSJERUZBVUxUIixlW2UuTUVNT1JZPTddPSJNRU1PUlkifShRdHx8KFF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkVYQUNUPTBdPSJFWEFDVCIsZVtlLkFCT1ZFPTFdPSJBQk9WRSIsZVtlLkJFTE9XPTJdPSJCRUxPVyJ9KGVufHwoZW49e30pKSxmdW5jdGlvbihlKXtlW2UuRmFsc2U9MF09IkZhbHNlIixlW2UuVHJ1ZT0xXT0iVHJ1ZSIsZVtlLkRlZmluZWQ9Ml09IkRlZmluZWQiLGVbZS5Ob3Q9M109Ik5vdCIsZVtlLkVxdWFscz00XT0iRXF1YWxzIixlW2UuTm90RXF1YWxzPTVdPSJOb3RFcXVhbHMiLGVbZS5BbmQ9Nl09IkFuZCIsZVtlLlJlZ2V4PTddPSJSZWdleCIsZVtlLk5vdFJlZ2V4PThdPSJOb3RSZWdleCIsZVtlLk9yPTldPSJPciIsZVtlLkluPTEwXT0iSW4iLGVbZS5Ob3RJbj0xMV09Ik5vdEluIixlW2UuR3JlYXRlcj0xMl09IkdyZWF0ZXIiLGVbZS5HcmVhdGVyRXF1YWxzPTEzXT0iR3JlYXRlckVxdWFscyIsZVtlLlNtYWxsZXI9MTRdPSJTbWFsbGVyIixlW2UuU21hbGxlckVxdWFscz0xNV09IlNtYWxsZXJFcXVhbHMifSh0bnx8KHRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0obm58fChubj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0ocm58fChybj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KG9ufHwob249e30pKSxmdW5jdGlvbihlKXtlLk11bHRpbGluZT0ibXVsdGlsaW5lVGV4dCIsZS5TaW5nbGVsaW5lPSJzaW5nbGVsaW5lVGV4dCJ9KGFufHwoYW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0oc258fChzbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hdXRvQ2xvc2luZ0JyYWNrZXRzPTVdPSJhdXRvQ2xvc2luZ0JyYWNrZXRzIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9Nl09ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT03XT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPThdPSJhdXRvQ2xvc2luZ1F1b3RlcyIsZVtlLmF1dG9JbmRlbnQ9OV09ImF1dG9JbmRlbnQiLGVbZS5hdXRvbWF0aWNMYXlvdXQ9MTBdPSJhdXRvbWF0aWNMYXlvdXQiLGVbZS5hdXRvU3Vycm91bmQ9MTFdPSJhdXRvU3Vycm91bmQiLGVbZS5icmFja2V0UGFpckNvbG9yaXphdGlvbj0xMl09ImJyYWNrZXRQYWlyQ29sb3JpemF0aW9uIixlW2UuZ3VpZGVzPTEzXT0iZ3VpZGVzIixlW2UuY29kZUxlbnM9MTRdPSJjb2RlTGVucyIsZVtlLmNvZGVMZW5zRm9udEZhbWlseT0xNV09ImNvZGVMZW5zRm9udEZhbWlseSIsZVtlLmNvZGVMZW5zRm9udFNpemU9MTZdPSJjb2RlTGVuc0ZvbnRTaXplIixlW2UuY29sb3JEZWNvcmF0b3JzPTE3XT0iY29sb3JEZWNvcmF0b3JzIixlW2UuY29sdW1uU2VsZWN0aW9uPTE4XT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MTldPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTIwXT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yMV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjJdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTIzXT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yNF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yNV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MjZdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0yN109ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0yOF09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0yOV09ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzBdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTMxXT0iZHJhZ0FuZERyb3AiLGVbZS5lbXB0eVNlbGVjdGlvbkNsaXBib2FyZD0zMl09ImVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzNdPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT0zNF09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9MzVdPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9MzZdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9MzddPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTM4XT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD0zOV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00MF09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQxXT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQyXT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00M109ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz00NF09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz00NV09ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT00Nl09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD00N109ImZvbnRXZWlnaHQiLGVbZS5mb3JtYXRPblBhc3RlPTQ4XT0iZm9ybWF0T25QYXN0ZSIsZVtlLmZvcm1hdE9uVHlwZT00OV09ImZvcm1hdE9uVHlwZSIsZVtlLmdseXBoTWFyZ2luPTUwXT0iZ2x5cGhNYXJnaW4iLGVbZS5nb3RvTG9jYXRpb249NTFdPSJnb3RvTG9jYXRpb24iLGVbZS5oaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyPTUyXT0iaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlciIsZVtlLmhvdmVyPTUzXT0iaG92ZXIiLGVbZS5pbkRpZmZFZGl0b3I9NTRdPSJpbkRpZmZFZGl0b3IiLGVbZS5pbmxpbmVTdWdnZXN0PTU1XT0iaW5saW5lU3VnZ2VzdCIsZVtlLmxldHRlclNwYWNpbmc9NTZdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTU3XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NThdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NTldPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjBdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjFdPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz02Ml09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz02M109ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz02NF09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTY1XT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NjZdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTY3XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NjhdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz02OV09Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzBdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03MV09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5vY2N1cnJlbmNlc0hpZ2hsaWdodD03Ml09Im9jY3VycmVuY2VzSGlnaGxpZ2h0IixlW2Uub3ZlcnZpZXdSdWxlckJvcmRlcj03M109Im92ZXJ2aWV3UnVsZXJCb3JkZXIiLGVbZS5vdmVydmlld1J1bGVyTGFuZXM9NzRdPSJvdmVydmlld1J1bGVyTGFuZXMiLGVbZS5wYWRkaW5nPTc1XT0icGFkZGluZyIsZVtlLnBhcmFtZXRlckhpbnRzPTc2XT0icGFyYW1ldGVySGludHMiLGVbZS5wZWVrV2lkZ2V0RGVmYXVsdEZvY3VzPTc3XT0icGVla1dpZGdldERlZmF1bHRGb2N1cyIsZVtlLmRlZmluaXRpb25MaW5rT3BlbnNJblBlZWs9NzhdPSJkZWZpbml0aW9uTGlua09wZW5zSW5QZWVrIixlW2UucXVpY2tTdWdnZXN0aW9ucz03OV09InF1aWNrU3VnZ2VzdGlvbnMiLGVbZS5xdWlja1N1Z2dlc3Rpb25zRGVsYXk9ODBdPSJxdWlja1N1Z2dlc3Rpb25zRGVsYXkiLGVbZS5yZWFkT25seT04MV09InJlYWRPbmx5IixlW2UucmVuYW1lT25UeXBlPTgyXT0icmVuYW1lT25UeXBlIixlW2UucmVuZGVyQ29udHJvbENoYXJhY3RlcnM9ODNdPSJyZW5kZXJDb250cm9sQ2hhcmFjdGVycyIsZVtlLnJlbmRlckZpbmFsTmV3bGluZT04NF09InJlbmRlckZpbmFsTmV3bGluZSIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHQ9ODVdPSJyZW5kZXJMaW5lSGlnaGxpZ2h0IixlW2UucmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXM9ODZdPSJyZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cyIsZVtlLnJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucz04N109InJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucyIsZVtlLnJlbmRlcldoaXRlc3BhY2U9ODhdPSJyZW5kZXJXaGl0ZXNwYWNlIixlW2UucmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZz04OV09InJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmciLGVbZS5yb3VuZGVkU2VsZWN0aW9uPTkwXT0icm91bmRlZFNlbGVjdGlvbiIsZVtlLnJ1bGVycz05MV09InJ1bGVycyIsZVtlLnNjcm9sbGJhcj05Ml09InNjcm9sbGJhciIsZVtlLnNjcm9sbEJleW9uZExhc3RDb2x1bW49OTNdPSJzY3JvbGxCZXlvbmRMYXN0Q29sdW1uIixlW2Uuc2Nyb2xsQmV5b25kTGFzdExpbmU9OTRdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz05NV09InNjcm9sbFByZWRvbWluYW50QXhpcyIsZVtlLnNlbGVjdGlvbkNsaXBib2FyZD05Nl09InNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLnNlbGVjdGlvbkhpZ2hsaWdodD05N109InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9OThdPSJzZWxlY3RPbkxpbmVOdW1iZXJzIixlW2Uuc2hvd0ZvbGRpbmdDb250cm9scz05OV09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTEwMF09InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTAxXT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTAyXT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTAzXT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTA0XT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTEwNV09InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTEwNl09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTA3XT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTA4XT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMDldPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTEwXT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTExXT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTExMl09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMTNdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMTRdPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTExNV09InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTExNl09InVzZVRhYlN0b3BzIixlW2Uud29yZFNlcGFyYXRvcnM9MTE3XT0id29yZFNlcGFyYXRvcnMiLGVbZS53b3JkV3JhcD0xMThdPSJ3b3JkV3JhcCIsZVtlLndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnM9MTE5XT0id29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzPTEyMF09IndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBDb2x1bW49MTIxXT0id29yZFdyYXBDb2x1bW4iLGVbZS53b3JkV3JhcE92ZXJyaWRlMT0xMjJdPSJ3b3JkV3JhcE92ZXJyaWRlMSIsZVtlLndvcmRXcmFwT3ZlcnJpZGUyPTEyM109IndvcmRXcmFwT3ZlcnJpZGUyIixlW2Uud3JhcHBpbmdJbmRlbnQ9MTI0XT0id3JhcHBpbmdJbmRlbnQiLGVbZS53cmFwcGluZ1N0cmF0ZWd5PTEyNV09IndyYXBwaW5nU3RyYXRlZ3kiLGVbZS5zaG93RGVwcmVjYXRlZD0xMjZdPSJzaG93RGVwcmVjYXRlZCIsZVtlLmlubGF5SGludHM9MTI3XT0iaW5sYXlIaW50cyIsZVtlLmVkaXRvckNsYXNzTmFtZT0xMjhdPSJlZGl0b3JDbGFzc05hbWUiLGVbZS5waXhlbFJhdGlvPTEyOV09InBpeGVsUmF0aW8iLGVbZS50YWJGb2N1c01vZGU9MTMwXT0idGFiRm9jdXNNb2RlIixlW2UubGF5b3V0SW5mbz0xMzFdPSJsYXlvdXRJbmZvIixlW2Uud3JhcHBpbmdJbmZvPTEzMl09IndyYXBwaW5nSW5mbyJ9KGxufHwobG49e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dERlZmluZWQ9MF09IlRleHREZWZpbmVkIixlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KGNufHwoY249e30pKSxmdW5jdGlvbihlKXtlW2UuTEY9MF09IkxGIixlW2UuQ1JMRj0xXT0iQ1JMRiJ9KHVufHwodW49e30pKSxmdW5jdGlvbihlKXtlW2UuU3lzdGVtPTBdPSJTeXN0ZW0iLGVbZS5Vc2VyPTFdPSJVc2VyIn0oaG58fChobj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuSW5kZW50PTFdPSJJbmRlbnQiLGVbZS5JbmRlbnRPdXRkZW50PTJdPSJJbmRlbnRPdXRkZW50IixlW2UuT3V0ZGVudD0zXT0iT3V0ZGVudCJ9KGZufHwoZm49e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oZG58fChkbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifShtbnx8KG1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0oZ258fChnbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXBlbmRzT25LYkxheW91dD0tMV09IkRlcGVuZHNPbktiTGF5b3V0IixlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkJhY2tzcGFjZT0xXT0iQmFja3NwYWNlIixlW2UuVGFiPTJdPSJUYWIiLGVbZS5FbnRlcj0zXT0iRW50ZXIiLGVbZS5TaGlmdD00XT0iU2hpZnQiLGVbZS5DdHJsPTVdPSJDdHJsIixlW2UuQWx0PTZdPSJBbHQiLGVbZS5QYXVzZUJyZWFrPTddPSJQYXVzZUJyZWFrIixlW2UuQ2Fwc0xvY2s9OF09IkNhcHNMb2NrIixlW2UuRXNjYXBlPTldPSJFc2NhcGUiLGVbZS5TcGFjZT0xMF09IlNwYWNlIixlW2UuUGFnZVVwPTExXT0iUGFnZVVwIixlW2UuUGFnZURvd249MTJdPSJQYWdlRG93biIsZVtlLkVuZD0xM109IkVuZCIsZVtlLkhvbWU9MTRdPSJIb21lIixlW2UuTGVmdEFycm93PTE1XT0iTGVmdEFycm93IixlW2UuVXBBcnJvdz0xNl09IlVwQXJyb3ciLGVbZS5SaWdodEFycm93PTE3XT0iUmlnaHRBcnJvdyIsZVtlLkRvd25BcnJvdz0xOF09IkRvd25BcnJvdyIsZVtlLkluc2VydD0xOV09Ikluc2VydCIsZVtlLkRlbGV0ZT0yMF09IkRlbGV0ZSIsZVtlLkRpZ2l0MD0yMV09IkRpZ2l0MCIsZVtlLkRpZ2l0MT0yMl09IkRpZ2l0MSIsZVtlLkRpZ2l0Mj0yM109IkRpZ2l0MiIsZVtlLkRpZ2l0Mz0yNF09IkRpZ2l0MyIsZVtlLkRpZ2l0ND0yNV09IkRpZ2l0NCIsZVtlLkRpZ2l0NT0yNl09IkRpZ2l0NSIsZVtlLkRpZ2l0Nj0yN109IkRpZ2l0NiIsZVtlLkRpZ2l0Nz0yOF09IkRpZ2l0NyIsZVtlLkRpZ2l0OD0yOV09IkRpZ2l0OCIsZVtlLkRpZ2l0OT0zMF09IkRpZ2l0OSIsZVtlLktleUE9MzFdPSJLZXlBIixlW2UuS2V5Qj0zMl09IktleUIiLGVbZS5LZXlDPTMzXT0iS2V5QyIsZVtlLktleUQ9MzRdPSJLZXlEIixlW2UuS2V5RT0zNV09IktleUUiLGVbZS5LZXlGPTM2XT0iS2V5RiIsZVtlLktleUc9MzddPSJLZXlHIixlW2UuS2V5SD0zOF09IktleUgiLGVbZS5LZXlJPTM5XT0iS2V5SSIsZVtlLktleUo9NDBdPSJLZXlKIixlW2UuS2V5Sz00MV09IktleUsiLGVbZS5LZXlMPTQyXT0iS2V5TCIsZVtlLktleU09NDNdPSJLZXlNIixlW2UuS2V5Tj00NF09IktleU4iLGVbZS5LZXlPPTQ1XT0iS2V5TyIsZVtlLktleVA9NDZdPSJLZXlQIixlW2UuS2V5UT00N109IktleVEiLGVbZS5LZXlSPTQ4XT0iS2V5UiIsZVtlLktleVM9NDldPSJLZXlTIixlW2UuS2V5VD01MF09IktleVQiLGVbZS5LZXlVPTUxXT0iS2V5VSIsZVtlLktleVY9NTJdPSJLZXlWIixlW2UuS2V5Vz01M109IktleVciLGVbZS5LZXlYPTU0XT0iS2V5WCIsZVtlLktleVk9NTVdPSJLZXlZIixlW2UuS2V5Wj01Nl09IktleVoiLGVbZS5NZXRhPTU3XT0iTWV0YSIsZVtlLkNvbnRleHRNZW51PTU4XT0iQ29udGV4dE1lbnUiLGVbZS5GMT01OV09IkYxIixlW2UuRjI9NjBdPSJGMiIsZVtlLkYzPTYxXT0iRjMiLGVbZS5GND02Ml09IkY0IixlW2UuRjU9NjNdPSJGNSIsZVtlLkY2PTY0XT0iRjYiLGVbZS5GNz02NV09IkY3IixlW2UuRjg9NjZdPSJGOCIsZVtlLkY5PTY3XT0iRjkiLGVbZS5GMTA9NjhdPSJGMTAiLGVbZS5GMTE9NjldPSJGMTEiLGVbZS5GMTI9NzBdPSJGMTIiLGVbZS5GMTM9NzFdPSJGMTMiLGVbZS5GMTQ9NzJdPSJGMTQiLGVbZS5GMTU9NzNdPSJGMTUiLGVbZS5GMTY9NzRdPSJGMTYiLGVbZS5GMTc9NzVdPSJGMTciLGVbZS5GMTg9NzZdPSJGMTgiLGVbZS5GMTk9NzddPSJGMTkiLGVbZS5OdW1Mb2NrPTc4XT0iTnVtTG9jayIsZVtlLlNjcm9sbExvY2s9NzldPSJTY3JvbGxMb2NrIixlW2UuU2VtaWNvbG9uPTgwXT0iU2VtaWNvbG9uIixlW2UuRXF1YWw9ODFdPSJFcXVhbCIsZVtlLkNvbW1hPTgyXT0iQ29tbWEiLGVbZS5NaW51cz04M109Ik1pbnVzIixlW2UuUGVyaW9kPTg0XT0iUGVyaW9kIixlW2UuU2xhc2g9ODVdPSJTbGFzaCIsZVtlLkJhY2txdW90ZT04Nl09IkJhY2txdW90ZSIsZVtlLkJyYWNrZXRMZWZ0PTg3XT0iQnJhY2tldExlZnQiLGVbZS5CYWNrc2xhc2g9ODhdPSJCYWNrc2xhc2giLGVbZS5CcmFja2V0UmlnaHQ9ODldPSJCcmFja2V0UmlnaHQiLGVbZS5RdW90ZT05MF09IlF1b3RlIixlW2UuT0VNXzg9OTFdPSJPRU1fOCIsZVtlLkludGxCYWNrc2xhc2g9OTJdPSJJbnRsQmFja3NsYXNoIixlW2UuTnVtcGFkMD05M109Ik51bXBhZDAiLGVbZS5OdW1wYWQxPTk0XT0iTnVtcGFkMSIsZVtlLk51bXBhZDI9OTVdPSJOdW1wYWQyIixlW2UuTnVtcGFkMz05Nl09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTk3XT0iTnVtcGFkNCIsZVtlLk51bXBhZDU9OThdPSJOdW1wYWQ1IixlW2UuTnVtcGFkNj05OV09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwMF09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwMV09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwMl09Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDNdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDRdPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTEwNV09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMDZdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTA3XT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMDhdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTA5XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTBdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTFdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExMl09IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTEzXT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTRdPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTExNV09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMTZdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTExN109IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTE4XT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMTldPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjBdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTIxXT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTIyXT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjNdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI0XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTI1XT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEyNl09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEyN109Ik1BWF9WQUxVRSJ9KHBufHwocG49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVmYXVsdD0xXT0iRGVmYXVsdCIsZVtlLlVzZXI9Ml09IlVzZXIifShibnx8KGJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkVkaXRvckNvcmU9MF09IkVkaXRvckNvcmUiLGVbZS5FZGl0b3JDb250cmliPTEwMF09IkVkaXRvckNvbnRyaWIiLGVbZS5Xb3JrYmVuY2hDb250cmliPTIwMF09IldvcmtiZW5jaENvbnRyaWIiLGVbZS5CdWlsdGluRXh0ZW5zaW9uPTMwMF09IkJ1aWx0aW5FeHRlbnNpb24iLGVbZS5FeHRlcm5hbEV4dGVuc2lvbj00MDBdPSJFeHRlcm5hbEV4dGVuc2lvbiJ9KHZufHwodm49e30pKSxmdW5jdGlvbihlKXtlW2UuTnVsbD0wXT0iTnVsbCIsZVtlLlBsYWluVGV4dD0xXT0iUGxhaW5UZXh0In0oeW58fCh5bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UcmFjZT0wXT0iVHJhY2UiLGVbZS5EZWJ1Zz0xXT0iRGVidWciLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz0zXT0iV2FybmluZyIsZVtlLkVycm9yPTRdPSJFcnJvciIsZVtlLkNyaXRpY2FsPTVdPSJDcml0aWNhbCIsZVtlLk9mZj02XT0iT2ZmIn0oQ258fChDbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5QYXJhZ3JhcGg9MF09IlBhcmFncmFwaCIsZVtlLkJyZWFrPTFdPSJCcmVhayJ9KHdufHwod249e30pKSxmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0oX258fChfbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0oU258fChTbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0oQW58fChBbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPSJVTktOT1dOIixlW2UuVEVYVEFSRUE9MV09IlRFWFRBUkVBIixlW2UuR1VUVEVSX0dMWVBIX01BUkdJTj0yXT0iR1VUVEVSX0dMWVBIX01BUkdJTiIsZVtlLkdVVFRFUl9MSU5FX05VTUJFUlM9M109IkdVVFRFUl9MSU5FX05VTUJFUlMiLGVbZS5HVVRURVJfTElORV9ERUNPUkFUSU9OUz00XT0iR1VUVEVSX0xJTkVfREVDT1JBVElPTlMiLGVbZS5HVVRURVJfVklFV19aT05FPTVdPSJHVVRURVJfVklFV19aT05FIixlW2UuQ09OVEVOVF9URVhUPTZdPSJDT05URU5UX1RFWFQiLGVbZS5DT05URU5UX0VNUFRZPTddPSJDT05URU5UX0VNUFRZIixlW2UuQ09OVEVOVF9WSUVXX1pPTkU9OF09IkNPTlRFTlRfVklFV19aT05FIixlW2UuQ09OVEVOVF9XSURHRVQ9OV09IkNPTlRFTlRfV0lER0VUIixlW2UuT1ZFUlZJRVdfUlVMRVI9MTBdPSJPVkVSVklFV19SVUxFUiIsZVtlLlNDUk9MTEJBUj0xMV09IlNDUk9MTEJBUiIsZVtlLk9WRVJMQVlfV0lER0VUPTEyXT0iT1ZFUkxBWV9XSURHRVQiLGVbZS5PVVRTSURFX0VESVRPUj0xM109Ik9VVFNJREVfRURJVE9SIn0oRW58fChFbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5XaW5kb3dzPTFdPSJXaW5kb3dzIixlW2UuTWFjaW50b3NoPTJdPSJNYWNpbnRvc2giLGVbZS5MaW51eD0zXT0iTGludXgifShObnx8KE5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRPUF9SSUdIVF9DT1JORVI9MF09IlRPUF9SSUdIVF9DT1JORVIiLGVbZS5CT1RUT01fUklHSFRfQ09STkVSPTFdPSJCT1RUT01fUklHSFRfQ09STkVSIixlW2UuVE9QX0NFTlRFUj0yXT0iVE9QX0NFTlRFUiJ9KHhufHwoeG49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KExufHwoTG49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0wXT0iTGVmdCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLk5vbmU9Ml09Ik5vbmUifShrbnx8KGtuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkV4cGxvcmVyPTFdPSJFeHBsb3JlciIsZVtlLlNjbT0zXT0iU2NtIixlW2UuRXh0ZW5zaW9ucz01XT0iRXh0ZW5zaW9ucyIsZVtlLldpbmRvdz0xMF09IldpbmRvdyIsZVtlLk5vdGlmaWNhdGlvbj0xNV09Ik5vdGlmaWNhdGlvbiIsZVtlLkRpYWxvZz0yMF09IkRpYWxvZyJ9KFRufHwoVG49e30pKSxmdW5jdGlvbihlKXtlW2UuT2ZmPTBdPSJPZmYiLGVbZS5Pbj0xXT0iT24iLGVbZS5SZWxhdGl2ZT0yXT0iUmVsYXRpdmUiLGVbZS5JbnRlcnZhbD0zXT0iSW50ZXJ2YWwiLGVbZS5DdXN0b209NF09IkN1c3RvbSJ9KE9ufHwoT249e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlRleHQ9MV09IlRleHQiLGVbZS5CbG9ja3M9Ml09IkJsb2NrcyJ9KE1ufHwoTW49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5IeXBlcj0xXT0iSHlwZXIiLGVbZS5TdXBlcj0yXT0iU3VwZXIiLGVbZS5Gbj0zXT0iRm4iLGVbZS5GbkxvY2s9NF09IkZuTG9jayIsZVtlLlN1c3BlbmQ9NV09IlN1c3BlbmQiLGVbZS5SZXN1bWU9Nl09IlJlc3VtZSIsZVtlLlR1cmJvPTddPSJUdXJibyIsZVtlLlNsZWVwPThdPSJTbGVlcCIsZVtlLldha2VVcD05XT0iV2FrZVVwIixlW2UuS2V5QT0xMF09IktleUEiLGVbZS5LZXlCPTExXT0iS2V5QiIsZVtlLktleUM9MTJdPSJLZXlDIixlW2UuS2V5RD0xM109IktleUQiLGVbZS5LZXlFPTE0XT0iS2V5RSIsZVtlLktleUY9MTVdPSJLZXlGIixlW2UuS2V5Rz0xNl09IktleUciLGVbZS5LZXlIPTE3XT0iS2V5SCIsZVtlLktleUk9MThdPSJLZXlJIixlW2UuS2V5Sj0xOV09IktleUoiLGVbZS5LZXlLPTIwXT0iS2V5SyIsZVtlLktleUw9MjFdPSJLZXlMIixlW2UuS2V5TT0yMl09IktleU0iLGVbZS5LZXlOPTIzXT0iS2V5TiIsZVtlLktleU89MjRdPSJLZXlPIixlW2UuS2V5UD0yNV09IktleVAiLGVbZS5LZXlRPTI2XT0iS2V5USIsZVtlLktleVI9MjddPSJLZXlSIixlW2UuS2V5Uz0yOF09IktleVMiLGVbZS5LZXlUPTI5XT0iS2V5VCIsZVtlLktleVU9MzBdPSJLZXlVIixlW2UuS2V5Vj0zMV09IktleVYiLGVbZS5LZXlXPTMyXT0iS2V5VyIsZVtlLktleVg9MzNdPSJLZXlYIixlW2UuS2V5WT0zNF09IktleVkiLGVbZS5LZXlaPTM1XT0iS2V5WiIsZVtlLkRpZ2l0MT0zNl09IkRpZ2l0MSIsZVtlLkRpZ2l0Mj0zN109IkRpZ2l0MiIsZVtlLkRpZ2l0Mz0zOF09IkRpZ2l0MyIsZVtlLkRpZ2l0ND0zOV09IkRpZ2l0NCIsZVtlLkRpZ2l0NT00MF09IkRpZ2l0NSIsZVtlLkRpZ2l0Nj00MV09IkRpZ2l0NiIsZVtlLkRpZ2l0Nz00Ml09IkRpZ2l0NyIsZVtlLkRpZ2l0OD00M109IkRpZ2l0OCIsZVtlLkRpZ2l0OT00NF09IkRpZ2l0OSIsZVtlLkRpZ2l0MD00NV09IkRpZ2l0MCIsZVtlLkVudGVyPTQ2XT0iRW50ZXIiLGVbZS5Fc2NhcGU9NDddPSJFc2NhcGUiLGVbZS5CYWNrc3BhY2U9NDhdPSJCYWNrc3BhY2UiLGVbZS5UYWI9NDldPSJUYWIiLGVbZS5TcGFjZT01MF09IlNwYWNlIixlW2UuTWludXM9NTFdPSJNaW51cyIsZVtlLkVxdWFsPTUyXT0iRXF1YWwiLGVbZS5CcmFja2V0TGVmdD01M109IkJyYWNrZXRMZWZ0IixlW2UuQnJhY2tldFJpZ2h0PTU0XT0iQnJhY2tldFJpZ2h0IixlW2UuQmFja3NsYXNoPTU1XT0iQmFja3NsYXNoIixlW2UuSW50bEhhc2g9NTZdPSJJbnRsSGFzaCIsZVtlLlNlbWljb2xvbj01N109IlNlbWljb2xvbiIsZVtlLlF1b3RlPTU4XT0iUXVvdGUiLGVbZS5CYWNrcXVvdGU9NTldPSJCYWNrcXVvdGUiLGVbZS5Db21tYT02MF09IkNvbW1hIixlW2UuUGVyaW9kPTYxXT0iUGVyaW9kIixlW2UuU2xhc2g9NjJdPSJTbGFzaCIsZVtlLkNhcHNMb2NrPTYzXT0iQ2Fwc0xvY2siLGVbZS5GMT02NF09IkYxIixlW2UuRjI9NjVdPSJGMiIsZVtlLkYzPTY2XT0iRjMiLGVbZS5GND02N109IkY0IixlW2UuRjU9NjhdPSJGNSIsZVtlLkY2PTY5XT0iRjYiLGVbZS5GNz03MF09IkY3IixlW2UuRjg9NzFdPSJGOCIsZVtlLkY5PTcyXT0iRjkiLGVbZS5GMTA9NzNdPSJGMTAiLGVbZS5GMTE9NzRdPSJGMTEiLGVbZS5GMTI9NzVdPSJGMTIiLGVbZS5QcmludFNjcmVlbj03Nl09IlByaW50U2NyZWVuIixlW2UuU2Nyb2xsTG9jaz03N109IlNjcm9sbExvY2siLGVbZS5QYXVzZT03OF09IlBhdXNlIixlW2UuSW5zZXJ0PTc5XT0iSW5zZXJ0IixlW2UuSG9tZT04MF09IkhvbWUiLGVbZS5QYWdlVXA9ODFdPSJQYWdlVXAiLGVbZS5EZWxldGU9ODJdPSJEZWxldGUiLGVbZS5FbmQ9ODNdPSJFbmQiLGVbZS5QYWdlRG93bj04NF09IlBhZ2VEb3duIixlW2UuQXJyb3dSaWdodD04NV09IkFycm93UmlnaHQiLGVbZS5BcnJvd0xlZnQ9ODZdPSJBcnJvd0xlZnQiLGVbZS5BcnJvd0Rvd249ODddPSJBcnJvd0Rvd24iLGVbZS5BcnJvd1VwPTg4XT0iQXJyb3dVcCIsZVtlLk51bUxvY2s9ODldPSJOdW1Mb2NrIixlW2UuTnVtcGFkRGl2aWRlPTkwXT0iTnVtcGFkRGl2aWRlIixlW2UuTnVtcGFkTXVsdGlwbHk9OTFdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZFN1YnRyYWN0PTkyXT0iTnVtcGFkU3VidHJhY3QiLGVbZS5OdW1wYWRBZGQ9OTNdPSJOdW1wYWRBZGQiLGVbZS5OdW1wYWRFbnRlcj05NF09Ik51bXBhZEVudGVyIixlW2UuTnVtcGFkMT05NV09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTk2XT0iTnVtcGFkMiIsZVtlLk51bXBhZDM9OTddPSJOdW1wYWQzIixlW2UuTnVtcGFkND05OF09Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTk5XT0iTnVtcGFkNSIsZVtlLk51bXBhZDY9MTAwXT0iTnVtcGFkNiIsZVtlLk51bXBhZDc9MTAxXT0iTnVtcGFkNyIsZVtlLk51bXBhZDg9MTAyXT0iTnVtcGFkOCIsZVtlLk51bXBhZDk9MTAzXT0iTnVtcGFkOSIsZVtlLk51bXBhZDA9MTA0XT0iTnVtcGFkMCIsZVtlLk51bXBhZERlY2ltYWw9MTA1XT0iTnVtcGFkRGVjaW1hbCIsZVtlLkludGxCYWNrc2xhc2g9MTA2XT0iSW50bEJhY2tzbGFzaCIsZVtlLkNvbnRleHRNZW51PTEwN109IkNvbnRleHRNZW51IixlW2UuUG93ZXI9MTA4XT0iUG93ZXIiLGVbZS5OdW1wYWRFcXVhbD0xMDldPSJOdW1wYWRFcXVhbCIsZVtlLkYxMz0xMTBdPSJGMTMiLGVbZS5GMTQ9MTExXT0iRjE0IixlW2UuRjE1PTExMl09IkYxNSIsZVtlLkYxNj0xMTNdPSJGMTYiLGVbZS5GMTc9MTE0XT0iRjE3IixlW2UuRjE4PTExNV09IkYxOCIsZVtlLkYxOT0xMTZdPSJGMTkiLGVbZS5GMjA9MTE3XT0iRjIwIixlW2UuRjIxPTExOF09IkYyMSIsZVtlLkYyMj0xMTldPSJGMjIiLGVbZS5GMjM9MTIwXT0iRjIzIixlW2UuRjI0PTEyMV09IkYyNCIsZVtlLk9wZW49MTIyXT0iT3BlbiIsZVtlLkhlbHA9MTIzXT0iSGVscCIsZVtlLlNlbGVjdD0xMjRdPSJTZWxlY3QiLGVbZS5BZ2Fpbj0xMjVdPSJBZ2FpbiIsZVtlLlVuZG89MTI2XT0iVW5kbyIsZVtlLkN1dD0xMjddPSJDdXQiLGVbZS5Db3B5PTEyOF09IkNvcHkiLGVbZS5QYXN0ZT0xMjldPSJQYXN0ZSIsZVtlLkZpbmQ9MTMwXT0iRmluZCIsZVtlLkF1ZGlvVm9sdW1lTXV0ZT0xMzFdPSJBdWRpb1ZvbHVtZU11dGUiLGVbZS5BdWRpb1ZvbHVtZVVwPTEzMl09IkF1ZGlvVm9sdW1lVXAiLGVbZS5BdWRpb1ZvbHVtZURvd249MTMzXT0iQXVkaW9Wb2x1bWVEb3duIixlW2UuTnVtcGFkQ29tbWE9MTM0XT0iTnVtcGFkQ29tbWEiLGVbZS5JbnRsUm89MTM1XT0iSW50bFJvIixlW2UuS2FuYU1vZGU9MTM2XT0iS2FuYU1vZGUiLGVbZS5JbnRsWWVuPTEzN109IkludGxZZW4iLGVbZS5Db252ZXJ0PTEzOF09IkNvbnZlcnQiLGVbZS5Ob25Db252ZXJ0PTEzOV09Ik5vbkNvbnZlcnQiLGVbZS5MYW5nMT0xNDBdPSJMYW5nMSIsZVtlLkxhbmcyPTE0MV09IkxhbmcyIixlW2UuTGFuZzM9MTQyXT0iTGFuZzMiLGVbZS5MYW5nND0xNDNdPSJMYW5nNCIsZVtlLkxhbmc1PTE0NF09Ikxhbmc1IixlW2UuQWJvcnQ9MTQ1XT0iQWJvcnQiLGVbZS5Qcm9wcz0xNDZdPSJQcm9wcyIsZVtlLk51bXBhZFBhcmVuTGVmdD0xNDddPSJOdW1wYWRQYXJlbkxlZnQiLGVbZS5OdW1wYWRQYXJlblJpZ2h0PTE0OF09Ik51bXBhZFBhcmVuUmlnaHQiLGVbZS5OdW1wYWRCYWNrc3BhY2U9MTQ5XT0iTnVtcGFkQmFja3NwYWNlIixlW2UuTnVtcGFkTWVtb3J5U3RvcmU9MTUwXT0iTnVtcGFkTWVtb3J5U3RvcmUiLGVbZS5OdW1wYWRNZW1vcnlSZWNhbGw9MTUxXT0iTnVtcGFkTWVtb3J5UmVjYWxsIixlW2UuTnVtcGFkTWVtb3J5Q2xlYXI9MTUyXT0iTnVtcGFkTWVtb3J5Q2xlYXIiLGVbZS5OdW1wYWRNZW1vcnlBZGQ9MTUzXT0iTnVtcGFkTWVtb3J5QWRkIixlW2UuTnVtcGFkTWVtb3J5U3VidHJhY3Q9MTU0XT0iTnVtcGFkTWVtb3J5U3VidHJhY3QiLGVbZS5OdW1wYWRDbGVhcj0xNTVdPSJOdW1wYWRDbGVhciIsZVtlLk51bXBhZENsZWFyRW50cnk9MTU2XT0iTnVtcGFkQ2xlYXJFbnRyeSIsZVtlLkNvbnRyb2xMZWZ0PTE1N109IkNvbnRyb2xMZWZ0IixlW2UuU2hpZnRMZWZ0PTE1OF09IlNoaWZ0TGVmdCIsZVtlLkFsdExlZnQ9MTU5XT0iQWx0TGVmdCIsZVtlLk1ldGFMZWZ0PTE2MF09Ik1ldGFMZWZ0IixlW2UuQ29udHJvbFJpZ2h0PTE2MV09IkNvbnRyb2xSaWdodCIsZVtlLlNoaWZ0UmlnaHQ9MTYyXT0iU2hpZnRSaWdodCIsZVtlLkFsdFJpZ2h0PTE2M109IkFsdFJpZ2h0IixlW2UuTWV0YVJpZ2h0PTE2NF09Ik1ldGFSaWdodCIsZVtlLkJyaWdodG5lc3NVcD0xNjVdPSJCcmlnaHRuZXNzVXAiLGVbZS5CcmlnaHRuZXNzRG93bj0xNjZdPSJCcmlnaHRuZXNzRG93biIsZVtlLk1lZGlhUGxheT0xNjddPSJNZWRpYVBsYXkiLGVbZS5NZWRpYVJlY29yZD0xNjhdPSJNZWRpYVJlY29yZCIsZVtlLk1lZGlhRmFzdEZvcndhcmQ9MTY5XT0iTWVkaWFGYXN0Rm9yd2FyZCIsZVtlLk1lZGlhUmV3aW5kPTE3MF09Ik1lZGlhUmV3aW5kIixlW2UuTWVkaWFUcmFja05leHQ9MTcxXT0iTWVkaWFUcmFja05leHQiLGVbZS5NZWRpYVRyYWNrUHJldmlvdXM9MTcyXT0iTWVkaWFUcmFja1ByZXZpb3VzIixlW2UuTWVkaWFTdG9wPTE3M109Ik1lZGlhU3RvcCIsZVtlLkVqZWN0PTE3NF09IkVqZWN0IixlW2UuTWVkaWFQbGF5UGF1c2U9MTc1XT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5NZWRpYVNlbGVjdD0xNzZdPSJNZWRpYVNlbGVjdCIsZVtlLkxhdW5jaE1haWw9MTc3XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTc4XT0iTGF1bmNoQXBwMiIsZVtlLkxhdW5jaEFwcDE9MTc5XT0iTGF1bmNoQXBwMSIsZVtlLlNlbGVjdFRhc2s9MTgwXT0iU2VsZWN0VGFzayIsZVtlLkxhdW5jaFNjcmVlblNhdmVyPTE4MV09IkxhdW5jaFNjcmVlblNhdmVyIixlW2UuQnJvd3NlclNlYXJjaD0xODJdPSJCcm93c2VyU2VhcmNoIixlW2UuQnJvd3NlckhvbWU9MTgzXT0iQnJvd3NlckhvbWUiLGVbZS5Ccm93c2VyQmFjaz0xODRdPSJCcm93c2VyQmFjayIsZVtlLkJyb3dzZXJGb3J3YXJkPTE4NV09IkJyb3dzZXJGb3J3YXJkIixlW2UuQnJvd3NlclN0b3A9MTg2XT0iQnJvd3NlclN0b3AiLGVbZS5Ccm93c2VyUmVmcmVzaD0xODddPSJCcm93c2VyUmVmcmVzaCIsZVtlLkJyb3dzZXJGYXZvcml0ZXM9MTg4XT0iQnJvd3NlckZhdm9yaXRlcyIsZVtlLlpvb21Ub2dnbGU9MTg5XT0iWm9vbVRvZ2dsZSIsZVtlLk1haWxSZXBseT0xOTBdPSJNYWlsUmVwbHkiLGVbZS5NYWlsRm9yd2FyZD0xOTFdPSJNYWlsRm9yd2FyZCIsZVtlLk1haWxTZW5kPTE5Ml09Ik1haWxTZW5kIixlW2UuTUFYX1ZBTFVFPTE5M109Ik1BWF9WQUxVRSJ9KElufHwoSW49e30pKSxmdW5jdGlvbihlKXtlW2UuU21vb3RoPTBdPSJTbW9vdGgiLGVbZS5JbW1lZGlhdGU9MV09IkltbWVkaWF0ZSJ9KFJufHwoUm49e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0bz0xXT0iQXV0byIsZVtlLkhpZGRlbj0yXT0iSGlkZGVuIixlW2UuVmlzaWJsZT0zXT0iVmlzaWJsZSJ9KFBufHwoUG49e30pKSxmdW5jdGlvbihlKXtlW2UuTFRSPTBdPSJMVFIiLGVbZS5SVEw9MV09IlJUTCJ9KEZufHwoRm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KERufHwoRG49e30pKSxmdW5jdGlvbihlKXtlW2UuVG9wPTBdPSJUb3AiLGVbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkJvdHRvbT0yXT0iQm90dG9tIn0oVm58fChWbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Vc2VyPTFdPSJVc2VyIixlW2UuV29ya3NwYWNlPTJdPSJXb3Jrc3BhY2UiLGVbZS5FeHRlbnNpb249M109IkV4dGVuc2lvbiJ9KEtufHwoS249e30pKSxmdW5jdGlvbihlKXtlW2UuT3RoZXI9MF09Ik90aGVyIixlW2UuQ29tbWVudD0xXT0iQ29tbWVudCIsZVtlLlN0cmluZz0yXT0iU3RyaW5nIixlW2UuUmVnRXg9M109IlJlZ0V4In0oVW58fChVbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KEJufHwoQm49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KGpufHwoam49e30pKSxmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0ocW58fChxbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifSgkbnx8KCRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkNlbnRlcj0wXT0iQ2VudGVyIixlW2UuQ2VudGVySWZPdXRzaWRlVmlld3BvcnQ9MV09IkNlbnRlcklmT3V0c2lkZVZpZXdwb3J0IixlW2UuTmVhclRvcD0yXT0iTmVhclRvcCIsZVtlLk5lYXJUb3BJZk91dHNpZGVWaWV3cG9ydD0zXT0iTmVhclRvcElmT3V0c2lkZVZpZXdwb3J0In0oV258fChXbj17fSkpLGZ1bmN0aW9uKGUpe2UuUFJPR1JBTU1BVElDPSJhcGkiLGUuTkFWSUdBVElPTj0iY29kZS5uYXZpZ2F0aW9uIixlLkpVTVA9ImNvZGUuanVtcCJ9KEhufHwoSG49e30pKSxmdW5jdGlvbihlKXtlW2UuQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0wXT0iQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLk5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0xXT0iTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZT0yXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZSIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdBZnRlcj0zXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyIn0oem58fCh6bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuU2FtZT0xXT0iU2FtZSIsZVtlLkluZGVudD0yXT0iSW5kZW50IixlW2UuRGVlcEluZGVudD0zXT0iRGVlcEluZGVudCJ9KEdufHwoR249e30pKTtjbGFzcyBucntjb25zdHJ1Y3Rvcigpe3RoaXNbSm5dPSJMaW5rZWRNYXAiLHRoaXMuX21hcD1uZXcgTWFwLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZT0wfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCksdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDAsdGhpcy5fc2l6ZT0wLHRoaXMuX3N0YXRlKyt9aXNFbXB0eSgpe3JldHVybiF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWdldCBmaXJzdCgpe3ZhciBlO3JldHVybiBudWxsPT09KGU9dGhpcy5faGVhZCl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmFsdWV9Z2V0IGxhc3QoKXt2YXIgZTtyZXR1cm4gbnVsbD09PShlPXRoaXMuX3RhaWwpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnZhbHVlfWhhcyhlKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhlKX1nZXQoZSx0PTApe2NvbnN0IG49dGhpcy5fbWFwLmdldChlKTtpZihuKXJldHVybiAwIT09dCYmdGhpcy50b3VjaChuLHQpLG4udmFsdWV9c2V0KGUsdCxuPTApe2xldCByPXRoaXMuX21hcC5nZXQoZSk7aWYocilyLnZhbHVlPXQsMCE9PW4mJnRoaXMudG91Y2gocixuKTtlbHNle3N3aXRjaChyPXtrZXk6ZSx2YWx1ZTp0LG5leHQ6dm9pZCAwLHByZXZpb3VzOnZvaWQgMH0sbil7Y2FzZSAwOmNhc2UgMjpkZWZhdWx0OnRoaXMuYWRkSXRlbUxhc3Qocik7YnJlYWs7Y2FzZSAxOnRoaXMuYWRkSXRlbUZpcnN0KHIpfXRoaXMuX21hcC5zZXQoZSxyKSx0aGlzLl9zaXplKyt9cmV0dXJuIHRoaXN9ZGVsZXRlKGUpe3JldHVybiEhdGhpcy5yZW1vdmUoZSl9cmVtb3ZlKGUpe2NvbnN0IHQ9dGhpcy5fbWFwLmdldChlKTtpZih0KXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKGUpLHRoaXMucmVtb3ZlSXRlbSh0KSx0aGlzLl9zaXplLS0sdC52YWx1ZX1zaGlmdCgpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbClyZXR1cm47aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7Y29uc3QgZT10aGlzLl9oZWFkO3JldHVybiB0aGlzLl9tYXAuZGVsZXRlKGUua2V5KSx0aGlzLnJlbW92ZUl0ZW0oZSksdGhpcy5fc2l6ZS0tLGUudmFsdWV9Zm9yRWFjaChlLHQpe2NvbnN0IG49dGhpcy5fc3RhdGU7bGV0IHI9dGhpcy5faGVhZDtmb3IoO3I7KXtpZih0P2UuYmluZCh0KShyLnZhbHVlLHIua2V5LHRoaXMpOmUoci52YWx1ZSxyLmtleSx0aGlzKSx0aGlzLl9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7cj1yLm5leHR9fWtleXMoKXtjb25zdCBlPXRoaXMsdD10aGlzLl9zdGF0ZTtsZXQgbj10aGlzLl9oZWFkO2NvbnN0IHI9e1tTeW1ib2wuaXRlcmF0b3JdOigpPT5yLG5leHQoKXtpZihlLl9zdGF0ZSE9PXQpdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYobil7Y29uc3QgZT17dmFsdWU6bi5rZXksZG9uZTohMX07cmV0dXJuIG49bi5uZXh0LGV9cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfXZhbHVlcygpe2NvbnN0IGU9dGhpcyx0PXRoaXMuX3N0YXRlO2xldCBuPXRoaXMuX2hlYWQ7Y29uc3Qgcj17W1N5bWJvbC5pdGVyYXRvcl06KCk9PnIsbmV4dCgpe2lmKGUuX3N0YXRlIT09dCl0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihuKXtjb25zdCBlPXt2YWx1ZTpuLnZhbHVlLGRvbmU6ITF9O3JldHVybiBuPW4ubmV4dCxlfXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fTtyZXR1cm4gcn1lbnRyaWVzKCl7Y29uc3QgZT10aGlzLHQ9dGhpcy5fc3RhdGU7bGV0IG49dGhpcy5faGVhZDtjb25zdCByPXtbU3ltYm9sLml0ZXJhdG9yXTooKT0+cixuZXh0KCl7aWYoZS5fc3RhdGUhPT10KXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKG4pe2NvbnN0IGU9e3ZhbHVlOltuLmtleSxuLnZhbHVlXSxkb25lOiExfTtyZXR1cm4gbj1uLm5leHQsZX1yZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIHJ9WyhKbj1TeW1ib2wudG9TdHJpbmdUYWcsU3ltYm9sLml0ZXJhdG9yKV0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9dHJpbU9sZChlKXtpZihlPj10aGlzLnNpemUpcmV0dXJuO2lmKDA9PT1lKXJldHVybiB2b2lkIHRoaXMuY2xlYXIoKTtsZXQgdD10aGlzLl9oZWFkLG49dGhpcy5zaXplO2Zvcig7dCYmbj5lOyl0aGlzLl9tYXAuZGVsZXRlKHQua2V5KSx0PXQubmV4dCxuLS07dGhpcy5faGVhZD10LHRoaXMuX3NpemU9bix0JiYodC5wcmV2aW91cz12b2lkIDApLHRoaXMuX3N0YXRlKyt9YWRkSXRlbUZpcnN0KGUpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl9oZWFkKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz1lfWVsc2UgdGhpcy5fdGFpbD1lO3RoaXMuX2hlYWQ9ZSx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1MYXN0KGUpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD1lfWVsc2UgdGhpcy5faGVhZD1lO3RoaXMuX3RhaWw9ZSx0aGlzLl9zdGF0ZSsrfXJlbW92ZUl0ZW0oZSl7aWYoZT09PXRoaXMuX2hlYWQmJmU9PT10aGlzLl90YWlsKXRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwO2Vsc2UgaWYoZT09PXRoaXMuX2hlYWQpe2lmKCFlLm5leHQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtlLm5leHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9ZS5uZXh0fWVsc2UgaWYoZT09PXRoaXMuX3RhaWwpe2lmKCFlLnByZXZpb3VzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5wcmV2aW91cy5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPWUucHJldmlvdXN9ZWxzZXtjb25zdCB0PWUubmV4dCxuPWUucHJldmlvdXM7aWYoIXR8fCFuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dC5wcmV2aW91cz1uLG4ubmV4dD10fWUubmV4dD12b2lkIDAsZS5wcmV2aW91cz12b2lkIDAsdGhpcy5fc3RhdGUrK310b3VjaChlLHQpe2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2lmKDE9PT10fHwyPT09dClpZigxPT09dCl7aWYoZT09PXRoaXMuX2hlYWQpcmV0dXJuO2NvbnN0IHQ9ZS5uZXh0LG49ZS5wcmV2aW91cztlPT09dGhpcy5fdGFpbD8obi5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPW4pOih0LnByZXZpb3VzPW4sbi5uZXh0PXQpLGUucHJldmlvdXM9dm9pZCAwLGUubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9ZSx0aGlzLl9oZWFkPWUsdGhpcy5fc3RhdGUrK31lbHNlIGlmKDI9PT10KXtpZihlPT09dGhpcy5fdGFpbClyZXR1cm47Y29uc3QgdD1lLm5leHQsbj1lLnByZXZpb3VzO2U9PT10aGlzLl9oZWFkPyh0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPXQpOih0LnByZXZpb3VzPW4sbi5uZXh0PXQpLGUubmV4dD12b2lkIDAsZS5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD1lLHRoaXMuX3RhaWw9ZSx0aGlzLl9zdGF0ZSsrfX10b0pTT04oKXtjb25zdCBlPVtdO3JldHVybiB0aGlzLmZvckVhY2goKCh0LG4pPT57ZS5wdXNoKFtuLHRdKX0pKSxlfWZyb21KU09OKGUpe3RoaXMuY2xlYXIoKTtmb3IoY29uc3RbdCxuXW9mIGUpdGhpcy5zZXQodCxuKX19ZnVuY3Rpb24gcnIoZSx0LG4pe2lmKCFufHxuLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcjtyZXR1cm4gcj1lP3oobix0KTowPT09bi5pbmRleE9mKHQpLHI/dC5sZW5ndGg+MD9be3N0YXJ0OjAsZW5kOnQubGVuZ3RofV06W106bnVsbH1yci5iaW5kKHZvaWQgMCwhMSkscnIuYmluZCh2b2lkIDAsITApO2NvbnN0IGlyPW5ldyBTZXQ7IigpW117fTw+YCdcIi0vOzosLj8hIi5zcGxpdCgiIikuZm9yRWFjaCgoZT0+aXIuYWRkKGUuY2hhckNvZGVBdCgwKSkpKSxuZXcgY2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3RvcihlLHQ9MSl7c3VwZXIoKSx0aGlzLl9saW1pdD1lLHRoaXMuX3JhdGlvPU1hdGgubWluKE1hdGgubWF4KDAsdCksMSl9Z2V0IGxpbWl0KCl7cmV0dXJuIHRoaXMuX2xpbWl0fXNldCBsaW1pdChlKXt0aGlzLl9saW1pdD1lLHRoaXMuY2hlY2tUcmltKCl9Z2V0KGUsdD0yKXtyZXR1cm4gc3VwZXIuZ2V0KGUsdCl9cGVlayhlKXtyZXR1cm4gc3VwZXIuZ2V0KGUsMCl9c2V0KGUsdCl7cmV0dXJuIHN1cGVyLnNldChlLHQsMiksdGhpcy5jaGVja1RyaW0oKSx0aGlzfWNoZWNrVHJpbSgpe3RoaXMuc2l6ZT50aGlzLl9saW1pdCYmdGhpcy50cmltT2xkKE1hdGgucm91bmQodGhpcy5fbGltaXQqdGhpcy5fcmF0aW8pKX19KDFlNCk7ZnVuY3Rpb24gb3IoKXtjb25zdCBlPVtdLHQ9W107Zm9yKGxldCBlPTA7ZTw9MTI4O2UrKyl0W2VdPTA7Zm9yKGxldCBuPTA7bjw9MTI4O24rKyllLnB1c2godC5zbGljZSgwKSk7cmV0dXJuIGV9dmFyIGFyO29yKCksb3IoKSxvcigpLGZ1bmN0aW9uKGUpe2UuRGVmYXVsdD1bLTEwMCwwXSxlLmlzRGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4hZXx8Mj09PWUubGVuZ3RoJiYtMTAwPT09ZVswXSYmMD09PWVbMV19fShhcnx8KGFyPXt9KSk7Y29uc3Qgc3I9bmV3IFJlZ0V4cChgXFwkXFwoJHtEdC5pY29uTmFtZUV4cHJlc3Npb259KD86JHtEdC5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/XFwpYCwiZyIpO25ldyBSZWdFeHAoRHQuaWNvbk5hbWVDaGFyYWN0ZXIpO2NvbnN0IGxyPW5ldyBSZWdFeHAoYChcXFxcKT8ke3NyLnNvdXJjZX1gLCJnIik7bmV3IFJlZ0V4cChgXFxcXCR7c3Iuc291cmNlfWAsImciKSxuZXcgUmVnRXhwKGAoXFxzKT8oXFxcXCk/JHtzci5zb3VyY2V9KFxccyk/YCwiZyIpO2NsYXNzIGNye2NvbnN0cnVjdG9yKGU9IiIsdD0hMSl7dmFyIG4scixpLG87aWYodGhpcy52YWx1ZT1lLCJzdHJpbmciIT10eXBlb2YgdGhpcy52YWx1ZSl0aHJvdyhvPSJ2YWx1ZSIpP25ldyBFcnJvcihgSWxsZWdhbCBhcmd1bWVudDogJHtvfWApOm5ldyBFcnJvcigiSWxsZWdhbCBhcmd1bWVudCIpOyJib29sZWFuIj09dHlwZW9mIHQ/KHRoaXMuaXNUcnVzdGVkPXQsdGhpcy5zdXBwb3J0VGhlbWVJY29ucz0hMSx0aGlzLnN1cHBvcnRIdG1sPSExKToodGhpcy5pc1RydXN0ZWQ9bnVsbCE9PShuPXQuaXNUcnVzdGVkKSYmdm9pZCAwIT09bj9uOnZvaWQgMCx0aGlzLnN1cHBvcnRUaGVtZUljb25zPW51bGwhPT0ocj10LnN1cHBvcnRUaGVtZUljb25zKSYmdm9pZCAwIT09ciYmcix0aGlzLnN1cHBvcnRIdG1sPW51bGwhPT0oaT10LnN1cHBvcnRIdG1sKSYmdm9pZCAwIT09aSYmaSl9YXBwZW5kVGV4dChlLHQ9MCl7dmFyIG47cmV0dXJuIHRoaXMudmFsdWUrPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtIV0vZywiXFwkJiIpfSh0aGlzLnN1cHBvcnRUaGVtZUljb25zPyhuPWUsbi5yZXBsYWNlKGxyLCgoZSx0KT0+dD9lOmBcXCR7ZX1gKSkpOmUpLnJlcGxhY2UoLyhbIFx0XSspL2csKChlLHQpPT4iJm5ic3A7Ii5yZXBlYXQodC5sZW5ndGgpKSkucmVwbGFjZSgvXD4vZ20sIlxcPiIpLnJlcGxhY2UoL1xuL2csMT09PXQ/IlxcXG4iOiJcblxuIiksdGhpc31hcHBlbmRNYXJrZG93bihlKXtyZXR1cm4gdGhpcy52YWx1ZSs9ZSx0aGlzfWFwcGVuZENvZGVibG9jayhlLHQpe3JldHVybiB0aGlzLnZhbHVlKz0iXG5gYGAiLHRoaXMudmFsdWUrPWUsdGhpcy52YWx1ZSs9IlxuIix0aGlzLnZhbHVlKz10LHRoaXMudmFsdWUrPSJcbmBgYFxuIix0aGlzfX12YXIgdXIsaHI7ZnVuY3Rpb24gZnIoZSx0LG4pe3RbdXIuRElfVEFSR0VUXT09PXQ/dFt1ci5ESV9ERVBFTkRFTkNJRVNdLnB1c2goe2lkOmUsaW5kZXg6bn0pOih0W3VyLkRJX0RFUEVOREVOQ0lFU109W3tpZDplLGluZGV4Om59XSx0W3VyLkRJX1RBUkdFVF09dCl9ZnVuY3Rpb24gZHIoZSl7aWYodXIuc2VydmljZUlkcy5oYXMoZSkpcmV0dXJuIHVyLnNlcnZpY2VJZHMuZ2V0KGUpO2NvbnN0IHQ9ZnVuY3Rpb24oZSxuLHIpe2lmKDMhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQElTZXJ2aWNlTmFtZS1kZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCB0byBkZWNvcmF0ZSBhIHBhcmFtZXRlciIpO2ZyKHQsZSxyKX07cmV0dXJuIHQudG9TdHJpbmc9KCk9PmUsdXIuc2VydmljZUlkcy5zZXQoZSx0KSx0fSFmdW5jdGlvbihlKXtlLnNlcnZpY2VJZHM9bmV3IE1hcCxlLkRJX1RBUkdFVD0iJGRpJHRhcmdldCIsZS5ESV9ERVBFTkRFTkNJRVM9IiRkaSRkZXBlbmRlbmNpZXMiLGUuZ2V0U2VydmljZURlcGVuZGVuY2llcz1mdW5jdGlvbih0KXtyZXR1cm4gdFtlLkRJX0RFUEVOREVOQ0lFU118fFtdfX0odXJ8fCh1cj17fSkpLGRyKCJpbnN0YW50aWF0aW9uU2VydmljZSIpLGRyKCJsb2dTZXJ2aWNlIiksZHIoImxvZ2dlclNlcnZpY2UiKSxmdW5jdGlvbihlKXtlW2UuVHJhY2U9MF09IlRyYWNlIixlW2UuRGVidWc9MV09IkRlYnVnIixlW2UuSW5mbz0yXT0iSW5mbyIsZVtlLldhcm5pbmc9M109Ildhcm5pbmciLGVbZS5FcnJvcj00XT0iRXJyb3IiLGVbZS5Dcml0aWNhbD01XT0iQ3JpdGljYWwiLGVbZS5PZmY9Nl09Ik9mZiJ9KGhyfHwoaHI9e30pKTtjb25zdCBtcj1oci5JbmZvO2NsYXNzIGdyIGV4dGVuZHMgZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sZXZlbD1tcix0aGlzLl9vbkRpZENoYW5nZUxvZ0xldmVsPXRoaXMuX3JlZ2lzdGVyKG5ldyBVKSx0aGlzLm9uRGlkQ2hhbmdlTG9nTGV2ZWw9dGhpcy5fb25EaWRDaGFuZ2VMb2dMZXZlbC5ldmVudH1zZXRMZXZlbChlKXt0aGlzLmxldmVsIT09ZSYmKHRoaXMubGV2ZWw9ZSx0aGlzLl9vbkRpZENoYW5nZUxvZ0xldmVsLmZpcmUodGhpcy5sZXZlbCkpfWdldExldmVsKCl7cmV0dXJuIHRoaXMubGV2ZWx9fWNsYXNzIHByIGV4dGVuZHMgZ3J7Y29uc3RydWN0b3IoZT1tcil7c3VwZXIoKSx0aGlzLnNldExldmVsKGUpfXRyYWNlKGUsLi4udCl7dGhpcy5nZXRMZXZlbCgpPD1oci5UcmFjZSYmY29uc29sZS5sb2coIiVjVFJBQ0UiLCJjb2xvcjogIzg4OCIsZSwuLi50KX1kZWJ1ZyhlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9aHIuRGVidWcmJmNvbnNvbGUubG9nKCIlY0RFQlVHIiwiYmFja2dyb3VuZDogI2VlZTsgY29sb3I6ICM4ODgiLGUsLi4udCl9aW5mbyhlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9aHIuSW5mbyYmY29uc29sZS5sb2coIiVjIElORk8iLCJjb2xvcjogIzMzZiIsZSwuLi50KX13YXJuKGUsLi4udCl7dGhpcy5nZXRMZXZlbCgpPD1oci5XYXJuaW5nJiZjb25zb2xlLmxvZygiJWMgV0FSTiIsImNvbG9yOiAjOTkzIixlLC4uLnQpfWVycm9yKGUsLi4udCl7dGhpcy5nZXRMZXZlbCgpPD1oci5FcnJvciYmY29uc29sZS5sb2coIiVjICBFUlIiLCJjb2xvcjogI2YzMyIsZSwuLi50KX1jcml0aWNhbChlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9aHIuQ3JpdGljYWwmJmNvbnNvbGUubG9nKCIlY0NSSVRJIiwiYmFja2dyb3VuZDogI2YzMzsgY29sb3I6IHdoaXRlIixlLC4uLnQpfWRpc3Bvc2UoKXt9Zmx1c2goKXt9fWNsYXNzIGJye3N0YXRpYyBjaG9yZChlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybihlfCg2NTUzNSZ0KTw8MTY+Pj4wKT4+PjB9KGUsdCl9fXZhciB2cix5cixDcjtmdW5jdGlvbiB3cihlLHQsbixyLGkpe3JldHVybiBmdW5jdGlvbihlLHQsbixyLGkpe2lmKDA9PT1yKXJldHVybiEwO2NvbnN0IG89dC5jaGFyQ29kZUF0KHItMSk7aWYoMCE9PWUuZ2V0KG8pKXJldHVybiEwO2lmKDEzPT09b3x8MTA9PT1vKXJldHVybiEwO2lmKGk+MCl7Y29uc3Qgbj10LmNoYXJDb2RlQXQocik7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsMCxyLGkpJiZmdW5jdGlvbihlLHQsbixyLGkpe2lmKHIraT09PW4pcmV0dXJuITA7Y29uc3Qgbz10LmNoYXJDb2RlQXQocitpKTtpZigwIT09ZS5nZXQobykpcmV0dXJuITA7aWYoMTM9PT1vfHwxMD09PW8pcmV0dXJuITA7aWYoaT4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChyK2ktMSk7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsbixyLGkpfWJyLkN0cmxDbWQ9MjA0OCxici5TaGlmdD0xMDI0LGJyLkFsdD01MTIsYnIuV2luQ3RybD0yNTYsZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSh2cnx8KHZyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifSh5cnx8KHlyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KENyfHwoQ3I9e30pKTtjbGFzcyBfcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3dvcmRTZXBhcmF0b3JzPWUsdGhpcy5fc2VhcmNoUmVnZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KGUpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD1lLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dChlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBuO2Rve2lmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgrdGhpcy5fcHJldk1hdGNoTGVuZ3RoPT09dClyZXR1cm4gbnVsbDtpZihuPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWMoZSksIW4pcmV0dXJuIG51bGw7Y29uc3Qgcj1uLmluZGV4LGk9blswXS5sZW5ndGg7aWYocj09PXRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgmJmk9PT10aGlzLl9wcmV2TWF0Y2hMZW5ndGgpe2lmKDA9PT1pKXtKKGUsdCx0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpPjY1NTM1P3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTE7Y29udGludWV9cmV0dXJuIG51bGx9aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1yLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1pLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8d3IodGhpcy5fd29yZFNlcGFyYXRvcnMsZSx0LHIsaSkpcmV0dXJuIG59d2hpbGUobik7cmV0dXJuIG51bGx9fWNsYXNzIFNye2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldChlLmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9Wi5nZXRJbnN0YW5jZShuZXcgU2V0KGUuYWxsb3dlZExvY2FsZXMpKX1nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCl7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuImFsbE5vbkJhc2ljQXNjaWkiO2NvbnN0IGU9bmV3IFNldDtpZih0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiBZLmNvZGVQb2ludHMpQXIoU3RyaW5nLmZyb21Db2RlUG9pbnQodCkpfHxlLmFkZCh0KTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSllLmFkZCh0KTtmb3IoY29uc3QgdCBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKWUuZGVsZXRlKHQpO3JldHVybiBlfXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSx0KXtjb25zdCBuPWUuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMobikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IHI9ITEsaT0hMTtpZih0KWZvcihsZXQgZSBvZiB0KXtjb25zdCB0PWUuY29kZVBvaW50QXQoMCksbj0obz1lLFgudGVzdChvKSk7cj1yfHxuLG58fHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyh0KXx8WS5pc0ludmlzaWJsZUNoYXJhY3Rlcih0KXx8KGk9ITApfXZhciBvO3JldHVybiFyJiZpPzA6dGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMmJiFBcihlKSYmWS5pc0ludmlzaWJsZUNoYXJhY3RlcihuKT8yOnRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzJiZ0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMobik/MzowfX1mdW5jdGlvbiBBcihlKXtyZXR1cm4iICI9PT1lfHwiXG4iPT09ZXx8Ilx0Ij09PWV9dmFyIEVyPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2woci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtsKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9bCgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBOciBleHRlbmRzIGNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xpbmVzPXQsdGhpcy5fZW9sPW4sdGhpcy5fdmVyc2lvbklkPXIsdGhpcy5fbGluZVN0YXJ0cz1udWxsLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9saW5lcy5sZW5ndGg9MH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9uSWR9Z2V0VGV4dCgpe3JldHVybiBudWxsPT09dGhpcy5fY2FjaGVkVGV4dFZhbHVlJiYodGhpcy5fY2FjaGVkVGV4dFZhbHVlPXRoaXMuX2xpbmVzLmpvaW4odGhpcy5fZW9sKSksdGhpcy5fY2FjaGVkVGV4dFZhbHVlfW9uRXZlbnRzKGUpe2UuZW9sJiZlLmVvbCE9PXRoaXMuX2VvbCYmKHRoaXMuX2VvbD1lLmVvbCx0aGlzLl9saW5lU3RhcnRzPW51bGwpO2NvbnN0IHQ9ZS5jaGFuZ2VzO2Zvcihjb25zdCBlIG9mIHQpdGhpcy5fYWNjZXB0RGVsZXRlUmFuZ2UoZS5yYW5nZSksdGhpcy5fYWNjZXB0SW5zZXJ0VGV4dChuZXcgWWUoZS5yYW5nZS5zdGFydExpbmVOdW1iZXIsZS5yYW5nZS5zdGFydENvbHVtbiksZS50ZXh0KTt0aGlzLl92ZXJzaW9uSWQ9ZS52ZXJzaW9uSWQsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9X2Vuc3VyZUxpbmVTdGFydHMoKXtpZighdGhpcy5fbGluZVN0YXJ0cyl7Y29uc3QgZT10aGlzLl9lb2wubGVuZ3RoLHQ9dGhpcy5fbGluZXMubGVuZ3RoLG49bmV3IFVpbnQzMkFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDtyKyspbltyXT10aGlzLl9saW5lc1tyXS5sZW5ndGgrZTt0aGlzLl9saW5lU3RhcnRzPW5ldyBodChuKX19X3NldExpbmVUZXh0KGUsdCl7dGhpcy5fbGluZXNbZV09dCx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnNldFZhbHVlKGUsdGhpcy5fbGluZXNbZV0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGgpfV9hY2NlcHREZWxldGVSYW5nZShlKXtpZihlLnN0YXJ0TGluZU51bWJlciE9PWUuZW5kTGluZU51bWJlcil0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5lbmRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmVuZENvbHVtbi0xKSksdGhpcy5fbGluZXMuc3BsaWNlKGUuc3RhcnRMaW5lTnVtYmVyLGUuZW5kTGluZU51bWJlci1lLnN0YXJ0TGluZU51bWJlciksdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5yZW1vdmVWYWx1ZXMoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKTtlbHNle2lmKGUuc3RhcnRDb2x1bW49PT1lLmVuZENvbHVtbilyZXR1cm47dGhpcy5fc2V0TGluZVRleHQoZS5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmVuZENvbHVtbi0xKSl9fV9hY2NlcHRJbnNlcnRUZXh0KGUsdCl7aWYoMD09PXQubGVuZ3RoKXJldHVybjtjb25zdCBuPXQuc3BsaXQoL1xyXG58XHJ8XG4vKTtpZigxPT09bi5sZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy5fc2V0TGluZVRleHQoZS5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuY29sdW1uLTEpK25bMF0rdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmNvbHVtbi0xKSk7bltuLmxlbmd0aC0xXSs9dGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmNvbHVtbi0xKSx0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSk7Y29uc3Qgcj1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgtMSk7Zm9yKGxldCB0PTE7dDxuLmxlbmd0aDt0KyspdGhpcy5fbGluZXMuc3BsaWNlKGUubGluZU51bWJlcit0LTEsMCxuW3RdKSxyW3QtMV09blt0XS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aDt0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLmluc2VydFZhbHVlcyhlLmxpbmVOdW1iZXIscil9fXtnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudChlKXtyZXR1cm4gdGhpcy5fbGluZXNbZS0xXX1nZXRXb3JkQXRQb3NpdGlvbihlLHQpe2NvbnN0IG49Z3QoZS5jb2x1bW4sZnVuY3Rpb24oZSl7bGV0IHQ9ZHQ7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH0odCksdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLDApO3JldHVybiBuP25ldyBRZShlLmxpbmVOdW1iZXIsbi5zdGFydENvbHVtbixlLmxpbmVOdW1iZXIsbi5lbmRDb2x1bW4pOm51bGx9d29yZHMoZSl7Y29uc3QgdD10aGlzLl9saW5lcyxuPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCByPTAsaT0iIixvPTAsYT1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKG88YS5sZW5ndGgpe2NvbnN0IGU9aS5zdWJzdHJpbmcoYVtvXS5zdGFydCxhW29dLmVuZCk7bys9MSx5aWVsZCBlfWVsc2V7aWYoIShyPHQubGVuZ3RoKSlicmVhaztpPXRbcl0sYT1uKGksZSksbz0wLHIrPTF9fX19Z2V0TGluZVdvcmRzKGUsdCl7Y29uc3Qgbj10aGlzLl9saW5lc1tlLTFdLHI9dGhpcy5fd29yZGVuaXplKG4sdCksaT1bXTtmb3IoY29uc3QgZSBvZiByKWkucHVzaCh7d29yZDpuLnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kKSxzdGFydENvbHVtbjplLnN0YXJ0KzEsZW5kQ29sdW1uOmUuZW5kKzF9KTtyZXR1cm4gaX1fd29yZGVuaXplKGUsdCl7Y29uc3Qgbj1bXTtsZXQgcjtmb3IodC5sYXN0SW5kZXg9MDsocj10LmV4ZWMoZSkpJiYwIT09clswXS5sZW5ndGg7KW4ucHVzaCh7c3RhcnQ6ci5pbmRleCxlbmQ6ci5pbmRleCtyWzBdLmxlbmd0aH0pO3JldHVybiBufWdldFZhbHVlSW5SYW5nZShlKXtpZigoZT10aGlzLl92YWxpZGF0ZVJhbmdlKGUpKS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXIpcmV0dXJuIHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLnN0YXJ0Q29sdW1uLTEsZS5lbmRDb2x1bW4tMSk7Y29uc3QgdD10aGlzLl9lb2wsbj1lLnN0YXJ0TGluZU51bWJlci0xLHI9ZS5lbmRMaW5lTnVtYmVyLTEsaT1bXTtpLnB1c2godGhpcy5fbGluZXNbbl0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgZT1uKzE7ZTxyO2UrKylpLnB1c2godGhpcy5fbGluZXNbZV0pO3JldHVybiBpLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKDAsZS5lbmRDb2x1bW4tMSkpLGkuam9pbih0KX1vZmZzZXRBdChlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bShlLmxpbmVOdW1iZXItMikrKGUuY29sdW1uLTEpfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoMCxlKSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7Y29uc3QgdD10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YoZSksbj10aGlzLl9saW5lc1t0LmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MSt0LmluZGV4LGNvbHVtbjoxK01hdGgubWluKHQucmVtYWluZGVyLG4pfX1fdmFsaWRhdGVSYW5nZShlKXtjb25zdCB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5zdGFydExpbmVOdW1iZXIsY29sdW1uOmUuc3RhcnRDb2x1bW59KSxuPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5lbmRMaW5lTnVtYmVyLGNvbHVtbjplLmVuZENvbHVtbn0pO3JldHVybiB0LmxpbmVOdW1iZXIhPT1lLnN0YXJ0TGluZU51bWJlcnx8dC5jb2x1bW4hPT1lLnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXIhPT1lLmVuZExpbmVOdW1iZXJ8fG4uY29sdW1uIT09ZS5lbmRDb2x1bW4/e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjpuLmxpbmVOdW1iZXIsZW5kQ29sdW1uOm4uY29sdW1ufTplfV92YWxpZGF0ZVBvc2l0aW9uKGUpe2lmKCFZZS5pc0lQb3NpdGlvbihlKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOnQsY29sdW1uOm59PWUscj0hMTtpZih0PDEpdD0xLG49MSxyPSEwO2Vsc2UgaWYodD50aGlzLl9saW5lcy5sZW5ndGgpdD10aGlzLl9saW5lcy5sZW5ndGgsbj10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLHI9ITA7ZWxzZXtjb25zdCBlPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzE7bjwxPyhuPTEscj0hMCk6bj5lJiYobj1lLHI9ITApfXJldHVybiByP3tsaW5lTnVtYmVyOnQsY29sdW1uOm59OmV9fWNsYXNzIHhye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faG9zdD1lLHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PXQsdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwoZSl7cmV0dXJuIHRoaXMuX21vZGVsc1tlXX1fZ2V0TW9kZWxzKCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKCh0PT5lLnB1c2godGhpcy5fbW9kZWxzW3RdKSkpLGV9YWNjZXB0TmV3TW9kZWwoZSl7dGhpcy5fbW9kZWxzW2UudXJsXT1uZXcgTnIoQmUucGFyc2UoZS51cmwpLGUubGluZXMsZS5FT0wsZS52ZXJzaW9uSWQpfWFjY2VwdE1vZGVsQ2hhbmdlZChlLHQpe2lmKCF0aGlzLl9tb2RlbHNbZV0pcmV0dXJuO3RoaXMuX21vZGVsc1tlXS5vbkV2ZW50cyh0KX1hY2NlcHRSZW1vdmVkTW9kZWwoZSl7dGhpcy5fbW9kZWxzW2VdJiZkZWxldGUgdGhpcy5fbW9kZWxzW2VdfWNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gcj9jbGFzc3tzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtjb25zdCByPW4/bi5zdGFydExpbmVOdW1iZXI6MSxpPW4/bi5lbmRMaW5lTnVtYmVyOmUuZ2V0TGluZUNvdW50KCksbz1uZXcgU3IodCksYT1vLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgczt2YXIgbDtzPSJhbGxOb25CYXNpY0FzY2lpIj09PWE/bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bmV3IFJlZ0V4cChgWyR7bD1BcnJheS5mcm9tKGEpLm1hcCgoZT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpKS5qb2luKCIiKSxsLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9XWAsImciKTtjb25zdCBjPW5ldyBfcihudWxsLHMpLHU9W107bGV0IGgsZj0hMSxkPTAsbT0wLGc9MDtlOmZvcihsZXQgdD1yLG49aTt0PD1uO3QrKyl7Y29uc3Qgbj1lLmdldExpbmVDb250ZW50KHQpLHI9bi5sZW5ndGg7Yy5yZXNldCgwKTtkb3tpZihoPWMubmV4dChuKSxoKXtsZXQgZT1oLmluZGV4LGk9aC5pbmRleCtoWzBdLmxlbmd0aDtlPjAmJkcobi5jaGFyQ29kZUF0KGUtMSkpJiZlLS0saSsxPHImJkcobi5jaGFyQ29kZUF0KGktMSkpJiZpKys7Y29uc3QgYT1uLnN1YnN0cmluZyhlLGkpLHM9Z3QoZSsxLGR0LG4sMCksbD1vLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoYSxzP3Mud29yZDpudWxsKTtpZigwIT09bCl7Mz09PWw/ZCsrOjI9PT1sP20rKzoxPT09bD9nKys6aigpO2NvbnN0IG49MWUzO2lmKHUubGVuZ3RoPj1uKXtmPSEwO2JyZWFrIGV9dS5wdXNoKG5ldyBRZSh0LGUrMSx0LGkrMSkpfX19d2hpbGUoaCl9cmV0dXJue3Jhbmdlczp1LGhhc01vcmU6ZixhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDpkLGludmlzaWJsZUNoYXJhY3RlckNvdW50Om0sbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50Omd9fXN0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodFJlYXNvbihlLHQpe2NvbnN0IG49bmV3IFNyKHQpO3N3aXRjaChuLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSxudWxsKSl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMjpyZXR1cm57a2luZDoxfTtjYXNlIDM6e2NvbnN0IHI9ZS5jb2RlUG9pbnRBdCgwKSxpPW4uYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRQcmltYXJ5Q29uZnVzYWJsZShyKSxvPVouZ2V0TG9jYWxlcygpLmZpbHRlcigoZT0+IVouZ2V0SW5zdGFuY2UobmV3IFNldChbLi4udC5hbGxvd2VkTG9jYWxlcyxlXSkpLmlzQW1iaWd1b3VzKHIpKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6b319Y2FzZSAxOnJldHVybntraW5kOjJ9fX19LmNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhyLHQsbik6e3JhbmdlczpbXSxoYXNNb3JlOiExLGFtYmlndW91c0NoYXJhY3RlckNvdW50OjAsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6MCxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6MH19KSl9Y29tcHV0ZURpZmYoZSx0LG4scil7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKSxvPXRoaXMuX2dldE1vZGVsKHQpO2lmKCFpfHwhbylyZXR1cm4gbnVsbDtjb25zdCBhPWkuZ2V0TGluZXNDb250ZW50KCkscz1vLmdldExpbmVzQ29udGVudCgpLGw9bmV3IG90KGEscyx7c2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITAsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6bixzaG91bGRNYWtlUHJldHR5RGlmZjohMCxtYXhDb21wdXRhdGlvblRpbWU6cn0pLmNvbXB1dGVEaWZmKCksYz0hKGwuY2hhbmdlcy5sZW5ndGg+MCkmJnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbChpLG8pO3JldHVybntxdWl0RWFybHk6bC5xdWl0RWFybHksaWRlbnRpY2FsOmMsY2hhbmdlczpsLmNoYW5nZXN9fSkpfV9tb2RlbHNBcmVJZGVudGljYWwoZSx0KXtjb25zdCBuPWUuZ2V0TGluZUNvdW50KCk7aWYobiE9PXQuZ2V0TGluZUNvdW50KCkpcmV0dXJuITE7Zm9yKGxldCByPTE7cjw9bjtyKyspe2lmKGUuZ2V0TGluZUNvbnRlbnQocikhPT10LmdldExpbmVDb250ZW50KHIpKXJldHVybiExfXJldHVybiEwfWNvbXB1dGVNb3JlTWluaW1hbEVkaXRzKGUsdCl7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj10aGlzLl9nZXRNb2RlbChlKTtpZighbilyZXR1cm4gdDtjb25zdCByPVtdO2xldCBpO3Q9dC5zbGljZSgwKS5zb3J0KCgoZSx0KT0+e2lmKGUucmFuZ2UmJnQucmFuZ2UpcmV0dXJuIFFlLmNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLnJhbmdlLHQucmFuZ2UpO3JldHVybihlLnJhbmdlPzA6MSktKHQucmFuZ2U/MDoxKX0pKTtmb3IobGV0e3JhbmdlOmUsdGV4dDpvLGVvbDphfW9mIHQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmKGk9YSksUWUuaXNFbXB0eShlKSYmIW8pY29udGludWU7Y29uc3QgdD1uLmdldFZhbHVlSW5SYW5nZShlKTtpZihvPW8ucmVwbGFjZSgvXHJcbnxcbnxcci9nLG4uZW9sKSx0PT09byljb250aW51ZTtpZihNYXRoLm1heChvLmxlbmd0aCx0Lmxlbmd0aCk+eHIuX2RpZmZMaW1pdCl7ci5wdXNoKHtyYW5nZTplLHRleHQ6b30pO2NvbnRpbnVlfWNvbnN0IHM9ZmUodCxvLCExKSxsPW4ub2Zmc2V0QXQoUWUubGlmdChlKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBlIG9mIHMpe2NvbnN0IHQ9bi5wb3NpdGlvbkF0KGwrZS5vcmlnaW5hbFN0YXJ0KSxpPW4ucG9zaXRpb25BdChsK2Uub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoKSxhPXt0ZXh0Om8uc3Vic3RyKGUubW9kaWZpZWRTdGFydCxlLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOmkubGluZU51bWJlcixlbmRDb2x1bW46aS5jb2x1bW59fTtuLmdldFZhbHVlSW5SYW5nZShhLnJhbmdlKSE9PWEudGV4dCYmci5wdXNoKGEpfX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIGkmJnIucHVzaCh7ZW9sOmksdGV4dDoiIixyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOjAsc3RhcnRDb2x1bW46MCxlbmRMaW5lTnVtYmVyOjAsZW5kQ29sdW1uOjB9fSkscn0pKX1jb21wdXRlTGlua3MoZSl7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0TGluZUNvdW50JiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ29udGVudD9fdC5jb21wdXRlTGlua3MoZSk6W119KHQpOm51bGx9KSl9dGV4dHVhbFN1Z2dlc3QoZSx0LG4scil7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT1uZXcgUighMCksbz1uZXcgUmVnRXhwKG4sciksYT1uZXcgU2V0O2U6Zm9yKGxldCBuIG9mIGUpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwobik7aWYoZSlmb3IobGV0IG4gb2YgZS53b3JkcyhvKSlpZihuIT09dCYmaXNOYU4oTnVtYmVyKG4pKSYmKGEuYWRkKG4pLGEuc2l6ZT54ci5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShhKSxkdXJhdGlvbjppLmVsYXBzZWQoKX19KSl9Y29tcHV0ZVdvcmRSYW5nZXMoZSx0LG4scil7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKTtpZighaSlyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBvPW5ldyBSZWdFeHAobixyKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPXQuc3RhcnRMaW5lTnVtYmVyO2U8dC5lbmRMaW5lTnVtYmVyO2UrKyl7Y29uc3QgdD1pLmdldExpbmVXb3JkcyhlLG8pO2Zvcihjb25zdCBuIG9mIHQpe2lmKCFpc05hTihOdW1iZXIobi53b3JkKSkpY29udGludWU7bGV0IHQ9YVtuLndvcmRdO3R8fCh0PVtdLGFbbi53b3JkXT10KSx0LnB1c2goe3N0YXJ0TGluZU51bWJlcjplLHN0YXJ0Q29sdW1uOm4uc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjplLGVuZENvbHVtbjpuLmVuZENvbHVtbn0pfX1yZXR1cm4gYX0pKX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxuLHIsaSl7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbz10aGlzLl9nZXRNb2RlbChlKTtpZighbylyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyBSZWdFeHAocixpKTt0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW4mJih0PXtzdGFydExpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixlbmRDb2x1bW46dC5lbmRDb2x1bW4rMX0pO2NvbnN0IHM9by5nZXRWYWx1ZUluUmFuZ2UodCksbD1vLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSxhKTtpZighbClyZXR1cm4gbnVsbDtjb25zdCBjPW8uZ2V0VmFsdWVJblJhbmdlKGwpO3JldHVybiBTdC5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KHQscyxsLGMsbil9KSl9bG9hZEZvcmVpZ25Nb2R1bGUoZSx0LG4pe2NvbnN0IHI9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWU9PmZ1bmN0aW9uKCl7Y29uc3Qgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoZSxuKX07bGV0IHI9e307Zm9yKGNvbnN0IHQgb2YgZSlyW3RdPW4odCk7cmV0dXJuIHJ9KG4sKChlLHQpPT50aGlzLl9ob3N0LmZocihlLHQpKSksaT17aG9zdDpyLGdldE1pcnJvck1vZGVsczooKT0+dGhpcy5fZ2V0TW9kZWxzKCl9O3JldHVybiB0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT8odGhpcy5fZm9yZWlnbk1vZHVsZT10aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeShpLHQpLFByb21pc2UucmVzb2x2ZShCKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcihlLHQpe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVtlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVtlXS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLHQpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fX14ci5fZGlmZkxpbWl0PTFlNSx4ci5fc3VnZ2VzdGlvbnNMaW1pdD0xZTQsImZ1bmN0aW9uIj09dHlwZW9mIGltcG9ydFNjcmlwdHMmJihOLm1vbmFjbz17ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLGV4dHJhOnZvaWQgMCxDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTp4dCxFbWl0dGVyOlUsS2V5Q29kZTpwbixLZXlNb2Q6YnIsUG9zaXRpb246WWUsUmFuZ2U6UWUsU2VsZWN0aW9uOkZ0LFVyaTpCZSxUb2tlbjpRbixNYXJrZG93blN0cmluZzpjcixNYXJrZG93blN0cmluZ1RleHROZXdsaW5lU3R5bGU6d24sRGlzcG9zYWJsZTpkLERpc3Bvc2FibGVTdG9yZTpmLEVycm9ySGFuZGxlcjplLEFic3RyYWN0TG9nZ2VyOmdyLENvbnNvbGVMb2dnZXI6cHIsVG9rZW5pemF0aW9uUmVzdWx0OmVyLEVuY29kZWRUb2tlbml6YXRpb25SZXN1bHQ6dHIsU2VsZWN0aW9uRGlyZWN0aW9uOkZuLE1hcmtlclNldmVyaXR5Ol9uLE1hcmtlclRhZzpTbixMb2dMZXZlbDpDbixlcnJvckhhbmRsZXI6dH0pO2xldCBMcj0hMTtmdW5jdGlvbiBrcihlKXtpZihMcilyZXR1cm47THI9ITA7Y29uc3QgdD1uZXcgc2UoKGU9PntzZWxmLnBvc3RNZXNzYWdlKGUpfSksKHQ9Pm5ldyB4cih0LGUpKSk7c2VsZi5vbm1lc3NhZ2U9ZT0+e3Qub25tZXNzYWdlKGUuZGF0YSl9fQovKiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBWZXJzaW9uOiAwLjMzLjAoYWM5YjYzNTk0ZmE0OWRiODQyNWU0M2FmNmY4OGJmZDA0OTlkZTM1NCkKICAgICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9tb25hY28tZWRpdG9yL2Jsb2IvbWFpbi9MSUNFTlNFLnR4dAogICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmZ1bmN0aW9uIFRyKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPWUubGVuZ3RoLHI9MCxpPSIiLG89MCxhPTE2LHM9MCxsPTAsYz0wLHU9MCxoPTA7ZnVuY3Rpb24gZih0LG4pe2Zvcih2YXIgaT0wLG89MDtpPHR8fCFuOyl7dmFyIGE9ZS5jaGFyQ29kZUF0KHIpO2lmKGE+PTQ4JiZhPD01NylvPTE2Km8rYS00ODtlbHNlIGlmKGE+PTY1JiZhPD03MClvPTE2Km8rYS02NSsxMDtlbHNle2lmKCEoYT49OTcmJmE8PTEwMikpYnJlYWs7bz0xNipvK2EtOTcrMTB9cisrLGkrK31yZXR1cm4gaTx0JiYobz0tMSksb31mdW5jdGlvbiBkKCl7aWYoaT0iIixoPTAsbz1yLGw9cyx1PWMscj49bilyZXR1cm4gbz1uLGE9MTc7dmFyIHQ9ZS5jaGFyQ29kZUF0KHIpO2lmKE9yKHQpKXtkb3tyKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PWUuY2hhckNvZGVBdChyKX13aGlsZShPcih0KSk7cmV0dXJuIGE9MTV9aWYoTXIodCkpcmV0dXJuIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLDEzPT09dCYmMTA9PT1lLmNoYXJDb2RlQXQocikmJihyKyssaSs9IlxuIikscysrLGM9cixhPTE0O3N3aXRjaCh0KXtjYXNlIDEyMzpyZXR1cm4gcisrLGE9MTtjYXNlIDEyNTpyZXR1cm4gcisrLGE9MjtjYXNlIDkxOnJldHVybiByKyssYT0zO2Nhc2UgOTM6cmV0dXJuIHIrKyxhPTQ7Y2FzZSA1ODpyZXR1cm4gcisrLGE9NjtjYXNlIDQ0OnJldHVybiByKyssYT01O2Nhc2UgMzQ6cmV0dXJuIHIrKyxpPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLGk9cjs7KXtpZihyPj1uKXt0Kz1lLnN1YnN0cmluZyhpLHIpLGg9MjticmVha312YXIgbz1lLmNoYXJDb2RlQXQocik7aWYoMzQ9PT1vKXt0Kz1lLnN1YnN0cmluZyhpLHIpLHIrKzticmVha31pZig5MiE9PW8pe2lmKG8+PTAmJm88PTMxKXtpZihNcihvKSl7dCs9ZS5zdWJzdHJpbmcoaSxyKSxoPTI7YnJlYWt9aD02fXIrK31lbHNle2lmKHQrPWUuc3Vic3RyaW5nKGksciksKytyPj1uKXtoPTI7YnJlYWt9c3dpdGNoKGUuY2hhckNvZGVBdChyKyspKXtjYXNlIDM0OnQrPSciJzticmVhaztjYXNlIDkyOnQrPSJcXCI7YnJlYWs7Y2FzZSA0Nzp0Kz0iLyI7YnJlYWs7Y2FzZSA5ODp0Kz0iXGIiO2JyZWFrO2Nhc2UgMTAyOnQrPSJcZiI7YnJlYWs7Y2FzZSAxMTA6dCs9IlxuIjticmVhaztjYXNlIDExNDp0Kz0iXHIiO2JyZWFrO2Nhc2UgMTE2OnQrPSJcdCI7YnJlYWs7Y2FzZSAxMTc6dmFyIGE9Zig0LCEwKTthPj0wP3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk6aD00O2JyZWFrO2RlZmF1bHQ6aD01fWk9cn19cmV0dXJuIHR9KCksYT0xMDtjYXNlIDQ3OnZhciBkPXItMTtpZig0Nz09PWUuY2hhckNvZGVBdChyKzEpKXtmb3Iocis9MjtyPG4mJiFNcihlLmNoYXJDb2RlQXQocikpOylyKys7cmV0dXJuIGk9ZS5zdWJzdHJpbmcoZCxyKSxhPTEyfWlmKDQyPT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTI7Zm9yKHZhciBnPW4tMSxwPSExO3I8Zzspe3ZhciBiPWUuY2hhckNvZGVBdChyKTtpZig0Mj09PWImJjQ3PT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTIscD0hMDticmVha31yKyssTXIoYikmJigxMz09PWImJjEwPT09ZS5jaGFyQ29kZUF0KHIpJiZyKysscysrLGM9cil9cmV0dXJuIHB8fChyKyssaD0xKSxpPWUuc3Vic3RyaW5nKGQsciksYT0xM31yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKyssYT0xNjtjYXNlIDQ1OmlmKGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksKytyPT09bnx8IUlyKGUuY2hhckNvZGVBdChyKSkpcmV0dXJuIGE9MTY7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gaSs9ZnVuY3Rpb24oKXt2YXIgdD1yO2lmKDQ4PT09ZS5jaGFyQ29kZUF0KHIpKXIrKztlbHNlIGZvcihyKys7cjxlLmxlbmd0aCYmSXIoZS5jaGFyQ29kZUF0KHIpKTspcisrO2lmKHI8ZS5sZW5ndGgmJjQ2PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighKCsrcjxlLmxlbmd0aCYmSXIoZS5jaGFyQ29kZUF0KHIpKSkpcmV0dXJuIGg9MyxlLnN1YnN0cmluZyh0LHIpO2ZvcihyKys7cjxlLmxlbmd0aCYmSXIoZS5jaGFyQ29kZUF0KHIpKTspcisrfXZhciBuPXI7aWYocjxlLmxlbmd0aCYmKDY5PT09ZS5jaGFyQ29kZUF0KHIpfHwxMDE9PT1lLmNoYXJDb2RlQXQocikpKWlmKCgrK3I8ZS5sZW5ndGgmJjQzPT09ZS5jaGFyQ29kZUF0KHIpfHw0NT09PWUuY2hhckNvZGVBdChyKSkmJnIrKyxyPGUubGVuZ3RoJiZJcihlLmNoYXJDb2RlQXQocikpKXtmb3IocisrO3I8ZS5sZW5ndGgmJklyKGUuY2hhckNvZGVBdChyKSk7KXIrKztuPXJ9ZWxzZSBoPTM7cmV0dXJuIGUuc3Vic3RyaW5nKHQsbil9KCksYT0xMTtkZWZhdWx0OmZvcig7cjxuJiZtKHQpOylyKyssdD1lLmNoYXJDb2RlQXQocik7aWYobyE9PXIpe3N3aXRjaChpPWUuc3Vic3RyaW5nKG8scikpe2Nhc2UidHJ1ZSI6cmV0dXJuIGE9ODtjYXNlImZhbHNlIjpyZXR1cm4gYT05O2Nhc2UibnVsbCI6cmV0dXJuIGE9N31yZXR1cm4gYT0xNn1yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKyssYT0xNn19ZnVuY3Rpb24gbShlKXtpZihPcihlKXx8TXIoZSkpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2UgMTI1OmNhc2UgOTM6Y2FzZSAxMjM6Y2FzZSA5MTpjYXNlIDM0OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDQ3OnJldHVybiExfXJldHVybiEwfXJldHVybntzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXtyPWUsaT0iIixvPTAsYT0xNixoPTB9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNjYW46dD9mdW5jdGlvbigpe3ZhciBlO2Rve2U9ZCgpfXdoaWxlKGU+PTEyJiZlPD0xNSk7cmV0dXJuIGV9OmQsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBpfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBvfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiByLW99LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gby11fSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGh9fX1mdW5jdGlvbiBPcihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTE9PT1lfHwxMj09PWV8fDE2MD09PWV8fDU3NjA9PT1lfHxlPj04MTkyJiZlPD04MjAzfHw4MjM5PT09ZXx8ODI4Nz09PWV8fDEyMjg4PT09ZXx8NjUyNzk9PT1lfWZ1bmN0aW9uIE1yKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfWZ1bmN0aW9uIElyKGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gUnIoZSx0LG4pe3ZhciByLGksbyxhLHM7aWYodCl7Zm9yKGE9dC5vZmZzZXQscz1hK3QubGVuZ3RoLG89YTtvPjAmJiFGcihlLG8tMSk7KW8tLTtmb3IodmFyIGw9cztsPGUubGVuZ3RoJiYhRnIoZSxsKTspbCsrO2k9ZS5zdWJzdHJpbmcobyxsKSxyPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPTAsaT10LnRhYlNpemV8fDQ7Zm9yKDtuPGUubGVuZ3RoOyl7dmFyIG89ZS5jaGFyQXQobik7aWYoIiAiPT09bylyKys7ZWxzZXtpZigiXHQiIT09bylicmVhaztyKz1pfW4rK31yZXR1cm4gTWF0aC5mbG9vcihyL2kpfShpLG4pfWVsc2UgaT1lLHI9MCxvPTAsYT0wLHM9ZS5sZW5ndGg7dmFyIGMsdT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10LmNoYXJBdChuKTtpZigiXHIiPT09cilyZXR1cm4gbisxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQobisxKT8iXHJcbiI6IlxyIjtpZigiXG4iPT09cilyZXR1cm4iXG4ifXJldHVybiBlJiZlLmVvbHx8IlxuIn0obixlKSxoPSExLGY9MDtjPW4uaW5zZXJ0U3BhY2VzP1ByKCIgIixuLnRhYlNpemV8fDQpOiJcdCI7dmFyIGQ9VHIoaSwhMSksbT0hMTtmdW5jdGlvbiBnKCl7cmV0dXJuIHUrUHIoYyxyK2YpfWZ1bmN0aW9uIHAoKXt2YXIgZT1kLnNjYW4oKTtmb3IoaD0hMTsxNT09PWV8fDE0PT09ZTspaD1ofHwxND09PWUsZT1kLnNjYW4oKTtyZXR1cm4gbT0xNj09PWV8fDAhPT1kLmdldFRva2VuRXJyb3IoKSxlfXZhciBiPVtdO2Z1bmN0aW9uIHYobixyLGkpe218fHQmJiEocjxzJiZpPmEpfHxlLnN1YnN0cmluZyhyLGkpPT09bnx8Yi5wdXNoKHtvZmZzZXQ6cixsZW5ndGg6aS1yLGNvbnRlbnQ6bn0pfXZhciB5PXAoKTtpZigxNyE9PXkpe3ZhciBDPWQuZ2V0VG9rZW5PZmZzZXQoKStvO3YoUHIoYyxyKSxvLEMpfWZvcig7MTchPT15Oyl7Zm9yKHZhciB3PWQuZ2V0VG9rZW5PZmZzZXQoKStkLmdldFRva2VuTGVuZ3RoKCkrbyxfPXAoKSxTPSIiLEE9ITE7IWgmJigxMj09PV98fDEzPT09Xyk7KXt2KCIgIix3LGQuZ2V0VG9rZW5PZmZzZXQoKStvKSx3PWQuZ2V0VG9rZW5PZmZzZXQoKStkLmdldFRva2VuTGVuZ3RoKCkrbyxTPShBPTEyPT09Xyk/ZygpOiIiLF89cCgpfWlmKDI9PT1fKTEhPT15JiYoZi0tLFM9ZygpKTtlbHNlIGlmKDQ9PT1fKTMhPT15JiYoZi0tLFM9ZygpKTtlbHNle3N3aXRjaCh5KXtjYXNlIDM6Y2FzZSAxOmYrKyxTPWcoKTticmVhaztjYXNlIDU6Y2FzZSAxMjpTPWcoKTticmVhaztjYXNlIDEzOmg/Uz1nKCk6QXx8KFM9IiAiKTticmVhaztjYXNlIDY6QXx8KFM9IiAiKTticmVhaztjYXNlIDEwOmlmKDY9PT1fKXtBfHwoUz0iIik7YnJlYWt9Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMTpjYXNlIDI6Y2FzZSA0OjEyPT09X3x8MTM9PT1fP0F8fChTPSIgIik6NSE9PV8mJjE3IT09XyYmKG09ITApO2JyZWFrO2Nhc2UgMTY6bT0hMH0haHx8MTIhPT1fJiYxMyE9PV98fChTPWcoKSl9MTc9PT1fJiYoUz1uLmluc2VydEZpbmFsTmV3bGluZT91OiIiKSx2KFMsdyxkLmdldFRva2VuT2Zmc2V0KCkrbykseT1ffXJldHVybiBifWZ1bmN0aW9uIFByKGUsdCl7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPWU7cmV0dXJuIG59ZnVuY3Rpb24gRnIoZSx0KXtyZXR1cm4tMSE9PSJcclxuIi5pbmRleE9mKGUuY2hhckF0KHQpKX12YXIgRHI7c2VsZi5vbm1lc3NhZ2U9ZT0+e0xyfHxrcihudWxsKX0sKERyfHwoRHI9e30pKS5ERUZBVUxUPXthbGxvd1RyYWlsaW5nQ29tbWE6ITF9O3ZhciBWcixLcixVcixCcixqcixxciwkcixXcixIcix6cixHcixKcixYcixacixZcixRcixlaSx0aSxuaSxyaSxpaSxvaSxhaSxzaSxsaSxjaSx1aSxoaSxmaSxkaSxtaSxnaSxwaSxiaSx2aSx5aSxDaSx3aSxfaSxTaSxBaSxFaSxOaSx4aSxMaSxraSxUaSxPaSxNaSxJaT1UcixSaT1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPURyLkRFRkFVTFQpO3ZhciByPW51bGwsaT1bXSxvPVtdO2Z1bmN0aW9uIGEoZSl7QXJyYXkuaXNBcnJheShpKT9pLnB1c2goZSk6bnVsbCE9PXImJihpW3JdPWUpfXJldHVybiBmdW5jdGlvbihlLHQsbil7dm9pZCAwPT09biYmKG49RHIuREVGQVVMVCk7dmFyIHI9VHIoZSwhMSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZT9mdW5jdGlvbigpe3JldHVybiBlKHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9mdW5jdGlvbih0KXtyZXR1cm4gZSh0LHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19dmFyIGE9aSh0Lm9uT2JqZWN0QmVnaW4pLHM9byh0Lm9uT2JqZWN0UHJvcGVydHkpLGw9aSh0Lm9uT2JqZWN0RW5kKSxjPWkodC5vbkFycmF5QmVnaW4pLHU9aSh0Lm9uQXJyYXlFbmQpLGg9byh0Lm9uTGl0ZXJhbFZhbHVlKSxmPW8odC5vblNlcGFyYXRvciksZD1pKHQub25Db21tZW50KSxtPW8odC5vbkVycm9yKSxnPW4mJm4uZGlzYWxsb3dDb21tZW50cyxwPW4mJm4uYWxsb3dUcmFpbGluZ0NvbW1hO2Z1bmN0aW9uIGIoKXtmb3IoOzspe3ZhciBlPXIuc2NhbigpO3N3aXRjaChyLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OnYoMTQpO2JyZWFrO2Nhc2UgNTp2KDE1KTticmVhaztjYXNlIDM6digxMyk7YnJlYWs7Y2FzZSAxOmd8fHYoMTEpO2JyZWFrO2Nhc2UgMjp2KDEyKTticmVhaztjYXNlIDY6digxNil9c3dpdGNoKGUpe2Nhc2UgMTI6Y2FzZSAxMzpnP3YoMTApOmQoKTticmVhaztjYXNlIDE2OnYoMSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGV9fX1mdW5jdGlvbiB2KGUsdCxuKXtpZih2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLG0oZSksdC5sZW5ndGgrbi5sZW5ndGg+MClmb3IodmFyIGk9ci5nZXRUb2tlbigpOzE3IT09aTspe2lmKC0xIT09dC5pbmRleE9mKGkpKXtiKCk7YnJlYWt9aWYoLTEhPT1uLmluZGV4T2YoaSkpYnJlYWs7aT1iKCl9fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ci5nZXRUb2tlblZhbHVlKCk7cmV0dXJuIGU/aCh0KTpzKHQpLGIoKSwhMH1mdW5jdGlvbiBDKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAxMTp2YXIgZT1yLmdldFRva2VuVmFsdWUoKSx0PU51bWJlcihlKTtpc05hTih0KSYmKHYoMiksdD0wKSxoKHQpO2JyZWFrO2Nhc2UgNzpoKG51bGwpO2JyZWFrO2Nhc2UgODpoKCEwKTticmVhaztjYXNlIDk6aCghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gYigpLCEwfWZ1bmN0aW9uIHcoKXtyZXR1cm4gMTAhPT1yLmdldFRva2VuKCk/KHYoMyxbXSxbMiw1XSksITEpOih5KCExKSw2PT09ci5nZXRUb2tlbigpPyhmKCI6IiksYigpLEEoKXx8dig0LFtdLFsyLDVdKSk6dig1LFtdLFsyLDVdKSwhMCl9ZnVuY3Rpb24gXygpe2EoKSxiKCk7Zm9yKHZhciBlPSExOzIhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8dig0LFtdLFtdKSxmKCIsIiksYigpLDI9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZ2KDYsW10sW10pO3coKXx8dig0LFtdLFsyLDVdKSxlPSEwfXJldHVybiBsKCksMiE9PXIuZ2V0VG9rZW4oKT92KDcsWzJdLFtdKTpiKCksITB9ZnVuY3Rpb24gUygpe2MoKSxiKCk7Zm9yKHZhciBlPSExOzQhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8dig0LFtdLFtdKSxmKCIsIiksYigpLDQ9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZ2KDYsW10sW10pO0EoKXx8dig0LFtdLFs0LDVdKSxlPSEwfXJldHVybiB1KCksNCE9PXIuZ2V0VG9rZW4oKT92KDgsWzRdLFtdKTpiKCksITB9ZnVuY3Rpb24gQSgpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMzpyZXR1cm4gUygpO2Nhc2UgMTpyZXR1cm4gXygpO2Nhc2UgMTA6cmV0dXJuIHkoITApO2RlZmF1bHQ6cmV0dXJuIEMoKX19aWYoYigpLDE3PT09ci5nZXRUb2tlbigpKXJldHVybiEhbi5hbGxvd0VtcHR5Q29udGVudHx8KHYoNCxbXSxbXSksITEpO2lmKCFBKCkpcmV0dXJuIHYoNCxbXSxbXSksITE7MTchPT1yLmdldFRva2VuKCkmJnYoOSxbXSxbXSl9KGUse29uT2JqZWN0QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT17fTthKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbk9iamVjdFByb3BlcnR5OmZ1bmN0aW9uKGUpe3I9ZX0sb25PYmplY3RFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uQXJyYXlCZWdpbjpmdW5jdGlvbigpe3ZhciBlPVtdO2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uQXJyYXlFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uTGl0ZXJhbFZhbHVlOmEsb25FcnJvcjpmdW5jdGlvbihlLG4scil7dC5wdXNoKHtlcnJvcjplLG9mZnNldDpuLGxlbmd0aDpyfSl9fSxuKSxpWzBdfSxQaT1mdW5jdGlvbiBlKHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0hMSksZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH0odCxuLHIpKXt2YXIgaT10LmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmaVtvXS5vZmZzZXQ8PW47bysrKXt2YXIgYT1lKGlbb10sbixyKTtpZihhKXJldHVybiBhfXJldHVybiB0fX0sRmk9ZnVuY3Rpb24gZSh0KXtpZighdC5wYXJlbnR8fCF0LnBhcmVudC5jaGlsZHJlbilyZXR1cm5bXTt2YXIgbj1lKHQucGFyZW50KTtpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIHI9dC5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWU7bi5wdXNoKHIpfWVsc2UgaWYoImFycmF5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBpPXQucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodCk7LTEhPT1pJiZuLnB1c2goaSl9cmV0dXJuIG59LERpPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGUpO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPTAsaT10LmNoaWxkcmVuO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdLGE9by5jaGlsZHJlblsxXTthJiYobltvLmNoaWxkcmVuWzBdLnZhbHVlXT1lKGEpKX1yZXR1cm4gbjtjYXNlIm51bGwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdC52YWx1ZTtkZWZhdWx0OnJldHVybn19O2Z1bmN0aW9uIFZpKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYobnVsbD09ZXx8bnVsbD09dClyZXR1cm4hMTtpZih0eXBlb2YgZSE9dHlwZW9mIHQpcmV0dXJuITE7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoZSkhPT1BcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuLHI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKCFWaShlW25dLHRbbl0pKXJldHVybiExfWVsc2V7dmFyIGk9W107Zm9yKHIgaW4gZSlpLnB1c2gocik7aS5zb3J0KCk7dmFyIG89W107Zm9yKHIgaW4gdClvLnB1c2gocik7aWYoby5zb3J0KCksIVZpKGksbykpcmV0dXJuITE7Zm9yKG49MDtuPGkubGVuZ3RoO24rKylpZighVmkoZVtpW25dXSx0W2lbbl1dKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBLaShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIHZvaWQgMCE9PWV9ZnVuY3Rpb24gQmkoZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX1mdW5jdGlvbiBqaShlLHQpe3ZhciBuPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiBuPjA/ZS5sYXN0SW5kZXhPZih0KT09PW46MD09PW4mJmU9PT10fWZ1bmN0aW9uIHFpKGUpe3ZhciB0PSIiOyhmdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPHQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfSkoZSwiKD9pKSIpJiYoZT1lLnN1YnN0cmluZyg0KSx0PSJpIik7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCsidSIpfWNhdGNoKG4pe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQpfWNhdGNoKGUpe3JldHVybn19fShLcj1Wcnx8KFZyPXt9KSkuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LEtyLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LChCcj1Vcnx8KFVyPXt9KSkuTUlOX1ZBTFVFPTAsQnIuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKHFyPWpyfHwoanI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PU51bWJlci5NQVhfVkFMVUUmJihlPVVyLk1BWF9WQUxVRSksdD09PU51bWJlci5NQVhfVkFMVUUmJih0PVVyLk1BWF9WQUxVRSkse2xpbmU6ZSxjaGFyYWN0ZXI6dH19LHFyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLm9iamVjdExpdGVyYWwodCkmJiRvLnVpbnRlZ2VyKHQubGluZSkmJiRvLnVpbnRlZ2VyKHQuY2hhcmFjdGVyKX0sKFdyPSRyfHwoJHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYoJG8udWludGVnZXIoZSkmJiRvLnVpbnRlZ2VyKHQpJiYkby51aW50ZWdlcihuKSYmJG8udWludGVnZXIocikpcmV0dXJue3N0YXJ0OmpyLmNyZWF0ZShlLHQpLGVuZDpqci5jcmVhdGUobixyKX07aWYoanIuaXMoZSkmJmpyLmlzKHQpKXJldHVybntzdGFydDplLGVuZDp0fTt0aHJvdyBuZXcgRXJyb3IoIlJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1siK2UrIiwgIit0KyIsICIrbisiLCAiK3IrIl0iKX0sV3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8ub2JqZWN0TGl0ZXJhbCh0KSYmanIuaXModC5zdGFydCkmJmpyLmlzKHQuZW5kKX0sKHpyPUhyfHwoSHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUscmFuZ2U6dH19LHpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRyLmlzKHQucmFuZ2UpJiYoJG8uc3RyaW5nKHQudXJpKXx8JG8udW5kZWZpbmVkKHQudXJpKSl9LChKcj1Hcnx8KEdyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt0YXJnZXRVcmk6ZSx0YXJnZXRSYW5nZTp0LHRhcmdldFNlbGVjdGlvblJhbmdlOm4sb3JpZ2luU2VsZWN0aW9uUmFuZ2U6cn19LEpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRyLmlzKHQudGFyZ2V0UmFuZ2UpJiYkby5zdHJpbmcodC50YXJnZXRVcmkpJiYoJHIuaXModC50YXJnZXRTZWxlY3Rpb25SYW5nZSl8fCRvLnVuZGVmaW5lZCh0LnRhcmdldFNlbGVjdGlvblJhbmdlKSkmJigkci5pcyh0Lm9yaWdpblNlbGVjdGlvblJhbmdlKXx8JG8udW5kZWZpbmVkKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX0sKFpyPVhyfHwoWHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3JlZDplLGdyZWVuOnQsYmx1ZTpuLGFscGhhOnJ9fSxaci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5udW1iZXJSYW5nZSh0LnJlZCwwLDEpJiYkby5udW1iZXJSYW5nZSh0LmdyZWVuLDAsMSkmJiRvLm51bWJlclJhbmdlKHQuYmx1ZSwwLDEpJiYkby5udW1iZXJSYW5nZSh0LmFscGhhLDAsMSl9LChRcj1Zcnx8KFlyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsY29sb3I6dH19LFFyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRyLmlzKHQucmFuZ2UpJiZYci5pcyh0LmNvbG9yKX0sKHRpPWVpfHwoZWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntsYWJlbDplLHRleHRFZGl0OnQsYWRkaXRpb25hbFRleHRFZGl0czpufX0sdGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uc3RyaW5nKHQubGFiZWwpJiYoJG8udW5kZWZpbmVkKHQudGV4dEVkaXQpfHxiaS5pcyh0KSkmJigkby51bmRlZmluZWQodC5hZGRpdGlvbmFsVGV4dEVkaXRzKXx8JG8udHlwZWRBcnJheSh0LmFkZGl0aW9uYWxUZXh0RWRpdHMsYmkuaXMpKX0sKHJpPW5pfHwobmk9e30pKS5Db21tZW50PSJjb21tZW50IixyaS5JbXBvcnRzPSJpbXBvcnRzIixyaS5SZWdpb249InJlZ2lvbiIsKG9pPWlpfHwoaWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz17c3RhcnRMaW5lOmUsZW5kTGluZTp0fTtyZXR1cm4gJG8uZGVmaW5lZChuKSYmKG8uc3RhcnRDaGFyYWN0ZXI9biksJG8uZGVmaW5lZChyKSYmKG8uZW5kQ2hhcmFjdGVyPXIpLCRvLmRlZmluZWQoaSkmJihvLmtpbmQ9aSksb30sb2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8udWludGVnZXIodC5zdGFydExpbmUpJiYkby51aW50ZWdlcih0LnN0YXJ0TGluZSkmJigkby51bmRlZmluZWQodC5zdGFydENoYXJhY3Rlcil8fCRvLnVpbnRlZ2VyKHQuc3RhcnRDaGFyYWN0ZXIpKSYmKCRvLnVuZGVmaW5lZCh0LmVuZENoYXJhY3Rlcil8fCRvLnVpbnRlZ2VyKHQuZW5kQ2hhcmFjdGVyKSkmJigkby51bmRlZmluZWQodC5raW5kKXx8JG8uc3RyaW5nKHQua2luZCkpfSwoc2k9YWl8fChhaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsb2NhdGlvbjplLG1lc3NhZ2U6dH19LHNpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJkhyLmlzKHQubG9jYXRpb24pJiYkby5zdHJpbmcodC5tZXNzYWdlKX0sKGNpPWxpfHwobGk9e30pKS5FcnJvcj0xLGNpLldhcm5pbmc9MixjaS5JbmZvcm1hdGlvbj0zLGNpLkhpbnQ9NCwoaGk9dWl8fCh1aT17fSkpLlVubmVjZXNzYXJ5PTEsaGkuRGVwcmVjYXRlZD0yLChmaXx8KGZpPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gbnVsbCE9dCYmJG8uc3RyaW5nKHQuaHJlZil9LChtaT1kaXx8KGRpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT17cmFuZ2U6ZSxtZXNzYWdlOnR9O3JldHVybiAkby5kZWZpbmVkKG4pJiYoYS5zZXZlcml0eT1uKSwkby5kZWZpbmVkKHIpJiYoYS5jb2RlPXIpLCRvLmRlZmluZWQoaSkmJihhLnNvdXJjZT1pKSwkby5kZWZpbmVkKG8pJiYoYS5yZWxhdGVkSW5mb3JtYXRpb249byksYX0sbWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lO3JldHVybiAkby5kZWZpbmVkKG4pJiYkci5pcyhuLnJhbmdlKSYmJG8uc3RyaW5nKG4ubWVzc2FnZSkmJigkby5udW1iZXIobi5zZXZlcml0eSl8fCRvLnVuZGVmaW5lZChuLnNldmVyaXR5KSkmJigkby5pbnRlZ2VyKG4uY29kZSl8fCRvLnN0cmluZyhuLmNvZGUpfHwkby51bmRlZmluZWQobi5jb2RlKSkmJigkby51bmRlZmluZWQobi5jb2RlRGVzY3JpcHRpb24pfHwkby5zdHJpbmcobnVsbD09PSh0PW4uY29kZURlc2NyaXB0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ocmVmKSkmJigkby5zdHJpbmcobi5zb3VyY2UpfHwkby51bmRlZmluZWQobi5zb3VyY2UpKSYmKCRvLnVuZGVmaW5lZChuLnJlbGF0ZWRJbmZvcm1hdGlvbil8fCRvLnR5cGVkQXJyYXkobi5yZWxhdGVkSW5mb3JtYXRpb24sYWkuaXMpKX0sKHBpPWdpfHwoZ2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT17dGl0bGU6ZSxjb21tYW5kOnR9O3JldHVybiAkby5kZWZpbmVkKG4pJiZuLmxlbmd0aD4wJiYoaS5hcmd1bWVudHM9biksaX0scGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uZGVmaW5lZCh0KSYmJG8uc3RyaW5nKHQudGl0bGUpJiYkby5zdHJpbmcodC5jb21tYW5kKX0sKHZpPWJpfHwoYmk9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0fX0sdmkuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnR9fSx2aS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIn19LHZpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLm9iamVjdExpdGVyYWwodCkmJiRvLnN0cmluZyh0Lm5ld1RleHQpJiYkci5pcyh0LnJhbmdlKX0sKENpPXlpfHwoeWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtsYWJlbDplfTtyZXR1cm4gdm9pZCAwIT09dCYmKHIubmVlZHNDb25maXJtYXRpb249dCksdm9pZCAwIT09biYmKHIuZGVzY3JpcHRpb249bikscn0sQ2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdm9pZCAwIT09dCYmJG8ub2JqZWN0TGl0ZXJhbCh0KSYmJG8uc3RyaW5nKHQubGFiZWwpJiYoJG8uYm9vbGVhbih0Lm5lZWRzQ29uZmlybWF0aW9uKXx8dm9pZCAwPT09dC5uZWVkc0NvbmZpcm1hdGlvbikmJigkby5zdHJpbmcodC5kZXNjcmlwdGlvbil8fHZvaWQgMD09PXQuZGVzY3JpcHRpb24pfSwod2l8fCh3aT17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0sKFNpPV9pfHwoX2k9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxTaS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0LGFubm90YXRpb25JZDpufX0sU2kuZGVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6dH19LFNpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGJpLmlzKHQpJiYoeWkuaXModC5hbm5vdGF0aW9uSWQpfHx3aS5pcyh0LmFubm90YXRpb25JZCkpfSwoRWk9QWl8fChBaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0ZXh0RG9jdW1lbnQ6ZSxlZGl0czp0fX0sRWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uZGVmaW5lZCh0KSYmR2kuaXModC50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KHQuZWRpdHMpfSwoeGk9Tml8fChOaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2tpbmQ6ImNyZWF0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10Lm92ZXJ3cml0ZSYmdm9pZCAwPT09dC5pZ25vcmVJZkV4aXN0c3x8KHIub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoci5hbm5vdGF0aW9uSWQ9bikscn0seGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImNyZWF0ZSI9PT10LmtpbmQmJiRvLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHwkby5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8JG8uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8d2kuaXModC5hbm5vdGF0aW9uSWQpKX0sKGtpPUxpfHwoTGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOmUsbmV3VXJpOnR9O3JldHVybiB2b2lkIDA9PT1ufHx2b2lkIDA9PT1uLm92ZXJ3cml0ZSYmdm9pZCAwPT09bi5pZ25vcmVJZkV4aXN0c3x8KGkub3B0aW9ucz1uKSx2b2lkIDAhPT1yJiYoaS5hbm5vdGF0aW9uSWQ9ciksaX0sa2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmInJlbmFtZSI9PT10LmtpbmQmJiRvLnN0cmluZyh0Lm9sZFVyaSkmJiRvLnN0cmluZyh0Lm5ld1VyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHwkby5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8JG8uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8d2kuaXModC5hbm5vdGF0aW9uSWQpKX0sKE9pPVRpfHwoVGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtraW5kOiJkZWxldGUiLHVyaTplfTtyZXR1cm4gdm9pZCAwPT09dHx8dm9pZCAwPT09dC5yZWN1cnNpdmUmJnZvaWQgMD09PXQuaWdub3JlSWZOb3RFeGlzdHN8fChyLm9wdGlvbnM9dCksdm9pZCAwIT09biYmKHIuYW5ub3RhdGlvbklkPW4pLHJ9LE9pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJkZWxldGUiPT09dC5raW5kJiYkby5zdHJpbmcodC51cmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLnJlY3Vyc2l2ZXx8JG8uYm9vbGVhbih0Lm9wdGlvbnMucmVjdXJzaXZlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHN8fCRvLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fHdpLmlzKHQuYW5ub3RhdGlvbklkKSl9LChNaXx8KE1pPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmKHZvaWQgMCE9PXQuY2hhbmdlc3x8dm9pZCAwIT09dC5kb2N1bWVudENoYW5nZXMpJiYodm9pZCAwPT09dC5kb2N1bWVudENoYW5nZXN8fHQuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gJG8uc3RyaW5nKGUua2luZCk/TmkuaXMoZSl8fExpLmlzKGUpfHxUaS5pcyhlKTpBaS5pcyhlKX0pKSl9O3ZhciAkaSxXaSxIaSx6aSxHaSxKaSxYaSxaaSxZaSxRaSxlbyx0byxubyxybyxpbyxvbyxhbyxzbyxsbyxjbyx1byxobyxmbyxtbyxnbyxwbyxibyx2byx5byxDbyx3byxfbyxTbyxBbyxFbyxObyx4byxMbyxrbyxUbyxPbyxNbyxJbyxSbyxQbyxGbyxEbyxWbyxLbyxVbyxCbyxqbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVkaXRzPWUsdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucz10fXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPWJpLmluc2VydChlLHQpOndpLmlzKG4pPyhpPW4scj1faS5pbnNlcnQoZSx0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxpPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHI9X2kuaW5zZXJ0KGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPWJpLnJlcGxhY2UoZSx0KTp3aS5pcyhuKT8oaT1uLHI9X2kucmVwbGFjZShlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj1faS5yZXBsYWNlKGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYodm9pZCAwPT09dD9uPWJpLmRlbChlKTp3aS5pcyh0KT8ocj10LG49X2kuZGVsKGUsdCkpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UodCksbj1faS5kZWwoZSxyKSksdGhpcy5lZGl0cy5wdXNoKG4pLHZvaWQgMCE9PXIpcmV0dXJuIHJ9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmVkaXRzLnB1c2goZSl9LGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZWRpdHMuc3BsaWNlKDAsdGhpcy5lZGl0cy5sZW5ndGgpfSxlLnByb3RvdHlwZS5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLiIpfSxlfSgpLHFvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9hbm5vdGF0aW9ucz12b2lkIDA9PT1lP09iamVjdC5jcmVhdGUobnVsbCk6ZSx0aGlzLl9jb3VudGVyPTAsdGhpcy5fc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm1hbmFnZT1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHdpLmlzKGUpP249ZToobj10aGlzLm5leHRJZCgpLHQ9ZSksdm9pZCAwIT09dGhpcy5fYW5ub3RhdGlvbnNbbl0pdGhyb3cgbmV3IEVycm9yKCJJZCAiK24rIiBpcyBhbHJlYWR5IGluIHVzZS4iKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgIituKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnNbbl09dCx0aGlzLl9zaXplKyssbn0sZS5wcm90b3R5cGUubmV4dElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvdW50ZXIrKyx0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCl9LGV9KCk7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuX3RleHRFZGl0Q2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpLHZvaWQgMCE9PWU/KHRoaXMuX3dvcmtzcGFjZUVkaXQ9ZSxlLmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IHFvKGUuY2hhbmdlQW5ub3RhdGlvbnMpLGUuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksZS5kb2N1bWVudENoYW5nZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoQWkuaXMoZSkpe3ZhciBuPW5ldyBqbyhlLmVkaXRzLHQuX2NoYW5nZUFubm90YXRpb25zKTt0Ll90ZXh0RWRpdENoYW5nZXNbZS50ZXh0RG9jdW1lbnQudXJpXT1ufX0pKSk6ZS5jaGFuZ2VzJiZPYmplY3Qua2V5cyhlLmNoYW5nZXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBqbyhlLmNoYW5nZXNbbl0pO3QuX3RleHRFZGl0Q2hhbmdlc1tuXT1yfSkpKTp0aGlzLl93b3Jrc3BhY2VFZGl0PXt9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWRpdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDAhPT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyYmKDA9PT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5zaXplP3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dm9pZCAwOnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpLHRoaXMuX3dvcmtzcGFjZUVkaXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYoR2kuaXMoZSkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHQ9e3VyaTplLnVyaSx2ZXJzaW9uOmUudmVyc2lvbn07aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV0pKXt2YXIgbj17dGV4dERvY3VtZW50OnQsZWRpdHM6aT1bXX07dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChuKSxyPW5ldyBqbyhpLHRoaXMuX2NoYW5nZUFubm90YXRpb25zKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbdC51cmldPXJ9cmV0dXJuIHJ9aWYodGhpcy5pbml0Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBub3JtYWwgdGV4dCBlZGl0IGNoYW5nZXMuIik7dmFyIHI7aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXSkpe3ZhciBpPVtdO3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1tlXT1pLHI9bmV3IGpvKGkpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXT1yfXJldHVybiByfSxlLnByb3RvdHlwZS5pbml0RG9jdW1lbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMmJnZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBxbyx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz1bXSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKX0sZS5wcm90b3R5cGUuaW5pdENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCkpfSxlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGksbztpZih5aS5pcyh0KXx8d2kuaXModCk/cj10Om49dCx2b2lkIDA9PT1yP2k9TmkuY3JlYXRlKGUsbik6KG89d2kuaXMocik/cjp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1OaS5jcmVhdGUoZSxuLG8pKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKGkpLHZvaWQgMCE9PW8pcmV0dXJuIG99LGUucHJvdG90eXBlLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgaSxvLGE7aWYoeWkuaXMobil8fHdpLmlzKG4pP2k9bjpyPW4sdm9pZCAwPT09aT9vPUxpLmNyZWF0ZShlLHQscik6KGE9d2kuaXMoaSk/aTp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoaSksbz1MaS5jcmVhdGUoZSx0LHIsYSkpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gobyksdm9pZCAwIT09YSlyZXR1cm4gYX0sZS5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcixpLG87aWYoeWkuaXModCl8fHdpLmlzKHQpP3I9dDpuPXQsdm9pZCAwPT09cj9pPVRpLmNyZWF0ZShlLG4pOihvPXdpLmlzKHIpP3I6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9VGkuY3JlYXRlKGUsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChpKSx2b2lkIDAhPT1vKXJldHVybiBvfX0oKSwoV2k9JGl8fCgkaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57dXJpOmV9fSxXaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5kZWZpbmVkKHQpJiYkby5zdHJpbmcodC51cmkpfSwoemk9SGl8fChIaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSx6aS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5kZWZpbmVkKHQpJiYkby5zdHJpbmcodC51cmkpJiYkby5pbnRlZ2VyKHQudmVyc2lvbil9LChKaT1HaXx8KEdpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LEppLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRvLnN0cmluZyh0LnVyaSkmJihudWxsPT09dC52ZXJzaW9ufHwkby5pbnRlZ2VyKHQudmVyc2lvbikpfSwoWmk9WGl8fChYaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57dXJpOmUsbGFuZ3VhZ2VJZDp0LHZlcnNpb246bix0ZXh0OnJ9fSxaaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5kZWZpbmVkKHQpJiYkby5zdHJpbmcodC51cmkpJiYkby5zdHJpbmcodC5sYW5ndWFnZUlkKSYmJG8uaW50ZWdlcih0LnZlcnNpb24pJiYkby5zdHJpbmcodC50ZXh0KX0sKFFpPVlpfHwoWWk9e30pKS5QbGFpblRleHQ9InBsYWludGV4dCIsUWkuTWFya2Rvd249Im1hcmtkb3duIixmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKHQpe3ZhciBuPXQ7cmV0dXJuIG49PT1lLlBsYWluVGV4dHx8bj09PWUuTWFya2Rvd259fShZaXx8KFlpPXt9KSksKGVvfHwoZW89e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5vYmplY3RMaXRlcmFsKGUpJiZZaS5pcyh0LmtpbmQpJiYkby5zdHJpbmcodC52YWx1ZSl9LChubz10b3x8KHRvPXt9KSkuVGV4dD0xLG5vLk1ldGhvZD0yLG5vLkZ1bmN0aW9uPTMsbm8uQ29uc3RydWN0b3I9NCxuby5GaWVsZD01LG5vLlZhcmlhYmxlPTYsbm8uQ2xhc3M9Nyxuby5JbnRlcmZhY2U9OCxuby5Nb2R1bGU9OSxuby5Qcm9wZXJ0eT0xMCxuby5Vbml0PTExLG5vLlZhbHVlPTEyLG5vLkVudW09MTMsbm8uS2V5d29yZD0xNCxuby5TbmlwcGV0PTE1LG5vLkNvbG9yPTE2LG5vLkZpbGU9MTcsbm8uUmVmZXJlbmNlPTE4LG5vLkZvbGRlcj0xOSxuby5FbnVtTWVtYmVyPTIwLG5vLkNvbnN0YW50PTIxLG5vLlN0cnVjdD0yMixuby5FdmVudD0yMyxuby5PcGVyYXRvcj0yNCxuby5UeXBlUGFyYW1ldGVyPTI1LChpbz1yb3x8KHJvPXt9KSkuUGxhaW5UZXh0PTEsaW8uU25pcHBldD0yLChvb3x8KG9vPXt9KSkuRGVwcmVjYXRlZD0xLChzbz1hb3x8KGFvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57bmV3VGV4dDplLGluc2VydDp0LHJlcGxhY2U6bn19LHNvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiRvLnN0cmluZyh0Lm5ld1RleHQpJiYkci5pcyh0Lmluc2VydCkmJiRyLmlzKHQucmVwbGFjZSl9LChjbz1sb3x8KGxvPXt9KSkuYXNJcz0xLGNvLmFkanVzdEluZGVudGF0aW9uPTIsKHVvfHwodW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJue2xhYmVsOmV9fSwoaG98fChobz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntpdGVtczplfHxbXSxpc0luY29tcGxldGU6ISF0fX0sKG1vPWZvfHwoZm89e30pKS5mcm9tUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX0sbW8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uc3RyaW5nKHQpfHwkby5vYmplY3RMaXRlcmFsKHQpJiYkby5zdHJpbmcodC5sYW5ndWFnZSkmJiRvLnN0cmluZyh0LnZhbHVlKX0sKGdvfHwoZ289e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhdCYmJG8ub2JqZWN0TGl0ZXJhbCh0KSYmKGVvLmlzKHQuY29udGVudHMpfHxmby5pcyh0LmNvbnRlbnRzKXx8JG8udHlwZWRBcnJheSh0LmNvbnRlbnRzLGZvLmlzKSkmJih2b2lkIDA9PT1lLnJhbmdlfHwkci5pcyhlLnJhbmdlKSl9LChwb3x8KHBvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/e2xhYmVsOmUsZG9jdW1lbnRhdGlvbjp0fTp7bGFiZWw6ZX19LChib3x8KGJvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dmFyIGk9e2xhYmVsOmV9O3JldHVybiAkby5kZWZpbmVkKHQpJiYoaS5kb2N1bWVudGF0aW9uPXQpLCRvLmRlZmluZWQobik/aS5wYXJhbWV0ZXJzPW46aS5wYXJhbWV0ZXJzPVtdLGl9LCh5bz12b3x8KHZvPXt9KSkuVGV4dD0xLHlvLlJlYWQ9Mix5by5Xcml0ZT0zLChDb3x8KENvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiAkby5udW1iZXIodCkmJihuLmtpbmQ9dCksbn0sKF9vPXdvfHwod289e30pKS5GaWxlPTEsX28uTW9kdWxlPTIsX28uTmFtZXNwYWNlPTMsX28uUGFja2FnZT00LF9vLkNsYXNzPTUsX28uTWV0aG9kPTYsX28uUHJvcGVydHk9Nyxfby5GaWVsZD04LF9vLkNvbnN0cnVjdG9yPTksX28uRW51bT0xMCxfby5JbnRlcmZhY2U9MTEsX28uRnVuY3Rpb249MTIsX28uVmFyaWFibGU9MTMsX28uQ29uc3RhbnQ9MTQsX28uU3RyaW5nPTE1LF9vLk51bWJlcj0xNixfby5Cb29sZWFuPTE3LF9vLkFycmF5PTE4LF9vLk9iamVjdD0xOSxfby5LZXk9MjAsX28uTnVsbD0yMSxfby5FbnVtTWVtYmVyPTIyLF9vLlN0cnVjdD0yMyxfby5FdmVudD0yNCxfby5PcGVyYXRvcj0yNSxfby5UeXBlUGFyYW1ldGVyPTI2LChTb3x8KFNvPXt9KSkuRGVwcmVjYXRlZD0xLChBb3x8KEFvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89e25hbWU6ZSxraW5kOnQsbG9jYXRpb246e3VyaTpyLHJhbmdlOm59fTtyZXR1cm4gaSYmKG8uY29udGFpbmVyTmFtZT1pKSxvfSwoTm89RW98fChFbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9e25hbWU6ZSxkZXRhaWw6dCxraW5kOm4scmFuZ2U6cixzZWxlY3Rpb25SYW5nZTppfTtyZXR1cm4gdm9pZCAwIT09byYmKGEuY2hpbGRyZW49byksYX0sTm8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmJG8uc3RyaW5nKHQubmFtZSkmJiRvLm51bWJlcih0LmtpbmQpJiYkci5pcyh0LnJhbmdlKSYmJHIuaXModC5zZWxlY3Rpb25SYW5nZSkmJih2b2lkIDA9PT10LmRldGFpbHx8JG8uc3RyaW5nKHQuZGV0YWlsKSkmJih2b2lkIDA9PT10LmRlcHJlY2F0ZWR8fCRvLmJvb2xlYW4odC5kZXByZWNhdGVkKSkmJih2b2lkIDA9PT10LmNoaWxkcmVufHxBcnJheS5pc0FycmF5KHQuY2hpbGRyZW4pKSYmKHZvaWQgMD09PXQudGFnc3x8QXJyYXkuaXNBcnJheSh0LnRhZ3MpKX0sKExvPXhvfHwoeG89e30pKS5FbXB0eT0iIixMby5RdWlja0ZpeD0icXVpY2tmaXgiLExvLlJlZmFjdG9yPSJyZWZhY3RvciIsTG8uUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0IixMby5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixMby5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLExvLlNvdXJjZT0ic291cmNlIixMby5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLExvLlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCIsKFRvPWtvfHwoa289e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17ZGlhZ25vc3RpY3M6ZX07cmV0dXJuIG51bGwhPXQmJihuLm9ubHk9dCksbn0sVG8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uZGVmaW5lZCh0KSYmJG8udHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLGRpLmlzKSYmKHZvaWQgMD09PXQub25seXx8JG8udHlwZWRBcnJheSh0Lm9ubHksJG8uc3RyaW5nKSl9LChNbz1Pb3x8KE9vPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17dGl0bGU6ZX0saT0hMDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGk9ITEsci5raW5kPXQpOmdpLmlzKHQpP3IuY29tbWFuZD10OnIuZWRpdD10LGkmJnZvaWQgMCE9PW4mJihyLmtpbmQ9bikscn0sTW8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmJG8uc3RyaW5nKHQudGl0bGUpJiYodm9pZCAwPT09dC5kaWFnbm9zdGljc3x8JG8udHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLGRpLmlzKSkmJih2b2lkIDA9PT10LmtpbmR8fCRvLnN0cmluZyh0LmtpbmQpKSYmKHZvaWQgMCE9PXQuZWRpdHx8dm9pZCAwIT09dC5jb21tYW5kKSYmKHZvaWQgMD09PXQuY29tbWFuZHx8Z2kuaXModC5jb21tYW5kKSkmJih2b2lkIDA9PT10LmlzUHJlZmVycmVkfHwkby5ib29sZWFuKHQuaXNQcmVmZXJyZWQpKSYmKHZvaWQgMD09PXQuZWRpdHx8TWkuaXModC5lZGl0KSl9LChSbz1Jb3x8KElvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiAkby5kZWZpbmVkKHQpJiYobi5kYXRhPXQpLG59LFJvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRyLmlzKHQucmFuZ2UpJiYoJG8udW5kZWZpbmVkKHQuY29tbWFuZCl8fGdpLmlzKHQuY29tbWFuZCkpfSwoRm89UG98fChQbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0YWJTaXplOmUsaW5zZXJ0U3BhY2VzOnR9fSxGby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5kZWZpbmVkKHQpJiYkby51aW50ZWdlcih0LnRhYlNpemUpJiYkby5ib29sZWFuKHQuaW5zZXJ0U3BhY2VzKX0sKFZvPURvfHwoRG89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLHRhcmdldDp0LGRhdGE6bn19LFZvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRyLmlzKHQucmFuZ2UpJiYoJG8udW5kZWZpbmVkKHQudGFyZ2V0KXx8JG8uc3RyaW5nKHQudGFyZ2V0KSl9LChVbz1Lb3x8KEtvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUscGFyZW50OnR9fSxVby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiYkci5pcyh0LnJhbmdlKSYmKHZvaWQgMD09PXQucGFyZW50fHxVby5pcyh0LnBhcmVudCkpfSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7dmFyIHI9ZS5sZW5ndGgvMnwwLGk9ZS5zbGljZSgwLHIpLG89ZS5zbGljZShyKTt0KGksbiksdChvLG4pO2Zvcih2YXIgYT0wLHM9MCxsPTA7YTxpLmxlbmd0aCYmczxvLmxlbmd0aDspe3ZhciBjPW4oaVthXSxvW3NdKTtlW2wrK109Yzw9MD9pW2ErK106b1tzKytdfWZvcig7YTxpLmxlbmd0aDspZVtsKytdPWlbYSsrXTtmb3IoO3M8by5sZW5ndGg7KWVbbCsrXT1vW3MrK107cmV0dXJuIGV9ZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyB6byhlLHQsbixyKX0sZS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhKCRvLmRlZmluZWQodCkmJiRvLnN0cmluZyh0LnVyaSkmJigkby51bmRlZmluZWQodC5sYW5ndWFnZUlkKXx8JG8uc3RyaW5nKHQubGFuZ3VhZ2VJZCkpJiYkby51aW50ZWdlcih0LmxpbmVDb3VudCkmJiRvLmZ1bmModC5nZXRUZXh0KSYmJG8uZnVuYyh0LnBvc2l0aW9uQXQpJiYkby5mdW5jKHQub2Zmc2V0QXQpKX0sZS5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciByPWUuZ2V0VGV4dCgpLGk9dChuLChmdW5jdGlvbihlLHQpe3ZhciBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSksbz1yLmxlbmd0aCxhPWkubGVuZ3RoLTE7YT49MDthLS0pe3ZhciBzPWlbYV0sbD1lLm9mZnNldEF0KHMucmFuZ2Uuc3RhcnQpLGM9ZS5vZmZzZXRBdChzLnJhbmdlLmVuZCk7aWYoIShjPD1vKSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtyPXIuc3Vic3RyaW5nKDAsbCkrcy5uZXdUZXh0K3Iuc3Vic3RyaW5nKGMsci5sZW5ndGgpLG89bH1yZXR1cm4gcn19KEJvfHwoQm89e30pKTt2YXIgJG8sV28sSG8sem89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ1cmkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVyc2lvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzKXtmb3IodmFyIGU9W10sdD10aGlzLl9jb250ZW50LG49ITAscj0wO3I8dC5sZW5ndGg7cisrKXtuJiYoZS5wdXNoKHIpLG49ITEpO3ZhciBpPXQuY2hhckF0KHIpO249IlxyIj09PWl8fCJcbiI9PT1pLCJcciI9PT1pJiZyKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChyKzEpJiZyKyt9biYmdC5sZW5ndGg+MCYmZS5wdXNoKHQubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c30sZS5wcm90b3R5cGUucG9zaXRpb25BdD1mdW5jdGlvbihlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm4ganIuY3JlYXRlKDAsZSk7Zm9yKDtuPHI7KXt2YXIgaT1NYXRoLmZsb29yKChuK3IpLzIpO3RbaV0+ZT9yPWk6bj1pKzF9dmFyIG89bi0xO3JldHVybiBqci5jcmVhdGUobyxlLXRbb10pfSxlLnByb3RvdHlwZS5vZmZzZXRBdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7dmFyIG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGluZUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oKTtXbz0kb3x8KCRvPXt9KSxIbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFdvLmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9LFdvLnVuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZX0sV28uYm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZX0sV28uc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09SG8uY2FsbChlKX0sV28ubnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09SG8uY2FsbChlKX0sV28ubnVtYmVyUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09SG8uY2FsbChlKSYmdDw9ZSYmZTw9bn0sV28uaW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PUhvLmNhbGwoZSkmJi0yMTQ3NDgzNjQ4PD1lJiZlPD0yMTQ3NDgzNjQ3fSxXby51aW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PUhvLmNhbGwoZSkmJjA8PWUmJmU8PTIxNDc0ODM2NDd9LFdvLmZ1bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUhvLmNhbGwoZSl9LFdvLm9iamVjdExpdGVyYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9LFdvLnR5cGVkQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSh0KX07dmFyIEdvLEpvLFhvLFpvLFlvLFFvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtjb25zdCB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSx0KXtmb3IobGV0IHQgb2YgZSlpZihRby5pc0luY3JlbWVudGFsKHQpKXtjb25zdCBlPW5hKHQucmFuZ2UpLG49dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxuKSt0LnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcocix0aGlzLl9jb250ZW50Lmxlbmd0aCk7Y29uc3QgaT1NYXRoLm1heChlLnN0YXJ0LmxpbmUsMCksbz1NYXRoLm1heChlLmVuZC5saW5lLDApO2xldCBhPXRoaXMuX2xpbmVPZmZzZXRzO2NvbnN0IHM9dGEodC50ZXh0LCExLG4pO2lmKG8taT09PXMubGVuZ3RoKWZvcihsZXQgZT0wLHQ9cy5sZW5ndGg7ZTx0O2UrKylhW2UraSsxXT1zW2VdO2Vsc2Ugcy5sZW5ndGg8MWU0P2Euc3BsaWNlKGkrMSxvLWksLi4ucyk6dGhpcy5fbGluZU9mZnNldHM9YT1hLnNsaWNlKDAsaSsxKS5jb25jYXQocyxhLnNsaWNlKG8rMSkpO2NvbnN0IGw9dC50ZXh0Lmxlbmd0aC0oci1uKTtpZigwIT09bClmb3IobGV0IGU9aSsxK3MubGVuZ3RoLHQ9YS5sZW5ndGg7ZTx0O2UrKylhW2VdPWFbZV0rbH1lbHNle2lmKCFRby5pc0Z1bGwodCkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCIpO3RoaXMuX2NvbnRlbnQ9dC50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH10aGlzLl92ZXJzaW9uPXR9Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMmJih0aGlzLl9saW5lT2Zmc2V0cz10YSh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm57bGluZTowLGNoYXJhY3RlcjplfTtmb3IoO248cjspe2xldCBpPU1hdGguZmxvb3IoKG4rcikvMik7dFtpXT5lP3I9aTpuPWkrMX1sZXQgaT1uLTE7cmV0dXJue2xpbmU6aSxjaGFyYWN0ZXI6ZS10W2ldfX1vZmZzZXRBdChlKXtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDAhPT10LnJhbmdlJiYodm9pZCAwPT09dC5yYW5nZUxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiB0LnJhbmdlTGVuZ3RoKX1zdGF0aWMgaXNGdWxsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDA9PT10LnJhbmdlJiZ2b2lkIDA9PT10LnJhbmdlTGVuZ3RofX07ZnVuY3Rpb24gZWEoZSx0KXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCBuPWUubGVuZ3RoLzJ8MCxyPWUuc2xpY2UoMCxuKSxpPWUuc2xpY2Uobik7ZWEocix0KSxlYShpLHQpO2xldCBvPTAsYT0wLHM9MDtmb3IoO288ci5sZW5ndGgmJmE8aS5sZW5ndGg7KXtsZXQgbj10KHJbb10saVthXSk7ZVtzKytdPW48PTA/cltvKytdOmlbYSsrXX1mb3IoO288ci5sZW5ndGg7KWVbcysrXT1yW28rK107Zm9yKDthPGkubGVuZ3RoOyllW3MrK109aVthKytdO3JldHVybiBlfWZ1bmN0aW9uIHRhKGUsdCxuPTApe2NvbnN0IHI9dD9bbl06W107Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBpPWUuY2hhckNvZGVBdCh0KTsxMyE9PWkmJjEwIT09aXx8KDEzPT09aSYmdCsxPGUubGVuZ3RoJiYxMD09PWUuY2hhckNvZGVBdCh0KzEpJiZ0Kyssci5wdXNoKG4rdCsxKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbmEoZSl7Y29uc3QgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIHQubGluZT5uLmxpbmV8fHQubGluZT09PW4ubGluZSYmdC5jaGFyYWN0ZXI+bi5jaGFyYWN0ZXI/e3N0YXJ0Om4sZW5kOnR9OmV9ZnVuY3Rpb24gcmEoZSl7Y29uc3QgdD1uYShlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9ZnVuY3Rpb24gaWEoZSx0LC4uLm4pe3JldHVybiBmdW5jdGlvbihlLHQpe2xldCBuO3JldHVybiBuPTA9PT10Lmxlbmd0aD9lOmUucmVwbGFjZSgvXHsoXGQrKVx9L2csKChlLG4pPT57bGV0IHI9blswXTtyZXR1cm4gdm9pZCAwIT09dFtyXT90W3JdOmV9KSksbn0odCxuKX1mdW5jdGlvbiBvYShlKXtyZXR1cm4gaWF9KEpvPUdvfHwoR289e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBRbyhlLHQsbixyKX0sSm8udXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2YgUW8pcmV0dXJuIGUudXBkYXRlKHQsbiksZTt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9LEpvLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmdldFRleHQoKSxyPWVhKHQubWFwKHJhKSwoKGUsdCk9PntsZXQgbj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT09bj9lLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci10LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpufSkpLGk9MDtjb25zdCBvPVtdO2Zvcihjb25zdCB0IG9mIHIpe2xldCByPWUub2Zmc2V0QXQodC5yYW5nZS5zdGFydCk7aWYocjxpKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3I+aSYmby5wdXNoKG4uc3Vic3RyaW5nKGkscikpLHQubmV3VGV4dC5sZW5ndGgmJm8ucHVzaCh0Lm5ld1RleHQpLGk9ZS5vZmZzZXRBdCh0LnJhbmdlLmVuZCl9cmV0dXJuIG8ucHVzaChuLnN1YnN0cihpKSksby5qb2luKCIiKX0sKFpvPVhvfHwoWG89e30pKVtaby5VbmRlZmluZWQ9MF09IlVuZGVmaW5lZCIsWm9bWm8uRW51bVZhbHVlTWlzbWF0Y2g9MV09IkVudW1WYWx1ZU1pc21hdGNoIixab1taby5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIixab1taby5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTI1N109IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLFpvW1pvLlVuZXhwZWN0ZWRFbmRPZlN0cmluZz0yNThdPSJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLFpvW1pvLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0yNTldPSJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLFpvW1pvLkludmFsaWRVbmljb2RlPTI2MF09IkludmFsaWRVbmljb2RlIixab1taby5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyPTI2MV09IkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLFpvW1pvLkludmFsaWRDaGFyYWN0ZXI9MjYyXT0iSW52YWxpZENoYXJhY3RlciIsWm9bWm8uUHJvcGVydHlFeHBlY3RlZD01MTNdPSJQcm9wZXJ0eUV4cGVjdGVkIixab1taby5Db21tYUV4cGVjdGVkPTUxNF09IkNvbW1hRXhwZWN0ZWQiLFpvW1pvLkNvbG9uRXhwZWN0ZWQ9NTE1XT0iQ29sb25FeHBlY3RlZCIsWm9bWm8uVmFsdWVFeHBlY3RlZD01MTZdPSJWYWx1ZUV4cGVjdGVkIixab1taby5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZD01MTddPSJDb21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCIsWm9bWm8uQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZD01MThdPSJDb21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkIixab1taby5UcmFpbGluZ0NvbW1hPTUxOV09IlRyYWlsaW5nQ29tbWEiLFpvW1pvLkR1cGxpY2F0ZUtleT01MjBdPSJEdXBsaWNhdGVLZXkiLFpvW1pvLkNvbW1lbnROb3RQZXJtaXR0ZWQ9NTIxXT0iQ29tbWVudE5vdFBlcm1pdHRlZCIsWm9bWm8uU2NoZW1hUmVzb2x2ZUVycm9yPTc2OF09IlNjaGVtYVJlc29sdmVFcnJvciIsKFlvfHwoWW89e30pKS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W1lpLk1hcmtkb3duLFlpLlBsYWluVGV4dF0sY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ6ITB9fX19O3ZhciBhYSxzYSxsYSxjYT0oYWE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oYWE9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWFhKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksdWE9b2EoKSxoYT17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTp1YSgiY29sb3JIZXhGb3JtYXRXYXJuaW5nIiwiSW52YWxpZCBjb2xvciBmb3JtYXQuIFVzZSAjUkdCLCAjUkdCQSwgI1JSR0dCQiBvciAjUlJHR0JCQUEuIikscGF0dGVybjovXiMoWzAtOUEtRmEtZl17Myw0fXwoWzAtOUEtRmEtZl17Mn0pezMsNH0pJC99LCJkYXRlLXRpbWUiOntlcnJvck1lc3NhZ2U6dWEoImRhdGVUaW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOnVhKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOnVhKCJ0aW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTp1YSgiZW1haWxGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6dWEoImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTp1YSgiaXB2NEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjQgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZClcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSQvfSxpcHY2OntlcnJvck1lc3NhZ2U6dWEoImlwdjZGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY2IGFkZHJlc3MuIikscGF0dGVybjovXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSQvaX19LGZhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09biYmKG49MCksdGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1uLHRoaXMucGFyZW50PWV9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9LGV9KCksZGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ibnVsbCIsci52YWx1ZT1udWxsLHJ9cmV0dXJuIGNhKHQsZSksdH0oZmEpLG1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQscil8fHRoaXM7cmV0dXJuIGkudHlwZT0iYm9vbGVhbiIsaS52YWx1ZT1uLGl9cmV0dXJuIGNhKHQsZSksdH0oZmEpLGdhPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9ImFycmF5IixyLml0ZW1zPVtdLHJ9cmV0dXJuIGNhKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KGZhKSxwYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJudW1iZXIiLHIuaXNJbnRlZ2VyPSEwLHIudmFsdWU9TnVtYmVyLk5hTixyfXJldHVybiBjYSh0LGUpLHR9KGZhKSxiYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LG4scil8fHRoaXM7cmV0dXJuIGkudHlwZT0ic3RyaW5nIixpLnZhbHVlPSIiLGl9cmV0dXJuIGNhKHQsZSksdH0oZmEpLHZhPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIGkudHlwZT0icHJvcGVydHkiLGkuY29sb25PZmZzZXQ9LTEsaS5rZXlOb2RlPXIsaX1yZXR1cm4gY2EodCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KGZhKSx5YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJvYmplY3QiLHIucHJvcGVydGllcz1bXSxyfXJldHVybiBjYSh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wZXJ0aWVzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KGZhKTtmdW5jdGlvbiBDYShlKXtyZXR1cm4gQmkoZSk/ZT97fTp7bm90Ont9fTplfShsYT1zYXx8KHNhPXt9KSlbbGEuS2V5PTBdPSJLZXkiLGxhW2xhLkVudW09MV09IkVudW0iO3ZhciB3YT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT0tMSksdGhpcy5mb2N1c09mZnNldD1lLHRoaXMuZXhjbHVkZT10LHRoaXMuc2NoZW1hcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2NoZW1hcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnNjaGVtYXMsZS5zY2hlbWFzKX0sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4oLTE9PT10aGlzLmZvY3VzT2Zmc2V0fHxOYShlLHRoaXMuZm9jdXNPZmZzZXQpKSYmZSE9PXRoaXMuZXhjbHVkZX0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKC0xLHRoaXMuZXhjbHVkZSl9LGV9KCksX2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNjaGVtYXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmluc3RhbmNlPW5ldyBlLGV9KCksU2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LGUucHJvdG90eXBlLm1lcmdlQWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZTt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLm1lcmdlKHIpfX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdChlLnByb2JsZW1zKX0sZS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhZS5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZlLmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KGUuZW51bVZhbHVlcyk7Zm9yKHZhciB0PTAsbj10aGlzLnByb2JsZW1zO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3IuY29kZT09PVhvLkVudW1WYWx1ZU1pc21hdGNoJiYoci5tZXNzYWdlPXVhKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0aGlzLmVudW1WYWx1ZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSkpfX19LGUucHJvdG90eXBlLm1lcmdlUHJvcGVydHlNYXRjaD1mdW5jdGlvbihlKXt0aGlzLm1lcmdlKGUpLHRoaXMucHJvcGVydGllc01hdGNoZXMrKywoZS5lbnVtVmFsdWVNYXRjaHx8IWUuaGFzUHJvYmxlbXMoKSYmZS5wcm9wZXJ0aWVzTWF0Y2hlcykmJnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrLGUuZW51bVZhbHVlTWF0Y2gmJmUuZW51bVZhbHVlcyYmMT09PWUuZW51bVZhbHVlcy5sZW5ndGgmJnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcysrfSxlLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzUHJvYmxlbXMoKTtyZXR1cm4gdCE9PWUuaGFzUHJvYmxlbXMoKT90Py0xOjE6dGhpcy5lbnVtVmFsdWVNYXRjaCE9PWUuZW51bVZhbHVlTWF0Y2g/ZS5lbnVtVmFsdWVNYXRjaD8tMToxOnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcyE9PWUucHJpbWFyeVZhbHVlTWF0Y2hlcz90aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMtZS5wcmltYXJ5VmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyE9PWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz90aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMtZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc01hdGNoZXMtZS5wcm9wZXJ0aWVzTWF0Y2hlc30sZX0oKTtmdW5jdGlvbiBBYShlKXtyZXR1cm4gRGkoZSl9ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIEZpKGUpfWZ1bmN0aW9uIE5hKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9dmFyIHhhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVtdKSx0aGlzLnJvb3Q9ZSx0aGlzLnN5bnRheEVycm9ycz10LHRoaXMuY29tbWVudHM9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD0hMSksdGhpcy5yb290KXJldHVybiBQaSh0aGlzLnJvb3QsZSx0KX0sZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5yb290KXt2YXIgdD1mdW5jdGlvbihuKXt2YXIgcj1lKG4pLGk9bi5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wO288aS5sZW5ndGgmJnI7bysrKXI9dChpW29dKTtyZXR1cm4gcn07dCh0aGlzLnJvb3QpfX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PW4mJihuPWxpLldhcm5pbmcpLHRoaXMucm9vdCYmdCl7dmFyIHI9bmV3IFNhO3JldHVybiBMYSh0aGlzLnJvb3QsdCxyLF9hLmluc3RhbmNlKSxyLnByb2JsZW1zLm1hcCgoZnVuY3Rpb24odCl7dmFyIHIsaT0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQubG9jYXRpb24ub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5sb2NhdGlvbi5vZmZzZXQrdC5sb2NhdGlvbi5sZW5ndGgpKTtyZXR1cm4gZGkuY3JlYXRlKGksdC5tZXNzYWdlLG51bGwhPT0ocj10LnNldmVyaXR5KSYmdm9pZCAwIT09cj9yOm4sdC5jb2RlKX0pKX19LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciByPW5ldyB3YSh0LG4pO3JldHVybiB0aGlzLnJvb3QmJmUmJkxhKHRoaXMucm9vdCxlLG5ldyBTYSxyKSxyLnNjaGVtYXN9LGV9KCk7ZnVuY3Rpb24gTGEoZSx0LG4scil7aWYoZSYmci5pbmNsdWRlKGUpKXt2YXIgaT1lO3N3aXRjaChpLnR5cGUpe2Nhc2Uib2JqZWN0IjohZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPU9iamVjdC5jcmVhdGUobnVsbCksbz1bXSxhPTAscz1lLnByb3BlcnRpZXM7YTxzLmxlbmd0aDthKyspe2lbSz0ocD1zW2FdKS5rZXlOb2RlLnZhbHVlXT1wLnZhbHVlTm9kZSxvLnB1c2goSyl9aWYoQXJyYXkuaXNBcnJheSh0LnJlcXVpcmVkKSlmb3IodmFyIGw9MCxjPXQucmVxdWlyZWQ7bDxjLmxlbmd0aDtsKyspe2lmKCFpW1M9Y1tsXV0pe3ZhciB1PWUucGFyZW50JiYicHJvcGVydHkiPT09ZS5wYXJlbnQudHlwZSYmZS5wYXJlbnQua2V5Tm9kZSxoPXU/e29mZnNldDp1Lm9mZnNldCxsZW5ndGg6dS5sZW5ndGh9OntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOjF9O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246aCxtZXNzYWdlOnVhKCJNaXNzaW5nUmVxdWlyZWRQcm9wV2FybmluZyIsJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyxTKX0pfX12YXIgZj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9by5pbmRleE9mKGUpO3Q+PTA7KW8uc3BsaWNlKHQsMSksdD1vLmluZGV4T2YoZSl9O2lmKHQucHJvcGVydGllcylmb3IodmFyIGQ9MCxtPU9iamVjdC5rZXlzKHQucHJvcGVydGllcyk7ZDxtLmxlbmd0aDtkKyspe2YoUz1tW2RdKTt2YXIgZz10LnByb3BlcnRpZXNbU107aWYoaz1pW1NdKWlmKEJpKGcpKWlmKGcpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7dmFyIHA9ay5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fHVhKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9ZWxzZSBMYShrLGcsTj1uZXcgU2Esciksbi5tZXJnZVByb3BlcnR5TWF0Y2goTil9aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIGI9MCx2PU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO2I8di5sZW5ndGg7YisrKWZvcih2YXIgeT12W2JdLEM9cWkoeSksdz0wLF89by5zbGljZSgwKTt3PF8ubGVuZ3RoO3crKyl7dmFyIFM9X1t3XTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QoUykpaWYoZihTKSxrPWlbU10paWYoQmkoZz10LnBhdHRlcm5Qcm9wZXJ0aWVzW3ldKSlpZihnKW4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3A9ay5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fHVhKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9ZWxzZSBMYShrLGcsTj1uZXcgU2Esciksbi5tZXJnZVByb3BlcnR5TWF0Y2goTil9aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKWZvcih2YXIgQT0wLEU9bztBPEUubGVuZ3RoO0ErKyl7aWYoaz1pW1M9RVtBXV0pe3ZhciBOPW5ldyBTYTtMYShrLHQuYWRkaXRpb25hbFByb3BlcnRpZXMsTixyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChOKX19ZWxzZSBpZighMT09PXQuYWRkaXRpb25hbFByb3BlcnRpZXMmJm8ubGVuZ3RoPjApZm9yKHZhciB4PTAsTD1vO3g8TC5sZW5ndGg7eCsrKXt2YXIgaztpZihrPWlbUz1MW3hdXSl7cD1rLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX19S2kodC5tYXhQcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIix0Lm1heFByb3BlcnRpZXMpfSk7S2kodC5taW5Qcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIk1pblByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBmZXdlciBwcm9wZXJ0aWVzIHRoYW4gdGhlIHJlcXVpcmVkIG51bWJlciBvZiB7MH0iLHQubWluUHJvcGVydGllcyl9KTtpZih0LmRlcGVuZGVuY2llcylmb3IodmFyIFQ9MCxPPU9iamVjdC5rZXlzKHQuZGVwZW5kZW5jaWVzKTtUPE8ubGVuZ3RoO1QrKyl7aWYoaVtLPU9bVF1dKXt2YXIgTT10LmRlcGVuZGVuY2llc1tLXTtpZihBcnJheS5pc0FycmF5KE0pKWZvcih2YXIgST0wLFI9TTtJPFIubGVuZ3RoO0krKyl7dmFyIFA9UltJXTtpW1BdP24ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIlJlcXVpcmVkRGVwZW5kZW50UHJvcFdhcm5pbmciLCJPYmplY3QgaXMgbWlzc2luZyBwcm9wZXJ0eSB7MH0gcmVxdWlyZWQgYnkgcHJvcGVydHkgezF9LiIsUCxLKX0pfWVsc2UgaWYoZz1DYShNKSlMYShlLGcsTj1uZXcgU2Esciksbi5tZXJnZVByb3BlcnR5TWF0Y2goTil9fXZhciBGPUNhKHQucHJvcGVydHlOYW1lcyk7aWYoRilmb3IodmFyIEQ9MCxWPWUucHJvcGVydGllcztEPFYubGVuZ3RoO0QrKyl7dmFyIEs7KEs9VltEXS5rZXlOb2RlKSYmTGEoSyxGLG4sX2EuaW5zdGFuY2UpfX0oaSx0LG4scik7YnJlYWs7Y2FzZSJhcnJheSI6IWZ1bmN0aW9uKGUsdCxuLHIpe2lmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe2Zvcih2YXIgaT10Lml0ZW1zLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9Q2EoaVtvXSkscz1uZXcgU2E7KGY9ZS5pdGVtc1tvXSk/KExhKGYsYSxzLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHMpKTplLml0ZW1zLmxlbmd0aD49aS5sZW5ndGgmJm4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrfWlmKGUuaXRlbXMubGVuZ3RoPmkubGVuZ3RoKWlmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsSXRlbXMpZm9yKHZhciBsPWkubGVuZ3RoO2w8ZS5pdGVtcy5sZW5ndGg7bCsrKXtzPW5ldyBTYTtMYShlLml0ZW1zW2xdLHQuYWRkaXRpb25hbEl0ZW1zLHMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocyl9ZWxzZSExPT09dC5hZGRpdGlvbmFsSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoImFkZGl0aW9uYWxJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMgYWNjb3JkaW5nIHRvIHNjaGVtYS4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsaS5sZW5ndGgpfSl9ZWxzZXt2YXIgYz1DYSh0Lml0ZW1zKTtpZihjKWZvcih2YXIgdT0wLGg9ZS5pdGVtczt1PGgubGVuZ3RoO3UrKyl7dmFyIGY7TGEoZj1oW3VdLGMscz1uZXcgU2Esciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocyl9fXZhciBkPUNhKHQuY29udGFpbnMpO2lmKGQpe2UuaXRlbXMuc29tZSgoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFNhO3JldHVybiBMYShlLGQsdCxfYS5pbnN0YW5jZSksIXQuaGFzUHJvYmxlbXMoKX0pKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSl9S2kodC5taW5JdGVtcykmJmUuaXRlbXMubGVuZ3RoPHQubWluSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1pbkl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gZmV3IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgbW9yZS4iLHQubWluSXRlbXMpfSk7S2kodC5tYXhJdGVtcykmJmUuaXRlbXMubGVuZ3RoPnQubWF4SXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1heEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsdC5tYXhJdGVtcyl9KTtpZighMD09PXQudW5pcXVlSXRlbXMpe3ZhciBtPUFhKGUpO20uc29tZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCE9PW0ubGFzdEluZGV4T2YoZSl9KSkmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoInVuaXF1ZUl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyBkdXBsaWNhdGUgaXRlbXMuIil9KX19KGksdCxuLHIpO2JyZWFrO2Nhc2Uic3RyaW5nIjohZnVuY3Rpb24oZSx0LG4scil7S2kodC5taW5MZW5ndGgpJiZlLnZhbHVlLmxlbmd0aDx0Lm1pbkxlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp1YSgibWluTGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWluTGVuZ3RoKX0pO0tpKHQubWF4TGVuZ3RoKSYmZS52YWx1ZS5sZW5ndGg+dC5tYXhMZW5ndGgmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1heExlbmd0aFdhcm5pbmciLCJTdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWF4TGVuZ3RoKX0pO2lmKG89dC5wYXR0ZXJuLCJzdHJpbmciPT10eXBlb2Ygbyl7dmFyIGk9cWkodC5wYXR0ZXJuKTsobnVsbD09aT92b2lkIDA6aS50ZXN0KGUudmFsdWUpKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHx1YSgicGF0dGVybldhcm5pbmciLCdTdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4gb2YgInswfSIuJyx0LnBhdHRlcm4pfSl9dmFyIG87aWYodC5mb3JtYXQpc3dpdGNoKHQuZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp2YXIgYT12b2lkIDA7aWYoZS52YWx1ZSl7dmFyIHM9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8uZXhlYyhlLnZhbHVlKTtzP3NbMl18fCJ1cmkiIT09dC5mb3JtYXR8fChhPXVhKCJ1cmlTY2hlbWVNaXNzaW5nIiwiVVJJIHdpdGggYSBzY2hlbWUgaXMgZXhwZWN0ZWQuIikpOmE9dWEoInVyaU1pc3NpbmciLCJVUkkgaXMgZXhwZWN0ZWQuIil9ZWxzZSBhPXVhKCJ1cmlFbXB0eSIsIlVSSSBleHBlY3RlZC4iKTthJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fHVhKCJ1cmlGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFVSSTogezB9IixhKX0pO2JyZWFrO2Nhc2UiY29sb3ItaGV4IjpjYXNlImRhdGUtdGltZSI6Y2FzZSJkYXRlIjpjYXNlInRpbWUiOmNhc2UiZW1haWwiOmNhc2UiaG9zdG5hbWUiOmNhc2UiaXB2NCI6Y2FzZSJpcHY2Ijp2YXIgbD1oYVt0LmZvcm1hdF07ZS52YWx1ZSYmbC5wYXR0ZXJuLmV4ZWMoZS52YWx1ZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8bC5lcnJvck1lc3NhZ2V9KX19KGksdCxuKTticmVhaztjYXNlIm51bWJlciI6IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUudmFsdWU7ZnVuY3Rpb24gbyhlKXt2YXIgdCxuPS9eKC0/XGQrKSg/OlwuKFxkKykpPyg/OmUoWy0rXVxkKykpPyQvLmV4ZWMoZS50b1N0cmluZygpKTtyZXR1cm4gbiYme3ZhbHVlOk51bWJlcihuWzFdKyhuWzJdfHwiIikpLG11bHRpcGxpZXI6KChudWxsPT09KHQ9blsyXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKXx8MCktKHBhcnNlSW50KG5bM10pfHwwKX19aWYoS2kodC5tdWx0aXBsZU9mKSl7dmFyIGE9LTE7aWYoTnVtYmVyLmlzSW50ZWdlcih0Lm11bHRpcGxlT2YpKWE9aSV0Lm11bHRpcGxlT2Y7ZWxzZXt2YXIgcz1vKHQubXVsdGlwbGVPZiksbD1vKGkpO2lmKHMmJmwpe3ZhciBjPU1hdGgucG93KDEwLE1hdGguYWJzKGwubXVsdGlwbGllci1zLm11bHRpcGxpZXIpKTtsLm11bHRpcGxpZXI8cy5tdWx0aXBsaWVyP2wudmFsdWUqPWM6cy52YWx1ZSo9YyxhPWwudmFsdWUlcy52YWx1ZX19MCE9PWEmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm11bHRpcGxlT2ZXYXJuaW5nIiwiVmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB7MH0uIix0Lm11bHRpcGxlT2YpfSl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBLaSh0KT90OkJpKHQpJiZ0P2U6dm9pZCAwfWZ1bmN0aW9uIGgoZSx0KXtpZighQmkodCl8fCF0KXJldHVybiBlfXZhciBmPXUodC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7S2koZikmJmk8PWYmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoImV4Y2x1c2l2ZU1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIGV4Y2x1c2l2ZSBtaW5pbXVtIG9mIHswfS4iLGYpfSk7dmFyIGQ9dSh0Lm1heGltdW0sdC5leGNsdXNpdmVNYXhpbXVtKTtLaShkKSYmaT49ZCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp1YSgiZXhjbHVzaXZlTWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgZXhjbHVzaXZlIG1heGltdW0gb2YgezB9LiIsZCl9KTt2YXIgbT1oKHQubWluaW11bSx0LmV4Y2x1c2l2ZU1pbmltdW0pO0tpKG0pJiZpPG0mJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIG1pbmltdW0gb2YgezB9LiIsbSl9KTt2YXIgZz1oKHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO0tpKGcpJiZpPmcmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIG1heGltdW0gb2YgezB9LiIsZyl9KX0oaSx0LG4pO2JyZWFrO2Nhc2UicHJvcGVydHkiOnJldHVybiBMYShpLnZhbHVlTm9kZSx0LG4scil9IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gaS50eXBlPT09ZXx8ImludGVnZXIiPT09ZSYmIm51bWJlciI9PT1pLnR5cGUmJmkuaXNJbnRlZ2VyfUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGUuc29tZShlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoInR5cGVBcnJheU1pc21hdGNoV2FybmluZyIsIkluY29ycmVjdCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgezB9LiIsdC50eXBlLmpvaW4oIiwgIikpfSk6dC50eXBlJiYoZSh0LnR5cGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHx1YSgidHlwZU1pc21hdGNoV2FybmluZyIsJ0luY29ycmVjdCB0eXBlLiBFeHBlY3RlZCAiezB9Ii4nLHQudHlwZSl9KSk7aWYoQXJyYXkuaXNBcnJheSh0LmFsbE9mKSlmb3IodmFyIG89MCxhPXQuYWxsT2Y7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107TGEoaSxDYShzKSxuLHIpfXZhciBsPUNhKHQubm90KTtpZihsKXt2YXIgYz1uZXcgU2EsdT1yLm5ld1N1YigpO0xhKGksbCxjLHUpLGMuaGFzUHJvYmxlbXMoKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp1YSgibm90U2NoZW1hV2FybmluZyIsIk1hdGNoZXMgYSBzY2hlbWEgdGhhdCBpcyBub3QgYWxsb3dlZC4iKX0pO2Zvcih2YXIgaD0wLGY9dS5zY2hlbWFzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2QuaW52ZXJ0ZWQ9IWQuaW52ZXJ0ZWQsci5hZGQoZCl9fXZhciBtPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVtdLGE9dm9pZCAwLHM9MCxsPWU7czxsLmxlbmd0aDtzKyspe3ZhciBjPUNhKGxbc10pLHU9bmV3IFNhLGg9ci5uZXdTdWIoKTtpZihMYShpLGMsdSxoKSx1Lmhhc1Byb2JsZW1zKCl8fG8ucHVzaChjKSxhKWlmKHR8fHUuaGFzUHJvYmxlbXMoKXx8YS52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCkpe3ZhciBmPXUuY29tcGFyZShhLnZhbGlkYXRpb25SZXN1bHQpO2Y+MD9hPXtzY2hlbWE6Yyx2YWxpZGF0aW9uUmVzdWx0OnUsbWF0Y2hpbmdTY2hlbWFzOmh9OjA9PT1mJiYoYS5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoaCksYS52YWxpZGF0aW9uUmVzdWx0Lm1lcmdlRW51bVZhbHVlcyh1KSl9ZWxzZSBhLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShoKSxhLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMrPXUucHJvcGVydGllc01hdGNoZXMsYS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPXUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcztlbHNlIGE9e3NjaGVtYTpjLHZhbGlkYXRpb25SZXN1bHQ6dSxtYXRjaGluZ1NjaGVtYXM6aH19cmV0dXJuIG8ubGVuZ3RoPjEmJnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6MX0sbWVzc2FnZTp1YSgib25lT2ZXYXJuaW5nIiwiTWF0Y2hlcyBtdWx0aXBsZSBzY2hlbWFzIHdoZW4gb25seSBvbmUgbXVzdCB2YWxpZGF0ZS4iKX0pLGEmJihuLm1lcmdlKGEudmFsaWRhdGlvblJlc3VsdCksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9YS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9YS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsci5tZXJnZShhLm1hdGNoaW5nU2NoZW1hcykpLG8ubGVuZ3RofTtBcnJheS5pc0FycmF5KHQuYW55T2YpJiZtKHQuYW55T2YsITEpO0FycmF5LmlzQXJyYXkodC5vbmVPZikmJm0odC5vbmVPZiwhMCk7dmFyIGc9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFNhLG89ci5uZXdTdWIoKTtMYShpLENhKGUpLHQsbyksbi5tZXJnZSh0KSxuLnByb3BlcnRpZXNNYXRjaGVzKz10LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2Uobyl9LHA9Q2EodC5pZik7cCYmKGI9cCx2PUNhKHQudGhlbikseT1DYSh0LmVsc2UpLEM9Q2EoYiksdz1uZXcgU2EsXz1yLm5ld1N1YigpLExhKGksQyx3LF8pLHIubWVyZ2UoXyksdy5oYXNQcm9ibGVtcygpP3kmJmcoeSk6diYmZyh2KSk7dmFyIGIsdix5LEMsdyxfO2lmKEFycmF5LmlzQXJyYXkodC5lbnVtKSl7Zm9yKHZhciBTPUFhKGkpLEE9ITEsRT0wLE49dC5lbnVtO0U8Ti5sZW5ndGg7RSsrKXt2YXIgeD1OW0VdO2lmKFZpKFMseCkpe0E9ITA7YnJlYWt9fW4uZW51bVZhbHVlcz10LmVudW0sbi5lbnVtVmFsdWVNYXRjaD1BLEF8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6WG8uRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoImVudW1XYXJuaW5nIiwiVmFsdWUgaXMgbm90IGFjY2VwdGVkLiBWYWxpZCB2YWx1ZXM6IHswfS4iLHQuZW51bS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pKS5qb2luKCIsICIpKX0pfWlmKFVpKHQuY29uc3QpKXtWaShTPUFhKGkpLHQuY29uc3QpP24uZW51bVZhbHVlTWF0Y2g9ITA6KG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6WG8uRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoImNvbnN0V2FybmluZyIsIlZhbHVlIG11c3QgYmUgezB9LiIsSlNPTi5zdHJpbmdpZnkodC5jb25zdCkpfSksbi5lbnVtVmFsdWVNYXRjaD0hMSksbi5lbnVtVmFsdWVzPVt0LmNvbnN0XX10LmRlcHJlY2F0aW9uTWVzc2FnZSYmaS5wYXJlbnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLnBhcmVudC5vZmZzZXQsbGVuZ3RoOmkucGFyZW50Lmxlbmd0aH0sc2V2ZXJpdHk6bGkuV2FybmluZyxtZXNzYWdlOnQuZGVwcmVjYXRpb25NZXNzYWdlLGNvZGU6WG8uRGVwcmVjYXRlZH0pfSgpLHIuYWRkKHtub2RlOmksc2NoZW1hOnR9KX19ZnVuY3Rpb24ga2EoZSx0KXt2YXIgbj1bXSxyPS0xLGk9ZS5nZXRUZXh0KCksbz1JaShpLCExKSxhPXQmJnQuY29sbGVjdENvbW1lbnRzP1tdOnZvaWQgMDtmdW5jdGlvbiBzKCl7Zm9yKDs7KXt2YXIgdD1vLnNjYW4oKTtzd2l0Y2godSgpLHQpe2Nhc2UgMTI6Y2FzZSAxMzpBcnJheS5pc0FycmF5KGEpJiZhLnB1c2goJHIuY3JlYXRlKGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkpLGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpKSkpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiB0fX19ZnVuY3Rpb24gbCh0LGksbyxhLHMpe2lmKHZvaWQgMD09PXMmJihzPWxpLkVycm9yKSwwPT09bi5sZW5ndGh8fG8hPT1yKXt2YXIgbD0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8pLGUucG9zaXRpb25BdChhKSk7bi5wdXNoKGRpLmNyZWF0ZShsLHQscyxpLGUubGFuZ3VhZ2VJZCkpLHI9b319ZnVuY3Rpb24gYyhlLHQsbixyLGEpe3ZvaWQgMD09PW4mJihuPXZvaWQgMCksdm9pZCAwPT09ciYmKHI9W10pLHZvaWQgMD09PWEmJihhPVtdKTt2YXIgYz1vLmdldFRva2VuT2Zmc2V0KCksdT1vLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpO2lmKGM9PT11JiZjPjApe2ZvcihjLS07Yz4wJiYvXHMvLnRlc3QoaS5jaGFyQXQoYykpOyljLS07dT1jKzF9aWYobChlLHQsYyx1KSxuJiZoKG4sITEpLHIubGVuZ3RoK2EubGVuZ3RoPjApZm9yKHZhciBmPW8uZ2V0VG9rZW4oKTsxNyE9PWY7KXtpZigtMSE9PXIuaW5kZXhPZihmKSl7cygpO2JyZWFrfWlmKC0xIT09YS5pbmRleE9mKGYpKWJyZWFrO2Y9cygpfXJldHVybiBufWZ1bmN0aW9uIHUoKXtzd2l0Y2goby5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpyZXR1cm4gYyh1YSgiSW52YWxpZFVuaWNvZGUiLCJJbnZhbGlkIHVuaWNvZGUgc2VxdWVuY2UgaW4gc3RyaW5nLiIpLFhvLkludmFsaWRVbmljb2RlKSwhMDtjYXNlIDU6cmV0dXJuIGModWEoIkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLCJJbnZhbGlkIGVzY2FwZSBjaGFyYWN0ZXIgaW4gc3RyaW5nLiIpLFhvLkludmFsaWRFc2NhcGVDaGFyYWN0ZXIpLCEwO2Nhc2UgMzpyZXR1cm4gYyh1YSgiVW5leHBlY3RlZEVuZE9mTnVtYmVyIiwiVW5leHBlY3RlZCBlbmQgb2YgbnVtYmVyLiIpLFhvLlVuZXhwZWN0ZWRFbmRPZk51bWJlciksITA7Y2FzZSAxOnJldHVybiBjKHVhKCJVbmV4cGVjdGVkRW5kT2ZDb21tZW50IiwiVW5leHBlY3RlZCBlbmQgb2YgY29tbWVudC4iKSxYby5VbmV4cGVjdGVkRW5kT2ZDb21tZW50KSwhMDtjYXNlIDI6cmV0dXJuIGModWEoIlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsIlVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4iKSxYby5VbmV4cGVjdGVkRW5kT2ZTdHJpbmcpLCEwO2Nhc2UgNjpyZXR1cm4gYyh1YSgiSW52YWxpZENoYXJhY3RlciIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBzdHJpbmcuIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQuIiksWG8uSW52YWxpZENoYXJhY3RlciksITB9cmV0dXJuITF9ZnVuY3Rpb24gaChlLHQpe3JldHVybiBlLmxlbmd0aD1vLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpLWUub2Zmc2V0LHQmJnMoKSxlfXZhciBmPW5ldyBiYSh2b2lkIDAsMCwwKTtmdW5jdGlvbiBkKHQsbil7dmFyIHI9bmV3IHZhKHQsby5nZXRUb2tlbk9mZnNldCgpLGYpLGk9bShyKTtpZighaSl7aWYoMTYhPT1vLmdldFRva2VuKCkpcmV0dXJuO2ModWEoIkRvdWJsZVF1b3Rlc0V4cGVjdGVkIiwiUHJvcGVydHkga2V5cyBtdXN0IGJlIGRvdWJsZXF1b3RlZCIpLFhvLlVuZGVmaW5lZCk7dmFyIGE9bmV3IGJhKHIsby5nZXRUb2tlbk9mZnNldCgpLG8uZ2V0VG9rZW5MZW5ndGgoKSk7YS52YWx1ZT1vLmdldFRva2VuVmFsdWUoKSxpPWEscygpfXIua2V5Tm9kZT1pO3ZhciB1PW5baS52YWx1ZV07aWYodT8obCh1YSgiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksWG8uRHVwbGljYXRlS2V5LHIua2V5Tm9kZS5vZmZzZXQsci5rZXlOb2RlLm9mZnNldCtyLmtleU5vZGUubGVuZ3RoLGxpLldhcm5pbmcpLCJvYmplY3QiPT10eXBlb2YgdSYmbCh1YSgiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksWG8uRHVwbGljYXRlS2V5LHUua2V5Tm9kZS5vZmZzZXQsdS5rZXlOb2RlLm9mZnNldCt1LmtleU5vZGUubGVuZ3RoLGxpLldhcm5pbmcpLG5baS52YWx1ZV09ITApOm5baS52YWx1ZV09ciw2PT09by5nZXRUb2tlbigpKXIuY29sb25PZmZzZXQ9by5nZXRUb2tlbk9mZnNldCgpLHMoKTtlbHNlIGlmKGModWEoIkNvbG9uRXhwZWN0ZWQiLCJDb2xvbiBleHBlY3RlZCIpLFhvLkNvbG9uRXhwZWN0ZWQpLDEwPT09by5nZXRUb2tlbigpJiZlLnBvc2l0aW9uQXQoaS5vZmZzZXQraS5sZW5ndGgpLmxpbmU8ZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKSkubGluZSlyZXR1cm4gci5sZW5ndGg9aS5sZW5ndGgscjt2YXIgaD1nKHIpO3JldHVybiBoPyhyLnZhbHVlTm9kZT1oLHIubGVuZ3RoPWgub2Zmc2V0K2gubGVuZ3RoLXIub2Zmc2V0LHIpOmModWEoIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLFhvLlZhbHVlRXhwZWN0ZWQscixbXSxbMiw1XSl9ZnVuY3Rpb24gbShlKXtpZigxMD09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IGJhKGUsby5nZXRUb2tlbk9mZnNldCgpKTtyZXR1cm4gdC52YWx1ZT1vLmdldFRva2VuVmFsdWUoKSxoKHQsITApfX1mdW5jdGlvbiBnKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZigzPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgZ2EoZSxvLmdldFRva2VuT2Zmc2V0KCkpO3MoKTtmb3IodmFyIG49ITE7NCE9PW8uZ2V0VG9rZW4oKSYmMTchPT1vLmdldFRva2VuKCk7KXtpZig1PT09by5nZXRUb2tlbigpKXtufHxjKHVhKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxYby5WYWx1ZUV4cGVjdGVkKTt2YXIgcj1vLmdldFRva2VuT2Zmc2V0KCk7aWYocygpLDQ9PT1vLmdldFRva2VuKCkpe24mJmwodWEoIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLFhvLlRyYWlsaW5nQ29tbWEscixyKzEpO2NvbnRpbnVlfX1lbHNlIG4mJmModWEoIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLFhvLkNvbW1hRXhwZWN0ZWQpO3ZhciBpPWcodCk7aT90Lml0ZW1zLnB1c2goaSk6Yyh1YSgiUHJvcGVydHlFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksWG8uVmFsdWVFeHBlY3RlZCx2b2lkIDAsW10sWzQsNV0pLG49ITB9cmV0dXJuIDQhPT1vLmdldFRva2VuKCk/Yyh1YSgiRXhwZWN0ZWRDbG9zZUJyYWNrZXQiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNrZXQiKSxYby5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCx0KTpoKHQsITApfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKDE9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyB5YShlLG8uZ2V0VG9rZW5PZmZzZXQoKSksbj1PYmplY3QuY3JlYXRlKG51bGwpO3MoKTtmb3IodmFyIHI9ITE7MiE9PW8uZ2V0VG9rZW4oKSYmMTchPT1vLmdldFRva2VuKCk7KXtpZig1PT09by5nZXRUb2tlbigpKXtyfHxjKHVhKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxYby5Qcm9wZXJ0eUV4cGVjdGVkKTt2YXIgaT1vLmdldFRva2VuT2Zmc2V0KCk7aWYocygpLDI9PT1vLmdldFRva2VuKCkpe3ImJmwodWEoIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLFhvLlRyYWlsaW5nQ29tbWEsaSxpKzEpO2NvbnRpbnVlfX1lbHNlIHImJmModWEoIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLFhvLkNvbW1hRXhwZWN0ZWQpO3ZhciBhPWQodCxuKTthP3QucHJvcGVydGllcy5wdXNoKGEpOmModWEoIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLFhvLlByb3BlcnR5RXhwZWN0ZWQsdm9pZCAwLFtdLFsyLDVdKSxyPSEwfXJldHVybiAyIT09by5nZXRUb2tlbigpP2ModWEoIkV4cGVjdGVkQ2xvc2VCcmFjZSIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2UiKSxYby5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkLHQpOmgodCwhMCl9fShlKXx8bShlKXx8ZnVuY3Rpb24oZSl7aWYoMTE9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBwYShlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7aWYoMD09PW8uZ2V0VG9rZW5FcnJvcigpKXt2YXIgbj1vLmdldFRva2VuVmFsdWUoKTt0cnl7dmFyIHI9SlNPTi5wYXJzZShuKTtpZighS2kocikpcmV0dXJuIGModWEoIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksWG8uVW5kZWZpbmVkLHQpO3QudmFsdWU9cn1jYXRjaChlKXtyZXR1cm4gYyh1YSgiSW52YWxpZE51bWJlckZvcm1hdCIsIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSxYby5VbmRlZmluZWQsdCl9dC5pc0ludGVnZXI9LTE9PT1uLmluZGV4T2YoIi4iKX1yZXR1cm4gaCh0LCEwKX19KGUpfHxmdW5jdGlvbihlKXtzd2l0Y2goby5nZXRUb2tlbigpKXtjYXNlIDc6cmV0dXJuIGgobmV3IGRhKGUsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA4OnJldHVybiBoKG5ldyBtYShlLCEwLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgOTpyZXR1cm4gaChuZXcgbWEoZSwhMSxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtkZWZhdWx0OnJldHVybn19KGUpfXZhciBwPXZvaWQgMDtyZXR1cm4gMTchPT1zKCkmJigocD1nKHApKT8xNyE9PW8uZ2V0VG9rZW4oKSYmYyh1YSgiRW5kIG9mIGZpbGUgZXhwZWN0ZWQiLCJFbmQgb2YgZmlsZSBleHBlY3RlZC4iKSxYby5VbmRlZmluZWQpOmModWEoIkludmFsaWQgc3ltYm9sIiwiRXhwZWN0ZWQgYSBKU09OIG9iamVjdCwgYXJyYXkgb3IgbGl0ZXJhbC4iKSxYby5VbmRlZmluZWQpKSxuZXcgeGEocCxuLGEpfWZ1bmN0aW9uIFRhKGUsdCxuKXtpZihudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgcj10KyJcdCI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiJbXSI7Zm9yKHZhciBpPSJbXG4iLG89MDtvPGUubGVuZ3RoO28rKylpKz1yK1RhKGVbb10scixuKSxvPGUubGVuZ3RoLTEmJihpKz0iLCIpLGkrPSJcbiI7cmV0dXJuIGkrPXQrIl0ifXZhciBhPU9iamVjdC5rZXlzKGUpO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4ie30iO2ZvcihpPSJ7XG4iLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtpKz1yK0pTT04uc3RyaW5naWZ5KHMpKyI6ICIrVGEoZVtzXSxyLG4pLG88YS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9IlxuIn1yZXR1cm4gaSs9dCsifSJ9cmV0dXJuIG4oZSl9dmFyIE9hPW9hKCksTWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1Qcm9taXNlKSx2b2lkIDA9PT1yJiYocj17fSksdGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlQ29uc3RydWN0b3I9bix0aGlzLmNsaWVudENhcGFiaWxpdGllcz1yfXJldHVybiBlLnByb3RvdHlwZS5kb1Jlc29sdmU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIG49dGhpcy5jb250cmlidXRpb25zW3RdLnJlc29sdmVDb21wbGV0aW9uO2lmKG4pe3ZhciByPW4oZSk7aWYocilyZXR1cm4gcn19cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoZSl9LGUucHJvdG90eXBlLmRvQ29tcGxldGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsaT17aXRlbXM6W10saXNJbmNvbXBsZXRlOiExfSxvPWUuZ2V0VGV4dCgpLGE9ZS5vZmZzZXRBdCh0KSxzPW4uZ2V0Tm9kZUZyb21PZmZzZXQoYSwhMCk7aWYodGhpcy5pc0luQ29tbWVudChlLHM/cy5vZmZzZXQ6MCxhKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO2lmKHMmJmE9PT1zLm9mZnNldCtzLmxlbmd0aCYmYT4wKXt2YXIgbD1vW2EtMV07KCJvYmplY3QiPT09cy50eXBlJiYifSI9PT1sfHwiYXJyYXkiPT09cy50eXBlJiYiXSI9PT1sKSYmKHM9cy5wYXJlbnQpfXZhciBjLHU9dGhpcy5nZXRDdXJyZW50V29yZChlLGEpO2lmKCFzfHwic3RyaW5nIiE9PXMudHlwZSYmIm51bWJlciIhPT1zLnR5cGUmJiJib29sZWFuIiE9PXMudHlwZSYmIm51bGwiIT09cy50eXBlKXt2YXIgaD1hLXUubGVuZ3RoO2g+MCYmJyInPT09b1toLTFdJiZoLS0sYz0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KGgpLHQpfWVsc2UgYz0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KHMub2Zmc2V0KSxlLnBvc2l0aW9uQXQocy5vZmZzZXQrcy5sZW5ndGgpKTt2YXIgZj17fSxkPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYWJlbCxuPWZbdF07aWYobiluLmRvY3VtZW50YXRpb258fChuLmRvY3VtZW50YXRpb249ZS5kb2N1bWVudGF0aW9uKSxuLmRldGFpbHx8KG4uZGV0YWlsPWUuZGV0YWlsKTtlbHNle2lmKCh0PXQucmVwbGFjZSgvW1xuXS9nLCLihrUiKSkubGVuZ3RoPjYwKXt2YXIgcj10LnN1YnN0cigwLDU3KS50cmltKCkrIi4uLiI7ZltyXXx8KHQ9cil9YyYmdm9pZCAwIT09ZS5pbnNlcnRUZXh0JiYoZS50ZXh0RWRpdD1iaS5yZXBsYWNlKGMsZS5pbnNlcnRUZXh0KSksZS5sYWJlbD10LGZbdF09ZSxpLml0ZW1zLnB1c2goZSl9fSxzZXRBc0luY29tcGxldGU6ZnVuY3Rpb24oKXtpLmlzSW5jb21wbGV0ZT0hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX0sbG9nOmZ1bmN0aW9uKGUpe2NvbnNvbGUubG9nKGUpfSxnZXROdW1iZXJPZlByb3Bvc2FsczpmdW5jdGlvbigpe3JldHVybiBpLml0ZW1zLmxlbmd0aH19O3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksbikudGhlbigoZnVuY3Rpb24odCl7dmFyIGw9W10saD0hMCxtPSIiLGc9dm9pZCAwO2lmKHMmJiJzdHJpbmciPT09cy50eXBlKXt2YXIgcD1zLnBhcmVudDtwJiYicHJvcGVydHkiPT09cC50eXBlJiZwLmtleU5vZGU9PT1zJiYoaD0hcC52YWx1ZU5vZGUsZz1wLG09by5zdWJzdHIocy5vZmZzZXQrMSxzLmxlbmd0aC0yKSxwJiYocz1wLnBhcmVudCkpfWlmKHMmJiJvYmplY3QiPT09cy50eXBlKXtpZihzLm9mZnNldD09PWEpcmV0dXJuIGk7cy5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2cmJmc9PT1lfHwoZltlLmtleU5vZGUudmFsdWVdPXVvLmNyZWF0ZSgiX18iKSl9KSk7dmFyIGI9IiI7aCYmKGI9ci5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsZS5vZmZzZXRBdChjLmVuZCkpKSx0P3IuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyh0LG4scyxoLGIsZCk6ci5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucyhuLHMsbSxkKTt2YXIgdj1FYShzKTtyLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5jb2xsZWN0UHJvcGVydHlDb21wbGV0aW9ucyhlLnVyaSx2LHUsaCwiIj09PWIsZCk7biYmbC5wdXNoKG4pfSkpLCF0JiZ1Lmxlbmd0aD4wJiYnIichPT1vLmNoYXJBdChhLXUubGVuZ3RoLTEpJiYoZC5hZGQoe2tpbmQ6dG8uUHJvcGVydHksbGFiZWw6ci5nZXRMYWJlbEZvclZhbHVlKHUpLGluc2VydFRleHQ6ci5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkodSx2b2lkIDAsITEsYiksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxkLnNldEFzSW5jb21wbGV0ZSgpKX12YXIgeT17fTtyZXR1cm4gdD9yLmdldFZhbHVlQ29tcGxldGlvbnModCxuLHMsYSxlLGQseSk6ci5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucyhuLHMsYSxlLGQpLHIuY29udHJpYnV0aW9ucy5sZW5ndGg+MCYmci5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnMobixzLGEsZSxkLGwpLHIucHJvbWlzZUNvbnN0cnVjdG9yLmFsbChsKS50aGVuKChmdW5jdGlvbigpe2lmKDA9PT1kLmdldE51bWJlck9mUHJvcG9zYWxzKCkpe3ZhciB0PWE7IXN8fCJzdHJpbmciIT09cy50eXBlJiYibnVtYmVyIiE9PXMudHlwZSYmImJvb2xlYW4iIT09cy50eXBlJiYibnVsbCIhPT1zLnR5cGV8fCh0PXMub2Zmc2V0K3MubGVuZ3RoKTt2YXIgbj1yLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSx0KTtyLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnMoeSxuLGQpfXJldHVybiBpfSkpfSkpfSxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT10aGlzO3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLG4ub2Zmc2V0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLm5vZGU9PT1uJiYhZS5pbnZlcnRlZCl7dmFyIHQ9ZS5zY2hlbWEucHJvcGVydGllczt0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10W2VdO2lmKCJvYmplY3QiPT10eXBlb2YgbiYmIW4uZGVwcmVjYXRpb25NZXNzYWdlJiYhbi5kb05vdFN1Z2dlc3Qpe3ZhciBzPXtraW5kOnRvLlByb3BlcnR5LGxhYmVsOmUsaW5zZXJ0VGV4dDphLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShlLG4scixpKSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOmEuZnJvbU1hcmt1cChuLm1hcmtkb3duRGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9ufHwiIn07dm9pZCAwIT09bi5zdWdnZXN0U29ydFRleHQmJihzLnNvcnRUZXh0PW4uc3VnZ2VzdFNvcnRUZXh0KSxzLmluc2VydFRleHQmJmppKHMuaW5zZXJ0VGV4dCwiJDEiLmNvbmNhdChpKSkmJihzLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLG8uYWRkKHMpfX0pKTt2YXIgcz1lLnNjaGVtYS5wcm9wZXJ0eU5hbWVzO2lmKCJvYmplY3QiPT10eXBlb2YgcyYmIXMuZGVwcmVjYXRpb25NZXNzYWdlJiYhcy5kb05vdFN1Z2dlc3Qpe3ZhciBsPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKTt2YXIgbj17a2luZDp0by5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6YS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSx2b2lkIDAscixpKSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOnR8fGEuZnJvbU1hcmt1cChzLm1hcmtkb3duRGVzY3JpcHRpb24pfHxzLmRlc2NyaXB0aW9ufHwiIn07dm9pZCAwIT09cy5zdWdnZXN0U29ydFRleHQmJihuLnNvcnRUZXh0PXMuc3VnZ2VzdFNvcnRUZXh0KSxuLmluc2VydFRleHQmJmppKG4uaW5zZXJ0VGV4dCwiJDEiLmNvbmNhdChpKSkmJihuLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLG8uYWRkKG4pfTtpZihzLmVudW0pZm9yKHZhciBjPTA7YzxzLmVudW0ubGVuZ3RoO2MrKyl7dmFyIHU9dm9pZCAwO3MubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZjPHMubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aD91PWEuZnJvbU1hcmt1cChzLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tjXSk6cy5lbnVtRGVzY3JpcHRpb25zJiZjPHMuZW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJih1PXMuZW51bURlc2NyaXB0aW9uc1tjXSksbChzLmVudW1bY10sdSl9cy5jb25zdCYmbChzLmNvbnN0KX19fSkpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLG89ZnVuY3Rpb24oZSl7ZS5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Tm9kZS52YWx1ZTtyLmFkZCh7a2luZDp0by5Qcm9wZXJ0eSxsYWJlbDp0LGluc2VydFRleHQ6aS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUodCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGZpbHRlclRleHQ6aS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUodCksZG9jdW1lbnRhdGlvbjoiIn0pfSkpfTtpZih0LnBhcmVudClpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGE9dC5wYXJlbnQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlIT09dC5wYXJlbnQmJmUua2V5Tm9kZS52YWx1ZT09PWEmJmUudmFsdWVOb2RlJiYib2JqZWN0Ij09PWUudmFsdWVOb2RlLnR5cGUmJm8oZS52YWx1ZU5vZGUpLCEwfSkpfWVsc2UiYXJyYXkiPT09dC5wYXJlbnQudHlwZSYmdC5wYXJlbnQuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Im9iamVjdCI9PT1lLnR5cGUmJmUhPT10JiZvKGUpfSkpO2Vsc2Uib2JqZWN0Ij09PXQudHlwZSYmci5hZGQoe2tpbmQ6dG8uUHJvcGVydHksbGFiZWw6IiRzY2hlbWEiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoIiRzY2hlbWEiLHZvaWQgMCwhMCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiIsZmlsdGVyVGV4dDp0aGlzLmdldEZpbHRlclRleHRGb3JWYWx1ZSgiJHNjaGVtYSIpfSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89dGhpcyxhPW47aWYoIXR8fCJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGV8fChhPXQub2Zmc2V0K3QubGVuZ3RoLHQ9dC5wYXJlbnQpLCF0KXJldHVybiBpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoiRW1wdHkgb2JqZWN0IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LCIiKSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLHZvaWQgaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiRW1wdHkgYXJyYXkiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10sIiIpLGluc2VydFRleHRGb3JtYXQ6cm8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSk7dmFyIHM9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKHIsYSksbD1mdW5jdGlvbihlKXtlLnBhcmVudCYmIU5hKGUucGFyZW50LG4sITApJiZpLmFkZCh7a2luZDpvLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6by5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGUoZSxyKSxpbnNlcnRUZXh0Om8uZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZShlLHIscyksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSwiYm9vbGVhbiI9PT1lLnR5cGUmJm8uYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighZS52YWx1ZSxzLGkpfTtpZigicHJvcGVydHkiPT09dC50eXBlJiZuPih0LmNvbG9uT2Zmc2V0fHwwKSl7dmFyIGM9dC52YWx1ZU5vZGU7aWYoYyYmKG4+Yy5vZmZzZXQrYy5sZW5ndGh8fCJvYmplY3QiPT09Yy50eXBlfHwiYXJyYXkiPT09Yy50eXBlKSlyZXR1cm47dmFyIHU9dC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PXUmJmUudmFsdWVOb2RlJiZsKGUudmFsdWVOb2RlKSwhMH0pKSwiJHNjaGVtYSI9PT11JiZ0LnBhcmVudCYmIXQucGFyZW50LnBhcmVudCYmdGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhzLGkpfWlmKCJhcnJheSI9PT10LnR5cGUpaWYodC5wYXJlbnQmJiJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgaD10LnBhcmVudC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PWgmJmUudmFsdWVOb2RlJiYiYXJyYXkiPT09ZS52YWx1ZU5vZGUudHlwZSYmZS52YWx1ZU5vZGUuaXRlbXMuZm9yRWFjaChsKSwhMH0pKX1lbHNlIHQuaXRlbXMuZm9yRWFjaChsKX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyxhKXt2YXIgcz1yLGw9dm9pZCAwLGM9dm9pZCAwO2lmKCFufHwic3RyaW5nIiE9PW4udHlwZSYmIm51bWJlciIhPT1uLnR5cGUmJiJib29sZWFuIiE9PW4udHlwZSYmIm51bGwiIT09bi50eXBlfHwocz1uLm9mZnNldCtuLmxlbmd0aCxjPW4sbj1uLnBhcmVudCksbil7aWYoInByb3BlcnR5Ij09PW4udHlwZSYmcj4obi5jb2xvbk9mZnNldHx8MCkpe3ZhciB1PW4udmFsdWVOb2RlO2lmKHUmJnI+dS5vZmZzZXQrdS5sZW5ndGgpcmV0dXJuO2w9bi5rZXlOb2RlLnZhbHVlLG49bi5wYXJlbnR9aWYobiYmKHZvaWQgMCE9PWx8fCJhcnJheSI9PT1uLnR5cGUpKXtmb3IodmFyIGg9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGkscyksZj0wLGQ9dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsbi5vZmZzZXQsYyk7ZjxkLmxlbmd0aDtmKyspe3ZhciBtPWRbZl07aWYobS5ub2RlPT09biYmIW0uaW52ZXJ0ZWQmJm0uc2NoZW1hKXtpZigiYXJyYXkiPT09bi50eXBlJiZtLnNjaGVtYS5pdGVtcylpZihBcnJheS5pc0FycmF5KG0uc2NoZW1hLml0ZW1zKSl7dmFyIGc9dGhpcy5maW5kSXRlbUF0T2Zmc2V0KG4saSxyKTtnPG0uc2NoZW1hLml0ZW1zLmxlbmd0aCYmdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKG0uc2NoZW1hLml0ZW1zW2ddLGgsbyxhKX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhtLnNjaGVtYS5pdGVtcyxoLG8sYSk7aWYodm9pZCAwIT09bCl7dmFyIHA9ITE7aWYobS5zY2hlbWEucHJvcGVydGllcykodz1tLnNjaGVtYS5wcm9wZXJ0aWVzW2xdKSYmKHA9ITAsdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpKTtpZihtLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyYmIXApZm9yKHZhciBiPTAsdj1PYmplY3Qua2V5cyhtLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7Yjx2Lmxlbmd0aDtiKyspe3ZhciB5PXZbYl0sQz1xaSh5KTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QobCkpe3A9ITA7dmFyIHc9bS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXNbeV07dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpfX1pZihtLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyYmIXApe3c9bS5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXM7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpfX19fSIkc2NoZW1hIiE9PWx8fG4ucGFyZW50fHx0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGgsbyksYS5ib29sZWFuJiYodGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCEwLGgsbyksdGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCExLGgsbykpLGEubnVsbCYmdGhpcy5hZGROdWxsVmFsdWVDb21wbGV0aW9uKGgsbyl9fWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUuc2NoZW1hLCIiLG8sYSl9LGUucHJvdG90eXBlLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyl7aWYodCl7aWYoInN0cmluZyIhPT10LnR5cGUmJiJudW1iZXIiIT09dC50eXBlJiYiYm9vbGVhbiIhPT10LnR5cGUmJiJudWxsIiE9PXQudHlwZXx8KHQ9dC5wYXJlbnQpLHQmJiJwcm9wZXJ0eSI9PT10LnR5cGUmJm4+KHQuY29sb25PZmZzZXR8fDApKXt2YXIgYT10LmtleU5vZGUudmFsdWUscz10LnZhbHVlTm9kZTtpZigoIXN8fG48PXMub2Zmc2V0K3MubGVuZ3RoKSYmdC5wYXJlbnQpe3ZhciBsPUVhKHQucGFyZW50KTt0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xsZWN0VmFsdWVDb21wbGV0aW9ucyhyLnVyaSxsLGEsaSk7dCYmby5wdXNoKHQpfSkpfX19ZWxzZSB0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xsZWN0RGVmYXVsdENvbXBsZXRpb25zKHIudXJpLGkpO3QmJm8ucHVzaCh0KX0pKX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzOyJvYmplY3QiPT10eXBlb2YgZSYmKHRoaXMuYWRkRW51bVZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuY29sbGVjdFR5cGVzKGUsciksQXJyYXkuaXNBcnJheShlLmFsbE9mKSYmZS5hbGxPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpLEFycmF5LmlzQXJyYXkoZS5hbnlPZikmJmUuYW55T2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSxBcnJheS5pc0FycmF5KGUub25lT2YpJiZlLm9uZU9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSkpfSxlLnByb3RvdHlwZS5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO3ZvaWQgMD09PXImJihyPTApO3ZhciBvPSExO2lmKFVpKGUuZGVmYXVsdCkpe2Zvcih2YXIgYT1lLnR5cGUscz1lLmRlZmF1bHQsbD1yO2w+MDtsLS0pcz1bc10sYT0iYXJyYXkiO24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoYSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKHMpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocyx0KSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZGV0YWlsOk9hKCJqc29uLnN1Z2dlc3QuZGVmYXVsdCIsIkRlZmF1bHQgdmFsdWUiKX0pLG89ITB9QXJyYXkuaXNBcnJheShlLmV4YW1wbGVzKSYmZS5leGFtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihhKXtmb3IodmFyIHM9ZS50eXBlLGw9YSxjPXI7Yz4wO2MtLSlsPVtsXSxzPSJhcnJheSI7bi5hZGQoe2tpbmQ6aS5nZXRTdWdnZXN0aW9uS2luZChzKSxsYWJlbDppLmdldExhYmVsRm9yVmFsdWUobCksaW5zZXJ0VGV4dDppLmdldEluc2VydFRleHRGb3JWYWx1ZShsLHQpLGluc2VydFRleHRGb3JtYXQ6cm8uU25pcHBldH0pLG89ITB9KSksQXJyYXkuaXNBcnJheShlLmRlZmF1bHRTbmlwcGV0cykmJmUuZGVmYXVsdFNuaXBwZXRzLmZvckVhY2goKGZ1bmN0aW9uKGEpe3ZhciBzLGwsYz1lLnR5cGUsdT1hLmJvZHksaD1hLmxhYmVsO2lmKFVpKHUpKXtlLnR5cGU7Zm9yKHZhciBmPXI7Zj4wO2YtLSl1PVt1XTtzPWkuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZSh1LHQpLGw9aS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlKHUpLGg9aHx8aS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZSh1KX1lbHNle2lmKCJzdHJpbmciIT10eXBlb2YgYS5ib2R5VGV4dClyZXR1cm47dmFyIGQ9IiIsbT0iIixnPSIiO2ZvcihmPXI7Zj4wO2YtLSlkPWQrZysiW1xuIixtPW0rIlxuIitnKyJdIixnKz0iXHQiLGM9ImFycmF5IjtzPWQrZythLmJvZHlUZXh0LnNwbGl0KCJcbiIpLmpvaW4oIlxuIitnKSttK3QsaD1ofHxzLGw9cy5yZXBsYWNlKC9bXG5dL2csIiIpfW4uYWRkKHtraW5kOmkuZ2V0U3VnZ2VzdGlvbktpbmQoYyksbGFiZWw6aCxkb2N1bWVudGF0aW9uOmkuZnJvbU1hcmt1cChhLm1hcmtkb3duRGVzY3JpcHRpb24pfHxhLmRlc2NyaXB0aW9uLGluc2VydFRleHQ6cyxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZmlsdGVyVGV4dDpsfSksbz0hMH0pKSwhbyYmIm9iamVjdCI9PXR5cGVvZiBlLml0ZW1zJiYhQXJyYXkuaXNBcnJheShlLml0ZW1zKSYmcjw1JiZ0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUuaXRlbXMsdCxuLHIrMSl9LGUucHJvdG90eXBlLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuKXtpZihVaShlLmNvbnN0KSYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShlLmNvbnN0KSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUuY29uc3QsdCksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb259KSxBcnJheS5pc0FycmF5KGUuZW51bSkpZm9yKHZhciByPTAsaT1lLmVudW0ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPWUuZW51bVtyXSxhPXRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9uO2UubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZyPGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCk/YT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbcl0pOmUuZW51bURlc2NyaXB0aW9ucyYmcjxlLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYoYT1lLmVudW1EZXNjcmlwdGlvbnNbcl0pLG4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUobyksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShvLHQpLGluc2VydFRleHRGb3JtYXQ6cm8uU25pcHBldCxkb2N1bWVudGF0aW9uOmF9KX19LGUucHJvdG90eXBlLmNvbGxlY3RUeXBlcz1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUuZW51bSkmJiFVaShlLmNvbnN0KSl7dmFyIG49ZS50eXBlO0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXT0hMH0pKTpuJiYodFtuXT0hMCl9fSxlLnByb3RvdHlwZS5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuKXtlLm9iamVjdCYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6Int9IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh7fSx0KSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZGV0YWlsOk9hKCJkZWZhdWx0cy5vYmplY3QiLCJOZXcgb2JqZWN0IiksZG9jdW1lbnRhdGlvbjoiIn0pLGUuYXJyYXkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IltdIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShbXSx0KSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZGV0YWlsOk9hKCJkZWZhdWx0cy5hcnJheSIsIk5ldyBhcnJheSIpLGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQsbil7bi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYm9vbGVhbiIpLGxhYmVsOmU/InRydWUiOiJmYWxzZSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpLGluc2VydFRleHRGb3JtYXQ6cm8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZE51bGxWYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0KXt0LmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJudWxsIiksbGFiZWw6Im51bGwiLGluc2VydFRleHQ6Im51bGwiK2UsaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5zY2hlbWFTZXJ2aWNlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHMoKGZ1bmN0aW9uKGUpe3JldHVybiJodHRwIj09PWV8fCJodHRwcyI9PT1lfSkpO3IuZm9yRWFjaCgoZnVuY3Rpb24ocil7cmV0dXJuIHQuYWRkKHtraW5kOnRvLk1vZHVsZSxsYWJlbDpuLmdldExhYmVsRm9yVmFsdWUociksZmlsdGVyVGV4dDpuLmdldEZpbHRlclRleHRGb3JWYWx1ZShyKSxpbnNlcnRUZXh0Om4uZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHIsZSksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0pKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LGUucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LGUucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9LGUucHJvdG90eXBlLmdldExhYmVsRm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFwkXH1dL2csIlxcJCYiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49SlNPTi5zdHJpbmdpZnkoZSxudWxsLCJcdCIpO3JldHVybiJ7fSI9PT1uPyJ7JDF9Iit0OiJbXSI9PT1uPyJbJDFdIit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuK3QpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFRhKGUsIiIsKGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmIl4iPT09ZVswXT9lLnN1YnN0cigxKTpKU09OLnN0cmluZ2lmeShlKX0pKSt0fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlIm9iamVjdCI6cmV0dXJuIG51bGw9PT1lPyIkezE6bnVsbH0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KTtjYXNlInN0cmluZyI6dmFyIG49SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIG49bi5zdWJzdHIoMSxuLmxlbmd0aC0yKSwnIiR7MTonKyhuPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuKSkrJ30iJyt0O2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiIkezE6IitKU09OLnN0cmluZ2lmeShlKSsifSIrdH1yZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KX0sZS5wcm90b3R5cGUuZ2V0U3VnZ2VzdGlvbktpbmQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHQ9ZTtlPXQubGVuZ3RoPjA/dFswXTp2b2lkIDB9aWYoIWUpcmV0dXJuIHRvLlZhbHVlO3N3aXRjaChlKXtjYXNlInN0cmluZyI6ZGVmYXVsdDpyZXR1cm4gdG8uVmFsdWU7Y2FzZSJvYmplY3QiOnJldHVybiB0by5Nb2R1bGU7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIHRvLlByb3BlcnR5fX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIltdIjtjYXNlIm9iamVjdCI6cmV0dXJuInt9IjtkZWZhdWx0OnJldHVybiB0LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpfX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLG4pO2Nhc2Uib2JqZWN0IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30sbik7ZGVmYXVsdDp2YXIgcj10LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpK247cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChyKX19LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLCIiKTtpZighbilyZXR1cm4gaTt2YXIgbyxhPWkrIjogIixzPTA7aWYodCl7aWYoQXJyYXkuaXNBcnJheSh0LmRlZmF1bHRTbmlwcGV0cykpe2lmKDE9PT10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGgpe3ZhciBsPXQuZGVmYXVsdFNuaXBwZXRzWzBdLmJvZHk7VWkobCkmJihvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZShsLCIiKSl9cys9dC5kZWZhdWx0U25pcHBldHMubGVuZ3RofWlmKHQuZW51bSYmKG98fDEhPT10LmVudW0ubGVuZ3RofHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5lbnVtWzBdLCIiKSkscys9dC5lbnVtLmxlbmd0aCksVWkodC5kZWZhdWx0KSYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmRlZmF1bHQsIiIpKSxzKyspLEFycmF5LmlzQXJyYXkodC5leGFtcGxlcykmJnQuZXhhbXBsZXMubGVuZ3RoJiYob3x8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZXhhbXBsZXNbMF0sIiIpKSxzKz10LmV4YW1wbGVzLmxlbmd0aCksMD09PXMpe3ZhciBjPUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGVbMF06dC50eXBlO3N3aXRjaChjfHwodC5wcm9wZXJ0aWVzP2M9Im9iamVjdCI6dC5pdGVtcyYmKGM9ImFycmF5IikpLGMpe2Nhc2UiYm9vbGVhbiI6bz0iJDEiO2JyZWFrO2Nhc2Uic3RyaW5nIjpvPSciJDEiJzticmVhaztjYXNlIm9iamVjdCI6bz0ieyQxfSI7YnJlYWs7Y2FzZSJhcnJheSI6bz0iWyQxXSI7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6bz0iJHsxOjB9IjticmVhaztjYXNlIm51bGwiOm89IiR7MTpudWxsfSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaX19fXJldHVybighb3x8cz4xKSYmKG89IiQxIiksYStvK3J9LGUucHJvdG90eXBlLmdldEN1cnJlbnRXb3JkPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQtMSxyPWUuZ2V0VGV4dCgpO24+PTAmJi0xPT09JyBcdFxuXHJcdiI6e1ssXX0nLmluZGV4T2Yoci5jaGFyQXQobikpOyluLS07cmV0dXJuIHIuc3Vic3RyaW5nKG4rMSx0KX0sZS5wcm90b3R5cGUuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPUlpKGUuZ2V0VGV4dCgpLCEwKTtzd2l0Y2gobi5zZXRQb3NpdGlvbih0KSxuLnNjYW4oKSl7Y2FzZSA1OmNhc2UgMjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiIsIn19LGUucHJvdG90eXBlLmZpbmRJdGVtQXRPZmZzZXQ9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1JaSh0LmdldFRleHQoKSwhMCksaT1lLml0ZW1zLG89aS5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGE9aVtvXTtpZihuPmEub2Zmc2V0K2EubGVuZ3RoKXJldHVybiByLnNldFBvc2l0aW9uKGEub2Zmc2V0K2EubGVuZ3RoKSw1PT09ci5zY2FuKCkmJm4+PXIuZ2V0VG9rZW5PZmZzZXQoKStyLmdldFRva2VuTGVuZ3RoKCk/bysxOm87aWYobj49YS5vZmZzZXQpcmV0dXJuIG99cmV0dXJuIDB9LGUucHJvdG90eXBlLmlzSW5Db21tZW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1JaShlLmdldFRleHQoKSwhMSk7ci5zZXRQb3NpdGlvbih0KTtmb3IodmFyIGk9ci5zY2FuKCk7MTchPT1pJiZyLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpPG47KWk9ci5zY2FuKCk7cmV0dXJuKDEyPT09aXx8MTM9PT1pKSYmci5nZXRUb2tlbk9mZnNldCgpPD1ufSxlLnByb3RvdHlwZS5mcm9tTWFya3VwPWZ1bmN0aW9uKGUpe2lmKGUmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXJldHVybntraW5kOllpLk1hcmtkb3duLHZhbHVlOmV9fSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydE1hcmtkb3duPWZ1bmN0aW9uKCl7aWYoIVVpKHRoaXMuc3VwcG9ydHNNYXJrZG93bikpe3ZhciBlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb247dGhpcy5zdXBwb3J0c01hcmtkb3duPWUmJmUuY29tcGxldGlvbkl0ZW0mJkFycmF5LmlzQXJyYXkoZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0KSYmLTEhPT1lLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQuaW5kZXhPZihZaS5NYXJrZG93bil9cmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bn0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1mdW5jdGlvbigpe2lmKCFVaSh0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycykpe3ZhciBlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb247dGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZSYmZS5jb21wbGV0aW9uSXRlbSYmISFlLmNvbXBsZXRpb25JdGVtLmNvbW1pdENoYXJhY3RlcnNTdXBwb3J0fXJldHVybiB0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVyc30sZX0oKSxJYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2U9bnx8UHJvbWlzZX1yZXR1cm4gZS5wcm90b3R5cGUuZG9Ib3Zlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5vZmZzZXRBdCh0KSxpPW4uZ2V0Tm9kZUZyb21PZmZzZXQocik7aWYoIWl8fCgib2JqZWN0Ij09PWkudHlwZXx8ImFycmF5Ij09PWkudHlwZSkmJnI+aS5vZmZzZXQrMSYmcjxpLm9mZnNldCtpLmxlbmd0aC0xKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKTt2YXIgbz1pO2lmKCJzdHJpbmciPT09aS50eXBlKXt2YXIgYT1pLnBhcmVudDtpZihhJiYicHJvcGVydHkiPT09YS50eXBlJiZhLmtleU5vZGU9PT1pJiYhKGk9YS52YWx1ZU5vZGUpKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKX1mb3IodmFyIHM9JHIuY3JlYXRlKGUucG9zaXRpb25BdChvLm9mZnNldCksZS5wb3NpdGlvbkF0KG8ub2Zmc2V0K28ubGVuZ3RoKSksbD1mdW5jdGlvbihlKXtyZXR1cm57Y29udGVudHM6ZSxyYW5nZTpzfX0sYz1FYShpKSx1PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt1Pj0wO3UtLSl7dmFyIGg9dGhpcy5jb250cmlidXRpb25zW3VdLmdldEluZm9Db250cmlidXRpb24oZS51cmksYyk7aWYoaClyZXR1cm4gaC50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbChlKX0pKX1yZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUmJmkpe3ZhciB0PW4uZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLGkub2Zmc2V0KSxyPXZvaWQgMCxvPXZvaWQgMCxhPXZvaWQgMCxzPXZvaWQgMDt0LmV2ZXJ5KChmdW5jdGlvbihlKXtpZihlLm5vZGU9PT1pJiYhZS5pbnZlcnRlZCYmZS5zY2hlbWEmJihyPXJ8fGUuc2NoZW1hLnRpdGxlLG89b3x8ZS5zY2hlbWEubWFya2Rvd25EZXNjcmlwdGlvbnx8UmEoZS5zY2hlbWEuZGVzY3JpcHRpb24pLGUuc2NoZW1hLmVudW0pKXt2YXIgdD1lLnNjaGVtYS5lbnVtLmluZGV4T2YoQWEoaSkpO2Uuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucz9hPWUuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1t0XTplLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zJiYoYT1SYShlLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zW3RdKSksYSYmInN0cmluZyIhPXR5cGVvZihzPWUuc2NoZW1hLmVudW1bdF0pJiYocz1KU09OLnN0cmluZ2lmeShzKSl9cmV0dXJuITB9KSk7dmFyIGM9IiI7cmV0dXJuIHImJihjPVJhKHIpKSxvJiYoYy5sZW5ndGg+MCYmKGMrPSJcblxuIiksYys9byksYSYmKGMubGVuZ3RoPjAmJihjKz0iXG5cbiIpLGMrPSJgIi5jb25jYXQoZnVuY3Rpb24oZSl7aWYoLTEhPT1lLmluZGV4T2YoImAiKSlyZXR1cm4iYGAgIitlKyIgYGAiO3JldHVybiBlfShzKSwiYDogIikuY29uY2F0KGEpKSxsKFtjXSl9cmV0dXJuIG51bGx9KSl9LGV9KCk7ZnVuY3Rpb24gUmEoZSl7aWYoZSlyZXR1cm4gZS5yZXBsYWNlKC8oW15cblxyXSkoXHI/XG4pKFteXG5ccl0pL2dtLCIkMVxuXG4kMyIpLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX12YXIgUGE9b2EoKSxGYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmpzb25TY2hlbWFTZXJ2aWNlPWUsdGhpcy5wcm9taXNlPXQsdGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMH1yZXR1cm4gZS5wcm90b3R5cGUuY29uZmlndXJlPWZ1bmN0aW9uKGUpe2UmJih0aGlzLnZhbGlkYXRpb25FbmFibGVkPSExIT09ZS52YWxpZGF0ZSx0aGlzLmNvbW1lbnRTZXZlcml0eT1lLmFsbG93Q29tbWVudHM/dm9pZCAwOmxpLkVycm9yKX0sZS5wcm90b3R5cGUuZG9WYWxpZGF0aW9uPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7aWYoIXRoaXMudmFsaWRhdGlvbkVuYWJsZWQpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKFtdKTt2YXIgbz1bXSxhPXt9LHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yYW5nZS5zdGFydC5saW5lKyIgIitlLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcisiICIrZS5tZXNzYWdlO2FbdF18fChhW3RdPSEwLG8ucHVzaChlKSl9LGw9ZnVuY3Rpb24ocil7dmFyIGE9KG51bGw9PW4/dm9pZCAwOm4udHJhaWxpbmdDb21tYXMpP1VhKG4udHJhaWxpbmdDb21tYXMpOmxpLkVycm9yLGw9KG51bGw9PW4/dm9pZCAwOm4uY29tbWVudHMpP1VhKG4uY29tbWVudHMpOmkuY29tbWVudFNldmVyaXR5LGM9KG51bGw9PW4/dm9pZCAwOm4uc2NoZW1hVmFsaWRhdGlvbik/VWEobi5zY2hlbWFWYWxpZGF0aW9uKTpsaS5XYXJuaW5nLHU9KG51bGw9PW4/dm9pZCAwOm4uc2NoZW1hUmVxdWVzdCk/VWEobi5zY2hlbWFSZXF1ZXN0KTpsaS5XYXJuaW5nO2lmKHIpe2lmKHIuZXJyb3JzLmxlbmd0aCYmdC5yb290JiZ1KXt2YXIgaD10LnJvb3QsZj0ib2JqZWN0Ij09PWgudHlwZT9oLnByb3BlcnRpZXNbMF06dm9pZCAwO2lmKGYmJiIkc2NoZW1hIj09PWYua2V5Tm9kZS52YWx1ZSl7dmFyIGQ9Zi52YWx1ZU5vZGV8fGYsbT0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KGQub2Zmc2V0KSxlLnBvc2l0aW9uQXQoZC5vZmZzZXQrZC5sZW5ndGgpKTtzKGRpLmNyZWF0ZShtLHIuZXJyb3JzWzBdLHUsWG8uU2NoZW1hUmVzb2x2ZUVycm9yKSl9ZWxzZXttPSRyLmNyZWF0ZShlLnBvc2l0aW9uQXQoaC5vZmZzZXQpLGUucG9zaXRpb25BdChoLm9mZnNldCsxKSk7cyhkaS5jcmVhdGUobSxyLmVycm9yc1swXSx1LFhvLlNjaGVtYVJlc29sdmVFcnJvcikpfX1lbHNlIGlmKGMpe3ZhciBnPXQudmFsaWRhdGUoZSxyLnNjaGVtYSxjKTtnJiZnLmZvckVhY2gocyl9VmEoci5zY2hlbWEpJiYobD12b2lkIDApLEthKHIuc2NoZW1hKSYmKGE9dm9pZCAwKX1mb3IodmFyIHA9MCxiPXQuc3ludGF4RXJyb3JzO3A8Yi5sZW5ndGg7cCsrKXt2YXIgdj1iW3BdO2lmKHYuY29kZT09PVhvLlRyYWlsaW5nQ29tbWEpe2lmKCJudW1iZXIiIT10eXBlb2YgYSljb250aW51ZTt2LnNldmVyaXR5PWF9cyh2KX1pZigibnVtYmVyIj09dHlwZW9mIGwpe3ZhciB5PVBhKCJJbnZhbGlkQ29tbWVudFRva2VuIiwiQ29tbWVudHMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gSlNPTi4iKTt0LmNvbW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MoZGkuY3JlYXRlKGUseSxsLFhvLkNvbW1lbnROb3RQZXJtaXR0ZWQpKX0pKX1yZXR1cm4gb307aWYocil7dmFyIGM9ci5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC8iK0RhKys7cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShjLFtdLHIpLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSl9KSl9cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSl9KSl9LGUucHJvdG90eXBlLmdldExhbmd1YWdlU3RhdHVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3NjaGVtYXM6dGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2UoZS51cmksdCl9fSxlfSgpLERhPTA7ZnVuY3Rpb24gVmEoZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtpZihCaShlLmFsbG93Q29tbWVudHMpKXJldHVybiBlLmFsbG93Q29tbWVudHM7aWYoZS5hbGxPZilmb3IodmFyIHQ9MCxuPWUuYWxsT2Y7dDxuLmxlbmd0aDt0Kyspe3ZhciByPVZhKG5bdF0pO2lmKEJpKHIpKXJldHVybiByfX19ZnVuY3Rpb24gS2EoZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtpZihCaShlLmFsbG93VHJhaWxpbmdDb21tYXMpKXJldHVybiBlLmFsbG93VHJhaWxpbmdDb21tYXM7dmFyIHQ9ZTtpZihCaSh0LmFsbG93c1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gdC5hbGxvd3NUcmFpbGluZ0NvbW1hcztpZihlLmFsbE9mKWZvcih2YXIgbj0wLHI9ZS5hbGxPZjtuPHIubGVuZ3RoO24rKyl7dmFyIGk9S2EocltuXSk7aWYoQmkoaSkpcmV0dXJuIGl9fX1mdW5jdGlvbiBVYShlKXtzd2l0Y2goZSl7Y2FzZSJlcnJvciI6cmV0dXJuIGxpLkVycm9yO2Nhc2Uid2FybmluZyI6cmV0dXJuIGxpLldhcm5pbmc7Y2FzZSJpZ25vcmUiOnJldHVybn19ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIGU8NDg/MDplPD01Nz9lLTQ4OihlPDk3JiYoZSs9MzIpLGU+PTk3JiZlPD0xMDI/ZS05NysxMDowKX1mdW5jdGlvbiBqYShlKXtpZigiIyI9PT1lWzBdKXN3aXRjaChlLmxlbmd0aCl7Y2FzZSA0OnJldHVybntyZWQ6MTcqQmEoZS5jaGFyQ29kZUF0KDEpKS8yNTUsZ3JlZW46MTcqQmEoZS5jaGFyQ29kZUF0KDIpKS8yNTUsYmx1ZToxNypCYShlLmNoYXJDb2RlQXQoMykpLzI1NSxhbHBoYToxfTtjYXNlIDU6cmV0dXJue3JlZDoxNypCYShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNypCYShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KkJhKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjE3KkJhKGUuY2hhckNvZGVBdCg0KSkvMjU1fTtjYXNlIDc6cmV0dXJue3JlZDooMTYqQmEoZS5jaGFyQ29kZUF0KDEpKStCYShlLmNoYXJDb2RlQXQoMikpKS8yNTUsZ3JlZW46KDE2KkJhKGUuY2hhckNvZGVBdCgzKSkrQmEoZS5jaGFyQ29kZUF0KDQpKSkvMjU1LGJsdWU6KDE2KkJhKGUuY2hhckNvZGVBdCg1KSkrQmEoZS5jaGFyQ29kZUF0KDYpKSkvMjU1LGFscGhhOjF9O2Nhc2UgOTpyZXR1cm57cmVkOigxNipCYShlLmNoYXJDb2RlQXQoMSkpK0JhKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqQmEoZS5jaGFyQ29kZUF0KDMpKStCYShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqQmEoZS5jaGFyQ29kZUF0KDUpKStCYShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6KDE2KkJhKGUuY2hhckNvZGVBdCg3KSkrQmEoZS5jaGFyQ29kZUF0KDgpKSkvMjU1fX19dmFyIHFhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnNjaGVtYVNlcnZpY2U9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9scz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pO3ZhciBpPXQucm9vdDtpZighaSlyZXR1cm5bXTt2YXIgbz1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLGE9ZS51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1hfHxqaShhLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1pLnR5cGUpe2Zvcih2YXIgcz1bXSxsPTAsYz1pLml0ZW1zO2w8Yy5sZW5ndGg7bCsrKXt2YXIgdT1jW2xdO2lmKCJvYmplY3QiPT09dS50eXBlKWZvcih2YXIgaD0wLGY9dS5wcm9wZXJ0aWVzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2lmKCJrZXkiPT09ZC5rZXlOb2RlLnZhbHVlJiZkLnZhbHVlTm9kZSl7dmFyIG09SHIuY3JlYXRlKGUudXJpLCRhKGUsdSkpO2lmKHMucHVzaCh7bmFtZTpBYShkLnZhbHVlTm9kZSksa2luZDp3by5GdW5jdGlvbixsb2NhdGlvbjptfSksLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksc319fXJldHVybiBzfWZvcih2YXIgZz1be25vZGU6aSxjb250YWluZXJOYW1lOiIifV0scD0wLGI9ITEsdj1bXSx5PWZ1bmN0aW9uKHQsbil7ImFycmF5Ij09PXQudHlwZT90Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UmJmcucHVzaCh7bm9kZTplLGNvbnRhaW5lck5hbWU6bn0pfSkpOiJvYmplY3QiPT09dC50eXBlJiZ0LnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dC52YWx1ZU5vZGU7aWYoaSlpZihvPjApe28tLTt2YXIgYT1Ici5jcmVhdGUoZS51cmksJGEoZSx0KSkscz1uP24rIi4iK3Qua2V5Tm9kZS52YWx1ZTp0LmtleU5vZGUudmFsdWU7di5wdXNoKHtuYW1lOnIuZ2V0S2V5TGFiZWwodCksa2luZDpyLmdldFN5bWJvbEtpbmQoaS50eXBlKSxsb2NhdGlvbjphLGNvbnRhaW5lck5hbWU6bn0pLGcucHVzaCh7bm9kZTppLGNvbnRhaW5lck5hbWU6c30pfWVsc2UgYj0hMH0pKX07cDxnLmxlbmd0aDspe3ZhciBDPWdbcCsrXTt5KEMubm9kZSxDLmNvbnRhaW5lck5hbWUpfXJldHVybiBiJiZuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksdn0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9sczI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KTt2YXIgaT10LnJvb3Q7aWYoIWkpcmV0dXJuW107dmFyIG89bi5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxhPWUudXJpO2lmKCgidnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24iPT09YXx8amkoYS50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiYiYXJyYXkiPT09aS50eXBlKXtmb3IodmFyIHM9W10sbD0wLGM9aS5pdGVtcztsPGMubGVuZ3RoO2wrKyl7dmFyIHU9Y1tsXTtpZigib2JqZWN0Ij09PXUudHlwZSlmb3IodmFyIGg9MCxmPXUucHJvcGVydGllcztoPGYubGVuZ3RoO2grKyl7dmFyIGQ9ZltoXTtpZigia2V5Ij09PWQua2V5Tm9kZS52YWx1ZSYmZC52YWx1ZU5vZGUpe3ZhciBtPSRhKGUsdSksZz0kYShlLGQua2V5Tm9kZSk7aWYocy5wdXNoKHtuYW1lOkFhKGQudmFsdWVOb2RlKSxraW5kOndvLkZ1bmN0aW9uLHJhbmdlOm0sc2VsZWN0aW9uUmFuZ2U6Z30pLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHN9fX1yZXR1cm4gc31mb3IodmFyIHA9W10sYj1be25vZGU6aSxyZXN1bHQ6cH1dLHY9MCx5PSExLEM9ZnVuY3Rpb24odCxuKXsiYXJyYXkiPT09dC50eXBlP3QuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtpZih0KWlmKG8+MCl7by0tO3ZhciBhPSRhKGUsdCkscz1hLGw9e25hbWU6U3RyaW5nKGkpLGtpbmQ6ci5nZXRTeW1ib2xLaW5kKHQudHlwZSkscmFuZ2U6YSxzZWxlY3Rpb25SYW5nZTpzLGNoaWxkcmVuOltdfTtuLnB1c2gobCksYi5wdXNoKHtyZXN1bHQ6bC5jaGlsZHJlbixub2RlOnR9KX1lbHNlIHk9ITB9KSk6Im9iamVjdCI9PT10LnR5cGUmJnQucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnZhbHVlTm9kZTtpZihpKWlmKG8+MCl7by0tO3ZhciBhPSRhKGUsdCkscz0kYShlLHQua2V5Tm9kZSksbD1bXSxjPXtuYW1lOnIuZ2V0S2V5TGFiZWwodCksa2luZDpyLmdldFN5bWJvbEtpbmQoaS50eXBlKSxyYW5nZTphLHNlbGVjdGlvblJhbmdlOnMsY2hpbGRyZW46bCxkZXRhaWw6ci5nZXREZXRhaWwoaSl9O24ucHVzaChjKSxiLnB1c2goe3Jlc3VsdDpsLG5vZGU6aX0pfWVsc2UgeT0hMH0pKX07djxiLmxlbmd0aDspe3ZhciB3PWJbdisrXTtDKHcubm9kZSx3LnJlc3VsdCl9cmV0dXJuIHkmJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSxwfSxlLnByb3RvdHlwZS5nZXRTeW1ib2xLaW5kPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIm9iamVjdCI6cmV0dXJuIHdvLk1vZHVsZTtjYXNlInN0cmluZyI6cmV0dXJuIHdvLlN0cmluZztjYXNlIm51bWJlciI6cmV0dXJuIHdvLk51bWJlcjtjYXNlImFycmF5IjpyZXR1cm4gd28uQXJyYXk7Y2FzZSJib29sZWFuIjpyZXR1cm4gd28uQm9vbGVhbjtkZWZhdWx0OnJldHVybiB3by5WYXJpYWJsZX19LGUucHJvdG90eXBlLmdldEtleUxhYmVsPWZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Tm9kZS52YWx1ZTtyZXR1cm4gdCYmKHQ9dC5yZXBsYWNlKC9bXG5dL2csIuKGtSIpKSx0JiZ0LnRyaW0oKT90OiciJy5jb25jYXQodCwnIicpfSxlLnByb3RvdHlwZS5nZXREZXRhaWw9ZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4iYm9vbGVhbiI9PT1lLnR5cGV8fCJudW1iZXIiPT09ZS50eXBlfHwibnVsbCI9PT1lLnR5cGV8fCJzdHJpbmciPT09ZS50eXBlP1N0cmluZyhlLnZhbHVlKToiYXJyYXkiPT09ZS50eXBlP2UuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoiW10iOiJvYmplY3QiPT09ZS50eXBlP2UuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoie30iOnZvaWQgMH0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50Q29sb3JzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBpPVtdO2lmKHIpZm9yKHZhciBvPW4mJiJudW1iZXIiPT10eXBlb2Ygbi5yZXN1bHRMaW1pdD9uLnJlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUUsYT17fSxzPTAsbD10LmdldE1hdGNoaW5nU2NoZW1hcyhyLnNjaGVtYSk7czxsLmxlbmd0aDtzKyspe3ZhciBjPWxbc107aWYoIWMuaW52ZXJ0ZWQmJmMuc2NoZW1hJiYoImNvbG9yIj09PWMuc2NoZW1hLmZvcm1hdHx8ImNvbG9yLWhleCI9PT1jLnNjaGVtYS5mb3JtYXQpJiZjLm5vZGUmJiJzdHJpbmciPT09Yy5ub2RlLnR5cGUpe3ZhciB1PVN0cmluZyhjLm5vZGUub2Zmc2V0KTtpZighYVt1XSl7dmFyIGg9amEoQWEoYy5ub2RlKSk7aWYoaCl7dmFyIGY9JGEoZSxjLm5vZGUpO2kucHVzaCh7Y29sb3I6aCxyYW5nZTpmfSl9aWYoYVt1XT0hMCwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChlLnVyaSksaX19fXJldHVybiBpfSkpfSxlLnByb3RvdHlwZS5nZXRDb2xvclByZXNlbnRhdGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1bXSxhPU1hdGgucm91bmQoMjU1Km4ucmVkKSxzPU1hdGgucm91bmQoMjU1Km4uZ3JlZW4pLGw9TWF0aC5yb3VuZCgyNTUqbi5ibHVlKTtmdW5jdGlvbiBjKGUpe3ZhciB0PWUudG9TdHJpbmcoMTYpO3JldHVybiAyIT09dC5sZW5ndGg/IjAiK3Q6dH1yZXR1cm4gaT0xPT09bi5hbHBoYT8iIyIuY29uY2F0KGMoYSkpLmNvbmNhdChjKHMpKS5jb25jYXQoYyhsKSk6IiMiLmNvbmNhdChjKGEpKS5jb25jYXQoYyhzKSkuY29uY2F0KGMobCkpLmNvbmNhdChjKE1hdGgucm91bmQoMjU1Km4uYWxwaGEpKSksby5wdXNoKHtsYWJlbDppLHRleHRFZGl0OmJpLnJlcGxhY2UocixKU09OLnN0cmluZ2lmeShpKSl9KSxvfSxlfSgpO2Z1bmN0aW9uICRhKGUsdCl7cmV0dXJuICRyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpfXZhciBXYSxIYSx6YSxHYSxKYSxYYSxaYT1vYSgpLFlhPXtzY2hlbWFBc3NvY2lhdGlvbnM6W10sc2NoZW1hczp7Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hIyI6eyRyZWY6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyJ9LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiOnskc2NoZW1hOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiLGRlZmluaXRpb25zOntzY2hlbWFBcnJheTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsaXRlbXM6eyRyZWY6IiMifX0scG9zaXRpdmVJbnRlZ2VyOnt0eXBlOiJpbnRlZ2VyIixtaW5pbXVtOjB9LHBvc2l0aXZlSW50ZWdlckRlZmF1bHQwOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn0se2RlZmF1bHQ6MH1dfSxzaW1wbGVUeXBlczp7dHlwZToic3RyaW5nIixlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH19LHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkc2NoZW1hOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sdGl0bGU6e3R5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0eXBlOiJzdHJpbmcifSxkZWZhdWx0Ont9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsbWluaW11bTowLGV4Y2x1c2l2ZU1pbmltdW06ITB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1heExlbmd0aDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluTGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHBhdHRlcm46e3R5cGU6InN0cmluZyIsZm9ybWF0OiJyZWdleCJ9LGFkZGl0aW9uYWxJdGVtczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6e319LG1heEl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5JdGVtczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4UHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluUHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSxyZXF1aXJlZDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfSxhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxkZXBlbmRlbmNpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfX0sZW51bTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7YW55T2Y6W3t0eXBlOiJzdHJpbmciLGVudW06WyJkYXRlLXRpbWUiLCJ1cmkiLCJlbWFpbCIsImhvc3RuYW1lIiwiaXB2NCIsImlwdjYiLCJyZWdleCJdfSx7dHlwZToic3RyaW5nIn1dfSxhbGxPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxhbnlPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxvbmVPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxub3Q6e2FsbE9mOlt7JHJlZjoiIyJ9XX19LGRlcGVuZGVuY2llczp7ZXhjbHVzaXZlTWF4aW11bTpbIm1heGltdW0iXSxleGNsdXNpdmVNaW5pbXVtOlsibWluaW11bSJdfSxkZWZhdWx0Ont9fSwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIjp7ZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxub25OZWdhdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0sbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOntlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sdW5pcXVlSXRlbXM6ITAsZGVmYXVsdDpbXX19LHR5cGU6WyJvYmplY3QiLCJib29sZWFuIl0scHJvcGVydGllczp7JGlkOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkcmVmOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRjb21tZW50Ont0eXBlOiJzdHJpbmcifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6ITAscmVhZE9ubHk6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGV4YW1wbGVzOnt0eXBlOiJhcnJheSIsaXRlbXM6ITB9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsZXhjbHVzaXZlTWluaW11bTowfSxtYXhpbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNYXhpbXVtOnt0eXBlOiJudW1iZXIifSxtaW5pbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0eXBlOiJudW1iZXIifSxtYXhMZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluTGVuZ3RoOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnskcmVmOiIjIn0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6ITB9LG1heEl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pbkl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0sdW5pcXVlSXRlbXM6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGNvbnRhaW5zOnskcmVmOiIjIn0sbWF4UHJvcGVydGllczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5Qcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scmVxdWlyZWQ6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifSxhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmluaXRpb25zOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHBhdHRlcm5Qcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0scHJvcGVydHlOYW1lczp7Zm9ybWF0OiJyZWdleCJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxwcm9wZXJ0eU5hbWVzOnskcmVmOiIjIn0sY29uc3Q6ITAsZW51bTp7dHlwZToiYXJyYXkiLGl0ZW1zOiEwLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7dHlwZToic3RyaW5nIn0sY29udGVudE1lZGlhVHlwZTp7dHlwZToic3RyaW5nIn0sY29udGVudEVuY29kaW5nOnt0eXBlOiJzdHJpbmcifSxpZjp7JHJlZjoiIyJ9LHRoZW46eyRyZWY6IiMifSxlbHNlOnskcmVmOiIjIn0sYWxsT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxhbnlPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LG9uZU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sbm90OnskcmVmOiIjIn19LGRlZmF1bHQ6ITB9fX0sUWE9e2lkOlphKCJzY2hlbWEuanNvbi5pZCIsIkEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzY2hlbWEuIiksJHNjaGVtYTpaYSgic2NoZW1hLmpzb24uJHNjaGVtYSIsIlRoZSBzY2hlbWEgdG8gdmVyaWZ5IHRoaXMgZG9jdW1lbnQgYWdhaW5zdC4iKSx0aXRsZTpaYSgic2NoZW1hLmpzb24udGl0bGUiLCJBIGRlc2NyaXB0aXZlIHRpdGxlIG9mIHRoZSBlbGVtZW50LiIpLGRlc2NyaXB0aW9uOlphKCJzY2hlbWEuanNvbi5kZXNjcmlwdGlvbiIsIkEgbG9uZyBkZXNjcmlwdGlvbiBvZiB0aGUgZWxlbWVudC4gVXNlZCBpbiBob3ZlciBtZW51cyBhbmQgc3VnZ2VzdGlvbnMuIiksZGVmYXVsdDpaYSgic2NoZW1hLmpzb24uZGVmYXVsdCIsIkEgZGVmYXVsdCB2YWx1ZS4gVXNlZCBieSBzdWdnZXN0aW9ucy4iKSxtdWx0aXBsZU9mOlphKCJzY2hlbWEuanNvbi5tdWx0aXBsZU9mIiwiQSBudW1iZXIgdGhhdCBzaG91bGQgY2xlYW5seSBkaXZpZGUgdGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gaGF2ZSBubyByZW1haW5kZXIpLiIpLG1heGltdW06WmEoInNjaGVtYS5qc29uLm1heGltdW0iLCJUaGUgbWF4aW11bSBudW1lcmljYWwgdmFsdWUsIGluY2x1c2l2ZSBieSBkZWZhdWx0LiIpLGV4Y2x1c2l2ZU1heGltdW06WmEoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1heGltdW0iLCJNYWtlcyB0aGUgbWF4aW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWluaW11bTpaYSgic2NoZW1hLmpzb24ubWluaW11bSIsIlRoZSBtaW5pbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWluaW11bTpaYSgic2NoZW1hLmpzb24uZXhjbHVzaXZlTWluaW51bSIsIk1ha2VzIHRoZSBtaW5pbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtYXhMZW5ndGg6WmEoInNjaGVtYS5qc29uLm1heExlbmd0aCIsIlRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxtaW5MZW5ndGg6WmEoInNjaGVtYS5qc29uLm1pbkxlbmd0aCIsIlRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxwYXR0ZXJuOlphKCJzY2hlbWEuanNvbi5wYXR0ZXJuIiwiQSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIHN0cmluZyBhZ2FpbnN0LiBJdCBpcyBub3QgaW1wbGljaXRseSBhbmNob3JlZC4iKSxhZGRpdGlvbmFsSXRlbXM6WmEoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxJdGVtcyIsIkZvciBhcnJheXMsIG9ubHkgd2hlbiBpdGVtcyBpcyBzZXQgYXMgYW4gYXJyYXkuIElmIGl0IGlzIGEgc2NoZW1hLCB0aGVuIHRoaXMgc2NoZW1hIHZhbGlkYXRlcyBpdGVtcyBhZnRlciB0aGUgb25lcyBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1zIGFycmF5LiBJZiBpdCBpcyBmYWxzZSwgdGhlbiBhZGRpdGlvbmFsIGl0ZW1zIHdpbGwgY2F1c2UgdmFsaWRhdGlvbiB0byBmYWlsLiIpLGl0ZW1zOlphKCJzY2hlbWEuanNvbi5pdGVtcyIsIkZvciBhcnJheXMuIENhbiBlaXRoZXIgYmUgYSBzY2hlbWEgdG8gdmFsaWRhdGUgZXZlcnkgZWxlbWVudCBhZ2FpbnN0IG9yIGFuIGFycmF5IG9mIHNjaGVtYXMgdG8gdmFsaWRhdGUgZWFjaCBpdGVtIGFnYWluc3QgaW4gb3JkZXIgKHRoZSBmaXJzdCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIHNlY29uZCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi4iKSxtYXhJdGVtczpaYSgic2NoZW1hLmpzb24ubWF4SXRlbXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksbWluSXRlbXM6WmEoInNjaGVtYS5qc29uLm1pbkl0ZW1zIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLHVuaXF1ZUl0ZW1zOlphKCJzY2hlbWEuanNvbi51bmlxdWVJdGVtcyIsIklmIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IG11c3QgYmUgdW5pcXVlLiBEZWZhdWx0cyB0byBmYWxzZS4iKSxtYXhQcm9wZXJ0aWVzOlphKCJzY2hlbWEuanNvbi5tYXhQcm9wZXJ0aWVzIiwiVGhlIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIiksbWluUHJvcGVydGllczpaYSgic2NoZW1hLmpzb24ubWluUHJvcGVydGllcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLHJlcXVpcmVkOlphKCJzY2hlbWEuanNvbi5yZXF1aXJlZCIsIkFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgcmVxdWlyZWQgb24gdGhpcyBvYmplY3QuIiksYWRkaXRpb25hbFByb3BlcnRpZXM6WmEoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiRWl0aGVyIGEgc2NoZW1hIG9yIGEgYm9vbGVhbi4gSWYgYSBzY2hlbWEsIHRoZW4gdXNlZCB0byB2YWxpZGF0ZSBhbGwgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSAncHJvcGVydGllcycgb3IgJ3BhdHRlcm5Qcm9wZXJ0aWVzJy4gSWYgZmFsc2UsIHRoZW4gYW55IHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgZWl0aGVyIHdpbGwgY2F1c2UgdGhpcyBzY2hlbWEgdG8gZmFpbC4iKSxkZWZpbml0aW9uczpaYSgic2NoZW1hLmpzb24uZGVmaW5pdGlvbnMiLCJOb3QgdXNlZCBmb3IgdmFsaWRhdGlvbi4gUGxhY2Ugc3Vic2NoZW1hcyBoZXJlIHRoYXQgeW91IHdpc2ggdG8gcmVmZXJlbmNlIGlubGluZSB3aXRoICRyZWYuIikscHJvcGVydGllczpaYSgic2NoZW1hLmpzb24ucHJvcGVydGllcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIGVhY2ggcHJvcGVydHkuIikscGF0dGVyblByb3BlcnRpZXM6WmEoInNjaGVtYS5qc29uLnBhdHRlcm5Qcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcmVndWxhciBleHByZXNzaW9ucyBvbiBwcm9wZXJ0eSBuYW1lcyB0byBzY2hlbWFzIGZvciBtYXRjaGluZyBwcm9wZXJ0aWVzLiIpLGRlcGVuZGVuY2llczpaYSgic2NoZW1hLmpzb24uZGVwZW5kZW5jaWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gZWl0aGVyIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG9yIGEgc2NoZW1hLiBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBtZWFucyB0aGUgcHJvcGVydHkgbmFtZWQgaW4gdGhlIGtleSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheSBiZWluZyBwcmVzZW50IGluIHRoZSBvYmplY3QgaW4gb3JkZXIgdG8gYmUgdmFsaWQuIElmIHRoZSB2YWx1ZSBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgc2NoZW1hIGlzIG9ubHkgYXBwbGllZCB0byB0aGUgb2JqZWN0IGlmIHRoZSBwcm9wZXJ0eSBpbiB0aGUga2V5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LiIpLGVudW06WmEoInNjaGVtYS5qc29uLmVudW0iLCJUaGUgc2V0IG9mIGxpdGVyYWwgdmFsdWVzIHRoYXQgYXJlIHZhbGlkLiIpLHR5cGU6WmEoInNjaGVtYS5qc29uLnR5cGUiLCJFaXRoZXIgYSBzdHJpbmcgb2Ygb25lIG9mIHRoZSBiYXNpYyBzY2hlbWEgdHlwZXMgKG51bWJlciwgaW50ZWdlciwgbnVsbCwgYXJyYXksIG9iamVjdCwgYm9vbGVhbiwgc3RyaW5nKSBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHNwZWNpZnlpbmcgYSBzdWJzZXQgb2YgdGhvc2UgdHlwZXMuIiksZm9ybWF0OlphKCJzY2hlbWEuanNvbi5mb3JtYXQiLCJEZXNjcmliZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgdGhlIHZhbHVlLiIpLGFsbE9mOlphKCJzY2hlbWEuanNvbi5hbGxPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGFsbCBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLGFueU9mOlphKCJzY2hlbWEuanNvbi5hbnlPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIHdoZXJlIGF0IGxlYXN0IG9uZSBtdXN0IG1hdGNoLiIpLG9uZU9mOlphKCJzY2hlbWEuanNvbi5vbmVPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGV4YWN0bHkgb25lIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksbm90OlphKCJzY2hlbWEuanNvbi5ub3QiLCJBIHNjaGVtYSB3aGljaCBtdXN0IG5vdCBtYXRjaC4iKSwkaWQ6WmEoInNjaGVtYS5qc29uLiRpZCIsIkEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzY2hlbWEuIiksJHJlZjpaYSgic2NoZW1hLmpzb24uJHJlZiIsIlJlZmVyZW5jZSBhIGRlZmluaXRpb24gaG9zdGVkIG9uIGFueSBsb2NhdGlvbi4iKSwkY29tbWVudDpaYSgic2NoZW1hLmpzb24uJGNvbW1lbnQiLCJDb21tZW50cyBmcm9tIHNjaGVtYSBhdXRob3JzIHRvIHJlYWRlcnMgb3IgbWFpbnRhaW5lcnMgb2YgdGhlIHNjaGVtYS4iKSxyZWFkT25seTpaYSgic2NoZW1hLmpzb24ucmVhZE9ubHkiLCJJbmRpY2F0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGluc3RhbmNlIGlzIG1hbmFnZWQgZXhjbHVzaXZlbHkgYnkgdGhlIG93bmluZyBhdXRob3JpdHkuIiksZXhhbXBsZXM6WmEoInNjaGVtYS5qc29uLmV4YW1wbGVzIiwiU2FtcGxlIEpTT04gdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NoZW1hLCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWxsdXN0cmF0aW5nIHVzYWdlLiIpLGNvbnRhaW5zOlphKCJzY2hlbWEuanNvbi5jb250YWlucyIsJ0FuIGFycmF5IGluc3RhbmNlIGlzIHZhbGlkIGFnYWluc3QgImNvbnRhaW5zIiBpZiBhdCBsZWFzdCBvbmUgb2YgaXRzIGVsZW1lbnRzIGlzIHZhbGlkIGFnYWluc3QgdGhlIGdpdmVuIHNjaGVtYS4nKSxwcm9wZXJ0eU5hbWVzOlphKCJzY2hlbWEuanNvbi5wcm9wZXJ0eU5hbWVzIiwiSWYgdGhlIGluc3RhbmNlIGlzIGFuIG9iamVjdCwgdGhpcyBrZXl3b3JkIHZhbGlkYXRlcyBpZiBldmVyeSBwcm9wZXJ0eSBuYW1lIGluIHRoZSBpbnN0YW5jZSB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgcHJvdmlkZWQgc2NoZW1hLiIpLGNvbnN0OlphKCJzY2hlbWEuanNvbi5jb25zdCIsIkFuIGluc3RhbmNlIHZhbGlkYXRlcyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGlzIGtleXdvcmQgaWYgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUga2V5d29yZC4iKSxjb250ZW50TWVkaWFUeXBlOlphKCJzY2hlbWEuanNvbi5jb250ZW50TWVkaWFUeXBlIiwiRGVzY3JpYmVzIHRoZSBtZWRpYSB0eXBlIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGNvbnRlbnRFbmNvZGluZzpaYSgic2NoZW1hLmpzb24uY29udGVudEVuY29kaW5nIiwiRGVzY3JpYmVzIHRoZSBjb250ZW50IGVuY29kaW5nIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGlmOlphKCJzY2hlbWEuanNvbi5pZiIsJ1RoZSB2YWxpZGF0aW9uIG91dGNvbWUgb2YgdGhlICJpZiIgc3Vic2NoZW1hIGNvbnRyb2xzIHdoaWNoIG9mIHRoZSAidGhlbiIgb3IgImVsc2UiIGtleXdvcmRzIGFyZSBldmFsdWF0ZWQuJyksdGhlbjpaYSgic2NoZW1hLmpzb24udGhlbiIsJ1RoZSAiaWYiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIHN1Y2NlZWRzLicpLGVsc2U6WmEoInNjaGVtYS5qc29uLmVsc2UiLCdUaGUgImVsc2UiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIGZhaWxzLicpfTtmb3IoSmEgaW4gWWEuc2NoZW1hcylmb3IoR2EgaW4oV2E9WWEuc2NoZW1hc1tKYV0pLnByb3BlcnRpZXMpImJvb2xlYW4iPT10eXBlb2YoSGE9V2EucHJvcGVydGllc1tHYV0pJiYoSGE9V2EucHJvcGVydGllc1tHYV09e30pLCh6YT1RYVtHYV0pP0hhLmRlc2NyaXB0aW9uPXphOmNvbnNvbGUubG9nKCIiLmNvbmNhdChHYSwiOiBsb2NhbGl6ZSgnc2NoZW1hLmpzb24uIikuY29uY2F0KEdhLCdcJywgIiIpJykpO1hhPSgoKT0+e3ZhciBlPXs0NzA6ZT0+e2Z1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeShlKSl9ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbixyPSIiLGk9MCxvPS0xLGE9MCxzPTA7czw9ZS5sZW5ndGg7KytzKXtpZihzPGUubGVuZ3RoKW49ZS5jaGFyQ29kZUF0KHMpO2Vsc2V7aWYoNDc9PT1uKWJyZWFrO249NDd9aWYoNDc9PT1uKXtpZihvPT09cy0xfHwxPT09YSk7ZWxzZSBpZihvIT09cy0xJiYyPT09YSl7aWYoci5sZW5ndGg8Mnx8MiE9PWl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSlpZihyLmxlbmd0aD4yKXt2YXIgbD1yLmxhc3RJbmRleE9mKCIvIik7aWYobCE9PXIubGVuZ3RoLTEpey0xPT09bD8ocj0iIixpPTApOmk9KHI9ci5zbGljZSgwLGwpKS5sZW5ndGgtMS1yLmxhc3RJbmRleE9mKCIvIiksbz1zLGE9MDtjb250aW51ZX19ZWxzZSBpZigyPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aCl7cj0iIixpPTAsbz1zLGE9MDtjb250aW51ZX10JiYoci5sZW5ndGg+MD9yKz0iLy4uIjpyPSIuLiIsaT0yKX1lbHNlIHIubGVuZ3RoPjA/cis9Ii8iK2Uuc2xpY2UobysxLHMpOnI9ZS5zbGljZShvKzEscyksaT1zLW8tMTtvPXMsYT0wfWVsc2UgNDY9PT1uJiYtMSE9PWE/KythOmE9LTF9cmV0dXJuIHJ9dmFyIHI9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGUscj0iIixpPSExLG89YXJndW1lbnRzLmxlbmd0aC0xO28+PS0xJiYhaTtvLS0pe3ZhciBhO28+PTA/YT1hcmd1bWVudHNbb106KHZvaWQgMD09PWUmJihlPXByb2Nlc3MuY3dkKCkpLGE9ZSksdChhKSwwIT09YS5sZW5ndGgmJihyPWErIi8iK3IsaT00Nz09PWEuY2hhckNvZGVBdCgwKSl9cmV0dXJuIHI9bihyLCFpKSxpP3IubGVuZ3RoPjA/Ii8iK3I6Ii8iOnIubGVuZ3RoPjA/cjoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihlKXtpZih0KGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7dmFyIHI9NDc9PT1lLmNoYXJDb2RlQXQoMCksaT00Nz09PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtyZXR1cm4gMCE9PShlPW4oZSwhcikpLmxlbmd0aHx8cnx8KGU9Ii4iKSxlLmxlbmd0aD4wJiZpJiYoZSs9Ii8iKSxyPyIvIitlOmV9LGlzQWJzb2x1dGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSksZS5sZW5ndGg+MCYmNDc9PT1lLmNoYXJDb2RlQXQoMCl9LGpvaW46ZnVuY3Rpb24oKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBlLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7KytuKXt2YXIgaT1hcmd1bWVudHNbbl07dChpKSxpLmxlbmd0aD4wJiYodm9pZCAwPT09ZT9lPWk6ZSs9Ii8iK2kpfXJldHVybiB2b2lkIDA9PT1lPyIuIjpyLm5vcm1hbGl6ZShlKX0scmVsYXRpdmU6ZnVuY3Rpb24oZSxuKXtpZih0KGUpLHQobiksZT09PW4pcmV0dXJuIiI7aWYoKGU9ci5yZXNvbHZlKGUpKT09PShuPXIucmVzb2x2ZShuKSkpcmV0dXJuIiI7Zm9yKHZhciBpPTE7aTxlLmxlbmd0aCYmNDc9PT1lLmNoYXJDb2RlQXQoaSk7KytpKTtmb3IodmFyIG89ZS5sZW5ndGgsYT1vLWkscz0xO3M8bi5sZW5ndGgmJjQ3PT09bi5jaGFyQ29kZUF0KHMpOysrcyk7Zm9yKHZhciBsPW4ubGVuZ3RoLXMsYz1hPGw/YTpsLHU9LTEsaD0wO2g8PWM7KytoKXtpZihoPT09Yyl7aWYobD5jKXtpZig0Nz09PW4uY2hhckNvZGVBdChzK2gpKXJldHVybiBuLnNsaWNlKHMraCsxKTtpZigwPT09aClyZXR1cm4gbi5zbGljZShzK2gpfWVsc2UgYT5jJiYoNDc9PT1lLmNoYXJDb2RlQXQoaStoKT91PWg6MD09PWgmJih1PTApKTticmVha312YXIgZj1lLmNoYXJDb2RlQXQoaStoKTtpZihmIT09bi5jaGFyQ29kZUF0KHMraCkpYnJlYWs7NDc9PT1mJiYodT1oKX12YXIgZD0iIjtmb3IoaD1pK3UrMTtoPD1vOysraCloIT09byYmNDchPT1lLmNoYXJDb2RlQXQoaCl8fCgwPT09ZC5sZW5ndGg/ZCs9Ii4uIjpkKz0iLy4uIik7cmV0dXJuIGQubGVuZ3RoPjA/ZCtuLnNsaWNlKHMrdSk6KHMrPXUsNDc9PT1uLmNoYXJDb2RlQXQocykmJisrcyxuLnNsaWNlKHMpKX0sX21ha2VMb25nOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkaXJuYW1lOmZ1bmN0aW9uKGUpe2lmKHQoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIG49ZS5jaGFyQ29kZUF0KDApLHI9NDc9PT1uLGk9LTEsbz0hMCxhPWUubGVuZ3RoLTE7YT49MTstLWEpaWYoNDc9PT0obj1lLmNoYXJDb2RlQXQoYSkpKXtpZighbyl7aT1hO2JyZWFrfX1lbHNlIG89ITE7cmV0dXJuLTE9PT1pP3I/Ii8iOiIuIjpyJiYxPT09aT8iLy8iOmUuc2xpY2UoMCxpKX0sYmFzZW5hbWU6ZnVuY3Rpb24oZSxuKXtpZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO3QoZSk7dmFyIHIsaT0wLG89LTEsYT0hMDtpZih2b2lkIDAhPT1uJiZuLmxlbmd0aD4wJiZuLmxlbmd0aDw9ZS5sZW5ndGgpe2lmKG4ubGVuZ3RoPT09ZS5sZW5ndGgmJm49PT1lKXJldHVybiIiO3ZhciBzPW4ubGVuZ3RoLTEsbD0tMTtmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgYz1lLmNoYXJDb2RlQXQocik7aWYoNDc9PT1jKXtpZighYSl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PWwmJihhPSExLGw9cisxKSxzPj0wJiYoYz09PW4uY2hhckNvZGVBdChzKT8tMT09LS1zJiYobz1yKToocz0tMSxvPWwpKX1yZXR1cm4gaT09PW8/bz1sOi0xPT09byYmKG89ZS5sZW5ndGgpLGUuc2xpY2UoaSxvKX1mb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWlmKDQ3PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighYSl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PW8mJihhPSExLG89cisxKTtyZXR1cm4tMT09PW8/IiI6ZS5zbGljZShpLG8pfSxleHRuYW1lOmZ1bmN0aW9uKGUpe3QoZSk7Zm9yKHZhciBuPS0xLHI9MCxpPS0xLG89ITAsYT0wLHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7dmFyIGw9ZS5jaGFyQ29kZUF0KHMpO2lmKDQ3IT09bCktMT09PWkmJihvPSExLGk9cysxKSw0Nj09PWw/LTE9PT1uP249czoxIT09YSYmKGE9MSk6LTEhPT1uJiYoYT0tMSk7ZWxzZSBpZighbyl7cj1zKzE7YnJlYWt9fXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7cmV0dXJuIG49KHQ9ZSkuZGlyfHx0LnJvb3Qscj10LmJhc2V8fCh0Lm5hbWV8fCIiKSsodC5leHR8fCIiKSxuP249PT10LnJvb3Q/bityOm4rIi8iK3I6cjt2YXIgdCxuLHJ9LHBhcnNlOmZ1bmN0aW9uKGUpe3QoZSk7dmFyIG49e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbjt2YXIgcixpPWUuY2hhckNvZGVBdCgwKSxvPTQ3PT09aTtvPyhuLnJvb3Q9Ii8iLHI9MSk6cj0wO2Zvcih2YXIgYT0tMSxzPTAsbD0tMSxjPSEwLHU9ZS5sZW5ndGgtMSxoPTA7dT49cjstLXUpaWYoNDchPT0oaT1lLmNoYXJDb2RlQXQodSkpKS0xPT09bCYmKGM9ITEsbD11KzEpLDQ2PT09aT8tMT09PWE/YT11OjEhPT1oJiYoaD0xKTotMSE9PWEmJihoPS0xKTtlbHNlIGlmKCFjKXtzPXUrMTticmVha31yZXR1cm4tMT09PWF8fC0xPT09bHx8MD09PWh8fDE9PT1oJiZhPT09bC0xJiZhPT09cysxPy0xIT09bCYmKG4uYmFzZT1uLm5hbWU9MD09PXMmJm8/ZS5zbGljZSgxLGwpOmUuc2xpY2UocyxsKSk6KDA9PT1zJiZvPyhuLm5hbWU9ZS5zbGljZSgxLGEpLG4uYmFzZT1lLnNsaWNlKDEsbCkpOihuLm5hbWU9ZS5zbGljZShzLGEpLG4uYmFzZT1lLnNsaWNlKHMsbCkpLG4uZXh0PWUuc2xpY2UoYSxsKSkscz4wP24uZGlyPWUuc2xpY2UoMCxzLTEpOm8mJihuLmRpcj0iLyIpLG59LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9O3IucG9zaXg9cixlLmV4cG9ydHM9cn0sNDQ3OihlLHQsbik9Pnt2YXIgcjtpZihuLnIodCksbi5kKHQse1VSSTooKT0+ZyxVdGlsczooKT0+Tn0pLCJvYmplY3QiPT10eXBlb2YgcHJvY2VzcylyPSJ3aW4zMiI9PT1wcm9jZXNzLnBsYXRmb3JtO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3Ipe3ZhciBpPW5hdmlnYXRvci51c2VyQWdlbnQ7cj1pLmluZGV4T2YoIldpbmRvd3MiKT49MH12YXIgbyxhLHM9KG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4obz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHQpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9byhlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0pLGw9L15cd1tcd1xkKy4tXSokLyxjPS9eXC8vLHU9L15cL1wvLztmdW5jdGlvbiBoKGUsdCl7aWYoIWUuc2NoZW1lJiZ0KXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogU2NoZW1lIGlzIG1pc3Npbmc6IHtzY2hlbWU6ICIiLCBhdXRob3JpdHk6ICInLmNvbmNhdChlLmF1dGhvcml0eSwnIiwgcGF0aDogIicpLmNvbmNhdChlLnBhdGgsJyIsIHF1ZXJ5OiAiJykuY29uY2F0KGUucXVlcnksJyIsIGZyYWdtZW50OiAiJykuY29uY2F0KGUuZnJhZ21lbnQsJyJ9JykpO2lmKGUuc2NoZW1lJiYhbC50ZXN0KGUuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoZS5wYXRoKWlmKGUuYXV0aG9yaXR5KXtpZighYy50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZih1LnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX12YXIgZj0iIixkPSIvIixtPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO3ZvaWQgMD09PW8mJihvPSExKSwib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHxmLHRoaXMuYXV0aG9yaXR5PWUuYXV0aG9yaXR5fHxmLHRoaXMucGF0aD1lLnBhdGh8fGYsdGhpcy5xdWVyeT1lLnF1ZXJ5fHxmLHRoaXMuZnJhZ21lbnQ9ZS5mcmFnbWVudHx8Zik6KHRoaXMuc2NoZW1lPShzPW8sKGE9ZSl8fHM/YToiZmlsZSIpLHRoaXMuYXV0aG9yaXR5PXR8fGYsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1kJiYodD1kK3QpOnQ9ZH1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8ZiksdGhpcy5xdWVyeT1yfHxmLHRoaXMuZnJhZ21lbnQ9aXx8ZixoKHRoaXMsbykpfXJldHVybiBlLmlzVXJpPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8ISF0JiYic3RyaW5nIj09dHlwZW9mIHQuYXV0aG9yaXR5JiYic3RyaW5nIj09dHlwZW9mIHQuZnJhZ21lbnQmJiJzdHJpbmciPT10eXBlb2YgdC5wYXRoJiYic3RyaW5nIj09dHlwZW9mIHQucXVlcnkmJiJzdHJpbmciPT10eXBlb2YgdC5zY2hlbWUmJiJzdHJpbmciPT10eXBlb2YgdC5mc1BhdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LndpdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRvU3RyaW5nfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB3KHRoaXMsITEpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLndpdGg9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIHQ9ZS5zY2hlbWUsbj1lLmF1dGhvcml0eSxyPWUucGF0aCxpPWUucXVlcnksbz1lLmZyYWdtZW50O3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PWYpLHZvaWQgMD09PW4/bj10aGlzLmF1dGhvcml0eTpudWxsPT09biYmKG49Ziksdm9pZCAwPT09cj9yPXRoaXMucGF0aDpudWxsPT09ciYmKHI9Ziksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPWYpLHZvaWQgMD09PW8/bz10aGlzLmZyYWdtZW50Om51bGw9PT1vJiYobz1mKSx0PT09dGhpcy5zY2hlbWUmJm49PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGIodCxuLHIsaSxvKX0sZS5wYXJzZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbj1tLmV4ZWMoZSk7cmV0dXJuIG4/bmV3IGIoblsyXXx8ZixFKG5bNF18fGYpLEUobls1XXx8ZiksRShuWzddfHxmKSxFKG5bOV18fGYpLHQpOm5ldyBiKGYsZixmLGYsZil9LGUuZmlsZT1mdW5jdGlvbihlKXt2YXIgdD1mO2lmKHImJihlPWUucmVwbGFjZSgvXFwvZyxkKSksZVswXT09PWQmJmVbMV09PT1kKXt2YXIgbj1lLmluZGV4T2YoZCwyKTstMT09PW4/KHQ9ZS5zdWJzdHJpbmcoMiksZT1kKToodD1lLnN1YnN0cmluZygyLG4pLGU9ZS5zdWJzdHJpbmcobil8fGQpfXJldHVybiBuZXcgYigiZmlsZSIsdCxlLGYsZil9LGUuZnJvbT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgYihlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50KTtyZXR1cm4gaCh0LCEwKSx0fSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLF8odGhpcyxlKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucmV2aXZlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBlKXJldHVybiB0O3ZhciBuPW5ldyBiKHQpO3JldHVybiBuLl9mb3JtYXR0ZWQ9dC5leHRlcm5hbCxuLl9mc1BhdGg9dC5fc2VwPT09cD90LmZzUGF0aDpudWxsLG59cmV0dXJuIHR9LGV9KCkscD1yPzE6dm9pZCAwLGI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5fZm9ybWF0dGVkPW51bGwsdC5fZnNQYXRoPW51bGwsdH1yZXR1cm4gcyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD13KHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxlP18odGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1fKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoZS5mc1BhdGg9dGhpcy5fZnNQYXRoLGUuX3NlcD1wKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX0sdH0oZyksdj0oKGE9e30pWzU4XT0iJTNBIixhWzQ3XT0iJTJGIixhWzYzXT0iJTNGIixhWzM1XT0iJTIzIixhWzkxXT0iJTVCIixhWzkzXT0iJTVEIixhWzY0XT0iJTQwIixhWzMzXT0iJTIxIixhWzM2XT0iJTI0IixhWzM4XT0iJTI2IixhWzM5XT0iJTI3IixhWzQwXT0iJTI4IixhWzQxXT0iJTI5IixhWzQyXT0iJTJBIixhWzQzXT0iJTJCIixhWzQ0XT0iJTJDIixhWzU5XT0iJTNCIixhWzYxXT0iJTNEIixhWzMyXT0iJTIwIixhKTtmdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciBuPXZvaWQgMCxyPS0xLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZS5jaGFyQ29kZUF0KGkpO2lmKG8+PTk3JiZvPD0xMjJ8fG8+PTY1JiZvPD05MHx8bz49NDgmJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHx0JiY0Nz09PW8pLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLHZvaWQgMCE9PW4mJihuKz1lLmNoYXJBdChpKSk7ZWxzZXt2b2lkIDA9PT1uJiYobj1lLnN1YnN0cigwLGkpKTt2YXIgYT12W29dO3ZvaWQgMCE9PWE/KC0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSxuKz1hKTotMT09PXImJihyPWkpfX1yZXR1cm4tMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocikpKSx2b2lkIDAhPT1uP246ZX1mdW5jdGlvbiBDKGUpe2Zvcih2YXIgdD12b2lkIDAsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lLmNoYXJDb2RlQXQobik7MzU9PT1yfHw2Mz09PXI/KHZvaWQgMD09PXQmJih0PWUuc3Vic3RyKDAsbikpLHQrPXZbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gdyhlLHQpe3ZhciBuO3JldHVybiBuPWUuYXV0aG9yaXR5JiZlLnBhdGgubGVuZ3RoPjEmJiJmaWxlIj09PWUuc2NoZW1lPyIvLyIuY29uY2F0KGUuYXV0aG9yaXR5KS5jb25jYXQoZS5wYXRoKTo0Nz09PWUucGF0aC5jaGFyQ29kZUF0KDApJiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJjU4PT09ZS5wYXRoLmNoYXJDb2RlQXQoMik/dD9lLnBhdGguc3Vic3RyKDEpOmUucGF0aFsxXS50b0xvd2VyQ2FzZSgpK2UucGF0aC5zdWJzdHIoMik6ZS5wYXRoLHImJihuPW4ucmVwbGFjZSgvXC8vZywiXFwiKSksbn1mdW5jdGlvbiBfKGUsdCl7dmFyIG49dD9DOnkscj0iIixpPWUuc2NoZW1lLG89ZS5hdXRob3JpdHksYT1lLnBhdGgscz1lLnF1ZXJ5LGw9ZS5mcmFnbWVudDtpZihpJiYocis9aSxyKz0iOiIpLChvfHwiZmlsZSI9PT1pKSYmKHIrPWQscis9ZCksbyl7dmFyIGM9by5pbmRleE9mKCJAIik7aWYoLTEhPT1jKXt2YXIgdT1vLnN1YnN0cigwLGMpO289by5zdWJzdHIoYysxKSwtMT09PShjPXUuaW5kZXhPZigiOiIpKT9yKz1uKHUsITEpOihyKz1uKHUuc3Vic3RyKDAsYyksITEpLHIrPSI6IixyKz1uKHUuc3Vic3RyKGMrMSksITEpKSxyKz0iQCJ9LTE9PT0oYz0obz1vLnRvTG93ZXJDYXNlKCkpLmluZGV4T2YoIjoiKSk/cis9bihvLCExKToocis9bihvLnN1YnN0cigwLGMpLCExKSxyKz1vLnN1YnN0cihjKSl9aWYoYSl7aWYoYS5sZW5ndGg+PTMmJjQ3PT09YS5jaGFyQ29kZUF0KDApJiY1OD09PWEuY2hhckNvZGVBdCgyKSkoaD1hLmNoYXJDb2RlQXQoMSkpPj02NSYmaDw9OTAmJihhPSIvIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShoKzMyKSwiOiIpLmNvbmNhdChhLnN1YnN0cigzKSkpO2Vsc2UgaWYoYS5sZW5ndGg+PTImJjU4PT09YS5jaGFyQ29kZUF0KDEpKXt2YXIgaDsoaD1hLmNoYXJDb2RlQXQoMCkpPj02NSYmaDw9OTAmJihhPSIiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGgrMzIpLCI6IikuY29uY2F0KGEuc3Vic3RyKDIpKSl9cis9bihhLCEwKX1yZXR1cm4gcyYmKHIrPSI/IixyKz1uKHMsITEpKSxsJiYocis9IiMiLHIrPXQ/bDp5KGwsITEpKSxyfWZ1bmN0aW9uIFMoZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIGUubGVuZ3RoPjM/ZS5zdWJzdHIoMCwzKStTKGUuc3Vic3RyKDMpKTplfX12YXIgQT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBFKGUpe3JldHVybiBlLm1hdGNoKEEpP2UucmVwbGFjZShBLChmdW5jdGlvbihlKXtyZXR1cm4gUyhlKX0pKTplfXZhciBOLHgsTD1uKDQ3MCksaz1mdW5jdGlvbihlLHQsbil7aWYobnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciByLGk9MCxvPXQubGVuZ3RoO2k8bztpKyspIXImJmkgaW4gdHx8KHJ8fChyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSkscltpXT10W2ldKTtyZXR1cm4gZS5jb25jYXQocnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfSxUPUwucG9zaXh8fEw7KHg9Tnx8KE49e30pKS5qb2luUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS53aXRoKHtwYXRoOlQuam9pbi5hcHBseShULGsoW2UucGF0aF0sdCwhMSkpfSl9LHgucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dmFyIHI9ZS5wYXRofHwiLyI7cmV0dXJuIGUud2l0aCh7cGF0aDpULnJlc29sdmUuYXBwbHkoVCxrKFtyXSx0LCExKSl9KX0seC5kaXJuYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PVQuZGlybmFtZShlLnBhdGgpO3JldHVybiAxPT09dC5sZW5ndGgmJjQ2PT09dC5jaGFyQ29kZUF0KDApP2U6ZS53aXRoKHtwYXRoOnR9KX0seC5iYXNlbmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gVC5iYXNlbmFtZShlLnBhdGgpfSx4LmV4dG5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFQuZXh0bmFtZShlLnBhdGgpfX19LHQ9e307ZnVuY3Rpb24gbihyKXtpZih0W3JdKXJldHVybiB0W3JdLmV4cG9ydHM7dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfXJldHVybiBuLmQ9KGUsdCk9Pntmb3IodmFyIHIgaW4gdCluLm8odCxyKSYmIW4ubyhlLHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDp0W3JdfSl9LG4ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksbi5yPWU9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuKDQ0Nyl9KSgpO3ZhcntVUkk6ZXMsVXRpbHM6dHN9PVhhO2Z1bmN0aW9uIG5zKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7Zm9yKHZhciBuLHI9U3RyaW5nKGUpLGk9IiIsbz0hIXQmJiEhdC5leHRlbmRlZCxhPSEhdCYmISF0Lmdsb2JzdGFyLHM9ITEsbD10JiYic3RyaW5nIj09dHlwZW9mIHQuZmxhZ3M/dC5mbGFnczoiIixjPTAsdT1yLmxlbmd0aDtjPHU7YysrKXN3aXRjaChuPXJbY10pe2Nhc2UiLyI6Y2FzZSIkIjpjYXNlIl4iOmNhc2UiKyI6Y2FzZSIuIjpjYXNlIigiOmNhc2UiKSI6Y2FzZSI9IjpjYXNlIiEiOmNhc2UifCI6aSs9IlxcIituO2JyZWFrO2Nhc2UiPyI6aWYobyl7aSs9Ii4iO2JyZWFrfWNhc2UiWyI6Y2FzZSJdIjppZihvKXtpKz1uO2JyZWFrfWNhc2UieyI6aWYobyl7cz0hMCxpKz0iKCI7YnJlYWt9Y2FzZSJ9IjppZihvKXtzPSExLGkrPSIpIjticmVha31jYXNlIiwiOmlmKHMpe2krPSJ8IjticmVha31pKz0iXFwiK247YnJlYWs7Y2FzZSIqIjpmb3IodmFyIGg9cltjLTFdLGY9MTsiKiI9PT1yW2MrMV07KWYrKyxjKys7dmFyIGQ9cltjKzFdO2lmKGEpZj4xJiYoIi8iPT09aHx8dm9pZCAwPT09aHx8InsiPT09aHx8IiwiPT09aCkmJigiLyI9PT1kfHx2b2lkIDA9PT1kfHwiLCI9PT1kfHwifSI9PT1kKT8oIi8iPT09ZD9jKys6Ii8iPT09aCYmaS5lbmRzV2l0aCgiXFwvIikmJihpPWkuc3Vic3RyKDAsaS5sZW5ndGgtMikpLGkrPSIoKD86W14vXSooPzovfCQpKSopIik6aSs9IihbXi9dKikiO2Vsc2UgaSs9Ii4qIjticmVhaztkZWZhdWx0OmkrPW59cmV0dXJuIGwmJn5sLmluZGV4T2YoImciKXx8KGk9Il4iK2krIiQiKSxuZXcgUmVnRXhwKGksbCl9dmFyIHJzLGlzPW9hKCksb3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5nbG9iV3JhcHBlcnM9W107dHJ5e2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxvPSIhIiE9PWlbMF07b3x8KGk9aS5zdWJzdHJpbmcoMSkpLGkubGVuZ3RoPjAmJigiLyI9PT1pWzBdJiYoaT1pLnN1YnN0cmluZygxKSksdGhpcy5nbG9iV3JhcHBlcnMucHVzaCh7cmVnZXhwOm5zKCIqKi8iK2kse2V4dGVuZGVkOiEwLGdsb2JzdGFyOiEwfSksaW5jbHVkZTpvfSkpfXRoaXMudXJpcz10fWNhdGNoKGUpe3RoaXMuZ2xvYldyYXBwZXJzLmxlbmd0aD0wLHRoaXMudXJpcz1bXX19cmV0dXJuIGUucHJvdG90eXBlLm1hdGNoZXNQYXR0ZXJuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxuPTAscj10aGlzLmdsb2JXcmFwcGVycztuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxvPWkucmVnZXhwLGE9aS5pbmNsdWRlO28udGVzdChlKSYmKHQ9YSl9cmV0dXJuIHR9LGUucHJvdG90eXBlLmdldFVSSXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cmlzfSxlfSgpLGFzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5zZXJ2aWNlPWUsdGhpcy51cmk9dCx0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0LHRoaXMuYW5jaG9ycz12b2lkIDAsbiYmKHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UucHJvbWlzZS5yZXNvbHZlKG5ldyBzcyhuKSkpfXJldHVybiBlLnByb3RvdHlwZS5nZXRVbnJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5yZXNvbHZlZFNjaGVtYXx8KHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UubG9hZFNjaGVtYSh0aGlzLnVyaSkpLHRoaXMudW5yZXNvbHZlZFNjaGVtYX0sZS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnJlc29sdmVkU2NoZW1hfHwodGhpcy5yZXNvbHZlZFNjaGVtYT10aGlzLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXJ2aWNlLnJlc29sdmVTY2hlbWFDb250ZW50KHQsZSl9KSkpLHRoaXMucmVzb2x2ZWRTY2hlbWF9LGUucHJvdG90eXBlLmNsZWFyU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIGU9ISF0aGlzLnVucmVzb2x2ZWRTY2hlbWE7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMudW5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKSx0aGlzLmFuY2hvcnM9dm9pZCAwLGV9LGV9KCksc3M9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fSxscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fXJldHVybiBlLnByb3RvdHlwZS5nZXRTZWN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHRoaXMuc2NoZW1hKTtpZih0KXJldHVybiBDYSh0KX0sZS5wcm90b3R5cGUuZ2V0U2VjdGlvblJlY3Vyc2l2ZT1mdW5jdGlvbihlLHQpe2lmKCF0fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49ZS5zaGlmdCgpO2lmKHQucHJvcGVydGllcyYmKHQucHJvcGVydGllc1tuXSwxKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wcm9wZXJ0aWVzW25dKTtpZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgcj0wLGk9T2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcyk7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl0sYT1xaShvKTtpZihudWxsPT1hP3ZvaWQgMDphLnRlc3QobikpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucGF0dGVyblByb3BlcnRpZXNbb10pfWVsc2V7aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtpZihuLm1hdGNoKCJbMC05XSsiKSlpZihBcnJheS5pc0FycmF5KHQuaXRlbXMpKXt2YXIgcz1wYXJzZUludChuLDEwKTtpZighaXNOYU4ocykmJnQuaXRlbXNbc10pcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXNbc10pfWVsc2UgaWYodC5pdGVtcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtcyl9fSxlfSgpLGNzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5jb250ZXh0U2VydmljZT10LHRoaXMucmVxdWVzdFNlcnZpY2U9ZSx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1ufHxQcm9taXNlLHRoaXMuY2FsbE9uRGlzcG9zZT1bXSx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXM9e30sdGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM9W10sdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e319cmV0dXJuIGUucHJvdG90eXBlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHMpLmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIG49ZXMucGFyc2UodCkuc2NoZW1lO3JldHVybiJzY2hlbWFzZXJ2aWNlIiE9PW4mJighZXx8ZShuKSl9KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicHJvbWlzZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmNhbGxPbkRpc3Bvc2UubGVuZ3RoPjA7KXRoaXMuY2FsbE9uRGlzcG9zZS5wb3AoKSgpfSxlLnByb3RvdHlwZS5vblJlc291cmNlQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDA7Zm9yKHZhciBuPSExLHI9W2U9aHMoZSldLGk9T2JqZWN0LmtleXModGhpcy5zY2hlbWFzQnlJZCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlbWFzQnlJZFtlXX0pKTtyLmxlbmd0aDspZm9yKHZhciBvPXIucG9wKCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO3MmJihzLnVyaT09PW98fHMuZGVwZW5kZW5jaWVzLmhhcyhvKSkmJihzLnVyaSE9PW8mJnIucHVzaChzLnVyaSkscy5jbGVhclNjaGVtYSgpJiYobj0hMCksaVthXT12b2lkIDApfXJldHVybiBufSxlLnByb3RvdHlwZS5zZXRTY2hlbWFDb250cmlidXRpb25zPWZ1bmN0aW9uKGUpe2lmKGUuc2NoZW1hcyl7dmFyIHQ9ZS5zY2hlbWFzO2Zvcih2YXIgbiBpbiB0KXt2YXIgcj1ocyhuKTt0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbcl09dGhpcy5hZGRTY2hlbWFIYW5kbGUocix0W25dKX19aWYoQXJyYXkuaXNBcnJheShlLnNjaGVtYUFzc29jaWF0aW9ucykpZm9yKHZhciBpPTAsbz1lLnNjaGVtYUFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXSxzPWEudXJpcy5tYXAoaHMpLGw9dGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKGEucGF0dGVybixzKTt0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucy5wdXNoKGwpfX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hSGFuZGxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IGFzKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXT1uLG59LGUucHJvdG90eXBlLmdldE9yQWRkU2NoZW1hSGFuZGxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbZV18fHRoaXMuYWRkU2NoZW1hSGFuZGxlKGUsdCl9LGUucHJvdG90eXBlLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgb3MoZSx0KTtyZXR1cm4gdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKG4pLG59LGUucHJvdG90eXBlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWhzKGUpO3JldHVybiB0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW3JdPSEwLHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHQmJnRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbih0LFtyXSksbj90aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pOnRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocil9LGUucHJvdG90eXBlLmNsZWFyRXh0ZXJuYWxTY2hlbWFzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9LHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcyl0aGlzLnNjaGVtYXNCeUlkW2VdPXRoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tlXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW2VdPSEwO2Zvcih2YXIgdD0wLG49dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKHIpfX0sZS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oZSl7dmFyIHQ9aHMoZSksbj10aGlzLnNjaGVtYXNCeUlkW3RdO3JldHVybiBuP24uZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApfSxlLnByb3RvdHlwZS5sb2FkU2NoZW1hPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLnJlcXVlc3RTZXJ2aWNlKXt2YXIgdD1pcygianNvbi5zY2hlbWEubm9yZXF1ZXN0c2VydmljZSIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nLiBObyBzY2hlbWEgcmVxdWVzdCBzZXJ2aWNlIGF2YWlsYWJsZSIsZnMoZSkpO3JldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgc3Moe30sW3RdKSl9cmV0dXJuIHRoaXMucmVxdWVzdFNlcnZpY2UoZSkudGhlbigoZnVuY3Rpb24odCl7aWYoIXQpe3ZhciBuPWlzKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogTm8gY29udGVudC4iLGZzKGUpKTtyZXR1cm4gbmV3IHNzKHt9LFtuXSl9dmFyIHIsaT1bXTtyPVJpKHQsaSk7dmFyIG89aS5sZW5ndGg/W2lzKCJqc29uLnNjaGVtYS5pbnZhbGlkRm9ybWF0IiwiVW5hYmxlIHRvIHBhcnNlIGNvbnRlbnQgZnJvbSAnezB9JzogUGFyc2UgZXJyb3IgYXQgb2Zmc2V0IHsxfS4iLGZzKGUpLGlbMF0ub2Zmc2V0KV06W107cmV0dXJuIG5ldyBzcyhyLG8pfSksKGZ1bmN0aW9uKHQpe3ZhciBuPXQudG9TdHJpbmcoKSxyPXQudG9TdHJpbmcoKS5zcGxpdCgiRXJyb3I6ICIpO3JldHVybiByLmxlbmd0aD4xJiYobj1yWzFdKSxqaShuLCIuIikmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtMSkpLG5ldyBzcyh7fSxbaXMoImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiB7MX0uIixmcyhlKSxuKV0pfSkpfSxlLnByb3RvdHlwZS5yZXNvbHZlU2NoZW1hQ29udGVudD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1lLmVycm9ycy5zbGljZSgwKSxpPWUuc2NoZW1hO2lmKGkuJHNjaGVtYSl7dmFyIG89aHMoaS4kc2NoZW1hKTtpZigiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wMy9zY2hlbWEiPT09bylyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IGxzKHt9LFtpcygianNvbi5zY2hlbWEuZHJhZnQwMy5ub3RzdXBwb3J0ZWQiLCJEcmFmdC0wMyBzY2hlbWFzIGFyZSBub3Qgc3VwcG9ydGVkLiIpXSkpOyJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDE5LTA5L3NjaGVtYSI9PT1vP3IucHVzaChpcygianNvbi5zY2hlbWEuZHJhZnQyMDE5MDkubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAxOS0wOSBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSk6Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIj09PW8mJnIucHVzaChpcygianNvbi5zY2hlbWEuZHJhZnQyMDIwMTIubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAyMC0xMiBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSl9dmFyIGE9dGhpcy5jb250ZXh0U2VydmljZSxzPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLGEscyxsO3ZvaWQgMD09PWl8fDA9PT1pLmxlbmd0aD9vPXQ6Ii8iPT09aS5jaGFyQXQoMCk/bz1mdW5jdGlvbihlLHQpe3Q9ZGVjb2RlVVJJQ29tcG9uZW50KHQpO3ZhciBuPWU7cmV0dXJuIi8iPT09dFswXSYmKHQ9dC5zdWJzdHJpbmcoMSkpLHQuc3BsaXQoIi8iKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+IiksIShuPW5bZV0pfSkpLG59KHQsaSk6KGE9dCxsPWksKHM9bikuYW5jaG9yc3x8KHMuYW5jaG9ycz11KGEpKSxvPXMuYW5jaG9ycy5nZXQobCkpLG8/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYhZS5oYXNPd25Qcm9wZXJ0eShuKSYmImlkIiE9PW4mJiIkaWQiIT09biYmKGVbbl09dFtuXSl9KGUsbyk6ci5wdXNoKGlzKCJqc29uLnNjaGVtYS5pbnZhbGlkaWQiLCIkcmVmICd7MH0nIGluICd7MX0nIGNhbiBub3QgYmUgcmVzb2x2ZWQuIixpLG4udXJpKSl9LGw9ZnVuY3Rpb24oZSx0LGksbyl7YSYmIS9eW0EtWmEtel1bQS1aYS16MC05K1wtLitdKjpcL1wvLiovLnRlc3QodCkmJih0PWEucmVzb2x2ZVJlbGF0aXZlUGF0aCh0LG8udXJpKSksdD1ocyh0KTt2YXIgbD1uLmdldE9yQWRkU2NoZW1hSGFuZGxlKHQpO3JldHVybiBsLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbihuKXtpZihvLmRlcGVuZGVuY2llcy5hZGQodCksbi5lcnJvcnMubGVuZ3RoKXt2YXIgYT1pP3QrIiMiK2k6dDtyLnB1c2goaXMoImpzb24uc2NoZW1hLnByb2JsZW1sb2FkaW5ncmVmIiwiUHJvYmxlbXMgbG9hZGluZyByZWZlcmVuY2UgJ3swfSc6IHsxfSIsYSxuLmVycm9yc1swXSkpfXJldHVybiBzKGUsbi5zY2hlbWEsbCxpKSxjKGUsbi5zY2hlbWEsbCl9KSl9LGM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPVtdO3JldHVybiBuLnRyYXZlcnNlTm9kZXMoZSwoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPW5ldyBTZXQ7ZS4kcmVmOyl7dmFyIG89ZS4kcmVmLGE9by5zcGxpdCgiIyIsMik7aWYoZGVsZXRlIGUuJHJlZixhWzBdLmxlbmd0aD4wKXJldHVybiB2b2lkIGkucHVzaChsKGUsYVswXSxhWzFdLHIpKTtpZighbi5oYXMobykpe3ZhciBjPWFbMV07cyhlLHQscixjKSxuLmFkZChvKX19fSkpLG4ucHJvbWlzZS5hbGwoaSl9LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE1hcDtyZXR1cm4gbi50cmF2ZXJzZU5vZGVzKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPWUuJGlkfHxlLmlkO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIiMiPT09bi5jaGFyQXQoMCkpe3ZhciBpPW4uc3Vic3RyaW5nKDEpO3QuaGFzKGkpP3IucHVzaChpcygianNvbi5zY2hlbWEuZHVwbGljYXRlaWQiLCJEdXBsaWNhdGUgaWQgZGVjbGFyYXRpb246ICd7MH0nIixuKSk6dC5zZXQoaSxlKX19KSksdH07cmV0dXJuIGMoaSxpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHMoaSxyKX0pKX0sZS5wcm90b3R5cGUudHJhdmVyc2VOb2Rlcz1mdW5jdGlvbihlLHQpe2lmKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtmb3IodmFyIG49bmV3IFNldCxyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTsib2JqZWN0Ij09dHlwZW9mIGkmJmEucHVzaChpKX19LGk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKCJvYmplY3QiPT10eXBlb2YgaSlmb3IodmFyIG8gaW4gaSl7dmFyIHM9byxsPWlbc107Im9iamVjdCI9PXR5cGVvZiBsJiZhLnB1c2gobCl9fX0sbz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MCxzPWk7bzxzLmxlbmd0aDtvKyspe3ZhciBsPXNbb107Im9iamVjdCI9PXR5cGVvZiBsJiZhLnB1c2gobCl9fX0sYT1bZV0scz1hLnBvcCgpO3M7KW4uaGFzKHMpfHwobi5hZGQocyksdChzKSxyKHMuaXRlbXMscy5hZGRpdGlvbmFsSXRlbXMscy5hZGRpdGlvbmFsUHJvcGVydGllcyxzLm5vdCxzLmNvbnRhaW5zLHMucHJvcGVydHlOYW1lcyxzLmlmLHMudGhlbixzLmVsc2UpLGkocy5kZWZpbml0aW9ucyxzLnByb3BlcnRpZXMscy5wYXR0ZXJuUHJvcGVydGllcyxzLmRlcGVuZGVuY2llcyksbyhzLmFueU9mLHMuYWxsT2Yscy5vbmVPZixzLml0ZW1zKSkscz1hLnBvcCgpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGcm9tUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKCJvYmplY3QiPT09KG51bGw9PT0obj10LnJvb3QpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnR5cGUpKWZvcih2YXIgaT0wLG89dC5yb290LnByb3BlcnRpZXM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoIiRzY2hlbWEiPT09YS5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KHI9YS52YWx1ZU5vZGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnR5cGUpKXt2YXIgcz1hLnZhbHVlTm9kZS52YWx1ZTtyZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZSYmIS9eXHdbXHdcZCsuLV0qOi8udGVzdChzKSYmKHM9dGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlUmVsYXRpdmVQYXRoKHMsZSkpLHN9fX0sZS5wcm90b3R5cGUuZ2V0QXNzb2NpYXRlZFNjaGVtYXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksbj1bXSxyPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gZXMucGFyc2UoZSkud2l0aCh7ZnJhZ21lbnQ6bnVsbCxxdWVyeTpudWxsfSkudG9TdHJpbmcoKX1jYXRjaCh0KXtyZXR1cm4gZX19KGUpLGk9MCxvPXRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoYS5tYXRjaGVzUGF0dGVybihyKSlmb3IodmFyIHM9MCxsPWEuZ2V0VVJJcygpO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3RbY118fChuLnB1c2goYyksdFtjXT0hMCl9fXJldHVybiBufSxlLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10JiZ0aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO3JldHVybiBuP1tuXTp0aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7aWYobil7dmFyIHI9aHMobik7cmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocikuZ2V0UmVzb2x2ZWRTY2hlbWEoKX19aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PWUpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dmFyIGk9dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKSxvPWkubGVuZ3RoPjA/dGhpcy5jcmVhdGVDb21iaW5lZFNjaGVtYShlLGkpLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKTtyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT17cmVzb3VyY2U6ZSxyZXNvbHZlZFNjaGVtYTpvfSxvfSxlLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbihlLHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0WzBdKTt2YXIgbj0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KGUpLHI9e2FsbE9mOnQubWFwKChmdW5jdGlvbihlKXtyZXR1cm57JHJlZjplfX0pKX07cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKG4scil9LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7aWYobil7dmFyIHI9bi5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC9tYXRjaGluZ1NjaGVtYXMvIit1cysrO3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpfSkpfXJldHVybiB0aGlzLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlP3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpOltdfSkpfSxlfSgpLHVzPTA7ZnVuY3Rpb24gaHMoZSl7dHJ5e3JldHVybiBlcy5wYXJzZShlKS50b1N0cmluZygpfWNhdGNoKHQpe3JldHVybiBlfX1mdW5jdGlvbiBmcyhlKXt0cnl7dmFyIHQ9ZXMucGFyc2UoZSk7aWYoImZpbGUiPT09dC5zY2hlbWUpcmV0dXJuIHQuZnNQYXRofWNhdGNoKGUpe31yZXR1cm4gZX1mdW5jdGlvbiBkcyhlLHQpe3ZhciBuPVtdLHI9W10saT1bXSxvPS0xLGE9SWkoZS5nZXRUZXh0KCksITEpLHM9YS5zY2FuKCk7ZnVuY3Rpb24gbChlKXtuLnB1c2goZSksci5wdXNoKGkubGVuZ3RoKX1mb3IoOzE3IT09czspe3N3aXRjaChzKXtjYXNlIDE6Y2FzZSAzOnZhciBjPXtzdGFydExpbmU6Zj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGVuZExpbmU6ZixraW5kOjE9PT1zPyJvYmplY3QiOiJhcnJheSJ9O2kucHVzaChjKTticmVhaztjYXNlIDI6Y2FzZSA0OnZhciB1PTI9PT1zPyJvYmplY3QiOiJhcnJheSI7aWYoaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS5raW5kPT09dSl7Yz1pLnBvcCgpO3ZhciBoPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7YyYmaD5jLnN0YXJ0TGluZSsxJiZvIT09Yy5zdGFydExpbmUmJihjLmVuZExpbmU9aC0xLGwoYyksbz1jLnN0YXJ0TGluZSl9YnJlYWs7Y2FzZSAxMzp2YXIgZj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGQ9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSthLmdldFRva2VuTGVuZ3RoKCkpLmxpbmU7MT09PWEuZ2V0VG9rZW5FcnJvcigpJiZmKzE8ZS5saW5lQ291bnQ/YS5zZXRQb3NpdGlvbihlLm9mZnNldEF0KGpyLmNyZWF0ZShmKzEsMCkpKTpmPGQmJihsKHtzdGFydExpbmU6ZixlbmRMaW5lOmQsa2luZDpuaS5Db21tZW50fSksbz1mKTticmVhaztjYXNlIDEyOnZhciBtPWUuZ2V0VGV4dCgpLnN1YnN0cihhLmdldFRva2VuT2Zmc2V0KCksYS5nZXRUb2tlbkxlbmd0aCgpKS5tYXRjaCgvXlwvXC9ccyojKHJlZ2lvblxiKXwoZW5kcmVnaW9uXGIpLyk7aWYobSl7aD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2lmKG1bMV0pe2M9e3N0YXJ0TGluZTpoLGVuZExpbmU6aCxraW5kOm5pLlJlZ2lvbn07aS5wdXNoKGMpfWVsc2V7Zm9yKHZhciBnPWkubGVuZ3RoLTE7Zz49MCYmaVtnXS5raW5kIT09bmkuUmVnaW9uOylnLS07aWYoZz49MCl7Yz1pW2ddO2kubGVuZ3RoPWcsaD5jLnN0YXJ0TGluZSYmbyE9PWMuc3RhcnRMaW5lJiYoYy5lbmRMaW5lPWgsbChjKSxvPWMuc3RhcnRMaW5lKX19fX1zPWEuc2NhbigpfXZhciBwPXQmJnQucmFuZ2VMaW1pdDtpZigibnVtYmVyIiE9dHlwZW9mIHB8fG4ubGVuZ3RoPD1wKXJldHVybiBuO3QmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQoZS51cmkpO2Zvcih2YXIgYj1bXSx2PTAseT1yO3Y8eS5sZW5ndGg7disrKXsoQT15W3ZdKTwzMCYmKGJbQV09KGJbQV18fDApKzEpfXZhciBDPTAsdz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBfPWJbZ107aWYoXyl7aWYoXytDPnApe3c9ZzticmVha31DKz1ffX12YXIgUz1bXTtmb3IoZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgQTsibnVtYmVyIj09dHlwZW9mKEE9cltnXSkmJihBPHd8fEE9PT13JiZDKys8cCkmJlMucHVzaChuW2ddKX1yZXR1cm4gU31mdW5jdGlvbiBtcyhlLHQsbil7ZnVuY3Rpb24gcih0LG4pe3JldHVybiAkci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQpLGUucG9zaXRpb25BdChuKSl9dmFyIGk9SWkoZS5nZXRUZXh0KCksITApO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gaS5zZXRQb3NpdGlvbihlKSxpLnNjYW4oKT09PXQ/aS5nZXRUb2tlbk9mZnNldCgpK2kuZ2V0VG9rZW5MZW5ndGgoKTotMX1yZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1lLm9mZnNldEF0KHQpLGE9bi5nZXROb2RlRnJvbU9mZnNldChpLCEwKSxzPVtdO2E7KXtzd2l0Y2goYS50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJvYmplY3QiOmNhc2UiYXJyYXkiOnZhciBsPWEub2Zmc2V0KzEsYz1hLm9mZnNldCthLmxlbmd0aC0xO2w8YyYmaT49bCYmaTw9YyYmcy5wdXNoKHIobCxjKSkscy5wdXNoKHIoYS5vZmZzZXQsYS5vZmZzZXQrYS5sZW5ndGgpKTticmVhaztjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpjYXNlIm51bGwiOmNhc2UicHJvcGVydHkiOnMucHVzaChyKGEub2Zmc2V0LGEub2Zmc2V0K2EubGVuZ3RoKSl9aWYoInByb3BlcnR5Ij09PWEudHlwZXx8YS5wYXJlbnQmJiJhcnJheSI9PT1hLnBhcmVudC50eXBlKXt2YXIgdT1vKGEub2Zmc2V0K2EubGVuZ3RoLDUpOy0xIT09dSYmcy5wdXNoKHIoYS5vZmZzZXQsdSkpfWE9YS5wYXJlbnR9Zm9yKHZhciBoPXZvaWQgMCxmPXMubGVuZ3RoLTE7Zj49MDtmLS0paD1Lby5jcmVhdGUoc1tmXSxoKTtyZXR1cm4gaHx8KGg9S28uY3JlYXRlKCRyLmNyZWF0ZSh0LHQpKSksaH0pKX1mdW5jdGlvbiBncyhlLHQpe3ZhciBuPVtdO3JldHVybiB0LnZpc2l0KChmdW5jdGlvbihyKXt2YXIgaTtpZigicHJvcGVydHkiPT09ci50eXBlJiYiJHJlZiI9PT1yLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0oaT1yLnZhbHVlTm9kZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkudHlwZSkpe3ZhciBvPXIudmFsdWVOb2RlLnZhbHVlLGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZigiIyI9PT1lKXJldHVybltdO2lmKCIjIiE9PWVbMF18fCIvIiE9PWVbMV0pcmV0dXJuIG51bGw7cmV0dXJuIGUuc3Vic3RyaW5nKDIpLnNwbGl0KC9cLy8pLm1hcCh2cyl9KHQpO2lmKCFuKXJldHVybiBudWxsO3JldHVybiBicyhuLGUucm9vdCl9KHQsbyk7aWYoYSl7dmFyIHM9ZS5wb3NpdGlvbkF0KGEub2Zmc2V0KTtuLnB1c2goe3RhcmdldDoiIi5jb25jYXQoZS51cmksIiMiKS5jb25jYXQocy5saW5lKzEsIiwiKS5jb25jYXQocy5jaGFyYWN0ZXIrMSkscmFuZ2U6cHMoZSxyLnZhbHVlTm9kZSl9KX19cmV0dXJuITB9KSksUHJvbWlzZS5yZXNvbHZlKG4pfWZ1bmN0aW9uIHBzKGUsdCl7cmV0dXJuICRyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQrMSksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoLTEpKX1mdW5jdGlvbiBicyhlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodCYmIm9iamVjdCI9PT10LnR5cGUpe3ZhciByPXQucHJvcGVydGllcy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXlOb2RlLnZhbHVlPT09bn0pKTtyZXR1cm4gcj9icyhlLHIudmFsdWVOb2RlKTpudWxsfWlmKHQmJiJhcnJheSI9PT10LnR5cGUmJm4ubWF0Y2goL14oMHxbMS05XVswLTldKikkLykpe3ZhciBpPU51bWJlci5wYXJzZUludChuKSxvPXQuaXRlbXNbaV07cmV0dXJuIG8/YnMoZSxvKTpudWxsfXJldHVybiBudWxsfWZ1bmN0aW9uIHZzKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24geXMoZSl7dmFyIHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Usbj1uZXcgY3MoZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCk7bi5zZXRTY2hlbWFDb250cmlidXRpb25zKFlhKTt2YXIgcj1uZXcgTWEobixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcyksaT1uZXcgSWEobixlLmNvbnRyaWJ1dGlvbnMsdCksbz1uZXcgcWEobiksYT1uZXcgRmEobix0KTtyZXR1cm57Y29uZmlndXJlOmZ1bmN0aW9uKGUpe24uY2xlYXJFeHRlcm5hbFNjaGVtYXMoKSxlLnNjaGVtYXMmJmUuc2NoZW1hcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEoZS51cmksZS5maWxlTWF0Y2gsZS5zY2hlbWEpfSkpLGEuY29uZmlndXJlKGUpfSxyZXNldFNjaGVtYTpmdW5jdGlvbihlKXtyZXR1cm4gbi5vblJlc291cmNlQ2hhbmdlKGUpfSxkb1ZhbGlkYXRpb246YS5kb1ZhbGlkYXRpb24uYmluZChhKSxnZXRMYW5ndWFnZVN0YXR1czphLmdldExhbmd1YWdlU3RhdHVzLmJpbmQoYSkscGFyc2VKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGthKGUse2NvbGxlY3RDb21tZW50czohMH0pfSxuZXdKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9W10pLG5ldyB4YShlLHQsW10pfShlLHQpfSxnZXRNYXRjaGluZ1NjaGVtYXM6bi5nZXRNYXRjaGluZ1NjaGVtYXMuYmluZChuKSxkb1Jlc29sdmU6ci5kb1Jlc29sdmUuYmluZChyKSxkb0NvbXBsZXRlOnIuZG9Db21wbGV0ZS5iaW5kKHIpLGZpbmREb2N1bWVudFN5bWJvbHM6by5maW5kRG9jdW1lbnRTeW1ib2xzLmJpbmQobyksZmluZERvY3VtZW50U3ltYm9sczI6by5maW5kRG9jdW1lbnRTeW1ib2xzMi5iaW5kKG8pLGZpbmREb2N1bWVudENvbG9yczpvLmZpbmREb2N1bWVudENvbG9ycy5iaW5kKG8pLGdldENvbG9yUHJlc2VudGF0aW9uczpvLmdldENvbG9yUHJlc2VudGF0aW9ucy5iaW5kKG8pLGRvSG92ZXI6aS5kb0hvdmVyLmJpbmQoaSksZ2V0Rm9sZGluZ1JhbmdlczpkcyxnZXRTZWxlY3Rpb25SYW5nZXM6bXMsZmluZERlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX0sZmluZExpbmtzOmdzLGZvcm1hdDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dm9pZCAwO2lmKHQpe3ZhciBpPWUub2Zmc2V0QXQodC5zdGFydCk7cj17b2Zmc2V0OmksbGVuZ3RoOmUub2Zmc2V0QXQodC5lbmQpLWl9fXZhciBvPXt0YWJTaXplOm4/bi50YWJTaXplOjQsaW5zZXJ0U3BhY2VzOiEwPT09KG51bGw9PW4/dm9pZCAwOm4uaW5zZXJ0U3BhY2VzKSxpbnNlcnRGaW5hbE5ld2xpbmU6ITA9PT0obnVsbD09bj92b2lkIDA6bi5pbnNlcnRGaW5hbE5ld2xpbmUpLGVvbDoiXG4ifTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBScihlLHQsbil9KGUuZ2V0VGV4dCgpLHIsbykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gYmkucmVwbGFjZSgkci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKSx0LmNvbnRlbnQpfSkpfX19InVuZGVmaW5lZCIhPXR5cGVvZiBmZXRjaCYmKHJzPWZ1bmN0aW9uKGUpe3JldHVybiBmZXRjaChlKS50aGVuKChlPT5lLnRleHQoKSkpfSk7dmFyIENzPSIvIi5jaGFyQ29kZUF0KDApLHdzPSIuIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIF9zKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSkwPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09d3N8fCgyPT09bi5sZW5ndGgmJm4uY2hhckNvZGVBdCgwKT09PXdzJiZuLmNoYXJDb2RlQXQoMSk9PT13cz90LnBvcCgpOnQucHVzaChuKSk7ZS5sZW5ndGg+MSYmMD09PWVbZS5sZW5ndGgtMV0ubGVuZ3RoJiZ0LnB1c2goIiIpO2xldCBuPXQuam9pbigiLyIpO3JldHVybiAwPT09ZVswXS5sZW5ndGgmJihuPSIvIituKSxufXNlbGYub25tZXNzYWdlPSgpPT57a3IoKChlLHQpPT5uZXcgY2xhc3N7X2N0eDtfbGFuZ3VhZ2VTZXJ2aWNlO19sYW5ndWFnZVNldHRpbmdzO19sYW5ndWFnZUlkO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY3R4PWUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncz10Lmxhbmd1YWdlU2V0dGluZ3MsdGhpcy5fbGFuZ3VhZ2VJZD10Lmxhbmd1YWdlSWQsdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlPXlzKHt3b3Jrc3BhY2VDb250ZXh0OntyZXNvbHZlUmVsYXRpdmVQYXRoOihlLHQpPT5mdW5jdGlvbihlLHQpe2lmKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT1Dc30odCkpe2NvbnN0IG49ZXMucGFyc2UoZSkscj10LnNwbGl0KCIvIik7cmV0dXJuIG4ud2l0aCh7cGF0aDpfcyhyKX0pLnRvU3RyaW5nKCl9cmV0dXJuIGZ1bmN0aW9uKGUsLi4udCl7Y29uc3Qgbj1lcy5wYXJzZShlKSxyPW4ucGF0aC5zcGxpdCgiLyIpO2ZvcihsZXQgZSBvZiB0KXIucHVzaCguLi5lLnNwbGl0KCIvIikpO3JldHVybiBuLndpdGgoe3BhdGg6X3Mocil9KS50b1N0cmluZygpfShlLHQpfSh0LnN1YnN0cigwLHQubGFzdEluZGV4T2YoIi8iKSsxKSxlKX0sc2NoZW1hUmVxdWVzdFNlcnZpY2U6dC5lbmFibGVTY2hlbWFSZXF1ZXN0P3JzOnZvaWQgMH0pLHRoaXMuX2xhbmd1YWdlU2VydmljZS5jb25maWd1cmUodGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9YXN5bmMgZG9WYWxpZGF0aW9uKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZih0KXtsZXQgZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCk7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1ZhbGlkYXRpb24odCxlLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfXJldHVybiBQcm9taXNlLnJlc29sdmUoW10pfWFzeW5jIGRvQ29tcGxldGUoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShuLHQscil9YXN5bmMgZG9SZXNvbHZlKGUpe3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZXNvbHZlKGUpfWFzeW5jIGRvSG92ZXIoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Ib3ZlcihuLHQscil9YXN5bmMgZm9ybWF0KGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZvcm1hdChyLHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyByZXNldFNjaGVtYShlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5yZXNldFNjaGVtYShlKSl9YXN5bmMgZmluZERvY3VtZW50U3ltYm9scyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudFN5bWJvbHModCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGZpbmREb2N1bWVudENvbG9ycyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudENvbG9ycyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0Q29sb3JQcmVzZW50YXRpb25zKGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHIpLG89dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldENvbG9yUHJlc2VudGF0aW9ucyhyLGksdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG8pfWFzeW5jIGdldEZvbGRpbmdSYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldEZvbGRpbmdSYW5nZXMobix0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGdldFNlbGVjdGlvblJhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobiksaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0U2VsZWN0aW9uUmFuZ2VzKG4sdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfV9nZXRUZXh0RG9jdW1lbnQoZSl7bGV0IHQ9dGhpcy5fY3R4LmdldE1pcnJvck1vZGVscygpO2ZvcihsZXQgbiBvZiB0KWlmKG4udXJpLnRvU3RyaW5nKCk9PT1lKXJldHVybiBHby5jcmVhdGUoZSx0aGlzLl9sYW5ndWFnZUlkLG4udmVyc2lvbixuLmdldFZhbHVlKCkpO3JldHVybiBudWxsfX0oZSx0KSkpfX0oKTsKCg==', null, false);
3
+ var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihvLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09ciYmZS5tZXNzYWdlPT09cn0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTpvLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qgcj0iQ2FuY2VsZWQiO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHIpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkVycm9yTm9UZWxlbWV0cnkifXN0YXRpYyBmcm9tRXJyb3IoZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuIGU7Y29uc3QgdD1uZXcgbztyZXR1cm4gdC5tZXNzYWdlPWUubWVzc2FnZSx0LnN0YWNrPWUuc3RhY2ssdH1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KGUpe3JldHVybiJFcnJvck5vVGVsZW1ldHJ5Ij09PWUubmFtZX19ZnVuY3Rpb24gYShlKXtjb25zdCB0PXRoaXM7bGV0IG4scj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIHM7IWZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX07Y29uc3QgdD1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBuKHQsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHI9W107aWYoMD09PW4pcmV0dXJuW3IsdF07Y29uc3QgaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCB0PWkubmV4dCgpO2lmKHQuZG9uZSlyZXR1cm5bcixlLmVtcHR5KCldO3IucHVzaCh0LnZhbHVlKX1yZXR1cm5bcix7W1N5bWJvbC5pdGVyYXRvcl06KCk9Pml9XX1lLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuc2luZ2xlPWZ1bmN0aW9uKihlKXt5aWVsZCBlfSxlLmZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fHR9LGUuaXNFbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4hZXx8ITA9PT1lW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkuZG9uZX0sZS5maXJzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfSxlLnNvbWU9ZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKHQobikpcmV0dXJuITA7cmV0dXJuITF9LGUuZmluZD1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4gbn0sZS5maWx0ZXI9ZnVuY3Rpb24qKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSl0KG4pJiYoeWllbGQgbil9LGUubWFwPWZ1bmN0aW9uKihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl5aWVsZCB0KHIsbisrKX0sZS5jb25jYXQ9ZnVuY3Rpb24qKC4uLmUpe2Zvcihjb25zdCB0IG9mIGUpZm9yKGNvbnN0IGUgb2YgdCl5aWVsZCBlfSxlLmNvbmNhdE5lc3RlZD1mdW5jdGlvbiooZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1uO2Zvcihjb25zdCBuIG9mIGUpcj10KHIsbik7cmV0dXJuIHJ9LGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIsbisrKX0sZS5zbGljZT1mdW5jdGlvbiooZSx0LG49ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCksbjwwP24rPWUubGVuZ3RoOm4+ZS5sZW5ndGgmJihuPWUubGVuZ3RoKTt0PG47dCsrKXlpZWxkIGVbdF19LGUuY29uc3VtZT1uLGUuY29sbGVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbihlKVswXX0sZS5lcXVhbHM9ZnVuY3Rpb24oZSx0LG49KChlLHQpPT5lPT09dCkpe2NvbnN0IHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe2NvbnN0IGU9ci5uZXh0KCksdD1pLm5leHQoKTtpZihlLmRvbmUhPT10LmRvbmUpcmV0dXJuITE7aWYoZS5kb25lKXJldHVybiEwO2lmKCFuKGUudmFsdWUsdC52YWx1ZSkpcmV0dXJuITF9fX0oc3x8KHM9e30pKTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUuIEVycm9yczogWyR7ZS5qb2luKCIsICIpfV1gKSx0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiBsKGUpe2lmKHMuaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChlKXt0LnB1c2goZSl9aWYoMT09PXQubGVuZ3RoKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgYyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gdShlKXtyZXR1cm57ZGlzcG9zZTphKCgoKT0+e2UoKX0pKX19Y2xhc3MgaHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvRGlzcG9zZT1uZXcgU2V0LHRoaXMuX2lzRGlzcG9zZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9pc0Rpc3Bvc2VkPSEwLHRoaXMuY2xlYXIoKSl9Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1jbGVhcigpe3RyeXtsKHRoaXMuX3RvRGlzcG9zZS52YWx1ZXMoKSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/aC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1oLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGgsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX1mLk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319Y2xhc3MgbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHQ9bS5VbmRlZmluZWQsdGhpcy5wcmV2PW0uVW5kZWZpbmVkfX1tLlVuZGVmaW5lZD1uZXcgbSh2b2lkIDApO2NsYXNzIGd7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1tLlVuZGVmaW5lZCx0aGlzLl9sYXN0PW0uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1tLlVuZGVmaW5lZH1jbGVhcigpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl7Y29uc3QgdD1lLm5leHQ7ZS5wcmV2PW0uVW5kZWZpbmVkLGUubmV4dD1tLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9bS5VbmRlZmluZWQsdGhpcy5fbGFzdD1tLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgbj1uZXcgbShlKTtpZih0aGlzLl9maXJzdD09PW0uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PW4sdGhpcy5fbGFzdD1uO2Vsc2UgaWYodCl7Y29uc3QgZT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9bixuLnByZXY9ZSxlLm5leHQ9bn1lbHNle2NvbnN0IGU9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9bixuLm5leHQ9ZSxlLnByZXY9bn10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKG4pKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksZX19cG9wKCl7aWYodGhpcy5fbGFzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9fV9yZW1vdmUoZSl7aWYoZS5wcmV2IT09bS5VbmRlZmluZWQmJmUubmV4dCE9PW0uVW5kZWZpbmVkKXtjb25zdCB0PWUucHJldjt0Lm5leHQ9ZS5uZXh0LGUubmV4dC5wcmV2PXR9ZWxzZSBlLnByZXY9PT1tLlVuZGVmaW5lZCYmZS5uZXh0PT09bS5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PW0uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9bS5VbmRlZmluZWQpOmUubmV4dD09PW0uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9bS5VbmRlZmluZWQpOmUucHJldj09PW0uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PW0uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fWxldCBwPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7dmFyIGI7Y29uc3Qgdj0iZW4iO2xldCB5LEMsdyxfPSExLFM9ITEsQT0hMSxFPSExLHg9djtjb25zdCBOPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmOiJvYmplY3QiPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDp7fTtsZXQgazt2b2lkIDAhPT1OLnZzY29kZSYmdm9pZCAwIT09Ti52c2NvZGUucHJvY2Vzcz9rPU4udnNjb2RlLnByb2Nlc3M6InVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYoaz1wcm9jZXNzKTtjb25zdCBMPSJzdHJpbmciPT10eXBlb2YobnVsbD09PShiPW51bGw9PWs/dm9pZCAwOmsudmVyc2lvbnMpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmVsZWN0cm9uKSYmInJlbmRlcmVyIj09PShudWxsPT1rP3ZvaWQgMDprLnR5cGUpO2lmKCJvYmplY3QiIT10eXBlb2YgbmF2aWdhdG9yfHxMKWlmKCJvYmplY3QiPT10eXBlb2Ygayl7Xz0id2luMzIiPT09ay5wbGF0Zm9ybSxTPSJkYXJ3aW4iPT09ay5wbGF0Zm9ybSxBPSJsaW51eCI9PT1rLnBsYXRmb3JtLEEmJmsuZW52LlNOQVAmJmsuZW52LlNOQVBfUkVWSVNJT04say5lbnYuQ0l8fGsuZW52LkJVSUxEX0FSVElGQUNUU1RBR0lOR0RJUkVDVE9SWSx5PXYseD12O2NvbnN0IGU9ay5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpLG49dC5hdmFpbGFibGVMYW5ndWFnZXNbIioiXTt5PXQubG9jYWxlLHg9bnx8dixDPXQuX3RyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2goZSl7fX1lbHNlIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2Vsc2Ugdz1uYXZpZ2F0b3IudXNlckFnZW50LF89dy5pbmRleE9mKCJXaW5kb3dzIik+PTAsUz13LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLCh3LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHx3LmluZGV4T2YoImlQYWQiKT49MHx8dy5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzLEE9dy5pbmRleE9mKCJMaW51eCIpPj0wLEU9ITAsZnVuY3Rpb24oZSx0LC4uLm4peyFmdW5jdGlvbihlLHQpe2xldCBuO249MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9Pntjb25zdCByPW5bMF0saT10W3JdO2xldCBvPWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBpP289aToibnVtYmVyIiE9dHlwZW9mIGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJm51bGwhPWl8fChvPVN0cmluZyhpKSksb30pKSxwJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKX0odCxuKX0oMCwiXyIpLHk9dix4PXk7Y29uc3QgVD1fLE89UztFJiZOLmltcG9ydFNjcmlwdHM7Y29uc3QgST13LE09ImZ1bmN0aW9uIj09dHlwZW9mIE4ucG9zdE1lc3NhZ2UmJiFOLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoTSl7Y29uc3QgZT1bXTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWVbbl07aWYoci5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIHIuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksTi5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6cn0sIioiKX19fSkoKTtjb25zdCBQPSEhKEkmJkkuaW5kZXhPZigiQ2hyb21lIik+PTApO0kmJkkuaW5kZXhPZigiRmlyZWZveCIpLCFQJiZJJiZJLmluZGV4T2YoIlNhZmFyaSIpLEkmJkkuaW5kZXhPZigiRWRnLyIpLEkmJkkuaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IFI9Ti5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIE4ucGVyZm9ybWFuY2Uubm93O2NsYXNzIFZ7Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249UiYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IFYoZSl9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9OLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBGLEQ7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBhKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIGEoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtuPWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe251bGw9PW58fG4uZGlzcG9zZSgpfX0pO3JldHVybiBudWxsPT10fHx0LmFkZChyKSxyLmV2ZW50fWZ1bmN0aW9uIHMoZSx0LG49MTAwLHI9ITEsaSxvKXtsZXQgYSxzLGMsbD0wO2NvbnN0IHU9bmV3IEIoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7YT1lKChlPT57bCsrLHM9dChzLGUpLHImJiFjJiYodS5maXJlKHMpLHM9dm9pZCAwKSxjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IGU9cztzPXZvaWQgMCxjPXZvaWQgMCwoIXJ8fGw+MSkmJnUuZmlyZShlKSxsPTB9KSxuKX0pKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXthLmRpc3Bvc2UoKX19KTtyZXR1cm4gbnVsbD09b3x8by5hZGQodSksdS5ldmVudH1mdW5jdGlvbiBjKGUsdD0oKGUsdCk9PmU9PT10KSxuKXtsZXQgcixvPSEwO3JldHVybiBpKGUsKGU9Pntjb25zdCBuPW98fCF0KGUscik7cmV0dXJuIG89ITEscj1lLG59KSxuKX1lLk5vbmU9KCk9PmYuTm9uZSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHUoKCgpPT5sKGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPXMsZS5sYXRjaD1jLGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybltlLmZpbHRlcih0LG4sciksZS5maWx0ZXIodCwoZT0+IW4oZSkpLHIpXX0sZS5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLG49W10pe2xldCByPW4uc2xpY2UoKSxpPWUoKGU9PntyP3IucHVzaChlKTphLmZpcmUoZSl9KSk7Y29uc3Qgbz0oKT0+e251bGw9PXJ8fHIuZm9yRWFjaCgoZT0+YS5maXJlKGUpKSkscj1udWxsfSxhPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtpfHwoaT1lKChlPT5hLmZpcmUoZSkpKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe3ImJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lLHRoaXMuZGlzcG9zYWJsZXM9bmV3IGh9bWFwKGUpe3JldHVybiBuZXcgZChuKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9Zm9yRWFjaChlKXtyZXR1cm4gbmV3IGQocih0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfWZpbHRlcihlKXtyZXR1cm4gbmV3IGQoaSh0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgZChvKHRoaXMuZXZlbnQsZSx0LHRoaXMuZGlzcG9zYWJsZXMpKX1sYXRjaCgpe3JldHVybiBuZXcgZChjKHRoaXMuZXZlbnQsdm9pZCAwLHRoaXMuZGlzcG9zYWJsZXMpKX1kZWJvdW5jZShlLHQ9MTAwLG49ITEscil7cmV0dXJuIG5ldyBkKHModGhpcy5ldmVudCxlLHQsbixyLHRoaXMuZGlzcG9zYWJsZXMpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NhYmxlcy5kaXNwb3NlKCl9fWUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkKGUpfSxlLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUub24odCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVMaXN0ZW5lcih0LHIpfSk7cmV0dXJuIGkuZXZlbnR9LGUuZnJvbURPTUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQsbj0oZT0+ZSkpe2NvbnN0IHI9KC4uLmUpPT5pLmZpcmUobiguLi5lKSksaT1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT5lLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscil9KTtyZXR1cm4gaS5ldmVudH0sZS50b1Byb21pc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT50KGUpKG4pKSl9LGUucnVuQW5kU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQodm9pZCAwKSxlKChlPT50KGUpKSl9LGUucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IG49bnVsbDtmdW5jdGlvbiByKGUpe251bGw9PW58fG4uZGlzcG9zZSgpLG49bmV3IGgsdChlLG4pfXIodm9pZCAwKTtjb25zdCBpPWUoKGU9PnIoZSkpKTtyZXR1cm4gdSgoKCk9PntpLmRpc3Bvc2UoKSxudWxsPT1ufHxuLmRpc3Bvc2UoKX0pKX07Y2xhc3MgbXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMub2JzPWUsdGhpcy5fY291bnRlcj0wLHRoaXMuX2hhc0NoYW5nZWQ9ITE7Y29uc3Qgbj17b25GaXJzdExpc3RlbmVyQWRkOigpPT57ZS5hZGRPYnNlcnZlcih0aGlzKX0sb25MYXN0TGlzdGVuZXJSZW1vdmU6KCk9PntlLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBCKG4pLHQmJnQuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoZSl7dGhpcy5fY291bnRlcisrfWhhbmRsZUNoYW5nZShlLHQpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKGUpezA9PS0tdGhpcy5fY291bnRlciYmdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5vYnMuZ2V0KCkpKX19ZS5mcm9tT2JzZXJ2YWJsZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbShlLHQpLmVtaXR0ZXIuZXZlbnR9fShGfHwoRj17fSkpO2NsYXNzIEt7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGlzdGVuZXJDb3VudD0wLHRoaXMuX2ludm9jYXRpb25Db3VudD0wLHRoaXMuX2VsYXBzZWRPdmVyYWxsPTAsdGhpcy5fbmFtZT1gJHtlfV8ke0suX2lkUG9vbCsrfWB9c3RhcnQoZSl7dGhpcy5fc3RvcFdhdGNoPW5ldyBWKCEwKSx0aGlzLl9saXN0ZW5lckNvdW50PWV9c3RvcCgpe2lmKHRoaXMuX3N0b3BXYXRjaCl7Y29uc3QgZT10aGlzLl9zdG9wV2F0Y2guZWxhcHNlZCgpO3RoaXMuX2VsYXBzZWRPdmVyYWxsKz1lLHRoaXMuX2ludm9jYXRpb25Db3VudCs9MSxjb25zb2xlLmluZm8oYGRpZCBGSVJFICR7dGhpcy5fbmFtZX06IGVsYXBzZWRfbXM6ICR7ZS50b0ZpeGVkKDUpfSwgbGlzdGVuZXI6ICR7dGhpcy5fbGlzdGVuZXJDb3VudH0gKGVsYXBzZWRfb3ZlcmFsbDogJHt0aGlzLl9lbGFwc2VkT3ZlcmFsbC50b0ZpeGVkKDIpfSwgaW52b2NhdGlvbnM6ICR7dGhpcy5faW52b2NhdGlvbkNvdW50fSlgKSx0aGlzLl9zdG9wV2F0Y2g9dm9pZCAwfX19Sy5faWRQb29sPTA7Y2xhc3Mgantjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlPWV9c3RhdGljIGNyZWF0ZSgpe3ZhciBlO3JldHVybiBuZXcgaihudWxsIT09KGU9KG5ldyBFcnJvcikuc3RhY2spJiZ2b2lkIDAhPT1lP2U6IiIpfXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoIlxuIikuc2xpY2UoMikuam9pbigiXG4iKSl9fWNsYXNzIFV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuY2FsbGJhY2s9ZSx0aGlzLmNhbGxiYWNrVGhpcz10LHRoaXMuc3RhY2s9bix0aGlzLnN1YnNjcmlwdGlvbj1uZXcgZH1pbnZva2UoZSl7dGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuY2FsbGJhY2tUaGlzLGUpfX1jbGFzcyBCe2NvbnN0cnVjdG9yKGUpe3ZhciB0LG47dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249KG51bGw9PT0odD10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5fcHJvZk5hbWUpP25ldyBLKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT1udWxsPT09KG49dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIGUsdCxuLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcih0aGlzKSxudWxsPT09KG49bnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uTGFzdExpc3RlbmVyUmVtb3ZlKXx8dm9pZCAwPT09bnx8bi5jYWxsKHQpLG51bGw9PT0ocj10aGlzLl9sZWFrYWdlTW9uKXx8dm9pZCAwPT09cnx8ci5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQsbik9Pnt2YXIgcixpLG87dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBnKTtjb25zdCBhPXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCk7bGV0IHMsYzthJiYobnVsbD09PShyPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uRmlyc3RMaXN0ZW5lckFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX2xpc3RlbmVycy5zaXplPj0zMCYmKGM9ai5jcmVhdGUoKSxzPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soYyx0aGlzLl9saXN0ZW5lcnMuc2l6ZSsxKSk7Y29uc3QgbD1uZXcgVShlLHQsYyksdT10aGlzLl9saXN0ZW5lcnMucHVzaChsKTthJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uRmlyc3RMaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyRGlkQWRkKHRoaXMpLChudWxsPT09KG89dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ub25MaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25MaXN0ZW5lckRpZEFkZCh0aGlzLGUsdCk7Y29uc3QgZj1sLnN1YnNjcmlwdGlvbi5zZXQoKCgpPT57aWYobnVsbD09c3x8cygpLCF0aGlzLl9kaXNwb3NlZCYmKHUoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKSl7dGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKX19KSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBoP24uYWRkKGYpOkFycmF5LmlzQXJyYXkobikmJm4ucHVzaChmKSxmfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdCxuO2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3IHEpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2godGhpcyx0LGUpO251bGw9PT0odD10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09dHx8dC5zdGFydCh0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemUpLHRoaXMuX2RlbGl2ZXJ5UXVldWUuZGVsaXZlcigpLG51bGw9PT0obj10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09bnx8bi5zdG9wKCl9fX1jbGFzcyBxIGV4dGVuZHMgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9xdWV1ZT1uZXcgZ31nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9xdWV1ZS5zaXplfXB1c2goZSx0LG4pe3RoaXMuX3F1ZXVlLnB1c2gobmV3ICQoZSx0LG4pKX1jbGVhcihlKXtjb25zdCB0PW5ldyBnO2Zvcihjb25zdCBuIG9mIHRoaXMuX3F1ZXVlKW4uZW1pdHRlciE9PWUmJnQucHVzaChuKTt0aGlzLl9xdWV1ZT10fWRlbGl2ZXIoKXtmb3IoO3RoaXMuX3F1ZXVlLnNpemU+MDspe2NvbnN0IGU9dGhpcy5fcXVldWUuc2hpZnQoKTt0cnl7ZS5saXN0ZW5lci5pbnZva2UoZS5ldmVudCl9Y2F0Y2goZSl7dChlKX19fX17Y2xlYXIoZSl7dGhpcy5fcXVldWUuY2xlYXIoKX19Y2xhc3MgJHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbWl0dGVyPWUsdGhpcy5saXN0ZW5lcj10LHRoaXMuZXZlbnQ9bn19ZnVuY3Rpb24gVyhlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIEgoZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1jbGFzcyB6e2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9aGFzVmFsdWUoKXtyZXR1cm4gdGhpcy5fZGlkUnVufWdldFZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKGUpe3RoaXMuX2Vycm9yPWV9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gRyhlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIEooZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBYKGUsdCxuKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihKKHIpJiZuKzE8dCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobisxKTtpZihmdW5jdGlvbihlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfSh0KSlyZXR1cm4gdC01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fXJldHVybiByfWNvbnN0IFo9L15bXHRcblxyXHgyMC1ceDdFXSokLztjbGFzcyBZe2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9ZX1zdGF0aWMgZ2V0SW5zdGFuY2UoZSl7cmV0dXJuIFkuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIFkuX2xvY2FsZXMuZ2V0VmFsdWUoKX1pc0FtYmlndW91cyhlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXMoZSl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KGUpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1EPVksWS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyB6KCgoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSkpLFkuY2FjaGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09dCYmKHRoaXMubGFzdEFyZ0tleT10LHRoaXMubGFzdENhY2hlPXRoaXMuZm4oZSkpLHRoaXMubGFzdENhY2hlfX0oKGU9PntmdW5jdGlvbiB0KGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTIpdC5zZXQoZVtuXSxlW24rMV0pO3JldHVybiB0fWZ1bmN0aW9uIG4oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCBuPW5ldyBNYXA7Zm9yKGNvbnN0W3IsaV1vZiBlKXQuaGFzKHIpJiZuLnNldChyLGkpO3JldHVybiBufWNvbnN0IHI9RC5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCk7bGV0IGksbz1lLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpJiZlIGluIHIpKTswPT09by5sZW5ndGgmJihvPVsiX2RlZmF1bHQiXSk7Zm9yKGNvbnN0IGUgb2Ygbyl7aT1uKGksdChyW2VdKSl9Y29uc3QgYT1mdW5jdGlvbihlLHQpe2NvbnN0IG49bmV3IE1hcChlKTtmb3IoY29uc3RbZSxyXW9mIHQpbi5zZXQoZSxyKTtyZXR1cm4gbn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgWShhKX0pKSxZLl9sb2NhbGVzPW5ldyB6KCgoKT0+T2JqZWN0LmtleXMoWS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCkpLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpKSkpKTtjbGFzcyBRe3N0YXRpYyBnZXRSYXdEYXRhKCl7cmV0dXJuIEpTT04ucGFyc2UoIls5LDEwLDExLDEyLDEzLDMyLDEyNywxNjAsMTczLDg0NywxNTY0LDQ0NDcsNDQ0OCw2MDY4LDYwNjksNjE1NSw2MTU2LDYxNTcsNjE1OCw3MzU1LDczNTYsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4MjM0LDgyMzUsODIzNiw4MjM3LDgyMzgsODIzOSw4Mjg3LDgyODgsODI4OSw4MjkwLDgyOTEsODI5Miw4MjkzLDgyOTQsODI5NSw4Mjk2LDgyOTcsODI5OCw4Mjk5LDgzMDAsODMwMSw4MzAyLDgzMDMsMTAyNDAsMTIyODgsMTI2NDQsNjUwMjQsNjUwMjUsNjUwMjYsNjUwMjcsNjUwMjgsNjUwMjksNjUwMzAsNjUwMzEsNjUwMzIsNjUwMzMsNjUwMzQsNjUwMzUsNjUwMzYsNjUwMzcsNjUwMzgsNjUwMzksNjUyNzksNjU0NDAsNjU1MjAsNjU1MjEsNjU1MjIsNjU1MjMsNjU1MjQsNjU1MjUsNjU1MjYsNjU1MjcsNjU1MjgsNjU1MzIsNzg4NDQsMTE5MTU1LDExOTE1NiwxMTkxNTcsMTE5MTU4LDExOTE1OSwxMTkxNjAsMTE5MTYxLDExOTE2Miw5MTc1MDQsOTE3NTA1LDkxNzUwNiw5MTc1MDcsOTE3NTA4LDkxNzUwOSw5MTc1MTAsOTE3NTExLDkxNzUxMiw5MTc1MTMsOTE3NTE0LDkxNzUxNSw5MTc1MTYsOTE3NTE3LDkxNzUxOCw5MTc1MTksOTE3NTIwLDkxNzUyMSw5MTc1MjIsOTE3NTIzLDkxNzUyNCw5MTc1MjUsOTE3NTI2LDkxNzUyNyw5MTc1MjgsOTE3NTI5LDkxNzUzMCw5MTc1MzEsOTE3NTMyLDkxNzUzMyw5MTc1MzQsOTE3NTM1LDkxNzUzNiw5MTc1MzcsOTE3NTM4LDkxNzUzOSw5MTc1NDAsOTE3NTQxLDkxNzU0Miw5MTc1NDMsOTE3NTQ0LDkxNzU0NSw5MTc1NDYsOTE3NTQ3LDkxNzU0OCw5MTc1NDksOTE3NTUwLDkxNzU1MSw5MTc1NTIsOTE3NTUzLDkxNzU1NCw5MTc1NTUsOTE3NTU2LDkxNzU1Nyw5MTc1NTgsOTE3NTU5LDkxNzU2MCw5MTc1NjEsOTE3NTYyLDkxNzU2Myw5MTc1NjQsOTE3NTY1LDkxNzU2Niw5MTc1NjcsOTE3NTY4LDkxNzU2OSw5MTc1NzAsOTE3NTcxLDkxNzU3Miw5MTc1NzMsOTE3NTc0LDkxNzU3NSw5MTc1NzYsOTE3NTc3LDkxNzU3OCw5MTc1NzksOTE3NTgwLDkxNzU4MSw5MTc1ODIsOTE3NTgzLDkxNzU4NCw5MTc1ODUsOTE3NTg2LDkxNzU4Nyw5MTc1ODgsOTE3NTg5LDkxNzU5MCw5MTc1OTEsOTE3NTkyLDkxNzU5Myw5MTc1OTQsOTE3NTk1LDkxNzU5Niw5MTc1OTcsOTE3NTk4LDkxNzU5OSw5MTc2MDAsOTE3NjAxLDkxNzYwMiw5MTc2MDMsOTE3NjA0LDkxNzYwNSw5MTc2MDYsOTE3NjA3LDkxNzYwOCw5MTc2MDksOTE3NjEwLDkxNzYxMSw5MTc2MTIsOTE3NjEzLDkxNzYxNCw5MTc2MTUsOTE3NjE2LDkxNzYxNyw5MTc2MTgsOTE3NjE5LDkxNzYyMCw5MTc2MjEsOTE3NjIyLDkxNzYyMyw5MTc2MjQsOTE3NjI1LDkxNzYyNiw5MTc2MjcsOTE3NjI4LDkxNzYyOSw5MTc2MzAsOTE3NjMxLDkxNzc2MCw5MTc3NjEsOTE3NzYyLDkxNzc2Myw5MTc3NjQsOTE3NzY1LDkxNzc2Niw5MTc3NjcsOTE3NzY4LDkxNzc2OSw5MTc3NzAsOTE3NzcxLDkxNzc3Miw5MTc3NzMsOTE3Nzc0LDkxNzc3NSw5MTc3NzYsOTE3Nzc3LDkxNzc3OCw5MTc3NzksOTE3NzgwLDkxNzc4MSw5MTc3ODIsOTE3NzgzLDkxNzc4NCw5MTc3ODUsOTE3Nzg2LDkxNzc4Nyw5MTc3ODgsOTE3Nzg5LDkxNzc5MCw5MTc3OTEsOTE3NzkyLDkxNzc5Myw5MTc3OTQsOTE3Nzk1LDkxNzc5Niw5MTc3OTcsOTE3Nzk4LDkxNzc5OSw5MTc4MDAsOTE3ODAxLDkxNzgwMiw5MTc4MDMsOTE3ODA0LDkxNzgwNSw5MTc4MDYsOTE3ODA3LDkxNzgwOCw5MTc4MDksOTE3ODEwLDkxNzgxMSw5MTc4MTIsOTE3ODEzLDkxNzgxNCw5MTc4MTUsOTE3ODE2LDkxNzgxNyw5MTc4MTgsOTE3ODE5LDkxNzgyMCw5MTc4MjEsOTE3ODIyLDkxNzgyMyw5MTc4MjQsOTE3ODI1LDkxNzgyNiw5MTc4MjcsOTE3ODI4LDkxNzgyOSw5MTc4MzAsOTE3ODMxLDkxNzgzMiw5MTc4MzMsOTE3ODM0LDkxNzgzNSw5MTc4MzYsOTE3ODM3LDkxNzgzOCw5MTc4MzksOTE3ODQwLDkxNzg0MSw5MTc4NDIsOTE3ODQzLDkxNzg0NCw5MTc4NDUsOTE3ODQ2LDkxNzg0Nyw5MTc4NDgsOTE3ODQ5LDkxNzg1MCw5MTc4NTEsOTE3ODUyLDkxNzg1Myw5MTc4NTQsOTE3ODU1LDkxNzg1Niw5MTc4NTcsOTE3ODU4LDkxNzg1OSw5MTc4NjAsOTE3ODYxLDkxNzg2Miw5MTc4NjMsOTE3ODY0LDkxNzg2NSw5MTc4NjYsOTE3ODY3LDkxNzg2OCw5MTc4NjksOTE3ODcwLDkxNzg3MSw5MTc4NzIsOTE3ODczLDkxNzg3NCw5MTc4NzUsOTE3ODc2LDkxNzg3Nyw5MTc4NzgsOTE3ODc5LDkxNzg4MCw5MTc4ODEsOTE3ODgyLDkxNzg4Myw5MTc4ODQsOTE3ODg1LDkxNzg4Niw5MTc4ODcsOTE3ODg4LDkxNzg4OSw5MTc4OTAsOTE3ODkxLDkxNzg5Miw5MTc4OTMsOTE3ODk0LDkxNzg5NSw5MTc4OTYsOTE3ODk3LDkxNzg5OCw5MTc4OTksOTE3OTAwLDkxNzkwMSw5MTc5MDIsOTE3OTAzLDkxNzkwNCw5MTc5MDUsOTE3OTA2LDkxNzkwNyw5MTc5MDgsOTE3OTA5LDkxNzkxMCw5MTc5MTEsOTE3OTEyLDkxNzkxMyw5MTc5MTQsOTE3OTE1LDkxNzkxNiw5MTc5MTcsOTE3OTE4LDkxNzkxOSw5MTc5MjAsOTE3OTIxLDkxNzkyMiw5MTc5MjMsOTE3OTI0LDkxNzkyNSw5MTc5MjYsOTE3OTI3LDkxNzkyOCw5MTc5MjksOTE3OTMwLDkxNzkzMSw5MTc5MzIsOTE3OTMzLDkxNzkzNCw5MTc5MzUsOTE3OTM2LDkxNzkzNyw5MTc5MzgsOTE3OTM5LDkxNzk0MCw5MTc5NDEsOTE3OTQyLDkxNzk0Myw5MTc5NDQsOTE3OTQ1LDkxNzk0Niw5MTc5NDcsOTE3OTQ4LDkxNzk0OSw5MTc5NTAsOTE3OTUxLDkxNzk1Miw5MTc5NTMsOTE3OTU0LDkxNzk1NSw5MTc5NTYsOTE3OTU3LDkxNzk1OCw5MTc5NTksOTE3OTYwLDkxNzk2MSw5MTc5NjIsOTE3OTYzLDkxNzk2NCw5MTc5NjUsOTE3OTY2LDkxNzk2Nyw5MTc5NjgsOTE3OTY5LDkxNzk3MCw5MTc5NzEsOTE3OTcyLDkxNzk3Myw5MTc5NzQsOTE3OTc1LDkxNzk3Niw5MTc5NzcsOTE3OTc4LDkxNzk3OSw5MTc5ODAsOTE3OTgxLDkxNzk4Miw5MTc5ODMsOTE3OTg0LDkxNzk4NSw5MTc5ODYsOTE3OTg3LDkxNzk4OCw5MTc5ODksOTE3OTkwLDkxNzk5MSw5MTc5OTIsOTE3OTkzLDkxNzk5NCw5MTc5OTUsOTE3OTk2LDkxNzk5Nyw5MTc5OTgsOTE3OTk5XSIpfXN0YXRpYyBnZXREYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF8fCh0aGlzLl9kYXRhPW5ldyBTZXQoUS5nZXRSYXdEYXRhKCkpKSx0aGlzLl9kYXRhfXN0YXRpYyBpc0ludmlzaWJsZUNoYXJhY3RlcihlKXtyZXR1cm4gUS5nZXREYXRhKCkuaGFzKGUpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiBRLmdldERhdGEoKX19US5fZGF0YT12b2lkIDA7Y2xhc3MgZWV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5tZXRob2Q9bix0aGlzLmFyZ3M9cix0aGlzLnR5cGU9MH19Y2xhc3MgdGV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy52c1dvcmtlcj1lLHRoaXMuc2VxPXQsdGhpcy5yZXM9bix0aGlzLmVycj1yLHRoaXMudHlwZT0xfX1jbGFzcyBuZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50TmFtZT1uLHRoaXMuYXJnPXIsdGhpcy50eXBlPTJ9fWNsYXNzIHJle2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50PW4sdGhpcy50eXBlPTN9fWNsYXNzIGlle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy50eXBlPTR9fWNsYXNzIG9le2NvbnN0cnVjdG9yKGUpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9ZSx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKGUpe3RoaXMuX3dvcmtlcklkPWV9c2VuZE1lc3NhZ2UoZSx0KXtjb25zdCBuPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbbl09e3Jlc29sdmU6cixyZWplY3Q6aX0sdGhpcy5fc2VuZChuZXcgZWUodGhpcy5fd29ya2VySWQsbixlLHQpKX0pKX1saXN0ZW4oZSx0KXtsZXQgbj1udWxsO2NvbnN0IHI9bmV3IEIoe29uRmlyc3RMaXN0ZW5lckFkZDooKT0+e249U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQobixyKSx0aGlzLl9zZW5kKG5ldyBuZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+e3RoaXMuX3BlbmRpbmdFbWl0dGVycy5kZWxldGUobiksdGhpcy5fc2VuZChuZXcgaWUodGhpcy5fd29ya2VySWQsbikpLG49bnVsbH19KTtyZXR1cm4gci5ldmVudH1oYW5kbGVNZXNzYWdlKGUpe2UmJmUudnNXb3JrZXImJigtMSE9PXRoaXMuX3dvcmtlcklkJiZlLnZzV29ya2VyIT09dGhpcy5fd29ya2VySWR8fHRoaXMuX2hhbmRsZU1lc3NhZ2UoZSkpfV9oYW5kbGVNZXNzYWdlKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKGUpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UoZSk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UoZSk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKX19X2hhbmRsZVJlcGx5TWVzc2FnZShlKXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiR290IHJlcGx5IHRvIHVua25vd24gc2VxIik7Y29uc3QgdD10aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV07aWYoZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXSxlLmVycil7bGV0IG49ZS5lcnI7cmV0dXJuIGUuZXJyLiRpc0Vycm9yJiYobj1uZXcgRXJyb3Isbi5uYW1lPWUuZXJyLm5hbWUsbi5tZXNzYWdlPWUuZXJyLm1lc3NhZ2Usbi5zdGFjaz1lLmVyci5zdGFjayksdm9pZCB0LnJlamVjdChuKX10LnJlc29sdmUoZS5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKXtjb25zdCB0PWUucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZShlLm1ldGhvZCxlLmFyZ3MpLnRoZW4oKGU9Pnt0aGlzLl9zZW5kKG5ldyB0ZSh0aGlzLl93b3JrZXJJZCx0LGUsdm9pZCAwKSl9KSwoZT0+e2UuZGV0YWlsIGluc3RhbmNlb2YgRXJyb3ImJihlLmRldGFpbD1uKGUuZGV0YWlsKSksdGhpcy5fc2VuZChuZXcgdGUodGhpcy5fd29ya2VySWQsdCx2b2lkIDAsbihlKSkpfSkpfV9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7Y29uc3QgdD1lLnJlcSxuPXRoaXMuX2hhbmRsZXIuaGFuZGxlRXZlbnQoZS5ldmVudE5hbWUsZS5hcmcpKChlPT57dGhpcy5fc2VuZChuZXcgcmUodGhpcy5fd29ya2VySWQsdCxlKSl9KSk7dGhpcy5fcGVuZGluZ0V2ZW50cy5zZXQodCxuKX1faGFuZGxlRXZlbnRNZXNzYWdlKGUpe3RoaXMuX3BlbmRpbmdFbWl0dGVycy5oYXMoZS5yZXEpP3RoaXMuX3BlbmRpbmdFbWl0dGVycy5nZXQoZS5yZXEpLmZpcmUoZS5ldmVudCk6Y29uc29sZS53YXJuKCJHb3QgZXZlbnQgZm9yIHVua25vd24gcmVxIil9X2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpe3RoaXMuX3BlbmRpbmdFdmVudHMuaGFzKGUucmVxKT8odGhpcy5fcGVuZGluZ0V2ZW50cy5nZXQoZS5yZXEpLmRpc3Bvc2UoKSx0aGlzLl9wZW5kaW5nRXZlbnRzLmRlbGV0ZShlLnJlcSkpOmNvbnNvbGUud2FybigiR290IHVuc3Vic2NyaWJlIGZvciB1bmtub3duIHJlcSIpfV9zZW5kKGUpe2NvbnN0IHQ9W107aWYoMD09PWUudHlwZSlmb3IobGV0IG49MDtuPGUuYXJncy5sZW5ndGg7bisrKWUuYXJnc1tuXWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJnQucHVzaChlLmFyZ3Nbbl0pO2Vsc2UgMT09PWUudHlwZSYmZS5yZXMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUucmVzKTt0aGlzLl9oYW5kbGVyLnNlbmRNZXNzYWdlKGUsdCl9fWZ1bmN0aW9uIGFlKGUpe3JldHVybiJvIj09PWVbMF0mJiJuIj09PWVbMV0mJkcoZS5jaGFyQ29kZUF0KDIpKX1mdW5jdGlvbiBzZShlKXtyZXR1cm4vXm9uRHluYW1pYy8udGVzdChlKSYmRyhlLmNoYXJDb2RlQXQoOSkpfWNsYXNzIGNle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5PXQsdGhpcy5fcmVxdWVzdEhhbmRsZXI9bnVsbCx0aGlzLl9wcm90b2NvbD1uZXcgb2Uoe3NlbmRNZXNzYWdlOih0LG4pPT57ZSh0LG4pfSxoYW5kbGVNZXNzYWdlOihlLHQpPT50aGlzLl9oYW5kbGVNZXNzYWdlKGUsdCksaGFuZGxlRXZlbnQ6KGUsdCk9PnRoaXMuX2hhbmRsZUV2ZW50KGUsdCl9KX1vbm1lc3NhZ2UoZSl7dGhpcy5fcHJvdG9jb2wuaGFuZGxlTWVzc2FnZShlKX1faGFuZGxlTWVzc2FnZShlLHQpe2lmKCIkaW5pdGlhbGl6ZSI9PT1lKXJldHVybiB0aGlzLmluaXRpYWxpemUodFswXSx0WzFdLHRbMl0sdFszXSk7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmFwcGx5KHRoaXMuX3JlcXVlc3RIYW5kbGVyLHQpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fV9oYW5kbGVFdmVudChlLHQpe2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcil0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIiKTtpZihzZShlKSl7Y29uc3Qgbj10aGlzLl9yZXF1ZXN0SGFuZGxlcltlXS5jYWxsKHRoaXMuX3JlcXVlc3RIYW5kbGVyLHQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBkeW5hbWljIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiBufWlmKGFlKGUpKXtjb25zdCB0PXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBldmVudCAke2V9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBldmVudCBuYW1lICR7ZX1gKX1pbml0aWFsaXplKGUsdCxuLHIpe3RoaXMuX3Byb3RvY29sLnNldFdvcmtlcklkKGUpO2NvbnN0IGk9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9ZT0+ZnVuY3Rpb24oKXtjb25zdCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChlLG4pfSxpPWU9PmZ1bmN0aW9uKHQpe3JldHVybiBuKGUsdCl9LG89e307Zm9yKGNvbnN0IHQgb2YgZSlzZSh0KT9vW3RdPWkodCk6YWUodCk/b1t0XT1uKHQsdm9pZCAwKTpvW3RdPXIodCk7cmV0dXJuIG99KHIsKChlLHQpPT50aGlzLl9wcm90b2NvbC5zZW5kTWVzc2FnZShlLHQpKSwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihlLHQpKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT8odGhpcy5fcmVxdWVzdEhhbmRsZXI9dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5KGkpLFByb21pc2UucmVzb2x2ZShXKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOih0JiYodm9pZCAwIT09dC5iYXNlVXJsJiZkZWxldGUgdC5iYXNlVXJsLHZvaWQgMCE9PXQucGF0aHMmJnZvaWQgMCE9PXQucGF0aHMudnMmJmRlbGV0ZSB0LnBhdGhzLnZzLHZvaWQgMCE9PXR5cGVvZiB0LnRydXN0ZWRUeXBlc1BvbGljeSYmZGVsZXRlIHQudHJ1c3RlZFR5cGVzUG9saWN5LHQuY2F0Y2hFcnJvcj0hMCxOLnJlcXVpcmUuY29uZmlnKHQpKSxuZXcgUHJvbWlzZSgoKGUsdCk9PnsoMCxOLnJlcXVpcmUpKFtuXSwobj0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyPW4uY3JlYXRlKGkpLHRoaXMuX3JlcXVlc3RIYW5kbGVyP2UoVyh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpOnQobmV3IEVycm9yKCJObyBSZXF1ZXN0SGFuZGxlciEiKSl9KSx0KX0pKSl9fWNsYXNzIGxle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMub3JpZ2luYWxTdGFydD1lLHRoaXMub3JpZ2luYWxMZW5ndGg9dCx0aGlzLm1vZGlmaWVkU3RhcnQ9bix0aGlzLm1vZGlmaWVkTGVuZ3RoPXJ9Z2V0T3JpZ2luYWxFbmQoKXtyZXR1cm4gdGhpcy5vcmlnaW5hbFN0YXJ0K3RoaXMub3JpZ2luYWxMZW5ndGh9Z2V0TW9kaWZpZWRFbmQoKXtyZXR1cm4gdGhpcy5tb2RpZmllZFN0YXJ0K3RoaXMubW9kaWZpZWRMZW5ndGh9fWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuKHQ8PDUpLXQrZXwwfWZ1bmN0aW9uIGhlKGUsdCl7dD11ZSgxNDk0MTcsdCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQ9dWUoZS5jaGFyQ29kZUF0KG4pLHQpO3JldHVybiB0fWNsYXNzIGZle2NvbnN0cnVjdG9yKGUpe3RoaXMuc291cmNlPWV9Z2V0RWxlbWVudHMoKXtjb25zdCBlPXRoaXMuc291cmNlLHQ9bmV3IEludDMyQXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W25dPWUuY2hhckNvZGVBdChuKTtyZXR1cm4gdH19ZnVuY3Rpb24gZGUoZSx0LG4pe3JldHVybiBuZXcgYmUobmV3IGZlKGUpLG5ldyBmZSh0KSkuQ29tcHV0ZURpZmYobikuY2hhbmdlc31jbGFzcyBtZXtzdGF0aWMgQXNzZXJ0KGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKHQpfX1jbGFzcyBnZXtzdGF0aWMgQ29weShlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX1zdGF0aWMgQ29weTIoZSx0LG4scixpKXtmb3IobGV0IG89MDtvPGk7bysrKW5bcitvXT1lW3Qrb119fWNsYXNzIHBle2NvbnN0cnVjdG9yKCl7dGhpcy5tX2NoYW5nZXM9W10sdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0LHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MH1NYXJrTmV4dENoYW5nZSgpeyh0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5tX2NoYW5nZXMucHVzaChuZXcgbGUodGhpcy5tX29yaWdpbmFsU3RhcnQsdGhpcy5tX29yaWdpbmFsQ291bnQsdGhpcy5tX21vZGlmaWVkU3RhcnQsdGhpcy5tX21vZGlmaWVkQ291bnQpKSx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTAsdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0fUFkZE9yaWdpbmFsRWxlbWVudChlLHQpe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LGUpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LHQpLHRoaXMubV9vcmlnaW5hbENvdW50Kyt9QWRkTW9kaWZpZWRFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkQ291bnQrK31nZXRDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXN9Z2V0UmV2ZXJzZUNoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlcy5yZXZlcnNlKCksdGhpcy5tX2NoYW5nZXN9fWNsYXNzIGJle2NvbnN0cnVjdG9yKGUsdCxuPW51bGwpe3RoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlPW4sdGhpcy5fb3JpZ2luYWxTZXF1ZW5jZT1lLHRoaXMuX21vZGlmaWVkU2VxdWVuY2U9dDtjb25zdFtyLGksb109YmUuX2dldEVsZW1lbnRzKGUpLFthLHMsY109YmUuX2dldEVsZW1lbnRzKHQpO3RoaXMuX2hhc1N0cmluZ3M9byYmYyx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1pLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9YSx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPXMsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkoZSl7cmV0dXJuIGUubGVuZ3RoPjAmJiJzdHJpbmciPT10eXBlb2YgZVswXX1zdGF0aWMgX2dldEVsZW1lbnRzKGUpe2NvbnN0IHQ9ZS5nZXRFbGVtZW50cygpO2lmKGJlLl9pc1N0cmluZ0FycmF5KHQpKXtjb25zdCBlPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZVtuXT1oZSh0W25dLDApO3JldHVyblt0LGUsITBdfXJldHVybiB0IGluc3RhbmNlb2YgSW50MzJBcnJheT9bW10sdCwhMV06W1tdLG5ldyBJbnQzMkFycmF5KHQpLCExXX1FbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1FbGVtZW50c0FyZVN0cmljdEVxdWFsKGUsdCl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlLHQpKXJldHVybiExO3JldHVybiBiZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLGUpPT09YmUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSx0KX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRTdHJpY3RFbGVtZW50P2UuZ2V0U3RyaWN0RWxlbWVudCh0KTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1Db21wdXRlRGlmZihlKXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSxlKX1fQ29tcHV0ZURpZmYoZSx0LG4scixpKXtjb25zdCBvPVshMV07bGV0IGE9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLG8pO3JldHVybiBpJiYoYT10aGlzLlByZXR0aWZ5Q2hhbmdlcyhhKSkse3F1aXRFYXJseTpvWzBdLGNoYW5nZXM6YX19Q29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LG4scixpKXtmb3IoaVswXT0hMTtlPD10JiZuPD1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZSxuKTspZSsrLG4rKztmb3IoO3Q+PWUmJnI+PW4mJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LHIpOyl0LS0sci0tO2lmKGU+dHx8bj5yKXtsZXQgaTtyZXR1cm4gbjw9cj8obWUuQXNzZXJ0KGU9PT10KzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGk9W25ldyBsZShlLDAsbixyLW4rMSldKTplPD10PyhtZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bbmV3IGxlKGUsdC1lKzEsbiwwKV0pOihtZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksbWUuQXNzZXJ0KG49PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGk9W10pLGl9Y29uc3Qgbz1bMF0sYT1bMF0scz10aGlzLkNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLG8sYSxpKSxjPW9bMF0sbD1hWzBdO2lmKG51bGwhPT1zKXJldHVybiBzO2lmKCFpWzBdKXtjb25zdCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSxjLG4sbCxpKTtsZXQgYT1bXTtyZXR1cm4gYT1pWzBdP1tuZXcgbGUoYysxLHQtKGMrMSkrMSxsKzEsci0obCsxKSsxKV06dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShjKzEsdCxsKzEscixpKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhvLGEpfXJldHVybltuZXcgbGUoZSx0LWUrMSxuLHItbisxKV19V0FMS1RSQUNFKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxoLGYsZCxtLGcscCxiKXtsZXQgdj1udWxsLHk9bnVsbCxDPW5ldyBwZSx3PXQsXz1uLFM9ZlswXS1nWzBdLXIsQT0tMTA3Mzc0MTgyNCxFPXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCB0PVMrZTt0PT09d3x8dDxfJiZjW3QtMV08Y1t0KzFdPyhkPSh1PWNbdCsxXSktUy1yLHU8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9dSxDLkFkZE1vZGlmaWVkRWxlbWVudCh1KzEsZCksUz10KzEtZSk6KGQ9KHU9Y1t0LTFdKzEpLVMtcix1PEEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUtMSxDLkFkZE9yaWdpbmFsRWxlbWVudCh1LGQrMSksUz10LTEtZSksRT49MCYmKGU9KGM9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W0VdKVswXSx3PTEsXz1jLmxlbmd0aC0xKX13aGlsZSgtLUU+PS0xKTtpZih2PUMuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxiWzBdKXtsZXQgZT1mWzBdKzEsdD1nWzBdKzE7aWYobnVsbCE9PXYmJnYubGVuZ3RoPjApe2NvbnN0IG49dlt2Lmxlbmd0aC0xXTtlPU1hdGgubWF4KGUsbi5nZXRPcmlnaW5hbEVuZCgpKSx0PU1hdGgubWF4KHQsbi5nZXRNb2RpZmllZEVuZCgpKX15PVtuZXcgbGUoZSxoLWUrMSx0LG0tdCsxKV19ZWxzZXtDPW5ldyBwZSx3PW8sXz1hLFM9ZlswXS1nWzBdLXMsQT0xMDczNzQxODI0LEU9cD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IGU9UytpO2U9PT13fHxlPF8mJmxbZS0xXT49bFtlKzFdPyhkPSh1PWxbZSsxXS0xKS1TLXMsdT5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11KzEsQy5BZGRPcmlnaW5hbEVsZW1lbnQodSsxLGQrMSksUz1lKzEtaSk6KGQ9KHU9bFtlLTFdKS1TLXMsdT5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11LEMuQWRkTW9kaWZpZWRFbGVtZW50KHUrMSxkKzEpLFM9ZS0xLWkpLEU+PTAmJihpPShsPXRoaXMubV9yZXZlcnNlSGlzdG9yeVtFXSlbMF0sdz0xLF89bC5sZW5ndGgtMSl9d2hpbGUoLS1FPj0tMSk7eT1DLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXModix5KX1Db21wdXRlUmVjdXJzaW9uUG9pbnQoZSx0LG4scixpLG8sYSl7bGV0IHM9MCxjPTAsbD0wLHU9MCxoPTAsZj0wO2UtLSxuLS0saVswXT0wLG9bMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IGQ9dC1lKyhyLW4pLG09ZCsxLGc9bmV3IEludDMyQXJyYXkobSkscD1uZXcgSW50MzJBcnJheShtKSxiPXItbix2PXQtZSx5PWUtbixDPXQtcix3PSh2LWIpJTI9PTA7Z1tiXT1lLHBbdl09dCxhWzBdPSExO2ZvcihsZXQgXz0xO188PWQvMisxO18rKyl7bGV0IGQ9MCxTPTA7bD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGItXyxfLGIsbSksdT10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGIrXyxfLGIsbSk7Zm9yKGxldCBlPWw7ZTw9dTtlKz0yKXtzPWU9PT1sfHxlPHUmJmdbZS0xXTxnW2UrMV0/Z1tlKzFdOmdbZS0xXSsxLGM9cy0oZS1iKS15O2NvbnN0IG49cztmb3IoO3M8dCYmYzxyJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocysxLGMrMSk7KXMrKyxjKys7aWYoZ1tlXT1zLHMrYz5kK1MmJihkPXMsUz1jKSwhdyYmTWF0aC5hYnMoZS12KTw9Xy0xJiZzPj1wW2VdKXJldHVybiBpWzBdPXMsb1swXT1jLG48PXBbZV0mJl88PTE0NDg/dGhpcy5XQUxLVFJBQ0UoYixsLHUseSx2LGgsZixDLGcscCxzLHQsaSxjLHIsbyx3LGEpOm51bGx9Y29uc3QgQT0oZC1lKyhTLW4pLV8pLzI7aWYobnVsbCE9PXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoZCxBKSlyZXR1cm4gYVswXT0hMCxpWzBdPWQsb1swXT1TLEE+MCYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSk6KGUrKyxuKyssW25ldyBsZShlLHQtZSsxLG4sci1uKzEpXSk7aD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYtXyxfLHYsbSksZj10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYrXyxfLHYsbSk7Zm9yKGxldCBkPWg7ZDw9ZjtkKz0yKXtzPWQ9PT1ofHxkPGYmJnBbZC0xXT49cFtkKzFdP3BbZCsxXS0xOnBbZC0xXSxjPXMtKGQtdiktQztjb25zdCBtPXM7Zm9yKDtzPmUmJmM+biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHMsYyk7KXMtLSxjLS07aWYocFtkXT1zLHcmJk1hdGguYWJzKGQtYik8PV8mJnM8PWdbZF0pcmV0dXJuIGlbMF09cyxvWzBdPWMsbT49Z1tkXSYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSk6bnVsbH1pZihfPD0xNDQ3KXtsZXQgZT1uZXcgSW50MzJBcnJheSh1LWwrMik7ZVswXT1iLWwrMSxnZS5Db3B5MihnLGwsZSwxLHUtbCsxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChlKSxlPW5ldyBJbnQzMkFycmF5KGYtaCsyKSxlWzBdPXYtaCsxLGdlLkNvcHkyKHAsaCxlLDEsZi1oKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKGUpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0UoYixsLHUseSx2LGgsZixDLGcscCxzLHQsaSxjLHIsbyx3LGEpfVByZXR0aWZ5Q2hhbmdlcyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLHI9dDxlLmxlbmd0aC0xP2VbdCsxXS5vcmlnaW5hbFN0YXJ0OnRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLGk9dDxlLmxlbmd0aC0xP2VbdCsxXS5tb2RpZmllZFN0YXJ0OnRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLG89bi5vcmlnaW5hbExlbmd0aD4wLGE9bi5tb2RpZmllZExlbmd0aD4wO2Zvcig7bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGg8ciYmbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGg8aSYmKCFvfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpKSYmKCFhfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpKTspe2NvbnN0IGU9dGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkU3RhcnQpO2lmKHRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkmJiFlKWJyZWFrO24ub3JpZ2luYWxTdGFydCsrLG4ubW9kaWZpZWRTdGFydCsrfWNvbnN0IHM9W251bGxdO3Q8ZS5sZW5ndGgtMSYmdGhpcy5DaGFuZ2VzT3ZlcmxhcChlW3RdLGVbdCsxXSxzKSYmKGVbdF09c1swXSxlLnNwbGljZSh0KzEsMSksdC0tKX1mb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgbj1lW3RdO2xldCByPTAsaT0wO2lmKHQ+MCl7Y29uc3Qgbj1lW3QtMV07cj1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxpPW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RofWNvbnN0IG89bi5vcmlnaW5hbExlbmd0aD4wLGE9bi5tb2RpZmllZExlbmd0aD4wO2xldCBzPTAsYz10aGlzLl9ib3VuZGFyeVNjb3JlKG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsTGVuZ3RoLG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkTGVuZ3RoKTtmb3IobGV0IGU9MTs7ZSsrKXtjb25zdCB0PW4ub3JpZ2luYWxTdGFydC1lLGw9bi5tb2RpZmllZFN0YXJ0LWU7aWYodDxyfHxsPGkpYnJlYWs7aWYobyYmIXRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHQsdCtuLm9yaWdpbmFsTGVuZ3RoKSlicmVhaztpZihhJiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwobCxsK24ubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2NvbnN0IHU9KHQ9PT1yJiZsPT09aT81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUodCxuLm9yaWdpbmFsTGVuZ3RoLGwsbi5tb2RpZmllZExlbmd0aCk7dT5jJiYoYz11LHM9ZSl9bi5vcmlnaW5hbFN0YXJ0LT1zLG4ubW9kaWZpZWRTdGFydC09cztjb25zdCBsPVtudWxsXTt0PjAmJnRoaXMuQ2hhbmdlc092ZXJsYXAoZVt0LTFdLGVbdF0sbCkmJihlW3QtMV09bFswXSxlLnNwbGljZSh0LDEpLHQrKyl9aWYodGhpcy5faGFzU3RyaW5ncylmb3IobGV0IHQ9MSxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZVt0LTFdLHI9ZVt0XSxpPXIub3JpZ2luYWxTdGFydC1uLm9yaWdpbmFsU3RhcnQtbi5vcmlnaW5hbExlbmd0aCxvPW4ub3JpZ2luYWxTdGFydCxhPXIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoLHM9YS1vLGM9bi5tb2RpZmllZFN0YXJ0LGw9ci5tb2RpZmllZFN0YXJ0K3IubW9kaWZpZWRMZW5ndGgsdT1sLWM7aWYoaTw1JiZzPDIwJiZ1PDIwKXtjb25zdCBlPXRoaXMuX2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UobyxzLGMsdSxpKTtpZihlKXtjb25zdFt0LG9dPWU7dD09PW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoJiZvPT09bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGh8fChuLm9yaWdpbmFsTGVuZ3RoPXQtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9by1uLm1vZGlmaWVkU3RhcnQsci5vcmlnaW5hbFN0YXJ0PXQraSxyLm1vZGlmaWVkU3RhcnQ9bytpLHIub3JpZ2luYWxMZW5ndGg9YS1yLm9yaWdpbmFsU3RhcnQsci5tb2RpZmllZExlbmd0aD1sLXIubW9kaWZpZWRTdGFydCl9fX1yZXR1cm4gZX1fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShlLHQsbixyLGkpe2lmKHQ8aXx8cjxpKXJldHVybiBudWxsO2NvbnN0IG89ZSt0LWkrMSxhPW4rci1pKzE7bGV0IHM9MCxjPTAsbD0wO2ZvcihsZXQgdD1lO3Q8bzt0KyspZm9yKGxldCBlPW47ZTxhO2UrKyl7Y29uc3Qgbj10aGlzLl9jb250aWd1b3VzU2VxdWVuY2VTY29yZSh0LGUsaSk7bj4wJiZuPnMmJihzPW4sYz10LGw9ZSl9cmV0dXJuIHM+MD9bYyxsXTpudWxsfV9jb250aWd1b3VzU2VxdWVuY2VTY29yZShlLHQsbil7bGV0IHI9MDtmb3IobGV0IGk9MDtpPG47aSsrKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUraSx0K2kpKXJldHVybiAwO3IrPXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZStpXS5sZW5ndGh9cmV0dXJuIHJ9X09yaWdpbmFsSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV0pfV9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKHQ+MCl7Y29uc3Qgbj1lK3Q7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KG4tMSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShuKSlyZXR1cm4hMH1yZXR1cm4hMX1fTW9kaWZpZWRJc0JvdW5kYXJ5KGUpe3JldHVybiBlPD0wfHxlPj10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xfHx0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tlXSl9X01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShlLHQpe2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUtMSkpcmV0dXJuITA7aWYodD4wKXtjb25zdCBuPWUrdDtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkobi0xKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KG4pKXJldHVybiEwfXJldHVybiExfV9ib3VuZGFyeVNjb3JlKGUsdCxuLHIpe3JldHVybih0aGlzLl9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkoZSx0KT8xOjApKyh0aGlzLl9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkobixyKT8xOjApfUNvbmNhdGVuYXRlQ2hhbmdlcyhlLHQpe2NvbnN0IG49W107aWYoMD09PWUubGVuZ3RofHwwPT09dC5sZW5ndGgpcmV0dXJuIHQubGVuZ3RoPjA/dDplO2lmKHRoaXMuQ2hhbmdlc092ZXJsYXAoZVtlLmxlbmd0aC0xXSx0WzBdLG4pKXtjb25zdCByPW5ldyBBcnJheShlLmxlbmd0aCt0Lmxlbmd0aC0xKTtyZXR1cm4gZ2UuQ29weShlLDAsciwwLGUubGVuZ3RoLTEpLHJbZS5sZW5ndGgtMV09blswXSxnZS5Db3B5KHQsMSxyLGUubGVuZ3RoLHQubGVuZ3RoLTEpLHJ9e2NvbnN0IG49bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtyZXR1cm4gZ2UuQ29weShlLDAsbiwwLGUubGVuZ3RoKSxnZS5Db3B5KHQsMCxuLGUubGVuZ3RoLHQubGVuZ3RoKSxufX1DaGFuZ2VzT3ZlcmxhcChlLHQsbil7aWYobWUuQXNzZXJ0KGUub3JpZ2luYWxTdGFydDw9dC5vcmlnaW5hbFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLG1lLkFzc2VydChlLm1vZGlmaWVkU3RhcnQ8PXQubW9kaWZpZWRTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aD49dC5vcmlnaW5hbFN0YXJ0fHxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0KXtjb25zdCByPWUub3JpZ2luYWxTdGFydDtsZXQgaT1lLm9yaWdpbmFsTGVuZ3RoO2NvbnN0IG89ZS5tb2RpZmllZFN0YXJ0O2xldCBhPWUubW9kaWZpZWRMZW5ndGg7cmV0dXJuIGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnQmJihpPXQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLWUub3JpZ2luYWxTdGFydCksZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGg+PXQubW9kaWZpZWRTdGFydCYmKGE9dC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtZS5tb2RpZmllZFN0YXJ0KSxuWzBdPW5ldyBsZShyLGksbyxhKSwhMH1yZXR1cm4gblswXT1udWxsLCExfUNsaXBEaWFnb25hbEJvdW5kKGUsdCxuLHIpe2lmKGU+PTAmJmU8cilyZXR1cm4gZTtjb25zdCBpPXQlMj09MDtpZihlPDApe3JldHVybiBpPT09KG4lMj09MCk/MDoxfXJldHVybiBpPT09KChyLW4tMSklMj09MCk/ci0xOnItMn19bGV0IHZlO2lmKHZvaWQgMCE9PU4udnNjb2RlJiZ2b2lkIDAhPT1OLnZzY29kZS5wcm9jZXNzKXtjb25zdCBlPU4udnNjb2RlLnByb2Nlc3M7dmU9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZDooKT0+ZS5jd2QoKX19ZWxzZSB2ZT0idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3M/e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gcHJvY2Vzcy5lbnZ9LGN3ZDooKT0+cHJvY2Vzcy5lbnYuVlNDT0RFX0NXRHx8cHJvY2Vzcy5jd2QoKX06e2dldCBwbGF0Zm9ybSgpe3JldHVybiBUPyJ3aW4zMiI6Tz8iZGFyd2luIjoibGludXgifSxnZXQgYXJjaCgpe30sZ2V0IGVudigpe3JldHVybnt9fSxjd2Q6KCk9PiIvIn07Y29uc3QgeWU9dmUuY3dkLENlPXZlLmVudix3ZT12ZS5wbGF0Zm9ybSxfZT00NixTZT00NyxBZT05MixFZT01ODtjbGFzcyB4ZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxuKXtsZXQgcjsic3RyaW5nIj09dHlwZW9mIHQmJjA9PT10LmluZGV4T2YoIm5vdCAiKT8ocj0ibXVzdCBub3QgYmUiLHQ9dC5yZXBsYWNlKC9ebm90IC8sIiIpKTpyPSJtdXN0IGJlIjtjb25zdCBpPS0xIT09ZS5pbmRleE9mKCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2xldCBvPWBUaGUgIiR7ZX0iICR7aX0gJHtyfSBvZiB0eXBlICR7dH1gO28rPSIuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgbixzdXBlcihvKSx0aGlzLmNvZGU9IkVSUl9JTlZBTElEX0FSR19UWVBFIn19ZnVuY3Rpb24gTmUoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHhlKHQsInN0cmluZyIsZSl9ZnVuY3Rpb24ga2UoZSl7cmV0dXJuIGU9PT1TZXx8ZT09PUFlfWZ1bmN0aW9uIExlKGUpe3JldHVybiBlPT09U2V9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGU+PTY1JiZlPD05MHx8ZT49OTcmJmU8PTEyMn1mdW5jdGlvbiBPZShlLHQsbixyKXtsZXQgaT0iIixvPTAsYT0tMSxzPTAsYz0wO2ZvcihsZXQgbD0wO2w8PWUubGVuZ3RoOysrbCl7aWYobDxlLmxlbmd0aCljPWUuY2hhckNvZGVBdChsKTtlbHNle2lmKHIoYykpYnJlYWs7Yz1TZX1pZihyKGMpKXtpZihhPT09bC0xfHwxPT09cyk7ZWxzZSBpZigyPT09cyl7aWYoaS5sZW5ndGg8Mnx8MiE9PW98fGkuY2hhckNvZGVBdChpLmxlbmd0aC0xKSE9PV9lfHxpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMikhPT1fZSl7aWYoaS5sZW5ndGg+Mil7Y29uc3QgZT1pLmxhc3RJbmRleE9mKG4pOy0xPT09ZT8oaT0iIixvPTApOihpPWkuc2xpY2UoMCxlKSxvPWkubGVuZ3RoLTEtaS5sYXN0SW5kZXhPZihuKSksYT1sLHM9MDtjb250aW51ZX1pZigwIT09aS5sZW5ndGgpe2k9IiIsbz0wLGE9bCxzPTA7Y29udGludWV9fXQmJihpKz1pLmxlbmd0aD4wP2Ake259Li5gOiIuLiIsbz0yKX1lbHNlIGkubGVuZ3RoPjA/aSs9YCR7bn0ke2Uuc2xpY2UoYSsxLGwpfWA6aT1lLnNsaWNlKGErMSxsKSxvPWwtYS0xO2E9bCxzPTB9ZWxzZSBjPT09X2UmJi0xIT09cz8rK3M6cz0tMX1yZXR1cm4gaX1mdW5jdGlvbiBJZShlLHQpe2lmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IHhlKCJwYXRoT2JqZWN0IiwiT2JqZWN0Iix0KTtjb25zdCBuPXQuZGlyfHx0LnJvb3Qscj10LmJhc2V8fGAke3QubmFtZXx8IiJ9JHt0LmV4dHx8IiJ9YDtyZXR1cm4gbj9uPT09dC5yb290P2Ake259JHtyfWA6YCR7bn0ke2V9JHtyfWA6cn1jb25zdCBNZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSIiLHI9ITE7Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49LTE7aS0tKXtsZXQgbztpZihpPj0wKXtpZihvPWVbaV0sTmUobywicGF0aCIpLDA9PT1vLmxlbmd0aCljb250aW51ZX1lbHNlIDA9PT10Lmxlbmd0aD9vPXllKCk6KG89Q2VbYD0ke3R9YF18fHllKCksKHZvaWQgMD09PW98fG8uc2xpY2UoMCwyKS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpJiZvLmNoYXJDb2RlQXQoMik9PT1BZSkmJihvPWAke3R9XFxgKSk7Y29uc3QgYT1vLmxlbmd0aDtsZXQgcz0wLGM9IiIsbD0hMTtjb25zdCB1PW8uY2hhckNvZGVBdCgwKTtpZigxPT09YSlrZSh1KSYmKHM9MSxsPSEwKTtlbHNlIGlmKGtlKHUpKWlmKGw9ITAsa2Uoby5jaGFyQ29kZUF0KDEpKSl7bGV0IGU9Mix0PWU7Zm9yKDtlPGEmJiFrZShvLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxhJiZlIT09dCl7Y29uc3Qgbj1vLnNsaWNlKHQsZSk7Zm9yKHQ9ZTtlPGEmJmtlKG8uY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGEmJmUhPT10KXtmb3IodD1lO2U8YSYmIWtlKG8uY2hhckNvZGVBdChlKSk7KWUrKztlIT09YSYmZT09PXR8fChjPWBcXFxcJHtufVxcJHtvLnNsaWNlKHQsZSl9YCxzPWUpfX19ZWxzZSBzPTE7ZWxzZSBUZSh1KSYmby5jaGFyQ29kZUF0KDEpPT09RWUmJihjPW8uc2xpY2UoMCwyKSxzPTIsYT4yJiZrZShvLmNoYXJDb2RlQXQoMikpJiYobD0hMCxzPTMpKTtpZihjLmxlbmd0aD4wKWlmKHQubGVuZ3RoPjApe2lmKGMudG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSljb250aW51ZX1lbHNlIHQ9YztpZihyKXtpZih0Lmxlbmd0aD4wKWJyZWFrfWVsc2UgaWYobj1gJHtvLnNsaWNlKHMpfVxcJHtufWAscj1sLGwmJnQubGVuZ3RoPjApYnJlYWt9cmV0dXJuIG49T2UobiwhciwiXFwiLGtlKSxyP2Ake3R9XFwke259YDpgJHt0fSR7bn1gfHwiLiJ9LG5vcm1hbGl6ZShlKXtOZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG4scj0wLGk9ITE7Y29uc3Qgbz1lLmNoYXJDb2RlQXQoMCk7aWYoMT09PXQpcmV0dXJuIExlKG8pPyJcXCI6ZTtpZihrZShvKSlpZihpPSEwLGtlKGUuY2hhckNvZGVBdCgxKSkpe2xldCBpPTIsbz1pO2Zvcig7aTx0JiYha2UoZS5jaGFyQ29kZUF0KGkpKTspaSsrO2lmKGk8dCYmaSE9PW8pe2NvbnN0IGE9ZS5zbGljZShvLGkpO2ZvcihvPWk7aTx0JiZrZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJiFrZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaT09PXQpcmV0dXJuYFxcXFwke2F9XFwke2Uuc2xpY2Uobyl9XFxgO2khPT1vJiYobj1gXFxcXCR7YX1cXCR7ZS5zbGljZShvLGkpfWAscj1pKX19fWVsc2Ugcj0xO2Vsc2UgVGUobykmJmUuY2hhckNvZGVBdCgxKT09PUVlJiYobj1lLnNsaWNlKDAsMikscj0yLHQ+MiYma2UoZS5jaGFyQ29kZUF0KDIpKSYmKGk9ITAscj0zKSk7bGV0IGE9cjx0P09lKGUuc2xpY2UociksIWksIlxcIixrZSk6IiI7cmV0dXJuIDAhPT1hLmxlbmd0aHx8aXx8KGE9Ii4iKSxhLmxlbmd0aD4wJiZrZShlLmNoYXJDb2RlQXQodC0xKSkmJihhKz0iXFwiKSx2b2lkIDA9PT1uP2k/YFxcJHthfWA6YTppP2Ake259XFwke2F9YDpgJHtufSR7YX1gfSxpc0Fic29sdXRlKGUpe05lKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiExO2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApO3JldHVybiBrZShuKXx8dD4yJiZUZShuKSYmZS5jaGFyQ29kZUF0KDEpPT09RWUmJmtlKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4uZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiIuIjtsZXQgdCxuO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7KytyKXtjb25zdCBpPWVbcl07TmUoaSwicGF0aCIpLGkubGVuZ3RoPjAmJih2b2lkIDA9PT10P3Q9bj1pOnQrPWBcXCR7aX1gKX1pZih2b2lkIDA9PT10KXJldHVybiIuIjtsZXQgcj0hMCxpPTA7aWYoInN0cmluZyI9PXR5cGVvZiBuJiZrZShuLmNoYXJDb2RlQXQoMCkpKXsrK2k7Y29uc3QgZT1uLmxlbmd0aDtlPjEmJmtlKG4uY2hhckNvZGVBdCgxKSkmJigrK2ksZT4yJiYoa2Uobi5jaGFyQ29kZUF0KDIpKT8rK2k6cj0hMSkpfWlmKHIpe2Zvcig7aTx0Lmxlbmd0aCYma2UodC5jaGFyQ29kZUF0KGkpKTspaSsrO2k+PTImJih0PWBcXCR7dC5zbGljZShpKX1gKX1yZXR1cm4gTWUubm9ybWFsaXplKHQpfSxyZWxhdGl2ZShlLHQpe2lmKE5lKGUsImZyb20iKSxOZSh0LCJ0byIpLGU9PT10KXJldHVybiIiO2NvbnN0IG49TWUucmVzb2x2ZShlKSxyPU1lLnJlc29sdmUodCk7aWYobj09PXIpcmV0dXJuIiI7aWYoKGU9bi50b0xvd2VyQ2FzZSgpKT09PSh0PXIudG9Mb3dlckNhc2UoKSkpcmV0dXJuIiI7bGV0IGk9MDtmb3IoO2k8ZS5sZW5ndGgmJmUuY2hhckNvZGVBdChpKT09PUFlOylpKys7bGV0IG89ZS5sZW5ndGg7Zm9yKDtvLTE+aSYmZS5jaGFyQ29kZUF0KG8tMSk9PT1BZTspby0tO2NvbnN0IGE9by1pO2xldCBzPTA7Zm9yKDtzPHQubGVuZ3RoJiZ0LmNoYXJDb2RlQXQocyk9PT1BZTspcysrO2xldCBjPXQubGVuZ3RoO2Zvcig7Yy0xPnMmJnQuY2hhckNvZGVBdChjLTEpPT09QWU7KWMtLTtjb25zdCBsPWMtcyx1PWE8bD9hOmw7bGV0IGg9LTEsZj0wO2Zvcig7Zjx1O2YrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoaStmKTtpZihuIT09dC5jaGFyQ29kZUF0KHMrZikpYnJlYWs7bj09PUFlJiYoaD1mKX1pZihmIT09dSl7aWYoLTE9PT1oKXJldHVybiByfWVsc2V7aWYobD51KXtpZih0LmNoYXJDb2RlQXQocytmKT09PUFlKXJldHVybiByLnNsaWNlKHMrZisxKTtpZigyPT09ZilyZXR1cm4gci5zbGljZShzK2YpfWE+dSYmKGUuY2hhckNvZGVBdChpK2YpPT09QWU/aD1mOjI9PT1mJiYoaD0zKSksLTE9PT1oJiYoaD0wKX1sZXQgZD0iIjtmb3IoZj1pK2grMTtmPD1vOysrZilmIT09byYmZS5jaGFyQ29kZUF0KGYpIT09QWV8fChkKz0wPT09ZC5sZW5ndGg/Ii4uIjoiXFwuLiIpO3JldHVybiBzKz1oLGQubGVuZ3RoPjA/YCR7ZH0ke3Iuc2xpY2UocyxjKX1gOihyLmNoYXJDb2RlQXQocyk9PT1BZSYmKytzLHIuc2xpY2UocyxjKSl9LHRvTmFtZXNwYWNlZFBhdGgoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBlO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iIjtjb25zdCB0PU1lLnJlc29sdmUoZSk7aWYodC5sZW5ndGg8PTIpcmV0dXJuIGU7aWYodC5jaGFyQ29kZUF0KDApPT09QWUpe2lmKHQuY2hhckNvZGVBdCgxKT09PUFlKXtjb25zdCBlPXQuY2hhckNvZGVBdCgyKTtpZig2MyE9PWUmJmUhPT1fZSlyZXR1cm5gXFxcXD9cXFVOQ1xcJHt0LnNsaWNlKDIpfWB9fWVsc2UgaWYoVGUodC5jaGFyQ29kZUF0KDApKSYmdC5jaGFyQ29kZUF0KDEpPT09RWUmJnQuY2hhckNvZGVBdCgyKT09PUFlKXJldHVybmBcXFxcP1xcJHt0fWA7cmV0dXJuIGV9LGRpcm5hbWUoZSl7TmUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIi4iO2xldCBuPS0xLHI9MDtjb25zdCBpPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4ga2UoaSk/ZToiLiI7aWYoa2UoaSkpe2lmKG49cj0xLGtlKGUuY2hhckNvZGVBdCgxKSkpe2xldCBpPTIsbz1pO2Zvcig7aTx0JiYha2UoZS5jaGFyQ29kZUF0KGkpKTspaSsrO2lmKGk8dCYmaSE9PW8pe2ZvcihvPWk7aTx0JiZrZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJiFrZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaT09PXQpcmV0dXJuIGU7aSE9PW8mJihuPXI9aSsxKX19fX1lbHNlIFRlKGkpJiZlLmNoYXJDb2RlQXQoMSk9PT1FZSYmKG49dD4yJiZrZShlLmNoYXJDb2RlQXQoMikpPzM6MixyPW4pO2xldCBvPS0xLGE9ITA7Zm9yKGxldCBuPXQtMTtuPj1yOy0tbilpZihrZShlLmNoYXJDb2RlQXQobikpKXtpZighYSl7bz1uO2JyZWFrfX1lbHNlIGE9ITE7aWYoLTE9PT1vKXtpZigtMT09PW4pcmV0dXJuIi4iO289bn1yZXR1cm4gZS5zbGljZSgwLG8pfSxiYXNlbmFtZShlLHQpe3ZvaWQgMCE9PXQmJk5lKHQsImV4dCIpLE5lKGUsInBhdGgiKTtsZXQgbixyPTAsaT0tMSxvPSEwO2lmKGUubGVuZ3RoPj0yJiZUZShlLmNoYXJDb2RlQXQoMCkpJiZlLmNoYXJDb2RlQXQoMSk9PT1FZSYmKHI9Miksdm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbil7Y29uc3QgYz1lLmNoYXJDb2RlQXQobik7aWYoa2UoYykpe2lmKCFvKXtyPW4rMTticmVha319ZWxzZS0xPT09cyYmKG89ITEscz1uKzEpLGE+PTAmJihjPT09dC5jaGFyQ29kZUF0KGEpPy0xPT0tLWEmJihpPW4pOihhPS0xLGk9cykpfXJldHVybiByPT09aT9pPXM6LTE9PT1pJiYoaT1lLmxlbmd0aCksZS5zbGljZShyLGkpfWZvcihuPWUubGVuZ3RoLTE7bj49cjstLW4paWYoa2UoZS5jaGFyQ29kZUF0KG4pKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPW4rMSk7cmV0dXJuLTE9PT1pPyIiOmUuc2xpY2UocixpKX0sZXh0bmFtZShlKXtOZShlLCJwYXRoIik7bGV0IHQ9MCxuPS0xLHI9MCxpPS0xLG89ITAsYT0wO2UubGVuZ3RoPj0yJiZlLmNoYXJDb2RlQXQoMSk9PT1FZSYmVGUoZS5jaGFyQ29kZUF0KDApKSYmKHQ9cj0yKTtmb3IobGV0IHM9ZS5sZW5ndGgtMTtzPj10Oy0tcyl7Y29uc3QgdD1lLmNoYXJDb2RlQXQocyk7aWYoa2UodCkpe2lmKCFvKXtyPXMrMTticmVha319ZWxzZS0xPT09aSYmKG89ITEsaT1zKzEpLHQ9PT1fZT8tMT09PW4/bj1zOjEhPT1hJiYoYT0xKTotMSE9PW4mJihhPS0xKX1yZXR1cm4tMT09PW58fC0xPT09aXx8MD09PWF8fDE9PT1hJiZuPT09aS0xJiZuPT09cisxPyIiOmUuc2xpY2UobixpKX0sZm9ybWF0OkllLmJpbmQobnVsbCwiXFwiKSxwYXJzZShlKXtOZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5sZW5ndGg7bGV0IHI9MCxpPWUuY2hhckNvZGVBdCgwKTtpZigxPT09bilyZXR1cm4ga2UoaSk/KHQucm9vdD10LmRpcj1lLHQpOih0LmJhc2U9dC5uYW1lPWUsdCk7aWYoa2UoaSkpe2lmKHI9MSxrZShlLmNoYXJDb2RlQXQoMSkpKXtsZXQgdD0yLGk9dDtmb3IoO3Q8biYmIWtlKGUuY2hhckNvZGVBdCh0KSk7KXQrKztpZih0PG4mJnQhPT1pKXtmb3IoaT10O3Q8biYma2UoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiYha2UoZS5jaGFyQ29kZUF0KHQpKTspdCsrO3Q9PT1uP3I9dDp0IT09aSYmKHI9dCsxKX19fX1lbHNlIGlmKFRlKGkpJiZlLmNoYXJDb2RlQXQoMSk9PT1FZSl7aWYobjw9MilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpZihyPTIsa2UoZS5jaGFyQ29kZUF0KDIpKSl7aWYoMz09PW4pcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7cj0zfX1yPjAmJih0LnJvb3Q9ZS5zbGljZSgwLHIpKTtsZXQgbz0tMSxhPXIscz0tMSxjPSEwLGw9ZS5sZW5ndGgtMSx1PTA7Zm9yKDtsPj1yOy0tbClpZihpPWUuY2hhckNvZGVBdChsKSxrZShpKSl7aWYoIWMpe2E9bCsxO2JyZWFrfX1lbHNlLTE9PT1zJiYoYz0hMSxzPWwrMSksaT09PV9lPy0xPT09bz9vPWw6MSE9PXUmJih1PTEpOi0xIT09byYmKHU9LTEpO3JldHVybi0xIT09cyYmKC0xPT09b3x8MD09PXV8fDE9PT11JiZvPT09cy0xJiZvPT09YSsxP3QuYmFzZT10Lm5hbWU9ZS5zbGljZShhLHMpOih0Lm5hbWU9ZS5zbGljZShhLG8pLHQuYmFzZT1lLnNsaWNlKGEscyksdC5leHQ9ZS5zbGljZShvLHMpKSksdC5kaXI9YT4wJiZhIT09cj9lLnNsaWNlKDAsYS0xKTp0LnJvb3QsdH0sc2VwOiJcXCIsZGVsaW1pdGVyOiI7Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9LFBlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49ITE7Zm9yKGxldCByPWUubGVuZ3RoLTE7cj49LTEmJiFuO3ItLSl7Y29uc3QgaT1yPj0wP2Vbcl06eWUoKTtOZShpLCJwYXRoIiksMCE9PWkubGVuZ3RoJiYodD1gJHtpfS8ke3R9YCxuPWkuY2hhckNvZGVBdCgwKT09PVNlKX1yZXR1cm4gdD1PZSh0LCFuLCIvIixMZSksbj9gLyR7dH1gOnQubGVuZ3RoPjA/dDoiLiJ9LG5vcm1hbGl6ZShlKXtpZihOZShlLCJwYXRoIiksMD09PWUubGVuZ3RoKXJldHVybiIuIjtjb25zdCB0PWUuY2hhckNvZGVBdCgwKT09PVNlLG49ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpPT09U2U7cmV0dXJuIDA9PT0oZT1PZShlLCF0LCIvIixMZSkpLmxlbmd0aD90PyIvIjpuPyIuLyI6Ii4iOihuJiYoZSs9Ii8iKSx0P2AvJHtlfWA6ZSl9LGlzQWJzb2x1dGU6ZT0+KE5lKGUsInBhdGgiKSxlLmxlbmd0aD4wJiZlLmNoYXJDb2RlQXQoMCk9PT1TZSksam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7KytuKXtjb25zdCByPWVbbl07TmUociwicGF0aCIpLHIubGVuZ3RoPjAmJih2b2lkIDA9PT10P3Q9cjp0Kz1gLyR7cn1gKX1yZXR1cm4gdm9pZCAwPT09dD8iLiI6UGUubm9ybWFsaXplKHQpfSxyZWxhdGl2ZShlLHQpe2lmKE5lKGUsImZyb20iKSxOZSh0LCJ0byIpLGU9PT10KXJldHVybiIiO2lmKChlPVBlLnJlc29sdmUoZSkpPT09KHQ9UGUucmVzb2x2ZSh0KSkpcmV0dXJuIiI7Y29uc3Qgbj1lLmxlbmd0aCxyPW4tMSxpPXQubGVuZ3RoLTEsbz1yPGk/cjppO2xldCBhPS0xLHM9MDtmb3IoO3M8bztzKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KDErcyk7aWYobiE9PXQuY2hhckNvZGVBdCgxK3MpKWJyZWFrO249PT1TZSYmKGE9cyl9aWYocz09PW8paWYoaT5vKXtpZih0LmNoYXJDb2RlQXQoMStzKT09PVNlKXJldHVybiB0LnNsaWNlKDErcysxKTtpZigwPT09cylyZXR1cm4gdC5zbGljZSgxK3MpfWVsc2Ugcj5vJiYoZS5jaGFyQ29kZUF0KDErcyk9PT1TZT9hPXM6MD09PXMmJihhPTApKTtsZXQgYz0iIjtmb3Iocz0xK2ErMTtzPD1uOysrcylzIT09biYmZS5jaGFyQ29kZUF0KHMpIT09U2V8fChjKz0wPT09Yy5sZW5ndGg/Ii4uIjoiLy4uIik7cmV0dXJuYCR7Y30ke3Quc2xpY2UoMSthKX1gfSx0b05hbWVzcGFjZWRQYXRoOmU9PmUsZGlybmFtZShlKXtpZihOZShlLCJwYXRoIiksMD09PWUubGVuZ3RoKXJldHVybiIuIjtjb25zdCB0PWUuY2hhckNvZGVBdCgwKT09PVNlO2xldCBuPS0xLHI9ITA7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MTstLXQpaWYoZS5jaGFyQ29kZUF0KHQpPT09U2Upe2lmKCFyKXtuPXQ7YnJlYWt9fWVsc2Ugcj0hMTtyZXR1cm4tMT09PW4/dD8iLyI6Ii4iOnQmJjE9PT1uPyIvLyI6ZS5zbGljZSgwLG4pfSxiYXNlbmFtZShlLHQpe3ZvaWQgMCE9PXQmJk5lKHQsImV4dCIpLE5lKGUsInBhdGgiKTtsZXQgbixyPTAsaT0tMSxvPSEwO2lmKHZvaWQgMCE9PXQmJnQubGVuZ3RoPjAmJnQubGVuZ3RoPD1lLmxlbmd0aCl7aWYodD09PWUpcmV0dXJuIiI7bGV0IGE9dC5sZW5ndGgtMSxzPS0xO2ZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4pe2NvbnN0IGM9ZS5jaGFyQ29kZUF0KG4pO2lmKGM9PT1TZSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYobz0hMSxzPW4rMSksYT49MCYmKGM9PT10LmNoYXJDb2RlQXQoYSk/LTE9PS0tYSYmKGk9bik6KGE9LTEsaT1zKSl9cmV0dXJuIHI9PT1pP2k9czotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbilpZihlLmNoYXJDb2RlQXQobik9PT1TZSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPW4rMSk7cmV0dXJuLTE9PT1pPyIiOmUuc2xpY2UocixpKX0sZXh0bmFtZShlKXtOZShlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLHI9LTEsaT0hMCxvPTA7Zm9yKGxldCBhPWUubGVuZ3RoLTE7YT49MDstLWEpe2NvbnN0IHM9ZS5jaGFyQ29kZUF0KGEpO2lmKHMhPT1TZSktMT09PXImJihpPSExLHI9YSsxKSxzPT09X2U/LTE9PT10P3Q9YToxIT09byYmKG89MSk6LTEhPT10JiYobz0tMSk7ZWxzZSBpZighaSl7bj1hKzE7YnJlYWt9fXJldHVybi0xPT09dHx8LTE9PT1yfHwwPT09b3x8MT09PW8mJnQ9PT1yLTEmJnQ9PT1uKzE/IiI6ZS5zbGljZSh0LHIpfSxmb3JtYXQ6SWUuYmluZChudWxsLCIvIikscGFyc2UoZSl7TmUoZSwicGF0aCIpO2NvbnN0IHQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDtjb25zdCBuPWUuY2hhckNvZGVBdCgwKT09PVNlO2xldCByO24/KHQucm9vdD0iLyIscj0xKTpyPTA7bGV0IGk9LTEsbz0wLGE9LTEscz0hMCxjPWUubGVuZ3RoLTEsbD0wO2Zvcig7Yz49cjstLWMpe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KGMpO2lmKHQhPT1TZSktMT09PWEmJihzPSExLGE9YysxKSx0PT09X2U/LTE9PT1pP2k9YzoxIT09bCYmKGw9MSk6LTEhPT1pJiYobD0tMSk7ZWxzZSBpZighcyl7bz1jKzE7YnJlYWt9fWlmKC0xIT09YSl7Y29uc3Qgcj0wPT09byYmbj8xOm87LTE9PT1pfHwwPT09bHx8MT09PWwmJmk9PT1hLTEmJmk9PT1vKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKHIsYSk6KHQubmFtZT1lLnNsaWNlKHIsaSksdC5iYXNlPWUuc2xpY2UocixhKSx0LmV4dD1lLnNsaWNlKGksYSkpfXJldHVybiBvPjA/dC5kaXI9ZS5zbGljZSgwLG8tMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07UGUud2luMzI9TWUud2luMzI9TWUsUGUucG9zaXg9TWUucG9zaXg9UGUsIndpbjMyIj09PXdlP01lLm5vcm1hbGl6ZTpQZS5ub3JtYWxpemUsIndpbjMyIj09PXdlP01lLnJlc29sdmU6UGUucmVzb2x2ZSwid2luMzIiPT09d2U/TWUucmVsYXRpdmU6UGUucmVsYXRpdmUsIndpbjMyIj09PXdlP01lLmRpcm5hbWU6UGUuZGlybmFtZSwid2luMzIiPT09d2U/TWUuYmFzZW5hbWU6UGUuYmFzZW5hbWUsIndpbjMyIj09PXdlP01lLmV4dG5hbWU6UGUuZXh0bmFtZSwid2luMzIiPT09d2U/TWUuc2VwOlBlLnNlcDtjb25zdCBSZT0vXlx3W1x3XGQrLi1dKiQvLFZlPS9eXC8vLEZlPS9eXC9cLy87ZnVuY3Rpb24gRGUoZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKGBbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIiR7ZS5hdXRob3JpdHl9IiwgcGF0aDogIiR7ZS5wYXRofSIsIHF1ZXJ5OiAiJHtlLnF1ZXJ5fSIsIGZyYWdtZW50OiAiJHtlLmZyYWdtZW50fSJ9YCk7aWYoZS5zY2hlbWUmJiFSZS50ZXN0KGUuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoZS5wYXRoKWlmKGUuYXV0aG9yaXR5KXtpZighVmUudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoRmUudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfWNvbnN0IEtlPSIiLGplPSIvIixVZT0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LztjbGFzcyBCZXtjb25zdHJ1Y3RvcihlLHQsbixyLGksbz0hMSl7Im9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8S2UsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fEtlLHRoaXMucGF0aD1lLnBhdGh8fEtlLHRoaXMucXVlcnk9ZS5xdWVyeXx8S2UsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxLZSk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fHQ/ZToiZmlsZSJ9KGUsbyksdGhpcy5hdXRob3JpdHk9dHx8S2UsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1qZSYmKHQ9amUrdCk6dD1qZX1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8S2UpLHRoaXMucXVlcnk9cnx8S2UsdGhpcy5mcmFnbWVudD1pfHxLZSxEZSh0aGlzLG8pKX1zdGF0aWMgaXNVcmkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBCZXx8ISFlJiYoInN0cmluZyI9PXR5cGVvZiBlLmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiBlLmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIGUucGF0aCYmInN0cmluZyI9PXR5cGVvZiBlLnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIGUuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIGUuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0cmluZyl9Z2V0IGZzUGF0aCgpe3JldHVybiBHZSh0aGlzLCExKX13aXRoKGUpe2lmKCFlKXJldHVybiB0aGlzO2xldHtzY2hlbWU6dCxhdXRob3JpdHk6bixwYXRoOnIscXVlcnk6aSxmcmFnbWVudDpvfT1lO3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PUtlKSx2b2lkIDA9PT1uP249dGhpcy5hdXRob3JpdHk6bnVsbD09PW4mJihuPUtlKSx2b2lkIDA9PT1yP3I9dGhpcy5wYXRoOm51bGw9PT1yJiYocj1LZSksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPUtlKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89S2UpLHQ9PT10aGlzLnNjaGVtZSYmbj09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgJGUodCxuLHIsaSxvKX1zdGF0aWMgcGFyc2UoZSx0PSExKXtjb25zdCBuPVVlLmV4ZWMoZSk7cmV0dXJuIG4/bmV3ICRlKG5bMl18fEtlLFllKG5bNF18fEtlKSxZZShuWzVdfHxLZSksWWUobls3XXx8S2UpLFllKG5bOV18fEtlKSx0KTpuZXcgJGUoS2UsS2UsS2UsS2UsS2UpfXN0YXRpYyBmaWxlKGUpe2xldCB0PUtlO2lmKFQmJihlPWUucmVwbGFjZSgvXFwvZyxqZSkpLGVbMF09PT1qZSYmZVsxXT09PWplKXtjb25zdCBuPWUuaW5kZXhPZihqZSwyKTstMT09PW4/KHQ9ZS5zdWJzdHJpbmcoMiksZT1qZSk6KHQ9ZS5zdWJzdHJpbmcoMixuKSxlPWUuc3Vic3RyaW5nKG4pfHxqZSl9cmV0dXJuIG5ldyAkZSgiZmlsZSIsdCxlLEtlLEtlKX1zdGF0aWMgZnJvbShlKXtjb25zdCB0PW5ldyAkZShlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50KTtyZXR1cm4gRGUodCwhMCksdH1zdGF0aWMgam9pblBhdGgoZSwuLi50KXtpZighZS5wYXRoKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogY2Fubm90IGNhbGwgam9pblBhdGggb24gVVJJIHdpdGhvdXQgcGF0aCIpO2xldCBuO3JldHVybiBuPVQmJiJmaWxlIj09PWUuc2NoZW1lP0JlLmZpbGUoTWUuam9pbihHZShlLCEwKSwuLi50KSkucGF0aDpQZS5qb2luKGUucGF0aCwuLi50KSxlLndpdGgoe3BhdGg6bn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBKZSh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUoZSl7aWYoZSl7aWYoZSBpbnN0YW5jZW9mIEJlKXJldHVybiBlO3tjb25zdCB0PW5ldyAkZShlKTtyZXR1cm4gdC5fZm9ybWF0dGVkPWUuZXh0ZXJuYWwsdC5fZnNQYXRoPWUuX3NlcD09PXFlP2UuZnNQYXRoOm51bGwsdH19cmV0dXJuIGV9fWNvbnN0IHFlPVQ/MTp2b2lkIDA7Y2xhc3MgJGUgZXh0ZW5kcyBCZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9ybWF0dGVkPW51bGwsdGhpcy5fZnNQYXRoPW51bGx9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9R2UodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyhlPSExKXtyZXR1cm4gZT9KZSh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPUplKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9cWUpLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfX1jb25zdCBXZT17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIEhlKGUsdCl7bGV0IG4scj0tMTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7Y29uc3Qgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO2NvbnN0IHQ9V2Vbb107dm9pZCAwIT09dD8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPXQpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIHplKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9V2Vbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gR2UoZSx0KXtsZXQgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT9gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxUJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gSmUoZSx0KXtjb25zdCBuPXQ/emU6SGU7bGV0IHI9IiIse3NjaGVtZTppLGF1dGhvcml0eTpvLHBhdGg6YSxxdWVyeTpzLGZyYWdtZW50OmN9PWU7aWYoaSYmKHIrPWkscis9IjoiKSwob3x8ImZpbGUiPT09aSkmJihyKz1qZSxyKz1qZSksbyl7bGV0IGU9by5pbmRleE9mKCJAIik7aWYoLTEhPT1lKXtjb25zdCB0PW8uc3Vic3RyKDAsZSk7bz1vLnN1YnN0cihlKzEpLGU9dC5pbmRleE9mKCI6IiksLTE9PT1lP3IrPW4odCwhMSk6KHIrPW4odC5zdWJzdHIoMCxlKSwhMSkscis9IjoiLHIrPW4odC5zdWJzdHIoZSsxKSwhMSkpLHIrPSJAIn1vPW8udG9Mb3dlckNhc2UoKSxlPW8uaW5kZXhPZigiOiIpLC0xPT09ZT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsZSksITEpLHIrPW8uc3Vic3RyKGUpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgxKTtlPj02NSYmZTw9OTAmJihhPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUrMzIpfToke2Euc3Vic3RyKDMpfWApfWVsc2UgaWYoYS5sZW5ndGg+PTImJjU4PT09YS5jaGFyQ29kZUF0KDEpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgwKTtlPj02NSYmZTw9OTAmJihhPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7YS5zdWJzdHIoMil9YCl9cis9bihhLCEwKX1yZXR1cm4gcyYmKHIrPSI/IixyKz1uKHMsITEpKSxjJiYocis9IiMiLHIrPXQ/YzpIZShjLCExKSkscn1mdW5jdGlvbiBYZShlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1hlKGUuc3Vic3RyKDMpKTplfX1jb25zdCBaZT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBZZShlKXtyZXR1cm4gZS5tYXRjaChaZSk/ZS5yZXBsYWNlKFplLChlPT5YZShlKSkpOmV9Y2xhc3MgUWV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxpbmVOdW1iZXI9ZSx0aGlzLmNvbHVtbj10fXdpdGgoZT10aGlzLmxpbmVOdW1iZXIsdD10aGlzLmNvbHVtbil7cmV0dXJuIGU9PT10aGlzLmxpbmVOdW1iZXImJnQ9PT10aGlzLmNvbHVtbj90aGlzOm5ldyBRZShlLHQpfWRlbHRhKGU9MCx0PTApe3JldHVybiB0aGlzLndpdGgodGhpcy5saW5lTnVtYmVyK2UsdGhpcy5jb2x1bW4rdCl9ZXF1YWxzKGUpe3JldHVybiBRZS5lcXVhbHModGhpcyxlKX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIWUmJiF0fHwhIWUmJiEhdCYmZS5saW5lTnVtYmVyPT09dC5saW5lTnVtYmVyJiZlLmNvbHVtbj09PXQuY29sdW1ufWlzQmVmb3JlKGUpe3JldHVybiBRZS5pc0JlZm9yZSh0aGlzLGUpfXN0YXRpYyBpc0JlZm9yZShlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjx0LmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwoZSl7cmV0dXJuIFFlLmlzQmVmb3JlT3JFcXVhbCh0aGlzLGUpfXN0YXRpYyBpc0JlZm9yZU9yRXF1YWwoZSx0KXtyZXR1cm4gZS5saW5lTnVtYmVyPHQubGluZU51bWJlcnx8ISh0LmxpbmVOdW1iZXI8ZS5saW5lTnVtYmVyKSYmZS5jb2x1bW48PXQuY29sdW1ufXN0YXRpYyBjb21wYXJlKGUsdCl7Y29uc3Qgbj0wfGUubGluZU51bWJlcixyPTB8dC5saW5lTnVtYmVyO2lmKG49PT1yKXtyZXR1cm4oMHxlLmNvbHVtbiktKDB8dC5jb2x1bW4pfXJldHVybiBuLXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IFFlKHRoaXMubGluZU51bWJlcix0aGlzLmNvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5saW5lTnVtYmVyKyIsIit0aGlzLmNvbHVtbisiKSJ9c3RhdGljIGxpZnQoZSl7cmV0dXJuIG5ldyBRZShlLmxpbmVOdW1iZXIsZS5jb2x1bW4pfXN0YXRpYyBpc0lQb3NpdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLmxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5jb2x1bW59fWNsYXNzIGV0e2NvbnN0cnVjdG9yKGUsdCxuLHIpe2U+bnx8ZT09PW4mJnQ+cj8odGhpcy5zdGFydExpbmVOdW1iZXI9bix0aGlzLnN0YXJ0Q29sdW1uPXIsdGhpcy5lbmRMaW5lTnVtYmVyPWUsdGhpcy5lbmRDb2x1bW49dCk6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zdGFydENvbHVtbj10LHRoaXMuZW5kTGluZU51bWJlcj1uLHRoaXMuZW5kQ29sdW1uPXIpfWlzRW1wdHkoKXtyZXR1cm4gZXQuaXNFbXB0eSh0aGlzKX1zdGF0aWMgaXNFbXB0eShlKXtyZXR1cm4gZS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT1lLmVuZENvbHVtbn1jb250YWluc1Bvc2l0aW9uKGUpe3JldHVybiBldC5jb250YWluc1Bvc2l0aW9uKHRoaXMsZSl9c3RhdGljIGNvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjxlLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPmUuZW5kQ29sdW1uKSl9c3RhdGljIHN0cmljdENvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj49ZS5lbmRDb2x1bW4pKX1jb250YWluc1JhbmdlKGUpe3JldHVybiBldC5jb250YWluc1JhbmdlKHRoaXMsZSl9c3RhdGljIGNvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+ZS5lbmRDb2x1bW4pKSl9c3RyaWN0Q29udGFpbnNSYW5nZShlKXtyZXR1cm4gZXQuc3RyaWN0Q29udGFpbnNSYW5nZSh0aGlzLGUpfXN0YXRpYyBzdHJpY3RDb250YWluc1JhbmdlKGUsdCl7cmV0dXJuISh0LnN0YXJ0TGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj49ZS5lbmRDb2x1bW4pKSl9cGx1c1JhbmdlKGUpe3JldHVybiBldC5wbHVzUmFuZ2UodGhpcyxlKX1zdGF0aWMgcGx1c1JhbmdlKGUsdCl7bGV0IG4scixpLG87cmV0dXJuIHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyPyhuPXQuc3RhcnRMaW5lTnVtYmVyLHI9dC5zdGFydENvbHVtbik6dC5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlcj8obj10LnN0YXJ0TGluZU51bWJlcixyPU1hdGgubWluKHQuc3RhcnRDb2x1bW4sZS5zdGFydENvbHVtbikpOihuPWUuc3RhcnRMaW5lTnVtYmVyLHI9ZS5zdGFydENvbHVtbiksdC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcj8oaT10LmVuZExpbmVOdW1iZXIsbz10LmVuZENvbHVtbik6dC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyPyhpPXQuZW5kTGluZU51bWJlcixvPU1hdGgubWF4KHQuZW5kQ29sdW1uLGUuZW5kQ29sdW1uKSk6KGk9ZS5lbmRMaW5lTnVtYmVyLG89ZS5lbmRDb2x1bW4pLG5ldyBldChuLHIsaSxvKX1pbnRlcnNlY3RSYW5nZXMoZSl7cmV0dXJuIGV0LmludGVyc2VjdFJhbmdlcyh0aGlzLGUpfXN0YXRpYyBpbnRlcnNlY3RSYW5nZXMoZSx0KXtsZXQgbj1lLnN0YXJ0TGluZU51bWJlcixyPWUuc3RhcnRDb2x1bW4saT1lLmVuZExpbmVOdW1iZXIsbz1lLmVuZENvbHVtbjtjb25zdCBhPXQuc3RhcnRMaW5lTnVtYmVyLHM9dC5zdGFydENvbHVtbixjPXQuZW5kTGluZU51bWJlcixsPXQuZW5kQ29sdW1uO3JldHVybiBuPGE/KG49YSxyPXMpOm49PT1hJiYocj1NYXRoLm1heChyLHMpKSxpPmM/KGk9YyxvPWwpOmk9PT1jJiYobz1NYXRoLm1pbihvLGwpKSxuPml8fG49PT1pJiZyPm8/bnVsbDpuZXcgZXQobixyLGksbyl9ZXF1YWxzUmFuZ2UoZSl7cmV0dXJuIGV0LmVxdWFsc1JhbmdlKHRoaXMsZSl9c3RhdGljIGVxdWFsc1JhbmdlKGUsdCl7cmV0dXJuISFlJiYhIXQmJmUuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT10LnN0YXJ0Q29sdW1uJiZlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gZXQuZ2V0RW5kUG9zaXRpb24odGhpcyl9c3RhdGljIGdldEVuZFBvc2l0aW9uKGUpe3JldHVybiBuZXcgUWUoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIGV0LmdldFN0YXJ0UG9zaXRpb24odGhpcyl9c3RhdGljIGdldFN0YXJ0UG9zaXRpb24oZSl7cmV0dXJuIG5ldyBRZShlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zdGFydENvbHVtbisiIC0+ICIrdGhpcy5lbmRMaW5lTnVtYmVyKyIsIit0aGlzLmVuZENvbHVtbisiXSJ9c2V0RW5kUG9zaXRpb24oZSx0KXtyZXR1cm4gbmV3IGV0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sZSx0KX1zZXRTdGFydFBvc2l0aW9uKGUsdCl7cmV0dXJuIG5ldyBldChlLHQsdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gZXQuY29sbGFwc2VUb1N0YXJ0KHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvU3RhcnQoZSl7cmV0dXJuIG5ldyBldChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKGUsdD1lKXtyZXR1cm4gbmV3IGV0KGUubGluZU51bWJlcixlLmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBsaWZ0KGUpe3JldHVybiBlP25ldyBldChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UoZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLmVuZExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5lbmRDb2x1bW59c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjw9ZS5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLHQpe2lmKGUmJnQpe2NvbnN0IG49MHxlLnN0YXJ0TGluZU51bWJlcixyPTB8dC5zdGFydExpbmVOdW1iZXI7aWYobj09PXIpe2NvbnN0IG49MHxlLnN0YXJ0Q29sdW1uLHI9MHx0LnN0YXJ0Q29sdW1uO2lmKG49PT1yKXtjb25zdCBuPTB8ZS5lbmRMaW5lTnVtYmVyLHI9MHx0LmVuZExpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuZW5kQ29sdW1uKS0oMHx0LmVuZENvbHVtbil9cmV0dXJuIG4tcn1yZXR1cm4gbi1yfXJldHVybiBuLXJ9cmV0dXJuKGU/MTowKS0odD8xOjApfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdFbmRzKGUsdCl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj9lLmVuZENvbHVtbj09PXQuZW5kQ29sdW1uP2Uuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/ZS5zdGFydENvbHVtbi10LnN0YXJ0Q29sdW1uOmUuc3RhcnRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyOmUuZW5kQ29sdW1uLXQuZW5kQ29sdW1uOmUuZW5kTGluZU51bWJlci10LmVuZExpbmVOdW1iZXJ9c3RhdGljIHNwYW5zTXVsdGlwbGVMaW5lcyhlKXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPmUuc3RhcnRMaW5lTnVtYmVyfXRvSlNPTigpe3JldHVybiB0aGlzfX1mdW5jdGlvbiB0dChlLHQsbixyKXtyZXR1cm4gbmV3IGJlKGUsdCxuKS5Db21wdXRlRGlmZihyKX1jbGFzcyBudHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PVtdLG49W107Zm9yKGxldCByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXRbcl09c3QoZVtyXSwxKSxuW3JdPWN0KGVbcl0sMSk7dGhpcy5saW5lcz1lLHRoaXMuX3N0YXJ0Q29sdW1ucz10LHRoaXMuX2VuZENvbHVtbnM9bn1nZXRFbGVtZW50cygpe2NvbnN0IGU9W107Zm9yKGxldCB0PTAsbj10aGlzLmxpbmVzLmxlbmd0aDt0PG47dCsrKWVbdF09dGhpcy5saW5lc1t0XS5zdWJzdHJpbmcodGhpcy5fc3RhcnRDb2x1bW5zW3RdLTEsdGhpcy5fZW5kQ29sdW1uc1t0XS0xKTtyZXR1cm4gZX1nZXRTdHJpY3RFbGVtZW50KGUpe3JldHVybiB0aGlzLmxpbmVzW2VdfWdldFN0YXJ0TGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWdldEVuZExpbmVOdW1iZXIoZSl7cmV0dXJuIGUrMX1jcmVhdGVDaGFyU2VxdWVuY2UoZSx0LG4pe2NvbnN0IHI9W10saT1bXSxvPVtdO2xldCBhPTA7Zm9yKGxldCBzPXQ7czw9bjtzKyspe2NvbnN0IHQ9dGhpcy5saW5lc1tzXSxjPWU/dGhpcy5fc3RhcnRDb2x1bW5zW3NdOjEsbD1lP3RoaXMuX2VuZENvbHVtbnNbc106dC5sZW5ndGgrMTtmb3IobGV0IGU9YztlPGw7ZSsrKXJbYV09dC5jaGFyQ29kZUF0KGUtMSksaVthXT1zKzEsb1thXT1lLGErKzshZSYmczxuJiYoclthXT0xMCxpW2FdPXMrMSxvW2FdPXQubGVuZ3RoKzEsYSsrKX1yZXR1cm4gbmV3IHJ0KHIsaSxvKX19Y2xhc3MgcnR7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX2NoYXJDb2Rlcz1lLHRoaXMuX2xpbmVOdW1iZXJzPXQsdGhpcy5fY29sdW1ucz1ufXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuX2NoYXJDb2Rlcy5tYXAoKChlLHQpPT4oMTA9PT1lPyJcXG4iOlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpK2AtKCR7dGhpcy5fbGluZU51bWJlcnNbdF19LCR7dGhpcy5fY29sdW1uc1t0XX0pYCkpLmpvaW4oIiwgIikrIl0ifV9hc3NlcnRJbmRleChlLHQpe2lmKGU8MHx8ZT49dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIGluZGV4Iil9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fY2hhckNvZGVzfWdldFN0YXJ0TGluZU51bWJlcihlKXtyZXR1cm4gZT4wJiZlPT09dGhpcy5fbGluZU51bWJlcnMubGVuZ3RoP3RoaXMuZ2V0RW5kTGluZU51bWJlcihlLTEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9saW5lTnVtYmVyc1tlXSl9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4tMT09PWU/dGhpcy5nZXRTdGFydExpbmVOdW1iZXIoZSsxKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9saW5lTnVtYmVycyksMTA9PT10aGlzLl9jaGFyQ29kZXNbZV0/dGhpcy5fbGluZU51bWJlcnNbZV0rMTp0aGlzLl9saW5lTnVtYmVyc1tlXSl9Z2V0U3RhcnRDb2x1bW4oZSl7cmV0dXJuIGU+MCYmZT09PXRoaXMuX2NvbHVtbnMubGVuZ3RoP3RoaXMuZ2V0RW5kQ29sdW1uKGUtMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fY29sdW1ucyksdGhpcy5fY29sdW1uc1tlXSl9Z2V0RW5kQ29sdW1uKGUpe3JldHVybi0xPT09ZT90aGlzLmdldFN0YXJ0Q29sdW1uKGUrMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fY29sdW1ucyksMTA9PT10aGlzLl9jaGFyQ29kZXNbZV0/MTp0aGlzLl9jb2x1bW5zW2VdKzEpfX1jbGFzcyBpdHtjb25zdHJ1Y3RvcihlLHQsbixyLGksbyxhLHMpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9ZSx0aGlzLm9yaWdpbmFsU3RhcnRDb2x1bW49dCx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLHRoaXMub3JpZ2luYWxFbmRDb2x1bW49cix0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPWksdGhpcy5tb2RpZmllZFN0YXJ0Q29sdW1uPW8sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9YSx0aGlzLm1vZGlmaWVkRW5kQ29sdW1uPXN9c3RhdGljIGNyZWF0ZUZyb21EaWZmQ2hhbmdlKGUsdCxuKXtjb25zdCByPXQuZ2V0U3RhcnRMaW5lTnVtYmVyKGUub3JpZ2luYWxTdGFydCksaT10LmdldFN0YXJ0Q29sdW1uKGUub3JpZ2luYWxTdGFydCksbz10LmdldEVuZExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSksYT10LmdldEVuZENvbHVtbihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSxzPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKGUubW9kaWZpZWRTdGFydCksYz1uLmdldFN0YXJ0Q29sdW1uKGUubW9kaWZpZWRTdGFydCksbD1uLmdldEVuZExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGgtMSksdT1uLmdldEVuZENvbHVtbihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKTtyZXR1cm4gbmV3IGl0KHIsaSxvLGEscyxjLGwsdSl9fWNsYXNzIG90e2NvbnN0cnVjdG9yKGUsdCxuLHIsaSl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXQsdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1uLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPXIsdGhpcy5jaGFyQ2hhbmdlcz1pfXN0YXRpYyBjcmVhdGVGcm9tRGlmZlJlc3VsdChlLHQsbixyLGksbyxhKXtsZXQgcyxjLGwsdSxoO2lmKDA9PT10Lm9yaWdpbmFsTGVuZ3RoPyhzPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCktMSxjPTApOihzPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCksYz1uLmdldEVuZExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSkpLDA9PT10Lm1vZGlmaWVkTGVuZ3RoPyhsPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCktMSx1PTApOihsPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCksdT1yLmdldEVuZExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSkpLG8mJnQub3JpZ2luYWxMZW5ndGg+MCYmdC5vcmlnaW5hbExlbmd0aDwyMCYmdC5tb2RpZmllZExlbmd0aD4wJiZ0Lm1vZGlmaWVkTGVuZ3RoPDIwJiZpKCkpe2NvbnN0IG89bi5jcmVhdGVDaGFyU2VxdWVuY2UoZSx0Lm9yaWdpbmFsU3RhcnQsdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSkscz1yLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQubW9kaWZpZWRTdGFydCx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKTtpZihvLmdldEVsZW1lbnRzKCkubGVuZ3RoPjAmJnMuZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCl7bGV0IGU9dHQobyxzLGksITApLmNoYW5nZXM7YSYmKGU9ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3QgdD1bZVswXV07bGV0IG49dFswXTtmb3IobGV0IHI9MSxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IGk9ZVtyXSxvPWkub3JpZ2luYWxTdGFydC0obi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpLGE9aS5tb2RpZmllZFN0YXJ0LShuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCk7TWF0aC5taW4obyxhKTwzPyhuLm9yaWdpbmFsTGVuZ3RoPWkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RoLW4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkTGVuZ3RoPWkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoLW4ubW9kaWZpZWRTdGFydCk6KHQucHVzaChpKSxuPWkpfXJldHVybiB0fShlKSksaD1bXTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspaC5wdXNoKGl0LmNyZWF0ZUZyb21EaWZmQ2hhbmdlKGVbdF0sbyxzKSl9fXJldHVybiBuZXcgb3QocyxjLGwsdSxoKX19Y2xhc3MgYXR7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzPW4uc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcz1uLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZT1uLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmY9bi5zaG91bGRNYWtlUHJldHR5RGlmZix0aGlzLm9yaWdpbmFsTGluZXM9ZSx0aGlzLm1vZGlmaWVkTGluZXM9dCx0aGlzLm9yaWdpbmFsPW5ldyBudChlKSx0aGlzLm1vZGlmaWVkPW5ldyBudCh0KSx0aGlzLmNvbnRpbnVlTGluZURpZmY9bHQobi5tYXhDb21wdXRhdGlvblRpbWUpLHRoaXMuY29udGludWVDaGFyRGlmZj1sdCgwPT09bi5tYXhDb21wdXRhdGlvblRpbWU/MDpNYXRoLm1pbihuLm1heENvbXB1dGF0aW9uVGltZSw1ZTMpKX1jb21wdXRlRGlmZigpe2lmKDE9PT10aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMub3JpZ2luYWwubGluZXNbMF0ubGVuZ3RoKXJldHVybiAxPT09dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD97cXVpdEVhcmx5OiExLGNoYW5nZXM6W119OntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjEsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgsY2hhckNoYW5nZXM6W3ttb2RpZmllZEVuZENvbHVtbjowLG1vZGlmaWVkRW5kTGluZU51bWJlcjowLG1vZGlmaWVkU3RhcnRDb2x1bW46MCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjowLG9yaWdpbmFsRW5kQ29sdW1uOjAsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjAsb3JpZ2luYWxTdGFydENvbHVtbjowLG9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjB9XX1dfTtpZigxPT09dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aClyZXR1cm57cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjp0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjoxLGNoYXJDaGFuZ2VzOlt7bW9kaWZpZWRFbmRDb2x1bW46MCxtb2RpZmllZEVuZExpbmVOdW1iZXI6MCxtb2RpZmllZFN0YXJ0Q29sdW1uOjAsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MCxvcmlnaW5hbEVuZENvbHVtbjowLG9yaWdpbmFsRW5kTGluZU51bWJlcjowLG9yaWdpbmFsU3RhcnRDb2x1bW46MCxvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjowfV19XX07Y29uc3QgZT10dCh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLHQ9ZS5jaGFuZ2VzLG49ZS5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZS5wdXNoKG90LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdFtuXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6bixjaGFuZ2VzOmV9fWNvbnN0IHI9W107bGV0IGk9MCxvPTA7Zm9yKGxldCBlPS0xLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3QgYT1lKzE8bj90W2UrMV06bnVsbCxzPWE/YS5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsYz1hP2EubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7aTxzJiZvPGM7KXtjb25zdCBlPXRoaXMub3JpZ2luYWxMaW5lc1tpXSx0PXRoaXMubW9kaWZpZWRMaW5lc1tvXTtpZihlIT09dCl7e2xldCBuPXN0KGUsMSksYT1zdCh0LDEpO2Zvcig7bj4xJiZhPjE7KXtpZihlLmNoYXJDb2RlQXQobi0yKSE9PXQuY2hhckNvZGVBdChhLTIpKWJyZWFrO24tLSxhLS19KG4+MXx8YT4xKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGkrMSwxLG4sbysxLDEsYSl9e2xldCBuPWN0KGUsMSksYT1jdCh0LDEpO2NvbnN0IHM9ZS5sZW5ndGgrMSxjPXQubGVuZ3RoKzE7Zm9yKDtuPHMmJmE8Yzspe2lmKGUuY2hhckNvZGVBdChuLTEpIT09ZS5jaGFyQ29kZUF0KGEtMSkpYnJlYWs7bisrLGErK30objxzfHxhPGMpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLG4scyxvKzEsYSxjKX19aSsrLG8rK31hJiYoci5wdXNoKG90LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsYSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLGkrPWEub3JpZ2luYWxMZW5ndGgsbys9YS5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTpuLGNoYW5nZXM6cn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSl7aWYodGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSkpcmV0dXJuO2xldCBzO3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiYocz1bbmV3IGl0KHQsbix0LHIsaSxvLGksYSldKSxlLnB1c2gobmV3IG90KHQsdCxpLGkscykpfV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKXtjb25zdCBzPWUubGVuZ3RoO2lmKDA9PT1zKXJldHVybiExO2NvbnN0IGM9ZVtzLTFdO3JldHVybiAwIT09Yy5vcmlnaW5hbEVuZExpbmVOdW1iZXImJjAhPT1jLm1vZGlmaWVkRW5kTGluZU51bWJlciYmKGMub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzE9PT10JiZjLm1vZGlmaWVkRW5kTGluZU51bWJlcisxPT09aSYmKGMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXQsYy5tb2RpZmllZEVuZExpbmVOdW1iZXI9aSx0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmYy5jaGFyQ2hhbmdlcyYmYy5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBpdCh0LG4sdCxyLGksbyxpLGEpKSwhMCkpfX1mdW5jdGlvbiBzdChlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWUuY2hhckNvZGVBdCh0KTtpZigzMiE9PW4mJjkhPT1uKXJldHVybiB0fXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzF9ZnVuY3Rpb24gY3QoZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IG49dDtuPj0wO24tLSl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobik7aWYoMzIhPT10JiY5IT09dClyZXR1cm4gbn1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1uP3Q6bisyfWZ1bmN0aW9uIGx0KGUpe2lmKDA9PT1lKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfXZhciB1dDtmdW5jdGlvbiBodChlKXtyZXR1cm4gZTwwPzA6ZT4yNTU/MjU1OjB8ZX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZTwwPzA6ZT40Mjk0OTY3Mjk1PzQyOTQ5NjcyOTU6MHxlfSFmdW5jdGlvbihlKXtlLmlzTGVzc1RoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MH0sZS5pc0dyZWF0ZXJUaGFuPWZ1bmN0aW9uKGUpe3JldHVybiBlPjB9LGUuaXNOZWl0aGVyTGVzc09yR3JlYXRlclRoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfSxlLmdyZWF0ZXJUaGFuPTEsZS5sZXNzVGhhbj0tMSxlLm5laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj0wfSh1dHx8KHV0PXt9KSk7Y2xhc3MgZHR7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZXM9ZSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkoZS5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKGUsdCl7ZT1mdChlKTtjb25zdCBuPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW0saT10Lmxlbmd0aDtyZXR1cm4gMCE9PWkmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgraSksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlKSxlK2kpLHRoaXMudmFsdWVzLnNldCh0LGUpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9c2V0VmFsdWUoZSx0KXtyZXR1cm4gZT1mdChlKSx0PWZ0KHQpLHRoaXMudmFsdWVzW2VdIT09dCYmKHRoaXMudmFsdWVzW2VdPXQsZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLCEwKX1yZW1vdmVWYWx1ZXMoZSx0KXtlPWZ0KGUpLHQ9ZnQodCk7Y29uc3Qgbj10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtO2lmKGU+PW4ubGVuZ3RoKXJldHVybiExO2NvbnN0IGk9bi5sZW5ndGgtZTtyZXR1cm4gdD49aSYmKHQ9aSksMCE9PXQmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgtdCksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlK3QpLGUpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9Z2V0VG90YWxTdW0oKXtyZXR1cm4gMD09PXRoaXMudmFsdWVzLmxlbmd0aD8wOnRoaXMuX2dldFByZWZpeFN1bSh0aGlzLnZhbHVlcy5sZW5ndGgtMSl9Z2V0UHJlZml4U3VtKGUpe3JldHVybiBlPDA/MDooZT1mdChlKSx0aGlzLl9nZXRQcmVmaXhTdW0oZSkpfV9nZXRQcmVmaXhTdW0oZSl7aWYoZTw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKXJldHVybiB0aGlzLnByZWZpeFN1bVtlXTtsZXQgdD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMTswPT09dCYmKHRoaXMucHJlZml4U3VtWzBdPXRoaXMudmFsdWVzWzBdLHQrKyksZT49dGhpcy52YWx1ZXMubGVuZ3RoJiYoZT10aGlzLnZhbHVlcy5sZW5ndGgtMSk7Zm9yKGxldCBuPXQ7bjw9ZTtuKyspdGhpcy5wcmVmaXhTdW1bbl09dGhpcy5wcmVmaXhTdW1bbi0xXSt0aGlzLnZhbHVlc1tuXTtyZXR1cm4gdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPU1hdGgubWF4KHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSxlKSx0aGlzLnByZWZpeFN1bVtlXX1nZXRJbmRleE9mKGUpe2U9TWF0aC5mbG9vcihlKSx0aGlzLmdldFRvdGFsU3VtKCk7bGV0IHQ9MCxuPXRoaXMudmFsdWVzLmxlbmd0aC0xLHI9MCxpPTAsbz0wO2Zvcig7dDw9bjspaWYocj10KyhuLXQpLzJ8MCxpPXRoaXMucHJlZml4U3VtW3JdLG89aS10aGlzLnZhbHVlc1tyXSxlPG8pbj1yLTE7ZWxzZXtpZighKGU+PWkpKWJyZWFrO3Q9cisxfXJldHVybiBuZXcgbXQocixlLW8pfX1jbGFzcyBtdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10LHRoaXMuX3ByZWZpeFN1bUluZGV4T2ZSZXN1bHRCcmFuZD12b2lkIDAsdGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXR9fWNvbnN0IGd0PWZ1bmN0aW9uKGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgbiBvZiJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iKWUuaW5kZXhPZihuKT49MHx8KHQrPSJcXCIrbik7cmV0dXJuIHQrPSJcXHNdKykiLG5ldyBSZWdFeHAodCwiZyIpfSgpO2NvbnN0IHB0PW5ldyBnO2Z1bmN0aW9uIGJ0KGUsdCxuLHIsaSl7aWYoaXx8KGk9cy5maXJzdChwdCkpLG4ubGVuZ3RoPmkubWF4TGVuKXtsZXQgbz1lLWkubWF4TGVuLzI7cmV0dXJuIG88MD9vPTA6cis9byxidChlLHQsbj1uLnN1YnN0cmluZyhvLGUraS5tYXhMZW4vMikscixpKX1jb25zdCBvPURhdGUubm93KCksYT1lLTEtcjtsZXQgYz0tMSxsPW51bGw7Zm9yKGxldCBlPTE7IShEYXRlLm5vdygpLW8+PWkudGltZUJ1ZGdldCk7ZSsrKXtjb25zdCByPWEtaS53aW5kb3dTaXplKmU7dC5sYXN0SW5kZXg9TWF0aC5tYXgoMCxyKTtjb25zdCBvPXZ0KHQsbixhLGMpO2lmKCFvJiZsKWJyZWFrO2lmKGw9byxyPD0wKWJyZWFrO2M9cn1pZihsKXtjb25zdCBlPXt3b3JkOmxbMF0sc3RhcnRDb2x1bW46cisxK2wuaW5kZXgsZW5kQ29sdW1uOnIrMStsLmluZGV4K2xbMF0ubGVuZ3RofTtyZXR1cm4gdC5sYXN0SW5kZXg9MCxlfXJldHVybiBudWxsfWZ1bmN0aW9uIHZ0KGUsdCxuLHIpe2xldCBpO2Zvcig7aT1lLmV4ZWModCk7KXtjb25zdCB0PWkuaW5kZXh8fDA7aWYodDw9biYmZS5sYXN0SW5kZXg+PW4pcmV0dXJuIGk7aWYocj4wJiZ0PnIpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9cHQudW5zaGlmdCh7bWF4TGVuOjFlMyx3aW5kb3dTaXplOjE1LHRpbWVCdWRnZXQ6MTUwfSk7Y2xhc3MgeXR7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD1odChlKTt0aGlzLl9kZWZhdWx0VmFsdWU9dCx0aGlzLl9hc2NpaU1hcD15dC5fY3JlYXRlQXNjaWlNYXAodCksdGhpcy5fbWFwPW5ldyBNYXB9c3RhdGljIF9jcmVhdGVBc2NpaU1hcChlKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCBuPTA7bjwyNTY7bisrKXRbbl09ZTtyZXR1cm4gdH1zZXQoZSx0KXtjb25zdCBuPWh0KHQpO2U+PTAmJmU8MjU2P3RoaXMuX2FzY2lpTWFwW2VdPW46dGhpcy5fbWFwLnNldChlLG4pfWdldChlKXtyZXR1cm4gZT49MCYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV06dGhpcy5fbWFwLmdldChlKXx8dGhpcy5fZGVmYXVsdFZhbHVlfX1jbGFzcyBDdHtjb25zdHJ1Y3RvcihlLHQsbil7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlKnQpO2ZvcihsZXQgaT0wLG89ZSp0O2k8bztpKyspcltpXT1uO3RoaXMuX2RhdGE9cix0aGlzLnJvd3M9ZSx0aGlzLmNvbHM9dH1nZXQoZSx0KXtyZXR1cm4gdGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XX1zZXQoZSx0LG4pe3RoaXMuX2RhdGFbZSp0aGlzLmNvbHMrdF09bn19Y2xhc3Mgd3R7Y29uc3RydWN0b3IoZSl7bGV0IHQ9MCxuPTA7Zm9yKGxldCByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXtjb25zdFtpLG8sYV09ZVtyXTtvPnQmJih0PW8pLGk+biYmKG49aSksYT5uJiYobj1hKX10KyssbisrO2NvbnN0IHI9bmV3IEN0KG4sdCwwKTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0W24saSxvXT1lW3RdO3Iuc2V0KG4saSxvKX10aGlzLl9zdGF0ZXM9cix0aGlzLl9tYXhDaGFyQ29kZT10fW5leHRTdGF0ZShlLHQpe3JldHVybiB0PDB8fHQ+PXRoaXMuX21heENoYXJDb2RlPzA6dGhpcy5fc3RhdGVzLmdldChlLHQpfX1sZXQgX3Q9bnVsbDtsZXQgU3Q9bnVsbDtjbGFzcyBBdHtzdGF0aWMgX2NyZWF0ZUxpbmsoZSx0LG4scixpKXtsZXQgbz1pLTE7ZG97Y29uc3Qgbj10LmNoYXJDb2RlQXQobyk7aWYoMiE9PWUuZ2V0KG4pKWJyZWFrO28tLX13aGlsZShvPnIpO2lmKHI+MCl7Y29uc3QgZT10LmNoYXJDb2RlQXQoci0xKSxuPXQuY2hhckNvZGVBdChvKTsoNDA9PT1lJiY0MT09PW58fDkxPT09ZSYmOTM9PT1ufHwxMjM9PT1lJiYxMjU9PT1uKSYmby0tfXJldHVybntyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOm4sc3RhcnRDb2x1bW46cisxLGVuZExpbmVOdW1iZXI6bixlbmRDb2x1bW46bysyfSx1cmw6dC5zdWJzdHJpbmcocixvKzEpfX1zdGF0aWMgY29tcHV0ZUxpbmtzKGUsdD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09X3QmJihfdD1uZXcgd3QoW1sxLDEwNCwyXSxbMSw3MiwyXSxbMSwxMDIsNl0sWzEsNzAsNl0sWzIsMTE2LDNdLFsyLDg0LDNdLFszLDExNiw0XSxbMyw4NCw0XSxbNCwxMTIsNV0sWzQsODAsNV0sWzUsMTE1LDldLFs1LDgzLDldLFs1LDU4LDEwXSxbNiwxMDUsN10sWzYsNzMsN10sWzcsMTA4LDhdLFs3LDc2LDhdLFs4LDEwMSw5XSxbOCw2OSw5XSxbOSw1OCwxMF0sWzEwLDQ3LDExXSxbMTEsNDcsMTJdXSkpLF90fSgpKXtjb25zdCBuPWZ1bmN0aW9uKCl7aWYobnVsbD09PVN0KXtTdD1uZXcgeXQoMCk7Y29uc3QgZT0iIFx0PD4nXCLjgIHjgILvvaHvvaTvvIzvvI7vvJrvvJvigJjjgIjjgIzjgI7jgJTvvIjvvLvvvZvvvaLvvaPvvZ3vvL3vvInjgJXjgI/jgI3jgInigJnvvYDvvZ7igKYiO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKVN0LnNldChlLmNoYXJDb2RlQXQodCksMSk7Y29uc3QgdD0iLiw7OiI7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspU3Quc2V0KHQuY2hhckNvZGVBdChlKSwyKX1yZXR1cm4gU3R9KCkscj1bXTtmb3IobGV0IGk9MSxvPWUuZ2V0TGluZUNvdW50KCk7aTw9bztpKyspe2NvbnN0IG89ZS5nZXRMaW5lQ29udGVudChpKSxhPW8ubGVuZ3RoO2xldCBzPTAsYz0wLGw9MCx1PTEsaD0hMSxmPSExLGQ9ITEsbT0hMTtmb3IoO3M8YTspe2xldCBlPSExO2NvbnN0IGE9by5jaGFyQ29kZUF0KHMpO2lmKDEzPT09dSl7bGV0IHQ7c3dpdGNoKGEpe2Nhc2UgNDA6aD0hMCx0PTA7YnJlYWs7Y2FzZSA0MTp0PWg/MDoxO2JyZWFrO2Nhc2UgOTE6ZD0hMCxmPSEwLHQ9MDticmVhaztjYXNlIDkzOmQ9ITEsdD1mPzA6MTticmVhaztjYXNlIDEyMzptPSEwLHQ9MDticmVhaztjYXNlIDEyNTp0PW0/MDoxO2JyZWFrO2Nhc2UgMzk6dD0zOT09PWw/MTowO2JyZWFrO2Nhc2UgMzQ6dD0zND09PWw/MTowO2JyZWFrO2Nhc2UgOTY6dD05Nj09PWw/MTowO2JyZWFrO2Nhc2UgNDI6dD00Mj09PWw/MTowO2JyZWFrO2Nhc2UgMTI0OnQ9MTI0PT09bD8xOjA7YnJlYWs7Y2FzZSAzMjp0PWQ/MDoxO2JyZWFrO2RlZmF1bHQ6dD1uLmdldChhKX0xPT09dCYmKHIucHVzaChBdC5fY3JlYXRlTGluayhuLG8saSxjLHMpKSxlPSEwKX1lbHNlIGlmKDEyPT09dSl7bGV0IHQ7OTE9PT1hPyhmPSEwLHQ9MCk6dD1uLmdldChhKSwxPT09dD9lPSEwOnU9MTN9ZWxzZSB1PXQubmV4dFN0YXRlKHUsYSksMD09PXUmJihlPSEwKTtlJiYodT0xLGg9ITEsZj0hMSxtPSExLGM9cysxLGw9YSkscysrfTEzPT09dSYmci5wdXNoKEF0Ll9jcmVhdGVMaW5rKG4sbyxpLGMsYSkpfXJldHVybiByfX1jbGFzcyBFdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWYWx1ZVNldD1bWyJ0cnVlIiwiZmFsc2UiXSxbIlRydWUiLCJGYWxzZSJdLFsiUHJpdmF0ZSIsIlB1YmxpYyIsIkZyaWVuZCIsIlJlYWRPbmx5IiwiUGFydGlhbCIsIlByb3RlY3RlZCIsIldyaXRlT25seSJdLFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdXX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxuLHIsaSl7aWYoZSYmdCl7Y29uc3Qgbj10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldCh0LGkpO2lmKG4pcmV0dXJue3JhbmdlOmUsdmFsdWU6bn19aWYobiYmcil7Y29uc3QgZT10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChyLGkpO2lmKGUpcmV0dXJue3JhbmdlOm4sdmFsdWU6ZX19cmV0dXJuIG51bGx9ZG9OYXZpZ2F0ZVZhbHVlU2V0KGUsdCl7Y29uc3Qgbj10aGlzLm51bWJlclJlcGxhY2UoZSx0KTtyZXR1cm4gbnVsbCE9PW4/bjp0aGlzLnRleHRSZXBsYWNlKGUsdCl9bnVtYmVyUmVwbGFjZShlLHQpe2NvbnN0IG49TWF0aC5wb3coMTAsZS5sZW5ndGgtKGUubGFzdEluZGV4T2YoIi4iKSsxKSk7bGV0IHI9TnVtYmVyKGUpO2NvbnN0IGk9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocil8fGlzTmFOKGkpfHxyIT09aT9udWxsOjAhPT1yfHx0PyhyPU1hdGguZmxvb3IocipuKSxyKz10P246LW4sU3RyaW5nKHIvbikpOm51bGx9dGV4dFJlcGxhY2UoZSx0KXtyZXR1cm4gdGhpcy52YWx1ZVNldHNSZXBsYWNlKHRoaXMuX2RlZmF1bHRWYWx1ZVNldCxlLHQpfXZhbHVlU2V0c1JlcGxhY2UoZSx0LG4pe2xldCByPW51bGw7Zm9yKGxldCBpPTAsbz1lLmxlbmd0aDtudWxsPT09ciYmaTxvO2krKylyPXRoaXMudmFsdWVTZXRSZXBsYWNlKGVbaV0sdCxuKTtyZXR1cm4gcn12YWx1ZVNldFJlcGxhY2UoZSx0LG4pe2xldCByPWUuaW5kZXhPZih0KTtyZXR1cm4gcj49MD8ocis9bj8xOi0xLHI8MD9yPWUubGVuZ3RoLTE6ciU9ZS5sZW5ndGgsZVtyXSk6bnVsbH19RXQuSU5TVEFOQ0U9bmV3IEV0O2NvbnN0IHh0PU9iamVjdC5mcmVlemUoKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1zZXRUaW1lb3V0KGUuYmluZCh0KSwwKTtyZXR1cm57ZGlzcG9zZSgpe2NsZWFyVGltZW91dChuKX19fSkpO3ZhciBOdDshZnVuY3Rpb24oZSl7ZS5pc0NhbmNlbGxhdGlvblRva2VuPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZS5Ob25lfHx0PT09ZS5DYW5jZWxsZWR8fCh0IGluc3RhbmNlb2Yga3R8fCEoIXR8fCJvYmplY3QiIT10eXBlb2YgdCkmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCkpfSxlLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6Ri5Ob25lfSksZS5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6eHR9KX0oTnR8fChOdD17fSkpO2NsYXNzIGt0e2NvbnN0cnVjdG9yKCl7dGhpcy5faXNDYW5jZWxsZWQ9ITEsdGhpcy5fZW1pdHRlcj1udWxsfWNhbmNlbCgpe3RoaXMuX2lzQ2FuY2VsbGVkfHwodGhpcy5faXNDYW5jZWxsZWQ9ITAsdGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZmlyZSh2b2lkIDApLHRoaXMuZGlzcG9zZSgpKSl9Z2V0IGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkfWdldCBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZD94dDoodGhpcy5fZW1pdHRlcnx8KHRoaXMuX2VtaXR0ZXI9bmV3IEIpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj1udWxsKX19Y2xhc3MgTHR7Y29uc3RydWN0b3IoZSl7dGhpcy5fdG9rZW49dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj1lJiZlLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKHRoaXMuY2FuY2VsLHRoaXMpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyBrdCksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBrdCYmdGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49TnQuQ2FuY2VsbGVkfWRpc3Bvc2UoZT0hMSl7ZSYmdGhpcy5jYW5jZWwoKSx0aGlzLl9wYXJlbnRMaXN0ZW5lciYmdGhpcy5fcGFyZW50TGlzdGVuZXIuZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2Yga3QmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1OdC5Ob25lfX1jbGFzcyBUdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUoZSx0KXt0aGlzLl9rZXlDb2RlVG9TdHJbZV09dCx0aGlzLl9zdHJUb0tleUNvZGVbdC50b0xvd2VyQ2FzZSgpXT1lfWtleUNvZGVUb1N0cihlKXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW2VdfXN0clRvS2V5Q29kZShlKXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW2UudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IE90PW5ldyBUdCxJdD1uZXcgVHQsTXQ9bmV3IFR0LFB0PW5ldyBBcnJheSgyMzApLFJ0PU9iamVjdC5jcmVhdGUobnVsbCksVnQ9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgRnQsRHQ7IWZ1bmN0aW9uKCl7Y29uc3QgZT0iIix0PVtbMCwxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLGUsZV0sWzAsMSwxLCJIeXBlciIsMCxlLDAsZSxlLGVdLFswLDEsMiwiU3VwZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDMsIkZuIiwwLGUsMCxlLGUsZV0sWzAsMSw0LCJGbkxvY2siLDAsZSwwLGUsZSxlXSxbMCwxLDUsIlN1c3BlbmQiLDAsZSwwLGUsZSxlXSxbMCwxLDYsIlJlc3VtZSIsMCxlLDAsZSxlLGVdLFswLDEsNywiVHVyYm8iLDAsZSwwLGUsZSxlXSxbMCwxLDgsIlNsZWVwIiwwLGUsMCwiVktfU0xFRVAiLGUsZV0sWzAsMSw5LCJXYWtlVXAiLDAsZSwwLGUsZSxlXSxbMzEsMCwxMCwiS2V5QSIsMzEsIkEiLDY1LCJWS19BIixlLGVdLFszMiwwLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLGUsZV0sWzMzLDAsMTIsIktleUMiLDMzLCJDIiw2NywiVktfQyIsZSxlXSxbMzQsMCwxMywiS2V5RCIsMzQsIkQiLDY4LCJWS19EIixlLGVdLFszNSwwLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLGUsZV0sWzM2LDAsMTUsIktleUYiLDM2LCJGIiw3MCwiVktfRiIsZSxlXSxbMzcsMCwxNiwiS2V5RyIsMzcsIkciLDcxLCJWS19HIixlLGVdLFszOCwwLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLGUsZV0sWzM5LDAsMTgsIktleUkiLDM5LCJJIiw3MywiVktfSSIsZSxlXSxbNDAsMCwxOSwiS2V5SiIsNDAsIkoiLDc0LCJWS19KIixlLGVdLFs0MSwwLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLGUsZV0sWzQyLDAsMjEsIktleUwiLDQyLCJMIiw3NiwiVktfTCIsZSxlXSxbNDMsMCwyMiwiS2V5TSIsNDMsIk0iLDc3LCJWS19NIixlLGVdLFs0NCwwLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLGUsZV0sWzQ1LDAsMjQsIktleU8iLDQ1LCJPIiw3OSwiVktfTyIsZSxlXSxbNDYsMCwyNSwiS2V5UCIsNDYsIlAiLDgwLCJWS19QIixlLGVdLFs0NywwLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLGUsZV0sWzQ4LDAsMjcsIktleVIiLDQ4LCJSIiw4MiwiVktfUiIsZSxlXSxbNDksMCwyOCwiS2V5UyIsNDksIlMiLDgzLCJWS19TIixlLGVdLFs1MCwwLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLGUsZV0sWzUxLDAsMzAsIktleVUiLDUxLCJVIiw4NSwiVktfVSIsZSxlXSxbNTIsMCwzMSwiS2V5ViIsNTIsIlYiLDg2LCJWS19WIixlLGVdLFs1MywwLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLGUsZV0sWzU0LDAsMzMsIktleVgiLDU0LCJYIiw4OCwiVktfWCIsZSxlXSxbNTUsMCwzNCwiS2V5WSIsNTUsIlkiLDg5LCJWS19ZIixlLGVdLFs1NiwwLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLGUsZV0sWzIyLDAsMzYsIkRpZ2l0MSIsMjIsIjEiLDQ5LCJWS18xIixlLGVdLFsyMywwLDM3LCJEaWdpdDIiLDIzLCIyIiw1MCwiVktfMiIsZSxlXSxbMjQsMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLGUsZV0sWzI1LDAsMzksIkRpZ2l0NCIsMjUsIjQiLDUyLCJWS180IixlLGVdLFsyNiwwLDQwLCJEaWdpdDUiLDI2LCI1Iiw1MywiVktfNSIsZSxlXSxbMjcsMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLGUsZV0sWzI4LDAsNDIsIkRpZ2l0NyIsMjgsIjciLDU1LCJWS183IixlLGVdLFsyOSwwLDQzLCJEaWdpdDgiLDI5LCI4Iiw1NiwiVktfOCIsZSxlXSxbMzAsMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLGUsZV0sWzIxLDAsNDUsIkRpZ2l0MCIsMjEsIjAiLDQ4LCJWS18wIixlLGVdLFszLDEsNDYsIkVudGVyIiwzLCJFbnRlciIsMTMsIlZLX1JFVFVSTiIsZSxlXSxbOSwxLDQ3LCJFc2NhcGUiLDksIkVzY2FwZSIsMjcsIlZLX0VTQ0FQRSIsZSxlXSxbMSwxLDQ4LCJCYWNrc3BhY2UiLDEsIkJhY2tzcGFjZSIsOCwiVktfQkFDSyIsZSxlXSxbMiwxLDQ5LCJUYWIiLDIsIlRhYiIsOSwiVktfVEFCIixlLGVdLFsxMCwxLDUwLCJTcGFjZSIsMTAsIlNwYWNlIiwzMiwiVktfU1BBQ0UiLGUsZV0sWzgzLDAsNTEsIk1pbnVzIiw4MywiLSIsMTg5LCJWS19PRU1fTUlOVVMiLCItIiwiT0VNX01JTlVTIl0sWzgxLDAsNTIsIkVxdWFsIiw4MSwiPSIsMTg3LCJWS19PRU1fUExVUyIsIj0iLCJPRU1fUExVUyJdLFs4NywwLDUzLCJCcmFja2V0TGVmdCIsODcsIlsiLDIxOSwiVktfT0VNXzQiLCJbIiwiT0VNXzQiXSxbODksMCw1NCwiQnJhY2tldFJpZ2h0Iiw4OSwiXSIsMjIxLCJWS19PRU1fNiIsIl0iLCJPRU1fNiJdLFs4OCwwLDU1LCJCYWNrc2xhc2giLDg4LCJcXCIsMjIwLCJWS19PRU1fNSIsIlxcIiwiT0VNXzUiXSxbMCwwLDU2LCJJbnRsSGFzaCIsMCxlLDAsZSxlLGVdLFs4MCwwLDU3LCJTZW1pY29sb24iLDgwLCI7IiwxODYsIlZLX09FTV8xIiwiOyIsIk9FTV8xIl0sWzkwLDAsNTgsIlF1b3RlIiw5MCwiJyIsMjIyLCJWS19PRU1fNyIsIiciLCJPRU1fNyJdLFs4NiwwLDU5LCJCYWNrcXVvdGUiLDg2LCJgIiwxOTIsIlZLX09FTV8zIiwiYCIsIk9FTV8zIl0sWzgyLDAsNjAsIkNvbW1hIiw4MiwiLCIsMTg4LCJWS19PRU1fQ09NTUEiLCIsIiwiT0VNX0NPTU1BIl0sWzg0LDAsNjEsIlBlcmlvZCIsODQsIi4iLDE5MCwiVktfT0VNX1BFUklPRCIsIi4iLCJPRU1fUEVSSU9EIl0sWzg1LDAsNjIsIlNsYXNoIiw4NSwiLyIsMTkxLCJWS19PRU1fMiIsIi8iLCJPRU1fMiJdLFs4LDEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLGUsZV0sWzU5LDEsNjQsIkYxIiw1OSwiRjEiLDExMiwiVktfRjEiLGUsZV0sWzYwLDEsNjUsIkYyIiw2MCwiRjIiLDExMywiVktfRjIiLGUsZV0sWzYxLDEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLGUsZV0sWzYyLDEsNjcsIkY0Iiw2MiwiRjQiLDExNSwiVktfRjQiLGUsZV0sWzYzLDEsNjgsIkY1Iiw2MywiRjUiLDExNiwiVktfRjUiLGUsZV0sWzY0LDEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLGUsZV0sWzY1LDEsNzAsIkY3Iiw2NSwiRjciLDExOCwiVktfRjciLGUsZV0sWzY2LDEsNzEsIkY4Iiw2NiwiRjgiLDExOSwiVktfRjgiLGUsZV0sWzY3LDEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLGUsZV0sWzY4LDEsNzMsIkYxMCIsNjgsIkYxMCIsMTIxLCJWS19GMTAiLGUsZV0sWzY5LDEsNzQsIkYxMSIsNjksIkYxMSIsMTIyLCJWS19GMTEiLGUsZV0sWzcwLDEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLGUsZV0sWzAsMSw3NiwiUHJpbnRTY3JlZW4iLDAsZSwwLGUsZSxlXSxbNzksMSw3NywiU2Nyb2xsTG9jayIsNzksIlNjcm9sbExvY2siLDE0NSwiVktfU0NST0xMIixlLGVdLFs3LDEsNzgsIlBhdXNlIiw3LCJQYXVzZUJyZWFrIiwxOSwiVktfUEFVU0UiLGUsZV0sWzE5LDEsNzksIkluc2VydCIsMTksIkluc2VydCIsNDUsIlZLX0lOU0VSVCIsZSxlXSxbMTQsMSw4MCwiSG9tZSIsMTQsIkhvbWUiLDM2LCJWS19IT01FIixlLGVdLFsxMSwxLDgxLCJQYWdlVXAiLDExLCJQYWdlVXAiLDMzLCJWS19QUklPUiIsZSxlXSxbMjAsMSw4MiwiRGVsZXRlIiwyMCwiRGVsZXRlIiw0NiwiVktfREVMRVRFIixlLGVdLFsxMywxLDgzLCJFbmQiLDEzLCJFbmQiLDM1LCJWS19FTkQiLGUsZV0sWzEyLDEsODQsIlBhZ2VEb3duIiwxMiwiUGFnZURvd24iLDM0LCJWS19ORVhUIixlLGVdLFsxNywxLDg1LCJBcnJvd1JpZ2h0IiwxNywiUmlnaHRBcnJvdyIsMzksIlZLX1JJR0hUIiwiUmlnaHQiLGVdLFsxNSwxLDg2LCJBcnJvd0xlZnQiLDE1LCJMZWZ0QXJyb3ciLDM3LCJWS19MRUZUIiwiTGVmdCIsZV0sWzE4LDEsODcsIkFycm93RG93biIsMTgsIkRvd25BcnJvdyIsNDAsIlZLX0RPV04iLCJEb3duIixlXSxbMTYsMSw4OCwiQXJyb3dVcCIsMTYsIlVwQXJyb3ciLDM4LCJWS19VUCIsIlVwIixlXSxbNzgsMSw4OSwiTnVtTG9jayIsNzgsIk51bUxvY2siLDE0NCwiVktfTlVNTE9DSyIsZSxlXSxbMTA4LDEsOTAsIk51bXBhZERpdmlkZSIsMTA4LCJOdW1QYWRfRGl2aWRlIiwxMTEsIlZLX0RJVklERSIsZSxlXSxbMTAzLDEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDMsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsZSxlXSxbMTA2LDEsOTIsIk51bXBhZFN1YnRyYWN0IiwxMDYsIk51bVBhZF9TdWJ0cmFjdCIsMTA5LCJWS19TVUJUUkFDVCIsZSxlXSxbMTA0LDEsOTMsIk51bXBhZEFkZCIsMTA0LCJOdW1QYWRfQWRkIiwxMDcsIlZLX0FERCIsZSxlXSxbMywxLDk0LCJOdW1wYWRFbnRlciIsMyxlLDAsZSxlLGVdLFs5NCwxLDk1LCJOdW1wYWQxIiw5NCwiTnVtUGFkMSIsOTcsIlZLX05VTVBBRDEiLGUsZV0sWzk1LDEsOTYsIk51bXBhZDIiLDk1LCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsZSxlXSxbOTYsMSw5NywiTnVtcGFkMyIsOTYsIk51bVBhZDMiLDk5LCJWS19OVU1QQUQzIixlLGVdLFs5NywxLDk4LCJOdW1wYWQ0Iiw5NywiTnVtUGFkNCIsMTAwLCJWS19OVU1QQUQ0IixlLGVdLFs5OCwxLDk5LCJOdW1wYWQ1Iiw5OCwiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IixlLGVdLFs5OSwxLDEwMCwiTnVtcGFkNiIsOTksIk51bVBhZDYiLDEwMiwiVktfTlVNUEFENiIsZSxlXSxbMTAwLDEsMTAxLCJOdW1wYWQ3IiwxMDAsIk51bVBhZDciLDEwMywiVktfTlVNUEFENyIsZSxlXSxbMTAxLDEsMTAyLCJOdW1wYWQ4IiwxMDEsIk51bVBhZDgiLDEwNCwiVktfTlVNUEFEOCIsZSxlXSxbMTAyLDEsMTAzLCJOdW1wYWQ5IiwxMDIsIk51bVBhZDkiLDEwNSwiVktfTlVNUEFEOSIsZSxlXSxbOTMsMSwxMDQsIk51bXBhZDAiLDkzLCJOdW1QYWQwIiw5NiwiVktfTlVNUEFEMCIsZSxlXSxbMTA3LDEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMDcsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLGUsZV0sWzkyLDAsMTA2LCJJbnRsQmFja3NsYXNoIiw5MiwiT0VNXzEwMiIsMjI2LCJWS19PRU1fMTAyIixlLGVdLFs1OCwxLDEwNywiQ29udGV4dE1lbnUiLDU4LCJDb250ZXh0TWVudSIsOTMsZSxlLGVdLFswLDEsMTA4LCJQb3dlciIsMCxlLDAsZSxlLGVdLFswLDEsMTA5LCJOdW1wYWRFcXVhbCIsMCxlLDAsZSxlLGVdLFs3MSwxLDExMCwiRjEzIiw3MSwiRjEzIiwxMjQsIlZLX0YxMyIsZSxlXSxbNzIsMSwxMTEsIkYxNCIsNzIsIkYxNCIsMTI1LCJWS19GMTQiLGUsZV0sWzczLDEsMTEyLCJGMTUiLDczLCJGMTUiLDEyNiwiVktfRjE1IixlLGVdLFs3NCwxLDExMywiRjE2Iiw3NCwiRjE2IiwxMjcsIlZLX0YxNiIsZSxlXSxbNzUsMSwxMTQsIkYxNyIsNzUsIkYxNyIsMTI4LCJWS19GMTciLGUsZV0sWzc2LDEsMTE1LCJGMTgiLDc2LCJGMTgiLDEyOSwiVktfRjE4IixlLGVdLFs3NywxLDExNiwiRjE5Iiw3NywiRjE5IiwxMzAsIlZLX0YxOSIsZSxlXSxbMCwxLDExNywiRjIwIiwwLGUsMCwiVktfRjIwIixlLGVdLFswLDEsMTE4LCJGMjEiLDAsZSwwLCJWS19GMjEiLGUsZV0sWzAsMSwxMTksIkYyMiIsMCxlLDAsIlZLX0YyMiIsZSxlXSxbMCwxLDEyMCwiRjIzIiwwLGUsMCwiVktfRjIzIixlLGVdLFswLDEsMTIxLCJGMjQiLDAsZSwwLCJWS19GMjQiLGUsZV0sWzAsMSwxMjIsIk9wZW4iLDAsZSwwLGUsZSxlXSxbMCwxLDEyMywiSGVscCIsMCxlLDAsZSxlLGVdLFswLDEsMTI0LCJTZWxlY3QiLDAsZSwwLGUsZSxlXSxbMCwxLDEyNSwiQWdhaW4iLDAsZSwwLGUsZSxlXSxbMCwxLDEyNiwiVW5kbyIsMCxlLDAsZSxlLGVdLFswLDEsMTI3LCJDdXQiLDAsZSwwLGUsZSxlXSxbMCwxLDEyOCwiQ29weSIsMCxlLDAsZSxlLGVdLFswLDEsMTI5LCJQYXN0ZSIsMCxlLDAsZSxlLGVdLFswLDEsMTMwLCJGaW5kIiwwLGUsMCxlLGUsZV0sWzAsMSwxMzEsIkF1ZGlvVm9sdW1lTXV0ZSIsMTEyLCJBdWRpb1ZvbHVtZU11dGUiLDE3MywiVktfVk9MVU1FX01VVEUiLGUsZV0sWzAsMSwxMzIsIkF1ZGlvVm9sdW1lVXAiLDExMywiQXVkaW9Wb2x1bWVVcCIsMTc1LCJWS19WT0xVTUVfVVAiLGUsZV0sWzAsMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE0LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLGUsZV0sWzEwNSwxLDEzNCwiTnVtcGFkQ29tbWEiLDEwNSwiTnVtUGFkX1NlcGFyYXRvciIsMTA4LCJWS19TRVBBUkFUT1IiLGUsZV0sWzExMCwwLDEzNSwiSW50bFJvIiwxMTAsIkFCTlRfQzEiLDE5MywiVktfQUJOVF9DMSIsZSxlXSxbMCwxLDEzNiwiS2FuYU1vZGUiLDAsZSwwLGUsZSxlXSxbMCwwLDEzNywiSW50bFllbiIsMCxlLDAsZSxlLGVdLFswLDEsMTM4LCJDb252ZXJ0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMzksIk5vbkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0MCwiTGFuZzEiLDAsZSwwLGUsZSxlXSxbMCwxLDE0MSwiTGFuZzIiLDAsZSwwLGUsZSxlXSxbMCwxLDE0MiwiTGFuZzMiLDAsZSwwLGUsZSxlXSxbMCwxLDE0MywiTGFuZzQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0NCwiTGFuZzUiLDAsZSwwLGUsZSxlXSxbMCwxLDE0NSwiQWJvcnQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0NiwiUHJvcHMiLDAsZSwwLGUsZSxlXSxbMCwxLDE0NywiTnVtcGFkUGFyZW5MZWZ0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDgsIk51bXBhZFBhcmVuUmlnaHQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0OSwiTnVtcGFkQmFja3NwYWNlIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTAsIk51bXBhZE1lbW9yeVN0b3JlIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTEsIk51bXBhZE1lbW9yeVJlY2FsbCIsMCxlLDAsZSxlLGVdLFswLDEsMTUyLCJOdW1wYWRNZW1vcnlDbGVhciIsMCxlLDAsZSxlLGVdLFswLDEsMTUzLCJOdW1wYWRNZW1vcnlBZGQiLDAsZSwwLGUsZSxlXSxbMCwxLDE1NCwiTnVtcGFkTWVtb3J5U3VidHJhY3QiLDAsZSwwLGUsZSxlXSxbMCwxLDE1NSwiTnVtcGFkQ2xlYXIiLDEyNiwiQ2xlYXIiLDEyLCJWS19DTEVBUiIsZSxlXSxbMCwxLDE1NiwiTnVtcGFkQ2xlYXJFbnRyeSIsMCxlLDAsZSxlLGVdLFs1LDEsMCxlLDUsIkN0cmwiLDE3LCJWS19DT05UUk9MIixlLGVdLFs0LDEsMCxlLDQsIlNoaWZ0IiwxNiwiVktfU0hJRlQiLGUsZV0sWzYsMSwwLGUsNiwiQWx0IiwxOCwiVktfTUVOVSIsZSxlXSxbNTcsMSwwLGUsNTcsIk1ldGEiLDAsIlZLX0NPTU1BTkQiLGUsZV0sWzUsMSwxNTcsIkNvbnRyb2xMZWZ0Iiw1LGUsMCwiVktfTENPTlRST0wiLGUsZV0sWzQsMSwxNTgsIlNoaWZ0TGVmdCIsNCxlLDAsIlZLX0xTSElGVCIsZSxlXSxbNiwxLDE1OSwiQWx0TGVmdCIsNixlLDAsIlZLX0xNRU5VIixlLGVdLFs1NywxLDE2MCwiTWV0YUxlZnQiLDU3LGUsMCwiVktfTFdJTiIsZSxlXSxbNSwxLDE2MSwiQ29udHJvbFJpZ2h0Iiw1LGUsMCwiVktfUkNPTlRST0wiLGUsZV0sWzQsMSwxNjIsIlNoaWZ0UmlnaHQiLDQsZSwwLCJWS19SU0hJRlQiLGUsZV0sWzYsMSwxNjMsIkFsdFJpZ2h0Iiw2LGUsMCwiVktfUk1FTlUiLGUsZV0sWzU3LDEsMTY0LCJNZXRhUmlnaHQiLDU3LGUsMCwiVktfUldJTiIsZSxlXSxbMCwxLDE2NSwiQnJpZ2h0bmVzc1VwIiwwLGUsMCxlLGUsZV0sWzAsMSwxNjYsIkJyaWdodG5lc3NEb3duIiwwLGUsMCxlLGUsZV0sWzAsMSwxNjcsIk1lZGlhUGxheSIsMCxlLDAsZSxlLGVdLFswLDEsMTY4LCJNZWRpYVJlY29yZCIsMCxlLDAsZSxlLGVdLFswLDEsMTY5LCJNZWRpYUZhc3RGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzAsMSwxNzAsIk1lZGlhUmV3aW5kIiwwLGUsMCxlLGUsZV0sWzExNCwxLDE3MSwiTWVkaWFUcmFja05leHQiLDExOSwiTWVkaWFUcmFja05leHQiLDE3NiwiVktfTUVESUFfTkVYVF9UUkFDSyIsZSxlXSxbMTE1LDEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyMCwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLGUsZV0sWzExNiwxLDE3MywiTWVkaWFTdG9wIiwxMjEsIk1lZGlhU3RvcCIsMTc4LCJWS19NRURJQV9TVE9QIixlLGVdLFswLDEsMTc0LCJFamVjdCIsMCxlLDAsZSxlLGVdLFsxMTcsMSwxNzUsIk1lZGlhUGxheVBhdXNlIiwxMjIsIk1lZGlhUGxheVBhdXNlIiwxNzksIlZLX01FRElBX1BMQVlfUEFVU0UiLGUsZV0sWzAsMSwxNzYsIk1lZGlhU2VsZWN0IiwxMjMsIkxhdW5jaE1lZGlhUGxheWVyIiwxODEsIlZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QiLGUsZV0sWzAsMSwxNzcsIkxhdW5jaE1haWwiLDEyNCwiTGF1bmNoTWFpbCIsMTgwLCJWS19NRURJQV9MQVVOQ0hfTUFJTCIsZSxlXSxbMCwxLDE3OCwiTGF1bmNoQXBwMiIsMTI1LCJMYXVuY2hBcHAyIiwxODMsIlZLX01FRElBX0xBVU5DSF9BUFAyIixlLGVdLFswLDEsMTc5LCJMYXVuY2hBcHAxIiwwLGUsMCwiVktfTUVESUFfTEFVTkNIX0FQUDEiLGUsZV0sWzAsMSwxODAsIlNlbGVjdFRhc2siLDAsZSwwLGUsZSxlXSxbMCwxLDE4MSwiTGF1bmNoU2NyZWVuU2F2ZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTE1LCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIixlLGVdLFswLDEsMTgzLCJCcm93c2VySG9tZSIsMTE2LCJCcm93c2VySG9tZSIsMTcyLCJWS19CUk9XU0VSX0hPTUUiLGUsZV0sWzExMiwxLDE4NCwiQnJvd3NlckJhY2siLDExNywiQnJvd3NlckJhY2siLDE2NiwiVktfQlJPV1NFUl9CQUNLIixlLGVdLFsxMTMsMSwxODUsIkJyb3dzZXJGb3J3YXJkIiwxMTgsIkJyb3dzZXJGb3J3YXJkIiwxNjcsIlZLX0JST1dTRVJfRk9SV0FSRCIsZSxlXSxbMCwxLDE4NiwiQnJvd3NlclN0b3AiLDAsZSwwLCJWS19CUk9XU0VSX1NUT1AiLGUsZV0sWzAsMSwxODcsIkJyb3dzZXJSZWZyZXNoIiwwLGUsMCwiVktfQlJPV1NFUl9SRUZSRVNIIixlLGVdLFswLDEsMTg4LCJCcm93c2VyRmF2b3JpdGVzIiwwLGUsMCwiVktfQlJPV1NFUl9GQVZPUklURVMiLGUsZV0sWzAsMSwxODksIlpvb21Ub2dnbGUiLDAsZSwwLGUsZSxlXSxbMCwxLDE5MCwiTWFpbFJlcGx5IiwwLGUsMCxlLGUsZV0sWzAsMSwxOTEsIk1haWxGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzAsMSwxOTIsIk1haWxTZW5kIiwwLGUsMCxlLGUsZV0sWzEwOSwxLDAsZSwxMDksIktleUluQ29tcG9zaXRpb24iLDIyOSxlLGUsZV0sWzExMSwxLDAsZSwxMTEsIkFCTlRfQzIiLDE5NCwiVktfQUJOVF9DMiIsZSxlXSxbOTEsMSwwLGUsOTEsIk9FTV84IiwyMjMsIlZLX09FTV84IixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19LQU5BIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19IQU5HVUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0pVTkpBIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19GSU5BTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEFOSkEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0tBTkpJIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19DT05WRVJUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19OT05DT05WRVJUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19BQ0NFUFQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX01PREVDSEFOR0UiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1NFTEVDVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUFJJTlQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0VYRUNVVEUiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1NOQVBTSE9UIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19IRUxQIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19BUFBTIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QUk9DRVNTS0VZIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QQUNLRVQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0RCRV9TQkNTQ0hBUiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfREJFX0RCQ1NDSEFSIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19BVFROIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19DUlNFTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRVhTRUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0VSRU9GIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QTEFZIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19aT09NIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19OT05BTUUiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BBMSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfT0VNX0NMRUFSIixlLGVdXSxuPVtdLHI9W107Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3RbdCxpLG8sYSxzLGMsbCx1LGgsZl09ZTtpZihyW29dfHwocltvXT0hMCxSdFthXT1vLFZ0W2EudG9Mb3dlckNhc2UoKV09byksIW5bc10pe2lmKG5bc109ITAsIWMpdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgcmVwcmVzZW50YXRpb24gbWlzc2luZyBmb3Iga2V5IGNvZGUgJHtzfSBhcm91bmQgc2NhbiBjb2RlICR7YX1gKTtPdC5kZWZpbmUocyxjKSxJdC5kZWZpbmUocyxofHxjKSxNdC5kZWZpbmUocyxmfHxofHxjKX1sJiYoUHRbbF09cyl9fSgpLGZ1bmN0aW9uKGUpe2UudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIE90LmtleUNvZGVUb1N0cihlKX0sZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBPdC5zdHJUb0tleUNvZGUoZSl9LGUudG9Vc2VyU2V0dGluZ3NVUz1mdW5jdGlvbihlKXtyZXR1cm4gSXQua2V5Q29kZVRvU3RyKGUpfSxlLnRvVXNlclNldHRpbmdzR2VuZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4gTXQua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21Vc2VyU2V0dGluZ3M9ZnVuY3Rpb24oZSl7cmV0dXJuIEl0LnN0clRvS2V5Q29kZShlKXx8TXQuc3RyVG9LZXlDb2RlKGUpfSxlLnRvRWxlY3Ryb25BY2NlbGVyYXRvcj1mdW5jdGlvbihlKXtpZihlPj05MyYmZTw9MTA4KXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlIDE2OnJldHVybiJVcCI7Y2FzZSAxODpyZXR1cm4iRG93biI7Y2FzZSAxNTpyZXR1cm4iTGVmdCI7Y2FzZSAxNzpyZXR1cm4iUmlnaHQifXJldHVybiBPdC5rZXlDb2RlVG9TdHIoZSl9fShGdHx8KEZ0PXt9KSk7Y2xhc3MgS3QgZXh0ZW5kcyBldHtjb25zdHJ1Y3RvcihlLHQsbixyKXtzdXBlcihlLHQsbixyKSx0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj1lLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49dCx0aGlzLnBvc2l0aW9uTGluZU51bWJlcj1uLHRoaXMucG9zaXRpb25Db2x1bW49cn10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbisiIC0+ICIrdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIrIiwiK3RoaXMucG9zaXRpb25Db2x1bW4rIl0ifWVxdWFsc1NlbGVjdGlvbihlKXtyZXR1cm4gS3Quc2VsZWN0aW9uc0VxdWFsKHRoaXMsZSl9c3RhdGljIHNlbGVjdGlvbnNFcXVhbChlLHQpe3JldHVybiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiZlLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dC5zZWxlY3Rpb25TdGFydENvbHVtbiYmZS5wb3NpdGlvbkxpbmVOdW1iZXI9PT10LnBvc2l0aW9uTGluZU51bWJlciYmZS5wb3NpdGlvbkNvbHVtbj09PXQucG9zaXRpb25Db2x1bW59Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dGhpcy5zdGFydExpbmVOdW1iZXImJnRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10aGlzLnN0YXJ0Q29sdW1uPzA6MX1zZXRFbmRQb3NpdGlvbihlLHQpe3JldHVybiAwPT09dGhpcy5nZXREaXJlY3Rpb24oKT9uZXcgS3QodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbixlLHQpOm5ldyBLdChlLHQsdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbil9Z2V0UG9zaXRpb24oKXtyZXR1cm4gbmV3IFFlKHRoaXMucG9zaXRpb25MaW5lTnVtYmVyLHRoaXMucG9zaXRpb25Db2x1bW4pfWdldFNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIG5ldyBRZSh0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcix0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKX1zZXRTdGFydFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBLdChlLHQsdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKTpuZXcgS3QodGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uLGUsdCl9c3RhdGljIGZyb21Qb3NpdGlvbnMoZSx0PWUpe3JldHVybiBuZXcgS3QoZS5saW5lTnVtYmVyLGUuY29sdW1uLHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGZyb21SYW5nZShlLHQpe3JldHVybiAwPT09dD9uZXcgS3QoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbixlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pOm5ldyBLdChlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4sZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9c3RhdGljIGxpZnRTZWxlY3Rpb24oZSl7cmV0dXJuIG5ldyBLdChlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcixlLnNlbGVjdGlvblN0YXJ0Q29sdW1uLGUucG9zaXRpb25MaW5lTnVtYmVyLGUucG9zaXRpb25Db2x1bW4pfXN0YXRpYyBzZWxlY3Rpb25zQXJyRXF1YWwoZSx0KXtpZihlJiYhdHx8IWUmJnQpcmV0dXJuITE7aWYoIWUmJiF0KXJldHVybiEwO2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKCF0aGlzLnNlbGVjdGlvbnNFcXVhbChlW25dLHRbbl0pKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBpc0lTZWxlY3Rpb24oZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zZWxlY3Rpb25TdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLnBvc2l0aW9uTGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnBvc2l0aW9uQ29sdW1ufXN0YXRpYyBjcmVhdGVXaXRoRGlyZWN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIDA9PT1pP25ldyBLdChlLHQsbixyKTpuZXcgS3QobixyLGUsdCl9fWNsYXNzIGp0e2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmlkPWUsdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5kZXNjcmlwdGlvbj1uLGp0Ll9hbGxDb2RpY29ucy5wdXNoKHRoaXMpfWdldCBjbGFzc05hbWVzKCl7cmV0dXJuImNvZGljb24gY29kaWNvbi0iK3RoaXMuaWR9Z2V0IGNsYXNzTmFtZXNBcnJheSgpe3JldHVyblsiY29kaWNvbiIsImNvZGljb24tIit0aGlzLmlkXX1nZXQgY3NzU2VsZWN0b3IoKXtyZXR1cm4iLmNvZGljb24uY29kaWNvbi0iK3RoaXMuaWR9c3RhdGljIGdldEFsbCgpe3JldHVybiBqdC5fYWxsQ29kaWNvbnN9fWp0Ll9hbGxDb2RpY29ucz1bXSxqdC5hZGQ9bmV3IGp0KCJhZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjAifSksanQucGx1cz1uZXcganQoInBsdXMiLGp0LmFkZC5kZWZpbml0aW9uKSxqdC5naXN0TmV3PW5ldyBqdCgiZ2lzdC1uZXciLGp0LmFkZC5kZWZpbml0aW9uKSxqdC5yZXBvQ3JlYXRlPW5ldyBqdCgicmVwby1jcmVhdGUiLGp0LmFkZC5kZWZpbml0aW9uKSxqdC5saWdodGJ1bGI9bmV3IGp0KCJsaWdodGJ1bGIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjEifSksanQubGlnaHRCdWxiPW5ldyBqdCgibGlnaHQtYnVsYiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MSJ9KSxqdC5yZXBvPW5ldyBqdCgicmVwbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxqdC5yZXBvRGVsZXRlPW5ldyBqdCgicmVwby1kZWxldGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjIifSksanQuZ2lzdEZvcms9bmV3IGp0KCJnaXN0LWZvcmsiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjMifSksanQucmVwb0ZvcmtlZD1uZXcganQoInJlcG8tZm9ya2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYTYzIn0pLGp0LmdpdFB1bGxSZXF1ZXN0PW5ldyBqdCgiZ2l0LXB1bGwtcmVxdWVzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NCJ9KSxqdC5naXRQdWxsUmVxdWVzdEFiYW5kb25lZD1uZXcganQoImdpdC1wdWxsLXJlcXVlc3QtYWJhbmRvbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY0In0pLGp0LnJlY29yZEtleXM9bmV3IGp0KCJyZWNvcmQta2V5cyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxqdC5rZXlib2FyZD1uZXcganQoImtleWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY1In0pLGp0LnRhZz1uZXcganQoInRhZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NiJ9KSxqdC50YWdBZGQ9bmV3IGp0KCJ0YWctYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGp0LnRhZ1JlbW92ZT1uZXcganQoInRhZy1yZW1vdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjYifSksanQucGVyc29uPW5ldyBqdCgicGVyc29uIix7Zm9udENoYXJhY3RlcjoiXFxlYTY3In0pLGp0LnBlcnNvbkZvbGxvdz1uZXcganQoInBlcnNvbi1mb2xsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksanQucGVyc29uT3V0bGluZT1uZXcganQoInBlcnNvbi1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYTY3In0pLGp0LnBlcnNvbkZpbGxlZD1uZXcganQoInBlcnNvbi1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksanQuZ2l0QnJhbmNoPW5ldyBqdCgiZ2l0LWJyYW5jaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxqdC5naXRCcmFuY2hDcmVhdGU9bmV3IGp0KCJnaXQtYnJhbmNoLWNyZWF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxqdC5naXRCcmFuY2hEZWxldGU9bmV3IGp0KCJnaXQtYnJhbmNoLWRlbGV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxqdC5zb3VyY2VDb250cm9sPW5ldyBqdCgic291cmNlLWNvbnRyb2wiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksanQubWlycm9yPW5ldyBqdCgibWlycm9yIix7Zm9udENoYXJhY3RlcjoiXFxlYTY5In0pLGp0Lm1pcnJvclB1YmxpYz1uZXcganQoIm1pcnJvci1wdWJsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjkifSksanQuc3Rhcj1uZXcganQoInN0YXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksanQuc3RhckFkZD1uZXcganQoInN0YXItYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGp0LnN0YXJEZWxldGU9bmV3IGp0KCJzdGFyLWRlbGV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxqdC5zdGFyRW1wdHk9bmV3IGp0KCJzdGFyLWVtcHR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGp0LmNvbW1lbnQ9bmV3IGp0KCJjb21tZW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLGp0LmNvbW1lbnRBZGQ9bmV3IGp0KCJjb21tZW50LWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YiJ9KSxqdC5hbGVydD1uZXcganQoImFsZXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZjIn0pLGp0Lndhcm5pbmc9bmV3IGp0KCJ3YXJuaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYTZjIn0pLGp0LnNlYXJjaD1uZXcganQoInNlYXJjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZCJ9KSxqdC5zZWFyY2hTYXZlPW5ldyBqdCgic2VhcmNoLXNhdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmQifSksanQubG9nT3V0PW5ldyBqdCgibG9nLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxqdC5zaWduT3V0PW5ldyBqdCgic2lnbi1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmUifSksanQubG9nSW49bmV3IGp0KCJsb2ctaW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksanQuc2lnbkluPW5ldyBqdCgic2lnbi1pbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZiJ9KSxqdC5leWU9bmV3IGp0KCJleWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksanQuZXllVW53YXRjaD1uZXcganQoImV5ZS11bndhdGNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTcwIn0pLGp0LmV5ZVdhdGNoPW5ldyBqdCgiZXllLXdhdGNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTcwIn0pLGp0LmNpcmNsZUZpbGxlZD1uZXcganQoImNpcmNsZS1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksanQucHJpbWl0aXZlRG90PW5ldyBqdCgicHJpbWl0aXZlLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxqdC5jbG9zZURpcnR5PW5ldyBqdCgiY2xvc2UtZGlydHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksanQuZGVidWdCcmVha3BvaW50PW5ldyBqdCgiZGVidWctYnJlYWtwb2ludCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnREaXNhYmxlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksanQuZGVidWdIaW50PW5ldyBqdCgiZGVidWctaGludCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxqdC5wcmltaXRpdmVTcXVhcmU9bmV3IGp0KCJwcmltaXRpdmUtc3F1YXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYTcyIn0pLGp0LmVkaXQ9bmV3IGp0KCJlZGl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLGp0LnBlbmNpbD1uZXcganQoInBlbmNpbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MyJ9KSxqdC5pbmZvPW5ldyBqdCgiaW5mbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NCJ9KSxqdC5pc3N1ZU9wZW5lZD1uZXcganQoImlzc3VlLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NCJ9KSxqdC5naXN0UHJpdmF0ZT1uZXcganQoImdpc3QtcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxqdC5naXRGb3JrUHJpdmF0ZT1uZXcganQoImdpdC1mb3JrLXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksanQubG9jaz1uZXcganQoImxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksanQubWlycm9yUHJpdmF0ZT1uZXcganQoIm1pcnJvci1wcml2YXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLGp0LmNsb3NlPW5ldyBqdCgiY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzYifSksanQucmVtb3ZlQ2xvc2U9bmV3IGp0KCJyZW1vdmUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzYifSksanQueD1uZXcganQoIngiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzYifSksanQucmVwb1N5bmM9bmV3IGp0KCJyZXBvLXN5bmMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzcifSksanQuc3luYz1uZXcganQoInN5bmMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzcifSksanQuY2xvbmU9bmV3IGp0KCJjbG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OCJ9KSxqdC5kZXNrdG9wRG93bmxvYWQ9bmV3IGp0KCJkZXNrdG9wLWRvd25sb2FkIix7Zm9udENoYXJhY3RlcjoiXFxlYTc4In0pLGp0LmJlYWtlcj1uZXcganQoImJlYWtlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OSJ9KSxqdC5taWNyb3Njb3BlPW5ldyBqdCgibWljcm9zY29wZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OSJ9KSxqdC52bT1uZXcganQoInZtIix7Zm9udENoYXJhY3RlcjoiXFxlYTdhIn0pLGp0LmRldmljZURlc2t0b3A9bmV3IGp0KCJkZXZpY2UtZGVza3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YSJ9KSxqdC5maWxlPW5ldyBqdCgiZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YiJ9KSxqdC5maWxlVGV4dD1uZXcganQoImZpbGUtdGV4dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YiJ9KSxqdC5tb3JlPW5ldyBqdCgibW9yZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxqdC5lbGxpcHNpcz1uZXcganQoImVsbGlwc2lzIix7Zm9udENoYXJhY3RlcjoiXFxlYTdjIn0pLGp0LmtlYmFiSG9yaXpvbnRhbD1uZXcganQoImtlYmFiLWhvcml6b250YWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2MifSksanQubWFpbFJlcGx5PW5ldyBqdCgibWFpbC1yZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxqdC5yZXBseT1uZXcganQoInJlcGx5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdkIn0pLGp0Lm9yZ2FuaXphdGlvbj1uZXcganQoIm9yZ2FuaXphdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZSJ9KSxqdC5vcmdhbml6YXRpb25GaWxsZWQ9bmV3IGp0KCJvcmdhbml6YXRpb24tZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLGp0Lm9yZ2FuaXphdGlvbk91dGxpbmU9bmV3IGp0KCJvcmdhbml6YXRpb24tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZSJ9KSxqdC5uZXdGaWxlPW5ldyBqdCgibmV3LWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2YifSksanQuZmlsZUFkZD1uZXcganQoImZpbGUtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdmIn0pLGp0Lm5ld0ZvbGRlcj1uZXcganQoIm5ldy1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODAifSksanQuZmlsZURpcmVjdG9yeUNyZWF0ZT1uZXcganQoImZpbGUtZGlyZWN0b3J5LWNyZWF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MCJ9KSxqdC50cmFzaD1uZXcganQoInRyYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLGp0LnRyYXNoY2FuPW5ldyBqdCgidHJhc2hjYW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhODEifSksanQuaGlzdG9yeT1uZXcganQoImhpc3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODIifSksanQuY2xvY2s9bmV3IGp0KCJjbG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxqdC5mb2xkZXI9bmV3IGp0KCJmb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksanQuZmlsZURpcmVjdG9yeT1uZXcganQoImZpbGUtZGlyZWN0b3J5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTgzIn0pLGp0LnN5bWJvbEZvbGRlcj1uZXcganQoInN5bWJvbC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksanQubG9nb0dpdGh1Yj1uZXcganQoImxvZ28tZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLGp0Lm1hcmtHaXRodWI9bmV3IGp0KCJtYXJrLWdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxqdC5naXRodWI9bmV3IGp0KCJnaXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksanQudGVybWluYWw9bmV3IGp0KCJ0ZXJtaW5hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NSJ9KSxqdC5jb25zb2xlPW5ldyBqdCgiY29uc29sZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NSJ9KSxqdC5yZXBsPW5ldyBqdCgicmVwbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NSJ9KSxqdC56YXA9bmV3IGp0KCJ6YXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhODYifSksanQuc3ltYm9sRXZlbnQ9bmV3IGp0KCJzeW1ib2wtZXZlbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhODYifSksanQuZXJyb3I9bmV3IGp0KCJlcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NyJ9KSxqdC5zdG9wPW5ldyBqdCgic3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NyJ9KSxqdC52YXJpYWJsZT1uZXcganQoInZhcmlhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg4In0pLGp0LnN5bWJvbFZhcmlhYmxlPW5ldyBqdCgic3ltYm9sLXZhcmlhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg4In0pLGp0LmFycmF5PW5ldyBqdCgiYXJyYXkiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGEifSksanQuc3ltYm9sQXJyYXk9bmV3IGp0KCJzeW1ib2wtYXJyYXkiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGEifSksanQuc3ltYm9sTW9kdWxlPW5ldyBqdCgic3ltYm9sLW1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxqdC5zeW1ib2xQYWNrYWdlPW5ldyBqdCgic3ltYm9sLXBhY2thZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksanQuc3ltYm9sTmFtZXNwYWNlPW5ldyBqdCgic3ltYm9sLW5hbWVzcGFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxqdC5zeW1ib2xPYmplY3Q9bmV3IGp0KCJzeW1ib2wtb2JqZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGp0LnN5bWJvbE1ldGhvZD1uZXcganQoInN5bWJvbC1tZXRob2QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGMifSksanQuc3ltYm9sRnVuY3Rpb249bmV3IGp0KCJzeW1ib2wtZnVuY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhOGMifSksanQuc3ltYm9sQ29uc3RydWN0b3I9bmV3IGp0KCJzeW1ib2wtY29uc3RydWN0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGMifSksanQuc3ltYm9sQm9vbGVhbj1uZXcganQoInN5bWJvbC1ib29sZWFuIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLGp0LnN5bWJvbE51bGw9bmV3IGp0KCJzeW1ib2wtbnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4ZiJ9KSxqdC5zeW1ib2xOdW1lcmljPW5ldyBqdCgic3ltYm9sLW51bWVyaWMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksanQuc3ltYm9sTnVtYmVyPW5ldyBqdCgic3ltYm9sLW51bWJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MCJ9KSxqdC5zeW1ib2xTdHJ1Y3R1cmU9bmV3IGp0KCJzeW1ib2wtc3RydWN0dXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYTkxIn0pLGp0LnN5bWJvbFN0cnVjdD1uZXcganQoInN5bWJvbC1zdHJ1Y3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksanQuc3ltYm9sUGFyYW1ldGVyPW5ldyBqdCgic3ltYm9sLXBhcmFtZXRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MiJ9KSxqdC5zeW1ib2xUeXBlUGFyYW1ldGVyPW5ldyBqdCgic3ltYm9sLXR5cGUtcGFyYW1ldGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkyIn0pLGp0LnN5bWJvbEtleT1uZXcganQoInN5bWJvbC1rZXkiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksanQuc3ltYm9sVGV4dD1uZXcganQoInN5bWJvbC10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTkzIn0pLGp0LnN5bWJvbFJlZmVyZW5jZT1uZXcganQoInN5bWJvbC1yZWZlcmVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTQifSksanQuZ29Ub0ZpbGU9bmV3IGp0KCJnby10by1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk0In0pLGp0LnN5bWJvbEVudW09bmV3IGp0KCJzeW1ib2wtZW51bSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NSJ9KSxqdC5zeW1ib2xWYWx1ZT1uZXcganQoInN5bWJvbC12YWx1ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NSJ9KSxqdC5zeW1ib2xSdWxlcj1uZXcganQoInN5bWJvbC1ydWxlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxqdC5zeW1ib2xVbml0PW5ldyBqdCgic3ltYm9sLXVuaXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTYifSksanQuYWN0aXZhdGVCcmVha3BvaW50cz1uZXcganQoImFjdGl2YXRlLWJyZWFrcG9pbnRzIix7Zm9udENoYXJhY3RlcjoiXFxlYTk3In0pLGp0LmFyY2hpdmU9bmV3IGp0KCJhcmNoaXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk4In0pLGp0LmFycm93Qm90aD1uZXcganQoImFycm93LWJvdGgiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTkifSksanQuYXJyb3dEb3duPW5ldyBqdCgiYXJyb3ctZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5YSJ9KSxqdC5hcnJvd0xlZnQ9bmV3IGp0KCJhcnJvdy1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTliIn0pLGp0LmFycm93UmlnaHQ9bmV3IGp0KCJhcnJvdy1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5YyJ9KSxqdC5hcnJvd1NtYWxsRG93bj1uZXcganQoImFycm93LXNtYWxsLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhOWQifSksanQuYXJyb3dTbWFsbExlZnQ9bmV3IGp0KCJhcnJvdy1zbWFsbC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTllIn0pLGp0LmFycm93U21hbGxSaWdodD1uZXcganQoImFycm93LXNtYWxsLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTlmIn0pLGp0LmFycm93U21hbGxVcD1uZXcganQoImFycm93LXNtYWxsLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWEwIn0pLGp0LmFycm93VXA9bmV3IGp0KCJhcnJvdy11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMSJ9KSxqdC5iZWxsPW5ldyBqdCgiYmVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMiJ9KSxqdC5ib2xkPW5ldyBqdCgiYm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMyJ9KSxqdC5ib29rPW5ldyBqdCgiYm9vayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNCJ9KSxqdC5ib29rbWFyaz1uZXcganQoImJvb2ttYXJrIix7Zm9udENoYXJhY3RlcjoiXFxlYWE1In0pLGp0LmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsVW52ZXJpZmllZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNiJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTcifSksanQuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxEaXNhYmxlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTcifSksanQuZGVidWdCcmVha3BvaW50RGF0YVVudmVyaWZpZWQ9bmV3IGp0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhOCJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnREYXRhPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1kYXRhIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLGp0LmRlYnVnQnJlYWtwb2ludERhdGFEaXNhYmxlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhOSJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRMb2dVbnZlcmlmaWVkPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1sb2ctdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYSJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRMb2c9bmV3IGp0KCJkZWJ1Zy1icmVha3BvaW50LWxvZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRMb2dEaXNhYmxlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtbG9nLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFiIn0pLGp0LmJyaWVmY2FzZT1uZXcganQoImJyaWVmY2FzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYyJ9KSxqdC5icm9hZGNhc3Q9bmV3IGp0KCJicm9hZGNhc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWQifSksanQuYnJvd3Nlcj1uZXcganQoImJyb3dzZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWUifSksanQuYnVnPW5ldyBqdCgiYnVnIix7Zm9udENoYXJhY3RlcjoiXFxlYWFmIn0pLGp0LmNhbGVuZGFyPW5ldyBqdCgiY2FsZW5kYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjAifSksanQuY2FzZVNlbnNpdGl2ZT1uZXcganQoImNhc2Utc2Vuc2l0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYWIxIn0pLGp0LmNoZWNrPW5ldyBqdCgiY2hlY2siLHtmb250Q2hhcmFjdGVyOiJcXGVhYjIifSksanQuY2hlY2tsaXN0PW5ldyBqdCgiY2hlY2tsaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWIzIn0pLGp0LmNoZXZyb25Eb3duPW5ldyBqdCgiY2hldnJvbi1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYWI0In0pLGp0LmRyb3BEb3duQnV0dG9uPW5ldyBqdCgiZHJvcC1kb3duLWJ1dHRvbiIsanQuY2hldnJvbkRvd24uZGVmaW5pdGlvbiksanQuY2hldnJvbkxlZnQ9bmV3IGp0KCJjaGV2cm9uLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjUifSksanQuY2hldnJvblJpZ2h0PW5ldyBqdCgiY2hldnJvbi1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNiJ9KSxqdC5jaGV2cm9uVXA9bmV3IGp0KCJjaGV2cm9uLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWI3In0pLGp0LmNocm9tZUNsb3NlPW5ldyBqdCgiY2hyb21lLWNsb3NlIix7Zm9udENoYXJhY3RlcjoiXFxlYWI4In0pLGp0LmNocm9tZU1heGltaXplPW5ldyBqdCgiY2hyb21lLW1heGltaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYWI5In0pLGp0LmNocm9tZU1pbmltaXplPW5ldyBqdCgiY2hyb21lLW1pbmltaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYWJhIn0pLGp0LmNocm9tZVJlc3RvcmU9bmV3IGp0KCJjaHJvbWUtcmVzdG9yZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYiJ9KSxqdC5jaXJjbGVPdXRsaW5lPW5ldyBqdCgiY2lyY2xlLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksanQuZGVidWdCcmVha3BvaW50VW52ZXJpZmllZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYyJ9KSxqdC5jaXJjbGVTbGFzaD1uZXcganQoImNpcmNsZS1zbGFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiZCJ9KSxqdC5jaXJjdWl0Qm9hcmQ9bmV3IGp0KCJjaXJjdWl0LWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJlIn0pLGp0LmNsZWFyQWxsPW5ldyBqdCgiY2xlYXItYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWJmIn0pLGp0LmNsaXBweT1uZXcganQoImNsaXBweSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMCJ9KSxqdC5jbG9zZUFsbD1uZXcganQoImNsb3NlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMSJ9KSxqdC5jbG91ZERvd25sb2FkPW5ldyBqdCgiY2xvdWQtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzIifSksanQuY2xvdWRVcGxvYWQ9bmV3IGp0KCJjbG91ZC11cGxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzMifSksanQuY29kZT1uZXcganQoImNvZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzQifSksanQuY29sbGFwc2VBbGw9bmV3IGp0KCJjb2xsYXBzZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzUifSksanQuY29sb3JNb2RlPW5ldyBqdCgiY29sb3ItbW9kZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNiJ9KSxqdC5jb21tZW50RGlzY3Vzc2lvbj1uZXcganQoImNvbW1lbnQtZGlzY3Vzc2lvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNyJ9KSxqdC5jb21wYXJlQ2hhbmdlcz1uZXcganQoImNvbXBhcmUtY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmZCJ9KSxqdC5jcmVkaXRDYXJkPW5ldyBqdCgiY3JlZGl0LWNhcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzkifSksanQuZGFzaD1uZXcganQoImRhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhY2MifSksanQuZGFzaGJvYXJkPW5ldyBqdCgiZGFzaGJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWNkIn0pLGp0LmRhdGFiYXNlPW5ldyBqdCgiZGF0YWJhc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2UifSksanQuZGVidWdDb250aW51ZT1uZXcganQoImRlYnVnLWNvbnRpbnVlIix7Zm9udENoYXJhY3RlcjoiXFxlYWNmIn0pLGp0LmRlYnVnRGlzY29ubmVjdD1uZXcganQoImRlYnVnLWRpc2Nvbm5lY3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDAifSksanQuZGVidWdQYXVzZT1uZXcganQoImRlYnVnLXBhdXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWQxIn0pLGp0LmRlYnVnUmVzdGFydD1uZXcganQoImRlYnVnLXJlc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDIifSksanQuZGVidWdTdGFydD1uZXcganQoImRlYnVnLXN0YXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQzIn0pLGp0LmRlYnVnU3RlcEludG89bmV3IGp0KCJkZWJ1Zy1zdGVwLWludG8iLHtmb250Q2hhcmFjdGVyOiJcXGVhZDQifSksanQuZGVidWdTdGVwT3V0PW5ldyBqdCgiZGVidWctc3RlcC1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDUifSksanQuZGVidWdTdGVwT3Zlcj1uZXcganQoImRlYnVnLXN0ZXAtb3ZlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNiJ9KSxqdC5kZWJ1Z1N0b3A9bmV3IGp0KCJkZWJ1Zy1zdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ3In0pLGp0LmRlYnVnPW5ldyBqdCgiZGVidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhZDgifSksanQuZGV2aWNlQ2FtZXJhVmlkZW89bmV3IGp0KCJkZXZpY2UtY2FtZXJhLXZpZGVvIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ5In0pLGp0LmRldmljZUNhbWVyYT1uZXcganQoImRldmljZS1jYW1lcmEiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGEifSksanQuZGV2aWNlTW9iaWxlPW5ldyBqdCgiZGV2aWNlLW1vYmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYiJ9KSxqdC5kaWZmQWRkZWQ9bmV3IGp0KCJkaWZmLWFkZGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRjIn0pLGp0LmRpZmZJZ25vcmVkPW5ldyBqdCgiZGlmZi1pZ25vcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRkIn0pLGp0LmRpZmZNb2RpZmllZD1uZXcganQoImRpZmYtbW9kaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGUifSksanQuZGlmZlJlbW92ZWQ9bmV3IGp0KCJkaWZmLXJlbW92ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGYifSksanQuZGlmZlJlbmFtZWQ9bmV3IGp0KCJkaWZmLXJlbmFtZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTAifSksanQuZGlmZj1uZXcganQoImRpZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTEifSksanQuZGlzY2FyZD1uZXcganQoImRpc2NhcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTIifSksanQuZWRpdG9yTGF5b3V0PW5ldyBqdCgiZWRpdG9yLWxheW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMyJ9KSxqdC5lbXB0eVdpbmRvdz1uZXcganQoImVtcHR5LXdpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNCJ9KSxqdC5leGNsdWRlPW5ldyBqdCgiZXhjbHVkZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNSJ9KSxqdC5leHRlbnNpb25zPW5ldyBqdCgiZXh0ZW5zaW9ucyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNiJ9KSxqdC5leWVDbG9zZWQ9bmV3IGp0KCJleWUtY2xvc2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYWU3In0pLGp0LmZpbGVCaW5hcnk9bmV3IGp0KCJmaWxlLWJpbmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlOCJ9KSxqdC5maWxlQ29kZT1uZXcganQoImZpbGUtY29kZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlOSJ9KSxqdC5maWxlTWVkaWE9bmV3IGp0KCJmaWxlLW1lZGlhIix7Zm9udENoYXJhY3RlcjoiXFxlYWVhIn0pLGp0LmZpbGVQZGY9bmV3IGp0KCJmaWxlLXBkZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYiJ9KSxqdC5maWxlU3VibW9kdWxlPW5ldyBqdCgiZmlsZS1zdWJtb2R1bGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWMifSksanQuZmlsZVN5bWxpbmtEaXJlY3Rvcnk9bmV3IGp0KCJmaWxlLXN5bWxpbmstZGlyZWN0b3J5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWVkIn0pLGp0LmZpbGVTeW1saW5rRmlsZT1uZXcganQoImZpbGUtc3ltbGluay1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYWVlIn0pLGp0LmZpbGVaaXA9bmV3IGp0KCJmaWxlLXppcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlZiJ9KSxqdC5maWxlcz1uZXcganQoImZpbGVzIix7Zm9udENoYXJhY3RlcjoiXFxlYWYwIn0pLGp0LmZpbHRlcj1uZXcganQoImZpbHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmMSJ9KSxqdC5mbGFtZT1uZXcganQoImZsYW1lIix7Zm9udENoYXJhY3RlcjoiXFxlYWYyIn0pLGp0LmZvbGREb3duPW5ldyBqdCgiZm9sZC1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYWYzIn0pLGp0LmZvbGRVcD1uZXcganQoImZvbGQtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjQifSksanQuZm9sZD1uZXcganQoImZvbGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjUifSksanQuZm9sZGVyQWN0aXZlPW5ldyBqdCgiZm9sZGVyLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNiJ9KSxqdC5mb2xkZXJPcGVuZWQ9bmV3IGp0KCJmb2xkZXItb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWY3In0pLGp0LmdlYXI9bmV3IGp0KCJnZWFyIix7Zm9udENoYXJhY3RlcjoiXFxlYWY4In0pLGp0LmdpZnQ9bmV3IGp0KCJnaWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWY5In0pLGp0Lmdpc3RTZWNyZXQ9bmV3IGp0KCJnaXN0LXNlY3JldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmYSJ9KSxqdC5naXN0PW5ldyBqdCgiZ2lzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmYiJ9KSxqdC5naXRDb21taXQ9bmV3IGp0KCJnaXQtY29tbWl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZjIn0pLGp0LmdpdENvbXBhcmU9bmV3IGp0KCJnaXQtY29tcGFyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmZCJ9KSxqdC5naXRNZXJnZT1uZXcganQoImdpdC1tZXJnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmZSJ9KSxqdC5naXRodWJBY3Rpb249bmV3IGp0KCJnaXRodWItYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWZmIn0pLGp0LmdpdGh1YkFsdD1uZXcganQoImdpdGh1Yi1hbHQiLHtmb250Q2hhcmFjdGVyOiJcXGViMDAifSksanQuZ2xvYmU9bmV3IGp0KCJnbG9iZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMSJ9KSxqdC5ncmFiYmVyPW5ldyBqdCgiZ3JhYmJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMiJ9KSxqdC5ncmFwaD1uZXcganQoImdyYXBoIix7Zm9udENoYXJhY3RlcjoiXFxlYjAzIn0pLGp0LmdyaXBwZXI9bmV3IGp0KCJncmlwcGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjA0In0pLGp0LmhlYXJ0PW5ldyBqdCgiaGVhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViMDUifSksanQuaG9tZT1uZXcganQoImhvbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViMDYifSksanQuaG9yaXpvbnRhbFJ1bGU9bmV3IGp0KCJob3Jpem9udGFsLXJ1bGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMDcifSksanQuaHVib3Q9bmV3IGp0KCJodWJvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOCJ9KSxqdC5pbmJveD1uZXcganQoImluYm94Iix7Zm9udENoYXJhY3RlcjoiXFxlYjA5In0pLGp0Lmlzc3VlQ2xvc2VkPW5ldyBqdCgiaXNzdWUtY2xvc2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYmE0In0pLGp0Lmlzc3VlUmVvcGVuZWQ9bmV3IGp0KCJpc3N1ZS1yZW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYiJ9KSxqdC5pc3N1ZXM9bmV3IGp0KCJpc3N1ZXMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGMifSksanQuaXRhbGljPW5ldyBqdCgiaXRhbGljIix7Zm9udENoYXJhY3RlcjoiXFxlYjBkIn0pLGp0LmplcnNleT1uZXcganQoImplcnNleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwZSJ9KSxqdC5qc29uPW5ldyBqdCgianNvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwZiJ9KSxqdC5rZWJhYlZlcnRpY2FsPW5ldyBqdCgia2ViYWItdmVydGljYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMTAifSksanQua2V5PW5ldyBqdCgia2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjExIn0pLGp0Lmxhdz1uZXcganQoImxhdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMiJ9KSxqdC5saWdodGJ1bGJBdXRvZml4PW5ldyBqdCgibGlnaHRidWxiLWF1dG9maXgiLHtmb250Q2hhcmFjdGVyOiJcXGViMTMifSksanQubGlua0V4dGVybmFsPW5ldyBqdCgibGluay1leHRlcm5hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNCJ9KSxqdC5saW5rPW5ldyBqdCgibGluayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNSJ9KSxqdC5saXN0T3JkZXJlZD1uZXcganQoImxpc3Qtb3JkZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNiJ9KSxqdC5saXN0VW5vcmRlcmVkPW5ldyBqdCgibGlzdC11bm9yZGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMTcifSksanQubGl2ZVNoYXJlPW5ldyBqdCgibGl2ZS1zaGFyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxOCJ9KSxqdC5sb2FkaW5nPW5ldyBqdCgibG9hZGluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxOSJ9KSxqdC5sb2NhdGlvbj1uZXcganQoImxvY2F0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjFhIn0pLGp0Lm1haWxSZWFkPW5ldyBqdCgibWFpbC1yZWFkIix7Zm9udENoYXJhY3RlcjoiXFxlYjFiIn0pLGp0Lm1haWw9bmV3IGp0KCJtYWlsIix7Zm9udENoYXJhY3RlcjoiXFxlYjFjIn0pLGp0Lm1hcmtkb3duPW5ldyBqdCgibWFya2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWQifSksanQubWVnYXBob25lPW5ldyBqdCgibWVnYXBob25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjFlIn0pLGp0Lm1lbnRpb249bmV3IGp0KCJtZW50aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjFmIn0pLGp0Lm1pbGVzdG9uZT1uZXcganQoIm1pbGVzdG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMCJ9KSxqdC5tb3J0YXJCb2FyZD1uZXcganQoIm1vcnRhci1ib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMSJ9KSxqdC5tb3ZlPW5ldyBqdCgibW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMiJ9KSxqdC5tdWx0aXBsZVdpbmRvd3M9bmV3IGp0KCJtdWx0aXBsZS13aW5kb3dzIix7Zm9udENoYXJhY3RlcjoiXFxlYjIzIn0pLGp0Lm11dGU9bmV3IGp0KCJtdXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI0In0pLGp0Lm5vTmV3bGluZT1uZXcganQoIm5vLW5ld2xpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjUifSksanQubm90ZT1uZXcganQoIm5vdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjYifSksanQub2N0b2ZhY2U9bmV3IGp0KCJvY3RvZmFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNyJ9KSxqdC5vcGVuUHJldmlldz1uZXcganQoIm9wZW4tcHJldmlldyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyOCJ9KSxqdC5wYWNrYWdlXz1uZXcganQoInBhY2thZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjkifSksanQucGFpbnRjYW49bmV3IGp0KCJwYWludGNhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYSJ9KSxqdC5waW49bmV3IGp0KCJwaW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmIifSksanQucGxheT1uZXcganQoInBsYXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksanQucnVuPW5ldyBqdCgicnVuIix7Zm9udENoYXJhY3RlcjoiXFxlYjJjIn0pLGp0LnBsdWc9bmV3IGp0KCJwbHVnIix7Zm9udENoYXJhY3RlcjoiXFxlYjJkIn0pLGp0LnByZXNlcnZlQ2FzZT1uZXcganQoInByZXNlcnZlLWNhc2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMmUifSksanQucHJldmlldz1uZXcganQoInByZXZpZXciLHtmb250Q2hhcmFjdGVyOiJcXGViMmYifSksanQucHJvamVjdD1uZXcganQoInByb2plY3QiLHtmb250Q2hhcmFjdGVyOiJcXGViMzAifSksanQucHVsc2U9bmV3IGp0KCJwdWxzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMSJ9KSxqdC5xdWVzdGlvbj1uZXcganQoInF1ZXN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjMyIn0pLGp0LnF1b3RlPW5ldyBqdCgicXVvdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMzMifSksanQucmFkaW9Ub3dlcj1uZXcganQoInJhZGlvLXRvd2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYjM0In0pLGp0LnJlYWN0aW9ucz1uZXcganQoInJlYWN0aW9ucyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNSJ9KSxqdC5yZWZlcmVuY2VzPW5ldyBqdCgicmVmZXJlbmNlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNiJ9KSxqdC5yZWZyZXNoPW5ldyBqdCgicmVmcmVzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNyJ9KSxqdC5yZWdleD1uZXcganQoInJlZ2V4Iix7Zm9udENoYXJhY3RlcjoiXFxlYjM4In0pLGp0LnJlbW90ZUV4cGxvcmVyPW5ldyBqdCgicmVtb3RlLWV4cGxvcmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjM5In0pLGp0LnJlbW90ZT1uZXcganQoInJlbW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYSJ9KSxqdC5yZW1vdmU9bmV3IGp0KCJyZW1vdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViM2IifSksanQucmVwbGFjZUFsbD1uZXcganQoInJlcGxhY2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjNjIn0pLGp0LnJlcGxhY2U9bmV3IGp0KCJyZXBsYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNkIn0pLGp0LnJlcG9DbG9uZT1uZXcganQoInJlcG8tY2xvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViM2UifSksanQucmVwb0ZvcmNlUHVzaD1uZXcganQoInJlcG8tZm9yY2UtcHVzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzZiJ9KSxqdC5yZXBvUHVsbD1uZXcganQoInJlcG8tcHVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MCJ9KSxqdC5yZXBvUHVzaD1uZXcganQoInJlcG8tcHVzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MSJ9KSxqdC5yZXBvcnQ9bmV3IGp0KCJyZXBvcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViNDIifSksanQucmVxdWVzdENoYW5nZXM9bmV3IGp0KCJyZXF1ZXN0LWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNDMifSksanQucm9ja2V0PW5ldyBqdCgicm9ja2V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ0In0pLGp0LnJvb3RGb2xkZXJPcGVuZWQ9bmV3IGp0KCJyb290LWZvbGRlci1vcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViNDUifSksanQucm9vdEZvbGRlcj1uZXcganQoInJvb3QtZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ2In0pLGp0LnJzcz1uZXcganQoInJzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NyJ9KSxqdC5ydWJ5PW5ldyBqdCgicnVieSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0OCJ9KSxqdC5zYXZlQWxsPW5ldyBqdCgic2F2ZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNDkifSksanQuc2F2ZUFzPW5ldyBqdCgic2F2ZS1hcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0YSJ9KSxqdC5zYXZlPW5ldyBqdCgic2F2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0YiJ9KSxqdC5zY3JlZW5GdWxsPW5ldyBqdCgic2NyZWVuLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGMifSksanQuc2NyZWVuTm9ybWFsPW5ldyBqdCgic2NyZWVuLW5vcm1hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZCJ9KSxqdC5zZWFyY2hTdG9wPW5ldyBqdCgic2VhcmNoLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGViNGUifSksanQuc2VydmVyPW5ldyBqdCgic2VydmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUwIn0pLGp0LnNldHRpbmdzR2Vhcj1uZXcganQoInNldHRpbmdzLWdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNTEifSksanQuc2V0dGluZ3M9bmV3IGp0KCJzZXR0aW5ncyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MiJ9KSxqdC5zaGllbGQ9bmV3IGp0KCJzaGllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNTMifSksanQuc21pbGV5PW5ldyBqdCgic21pbGV5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjU0In0pLGp0LnNvcnRQcmVjZWRlbmNlPW5ldyBqdCgic29ydC1wcmVjZWRlbmNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjU1In0pLGp0LnNwbGl0SG9yaXpvbnRhbD1uZXcganQoInNwbGl0LWhvcml6b250YWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTYifSksanQuc3BsaXRWZXJ0aWNhbD1uZXcganQoInNwbGl0LXZlcnRpY2FsIix7Zm9udENoYXJhY3RlcjoiXFxlYjU3In0pLGp0LnNxdWlycmVsPW5ldyBqdCgic3F1aXJyZWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTgifSksanQuc3RhckZ1bGw9bmV3IGp0KCJzdGFyLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTkifSksanQuc3RhckhhbGY9bmV3IGp0KCJzdGFyLWhhbGYiLHtmb250Q2hhcmFjdGVyOiJcXGViNWEifSksanQuc3ltYm9sQ2xhc3M9bmV3IGp0KCJzeW1ib2wtY2xhc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViNWIifSksanQuc3ltYm9sQ29sb3I9bmV3IGp0KCJzeW1ib2wtY29sb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNWMifSksanQuc3ltYm9sQ3VzdG9tQ29sb3I9bmV3IGp0KCJzeW1ib2wtY3VzdG9tY29sb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNWMifSksanQuc3ltYm9sQ29uc3RhbnQ9bmV3IGp0KCJzeW1ib2wtY29uc3RhbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViNWQifSksanQuc3ltYm9sRW51bU1lbWJlcj1uZXcganQoInN5bWJvbC1lbnVtLW1lbWJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZSJ9KSxqdC5zeW1ib2xGaWVsZD1uZXcganQoInN5bWJvbC1maWVsZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZiJ9KSxqdC5zeW1ib2xGaWxlPW5ldyBqdCgic3ltYm9sLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViNjAifSksanQuc3ltYm9sSW50ZXJmYWNlPW5ldyBqdCgic3ltYm9sLWludGVyZmFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MSJ9KSxqdC5zeW1ib2xLZXl3b3JkPW5ldyBqdCgic3ltYm9sLWtleXdvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViNjIifSksanQuc3ltYm9sTWlzYz1uZXcganQoInN5bWJvbC1taXNjIix7Zm9udENoYXJhY3RlcjoiXFxlYjYzIn0pLGp0LnN5bWJvbE9wZXJhdG9yPW5ldyBqdCgic3ltYm9sLW9wZXJhdG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjY0In0pLGp0LnN5bWJvbFByb3BlcnR5PW5ldyBqdCgic3ltYm9sLXByb3BlcnR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGp0LndyZW5jaD1uZXcganQoIndyZW5jaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NSJ9KSxqdC53cmVuY2hTdWJhY3Rpb249bmV3IGp0KCJ3cmVuY2gtc3ViYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGp0LnN5bWJvbFNuaXBwZXQ9bmV3IGp0KCJzeW1ib2wtc25pcHBldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NiJ9KSxqdC50YXNrbGlzdD1uZXcganQoInRhc2tsaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjY3In0pLGp0LnRlbGVzY29wZT1uZXcganQoInRlbGVzY29wZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2OCJ9KSxqdC50ZXh0U2l6ZT1uZXcganQoInRleHQtc2l6ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2OSJ9KSxqdC50aHJlZUJhcnM9bmV3IGp0KCJ0aHJlZS1iYXJzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZhIn0pLGp0LnRodW1ic2Rvd249bmV3IGp0KCJ0aHVtYnNkb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZiIn0pLGp0LnRodW1ic3VwPW5ldyBqdCgidGh1bWJzdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViNmMifSksanQudG9vbHM9bmV3IGp0KCJ0b29scyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2ZCJ9KSxqdC50cmlhbmdsZURvd249bmV3IGp0KCJ0cmlhbmdsZS1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZlIn0pLGp0LnRyaWFuZ2xlTGVmdD1uZXcganQoInRyaWFuZ2xlLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViNmYifSksanQudHJpYW5nbGVSaWdodD1uZXcganQoInRyaWFuZ2xlLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjcwIn0pLGp0LnRyaWFuZ2xlVXA9bmV3IGp0KCJ0cmlhbmdsZS11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MSJ9KSxqdC50d2l0dGVyPW5ldyBqdCgidHdpdHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MiJ9KSxqdC51bmZvbGQ9bmV3IGp0KCJ1bmZvbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzMifSksanQudW5sb2NrPW5ldyBqdCgidW5sb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYjc0In0pLGp0LnVubXV0ZT1uZXcganQoInVubXV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3NSJ9KSxqdC51bnZlcmlmaWVkPW5ldyBqdCgidW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3NiJ9KSxqdC52ZXJpZmllZD1uZXcganQoInZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc3In0pLGp0LnZlcnNpb25zPW5ldyBqdCgidmVyc2lvbnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNzgifSksanQudm1BY3RpdmU9bmV3IGp0KCJ2bS1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViNzkifSksanQudm1PdXRsaW5lPW5ldyBqdCgidm0tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YSJ9KSxqdC52bVJ1bm5pbmc9bmV3IGp0KCJ2bS1ydW5uaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjdiIn0pLGp0LndhdGNoPW5ldyBqdCgid2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGViN2MifSksanQud2hpdGVzcGFjZT1uZXcganQoIndoaXRlc3BhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViN2QifSksanQud2hvbGVXb3JkPW5ldyBqdCgid2hvbGUtd29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZSJ9KSxqdC53aW5kb3c9bmV3IGp0KCJ3aW5kb3ciLHtmb250Q2hhcmFjdGVyOiJcXGViN2YifSksanQud29yZFdyYXA9bmV3IGp0KCJ3b3JkLXdyYXAiLHtmb250Q2hhcmFjdGVyOiJcXGViODAifSksanQuem9vbUluPW5ldyBqdCgiem9vbS1pbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MSJ9KSxqdC56b29tT3V0PW5ldyBqdCgiem9vbS1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGViODIifSksanQubGlzdEZpbHRlcj1uZXcganQoImxpc3QtZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjgzIn0pLGp0Lmxpc3RGbGF0PW5ldyBqdCgibGlzdC1mbGF0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjg0In0pLGp0Lmxpc3RTZWxlY3Rpb249bmV3IGp0KCJsaXN0LXNlbGVjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NSJ9KSxqdC5zZWxlY3Rpb249bmV3IGp0KCJzZWxlY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViODUifSksanQubGlzdFRyZWU9bmV3IGp0KCJsaXN0LXRyZWUiLHtmb250Q2hhcmFjdGVyOiJcXGViODYifSksanQuZGVidWdCcmVha3BvaW50RnVuY3Rpb25VbnZlcmlmaWVkPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjg3In0pLGp0LmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4OCJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbkRpc2FibGVkPW5ldyBqdCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4OCJ9KSxqdC5kZWJ1Z1N0YWNrZnJhbWVBY3RpdmU9bmV3IGp0KCJkZWJ1Zy1zdGFja2ZyYW1lLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4OSJ9KSxqdC5jaXJjbGVTbWFsbEZpbGxlZD1uZXcganQoImNpcmNsZS1zbWFsbC1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOGEifSksanQuZGVidWdTdGFja2ZyYW1lRG90PW5ldyBqdCgiZGVidWctc3RhY2tmcmFtZS1kb3QiLGp0LmNpcmNsZVNtYWxsRmlsbGVkLmRlZmluaXRpb24pLGp0LmRlYnVnU3RhY2tmcmFtZT1uZXcganQoImRlYnVnLXN0YWNrZnJhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGIifSksanQuZGVidWdTdGFja2ZyYW1lRm9jdXNlZD1uZXcganQoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxqdC5kZWJ1Z0JyZWFrcG9pbnRVbnN1cHBvcnRlZD1uZXcganQoImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOGMifSksanQuc3ltYm9sU3RyaW5nPW5ldyBqdCgic3ltYm9sLXN0cmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZCJ9KSxqdC5kZWJ1Z1JldmVyc2VDb250aW51ZT1uZXcganQoImRlYnVnLXJldmVyc2UtY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGUifSksanQuZGVidWdTdGVwQmFjaz1uZXcganQoImRlYnVnLXN0ZXAtYmFjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZiJ9KSxqdC5kZWJ1Z1Jlc3RhcnRGcmFtZT1uZXcganQoImRlYnVnLXJlc3RhcnQtZnJhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTAifSksanQuY2FsbEluY29taW5nPW5ldyBqdCgiY2FsbC1pbmNvbWluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MiJ9KSxqdC5jYWxsT3V0Z29pbmc9bmV3IGp0KCJjYWxsLW91dGdvaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjkzIn0pLGp0Lm1lbnU9bmV3IGp0KCJtZW51Iix7Zm9udENoYXJhY3RlcjoiXFxlYjk0In0pLGp0LmV4cGFuZEFsbD1uZXcganQoImV4cGFuZC1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOTUifSksanQuZmVlZGJhY2s9bmV3IGp0KCJmZWVkYmFjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NiJ9KSxqdC5ncm91cEJ5UmVmVHlwZT1uZXcganQoImdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk3In0pLGp0LnVuZ3JvdXBCeVJlZlR5cGU9bmV3IGp0KCJ1bmdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk4In0pLGp0LmFjY291bnQ9bmV3IGp0KCJhY2NvdW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYjk5In0pLGp0LmJlbGxEb3Q9bmV3IGp0KCJiZWxsLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YSJ9KSxqdC5kZWJ1Z0NvbnNvbGU9bmV3IGp0KCJkZWJ1Zy1jb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYjliIn0pLGp0LmxpYnJhcnk9bmV3IGp0KCJsaWJyYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjljIn0pLGp0Lm91dHB1dD1uZXcganQoIm91dHB1dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZCJ9KSxqdC5ydW5BbGw9bmV3IGp0KCJydW4tYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjllIn0pLGp0LnN5bmNJZ25vcmVkPW5ldyBqdCgic3luYy1pZ25vcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjlmIn0pLGp0LnBpbm5lZD1uZXcganQoInBpbm5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMCJ9KSxqdC5naXRodWJJbnZlcnRlZD1uZXcganQoImdpdGh1Yi1pbnZlcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMSJ9KSxqdC5kZWJ1Z0FsdD1uZXcganQoImRlYnVnLWFsdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MSJ9KSxqdC5zZXJ2ZXJQcm9jZXNzPW5ldyBqdCgic2VydmVyLXByb2Nlc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViYTIifSksanQuc2VydmVyRW52aXJvbm1lbnQ9bmV3IGp0KCJzZXJ2ZXItZW52aXJvbm1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTMifSksanQucGFzcz1uZXcganQoInBhc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksanQuc3RvcENpcmNsZT1uZXcganQoInN0b3AtY2lyY2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYmE1In0pLGp0LnBsYXlDaXJjbGU9bmV3IGp0KCJwbGF5LWNpcmNsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNiJ9KSxqdC5yZWNvcmQ9bmV3IGp0KCJyZWNvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTcifSksanQuZGVidWdBbHRTbWFsbD1uZXcganQoImRlYnVnLWFsdC1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhOCJ9KSxqdC52bUNvbm5lY3Q9bmV3IGp0KCJ2bS1jb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmE5In0pLGp0LmNsb3VkPW5ldyBqdCgiY2xvdWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWEifSksanQubWVyZ2U9bmV3IGp0KCJtZXJnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhYiJ9KSxqdC5leHBvcnRJY29uPW5ldyBqdCgiZXhwb3J0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFjIn0pLGp0LmdyYXBoTGVmdD1uZXcganQoImdyYXBoLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWQifSksanQubWFnbmV0PW5ldyBqdCgibWFnbmV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFlIn0pLGp0Lm5vdGVib29rPW5ldyBqdCgibm90ZWJvb2siLHtmb250Q2hhcmFjdGVyOiJcXGViYWYifSksanQucmVkbz1uZXcganQoInJlZG8iLHtmb250Q2hhcmFjdGVyOiJcXGViYjAifSksanQuY2hlY2tBbGw9bmV3IGp0KCJjaGVjay1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViYjEifSksanQucGlubmVkRGlydHk9bmV3IGp0KCJwaW5uZWQtZGlydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjIifSksanQucGFzc0ZpbGxlZD1uZXcganQoInBhc3MtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmIzIn0pLGp0LmNpcmNsZUxhcmdlRmlsbGVkPW5ldyBqdCgiY2lyY2xlLWxhcmdlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNCJ9KSxqdC5jaXJjbGVMYXJnZU91dGxpbmU9bmV3IGp0KCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNSJ9KSxqdC5jb21iaW5lPW5ldyBqdCgiY29tYmluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxqdC5nYXRoZXI9bmV3IGp0KCJnYXRoZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViYjYifSksanQudGFibGU9bmV3IGp0KCJ0YWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNyJ9KSxqdC52YXJpYWJsZUdyb3VwPW5ldyBqdCgidmFyaWFibGUtZ3JvdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViYjgifSksanQudHlwZUhpZXJhcmNoeT1uZXcganQoInR5cGUtaGllcmFyY2h5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmI5In0pLGp0LnR5cGVIaWVyYXJjaHlTdWI9bmV3IGp0KCJ0eXBlLWhpZXJhcmNoeS1zdWIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmEifSksanQudHlwZUhpZXJhcmNoeVN1cGVyPW5ldyBqdCgidHlwZS1oaWVyYXJjaHktc3VwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmIifSksanQuZ2l0UHVsbFJlcXVlc3RDcmVhdGU9bmV3IGp0KCJnaXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYyJ9KSxqdC5ydW5BYm92ZT1uZXcganQoInJ1bi1hYm92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZCJ9KSxqdC5ydW5CZWxvdz1uZXcganQoInJ1bi1iZWxvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZSJ9KSxqdC5ub3RlYm9va1RlbXBsYXRlPW5ldyBqdCgibm90ZWJvb2stdGVtcGxhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYmYifSksanQuZGVidWdSZXJ1bj1uZXcganQoImRlYnVnLXJlcnVuIix7Zm9udENoYXJhY3RlcjoiXFxlYmMwIn0pLGp0LndvcmtzcGFjZVRydXN0ZWQ9bmV3IGp0KCJ3b3Jrc3BhY2UtdHJ1c3RlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMSJ9KSxqdC53b3Jrc3BhY2VVbnRydXN0ZWQ9bmV3IGp0KCJ3b3Jrc3BhY2UtdW50cnVzdGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMyIn0pLGp0LndvcmtzcGFjZVVuc3BlY2lmaWVkPW5ldyBqdCgid29ya3NwYWNlLXVuc3BlY2lmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMzIn0pLGp0LnRlcm1pbmFsQ21kPW5ldyBqdCgidGVybWluYWwtY21kIix7Zm9udENoYXJhY3RlcjoiXFxlYmM0In0pLGp0LnRlcm1pbmFsRGViaWFuPW5ldyBqdCgidGVybWluYWwtZGViaWFuIix7Zm9udENoYXJhY3RlcjoiXFxlYmM1In0pLGp0LnRlcm1pbmFsTGludXg9bmV3IGp0KCJ0ZXJtaW5hbC1saW51eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNiJ9KSxqdC50ZXJtaW5hbFBvd2Vyc2hlbGw9bmV3IGp0KCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmM3In0pLGp0LnRlcm1pbmFsVG11eD1uZXcganQoInRlcm1pbmFsLXRtdXgiLHtmb250Q2hhcmFjdGVyOiJcXGViYzgifSksanQudGVybWluYWxVYnVudHU9bmV3IGp0KCJ0ZXJtaW5hbC11YnVudHUiLHtmb250Q2hhcmFjdGVyOiJcXGViYzkifSksanQudGVybWluYWxCYXNoPW5ldyBqdCgidGVybWluYWwtYmFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjYSJ9KSxqdC5hcnJvd1N3YXA9bmV3IGp0KCJhcnJvdy1zd2FwIix7Zm9udENoYXJhY3RlcjoiXFxlYmNiIn0pLGp0LmNvcHk9bmV3IGp0KCJjb3B5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmNjIn0pLGp0LnBlcnNvbkFkZD1uZXcganQoInBlcnNvbi1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGViY2QifSksanQuZmlsdGVyRmlsbGVkPW5ldyBqdCgiZmlsdGVyLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZSJ9KSxqdC53YW5kPW5ldyBqdCgid2FuZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZiJ9KSxqdC5kZWJ1Z0xpbmVCeUxpbmU9bmV3IGp0KCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDAifSksanQuaW5zcGVjdD1uZXcganQoImluc3BlY3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDEifSksanQubGF5ZXJzPW5ldyBqdCgibGF5ZXJzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQyIn0pLGp0LmxheWVyc0RvdD1uZXcganQoImxheWVycy1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDMifSksanQubGF5ZXJzQWN0aXZlPW5ldyBqdCgibGF5ZXJzLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNCJ9KSxqdC5jb21wYXNzPW5ldyBqdCgiY29tcGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNSJ9KSxqdC5jb21wYXNzRG90PW5ldyBqdCgiY29tcGFzcy1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDYifSksanQuY29tcGFzc0FjdGl2ZT1uZXcganQoImNvbXBhc3MtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ3In0pLGp0LmF6dXJlPW5ldyBqdCgiYXp1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDgifSksanQuaXNzdWVEcmFmdD1uZXcganQoImlzc3VlLWRyYWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQ5In0pLGp0LmdpdFB1bGxSZXF1ZXN0Q2xvc2VkPW5ldyBqdCgiZ2l0LXB1bGwtcmVxdWVzdC1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGEifSksanQuZ2l0UHVsbFJlcXVlc3REcmFmdD1uZXcganQoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGIifSksanQuZGVidWdBbGw9bmV3IGp0KCJkZWJ1Zy1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZGMifSksanQuZGVidWdDb3ZlcmFnZT1uZXcganQoImRlYnVnLWNvdmVyYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmRkIn0pLGp0LnJ1bkVycm9ycz1uZXcganQoInJ1bi1lcnJvcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZGUifSksanQuZm9sZGVyTGlicmFyeT1uZXcganQoImZvbGRlci1saWJyYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmRmIn0pLGp0LmRlYnVnQ29udGludWVTbWFsbD1uZXcganQoImRlYnVnLWNvbnRpbnVlLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmUwIn0pLGp0LmJlYWtlclN0b3A9bmV3IGp0KCJiZWFrZXItc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMSJ9KSxqdC5ncmFwaExpbmU9bmV3IGp0KCJncmFwaC1saW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmUyIn0pLGp0LmdyYXBoU2NhdHRlcj1uZXcganQoImdyYXBoLXNjYXR0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZTMifSksanQucGllQ2hhcnQ9bmV3IGp0KCJwaWUtY2hhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZTQifSksanQuYnJhY2tldD1uZXcganQoImJyYWNrZXQiLGp0Lmpzb24uZGVmaW5pdGlvbiksanQuYnJhY2tldERvdD1uZXcganQoImJyYWNrZXQtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmU1In0pLGp0LmJyYWNrZXRFcnJvcj1uZXcganQoImJyYWNrZXQtZXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViZTYifSksanQubG9ja1NtYWxsPW5ldyBqdCgibG9jay1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNyJ9KSxqdC5henVyZURldm9wcz1uZXcganQoImF6dXJlLWRldm9wcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlOCJ9KSxqdC52ZXJpZmllZEZpbGxlZD1uZXcganQoInZlcmlmaWVkLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlOSJ9KSxqdC5uZXdMaW5lPW5ldyBqdCgibmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYSJ9KSxqdC5sYXlvdXQ9bmV3IGp0KCJsYXlvdXQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWIifSksanQubGF5b3V0QWN0aXZpdHliYXJMZWZ0PW5ldyBqdCgibGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWMifSksanQubGF5b3V0QWN0aXZpdHliYXJSaWdodD1uZXcganQoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZCJ9KSxqdC5sYXlvdXRQYW5lbExlZnQ9bmV3IGp0KCJsYXlvdXQtcGFuZWwtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZSJ9KSxqdC5sYXlvdXRQYW5lbENlbnRlcj1uZXcganQoImxheW91dC1wYW5lbC1jZW50ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZWYifSksanQubGF5b3V0UGFuZWxKdXN0aWZ5PW5ldyBqdCgibGF5b3V0LXBhbmVsLWp1c3RpZnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZjAifSksanQubGF5b3V0UGFuZWxSaWdodD1uZXcganQoImxheW91dC1wYW5lbC1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMSJ9KSxqdC5sYXlvdXRQYW5lbD1uZXcganQoImxheW91dC1wYW5lbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMiJ9KSxqdC5sYXlvdXRTaWRlYmFyTGVmdD1uZXcganQoImxheW91dC1zaWRlYmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjMifSksanQubGF5b3V0U2lkZWJhclJpZ2h0PW5ldyBqdCgibGF5b3V0LXNpZGViYXItcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjQifSksanQubGF5b3V0U3RhdHVzYmFyPW5ldyBqdCgibGF5b3V0LXN0YXR1c2JhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNSJ9KSxqdC5sYXlvdXRNZW51YmFyPW5ldyBqdCgibGF5b3V0LW1lbnViYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZjYifSksanQubGF5b3V0Q2VudGVyZWQ9bmV3IGp0KCJsYXlvdXQtY2VudGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjcifSksanQubGF5b3V0U2lkZWJhclJpZ2h0T2ZmPW5ldyBqdCgibGF5b3V0LXNpZGViYXItcmlnaHQtb2ZmIix7Zm9udENoYXJhY3RlcjoiXFxlYzAwIn0pLGp0LmxheW91dFBhbmVsT2ZmPW5ldyBqdCgibGF5b3V0LXBhbmVsLW9mZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwMSJ9KSxqdC5sYXlvdXRTaWRlYmFyTGVmdE9mZj1uZXcganQoImxheW91dC1zaWRlYmFyLWxlZnQtb2ZmIix7Zm9udENoYXJhY3RlcjoiXFxlYzAyIn0pLGp0LnRhcmdldD1uZXcganQoInRhcmdldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmOCJ9KSxqdC5pbmRlbnQ9bmV3IGp0KCJpbmRlbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjkifSksanQucmVjb3JkU21hbGw9bmV3IGp0KCJyZWNvcmQtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZmEifSksanQuZXJyb3JTbWFsbD1uZXcganQoImVycm9yLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmZiIn0pLGp0LmFycm93Q2lyY2xlRG93bj1uZXcganQoImFycm93LWNpcmNsZS1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYmZjIn0pLGp0LmFycm93Q2lyY2xlTGVmdD1uZXcganQoImFycm93LWNpcmNsZS1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmZkIn0pLGp0LmFycm93Q2lyY2xlUmlnaHQ9bmV3IGp0KCJhcnJvdy1jaXJjbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZmUifSksanQuYXJyb3dDaXJjbGVVcD1uZXcganQoImFycm93LWNpcmNsZS11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmZiJ9KSxqdC5oZWFydEZpbGxlZD1uZXcganQoImhlYXJ0LWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwNCJ9KSxqdC5tYXA9bmV3IGp0KCJtYXAiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDUifSksanQubWFwRmlsbGVkPW5ldyBqdCgibWFwLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwNiJ9KSxqdC5jaXJjbGVTbWFsbD1uZXcganQoImNpcmNsZS1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwNyJ9KSxqdC5iZWxsU2xhc2g9bmV3IGp0KCJiZWxsLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYzA4In0pLGp0LmJlbGxTbGFzaERvdD1uZXcganQoImJlbGwtc2xhc2gtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYzA5In0pLGp0LmNvbW1lbnRVbnJlc29sdmVkPW5ldyBqdCgiY29tbWVudC11bnJlc29sdmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYzBhIn0pLGp0LmdpdFB1bGxSZXF1ZXN0R29Ub0NoYW5nZXM9bmV3IGp0KCJnaXQtcHVsbC1yZXF1ZXN0LWdvLXRvLWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVjMGIifSksanQuZ2l0UHVsbFJlcXVlc3ROZXdDaGFuZ2VzPW5ldyBqdCgiZ2l0LXB1bGwtcmVxdWVzdC1uZXctY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwYyJ9KSxqdC5kaWFsb2dFcnJvcj1uZXcganQoImRpYWxvZy1lcnJvciIsanQuZXJyb3IuZGVmaW5pdGlvbiksanQuZGlhbG9nV2FybmluZz1uZXcganQoImRpYWxvZy13YXJuaW5nIixqdC53YXJuaW5nLmRlZmluaXRpb24pLGp0LmRpYWxvZ0luZm89bmV3IGp0KCJkaWFsb2ctaW5mbyIsanQuaW5mby5kZWZpbml0aW9uKSxqdC5kaWFsb2dDbG9zZT1uZXcganQoImRpYWxvZy1jbG9zZSIsanQuY2xvc2UuZGVmaW5pdGlvbiksanQudHJlZUl0ZW1FeHBhbmRlZD1uZXcganQoInRyZWUtaXRlbS1leHBhbmRlZCIsanQuY2hldnJvbkRvd24uZGVmaW5pdGlvbiksanQudHJlZUZpbHRlck9uVHlwZU9uPW5ldyBqdCgidHJlZS1maWx0ZXItb24tdHlwZS1vbiIsanQubGlzdEZpbHRlci5kZWZpbml0aW9uKSxqdC50cmVlRmlsdGVyT25UeXBlT2ZmPW5ldyBqdCgidHJlZS1maWx0ZXItb24tdHlwZS1vZmYiLGp0Lmxpc3RTZWxlY3Rpb24uZGVmaW5pdGlvbiksanQudHJlZUZpbHRlckNsZWFyPW5ldyBqdCgidHJlZS1maWx0ZXItY2xlYXIiLGp0LmNsb3NlLmRlZmluaXRpb24pLGp0LnRyZWVJdGVtTG9hZGluZz1uZXcganQoInRyZWUtaXRlbS1sb2FkaW5nIixqdC5sb2FkaW5nLmRlZmluaXRpb24pLGp0Lm1lbnVTZWxlY3Rpb249bmV3IGp0KCJtZW51LXNlbGVjdGlvbiIsanQuY2hlY2suZGVmaW5pdGlvbiksanQubWVudVN1Ym1lbnU9bmV3IGp0KCJtZW51LXN1Ym1lbnUiLGp0LmNoZXZyb25SaWdodC5kZWZpbml0aW9uKSxqdC5tZW51QmFyTW9yZT1uZXcganQoIm1lbnViYXItbW9yZSIsanQubW9yZS5kZWZpbml0aW9uKSxqdC5zY3JvbGxiYXJCdXR0b25MZWZ0PW5ldyBqdCgic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IixqdC50cmlhbmdsZUxlZnQuZGVmaW5pdGlvbiksanQuc2Nyb2xsYmFyQnV0dG9uUmlnaHQ9bmV3IGp0KCJzY3JvbGxiYXItYnV0dG9uLXJpZ2h0IixqdC50cmlhbmdsZVJpZ2h0LmRlZmluaXRpb24pLGp0LnNjcm9sbGJhckJ1dHRvblVwPW5ldyBqdCgic2Nyb2xsYmFyLWJ1dHRvbi11cCIsanQudHJpYW5nbGVVcC5kZWZpbml0aW9uKSxqdC5zY3JvbGxiYXJCdXR0b25Eb3duPW5ldyBqdCgic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIixqdC50cmlhbmdsZURvd24uZGVmaW5pdGlvbiksanQudG9vbEJhck1vcmU9bmV3IGp0KCJ0b29sYmFyLW1vcmUiLGp0Lm1vcmUuZGVmaW5pdGlvbiksanQucXVpY2tJbnB1dEJhY2s9bmV3IGp0KCJxdWljay1pbnB1dC1iYWNrIixqdC5hcnJvd0xlZnQuZGVmaW5pdGlvbiksZnVuY3Rpb24oZSl7ZS5pY29uTmFtZVNlZ21lbnQ9IltBLVphLXowLTldKyIsZS5pY29uTmFtZUV4cHJlc3Npb249IltBLVphLXowLTktXSsiLGUuaWNvbk1vZGlmaWVyRXhwcmVzc2lvbj0ifltBLVphLXpdKyIsZS5pY29uTmFtZUNoYXJhY3Rlcj0iW0EtWmEtejAtOX4tXSI7Y29uc3QgdD1uZXcgUmVnRXhwKGBeKCR7ZS5pY29uTmFtZUV4cHJlc3Npb259KSgke2UuaWNvbk1vZGlmaWVyRXhwcmVzc2lvbn0pPyRgKTtmdW5jdGlvbiBuKGUpe2lmKGUgaW5zdGFuY2VvZiBqdClyZXR1cm5bImNvZGljb24iLCJjb2RpY29uLSIrZS5pZF07Y29uc3Qgcj10LmV4ZWMoZS5pZCk7aWYoIXIpcmV0dXJuIG4oanQuZXJyb3IpO2NvbnN0WyxpLG9dPXIsYT1bImNvZGljb24iLCJjb2RpY29uLSIraV07cmV0dXJuIG8mJmEucHVzaCgiY29kaWNvbi1tb2RpZmllci0iK28uc3Vic3RyKDEpKSxhfWUuYXNDbGFzc05hbWVBcnJheT1uLGUuYXNDbGFzc05hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSkuam9pbigiICIpfSxlLmFzQ1NTU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIi4iK24oZSkuam9pbigiLiIpfX0oRHR8fChEdD17fSkpO3ZhciBVdCxCdCxxdCwkdCxXdCxIdCx6dCxHdCxKdCxYdCxadCxZdCxRdCxlbix0bixubixybixvbixhbixzbixjbixsbix1bixobixmbixkbixtbixnbixwbixibix2bix5bixDbix3bixfbixTbixBbixFbix4bixObixrbixMbixUbixPbixJbixNbixQbixSbixWbj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07Y2xhc3MgRm4gZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX2ZhY3Rvcnk9bix0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1nZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkPSEwLHN1cGVyLmRpc3Bvc2UoKX1yZXNvbHZlKCl7cmV0dXJuIFZuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVQcm9taXNlfHwodGhpcy5fcmVzb2x2ZVByb21pc2U9dGhpcy5fY3JlYXRlKCkpLHRoaXMuX3Jlc29sdmVQcm9taXNlfSkpfV9jcmVhdGUoKXtyZXR1cm4gVm4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIFByb21pc2UucmVzb2x2ZSh0aGlzLl9mYWN0b3J5LmNyZWF0ZVRva2VuaXphdGlvblN1cHBvcnQoKSk7dGhpcy5faXNSZXNvbHZlZD0hMCxlJiYhdGhpcy5faXNEaXNwb3NlZCYmdGhpcy5fcmVnaXN0ZXIodGhpcy5fcmVnaXN0cnkucmVnaXN0ZXIodGhpcy5fbGFuZ3VhZ2VJZCxlKSl9KSl9fWNsYXNzIERue2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLl90b2tlbkJyYW5kPXZvaWQgMCx0aGlzLm9mZnNldD1lLHRoaXMudHlwZT10LHRoaXMubGFuZ3VhZ2U9bn10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fSFmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxqdC5zeW1ib2xNZXRob2QpLHQuc2V0KDEsanQuc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDIsanQuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMsanQuc3ltYm9sRmllbGQpLHQuc2V0KDQsanQuc3ltYm9sVmFyaWFibGUpLHQuc2V0KDUsanQuc3ltYm9sQ2xhc3MpLHQuc2V0KDYsanQuc3ltYm9sU3RydWN0KSx0LnNldCg3LGp0LnN5bWJvbEludGVyZmFjZSksdC5zZXQoOCxqdC5zeW1ib2xNb2R1bGUpLHQuc2V0KDksanQuc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLGp0LnN5bWJvbEV2ZW50KSx0LnNldCgxMSxqdC5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIsanQuc3ltYm9sVW5pdCksdC5zZXQoMTMsanQuc3ltYm9sVmFsdWUpLHQuc2V0KDE1LGp0LnN5bWJvbEVudW0pLHQuc2V0KDE0LGp0LnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSxqdC5zeW1ib2xFbnVtKSx0LnNldCgxNixqdC5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyxqdC5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyxqdC5zeW1ib2xTbmlwcGV0KSx0LnNldCgxOCxqdC5zeW1ib2xUZXh0KSx0LnNldCgxOSxqdC5zeW1ib2xDb2xvciksdC5zZXQoMjAsanQuc3ltYm9sRmlsZSksdC5zZXQoMjEsanQuc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMixqdC5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsanQuc3ltYm9sRm9sZGVyKSx0LnNldCgyNCxqdC5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSxqdC5hY2NvdW50KSx0LnNldCgyNixqdC5pc3N1ZXMpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitlKSxuPWp0LnN5bWJvbFByb3BlcnR5KSxufTtjb25zdCBuPW5ldyBNYXA7bi5zZXQoIm1ldGhvZCIsMCksbi5zZXQoImZ1bmN0aW9uIiwxKSxuLnNldCgiY29uc3RydWN0b3IiLDIpLG4uc2V0KCJmaWVsZCIsMyksbi5zZXQoInZhcmlhYmxlIiw0KSxuLnNldCgiY2xhc3MiLDUpLG4uc2V0KCJzdHJ1Y3QiLDYpLG4uc2V0KCJpbnRlcmZhY2UiLDcpLG4uc2V0KCJtb2R1bGUiLDgpLG4uc2V0KCJwcm9wZXJ0eSIsOSksbi5zZXQoImV2ZW50IiwxMCksbi5zZXQoIm9wZXJhdG9yIiwxMSksbi5zZXQoInVuaXQiLDEyKSxuLnNldCgidmFsdWUiLDEzKSxuLnNldCgiY29uc3RhbnQiLDE0KSxuLnNldCgiZW51bSIsMTUpLG4uc2V0KCJlbnVtLW1lbWJlciIsMTYpLG4uc2V0KCJlbnVtTWVtYmVyIiwxNiksbi5zZXQoImtleXdvcmQiLDE3KSxuLnNldCgic25pcHBldCIsMjcpLG4uc2V0KCJ0ZXh0IiwxOCksbi5zZXQoImNvbG9yIiwxOSksbi5zZXQoImZpbGUiLDIwKSxuLnNldCgicmVmZXJlbmNlIiwyMSksbi5zZXQoImN1c3RvbWNvbG9yIiwyMiksbi5zZXQoImZvbGRlciIsMjMpLG4uc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLG4uc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCksbi5zZXQoImFjY291bnQiLDI1KSxuLnNldCgiaXNzdWUiLDI2KSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXtsZXQgcj1uLmdldChlKTtyZXR1cm4gdm9pZCAwIT09cnx8dHx8KHI9OSkscn19KFV0fHwoVXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifShCdHx8KEJ0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifShxdHx8KHF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0oJHR8fCgkdD17fSkpLGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLGp0LnN5bWJvbEZpbGUpLHQuc2V0KDEsanQuc3ltYm9sTW9kdWxlKSx0LnNldCgyLGp0LnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyxqdC5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LGp0LnN5bWJvbENsYXNzKSx0LnNldCg1LGp0LnN5bWJvbE1ldGhvZCksdC5zZXQoNixqdC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyxqdC5zeW1ib2xGaWVsZCksdC5zZXQoOCxqdC5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSxqdC5zeW1ib2xFbnVtKSx0LnNldCgxMCxqdC5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDExLGp0LnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMixqdC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsanQuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE0LGp0LnN5bWJvbFN0cmluZyksdC5zZXQoMTUsanQuc3ltYm9sTnVtYmVyKSx0LnNldCgxNixqdC5zeW1ib2xCb29sZWFuKSx0LnNldCgxNyxqdC5zeW1ib2xBcnJheSksdC5zZXQoMTgsanQuc3ltYm9sT2JqZWN0KSx0LnNldCgxOSxqdC5zeW1ib2xLZXkpLHQuc2V0KDIwLGp0LnN5bWJvbE51bGwpLHQuc2V0KDIxLGp0LnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLGp0LnN5bWJvbFN0cnVjdCksdC5zZXQoMjMsanQuc3ltYm9sRXZlbnQpLHQuc2V0KDI0LGp0LnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSxqdC5zeW1ib2xUeXBlUGFyYW1ldGVyKSxlLnRvSWNvbj1mdW5jdGlvbihlKXtsZXQgbj10LmdldChlKTtyZXR1cm4gbnx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK2UpLG49anQuc3ltYm9sUHJvcGVydHkpLG59fShXdHx8KFd0PXt9KSksZnVuY3Rpb24oZSl7ZS5pcz1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpJiYoInN0cmluZyI9PXR5cGVvZiBlLmlkJiYic3RyaW5nIj09dHlwZW9mIGUudGl0bGUpfX0oSHR8fChIdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSh6dHx8KHp0PXt9KSksbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXAsdGhpcy5fZmFjdG9yaWVzPW5ldyBNYXAsdGhpcy5fb25EaWRDaGFuZ2U9bmV3IEIsdGhpcy5vbkRpZENoYW5nZT10aGlzLl9vbkRpZENoYW5nZS5ldmVudCx0aGlzLl9jb2xvck1hcD1udWxsfWZpcmUoZSl7dGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczplLGNoYW5nZWRDb2xvck1hcDohMX0pfXJlZ2lzdGVyKGUsdCl7cmV0dXJuIHRoaXMuX21hcC5zZXQoZSx0KSx0aGlzLmZpcmUoW2VdKSx1KCgoKT0+e3RoaXMuX21hcC5nZXQoZSk9PT10JiYodGhpcy5fbWFwLmRlbGV0ZShlKSx0aGlzLmZpcmUoW2VdKSl9KSl9cmVnaXN0ZXJGYWN0b3J5KGUsdCl7dmFyIG47bnVsbD09PShuPXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSkpfHx2b2lkIDA9PT1ufHxuLmRpc3Bvc2UoKTtjb25zdCByPW5ldyBGbih0aGlzLGUsdCk7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQoZSxyKSx1KCgoKT0+e2NvbnN0IHQ9dGhpcy5fZmFjdG9yaWVzLmdldChlKTt0JiZ0PT09ciYmKHRoaXMuX2ZhY3Rvcmllcy5kZWxldGUoZSksdC5kaXNwb3NlKCkpfSkpfWdldE9yQ3JlYXRlKGUpe3JldHVybiBWbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9dGhpcy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBuPXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7cmV0dXJuIW58fG4uaXNSZXNvbHZlZD9udWxsOih5aWVsZCBuLnJlc29sdmUoKSx0aGlzLmdldChlKSl9KSl9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUpfHxudWxsfWlzUmVzb2x2ZWQoZSl7aWYodGhpcy5nZXQoZSkpcmV0dXJuITA7Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiEodCYmIXQuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAoZSl7dGhpcy5fY29sb3JNYXA9ZSx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fbWFwLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJnRoaXMuX2NvbG9yTWFwLmxlbmd0aD4yP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fSxmdW5jdGlvbihlKXtlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkRpc2FibGVkPTFdPSJEaXNhYmxlZCIsZVtlLkVuYWJsZWQ9Ml09IkVuYWJsZWQifShHdHx8KEd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuQXV0bz0yXT0iQXV0byJ9KEp0fHwoSnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifShYdHx8KFh0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KFp0fHwoWnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KFl0fHwoWXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KFF0fHwoUXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRVhBQ1Q9MF09IkVYQUNUIixlW2UuQUJPVkU9MV09IkFCT1ZFIixlW2UuQkVMT1c9Ml09IkJFTE9XIn0oZW58fChlbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob3RTZXQ9MF09Ik5vdFNldCIsZVtlLkNvbnRlbnRGbHVzaD0xXT0iQ29udGVudEZsdXNoIixlW2UuUmVjb3ZlckZyb21NYXJrZXJzPTJdPSJSZWNvdmVyRnJvbU1hcmtlcnMiLGVbZS5FeHBsaWNpdD0zXT0iRXhwbGljaXQiLGVbZS5QYXN0ZT00XT0iUGFzdGUiLGVbZS5VbmRvPTVdPSJVbmRvIixlW2UuUmVkbz02XT0iUmVkbyJ9KHRufHwodG49e30pKSxmdW5jdGlvbihlKXtlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KG5ufHwobm49e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifShybnx8KHJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwPTFdPSJLZWVwIixlW2UuQnJhY2tldHM9Ml09IkJyYWNrZXRzIixlW2UuQWR2YW5jZWQ9M109IkFkdmFuY2VkIixlW2UuRnVsbD00XT0iRnVsbCJ9KG9ufHwob249e30pKSxmdW5jdGlvbihlKXtlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyPTBdPSJhY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXIiLGVbZS5hY2NlcHRTdWdnZXN0aW9uT25FbnRlcj0xXT0iYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXIiLGVbZS5hY2Nlc3NpYmlsaXR5U3VwcG9ydD0yXT0iYWNjZXNzaWJpbGl0eVN1cHBvcnQiLGVbZS5hY2Nlc3NpYmlsaXR5UGFnZVNpemU9M109ImFjY2Vzc2liaWxpdHlQYWdlU2l6ZSIsZVtlLmFyaWFMYWJlbD00XT0iYXJpYUxhYmVsIixlW2UuYXV0b0Nsb3NpbmdCcmFja2V0cz01XT0iYXV0b0Nsb3NpbmdCcmFja2V0cyIsZVtlLmF1dG9DbG9zaW5nRGVsZXRlPTZdPSJhdXRvQ2xvc2luZ0RlbGV0ZSIsZVtlLmF1dG9DbG9zaW5nT3ZlcnR5cGU9N109ImF1dG9DbG9zaW5nT3ZlcnR5cGUiLGVbZS5hdXRvQ2xvc2luZ1F1b3Rlcz04XT0iYXV0b0Nsb3NpbmdRdW90ZXMiLGVbZS5hdXRvSW5kZW50PTldPSJhdXRvSW5kZW50IixlW2UuYXV0b21hdGljTGF5b3V0PTEwXT0iYXV0b21hdGljTGF5b3V0IixlW2UuYXV0b1N1cnJvdW5kPTExXT0iYXV0b1N1cnJvdW5kIixlW2UuYnJhY2tldFBhaXJDb2xvcml6YXRpb249MTJdPSJicmFja2V0UGFpckNvbG9yaXphdGlvbiIsZVtlLmd1aWRlcz0xM109Imd1aWRlcyIsZVtlLmNvZGVMZW5zPTE0XT0iY29kZUxlbnMiLGVbZS5jb2RlTGVuc0ZvbnRGYW1pbHk9MTVdPSJjb2RlTGVuc0ZvbnRGYW1pbHkiLGVbZS5jb2RlTGVuc0ZvbnRTaXplPTE2XT0iY29kZUxlbnNGb250U2l6ZSIsZVtlLmNvbG9yRGVjb3JhdG9ycz0xN109ImNvbG9yRGVjb3JhdG9ycyIsZVtlLmNvbHVtblNlbGVjdGlvbj0xOF09ImNvbHVtblNlbGVjdGlvbiIsZVtlLmNvbW1lbnRzPTE5XT0iY29tbWVudHMiLGVbZS5jb250ZXh0bWVudT0yMF09ImNvbnRleHRtZW51IixlW2UuY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmc9MjFdPSJjb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZyIsZVtlLmN1cnNvckJsaW5raW5nPTIyXT0iY3Vyc29yQmxpbmtpbmciLGVbZS5jdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbj0yM109ImN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uIixlW2UuY3Vyc29yU3R5bGU9MjRdPSJjdXJzb3JTdHlsZSIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXM9MjVdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlPTI2XT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlIixlW2UuY3Vyc29yV2lkdGg9MjddPSJjdXJzb3JXaWR0aCIsZVtlLmRpc2FibGVMYXllckhpbnRpbmc9MjhdPSJkaXNhYmxlTGF5ZXJIaW50aW5nIixlW2UuZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnM9MjldPSJkaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucyIsZVtlLmRvbVJlYWRPbmx5PTMwXT0iZG9tUmVhZE9ubHkiLGVbZS5kcmFnQW5kRHJvcD0zMV09ImRyYWdBbmREcm9wIixlW2UuZHJvcEludG9FZGl0b3I9MzJdPSJkcm9wSW50b0VkaXRvciIsZVtlLmVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkPTMzXT0iZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5leHBlcmltZW50YWw9MzRdPSJleHBlcmltZW50YWwiLGVbZS5leHRyYUVkaXRvckNsYXNzTmFtZT0zNV09ImV4dHJhRWRpdG9yQ2xhc3NOYW1lIixlW2UuZmFzdFNjcm9sbFNlbnNpdGl2aXR5PTM2XT0iZmFzdFNjcm9sbFNlbnNpdGl2aXR5IixlW2UuZmluZD0zN109ImZpbmQiLGVbZS5maXhlZE92ZXJmbG93V2lkZ2V0cz0zOF09ImZpeGVkT3ZlcmZsb3dXaWRnZXRzIixlW2UuZm9sZGluZz0zOV09ImZvbGRpbmciLGVbZS5mb2xkaW5nU3RyYXRlZ3k9NDBdPSJmb2xkaW5nU3RyYXRlZ3kiLGVbZS5mb2xkaW5nSGlnaGxpZ2h0PTQxXT0iZm9sZGluZ0hpZ2hsaWdodCIsZVtlLmZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0PTQyXT0iZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQiLGVbZS5mb2xkaW5nTWF4aW11bVJlZ2lvbnM9NDNdPSJmb2xkaW5nTWF4aW11bVJlZ2lvbnMiLGVbZS51bmZvbGRPbkNsaWNrQWZ0ZXJFbmRPZkxpbmU9NDRdPSJ1bmZvbGRPbkNsaWNrQWZ0ZXJFbmRPZkxpbmUiLGVbZS5mb250RmFtaWx5PTQ1XT0iZm9udEZhbWlseSIsZVtlLmZvbnRJbmZvPTQ2XT0iZm9udEluZm8iLGVbZS5mb250TGlnYXR1cmVzPTQ3XT0iZm9udExpZ2F0dXJlcyIsZVtlLmZvbnRTaXplPTQ4XT0iZm9udFNpemUiLGVbZS5mb250V2VpZ2h0PTQ5XT0iZm9udFdlaWdodCIsZVtlLmZvcm1hdE9uUGFzdGU9NTBdPSJmb3JtYXRPblBhc3RlIixlW2UuZm9ybWF0T25UeXBlPTUxXT0iZm9ybWF0T25UeXBlIixlW2UuZ2x5cGhNYXJnaW49NTJdPSJnbHlwaE1hcmdpbiIsZVtlLmdvdG9Mb2NhdGlvbj01M109ImdvdG9Mb2NhdGlvbiIsZVtlLmhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXI9NTRdPSJoaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyIixlW2UuaG92ZXI9NTVdPSJob3ZlciIsZVtlLmluRGlmZkVkaXRvcj01Nl09ImluRGlmZkVkaXRvciIsZVtlLmlubGluZVN1Z2dlc3Q9NTddPSJpbmxpbmVTdWdnZXN0IixlW2UubGV0dGVyU3BhY2luZz01OF09ImxldHRlclNwYWNpbmciLGVbZS5saWdodGJ1bGI9NTldPSJsaWdodGJ1bGIiLGVbZS5saW5lRGVjb3JhdGlvbnNXaWR0aD02MF09ImxpbmVEZWNvcmF0aW9uc1dpZHRoIixlW2UubGluZUhlaWdodD02MV09ImxpbmVIZWlnaHQiLGVbZS5saW5lTnVtYmVycz02Ml09ImxpbmVOdW1iZXJzIixlW2UubGluZU51bWJlcnNNaW5DaGFycz02M109ImxpbmVOdW1iZXJzTWluQ2hhcnMiLGVbZS5saW5rZWRFZGl0aW5nPTY0XT0ibGlua2VkRWRpdGluZyIsZVtlLmxpbmtzPTY1XT0ibGlua3MiLGVbZS5tYXRjaEJyYWNrZXRzPTY2XT0ibWF0Y2hCcmFja2V0cyIsZVtlLm1pbmltYXA9NjddPSJtaW5pbWFwIixlW2UubW91c2VTdHlsZT02OF09Im1vdXNlU3R5bGUiLGVbZS5tb3VzZVdoZWVsU2Nyb2xsU2Vuc2l0aXZpdHk9NjldPSJtb3VzZVdoZWVsU2Nyb2xsU2Vuc2l0aXZpdHkiLGVbZS5tb3VzZVdoZWVsWm9vbT03MF09Im1vdXNlV2hlZWxab29tIixlW2UubXVsdGlDdXJzb3JNZXJnZU92ZXJsYXBwaW5nPTcxXT0ibXVsdGlDdXJzb3JNZXJnZU92ZXJsYXBwaW5nIixlW2UubXVsdGlDdXJzb3JNb2RpZmllcj03Ml09Im11bHRpQ3Vyc29yTW9kaWZpZXIiLGVbZS5tdWx0aUN1cnNvclBhc3RlPTczXT0ibXVsdGlDdXJzb3JQYXN0ZSIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTc0XT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTc1XT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz03Nl09Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9NzddPSJwYWRkaW5nIixlW2UucGFyYW1ldGVySGludHM9NzhdPSJwYXJhbWV0ZXJIaW50cyIsZVtlLnBlZWtXaWRnZXREZWZhdWx0Rm9jdXM9NzldPSJwZWVrV2lkZ2V0RGVmYXVsdEZvY3VzIixlW2UuZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlaz04MF09ImRlZmluaXRpb25MaW5rT3BlbnNJblBlZWsiLGVbZS5xdWlja1N1Z2dlc3Rpb25zPTgxXT0icXVpY2tTdWdnZXN0aW9ucyIsZVtlLnF1aWNrU3VnZ2VzdGlvbnNEZWxheT04Ml09InF1aWNrU3VnZ2VzdGlvbnNEZWxheSIsZVtlLnJlYWRPbmx5PTgzXT0icmVhZE9ubHkiLGVbZS5yZW5hbWVPblR5cGU9ODRdPSJyZW5hbWVPblR5cGUiLGVbZS5yZW5kZXJDb250cm9sQ2hhcmFjdGVycz04NV09InJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzIixlW2UucmVuZGVyRmluYWxOZXdsaW5lPTg2XT0icmVuZGVyRmluYWxOZXdsaW5lIixlW2UucmVuZGVyTGluZUhpZ2hsaWdodD04N109InJlbmRlckxpbmVIaWdobGlnaHQiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cz04OF09InJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzIixlW2UucmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zPTg5XT0icmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zIixlW2UucmVuZGVyV2hpdGVzcGFjZT05MF09InJlbmRlcldoaXRlc3BhY2UiLGVbZS5yZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nPTkxXT0icmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZyIsZVtlLnJvdW5kZWRTZWxlY3Rpb249OTJdPSJyb3VuZGVkU2VsZWN0aW9uIixlW2UucnVsZXJzPTkzXT0icnVsZXJzIixlW2Uuc2Nyb2xsYmFyPTk0XT0ic2Nyb2xsYmFyIixlW2Uuc2Nyb2xsQmV5b25kTGFzdENvbHVtbj05NV09InNjcm9sbEJleW9uZExhc3RDb2x1bW4iLGVbZS5zY3JvbGxCZXlvbmRMYXN0TGluZT05Nl09InNjcm9sbEJleW9uZExhc3RMaW5lIixlW2Uuc2Nyb2xsUHJlZG9taW5hbnRBeGlzPTk3XT0ic2Nyb2xsUHJlZG9taW5hbnRBeGlzIixlW2Uuc2VsZWN0aW9uQ2xpcGJvYXJkPTk4XT0ic2VsZWN0aW9uQ2xpcGJvYXJkIixlW2Uuc2VsZWN0aW9uSGlnaGxpZ2h0PTk5XT0ic2VsZWN0aW9uSGlnaGxpZ2h0IixlW2Uuc2VsZWN0T25MaW5lTnVtYmVycz0xMDBdPSJzZWxlY3RPbkxpbmVOdW1iZXJzIixlW2Uuc2hvd0ZvbGRpbmdDb250cm9scz0xMDFdPSJzaG93Rm9sZGluZ0NvbnRyb2xzIixlW2Uuc2hvd1VudXNlZD0xMDJdPSJzaG93VW51c2VkIixlW2Uuc25pcHBldFN1Z2dlc3Rpb25zPTEwM109InNuaXBwZXRTdWdnZXN0aW9ucyIsZVtlLnNtYXJ0U2VsZWN0PTEwNF09InNtYXJ0U2VsZWN0IixlW2Uuc21vb3RoU2Nyb2xsaW5nPTEwNV09InNtb290aFNjcm9sbGluZyIsZVtlLnN0aWNreVRhYlN0b3BzPTEwNl09InN0aWNreVRhYlN0b3BzIixlW2Uuc3RvcFJlbmRlcmluZ0xpbmVBZnRlcj0xMDddPSJzdG9wUmVuZGVyaW5nTGluZUFmdGVyIixlW2Uuc3VnZ2VzdD0xMDhdPSJzdWdnZXN0IixlW2Uuc3VnZ2VzdEZvbnRTaXplPTEwOV09InN1Z2dlc3RGb250U2l6ZSIsZVtlLnN1Z2dlc3RMaW5lSGVpZ2h0PTExMF09InN1Z2dlc3RMaW5lSGVpZ2h0IixlW2Uuc3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnM9MTExXT0ic3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnMiLGVbZS5zdWdnZXN0U2VsZWN0aW9uPTExMl09InN1Z2dlc3RTZWxlY3Rpb24iLGVbZS50YWJDb21wbGV0aW9uPTExM109InRhYkNvbXBsZXRpb24iLGVbZS50YWJJbmRleD0xMTRdPSJ0YWJJbmRleCIsZVtlLnVuaWNvZGVIaWdobGlnaHRpbmc9MTE1XT0idW5pY29kZUhpZ2hsaWdodGluZyIsZVtlLnVudXN1YWxMaW5lVGVybWluYXRvcnM9MTE2XT0idW51c3VhbExpbmVUZXJtaW5hdG9ycyIsZVtlLnVzZVNoYWRvd0RPTT0xMTddPSJ1c2VTaGFkb3dET00iLGVbZS51c2VUYWJTdG9wcz0xMThdPSJ1c2VUYWJTdG9wcyIsZVtlLndvcmRTZXBhcmF0b3JzPTExOV09IndvcmRTZXBhcmF0b3JzIixlW2Uud29yZFdyYXA9MTIwXT0id29yZFdyYXAiLGVbZS53b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzPTEyMV09IndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycz0xMjJdPSJ3b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQ29sdW1uPTEyM109IndvcmRXcmFwQ29sdW1uIixlW2Uud29yZFdyYXBPdmVycmlkZTE9MTI0XT0id29yZFdyYXBPdmVycmlkZTEiLGVbZS53b3JkV3JhcE92ZXJyaWRlMj0xMjVdPSJ3b3JkV3JhcE92ZXJyaWRlMiIsZVtlLndyYXBwaW5nSW5kZW50PTEyNl09IndyYXBwaW5nSW5kZW50IixlW2Uud3JhcHBpbmdTdHJhdGVneT0xMjddPSJ3cmFwcGluZ1N0cmF0ZWd5IixlW2Uuc2hvd0RlcHJlY2F0ZWQ9MTI4XT0ic2hvd0RlcHJlY2F0ZWQiLGVbZS5pbmxheUhpbnRzPTEyOV09ImlubGF5SGludHMiLGVbZS5lZGl0b3JDbGFzc05hbWU9MTMwXT0iZWRpdG9yQ2xhc3NOYW1lIixlW2UucGl4ZWxSYXRpbz0xMzFdPSJwaXhlbFJhdGlvIixlW2UudGFiRm9jdXNNb2RlPTEzMl09InRhYkZvY3VzTW9kZSIsZVtlLmxheW91dEluZm89MTMzXT0ibGF5b3V0SW5mbyIsZVtlLndyYXBwaW5nSW5mbz0xMzRdPSJ3cmFwcGluZ0luZm8ifShhbnx8KGFuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHREZWZpbmVkPTBdPSJUZXh0RGVmaW5lZCIsZVtlLkxGPTFdPSJMRiIsZVtlLkNSTEY9Ml09IkNSTEYifShzbnx8KHNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxGPTBdPSJMRiIsZVtlLkNSTEY9MV09IkNSTEYifShjbnx8KGNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5JbmRlbnQ9MV09IkluZGVudCIsZVtlLkluZGVudE91dGRlbnQ9Ml09IkluZGVudE91dGRlbnQiLGVbZS5PdXRkZW50PTNdPSJPdXRkZW50In0obG58fChsbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifSh1bnx8KHVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KGhufHwoaG49e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifShmbnx8KGZuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcGVuZHNPbktiTGF5b3V0PS0xXT0iRGVwZW5kc09uS2JMYXlvdXQiLGVbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuQmFja3NwYWNlPTFdPSJCYWNrc3BhY2UiLGVbZS5UYWI9Ml09IlRhYiIsZVtlLkVudGVyPTNdPSJFbnRlciIsZVtlLlNoaWZ0PTRdPSJTaGlmdCIsZVtlLkN0cmw9NV09IkN0cmwiLGVbZS5BbHQ9Nl09IkFsdCIsZVtlLlBhdXNlQnJlYWs9N109IlBhdXNlQnJlYWsiLGVbZS5DYXBzTG9jaz04XT0iQ2Fwc0xvY2siLGVbZS5Fc2NhcGU9OV09IkVzY2FwZSIsZVtlLlNwYWNlPTEwXT0iU3BhY2UiLGVbZS5QYWdlVXA9MTFdPSJQYWdlVXAiLGVbZS5QYWdlRG93bj0xMl09IlBhZ2VEb3duIixlW2UuRW5kPTEzXT0iRW5kIixlW2UuSG9tZT0xNF09IkhvbWUiLGVbZS5MZWZ0QXJyb3c9MTVdPSJMZWZ0QXJyb3ciLGVbZS5VcEFycm93PTE2XT0iVXBBcnJvdyIsZVtlLlJpZ2h0QXJyb3c9MTddPSJSaWdodEFycm93IixlW2UuRG93bkFycm93PTE4XT0iRG93bkFycm93IixlW2UuSW5zZXJ0PTE5XT0iSW5zZXJ0IixlW2UuRGVsZXRlPTIwXT0iRGVsZXRlIixlW2UuRGlnaXQwPTIxXT0iRGlnaXQwIixlW2UuRGlnaXQxPTIyXT0iRGlnaXQxIixlW2UuRGlnaXQyPTIzXT0iRGlnaXQyIixlW2UuRGlnaXQzPTI0XT0iRGlnaXQzIixlW2UuRGlnaXQ0PTI1XT0iRGlnaXQ0IixlW2UuRGlnaXQ1PTI2XT0iRGlnaXQ1IixlW2UuRGlnaXQ2PTI3XT0iRGlnaXQ2IixlW2UuRGlnaXQ3PTI4XT0iRGlnaXQ3IixlW2UuRGlnaXQ4PTI5XT0iRGlnaXQ4IixlW2UuRGlnaXQ5PTMwXT0iRGlnaXQ5IixlW2UuS2V5QT0zMV09IktleUEiLGVbZS5LZXlCPTMyXT0iS2V5QiIsZVtlLktleUM9MzNdPSJLZXlDIixlW2UuS2V5RD0zNF09IktleUQiLGVbZS5LZXlFPTM1XT0iS2V5RSIsZVtlLktleUY9MzZdPSJLZXlGIixlW2UuS2V5Rz0zN109IktleUciLGVbZS5LZXlIPTM4XT0iS2V5SCIsZVtlLktleUk9MzldPSJLZXlJIixlW2UuS2V5Sj00MF09IktleUoiLGVbZS5LZXlLPTQxXT0iS2V5SyIsZVtlLktleUw9NDJdPSJLZXlMIixlW2UuS2V5TT00M109IktleU0iLGVbZS5LZXlOPTQ0XT0iS2V5TiIsZVtlLktleU89NDVdPSJLZXlPIixlW2UuS2V5UD00Nl09IktleVAiLGVbZS5LZXlRPTQ3XT0iS2V5USIsZVtlLktleVI9NDhdPSJLZXlSIixlW2UuS2V5Uz00OV09IktleVMiLGVbZS5LZXlUPTUwXT0iS2V5VCIsZVtlLktleVU9NTFdPSJLZXlVIixlW2UuS2V5Vj01Ml09IktleVYiLGVbZS5LZXlXPTUzXT0iS2V5VyIsZVtlLktleVg9NTRdPSJLZXlYIixlW2UuS2V5WT01NV09IktleVkiLGVbZS5LZXlaPTU2XT0iS2V5WiIsZVtlLk1ldGE9NTddPSJNZXRhIixlW2UuQ29udGV4dE1lbnU9NThdPSJDb250ZXh0TWVudSIsZVtlLkYxPTU5XT0iRjEiLGVbZS5GMj02MF09IkYyIixlW2UuRjM9NjFdPSJGMyIsZVtlLkY0PTYyXT0iRjQiLGVbZS5GNT02M109IkY1IixlW2UuRjY9NjRdPSJGNiIsZVtlLkY3PTY1XT0iRjciLGVbZS5GOD02Nl09IkY4IixlW2UuRjk9NjddPSJGOSIsZVtlLkYxMD02OF09IkYxMCIsZVtlLkYxMT02OV09IkYxMSIsZVtlLkYxMj03MF09IkYxMiIsZVtlLkYxMz03MV09IkYxMyIsZVtlLkYxND03Ml09IkYxNCIsZVtlLkYxNT03M109IkYxNSIsZVtlLkYxNj03NF09IkYxNiIsZVtlLkYxNz03NV09IkYxNyIsZVtlLkYxOD03Nl09IkYxOCIsZVtlLkYxOT03N109IkYxOSIsZVtlLk51bUxvY2s9NzhdPSJOdW1Mb2NrIixlW2UuU2Nyb2xsTG9jaz03OV09IlNjcm9sbExvY2siLGVbZS5TZW1pY29sb249ODBdPSJTZW1pY29sb24iLGVbZS5FcXVhbD04MV09IkVxdWFsIixlW2UuQ29tbWE9ODJdPSJDb21tYSIsZVtlLk1pbnVzPTgzXT0iTWludXMiLGVbZS5QZXJpb2Q9ODRdPSJQZXJpb2QiLGVbZS5TbGFzaD04NV09IlNsYXNoIixlW2UuQmFja3F1b3RlPTg2XT0iQmFja3F1b3RlIixlW2UuQnJhY2tldExlZnQ9ODddPSJCcmFja2V0TGVmdCIsZVtlLkJhY2tzbGFzaD04OF09IkJhY2tzbGFzaCIsZVtlLkJyYWNrZXRSaWdodD04OV09IkJyYWNrZXRSaWdodCIsZVtlLlF1b3RlPTkwXT0iUXVvdGUiLGVbZS5PRU1fOD05MV09Ik9FTV84IixlW2UuSW50bEJhY2tzbGFzaD05Ml09IkludGxCYWNrc2xhc2giLGVbZS5OdW1wYWQwPTkzXT0iTnVtcGFkMCIsZVtlLk51bXBhZDE9OTRdPSJOdW1wYWQxIixlW2UuTnVtcGFkMj05NV09Ik51bXBhZDIiLGVbZS5OdW1wYWQzPTk2XT0iTnVtcGFkMyIsZVtlLk51bXBhZDQ9OTddPSJOdW1wYWQ0IixlW2UuTnVtcGFkNT05OF09Ik51bXBhZDUiLGVbZS5OdW1wYWQ2PTk5XT0iTnVtcGFkNiIsZVtlLk51bXBhZDc9MTAwXT0iTnVtcGFkNyIsZVtlLk51bXBhZDg9MTAxXT0iTnVtcGFkOCIsZVtlLk51bXBhZDk9MTAyXT0iTnVtcGFkOSIsZVtlLk51bXBhZE11bHRpcGx5PTEwM109Ik51bXBhZE11bHRpcGx5IixlW2UuTnVtcGFkQWRkPTEwNF09Ik51bXBhZEFkZCIsZVtlLk5VTVBBRF9TRVBBUkFUT1I9MTA1XT0iTlVNUEFEX1NFUEFSQVRPUiIsZVtlLk51bXBhZFN1YnRyYWN0PTEwNl09Ik51bXBhZFN1YnRyYWN0IixlW2UuTnVtcGFkRGVjaW1hbD0xMDddPSJOdW1wYWREZWNpbWFsIixlW2UuTnVtcGFkRGl2aWRlPTEwOF09Ik51bXBhZERpdmlkZSIsZVtlLktFWV9JTl9DT01QT1NJVElPTj0xMDldPSJLRVlfSU5fQ09NUE9TSVRJT04iLGVbZS5BQk5UX0MxPTExMF09IkFCTlRfQzEiLGVbZS5BQk5UX0MyPTExMV09IkFCTlRfQzIiLGVbZS5BdWRpb1ZvbHVtZU11dGU9MTEyXT0iQXVkaW9Wb2x1bWVNdXRlIixlW2UuQXVkaW9Wb2x1bWVVcD0xMTNdPSJBdWRpb1ZvbHVtZVVwIixlW2UuQXVkaW9Wb2x1bWVEb3duPTExNF09IkF1ZGlvVm9sdW1lRG93biIsZVtlLkJyb3dzZXJTZWFyY2g9MTE1XT0iQnJvd3NlclNlYXJjaCIsZVtlLkJyb3dzZXJIb21lPTExNl09IkJyb3dzZXJIb21lIixlW2UuQnJvd3NlckJhY2s9MTE3XT0iQnJvd3NlckJhY2siLGVbZS5Ccm93c2VyRm9yd2FyZD0xMThdPSJCcm93c2VyRm9yd2FyZCIsZVtlLk1lZGlhVHJhY2tOZXh0PTExOV09Ik1lZGlhVHJhY2tOZXh0IixlW2UuTWVkaWFUcmFja1ByZXZpb3VzPTEyMF09Ik1lZGlhVHJhY2tQcmV2aW91cyIsZVtlLk1lZGlhU3RvcD0xMjFdPSJNZWRpYVN0b3AiLGVbZS5NZWRpYVBsYXlQYXVzZT0xMjJdPSJNZWRpYVBsYXlQYXVzZSIsZVtlLkxhdW5jaE1lZGlhUGxheWVyPTEyM109IkxhdW5jaE1lZGlhUGxheWVyIixlW2UuTGF1bmNoTWFpbD0xMjRdPSJMYXVuY2hNYWlsIixlW2UuTGF1bmNoQXBwMj0xMjVdPSJMYXVuY2hBcHAyIixlW2UuQ2xlYXI9MTI2XT0iQ2xlYXIiLGVbZS5NQVhfVkFMVUU9MTI3XT0iTUFYX1ZBTFVFIn0oZG58fChkbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5IaW50PTFdPSJIaW50IixlW2UuSW5mbz0yXT0iSW5mbyIsZVtlLldhcm5pbmc9NF09Ildhcm5pbmciLGVbZS5FcnJvcj04XT0iRXJyb3IifShtbnx8KG1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVubmVjZXNzYXJ5PTFdPSJVbm5lY2Vzc2FyeSIsZVtlLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQifShnbnx8KGduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifShwbnx8KHBuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09IlVOS05PV04iLGVbZS5URVhUQVJFQT0xXT0iVEVYVEFSRUEiLGVbZS5HVVRURVJfR0xZUEhfTUFSR0lOPTJdPSJHVVRURVJfR0xZUEhfTUFSR0lOIixlW2UuR1VUVEVSX0xJTkVfTlVNQkVSUz0zXT0iR1VUVEVSX0xJTkVfTlVNQkVSUyIsZVtlLkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TPTRdPSJHVVRURVJfTElORV9ERUNPUkFUSU9OUyIsZVtlLkdVVFRFUl9WSUVXX1pPTkU9NV09IkdVVFRFUl9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1RFWFQ9Nl09IkNPTlRFTlRfVEVYVCIsZVtlLkNPTlRFTlRfRU1QVFk9N109IkNPTlRFTlRfRU1QVFkiLGVbZS5DT05URU5UX1ZJRVdfWk9ORT04XT0iQ09OVEVOVF9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1dJREdFVD05XT0iQ09OVEVOVF9XSURHRVQiLGVbZS5PVkVSVklFV19SVUxFUj0xMF09Ik9WRVJWSUVXX1JVTEVSIixlW2UuU0NST0xMQkFSPTExXT0iU0NST0xMQkFSIixlW2UuT1ZFUkxBWV9XSURHRVQ9MTJdPSJPVkVSTEFZX1dJREdFVCIsZVtlLk9VVFNJREVfRURJVE9SPTEzXT0iT1VUU0lERV9FRElUT1IifShibnx8KGJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRPUF9SSUdIVF9DT1JORVI9MF09IlRPUF9SSUdIVF9DT1JORVIiLGVbZS5CT1RUT01fUklHSFRfQ09STkVSPTFdPSJCT1RUT01fUklHSFRfQ09STkVSIixlW2UuVE9QX0NFTlRFUj0yXT0iVE9QX0NFTlRFUiJ9KHZufHwodm49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KHlufHwoeW49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0wXT0iTGVmdCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLk5vbmU9Ml09Ik5vbmUiLGVbZS5MZWZ0T2ZJbmplY3RlZFRleHQ9M109IkxlZnRPZkluamVjdGVkVGV4dCIsZVtlLlJpZ2h0T2ZJbmplY3RlZFRleHQ9NF09IlJpZ2h0T2ZJbmplY3RlZFRleHQifShDbnx8KENuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk9mZj0wXT0iT2ZmIixlW2UuT249MV09Ik9uIixlW2UuUmVsYXRpdmU9Ml09IlJlbGF0aXZlIixlW2UuSW50ZXJ2YWw9M109IkludGVydmFsIixlW2UuQ3VzdG9tPTRdPSJDdXN0b20ifSh3bnx8KHduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5UZXh0PTFdPSJUZXh0IixlW2UuQmxvY2tzPTJdPSJCbG9ja3MifShfbnx8KF9uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlNtb290aD0wXT0iU21vb3RoIixlW2UuSW1tZWRpYXRlPTFdPSJJbW1lZGlhdGUifShTbnx8KFNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG89MV09IkF1dG8iLGVbZS5IaWRkZW49Ml09IkhpZGRlbiIsZVtlLlZpc2libGU9M109IlZpc2libGUifShBbnx8KEFuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxUUj0wXT0iTFRSIixlW2UuUlRMPTFdPSJSVEwifShFbnx8KEVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifSh4bnx8KHhuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkZpbGU9MF09IkZpbGUiLGVbZS5Nb2R1bGU9MV09Ik1vZHVsZSIsZVtlLk5hbWVzcGFjZT0yXT0iTmFtZXNwYWNlIixlW2UuUGFja2FnZT0zXT0iUGFja2FnZSIsZVtlLkNsYXNzPTRdPSJDbGFzcyIsZVtlLk1ldGhvZD01XT0iTWV0aG9kIixlW2UuUHJvcGVydHk9Nl09IlByb3BlcnR5IixlW2UuRmllbGQ9N109IkZpZWxkIixlW2UuQ29uc3RydWN0b3I9OF09IkNvbnN0cnVjdG9yIixlW2UuRW51bT05XT0iRW51bSIsZVtlLkludGVyZmFjZT0xMF09IkludGVyZmFjZSIsZVtlLkZ1bmN0aW9uPTExXT0iRnVuY3Rpb24iLGVbZS5WYXJpYWJsZT0xMl09IlZhcmlhYmxlIixlW2UuQ29uc3RhbnQ9MTNdPSJDb25zdGFudCIsZVtlLlN0cmluZz0xNF09IlN0cmluZyIsZVtlLk51bWJlcj0xNV09Ik51bWJlciIsZVtlLkJvb2xlYW49MTZdPSJCb29sZWFuIixlW2UuQXJyYXk9MTddPSJBcnJheSIsZVtlLk9iamVjdD0xOF09Ik9iamVjdCIsZVtlLktleT0xOV09IktleSIsZVtlLk51bGw9MjBdPSJOdWxsIixlW2UuRW51bU1lbWJlcj0yMV09IkVudW1NZW1iZXIiLGVbZS5TdHJ1Y3Q9MjJdPSJTdHJ1Y3QiLGVbZS5FdmVudD0yM109IkV2ZW50IixlW2UuT3BlcmF0b3I9MjRdPSJPcGVyYXRvciIsZVtlLlR5cGVQYXJhbWV0ZXI9MjVdPSJUeXBlUGFyYW1ldGVyIn0oTm58fChObj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0oa258fChrbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5IaWRkZW49MF09IkhpZGRlbiIsZVtlLkJsaW5rPTFdPSJCbGluayIsZVtlLlNtb290aD0yXT0iU21vb3RoIixlW2UuUGhhc2U9M109IlBoYXNlIixlW2UuRXhwYW5kPTRdPSJFeHBhbmQiLGVbZS5Tb2xpZD01XT0iU29saWQifShMbnx8KExuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxpbmU9MV09IkxpbmUiLGVbZS5CbG9jaz0yXT0iQmxvY2siLGVbZS5VbmRlcmxpbmU9M109IlVuZGVybGluZSIsZVtlLkxpbmVUaGluPTRdPSJMaW5lVGhpbiIsZVtlLkJsb2NrT3V0bGluZT01XT0iQmxvY2tPdXRsaW5lIixlW2UuVW5kZXJsaW5lVGhpbj02XT0iVW5kZXJsaW5lVGhpbiJ9KFRufHwoVG49e30pKSxmdW5jdGlvbihlKXtlW2UuQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0wXT0iQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLk5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0xXT0iTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZT0yXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZSIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdBZnRlcj0zXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyIn0oT258fChPbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuU2FtZT0xXT0iU2FtZSIsZVtlLkluZGVudD0yXT0iSW5kZW50IixlW2UuRGVlcEluZGVudD0zXT0iRGVlcEluZGVudCJ9KElufHwoSW49e30pKTtjbGFzcyBLbntzdGF0aWMgY2hvcmQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4oZXwoNjU1MzUmdCk8PDE2Pj4+MCk+Pj4wfShlLHQpfX1mdW5jdGlvbiBqbihlLHQsbixyLGkpe3JldHVybiBmdW5jdGlvbihlLHQsbixyLGkpe2lmKDA9PT1yKXJldHVybiEwO2NvbnN0IG89dC5jaGFyQ29kZUF0KHItMSk7aWYoMCE9PWUuZ2V0KG8pKXJldHVybiEwO2lmKDEzPT09b3x8MTA9PT1vKXJldHVybiEwO2lmKGk+MCl7Y29uc3Qgbj10LmNoYXJDb2RlQXQocik7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsMCxyLGkpJiZmdW5jdGlvbihlLHQsbixyLGkpe2lmKHIraT09PW4pcmV0dXJuITA7Y29uc3Qgbz10LmNoYXJDb2RlQXQocitpKTtpZigwIT09ZS5nZXQobykpcmV0dXJuITA7aWYoMTM9PT1vfHwxMD09PW8pcmV0dXJuITA7aWYoaT4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChyK2ktMSk7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsbixyLGkpfUtuLkN0cmxDbWQ9MjA0OCxLbi5TaGlmdD0xMDI0LEtuLkFsdD01MTIsS24uV2luQ3RybD0yNTYsZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifShNbnx8KE1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifShQbnx8KFBuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KFJufHwoUm49e30pKTtjbGFzcyBVbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3dvcmRTZXBhcmF0b3JzPWUsdGhpcy5fc2VhcmNoUmVnZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KGUpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD1lLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dChlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBuO2Rve2lmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgrdGhpcy5fcHJldk1hdGNoTGVuZ3RoPT09dClyZXR1cm4gbnVsbDtpZihuPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWMoZSksIW4pcmV0dXJuIG51bGw7Y29uc3Qgcj1uLmluZGV4LGk9blswXS5sZW5ndGg7aWYocj09PXRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgmJmk9PT10aGlzLl9wcmV2TWF0Y2hMZW5ndGgpe2lmKDA9PT1pKXtYKGUsdCx0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpPjY1NTM1P3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTE7Y29udGludWV9cmV0dXJuIG51bGx9aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1yLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1pLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8am4odGhpcy5fd29yZFNlcGFyYXRvcnMsZSx0LHIsaSkpcmV0dXJuIG59d2hpbGUobik7cmV0dXJuIG51bGx9fWNsYXNzIEJue2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldChlLmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9WS5nZXRJbnN0YW5jZShuZXcgU2V0KGUuYWxsb3dlZExvY2FsZXMpKX1nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCl7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuImFsbE5vbkJhc2ljQXNjaWkiO2NvbnN0IGU9bmV3IFNldDtpZih0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiBRLmNvZGVQb2ludHMpcW4oU3RyaW5nLmZyb21Db2RlUG9pbnQodCkpfHxlLmFkZCh0KTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSllLmFkZCh0KTtmb3IoY29uc3QgdCBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKWUuZGVsZXRlKHQpO3JldHVybiBlfXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSx0KXtjb25zdCBuPWUuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMobikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IHI9ITEsaT0hMTtpZih0KWZvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9ZS5jb2RlUG9pbnRBdCgwKSxuPShvPWUsWi50ZXN0KG8pKTtyPXJ8fG4sbnx8dGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHQpfHxRLmlzSW52aXNpYmxlQ2hhcmFjdGVyKHQpfHwoaT0hMCl9dmFyIG87cmV0dXJuIXImJmk/MDp0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycyYmIXFuKGUpJiZRLmlzSW52aXNpYmxlQ2hhcmFjdGVyKG4pPzI6dGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMmJnRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhuKT8zOjB9fWZ1bmN0aW9uIHFuKGUpe3JldHVybiIgIj09PWV8fCJcbiI9PT1lfHwiXHQiPT09ZX12YXIgJG49ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9O2NsYXNzIFduIGV4dGVuZHMgY2xhc3N7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGluZXM9dCx0aGlzLl9lb2w9bix0aGlzLl92ZXJzaW9uSWQ9cix0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIG51bGw9PT10aGlzLl9jYWNoZWRUZXh0VmFsdWUmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHMoZSl7ZS5lb2wmJmUuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPWUuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3QgdD1lLmNoYW5nZXM7Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLl9hY2NlcHREZWxldGVSYW5nZShlLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBRZShlLnJhbmdlLnN0YXJ0TGluZU51bWJlcixlLnJhbmdlLnN0YXJ0Q29sdW1uKSxlLnRleHQpO3RoaXMuX3ZlcnNpb25JZD1lLnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXtjb25zdCBlPXRoaXMuX2VvbC5sZW5ndGgsdD10aGlzLl9saW5lcy5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyluW3JdPXRoaXMuX2xpbmVzW3JdLmxlbmd0aCtlO3RoaXMuX2xpbmVTdGFydHM9bmV3IGR0KG4pfX1fc2V0TGluZVRleHQoZSx0KXt0aGlzLl9saW5lc1tlXT10LHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuc2V0VmFsdWUoZSx0aGlzLl9saW5lc1tlXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aCl9X2FjY2VwdERlbGV0ZVJhbmdlKGUpe2lmKGUuc3RhcnRMaW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyKXRoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyhlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpO2Vsc2V7aWYoZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKX19X2FjY2VwdEluc2VydFRleHQoZSx0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IG49dC5zcGxpdCgvXHJcbnxccnxcbi8pO2lmKDE9PT1uLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSt0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpKTtuW24ubGVuZ3RoLTFdKz10aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KGUubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLmNvbHVtbi0xKStuWzBdKTtjb25zdCByPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC0xKTtmb3IobGV0IHQ9MTt0PG4ubGVuZ3RoO3QrKyl0aGlzLl9saW5lcy5zcGxpY2UoZS5saW5lTnVtYmVyK3QtMSwwLG5bdF0pLHJbdC0xXT1uW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKGUubGluZU51bWJlcixyKX19e2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWdldExpbmVzQ29udGVudCgpe3JldHVybiB0aGlzLl9saW5lcy5zbGljZSgwKX1nZXRMaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RofWdldExpbmVDb250ZW50KGUpe3JldHVybiB0aGlzLl9saW5lc1tlLTFdfWdldFdvcmRBdFBvc2l0aW9uKGUsdCl7Y29uc3Qgbj1idChlLmNvbHVtbixmdW5jdGlvbihlKXtsZXQgdD1ndDtpZihlJiZlIGluc3RhbmNlb2YgUmVnRXhwKWlmKGUuZ2xvYmFsKXQ9ZTtlbHNle2xldCBuPSJnIjtlLmlnbm9yZUNhc2UmJihuKz0iaSIpLGUubXVsdGlsaW5lJiYobis9Im0iKSxlLnVuaWNvZGUmJihuKz0idSIpLHQ9bmV3IFJlZ0V4cChlLnNvdXJjZSxuKX1yZXR1cm4gdC5sYXN0SW5kZXg9MCx0fSh0KSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0sMCk7cmV0dXJuIG4/bmV3IGV0KGUubGluZU51bWJlcixuLnN0YXJ0Q29sdW1uLGUubGluZU51bWJlcixuLmVuZENvbHVtbik6bnVsbH13b3JkcyhlKXtjb25zdCB0PXRoaXMuX2xpbmVzLG49dGhpcy5fd29yZGVuaXplLmJpbmQodGhpcyk7bGV0IHI9MCxpPSIiLG89MCxhPVtdO3JldHVybnsqW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoOzspaWYobzxhLmxlbmd0aCl7Y29uc3QgZT1pLnN1YnN0cmluZyhhW29dLnN0YXJ0LGFbb10uZW5kKTtvKz0xLHlpZWxkIGV9ZWxzZXtpZighKHI8dC5sZW5ndGgpKWJyZWFrO2k9dFtyXSxhPW4oaSxlKSxvPTAscis9MX19fX1nZXRMaW5lV29yZHMoZSx0KXtjb25zdCBuPXRoaXMuX2xpbmVzW2UtMV0scj10aGlzLl93b3JkZW5pemUobix0KSxpPVtdO2Zvcihjb25zdCBlIG9mIHIpaS5wdXNoKHt3b3JkOm4uc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQpLHN0YXJ0Q29sdW1uOmUuc3RhcnQrMSxlbmRDb2x1bW46ZS5lbmQrMX0pO3JldHVybiBpfV93b3JkZW5pemUoZSx0KXtjb25zdCBuPVtdO2xldCByO2Zvcih0Lmxhc3RJbmRleD0wOyhyPXQuZXhlYyhlKSkmJjAhPT1yWzBdLmxlbmd0aDspbi5wdXNoKHtzdGFydDpyLmluZGV4LGVuZDpyLmluZGV4K3JbMF0ubGVuZ3RofSk7cmV0dXJuIG59Z2V0VmFsdWVJblJhbmdlKGUpe2lmKChlPXRoaXMuX3ZhbGlkYXRlUmFuZ2UoZSkpLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlcilyZXR1cm4gdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSxlLmVuZENvbHVtbi0xKTtjb25zdCB0PXRoaXMuX2VvbCxuPWUuc3RhcnRMaW5lTnVtYmVyLTEscj1lLmVuZExpbmVOdW1iZXItMSxpPVtdO2kucHVzaCh0aGlzLl9saW5lc1tuXS5zdWJzdHJpbmcoZS5zdGFydENvbHVtbi0xKSk7Zm9yKGxldCBlPW4rMTtlPHI7ZSsrKWkucHVzaCh0aGlzLl9saW5lc1tlXSk7cmV0dXJuIGkucHVzaCh0aGlzLl9saW5lc1tyXS5zdWJzdHJpbmcoMCxlLmVuZENvbHVtbi0xKSksaS5qb2luKHQpfW9mZnNldEF0KGUpe3JldHVybiBlPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oZSksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpLHRoaXMuX2xpbmVTdGFydHMuZ2V0UHJlZml4U3VtKGUubGluZU51bWJlci0yKSsoZS5jb2x1bW4tMSl9cG9zaXRpb25BdChlKXtlPU1hdGguZmxvb3IoZSksZT1NYXRoLm1heCgwLGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKTtjb25zdCB0PXRoaXMuX2xpbmVTdGFydHMuZ2V0SW5kZXhPZihlKSxuPXRoaXMuX2xpbmVzW3QuaW5kZXhdLmxlbmd0aDtyZXR1cm57bGluZU51bWJlcjoxK3QuaW5kZXgsY29sdW1uOjErTWF0aC5taW4odC5yZW1haW5kZXIsbil9fV92YWxpZGF0ZVJhbmdlKGUpe2NvbnN0IHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLnN0YXJ0TGluZU51bWJlcixjb2x1bW46ZS5zdGFydENvbHVtbn0pLG49dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLmVuZExpbmVOdW1iZXIsY29sdW1uOmUuZW5kQ29sdW1ufSk7cmV0dXJuIHQubGluZU51bWJlciE9PWUuc3RhcnRMaW5lTnVtYmVyfHx0LmNvbHVtbiE9PWUuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlciE9PWUuZW5kTGluZU51bWJlcnx8bi5jb2x1bW4hPT1lLmVuZENvbHVtbj97c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOm4ubGluZU51bWJlcixlbmRDb2x1bW46bi5jb2x1bW59OmV9X3ZhbGlkYXRlUG9zaXRpb24oZSl7aWYoIVFlLmlzSVBvc2l0aW9uKGUpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvc2l0aW9uIik7bGV0e2xpbmVOdW1iZXI6dCxjb2x1bW46bn09ZSxyPSExO2lmKHQ8MSl0PTEsbj0xLHI9ITA7ZWxzZSBpZih0PnRoaXMuX2xpbmVzLmxlbmd0aCl0PXRoaXMuX2xpbmVzLmxlbmd0aCxuPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzEscj0hMDtlbHNle2NvbnN0IGU9dGhpcy5fbGluZXNbdC0xXS5sZW5ndGgrMTtuPDE/KG49MSxyPSEwKTpuPmUmJihuPWUscj0hMCl9cmV0dXJuIHI/e2xpbmVOdW1iZXI6dCxjb2x1bW46bn06ZX19Y2xhc3MgSG57Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9ob3N0PWUsdGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk9dCx0aGlzLl9mb3JlaWduTW9kdWxlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpfV9nZXRNb2RlbChlKXtyZXR1cm4gdGhpcy5fbW9kZWxzW2VdfV9nZXRNb2RlbHMoKXtjb25zdCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tb2RlbHMpLmZvckVhY2goKHQ9PmUucHVzaCh0aGlzLl9tb2RlbHNbdF0pKSksZX1hY2NlcHROZXdNb2RlbChlKXt0aGlzLl9tb2RlbHNbZS51cmxdPW5ldyBXbihCZS5wYXJzZShlLnVybCksZS5saW5lcyxlLkVPTCxlLnZlcnNpb25JZCl9YWNjZXB0TW9kZWxDaGFuZ2VkKGUsdCl7aWYoIXRoaXMuX21vZGVsc1tlXSlyZXR1cm47dGhpcy5fbW9kZWxzW2VdLm9uRXZlbnRzKHQpfWFjY2VwdFJlbW92ZWRNb2RlbChlKXt0aGlzLl9tb2RlbHNbZV0mJmRlbGV0ZSB0aGlzLl9tb2RlbHNbZV19Y29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXRoaXMuX2dldE1vZGVsKGUpO3JldHVybiByP2NsYXNze3N0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodHMoZSx0LG4pe2NvbnN0IHI9bj9uLnN0YXJ0TGluZU51bWJlcjoxLGk9bj9uLmVuZExpbmVOdW1iZXI6ZS5nZXRMaW5lQ291bnQoKSxvPW5ldyBCbih0KSxhPW8uZ2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpO2xldCBzO3ZhciBjO3M9ImFsbE5vbkJhc2ljQXNjaWkiPT09YT9uZXcgUmVnRXhwKCJbXlxcdFxcblxcclxceDIwLVxceDdFXSIsImciKTpuZXcgUmVnRXhwKGBbJHtjPUFycmF5LmZyb20oYSkubWFwKChlPT5TdHJpbmcuZnJvbUNvZGVQb2ludChlKSkpLmpvaW4oIiIpLGMucmVwbGFjZSgvW1xcXHtcfVwqXCtcP1x8XF5cJFwuXFtcXVwoXCldL2csIlxcJCYiKX1dYCwiZyIpO2NvbnN0IGw9bmV3IFVuKG51bGwscyksdT1bXTtsZXQgaCxmPSExLGQ9MCxtPTAsZz0wO2U6Zm9yKGxldCB0PXIsbj1pO3Q8PW47dCsrKXtjb25zdCBuPWUuZ2V0TGluZUNvbnRlbnQodCkscj1uLmxlbmd0aDtsLnJlc2V0KDApO2Rve2lmKGg9bC5uZXh0KG4pLGgpe2xldCBlPWguaW5kZXgsaT1oLmluZGV4K2hbMF0ubGVuZ3RoO2U+MCYmSihuLmNoYXJDb2RlQXQoZS0xKSkmJmUtLSxpKzE8ciYmSihuLmNoYXJDb2RlQXQoaS0xKSkmJmkrKztjb25zdCBhPW4uc3Vic3RyaW5nKGUsaSkscz1idChlKzEsZ3QsbiwwKSxjPW8uc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShhLHM/cy53b3JkOm51bGwpO2lmKDAhPT1jKXszPT09Yz9kKys6Mj09PWM/bSsrOjE9PT1jP2crKzpIKCk7Y29uc3Qgbj0xZTM7aWYodS5sZW5ndGg+PW4pe2Y9ITA7YnJlYWsgZX11LnB1c2gobmV3IGV0KHQsZSsxLHQsaSsxKSl9fX13aGlsZShoKX1yZXR1cm57cmFuZ2VzOnUsaGFzTW9yZTpmLGFtYmlndW91c0NoYXJhY3RlckNvdW50OmQsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6bSxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6Z319c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKGUsdCl7Y29uc3Qgbj1uZXcgQm4odCk7c3dpdGNoKG4uc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShlLG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3Qgcj1lLmNvZGVQb2ludEF0KDApLGk9bi5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKHIpLG89WS5nZXRMb2NhbGVzKCkuZmlsdGVyKChlPT4hWS5nZXRJbnN0YW5jZShuZXcgU2V0KFsuLi50LmFsbG93ZWRMb2NhbGVzLGVdKSkuaXNBbWJpZ3VvdXMocikpKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KGkpLG5vdEFtYmlndW91c0luTG9jYWxlczpvfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX0uY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHIsdCxuKTp7cmFuZ2VzOltdLGhhc01vcmU6ITEsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6MCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDowLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDowfX0pKX1jb21wdXRlRGlmZihlLHQsbixyKXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKGUpLG89dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIGkmJm8/SG4uY29tcHV0ZURpZmYoaSxvLG4scik6bnVsbH0pKX1zdGF0aWMgY29tcHV0ZURpZmYoZSx0LG4scil7Y29uc3QgaT1lLmdldExpbmVzQ29udGVudCgpLG89dC5nZXRMaW5lc0NvbnRlbnQoKSxhPW5ldyBhdChpLG8se3Nob3VsZENvbXB1dGVDaGFyQ2hhbmdlczohMCxzaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzOiEwLHNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlOm4sc2hvdWxkTWFrZVByZXR0eURpZmY6ITAsbWF4Q29tcHV0YXRpb25UaW1lOnJ9KS5jb21wdXRlRGlmZigpLHM9IShhLmNoYW5nZXMubGVuZ3RoPjApJiZ0aGlzLl9tb2RlbHNBcmVJZGVudGljYWwoZSx0KTtyZXR1cm57cXVpdEVhcmx5OmEucXVpdEVhcmx5LGlkZW50aWNhbDpzLGNoYW5nZXM6YS5jaGFuZ2VzfX1zdGF0aWMgX21vZGVsc0FyZUlkZW50aWNhbChlLHQpe2NvbnN0IG49ZS5nZXRMaW5lQ291bnQoKTtpZihuIT09dC5nZXRMaW5lQ291bnQoKSlyZXR1cm4hMTtmb3IobGV0IHI9MTtyPD1uO3IrKyl7aWYoZS5nZXRMaW5lQ29udGVudChyKSE9PXQuZ2V0TGluZUNvbnRlbnQocikpcmV0dXJuITF9cmV0dXJuITB9Y29tcHV0ZU1vcmVNaW5pbWFsRWRpdHMoZSx0KXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPXRoaXMuX2dldE1vZGVsKGUpO2lmKCFuKXJldHVybiB0O2NvbnN0IHI9W107bGV0IGk7dD10LnNsaWNlKDApLnNvcnQoKChlLHQpPT57aWYoZS5yYW5nZSYmdC5yYW5nZSlyZXR1cm4gZXQuY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKGUucmFuZ2UsdC5yYW5nZSk7cmV0dXJuKGUucmFuZ2U/MDoxKS0odC5yYW5nZT8wOjEpfSkpO2ZvcihsZXR7cmFuZ2U6ZSx0ZXh0Om8sZW9sOmF9b2YgdCl7aWYoIm51bWJlciI9PXR5cGVvZiBhJiYoaT1hKSxldC5pc0VtcHR5KGUpJiYhbyljb250aW51ZTtjb25zdCB0PW4uZ2V0VmFsdWVJblJhbmdlKGUpO2lmKG89by5yZXBsYWNlKC9cclxufFxufFxyL2csbi5lb2wpLHQ9PT1vKWNvbnRpbnVlO2lmKE1hdGgubWF4KG8ubGVuZ3RoLHQubGVuZ3RoKT5Ibi5fZGlmZkxpbWl0KXtyLnB1c2goe3JhbmdlOmUsdGV4dDpvfSk7Y29udGludWV9Y29uc3Qgcz1kZSh0LG8sITEpLGM9bi5vZmZzZXRBdChldC5saWZ0KGUpLmdldFN0YXJ0UG9zaXRpb24oKSk7Zm9yKGNvbnN0IGUgb2Ygcyl7Y29uc3QgdD1uLnBvc2l0aW9uQXQoYytlLm9yaWdpbmFsU3RhcnQpLGk9bi5wb3NpdGlvbkF0KGMrZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgpLGE9e3RleHQ6by5zdWJzdHIoZS5tb2RpZmllZFN0YXJ0LGUubW9kaWZpZWRMZW5ndGgpLHJhbmdlOntzdGFydExpbmVOdW1iZXI6dC5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuY29sdW1uLGVuZExpbmVOdW1iZXI6aS5saW5lTnVtYmVyLGVuZENvbHVtbjppLmNvbHVtbn19O24uZ2V0VmFsdWVJblJhbmdlKGEucmFuZ2UpIT09YS50ZXh0JiZyLnB1c2goYSl9fXJldHVybiJudW1iZXIiPT10eXBlb2YgaSYmci5wdXNoKHtlb2w6aSx0ZXh0OiIiLHJhbmdlOntzdGFydExpbmVOdW1iZXI6MCxzdGFydENvbHVtbjowLGVuZExpbmVOdW1iZXI6MCxlbmRDb2x1bW46MH19KSxyfSkpfWNvbXB1dGVMaW5rcyhlKXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXRoaXMuX2dldE1vZGVsKGUpO3JldHVybiB0P2Z1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ291bnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldExpbmVDb250ZW50P0F0LmNvbXB1dGVMaW5rcyhlKTpbXX0odCk6bnVsbH0pKX10ZXh0dWFsU3VnZ2VzdChlLHQsbixyKXtyZXR1cm4gJG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPW5ldyBWKCEwKSxvPW5ldyBSZWdFeHAobixyKSxhPW5ldyBTZXQ7ZTpmb3IoY29uc3QgbiBvZiBlKXtjb25zdCBlPXRoaXMuX2dldE1vZGVsKG4pO2lmKGUpZm9yKGNvbnN0IG4gb2YgZS53b3JkcyhvKSlpZihuIT09dCYmaXNOYU4oTnVtYmVyKG4pKSYmKGEuYWRkKG4pLGEuc2l6ZT5Ibi5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShhKSxkdXJhdGlvbjppLmVsYXBzZWQoKX19KSl9Y29tcHV0ZVdvcmRSYW5nZXMoZSx0LG4scil7cmV0dXJuICRuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKTtpZighaSlyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBvPW5ldyBSZWdFeHAobixyKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPXQuc3RhcnRMaW5lTnVtYmVyO2U8dC5lbmRMaW5lTnVtYmVyO2UrKyl7Y29uc3QgdD1pLmdldExpbmVXb3JkcyhlLG8pO2Zvcihjb25zdCBuIG9mIHQpe2lmKCFpc05hTihOdW1iZXIobi53b3JkKSkpY29udGludWU7bGV0IHQ9YVtuLndvcmRdO3R8fCh0PVtdLGFbbi53b3JkXT10KSx0LnB1c2goe3N0YXJ0TGluZU51bWJlcjplLHN0YXJ0Q29sdW1uOm4uc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjplLGVuZENvbHVtbjpuLmVuZENvbHVtbn0pfX1yZXR1cm4gYX0pKX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxuLHIsaSl7cmV0dXJuICRuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbz10aGlzLl9nZXRNb2RlbChlKTtpZighbylyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyBSZWdFeHAocixpKTt0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW4mJih0PXtzdGFydExpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixlbmRDb2x1bW46dC5lbmRDb2x1bW4rMX0pO2NvbnN0IHM9by5nZXRWYWx1ZUluUmFuZ2UodCksYz1vLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSxhKTtpZighYylyZXR1cm4gbnVsbDtjb25zdCBsPW8uZ2V0VmFsdWVJblJhbmdlKGMpO3JldHVybiBFdC5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KHQscyxjLGwsbil9KSl9bG9hZEZvcmVpZ25Nb2R1bGUoZSx0LG4pe2NvbnN0IHI9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWU9PmZ1bmN0aW9uKCl7Y29uc3Qgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoZSxuKX0scj17fTtmb3IoY29uc3QgdCBvZiBlKXJbdF09bih0KTtyZXR1cm4gcn0obiwoKGUsdCk9PnRoaXMuX2hvc3QuZmhyKGUsdCkpKSxpPXtob3N0OnIsZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGksdCksUHJvbWlzZS5yZXNvbHZlKFcodGhpcy5fZm9yZWlnbk1vZHVsZSkpKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdXNhZ2UiKSl9Zm1yKGUsdCl7aWYoIXRoaXMuX2ZvcmVpZ25Nb2R1bGV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mb3JlaWduTW9kdWxlW2VdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK2UpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9mb3JlaWduTW9kdWxlW2VdLmFwcGx5KHRoaXMuX2ZvcmVpZ25Nb2R1bGUsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19fUhuLl9kaWZmTGltaXQ9MWU1LEhuLl9zdWdnZXN0aW9uc0xpbWl0PTFlNCwiZnVuY3Rpb24iPT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmKE4ubW9uYWNvPXtlZGl0b3I6dm9pZCAwLGxhbmd1YWdlczp2b2lkIDAsQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U6THQsRW1pdHRlcjpCLEtleUNvZGU6ZG4sS2V5TW9kOktuLFBvc2l0aW9uOlFlLFJhbmdlOmV0LFNlbGVjdGlvbjpLdCxTZWxlY3Rpb25EaXJlY3Rpb246RW4sTWFya2VyU2V2ZXJpdHk6bW4sTWFya2VyVGFnOmduLFVyaTpCZSxUb2tlbjpEbn0pO2xldCB6bj0hMTtmdW5jdGlvbiBHbihlKXtpZih6bilyZXR1cm47em49ITA7Y29uc3QgdD1uZXcgY2UoKGU9PntzZWxmLnBvc3RNZXNzYWdlKGUpfSksKHQ9Pm5ldyBIbih0LGUpKSk7c2VsZi5vbm1lc3NhZ2U9ZT0+e3Qub25tZXNzYWdlKGUuZGF0YSl9fQovKiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBWZXJzaW9uOiAwLjM0LjAoOWQyNzg2ODViMDc4MTU4NDkxOTY0ZjhmZDdhYzk2MjhmZmZhMGYzMCkKICAgICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9tb25hY28tZWRpdG9yL2Jsb2IvbWFpbi9MSUNFTlNFLnR4dAogICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmZ1bmN0aW9uIEpuKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPWUubGVuZ3RoLHI9MCxpPSIiLG89MCxhPTE2LHM9MCxjPTAsbD0wLHU9MCxoPTA7ZnVuY3Rpb24gZih0LG4pe2Zvcih2YXIgaT0wLG89MDtpPHR8fCFuOyl7dmFyIGE9ZS5jaGFyQ29kZUF0KHIpO2lmKGE+PTQ4JiZhPD01NylvPTE2Km8rYS00ODtlbHNlIGlmKGE+PTY1JiZhPD03MClvPTE2Km8rYS02NSsxMDtlbHNle2lmKCEoYT49OTcmJmE8PTEwMikpYnJlYWs7bz0xNipvK2EtOTcrMTB9cisrLGkrK31yZXR1cm4gaTx0JiYobz0tMSksb31mdW5jdGlvbiBkKCl7aWYoaT0iIixoPTAsbz1yLGM9cyx1PWwscj49bilyZXR1cm4gbz1uLGE9MTc7dmFyIHQ9ZS5jaGFyQ29kZUF0KHIpO2lmKFhuKHQpKXtkb3tyKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PWUuY2hhckNvZGVBdChyKX13aGlsZShYbih0KSk7cmV0dXJuIGE9MTV9aWYoWm4odCkpcmV0dXJuIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLDEzPT09dCYmMTA9PT1lLmNoYXJDb2RlQXQocikmJihyKyssaSs9IlxuIikscysrLGw9cixhPTE0O3N3aXRjaCh0KXtjYXNlIDEyMzpyZXR1cm4gcisrLGE9MTtjYXNlIDEyNTpyZXR1cm4gcisrLGE9MjtjYXNlIDkxOnJldHVybiByKyssYT0zO2Nhc2UgOTM6cmV0dXJuIHIrKyxhPTQ7Y2FzZSA1ODpyZXR1cm4gcisrLGE9NjtjYXNlIDQ0OnJldHVybiByKyssYT01O2Nhc2UgMzQ6cmV0dXJuIHIrKyxpPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLGk9cjs7KXtpZihyPj1uKXt0Kz1lLnN1YnN0cmluZyhpLHIpLGg9MjticmVha312YXIgbz1lLmNoYXJDb2RlQXQocik7aWYoMzQ9PT1vKXt0Kz1lLnN1YnN0cmluZyhpLHIpLHIrKzticmVha31pZig5MiE9PW8pe2lmKG8+PTAmJm88PTMxKXtpZihabihvKSl7dCs9ZS5zdWJzdHJpbmcoaSxyKSxoPTI7YnJlYWt9aD02fXIrK31lbHNle2lmKHQrPWUuc3Vic3RyaW5nKGksciksKytyPj1uKXtoPTI7YnJlYWt9c3dpdGNoKGUuY2hhckNvZGVBdChyKyspKXtjYXNlIDM0OnQrPSciJzticmVhaztjYXNlIDkyOnQrPSJcXCI7YnJlYWs7Y2FzZSA0Nzp0Kz0iLyI7YnJlYWs7Y2FzZSA5ODp0Kz0iXGIiO2JyZWFrO2Nhc2UgMTAyOnQrPSJcZiI7YnJlYWs7Y2FzZSAxMTA6dCs9IlxuIjticmVhaztjYXNlIDExNDp0Kz0iXHIiO2JyZWFrO2Nhc2UgMTE2OnQrPSJcdCI7YnJlYWs7Y2FzZSAxMTc6dmFyIGE9Zig0LCEwKTthPj0wP3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk6aD00O2JyZWFrO2RlZmF1bHQ6aD01fWk9cn19cmV0dXJuIHR9KCksYT0xMDtjYXNlIDQ3OnZhciBkPXItMTtpZig0Nz09PWUuY2hhckNvZGVBdChyKzEpKXtmb3Iocis9MjtyPG4mJiFabihlLmNoYXJDb2RlQXQocikpOylyKys7cmV0dXJuIGk9ZS5zdWJzdHJpbmcoZCxyKSxhPTEyfWlmKDQyPT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTI7Zm9yKHZhciBnPW4tMSxwPSExO3I8Zzspe3ZhciBiPWUuY2hhckNvZGVBdChyKTtpZig0Mj09PWImJjQ3PT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTIscD0hMDticmVha31yKyssWm4oYikmJigxMz09PWImJjEwPT09ZS5jaGFyQ29kZUF0KHIpJiZyKysscysrLGw9cil9cmV0dXJuIHB8fChyKyssaD0xKSxpPWUuc3Vic3RyaW5nKGQsciksYT0xM31yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKyssYT0xNjtjYXNlIDQ1OmlmKGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksKytyPT09bnx8IVluKGUuY2hhckNvZGVBdChyKSkpcmV0dXJuIGE9MTY7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gaSs9ZnVuY3Rpb24oKXt2YXIgdD1yO2lmKDQ4PT09ZS5jaGFyQ29kZUF0KHIpKXIrKztlbHNlIGZvcihyKys7cjxlLmxlbmd0aCYmWW4oZS5jaGFyQ29kZUF0KHIpKTspcisrO2lmKHI8ZS5sZW5ndGgmJjQ2PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighKCsrcjxlLmxlbmd0aCYmWW4oZS5jaGFyQ29kZUF0KHIpKSkpcmV0dXJuIGg9MyxlLnN1YnN0cmluZyh0LHIpO2ZvcihyKys7cjxlLmxlbmd0aCYmWW4oZS5jaGFyQ29kZUF0KHIpKTspcisrfXZhciBuPXI7aWYocjxlLmxlbmd0aCYmKDY5PT09ZS5jaGFyQ29kZUF0KHIpfHwxMDE9PT1lLmNoYXJDb2RlQXQocikpKWlmKCgrK3I8ZS5sZW5ndGgmJjQzPT09ZS5jaGFyQ29kZUF0KHIpfHw0NT09PWUuY2hhckNvZGVBdChyKSkmJnIrKyxyPGUubGVuZ3RoJiZZbihlLmNoYXJDb2RlQXQocikpKXtmb3IocisrO3I8ZS5sZW5ndGgmJlluKGUuY2hhckNvZGVBdChyKSk7KXIrKztuPXJ9ZWxzZSBoPTM7cmV0dXJuIGUuc3Vic3RyaW5nKHQsbil9KCksYT0xMTtkZWZhdWx0OmZvcig7cjxuJiZtKHQpOylyKyssdD1lLmNoYXJDb2RlQXQocik7aWYobyE9PXIpe3N3aXRjaChpPWUuc3Vic3RyaW5nKG8scikpe2Nhc2UidHJ1ZSI6cmV0dXJuIGE9ODtjYXNlImZhbHNlIjpyZXR1cm4gYT05O2Nhc2UibnVsbCI6cmV0dXJuIGE9N31yZXR1cm4gYT0xNn1yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKyssYT0xNn19ZnVuY3Rpb24gbShlKXtpZihYbihlKXx8Wm4oZSkpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2UgMTI1OmNhc2UgOTM6Y2FzZSAxMjM6Y2FzZSA5MTpjYXNlIDM0OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDQ3OnJldHVybiExfXJldHVybiEwfXJldHVybntzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXtyPWUsaT0iIixvPTAsYT0xNixoPTB9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNjYW46dD9mdW5jdGlvbigpe3ZhciBlO2Rve2U9ZCgpfXdoaWxlKGU+PTEyJiZlPD0xNSk7cmV0dXJuIGV9OmQsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBpfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBvfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiByLW99LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gby11fSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGh9fX1mdW5jdGlvbiBYbihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTE9PT1lfHwxMj09PWV8fDE2MD09PWV8fDU3NjA9PT1lfHxlPj04MTkyJiZlPD04MjAzfHw4MjM5PT09ZXx8ODI4Nz09PWV8fDEyMjg4PT09ZXx8NjUyNzk9PT1lfWZ1bmN0aW9uIFpuKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfWZ1bmN0aW9uIFluKGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gUW4oZSx0LG4pe3ZhciByLGksbyxhLHM7aWYodCl7Zm9yKGE9dC5vZmZzZXQscz1hK3QubGVuZ3RoLG89YTtvPjAmJiF0cihlLG8tMSk7KW8tLTtmb3IodmFyIGM9cztjPGUubGVuZ3RoJiYhdHIoZSxjKTspYysrO2k9ZS5zdWJzdHJpbmcobyxjKSxyPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPTAsaT10LnRhYlNpemV8fDQ7Zm9yKDtuPGUubGVuZ3RoOyl7dmFyIG89ZS5jaGFyQXQobik7aWYoIiAiPT09bylyKys7ZWxzZXtpZigiXHQiIT09bylicmVhaztyKz1pfW4rK31yZXR1cm4gTWF0aC5mbG9vcihyL2kpfShpLG4pfWVsc2UgaT1lLHI9MCxvPTAsYT0wLHM9ZS5sZW5ndGg7dmFyIGwsdT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10LmNoYXJBdChuKTtpZigiXHIiPT09cilyZXR1cm4gbisxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQobisxKT8iXHJcbiI6IlxyIjtpZigiXG4iPT09cilyZXR1cm4iXG4ifXJldHVybiBlJiZlLmVvbHx8IlxuIn0obixlKSxoPSExLGY9MDtsPW4uaW5zZXJ0U3BhY2VzP2VyKCIgIixuLnRhYlNpemV8fDQpOiJcdCI7dmFyIGQ9Sm4oaSwhMSksbT0hMTtmdW5jdGlvbiBnKCl7cmV0dXJuIHUrZXIobCxyK2YpfWZ1bmN0aW9uIHAoKXt2YXIgZT1kLnNjYW4oKTtmb3IoaD0hMTsxNT09PWV8fDE0PT09ZTspaD1ofHwxND09PWUsZT1kLnNjYW4oKTtyZXR1cm4gbT0xNj09PWV8fDAhPT1kLmdldFRva2VuRXJyb3IoKSxlfXZhciBiPVtdO2Z1bmN0aW9uIHYobixyLGkpe218fHQmJiEocjxzJiZpPmEpfHxlLnN1YnN0cmluZyhyLGkpPT09bnx8Yi5wdXNoKHtvZmZzZXQ6cixsZW5ndGg6aS1yLGNvbnRlbnQ6bn0pfXZhciB5PXAoKTtpZigxNyE9PXkpe3ZhciBDPWQuZ2V0VG9rZW5PZmZzZXQoKStvO3YoZXIobCxyKSxvLEMpfWZvcig7MTchPT15Oyl7Zm9yKHZhciB3PWQuZ2V0VG9rZW5PZmZzZXQoKStkLmdldFRva2VuTGVuZ3RoKCkrbyxfPXAoKSxTPSIiLEE9ITE7IWgmJigxMj09PV98fDEzPT09Xyk7KXt2KCIgIix3LGQuZ2V0VG9rZW5PZmZzZXQoKStvKSx3PWQuZ2V0VG9rZW5PZmZzZXQoKStkLmdldFRva2VuTGVuZ3RoKCkrbyxTPShBPTEyPT09Xyk/ZygpOiIiLF89cCgpfWlmKDI9PT1fKTEhPT15JiYoZi0tLFM9ZygpKTtlbHNlIGlmKDQ9PT1fKTMhPT15JiYoZi0tLFM9ZygpKTtlbHNle3N3aXRjaCh5KXtjYXNlIDM6Y2FzZSAxOmYrKyxTPWcoKTticmVhaztjYXNlIDU6Y2FzZSAxMjpTPWcoKTticmVhaztjYXNlIDEzOmg/Uz1nKCk6QXx8KFM9IiAiKTticmVhaztjYXNlIDY6QXx8KFM9IiAiKTticmVhaztjYXNlIDEwOmlmKDY9PT1fKXtBfHwoUz0iIik7YnJlYWt9Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMTpjYXNlIDI6Y2FzZSA0OjEyPT09X3x8MTM9PT1fP0F8fChTPSIgIik6NSE9PV8mJjE3IT09XyYmKG09ITApO2JyZWFrO2Nhc2UgMTY6bT0hMH0haHx8MTIhPT1fJiYxMyE9PV98fChTPWcoKSl9MTc9PT1fJiYoUz1uLmluc2VydEZpbmFsTmV3bGluZT91OiIiKSx2KFMsdyxkLmdldFRva2VuT2Zmc2V0KCkrbykseT1ffXJldHVybiBifWZ1bmN0aW9uIGVyKGUsdCl7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPWU7cmV0dXJuIG59ZnVuY3Rpb24gdHIoZSx0KXtyZXR1cm4tMSE9PSJcclxuIi5pbmRleE9mKGUuY2hhckF0KHQpKX12YXIgbnI7c2VsZi5vbm1lc3NhZ2U9ZT0+e3pufHxHbihudWxsKX0sKG5yfHwobnI9e30pKS5ERUZBVUxUPXthbGxvd1RyYWlsaW5nQ29tbWE6ITF9O3ZhciBycixpcixvcixhcixzcixjcixscix1cixocixmcixkcixtcixncixwcixicix2cix5cixDcix3cixfcixTcixBcixFcix4cixOcixrcixMcixUcixPcixJcixNcixQcixScixWcixGcixEcixLcixqcixVcixCcixxciwkcixXcixIcix6cixHcixKcixYcixacixZcj1KbixRcj1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPW5yLkRFRkFVTFQpO3ZhciByPW51bGwsaT1bXSxvPVtdO2Z1bmN0aW9uIGEoZSl7QXJyYXkuaXNBcnJheShpKT9pLnB1c2goZSk6bnVsbCE9PXImJihpW3JdPWUpfXJldHVybiBmdW5jdGlvbihlLHQsbil7dm9pZCAwPT09biYmKG49bnIuREVGQVVMVCk7dmFyIHI9Sm4oZSwhMSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZT9mdW5jdGlvbigpe3JldHVybiBlKHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9mdW5jdGlvbih0KXtyZXR1cm4gZSh0LHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19dmFyIGE9aSh0Lm9uT2JqZWN0QmVnaW4pLHM9byh0Lm9uT2JqZWN0UHJvcGVydHkpLGM9aSh0Lm9uT2JqZWN0RW5kKSxsPWkodC5vbkFycmF5QmVnaW4pLHU9aSh0Lm9uQXJyYXlFbmQpLGg9byh0Lm9uTGl0ZXJhbFZhbHVlKSxmPW8odC5vblNlcGFyYXRvciksZD1pKHQub25Db21tZW50KSxtPW8odC5vbkVycm9yKSxnPW4mJm4uZGlzYWxsb3dDb21tZW50cyxwPW4mJm4uYWxsb3dUcmFpbGluZ0NvbW1hO2Z1bmN0aW9uIGIoKXtmb3IoOzspe3ZhciBlPXIuc2NhbigpO3N3aXRjaChyLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OnYoMTQpO2JyZWFrO2Nhc2UgNTp2KDE1KTticmVhaztjYXNlIDM6digxMyk7YnJlYWs7Y2FzZSAxOmd8fHYoMTEpO2JyZWFrO2Nhc2UgMjp2KDEyKTticmVhaztjYXNlIDY6digxNil9c3dpdGNoKGUpe2Nhc2UgMTI6Y2FzZSAxMzpnP3YoMTApOmQoKTticmVhaztjYXNlIDE2OnYoMSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGV9fX1mdW5jdGlvbiB2KGUsdCxuKXtpZih2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLG0oZSksdC5sZW5ndGgrbi5sZW5ndGg+MClmb3IodmFyIGk9ci5nZXRUb2tlbigpOzE3IT09aTspe2lmKC0xIT09dC5pbmRleE9mKGkpKXtiKCk7YnJlYWt9aWYoLTEhPT1uLmluZGV4T2YoaSkpYnJlYWs7aT1iKCl9fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ci5nZXRUb2tlblZhbHVlKCk7cmV0dXJuIGU/aCh0KTpzKHQpLGIoKSwhMH1mdW5jdGlvbiBDKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAxMTp2YXIgZT1yLmdldFRva2VuVmFsdWUoKSx0PU51bWJlcihlKTtpc05hTih0KSYmKHYoMiksdD0wKSxoKHQpO2JyZWFrO2Nhc2UgNzpoKG51bGwpO2JyZWFrO2Nhc2UgODpoKCEwKTticmVhaztjYXNlIDk6aCghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gYigpLCEwfWZ1bmN0aW9uIHcoKXtyZXR1cm4gMTAhPT1yLmdldFRva2VuKCk/KHYoMyxbXSxbMiw1XSksITEpOih5KCExKSw2PT09ci5nZXRUb2tlbigpPyhmKCI6IiksYigpLEEoKXx8dig0LFtdLFsyLDVdKSk6dig1LFtdLFsyLDVdKSwhMCl9ZnVuY3Rpb24gXygpe2EoKSxiKCk7Zm9yKHZhciBlPSExOzIhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8dig0LFtdLFtdKSxmKCIsIiksYigpLDI9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZ2KDYsW10sW10pO3coKXx8dig0LFtdLFsyLDVdKSxlPSEwfXJldHVybiBjKCksMiE9PXIuZ2V0VG9rZW4oKT92KDcsWzJdLFtdKTpiKCksITB9ZnVuY3Rpb24gUygpe2woKSxiKCk7Zm9yKHZhciBlPSExOzQhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8dig0LFtdLFtdKSxmKCIsIiksYigpLDQ9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZ2KDYsW10sW10pO0EoKXx8dig0LFtdLFs0LDVdKSxlPSEwfXJldHVybiB1KCksNCE9PXIuZ2V0VG9rZW4oKT92KDgsWzRdLFtdKTpiKCksITB9ZnVuY3Rpb24gQSgpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMzpyZXR1cm4gUygpO2Nhc2UgMTpyZXR1cm4gXygpO2Nhc2UgMTA6cmV0dXJuIHkoITApO2RlZmF1bHQ6cmV0dXJuIEMoKX19aWYoYigpLDE3PT09ci5nZXRUb2tlbigpKXJldHVybiEhbi5hbGxvd0VtcHR5Q29udGVudHx8KHYoNCxbXSxbXSksITEpO2lmKCFBKCkpcmV0dXJuIHYoNCxbXSxbXSksITE7MTchPT1yLmdldFRva2VuKCkmJnYoOSxbXSxbXSl9KGUse29uT2JqZWN0QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT17fTthKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbk9iamVjdFByb3BlcnR5OmZ1bmN0aW9uKGUpe3I9ZX0sb25PYmplY3RFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uQXJyYXlCZWdpbjpmdW5jdGlvbigpe3ZhciBlPVtdO2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uQXJyYXlFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uTGl0ZXJhbFZhbHVlOmEsb25FcnJvcjpmdW5jdGlvbihlLG4scil7dC5wdXNoKHtlcnJvcjplLG9mZnNldDpuLGxlbmd0aDpyfSl9fSxuKSxpWzBdfSxlaT1mdW5jdGlvbiBlKHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0hMSksZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH0odCxuLHIpKXt2YXIgaT10LmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmaVtvXS5vZmZzZXQ8PW47bysrKXt2YXIgYT1lKGlbb10sbixyKTtpZihhKXJldHVybiBhfXJldHVybiB0fX0sdGk9ZnVuY3Rpb24gZSh0KXtpZighdC5wYXJlbnR8fCF0LnBhcmVudC5jaGlsZHJlbilyZXR1cm5bXTt2YXIgbj1lKHQucGFyZW50KTtpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIHI9dC5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWU7bi5wdXNoKHIpfWVsc2UgaWYoImFycmF5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBpPXQucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodCk7LTEhPT1pJiZuLnB1c2goaSl9cmV0dXJuIG59LG5pPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGUpO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPTAsaT10LmNoaWxkcmVuO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdLGE9by5jaGlsZHJlblsxXTthJiYobltvLmNoaWxkcmVuWzBdLnZhbHVlXT1lKGEpKX1yZXR1cm4gbjtjYXNlIm51bGwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdC52YWx1ZTtkZWZhdWx0OnJldHVybn19O2Z1bmN0aW9uIHJpKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYobnVsbD09ZXx8bnVsbD09dClyZXR1cm4hMTtpZih0eXBlb2YgZSE9dHlwZW9mIHQpcmV0dXJuITE7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoZSkhPT1BcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuLHI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKCFyaShlW25dLHRbbl0pKXJldHVybiExfWVsc2V7dmFyIGk9W107Zm9yKHIgaW4gZSlpLnB1c2gocik7aS5zb3J0KCk7dmFyIG89W107Zm9yKHIgaW4gdClvLnB1c2gocik7aWYoby5zb3J0KCksIXJpKGksbykpcmV0dXJuITE7Zm9yKG49MDtuPGkubGVuZ3RoO24rKylpZighcmkoZVtpW25dXSx0W2lbbl1dKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBpaShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gb2koZSl7cmV0dXJuIHZvaWQgMCE9PWV9ZnVuY3Rpb24gYWkoZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX1mdW5jdGlvbiBzaShlLHQpe3ZhciBuPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiBuPjA/ZS5sYXN0SW5kZXhPZih0KT09PW46MD09PW4mJmU9PT10fWZ1bmN0aW9uIGNpKGUpe3ZhciB0PSIiOyhmdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPHQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfSkoZSwiKD9pKSIpJiYoZT1lLnN1YnN0cmluZyg0KSx0PSJpIik7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCsidSIpfWNhdGNoKG4pe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQpfWNhdGNoKGUpe3JldHVybn19fShpcj1ycnx8KHJyPXt9KSkuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LGlyLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LChhcj1vcnx8KG9yPXt9KSkuTUlOX1ZBTFVFPTAsYXIuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKGNyPXNyfHwoc3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PU51bWJlci5NQVhfVkFMVUUmJihlPW9yLk1BWF9WQUxVRSksdD09PU51bWJlci5NQVhfVkFMVUUmJih0PW9yLk1BWF9WQUxVRSkse2xpbmU6ZSxjaGFyYWN0ZXI6dH19LGNyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLm9iamVjdExpdGVyYWwodCkmJmNvLnVpbnRlZ2VyKHQubGluZSkmJmNvLnVpbnRlZ2VyKHQuY2hhcmFjdGVyKX0sKHVyPWxyfHwobHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYoY28udWludGVnZXIoZSkmJmNvLnVpbnRlZ2VyKHQpJiZjby51aW50ZWdlcihuKSYmY28udWludGVnZXIocikpcmV0dXJue3N0YXJ0OnNyLmNyZWF0ZShlLHQpLGVuZDpzci5jcmVhdGUobixyKX07aWYoc3IuaXMoZSkmJnNyLmlzKHQpKXJldHVybntzdGFydDplLGVuZDp0fTt0aHJvdyBuZXcgRXJyb3IoIlJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1siK2UrIiwgIit0KyIsICIrbisiLCAiK3IrIl0iKX0sdXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28ub2JqZWN0TGl0ZXJhbCh0KSYmc3IuaXModC5zdGFydCkmJnNyLmlzKHQuZW5kKX0sKGZyPWhyfHwoaHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUscmFuZ2U6dH19LGZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmxyLmlzKHQucmFuZ2UpJiYoY28uc3RyaW5nKHQudXJpKXx8Y28udW5kZWZpbmVkKHQudXJpKSl9LChtcj1kcnx8KGRyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt0YXJnZXRVcmk6ZSx0YXJnZXRSYW5nZTp0LHRhcmdldFNlbGVjdGlvblJhbmdlOm4sb3JpZ2luU2VsZWN0aW9uUmFuZ2U6cn19LG1yLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmxyLmlzKHQudGFyZ2V0UmFuZ2UpJiZjby5zdHJpbmcodC50YXJnZXRVcmkpJiYobHIuaXModC50YXJnZXRTZWxlY3Rpb25SYW5nZSl8fGNvLnVuZGVmaW5lZCh0LnRhcmdldFNlbGVjdGlvblJhbmdlKSkmJihsci5pcyh0Lm9yaWdpblNlbGVjdGlvblJhbmdlKXx8Y28udW5kZWZpbmVkKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX0sKHByPWdyfHwoZ3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3JlZDplLGdyZWVuOnQsYmx1ZTpuLGFscGhhOnJ9fSxwci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5udW1iZXJSYW5nZSh0LnJlZCwwLDEpJiZjby5udW1iZXJSYW5nZSh0LmdyZWVuLDAsMSkmJmNvLm51bWJlclJhbmdlKHQuYmx1ZSwwLDEpJiZjby5udW1iZXJSYW5nZSh0LmFscGhhLDAsMSl9LCh2cj1icnx8KGJyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsY29sb3I6dH19LHZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGxyLmlzKHQucmFuZ2UpJiZnci5pcyh0LmNvbG9yKX0sKENyPXlyfHwoeXI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntsYWJlbDplLHRleHRFZGl0OnQsYWRkaXRpb25hbFRleHRFZGl0czpufX0sQ3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uc3RyaW5nKHQubGFiZWwpJiYoY28udW5kZWZpbmVkKHQudGV4dEVkaXQpfHxWci5pcyh0KSkmJihjby51bmRlZmluZWQodC5hZGRpdGlvbmFsVGV4dEVkaXRzKXx8Y28udHlwZWRBcnJheSh0LmFkZGl0aW9uYWxUZXh0RWRpdHMsVnIuaXMpKX0sKF9yPXdyfHwod3I9e30pKS5Db21tZW50PSJjb21tZW50Iixfci5JbXBvcnRzPSJpbXBvcnRzIixfci5SZWdpb249InJlZ2lvbiIsKEFyPVNyfHwoU3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz17c3RhcnRMaW5lOmUsZW5kTGluZTp0fTtyZXR1cm4gY28uZGVmaW5lZChuKSYmKG8uc3RhcnRDaGFyYWN0ZXI9biksY28uZGVmaW5lZChyKSYmKG8uZW5kQ2hhcmFjdGVyPXIpLGNvLmRlZmluZWQoaSkmJihvLmtpbmQ9aSksb30sQXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28udWludGVnZXIodC5zdGFydExpbmUpJiZjby51aW50ZWdlcih0LnN0YXJ0TGluZSkmJihjby51bmRlZmluZWQodC5zdGFydENoYXJhY3Rlcil8fGNvLnVpbnRlZ2VyKHQuc3RhcnRDaGFyYWN0ZXIpKSYmKGNvLnVuZGVmaW5lZCh0LmVuZENoYXJhY3Rlcil8fGNvLnVpbnRlZ2VyKHQuZW5kQ2hhcmFjdGVyKSkmJihjby51bmRlZmluZWQodC5raW5kKXx8Y28uc3RyaW5nKHQua2luZCkpfSwoeHI9RXJ8fChFcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsb2NhdGlvbjplLG1lc3NhZ2U6dH19LHhyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmhyLmlzKHQubG9jYXRpb24pJiZjby5zdHJpbmcodC5tZXNzYWdlKX0sKGtyPU5yfHwoTnI9e30pKS5FcnJvcj0xLGtyLldhcm5pbmc9Mixrci5JbmZvcm1hdGlvbj0zLGtyLkhpbnQ9NCwoVHI9THJ8fChMcj17fSkpLlVubmVjZXNzYXJ5PTEsVHIuRGVwcmVjYXRlZD0yLChPcnx8KE9yPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gbnVsbCE9dCYmY28uc3RyaW5nKHQuaHJlZil9LChNcj1Jcnx8KElyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT17cmFuZ2U6ZSxtZXNzYWdlOnR9O3JldHVybiBjby5kZWZpbmVkKG4pJiYoYS5zZXZlcml0eT1uKSxjby5kZWZpbmVkKHIpJiYoYS5jb2RlPXIpLGNvLmRlZmluZWQoaSkmJihhLnNvdXJjZT1pKSxjby5kZWZpbmVkKG8pJiYoYS5yZWxhdGVkSW5mb3JtYXRpb249byksYX0sTXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lO3JldHVybiBjby5kZWZpbmVkKG4pJiZsci5pcyhuLnJhbmdlKSYmY28uc3RyaW5nKG4ubWVzc2FnZSkmJihjby5udW1iZXIobi5zZXZlcml0eSl8fGNvLnVuZGVmaW5lZChuLnNldmVyaXR5KSkmJihjby5pbnRlZ2VyKG4uY29kZSl8fGNvLnN0cmluZyhuLmNvZGUpfHxjby51bmRlZmluZWQobi5jb2RlKSkmJihjby51bmRlZmluZWQobi5jb2RlRGVzY3JpcHRpb24pfHxjby5zdHJpbmcobnVsbD09PSh0PW4uY29kZURlc2NyaXB0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ocmVmKSkmJihjby5zdHJpbmcobi5zb3VyY2UpfHxjby51bmRlZmluZWQobi5zb3VyY2UpKSYmKGNvLnVuZGVmaW5lZChuLnJlbGF0ZWRJbmZvcm1hdGlvbil8fGNvLnR5cGVkQXJyYXkobi5yZWxhdGVkSW5mb3JtYXRpb24sRXIuaXMpKX0sKFJyPVByfHwoUHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT17dGl0bGU6ZSxjb21tYW5kOnR9O3JldHVybiBjby5kZWZpbmVkKG4pJiZuLmxlbmd0aD4wJiYoaS5hcmd1bWVudHM9biksaX0sUnIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uZGVmaW5lZCh0KSYmY28uc3RyaW5nKHQudGl0bGUpJiZjby5zdHJpbmcodC5jb21tYW5kKX0sKEZyPVZyfHwoVnI9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0fX0sRnIuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnR9fSxGci5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIn19LEZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLm9iamVjdExpdGVyYWwodCkmJmNvLnN0cmluZyh0Lm5ld1RleHQpJiZsci5pcyh0LnJhbmdlKX0sKEtyPURyfHwoRHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtsYWJlbDplfTtyZXR1cm4gdm9pZCAwIT09dCYmKHIubmVlZHNDb25maXJtYXRpb249dCksdm9pZCAwIT09biYmKHIuZGVzY3JpcHRpb249bikscn0sS3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdm9pZCAwIT09dCYmY28ub2JqZWN0TGl0ZXJhbCh0KSYmY28uc3RyaW5nKHQubGFiZWwpJiYoY28uYm9vbGVhbih0Lm5lZWRzQ29uZmlybWF0aW9uKXx8dm9pZCAwPT09dC5uZWVkc0NvbmZpcm1hdGlvbikmJihjby5zdHJpbmcodC5kZXNjcmlwdGlvbil8fHZvaWQgMD09PXQuZGVzY3JpcHRpb24pfSwoanJ8fChqcj17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0sKEJyPVVyfHwoVXI9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxCci5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0LGFubm90YXRpb25JZDpufX0sQnIuZGVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6dH19LEJyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFZyLmlzKHQpJiYoRHIuaXModC5hbm5vdGF0aW9uSWQpfHxqci5pcyh0LmFubm90YXRpb25JZCkpfSwoJHI9cXJ8fChxcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0ZXh0RG9jdW1lbnQ6ZSxlZGl0czp0fX0sJHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uZGVmaW5lZCh0KSYmZGkuaXModC50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KHQuZWRpdHMpfSwoSHI9V3J8fChXcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2tpbmQ6ImNyZWF0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10Lm92ZXJ3cml0ZSYmdm9pZCAwPT09dC5pZ25vcmVJZkV4aXN0c3x8KHIub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoci5hbm5vdGF0aW9uSWQ9bikscn0sSHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImNyZWF0ZSI9PT10LmtpbmQmJmNvLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHxjby5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8Y28uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8anIuaXModC5hbm5vdGF0aW9uSWQpKX0sKEdyPXpyfHwoenI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOmUsbmV3VXJpOnR9O3JldHVybiB2b2lkIDA9PT1ufHx2b2lkIDA9PT1uLm92ZXJ3cml0ZSYmdm9pZCAwPT09bi5pZ25vcmVJZkV4aXN0c3x8KGkub3B0aW9ucz1uKSx2b2lkIDAhPT1yJiYoaS5hbm5vdGF0aW9uSWQ9ciksaX0sR3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmInJlbmFtZSI9PT10LmtpbmQmJmNvLnN0cmluZyh0Lm9sZFVyaSkmJmNvLnN0cmluZyh0Lm5ld1VyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHxjby5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8Y28uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8anIuaXModC5hbm5vdGF0aW9uSWQpKX0sKFhyPUpyfHwoSnI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtraW5kOiJkZWxldGUiLHVyaTplfTtyZXR1cm4gdm9pZCAwPT09dHx8dm9pZCAwPT09dC5yZWN1cnNpdmUmJnZvaWQgMD09PXQuaWdub3JlSWZOb3RFeGlzdHN8fChyLm9wdGlvbnM9dCksdm9pZCAwIT09biYmKHIuYW5ub3RhdGlvbklkPW4pLHJ9LFhyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJkZWxldGUiPT09dC5raW5kJiZjby5zdHJpbmcodC51cmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLnJlY3Vyc2l2ZXx8Y28uYm9vbGVhbih0Lm9wdGlvbnMucmVjdXJzaXZlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHN8fGNvLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fGpyLmlzKHQuYW5ub3RhdGlvbklkKSl9LChacnx8KFpyPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmKHZvaWQgMCE9PXQuY2hhbmdlc3x8dm9pZCAwIT09dC5kb2N1bWVudENoYW5nZXMpJiYodm9pZCAwPT09dC5kb2N1bWVudENoYW5nZXN8fHQuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gY28uc3RyaW5nKGUua2luZCk/V3IuaXMoZSl8fHpyLmlzKGUpfHxKci5pcyhlKTpxci5pcyhlKX0pKSl9O3ZhciBsaSx1aSxoaSxmaSxkaSxtaSxnaSxwaSxiaSx2aSx5aSxDaSx3aSxfaSxTaSxBaSxFaSx4aSxOaSxraSxMaSxUaSxPaSxJaSxNaSxQaSxSaSxWaSxGaSxEaSxLaSxqaSxVaSxCaSxxaSwkaSxXaSxIaSx6aSxHaSxKaSxYaSxaaSxZaSxRaSxlbyx0byxubyxybyxpbyxvbyxhbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVkaXRzPWUsdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucz10fXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPVZyLmluc2VydChlLHQpOmpyLmlzKG4pPyhpPW4scj1Vci5pbnNlcnQoZSx0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxpPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHI9VXIuaW5zZXJ0KGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPVZyLnJlcGxhY2UoZSx0KTpqci5pcyhuKT8oaT1uLHI9VXIucmVwbGFjZShlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj1Vci5yZXBsYWNlKGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYodm9pZCAwPT09dD9uPVZyLmRlbChlKTpqci5pcyh0KT8ocj10LG49VXIuZGVsKGUsdCkpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UodCksbj1Vci5kZWwoZSxyKSksdGhpcy5lZGl0cy5wdXNoKG4pLHZvaWQgMCE9PXIpcmV0dXJuIHJ9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmVkaXRzLnB1c2goZSl9LGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZWRpdHMuc3BsaWNlKDAsdGhpcy5lZGl0cy5sZW5ndGgpfSxlLnByb3RvdHlwZS5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLiIpfSxlfSgpLHNvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9hbm5vdGF0aW9ucz12b2lkIDA9PT1lP09iamVjdC5jcmVhdGUobnVsbCk6ZSx0aGlzLl9jb3VudGVyPTAsdGhpcy5fc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm1hbmFnZT1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKGpyLmlzKGUpP249ZToobj10aGlzLm5leHRJZCgpLHQ9ZSksdm9pZCAwIT09dGhpcy5fYW5ub3RhdGlvbnNbbl0pdGhyb3cgbmV3IEVycm9yKCJJZCAiK24rIiBpcyBhbHJlYWR5IGluIHVzZS4iKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgIituKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnNbbl09dCx0aGlzLl9zaXplKyssbn0sZS5wcm90b3R5cGUubmV4dElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvdW50ZXIrKyx0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCl9LGV9KCk7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuX3RleHRFZGl0Q2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpLHZvaWQgMCE9PWU/KHRoaXMuX3dvcmtzcGFjZUVkaXQ9ZSxlLmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IHNvKGUuY2hhbmdlQW5ub3RhdGlvbnMpLGUuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksZS5kb2N1bWVudENoYW5nZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYocXIuaXMoZSkpe3ZhciBuPW5ldyBhbyhlLmVkaXRzLHQuX2NoYW5nZUFubm90YXRpb25zKTt0Ll90ZXh0RWRpdENoYW5nZXNbZS50ZXh0RG9jdW1lbnQudXJpXT1ufX0pKSk6ZS5jaGFuZ2VzJiZPYmplY3Qua2V5cyhlLmNoYW5nZXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBhbyhlLmNoYW5nZXNbbl0pO3QuX3RleHRFZGl0Q2hhbmdlc1tuXT1yfSkpKTp0aGlzLl93b3Jrc3BhY2VFZGl0PXt9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWRpdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDAhPT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyYmKDA9PT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5zaXplP3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dm9pZCAwOnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpLHRoaXMuX3dvcmtzcGFjZUVkaXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYoZGkuaXMoZSkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHQ9e3VyaTplLnVyaSx2ZXJzaW9uOmUudmVyc2lvbn07aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV0pKXt2YXIgbj17dGV4dERvY3VtZW50OnQsZWRpdHM6aT1bXX07dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChuKSxyPW5ldyBhbyhpLHRoaXMuX2NoYW5nZUFubm90YXRpb25zKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbdC51cmldPXJ9cmV0dXJuIHJ9aWYodGhpcy5pbml0Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBub3JtYWwgdGV4dCBlZGl0IGNoYW5nZXMuIik7dmFyIHI7aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXSkpe3ZhciBpPVtdO3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1tlXT1pLHI9bmV3IGFvKGkpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXT1yfXJldHVybiByfSxlLnByb3RvdHlwZS5pbml0RG9jdW1lbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMmJnZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBzbyx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz1bXSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKX0sZS5wcm90b3R5cGUuaW5pdENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCkpfSxlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGksbztpZihEci5pcyh0KXx8anIuaXModCk/cj10Om49dCx2b2lkIDA9PT1yP2k9V3IuY3JlYXRlKGUsbik6KG89anIuaXMocik/cjp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1Xci5jcmVhdGUoZSxuLG8pKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKGkpLHZvaWQgMCE9PW8pcmV0dXJuIG99LGUucHJvdG90eXBlLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgaSxvLGE7aWYoRHIuaXMobil8fGpyLmlzKG4pP2k9bjpyPW4sdm9pZCAwPT09aT9vPXpyLmNyZWF0ZShlLHQscik6KGE9anIuaXMoaSk/aTp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoaSksbz16ci5jcmVhdGUoZSx0LHIsYSkpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gobyksdm9pZCAwIT09YSlyZXR1cm4gYX0sZS5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcixpLG87aWYoRHIuaXModCl8fGpyLmlzKHQpP3I9dDpuPXQsdm9pZCAwPT09cj9pPUpyLmNyZWF0ZShlLG4pOihvPWpyLmlzKHIpP3I6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9SnIuY3JlYXRlKGUsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChpKSx2b2lkIDAhPT1vKXJldHVybiBvfX0oKSwodWk9bGl8fChsaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57dXJpOmV9fSx1aS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5kZWZpbmVkKHQpJiZjby5zdHJpbmcodC51cmkpfSwoZmk9aGl8fChoaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSxmaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5kZWZpbmVkKHQpJiZjby5zdHJpbmcodC51cmkpJiZjby5pbnRlZ2VyKHQudmVyc2lvbil9LChtaT1kaXx8KGRpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LG1pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmNvLnN0cmluZyh0LnVyaSkmJihudWxsPT09dC52ZXJzaW9ufHxjby5pbnRlZ2VyKHQudmVyc2lvbikpfSwocGk9Z2l8fChnaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57dXJpOmUsbGFuZ3VhZ2VJZDp0LHZlcnNpb246bix0ZXh0OnJ9fSxwaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5kZWZpbmVkKHQpJiZjby5zdHJpbmcodC51cmkpJiZjby5zdHJpbmcodC5sYW5ndWFnZUlkKSYmY28uaW50ZWdlcih0LnZlcnNpb24pJiZjby5zdHJpbmcodC50ZXh0KX0sKHZpPWJpfHwoYmk9e30pKS5QbGFpblRleHQ9InBsYWludGV4dCIsdmkuTWFya2Rvd249Im1hcmtkb3duIixmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKHQpe3ZhciBuPXQ7cmV0dXJuIG49PT1lLlBsYWluVGV4dHx8bj09PWUuTWFya2Rvd259fShiaXx8KGJpPXt9KSksKHlpfHwoeWk9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5vYmplY3RMaXRlcmFsKGUpJiZiaS5pcyh0LmtpbmQpJiZjby5zdHJpbmcodC52YWx1ZSl9LCh3aT1DaXx8KENpPXt9KSkuVGV4dD0xLHdpLk1ldGhvZD0yLHdpLkZ1bmN0aW9uPTMsd2kuQ29uc3RydWN0b3I9NCx3aS5GaWVsZD01LHdpLlZhcmlhYmxlPTYsd2kuQ2xhc3M9Nyx3aS5JbnRlcmZhY2U9OCx3aS5Nb2R1bGU9OSx3aS5Qcm9wZXJ0eT0xMCx3aS5Vbml0PTExLHdpLlZhbHVlPTEyLHdpLkVudW09MTMsd2kuS2V5d29yZD0xNCx3aS5TbmlwcGV0PTE1LHdpLkNvbG9yPTE2LHdpLkZpbGU9MTcsd2kuUmVmZXJlbmNlPTE4LHdpLkZvbGRlcj0xOSx3aS5FbnVtTWVtYmVyPTIwLHdpLkNvbnN0YW50PTIxLHdpLlN0cnVjdD0yMix3aS5FdmVudD0yMyx3aS5PcGVyYXRvcj0yNCx3aS5UeXBlUGFyYW1ldGVyPTI1LChTaT1faXx8KF9pPXt9KSkuUGxhaW5UZXh0PTEsU2kuU25pcHBldD0yLChBaXx8KEFpPXt9KSkuRGVwcmVjYXRlZD0xLCh4aT1FaXx8KEVpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57bmV3VGV4dDplLGluc2VydDp0LHJlcGxhY2U6bn19LHhpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJmNvLnN0cmluZyh0Lm5ld1RleHQpJiZsci5pcyh0Lmluc2VydCkmJmxyLmlzKHQucmVwbGFjZSl9LChraT1OaXx8KE5pPXt9KSkuYXNJcz0xLGtpLmFkanVzdEluZGVudGF0aW9uPTIsKExpfHwoTGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJue2xhYmVsOmV9fSwoVGl8fChUaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntpdGVtczplfHxbXSxpc0luY29tcGxldGU6ISF0fX0sKElpPU9pfHwoT2k9e30pKS5mcm9tUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX0sSWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uc3RyaW5nKHQpfHxjby5vYmplY3RMaXRlcmFsKHQpJiZjby5zdHJpbmcodC5sYW5ndWFnZSkmJmNvLnN0cmluZyh0LnZhbHVlKX0sKE1pfHwoTWk9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhdCYmY28ub2JqZWN0TGl0ZXJhbCh0KSYmKHlpLmlzKHQuY29udGVudHMpfHxPaS5pcyh0LmNvbnRlbnRzKXx8Y28udHlwZWRBcnJheSh0LmNvbnRlbnRzLE9pLmlzKSkmJih2b2lkIDA9PT1lLnJhbmdlfHxsci5pcyhlLnJhbmdlKSl9LChQaXx8KFBpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/e2xhYmVsOmUsZG9jdW1lbnRhdGlvbjp0fTp7bGFiZWw6ZX19LChSaXx8KFJpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dmFyIGk9e2xhYmVsOmV9O3JldHVybiBjby5kZWZpbmVkKHQpJiYoaS5kb2N1bWVudGF0aW9uPXQpLGNvLmRlZmluZWQobik/aS5wYXJhbWV0ZXJzPW46aS5wYXJhbWV0ZXJzPVtdLGl9LChGaT1WaXx8KFZpPXt9KSkuVGV4dD0xLEZpLlJlYWQ9MixGaS5Xcml0ZT0zLChEaXx8KERpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiBjby5udW1iZXIodCkmJihuLmtpbmQ9dCksbn0sKGppPUtpfHwoS2k9e30pKS5GaWxlPTEsamkuTW9kdWxlPTIsamkuTmFtZXNwYWNlPTMsamkuUGFja2FnZT00LGppLkNsYXNzPTUsamkuTWV0aG9kPTYsamkuUHJvcGVydHk9NyxqaS5GaWVsZD04LGppLkNvbnN0cnVjdG9yPTksamkuRW51bT0xMCxqaS5JbnRlcmZhY2U9MTEsamkuRnVuY3Rpb249MTIsamkuVmFyaWFibGU9MTMsamkuQ29uc3RhbnQ9MTQsamkuU3RyaW5nPTE1LGppLk51bWJlcj0xNixqaS5Cb29sZWFuPTE3LGppLkFycmF5PTE4LGppLk9iamVjdD0xOSxqaS5LZXk9MjAsamkuTnVsbD0yMSxqaS5FbnVtTWVtYmVyPTIyLGppLlN0cnVjdD0yMyxqaS5FdmVudD0yNCxqaS5PcGVyYXRvcj0yNSxqaS5UeXBlUGFyYW1ldGVyPTI2LChVaXx8KFVpPXt9KSkuRGVwcmVjYXRlZD0xLChCaXx8KEJpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89e25hbWU6ZSxraW5kOnQsbG9jYXRpb246e3VyaTpyLHJhbmdlOm59fTtyZXR1cm4gaSYmKG8uY29udGFpbmVyTmFtZT1pKSxvfSwoJGk9cWl8fChxaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9e25hbWU6ZSxkZXRhaWw6dCxraW5kOm4scmFuZ2U6cixzZWxlY3Rpb25SYW5nZTppfTtyZXR1cm4gdm9pZCAwIT09byYmKGEuY2hpbGRyZW49byksYX0sJGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmY28uc3RyaW5nKHQubmFtZSkmJmNvLm51bWJlcih0LmtpbmQpJiZsci5pcyh0LnJhbmdlKSYmbHIuaXModC5zZWxlY3Rpb25SYW5nZSkmJih2b2lkIDA9PT10LmRldGFpbHx8Y28uc3RyaW5nKHQuZGV0YWlsKSkmJih2b2lkIDA9PT10LmRlcHJlY2F0ZWR8fGNvLmJvb2xlYW4odC5kZXByZWNhdGVkKSkmJih2b2lkIDA9PT10LmNoaWxkcmVufHxBcnJheS5pc0FycmF5KHQuY2hpbGRyZW4pKSYmKHZvaWQgMD09PXQudGFnc3x8QXJyYXkuaXNBcnJheSh0LnRhZ3MpKX0sKEhpPVdpfHwoV2k9e30pKS5FbXB0eT0iIixIaS5RdWlja0ZpeD0icXVpY2tmaXgiLEhpLlJlZmFjdG9yPSJyZWZhY3RvciIsSGkuUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0IixIaS5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixIaS5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLEhpLlNvdXJjZT0ic291cmNlIixIaS5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLEhpLlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCIsKEdpPXppfHwoemk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17ZGlhZ25vc3RpY3M6ZX07cmV0dXJuIG51bGwhPXQmJihuLm9ubHk9dCksbn0sR2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gY28uZGVmaW5lZCh0KSYmY28udHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLElyLmlzKSYmKHZvaWQgMD09PXQub25seXx8Y28udHlwZWRBcnJheSh0Lm9ubHksY28uc3RyaW5nKSl9LChYaT1KaXx8KEppPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17dGl0bGU6ZX0saT0hMDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGk9ITEsci5raW5kPXQpOlByLmlzKHQpP3IuY29tbWFuZD10OnIuZWRpdD10LGkmJnZvaWQgMCE9PW4mJihyLmtpbmQ9bikscn0sWGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmY28uc3RyaW5nKHQudGl0bGUpJiYodm9pZCAwPT09dC5kaWFnbm9zdGljc3x8Y28udHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLElyLmlzKSkmJih2b2lkIDA9PT10LmtpbmR8fGNvLnN0cmluZyh0LmtpbmQpKSYmKHZvaWQgMCE9PXQuZWRpdHx8dm9pZCAwIT09dC5jb21tYW5kKSYmKHZvaWQgMD09PXQuY29tbWFuZHx8UHIuaXModC5jb21tYW5kKSkmJih2b2lkIDA9PT10LmlzUHJlZmVycmVkfHxjby5ib29sZWFuKHQuaXNQcmVmZXJyZWQpKSYmKHZvaWQgMD09PXQuZWRpdHx8WnIuaXModC5lZGl0KSl9LChZaT1aaXx8KFppPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiBjby5kZWZpbmVkKHQpJiYobi5kYXRhPXQpLG59LFlpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmxyLmlzKHQucmFuZ2UpJiYoY28udW5kZWZpbmVkKHQuY29tbWFuZCl8fFByLmlzKHQuY29tbWFuZCkpfSwoZW89UWl8fChRaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0YWJTaXplOmUsaW5zZXJ0U3BhY2VzOnR9fSxlby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBjby5kZWZpbmVkKHQpJiZjby51aW50ZWdlcih0LnRhYlNpemUpJiZjby5ib29sZWFuKHQuaW5zZXJ0U3BhY2VzKX0sKG5vPXRvfHwodG89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLHRhcmdldDp0LGRhdGE6bn19LG5vLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGNvLmRlZmluZWQodCkmJmxyLmlzKHQucmFuZ2UpJiYoY28udW5kZWZpbmVkKHQudGFyZ2V0KXx8Y28uc3RyaW5nKHQudGFyZ2V0KSl9LChpbz1yb3x8KHJvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUscGFyZW50OnR9fSxpby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiZsci5pcyh0LnJhbmdlKSYmKHZvaWQgMD09PXQucGFyZW50fHxpby5pcyh0LnBhcmVudCkpfSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7dmFyIHI9ZS5sZW5ndGgvMnwwLGk9ZS5zbGljZSgwLHIpLG89ZS5zbGljZShyKTt0KGksbiksdChvLG4pO2Zvcih2YXIgYT0wLHM9MCxjPTA7YTxpLmxlbmd0aCYmczxvLmxlbmd0aDspe3ZhciBsPW4oaVthXSxvW3NdKTtlW2MrK109bDw9MD9pW2ErK106b1tzKytdfWZvcig7YTxpLmxlbmd0aDspZVtjKytdPWlbYSsrXTtmb3IoO3M8by5sZW5ndGg7KWVbYysrXT1vW3MrK107cmV0dXJuIGV9ZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBobyhlLHQsbixyKX0sZS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhKGNvLmRlZmluZWQodCkmJmNvLnN0cmluZyh0LnVyaSkmJihjby51bmRlZmluZWQodC5sYW5ndWFnZUlkKXx8Y28uc3RyaW5nKHQubGFuZ3VhZ2VJZCkpJiZjby51aW50ZWdlcih0LmxpbmVDb3VudCkmJmNvLmZ1bmModC5nZXRUZXh0KSYmY28uZnVuYyh0LnBvc2l0aW9uQXQpJiZjby5mdW5jKHQub2Zmc2V0QXQpKX0sZS5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciByPWUuZ2V0VGV4dCgpLGk9dChuLChmdW5jdGlvbihlLHQpe3ZhciBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSksbz1yLmxlbmd0aCxhPWkubGVuZ3RoLTE7YT49MDthLS0pe3ZhciBzPWlbYV0sYz1lLm9mZnNldEF0KHMucmFuZ2Uuc3RhcnQpLGw9ZS5vZmZzZXRBdChzLnJhbmdlLmVuZCk7aWYoIShsPD1vKSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtyPXIuc3Vic3RyaW5nKDAsYykrcy5uZXdUZXh0K3Iuc3Vic3RyaW5nKGwsci5sZW5ndGgpLG89Y31yZXR1cm4gcn19KG9vfHwob289e30pKTt2YXIgY28sbG8sdW8saG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ1cmkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVyc2lvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzKXtmb3IodmFyIGU9W10sdD10aGlzLl9jb250ZW50LG49ITAscj0wO3I8dC5sZW5ndGg7cisrKXtuJiYoZS5wdXNoKHIpLG49ITEpO3ZhciBpPXQuY2hhckF0KHIpO249IlxyIj09PWl8fCJcbiI9PT1pLCJcciI9PT1pJiZyKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChyKzEpJiZyKyt9biYmdC5sZW5ndGg+MCYmZS5wdXNoKHQubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c30sZS5wcm90b3R5cGUucG9zaXRpb25BdD1mdW5jdGlvbihlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm4gc3IuY3JlYXRlKDAsZSk7Zm9yKDtuPHI7KXt2YXIgaT1NYXRoLmZsb29yKChuK3IpLzIpO3RbaV0+ZT9yPWk6bj1pKzF9dmFyIG89bi0xO3JldHVybiBzci5jcmVhdGUobyxlLXRbb10pfSxlLnByb3RvdHlwZS5vZmZzZXRBdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7dmFyIG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGluZUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oKTtsbz1jb3x8KGNvPXt9KSx1bz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGxvLmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9LGxvLnVuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZX0sbG8uYm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZX0sbG8uc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09dW8uY2FsbChlKX0sbG8ubnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09dW8uY2FsbChlKX0sbG8ubnVtYmVyUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09dW8uY2FsbChlKSYmdDw9ZSYmZTw9bn0sbG8uaW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PXVvLmNhbGwoZSkmJi0yMTQ3NDgzNjQ4PD1lJiZlPD0yMTQ3NDgzNjQ3fSxsby51aW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PXVvLmNhbGwoZSkmJjA8PWUmJmU8PTIxNDc0ODM2NDd9LGxvLmZ1bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PXVvLmNhbGwoZSl9LGxvLm9iamVjdExpdGVyYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9LGxvLnR5cGVkQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSh0KX07dmFyIGZvLG1vLGdvLHBvLGJvLHZvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtjb25zdCB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSx0KXtmb3IobGV0IHQgb2YgZSlpZih2by5pc0luY3JlbWVudGFsKHQpKXtjb25zdCBlPXdvKHQucmFuZ2UpLG49dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxuKSt0LnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcocix0aGlzLl9jb250ZW50Lmxlbmd0aCk7Y29uc3QgaT1NYXRoLm1heChlLnN0YXJ0LmxpbmUsMCksbz1NYXRoLm1heChlLmVuZC5saW5lLDApO2xldCBhPXRoaXMuX2xpbmVPZmZzZXRzO2NvbnN0IHM9Q28odC50ZXh0LCExLG4pO2lmKG8taT09PXMubGVuZ3RoKWZvcihsZXQgZT0wLHQ9cy5sZW5ndGg7ZTx0O2UrKylhW2UraSsxXT1zW2VdO2Vsc2Ugcy5sZW5ndGg8MWU0P2Euc3BsaWNlKGkrMSxvLWksLi4ucyk6dGhpcy5fbGluZU9mZnNldHM9YT1hLnNsaWNlKDAsaSsxKS5jb25jYXQocyxhLnNsaWNlKG8rMSkpO2NvbnN0IGM9dC50ZXh0Lmxlbmd0aC0oci1uKTtpZigwIT09Yylmb3IobGV0IGU9aSsxK3MubGVuZ3RoLHQ9YS5sZW5ndGg7ZTx0O2UrKylhW2VdPWFbZV0rY31lbHNle2lmKCF2by5pc0Z1bGwodCkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCIpO3RoaXMuX2NvbnRlbnQ9dC50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH10aGlzLl92ZXJzaW9uPXR9Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMmJih0aGlzLl9saW5lT2Zmc2V0cz1Dbyh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm57bGluZTowLGNoYXJhY3RlcjplfTtmb3IoO248cjspe2xldCBpPU1hdGguZmxvb3IoKG4rcikvMik7dFtpXT5lP3I9aTpuPWkrMX1sZXQgaT1uLTE7cmV0dXJue2xpbmU6aSxjaGFyYWN0ZXI6ZS10W2ldfX1vZmZzZXRBdChlKXtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDAhPT10LnJhbmdlJiYodm9pZCAwPT09dC5yYW5nZUxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiB0LnJhbmdlTGVuZ3RoKX1zdGF0aWMgaXNGdWxsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDA9PT10LnJhbmdlJiZ2b2lkIDA9PT10LnJhbmdlTGVuZ3RofX07ZnVuY3Rpb24geW8oZSx0KXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCBuPWUubGVuZ3RoLzJ8MCxyPWUuc2xpY2UoMCxuKSxpPWUuc2xpY2Uobik7eW8ocix0KSx5byhpLHQpO2xldCBvPTAsYT0wLHM9MDtmb3IoO288ci5sZW5ndGgmJmE8aS5sZW5ndGg7KXtsZXQgbj10KHJbb10saVthXSk7ZVtzKytdPW48PTA/cltvKytdOmlbYSsrXX1mb3IoO288ci5sZW5ndGg7KWVbcysrXT1yW28rK107Zm9yKDthPGkubGVuZ3RoOyllW3MrK109aVthKytdO3JldHVybiBlfWZ1bmN0aW9uIENvKGUsdCxuPTApe2NvbnN0IHI9dD9bbl06W107Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBpPWUuY2hhckNvZGVBdCh0KTsxMyE9PWkmJjEwIT09aXx8KDEzPT09aSYmdCsxPGUubGVuZ3RoJiYxMD09PWUuY2hhckNvZGVBdCh0KzEpJiZ0Kyssci5wdXNoKG4rdCsxKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gd28oZSl7Y29uc3QgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIHQubGluZT5uLmxpbmV8fHQubGluZT09PW4ubGluZSYmdC5jaGFyYWN0ZXI+bi5jaGFyYWN0ZXI/e3N0YXJ0Om4sZW5kOnR9OmV9ZnVuY3Rpb24gX28oZSl7Y29uc3QgdD13byhlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9ZnVuY3Rpb24gU28oZSx0LC4uLm4pe3JldHVybiBmdW5jdGlvbihlLHQpe2xldCBuO3JldHVybiBuPTA9PT10Lmxlbmd0aD9lOmUucmVwbGFjZSgvXHsoXGQrKVx9L2csKChlLG4pPT57bGV0IHI9blswXTtyZXR1cm4gdm9pZCAwIT09dFtyXT90W3JdOmV9KSksbn0odCxuKX1mdW5jdGlvbiBBbyhlKXtyZXR1cm4gU299KG1vPWZvfHwoZm89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyB2byhlLHQsbixyKX0sbW8udXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2Ygdm8pcmV0dXJuIGUudXBkYXRlKHQsbiksZTt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9LG1vLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmdldFRleHQoKSxyPXlvKHQubWFwKF9vKSwoKGUsdCk9PntsZXQgbj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT09bj9lLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci10LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpufSkpLGk9MDtjb25zdCBvPVtdO2Zvcihjb25zdCB0IG9mIHIpe2xldCByPWUub2Zmc2V0QXQodC5yYW5nZS5zdGFydCk7aWYocjxpKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3I+aSYmby5wdXNoKG4uc3Vic3RyaW5nKGkscikpLHQubmV3VGV4dC5sZW5ndGgmJm8ucHVzaCh0Lm5ld1RleHQpLGk9ZS5vZmZzZXRBdCh0LnJhbmdlLmVuZCl9cmV0dXJuIG8ucHVzaChuLnN1YnN0cihpKSksby5qb2luKCIiKX0sKHBvPWdvfHwoZ289e30pKVtwby5VbmRlZmluZWQ9MF09IlVuZGVmaW5lZCIscG9bcG8uRW51bVZhbHVlTWlzbWF0Y2g9MV09IkVudW1WYWx1ZU1pc21hdGNoIixwb1twby5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIixwb1twby5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTI1N109IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLHBvW3BvLlVuZXhwZWN0ZWRFbmRPZlN0cmluZz0yNThdPSJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLHBvW3BvLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0yNTldPSJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLHBvW3BvLkludmFsaWRVbmljb2RlPTI2MF09IkludmFsaWRVbmljb2RlIixwb1twby5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyPTI2MV09IkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLHBvW3BvLkludmFsaWRDaGFyYWN0ZXI9MjYyXT0iSW52YWxpZENoYXJhY3RlciIscG9bcG8uUHJvcGVydHlFeHBlY3RlZD01MTNdPSJQcm9wZXJ0eUV4cGVjdGVkIixwb1twby5Db21tYUV4cGVjdGVkPTUxNF09IkNvbW1hRXhwZWN0ZWQiLHBvW3BvLkNvbG9uRXhwZWN0ZWQ9NTE1XT0iQ29sb25FeHBlY3RlZCIscG9bcG8uVmFsdWVFeHBlY3RlZD01MTZdPSJWYWx1ZUV4cGVjdGVkIixwb1twby5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZD01MTddPSJDb21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCIscG9bcG8uQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZD01MThdPSJDb21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkIixwb1twby5UcmFpbGluZ0NvbW1hPTUxOV09IlRyYWlsaW5nQ29tbWEiLHBvW3BvLkR1cGxpY2F0ZUtleT01MjBdPSJEdXBsaWNhdGVLZXkiLHBvW3BvLkNvbW1lbnROb3RQZXJtaXR0ZWQ9NTIxXT0iQ29tbWVudE5vdFBlcm1pdHRlZCIscG9bcG8uU2NoZW1hUmVzb2x2ZUVycm9yPTc2OF09IlNjaGVtYVJlc29sdmVFcnJvciIsKGJvfHwoYm89e30pKS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W2JpLk1hcmtkb3duLGJpLlBsYWluVGV4dF0sY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ6ITB9fX19O3ZhciBFbyx4byxObyxrbz0oRW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4oRW89T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfUVvKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksTG89QW8oKSxUbz17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpMbygiY29sb3JIZXhGb3JtYXRXYXJuaW5nIiwiSW52YWxpZCBjb2xvciBmb3JtYXQuIFVzZSAjUkdCLCAjUkdCQSwgI1JSR0dCQiBvciAjUlJHR0JCQUEuIikscGF0dGVybjovXiMoWzAtOUEtRmEtZl17Myw0fXwoWzAtOUEtRmEtZl17Mn0pezMsNH0pJC99LCJkYXRlLXRpbWUiOntlcnJvck1lc3NhZ2U6TG8oImRhdGVUaW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOkxvKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOkxvKCJ0aW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTpMbygiZW1haWxGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6TG8oImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTpMbygiaXB2NEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjQgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZClcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSQvfSxpcHY2OntlcnJvck1lc3NhZ2U6TG8oImlwdjZGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY2IGFkZHJlc3MuIikscGF0dGVybjovXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSQvaX19LE9vPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09biYmKG49MCksdGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1uLHRoaXMucGFyZW50PWV9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9LGV9KCksSW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ibnVsbCIsci52YWx1ZT1udWxsLHJ9cmV0dXJuIGtvKHQsZSksdH0oT28pLE1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQscil8fHRoaXM7cmV0dXJuIGkudHlwZT0iYm9vbGVhbiIsaS52YWx1ZT1uLGl9cmV0dXJuIGtvKHQsZSksdH0oT28pLFBvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9ImFycmF5IixyLml0ZW1zPVtdLHJ9cmV0dXJuIGtvKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KE9vKSxSbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJudW1iZXIiLHIuaXNJbnRlZ2VyPSEwLHIudmFsdWU9TnVtYmVyLk5hTixyfXJldHVybiBrbyh0LGUpLHR9KE9vKSxWbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LG4scil8fHRoaXM7cmV0dXJuIGkudHlwZT0ic3RyaW5nIixpLnZhbHVlPSIiLGl9cmV0dXJuIGtvKHQsZSksdH0oT28pLEZvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIGkudHlwZT0icHJvcGVydHkiLGkuY29sb25PZmZzZXQ9LTEsaS5rZXlOb2RlPXIsaX1yZXR1cm4ga28odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KE9vKSxEbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJvYmplY3QiLHIucHJvcGVydGllcz1bXSxyfXJldHVybiBrbyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wZXJ0aWVzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KE9vKTtmdW5jdGlvbiBLbyhlKXtyZXR1cm4gYWkoZSk/ZT97fTp7bm90Ont9fTplfShObz14b3x8KHhvPXt9KSlbTm8uS2V5PTBdPSJLZXkiLE5vW05vLkVudW09MV09IkVudW0iO3ZhciBqbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT0tMSksdGhpcy5mb2N1c09mZnNldD1lLHRoaXMuZXhjbHVkZT10LHRoaXMuc2NoZW1hcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2NoZW1hcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnNjaGVtYXMsZS5zY2hlbWFzKX0sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4oLTE9PT10aGlzLmZvY3VzT2Zmc2V0fHxXbyhlLHRoaXMuZm9jdXNPZmZzZXQpKSYmZSE9PXRoaXMuZXhjbHVkZX0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKC0xLHRoaXMuZXhjbHVkZSl9LGV9KCksVW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNjaGVtYXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmluc3RhbmNlPW5ldyBlLGV9KCksQm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LGUucHJvdG90eXBlLm1lcmdlQWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZTt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLm1lcmdlKHIpfX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdChlLnByb2JsZW1zKX0sZS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhZS5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZlLmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KGUuZW51bVZhbHVlcyk7Zm9yKHZhciB0PTAsbj10aGlzLnByb2JsZW1zO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3IuY29kZT09PWdvLkVudW1WYWx1ZU1pc21hdGNoJiYoci5tZXNzYWdlPUxvKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0aGlzLmVudW1WYWx1ZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSkpfX19LGUucHJvdG90eXBlLm1lcmdlUHJvcGVydHlNYXRjaD1mdW5jdGlvbihlKXt0aGlzLm1lcmdlKGUpLHRoaXMucHJvcGVydGllc01hdGNoZXMrKywoZS5lbnVtVmFsdWVNYXRjaHx8IWUuaGFzUHJvYmxlbXMoKSYmZS5wcm9wZXJ0aWVzTWF0Y2hlcykmJnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrLGUuZW51bVZhbHVlTWF0Y2gmJmUuZW51bVZhbHVlcyYmMT09PWUuZW51bVZhbHVlcy5sZW5ndGgmJnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcysrfSxlLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzUHJvYmxlbXMoKTtyZXR1cm4gdCE9PWUuaGFzUHJvYmxlbXMoKT90Py0xOjE6dGhpcy5lbnVtVmFsdWVNYXRjaCE9PWUuZW51bVZhbHVlTWF0Y2g/ZS5lbnVtVmFsdWVNYXRjaD8tMToxOnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcyE9PWUucHJpbWFyeVZhbHVlTWF0Y2hlcz90aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMtZS5wcmltYXJ5VmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyE9PWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz90aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMtZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc01hdGNoZXMtZS5wcm9wZXJ0aWVzTWF0Y2hlc30sZX0oKTtmdW5jdGlvbiBxbyhlKXtyZXR1cm4gbmkoZSl9ZnVuY3Rpb24gJG8oZSl7cmV0dXJuIHRpKGUpfWZ1bmN0aW9uIFdvKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9dmFyIEhvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVtdKSx0aGlzLnJvb3Q9ZSx0aGlzLnN5bnRheEVycm9ycz10LHRoaXMuY29tbWVudHM9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD0hMSksdGhpcy5yb290KXJldHVybiBlaSh0aGlzLnJvb3QsZSx0KX0sZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5yb290KXt2YXIgdD1mdW5jdGlvbihuKXt2YXIgcj1lKG4pLGk9bi5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wO288aS5sZW5ndGgmJnI7bysrKXI9dChpW29dKTtyZXR1cm4gcn07dCh0aGlzLnJvb3QpfX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PW4mJihuPU5yLldhcm5pbmcpLHRoaXMucm9vdCYmdCl7dmFyIHI9bmV3IEJvO3JldHVybiB6byh0aGlzLnJvb3QsdCxyLFVvLmluc3RhbmNlKSxyLnByb2JsZW1zLm1hcCgoZnVuY3Rpb24odCl7dmFyIHIsaT1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQubG9jYXRpb24ub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5sb2NhdGlvbi5vZmZzZXQrdC5sb2NhdGlvbi5sZW5ndGgpKTtyZXR1cm4gSXIuY3JlYXRlKGksdC5tZXNzYWdlLG51bGwhPT0ocj10LnNldmVyaXR5KSYmdm9pZCAwIT09cj9yOm4sdC5jb2RlKX0pKX19LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciByPW5ldyBqbyh0LG4pO3JldHVybiB0aGlzLnJvb3QmJmUmJnpvKHRoaXMucm9vdCxlLG5ldyBCbyxyKSxyLnNjaGVtYXN9LGV9KCk7ZnVuY3Rpb24gem8oZSx0LG4scil7aWYoZSYmci5pbmNsdWRlKGUpKXt2YXIgaT1lO3N3aXRjaChpLnR5cGUpe2Nhc2Uib2JqZWN0IjohZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPU9iamVjdC5jcmVhdGUobnVsbCksbz1bXSxhPTAscz1lLnByb3BlcnRpZXM7YTxzLmxlbmd0aDthKyspe2lbSz0ocD1zW2FdKS5rZXlOb2RlLnZhbHVlXT1wLnZhbHVlTm9kZSxvLnB1c2goSyl9aWYoQXJyYXkuaXNBcnJheSh0LnJlcXVpcmVkKSlmb3IodmFyIGM9MCxsPXQucmVxdWlyZWQ7YzxsLmxlbmd0aDtjKyspe2lmKCFpW1M9bFtjXV0pe3ZhciB1PWUucGFyZW50JiYicHJvcGVydHkiPT09ZS5wYXJlbnQudHlwZSYmZS5wYXJlbnQua2V5Tm9kZSxoPXU/e29mZnNldDp1Lm9mZnNldCxsZW5ndGg6dS5sZW5ndGh9OntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOjF9O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246aCxtZXNzYWdlOkxvKCJNaXNzaW5nUmVxdWlyZWRQcm9wV2FybmluZyIsJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyxTKX0pfX12YXIgZj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9by5pbmRleE9mKGUpO3Q+PTA7KW8uc3BsaWNlKHQsMSksdD1vLmluZGV4T2YoZSl9O2lmKHQucHJvcGVydGllcylmb3IodmFyIGQ9MCxtPU9iamVjdC5rZXlzKHQucHJvcGVydGllcyk7ZDxtLmxlbmd0aDtkKyspe2YoUz1tW2RdKTt2YXIgZz10LnByb3BlcnRpZXNbU107aWYoTD1pW1NdKWlmKGFpKGcpKWlmKGcpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7dmFyIHA9TC5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fExvKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9ZWxzZSB6byhMLGcseD1uZXcgQm8sciksbi5tZXJnZVByb3BlcnR5TWF0Y2goeCl9aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIGI9MCx2PU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO2I8di5sZW5ndGg7YisrKWZvcih2YXIgeT12W2JdLEM9Y2koeSksdz0wLF89by5zbGljZSgwKTt3PF8ubGVuZ3RoO3crKyl7dmFyIFM9X1t3XTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QoUykpaWYoZihTKSxMPWlbU10paWYoYWkoZz10LnBhdHRlcm5Qcm9wZXJ0aWVzW3ldKSlpZihnKW4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3A9TC5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fExvKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9ZWxzZSB6byhMLGcseD1uZXcgQm8sciksbi5tZXJnZVByb3BlcnR5TWF0Y2goeCl9aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKWZvcih2YXIgQT0wLEU9bztBPEUubGVuZ3RoO0ErKyl7aWYoTD1pW1M9RVtBXV0pe3ZhciB4PW5ldyBCbzt6byhMLHQuYWRkaXRpb25hbFByb3BlcnRpZXMseCxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX19ZWxzZSBpZighMT09PXQuYWRkaXRpb25hbFByb3BlcnRpZXMmJm8ubGVuZ3RoPjApZm9yKHZhciBOPTAsaz1vO048ay5sZW5ndGg7TisrKXt2YXIgTDtpZihMPWlbUz1rW05dXSl7cD1MLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX19aWkodC5tYXhQcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIix0Lm1heFByb3BlcnRpZXMpfSk7aWkodC5taW5Qcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIk1pblByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBmZXdlciBwcm9wZXJ0aWVzIHRoYW4gdGhlIHJlcXVpcmVkIG51bWJlciBvZiB7MH0iLHQubWluUHJvcGVydGllcyl9KTtpZih0LmRlcGVuZGVuY2llcylmb3IodmFyIFQ9MCxPPU9iamVjdC5rZXlzKHQuZGVwZW5kZW5jaWVzKTtUPE8ubGVuZ3RoO1QrKyl7aWYoaVtLPU9bVF1dKXt2YXIgST10LmRlcGVuZGVuY2llc1tLXTtpZihBcnJheS5pc0FycmF5KEkpKWZvcih2YXIgTT0wLFA9STtNPFAubGVuZ3RoO00rKyl7dmFyIFI9UFtNXTtpW1JdP24ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIlJlcXVpcmVkRGVwZW5kZW50UHJvcFdhcm5pbmciLCJPYmplY3QgaXMgbWlzc2luZyBwcm9wZXJ0eSB7MH0gcmVxdWlyZWQgYnkgcHJvcGVydHkgezF9LiIsUixLKX0pfWVsc2UgaWYoZz1LbyhJKSl6byhlLGcseD1uZXcgQm8sciksbi5tZXJnZVByb3BlcnR5TWF0Y2goeCl9fXZhciBWPUtvKHQucHJvcGVydHlOYW1lcyk7aWYoVilmb3IodmFyIEY9MCxEPWUucHJvcGVydGllcztGPEQubGVuZ3RoO0YrKyl7dmFyIEs7KEs9RFtGXS5rZXlOb2RlKSYmem8oSyxWLG4sVW8uaW5zdGFuY2UpfX0oaSx0LG4scik7YnJlYWs7Y2FzZSJhcnJheSI6IWZ1bmN0aW9uKGUsdCxuLHIpe2lmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe2Zvcih2YXIgaT10Lml0ZW1zLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9S28oaVtvXSkscz1uZXcgQm87KGY9ZS5pdGVtc1tvXSk/KHpvKGYsYSxzLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHMpKTplLml0ZW1zLmxlbmd0aD49aS5sZW5ndGgmJm4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrfWlmKGUuaXRlbXMubGVuZ3RoPmkubGVuZ3RoKWlmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsSXRlbXMpZm9yKHZhciBjPWkubGVuZ3RoO2M8ZS5pdGVtcy5sZW5ndGg7YysrKXtzPW5ldyBCbzt6byhlLml0ZW1zW2NdLHQuYWRkaXRpb25hbEl0ZW1zLHMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocyl9ZWxzZSExPT09dC5hZGRpdGlvbmFsSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oImFkZGl0aW9uYWxJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMgYWNjb3JkaW5nIHRvIHNjaGVtYS4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsaS5sZW5ndGgpfSl9ZWxzZXt2YXIgbD1Lbyh0Lml0ZW1zKTtpZihsKWZvcih2YXIgdT0wLGg9ZS5pdGVtczt1PGgubGVuZ3RoO3UrKyl7dmFyIGY7em8oZj1oW3VdLGwscz1uZXcgQm8sciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocyl9fXZhciBkPUtvKHQuY29udGFpbnMpO2lmKGQpe2UuaXRlbXMuc29tZSgoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEJvO3JldHVybiB6byhlLGQsdCxVby5pbnN0YW5jZSksIXQuaGFzUHJvYmxlbXMoKX0pKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSl9aWkodC5taW5JdGVtcykmJmUuaXRlbXMubGVuZ3RoPHQubWluSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1pbkl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gZmV3IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgbW9yZS4iLHQubWluSXRlbXMpfSk7aWkodC5tYXhJdGVtcykmJmUuaXRlbXMubGVuZ3RoPnQubWF4SXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1heEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsdC5tYXhJdGVtcyl9KTtpZighMD09PXQudW5pcXVlSXRlbXMpe3ZhciBtPXFvKGUpO20uc29tZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCE9PW0ubGFzdEluZGV4T2YoZSl9KSkmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oInVuaXF1ZUl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyBkdXBsaWNhdGUgaXRlbXMuIil9KX19KGksdCxuLHIpO2JyZWFrO2Nhc2Uic3RyaW5nIjohZnVuY3Rpb24oZSx0LG4scil7aWkodC5taW5MZW5ndGgpJiZlLnZhbHVlLmxlbmd0aDx0Lm1pbkxlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpMbygibWluTGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWluTGVuZ3RoKX0pO2lpKHQubWF4TGVuZ3RoKSYmZS52YWx1ZS5sZW5ndGg+dC5tYXhMZW5ndGgmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1heExlbmd0aFdhcm5pbmciLCJTdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWF4TGVuZ3RoKX0pO2lmKG89dC5wYXR0ZXJuLCJzdHJpbmciPT10eXBlb2Ygbyl7dmFyIGk9Y2kodC5wYXR0ZXJuKTsobnVsbD09aT92b2lkIDA6aS50ZXN0KGUudmFsdWUpKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxMbygicGF0dGVybldhcm5pbmciLCdTdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4gb2YgInswfSIuJyx0LnBhdHRlcm4pfSl9dmFyIG87aWYodC5mb3JtYXQpc3dpdGNoKHQuZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp2YXIgYT12b2lkIDA7aWYoZS52YWx1ZSl7dmFyIHM9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8uZXhlYyhlLnZhbHVlKTtzP3NbMl18fCJ1cmkiIT09dC5mb3JtYXR8fChhPUxvKCJ1cmlTY2hlbWVNaXNzaW5nIiwiVVJJIHdpdGggYSBzY2hlbWUgaXMgZXhwZWN0ZWQuIikpOmE9TG8oInVyaU1pc3NpbmciLCJVUkkgaXMgZXhwZWN0ZWQuIil9ZWxzZSBhPUxvKCJ1cmlFbXB0eSIsIlVSSSBleHBlY3RlZC4iKTthJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fExvKCJ1cmlGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFVSSTogezB9IixhKX0pO2JyZWFrO2Nhc2UiY29sb3ItaGV4IjpjYXNlImRhdGUtdGltZSI6Y2FzZSJkYXRlIjpjYXNlInRpbWUiOmNhc2UiZW1haWwiOmNhc2UiaG9zdG5hbWUiOmNhc2UiaXB2NCI6Y2FzZSJpcHY2Ijp2YXIgYz1Ub1t0LmZvcm1hdF07ZS52YWx1ZSYmYy5wYXR0ZXJuLmV4ZWMoZS52YWx1ZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8Yy5lcnJvck1lc3NhZ2V9KX19KGksdCxuKTticmVhaztjYXNlIm51bWJlciI6IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUudmFsdWU7ZnVuY3Rpb24gbyhlKXt2YXIgdCxuPS9eKC0/XGQrKSg/OlwuKFxkKykpPyg/OmUoWy0rXVxkKykpPyQvLmV4ZWMoZS50b1N0cmluZygpKTtyZXR1cm4gbiYme3ZhbHVlOk51bWJlcihuWzFdKyhuWzJdfHwiIikpLG11bHRpcGxpZXI6KChudWxsPT09KHQ9blsyXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKXx8MCktKHBhcnNlSW50KG5bM10pfHwwKX19aWYoaWkodC5tdWx0aXBsZU9mKSl7dmFyIGE9LTE7aWYoTnVtYmVyLmlzSW50ZWdlcih0Lm11bHRpcGxlT2YpKWE9aSV0Lm11bHRpcGxlT2Y7ZWxzZXt2YXIgcz1vKHQubXVsdGlwbGVPZiksYz1vKGkpO2lmKHMmJmMpe3ZhciBsPU1hdGgucG93KDEwLE1hdGguYWJzKGMubXVsdGlwbGllci1zLm11bHRpcGxpZXIpKTtjLm11bHRpcGxpZXI8cy5tdWx0aXBsaWVyP2MudmFsdWUqPWw6cy52YWx1ZSo9bCxhPWMudmFsdWUlcy52YWx1ZX19MCE9PWEmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm11bHRpcGxlT2ZXYXJuaW5nIiwiVmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB7MH0uIix0Lm11bHRpcGxlT2YpfSl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBpaSh0KT90OmFpKHQpJiZ0P2U6dm9pZCAwfWZ1bmN0aW9uIGgoZSx0KXtpZighYWkodCl8fCF0KXJldHVybiBlfXZhciBmPXUodC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7aWkoZikmJmk8PWYmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oImV4Y2x1c2l2ZU1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIGV4Y2x1c2l2ZSBtaW5pbXVtIG9mIHswfS4iLGYpfSk7dmFyIGQ9dSh0Lm1heGltdW0sdC5leGNsdXNpdmVNYXhpbXVtKTtpaShkKSYmaT49ZCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpMbygiZXhjbHVzaXZlTWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgZXhjbHVzaXZlIG1heGltdW0gb2YgezB9LiIsZCl9KTt2YXIgbT1oKHQubWluaW11bSx0LmV4Y2x1c2l2ZU1pbmltdW0pO2lpKG0pJiZpPG0mJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIG1pbmltdW0gb2YgezB9LiIsbSl9KTt2YXIgZz1oKHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO2lpKGcpJiZpPmcmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6TG8oIm1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIG1heGltdW0gb2YgezB9LiIsZyl9KX0oaSx0LG4pO2JyZWFrO2Nhc2UicHJvcGVydHkiOnJldHVybiB6byhpLnZhbHVlTm9kZSx0LG4scil9IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gaS50eXBlPT09ZXx8ImludGVnZXIiPT09ZSYmIm51bWJlciI9PT1pLnR5cGUmJmkuaXNJbnRlZ2VyfUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGUuc29tZShlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oInR5cGVBcnJheU1pc21hdGNoV2FybmluZyIsIkluY29ycmVjdCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgezB9LiIsdC50eXBlLmpvaW4oIiwgIikpfSk6dC50eXBlJiYoZSh0LnR5cGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxMbygidHlwZU1pc21hdGNoV2FybmluZyIsJ0luY29ycmVjdCB0eXBlLiBFeHBlY3RlZCAiezB9Ii4nLHQudHlwZSl9KSk7aWYoQXJyYXkuaXNBcnJheSh0LmFsbE9mKSlmb3IodmFyIG89MCxhPXQuYWxsT2Y7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107em8oaSxLbyhzKSxuLHIpfXZhciBjPUtvKHQubm90KTtpZihjKXt2YXIgbD1uZXcgQm8sdT1yLm5ld1N1YigpO3pvKGksYyxsLHUpLGwuaGFzUHJvYmxlbXMoKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTpMbygibm90U2NoZW1hV2FybmluZyIsIk1hdGNoZXMgYSBzY2hlbWEgdGhhdCBpcyBub3QgYWxsb3dlZC4iKX0pO2Zvcih2YXIgaD0wLGY9dS5zY2hlbWFzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2QuaW52ZXJ0ZWQ9IWQuaW52ZXJ0ZWQsci5hZGQoZCl9fXZhciBtPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVtdLGE9dm9pZCAwLHM9MCxjPWU7czxjLmxlbmd0aDtzKyspe3ZhciBsPUtvKGNbc10pLHU9bmV3IEJvLGg9ci5uZXdTdWIoKTtpZih6byhpLGwsdSxoKSx1Lmhhc1Byb2JsZW1zKCl8fG8ucHVzaChsKSxhKWlmKHR8fHUuaGFzUHJvYmxlbXMoKXx8YS52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCkpe3ZhciBmPXUuY29tcGFyZShhLnZhbGlkYXRpb25SZXN1bHQpO2Y+MD9hPXtzY2hlbWE6bCx2YWxpZGF0aW9uUmVzdWx0OnUsbWF0Y2hpbmdTY2hlbWFzOmh9OjA9PT1mJiYoYS5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoaCksYS52YWxpZGF0aW9uUmVzdWx0Lm1lcmdlRW51bVZhbHVlcyh1KSl9ZWxzZSBhLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShoKSxhLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMrPXUucHJvcGVydGllc01hdGNoZXMsYS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPXUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcztlbHNlIGE9e3NjaGVtYTpsLHZhbGlkYXRpb25SZXN1bHQ6dSxtYXRjaGluZ1NjaGVtYXM6aH19cmV0dXJuIG8ubGVuZ3RoPjEmJnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6MX0sbWVzc2FnZTpMbygib25lT2ZXYXJuaW5nIiwiTWF0Y2hlcyBtdWx0aXBsZSBzY2hlbWFzIHdoZW4gb25seSBvbmUgbXVzdCB2YWxpZGF0ZS4iKX0pLGEmJihuLm1lcmdlKGEudmFsaWRhdGlvblJlc3VsdCksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9YS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9YS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsci5tZXJnZShhLm1hdGNoaW5nU2NoZW1hcykpLG8ubGVuZ3RofTtBcnJheS5pc0FycmF5KHQuYW55T2YpJiZtKHQuYW55T2YsITEpO0FycmF5LmlzQXJyYXkodC5vbmVPZikmJm0odC5vbmVPZiwhMCk7dmFyIGc9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEJvLG89ci5uZXdTdWIoKTt6byhpLEtvKGUpLHQsbyksbi5tZXJnZSh0KSxuLnByb3BlcnRpZXNNYXRjaGVzKz10LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2Uobyl9LHA9S28odC5pZik7cCYmKGI9cCx2PUtvKHQudGhlbikseT1Lbyh0LmVsc2UpLEM9S28oYiksdz1uZXcgQm8sXz1yLm5ld1N1YigpLHpvKGksQyx3LF8pLHIubWVyZ2UoXyksdy5oYXNQcm9ibGVtcygpP3kmJmcoeSk6diYmZyh2KSk7dmFyIGIsdix5LEMsdyxfO2lmKEFycmF5LmlzQXJyYXkodC5lbnVtKSl7Zm9yKHZhciBTPXFvKGkpLEE9ITEsRT0wLHg9dC5lbnVtO0U8eC5sZW5ndGg7RSsrKXt2YXIgTj14W0VdO2lmKHJpKFMsTikpe0E9ITA7YnJlYWt9fW4uZW51bVZhbHVlcz10LmVudW0sbi5lbnVtVmFsdWVNYXRjaD1BLEF8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6Z28uRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oImVudW1XYXJuaW5nIiwiVmFsdWUgaXMgbm90IGFjY2VwdGVkLiBWYWxpZCB2YWx1ZXM6IHswfS4iLHQuZW51bS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pKS5qb2luKCIsICIpKX0pfWlmKG9pKHQuY29uc3QpKXtyaShTPXFvKGkpLHQuY29uc3QpP24uZW51bVZhbHVlTWF0Y2g9ITA6KG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6Z28uRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8TG8oImNvbnN0V2FybmluZyIsIlZhbHVlIG11c3QgYmUgezB9LiIsSlNPTi5zdHJpbmdpZnkodC5jb25zdCkpfSksbi5lbnVtVmFsdWVNYXRjaD0hMSksbi5lbnVtVmFsdWVzPVt0LmNvbnN0XX10LmRlcHJlY2F0aW9uTWVzc2FnZSYmaS5wYXJlbnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLnBhcmVudC5vZmZzZXQsbGVuZ3RoOmkucGFyZW50Lmxlbmd0aH0sc2V2ZXJpdHk6TnIuV2FybmluZyxtZXNzYWdlOnQuZGVwcmVjYXRpb25NZXNzYWdlLGNvZGU6Z28uRGVwcmVjYXRlZH0pfSgpLHIuYWRkKHtub2RlOmksc2NoZW1hOnR9KX19ZnVuY3Rpb24gR28oZSx0KXt2YXIgbj1bXSxyPS0xLGk9ZS5nZXRUZXh0KCksbz1ZcihpLCExKSxhPXQmJnQuY29sbGVjdENvbW1lbnRzP1tdOnZvaWQgMDtmdW5jdGlvbiBzKCl7Zm9yKDs7KXt2YXIgdD1vLnNjYW4oKTtzd2l0Y2godSgpLHQpe2Nhc2UgMTI6Y2FzZSAxMzpBcnJheS5pc0FycmF5KGEpJiZhLnB1c2gobHIuY3JlYXRlKGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkpLGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpKSkpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiB0fX19ZnVuY3Rpb24gYyh0LGksbyxhLHMpe2lmKHZvaWQgMD09PXMmJihzPU5yLkVycm9yKSwwPT09bi5sZW5ndGh8fG8hPT1yKXt2YXIgYz1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8pLGUucG9zaXRpb25BdChhKSk7bi5wdXNoKElyLmNyZWF0ZShjLHQscyxpLGUubGFuZ3VhZ2VJZCkpLHI9b319ZnVuY3Rpb24gbChlLHQsbixyLGEpe3ZvaWQgMD09PW4mJihuPXZvaWQgMCksdm9pZCAwPT09ciYmKHI9W10pLHZvaWQgMD09PWEmJihhPVtdKTt2YXIgbD1vLmdldFRva2VuT2Zmc2V0KCksdT1vLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpO2lmKGw9PT11JiZsPjApe2ZvcihsLS07bD4wJiYvXHMvLnRlc3QoaS5jaGFyQXQobCkpOylsLS07dT1sKzF9aWYoYyhlLHQsbCx1KSxuJiZoKG4sITEpLHIubGVuZ3RoK2EubGVuZ3RoPjApZm9yKHZhciBmPW8uZ2V0VG9rZW4oKTsxNyE9PWY7KXtpZigtMSE9PXIuaW5kZXhPZihmKSl7cygpO2JyZWFrfWlmKC0xIT09YS5pbmRleE9mKGYpKWJyZWFrO2Y9cygpfXJldHVybiBufWZ1bmN0aW9uIHUoKXtzd2l0Y2goby5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpyZXR1cm4gbChMbygiSW52YWxpZFVuaWNvZGUiLCJJbnZhbGlkIHVuaWNvZGUgc2VxdWVuY2UgaW4gc3RyaW5nLiIpLGdvLkludmFsaWRVbmljb2RlKSwhMDtjYXNlIDU6cmV0dXJuIGwoTG8oIkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLCJJbnZhbGlkIGVzY2FwZSBjaGFyYWN0ZXIgaW4gc3RyaW5nLiIpLGdvLkludmFsaWRFc2NhcGVDaGFyYWN0ZXIpLCEwO2Nhc2UgMzpyZXR1cm4gbChMbygiVW5leHBlY3RlZEVuZE9mTnVtYmVyIiwiVW5leHBlY3RlZCBlbmQgb2YgbnVtYmVyLiIpLGdvLlVuZXhwZWN0ZWRFbmRPZk51bWJlciksITA7Y2FzZSAxOnJldHVybiBsKExvKCJVbmV4cGVjdGVkRW5kT2ZDb21tZW50IiwiVW5leHBlY3RlZCBlbmQgb2YgY29tbWVudC4iKSxnby5VbmV4cGVjdGVkRW5kT2ZDb21tZW50KSwhMDtjYXNlIDI6cmV0dXJuIGwoTG8oIlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsIlVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4iKSxnby5VbmV4cGVjdGVkRW5kT2ZTdHJpbmcpLCEwO2Nhc2UgNjpyZXR1cm4gbChMbygiSW52YWxpZENoYXJhY3RlciIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBzdHJpbmcuIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQuIiksZ28uSW52YWxpZENoYXJhY3RlciksITB9cmV0dXJuITF9ZnVuY3Rpb24gaChlLHQpe3JldHVybiBlLmxlbmd0aD1vLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpLWUub2Zmc2V0LHQmJnMoKSxlfXZhciBmPW5ldyBWbyh2b2lkIDAsMCwwKTtmdW5jdGlvbiBkKHQsbil7dmFyIHI9bmV3IEZvKHQsby5nZXRUb2tlbk9mZnNldCgpLGYpLGk9bShyKTtpZighaSl7aWYoMTYhPT1vLmdldFRva2VuKCkpcmV0dXJuO2woTG8oIkRvdWJsZVF1b3Rlc0V4cGVjdGVkIiwiUHJvcGVydHkga2V5cyBtdXN0IGJlIGRvdWJsZXF1b3RlZCIpLGdvLlVuZGVmaW5lZCk7dmFyIGE9bmV3IFZvKHIsby5nZXRUb2tlbk9mZnNldCgpLG8uZ2V0VG9rZW5MZW5ndGgoKSk7YS52YWx1ZT1vLmdldFRva2VuVmFsdWUoKSxpPWEscygpfXIua2V5Tm9kZT1pO3ZhciB1PW5baS52YWx1ZV07aWYodT8oYyhMbygiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksZ28uRHVwbGljYXRlS2V5LHIua2V5Tm9kZS5vZmZzZXQsci5rZXlOb2RlLm9mZnNldCtyLmtleU5vZGUubGVuZ3RoLE5yLldhcm5pbmcpLCJvYmplY3QiPT10eXBlb2YgdSYmYyhMbygiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksZ28uRHVwbGljYXRlS2V5LHUua2V5Tm9kZS5vZmZzZXQsdS5rZXlOb2RlLm9mZnNldCt1LmtleU5vZGUubGVuZ3RoLE5yLldhcm5pbmcpLG5baS52YWx1ZV09ITApOm5baS52YWx1ZV09ciw2PT09by5nZXRUb2tlbigpKXIuY29sb25PZmZzZXQ9by5nZXRUb2tlbk9mZnNldCgpLHMoKTtlbHNlIGlmKGwoTG8oIkNvbG9uRXhwZWN0ZWQiLCJDb2xvbiBleHBlY3RlZCIpLGdvLkNvbG9uRXhwZWN0ZWQpLDEwPT09by5nZXRUb2tlbigpJiZlLnBvc2l0aW9uQXQoaS5vZmZzZXQraS5sZW5ndGgpLmxpbmU8ZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKSkubGluZSlyZXR1cm4gci5sZW5ndGg9aS5sZW5ndGgscjt2YXIgaD1nKHIpO3JldHVybiBoPyhyLnZhbHVlTm9kZT1oLHIubGVuZ3RoPWgub2Zmc2V0K2gubGVuZ3RoLXIub2Zmc2V0LHIpOmwoTG8oIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLGdvLlZhbHVlRXhwZWN0ZWQscixbXSxbMiw1XSl9ZnVuY3Rpb24gbShlKXtpZigxMD09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IFZvKGUsby5nZXRUb2tlbk9mZnNldCgpKTtyZXR1cm4gdC52YWx1ZT1vLmdldFRva2VuVmFsdWUoKSxoKHQsITApfX1mdW5jdGlvbiBnKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZigzPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgUG8oZSxvLmdldFRva2VuT2Zmc2V0KCkpO3MoKTtmb3IodmFyIG49ITE7NCE9PW8uZ2V0VG9rZW4oKSYmMTchPT1vLmdldFRva2VuKCk7KXtpZig1PT09by5nZXRUb2tlbigpKXtufHxsKExvKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxnby5WYWx1ZUV4cGVjdGVkKTt2YXIgcj1vLmdldFRva2VuT2Zmc2V0KCk7aWYocygpLDQ9PT1vLmdldFRva2VuKCkpe24mJmMoTG8oIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLGdvLlRyYWlsaW5nQ29tbWEscixyKzEpO2NvbnRpbnVlfX1lbHNlIG4mJmwoTG8oIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLGdvLkNvbW1hRXhwZWN0ZWQpO3ZhciBpPWcodCk7aT90Lml0ZW1zLnB1c2goaSk6bChMbygiUHJvcGVydHlFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksZ28uVmFsdWVFeHBlY3RlZCx2b2lkIDAsW10sWzQsNV0pLG49ITB9cmV0dXJuIDQhPT1vLmdldFRva2VuKCk/bChMbygiRXhwZWN0ZWRDbG9zZUJyYWNrZXQiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNrZXQiKSxnby5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCx0KTpoKHQsITApfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKDE9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBEbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSksbj1PYmplY3QuY3JlYXRlKG51bGwpO3MoKTtmb3IodmFyIHI9ITE7MiE9PW8uZ2V0VG9rZW4oKSYmMTchPT1vLmdldFRva2VuKCk7KXtpZig1PT09by5nZXRUb2tlbigpKXtyfHxsKExvKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxnby5Qcm9wZXJ0eUV4cGVjdGVkKTt2YXIgaT1vLmdldFRva2VuT2Zmc2V0KCk7aWYocygpLDI9PT1vLmdldFRva2VuKCkpe3ImJmMoTG8oIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLGdvLlRyYWlsaW5nQ29tbWEsaSxpKzEpO2NvbnRpbnVlfX1lbHNlIHImJmwoTG8oIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLGdvLkNvbW1hRXhwZWN0ZWQpO3ZhciBhPWQodCxuKTthP3QucHJvcGVydGllcy5wdXNoKGEpOmwoTG8oIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLGdvLlByb3BlcnR5RXhwZWN0ZWQsdm9pZCAwLFtdLFsyLDVdKSxyPSEwfXJldHVybiAyIT09by5nZXRUb2tlbigpP2woTG8oIkV4cGVjdGVkQ2xvc2VCcmFjZSIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2UiKSxnby5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkLHQpOmgodCwhMCl9fShlKXx8bShlKXx8ZnVuY3Rpb24oZSl7aWYoMTE9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBSbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7aWYoMD09PW8uZ2V0VG9rZW5FcnJvcigpKXt2YXIgbj1vLmdldFRva2VuVmFsdWUoKTt0cnl7dmFyIHI9SlNPTi5wYXJzZShuKTtpZighaWkocikpcmV0dXJuIGwoTG8oIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksZ28uVW5kZWZpbmVkLHQpO3QudmFsdWU9cn1jYXRjaChlKXtyZXR1cm4gbChMbygiSW52YWxpZE51bWJlckZvcm1hdCIsIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSxnby5VbmRlZmluZWQsdCl9dC5pc0ludGVnZXI9LTE9PT1uLmluZGV4T2YoIi4iKX1yZXR1cm4gaCh0LCEwKX19KGUpfHxmdW5jdGlvbihlKXtzd2l0Y2goby5nZXRUb2tlbigpKXtjYXNlIDc6cmV0dXJuIGgobmV3IElvKGUsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA4OnJldHVybiBoKG5ldyBNbyhlLCEwLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgOTpyZXR1cm4gaChuZXcgTW8oZSwhMSxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtkZWZhdWx0OnJldHVybn19KGUpfXZhciBwPXZvaWQgMDtyZXR1cm4gMTchPT1zKCkmJigocD1nKHApKT8xNyE9PW8uZ2V0VG9rZW4oKSYmbChMbygiRW5kIG9mIGZpbGUgZXhwZWN0ZWQiLCJFbmQgb2YgZmlsZSBleHBlY3RlZC4iKSxnby5VbmRlZmluZWQpOmwoTG8oIkludmFsaWQgc3ltYm9sIiwiRXhwZWN0ZWQgYSBKU09OIG9iamVjdCwgYXJyYXkgb3IgbGl0ZXJhbC4iKSxnby5VbmRlZmluZWQpKSxuZXcgSG8ocCxuLGEpfWZ1bmN0aW9uIEpvKGUsdCxuKXtpZihudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgcj10KyJcdCI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiJbXSI7Zm9yKHZhciBpPSJbXG4iLG89MDtvPGUubGVuZ3RoO28rKylpKz1yK0pvKGVbb10scixuKSxvPGUubGVuZ3RoLTEmJihpKz0iLCIpLGkrPSJcbiI7cmV0dXJuIGkrPXQrIl0ifXZhciBhPU9iamVjdC5rZXlzKGUpO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4ie30iO2ZvcihpPSJ7XG4iLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtpKz1yK0pTT04uc3RyaW5naWZ5KHMpKyI6ICIrSm8oZVtzXSxyLG4pLG88YS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9IlxuIn1yZXR1cm4gaSs9dCsifSJ9cmV0dXJuIG4oZSl9dmFyIFhvPUFvKCksWm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1Qcm9taXNlKSx2b2lkIDA9PT1yJiYocj17fSksdGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlQ29uc3RydWN0b3I9bix0aGlzLmNsaWVudENhcGFiaWxpdGllcz1yfXJldHVybiBlLnByb3RvdHlwZS5kb1Jlc29sdmU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIG49dGhpcy5jb250cmlidXRpb25zW3RdLnJlc29sdmVDb21wbGV0aW9uO2lmKG4pe3ZhciByPW4oZSk7aWYocilyZXR1cm4gcn19cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoZSl9LGUucHJvdG90eXBlLmRvQ29tcGxldGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsaT17aXRlbXM6W10saXNJbmNvbXBsZXRlOiExfSxvPWUuZ2V0VGV4dCgpLGE9ZS5vZmZzZXRBdCh0KSxzPW4uZ2V0Tm9kZUZyb21PZmZzZXQoYSwhMCk7aWYodGhpcy5pc0luQ29tbWVudChlLHM/cy5vZmZzZXQ6MCxhKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO2lmKHMmJmE9PT1zLm9mZnNldCtzLmxlbmd0aCYmYT4wKXt2YXIgYz1vW2EtMV07KCJvYmplY3QiPT09cy50eXBlJiYifSI9PT1jfHwiYXJyYXkiPT09cy50eXBlJiYiXSI9PT1jKSYmKHM9cy5wYXJlbnQpfXZhciBsLHU9dGhpcy5nZXRDdXJyZW50V29yZChlLGEpO2lmKCFzfHwic3RyaW5nIiE9PXMudHlwZSYmIm51bWJlciIhPT1zLnR5cGUmJiJib29sZWFuIiE9PXMudHlwZSYmIm51bGwiIT09cy50eXBlKXt2YXIgaD1hLXUubGVuZ3RoO2g+MCYmJyInPT09b1toLTFdJiZoLS0sbD1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KGgpLHQpfWVsc2UgbD1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KHMub2Zmc2V0KSxlLnBvc2l0aW9uQXQocy5vZmZzZXQrcy5sZW5ndGgpKTt2YXIgZj17fSxkPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYWJlbCxuPWZbdF07aWYobiluLmRvY3VtZW50YXRpb258fChuLmRvY3VtZW50YXRpb249ZS5kb2N1bWVudGF0aW9uKSxuLmRldGFpbHx8KG4uZGV0YWlsPWUuZGV0YWlsKTtlbHNle2lmKCh0PXQucmVwbGFjZSgvW1xuXS9nLCLihrUiKSkubGVuZ3RoPjYwKXt2YXIgcj10LnN1YnN0cigwLDU3KS50cmltKCkrIi4uLiI7ZltyXXx8KHQ9cil9bCYmdm9pZCAwIT09ZS5pbnNlcnRUZXh0JiYoZS50ZXh0RWRpdD1Wci5yZXBsYWNlKGwsZS5pbnNlcnRUZXh0KSksZS5sYWJlbD10LGZbdF09ZSxpLml0ZW1zLnB1c2goZSl9fSxzZXRBc0luY29tcGxldGU6ZnVuY3Rpb24oKXtpLmlzSW5jb21wbGV0ZT0hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX0sbG9nOmZ1bmN0aW9uKGUpe2NvbnNvbGUubG9nKGUpfSxnZXROdW1iZXJPZlByb3Bvc2FsczpmdW5jdGlvbigpe3JldHVybiBpLml0ZW1zLmxlbmd0aH19O3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksbikudGhlbigoZnVuY3Rpb24odCl7dmFyIGM9W10saD0hMCxtPSIiLGc9dm9pZCAwO2lmKHMmJiJzdHJpbmciPT09cy50eXBlKXt2YXIgcD1zLnBhcmVudDtwJiYicHJvcGVydHkiPT09cC50eXBlJiZwLmtleU5vZGU9PT1zJiYoaD0hcC52YWx1ZU5vZGUsZz1wLG09by5zdWJzdHIocy5vZmZzZXQrMSxzLmxlbmd0aC0yKSxwJiYocz1wLnBhcmVudCkpfWlmKHMmJiJvYmplY3QiPT09cy50eXBlKXtpZihzLm9mZnNldD09PWEpcmV0dXJuIGk7cy5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2cmJmc9PT1lfHwoZltlLmtleU5vZGUudmFsdWVdPUxpLmNyZWF0ZSgiX18iKSl9KSk7dmFyIGI9IiI7aCYmKGI9ci5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsZS5vZmZzZXRBdChsLmVuZCkpKSx0P3IuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyh0LG4scyxoLGIsZCk6ci5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucyhuLHMsbSxkKTt2YXIgdj0kbyhzKTtyLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5jb2xsZWN0UHJvcGVydHlDb21wbGV0aW9ucyhlLnVyaSx2LHUsaCwiIj09PWIsZCk7biYmYy5wdXNoKG4pfSkpLCF0JiZ1Lmxlbmd0aD4wJiYnIichPT1vLmNoYXJBdChhLXUubGVuZ3RoLTEpJiYoZC5hZGQoe2tpbmQ6Q2kuUHJvcGVydHksbGFiZWw6ci5nZXRMYWJlbEZvclZhbHVlKHUpLGluc2VydFRleHQ6ci5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkodSx2b2lkIDAsITEsYiksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxkLnNldEFzSW5jb21wbGV0ZSgpKX12YXIgeT17fTtyZXR1cm4gdD9yLmdldFZhbHVlQ29tcGxldGlvbnModCxuLHMsYSxlLGQseSk6ci5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucyhuLHMsYSxlLGQpLHIuY29udHJpYnV0aW9ucy5sZW5ndGg+MCYmci5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnMobixzLGEsZSxkLGMpLHIucHJvbWlzZUNvbnN0cnVjdG9yLmFsbChjKS50aGVuKChmdW5jdGlvbigpe2lmKDA9PT1kLmdldE51bWJlck9mUHJvcG9zYWxzKCkpe3ZhciB0PWE7IXN8fCJzdHJpbmciIT09cy50eXBlJiYibnVtYmVyIiE9PXMudHlwZSYmImJvb2xlYW4iIT09cy50eXBlJiYibnVsbCIhPT1zLnR5cGV8fCh0PXMub2Zmc2V0K3MubGVuZ3RoKTt2YXIgbj1yLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSx0KTtyLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnMoeSxuLGQpfXJldHVybiBpfSkpfSkpfSxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT10aGlzO3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLG4ub2Zmc2V0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLm5vZGU9PT1uJiYhZS5pbnZlcnRlZCl7dmFyIHQ9ZS5zY2hlbWEucHJvcGVydGllczt0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10W2VdO2lmKCJvYmplY3QiPT10eXBlb2YgbiYmIW4uZGVwcmVjYXRpb25NZXNzYWdlJiYhbi5kb05vdFN1Z2dlc3Qpe3ZhciBzPXtraW5kOkNpLlByb3BlcnR5LGxhYmVsOmUsaW5zZXJ0VGV4dDphLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShlLG4scixpKSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOmEuZnJvbU1hcmt1cChuLm1hcmtkb3duRGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9ufHwiIn07dm9pZCAwIT09bi5zdWdnZXN0U29ydFRleHQmJihzLnNvcnRUZXh0PW4uc3VnZ2VzdFNvcnRUZXh0KSxzLmluc2VydFRleHQmJnNpKHMuaW5zZXJ0VGV4dCwiJDEiLmNvbmNhdChpKSkmJihzLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLG8uYWRkKHMpfX0pKTt2YXIgcz1lLnNjaGVtYS5wcm9wZXJ0eU5hbWVzO2lmKCJvYmplY3QiPT10eXBlb2YgcyYmIXMuZGVwcmVjYXRpb25NZXNzYWdlJiYhcy5kb05vdFN1Z2dlc3Qpe3ZhciBjPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKTt2YXIgbj17a2luZDpDaS5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6YS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSx2b2lkIDAscixpKSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOnR8fGEuZnJvbU1hcmt1cChzLm1hcmtkb3duRGVzY3JpcHRpb24pfHxzLmRlc2NyaXB0aW9ufHwiIn07dm9pZCAwIT09cy5zdWdnZXN0U29ydFRleHQmJihuLnNvcnRUZXh0PXMuc3VnZ2VzdFNvcnRUZXh0KSxuLmluc2VydFRleHQmJnNpKG4uaW5zZXJ0VGV4dCwiJDEiLmNvbmNhdChpKSkmJihuLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLG8uYWRkKG4pfTtpZihzLmVudW0pZm9yKHZhciBsPTA7bDxzLmVudW0ubGVuZ3RoO2wrKyl7dmFyIHU9dm9pZCAwO3MubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZsPHMubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aD91PWEuZnJvbU1hcmt1cChzLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tsXSk6cy5lbnVtRGVzY3JpcHRpb25zJiZsPHMuZW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJih1PXMuZW51bURlc2NyaXB0aW9uc1tsXSksYyhzLmVudW1bbF0sdSl9cy5jb25zdCYmYyhzLmNvbnN0KX19fSkpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLG89ZnVuY3Rpb24oZSl7ZS5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Tm9kZS52YWx1ZTtyLmFkZCh7a2luZDpDaS5Qcm9wZXJ0eSxsYWJlbDp0LGluc2VydFRleHQ6aS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUodCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGZpbHRlclRleHQ6aS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUodCksZG9jdW1lbnRhdGlvbjoiIn0pfSkpfTtpZih0LnBhcmVudClpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGE9dC5wYXJlbnQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlIT09dC5wYXJlbnQmJmUua2V5Tm9kZS52YWx1ZT09PWEmJmUudmFsdWVOb2RlJiYib2JqZWN0Ij09PWUudmFsdWVOb2RlLnR5cGUmJm8oZS52YWx1ZU5vZGUpLCEwfSkpfWVsc2UiYXJyYXkiPT09dC5wYXJlbnQudHlwZSYmdC5wYXJlbnQuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Im9iamVjdCI9PT1lLnR5cGUmJmUhPT10JiZvKGUpfSkpO2Vsc2Uib2JqZWN0Ij09PXQudHlwZSYmci5hZGQoe2tpbmQ6Q2kuUHJvcGVydHksbGFiZWw6IiRzY2hlbWEiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoIiRzY2hlbWEiLHZvaWQgMCwhMCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiIsZmlsdGVyVGV4dDp0aGlzLmdldEZpbHRlclRleHRGb3JWYWx1ZSgiJHNjaGVtYSIpfSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89dGhpcyxhPW47aWYoIXR8fCJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGV8fChhPXQub2Zmc2V0K3QubGVuZ3RoLHQ9dC5wYXJlbnQpLCF0KXJldHVybiBpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoiRW1wdHkgb2JqZWN0IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LCIiKSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLHZvaWQgaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiRW1wdHkgYXJyYXkiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10sIiIpLGluc2VydFRleHRGb3JtYXQ6X2kuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSk7dmFyIHM9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKHIsYSksYz1mdW5jdGlvbihlKXtlLnBhcmVudCYmIVdvKGUucGFyZW50LG4sITApJiZpLmFkZCh7a2luZDpvLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6by5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGUoZSxyKSxpbnNlcnRUZXh0Om8uZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZShlLHIscyksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSwiYm9vbGVhbiI9PT1lLnR5cGUmJm8uYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighZS52YWx1ZSxzLGkpfTtpZigicHJvcGVydHkiPT09dC50eXBlJiZuPih0LmNvbG9uT2Zmc2V0fHwwKSl7dmFyIGw9dC52YWx1ZU5vZGU7aWYobCYmKG4+bC5vZmZzZXQrbC5sZW5ndGh8fCJvYmplY3QiPT09bC50eXBlfHwiYXJyYXkiPT09bC50eXBlKSlyZXR1cm47dmFyIHU9dC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PXUmJmUudmFsdWVOb2RlJiZjKGUudmFsdWVOb2RlKSwhMH0pKSwiJHNjaGVtYSI9PT11JiZ0LnBhcmVudCYmIXQucGFyZW50LnBhcmVudCYmdGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhzLGkpfWlmKCJhcnJheSI9PT10LnR5cGUpaWYodC5wYXJlbnQmJiJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgaD10LnBhcmVudC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PWgmJmUudmFsdWVOb2RlJiYiYXJyYXkiPT09ZS52YWx1ZU5vZGUudHlwZSYmZS52YWx1ZU5vZGUuaXRlbXMuZm9yRWFjaChjKSwhMH0pKX1lbHNlIHQuaXRlbXMuZm9yRWFjaChjKX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyxhKXt2YXIgcz1yLGM9dm9pZCAwLGw9dm9pZCAwO2lmKCFufHwic3RyaW5nIiE9PW4udHlwZSYmIm51bWJlciIhPT1uLnR5cGUmJiJib29sZWFuIiE9PW4udHlwZSYmIm51bGwiIT09bi50eXBlfHwocz1uLm9mZnNldCtuLmxlbmd0aCxsPW4sbj1uLnBhcmVudCksbil7aWYoInByb3BlcnR5Ij09PW4udHlwZSYmcj4obi5jb2xvbk9mZnNldHx8MCkpe3ZhciB1PW4udmFsdWVOb2RlO2lmKHUmJnI+dS5vZmZzZXQrdS5sZW5ndGgpcmV0dXJuO2M9bi5rZXlOb2RlLnZhbHVlLG49bi5wYXJlbnR9aWYobiYmKHZvaWQgMCE9PWN8fCJhcnJheSI9PT1uLnR5cGUpKXtmb3IodmFyIGg9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGkscyksZj0wLGQ9dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsbi5vZmZzZXQsbCk7ZjxkLmxlbmd0aDtmKyspe3ZhciBtPWRbZl07aWYobS5ub2RlPT09biYmIW0uaW52ZXJ0ZWQmJm0uc2NoZW1hKXtpZigiYXJyYXkiPT09bi50eXBlJiZtLnNjaGVtYS5pdGVtcylpZihBcnJheS5pc0FycmF5KG0uc2NoZW1hLml0ZW1zKSl7dmFyIGc9dGhpcy5maW5kSXRlbUF0T2Zmc2V0KG4saSxyKTtnPG0uc2NoZW1hLml0ZW1zLmxlbmd0aCYmdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKG0uc2NoZW1hLml0ZW1zW2ddLGgsbyxhKX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhtLnNjaGVtYS5pdGVtcyxoLG8sYSk7aWYodm9pZCAwIT09Yyl7dmFyIHA9ITE7aWYobS5zY2hlbWEucHJvcGVydGllcykodz1tLnNjaGVtYS5wcm9wZXJ0aWVzW2NdKSYmKHA9ITAsdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpKTtpZihtLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyYmIXApZm9yKHZhciBiPTAsdj1PYmplY3Qua2V5cyhtLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7Yjx2Lmxlbmd0aDtiKyspe3ZhciB5PXZbYl0sQz1jaSh5KTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QoYykpe3A9ITA7dmFyIHc9bS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXNbeV07dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpfX1pZihtLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyYmIXApe3c9bS5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXM7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpfX19fSIkc2NoZW1hIiE9PWN8fG4ucGFyZW50fHx0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGgsbyksYS5ib29sZWFuJiYodGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCEwLGgsbyksdGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCExLGgsbykpLGEubnVsbCYmdGhpcy5hZGROdWxsVmFsdWVDb21wbGV0aW9uKGgsbyl9fWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUuc2NoZW1hLCIiLG8sYSl9LGUucHJvdG90eXBlLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyl7aWYodCl7aWYoInN0cmluZyIhPT10LnR5cGUmJiJudW1iZXIiIT09dC50eXBlJiYiYm9vbGVhbiIhPT10LnR5cGUmJiJudWxsIiE9PXQudHlwZXx8KHQ9dC5wYXJlbnQpLHQmJiJwcm9wZXJ0eSI9PT10LnR5cGUmJm4+KHQuY29sb25PZmZzZXR8fDApKXt2YXIgYT10LmtleU5vZGUudmFsdWUscz10LnZhbHVlTm9kZTtpZigoIXN8fG48PXMub2Zmc2V0K3MubGVuZ3RoKSYmdC5wYXJlbnQpe3ZhciBjPSRvKHQucGFyZW50KTt0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xsZWN0VmFsdWVDb21wbGV0aW9ucyhyLnVyaSxjLGEsaSk7dCYmby5wdXNoKHQpfSkpfX19ZWxzZSB0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xsZWN0RGVmYXVsdENvbXBsZXRpb25zKHIudXJpLGkpO3QmJm8ucHVzaCh0KX0pKX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzOyJvYmplY3QiPT10eXBlb2YgZSYmKHRoaXMuYWRkRW51bVZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuY29sbGVjdFR5cGVzKGUsciksQXJyYXkuaXNBcnJheShlLmFsbE9mKSYmZS5hbGxPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpLEFycmF5LmlzQXJyYXkoZS5hbnlPZikmJmUuYW55T2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSxBcnJheS5pc0FycmF5KGUub25lT2YpJiZlLm9uZU9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSkpfSxlLnByb3RvdHlwZS5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO3ZvaWQgMD09PXImJihyPTApO3ZhciBvPSExO2lmKG9pKGUuZGVmYXVsdCkpe2Zvcih2YXIgYT1lLnR5cGUscz1lLmRlZmF1bHQsYz1yO2M+MDtjLS0pcz1bc10sYT0iYXJyYXkiO24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoYSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKHMpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocyx0KSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZGV0YWlsOlhvKCJqc29uLnN1Z2dlc3QuZGVmYXVsdCIsIkRlZmF1bHQgdmFsdWUiKX0pLG89ITB9QXJyYXkuaXNBcnJheShlLmV4YW1wbGVzKSYmZS5leGFtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihhKXtmb3IodmFyIHM9ZS50eXBlLGM9YSxsPXI7bD4wO2wtLSljPVtjXSxzPSJhcnJheSI7bi5hZGQoe2tpbmQ6aS5nZXRTdWdnZXN0aW9uS2luZChzKSxsYWJlbDppLmdldExhYmVsRm9yVmFsdWUoYyksaW5zZXJ0VGV4dDppLmdldEluc2VydFRleHRGb3JWYWx1ZShjLHQpLGluc2VydFRleHRGb3JtYXQ6X2kuU25pcHBldH0pLG89ITB9KSksQXJyYXkuaXNBcnJheShlLmRlZmF1bHRTbmlwcGV0cykmJmUuZGVmYXVsdFNuaXBwZXRzLmZvckVhY2goKGZ1bmN0aW9uKGEpe3ZhciBzLGMsbD1lLnR5cGUsdT1hLmJvZHksaD1hLmxhYmVsO2lmKG9pKHUpKXtlLnR5cGU7Zm9yKHZhciBmPXI7Zj4wO2YtLSl1PVt1XTtzPWkuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZSh1LHQpLGM9aS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlKHUpLGg9aHx8aS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZSh1KX1lbHNle2lmKCJzdHJpbmciIT10eXBlb2YgYS5ib2R5VGV4dClyZXR1cm47dmFyIGQ9IiIsbT0iIixnPSIiO2ZvcihmPXI7Zj4wO2YtLSlkPWQrZysiW1xuIixtPW0rIlxuIitnKyJdIixnKz0iXHQiLGw9ImFycmF5IjtzPWQrZythLmJvZHlUZXh0LnNwbGl0KCJcbiIpLmpvaW4oIlxuIitnKSttK3QsaD1ofHxzLGM9cy5yZXBsYWNlKC9bXG5dL2csIiIpfW4uYWRkKHtraW5kOmkuZ2V0U3VnZ2VzdGlvbktpbmQobCksbGFiZWw6aCxkb2N1bWVudGF0aW9uOmkuZnJvbU1hcmt1cChhLm1hcmtkb3duRGVzY3JpcHRpb24pfHxhLmRlc2NyaXB0aW9uLGluc2VydFRleHQ6cyxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZmlsdGVyVGV4dDpjfSksbz0hMH0pKSwhbyYmIm9iamVjdCI9PXR5cGVvZiBlLml0ZW1zJiYhQXJyYXkuaXNBcnJheShlLml0ZW1zKSYmcjw1JiZ0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUuaXRlbXMsdCxuLHIrMSl9LGUucHJvdG90eXBlLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuKXtpZihvaShlLmNvbnN0KSYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShlLmNvbnN0KSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUuY29uc3QsdCksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb259KSxBcnJheS5pc0FycmF5KGUuZW51bSkpZm9yKHZhciByPTAsaT1lLmVudW0ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPWUuZW51bVtyXSxhPXRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9uO2UubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZyPGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCk/YT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbcl0pOmUuZW51bURlc2NyaXB0aW9ucyYmcjxlLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYoYT1lLmVudW1EZXNjcmlwdGlvbnNbcl0pLG4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUobyksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShvLHQpLGluc2VydFRleHRGb3JtYXQ6X2kuU25pcHBldCxkb2N1bWVudGF0aW9uOmF9KX19LGUucHJvdG90eXBlLmNvbGxlY3RUeXBlcz1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUuZW51bSkmJiFvaShlLmNvbnN0KSl7dmFyIG49ZS50eXBlO0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXT0hMH0pKTpuJiYodFtuXT0hMCl9fSxlLnByb3RvdHlwZS5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuKXtlLm9iamVjdCYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6Int9IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh7fSx0KSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZGV0YWlsOlhvKCJkZWZhdWx0cy5vYmplY3QiLCJOZXcgb2JqZWN0IiksZG9jdW1lbnRhdGlvbjoiIn0pLGUuYXJyYXkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IltdIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShbXSx0KSxpbnNlcnRUZXh0Rm9ybWF0Ol9pLlNuaXBwZXQsZGV0YWlsOlhvKCJkZWZhdWx0cy5hcnJheSIsIk5ldyBhcnJheSIpLGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQsbil7bi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYm9vbGVhbiIpLGxhYmVsOmU/InRydWUiOiJmYWxzZSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpLGluc2VydFRleHRGb3JtYXQ6X2kuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZE51bGxWYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0KXt0LmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJudWxsIiksbGFiZWw6Im51bGwiLGluc2VydFRleHQ6Im51bGwiK2UsaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5zY2hlbWFTZXJ2aWNlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHMoKGZ1bmN0aW9uKGUpe3JldHVybiJodHRwIj09PWV8fCJodHRwcyI9PT1lfSkpO3IuZm9yRWFjaCgoZnVuY3Rpb24ocil7cmV0dXJuIHQuYWRkKHtraW5kOkNpLk1vZHVsZSxsYWJlbDpuLmdldExhYmVsRm9yVmFsdWUociksZmlsdGVyVGV4dDpuLmdldEZpbHRlclRleHRGb3JWYWx1ZShyKSxpbnNlcnRUZXh0Om4uZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHIsZSksaW5zZXJ0VGV4dEZvcm1hdDpfaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0pKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LGUucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LGUucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9LGUucHJvdG90eXBlLmdldExhYmVsRm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFwkXH1dL2csIlxcJCYiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49SlNPTi5zdHJpbmdpZnkoZSxudWxsLCJcdCIpO3JldHVybiJ7fSI9PT1uPyJ7JDF9Iit0OiJbXSI9PT1uPyJbJDFdIit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuK3QpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEpvKGUsIiIsKGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmIl4iPT09ZVswXT9lLnN1YnN0cigxKTpKU09OLnN0cmluZ2lmeShlKX0pKSt0fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlIm9iamVjdCI6cmV0dXJuIG51bGw9PT1lPyIkezE6bnVsbH0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KTtjYXNlInN0cmluZyI6dmFyIG49SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIG49bi5zdWJzdHIoMSxuLmxlbmd0aC0yKSwnIiR7MTonKyhuPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuKSkrJ30iJyt0O2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiIkezE6IitKU09OLnN0cmluZ2lmeShlKSsifSIrdH1yZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KX0sZS5wcm90b3R5cGUuZ2V0U3VnZ2VzdGlvbktpbmQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHQ9ZTtlPXQubGVuZ3RoPjA/dFswXTp2b2lkIDB9aWYoIWUpcmV0dXJuIENpLlZhbHVlO3N3aXRjaChlKXtjYXNlInN0cmluZyI6ZGVmYXVsdDpyZXR1cm4gQ2kuVmFsdWU7Y2FzZSJvYmplY3QiOnJldHVybiBDaS5Nb2R1bGU7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIENpLlByb3BlcnR5fX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIltdIjtjYXNlIm9iamVjdCI6cmV0dXJuInt9IjtkZWZhdWx0OnJldHVybiB0LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpfX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLG4pO2Nhc2Uib2JqZWN0IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30sbik7ZGVmYXVsdDp2YXIgcj10LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpK247cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChyKX19LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLCIiKTtpZighbilyZXR1cm4gaTt2YXIgbyxhPWkrIjogIixzPTA7aWYodCl7aWYoQXJyYXkuaXNBcnJheSh0LmRlZmF1bHRTbmlwcGV0cykpe2lmKDE9PT10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGgpe3ZhciBjPXQuZGVmYXVsdFNuaXBwZXRzWzBdLmJvZHk7b2koYykmJihvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZShjLCIiKSl9cys9dC5kZWZhdWx0U25pcHBldHMubGVuZ3RofWlmKHQuZW51bSYmKG98fDEhPT10LmVudW0ubGVuZ3RofHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5lbnVtWzBdLCIiKSkscys9dC5lbnVtLmxlbmd0aCksb2kodC5kZWZhdWx0KSYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmRlZmF1bHQsIiIpKSxzKyspLEFycmF5LmlzQXJyYXkodC5leGFtcGxlcykmJnQuZXhhbXBsZXMubGVuZ3RoJiYob3x8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZXhhbXBsZXNbMF0sIiIpKSxzKz10LmV4YW1wbGVzLmxlbmd0aCksMD09PXMpe3ZhciBsPUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGVbMF06dC50eXBlO3N3aXRjaChsfHwodC5wcm9wZXJ0aWVzP2w9Im9iamVjdCI6dC5pdGVtcyYmKGw9ImFycmF5IikpLGwpe2Nhc2UiYm9vbGVhbiI6bz0iJDEiO2JyZWFrO2Nhc2Uic3RyaW5nIjpvPSciJDEiJzticmVhaztjYXNlIm9iamVjdCI6bz0ieyQxfSI7YnJlYWs7Y2FzZSJhcnJheSI6bz0iWyQxXSI7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6bz0iJHsxOjB9IjticmVhaztjYXNlIm51bGwiOm89IiR7MTpudWxsfSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaX19fXJldHVybighb3x8cz4xKSYmKG89IiQxIiksYStvK3J9LGUucHJvdG90eXBlLmdldEN1cnJlbnRXb3JkPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQtMSxyPWUuZ2V0VGV4dCgpO24+PTAmJi0xPT09JyBcdFxuXHJcdiI6e1ssXX0nLmluZGV4T2Yoci5jaGFyQXQobikpOyluLS07cmV0dXJuIHIuc3Vic3RyaW5nKG4rMSx0KX0sZS5wcm90b3R5cGUuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPVlyKGUuZ2V0VGV4dCgpLCEwKTtzd2l0Y2gobi5zZXRQb3NpdGlvbih0KSxuLnNjYW4oKSl7Y2FzZSA1OmNhc2UgMjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiIsIn19LGUucHJvdG90eXBlLmZpbmRJdGVtQXRPZmZzZXQ9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1Zcih0LmdldFRleHQoKSwhMCksaT1lLml0ZW1zLG89aS5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGE9aVtvXTtpZihuPmEub2Zmc2V0K2EubGVuZ3RoKXJldHVybiByLnNldFBvc2l0aW9uKGEub2Zmc2V0K2EubGVuZ3RoKSw1PT09ci5zY2FuKCkmJm4+PXIuZ2V0VG9rZW5PZmZzZXQoKStyLmdldFRva2VuTGVuZ3RoKCk/bysxOm87aWYobj49YS5vZmZzZXQpcmV0dXJuIG99cmV0dXJuIDB9LGUucHJvdG90eXBlLmlzSW5Db21tZW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ZcihlLmdldFRleHQoKSwhMSk7ci5zZXRQb3NpdGlvbih0KTtmb3IodmFyIGk9ci5zY2FuKCk7MTchPT1pJiZyLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpPG47KWk9ci5zY2FuKCk7cmV0dXJuKDEyPT09aXx8MTM9PT1pKSYmci5nZXRUb2tlbk9mZnNldCgpPD1ufSxlLnByb3RvdHlwZS5mcm9tTWFya3VwPWZ1bmN0aW9uKGUpe2lmKGUmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXJldHVybntraW5kOmJpLk1hcmtkb3duLHZhbHVlOmV9fSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydE1hcmtkb3duPWZ1bmN0aW9uKCl7aWYoIW9pKHRoaXMuc3VwcG9ydHNNYXJrZG93bikpe3ZhciBlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb247dGhpcy5zdXBwb3J0c01hcmtkb3duPWUmJmUuY29tcGxldGlvbkl0ZW0mJkFycmF5LmlzQXJyYXkoZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0KSYmLTEhPT1lLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQuaW5kZXhPZihiaS5NYXJrZG93bil9cmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bn0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1mdW5jdGlvbigpe2lmKCFvaSh0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycykpe3ZhciBlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb247dGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZSYmZS5jb21wbGV0aW9uSXRlbSYmISFlLmNvbXBsZXRpb25JdGVtLmNvbW1pdENoYXJhY3RlcnNTdXBwb3J0fXJldHVybiB0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVyc30sZX0oKSxZbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2U9bnx8UHJvbWlzZX1yZXR1cm4gZS5wcm90b3R5cGUuZG9Ib3Zlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5vZmZzZXRBdCh0KSxpPW4uZ2V0Tm9kZUZyb21PZmZzZXQocik7aWYoIWl8fCgib2JqZWN0Ij09PWkudHlwZXx8ImFycmF5Ij09PWkudHlwZSkmJnI+aS5vZmZzZXQrMSYmcjxpLm9mZnNldCtpLmxlbmd0aC0xKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKTt2YXIgbz1pO2lmKCJzdHJpbmciPT09aS50eXBlKXt2YXIgYT1pLnBhcmVudDtpZihhJiYicHJvcGVydHkiPT09YS50eXBlJiZhLmtleU5vZGU9PT1pJiYhKGk9YS52YWx1ZU5vZGUpKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKX1mb3IodmFyIHM9bHIuY3JlYXRlKGUucG9zaXRpb25BdChvLm9mZnNldCksZS5wb3NpdGlvbkF0KG8ub2Zmc2V0K28ubGVuZ3RoKSksYz1mdW5jdGlvbihlKXtyZXR1cm57Y29udGVudHM6ZSxyYW5nZTpzfX0sbD0kbyhpKSx1PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt1Pj0wO3UtLSl7dmFyIGg9dGhpcy5jb250cmlidXRpb25zW3VdLmdldEluZm9Db250cmlidXRpb24oZS51cmksbCk7aWYoaClyZXR1cm4gaC50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKX1yZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUmJmkpe3ZhciB0PW4uZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLGkub2Zmc2V0KSxyPXZvaWQgMCxvPXZvaWQgMCxhPXZvaWQgMCxzPXZvaWQgMDt0LmV2ZXJ5KChmdW5jdGlvbihlKXtpZihlLm5vZGU9PT1pJiYhZS5pbnZlcnRlZCYmZS5zY2hlbWEmJihyPXJ8fGUuc2NoZW1hLnRpdGxlLG89b3x8ZS5zY2hlbWEubWFya2Rvd25EZXNjcmlwdGlvbnx8UW8oZS5zY2hlbWEuZGVzY3JpcHRpb24pLGUuc2NoZW1hLmVudW0pKXt2YXIgdD1lLnNjaGVtYS5lbnVtLmluZGV4T2YocW8oaSkpO2Uuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucz9hPWUuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1t0XTplLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zJiYoYT1RbyhlLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zW3RdKSksYSYmInN0cmluZyIhPXR5cGVvZihzPWUuc2NoZW1hLmVudW1bdF0pJiYocz1KU09OLnN0cmluZ2lmeShzKSl9cmV0dXJuITB9KSk7dmFyIGw9IiI7cmV0dXJuIHImJihsPVFvKHIpKSxvJiYobC5sZW5ndGg+MCYmKGwrPSJcblxuIiksbCs9byksYSYmKGwubGVuZ3RoPjAmJihsKz0iXG5cbiIpLGwrPSJgIi5jb25jYXQoZnVuY3Rpb24oZSl7aWYoLTEhPT1lLmluZGV4T2YoImAiKSlyZXR1cm4iYGAgIitlKyIgYGAiO3JldHVybiBlfShzKSwiYDogIikuY29uY2F0KGEpKSxjKFtsXSl9cmV0dXJuIG51bGx9KSl9LGV9KCk7ZnVuY3Rpb24gUW8oZSl7aWYoZSlyZXR1cm4gZS5yZXBsYWNlKC8oW15cblxyXSkoXHI/XG4pKFteXG5ccl0pL2dtLCIkMVxuXG4kMyIpLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX12YXIgZWE9QW8oKSx0YT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmpzb25TY2hlbWFTZXJ2aWNlPWUsdGhpcy5wcm9taXNlPXQsdGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMH1yZXR1cm4gZS5wcm90b3R5cGUuY29uZmlndXJlPWZ1bmN0aW9uKGUpe2UmJih0aGlzLnZhbGlkYXRpb25FbmFibGVkPSExIT09ZS52YWxpZGF0ZSx0aGlzLmNvbW1lbnRTZXZlcml0eT1lLmFsbG93Q29tbWVudHM/dm9pZCAwOk5yLkVycm9yKX0sZS5wcm90b3R5cGUuZG9WYWxpZGF0aW9uPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7aWYoIXRoaXMudmFsaWRhdGlvbkVuYWJsZWQpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKFtdKTt2YXIgbz1bXSxhPXt9LHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yYW5nZS5zdGFydC5saW5lKyIgIitlLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcisiICIrZS5tZXNzYWdlO2FbdF18fChhW3RdPSEwLG8ucHVzaChlKSl9LGM9ZnVuY3Rpb24ocil7dmFyIGE9KG51bGw9PW4/dm9pZCAwOm4udHJhaWxpbmdDb21tYXMpP29hKG4udHJhaWxpbmdDb21tYXMpOk5yLkVycm9yLGM9KG51bGw9PW4/dm9pZCAwOm4uY29tbWVudHMpP29hKG4uY29tbWVudHMpOmkuY29tbWVudFNldmVyaXR5LGw9KG51bGw9PW4/dm9pZCAwOm4uc2NoZW1hVmFsaWRhdGlvbik/b2Eobi5zY2hlbWFWYWxpZGF0aW9uKTpOci5XYXJuaW5nLHU9KG51bGw9PW4/dm9pZCAwOm4uc2NoZW1hUmVxdWVzdCk/b2Eobi5zY2hlbWFSZXF1ZXN0KTpOci5XYXJuaW5nO2lmKHIpe2lmKHIuZXJyb3JzLmxlbmd0aCYmdC5yb290JiZ1KXt2YXIgaD10LnJvb3QsZj0ib2JqZWN0Ij09PWgudHlwZT9oLnByb3BlcnRpZXNbMF06dm9pZCAwO2lmKGYmJiIkc2NoZW1hIj09PWYua2V5Tm9kZS52YWx1ZSl7dmFyIGQ9Zi52YWx1ZU5vZGV8fGYsbT1sci5jcmVhdGUoZS5wb3NpdGlvbkF0KGQub2Zmc2V0KSxlLnBvc2l0aW9uQXQoZC5vZmZzZXQrZC5sZW5ndGgpKTtzKElyLmNyZWF0ZShtLHIuZXJyb3JzWzBdLHUsZ28uU2NoZW1hUmVzb2x2ZUVycm9yKSl9ZWxzZXttPWxyLmNyZWF0ZShlLnBvc2l0aW9uQXQoaC5vZmZzZXQpLGUucG9zaXRpb25BdChoLm9mZnNldCsxKSk7cyhJci5jcmVhdGUobSxyLmVycm9yc1swXSx1LGdvLlNjaGVtYVJlc29sdmVFcnJvcikpfX1lbHNlIGlmKGwpe3ZhciBnPXQudmFsaWRhdGUoZSxyLnNjaGVtYSxsKTtnJiZnLmZvckVhY2gocyl9cmEoci5zY2hlbWEpJiYoYz12b2lkIDApLGlhKHIuc2NoZW1hKSYmKGE9dm9pZCAwKX1mb3IodmFyIHA9MCxiPXQuc3ludGF4RXJyb3JzO3A8Yi5sZW5ndGg7cCsrKXt2YXIgdj1iW3BdO2lmKHYuY29kZT09PWdvLlRyYWlsaW5nQ29tbWEpe2lmKCJudW1iZXIiIT10eXBlb2YgYSljb250aW51ZTt2LnNldmVyaXR5PWF9cyh2KX1pZigibnVtYmVyIj09dHlwZW9mIGMpe3ZhciB5PWVhKCJJbnZhbGlkQ29tbWVudFRva2VuIiwiQ29tbWVudHMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gSlNPTi4iKTt0LmNvbW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MoSXIuY3JlYXRlKGUseSxjLGdvLkNvbW1lbnROb3RQZXJtaXR0ZWQpKX0pKX1yZXR1cm4gb307aWYocil7dmFyIGw9ci5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC8iK25hKys7cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShsLFtdLHIpLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9KSl9cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9KSl9LGUucHJvdG90eXBlLmdldExhbmd1YWdlU3RhdHVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3NjaGVtYXM6dGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2UoZS51cmksdCl9fSxlfSgpLG5hPTA7ZnVuY3Rpb24gcmEoZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtpZihhaShlLmFsbG93Q29tbWVudHMpKXJldHVybiBlLmFsbG93Q29tbWVudHM7aWYoZS5hbGxPZilmb3IodmFyIHQ9MCxuPWUuYWxsT2Y7dDxuLmxlbmd0aDt0Kyspe3ZhciByPXJhKG5bdF0pO2lmKGFpKHIpKXJldHVybiByfX19ZnVuY3Rpb24gaWEoZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtpZihhaShlLmFsbG93VHJhaWxpbmdDb21tYXMpKXJldHVybiBlLmFsbG93VHJhaWxpbmdDb21tYXM7dmFyIHQ9ZTtpZihhaSh0LmFsbG93c1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gdC5hbGxvd3NUcmFpbGluZ0NvbW1hcztpZihlLmFsbE9mKWZvcih2YXIgbj0wLHI9ZS5hbGxPZjtuPHIubGVuZ3RoO24rKyl7dmFyIGk9aWEocltuXSk7aWYoYWkoaSkpcmV0dXJuIGl9fX1mdW5jdGlvbiBvYShlKXtzd2l0Y2goZSl7Y2FzZSJlcnJvciI6cmV0dXJuIE5yLkVycm9yO2Nhc2Uid2FybmluZyI6cmV0dXJuIE5yLldhcm5pbmc7Y2FzZSJpZ25vcmUiOnJldHVybn19ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIGU8NDg/MDplPD01Nz9lLTQ4OihlPDk3JiYoZSs9MzIpLGU+PTk3JiZlPD0xMDI/ZS05NysxMDowKX1mdW5jdGlvbiBzYShlKXtpZigiIyI9PT1lWzBdKXN3aXRjaChlLmxlbmd0aCl7Y2FzZSA0OnJldHVybntyZWQ6MTcqYWEoZS5jaGFyQ29kZUF0KDEpKS8yNTUsZ3JlZW46MTcqYWEoZS5jaGFyQ29kZUF0KDIpKS8yNTUsYmx1ZToxNyphYShlLmNoYXJDb2RlQXQoMykpLzI1NSxhbHBoYToxfTtjYXNlIDU6cmV0dXJue3JlZDoxNyphYShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNyphYShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KmFhKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjE3KmFhKGUuY2hhckNvZGVBdCg0KSkvMjU1fTtjYXNlIDc6cmV0dXJue3JlZDooMTYqYWEoZS5jaGFyQ29kZUF0KDEpKSthYShlLmNoYXJDb2RlQXQoMikpKS8yNTUsZ3JlZW46KDE2KmFhKGUuY2hhckNvZGVBdCgzKSkrYWEoZS5jaGFyQ29kZUF0KDQpKSkvMjU1LGJsdWU6KDE2KmFhKGUuY2hhckNvZGVBdCg1KSkrYWEoZS5jaGFyQ29kZUF0KDYpKSkvMjU1LGFscGhhOjF9O2Nhc2UgOTpyZXR1cm57cmVkOigxNiphYShlLmNoYXJDb2RlQXQoMSkpK2FhKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqYWEoZS5jaGFyQ29kZUF0KDMpKSthYShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqYWEoZS5jaGFyQ29kZUF0KDUpKSthYShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6KDE2KmFhKGUuY2hhckNvZGVBdCg3KSkrYWEoZS5jaGFyQ29kZUF0KDgpKSkvMjU1fX19dmFyIGNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnNjaGVtYVNlcnZpY2U9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9scz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pO3ZhciBpPXQucm9vdDtpZighaSlyZXR1cm5bXTt2YXIgbz1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLGE9ZS51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1hfHxzaShhLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1pLnR5cGUpe2Zvcih2YXIgcz1bXSxjPTAsbD1pLml0ZW1zO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdO2lmKCJvYmplY3QiPT09dS50eXBlKWZvcih2YXIgaD0wLGY9dS5wcm9wZXJ0aWVzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2lmKCJrZXkiPT09ZC5rZXlOb2RlLnZhbHVlJiZkLnZhbHVlTm9kZSl7dmFyIG09aHIuY3JlYXRlKGUudXJpLGxhKGUsdSkpO2lmKHMucHVzaCh7bmFtZTpxbyhkLnZhbHVlTm9kZSksa2luZDpLaS5GdW5jdGlvbixsb2NhdGlvbjptfSksLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksc319fXJldHVybiBzfWZvcih2YXIgZz1be25vZGU6aSxjb250YWluZXJOYW1lOiIifV0scD0wLGI9ITEsdj1bXSx5PWZ1bmN0aW9uKHQsbil7ImFycmF5Ij09PXQudHlwZT90Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UmJmcucHVzaCh7bm9kZTplLGNvbnRhaW5lck5hbWU6bn0pfSkpOiJvYmplY3QiPT09dC50eXBlJiZ0LnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dC52YWx1ZU5vZGU7aWYoaSlpZihvPjApe28tLTt2YXIgYT1oci5jcmVhdGUoZS51cmksbGEoZSx0KSkscz1uP24rIi4iK3Qua2V5Tm9kZS52YWx1ZTp0LmtleU5vZGUudmFsdWU7di5wdXNoKHtuYW1lOnIuZ2V0S2V5TGFiZWwodCksa2luZDpyLmdldFN5bWJvbEtpbmQoaS50eXBlKSxsb2NhdGlvbjphLGNvbnRhaW5lck5hbWU6bn0pLGcucHVzaCh7bm9kZTppLGNvbnRhaW5lck5hbWU6c30pfWVsc2UgYj0hMH0pKX07cDxnLmxlbmd0aDspe3ZhciBDPWdbcCsrXTt5KEMubm9kZSxDLmNvbnRhaW5lck5hbWUpfXJldHVybiBiJiZuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksdn0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9sczI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KTt2YXIgaT10LnJvb3Q7aWYoIWkpcmV0dXJuW107dmFyIG89bi5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxhPWUudXJpO2lmKCgidnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24iPT09YXx8c2koYS50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiYiYXJyYXkiPT09aS50eXBlKXtmb3IodmFyIHM9W10sYz0wLGw9aS5pdGVtcztjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXTtpZigib2JqZWN0Ij09PXUudHlwZSlmb3IodmFyIGg9MCxmPXUucHJvcGVydGllcztoPGYubGVuZ3RoO2grKyl7dmFyIGQ9ZltoXTtpZigia2V5Ij09PWQua2V5Tm9kZS52YWx1ZSYmZC52YWx1ZU5vZGUpe3ZhciBtPWxhKGUsdSksZz1sYShlLGQua2V5Tm9kZSk7aWYocy5wdXNoKHtuYW1lOnFvKGQudmFsdWVOb2RlKSxraW5kOktpLkZ1bmN0aW9uLHJhbmdlOm0sc2VsZWN0aW9uUmFuZ2U6Z30pLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHN9fX1yZXR1cm4gc31mb3IodmFyIHA9W10sYj1be25vZGU6aSxyZXN1bHQ6cH1dLHY9MCx5PSExLEM9ZnVuY3Rpb24odCxuKXsiYXJyYXkiPT09dC50eXBlP3QuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtpZih0KWlmKG8+MCl7by0tO3ZhciBhPWxhKGUsdCkscz1hLGM9e25hbWU6U3RyaW5nKGkpLGtpbmQ6ci5nZXRTeW1ib2xLaW5kKHQudHlwZSkscmFuZ2U6YSxzZWxlY3Rpb25SYW5nZTpzLGNoaWxkcmVuOltdfTtuLnB1c2goYyksYi5wdXNoKHtyZXN1bHQ6Yy5jaGlsZHJlbixub2RlOnR9KX1lbHNlIHk9ITB9KSk6Im9iamVjdCI9PT10LnR5cGUmJnQucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnZhbHVlTm9kZTtpZihpKWlmKG8+MCl7by0tO3ZhciBhPWxhKGUsdCkscz1sYShlLHQua2V5Tm9kZSksYz1bXSxsPXtuYW1lOnIuZ2V0S2V5TGFiZWwodCksa2luZDpyLmdldFN5bWJvbEtpbmQoaS50eXBlKSxyYW5nZTphLHNlbGVjdGlvblJhbmdlOnMsY2hpbGRyZW46YyxkZXRhaWw6ci5nZXREZXRhaWwoaSl9O24ucHVzaChsKSxiLnB1c2goe3Jlc3VsdDpjLG5vZGU6aX0pfWVsc2UgeT0hMH0pKX07djxiLmxlbmd0aDspe3ZhciB3PWJbdisrXTtDKHcubm9kZSx3LnJlc3VsdCl9cmV0dXJuIHkmJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSxwfSxlLnByb3RvdHlwZS5nZXRTeW1ib2xLaW5kPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIm9iamVjdCI6cmV0dXJuIEtpLk1vZHVsZTtjYXNlInN0cmluZyI6cmV0dXJuIEtpLlN0cmluZztjYXNlIm51bWJlciI6cmV0dXJuIEtpLk51bWJlcjtjYXNlImFycmF5IjpyZXR1cm4gS2kuQXJyYXk7Y2FzZSJib29sZWFuIjpyZXR1cm4gS2kuQm9vbGVhbjtkZWZhdWx0OnJldHVybiBLaS5WYXJpYWJsZX19LGUucHJvdG90eXBlLmdldEtleUxhYmVsPWZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Tm9kZS52YWx1ZTtyZXR1cm4gdCYmKHQ9dC5yZXBsYWNlKC9bXG5dL2csIuKGtSIpKSx0JiZ0LnRyaW0oKT90OiciJy5jb25jYXQodCwnIicpfSxlLnByb3RvdHlwZS5nZXREZXRhaWw9ZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4iYm9vbGVhbiI9PT1lLnR5cGV8fCJudW1iZXIiPT09ZS50eXBlfHwibnVsbCI9PT1lLnR5cGV8fCJzdHJpbmciPT09ZS50eXBlP1N0cmluZyhlLnZhbHVlKToiYXJyYXkiPT09ZS50eXBlP2UuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoiW10iOiJvYmplY3QiPT09ZS50eXBlP2UuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoie30iOnZvaWQgMH0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50Q29sb3JzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBpPVtdO2lmKHIpZm9yKHZhciBvPW4mJiJudW1iZXIiPT10eXBlb2Ygbi5yZXN1bHRMaW1pdD9uLnJlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUUsYT17fSxzPTAsYz10LmdldE1hdGNoaW5nU2NoZW1hcyhyLnNjaGVtYSk7czxjLmxlbmd0aDtzKyspe3ZhciBsPWNbc107aWYoIWwuaW52ZXJ0ZWQmJmwuc2NoZW1hJiYoImNvbG9yIj09PWwuc2NoZW1hLmZvcm1hdHx8ImNvbG9yLWhleCI9PT1sLnNjaGVtYS5mb3JtYXQpJiZsLm5vZGUmJiJzdHJpbmciPT09bC5ub2RlLnR5cGUpe3ZhciB1PVN0cmluZyhsLm5vZGUub2Zmc2V0KTtpZighYVt1XSl7dmFyIGg9c2EocW8obC5ub2RlKSk7aWYoaCl7dmFyIGY9bGEoZSxsLm5vZGUpO2kucHVzaCh7Y29sb3I6aCxyYW5nZTpmfSl9aWYoYVt1XT0hMCwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChlLnVyaSksaX19fXJldHVybiBpfSkpfSxlLnByb3RvdHlwZS5nZXRDb2xvclByZXNlbnRhdGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1bXSxhPU1hdGgucm91bmQoMjU1Km4ucmVkKSxzPU1hdGgucm91bmQoMjU1Km4uZ3JlZW4pLGM9TWF0aC5yb3VuZCgyNTUqbi5ibHVlKTtmdW5jdGlvbiBsKGUpe3ZhciB0PWUudG9TdHJpbmcoMTYpO3JldHVybiAyIT09dC5sZW5ndGg/IjAiK3Q6dH1yZXR1cm4gaT0xPT09bi5hbHBoYT8iIyIuY29uY2F0KGwoYSkpLmNvbmNhdChsKHMpKS5jb25jYXQobChjKSk6IiMiLmNvbmNhdChsKGEpKS5jb25jYXQobChzKSkuY29uY2F0KGwoYykpLmNvbmNhdChsKE1hdGgucm91bmQoMjU1Km4uYWxwaGEpKSksby5wdXNoKHtsYWJlbDppLHRleHRFZGl0OlZyLnJlcGxhY2UocixKU09OLnN0cmluZ2lmeShpKSl9KSxvfSxlfSgpO2Z1bmN0aW9uIGxhKGUsdCl7cmV0dXJuIGxyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpfXZhciB1YSxoYSxmYSxkYSxtYSxnYSxwYT1BbygpLGJhPXtzY2hlbWFBc3NvY2lhdGlvbnM6W10sc2NoZW1hczp7Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hIyI6eyRyZWY6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyJ9LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiOnskc2NoZW1hOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiLGRlZmluaXRpb25zOntzY2hlbWFBcnJheTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsaXRlbXM6eyRyZWY6IiMifX0scG9zaXRpdmVJbnRlZ2VyOnt0eXBlOiJpbnRlZ2VyIixtaW5pbXVtOjB9LHBvc2l0aXZlSW50ZWdlckRlZmF1bHQwOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn0se2RlZmF1bHQ6MH1dfSxzaW1wbGVUeXBlczp7dHlwZToic3RyaW5nIixlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH19LHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkc2NoZW1hOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sdGl0bGU6e3R5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0eXBlOiJzdHJpbmcifSxkZWZhdWx0Ont9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsbWluaW11bTowLGV4Y2x1c2l2ZU1pbmltdW06ITB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1heExlbmd0aDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluTGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHBhdHRlcm46e3R5cGU6InN0cmluZyIsZm9ybWF0OiJyZWdleCJ9LGFkZGl0aW9uYWxJdGVtczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6e319LG1heEl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5JdGVtczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4UHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluUHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSxyZXF1aXJlZDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfSxhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxkZXBlbmRlbmNpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfX0sZW51bTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7YW55T2Y6W3t0eXBlOiJzdHJpbmciLGVudW06WyJkYXRlLXRpbWUiLCJ1cmkiLCJlbWFpbCIsImhvc3RuYW1lIiwiaXB2NCIsImlwdjYiLCJyZWdleCJdfSx7dHlwZToic3RyaW5nIn1dfSxhbGxPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxhbnlPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxvbmVPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxub3Q6e2FsbE9mOlt7JHJlZjoiIyJ9XX19LGRlcGVuZGVuY2llczp7ZXhjbHVzaXZlTWF4aW11bTpbIm1heGltdW0iXSxleGNsdXNpdmVNaW5pbXVtOlsibWluaW11bSJdfSxkZWZhdWx0Ont9fSwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIjp7ZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxub25OZWdhdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0sbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOntlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sdW5pcXVlSXRlbXM6ITAsZGVmYXVsdDpbXX19LHR5cGU6WyJvYmplY3QiLCJib29sZWFuIl0scHJvcGVydGllczp7JGlkOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkcmVmOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRjb21tZW50Ont0eXBlOiJzdHJpbmcifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6ITAscmVhZE9ubHk6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGV4YW1wbGVzOnt0eXBlOiJhcnJheSIsaXRlbXM6ITB9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsZXhjbHVzaXZlTWluaW11bTowfSxtYXhpbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNYXhpbXVtOnt0eXBlOiJudW1iZXIifSxtaW5pbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0eXBlOiJudW1iZXIifSxtYXhMZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluTGVuZ3RoOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnskcmVmOiIjIn0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6ITB9LG1heEl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pbkl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0sdW5pcXVlSXRlbXM6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGNvbnRhaW5zOnskcmVmOiIjIn0sbWF4UHJvcGVydGllczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5Qcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scmVxdWlyZWQ6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifSxhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmluaXRpb25zOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHBhdHRlcm5Qcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0scHJvcGVydHlOYW1lczp7Zm9ybWF0OiJyZWdleCJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxwcm9wZXJ0eU5hbWVzOnskcmVmOiIjIn0sY29uc3Q6ITAsZW51bTp7dHlwZToiYXJyYXkiLGl0ZW1zOiEwLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7dHlwZToic3RyaW5nIn0sY29udGVudE1lZGlhVHlwZTp7dHlwZToic3RyaW5nIn0sY29udGVudEVuY29kaW5nOnt0eXBlOiJzdHJpbmcifSxpZjp7JHJlZjoiIyJ9LHRoZW46eyRyZWY6IiMifSxlbHNlOnskcmVmOiIjIn0sYWxsT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxhbnlPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LG9uZU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sbm90OnskcmVmOiIjIn19LGRlZmF1bHQ6ITB9fX0sdmE9e2lkOnBhKCJzY2hlbWEuanNvbi5pZCIsIkEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzY2hlbWEuIiksJHNjaGVtYTpwYSgic2NoZW1hLmpzb24uJHNjaGVtYSIsIlRoZSBzY2hlbWEgdG8gdmVyaWZ5IHRoaXMgZG9jdW1lbnQgYWdhaW5zdC4iKSx0aXRsZTpwYSgic2NoZW1hLmpzb24udGl0bGUiLCJBIGRlc2NyaXB0aXZlIHRpdGxlIG9mIHRoZSBlbGVtZW50LiIpLGRlc2NyaXB0aW9uOnBhKCJzY2hlbWEuanNvbi5kZXNjcmlwdGlvbiIsIkEgbG9uZyBkZXNjcmlwdGlvbiBvZiB0aGUgZWxlbWVudC4gVXNlZCBpbiBob3ZlciBtZW51cyBhbmQgc3VnZ2VzdGlvbnMuIiksZGVmYXVsdDpwYSgic2NoZW1hLmpzb24uZGVmYXVsdCIsIkEgZGVmYXVsdCB2YWx1ZS4gVXNlZCBieSBzdWdnZXN0aW9ucy4iKSxtdWx0aXBsZU9mOnBhKCJzY2hlbWEuanNvbi5tdWx0aXBsZU9mIiwiQSBudW1iZXIgdGhhdCBzaG91bGQgY2xlYW5seSBkaXZpZGUgdGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gaGF2ZSBubyByZW1haW5kZXIpLiIpLG1heGltdW06cGEoInNjaGVtYS5qc29uLm1heGltdW0iLCJUaGUgbWF4aW11bSBudW1lcmljYWwgdmFsdWUsIGluY2x1c2l2ZSBieSBkZWZhdWx0LiIpLGV4Y2x1c2l2ZU1heGltdW06cGEoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1heGltdW0iLCJNYWtlcyB0aGUgbWF4aW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWluaW11bTpwYSgic2NoZW1hLmpzb24ubWluaW11bSIsIlRoZSBtaW5pbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWluaW11bTpwYSgic2NoZW1hLmpzb24uZXhjbHVzaXZlTWluaW51bSIsIk1ha2VzIHRoZSBtaW5pbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtYXhMZW5ndGg6cGEoInNjaGVtYS5qc29uLm1heExlbmd0aCIsIlRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxtaW5MZW5ndGg6cGEoInNjaGVtYS5qc29uLm1pbkxlbmd0aCIsIlRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxwYXR0ZXJuOnBhKCJzY2hlbWEuanNvbi5wYXR0ZXJuIiwiQSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIHN0cmluZyBhZ2FpbnN0LiBJdCBpcyBub3QgaW1wbGljaXRseSBhbmNob3JlZC4iKSxhZGRpdGlvbmFsSXRlbXM6cGEoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxJdGVtcyIsIkZvciBhcnJheXMsIG9ubHkgd2hlbiBpdGVtcyBpcyBzZXQgYXMgYW4gYXJyYXkuIElmIGl0IGlzIGEgc2NoZW1hLCB0aGVuIHRoaXMgc2NoZW1hIHZhbGlkYXRlcyBpdGVtcyBhZnRlciB0aGUgb25lcyBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1zIGFycmF5LiBJZiBpdCBpcyBmYWxzZSwgdGhlbiBhZGRpdGlvbmFsIGl0ZW1zIHdpbGwgY2F1c2UgdmFsaWRhdGlvbiB0byBmYWlsLiIpLGl0ZW1zOnBhKCJzY2hlbWEuanNvbi5pdGVtcyIsIkZvciBhcnJheXMuIENhbiBlaXRoZXIgYmUgYSBzY2hlbWEgdG8gdmFsaWRhdGUgZXZlcnkgZWxlbWVudCBhZ2FpbnN0IG9yIGFuIGFycmF5IG9mIHNjaGVtYXMgdG8gdmFsaWRhdGUgZWFjaCBpdGVtIGFnYWluc3QgaW4gb3JkZXIgKHRoZSBmaXJzdCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIHNlY29uZCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi4iKSxtYXhJdGVtczpwYSgic2NoZW1hLmpzb24ubWF4SXRlbXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksbWluSXRlbXM6cGEoInNjaGVtYS5qc29uLm1pbkl0ZW1zIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLHVuaXF1ZUl0ZW1zOnBhKCJzY2hlbWEuanNvbi51bmlxdWVJdGVtcyIsIklmIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IG11c3QgYmUgdW5pcXVlLiBEZWZhdWx0cyB0byBmYWxzZS4iKSxtYXhQcm9wZXJ0aWVzOnBhKCJzY2hlbWEuanNvbi5tYXhQcm9wZXJ0aWVzIiwiVGhlIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIiksbWluUHJvcGVydGllczpwYSgic2NoZW1hLmpzb24ubWluUHJvcGVydGllcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLHJlcXVpcmVkOnBhKCJzY2hlbWEuanNvbi5yZXF1aXJlZCIsIkFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgcmVxdWlyZWQgb24gdGhpcyBvYmplY3QuIiksYWRkaXRpb25hbFByb3BlcnRpZXM6cGEoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiRWl0aGVyIGEgc2NoZW1hIG9yIGEgYm9vbGVhbi4gSWYgYSBzY2hlbWEsIHRoZW4gdXNlZCB0byB2YWxpZGF0ZSBhbGwgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSAncHJvcGVydGllcycgb3IgJ3BhdHRlcm5Qcm9wZXJ0aWVzJy4gSWYgZmFsc2UsIHRoZW4gYW55IHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgZWl0aGVyIHdpbGwgY2F1c2UgdGhpcyBzY2hlbWEgdG8gZmFpbC4iKSxkZWZpbml0aW9uczpwYSgic2NoZW1hLmpzb24uZGVmaW5pdGlvbnMiLCJOb3QgdXNlZCBmb3IgdmFsaWRhdGlvbi4gUGxhY2Ugc3Vic2NoZW1hcyBoZXJlIHRoYXQgeW91IHdpc2ggdG8gcmVmZXJlbmNlIGlubGluZSB3aXRoICRyZWYuIikscHJvcGVydGllczpwYSgic2NoZW1hLmpzb24ucHJvcGVydGllcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIGVhY2ggcHJvcGVydHkuIikscGF0dGVyblByb3BlcnRpZXM6cGEoInNjaGVtYS5qc29uLnBhdHRlcm5Qcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcmVndWxhciBleHByZXNzaW9ucyBvbiBwcm9wZXJ0eSBuYW1lcyB0byBzY2hlbWFzIGZvciBtYXRjaGluZyBwcm9wZXJ0aWVzLiIpLGRlcGVuZGVuY2llczpwYSgic2NoZW1hLmpzb24uZGVwZW5kZW5jaWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gZWl0aGVyIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG9yIGEgc2NoZW1hLiBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBtZWFucyB0aGUgcHJvcGVydHkgbmFtZWQgaW4gdGhlIGtleSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheSBiZWluZyBwcmVzZW50IGluIHRoZSBvYmplY3QgaW4gb3JkZXIgdG8gYmUgdmFsaWQuIElmIHRoZSB2YWx1ZSBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgc2NoZW1hIGlzIG9ubHkgYXBwbGllZCB0byB0aGUgb2JqZWN0IGlmIHRoZSBwcm9wZXJ0eSBpbiB0aGUga2V5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LiIpLGVudW06cGEoInNjaGVtYS5qc29uLmVudW0iLCJUaGUgc2V0IG9mIGxpdGVyYWwgdmFsdWVzIHRoYXQgYXJlIHZhbGlkLiIpLHR5cGU6cGEoInNjaGVtYS5qc29uLnR5cGUiLCJFaXRoZXIgYSBzdHJpbmcgb2Ygb25lIG9mIHRoZSBiYXNpYyBzY2hlbWEgdHlwZXMgKG51bWJlciwgaW50ZWdlciwgbnVsbCwgYXJyYXksIG9iamVjdCwgYm9vbGVhbiwgc3RyaW5nKSBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHNwZWNpZnlpbmcgYSBzdWJzZXQgb2YgdGhvc2UgdHlwZXMuIiksZm9ybWF0OnBhKCJzY2hlbWEuanNvbi5mb3JtYXQiLCJEZXNjcmliZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgdGhlIHZhbHVlLiIpLGFsbE9mOnBhKCJzY2hlbWEuanNvbi5hbGxPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGFsbCBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLGFueU9mOnBhKCJzY2hlbWEuanNvbi5hbnlPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIHdoZXJlIGF0IGxlYXN0IG9uZSBtdXN0IG1hdGNoLiIpLG9uZU9mOnBhKCJzY2hlbWEuanNvbi5vbmVPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGV4YWN0bHkgb25lIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksbm90OnBhKCJzY2hlbWEuanNvbi5ub3QiLCJBIHNjaGVtYSB3aGljaCBtdXN0IG5vdCBtYXRjaC4iKSwkaWQ6cGEoInNjaGVtYS5qc29uLiRpZCIsIkEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzY2hlbWEuIiksJHJlZjpwYSgic2NoZW1hLmpzb24uJHJlZiIsIlJlZmVyZW5jZSBhIGRlZmluaXRpb24gaG9zdGVkIG9uIGFueSBsb2NhdGlvbi4iKSwkY29tbWVudDpwYSgic2NoZW1hLmpzb24uJGNvbW1lbnQiLCJDb21tZW50cyBmcm9tIHNjaGVtYSBhdXRob3JzIHRvIHJlYWRlcnMgb3IgbWFpbnRhaW5lcnMgb2YgdGhlIHNjaGVtYS4iKSxyZWFkT25seTpwYSgic2NoZW1hLmpzb24ucmVhZE9ubHkiLCJJbmRpY2F0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGluc3RhbmNlIGlzIG1hbmFnZWQgZXhjbHVzaXZlbHkgYnkgdGhlIG93bmluZyBhdXRob3JpdHkuIiksZXhhbXBsZXM6cGEoInNjaGVtYS5qc29uLmV4YW1wbGVzIiwiU2FtcGxlIEpTT04gdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NoZW1hLCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWxsdXN0cmF0aW5nIHVzYWdlLiIpLGNvbnRhaW5zOnBhKCJzY2hlbWEuanNvbi5jb250YWlucyIsJ0FuIGFycmF5IGluc3RhbmNlIGlzIHZhbGlkIGFnYWluc3QgImNvbnRhaW5zIiBpZiBhdCBsZWFzdCBvbmUgb2YgaXRzIGVsZW1lbnRzIGlzIHZhbGlkIGFnYWluc3QgdGhlIGdpdmVuIHNjaGVtYS4nKSxwcm9wZXJ0eU5hbWVzOnBhKCJzY2hlbWEuanNvbi5wcm9wZXJ0eU5hbWVzIiwiSWYgdGhlIGluc3RhbmNlIGlzIGFuIG9iamVjdCwgdGhpcyBrZXl3b3JkIHZhbGlkYXRlcyBpZiBldmVyeSBwcm9wZXJ0eSBuYW1lIGluIHRoZSBpbnN0YW5jZSB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgcHJvdmlkZWQgc2NoZW1hLiIpLGNvbnN0OnBhKCJzY2hlbWEuanNvbi5jb25zdCIsIkFuIGluc3RhbmNlIHZhbGlkYXRlcyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGlzIGtleXdvcmQgaWYgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUga2V5d29yZC4iKSxjb250ZW50TWVkaWFUeXBlOnBhKCJzY2hlbWEuanNvbi5jb250ZW50TWVkaWFUeXBlIiwiRGVzY3JpYmVzIHRoZSBtZWRpYSB0eXBlIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGNvbnRlbnRFbmNvZGluZzpwYSgic2NoZW1hLmpzb24uY29udGVudEVuY29kaW5nIiwiRGVzY3JpYmVzIHRoZSBjb250ZW50IGVuY29kaW5nIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGlmOnBhKCJzY2hlbWEuanNvbi5pZiIsJ1RoZSB2YWxpZGF0aW9uIG91dGNvbWUgb2YgdGhlICJpZiIgc3Vic2NoZW1hIGNvbnRyb2xzIHdoaWNoIG9mIHRoZSAidGhlbiIgb3IgImVsc2UiIGtleXdvcmRzIGFyZSBldmFsdWF0ZWQuJyksdGhlbjpwYSgic2NoZW1hLmpzb24udGhlbiIsJ1RoZSAiaWYiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIHN1Y2NlZWRzLicpLGVsc2U6cGEoInNjaGVtYS5qc29uLmVsc2UiLCdUaGUgImVsc2UiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIGZhaWxzLicpfTtmb3IobWEgaW4gYmEuc2NoZW1hcylmb3IoZGEgaW4odWE9YmEuc2NoZW1hc1ttYV0pLnByb3BlcnRpZXMpImJvb2xlYW4iPT10eXBlb2YoaGE9dWEucHJvcGVydGllc1tkYV0pJiYoaGE9dWEucHJvcGVydGllc1tkYV09e30pLChmYT12YVtkYV0pP2hhLmRlc2NyaXB0aW9uPWZhOmNvbnNvbGUubG9nKCIiLmNvbmNhdChkYSwiOiBsb2NhbGl6ZSgnc2NoZW1hLmpzb24uIikuY29uY2F0KGRhLCdcJywgIiIpJykpO2dhPSgoKT0+e3ZhciBlPXs0NzA6ZT0+e2Z1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeShlKSl9ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbixyPSIiLGk9MCxvPS0xLGE9MCxzPTA7czw9ZS5sZW5ndGg7KytzKXtpZihzPGUubGVuZ3RoKW49ZS5jaGFyQ29kZUF0KHMpO2Vsc2V7aWYoNDc9PT1uKWJyZWFrO249NDd9aWYoNDc9PT1uKXtpZihvPT09cy0xfHwxPT09YSk7ZWxzZSBpZihvIT09cy0xJiYyPT09YSl7aWYoci5sZW5ndGg8Mnx8MiE9PWl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSlpZihyLmxlbmd0aD4yKXt2YXIgYz1yLmxhc3RJbmRleE9mKCIvIik7aWYoYyE9PXIubGVuZ3RoLTEpey0xPT09Yz8ocj0iIixpPTApOmk9KHI9ci5zbGljZSgwLGMpKS5sZW5ndGgtMS1yLmxhc3RJbmRleE9mKCIvIiksbz1zLGE9MDtjb250aW51ZX19ZWxzZSBpZigyPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aCl7cj0iIixpPTAsbz1zLGE9MDtjb250aW51ZX10JiYoci5sZW5ndGg+MD9yKz0iLy4uIjpyPSIuLiIsaT0yKX1lbHNlIHIubGVuZ3RoPjA/cis9Ii8iK2Uuc2xpY2UobysxLHMpOnI9ZS5zbGljZShvKzEscyksaT1zLW8tMTtvPXMsYT0wfWVsc2UgNDY9PT1uJiYtMSE9PWE/KythOmE9LTF9cmV0dXJuIHJ9dmFyIHI9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGUscj0iIixpPSExLG89YXJndW1lbnRzLmxlbmd0aC0xO28+PS0xJiYhaTtvLS0pe3ZhciBhO28+PTA/YT1hcmd1bWVudHNbb106KHZvaWQgMD09PWUmJihlPXByb2Nlc3MuY3dkKCkpLGE9ZSksdChhKSwwIT09YS5sZW5ndGgmJihyPWErIi8iK3IsaT00Nz09PWEuY2hhckNvZGVBdCgwKSl9cmV0dXJuIHI9bihyLCFpKSxpP3IubGVuZ3RoPjA/Ii8iK3I6Ii8iOnIubGVuZ3RoPjA/cjoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihlKXtpZih0KGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7dmFyIHI9NDc9PT1lLmNoYXJDb2RlQXQoMCksaT00Nz09PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtyZXR1cm4gMCE9PShlPW4oZSwhcikpLmxlbmd0aHx8cnx8KGU9Ii4iKSxlLmxlbmd0aD4wJiZpJiYoZSs9Ii8iKSxyPyIvIitlOmV9LGlzQWJzb2x1dGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSksZS5sZW5ndGg+MCYmNDc9PT1lLmNoYXJDb2RlQXQoMCl9LGpvaW46ZnVuY3Rpb24oKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBlLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7KytuKXt2YXIgaT1hcmd1bWVudHNbbl07dChpKSxpLmxlbmd0aD4wJiYodm9pZCAwPT09ZT9lPWk6ZSs9Ii8iK2kpfXJldHVybiB2b2lkIDA9PT1lPyIuIjpyLm5vcm1hbGl6ZShlKX0scmVsYXRpdmU6ZnVuY3Rpb24oZSxuKXtpZih0KGUpLHQobiksZT09PW4pcmV0dXJuIiI7aWYoKGU9ci5yZXNvbHZlKGUpKT09PShuPXIucmVzb2x2ZShuKSkpcmV0dXJuIiI7Zm9yKHZhciBpPTE7aTxlLmxlbmd0aCYmNDc9PT1lLmNoYXJDb2RlQXQoaSk7KytpKTtmb3IodmFyIG89ZS5sZW5ndGgsYT1vLWkscz0xO3M8bi5sZW5ndGgmJjQ3PT09bi5jaGFyQ29kZUF0KHMpOysrcyk7Zm9yKHZhciBjPW4ubGVuZ3RoLXMsbD1hPGM/YTpjLHU9LTEsaD0wO2g8PWw7KytoKXtpZihoPT09bCl7aWYoYz5sKXtpZig0Nz09PW4uY2hhckNvZGVBdChzK2gpKXJldHVybiBuLnNsaWNlKHMraCsxKTtpZigwPT09aClyZXR1cm4gbi5zbGljZShzK2gpfWVsc2UgYT5sJiYoNDc9PT1lLmNoYXJDb2RlQXQoaStoKT91PWg6MD09PWgmJih1PTApKTticmVha312YXIgZj1lLmNoYXJDb2RlQXQoaStoKTtpZihmIT09bi5jaGFyQ29kZUF0KHMraCkpYnJlYWs7NDc9PT1mJiYodT1oKX12YXIgZD0iIjtmb3IoaD1pK3UrMTtoPD1vOysraCloIT09byYmNDchPT1lLmNoYXJDb2RlQXQoaCl8fCgwPT09ZC5sZW5ndGg/ZCs9Ii4uIjpkKz0iLy4uIik7cmV0dXJuIGQubGVuZ3RoPjA/ZCtuLnNsaWNlKHMrdSk6KHMrPXUsNDc9PT1uLmNoYXJDb2RlQXQocykmJisrcyxuLnNsaWNlKHMpKX0sX21ha2VMb25nOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkaXJuYW1lOmZ1bmN0aW9uKGUpe2lmKHQoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIG49ZS5jaGFyQ29kZUF0KDApLHI9NDc9PT1uLGk9LTEsbz0hMCxhPWUubGVuZ3RoLTE7YT49MTstLWEpaWYoNDc9PT0obj1lLmNoYXJDb2RlQXQoYSkpKXtpZighbyl7aT1hO2JyZWFrfX1lbHNlIG89ITE7cmV0dXJuLTE9PT1pP3I/Ii8iOiIuIjpyJiYxPT09aT8iLy8iOmUuc2xpY2UoMCxpKX0sYmFzZW5hbWU6ZnVuY3Rpb24oZSxuKXtpZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO3QoZSk7dmFyIHIsaT0wLG89LTEsYT0hMDtpZih2b2lkIDAhPT1uJiZuLmxlbmd0aD4wJiZuLmxlbmd0aDw9ZS5sZW5ndGgpe2lmKG4ubGVuZ3RoPT09ZS5sZW5ndGgmJm49PT1lKXJldHVybiIiO3ZhciBzPW4ubGVuZ3RoLTEsYz0tMTtmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgbD1lLmNoYXJDb2RlQXQocik7aWYoNDc9PT1sKXtpZighYSl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PWMmJihhPSExLGM9cisxKSxzPj0wJiYobD09PW4uY2hhckNvZGVBdChzKT8tMT09LS1zJiYobz1yKToocz0tMSxvPWMpKX1yZXR1cm4gaT09PW8/bz1jOi0xPT09byYmKG89ZS5sZW5ndGgpLGUuc2xpY2UoaSxvKX1mb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWlmKDQ3PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighYSl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PW8mJihhPSExLG89cisxKTtyZXR1cm4tMT09PW8/IiI6ZS5zbGljZShpLG8pfSxleHRuYW1lOmZ1bmN0aW9uKGUpe3QoZSk7Zm9yKHZhciBuPS0xLHI9MCxpPS0xLG89ITAsYT0wLHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7dmFyIGM9ZS5jaGFyQ29kZUF0KHMpO2lmKDQ3IT09YyktMT09PWkmJihvPSExLGk9cysxKSw0Nj09PWM/LTE9PT1uP249czoxIT09YSYmKGE9MSk6LTEhPT1uJiYoYT0tMSk7ZWxzZSBpZighbyl7cj1zKzE7YnJlYWt9fXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7cmV0dXJuIG49KHQ9ZSkuZGlyfHx0LnJvb3Qscj10LmJhc2V8fCh0Lm5hbWV8fCIiKSsodC5leHR8fCIiKSxuP249PT10LnJvb3Q/bityOm4rIi8iK3I6cjt2YXIgdCxuLHJ9LHBhcnNlOmZ1bmN0aW9uKGUpe3QoZSk7dmFyIG49e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbjt2YXIgcixpPWUuY2hhckNvZGVBdCgwKSxvPTQ3PT09aTtvPyhuLnJvb3Q9Ii8iLHI9MSk6cj0wO2Zvcih2YXIgYT0tMSxzPTAsYz0tMSxsPSEwLHU9ZS5sZW5ndGgtMSxoPTA7dT49cjstLXUpaWYoNDchPT0oaT1lLmNoYXJDb2RlQXQodSkpKS0xPT09YyYmKGw9ITEsYz11KzEpLDQ2PT09aT8tMT09PWE/YT11OjEhPT1oJiYoaD0xKTotMSE9PWEmJihoPS0xKTtlbHNlIGlmKCFsKXtzPXUrMTticmVha31yZXR1cm4tMT09PWF8fC0xPT09Y3x8MD09PWh8fDE9PT1oJiZhPT09Yy0xJiZhPT09cysxPy0xIT09YyYmKG4uYmFzZT1uLm5hbWU9MD09PXMmJm8/ZS5zbGljZSgxLGMpOmUuc2xpY2UocyxjKSk6KDA9PT1zJiZvPyhuLm5hbWU9ZS5zbGljZSgxLGEpLG4uYmFzZT1lLnNsaWNlKDEsYykpOihuLm5hbWU9ZS5zbGljZShzLGEpLG4uYmFzZT1lLnNsaWNlKHMsYykpLG4uZXh0PWUuc2xpY2UoYSxjKSkscz4wP24uZGlyPWUuc2xpY2UoMCxzLTEpOm8mJihuLmRpcj0iLyIpLG59LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9O3IucG9zaXg9cixlLmV4cG9ydHM9cn0sNDQ3OihlLHQsbik9Pnt2YXIgcjtpZihuLnIodCksbi5kKHQse1VSSTooKT0+ZyxVdGlsczooKT0+eH0pLCJvYmplY3QiPT10eXBlb2YgcHJvY2VzcylyPSJ3aW4zMiI9PT1wcm9jZXNzLnBsYXRmb3JtO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3Ipe3ZhciBpPW5hdmlnYXRvci51c2VyQWdlbnQ7cj1pLmluZGV4T2YoIldpbmRvd3MiKT49MH12YXIgbyxhLHM9KG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4obz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHQpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9byhlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0pLGM9L15cd1tcd1xkKy4tXSokLyxsPS9eXC8vLHU9L15cL1wvLztmdW5jdGlvbiBoKGUsdCl7aWYoIWUuc2NoZW1lJiZ0KXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogU2NoZW1lIGlzIG1pc3Npbmc6IHtzY2hlbWU6ICIiLCBhdXRob3JpdHk6ICInLmNvbmNhdChlLmF1dGhvcml0eSwnIiwgcGF0aDogIicpLmNvbmNhdChlLnBhdGgsJyIsIHF1ZXJ5OiAiJykuY29uY2F0KGUucXVlcnksJyIsIGZyYWdtZW50OiAiJykuY29uY2F0KGUuZnJhZ21lbnQsJyJ9JykpO2lmKGUuc2NoZW1lJiYhYy50ZXN0KGUuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoZS5wYXRoKWlmKGUuYXV0aG9yaXR5KXtpZighbC50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZih1LnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX12YXIgZj0iIixkPSIvIixtPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO3ZvaWQgMD09PW8mJihvPSExKSwib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHxmLHRoaXMuYXV0aG9yaXR5PWUuYXV0aG9yaXR5fHxmLHRoaXMucGF0aD1lLnBhdGh8fGYsdGhpcy5xdWVyeT1lLnF1ZXJ5fHxmLHRoaXMuZnJhZ21lbnQ9ZS5mcmFnbWVudHx8Zik6KHRoaXMuc2NoZW1lPShzPW8sKGE9ZSl8fHM/YToiZmlsZSIpLHRoaXMuYXV0aG9yaXR5PXR8fGYsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1kJiYodD1kK3QpOnQ9ZH1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8ZiksdGhpcy5xdWVyeT1yfHxmLHRoaXMuZnJhZ21lbnQ9aXx8ZixoKHRoaXMsbykpfXJldHVybiBlLmlzVXJpPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8ISF0JiYic3RyaW5nIj09dHlwZW9mIHQuYXV0aG9yaXR5JiYic3RyaW5nIj09dHlwZW9mIHQuZnJhZ21lbnQmJiJzdHJpbmciPT10eXBlb2YgdC5wYXRoJiYic3RyaW5nIj09dHlwZW9mIHQucXVlcnkmJiJzdHJpbmciPT10eXBlb2YgdC5zY2hlbWUmJiJzdHJpbmciPT10eXBlb2YgdC5mc1BhdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LndpdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRvU3RyaW5nfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB3KHRoaXMsITEpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLndpdGg9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIHQ9ZS5zY2hlbWUsbj1lLmF1dGhvcml0eSxyPWUucGF0aCxpPWUucXVlcnksbz1lLmZyYWdtZW50O3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PWYpLHZvaWQgMD09PW4/bj10aGlzLmF1dGhvcml0eTpudWxsPT09biYmKG49Ziksdm9pZCAwPT09cj9yPXRoaXMucGF0aDpudWxsPT09ciYmKHI9Ziksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPWYpLHZvaWQgMD09PW8/bz10aGlzLmZyYWdtZW50Om51bGw9PT1vJiYobz1mKSx0PT09dGhpcy5zY2hlbWUmJm49PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGIodCxuLHIsaSxvKX0sZS5wYXJzZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbj1tLmV4ZWMoZSk7cmV0dXJuIG4/bmV3IGIoblsyXXx8ZixFKG5bNF18fGYpLEUobls1XXx8ZiksRShuWzddfHxmKSxFKG5bOV18fGYpLHQpOm5ldyBiKGYsZixmLGYsZil9LGUuZmlsZT1mdW5jdGlvbihlKXt2YXIgdD1mO2lmKHImJihlPWUucmVwbGFjZSgvXFwvZyxkKSksZVswXT09PWQmJmVbMV09PT1kKXt2YXIgbj1lLmluZGV4T2YoZCwyKTstMT09PW4/KHQ9ZS5zdWJzdHJpbmcoMiksZT1kKToodD1lLnN1YnN0cmluZygyLG4pLGU9ZS5zdWJzdHJpbmcobil8fGQpfXJldHVybiBuZXcgYigiZmlsZSIsdCxlLGYsZil9LGUuZnJvbT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgYihlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50KTtyZXR1cm4gaCh0LCEwKSx0fSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLF8odGhpcyxlKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucmV2aXZlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBlKXJldHVybiB0O3ZhciBuPW5ldyBiKHQpO3JldHVybiBuLl9mb3JtYXR0ZWQ9dC5leHRlcm5hbCxuLl9mc1BhdGg9dC5fc2VwPT09cD90LmZzUGF0aDpudWxsLG59cmV0dXJuIHR9LGV9KCkscD1yPzE6dm9pZCAwLGI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5fZm9ybWF0dGVkPW51bGwsdC5fZnNQYXRoPW51bGwsdH1yZXR1cm4gcyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD13KHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxlP18odGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1fKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoZS5mc1BhdGg9dGhpcy5fZnNQYXRoLGUuX3NlcD1wKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX0sdH0oZyksdj0oKGE9e30pWzU4XT0iJTNBIixhWzQ3XT0iJTJGIixhWzYzXT0iJTNGIixhWzM1XT0iJTIzIixhWzkxXT0iJTVCIixhWzkzXT0iJTVEIixhWzY0XT0iJTQwIixhWzMzXT0iJTIxIixhWzM2XT0iJTI0IixhWzM4XT0iJTI2IixhWzM5XT0iJTI3IixhWzQwXT0iJTI4IixhWzQxXT0iJTI5IixhWzQyXT0iJTJBIixhWzQzXT0iJTJCIixhWzQ0XT0iJTJDIixhWzU5XT0iJTNCIixhWzYxXT0iJTNEIixhWzMyXT0iJTIwIixhKTtmdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciBuPXZvaWQgMCxyPS0xLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZS5jaGFyQ29kZUF0KGkpO2lmKG8+PTk3JiZvPD0xMjJ8fG8+PTY1JiZvPD05MHx8bz49NDgmJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHx0JiY0Nz09PW8pLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLHZvaWQgMCE9PW4mJihuKz1lLmNoYXJBdChpKSk7ZWxzZXt2b2lkIDA9PT1uJiYobj1lLnN1YnN0cigwLGkpKTt2YXIgYT12W29dO3ZvaWQgMCE9PWE/KC0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSxuKz1hKTotMT09PXImJihyPWkpfX1yZXR1cm4tMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocikpKSx2b2lkIDAhPT1uP246ZX1mdW5jdGlvbiBDKGUpe2Zvcih2YXIgdD12b2lkIDAsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lLmNoYXJDb2RlQXQobik7MzU9PT1yfHw2Mz09PXI/KHZvaWQgMD09PXQmJih0PWUuc3Vic3RyKDAsbikpLHQrPXZbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gdyhlLHQpe3ZhciBuO3JldHVybiBuPWUuYXV0aG9yaXR5JiZlLnBhdGgubGVuZ3RoPjEmJiJmaWxlIj09PWUuc2NoZW1lPyIvLyIuY29uY2F0KGUuYXV0aG9yaXR5KS5jb25jYXQoZS5wYXRoKTo0Nz09PWUucGF0aC5jaGFyQ29kZUF0KDApJiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJjU4PT09ZS5wYXRoLmNoYXJDb2RlQXQoMik/dD9lLnBhdGguc3Vic3RyKDEpOmUucGF0aFsxXS50b0xvd2VyQ2FzZSgpK2UucGF0aC5zdWJzdHIoMik6ZS5wYXRoLHImJihuPW4ucmVwbGFjZSgvXC8vZywiXFwiKSksbn1mdW5jdGlvbiBfKGUsdCl7dmFyIG49dD9DOnkscj0iIixpPWUuc2NoZW1lLG89ZS5hdXRob3JpdHksYT1lLnBhdGgscz1lLnF1ZXJ5LGM9ZS5mcmFnbWVudDtpZihpJiYocis9aSxyKz0iOiIpLChvfHwiZmlsZSI9PT1pKSYmKHIrPWQscis9ZCksbyl7dmFyIGw9by5pbmRleE9mKCJAIik7aWYoLTEhPT1sKXt2YXIgdT1vLnN1YnN0cigwLGwpO289by5zdWJzdHIobCsxKSwtMT09PShsPXUuaW5kZXhPZigiOiIpKT9yKz1uKHUsITEpOihyKz1uKHUuc3Vic3RyKDAsbCksITEpLHIrPSI6IixyKz1uKHUuc3Vic3RyKGwrMSksITEpKSxyKz0iQCJ9LTE9PT0obD0obz1vLnRvTG93ZXJDYXNlKCkpLmluZGV4T2YoIjoiKSk/cis9bihvLCExKToocis9bihvLnN1YnN0cigwLGwpLCExKSxyKz1vLnN1YnN0cihsKSl9aWYoYSl7aWYoYS5sZW5ndGg+PTMmJjQ3PT09YS5jaGFyQ29kZUF0KDApJiY1OD09PWEuY2hhckNvZGVBdCgyKSkoaD1hLmNoYXJDb2RlQXQoMSkpPj02NSYmaDw9OTAmJihhPSIvIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShoKzMyKSwiOiIpLmNvbmNhdChhLnN1YnN0cigzKSkpO2Vsc2UgaWYoYS5sZW5ndGg+PTImJjU4PT09YS5jaGFyQ29kZUF0KDEpKXt2YXIgaDsoaD1hLmNoYXJDb2RlQXQoMCkpPj02NSYmaDw9OTAmJihhPSIiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGgrMzIpLCI6IikuY29uY2F0KGEuc3Vic3RyKDIpKSl9cis9bihhLCEwKX1yZXR1cm4gcyYmKHIrPSI/IixyKz1uKHMsITEpKSxjJiYocis9IiMiLHIrPXQ/Yzp5KGMsITEpKSxyfWZ1bmN0aW9uIFMoZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIGUubGVuZ3RoPjM/ZS5zdWJzdHIoMCwzKStTKGUuc3Vic3RyKDMpKTplfX12YXIgQT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBFKGUpe3JldHVybiBlLm1hdGNoKEEpP2UucmVwbGFjZShBLChmdW5jdGlvbihlKXtyZXR1cm4gUyhlKX0pKTplfXZhciB4LE4saz1uKDQ3MCksTD1mdW5jdGlvbihlLHQsbil7aWYobnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciByLGk9MCxvPXQubGVuZ3RoO2k8bztpKyspIXImJmkgaW4gdHx8KHJ8fChyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSkscltpXT10W2ldKTtyZXR1cm4gZS5jb25jYXQocnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfSxUPWsucG9zaXh8fGs7KE49eHx8KHg9e30pKS5qb2luUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS53aXRoKHtwYXRoOlQuam9pbi5hcHBseShULEwoW2UucGF0aF0sdCwhMSkpfSl9LE4ucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dmFyIHI9ZS5wYXRofHwiLyI7cmV0dXJuIGUud2l0aCh7cGF0aDpULnJlc29sdmUuYXBwbHkoVCxMKFtyXSx0LCExKSl9KX0sTi5kaXJuYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PVQuZGlybmFtZShlLnBhdGgpO3JldHVybiAxPT09dC5sZW5ndGgmJjQ2PT09dC5jaGFyQ29kZUF0KDApP2U6ZS53aXRoKHtwYXRoOnR9KX0sTi5iYXNlbmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gVC5iYXNlbmFtZShlLnBhdGgpfSxOLmV4dG5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFQuZXh0bmFtZShlLnBhdGgpfX19LHQ9e307ZnVuY3Rpb24gbihyKXtpZih0W3JdKXJldHVybiB0W3JdLmV4cG9ydHM7dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfXJldHVybiBuLmQ9KGUsdCk9Pntmb3IodmFyIHIgaW4gdCluLm8odCxyKSYmIW4ubyhlLHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDp0W3JdfSl9LG4ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksbi5yPWU9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuKDQ0Nyl9KSgpO3ZhcntVUkk6eWEsVXRpbHM6Q2F9PWdhO2Z1bmN0aW9uIHdhKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7Zm9yKHZhciBuLHI9U3RyaW5nKGUpLGk9IiIsbz0hIXQmJiEhdC5leHRlbmRlZCxhPSEhdCYmISF0Lmdsb2JzdGFyLHM9ITEsYz10JiYic3RyaW5nIj09dHlwZW9mIHQuZmxhZ3M/dC5mbGFnczoiIixsPTAsdT1yLmxlbmd0aDtsPHU7bCsrKXN3aXRjaChuPXJbbF0pe2Nhc2UiLyI6Y2FzZSIkIjpjYXNlIl4iOmNhc2UiKyI6Y2FzZSIuIjpjYXNlIigiOmNhc2UiKSI6Y2FzZSI9IjpjYXNlIiEiOmNhc2UifCI6aSs9IlxcIituO2JyZWFrO2Nhc2UiPyI6aWYobyl7aSs9Ii4iO2JyZWFrfWNhc2UiWyI6Y2FzZSJdIjppZihvKXtpKz1uO2JyZWFrfWNhc2UieyI6aWYobyl7cz0hMCxpKz0iKCI7YnJlYWt9Y2FzZSJ9IjppZihvKXtzPSExLGkrPSIpIjticmVha31jYXNlIiwiOmlmKHMpe2krPSJ8IjticmVha31pKz0iXFwiK247YnJlYWs7Y2FzZSIqIjpmb3IodmFyIGg9cltsLTFdLGY9MTsiKiI9PT1yW2wrMV07KWYrKyxsKys7dmFyIGQ9cltsKzFdO2lmKGEpZj4xJiYoIi8iPT09aHx8dm9pZCAwPT09aHx8InsiPT09aHx8IiwiPT09aCkmJigiLyI9PT1kfHx2b2lkIDA9PT1kfHwiLCI9PT1kfHwifSI9PT1kKT8oIi8iPT09ZD9sKys6Ii8iPT09aCYmaS5lbmRzV2l0aCgiXFwvIikmJihpPWkuc3Vic3RyKDAsaS5sZW5ndGgtMikpLGkrPSIoKD86W14vXSooPzovfCQpKSopIik6aSs9IihbXi9dKikiO2Vsc2UgaSs9Ii4qIjticmVhaztkZWZhdWx0OmkrPW59cmV0dXJuIGMmJn5jLmluZGV4T2YoImciKXx8KGk9Il4iK2krIiQiKSxuZXcgUmVnRXhwKGksYyl9dmFyIF9hLFNhPUFvKCksQWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5nbG9iV3JhcHBlcnM9W107dHJ5e2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxvPSIhIiE9PWlbMF07b3x8KGk9aS5zdWJzdHJpbmcoMSkpLGkubGVuZ3RoPjAmJigiLyI9PT1pWzBdJiYoaT1pLnN1YnN0cmluZygxKSksdGhpcy5nbG9iV3JhcHBlcnMucHVzaCh7cmVnZXhwOndhKCIqKi8iK2kse2V4dGVuZGVkOiEwLGdsb2JzdGFyOiEwfSksaW5jbHVkZTpvfSkpfXRoaXMudXJpcz10fWNhdGNoKGUpe3RoaXMuZ2xvYldyYXBwZXJzLmxlbmd0aD0wLHRoaXMudXJpcz1bXX19cmV0dXJuIGUucHJvdG90eXBlLm1hdGNoZXNQYXR0ZXJuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxuPTAscj10aGlzLmdsb2JXcmFwcGVycztuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxvPWkucmVnZXhwLGE9aS5pbmNsdWRlO28udGVzdChlKSYmKHQ9YSl9cmV0dXJuIHR9LGUucHJvdG90eXBlLmdldFVSSXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cmlzfSxlfSgpLEVhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5zZXJ2aWNlPWUsdGhpcy51cmk9dCx0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0LHRoaXMuYW5jaG9ycz12b2lkIDAsbiYmKHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UucHJvbWlzZS5yZXNvbHZlKG5ldyB4YShuKSkpfXJldHVybiBlLnByb3RvdHlwZS5nZXRVbnJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5yZXNvbHZlZFNjaGVtYXx8KHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UubG9hZFNjaGVtYSh0aGlzLnVyaSkpLHRoaXMudW5yZXNvbHZlZFNjaGVtYX0sZS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnJlc29sdmVkU2NoZW1hfHwodGhpcy5yZXNvbHZlZFNjaGVtYT10aGlzLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXJ2aWNlLnJlc29sdmVTY2hlbWFDb250ZW50KHQsZSl9KSkpLHRoaXMucmVzb2x2ZWRTY2hlbWF9LGUucHJvdG90eXBlLmNsZWFyU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIGU9ISF0aGlzLnVucmVzb2x2ZWRTY2hlbWE7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMudW5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKSx0aGlzLmFuY2hvcnM9dm9pZCAwLGV9LGV9KCkseGE9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fSxOYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fXJldHVybiBlLnByb3RvdHlwZS5nZXRTZWN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHRoaXMuc2NoZW1hKTtpZih0KXJldHVybiBLbyh0KX0sZS5wcm90b3R5cGUuZ2V0U2VjdGlvblJlY3Vyc2l2ZT1mdW5jdGlvbihlLHQpe2lmKCF0fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49ZS5zaGlmdCgpO2lmKHQucHJvcGVydGllcyYmKHQucHJvcGVydGllc1tuXSwxKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wcm9wZXJ0aWVzW25dKTtpZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgcj0wLGk9T2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcyk7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl0sYT1jaShvKTtpZihudWxsPT1hP3ZvaWQgMDphLnRlc3QobikpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucGF0dGVyblByb3BlcnRpZXNbb10pfWVsc2V7aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtpZihuLm1hdGNoKCJbMC05XSsiKSlpZihBcnJheS5pc0FycmF5KHQuaXRlbXMpKXt2YXIgcz1wYXJzZUludChuLDEwKTtpZighaXNOYU4ocykmJnQuaXRlbXNbc10pcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXNbc10pfWVsc2UgaWYodC5pdGVtcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtcyl9fSxlfSgpLGthPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5jb250ZXh0U2VydmljZT10LHRoaXMucmVxdWVzdFNlcnZpY2U9ZSx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1ufHxQcm9taXNlLHRoaXMuY2FsbE9uRGlzcG9zZT1bXSx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXM9e30sdGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM9W10sdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e319cmV0dXJuIGUucHJvdG90eXBlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHMpLmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIG49eWEucGFyc2UodCkuc2NoZW1lO3JldHVybiJzY2hlbWFzZXJ2aWNlIiE9PW4mJighZXx8ZShuKSl9KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicHJvbWlzZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmNhbGxPbkRpc3Bvc2UubGVuZ3RoPjA7KXRoaXMuY2FsbE9uRGlzcG9zZS5wb3AoKSgpfSxlLnByb3RvdHlwZS5vblJlc291cmNlQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDA7Zm9yKHZhciBuPSExLHI9W2U9VGEoZSldLGk9T2JqZWN0LmtleXModGhpcy5zY2hlbWFzQnlJZCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlbWFzQnlJZFtlXX0pKTtyLmxlbmd0aDspZm9yKHZhciBvPXIucG9wKCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO3MmJihzLnVyaT09PW98fHMuZGVwZW5kZW5jaWVzLmhhcyhvKSkmJihzLnVyaSE9PW8mJnIucHVzaChzLnVyaSkscy5jbGVhclNjaGVtYSgpJiYobj0hMCksaVthXT12b2lkIDApfXJldHVybiBufSxlLnByb3RvdHlwZS5zZXRTY2hlbWFDb250cmlidXRpb25zPWZ1bmN0aW9uKGUpe2lmKGUuc2NoZW1hcyl7dmFyIHQ9ZS5zY2hlbWFzO2Zvcih2YXIgbiBpbiB0KXt2YXIgcj1UYShuKTt0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbcl09dGhpcy5hZGRTY2hlbWFIYW5kbGUocix0W25dKX19aWYoQXJyYXkuaXNBcnJheShlLnNjaGVtYUFzc29jaWF0aW9ucykpZm9yKHZhciBpPTAsbz1lLnNjaGVtYUFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXSxzPWEudXJpcy5tYXAoVGEpLGM9dGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKGEucGF0dGVybixzKTt0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucy5wdXNoKGMpfX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hSGFuZGxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IEVhKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXT1uLG59LGUucHJvdG90eXBlLmdldE9yQWRkU2NoZW1hSGFuZGxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbZV18fHRoaXMuYWRkU2NoZW1hSGFuZGxlKGUsdCl9LGUucHJvdG90eXBlLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgQWEoZSx0KTtyZXR1cm4gdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKG4pLG59LGUucHJvdG90eXBlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVRhKGUpO3JldHVybiB0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW3JdPSEwLHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHQmJnRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbih0LFtyXSksbj90aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pOnRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocil9LGUucHJvdG90eXBlLmNsZWFyRXh0ZXJuYWxTY2hlbWFzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9LHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcyl0aGlzLnNjaGVtYXNCeUlkW2VdPXRoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tlXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW2VdPSEwO2Zvcih2YXIgdD0wLG49dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKHIpfX0sZS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oZSl7dmFyIHQ9VGEoZSksbj10aGlzLnNjaGVtYXNCeUlkW3RdO3JldHVybiBuP24uZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApfSxlLnByb3RvdHlwZS5sb2FkU2NoZW1hPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLnJlcXVlc3RTZXJ2aWNlKXt2YXIgdD1TYSgianNvbi5zY2hlbWEubm9yZXF1ZXN0c2VydmljZSIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nLiBObyBzY2hlbWEgcmVxdWVzdCBzZXJ2aWNlIGF2YWlsYWJsZSIsT2EoZSkpO3JldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgeGEoe30sW3RdKSl9cmV0dXJuIHRoaXMucmVxdWVzdFNlcnZpY2UoZSkudGhlbigoZnVuY3Rpb24odCl7aWYoIXQpe3ZhciBuPVNhKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogTm8gY29udGVudC4iLE9hKGUpKTtyZXR1cm4gbmV3IHhhKHt9LFtuXSl9dmFyIHIsaT1bXTtyPVFyKHQsaSk7dmFyIG89aS5sZW5ndGg/W1NhKCJqc29uLnNjaGVtYS5pbnZhbGlkRm9ybWF0IiwiVW5hYmxlIHRvIHBhcnNlIGNvbnRlbnQgZnJvbSAnezB9JzogUGFyc2UgZXJyb3IgYXQgb2Zmc2V0IHsxfS4iLE9hKGUpLGlbMF0ub2Zmc2V0KV06W107cmV0dXJuIG5ldyB4YShyLG8pfSksKGZ1bmN0aW9uKHQpe3ZhciBuPXQudG9TdHJpbmcoKSxyPXQudG9TdHJpbmcoKS5zcGxpdCgiRXJyb3I6ICIpO3JldHVybiByLmxlbmd0aD4xJiYobj1yWzFdKSxzaShuLCIuIikmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtMSkpLG5ldyB4YSh7fSxbU2EoImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiB7MX0uIixPYShlKSxuKV0pfSkpfSxlLnByb3RvdHlwZS5yZXNvbHZlU2NoZW1hQ29udGVudD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1lLmVycm9ycy5zbGljZSgwKSxpPWUuc2NoZW1hO2lmKGkuJHNjaGVtYSl7dmFyIG89VGEoaS4kc2NoZW1hKTtpZigiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wMy9zY2hlbWEiPT09bylyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IE5hKHt9LFtTYSgianNvbi5zY2hlbWEuZHJhZnQwMy5ub3RzdXBwb3J0ZWQiLCJEcmFmdC0wMyBzY2hlbWFzIGFyZSBub3Qgc3VwcG9ydGVkLiIpXSkpOyJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDE5LTA5L3NjaGVtYSI9PT1vP3IucHVzaChTYSgianNvbi5zY2hlbWEuZHJhZnQyMDE5MDkubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAxOS0wOSBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSk6Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIj09PW8mJnIucHVzaChTYSgianNvbi5zY2hlbWEuZHJhZnQyMDIwMTIubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAyMC0xMiBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSl9dmFyIGE9dGhpcy5jb250ZXh0U2VydmljZSxzPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLGEscyxjO3ZvaWQgMD09PWl8fDA9PT1pLmxlbmd0aD9vPXQ6Ii8iPT09aS5jaGFyQXQoMCk/bz1mdW5jdGlvbihlLHQpe3Q9ZGVjb2RlVVJJQ29tcG9uZW50KHQpO3ZhciBuPWU7cmV0dXJuIi8iPT09dFswXSYmKHQ9dC5zdWJzdHJpbmcoMSkpLHQuc3BsaXQoIi8iKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+IiksIShuPW5bZV0pfSkpLG59KHQsaSk6KGE9dCxjPWksKHM9bikuYW5jaG9yc3x8KHMuYW5jaG9ycz11KGEpKSxvPXMuYW5jaG9ycy5nZXQoYykpLG8/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYhZS5oYXNPd25Qcm9wZXJ0eShuKSYmImlkIiE9PW4mJiIkaWQiIT09biYmKGVbbl09dFtuXSl9KGUsbyk6ci5wdXNoKFNhKCJqc29uLnNjaGVtYS5pbnZhbGlkaWQiLCIkcmVmICd7MH0nIGluICd7MX0nIGNhbiBub3QgYmUgcmVzb2x2ZWQuIixpLG4udXJpKSl9LGM9ZnVuY3Rpb24oZSx0LGksbyl7YSYmIS9eW0EtWmEtel1bQS1aYS16MC05K1wtLitdKjpcL1wvLiovLnRlc3QodCkmJih0PWEucmVzb2x2ZVJlbGF0aXZlUGF0aCh0LG8udXJpKSksdD1UYSh0KTt2YXIgYz1uLmdldE9yQWRkU2NoZW1hSGFuZGxlKHQpO3JldHVybiBjLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbihuKXtpZihvLmRlcGVuZGVuY2llcy5hZGQodCksbi5lcnJvcnMubGVuZ3RoKXt2YXIgYT1pP3QrIiMiK2k6dDtyLnB1c2goU2EoImpzb24uc2NoZW1hLnByb2JsZW1sb2FkaW5ncmVmIiwiUHJvYmxlbXMgbG9hZGluZyByZWZlcmVuY2UgJ3swfSc6IHsxfSIsYSxuLmVycm9yc1swXSkpfXJldHVybiBzKGUsbi5zY2hlbWEsYyxpKSxsKGUsbi5zY2hlbWEsYyl9KSl9LGw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPVtdO3JldHVybiBuLnRyYXZlcnNlTm9kZXMoZSwoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPW5ldyBTZXQ7ZS4kcmVmOyl7dmFyIG89ZS4kcmVmLGE9by5zcGxpdCgiIyIsMik7aWYoZGVsZXRlIGUuJHJlZixhWzBdLmxlbmd0aD4wKXJldHVybiB2b2lkIGkucHVzaChjKGUsYVswXSxhWzFdLHIpKTtpZighbi5oYXMobykpe3ZhciBsPWFbMV07cyhlLHQscixsKSxuLmFkZChvKX19fSkpLG4ucHJvbWlzZS5hbGwoaSl9LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE1hcDtyZXR1cm4gbi50cmF2ZXJzZU5vZGVzKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPWUuJGlkfHxlLmlkO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIiMiPT09bi5jaGFyQXQoMCkpe3ZhciBpPW4uc3Vic3RyaW5nKDEpO3QuaGFzKGkpP3IucHVzaChTYSgianNvbi5zY2hlbWEuZHVwbGljYXRlaWQiLCJEdXBsaWNhdGUgaWQgZGVjbGFyYXRpb246ICd7MH0nIixuKSk6dC5zZXQoaSxlKX19KSksdH07cmV0dXJuIGwoaSxpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTmEoaSxyKX0pKX0sZS5wcm90b3R5cGUudHJhdmVyc2VOb2Rlcz1mdW5jdGlvbihlLHQpe2lmKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtmb3IodmFyIG49bmV3IFNldCxyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTsib2JqZWN0Ij09dHlwZW9mIGkmJmEucHVzaChpKX19LGk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKCJvYmplY3QiPT10eXBlb2YgaSlmb3IodmFyIG8gaW4gaSl7dmFyIHM9byxjPWlbc107Im9iamVjdCI9PXR5cGVvZiBjJiZhLnB1c2goYyl9fX0sbz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MCxzPWk7bzxzLmxlbmd0aDtvKyspe3ZhciBjPXNbb107Im9iamVjdCI9PXR5cGVvZiBjJiZhLnB1c2goYyl9fX0sYT1bZV0scz1hLnBvcCgpO3M7KW4uaGFzKHMpfHwobi5hZGQocyksdChzKSxyKHMuaXRlbXMscy5hZGRpdGlvbmFsSXRlbXMscy5hZGRpdGlvbmFsUHJvcGVydGllcyxzLm5vdCxzLmNvbnRhaW5zLHMucHJvcGVydHlOYW1lcyxzLmlmLHMudGhlbixzLmVsc2UpLGkocy5kZWZpbml0aW9ucyxzLnByb3BlcnRpZXMscy5wYXR0ZXJuUHJvcGVydGllcyxzLmRlcGVuZGVuY2llcyksbyhzLmFueU9mLHMuYWxsT2Yscy5vbmVPZixzLml0ZW1zKSkscz1hLnBvcCgpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGcm9tUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKCJvYmplY3QiPT09KG51bGw9PT0obj10LnJvb3QpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnR5cGUpKWZvcih2YXIgaT0wLG89dC5yb290LnByb3BlcnRpZXM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoIiRzY2hlbWEiPT09YS5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KHI9YS52YWx1ZU5vZGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnR5cGUpKXt2YXIgcz1hLnZhbHVlTm9kZS52YWx1ZTtyZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZSYmIS9eXHdbXHdcZCsuLV0qOi8udGVzdChzKSYmKHM9dGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlUmVsYXRpdmVQYXRoKHMsZSkpLHN9fX0sZS5wcm90b3R5cGUuZ2V0QXNzb2NpYXRlZFNjaGVtYXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksbj1bXSxyPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4geWEucGFyc2UoZSkud2l0aCh7ZnJhZ21lbnQ6bnVsbCxxdWVyeTpudWxsfSkudG9TdHJpbmcoITApfWNhdGNoKHQpe3JldHVybiBlfX0oZSksaT0wLG89dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXTtpZihhLm1hdGNoZXNQYXR0ZXJuKHIpKWZvcih2YXIgcz0wLGM9YS5nZXRVUklzKCk7czxjLmxlbmd0aDtzKyspe3ZhciBsPWNbc107dFtsXXx8KG4ucHVzaChsKSx0W2xdPSEwKX19cmV0dXJuIG59LGUucHJvdG90eXBlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe3ZhciBuPXQmJnRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7cmV0dXJuIG4/W25dOnRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUZvclJlc291cmNlPWZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49dGhpcy5nZXRTY2hlbWFGcm9tUHJvcGVydHkoZSx0KTtpZihuKXt2YXIgcj1UYShuKTtyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShyKS5nZXRSZXNvbHZlZFNjaGVtYSgpfX1pZih0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlJiZ0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlLnJlc291cmNlPT09ZSlyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvbHZlZFNjaGVtYTt2YXIgaT10aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpLG89aS5sZW5ndGg+MD90aGlzLmNyZWF0ZUNvbWJpbmVkU2NoZW1hKGUsaSkuZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApO3JldHVybiB0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXtyZXNvdXJjZTplLHJlc29sdmVkU2NoZW1hOm99LG99LGUucHJvdG90eXBlLmNyZWF0ZUNvbWJpbmVkU2NoZW1hPWZ1bmN0aW9uKGUsdCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHRbMF0pO3ZhciBuPSJzY2hlbWFzZXJ2aWNlOi8vY29tYmluZWRTY2hlbWEvIitlbmNvZGVVUklDb21wb25lbnQoZSkscj17YWxsT2Y6dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnskcmVmOmV9fSkpfTtyZXR1cm4gdGhpcy5hZGRTY2hlbWFIYW5kbGUobixyKX0sZS5wcm90b3R5cGUuZ2V0TWF0Y2hpbmdTY2hlbWFzPWZ1bmN0aW9uKGUsdCxuKXtpZihuKXt2YXIgcj1uLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkL21hdGNoaW5nU2NoZW1hcy8iK0xhKys7cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKHIsbikuZ2V0UmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaW52ZXJ0ZWR9KSl9KSl9cmV0dXJuIHRoaXMuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaW52ZXJ0ZWR9KSk6W119KSl9LGV9KCksTGE9MDtmdW5jdGlvbiBUYShlKXt0cnl7cmV0dXJuIHlhLnBhcnNlKGUpLnRvU3RyaW5nKCEwKX1jYXRjaCh0KXtyZXR1cm4gZX19ZnVuY3Rpb24gT2EoZSl7dHJ5e3ZhciB0PXlhLnBhcnNlKGUpO2lmKCJmaWxlIj09PXQuc2NoZW1lKXJldHVybiB0LmZzUGF0aH1jYXRjaChlKXt9cmV0dXJuIGV9ZnVuY3Rpb24gSWEoZSx0KXt2YXIgbj1bXSxyPVtdLGk9W10sbz0tMSxhPVlyKGUuZ2V0VGV4dCgpLCExKSxzPWEuc2NhbigpO2Z1bmN0aW9uIGMoZSl7bi5wdXNoKGUpLHIucHVzaChpLmxlbmd0aCl9Zm9yKDsxNyE9PXM7KXtzd2l0Y2gocyl7Y2FzZSAxOmNhc2UgMzp2YXIgbD17c3RhcnRMaW5lOmY9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxlbmRMaW5lOmYsa2luZDoxPT09cz8ib2JqZWN0IjoiYXJyYXkifTtpLnB1c2gobCk7YnJlYWs7Y2FzZSAyOmNhc2UgNDp2YXIgdT0yPT09cz8ib2JqZWN0IjoiYXJyYXkiO2lmKGkubGVuZ3RoPjAmJmlbaS5sZW5ndGgtMV0ua2luZD09PXUpe2w9aS5wb3AoKTt2YXIgaD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2wmJmg+bC5zdGFydExpbmUrMSYmbyE9PWwuc3RhcnRMaW5lJiYobC5lbmRMaW5lPWgtMSxjKGwpLG89bC5zdGFydExpbmUpfWJyZWFrO2Nhc2UgMTM6dmFyIGY9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxkPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkrYS5nZXRUb2tlbkxlbmd0aCgpKS5saW5lOzE9PT1hLmdldFRva2VuRXJyb3IoKSYmZisxPGUubGluZUNvdW50P2Euc2V0UG9zaXRpb24oZS5vZmZzZXRBdChzci5jcmVhdGUoZisxLDApKSk6ZjxkJiYoYyh7c3RhcnRMaW5lOmYsZW5kTGluZTpkLGtpbmQ6d3IuQ29tbWVudH0pLG89Zik7YnJlYWs7Y2FzZSAxMjp2YXIgbT1lLmdldFRleHQoKS5zdWJzdHIoYS5nZXRUb2tlbk9mZnNldCgpLGEuZ2V0VG9rZW5MZW5ndGgoKSkubWF0Y2goL15cL1wvXHMqIyhyZWdpb25cYil8KGVuZHJlZ2lvblxiKS8pO2lmKG0pe2g9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtpZihtWzFdKXtsPXtzdGFydExpbmU6aCxlbmRMaW5lOmgsa2luZDp3ci5SZWdpb259O2kucHVzaChsKX1lbHNle2Zvcih2YXIgZz1pLmxlbmd0aC0xO2c+PTAmJmlbZ10ua2luZCE9PXdyLlJlZ2lvbjspZy0tO2lmKGc+PTApe2w9aVtnXTtpLmxlbmd0aD1nLGg+bC5zdGFydExpbmUmJm8hPT1sLnN0YXJ0TGluZSYmKGwuZW5kTGluZT1oLGMobCksbz1sLnN0YXJ0TGluZSl9fX19cz1hLnNjYW4oKX12YXIgcD10JiZ0LnJhbmdlTGltaXQ7aWYoIm51bWJlciIhPXR5cGVvZiBwfHxuLmxlbmd0aDw9cClyZXR1cm4gbjt0JiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkKGUudXJpKTtmb3IodmFyIGI9W10sdj0wLHk9cjt2PHkubGVuZ3RoO3YrKyl7KEE9eVt2XSk8MzAmJihiW0FdPShiW0FdfHwwKSsxKX12YXIgQz0wLHc9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXt2YXIgXz1iW2ddO2lmKF8pe2lmKF8rQz5wKXt3PWc7YnJlYWt9Qys9X319dmFyIFM9W107Zm9yKGc9MDtnPG4ubGVuZ3RoO2crKyl7dmFyIEE7Im51bWJlciI9PXR5cGVvZihBPXJbZ10pJiYoQTx3fHxBPT09dyYmQysrPHApJiZTLnB1c2gobltnXSl9cmV0dXJuIFN9ZnVuY3Rpb24gTWEoZSx0LG4pe2Z1bmN0aW9uIHIodCxuKXtyZXR1cm4gbHIuY3JlYXRlKGUucG9zaXRpb25BdCh0KSxlLnBvc2l0aW9uQXQobikpfXZhciBpPVlyKGUuZ2V0VGV4dCgpLCEwKTtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGkuc2V0UG9zaXRpb24oZSksaS5zY2FuKCk9PT10P2kuZ2V0VG9rZW5PZmZzZXQoKStpLmdldFRva2VuTGVuZ3RoKCk6LTF9cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtmb3IodmFyIGk9ZS5vZmZzZXRBdCh0KSxhPW4uZ2V0Tm9kZUZyb21PZmZzZXQoaSwhMCkscz1bXTthOyl7c3dpdGNoKGEudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2Uib2JqZWN0IjpjYXNlImFycmF5Ijp2YXIgYz1hLm9mZnNldCsxLGw9YS5vZmZzZXQrYS5sZW5ndGgtMTtjPGwmJmk+PWMmJmk8PWwmJnMucHVzaChyKGMsbCkpLHMucHVzaChyKGEub2Zmc2V0LGEub2Zmc2V0K2EubGVuZ3RoKSk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpjYXNlInByb3BlcnR5IjpzLnB1c2gocihhLm9mZnNldCxhLm9mZnNldCthLmxlbmd0aCkpfWlmKCJwcm9wZXJ0eSI9PT1hLnR5cGV8fGEucGFyZW50JiYiYXJyYXkiPT09YS5wYXJlbnQudHlwZSl7dmFyIHU9byhhLm9mZnNldCthLmxlbmd0aCw1KTstMSE9PXUmJnMucHVzaChyKGEub2Zmc2V0LHUpKX1hPWEucGFyZW50fWZvcih2YXIgaD12b2lkIDAsZj1zLmxlbmd0aC0xO2Y+PTA7Zi0tKWg9cm8uY3JlYXRlKHNbZl0saCk7cmV0dXJuIGh8fChoPXJvLmNyZWF0ZShsci5jcmVhdGUodCx0KSkpLGh9KSl9ZnVuY3Rpb24gUGEoZSx0KXt2YXIgbj1bXTtyZXR1cm4gdC52aXNpdCgoZnVuY3Rpb24ocil7dmFyIGk7aWYoInByb3BlcnR5Ij09PXIudHlwZSYmIiRyZWYiPT09ci5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KGk9ci52YWx1ZU5vZGUpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnR5cGUpKXt2YXIgbz1yLnZhbHVlTm9kZS52YWx1ZSxhPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7aWYoIiMiPT09ZSlyZXR1cm5bXTtpZigiIyIhPT1lWzBdfHwiLyIhPT1lWzFdKXJldHVybiBudWxsO3JldHVybiBlLnN1YnN0cmluZygyKS5zcGxpdCgvXC8vKS5tYXAoRmEpfSh0KTtpZighbilyZXR1cm4gbnVsbDtyZXR1cm4gVmEobixlLnJvb3QpfSh0LG8pO2lmKGEpe3ZhciBzPWUucG9zaXRpb25BdChhLm9mZnNldCk7bi5wdXNoKHt0YXJnZXQ6IiIuY29uY2F0KGUudXJpLCIjIikuY29uY2F0KHMubGluZSsxLCIsIikuY29uY2F0KHMuY2hhcmFjdGVyKzEpLHJhbmdlOlJhKGUsci52YWx1ZU5vZGUpfSl9fXJldHVybiEwfSkpLFByb21pc2UucmVzb2x2ZShuKX1mdW5jdGlvbiBSYShlLHQpe3JldHVybiBsci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KzEpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aC0xKSl9ZnVuY3Rpb24gVmEoZSx0KXtpZighdClyZXR1cm4gbnVsbDtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49ZS5zaGlmdCgpO2lmKHQmJiJvYmplY3QiPT09dC50eXBlKXt2YXIgcj10LnByb3BlcnRpZXMuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5Tm9kZS52YWx1ZT09PW59KSk7cmV0dXJuIHI/VmEoZSxyLnZhbHVlTm9kZSk6bnVsbH1pZih0JiYiYXJyYXkiPT09dC50eXBlJiZuLm1hdGNoKC9eKDB8WzEtOV1bMC05XSopJC8pKXt2YXIgaT1OdW1iZXIucGFyc2VJbnQobiksbz10Lml0ZW1zW2ldO3JldHVybiBvP1ZhKGUsbyk6bnVsbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBGYShlKXtyZXR1cm4gZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpfWZ1bmN0aW9uIERhKGUpe3ZhciB0PWUucHJvbWlzZUNvbnN0cnVjdG9yfHxQcm9taXNlLG49bmV3IGthKGUuc2NoZW1hUmVxdWVzdFNlcnZpY2UsZS53b3Jrc3BhY2VDb250ZXh0LHQpO24uc2V0U2NoZW1hQ29udHJpYnV0aW9ucyhiYSk7dmFyIHI9bmV3IFpvKG4sZS5jb250cmlidXRpb25zLHQsZS5jbGllbnRDYXBhYmlsaXRpZXMpLGk9bmV3IFlvKG4sZS5jb250cmlidXRpb25zLHQpLG89bmV3IGNhKG4pLGE9bmV3IHRhKG4sdCk7cmV0dXJue2NvbmZpZ3VyZTpmdW5jdGlvbihlKXtuLmNsZWFyRXh0ZXJuYWxTY2hlbWFzKCksZS5zY2hlbWFzJiZlLnNjaGVtYXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bi5yZWdpc3RlckV4dGVybmFsU2NoZW1hKGUudXJpLGUuZmlsZU1hdGNoLGUuc2NoZW1hKX0pKSxhLmNvbmZpZ3VyZShlKX0scmVzZXRTY2hlbWE6ZnVuY3Rpb24oZSl7cmV0dXJuIG4ub25SZXNvdXJjZUNoYW5nZShlKX0sZG9WYWxpZGF0aW9uOmEuZG9WYWxpZGF0aW9uLmJpbmQoYSksZ2V0TGFuZ3VhZ2VTdGF0dXM6YS5nZXRMYW5ndWFnZVN0YXR1cy5iaW5kKGEpLHBhcnNlSlNPTkRvY3VtZW50OmZ1bmN0aW9uKGUpe3JldHVybiBHbyhlLHtjb2xsZWN0Q29tbWVudHM6ITB9KX0sbmV3SlNPTkRvY3VtZW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVtdKSxuZXcgSG8oZSx0LFtdKX0oZSx0KX0sZ2V0TWF0Y2hpbmdTY2hlbWFzOm4uZ2V0TWF0Y2hpbmdTY2hlbWFzLmJpbmQobiksZG9SZXNvbHZlOnIuZG9SZXNvbHZlLmJpbmQociksZG9Db21wbGV0ZTpyLmRvQ29tcGxldGUuYmluZChyKSxmaW5kRG9jdW1lbnRTeW1ib2xzOm8uZmluZERvY3VtZW50U3ltYm9scy5iaW5kKG8pLGZpbmREb2N1bWVudFN5bWJvbHMyOm8uZmluZERvY3VtZW50U3ltYm9sczIuYmluZChvKSxmaW5kRG9jdW1lbnRDb2xvcnM6by5maW5kRG9jdW1lbnRDb2xvcnMuYmluZChvKSxnZXRDb2xvclByZXNlbnRhdGlvbnM6by5nZXRDb2xvclByZXNlbnRhdGlvbnMuYmluZChvKSxkb0hvdmVyOmkuZG9Ib3Zlci5iaW5kKGkpLGdldEZvbGRpbmdSYW5nZXM6SWEsZ2V0U2VsZWN0aW9uUmFuZ2VzOk1hLGZpbmREZWZpbml0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSl9LGZpbmRMaW5rczpQYSxmb3JtYXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXZvaWQgMDtpZih0KXt2YXIgaT1lLm9mZnNldEF0KHQuc3RhcnQpO3I9e29mZnNldDppLGxlbmd0aDplLm9mZnNldEF0KHQuZW5kKS1pfX12YXIgbz17dGFiU2l6ZTpuP24udGFiU2l6ZTo0LGluc2VydFNwYWNlczohMD09PShudWxsPT1uP3ZvaWQgMDpuLmluc2VydFNwYWNlcyksaW5zZXJ0RmluYWxOZXdsaW5lOiEwPT09KG51bGw9PW4/dm9pZCAwOm4uaW5zZXJ0RmluYWxOZXdsaW5lKSxlb2w6IlxuIn07cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUW4oZSx0LG4pfShlLmdldFRleHQoKSxyLG8pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIFZyLnJlcGxhY2UobHIuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSksdC5jb250ZW50KX0pKX19fSJ1bmRlZmluZWQiIT10eXBlb2YgZmV0Y2gmJihfYT1mdW5jdGlvbihlKXtyZXR1cm4gZmV0Y2goZSkudGhlbigoZT0+ZS50ZXh0KCkpKX0pO3ZhciBLYT0iLyIuY2hhckNvZGVBdCgwKSxqYT0iLiIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBVYShlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpMD09PW4ubGVuZ3RofHwxPT09bi5sZW5ndGgmJm4uY2hhckNvZGVBdCgwKT09PWphfHwoMj09PW4ubGVuZ3RoJiZuLmNoYXJDb2RlQXQoMCk9PT1qYSYmbi5jaGFyQ29kZUF0KDEpPT09amE/dC5wb3AoKTp0LnB1c2gobikpO2UubGVuZ3RoPjEmJjA9PT1lW2UubGVuZ3RoLTFdLmxlbmd0aCYmdC5wdXNoKCIiKTtsZXQgbj10LmpvaW4oIi8iKTtyZXR1cm4gMD09PWVbMF0ubGVuZ3RoJiYobj0iLyIrbiksbn1zZWxmLm9ubWVzc2FnZT0oKT0+e0duKCgoZSx0KT0+bmV3IGNsYXNze19jdHg7X2xhbmd1YWdlU2VydmljZTtfbGFuZ3VhZ2VTZXR0aW5ncztfbGFuZ3VhZ2VJZDtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2N0eD1lLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3M9dC5sYW5ndWFnZVNldHRpbmdzLHRoaXMuX2xhbmd1YWdlSWQ9dC5sYW5ndWFnZUlkLHRoaXMuX2xhbmd1YWdlU2VydmljZT1EYSh7d29ya3NwYWNlQ29udGV4dDp7cmVzb2x2ZVJlbGF0aXZlUGF0aDooZSx0KT0+ZnVuY3Rpb24oZSx0KXtpZihmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQ29kZUF0KDApPT09S2F9KHQpKXtjb25zdCBuPXlhLnBhcnNlKGUpLHI9dC5zcGxpdCgiLyIpO3JldHVybiBuLndpdGgoe3BhdGg6VWEocil9KS50b1N0cmluZygpfXJldHVybiBmdW5jdGlvbihlLC4uLnQpe2NvbnN0IG49eWEucGFyc2UoZSkscj1uLnBhdGguc3BsaXQoIi8iKTtmb3IobGV0IGUgb2YgdClyLnB1c2goLi4uZS5zcGxpdCgiLyIpKTtyZXR1cm4gbi53aXRoKHtwYXRoOlVhKHIpfSkudG9TdHJpbmcoKX0oZSx0KX0odC5zdWJzdHIoMCx0Lmxhc3RJbmRleE9mKCIvIikrMSksZSl9LHNjaGVtYVJlcXVlc3RTZXJ2aWNlOnQuZW5hYmxlU2NoZW1hUmVxdWVzdD9fYTp2b2lkIDB9KSx0aGlzLl9sYW5ndWFnZVNlcnZpY2UuY29uZmlndXJlKHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfWFzeW5jIGRvVmFsaWRhdGlvbihlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYodCl7bGV0IGU9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9WYWxpZGF0aW9uKHQsZSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX1hc3luYyBkb0NvbXBsZXRlKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvQ29tcGxldGUobix0LHIpfWFzeW5jIGRvUmVzb2x2ZShlKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvUmVzb2x2ZShlKX1hc3luYyBkb0hvdmVyKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvSG92ZXIobix0LHIpfWFzeW5jIGZvcm1hdChlLHQsbil7bGV0IHI9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5mb3JtYXQocix0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgcmVzZXRTY2hlbWEoZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9sYW5ndWFnZVNlcnZpY2UucmVzZXRTY2hlbWEoZSkpfWFzeW5jIGZpbmREb2N1bWVudFN5bWJvbHMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRTeW1ib2xzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBmaW5kRG9jdW1lbnRDb2xvcnMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRDb2xvcnModCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGdldENvbG9yUHJlc2VudGF0aW9ucyhlLHQsbil7bGV0IHI9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChyKSxvPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRDb2xvclByZXNlbnRhdGlvbnMocixpLHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShvKX1hc3luYyBnZXRGb2xkaW5nUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRGb2xkaW5nUmFuZ2VzKG4sdCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBnZXRTZWxlY3Rpb25SYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pLGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldFNlbGVjdGlvblJhbmdlcyhuLHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1fZ2V0VGV4dERvY3VtZW50KGUpe2xldCB0PXRoaXMuX2N0eC5nZXRNaXJyb3JNb2RlbHMoKTtmb3IobGV0IG4gb2YgdClpZihuLnVyaS50b1N0cmluZygpPT09ZSlyZXR1cm4gZm8uY3JlYXRlKGUsdGhpcy5fbGFuZ3VhZ2VJZCxuLnZlcnNpb24sbi5nZXRWYWx1ZSgpKTtyZXR1cm4gbnVsbH19KGUsdCkpKX19KCk7Cgo=', null, false);
4
4
  /* eslint-enable */
5
5
 
6
6
  export { WorkerFactory as default };