sonamu 0.9.3 → 0.9.5

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 (99) hide show
  1. package/dist/ai/providers/rtzr/utils.js +2 -2
  2. package/dist/api/config.d.ts +0 -8
  3. package/dist/api/config.d.ts.map +1 -1
  4. package/dist/api/config.js +1 -1
  5. package/dist/api/sonamu.d.ts +0 -1
  6. package/dist/api/sonamu.d.ts.map +1 -1
  7. package/dist/api/sonamu.js +2 -41
  8. package/dist/auth/audit-log/builders.d.ts +216 -0
  9. package/dist/auth/audit-log/builders.d.ts.map +1 -0
  10. package/dist/auth/audit-log/builders.js +307 -0
  11. package/dist/auth/audit-log/events.d.ts +143 -0
  12. package/dist/auth/audit-log/events.d.ts.map +1 -0
  13. package/dist/auth/audit-log/events.js +74 -0
  14. package/dist/auth/audit-log/plugin.d.ts +11 -0
  15. package/dist/auth/audit-log/plugin.d.ts.map +1 -0
  16. package/dist/auth/audit-log/plugin.js +427 -0
  17. package/dist/auth/audit-log-ingestor.d.ts +3 -3
  18. package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
  19. package/dist/auth/audit-log-ingestor.js +44 -50
  20. package/dist/auth/index.d.ts +2 -0
  21. package/dist/auth/index.d.ts.map +1 -1
  22. package/dist/auth/index.js +4 -4
  23. package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
  24. package/dist/auth/plugins/entity-definitions/admin.js +4 -4
  25. package/dist/auth/plugins/entity-definitions/audit-log.d.ts +2 -2
  26. package/dist/auth/plugins/entity-definitions/audit-log.js +3 -3
  27. package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
  28. package/dist/auth/plugins/wrappers/sso.d.ts +1 -1
  29. package/dist/bin/fixture.d.ts.map +1 -1
  30. package/dist/bin/fixture.js +111 -1
  31. package/dist/database/_batch_update.d.ts +1 -1
  32. package/dist/database/_batch_update.js +2 -2
  33. package/dist/database/upsert-builder.js +4 -4
  34. package/dist/dict/sonamu-dictionary.js +2 -2
  35. package/dist/entity/entity-manager.d.ts +2 -2
  36. package/dist/entity/entity-manager.d.ts.map +1 -1
  37. package/dist/entity/entity-manager.js +14 -4
  38. package/dist/index.js +4 -3
  39. package/dist/migration/code-generation.d.ts.map +1 -1
  40. package/dist/migration/code-generation.js +2 -3
  41. package/dist/syncer/syncer.d.ts.map +1 -1
  42. package/dist/syncer/syncer.js +2 -9
  43. package/dist/template/implementations/entry-server.template.js +3 -2
  44. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  45. package/dist/template/implementations/generated.template.js +2 -1
  46. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  47. package/dist/template/implementations/generated_sso.template.js +2 -1
  48. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  49. package/dist/template/implementations/queries.template.js +3 -1
  50. package/dist/template/implementations/sd.template.js +3 -2
  51. package/dist/template/implementations/services.template.d.ts.map +1 -1
  52. package/dist/template/implementations/services.template.js +44 -7
  53. package/dist/template/zod-converter.d.ts.map +1 -1
  54. package/dist/template/zod-converter.js +2 -2
  55. package/dist/testing/data-explorer.d.ts.map +1 -1
  56. package/dist/testing/data-explorer.js +5 -3
  57. package/dist/types/types.d.ts +14 -14
  58. package/dist/ui/api.d.ts.map +1 -1
  59. package/dist/ui/api.js +3 -2
  60. package/dist/ui-web/assets/index-D4rYm-Xz.css +1 -0
  61. package/dist/ui-web/assets/{index-DrTfl0Ts.js → index-DzZ7vBk4.js} +47 -47
  62. package/dist/ui-web/index.html +2 -2
  63. package/dist/utils/fs-utils.d.ts.map +1 -1
  64. package/dist/utils/fs-utils.js +4 -4
  65. package/package.json +4 -5
  66. package/src/ai/providers/rtzr/utils.ts +1 -1
  67. package/src/api/config.ts +0 -8
  68. package/src/api/sonamu.ts +1 -51
  69. package/src/auth/audit-log/builders.ts +791 -0
  70. package/src/auth/audit-log/events.ts +149 -0
  71. package/src/auth/audit-log/plugin.ts +913 -0
  72. package/src/auth/audit-log-ingestor.ts +3 -4
  73. package/src/auth/index.ts +2 -0
  74. package/src/auth/plugins/entity-definitions/admin.ts +3 -3
  75. package/src/auth/plugins/entity-definitions/audit-log.ts +2 -2
  76. package/src/bin/fixture.ts +143 -0
  77. package/src/database/_batch_update.ts +1 -1
  78. package/src/database/upsert-builder.ts +3 -3
  79. package/src/dict/sonamu-dictionary.ts +1 -1
  80. package/src/entity/entity-manager.ts +10 -3
  81. package/src/migration/code-generation.ts +1 -6
  82. package/src/shared/app.shared.ts.txt +60 -6
  83. package/src/shared/web.shared.ts.txt +60 -5
  84. package/src/syncer/syncer.ts +1 -11
  85. package/src/template/implementations/entry-server.template.ts +1 -1
  86. package/src/template/implementations/generated.template.ts +1 -0
  87. package/src/template/implementations/generated_sso.template.ts +1 -0
  88. package/src/template/implementations/queries.template.ts +10 -1
  89. package/src/template/implementations/sd.template.ts +1 -1
  90. package/src/template/implementations/services.template.ts +62 -6
  91. package/src/template/zod-converter.ts +2 -1
  92. package/src/testing/data-explorer.ts +3 -2
  93. package/src/ui/api.ts +10 -1
  94. package/src/utils/fs-utils.ts +6 -4
  95. package/dist/auth/audit-log-proxy-types.d.ts +0 -23
  96. package/dist/auth/audit-log-proxy-types.d.ts.map +0 -1
  97. package/dist/auth/audit-log-proxy-types.js +0 -1
  98. package/dist/ui-web/assets/index-Dr8pRJC_.css +0 -1
  99. package/src/auth/audit-log-proxy-types.ts +0 -23
@@ -68,6 +68,7 @@ ${functions.join("\n\n")}
68
68
  " * @generated",
69
69
  " * 직접 수정하지 마세요.",
70
70
  " */",
71
+ "",
71
72
  "/* oxlint-disable */",
72
73
  "",
73
74
  `import type { SSRQuery } from 'sonamu/ssr';`,
@@ -82,6 +83,7 @@ ${functions.join("\n\n")}
82
83
  " * @generated",
83
84
  " * 직접 수정하지 마세요.",
84
85
  " */",
86
+ "",
85
87
  "/* oxlint-disable */",
86
88
  ""
87
89
  ]
@@ -91,4 +93,4 @@ ${functions.join("\n\n")}
91
93
 
92
94
  //#endregion
93
95
  export { Template__queries };
