@dollhousemcp/mcp-server 1.7.3 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/collection/CollectionBrowser.js +2 -2
  2. package/dist/collection/CollectionSearch.js +3 -3
  3. package/dist/collection/PersonaDetails.js +2 -2
  4. package/dist/config/ConfigManager.d.ts +20 -0
  5. package/dist/config/ConfigManager.d.ts.map +1 -1
  6. package/dist/config/ConfigManager.js +48 -4
  7. package/dist/config/ConfigWizard.d.ts +78 -0
  8. package/dist/config/ConfigWizard.d.ts.map +1 -0
  9. package/dist/config/ConfigWizard.js +370 -0
  10. package/dist/config/ConfigWizardCheck.d.ts +47 -0
  11. package/dist/config/ConfigWizardCheck.d.ts.map +1 -0
  12. package/dist/config/ConfigWizardCheck.js +208 -0
  13. package/dist/config/portfolioConfig.d.ts +40 -0
  14. package/dist/config/portfolioConfig.d.ts.map +1 -0
  15. package/dist/config/portfolioConfig.js +58 -0
  16. package/dist/config/wizardTemplates.d.ts +84 -0
  17. package/dist/config/wizardTemplates.d.ts.map +1 -0
  18. package/dist/config/wizardTemplates.js +195 -0
  19. package/dist/elements/BaseElement.d.ts +15 -0
  20. package/dist/elements/BaseElement.d.ts.map +1 -1
  21. package/dist/elements/BaseElement.js +38 -5
  22. package/dist/generated/version.d.ts +2 -2
  23. package/dist/generated/version.js +3 -3
  24. package/dist/handlers/ConfigHandler.d.ts +30 -0
  25. package/dist/handlers/ConfigHandler.d.ts.map +1 -1
  26. package/dist/handlers/ConfigHandler.js +149 -21
  27. package/dist/handlers/PortfolioPullHandler.d.ts +69 -0
  28. package/dist/handlers/PortfolioPullHandler.d.ts.map +1 -0
  29. package/dist/handlers/PortfolioPullHandler.js +340 -0
  30. package/dist/index.d.ts +4 -6
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +73 -52
  33. package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -1
  34. package/dist/portfolio/GitHubPortfolioIndexer.js +8 -5
  35. package/dist/portfolio/PortfolioIndexManager.d.ts +1 -1
  36. package/dist/portfolio/PortfolioIndexManager.js +2 -2
  37. package/dist/portfolio/PortfolioRepoManager.d.ts +16 -2
  38. package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -1
  39. package/dist/portfolio/PortfolioRepoManager.js +95 -18
  40. package/dist/portfolio/PortfolioSyncManager.d.ts.map +1 -1
  41. package/dist/portfolio/PortfolioSyncManager.js +23 -15
  42. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  43. package/dist/security/audit/config/suppressions.js +11 -1
  44. package/dist/server/ServerSetup.d.ts.map +1 -1
  45. package/dist/server/ServerSetup.js +11 -6
  46. package/dist/server/tools/CollectionTools.js +6 -6
  47. package/dist/server/tools/ConfigTools.js +2 -2
  48. package/dist/server/tools/ConfigToolsV2.js +5 -5
  49. package/dist/server/tools/PortfolioTools.d.ts.map +1 -1
  50. package/dist/server/tools/PortfolioTools.js +16 -5
  51. package/dist/server/types.d.ts +2 -0
  52. package/dist/server/types.d.ts.map +1 -1
  53. package/dist/server/types.js +1 -1
  54. package/dist/sync/PortfolioDownloader.d.ts +27 -0
  55. package/dist/sync/PortfolioDownloader.d.ts.map +1 -0
  56. package/dist/sync/PortfolioDownloader.js +120 -0
  57. package/dist/sync/PortfolioSyncComparer.d.ts +50 -0
  58. package/dist/sync/PortfolioSyncComparer.d.ts.map +1 -0
  59. package/dist/sync/PortfolioSyncComparer.js +158 -0
  60. package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -1
  61. package/dist/tools/portfolio/submitToPortfolioTool.js +6 -5
  62. package/dist/utils/TemplateRenderer.d.ts +63 -0
  63. package/dist/utils/TemplateRenderer.d.ts.map +1 -0
  64. package/dist/utils/TemplateRenderer.js +154 -0
  65. package/package.json +7 -6
@@ -43,15 +43,15 @@ export function getConfigToolsV2(server) {
43
43
  },
