@tricoteuses/assemblee 0.28.0 → 0.28.3

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 (135) hide show
  1. package/lib/api.js +1 -1
  2. package/lib/api.mjs +1 -1
  3. package/lib/bugs/acteur-00010/plugin.test.js +45 -5
  4. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  5. package/lib/bugs/acteur-00010.js +29 -9
  6. package/lib/bugs/acteur-00010.mjs +1 -1
  7. package/lib/bugs/agenda-00002/plugin.test.js +46 -6
  8. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
  9. package/lib/bugs/agenda-00002.js +29 -13
  10. package/lib/bugs/agenda-00002.mjs +1 -1
  11. package/lib/bugs/agenda-00008/plugin.test.js +44 -4
  12. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  13. package/lib/bugs/agenda-00008.js +29 -9
  14. package/lib/bugs/agenda-00008.mjs +1 -1
  15. package/lib/bugs/agenda-00011/plugin.test.js +50 -12
  16. package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
  17. package/lib/bugs/agenda-00011.js +39 -19
  18. package/lib/bugs/agenda-00011.mjs +1 -1
  19. package/lib/bugs.js +51 -31
  20. package/lib/bugs.mjs +1 -1
  21. package/lib/cleaners/actes_legislatifs.js +1 -1
  22. package/lib/cleaners/actes_legislatifs.mjs +1 -1
  23. package/lib/cleaners/acteurs.js +1 -1
  24. package/lib/cleaners/acteurs.mjs +1 -1
  25. package/lib/cleaners/amendements.js +1 -1
  26. package/lib/cleaners/amendements.mjs +1 -1
  27. package/lib/cleaners/documents.js +13 -1
  28. package/lib/cleaners/documents.mjs +13 -1
  29. package/lib/cleaners/dossiers_legislatifs.js +1 -1
  30. package/lib/cleaners/dossiers_legislatifs.mjs +1 -1
  31. package/lib/cleaners/index.js +1 -1
  32. package/lib/cleaners/index.mjs +1 -1
  33. package/lib/cleaners/organes.js +1 -1
  34. package/lib/cleaners/organes.mjs +1 -1
  35. package/lib/cleaners/reunions.js +1 -1
  36. package/lib/cleaners/reunions.mjs +1 -1
  37. package/lib/cleaners/scrutins.js +1 -1
  38. package/lib/cleaners/scrutins.mjs +1 -1
  39. package/lib/cleaners/xml.js +1 -1
  40. package/lib/cleaners/xml.mjs +1 -1
  41. package/lib/datasets.js +1 -1
  42. package/lib/datasets.mjs +1 -1
  43. package/lib/dates.js +1 -1
  44. package/lib/dates.mjs +1 -1
  45. package/lib/dossiers_legislatifs.js +1 -1
  46. package/lib/dossiers_legislatifs.mjs +1 -1
  47. package/lib/file_systems.js +25 -5
  48. package/lib/file_systems.mjs +1 -1
  49. package/lib/git.js +1 -1
  50. package/lib/git.mjs +1 -1
  51. package/lib/index.d.ts +1 -1
  52. package/lib/index.js +1 -1
  53. package/lib/index.mjs +1 -1
  54. package/lib/inserters.js +1 -1
  55. package/lib/inserters.mjs +1 -1
  56. package/lib/loaders.js +1 -1
  57. package/lib/loaders.mjs +1 -1
  58. package/lib/organes.js +1 -1
  59. package/lib/organes.mjs +1 -1
  60. package/lib/parsers/documents.js +27 -5
  61. package/lib/parsers/documents.mjs +1 -1
  62. package/lib/parsers/index.js +1 -1
  63. package/lib/parsers/index.mjs +1 -1
  64. package/lib/parsers/recherche_amendements.js +27 -7
  65. package/lib/parsers/recherche_amendements.mjs +1 -1
  66. package/lib/raw_types/acteurs_et_organes.d.ts +2 -1
  67. package/lib/raw_types/acteurs_et_organes.js +3 -2
  68. package/lib/raw_types/acteurs_et_organes.mjs +3 -2
  69. package/lib/raw_types/agendas.js +1 -1
  70. package/lib/raw_types/agendas.mjs +1 -1
  71. package/lib/raw_types/amendements.js +1 -1
  72. package/lib/raw_types/amendements.mjs +1 -1
  73. package/lib/raw_types/dossiers_legislatifs.d.ts +4 -0
  74. package/lib/raw_types/dossiers_legislatifs.js +10 -1
  75. package/lib/raw_types/dossiers_legislatifs.mjs +10 -1
  76. package/lib/raw_types/scrutins.js +1 -1
  77. package/lib/raw_types/scrutins.mjs +1 -1
  78. package/lib/scripts/bugs_helper.js +39 -19
  79. package/lib/scripts/bugs_helper.mjs +1 -1
  80. package/lib/scripts/clean_data.js +1 -1
  81. package/lib/scripts/clean_data.mjs +1 -1
  82. package/lib/scripts/clean_reorganized_data.js +1 -1
  83. package/lib/scripts/clean_reorganized_data.mjs +1 -1
  84. package/lib/scripts/diff_amendements.js +1 -1
  85. package/lib/scripts/diff_amendements.mjs +1 -1
  86. package/lib/scripts/document_dossiers_legislatifs.js +5 -3
  87. package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
  88. package/lib/scripts/get_today_reunions.js +1 -1
  89. package/lib/scripts/get_today_reunions.mjs +1 -1
  90. package/lib/scripts/merge_scrutins.js +1 -1
  91. package/lib/scripts/merge_scrutins.mjs +1 -1
  92. package/lib/scripts/parse_textes_lois.js +1 -1
  93. package/lib/scripts/parse_textes_lois.mjs +1 -1
  94. package/lib/scripts/raw_types_from_amendements.js +28 -4
  95. package/lib/scripts/raw_types_from_amendements.mjs +1 -1
  96. package/lib/scripts/reorganize_data.js +1 -1
  97. package/lib/scripts/reorganize_data.mjs +1 -1
  98. package/lib/scripts/retrieve_deputes_photos.js +28 -4
  99. package/lib/scripts/retrieve_deputes_photos.mjs +1 -1
  100. package/lib/scripts/retrieve_documents.js +35 -15
  101. package/lib/scripts/retrieve_documents.mjs +1 -1
  102. package/lib/scripts/retrieve_open_data.js +30 -6
  103. package/lib/scripts/retrieve_open_data.mjs +1 -1
  104. package/lib/scripts/retrieve_pending_amendments.js +26 -4
  105. package/lib/scripts/retrieve_pending_amendments.mjs +1 -1
  106. package/lib/scripts/retrieve_senateurs_photos.js +28 -4
  107. package/lib/scripts/retrieve_senateurs_photos.mjs +1 -1
  108. package/lib/scripts/retrieve_textes_lois.js +22 -4
  109. package/lib/scripts/retrieve_textes_lois.mjs +1 -1
  110. package/lib/scripts/test_load.js +1 -1
  111. package/lib/scripts/test_load.mjs +1 -1
  112. package/lib/scripts/test_load_big_files.js +1 -1
  113. package/lib/scripts/test_load_big_files.mjs +1 -1
  114. package/lib/scripts/validate_json.js +27 -7
  115. package/lib/scripts/validate_json.mjs +1 -1
  116. package/lib/shared_types/codes_actes.js +1 -1
  117. package/lib/shared_types/codes_actes.mjs +1 -1
  118. package/lib/strings.js +1 -1
  119. package/lib/strings.mjs +1 -1
  120. package/lib/types/acteurs_et_organes.js +1 -1
  121. package/lib/types/acteurs_et_organes.mjs +1 -1
  122. package/lib/types/agendas.js +1 -1
  123. package/lib/types/agendas.mjs +1 -1
  124. package/lib/types/amendements.js +1 -1
  125. package/lib/types/amendements.mjs +1 -1
  126. package/lib/types/dossiers_legislatifs.d.ts +1 -0
  127. package/lib/types/dossiers_legislatifs.js +5 -1
  128. package/lib/types/dossiers_legislatifs.mjs +5 -1
  129. package/lib/types/legislatures.js +1 -1
  130. package/lib/types/legislatures.mjs +1 -1
  131. package/lib/types/scrutins.js +1 -1
  132. package/lib/types/scrutins.mjs +1 -1
  133. package/lib/urls.js +1 -1
  134. package/lib/urls.mjs +1 -1
  135. package/package.json +6 -6