94
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbIm5hbWVzcGFjZXM6IHN0cmluZ1tdIiwiaW1wb3J0S2V5czogc3RyaW5nW10iLCJ0eXBlUGFyYW1OYW1lczogc3RyaW5nW10iLCJmdW5jdGlvbnM6IHN0cmluZ1tdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9xdWVyaWVzLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBkaWZmLCB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVR5cGVUb1RzVHlwZSB9IGZyb20gXCIuLi8uLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4uLy4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19xdWVyaWVzIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInF1ZXJpZXNcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgcXVlcmllcy5nZW5lcmF0ZWQudHNgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe306IFRlbXBsYXRlT3B0aW9uc1tcInF1ZXJpZXNcIl0pIHtcbiAgICBjb25zdCB7IGFwaXMgfSA9IFNvbmFtdS5zeW5jZXI7XG5cbiAgICAvLyB0YW5zdGFjay1xdWVyeeulvCDtj6ztlajtlZwgQVBJ66eMIO2VhO2EsOungVxuICAgIGNvbnN0IHF1ZXJ5QXBpcyA9IGFwaXMuZmlsdGVyKChhcGkpID0+IGFwaS5vcHRpb25zLmNsaWVudHM/LmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpO1xuXG4gICAgLy8g66qo642467OE66GcIOq3uOujue2ZlFxuICAgIGNvbnN0IGFwaXNCeU1vZGVsID0gbmV3IE1hcDxzdHJpbmcsIEV4dGVuZGVkQXBpW10+KCk7XG4gICAgZm9yIChjb25zdCBhcGkgb2YgcXVlcnlBcGlzKSB7XG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSBhcGkubW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpO1xuICAgICAgaWYgKCFhcGlzQnlNb2RlbC5oYXMobW9kZWxOYW1lKSkge1xuICAgICAgICBhcGlzQnlNb2RlbC5zZXQobW9kZWxOYW1lLCBbXSk7XG4gICAgICB9XG4gICAgICBhcGlzQnlNb2RlbC5nZXQobW9kZWxOYW1lKT8ucHVzaChhcGkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVzcGFjZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgdHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFttb2RlbE5hbWUsIG1vZGVsQXBpc10gb2YgYXBpc0J5TW9kZWwpIHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcGkgb2YgbW9kZWxBcGlzKSB7XG4gICAgICAgIC8vIENvbnRleHQg7KCc7Jm47ZWcIO2MjOudvOuvuO2EsFxuICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsnbTrpoQg7IiY7KeRXG4gICAgICAgIHR5cGVQYXJhbU5hbWVzID0gdHlwZVBhcmFtTmFtZXMuY29uY2F0KGFwaS50eXBlUGFyYW1ldGVycy5tYXAoKHRwKSA9PiB0cC5pZCkpO1xuXG4gICAgICAgIC8vIO2DgOyehSDtjIzrnbzrr7jthLAg7KCV7J2YXG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzQXNUc1R5cGUgPSBhcGkudHlwZVBhcmFtZXRlcnNcbiAgICAgICAgICAubWFwKCh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlUGFyYW0sIGltcG9ydEtleXMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtc0RlZiA9IHR5cGVQYXJhbWV0ZXJzQXNUc1R5cGUgPyBgPCR7dHlwZVBhcmFtZXRlcnNBc1RzVHlwZX0+YCA6IFwiXCI7XG5cbiAgICAgICAgLy8g7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCBwYXJhbXNEZWYgPSBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtc1dpdGhvdXRDb250ZXh0LCBpbXBvcnRLZXlzKTtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gcC5uYW1lKS5qb2luKFwiLCBcIik7XG5cbiAgICAgICAgLy8gc2VydmljZU1ldGhvZE5hbWUg6rOE7IKwIChzZXJ2aWNlcy50ZW1wbGF0ZS50c+yZgCDrj5nsnbztlZwg66Gc7KeBKVxuICAgICAgICBjb25zdCBzZXJ2aWNlTWV0aG9kTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgID8gYGdldCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUpfWBcbiAgICAgICAgICA6IGFwaS5tZXRob2ROYW1lO1xuXG4gICAgICAgIC8vIFNTUlF1ZXJ5IO2VqOyImCDsg53shLEgKO2VqOyImOuqheuPhCBzZXJ2aWNlTWV0aG9kTmFtZSDsgqzsmqkpXG4gICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgIGBcbiAgZXhwb3J0IGNvbnN0ICR7c2VydmljZU1ldGhvZE5hbWV9ID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pOiBTU1JRdWVyeSA9PlxuICAgIGNyZWF0ZVNTUlF1ZXJ5KCcke2FwaS5tb2RlbE5hbWV9JywgJyR7YXBpLm1ldGhvZE5hbWV9JywgWyR7cGFyYW1OYW1lc31dLCBbJyR7bW9kZWxOYW1lfScsICcke3NlcnZpY2VNZXRob2ROYW1lfSddKTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbmFtZXNwYWNlcy5wdXNoKFxuICAgICAgICBgXG5leHBvcnQgbmFtZXNwYWNlICR7bW9kZWxOYW1lfVNlcnZpY2Uge1xuJHtmdW5jdGlvbnMuam9pbihcIlxcblxcblwiKX1cbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0YW5zdGFjay1xdWVyeSBBUEnqsIAg7JeG7Jy866m0IO2XrO2NvCDtlajsiJjsmYAgaW1wb3J066W8IO2PrO2VqO2VmOyngCDslYrsirXri4jri6QuXG4gICAgLy8g7IOIIO2UhOuhnOygne2KuOyXkOyEnCDssqsg67mM65OcIOyLnCBzeW5j6rCAIOyVhOyngSDslYgg65CY7Ja0IG5hbWVzcGFjZeqwgCDruYTslrTsnojsnYQg7IiYIOyeiOqzoCxcbiAgICAvLyDsnbTrlYwgY3JlYXRlU1NSUXVlcnnqsIAgdW51c2Vk66GcIOu5jOuTnCDsl5Drn6zqsIAg67Cc7IOd7ZWY64qUIOqyg+ydhCDrsKnsp4Dtlanri4jri6QuXG4gICAgY29uc3QgaGFzUXVlcmllcyA9IG5hbWVzcGFjZXMubGVuZ3RoID4gMDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IG5hbWVzcGFjZXMuam9pbihcIlxcblxcblwiKSxcbiAgICAgIGltcG9ydEtleXM6IGRpZmYodW5pcXVlKGltcG9ydEtleXMpLCB0eXBlUGFyYW1OYW1lcyksXG4gICAgICBjdXN0b21IZWFkZXJzOiBoYXNRdWVyaWVzXG4gICAgICAgID8gW1xuICAgICAgICAgICAgXCIvKipcIixcbiAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBcIi8qIG94bGludC1kaXNhYmxlICovXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgYGltcG9ydCB0eXBlIHsgU1NSUXVlcnkgfSBmcm9tICdzb25hbXUvc3NyJztgLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIGAvLyBTU1JRdWVyeSDtl6ztjbwg7ZWo7IiYYCxcbiAgICAgICAgICAgIGBmdW5jdGlvbiBjcmVhdGVTU1JRdWVyeShtb2RlbE5hbWU6IHN0cmluZywgbWV0aG9kTmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueVtdLCBzZXJ2aWNlS2V5OiBbc3RyaW5nLCBzdHJpbmddKTogU1NSUXVlcnkge2AsXG4gICAgICAgICAgICBgICByZXR1cm4geyBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIHBhcmFtcywgc2VydmljZUtleSwgX19icmFuZDogJ1NTUlF1ZXJ5JyB9IGFzIFNTUlF1ZXJ5O2AsXG4gICAgICAgICAgICBgfWAsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXCIvKipcIiwgXCIgKiBAZ2VuZXJhdGVkXCIsIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsIFwiICovXCIsIFwiLyogb3hsaW50LWRpc2FibGUgKi9cIiwgXCJcIl0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztzQkFHbUY7YUFFekM7WUFFTztlQUNWO0FBRXZDLElBQWEsb0JBQWIsY0FBdUMsU0FBUztDQUM5QyxjQUFjO0FBQ1osUUFBTSxVQUFVOztDQUdsQixtQkFBbUI7RUFDakIsTUFBTSxFQUFFLFFBQVEsT0FBTyxPQUFPO0FBQzlCLFNBQU87R0FDTCxRQUFRLEdBQUcsSUFBSTtHQUNmLE1BQU07R0FDUDs7Q0FHSCxPQUFPLElBQWdDO0VBQ3JDLE1BQU0sRUFBRSxTQUFTLE9BQU87RUFHeEIsTUFBTSxZQUFZLEtBQUssUUFBUSxRQUFRLElBQUksUUFBUSxTQUFTLFNBQVMsaUJBQWlCLENBQUM7RUFHdkYsTUFBTSxjQUFjLElBQUksS0FBNEI7QUFDcEQsT0FBSyxNQUFNLE9BQU8sV0FBVztHQUMzQixNQUFNLFlBQVksSUFBSSxVQUFVLFFBQVEsVUFBVSxHQUFHLENBQUMsUUFBUSxVQUFVLEdBQUc7QUFDM0UsT0FBSSxDQUFDLFlBQVksSUFBSSxVQUFVLEVBQUU7QUFDL0IsZ0JBQVksSUFBSSxXQUFXLEVBQUUsQ0FBQzs7QUFFaEMsZUFBWSxJQUFJLFVBQVUsRUFBRSxLQUFLLElBQUk7O0VBR3ZDLE1BQU1BLGFBQXVCLEVBQUU7RUFDL0IsTUFBTUMsYUFBdUIsRUFBRTtFQUMvQixJQUFJQyxpQkFBMkIsRUFBRTtBQUVqQyxPQUFLLE1BQU0sQ0FBQyxXQUFXLGNBQWMsYUFBYTtHQUNoRCxNQUFNQyxZQUFzQixFQUFFO0FBRTlCLFFBQUssTUFBTSxPQUFPLFdBQVc7SUFFM0IsTUFBTSx1QkFBdUIsSUFBSSxXQUFXLFFBQ3pDLFVBQ0MsQ0FBQyxhQUFhLFVBQVUsTUFBTSxLQUFLLElBQ25DLENBQUMsYUFBYSxVQUFVLE1BQU0sS0FBSyxJQUNuQyxFQUFFLE1BQU0sWUFBWSxNQUFNLEtBQUssV0FBVyxJQUFJLEVBQ2pEO0FBR0QscUJBQWlCLGVBQWUsT0FBTyxJQUFJLGVBQWUsS0FBSyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBRzdFLE1BQU0seUJBQXlCLElBQUksZUFDaEMsS0FBSyxjQUFjO0FBQ2xCLFlBQU8scUJBQXFCLFdBQVcsV0FBVztNQUNsRCxDQUNELEtBQUssS0FBSztJQUNiLE1BQU0sZ0JBQWdCLHlCQUF5QixJQUFJLHVCQUF1QixLQUFLO0lBRy9FLE1BQU0sWUFBWSxpQkFBaUIsc0JBQXNCLFdBQVc7SUFDcEUsTUFBTSxhQUFhLHFCQUFxQixLQUFLLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxLQUFLO0lBR3JFLE1BQU0sb0JBQW9CLElBQUksUUFBUSxlQUNsQyxNQUFNLFdBQVcsU0FBUyxJQUFJLFFBQVEsYUFBYSxLQUNuRCxJQUFJO0FBR1IsY0FBVSxLQUNSO2lCQUNPLGtCQUFrQixLQUFLLGNBQWMsR0FBRyxVQUFVO3NCQUM3QyxJQUFJLFVBQVUsTUFBTSxJQUFJLFdBQVcsTUFBTSxXQUFXLE9BQU8sVUFBVSxNQUFNLGtCQUFrQjtZQUN2RyxNQUFNLENBQ1Q7O0FBR0gsY0FBVyxLQUNUO21CQUNXLFVBQVU7RUFDM0IsVUFBVSxLQUFLLE9BQU8sQ0FBQzs7UUFFakIsTUFBTSxDQUNQOztFQU1ILE1BQU0sYUFBYSxXQUFXLFNBQVM7QUFFdkMsU0FBTztHQUNMLEdBQUcsS0FBSyxrQkFBa0I7R0FDMUIsTUFBTSxXQUFXLEtBQUssT0FBTztHQUM3QixZQUFZLEtBQUssT0FBTyxXQUFXLEVBQUUsZUFBZTtHQUNwRCxlQUFlLGFBQ1g7SUFDRTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNELEdBQ0Q7SUFBQztJQUFPO0lBQWlCO0lBQW1CO0lBQU87SUFBd0I7SUFBRztHQUNuRiJ9
96
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbIm5hbWVzcGFjZXM6IHN0cmluZ1tdIiwiaW1wb3J0S2V5czogc3RyaW5nW10iLCJ0eXBlUGFyYW1OYW1lczogc3RyaW5nW10iLCJmdW5jdGlvbnM6IHN0cmluZ1tdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9xdWVyaWVzLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBkaWZmLCB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVR5cGVUb1RzVHlwZSB9IGZyb20gXCIuLi8uLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4uLy4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19xdWVyaWVzIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInF1ZXJpZXNcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgcXVlcmllcy5nZW5lcmF0ZWQudHNgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe306IFRlbXBsYXRlT3B0aW9uc1tcInF1ZXJpZXNcIl0pIHtcbiAgICBjb25zdCB7IGFwaXMgfSA9IFNvbmFtdS5zeW5jZXI7XG5cbiAgICAvLyB0YW5zdGFjay1xdWVyeeulvCDtj6ztlajtlZwgQVBJ66eMIO2VhO2EsOungVxuICAgIGNvbnN0IHF1ZXJ5QXBpcyA9IGFwaXMuZmlsdGVyKChhcGkpID0+IGFwaS5vcHRpb25zLmNsaWVudHM/LmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpO1xuXG4gICAgLy8g66qo642467OE66GcIOq3uOujue2ZlFxuICAgIGNvbnN0IGFwaXNCeU1vZGVsID0gbmV3IE1hcDxzdHJpbmcsIEV4dGVuZGVkQXBpW10+KCk7XG4gICAgZm9yIChjb25zdCBhcGkgb2YgcXVlcnlBcGlzKSB7XG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSBhcGkubW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpO1xuICAgICAgaWYgKCFhcGlzQnlNb2RlbC5oYXMobW9kZWxOYW1lKSkge1xuICAgICAgICBhcGlzQnlNb2RlbC5zZXQobW9kZWxOYW1lLCBbXSk7XG4gICAgICB9XG4gICAgICBhcGlzQnlNb2RlbC5nZXQobW9kZWxOYW1lKT8ucHVzaChhcGkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVzcGFjZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgdHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFttb2RlbE5hbWUsIG1vZGVsQXBpc10gb2YgYXBpc0J5TW9kZWwpIHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcGkgb2YgbW9kZWxBcGlzKSB7XG4gICAgICAgIC8vIENvbnRleHQg7KCc7Jm47ZWcIO2MjOudvOuvuO2EsFxuICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsnbTrpoQg7IiY7KeRXG4gICAgICAgIHR5cGVQYXJhbU5hbWVzID0gdHlwZVBhcmFtTmFtZXMuY29uY2F0KGFwaS50eXBlUGFyYW1ldGVycy5tYXAoKHRwKSA9PiB0cC5pZCkpO1xuXG4gICAgICAgIC8vIO2DgOyehSDtjIzrnbzrr7jthLAg7KCV7J2YXG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzQXNUc1R5cGUgPSBhcGkudHlwZVBhcmFtZXRlcnNcbiAgICAgICAgICAubWFwKCh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlUGFyYW0sIGltcG9ydEtleXMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtc0RlZiA9IHR5cGVQYXJhbWV0ZXJzQXNUc1R5cGUgPyBgPCR7dHlwZVBhcmFtZXRlcnNBc1RzVHlwZX0+YCA6IFwiXCI7XG5cbiAgICAgICAgLy8g7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCBwYXJhbXNEZWYgPSBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtc1dpdGhvdXRDb250ZXh0LCBpbXBvcnRLZXlzKTtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gcC5uYW1lKS5qb2luKFwiLCBcIik7XG5cbiAgICAgICAgLy8gc2VydmljZU1ldGhvZE5hbWUg6rOE7IKwIChzZXJ2aWNlcy50ZW1wbGF0ZS50c+yZgCDrj5nsnbztlZwg66Gc7KeBKVxuICAgICAgICBjb25zdCBzZXJ2aWNlTWV0aG9kTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgID8gYGdldCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUpfWBcbiAgICAgICAgICA6IGFwaS5tZXRob2ROYW1lO1xuXG4gICAgICAgIC8vIFNTUlF1ZXJ5IO2VqOyImCDsg53shLEgKO2VqOyImOuqheuPhCBzZXJ2aWNlTWV0aG9kTmFtZSDsgqzsmqkpXG4gICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgIGBcbiAgZXhwb3J0IGNvbnN0ICR7c2VydmljZU1ldGhvZE5hbWV9ID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pOiBTU1JRdWVyeSA9PlxuICAgIGNyZWF0ZVNTUlF1ZXJ5KCcke2FwaS5tb2RlbE5hbWV9JywgJyR7YXBpLm1ldGhvZE5hbWV9JywgWyR7cGFyYW1OYW1lc31dLCBbJyR7bW9kZWxOYW1lfScsICcke3NlcnZpY2VNZXRob2ROYW1lfSddKTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbmFtZXNwYWNlcy5wdXNoKFxuICAgICAgICBgXG5leHBvcnQgbmFtZXNwYWNlICR7bW9kZWxOYW1lfVNlcnZpY2Uge1xuJHtmdW5jdGlvbnMuam9pbihcIlxcblxcblwiKX1cbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0YW5zdGFjay1xdWVyeSBBUEnqsIAg7JeG7Jy866m0IO2XrO2NvCDtlajsiJjsmYAgaW1wb3J066W8IO2PrO2VqO2VmOyngCDslYrsirXri4jri6QuXG4gICAgLy8g7IOIIO2UhOuhnOygne2KuOyXkOyEnCDssqsg67mM65OcIOyLnCBzeW5j6rCAIOyVhOyngSDslYgg65CY7Ja0IG5hbWVzcGFjZeqwgCDruYTslrTsnojsnYQg7IiYIOyeiOqzoCxcbiAgICAvLyDsnbTrlYwgY3JlYXRlU1NSUXVlcnnqsIAgdW51c2Vk66GcIOu5jOuTnCDsl5Drn6zqsIAg67Cc7IOd7ZWY64qUIOqyg+ydhCDrsKnsp4Dtlanri4jri6QuXG4gICAgY29uc3QgaGFzUXVlcmllcyA9IG5hbWVzcGFjZXMubGVuZ3RoID4gMDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IG5hbWVzcGFjZXMuam9pbihcIlxcblxcblwiKSxcbiAgICAgIGltcG9ydEtleXM6IGRpZmYodW5pcXVlKGltcG9ydEtleXMpLCB0eXBlUGFyYW1OYW1lcyksXG4gICAgICBjdXN0b21IZWFkZXJzOiBoYXNRdWVyaWVzXG4gICAgICAgID8gW1xuICAgICAgICAgICAgXCIvKipcIixcbiAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIGBpbXBvcnQgdHlwZSB7IFNTUlF1ZXJ5IH0gZnJvbSAnc29uYW11L3Nzcic7YCxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBgLy8gU1NSUXVlcnkg7Zes7Y28IO2VqOyImGAsXG4gICAgICAgICAgICBgZnVuY3Rpb24gY3JlYXRlU1NSUXVlcnkobW9kZWxOYW1lOiBzdHJpbmcsIG1ldGhvZE5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnlbXSwgc2VydmljZUtleTogW3N0cmluZywgc3RyaW5nXSk6IFNTUlF1ZXJ5IHtgLFxuICAgICAgICAgICAgYCAgcmV0dXJuIHsgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBwYXJhbXMsIHNlcnZpY2VLZXksIF9fYnJhbmQ6ICdTU1JRdWVyeScgfSBhcyBTU1JRdWVyeTtgLFxuICAgICAgICAgICAgYH1gLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICBdXG4gICAgICAgIDogW1xuICAgICAgICAgICAgXCIvKipcIixcbiAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7c0JBR21GO2FBRXpDO1lBRU87ZUFDVjtBQUV2QyxJQUFhLG9CQUFiLGNBQXVDLFNBQVM7Q0FDOUMsY0FBYztBQUNaLFFBQU0sVUFBVTs7Q0FHbEIsbUJBQW1CO0VBQ2pCLE1BQU0sRUFBRSxRQUFRLE9BQU8sT0FBTztBQUM5QixTQUFPO0dBQ0wsUUFBUSxHQUFHLElBQUk7R0FDZixNQUFNO0dBQ1A7O0NBR0gsT0FBTyxJQUFnQztFQUNyQyxNQUFNLEVBQUUsU0FBUyxPQUFPO0VBR3hCLE1BQU0sWUFBWSxLQUFLLFFBQVEsUUFBUSxJQUFJLFFBQVEsU0FBUyxTQUFTLGlCQUFpQixDQUFDO0VBR3ZGLE1BQU0sY0FBYyxJQUFJLEtBQTRCO0FBQ3BELE9BQUssTUFBTSxPQUFPLFdBQVc7R0FDM0IsTUFBTSxZQUFZLElBQUksVUFBVSxRQUFRLFVBQVUsR0FBRyxDQUFDLFFBQVEsVUFBVSxHQUFHO0FBQzNFLE9BQUksQ0FBQyxZQUFZLElBQUksVUFBVSxFQUFFO0FBQy9CLGdCQUFZLElBQUksV0FBVyxFQUFFLENBQUM7O0FBRWhDLGVBQVksSUFBSSxVQUFVLEVBQUUsS0FBSyxJQUFJOztFQUd2QyxNQUFNQSxhQUF1QixFQUFFO0VBQy9CLE1BQU1DLGFBQXVCLEVBQUU7RUFDL0IsSUFBSUMsaUJBQTJCLEVBQUU7QUFFakMsT0FBSyxNQUFNLENBQUMsV0FBVyxjQUFjLGFBQWE7R0FDaEQsTUFBTUMsWUFBc0IsRUFBRTtBQUU5QixRQUFLLE1BQU0sT0FBTyxXQUFXO0lBRTNCLE1BQU0sdUJBQXVCLElBQUksV0FBVyxRQUN6QyxVQUNDLENBQUMsYUFBYSxVQUFVLE1BQU0sS0FBSyxJQUNuQyxDQUFDLGFBQWEsVUFBVSxNQUFNLEtBQUssSUFDbkMsRUFBRSxNQUFNLFlBQVksTUFBTSxLQUFLLFdBQVcsSUFBSSxFQUNqRDtBQUdELHFCQUFpQixlQUFlLE9BQU8sSUFBSSxlQUFlLEtBQUssT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUc3RSxNQUFNLHlCQUF5QixJQUFJLGVBQ2hDLEtBQUssY0FBYztBQUNsQixZQUFPLHFCQUFxQixXQUFXLFdBQVc7TUFDbEQsQ0FDRCxLQUFLLEtBQUs7SUFDYixNQUFNLGdCQUFnQix5QkFBeUIsSUFBSSx1QkFBdUIsS0FBSztJQUcvRSxNQUFNLFlBQVksaUJBQWlCLHNCQUFzQixXQUFXO0lBQ3BFLE1BQU0sYUFBYSxxQkFBcUIsS0FBSyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssS0FBSztJQUdyRSxNQUFNLG9CQUFvQixJQUFJLFFBQVEsZUFDbEMsTUFBTSxXQUFXLFNBQVMsSUFBSSxRQUFRLGFBQWEsS0FDbkQsSUFBSTtBQUdSLGNBQVUsS0FDUjtpQkFDTyxrQkFBa0IsS0FBSyxjQUFjLEdBQUcsVUFBVTtzQkFDN0MsSUFBSSxVQUFVLE1BQU0sSUFBSSxXQUFXLE1BQU0sV0FBVyxPQUFPLFVBQVUsTUFBTSxrQkFBa0I7WUFDdkcsTUFBTSxDQUNUOztBQUdILGNBQVcsS0FDVDttQkFDVyxVQUFVO0VBQzNCLFVBQVUsS0FBSyxPQUFPLENBQUM7O1FBRWpCLE1BQU0sQ0FDUDs7RUFNSCxNQUFNLGFBQWEsV0FBVyxTQUFTO0FBRXZDLFNBQU87R0FDTCxHQUFHLEtBQUssa0JBQWtCO0dBQzFCLE1BQU0sV0FBVyxLQUFLLE9BQU87R0FDN0IsWUFBWSxLQUFLLE9BQU8sV0FBVyxFQUFFLGVBQWU7R0FDcEQsZUFBZSxhQUNYO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNELEdBQ0Q7SUFDRTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBQ04ifQ==
@@ -226,7 +226,8 @@ SD.enumLabels = (enumName: string): Record<string, LocalizedString> => {
226
226
  "/**",
227
227
  " * @generated",
228
228
  " * 직접 수정하지 마세요.",
229
- " */"
229
+ " */",
230
+ ""
230
231
  ]
231
232
  };
232
233
  }
@@ -312,4 +313,4 @@ ${entries.join("\n")}
312
313
 
313
314
  //#endregion
314
315
  export { Template__sd };
