aws-cdk 2.12.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +3 -2
  2. package/bin/cdk.d.ts +1 -3
  3. package/bin/cdk.js +3 -511
  4. package/build-info.json +2 -2
  5. package/lib/api/aws-auth/sdk.d.ts +2 -0
  6. package/lib/api/aws-auth/sdk.js +4 -1
  7. package/lib/api/cxapp/cloud-executable.js +12 -8
  8. package/lib/api/evaluate-cloudformation-template.js +34 -2
  9. package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -0
  10. package/lib/api/hotswap/appsync-mapping-templates.js +69 -0
  11. package/lib/api/hotswap-deployments.js +3 -1
  12. package/lib/cli.d.ts +3 -0
  13. package/lib/cli.js +545 -0
  14. package/lib/commands/context.d.ts +0 -16
  15. package/lib/commands/context.js +2 -20
  16. package/lib/commands/docs.d.ts +0 -13
  17. package/lib/commands/docs.js +2 -19
  18. package/lib/commands/doctor.d.ts +0 -5
  19. package/lib/commands/doctor.js +2 -9
  20. package/lib/index.d.ts +3 -0
  21. package/lib/index.js +17 -0
  22. package/lib/init-templates/v1/app/javascript/README.md +5 -5
  23. package/lib/init-templates/v1/app/typescript/README.md +7 -7
  24. package/lib/init-templates/v1/lib/typescript/README.template.md +4 -4
  25. package/lib/init-templates/v1/sample-app/javascript/README.template.md +7 -6
  26. package/lib/init-templates/v1/sample-app/typescript/README.template.md +9 -9
  27. package/lib/init-templates/v2/app/javascript/README.md +5 -5
  28. package/lib/init-templates/v2/app/typescript/README.md +7 -7
  29. package/lib/init-templates/v2/lib/typescript/README.template.md +4 -4
  30. package/lib/init-templates/v2/sample-app/javascript/README.template.md +5 -5
  31. package/lib/init-templates/v2/sample-app/typescript/README.template.md +7 -7
  32. package/npm-shrinkwrap.json +75 -31
  33. package/package.json +11 -11
  34. package/test/api/cloud-executable.test.js +57 -32
  35. package/test/api/hotswap/appsync-mapping-templates-hotswap-deployments.test.d.ts +1 -0
  36. package/test/api/hotswap/appsync-mapping-templates-hotswap-deployments.test.js +336 -0
  37. package/test/api/hotswap/hotswap-test-setup.d.ts +1 -0
  38. package/test/api/hotswap/hotswap-test-setup.js +4 -1
  39. package/test/api/hotswap/state-machine-hotswap-deployments.test.js +72 -1
  40. package/test/cdk-docs.test.js +4 -7
  41. package/test/cdk-doctor.test.js +3 -4
  42. package/test/util/mock-sdk.d.ts +6 -0
  43. package/test/util/mock-sdk.js +11 -1
@@ -443,4 +443,75 @@ test("will not perform a hotswap deployment if it doesn't know how to handle a s
443
443
  // THEN
444
444
  await expect(() => hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact)).rejects.toThrow("We don't support the 'UnknownAttribute' attribute of the 'AWS::S3::Bucket' resource. This is a CDK limitation. Please report it at https://github.com/aws/aws-cdk/issues/new/choose");
445
445
  });
