@cdktn/provider-project 0.7.24

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 (330) hide show
  1. package/.jsii +419 -0
  2. package/API.md +4154 -0
  3. package/CLAUDE.md +172 -0
  4. package/LICENSE +355 -0
  5. package/README.md +82 -0
  6. package/lib/alert-open-prs.d.ts +14 -0
  7. package/lib/alert-open-prs.js +67 -0
  8. package/lib/auto-approve.d.ts +11 -0
  9. package/lib/auto-approve.js +70 -0
  10. package/lib/auto-close-community-issues.d.ts +15 -0
  11. package/lib/auto-close-community-issues.js +104 -0
  12. package/lib/automerge.d.ts +11 -0
  13. package/lib/automerge.js +67 -0
  14. package/lib/cdktf-config.d.ts +33 -0
  15. package/lib/cdktf-config.js +134 -0
  16. package/lib/copyright-headers.d.ts +4 -0
  17. package/lib/copyright-headers.js +44 -0
  18. package/lib/customized-license.d.ts +8 -0
  19. package/lib/customized-license.js +19 -0
  20. package/lib/dependabot.d.ts +8 -0
  21. package/lib/dependabot.js +40 -0
  22. package/lib/deprecate-packages.d.ts +14 -0
  23. package/lib/deprecate-packages.js +91 -0
  24. package/lib/force-release.d.ts +12 -0
  25. package/lib/force-release.js +112 -0
  26. package/lib/github-issues.d.ts +15 -0
  27. package/lib/github-issues.js +33 -0
  28. package/lib/index.d.ts +53 -0
  29. package/lib/index.js +447 -0
  30. package/lib/lock-issues.d.ts +13 -0
  31. package/lib/lock-issues.js +54 -0
  32. package/lib/package-info.d.ts +14 -0
  33. package/lib/package-info.js +7 -0
  34. package/lib/provider-upgrade.d.ts +17 -0
  35. package/lib/provider-upgrade.js +145 -0
  36. package/lib/readme.d.ts +21 -0
  37. package/lib/readme.js +147 -0
  38. package/lib/scripts/check-for-upgrades.d.ts +15 -0
  39. package/lib/scripts/check-for-upgrades.js +186 -0
  40. package/lib/scripts/should-release.d.ts +13 -0
  41. package/lib/scripts/should-release.js +96 -0
  42. package/lib/util/random-cron.d.ts +18 -0
  43. package/lib/util/random-cron.js +33 -0
  44. package/mise.toml +2 -0
  45. package/node_modules/camel-case/LICENSE +21 -0
  46. package/node_modules/camel-case/README.md +47 -0
  47. package/node_modules/camel-case/dist/index.d.ts +5 -0
  48. package/node_modules/camel-case/dist/index.js +23 -0
  49. package/node_modules/camel-case/dist/index.js.map +1 -0
  50. package/node_modules/camel-case/dist/index.spec.d.ts +1 -0
  51. package/node_modules/camel-case/dist/index.spec.js +26 -0
  52. package/node_modules/camel-case/dist/index.spec.js.map +1 -0
  53. package/node_modules/camel-case/dist.es2015/index.d.ts +5 -0
  54. package/node_modules/camel-case/dist.es2015/index.js +17 -0
  55. package/node_modules/camel-case/dist.es2015/index.js.map +1 -0
  56. package/node_modules/camel-case/dist.es2015/index.spec.d.ts +1 -0
  57. package/node_modules/camel-case/dist.es2015/index.spec.js +24 -0
  58. package/node_modules/camel-case/dist.es2015/index.spec.js.map +1 -0
  59. package/node_modules/camel-case/package.json +89 -0
  60. package/node_modules/capital-case/LICENSE +21 -0
  61. package/node_modules/capital-case/README.md +37 -0
  62. package/node_modules/capital-case/dist/index.d.ts +4 -0
  63. package/node_modules/capital-case/dist/index.js +16 -0
  64. package/node_modules/capital-case/dist/index.js.map +1 -0
  65. package/node_modules/capital-case/dist/index.spec.d.ts +1 -0
  66. package/node_modules/capital-case/dist/index.spec.js +24 -0
  67. package/node_modules/capital-case/dist/index.spec.js.map +1 -0
  68. package/node_modules/capital-case/dist.es2015/index.d.ts +4 -0
  69. package/node_modules/capital-case/dist.es2015/index.js +11 -0
  70. package/node_modules/capital-case/dist.es2015/index.js.map +1 -0
  71. package/node_modules/capital-case/dist.es2015/index.spec.d.ts +1 -0
  72. package/node_modules/capital-case/dist.es2015/index.spec.js +22 -0
  73. package/node_modules/capital-case/dist.es2015/index.spec.js.map +1 -0
  74. package/node_modules/capital-case/package.json +90 -0
  75. package/node_modules/change-case/LICENSE +21 -0
  76. package/node_modules/change-case/README.md +44 -0
  77. package/node_modules/change-case/dist/index.d.ts +11 -0
  78. package/node_modules/change-case/dist/index.js +15 -0
  79. package/node_modules/change-case/dist/index.js.map +1 -0
  80. package/node_modules/change-case/dist/index.spec.d.ts +1 -0
  81. package/node_modules/change-case/dist/index.spec.js +9 -0
  82. package/node_modules/change-case/dist/index.spec.js.map +1 -0
  83. package/node_modules/change-case/dist.es2015/index.d.ts +11 -0
  84. package/node_modules/change-case/dist.es2015/index.js +12 -0
  85. package/node_modules/change-case/dist.es2015/index.js.map +1 -0
  86. package/node_modules/change-case/dist.es2015/index.spec.d.ts +1 -0
  87. package/node_modules/change-case/dist.es2015/index.spec.js +7 -0
  88. package/node_modules/change-case/dist.es2015/index.spec.js.map +1 -0
  89. package/node_modules/change-case/package.json +101 -0
  90. package/node_modules/constant-case/LICENSE +21 -0
  91. package/node_modules/constant-case/README.md +37 -0
  92. package/node_modules/constant-case/dist/index.d.ts +3 -0
  93. package/node_modules/constant-case/dist/index.js +12 -0
  94. package/node_modules/constant-case/dist/index.js.map +1 -0
  95. package/node_modules/constant-case/dist/index.spec.d.ts +1 -0
  96. package/node_modules/constant-case/dist/index.spec.js +26 -0
  97. package/node_modules/constant-case/dist/index.spec.js.map +1 -0
  98. package/node_modules/constant-case/dist.es2015/index.d.ts +3 -0
  99. package/node_modules/constant-case/dist.es2015/index.js +8 -0
  100. package/node_modules/constant-case/dist.es2015/index.js.map +1 -0
  101. package/node_modules/constant-case/dist.es2015/index.spec.d.ts +1 -0
  102. package/node_modules/constant-case/dist.es2015/index.spec.js +24 -0
  103. package/node_modules/constant-case/dist.es2015/index.spec.js.map +1 -0
  104. package/node_modules/constant-case/package.json +90 -0
  105. package/node_modules/dot-case/LICENSE +21 -0
  106. package/node_modules/dot-case/README.md +37 -0
  107. package/node_modules/dot-case/dist/index.d.ts +3 -0
  108. package/node_modules/dot-case/dist/index.js +11 -0
  109. package/node_modules/dot-case/dist/index.js.map +1 -0
  110. package/node_modules/dot-case/dist/index.spec.d.ts +1 -0
  111. package/node_modules/dot-case/dist/index.spec.js +26 -0
  112. package/node_modules/dot-case/dist/index.spec.js.map +1 -0
  113. package/node_modules/dot-case/dist.es2015/index.d.ts +3 -0
  114. package/node_modules/dot-case/dist.es2015/index.js +7 -0
  115. package/node_modules/dot-case/dist.es2015/index.js.map +1 -0
  116. package/node_modules/dot-case/dist.es2015/index.spec.d.ts +1 -0
  117. package/node_modules/dot-case/dist.es2015/index.spec.js +24 -0
  118. package/node_modules/dot-case/dist.es2015/index.spec.js.map +1 -0
  119. package/node_modules/dot-case/package.json +89 -0
  120. package/node_modules/fs-extra/LICENSE +15 -0
  121. package/node_modules/fs-extra/README.md +262 -0
  122. package/node_modules/fs-extra/lib/copy/copy-sync.js +169 -0
  123. package/node_modules/fs-extra/lib/copy/copy.js +235 -0
  124. package/node_modules/fs-extra/lib/copy/index.js +7 -0
  125. package/node_modules/fs-extra/lib/empty/index.js +39 -0
  126. package/node_modules/fs-extra/lib/ensure/file.js +69 -0
  127. package/node_modules/fs-extra/lib/ensure/index.js +23 -0
  128. package/node_modules/fs-extra/lib/ensure/link.js +64 -0
  129. package/node_modules/fs-extra/lib/ensure/symlink-paths.js +99 -0
  130. package/node_modules/fs-extra/lib/ensure/symlink-type.js +31 -0
  131. package/node_modules/fs-extra/lib/ensure/symlink.js +82 -0
  132. package/node_modules/fs-extra/lib/fs/index.js +128 -0
  133. package/node_modules/fs-extra/lib/index.js +16 -0
  134. package/node_modules/fs-extra/lib/json/index.js +16 -0
  135. package/node_modules/fs-extra/lib/json/jsonfile.js +11 -0
  136. package/node_modules/fs-extra/lib/json/output-json-sync.js +12 -0
  137. package/node_modules/fs-extra/lib/json/output-json.js +12 -0
  138. package/node_modules/fs-extra/lib/mkdirs/index.js +14 -0
  139. package/node_modules/fs-extra/lib/mkdirs/make-dir.js +27 -0
  140. package/node_modules/fs-extra/lib/mkdirs/utils.js +21 -0
  141. package/node_modules/fs-extra/lib/move/index.js +7 -0
  142. package/node_modules/fs-extra/lib/move/move-sync.js +54 -0
  143. package/node_modules/fs-extra/lib/move/move.js +75 -0
  144. package/node_modules/fs-extra/lib/output-file/index.js +40 -0
  145. package/node_modules/fs-extra/lib/path-exists/index.js +12 -0
  146. package/node_modules/fs-extra/lib/remove/index.js +22 -0
  147. package/node_modules/fs-extra/lib/remove/rimraf.js +302 -0
  148. package/node_modules/fs-extra/lib/util/stat.js +154 -0
  149. package/node_modules/fs-extra/lib/util/utimes.js +26 -0
  150. package/node_modules/fs-extra/package.json +67 -0
  151. package/node_modules/graceful-fs/LICENSE +15 -0
  152. package/node_modules/graceful-fs/README.md +143 -0
  153. package/node_modules/graceful-fs/clone.js +23 -0
  154. package/node_modules/graceful-fs/graceful-fs.js +448 -0
  155. package/node_modules/graceful-fs/legacy-streams.js +118 -0
  156. package/node_modules/graceful-fs/package.json +53 -0
  157. package/node_modules/graceful-fs/polyfills.js +355 -0
  158. package/node_modules/header-case/LICENSE +21 -0
  159. package/node_modules/header-case/README.md +37 -0
  160. package/node_modules/header-case/dist/index.d.ts +3 -0
  161. package/node_modules/header-case/dist/index.js +11 -0
  162. package/node_modules/header-case/dist/index.js.map +1 -0
  163. package/node_modules/header-case/dist/index.spec.d.ts +1 -0
  164. package/node_modules/header-case/dist/index.spec.js +24 -0
  165. package/node_modules/header-case/dist/index.spec.js.map +1 -0
  166. package/node_modules/header-case/dist.es2015/index.d.ts +3 -0
  167. package/node_modules/header-case/dist.es2015/index.js +7 -0
  168. package/node_modules/header-case/dist.es2015/index.js.map +1 -0
  169. package/node_modules/header-case/dist.es2015/index.spec.d.ts +1 -0
  170. package/node_modules/header-case/dist.es2015/index.spec.js +22 -0
  171. package/node_modules/header-case/dist.es2015/index.spec.js.map +1 -0
  172. package/node_modules/header-case/package.json +89 -0
  173. package/node_modules/jsonfile/LICENSE +15 -0
  174. package/node_modules/jsonfile/README.md +230 -0
  175. package/node_modules/jsonfile/index.js +88 -0
  176. package/node_modules/jsonfile/package.json +40 -0
  177. package/node_modules/jsonfile/utils.js +14 -0
  178. package/node_modules/lower-case/LICENSE +21 -0
  179. package/node_modules/lower-case/README.md +35 -0
  180. package/node_modules/lower-case/dist/index.d.ts +8 -0
  181. package/node_modules/lower-case/dist/index.js +53 -0
  182. package/node_modules/lower-case/dist/index.js.map +1 -0
  183. package/node_modules/lower-case/dist/index.spec.d.ts +1 -0
  184. package/node_modules/lower-case/dist/index.spec.js +36 -0
  185. package/node_modules/lower-case/dist/index.spec.js.map +1 -0
  186. package/node_modules/lower-case/dist.es2015/index.d.ts +8 -0
  187. package/node_modules/lower-case/dist.es2015/index.js +48 -0
  188. package/node_modules/lower-case/dist.es2015/index.js.map +1 -0
  189. package/node_modules/lower-case/dist.es2015/index.spec.d.ts +1 -0
  190. package/node_modules/lower-case/dist.es2015/index.spec.js +34 -0
  191. package/node_modules/lower-case/dist.es2015/index.spec.js.map +1 -0
  192. package/node_modules/lower-case/package.json +87 -0
  193. package/node_modules/no-case/LICENSE +21 -0
  194. package/node_modules/no-case/README.md +37 -0
  195. package/node_modules/no-case/dist/index.d.ts +10 -0
  196. package/node_modules/no-case/dist/index.js +35 -0
  197. package/node_modules/no-case/dist/index.js.map +1 -0
  198. package/node_modules/no-case/dist/index.spec.d.ts +1 -0
  199. package/node_modules/no-case/dist/index.spec.js +59 -0
  200. package/node_modules/no-case/dist/index.spec.js.map +1 -0
  201. package/node_modules/no-case/dist.es2015/index.d.ts +10 -0
  202. package/node_modules/no-case/dist.es2015/index.js +31 -0
  203. package/node_modules/no-case/dist.es2015/index.js.map +1 -0
  204. package/node_modules/no-case/dist.es2015/index.spec.d.ts +1 -0
  205. package/node_modules/no-case/dist.es2015/index.spec.js +57 -0
  206. package/node_modules/no-case/dist.es2015/index.spec.js.map +1 -0
  207. package/node_modules/no-case/package.json +85 -0
  208. package/node_modules/param-case/LICENSE +21 -0
  209. package/node_modules/param-case/README.md +37 -0
  210. package/node_modules/param-case/dist/index.d.ts +3 -0
  211. package/node_modules/param-case/dist/index.js +11 -0
  212. package/node_modules/param-case/dist/index.js.map +1 -0
  213. package/node_modules/param-case/dist/index.spec.d.ts +1 -0
  214. package/node_modules/param-case/dist/index.spec.js +24 -0
  215. package/node_modules/param-case/dist/index.spec.js.map +1 -0
  216. package/node_modules/param-case/dist.es2015/index.d.ts +3 -0
  217. package/node_modules/param-case/dist.es2015/index.js +7 -0
  218. package/node_modules/param-case/dist.es2015/index.js.map +1 -0
  219. package/node_modules/param-case/dist.es2015/index.spec.d.ts +1 -0
  220. package/node_modules/param-case/dist.es2015/index.spec.js +22 -0
  221. package/node_modules/param-case/dist.es2015/index.spec.js.map +1 -0
  222. package/node_modules/param-case/package.json +91 -0
  223. package/node_modules/pascal-case/LICENSE +21 -0
  224. package/node_modules/pascal-case/README.md +47 -0
  225. package/node_modules/pascal-case/dist/index.d.ts +5 -0
  226. package/node_modules/pascal-case/dist/index.js +24 -0
  227. package/node_modules/pascal-case/dist/index.js.map +1 -0
  228. package/node_modules/pascal-case/dist/index.spec.d.ts +1 -0
  229. package/node_modules/pascal-case/dist/index.spec.js +25 -0
  230. package/node_modules/pascal-case/dist/index.spec.js.map +1 -0
  231. package/node_modules/pascal-case/dist.es2015/index.d.ts +5 -0
  232. package/node_modules/pascal-case/dist.es2015/index.js +18 -0
  233. package/node_modules/pascal-case/dist.es2015/index.js.map +1 -0
  234. package/node_modules/pascal-case/dist.es2015/index.spec.d.ts +1 -0
  235. package/node_modules/pascal-case/dist.es2015/index.spec.js +23 -0
  236. package/node_modules/pascal-case/dist.es2015/index.spec.js.map +1 -0
  237. package/node_modules/pascal-case/package.json +90 -0
  238. package/node_modules/path-case/LICENSE +21 -0
  239. package/node_modules/path-case/README.md +37 -0
  240. package/node_modules/path-case/dist/index.d.ts +3 -0
  241. package/node_modules/path-case/dist/index.js +11 -0
  242. package/node_modules/path-case/dist/index.js.map +1 -0
  243. package/node_modules/path-case/dist/index.spec.d.ts +1 -0
  244. package/node_modules/path-case/dist/index.spec.js +24 -0
  245. package/node_modules/path-case/dist/index.spec.js.map +1 -0
  246. package/node_modules/path-case/dist.es2015/index.d.ts +3 -0
  247. package/node_modules/path-case/dist.es2015/index.js +7 -0
  248. package/node_modules/path-case/dist.es2015/index.js.map +1 -0
  249. package/node_modules/path-case/dist.es2015/index.spec.d.ts +1 -0
  250. package/node_modules/path-case/dist.es2015/index.spec.js +22 -0
  251. package/node_modules/path-case/dist.es2015/index.spec.js.map +1 -0
  252. package/node_modules/path-case/package.json +88 -0
  253. package/node_modules/sentence-case/LICENSE +21 -0
  254. package/node_modules/sentence-case/README.md +37 -0
  255. package/node_modules/sentence-case/dist/index.d.ts +4 -0
  256. package/node_modules/sentence-case/dist/index.js +19 -0
  257. package/node_modules/sentence-case/dist/index.js.map +1 -0
  258. package/node_modules/sentence-case/dist/index.spec.d.ts +1 -0
  259. package/node_modules/sentence-case/dist/index.spec.js +24 -0
  260. package/node_modules/sentence-case/dist/index.spec.js.map +1 -0
  261. package/node_modules/sentence-case/dist.es2015/index.d.ts +4 -0
  262. package/node_modules/sentence-case/dist.es2015/index.js +14 -0
  263. package/node_modules/sentence-case/dist.es2015/index.js.map +1 -0
  264. package/node_modules/sentence-case/dist.es2015/index.spec.d.ts +1 -0
  265. package/node_modules/sentence-case/dist.es2015/index.spec.js +22 -0
  266. package/node_modules/sentence-case/dist.es2015/index.spec.js.map +1 -0
  267. package/node_modules/sentence-case/package.json +89 -0
  268. package/node_modules/snake-case/LICENSE +21 -0
  269. package/node_modules/snake-case/README.md +37 -0
  270. package/node_modules/snake-case/dist/index.d.ts +3 -0
  271. package/node_modules/snake-case/dist/index.js +11 -0
  272. package/node_modules/snake-case/dist/index.js.map +1 -0
  273. package/node_modules/snake-case/dist/index.spec.d.ts +1 -0
  274. package/node_modules/snake-case/dist/index.spec.js +25 -0
  275. package/node_modules/snake-case/dist/index.spec.js.map +1 -0
  276. package/node_modules/snake-case/dist.es2015/index.d.ts +3 -0
  277. package/node_modules/snake-case/dist.es2015/index.js +7 -0
  278. package/node_modules/snake-case/dist.es2015/index.js.map +1 -0
  279. package/node_modules/snake-case/dist.es2015/index.spec.d.ts +1 -0
  280. package/node_modules/snake-case/dist.es2015/index.spec.js +23 -0
  281. package/node_modules/snake-case/dist.es2015/index.spec.js.map +1 -0
  282. package/node_modules/snake-case/package.json +90 -0
  283. package/node_modules/tslib/CopyrightNotice.txt +15 -0
  284. package/node_modules/tslib/LICENSE.txt +12 -0
  285. package/node_modules/tslib/README.md +164 -0
  286. package/node_modules/tslib/SECURITY.md +41 -0
  287. package/node_modules/tslib/modules/index.d.ts +38 -0
  288. package/node_modules/tslib/modules/index.js +70 -0
  289. package/node_modules/tslib/modules/package.json +3 -0
  290. package/node_modules/tslib/package.json +47 -0
  291. package/node_modules/tslib/tslib.d.ts +460 -0
  292. package/node_modules/tslib/tslib.es6.html +1 -0
  293. package/node_modules/tslib/tslib.es6.js +402 -0
  294. package/node_modules/tslib/tslib.es6.mjs +401 -0
  295. package/node_modules/tslib/tslib.html +1 -0
  296. package/node_modules/tslib/tslib.js +484 -0
  297. package/node_modules/universalify/LICENSE +20 -0
  298. package/node_modules/universalify/README.md +76 -0
  299. package/node_modules/universalify/index.js +24 -0
  300. package/node_modules/universalify/package.json +34 -0
  301. package/node_modules/upper-case/README.md +34 -0
  302. package/node_modules/upper-case/dist/index.d.ts +8 -0
  303. package/node_modules/upper-case/dist/index.js +49 -0
  304. package/node_modules/upper-case/dist/index.js.map +1 -0
  305. package/node_modules/upper-case/dist/index.spec.d.ts +1 -0
  306. package/node_modules/upper-case/dist/index.spec.js +34 -0
  307. package/node_modules/upper-case/dist/index.spec.js.map +1 -0
  308. package/node_modules/upper-case/dist.es2015/index.d.ts +8 -0
  309. package/node_modules/upper-case/dist.es2015/index.js +44 -0
  310. package/node_modules/upper-case/dist.es2015/index.js.map +1 -0
  311. package/node_modules/upper-case/dist.es2015/index.spec.d.ts +1 -0
  312. package/node_modules/upper-case/dist.es2015/index.spec.js +32 -0
  313. package/node_modules/upper-case/dist.es2015/index.spec.js.map +1 -0
  314. package/node_modules/upper-case/package.json +86 -0
  315. package/node_modules/upper-case-first/LICENSE +21 -0
  316. package/node_modules/upper-case-first/README.md +32 -0
  317. package/node_modules/upper-case-first/dist/index.d.ts +4 -0
  318. package/node_modules/upper-case-first/dist/index.js +11 -0
  319. package/node_modules/upper-case-first/dist/index.js.map +1 -0
  320. package/node_modules/upper-case-first/dist/index.spec.d.ts +1 -0
  321. package/node_modules/upper-case-first/dist/index.spec.js +20 -0
  322. package/node_modules/upper-case-first/dist/index.spec.js.map +1 -0
  323. package/node_modules/upper-case-first/dist.es2015/index.d.ts +4 -0
  324. package/node_modules/upper-case-first/dist.es2015/index.js +7 -0
  325. package/node_modules/upper-case-first/dist.es2015/index.js.map +1 -0
  326. package/node_modules/upper-case-first/dist.es2015/index.spec.d.ts +1 -0
  327. package/node_modules/upper-case-first/dist.es2015/index.spec.js +18 -0
  328. package/node_modules/upper-case-first/dist.es2015/index.spec.js.map +1 -0
  329. package/node_modules/upper-case-first/package.json +87 -0
  330. package/package.json +181 -0