315
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QudGVtcGxhdGUuanMiLCJuYW1lcyI6WyJsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9zZC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG4vKipcbiAqIFNvbmFtdSBEaWN0aW9uYXJ5IChTRCkg7YWc7ZSM66a/XG4gKiBpMThu7J2EIOychO2VnCBzZC5nZW5lcmF0ZWQudHMg7YyM7J287J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19zZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJzZFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoX25hbWVzPzogRW50aXR5TmFtZXNSZWNvcmQsIHNkVGFyZ2V0PzogXCJhcGlcIiB8IFwid2ViXCIgfCBcImFwcFwiKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2RUYXJnZXQgPz8gXCJhcGlcIjtcbiAgICAvLyBhcGkuZGly7J2AIOyDgeuMgCDqsr3roZwoXCJhcGlcIinsnbTrr4DroZwsIHdlYi9hcHDrj4Qg7IOB64yAIOqyveuhnOuhnCDrp57stqRcbiAgICBjb25zdCBkaXIgPSB0YXJnZXQgPT09IFwiYXBpXCIgPyBTb25hbXUuY29uZmlnLmFwaS5kaXIgOiB0YXJnZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9pMThuYCxcbiAgICAgIHBhdGg6IFwic2QuZ2VuZXJhdGVkLnRzXCIsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcihvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbXCJzZFwiXSkge1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGkxOG5Db25maWcgPSBTb25hbXUuY29uZmlnLmkxOG47XG5cbiAgICBjb25zdCB7IGRlZmF1bHRMb2NhbGUsIHN1cHBvcnRlZExvY2FsZXMgfSA9IGkxOG5Db25maWc7XG5cbiAgICAvLyBlbnRpdHkuanNvbuyXkOyEnCBlbnRpdHkgbGFiZWxzIOy2lOy2nFxuICAgIGNvbnN0IGVudGl0eUxhYmVscyA9IHRoaXMuZXh0cmFjdEVudGl0eUxhYmVscygpO1xuXG4gICAgLy8gcmMta2V5cyDshozsiqQg7L2U65OcIOy2lOy2nFxuICAgIGNvbnN0IHJjS2V5c1NvdXJjZUNvZGUgPSB0aGlzLmV4dHJhY3RSQ0tleXNTb3VyY2VDb2RlKCk7XG5cbiAgICAvLyDtlIzrnqvtj7zrs4QgbG9jYWxlIOq0gOumrCDsvZTrk5xcbiAgICBjb25zdCBsb2NhbGVNYW5hZ2VtZW50Q29kZSA9XG4gICAgICB0YXJnZXQgPT09IFwiYXBpXCJcbiAgICAgICAgPyBgXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7XG5cbmNvbnN0IERFRkFVTFRfTE9DQUxFID0gXCIke2RlZmF1bHRMb2NhbGV9XCIgYXMgY29uc3Q7XG5jb25zdCBTVVBQT1JURURfTE9DQUxFUyA9ICR7SlNPTi5zdHJpbmdpZnkoc3VwcG9ydGVkTG9jYWxlcyl9IGFzIGNvbnN0O1xuZnVuY3Rpb24gZ2V0Q3VycmVudExvY2FsZSgpOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjdHggPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIHJldHVybiBjdHgubG9jYWxlIGFzICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0gPz8gREVGQVVMVF9MT0NBTEU7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gREVGQVVMVF9MT0NBTEU7XG4gIH1cbn1cbmAudHJpbSgpXG4gICAgICAgIDogYFxuY29uc3QgREVGQVVMVF9MT0NBTEUgPSBcIiR7ZGVmYXVsdExvY2FsZX1cIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfTE9DQUxFUyA9ICR7SlNPTi5zdHJpbmdpZnkoc3VwcG9ydGVkTG9jYWxlcyl9IGFzIGNvbnN0O1xubGV0IF9jdXJyZW50TG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdID0gREVGQVVMVF9MT0NBTEU7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2NhbGUobG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdKSB7XG4gIF9jdXJyZW50TG9jYWxlID0gbG9jYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2FsZSgpOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdIHtcbiAgcmV0dXJuIF9jdXJyZW50TG9jYWxlO1xufVxuYC50cmltKCk7XG5cbiAgICAvLyBsb2NhbGUgaW1wb3J0XG4gICAgY29uc3QgbG9jYWxlSW1wb3J0cyA9IHN1cHBvcnRlZExvY2FsZXNcbiAgICAgIC5tYXAoKGxvY2FsZSkgPT4gYGltcG9ydCAke2xvY2FsZX0gZnJvbSBcIi4vJHtsb2NhbGV9XCI7YClcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gICAgLy8gZW50aXR5TGFiZWxz66W8IOy9lOuTnOuhnCDrs4DtmZhcbiAgICBjb25zdCBlbnRpdHlMYWJlbHNDb2RlID0gdGhpcy5nZW5lcmF0ZUVudGl0eUxhYmVsc0NvZGUoZW50aXR5TGFiZWxzKTtcblxuICAgIC8vIGxvY2FsZeuzhCByY0tleXMg67OA7IiY66qFIOunpO2VkVxuICAgIGNvbnN0IGdldFJDS2V5c1Zhck5hbWUgPSAobG9jYWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIHN1cHBvcnRlZExvY2FsZXPsl5Ag7Y+s7ZWo65CcIGxvY2FsZeunjCDtlbTri7kg67OA7IiYIOuwmO2ZmFxuICAgICAgaWYgKGxvY2FsZSA9PT0gXCJrb1wiICYmIHN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoXCJrb1wiKSkgcmV0dXJuIFwicmNLZXlzS29cIjtcbiAgICAgIGlmIChsb2NhbGUgPT09IFwiZW5cIiAmJiBzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwiZW5cIikpIHJldHVybiBcInJjS2V5c0VuXCI7XG4gICAgICAvLyBmYWxsYmFjazogZGVmYXVsdExvY2FsZeydmCByY0tleXNcbiAgICAgIGlmIChsb2NhbGUgIT09IGRlZmF1bHRMb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGdldFJDS2V5c1Zhck5hbWUoZGVmYXVsdExvY2FsZSk7XG4gICAgICB9XG4gICAgICAvLyBkZWZhdWx0TG9jYWxl7KGw7LCoIOyXhuuKlCDqsr3smrAgZW7snYQgZmFsbGJhY2vsnLzroZwg7IKs7JqpXG4gICAgICByZXR1cm4gXCJyY0tleXNFblwiO1xuICAgIH07XG5cbiAgICBjb25zdCBib2R5ID0gYFxuJHtsb2NhbGVNYW5hZ2VtZW50Q29kZX1cblxuJHtsb2NhbGVJbXBvcnRzfVxuXG4vLyByZWFjdC1jb21wb25lbnRzIGkxOG4ga2V5c1xuJHtzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwia29cIikgPyByY0tleXNTb3VyY2VDb2RlLmtvIDogXCJcIn1cblxuJHtzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwiZW5cIikgPyByY0tleXNTb3VyY2VDb2RlLmVuIDogXCJcIn1cblxuLy8gZW50aXR5Lmpzb27sl5DshJwg7LaU7Lac7ZWcIGVudGl0eSBsYWJlbHMgKGRlZmF1bHRMb2NhbGUg7KCE7JqpKVxuJHtlbnRpdHlMYWJlbHNDb2RlfVxuXG4vLyBkZWZhdWx0TG9jYWxl7J2YIGRpY3Rpb25hcnnrpbwg6riw7KSA7Jy866GcIO2CpCDstpTstpxcbnR5cGUgUkNLZXlzID0gdHlwZW9mICR7Z2V0UkNLZXlzVmFyTmFtZShkZWZhdWx0TG9jYWxlKX07XG50eXBlIFByb2plY3REaWN0aW9uYXJ5ID0gdHlwZW9mICR7ZGVmYXVsdExvY2FsZX07XG50eXBlIEVudGl0eUxhYmVscyA9IHR5cGVvZiBlbnRpdHlMYWJlbHM7XG50eXBlIFJhd01lcmdlZERpY3Rpb25hcnkgPSBSQ0tleXMgJiBPbWl0PEVudGl0eUxhYmVscywga2V5b2YgKFJDS2V5cyAmIFByb2plY3REaWN0aW9uYXJ5KT4gJiBQcm9qZWN0RGljdGlvbmFyeTtcblxuLy8g7YKk64qUIOycoOyngO2VmOuQmCwg6rCSIO2DgOyeheydgCBzdHJpbmcg65iQ64qUIO2VqOyImOuhnCDsnbzrsJjtmZQgKOuLpOuluCBsb2NhbGXsnZgg66as7YSw65+0IO2DgOyehSDstqnrj4wg67Cp7KeAKVxuZXhwb3J0IHR5cGUgTWVyZ2VkRGljdGlvbmFyeSA9IHtcbiAgW0sgaW4ga2V5b2YgUmF3TWVyZ2VkRGljdGlvbmFyeV06IFJhd01lcmdlZERpY3Rpb25hcnlbS10gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgUCkgPT4gc3RyaW5nXG4gICAgPyAoLi4uYXJnczogUCkgPT4gc3RyaW5nXG4gICAgOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRGljdEtleSA9IGtleW9mIE1lcmdlZERpY3Rpb25hcnk7XG5leHBvcnQgdHlwZSBMb2NhbGl6ZWRTdHJpbmcgPSBzdHJpbmcgJiB7IF9fYnJhbmQ6IFwiTG9jYWxpemVkU3RyaW5nXCIgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUxvY2FsZShkaWN0OiBQYXJ0aWFsPE1lcmdlZERpY3Rpb25hcnk+KSB7XG4gIHJldHVybiBkaWN0O1xufVxuXG4vLyDqsIEgbG9jYWxl67OE66GcIHJjLWtleXMgKyBlbnRpdHkgbGFiZWxzICsg7ZSE66Gc7KCd7Yq4IGRpY3Qg7ZWp7LmoXG5jb25zdCBkaWN0aW9uYXJpZXM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8TWVyZ2VkRGljdGlvbmFyeT4+ID0ge1xuICAke2RlZmF1bHRMb2NhbGV9OiB7IC4uLiR7Z2V0UkNLZXlzVmFyTmFtZShkZWZhdWx0TG9jYWxlKX0sIC4uLmVudGl0eUxhYmVscywgLi4uJHtkZWZhdWx0TG9jYWxlfSB9LFxuICAke3N1cHBvcnRlZExvY2FsZXNcbiAgICAuZmlsdGVyKChsb2NhbGUpID0+IGxvY2FsZSAhPT0gZGVmYXVsdExvY2FsZSlcbiAgICAubWFwKChsb2NhbGUpID0+IGAgICR7bG9jYWxlfTogeyAuLi4ke2dldFJDS2V5c1Zhck5hbWUobG9jYWxlKX0sIC4uLiR7bG9jYWxlfSB9LGApXG4gICAgLmpvaW4oXCJcXG5cIil9XG59O1xuXG50eXBlIFNEUmV0dXJuVHlwZTxLIGV4dGVuZHMgRGljdEtleT4gPSBNZXJnZWREaWN0aW9uYXJ5W0tdIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIFApID0+IHN0cmluZ1xuICA/ICguLi5hcmdzOiBQKSA9PiBMb2NhbGl6ZWRTdHJpbmdcbiAgOiBMb2NhbGl6ZWRTdHJpbmc7XG5cbmZ1bmN0aW9uIGdldERpY3RWYWx1ZTxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLLCBsb2NhbGU6IHN0cmluZyk6IFNEUmV0dXJuVHlwZTxLPiB7XG4gIC8vIDEuIOyngOygleuQnCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGNvbnN0IGRpY3QgPSBkaWN0aW9uYXJpZXNbbG9jYWxlXTtcbiAgaWYgKGRpY3Q/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdFtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMi4gZGVmYXVsdCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGlmIChsb2NhbGUgIT09IERFRkFVTFRfTE9DQUxFICYmIGRpY3Rpb25hcmllc1tERUZBVUxUX0xPQ0FMRV0/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdGlvbmFyaWVzW0RFRkFVTFRfTE9DQUxFXVtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMy4gc3VwcG9ydGVkIGxvY2FsZXMg7Iic7ZqMXG4gIGZvciAoY29uc3Qgc3VwcG9ydGVkTG9jYWxlIG9mIFNVUFBPUlRFRF9MT0NBTEVTKSB7XG4gICAgaWYgKHN1cHBvcnRlZExvY2FsZSAhPT0gbG9jYWxlICYmIHN1cHBvcnRlZExvY2FsZSAhPT0gREVGQVVMVF9MT0NBTEUpIHtcbiAgICAgIGlmIChkaWN0aW9uYXJpZXNbc3VwcG9ydGVkTG9jYWxlXT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGljdGlvbmFyaWVzW3N1cHBvcnRlZExvY2FsZV1ba2V5XSBhcyB1bmtub3duIGFzIFNEUmV0dXJuVHlwZTxLPjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA0LiDrqqjrkZAg7Iuk7YyoIOyLnCBrZXkg67CY7ZmYXG4gIHJldHVybiBrZXkgYXMgdW5rbm93biBhcyBTRFJldHVyblR5cGU8Sz47XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkg7ZWo7IiYXG4gKiBsb2NhbGXsl5Ag66ee64qUIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRChcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCLsoIDsnqVcIiAoTG9jYWxpemVkU3RyaW5nKVxuICogU0QoXCJ1c2VyLm5vdEZvdW5kXCIpKDEpICAvLyDihpIgXCLsobTsnqztlZjsp4Ag7JWK64qUIFVzZXIgSUQgMVwiIChMb2NhbGl6ZWRTdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTRDxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLKTogU0RSZXR1cm5UeXBlPEs+IHtcbiAgY29uc3QgbG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn1cblxuLyoqXG4gKiDtirnsoJUgbG9jYWxl7J2YIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWY64qUIO2VqOyImOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IEVOID0gU0QubG9jYWxlKFwiZW5cIik7XG4gKiBFTihcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCJTYXZlXCJcbiAqL1xuU0QubG9jYWxlID0gKGxvY2FsZTogKHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSkgPT4gPEsgZXh0ZW5kcyBEaWN0S2V5PihrZXk6IEspOiBTRFJldHVyblR5cGU8Sz4gPT4ge1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn07XG5cbi8vIExvY2FsaXplZCDqsIDriqXtlZwgQ29sdW1uIO2DgOyehSDqs4TsgrBcbnR5cGUgTG9jYWxpemVkQmFzZUNvbHVtbjxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCAmIHN0cmluZ106IEsgZXh0ZW5kcyBcXGBcXCR7aW5mZXIgQmFzZX1fXFwkeyh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl19XFxgID8gQmFzZSA6IEs7XG59W2tleW9mIFQgJiBzdHJpbmddO1xuXG4vKipcbiAqIGxvY2FsZeyXkCDrlLDrnbwg7KCB7KCI7ZWcIOy7rOufvCDqsJLsnYQg67CY7ZmY7ZWp64uI64ukLlxuICogRELsl5AgbmFtZSwgbmFtZV9rbywgbmFtZV9lbuyymOufvCBsb2NhbGl6ZWQgY29sdW1u7J20IOyeiOydhCDrlYwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIOyasOyEoOyInOychCAo7KeA7JuQIOuhnOy8gOydvOydgCBrby9qcC9lbuydtOqzoCwg7ISc67mE7Iqk7J2YIOq4sOuzuCDroZzsvIDsnbzsnYAga28sIOyCrOyaqeyekOydmCDroZzsvIDsnbzsnYAganDsnbwg65WMKTogY29sdW1uX2pwIOKGkiBjb2x1bW4g4oaSIGNvbHVtbl9rbyDihpIgY29sdW1uX2VuXG4gKiDsmrDshKDsiJzsnIQgKOyngOybkCDroZzsvIDsnbzsnYAga28vanAvZW7snbTqs6AsIOyEnOu5hOyKpOydmCDquLDrs7gg66Gc7LyA7J287J2AIGVuLCDsgqzsmqnsnpDsnZgg66Gc7LyA7J287J2AIGtv7J28IOuVjCk6IGNvbHVtbl9rbyDihpIgY29sdW1uIOKGkiBjb2x1bW5fZW4g4oaSIGNvbHVtbl9qcFxuICpcbiAqIEBleGFtcGxlXG4gKiBsb2NhbGl6ZWRDb2x1bW4odGFnLCBcIm5hbWVcIilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsaXplZENvbHVtbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIEsgZXh0ZW5kcyBMb2NhbGl6ZWRCYXNlQ29sdW1uPFQ+PihcbiAgcm93OiBULFxuICBjb2x1bW46IEssXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsb2NhbGUgPSBnZXRDdXJyZW50TG9jYWxlKCk7XG4gIGNvbnN0IG90aGVyTG9jYWxlcyA9IFNVUFBPUlRFRF9MT0NBTEVTLmZpbHRlcigobDogc3RyaW5nKSA9PiBsICE9PSBsb2NhbGUgJiYgbCAhPT0gREVGQVVMVF9MT0NBTEUpO1xuICBjb25zdCBsb2NhbGl6ZWRLZXkgPSAoY29sdW1uOiBLLCBsb2NhbGU6ICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0pID0+IFxcYFxcJHtjb2x1bW59X1xcJHtsb2NhbGV9XFxgO1xuICBjb25zdCBrZXlzID0gW1xuICAgIGxvY2FsaXplZEtleShjb2x1bW4sIGxvY2FsZSksXG4gICAgY29sdW1uLFxuICAgIGxvY2FsaXplZEtleShjb2x1bW4sIERFRkFVTFRfTE9DQUxFKSxcbiAgICAuLi5vdGhlckxvY2FsZXMubWFwKChsKSA9PiBsb2NhbGl6ZWRLZXkoY29sdW1uLCBsKSksXG4gIF07XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmICghKGtleSBpbiByb3cpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocm93W2tleV0gIT09IG51bGwgJiYgcm93W2tleV0gIT09IHVuZGVmaW5lZCAmJiByb3dba2V5XSAhPT0gXCJcIikge1xuICAgICAgcmV0dXJuIFN0cmluZyhyb3dba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFbnVt7J2YIGxvY2FsaXplZCBsYWJlbHPrpbwgUHJveHnroZwg67CY7ZmY7ZWp64uI64ukLlxuICogU2VsZWN0IOy7tO2PrOuEjO2KuCDrk7Hsl5DshJwgRW51bUxhYmVsW2tleV0g64yA7IugIOyCrOyaqe2VqeuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogU0QuZW51bUxhYmVscyhcIlRhZ09yZGVyQnlcIilba2V5XSAgLy8g4oaSIO2YhOyerCBsb2NhbGXsnZgg652867KoXG4gKi9cblNELmVudW1MYWJlbHMgPSAoZW51bU5hbWU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIExvY2FsaXplZFN0cmluZz4gPT4ge1xuICByZXR1cm4gbmV3IFByb3h5KHt9IGFzIFJlY29yZDxzdHJpbmcsIExvY2FsaXplZFN0cmluZz4sIHtcbiAgICBnZXQoXywga2V5OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGRpY3RLZXkgPSBcXGBlbnVtLlxcJHtlbnVtTmFtZX0uXFwke2tleX1cXGAgYXMgRGljdEtleTtcbiAgICAgIHJldHVybiBnZXREaWN0VmFsdWUoZGljdEtleSwgZ2V0Q3VycmVudExvY2FsZSgpKTtcbiAgICB9XG4gIH0pO1xufTtcbmAudHJpbSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCh1bmRlZmluZWQsIHRhcmdldCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICBjdXN0b21IZWFkZXJzOiBbXCIvKipcIiwgXCIgKiBAZ2VuZXJhdGVkXCIsIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsIFwiICovXCJdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogcmVhY3QtY29tcG9uZW50c+ydmCByYy1rZXlz66W8IOy2lOy2nO2VqVxuICAgKiBzb25hbXUvc3JjL2RpY3QvcmMta2V5cy50cyDtjIzsnbzsnZgg7IaM7IqkIOy9lOuTnOulvCDsp4HsoJEg7J297Ja07IScIOuwmO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0UkNLZXlzU291cmNlQ29kZSgpOiB7IGtvOiBzdHJpbmc7IGVuOiBzdHJpbmcgfSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJjLWtleXMudHMg7YyM7J28IOqyveuhnFxuICAgICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICAgIGNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShfX2ZpbGVuYW1lKTtcblxuICAgICAgLy8gZGlzdOyXkOyEnCDsi6TtlonrkKAg65WM64qUIHNyY+uhnCDqsr3roZwg67OA6rK9XG4gICAgICBjb25zdCBiYXNlUGF0aCA9IF9fZGlybmFtZS5pbmNsdWRlcyhcIi9kaXN0L1wiKVxuICAgICAgICA/IF9fZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIilcbiAgICAgICAgOiBfX2Rpcm5hbWU7XG5cbiAgICAgIGNvbnN0IHJjS2V5c1BhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIFwiLi4vLi4vZGljdC9yYy1rZXlzLnRzXCIpO1xuXG4gICAgICAvLyDtjIzsnbwg7J296riwXG4gICAgICBjb25zdCBzb3VyY2VDb2RlID0gZnMucmVhZEZpbGVTeW5jKHJjS2V5c1BhdGgsIFwidXRmLThcIik7XG5cbiAgICAgIC8vIHJjS2V5c0tvIOy2lOy2nCAo7KSR6rSE7Zi4IOy5tOyatO2MhSDrsKnsi50pXG4gICAgICBjb25zdCBrb0NvZGUgPSBleHRyYWN0T2JqZWN0RGVjbGFyYXRpb24oc291cmNlQ29kZSwgXCJyY0tleXNLb1wiKTtcblxuICAgICAgLy8gcmNLZXlzRW4g7LaU7LacICjspJHqtITtmLgg7Lm07Jq07YyFIOuwqeyLnSlcbiAgICAgIGNvbnN0IGVuQ29kZSA9IGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlLCBcInJjS2V5c0VuXCIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBrbzoga29Db2RlLnJlcGxhY2UoL15leHBvcnQgLywgXCJcIiksXG4gICAgICAgIGVuOiBlbkNvZGUucmVwbGFjZSgvXmV4cG9ydCAvLCBcIlwiKS5yZXBsYWNlKC8gc2F0aXNmaWVzIFJDS2V5cy8sIFwiIGFzIGNvbnN0XCIpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gcmMta2V5cyDtjIzsnbzsnbQg7JeG64qUIOqyveyasCDruYgg7L2U65OcIOuwmO2ZmFxuICAgICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcmMta2V5cyBzb3VyY2U6XCIsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtvOiBcImNvbnN0IHJjS2V5c0tvID0ge30gYXMgY29uc3Q7XCIsXG4gICAgICAgIGVuOiBcImNvbnN0IHJjS2V5c0VuID0ge30gYXMgY29uc3Q7XCIsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDrqqjrk6AgZW50aXR5Lmpzb27sl5DshJwgZW50aXR5IGxhYmVscyDstpTstpxcbiAgICogZW50aXR5Lmpzb27sl5DshJwg7KeB7KCRIOq0gOumrOuQmOuKlCDqsJLrp4wg7Y+s7ZWoICjsnpDrj5kg7IOd7ISxIOqwkiDsoJzsmbgpXG4gICAqIC0gZW50aXR5LntlbnRpdHlJZH06IGVudGl0eSB0aXRsZVxuICAgKiAtIGVudGl0eS57ZW50aXR5SWR9Lntwcm9wTmFtZX06IHByb3AgZGVzY1xuICAgKiAtIGVudW0ue0VudW1JZH0ue3ZhbHVlfTogZW51bSBsYWJlbFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0RW50aXR5TGFiZWxzKCk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIHtcbiAgICBjb25zdCBsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG5cbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICByZXR1cm4gbGFiZWxzO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAvLyBlbnRpdHkgdGl0bGUgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9YCwgdmFsdWU6IGVudGl0eS50aXRsZSB9KTtcblxuICAgICAgLy8gcHJvcCBsYWJlbHMgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBlbnRpdHkucHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3AuZGVzYykge1xuICAgICAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9LiR7cHJvcC5uYW1lfWAsIHZhbHVlOiBwcm9wLmRlc2MgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZW51bSBsYWJlbHMgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGZvciAoY29uc3QgW2VudW1JZCwgZW51bUxhYmVsc01hcF0gb2YgT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3ZhbHVlLCBsYWJlbF0gb2YgT2JqZWN0LmVudHJpZXMoZW51bUxhYmVsc01hcCkpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaCh7IGtleTogYGVudW0uJHtlbnVtSWR9LiR7dmFsdWV9YCwgdmFsdWU6IGxhYmVsIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnRpdHlMYWJlbHPrpbwgVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmYXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlRW50aXR5TGFiZWxzQ29kZShsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdKTogc3RyaW5nIHtcbiAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiY29uc3QgZW50aXR5TGFiZWxzID0ge30gYXMgY29uc3Q7XCI7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IGxhYmVscy5tYXAoKHsga2V5LCB2YWx1ZSB9KSA9PiBgICBcIiR7a2V5fVwiOiBcIiR7dGhpcy5lc2NhcGVTdHJpbmcodmFsdWUpfVwiLGApO1xuXG4gICAgcmV0dXJuIGBjb25zdCBlbnRpdHlMYWJlbHMgPSB7XG4ke2VudHJpZXMuam9pbihcIlxcblwiKX1cbn0gYXMgY29uc3Q7YDtcbiAgfVxuXG4gIHByaXZhdGUgZXNjYXBlU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O2FBSTBDO3FCQUNrQjtjQUdOO2VBQ2Y7Ozs7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
316
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QudGVtcGxhdGUuanMiLCJuYW1lcyI6WyJsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9zZC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG4vKipcbiAqIFNvbmFtdSBEaWN0aW9uYXJ5IChTRCkg7YWc7ZSM66a/XG4gKiBpMThu7J2EIOychO2VnCBzZC5nZW5lcmF0ZWQudHMg7YyM7J287J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19zZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJzZFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoX25hbWVzPzogRW50aXR5TmFtZXNSZWNvcmQsIHNkVGFyZ2V0PzogXCJhcGlcIiB8IFwid2ViXCIgfCBcImFwcFwiKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2RUYXJnZXQgPz8gXCJhcGlcIjtcbiAgICAvLyBhcGkuZGly7J2AIOyDgeuMgCDqsr3roZwoXCJhcGlcIinsnbTrr4DroZwsIHdlYi9hcHDrj4Qg7IOB64yAIOqyveuhnOuhnCDrp57stqRcbiAgICBjb25zdCBkaXIgPSB0YXJnZXQgPT09IFwiYXBpXCIgPyBTb25hbXUuY29uZmlnLmFwaS5kaXIgOiB0YXJnZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9pMThuYCxcbiAgICAgIHBhdGg6IFwic2QuZ2VuZXJhdGVkLnRzXCIsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcihvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbXCJzZFwiXSkge1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGkxOG5Db25maWcgPSBTb25hbXUuY29uZmlnLmkxOG47XG5cbiAgICBjb25zdCB7IGRlZmF1bHRMb2NhbGUsIHN1cHBvcnRlZExvY2FsZXMgfSA9IGkxOG5Db25maWc7XG5cbiAgICAvLyBlbnRpdHkuanNvbuyXkOyEnCBlbnRpdHkgbGFiZWxzIOy2lOy2nFxuICAgIGNvbnN0IGVudGl0eUxhYmVscyA9IHRoaXMuZXh0cmFjdEVudGl0eUxhYmVscygpO1xuXG4gICAgLy8gcmMta2V5cyDshozsiqQg7L2U65OcIOy2lOy2nFxuICAgIGNvbnN0IHJjS2V5c1NvdXJjZUNvZGUgPSB0aGlzLmV4dHJhY3RSQ0tleXNTb3VyY2VDb2RlKCk7XG5cbiAgICAvLyDtlIzrnqvtj7zrs4QgbG9jYWxlIOq0gOumrCDsvZTrk5xcbiAgICBjb25zdCBsb2NhbGVNYW5hZ2VtZW50Q29kZSA9XG4gICAgICB0YXJnZXQgPT09IFwiYXBpXCJcbiAgICAgICAgPyBgXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7XG5cbmNvbnN0IERFRkFVTFRfTE9DQUxFID0gXCIke2RlZmF1bHRMb2NhbGV9XCIgYXMgY29uc3Q7XG5jb25zdCBTVVBQT1JURURfTE9DQUxFUyA9ICR7SlNPTi5zdHJpbmdpZnkoc3VwcG9ydGVkTG9jYWxlcyl9IGFzIGNvbnN0O1xuZnVuY3Rpb24gZ2V0Q3VycmVudExvY2FsZSgpOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjdHggPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIHJldHVybiBjdHgubG9jYWxlIGFzICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0gPz8gREVGQVVMVF9MT0NBTEU7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gREVGQVVMVF9MT0NBTEU7XG4gIH1cbn1cbmAudHJpbSgpXG4gICAgICAgIDogYFxuY29uc3QgREVGQVVMVF9MT0NBTEUgPSBcIiR7ZGVmYXVsdExvY2FsZX1cIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfTE9DQUxFUyA9ICR7SlNPTi5zdHJpbmdpZnkoc3VwcG9ydGVkTG9jYWxlcyl9IGFzIGNvbnN0O1xubGV0IF9jdXJyZW50TG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdID0gREVGQVVMVF9MT0NBTEU7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2NhbGUobG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdKSB7XG4gIF9jdXJyZW50TG9jYWxlID0gbG9jYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2FsZSgpOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdIHtcbiAgcmV0dXJuIF9jdXJyZW50TG9jYWxlO1xufVxuYC50cmltKCk7XG5cbiAgICAvLyBsb2NhbGUgaW1wb3J0XG4gICAgY29uc3QgbG9jYWxlSW1wb3J0cyA9IHN1cHBvcnRlZExvY2FsZXNcbiAgICAgIC5tYXAoKGxvY2FsZSkgPT4gYGltcG9ydCAke2xvY2FsZX0gZnJvbSBcIi4vJHtsb2NhbGV9XCI7YClcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gICAgLy8gZW50aXR5TGFiZWxz66W8IOy9lOuTnOuhnCDrs4DtmZhcbiAgICBjb25zdCBlbnRpdHlMYWJlbHNDb2RlID0gdGhpcy5nZW5lcmF0ZUVudGl0eUxhYmVsc0NvZGUoZW50aXR5TGFiZWxzKTtcblxuICAgIC8vIGxvY2FsZeuzhCByY0tleXMg67OA7IiY66qFIOunpO2VkVxuICAgIGNvbnN0IGdldFJDS2V5c1Zhck5hbWUgPSAobG9jYWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIHN1cHBvcnRlZExvY2FsZXPsl5Ag7Y+s7ZWo65CcIGxvY2FsZeunjCDtlbTri7kg67OA7IiYIOuwmO2ZmFxuICAgICAgaWYgKGxvY2FsZSA9PT0gXCJrb1wiICYmIHN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoXCJrb1wiKSkgcmV0dXJuIFwicmNLZXlzS29cIjtcbiAgICAgIGlmIChsb2NhbGUgPT09IFwiZW5cIiAmJiBzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwiZW5cIikpIHJldHVybiBcInJjS2V5c0VuXCI7XG4gICAgICAvLyBmYWxsYmFjazogZGVmYXVsdExvY2FsZeydmCByY0tleXNcbiAgICAgIGlmIChsb2NhbGUgIT09IGRlZmF1bHRMb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGdldFJDS2V5c1Zhck5hbWUoZGVmYXVsdExvY2FsZSk7XG4gICAgICB9XG4gICAgICAvLyBkZWZhdWx0TG9jYWxl7KGw7LCoIOyXhuuKlCDqsr3smrAgZW7snYQgZmFsbGJhY2vsnLzroZwg7IKs7JqpXG4gICAgICByZXR1cm4gXCJyY0tleXNFblwiO1xuICAgIH07XG5cbiAgICBjb25zdCBib2R5ID0gYFxuJHtsb2NhbGVNYW5hZ2VtZW50Q29kZX1cblxuJHtsb2NhbGVJbXBvcnRzfVxuXG4vLyByZWFjdC1jb21wb25lbnRzIGkxOG4ga2V5c1xuJHtzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwia29cIikgPyByY0tleXNTb3VyY2VDb2RlLmtvIDogXCJcIn1cblxuJHtzdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKFwiZW5cIikgPyByY0tleXNTb3VyY2VDb2RlLmVuIDogXCJcIn1cblxuLy8gZW50aXR5Lmpzb27sl5DshJwg7LaU7Lac7ZWcIGVudGl0eSBsYWJlbHMgKGRlZmF1bHRMb2NhbGUg7KCE7JqpKVxuJHtlbnRpdHlMYWJlbHNDb2RlfVxuXG4vLyBkZWZhdWx0TG9jYWxl7J2YIGRpY3Rpb25hcnnrpbwg6riw7KSA7Jy866GcIO2CpCDstpTstpxcbnR5cGUgUkNLZXlzID0gdHlwZW9mICR7Z2V0UkNLZXlzVmFyTmFtZShkZWZhdWx0TG9jYWxlKX07XG50eXBlIFByb2plY3REaWN0aW9uYXJ5ID0gdHlwZW9mICR7ZGVmYXVsdExvY2FsZX07XG50eXBlIEVudGl0eUxhYmVscyA9IHR5cGVvZiBlbnRpdHlMYWJlbHM7XG50eXBlIFJhd01lcmdlZERpY3Rpb25hcnkgPSBSQ0tleXMgJiBPbWl0PEVudGl0eUxhYmVscywga2V5b2YgKFJDS2V5cyAmIFByb2plY3REaWN0aW9uYXJ5KT4gJiBQcm9qZWN0RGljdGlvbmFyeTtcblxuLy8g7YKk64qUIOycoOyngO2VmOuQmCwg6rCSIO2DgOyeheydgCBzdHJpbmcg65iQ64qUIO2VqOyImOuhnCDsnbzrsJjtmZQgKOuLpOuluCBsb2NhbGXsnZgg66as7YSw65+0IO2DgOyehSDstqnrj4wg67Cp7KeAKVxuZXhwb3J0IHR5cGUgTWVyZ2VkRGljdGlvbmFyeSA9IHtcbiAgW0sgaW4ga2V5b2YgUmF3TWVyZ2VkRGljdGlvbmFyeV06IFJhd01lcmdlZERpY3Rpb25hcnlbS10gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgUCkgPT4gc3RyaW5nXG4gICAgPyAoLi4uYXJnczogUCkgPT4gc3RyaW5nXG4gICAgOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRGljdEtleSA9IGtleW9mIE1lcmdlZERpY3Rpb25hcnk7XG5leHBvcnQgdHlwZSBMb2NhbGl6ZWRTdHJpbmcgPSBzdHJpbmcgJiB7IF9fYnJhbmQ6IFwiTG9jYWxpemVkU3RyaW5nXCIgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUxvY2FsZShkaWN0OiBQYXJ0aWFsPE1lcmdlZERpY3Rpb25hcnk+KSB7XG4gIHJldHVybiBkaWN0O1xufVxuXG4vLyDqsIEgbG9jYWxl67OE66GcIHJjLWtleXMgKyBlbnRpdHkgbGFiZWxzICsg7ZSE66Gc7KCd7Yq4IGRpY3Qg7ZWp7LmoXG5jb25zdCBkaWN0aW9uYXJpZXM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8TWVyZ2VkRGljdGlvbmFyeT4+ID0ge1xuICAke2RlZmF1bHRMb2NhbGV9OiB7IC4uLiR7Z2V0UkNLZXlzVmFyTmFtZShkZWZhdWx0TG9jYWxlKX0sIC4uLmVudGl0eUxhYmVscywgLi4uJHtkZWZhdWx0TG9jYWxlfSB9LFxuICAke3N1cHBvcnRlZExvY2FsZXNcbiAgICAuZmlsdGVyKChsb2NhbGUpID0+IGxvY2FsZSAhPT0gZGVmYXVsdExvY2FsZSlcbiAgICAubWFwKChsb2NhbGUpID0+IGAgICR7bG9jYWxlfTogeyAuLi4ke2dldFJDS2V5c1Zhck5hbWUobG9jYWxlKX0sIC4uLiR7bG9jYWxlfSB9LGApXG4gICAgLmpvaW4oXCJcXG5cIil9XG59O1xuXG50eXBlIFNEUmV0dXJuVHlwZTxLIGV4dGVuZHMgRGljdEtleT4gPSBNZXJnZWREaWN0aW9uYXJ5W0tdIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIFApID0+IHN0cmluZ1xuICA/ICguLi5hcmdzOiBQKSA9PiBMb2NhbGl6ZWRTdHJpbmdcbiAgOiBMb2NhbGl6ZWRTdHJpbmc7XG5cbmZ1bmN0aW9uIGdldERpY3RWYWx1ZTxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLLCBsb2NhbGU6IHN0cmluZyk6IFNEUmV0dXJuVHlwZTxLPiB7XG4gIC8vIDEuIOyngOygleuQnCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGNvbnN0IGRpY3QgPSBkaWN0aW9uYXJpZXNbbG9jYWxlXTtcbiAgaWYgKGRpY3Q/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdFtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMi4gZGVmYXVsdCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGlmIChsb2NhbGUgIT09IERFRkFVTFRfTE9DQUxFICYmIGRpY3Rpb25hcmllc1tERUZBVUxUX0xPQ0FMRV0/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdGlvbmFyaWVzW0RFRkFVTFRfTE9DQUxFXVtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMy4gc3VwcG9ydGVkIGxvY2FsZXMg7Iic7ZqMXG4gIGZvciAoY29uc3Qgc3VwcG9ydGVkTG9jYWxlIG9mIFNVUFBPUlRFRF9MT0NBTEVTKSB7XG4gICAgaWYgKHN1cHBvcnRlZExvY2FsZSAhPT0gbG9jYWxlICYmIHN1cHBvcnRlZExvY2FsZSAhPT0gREVGQVVMVF9MT0NBTEUpIHtcbiAgICAgIGlmIChkaWN0aW9uYXJpZXNbc3VwcG9ydGVkTG9jYWxlXT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGljdGlvbmFyaWVzW3N1cHBvcnRlZExvY2FsZV1ba2V5XSBhcyB1bmtub3duIGFzIFNEUmV0dXJuVHlwZTxLPjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA0LiDrqqjrkZAg7Iuk7YyoIOyLnCBrZXkg67CY7ZmYXG4gIHJldHVybiBrZXkgYXMgdW5rbm93biBhcyBTRFJldHVyblR5cGU8Sz47XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkg7ZWo7IiYXG4gKiBsb2NhbGXsl5Ag66ee64qUIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRChcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCLsoIDsnqVcIiAoTG9jYWxpemVkU3RyaW5nKVxuICogU0QoXCJ1c2VyLm5vdEZvdW5kXCIpKDEpICAvLyDihpIgXCLsobTsnqztlZjsp4Ag7JWK64qUIFVzZXIgSUQgMVwiIChMb2NhbGl6ZWRTdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTRDxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLKTogU0RSZXR1cm5UeXBlPEs+IHtcbiAgY29uc3QgbG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn1cblxuLyoqXG4gKiDtirnsoJUgbG9jYWxl7J2YIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWY64qUIO2VqOyImOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IEVOID0gU0QubG9jYWxlKFwiZW5cIik7XG4gKiBFTihcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCJTYXZlXCJcbiAqL1xuU0QubG9jYWxlID0gKGxvY2FsZTogKHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSkgPT4gPEsgZXh0ZW5kcyBEaWN0S2V5PihrZXk6IEspOiBTRFJldHVyblR5cGU8Sz4gPT4ge1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn07XG5cbi8vIExvY2FsaXplZCDqsIDriqXtlZwgQ29sdW1uIO2DgOyehSDqs4TsgrBcbnR5cGUgTG9jYWxpemVkQmFzZUNvbHVtbjxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCAmIHN0cmluZ106IEsgZXh0ZW5kcyBcXGBcXCR7aW5mZXIgQmFzZX1fXFwkeyh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl19XFxgID8gQmFzZSA6IEs7XG59W2tleW9mIFQgJiBzdHJpbmddO1xuXG4vKipcbiAqIGxvY2FsZeyXkCDrlLDrnbwg7KCB7KCI7ZWcIOy7rOufvCDqsJLsnYQg67CY7ZmY7ZWp64uI64ukLlxuICogRELsl5AgbmFtZSwgbmFtZV9rbywgbmFtZV9lbuyymOufvCBsb2NhbGl6ZWQgY29sdW1u7J20IOyeiOydhCDrlYwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIOyasOyEoOyInOychCAo7KeA7JuQIOuhnOy8gOydvOydgCBrby9qcC9lbuydtOqzoCwg7ISc67mE7Iqk7J2YIOq4sOuzuCDroZzsvIDsnbzsnYAga28sIOyCrOyaqeyekOydmCDroZzsvIDsnbzsnYAganDsnbwg65WMKTogY29sdW1uX2pwIOKGkiBjb2x1bW4g4oaSIGNvbHVtbl9rbyDihpIgY29sdW1uX2VuXG4gKiDsmrDshKDsiJzsnIQgKOyngOybkCDroZzsvIDsnbzsnYAga28vanAvZW7snbTqs6AsIOyEnOu5hOyKpOydmCDquLDrs7gg66Gc7LyA7J287J2AIGVuLCDsgqzsmqnsnpDsnZgg66Gc7LyA7J287J2AIGtv7J28IOuVjCk6IGNvbHVtbl9rbyDihpIgY29sdW1uIOKGkiBjb2x1bW5fZW4g4oaSIGNvbHVtbl9qcFxuICpcbiAqIEBleGFtcGxlXG4gKiBsb2NhbGl6ZWRDb2x1bW4odGFnLCBcIm5hbWVcIilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsaXplZENvbHVtbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIEsgZXh0ZW5kcyBMb2NhbGl6ZWRCYXNlQ29sdW1uPFQ+PihcbiAgcm93OiBULFxuICBjb2x1bW46IEssXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsb2NhbGUgPSBnZXRDdXJyZW50TG9jYWxlKCk7XG4gIGNvbnN0IG90aGVyTG9jYWxlcyA9IFNVUFBPUlRFRF9MT0NBTEVTLmZpbHRlcigobDogc3RyaW5nKSA9PiBsICE9PSBsb2NhbGUgJiYgbCAhPT0gREVGQVVMVF9MT0NBTEUpO1xuICBjb25zdCBsb2NhbGl6ZWRLZXkgPSAoY29sdW1uOiBLLCBsb2NhbGU6ICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0pID0+IFxcYFxcJHtjb2x1bW59X1xcJHtsb2NhbGV9XFxgO1xuICBjb25zdCBrZXlzID0gW1xuICAgIGxvY2FsaXplZEtleShjb2x1bW4sIGxvY2FsZSksXG4gICAgY29sdW1uLFxuICAgIGxvY2FsaXplZEtleShjb2x1bW4sIERFRkFVTFRfTE9DQUxFKSxcbiAgICAuLi5vdGhlckxvY2FsZXMubWFwKChsKSA9PiBsb2NhbGl6ZWRLZXkoY29sdW1uLCBsKSksXG4gIF07XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmICghKGtleSBpbiByb3cpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocm93W2tleV0gIT09IG51bGwgJiYgcm93W2tleV0gIT09IHVuZGVmaW5lZCAmJiByb3dba2V5XSAhPT0gXCJcIikge1xuICAgICAgcmV0dXJuIFN0cmluZyhyb3dba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFbnVt7J2YIGxvY2FsaXplZCBsYWJlbHPrpbwgUHJveHnroZwg67CY7ZmY7ZWp64uI64ukLlxuICogU2VsZWN0IOy7tO2PrOuEjO2KuCDrk7Hsl5DshJwgRW51bUxhYmVsW2tleV0g64yA7IugIOyCrOyaqe2VqeuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogU0QuZW51bUxhYmVscyhcIlRhZ09yZGVyQnlcIilba2V5XSAgLy8g4oaSIO2YhOyerCBsb2NhbGXsnZgg652867KoXG4gKi9cblNELmVudW1MYWJlbHMgPSAoZW51bU5hbWU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIExvY2FsaXplZFN0cmluZz4gPT4ge1xuICByZXR1cm4gbmV3IFByb3h5KHt9IGFzIFJlY29yZDxzdHJpbmcsIExvY2FsaXplZFN0cmluZz4sIHtcbiAgICBnZXQoXywga2V5OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGRpY3RLZXkgPSBcXGBlbnVtLlxcJHtlbnVtTmFtZX0uXFwke2tleX1cXGAgYXMgRGljdEtleTtcbiAgICAgIHJldHVybiBnZXREaWN0VmFsdWUoZGljdEtleSwgZ2V0Q3VycmVudExvY2FsZSgpKTtcbiAgICB9XG4gIH0pO1xufTtcbmAudHJpbSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCh1bmRlZmluZWQsIHRhcmdldCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICBjdXN0b21IZWFkZXJzOiBbXCIvKipcIiwgXCIgKiBAZ2VuZXJhdGVkXCIsIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsIFwiICovXCIsIFwiXCJdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogcmVhY3QtY29tcG9uZW50c+ydmCByYy1rZXlz66W8IOy2lOy2nO2VqVxuICAgKiBzb25hbXUvc3JjL2RpY3QvcmMta2V5cy50cyDtjIzsnbzsnZgg7IaM7IqkIOy9lOuTnOulvCDsp4HsoJEg7J297Ja07IScIOuwmO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0UkNLZXlzU291cmNlQ29kZSgpOiB7IGtvOiBzdHJpbmc7IGVuOiBzdHJpbmcgfSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJjLWtleXMudHMg7YyM7J28IOqyveuhnFxuICAgICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICAgIGNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShfX2ZpbGVuYW1lKTtcblxuICAgICAgLy8gZGlzdOyXkOyEnCDsi6TtlonrkKAg65WM64qUIHNyY+uhnCDqsr3roZwg67OA6rK9XG4gICAgICBjb25zdCBiYXNlUGF0aCA9IF9fZGlybmFtZS5pbmNsdWRlcyhcIi9kaXN0L1wiKVxuICAgICAgICA/IF9fZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIilcbiAgICAgICAgOiBfX2Rpcm5hbWU7XG5cbiAgICAgIGNvbnN0IHJjS2V5c1BhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIFwiLi4vLi4vZGljdC9yYy1rZXlzLnRzXCIpO1xuXG4gICAgICAvLyDtjIzsnbwg7J296riwXG4gICAgICBjb25zdCBzb3VyY2VDb2RlID0gZnMucmVhZEZpbGVTeW5jKHJjS2V5c1BhdGgsIFwidXRmLThcIik7XG5cbiAgICAgIC8vIHJjS2V5c0tvIOy2lOy2nCAo7KSR6rSE7Zi4IOy5tOyatO2MhSDrsKnsi50pXG4gICAgICBjb25zdCBrb0NvZGUgPSBleHRyYWN0T2JqZWN0RGVjbGFyYXRpb24oc291cmNlQ29kZSwgXCJyY0tleXNLb1wiKTtcblxuICAgICAgLy8gcmNLZXlzRW4g7LaU7LacICjspJHqtITtmLgg7Lm07Jq07YyFIOuwqeyLnSlcbiAgICAgIGNvbnN0IGVuQ29kZSA9IGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlLCBcInJjS2V5c0VuXCIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBrbzoga29Db2RlLnJlcGxhY2UoL15leHBvcnQgLywgXCJcIiksXG4gICAgICAgIGVuOiBlbkNvZGUucmVwbGFjZSgvXmV4cG9ydCAvLCBcIlwiKS5yZXBsYWNlKC8gc2F0aXNmaWVzIFJDS2V5cy8sIFwiIGFzIGNvbnN0XCIpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gcmMta2V5cyDtjIzsnbzsnbQg7JeG64qUIOqyveyasCDruYgg7L2U65OcIOuwmO2ZmFxuICAgICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcmMta2V5cyBzb3VyY2U6XCIsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtvOiBcImNvbnN0IHJjS2V5c0tvID0ge30gYXMgY29uc3Q7XCIsXG4gICAgICAgIGVuOiBcImNvbnN0IHJjS2V5c0VuID0ge30gYXMgY29uc3Q7XCIsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDrqqjrk6AgZW50aXR5Lmpzb27sl5DshJwgZW50aXR5IGxhYmVscyDstpTstpxcbiAgICogZW50aXR5Lmpzb27sl5DshJwg7KeB7KCRIOq0gOumrOuQmOuKlCDqsJLrp4wg7Y+s7ZWoICjsnpDrj5kg7IOd7ISxIOqwkiDsoJzsmbgpXG4gICAqIC0gZW50aXR5LntlbnRpdHlJZH06IGVudGl0eSB0aXRsZVxuICAgKiAtIGVudGl0eS57ZW50aXR5SWR9Lntwcm9wTmFtZX06IHByb3AgZGVzY1xuICAgKiAtIGVudW0ue0VudW1JZH0ue3ZhbHVlfTogZW51bSBsYWJlbFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0RW50aXR5TGFiZWxzKCk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIHtcbiAgICBjb25zdCBsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG5cbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICByZXR1cm4gbGFiZWxzO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAvLyBlbnRpdHkgdGl0bGUgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9YCwgdmFsdWU6IGVudGl0eS50aXRsZSB9KTtcblxuICAgICAgLy8gcHJvcCBsYWJlbHMgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBlbnRpdHkucHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3AuZGVzYykge1xuICAgICAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9LiR7cHJvcC5uYW1lfWAsIHZhbHVlOiBwcm9wLmRlc2MgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZW51bSBsYWJlbHMgKGVudGl0eS5qc29u7JeQ7IScIOq0gOumrClcbiAgICAgIGZvciAoY29uc3QgW2VudW1JZCwgZW51bUxhYmVsc01hcF0gb2YgT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3ZhbHVlLCBsYWJlbF0gb2YgT2JqZWN0LmVudHJpZXMoZW51bUxhYmVsc01hcCkpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaCh7IGtleTogYGVudW0uJHtlbnVtSWR9LiR7dmFsdWV9YCwgdmFsdWU6IGxhYmVsIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnRpdHlMYWJlbHPrpbwgVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmYXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlRW50aXR5TGFiZWxzQ29kZShsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdKTogc3RyaW5nIHtcbiAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiY29uc3QgZW50aXR5TGFiZWxzID0ge30gYXMgY29uc3Q7XCI7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IGxhYmVscy5tYXAoKHsga2V5LCB2YWx1ZSB9KSA9PiBgICBcIiR7a2V5fVwiOiBcIiR7dGhpcy5lc2NhcGVTdHJpbmcodmFsdWUpfVwiLGApO1xuXG4gICAgcmV0dXJuIGBjb25zdCBlbnRpdHlMYWJlbHMgPSB7XG4ke2VudHJpZXMuam9pbihcIlxcblwiKX1cbn0gYXMgY29uc3Q7YDtcbiAgfVxuXG4gIHByaXZhdGUgZXNjYXBlU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O2FBSTBDO3FCQUNrQjtjQUdOO2VB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
@@ -1 +1 @@
1
- {"version":3,"file":"services.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/services.template.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,qBAAa,kBAAmB,SAAQ,QAAQ;;IAK9C,gBAAgB;;;;IAOhB,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC;;;;;;;CA2VvC"}
1
+ {"version":3,"file":"services.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/services.template.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,qBAAa,kBAAmB,SAAQ,QAAQ;;IAK9C,gBAAgB;;;;IAOhB,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC;;;;;;;CAmZvC"}
@@ -137,11 +137,40 @@ export const ${methodName}QueryOptions = ${typeParamsDef}(${paramsDef}) => query
137
137
  `.trim());
138
138
  functions.push(`