44
44
  {
45
45
  tool: {
46
- name: "sync_portfolio",
47
- description: "Sync elements between local portfolio and GitHub repository. USE THIS TO DOWNLOAD PERSONAS FROM GITHUB! When a user asks to 'download X persona' or 'get X from my portfolio', use operation:'download' with the element name. The system has FUZZY MATCHING - it will automatically find 'Verbose-Victorian-Scholar' even if you type 'verbose victorian scholar' or 'victorian scholar'. After downloading, use reload_elements then activate_element.",
46
+ name: "portfolio_element_manager",
47
+ description: "Manage individual elements between your local portfolio and GitHub repository. USE THIS TO DOWNLOAD/UPLOAD INDIVIDUAL PERSONAS, SKILLS, OR OTHER ELEMENTS! When a user asks to 'download X persona from my GitHub' or 'upload Y skill to GitHub', use this tool. Operations: 'download' (GitHub→local), 'upload' (local→GitHub), 'list-remote' (see what's on GitHub), 'compare' (diff local vs GitHub). FUZZY MATCHING enabled - 'verbose victorian scholar' will find 'Verbose-Victorian-Scholar'. After downloading, use reload_elements then activate_element.",
48
48
  inputSchema: {
49
49
  type: "object",
50
50
  properties: {
51
51
  operation: {
52
52
  type: "string",
53
- enum: ["list-remote", "download", "upload", "compare", "bulk-download", "bulk-upload"],
54
- description: "The sync operation to perform. Use 'list-remote' to see what's available, 'download' to get a specific element (MOST COMMON FOR GETTING PERSONAS), 'upload' to send to GitHub"
53
+ enum: ["list-remote", "download", "upload", "compare"],
54
+ description: "The operation to perform. 'download' = get from GitHub to local, 'upload' = send from local to GitHub, 'list-remote' = see what's on GitHub, 'compare' = see differences"
55
55
  },
56
56
  element_name: {
57
57
  type: "string",
@@ -107,4 +107,4 @@ export function getConfigToolsV2(server) {
107
107
  }
108
108
  ];
109
109
  }
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnVG9vbHNWMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvdG9vbHMvQ29uZmlnVG9vbHNWMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUtILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFvQjtJQUNuRCxPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsV0FBVyxFQUFFLDJIQUEySDtnQkFDeEksV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUU7NEJBQ04sSUFBSSxFQUFFLFFBQVE7NEJBQ2QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7NEJBQzNELFdBQVcsRUFBRSxxQ0FBcUM7eUJBQ25EO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsUUFBUTs0QkFDZCxXQUFXLEVBQUUsc0hBQXNIO3lCQUNwSTt3QkFDRCxLQUFLLEVBQUU7NEJBQ0wsV0FBVyxFQUFFLHNGQUFzRjt5QkFDcEc7d0JBQ0QsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSw4REFBOEQ7eUJBQzVFO3dCQUNELE1BQU0sRUFBRTs0QkFDTixJQUFJLEVBQUUsUUFBUTs0QkFDZCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDOzRCQUN0QixXQUFXLEVBQUUsK0JBQStCO3lCQUM3Qzt3QkFDRCxJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLDZEQUE2RDt5QkFDM0U7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUNyQjthQUNGO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsV0FBVyxFQUFFLDBiQUEwYjtnQkFDdmMsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixTQUFTLEVBQUU7NEJBQ1QsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUM7NEJBQ3RGLFdBQVcsRUFBRSwrS0FBK0s7eUJBQzdMO3dCQUNELFlBQVksRUFBRTs0QkFDWixJQUFJLEVBQUUsUUFBUTs0QkFDZCxXQUFXLEVBQUUsZ05BQWdOO3lCQUM5Tjt3QkFDRCxZQUFZLEVBQUU7NEJBQ1osSUFBSSxFQUFFLFFBQVE7NEJBQ2QsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUM7NEJBQzVFLFdBQVcsRUFBRSx1RkFBdUY7eUJBQ3JHO3dCQUNELE1BQU0sRUFBRTs0QkFDTixJQUFJLEVBQUUsUUFBUTs0QkFDZCxVQUFVLEVBQUU7Z0NBQ1YsSUFBSSxFQUFFO29DQUNKLElBQUksRUFBRSxRQUFRO29DQUNkLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDO29DQUM1RSxXQUFXLEVBQUUsd0JBQXdCO2lDQUN0QztnQ0FDRCxNQUFNLEVBQUU7b0NBQ04sSUFBSSxFQUFFLFFBQVE7b0NBQ2QsV0FBVyxFQUFFLDJCQUEyQjtpQ0FDekM7Z0NBQ0QsYUFBYSxFQUFFO29DQUNiLElBQUksRUFBRSxRQUFRO29DQUNkLFdBQVcsRUFBRSx5Q0FBeUM7aUNBQ3ZEOzZCQUNGOzRCQUNELFdBQVcsRUFBRSw2QkFBNkI7eUJBQzNDO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsUUFBUTs0QkFDZCxVQUFVLEVBQUU7Z0NBQ1YsS0FBSyxFQUFFO29DQUNMLElBQUksRUFBRSxTQUFTO29DQUNmLFdBQVcsRUFBRSxpR0FBaUc7aUNBQy9HO2dDQUNELE9BQU8sRUFBRTtvQ0FDUCxJQUFJLEVBQUUsU0FBUztvQ0FDZixXQUFXLEVBQUUsdUNBQXVDO2lDQUNyRDtnQ0FDRCxlQUFlLEVBQUU7b0NBQ2YsSUFBSSxFQUFFLFNBQVM7b0NBQ2YsV0FBVyxFQUFFLCtDQUErQztpQ0FDN0Q7NkJBQ0Y7NEJBQ0QsV0FBVyxFQUFFLG1GQUFtRjt5QkFDakc7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUN4QjthQUNGO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1NBQ3pEO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gYW5kIHN5bmMgdG9vbCBkZWZpbml0aW9ucyBmb3IgdW5pZmllZCBtYW5hZ2VtZW50XG4gKi9cblxuaW1wb3J0IHsgVG9vbERlZmluaXRpb24gfSBmcm9tICcuL1Rvb2xSZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBJVG9vbEhhbmRsZXIgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdUb29sc1YyKHNlcnZlcjogSVRvb2xIYW5kbGVyKTogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogYW55IH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwiZG9sbGhvdXNlX2NvbmZpZ1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJNYW5hZ2UgRG9sbGhvdXNlTUNQIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFJlcGxhY2VzIHNldF91c2VyX2lkZW50aXR5LCBnZXRfdXNlcl9pZGVudGl0eSwgYW5kIGNsZWFyX3VzZXJfaWRlbnRpdHkgdG9vbHMuXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wiZ2V0XCIsIFwic2V0XCIsIFwicmVzZXRcIiwgXCJleHBvcnRcIiwgXCJpbXBvcnRcIiwgXCJ3aXphcmRcIl0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBjb25maWd1cmF0aW9uIGFjdGlvbiB0byBwZXJmb3JtXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXR0aW5nOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRvdC1ub3RhdGlvbiBwYXRoIHRvIHNldHRpbmcgKGUuZy4sICd1c2VyLnVzZXJuYW1lJywgJ3N5bmMuZW5hYmxlZCcpLiBSZXF1aXJlZCBmb3IgJ3NldCcgYWN0aW9uLCBvcHRpb25hbCBmb3IgJ2dldCcuXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJWYWx1ZSB0byBzZXQgKHJlcXVpcmVkIGZvciAnc2V0JyBhY3Rpb24pLiBDYW4gYmUgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG9yIG9iamVjdC5cIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlY3Rpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQ29uZmlndXJhdGlvbiBzZWN0aW9uIHRvIHJlc2V0IChvcHRpb25hbCBmb3IgJ3Jlc2V0JyBhY3Rpb24pXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wieWFtbFwiLCBcImpzb25cIl0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkV4cG9ydCBmb3JtYXQgKGRlZmF1bHQ6IHlhbWwpXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbmZpZ3VyYXRpb24gZGF0YSB0byBpbXBvcnQgKHJlcXVpcmVkIGZvciAnaW1wb3J0JyBhY3Rpb24pXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJhY3Rpb25cIl1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBhbnkpID0+IHNlcnZlci5oYW5kbGVDb25maWdPcGVyYXRpb24oYXJncylcbiAgICB9LFxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJzeW5jX3BvcnRmb2xpb1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJTeW5jIGVsZW1lbnRzIGJldHdlZW4gbG9jYWwgcG9ydGZvbGlvIGFuZCBHaXRIdWIgcmVwb3NpdG9yeS4gVVNFIFRISVMgVE8gRE9XTkxPQUQgUEVSU09OQVMgRlJPTSBHSVRIVUIhIFdoZW4gYSB1c2VyIGFza3MgdG8gJ2Rvd25sb2FkIFggcGVyc29uYScgb3IgJ2dldCBYIGZyb20gbXkgcG9ydGZvbGlvJywgdXNlIG9wZXJhdGlvbjonZG93bmxvYWQnIHdpdGggdGhlIGVsZW1lbnQgbmFtZS4gVGhlIHN5c3RlbSBoYXMgRlVaWlkgTUFUQ0hJTkcgLSBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgZmluZCAnVmVyYm9zZS1WaWN0b3JpYW4tU2Nob2xhcicgZXZlbiBpZiB5b3UgdHlwZSAndmVyYm9zZSB2aWN0b3JpYW4gc2Nob2xhcicgb3IgJ3ZpY3RvcmlhbiBzY2hvbGFyJy4gQWZ0ZXIgZG93bmxvYWRpbmcsIHVzZSByZWxvYWRfZWxlbWVudHMgdGhlbiBhY3RpdmF0ZV9lbGVtZW50LlwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGVudW06IFtcImxpc3QtcmVtb3RlXCIsIFwiZG93bmxvYWRcIiwgXCJ1cGxvYWRcIiwgXCJjb21wYXJlXCIsIFwiYnVsay1kb3dubG9hZFwiLCBcImJ1bGstdXBsb2FkXCJdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgc3luYyBvcGVyYXRpb24gdG8gcGVyZm9ybS4gVXNlICdsaXN0LXJlbW90ZScgdG8gc2VlIHdoYXQncyBhdmFpbGFibGUsICdkb3dubG9hZCcgdG8gZ2V0IGEgc3BlY2lmaWMgZWxlbWVudCAoTU9TVCBDT01NT04gRk9SIEdFVFRJTkcgUEVSU09OQVMpLCAndXBsb2FkJyB0byBzZW5kIHRvIEdpdEh1YlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZWxlbWVudF9uYW1lOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgb2YgdGhlIGVsZW1lbnQgKHJlcXVpcmVkIGZvciBkb3dubG9hZCwgdXBsb2FkLCBjb21wYXJlKS4gRlVaWlkgTUFUQ0hJTkcgRU5BQkxFRDogSnVzdCB0eXBlIHRoZSBuYW1lIG5hdHVyYWxseSAtICd2ZXJib3NlIHZpY3RvcmlhbiBzY2hvbGFyJywgJ1ZpY3RvcmlhbiBTY2hvbGFyJywgJ3ZlcmJvc2UtdmljdG9yaWFuJywgZXRjLiB3aWxsIGFsbCB3b3JrXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wicGVyc29uYXNcIiwgXCJza2lsbHNcIiwgXCJ0ZW1wbGF0ZXNcIiwgXCJhZ2VudHNcIiwgXCJtZW1vcmllc1wiLCBcImVuc2VtYmxlc1wiXSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVHlwZSBvZiBlbGVtZW50IChyZXF1aXJlZCBmb3IgZG93bmxvYWQsIHVwbG9hZCwgY29tcGFyZSkuIEZvciBwZXJzb25hcyB1c2UgJ3BlcnNvbmFzJ1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgZW51bTogW1wicGVyc29uYXNcIiwgXCJza2lsbHNcIiwgXCJ0ZW1wbGF0ZXNcIiwgXCJhZ2VudHNcIiwgXCJtZW1vcmllc1wiLCBcImVuc2VtYmxlc1wiXSxcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkZpbHRlciBieSBlbGVtZW50IHR5cGVcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXV0aG9yOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsdGVyIGJ5IGF1dGhvciB1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1cGRhdGVkX2FmdGVyOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsdGVyIGJ5IHVwZGF0ZSBkYXRlIChJU08gODYwMSBmb3JtYXQpXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkZpbHRlcnMgZm9yIGJ1bGsgb3BlcmF0aW9uc1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgZm9yY2U6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGVsZW1lbnRzLiBVc2UgZm9yY2U6dHJ1ZSB3aGVuIGRvd25sb2FkaW5nIHRvIHNraXAgY29uZmlybWF0aW9uIHByb21wdHNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZHJ5X3J1bjoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQcmV2aWV3IGNoYW5nZXMgd2l0aG91dCBhcHBseWluZyB0aGVtXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluY2x1ZGVfcHJpdmF0ZToge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJJbmNsdWRlIGVsZW1lbnRzIG1hcmtlZCBhcyBwcml2YXRlL2xvY2FsLW9ubHlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQWRkaXRpb25hbCBvcHRpb25zLiBGb3IgZG93bmxvYWRzLCB1c2Ugb3B0aW9uczp7Zm9yY2U6dHJ1ZX0gdG8gc2tpcCBjb25maXJtYXRpb25zXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIl1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBhbnkpID0+IHNlcnZlci5oYW5kbGVTeW5jT3BlcmF0aW9uKGFyZ3MpXG4gICAgfVxuICBdO1xufSJdfQ==
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnVG9vbHNWMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvdG9vbHMvQ29uZmlnVG9vbHNWMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUtILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFvQjtJQUNuRCxPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsV0FBVyxFQUFFLDJIQUEySDtnQkFDeEksV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUU7NEJBQ04sSUFBSSxFQUFFLFFBQVE7NEJBQ2QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7NEJBQzNELFdBQVcsRUFBRSxxQ0FBcUM7eUJBQ25EO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsUUFBUTs0QkFDZCxXQUFXLEVBQUUsc0hBQXNIO3lCQUNwSTt3QkFDRCxLQUFLLEVBQUU7NEJBQ0wsV0FBVyxFQUFFLHNGQUFzRjt5QkFDcEc7d0JBQ0QsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSw4REFBOEQ7eUJBQzVFO3dCQUNELE1BQU0sRUFBRTs0QkFDTixJQUFJLEVBQUUsUUFBUTs0QkFDZCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDOzRCQUN0QixXQUFXLEVBQUUsK0JBQStCO3lCQUM3Qzt3QkFDRCxJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLDZEQUE2RDt5QkFDM0U7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUNyQjthQUNGO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLDJCQUEyQjtnQkFDakMsV0FBVyxFQUFFLG9pQkFBb2lCO2dCQUNqakIsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixTQUFTLEVBQUU7NEJBQ1QsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDOzRCQUN0RCxXQUFXLEVBQUUsMEtBQTBLO3lCQUN4TDt3QkFDRCxZQUFZLEVBQUU7NEJBQ1osSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLGdOQUFnTjt5QkFDOU47d0JBQ0QsWUFBWSxFQUFFOzRCQUNaLElBQUksRUFBRSxRQUFROzRCQUNkLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDOzRCQUM1RSxXQUFXLEVBQUUsdUZBQXVGO3lCQUNyRzt3QkFDRCxNQUFNLEVBQUU7NEJBQ04sSUFBSSxFQUFFLFFBQVE7NEJBQ2QsVUFBVSxFQUFFO2dDQUNWLElBQUksRUFBRTtvQ0FDSixJQUFJLEVBQUUsUUFBUTtvQ0FDZCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQztvQ0FDNUUsV0FBVyxFQUFFLHdCQUF3QjtpQ0FDdEM7Z0NBQ0QsTUFBTSxFQUFFO29DQUNOLElBQUksRUFBRSxRQUFRO29DQUNkLFdBQVcsRUFBRSwyQkFBMkI7aUNBQ3pDO2dDQUNELGFBQWEsRUFBRTtvQ0FDYixJQUFJLEVBQUUsUUFBUTtvQ0FDZCxXQUFXLEVBQUUseUNBQXlDO2lDQUN2RDs2QkFDRjs0QkFDRCxXQUFXLEVBQUUsNkJBQTZCO3lCQUMzQzt3QkFDRCxPQUFPLEVBQUU7NEJBQ1AsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsVUFBVSxFQUFFO2dDQUNWLEtBQUssRUFBRTtvQ0FDTCxJQUFJLEVBQUUsU0FBUztvQ0FDZixXQUFXLEVBQUUsaUdBQWlHO2lDQUMvRztnQ0FDRCxPQUFPLEVBQUU7b0NBQ1AsSUFBSSxFQUFFLFNBQVM7b0NBQ2YsV0FBVyxFQUFFLHVDQUF1QztpQ0FDckQ7Z0NBQ0QsZUFBZSxFQUFFO29DQUNmLElBQUksRUFBRSxTQUFTO29DQUNmLFdBQVcsRUFBRSwrQ0FBK0M7aUNBQzdEOzZCQUNGOzRCQUNELFdBQVcsRUFBRSxtRkFBbUY7eUJBQ2pHO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQztpQkFDeEI7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztTQUN6RDtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGFuZCBzeW5jIHRvb2wgZGVmaW5pdGlvbnMgZm9yIHVuaWZpZWQgbWFuYWdlbWVudFxuICovXG5cbmltcG9ydCB7IFRvb2xEZWZpbml0aW9uIH0gZnJvbSAnLi9Ub29sUmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgSVRvb2xIYW5kbGVyIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnVG9vbHNWMihzZXJ2ZXI6IElUb29sSGFuZGxlcik6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IGFueSB9PiB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcImRvbGxob3VzZV9jb25maWdcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiTWFuYWdlIERvbGxob3VzZU1DUCBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBSZXBsYWNlcyBzZXRfdXNlcl9pZGVudGl0eSwgZ2V0X3VzZXJfaWRlbnRpdHksIGFuZCBjbGVhcl91c2VyX2lkZW50aXR5IHRvb2xzLlwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGVudW06IFtcImdldFwiLCBcInNldFwiLCBcInJlc2V0XCIsIFwiZXhwb3J0XCIsIFwiaW1wb3J0XCIsIFwid2l6YXJkXCJdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgY29uZmlndXJhdGlvbiBhY3Rpb24gdG8gcGVyZm9ybVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0dGluZzoge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJEb3Qtbm90YXRpb24gcGF0aCB0byBzZXR0aW5nIChlLmcuLCAndXNlci51c2VybmFtZScsICdzeW5jLmVuYWJsZWQnKS4gUmVxdWlyZWQgZm9yICdzZXQnIGFjdGlvbiwgb3B0aW9uYWwgZm9yICdnZXQnLlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVmFsdWUgdG8gc2V0IChyZXF1aXJlZCBmb3IgJ3NldCcgYWN0aW9uKS4gQ2FuIGJlIHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBvciBvYmplY3QuXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWN0aW9uOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbmZpZ3VyYXRpb24gc2VjdGlvbiB0byByZXNldCAob3B0aW9uYWwgZm9yICdyZXNldCcgYWN0aW9uKVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGVudW06IFtcInlhbWxcIiwgXCJqc29uXCJdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJFeHBvcnQgZm9ybWF0IChkZWZhdWx0OiB5YW1sKVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDb25maWd1cmF0aW9uIGRhdGEgdG8gaW1wb3J0IChyZXF1aXJlZCBmb3IgJ2ltcG9ydCcgYWN0aW9uKVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogW1wiYWN0aW9uXCJdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoYXJnczogYW55KSA9PiBzZXJ2ZXIuaGFuZGxlQ29uZmlnT3BlcmF0aW9uKGFyZ3MpXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwicG9ydGZvbGlvX2VsZW1lbnRfbWFuYWdlclwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJNYW5hZ2UgaW5kaXZpZHVhbCBlbGVtZW50cyBiZXR3ZWVuIHlvdXIgbG9jYWwgcG9ydGZvbGlvIGFuZCBHaXRIdWIgcmVwb3NpdG9yeS4gVVNFIFRISVMgVE8gRE9XTkxPQUQvVVBMT0FEIElORElWSURVQUwgUEVSU09OQVMsIFNLSUxMUywgT1IgT1RIRVIgRUxFTUVOVFMhIFdoZW4gYSB1c2VyIGFza3MgdG8gJ2Rvd25sb2FkIFggcGVyc29uYSBmcm9tIG15IEdpdEh1Yicgb3IgJ3VwbG9hZCBZIHNraWxsIHRvIEdpdEh1YicsIHVzZSB0aGlzIHRvb2wuIE9wZXJhdGlvbnM6ICdkb3dubG9hZCcgKEdpdEh1YuKGkmxvY2FsKSwgJ3VwbG9hZCcgKGxvY2Fs4oaSR2l0SHViKSwgJ2xpc3QtcmVtb3RlJyAoc2VlIHdoYXQncyBvbiBHaXRIdWIpLCAnY29tcGFyZScgKGRpZmYgbG9jYWwgdnMgR2l0SHViKS4gRlVaWlkgTUFUQ0hJTkcgZW5hYmxlZCAtICd2ZXJib3NlIHZpY3RvcmlhbiBzY2hvbGFyJyB3aWxsIGZpbmQgJ1ZlcmJvc2UtVmljdG9yaWFuLVNjaG9sYXInLiBBZnRlciBkb3dubG9hZGluZywgdXNlIHJlbG9hZF9lbGVtZW50cyB0aGVuIGFjdGl2YXRlX2VsZW1lbnQuXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBvcGVyYXRpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wibGlzdC1yZW1vdGVcIiwgXCJkb3dubG9hZFwiLCBcInVwbG9hZFwiLCBcImNvbXBhcmVcIl0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBvcGVyYXRpb24gdG8gcGVyZm9ybS4gJ2Rvd25sb2FkJyA9IGdldCBmcm9tIEdpdEh1YiB0byBsb2NhbCwgJ3VwbG9hZCcgPSBzZW5kIGZyb20gbG9jYWwgdG8gR2l0SHViLCAnbGlzdC1yZW1vdGUnID0gc2VlIHdoYXQncyBvbiBHaXRIdWIsICdjb21wYXJlJyA9IHNlZSBkaWZmZXJlbmNlc1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZWxlbWVudF9uYW1lOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgb2YgdGhlIGVsZW1lbnQgKHJlcXVpcmVkIGZvciBkb3dubG9hZCwgdXBsb2FkLCBjb21wYXJlKS4gRlVaWlkgTUFUQ0hJTkcgRU5BQkxFRDogSnVzdCB0eXBlIHRoZSBuYW1lIG5hdHVyYWxseSAtICd2ZXJib3NlIHZpY3RvcmlhbiBzY2hvbGFyJywgJ1ZpY3RvcmlhbiBTY2hvbGFyJywgJ3ZlcmJvc2UtdmljdG9yaWFuJywgZXRjLiB3aWxsIGFsbCB3b3JrXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wicGVyc29uYXNcIiwgXCJza2lsbHNcIiwgXCJ0ZW1wbGF0ZXNcIiwgXCJhZ2VudHNcIiwgXCJtZW1vcmllc1wiLCBcImVuc2VtYmxlc1wiXSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVHlwZSBvZiBlbGVtZW50IChyZXF1aXJlZCBmb3IgZG93bmxvYWQsIHVwbG9hZCwgY29tcGFyZSkuIEZvciBwZXJzb25hcyB1c2UgJ3BlcnNvbmFzJ1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgZW51bTogW1wicGVyc29uYXNcIiwgXCJza2lsbHNcIiwgXCJ0ZW1wbGF0ZXNcIiwgXCJhZ2VudHNcIiwgXCJtZW1vcmllc1wiLCBcImVuc2VtYmxlc1wiXSxcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkZpbHRlciBieSBlbGVtZW50IHR5cGVcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXV0aG9yOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsdGVyIGJ5IGF1dGhvciB1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1cGRhdGVkX2FmdGVyOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsdGVyIGJ5IHVwZGF0ZSBkYXRlIChJU08gODYwMSBmb3JtYXQpXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkZpbHRlcnMgZm9yIGJ1bGsgb3BlcmF0aW9uc1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgZm9yY2U6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGVsZW1lbnRzLiBVc2UgZm9yY2U6dHJ1ZSB3aGVuIGRvd25sb2FkaW5nIHRvIHNraXAgY29uZmlybWF0aW9uIHByb21wdHNcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZHJ5X3J1bjoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQcmV2aWV3IGNoYW5nZXMgd2l0aG91dCBhcHBseWluZyB0aGVtXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluY2x1ZGVfcHJpdmF0ZToge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJJbmNsdWRlIGVsZW1lbnRzIG1hcmtlZCBhcyBwcml2YXRlL2xvY2FsLW9ubHlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQWRkaXRpb25hbCBvcHRpb25zLiBGb3IgZG93bmxvYWRzLCB1c2Ugb3B0aW9uczp7Zm9yY2U6dHJ1ZX0gdG8gc2tpcCBjb25maXJtYXRpb25zXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIl1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBhbnkpID0+IHNlcnZlci5oYW5kbGVTeW5jT3BlcmF0aW9uKGFyZ3MpXG4gICAgfVxuICBdO1xufSJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"PortfolioTools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/PortfolioTools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA+C3C,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAEhD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAA;CAAE,CAAC,CAyNlH"}
1
+ {"version":3,"file":"PortfolioTools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/PortfolioTools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiD3C,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAEhD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAA;CAAE,CAAC,CAoOlH"}
@@ -84,7 +84,7 @@ export function getPortfolioTools(server) {
84
84
  {
85
85
  tool: {
86
86
  name: "sync_portfolio",
87
- description: "Sync ALL elements in your local portfolio with your GitHub repository. WARNING: This uploads EVERY element from your local portfolio to GitHub. Use 'submit_content' instead if you want to upload only specific elements. This bulk operation is useful for backing up your entire portfolio but may include private elements you don't want public.",
87
+ description: "Sync ALL elements in your local portfolio with your GitHub repository. By default uses 'additive' mode which only adds new items and never deletes (safest). Use 'mirror' mode for exact sync (with deletion confirmations). Use 'backup' mode to treat GitHub as backup source. ALWAYS run with dry_run:true first to preview changes. For individual elements, use 'portfolio_element_manager' instead.",
88
88
  inputSchema: {
89
89
  type: "object",
90
90
  properties: {
@@ -93,21 +93,32 @@ export function getPortfolioTools(server) {
93
93
  enum: ["push", "pull", "both"],
94
94
  description: "Sync direction: 'push' (upload to GitHub), 'pull' (download from GitHub), or 'both' (bidirectional sync). Defaults to 'push'.",
95
95
  },
96
+ mode: {
97
+ type: "string",
98
+ enum: ["additive", "mirror", "backup"],
99
+ description: "Sync mode: 'additive' (default, only adds new items, never deletes), 'mirror' (makes exact match, requires confirmation for deletions), 'backup' (GitHub as backup, only pulls missing items locally). Defaults to 'additive' for safety.",
100
+ },
96
101
  force: {
97
102
  type: "boolean",
98
- description: "Whether to force sync even if there are conflicts. Use with caution as this may overwrite changes.",
103
+ description: "Whether to force sync even if there are conflicts. Use with caution as this may overwrite changes. In 'mirror' mode, this skips deletion confirmations.",
99
104
  },
100
105
  dry_run: {
101
106
  type: "boolean",
102
- description: "Show what would be synced without actually performing the sync.",
107
+ description: "Show what would be synced without actually performing the sync. RECOMMENDED to run with dry_run:true first to preview changes.",
108
+ },
109
+ confirm_deletions: {
110
+ type: "boolean",
111
+ description: "In 'mirror' mode, require explicit confirmation for each deletion. Defaults to true unless force:true is set.",
103
112
  },
104
113
  },
105
114
  },
106
115
  },
107
116
  handler: (args) => server.syncPortfolio({
108
117
  direction: args?.direction || 'push',
118
+ mode: args?.mode || 'additive',
109
119
  force: args?.force || false,
110
- dryRun: args?.dry_run || false
120
+ dryRun: args?.dry_run || false,
121
+ confirmDeletions: args?.confirm_deletions !== false // Default true unless explicitly false
111
122
  })
112
123
  },
113
124
  {
@@ -218,4 +229,4 @@ export function getPortfolioTools(server) {
218
229
  ];
219
230
  return tools;
220
231
  }
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL1BvcnRmb2xpb1Rvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBb0RILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUFvQjtJQUNwRCxNQUFNLEtBQUssR0FBK0Q7UUFDeEU7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsV0FBVyxFQUFFLDhJQUE4STtnQkFDM0osV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixRQUFRLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLGtHQUFrRzt5QkFDaEg7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQXlCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztTQUMvRTtRQUNEO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLFdBQVcsRUFBRSwySkFBMko7Z0JBQ3hLLFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsZUFBZSxFQUFFOzRCQUNmLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSx3RkFBd0Y7eUJBQ3RHO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsU0FBUzs0QkFDZixXQUFXLEVBQUUscUVBQXFFO3lCQUNuRjt3QkFDRCxXQUFXLEVBQUU7NEJBQ1gsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLDBFQUEwRTt5QkFDeEY7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JB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QUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvcnRmb2xpbyBtYW5hZ2VtZW50IHRvb2wgZGVmaW5pdGlvbnMgYW5kIGhhbmRsZXJzXG4gKi9cblxuaW1wb3J0IHsgVG9vbERlZmluaXRpb24gfSBmcm9tICcuL1Rvb2xSZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBJVG9vbEhhbmRsZXIgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8vIFBvcnRmb2xpbyB0b29sIGFyZ3VtZW50IGludGVyZmFjZXNcbmludGVyZmFjZSBQb3J0Zm9saW9TdGF0dXNBcmdzIHtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJbml0UG9ydGZvbGlvQXJncyB7XG4gIHJlcG9zaXRvcnlfbmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZT86IGJvb2xlYW47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUG9ydGZvbGlvQ29uZmlnQXJncyB7XG4gIGF1dG9fc3luYz86IGJvb2xlYW47XG4gIGRlZmF1bHRfdmlzaWJpbGl0eT86ICdwdWJsaWMnIHwgJ3ByaXZhdGUnO1xuICBhdXRvX3N1Ym1pdD86IGJvb2xlYW47XG4gIHJlcG9zaXRvcnlfbmFtZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN5bmNQb3J0Zm9saW9BcmdzIHtcbiAgZGlyZWN0aW9uPzogJ3B1c2gnIHwgJ3B1bGwnIHwgJ2JvdGgnO1xuICBmb3JjZT86IGJvb2xlYW47XG4gIGRyeV9ydW4/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUG9ydGZvbGlvQXJncyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGZ1enp5X21hdGNoPzogYm9vbGVhbjtcbiAgbWF4X3Jlc3VsdHM/OiBudW1iZXI7XG4gIGluY2x1ZGVfa2V5d29yZHM/OiBib29sZWFuO1xuICBpbmNsdWRlX3RhZ3M/OiBib29sZWFuO1xuICBpbmNsdWRlX3RyaWdnZXJzPzogYm9vbGVhbjtcbiAgaW5jbHVkZV9kZXNjcmlwdGlvbnM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoQWxsQXJncyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIHNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgdHlwZT86IHN0cmluZztcbiAgcGFnZT86IG51bWJlcjtcbiAgcGFnZV9zaXplPzogbnVtYmVyO1xuICBzb3J0X2J5PzogJ3JlbGV2YW5jZScgfCAnc291cmNlJyB8ICduYW1lJyB8ICd2ZXJzaW9uJztcbn1cblxuLy8gVG9vbCBoYW5kbGVyIGZ1bmN0aW9uIHR5cGVcbnR5cGUgVG9vbEhhbmRsZXI8VD4gPSAoYXJnczogVCkgPT4gUHJvbWlzZTxhbnk+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9ydGZvbGlvVG9vbHMoc2VydmVyOiBJVG9vbEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlcjxhbnk+IH0+IHtcbiAgY29uc3QgdG9vbHM6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IFRvb2xIYW5kbGVyPGFueT4gfT4gPSBbXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcInBvcnRmb2xpb19zdGF0dXNcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQ2hlY2sgdGhlIHN0YXR1cyBvZiB5b3VyIEdpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBpbmNsdWRpbmcgcmVwb3NpdG9yeSBleGlzdGVuY2UsIGVsZW1lbnRzIGNvdW50LCBzeW5jIHN0YXR1cywgYW5kIGNvbmZpZ3VyYXRpb24gZGV0YWlscy5cIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkdpdEh1YiB1c2VybmFtZSB0byBjaGVjayBwb3J0Zm9saW8gZm9yLiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlcidzIHVzZXJuYW1lLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBQb3J0Zm9saW9TdGF0dXNBcmdzKSA9PiBzZXJ2ZXIucG9ydGZvbGlvU3RhdHVzKGFyZ3M/LnVzZXJuYW1lKVxuICAgIH0sXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcImluaXRfcG9ydGZvbGlvXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkluaXRpYWxpemUgYSBuZXcgR2l0SHViIHBvcnRmb2xpbyByZXBvc2l0b3J5IGZvciBzdG9yaW5nIHlvdXIgRG9sbGhvdXNlTUNQIGVsZW1lbnRzLiBDcmVhdGVzIHRoZSByZXBvc2l0b3J5IHN0cnVjdHVyZSB3aXRoIHByb3BlciBkaXJlY3RvcmllcyBhbmQgUkVBRE1FLlwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgcmVwb3NpdG9yeV9uYW1lOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgZm9yIHRoZSBwb3J0Zm9saW8gcmVwb3NpdG9yeS4gRGVmYXVsdHMgdG8gJ2RvbGxob3VzZS1wb3J0Zm9saW8nIGlmIG5vdCBzcGVjaWZpZWQuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZToge1xuICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiV2hldGhlciB0byBjcmVhdGUgYSBwcml2YXRlIHJlcG9zaXRvcnkuIERlZmF1bHRzIHRvIGZhbHNlIChwdWJsaWMpLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlJlcG9zaXRvcnkgZGVzY3JpcHRpb24uIERlZmF1bHRzIHRvICdNeSBEb2xsaG91c2VNQ1AgZWxlbWVudCBwb3J0Zm9saW8nLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBJbml0UG9ydGZvbGlvQXJncykgPT4gc2VydmVyLmluaXRQb3J0Zm9saW8oe1xuICAgICAgICByZXBvc2l0b3J5TmFtZTogYXJncz8ucmVwb3NpdG9yeV9uYW1lLFxuICAgICAgICBwcml2YXRlOiBhcmdzPy5wcml2YXRlLFxuICAgICAgICBkZXNjcmlwdGlvbjogYXJncz8uZGVzY3JpcHRpb25cbiAgICAgIH0pXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwicG9ydGZvbGlvX2NvbmZpZ1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJDb25maWd1cmUgcG9ydGZvbGlvIHNldHRpbmdzIHN1Y2ggYXMgYXV0by1zeW5jIHByZWZlcmVuY2VzLCBkZWZhdWx0IHZpc2liaWxpdHksIHN1Ym1pc3Npb24gc2V0dGluZ3MsIGFuZCByZXBvc2l0b3J5IHByZWZlcmVuY2VzLlwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYXV0b19zeW5jOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc3luYyBsb2NhbCBjaGFuZ2VzIHRvIEdpdEh1YiBwb3J0Zm9saW8uXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdF92aXNpYmlsaXR5OiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGVudW06IFtcInB1YmxpY1wiLCBcInByaXZhdGVcIl0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRlZmF1bHQgdmlzaWJpbGl0eSBmb3IgbmV3IHBvcnRmb2xpbyByZXBvc2l0b3JpZXMuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXV0b19zdWJtaXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsIFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc3VibWl0IGVsZW1lbnRzIHRvIHRoZSBjb2xsZWN0aW9uIHdoZW4gdGhleSdyZSBhZGRlZCB0byBwb3J0Zm9saW8uXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVwb3NpdG9yeV9uYW1lOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRlZmF1bHQgcmVwb3NpdG9yeSBuYW1lIGZvciBuZXcgcG9ydGZvbGlvcy5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoYXJnczogUG9ydGZvbGlvQ29uZmlnQXJncykgPT4gc2VydmVyLnBvcnRmb2xpb0NvbmZpZyh7XG4gICAgICAgIGF1dG9TeW5jOiBhcmdzPy5hdXRvX3N5bmMsXG4gICAgICAgIGRlZmF1bHRWaXNpYmlsaXR5OiBhcmdzPy5kZWZhdWx0X3Zpc2liaWxpdHksXG4gICAgICAgIGF1dG9TdWJtaXQ6IGFyZ3M/LmF1dG9fc3VibWl0LFxuICAgICAgICByZXBvc2l0b3J5TmFtZTogYXJncz8ucmVwb3NpdG9yeV9uYW1lXG4gICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcInN5bmNfcG9ydGZvbGlvXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlN5bmMgQUxMIGVsZW1lbnRzIGluIHlvdXIgbG9jYWwgcG9ydGZvbGlvIHdpdGggeW91ciBHaXRIdWIgcmVwb3NpdG9yeS4gV0FSTklORzogVGhpcyB1cGxvYWRzIEVWRVJZIGVsZW1lbnQgZnJvbSB5b3VyIGxvY2FsIHBvcnRmb2xpbyB0byBHaXRIdWIuIFVzZSAnc3VibWl0X2NvbnRlbnQnIGluc3RlYWQgaWYgeW91IHdhbnQgdG8gdXBsb2FkIG9ubHkgc3BlY2lmaWMgZWxlbWVudHMuIFRoaXMgYnVsayBvcGVyYXRpb24gaXMgdXNlZnVsIGZvciBiYWNraW5nIHVwIHlvdXIgZW50aXJlIHBvcnRmb2xpbyBidXQgbWF5IGluY2x1ZGUgcHJpdmF0ZSBlbGVtZW50cyB5b3UgZG9uJ3Qgd2FudCBwdWJsaWMuXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wicHVzaFwiLCBcInB1bGxcIiwgXCJib3RoXCJdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTeW5jIGRpcmVjdGlvbjogJ3B1c2gnICh1cGxvYWQgdG8gR2l0SHViKSwgJ3B1bGwnIChkb3dubG9hZCBmcm9tIEdpdEh1YiksIG9yICdib3RoJyAoYmlkaXJlY3Rpb25hbCBzeW5jKS4gRGVmYXVsdHMgdG8gJ3B1c2gnLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvcmNlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJXaGV0aGVyIHRvIGZvcmNlIHN5bmMgZXZlbiBpZiB0aGVyZSBhcmUgY29uZmxpY3RzLiBVc2Ugd2l0aCBjYXV0aW9uIGFzIHRoaXMgbWF5IG92ZXJ3cml0ZSBjaGFuZ2VzLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRyeV9ydW46IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlNob3cgd2hhdCB3b3VsZCBiZSBzeW5jZWQgd2l0aG91dCBhY3R1YWxseSBwZXJmb3JtaW5nIHRoZSBzeW5jLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBTeW5jUG9ydGZvbGlvQXJncykgPT4gc2VydmVyLnN5bmNQb3J0Zm9saW8oe1xuICAgICAgICBkaXJlY3Rpb246IGFyZ3M/LmRpcmVjdGlvbiB8fCAncHVzaCcsXG4gICAgICAgIGZvcmNlOiBhcmdzPy5mb3JjZSB8fCBmYWxzZSxcbiAgICAgICAgZHJ5UnVuOiBhcmdzPy5kcnlfcnVuIHx8IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcInNlYXJjaF9wb3J0Zm9saW9cIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiU2VhcmNoIHlvdXIgbG9jYWwgcG9ydGZvbGlvIGJ5IGNvbnRlbnQgbmFtZSwgbWV0YWRhdGEsIGtleXdvcmRzLCB0YWdzLCBvciBkZXNjcmlwdGlvbi4gVGhpcyBzZWFyY2hlcyB5b3VyIGxvY2FsIGVsZW1lbnRzIHVzaW5nIHRoZSBwb3J0Zm9saW8gaW5kZXggZm9yIGZhc3QgbWV0YWRhdGEtYmFzZWQgbG9va3Vwcy5cIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlNlYXJjaCBxdWVyeS4gQ2FuIG1hdGNoIGVsZW1lbnQgbmFtZXMsIGtleXdvcmRzLCB0YWdzLCB0cmlnZ2Vycywgb3IgZGVzY3JpcHRpb25zLiBFeGFtcGxlczogJ2NyZWF0aXZlIHdyaXRlcicsICdkZWJ1ZycsICdjb2RlIHJldmlldycsICdyZXNlYXJjaCcuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBlbnVtOiBbXCJwZXJzb25hc1wiLCBcInNraWxsc1wiLCBcInRlbXBsYXRlc1wiLCBcImFnZW50c1wiLCBcIm1lbW9yaWVzXCIsIFwiZW5zZW1ibGVzXCJdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJMaW1pdCBzZWFyY2ggdG8gc3BlY2lmaWMgZWxlbWVudCB0eXBlLiBJZiBub3Qgc3BlY2lmaWVkLCBzZWFyY2hlcyBhbGwgdHlwZXMuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnV6enlfbWF0Y2g6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkVuYWJsZSBmdXp6eSBtYXRjaGluZyBmb3IgYXBwcm94aW1hdGUgbmFtZSBtYXRjaGVzLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heF9yZXN1bHRzOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuLiBEZWZhdWx0cyB0byAyMC5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmNsdWRlX2tleXdvcmRzOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJJbmNsdWRlIGtleXdvcmQgbWF0Y2hpbmcgaW4gc2VhcmNoLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluY2x1ZGVfdGFnczoge1xuICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiSW5jbHVkZSB0YWcgbWF0Y2hpbmcgaW4gc2VhcmNoLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluY2x1ZGVfdHJpZ2dlcnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkluY2x1ZGUgdHJpZ2dlciB3b3JkIG1hdGNoaW5nIGluIHNlYXJjaCAoZm9yIHBlcnNvbmFzKS4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmNsdWRlX2Rlc2NyaXB0aW9uczoge1xuICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiSW5jbHVkZSBkZXNjcmlwdGlvbiB0ZXh0IG1hdGNoaW5nIGluIHNlYXJjaC4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogW1wicXVlcnlcIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKGFyZ3M6IFNlYXJjaFBvcnRmb2xpb0FyZ3MpID0+IHNlcnZlci5zZWFyY2hQb3J0Zm9saW8oe1xuICAgICAgICBxdWVyeTogYXJncy5xdWVyeSxcbiAgICAgICAgZWxlbWVudFR5cGU6IGFyZ3MudHlwZSBhcyBhbnksXG4gICAgICAgIGZ1enp5TWF0Y2g6IGFyZ3MuZnV6enlfbWF0Y2gsXG4gICAgICAgIG1heFJlc3VsdHM6IGFyZ3MubWF4X3Jlc3VsdHMsXG4gICAgICAgIGluY2x1ZGVLZXl3b3JkczogYXJncy5pbmNsdWRlX2tleXdvcmRzLFxuICAgICAgICBpbmNsdWRlVGFnczogYXJncy5pbmNsdWRlX3RhZ3MsXG4gICAgICAgIGluY2x1ZGVUcmlnZ2VyczogYXJncy5pbmNsdWRlX3RyaWdnZXJzLFxuICAgICAgICBpbmNsdWRlRGVzY3JpcHRpb25zOiBhcmdzLmluY2x1ZGVfZGVzY3JpcHRpb25zXG4gICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcInNlYXJjaF9hbGxcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiU2VhcmNoIGFjcm9zcyBhbGwgYXZhaWxhYmxlIHNvdXJjZXMgKGxvY2FsIHBvcnRmb2xpbywgR2l0SHViIHBvcnRmb2xpbywgYW5kIGNvbGxlY3Rpb24pIGZvciBlbGVtZW50cy4gVGhpcyBwcm92aWRlcyB1bmlmaWVkIHNlYXJjaCB3aXRoIGR1cGxpY2F0ZSBkZXRlY3Rpb24gYW5kIHZlcnNpb24gY29tcGFyaXNvbiBhY3Jvc3MgYWxsIHRocmVlIHRpZXJzIG9mIHRoZSBEb2xsaG91c2VNQ1AgZWNvc3lzdGVtLlwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU2VhcmNoIHF1ZXJ5LiBDYW4gbWF0Y2ggZWxlbWVudCBuYW1lcywga2V5d29yZHMsIHRhZ3MsIHRyaWdnZXJzLCBvciBkZXNjcmlwdGlvbnMgYWNyb3NzIGFsbCBzb3VyY2VzLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgZW51bTogW1wibG9jYWxcIiwgXCJnaXRodWJcIiwgXCJjb2xsZWN0aW9uXCJdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlNvdXJjZXMgdG8gc2VhcmNoLiBEZWZhdWx0cyB0byBbJ2xvY2FsJywgJ2dpdGh1YiddLiBJbmNsdWRlICdjb2xsZWN0aW9uJyB0byBzZWFyY2ggdGhlIGNvbW11bml0eSBjb2xsZWN0aW9uLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wicGVyc29uYXNcIiwgXCJza2lsbHNcIiwgXCJ0ZW1wbGF0ZXNcIiwgXCJhZ2VudHNcIiwgXCJtZW1vcmllc1wiLCBcImVuc2VtYmxlc1wiXSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTGltaXQgc2VhcmNoIHRvIHNwZWNpZmljIGVsZW1lbnQgdHlwZS4gSWYgbm90IHNwZWNpZmllZCwgc2VhcmNoZXMgYWxsIHR5cGVzLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUGFnZSBudW1iZXIgZm9yIHBhZ2luYXRpb24gKDEtYmFzZWQpLiBEZWZhdWx0cyB0byAxLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZToge1xuICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJOdW1iZXIgb2YgcmVzdWx0cyBwZXIgcGFnZS4gRGVmYXVsdHMgdG8gMjAuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBlbnVtOiBbXCJyZWxldmFuY2VcIiwgXCJzb3VyY2VcIiwgXCJuYW1lXCIsIFwidmVyc2lvblwiXSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU29ydCByZXN1bHRzIGJ5IGNyaXRlcmlhLiBEZWZhdWx0cyB0byAncmVsZXZhbmNlJy5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogW1wicXVlcnlcIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKGFyZ3M6IFNlYXJjaEFsbEFyZ3MpID0+IHNlcnZlci5zZWFyY2hBbGwoe1xuICAgICAgICBxdWVyeTogYXJncy5xdWVyeSxcbiAgICAgICAgc291cmNlczogYXJncy5zb3VyY2VzLFxuICAgICAgICBlbGVtZW50VHlwZTogYXJncy50eXBlIGFzIGFueSxcbiAgICAgICAgcGFnZTogYXJncy5wYWdlLFxuICAgICAgICBwYWdlU2l6ZTogYXJncy5wYWdlX3NpemUsXG4gICAgICAgIHNvcnRCeTogYXJncy5zb3J0X2J5IGFzIGFueVxuICAgICAgfSlcbiAgICB9XG4gIF07XG5cbiAgcmV0dXJuIHRvb2xzO1xufSJdfQ==
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL1BvcnRmb2xpb1Rvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBc0RILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUFvQjtJQUNwRCxNQUFNLEtBQUssR0FBK0Q7UUFDeEU7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsV0FBVyxFQUFFLDhJQUE4STtnQkFDM0osV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixRQUFRLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLGtHQUFrRzt5QkFDaEg7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQXlCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztTQUMvRTtRQUNEO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLFdBQVcsRUFBRSwySkFBMko7Z0JBQ3hLLFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsZUFBZSxFQUFFOzRCQUNmLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSx3RkFBd0Y7eUJBQ3RHO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsU0FBUzs0QkFDZixXQUFXLEVBQUUscUVBQXFFO3lCQUNuRjt3QkFDRCxXQUFXLEVBQUU7NEJBQ1gsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLDBFQUEwRTt5QkFDeEY7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ3pELGNBQWMsRUFBRSxJQUFJLEVBQUUsZUFBZTtnQkFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPO2dCQUN0QixXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVc7YUFDL0IsQ0FBQztTQUNIO1FBQ0Q7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsV0FBVyxFQUFFLGtJQUFrSTtnQkFDL0ksV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixTQUFTLEVBQUU7NEJBQ1QsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsV0FBVyxFQUFFLGtFQUFrRTt5QkFDaEY7d0JBQ0Qsa0JBQWtCLEVBQUU7NEJBQ2xCLElBQUksRUFBRSxRQUFROzRCQUNkLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7NEJBQzNCLFdBQVcsRUFBRSxvREFBb0Q7eUJBQ2xFO3dCQUNELFdBQVcsRUFBRTs0QkFDWCxJQUFJLEVBQUUsU0FBUzs0QkFDZixXQUFXLEVBQUUsNkZBQTZGO3lCQUMzRzt3QkFDRCxlQUFlLEVBQUU7NEJBQ2YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLDZDQUE2Qzt5QkFDM0Q7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQXlCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7Z0JBQzdELFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUztnQkFDekIsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQjtnQkFDM0MsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXO2dCQUM3QixjQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWU7YUFDdEMsQ0FBQztTQUNIO1FBQ0Q7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsV0FBVyxFQUFFLDJZQUEyWTtnQkFDeFosV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixTQUFTLEVBQUU7NEJBQ1QsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7NEJBQzlCLFdBQVcsRUFBRSwrSEFBK0g7eUJBQzdJO3dCQUNELElBQUksRUFBRTs0QkFDSixJQUFJLEVBQUUsUUFBUTs0QkFDZCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQzs0QkFDdEMsV0FBVyxFQUFFLDJPQUEyTzt5QkFDelA7d0JBQ0QsS0FBSyxFQUFFOzRCQUNMLElBQUksRUFBRSxTQUFTOzRCQUNmLFdBQVcsRUFBRSx5SkFBeUo7eUJBQ3ZLO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsU0FBUzs0QkFDZixXQUFXLEVBQUUsZ0lBQWdJO3lCQUM5STt3QkFDRCxpQkFBaUIsRUFBRTs0QkFDakIsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsV0FBVyxFQUFFLCtHQUErRzt5QkFDN0g7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ3pELFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLE1BQU07Z0JBQ3BDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLFVBQVU7Z0JBQzlCLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUs7Z0JBQzNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLEtBQUs7Z0JBQzlCLGdCQUFnQixFQUFFLElBQUksRUFBRSxpQkFBaUIsS0FBSyxLQUFLLENBQUMsdUNBQXVDO2FBQzVGLENBQUM7U0FDSDtRQUNEO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLFdBQVcsRUFBRSxxTEFBcUw7Z0JBQ2xNLFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsS0FBSyxFQUFFOzRCQUNMLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSxvSkFBb0o7eUJBQ2xLO3dCQUNELElBQUksRUFBRTs0QkFDSixJQUFJLEVBQUUsUUFBUTs0QkFDZCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQzs0QkFDNUUsV0FBVyxFQUFFLDhFQUE4RTt5QkFDNUY7d0JBQ0QsV0FBVyxFQUFFOzRCQUNYLElBQUksRUFBRSxTQUFTOzRCQUNmLFdBQVcsRUFBRSx1RUFBdUU7eUJBQ3JGO3dCQUNELFdBQVcsRUFBRTs0QkFDWCxJQUFJLEVBQUUsUUFBUTs0QkFDZCxXQUFXLEVBQUUsc0RBQXNEO3lCQUNwRTt3QkFDRCxnQkFBZ0IsRUFBRTs0QkFDaEIsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsV0FBVyxFQUFFLHVEQUF1RDt5QkFDckU7d0JBQ0QsWUFBWSxFQUFFOzRCQUNaLElBQUksRUFBRSxTQUFTOzRCQUNmLFdBQVcsRUFBRSxtREFBbUQ7eUJBQ2pFO3dCQUNELGdCQUFnQixFQUFFOzRCQUNoQixJQUFJLEVBQUUsU0FBUzs0QkFDZixXQUFXLEVBQUUsMkVBQTJFO3lCQUN6Rjt3QkFDRCxvQkFBb0IsRUFBRTs0QkFDcEIsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsV0FBVyxFQUFFLGdFQUFnRTt5QkFDOUU7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNwQjthQUNGO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBeUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDN0QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLElBQVc7Z0JBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDNUIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM1QixlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDdEMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUM5QixlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDdEMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjthQUMvQyxDQUFDO1NBQ0g7UUFDRDtZQUNFLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsV0FBVyxFQUFFLDBPQUEwTztnQkFDdlAsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixLQUFLLEVBQUU7NEJBQ0wsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLHNHQUFzRzt5QkFDcEg7d0JBQ0QsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRSxPQUFPOzRCQUNiLEtBQUssRUFBRTtnQ0FDTCxJQUFJLEVBQUUsUUFBUTtnQ0FDZCxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQzs2QkFDeEM7NEJBQ0QsV0FBVyxFQUFFLDhHQUE4Rzt5QkFDNUg7d0JBQ0QsSUFBSSxFQUFFOzRCQUNKLElBQUksRUFBRSxRQUFROzRCQUNkLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDOzRCQUM1RSxXQUFXLEVBQUUsOEVBQThFO3lCQUM1Rjt3QkFDRCxJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLHNEQUFzRDt5QkFDcEU7d0JBQ0QsU0FBUyxFQUFFOzRCQUNULElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSw2Q0FBNkM7eUJBQzNEO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsUUFBUTs0QkFDZCxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUM7NEJBQ2hELFdBQVcsRUFBRSxvREFBb0Q7eUJBQ2xFO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDcEI7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQW1CLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQ2pELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixXQUFXLEVBQUUsSUFBSSxDQUFDLElBQVc7Z0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBYzthQUM1QixDQUFDO1NBQ0g7S0FDRixDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb3J0Zm9saW8gbWFuYWdlbWVudCB0b29sIGRlZmluaXRpb25zIGFuZCBoYW5kbGVyc1xuICovXG5cbmltcG9ydCB7IFRvb2xEZWZpbml0aW9uIH0gZnJvbSAnLi9Ub29sUmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgSVRvb2xIYW5kbGVyIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vLyBQb3J0Zm9saW8gdG9vbCBhcmd1bWVudCBpbnRlcmZhY2VzXG5pbnRlcmZhY2UgUG9ydGZvbGlvU3RhdHVzQXJncyB7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSW5pdFBvcnRmb2xpb0FyZ3Mge1xuICByZXBvc2l0b3J5X25hbWU/OiBzdHJpbmc7XG4gIHByaXZhdGU/OiBib29sZWFuO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBvcnRmb2xpb0NvbmZpZ0FyZ3Mge1xuICBhdXRvX3N5bmM/OiBib29sZWFuO1xuICBkZWZhdWx0X3Zpc2liaWxpdHk/OiAncHVibGljJyB8ICdwcml2YXRlJztcbiAgYXV0b19zdWJtaXQ/OiBib29sZWFuO1xuICByZXBvc2l0b3J5X25hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTeW5jUG9ydGZvbGlvQXJncyB7XG4gIGRpcmVjdGlvbj86ICdwdXNoJyB8ICdwdWxsJyB8ICdib3RoJztcbiAgbW9kZT86ICdhZGRpdGl2ZScgfCAnbWlycm9yJyB8ICdiYWNrdXAnO1xuICBmb3JjZT86IGJvb2xlYW47XG4gIGRyeV9ydW4/OiBib29sZWFuO1xuICBjb25maXJtX2RlbGV0aW9ucz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTZWFyY2hQb3J0Zm9saW9BcmdzIHtcbiAgcXVlcnk6IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgZnV6enlfbWF0Y2g/OiBib29sZWFuO1xuICBtYXhfcmVzdWx0cz86IG51bWJlcjtcbiAgaW5jbHVkZV9rZXl3b3Jkcz86IGJvb2xlYW47XG4gIGluY2x1ZGVfdGFncz86IGJvb2xlYW47XG4gIGluY2x1ZGVfdHJpZ2dlcnM/OiBib29sZWFuO1xuICBpbmNsdWRlX2Rlc2NyaXB0aW9ucz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTZWFyY2hBbGxBcmdzIHtcbiAgcXVlcnk6IHN0cmluZztcbiAgc291cmNlcz86IHN0cmluZ1tdO1xuICB0eXBlPzogc3RyaW5nO1xuICBwYWdlPzogbnVtYmVyO1xuICBwYWdlX3NpemU/OiBudW1iZXI7XG4gIHNvcnRfYnk/OiAncmVsZXZhbmNlJyB8ICdzb3VyY2UnIHwgJ25hbWUnIHwgJ3ZlcnNpb24nO1xufVxuXG4vLyBUb29sIGhhbmRsZXIgZnVuY3Rpb24gdHlwZVxudHlwZSBUb29sSGFuZGxlcjxUPiA9IChhcmdzOiBUKSA9PiBQcm9taXNlPGFueT47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3J0Zm9saW9Ub29scyhzZXJ2ZXI6IElUb29sSGFuZGxlcik6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IFRvb2xIYW5kbGVyPGFueT4gfT4ge1xuICBjb25zdCB0b29sczogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogVG9vbEhhbmRsZXI8YW55PiB9PiA9IFtcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwicG9ydGZvbGlvX3N0YXR1c1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJDaGVjayB0aGUgc3RhdHVzIG9mIHlvdXIgR2l0SHViIHBvcnRmb2xpbyByZXBvc2l0b3J5IGluY2x1ZGluZyByZXBvc2l0b3J5IGV4aXN0ZW5jZSwgZWxlbWVudHMgY291bnQsIHN5bmMgc3RhdHVzLCBhbmQgY29uZmlndXJhdGlvbiBkZXRhaWxzLlwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiR2l0SHViIHVzZXJuYW1lIHRvIGNoZWNrIHBvcnRmb2xpbyBmb3IuIElmIG5vdCBwcm92aWRlZCwgdXNlcyB0aGUgYXV0aGVudGljYXRlZCB1c2VyJ3MgdXNlcm5hbWUuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKGFyZ3M6IFBvcnRmb2xpb1N0YXR1c0FyZ3MpID0+IHNlcnZlci5wb3J0Zm9saW9TdGF0dXMoYXJncz8udXNlcm5hbWUpXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwiaW5pdF9wb3J0Zm9saW9cIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiSW5pdGlhbGl6ZSBhIG5ldyBHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnkgZm9yIHN0b3JpbmcgeW91ciBEb2xsaG91c2VNQ1AgZWxlbWVudHMuIENyZWF0ZXMgdGhlIHJlcG9zaXRvcnkgc3RydWN0dXJlIHdpdGggcHJvcGVyIGRpcmVjdG9yaWVzIGFuZCBSRUFETUUuXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICByZXBvc2l0b3J5X25hbWU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTmFtZSBmb3IgdGhlIHBvcnRmb2xpbyByZXBvc2l0b3J5LiBEZWZhdWx0cyB0byAnZG9sbGhvdXNlLXBvcnRmb2xpbycgaWYgbm90IHNwZWNpZmllZC5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJXaGV0aGVyIHRvIGNyZWF0ZSBhIHByaXZhdGUgcmVwb3NpdG9yeS4gRGVmYXVsdHMgdG8gZmFsc2UgKHB1YmxpYykuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUmVwb3NpdG9yeSBkZXNjcmlwdGlvbi4gRGVmYXVsdHMgdG8gJ015IERvbGxob3VzZU1DUCBlbGVtZW50IHBvcnRmb2xpbycuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKGFyZ3M6IEluaXRQb3J0Zm9saW9BcmdzKSA9PiBzZXJ2ZXIuaW5pdFBvcnRmb2xpbyh7XG4gICAgICAgIHJlcG9zaXRvcnlOYW1lOiBhcmdzPy5yZXBvc2l0b3J5X25hbWUsXG4gICAgICAgIHByaXZhdGU6IGFyZ3M/LnByaXZhdGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhcmdzPy5kZXNjcmlwdGlvblxuICAgICAgfSlcbiAgICB9LFxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJwb3J0Zm9saW9fY29uZmlnXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbmZpZ3VyZSBwb3J0Zm9saW8gc2V0dGluZ3Mgc3VjaCBhcyBhdXRvLXN5bmMgcHJlZmVyZW5jZXMsIGRlZmF1bHQgdmlzaWJpbGl0eSwgc3VibWlzc2lvbiBzZXR0aW5ncywgYW5kIHJlcG9zaXRvcnkgcHJlZmVyZW5jZXMuXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhdXRvX3N5bmM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIldoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzeW5jIGxvY2FsIGNoYW5nZXMgdG8gR2l0SHViIHBvcnRmb2xpby5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0X3Zpc2liaWxpdHk6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wicHVibGljXCIsIFwicHJpdmF0ZVwiXSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRGVmYXVsdCB2aXNpYmlsaXR5IGZvciBuZXcgcG9ydGZvbGlvIHJlcG9zaXRvcmllcy5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdXRvX3N1Ym1pdDoge1xuICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIiwgXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIldoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzdWJtaXQgZWxlbWVudHMgdG8gdGhlIGNvbGxlY3Rpb24gd2hlbiB0aGV5J3JlIGFkZGVkIHRvIHBvcnRmb2xpby5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXBvc2l0b3J5X25hbWU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRGVmYXVsdCByZXBvc2l0b3J5IG5hbWUgZm9yIG5ldyBwb3J0Zm9saW9zLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBQb3J0Zm9saW9Db25maWdBcmdzKSA9PiBzZXJ2ZXIucG9ydGZvbGlvQ29uZmlnKHtcbiAgICAgICAgYXV0b1N5bmM6IGFyZ3M/LmF1dG9fc3luYyxcbiAgICAgICAgZGVmYXVsdFZpc2liaWxpdHk6IGFyZ3M/LmRlZmF1bHRfdmlzaWJpbGl0eSxcbiAgICAgICAgYXV0b1N1Ym1pdDogYXJncz8uYXV0b19zdWJtaXQsXG4gICAgICAgIHJlcG9zaXRvcnlOYW1lOiBhcmdzPy5yZXBvc2l0b3J5X25hbWVcbiAgICAgIH0pXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwic3luY19wb3J0Zm9saW9cIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiU3luYyBBTEwgZWxlbWVudHMgaW4geW91ciBsb2NhbCBwb3J0Zm9saW8gd2l0aCB5b3VyIEdpdEh1YiByZXBvc2l0b3J5LiBCeSBkZWZhdWx0IHVzZXMgJ2FkZGl0aXZlJyBtb2RlIHdoaWNoIG9ubHkgYWRkcyBuZXcgaXRlbXMgYW5kIG5ldmVyIGRlbGV0ZXMgKHNhZmVzdCkuIFVzZSAnbWlycm9yJyBtb2RlIGZvciBleGFjdCBzeW5jICh3aXRoIGRlbGV0aW9uIGNvbmZpcm1hdGlvbnMpLiBVc2UgJ2JhY2t1cCcgbW9kZSB0byB0cmVhdCBHaXRIdWIgYXMgYmFja3VwIHNvdXJjZS4gQUxXQVlTIHJ1biB3aXRoIGRyeV9ydW46dHJ1ZSBmaXJzdCB0byBwcmV2aWV3IGNoYW5nZXMuIEZvciBpbmRpdmlkdWFsIGVsZW1lbnRzLCB1c2UgJ3BvcnRmb2xpb19lbGVtZW50X21hbmFnZXInIGluc3RlYWQuXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wicHVzaFwiLCBcInB1bGxcIiwgXCJib3RoXCJdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTeW5jIGRpcmVjdGlvbjogJ3B1c2gnICh1cGxvYWQgdG8gR2l0SHViKSwgJ3B1bGwnIChkb3dubG9hZCBmcm9tIEdpdEh1YiksIG9yICdib3RoJyAoYmlkaXJlY3Rpb25hbCBzeW5jKS4gRGVmYXVsdHMgdG8gJ3B1c2gnLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vZGU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wiYWRkaXRpdmVcIiwgXCJtaXJyb3JcIiwgXCJiYWNrdXBcIl0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlN5bmMgbW9kZTogJ2FkZGl0aXZlJyAoZGVmYXVsdCwgb25seSBhZGRzIG5ldyBpdGVtcywgbmV2ZXIgZGVsZXRlcyksICdtaXJyb3InIChtYWtlcyBleGFjdCBtYXRjaCwgcmVxdWlyZXMgY29uZmlybWF0aW9uIGZvciBkZWxldGlvbnMpLCAnYmFja3VwJyAoR2l0SHViIGFzIGJhY2t1cCwgb25seSBwdWxscyBtaXNzaW5nIGl0ZW1zIGxvY2FsbHkpLiBEZWZhdWx0cyB0byAnYWRkaXRpdmUnIGZvciBzYWZldHkuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9yY2U6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIldoZXRoZXIgdG8gZm9yY2Ugc3luYyBldmVuIGlmIHRoZXJlIGFyZSBjb25mbGljdHMuIFVzZSB3aXRoIGNhdXRpb24gYXMgdGhpcyBtYXkgb3ZlcndyaXRlIGNoYW5nZXMuIEluICdtaXJyb3InIG1vZGUsIHRoaXMgc2tpcHMgZGVsZXRpb24gY29uZmlybWF0aW9ucy5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkcnlfcnVuOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTaG93IHdoYXQgd291bGQgYmUgc3luY2VkIHdpdGhvdXQgYWN0dWFsbHkgcGVyZm9ybWluZyB0aGUgc3luYy4gUkVDT01NRU5ERUQgdG8gcnVuIHdpdGggZHJ5X3J1bjp0cnVlIGZpcnN0IHRvIHByZXZpZXcgY2hhbmdlcy5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25maXJtX2RlbGV0aW9uczoge1xuICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiSW4gJ21pcnJvcicgbW9kZSwgcmVxdWlyZSBleHBsaWNpdCBjb25maXJtYXRpb24gZm9yIGVhY2ggZGVsZXRpb24uIERlZmF1bHRzIHRvIHRydWUgdW5sZXNzIGZvcmNlOnRydWUgaXMgc2V0LlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBTeW5jUG9ydGZvbGlvQXJncykgPT4gc2VydmVyLnN5bmNQb3J0Zm9saW8oe1xuICAgICAgICBkaXJlY3Rpb246IGFyZ3M/LmRpcmVjdGlvbiB8fCAncHVzaCcsXG4gICAgICAgIG1vZGU6IGFyZ3M/Lm1vZGUgfHwgJ2FkZGl0aXZlJyxcbiAgICAgICAgZm9yY2U6IGFyZ3M/LmZvcmNlIHx8IGZhbHNlLFxuICAgICAgICBkcnlSdW46IGFyZ3M/LmRyeV9ydW4gfHwgZmFsc2UsXG4gICAgICAgIGNvbmZpcm1EZWxldGlvbnM6IGFyZ3M/LmNvbmZpcm1fZGVsZXRpb25zICE9PSBmYWxzZSAvLyBEZWZhdWx0IHRydWUgdW5sZXNzIGV4cGxpY2l0bHkgZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwic2VhcmNoX3BvcnRmb2xpb1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJTZWFyY2ggeW91ciBsb2NhbCBwb3J0Zm9saW8gYnkgY29udGVudCBuYW1lLCBtZXRhZGF0YSwga2V5d29yZHMsIHRhZ3MsIG9yIGRlc2NyaXB0aW9uLiBUaGlzIHNlYXJjaGVzIHlvdXIgbG9jYWwgZWxlbWVudHMgdXNpbmcgdGhlIHBvcnRmb2xpbyBpbmRleCBmb3IgZmFzdCBtZXRhZGF0YS1iYXNlZCBsb29rdXBzLlwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU2VhcmNoIHF1ZXJ5LiBDYW4gbWF0Y2ggZWxlbWVudCBuYW1lcywga2V5d29yZHMsIHRhZ3MsIHRyaWdnZXJzLCBvciBkZXNjcmlwdGlvbnMuIEV4YW1wbGVzOiAnY3JlYXRpdmUgd3JpdGVyJywgJ2RlYnVnJywgJ2NvZGUgcmV2aWV3JywgJ3Jlc2VhcmNoJy5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGVudW06IFtcInBlcnNvbmFzXCIsIFwic2tpbGxzXCIsIFwidGVtcGxhdGVzXCIsIFwiYWdlbnRzXCIsIFwibWVtb3JpZXNcIiwgXCJlbnNlbWJsZXNcIl0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkxpbWl0IHNlYXJjaCB0byBzcGVjaWZpYyBlbGVtZW50IHR5cGUuIElmIG5vdCBzcGVjaWZpZWQsIHNlYXJjaGVzIGFsbCB0eXBlcy5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdXp6eV9tYXRjaDoge1xuICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRW5hYmxlIGZ1enp5IG1hdGNoaW5nIGZvciBhcHByb3hpbWF0ZSBuYW1lIG1hdGNoZXMuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4X3Jlc3VsdHM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyB0byByZXR1cm4uIERlZmF1bHRzIHRvIDIwLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluY2x1ZGVfa2V5d29yZHM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkluY2x1ZGUga2V5d29yZCBtYXRjaGluZyBpbiBzZWFyY2guIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jbHVkZV90YWdzOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJJbmNsdWRlIHRhZyBtYXRjaGluZyBpbiBzZWFyY2guIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jbHVkZV90cmlnZ2Vyczoge1xuICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiSW5jbHVkZSB0cmlnZ2VyIHdvcmQgbWF0Y2hpbmcgaW4gc2VhcmNoIChmb3IgcGVyc29uYXMpLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluY2x1ZGVfZGVzY3JpcHRpb25zOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJJbmNsdWRlIGRlc2NyaXB0aW9uIHRleHQgbWF0Y2hpbmcgaW4gc2VhcmNoLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJxdWVyeVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoYXJnczogU2VhcmNoUG9ydGZvbGlvQXJncykgPT4gc2VydmVyLnNlYXJjaFBvcnRmb2xpbyh7XG4gICAgICAgIHF1ZXJ5OiBhcmdzLnF1ZXJ5LFxuICAgICAgICBlbGVtZW50VHlwZTogYXJncy50eXBlIGFzIGFueSxcbiAgICAgICAgZnV6enlNYXRjaDogYXJncy5mdXp6eV9tYXRjaCxcbiAgICAgICAgbWF4UmVzdWx0czogYXJncy5tYXhfcmVzdWx0cyxcbiAgICAgICAgaW5jbHVkZUtleXdvcmRzOiBhcmdzLmluY2x1ZGVfa2V5d29yZHMsXG4gICAgICAgIGluY2x1ZGVUYWdzOiBhcmdzLmluY2x1ZGVfdGFncyxcbiAgICAgICAgaW5jbHVkZVRyaWdnZXJzOiBhcmdzLmluY2x1ZGVfdHJpZ2dlcnMsXG4gICAgICAgIGluY2x1ZGVEZXNjcmlwdGlvbnM6IGFyZ3MuaW5jbHVkZV9kZXNjcmlwdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwic2VhcmNoX2FsbFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJTZWFyY2ggYWNyb3NzIGFsbCBhdmFpbGFibGUgc291cmNlcyAobG9jYWwgcG9ydGZvbGlvLCBHaXRIdWIgcG9ydGZvbGlvLCBhbmQgY29sbGVjdGlvbikgZm9yIGVsZW1lbnRzLiBUaGlzIHByb3ZpZGVzIHVuaWZpZWQgc2VhcmNoIHdpdGggZHVwbGljYXRlIGRldGVjdGlvbiBhbmQgdmVyc2lvbiBjb21wYXJpc29uIGFjcm9zcyBhbGwgdGhyZWUgdGllcnMgb2YgdGhlIERvbGxob3VzZU1DUCBlY29zeXN0ZW0uXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTZWFyY2ggcXVlcnkuIENhbiBtYXRjaCBlbGVtZW50IG5hbWVzLCBrZXl3b3JkcywgdGFncywgdHJpZ2dlcnMsIG9yIGRlc2NyaXB0aW9ucyBhY3Jvc3MgYWxsIHNvdXJjZXMuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc291cmNlczoge1xuICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJsb2NhbFwiLCBcImdpdGh1YlwiLCBcImNvbGxlY3Rpb25cIl1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU291cmNlcyB0byBzZWFyY2guIERlZmF1bHRzIHRvIFsnbG9jYWwnLCAnZ2l0aHViJ10uIEluY2x1ZGUgJ2NvbGxlY3Rpb24nIHRvIHNlYXJjaCB0aGUgY29tbXVuaXR5IGNvbGxlY3Rpb24uXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBlbnVtOiBbXCJwZXJzb25hc1wiLCBcInNraWxsc1wiLCBcInRlbXBsYXRlc1wiLCBcImFnZW50c1wiLCBcIm1lbW9yaWVzXCIsIFwiZW5zZW1ibGVzXCJdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJMaW1pdCBzZWFyY2ggdG8gc3BlY2lmaWMgZWxlbWVudCB0eXBlLiBJZiBub3Qgc3BlY2lmaWVkLCBzZWFyY2hlcyBhbGwgdHlwZXMuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFnZToge1xuICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQYWdlIG51bWJlciBmb3IgcGFnaW5hdGlvbiAoMS1iYXNlZCkuIERlZmF1bHRzIHRvIDEuXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFnZV9zaXplOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk51bWJlciBvZiByZXN1bHRzIHBlciBwYWdlLiBEZWZhdWx0cyB0byAyMC5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0X2J5OiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGVudW06IFtcInJlbGV2YW5jZVwiLCBcInNvdXJjZVwiLCBcIm5hbWVcIiwgXCJ2ZXJzaW9uXCJdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTb3J0IHJlc3VsdHMgYnkgY3JpdGVyaWEuIERlZmF1bHRzIHRvICdyZWxldmFuY2UnLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJxdWVyeVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoYXJnczogU2VhcmNoQWxsQXJncykgPT4gc2VydmVyLnNlYXJjaEFsbCh7XG4gICAgICAgIHF1ZXJ5OiBhcmdzLnF1ZXJ5LFxuICAgICAgICBzb3VyY2VzOiBhcmdzLnNvdXJjZXMsXG4gICAgICAgIGVsZW1lbnRUeXBlOiBhcmdzLnR5cGUgYXMgYW55LFxuICAgICAgICBwYWdlOiBhcmdzLnBhZ2UsXG4gICAgICAgIHBhZ2VTaXplOiBhcmdzLnBhZ2Vfc2l6ZSxcbiAgICAgICAgc29ydEJ5OiBhcmdzLnNvcnRfYnkgYXMgYW55XG4gICAgICB9KVxuICAgIH1cbiAgXTtcblxuICByZXR1cm4gdG9vbHM7XG59Il19
@@ -78,8 +78,10 @@ export interface IToolHandler {
78
78
  }): Promise<any>;
79
79
  syncPortfolio(options: {
80
80
  direction: string;
81
+ mode?: string;
81
82
  force: boolean;
82
83
  dryRun: boolean;
84
+ confirmDeletions?: boolean;
83
85
  }): Promise<any>;
84
86
  searchPortfolio(options: {
85
87
  query: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAE3B,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/C,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1H,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAG/C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5D,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5D,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,aAAa,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACvI,WAAW,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzF,eAAe,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpF,aAAa,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAGtF,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3E,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAGvD,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChE,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrE,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,wBAAwB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAGzC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChE,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAGlC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,oBAAoB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAItD,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,6BAA6B,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjE,6BAA6B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAG9C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,iBAAiB,CAAC,eAAe,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAGjE,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,aAAa,CAAC,OAAO,EAAE;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzG,eAAe,CAAC,OAAO,EAAE;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACxI,aAAa,CAAC,OAAO,EAAE;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3F,eAAe,CAAC,OAAO,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrO,SAAS,CAAC,OAAO,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAG/I,qBAAqB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACjD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,4 @@
2
2
  * Server interface types to avoid circular dependencies
3
3
  */
4
4
  export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXJ2ZXIgaW50ZXJmYWNlIHR5cGVzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvb2xIYW5kbGVyIHtcbiAgLy8gUGVyc29uYSB0b29scyAobGVnYWN5IC0gd2lsbCBjYWxsIGVsZW1lbnQgdG9vbHMgaW50ZXJuYWxseSlcbiAgbGlzdFBlcnNvbmFzKCk6IFByb21pc2U8YW55PjtcbiAgYWN0aXZhdGVQZXJzb25hKHBlcnNvbmE6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZ2V0QWN0aXZlUGVyc29uYSgpOiBQcm9taXNlPGFueT47XG4gIGRlYWN0aXZhdGVQZXJzb25hKCk6IFByb21pc2U8YW55PjtcbiAgZ2V0UGVyc29uYURldGFpbHMocGVyc29uYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICByZWxvYWRQZXJzb25hcygpOiBQcm9taXNlPGFueT47XG4gIGNyZWF0ZVBlcnNvbmEobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBpbnN0cnVjdGlvbnM6IHN0cmluZywgdHJpZ2dlcnM/OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGVkaXRQZXJzb25hKHBlcnNvbmE6IHN0cmluZywgZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgdmFsaWRhdGVQZXJzb25hKHBlcnNvbmE6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIEVsZW1lbnQgdG9vbHMgKGdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKVxuICBsaXN0RWxlbWVudHModHlwZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldEFjdGl2ZUVsZW1lbnRzKHR5cGU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZGVhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGNyZWF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT59KTogUHJvbWlzZTxhbnk+O1xuICBlZGl0RWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGZpZWxkOiBzdHJpbmc7IHZhbHVlOiBhbnl9KTogUHJvbWlzZTxhbnk+O1xuICB2YWxpZGF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBzdHJpY3Q/OiBib29sZWFufSk6IFByb21pc2U8YW55PjtcbiAgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgdG9vbHNcbiAgcmVuZGVyVGVtcGxhdGUobmFtZTogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT47XG4gIGV4ZWN1dGVBZ2VudChuYW1lOiBzdHJpbmcsIGdvYWw6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIENvbGxlY3Rpb24gdG9vbHNcbiAgYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIHNlYXJjaENvbGxlY3Rpb25FbmhhbmNlZChxdWVyeTogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxhbnk+O1xuICBnZXRDb2xsZWN0aW9uQ29udGVudChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGluc3RhbGxDb250ZW50KHBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgc3VibWl0Q29udGVudChjb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldENvbGxlY3Rpb25DYWNoZUhlYWx0aCgpOiBQcm9taXNlPGFueT47XG4gIFxuICAvLyBVc2VyIHRvb2xzXG4gIHNldFVzZXJJZGVudGl0eSh1c2VybmFtZTogc3RyaW5nLCBlbWFpbD86IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZ2V0VXNlcklkZW50aXR5KCk6IFByb21pc2U8YW55PjtcbiAgY2xlYXJVc2VySWRlbnRpdHkoKTogUHJvbWlzZTxhbnk+O1xuICBcbiAgLy8gQXV0aGVudGljYXRpb24gdG9vbHNcbiAgc2V0dXBHaXRIdWJBdXRoKCk6IFByb21pc2U8YW55PjtcbiAgY2hlY2tHaXRIdWJBdXRoKCk6IFByb21pc2U8YW55PjtcbiAgY2xlYXJHaXRIdWJBdXRoKCk6IFByb21pc2U8YW55PjtcbiAgY29uZmlndXJlT0F1dGgoY2xpZW50X2lkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBnZXRPQXV0aEhlbHBlclN0YXR1cyh2ZXJib3NlPzogYm9vbGVhbik6IFByb21pc2U8YW55PjtcbiAgXG4gIFxuICAvLyBDb25maWcgdG9vbHNcbiAgY29uZmlndXJlSW5kaWNhdG9yKGNvbmZpZzogYW55KTogUHJvbWlzZTxhbnk+O1xuICBnZXRJbmRpY2F0b3JDb25maWcoKTogUHJvbWlzZTxhbnk+O1xuICBjb25maWd1cmVDb2xsZWN0aW9uU3VibWlzc2lvbihhdXRvU3VibWl0OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBnZXRDb2xsZWN0aW9uU3VibWlzc2lvbkNvbmZpZygpOiBQcm9taXNlPGFueT47XG4gIFxuICAvLyBFeHBvcnQvSW1wb3J0IHRvb2xzXG4gIGV4cG9ydFBlcnNvbmEocGVyc29uYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBleHBvcnRBbGxQZXJzb25hcyhpbmNsdWRlRGVmYXVsdHM/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBpbXBvcnRQZXJzb25hKHNvdXJjZTogc3RyaW5nLCBvdmVyd3JpdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBcbiAgLy8gUG9ydGZvbGlvIHRvb2xzXG4gIHBvcnRmb2xpb1N0YXR1cyh1c2VybmFtZT86IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgaW5pdFBvcnRmb2xpbyhvcHRpb25zOiB7cmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7IHByaXZhdGU/OiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZ30pOiBQcm9taXNlPGFueT47XG4gIHBvcnRmb2xpb0NvbmZpZyhvcHRpb25zOiB7YXV0b1N5bmM/OiBib29sZWFuOyBkZWZhdWx0VmlzaWJpbGl0eT86IHN0cmluZzsgYXV0b1N1Ym1pdD86IGJvb2xlYW47IHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nfSk6IFByb21pc2U8YW55PjtcbiAgc3luY1BvcnRmb2xpbyhvcHRpb25zOiB7ZGlyZWN0aW9uOiBzdHJpbmc7IGZvcmNlOiBib29sZWFuOyBkcnlSdW46IGJvb2xlYW59KTogUHJvbWlzZTxhbnk+O1xuICBzZWFyY2hQb3J0Zm9saW8ob3B0aW9uczoge3F1ZXJ5OiBzdHJpbmc7IGVsZW1lbnRUeXBlPzogc3RyaW5nOyBmdXp6eU1hdGNoPzogYm9vbGVhbjsgbWF4UmVzdWx0cz86IG51bWJlcjsgaW5jbHVkZUtleXdvcmRzPzogYm9vbGVhbjsgaW5jbHVkZVRhZ3M/OiBib29sZWFuOyBpbmNsdWRlVHJpZ2dlcnM/OiBib29sZWFuOyBpbmNsdWRlRGVzY3JpcHRpb25zPzogYm9vbGVhbn0pOiBQcm9taXNlPGFueT47XG4gIHNlYXJjaEFsbChvcHRpb25zOiB7cXVlcnk6IHN0cmluZzsgc291cmNlcz86IHN0cmluZ1tdOyBlbGVtZW50VHlwZT86IHN0cmluZzsgcGFnZT86IG51bWJlcjsgcGFnZVNpemU/OiBudW1iZXI7IHNvcnRCeT86IHN0cmluZ30pOiBQcm9taXNlPGFueT47XG4gIFxuICAvLyBOZXcgdW5pZmllZCBjb25maWcgYW5kIHN5bmMgaGFuZGxlcnNcbiAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnM6IGFueSk6IFByb21pc2U8YW55PjtcbiAgaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zOiBhbnkpOiBQcm9taXNlPGFueT47XG59Il19
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXJ2ZXIgaW50ZXJmYWNlIHR5cGVzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvb2xIYW5kbGVyIHtcbiAgLy8gUGVyc29uYSB0b29scyAobGVnYWN5IC0gd2lsbCBjYWxsIGVsZW1lbnQgdG9vbHMgaW50ZXJuYWxseSlcbiAgbGlzdFBlcnNvbmFzKCk6IFByb21pc2U8YW55PjtcbiAgYWN0aXZhdGVQZXJzb25hKHBlcnNvbmE6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZ2V0QWN0aXZlUGVyc29uYSgpOiBQcm9taXNlPGFueT47XG4gIGRlYWN0aXZhdGVQZXJzb25hKCk6IFByb21pc2U8YW55PjtcbiAgZ2V0UGVyc29uYURldGFpbHMocGVyc29uYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICByZWxvYWRQZXJzb25hcygpOiBQcm9taXNlPGFueT47XG4gIGNyZWF0ZVBlcnNvbmEobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBpbnN0cnVjdGlvbnM6IHN0cmluZywgdHJpZ2dlcnM/OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGVkaXRQZXJzb25hKHBlcnNvbmE6IHN0cmluZywgZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgdmFsaWRhdGVQZXJzb25hKHBlcnNvbmE6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIEVsZW1lbnQgdG9vbHMgKGdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKVxuICBsaXN0RWxlbWVudHModHlwZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldEFjdGl2ZUVsZW1lbnRzKHR5cGU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZGVhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGNyZWF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT59KTogUHJvbWlzZTxhbnk+O1xuICBlZGl0RWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGZpZWxkOiBzdHJpbmc7IHZhbHVlOiBhbnl9KTogUHJvbWlzZTxhbnk+O1xuICB2YWxpZGF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBzdHJpY3Q/OiBib29sZWFufSk6IFByb21pc2U8YW55PjtcbiAgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgdG9vbHNcbiAgcmVuZGVyVGVtcGxhdGUobmFtZTogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT47XG4gIGV4ZWN1dGVBZ2VudChuYW1lOiBzdHJpbmcsIGdvYWw6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIENvbGxlY3Rpb24gdG9vbHNcbiAgYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIHNlYXJjaENvbGxlY3Rpb25FbmhhbmNlZChxdWVyeTogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxhbnk+O1xuICBnZXRDb2xsZWN0aW9uQ29udGVudChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGluc3RhbGxDb250ZW50KHBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgc3VibWl0Q29udGVudChjb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldENvbGxlY3Rpb25DYWNoZUhlYWx0aCgpOiBQcm9taXNlPGFueT47XG4gIFxuICAvLyBVc2VyIHRvb2xzXG4gIHNldFVzZXJJZGVudGl0eSh1c2VybmFtZTogc3RyaW5nLCBlbWFpbD86IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZ2V0VXNlcklkZW50aXR5KCk6IFByb21pc2U8YW55PjtcbiAgY2xlYXJVc2VySWRlbnRpdHkoKTogUHJvbWlzZTxhbnk+O1xuICBcbiAgLy8gQXV0aGVudGljYXRpb24gdG9vbHNcbiAgc2V0dXBHaXRIdWJBdXRoKCk6IFByb21pc2U8YW55PjtcbiAgY2hlY2tHaXRIdWJBdXRoKCk6IFByb21pc2U8YW55PjtcbiAgY2xlYXJHaXRIdWJBdXRoKCk6IFByb21pc2U8YW55PjtcbiAgY29uZmlndXJlT0F1dGgoY2xpZW50X2lkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBnZXRPQXV0aEhlbHBlclN0YXR1cyh2ZXJib3NlPzogYm9vbGVhbik6IFByb21pc2U8YW55PjtcbiAgXG4gIFxuICAvLyBDb25maWcgdG9vbHNcbiAgY29uZmlndXJlSW5kaWNhdG9yKGNvbmZpZzogYW55KTogUHJvbWlzZTxhbnk+O1xuICBnZXRJbmRpY2F0b3JDb25maWcoKTogUHJvbWlzZTxhbnk+O1xuICBjb25maWd1cmVDb2xsZWN0aW9uU3VibWlzc2lvbihhdXRvU3VibWl0OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBnZXRDb2xsZWN0aW9uU3VibWlzc2lvbkNvbmZpZygpOiBQcm9taXNlPGFueT47XG4gIFxuICAvLyBFeHBvcnQvSW1wb3J0IHRvb2xzXG4gIGV4cG9ydFBlcnNvbmEocGVyc29uYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBleHBvcnRBbGxQZXJzb25hcyhpbmNsdWRlRGVmYXVsdHM/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBpbXBvcnRQZXJzb25hKHNvdXJjZTogc3RyaW5nLCBvdmVyd3JpdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBcbiAgLy8gUG9ydGZvbGlvIHRvb2xzXG4gIHBvcnRmb2xpb1N0YXR1cyh1c2VybmFtZT86IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgaW5pdFBvcnRmb2xpbyhvcHRpb25zOiB7cmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7IHByaXZhdGU/OiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZ30pOiBQcm9taXNlPGFueT47XG4gIHBvcnRmb2xpb0NvbmZpZyhvcHRpb25zOiB7YXV0b1N5bmM/OiBib29sZWFuOyBkZWZhdWx0VmlzaWJpbGl0eT86IHN0cmluZzsgYXV0b1N1Ym1pdD86IGJvb2xlYW47IHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nfSk6IFByb21pc2U8YW55PjtcbiAgc3luY1BvcnRmb2xpbyhvcHRpb25zOiB7ZGlyZWN0aW9uOiBzdHJpbmc7IG1vZGU/OiBzdHJpbmc7IGZvcmNlOiBib29sZWFuOyBkcnlSdW46IGJvb2xlYW47IGNvbmZpcm1EZWxldGlvbnM/OiBib29sZWFufSk6IFByb21pc2U8YW55PjtcbiAgc2VhcmNoUG9ydGZvbGlvKG9wdGlvbnM6IHtxdWVyeTogc3RyaW5nOyBlbGVtZW50VHlwZT86IHN0cmluZzsgZnV6enlNYXRjaD86IGJvb2xlYW47IG1heFJlc3VsdHM/OiBudW1iZXI7IGluY2x1ZGVLZXl3b3Jkcz86IGJvb2xlYW47IGluY2x1ZGVUYWdzPzogYm9vbGVhbjsgaW5jbHVkZVRyaWdnZXJzPzogYm9vbGVhbjsgaW5jbHVkZURlc2NyaXB0aW9ucz86IGJvb2xlYW59KTogUHJvbWlzZTxhbnk+O1xuICBzZWFyY2hBbGwob3B0aW9uczoge3F1ZXJ5OiBzdHJpbmc7IHNvdXJjZXM/OiBzdHJpbmdbXTsgZWxlbWVudFR5cGU/OiBzdHJpbmc7IHBhZ2U/OiBudW1iZXI7IHBhZ2VTaXplPzogbnVtYmVyOyBzb3J0Qnk/OiBzdHJpbmd9KTogUHJvbWlzZTxhbnk+O1xuICBcbiAgLy8gTmV3IHVuaWZpZWQgY29uZmlnIGFuZCBzeW5jIGhhbmRsZXJzXG4gIGhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zOiBhbnkpOiBQcm9taXNlPGFueT47XG4gIGhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9uczogYW55KTogUHJvbWlzZTxhbnk+O1xufSJdfQ==
@@ -0,0 +1,27 @@
1
+ /**
2
+ * PortfolioDownloader - Downloads elements from GitHub repositories
3
+ *
4
+ * Handles fetching file contents from GitHub, decoding base64 content,
5
+ * and returning structured element data ready for local storage.
6
+ */
7
+ import { PortfolioRepoManager } from '../portfolio/PortfolioRepoManager.js';
8
+ export interface ElementData {
9
+ content: string;
10
+ metadata: Record<string, any>;
11
+ sha: string;
12
+ }
13
+ export declare class PortfolioDownloader {
14
+ /**
15
+ * Download an element from GitHub
16
+ */
17
+ downloadFromGitHub(repoManager: PortfolioRepoManager, elementPath: string, username: string, repository: string): Promise<ElementData>;
18
+ /**
19
+ * Extract metadata from frontmatter
20
+ */
21
+ private extractMetadata;
22
+ /**
23
+ * Download multiple elements in batch
24
+ */
25
+ downloadBatch(repoManager: PortfolioRepoManager, elementPaths: string[], username: string, repository: string, onProgress?: (downloaded: number, total: number) => void): Promise<Map<string, ElementData>>;
26
+ }
27
+ //# sourceMappingURL=PortfolioDownloader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PortfolioDownloader.d.ts","sourceRoot":"","sources":["../../src/sync/PortfolioDownloader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAI5E,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,mBAAmB;IAC9B;;OAEG;IACG,kBAAkB,CACtB,WAAW,EAAE,oBAAoB,EACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IA4DvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACG,aAAa,CACjB,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACvD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CA2BrC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * PortfolioDownloader - Downloads elements from GitHub repositories
3
+ *
4
+ * Handles fetching file contents from GitHub, decoding base64 content,
5
+ * and returning structured element data ready for local storage.
6
+ */
7
+ import { logger } from '../utils/logger.js';
8
+ import { UnicodeValidator } from '../security/validators/unicodeValidator.js';
9
+ export class PortfolioDownloader {
10
+ /**
11
+ * Download an element from GitHub
12
+ */
13
+ async downloadFromGitHub(repoManager, elementPath, username, repository) {
14
+ try {
15
+ logger.info('Downloading element from GitHub', {
16
+ path: elementPath,
17
+ username,
18
+ repository
19
+ });
20
+ // Fetch the file content from GitHub
21
+ const response = await repoManager.githubRequest(`/repos/${username}/${repository}/contents/${elementPath}`);
22
+ if (!response || !response.content) {
23
+ throw new Error(`No content found at path: ${elementPath}`);
24
+ }
25
+ // Decode base64 content
26
+ const decodedContent = Buffer.from(response.content, 'base64').toString('utf-8');
27
+ // Normalize Unicode for security
28
+ const normalized = UnicodeValidator.normalize(decodedContent);
29
+ // Log download for audit trail
30
+ logger.info('Element downloaded successfully', {
31
+ path: elementPath,
32
+ repository: `${username}/${repository}`,
33
+ sha: response.sha
34
+ });
35
+ // Parse metadata from frontmatter if present
36
+ const metadata = this.extractMetadata(normalized.normalizedContent);
37
+ return {
38
+ content: normalized.normalizedContent,
39
+ metadata,
40
+ sha: response.sha
41
+ };
42
+ }
43
+ catch (error) {
44
+ logger.error('Failed to download element from GitHub', {
45
+ error,
46
+ path: elementPath
47
+ });
48
+ // Re-throw with more context
49
+ if (error instanceof Error) {
50
+ if (error.message.includes('404')) {
51
+ throw new Error(`Element not found at path: ${elementPath}`);
52
+ }
53
+ if (error.message.includes('401') || error.message.includes('403')) {
54
+ throw new Error(`Authentication failed. Please check your GitHub token.`);
55
+ }
56
+ throw error;
57
+ }
58
+ throw new Error(`Failed to download ${elementPath}: ${String(error)}`);
59
+ }
60
+ }
61
+ /**
62
+ * Extract metadata from frontmatter
63
+ */
64
+ extractMetadata(content) {
65
+ const metadata = {};
66
+ // Check for YAML frontmatter
67
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
68
+ if (frontmatterMatch) {
69
+ try {
70
+ // Parse the frontmatter as simple key-value pairs
71
+ // (avoiding using yaml.load for security)
72
+ const frontmatterContent = frontmatterMatch[1];
73
+ const lines = frontmatterContent.split('\n');
74
+ for (const line of lines) {
75
+ const colonIndex = line.indexOf(':');
76
+ if (colonIndex > 0) {
77
+ const key = line.substring(0, colonIndex).trim();
78
+ const value = line.substring(colonIndex + 1).trim();
79
+ // Remove quotes if present
80
+ const cleanValue = value.replace(/^["']|["']$/g, '');
81
+ // Try to parse as JSON for arrays/objects, otherwise use as string
82
+ try {
83
+ metadata[key] = JSON.parse(cleanValue);
84
+ }
85
+ catch {
86
+ metadata[key] = cleanValue;
87
+ }
88
+ }
89
+ }
90
+ }
91
+ catch (error) {
92
+ logger.warn('Failed to parse frontmatter metadata', { error });
93
+ }
94
+ }
95
+ return metadata;
96
+ }
97
+ /**
98
+ * Download multiple elements in batch
99
+ */
100
+ async downloadBatch(repoManager, elementPaths, username, repository, onProgress) {
101
+ const results = new Map();
102
+ let downloaded = 0;
103
+ for (const path of elementPaths) {
104
+ try {
105
+ const elementData = await this.downloadFromGitHub(repoManager, path, username, repository);
106
+ results.set(path, elementData);
107
+ downloaded++;
108
+ if (onProgress) {
109
+ onProgress(downloaded, elementPaths.length);
110
+ }
111
+ }
112
+ catch (error) {
113
+ logger.error(`Failed to download ${path}`, { error });
114
+ // Continue with other downloads even if one fails
115
+ }
116
+ }
117
+ return results;
118
+ }
119
+ }
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvRG93bmxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jL1BvcnRmb2xpb0Rvd25sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFROUUsTUFBTSxPQUFPLG1CQUFtQjtJQUM5Qjs7T0FFRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FDdEIsV0FBaUMsRUFDakMsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsVUFBa0I7UUFFbEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRTtnQkFDN0MsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFFBQVE7Z0JBQ1IsVUFBVTthQUNYLENBQUMsQ0FBQztZQUVILHFDQUFxQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxhQUFhLENBQzlDLFVBQVUsUUFBUSxJQUFJLFVBQVUsYUFBYSxXQUFXLEVBQUUsQ0FDM0QsQ0FBQztZQUVGLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUVELHdCQUF3QjtZQUN4QixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWpGLGlDQUFpQztZQUNqQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFOUQsK0JBQStCO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLENB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O1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQ2pCLFdBQWlDLEVBQ2pDLFlBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLFVBQWtCLEVBQ2xCLFVBQXdEO1FBRXhELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBQy9DLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQixLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQztnQkFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FDL0MsV0FBVyxFQUNYLElBQUksRUFDSixRQUFRLEVBQ1IsVUFBVSxDQUNYLENBQUM7Z0JBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQy9CLFVBQVUsRUFBRSxDQUFDO2dCQUViLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2YsVUFBVSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3RELGtEQUFrRDtZQUNwRCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUG9ydGZvbGlvRG93bmxvYWRlciAtIERvd25sb2FkcyBlbGVtZW50cyBmcm9tIEdpdEh1YiByZXBvc2l0b3JpZXNcbiAqIFxuICogSGFuZGxlcyBmZXRjaGluZyBmaWxlIGNvbnRlbnRzIGZyb20gR2l0SHViLCBkZWNvZGluZyBiYXNlNjQgY29udGVudCxcbiAqIGFuZCByZXR1cm5pbmcgc3RydWN0dXJlZCBlbGVtZW50IGRhdGEgcmVhZHkgZm9yIGxvY2FsIHN0b3JhZ2UuXG4gKi9cblxuaW1wb3J0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSBmcm9tICcuLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREYXRhIHtcbiAgY29udGVudDogc3RyaW5nO1xuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc2hhOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBQb3J0Zm9saW9Eb3dubG9hZGVyIHtcbiAgLyoqXG4gICAqIERvd25sb2FkIGFuIGVsZW1lbnQgZnJvbSBHaXRIdWJcbiAgICovXG4gIGFzeW5jIGRvd25sb2FkRnJvbUdpdEh1YihcbiAgICByZXBvTWFuYWdlcjogUG9ydGZvbGlvUmVwb01hbmFnZXIsXG4gICAgZWxlbWVudFBhdGg6IHN0cmluZyxcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZ1xuICApOiBQcm9taXNlPEVsZW1lbnREYXRhPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ2dlci5pbmZvKCdEb3dubG9hZGluZyBlbGVtZW50IGZyb20gR2l0SHViJywgeyBcbiAgICAgICAgcGF0aDogZWxlbWVudFBhdGgsIFxuICAgICAgICB1c2VybmFtZSwgXG4gICAgICAgIHJlcG9zaXRvcnkgXG4gICAgICB9KTtcblxuICAgICAgLy8gRmV0Y2ggdGhlIGZpbGUgY29udGVudCBmcm9tIEdpdEh1YlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXBvTWFuYWdlci5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7cmVwb3NpdG9yeX0vY29udGVudHMvJHtlbGVtZW50UGF0aH1gXG4gICAgICApO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5jb250ZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY29udGVudCBmb3VuZCBhdCBwYXRoOiAke2VsZW1lbnRQYXRofWApO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWNvZGUgYmFzZTY0IGNvbnRlbnRcbiAgICAgIGNvbnN0IGRlY29kZWRDb250ZW50ID0gQnVmZmVyLmZyb20ocmVzcG9uc2UuY29udGVudCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgXG4gICAgICAvLyBOb3JtYWxpemUgVW5pY29kZSBmb3Igc2VjdXJpdHlcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkZWNvZGVkQ29udGVudCk7XG4gICAgICBcbiAgICAgIC8vIExvZyBkb3dubG9hZCBmb3IgYXVkaXQgdHJhaWxcbiAgICAgIGxvZ2dlci5pbmZvKCdFbGVtZW50IGRvd25sb2FkZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICBwYXRoOiBlbGVtZW50UGF0aCxcbiAgICAgICAgcmVwb3NpdG9yeTogYCR7dXNlcm5hbWV9LyR7cmVwb3NpdG9yeX1gLFxuICAgICAgICBzaGE6IHJlc3BvbnNlLnNoYVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFBhcnNlIG1ldGFkYXRhIGZyb20gZnJvbnRtYXR0ZXIgaWYgcHJlc2VudFxuICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4dHJhY3RNZXRhZGF0YShub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogbm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIHNoYTogcmVzcG9uc2Uuc2hhXG4gICAgICB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRvd25sb2FkIGVsZW1lbnQgZnJvbSBHaXRIdWInLCB7IFxuICAgICAgICBlcnJvciwgXG4gICAgICAgIHBhdGg6IGVsZW1lbnRQYXRoIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFJlLXRocm93IHdpdGggbW9yZSBjb250ZXh0XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnNDA0JykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVsZW1lbnQgbm90IGZvdW5kIGF0IHBhdGg6ICR7ZWxlbWVudFBhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJzQwMScpIHx8IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJzQwMycpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayB5b3VyIEdpdEh1YiB0b2tlbi5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZG93bmxvYWQgJHtlbGVtZW50UGF0aH06ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBtZXRhZGF0YSBmcm9tIGZyb250bWF0dGVyXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RNZXRhZGF0YShjb250ZW50OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIFxuICAgIC8vIENoZWNrIGZvciBZQU1MIGZyb250bWF0dGVyXG4gICAgY29uc3QgZnJvbnRtYXR0ZXJNYXRjaCA9IGNvbnRlbnQubWF0Y2goL14tLS1cXG4oW1xcc1xcU10qPylcXG4tLS0vKTtcbiAgICBcbiAgICBpZiAoZnJvbnRtYXR0ZXJNYXRjaCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUGFyc2UgdGhlIGZyb250bWF0dGVyIGFzIHNpbXBsZSBrZXktdmFsdWUgcGFpcnNcbiAgICAgICAgLy8gKGF2b2lkaW5nIHVzaW5nIHlhbWwubG9hZCBmb3Igc2VjdXJpdHkpXG4gICAgICAgIGNvbnN0IGZyb250bWF0dGVyQ29udGVudCA9IGZyb250bWF0dGVyTWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IGxpbmVzID0gZnJvbnRtYXR0ZXJDb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIGNvbnN0IGNvbG9uSW5kZXggPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICAgICAgICBpZiAoY29sb25JbmRleCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGNvbG9uSW5kZXgpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbGluZS5zdWJzdHJpbmcoY29sb25JbmRleCArIDEpLnRyaW0oKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUmVtb3ZlIHF1b3RlcyBpZiBwcmVzZW50XG4gICAgICAgICAgICBjb25zdCBjbGVhblZhbHVlID0gdmFsdWUucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCAnJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBKU09OIGZvciBhcnJheXMvb2JqZWN0cywgb3RoZXJ3aXNlIHVzZSBhcyBzdHJpbmdcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIG1ldGFkYXRhW2tleV0gPSBKU09OLnBhcnNlKGNsZWFuVmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIG1ldGFkYXRhW2tleV0gPSBjbGVhblZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwYXJzZSBmcm9udG1hdHRlciBtZXRhZGF0YScsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZCBtdWx0aXBsZSBlbGVtZW50cyBpbiBiYXRjaFxuICAgKi9cbiAgYXN5bmMgZG93bmxvYWRCYXRjaChcbiAgICByZXBvTWFuYWdlcjogUG9ydGZvbGlvUmVwb01hbmFnZXIsXG4gICAgZWxlbWVudFBhdGhzOiBzdHJpbmdbXSxcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZyxcbiAgICBvblByb2dyZXNzPzogKGRvd25sb2FkZWQ6IG51bWJlciwgdG90YWw6IG51bWJlcikgPT4gdm9pZFxuICApOiBQcm9taXNlPE1hcDxzdHJpbmcsIEVsZW1lbnREYXRhPj4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgTWFwPHN0cmluZywgRWxlbWVudERhdGE+KCk7XG4gICAgbGV0IGRvd25sb2FkZWQgPSAwO1xuICAgIFxuICAgIGZvciAoY29uc3QgcGF0aCBvZiBlbGVtZW50UGF0aHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnREYXRhID0gYXdhaXQgdGhpcy5kb3dubG9hZEZyb21HaXRIdWIoXG4gICAgICAgICAgcmVwb01hbmFnZXIsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICByZXBvc2l0b3J5XG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICByZXN1bHRzLnNldChwYXRoLCBlbGVtZW50RGF0YSk7XG4gICAgICAgIGRvd25sb2FkZWQrKztcbiAgICAgICAgXG4gICAgICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICAgICAgb25Qcm9ncmVzcyhkb3dubG9hZGVkLCBlbGVtZW50UGF0aHMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZG93bmxvYWQgJHtwYXRofWAsIHsgZXJyb3IgfSk7XG4gICAgICAgIC8vIENvbnRpbnVlIHdpdGggb3RoZXIgZG93bmxvYWRzIGV2ZW4gaWYgb25lIGZhaWxzXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG59Il19
@@ -0,0 +1,50 @@
1
+ /**
2
+ * PortfolioSyncComparer - Compares local and GitHub portfolio elements
3
+ *
4
+ * Determines what actions need to be taken based on the sync mode:
5
+ * - additive: Only add missing elements
6
+ * - mirror: Make local exactly match GitHub
7
+ * - backup: Treat GitHub as authoritative source
8
+ */
9
+ import { ElementType } from '../portfolio/types.js';
10
+ import { GitHubIndexEntry } from '../portfolio/GitHubPortfolioIndexer.js';
11
+ export type SyncMode = 'additive' | 'mirror' | 'backup';
12
+ export interface SyncAction {
13
+ type: ElementType;
14
+ name: string;
15
+ path: string;
16
+ action: 'add' | 'update' | 'delete' | 'skip';
17
+ reason?: string;
18
+ localSha?: string;
19
+ remoteSha?: string;
20
+ }
21
+ export interface SyncActions {
22
+ toAdd: SyncAction[];
23
+ toUpdate: SyncAction[];
24
+ toDelete: SyncAction[];
25
+ toSkip: SyncAction[];
26
+ }
27
+ export declare class PortfolioSyncComparer {
28
+ /**
29
+ * Compare GitHub and local elements to determine sync actions
30
+ */
31
+ compareElements(githubElements: Map<ElementType, GitHubIndexEntry[]>, localElements: Map<ElementType, any[]>, mode: SyncMode): SyncActions;
32
+ /**
33
+ * Compare elements of a specific type
34
+ */
35
+ private compareTypeElements;
36
+ /**
37
+ * Determine if an element should be updated
38
+ */
39
+ private shouldUpdate;
40
+ /**
41
+ * Normalize element name for comparison
42
+ * Handles different naming formats and extensions
43
+ */
44
+ private normalizeElementName;
45
+ /**
46
+ * Count total elements in a map
47
+ */
48
+ private countElements;
49
+ }
50
+ //# sourceMappingURL=PortfolioSyncComparer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PortfolioSyncComparer.d.ts","sourceRoot":"","sources":["../../src/sync/PortfolioSyncComparer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAG1E,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,qBAAa,qBAAqB;IAChC;;OAEG;IACH,eAAe,CACb,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE,gBAAgB,EAAE,CAAC,EACpD,aAAa,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,EACtC,IAAI,EAAE,QAAQ,GACb,WAAW;IA2Cd;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuE3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAgCpB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,OAAO,CAAC,aAAa;CAOtB"}