446
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtbWFjaGluZS1ob3Rzd2FwLWRlcGxveW1lbnRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGF0ZS1tYWNoaW5lLWhvdHN3YXAtZGVwbG95bWVudHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDhDQUE4QztBQUU5QyxJQUFJLDJCQUFrSSxDQUFDO0FBQ3ZJLElBQUksc0JBQW9ELENBQUM7QUFFekQsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ25ELDJCQUEyQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4QyxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ2hGLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGlFQUFpRSxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ2pGLFFBQVE7SUFDUixNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRCxRQUFRLEVBQUU7WUFDUixTQUFTLEVBQUU7Z0JBQ1QsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxrQ0FBa0M7aUJBQ3pDO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU5RixPQUFPO0lBQ1AsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsd0hBQXdILEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDeEksUUFBUTtJQUNSLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztRQUMvQixTQUFTLEVBQUU7WUFDVCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLGtDQUFrQztnQkFDeEMsVUFB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QUM5RCxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMscUxBQXFMLENBQUMsQ0FBQztBQUMzTSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0ZXBGdW5jdGlvbnMgfSBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCAqIGFzIHNldHVwIGZyb20gJy4vaG90c3dhcC10ZXN0LXNldHVwJztcblxubGV0IG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbjogKHBhcmFtczogU3RlcEZ1bmN0aW9ucy5UeXBlcy5VcGRhdGVTdGF0ZU1hY2hpbmVJbnB1dCkgPT4gU3RlcEZ1bmN0aW9ucy5UeXBlcy5VcGRhdGVTdGF0ZU1hY2hpbmVPdXRwdXQ7XG5sZXQgaG90c3dhcE1vY2tTZGtQcm92aWRlcjogc2V0dXAuSG90c3dhcE1vY2tTZGtQcm92aWRlcjtcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIgPSBzZXR1cC5zZXR1cEhvdHN3YXBUZXN0cygpO1xuICBtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24gPSBqZXN0LmZuKCk7XG4gIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIuc2V0VXBkYXRlU3RhdGVNYWNoaW5lTW9jayhtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24pO1xufSk7XG5cbnRlc3QoJ3JldHVybnMgdW5kZWZpbmVkIHdoZW4gYSBuZXcgU3RhdGVNYWNoaW5lIGlzIGFkZGVkIHRvIHRoZSBTdGFjaycsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBNYWNoaW5lOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbn0pO1xuXG50ZXN0KCdjYWxscyB0aGUgdXBkYXRlU3RhdGVNYWNoaW5lKCkgQVBJIHdoZW4gaXQgcmVjZWl2ZXMgb25seSBhIGRlZmluaXRpb25TdHJpbmcgY2hhbmdlIHdpdGhvdXQgRm46OkpvaW4gaW4gYSBzdGF0ZSBtYWNoaW5lJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBNYWNoaW5lOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiAneyBQcm9wOiBcIm9sZC12YWx1ZVwiIH0nLFxuICAgICAgICAgIFN0YXRlTWFjaGluZU5hbWU6ICdteS1tYWNoaW5lJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgTWFjaGluZToge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgRGVmaW5pdGlvblN0cmluZzogJ3sgUHJvcDogXCJuZXctdmFsdWVcIiB9JyxcbiAgICAgICAgICAgIFN0YXRlTWFjaGluZU5hbWU6ICdteS1tYWNoaW5lJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgIGRlZmluaXRpb246ICd7IFByb3A6IFwibmV3LXZhbHVlXCIgfScsXG4gICAgc3RhdGVNYWNoaW5lQXJuOiAnYXJuOmF3czpzdGF0ZXM6aGVyZToxMjM0NTY3ODkwMTI6c3RhdGVNYWNoaW5lOm15LW1hY2hpbmUnLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdjYWxscyB0aGUgdXBkYXRlU3RhdGVNYWNoaW5lKCkgQVBJIHdoZW4gaXQgcmVjZWl2ZXMgb25seSBhIGRlZmluaXRpb25TdHJpbmcgY2hhbmdlIHdpdGggRm46OkpvaW4gaW4gYSBzdGF0ZSBtYWNoaW5lJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBNYWNoaW5lOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICdcXG4nLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ3snLFxuICAgICAgICAgICAgICAgICcgIFwiU3RhcnRBdFwiIDogXCJTdWNjZXNzU3RhdGVcIicsXG4gICAgICAgICAgICAgICAgJyAgXCJTdGF0ZXNcIiA6IHsnLFxuICAgICAgICAgICAgICAgICcgICAgXCJTdWNjZXNzU3RhdGVcIjogeycsXG4gICAgICAgICAgICAgICAgJyAgICAgIFwiVHlwZVwiOiBcIlBhc3NcIicsXG4gICAgICAgICAgICAgICAgJyAgICAgIFwiUmVzdWx0XCI6IFwiU3VjY2Vzc1wiJyxcbiAgICAgICAgICAgICAgICAnICAgICAgXCJFbmRcIjogdHJ1ZScsXG4gICAgICAgICAgICAgICAgJyAgICB9JyxcbiAgICAgICAgICAgICAgICAnICB9JyxcbiAgICAgICAgICAgICAgICAnfScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgU3RhdGVNYWNoaW5lTmFtZTogJ215LW1hY2hpbmUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBNYWNoaW5lOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7XG4gICAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgICAnXFxuJyxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAneycsXG4gICAgICAgICAgICAgICAgICAnICBcIlN0YXJ0QXRcIjogXCJTdWNjZXNzU3RhdGVcIiwnLFxuICAgICAgICAgICAgICAgICAgJyAgXCJTdGF0ZXNcIjogeycsXG4gICAgICAgICAgICAgICAgICAnICAgIFwiU3VjY2Vzc1N0YXRlXCI6IHsnLFxuICAgICAgICAgICAgICAgICAgJyAgICAgIFwiVHlwZVwiOiBcIlN1Y2NlZWRcIicsXG4gICAgICAgICAgICAgICAgICAnICAgIH0nLFxuICAgICAgICAgICAgICAgICAgJyAgfScsXG4gICAgICAgICAgICAgICAgICAnfScsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBTdGF0ZU1hY2hpbmVOYW1lOiAnbXktbWFjaGluZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBkZWZpbml0aW9uOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBTdGFydEF0OiAnU3VjY2Vzc1N0YXRlJyxcbiAgICAgIFN0YXRlczoge1xuICAgICAgICBTdWNjZXNzU3RhdGU6IHtcbiAgICAgICAgICBUeXBlOiAnU3VjY2VlZCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sIG51bGwsIDIpLFxuICAgIHN0YXRlTWFjaGluZUFybjogJ2Fybjphd3M6c3RhdGVzOmhlcmU6MTIzNDU2Nzg5MDEyOnN0YXRlTWFjaGluZTpteS1tYWNoaW5lJyxcbiAgfSk7XG59KTtcblxudGVzdCgnY2FsbHMgdGhlIHVwZGF0ZVN0YXRlTWFjaGluZSgpIEFQSSB3aGVuIGl0IHJlY2VpdmVzIGEgY2hhbmdlIHRvIHRoZSBkZWZpbml0aW9uU3RyaW5nIGluIGEgc3RhdGUgbWFjaGluZSB0aGF0IGhhcyBubyBuYW1lJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBNYWNoaW5lOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiAneyBcIlByb3BcIiA6IFwib2xkLXZhbHVlXCIgfScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6ICd7IFwiUHJvcFwiIDogXCJuZXctdmFsdWVcIiB9JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIHNldHVwLnB1c2hTdGFja1Jlc291cmNlU3VtbWFyaWVzKHNldHVwLnN0YWNrU3VtbWFyeU9mKCdNYWNoaW5lJywgJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJywgJ2Fybjphd3M6c3RhdGVzOmhlcmU6MTIzNDU2Nzg5MDEyOnN0YXRlTWFjaGluZTpteS1tYWNoaW5lJykpO1xuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBkZWZpbml0aW9uOiAneyBcIlByb3BcIiA6IFwibmV3LXZhbHVlXCIgfScsXG4gICAgc3RhdGVNYWNoaW5lQXJuOiAnYXJuOmF3czpzdGF0ZXM6aGVyZToxMjM0NTY3ODkwMTI6c3RhdGVNYWNoaW5lOm15LW1hY2hpbmUnLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdkb2VzIG5vdCBjYWxsIHRoZSB1cGRhdGVTdGF0ZU1hY2hpbmUoKSBBUEkgd2hlbiBpdCByZWNlaXZlcyBhIGNoYW5nZSB0byBhIHByb3BlcnR5IHRoYXQgaXMgbm90IHRoZSBkZWZpbml0aW9uU3RyaW5nIGluIGEgc3RhdGUgbWFjaGluZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgTWFjaGluZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRGVmaW5pdGlvblN0cmluZzogJ3sgXCJQcm9wXCIgOiBcIm9sZC12YWx1ZVwiIH0nLFxuICAgICAgICAgIExvZ2dpbmdDb25maWd1cmF0aW9uOiB7IC8vIG5vbi1kZWZpbml0aW9uU3RyaW5nIHByb3BlcnR5XG4gICAgICAgICAgICBJbmNsdWRlRXhlY3V0aW9uRGF0YTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBNYWNoaW5lOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiAneyBcIlByb3BcIiA6IFwibmV3LXZhbHVlXCIgfScsXG4gICAgICAgICAgICBMb2dnaW5nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICBJbmNsdWRlRXhlY3V0aW9uRGF0YTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0KS50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnZG9lcyBub3QgY2FsbCB0aGUgdXBkYXRlU3RhdGVNYWNoaW5lKCkgQVBJIHdoZW4gYSByZXNvdXJjZSBoYXMgYSBEZWZpbml0aW9uU3RyaW5nIHByb3BlcnR5IGJ1dCBpcyBub3QgYW4gQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUgaXMgY2hhbmdlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgTWFjaGluZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpOb3RTdGVwRnVuY3Rpb25zOjpOb3RTdGF0ZU1hY2hpbmUnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRGVmaW5pdGlvblN0cmluZzogJ3sgUHJvcDogXCJvbGQtdmFsdWVcIiB9JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgTWFjaGluZToge1xuICAgICAgICAgIFR5cGU6ICdBV1M6Ok5vdFN0ZXBGdW5jdGlvbnM6Ok5vdFN0YXRlTWFjaGluZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgRGVmaW5pdGlvblN0cmluZzogJ3sgUHJvcDogXCJuZXctdmFsdWVcIiB9JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2NhbiBjb3JyZWN0bHkgaG90c3dhcCBvbGQgc3R5bGUgc3ludGggY2hhbmdlcycsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFBhcmFtZXRlcnM6IHsgQXNzZXRQYXJhbTE6IHsgVHlwZTogJ1N0cmluZycgfSB9LFxuICAgIFJlc291cmNlczoge1xuICAgICAgTWFjaGluZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRGVmaW5pdGlvblN0cmluZzogeyBSZWY6ICdBc3NldFBhcmFtMScgfSxcbiAgICAgICAgICBTdGF0ZU1hY2hpbmVOYW1lOiAnbWFjaGluZS1uYW1lJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBQYXJhbWV0ZXJzOiB7IEFzc2V0UGFyYW0yOiB7IFR5cGU6IFN0cmluZyB9IH0sXG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgTWFjaGluZToge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgRGVmaW5pdGlvblN0cmluZzogeyBSZWY6ICdBc3NldFBhcmFtMicgfSxcbiAgICAgICAgICAgIFN0YXRlTWFjaGluZU5hbWU6ICdtYWNoaW5lLW5hbWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgc2V0dXAucHVzaFN0YWNrUmVzb3VyY2VTdW1tYXJpZXMoc2V0dXAuc3RhY2tTdW1tYXJ5T2YoJ01hY2hpbmUnLCAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLCAnYXJuOmF3czpzdGF0ZXM6aGVyZToxMjM0NTY3ODkwMTI6c3RhdGVNYWNoaW5lOm15LW1hY2hpbmUnKSk7XG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0LCB7IEFzc2V0UGFyYW0yOiAnYXNzZXQtcGFyYW0tMicgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBkZWZpbml0aW9uOiAnYXNzZXQtcGFyYW0tMicsXG4gICAgc3RhdGVNYWNoaW5lQXJuOiAnYXJuOmF3czpzdGF0ZXM6aGVyZToxMjM0NTY3ODkwMTI6c3RhdGVNYWNoaW5lOm1hY2hpbmUtbmFtZScsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ2NhbGxzIHRoZSB1cGRhdGVTdGF0ZU1hY2hpbmUoKSBBUEkgd2hlbiBpdCByZWNlaXZlcyBhIGNoYW5nZSB0byB0aGUgZGVmaW5pdGlvblN0cmluZyB0aGF0IHVzZXMgQXR0cmlidXRlcyBpbiBhIHN0YXRlIG1hY2hpbmUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEZ1bmM6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICB9LFxuICAgICAgTWFjaGluZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRGVmaW5pdGlvblN0cmluZzoge1xuICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAnXFxuJyxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICd7JyxcbiAgICAgICAgICAgICAgICAnICBcIlN0YXJ0QXRcIiA6IFwiU3VjY2Vzc1N0YXRlXCInLFxuICAgICAgICAgICAgICAgICcgIFwiU3RhdGVzXCIgOiB7JyxcbiAgICAgICAgICAgICAgICAnICAgIFwiU3VjY2Vzc1N0YXRlXCI6IHsnLFxuICAgICAgICAgICAgICAgICcgICAgICBcIlR5cGVcIjogXCJTdWNjZWVkXCInLFxuICAgICAgICAgICAgICAgICcgICAgfScsXG4gICAgICAgICAgICAgICAgJyAgfScsXG4gICAgICAgICAgICAgICAgJ30nLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFN0YXRlTWFjaGluZU5hbWU6ICdteS1tYWNoaW5lJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgRnVuYzoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICB9LFxuICAgICAgICBNYWNoaW5lOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7XG4gICAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAnXCJSZXNvdXJjZVwiOiAnLFxuICAgICAgICAgICAgICAgICAgeyAnRm46OkdldEF0dCc6IFsnRnVuYycsICdBcm4nXSB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgU3RhdGVNYWNoaW5lTmFtZTogJ215LW1hY2hpbmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgc2V0dXAucHVzaFN0YWNrUmVzb3VyY2VTdW1tYXJpZXMoXG4gICAgc2V0dXAuc3RhY2tTdW1tYXJ5T2YoJ01hY2hpbmUnLCAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLCAnYXJuOmF3czpzdGF0ZXM6aGVyZToxMjM0NTY3ODkwMTI6c3RhdGVNYWNoaW5lOm15LW1hY2hpbmUnKSxcbiAgICBzZXR1cC5zdGFja1N1bW1hcnlPZignRnVuYycsICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCAnbXktZnVuYycpLFxuICApO1xuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBkZWZpbml0aW9uOiAnXCJSZXNvdXJjZVwiOiBhcm46YXdzOmxhbWJkYTpoZXJlOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjpteS1mdW5jJyxcbiAgICBzdGF0ZU1hY2hpbmVBcm46ICdhcm46YXdzOnN0YXRlczpoZXJlOjEyMzQ1Njc4OTAxMjpzdGF0ZU1hY2hpbmU6bXktbWFjaGluZScsXG4gIH0pO1xufSk7XG5cbnRlc3QoXCJ3aWxsIG5vdCBwZXJmb3JtIGEgaG90c3dhcCBkZXBsb3ltZW50IGlmIGl0IGNhbm5vdCBmaW5kIGEgUmVmIHRhcmdldCAob3V0c2lkZSB0aGUgc3RhdGUgbWFjaGluZSdzIG5hbWUpXCIsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFBhcmFtZXRlcnM6IHtcbiAgICAgIFBhcmFtMTogeyBUeXBlOiAnU3RyaW5nJyB9LFxuICAgIH0sXG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBNYWNoaW5lOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ3sgUHJvcDogXCJvbGQtdmFsdWVcIiB9LCAnLFxuICAgICAgICAgICAgICAgICd7IFwiUGFyYW1cIiA6ICcsXG4gICAgICAgICAgICAgICAgeyAnRm46OlN1Yic6ICcke1BhcmFtMX0nIH0sXG4gICAgICAgICAgICAgICAgJyB9JyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIHNldHVwLnB1c2hTdGFja1Jlc291cmNlU3VtbWFyaWVzKHNldHVwLnN0YWNrU3VtbWFyeU9mKCdNYWNoaW5lJywgJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJywgJ215LW1hY2hpbmUnKSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgIFBhcmFtMTogeyBUeXBlOiAnU3RyaW5nJyB9LFxuICAgICAgfSxcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBNYWNoaW5lOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7XG4gICAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAneyBQcm9wOiBcIm5ldy12YWx1ZVwiIH0sICcsXG4gICAgICAgICAgICAgICAgICAneyBcIlBhcmFtXCIgOiAnLFxuICAgICAgICAgICAgICAgICAgeyAnRm46OlN1Yic6ICcke1BhcmFtMX0nIH0sXG4gICAgICAgICAgICAgICAgICAnIH0nLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgYXdhaXQgZXhwZWN0KCgpID0+XG4gICAgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KSxcbiAgKS5yZWplY3RzLnRvVGhyb3coL1BhcmFtZXRlciBvciByZXNvdXJjZSAnUGFyYW0xJyBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGV2YWx1YXRpb24vKTtcbn0pO1xuXG50ZXN0KFwid2lsbCBub3QgcGVyZm9ybSBhIGhvdHN3YXAgZGVwbG95bWVudCBpZiBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGhhbmRsZSBhIHNwZWNpZmljIGF0dHJpYnV0ZSAob3V0c2lkZSB0aGUgc3RhdGUgbWFjaGluZXMncyBuYW1lKVwiLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEJ1Y2tldDoge1xuICAgICAgICBUeXBlOiAnQVdTOjpTMzo6QnVja2V0JyxcbiAgICAgIH0sXG4gICAgICBNYWNoaW5lOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ3sgUHJvcDogXCJvbGQtdmFsdWVcIiB9LCAnLFxuICAgICAgICAgICAgICAgICd7IFwiUzNCdWNrZXRcIiA6ICcsXG4gICAgICAgICAgICAgICAgeyAnRm46OkdldEF0dCc6IFsnQnVja2V0JywgJ1Vua25vd25BdHRyaWJ1dGUnXSB9LFxuICAgICAgICAgICAgICAgICcgfScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgU3RhdGVNYWNoaW5lTmFtZTogJ215LW1hY2hpbmUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgc2V0dXAucHVzaFN0YWNrUmVzb3VyY2VTdW1tYXJpZXMoXG4gICAgc2V0dXAuc3RhY2tTdW1tYXJ5T2YoJ01hY2hpbmUnLCAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLCAnYXJuOmF3czpzdGF0ZXM6aGVyZToxMjM0NTY3ODkwMTI6c3RhdGVNYWNoaW5lOm15LW1hY2hpbmUnKSxcbiAgICBzZXR1cC5zdGFja1N1bW1hcnlPZignQnVja2V0JywgJ0FXUzo6UzM6OkJ1Y2tldCcsICdteS1idWNrZXQnKSxcbiAgKTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBCdWNrZXQ6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgTWFjaGluZToge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgRGVmaW5pdGlvblN0cmluZzoge1xuICAgICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgJ3sgUHJvcDogXCJuZXctdmFsdWVcIiB9LCAnLFxuICAgICAgICAgICAgICAgICAgJ3sgXCJTM0J1Y2tldFwiIDogJyxcbiAgICAgICAgICAgICAgICAgIHsgJ0ZuOjpHZXRBdHQnOiBbJ0J1Y2tldCcsICdVbmtub3duQXR0cmlidXRlJ10gfSxcbiAgICAgICAgICAgICAgICAgICcgfScsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBTdGF0ZU1hY2hpbmVOYW1lOiAnbXktbWFjaGluZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpLFxuICApLnJlamVjdHMudG9UaHJvdyhcIldlIGRvbid0IHN1cHBvcnQgdGhlICdVbmtub3duQXR0cmlidXRlJyBhdHRyaWJ1dGUgb2YgdGhlICdBV1M6OlMzOjpCdWNrZXQnIHJlc291cmNlLiBUaGlzIGlzIGEgQ0RLIGxpbWl0YXRpb24uIFBsZWFzZSByZXBvcnQgaXQgYXQgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy9uZXcvY2hvb3NlXCIpO1xufSk7XG4iXX0=
446
+ test('knows how to handle attributes of the AWS::Events::EventBus resource', async () => {
447
+ // GIVEN
448
+ setup.setCurrentCfnStackTemplate({
449
+ Resources: {
450
+ EventBus: {
451
+ Type: 'AWS::Events::EventBus',
452
+ Properties: {
453
+ Name: 'my-event-bus',
454
+ },
455
+ },
456
+ Machine: {
457
+ Type: 'AWS::StepFunctions::StateMachine',
458
+ Properties: {
459
+ DefinitionString: {
460
+ 'Fn::Join': ['', [
461
+ '{"EventBus1Arn":"',
462
+ { 'Fn::GetAtt': ['EventBus', 'Arn'] },
463
+ '","EventBus1Name":"',
464
+ { 'Fn::GetAtt': ['EventBus', 'Name'] },
465
+ '","EventBus1Ref":"',
466
+ { Ref: 'EventBus' },
467
+ '"}',
468
+ ]],
469
+ },
470
+ StateMachineName: 'my-machine',
471
+ },
472
+ },
473
+ },
474
+ });
475
+ setup.pushStackResourceSummaries(setup.stackSummaryOf('EventBus', 'AWS::Events::EventBus', 'my-event-bus'));
476
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
477
+ template: {
478
+ Resources: {
479
+ EventBus: {
480
+ Type: 'AWS::Events::EventBus',
481
+ Properties: {
482
+ Name: 'my-event-bus',
483
+ },
484
+ },
485
+ Machine: {
486
+ Type: 'AWS::StepFunctions::StateMachine',
487
+ Properties: {
488
+ DefinitionString: {
489
+ 'Fn::Join': ['', [
490
+ '{"EventBus2Arn":"',
491
+ { 'Fn::GetAtt': ['EventBus', 'Arn'] },
492
+ '","EventBus2Name":"',
493
+ { 'Fn::GetAtt': ['EventBus', 'Name'] },
494
+ '","EventBus2Ref":"',
495
+ { Ref: 'EventBus' },
496
+ '"}',
497
+ ]],
498
+ },
499
+ StateMachineName: 'my-machine',
500
+ },
501
+ },
502
+ },
503
+ },
504
+ });
505
+ // THEN
506
+ const result = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
507
+ expect(result).not.toBeUndefined();
508
+ expect(mockUpdateMachineDefinition).toHaveBeenCalledWith({
509
+ stateMachineArn: 'arn:aws:states:here:123456789012:stateMachine:my-machine',
510
+ definition: JSON.stringify({
511
+ EventBus2Arn: 'arn:aws:events:here:123456789012:event-bus/my-event-bus',
512
+ EventBus2Name: 'my-event-bus',
513
+ EventBus2Ref: 'my-event-bus',
514
+ }),
515
+ });
516
+ });
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtbWFjaGluZS1ob3Rzd2FwLWRlcGxveW1lbnRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGF0ZS1tYWNoaW5lLWhvdHN3YXAtZGVwbG95bWVudHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDhDQUE4QztBQUU5QyxJQUFJLDJCQUFrSSxDQUFDO0FBQ3ZJLElBQUksc0JBQW9ELENBQUM7QUFFekQsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ25ELDJCQUEyQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4QyxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ2hGLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGlFQUFpRSxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ2pGLFFBQVE7SUFDUixNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRCxRQUFRLEVBQUU7WUFDUixTQUFTLEVBQUU7Z0JBQ1QsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxrQ0FBa0M7aUJBQ3pDO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU5RixPQUFPO0lBQ1AsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsd0hBQXdILEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDeEksUUFBUTtJQUNSLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztRQUMvQixTQUFTLEVBQUU7WUFDVCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLGtDQUFrQztnQkFDeEMsVUFB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LEVBQUUsa0NBQWtDO29CQUN4QyxVQUFVLEVBQUU7d0JBQ1YsZ0JBQWdCLEVBQUU7NEJBQ2hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQ0FDZixtQkFBbUI7b0NBQ25CLEVBQUUsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFO29DQUNyQyxxQkFBcUI7b0NBQ3JCLEVBQUUsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29DQUN0QyxvQkFBb0I7b0NBQ3BCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRTtvQ0FDbkIsSUFBSTtpQ0FDTCxDQUFDO3lCQUNIO3dCQUNELGdCQUFnQixFQUFFLFlBQVk7cUJBQy9CO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFbkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNuQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztRQUN2RCxlQUFlLEVBQUUsMERBQTBEO1FBQzNFLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3pCLFlBQVksRUFBRSx5REFBeUQ7WUFDdkUsYUFBYSxFQUFFLGNBQWM7WUFDN0IsWUFBWSxFQUFFLGNBQWM7U0FDN0IsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RlcEZ1bmN0aW9ucyB9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgc2V0dXAgZnJvbSAnLi9ob3Rzd2FwLXRlc3Qtc2V0dXAnO1xuXG5sZXQgbW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uOiAocGFyYW1zOiBTdGVwRnVuY3Rpb25zLlR5cGVzLlVwZGF0ZVN0YXRlTWFjaGluZUlucHV0KSA9PiBTdGVwRnVuY3Rpb25zLlR5cGVzLlVwZGF0ZVN0YXRlTWFjaGluZU91dHB1dDtcbmxldCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyOiBzZXR1cC5Ib3Rzd2FwTW9ja1Nka1Byb3ZpZGVyO1xuXG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlciA9IHNldHVwLnNldHVwSG90c3dhcFRlc3RzKCk7XG4gIG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbiA9IGplc3QuZm4oKTtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlci5zZXRVcGRhdGVTdGF0ZU1hY2hpbmVNb2NrKG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbik7XG59KTtcblxudGVzdCgncmV0dXJucyB1bmRlZmluZWQgd2hlbiBhIG5ldyBTdGF0ZU1hY2hpbmUgaXMgYWRkZWQgdG8gdGhlIFN0YWNrJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xufSk7XG5cbnRlc3QoJ2NhbGxzIHRoZSB1cGRhdGVTdGF0ZU1hY2hpbmUoKSBBUEkgd2hlbiBpdCByZWNlaXZlcyBvbmx5IGEgZGVmaW5pdGlvblN0cmluZyBjaGFuZ2Ugd2l0aG91dCBGbjo6Sm9pbiBpbiBhIHN0YXRlIG1hY2hpbmUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6ICd7IFByb3A6IFwib2xkLXZhbHVlXCIgfScsXG4gICAgICAgICAgU3RhdGVNYWNoaW5lTmFtZTogJ215LW1hY2hpbmUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBNYWNoaW5lOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiAneyBQcm9wOiBcIm5ldy12YWx1ZVwiIH0nLFxuICAgICAgICAgICAgU3RhdGVNYWNoaW5lTmFtZTogJ215LW1hY2hpbmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0KS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgZGVmaW5pdGlvbjogJ3sgUHJvcDogXCJuZXctdmFsdWVcIiB9JyxcbiAgICBzdGF0ZU1hY2hpbmVBcm46ICdhcm46YXdzOnN0YXRlczpoZXJlOjEyMzQ1Njc4OTAxMjpzdGF0ZU1hY2hpbmU6bXktbWFjaGluZScsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ2NhbGxzIHRoZSB1cGRhdGVTdGF0ZU1hY2hpbmUoKSBBUEkgd2hlbiBpdCByZWNlaXZlcyBvbmx5IGEgZGVmaW5pdGlvblN0cmluZyBjaGFuZ2Ugd2l0aCBGbjo6Sm9pbiBpbiBhIHN0YXRlIG1hY2hpbmUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6IHtcbiAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgJ1xcbicsXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAneycsXG4gICAgICAgICAgICAgICAgJyAgXCJTdGFydEF0XCIgOiBcIlN1Y2Nlc3NTdGF0ZVwiJyxcbiAgICAgICAgICAgICAgICAnICBcIlN0YXRlc1wiIDogeycsXG4gICAgICAgICAgICAgICAgJyAgICBcIlN1Y2Nlc3NTdGF0ZVwiOiB7JyxcbiAgICAgICAgICAgICAgICAnICAgICAgXCJUeXBlXCI6IFwiUGFzc1wiJyxcbiAgICAgICAgICAgICAgICAnICAgICAgXCJSZXN1bHRcIjogXCJTdWNjZXNzXCInLFxuICAgICAgICAgICAgICAgICcgICAgICBcIkVuZFwiOiB0cnVlJyxcbiAgICAgICAgICAgICAgICAnICAgIH0nLFxuICAgICAgICAgICAgICAgICcgIH0nLFxuICAgICAgICAgICAgICAgICd9JyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBTdGF0ZU1hY2hpbmVOYW1lOiAnbXktbWFjaGluZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6IHtcbiAgICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAgICdcXG4nLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICd7JyxcbiAgICAgICAgICAgICAgICAgICcgIFwiU3RhcnRBdFwiOiBcIlN1Y2Nlc3NTdGF0ZVwiLCcsXG4gICAgICAgICAgICAgICAgICAnICBcIlN0YXRlc1wiOiB7JyxcbiAgICAgICAgICAgICAgICAgICcgICAgXCJTdWNjZXNzU3RhdGVcIjogeycsXG4gICAgICAgICAgICAgICAgICAnICAgICAgXCJUeXBlXCI6IFwiU3VjY2VlZFwiJyxcbiAgICAgICAgICAgICAgICAgICcgICAgfScsXG4gICAgICAgICAgICAgICAgICAnICB9JyxcbiAgICAgICAgICAgICAgICAgICd9JyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFN0YXRlTWFjaGluZU5hbWU6ICdteS1tYWNoaW5lJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgIGRlZmluaXRpb246IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIFN0YXJ0QXQ6ICdTdWNjZXNzU3RhdGUnLFxuICAgICAgU3RhdGVzOiB7XG4gICAgICAgIFN1Y2Nlc3NTdGF0ZToge1xuICAgICAgICAgIFR5cGU6ICdTdWNjZWVkJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSwgbnVsbCwgMiksXG4gICAgc3RhdGVNYWNoaW5lQXJuOiAnYXJuOmF3czpzdGF0ZXM6aGVyZToxMjM0NTY3ODkwMTI6c3RhdGVNYWNoaW5lOm15LW1hY2hpbmUnLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdjYWxscyB0aGUgdXBkYXRlU3RhdGVNYWNoaW5lKCkgQVBJIHdoZW4gaXQgcmVjZWl2ZXMgYSBjaGFuZ2UgdG8gdGhlIGRlZmluaXRpb25TdHJpbmcgaW4gYSBzdGF0ZSBtYWNoaW5lIHRoYXQgaGFzIG5vIG5hbWUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6ICd7IFwiUHJvcFwiIDogXCJvbGQtdmFsdWVcIiB9JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgTWFjaGluZToge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgRGVmaW5pdGlvblN0cmluZzogJ3sgXCJQcm9wXCIgOiBcIm5ldy12YWx1ZVwiIH0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgc2V0dXAucHVzaFN0YWNrUmVzb3VyY2VTdW1tYXJpZXMoc2V0dXAuc3RhY2tTdW1tYXJ5T2YoJ01hY2hpbmUnLCAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLCAnYXJuOmF3czpzdGF0ZXM6aGVyZToxMjM0NTY3ODkwMTI6c3RhdGVNYWNoaW5lOm15LW1hY2hpbmUnKSk7XG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgIGRlZmluaXRpb246ICd7IFwiUHJvcFwiIDogXCJuZXctdmFsdWVcIiB9JyxcbiAgICBzdGF0ZU1hY2hpbmVBcm46ICdhcm46YXdzOnN0YXRlczpoZXJlOjEyMzQ1Njc4OTAxMjpzdGF0ZU1hY2hpbmU6bXktbWFjaGluZScsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ2RvZXMgbm90IGNhbGwgdGhlIHVwZGF0ZVN0YXRlTWFjaGluZSgpIEFQSSB3aGVuIGl0IHJlY2VpdmVzIGEgY2hhbmdlIHRvIGEgcHJvcGVydHkgdGhhdCBpcyBub3QgdGhlIGRlZmluaXRpb25TdHJpbmcgaW4gYSBzdGF0ZSBtYWNoaW5lJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBNYWNoaW5lOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiAneyBcIlByb3BcIiA6IFwib2xkLXZhbHVlXCIgfScsXG4gICAgICAgICAgTG9nZ2luZ0NvbmZpZ3VyYXRpb246IHsgLy8gbm9uLWRlZmluaXRpb25TdHJpbmcgcHJvcGVydHlcbiAgICAgICAgICAgIEluY2x1ZGVFeGVjdXRpb25EYXRhOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6ICd7IFwiUHJvcFwiIDogXCJuZXctdmFsdWVcIiB9JyxcbiAgICAgICAgICAgIExvZ2dpbmdDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgIEluY2x1ZGVFeGVjdXRpb25EYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuXG50ZXN0KCdkb2VzIG5vdCBjYWxsIHRoZSB1cGRhdGVTdGF0ZU1hY2hpbmUoKSBBUEkgd2hlbiBhIHJlc291cmNlIGhhcyBhIERlZmluaXRpb25TdHJpbmcgcHJvcGVydHkgYnV0IGlzIG5vdCBhbiBBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZSBpcyBjaGFuZ2VkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBNYWNoaW5lOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6Ok5vdFN0ZXBGdW5jdGlvbnM6Ok5vdFN0YXRlTWFjaGluZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiAneyBQcm9wOiBcIm9sZC12YWx1ZVwiIH0nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBNYWNoaW5lOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6Tm90U3RlcEZ1bmN0aW9uczo6Tm90U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiAneyBQcm9wOiBcIm5ldy12YWx1ZVwiIH0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0KS50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnY2FuIGNvcnJlY3RseSBob3Rzd2FwIG9sZCBzdHlsZSBzeW50aCBjaGFuZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczogeyBBc3NldFBhcmFtMTogeyBUeXBlOiAnU3RyaW5nJyB9IH0sXG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBNYWNoaW5lOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7IFJlZjogJ0Fzc2V0UGFyYW0xJyB9LFxuICAgICAgICAgIFN0YXRlTWFjaGluZU5hbWU6ICdtYWNoaW5lLW5hbWUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFBhcmFtZXRlcnM6IHsgQXNzZXRQYXJhbTI6IHsgVHlwZTogU3RyaW5nIH0gfSxcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBNYWNoaW5lOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7IFJlZjogJ0Fzc2V0UGFyYW0yJyB9LFxuICAgICAgICAgICAgU3RhdGVNYWNoaW5lTmFtZTogJ21hY2hpbmUtbmFtZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBzZXR1cC5wdXNoU3RhY2tSZXNvdXJjZVN1bW1hcmllcyhzZXR1cC5zdGFja1N1bW1hcnlPZignTWFjaGluZScsICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsICdhcm46YXdzOnN0YXRlczpoZXJlOjEyMzQ1Njc4OTAxMjpzdGF0ZU1hY2hpbmU6bXktbWFjaGluZScpKTtcbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QsIHsgQXNzZXRQYXJhbTI6ICdhc3NldC1wYXJhbS0yJyB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgIGRlZmluaXRpb246ICdhc3NldC1wYXJhbS0yJyxcbiAgICBzdGF0ZU1hY2hpbmVBcm46ICdhcm46YXdzOnN0YXRlczpoZXJlOjEyMzQ1Njc4OTAxMjpzdGF0ZU1hY2hpbmU6bWFjaGluZS1uYW1lJyxcbiAgfSk7XG59KTtcblxudGVzdCgnY2FsbHMgdGhlIHVwZGF0ZVN0YXRlTWFjaGluZSgpIEFQSSB3aGVuIGl0IHJlY2VpdmVzIGEgY2hhbmdlIHRvIHRoZSBkZWZpbml0aW9uU3RyaW5nIHRoYXQgdXNlcyBBdHRyaWJ1dGVzIGluIGEgc3RhdGUgbWFjaGluZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgRnVuYzoge1xuICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgIH0sXG4gICAgICBNYWNoaW5lOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICdcXG4nLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ3snLFxuICAgICAgICAgICAgICAgICcgIFwiU3RhcnRBdFwiIDogXCJTdWNjZXNzU3RhdGVcIicsXG4gICAgICAgICAgICAgICAgJyAgXCJTdGF0ZXNcIiA6IHsnLFxuICAgICAgICAgICAgICAgICcgICAgXCJTdWNjZXNzU3RhdGVcIjogeycsXG4gICAgICAgICAgICAgICAgJyAgICAgIFwiVHlwZVwiOiBcIlN1Y2NlZWRcIicsXG4gICAgICAgICAgICAgICAgJyAgICB9JyxcbiAgICAgICAgICAgICAgICAnICB9JyxcbiAgICAgICAgICAgICAgICAnfScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgU3RhdGVNYWNoaW5lTmFtZTogJ215LW1hY2hpbmUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBGdW5jOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6IHtcbiAgICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICdcIlJlc291cmNlXCI6ICcsXG4gICAgICAgICAgICAgICAgICB7ICdGbjo6R2V0QXR0JzogWydGdW5jJywgJ0FybiddIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBTdGF0ZU1hY2hpbmVOYW1lOiAnbXktbWFjaGluZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBzZXR1cC5wdXNoU3RhY2tSZXNvdXJjZVN1bW1hcmllcyhcbiAgICBzZXR1cC5zdGFja1N1bW1hcnlPZignTWFjaGluZScsICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsICdhcm46YXdzOnN0YXRlczpoZXJlOjEyMzQ1Njc4OTAxMjpzdGF0ZU1hY2hpbmU6bXktbWFjaGluZScpLFxuICAgIHNldHVwLnN0YWNrU3VtbWFyeU9mKCdGdW5jJywgJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsICdteS1mdW5jJyksXG4gICk7XG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgIGRlZmluaXRpb246ICdcIlJlc291cmNlXCI6IGFybjphd3M6bGFtYmRhOmhlcmU6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOm15LWZ1bmMnLFxuICAgIHN0YXRlTWFjaGluZUFybjogJ2Fybjphd3M6c3RhdGVzOmhlcmU6MTIzNDU2Nzg5MDEyOnN0YXRlTWFjaGluZTpteS1tYWNoaW5lJyxcbiAgfSk7XG59KTtcblxudGVzdChcIndpbGwgbm90IHBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQgaWYgaXQgY2Fubm90IGZpbmQgYSBSZWYgdGFyZ2V0IChvdXRzaWRlIHRoZSBzdGF0ZSBtYWNoaW5lJ3MgbmFtZSlcIiwgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgUGFyYW0xOiB7IFR5cGU6ICdTdHJpbmcnIH0sXG4gICAgfSxcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6IHtcbiAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAneyBQcm9wOiBcIm9sZC12YWx1ZVwiIH0sICcsXG4gICAgICAgICAgICAgICAgJ3sgXCJQYXJhbVwiIDogJyxcbiAgICAgICAgICAgICAgICB7ICdGbjo6U3ViJzogJyR7UGFyYW0xfScgfSxcbiAgICAgICAgICAgICAgICAnIH0nLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgc2V0dXAucHVzaFN0YWNrUmVzb3VyY2VTdW1tYXJpZXMoc2V0dXAuc3RhY2tTdW1tYXJ5T2YoJ01hY2hpbmUnLCAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLCAnbXktbWFjaGluZScpKTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFBhcmFtZXRlcnM6IHtcbiAgICAgICAgUGFyYW0xOiB7IFR5cGU6ICdTdHJpbmcnIH0sXG4gICAgICB9LFxuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6IHtcbiAgICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICd7IFByb3A6IFwibmV3LXZhbHVlXCIgfSwgJyxcbiAgICAgICAgICAgICAgICAgICd7IFwiUGFyYW1cIiA6ICcsXG4gICAgICAgICAgICAgICAgICB7ICdGbjo6U3ViJzogJyR7UGFyYW0xfScgfSxcbiAgICAgICAgICAgICAgICAgICcgfScsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBhd2FpdCBleHBlY3QoKCkgPT5cbiAgICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpLFxuICApLnJlamVjdHMudG9UaHJvdygvUGFyYW1ldGVyIG9yIHJlc291cmNlICdQYXJhbTEnIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgZXZhbHVhdGlvbi8pO1xufSk7XG5cbnRlc3QoXCJ3aWxsIG5vdCBwZXJmb3JtIGEgaG90c3dhcCBkZXBsb3ltZW50IGlmIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gaGFuZGxlIGEgc3BlY2lmaWMgYXR0cmlidXRlIChvdXRzaWRlIHRoZSBzdGF0ZSBtYWNoaW5lcydzIG5hbWUpXCIsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgQnVja2V0OiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlMzOjpCdWNrZXQnLFxuICAgICAgfSxcbiAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIERlZmluaXRpb25TdHJpbmc6IHtcbiAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAneyBQcm9wOiBcIm9sZC12YWx1ZVwiIH0sICcsXG4gICAgICAgICAgICAgICAgJ3sgXCJTM0J1Y2tldFwiIDogJyxcbiAgICAgICAgICAgICAgICB7ICdGbjo6R2V0QXR0JzogWydCdWNrZXQnLCAnVW5rbm93bkF0dHJpYnV0ZSddIH0sXG4gICAgICAgICAgICAgICAgJyB9JyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBTdGF0ZU1hY2hpbmVOYW1lOiAnbXktbWFjaGluZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBzZXR1cC5wdXNoU3RhY2tSZXNvdXJjZVN1bW1hcmllcyhcbiAgICBzZXR1cC5zdGFja1N1bW1hcnlPZignTWFjaGluZScsICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsICdhcm46YXdzOnN0YXRlczpoZXJlOjEyMzQ1Njc4OTAxMjpzdGF0ZU1hY2hpbmU6bXktbWFjaGluZScpLFxuICAgIHNldHVwLnN0YWNrU3VtbWFyeU9mKCdCdWNrZXQnLCAnQVdTOjpTMzo6QnVja2V0JywgJ215LWJ1Y2tldCcpLFxuICApO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEJ1Y2tldDoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICB9LFxuICAgICAgICBNYWNoaW5lOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiB7XG4gICAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAneyBQcm9wOiBcIm5ldy12YWx1ZVwiIH0sICcsXG4gICAgICAgICAgICAgICAgICAneyBcIlMzQnVja2V0XCIgOiAnLFxuICAgICAgICAgICAgICAgICAgeyAnRm46OkdldEF0dCc6IFsnQnVja2V0JywgJ1Vua25vd25BdHRyaWJ1dGUnXSB9LFxuICAgICAgICAgICAgICAgICAgJyB9JyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFN0YXRlTWFjaGluZU5hbWU6ICdteS1tYWNoaW5lJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGF3YWl0IGV4cGVjdCgoKSA9PlxuICAgIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCksXG4gICkucmVqZWN0cy50b1Rocm93KFwiV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgJ1Vua25vd25BdHRyaWJ1dGUnIGF0dHJpYnV0ZSBvZiB0aGUgJ0FXUzo6UzM6OkJ1Y2tldCcgcmVzb3VyY2UuIFRoaXMgaXMgYSBDREsgbGltaXRhdGlvbi4gUGxlYXNlIHJlcG9ydCBpdCBhdCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzL25ldy9jaG9vc2VcIik7XG59KTtcblxudGVzdCgna25vd3MgaG93IHRvIGhhbmRsZSBhdHRyaWJ1dGVzIG9mIHRoZSBBV1M6OkV2ZW50czo6RXZlbnRCdXMgcmVzb3VyY2UnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEV2ZW50QnVzOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkV2ZW50czo6RXZlbnRCdXMnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgTmFtZTogJ215LWV2ZW50LWJ1cycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgTWFjaGluZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRGVmaW5pdGlvblN0cmluZzoge1xuICAgICAgICAgICAgJ0ZuOjpKb2luJzogWycnLCBbXG4gICAgICAgICAgICAgICd7XCJFdmVudEJ1czFBcm5cIjpcIicsXG4gICAgICAgICAgICAgIHsgJ0ZuOjpHZXRBdHQnOiBbJ0V2ZW50QnVzJywgJ0FybiddIH0sXG4gICAgICAgICAgICAgICdcIixcIkV2ZW50QnVzMU5hbWVcIjpcIicsXG4gICAgICAgICAgICAgIHsgJ0ZuOjpHZXRBdHQnOiBbJ0V2ZW50QnVzJywgJ05hbWUnXSB9LFxuICAgICAgICAgICAgICAnXCIsXCJFdmVudEJ1czFSZWZcIjpcIicsXG4gICAgICAgICAgICAgIHsgUmVmOiAnRXZlbnRCdXMnIH0sXG4gICAgICAgICAgICAgICdcIn0nLFxuICAgICAgICAgICAgXV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBTdGF0ZU1hY2hpbmVOYW1lOiAnbXktbWFjaGluZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBzZXR1cC5wdXNoU3RhY2tSZXNvdXJjZVN1bW1hcmllcyhcbiAgICBzZXR1cC5zdGFja1N1bW1hcnlPZignRXZlbnRCdXMnLCAnQVdTOjpFdmVudHM6OkV2ZW50QnVzJywgJ215LWV2ZW50LWJ1cycpLFxuICApO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEV2ZW50QnVzOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6RXZlbnRzOjpFdmVudEJ1cycsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgTmFtZTogJ215LWV2ZW50LWJ1cycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgTWFjaGluZToge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgRGVmaW5pdGlvblN0cmluZzoge1xuICAgICAgICAgICAgICAnRm46OkpvaW4nOiBbJycsIFtcbiAgICAgICAgICAgICAgICAne1wiRXZlbnRCdXMyQXJuXCI6XCInLFxuICAgICAgICAgICAgICAgIHsgJ0ZuOjpHZXRBdHQnOiBbJ0V2ZW50QnVzJywgJ0FybiddIH0sXG4gICAgICAgICAgICAgICAgJ1wiLFwiRXZlbnRCdXMyTmFtZVwiOlwiJyxcbiAgICAgICAgICAgICAgICB7ICdGbjo6R2V0QXR0JzogWydFdmVudEJ1cycsICdOYW1lJ10gfSxcbiAgICAgICAgICAgICAgICAnXCIsXCJFdmVudEJ1czJSZWZcIjpcIicsXG4gICAgICAgICAgICAgICAgeyBSZWY6ICdFdmVudEJ1cycgfSxcbiAgICAgICAgICAgICAgICAnXCJ9JyxcbiAgICAgICAgICAgICAgXV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgU3RhdGVNYWNoaW5lTmFtZTogJ215LW1hY2hpbmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICBleHBlY3QocmVzdWx0KS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgc3RhdGVNYWNoaW5lQXJuOiAnYXJuOmF3czpzdGF0ZXM6aGVyZToxMjM0NTY3ODkwMTI6c3RhdGVNYWNoaW5lOm15LW1hY2hpbmUnLFxuICAgIGRlZmluaXRpb246IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIEV2ZW50QnVzMkFybjogJ2Fybjphd3M6ZXZlbnRzOmhlcmU6MTIzNDU2Nzg5MDEyOmV2ZW50LWJ1cy9teS1ldmVudC1idXMnLFxuICAgICAgRXZlbnRCdXMyTmFtZTogJ215LWV2ZW50LWJ1cycsXG4gICAgICBFdmVudEJ1czJSZWY6ICdteS1ldmVudC1idXMnLFxuICAgIH0pLFxuICB9KTtcbn0pO1xuIl19
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const mockery = require("mockery");
4
+ const docs_1 = require("../lib/commands/docs");
4
5
  const argv = {
5
6
  browser: 'echo %u',
6
7
  commandHandler: undefined,
@@ -22,9 +23,7 @@ describe('`cdk docs`', () => {
22
23
  done();
23
24
  });
24
25
  test('exits with 0 when everything is OK', async () => {
25
- // eslint-disable-next-line @typescript-eslint/no-require-imports
26
- require('../lib/commands/docs').handler(argv);
27
- const result = await argv.commandHandler({ args: argv });
26
+ const result = await docs_1.realHandler({ args: argv });
28
27
  expect(result).toBe(0);
29
28
  });
30
29
  test('exits with 0 when opening the browser fails', async () => {
@@ -33,10 +32,8 @@ describe('`cdk docs`', () => {
33
32
  cb(new Error('TEST'));
34
33
  },
35
34
  });
36
- // eslint-disable-next-line @typescript-eslint/no-require-imports
37
- require('../lib/commands/docs').handler(argv);
38
- const result = await argv.commandHandler({ args: argv });
35
+ const result = await docs_1.realHandler({ args: argv });
39
36
  expect(result).toBe(0);
40
37
  });