139
139
  export const use${inflection.camelize(hookName)} = ${typeParamsDef}(${paramsDef}${paramsDef ? ", " : ""}options?: { enabled?: boolean }) =>
140
- useQuery({
140
+ useRefreshable(useQuery({
141
141
  ...${methodName}QueryOptions(${paramNames}),
142
142
  ...options
143
- });
143
+ }));
144
+ `.trim());
145
+ const resourceName = api.options.resourceName;
146
+ const isInfiniteTarget = !!resourceName && inflection.pluralize(resourceName) === resourceName && api.methodName === "findMany";
147
+ if (isInfiniteTarget) {
148
+ const infiniteMethodName = `${methodName}Infinite`;
149
+ const infiniteHookName = `use${inflection.camelize(hookName)}Infinite`;
150
+ functions.push(`
151
+ export const ${infiniteMethodName}QueryOptions = ${typeParamsDef}(${paramsDef}) => infiniteQueryOptions({
152
+ queryKey: ['${modelName}', '${methodName}', 'infinite'${paramNames ? `, ${paramNames}` : ""}],
153
+ queryFn: ({ pageParam }) => ${methodName}(${paramNames ? paramNames.replace(/\brawParams\b/, "{ ...rawParams, page: pageParam }") : ""}),
154
+ initialPageParam: 1 as number,
155
+ getNextPageParam: (lastPage, allPages) => {
156
+ const total = (lastPage as { total?: number })?.total ?? 0;
157
+ const loaded = allPages.reduce(
158
+ (sum, p) => sum + ((p as { rows?: unknown[] })?.rows?.length ?? 0),
159
+ 0,
160
+ );
161
+ return loaded < total ? allPages.length + 1 : undefined;
162
+ },
163
+ select: dedupeAndFlatten,
164
+ });
144
165
  `.trim());
166
+ functions.push(`
167
+ export const ${infiniteHookName} = ${typeParamsDef}(${paramsDef}${paramsDef ? ", " : ""}options?: { enabled?: boolean }) =>
168
+ useRefreshable(useInfiniteQuery({
169
+ ...${infiniteMethodName}QueryOptions(${paramNames}),
170
+ ...options
171
+ }));
172
+ `.trim());
173
+ }
145
174
  }
146
175
  if (clients.includes("tanstack-mutation")) {
147
176
  const hookName = inflection.camelize(api.methodName);
@@ -191,17 +220,22 @@ ${functions.join("\n\n")}
191
220
  if (listApi) {
192
221
  const hookName = inflection.camelize(assertDefined(listApi.options.resourceName), true);
193
222
  const useHookName = `use${inflection.camelize(hookName)}`;
223
+ const useHookInfiniteName = `${useHookName}Infinite`;
194
224
  const listParamsType = `${names.capital}ListParams`;
195
225
  asyncIdConfigs.push(`