package/lib/index.js ADDED
@@ -0,0 +1,447 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CdktnProviderProject = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /* eslint-disable @typescript-eslint/no-require-imports */
7
+ const assert = require("assert");
8
+ const change_case_1 = require("change-case");
9
+ const projen_1 = require("projen");
10
+ const javascript_1 = require("projen/lib/javascript");
11
+ const alert_open_prs_1 = require("./alert-open-prs");
12
+ const auto_approve_1 = require("./auto-approve");
13
+ const auto_close_community_issues_1 = require("./auto-close-community-issues");
14
+ const automerge_1 = require("./automerge");
15
+ const cdktf_config_1 = require("./cdktf-config");
16
+ const copyright_headers_1 = require("./copyright-headers");
17
+ const customized_license_1 = require("./customized-license");
18
+ const dependabot_1 = require("./dependabot");
19
+ const deprecate_packages_1 = require("./deprecate-packages");
20
+ const force_release_1 = require("./force-release");
21
+ const github_issues_1 = require("./github-issues");
22
+ const lock_issues_1 = require("./lock-issues");
23
+ const provider_upgrade_1 = require("./provider-upgrade");
24
+ const check_for_upgrades_1 = require("./scripts/check-for-upgrades");
25
+ const should_release_1 = require("./scripts/should-release");
26
+ const random_cron_1 = require("./util/random-cron");
27
+ // ensure new projects start with 1.0.0 so that every following breaking change leads to an increased major version
28
+ const MIN_MAJOR_VERSION = 1;
29
+ const getMavenName = (providerName) => {
30
+ return ["null", "random"].includes(providerName)
31
+ ? `${providerName}_provider`
32
+ : providerName.replace(/-/gi, "_");
33
+ };
34
+ const githubActionPinnedVersions = {
35
+ "actions/checkout": "11bd71901bbe5b1630ceea73d27597364c9af683", // v4.2.2
36
+ "actions/download-artifact": "95815c38cf2ff2164869cbab79da8d1f422bc89e", // v4.2.1
37
+ "actions/github-script": "60a0d83039c74a4aee543508d2ffcb1c3799cdea", // v7.0.1
38
+ "actions/setup-dotnet": "67a3573c9a986a3f9c594539f4ab511d57bb3ce9", // v4.3.1
39
+ "actions/setup-go": "0aaccfd150d50ccaeb58ebd88d36e91967a5f35b", // v5.4.0
40
+ "actions/setup-java": "3a4f6e1af504cf6a31855fa899c6aa5355ba6c12", // v4.7.0
41
+ "actions/setup-node": "cdca7365b2dadb8aad0a33bc7601856ffabcc48e", // v4.3.0
42
+ "actions/setup-python": "42375524e23c412d93fb67b49958b491fce71c38", // v5.4.0
43
+ "actions/stale": "5bef64f19d7facfb25b37b414482c7164d639639", // v9.1.0
44
+ "actions/upload-artifact": "ea165f8d65b6e75b540449e92b4886f43607fa02", // v4.6.2
45
+ "amannn/action-semantic-pull-request": "0723387faaf9b38adef4775cd42cfd5155ed6017", // v5.5.3
46
+ "dessant/lock-threads": "1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771", // v5.0.1
47
+ "hashicorp/setup-copywrite": "32638da2d4e81d56a0764aa1547882fc4d209636", // v1.1.3
48
+ "hashicorp/setup-terraform": "b9cd54a3c349d3f38e8881555d616ced269862dd", // v3.1.2
49
+ "imjohnbo/issue-bot": "572eed14422c4d6ca37e870f97e7da209422f5bd", // v3.4.4
50
+ "peter-evans/create-pull-request": "271a8d0340265f705b14b6d32b9829c1cb33d45e", // v7.0.8
51
+ "slackapi/slack-github-action": "485a9d42d3a73031f12ec201c457e2162c45d02d", // v2.0.0
52
+ };
53
+ class CdktnProviderProject extends projen_1.cdk.JsiiProject {
54
+ constructor(options) {
55
+ const { terraformProvider, workflowContainerImage, cdktfVersion, constructsVersion, minNodeVersion, jsiiVersion, typescriptVersion, isDeprecated, deprecationDate,
56
+ // TODO: Confirm default Author Name
57
+ authorName = "CDK Terrain Maintainers", authorAddress = "https://cdktn.io", namespace = "cdktn", githubNamespace = "cdktn-io", mavenEndpoint = "https://central.sonatype.com", // TODO
58
+ nugetOrg = "Io.Cdktn", // TODO
59
+ mavenOrg = "Io.Cdktn", // TODO
60
+ } = options;
61
+ const [fqproviderName, providerVersion] = terraformProvider.split("@");
62
+ const providerName = fqproviderName.split("/").pop();
63
+ assert(providerName, `${terraformProvider} doesn't seem to be valid`);
64
+ assert(!providerName.endsWith("-go"), "providerName may not end with '-go' as this can conflict with repos for go packages");
65
+ const nugetName = `${nugetOrg}.${(0, change_case_1.pascalCase)(namespace)}.Providers.${(0, change_case_1.pascalCase)(providerName)}`;
66
+ const mavenGroupId = options.mavenGroupId ?? `com.${mavenOrg}`;
67
+ const mavenName = `${mavenGroupId}.${namespace}.providers.${getMavenName(providerName)}`;
68
+ const repository = `${githubNamespace}/${namespace}-provider-${providerName.replace(/-/g, "")}`;
69
+ const repositoryUrl = `github.com/${repository}`;
70
+ const packageInfo = {
71
+ npm: {
72
+ name: `@${namespace}/provider-${providerName}`,
73
+ },
74
+ python: {
75
+ // distName: `${githubNamespace}-${namespace}-provider-${providerName.replace(
76
+ distName: `${namespace}-provider-${providerName.replace(/-/gi, "_")}`,
77
+ // module: `${githubNamespace}_${namespace}_provider_${providerName.replace(
78
+ module: `${namespace}_provider_${providerName.replace(/-/gi, "_")}`,
79
+ },
80
+ publishToNuget: {
81
+ dotNetNamespace: nugetName,
82
+ packageId: nugetName,
83
+ },
84
+ publishToMaven: {
85
+ javaPackage: mavenName,
86
+ mavenGroupId: mavenGroupId,
87
+ mavenArtifactId: `${namespace}-provider-${providerName}`,
88
+ mavenEndpoint,
89
+ },
90
+ publishToGo: {
91
+ moduleName: `${repositoryUrl}-go`,
92
+ gitUserEmail: "github-team-cdk-terrain@cdktn.io",
93
+ gitUserName: "team-cdk-terrain",
94
+ packageName: providerName.replace(/-/g, ""),
95
+ // In order to use the copywrite action, we need to rebuild the full pre-publish steps workflow unfortunately
96
+ // If someone knows a better way to do this mutation with minimal custom code, please do so
97
+ prePublishSteps: [
98
+ {
99
+ name: "Checkout",
100
+ uses: "actions/checkout",
101
+ with: {
102
+ path: ".repo",
103
+ },
104
+ },
105
+ {
106
+ name: "Install Dependencies",
107
+ run: "cd .repo && yarn install --check-files --frozen-lockfile",
108
+ },
109
+ {
110
+ name: "Extract build artifact",
111
+ run: "tar --strip-components=1 -xzvf dist/js/*.tgz -C .repo",
112
+ },
113
+ {
114
+ name: "Move build artifact out of the way",
115
+ run: "mv dist dist.old",
116
+ },
117
+ {
118
+ name: "Create go artifact",
119
+ run: "cd .repo && npx projen package:go",
120
+ },
121
+ {
122
+ name: "Setup Copywrite tool",
123
+ uses: "hashicorp/setup-copywrite",
124
+ },
125
+ {
126
+ name: "Copy copywrite hcl file",
127
+ run: "cp .repo/.copywrite.hcl .repo/dist/go/.copywrite.hcl",
128
+ },
129
+ {
130
+ name: "Add headers using Copywrite tool",
131
+ run: "cd .repo/dist/go && copywrite headers",
132
+ },
133
+ {
134
+ name: "Remove copywrite hcl file",
135
+ run: "rm -f .repo/dist/go/.copywrite.hcl",
136
+ },
137
+ {
138
+ name: "Remove some text from the README that doesn't apply to Go",
139
+ run: [
140
+ "sed -i 's/# CDKTF prebuilt bindings for/# CDKTF Go bindings for/' .repo/dist/go/*/README.md",
141
+ // @see https://stackoverflow.com/a/49511949
142
+ // eslint-disable-next-line prettier/prettier
143
+ // prettier-ignore
144
+ `sed -i -e '/## ${isDeprecated ? "Deprecated" : "Available"} Packages/,/### Go/!b' -e '/### Go/!d;p; s/### Go/## Go Package/' -e 'd' .repo/dist/go/*/README.md`,
145
+ // sed -e is black magic and for whatever reason the string replace doesn't work so let's try it again:
146
+ // eslint-disable-next-line prettier/prettier
147
+ // prettier-ignore
148
+ `sed -i 's/### Go/## ${isDeprecated ? "Deprecated" : "Go"} Package/' .repo/dist/go/*/README.md`,
149
+ // Just straight up delete these full lines and everything in between them:
150
+ "sed -i -e '/API.typescript.md/,/You can also visit a hosted version/!b' -e 'd' .repo/dist/go/*/README.md",
151
+ `sed -i 's|Find auto-generated docs for this provider here:|Find auto-generated docs for this provider [here](https://${repositoryUrl}/blob/main/docs/API.go.md).|' .repo/dist/go/*/README.md`,
152
+ // Just straight up delete these full lines and everything in between them:
153
+ "sed -i -e '/### Provider Version/,/The provider version can be adjusted/!b' -e 'd' .repo/dist/go/*/README.md",
154
+ ].join("\n"),
155
+ },
156
+ {
157
+ name: "Copy the README file to the parent directory",
158
+ run: "cp .repo/dist/go/*/README.md .repo/dist/go/README.md",
159
+ },
160
+ {
161
+ name: "Collect go Artifact",
162
+ run: "mv .repo/dist dist",
163
+ },
164
+ ],
165
+ },
166
+ };
167
+ const workflowRunsOn = options.useCustomGithubRunner
168
+ ? ["custom-linux-medium"] // 8 core, 32 GB
169
+ : ["ubuntu-latest"]; // 7 GB
170
+ super({
171
+ ...options,
172
+ authorAddress,
173
+ authorName,
174
+ minNodeVersion,
175
+ workflowContainerImage,
176
+ workflowRunsOn,
177
+ licensed: false, // we do supply our own license file with a custom header
178
+ releaseToNpm: true,
179
+ name: packageInfo.npm.name,
180
+ description: `Prebuilt ${providerName} Provider for Terraform CDK (cdktf)`,
181
+ keywords: ["cdktf", "terraform", "cdk", "provider", providerName],
182
+ sampleCode: false,
183
+ jest: false,
184
+ authorOrganization: true,
185
+ defaultReleaseBranch: "main",
186
+ repository: `https://github.com/${repository}.git`,
187
+ mergify: false,
188
+ eslint: false,
189
+ depsUpgrade: !isDeprecated,
190
+ depsUpgradeOptions: {
191
+ workflowOptions: {
192
+ labels: ["automerge", "auto-approve", "dependencies"],
193
+ schedule: javascript_1.UpgradeDependenciesSchedule.WEEKLY,
194
+ },
195
+ },
196
+ python: packageInfo.python,
197
+ // TODO: Re-enable if requested and when available
198
+ // publishToNuget: packageInfo.publishToNuget,
199
+ // publishToMaven: packageInfo.publishToMaven,
200
+ publishToGo: packageInfo.publishToGo,
201
+ releaseFailureIssue: true,
202
+ peerDependencyOptions: {
203
+ pinnedDevDependency: false,
204
+ },
205
+ workflowGitIdentity: {
206
+ name: "team-cdk-terrain",
207
+ email: "github-team-cdk-terrain@cdktn.io",
208
+ },
209
+ minMajorVersion: MIN_MAJOR_VERSION,
210
+ stale: true,
211
+ staleOptions: {
212
+ issues: {
213
+ staleLabel: "stale",
214
+ daysBeforeStale: 45,
215
+ staleMessage: "45 days have passed since this issue was opened, and I assume other publishes have succeeded in the meantime. " +
216
+ "If no one removes the `stale` label or comments, I'm going to auto-close this issue in 14 days.",
217
+ daysBeforeClose: 14,
218
+ closeMessage: "2 months have passed, so I'm closing this issue with the assumption that other publishes have succeeded in the meantime.",
219
+ },
220
+ pullRequest: {
221
+ staleLabel: "stale",
222
+ daysBeforeStale: 1,
223
+ staleMessage: `Closing this PR, if it has not merged there is most likely a CI or CDKTF issue preventing it from merging. If this has been a manual PR, please reopen it and add the \`no-auto-close\` label to prevent this from happening again.`,
224
+ daysBeforeClose: 0,
225
+ exemptLabels: ["no-auto-close"],
226
+ },
227
+ },
228
+ pullRequestTemplate: false,
229
+ docgen: false,
230
+ });
231
+ this.addDevDeps("dot-prop@^5.2.0", "@actions/core@^1.1.0", "@action-validator/core", "@action-validator/cli");
232
+ // Default memory is 7GB: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources
233
+ // Custom Runners we use have 32GB of memory
234
+ // The below numbers set heap limits that are ~1gb and ~0.5gb less, respectively, than the total available memory
235
+ const maxOldSpaceSize = options.useCustomGithubRunner ? "31744" : "6656";
236
+ // Golang needs more memory to build
237
+ this.tasks.addEnvironment("NODE_OPTIONS", `--max-old-space-size=${maxOldSpaceSize}`);
238
+ this.tasks.addEnvironment("CHECKPOINT_DISABLE", "1");
239
+ const validateTask = this.addTask("validate-workflows", {
240
+ exec: `find ./.github/workflows -type f -name "*.yml" -print0 | xargs -0 -n 1 npx action-validator`,
241
+ });
242
+ validateTask.description =
243
+ "Lint the YAML files generated by Projen to define GitHub Actions and Workflows, checking them against published JSON schemas";
244
+ this.postCompileTask.spawn(validateTask);
245
+ this.package.addPackageResolutions("@types/yargs@17.0.13");
246
+ const setSafeDirectory = {
247
+ name: "Set git config safe.directory",
248
+ run: "git config --global --add safe.directory $(pwd)",
249
+ };
250
+ this.buildWorkflow.preBuildSteps.push(setSafeDirectory);
251
+ this.release.defaultBranch.workflow.jobs.release.steps.splice(1, 0, setSafeDirectory);
252
+ // always publish a new GitHub release, even when publishing to a particular package manager fails
253
+ const releaseWorkflow = this.tryFindObjectFile(".github/workflows/release.yml");
254
+ releaseWorkflow?.addOverride("jobs.release_github.needs", "release");
255
+ // ensure we don't fail if the release file is not present
256
+ const checkExistingTagStep = this.release.defaultBranch.workflow.jobs.release.steps.find((s) => "id" in s && s.id === "check_tag_exists");
257
+ const oldExistingTagRun = checkExistingTagStep.run;
258
+ prettyAssertEqual(oldExistingTagRun.split("\n")[0], "TAG=$(cat dist/releasetag.txt)", "release step changed, please check if the workaround still works!");
259
+ checkExistingTagStep.run = `if [ ! -f dist/releasetag.txt ]; then (echo "exists=true" >> $GITHUB_OUTPUT) && exit 0; fi\n${oldExistingTagRun}`;
260
+ if (!isDeprecated) {
261
+ const { upgrade, pr } = this.upgradeWorkflow.workflows[0].jobs;
262
+ upgrade.steps.splice(1, 0, setSafeDirectory);
263
+ pr.steps.splice(1, 0, setSafeDirectory);
264
+ }
265
+ // // TODO: Re-enable when Maven requested and infra available
266
+ // // Fix maven issue (https://github.com/cdklabs/publib/pull/777)
267
+ // github.GitHub.of(this)?.tryFindWorkflow("release")?.file?.patch(
268
+ // JsonPatch.add(
269
+ // "/jobs/release_maven/steps/10/env/MAVEN_OPTS",
270
+ // // See https://stackoverflow.com/questions/70153962/nexus-staging-maven-plugin-maven-deploy-failed-an-api-incompatibility-was-enco
271
+ // "--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED"
272
+ // )
273
+ // );
274
+ this.pinGithubActionVersions(githubActionPinnedVersions);
275
+ new cdktf_config_1.CdktfConfig(this, {
276
+ terraformProvider,
277
+ providerName,
278
+ fqproviderName,
279
+ providerVersion,
280
+ cdktfVersion,
281
+ constructsVersion,
282
+ jsiiVersion,
283
+ typescriptVersion,
284
+ packageInfo,
285
+ githubNamespace,
286
+ deprecationDate,
287
+ isDeprecated: !!isDeprecated,
288
+ });
289
+ new customized_license_1.CustomizedLicense(this, options.creationYear, options.licensee);
290
+ new github_issues_1.GithubIssues(this, { providerName });
291
+ new auto_approve_1.AutoApprove(this);
292
+ new auto_close_community_issues_1.AutoCloseCommunityIssues(this, { providerName });
293
+ new automerge_1.Automerge(this);
294
+ new lock_issues_1.LockIssues(this);
295
+ if (!isDeprecated) {
296
+ const upgradeScript = new check_for_upgrades_1.CheckForUpgradesScriptFile(this, {
297
+ providerVersion,
298
+ fqproviderName,
299
+ });
300
+ new provider_upgrade_1.ProviderUpgrade(this, {
301
+ checkForUpgradesScriptPath: upgradeScript.path,
302
+ workflowRunsOn,
303
+ nodeHeapSize: maxOldSpaceSize,
304
+ });
305
+ new alert_open_prs_1.AlertOpenPrs(this, {
306
+ slackWebhookUrl: "${{ secrets.ALERT_PRS_SLACK_WEBHOOK_URL }}",
307
+ repository,
308
+ });
309
+ new dependabot_1.Dependabot(this);
310
+ }
311
+ new projen_1.TextFile(this, ".github/CODEOWNERS", {
312
+ lines: [
313
+ "# These owners will be the default owners for everything in ",
314
+ "# the repo. Unless a later match takes precedence, ",
315
+ "# they will be requested for review when someone opens a ",
316
+ "# pull request.",
317
+ "* @cdktn-io/team-cdk-terrain",
318
+ ],
319
+ });
320
+ if (!isDeprecated) {
321
+ new should_release_1.ShouldReleaseScriptFile(this, {});
322
+ const releaseTask = this.tasks.tryFind("release");
323
+ this.removeTask("release");
324
+ this.addTask("release", {
325
+ description: releaseTask.description,
326
+ steps: releaseTask.steps,
327
+ env: releaseTask._env,
328
+ condition: "node ./scripts/should-release.js",
329
+ });
330
+ this.addTask("unconditional-release", {
331
+ description: releaseTask.description,
332
+ steps: releaseTask.steps,
333
+ env: releaseTask._env,
334
+ });
335
+ const releaseJobSteps = (this.github?.tryFindWorkflow("release")).jobs.release.steps;
336
+ const gitRemoteJob = releaseJobSteps.find((it) => it.id === "git_remote");
337
+ prettyAssertEqual(gitRemoteJob.run, 'echo "latest_commit=$(git ls-remote origin -h ${{ github.ref }} | cut -f1)" >> $GITHUB_OUTPUT\ncat $GITHUB_OUTPUT', "git_remote step in release workflow did not match expected string, please check if the workaround still works!");
338
+ const previousCommand = gitRemoteJob.run.replace("\n", " && ");
339
+ const cancelCommand = 'echo "latest_commit=release_cancelled" >> $GITHUB_OUTPUT'; // this cancels the release via a non-matching SHA;
340
+ gitRemoteJob.run = `node ./scripts/should-release.js && (${previousCommand}) || ${cancelCommand}`;
341
+ gitRemoteJob.name +=
342
+ " or cancel via faking a SHA if release was cancelled";
343
+ }
344
+ const staleWorkflow = this.tryFindObjectFile(".github/workflows/stale.yml");
345
+ staleWorkflow?.addOverride("on.schedule", [
346
+ {
347
+ cron: (0, random_cron_1.generateRandomCron)({ project: this, maxHour: 4, hourOffset: 1 }),
348
+ },
349
+ ]);
350
+ const upgradeWorkflow = this.tryFindObjectFile(".github/workflows/upgrade-main.yml");
351
+ upgradeWorkflow?.addOverride("on.schedule", [
352
+ {
353
+ cron: (0, random_cron_1.generateRandomCron)({
354
+ project: this,
355
+ maxHour: 0,
356
+ hourOffset: 1,
357
+ schedule: random_cron_1.Schedule.Weekly,
358
+ }),
359
+ },
360
+ ]);
361
+ // Submodule documentation generation
362
+ this.gitignore.exclude("API.md"); // ignore the old file, we now generate it in the docs folder
363
+ this.addDevDeps("jsii-docgen@^10.2.3");
364
+ if (jsiiVersion) {
365
+ // NOTE: the below is making a broad assumption that you're passing a range like "~5.3.0" to jsiiVersion
366
+ // If you use that field to pass a very specific version (e.g. "5.3.11") then this might break
367
+ this.addDevDeps(`jsii-rosetta@${jsiiVersion}`);
368
+ }
369
+ else {
370
+ this.addDevDeps(`jsii-rosetta`);
371
+ }
372
+ const docgen = this.addTask("docgen", {
373
+ description: "Generate documentation for the project",
374
+ steps: [
375
+ {
376
+ exec: [
377
+ "rm -rf docs",
378
+ "rm -f API.md",
379
+ "mkdir docs",
380
+ // TODO: Re-enable java / csharp
381
+ // "jsii-docgen --split-by-submodule -l typescript -l python -l java -l csharp -l go",
382
+ "jsii-docgen --split-by-submodule -l typescript -l python -l go",
383
+ // There is no nice way to tell jsii-docgen to generate docs into a folder so I went this route
384
+ "mv *.*.md docs",
385
+ // Some part of the documentation are too long, we need to truncate them to ~10MB
386
+ "cd docs",
387
+ "ls ./ | xargs sed -i '150000,$ d' $1",
388
+ ].join(" && "),
389
+ },
390
+ ],
391
+ });
392
+ this.postCompileTask.spawn(docgen);
393
+ this.gitignore.include(`/docs/*.md`);
394
+ this.annotateGenerated(`/docs/*.md`);
395
+ // Setting the version in package.json so the golang docs have the correct version
396
+ const unconditionalBump = this.addTask("unconditional-bump", {
397
+ description: "Set the version in package.json to the current version",
398
+ steps: [
399
+ {
400
+ name: "Clear the changelog so that it doesn't get published twice",
401
+ exec: "rm -f $CHANGELOG",
402
+ },
403
+ { builtin: "release/bump-version" },
404
+ ],
405
+ env: {
406
+ OUTFILE: "package.json",
407
+ CHANGELOG: "dist/changelog.md",
408
+ BUMPFILE: "dist/version.txt",
409
+ RELEASETAG: "dist/releasetag.txt",
410
+ RELEASE_TAG_PREFIX: "",
411
+ MIN_MAJOR: String(MIN_MAJOR_VERSION),
412
+ },
413
+ });
414
+ this.preCompileTask.spawn(unconditionalBump);
415
+ // To bump correctly we need to have the completely cloned repo
416
+ this.buildWorkflow.workflow.file.addOverride("jobs.build.steps.0.with.fetch-depth", 0);
417
+ // Undo the changes after compilation
418
+ this.buildWorkflow?.addPostBuildSteps({
419
+ name: "Revert package.json version bump",
420
+ run: "git checkout package.json",
421
+ });
422
+ new copyright_headers_1.CopyrightHeaders(this);
423
+ new deprecate_packages_1.DeprecatePackages(this, {
424
+ providerName,
425
+ packageInfo,
426
+ isDeprecated: !!isDeprecated,
427
+ });
428
+ if (!isDeprecated) {
429
+ new force_release_1.ForceRelease(this, { workflowRunsOn });
430
+ }
431
+ }
432
+ pinGithubActionVersions(pinnedVersions) {
433
+ // Use pinned versions of github actions
434
+ Object.entries(pinnedVersions).forEach(([name, sha]) => {
435
+ this.github?.actions.set(name, `${name}@${sha}`);
436
+ });
437
+ }
438
+ }
439
+ exports.CdktnProviderProject = CdktnProviderProject;
440
+ _a = JSII_RTTI_SYMBOL_1;
441
+ CdktnProviderProject[_a] = { fqn: "@cdktn/provider-project.CdktnProviderProject", version: "0.7.24" };
442
+ function prettyAssertEqual(subject, expected, message) {
443
+ if (subject !== expected) {
444
+ throw new Error(`${message ?? "Assertion failed"}: expected ${JSON.stringify(expected)} but got ${JSON.stringify(subject)}`);
445
+ }
446
+ }
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwwREFBMEQ7QUFDMUQsaUNBQWtDO0FBQ2xDLDZDQUF5QztBQUN6QyxtQ0FBdUM7QUFFdkMsc0RBQW9FO0FBQ3BFLHFEQUFnRDtBQUNoRCxpREFBNkM7QUFDN0MsK0VBQXlFO0FBQ3pFLDJDQUF3QztBQUN4QyxpREFBNkM7QUFDN0MsMkRBQXVEO0FBQ3ZELDZEQUF5RDtBQUN6RCw2Q0FBMEM7QUFDMUMsNkRBQXlEO0FBQ3pELG1EQUErQztBQUMvQyxtREFBK0M7QUFDL0MsK0NBQTJDO0FBRTNDLHlEQUFxRDtBQUNyRCxxRUFBMEU7QUFDMUUsNkRBQW1FO0FBQ25FLG9EQUFrRTtBQUVsRSxtSEFBbUg7QUFDbkgsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFtRDVCLE1BQU0sWUFBWSxHQUFHLENBQUMsWUFBb0IsRUFBVSxFQUFFO0lBQ3BELE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUM5QyxDQUFDLENBQUMsR0FBRyxZQUFZLFdBQVc7UUFDNUIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQUc7SUFDakMsa0JBQWtCLEVBQUUsMENBQTBDLEVBQUUsU0FBUztJQUN6RSwyQkFBMkIsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQ2xGLHVCQUF1QixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDOUUsc0JBQXNCLEVBQUUsMENBQTBDLEVBQUUsU0FBUztJQUM3RSxrQkFBa0IsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQ3pFLG9CQUFvQixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDM0Usb0JBQW9CLEVBQUUsMENBQTBDLEVBQUUsU0FB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LENBQUM7O0FBNWRILG9EQTZkQzs7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBSSxPQUFVLEVBQUUsUUFBVyxFQUFFLE9BQWdCO0lBQ3JFLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxPQUFPLElBQUksa0JBQWtCLGNBQWMsSUFBSSxDQUFDLFNBQVMsQ0FDMUQsUUFBUSxDQUNULFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUN2QyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5pbXBvcnQgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbmltcG9ydCB7IHBhc2NhbENhc2UgfSBmcm9tIFwiY2hhbmdlLWNhc2VcIjtcbmltcG9ydCB7IFRleHRGaWxlLCBjZGsgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBKb2JTdGVwIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlIH0gZnJvbSBcInByb2plbi9saWIvamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgQWxlcnRPcGVuUHJzIH0gZnJvbSBcIi4vYWxlcnQtb3Blbi1wcnNcIjtcbmltcG9ydCB7IEF1dG9BcHByb3ZlIH0gZnJvbSBcIi4vYXV0by1hcHByb3ZlXCI7XG5pbXBvcnQgeyBBdXRvQ2xvc2VDb21tdW5pdHlJc3N1ZXMgfSBmcm9tIFwiLi9hdXRvLWNsb3NlLWNvbW11bml0eS1pc3N1ZXNcIjtcbmltcG9ydCB7IEF1dG9tZXJnZSB9IGZyb20gXCIuL2F1dG9tZXJnZVwiO1xuaW1wb3J0IHsgQ2RrdGZDb25maWcgfSBmcm9tIFwiLi9jZGt0Zi1jb25maWdcIjtcbmltcG9ydCB7IENvcHlyaWdodEhlYWRlcnMgfSBmcm9tIFwiLi9jb3B5cmlnaHQtaGVhZGVyc1wiO1xuaW1wb3J0IHsgQ3VzdG9taXplZExpY2Vuc2UgfSBmcm9tIFwiLi9jdXN0b21pemVkLWxpY2Vuc2VcIjtcbmltcG9ydCB7IERlcGVuZGFib3QgfSBmcm9tIFwiLi9kZXBlbmRhYm90XCI7XG5pbXBvcnQgeyBEZXByZWNhdGVQYWNrYWdlcyB9IGZyb20gXCIuL2RlcHJlY2F0ZS1wYWNrYWdlc1wiO1xuaW1wb3J0IHsgRm9yY2VSZWxlYXNlIH0gZnJvbSBcIi4vZm9yY2UtcmVsZWFzZVwiO1xuaW1wb3J0IHsgR2l0aHViSXNzdWVzIH0gZnJvbSBcIi4vZ2l0aHViLWlzc3Vlc1wiO1xuaW1wb3J0IHsgTG9ja0lzc3VlcyB9IGZyb20gXCIuL2xvY2staXNzdWVzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSW5mbyB9IGZyb20gXCIuL3BhY2thZ2UtaW5mb1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJVcGdyYWRlIH0gZnJvbSBcIi4vcHJvdmlkZXItdXBncmFkZVwiO1xuaW1wb3J0IHsgQ2hlY2tGb3JVcGdyYWRlc1NjcmlwdEZpbGUgfSBmcm9tIFwiLi9zY3JpcHRzL2NoZWNrLWZvci11cGdyYWRlc1wiO1xuaW1wb3J0IHsgU2hvdWxkUmVsZWFzZVNjcmlwdEZpbGUgfSBmcm9tIFwiLi9zY3JpcHRzL3Nob3VsZC1yZWxlYXNlXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUNyb24sIFNjaGVkdWxlIH0gZnJvbSBcIi4vdXRpbC9yYW5kb20tY3JvblwiO1xuXG4vLyBlbnN1cmUgbmV3IHByb2plY3RzIHN0YXJ0IHdpdGggMS4wLjAgc28gdGhhdCBldmVyeSBmb2xsb3dpbmcgYnJlYWtpbmcgY2hhbmdlIGxlYWRzIHRvIGFuIGluY3JlYXNlZCBtYWpvciB2ZXJzaW9uXG5jb25zdCBNSU5fTUFKT1JfVkVSU0lPTiA9IDE7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrdG5Qcm92aWRlclByb2plY3RPcHRpb25zIGV4dGVuZHMgY2RrLkpzaWlQcm9qZWN0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHVzZUN1c3RvbUdpdGh1YlJ1bm5lcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRlcnJhZm9ybVByb3ZpZGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNka3RmVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBjb25zdHJ1Y3RzVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBmb3JjZU1ham9yVmVyc2lvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiY2RrdG5cIlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogc3RyaW5nO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJjZGt0bi1pb1wiXG4gICAqIHByZXZpb3VzbHkgd2FzIFwiY2RrdGZcIi4gVXNlZCBmb3IgR2l0SHViIG9yZyBuYW1lIGFuZCBwYWNrYWdlIHNjb3BpbmdcbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1Yk5hbWVzcGFjZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbWF2ZW5FbmRwb2ludD86IHN0cmluZztcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiSW8uQ2RrdG5cIlxuICAgKi9cbiAgcmVhZG9ubHkgbnVnZXRPcmc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcImNka3RuXCJcbiAgICovXG4gIHJlYWRvbmx5IG1hdmVuT3JnPzogc3RyaW5nO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJpby4ke21hdmVuT3JnfVwiXG4gICAqL1xuICByZWFkb25seSBtYXZlbkdyb3VwSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgeWVhciBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHJlcG9zaXRvcnksIGZvciBjb3B5cmlnaHQgcHVycG9zZXMuXG4gICAqIFdpbGwgZmFsbCBiYWNrIHRvIHRoZSBjdXJyZW50IHllYXIgaWYgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0aW9uWWVhcj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgcHJlYnVpbHQgcHJvdmlkZXIgaXMgZGVwcmVjYXRlZC5cbiAgICogSWYgdHJ1ZSwgbm8gbmV3IHZlcnNpb25zIHdpbGwgYmUgcHVibGlzaGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNEZXByZWNhdGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIGRhdGUgd2hlbiB0aGUgcHJvamVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBkZXByZWNhdGVkLCB0byBiZSB1c2VkIGluIHRoZSBSRUFETUUgdGV4dC5cbiAgICogSWYgbm8gZGF0ZSBpcyBwcm92aWRlZCwgdGhlbiB0aGUgZGF0ZSBvZiB0aGUgYnVpbGQgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBkZXByZWNhdGlvbkRhdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcIkhhc2hpQ29ycCwgSW5jLlwiXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlZT86IHN0cmluZztcbn1cblxuY29uc3QgZ2V0TWF2ZW5OYW1lID0gKHByb3ZpZGVyTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIFtcIm51bGxcIiwgXCJyYW5kb21cIl0uaW5jbHVkZXMocHJvdmlkZXJOYW1lKVxuICAgID8gYCR7cHJvdmlkZXJOYW1lfV9wcm92aWRlcmBcbiAgICA6IHByb3ZpZGVyTmFtZS5yZXBsYWNlKC8tL2dpLCBcIl9cIik7XG59O1xuXG5jb25zdCBnaXRodWJBY3Rpb25QaW5uZWRWZXJzaW9ucyA9IHtcbiAgXCJhY3Rpb25zL2NoZWNrb3V0XCI6IFwiMTFiZDcxOTAxYmJlNWIxNjMwY2VlYTczZDI3NTk3MzY0YzlhZjY4M1wiLCAvLyB2NC4yLjJcbiAgXCJhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0XCI6IFwiOTU4MTVjMzhjZjJmZjIxNjQ4NjljYmFiNzlkYThkMWY0MjJiYzg5ZVwiLCAvLyB2NC4yLjFcbiAgXCJhY3Rpb25zL2dpdGh1Yi1zY3JpcHRcIjogXCI2MGEwZDgzMDM5Yzc0YTRhZWU1NDM1MDhkMmZmY2IxYzM3OTljZGVhXCIsIC8vIHY3LjAuMVxuICBcImFjdGlvbnMvc2V0dXAtZG90bmV0XCI6IFwiNjdhMzU3M2M5YTk4NmEzZjljNTk0NTM5ZjRhYjUxMWQ1N2JiM2NlOVwiLCAvLyB2NC4zLjFcbiAgXCJhY3Rpb25zL3NldHVwLWdvXCI6IFwiMGFhY2NmZDE1MGQ1MGNjYWViNThlYmQ4OGQzNmU5MTk2N2E1ZjM1YlwiLCAvLyB2NS40LjBcbiAgXCJhY3Rpb25zL3NldHVwLWphdmFcIjogXCIzYTRmNmUxYWY1MDRjZjZhMzE4NTVmYTg5OWM2YWE1MzU1YmE2YzEyXCIsIC8vIHY0LjcuMFxuICBcImFjdGlvbnMvc2V0dXAtbm9kZVwiOiBcImNkY2E3MzY1YjJkYWRiOGFhZDBhMzNiYzc2MDE4NTZmZmFiY2M0OGVcIiwgLy8gdjQuMy4wXG4gIFwiYWN0aW9ucy9zZXR1cC1weXRob25cIjogXCI0MjM3NTUyNGUyM2M0MTJkOTNmYjY3YjQ5OTU4YjQ5MWZjZTcxYzM4XCIsIC8vIHY1LjQuMFxuICBcImFjdGlvbnMvc3RhbGVcIjogXCI1YmVmNjRmMTlkN2ZhY2ZiMjViMzdiNDE0NDgyYzcxNjRkNjM5NjM5XCIsIC8vIHY5LjEuMFxuICBcImFjdGlvbnMvdXBsb2FkLWFydGlmYWN0XCI6IFwiZWExNjVmOGQ2NWI2ZTc1YjU0MDQ0OWU5MmI0ODg2ZjQzNjA3ZmEwMlwiLCAvLyB2NC42LjJcbiAgXCJhbWFubm4vYWN0aW9uLXNlbWFudGljLXB1bGwtcmVxdWVzdFwiOlxuICAgIFwiMDcyMzM4N2ZhYWY5YjM4YWRlZjQ3NzVjZDQyY2ZkNTE1NWVkNjAxN1wiLCAvLyB2NS41LjNcbiAgXCJkZXNzYW50L2xvY2stdGhyZWFkc1wiOiBcIjFiZjdlYzI1MDUxZmU3YzAwYmRkMTdlNmE3Y2YzZDdiZmI3ZGM3NzFcIiwgLy8gdjUuMC4xXG4gIFwiaGFzaGljb3JwL3NldHVwLWNvcHl3cml0ZVwiOiBcIjMyNjM4ZGEyZDRlODFkNTZhMDc2NGFhMTU0Nzg4MmZjNGQyMDk2MzZcIiwgLy8gdjEuMS4zXG4gIFwiaGFzaGljb3JwL3NldHVwLXRlcnJhZm9ybVwiOiBcImI5Y2Q1NGEzYzM0OWQzZjM4ZTg4ODE1NTVkNjE2Y2VkMjY5ODYyZGRcIiwgLy8gdjMuMS4yXG4gIFwiaW1qb2huYm8vaXNzdWUtYm90XCI6IFwiNTcyZWVkMTQ0MjJjNGQ2Y2EzN2U4NzBmOTdlN2RhMjA5NDIyZjViZFwiLCAvLyB2My40LjRcbiAgXCJwZXRlci1ldmFucy9jcmVhdGUtcHVsbC1yZXF1ZXN0XCI6IFwiMjcxYThkMDM0MDI2NWY3MDViMTRiNmQzMmI5ODI5YzFjYjMzZDQ1ZVwiLCAvLyB2Ny4wLjhcbiAgXCJzbGFja2FwaS9zbGFjay1naXRodWItYWN0aW9uXCI6IFwiNDg1YTlkNDJkM2E3MzAzMWYxMmVjMjAxYzQ1N2UyMTYyYzQ1ZDAyZFwiLCAvLyB2Mi4wLjBcbn07XG5cbmV4cG9ydCBjbGFzcyBDZGt0blByb3ZpZGVyUHJvamVjdCBleHRlbmRzIGNkay5Kc2lpUHJvamVjdCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENka3RuUHJvdmlkZXJQcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHRlcnJhZm9ybVByb3ZpZGVyLFxuICAgICAgd29ya2Zsb3dDb250YWluZXJJbWFnZSxcbiAgICAgIGNka3RmVmVyc2lvbixcbiAgICAgIGNvbnN0cnVjdHNWZXJzaW9uLFxuICAgICAgbWluTm9kZVZlcnNpb24sXG4gICAgICBqc2lpVmVyc2lvbixcbiAgICAgIHR5cGVzY3JpcHRWZXJzaW9uLFxuICAgICAgaXNEZXByZWNhdGVkLFxuICAgICAgZGVwcmVjYXRpb25EYXRlLFxuICAgICAgLy8gVE9ETzogQ29uZmlybSBkZWZhdWx0IEF1dGhvciBOYW1lXG4gICAgICBhdXRob3JOYW1lID0gXCJDREsgVGVycmFpbiBNYWludGFpbmVyc1wiLFxuICAgICAgYXV0aG9yQWRkcmVzcyA9IFwiaHR0cHM6Ly9jZGt0bi5pb1wiLFxuICAgICAgbmFtZXNwYWNlID0gXCJjZGt0blwiLFxuICAgICAgZ2l0aHViTmFtZXNwYWNlID0gXCJjZGt0bi1pb1wiLFxuICAgICAgbWF2ZW5FbmRwb2ludCA9IFwiaHR0cHM6Ly9jZW50cmFsLnNvbmF0eXBlLmNvbVwiLCAvLyBUT0RPXG4gICAgICBudWdldE9yZyA9IFwiSW8uQ2RrdG5cIiwgLy8gVE9ET1xuICAgICAgbWF2ZW5PcmcgPSBcIklvLkNka3RuXCIsIC8vIFRPRE9cbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IFtmcXByb3ZpZGVyTmFtZSwgcHJvdmlkZXJWZXJzaW9uXSA9IHRlcnJhZm9ybVByb3ZpZGVyLnNwbGl0KFwiQFwiKTtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBmcXByb3ZpZGVyTmFtZS5zcGxpdChcIi9cIikucG9wKCk7XG4gICAgYXNzZXJ0KHByb3ZpZGVyTmFtZSwgYCR7dGVycmFmb3JtUHJvdmlkZXJ9IGRvZXNuJ3Qgc2VlbSB0byBiZSB2YWxpZGApO1xuICAgIGFzc2VydChcbiAgICAgICFwcm92aWRlck5hbWUuZW5kc1dpdGgoXCItZ29cIiksXG4gICAgICBcInByb3ZpZGVyTmFtZSBtYXkgbm90IGVuZCB3aXRoICctZ28nIGFzIHRoaXMgY2FuIGNvbmZsaWN0IHdpdGggcmVwb3MgZm9yIGdvIHBhY2thZ2VzXCJcbiAgICApO1xuXG4gICAgY29uc3QgbnVnZXROYW1lID0gYCR7bnVnZXRPcmd9LiR7cGFzY2FsQ2FzZShcbiAgICAgIG5hbWVzcGFjZVxuICAgICl9LlByb3ZpZGVycy4ke3Bhc2NhbENhc2UocHJvdmlkZXJOYW1lKX1gO1xuICAgIGNvbnN0IG1hdmVuR3JvdXBJZCA9IG9wdGlvbnMubWF2ZW5Hcm91cElkID8/IGBjb20uJHttYXZlbk9yZ31gO1xuICAgIGNvbnN0IG1hdmVuTmFtZSA9IGAke21hdmVuR3JvdXBJZH0uJHtuYW1lc3BhY2V9LnByb3ZpZGVycy4ke2dldE1hdmVuTmFtZShcbiAgICAgIHByb3ZpZGVyTmFtZVxuICAgICl9YDtcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gYCR7Z2l0aHViTmFtZXNwYWNlfS8ke25hbWVzcGFjZX0tcHJvdmlkZXItJHtwcm92aWRlck5hbWUucmVwbGFjZShcbiAgICAgIC8tL2csXG4gICAgICBcIlwiXG4gICAgKX1gO1xuICAgIGNvbnN0IHJlcG9zaXRvcnlVcmwgPSBgZ2l0aHViLmNvbS8ke3JlcG9zaXRvcnl9YDtcblxuICAgIGNvbnN0IHBhY2thZ2VJbmZvOiBQYWNrYWdlSW5mbyA9IHtcbiAgICAgIG5wbToge1xuICAgICAgICBuYW1lOiBgQCR7bmFtZXNwYWNlfS9wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gLFxuICAgICAgfSxcbiAgICAgIHB5dGhvbjoge1xuICAgICAgICAvLyBkaXN0TmFtZTogYCR7Z2l0aHViTmFtZXNwYWNlfS0ke25hbWVzcGFjZX0tcHJvdmlkZXItJHtwcm92aWRlck5hbWUucmVwbGFjZShcbiAgICAgICAgZGlzdE5hbWU6IGAke25hbWVzcGFjZX0tcHJvdmlkZXItJHtwcm92aWRlck5hbWUucmVwbGFjZSgvLS9naSwgXCJfXCIpfWAsXG4gICAgICAgIC8vIG1vZHVsZTogYCR7Z2l0aHViTmFtZXNwYWNlfV8ke25hbWVzcGFjZX1fcHJvdmlkZXJfJHtwcm92aWRlck5hbWUucmVwbGFjZShcbiAgICAgICAgbW9kdWxlOiBgJHtuYW1lc3BhY2V9X3Byb3ZpZGVyXyR7cHJvdmlkZXJOYW1lLnJlcGxhY2UoLy0vZ2ksIFwiX1wiKX1gLFxuICAgICAgfSxcbiAgICAgIHB1Ymxpc2hUb051Z2V0OiB7XG4gICAgICAgIGRvdE5ldE5hbWVzcGFjZTogbnVnZXROYW1lLFxuICAgICAgICBwYWNrYWdlSWQ6IG51Z2V0TmFtZSxcbiAgICAgIH0sXG4gICAgICBwdWJsaXNoVG9NYXZlbjoge1xuICAgICAgICBqYXZhUGFja2FnZTogbWF2ZW5OYW1lLFxuICAgICAgICBtYXZlbkdyb3VwSWQ6IG1hdmVuR3JvdXBJZCxcbiAgICAgICAgbWF2ZW5BcnRpZmFjdElkOiBgJHtuYW1lc3BhY2V9LXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWAsXG4gICAgICAgIG1hdmVuRW5kcG9pbnQsXG4gICAgICB9LFxuICAgICAgcHVibGlzaFRvR286IHtcbiAgICAgICAgbW9kdWxlTmFtZTogYCR7cmVwb3NpdG9yeVVybH0tZ29gLFxuICAgICAgICBnaXRVc2VyRW1haWw6IFwiZ2l0aHViLXRlYW0tY2RrLXRlcnJhaW5AY2RrdG4uaW9cIixcbiAgICAgICAgZ2l0VXNlck5hbWU6IFwidGVhbS1jZGstdGVycmFpblwiLFxuICAgICAgICBwYWNrYWdlTmFtZTogcHJvdmlkZXJOYW1lLnJlcGxhY2UoLy0vZywgXCJcIiksXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIHVzZSB0aGUgY29weXdyaXRlIGFjdGlvbiwgd2UgbmVlZCB0byByZWJ1aWxkIHRoZSBmdWxsIHByZS1wdWJsaXNoIHN0ZXBzIHdvcmtmbG93IHVuZm9ydHVuYXRlbHlcbiAgICAgICAgLy8gSWYgc29tZW9uZSBrbm93cyBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyBtdXRhdGlvbiB3aXRoIG1pbmltYWwgY3VzdG9tIGNvZGUsIHBsZWFzZSBkbyBzb1xuICAgICAgICBwcmVQdWJsaXNoU3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNoZWNrb3V0XCIsXG4gICAgICAgICAgICB1c2VzOiBcImFjdGlvbnMvY2hlY2tvdXRcIixcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgcGF0aDogXCIucmVwb1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW5zdGFsbCBEZXBlbmRlbmNpZXNcIixcbiAgICAgICAgICAgIHJ1bjogXCJjZCAucmVwbyAmJiB5YXJuIGluc3RhbGwgLS1jaGVjay1maWxlcyAtLWZyb3plbi1sb2NrZmlsZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJFeHRyYWN0IGJ1aWxkIGFydGlmYWN0XCIsXG4gICAgICAgICAgICBydW46IFwidGFyIC0tc3RyaXAtY29tcG9uZW50cz0xIC14enZmIGRpc3QvanMvKi50Z3ogLUMgLnJlcG9cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiTW92ZSBidWlsZCBhcnRpZmFjdCBvdXQgb2YgdGhlIHdheVwiLFxuICAgICAgICAgICAgcnVuOiBcIm12IGRpc3QgZGlzdC5vbGRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ3JlYXRlIGdvIGFydGlmYWN0XCIsXG4gICAgICAgICAgICBydW46IFwiY2QgLnJlcG8gJiYgbnB4IHByb2plbiBwYWNrYWdlOmdvXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIlNldHVwIENvcHl3cml0ZSB0b29sXCIsXG4gICAgICAgICAgICB1c2VzOiBcImhhc2hpY29ycC9zZXR1cC1jb3B5d3JpdGVcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBjb3B5d3JpdGUgaGNsIGZpbGVcIixcbiAgICAgICAgICAgIHJ1bjogXCJjcCAucmVwby8uY29weXdyaXRlLmhjbCAucmVwby9kaXN0L2dvLy5jb3B5d3JpdGUuaGNsXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkFkZCBoZWFkZXJzIHVzaW5nIENvcHl3cml0ZSB0b29sXCIsXG4gICAgICAgICAgICBydW46IFwiY2QgLnJlcG8vZGlzdC9nbyAmJiBjb3B5d3JpdGUgaGVhZGVyc1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJSZW1vdmUgY29weXdyaXRlIGhjbCBmaWxlXCIsXG4gICAgICAgICAgICBydW46IFwicm0gLWYgLnJlcG8vZGlzdC9nby8uY29weXdyaXRlLmhjbFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJSZW1vdmUgc29tZSB0ZXh0IGZyb20gdGhlIFJFQURNRSB0aGF0IGRvZXNuJ3QgYXBwbHkgdG8gR29cIixcbiAgICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgICBcInNlZCAtaSAncy8jIENES1RGIHByZWJ1aWx0IGJpbmRpbmdzIGZvci8jIENES1RGIEdvIGJpbmRpbmdzIGZvci8nIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRcIixcbiAgICAgICAgICAgICAgLy8gQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk1MTE5NDlcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXG4gICAgICAgICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICAgICAgICBgc2VkIC1pIC1lICcvIyMgJHtpc0RlcHJlY2F0ZWQgPyBcIkRlcHJlY2F0ZWRcIiA6IFwiQXZhaWxhYmxlXCJ9IFBhY2thZ2VzLywvIyMjIEdvLyFiJyAtZSAnLyMjIyBHby8hZDtwOyBzLyMjIyBHby8jIyBHbyBQYWNrYWdlLycgLWUgJ2QnIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRgLFxuICAgICAgICAgICAgICAvLyBzZWQgLWUgaXMgYmxhY2sgbWFnaWMgYW5kIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIHN0cmluZyByZXBsYWNlIGRvZXNuJ3Qgd29yayBzbyBsZXQncyB0cnkgaXQgYWdhaW46XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuICAgICAgICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgICAgYHNlZCAtaSAncy8jIyMgR28vIyMgJHtpc0RlcHJlY2F0ZWQgPyBcIkRlcHJlY2F0ZWRcIiA6IFwiR29cIn0gUGFja2FnZS8nIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRgLFxuICAgICAgICAgICAgICAvLyBKdXN0IHN0cmFpZ2h0IHVwIGRlbGV0ZSB0aGVzZSBmdWxsIGxpbmVzIGFuZCBldmVyeXRoaW5nIGluIGJldHdlZW4gdGhlbTpcbiAgICAgICAgICAgICAgXCJzZWQgLWkgLWUgJy9BUEkudHlwZXNjcmlwdC5tZC8sL1lvdSBjYW4gYWxzbyB2aXNpdCBhIGhvc3RlZCB2ZXJzaW9uLyFiJyAtZSAnZCcgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZFwiLFxuICAgICAgICAgICAgICBgc2VkIC1pICdzfEZpbmQgYXV0by1nZW5lcmF0ZWQgZG9jcyBmb3IgdGhpcyBwcm92aWRlciBoZXJlOnxGaW5kIGF1dG8tZ2VuZXJhdGVkIGRvY3MgZm9yIHRoaXMgcHJvdmlkZXIgW2hlcmVdKGh0dHBzOi8vJHtyZXBvc2l0b3J5VXJsfS9ibG9iL21haW4vZG9jcy9BUEkuZ28ubWQpLnwnIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRgLFxuICAgICAgICAgICAgICAvLyBKdXN0IHN0cmFpZ2h0IHVwIGRlbGV0ZSB0aGVzZSBmdWxsIGxpbmVzIGFuZCBldmVyeXRoaW5nIGluIGJldHdlZW4gdGhlbTpcbiAgICAgICAgICAgICAgXCJzZWQgLWkgLWUgJy8jIyMgUHJvdmlkZXIgVmVyc2lvbi8sL1RoZSBwcm92aWRlciB2ZXJzaW9uIGNhbiBiZSBhZGp1c3RlZC8hYicgLWUgJ2QnIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRcIixcbiAgICAgICAgICAgIF0uam9pbihcIlxcblwiKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSB0aGUgUkVBRE1FIGZpbGUgdG8gdGhlIHBhcmVudCBkaXJlY3RvcnlcIixcbiAgICAgICAgICAgIHJ1bjogXCJjcCAucmVwby9kaXN0L2dvLyovUkVBRE1FLm1kIC5yZXBvL2Rpc3QvZ28vUkVBRE1FLm1kXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNvbGxlY3QgZ28gQXJ0aWZhY3RcIixcbiAgICAgICAgICAgIHJ1bjogXCJtdiAucmVwby9kaXN0IGRpc3RcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3Qgd29ya2Zsb3dSdW5zT24gPSBvcHRpb25zLnVzZUN1c3RvbUdpdGh1YlJ1bm5lclxuICAgICAgPyBbXCJjdXN0b20tbGludXgtbWVkaXVtXCJdIC8vIDggY29yZSwgMzIgR0JcbiAgICAgIDogW1widWJ1bnR1LWxhdGVzdFwiXTsgLy8gNyBHQlxuXG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGF1dGhvckFkZHJlc3MsXG4gICAgICBhdXRob3JOYW1lLFxuICAgICAgbWluTm9kZVZlcnNpb24sXG4gICAgICB3b3JrZmxvd0NvbnRhaW5lckltYWdlLFxuICAgICAgd29ya2Zsb3dSdW5zT24sXG4gICAgICBsaWNlbnNlZDogZmFsc2UsIC8vIHdlIGRvIHN1cHBseSBvdXIgb3duIGxpY2Vuc2UgZmlsZSB3aXRoIGEgY3VzdG9tIGhlYWRlclxuICAgICAgcmVsZWFzZVRvTnBtOiB0cnVlLFxuICAgICAgbmFtZTogcGFja2FnZUluZm8ubnBtLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFByZWJ1aWx0ICR7cHJvdmlkZXJOYW1lfSBQcm92aWRlciBmb3IgVGVycmFmb3JtIENESyAoY2RrdGYpYCxcbiAgICAgIGtleXdvcmRzOiBbXCJjZGt0ZlwiLCBcInRlcnJhZm9ybVwiLCBcImNka1wiLCBcInByb3ZpZGVyXCIsIHByb3ZpZGVyTmFtZV0sXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIGplc3Q6IGZhbHNlLFxuICAgICAgYXV0aG9yT3JnYW5pemF0aW9uOiB0cnVlLFxuICAgICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IFwibWFpblwiLFxuICAgICAgcmVwb3NpdG9yeTogYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3JlcG9zaXRvcnl9LmdpdGAsXG4gICAgICBtZXJnaWZ5OiBmYWxzZSxcbiAgICAgIGVzbGludDogZmFsc2UsXG4gICAgICBkZXBzVXBncmFkZTogIWlzRGVwcmVjYXRlZCxcbiAgICAgIGRlcHNVcGdyYWRlT3B0aW9uczoge1xuICAgICAgICB3b3JrZmxvd09wdGlvbnM6IHtcbiAgICAgICAgICBsYWJlbHM6IFtcImF1dG9tZXJnZVwiLCBcImF1dG8tYXBwcm92ZVwiLCBcImRlcGVuZGVuY2llc1wiXSxcbiAgICAgICAgICBzY2hlZHVsZTogVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlLldFRUtMWSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBweXRob246IHBhY2thZ2VJbmZvLnB5dGhvbixcbiAgICAgIC8vIFRPRE86IFJlLWVuYWJsZSBpZiByZXF1ZXN0ZWQgYW5kIHdoZW4gYXZhaWxhYmxlXG4gICAgICAvLyBwdWJsaXNoVG9OdWdldDogcGFja2FnZUluZm8ucHVibGlzaFRvTnVnZXQsXG4gICAgICAvLyBwdWJsaXNoVG9NYXZlbjogcGFja2FnZUluZm8ucHVibGlzaFRvTWF2ZW4sXG4gICAgICBwdWJsaXNoVG9HbzogcGFja2FnZUluZm8ucHVibGlzaFRvR28sXG4gICAgICByZWxlYXNlRmFpbHVyZUlzc3VlOiB0cnVlLFxuICAgICAgcGVlckRlcGVuZGVuY3lPcHRpb25zOiB7XG4gICAgICAgIHBpbm5lZERldkRlcGVuZGVuY3k6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHdvcmtmbG93R2l0SWRlbnRpdHk6IHtcbiAgICAgICAgbmFtZTogXCJ0ZWFtLWNkay10ZXJyYWluXCIsXG4gICAgICAgIGVtYWlsOiBcImdpdGh1Yi10ZWFtLWNkay10ZXJyYWluQGNka3RuLmlvXCIsXG4gICAgICB9LFxuICAgICAgbWluTWFqb3JWZXJzaW9uOiBNSU5fTUFKT1JfVkVSU0lPTixcbiAgICAgIHN0YWxlOiB0cnVlLFxuICAgICAgc3RhbGVPcHRpb25zOiB7XG4gICAgICAgIGlzc3Vlczoge1xuICAgICAgICAgIHN0YWxlTGFiZWw6IFwic3RhbGVcIixcbiAgICAgICAgICBkYXlzQmVmb3JlU3RhbGU6IDQ1LFxuICAgICAgICAgIHN0YWxlTWVzc2FnZTpcbiAgICAgICAgICAgIFwiNDUgZGF5cyBoYXZlIHBhc3NlZCBzaW5jZSB0aGlzIGlzc3VlIHdhcyBvcGVuZWQsIGFuZCBJIGFzc3VtZSBvdGhlciBwdWJsaXNoZXMgaGF2ZSBzdWNjZWVkZWQgaW4gdGhlIG1lYW50aW1lLiBcIiArXG4gICAgICAgICAgICBcIklmIG5vIG9uZSByZW1vdmVzIHRoZSBgc3RhbGVgIGxhYmVsIG9yIGNvbW1lbnRzLCBJJ20gZ29pbmcgdG8gYXV0by1jbG9zZSB0aGlzIGlzc3VlIGluIDE0IGRheXMuXCIsXG4gICAgICAgICAgZGF5c0JlZm9yZUNsb3NlOiAxNCxcbiAgICAgICAgICBjbG9zZU1lc3NhZ2U6XG4gICAgICAgICAgICBcIjIgbW9udGhzIGhhdmUgcGFzc2VkLCBzbyBJJ20gY2xvc2luZyB0aGlzIGlzc3VlIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBvdGhlciBwdWJsaXNoZXMgaGF2ZSBzdWNjZWVkZWQgaW4gdGhlIG1lYW50aW1lLlwiLFxuICAgICAgICB9LFxuICAgICAgICBwdWxsUmVxdWVzdDoge1xuICAgICAgICAgIHN0YWxlTGFiZWw6IFwic3RhbGVcIixcbiAgICAgICAgICBkYXlzQmVmb3JlU3RhbGU6IDEsXG4gICAgICAgICAgc3RhbGVNZXNzYWdlOiBgQ2xvc2luZyB0aGlzIFBSLCBpZiBpdCBoYXMgbm90IG1lcmdlZCB0aGVyZSBpcyBtb3N0IGxpa2VseSBhIENJIG9yIENES1RGIGlzc3VlIHByZXZlbnRpbmcgaXQgZnJvbSBtZXJnaW5nLiBJZiB0aGlzIGhhcyBiZWVuIGEgbWFudWFsIFBSLCBwbGVhc2UgcmVvcGVuIGl0IGFuZCBhZGQgdGhlIFxcYG5vLWF1dG8tY2xvc2VcXGAgbGFiZWwgdG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGFnYWluLmAsXG4gICAgICAgICAgZGF5c0JlZm9yZUNsb3NlOiAwLFxuICAgICAgICAgIGV4ZW1wdExhYmVsczogW1wibm8tYXV0by1jbG9zZVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwdWxsUmVxdWVzdFRlbXBsYXRlOiBmYWxzZSxcbiAgICAgIGRvY2dlbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZERldkRlcHMoXG4gICAgICBcImRvdC1wcm9wQF41LjIuMFwiLFxuICAgICAgXCJAYWN0aW9ucy9jb3JlQF4xLjEuMFwiLFxuICAgICAgXCJAYWN0aW9uLXZhbGlkYXRvci9jb3JlXCIsXG4gICAgICBcIkBhY3Rpb24tdmFsaWRhdG9yL2NsaVwiXG4gICAgKTtcblxuICAgIC8vIERlZmF1bHQgbWVtb3J5IGlzIDdHQjogaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy91c2luZy1naXRodWItaG9zdGVkLXJ1bm5lcnMvYWJvdXQtZ2l0aHViLWhvc3RlZC1ydW5uZXJzI3N1cHBvcnRlZC1ydW5uZXJzLWFuZC1oYXJkd2FyZS1yZXNvdXJjZXNcbiAgICAvLyBDdXN0b20gUnVubmVycyB3ZSB1c2UgaGF2ZSAzMkdCIG9mIG1lbW9yeVxuICAgIC8vIFRoZSBiZWxvdyBudW1iZXJzIHNldCBoZWFwIGxpbWl0cyB0aGF0IGFyZSB+MWdiIGFuZCB+MC41Z2IgbGVzcywgcmVzcGVjdGl2ZWx5LCB0aGFuIHRoZSB0b3RhbCBhdmFpbGFibGUgbWVtb3J5XG4gICAgY29uc3QgbWF4T2xkU3BhY2VTaXplID0gb3B0aW9ucy51c2VDdXN0b21HaXRodWJSdW5uZXIgPyBcIjMxNzQ0XCIgOiBcIjY2NTZcIjtcblxuICAgIC8vIEdvbGFuZyBuZWVkcyBtb3JlIG1lbW9yeSB0byBidWlsZFxuICAgIHRoaXMudGFza3MuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIk5PREVfT1BUSU9OU1wiLFxuICAgICAgYC0tbWF4LW9sZC1zcGFjZS1zaXplPSR7bWF4T2xkU3BhY2VTaXplfWBcbiAgICApO1xuXG4gICAgdGhpcy50YXNrcy5hZGRFbnZpcm9ubWVudChcIkNIRUNLUE9JTlRfRElTQUJMRVwiLCBcIjFcIik7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRhc2sgPSB0aGlzLmFkZFRhc2soXCJ2YWxpZGF0ZS13b3JrZmxvd3NcIiwge1xuICAgICAgZXhlYzogYGZpbmQgLi8uZ2l0aHViL3dvcmtmbG93cyAtdHlwZSBmIC1uYW1lIFwiKi55bWxcIiAtcHJpbnQwIHwgeGFyZ3MgLTAgLW4gMSBucHggYWN0aW9uLXZhbGlkYXRvcmAsXG4gICAgfSk7XG4gICAgdmFsaWRhdGVUYXNrLmRlc2NyaXB0aW9uID1cbiAgICAgIFwiTGludCB0aGUgWUFNTCBmaWxlcyBnZW5lcmF0ZWQgYnkgUHJvamVuIHRvIGRlZmluZSBHaXRIdWIgQWN0aW9ucyBhbmQgV29ya2Zsb3dzLCBjaGVja2luZyB0aGVtIGFnYWluc3QgcHVibGlzaGVkIEpTT04gc2NoZW1hc1wiO1xuICAgIHRoaXMucG9zdENvbXBpbGVUYXNrLnNwYXduKHZhbGlkYXRlVGFzayk7XG5cbiAgICB0aGlzLnBhY2thZ2UuYWRkUGFja2FnZVJlc29sdXRpb25zKFwiQHR5cGVzL3lhcmdzQDE3LjAuMTNcIik7XG5cbiAgICBjb25zdCBzZXRTYWZlRGlyZWN0b3J5ID0ge1xuICAgICAgbmFtZTogXCJTZXQgZ2l0IGNvbmZpZyBzYWZlLmRpcmVjdG9yeVwiLFxuICAgICAgcnVuOiBcImdpdCBjb25maWcgLS1nbG9iYWwgLS1hZGQgc2FmZS5kaXJlY3RvcnkgJChwd2QpXCIsXG4gICAgfTtcblxuICAgICgodGhpcy5idWlsZFdvcmtmbG93IGFzIGFueSkucHJlQnVpbGRTdGVwcyBhcyBKb2JTdGVwW10pLnB1c2goXG4gICAgICBzZXRTYWZlRGlyZWN0b3J5XG4gICAgKTtcbiAgICAodGhpcy5yZWxlYXNlIGFzIGFueSkuZGVmYXVsdEJyYW5jaC53b3JrZmxvdy5qb2JzLnJlbGVhc2Uuc3RlcHMuc3BsaWNlKFxuICAgICAgMSxcbiAgICAgIDAsXG4gICAgICBzZXRTYWZlRGlyZWN0b3J5XG4gICAgKTtcblxuICAgIC8vIGFsd2F5cyBwdWJsaXNoIGEgbmV3IEdpdEh1YiByZWxlYXNlLCBldmVuIHdoZW4gcHVibGlzaGluZyB0byBhIHBhcnRpY3VsYXIgcGFja2FnZSBtYW5hZ2VyIGZhaWxzXG4gICAgY29uc3QgcmVsZWFzZVdvcmtmbG93ID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZShcbiAgICAgIFwiLmdpdGh1Yi93b3JrZmxvd3MvcmVsZWFzZS55bWxcIlxuICAgICk7XG4gICAgcmVsZWFzZVdvcmtmbG93Py5hZGRPdmVycmlkZShcImpvYnMucmVsZWFzZV9naXRodWIubmVlZHNcIiwgXCJyZWxlYXNlXCIpO1xuXG4gICAgLy8gZW5zdXJlIHdlIGRvbid0IGZhaWwgaWYgdGhlIHJlbGVhc2UgZmlsZSBpcyBub3QgcHJlc2VudFxuICAgIGNvbnN0IGNoZWNrRXhpc3RpbmdUYWdTdGVwID0gKFxuICAgICAgdGhpcy5yZWxlYXNlIGFzIGFueVxuICAgICkuZGVmYXVsdEJyYW5jaC53b3JrZmxvdy5qb2JzLnJlbGVhc2Uuc3RlcHMuZmluZChcbiAgICAgIChzOiBvYmplY3QpID0+IFwiaWRcIiBpbiBzICYmIHMuaWQgPT09IFwiY2hlY2tfdGFnX2V4aXN0c1wiXG4gICAgKTtcbiAgICBjb25zdCBvbGRFeGlzdGluZ1RhZ1J1bjogc3RyaW5nID0gY2hlY2tFeGlzdGluZ1RhZ1N0ZXAucnVuO1xuICAgIHByZXR0eUFzc2VydEVxdWFsKFxuICAgICAgb2xkRXhpc3RpbmdUYWdSdW4uc3BsaXQoXCJcXG5cIilbMF0sXG4gICAgICBcIlRBRz0kKGNhdCBkaXN0L3JlbGVhc2V0YWcudHh0KVwiLFxuICAgICAgXCJyZWxlYXNlIHN0ZXAgY2hhbmdlZCwgcGxlYXNlIGNoZWNrIGlmIHRoZSB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzIVwiXG4gICAgKTtcbiAgICBjaGVja0V4aXN0aW5nVGFnU3RlcC5ydW4gPSBgaWYgWyAhIC1mIGRpc3QvcmVsZWFzZXRhZy50eHQgXTsgdGhlbiAoZWNobyBcImV4aXN0cz10cnVlXCIgPj4gJEdJVEhVQl9PVVRQVVQpICYmIGV4aXQgMDsgZmlcXG4ke29sZEV4aXN0aW5nVGFnUnVufWA7XG5cbiAgICBpZiAoIWlzRGVwcmVjYXRlZCkge1xuICAgICAgY29uc3QgeyB1cGdyYWRlLCBwciB9ID0gKHRoaXMudXBncmFkZVdvcmtmbG93IGFzIGFueSkud29ya2Zsb3dzWzBdLmpvYnM7XG4gICAgICB1cGdyYWRlLnN0ZXBzLnNwbGljZSgxLCAwLCBzZXRTYWZlRGlyZWN0b3J5KTtcbiAgICAgIHByLnN0ZXBzLnNwbGljZSgxLCAwLCBzZXRTYWZlRGlyZWN0b3J5KTtcbiAgICB9XG5cbiAgICAvLyAvLyBUT0RPOiBSZS1lbmFibGUgd2hlbiBNYXZlbiByZXF1ZXN0ZWQgYW5kIGluZnJhIGF2YWlsYWJsZVxuICAgIC8vIC8vIEZpeCBtYXZlbiBpc3N1ZSAoaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvcHVibGliL3B1bGwvNzc3KVxuICAgIC8vIGdpdGh1Yi5HaXRIdWIub2YodGhpcyk/LnRyeUZpbmRXb3JrZmxvdyhcInJlbGVhc2VcIik/LmZpbGU/LnBhdGNoKFxuICAgIC8vICAgSnNvblBhdGNoLmFkZChcbiAgICAvLyAgICAgXCIvam9icy9yZWxlYXNlX21hdmVuL3N0ZXBzLzEwL2Vudi9NQVZFTl9PUFRTXCIsXG4gICAgLy8gICAgIC8vIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MDE1Mzk2Mi9uZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbi1tYXZlbi1kZXBsb3ktZmFpbGVkLWFuLWFwaS1pbmNvbXBhdGliaWxpdHktd2FzLWVuY29cbiAgICAvLyAgICAgXCItLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS51dGlsPUFMTC1VTk5BTUVEIC0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLmxhbmcucmVmbGVjdD1BTEwtVU5OQU1FRCAtLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS50ZXh0PUFMTC1VTk5BTUVEIC0tYWRkLW9wZW5zPWphdmEuZGVza3RvcC9qYXZhLmF3dC5mb250PUFMTC1VTk5BTUVEXCJcbiAgICAvLyAgIClcbiAgICAvLyApO1xuXG4gICAgdGhpcy5waW5HaXRodWJBY3Rpb25WZXJzaW9ucyhnaXRodWJBY3Rpb25QaW5uZWRWZXJzaW9ucyk7XG5cbiAgICBuZXcgQ2RrdGZDb25maWcodGhpcywge1xuICAgICAgdGVycmFmb3JtUHJvdmlkZXIsXG4gICAgICBwcm92aWRlck5hbWUsXG4gICAgICBmcXByb3ZpZGVyTmFtZSxcbiAgICAgIHByb3ZpZGVyVmVyc2lvbixcbiAgICAgIGNka3RmVmVyc2lvbixcbiAgICAgIGNvbnN0cnVjdHNWZXJzaW9uLFxuICAgICAganNpaVZlcnNpb24sXG4gICAgICB0eXBlc2NyaXB0VmVyc2lvbixcbiAgICAgIHBhY2thZ2VJbmZvLFxuICAgICAgZ2l0aHViTmFtZXNwYWNlLFxuICAgICAgZGVwcmVjYXRpb25EYXRlLFxuICAgICAgaXNEZXByZWNhdGVkOiAhIWlzRGVwcmVjYXRlZCxcbiAgICB9KTtcbiAgICBuZXcgQ3VzdG9taXplZExpY2Vuc2UodGhpcywgb3B0aW9ucy5jcmVhdGlvblllYXIsIG9wdGlvbnMubGljZW5zZWUpO1xuICAgIG5ldyBHaXRodWJJc3N1ZXModGhpcywgeyBwcm92aWRlck5hbWUgfSk7XG4gICAgbmV3IEF1dG9BcHByb3ZlKHRoaXMpO1xuICAgIG5ldyBBdXRvQ2xvc2VDb21tdW5pdHlJc3N1ZXModGhpcywgeyBwcm92aWRlck5hbWUgfSk7XG4gICAgbmV3IEF1dG9tZXJnZSh0aGlzKTtcbiAgICBuZXcgTG9ja0lzc3Vlcyh0aGlzKTtcblxuICAgIGlmICghaXNEZXByZWNhdGVkKSB7XG4gICAgICBjb25zdCB1cGdyYWRlU2NyaXB0ID0gbmV3IENoZWNrRm9yVXBncmFkZXNTY3JpcHRGaWxlKHRoaXMsIHtcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uLFxuICAgICAgICBmcXByb3ZpZGVyTmFtZSxcbiAgICAgIH0pO1xuICAgICAgbmV3IFByb3ZpZGVyVXBncmFkZSh0aGlzLCB7XG4gICAgICAgIGNoZWNrRm9yVXBncmFkZXNTY3JpcHRQYXRoOiB1cGdyYWRlU2NyaXB0LnBhdGgsXG4gICAgICAgIHdvcmtmbG93UnVuc09uLFxuICAgICAgICBub2RlSGVhcFNpemU6IG1heE9sZFNwYWNlU2l6ZSxcbiAgICAgIH0pO1xuICAgICAgbmV3IEFsZXJ0T3BlblBycyh0aGlzLCB7XG4gICAgICAgIHNsYWNrV2ViaG9va1VybDogXCIke3sgc2VjcmV0cy5BTEVSVF9QUlNfU0xBQ0tfV0VCSE9PS19VUkwgfX1cIixcbiAgICAgICAgcmVwb3NpdG9yeSxcbiAgICAgIH0pO1xuICAgICAgbmV3IERlcGVuZGFib3QodGhpcyk7XG4gICAgfVxuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsIFwiLmdpdGh1Yi9DT0RFT1dORVJTXCIsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgIFwiIyBUaGVzZSBvd25lcnMgd2lsbCBiZSB0aGUgZGVmYXVsdCBvd25lcnMgZm9yIGV2ZXJ5dGhpbmcgaW4gXCIsXG4gICAgICAgIFwiIyB0aGUgcmVwby4gVW5sZXNzIGEgbGF0ZXIgbWF0Y2ggdGFrZXMgcHJlY2VkZW5jZSwgXCIsXG4gICAgICAgIFwiIyB0aGV5IHdpbGwgYmUgcmVxdWVzdGVkIGZvciByZXZpZXcgd2hlbiBzb21lb25lIG9wZW5zIGEgXCIsXG4gICAgICAgIFwiIyBwdWxsIHJlcXVlc3QuXCIsXG4gICAgICAgIFwiKiAgICAgICBAY2RrdG4taW8vdGVhbS1jZGstdGVycmFpblwiLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGlmICghaXNEZXByZWNhdGVkKSB7XG4gICAgICBuZXcgU2hvdWxkUmVsZWFzZVNjcmlwdEZpbGUodGhpcywge30pO1xuXG4gICAgICBjb25zdCByZWxlYXNlVGFzayA9IHRoaXMudGFza3MudHJ5RmluZChcInJlbGVhc2VcIikhO1xuICAgICAgdGhpcy5yZW1vdmVUYXNrKFwicmVsZWFzZVwiKTtcbiAgICAgIHRoaXMuYWRkVGFzayhcInJlbGVhc2VcIiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogcmVsZWFzZVRhc2suZGVzY3JpcHRpb24sXG4gICAgICAgIHN0ZXBzOiByZWxlYXNlVGFzay5zdGVwcyxcbiAgICAgICAgZW52OiAocmVsZWFzZVRhc2sgYXMgYW55KS5fZW52LFxuICAgICAgICBjb25kaXRpb246IFwibm9kZSAuL3NjcmlwdHMvc2hvdWxkLXJlbGVhc2UuanNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRUYXNrKFwidW5jb25kaXRpb25hbC1yZWxlYXNlXCIsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IHJlbGVhc2VUYXNrLmRlc2NyaXB0aW9uLFxuICAgICAgICBzdGVwczogcmVsZWFzZVRhc2suc3RlcHMsXG4gICAgICAgIGVudjogKHJlbGVhc2VUYXNrIGFzIGFueSkuX2VudixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZWxlYXNlSm9iU3RlcHM6IGFueVtdID0gKFxuICAgICAgICB0aGlzLmdpdGh1Yj8udHJ5RmluZFdvcmtmbG93KFwicmVsZWFzZVwiKSBhcyBhbnlcbiAgICAgICkuam9icy5yZWxlYXNlLnN0ZXBzO1xuICAgICAgY29uc3QgZ2l0UmVtb3RlSm9iID0gcmVsZWFzZUpvYlN0ZXBzLmZpbmQoKGl0KSA9PiBpdC5pZCA9PT0gXCJnaXRfcmVtb3RlXCIpO1xuICAgICAgcHJldHR5QXNzZXJ0RXF1YWwoXG4gICAgICAgIGdpdFJlbW90ZUpvYi5ydW4sXG4gICAgICAgICdlY2hvIFwibGF0ZXN0X2NvbW1pdD0kKGdpdCBscy1yZW1vdGUgb3JpZ2luIC1oICR7eyBnaXRodWIucmVmIH19IHwgY3V0IC1mMSlcIiA+PiAkR0lUSFVCX09VVFBVVFxcbmNhdCAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgIFwiZ2l0X3JlbW90ZSBzdGVwIGluIHJlbGVhc2Ugd29ya2Zsb3cgZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBzdHJpbmcsIHBsZWFzZSBjaGVjayBpZiB0aGUgd29ya2Fyb3VuZCBzdGlsbCB3b3JrcyFcIlxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29tbWFuZCA9IGdpdFJlbW90ZUpvYi5ydW4ucmVwbGFjZShcIlxcblwiLCBcIiAmJiBcIik7XG5cbiAgICAgIGNvbnN0IGNhbmNlbENvbW1hbmQgPVxuICAgICAgICAnZWNobyBcImxhdGVzdF9jb21taXQ9cmVsZWFzZV9jYW5jZWxsZWRcIiA+PiAkR0lUSFVCX09VVFBVVCc7IC8vIHRoaXMgY2FuY2VscyB0aGUgcmVsZWFzZSB2aWEgYSBub24tbWF0Y2hpbmcgU0hBO1xuICAgICAgZ2l0UmVtb3RlSm9iLnJ1biA9IGBub2RlIC4vc2NyaXB0cy9zaG91bGQtcmVsZWFzZS5qcyAmJiAoJHtwcmV2aW91c0NvbW1hbmR9KSB8fCAke2NhbmNlbENvbW1hbmR9YDtcbiAgICAgIGdpdFJlbW90ZUpvYi5uYW1lICs9XG4gICAgICAgIFwiIG9yIGNhbmNlbCB2aWEgZmFraW5nIGEgU0hBIGlmIHJlbGVhc2Ugd2FzIGNhbmNlbGxlZFwiO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWxlV29ya2Zsb3cgPSB0aGlzLnRyeUZpbmRPYmplY3RGaWxlKFwiLmdpdGh1Yi93b3JrZmxvd3Mvc3RhbGUueW1sXCIpO1xuICAgIHN0YWxlV29ya2Zsb3c/LmFkZE92ZXJyaWRlKFwib24uc2NoZWR1bGVcIiwgW1xuICAgICAge1xuICAgICAgICBjcm9uOiBnZW5lcmF0ZVJhbmRvbUNyb24oeyBwcm9qZWN0OiB0aGlzLCBtYXhIb3VyOiA0LCBob3VyT2Zmc2V0OiAxIH0pLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGNvbnN0IHVwZ3JhZGVXb3JrZmxvdyA9IHRoaXMudHJ5RmluZE9iamVjdEZpbGUoXG4gICAgICBcIi5naXRodWIvd29ya2Zsb3dzL3VwZ3JhZGUtbWFpbi55bWxcIlxuICAgICk7XG4gICAgdXBncmFkZVdvcmtmbG93Py5hZGRPdmVycmlkZShcIm9uLnNjaGVkdWxlXCIsIFtcbiAgICAgIHtcbiAgICAgICAgY3JvbjogZ2VuZXJhdGVSYW5kb21Dcm9uKHtcbiAgICAgICAgICBwcm9qZWN0OiB0aGlzLFxuICAgICAgICAgIG1heEhvdXI6IDAsXG4gICAgICAgICAgaG91ck9mZnNldDogMSxcbiAgICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUuV2Vla2x5LFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICAvLyBTdWJtb2R1bGUgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uXG4gICAgdGhpcy5naXRpZ25vcmUuZXhjbHVkZShcIkFQSS5tZFwiKTsgLy8gaWdub3JlIHRoZSBvbGQgZmlsZSwgd2Ugbm93IGdlbmVyYXRlIGl0IGluIHRoZSBkb2NzIGZvbGRlclxuICAgIHRoaXMuYWRkRGV2RGVwcyhcImpzaWktZG9jZ2VuQF4xMC4yLjNcIik7XG4gICAgaWYgKGpzaWlWZXJzaW9uKSB7XG4gICAgICAvLyBOT1RFOiB0aGUgYmVsb3cgaXMgbWFraW5nIGEgYnJvYWQgYXNzdW1wdGlvbiB0aGF0IHlvdSdyZSBwYXNzaW5nIGEgcmFuZ2UgbGlrZSBcIn41LjMuMFwiIHRvIGpzaWlWZXJzaW9uXG4gICAgICAvLyBJZiB5b3UgdXNlIHRoYXQgZmllbGQgdG8gcGFzcyBhIHZlcnkgc3BlY2lmaWMgdmVyc2lvbiAoZS5nLiBcIjUuMy4xMVwiKSB0aGVuIHRoaXMgbWlnaHQgYnJlYWtcbiAgICAgIHRoaXMuYWRkRGV2RGVwcyhganNpaS1yb3NldHRhQCR7anNpaVZlcnNpb259YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRGV2RGVwcyhganNpaS1yb3NldHRhYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZG9jZ2VuID0gdGhpcy5hZGRUYXNrKFwiZG9jZ2VuXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkdlbmVyYXRlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBwcm9qZWN0XCIsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXhlYzogW1xuICAgICAgICAgICAgXCJybSAtcmYgZG9jc1wiLFxuICAgICAgICAgICAgXCJybSAtZiBBUEkubWRcIixcbiAgICAgICAgICAgIFwibWtkaXIgZG9jc1wiLFxuICAgICAgICAgICAgLy8gVE9ETzogUmUtZW5hYmxlIGphdmEgLyBjc2hhcnBcbiAgICAgICAgICAgIC8vIFwianNpaS1kb2NnZW4gLS1zcGxpdC1ieS1zdWJtb2R1bGUgLWwgdHlwZXNjcmlwdCAtbCBweXRob24gLWwgamF2YSAtbCBjc2hhcnAgLWwgZ29cIixcbiAgICAgICAgICAgIFwianNpaS1kb2NnZW4gLS1zcGxpdC1ieS1zdWJtb2R1bGUgLWwgdHlwZXNjcmlwdCAtbCBweXRob24gLWwgZ29cIixcbiAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5pY2Ugd2F5IHRvIHRlbGwganNpaS1kb2NnZW4gdG8gZ2VuZXJhdGUgZG9jcyBpbnRvIGEgZm9sZGVyIHNvIEkgd2VudCB0aGlzIHJvdXRlXG4gICAgICAgICAgICBcIm12ICouKi5tZCBkb2NzXCIsXG4gICAgICAgICAgICAvLyBTb21lIHBhcnQgb2YgdGhlIGRvY3VtZW50YXRpb24gYXJlIHRvbyBsb25nLCB3ZSBuZWVkIHRvIHRydW5jYXRlIHRoZW0gdG8gfjEwTUJcbiAgICAgICAgICAgIFwiY2QgZG9jc1wiLFxuICAgICAgICAgICAgXCJscyAuLyB8IHhhcmdzIHNlZCAtaSAnMTUwMDAwLCQgZCcgJDFcIixcbiAgICAgICAgICBdLmpvaW4oXCIgJiYgXCIpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB0aGlzLnBvc3RDb21waWxlVGFzay5zcGF3bihkb2NnZW4pO1xuICAgIHRoaXMuZ2l0aWdub3JlLmluY2x1ZGUoYC9kb2NzLyoubWRgKTtcbiAgICB0aGlzLmFubm90YXRlR2VuZXJhdGVkKGAvZG9jcy8qLm1kYCk7XG5cbiAgICAvLyBTZXR0aW5nIHRoZSB2ZXJzaW9uIGluIHBhY2thZ2UuanNvbiBzbyB0aGUgZ29sYW5nIGRvY3MgaGF2ZSB0aGUgY29ycmVjdCB2ZXJzaW9uXG4gICAgY29uc3QgdW5jb25kaXRpb25hbEJ1bXAgPSB0aGlzLmFkZFRhc2soXCJ1bmNvbmRpdGlvbmFsLWJ1bXBcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiU2V0IHRoZSB2ZXJzaW9uIGluIHBhY2thZ2UuanNvbiB0byB0aGUgY3VycmVudCB2ZXJzaW9uXCIsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJDbGVhciB0aGUgY2hhbmdlbG9nIHNvIHRoYXQgaXQgZG9lc24ndCBnZXQgcHVibGlzaGVkIHR3aWNlXCIsXG4gICAgICAgICAgZXhlYzogXCJybSAtZiAkQ0hBTkdFTE9HXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHsgYnVpbHRpbjogXCJyZWxlYXNlL2J1bXAtdmVyc2lvblwiIH0sXG4gICAgICBdLFxuICAgICAgZW52OiB7XG4gICAgICAgIE9VVEZJTEU6IFwicGFja2FnZS5qc29uXCIsXG4gICAgICAgIENIQU5HRUxPRzogXCJkaXN0L2NoYW5nZWxvZy5tZFwiLFxuICAgICAgICBCVU1QRklMRTogXCJkaXN0L3ZlcnNpb24udHh0XCIsXG4gICAgICAgIFJFTEVBU0VUQUc6IFwiZGlzdC9yZWxlYXNldGFnLnR4dFwiLFxuICAgICAgICBSRUxFQVNFX1RBR19QUkVGSVg6IFwiXCIsXG4gICAgICAgIE1JTl9NQUpPUjogU3RyaW5nKE1JTl9NQUpPUl9WRVJTSU9OKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5wcmVDb21waWxlVGFzay5zcGF3bih1bmNvbmRpdGlvbmFsQnVtcCk7XG4gICAgLy8gVG8gYnVtcCBjb3JyZWN0bHkgd2UgbmVlZCB0byBoYXZlIHRoZSBjb21wbGV0ZWx5IGNsb25lZCByZXBvXG4gICAgKHRoaXMuYnVpbGRXb3JrZmxvdyBhcyBhbnkpLndvcmtmbG93LmZpbGUuYWRkT3ZlcnJpZGUoXG4gICAgICBcImpvYnMuYnVpbGQuc3RlcHMuMC53aXRoLmZldGNoLWRlcHRoXCIsXG4gICAgICAwXG4gICAgKTtcbiAgICAvLyBVbmRvIHRoZSBjaGFuZ2VzIGFmdGVyIGNvbXBpbGF0aW9uXG4gICAgdGhpcy5idWlsZFdvcmtmbG93Py5hZGRQb3N0QnVpbGRTdGVwcyh7XG4gICAgICBuYW1lOiBcIlJldmVydCBwYWNrYWdlLmpzb24gdmVyc2lvbiBidW1wXCIsXG4gICAgICBydW46IFwiZ2l0IGNoZWNrb3V0IHBhY2thZ2UuanNvblwiLFxuICAgIH0pO1xuXG4gICAgbmV3IENvcHlyaWdodEhlYWRlcnModGhpcyk7XG4gICAgbmV3IERlcHJlY2F0ZVBhY2thZ2VzKHRoaXMsIHtcbiAgICAgIHByb3ZpZGVyTmFtZSxcbiAgICAgIHBhY2thZ2VJbmZvLFxuICAgICAgaXNEZXByZWNhdGVkOiAhIWlzRGVwcmVjYXRlZCxcbiAgICB9KTtcbiAgICBpZiAoIWlzRGVwcmVjYXRlZCkge1xuICAgICAgbmV3IEZvcmNlUmVsZWFzZSh0aGlzLCB7IHdvcmtmbG93UnVuc09uIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGluR2l0aHViQWN0aW9uVmVyc2lvbnMocGlubmVkVmVyc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgICAvLyBVc2UgcGlubmVkIHZlcnNpb25zIG9mIGdpdGh1YiBhY3Rpb25zXG4gICAgT2JqZWN0LmVudHJpZXMocGlubmVkVmVyc2lvbnMpLmZvckVhY2goKFtuYW1lLCBzaGFdKSA9PiB7XG4gICAgICB0aGlzLmdpdGh1Yj8uYWN0aW9ucy5zZXQobmFtZSwgYCR7bmFtZX1AJHtzaGF9YCk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJldHR5QXNzZXJ0RXF1YWw8VD4oc3ViamVjdDogVCwgZXhwZWN0ZWQ6IFQsIG1lc3NhZ2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKHN1YmplY3QgIT09IGV4cGVjdGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7bWVzc2FnZSA/PyBcIkFzc2VydGlvbiBmYWlsZWRcIn06IGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGV4cGVjdGVkXG4gICAgICApfSBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoc3ViamVjdCl9YFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+ import { javascript } from "projen";
6
+ /**
7
+ * Automatically locks issues and PRs after 7 days. Note that 90% of the issues and PRs
8
+ * on these repos are automated builds and notifications, so locking these threads is
9
+ * generally not expected to cause issues.
10
+ */
11
+ export declare class LockIssues {
12
+ constructor(project: javascript.NodeProject);
13
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.LockIssues = void 0;
8
+ const workflows_model_1 = require("projen/lib/github/workflows-model");
9
+ const random_cron_1 = require("./util/random-cron");
10
+ /**
11
+ * Automatically locks issues and PRs after 7 days. Note that 90% of the issues and PRs
12
+ * on these repos are automated builds and notifications, so locking these threads is
13
+ * generally not expected to cause issues.
14
+ */
15
+ class LockIssues {
16
+ constructor(project) {
17
+ const workflow = project.github?.addWorkflow("lock");
18
+ if (!workflow)
19
+ throw new Error("no workflow defined");
20
+ workflow.on({
21
+ // run daily sometime between midnight and 6am UTC
22
+ schedule: [{ cron: (0, random_cron_1.generateRandomCron)({ project, maxHour: 6 }) }],
23
+ });
24
+ workflow.addJob("lock", {
25
+ runsOn: ["ubuntu-latest"],
26
+ permissions: {
27
+ pullRequests: workflows_model_1.JobPermission.WRITE,
28
+ issues: workflows_model_1.JobPermission.WRITE,
29
+ },
30
+ steps: [
31
+ {
32
+ uses: "dessant/lock-threads",
33
+ with: {
34
+ "issue-comment": `I'm going to lock this issue because it has been closed for at least 7 days.
35
+ This helps our maintainers find and focus on the active issues.
36
+ If you've found a problem that seems similar to this, please
37
+ [open a new issue](https://github.com/cdktn-io/cdktn-provider-project/issues/new)
38
+ so we can investigate further.`.replace(/\s+/g, " "),
39
+ "issue-inactive-days": 7,
40
+ "pr-comment": `I'm going to lock this pull request because it has been closed for at least 7 days.
41
+ This helps our maintainers find and focus on the active issues.
42
+ If you've found a problem that seems related to this change, please
43
+ [open a new issue](https://github.com/cdktn-io/cdktn-provider-project/issues/new)
44
+ so we can investigate further.`.replace(/\s+/g, " "),
45
+ "pr-inactive-days": 7,
46
+ },
47
+ },
48
+ ],
49
+ continueOnError: true, // this job fails quite frequently due to rate limit issues but it's really not a big deal if it does
50
+ });
51
+ }
52
+ }
53
+ exports.LockIssues = LockIssues;
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jay1pc3N1ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbG9jay1pc3N1ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBR0gsdUVBQWtFO0FBQ2xFLG9EQUF3RDtBQUV4RDs7OztHQUlHO0FBQ0gsTUFBYSxVQUFVO0lBQ3JCLFlBQVksT0FBK0I7UUFDekMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFdEQsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNWLGtEQUFrRDtZQUNsRCxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFBLGdDQUFrQixFQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDbEUsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDdEIsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxZQUFZLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2dCQUNqQyxNQUFNLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2FBQzVCO1lBQ0QsS0FBSyxFQUFFO2dCQUNMO29CQUNFLElBQUksRUFBRSxzQkFBc0I7b0JBQzVCLElBQUksRUFBRTt3QkFDSixlQUFlLEVBQ2I7Ozs7NkNBSStCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7d0JBQ3RELHFCQUFxQixFQUFFLENBQUM7d0JBQ3hCLFlBQVksRUFDVjs7Ozs2Q0FJK0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzt3QkFDdEQsa0JBQWtCLEVBQUUsQ0FBQztxQkFDdEI7aUJBQ0Y7YUFDRjtZQUNELGVBQWUsRUFBRSxJQUFJLEVBQUUscUdBQXFHO1NBQzdILENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXpDRCxnQ0F5Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IGphdmFzY3JpcHQgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21Dcm9uIH0gZnJvbSBcIi4vdXRpbC9yYW5kb20tY3JvblwiO1xuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgbG9ja3MgaXNzdWVzIGFuZCBQUnMgYWZ0ZXIgNyBkYXlzLiBOb3RlIHRoYXQgOTAlIG9mIHRoZSBpc3N1ZXMgYW5kIFBSc1xuICogb24gdGhlc2UgcmVwb3MgYXJlIGF1dG9tYXRlZCBidWlsZHMgYW5kIG5vdGlmaWNhdGlvbnMsIHNvIGxvY2tpbmcgdGhlc2UgdGhyZWFkcyBpc1xuICogZ2VuZXJhbGx5IG5vdCBleHBlY3RlZCB0byBjYXVzZSBpc3N1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NrSXNzdWVzIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogamF2YXNjcmlwdC5Ob2RlUHJvamVjdCkge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gcHJvamVjdC5naXRodWI/LmFkZFdvcmtmbG93KFwibG9ja1wiKTtcblxuICAgIGlmICghd29ya2Zsb3cpIHRocm93IG5ldyBFcnJvcihcIm5vIHdvcmtmbG93IGRlZmluZWRcIik7XG5cbiAgICB3b3JrZmxvdy5vbih7XG4gICAgICAvLyBydW4gZGFpbHkgc29tZXRpbWUgYmV0d2VlbiBtaWRuaWdodCBhbmQgNmFtIFVUQ1xuICAgICAgc2NoZWR1bGU6IFt7IGNyb246IGdlbmVyYXRlUmFuZG9tQ3Jvbih7IHByb2plY3QsIG1heEhvdXI6IDYgfSkgfV0sXG4gICAgfSk7XG5cbiAgICB3b3JrZmxvdy5hZGRKb2IoXCJsb2NrXCIsIHtcbiAgICAgIHJ1bnNPbjogW1widWJ1bnR1LWxhdGVzdFwiXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaXNzdWVzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VzOiBcImRlc3NhbnQvbG9jay10aHJlYWRzXCIsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgXCJpc3N1ZS1jb21tZW50XCI6XG4gICAgICAgICAgICAgIGBJJ20gZ29pbmcgdG8gbG9jayB0aGlzIGlzc3VlIGJlY2F1c2UgaXQgaGFzIGJlZW4gY2xvc2VkIGZvciBhdCBsZWFzdCA3IGRheXMuXG4gICAgICAgICAgICAgIFRoaXMgaGVscHMgb3VyIG1haW50YWluZXJzIGZpbmQgYW5kIGZvY3VzIG9uIHRoZSBhY3RpdmUgaXNzdWVzLlxuICAgICAgICAgICAgICBJZiB5b3UndmUgZm91bmQgYSBwcm9ibGVtIHRoYXQgc2VlbXMgc2ltaWxhciB0byB0aGlzLCBwbGVhc2UgXG4gICAgICAgICAgICAgIFtvcGVuIGEgbmV3IGlzc3VlXShodHRwczovL2dpdGh1Yi5jb20vY2RrdG4taW8vY2RrdG4tcHJvdmlkZXItcHJvamVjdC9pc3N1ZXMvbmV3KSBcbiAgICAgICAgICAgICAgc28gd2UgY2FuIGludmVzdGlnYXRlIGZ1cnRoZXIuYC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKSxcbiAgICAgICAgICAgIFwiaXNzdWUtaW5hY3RpdmUtZGF5c1wiOiA3LFxuICAgICAgICAgICAgXCJwci1jb21tZW50XCI6XG4gICAgICAgICAgICAgIGBJJ20gZ29pbmcgdG8gbG9jayB0aGlzIHB1bGwgcmVxdWVzdCBiZWNhdXNlIGl0IGhhcyBiZWVuIGNsb3NlZCBmb3IgYXQgbGVhc3QgNyBkYXlzLlxuICAgICAgICAgICAgICBUaGlzIGhlbHBzIG91ciBtYWludGFpbmVycyBmaW5kIGFuZCBmb2N1cyBvbiB0aGUgYWN0aXZlIGlzc3Vlcy5cbiAgICAgICAgICAgICAgSWYgeW91J3ZlIGZvdW5kIGEgcHJvYmxlbSB0aGF0IHNlZW1zIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UsIHBsZWFzZSBcbiAgICAgICAgICAgICAgW29wZW4gYSBuZXcgaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9jZGt0bi1pby9jZGt0bi1wcm92aWRlci1wcm9qZWN0L2lzc3Vlcy9uZXcpIFxuICAgICAgICAgICAgICBzbyB3ZSBjYW4gaW52ZXN0aWdhdGUgZnVydGhlci5gLnJlcGxhY2UoL1xccysvZywgXCIgXCIpLFxuICAgICAgICAgICAgXCJwci1pbmFjdGl2ZS1kYXlzXCI6IDcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjb250aW51ZU9uRXJyb3I6IHRydWUsIC8vIHRoaXMgam9iIGZhaWxzIHF1aXRlIGZyZXF1ZW50bHkgZHVlIHRvIHJhdGUgbGltaXQgaXNzdWVzIGJ1dCBpdCdzIHJlYWxseSBub3QgYSBiaWcgZGVhbCBpZiBpdCBkb2VzXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+ import { cdk } from "projen";
6
+ export interface PackageInfo {
7
+ npm: {
8
+ name: string;
9
+ };
10
+ python: NonNullable<cdk.JsiiProjectOptions["python"]>;
11
+ publishToNuget: NonNullable<cdk.JsiiProjectOptions["publishToNuget"]>;
12
+ publishToMaven: NonNullable<cdk.JsiiProjectOptions["publishToMaven"]>;
13
+ publishToGo: cdk.JsiiProjectOptions["publishToGo"];
14
+ }