@pipeline-builder/pipeline-data 4.3.6 → 4.3.7

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 (70) hide show
  1. package/lib/api/access-control-builder.js +1 -1
  2. package/lib/api/alert-destinations.js +1 -1
  3. package/lib/api/crud-service.js +1 -1
  4. package/lib/api/ecosystem-privacy.js +1 -1
  5. package/lib/api/keyset-cursor.js +1 -1
  6. package/lib/api/pipeline-step-resolution.js +1 -1
  7. package/lib/api/plugin-advisories.js +1 -1
  8. package/lib/api/plugin-consumption-policy.js +1 -1
  9. package/lib/api/plugin-resolution.js +6 -1
  10. package/lib/api/public-directory.d.ts +71 -3
  11. package/lib/api/public-directory.js +68 -22
  12. package/lib/api/query-builders.js +47 -2
  13. package/lib/api/reporting/analytics-queries.js +1 -1
  14. package/lib/api/reporting/caches.js +1 -1
  15. package/lib/api/reporting/daily-rollup.js +1 -1
  16. package/lib/api/reporting/deploy-rollup.js +1 -1
  17. package/lib/api/reporting/dora-scoring.js +1 -1
  18. package/lib/api/reporting/dora.js +1 -1
  19. package/lib/api/reporting/failure-classifier.js +1 -1
  20. package/lib/api/reporting/ingest.js +1 -1
  21. package/lib/api/reporting/last-deploy.js +1 -1
  22. package/lib/api/reporting/needs-attention.js +1 -1
  23. package/lib/api/reporting/plugin-exposure.js +1 -1
  24. package/lib/api/reporting/plugin-runtime.js +1 -1
  25. package/lib/api/reporting/query-scope.js +1 -1
  26. package/lib/api/reporting/retention-sweep.js +1 -1
  27. package/lib/api/reporting/retention.js +1 -1
  28. package/lib/api/reporting/sql-helpers.js +1 -1
  29. package/lib/api/reporting/stakeholder/compose.js +1 -1
  30. package/lib/api/reporting/stakeholder/index.js +1 -1
  31. package/lib/api/reporting/stakeholder/period.js +1 -1
  32. package/lib/api/reporting/stakeholder/report-html.js +1 -1
  33. package/lib/api/reporting/stakeholder/sections.js +1 -1
  34. package/lib/api/reporting/stakeholder/store.js +1 -1
  35. package/lib/api/reporting/stakeholder/templates.js +1 -1
  36. package/lib/api/reporting/types.js +1 -1
  37. package/lib/api/reporting-service.js +1 -1
  38. package/lib/api/semver-range.js +1 -1
  39. package/lib/api/soft-delete-sweep.js +1 -1
  40. package/lib/api/support-cases.js +1 -1
  41. package/lib/api/version-references.js +1 -1
  42. package/lib/api/viewer-context.js +1 -1
  43. package/lib/core/query-filters.d.ts +25 -0
  44. package/lib/core/query-filters.js +1 -1
  45. package/lib/database/drizzle-schema.d.ts +19 -0
  46. package/lib/database/drizzle-schema.js +1 -1
  47. package/lib/database/index.js +1 -1
  48. package/lib/database/pg-result.js +1 -1
  49. package/lib/database/postgres-connection.js +1 -1
  50. package/lib/database/public-reader.js +1 -1
  51. package/lib/database/read-connection.js +1 -1
  52. package/lib/database/read-lag.js +1 -1
  53. package/lib/database/retry-strategy.js +1 -1
  54. package/lib/database/schema/alert.js +1 -1
  55. package/lib/database/schema/compliance.js +1 -1
  56. package/lib/database/schema/dashboard.js +1 -1
  57. package/lib/database/schema/ecosystem.d.ts +17 -0
  58. package/lib/database/schema/ecosystem.js +3 -1
  59. package/lib/database/schema/message-attachment.js +1 -1
  60. package/lib/database/schema/message.d.ts +19 -0
  61. package/lib/database/schema/message.js +18 -1
  62. package/lib/database/schema/pipeline-template.js +1 -1
  63. package/lib/database/schema/pipeline.js +1 -1
  64. package/lib/database/schema/plugin.js +1 -1
  65. package/lib/database/schema/reporting-analytics.js +1 -1
  66. package/lib/database/schema/reporting-stakeholder.js +1 -1
  67. package/lib/database/schema/support.js +1 -1
  68. package/lib/database/tenancy.js +1 -1
  69. package/lib/index.js +1 -1
  70. package/package.json +8 -8
@@ -694,4 +694,4 @@ export async function lapsedAcceptances(orgId, now = new Date()) {
694
694
  .where(and(eq(schema.pluginVulnExposure.orgId, orgId), eq(schema.pluginVulnExposure.triageState, 'accepted'), isNull(schema.pluginVulnExposure.fixedAt), lte(schema.pluginVulnExposure.acceptedUntil, now))));
695
695
  return rows;
696
696
  }