196
226
  // AsyncIdConfig: ${names.capital}
197
227
  export const ${names.capital}AsyncIdConfig: AsyncIdConfig<${names.capital}SubsetKey, ${names.capital}SubsetMapping, ${listParamsType}> = {
198
228
  placeholderKey: "entity.${names.capital}",
199
229
  useList: ${names.capital}Service.${useHookName},
230
+ useListInfinite: ${names.capital}Service.${useHookInfiniteName},
200
231
  };
201
232
  `.trim());
202
233
  }
203
234
  }
204
235
  const builtInTypeImports = Object.keys(BUILT_IN_TYPES).filter((typeKey) => importKeys.includes(typeKey)).map((typeKey) => `type ${typeKey}`);
236
+ const bodyForImportCheck = namespaces.join("\n\n");
237
+ const needsDedupeAndFlatten = bodyForImportCheck.includes("dedupeAndFlatten");
238
+ const needsUseRefreshable = bodyForImportCheck.includes("useRefreshable");
205
239
  const sonamuSharedImports = [
206
240
  "type ListResult",
207
241
  "type FilterQuery",
@@ -210,7 +244,9 @@ export const ${names.capital}AsyncIdConfig: AsyncIdConfig<${names.capital}Subset
210
244
  "type EventHandlers",
211
245
  "type SSEStreamOptions",
212
246
  "useSSEStream",
213
- "toFormData"
247
+ "toFormData",
248
+ ...needsDedupeAndFlatten ? ["dedupeAndFlatten"] : [],
249
+ ...needsUseRefreshable ? ["useRefreshable"] : []
214
250
  ].join(", ");
215
251
  const bodyParts = [...namespaces, ...asyncIdConfigs];
216
252
  return {
@@ -226,13 +262,14 @@ export const ${names.capital}AsyncIdConfig: AsyncIdConfig<${names.capital}Subset
226
262
  " * @generated",
227
263
  " * 직접 수정하지 마세요.",
228
264
  " */",
265
+ "",
229
266
  "/* oxlint-disable */",
230
267
  "",
231
- `import { queryOptions, useQuery, useMutation, type UseMutationOptions } from '@tanstack/react-query';`,
232
- `import type { AxiosProgressEvent } from 'axios';`,
268
+ `import { queryOptions, useQuery, useInfiniteQuery, infiniteQueryOptions, useMutation, type UseMutationOptions } from '@tanstack/react-query';`,
269
+ `import { type AxiosProgressEvent } from 'axios';`,
233
270
  `import qs from 'qs';`,
234
271
  `import { ${sonamuSharedImports} } from './sonamu.shared';`,
235
- `import type { AsyncIdConfig } from '@sonamu-kit/react-components/components';`
272
+ `import { type AsyncIdConfig } from '@sonamu-kit/react-components/components';`
236
273
  ]
237
274
  };
238
275
  }
@@ -240,4 +277,4 @@ export const ${names.capital}AsyncIdConfig: AsyncIdConfig<${names.capital}Subset
240
277
 
241
278
  //#endregion
242
279
  export { Template__services };
243
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMudGVtcGxhdGUuanMiLCJuYW1lcyI6WyJpbXBvcnRLZXlzOiBzdHJpbmdbXSIsIm5hbWVzcGFjZXM6IHN0cmluZ1tdIiwidHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdIiwiZnVuY3Rpb25zOiBzdHJpbmdbXSIsInBhcmFtc1dpdGhvdXRDb250ZXh0IiwiYXBpQmFzZVVybCIsImFzeW5jSWRDb25maWdzOiBzdHJpbmdbXSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvc2VydmljZXMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGRpZmYsIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7XG4gIGFwaVBhcmFtVG9Uc0NvZGUsXG4gIGFwaVBhcmFtVHlwZVRvVHNUeXBlLFxuICB1bndyYXBQcm9taXNlT25jZSxcbn0gZnJvbSBcIi4uLy4uL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbmltcG9ydCB7IHR5cGUgRXh0ZW5kZWRBcGkgfSBmcm9tIFwiLi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTLCB6b2RUeXBlVG9Uc1R5cGVEZWYgfSBmcm9tIFwiLi4vem9kLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3NlcnZpY2VzIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInNlcnZpY2VzXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIjp0YXJnZXQvc3JjL3NlcnZpY2VzXCIsXG4gICAgICBwYXRoOiBgc2VydmljZXMuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJzZXJ2aWNlc1wiXSkge1xuICAgIGNvbnN0IHsgYXBpcyB9ID0gU29uYW11LnN5bmNlcjtcblxuICAgIC8vIOuqqOuNuOuzhOuhnCDqt7jro7ntmZRcbiAgICBjb25zdCBhcGlzQnlNb2RlbCA9IG5ldyBNYXA8c3RyaW5nLCBFeHRlbmRlZEFwaVtdPigpO1xuICAgIGZvciAoY29uc3QgYXBpIG9mIGFwaXMpIHtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IGFwaS5tb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIik7XG4gICAgICBpZiAoIWFwaXNCeU1vZGVsLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgIGFwaXNCeU1vZGVsLnNldChtb2RlbE5hbWUsIFtdKTtcbiAgICAgIH1cbiAgICAgIGFwaXNCeU1vZGVsLmdldChtb2RlbE5hbWUpPy5wdXNoKGFwaSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBuYW1lc3BhY2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCB0eXBlUGFyYW1OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW21vZGVsTmFtZSwgbW9kZWxBcGlzXSBvZiBhcGlzQnlNb2RlbCkge1xuICAgICAgY29uc3QgZnVuY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwaSBvZiBtb2RlbEFwaXMpIHtcbiAgICAgICAgLy8gQHN0cmVhbSDrjbDsvZTroIjsnbTthLDqsIAg7J6I7Jy866m0IFNTRSDsiqTtirjrprwg7ZWo7IiYIOyDneyEsVxuICAgICAgICBpZiAoYXBpLnN0cmVhbU9wdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc0NvbnRleHQocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgYXBpQmFzZVVybCA9IGAke1NvbmFtdS5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0ke2FwaS5wYXRofWA7XG5cbiAgICAgICAgICBjb25zdCBtZXRob2ROYW1lU3RyZWFtID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgICA/IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lKX1gXG4gICAgICAgICAgICA6IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm1ldGhvZE5hbWUpfWA7XG4gICAgICAgICAgY29uc3QgbWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUobWV0aG9kTmFtZVN0cmVhbSwgdHJ1ZSk7XG5cbiAgICAgICAgICBjb25zdCBldmVudHNUeXBlRGVmID0gem9kVHlwZVRvVHNUeXBlRGVmKGFwaS5zdHJlYW1PcHRpb25zLmV2ZW50cyk7XG5cbiAgICAgICAgICAvLyDtjIzrnbzrr7jthLDrpbwg6rCd7LK0IO2Yle2DnOuhnCDsoJXsnZggKO2DgOyeheqzvCDsi6TsoJwg6rCSIOuqqOuRkOyXkCDsgqzsmqkpXG4gICAgICAgICAgY29uc3QgcGFyYW1zRGVmQXNPYmplY3QgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGB7ICR7cGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHAudHlwZSwgaW1wb3J0S2V5cyl9YCkuam9pbihcIiwgXCIpfSB9YFxuICAgICAgICAgICAgICA6IFwie31cIjtcblxuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGZ1bmN0aW9uICR7bWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZH0oXG4gIHBhcmFtczogJHtwYXJhbXNEZWZBc09iamVjdH0sXG4gIGhhbmRsZXJzOiBFdmVudEhhbmRsZXJzPCR7ZXZlbnRzVHlwZURlZn0gJiB7IGVuZD86ICgpID0+IHZvaWQgfT4sXG4gIG9wdGlvbnM6IFNTRVN0cmVhbU9wdGlvbnNcbikge1xuICByZXR1cm4gdXNlU1NFU3RyZWFtPCR7ZXZlbnRzVHlwZURlZn0+KFxcYCR7YXBpQmFzZVVybH1cXGAsIHBhcmFtcywgaGFuZGxlcnMsIG9wdGlvbnMpO1xufVxuICAgICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnRleHQg7KCc7Jm47ZWcIO2MjOudvOuvuO2EsFxuICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsoJXsnZhcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA9IGFwaS50eXBlUGFyYW1ldGVyc1xuICAgICAgICAgIC5tYXAoKHR5cGVQYXJhbSkgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUodHlwZVBhcmFtLCBpbXBvcnRLZXlzKSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpO1xuICAgICAgICBjb25zdCB0eXBlUGFyYW1zRGVmID0gdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA/IGA8JHt0eXBlUGFyYW1ldGVyc0FzVHNUeXBlfT5gIDogXCJcIjtcbiAgICAgICAgdHlwZVBhcmFtTmFtZXMgPSB0eXBlUGFyYW1OYW1lcy5jb25jYXQoYXBpLnR5cGVQYXJhbWV0ZXJzLm1hcCgodHApID0+IHRwLmlkKSk7XG5cbiAgICAgICAgLy8g7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCBwYXJhbXNEZWYgPSBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtc1dpdGhvdXRDb250ZXh0LCBpbXBvcnRLZXlzKTtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gcC5uYW1lKS5qb2luKFwiLCBcIik7XG5cbiAgICAgICAgLy8g66as7YS0IO2DgOyehSDsoJXsnZhcbiAgICAgICAgY29uc3QgcmV0dXJuVHlwZURlZiA9IGFwaVBhcmFtVHlwZVRvVHNUeXBlKFxuICAgICAgICAgIGFzc2VydERlZmluZWQodW53cmFwUHJvbWlzZU9uY2UoYXBpLnJldHVyblR5cGUpKSxcbiAgICAgICAgICBpbXBvcnRLZXlzLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIOq4sOuzuCBVUkxcbiAgICAgICAgY29uc3QgYXBpQmFzZVVybCA9IGAke1NvbmFtdS5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0ke2FwaS5wYXRofWA7XG5cbiAgICAgICAgY29uc3QgY2xpZW50cyA9IGFwaS5vcHRpb25zLmNsaWVudHMgfHwgW107XG5cbiAgICAgICAgLy8gMS4gYXhpb3Mg7ZWo7IiYIOyDneyEsVxuICAgICAgICAvLyByZXNvdXJjZU5hbWXsnbQg7J6I7Jy866m0IGdldCArIHJlc291cmNlTmFtZSDtmJXtg5zroZwg7ZWo7IiY66qFIOyDneyEsVxuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgPyBgZ2V0JHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgIDogYXBpLm1ldGhvZE5hbWU7XG5cbiAgICAgICAgLy8gYXhpb3MtbXVsdGlwYXJ0IOyymOumrCAo7YyM7J28IOyXheuhnOuTnClcbiAgICAgICAgaWYgKGNsaWVudHMuaW5jbHVkZXMoXCJheGlvcy1tdWx0aXBhcnRcIikpIHtcbiAgICAgICAgICBjb25zdCBmb3JtRGF0YUFwcGVuZCA9IGBmaWxlcy5mb3JFYWNoKGYgPT4geyBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlc1wiLCBmKTsgfSk7YDtcblxuICAgICAgICAgIGNvbnN0IG90aGVyUGFyYW1zQXBwZW5kID0gcGFyYW1zV2l0aG91dENvbnRleHRcbiAgICAgICAgICAgIC5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgIC8vIHByaW1pdGl2ZSDtg4DsnoXsnbjsp4Ag7LK07YGsXG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJpbWl0aXZlID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgcGFyYW0udHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJvb2xlYW5cIl0uaW5jbHVkZXMocGFyYW0udHlwZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlOiDsp4HsoJEgZm9ybURhdGEuYXBwZW5kXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBmb3JtRGF0YS5hcHBlbmQoJyR7cGFyYW0ubmFtZX0nLCBTdHJpbmcoJHtwYXJhbS5uYW1lfSkpO2A7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0OiB0b0Zvcm1EYXRhIOyCrOyaqVxuICAgICAgICAgICAgICAgIHJldHVybiBgdG9Gb3JtRGF0YSgke3BhcmFtLm5hbWV9LCBmb3JtRGF0YSwgJyR7cGFyYW0ubmFtZX0nKTtgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCJcXG4gICAgXCIpO1xuXG4gICAgICAgICAgY29uc3QgcGFyYW1zRGVmQ29tbWEgPSBwYXJhbXNEZWYgIT09IFwiXCIgPyBcIiwgXCIgOiBcIlwiO1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZX0ke3R5cGVQYXJhbXNEZWZ9KFxuICAke3BhcmFtc0RlZn0ke3BhcmFtc0RlZkNvbW1hfVxuICBmaWxlczogRmlsZVtdLFxuICBvblVwbG9hZFByb2dyZXNzPzogKHBlOiBBeGlvc1Byb2dyZXNzRXZlbnQpID0+IHZvaWRcbik6IFByb21pc2U8JHtyZXR1cm5UeXBlRGVmfT4ge1xuICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAke2Zvcm1EYXRhQXBwZW5kfVxuICAke290aGVyUGFyYW1zQXBwZW5kfVxuICByZXR1cm4gZmV0Y2goe1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogXFxgJHthcGlCYXNlVXJsfVxcYCxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gIH0pO1xufVxuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpLm9wdGlvbnMuaHR0cE1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgIGNvbnN0IGhhc1BhcmFtcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lfSR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gIHJldHVybiBmZXRjaCh7XG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIHVybDogXFxgJHthcGlCYXNlVXJsfSR7aGFzUGFyYW1zID8gYD9cXCR7cXMuc3RyaW5naWZ5KHsgJHtwYXJhbU5hbWVzfSB9KX1gIDogXCJcIn1cXGAsXG4gICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgfSk7XG59XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBoYXNQYXJhbXMgPSBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwO1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZX0ke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSk6IFByb21pc2U8JHtyZXR1cm5UeXBlRGVmfT4ge1xuICByZXR1cm4gZmV0Y2goe1xuICAgIG1ldGhvZDogXCIke2FwaS5vcHRpb25zLmh0dHBNZXRob2R9XCIsXG4gICAgdXJsOiBcXGAke2FwaUJhc2VVcmx9XFxgLFxuICAgICR7aGFzUGFyYW1zID8gYGRhdGE6IHsgJHtwYXJhbU5hbWVzfSB9LGAgOiBcIlwifVxuICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gIH0pO1xufVxuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBxdWVyeU9wdGlvbnMgKyB1c2VRdWVyeSAodGFuc3RhY2stcXVlcnkpXG4gICAgICAgIGlmIChjbGllbnRzLmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpIHtcbiAgICAgICAgICBjb25zdCBob29rTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgICAgPyBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSwgdHJ1ZSlcbiAgICAgICAgICAgIDogaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAvLyBxdWVyeU9wdGlvbnNcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCAke21ldGhvZE5hbWV9UXVlcnlPcHRpb25zID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pID0+IHF1ZXJ5T3B0aW9ucyh7XG4gIHF1ZXJ5S2V5OiBbJyR7bW9kZWxOYW1lfScsICcke21ldGhvZE5hbWV9JyR7cGFyYW1OYW1lcyA/IGAsICR7cGFyYW1OYW1lc31gIDogXCJcIn1dLFxuICBxdWVyeUZuOiAoKSA9PiAke21ldGhvZE5hbWV9KCR7cGFyYW1OYW1lc30pXG59KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gdXNlUXVlcnkgaG9va1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0IHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShob29rTmFtZSl9ID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0ke1xuICAgICAgICAgICAgICBwYXJhbXNEZWYgPyBcIiwgXCIgOiBcIlwiXG4gICAgICAgICAgICB9b3B0aW9ucz86IHsgZW5hYmxlZD86IGJvb2xlYW4gfSkgPT5cbiAgdXNlUXVlcnkoe1xuICAgIC4uLiR7bWV0aG9kTmFtZX1RdWVyeU9wdGlvbnMoJHtwYXJhbU5hbWVzfSksXG4gICAgLi4ub3B0aW9uc1xuICB9KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gdXNlTXV0YXRpb24gKHRhbnN0YWNrLW11dGF0aW9uKVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcInRhbnN0YWNrLW11dGF0aW9uXCIpKSB7XG4gICAgICAgICAgY29uc3QgaG9va05hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lKTtcbiAgICAgICAgICBjb25zdCBtdXRhdGlvblBhcmFtVHlwZSA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gYHsgJHtwYXJhbXNXaXRob3V0Q29udGV4dFxuICAgICAgICAgICAgICAgICAgLm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwLnR5cGUsIFtdKX1gKVxuICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX0gfWBcbiAgICAgICAgICAgICAgOiBcInZvaWRcIjtcbiAgICAgICAgICBjb25zdCBtdXRhdGlvblBhcmFtTmFtZXMgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gYHBhcmFtcy4ke3AubmFtZX1gKS5qb2luKFwiLCBcIilcbiAgICAgICAgICAgICAgOiBcIlwiO1xuXG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgY29uc3QgdXNlJHtob29rTmFtZX1NdXRhdGlvbiA9ICR7dHlwZVBhcmFtc0RlZn0oKSA9PiB1c2VNdXRhdGlvbih7XG4gIG11dGF0aW9uRm46IChwYXJhbXM6ICR7bXV0YXRpb25QYXJhbVR5cGV9KSA9PiAke21ldGhvZE5hbWV9KCR7bXV0YXRpb25QYXJhbU5hbWVzfSlcbn0pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiB1c2VNdXRhdGlvbiB3aXRoIG11bHRpcGFydCAodGFuc3RhY2stbXV0YXRpb24tbXVsdGlwYXJ0KVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiKSkge1xuICAgICAgICAgIGNvbnN0IGhvb2tOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgICAvLyDtjIzrnbzrr7jthLAg7YOA7J6FIOygleydmDogcGFyYW1zRGVm7JeQ7IScIO2DgOyeheunjCDstpTstpxcbiAgICAgICAgICAvLyBwYXJhbXNEZWYg7JiIOiBcInBhcmFtczogeyBjYXRlZ29yeTogc3RyaW5nIH1cIiDihpIgXCJ7IGNhdGVnb3J5OiBzdHJpbmcgfVwiXG4gICAgICAgICAgY29uc3QgcGFyYW1zVHlwZURlZiA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gcGFyYW1zRGVmLnNwbGl0KFwiOlwiKS5zbGljZSgxKS5qb2luKFwiOlwiKS50cmltKCkgLy8gXCJwYXJhbXM6IHsgY2F0ZWdvcnk6IHN0cmluZyB9XCIg4oaSIFwieyBjYXRlZ29yeTogc3RyaW5nIH1cIlxuICAgICAgICAgICAgICA6IFwiXCI7XG5cbiAgICAgICAgICBjb25zdCBtdXRhdGlvblBhcmFtVHlwZSA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gYHsgcGFyYW1zOiAke3BhcmFtc1R5cGVEZWZ9LCBmaWxlczogRmlsZVtdIH1gXG4gICAgICAgICAgICAgIDogYHsgZmlsZXM6IEZpbGVbXSB9YDtcblxuICAgICAgICAgIC8vIG11dGF0aW9uRm4g7Zi47LacIO2MjOudvOuvuO2EsFxuICAgICAgICAgIGNvbnN0IG11dGF0aW9uRm5DYWxsID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgJHttZXRob2ROYW1lfShwYXJhbXMucGFyYW1zLCBwYXJhbXMuZmlsZXMpYFxuICAgICAgICAgICAgICA6IGAke21ldGhvZE5hbWV9KHBhcmFtcy5maWxlcylgO1xuXG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgY29uc3QgdXNlJHtob29rTmFtZX1NdXRhdGlvbiA9ICR7dHlwZVBhcmFtc0RlZn0oXG4gIG9wdGlvbnM/OiBVc2VNdXRhdGlvbk9wdGlvbnM8JHtyZXR1cm5UeXBlRGVmfSwgRXJyb3IsICR7bXV0YXRpb25QYXJhbVR5cGV9PiAmIHtcbiAgICBvblVwbG9hZFByb2dyZXNzPzogKGU6IEF4aW9zUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZDtcbiAgfVxuKSA9PiB1c2VNdXRhdGlvbih7XG4gIG11dGF0aW9uRm46IChwYXJhbXM6ICR7bXV0YXRpb25QYXJhbVR5cGV9KSA9PiAke211dGF0aW9uRm5DYWxsfSxcbiAgcmV0cnk6IGZhbHNlLFxuICAuLi5vcHRpb25zLFxufSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuYW1lc3BhY2VzLnB1c2goXG4gICAgICAgIGBcbmV4cG9ydCBuYW1lc3BhY2UgJHttb2RlbE5hbWV9U2VydmljZSB7XG4ke2Z1bmN0aW9ucy5qb2luKFwiXFxuXFxuXCIpfVxufVxuICAgICAgYC50cmltKCksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFzeW5jSWRDb25maWcg7IOd7ISxIChFbnRpdHnrs4TroZwpXG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBhc3luY0lkQ29uZmlnczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgZW50aXR5SWRzKSB7XG4gICAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgICAvLyBBc3luY0lkQ29uZmln7JqpIOumrOyKpO2KuCDsobDtmowgQVBJIOywvuq4sFxuICAgICAgY29uc3QgbGlzdEFwaSA9IGFwaXNCeU1vZGVsLmdldChuYW1lcy5jYXBpdGFsKT8uZmluZCgoYXBpKSA9PiB7XG4gICAgICAgIC8vIHJlc291cmNlTmFtZeydtCDsl4bqsbDrgpggdGFuc3RhY2stcXVlcnnrpbwg7IKs7Jqp7ZWY7KeAIOyViuuKlCBBUEnripQg7KCc7Jm4XG4gICAgICAgIGlmICghYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lIHx8ICFhcGkub3B0aW9ucy5jbGllbnRzPy5pbmNsdWRlcyhcInRhbnN0YWNrLXF1ZXJ5XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlc291cmNlTmFtZeydtCDrs7XsiJjtmJXsnbTqs6Ag66mU7ISc65Oc66qF7J20IGZpbmRNYW557J24IEFQSVxuICAgICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWU7XG4gICAgICAgIHJldHVybiBpbmZsZWN0aW9uLnBsdXJhbGl6ZShyZXNvdXJjZU5hbWUpID09PSByZXNvdXJjZU5hbWUgJiYgYXBpLm1ldGhvZE5hbWUgPT09IFwiZmluZE1hbnlcIjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobGlzdEFwaSkge1xuICAgICAgICAvLyByZXNvdXJjZU5hbWXsl5DshJwgaG9vayDsnbTrpoQg7IOd7ISxICjquLDsobQg66Gc7KeB6rO8IOuPmeydvClcbiAgICAgICAgY29uc3QgaG9va05hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFzc2VydERlZmluZWQobGlzdEFwaS5vcHRpb25zLnJlc291cmNlTmFtZSksIHRydWUpO1xuICAgICAgICBjb25zdCB1c2VIb29rTmFtZSA9IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoaG9va05hbWUpfWA7XG5cbiAgICAgICAgLy8gTGlzdFBhcmFtcyDtg4DsnoXrqoUg6rWs7ISxXG4gICAgICAgIGNvbnN0IGxpc3RQYXJhbXNUeXBlID0gYCR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zYDtcblxuICAgICAgICBhc3luY0lkQ29uZmlncy5wdXNoKFxuICAgICAgICAgIGBcbi8vIEFzeW5jSWRDb25maWc6ICR7bmFtZXMuY2FwaXRhbH1cbmV4cG9ydCBjb25zdCAke25hbWVzLmNhcGl0YWx9QXN5bmNJZENvbmZpZzogQXN5bmNJZENvbmZpZzwke25hbWVzLmNhcGl0YWx9U3Vic2V0S2V5LCAke25hbWVzLmNhcGl0YWx9U3Vic2V0TWFwcGluZywgJHtsaXN0UGFyYW1zVHlwZX0+ID0ge1xuICBwbGFjZWhvbGRlcktleTogXCJlbnRpdHkuJHtuYW1lcy5jYXBpdGFsfVwiLFxuICB1c2VMaXN0OiAke25hbWVzLmNhcGl0YWx9U2VydmljZS4ke3VzZUhvb2tOYW1lfSxcbn07XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQlVJTFRfSU5fVFlQRVPsl5DshJwg7IKs7Jqp65CY64qUIO2DgOyeheuTpOydhCDtmZXsnbjtlZjsl6wg64+Z7KCB7Jy866GcIGltcG9ydCDqtazshLFcbiAgICBjb25zdCBidWlsdEluVHlwZUltcG9ydHMgPSBPYmplY3Qua2V5cyhCVUlMVF9JTl9UWVBFUylcbiAgICAgIC5maWx0ZXIoKHR5cGVLZXkpID0+IGltcG9ydEtleXMuaW5jbHVkZXModHlwZUtleSkpXG4gICAgICAubWFwKCh0eXBlS2V5KSA9PiBgdHlwZSAke3R5cGVLZXl9YCk7XG5cbiAgICAvLyBzb25hbXUuc2hhcmVk7JeQ7IScIGltcG9ydO2VoCDtla3rqqnrk6TsnYQg64+Z7KCB7Jy866GcIOq1rOyEsVxuICAgIGNvbnN0IHNvbmFtdVNoYXJlZEltcG9ydHMgPSBbXG4gICAgICBcInR5cGUgTGlzdFJlc3VsdFwiLFxuICAgICAgXCJ0eXBlIEZpbHRlclF1ZXJ5XCIsXG4gICAgICAuLi5idWlsdEluVHlwZUltcG9ydHMsXG4gICAgICBcImZldGNoXCIsXG4gICAgICBcInR5cGUgRXZlbnRIYW5kbGVyc1wiLFxuICAgICAgXCJ0eXBlIFNTRVN0cmVhbU9wdGlvbnNcIixcbiAgICAgIFwidXNlU1NFU3RyZWFtXCIsXG4gICAgICBcInRvRm9ybURhdGFcIixcbiAgICBdLmpvaW4oXCIsIFwiKTtcblxuICAgIC8vIGJvZHkg6rWs7ISxOiBuYW1lc3BhY2VzICsgYXN5bmNJZENvbmZpZ3NcbiAgICBjb25zdCBib2R5UGFydHMgPSBbLi4ubmFtZXNwYWNlcywgLi4uYXN5bmNJZENvbmZpZ3NdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keTogYm9keVBhcnRzLmpvaW4oXCJcXG5cXG5cIiksXG4gICAgICBpbXBvcnRLZXlzOiBkaWZmKHVuaXF1ZShpbXBvcnRLZXlzKSwgW1xuICAgICAgICAuLi50eXBlUGFyYW1OYW1lcyxcbiAgICAgICAgXCJMaXN0UmVzdWx0XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKEJVSUxUX0lOX1RZUEVTKSxcbiAgICAgIF0pLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgXCIgKi9cIixcbiAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgcXVlcnlPcHRpb25zLCB1c2VRdWVyeSwgdXNlTXV0YXRpb24sIHR5cGUgVXNlTXV0YXRpb25PcHRpb25zIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztgLFxuICAgICAgICBgaW1wb3J0IHR5cGUgeyBBeGlvc1Byb2dyZXNzRXZlbnQgfSBmcm9tICdheGlvcyc7YCxcbiAgICAgICAgYGltcG9ydCBxcyBmcm9tICdxcyc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11U2hhcmVkSW1wb3J0c30gfSBmcm9tICcuL3NvbmFtdS5zaGFyZWQnO2AsXG4gICAgICAgIGBpbXBvcnQgdHlwZSB7IEFzeW5jSWRDb25maWcgfSBmcm9tICdAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHMnO2AsXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7c0JBT21DO2FBRU87cUJBQ2tCO1lBRVg7WUFDQztlQUNYO29CQUMrQjtBQUV0RSxJQUFhLHFCQUFiLGNBQXdDLFNBQVM7Q0FDL0MsY0FBYztBQUNaLFFBQU0sV0FBVzs7Q0FHbkIsbUJBQW1CO0FBQ2pCLFNBQU87R0FDTCxRQUFRO0dBQ1IsTUFBTTtHQUNQOztDQUdILE9BQU8sSUFBaUM7RUFDdEMsTUFBTSxFQUFFLFNBQVMsT0FBTztFQUd4QixNQUFNLGNBQWMsSUFBSSxLQUE0QjtBQUNwRCxPQUFLLE1BQU0sT0FBTyxNQUFNO0dBQ3RC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
280
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMudGVtcGxhdGUuanMiLCJuYW1lcyI6WyJpbXBvcnRLZXlzOiBzdHJpbmdbXSIsIm5hbWVzcGFjZXM6IHN0cmluZ1tdIiwidHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdIiwiZnVuY3Rpb25zOiBzdHJpbmdbXSIsInBhcmFtc1dpdGhvdXRDb250ZXh0IiwiYXBpQmFzZVVybCIsImFzeW5jSWRDb25maWdzOiBzdHJpbmdbXSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvc2VydmljZXMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGRpZmYsIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7XG4gIGFwaVBhcmFtVG9Uc0NvZGUsXG4gIGFwaVBhcmFtVHlwZVRvVHNUeXBlLFxuICB1bndyYXBQcm9taXNlT25jZSxcbn0gZnJvbSBcIi4uLy4uL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbmltcG9ydCB7IHR5cGUgRXh0ZW5kZWRBcGkgfSBmcm9tIFwiLi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTLCB6b2RUeXBlVG9Uc1R5cGVEZWYgfSBmcm9tIFwiLi4vem9kLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3NlcnZpY2VzIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInNlcnZpY2VzXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIjp0YXJnZXQvc3JjL3NlcnZpY2VzXCIsXG4gICAgICBwYXRoOiBgc2VydmljZXMuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJzZXJ2aWNlc1wiXSkge1xuICAgIGNvbnN0IHsgYXBpcyB9ID0gU29uYW11LnN5bmNlcjtcblxuICAgIC8vIOuqqOuNuOuzhOuhnCDqt7jro7ntmZRcbiAgICBjb25zdCBhcGlzQnlNb2RlbCA9IG5ldyBNYXA8c3RyaW5nLCBFeHRlbmRlZEFwaVtdPigpO1xuICAgIGZvciAoY29uc3QgYXBpIG9mIGFwaXMpIHtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IGFwaS5tb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIik7XG4gICAgICBpZiAoIWFwaXNCeU1vZGVsLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgIGFwaXNCeU1vZGVsLnNldChtb2RlbE5hbWUsIFtdKTtcbiAgICAgIH1cbiAgICAgIGFwaXNCeU1vZGVsLmdldChtb2RlbE5hbWUpPy5wdXNoKGFwaSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBuYW1lc3BhY2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCB0eXBlUGFyYW1OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW21vZGVsTmFtZSwgbW9kZWxBcGlzXSBvZiBhcGlzQnlNb2RlbCkge1xuICAgICAgY29uc3QgZnVuY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwaSBvZiBtb2RlbEFwaXMpIHtcbiAgICAgICAgLy8gQHN0cmVhbSDrjbDsvZTroIjsnbTthLDqsIAg7J6I7Jy866m0IFNTRSDsiqTtirjrprwg7ZWo7IiYIOyDneyEsVxuICAgICAgICBpZiAoYXBpLnN0cmVhbU9wdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc0NvbnRleHQocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgYXBpQmFzZVVybCA9IGAke1NvbmFtdS5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0ke2FwaS5wYXRofWA7XG5cbiAgICAgICAgICBjb25zdCBtZXRob2ROYW1lU3RyZWFtID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgICA/IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lKX1gXG4gICAgICAgICAgICA6IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm1ldGhvZE5hbWUpfWA7XG4gICAgICAgICAgY29uc3QgbWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUobWV0aG9kTmFtZVN0cmVhbSwgdHJ1ZSk7XG5cbiAgICAgICAgICBjb25zdCBldmVudHNUeXBlRGVmID0gem9kVHlwZVRvVHNUeXBlRGVmKGFwaS5zdHJlYW1PcHRpb25zLmV2ZW50cyk7XG5cbiAgICAgICAgICAvLyDtjIzrnbzrr7jthLDrpbwg6rCd7LK0IO2Yle2DnOuhnCDsoJXsnZggKO2DgOyeheqzvCDsi6TsoJwg6rCSIOuqqOuRkOyXkCDsgqzsmqkpXG4gICAgICAgICAgY29uc3QgcGFyYW1zRGVmQXNPYmplY3QgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGB7ICR7cGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHAudHlwZSwgaW1wb3J0S2V5cyl9YCkuam9pbihcIiwgXCIpfSB9YFxuICAgICAgICAgICAgICA6IFwie31cIjtcblxuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGZ1bmN0aW9uICR7bWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZH0oXG4gIHBhcmFtczogJHtwYXJhbXNEZWZBc09iamVjdH0sXG4gIGhhbmRsZXJzOiBFdmVudEhhbmRsZXJzPCR7ZXZlbnRzVHlwZURlZn0gJiB7IGVuZD86ICgpID0+IHZvaWQgfT4sXG4gIG9wdGlvbnM6IFNTRVN0cmVhbU9wdGlvbnNcbikge1xuICByZXR1cm4gdXNlU1NFU3RyZWFtPCR7ZXZlbnRzVHlwZURlZn0+KFxcYCR7YXBpQmFzZVVybH1cXGAsIHBhcmFtcywgaGFuZGxlcnMsIG9wdGlvbnMpO1xufVxuICAgICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnRleHQg7KCc7Jm47ZWcIO2MjOudvOuvuO2EsFxuICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsoJXsnZhcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA9IGFwaS50eXBlUGFyYW1ldGVyc1xuICAgICAgICAgIC5tYXAoKHR5cGVQYXJhbSkgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUodHlwZVBhcmFtLCBpbXBvcnRLZXlzKSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpO1xuICAgICAgICBjb25zdCB0eXBlUGFyYW1zRGVmID0gdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA/IGA8JHt0eXBlUGFyYW1ldGVyc0FzVHNUeXBlfT5gIDogXCJcIjtcbiAgICAgICAgdHlwZVBhcmFtTmFtZXMgPSB0eXBlUGFyYW1OYW1lcy5jb25jYXQoYXBpLnR5cGVQYXJhbWV0ZXJzLm1hcCgodHApID0+IHRwLmlkKSk7XG5cbiAgICAgICAgLy8g7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCBwYXJhbXNEZWYgPSBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtc1dpdGhvdXRDb250ZXh0LCBpbXBvcnRLZXlzKTtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gcC5uYW1lKS5qb2luKFwiLCBcIik7XG5cbiAgICAgICAgLy8g66as7YS0IO2DgOyehSDsoJXsnZhcbiAgICAgICAgY29uc3QgcmV0dXJuVHlwZURlZiA9IGFwaVBhcmFtVHlwZVRvVHNUeXBlKFxuICAgICAgICAgIGFzc2VydERlZmluZWQodW53cmFwUHJvbWlzZU9uY2UoYXBpLnJldHVyblR5cGUpKSxcbiAgICAgICAgICBpbXBvcnRLZXlzLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIOq4sOuzuCBVUkxcbiAgICAgICAgY29uc3QgYXBpQmFzZVVybCA9IGAke1NvbmFtdS5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0ke2FwaS5wYXRofWA7XG5cbiAgICAgICAgY29uc3QgY2xpZW50cyA9IGFwaS5vcHRpb25zLmNsaWVudHMgfHwgW107XG5cbiAgICAgICAgLy8gMS4gYXhpb3Mg7ZWo7IiYIOyDneyEsVxuICAgICAgICAvLyByZXNvdXJjZU5hbWXsnbQg7J6I7Jy866m0IGdldCArIHJlc291cmNlTmFtZSDtmJXtg5zroZwg7ZWo7IiY66qFIOyDneyEsVxuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgPyBgZ2V0JHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgIDogYXBpLm1ldGhvZE5hbWU7XG5cbiAgICAgICAgLy8gYXhpb3MtbXVsdGlwYXJ0IOyymOumrCAo7YyM7J28IOyXheuhnOuTnClcbiAgICAgICAgaWYgKGNsaWVudHMuaW5jbHVkZXMoXCJheGlvcy1tdWx0aXBhcnRcIikpIHtcbiAgICAgICAgICBjb25zdCBmb3JtRGF0YUFwcGVuZCA9IGBmaWxlcy5mb3JFYWNoKGYgPT4geyBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlc1wiLCBmKTsgfSk7YDtcblxuICAgICAgICAgIGNvbnN0IG90aGVyUGFyYW1zQXBwZW5kID0gcGFyYW1zV2l0aG91dENvbnRleHRcbiAgICAgICAgICAgIC5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgIC8vIHByaW1pdGl2ZSDtg4DsnoXsnbjsp4Ag7LK07YGsXG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJpbWl0aXZlID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgcGFyYW0udHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJvb2xlYW5cIl0uaW5jbHVkZXMocGFyYW0udHlwZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlOiDsp4HsoJEgZm9ybURhdGEuYXBwZW5kXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBmb3JtRGF0YS5hcHBlbmQoJyR7cGFyYW0ubmFtZX0nLCBTdHJpbmcoJHtwYXJhbS5uYW1lfSkpO2A7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0OiB0b0Zvcm1EYXRhIOyCrOyaqVxuICAgICAgICAgICAgICAgIHJldHVybiBgdG9Gb3JtRGF0YSgke3BhcmFtLm5hbWV9LCBmb3JtRGF0YSwgJyR7cGFyYW0ubmFtZX0nKTtgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCJcXG4gICAgXCIpO1xuXG4gICAgICAgICAgY29uc3QgcGFyYW1zRGVmQ29tbWEgPSBwYXJhbXNEZWYgIT09IFwiXCIgPyBcIiwgXCIgOiBcIlwiO1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZX0ke3R5cGVQYXJhbXNEZWZ9KFxuICAke3BhcmFtc0RlZn0ke3BhcmFtc0RlZkNvbW1hfVxuICBmaWxlczogRmlsZVtdLFxuICBvblVwbG9hZFByb2dyZXNzPzogKHBlOiBBeGlvc1Byb2dyZXNzRXZlbnQpID0+IHZvaWRcbik6IFByb21pc2U8JHtyZXR1cm5UeXBlRGVmfT4ge1xuICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAke2Zvcm1EYXRhQXBwZW5kfVxuICAke290aGVyUGFyYW1zQXBwZW5kfVxuICByZXR1cm4gZmV0Y2goe1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogXFxgJHthcGlCYXNlVXJsfVxcYCxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gIH0pO1xufVxuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpLm9wdGlvbnMuaHR0cE1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgIGNvbnN0IGhhc1BhcmFtcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lfSR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gIHJldHVybiBmZXRjaCh7XG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIHVybDogXFxgJHthcGlCYXNlVXJsfSR7aGFzUGFyYW1zID8gYD9cXCR7cXMuc3RyaW5naWZ5KHsgJHtwYXJhbU5hbWVzfSB9KX1gIDogXCJcIn1cXGAsXG4gICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgfSk7XG59XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBoYXNQYXJhbXMgPSBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwO1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZX0ke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSk6IFByb21pc2U8JHtyZXR1cm5UeXBlRGVmfT4ge1xuICByZXR1cm4gZmV0Y2goe1xuICAgIG1ldGhvZDogXCIke2FwaS5vcHRpb25zLmh0dHBNZXRob2R9XCIsXG4gICAgdXJsOiBcXGAke2FwaUJhc2VVcmx9XFxgLFxuICAgICR7aGFzUGFyYW1zID8gYGRhdGE6IHsgJHtwYXJhbU5hbWVzfSB9LGAgOiBcIlwifVxuICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gIH0pO1xufVxuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBxdWVyeU9wdGlvbnMgKyB1c2VRdWVyeSAodGFuc3RhY2stcXVlcnkpXG4gICAgICAgIGlmIChjbGllbnRzLmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpIHtcbiAgICAgICAgICBjb25zdCBob29rTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgICAgPyBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSwgdHJ1ZSlcbiAgICAgICAgICAgIDogaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAvLyBxdWVyeU9wdGlvbnNcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCAke21ldGhvZE5hbWV9UXVlcnlPcHRpb25zID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pID0+IHF1ZXJ5T3B0aW9ucyh7XG4gIHF1ZXJ5S2V5OiBbJyR7bW9kZWxOYW1lfScsICcke21ldGhvZE5hbWV9JyR7cGFyYW1OYW1lcyA/IGAsICR7cGFyYW1OYW1lc31gIDogXCJcIn1dLFxuICBxdWVyeUZuOiAoKSA9PiAke21ldGhvZE5hbWV9KCR7cGFyYW1OYW1lc30pXG59KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gdXNlUXVlcnkgaG9vayAodXNlUmVmcmVzaGFibGXroZwg656Y7ZWR7ZW0IHJlZnJlc2gvaXNSZWZyZXNoaW5n7J2EIOq4sOuzuCDsoJzqs7UpXG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgY29uc3QgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGhvb2tOYW1lKX0gPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSR7XG4gICAgICAgICAgICAgIHBhcmFtc0RlZiA/IFwiLCBcIiA6IFwiXCJcbiAgICAgICAgICAgIH1vcHRpb25zPzogeyBlbmFibGVkPzogYm9vbGVhbiB9KSA9PlxuICB1c2VSZWZyZXNoYWJsZSh1c2VRdWVyeSh7XG4gICAgLi4uJHttZXRob2ROYW1lfVF1ZXJ5T3B0aW9ucygke3BhcmFtTmFtZXN9KSxcbiAgICAuLi5vcHRpb25zXG4gIH0pKTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gaW5maW5pdGVRdWVyeU9wdGlvbnMgKyB1c2VJbmZpbml0ZVF1ZXJ5IChBc3luY0lkQ29uZmlnLnVzZUxpc3RJbmZpbml0ZSDrjIDsg4Eg7KGw6rG0KVxuICAgICAgICAgIC8vIOyhsOqxtDogcmVzb3VyY2VOYW1l7J20IOuzteyImO2YleydtOqzoCBtZXRob2ROYW1lID09PSBcImZpbmRNYW55XCJcbiAgICAgICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWU7XG4gICAgICAgICAgY29uc3QgaXNJbmZpbml0ZVRhcmdldCA9XG4gICAgICAgICAgICAhIXJlc291cmNlTmFtZSAmJlxuICAgICAgICAgICAgaW5mbGVjdGlvbi5wbHVyYWxpemUocmVzb3VyY2VOYW1lKSA9PT0gcmVzb3VyY2VOYW1lICYmXG4gICAgICAgICAgICBhcGkubWV0aG9kTmFtZSA9PT0gXCJmaW5kTWFueVwiO1xuXG4gICAgICAgICAgaWYgKGlzSW5maW5pdGVUYXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZmluaXRlTWV0aG9kTmFtZSA9IGAke21ldGhvZE5hbWV9SW5maW5pdGVgO1xuICAgICAgICAgICAgY29uc3QgaW5maW5pdGVIb29rTmFtZSA9IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoaG9va05hbWUpfUluZmluaXRlYDtcblxuICAgICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCAke2luZmluaXRlTWV0aG9kTmFtZX1RdWVyeU9wdGlvbnMgPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSkgPT4gaW5maW5pdGVRdWVyeU9wdGlvbnMoe1xuICBxdWVyeUtleTogWycke21vZGVsTmFtZX0nLCAnJHttZXRob2ROYW1lfScsICdpbmZpbml0ZScke3BhcmFtTmFtZXMgPyBgLCAke3BhcmFtTmFtZXN9YCA6IFwiXCJ9XSxcbiAgcXVlcnlGbjogKHsgcGFnZVBhcmFtIH0pID0+ICR7bWV0aG9kTmFtZX0oJHtcbiAgICBwYXJhbU5hbWVzID8gcGFyYW1OYW1lcy5yZXBsYWNlKC9cXGJyYXdQYXJhbXNcXGIvLCBcInsgLi4ucmF3UGFyYW1zLCBwYWdlOiBwYWdlUGFyYW0gfVwiKSA6IFwiXCJcbiAgfSksXG4gIGluaXRpYWxQYWdlUGFyYW06IDEgYXMgbnVtYmVyLFxuICBnZXROZXh0UGFnZVBhcmFtOiAobGFzdFBhZ2UsIGFsbFBhZ2VzKSA9PiB7XG4gICAgY29uc3QgdG90YWwgPSAobGFzdFBhZ2UgYXMgeyB0b3RhbD86IG51bWJlciB9KT8udG90YWwgPz8gMDtcbiAgICBjb25zdCBsb2FkZWQgPSBhbGxQYWdlcy5yZWR1Y2UoXG4gICAgICAoc3VtLCBwKSA9PiBzdW0gKyAoKHAgYXMgeyByb3dzPzogdW5rbm93bltdIH0pPy5yb3dzPy5sZW5ndGggPz8gMCksXG4gICAgICAwLFxuICAgICk7XG4gICAgcmV0dXJuIGxvYWRlZCA8IHRvdGFsID8gYWxsUGFnZXMubGVuZ3RoICsgMSA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgc2VsZWN0OiBkZWR1cGVBbmRGbGF0dGVuLFxufSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0ICR7aW5maW5pdGVIb29rTmFtZX0gPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSR7XG4gICAgICAgICAgICAgICAgcGFyYW1zRGVmID8gXCIsIFwiIDogXCJcIlxuICAgICAgICAgICAgICB9b3B0aW9ucz86IHsgZW5hYmxlZD86IGJvb2xlYW4gfSkgPT5cbiAgdXNlUmVmcmVzaGFibGUodXNlSW5maW5pdGVRdWVyeSh7XG4gICAgLi4uJHtpbmZpbml0ZU1ldGhvZE5hbWV9UXVlcnlPcHRpb25zKCR7cGFyYW1OYW1lc30pLFxuICAgIC4uLm9wdGlvbnNcbiAgfSkpO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiB1c2VNdXRhdGlvbiAodGFuc3RhY2stbXV0YXRpb24pXG4gICAgICAgIGlmIChjbGllbnRzLmluY2x1ZGVzKFwidGFuc3RhY2stbXV0YXRpb25cIikpIHtcbiAgICAgICAgICBjb25zdCBob29rTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYXBpLm1ldGhvZE5hbWUpO1xuICAgICAgICAgIGNvbnN0IG11dGF0aW9uUGFyYW1UeXBlID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgeyAke3BhcmFtc1dpdGhvdXRDb250ZXh0XG4gICAgICAgICAgICAgICAgICAubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHAudHlwZSwgW10pfWApXG4gICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSB9YFxuICAgICAgICAgICAgICA6IFwidm9pZFwiO1xuICAgICAgICAgIGNvbnN0IG11dGF0aW9uUGFyYW1OYW1lcyA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gcGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBgcGFyYW1zLiR7cC5uYW1lfWApLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgICA6IFwiXCI7XG5cbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCB1c2Uke2hvb2tOYW1lfU11dGF0aW9uID0gJHt0eXBlUGFyYW1zRGVmfSgpID0+IHVzZU11dGF0aW9uKHtcbiAgbXV0YXRpb25GbjogKHBhcmFtczogJHttdXRhdGlvblBhcmFtVHlwZX0pID0+ICR7bWV0aG9kTmFtZX0oJHttdXRhdGlvblBhcmFtTmFtZXN9KVxufSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuIHVzZU11dGF0aW9uIHdpdGggbXVsdGlwYXJ0ICh0YW5zdGFjay1tdXRhdGlvbi1tdWx0aXBhcnQpXG4gICAgICAgIGlmIChjbGllbnRzLmluY2x1ZGVzKFwidGFuc3RhY2stbXV0YXRpb24tbXVsdGlwYXJ0XCIpKSB7XG4gICAgICAgICAgY29uc3QgaG9va05hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lKTtcblxuICAgICAgICAgIC8vIO2MjOudvOuvuO2EsCDtg4DsnoUg7KCV7J2YOiBwYXJhbXNEZWbsl5DshJwg7YOA7J6F66eMIOy2lOy2nFxuICAgICAgICAgIC8vIHBhcmFtc0RlZiDsmIg6IFwicGFyYW1zOiB7IGNhdGVnb3J5OiBzdHJpbmcgfVwiIOKGkiBcInsgY2F0ZWdvcnk6IHN0cmluZyB9XCJcbiAgICAgICAgICBjb25zdCBwYXJhbXNUeXBlRGVmID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBwYXJhbXNEZWYuc3BsaXQoXCI6XCIpLnNsaWNlKDEpLmpvaW4oXCI6XCIpLnRyaW0oKSAvLyBcInBhcmFtczogeyBjYXRlZ29yeTogc3RyaW5nIH1cIiDihpIgXCJ7IGNhdGVnb3J5OiBzdHJpbmcgfVwiXG4gICAgICAgICAgICAgIDogXCJcIjtcblxuICAgICAgICAgIGNvbnN0IG11dGF0aW9uUGFyYW1UeXBlID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgeyBwYXJhbXM6ICR7cGFyYW1zVHlwZURlZn0sIGZpbGVzOiBGaWxlW10gfWBcbiAgICAgICAgICAgICAgOiBgeyBmaWxlczogRmlsZVtdIH1gO1xuXG4gICAgICAgICAgLy8gbXV0YXRpb25GbiDtmLjstpwg7YyM652866+47YSwXG4gICAgICAgICAgY29uc3QgbXV0YXRpb25GbkNhbGwgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGAke21ldGhvZE5hbWV9KHBhcmFtcy5wYXJhbXMsIHBhcmFtcy5maWxlcylgXG4gICAgICAgICAgICAgIDogYCR7bWV0aG9kTmFtZX0ocGFyYW1zLmZpbGVzKWA7XG5cbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCB1c2Uke2hvb2tOYW1lfU11dGF0aW9uID0gJHt0eXBlUGFyYW1zRGVmfShcbiAgb3B0aW9ucz86IFVzZU11dGF0aW9uT3B0aW9uczwke3JldHVyblR5cGVEZWZ9LCBFcnJvciwgJHttdXRhdGlvblBhcmFtVHlwZX0+ICYge1xuICAgIG9uVXBsb2FkUHJvZ3Jlc3M/OiAoZTogQXhpb3NQcm9ncmVzc0V2ZW50KSA9PiB2b2lkO1xuICB9XG4pID0+IHVzZU11dGF0aW9uKHtcbiAgbXV0YXRpb25GbjogKHBhcmFtczogJHttdXRhdGlvblBhcmFtVHlwZX0pID0+ICR7bXV0YXRpb25GbkNhbGx9LFxuICByZXRyeTogZmFsc2UsXG4gIC4uLm9wdGlvbnMsXG59KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5hbWVzcGFjZXMucHVzaChcbiAgICAgICAgYFxuZXhwb3J0IG5hbWVzcGFjZSAke21vZGVsTmFtZX1TZXJ2aWNlIHtcbiR7ZnVuY3Rpb25zLmpvaW4oXCJcXG5cXG5cIil9XG59XG4gICAgICBgLnRyaW0oKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQXN5bmNJZENvbmZpZyDsg53shLEgKEVudGl0eeuzhOuhnClcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGFzeW5jSWRDb25maWdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBlbnRpdHlJZHMpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICAgIC8vIEFzeW5jSWRDb25maWfsmqkg66as7Iqk7Yq4IOyhsO2ajCBBUEkg7LC+6riwXG4gICAgICBjb25zdCBsaXN0QXBpID0gYXBpc0J5TW9kZWwuZ2V0KG5hbWVzLmNhcGl0YWwpPy5maW5kKChhcGkpID0+IHtcbiAgICAgICAgLy8gcmVzb3VyY2VOYW1l7J20IOyXhuqxsOuCmCB0YW5zdGFjay1xdWVyeeulvCDsgqzsmqntlZjsp4Ag7JWK64qUIEFQSeuKlCDsoJzsmbhcbiAgICAgICAgaWYgKCFhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUgfHwgIWFwaS5vcHRpb25zLmNsaWVudHM/LmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzb3VyY2VOYW1l7J20IOuzteyImO2YleydtOqzoCDrqZTshJzrk5zrqoXsnbQgZmluZE1hbnnsnbggQVBJXG4gICAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZTtcbiAgICAgICAgcmV0dXJuIGluZmxlY3Rpb24ucGx1cmFsaXplKHJlc291cmNlTmFtZSkgPT09IHJlc291cmNlTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gXCJmaW5kTWFueVwiO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChsaXN0QXBpKSB7XG4gICAgICAgIC8vIHJlc291cmNlTmFtZeyXkOyEnCBob29rIOydtOumhCDsg53shLEgKOq4sOyhtCDroZzsp4Hqs7wg64+Z7J28KVxuICAgICAgICBjb25zdCBob29rTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYXNzZXJ0RGVmaW5lZChsaXN0QXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lKSwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHVzZUhvb2tOYW1lID0gYHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShob29rTmFtZSl9YDtcbiAgICAgICAgY29uc3QgdXNlSG9va0luZmluaXRlTmFtZSA9IGAke3VzZUhvb2tOYW1lfUluZmluaXRlYDtcblxuICAgICAgICAvLyBMaXN0UGFyYW1zIO2DgOyeheuqhSDqtazshLFcbiAgICAgICAgY29uc3QgbGlzdFBhcmFtc1R5cGUgPSBgJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXNgO1xuXG4gICAgICAgIGFzeW5jSWRDb25maWdzLnB1c2goXG4gICAgICAgICAgYFxuLy8gQXN5bmNJZENvbmZpZzogJHtuYW1lcy5jYXBpdGFsfVxuZXhwb3J0IGNvbnN0ICR7bmFtZXMuY2FwaXRhbH1Bc3luY0lkQ29uZmlnOiBBc3luY0lkQ29uZmlnPCR7bmFtZXMuY2FwaXRhbH1TdWJzZXRLZXksICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRNYXBwaW5nLCAke2xpc3RQYXJhbXNUeXBlfT4gPSB7XG4gIHBsYWNlaG9sZGVyS2V5OiBcImVudGl0eS4ke25hbWVzLmNhcGl0YWx9XCIsXG4gIHVzZUxpc3Q6ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLiR7dXNlSG9va05hbWV9LFxuICB1c2VMaXN0SW5maW5pdGU6ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLiR7dXNlSG9va0luZmluaXRlTmFtZX0sXG59O1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJVSUxUX0lOX1RZUEVT7JeQ7IScIOyCrOyaqeuQmOuKlCDtg4DsnoXrk6TsnYQg7ZmV7J247ZWY7JesIOuPmeyggeycvOuhnCBpbXBvcnQg6rWs7ISxXG4gICAgY29uc3QgYnVpbHRJblR5cGVJbXBvcnRzID0gT2JqZWN0LmtleXMoQlVJTFRfSU5fVFlQRVMpXG4gICAgICAuZmlsdGVyKCh0eXBlS2V5KSA9PiBpbXBvcnRLZXlzLmluY2x1ZGVzKHR5cGVLZXkpKVxuICAgICAgLm1hcCgodHlwZUtleSkgPT4gYHR5cGUgJHt0eXBlS2V5fWApO1xuXG4gICAgLy8gc29uYW11LnNoYXJlZOyXkOyEnCBpbXBvcnTtlaAg7ZWt66qp65Ok7J2EIOuPmeyggeycvOuhnCDqtazshLFcbiAgICAvLyBib2R5IOusuOyekOyXtOydhCDquLDspIDsnLzroZwgaW5maW5pdGUg7ZuFIOyDneyEsSDsl6zrtoAg7YyQ64uoIChmaW5kTWFueSDrs7XsiJjtmJUg67aE6riw7JeQ7ISc66eMIOywuOyhsOuQqClcbiAgICBjb25zdCBib2R5Rm9ySW1wb3J0Q2hlY2sgPSBuYW1lc3BhY2VzLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgY29uc3QgbmVlZHNEZWR1cGVBbmRGbGF0dGVuID0gYm9keUZvckltcG9ydENoZWNrLmluY2x1ZGVzKFwiZGVkdXBlQW5kRmxhdHRlblwiKTtcbiAgICBjb25zdCBuZWVkc1VzZVJlZnJlc2hhYmxlID0gYm9keUZvckltcG9ydENoZWNrLmluY2x1ZGVzKFwidXNlUmVmcmVzaGFibGVcIik7XG5cbiAgICBjb25zdCBzb25hbXVTaGFyZWRJbXBvcnRzID0gW1xuICAgICAgXCJ0eXBlIExpc3RSZXN1bHRcIixcbiAgICAgIFwidHlwZSBGaWx0ZXJRdWVyeVwiLFxuICAgICAgLi4uYnVpbHRJblR5cGVJbXBvcnRzLFxuICAgICAgXCJmZXRjaFwiLFxuICAgICAgXCJ0eXBlIEV2ZW50SGFuZGxlcnNcIixcbiAgICAgIFwidHlwZSBTU0VTdHJlYW1PcHRpb25zXCIsXG4gICAgICBcInVzZVNTRVN0cmVhbVwiLFxuICAgICAgXCJ0b0Zvcm1EYXRhXCIsXG4gICAgICAuLi4obmVlZHNEZWR1cGVBbmRGbGF0dGVuID8gW1wiZGVkdXBlQW5kRmxhdHRlblwiXSA6IFtdKSxcbiAgICAgIC4uLihuZWVkc1VzZVJlZnJlc2hhYmxlID8gW1widXNlUmVmcmVzaGFibGVcIl0gOiBbXSksXG4gICAgXS5qb2luKFwiLCBcIik7XG5cbiAgICAvLyBib2R5IOq1rOyEsTogbmFtZXNwYWNlcyArIGFzeW5jSWRDb25maWdzXG4gICAgY29uc3QgYm9keVBhcnRzID0gWy4uLm5hbWVzcGFjZXMsIC4uLmFzeW5jSWRDb25maWdzXTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IGJvZHlQYXJ0cy5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogZGlmZih1bmlxdWUoaW1wb3J0S2V5cyksIFtcbiAgICAgICAgLi4udHlwZVBhcmFtTmFtZXMsXG4gICAgICAgIFwiTGlzdFJlc3VsdFwiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhCVUlMVF9JTl9UWVBFUyksXG4gICAgICBdKSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiLyogb3hsaW50LWRpc2FibGUgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgYGltcG9ydCB7IHF1ZXJ5T3B0aW9ucywgdXNlUXVlcnksIHVzZUluZmluaXRlUXVlcnksIGluZmluaXRlUXVlcnlPcHRpb25zLCB1c2VNdXRhdGlvbiwgdHlwZSBVc2VNdXRhdGlvbk9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO2AsXG4gICAgICAgIGBpbXBvcnQgeyB0eXBlIEF4aW9zUHJvZ3Jlc3NFdmVudCB9IGZyb20gJ2F4aW9zJztgLFxuICAgICAgICBgaW1wb3J0IHFzIGZyb20gJ3FzJztgLFxuICAgICAgICBgaW1wb3J0IHsgJHtzb25hbXVTaGFyZWRJbXBvcnRzfSB9IGZyb20gJy4vc29uYW11LnNoYXJlZCc7YCxcbiAgICAgICAgYGltcG9ydCB7IHR5cGUgQXN5bmNJZENvbmZpZyB9IGZyb20gJ0Bzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50cyc7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztzQkFPbUM7YUFFTztxQkFDa0I7WUFFWDtZQUNDO2VBQ1g7b0JBQytCO0FBRXRFLElBQWEscUJBQWIsY0FBd0MsU0FBUztDQUMvQyxjQUFjO0FBQ1osUUFBTSxXQUFXOztDQUduQixtQkFBbUI7QUFDakIsU0FBTztHQUNMLFFBQVE7R0FDUixNQUFNO0dBQ1A7O0NBR0gsT0FBTyxJQUFpQztFQUN0QyxNQUFNLEVBQUUsU0FBUyxPQUFPO0VBR3hCLE1BQU0sY0FBYyxJQUFJLEtBQTRCO0FBQ3BELE9BQUssTUFBTSxPQUFPLE1BQU07R0FDdEIsTUFBTSxZQUFZLElBQUksVUFBVSxRQUFRLFVBQVUsR0FBRyxDQUFDLFFBQVEsVUFBVSxHQUFHO0FBQzNFLE9BQUksQ0FBQyxZQUFZLElBQUksVUFBVSxFQUFFO0FBQy9CLGdCQUFZLElBQUksV0FBVyxFQUFFLENBQUM7O0FBRWhDLGVBQVks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
@@ -1 +1 @@
1
- {"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoCxB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;CAWjB,CAAC;AAoEX;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAuB7E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CA2F3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAkHrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+FxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+GtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,UAAU,EACrB,OAAO,GAAE,MAAe,GACvB,aAAa,CAmFf"}
1
+ {"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoCxB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;CAWjB,CAAC;AAoEX;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAuB7E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CA2F3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAkHrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAgGxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+GtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,UAAU,EACrB,OAAO,GAAE,MAAe,GACvB,aAAa,CAmFf"}