41
38
  });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRvY3MudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1kb2NzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBbUM7QUFHbkMsTUFBTSxJQUFJLEdBQUc7SUFDWCxPQUFPLEVBQUUsU0FBUztJQUNsQixjQUFjLEVBQUUsU0FBeUM7Q0FDMUQsQ0FBQztBQUVGLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO0lBQzFCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNoQixPQUFPLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFO1lBQ3hDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQztZQUNuQixLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7WUFDbkIsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztTQUN0QixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEYsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNkLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEIsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRCxpRUFBaUU7UUFDakUsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQVMsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDN0QsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUU7WUFDcEMsSUFBSSxDQUFDLENBQVMsRUFBRSxFQUEwRDtnQkFDeEUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILGlFQUFpRTtRQUNqRSxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9ja2VyeSBmcm9tICdtb2NrZXJ5JztcbmltcG9ydCB7IENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vbGliL2NvbW1hbmQtYXBpJztcblxuY29uc3QgYXJndiA9IHtcbiAgYnJvd3NlcjogJ2VjaG8gJXUnLFxuICBjb21tYW5kSGFuZGxlcjogdW5kZWZpbmVkIGFzIChDb21tYW5kSGFuZGxlciB8IHVuZGVmaW5lZCksXG59O1xuXG5kZXNjcmliZSgnYGNkayBkb2NzYCcsICgpID0+IHtcbiAgYmVmb3JlRWFjaChkb25lID0+IHtcbiAgICBtb2NrZXJ5LnJlZ2lzdGVyTW9jaygnLi4vLi4vbGliL2xvZ2dpbmcnLCB7XG4gICAgICBkZWJ1ZygpIHsgcmV0dXJuOyB9LFxuICAgICAgZXJyb3IoKSB7IHJldHVybjsgfSxcbiAgICAgIHByaW50KCkgeyByZXR1cm47IH0sXG4gICAgICB3YXJuaW5nKCkgeyByZXR1cm47IH0sXG4gICAgfSk7XG4gICAgbW9ja2VyeS5lbmFibGUoeyB1c2VDbGVhbkNhY2hlOiB0cnVlLCB3YXJuT25SZXBsYWNlOiB0cnVlLCB3YXJuT25VbnJlZ2lzdGVyZWQ6IGZhbHNlIH0pO1xuICAgIGRvbmUoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJBbGwoZG9uZSA9PiB7XG4gICAgbW9ja2VyeS5kaXNhYmxlKCk7XG4gICAgbW9ja2VyeS5kZXJlZ2lzdGVyQWxsKCk7XG4gICAgZG9uZSgpO1xuICB9KTtcblxuICB0ZXN0KCdleGl0cyB3aXRoIDAgd2hlbiBldmVyeXRoaW5nIGlzIE9LJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgcmVxdWlyZSgnLi4vbGliL2NvbW1hbmRzL2RvY3MnKS5oYW5kbGVyKGFyZ3YpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFyZ3YuY29tbWFuZEhhbmRsZXIhKHsgYXJnczogYXJndiB9IGFzIGFueSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZSgwKTtcbiAgfSk7XG5cbiAgdGVzdCgnZXhpdHMgd2l0aCAwIHdoZW4gb3BlbmluZyB0aGUgYnJvd3NlciBmYWlscycsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrZXJ5LnJlZ2lzdGVyTW9jaygnY2hpbGRfcHJvY2VzcycsIHtcbiAgICAgIGV4ZWMoXzogc3RyaW5nLCBjYjogKGVycjogRXJyb3IsIHN0ZG91dD86IHN0cmluZywgc3RkZXJyPzogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgICAgIGNiKG5ldyBFcnJvcignVEVTVCcpKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICByZXF1aXJlKCcuLi9saWIvY29tbWFuZHMvZG9jcycpLmhhbmRsZXIoYXJndik7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXJndi5jb21tYW5kSGFuZGxlciEoeyBhcmdzOiBhcmd2IH0gYXMgYW55KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlKDApO1xuICB9KTtcbn0pO1xuIl19
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRvY3MudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1kb2NzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBbUM7QUFFbkMsK0NBQW1EO0FBRW5ELE1BQU0sSUFBSSxHQUFHO0lBQ1gsT0FBTyxFQUFFLFNBQVM7SUFDbEIsY0FBYyxFQUFFLFNBQXlDO0NBQzFELENBQUM7QUFFRixRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUMxQixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDaEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRTtZQUN4QyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7WUFDbkIsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQztZQUNuQixPQUFPLEtBQUssT0FBTyxDQUFDLENBQUM7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDZCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hCLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM3RCxPQUFPLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRTtZQUNwQyxJQUFJLENBQUMsQ0FBUyxFQUFFLEVBQTBEO2dCQUN4RSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9ja2VyeSBmcm9tICdtb2NrZXJ5JztcbmltcG9ydCB7IENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vbGliL2NvbW1hbmQtYXBpJztcbmltcG9ydCB7IHJlYWxIYW5kbGVyIH0gZnJvbSAnLi4vbGliL2NvbW1hbmRzL2RvY3MnO1xuXG5jb25zdCBhcmd2ID0ge1xuICBicm93c2VyOiAnZWNobyAldScsXG4gIGNvbW1hbmRIYW5kbGVyOiB1bmRlZmluZWQgYXMgKENvbW1hbmRIYW5kbGVyIHwgdW5kZWZpbmVkKSxcbn07XG5cbmRlc2NyaWJlKCdgY2RrIGRvY3NgJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKGRvbmUgPT4ge1xuICAgIG1vY2tlcnkucmVnaXN0ZXJNb2NrKCcuLi8uLi9saWIvbG9nZ2luZycsIHtcbiAgICAgIGRlYnVnKCkgeyByZXR1cm47IH0sXG4gICAgICBlcnJvcigpIHsgcmV0dXJuOyB9LFxuICAgICAgcHJpbnQoKSB7IHJldHVybjsgfSxcbiAgICAgIHdhcm5pbmcoKSB7IHJldHVybjsgfSxcbiAgICB9KTtcbiAgICBtb2NrZXJ5LmVuYWJsZSh7IHVzZUNsZWFuQ2FjaGU6IHRydWUsIHdhcm5PblJlcGxhY2U6IHRydWUsIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2UgfSk7XG4gICAgZG9uZSgpO1xuICB9KTtcblxuICBhZnRlckFsbChkb25lID0+IHtcbiAgICBtb2NrZXJ5LmRpc2FibGUoKTtcbiAgICBtb2NrZXJ5LmRlcmVnaXN0ZXJBbGwoKTtcbiAgICBkb25lKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2V4aXRzIHdpdGggMCB3aGVuIGV2ZXJ5dGhpbmcgaXMgT0snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhbEhhbmRsZXIoeyBhcmdzOiBhcmd2IH0gYXMgYW55KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlKDApO1xuICB9KTtcblxuICB0ZXN0KCdleGl0cyB3aXRoIDAgd2hlbiBvcGVuaW5nIHRoZSBicm93c2VyIGZhaWxzJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tlcnkucmVnaXN0ZXJNb2NrKCdjaGlsZF9wcm9jZXNzJywge1xuICAgICAgZXhlYyhfOiBzdHJpbmcsIGNiOiAoZXJyOiBFcnJvciwgc3Rkb3V0Pzogc3RyaW5nLCBzdGRlcnI/OiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICAgICAgY2IobmV3IEVycm9yKCdURVNUJykpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFsSGFuZGxlcih7IGFyZ3M6IGFyZ3YgfSBhcyBhbnkpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoMCk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const mockery = require("mockery");
4
+ const doctor_1 = require("../lib/commands/doctor");
4
5
  describe('`cdk doctor`', () => {
5
6
  beforeEach(done => {
6
7
  mockery.registerMock('../../lib/logging', {
@@ -16,10 +17,8 @@ describe('`cdk doctor`', () => {
16
17
  });
17
18
  test('exits with 0 when everything is OK', async () => {
18
19
  const argv = {};
19
- // eslint-disable-next-line @typescript-eslint/no-require-imports
20
- require('../lib/commands/doctor').handler(argv);
21
- const result = await argv.commandHandler({ args: argv });
20
+ const result = await doctor_1.realHandler({ args: argv });
22
21
  expect(result).toBe(0);
23
22
  });
24
23
  });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRvY3Rvci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWRvY3Rvci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQW1DO0FBR25DLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNoQixPQUFPLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFO1lBQ3hDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RixJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QixJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3BELE1BQU0sSUFBSSxHQUFRLEVBQUUsQ0FBQztRQUNyQixpRUFBaUU7UUFDakUsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU8sSUFBSSxDQUFDLGNBQWlDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFTLENBQUMsQ0FBQztRQUNwRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBtb2NrZXJ5IGZyb20gJ21vY2tlcnknO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuLi9saWIvY29tbWFuZC1hcGknO1xuXG5kZXNjcmliZSgnYGNkayBkb2N0b3JgJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKGRvbmUgPT4ge1xuICAgIG1vY2tlcnkucmVnaXN0ZXJNb2NrKCcuLi8uLi9saWIvbG9nZ2luZycsIHtcbiAgICAgIHByaW50OiAoKSA9PiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgbW9ja2VyeS5lbmFibGUoeyB1c2VDbGVhbkNhY2hlOiB0cnVlLCB3YXJuT25SZXBsYWNlOiB0cnVlLCB3YXJuT25VbnJlZ2lzdGVyZWQ6IGZhbHNlIH0pO1xuICAgIGRvbmUoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGRvbmUgPT4ge1xuICAgIG1vY2tlcnkuZGlzYWJsZSgpO1xuICAgIG1vY2tlcnkuZGVyZWdpc3RlckFsbCgpO1xuICAgIGRvbmUoKTtcbiAgfSk7XG5cbiAgdGVzdCgnZXhpdHMgd2l0aCAwIHdoZW4gZXZlcnl0aGluZyBpcyBPSycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhcmd2OiBhbnkgPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgIHJlcXVpcmUoJy4uL2xpYi9jb21tYW5kcy9kb2N0b3InKS5oYW5kbGVyKGFyZ3YpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChhcmd2LmNvbW1hbmRIYW5kbGVyIGFzIENvbW1hbmRIYW5kbGVyKSh7IGFyZ3M6IGFyZ3YgfSBhcyBhbnkpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoMCk7XG4gIH0pO1xufSk7XG4iXX0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRvY3Rvci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWRvY3Rvci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQW1DO0FBQ25DLG1EQUFxRDtBQUVyRCxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtJQUM1QixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDaEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRTtZQUN4QyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUztTQUN2QixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEYsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNmLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEIsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRCxNQUFNLElBQUksR0FBUSxFQUFFLENBQUM7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxvQkFBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9ja2VyeSBmcm9tICdtb2NrZXJ5JztcbmltcG9ydCB7IHJlYWxIYW5kbGVyIH0gZnJvbSAnLi4vbGliL2NvbW1hbmRzL2RvY3Rvcic7XG5cbmRlc2NyaWJlKCdgY2RrIGRvY3RvcmAnLCAoKSA9PiB7XG4gIGJlZm9yZUVhY2goZG9uZSA9PiB7XG4gICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJy4uLy4uL2xpYi9sb2dnaW5nJywge1xuICAgICAgcHJpbnQ6ICgpID0+IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBtb2NrZXJ5LmVuYWJsZSh7IHVzZUNsZWFuQ2FjaGU6IHRydWUsIHdhcm5PblJlcGxhY2U6IHRydWUsIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2UgfSk7XG4gICAgZG9uZSgpO1xuICB9KTtcblxuICBhZnRlckVhY2goZG9uZSA9PiB7XG4gICAgbW9ja2VyeS5kaXNhYmxlKCk7XG4gICAgbW9ja2VyeS5kZXJlZ2lzdGVyQWxsKCk7XG4gICAgZG9uZSgpO1xuICB9KTtcblxuICB0ZXN0KCdleGl0cyB3aXRoIDAgd2hlbiBldmVyeXRoaW5nIGlzIE9LJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGFyZ3Y6IGFueSA9IHt9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWxIYW5kbGVyKHsgYXJnczogYXJndiB9IGFzIGFueSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZSgwKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -61,6 +61,7 @@ export declare class MockSdkProvider extends SdkProvider {
61
61
  stubStepFunctions(stubs: SyncHandlerSubsetOf<AWS.StepFunctions>): void;
62
62
  stubCodeBuild(stubs: SyncHandlerSubsetOf<AWS.CodeBuild>): void;
63
63
  stubCloudWatchLogs(stubs: SyncHandlerSubsetOf<AWS.CloudWatchLogs>): void;
64
+ stubAppSync(stubs: SyncHandlerSubsetOf<AWS.AppSync>): void;
64
65
  stubGetEndpointSuffix(stub: () => string): void;
65
66
  }
66
67
  export declare class MockSdk implements ISDK {
@@ -79,6 +80,7 @@ export declare class MockSdk implements ISDK {
79
80
  readonly stepFunctions: jest.Mock<any, any>;
80
81
  readonly codeBuild: jest.Mock<any, any>;
81
82
  readonly cloudWatchLogs: jest.Mock<any, any>;
83
+ readonly appsync: jest.Mock<any, any>;
82
84
  readonly getEndpointSuffix: jest.Mock<any, any>;
83
85
  readonly appendCustomUserAgent: jest.Mock<any, any>;
84
86
  readonly removeCustomUserAgent: jest.Mock<any, any>;
@@ -91,6 +93,10 @@ export declare class MockSdk implements ISDK {
91
93
  * Replace the CloudWatch client with the given object
92
94
  */
93
95
  stubCloudWatchLogs(stubs: SyncHandlerSubsetOf<AWS.CloudWatchLogs>): void;
96
+ /**
97
+ * Replace the AppSync client with the given object
98
+ */
99
+ stubAppSync(stubs: SyncHandlerSubsetOf<AWS.AppSync>): void;
94
100
  /**
95
101
  * Replace the ECR client with the given object
96
102
  */
@@ -88,6 +88,9 @@ class MockSdkProvider extends aws_auth_1.SdkProvider {
88
88
  stubCloudWatchLogs(stubs) {
89
89
  this.sdk.cloudWatchLogs = jest.fn().mockReturnValue(partialAwsService(stubs));
90
90
  }
91
+ stubAppSync(stubs) {
92
+ this.sdk.appsync = jest.fn().mockReturnValue(partialAwsService(stubs));
93
+ }
91
94
  stubGetEndpointSuffix(stub) {
92
95
  this.sdk.getEndpointSuffix = stub;
93
96
  }
@@ -110,6 +113,7 @@ class MockSdk {
110
113
  this.stepFunctions = jest.fn();
111
114
  this.codeBuild = jest.fn();
112
115
  this.cloudWatchLogs = jest.fn();
116
+ this.appsync = jest.fn();
113
117
  this.getEndpointSuffix = jest.fn();
114
118
  this.appendCustomUserAgent = jest.fn();
115
119
  this.removeCustomUserAgent = jest.fn();
@@ -129,6 +133,12 @@ class MockSdk {
129
133
  stubCloudWatchLogs(stubs) {
130
134
  this.cloudWatchLogs.mockReturnValue(partialAwsService(stubs));
131
135
  }
136
+ /**
137
+ * Replace the AppSync client with the given object
138
+ */
139
+ stubAppSync(stubs) {
140
+ this.appsync.mockReturnValue(partialAwsService(stubs));
141
+ }
132
142
  /**
133
143
  * Replace the ECR client with the given object
134
144
  */
@@ -237,4 +247,4 @@ function errorWithCode(code, message) {
237
247
  return ret;
238
248
  }
239
249
  exports.errorWithCode = errorWithCode;
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1zZGsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb2NrLXNkay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrQkFBK0I7QUFDL0IscURBQTRGO0FBRTVGLDZEQUF5RDtBQUN6RCxzRUFBd0U7QUFFeEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFFM0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQztJQUM1RCxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0I7Q0FDdkIsQ0FBQyxDQUFDO0FBY0g7Ozs7O0dBS0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEsc0JBQVc7SUFHOUMsWUFBWSxVQUFrQyxFQUFFOztRQUM5QyxLQUFLLENBQUMscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUUzRixvRkFBb0Y7UUFDcEYsMEZBQTBGO1FBQzFGLFVBQUksT0FBTyxDQUFDLE9BQU8sbUNBQUksSUFBSSxFQUFFO1lBQzNCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxjQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQy9GO2FBQU07WUFDTCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFlBQStCLEVBQUUsS0FBVztRQUN6RSxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNB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LFNBQWdCLGVBQWUsQ0FBQyxLQUF5QztJQUN2RSxNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFCLE9BQU8sMEJBQVcsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFIRCwwQ0FHQztBQUVELFNBQWdCLHVCQUF1QjtJQUNyQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLFdBQVc7UUFDcEIsTUFBTSxFQUFFLHVCQUF1QjtRQUMvQixJQUFJLEVBQUUsdUNBQXVDO0tBQzlDLENBQUM7QUFDSixDQUFDO0FBTkQsMERBTUM7QUFXRCxTQUFnQixhQUFhLENBQUMsSUFBWSxFQUFFLE9BQWU7SUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsR0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDekIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBSkQsc0NBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgQWNjb3VudCwgSVNESywgU0RLLCBTZGtQcm92aWRlciwgU2RrRm9yRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9saWIvYXBpL2F3cy1hdXRoJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi8uLi9saWIvYXBpL2F3cy1hdXRoL2NyZWRlbnRpYWxzJztcbmltcG9ydCB7IFRvb2xraXRJbmZvIH0gZnJvbSAnLi4vLi4vbGliL2FwaS90b29sa2l0LWluZm8nO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25TdGFjayB9IGZyb20gJy4uLy4uL2xpYi9hcGkvdXRpbC9jbG91ZGZvcm1hdGlvbic7XG5cbmNvbnN0IEZBS0VfQ1JFREVOVElBTFMgPSBuZXcgQVdTLkNyZWRlbnRpYWxzKHsgYWNjZXNzS2V5SWQ6ICdBQ0NFU1MnLCBzZWNyZXRBY2Nlc3NLZXk6ICdTRUNSRVQnLCBzZXNzaW9uVG9rZW46ICdUT0tFTiAnIH0pO1xuXG5jb25zdCBGQUtFX0NSRURFTlRJQUxfQ0hBSU4gPSBuZXcgQVdTLkNyZWRlbnRpYWxQcm92aWRlckNoYWluKFtcbiAgKCkgPT4gRkFLRV9DUkVERU5USUFMUyxcbl0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vY2tTZGtQcm92aWRlck9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgbW9jayBwcm92aWRlciBzaG91bGQgcHJvZHVjZSBhIHJlYWwgU0RLXG4gICAqXG4gICAqIFNvbWUgdGVzdHMgcmVxdWlyZSBhIHJlYWwgU0RLIGJlY2F1c2UgdGhleSB1c2UgYEFXUy1tb2NrYCB0byByZXBsYWNlXG4gICAqIHRoZSB1bmRlcmx5aW5nIGNhbGxzLiBPdGhlciB0ZXN0cyBkbyB0aGVpciB3b3JrIGNvbXBsZXRlbHkgdXNpbmcgamVzdC1tb2Nrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhbFNkaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQW4gU0RLIHRoYXQgYWxsb3dzIHJlcGxhY2luZyAoc29tZSBvZikgdGhlIGNsaWVudHNcbiAqXG4gKiBJdHMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjb25zdW1lciB0byByZXBsYWNlIGFsbCBjYWxscyB0aGF0XG4gKiBhY3R1YWxseSB3aWxsIGJlIGNhbGxlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tTZGtQcm92aWRlciBleHRlbmRzIFNka1Byb3ZpZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IHNkazogSVNESztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb2NrU2RrUHJvdmlkZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihGQUtFX0NSRURFTlRJQUxfQ0hBSU4sICdiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLCB7IGN1c3RvbVVzZXJBZ2VudDogJ2F3cy1jZGsvamVzdCcgfSk7XG5cbiAgICAvLyBTREsgY29udGFpbnMgYSByZWFsIFNESywgc2luY2Ugc29tZSB0ZXN0IHVzZSAnQVdTLW1vY2snIHRvIHJlcGxhY2UgdGhlIHVuZGVybHlpbmdcbiAgICAvLyBBV1MgY2FsbHMgd2hpY2ggYSByZWFsIFNESyB3b3VsZCBkbywgYW5kIHNvbWUgdGVzdHMgdXNlIHRoZSAnc3R1YicgZnVuY3Rpb25hbGl0eSBiZWxvdy5cbiAgICBpZiAob3B0aW9ucy5yZWFsU2RrID8/IHRydWUpIHtcbiAgICAgIHRoaXMuc2RrID0gbmV3IFNESyhGQUtFX0NSRURFTlRJQUxTLCB0aGlzLmRlZmF1bHRSZWdpb24sIHsgY3VzdG9tVXNlckFnZW50OiAnYXdzLWNkay9qZXN0JyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZGsgPSBuZXcgTW9ja1NkaygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGJhc2VDcmVkZW50aWFsc1BhcnRpdGlvbihfZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LCBfbW9kZTogTW9kZSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBkZWZhdWx0QWNjb3VudCgpOiBQcm9taXNlPEFjY291bnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgYWNjb3VudElkOiAnMTIzNDU2Nzg5MDEyJywgcGFydGl0aW9uOiAnYXdzJyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JFbnZpcm9ubWVudCgpOiBQcm9taXNlPFNka0ZvckVudmlyb25tZW50PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHNkazogdGhpcy5zZGssIGRpZEFzc3VtZVJvbGU6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgQ2xvdWRGb3JtYXRpb24gY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJDbG91ZEZvcm1hdGlvbihzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQ2xvdWRGb3JtYXRpb24+KSB7XG4gICAgKHRoaXMuc2RrIGFzIGFueSkuY2xvdWRGb3JtYXRpb24gPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHBhcnRpYWxBd3NTZXJ2aWNlPEFXUy5DbG91ZEZvcm1hdGlvbj4oc3R1YnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBFQ1IgY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJFY3Ioc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkVDUj4pIHtcbiAgICAodGhpcy5zZGsgYXMgYW55KS5lY3IgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHBhcnRpYWxBd3NTZXJ2aWNlPEFXUy5FQ1I+KHN0dWJzKSk7XG4gIH1cblxuICBwdWJsaWMgc3R1YkVjcyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuRUNTPiwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICh0aGlzLnNkayBhcyBhbnkpLmVjcyA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkVDUz4oc3R1YnMsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgUzMgY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJTMyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuUzM+KSB7XG4gICAgKHRoaXMuc2RrIGFzIGFueSkuczMgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHBhcnRpYWxBd3NTZXJ2aWNlPEFXUy5TMz4oc3R1YnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBTVFMgY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJTVFMoc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLlNUUz4pIHtcbiAgICAodGhpcy5zZGsgYXMgYW55KS5zdHMgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHBhcnRpYWxBd3NTZXJ2aWNlPEFXUy5TVFM+KHN0dWJzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgRUxCdjIgY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJFTEJ2MihzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuRUxCdjI+KSB7XG4gICAgKHRoaXMuc2RrIGFzIGFueSkuZWxidjIgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHBhcnRpYWxBd3NTZXJ2aWNlPEFXUy5FTEJ2Mj4oc3R1YnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBTU00gY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJTU00oc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLlNTTT4pIHtcbiAgICAodGhpcy5zZGsgYXMgYW55KS5zc20gPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHBhcnRpYWxBd3NTZXJ2aWNlPEFXUy5TU00+KHN0dWJzKSk7XG4gIH1cblxuICBwdWJsaWMgc3R1YkxhbWJkYShzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuTGFtYmRhPiwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICh0aGlzLnNkayBhcyBhbnkpLmxhbWJkYSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkxhbWJkYT4oc3R1YnMsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzKSk7XG4gIH1cblxuICBwdWJsaWMgc3R1YlN0ZXBGdW5jdGlvbnMoc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLlN0ZXBGdW5jdGlvbnM+KSB7XG4gICAgKHRoaXMuc2RrIGFzIGFueSkuc3RlcEZ1bmN0aW9ucyA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLlN0ZXBGdW5jdGlvbnM+KHN0dWJzKSk7XG4gIH1cblxuICBwdWJsaWMgc3R1YkNvZGVCdWlsZChzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQ29kZUJ1aWxkPikge1xuICAgICh0aGlzLnNkayBhcyBhbnkpLmNvZGVCdWlsZCA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkNvZGVCdWlsZD4oc3R1YnMpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViQ2xvdWRXYXRjaExvZ3Moc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkNsb3VkV2F0Y2hMb2dzPikge1xuICAgICh0aGlzLnNkayBhcyBhbnkpLmNsb3VkV2F0Y2hMb2dzID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShwYXJ0aWFsQXdzU2VydmljZTxBV1MuQ2xvdWRXYXRjaExvZ3M+KHN0dWJzKSk7XG4gIH1cblxuICBwdWJsaWMgc3R1YkdldEVuZHBvaW50U3VmZml4KHN0dWI6ICgpID0+IHN0cmluZykge1xuICAgIHRoaXMuc2RrLmdldEVuZHBvaW50U3VmZml4ID0gc3R1YjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9ja1NkayBpbXBsZW1lbnRzIElTREsge1xuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudFJlZ2lvbjogc3RyaW5nID0gJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNyc7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGEgPSBqZXN0LmZuKCk7XG4gIHB1YmxpYyByZWFkb25seSBjbG91ZEZvcm1hdGlvbiA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGVjMiA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHNzbSA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHMzID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGU1MyA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGVjciA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGVjcyA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGVsYnYyID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0c01hbmFnZXIgPSBqZXN0LmZuKCk7XG4gIHB1YmxpYyByZWFkb25seSBrbXMgPSBqZXN0LmZuKCk7XG4gIHB1YmxpYyByZWFkb25seSBzdGVwRnVuY3Rpb25zID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgY29kZUJ1aWxkID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xvdWRXYXRjaExvZ3MgPSBqZXN0LmZuKCk7XG4gIHB1YmxpYyByZWFkb25seSBnZXRFbmRwb2ludFN1ZmZpeCA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGFwcGVuZEN1c3RvbVVzZXJBZ2VudCA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHJlbW92ZUN1c3RvbVVzZXJBZ2VudCA9IGplc3QuZm4oKTtcblxuICBwdWJsaWMgY3VycmVudEFjY291bnQoKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGFjY291bnRJZDogJzEyMzQ1Njc4OTAxMicsIHBhcnRpdGlvbjogJ2F3cycgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgQ2xvdWRGb3JtYXRpb24gY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJDbG91ZEZvcm1hdGlvbihzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQ2xvdWRGb3JtYXRpb24+KSB7XG4gICAgdGhpcy5jbG91ZEZvcm1hdGlvbi5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkNsb3VkRm9ybWF0aW9uPihzdHVicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIENsb3VkV2F0Y2ggY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJDbG91ZFdhdGNoTG9ncyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQ2xvdWRXYXRjaExvZ3M+KSB7XG4gICAgdGhpcy5jbG91ZFdhdGNoTG9ncy5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkNsb3VkV2F0Y2hMb2dzPihzdHVicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIEVDUiBjbGllbnQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3R1YkVjcihzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuRUNSPikge1xuICAgIHRoaXMuZWNyLm1vY2tSZXR1cm5WYWx1ZShwYXJ0aWFsQXdzU2VydmljZTxBV1MuRUNSPihzdHVicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIFNTTSBjbGllbnQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3R1YlNzbShzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuU1NNPikge1xuICAgIHRoaXMuc3NtLm1vY2tSZXR1cm5WYWx1ZShwYXJ0aWFsQXdzU2VydmljZTxBV1MuU1NNPihzdHVicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIGdldEVuZHBvaW50U3VmZml4IGNsaWVudCB3aXRoIHRoZSBnaXZlbiBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdHViR2V0RW5kcG9pbnRTdWZmaXgoc3R1YjogKCkgPT4gc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRFbmRwb2ludFN1ZmZpeC5tb2NrUmV0dXJuVmFsdWUoc3R1YigpKTtcbiAgfVxufVxuXG4vKipcbiAqIFdyYXAgc3luY2hyb25vdXMgZmFrZSBoYW5kbGVycyBzbyB0aGF0IHRoZXkgc29ydC1vZiBmdW5jdGlvbiBsaWtlIGEgcmVhbCBBV1MgY2xpZW50XG4gKlxuICogRm9yIGV4YW1wbGUsIHR1cm5zIGFuIG9iamVjdCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIHtcbiAqICAgc29tZUNhbGwob3B0czogQVdTLlNlcnZpY2UuU29tZUNhbGxJbnB1dCk6IEFXUy5TZXJ2aWNlLlNvbWVDYWxsT3V0cHV0IHtcbiAqICAgICByZXR1cm4gey4uLndoYXRldmVyLi4ufTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogSW50byBhbiBvYmplY3QgdGhhdCBpbiB0aGUgdHlwZSBzeXN0ZW0gcHJldGVuZHMgdG8gYmUgYW4gJ0FXUy5TZXJ2aWNlJ1xuICogY2xhc3MgKGV2ZW4gdGhvdWdoIGl0IHJlYWxseSBpc24ndCkgYW5kIGNhbiBiZSBjYWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBzZXJ2aWNlID0gYXdhaXQgc2RrLnNvbWVTZXJ2aWNlKC4uLik7XG4gKiBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlcnZpY2Uuc29tZUNhbGwoLi4uKS5wcm9taXNlKCk7XG4gKiBgYGBcbiAqXG4gKiBXZSBvbmx5IGltcGxlbWVudCB0aGUgbmFycm93IHN1YnNldCBvZiB0aGUgQVdTIFNESyBBUEkgdGhhdCB0aGUgQ0RLIGFjdHVhbGx5XG4gKiB1c2VzLCBhbmQgd2UgY2hlYXQgb24gdGhlIHR5cGVzIHRvIG1ha2UgVHlwZVNjcmlwdCBoYXBweSBvbiB0aGUgcmVzdCBvZiB0aGUgQVBJLlxuICpcbiAqIE1vc3QgaW1wb3J0YW50IGZlYXR1cmUgb2YgdGhpcyBjbGFzcyBpcyB0aGF0IGl0IHdpbGwgZGVyaXZlIHRoZSBpbnB1dCBhbmQgb3V0cHV0XG4gKiB0eXBlcyBvZiB0aGUgaGFuZGxlcnMgb24gdGhlIGlucHV0IG9iamVjdCBmcm9tIHRoZSBBQ1RVQUwgQVdTIFNlcnZpY2UgY2xhc3MsXG4gKiBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGRlY2xhcmUgdGhlbS5cbiAqL1xuZnVuY3Rpb24gcGFydGlhbEF3c1NlcnZpY2U8Uz4oZm5zOiBTeW5jSGFuZGxlclN1YnNldE9mPFM+LCBhZGRpdGlvbmFsUHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9KTogUyB7XG4gIC8vIFN1cGVyIHVuc2FmZSBpbiBoZXJlIGJlY2F1c2UgSSBkb24ndCBrbm93IGhvdyB0byBtYWtlIFR5cGVTY3JpcHQgaGFwcHksXG4gIC8vIGJ1dCBhdCBsZWFzdCB0aGUgb3V0ZXIgdHlwZXMgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgdGhhdCBoYXBwZW5zIGluIGhlcmUgd29ya3Mgb3V0LlxuICBjb25zdCByZXQ6IGFueSA9IHt9O1xuXG4gIGZvciAoY29uc3QgW2tleSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZm5zKSkge1xuICAgIHJldFtrZXldID0gKGFyZ3M6IGFueSkgPT4gbmV3IEZha2VBV1NSZXNwb25zZSgoaGFuZGxlciBhcyBhbnkpKGFyZ3MpKTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsUHJvcGVydGllcykpIHtcbiAgICByZXRba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQmVjYXVzZSBvZiB0aGUgb3ZlcmxvYWRzIGFuIEFXUyBoYW5kbGVyIHR5cGUgbG9va3MgbGlrZSB0aGlzOlxuLy9cbi8vICAge1xuLy8gICAgICAocGFyYW1zOiBJTlBVVFNUUlVDVCwgY2FsbGJhY2s/OiAoKGVycjogQVdTRXJyb3IsIGRhdGE6IHt9KSA9PiB2b2lkKSB8IHVuZGVmaW5lZCk6IFJlcXVlc3Q8T1VUUFVULCAuLi4+O1xuLy8gICAgICAoY2FsbGJhY2s/OiAoKGVycjogQVdTLkFXU0Vycm9yLCBkYXRhOiB7fSkgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiBBV1MuUmVxdWVzdDwuLi4+O1xuLy8gICB9XG4vL1xuLy8gR2V0IHRoZSBmaXJzdCBvdmVybG9hZCBhbmQgZXh0cmFjdCB0aGUgaW5wdXQgYW5kIG91dHB1dCBzdHJ1Y3QgdHlwZXNcbnR5cGUgQXdzQ2FsbElucHV0T3V0cHV0PFQ+ID1cbiAgICBUIGV4dGVuZHMge1xuICAgICAgKGFyZ3M6IGluZmVyIElOUFVULCBjYWxsYmFjaz86ICgoZXJyOiBBV1MuQVdTRXJyb3IsIGRhdGE6IGFueSkgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiBBV1MuUmVxdWVzdDxpbmZlciBPVVRQVVQsIEFXUy5BV1NFcnJvcj47XG4gICAgICAoY2FsbGJhY2s/OiAoKGVycjogQVdTLkFXU0Vycm9yLCBkYXRhOiB7fSkgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiBBV1MuUmVxdWVzdDxhbnksIGFueT47XG4gICAgfSA/IFtJTlBVVCwgT1VUUFVUXSA6IFQ7XG5cbi8vIERldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgbW9jayBoYW5kbGVyIGZyb20gdGhlIHR5cGUgb2YgdGhlIElucHV0L091dHB1dCB0eXBlIHBhaXIuXG4vLyBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSAnbmV2ZXInLCBUeXBlU2NyaXB0IHdpbGwgcHJvcGFnYXRlIGl0IHVwd2FyZHMgbWFraW5nIGl0XG4vLyBpbXBvc3NpYmxlIHRvIHNwZWNpZnkgdGhlIGZpZWxkIHRoYXQgaGFzICduZXZlcicgYW55d2hlcmUgaW4gaXRzIHR5cGUuXG50eXBlIE1vY2tIYW5kbGVyVHlwZTxBST4gPVxuICAgIEFJIGV4dGVuZHMgW2FueSwgYW55XSA/IChpbnB1dDogQUlbMF0pID0+IEFJWzFdIDogQUk7XG5cbi8vIEFueSBzdWJzZXQgb2YgdGhlIGZ1bGwgdHlwZSB0aGF0IHN5bmNocm9ub3VzbHkgcmV0dXJucyB0aGUgb3V0cHV0IHN0cnVjdHVyZSBpcyBva2F5XG5leHBvcnQgdHlwZSBTeW5jSGFuZGxlclN1YnNldE9mPFM+ID0ge1tLIGluIGtleW9mIFNdPzogTW9ja0hhbmRsZXJUeXBlPEF3c0NhbGxJbnB1dE91dHB1dDxTW0tdPj59O1xuXG4vKipcbiAqIEZha2UgQVdTIHJlc3BvbnNlLlxuICpcbiAqIFdlIG9ubHkgZXZlciAnYXdhaXQgcmVzcG9uc2UucHJvbWlzZSgpJyBzbyB0aGF0J3MgdGhlIG9ubHkgdGhpbmcgd2UgaW1wbGVtZW50IGhlcmUuXG4gKi9cbmNsYXNzIEZha2VBV1NSZXNwb25zZTxUPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgeDogVCkge1xuICB9XG5cbiAgcHVibGljIHByb21pc2UoKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLngpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrQm9vdHN0cmFwU3RhY2soc2RrOiBJU0RLIHwgdW5kZWZpbmVkLCBzdGFjaz86IFBhcnRpYWw8QVdTLkNsb3VkRm9ybWF0aW9uLlN0YWNrPikge1xuICByZXR1cm4gQ2xvdWRGb3JtYXRpb25TdGFjay5mcm9tU3RhdGljSW5mb3JtYXRpb24oKHNkayA/PyBuZXcgTW9ja1NkaygpKS5jbG91ZEZvcm1hdGlvbigpLCAnQ0RLVG9vbGtpdCcsIHtcbiAgICBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCksXG4gICAgU3RhY2tOYW1lOiAnQ0RLVG9vbGtpdCcsXG4gICAgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLFxuICAgIC4uLnN0YWNrLFxuICAgIE91dHB1dHM6IFtcbiAgICAgIHsgT3V0cHV0S2V5OiAnQnVja2V0TmFtZScsIE91dHB1dFZhbHVlOiAnQlVDS0VUX05BTUUnIH0sXG4gICAgICB7IE91dHB1dEtleTogJ0J1Y2tldERvbWFpbk5hbWUnLCBPdXRwdXRWYWx1ZTogJ0JVQ0tFVF9FTkRQT0lOVCcgfSxcbiAgICAgIHsgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsIE91dHB1dFZhbHVlOiAnMScgfSxcbiAgICAgIC4uLnN0YWNrPy5PdXRwdXRzID8/IFtdLFxuICAgIF0sXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Rvb2xraXRJbmZvKHN0YWNrPzogUGFydGlhbDxBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2s+KSB7XG4gIGNvbnN0IHNkayA9IG5ldyBNb2NrU2RrKCk7XG4gIHJldHVybiBUb29sa2l0SW5mby5mcm9tU3RhY2sobW9ja0Jvb3RzdHJhcFN0YWNrKHNkaywgc3RhY2spLCBzZGspO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Jlc29sdmVkRW52aXJvbm1lbnQoKTogY3hhcGkuRW52aXJvbm1lbnQge1xuICByZXR1cm4ge1xuICAgIGFjY291bnQ6ICcxMjM0NTY3ODknLFxuICAgIHJlZ2lvbjogJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNycsXG4gICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OS9iZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLFxuICB9O1xufVxuXG4vLyBKZXN0IGhlbHBlcnNcblxuLy8gQW4gb2JqZWN0IG9uIHdoaWNoIGFsbCBjYWxsYWJsZXMgYXJlIEplc3QgTW9ja3NcbmV4cG9ydCB0eXBlIE1vY2tlZE9iamVjdDxTIGV4dGVuZHMgb2JqZWN0PiA9IHtbSyBpbiBrZXlvZiBTXTogTW9ja2VkRnVuY3Rpb248UmVxdWlyZWQ8Uz5bS10+fTtcblxuLy8gSWYgYSBmdW5jdGlvbiwgdGhlbiBhIG1vY2tlZCB2ZXJzaW9uIG9mIGl0LCBvdGhlcndpc2UganVzdCBUXG50eXBlIE1vY2tlZEZ1bmN0aW9uPFQ+ID0gVCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XG4gID8gamVzdC5Nb2NrSW5zdGFuY2U8UmV0dXJuVHlwZTxUPiwgamVzdC5BcmdzVHlwZTxUPj5cbiAgOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yV2l0aENvZGUoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgY29uc3QgcmV0ID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAocmV0IGFzIGFueSkuY29kZSA9IGNvZGU7XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1zZGsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb2NrLXNkay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrQkFBK0I7QUFDL0IscURBQTRGO0FBRTVGLDZEQUF5RDtBQUN6RCxzRUFBd0U7QUFFeEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFFM0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQztJQUM1RCxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0I7Q0FDdkIsQ0FBQyxDQUFDO0FBY0g7Ozs7O0dBS0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEsc0JBQVc7SUFHOUMsWUFBWSxVQUFrQyxFQUFFOztRQUM5QyxLQUFLLENBQUMscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUUzRixvRkFBb0Y7UUFDcEYsMEZBQTBGO1FBQzFGLFVBQUksT0FBTyxDQUFDLE9BQU8sbUNBQUksSUFBSSxFQUFFO1lBQzNCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxjQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQy9GO2FBQU07WUFDTCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFlBQStCLEVBQUUsS0FBVztRQUN6RSxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNB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R0FBRyxLQUFLO1FBQ1IsT0FBTyxFQUFFO1lBQ1AsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUU7WUFDdkQsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFO1lBQ2pFLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDbkQsU0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxtQ0FBSSxFQUFFO1NBQ3hCO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWJELGdEQWFDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLEtBQXlDO0lBQ3ZFLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDMUIsT0FBTywwQkFBVyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUhELDBDQUdDO0FBRUQsU0FBZ0IsdUJBQXVCO0lBQ3JDLE9BQU87UUFDTCxPQUFPLEVBQUUsV0FBVztRQUNwQixNQUFNLEVBQUUsdUJBQXVCO1FBQy9CLElBQUksRUFBRSx1Q0FBdUM7S0FDOUMsQ0FBQztBQUNKLENBQUM7QUFORCwwREFNQztBQVdELFNBQWdCLGFBQWEsQ0FBQyxJQUFZLEVBQUUsT0FBZTtJQUN6RCxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixHQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUN6QixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFKRCxzQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgeyBBY2NvdW50LCBJU0RLLCBTREssIFNka1Byb3ZpZGVyLCBTZGtGb3JFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2xpYi9hcGkvYXdzLWF1dGgnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uLy4uL2xpYi9hcGkvYXdzLWF1dGgvY3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgVG9vbGtpdEluZm8gfSBmcm9tICcuLi8uLi9saWIvYXBpL3Rvb2xraXQtaW5mbyc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblN0YWNrIH0gZnJvbSAnLi4vLi4vbGliL2FwaS91dGlsL2Nsb3VkZm9ybWF0aW9uJztcblxuY29uc3QgRkFLRV9DUkVERU5USUFMUyA9IG5ldyBBV1MuQ3JlZGVudGlhbHMoeyBhY2Nlc3NLZXlJZDogJ0FDQ0VTUycsIHNlY3JldEFjY2Vzc0tleTogJ1NFQ1JFVCcsIHNlc3Npb25Ub2tlbjogJ1RPS0VOICcgfSk7XG5cbmNvbnN0IEZBS0VfQ1JFREVOVElBTF9DSEFJTiA9IG5ldyBBV1MuQ3JlZGVudGlhbFByb3ZpZGVyQ2hhaW4oW1xuICAoKSA9PiBGQUtFX0NSRURFTlRJQUxTLFxuXSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ja1Nka1Byb3ZpZGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtb2NrIHByb3ZpZGVyIHNob3VsZCBwcm9kdWNlIGEgcmVhbCBTREtcbiAgICpcbiAgICogU29tZSB0ZXN0cyByZXF1aXJlIGEgcmVhbCBTREsgYmVjYXVzZSB0aGV5IHVzZSBgQVdTLW1vY2tgIHRvIHJlcGxhY2VcbiAgICogdGhlIHVuZGVybHlpbmcgY2FsbHMuIE90aGVyIHRlc3RzIGRvIHRoZWlyIHdvcmsgY29tcGxldGVseSB1c2luZyBqZXN0LW1vY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZWFsU2RrPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBbiBTREsgdGhhdCBhbGxvd3MgcmVwbGFjaW5nIChzb21lIG9mKSB0aGUgY2xpZW50c1xuICpcbiAqIEl0cyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNvbnN1bWVyIHRvIHJlcGxhY2UgYWxsIGNhbGxzIHRoYXRcbiAqIGFjdHVhbGx5IHdpbGwgYmUgY2FsbGVkLlxuICovXG5leHBvcnQgY2xhc3MgTW9ja1Nka1Byb3ZpZGVyIGV4dGVuZHMgU2RrUHJvdmlkZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgc2RrOiBJU0RLO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1vY2tTZGtQcm92aWRlck9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKEZBS0VfQ1JFREVOVElBTF9DSEFJTiwgJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNycsIHsgY3VzdG9tVXNlckFnZW50OiAnYXdzLWNkay9qZXN0JyB9KTtcblxuICAgIC8vIFNESyBjb250YWlucyBhIHJlYWwgU0RLLCBzaW5jZSBzb21lIHRlc3QgdXNlICdBV1MtbW9jaycgdG8gcmVwbGFjZSB0aGUgdW5kZXJseWluZ1xuICAgIC8vIEFXUyBjYWxscyB3aGljaCBhIHJlYWwgU0RLIHdvdWxkIGRvLCBhbmQgc29tZSB0ZXN0cyB1c2UgdGhlICdzdHViJyBmdW5jdGlvbmFsaXR5IGJlbG93LlxuICAgIGlmIChvcHRpb25zLnJlYWxTZGsgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5zZGsgPSBuZXcgU0RLKEZBS0VfQ1JFREVOVElBTFMsIHRoaXMuZGVmYXVsdFJlZ2lvbiwgeyBjdXN0b21Vc2VyQWdlbnQ6ICdhd3MtY2RrL2plc3QnIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNkayA9IG5ldyBNb2NrU2RrKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYmFzZUNyZWRlbnRpYWxzUGFydGl0aW9uKF9lbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsIF9tb2RlOiBNb2RlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGRlZmF1bHRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBhY2NvdW50SWQ6ICcxMjM0NTY3ODkwMTInLCBwYXJ0aXRpb246ICdhd3MnIH0pO1xuICB9XG5cbiAgcHVibGljIGZvckVudmlyb25tZW50KCk6IFByb21pc2U8U2RrRm9yRW52aXJvbm1lbnQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc2RrOiB0aGlzLnNkaywgZGlkQXNzdW1lUm9sZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBDbG91ZEZvcm1hdGlvbiBjbGllbnQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3R1YkNsb3VkRm9ybWF0aW9uKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5DbG91ZEZvcm1hdGlvbj4pIHtcbiAgICAodGhpcy5zZGsgYXMgYW55KS5jbG91ZEZvcm1hdGlvbiA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkNsb3VkRm9ybWF0aW9uPihzdHVicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIEVDUiBjbGllbnQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3R1YkVjcihzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuRUNSPikge1xuICAgICh0aGlzLnNkayBhcyBhbnkpLmVjciA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkVDUj4oc3R1YnMpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViRWNzKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5FQ1M+LCBhZGRpdGlvbmFsUHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9KSB7XG4gICAgKHRoaXMuc2RrIGFzIGFueSkuZWNzID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShwYXJ0aWFsQXdzU2VydmljZTxBV1MuRUNTPihzdHVicywgYWRkaXRpb25hbFByb3BlcnRpZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBTMyBjbGllbnQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3R1YlMzKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5TMz4pIHtcbiAgICAodGhpcy5zZGsgYXMgYW55KS5zMyA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLlMzPihzdHVicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIFNUUyBjbGllbnQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3R1YlNUUyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuU1RTPikge1xuICAgICh0aGlzLnNkayBhcyBhbnkpLnN0cyA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLlNUUz4oc3R1YnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBFTEJ2MiBjbGllbnQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3R1YkVMQnYyKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5FTEJ2Mj4pIHtcbiAgICAodGhpcy5zZGsgYXMgYW55KS5lbGJ2MiA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkVMQnYyPihzdHVicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIFNTTSBjbGllbnQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3R1YlNTTShzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuU1NNPikge1xuICAgICh0aGlzLnNkayBhcyBhbnkpLnNzbSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLlNTTT4oc3R1YnMpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViTGFtYmRhKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5MYW1iZGE+LCBhZGRpdGlvbmFsUHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9KSB7XG4gICAgKHRoaXMuc2RrIGFzIGFueSkubGFtYmRhID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShwYXJ0aWFsQXdzU2VydmljZTxBV1MuTGFtYmRhPihzdHVicywgYWRkaXRpb25hbFByb3BlcnRpZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViU3RlcEZ1bmN0aW9ucyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuU3RlcEZ1bmN0aW9ucz4pIHtcbiAgICAodGhpcy5zZGsgYXMgYW55KS5zdGVwRnVuY3Rpb25zID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShwYXJ0aWFsQXdzU2VydmljZTxBV1MuU3RlcEZ1bmN0aW9ucz4oc3R1YnMpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViQ29kZUJ1aWxkKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5Db2RlQnVpbGQ+KSB7XG4gICAgKHRoaXMuc2RrIGFzIGFueSkuY29kZUJ1aWxkID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShwYXJ0aWFsQXdzU2VydmljZTxBV1MuQ29kZUJ1aWxkPihzdHVicykpO1xuICB9XG5cbiAgcHVibGljIHN0dWJDbG91ZFdhdGNoTG9ncyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQ2xvdWRXYXRjaExvZ3M+KSB7XG4gICAgKHRoaXMuc2RrIGFzIGFueSkuY2xvdWRXYXRjaExvZ3MgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHBhcnRpYWxBd3NTZXJ2aWNlPEFXUy5DbG91ZFdhdGNoTG9ncz4oc3R1YnMpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViQXBwU3luYyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQXBwU3luYz4pIHtcbiAgICAodGhpcy5zZGsgYXMgYW55KS5hcHBzeW5jID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShwYXJ0aWFsQXdzU2VydmljZTxBV1MuQXBwU3luYz4oc3R1YnMpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViR2V0RW5kcG9pbnRTdWZmaXgoc3R1YjogKCkgPT4gc3RyaW5nKSB7XG4gICAgdGhpcy5zZGsuZ2V0RW5kcG9pbnRTdWZmaXggPSBzdHViO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrU2RrIGltcGxlbWVudHMgSVNESyB7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UmVnaW9uOiBzdHJpbmcgPSAnYmVybXVkYS10cmlhbmdsZS0xMzM3JztcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYSA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgZWMyID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgc3NtID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgczMgPSBqZXN0LmZuKCk7XG4gIHB1YmxpYyByZWFkb25seSByb3V0ZTUzID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgZWNyID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgZWNzID0gamVzdC5mbigpO1xuICBwdWJsaWMgcmVhZG9ubHkgZWxidjIgPSBqZXN0LmZuKCk7XG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXRzTWFuYWdlciA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGttcyA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHN0ZXBGdW5jdGlvbnMgPSBqZXN0LmZuKCk7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlQnVpbGQgPSBqZXN0LmZuKCk7XG4gIHB1YmxpYyByZWFkb25seSBjbG91ZFdhdGNoTG9ncyA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGFwcHN5bmMgPSBqZXN0LmZuKCk7XG4gIHB1YmxpYyByZWFkb25seSBnZXRFbmRwb2ludFN1ZmZpeCA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGFwcGVuZEN1c3RvbVVzZXJBZ2VudCA9IGplc3QuZm4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHJlbW92ZUN1c3RvbVVzZXJBZ2VudCA9IGplc3QuZm4oKTtcblxuICBwdWJsaWMgY3VycmVudEFjY291bnQoKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGFjY291bnRJZDogJzEyMzQ1Njc4OTAxMicsIHBhcnRpdGlvbjogJ2F3cycgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgQ2xvdWRGb3JtYXRpb24gY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJDbG91ZEZvcm1hdGlvbihzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQ2xvdWRGb3JtYXRpb24+KSB7XG4gICAgdGhpcy5jbG91ZEZvcm1hdGlvbi5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkNsb3VkRm9ybWF0aW9uPihzdHVicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIENsb3VkV2F0Y2ggY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJDbG91ZFdhdGNoTG9ncyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQ2xvdWRXYXRjaExvZ3M+KSB7XG4gICAgdGhpcy5jbG91ZFdhdGNoTG9ncy5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkNsb3VkV2F0Y2hMb2dzPihzdHVicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIEFwcFN5bmMgY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJBcHBTeW5jKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5BcHBTeW5jPikge1xuICAgIHRoaXMuYXBwc3luYy5tb2NrUmV0dXJuVmFsdWUocGFydGlhbEF3c1NlcnZpY2U8QVdTLkFwcFN5bmM+KHN0dWJzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgRUNSIGNsaWVudCB3aXRoIHRoZSBnaXZlbiBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdHViRWNyKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5FQ1I+KSB7XG4gICAgdGhpcy5lY3IubW9ja1JldHVyblZhbHVlKHBhcnRpYWxBd3NTZXJ2aWNlPEFXUy5FQ1I+KHN0dWJzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgU1NNIGNsaWVudCB3aXRoIHRoZSBnaXZlbiBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdHViU3NtKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5TU00+KSB7XG4gICAgdGhpcy5zc20ubW9ja1JldHVyblZhbHVlKHBhcnRpYWxBd3NTZXJ2aWNlPEFXUy5TU00+KHN0dWJzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgZ2V0RW5kcG9pbnRTdWZmaXggY2xpZW50IHdpdGggdGhlIGdpdmVuIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0dWJHZXRFbmRwb2ludFN1ZmZpeChzdHViOiAoKSA9PiBzdHJpbmcpIHtcbiAgICB0aGlzLmdldEVuZHBvaW50U3VmZml4Lm1vY2tSZXR1cm5WYWx1ZShzdHViKCkpO1xuICB9XG59XG5cbi8qKlxuICogV3JhcCBzeW5jaHJvbm91cyBmYWtlIGhhbmRsZXJzIHNvIHRoYXQgdGhleSBzb3J0LW9mIGZ1bmN0aW9uIGxpa2UgYSByZWFsIEFXUyBjbGllbnRcbiAqXG4gKiBGb3IgZXhhbXBsZSwgdHVybnMgYW4gb2JqZWN0IGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0c1xuICoge1xuICogICBzb21lQ2FsbChvcHRzOiBBV1MuU2VydmljZS5Tb21lQ2FsbElucHV0KTogQVdTLlNlcnZpY2UuU29tZUNhbGxPdXRwdXQge1xuICogICAgIHJldHVybiB7Li4ud2hhdGV2ZXIuLi59O1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJbnRvIGFuIG9iamVjdCB0aGF0IGluIHRoZSB0eXBlIHN5c3RlbSBwcmV0ZW5kcyB0byBiZSBhbiAnQVdTLlNlcnZpY2UnXG4gKiBjbGFzcyAoZXZlbiB0aG91Z2ggaXQgcmVhbGx5IGlzbid0KSBhbmQgY2FuIGJlIGNhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZGsuc29tZVNlcnZpY2UoLi4uKTtcbiAqIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VydmljZS5zb21lQ2FsbCguLi4pLnByb21pc2UoKTtcbiAqIGBgYFxuICpcbiAqIFdlIG9ubHkgaW1wbGVtZW50IHRoZSBuYXJyb3cgc3Vic2V0IG9mIHRoZSBBV1MgU0RLIEFQSSB0aGF0IHRoZSBDREsgYWN0dWFsbHlcbiAqIHVzZXMsIGFuZCB3ZSBjaGVhdCBvbiB0aGUgdHlwZXMgdG8gbWFrZSBUeXBlU2NyaXB0IGhhcHB5IG9uIHRoZSByZXN0IG9mIHRoZSBBUEkuXG4gKlxuICogTW9zdCBpbXBvcnRhbnQgZmVhdHVyZSBvZiB0aGlzIGNsYXNzIGlzIHRoYXQgaXQgd2lsbCBkZXJpdmUgdGhlIGlucHV0IGFuZCBvdXRwdXRcbiAqIHR5cGVzIG9mIHRoZSBoYW5kbGVycyBvbiB0aGUgaW5wdXQgb2JqZWN0IGZyb20gdGhlIEFDVFVBTCBBV1MgU2VydmljZSBjbGFzcyxcbiAqIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZGVjbGFyZSB0aGVtLlxuICovXG5mdW5jdGlvbiBwYXJ0aWFsQXdzU2VydmljZTxTPihmbnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8Uz4sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pOiBTIHtcbiAgLy8gU3VwZXIgdW5zYWZlIGluIGhlcmUgYmVjYXVzZSBJIGRvbid0IGtub3cgaG93IHRvIG1ha2UgVHlwZVNjcmlwdCBoYXBweSxcbiAgLy8gYnV0IGF0IGxlYXN0IHRoZSBvdXRlciB0eXBlcyBtYWtlIHN1cmUgZXZlcnl0aGluZyB0aGF0IGhhcHBlbnMgaW4gaGVyZSB3b3JrcyBvdXQuXG4gIGNvbnN0IHJldDogYW55ID0ge307XG5cbiAgZm9yIChjb25zdCBba2V5LCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhmbnMpKSB7XG4gICAgcmV0W2tleV0gPSAoYXJnczogYW55KSA9PiBuZXcgRmFrZUFXU1Jlc3BvbnNlKChoYW5kbGVyIGFzIGFueSkoYXJncykpO1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWxQcm9wZXJ0aWVzKSkge1xuICAgIHJldFtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBCZWNhdXNlIG9mIHRoZSBvdmVybG9hZHMgYW4gQVdTIGhhbmRsZXIgdHlwZSBsb29rcyBsaWtlIHRoaXM6XG4vL1xuLy8gICB7XG4vLyAgICAgIChwYXJhbXM6IElOUFVUU1RSVUNULCBjYWxsYmFjaz86ICgoZXJyOiBBV1NFcnJvciwgZGF0YToge30pID0+IHZvaWQpIHwgdW5kZWZpbmVkKTogUmVxdWVzdDxPVVRQVVQsIC4uLj47XG4vLyAgICAgIChjYWxsYmFjaz86ICgoZXJyOiBBV1MuQVdTRXJyb3IsIGRhdGE6IHt9KSA9PiB2b2lkKSB8IHVuZGVmaW5lZCk6IEFXUy5SZXF1ZXN0PC4uLj47XG4vLyAgIH1cbi8vXG4vLyBHZXQgdGhlIGZpcnN0IG92ZXJsb2FkIGFuZCBleHRyYWN0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IHN0cnVjdCB0eXBlc1xudHlwZSBBd3NDYWxsSW5wdXRPdXRwdXQ8VD4gPVxuICAgIFQgZXh0ZW5kcyB7XG4gICAgICAoYXJnczogaW5mZXIgSU5QVVQsIGNhbGxiYWNrPzogKChlcnI6IEFXUy5BV1NFcnJvciwgZGF0YTogYW55KSA9PiB2b2lkKSB8IHVuZGVmaW5lZCk6IEFXUy5SZXF1ZXN0PGluZmVyIE9VVFBVVCwgQVdTLkFXU0Vycm9yPjtcbiAgICAgIChjYWxsYmFjaz86ICgoZXJyOiBBV1MuQVdTRXJyb3IsIGRhdGE6IHt9KSA9PiB2b2lkKSB8IHVuZGVmaW5lZCk6IEFXUy5SZXF1ZXN0PGFueSwgYW55PjtcbiAgICB9ID8gW0lOUFVULCBPVVRQVVRdIDogVDtcblxuLy8gRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHRoZSBtb2NrIGhhbmRsZXIgZnJvbSB0aGUgdHlwZSBvZiB0aGUgSW5wdXQvT3V0cHV0IHR5cGUgcGFpci5cbi8vIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlICduZXZlcicsIFR5cGVTY3JpcHQgd2lsbCBwcm9wYWdhdGUgaXQgdXB3YXJkcyBtYWtpbmcgaXRcbi8vIGltcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgZmllbGQgdGhhdCBoYXMgJ25ldmVyJyBhbnl3aGVyZSBpbiBpdHMgdHlwZS5cbnR5cGUgTW9ja0hhbmRsZXJUeXBlPEFJPiA9XG4gICAgQUkgZXh0ZW5kcyBbYW55LCBhbnldID8gKGlucHV0OiBBSVswXSkgPT4gQUlbMV0gOiBBSTtcblxuLy8gQW55IHN1YnNldCBvZiB0aGUgZnVsbCB0eXBlIHRoYXQgc3luY2hyb25vdXNseSByZXR1cm5zIHRoZSBvdXRwdXQgc3RydWN0dXJlIGlzIG9rYXlcbmV4cG9ydCB0eXBlIFN5bmNIYW5kbGVyU3Vic2V0T2Y8Uz4gPSB7W0sgaW4ga2V5b2YgU10/OiBNb2NrSGFuZGxlclR5cGU8QXdzQ2FsbElucHV0T3V0cHV0PFNbS10+Pn07XG5cbi8qKlxuICogRmFrZSBBV1MgcmVzcG9uc2UuXG4gKlxuICogV2Ugb25seSBldmVyICdhd2FpdCByZXNwb25zZS5wcm9taXNlKCknIHNvIHRoYXQncyB0aGUgb25seSB0aGluZyB3ZSBpbXBsZW1lbnQgaGVyZS5cbiAqL1xuY2xhc3MgRmFrZUFXU1Jlc3BvbnNlPFQ+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB4OiBUKSB7XG4gIH1cblxuICBwdWJsaWMgcHJvbWlzZSgpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMueCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tCb290c3RyYXBTdGFjayhzZGs6IElTREsgfCB1bmRlZmluZWQsIHN0YWNrPzogUGFydGlhbDxBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2s+KSB7XG4gIHJldHVybiBDbG91ZEZvcm1hdGlvblN0YWNrLmZyb21TdGF0aWNJbmZvcm1hdGlvbigoc2RrID8/IG5ldyBNb2NrU2RrKCkpLmNsb3VkRm9ybWF0aW9uKCksICdDREtUb29sa2l0Jywge1xuICAgIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSxcbiAgICBTdGFja05hbWU6ICdDREtUb29sa2l0JyxcbiAgICBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgLi4uc3RhY2ssXG4gICAgT3V0cHV0czogW1xuICAgICAgeyBPdXRwdXRLZXk6ICdCdWNrZXROYW1lJywgT3V0cHV0VmFsdWU6ICdCVUNLRVRfTkFNRScgfSxcbiAgICAgIHsgT3V0cHV0S2V5OiAnQnVja2V0RG9tYWluTmFtZScsIE91dHB1dFZhbHVlOiAnQlVDS0VUX0VORFBPSU5UJyB9LFxuICAgICAgeyBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJywgT3V0cHV0VmFsdWU6ICcxJyB9LFxuICAgICAgLi4uc3RhY2s/Lk91dHB1dHMgPz8gW10sXG4gICAgXSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVG9vbGtpdEluZm8oc3RhY2s/OiBQYXJ0aWFsPEFXUy5DbG91ZEZvcm1hdGlvbi5TdGFjaz4pIHtcbiAgY29uc3Qgc2RrID0gbmV3IE1vY2tTZGsoKTtcbiAgcmV0dXJuIFRvb2xraXRJbmZvLmZyb21TdGFjayhtb2NrQm9vdHN0cmFwU3RhY2soc2RrLCBzdGFjayksIHNkayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrUmVzb2x2ZWRFbnZpcm9ubWVudCgpOiBjeGFwaS5FbnZpcm9ubWVudCB7XG4gIHJldHVybiB7XG4gICAgYWNjb3VudDogJzEyMzQ1Njc4OScsXG4gICAgcmVnaW9uOiAnYmVybXVkYS10cmlhbmdsZS0xMzM3JyxcbiAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5L2Jlcm11ZGEtdHJpYW5nbGUtMTMzNycsXG4gIH07XG59XG5cbi8vIEplc3QgaGVscGVyc1xuXG4vLyBBbiBvYmplY3Qgb24gd2hpY2ggYWxsIGNhbGxhYmxlcyBhcmUgSmVzdCBNb2Nrc1xuZXhwb3J0IHR5cGUgTW9ja2VkT2JqZWN0PFMgZXh0ZW5kcyBvYmplY3Q+ID0ge1tLIGluIGtleW9mIFNdOiBNb2NrZWRGdW5jdGlvbjxSZXF1aXJlZDxTPltLXT59O1xuXG4vLyBJZiBhIGZ1bmN0aW9uLCB0aGVuIGEgbW9ja2VkIHZlcnNpb24gb2YgaXQsIG90aGVyd2lzZSBqdXN0IFRcbnR5cGUgTW9ja2VkRnVuY3Rpb248VD4gPSBUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcbiAgPyBqZXN0Lk1vY2tJbnN0YW5jZTxSZXR1cm5UeXBlPFQ+LCBqZXN0LkFyZ3NUeXBlPFQ+PlxuICA6IFQ7XG5leHBvcnQgZnVuY3Rpb24gZXJyb3JXaXRoQ29kZShjb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICBjb25zdCByZXQgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIChyZXQgYXMgYW55KS5jb2RlID0gY29kZTtcbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==