@@ -1130,4 +1130,4 @@ if (process.argv[1].endsWith("reorganize_data.ts")) {
1130
1130
  process.exit(0);
1131
1131
  }
1132
1132
  }
1133
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3Jlb3JnYW5pemVfZGF0YS50cyJdLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsImNvbW1pdCIsInJlbW90ZXMiLCJlcnJvciIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwic3RkZXJyIiwidGVzdCIsInN0ZG91dCIsImNvbnNvbGUiLCJvdXRwdXQiLCJyZW1vdGUiLCJyZW9yZ2FuaXplRGF0YSIsIm9wdGlvbnMiLCJkYXRhRGlyIiwiRGF0ZSIsInByb3RvdHlwZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwidmFsaWRhdGVSYXdEYXRhIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoIiwicGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImxvZyIsImJhc2VuYW1lIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwiZnMiLCJlbnN1cmVEaXJTeW5jIiwicmVhZGRpclN5bmMiLCJyZW1vdmVTeW5jIiwiYWN0ZXVyc1Jlb3JnYW5pemVkRGlyIiwibWtkaXJTeW5jIiwib3JnYW5lc1Jlb3JnYW5pemVkRGlyIiwic3RydWN0dXJlIiwiRGF0YXNldFN0cnVjdHVyZSIsIlNpbmdsZUZpbGUiLCJvcmlnaW5hbEpzb24iLCJyZWFkRmlsZVN5bmMiLCJvcmlnaW5hbERhdGEiLCJBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsIkpTT04iLCJwYXJzZSIsImFjdGV1cnMiLCJhY3RldXIiLCJyZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsInVpZCIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJvcmdhbmVzIiwib3JnYW5lIiwiU2VnbWVudGVkRmlsZXMiLCJkZXBvcnRzQnlBY3RldXJVaWQiLCJleGlzdHNTeW5jIiwiZGVwb3J0U3BsaXRQYXRoIiwiZGVwb3J0RmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImRlcG9ydE9yaWdpbmFsRmlsZVBhdGgiLCJ2ZXJib3NlIiwiZGVwb3J0T3JpZ2luYWxKc29uIiwiZGVwb3J0T3JpZ2luYWwiLCJ0b0RlcG9ydCIsImRlcG9ydCIsImRlcG9ydHMiLCJhY3RldXJSZWYiLCJwdXNoIiwiT2JqZWN0IiwidmFsdWVzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hbmRhdHNCeUFjdGV1clVpZCIsIm1hbmRhdFNwbGl0UGF0aCIsIm1hbmRhdEZpbGVuYW1lIiwibWFuZGF0T3JpZ2luYWxGaWxlUGF0aCIsIm1hbmRhdE9yaWdpbmFsSnNvbiIsIm1hbmRhdE9yaWdpbmFsIiwidG9NYW5kYXQiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwid3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25PcmlnaW5hbEZpbGVQYXRoIiwicmV1bmlvbk9yaWdpbmFsSnNvbiIsInJldW5pb25PcmlnaW5hbCIsInRvUmV1bmlvbiIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVzRXRBbWVuZGVtZW50cyIsInRleHRlbGVnIiwidGV4dGVMZWdpc2xhdGlmIiwiYW1lbmRlbWVudCIsIndyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbiIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCIsImFtZW5kZW1lbnRPcmlnaW5hbEpzb24iLCJhbWVuZGVtZW50T3JpZ2luYWwiLCJ0b0FtZW5kZW1lbnRXcmFwcGVyIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudHNEaXIiLCJkb3NzaWVyc0RpciIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJkb2N1bWVudCIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJkb3NzaWVyIiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwiU2NydXRpbnNSYXdDb252ZXJ0IiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInJldW5pb25zRGlyIiwic2NydXRpbnNEaXIiLCJhcmd2IiwiZXhpdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLGtCQUFrQixHQUFHLENBQ3pCO0FBQ0VDLEVBQUFBLEtBQUssRUFBRSxHQURUO0FBRUVDLEVBQUFBLElBQUksRUFBRSwrREFGUjtBQUdFQyxFQUFBQSxJQUFJLEVBQUUsT0FIUjtB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b0J2QixRQUFwQixZQUFxQ2lCLElBQUksQ0FBQ08sU0FBTCxDQUFlMEcsT0FBZixFQUF3QixJQUF4QixFQUE4QixDQUE5QixDQUFyQyxFQUF1RTtBQUNyRTNLLElBQUFBLFFBQVEsRUFBRTtBQUQyRCxHQUF2RTtBQUdEO0FBRUQ7OztBQUNBLElBQUlELE9BQU8sQ0FBQzBMLElBQVIsQ0FBYSxDQUFiLEVBQWdCL0csUUFBaEIsQ0FBeUIsb0JBQXpCLENBQUosRUFBb0Q7QUFDbEQsTUFBTWhFLE9BQU8sR0FBRyxpQ0FBZ0I1QixrQkFBaEIsQ0FBaEI7O0FBRUEsTUFBSTJCLGNBQWMsQ0FBQ0MsT0FBRCxDQUFsQixFQUE2QjtBQUMzQlgsSUFBQUEsT0FBTyxDQUFDMkwsSUFBUixDQUFhLENBQWI7QUFDRCxHQUZELE1BRU87QUFDTDNMLElBQUFBLE9BQU8sQ0FBQzJMLElBQVIsQ0FBYSxDQUFiO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiclwiLFxuICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJzXCIsXG4gICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJWXCIsXG4gICAgaGVscDogXCJkb24ndCB2YWxpZGF0ZSByYXcgZGF0YVwiLFxuICAgIG5hbWU6IFwibm8tdmFsaWRhdGUtcmF3XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgY29tbWl0OiBib29sZWFuLFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKGNvbW1pdCkge1xuICAgIGV4ZWNTeW5jKGBnaXQgYWRkIC5gLCB7XG4gICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKCdnaXQgY29tbWl0IC1tIFwiTm91dmVsbGUgbW9pc3NvblwiJywge1xuICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgaWYgKFxuICAgICAgICAoY2hpbGRQcm9jZXNzIGFzIENoaWxkUHJvY2Vzcykuc3RkZXJyID09PSBudWxsIHx8XG4gICAgICAgICEvbm90aGluZyB0byBjb21taXQvLnRlc3QoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLnN0ZG91dClcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIHRocm93IGNoaWxkUHJvY2Vzc1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB2YWxpZGF0ZVJhd0RhdGEgPSAhb3B0aW9uc1tcIm5vLXZhbGlkYXRlLXJhd1wiXVxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXQobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInNjcnV0aW5cIiBmaWxlOiAke3NjcnV0aW5PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbldyYXBwZXIoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbiA9IHNjcnV0aW5PcmlnaW5hbC5zY3J1dGluXG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsXG4gIGFtZW5kZW1lbnQ6IHtcbiAgICB1aWQ6IHN0cmluZ1xuICAgIHRleHRlTGVnaXNsYXRpZlJlZjogc3RyaW5nXG4gIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgdWlkVGV4dGVMZWdpc2xhdGlmID0gYW1lbmRlbWVudC50ZXh0ZUxlZ2lzbGF0aWZSZWZcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHVpZFRleHRlTGVnaXNsYXRpZiwgdW5kZWZpbmVkKVxuICBjb25zdCB0ZXh0ZUxlZ2lzbGF0aWZEaXIgPSBwYXRoLmpvaW4oXG4gICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgIHVpZFRleHRlTGVnaXNsYXRpZixcbiAgKVxuICBmcy5lbnN1cmVEaXJTeW5jKHRleHRlTGVnaXNsYXRpZkRpcilcbiAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgdGV4dGVMZWdpc2xhdGlmRGlyLFxuICAgIGFtZW5kZW1lbnQudWlkICsgXCIuanNvblwiLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihcbiAgZG9jdW1lbnRzRGlyOiBzdHJpbmcsXG4gIGRvY3VtZW50OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgZG9jdW1lbnQudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICBkb3NzaWVyUGFybGVtZW50YWlyZTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgICBkb3NzaWVyc0RpcixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZS51aWQsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBgJHtiYXNlbmFtZX0uanNvbmAsXG4gICAgSlNPTi5zdHJpbmdpZnkoZG9zc2llclBhcmxlbWVudGFpcmUsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihcbiAgcmV1bmlvbnNEaXI6IHN0cmluZyxcbiAgcmV1bmlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyLCByZXVuaW9uLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oXG4gIHNjcnV0aW5zRGlyOiBzdHJpbmcsXG4gIHNjcnV0aW46IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpciwgc2NydXRpbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG4gIGlmIChyZW9yZ2FuaXplRGF0YShvcHRpb25zKSkge1xuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG59XG4iXX0=
1133
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsImNvbW1pdCIsInJlbW90ZXMiLCJlcnJvciIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJjaGlsZFByb2Nlc3MiLCJzdGRlcnIiLCJ0ZXN0Iiwic3Rkb3V0IiwiY29uc29sZSIsIm91dHB1dCIsInJlbW90ZSIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwicGF0Y2hlZERhdGVUb0pzb24iLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsIkVuYWJsZWREYXRhc2V0cyIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldHMiLCJhY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsIm9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwic2lsZW50IiwibG9nIiwiYmFzZW5hbWUiLCJkYXRhc2V0UmVvcmdhbml6ZWREaXIiLCJmcyIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJEYXRhc2V0U3RydWN0dXJlIiwiU2luZ2xlRmlsZSIsIm9yaWdpbmFsSnNvbiIsInJlYWRGaWxlU3luYyIsIm9yaWdpbmFsRGF0YSIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVycyIsImFjdGV1ciIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZXMiLCJvcmdhbmUiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJ3YWxrRGlyIiwiZGVwb3J0U3BsaXRQYXRoIiwiZGVwb3J0RmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImRlcG9ydE9yaWdpbmFsRmlsZVBhdGgiLCJ2ZXJib3NlIiwiZGVwb3J0T3JpZ2luYWxKc29uIiwiZGVwb3J0T3JpZ2luYWwiLCJ0b0RlcG9ydCIsImRlcG9ydCIsImRlcG9ydHMiLCJhY3RldXJSZWYiLCJwdXNoIiwiT2JqZWN0IiwidmFsdWVzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hbmRhdHNCeUFjdGV1clVpZCIsIm1hbmRhdFNwbGl0UGF0aCIsIm1hbmRhdEZpbGVuYW1lIiwibWFuZGF0T3JpZ2luYWxGaWxlUGF0aCIsIm1hbmRhdE9yaWdpbmFsSnNvbiIsIm1hbmRhdE9yaWdpbmFsIiwidG9NYW5kYXQiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwid3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25PcmlnaW5hbEZpbGVQYXRoIiwicmV1bmlvbk9yaWdpbmFsSnNvbiIsInJldW5pb25PcmlnaW5hbCIsInRvUmV1bmlvbiIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVzRXRBbWVuZGVtZW50cyIsInRleHRlbGVnIiwidGV4dGVMZWdpc2xhdGlmIiwiYW1lbmRlbWVudCIsIndyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbiIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCIsImFtZW5kZW1lbnRPcmlnaW5hbEpzb24iLCJhbWVuZGVtZW50T3JpZ2luYWwiLCJ0b0FtZW5kZW1lbnRXcmFwcGVyIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudHNEaXIiLCJkb3NzaWVyc0RpciIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJkb2N1bWVudCIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJkb3NzaWVyIiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwiU2NydXRpbnNSYXdDb252ZXJ0IiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicmV1bmlvbnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tU2NydXRpblVpZCIsImFyZ3YiLCJjb21tYW5kTGluZUFyZ3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmVvcmdhbml6ZV9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiclwiLFxuICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJzXCIsXG4gICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJWXCIsXG4gICAgaGVscDogXCJkb24ndCB2YWxpZGF0ZSByYXcgZGF0YVwiLFxuICAgIG5hbWU6IFwibm8tdmFsaWRhdGUtcmF3XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgY29tbWl0OiBib29sZWFuLFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKGNvbW1pdCkge1xuICAgIGV4ZWNTeW5jKGBnaXQgYWRkIC5gLCB7XG4gICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKCdnaXQgY29tbWl0IC1tIFwiTm91dmVsbGUgbW9pc3NvblwiJywge1xuICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgaWYgKFxuICAgICAgICAoY2hpbGRQcm9jZXNzIGFzIENoaWxkUHJvY2Vzcykuc3RkZXJyID09PSBudWxsIHx8XG4gICAgICAgICEvbm90aGluZyB0byBjb21taXQvLnRlc3QoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLnN0ZG91dClcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIHRocm93IGNoaWxkUHJvY2Vzc1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB2YWxpZGF0ZVJhd0RhdGEgPSAhb3B0aW9uc1tcIm5vLXZhbGlkYXRlLXJhd1wiXVxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXQobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInNjcnV0aW5cIiBmaWxlOiAke3NjcnV0aW5PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbldyYXBwZXIoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbiA9IHNjcnV0aW5PcmlnaW5hbC5zY3J1dGluXG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsXG4gIGFtZW5kZW1lbnQ6IHtcbiAgICB1aWQ6IHN0cmluZ1xuICAgIHRleHRlTGVnaXNsYXRpZlJlZjogc3RyaW5nXG4gIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgdWlkVGV4dGVMZWdpc2xhdGlmID0gYW1lbmRlbWVudC50ZXh0ZUxlZ2lzbGF0aWZSZWZcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHVpZFRleHRlTGVnaXNsYXRpZiwgdW5kZWZpbmVkKVxuICBjb25zdCB0ZXh0ZUxlZ2lzbGF0aWZEaXIgPSBwYXRoLmpvaW4oXG4gICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgIHVpZFRleHRlTGVnaXNsYXRpZixcbiAgKVxuICBmcy5lbnN1cmVEaXJTeW5jKHRleHRlTGVnaXNsYXRpZkRpcilcbiAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgdGV4dGVMZWdpc2xhdGlmRGlyLFxuICAgIGFtZW5kZW1lbnQudWlkICsgXCIuanNvblwiLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihcbiAgZG9jdW1lbnRzRGlyOiBzdHJpbmcsXG4gIGRvY3VtZW50OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgZG9jdW1lbnQudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICBkb3NzaWVyUGFybGVtZW50YWlyZTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgICBkb3NzaWVyc0RpcixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZS51aWQsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBgJHtiYXNlbmFtZX0uanNvbmAsXG4gICAgSlNPTi5zdHJpbmdpZnkoZG9zc2llclBhcmxlbWVudGFpcmUsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihcbiAgcmV1bmlvbnNEaXI6IHN0cmluZyxcbiAgcmV1bmlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyLCByZXVuaW9uLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oXG4gIHNjcnV0aW5zRGlyOiBzdHJpbmcsXG4gIHNjcnV0aW46IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpciwgc2NydXRpbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG4gIGlmIChyZW9yZ2FuaXplRGF0YShvcHRpb25zKSkge1xuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsK0RBRlI7RUFHRUMsSUFBSSxFQUFFLE9BSFI7RUFJRUMsSUFBSSxF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