697
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWV4cG9zdXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvcGx1Z2luLWV4cG9zdXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUErQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2pKLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBWSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBeUIvQywwREFBMEQ7QUFDMUQsU0FBUyxNQUFNLENBQUMsQ0FBNEI7SUFDMUMsTUFBTSxDQUFDLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDL0QsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBbUMsRUFBRSxN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QUMsRUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFDekMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ04sT0FBTyxJQUE4SCxDQUFDO0FBQ3hJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXaGF0IHBsdWdpbiB2ZXJzaW9ucyBhbiBvcmcncyBwaXBlbGluZXMgYXJlIGFjdHVhbGx5IG9uLCBhbmQgd2hpY2ggb2YgdGhvc2UgYXJlXG4gKiBrbm93bi12dWxuZXJhYmxlLlxuICpcbiAqIFR3byB0YWJsZXMsIHdyaXR0ZW4gaGVyZSwgcmVhZCBieSB0aGUgb3V0ZGF0ZWQtcGx1Z2luIGFuZCB2dWxuZXJhYmlsaXR5IHJlcG9ydFxuICogc2VjdGlvbnM6XG4gKlxuICogIC0gYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCDigJQgdGhlIERFQ0xBUkVEIHNpZGUuIFJlY29tcHV0ZWQgb24gcGlwZWxpbmVcbiAqICAgIHdyaXRlIGFuZCBvbiBwbHVnaW4gcHVibGlzaCwgYmVjYXVzZSB0aGUgYWx0ZXJuYXRpdmUgaXMgcmVzb2x2aW5nIGV2ZXJ5IHN0ZXBcbiAqICAgIG9mIGV2ZXJ5IHBpcGVsaW5lIGFnYWluc3QgdGhlIGNhdGFsb2cgb24gZXZlcnkgcmVhZCwgYW5kIHRoYXQgaXMgbm90IGEgcXVlcnlcbiAqICAgIGFueW9uZSBjYW4gYWZmb3JkIHRvIHB1dCBpbiBhIHJlcG9ydC5cbiAqICAtIGBwbHVnaW5fdnVsbl9leHBvc3VyZWAg4oCUIHRoZSBWVUxORVJBQkxFIHNpZGUsIHBlciBQSVBFTElORS4gQSB2ZXJzaW9uLWxldmVsXG4gKiAgICB0YWJsZSB3b3VsZCBmb3JjZSBldmVyeSByZWFkZXIgdG8gcmUtZGVyaXZlIFwid2hpY2ggb2Ygb3VyIHBpcGVsaW5lcyBpc1xuICogICAgZXhwb3NlZFwiLCB3aGljaCBpcyB0aGUgb25seSBmb3JtIG9mIHRoZSBxdWVzdGlvbiBhbnlib2R5IGFza3MuXG4gKlxuICogREVDTEFSRUQgSVMgTk9UIERFUExPWUVELCBhbmQgdGhlIHJlcG9ydCBzYXlzIHdoaWNoIGl0IGlzIHNob3dpbmcuIEEgcGlwZWxpbmUnc1xuICogY29uZmlnIGRlY2xhcmVzIGBeMi4wLjBgOyB3aGF0IHJhbiBhdCBpdHMgbGFzdCBkZXBsb3kgaXMgd2hhdGV2ZXIgdGhlIHN0ZXBcbiAqIG1hbmlmZXN0IHJlY29yZGVkLCBwaW5uZWQgdG8gYSBkaWdlc3QuIFRob3NlIGRpc2FncmVlIHdoZW5ldmVyIGEgcGlwZWxpbmUgaGFzIG5vdFxuICogcmUtc3ludGhlZCBzaW5jZSBhIHB1Ymxpc2gg4oCUIHdoaWNoIGlzIG1vc3Qgb2YgdGhlIHRpbWUsIGFuZCBleGFjdGx5IHRoZSBnYXAgYVxuICogdnVsbmVyYWJpbGl0eSByZXBvcnQgaXMgZm9yLiBDb25mbGF0aW5nIHRoZW0gd291bGQgbGV0IGEgcmVwb3J0IHNheSBcImZpeGVkXCJcbiAqIGFib3V0IGEgcGlwZWxpbmUgc3RpbGwgcnVubmluZyB0aGUgb2xkIGltYWdlLlxuICpcbiAqIFdITyBXUklURVMgV0hBVDpcbiAqICAtIHRoZSBwaXBlbGluZSBzZXJ2aWNlLCBvbiBhIHBpcGVsaW5lIHdyaXRlOiBgcmVwbGFjZVBpcGVsaW5lUmVzb2x1dGlvbmAgK1xuICogICAgYHJlY29uY2lsZVBpcGVsaW5lRXhwb3N1cmVzKHNvdXJjZSAnZGVjbGFyZWQnKWA7XG4gKiAgLSB0aGUgcGlwZWxpbmUgc2VydmljZSwgb24gYSBkZXBsb3kgcmVnaXN0cmF0aW9uIGNhcnJ5aW5nIGEgc3RlcCBtYW5pZmVzdDpcbiAqICAgIGByZWNvbmNpbGVQaXBlbGluZUV4cG9zdXJlcyhzb3VyY2UgJ2RlcGxveWVkJylgO1xuICogIC0gdGhlIHBsdWdpbiBzZXJ2aWNlLCB3aGVuIGEgdmVyc2lvbiBiZWNvbWVzIHRoZSBsYXRlc3QgKGFuIG9yZyBwbHVnaW4ncyBuZXdcbiAqICAgIGRlZmF1bHQ7IGEgbGlzdGluZydzIHB1Ymxpc2gsIHlhbmsgb3IgdW55YW5rKTogYHJlZnJlc2hMYXRlc3RGb3JQbHVnaW5gO1xuICogIC0gdGhlIG5pZ2h0bHkgcmVzY2FuLCBwZXIgcmVzY2FubmVkIHZlcnNpb246IGBzeW5jVmVyc2lvbkV4cG9zdXJlc2AsIHdoaWNoXG4gKiAgICBmYW5zIHRoZSB2ZXJzaW9uJ3MgZmluZGluZ3Mgb3V0IHRvIGV2ZXJ5IHBpcGVsaW5lIGRlY2xhcmluZyBvciBydW5uaW5nIGl0XG4gKiAgICAob3IgY2xvc2VzIHRoZW0gd2hlbiB0aGUgdmVyc2lvbiBjYW1lIGJhY2sgY2xlYW4pLlxuICovXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBhc1NjYW5GbGFnLCBjcmVhdGVMb2dnZXIsIGVycm9yTWVzc2FnZSwgc2NhbkZpbmRpbmdLZXksIHR5cGUgUGx1Z2luU2NhbkZpbmRpbmcsIHR5cGUgVnVsbkFjY2VwdGFuY2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBhbmQsIGVxLCBpbkFycmF5LCBpc051bGwsIGx0ZSwgc3FsLCB0eXBlIFNRTCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgRXhwb3N1cmVTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9zY2hlbWEvcmVwb3J0aW5nLWFuYWx5dGljcy5qcyc7XG5pbXBvcnQgeyB3aXRoVGVuYW50VHggfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdwbHVnaW4tZXhwb3N1cmUnKTtcblxuLyoqIEhvdyBmYXIgYmVoaW5kIGEgcmVzb2x2ZWQgdmVyc2lvbiBpcyBmcm9tIHRoZSBuZXdlc3Qgb25lIGF2YWlsYWJsZS4gKi9cbmV4cG9ydCB0eXBlIFZlcnNpb25HYXAgPSAnbWFqb3InIHwgJ21pbm9yJyB8ICdwYXRjaCcgfCAnbm9uZSc7XG5cbi8qKiBPbmUgcmVzb2x2ZWQgc3RlcCwgYXMgdGhlIHdyaXRlciB0YWtlcyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTdGVwIHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgcGx1Z2luUHVibGlzaGVyPzogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBkZWNsYXJlZFZlcnNpb24/OiBzdHJpbmcgfCBudWxsO1xuICByZXNvbHZlZFZlcnNpb24/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIHJlc29sdmVkIHJlY29yZDogYSBgcGx1Z2luc2Agcm93IGlkIG9yIGEgbGlzdGluZyB2ZXJzaW9uIGlkLiAqL1xuICByZXNvbHZlZFBsdWdpbklkPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBpbWFnZSBkaWdlc3QgdGhlIHJlc29sdmVkIHZlcnNpb24gaXMgcGlubmVkIHRvIChudWxsID0gaW1hZ2UtbGVzcykuICovXG4gIHJlc29sdmVkRGlnZXN0Pzogc3RyaW5nIHwgbnVsbDtcbiAgbGF0ZXN0VmVyc2lvbj86IHN0cmluZyB8IG51bGw7XG4gIHdpdGhpblBvbGljeT86IGJvb2xlYW47XG4gIC8qKiBUaGUgcm9vdCBvcmcgb2YgYSB0ZWFtJ3MgcGlwZWxpbmUgKHNlZSB0aGUgY29sdW1uKS4gKi9cbiAgcm9vdE9yZ0lkPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIGAxLjIuM2Ag4oaSIGBbMSwgMiwgM11gOyBhbnl0aGluZyB1bnBhcnNlYWJsZSDihpIgbnVsbC4gKi9cbmZ1bmN0aW9uIHNlbXZlcih2OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCB7XG4gIGNvbnN0IG0gPSAvXnY/KFxcZCspXFwuKFxcZCspXFwuKFxcZCspLy5leGVjKHYgPz8gJycpO1xuICByZXR1cm4gbSA/IFtOdW1iZXIobVsxXSksIE51bWJlcihtWzJdKSwgTnVtYmVyKG1bM10pXSA6IG51bGw7XG59XG5cbi8qKlxuICogSG93IGZhciBgcmVzb2x2ZWRgIGlzIGJlaGluZCBgbGF0ZXN0YC5cbiAqXG4gKiBgbnVsbGAgd2hlbiBlaXRoZXIgc2lkZSBpcyB1bnBhcnNlYWJsZSwgTk9UIGAnbm9uZSdgLiBcIldlIGNvdWxkIG5vdCB0ZWxsXCIgYW5kXG4gKiBcIml0IGlzIHVwIHRvIGRhdGVcIiBhcmUgb3Bwb3NpdGUgYW5zd2VycywgYW5kIHJlcG9ydGluZyB0aGUgc2Vjb25kIGZvciB0aGUgZmlyc3RcbiAqIGlzIGhvdyBhIHBpcGVsaW5lIG9uIGFuIGFuY2llbnQgcHJlLXJlbGVhc2UgdmVyc2lvbiBnZXRzIGEgY2xlYW4gYmlsbCBvZiBoZWFsdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uR2FwKHJlc29sdmVkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBsYXRlc3Q6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBWZXJzaW9uR2FwIHwgbnVsbCB7XG4gIGNvbnN0IGEgPSBzZW12ZXIocmVzb2x2ZWQpO1xuICBjb25zdCBiID0gc2VtdmVyKGxhdGVzdCk7XG4gIGlmICghYSB8fCAhYikgcmV0dXJuIG51bGw7XG4gIGlmIChiWzBdID4gYVswXSkgcmV0dXJuICdtYWpvcic7XG4gIGlmIChiWzBdIDwgYVswXSkgcmV0dXJuICdub25lJzsgLy8gcmVzb2x2ZWQgaXMgYWhlYWQgb2YgXCJsYXRlc3RcIiDigJQgbm90IGJlaGluZFxuICBpZiAoYlsxXSA+IGFbMV0pIHJldHVybiAnbWlub3InO1xuICBpZiAoYlsxXSA8IGFbMV0pIHJldHVybiAnbm9uZSc7XG4gIGlmIChiWzJdID4gYVsyXSkgcmV0dXJuICdwYXRjaCc7XG4gIHJldHVybiAnbm9uZSc7XG59XG5cbi8qKlxuICogUmVwbGFjZSBhIHBpcGVsaW5lJ3MgcmVzb2x1dGlvbiByb3dzLlxuICpcbiAqIERFTEVURS10aGVuLUlOU0VSVCBmb3IgdGhlIHBpcGVsaW5lLCBpbiBvbmUgdHJhbnNhY3Rpb24sIGJlY2F1c2UgYSBzdGVwIGNhbiBiZVxuICogUkVNT1ZFRCBmcm9tIGEgY29uZmlnOiBhbiB1cHNlcnQtb25seSB3cml0ZXIgd291bGQgbGVhdmUgdGhlIGRlbGV0ZWQgc3RlcCdzIHJvd1xuICogYmVoaW5kIGZvcmV2ZXIsIGFuZCB0aGUgb3V0ZGF0ZWQtcGx1Z2luIHNlY3Rpb24gd291bGQga2VlcCByZXBvcnRpbmcgYSBzdGVwIHRoZVxuICogcGlwZWxpbmUgbm8gbG9uZ2VyIGhhcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VQaXBlbGluZVJlc29sdXRpb24oXG4gIHBpcGVsaW5lSWQ6IHN0cmluZyxcbiAgc3RlcHM6IHJlYWRvbmx5IFJlc29sdmVkU3RlcFtdLFxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3QgdmFsdWVzID0gc3RlcHMubWFwKChzKSA9PiAoe1xuICAgIG9yZ0lkOiBzLm9yZ0lkLFxuICAgIHBpcGVsaW5lSWQ6IHMucGlwZWxpbmVJZCxcbiAgICBzdGFnZU5hbWU6IHMuc3RhZ2VOYW1lLFxuICAgIHN0ZXBOYW1lOiBzLnN0ZXBOYW1lLFxuICAgIHBsdWdpblB1Ymxpc2hlcjogcy5wbHVnaW5QdWJsaXNoZXIgPz8gbnVsbCxcbiAgICBwbHVnaW5OYW1lOiBzLnBsdWdpbk5hbWUsXG4gICAgZGVjbGFyZWRWZXJzaW9uOiBzLmRlY2xhcmVkVmVyc2lvbiA/PyBudWxsLFxuICAgIHJlc29sdmVkVmVyc2lvbjogcy5yZXNvbHZlZFZlcnNpb24gPz8gbnVsbCxcbiAgICByZXNvbHZlZFBsdWdpbklkOiBzLnJlc29sdmVkUGx1Z2luSWQgPz8gbnVsbCxcbiAgICByZXNvbHZlZERpZ2VzdDogcy5yZXNvbHZlZERpZ2VzdCA/PyBudWxsLFxuICAgIGxhdGVzdFZlcnNpb246IHMubGF0ZXN0VmVyc2lvbiA/PyBudWxsLFxuICAgIHZlcnNpb25HYXA6IHZlcnNpb25HYXAocy5yZXNvbHZlZFZlcnNpb24sIHMubGF0ZXN0VmVyc2lvbiksXG4gICAgd2l0aGluUG9saWN5OiBzLndpdGhpblBvbGljeSA/PyB0cnVlLFxuICAgIHJvb3RPcmdJZDogcy5yb290T3JnSWQgPz8gbnVsbCxcbiAgICBjb21wdXRlZEF0OiBuZXcgRGF0ZSgpLFxuICB9KSk7XG5cbiAgcmV0dXJuIHdpdGhUZW5hbnRUeChhc3luYyAodHgpID0+IHtcbiAgICBhd2FpdCB0eC5kZWxldGUoc2NoZW1hLnBpcGVsaW5lUGx1Z2luUmVzb2x1dGlvbilcbiAgICAgIC53aGVyZShlcShzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnBpcGVsaW5lSWQsIHBpcGVsaW5lSWQpKTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgY29uc3QgbGFuZGVkID0gYXdhaXQgdHguaW5zZXJ0KHNjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24pLnZhbHVlcyh2YWx1ZXMpXG4gICAgICAucmV0dXJuaW5nKHsgcGlwZWxpbmVJZDogc2NoZW1hLnBpcGVsaW5lUGx1Z2luUmVzb2x1dGlvbi5waXBlbGluZUlkIH0pO1xuICAgIHJldHVybiAobGFuZGVkIGFzIHVua25vd25bXSkubGVuZ3RoO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZWZyZXNoIHRoZSBgbGF0ZXN0YC9nYXAgY29sdW1ucyBmb3Igb25lIHBsdWdpbiBhY3Jvc3MgZXZlcnkgcGlwZWxpbmUgdGhhdCB1c2VzXG4gKiBpdCwgd2l0aG91dCByZS1yZXNvbHZpbmcgYW55dGhpbmcgZWxzZS5cbiAqXG4gKiBDYWxsZWQgb24gcHVibGlzaC4gQSBwdWJsaXNoIGNoYW5nZXMgd2hhdCBcImxhdGVzdFwiIG1lYW5zIGZvciBldmVyeSBwaXBlbGluZSBpblxuICogdGhlIGluc3RhbmNlIHRoYXQgZGVjbGFyZXMgdGhlIHBsdWdpbiwgYW5kIHJlLXJlc29sdmluZyBlYWNoIG9mIHRob3NlIHBpcGVsaW5lc1xuICogZnJvbSBzY3JhdGNoIHdvdWxkIG1ha2UgcHVibGlzaGluZyBjb3N0IE8ocGlwZWxpbmVzKSB3b3JrIOKAlCBzbyBvbmx5IHRoZSB0d29cbiAqIGNvbHVtbnMgYSBwdWJsaXNoIGNhbiBjaGFuZ2UgYXJlIHRvdWNoZWQuXG4gKlxuICogYG93bmVyYCBzYXlzIHdob3NlIHBsdWdpbiBpdCBpczogYSBsaXN0aW5nIChgcHVibGlzaGVyYCBoYW5kbGUg4oCUIGV2ZXJ5IG9yZydzXG4gKiBwaXBlbGluZXMgdGhhdCBkZWNsYXJlIGl0LCBzbyB0aGUgY2FsbGVyIG11c3QgYmUgZWxldmF0ZWQpLCBvciBhbiBvcmcncyBvd25cbiAqIHBsdWdpbiAoYG9yZ0lkYCDigJQgdGhhdCBvcmcncyBwaXBlbGluZXMgb25seTogYW4gb3JnIHBsdWdpbidzIG5hbWUgaXMgdW5pcXVlXG4gKiBvbmx5IHdpdGhpbiBpdHMgb3JnLCBzbyBhbm90aGVyIG9yZydzIHNhbWUtbmFtZWQgcGx1Z2luIGlzIGEgZGlmZmVyZW50IG9uZSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoTGF0ZXN0Rm9yUGx1Z2luKFxuICBwbHVnaW5OYW1lOiBzdHJpbmcsXG4gIG93bmVyOiB7IHB1Ymxpc2hlcjogc3RyaW5nIH0gfCB7IG9yZ0lkOiBzdHJpbmcgfSxcbiAgbGF0ZXN0VmVyc2lvbjogc3RyaW5nLFxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnVwZGF0ZShzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uKVxuICAgIC5zZXQoe1xuICAgICAgbGF0ZXN0VmVyc2lvbixcbiAgICAgIC8vIFJlY29tcHV0ZWQgaW4gU1FMIGZyb20gdGhlIHJvdydzIG93biByZXNvbHZlZCB2ZXJzaW9uLCBzbyBvbmUgc3RhdGVtZW50XG4gICAgICAvLyBjb3ZlcnMgZXZlcnkgcGlwZWxpbmUgcmF0aGVyIHRoYW4gYSByb3VuZCB0cmlwIGVhY2guXG4gICAgICAvLyBgOjp0ZXh0YCBvbiBldmVyeSBiaW5kIG9mIHRoZSB2ZXJzaW9uOiBQb3N0Z3JlcyBvdGhlcndpc2UgZGVkdWNlc1xuICAgICAgLy8gaW5jb25zaXN0ZW50IHR5cGVzIGZvciB0aGUgc2FtZSBwYXJhbWV0ZXIgKHZhcmNoYXIgZm9yIHRoZSBhc3NpZ25tZW50LFxuICAgICAgLy8gdGV4dCBmb3IgYHNwbGl0X3BhcnRgKSBhbmQgcmVmdXNlcyB0byBwbGFuIHRoZSBzdGF0ZW1lbnQuXG4gICAgICB2ZXJzaW9uR2FwOiBzcWxgQ0FTRVxuICAgICAgICBXSEVOICR7c2NoZW1hLnBpcGVsaW5lUGx1Z2luUmVzb2x1dGlvbi5yZXNvbHZlZFZlcnNpb259IElTIE5VTEwgVEhFTiBOVUxMXG4gICAgICAgIFdIRU4gc3BsaXRfcGFydCgke2xhdGVzdFZlcnNpb259Ojp0ZXh0LCAnLicsIDEpOjppbnQgPiBzcGxpdF9wYXJ0KCR7c2NoZW1hLnBpcGVsaW5lUGx1Z2luUmVzb2x1dGlvbi5yZXNvbHZlZFZlcnNpb259LCAnLicsIDEpOjppbnQgVEhFTiAnbWFqb3InXG4gICAgICAgIFdIRU4gc3BsaXRfcGFydCgke2xhdGVzdFZlcnNpb259Ojp0ZXh0LCAnLicsIDEpOjppbnQgPCBzcGxpdF9wYXJ0KCR7c2NoZW1hLnBpcGVsaW5lUGx1Z2luUmVzb2x1dGlvbi5yZXNvbHZlZFZlcnNpb259LCAnLicsIDEpOjppbnQgVEhFTiAnbm9uZSdcbiAgICAgICAgV0hFTiBzcGxpdF9wYXJ0KCR7bGF0ZXN0VmVyc2lvbn06OnRleHQsICcuJywgMik6OmludCA+IHNwbGl0X3BhcnQoJHtzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnJlc29sdmVkVmVyc2lvbn0sICcuJywgMik6OmludCBUSEVOICdtaW5vcidcbiAgICAgICAgV0hFTiBzcGxpdF9wYXJ0KCR7bGF0ZXN0VmVyc2lvbn06OnRleHQsICcuJywgMik6OmludCA8IHNwbGl0X3BhcnQoJHtzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnJlc29sdmVkVmVyc2lvbn0sICcuJywgMik6OmludCBUSEVOICdub25lJ1xuICAgICAgICBXSEVOIHNwbGl0X3BhcnQoJHtsYXRlc3RWZXJzaW9ufTo6dGV4dCwgJy4nLCAzKTo6aW50ID4gc3BsaXRfcGFydCgke3NjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24ucmVzb2x2ZWRWZXJzaW9ufSwgJy4nLCAzKTo6aW50IFRIRU4gJ3BhdGNoJ1xuICAgICAgICBFTFNFICdub25lJyBFTkRgLFxuICAgICAgY29tcHV0ZWRBdDogbmV3IERhdGUoKSxcbiAgICB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnBsdWdpbk5hbWUsIHBsdWdpbk5hbWUpLFxuICAgICAgLi4uKCdwdWJsaXNoZXInIGluIG93bmVyXG4gICAgICAgID8gW2VxKHNjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24ucGx1Z2luUHVibGlzaGVyLCBvd25lci5wdWJsaXNoZXIpXVxuICAgICAgICA6IFtpc051bGwoc2NoZW1hLnBpcGVsaW5lUGx1Z2luUmVzb2x1dGlvbi5wbHVnaW5QdWJsaXNoZXIpLCBlcShzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLm9yZ0lkLCBvd25lci5vcmdJZCldKSxcbiAgICAgIC8vIE9ubHkgcm93cyB3aG9zZSByZXNvbHZlZCB2ZXJzaW9uIHBhcnNlcyBhcyBzZW12ZXI7IGFueXRoaW5nIGVsc2UgaGFzIG5vXG4gICAgICAvLyBnYXAgdG8gY29tcHV0ZSBhbmQgdGhlIENBU0Ugd291bGQgdGhyb3cgb24gdGhlIGNhc3QuXG4gICAgICBzcWxgJHtzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnJlc29sdmVkVmVyc2lvbn0gfiAnXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XSsnYCxcbiAgICApKVxuICAgIC5yZXR1cm5pbmcoeyBwaXBlbGluZUlkOiBzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnBpcGVsaW5lSWQgfSkpO1xuICByZXR1cm4gKHJvd3MgYXMgdW5rbm93bltdKS5sZW5ndGg7XG59XG5cbi8qKiBPbmUgZmxhZ2dlZCB2ZXJzaW9uLCBhcyB0aGUgcmVzY2FuIHJlcG9ydHMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9zdXJlSW5wdXQge1xuICBvcmdJZDogc3RyaW5nO1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBsdWdpblB1Ymxpc2hlcj86IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBpbWFnZURpZ2VzdD86IHN0cmluZyB8IG51bGw7XG4gIHNvdXJjZTogRXhwb3N1cmVTb3VyY2U7XG4gIGNyaXRpY2FsQ291bnQ6IG51bWJlcjtcbiAgaGlnaENvdW50OiBudW1iZXI7XG4gIHRvcEZpbmRpbmdzPzogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAvKiogRXZlcnkgQ3JpdGljYWwvSGlnaCBmaW5kaW5nIGtleSBvZiB0aGUgdmVyc2lvbiAoc2VlIHRoZSBjb2x1bW4pLiAqL1xuICBmaW5kaW5nS2V5cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYW4gZXhwb3N1cmUgcm93IGlzIExJVkU6IG5vdCBmaXhlZCwgbm90IGRpc21pc3NlZCBhcyBhIGZhbHNlIHBvc2l0aXZlLFxuICogYW5kIG5vdCB1bmRlciBhbiBhY2NlcHRhbmNlIHRoYXQgaXMgc3RpbGwgaW4gZm9yY2UuXG4gKlxuICogVGhlIE9ORSBwcmVkaWNhdGUgZXZlcnkgcmVhZGVyIHVzZXMgKHRoZSByZXBvcnQgc2VjdGlvbiwgbmVlZHMtYXR0ZW50aW9uLCB0aGVcbiAqIG9yZydzIG9wZW4gbGlzdCkuIFR3byByZWFkZXJzIHRoYXQgZGlzYWdyZWUgYWJvdXQgd2hhdCBcImV4cG9zZWRcIiBtZWFucyBwcm9kdWNlXG4gKiBhIHJlcG9ydCB3aG9zZSB2dWxuZXJhYmlsaXR5IHBhbmVsIGFuZCBuZWVkcy1hdHRlbnRpb24gbGlzdCBjb250cmFkaWN0IGVhY2hcbiAqIG90aGVyIOKAlCB3aGljaCBpcyBob3cgdGhpcyBwcmVkaWNhdGUgY2FtZSB0byBleGlzdC4gQW4gYWNjZXB0YW5jZSBMQVBTRVMgYXQgaXRzXG4gKiBkZWFkbGluZSBhbmQgdGhlIHJvdyBpcyBsaXZlIGFnYWluOyBvbmUgd2l0aCBubyBkZWFkbGluZSAod2hpY2hcbiAqIGB0cmlhZ2VFeHBvc3VyZWAgcmVmdXNlcyB0byB3cml0ZSkgaXMgdHJlYXRlZCBhcyBpbiBmb3JjZSwgYXMgZXZlcnkgcmVhZGVyXG4gKiBhbHJlYWR5IGRpZC5cbiAqXG4gKiBgYWxpYXNgIGlzIHRoZSB0YWJsZSBuYW1lIG9yIGFsaWFzIHRoZSBjYWxsZXIncyBxdWVyeSB1c2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGl2ZUV4cG9zdXJlUHJlZGljYXRlKG5vdzogRGF0ZSwgYWxpYXMgPSAncGx1Z2luX3Z1bG5fZXhwb3N1cmUnKTogU1FMIHtcbiAgY29uc3QgY29sID0gKGM6IHN0cmluZykgPT4gc3FsLnJhdyhgJHthbGlhc30uJHtjfWApO1xuICByZXR1cm4gc3FsYCgke2NvbCgnZml4ZWRfYXQnKX0gSVMgTlVMTFxuICAgIEFORCAoJHtjb2woJ3RyaWFnZV9zdGF0ZScpfSA9ICdvcGVuJ1xuICAgICAgICAgT1IgKCR7Y29sKCd0cmlhZ2Vfc3RhdGUnKX0gPSAnYWNjZXB0ZWQnXG4gICAgICAgICAgICAgQU5EICR7Y29sKCdhY2NlcHRlZF91bnRpbCcpfSBJUyBOT1QgTlVMTCBBTkQgJHtjb2woJ2FjY2VwdGVkX3VudGlsJyl9IDw9ICR7bm93fSkpKWA7XG59XG5cbi8qKiBXaGF0IGEgdmVyc2lvbidzIHNjYW4gc3RhdGUgY29udHJpYnV0ZXMgdG8gYW4gZXhwb3N1cmUgKHNlZSB7QGxpbmsgZXhwb3N1cmVGcm9tU2Nhbn0pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FuU3RhdGUge1xuICAvKiogVGhlIGRpZ2VzdCB0aGUgc3RlcCBydW5zLiBBIHNjYW4gc3VtbWFyeSBkZXNjcmliaW5nIGFub3RoZXIgaW1hZ2UgaXMgaWdub3JlZC4gKi9cbiAgaW1hZ2VEaWdlc3Q/OiBzdHJpbmcgfCBudWxsO1xuICBzY2FuU3VtbWFyeT86IHVua25vd247XG4gIHNjYW5GbGFnPzogdW5rbm93bjtcbiAgc2NhbkZsYWdnZWRBdD86IERhdGUgfCBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogVGhlIGNvdW50cyBhbiBleHBvc3VyZSByb3cgY2Fycmllcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3N1cmVDb3VudHMge1xuICBjcml0aWNhbENvdW50OiBudW1iZXI7XG4gIGhpZ2hDb3VudDogbnVtYmVyO1xuICB0b3BGaW5kaW5nczogUGx1Z2luU2NhbkZpbmRpbmdbXTtcbiAgLyoqIEtleXMgb2YgRVZFUlkgQ3JpdGljYWwvSGlnaCBmaW5kaW5nIGl0ZW1pemVkIChmaXhhYmxlIG9yIG5vdCksIHNvcnRlZC4gKi9cbiAgZmluZGluZ0tleXM6IHN0cmluZ1tdO1xufVxuXG5jb25zdCBrZXlzT2YgPSAoZmluZGluZ3M6IHJlYWRvbmx5IFBsdWdpblNjYW5GaW5kaW5nW10pOiBzdHJpbmdbXSA9PiBbLi4ubmV3IFNldChmaW5kaW5ncy5tYXAoc2NhbkZpbmRpbmdLZXkpKV0uc29ydCgpO1xuXG4vKiogQXQgbW9zdCB0aGlzIG1hbnkgZmluZGluZ3MgYXJlIHN0b3JlZCBvbiBhbiBleHBvc3VyZSByb3cuICovXG5jb25zdCBFWFBPU1VSRV9UT1BfRklORElOR1MgPSAxMDtcblxuLyoqXG4gKiBUaGUgZXhwb3N1cmUgYSB2ZXJzaW9uJ3Mgc2NhbiBzdGF0ZSBhbW91bnRzIHRvLCBvciBudWxsIHdoZW4gaXQgaGFzIG5vbmUuXG4gKlxuICogUmVhZHMgdGhlIHJlc2NhbidzIGBzY2FuX3N1bW1hcnlgIChmaXhhYmxlIENyaXRpY2FsIEFORCBIaWdoLCB3aGV0aGVyIG9yIG5vdCB0aGVcbiAqIGdhdGUgdHJpcHBlZCkgYW5kIGZhbGxzIGJhY2sgdG8gYHNjYW5fZmxhZ2AgZm9yIGEgdmVyc2lvbiBmbGFnZ2VkIGJlZm9yZSBhbnlcbiAqIHN1bW1hcnkgd2FzIHdyaXR0ZW4uIEEgc3VtbWFyeSB3aG9zZSBkaWdlc3QgaXMgbm90IHRoZSBzdGVwJ3MgaXMgSUdOT1JFRDogYVxuICogdmVyc2lvbiByZWJ1aWx0IG9uIGEgcGF0Y2hlZCBiYXNlIGlzIGEgZGlmZmVyZW50IGFydGlmYWN0LCBhbmQgaXRzIGZpbmRpbmdzIHNheVxuICogbm90aGluZyBhYm91dCB0aGUgaW1hZ2UgdGhlIHBpcGVsaW5lIHJ1bnMuIE9ubHkgRklYQUJMRSBmaW5kaW5ncyBjb3VudCDigJQgYW5cbiAqIGV4cG9zdXJlIGlzIHNvbWV0aGluZyBhIHJlYnVpbGQgb3IgYW4gdXBncmFkZSBjYW4gY2xlYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvc3VyZUZyb21TY2FuKHN0YXRlOiBTY2FuU3RhdGUpOiBFeHBvc3VyZUNvdW50cyB8IG51bGwge1xuICBjb25zdCBzdW1tYXJ5ID0gc3RhdGUuc2NhblN1bW1hcnkgJiYgdHlwZW9mIHN0YXRlLnNjYW5TdW1tYXJ5ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzdGF0ZS5zY2FuU3VtbWFyeSlcbiAgICA/IHN0YXRlLnNjYW5TdW1tYXJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgOiBudWxsO1xuICBjb25zdCBzdW1tYXJ5RGlnZXN0ID0gdHlwZW9mIHN1bW1hcnk/LmltYWdlRGlnZXN0ID09PSAnc3RyaW5nJyA/IHN1bW1hcnkuaW1hZ2VEaWdlc3QgOiBudWxsO1xuICBpZiAoc3VtbWFyeSAmJiB0eXBlb2Ygc3VtbWFyeS5jcml0aWNhbEZpeGFibGUgPT09ICdudW1iZXInICYmIHR5cGVvZiBzdW1tYXJ5LmhpZ2hGaXhhYmxlID09PSAnbnVtYmVyJ1xuICAgICYmIChzdW1tYXJ5RGlnZXN0ID09PSBudWxsIHx8ICFzdGF0ZS5pbWFnZURpZ2VzdCB8fCBzdW1tYXJ5RGlnZXN0ID09PSBzdGF0ZS5pbWFnZURpZ2VzdCkpIHtcbiAgICBpZiAoc3VtbWFyeS5jcml0aWNhbEZpeGFibGUgPD0gMCAmJiBzdW1tYXJ5LmhpZ2hGaXhhYmxlIDw9IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGFsbCA9IChBcnJheS5pc0FycmF5KHN1bW1hcnkuZmluZGluZ3MpID8gc3VtbWFyeS5maW5kaW5ncyBhcyBQbHVnaW5TY2FuRmluZGluZ1tdIDogW10pXG4gICAgICAuZmlsdGVyKChmKSA9PiBmICYmIHR5cGVvZiBmLmlkID09PSAnc3RyaW5nJyk7XG4gICAgY29uc3QgZmluZGluZ3MgPSBhbGwuZmlsdGVyKChmKSA9PiBBcnJheS5pc0FycmF5KGYuZml4ZWRJbikgJiYgZi5maXhlZEluLmxlbmd0aCA+IDApO1xuICAgIHJldHVybiB7IGNyaXRpY2FsQ291bnQ6IHN1bW1hcnkuY3JpdGljYWxGaXhhYmxlLCBoaWdoQ291bnQ6IHN1bW1hcnkuaGlnaEZpeGFibGUsIHRvcEZpbmRpbmdzOiBmaW5kaW5ncy5zbGljZSgwLCBFWFBPU1VSRV9UT1BfRklORElOR1MpLCBmaW5kaW5nS2V5czoga2V5c09mKGFsbCkgfTtcbiAgfVxuICBjb25zdCBmbGFnID0gc3RhdGUuc2NhbkZsYWdnZWRBdCA/IGFzU2NhbkZsYWcoc3RhdGUuc2NhbkZsYWcpIDogbnVsbDtcbiAgaWYgKCFmbGFnIHx8IChmbGFnLmdhdGVkIDw9IDAgJiYgZmxhZy5oaWdoIDw9IDApKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgY3JpdGljYWxDb3VudDogZmxhZy5nYXRlZCwgaGlnaENvdW50OiBmbGFnLmhpZ2gsIHRvcEZpbmRpbmdzOiBmbGFnLmZpbmRpbmdzLnNsaWNlKDAsIEVYUE9TVVJFX1RPUF9GSU5ESU5HUyksIGZpbmRpbmdLZXlzOiBrZXlzT2YoZmxhZy5maW5kaW5ncykgfTtcbn1cblxuLyoqXG4gKiBPcGVuIG9yIHJlZnJlc2ggZXhwb3N1cmVzLlxuICpcbiAqIFVwc2VydHMgb24gKHBpcGVsaW5lLCBwbHVnaW4sIHZlcnNpb24sIGRpZ2VzdCwgc291cmNlKSBzbyBhIG5pZ2h0bHkgcmVzY2FuIFJFRlJFU0hFUyB0aGVcbiAqIGNvdW50cyByYXRoZXIgdGhhbiBvcGVuaW5nIGEgbmV3IHJvdyBldmVyeSBuaWdodCDigJQgb3RoZXJ3aXNlIHRoZSByZXBvcnQgd291bGRcbiAqIHNob3cgb25lIGV4cG9zdXJlIHBlciBuaWdodCBvZiB0aGUgc2FtZSBwcm9ibGVtLCB3aGljaCByZWFkcyBhcyBhbiBlc2NhbGF0aW5nXG4gKiBzaXR1YXRpb24gd2hlbiBub3RoaW5nIGNoYW5nZWQuXG4gKlxuICogQSByZWZyZXNoIGRlbGliZXJhdGVseSBkb2VzIE5PVCByZXNldCBgdHJpYWdlX3N0YXRlYDogYW4gb3JnIHRoYXQgYWNjZXB0ZWQgYVxuICogZmluZGluZyB3aXRoIGEgcmVhc29uIGFuZCBhIGRlYWRsaW5lIGhhcyBtYWRlIGEgZGVjaXNpb24sIGFuZCByZS1yYWlzaW5nIGl0IGV2ZXJ5XG4gKiBuaWdodCBpcyBob3cgYSB0ZWFtIGxlYXJucyB0byBpZ25vcmUgdGhlIHJlcG9ydC4gSXQgRE9FUyBjbGVhciBhIHN0YWxlXG4gKiBhY2NlcHRhbmNlLCBiZWNhdXNlIHRoYXQgaXMgd2hhdCB0aGUgZGVhZGxpbmUgd2FzIGZvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwc2VydEV4cG9zdXJlcyhpbnB1dHM6IHJlYWRvbmx5IEV4cG9zdXJlSW5wdXRbXSwgbm93ID0gbmV3IERhdGUoKSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGlmIChpbnB1dHMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgY29uc3QgdmFsdWVzID0gaW5wdXRzLm1hcCgoZSkgPT4gKHtcbiAgICBpZDogcmFuZG9tVVVJRCgpLFxuICAgIG9yZ0lkOiBlLm9yZ0lkLFxuICAgIHBpcGVsaW5lSWQ6IGUucGlwZWxpbmVJZCxcbiAgICBwbHVnaW5QdWJsaXNoZXI6IGUucGx1Z2luUHVibGlzaGVyID8/IG51bGwsXG4gICAgcGx1Z2luTmFtZTogZS5wbHVnaW5OYW1lLFxuICAgIHBsdWdpblZlcnNpb246IGUucGx1Z2luVmVyc2lvbixcbiAgICBpbWFnZURpZ2VzdDogZS5pbWFnZURpZ2VzdCA/PyBudWxsLFxuICAgIHNvdXJjZTogZS5zb3VyY2UsXG4gICAgY3JpdGljYWxDb3VudDogZS5jcml0aWNhbENvdW50LFxuICAgIGhpZ2hDb3VudDogZS5oaWdoQ291bnQsXG4gICAgdG9wRmluZGluZ3M6IGUudG9wRmluZGluZ3MgPz8gW10sXG4gICAgZmluZGluZ0tleXM6IGUuZmluZGluZ0tleXMgPz8gW10sXG4gICAgZmxhZ2dlZEF0OiBub3csXG4gICAgdXBkYXRlZEF0OiBub3csXG4gIH0pKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGxhbmRlZCA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4Lmluc2VydChzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlKS52YWx1ZXModmFsdWVzKVxuICAgICAgLm9uQ29uZmxpY3REb1VwZGF0ZSh7XG4gICAgICAgIHRhcmdldDogW1xuICAgICAgICAgIHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUucGlwZWxpbmVJZCxcbiAgICAgICAgICBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnBsdWdpbk5hbWUsXG4gICAgICAgICAgc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5wbHVnaW5WZXJzaW9uLFxuICAgICAgICAgIHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuaW1hZ2VEaWdlc3QsXG4gICAgICAgICAgc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5zb3VyY2UsXG4gICAgICAgIF0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgIGNyaXRpY2FsQ291bnQ6IHNxbGBleGNsdWRlZC5jcml0aWNhbF9jb3VudGAsXG4gICAgICAgICAgaGlnaENvdW50OiBzcWxgZXhjbHVkZWQuaGlnaF9jb3VudGAsXG4gICAgICAgICAgdG9wRmluZGluZ3M6IHNxbGBleGNsdWRlZC50b3BfZmluZGluZ3NgLFxuICAgICAgICAgIGZpbmRpbmdLZXlzOiBzcWxgZXhjbHVkZWQuZmluZGluZ19rZXlzYCxcbiAgICAgICAgICAvLyBTdGlsbCBleHBvc2VkLCBzbyB0aGUgZml4IG1hcmtlciBpcyBjbGVhcmVkOiBhIHJvdyB0aGF0IHdhcyBjbG9zZWQgYnkgYVxuICAgICAgICAgIC8vIGRlcGxveSBhbmQgaXMgZmxhZ2dlZCBhZ2FpbiBpcyBhIHJlZ3Jlc3Npb24sIGFuZCBsZWF2aW5nIGBmaXhlZF9hdGAgc2V0XG4gICAgICAgICAgLy8gd291bGQgaGlkZSBpdC5cbiAgICAgICAgICBmaXhlZEF0OiBudWxsLFxuICAgICAgICAgIC8vIEFuIGFjY2VwdGFuY2UgcGFzdCBpdHMgZGVhZGxpbmUgc3RvcHMgYmVpbmcgYW4gYWNjZXB0YW5jZS4gVGhhdCBpcyB0aGVcbiAgICAgICAgICAvLyBlbnRpcmUgcG9pbnQgb2YgdGltZS1ib3hpbmcgaXQsIGFuZCBpdCBpcyBlbmZvcmNlZCBIRVJFIHJhdGhlciB0aGFuIGF0XG4gICAgICAgICAgLy8gcmVhZCB0aW1lIHNvIHRoZSBzdG9yZWQgc3RhdGUgaXMgdGhlIHRydXRoLlxuICAgICAgICAgIC8vIEFuIGFjY2VwdGFuY2UgY292ZXJzIHRoZSBmaW5kaW5ncyBpdCB3YXMgbWFkZSBvdmVyLCBuZXZlciBvbmVzIGZvdW5kXG4gICAgICAgICAgLy8gc2luY2U6IGEgcmVmcmVzaCBjYXJyeWluZyBhIGZpbmRpbmcga2V5IHRoZSBhY2NlcHRhbmNlIGRpZCBub3QgZnJlZXplXG4gICAgICAgICAgLy8gcmVvcGVucyB0aGUgcm93LCBzbyB0aGUgZGVjaXNpb24gaXMgbWFkZSBhZ2FpbiBhYm91dCB3aGF0IGlzIHRoZXJlIG5vdy5cbiAgICAgICAgICB0cmlhZ2VTdGF0ZTogc3FsYENBU0VcbiAgICAgICAgICAgIFdIRU4gJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnRyaWFnZVN0YXRlfSA9ICdhY2NlcHRlZCdcbiAgICAgICAgICAgICBBTkQgJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmFjY2VwdGVkVW50aWx9IElTIE5PVCBOVUxMXG4gICAgICAgICAgICAgQU5EICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5hY2NlcHRlZFVudGlsfSA8PSAke25vd31cbiAgICAgICAgICAgIFRIRU4gJ29wZW4nXG4gICAgICAgICAgICBXSEVOICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS50cmlhZ2VTdGF0ZX0gPSAnYWNjZXB0ZWQnXG4gICAgICAgICAgICAgQU5EIE5PVCAoZXhjbHVkZWQuZmluZGluZ19rZXlzIDxAICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5hY2NlcHRlZEZpbmRpbmdLZXlzfSlcbiAgICAgICAgICAgIFRIRU4gJ29wZW4nXG4gICAgICAgICAgICBXSEVOICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS50cmlhZ2VTdGF0ZX0gPSAnZml4ZWQnIFRIRU4gJ29wZW4nXG4gICAgICAgICAgICAtLSBBIFJFTU9WRUQgc3RlcCAvIHBpcGVsaW5lIGJhY2sgb24gdGhlIHNhbWUgdmVyc2lvbjogaXRzIGFjY2VwdGFuY2VcbiAgICAgICAgICAgIC0tIHJldHVybnMgaWYgc3RpbGwgaW4gZm9yY2UgYW5kIGl0IGNvdmVycyB3aGF0IHRoZSB2ZXJzaW9uIGNhcnJpZXMgbm93LlxuICAgICAgICAgICAgV0hFTiAke3NjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUudHJpYWdlU3RhdGV9ID0gJ3JlbW92ZWQnXG4gICAgICAgICAgICAgQU5EICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5hY2NlcHRlZFVudGlsfSBJUyBOT1QgTlVMTFxuICAgICAgICAgICAgIEFORCAke3NjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuYWNjZXB0ZWRVbnRpbH0gPiAke25vd31cbiAgICAgICAgICAgICBBTkQgZXhjbHVkZWQuZmluZGluZ19rZXlzIDxAICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5hY2NlcHRlZEZpbmRpbmdLZXlzfVxuICAgICAgICAgICAgVEhFTiAnYWNjZXB0ZWQnXG4gICAgICAgICAgICBXSEVOICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS50cmlhZ2VTdGF0ZX0gPSAncmVtb3ZlZCcgVEhFTiAnb3BlbidcbiAgICAgICAgICAgIEVMU0UgJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnRyaWFnZVN0YXRlfSBFTkRgLFxuICAgICAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5yZXR1cm5pbmcoeyBpZDogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5pZCB9KSk7XG4gICAgcmV0dXJuIChsYW5kZWQgYXMgdW5rbm93bltdKS5sZW5ndGg7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdQbHVnaW4gZXhwb3N1cmUgdXBzZXJ0IGZhaWxlZCcsIHsgY291bnQ6IHZhbHVlcy5sZW5ndGgsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKiogT25lIHZlcnNpb24gYSBwaXBlbGluZSBzdGlsbCBkZWNsYXJlcyAvIHJ1bnMgV0lUSCBvcGVuIGZpbmRpbmdzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXZlVmVyc2lvbiB7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBpbWFnZURpZ2VzdD86IHN0cmluZyB8IG51bGw7XG59XG5cbmNvbnN0IGxpdmVLZXkgPSAodjogTGl2ZVZlcnNpb24pOiBzdHJpbmcgPT4gYCR7di5wbHVnaW5OYW1lfUAke3YucGx1Z2luVmVyc2lvbn1AJHt2LmltYWdlRGlnZXN0ID8/ICcnfWA7XG5cbi8qKlxuICogQ2xvc2UgdGhlIGV4cG9zdXJlcyBvZiBvbmUgU09VUkNFIGEgcGlwZWxpbmUgaGFzIG1vdmVkIG9mZiDigJQgYGZpeGVkYCB3aGVuIHRoZVxuICogcGlwZWxpbmUgc3RpbGwgdXNlcyB0aGUgcGx1Z2luIGF0IGFub3RoZXIgdmVyc2lvbiwgYHJlbW92ZWRgIHdoZW4gbm8gbGl2ZSBzdGVwXG4gKiB1c2VzIHRoZSBwbHVnaW4gYXQgYWxsICh0aGUgdHJpYWdlIGZpZWxkcyBzdGF5LCBzbyBhIHJlLWFkZGVkIHN0ZXAgZ2V0cyBhblxuICogdW5leHBpcmVkIGFjY2VwdGFuY2UgYmFjayDigJQgc2VlIHtAbGluayB1cHNlcnRFeHBvc3VyZXN9KS5cbiAqXG4gKiBDYWxsZWQgd2hlbiBhIGRlcGxveSByZWNvcmRzIGEgbmV3IHN0ZXAgbWFuaWZlc3QgKGBkZXBsb3llZGApIG9yIGEgcGlwZWxpbmVcbiAqIHdyaXRlIHJlLXJlc29sdmVzIGl0cyBjb25maWcgKGBkZWNsYXJlZGApOiBhbnl0aGluZyBvcGVuIGZvciB0aGF0IHBpcGVsaW5lIGFuZFxuICogc291cmNlIHdob3NlICh2ZXJzaW9uLCBkaWdlc3QpIGlzIE5PVCBpbiBgbGl2ZVZlcnNpb25zYCBpcyBmaXhlZC4gQ2xvc2luZyBieVxuICogYWJzZW5jZSByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBhIHJlc2NhbiB0byBub3RpY2UgaXMgd2hhdCBtYWtlcyBcIndlIGZpeGVkIGl0XCJcbiAqIHNob3cgdXAgaW4gdGhlIHJlcG9ydCBvbiB0aGUgbmV4dCBkZXBsb3kgaW5zdGVhZCBvZiB0aGUgbmV4dCBuaWdodC5cbiAqXG4gKiBQZXIgc291cmNlLCBiZWNhdXNlIHRoZSB0d28gc2lkZXMgbW92ZSBpbmRlcGVuZGVudGx5OiBhIGNvbmZpZyB1cGRhdGVkIHRvIHRoZVxuICogZml4ZWQgdmVyc2lvbiBjbG9zZXMgdGhlIERFQ0xBUkVEIGV4cG9zdXJlIHdoaWxlIHRoZSBvbGQgaW1hZ2Uga2VlcHMgcnVubmluZyxcbiAqIGFuZCBpdHMgREVQTE9ZRUQgZXhwb3N1cmUgbXVzdCBzdGF5IG9wZW4gdW50aWwgdGhlIGRlcGxveSBsYW5kcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlRml4ZWRFeHBvc3VyZXMoXG4gIHBpcGVsaW5lSWQ6IHN0cmluZyxcbiAgc291cmNlOiBFeHBvc3VyZVNvdXJjZSxcbiAgbGl2ZVZlcnNpb25zOiByZWFkb25seSBMaXZlVmVyc2lvbltdLFxuICBub3cgPSBuZXcgRGF0ZSgpLFxuICBvcHRzOiB7IGxpdmVQbHVnaW5zPzogcmVhZG9ubHkgc3RyaW5nW10gfSA9IHt9LFxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3QgbGl2ZSA9IG5ldyBTZXQobGl2ZVZlcnNpb25zLm1hcChsaXZlS2V5KSk7XG4gIGNvbnN0IGxpdmVQbHVnaW5zID0gbmV3IFNldChbLi4ubGl2ZVZlcnNpb25zLCAuLi4ob3B0cy5saXZlUGx1Z2lucyA/PyBbXSldLm1hcCgodikgPT4gKHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiB2LnBsdWdpbk5hbWUpKSk7XG4gIGNvbnN0IG9wZW4gPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5zZWxlY3Qoe1xuICAgIGlkOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmlkLFxuICAgIHBsdWdpbk5hbWU6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUucGx1Z2luTmFtZSxcbiAgICBwbHVnaW5WZXJzaW9uOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnBsdWdpblZlcnNpb24sXG4gICAgaW1hZ2VEaWdlc3Q6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuaW1hZ2VEaWdlc3QsXG4gIH0pLmZyb20oc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5waXBlbGluZUlkLCBwaXBlbGluZUlkKSxcbiAgICAgIGVxKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuc291cmNlLCBzb3VyY2UpLFxuICAgICAgaXNOdWxsKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuZml4ZWRBdCksXG4gICAgKSkpO1xuICBjb25zdCBzdGFsZVJvd3MgPSAob3BlbiBhcyBBcnJheTxMaXZlVmVyc2lvbiAmIHsgaWQ6IHN0cmluZyB9PikuZmlsdGVyKChyKSA9PiAhbGl2ZS5oYXMobGl2ZUtleShyKSkpO1xuICBpZiAoc3RhbGVSb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gIGNvbnN0IGZpeGVkID0gc3RhbGVSb3dzLmZpbHRlcigocikgPT4gbGl2ZVBsdWdpbnMuaGFzKHIucGx1Z2luTmFtZSkpLm1hcCgocikgPT4gci5pZCk7XG4gIGNvbnN0IHJlbW92ZWQgPSBzdGFsZVJvd3MuZmlsdGVyKChyKSA9PiAhbGl2ZVBsdWdpbnMuaGFzKHIucGx1Z2luTmFtZSkpLm1hcCgocikgPT4gci5pZCk7XG4gIGxldCBjbG9zZWQgPSAwO1xuICBmb3IgKGNvbnN0IFtpZHMsIHN0YXRlXSBvZiBbW2ZpeGVkLCAnZml4ZWQnXSwgW3JlbW92ZWQsICdyZW1vdmVkJ11dIGFzIGNvbnN0KSB7XG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC51cGRhdGUoc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZSlcbiAgICAgIC5zZXQoeyBmaXhlZEF0OiBub3csIHRyaWFnZVN0YXRlOiBzdGF0ZSwgdXBkYXRlZEF0OiBub3cgfSlcbiAgICAgIC53aGVyZShpbkFycmF5KHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuaWQsIFsuLi5pZHNdKSlcbiAgICAgIC5yZXR1cm5pbmcoeyBpZDogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5pZCB9KSk7XG4gICAgY2xvc2VkICs9IChyb3dzIGFzIHVua25vd25bXSkubGVuZ3RoO1xuICB9XG4gIHJldHVybiBjbG9zZWQ7XG59XG5cbi8qKlxuICogQ2xvc2UgZXZlcnkgb3BlbiBleHBvc3VyZSBvZiBhIHBpcGVsaW5lIChvciBvZiBvbmUgc291cmNlKSBhcyBgcmVtb3ZlZGAg4oCUIHRoZVxuICogcGlwZWxpbmUgd2FzIGRlbGV0ZWQsIG9yIGRlcmVnaXN0ZXJlZCAoaXRzIGRlcGxveSBpcyBnb25lKS4gVGhlIHRyaWFnZSBmaWVsZHNcbiAqIHN0YXk6IGEgcmVzdG9yZSByZS1yZWNvcmRzIHRoZSBwaXBlbGluZSdzIHJlc29sdXRpb24sIGFuZFxuICoge0BsaW5rIHVwc2VydEV4cG9zdXJlc30gcmVvcGVucyB0aGUgcm93cyAocmVzdG9yaW5nIGFuIGFjY2VwdGFuY2Ugc3RpbGwgaW5cbiAqIGZvcmNlKS4gUmV0dXJucyB0aGUgcm93cyBjbG9zZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVBpcGVsaW5lRXhwb3N1cmVzKFxuICBwaXBlbGluZUlkOiBzdHJpbmcsXG4gIHN0YXRlOiAncmVtb3ZlZCcsXG4gIG9wdHM6IHsgc291cmNlPzogRXhwb3N1cmVTb3VyY2UgfSA9IHt9LFxuICBub3cgPSBuZXcgRGF0ZSgpLFxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnVwZGF0ZShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlKVxuICAgIC5zZXQoeyBmaXhlZEF0OiBub3csIHRyaWFnZVN0YXRlOiBzdGF0ZSwgdXBkYXRlZEF0OiBub3cgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5waXBlbGluZUlkLCBwaXBlbGluZUlkKSxcbiAgICAgIGlzTnVsbChzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmZpeGVkQXQpLFxuICAgICAgLi4uKG9wdHMuc291cmNlID8gW2VxKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuc291cmNlLCBvcHRzLnNvdXJjZSldIDogW10pLFxuICAgICkpXG4gICAgLnJldHVybmluZyh7IGlkOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmlkIH0pKTtcbiAgcmV0dXJuIChyb3dzIGFzIHVua25vd25bXSkubGVuZ3RoO1xufVxuXG4vKiogT25lIHN0ZXAgb2YgYSBwaXBlbGluZSBhcyB7QGxpbmsgcmVjb25jaWxlUGlwZWxpbmVFeHBvc3VyZXN9IHRha2VzIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvc3VyZVN0ZXAge1xuICBwbHVnaW5QdWJsaXNoZXI/OiBzdHJpbmcgfCBudWxsO1xuICBwbHVnaW5OYW1lOiBzdHJpbmc7XG4gIHBsdWdpblZlcnNpb246IHN0cmluZztcbiAgaW1hZ2VEaWdlc3Q/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIHJlc29sdmVkIHZlcnNpb24ncyBzY2FuIHN0YXRlLCBhcyBzdG9yZWQgb24gaXRzIHJvdy4gKi9cbiAgc2NhbjogU2NhblN0YXRlO1xufVxuXG4vKipcbiAqIEJyaW5nIG9uZSBwaXBlbGluZSdzIGV4cG9zdXJlcyBvZiBvbmUgc291cmNlIGluIGxpbmUgd2l0aCB0aGUgc3RlcHMgaXQgbm93XG4gKiBkZWNsYXJlcyAoYGRlY2xhcmVkYCkgb3IgcnVucyAoYGRlcGxveWVkYCk6IG9wZW4gLyByZWZyZXNoIGEgcm93IGZvciBldmVyeSBzdGVwXG4gKiB3aG9zZSB2ZXJzaW9uIGhhcyBvcGVuIGZpeGFibGUgZmluZGluZ3MsIGNsb3NlIHRoZSByZXN0IGJ5IGFic2VuY2UuXG4gKlxuICogTmV2ZXIgdGhyb3dzIOKAlCBleHBvc3VyZSB0cmFja2luZyBpcyByZXBvcnRpbmcsIGFuZCBhIHBpcGVsaW5lIHdyaXRlIG9yIGEgZGVwbG95XG4gKiByZWdpc3RyYXRpb24gbXVzdCBub3QgZmFpbCBiZWNhdXNlIHRoZSByZXBvcnQgdGFibGUgY291bGQgbm90IGJlIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvbmNpbGVQaXBlbGluZUV4cG9zdXJlcyhcbiAgaW5wdXQ6IHsgb3JnSWQ6IHN0cmluZzsgcGlwZWxpbmVJZDogc3RyaW5nOyBzb3VyY2U6IEV4cG9zdXJlU291cmNlOyBzdGVwczogcmVhZG9ubHkgRXhwb3N1cmVTdGVwW10gfSxcbiAgbm93ID0gbmV3IERhdGUoKSxcbik6IFByb21pc2U8eyBvcGVuZWQ6IG51bWJlcjsgY2xvc2VkOiBudW1iZXIgfT4ge1xuICBjb25zdCBleHBvc2VkOiBFeHBvc3VyZUlucHV0W10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHN0ZXAgb2YgaW5wdXQuc3RlcHMpIHtcbiAgICBjb25zdCBjb3VudHMgPSBleHBvc3VyZUZyb21TY2FuKHsgLi4uc3RlcC5zY2FuLCBpbWFnZURpZ2VzdDogc3RlcC5pbWFnZURpZ2VzdCA/PyBzdGVwLnNjYW4uaW1hZ2VEaWdlc3QgPz8gbnVsbCB9KTtcbiAgICBpZiAoIWNvdW50cykgY29udGludWU7XG4gICAgY29uc3Qga2V5ID0gbGl2ZUtleSh7IHBsdWdpbk5hbWU6IHN0ZXAucGx1Z2luTmFtZSwgcGx1Z2luVmVyc2lvbjogc3RlcC5wbHVnaW5WZXJzaW9uLCBpbWFnZURpZ2VzdDogc3RlcC5pbWFnZURpZ2VzdCB9KTtcbiAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7IC8vIHR3byBzdGVwcyBvbiBvbmUgdmVyc2lvbiBhcmUgb25lIGV4cG9zdXJlXG4gICAgc2Vlbi5hZGQoa2V5KTtcbiAgICBleHBvc2VkLnB1c2goe1xuICAgICAgb3JnSWQ6IGlucHV0Lm9yZ0lkLFxuICAgICAgcGlwZWxpbmVJZDogaW5wdXQucGlwZWxpbmVJZCxcbiAgICAgIHBsdWdpblB1Ymxpc2hlcjogc3RlcC5wbHVnaW5QdWJsaXNoZXIgPz8gbnVsbCxcbiAgICAgIHBsdWdpbk5hbWU6IHN0ZXAucGx1Z2luTmFtZSxcbiAgICAgIHBsdWdpblZlcnNpb246IHN0ZXAucGx1Z2luVmVyc2lvbixcbiAgICAgIGltYWdlRGlnZXN0OiBzdGVwLmltYWdlRGlnZXN0ID8/IG51bGwsXG4gICAgICBzb3VyY2U6IGlucHV0LnNvdXJjZSxcbiAgICAgIC4uLmNvdW50cyxcbiAgICAgIHRvcEZpbmRpbmdzOiBjb3VudHMudG9wRmluZGluZ3MgYXMgdW5rbm93biBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gICAgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB1cHNlcnRFeHBvc3VyZXMoZXhwb3NlZCwgbm93KTtcbiAgICAvLyBFdmVyeSBwbHVnaW4gYSBzdGVwIHN0aWxsIHVzZXMgKGNsZWFuIHZlcnNpb25zIHRvbyk6IGEgcm93IGZvciBvbmUgb2ZcbiAgICAvLyB0aGVtIGNsb3NlcyBgZml4ZWRgOyBhIHJvdyBmb3IgYSBwbHVnaW4gbm8gc3RlcCB1c2VzIGFueSBtb3JlLCBgcmVtb3ZlZGAuXG4gICAgY29uc3QgY2xvc2VkID0gYXdhaXQgY2xvc2VGaXhlZEV4cG9zdXJlcyhpbnB1dC5waXBlbGluZUlkLCBpbnB1dC5zb3VyY2UsIGV4cG9zZWQsIG5vdywgeyBsaXZlUGx1Z2luczogaW5wdXQuc3RlcHMubWFwKChzKSA9PiBzLnBsdWdpbk5hbWUpIH0pO1xuICAgIHJldHVybiB7IG9wZW5lZCwgY2xvc2VkIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdQaXBlbGluZSBleHBvc3VyZSByZWNvbmNpbGUgZmFpbGVkJywgeyBwaXBlbGluZUlkOiBpbnB1dC5waXBlbGluZUlkLCBzb3VyY2U6IGlucHV0LnNvdXJjZSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIHJldHVybiB7IG9wZW5lZDogMCwgY2xvc2VkOiAwIH07XG4gIH1cbn1cblxuLyoqIEEgcGx1Z2luIHZlcnNpb24gKG9wdGlvbmFsbHkgb25lIGltYWdlIG9mIGl0KSB3aG9zZSBwaXBlbGluZXMgYXJlIHdhbnRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luVmVyc2lvblJlZiB7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICAvKiogTGlzdGluZyBwdWJsaXNoZXIgaGFuZGxlOyBudWxsID0gYW4gb3JnJ3Mgb3duIHBsdWdpbiByb3c7IG9taXR0ZWQgPSBlaXRoZXIuICovXG4gIHBsdWdpblB1Ymxpc2hlcj86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBOYXJyb3cgdG8gcGlwZWxpbmVzIG9uIHRoaXMgaW1hZ2UuIE9taXR0ZWQgPSBhbnkgaW1hZ2Ugb2YgdGhlIHZlcnNpb24uICovXG4gIGltYWdlRGlnZXN0Pzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIE5hcnJvdyB0byB0aGVzZSBvcmdzLiBPbWl0dGVkID0gZXZlcnkgb3JnIHRoZSBjYWxsZXIncyBzY29wZSBjYW4gcmVhZC4gKi9cbiAgb3JnSWRzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKiBBIHBpcGVsaW5lIHRoYXQgZGVjbGFyZXMgb3IgcnVucyBhIGdpdmVuIHBsdWdpbiB2ZXJzaW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZU9uVmVyc2lvbiB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICAvKiogYGRlcGxveWVkYCA9IGl0cyBsYXN0IGRlcGxveSdzIHN0ZXAgbWFuaWZlc3Q7IGBkZWNsYXJlZGAgPSBpdHMgY29uZmlnIHJlc29sdmVzIHRvIGl0LiAqL1xuICBzb3VyY2U6IEV4cG9zdXJlU291cmNlO1xuICBwbHVnaW5QdWJsaXNoZXI6IHN0cmluZyB8IG51bGw7XG4gIGltYWdlRGlnZXN0OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIHN0ZXBzIG9uIGl0OiBgc3ludGhgIG9yIGA8c3RhZ2U+LzxzdGVwPmAgKGRlY2xhcmVkKSAvIGA8c3RhZ2U+LzxhY3Rpb24+YCAoZGVwbG95ZWQpLiAqL1xuICBzdGVwczogc3RyaW5nW107XG59XG5cbi8qKlxuICogRXZlcnkgTElWRSBwaXBlbGluZSBkZWNsYXJpbmcgKGBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbmApIG9yIHJ1bm5pbmdcbiAqIChgcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHNgKSBhIHBsdWdpbiB2ZXJzaW9uLCBvbmUgZW50cnkgcGVyIChwaXBlbGluZSwgc291cmNlKVxuICogd2l0aCB0aGUgc3RlcHMgb24gaXQuIEEgc29mdC1kZWxldGVkIHBpcGVsaW5lIGlzIE5PVCBhZmZlY3RlZDogY291bnRpbmcgaXRcbiAqIHdvdWxkIHB1dCBhIHBpcGVsaW5lIG5vYm9keSBjYW4gb3BlbiBpbnRvIGEgbm90aWNlIG9yIGEgcmVwb3J0LiBSZWFkcyB1bmRlclxuICogdGhlIENBTExFUidzIHRlbmFudCBzY29wZTogYW4gb3JnLXNjb3BlZCBjYWxsZXIgc2VlcyBpdHMgb3duIHBpcGVsaW5lcywgdGhlXG4gKiByZXNjYW4gKGVsZXZhdGVkKSBzZWVzIGV2ZXJ5IG9yZydzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGlwZWxpbmVzT25WZXJzaW9uKHJlZjogUGx1Z2luVmVyc2lvblJlZik6IFByb21pc2U8UGlwZWxpbmVPblZlcnNpb25bXT4ge1xuICBjb25zdCBwdWJsaXNoZXJTcWwgPSAoY29sOiBzdHJpbmcpID0+IChyZWYucGx1Z2luUHVibGlzaGVyID09PSB1bmRlZmluZWRcbiAgICA/IHNxbGBgXG4gICAgOiByZWYucGx1Z2luUHVibGlzaGVyID09PSBudWxsID8gc3FsYCBBTkQgJHtzcWwucmF3KGNvbCl9IElTIE5VTExgIDogc3FsYCBBTkQgJHtzcWwucmF3KGNvbCl9ID0gJHtyZWYucGx1Z2luUHVibGlzaGVyfWApO1xuICBjb25zdCBkaWdlc3RTcWwgPSAoY29sOiBzdHJpbmcpID0+IChyZWYuaW1hZ2VEaWdlc3QgPyBzcWxgIEFORCAke3NxbC5yYXcoY29sKX0gPSAke3JlZi5pbWFnZURpZ2VzdH1gIDogc3FsYGApO1xuICBjb25zdCBvcmdTcWwgPSAoY29sOiBzdHJpbmcpID0+IChyZWYub3JnSWRzID8gc3FsYCBBTkQgJHtzcWwucmF3KGNvbCl9ID0gQU5ZKCR7Wy4uLnJlZi5vcmdJZHNdfSlgIDogc3FsYGApO1xuICBpZiAocmVmLm9yZ0lkcyAmJiByZWYub3JnSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgeC5vcmdfaWQsIHgucGlwZWxpbmVfaWQsIHguc291cmNlLCBNSU4oeC5wbHVnaW5fcHVibGlzaGVyKSBBUyBwbHVnaW5fcHVibGlzaGVyLCBNSU4oeC5pbWFnZV9kaWdlc3QpIEFTIGltYWdlX2RpZ2VzdCxcbiAgICAgICAgICAgcC5waXBlbGluZV9uYW1lLCBhcnJheV9hZ2coRElTVElOQ1QgeC5zdGVwIE9SREVSIEJZIHguc3RlcCkgQVMgc3RlcHNcbiAgICBGUk9NIChcbiAgICAgIFNFTEVDVCBtLm9yZ19pZCwgbS5waXBlbGluZV9pZDo6dGV4dCBBUyBwaXBlbGluZV9pZCwgJ2RlcGxveWVkJyBBUyBzb3VyY2UsIG0ucGx1Z2luX3B1Ymxpc2hlciwgbS5pbWFnZV9kaWdlc3QsXG4gICAgICAgICAgICAgbS5zdGFnZV9uYW1lIHx8ICcvJyB8fCBtLmFjdGlvbl9uYW1lIEFTIHN0ZXBcbiAgICAgIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbVxuICAgICAgV0hFUkUgbS5wbHVnaW5fbmFtZSA9ICR7cmVmLnBsdWdpbk5hbWV9IEFORCBtLnBsdWdpbl92ZXJzaW9uID0gJHtyZWYucGx1Z2luVmVyc2lvbn1cbiAgICAgICAgJHtwdWJsaXNoZXJTcWwoJ20ucGx1Z2luX3B1Ymxpc2hlcicpfSR7ZGlnZXN0U3FsKCdtLmltYWdlX2RpZ2VzdCcpfSR7b3JnU3FsKCdtLm9yZ19pZCcpfVxuICAgICAgVU5JT04gQUxMXG4gICAgICBTRUxFQ1Qgci5vcmdfaWQsIHIucGlwZWxpbmVfaWQsICdkZWNsYXJlZCcgQVMgc291cmNlLCByLnBsdWdpbl9wdWJsaXNoZXIsIHIucmVzb2x2ZWRfZGlnZXN0IEFTIGltYWdlX2RpZ2VzdCxcbiAgICAgICAgICAgICBDQVNFIFdIRU4gci5zdGFnZV9uYW1lID0gJ3N5bnRoJyBBTkQgci5zdGVwX25hbWUgPSAnc3ludGgnIFRIRU4gJ3N5bnRoJyBFTFNFIHIuc3RhZ2VfbmFtZSB8fCAnLycgfHwgci5zdGVwX25hbWUgRU5EIEFTIHN0ZXBcbiAgICAgIEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gclxuICAgICAgV0hFUkUgci5wbHVnaW5fbmFtZSA9ICR7cmVmLnBsdWdpbk5hbWV9IEFORCByLnJlc29sdmVkX3ZlcnNpb24gPSAke3JlZi5wbHVnaW5WZXJzaW9ufVxuICAgICAgICAke3B1Ymxpc2hlclNxbCgnci5wbHVnaW5fcHVibGlzaGVyJyl9JHtkaWdlc3RTcWwoJ3IucmVzb2x2ZWRfZGlnZXN0Jyl9JHtvcmdTcWwoJ3Iub3JnX2lkJyl9XG4gICAgKSB4XG4gICAgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0geC5waXBlbGluZV9pZCBBTkQgcC5kZWxldGVkX2F0IElTIE5VTExcbiAgICBHUk9VUCBCWSB4Lm9yZ19pZCwgeC5waXBlbGluZV9pZCwgeC5zb3VyY2UsIHAucGlwZWxpbmVfbmFtZVxuICAgIE9SREVSIEJZIHgucGlwZWxpbmVfaWQsIHguc291cmNlXG4gIGApKTtcbiAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6ICgocmVzdWx0IGFzIHsgcm93cz86IHVua25vd25bXSB9KT8ucm93cyA/PyBbXSk7XG4gIHJldHVybiAocm93cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pLm1hcCgocikgPT4gKHtcbiAgICBvcmdJZDogU3RyaW5nKHIub3JnX2lkKSxcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgc291cmNlOiByLnNvdXJjZSBhcyBFeHBvc3VyZVNvdXJjZSxcbiAgICBwbHVnaW5QdWJsaXNoZXI6IChyLnBsdWdpbl9wdWJsaXNoZXIgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBpbWFnZURpZ2VzdDogKHIuaW1hZ2VfZGlnZXN0IGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgc3RlcHM6IEFycmF5LmlzQXJyYXkoci5zdGVwcykgPyAoci5zdGVwcyBhcyBzdHJpbmdbXSkgOiBbXSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIFRoZSByZXNjYW4ncyBlbnRyeSBwb2ludDogb25lIHJlc2Nhbm5lZCB2ZXJzaW9uJ3MgZmluZGluZ3MsIGZhbm5lZCBvdXQgdG8gZXZlcnlcbiAqIHBpcGVsaW5lIHRoYXQgZGVjbGFyZXMgb3IgcnVucyBpdC5cbiAqXG4gKiBBIHZlcnNpb24gd2l0aCBvcGVuIGZpeGFibGUgZmluZGluZ3Mgb3BlbnMgLyByZWZyZXNoZXMgb25lIGV4cG9zdXJlIHBlclxuICogKHBpcGVsaW5lLCBzb3VyY2UpOyBhIHZlcnNpb24gdGhhdCBjYW1lIGJhY2sgQ0xFQU4gY2xvc2VzIGV2ZXJ5IG9wZW4gZXhwb3N1cmVcbiAqIG9uIGl0IChgZml4ZWRgKSwgc28gYSByZWJ1aWxkLWluLXBsYWNlIG9yIGFuIGFkdmlzb3J5IHdpdGhkcmF3biB1cHN0cmVhbSBzaG93c1xuICogYXMgZml4ZWQgb24gdGhlIG5leHQgbmlnaHQgcmF0aGVyIHRoYW4gbGluZ2VyaW5nIHVudGlsIGVhY2ggcGlwZWxpbmUgcmVkZXBsb3lzLlxuICpcbiAqIE11c3QgcnVuIHdpdGggYSBzY29wZSB0aGF0IGNhbiByZWFkIGFuZCB3cml0ZSBldmVyeSBvcmcncyByb3dzICh0aGUgcmVzY2FuJ3NcbiAqIGVsZXZhdGVkIGNvbnRleHQpLiBOZXZlciB0aHJvd3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzeW5jVmVyc2lvbkV4cG9zdXJlcyhcbiAgcmVmOiBQbHVnaW5WZXJzaW9uUmVmLFxuICBzY2FuOiBTY2FuU3RhdGUsXG4gIG5vdyA9IG5ldyBEYXRlKCksXG4pOiBQcm9taXNlPHsgb3BlbmVkOiBudW1iZXI7IGNsb3NlZDogbnVtYmVyIH0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb3VudHMgPSBleHBvc3VyZUZyb21TY2FuKHsgLi4uc2NhbiwgaW1hZ2VEaWdlc3Q6IHJlZi5pbWFnZURpZ2VzdCA/PyBzY2FuLmltYWdlRGlnZXN0ID8/IG51bGwgfSk7XG4gICAgaWYgKCFjb3VudHMpIHJldHVybiB7IG9wZW5lZDogMCwgY2xvc2VkOiBhd2FpdCBjbG9zZVZlcnNpb25FeHBvc3VyZXMocmVmLCBub3cpIH07XG4gICAgY29uc3QgcGlwZWxpbmVzID0gYXdhaXQgcGlwZWxpbmVzT25WZXJzaW9uKHJlZik7XG4gICAgY29uc3Qgb3BlbmVkID0gYXdhaXQgdXBzZXJ0RXhwb3N1cmVzKHBpcGVsaW5lcy5tYXAoKHApID0+ICh7XG4gICAgICBvcmdJZDogcC5vcmdJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHAucGlwZWxpbmVJZCxcbiAgICAgIHBsdWdpblB1Ymxpc2hlcjogcC5wbHVnaW5QdWJsaXNoZXIsXG4gICAgICBwbHVnaW5OYW1lOiByZWYucGx1Z2luTmFtZSxcbiAgICAgIHBsdWdpblZlcnNpb246IHJlZi5wbHVnaW5WZXJzaW9uLFxuICAgICAgaW1hZ2VEaWdlc3Q6IHJlZi5pbWFnZURpZ2VzdCA/PyBwLmltYWdlRGlnZXN0LFxuICAgICAgc291cmNlOiBwLnNvdXJjZSxcbiAgICAgIGNyaXRpY2FsQ291bnQ6IGNvdW50cy5jcml0aWNhbENvdW50LFxuICAgICAgaGlnaENvdW50OiBjb3VudHMuaGlnaENvdW50LFxuICAgICAgdG9wRmluZGluZ3M6IGNvdW50cy50b3BGaW5kaW5ncyBhcyB1bmtub3duIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgICAgIGZpbmRpbmdLZXlzOiBjb3VudHMuZmluZGluZ0tleXMsXG4gICAgfSkpLCBub3cpO1xuICAgIHJldHVybiB7IG9wZW5lZCwgY2xvc2VkOiAwIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdWZXJzaW9uIGV4cG9zdXJlIHN5bmMgZmFpbGVkJywgeyBwbHVnaW46IHJlZi5wbHVnaW5OYW1lLCB2ZXJzaW9uOiByZWYucGx1Z2luVmVyc2lvbiwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIHJldHVybiB7IG9wZW5lZDogMCwgY2xvc2VkOiAwIH07XG4gIH1cbn1cblxuLyoqIENsb3NlIGV2ZXJ5IG9wZW4gZXhwb3N1cmUgb24gYSB2ZXJzaW9uIChvcHRpb25hbGx5IG9uZSBpbWFnZSBvZiBpdCkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xvc2VWZXJzaW9uRXhwb3N1cmVzKHJlZjogUGx1Z2luVmVyc2lvblJlZiwgbm93ID0gbmV3IERhdGUoKSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IEUgPSBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKEUpXG4gICAgLnNldCh7IGZpeGVkQXQ6IG5vdywgdHJpYWdlU3RhdGU6ICdmaXhlZCcsIHVwZGF0ZWRBdDogbm93IH0pXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKEUucGx1Z2luTmFtZSwgcmVmLnBsdWdpbk5hbWUpLFxuICAgICAgZXEoRS5wbHVnaW5WZXJzaW9uLCByZWYucGx1Z2luVmVyc2lvbiksXG4gICAgICBpc051bGwoRS5maXhlZEF0KSxcbiAgICAgIC4uLihyZWYuaW1hZ2VEaWdlc3QgPyBbZXEoRS5pbWFnZURpZ2VzdCwgcmVmLmltYWdlRGlnZXN0KV0gOiBbXSksXG4gICAgICAuLi4ocmVmLnBsdWdpblB1Ymxpc2hlciA9PT0gdW5kZWZpbmVkID8gW10gOiBbcmVmLnBsdWdpblB1Ymxpc2hlciA9PT0gbnVsbCA/IGlzTnVsbChFLnBsdWdpblB1Ymxpc2hlcikgOiBlcShFLnBsdWdpblB1Ymxpc2hlciwgcmVmLnBsdWdpblB1Ymxpc2hlcildKSxcbiAgICAgIC4uLihyZWYub3JnSWRzID8gW2luQXJyYXkoRS5vcmdJZCwgWy4uLnJlZi5vcmdJZHNdKV0gOiBbXSksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IEUuaWQgfSkpO1xuICByZXR1cm4gKHJvd3MgYXMgdW5rbm93bltdKS5sZW5ndGg7XG59XG5cbi8qKlxuICogVGhlIG9yZydzIGxpdmUgZXhwb3N1cmVzLCBmb3IgdGhlIHJlcG9ydCBzZWN0aW9uLlxuICpcbiAqIGBhY2NlcHRlZGAgcm93cyB3aG9zZSBkZWFkbGluZSBoYXMgcGFzc2VkIGNvbWUgYmFjayBhcyBPUEVOIGV2ZW4gaWYgbm8gcmVzY2FuXG4gKiBoYXMgcmVmcmVzaGVkIHRoZW0geWV0OiBhIHJlYWQgbXVzdCBub3QgcHJlc2VudCBhbiBleHBpcmVkIGFjY2VwdGFuY2UgYXMgYVxuICogY3VycmVudCBvbmUsIGFuZCB0aGUgcmVwb3J0IGlzIHJlYWQgZmFyIG1vcmUgb2Z0ZW4gdGhhbiB0aGUgcmVzY2FuIHJ1bnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuRXhwb3N1cmVzKG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwbHVnaW5OYW1lOiBzdHJpbmc7XG4gIHBsdWdpblZlcnNpb246IHN0cmluZztcbiAgcGx1Z2luUHVibGlzaGVyOiBzdHJpbmcgfCBudWxsO1xuICBzb3VyY2U6IEV4cG9zdXJlU291cmNlO1xuICBjcml0aWNhbENvdW50OiBudW1iZXI7XG4gIGhpZ2hDb3VudDogbnVtYmVyO1xuICB0b3BGaW5kaW5nczogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICB0cmlhZ2VTdGF0ZTogc3RyaW5nO1xuICBmbGFnZ2VkQXQ6IERhdGU7XG59Pj4ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHguc2VsZWN0KHtcbiAgICBwaXBlbGluZUlkOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnBpcGVsaW5lSWQsXG4gICAgcGx1Z2luTmFtZTogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5wbHVnaW5OYW1lLFxuICAgIHBsdWdpblZlcnNpb246IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUucGx1Z2luVmVyc2lvbixcbiAgICBwbHVnaW5QdWJsaXNoZXI6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUucGx1Z2luUHVibGlzaGVyLFxuICAgIHNvdXJjZTogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5zb3VyY2UsXG4gICAgY3JpdGljYWxDb3VudDogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5jcml0aWNhbENvdW50LFxuICAgIGhpZ2hDb3VudDogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5oaWdoQ291bnQsXG4gICAgdG9wRmluZGluZ3M6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUudG9wRmluZGluZ3MsXG4gICAgdHJpYWdlU3RhdGU6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUudHJpYWdlU3RhdGUsXG4gICAgYWNjZXB0ZWRVbnRpbDogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5hY2NlcHRlZFVudGlsLFxuICAgIGZsYWdnZWRBdDogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5mbGFnZ2VkQXQsXG4gIH0pLmZyb20oc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5vcmdJZCwgb3JnSWQpLFxuICAgICAgbGl2ZUV4cG9zdXJlUHJlZGljYXRlKG5vdyksXG4gICAgKSlcbiAgICAub3JkZXJCeShzcWxgJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmNyaXRpY2FsQ291bnR9IERFU0MsICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5oaWdoQ291bnR9IERFU0NgKSk7XG5cbiAgcmV0dXJuIChyb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikubWFwKChyKSA9PiAoe1xuICAgIHBpcGVsaW5lSWQ6IHIucGlwZWxpbmVJZCBhcyBzdHJpbmcsXG4gICAgcGx1Z2luTmFtZTogci5wbHVnaW5OYW1lIGFzIHN0cmluZyxcbiAgICBwbHVnaW5WZXJzaW9uOiByLnBsdWdpblZlcnNpb24gYXMgc3RyaW5nLFxuICAgIHBsdWdpblB1Ymxpc2hlcjogKHIucGx1Z2luUHVibGlzaGVyIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgc291cmNlOiByLnNvdXJjZSBhcyBFeHBvc3VyZVNvdXJjZSxcbiAgICBjcml0aWNhbENvdW50OiByLmNyaXRpY2FsQ291bnQgYXMgbnVtYmVyLFxuICAgIGhpZ2hDb3VudDogci5oaWdoQ291bnQgYXMgbnVtYmVyLFxuICAgIHRvcEZpbmRpbmdzOiAoci50b3BGaW5kaW5ncyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pID8/IFtdLFxuICAgIC8vIE9ubHkgYWNjZXB0YW5jZXMgTk9UIGluIGZvcmNlIHBhc3MgdGhlIGxpdmUgcHJlZGljYXRlLCBzbyBhbiBgYWNjZXB0ZWRgXG4gICAgLy8gcm93IGhlcmUgaXMgYW4gZXhwaXJlZCBvbmUsIGFuZCByZWFkcyBhcyB3aGF0IGl0IGlzOiBvcGVuLlxuICAgIHRyaWFnZVN0YXRlOiByLnRyaWFnZVN0YXRlID09PSAnYWNjZXB0ZWQnID8gJ29wZW4nIDogKHIudHJpYWdlU3RhdGUgYXMgc3RyaW5nKSxcbiAgICBmbGFnZ2VkQXQ6IHIuZmxhZ2dlZEF0IGFzIERhdGUsXG4gIH0pKTtcbn1cblxuLyoqIE9uZSBleHBvc3VyZSByb3cgYXMgdGhlIHBlci1waXBlbGluZSBzZWN1cml0eSB2aWV3cyByZWFkIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUV4cG9zdXJlIHtcbiAgaWQ6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwbHVnaW5QdWJsaXNoZXI6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBpbWFnZURpZ2VzdDogc3RyaW5nIHwgbnVsbDtcbiAgc291cmNlOiBFeHBvc3VyZVNvdXJjZTtcbiAgY3JpdGljYWxDb3VudDogbnVtYmVyO1xuICBoaWdoQ291bnQ6IG51bWJlcjtcbiAgdG9wRmluZGluZ3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgZmluZGluZ0tleXM6IHN0cmluZ1tdO1xuICAvKiogQXMgc3RvcmVkOyBhbiBgYWNjZXB0ZWRgIHJvdyBwYXN0IGl0cyBkZWFkbGluZSByZWFkcyBgb3BlbmAgKHNlZSB7QGxpbmsgbGl2ZUV4cG9zdXJlUHJlZGljYXRlfSkuICovXG4gIHRyaWFnZVN0YXRlOiBzdHJpbmc7XG4gIC8qKiBBbiBhY2NlcHRhbmNlIHN0aWxsIGluIGZvcmNlIHJpZ2h0IG5vdy4gKi9cbiAgYWNjZXB0YW5jZUFjdGl2ZTogYm9vbGVhbjtcbiAgYWNjZXB0ZWRVbnRpbDogRGF0ZSB8IG51bGw7XG4gIGFjY2VwdGVkRmluZGluZ0tleXM6IHN0cmluZ1tdO1xuICBhY2NlcHRlZEtldjogYm9vbGVhbjtcbiAgdHJpYWdlUmVhc29uOiBzdHJpbmcgfCBudWxsO1xuICB0cmlhZ2VkQnk6IHN0cmluZyB8IG51bGw7XG4gIHRyaWFnZWRBdDogRGF0ZSB8IG51bGw7XG4gIGZsYWdnZWRBdDogRGF0ZTtcbiAgZml4ZWRBdDogRGF0ZSB8IG51bGw7XG59XG5cbmNvbnN0IEUgPSAoKSA9PiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlO1xuXG5mdW5jdGlvbiB0b1BpcGVsaW5lRXhwb3N1cmUocjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG5vdzogRGF0ZSk6IFBpcGVsaW5lRXhwb3N1cmUge1xuICBjb25zdCB1bnRpbCA9IChyLmFjY2VwdGVkVW50aWwgYXMgRGF0ZSB8IG51bGwpID8/IG51bGw7XG4gIGNvbnN0IGFjdGl2ZSA9IHIudHJpYWdlU3RhdGUgPT09ICdhY2NlcHRlZCcgJiYgci5maXhlZEF0ID09IG51bGwgJiYgdW50aWwgIT09IG51bGwgJiYgdW50aWwuZ2V0VGltZSgpID4gbm93LmdldFRpbWUoKTtcbiAgcmV0dXJuIHtcbiAgICBpZDogci5pZCBhcyBzdHJpbmcsXG4gICAgb3JnSWQ6IHIub3JnSWQgYXMgc3RyaW5nLFxuICAgIHBpcGVsaW5lSWQ6IHIucGlwZWxpbmVJZCBhcyBzdHJpbmcsXG4gICAgcGx1Z2luUHVibGlzaGVyOiAoci5wbHVnaW5QdWJsaXNoZXIgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBwbHVnaW5OYW1lOiByLnBsdWdpbk5hbWUgYXMgc3RyaW5nLFxuICAgIHBsdWdpblZlcnNpb246IHIucGx1Z2luVmVyc2lvbiBhcyBzdHJpbmcsXG4gICAgaW1hZ2VEaWdlc3Q6IChyLmltYWdlRGlnZXN0IGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgc291cmNlOiByLnNvdXJjZSBhcyBFeHBvc3VyZVNvdXJjZSxcbiAgICBjcml0aWNhbENvdW50OiByLmNyaXRpY2FsQ291bnQgYXMgbnVtYmVyLFxuICAgIGhpZ2hDb3VudDogci5oaWdoQ291bnQgYXMgbnVtYmVyLFxuICAgIHRvcEZpbmRpbmdzOiAoci50b3BGaW5kaW5ncyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pID8/IFtdLFxuICAgIGZpbmRpbmdLZXlzOiAoci5maW5kaW5nS2V5cyBhcyBzdHJpbmdbXSkgPz8gW10sXG4gICAgdHJpYWdlU3RhdGU6IHIudHJpYWdlU3RhdGUgPT09ICdhY2NlcHRlZCcgJiYgIWFjdGl2ZSAmJiByLmZpeGVkQXQgPT0gbnVsbCA/ICdvcGVuJyA6IChyLnRyaWFnZVN0YXRlIGFzIHN0cmluZyksXG4gICAgYWNjZXB0YW5jZUFjdGl2ZTogYWN0aXZlLFxuICAgIGFjY2VwdGVkVW50aWw6IHVudGlsLFxuICAgIGFjY2VwdGVkRmluZGluZ0tleXM6IChyLmFjY2VwdGVkRmluZGluZ0tleXMgYXMgc3RyaW5nW10pID8/IFtdLFxuICAgIGFjY2VwdGVkS2V2OiByLmFjY2VwdGVkS2V2ID09PSB0cnVlLFxuICAgIHRyaWFnZVJlYXNvbjogKHIudHJpYWdlUmVhc29uIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgdHJpYWdlZEJ5OiAoci50cmlhZ2VkQnkgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICB0cmlhZ2VkQXQ6IChyLnRyaWFnZWRBdCBhcyBEYXRlIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBmbGFnZ2VkQXQ6IHIuZmxhZ2dlZEF0IGFzIERhdGUsXG4gICAgZml4ZWRBdDogKHIuZml4ZWRBdCBhcyBEYXRlIHwgbnVsbCkgPz8gbnVsbCxcbiAgfTtcbn1cblxuLyoqXG4gKiBPbmUgcGlwZWxpbmUncyBleHBvc3VyZXM6IHRoZSB1bmZpeGVkIG9uZXMgKG9wZW4sIGFjY2VwdGVkLCBmYWxzZSBwb3NpdGl2ZSksXG4gKiBwbHVzIHRoZSBmaXhlZCBvbmVzIHdoZW4gYXNrZWQg4oCUIG1vc3Qgc2V2ZXJlIGZpcnN0LiBSZWFkcyB1bmRlciB0aGUgQ0FMTEVSJ3NcbiAqIHNjb3BlLCBuYXJyb3dlZCB0byBgb3JnSWRgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGlwZWxpbmVFeHBvc3VyZXMoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHBpcGVsaW5lSWQ6IHN0cmluZyxcbiAgb3B0czogeyBpbmNsdWRlRml4ZWQ/OiBib29sZWFuOyBub3c/OiBEYXRlIH0gPSB7fSxcbik6IFByb21pc2U8UGlwZWxpbmVFeHBvc3VyZVtdPiB7XG4gIGNvbnN0IG5vdyA9IG9wdHMubm93ID8/IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5zZWxlY3QoKS5mcm9tKEUoKSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoRSgpLm9yZ0lkLCBvcmdJZCksXG4gICAgICBlcShFKCkucGlwZWxpbmVJZCwgcGlwZWxpbmVJZCksXG4gICAgICAuLi4ob3B0cy5pbmNsdWRlRml4ZWQgPyBbXSA6IFtpc051bGwoRSgpLmZpeGVkQXQpXSksXG4gICAgKSlcbiAgICAub3JkZXJCeShzcWxgJHtFKCkuY3JpdGljYWxDb3VudH0gREVTQywgJHtFKCkuaGlnaENvdW50fSBERVNDLCAke0UoKS5wbHVnaW5OYW1lfWApKTtcbiAgcmV0dXJuIChyb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikubWFwKChyKSA9PiB0b1BpcGVsaW5lRXhwb3N1cmUociwgbm93KSk7XG59XG5cbi8qKiBPbmUgZXhwb3N1cmUgcm93IG9mIGBvcmdJZGAsIG9yIG51bGwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwb3N1cmVCeUlkKG9yZ0lkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIG5vdyA9IG5ldyBEYXRlKCkpOiBQcm9taXNlPFBpcGVsaW5lRXhwb3N1cmUgfCBudWxsPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5zZWxlY3QoKS5mcm9tKEUoKSkud2hlcmUoYW5kKGVxKEUoKS5pZCwgaWQpLCBlcShFKCkub3JnSWQsIG9yZ0lkKSkpKTtcbiAgY29uc3Qgcm93ID0gKHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KVswXTtcbiAgcmV0dXJuIHJvdyA/IHRvUGlwZWxpbmVFeHBvc3VyZShyb3csIG5vdykgOiBudWxsO1xufVxuXG4vKiogQSB0cmlhZ2UgZGVjaXNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFRyaWFnZURlY2lzaW9uIHtcbiAgc3RhdGU6ICdvcGVuJyB8ICdhY2NlcHRlZCcgfCAnZmFsc2VfcG9zaXRpdmUnO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIGFjY2VwdGVkVW50aWw/OiBEYXRlO1xuICAvKiogQWNjZXB0IEtFVi1saXN0ZWQgZmluZGluZ3MgdG9vLiBOZXZlciBpbXBsaWVkOiBhbiBhY2NlcHRhbmNlIHdpdGhvdXQgaXQgZG9lcyBub3QgY292ZXIgdGhlbS4gKi9cbiAga2V2PzogYm9vbGVhbjtcbiAgYWN0b3I6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWNvcmQgYSB0cmlhZ2UgZGVjaXNpb24gb24gb25lIGV4cG9zdXJlIOKAlCBhbmQgb24gaXRzIFNJQkxJTkdTOiB0aGUgc2FtZVxuICogcGlwZWxpbmUncyBvdGhlciBvcGVuIHJvdyBmb3IgdGhlIHNhbWUgdmVyc2lvbiBhbmQgaW1hZ2UgKHRoZSBkZWNsYXJlZCBhbmRcbiAqIHRoZSBkZXBsb3llZCBzaWRlKS4gQSByaXNrIGRlY2lzaW9uIGlzIGFib3V0IHdoYXQgdGhlIHBpcGVsaW5lIHJ1bnMsIGFuZFxuICogbGVhdmluZyBvbmUgc2lkZSBvcGVuIHdvdWxkIGhhdmUgdGhlIHJlcG9ydCBhbmQgdGhlIGxvb2t1cCBkaXNhZ3JlZS5cbiAqXG4gKiBgYWNjZXB0ZWRgIFJFUVVJUkVTIGEgZGVhZGxpbmUgYW5kIGEgcmVhc29uLiBBIHBlcm1hbmVudCwgdW5leHBsYWluZWQgbXV0ZSBpc1xuICogaG93IGEgZmluZGluZyBzdG9wcyBiZWluZyBhbnlib2R5J3MgcHJvYmxlbSwgYW5kIHRoZXJlIGlzIG5vIGdvb2QgcmVhc29uIHRvXG4gKiBzdXBwb3J0IGl0IOKAlCB0aGUgY2FsbGVyIGdldHMgYW4gZXJyb3IgcmF0aGVyIHRoYW4gYSBzaWxlbnRseSB1bmJvdW5kZWRcbiAqIGFjY2VwdGFuY2UuIFRoZSBhY2NlcHRlZCBmaW5kaW5nIGtleXMgYXJlIEZST1pFTiBhdCB0aGUgZGVjaXNpb246IGFuXG4gKiBhY2NlcHRhbmNlIGNvdmVycyB3aGF0IHdhcyB0aGVyZSB3aGVuIGl0IHdhcyBtYWRlLCBuZXZlciBhIGZpbmRpbmcgc2luY2UuXG4gKlxuICogUmV0dXJucyB0aGUgdXBkYXRlZCByb3dzIChlbXB0eSB3aGVuIGBpZGAgaXMgbm90IGBvcmdJZGAncyB1bmZpeGVkIGV4cG9zdXJlKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyaWFnZUV4cG9zdXJlKG9yZ0lkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlY2lzaW9uOiBUcmlhZ2VEZWNpc2lvbik6IFByb21pc2U8UGlwZWxpbmVFeHBvc3VyZVtdPiB7XG4gIGlmIChkZWNpc2lvbi5zdGF0ZSA9PT0gJ2FjY2VwdGVkJyAmJiAoIWRlY2lzaW9uLmFjY2VwdGVkVW50aWwgfHwgIWRlY2lzaW9uLnJlYXNvbj8udHJpbSgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWNjZXB0aW5nIGEgdnVsbmVyYWJpbGl0eSBleHBvc3VyZSBuZWVkcyBhIHJlYXNvbiBhbmQgYW4gZXhwaXJ5IGRhdGUnKTtcbiAgfVxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB0YXJnZXQgPSBhd2FpdCBleHBvc3VyZUJ5SWQob3JnSWQsIGlkLCBub3cpO1xuICBpZiAoIXRhcmdldCB8fCB0YXJnZXQuZml4ZWRBdCkgcmV0dXJuIFtdO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKEUoKSlcbiAgICAuc2V0KHtcbiAgICAgIHRyaWFnZVN0YXRlOiBkZWNpc2lvbi5zdGF0ZSxcbiAgICAgIGFjY2VwdGVkVW50aWw6IGRlY2lzaW9uLnN0YXRlID09PSAnYWNjZXB0ZWQnID8gKGRlY2lzaW9uLmFjY2VwdGVkVW50aWwgPz8gbnVsbCkgOiBudWxsLFxuICAgICAgYWNjZXB0ZWRGaW5kaW5nS2V5czogZGVjaXNpb24uc3RhdGUgPT09ICdhY2NlcHRlZCcgPyBzcWxgJHtFKCkuZmluZGluZ0tleXN9YCA6IFtdLFxuICAgICAgYWNjZXB0ZWRLZXY6IGRlY2lzaW9uLnN0YXRlID09PSAnYWNjZXB0ZWQnICYmIGRlY2lzaW9uLmtldiA9PT0gdHJ1ZSxcbiAgICAgIHRyaWFnZVJlYXNvbjogZGVjaXNpb24ucmVhc29uPy50cmltKCkgfHwgbnVsbCxcbiAgICAgIHRyaWFnZWRCeTogZGVjaXNpb24uYWN0b3IsXG4gICAgICB0cmlhZ2VkQXQ6IG5vdyxcbiAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgIH0pXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKEUoKS5vcmdJZCwgb3JnSWQpLFxuICAgICAgZXEoRSgpLnBpcGVsaW5lSWQsIHRhcmdldC5waXBlbGluZUlkKSxcbiAgICAgIGVxKEUoKS5wbHVnaW5OYW1lLCB0YXJnZXQucGx1Z2luTmFtZSksXG4gICAgICBlcShFKCkucGx1Z2luVmVyc2lvbiwgdGFyZ2V0LnBsdWdpblZlcnNpb24pLFxuICAgICAgdGFyZ2V0LmltYWdlRGlnZXN0ID09PSBudWxsID8gaXNOdWxsKEUoKS5pbWFnZURpZ2VzdCkgOiBlcShFKCkuaW1hZ2VEaWdlc3QsIHRhcmdldC5pbWFnZURpZ2VzdCksXG4gICAgICBpc051bGwoRSgpLmZpeGVkQXQpLFxuICAgICkpXG4gICAgLnJldHVybmluZygpKTtcbiAgcmV0dXJuIChyb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikubWFwKChyKSA9PiB0b1BpcGVsaW5lRXhwb3N1cmUociwgbm93KSk7XG59XG5cbi8qKiBgbmFtZUB2ZXJzaW9uQGRpZ2VzdGAg4oCUIHRoZSBrZXkge0BsaW5rIGFjdGl2ZUFjY2VwdGFuY2VzfSBhbnN3ZXJzIHVuZGVyLiAqL1xuZXhwb3J0IGNvbnN0IGFjY2VwdGFuY2VLZXkgPSAocGx1Z2luTmFtZTogc3RyaW5nLCBwbHVnaW5WZXJzaW9uOiBzdHJpbmcsIGltYWdlRGlnZXN0Pzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyA9PlxuICBgJHtwbHVnaW5OYW1lfUAke3BsdWdpblZlcnNpb259QCR7aW1hZ2VEaWdlc3QgPz8gJyd9YDtcblxuLyoqIEEgcGlwZWxpbmUncyBhY2NlcHRhbmNlcyBpbiBmb3JjZSwga2V5ZWQgYnkge0BsaW5rIGFjY2VwdGFuY2VLZXl9LCBwbHVzIHRoZSBhY2NlcHRlZCB2ZXJzaW9ucyBwZXIgcGx1Z2luLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUFjY2VwdGFuY2VzIHtcbiAgYnlLZXk6IE1hcDxzdHJpbmcsIFZ1bG5BY2NlcHRhbmNlICYgeyBleHBvc3VyZUlkczogc3RyaW5nW10gfT47XG4gIC8qKiBgcGx1Z2luTmFtZWAg4oaSIHZlcnNpb25zIHdpdGggYW4gYWNjZXB0YW5jZSAodGhlIHJlc29sdmVyJ3MgYGFjY2VwdGVkVmVyc2lvbnNgIGhpbnQpLiAqL1xuICB2ZXJzaW9uc0J5UGx1Z2luOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj47XG59XG5cbi8qKlxuICogVGhlIGFjY2VwdGFuY2VzIElOIEZPUkNFIGZvciBvbmUgcGlwZWxpbmUgKGBhY2NlcHRlZGAsIHVuZml4ZWQsIGRlYWRsaW5lIGluIHRoZVxuICogZnV0dXJlKSwgbWVyZ2VkIHBlciB2ZXJzaW9uIGFuZCBpbWFnZTogdGhlIHVuaW9uIG9mIHRoZSBmaW5kaW5nIGtleXMgdGhlIHJvd3NcbiAqIGZyb3plLCBLRVYgb25seSB3aGVuIGV2ZXJ5IG1lcmdlZCByb3cgYWNjZXB0ZWQgaXQuIFJlYWRzIHVuZGVyIHRoZSBjYWxsZXInc1xuICogc2NvcGUgbmFycm93ZWQgdG8gYG9yZ0lkYDsgYSBmYWlsZWQgcmVhZCBpcyBcIm5vIGFjY2VwdGFuY2VcIiDigJQgdGhlIHN0cmljdGVyIGFuc3dlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGl2ZUFjY2VwdGFuY2VzKG9yZ0lkOiBzdHJpbmcsIHBpcGVsaW5lSWQ6IHN0cmluZywgbm93ID0gbmV3IERhdGUoKSk6IFByb21pc2U8UGlwZWxpbmVBY2NlcHRhbmNlcz4ge1xuICBjb25zdCBvdXQ6IFBpcGVsaW5lQWNjZXB0YW5jZXMgPSB7IGJ5S2V5OiBuZXcgTWFwKCksIHZlcnNpb25zQnlQbHVnaW46IG5ldyBNYXAoKSB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5zZWxlY3Qoe1xuICAgICAgaWQ6IEUoKS5pZCxcbiAgICAgIHBsdWdpbk5hbWU6IEUoKS5wbHVnaW5OYW1lLFxuICAgICAgcGx1Z2luVmVyc2lvbjogRSgpLnBsdWdpblZlcnNpb24sXG4gICAgICBpbWFnZURpZ2VzdDogRSgpLmltYWdlRGlnZXN0LFxuICAgICAgYWNjZXB0ZWRVbnRpbDogRSgpLmFjY2VwdGVkVW50aWwsXG4gICAgICBhY2NlcHRlZEZpbmRpbmdLZXlzOiBFKCkuYWNjZXB0ZWRGaW5kaW5nS2V5cyxcbiAgICAgIGFjY2VwdGVkS2V2OiBFKCkuYWNjZXB0ZWRLZXYsXG4gICAgfSkuZnJvbShFKCkpXG4gICAgICAud2hlcmUoYW5kKFxuICAgICAgICBlcShFKCkub3JnSWQsIG9yZ0lkKSxcbiAgICAgICAgZXEoRSgpLnBpcGVsaW5lSWQsIHBpcGVsaW5lSWQpLFxuICAgICAgICBlcShFKCkudHJpYWdlU3RhdGUsICdhY2NlcHRlZCcpLFxuICAgICAgICBpc051bGwoRSgpLmZpeGVkQXQpLFxuICAgICAgICBzcWxgJHtFKCkuYWNjZXB0ZWRVbnRpbH0gPiAke25vd31gLFxuICAgICAgKSkpIGFzIEFycmF5PHsgaWQ6IHN0cmluZzsgcGx1Z2luTmFtZTogc3RyaW5nOyBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7IGltYWdlRGlnZXN0OiBzdHJpbmcgfCBudWxsOyBhY2NlcHRlZFVudGlsOiBEYXRlOyBhY2NlcHRlZEZpbmRpbmdLZXlzOiBzdHJpbmdbXTsgYWNjZXB0ZWRLZXY6IGJvb2xlYW4gfT47XG4gICAgZm9yIChjb25zdCByIG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IGtleSA9IGFjY2VwdGFuY2VLZXkoci5wbHVnaW5OYW1lLCByLnBsdWdpblZlcnNpb24sIHIuaW1hZ2VEaWdlc3QpO1xuICAgICAgY29uc3QgcHJldiA9IG91dC5ieUtleS5nZXQoa2V5KTtcbiAgICAgIG91dC5ieUtleS5zZXQoa2V5LCBwcmV2XG4gICAgICAgID8ge1xuICAgICAgICAgIGZpbmRpbmdLZXlzOiBbLi4ubmV3IFNldChbLi4ucHJldi5maW5kaW5nS2V5cywgLi4uKHIuYWNjZXB0ZWRGaW5kaW5nS2V5cyA/PyBbXSldKV0sXG4gICAgICAgICAga2V2OiBwcmV2LmtldiAmJiByLmFjY2VwdGVkS2V2LFxuICAgICAgICAgIGFjY2VwdGVkVW50aWw6IHByZXYuYWNjZXB0ZWRVbnRpbCAmJiBuZXcgRGF0ZShwcmV2LmFjY2VwdGVkVW50aWwpIDwgci5hY2NlcHRlZFVudGlsID8gcHJldi5hY2NlcHRlZFVudGlsIDogci5hY2NlcHRlZFVudGlsLFxuICAgICAgICAgIGV4cG9zdXJlSWRzOiBbLi4ucHJldi5leHBvc3VyZUlkcywgci5pZF0sXG4gICAgICAgIH1cbiAgICAgICAgOiB7IGZpbmRpbmdLZXlzOiByLmFjY2VwdGVkRmluZGluZ0tleXMgPz8gW10sIGtldjogci5hY2NlcHRlZEtldiwgYWNjZXB0ZWRVbnRpbDogci5hY2NlcHRlZFVudGlsLCBleHBvc3VyZUlkczogW3IuaWRdIH0pO1xuICAgICAgY29uc3QgdmVyc2lvbnMgPSBvdXQudmVyc2lvbnNCeVBsdWdpbi5nZXQoci5wbHVnaW5OYW1lKSA/PyBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIHZlcnNpb25zLmFkZChyLnBsdWdpblZlcnNpb24pO1xuICAgICAgb3V0LnZlcnNpb25zQnlQbHVnaW4uc2V0KHIucGx1Z2luTmFtZSwgdmVyc2lvbnMpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1BpcGVsaW5lIGFjY2VwdGFuY2VzIHVucmVhZGFibGU7IHRyZWF0aW5nIGFzIG5vbmUnLCB7IHBpcGVsaW5lSWQsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogQW4gYWNjZXB0YW5jZSB0aGF0IGxhcHNlZCwgYXMge0BsaW5rIHJlb3BlbkxhcHNlZEFjY2VwdGFuY2VzfSByZXR1cm5zIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXBzZWRBY2NlcHRhbmNlIHtcbiAgaWQ6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwbHVnaW5QdWJsaXNoZXI6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBpbWFnZURpZ2VzdDogc3RyaW5nIHwgbnVsbDtcbiAgdHJpYWdlZEJ5OiBzdHJpbmcgfCBudWxsO1xuICB0cmlhZ2VSZWFzb246IHN0cmluZyB8IG51bGw7XG4gIGFjY2VwdGVkVW50aWw6IERhdGUgfCBudWxsO1xufVxuXG4vKipcbiAqIFJlb3BlbiBldmVyeSBhY2NlcHRhbmNlIHdob3NlIGRlYWRsaW5lIGhhcyBwYXNzZWQsIGFuZCByZXR1cm4gdGhlbSBzbyB0aGVcbiAqIHBpcGVsaW5lIG93bmVycyBjYW4gYmUgdG9sZCAoTjMzKS4gUmVhZGVycyBhbHJlYWR5IHRyZWF0IHN1Y2ggYSByb3cgYXMgb3BlbjtcbiAqIHdyaXRpbmcgaXQgbWFrZXMgdGhlIHN0b3JlZCBzdGF0ZSB0aGUgdHJ1dGggYW5kIGdpdmVzIHRoZSBub3RpY2UgZXhhY3RseSBvbmVcbiAqIG1vbWVudCB0byBmaXJlLiBNdXN0IHJ1biB3aXRoIGEgc2NvcGUgdGhhdCBjYW4gd3JpdGUgZXZlcnkgb3JnJ3Mgcm93cyAodGhlXG4gKiBuaWdodGx5IHJlc2NhbidzIGVsZXZhdGVkIGNvbnRleHQpLiBOZXZlciB0aHJvd3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW9wZW5MYXBzZWRBY2NlcHRhbmNlcyhub3cgPSBuZXcgRGF0ZSgpKTogUHJvbWlzZTxMYXBzZWRBY2NlcHRhbmNlW10+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKEUoKSlcbiAgICAgIC5zZXQoeyB0cmlhZ2VTdGF0ZTogJ29wZW4nLCB1cGRhdGVkQXQ6IG5vdyB9KVxuICAgICAgLndoZXJlKGFuZChcbiAgICAgICAgZXEoRSgpLnRyaWFnZVN0YXRlLCAnYWNjZXB0ZWQnKSxcbiAgICAgICAgaXNOdWxsKEUoKS5maXhlZEF0KSxcbiAgICAgICAgbHRlKEUoKS5hY2NlcHRlZFVudGlsLCBub3cpLFxuICAgICAgKSlcbiAgICAgIC5yZXR1cm5pbmcoe1xuICAgICAgICBpZDogRSgpLmlkLFxuICAgICAgICBvcmdJZDogRSgpLm9yZ0lkLFxuICAgICAgICBwaXBlbGluZUlkOiBFKCkucGlwZWxpbmVJZCxcbiAgICAgICAgcGx1Z2luUHVibGlzaGVyOiBFKCkucGx1Z2luUHVibGlzaGVyLFxuICAgICAgICBwbHVnaW5OYW1lOiBFKCkucGx1Z2luTmFtZSxcbiAgICAgICAgcGx1Z2luVmVyc2lvbjogRSgpLnBsdWdpblZlcnNpb24sXG4gICAgICAgIGltYWdlRGlnZXN0OiBFKCkuaW1hZ2VEaWdlc3QsXG4gICAgICAgIHRyaWFnZWRCeTogRSgpLnRyaWFnZWRCeSxcbiAgICAgICAgdHJpYWdlUmVhc29uOiBFKCkudHJpYWdlUmVhc29uLFxuICAgICAgICBhY2NlcHRlZFVudGlsOiBFKCkuYWNjZXB0ZWRVbnRpbCxcbiAgICAgIH0pKTtcbiAgICByZXR1cm4gcm93cyBhcyBMYXBzZWRBY2NlcHRhbmNlW107XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdMYXBzZWQgYWNjZXB0YW5jZXMgbm90IHJlb3BlbmVkJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKlxuICogRXhwb3N1cmVzIHdob3NlIGFjY2VwdGFuY2UgaGFzIGxhcHNlZCwgZm9yIHRoZSBvcmcncyBzZWN1cml0eSBub3RpZmljYXRpb25zLlxuICpcbiAqIFN1cmZhY2VkIHJhdGhlciB0aGFuIHNpbGVudGx5IHJlb3BlbmVkOiBzb21lYm9keSBkZWNpZGVkIHRvIGFjY2VwdCB0aGlzIHVudGlsIGFcbiAqIGRhdGUsIHRoYXQgZGF0ZSBoYXMgcGFzc2VkLCBhbmQgdGhlIHBlcnNvbiB3aG8gZGVjaWRlZCBpcyB0aGUgb25lIHdobyBzaG91bGRcbiAqIGhlYXIgYWJvdXQgaXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXBzZWRBY2NlcHRhbmNlcyhvcmdJZDogc3RyaW5nLCBub3cgPSBuZXcgRGF0ZSgpKTogUHJvbWlzZTxBcnJheTx7XG4gIGlkOiBzdHJpbmc7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICB0cmlhZ2VkQnk6IHN0cmluZyB8IG51bGw7XG4gIGFjY2VwdGVkVW50aWw6IERhdGUgfCBudWxsO1xufT4+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnNlbGVjdCh7XG4gICAgaWQ6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuaWQsXG4gICAgcGx1Z2luTmFtZTogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5wbHVnaW5OYW1lLFxuICAgIHBsdWdpblZlcnNpb246IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUucGx1Z2luVmVyc2lvbixcbiAgICB0cmlhZ2VkQnk6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUudHJpYWdlZEJ5LFxuICAgIGFjY2VwdGVkVW50aWw6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuYWNjZXB0ZWRVbnRpbCxcbiAgfSkuZnJvbShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlKVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLm9yZ0lkLCBvcmdJZCksXG4gICAgICBlcShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnRyaWFnZVN0YXRlLCAnYWNjZXB0ZWQnKSxcbiAgICAgIGlzTnVsbChzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmZpeGVkQXQpLFxuICAgICAgbHRlKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuYWNjZXB0ZWRVbnRpbCwgbm93KSxcbiAgICApKSk7XG4gIHJldHVybiByb3dzIGFzIEFycmF5PHsgaWQ6IHN0cmluZzsgcGx1Z2luTmFtZTogc3RyaW5nOyBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7IHRyaWFnZWRCeTogc3RyaW5nIHwgbnVsbDsgYWNjZXB0ZWRVbnRpbDogRGF0ZSB8IG51bGwgfT47XG59XG4iXX0=
697
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWV4cG9zdXJlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9wbHVnaW4tZXhwb3N1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQStDLE1BQU0sNEJBQTRCLENBQUM7QUFDakosT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFZLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUF5Qi9DLDBEQUEwRDtBQUMxRCxTQUFTLE1BQU0sQ0FBQyxDQUE0QjtJQUMxQyxNQUFNLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxRQUFtQyxFQUFFLE1BQWlDO0lBQy9GLE1BQU0s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QUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUN6QyxHQUFHLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTixPQUFPLElBQThILENBQUM7QUFDeEksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFdoYXQgcGx1Z2luIHZlcnNpb25zIGFuIG9yZydzIHBpcGVsaW5lcyBhcmUgYWN0dWFsbHkgb24sIGFuZCB3aGljaCBvZiB0aG9zZSBhcmVcbiAqIGtub3duLXZ1bG5lcmFibGUuXG4gKlxuICogVHdvIHRhYmxlcywgd3JpdHRlbiBoZXJlLCByZWFkIGJ5IHRoZSBvdXRkYXRlZC1wbHVnaW4gYW5kIHZ1bG5lcmFiaWxpdHkgcmVwb3J0XG4gKiBzZWN0aW9uczpcbiAqXG4gKiAgLSBgcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb25gIOKAlCB0aGUgREVDTEFSRUQgc2lkZS4gUmVjb21wdXRlZCBvbiBwaXBlbGluZVxuICogICAgd3JpdGUgYW5kIG9uIHBsdWdpbiBwdWJsaXNoLCBiZWNhdXNlIHRoZSBhbHRlcm5hdGl2ZSBpcyByZXNvbHZpbmcgZXZlcnkgc3RlcFxuICogICAgb2YgZXZlcnkgcGlwZWxpbmUgYWdhaW5zdCB0aGUgY2F0YWxvZyBvbiBldmVyeSByZWFkLCBhbmQgdGhhdCBpcyBub3QgYSBxdWVyeVxuICogICAgYW55b25lIGNhbiBhZmZvcmQgdG8gcHV0IGluIGEgcmVwb3J0LlxuICogIC0gYHBsdWdpbl92dWxuX2V4cG9zdXJlYCDigJQgdGhlIFZVTE5FUkFCTEUgc2lkZSwgcGVyIFBJUEVMSU5FLiBBIHZlcnNpb24tbGV2ZWxcbiAqICAgIHRhYmxlIHdvdWxkIGZvcmNlIGV2ZXJ5IHJlYWRlciB0byByZS1kZXJpdmUgXCJ3aGljaCBvZiBvdXIgcGlwZWxpbmVzIGlzXG4gKiAgICBleHBvc2VkXCIsIHdoaWNoIGlzIHRoZSBvbmx5IGZvcm0gb2YgdGhlIHF1ZXN0aW9uIGFueWJvZHkgYXNrcy5cbiAqXG4gKiBERUNMQVJFRCBJUyBOT1QgREVQTE9ZRUQsIGFuZCB0aGUgcmVwb3J0IHNheXMgd2hpY2ggaXQgaXMgc2hvd2luZy4gQSBwaXBlbGluZSdzXG4gKiBjb25maWcgZGVjbGFyZXMgYF4yLjAuMGA7IHdoYXQgcmFuIGF0IGl0cyBsYXN0IGRlcGxveSBpcyB3aGF0ZXZlciB0aGUgc3RlcFxuICogbWFuaWZlc3QgcmVjb3JkZWQsIHBpbm5lZCB0byBhIGRpZ2VzdC4gVGhvc2UgZGlzYWdyZWUgd2hlbmV2ZXIgYSBwaXBlbGluZSBoYXMgbm90XG4gKiByZS1zeW50aGVkIHNpbmNlIGEgcHVibGlzaCDigJQgd2hpY2ggaXMgbW9zdCBvZiB0aGUgdGltZSwgYW5kIGV4YWN0bHkgdGhlIGdhcCBhXG4gKiB2dWxuZXJhYmlsaXR5IHJlcG9ydCBpcyBmb3IuIENvbmZsYXRpbmcgdGhlbSB3b3VsZCBsZXQgYSByZXBvcnQgc2F5IFwiZml4ZWRcIlxuICogYWJvdXQgYSBwaXBlbGluZSBzdGlsbCBydW5uaW5nIHRoZSBvbGQgaW1hZ2UuXG4gKlxuICogV0hPIFdSSVRFUyBXSEFUOlxuICogIC0gdGhlIHBpcGVsaW5lIHNlcnZpY2UsIG9uIGEgcGlwZWxpbmUgd3JpdGU6IGByZXBsYWNlUGlwZWxpbmVSZXNvbHV0aW9uYCArXG4gKiAgICBgcmVjb25jaWxlUGlwZWxpbmVFeHBvc3VyZXMoc291cmNlICdkZWNsYXJlZCcpYDtcbiAqICAtIHRoZSBwaXBlbGluZSBzZXJ2aWNlLCBvbiBhIGRlcGxveSByZWdpc3RyYXRpb24gY2FycnlpbmcgYSBzdGVwIG1hbmlmZXN0OlxuICogICAgYHJlY29uY2lsZVBpcGVsaW5lRXhwb3N1cmVzKHNvdXJjZSAnZGVwbG95ZWQnKWA7XG4gKiAgLSB0aGUgcGx1Z2luIHNlcnZpY2UsIHdoZW4gYSB2ZXJzaW9uIGJlY29tZXMgdGhlIGxhdGVzdCAoYW4gb3JnIHBsdWdpbidzIG5ld1xuICogICAgZGVmYXVsdDsgYSBsaXN0aW5nJ3MgcHVibGlzaCwgeWFuayBvciB1bnlhbmspOiBgcmVmcmVzaExhdGVzdEZvclBsdWdpbmA7XG4gKiAgLSB0aGUgbmlnaHRseSByZXNjYW4sIHBlciByZXNjYW5uZWQgdmVyc2lvbjogYHN5bmNWZXJzaW9uRXhwb3N1cmVzYCwgd2hpY2hcbiAqICAgIGZhbnMgdGhlIHZlcnNpb24ncyBmaW5kaW5ncyBvdXQgdG8gZXZlcnkgcGlwZWxpbmUgZGVjbGFyaW5nIG9yIHJ1bm5pbmcgaXRcbiAqICAgIChvciBjbG9zZXMgdGhlbSB3aGVuIHRoZSB2ZXJzaW9uIGNhbWUgYmFjayBjbGVhbikuXG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IGFzU2NhbkZsYWcsIGNyZWF0ZUxvZ2dlciwgZXJyb3JNZXNzYWdlLCBzY2FuRmluZGluZ0tleSwgdHlwZSBQbHVnaW5TY2FuRmluZGluZywgdHlwZSBWdWxuQWNjZXB0YW5jZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IGFuZCwgZXEsIGluQXJyYXksIGlzTnVsbCwgbHRlLCBzcWwsIHR5cGUgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHR5cGUgeyBFeHBvc3VyZVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3NjaGVtYS9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3BsdWdpbi1leHBvc3VyZScpO1xuXG4vKiogSG93IGZhciBiZWhpbmQgYSByZXNvbHZlZCB2ZXJzaW9uIGlzIGZyb20gdGhlIG5ld2VzdCBvbmUgYXZhaWxhYmxlLiAqL1xuZXhwb3J0IHR5cGUgVmVyc2lvbkdhcCA9ICdtYWpvcicgfCAnbWlub3InIHwgJ3BhdGNoJyB8ICdub25lJztcblxuLyoqIE9uZSByZXNvbHZlZCBzdGVwLCBhcyB0aGUgd3JpdGVyIHRha2VzIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFN0ZXAge1xuICBvcmdJZDogc3RyaW5nO1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBzdGVwTmFtZTogc3RyaW5nO1xuICBwbHVnaW5QdWJsaXNoZXI/OiBzdHJpbmcgfCBudWxsO1xuICBwbHVnaW5OYW1lOiBzdHJpbmc7XG4gIGRlY2xhcmVkVmVyc2lvbj86IHN0cmluZyB8IG51bGw7XG4gIHJlc29sdmVkVmVyc2lvbj86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgcmVzb2x2ZWQgcmVjb3JkOiBhIGBwbHVnaW5zYCByb3cgaWQgb3IgYSBsaXN0aW5nIHZlcnNpb24gaWQuICovXG4gIHJlc29sdmVkUGx1Z2luSWQ/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGltYWdlIGRpZ2VzdCB0aGUgcmVzb2x2ZWQgdmVyc2lvbiBpcyBwaW5uZWQgdG8gKG51bGwgPSBpbWFnZS1sZXNzKS4gKi9cbiAgcmVzb2x2ZWREaWdlc3Q/OiBzdHJpbmcgfCBudWxsO1xuICBsYXRlc3RWZXJzaW9uPzogc3RyaW5nIHwgbnVsbDtcbiAgd2l0aGluUG9saWN5PzogYm9vbGVhbjtcbiAgLyoqIFRoZSByb290IG9yZyBvZiBhIHRlYW0ncyBwaXBlbGluZSAoc2VlIHRoZSBjb2x1bW4pLiAqL1xuICByb290T3JnSWQ/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogYDEuMi4zYCDihpIgYFsxLCAyLCAzXWA7IGFueXRoaW5nIHVucGFyc2VhYmxlIOKGkiBudWxsLiAqL1xuZnVuY3Rpb24gc2VtdmVyKHY6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgY29uc3QgbSA9IC9edj8oXFxkKylcXC4oXFxkKylcXC4oXFxkKykvLmV4ZWModiA/PyAnJyk7XG4gIHJldHVybiBtID8gW051bWJlcihtWzFdKSwgTnVtYmVyKG1bMl0pLCBOdW1iZXIobVszXSldIDogbnVsbDtcbn1cblxuLyoqXG4gKiBIb3cgZmFyIGByZXNvbHZlZGAgaXMgYmVoaW5kIGBsYXRlc3RgLlxuICpcbiAqIGBudWxsYCB3aGVuIGVpdGhlciBzaWRlIGlzIHVucGFyc2VhYmxlLCBOT1QgYCdub25lJ2AuIFwiV2UgY291bGQgbm90IHRlbGxcIiBhbmRcbiAqIFwiaXQgaXMgdXAgdG8gZGF0ZVwiIGFyZSBvcHBvc2l0ZSBhbnN3ZXJzLCBhbmQgcmVwb3J0aW5nIHRoZSBzZWNvbmQgZm9yIHRoZSBmaXJzdFxuICogaXMgaG93IGEgcGlwZWxpbmUgb24gYW4gYW5jaWVudCBwcmUtcmVsZWFzZSB2ZXJzaW9uIGdldHMgYSBjbGVhbiBiaWxsIG9mIGhlYWx0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb25HYXAocmVzb2x2ZWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGxhdGVzdDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFZlcnNpb25HYXAgfCBudWxsIHtcbiAgY29uc3QgYSA9IHNlbXZlcihyZXNvbHZlZCk7XG4gIGNvbnN0IGIgPSBzZW12ZXIobGF0ZXN0KTtcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbnVsbDtcbiAgaWYgKGJbMF0gPiBhWzBdKSByZXR1cm4gJ21ham9yJztcbiAgaWYgKGJbMF0gPCBhWzBdKSByZXR1cm4gJ25vbmUnOyAvLyByZXNvbHZlZCBpcyBhaGVhZCBvZiBcImxhdGVzdFwiIOKAlCBub3QgYmVoaW5kXG4gIGlmIChiWzFdID4gYVsxXSkgcmV0dXJuICdtaW5vcic7XG4gIGlmIChiWzFdIDwgYVsxXSkgcmV0dXJuICdub25lJztcbiAgaWYgKGJbMl0gPiBhWzJdKSByZXR1cm4gJ3BhdGNoJztcbiAgcmV0dXJuICdub25lJztcbn1cblxuLyoqXG4gKiBSZXBsYWNlIGEgcGlwZWxpbmUncyByZXNvbHV0aW9uIHJvd3MuXG4gKlxuICogREVMRVRFLXRoZW4tSU5TRVJUIGZvciB0aGUgcGlwZWxpbmUsIGluIG9uZSB0cmFuc2FjdGlvbiwgYmVjYXVzZSBhIHN0ZXAgY2FuIGJlXG4gKiBSRU1PVkVEIGZyb20gYSBjb25maWc6IGFuIHVwc2VydC1vbmx5IHdyaXRlciB3b3VsZCBsZWF2ZSB0aGUgZGVsZXRlZCBzdGVwJ3Mgcm93XG4gKiBiZWhpbmQgZm9yZXZlciwgYW5kIHRoZSBvdXRkYXRlZC1wbHVnaW4gc2VjdGlvbiB3b3VsZCBrZWVwIHJlcG9ydGluZyBhIHN0ZXAgdGhlXG4gKiBwaXBlbGluZSBubyBsb25nZXIgaGFzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZVBpcGVsaW5lUmVzb2x1dGlvbihcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBzdGVwczogcmVhZG9ubHkgUmVzb2x2ZWRTdGVwW10sXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCB2YWx1ZXMgPSBzdGVwcy5tYXAoKHMpID0+ICh7XG4gICAgb3JnSWQ6IHMub3JnSWQsXG4gICAgcGlwZWxpbmVJZDogcy5waXBlbGluZUlkLFxuICAgIHN0YWdlTmFtZTogcy5zdGFnZU5hbWUsXG4gICAgc3RlcE5hbWU6IHMuc3RlcE5hbWUsXG4gICAgcGx1Z2luUHVibGlzaGVyOiBzLnBsdWdpblB1Ymxpc2hlciA/PyBudWxsLFxuICAgIHBsdWdpbk5hbWU6IHMucGx1Z2luTmFtZSxcbiAgICBkZWNsYXJlZFZlcnNpb246IHMuZGVjbGFyZWRWZXJzaW9uID8/IG51bGwsXG4gICAgcmVzb2x2ZWRWZXJzaW9uOiBzLnJlc29sdmVkVmVyc2lvbiA/PyBudWxsLFxuICAgIHJlc29sdmVkUGx1Z2luSWQ6IHMucmVzb2x2ZWRQbHVnaW5JZCA/PyBudWxsLFxuICAgIHJlc29sdmVkRGlnZXN0OiBzLnJlc29sdmVkRGlnZXN0ID8/IG51bGwsXG4gICAgbGF0ZXN0VmVyc2lvbjogcy5sYXRlc3RWZXJzaW9uID8/IG51bGwsXG4gICAgdmVyc2lvbkdhcDogdmVyc2lvbkdhcChzLnJlc29sdmVkVmVyc2lvbiwgcy5sYXRlc3RWZXJzaW9uKSxcbiAgICB3aXRoaW5Qb2xpY3k6IHMud2l0aGluUG9saWN5ID8/IHRydWUsXG4gICAgcm9vdE9yZ0lkOiBzLnJvb3RPcmdJZCA/PyBudWxsLFxuICAgIGNvbXB1dGVkQXQ6IG5ldyBEYXRlKCksXG4gIH0pKTtcblxuICByZXR1cm4gd2l0aFRlbmFudFR4KGFzeW5jICh0eCkgPT4ge1xuICAgIGF3YWl0IHR4LmRlbGV0ZShzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uKVxuICAgICAgLndoZXJlKGVxKHNjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24ucGlwZWxpbmVJZCwgcGlwZWxpbmVJZCkpO1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgICBjb25zdCBsYW5kZWQgPSBhd2FpdCB0eC5pbnNlcnQoc2NoZW1hLnBpcGVsaW5lUGx1Z2luUmVzb2x1dGlvbikudmFsdWVzKHZhbHVlcylcbiAgICAgIC5yZXR1cm5pbmcoeyBwaXBlbGluZUlkOiBzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnBpcGVsaW5lSWQgfSk7XG4gICAgcmV0dXJuIChsYW5kZWQgYXMgdW5rbm93bltdKS5sZW5ndGg7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlZnJlc2ggdGhlIGBsYXRlc3RgL2dhcCBjb2x1bW5zIGZvciBvbmUgcGx1Z2luIGFjcm9zcyBldmVyeSBwaXBlbGluZSB0aGF0IHVzZXNcbiAqIGl0LCB3aXRob3V0IHJlLXJlc29sdmluZyBhbnl0aGluZyBlbHNlLlxuICpcbiAqIENhbGxlZCBvbiBwdWJsaXNoLiBBIHB1Ymxpc2ggY2hhbmdlcyB3aGF0IFwibGF0ZXN0XCIgbWVhbnMgZm9yIGV2ZXJ5IHBpcGVsaW5lIGluXG4gKiB0aGUgaW5zdGFuY2UgdGhhdCBkZWNsYXJlcyB0aGUgcGx1Z2luLCBhbmQgcmUtcmVzb2x2aW5nIGVhY2ggb2YgdGhvc2UgcGlwZWxpbmVzXG4gKiBmcm9tIHNjcmF0Y2ggd291bGQgbWFrZSBwdWJsaXNoaW5nIGNvc3QgTyhwaXBlbGluZXMpIHdvcmsg4oCUIHNvIG9ubHkgdGhlIHR3b1xuICogY29sdW1ucyBhIHB1Ymxpc2ggY2FuIGNoYW5nZSBhcmUgdG91Y2hlZC5cbiAqXG4gKiBgb3duZXJgIHNheXMgd2hvc2UgcGx1Z2luIGl0IGlzOiBhIGxpc3RpbmcgKGBwdWJsaXNoZXJgIGhhbmRsZSDigJQgZXZlcnkgb3JnJ3NcbiAqIHBpcGVsaW5lcyB0aGF0IGRlY2xhcmUgaXQsIHNvIHRoZSBjYWxsZXIgbXVzdCBiZSBlbGV2YXRlZCksIG9yIGFuIG9yZydzIG93blxuICogcGx1Z2luIChgb3JnSWRgIOKAlCB0aGF0IG9yZydzIHBpcGVsaW5lcyBvbmx5OiBhbiBvcmcgcGx1Z2luJ3MgbmFtZSBpcyB1bmlxdWVcbiAqIG9ubHkgd2l0aGluIGl0cyBvcmcsIHNvIGFub3RoZXIgb3JnJ3Mgc2FtZS1uYW1lZCBwbHVnaW4gaXMgYSBkaWZmZXJlbnQgb25lKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hMYXRlc3RGb3JQbHVnaW4oXG4gIHBsdWdpbk5hbWU6IHN0cmluZyxcbiAgb3duZXI6IHsgcHVibGlzaGVyOiBzdHJpbmcgfSB8IHsgb3JnSWQ6IHN0cmluZyB9LFxuICBsYXRlc3RWZXJzaW9uOiBzdHJpbmcsXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKHNjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24pXG4gICAgLnNldCh7XG4gICAgICBsYXRlc3RWZXJzaW9uLFxuICAgICAgLy8gUmVjb21wdXRlZCBpbiBTUUwgZnJvbSB0aGUgcm93J3Mgb3duIHJlc29sdmVkIHZlcnNpb24sIHNvIG9uZSBzdGF0ZW1lbnRcbiAgICAgIC8vIGNvdmVycyBldmVyeSBwaXBlbGluZSByYXRoZXIgdGhhbiBhIHJvdW5kIHRyaXAgZWFjaC5cbiAgICAgIC8vIGA6OnRleHRgIG9uIGV2ZXJ5IGJpbmQgb2YgdGhlIHZlcnNpb246IFBvc3RncmVzIG90aGVyd2lzZSBkZWR1Y2VzXG4gICAgICAvLyBpbmNvbnNpc3RlbnQgdHlwZXMgZm9yIHRoZSBzYW1lIHBhcmFtZXRlciAodmFyY2hhciBmb3IgdGhlIGFzc2lnbm1lbnQsXG4gICAgICAvLyB0ZXh0IGZvciBgc3BsaXRfcGFydGApIGFuZCByZWZ1c2VzIHRvIHBsYW4gdGhlIHN0YXRlbWVudC5cbiAgICAgIHZlcnNpb25HYXA6IHNxbGBDQVNFXG4gICAgICAgIFdIRU4gJHtzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnJlc29sdmVkVmVyc2lvbn0gSVMgTlVMTCBUSEVOIE5VTExcbiAgICAgICAgV0hFTiBzcGxpdF9wYXJ0KCR7bGF0ZXN0VmVyc2lvbn06OnRleHQsICcuJywgMSk6OmludCA+IHNwbGl0X3BhcnQoJHtzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnJlc29sdmVkVmVyc2lvbn0sICcuJywgMSk6OmludCBUSEVOICdtYWpvcidcbiAgICAgICAgV0hFTiBzcGxpdF9wYXJ0KCR7bGF0ZXN0VmVyc2lvbn06OnRleHQsICcuJywgMSk6OmludCA8IHNwbGl0X3BhcnQoJHtzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnJlc29sdmVkVmVyc2lvbn0sICcuJywgMSk6OmludCBUSEVOICdub25lJ1xuICAgICAgICBXSEVOIHNwbGl0X3BhcnQoJHtsYXRlc3RWZXJzaW9ufTo6dGV4dCwgJy4nLCAyKTo6aW50ID4gc3BsaXRfcGFydCgke3NjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24ucmVzb2x2ZWRWZXJzaW9ufSwgJy4nLCAyKTo6aW50IFRIRU4gJ21pbm9yJ1xuICAgICAgICBXSEVOIHNwbGl0X3BhcnQoJHtsYXRlc3RWZXJzaW9ufTo6dGV4dCwgJy4nLCAyKTo6aW50IDwgc3BsaXRfcGFydCgke3NjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24ucmVzb2x2ZWRWZXJzaW9ufSwgJy4nLCAyKTo6aW50IFRIRU4gJ25vbmUnXG4gICAgICAgIFdIRU4gc3BsaXRfcGFydCgke2xhdGVzdFZlcnNpb259Ojp0ZXh0LCAnLicsIDMpOjppbnQgPiBzcGxpdF9wYXJ0KCR7c2NoZW1hLnBpcGVsaW5lUGx1Z2luUmVzb2x1dGlvbi5yZXNvbHZlZFZlcnNpb259LCAnLicsIDMpOjppbnQgVEhFTiAncGF0Y2gnXG4gICAgICAgIEVMU0UgJ25vbmUnIEVORGAsXG4gICAgICBjb21wdXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgIH0pXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24ucGx1Z2luTmFtZSwgcGx1Z2luTmFtZSksXG4gICAgICAuLi4oJ3B1Ymxpc2hlcicgaW4gb3duZXJcbiAgICAgICAgPyBbZXEoc2NoZW1hLnBpcGVsaW5lUGx1Z2luUmVzb2x1dGlvbi5wbHVnaW5QdWJsaXNoZXIsIG93bmVyLnB1Ymxpc2hlcildXG4gICAgICAgIDogW2lzTnVsbChzY2hlbWEucGlwZWxpbmVQbHVnaW5SZXNvbHV0aW9uLnBsdWdpblB1Ymxpc2hlciksIGVxKHNjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24ub3JnSWQsIG93bmVyLm9yZ0lkKV0pLFxuICAgICAgLy8gT25seSByb3dzIHdob3NlIHJlc29sdmVkIHZlcnNpb24gcGFyc2VzIGFzIHNlbXZlcjsgYW55dGhpbmcgZWxzZSBoYXMgbm9cbiAgICAgIC8vIGdhcCB0byBjb21wdXRlIGFuZCB0aGUgQ0FTRSB3b3VsZCB0aHJvdyBvbiB0aGUgY2FzdC5cbiAgICAgIHNxbGAke3NjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24ucmVzb2x2ZWRWZXJzaW9ufSB+ICdeWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKydgLFxuICAgICkpXG4gICAgLnJldHVybmluZyh7IHBpcGVsaW5lSWQ6IHNjaGVtYS5waXBlbGluZVBsdWdpblJlc29sdXRpb24ucGlwZWxpbmVJZCB9KSk7XG4gIHJldHVybiAocm93cyBhcyB1bmtub3duW10pLmxlbmd0aDtcbn1cblxuLyoqIE9uZSBmbGFnZ2VkIHZlcnNpb24sIGFzIHRoZSByZXNjYW4gcmVwb3J0cyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3N1cmVJbnB1dCB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGx1Z2luUHVibGlzaGVyPzogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG4gIGltYWdlRGlnZXN0Pzogc3RyaW5nIHwgbnVsbDtcbiAgc291cmNlOiBFeHBvc3VyZVNvdXJjZTtcbiAgY3JpdGljYWxDb3VudDogbnVtYmVyO1xuICBoaWdoQ291bnQ6IG51bWJlcjtcbiAgdG9wRmluZGluZ3M/OiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBFdmVyeSBDcml0aWNhbC9IaWdoIGZpbmRpbmcga2V5IG9mIHRoZSB2ZXJzaW9uIChzZWUgdGhlIGNvbHVtbikuICovXG4gIGZpbmRpbmdLZXlzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogV2hldGhlciBhbiBleHBvc3VyZSByb3cgaXMgTElWRTogbm90IGZpeGVkLCBub3QgZGlzbWlzc2VkIGFzIGEgZmFsc2UgcG9zaXRpdmUsXG4gKiBhbmQgbm90IHVuZGVyIGFuIGFjY2VwdGFuY2UgdGhhdCBpcyBzdGlsbCBpbiBmb3JjZS5cbiAqXG4gKiBUaGUgT05FIHByZWRpY2F0ZSBldmVyeSByZWFkZXIgdXNlcyAodGhlIHJlcG9ydCBzZWN0aW9uLCBuZWVkcy1hdHRlbnRpb24sIHRoZVxuICogb3JnJ3Mgb3BlbiBsaXN0KS4gVHdvIHJlYWRlcnMgdGhhdCBkaXNhZ3JlZSBhYm91dCB3aGF0IFwiZXhwb3NlZFwiIG1lYW5zIHByb2R1Y2VcbiAqIGEgcmVwb3J0IHdob3NlIHZ1bG5lcmFiaWxpdHkgcGFuZWwgYW5kIG5lZWRzLWF0dGVudGlvbiBsaXN0IGNvbnRyYWRpY3QgZWFjaFxuICogb3RoZXIg4oCUIHdoaWNoIGlzIGhvdyB0aGlzIHByZWRpY2F0ZSBjYW1lIHRvIGV4aXN0LiBBbiBhY2NlcHRhbmNlIExBUFNFUyBhdCBpdHNcbiAqIGRlYWRsaW5lIGFuZCB0aGUgcm93IGlzIGxpdmUgYWdhaW47IG9uZSB3aXRoIG5vIGRlYWRsaW5lICh3aGljaFxuICogYHRyaWFnZUV4cG9zdXJlYCByZWZ1c2VzIHRvIHdyaXRlKSBpcyB0cmVhdGVkIGFzIGluIGZvcmNlLCBhcyBldmVyeSByZWFkZXJcbiAqIGFscmVhZHkgZGlkLlxuICpcbiAqIGBhbGlhc2AgaXMgdGhlIHRhYmxlIG5hbWUgb3IgYWxpYXMgdGhlIGNhbGxlcidzIHF1ZXJ5IHVzZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXZlRXhwb3N1cmVQcmVkaWNhdGUobm93OiBEYXRlLCBhbGlhcyA9ICdwbHVnaW5fdnVsbl9leHBvc3VyZScpOiBTUUwge1xuICBjb25zdCBjb2wgPSAoYzogc3RyaW5nKSA9PiBzcWwucmF3KGAke2FsaWFzfS4ke2N9YCk7XG4gIHJldHVybiBzcWxgKCR7Y29sKCdmaXhlZF9hdCcpfSBJUyBOVUxMXG4gICAgQU5EICgke2NvbCgndHJpYWdlX3N0YXRlJyl9ID0gJ29wZW4nXG4gICAgICAgICBPUiAoJHtjb2woJ3RyaWFnZV9zdGF0ZScpfSA9ICdhY2NlcHRlZCdcbiAgICAgICAgICAgICBBTkQgJHtjb2woJ2FjY2VwdGVkX3VudGlsJyl9IElTIE5PVCBOVUxMIEFORCAke2NvbCgnYWNjZXB0ZWRfdW50aWwnKX0gPD0gJHtub3d9KSkpYDtcbn1cblxuLyoqIFdoYXQgYSB2ZXJzaW9uJ3Mgc2NhbiBzdGF0ZSBjb250cmlidXRlcyB0byBhbiBleHBvc3VyZSAoc2VlIHtAbGluayBleHBvc3VyZUZyb21TY2FufSkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjYW5TdGF0ZSB7XG4gIC8qKiBUaGUgZGlnZXN0IHRoZSBzdGVwIHJ1bnMuIEEgc2NhbiBzdW1tYXJ5IGRlc2NyaWJpbmcgYW5vdGhlciBpbWFnZSBpcyBpZ25vcmVkLiAqL1xuICBpbWFnZURpZ2VzdD86IHN0cmluZyB8IG51bGw7XG4gIHNjYW5TdW1tYXJ5PzogdW5rbm93bjtcbiAgc2NhbkZsYWc/OiB1bmtub3duO1xuICBzY2FuRmxhZ2dlZEF0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBUaGUgY291bnRzIGFuIGV4cG9zdXJlIHJvdyBjYXJyaWVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvc3VyZUNvdW50cyB7XG4gIGNyaXRpY2FsQ291bnQ6IG51bWJlcjtcbiAgaGlnaENvdW50OiBudW1iZXI7XG4gIHRvcEZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xuICAvKiogS2V5cyBvZiBFVkVSWSBDcml0aWNhbC9IaWdoIGZpbmRpbmcgaXRlbWl6ZWQgKGZpeGFibGUgb3Igbm90KSwgc29ydGVkLiAqL1xuICBmaW5kaW5nS2V5czogc3RyaW5nW107XG59XG5cbmNvbnN0IGtleXNPZiA9IChmaW5kaW5nczogcmVhZG9ubHkgUGx1Z2luU2NhbkZpbmRpbmdbXSk6IHN0cmluZ1tdID0+IFsuLi5uZXcgU2V0KGZpbmRpbmdzLm1hcChzY2FuRmluZGluZ0tleSkpXS5zb3J0KCk7XG5cbi8qKiBBdCBtb3N0IHRoaXMgbWFueSBmaW5kaW5ncyBhcmUgc3RvcmVkIG9uIGFuIGV4cG9zdXJlIHJvdy4gKi9cbmNvbnN0IEVYUE9TVVJFX1RPUF9GSU5ESU5HUyA9IDEwO1xuXG4vKipcbiAqIFRoZSBleHBvc3VyZSBhIHZlcnNpb24ncyBzY2FuIHN0YXRlIGFtb3VudHMgdG8sIG9yIG51bGwgd2hlbiBpdCBoYXMgbm9uZS5cbiAqXG4gKiBSZWFkcyB0aGUgcmVzY2FuJ3MgYHNjYW5fc3VtbWFyeWAgKGZpeGFibGUgQ3JpdGljYWwgQU5EIEhpZ2gsIHdoZXRoZXIgb3Igbm90IHRoZVxuICogZ2F0ZSB0cmlwcGVkKSBhbmQgZmFsbHMgYmFjayB0byBgc2Nhbl9mbGFnYCBmb3IgYSB2ZXJzaW9uIGZsYWdnZWQgYmVmb3JlIGFueVxuICogc3VtbWFyeSB3YXMgd3JpdHRlbi4gQSBzdW1tYXJ5IHdob3NlIGRpZ2VzdCBpcyBub3QgdGhlIHN0ZXAncyBpcyBJR05PUkVEOiBhXG4gKiB2ZXJzaW9uIHJlYnVpbHQgb24gYSBwYXRjaGVkIGJhc2UgaXMgYSBkaWZmZXJlbnQgYXJ0aWZhY3QsIGFuZCBpdHMgZmluZGluZ3Mgc2F5XG4gKiBub3RoaW5nIGFib3V0IHRoZSBpbWFnZSB0aGUgcGlwZWxpbmUgcnVucy4gT25seSBGSVhBQkxFIGZpbmRpbmdzIGNvdW50IOKAlCBhblxuICogZXhwb3N1cmUgaXMgc29tZXRoaW5nIGEgcmVidWlsZCBvciBhbiB1cGdyYWRlIGNhbiBjbGVhci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9zdXJlRnJvbVNjYW4oc3RhdGU6IFNjYW5TdGF0ZSk6IEV4cG9zdXJlQ291bnRzIHwgbnVsbCB7XG4gIGNvbnN0IHN1bW1hcnkgPSBzdGF0ZS5zY2FuU3VtbWFyeSAmJiB0eXBlb2Ygc3RhdGUuc2NhblN1bW1hcnkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHN0YXRlLnNjYW5TdW1tYXJ5KVxuICAgID8gc3RhdGUuc2NhblN1bW1hcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICA6IG51bGw7XG4gIGNvbnN0IHN1bW1hcnlEaWdlc3QgPSB0eXBlb2Ygc3VtbWFyeT8uaW1hZ2VEaWdlc3QgPT09ICdzdHJpbmcnID8gc3VtbWFyeS5pbWFnZURpZ2VzdCA6IG51bGw7XG4gIGlmIChzdW1tYXJ5ICYmIHR5cGVvZiBzdW1tYXJ5LmNyaXRpY2FsRml4YWJsZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHN1bW1hcnkuaGlnaEZpeGFibGUgPT09ICdudW1iZXInXG4gICAgJiYgKHN1bW1hcnlEaWdlc3QgPT09IG51bGwgfHwgIXN0YXRlLmltYWdlRGlnZXN0IHx8IHN1bW1hcnlEaWdlc3QgPT09IHN0YXRlLmltYWdlRGlnZXN0KSkge1xuICAgIGlmIChzdW1tYXJ5LmNyaXRpY2FsRml4YWJsZSA8PSAwICYmIHN1bW1hcnkuaGlnaEZpeGFibGUgPD0gMCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgYWxsID0gKEFycmF5LmlzQXJyYXkoc3VtbWFyeS5maW5kaW5ncykgPyBzdW1tYXJ5LmZpbmRpbmdzIGFzIFBsdWdpblNjYW5GaW5kaW5nW10gOiBbXSlcbiAgICAgIC5maWx0ZXIoKGYpID0+IGYgJiYgdHlwZW9mIGYuaWQgPT09ICdzdHJpbmcnKTtcbiAgICBjb25zdCBmaW5kaW5ncyA9IGFsbC5maWx0ZXIoKGYpID0+IEFycmF5LmlzQXJyYXkoZi5maXhlZEluKSAmJiBmLmZpeGVkSW4ubGVuZ3RoID4gMCk7XG4gICAgcmV0dXJuIHsgY3JpdGljYWxDb3VudDogc3VtbWFyeS5jcml0aWNhbEZpeGFibGUsIGhpZ2hDb3VudDogc3VtbWFyeS5oaWdoRml4YWJsZSwgdG9wRmluZGluZ3M6IGZpbmRpbmdzLnNsaWNlKDAsIEVYUE9TVVJFX1RPUF9GSU5ESU5HUyksIGZpbmRpbmdLZXlzOiBrZXlzT2YoYWxsKSB9O1xuICB9XG4gIGNvbnN0IGZsYWcgPSBzdGF0ZS5zY2FuRmxhZ2dlZEF0ID8gYXNTY2FuRmxhZyhzdGF0ZS5zY2FuRmxhZykgOiBudWxsO1xuICBpZiAoIWZsYWcgfHwgKGZsYWcuZ2F0ZWQgPD0gMCAmJiBmbGFnLmhpZ2ggPD0gMCkpIHJldHVybiBudWxsO1xuICByZXR1cm4geyBjcml0aWNhbENvdW50OiBmbGFnLmdhdGVkLCBoaWdoQ291bnQ6IGZsYWcuaGlnaCwgdG9wRmluZGluZ3M6IGZsYWcuZmluZGluZ3Muc2xpY2UoMCwgRVhQT1NVUkVfVE9QX0ZJTkRJTkdTKSwgZmluZGluZ0tleXM6IGtleXNPZihmbGFnLmZpbmRpbmdzKSB9O1xufVxuXG4vKipcbiAqIE9wZW4gb3IgcmVmcmVzaCBleHBvc3VyZXMuXG4gKlxuICogVXBzZXJ0cyBvbiAocGlwZWxpbmUsIHBsdWdpbiwgdmVyc2lvbiwgZGlnZXN0LCBzb3VyY2UpIHNvIGEgbmlnaHRseSByZXNjYW4gUkVGUkVTSEVTIHRoZVxuICogY291bnRzIHJhdGhlciB0aGFuIG9wZW5pbmcgYSBuZXcgcm93IGV2ZXJ5IG5pZ2h0IOKAlCBvdGhlcndpc2UgdGhlIHJlcG9ydCB3b3VsZFxuICogc2hvdyBvbmUgZXhwb3N1cmUgcGVyIG5pZ2h0IG9mIHRoZSBzYW1lIHByb2JsZW0sIHdoaWNoIHJlYWRzIGFzIGFuIGVzY2FsYXRpbmdcbiAqIHNpdHVhdGlvbiB3aGVuIG5vdGhpbmcgY2hhbmdlZC5cbiAqXG4gKiBBIHJlZnJlc2ggZGVsaWJlcmF0ZWx5IGRvZXMgTk9UIHJlc2V0IGB0cmlhZ2Vfc3RhdGVgOiBhbiBvcmcgdGhhdCBhY2NlcHRlZCBhXG4gKiBmaW5kaW5nIHdpdGggYSByZWFzb24gYW5kIGEgZGVhZGxpbmUgaGFzIG1hZGUgYSBkZWNpc2lvbiwgYW5kIHJlLXJhaXNpbmcgaXQgZXZlcnlcbiAqIG5pZ2h0IGlzIGhvdyBhIHRlYW0gbGVhcm5zIHRvIGlnbm9yZSB0aGUgcmVwb3J0LiBJdCBET0VTIGNsZWFyIGEgc3RhbGVcbiAqIGFjY2VwdGFuY2UsIGJlY2F1c2UgdGhhdCBpcyB3aGF0IHRoZSBkZWFkbGluZSB3YXMgZm9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBzZXJ0RXhwb3N1cmVzKGlucHV0czogcmVhZG9ubHkgRXhwb3N1cmVJbnB1dFtdLCBub3cgPSBuZXcgRGF0ZSgpKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgaWYgKGlucHV0cy5sZW5ndGggPT09IDApIHJldHVybiAwO1xuICBjb25zdCB2YWx1ZXMgPSBpbnB1dHMubWFwKChlKSA9PiAoe1xuICAgIGlkOiByYW5kb21VVUlEKCksXG4gICAgb3JnSWQ6IGUub3JnSWQsXG4gICAgcGlwZWxpbmVJZDogZS5waXBlbGluZUlkLFxuICAgIHBsdWdpblB1Ymxpc2hlcjogZS5wbHVnaW5QdWJsaXNoZXIgPz8gbnVsbCxcbiAgICBwbHVnaW5OYW1lOiBlLnBsdWdpbk5hbWUsXG4gICAgcGx1Z2luVmVyc2lvbjogZS5wbHVnaW5WZXJzaW9uLFxuICAgIGltYWdlRGlnZXN0OiBlLmltYWdlRGlnZXN0ID8/IG51bGwsXG4gICAgc291cmNlOiBlLnNvdXJjZSxcbiAgICBjcml0aWNhbENvdW50OiBlLmNyaXRpY2FsQ291bnQsXG4gICAgaGlnaENvdW50OiBlLmhpZ2hDb3VudCxcbiAgICB0b3BGaW5kaW5nczogZS50b3BGaW5kaW5ncyA/PyBbXSxcbiAgICBmaW5kaW5nS2V5czogZS5maW5kaW5nS2V5cyA/PyBbXSxcbiAgICBmbGFnZ2VkQXQ6IG5vdyxcbiAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgfSkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbGFuZGVkID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHguaW5zZXJ0KHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUpLnZhbHVlcyh2YWx1ZXMpXG4gICAgICAub25Db25mbGljdERvVXBkYXRlKHtcbiAgICAgICAgdGFyZ2V0OiBbXG4gICAgICAgICAgc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5waXBlbGluZUlkLFxuICAgICAgICAgIHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUucGx1Z2luTmFtZSxcbiAgICAgICAgICBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnBsdWdpblZlcnNpb24sXG4gICAgICAgICAgc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5pbWFnZURpZ2VzdCxcbiAgICAgICAgICBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnNvdXJjZSxcbiAgICAgICAgXSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgY3JpdGljYWxDb3VudDogc3FsYGV4Y2x1ZGVkLmNyaXRpY2FsX2NvdW50YCxcbiAgICAgICAgICBoaWdoQ291bnQ6IHNxbGBleGNsdWRlZC5oaWdoX2NvdW50YCxcbiAgICAgICAgICB0b3BGaW5kaW5nczogc3FsYGV4Y2x1ZGVkLnRvcF9maW5kaW5nc2AsXG4gICAgICAgICAgZmluZGluZ0tleXM6IHNxbGBleGNsdWRlZC5maW5kaW5nX2tleXNgLFxuICAgICAgICAgIC8vIFN0aWxsIGV4cG9zZWQsIHNvIHRoZSBmaXggbWFya2VyIGlzIGNsZWFyZWQ6IGEgcm93IHRoYXQgd2FzIGNsb3NlZCBieSBhXG4gICAgICAgICAgLy8gZGVwbG95IGFuZCBpcyBmbGFnZ2VkIGFnYWluIGlzIGEgcmVncmVzc2lvbiwgYW5kIGxlYXZpbmcgYGZpeGVkX2F0YCBzZXRcbiAgICAgICAgICAvLyB3b3VsZCBoaWRlIGl0LlxuICAgICAgICAgIGZpeGVkQXQ6IG51bGwsXG4gICAgICAgICAgLy8gQW4gYWNjZXB0YW5jZSBwYXN0IGl0cyBkZWFkbGluZSBzdG9wcyBiZWluZyBhbiBhY2NlcHRhbmNlLiBUaGF0IGlzIHRoZVxuICAgICAgICAgIC8vIGVudGlyZSBwb2ludCBvZiB0aW1lLWJveGluZyBpdCwgYW5kIGl0IGlzIGVuZm9yY2VkIEhFUkUgcmF0aGVyIHRoYW4gYXRcbiAgICAgICAgICAvLyByZWFkIHRpbWUgc28gdGhlIHN0b3JlZCBzdGF0ZSBpcyB0aGUgdHJ1dGguXG4gICAgICAgICAgLy8gQW4gYWNjZXB0YW5jZSBjb3ZlcnMgdGhlIGZpbmRpbmdzIGl0IHdhcyBtYWRlIG92ZXIsIG5ldmVyIG9uZXMgZm91bmRcbiAgICAgICAgICAvLyBzaW5jZTogYSByZWZyZXNoIGNhcnJ5aW5nIGEgZmluZGluZyBrZXkgdGhlIGFjY2VwdGFuY2UgZGlkIG5vdCBmcmVlemVcbiAgICAgICAgICAvLyByZW9wZW5zIHRoZSByb3csIHNvIHRoZSBkZWNpc2lvbiBpcyBtYWRlIGFnYWluIGFib3V0IHdoYXQgaXMgdGhlcmUgbm93LlxuICAgICAgICAgIHRyaWFnZVN0YXRlOiBzcWxgQ0FTRVxuICAgICAgICAgICAgV0hFTiAke3NjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUudHJpYWdlU3RhdGV9ID0gJ2FjY2VwdGVkJ1xuICAgICAgICAgICAgIEFORCAke3NjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuYWNjZXB0ZWRVbnRpbH0gSVMgTk9UIE5VTExcbiAgICAgICAgICAgICBBTkQgJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmFjY2VwdGVkVW50aWx9IDw9ICR7bm93fVxuICAgICAgICAgICAgVEhFTiAnb3BlbidcbiAgICAgICAgICAgIFdIRU4gJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnRyaWFnZVN0YXRlfSA9ICdhY2NlcHRlZCdcbiAgICAgICAgICAgICBBTkQgTk9UIChleGNsdWRlZC5maW5kaW5nX2tleXMgPEAgJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmFjY2VwdGVkRmluZGluZ0tleXN9KVxuICAgICAgICAgICAgVEhFTiAnb3BlbidcbiAgICAgICAgICAgIFdIRU4gJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnRyaWFnZVN0YXRlfSA9ICdmaXhlZCcgVEhFTiAnb3BlbidcbiAgICAgICAgICAgIC0tIEEgUkVNT1ZFRCBzdGVwIC8gcGlwZWxpbmUgYmFjayBvbiB0aGUgc2FtZSB2ZXJzaW9uOiBpdHMgYWNjZXB0YW5jZVxuICAgICAgICAgICAgLS0gcmV0dXJucyBpZiBzdGlsbCBpbiBmb3JjZSBhbmQgaXQgY292ZXJzIHdoYXQgdGhlIHZlcnNpb24gY2FycmllcyBub3cuXG4gICAgICAgICAgICBXSEVOICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS50cmlhZ2VTdGF0ZX0gPSAncmVtb3ZlZCdcbiAgICAgICAgICAgICBBTkQgJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmFjY2VwdGVkVW50aWx9IElTIE5PVCBOVUxMXG4gICAgICAgICAgICAgQU5EICR7c2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5hY2NlcHRlZFVudGlsfSA+ICR7bm93fVxuICAgICAgICAgICAgIEFORCBleGNsdWRlZC5maW5kaW5nX2tleXMgPEAgJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmFjY2VwdGVkRmluZGluZ0tleXN9XG4gICAgICAgICAgICBUSEVOICdhY2NlcHRlZCdcbiAgICAgICAgICAgIFdIRU4gJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnRyaWFnZVN0YXRlfSA9ICdyZW1vdmVkJyBUSEVOICdvcGVuJ1xuICAgICAgICAgICAgRUxTRSAke3NjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUudHJpYWdlU3RhdGV9IEVORGAsXG4gICAgICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnJldHVybmluZyh7IGlkOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmlkIH0pKTtcbiAgICByZXR1cm4gKGxhbmRlZCBhcyB1bmtub3duW10pLmxlbmd0aDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1BsdWdpbiBleHBvc3VyZSB1cHNlcnQgZmFpbGVkJywgeyBjb3VudDogdmFsdWVzLmxlbmd0aCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKiBPbmUgdmVyc2lvbiBhIHBpcGVsaW5lIHN0aWxsIGRlY2xhcmVzIC8gcnVucyBXSVRIIG9wZW4gZmluZGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIExpdmVWZXJzaW9uIHtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG4gIGltYWdlRGlnZXN0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgbGl2ZUtleSA9ICh2OiBMaXZlVmVyc2lvbik6IHN0cmluZyA9PiBgJHt2LnBsdWdpbk5hbWV9QCR7di5wbHVnaW5WZXJzaW9ufUAke3YuaW1hZ2VEaWdlc3QgPz8gJyd9YDtcblxuLyoqXG4gKiBDbG9zZSB0aGUgZXhwb3N1cmVzIG9mIG9uZSBTT1VSQ0UgYSBwaXBlbGluZSBoYXMgbW92ZWQgb2ZmIOKAlCBgZml4ZWRgIHdoZW4gdGhlXG4gKiBwaXBlbGluZSBzdGlsbCB1c2VzIHRoZSBwbHVnaW4gYXQgYW5vdGhlciB2ZXJzaW9uLCBgcmVtb3ZlZGAgd2hlbiBubyBsaXZlIHN0ZXBcbiAqIHVzZXMgdGhlIHBsdWdpbiBhdCBhbGwgKHRoZSB0cmlhZ2UgZmllbGRzIHN0YXksIHNvIGEgcmUtYWRkZWQgc3RlcCBnZXRzIGFuXG4gKiB1bmV4cGlyZWQgYWNjZXB0YW5jZSBiYWNrIOKAlCBzZWUge0BsaW5rIHVwc2VydEV4cG9zdXJlc30pLlxuICpcbiAqIENhbGxlZCB3aGVuIGEgZGVwbG95IHJlY29yZHMgYSBuZXcgc3RlcCBtYW5pZmVzdCAoYGRlcGxveWVkYCkgb3IgYSBwaXBlbGluZVxuICogd3JpdGUgcmUtcmVzb2x2ZXMgaXRzIGNvbmZpZyAoYGRlY2xhcmVkYCk6IGFueXRoaW5nIG9wZW4gZm9yIHRoYXQgcGlwZWxpbmUgYW5kXG4gKiBzb3VyY2Ugd2hvc2UgKHZlcnNpb24sIGRpZ2VzdCkgaXMgTk9UIGluIGBsaXZlVmVyc2lvbnNgIGlzIGZpeGVkLiBDbG9zaW5nIGJ5XG4gKiBhYnNlbmNlIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGEgcmVzY2FuIHRvIG5vdGljZSBpcyB3aGF0IG1ha2VzIFwid2UgZml4ZWQgaXRcIlxuICogc2hvdyB1cCBpbiB0aGUgcmVwb3J0IG9uIHRoZSBuZXh0IGRlcGxveSBpbnN0ZWFkIG9mIHRoZSBuZXh0IG5pZ2h0LlxuICpcbiAqIFBlciBzb3VyY2UsIGJlY2F1c2UgdGhlIHR3byBzaWRlcyBtb3ZlIGluZGVwZW5kZW50bHk6IGEgY29uZmlnIHVwZGF0ZWQgdG8gdGhlXG4gKiBmaXhlZCB2ZXJzaW9uIGNsb3NlcyB0aGUgREVDTEFSRUQgZXhwb3N1cmUgd2hpbGUgdGhlIG9sZCBpbWFnZSBrZWVwcyBydW5uaW5nLFxuICogYW5kIGl0cyBERVBMT1lFRCBleHBvc3VyZSBtdXN0IHN0YXkgb3BlbiB1bnRpbCB0aGUgZGVwbG95IGxhbmRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xvc2VGaXhlZEV4cG9zdXJlcyhcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBzb3VyY2U6IEV4cG9zdXJlU291cmNlLFxuICBsaXZlVmVyc2lvbnM6IHJlYWRvbmx5IExpdmVWZXJzaW9uW10sXG4gIG5vdyA9IG5ldyBEYXRlKCksXG4gIG9wdHM6IHsgbGl2ZVBsdWdpbnM/OiByZWFkb25seSBzdHJpbmdbXSB9ID0ge30sXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBsaXZlID0gbmV3IFNldChsaXZlVmVyc2lvbnMubWFwKGxpdmVLZXkpKTtcbiAgY29uc3QgbGl2ZVBsdWdpbnMgPSBuZXcgU2V0KFsuLi5saXZlVmVyc2lvbnMsIC4uLihvcHRzLmxpdmVQbHVnaW5zID8/IFtdKV0ubWFwKCh2KSA9PiAodHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdiA6IHYucGx1Z2luTmFtZSkpKTtcbiAgY29uc3Qgb3BlbiA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnNlbGVjdCh7XG4gICAgaWQ6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuaWQsXG4gICAgcGx1Z2luTmFtZTogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5wbHVnaW5OYW1lLFxuICAgIHBsdWdpblZlcnNpb246IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUucGx1Z2luVmVyc2lvbixcbiAgICBpbWFnZURpZ2VzdDogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5pbWFnZURpZ2VzdCxcbiAgfSkuZnJvbShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlKVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnBpcGVsaW5lSWQsIHBpcGVsaW5lSWQpLFxuICAgICAgZXEoc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5zb3VyY2UsIHNvdXJjZSksXG4gICAgICBpc051bGwoc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5maXhlZEF0KSxcbiAgICApKSk7XG4gIGNvbnN0IHN0YWxlUm93cyA9IChvcGVuIGFzIEFycmF5PExpdmVWZXJzaW9uICYgeyBpZDogc3RyaW5nIH0+KS5maWx0ZXIoKHIpID0+ICFsaXZlLmhhcyhsaXZlS2V5KHIpKSk7XG4gIGlmIChzdGFsZVJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgY29uc3QgZml4ZWQgPSBzdGFsZVJvd3MuZmlsdGVyKChyKSA9PiBsaXZlUGx1Z2lucy5oYXMoci5wbHVnaW5OYW1lKSkubWFwKChyKSA9PiByLmlkKTtcbiAgY29uc3QgcmVtb3ZlZCA9IHN0YWxlUm93cy5maWx0ZXIoKHIpID0+ICFsaXZlUGx1Z2lucy5oYXMoci5wbHVnaW5OYW1lKSkubWFwKChyKSA9PiByLmlkKTtcbiAgbGV0IGNsb3NlZCA9IDA7XG4gIGZvciAoY29uc3QgW2lkcywgc3RhdGVdIG9mIFtbZml4ZWQsICdmaXhlZCddLCBbcmVtb3ZlZCwgJ3JlbW92ZWQnXV0gYXMgY29uc3QpIHtcbiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnVwZGF0ZShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlKVxuICAgICAgLnNldCh7IGZpeGVkQXQ6IG5vdywgdHJpYWdlU3RhdGU6IHN0YXRlLCB1cGRhdGVkQXQ6IG5vdyB9KVxuICAgICAgLndoZXJlKGluQXJyYXkoc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5pZCwgWy4uLmlkc10pKVxuICAgICAgLnJldHVybmluZyh7IGlkOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmlkIH0pKTtcbiAgICBjbG9zZWQgKz0gKHJvd3MgYXMgdW5rbm93bltdKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIGNsb3NlZDtcbn1cblxuLyoqXG4gKiBDbG9zZSBldmVyeSBvcGVuIGV4cG9zdXJlIG9mIGEgcGlwZWxpbmUgKG9yIG9mIG9uZSBzb3VyY2UpIGFzIGByZW1vdmVkYCDigJQgdGhlXG4gKiBwaXBlbGluZSB3YXMgZGVsZXRlZCwgb3IgZGVyZWdpc3RlcmVkIChpdHMgZGVwbG95IGlzIGdvbmUpLiBUaGUgdHJpYWdlIGZpZWxkc1xuICogc3RheTogYSByZXN0b3JlIHJlLXJlY29yZHMgdGhlIHBpcGVsaW5lJ3MgcmVzb2x1dGlvbiwgYW5kXG4gKiB7QGxpbmsgdXBzZXJ0RXhwb3N1cmVzfSByZW9wZW5zIHRoZSByb3dzIChyZXN0b3JpbmcgYW4gYWNjZXB0YW5jZSBzdGlsbCBpblxuICogZm9yY2UpLiBSZXR1cm5zIHRoZSByb3dzIGNsb3NlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlUGlwZWxpbmVFeHBvc3VyZXMoXG4gIHBpcGVsaW5lSWQ6IHN0cmluZyxcbiAgc3RhdGU6ICdyZW1vdmVkJyxcbiAgb3B0czogeyBzb3VyY2U/OiBFeHBvc3VyZVNvdXJjZSB9ID0ge30sXG4gIG5vdyA9IG5ldyBEYXRlKCksXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUpXG4gICAgLnNldCh7IGZpeGVkQXQ6IG5vdywgdHJpYWdlU3RhdGU6IHN0YXRlLCB1cGRhdGVkQXQ6IG5vdyB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnBpcGVsaW5lSWQsIHBpcGVsaW5lSWQpLFxuICAgICAgaXNOdWxsKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuZml4ZWRBdCksXG4gICAgICAuLi4ob3B0cy5zb3VyY2UgPyBbZXEoc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5zb3VyY2UsIG9wdHMuc291cmNlKV0gOiBbXSksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuaWQgfSkpO1xuICByZXR1cm4gKHJvd3MgYXMgdW5rbm93bltdKS5sZW5ndGg7XG59XG5cbi8qKiBPbmUgc3RlcCBvZiBhIHBpcGVsaW5lIGFzIHtAbGluayByZWNvbmNpbGVQaXBlbGluZUV4cG9zdXJlc30gdGFrZXMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9zdXJlU3RlcCB7XG4gIHBsdWdpblB1Ymxpc2hlcj86IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBpbWFnZURpZ2VzdD86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgcmVzb2x2ZWQgdmVyc2lvbidzIHNjYW4gc3RhdGUsIGFzIHN0b3JlZCBvbiBpdHMgcm93LiAqL1xuICBzY2FuOiBTY2FuU3RhdGU7XG59XG5cbi8qKlxuICogQnJpbmcgb25lIHBpcGVsaW5lJ3MgZXhwb3N1cmVzIG9mIG9uZSBzb3VyY2UgaW4gbGluZSB3aXRoIHRoZSBzdGVwcyBpdCBub3dcbiAqIGRlY2xhcmVzIChgZGVjbGFyZWRgKSBvciBydW5zIChgZGVwbG95ZWRgKTogb3BlbiAvIHJlZnJlc2ggYSByb3cgZm9yIGV2ZXJ5IHN0ZXBcbiAqIHdob3NlIHZlcnNpb24gaGFzIG9wZW4gZml4YWJsZSBmaW5kaW5ncywgY2xvc2UgdGhlIHJlc3QgYnkgYWJzZW5jZS5cbiAqXG4gKiBOZXZlciB0aHJvd3Mg4oCUIGV4cG9zdXJlIHRyYWNraW5nIGlzIHJlcG9ydGluZywgYW5kIGEgcGlwZWxpbmUgd3JpdGUgb3IgYSBkZXBsb3lcbiAqIHJlZ2lzdHJhdGlvbiBtdXN0IG5vdCBmYWlsIGJlY2F1c2UgdGhlIHJlcG9ydCB0YWJsZSBjb3VsZCBub3QgYmUgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY29uY2lsZVBpcGVsaW5lRXhwb3N1cmVzKFxuICBpbnB1dDogeyBvcmdJZDogc3RyaW5nOyBwaXBlbGluZUlkOiBzdHJpbmc7IHNvdXJjZTogRXhwb3N1cmVTb3VyY2U7IHN0ZXBzOiByZWFkb25seSBFeHBvc3VyZVN0ZXBbXSB9LFxuICBub3cgPSBuZXcgRGF0ZSgpLFxuKTogUHJvbWlzZTx7IG9wZW5lZDogbnVtYmVyOyBjbG9zZWQ6IG51bWJlciB9PiB7XG4gIGNvbnN0IGV4cG9zZWQ6IEV4cG9zdXJlSW5wdXRbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3Qgc3RlcCBvZiBpbnB1dC5zdGVwcykge1xuICAgIGNvbnN0IGNvdW50cyA9IGV4cG9zdXJlRnJvbVNjYW4oeyAuLi5zdGVwLnNjYW4sIGltYWdlRGlnZXN0OiBzdGVwLmltYWdlRGlnZXN0ID8/IHN0ZXAuc2Nhbi5pbWFnZURpZ2VzdCA/PyBudWxsIH0pO1xuICAgIGlmICghY291bnRzKSBjb250aW51ZTtcbiAgICBjb25zdCBrZXkgPSBsaXZlS2V5KHsgcGx1Z2luTmFtZTogc3RlcC5wbHVnaW5OYW1lLCBwbHVnaW5WZXJzaW9uOiBzdGVwLnBsdWdpblZlcnNpb24sIGltYWdlRGlnZXN0OiBzdGVwLmltYWdlRGlnZXN0IH0pO1xuICAgIGlmIChzZWVuLmhhcyhrZXkpKSBjb250aW51ZTsgLy8gdHdvIHN0ZXBzIG9uIG9uZSB2ZXJzaW9uIGFyZSBvbmUgZXhwb3N1cmVcbiAgICBzZWVuLmFkZChrZXkpO1xuICAgIGV4cG9zZWQucHVzaCh7XG4gICAgICBvcmdJZDogaW5wdXQub3JnSWQsXG4gICAgICBwaXBlbGluZUlkOiBpbnB1dC5waXBlbGluZUlkLFxuICAgICAgcGx1Z2luUHVibGlzaGVyOiBzdGVwLnBsdWdpblB1Ymxpc2hlciA/PyBudWxsLFxuICAgICAgcGx1Z2luTmFtZTogc3RlcC5wbHVnaW5OYW1lLFxuICAgICAgcGx1Z2luVmVyc2lvbjogc3RlcC5wbHVnaW5WZXJzaW9uLFxuICAgICAgaW1hZ2VEaWdlc3Q6IHN0ZXAuaW1hZ2VEaWdlc3QgPz8gbnVsbCxcbiAgICAgIHNvdXJjZTogaW5wdXQuc291cmNlLFxuICAgICAgLi4uY291bnRzLFxuICAgICAgdG9wRmluZGluZ3M6IGNvdW50cy50b3BGaW5kaW5ncyBhcyB1bmtub3duIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgICB9KTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IG9wZW5lZCA9IGF3YWl0IHVwc2VydEV4cG9zdXJlcyhleHBvc2VkLCBub3cpO1xuICAgIC8vIEV2ZXJ5IHBsdWdpbiBhIHN0ZXAgc3RpbGwgdXNlcyAoY2xlYW4gdmVyc2lvbnMgdG9vKTogYSByb3cgZm9yIG9uZSBvZlxuICAgIC8vIHRoZW0gY2xvc2VzIGBmaXhlZGA7IGEgcm93IGZvciBhIHBsdWdpbiBubyBzdGVwIHVzZXMgYW55IG1vcmUsIGByZW1vdmVkYC5cbiAgICBjb25zdCBjbG9zZWQgPSBhd2FpdCBjbG9zZUZpeGVkRXhwb3N1cmVzKGlucHV0LnBpcGVsaW5lSWQsIGlucHV0LnNvdXJjZSwgZXhwb3NlZCwgbm93LCB7IGxpdmVQbHVnaW5zOiBpbnB1dC5zdGVwcy5tYXAoKHMpID0+IHMucGx1Z2luTmFtZSkgfSk7XG4gICAgcmV0dXJuIHsgb3BlbmVkLCBjbG9zZWQgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1BpcGVsaW5lIGV4cG9zdXJlIHJlY29uY2lsZSBmYWlsZWQnLCB7IHBpcGVsaW5lSWQ6IGlucHV0LnBpcGVsaW5lSWQsIHNvdXJjZTogaW5wdXQuc291cmNlLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgcmV0dXJuIHsgb3BlbmVkOiAwLCBjbG9zZWQ6IDAgfTtcbiAgfVxufVxuXG4vKiogQSBwbHVnaW4gdmVyc2lvbiAob3B0aW9uYWxseSBvbmUgaW1hZ2Ugb2YgaXQpIHdob3NlIHBpcGVsaW5lcyBhcmUgd2FudGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5WZXJzaW9uUmVmIHtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBMaXN0aW5nIHB1Ymxpc2hlciBoYW5kbGU7IG51bGwgPSBhbiBvcmcncyBvd24gcGx1Z2luIHJvdzsgb21pdHRlZCA9IGVpdGhlci4gKi9cbiAgcGx1Z2luUHVibGlzaGVyPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIE5hcnJvdyB0byBwaXBlbGluZXMgb24gdGhpcyBpbWFnZS4gT21pdHRlZCA9IGFueSBpbWFnZSBvZiB0aGUgdmVyc2lvbi4gKi9cbiAgaW1hZ2VEaWdlc3Q/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogTmFycm93IHRvIHRoZXNlIG9yZ3MuIE9taXR0ZWQgPSBldmVyeSBvcmcgdGhlIGNhbGxlcidzIHNjb3BlIGNhbiByZWFkLiAqL1xuICBvcmdJZHM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqIEEgcGlwZWxpbmUgdGhhdCBkZWNsYXJlcyBvciBydW5zIGEgZ2l2ZW4gcGx1Z2luIHZlcnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lT25WZXJzaW9uIHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBgZGVwbG95ZWRgID0gaXRzIGxhc3QgZGVwbG95J3Mgc3RlcCBtYW5pZmVzdDsgYGRlY2xhcmVkYCA9IGl0cyBjb25maWcgcmVzb2x2ZXMgdG8gaXQuICovXG4gIHNvdXJjZTogRXhwb3N1cmVTb3VyY2U7XG4gIHBsdWdpblB1Ymxpc2hlcjogc3RyaW5nIHwgbnVsbDtcbiAgaW1hZ2VEaWdlc3Q6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgc3RlcHMgb24gaXQ6IGBzeW50aGAgb3IgYDxzdGFnZT4vPHN0ZXA+YCAoZGVjbGFyZWQpIC8gYDxzdGFnZT4vPGFjdGlvbj5gIChkZXBsb3llZCkuICovXG4gIHN0ZXBzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBFdmVyeSBMSVZFIHBpcGVsaW5lIGRlY2xhcmluZyAoYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCkgb3IgcnVubmluZ1xuICogKGBwaXBlbGluZV9zdGVwX21hbmlmZXN0c2ApIGEgcGx1Z2luIHZlcnNpb24sIG9uZSBlbnRyeSBwZXIgKHBpcGVsaW5lLCBzb3VyY2UpXG4gKiB3aXRoIHRoZSBzdGVwcyBvbiBpdC4gQSBzb2Z0LWRlbGV0ZWQgcGlwZWxpbmUgaXMgTk9UIGFmZmVjdGVkOiBjb3VudGluZyBpdFxuICogd291bGQgcHV0IGEgcGlwZWxpbmUgbm9ib2R5IGNhbiBvcGVuIGludG8gYSBub3RpY2Ugb3IgYSByZXBvcnQuIFJlYWRzIHVuZGVyXG4gKiB0aGUgQ0FMTEVSJ3MgdGVuYW50IHNjb3BlOiBhbiBvcmctc2NvcGVkIGNhbGxlciBzZWVzIGl0cyBvd24gcGlwZWxpbmVzLCB0aGVcbiAqIHJlc2NhbiAoZWxldmF0ZWQpIHNlZXMgZXZlcnkgb3JnJ3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwaXBlbGluZXNPblZlcnNpb24ocmVmOiBQbHVnaW5WZXJzaW9uUmVmKTogUHJvbWlzZTxQaXBlbGluZU9uVmVyc2lvbltdPiB7XG4gIGNvbnN0IHB1Ymxpc2hlclNxbCA9IChjb2w6IHN0cmluZykgPT4gKHJlZi5wbHVnaW5QdWJsaXNoZXIgPT09IHVuZGVmaW5lZFxuICAgID8gc3FsYGBcbiAgICA6IHJlZi5wbHVnaW5QdWJsaXNoZXIgPT09IG51bGwgPyBzcWxgIEFORCAke3NxbC5yYXcoY29sKX0gSVMgTlVMTGAgOiBzcWxgIEFORCAke3NxbC5yYXcoY29sKX0gPSAke3JlZi5wbHVnaW5QdWJsaXNoZXJ9YCk7XG4gIGNvbnN0IGRpZ2VzdFNxbCA9IChjb2w6IHN0cmluZykgPT4gKHJlZi5pbWFnZURpZ2VzdCA/IHNxbGAgQU5EICR7c3FsLnJhdyhjb2wpfSA9ICR7cmVmLmltYWdlRGlnZXN0fWAgOiBzcWxgYCk7XG4gIGNvbnN0IG9yZ1NxbCA9IChjb2w6IHN0cmluZykgPT4gKHJlZi5vcmdJZHMgPyBzcWxgIEFORCAke3NxbC5yYXcoY29sKX0gPSBBTlkoJHtbLi4ucmVmLm9yZ0lkc119KWAgOiBzcWxgYCk7XG4gIGlmIChyZWYub3JnSWRzICYmIHJlZi5vcmdJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCB4Lm9yZ19pZCwgeC5waXBlbGluZV9pZCwgeC5zb3VyY2UsIE1JTih4LnBsdWdpbl9wdWJsaXNoZXIpIEFTIHBsdWdpbl9wdWJsaXNoZXIsIE1JTih4LmltYWdlX2RpZ2VzdCkgQVMgaW1hZ2VfZGlnZXN0LFxuICAgICAgICAgICBwLnBpcGVsaW5lX25hbWUsIGFycmF5X2FnZyhESVNUSU5DVCB4LnN0ZXAgT1JERVIgQlkgeC5zdGVwKSBBUyBzdGVwc1xuICAgIEZST00gKFxuICAgICAgU0VMRUNUIG0ub3JnX2lkLCBtLnBpcGVsaW5lX2lkOjp0ZXh0IEFTIHBpcGVsaW5lX2lkLCAnZGVwbG95ZWQnIEFTIHNvdXJjZSwgbS5wbHVnaW5fcHVibGlzaGVyLCBtLmltYWdlX2RpZ2VzdCxcbiAgICAgICAgICAgICBtLnN0YWdlX25hbWUgfHwgJy8nIHx8IG0uYWN0aW9uX25hbWUgQVMgc3RlcFxuICAgICAgRlJPTSBwaXBlbGluZV9zdGVwX21hbmlmZXN0cyBtXG4gICAgICBXSEVSRSBtLnBsdWdpbl9uYW1lID0gJHtyZWYucGx1Z2luTmFtZX0gQU5EIG0ucGx1Z2luX3ZlcnNpb24gPSAke3JlZi5wbHVnaW5WZXJzaW9ufVxuICAgICAgICAke3B1Ymxpc2hlclNxbCgnbS5wbHVnaW5fcHVibGlzaGVyJyl9JHtkaWdlc3RTcWwoJ20uaW1hZ2VfZGlnZXN0Jyl9JHtvcmdTcWwoJ20ub3JnX2lkJyl9XG4gICAgICBVTklPTiBBTExcbiAgICAgIFNFTEVDVCByLm9yZ19pZCwgci5waXBlbGluZV9pZCwgJ2RlY2xhcmVkJyBBUyBzb3VyY2UsIHIucGx1Z2luX3B1Ymxpc2hlciwgci5yZXNvbHZlZF9kaWdlc3QgQVMgaW1hZ2VfZGlnZXN0LFxuICAgICAgICAgICAgIENBU0UgV0hFTiByLnN0YWdlX25hbWUgPSAnc3ludGgnIEFORCByLnN0ZXBfbmFtZSA9ICdzeW50aCcgVEhFTiAnc3ludGgnIEVMU0Ugci5zdGFnZV9uYW1lIHx8ICcvJyB8fCByLnN0ZXBfbmFtZSBFTkQgQVMgc3RlcFxuICAgICAgRlJPTSBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbiByXG4gICAgICBXSEVSRSByLnBsdWdpbl9uYW1lID0gJHtyZWYucGx1Z2luTmFtZX0gQU5EIHIucmVzb2x2ZWRfdmVyc2lvbiA9ICR7cmVmLnBsdWdpblZlcnNpb259XG4gICAgICAgICR7cHVibGlzaGVyU3FsKCdyLnBsdWdpbl9wdWJsaXNoZXInKX0ke2RpZ2VzdFNxbCgnci5yZXNvbHZlZF9kaWdlc3QnKX0ke29yZ1NxbCgnci5vcmdfaWQnKX1cbiAgICApIHhcbiAgICBKT0lOIHBpcGVsaW5lcyBwIE9OIHAuaWQ6OnRleHQgPSB4LnBpcGVsaW5lX2lkIEFORCBwLmRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgIEdST1VQIEJZIHgub3JnX2lkLCB4LnBpcGVsaW5lX2lkLCB4LnNvdXJjZSwgcC5waXBlbGluZV9uYW1lXG4gICAgT1JERVIgQlkgeC5waXBlbGluZV9pZCwgeC5zb3VyY2VcbiAgYCkpO1xuICBjb25zdCByb3dzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogKChyZXN1bHQgYXMgeyByb3dzPzogdW5rbm93bltdIH0pPy5yb3dzID8/IFtdKTtcbiAgcmV0dXJuIChyb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikubWFwKChyKSA9PiAoe1xuICAgIG9yZ0lkOiBTdHJpbmcoci5vcmdfaWQpLFxuICAgIHBpcGVsaW5lSWQ6IFN0cmluZyhyLnBpcGVsaW5lX2lkKSxcbiAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBzb3VyY2U6IHIuc291cmNlIGFzIEV4cG9zdXJlU291cmNlLFxuICAgIHBsdWdpblB1Ymxpc2hlcjogKHIucGx1Z2luX3B1Ymxpc2hlciBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIGltYWdlRGlnZXN0OiAoci5pbWFnZV9kaWdlc3QgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBzdGVwczogQXJyYXkuaXNBcnJheShyLnN0ZXBzKSA/IChyLnN0ZXBzIGFzIHN0cmluZ1tdKSA6IFtdLFxuICB9KSk7XG59XG5cbi8qKlxuICogVGhlIHJlc2NhbidzIGVudHJ5IHBvaW50OiBvbmUgcmVzY2FubmVkIHZlcnNpb24ncyBmaW5kaW5ncywgZmFubmVkIG91dCB0byBldmVyeVxuICogcGlwZWxpbmUgdGhhdCBkZWNsYXJlcyBvciBydW5zIGl0LlxuICpcbiAqIEEgdmVyc2lvbiB3aXRoIG9wZW4gZml4YWJsZSBmaW5kaW5ncyBvcGVucyAvIHJlZnJlc2hlcyBvbmUgZXhwb3N1cmUgcGVyXG4gKiAocGlwZWxpbmUsIHNvdXJjZSk7IGEgdmVyc2lvbiB0aGF0IGNhbWUgYmFjayBDTEVBTiBjbG9zZXMgZXZlcnkgb3BlbiBleHBvc3VyZVxuICogb24gaXQgKGBmaXhlZGApLCBzbyBhIHJlYnVpbGQtaW4tcGxhY2Ugb3IgYW4gYWR2aXNvcnkgd2l0aGRyYXduIHVwc3RyZWFtIHNob3dzXG4gKiBhcyBmaXhlZCBvbiB0aGUgbmV4dCBuaWdodCByYXRoZXIgdGhhbiBsaW5nZXJpbmcgdW50aWwgZWFjaCBwaXBlbGluZSByZWRlcGxveXMuXG4gKlxuICogTXVzdCBydW4gd2l0aCBhIHNjb3BlIHRoYXQgY2FuIHJlYWQgYW5kIHdyaXRlIGV2ZXJ5IG9yZydzIHJvd3MgKHRoZSByZXNjYW4nc1xuICogZWxldmF0ZWQgY29udGV4dCkuIE5ldmVyIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN5bmNWZXJzaW9uRXhwb3N1cmVzKFxuICByZWY6IFBsdWdpblZlcnNpb25SZWYsXG4gIHNjYW46IFNjYW5TdGF0ZSxcbiAgbm93ID0gbmV3IERhdGUoKSxcbik6IFByb21pc2U8eyBvcGVuZWQ6IG51bWJlcjsgY2xvc2VkOiBudW1iZXIgfT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGNvdW50cyA9IGV4cG9zdXJlRnJvbVNjYW4oeyAuLi5zY2FuLCBpbWFnZURpZ2VzdDogcmVmLmltYWdlRGlnZXN0ID8/IHNjYW4uaW1hZ2VEaWdlc3QgPz8gbnVsbCB9KTtcbiAgICBpZiAoIWNvdW50cykgcmV0dXJuIHsgb3BlbmVkOiAwLCBjbG9zZWQ6IGF3YWl0IGNsb3NlVmVyc2lvbkV4cG9zdXJlcyhyZWYsIG5vdykgfTtcbiAgICBjb25zdCBwaXBlbGluZXMgPSBhd2FpdCBwaXBlbGluZXNPblZlcnNpb24ocmVmKTtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB1cHNlcnRFeHBvc3VyZXMocGlwZWxpbmVzLm1hcCgocCkgPT4gKHtcbiAgICAgIG9yZ0lkOiBwLm9yZ0lkLFxuICAgICAgcGlwZWxpbmVJZDogcC5waXBlbGluZUlkLFxuICAgICAgcGx1Z2luUHVibGlzaGVyOiBwLnBsdWdpblB1Ymxpc2hlcixcbiAgICAgIHBsdWdpbk5hbWU6IHJlZi5wbHVnaW5OYW1lLFxuICAgICAgcGx1Z2luVmVyc2lvbjogcmVmLnBsdWdpblZlcnNpb24sXG4gICAgICBpbWFnZURpZ2VzdDogcmVmLmltYWdlRGlnZXN0ID8/IHAuaW1hZ2VEaWdlc3QsXG4gICAgICBzb3VyY2U6IHAuc291cmNlLFxuICAgICAgY3JpdGljYWxDb3VudDogY291bnRzLmNyaXRpY2FsQ291bnQsXG4gICAgICBoaWdoQ291bnQ6IGNvdW50cy5oaWdoQ291bnQsXG4gICAgICB0b3BGaW5kaW5nczogY291bnRzLnRvcEZpbmRpbmdzIGFzIHVua25vd24gYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICAgICAgZmluZGluZ0tleXM6IGNvdW50cy5maW5kaW5nS2V5cyxcbiAgICB9KSksIG5vdyk7XG4gICAgcmV0dXJuIHsgb3BlbmVkLCBjbG9zZWQ6IDAgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1ZlcnNpb24gZXhwb3N1cmUgc3luYyBmYWlsZWQnLCB7IHBsdWdpbjogcmVmLnBsdWdpbk5hbWUsIHZlcnNpb246IHJlZi5wbHVnaW5WZXJzaW9uLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgcmV0dXJuIHsgb3BlbmVkOiAwLCBjbG9zZWQ6IDAgfTtcbiAgfVxufVxuXG4vKiogQ2xvc2UgZXZlcnkgb3BlbiBleHBvc3VyZSBvbiBhIHZlcnNpb24gKG9wdGlvbmFsbHkgb25lIGltYWdlIG9mIGl0KS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVZlcnNpb25FeHBvc3VyZXMocmVmOiBQbHVnaW5WZXJzaW9uUmVmLCBub3cgPSBuZXcgRGF0ZSgpKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3QgRSA9IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmU7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC51cGRhdGUoRSlcbiAgICAuc2V0KHsgZml4ZWRBdDogbm93LCB0cmlhZ2VTdGF0ZTogJ2ZpeGVkJywgdXBkYXRlZEF0OiBub3cgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoRS5wbHVnaW5OYW1lLCByZWYucGx1Z2luTmFtZSksXG4gICAgICBlcShFLnBsdWdpblZlcnNpb24sIHJlZi5wbHVnaW5WZXJzaW9uKSxcbiAgICAgIGlzTnVsbChFLmZpeGVkQXQpLFxuICAgICAgLi4uKHJlZi5pbWFnZURpZ2VzdCA/IFtlcShFLmltYWdlRGlnZXN0LCByZWYuaW1hZ2VEaWdlc3QpXSA6IFtdKSxcbiAgICAgIC4uLihyZWYucGx1Z2luUHVibGlzaGVyID09PSB1bmRlZmluZWQgPyBbXSA6IFtyZWYucGx1Z2luUHVibGlzaGVyID09PSBudWxsID8gaXNOdWxsKEUucGx1Z2luUHVibGlzaGVyKSA6IGVxKEUucGx1Z2luUHVibGlzaGVyLCByZWYucGx1Z2luUHVibGlzaGVyKV0pLFxuICAgICAgLi4uKHJlZi5vcmdJZHMgPyBbaW5BcnJheShFLm9yZ0lkLCBbLi4ucmVmLm9yZ0lkc10pXSA6IFtdKSxcbiAgICApKVxuICAgIC5yZXR1cm5pbmcoeyBpZDogRS5pZCB9KSk7XG4gIHJldHVybiAocm93cyBhcyB1bmtub3duW10pLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBUaGUgb3JnJ3MgbGl2ZSBleHBvc3VyZXMsIGZvciB0aGUgcmVwb3J0IHNlY3Rpb24uXG4gKlxuICogYGFjY2VwdGVkYCByb3dzIHdob3NlIGRlYWRsaW5lIGhhcyBwYXNzZWQgY29tZSBiYWNrIGFzIE9QRU4gZXZlbiBpZiBubyByZXNjYW5cbiAqIGhhcyByZWZyZXNoZWQgdGhlbSB5ZXQ6IGEgcmVhZCBtdXN0IG5vdCBwcmVzZW50IGFuIGV4cGlyZWQgYWNjZXB0YW5jZSBhcyBhXG4gKiBjdXJyZW50IG9uZSwgYW5kIHRoZSByZXBvcnQgaXMgcmVhZCBmYXIgbW9yZSBvZnRlbiB0aGFuIHRoZSByZXNjYW4gcnVucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5FeHBvc3VyZXMob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8e1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBwbHVnaW5QdWJsaXNoZXI6IHN0cmluZyB8IG51bGw7XG4gIHNvdXJjZTogRXhwb3N1cmVTb3VyY2U7XG4gIGNyaXRpY2FsQ291bnQ6IG51bWJlcjtcbiAgaGlnaENvdW50OiBudW1iZXI7XG4gIHRvcEZpbmRpbmdzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIHRyaWFnZVN0YXRlOiBzdHJpbmc7XG4gIGZsYWdnZWRBdDogRGF0ZTtcbn0+PiB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5zZWxlY3Qoe1xuICAgIHBpcGVsaW5lSWQ6IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUucGlwZWxpbmVJZCxcbiAgICBwbHVnaW5OYW1lOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnBsdWdpbk5hbWUsXG4gICAgcGx1Z2luVmVyc2lvbjogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5wbHVnaW5WZXJzaW9uLFxuICAgIHBsdWdpblB1Ymxpc2hlcjogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5wbHVnaW5QdWJsaXNoZXIsXG4gICAgc291cmNlOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnNvdXJjZSxcbiAgICBjcml0aWNhbENvdW50OiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmNyaXRpY2FsQ291bnQsXG4gICAgaGlnaENvdW50OiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmhpZ2hDb3VudCxcbiAgICB0b3BGaW5kaW5nczogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS50b3BGaW5kaW5ncyxcbiAgICB0cmlhZ2VTdGF0ZTogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS50cmlhZ2VTdGF0ZSxcbiAgICBhY2NlcHRlZFVudGlsOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmFjY2VwdGVkVW50aWwsXG4gICAgZmxhZ2dlZEF0OiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmZsYWdnZWRBdCxcbiAgfSkuZnJvbShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlKVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLm9yZ0lkLCBvcmdJZCksXG4gICAgICBsaXZlRXhwb3N1cmVQcmVkaWNhdGUobm93KSxcbiAgICApKVxuICAgIC5vcmRlckJ5KHNxbGAke3NjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuY3JpdGljYWxDb3VudH0gREVTQywgJHtzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLmhpZ2hDb3VudH0gREVTQ2ApKTtcblxuICByZXR1cm4gKHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KS5tYXAoKHIpID0+ICh7XG4gICAgcGlwZWxpbmVJZDogci5waXBlbGluZUlkIGFzIHN0cmluZyxcbiAgICBwbHVnaW5OYW1lOiByLnBsdWdpbk5hbWUgYXMgc3RyaW5nLFxuICAgIHBsdWdpblZlcnNpb246IHIucGx1Z2luVmVyc2lvbiBhcyBzdHJpbmcsXG4gICAgcGx1Z2luUHVibGlzaGVyOiAoci5wbHVnaW5QdWJsaXNoZXIgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBzb3VyY2U6IHIuc291cmNlIGFzIEV4cG9zdXJlU291cmNlLFxuICAgIGNyaXRpY2FsQ291bnQ6IHIuY3JpdGljYWxDb3VudCBhcyBudW1iZXIsXG4gICAgaGlnaENvdW50OiByLmhpZ2hDb3VudCBhcyBudW1iZXIsXG4gICAgdG9wRmluZGluZ3M6IChyLnRvcEZpbmRpbmdzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikgPz8gW10sXG4gICAgLy8gT25seSBhY2NlcHRhbmNlcyBOT1QgaW4gZm9yY2UgcGFzcyB0aGUgbGl2ZSBwcmVkaWNhdGUsIHNvIGFuIGBhY2NlcHRlZGBcbiAgICAvLyByb3cgaGVyZSBpcyBhbiBleHBpcmVkIG9uZSwgYW5kIHJlYWRzIGFzIHdoYXQgaXQgaXM6IG9wZW4uXG4gICAgdHJpYWdlU3RhdGU6IHIudHJpYWdlU3RhdGUgPT09ICdhY2NlcHRlZCcgPyAnb3BlbicgOiAoci50cmlhZ2VTdGF0ZSBhcyBzdHJpbmcpLFxuICAgIGZsYWdnZWRBdDogci5mbGFnZ2VkQXQgYXMgRGF0ZSxcbiAgfSkpO1xufVxuXG4vKiogT25lIGV4cG9zdXJlIHJvdyBhcyB0aGUgcGVyLXBpcGVsaW5lIHNlY3VyaXR5IHZpZXdzIHJlYWQgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lRXhwb3N1cmUge1xuICBpZDogc3RyaW5nO1xuICBvcmdJZDogc3RyaW5nO1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBsdWdpblB1Ymxpc2hlcjogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG4gIGltYWdlRGlnZXN0OiBzdHJpbmcgfCBudWxsO1xuICBzb3VyY2U6IEV4cG9zdXJlU291cmNlO1xuICBjcml0aWNhbENvdW50OiBudW1iZXI7XG4gIGhpZ2hDb3VudDogbnVtYmVyO1xuICB0b3BGaW5kaW5nczogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBmaW5kaW5nS2V5czogc3RyaW5nW107XG4gIC8qKiBBcyBzdG9yZWQ7IGFuIGBhY2NlcHRlZGAgcm93IHBhc3QgaXRzIGRlYWRsaW5lIHJlYWRzIGBvcGVuYCAoc2VlIHtAbGluayBsaXZlRXhwb3N1cmVQcmVkaWNhdGV9KS4gKi9cbiAgdHJpYWdlU3RhdGU6IHN0cmluZztcbiAgLyoqIEFuIGFjY2VwdGFuY2Ugc3RpbGwgaW4gZm9yY2UgcmlnaHQgbm93LiAqL1xuICBhY2NlcHRhbmNlQWN0aXZlOiBib29sZWFuO1xuICBhY2NlcHRlZFVudGlsOiBEYXRlIHwgbnVsbDtcbiAgYWNjZXB0ZWRGaW5kaW5nS2V5czogc3RyaW5nW107XG4gIGFjY2VwdGVkS2V2OiBib29sZWFuO1xuICB0cmlhZ2VSZWFzb246IHN0cmluZyB8IG51bGw7XG4gIHRyaWFnZWRCeTogc3RyaW5nIHwgbnVsbDtcbiAgdHJpYWdlZEF0OiBEYXRlIHwgbnVsbDtcbiAgZmxhZ2dlZEF0OiBEYXRlO1xuICBmaXhlZEF0OiBEYXRlIHwgbnVsbDtcbn1cblxuY29uc3QgRSA9ICgpID0+IHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmU7XG5cbmZ1bmN0aW9uIHRvUGlwZWxpbmVFeHBvc3VyZShyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbm93OiBEYXRlKTogUGlwZWxpbmVFeHBvc3VyZSB7XG4gIGNvbnN0IHVudGlsID0gKHIuYWNjZXB0ZWRVbnRpbCBhcyBEYXRlIHwgbnVsbCkgPz8gbnVsbDtcbiAgY29uc3QgYWN0aXZlID0gci50cmlhZ2VTdGF0ZSA9PT0gJ2FjY2VwdGVkJyAmJiByLmZpeGVkQXQgPT0gbnVsbCAmJiB1bnRpbCAhPT0gbnVsbCAmJiB1bnRpbC5nZXRUaW1lKCkgPiBub3cuZ2V0VGltZSgpO1xuICByZXR1cm4ge1xuICAgIGlkOiByLmlkIGFzIHN0cmluZyxcbiAgICBvcmdJZDogci5vcmdJZCBhcyBzdHJpbmcsXG4gICAgcGlwZWxpbmVJZDogci5waXBlbGluZUlkIGFzIHN0cmluZyxcbiAgICBwbHVnaW5QdWJsaXNoZXI6IChyLnBsdWdpblB1Ymxpc2hlciBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHBsdWdpbk5hbWU6IHIucGx1Z2luTmFtZSBhcyBzdHJpbmcsXG4gICAgcGx1Z2luVmVyc2lvbjogci5wbHVnaW5WZXJzaW9uIGFzIHN0cmluZyxcbiAgICBpbWFnZURpZ2VzdDogKHIuaW1hZ2VEaWdlc3QgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBzb3VyY2U6IHIuc291cmNlIGFzIEV4cG9zdXJlU291cmNlLFxuICAgIGNyaXRpY2FsQ291bnQ6IHIuY3JpdGljYWxDb3VudCBhcyBudW1iZXIsXG4gICAgaGlnaENvdW50OiByLmhpZ2hDb3VudCBhcyBudW1iZXIsXG4gICAgdG9wRmluZGluZ3M6IChyLnRvcEZpbmRpbmdzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikgPz8gW10sXG4gICAgZmluZGluZ0tleXM6IChyLmZpbmRpbmdLZXlzIGFzIHN0cmluZ1tdKSA/PyBbXSxcbiAgICB0cmlhZ2VTdGF0ZTogci50cmlhZ2VTdGF0ZSA9PT0gJ2FjY2VwdGVkJyAmJiAhYWN0aXZlICYmIHIuZml4ZWRBdCA9PSBudWxsID8gJ29wZW4nIDogKHIudHJpYWdlU3RhdGUgYXMgc3RyaW5nKSxcbiAgICBhY2NlcHRhbmNlQWN0aXZlOiBhY3RpdmUsXG4gICAgYWNjZXB0ZWRVbnRpbDogdW50aWwsXG4gICAgYWNjZXB0ZWRGaW5kaW5nS2V5czogKHIuYWNjZXB0ZWRGaW5kaW5nS2V5cyBhcyBzdHJpbmdbXSkgPz8gW10sXG4gICAgYWNjZXB0ZWRLZXY6IHIuYWNjZXB0ZWRLZXYgPT09IHRydWUsXG4gICAgdHJpYWdlUmVhc29uOiAoci50cmlhZ2VSZWFzb24gYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICB0cmlhZ2VkQnk6IChyLnRyaWFnZWRCeSBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHRyaWFnZWRBdDogKHIudHJpYWdlZEF0IGFzIERhdGUgfCBudWxsKSA/PyBudWxsLFxuICAgIGZsYWdnZWRBdDogci5mbGFnZ2VkQXQgYXMgRGF0ZSxcbiAgICBmaXhlZEF0OiAoci5maXhlZEF0IGFzIERhdGUgfCBudWxsKSA/PyBudWxsLFxuICB9O1xufVxuXG4vKipcbiAqIE9uZSBwaXBlbGluZSdzIGV4cG9zdXJlczogdGhlIHVuZml4ZWQgb25lcyAob3BlbiwgYWNjZXB0ZWQsIGZhbHNlIHBvc2l0aXZlKSxcbiAqIHBsdXMgdGhlIGZpeGVkIG9uZXMgd2hlbiBhc2tlZCDigJQgbW9zdCBzZXZlcmUgZmlyc3QuIFJlYWRzIHVuZGVyIHRoZSBDQUxMRVInc1xuICogc2NvcGUsIG5hcnJvd2VkIHRvIGBvcmdJZGAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwaXBlbGluZUV4cG9zdXJlcyhcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBvcHRzOiB7IGluY2x1ZGVGaXhlZD86IGJvb2xlYW47IG5vdz86IERhdGUgfSA9IHt9LFxuKTogUHJvbWlzZTxQaXBlbGluZUV4cG9zdXJlW10+IHtcbiAgY29uc3Qgbm93ID0gb3B0cy5ub3cgPz8gbmV3IERhdGUoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnNlbGVjdCgpLmZyb20oRSgpKVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShFKCkub3JnSWQsIG9yZ0lkKSxcbiAgICAgIGVxKEUoKS5waXBlbGluZUlkLCBwaXBlbGluZUlkKSxcbiAgICAgIC4uLihvcHRzLmluY2x1ZGVGaXhlZCA/IFtdIDogW2lzTnVsbChFKCkuZml4ZWRBdCldKSxcbiAgICApKVxuICAgIC5vcmRlckJ5KHNxbGAke0UoKS5jcml0aWNhbENvdW50fSBERVNDLCAke0UoKS5oaWdoQ291bnR9IERFU0MsICR7RSgpLnBsdWdpbk5hbWV9YCkpO1xuICByZXR1cm4gKHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KS5tYXAoKHIpID0+IHRvUGlwZWxpbmVFeHBvc3VyZShyLCBub3cpKTtcbn1cblxuLyoqIE9uZSBleHBvc3VyZSByb3cgb2YgYG9yZ0lkYCwgb3IgbnVsbC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBvc3VyZUJ5SWQob3JnSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgbm93ID0gbmV3IERhdGUoKSk6IFByb21pc2U8UGlwZWxpbmVFeHBvc3VyZSB8IG51bGw+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnNlbGVjdCgpLmZyb20oRSgpKS53aGVyZShhbmQoZXEoRSgpLmlkLCBpZCksIGVxKEUoKS5vcmdJZCwgb3JnSWQpKSkpO1xuICBjb25zdCByb3cgPSAocm93cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pWzBdO1xuICByZXR1cm4gcm93ID8gdG9QaXBlbGluZUV4cG9zdXJlKHJvdywgbm93KSA6IG51bGw7XG59XG5cbi8qKiBBIHRyaWFnZSBkZWNpc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJpYWdlRGVjaXNpb24ge1xuICBzdGF0ZTogJ29wZW4nIHwgJ2FjY2VwdGVkJyB8ICdmYWxzZV9wb3NpdGl2ZSc7XG4gIHJlYXNvbj86IHN0cmluZztcbiAgYWNjZXB0ZWRVbnRpbD86IERhdGU7XG4gIC8qKiBBY2NlcHQgS0VWLWxpc3RlZCBmaW5kaW5ncyB0b28uIE5ldmVyIGltcGxpZWQ6IGFuIGFjY2VwdGFuY2Ugd2l0aG91dCBpdCBkb2VzIG5vdCBjb3ZlciB0aGVtLiAqL1xuICBrZXY/OiBib29sZWFuO1xuICBhY3Rvcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIHRyaWFnZSBkZWNpc2lvbiBvbiBvbmUgZXhwb3N1cmUg4oCUIGFuZCBvbiBpdHMgU0lCTElOR1M6IHRoZSBzYW1lXG4gKiBwaXBlbGluZSdzIG90aGVyIG9wZW4gcm93IGZvciB0aGUgc2FtZSB2ZXJzaW9uIGFuZCBpbWFnZSAodGhlIGRlY2xhcmVkIGFuZFxuICogdGhlIGRlcGxveWVkIHNpZGUpLiBBIHJpc2sgZGVjaXNpb24gaXMgYWJvdXQgd2hhdCB0aGUgcGlwZWxpbmUgcnVucywgYW5kXG4gKiBsZWF2aW5nIG9uZSBzaWRlIG9wZW4gd291bGQgaGF2ZSB0aGUgcmVwb3J0IGFuZCB0aGUgbG9va3VwIGRpc2FncmVlLlxuICpcbiAqIGBhY2NlcHRlZGAgUkVRVUlSRVMgYSBkZWFkbGluZSBhbmQgYSByZWFzb24uIEEgcGVybWFuZW50LCB1bmV4cGxhaW5lZCBtdXRlIGlzXG4gKiBob3cgYSBmaW5kaW5nIHN0b3BzIGJlaW5nIGFueWJvZHkncyBwcm9ibGVtLCBhbmQgdGhlcmUgaXMgbm8gZ29vZCByZWFzb24gdG9cbiAqIHN1cHBvcnQgaXQg4oCUIHRoZSBjYWxsZXIgZ2V0cyBhbiBlcnJvciByYXRoZXIgdGhhbiBhIHNpbGVudGx5IHVuYm91bmRlZFxuICogYWNjZXB0YW5jZS4gVGhlIGFjY2VwdGVkIGZpbmRpbmcga2V5cyBhcmUgRlJPWkVOIGF0IHRoZSBkZWNpc2lvbjogYW5cbiAqIGFjY2VwdGFuY2UgY292ZXJzIHdoYXQgd2FzIHRoZXJlIHdoZW4gaXQgd2FzIG1hZGUsIG5ldmVyIGEgZmluZGluZyBzaW5jZS5cbiAqXG4gKiBSZXR1cm5zIHRoZSB1cGRhdGVkIHJvd3MgKGVtcHR5IHdoZW4gYGlkYCBpcyBub3QgYG9yZ0lkYCdzIHVuZml4ZWQgZXhwb3N1cmUpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJpYWdlRXhwb3N1cmUob3JnSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVjaXNpb246IFRyaWFnZURlY2lzaW9uKTogUHJvbWlzZTxQaXBlbGluZUV4cG9zdXJlW10+IHtcbiAgaWYgKGRlY2lzaW9uLnN0YXRlID09PSAnYWNjZXB0ZWQnICYmICghZGVjaXNpb24uYWNjZXB0ZWRVbnRpbCB8fCAhZGVjaXNpb24ucmVhc29uPy50cmltKCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBY2NlcHRpbmcgYSB2dWxuZXJhYmlsaXR5IGV4cG9zdXJlIG5lZWRzIGEgcmVhc29uIGFuZCBhbiBleHBpcnkgZGF0ZScpO1xuICB9XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHRhcmdldCA9IGF3YWl0IGV4cG9zdXJlQnlJZChvcmdJZCwgaWQsIG5vdyk7XG4gIGlmICghdGFyZ2V0IHx8IHRhcmdldC5maXhlZEF0KSByZXR1cm4gW107XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC51cGRhdGUoRSgpKVxuICAgIC5zZXQoe1xuICAgICAgdHJpYWdlU3RhdGU6IGRlY2lzaW9uLnN0YXRlLFxuICAgICAgYWNjZXB0ZWRVbnRpbDogZGVjaXNpb24uc3RhdGUgPT09ICdhY2NlcHRlZCcgPyAoZGVjaXNpb24uYWNjZXB0ZWRVbnRpbCA/PyBudWxsKSA6IG51bGwsXG4gICAgICBhY2NlcHRlZEZpbmRpbmdLZXlzOiBkZWNpc2lvbi5zdGF0ZSA9PT0gJ2FjY2VwdGVkJyA/IHNxbGAke0UoKS5maW5kaW5nS2V5c31gIDogW10sXG4gICAgICBhY2NlcHRlZEtldjogZGVjaXNpb24uc3RhdGUgPT09ICdhY2NlcHRlZCcgJiYgZGVjaXNpb24ua2V2ID09PSB0cnVlLFxuICAgICAgdHJpYWdlUmVhc29uOiBkZWNpc2lvbi5yZWFzb24/LnRyaW0oKSB8fCBudWxsLFxuICAgICAgdHJpYWdlZEJ5OiBkZWNpc2lvbi5hY3RvcixcbiAgICAgIHRyaWFnZWRBdDogbm93LFxuICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoRSgpLm9yZ0lkLCBvcmdJZCksXG4gICAgICBlcShFKCkucGlwZWxpbmVJZCwgdGFyZ2V0LnBpcGVsaW5lSWQpLFxuICAgICAgZXEoRSgpLnBsdWdpbk5hbWUsIHRhcmdldC5wbHVnaW5OYW1lKSxcbiAgICAgIGVxKEUoKS5wbHVnaW5WZXJzaW9uLCB0YXJnZXQucGx1Z2luVmVyc2lvbiksXG4gICAgICB0YXJnZXQuaW1hZ2VEaWdlc3QgPT09IG51bGwgPyBpc051bGwoRSgpLmltYWdlRGlnZXN0KSA6IGVxKEUoKS5pbWFnZURpZ2VzdCwgdGFyZ2V0LmltYWdlRGlnZXN0KSxcbiAgICAgIGlzTnVsbChFKCkuZml4ZWRBdCksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKCkpO1xuICByZXR1cm4gKHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KS5tYXAoKHIpID0+IHRvUGlwZWxpbmVFeHBvc3VyZShyLCBub3cpKTtcbn1cblxuLyoqIGBuYW1lQHZlcnNpb25AZGlnZXN0YCDigJQgdGhlIGtleSB7QGxpbmsgYWN0aXZlQWNjZXB0YW5jZXN9IGFuc3dlcnMgdW5kZXIuICovXG5leHBvcnQgY29uc3QgYWNjZXB0YW5jZUtleSA9IChwbHVnaW5OYW1lOiBzdHJpbmcsIHBsdWdpblZlcnNpb246IHN0cmluZywgaW1hZ2VEaWdlc3Q/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nID0+XG4gIGAke3BsdWdpbk5hbWV9QCR7cGx1Z2luVmVyc2lvbn1AJHtpbWFnZURpZ2VzdCA/PyAnJ31gO1xuXG4vKiogQSBwaXBlbGluZSdzIGFjY2VwdGFuY2VzIGluIGZvcmNlLCBrZXllZCBieSB7QGxpbmsgYWNjZXB0YW5jZUtleX0sIHBsdXMgdGhlIGFjY2VwdGVkIHZlcnNpb25zIHBlciBwbHVnaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQWNjZXB0YW5jZXMge1xuICBieUtleTogTWFwPHN0cmluZywgVnVsbkFjY2VwdGFuY2UgJiB7IGV4cG9zdXJlSWRzOiBzdHJpbmdbXSB9PjtcbiAgLyoqIGBwbHVnaW5OYW1lYCDihpIgdmVyc2lvbnMgd2l0aCBhbiBhY2NlcHRhbmNlICh0aGUgcmVzb2x2ZXIncyBgYWNjZXB0ZWRWZXJzaW9uc2AgaGludCkuICovXG4gIHZlcnNpb25zQnlQbHVnaW46IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pjtcbn1cblxuLyoqXG4gKiBUaGUgYWNjZXB0YW5jZXMgSU4gRk9SQ0UgZm9yIG9uZSBwaXBlbGluZSAoYGFjY2VwdGVkYCwgdW5maXhlZCwgZGVhZGxpbmUgaW4gdGhlXG4gKiBmdXR1cmUpLCBtZXJnZWQgcGVyIHZlcnNpb24gYW5kIGltYWdlOiB0aGUgdW5pb24gb2YgdGhlIGZpbmRpbmcga2V5cyB0aGUgcm93c1xuICogZnJvemUsIEtFViBvbmx5IHdoZW4gZXZlcnkgbWVyZ2VkIHJvdyBhY2NlcHRlZCBpdC4gUmVhZHMgdW5kZXIgdGhlIGNhbGxlcidzXG4gKiBzY29wZSBuYXJyb3dlZCB0byBgb3JnSWRgOyBhIGZhaWxlZCByZWFkIGlzIFwibm8gYWNjZXB0YW5jZVwiIOKAlCB0aGUgc3RyaWN0ZXIgYW5zd2VyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aXZlQWNjZXB0YW5jZXMob3JnSWQ6IHN0cmluZywgcGlwZWxpbmVJZDogc3RyaW5nLCBub3cgPSBuZXcgRGF0ZSgpKTogUHJvbWlzZTxQaXBlbGluZUFjY2VwdGFuY2VzPiB7XG4gIGNvbnN0IG91dDogUGlwZWxpbmVBY2NlcHRhbmNlcyA9IHsgYnlLZXk6IG5ldyBNYXAoKSwgdmVyc2lvbnNCeVBsdWdpbjogbmV3IE1hcCgpIH07XG4gIHRyeSB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnNlbGVjdCh7XG4gICAgICBpZDogRSgpLmlkLFxuICAgICAgcGx1Z2luTmFtZTogRSgpLnBsdWdpbk5hbWUsXG4gICAgICBwbHVnaW5WZXJzaW9uOiBFKCkucGx1Z2luVmVyc2lvbixcbiAgICAgIGltYWdlRGlnZXN0OiBFKCkuaW1hZ2VEaWdlc3QsXG4gICAgICBhY2NlcHRlZFVudGlsOiBFKCkuYWNjZXB0ZWRVbnRpbCxcbiAgICAgIGFjY2VwdGVkRmluZGluZ0tleXM6IEUoKS5hY2NlcHRlZEZpbmRpbmdLZXlzLFxuICAgICAgYWNjZXB0ZWRLZXY6IEUoKS5hY2NlcHRlZEtldixcbiAgICB9KS5mcm9tKEUoKSlcbiAgICAgIC53aGVyZShhbmQoXG4gICAgICAgIGVxKEUoKS5vcmdJZCwgb3JnSWQpLFxuICAgICAgICBlcShFKCkucGlwZWxpbmVJZCwgcGlwZWxpbmVJZCksXG4gICAgICAgIGVxKEUoKS50cmlhZ2VTdGF0ZSwgJ2FjY2VwdGVkJyksXG4gICAgICAgIGlzTnVsbChFKCkuZml4ZWRBdCksXG4gICAgICAgIHNxbGAke0UoKS5hY2NlcHRlZFVudGlsfSA+ICR7bm93fWAsXG4gICAgICApKSkgYXMgQXJyYXk8eyBpZDogc3RyaW5nOyBwbHVnaW5OYW1lOiBzdHJpbmc7IHBsdWdpblZlcnNpb246IHN0cmluZzsgaW1hZ2VEaWdlc3Q6IHN0cmluZyB8IG51bGw7IGFjY2VwdGVkVW50aWw6IERhdGU7IGFjY2VwdGVkRmluZGluZ0tleXM6IHN0cmluZ1tdOyBhY2NlcHRlZEtldjogYm9vbGVhbiB9PjtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm93cykge1xuICAgICAgY29uc3Qga2V5ID0gYWNjZXB0YW5jZUtleShyLnBsdWdpbk5hbWUsIHIucGx1Z2luVmVyc2lvbiwgci5pbWFnZURpZ2VzdCk7XG4gICAgICBjb25zdCBwcmV2ID0gb3V0LmJ5S2V5LmdldChrZXkpO1xuICAgICAgb3V0LmJ5S2V5LnNldChrZXksIHByZXZcbiAgICAgICAgPyB7XG4gICAgICAgICAgZmluZGluZ0tleXM6IFsuLi5uZXcgU2V0KFsuLi5wcmV2LmZpbmRpbmdLZXlzLCAuLi4oci5hY2NlcHRlZEZpbmRpbmdLZXlzID8/IFtdKV0pXSxcbiAgICAgICAgICBrZXY6IHByZXYua2V2ICYmIHIuYWNjZXB0ZWRLZXYsXG4gICAgICAgICAgYWNjZXB0ZWRVbnRpbDogcHJldi5hY2NlcHRlZFVudGlsICYmIG5ldyBEYXRlKHByZXYuYWNjZXB0ZWRVbnRpbCkgPCByLmFjY2VwdGVkVW50aWwgPyBwcmV2LmFjY2VwdGVkVW50aWwgOiByLmFjY2VwdGVkVW50aWwsXG4gICAgICAgICAgZXhwb3N1cmVJZHM6IFsuLi5wcmV2LmV4cG9zdXJlSWRzLCByLmlkXSxcbiAgICAgICAgfVxuICAgICAgICA6IHsgZmluZGluZ0tleXM6IHIuYWNjZXB0ZWRGaW5kaW5nS2V5cyA/PyBbXSwga2V2OiByLmFjY2VwdGVkS2V2LCBhY2NlcHRlZFVudGlsOiByLmFjY2VwdGVkVW50aWwsIGV4cG9zdXJlSWRzOiBbci5pZF0gfSk7XG4gICAgICBjb25zdCB2ZXJzaW9ucyA9IG91dC52ZXJzaW9uc0J5UGx1Z2luLmdldChyLnBsdWdpbk5hbWUpID8/IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgdmVyc2lvbnMuYWRkKHIucGx1Z2luVmVyc2lvbik7XG4gICAgICBvdXQudmVyc2lvbnNCeVBsdWdpbi5zZXQoci5wbHVnaW5OYW1lLCB2ZXJzaW9ucyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybignUGlwZWxpbmUgYWNjZXB0YW5jZXMgdW5yZWFkYWJsZTsgdHJlYXRpbmcgYXMgbm9uZScsIHsgcGlwZWxpbmVJZCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBBbiBhY2NlcHRhbmNlIHRoYXQgbGFwc2VkLCBhcyB7QGxpbmsgcmVvcGVuTGFwc2VkQWNjZXB0YW5jZXN9IHJldHVybnMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIExhcHNlZEFjY2VwdGFuY2Uge1xuICBpZDogc3RyaW5nO1xuICBvcmdJZDogc3RyaW5nO1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBsdWdpblB1Ymxpc2hlcjogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG4gIGltYWdlRGlnZXN0OiBzdHJpbmcgfCBudWxsO1xuICB0cmlhZ2VkQnk6IHN0cmluZyB8IG51bGw7XG4gIHRyaWFnZVJlYXNvbjogc3RyaW5nIHwgbnVsbDtcbiAgYWNjZXB0ZWRVbnRpbDogRGF0ZSB8IG51bGw7XG59XG5cbi8qKlxuICogUmVvcGVuIGV2ZXJ5IGFjY2VwdGFuY2Ugd2hvc2UgZGVhZGxpbmUgaGFzIHBhc3NlZCwgYW5kIHJldHVybiB0aGVtIHNvIHRoZVxuICogcGlwZWxpbmUgb3duZXJzIGNhbiBiZSB0b2xkIChOMzMpLiBSZWFkZXJzIGFscmVhZHkgdHJlYXQgc3VjaCBhIHJvdyBhcyBvcGVuO1xuICogd3JpdGluZyBpdCBtYWtlcyB0aGUgc3RvcmVkIHN0YXRlIHRoZSB0cnV0aCBhbmQgZ2l2ZXMgdGhlIG5vdGljZSBleGFjdGx5IG9uZVxuICogbW9tZW50IHRvIGZpcmUuIE11c3QgcnVuIHdpdGggYSBzY29wZSB0aGF0IGNhbiB3cml0ZSBldmVyeSBvcmcncyByb3dzICh0aGVcbiAqIG5pZ2h0bHkgcmVzY2FuJ3MgZWxldmF0ZWQgY29udGV4dCkuIE5ldmVyIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlb3BlbkxhcHNlZEFjY2VwdGFuY2VzKG5vdyA9IG5ldyBEYXRlKCkpOiBQcm9taXNlPExhcHNlZEFjY2VwdGFuY2VbXT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC51cGRhdGUoRSgpKVxuICAgICAgLnNldCh7IHRyaWFnZVN0YXRlOiAnb3BlbicsIHVwZGF0ZWRBdDogbm93IH0pXG4gICAgICAud2hlcmUoYW5kKFxuICAgICAgICBlcShFKCkudHJpYWdlU3RhdGUsICdhY2NlcHRlZCcpLFxuICAgICAgICBpc051bGwoRSgpLmZpeGVkQXQpLFxuICAgICAgICBsdGUoRSgpLmFjY2VwdGVkVW50aWwsIG5vdyksXG4gICAgICApKVxuICAgICAgLnJldHVybmluZyh7XG4gICAgICAgIGlkOiBFKCkuaWQsXG4gICAgICAgIG9yZ0lkOiBFKCkub3JnSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IEUoKS5waXBlbGluZUlkLFxuICAgICAgICBwbHVnaW5QdWJsaXNoZXI6IEUoKS5wbHVnaW5QdWJsaXNoZXIsXG4gICAgICAgIHBsdWdpbk5hbWU6IEUoKS5wbHVnaW5OYW1lLFxuICAgICAgICBwbHVnaW5WZXJzaW9uOiBFKCkucGx1Z2luVmVyc2lvbixcbiAgICAgICAgaW1hZ2VEaWdlc3Q6IEUoKS5pbWFnZURpZ2VzdCxcbiAgICAgICAgdHJpYWdlZEJ5OiBFKCkudHJpYWdlZEJ5LFxuICAgICAgICB0cmlhZ2VSZWFzb246IEUoKS50cmlhZ2VSZWFzb24sXG4gICAgICAgIGFjY2VwdGVkVW50aWw6IEUoKS5hY2NlcHRlZFVudGlsLFxuICAgICAgfSkpO1xuICAgIHJldHVybiByb3dzIGFzIExhcHNlZEFjY2VwdGFuY2VbXTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0xhcHNlZCBhY2NlcHRhbmNlcyBub3QgcmVvcGVuZWQnLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqXG4gKiBFeHBvc3VyZXMgd2hvc2UgYWNjZXB0YW5jZSBoYXMgbGFwc2VkLCBmb3IgdGhlIG9yZydzIHNlY3VyaXR5IG5vdGlmaWNhdGlvbnMuXG4gKlxuICogU3VyZmFjZWQgcmF0aGVyIHRoYW4gc2lsZW50bHkgcmVvcGVuZWQ6IHNvbWVib2R5IGRlY2lkZWQgdG8gYWNjZXB0IHRoaXMgdW50aWwgYVxuICogZGF0ZSwgdGhhdCBkYXRlIGhhcyBwYXNzZWQsIGFuZCB0aGUgcGVyc29uIHdobyBkZWNpZGVkIGlzIHRoZSBvbmUgd2hvIHNob3VsZFxuICogaGVhciBhYm91dCBpdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhcHNlZEFjY2VwdGFuY2VzKG9yZ0lkOiBzdHJpbmcsIG5vdyA9IG5ldyBEYXRlKCkpOiBQcm9taXNlPEFycmF5PHtcbiAgaWQ6IHN0cmluZztcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG4gIHRyaWFnZWRCeTogc3RyaW5nIHwgbnVsbDtcbiAgYWNjZXB0ZWRVbnRpbDogRGF0ZSB8IG51bGw7XG59Pj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHguc2VsZWN0KHtcbiAgICBpZDogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5pZCxcbiAgICBwbHVnaW5OYW1lOiBzY2hlbWEucGx1Z2luVnVsbkV4cG9zdXJlLnBsdWdpbk5hbWUsXG4gICAgcGx1Z2luVmVyc2lvbjogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5wbHVnaW5WZXJzaW9uLFxuICAgIHRyaWFnZWRCeTogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS50cmlhZ2VkQnksXG4gICAgYWNjZXB0ZWRVbnRpbDogc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5hY2NlcHRlZFVudGlsLFxuICB9KS5mcm9tKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUpXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUub3JnSWQsIG9yZ0lkKSxcbiAgICAgIGVxKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUudHJpYWdlU3RhdGUsICdhY2NlcHRlZCcpLFxuICAgICAgaXNOdWxsKHNjaGVtYS5wbHVnaW5WdWxuRXhwb3N1cmUuZml4ZWRBdCksXG4gICAgICBsdGUoc2NoZW1hLnBsdWdpblZ1bG5FeHBvc3VyZS5hY2NlcHRlZFVudGlsLCBub3cpLFxuICAgICkpKTtcbiAgcmV0dXJuIHJvd3MgYXMgQXJyYXk8eyBpZDogc3RyaW5nOyBwbHVnaW5OYW1lOiBzdHJpbmc7IHBsdWdpblZlcnNpb246IHN0cmluZzsgdHJpYWdlZEJ5OiBzdHJpbmcgfCBudWxsOyBhY2NlcHRlZFVudGlsOiBEYXRlIHwgbnVsbCB9Pjtcbn1cbiJdfQ==
@@ -103,4 +103,4 @@ export async function hasVerifiedPluginUse(orgId, publisher, name) {
103
103
  `).then(r => drizzleRows(r.rows))));
104
104
  return rows[0]?.verified === true;
105
105
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJ1bnRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9wbHVnaW4tcnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsRUFBRSxDQUFDO0FBQ2hELDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFFM0MsOEZBQThGO0FBQzlGLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQTtrREFDNEIsQ0FBQztBQUVuRCx1RUFBdUU7QUFDdkUsU0FBUyxrQkFBa0IsQ0FBQyxTQUF3QjtJQUNsRCxPQUFPLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBLHdCQUF3QixTQUFTLEVBQUUsQ0FBQztBQUN2RyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxLQUFhLEVBQ2IsSUFBWSxFQUNaLEVBQVUsRUFDVixNQUFNLEdBQXdCLEVBQUUsRUFDaEMsTUFBaUI7SUFFakIsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FB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OzBCQUV6RixNQUFNLENBQUMsYUFBYTs2QkFDakIsS0FBSyxRQUFRLFVBQVU7a0JBQ2xDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsSUFBSTtrRUFDVCx3QkFBd0I7O09BRW5GLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQZXItcGx1Z2luIFJVTlRJTUUgdGVsZW1ldHJ5OiBob3cgcGx1Z2lucyBiZWhhdmUgd2hlblxuICogcGlwZWxpbmVzIHJ1biB0aGVtLCBhcyBvcHBvc2VkIHRvIHRoZSBwbHVnaW4gQlVJTEQgcmVwb3J0cy4gUmVhZHMgdGhlXG4gKiBgcGx1Z2luX3B1Ymxpc2hlci9wbHVnaW5fbmFtZS9wbHVnaW5fdmVyc2lvbmAgdGhhdCBldmVudCBpbmdlc3Qgc3RhbXBzIG9uXG4gKiBBQ1RJT04gZXZlbnRzIGZyb20gdGhlIHBpcGVsaW5lJ3Mgc3RlcCBtYW5pZmVzdC5cbiAqXG4gKiBBIFwicnVuXCIgaXMgb25lIHRlcm1pbmFsIEFDVElPTiBldmVudCDigJQgU1VDQ0VFREVEIG9yIEZBSUxFRC4gQ2FuY2VsZWQsXG4gKiBhYmFuZG9uZWQgYW5kIHN1cGVyc2VkZWQgYWN0aW9ucyBzYXkgbm90aGluZyBhYm91dCB0aGUgcGx1Z2luIGFuZCBhcmUgbGVmdFxuICogb3V0IG9mIGJvdGggdGhlIGNvdW50IGFuZCB0aGUgcmF0ZS5cbiAqXG4gKiBUd28gYXVkaWVuY2VzOlxuICogICAtIHRoZSBvcmcncyBvd24gZGFzaGJvYXJkICh7QGxpbmsgZ2V0UGx1Z2luUnVudGltZX0pOiBvcmctc2NvcGVkIChyb2xsdXBcbiAqICAgICBhd2FyZSksIGdyb3VwZWQgcGVyIHBsdWdpbiB2ZXJzaW9uO1xuICogICAtIHRoZSBlY29zeXN0ZW0sIHNlcnZpY2UtdG8tc2VydmljZSAoe0BsaW5rIGdldFBsdWdpblJ1bnRpbWVBZ2dyZWdhdGV9LFxuICogICAgIHtAbGluayBoYXNWZXJpZmllZFBsdWdpblVzZX0pOiBjcm9zcy1vcmcgYWdncmVnYXRlcyBrZXllZCBvbiBhIGxpc3Rpbmcnc1xuICogICAgIGAocHVibGlzaGVyLCBuYW1lKWAsIGZlZWRpbmcgYHBsdWdpbl9zdGF0c2AgYW5kIHRoZSByZXZpZXcgXCJ2ZXJpZmllZCB1c2VcIlxuICogICAgIGJhZGdlLiBOZXZlciBleHBvc2VkIHRvIGEgdXNlciB0b2tlbiDigJQgdGhleSByZWFkIGV2ZXJ5IG9yZydzIGV2ZW50cy5cbiAqL1xuXG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBvcmdTY29wZSwgcnVuUmVwb3J0IH0gZnJvbSAnLi9xdWVyeS1zY29wZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpblJ1bnRpbWVBZ2dyZWdhdGUsIFBsdWdpblJ1bnRpbWVGaWx0ZXIsIFBsdWdpblJ1bnRpbWVTdGF0cyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHsgcnVuV2l0aFRlbmFudENvbnRleHQsIHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuaW1wb3J0IHsgZHJpenpsZVJvd3MgfSBmcm9tICcuLi9jcnVkLXNlcnZpY2UuanMnO1xuXG4vKiogV2luZG93IGZvciB0aGUgZWNvc3lzdGVtIGFnZ3JlZ2F0ZSAoYHBsdWdpbl9zdGF0cy5zdWNjZXNzX3JhdGVfMzBkYCkuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1JVTlRJTUVfQUdHUkVHQVRFX0RBWVMgPSAzMDtcbi8qKiBXaW5kb3cgZm9yIHJldmlldyBcInZlcmlmaWVkIHVzZVwiOiBhIHN1Y2Nlc3NmdWwgcnVuIGluIHRoZSBsYXN0IDkwIGRheXMuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1ZFUklGSUVEX1VTRV9EQVlTID0gOTA7XG5cbi8qKiBUaGUgdGVybWluYWwtQUNUSU9OLCBwbHVnaW4tYXR0cmlidXRlZCBwcmVkaWNhdGUgZXZlcnkgcnVudGltZSByZWFkIHNoYXJlcyAoYWxpYXMgYGVgKS4gKi9cbmNvbnN0IHBsdWdpblJ1bnMgPSBzcWxgZS5ldmVudF90eXBlID0gJ0FDVElPTicgQU5EIGUucGx1Z2luX25hbWUgSVMgTk9UIE5VTExcbiAgICAgICAgICBBTkQgZS5zdGF0dXMgSU4gKCdTVUNDRUVERUQnLCAnRkFJTEVEJylgO1xuXG4vKiogYElTIE5VTExgIGZvciBhbiBvd24tb3JnIChwdWJsaXNoZXItbGVzcykgcGx1Z2luLCBgPWAgb3RoZXJ3aXNlLiAqL1xuZnVuY3Rpb24gcHVibGlzaGVyUHJlZGljYXRlKHB1Ymxpc2hlcjogc3RyaW5nIHwgbnVsbCkge1xuICByZXR1cm4gcHVibGlzaGVyID09PSBudWxsID8gc3FsYGUucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMYCA6IHNxbGBlLnBsdWdpbl9wdWJsaXNoZXIgPSAke3B1Ymxpc2hlcn1gO1xufVxuXG4vKipcbiAqIFBlciBwbHVnaW4gdmVyc2lvbjogcnVucywgc3VjY2VzcyByYXRlIGFuZCBkdXJhdGlvbiAocDUwL3A5NSkgb3ZlclxuICogYFtmcm9tLCB0b11gIG9uIGBjb21wbGV0ZWRfYXRgLCBmb3IgdGhlIG9yZyAob3IgaXRzIHJvbGx1cCBzdWJ0cmVlKS5cbiAqIE9wdGlvbmFsIGZpbHRlcnMgbmFycm93IHRvIG9uZSBwbHVnaW4gbmFtZSAvIHB1Ymxpc2hlciAoYG51bGxgID0gb3duLW9yZ1xuICogcGx1Z2lucykgLyB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGx1Z2luUnVudGltZShcbiAgb3JnSWQ6IHN0cmluZyxcbiAgZnJvbTogc3RyaW5nLFxuICB0bzogc3RyaW5nLFxuICBmaWx0ZXI6IFBsdWdpblJ1bnRpbWVGaWx0ZXIgPSB7fSxcbiAgb3JnSWRzPzogc3RyaW5nW10sXG4pOiBQcm9taXNlPFBsdWdpblJ1bnRpbWVTdGF0c1tdPiB7XG4gIGNvbnN0IHsgcHJlZCwgbXVsdGkgfSA9IG9yZ1Njb3BlKG9yZ0lkLCBvcmdJZHMpO1xuICBjb25zdCBuYW1lQ2xhdXNlID0gZmlsdGVyLm5hbWUgIT09IHVuZGVmaW5lZCA/IHNxbGBBTkQgZS5wbHVnaW5fbmFtZSA9ICR7ZmlsdGVyLm5hbWV9YCA6IHNxbGBgO1xuICBjb25zdCBwdWJsaXNoZXJDbGF1c2UgPSBmaWx0ZXIucHVibGlzaGVyICE9PSB1bmRlZmluZWQgPyBzcWxgQU5EICR7cHVibGlzaGVyUHJlZGljYXRlKGZpbHRlci5wdWJsaXNoZXIpfWAgOiBzcWxgYDtcbiAgY29uc3QgdmVyc2lvbkNsYXVzZSA9IGZpbHRlci52ZXJzaW9uICE9PSB1bmRlZmluZWQgPyBzcWxgQU5EIGUucGx1Z2luX3ZlcnNpb24gPSAke2ZpbHRlci52ZXJzaW9ufWAgOiBzcWxgYDtcbiAgY29uc3QgZXhlYyA9ICgpID0+IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICBlLnBsdWdpbl9wdWJsaXNoZXIgQVMgXCJwbHVnaW5QdWJsaXNoZXJcIixcbiAgICAgICAgICBlLnBsdWdpbl9uYW1lIEFTIFwicGx1Z2luTmFtZVwiLFxuICAgICAgICAgIGUucGx1Z2luX3ZlcnNpb24gQVMgXCJwbHVnaW5WZXJzaW9uXCIsXG4gICAgICAgICAgQ09VTlQoKik6OmludCBBUyBydW5zLFxuICAgICAgICAgIENPVU5UKCopIEZJTFRFUiAoV0hFUkUgZS5zdGF0dXMgPSAnU1VDQ0VFREVEJyk6OmludCBBUyBzdWNjZWVkZWQsXG4gICAgICAgICAgQ09VTlQoKikgRklMVEVSIChXSEVSRSBlLnN0YXR1cyA9ICdGQUlMRUQnKTo6aW50IEFTIGZhaWxlZCxcbiAgICAgICAgICBST1VORChDT1VOVCgqKSBGSUxURVIgKFdIRVJFIGUuc3RhdHVzID0gJ1NVQ0NFRURFRCcpOjpudW1lcmljXG4gICAgICAgICAgICAvIE5VTExJRihDT1VOVCgqKSwgMCkgKiAxMDAsIDEpOjpmbG9hdCBBUyBcInN1Y2Nlc3NQY3RcIixcbiAgICAgICAgICBQRVJDRU5USUxFX0NPTlQoMC41KSBXSVRISU4gR1JPVVAgKE9SREVSIEJZIGUuZHVyYXRpb25fbXMpOjppbnQgQVMgXCJwNTBNc1wiLFxuICAgICAgICAgIFBFUkNFTlRJTEVfQ09OVCgwLjk1KSBXSVRISU4gR1JPVVAgKE9SREVSIEJZIGUuZHVyYXRpb25fbXMpOjppbnQgQVMgXCJwOTVNc1wiLFxuICAgICAgICAgIE1BWChlLmNvbXBsZXRlZF9hdCk6OnRleHQgQVMgXCJsYXN0UnVuXCJcbiAgICAgICAgRlJPTSAke3NjaGVtYS5waXBlbGluZUV2ZW50fSBlXG4gICAgICAgIFdIRVJFIGUub3JnX2lkICR7cHJlZH0gQU5EICR7cGx1Z2luUnVuc31cbiAgICAgICAgICBBTkQgZS5jb21wbGV0ZWRfYXQgPj0gJHtmcm9tfTo6dGltZXN0YW1wdHogQU5EIGUuY29tcGxldGVkX2F0IDw9ICR7dG99Ojp0aW1lc3RhbXB0elxuICAgICAgICAgICR7bmFtZUNsYXVzZX0gJHtwdWJsaXNoZXJDbGF1c2V9ICR7dmVyc2lvbkNsYXVzZX1cbiAgICAgICAgR1JPVVAgQlkgZS5wbHVnaW5fcHVibGlzaGVyLCBlLnBsdWdpbl9uYW1lLCBlLnBsdWdpbl92ZXJzaW9uXG4gICAgICAgIE9SREVSIEJZIHJ1bnMgREVTQ1xuICAgICAgYCkudGhlbihyID0+IGRyaXp6bGVSb3dzPFBsdWdpblJ1bnRpbWVTdGF0cz4oci5yb3dzKSkpO1xuICBjb25zdCBmaWx0ZXJLZXkgPSBgJHtmaWx0ZXIubmFtZSA/PyAnJ306JHtmaWx0ZXIucHVibGlzaGVyID09PSBudWxsID8gJ1xcdTAwMDAnIDogZmlsdGVyLnB1Ymxpc2hlciA/PyAnJ306JHtmaWx0ZXIudmVyc2lvbiA/PyAnJ31gO1xuICByZXR1cm4gcnVuUmVwb3J0KGAke29yZ0lkfTpwbHVnaW4tcnVudGltZToke2Zyb219OiR7dG99OiR7ZmlsdGVyS2V5fWAsIG11bHRpLCBleGVjKTtcbn1cblxuLyoqXG4gKiBFY29zeXN0ZW0gYWdncmVnYXRlIGZvciBvbmUgbGlzdGluZyBvdmVyIHRoZSBsYXN0IDMwIGRheXMsIGFjcm9zcyBFVkVSWSBvcmc6XG4gKiBydW5zLCBzdWNjZXNzIHJhdGUgKDDigJMxOyBudWxsIHdpdGggbm8gcnVucykgYW5kIGhvdyBtYW55IGRpc3RpbmN0IG9yZ3MgcmFuIGl0LlxuICogUnVucyB1bmRlciBzeXN0ZW0gY29udGV4dCDigJQgdGhlIGNhbGxlciBpcyB0aGUgcGx1Z2luIHNlcnZpY2UgY29tcHV0aW5nXG4gKiBgcGx1Z2luX3N0YXRzYCwgYW5kIGBhY3RpdmVPcmdDb3VudDMwZGAgaXMgb25seSBldmVyIHNob3duIGF0IOKJpSA1LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGx1Z2luUnVudGltZUFnZ3JlZ2F0ZShwdWJsaXNoZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxQbHVnaW5SdW50aW1lQWdncmVnYXRlPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCBydW5XaXRoVGVuYW50Q29udGV4dCh7IGlzU3VwZXJBZG1pbjogdHJ1ZSB9LCAoKSA9PiB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgQ09VTlQoKik6OmludCBBUyBcInJ1bnMzMGRcIixcbiAgICAgICAgICAoQ09VTlQoKikgRklMVEVSIChXSEVSRSBlLnN0YXR1cyA9ICdTVUNDRUVERUQnKTo6ZmxvYXRcbiAgICAgICAgICAgIC8gTlVMTElGKENPVU5UKCopLCAwKSkgQVMgXCJzdWNjZXNzUmF0ZTMwZFwiLFxuICAgICAgICAgIENPVU5UKERJU1RJTkNUIGUub3JnX2lkKTo6aW50IEFTIFwiYWN0aXZlT3JnQ291bnQzMGRcIlxuICAgICAgICBGUk9NICR7c2NoZW1hLnBpcGVsaW5lRXZlbnR9IGVcbiAgICAgICAgV0hFUkUgJHtwbHVnaW5SdW5zfSBBTkQgJHtwdWJsaXNoZXJQcmVkaWNhdGUocHVibGlzaGVyKX0gQU5EIGUucGx1Z2luX25hbWUgPSAke25hbWV9XG4gICAgICAgICAgQU5EIGUuY29tcGxldGVkX2F0ID49IG5vdygpIC0gbWFrZV9pbnRlcnZhbChkYXlzID0+ICR7UExVR0lOX1JVTlRJTUVfQUdHUkVHQVRFX0RBWVN9KVxuICAgICAgYCkudGhlbihyID0+IGRyaXp6bGVSb3dzPFBsdWdpblJ1bnRpbWVBZ2dyZWdhdGU+KHIucm93cykpKSk7XG4gIHJldHVybiByb3dzWzBdID8/IHsgcnVuczMwZDogMCwgc3VjY2Vzc1JhdGUzMGQ6IG51bGwsIGFjdGl2ZU9yZ0NvdW50MzBkOiAwIH07XG59XG5cbi8qKlxuICogUmV2aWV3IFwidmVyaWZpZWQgdXNlXCI6IGRpZCBgb3JnSWRgIHJ1biBgKHB1Ymxpc2hlciwgbmFtZSlgIHN1Y2Nlc3NmdWxseVxuICogaW4gdGhlIGxhc3QgOTAgZGF5cz8gQm91bmRlZCBieSB0aGUgb3JnJ3MgZXZlbnQgcmV0ZW50aW9uIOKAlCBhIHJ1biBvbGRlciB0aGFuXG4gKiB0aGUgcmV0ZW50aW9uIGhvcml6b24gaGFzIGJlZW4gc3dlcHQgYW5kIG5vIGxvbmdlciBjb3VudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNWZXJpZmllZFBsdWdpblVzZShvcmdJZDogc3RyaW5nLCBwdWJsaXNoZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCBydW5XaXRoVGVuYW50Q29udGV4dCh7IG9yZ0lkLCBpc1N1cGVyQWRtaW46IGZhbHNlIH0sICgpID0+IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgICAgICBTRUxFQ1QgRVhJU1RTIChcbiAgICAgICAgICBTRUxFQ1QgMSBGUk9NICR7c2NoZW1hLnBpcGVsaW5lRXZlbnR9IGVcbiAgICAgICAgICBXSEVSRSBlLm9yZ19pZCA9ICR7b3JnSWR9IEFORCAke3BsdWdpblJ1bnN9IEFORCBlLnN0YXR1cyA9ICdTVUNDRUVERUQnXG4gICAgICAgICAgICBBTkQgJHtwdWJsaXNoZXJQcmVkaWNhdGUocHVibGlzaGVyKX0gQU5EIGUucGx1Z2luX25hbWUgPSAke25hbWV9XG4gICAgICAgICAgICBBTkQgZS5jb21wbGV0ZWRfYXQgPj0gbm93KCkgLSBtYWtlX2ludGVydmFsKGRheXMgPT4gJHtQTFVHSU5fVkVSSUZJRURfVVNFX0RBWVN9KVxuICAgICAgICApIEFTIFwidmVyaWZpZWRcIlxuICAgICAgYCkudGhlbihyID0+IGRyaXp6bGVSb3dzPHsgdmVyaWZpZWQ6IGJvb2xlYW4gfT4oci5yb3dzKSkpKTtcbiAgcmV0dXJuIHJvd3NbMF0/LnZlcmlmaWVkID09PSB0cnVlO1xufVxuIl19
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJ1bnRpbWUuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL3BsdWdpbi1ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxFQUFFLENBQUM7QUFDaEQsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUUzQyw4RkFBOEY7QUFDOUYsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFBO2tEQUM0QixDQUFDO0FBRW5ELHVFQUF1RTtBQUN2RSxTQUFTLGtCQUFrQixDQUFDLFNBQXdCO0lBQ2xELE9BQU8sU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUEsd0JBQXdCLFNBQVMsRUFBRSxDQUFDO0FBQ3ZHLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLEtBQWEsRUFDYixJQUFZLEVBQ1osRUFBVSxFQUNWLE1BQU0sR0FBd0IsRUFBRSxFQUNoQyxNQUFpQjtJQUVqQixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFL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QyxhQUFhOzZCQUNqQixLQUFLLFFBQVEsVUFBVTtrQkFDbEMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLHdCQUF3QixJQUFJO2tFQUNULHdCQUF3Qjs7T0FFbkYsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBlci1wbHVnaW4gUlVOVElNRSB0ZWxlbWV0cnk6IGhvdyBwbHVnaW5zIGJlaGF2ZSB3aGVuXG4gKiBwaXBlbGluZXMgcnVuIHRoZW0sIGFzIG9wcG9zZWQgdG8gdGhlIHBsdWdpbiBCVUlMRCByZXBvcnRzLiBSZWFkcyB0aGVcbiAqIGBwbHVnaW5fcHVibGlzaGVyL3BsdWdpbl9uYW1lL3BsdWdpbl92ZXJzaW9uYCB0aGF0IGV2ZW50IGluZ2VzdCBzdGFtcHMgb25cbiAqIEFDVElPTiBldmVudHMgZnJvbSB0aGUgcGlwZWxpbmUncyBzdGVwIG1hbmlmZXN0LlxuICpcbiAqIEEgXCJydW5cIiBpcyBvbmUgdGVybWluYWwgQUNUSU9OIGV2ZW50IOKAlCBTVUNDRUVERUQgb3IgRkFJTEVELiBDYW5jZWxlZCxcbiAqIGFiYW5kb25lZCBhbmQgc3VwZXJzZWRlZCBhY3Rpb25zIHNheSBub3RoaW5nIGFib3V0IHRoZSBwbHVnaW4gYW5kIGFyZSBsZWZ0XG4gKiBvdXQgb2YgYm90aCB0aGUgY291bnQgYW5kIHRoZSByYXRlLlxuICpcbiAqIFR3byBhdWRpZW5jZXM6XG4gKiAgIC0gdGhlIG9yZydzIG93biBkYXNoYm9hcmQgKHtAbGluayBnZXRQbHVnaW5SdW50aW1lfSk6IG9yZy1zY29wZWQgKHJvbGx1cFxuICogICAgIGF3YXJlKSwgZ3JvdXBlZCBwZXIgcGx1Z2luIHZlcnNpb247XG4gKiAgIC0gdGhlIGVjb3N5c3RlbSwgc2VydmljZS10by1zZXJ2aWNlICh7QGxpbmsgZ2V0UGx1Z2luUnVudGltZUFnZ3JlZ2F0ZX0sXG4gKiAgICAge0BsaW5rIGhhc1ZlcmlmaWVkUGx1Z2luVXNlfSk6IGNyb3NzLW9yZyBhZ2dyZWdhdGVzIGtleWVkIG9uIGEgbGlzdGluZydzXG4gKiAgICAgYChwdWJsaXNoZXIsIG5hbWUpYCwgZmVlZGluZyBgcGx1Z2luX3N0YXRzYCBhbmQgdGhlIHJldmlldyBcInZlcmlmaWVkIHVzZVwiXG4gKiAgICAgYmFkZ2UuIE5ldmVyIGV4cG9zZWQgdG8gYSB1c2VyIHRva2VuIOKAlCB0aGV5IHJlYWQgZXZlcnkgb3JnJ3MgZXZlbnRzLlxuICovXG5cbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IG9yZ1Njb3BlLCBydW5SZXBvcnQgfSBmcm9tICcuL3F1ZXJ5LXNjb3BlLmpzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luUnVudGltZUFnZ3JlZ2F0ZSwgUGx1Z2luUnVudGltZUZpbHRlciwgUGx1Z2luUnVudGltZVN0YXRzIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgeyBydW5XaXRoVGVuYW50Q29udGV4dCwgd2l0aFRlbmFudFR4IH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvdGVuYW5jeS5qcyc7XG5pbXBvcnQgeyBkcml6emxlUm93cyB9IGZyb20gJy4uL2NydWQtc2VydmljZS5qcyc7XG5cbi8qKiBXaW5kb3cgZm9yIHRoZSBlY29zeXN0ZW0gYWdncmVnYXRlIChgcGx1Z2luX3N0YXRzLnN1Y2Nlc3NfcmF0ZV8zMGRgKS4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fUlVOVElNRV9BR0dSRUdBVEVfREFZUyA9IDMwO1xuLyoqIFdpbmRvdyBmb3IgcmV2aWV3IFwidmVyaWZpZWQgdXNlXCI6IGEgc3VjY2Vzc2Z1bCBydW4gaW4gdGhlIGxhc3QgOTAgZGF5cy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fVkVSSUZJRURfVVNFX0RBWVMgPSA5MDtcblxuLyoqIFRoZSB0ZXJtaW5hbC1BQ1RJT04sIHBsdWdpbi1hdHRyaWJ1dGVkIHByZWRpY2F0ZSBldmVyeSBydW50aW1lIHJlYWQgc2hhcmVzIChhbGlhcyBgZWApLiAqL1xuY29uc3QgcGx1Z2luUnVucyA9IHNxbGBlLmV2ZW50X3R5cGUgPSAnQUNUSU9OJyBBTkQgZS5wbHVnaW5fbmFtZSBJUyBOT1QgTlVMTFxuICAgICAgICAgIEFORCBlLnN0YXR1cyBJTiAoJ1NVQ0NFRURFRCcsICdGQUlMRUQnKWA7XG5cbi8qKiBgSVMgTlVMTGAgZm9yIGFuIG93bi1vcmcgKHB1Ymxpc2hlci1sZXNzKSBwbHVnaW4sIGA9YCBvdGhlcndpc2UuICovXG5mdW5jdGlvbiBwdWJsaXNoZXJQcmVkaWNhdGUocHVibGlzaGVyOiBzdHJpbmcgfCBudWxsKSB7XG4gIHJldHVybiBwdWJsaXNoZXIgPT09IG51bGwgPyBzcWxgZS5wbHVnaW5fcHVibGlzaGVyIElTIE5VTExgIDogc3FsYGUucGx1Z2luX3B1Ymxpc2hlciA9ICR7cHVibGlzaGVyfWA7XG59XG5cbi8qKlxuICogUGVyIHBsdWdpbiB2ZXJzaW9uOiBydW5zLCBzdWNjZXNzIHJhdGUgYW5kIGR1cmF0aW9uIChwNTAvcDk1KSBvdmVyXG4gKiBgW2Zyb20sIHRvXWAgb24gYGNvbXBsZXRlZF9hdGAsIGZvciB0aGUgb3JnIChvciBpdHMgcm9sbHVwIHN1YnRyZWUpLlxuICogT3B0aW9uYWwgZmlsdGVycyBuYXJyb3cgdG8gb25lIHBsdWdpbiBuYW1lIC8gcHVibGlzaGVyIChgbnVsbGAgPSBvd24tb3JnXG4gKiBwbHVnaW5zKSAvIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5SdW50aW1lKFxuICBvcmdJZDogc3RyaW5nLFxuICBmcm9tOiBzdHJpbmcsXG4gIHRvOiBzdHJpbmcsXG4gIGZpbHRlcjogUGx1Z2luUnVudGltZUZpbHRlciA9IHt9LFxuICBvcmdJZHM/OiBzdHJpbmdbXSxcbik6IFByb21pc2U8UGx1Z2luUnVudGltZVN0YXRzW10+IHtcbiAgY29uc3QgeyBwcmVkLCBtdWx0aSB9ID0gb3JnU2NvcGUob3JnSWQsIG9yZ0lkcyk7XG4gIGNvbnN0IG5hbWVDbGF1c2UgPSBmaWx0ZXIubmFtZSAhPT0gdW5kZWZpbmVkID8gc3FsYEFORCBlLnBsdWdpbl9uYW1lID0gJHtmaWx0ZXIubmFtZX1gIDogc3FsYGA7XG4gIGNvbnN0IHB1Ymxpc2hlckNsYXVzZSA9IGZpbHRlci5wdWJsaXNoZXIgIT09IHVuZGVmaW5lZCA/IHNxbGBBTkQgJHtwdWJsaXNoZXJQcmVkaWNhdGUoZmlsdGVyLnB1Ymxpc2hlcil9YCA6IHNxbGBgO1xuICBjb25zdCB2ZXJzaW9uQ2xhdXNlID0gZmlsdGVyLnZlcnNpb24gIT09IHVuZGVmaW5lZCA/IHNxbGBBTkQgZS5wbHVnaW5fdmVyc2lvbiA9ICR7ZmlsdGVyLnZlcnNpb259YCA6IHNxbGBgO1xuICBjb25zdCBleGVjID0gKCkgPT4gd2l0aFRlbmFudFR4KCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgIGUucGx1Z2luX3B1Ymxpc2hlciBBUyBcInBsdWdpblB1Ymxpc2hlclwiLFxuICAgICAgICAgIGUucGx1Z2luX25hbWUgQVMgXCJwbHVnaW5OYW1lXCIsXG4gICAgICAgICAgZS5wbHVnaW5fdmVyc2lvbiBBUyBcInBsdWdpblZlcnNpb25cIixcbiAgICAgICAgICBDT1VOVCgqKTo6aW50IEFTIHJ1bnMsXG4gICAgICAgICAgQ09VTlQoKikgRklMVEVSIChXSEVSRSBlLnN0YXR1cyA9ICdTVUNDRUVERUQnKTo6aW50IEFTIHN1Y2NlZWRlZCxcbiAgICAgICAgICBDT1VOVCgqKSBGSUxURVIgKFdIRVJFIGUuc3RhdHVzID0gJ0ZBSUxFRCcpOjppbnQgQVMgZmFpbGVkLFxuICAgICAgICAgIFJPVU5EKENPVU5UKCopIEZJTFRFUiAoV0hFUkUgZS5zdGF0dXMgPSAnU1VDQ0VFREVEJyk6Om51bWVyaWNcbiAgICAgICAgICAgIC8gTlVMTElGKENPVU5UKCopLCAwKSAqIDEwMCwgMSk6OmZsb2F0IEFTIFwic3VjY2Vzc1BjdFwiLFxuICAgICAgICAgIFBFUkNFTlRJTEVfQ09OVCgwLjUpIFdJVEhJTiBHUk9VUCAoT1JERVIgQlkgZS5kdXJhdGlvbl9tcyk6OmludCBBUyBcInA1ME1zXCIsXG4gICAgICAgICAgUEVSQ0VOVElMRV9DT05UKDAuOTUpIFdJVEhJTiBHUk9VUCAoT1JERVIgQlkgZS5kdXJhdGlvbl9tcyk6OmludCBBUyBcInA5NU1zXCIsXG4gICAgICAgICAgTUFYKGUuY29tcGxldGVkX2F0KTo6dGV4dCBBUyBcImxhc3RSdW5cIlxuICAgICAgICBGUk9NICR7c2NoZW1hLnBpcGVsaW5lRXZlbnR9IGVcbiAgICAgICAgV0hFUkUgZS5vcmdfaWQgJHtwcmVkfSBBTkQgJHtwbHVnaW5SdW5zfVxuICAgICAgICAgIEFORCBlLmNvbXBsZXRlZF9hdCA+PSAke2Zyb219Ojp0aW1lc3RhbXB0eiBBTkQgZS5jb21wbGV0ZWRfYXQgPD0gJHt0b306OnRpbWVzdGFtcHR6XG4gICAgICAgICAgJHtuYW1lQ2xhdXNlfSAke3B1Ymxpc2hlckNsYXVzZX0gJHt2ZXJzaW9uQ2xhdXNlfVxuICAgICAgICBHUk9VUCBCWSBlLnBsdWdpbl9wdWJsaXNoZXIsIGUucGx1Z2luX25hbWUsIGUucGx1Z2luX3ZlcnNpb25cbiAgICAgICAgT1JERVIgQlkgcnVucyBERVNDXG4gICAgICBgKS50aGVuKHIgPT4gZHJpenpsZVJvd3M8UGx1Z2luUnVudGltZVN0YXRzPihyLnJvd3MpKSk7XG4gIGNvbnN0IGZpbHRlcktleSA9IGAke2ZpbHRlci5uYW1lID8/ICcnfToke2ZpbHRlci5wdWJsaXNoZXIgPT09IG51bGwgPyAnXFx1MDAwMCcgOiBmaWx0ZXIucHVibGlzaGVyID8/ICcnfToke2ZpbHRlci52ZXJzaW9uID8/ICcnfWA7XG4gIHJldHVybiBydW5SZXBvcnQoYCR7b3JnSWR9OnBsdWdpbi1ydW50aW1lOiR7ZnJvbX06JHt0b306JHtmaWx0ZXJLZXl9YCwgbXVsdGksIGV4ZWMpO1xufVxuXG4vKipcbiAqIEVjb3N5c3RlbSBhZ2dyZWdhdGUgZm9yIG9uZSBsaXN0aW5nIG92ZXIgdGhlIGxhc3QgMzAgZGF5cywgYWNyb3NzIEVWRVJZIG9yZzpcbiAqIHJ1bnMsIHN1Y2Nlc3MgcmF0ZSAoMOKAkzE7IG51bGwgd2l0aCBubyBydW5zKSBhbmQgaG93IG1hbnkgZGlzdGluY3Qgb3JncyByYW4gaXQuXG4gKiBSdW5zIHVuZGVyIHN5c3RlbSBjb250ZXh0IOKAlCB0aGUgY2FsbGVyIGlzIHRoZSBwbHVnaW4gc2VydmljZSBjb21wdXRpbmdcbiAqIGBwbHVnaW5fc3RhdHNgLCBhbmQgYGFjdGl2ZU9yZ0NvdW50MzBkYCBpcyBvbmx5IGV2ZXIgc2hvd24gYXQg4omlIDUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5SdW50aW1lQWdncmVnYXRlKHB1Ymxpc2hlcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBsdWdpblJ1bnRpbWVBZ2dyZWdhdGU+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgaXNTdXBlckFkbWluOiB0cnVlIH0sICgpID0+IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICBDT1VOVCgqKTo6aW50IEFTIFwicnVuczMwZFwiLFxuICAgICAgICAgIChDT1VOVCgqKSBGSUxURVIgKFdIRVJFIGUuc3RhdHVzID0gJ1NVQ0NFRURFRCcpOjpmbG9hdFxuICAgICAgICAgICAgLyBOVUxMSUYoQ09VTlQoKiksIDApKSBBUyBcInN1Y2Nlc3NSYXRlMzBkXCIsXG4gICAgICAgICAgQ09VTlQoRElTVElOQ1QgZS5vcmdfaWQpOjppbnQgQVMgXCJhY3RpdmVPcmdDb3VudDMwZFwiXG4gICAgICAgIEZST00gJHtzY2hlbWEucGlwZWxpbmVFdmVudH0gZVxuICAgICAgICBXSEVSRSAke3BsdWdpblJ1bnN9IEFORCAke3B1Ymxpc2hlclByZWRpY2F0ZShwdWJsaXNoZXIpfSBBTkQgZS5wbHVnaW5fbmFtZSA9ICR7bmFtZX1cbiAgICAgICAgICBBTkQgZS5jb21wbGV0ZWRfYXQgPj0gbm93KCkgLSBtYWtlX2ludGVydmFsKGRheXMgPT4gJHtQTFVHSU5fUlVOVElNRV9BR0dSRUdBVEVfREFZU30pXG4gICAgICBgKS50aGVuKHIgPT4gZHJpenpsZVJvd3M8UGx1Z2luUnVudGltZUFnZ3JlZ2F0ZT4oci5yb3dzKSkpKTtcbiAgcmV0dXJuIHJvd3NbMF0gPz8geyBydW5zMzBkOiAwLCBzdWNjZXNzUmF0ZTMwZDogbnVsbCwgYWN0aXZlT3JnQ291bnQzMGQ6IDAgfTtcbn1cblxuLyoqXG4gKiBSZXZpZXcgXCJ2ZXJpZmllZCB1c2VcIjogZGlkIGBvcmdJZGAgcnVuIGAocHVibGlzaGVyLCBuYW1lKWAgc3VjY2Vzc2Z1bGx5XG4gKiBpbiB0aGUgbGFzdCA5MCBkYXlzPyBCb3VuZGVkIGJ5IHRoZSBvcmcncyBldmVudCByZXRlbnRpb24g4oCUIGEgcnVuIG9sZGVyIHRoYW5cbiAqIHRoZSByZXRlbnRpb24gaG9yaXpvbiBoYXMgYmVlbiBzd2VwdCBhbmQgbm8gbG9uZ2VyIGNvdW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc1ZlcmlmaWVkUGx1Z2luVXNlKG9yZ0lkOiBzdHJpbmcsIHB1Ymxpc2hlcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbjogZmFsc2UgfSwgKCkgPT4gd2l0aFRlbmFudFR4KCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgICAgIFNFTEVDVCBFWElTVFMgKFxuICAgICAgICAgIFNFTEVDVCAxIEZST00gJHtzY2hlbWEucGlwZWxpbmVFdmVudH0gZVxuICAgICAgICAgIFdIRVJFIGUub3JnX2lkID0gJHtvcmdJZH0gQU5EICR7cGx1Z2luUnVuc30gQU5EIGUuc3RhdHVzID0gJ1NVQ0NFRURFRCdcbiAgICAgICAgICAgIEFORCAke3B1Ymxpc2hlclByZWRpY2F0ZShwdWJsaXNoZXIpfSBBTkQgZS5wbHVnaW5fbmFtZSA9ICR7bmFtZX1cbiAgICAgICAgICAgIEFORCBlLmNvbXBsZXRlZF9hdCA+PSBub3coKSAtIG1ha2VfaW50ZXJ2YWwoZGF5cyA9PiAke1BMVUdJTl9WRVJJRklFRF9VU0VfREFZU30pXG4gICAgICAgICkgQVMgXCJ2ZXJpZmllZFwiXG4gICAgICBgKS50aGVuKHIgPT4gZHJpenpsZVJvd3M8eyB2ZXJpZmllZDogYm9vbGVhbiB9PihyLnJvd3MpKSkpO1xuICByZXR1cm4gcm93c1swXT8udmVyaWZpZWQgPT09IHRydWU7XG59XG4iXX0=
@@ -68,4 +68,4 @@ export function report(key, orgId, orgIds, query) {
68
68
  const exec = () => withTenantTx((tx) => tx.execute(query(pred))).then((r) => resultRows(r));
69
69
  return runReport(`${orgId}:${key}`, multi, exec);
70
70
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9xdWVyeS1zY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFZLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUvRSxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUVqRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFhLEVBQUUsTUFBaUI7SUFDdkQsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLHdFQUF3RTtJQUN4RSxnREFBZ0Q7SUFDaEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEYsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ3BFLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdHQUFnRyxFQUFFO1lBQzVHLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNO1NBQzVDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3QixNQUFNLElBQUksR0FBRyxLQUFLO1FBQ2hCLENBQUMsQ0FBQyxHQUFHLENBQUEsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFBLElBQUksQ0FBQyxHQUFHO1FBQzdELENBQUMsQ0FBQyxHQUFHLENBQUEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyQixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFJLFFBQWdCLEVBQUUsS0FBYyxFQUFFLElBQXNCO0lBQ25GLE9BQU8sS0FBSztRQUNWLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDcEQsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBSSxHQUFXLEVBQUUsS0FBYSxFQUFFLE1BQTRCLEVBQUUsS0FBeUI7SUFDM0csTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsT0FBTyxTQUFTLENBQUMsR0FBRyxLQUFLLElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUZW5hbmN5IHNjb3BpbmcgYW5kIGNhY2hlL2NvbnRleHQgcG9saWN5IGZvciByZXBvcnRpbmcgcmVhZHMuXG4gKlxuICogUGxhaW4gZnVuY3Rpb25zIChubyBpbnN0YW5jZSBzdGF0ZSDigJQgb25seSB0aGUgbW9kdWxlLWxldmVsIGxvZ2dlciBhbmRcbiAqIHRpbWVzZXJpZXMgY2FjaGUpIHNvIHRoZSBwZXItZG9tYWluIHF1ZXJ5IG1vZHVsZXMgKGRvcmEudHMpIHVzZSB0aGUgaWRlbnRpY2FsXG4gKiBzY29waW5nIHJ1bGVzIGFzIFJlcG9ydGluZ1NlcnZpY2UuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsLCB0eXBlIFNRTCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IHRpbWVzZXJpZXNDYWNoZSB9IGZyb20gJy4vY2FjaGVzLmpzJztcbmltcG9ydCB7IHJlc3VsdFJvd3MgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9wZy1yZXN1bHQuanMnO1xuaW1wb3J0IHsgcnVuV2l0aFRlbmFudENvbnRleHQsIHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3JlcG9ydGluZy1zZXJ2aWNlJyk7XG5cbi8qKlxuICogQnVpbGQgdGhlIG9yZy1zY29wZSBwcmVkaWNhdGUgZm9yIGEgcmVwb3J0IHF1ZXJ5LiBXaXRoIGBvcmdJZHNgICh0aGVcbiAqIG9yZyDihpIgdGVhbSByb2xsdXAg4oCUIGEgcGFyZW50J3MgYFtzZWxmLCAuLi5kZXNjZW5kYW50c11gKSBpdCBiZWNvbWVzIGFuXG4gKiBgSU4gKC4uLilgIG92ZXIgdGhlIHN1YnRyZWU7IG90aGVyd2lzZSB0aGUgc2luZ2xlLW9yZyBgPSAkb3JnYC4gUmV0dXJucyBhXG4gKiBgbXVsdGlgIGZsYWcgc28gY2FsbGVycyBjYW4gcnVuIG11bHRpLW9yZyByZWFkcyB1bmRlciBzeXNhZG1pbiBjb250ZXh0XG4gKiAodGhlIHN1YnRyZWUgc3BhbnMgb3JncyBvdXRzaWRlIHRoZSByZXF1ZXN0J3MgUkxTIHNjb3BlKSBhbmQgc2FsdCB0aGVcbiAqIGNhY2hlIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9yZ1Njb3BlKG9yZ0lkOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdKSB7XG4gIC8vIERlZmVuc2UtaW4tZGVwdGg6IHRoZSBtdWx0aS1vcmcgcm9sbHVwIHJ1bnMgdW5kZXIgc3lzYWRtaW4gY29udGV4dCAoUkxTXG4gIC8vIE9GRiwgc2VlIHJ1blJlcG9ydCksIHNvIGBvcmdJZHNgIGlzIHRoZSBPTkxZIHRlbmFuY3kgZ2F0ZSBvbiB0aGUgcmVhZC4gVGhlXG4gIC8vIHJvdXRlIHJlc29sdmVzIGl0IGZyb20gdGhlIHBsYXRmb3JtJ3MgYXV0aG9yaXRhdGl2ZSBkZXNjZW5kYW50cyBlbmRwb2ludCBhc1xuICAvLyBgW3NlbGYsIC4uLmRlc2NlbmRhbnRzXWAsIGJ1dCB2YWxpZGF0ZSB0aGUgc3VidHJlZSBkZWZlbnNpdmVseSBoZXJlIGJlZm9yZVxuICAvLyB0aGUgYnlwYXNzOiB0aGUgcmVxdWVzdGluZyAoYW5jaG9yKSBvcmcgTVVTVCBhcHBlYXIgaW4gdGhlIHNldC4gQSBzZXQgdGhhdFxuICAvLyBvbWl0cyB0aGUgY2FsbGVyJ3Mgb3duIG9yZyBpcyBhIG1hbGZvcm1lZC9zcG9vZmVkIHJvbGx1cCDigJQgY29sbGFwc2UgdG8gdGhlXG4gIC8vIHNhZmUgc2luZ2xlLW9yZyBzY29wZSByYXRoZXIgdGhhbiByZWFkaW5nIGFuIGFyYml0cmFyeSBvcmcgdW5kZXIgc3lzYWRtaW4uXG4gIC8vIChGdWxsIGRlc2NlbmRhbnQtbWVtYmVyc2hpcCB2YWxpZGF0aW9uIG5lZWRzIHRoZSBvcmcgdHJlZSwgd2hpY2ggdGhpc1xuICAvLyBzZXJ2aWNlIGRvZXMgbm90IGhvbGQg4oCUIHNlZSB0aGUgcmVwb3J0IEZMQUcuKVxuICBjb25zdCBhbmNob3IgPSBvcmdJZC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwcm92aWRlZCA9IChvcmdJZHMgPz8gW10pLmZpbHRlcigoaWQpID0+IHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgJiYgaWQubGVuZ3RoID4gMCk7XG4gIGNvbnN0IGFuY2hvcmVkID0gcHJvdmlkZWQuc29tZSgoaWQpID0+IGlkLnRvTG93ZXJDYXNlKCkgPT09IGFuY2hvcik7XG4gIGlmIChwcm92aWRlZC5sZW5ndGggPiAwICYmICFhbmNob3JlZCkge1xuICAgIGxvZ2dlci53YXJuKCdSZXBvcnRpbmcgcm9sbHVwIHJlamVjdGVkOiByZXF1ZXN0aW5nIG9yZyBhYnNlbnQgZnJvbSByZXNvbHZlZCBzdWJ0cmVlOyB1c2luZyBzaW5nbGUtb3JnIHNjb3BlJywge1xuICAgICAgb3JnSWQ6IGFuY2hvciwgc3VidHJlZVNpemU6IHByb3ZpZGVkLmxlbmd0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBpZHMgPSBwcm92aWRlZC5sZW5ndGggPiAwICYmIGFuY2hvcmVkID8gcHJvdmlkZWQgOiBbb3JnSWRdO1xuICBjb25zdCBtdWx0aSA9IGlkcy5sZW5ndGggPiAxO1xuICBjb25zdCBwcmVkID0gbXVsdGlcbiAgICA/IHNxbGBJTiAoJHtzcWwuam9pbihpZHMubWFwKChpZCkgPT4gc3FsYCR7aWR9YCksIHNxbGAsIGApfSlgXG4gICAgOiBzcWxgPSAke2lkc1swXX1gO1xuICByZXR1cm4geyBwcmVkLCBtdWx0aSB9O1xufVxuXG4vKipcbiAqIFJ1biBhIHJlcG9ydCByZWFkLiBTaW5nbGUtb3JnIHJlYWRzIHVzZSB0aGUgcGVyLW9yZyBjYWNoZSAoaW52YWxpZGF0ZWQgb25cbiAqIHRoYXQgb3JnJ3MgZXZlbnQgaW5nZXN0KS4gUm9sbHVwIChtdWx0aS1vcmcpIHJlYWRzICoqYnlwYXNzIHRoZSBjYWNoZSoqIGFuZFxuICogcnVuIHVuZGVyIHN5c2FkbWluIGNvbnRleHQ6IHRoZXkncmUgYWRtaW4tb25seSBhbmQgbG93ZXItZnJlcXVlbmN5LCBhbmQgYVxuICogY2hpbGQgb3JnJ3MgZXZlbnQgaW5nZXN0IGNhbid0IGludmFsaWRhdGUgYSBwYXJlbnQncyByb2xsdXAgZW50cnkgKHJlcG9ydGluZ1xuICogaGFzIG5vIG9yZyB0cmVlKSwgc28gY2FjaGluZyB0aGVtIHdvdWxkIHNlcnZlIHN0YWxlIGFnZ3JlZ2F0ZXMuIEFsd2F5cyBmcmVzaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blJlcG9ydDxUPihjYWNoZUtleTogc3RyaW5nLCBtdWx0aTogYm9vbGVhbiwgZXhlYzogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbXVsdGlcbiAgICA/IHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgaXNTdXBlckFkbWluOiB0cnVlIH0sIGV4ZWMpXG4gICAgOiB0aW1lc2VyaWVzQ2FjaGUuZ2V0T3JTZXQoY2FjaGVLZXksIGV4ZWMpO1xufVxuXG4vKipcbiAqIE9uZSBvcmctc2NvcGVkIHJlcG9ydCByZWFkOiBidWlsZCB0aGUgU1FMIGZyb20gdGhlIG9yZy1zY29wZSBwcmVkaWNhdGUsIHJ1biBpdFxuICogaW4gdGhlIHRlbmFudCB0cmFuc2FjdGlvbiBhbmQgcmV0dXJuIHRoZSByb3dzLCB0aHJvdWdoIHtAbGluayBydW5SZXBvcnR9J3NcbiAqIGNhY2hlL3JvbGx1cCBwb2xpY3kuIGBrZXlgIGlzIHRoZSBjYWNoZSBrZXkgYmVsb3cgdGhlIG9yZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydDxUPihrZXk6IHN0cmluZywgb3JnSWQ6IHN0cmluZywgb3JnSWRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgcXVlcnk6IChwcmVkOiBTUUwpID0+IFNRTCk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHsgcHJlZCwgbXVsdGkgfSA9IG9yZ1Njb3BlKG9yZ0lkLCBvcmdJZHMpO1xuICBjb25zdCBleGVjID0gKCkgPT4gd2l0aFRlbmFudFR4KCh0eCkgPT4gdHguZXhlY3V0ZShxdWVyeShwcmVkKSkpLnRoZW4oKHIpID0+IHJlc3VsdFJvd3M8VD4ocikpO1xuICByZXR1cm4gcnVuUmVwb3J0KGAke29yZ0lkfToke2tleX1gLCBtdWx0aSwgZXhlYyk7XG59XG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2NvcGUuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL3F1ZXJ5LXNjb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRS9FLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRWpEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWEsRUFBRSxNQUFpQjtJQUN2RCwwRUFBMEU7SUFDMUUsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0Usd0VBQXdFO0lBQ3hFLGdEQUFnRDtJQUNoRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDcEUsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0dBQWdHLEVBQUU7WUFDNUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLE1BQU07U0FDNUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLEtBQUs7UUFDaEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFBLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUEsSUFBSSxDQUFDLEdBQUc7UUFDN0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3JCLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUksUUFBZ0IsRUFBRSxLQUFjLEVBQUUsSUFBc0I7SUFDbkYsT0FBTyxLQUFLO1FBQ1YsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQztRQUNwRCxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFJLEdBQVcsRUFBRSxLQUFhLEVBQUUsTUFBNEIsRUFBRSxLQUF5QjtJQUMzRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixPQUFPLFNBQVMsQ0FBQyxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRlbmFuY3kgc2NvcGluZyBhbmQgY2FjaGUvY29udGV4dCBwb2xpY3kgZm9yIHJlcG9ydGluZyByZWFkcy5cbiAqXG4gKiBQbGFpbiBmdW5jdGlvbnMgKG5vIGluc3RhbmNlIHN0YXRlIOKAlCBvbmx5IHRoZSBtb2R1bGUtbGV2ZWwgbG9nZ2VyIGFuZFxuICogdGltZXNlcmllcyBjYWNoZSkgc28gdGhlIHBlci1kb21haW4gcXVlcnkgbW9kdWxlcyAoZG9yYS50cykgdXNlIHRoZSBpZGVudGljYWxcbiAqIHNjb3BpbmcgcnVsZXMgYXMgUmVwb3J0aW5nU2VydmljZS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwsIHR5cGUgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgdGltZXNlcmllc0NhY2hlIH0gZnJvbSAnLi9jYWNoZXMuanMnO1xuaW1wb3J0IHsgcmVzdWx0Um93cyB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3BnLXJlc3VsdC5qcyc7XG5pbXBvcnQgeyBydW5XaXRoVGVuYW50Q29udGV4dCwgd2l0aFRlbmFudFR4IH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvdGVuYW5jeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncmVwb3J0aW5nLXNlcnZpY2UnKTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgb3JnLXNjb3BlIHByZWRpY2F0ZSBmb3IgYSByZXBvcnQgcXVlcnkuIFdpdGggYG9yZ0lkc2AgKHRoZVxuICogb3JnIOKGkiB0ZWFtIHJvbGx1cCDigJQgYSBwYXJlbnQncyBgW3NlbGYsIC4uLmRlc2NlbmRhbnRzXWApIGl0IGJlY29tZXMgYW5cbiAqIGBJTiAoLi4uKWAgb3ZlciB0aGUgc3VidHJlZTsgb3RoZXJ3aXNlIHRoZSBzaW5nbGUtb3JnIGA9ICRvcmdgLiBSZXR1cm5zIGFcbiAqIGBtdWx0aWAgZmxhZyBzbyBjYWxsZXJzIGNhbiBydW4gbXVsdGktb3JnIHJlYWRzIHVuZGVyIHN5c2FkbWluIGNvbnRleHRcbiAqICh0aGUgc3VidHJlZSBzcGFucyBvcmdzIG91dHNpZGUgdGhlIHJlcXVlc3QncyBSTFMgc2NvcGUpIGFuZCBzYWx0IHRoZVxuICogY2FjaGUga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JnU2NvcGUob3JnSWQ6IHN0cmluZywgb3JnSWRzPzogc3RyaW5nW10pIHtcbiAgLy8gRGVmZW5zZS1pbi1kZXB0aDogdGhlIG11bHRpLW9yZyByb2xsdXAgcnVucyB1bmRlciBzeXNhZG1pbiBjb250ZXh0IChSTFNcbiAgLy8gT0ZGLCBzZWUgcnVuUmVwb3J0KSwgc28gYG9yZ0lkc2AgaXMgdGhlIE9OTFkgdGVuYW5jeSBnYXRlIG9uIHRoZSByZWFkLiBUaGVcbiAgLy8gcm91dGUgcmVzb2x2ZXMgaXQgZnJvbSB0aGUgcGxhdGZvcm0ncyBhdXRob3JpdGF0aXZlIGRlc2NlbmRhbnRzIGVuZHBvaW50IGFzXG4gIC8vIGBbc2VsZiwgLi4uZGVzY2VuZGFudHNdYCwgYnV0IHZhbGlkYXRlIHRoZSBzdWJ0cmVlIGRlZmVuc2l2ZWx5IGhlcmUgYmVmb3JlXG4gIC8vIHRoZSBieXBhc3M6IHRoZSByZXF1ZXN0aW5nIChhbmNob3IpIG9yZyBNVVNUIGFwcGVhciBpbiB0aGUgc2V0LiBBIHNldCB0aGF0XG4gIC8vIG9taXRzIHRoZSBjYWxsZXIncyBvd24gb3JnIGlzIGEgbWFsZm9ybWVkL3Nwb29mZWQgcm9sbHVwIOKAlCBjb2xsYXBzZSB0byB0aGVcbiAgLy8gc2FmZSBzaW5nbGUtb3JnIHNjb3BlIHJhdGhlciB0aGFuIHJlYWRpbmcgYW4gYXJiaXRyYXJ5IG9yZyB1bmRlciBzeXNhZG1pbi5cbiAgLy8gKEZ1bGwgZGVzY2VuZGFudC1tZW1iZXJzaGlwIHZhbGlkYXRpb24gbmVlZHMgdGhlIG9yZyB0cmVlLCB3aGljaCB0aGlzXG4gIC8vIHNlcnZpY2UgZG9lcyBub3QgaG9sZCDigJQgc2VlIHRoZSByZXBvcnQgRkxBRy4pXG4gIGNvbnN0IGFuY2hvciA9IG9yZ0lkLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHByb3ZpZGVkID0gKG9yZ0lkcyA/PyBbXSkuZmlsdGVyKChpZCkgPT4gdHlwZW9mIGlkID09PSAnc3RyaW5nJyAmJiBpZC5sZW5ndGggPiAwKTtcbiAgY29uc3QgYW5jaG9yZWQgPSBwcm92aWRlZC5zb21lKChpZCkgPT4gaWQudG9Mb3dlckNhc2UoKSA9PT0gYW5jaG9yKTtcbiAgaWYgKHByb3ZpZGVkLmxlbmd0aCA+IDAgJiYgIWFuY2hvcmVkKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1JlcG9ydGluZyByb2xsdXAgcmVqZWN0ZWQ6IHJlcXVlc3Rpbmcgb3JnIGFic2VudCBmcm9tIHJlc29sdmVkIHN1YnRyZWU7IHVzaW5nIHNpbmdsZS1vcmcgc2NvcGUnLCB7XG4gICAgICBvcmdJZDogYW5jaG9yLCBzdWJ0cmVlU2l6ZTogcHJvdmlkZWQubGVuZ3RoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGlkcyA9IHByb3ZpZGVkLmxlbmd0aCA+IDAgJiYgYW5jaG9yZWQgPyBwcm92aWRlZCA6IFtvcmdJZF07XG4gIGNvbnN0IG11bHRpID0gaWRzLmxlbmd0aCA+IDE7XG4gIGNvbnN0IHByZWQgPSBtdWx0aVxuICAgID8gc3FsYElOICgke3NxbC5qb2luKGlkcy5tYXAoKGlkKSA9PiBzcWxgJHtpZH1gKSwgc3FsYCwgYCl9KWBcbiAgICA6IHNxbGA9ICR7aWRzWzBdfWA7XG4gIHJldHVybiB7IHByZWQsIG11bHRpIH07XG59XG5cbi8qKlxuICogUnVuIGEgcmVwb3J0IHJlYWQuIFNpbmdsZS1vcmcgcmVhZHMgdXNlIHRoZSBwZXItb3JnIGNhY2hlIChpbnZhbGlkYXRlZCBvblxuICogdGhhdCBvcmcncyBldmVudCBpbmdlc3QpLiBSb2xsdXAgKG11bHRpLW9yZykgcmVhZHMgKipieXBhc3MgdGhlIGNhY2hlKiogYW5kXG4gKiBydW4gdW5kZXIgc3lzYWRtaW4gY29udGV4dDogdGhleSdyZSBhZG1pbi1vbmx5IGFuZCBsb3dlci1mcmVxdWVuY3ksIGFuZCBhXG4gKiBjaGlsZCBvcmcncyBldmVudCBpbmdlc3QgY2FuJ3QgaW52YWxpZGF0ZSBhIHBhcmVudCdzIHJvbGx1cCBlbnRyeSAocmVwb3J0aW5nXG4gKiBoYXMgbm8gb3JnIHRyZWUpLCBzbyBjYWNoaW5nIHRoZW0gd291bGQgc2VydmUgc3RhbGUgYWdncmVnYXRlcy4gQWx3YXlzIGZyZXNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuUmVwb3J0PFQ+KGNhY2hlS2V5OiBzdHJpbmcsIG11bHRpOiBib29sZWFuLCBleGVjOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBtdWx0aVxuICAgID8gcnVuV2l0aFRlbmFudENvbnRleHQoeyBpc1N1cGVyQWRtaW46IHRydWUgfSwgZXhlYylcbiAgICA6IHRpbWVzZXJpZXNDYWNoZS5nZXRPclNldChjYWNoZUtleSwgZXhlYyk7XG59XG5cbi8qKlxuICogT25lIG9yZy1zY29wZWQgcmVwb3J0IHJlYWQ6IGJ1aWxkIHRoZSBTUUwgZnJvbSB0aGUgb3JnLXNjb3BlIHByZWRpY2F0ZSwgcnVuIGl0XG4gKiBpbiB0aGUgdGVuYW50IHRyYW5zYWN0aW9uIGFuZCByZXR1cm4gdGhlIHJvd3MsIHRocm91Z2gge0BsaW5rIHJ1blJlcG9ydH0nc1xuICogY2FjaGUvcm9sbHVwIHBvbGljeS4gYGtleWAgaXMgdGhlIGNhY2hlIGtleSBiZWxvdyB0aGUgb3JnLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0PFQ+KGtleTogc3RyaW5nLCBvcmdJZDogc3RyaW5nLCBvcmdJZHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLCBxdWVyeTogKHByZWQ6IFNRTCkgPT4gU1FMKTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgeyBwcmVkLCBtdWx0aSB9ID0gb3JnU2NvcGUob3JnSWQsIG9yZ0lkcyk7XG4gIGNvbnN0IGV4ZWMgPSAoKSA9PiB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5leGVjdXRlKHF1ZXJ5KHByZWQpKSkudGhlbigocikgPT4gcmVzdWx0Um93czxUPihyKSk7XG4gIHJldHVybiBydW5SZXBvcnQoYCR7b3JnSWR9OiR7a2V5fWAsIG11bHRpLCBleGVjKTtcbn1cbiJdfQ==