@lifeready/core 6.0.5 → 6.1.2

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 (101) hide show
  1. package/bundles/lifeready-core.umd.js +3485 -7369
  2. package/bundles/lifeready-core.umd.js.map +1 -1
  3. package/bundles/lifeready-core.umd.min.js +1 -1
  4. package/bundles/lifeready-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/auth2/auth.config.js +57 -0
  6. package/esm2015/lib/auth2/auth2.gql.private.js +8 -1
  7. package/esm2015/lib/auth2/auth2.service.js +3 -4
  8. package/esm2015/lib/auth2/auth2.types.js +1 -1
  9. package/esm2015/lib/encryption/encryption.service.js +7 -6
  10. package/esm2015/lib/file-upload/file-upload.service.js +4 -4
  11. package/esm2015/lib/idle/idle.service.js +1 -2
  12. package/esm2015/lib/item2/item2.service.js +17 -46
  13. package/esm2015/lib/key/key-graph.service.js +3 -3
  14. package/esm2015/lib/key/key-meta.service.js +16 -64
  15. package/esm2015/lib/key/key.types.js +6 -1
  16. package/esm2015/lib/key-exchange/key-exchange2.service.js +6 -25
  17. package/esm2015/lib/life-ready.module.js +2 -9
  18. package/esm2015/lib/password/password.service.js +1 -1
  19. package/esm2015/lib/profile/profile-details.service.js +120 -75
  20. package/esm2015/lib/profile/profile.gql.js +134 -1
  21. package/esm2015/lib/profile/profile.service.js +8 -5
  22. package/esm2015/lib/profile/profile.types.js +14 -3
  23. package/esm2015/lib/shared-contact-card/shared-contact-card.service.js +2 -2
  24. package/esm2015/lib/tp-password-reset/tp-password-reset.types.js +1 -1
  25. package/esm2015/lib/trusted-party/trusted-party2.service.js +3 -7
  26. package/esm2015/lifeready-core.js +7 -9
  27. package/esm2015/public-api.js +2 -20
  28. package/fesm2015/lifeready-core.js +3223 -6588
  29. package/fesm2015/lifeready-core.js.map +1 -1
  30. package/lib/auth2/auth2.gql.private.d.ts +15 -2
  31. package/lib/auth2/auth2.service.d.ts +1 -1
  32. package/lib/auth2/auth2.types.d.ts +19 -2
  33. package/lib/file-upload/file-upload.service.d.ts +2 -2
  34. package/lib/item2/item2.service.d.ts +12 -75
  35. package/lib/key/key-meta.service.d.ts +8 -1
  36. package/lib/key/key.types.d.ts +4 -1
  37. package/lib/key-exchange/key-exchange2.service.d.ts +5 -66
  38. package/lib/password/password.service.d.ts +1 -1
  39. package/lib/profile/profile-details.service.d.ts +10 -11
  40. package/lib/profile/profile.gql.d.ts +12 -0
  41. package/lib/profile/profile.service.d.ts +1 -3
  42. package/lib/profile/profile.types.d.ts +31 -4
  43. package/lib/shared-contact-card/shared-contact-card.service.d.ts +1 -2
  44. package/lib/tp-password-reset/tp-password-reset.types.d.ts +3 -3
  45. package/lib/trusted-party/trusted-party2.service.d.ts +2 -7
  46. package/lifeready-core.d.ts +6 -8
  47. package/lifeready-core.metadata.json +1 -1
  48. package/package.json +1 -1
  49. package/public-api.d.ts +1 -19
  50. package/esm2015/lib/auth/auth.config.js +0 -57
  51. package/esm2015/lib/auth/auth.gql.js +0 -16
  52. package/esm2015/lib/auth/auth.types.js +0 -18
  53. package/esm2015/lib/auth/life-ready-auth.service.js +0 -568
  54. package/esm2015/lib/category/category-meta.service.js +0 -99
  55. package/esm2015/lib/category/category.gql.js +0 -385
  56. package/esm2015/lib/category/category.service.js +0 -361
  57. package/esm2015/lib/category/category.types.js +0 -29
  58. package/esm2015/lib/key-exchange/key-exchange.gql.js +0 -188
  59. package/esm2015/lib/key-exchange/key-exchange.service.js +0 -436
  60. package/esm2015/lib/key-exchange/key-exchange.types.js +0 -7
  61. package/esm2015/lib/message/message.gql.js +0 -32
  62. package/esm2015/lib/message/message.service.js +0 -118
  63. package/esm2015/lib/message/message.types.js +0 -2
  64. package/esm2015/lib/plan/plan.gql.js +0 -123
  65. package/esm2015/lib/plan/plan.service.js +0 -150
  66. package/esm2015/lib/plan/plan.types.js +0 -11
  67. package/esm2015/lib/record/record-attachment.service.js +0 -102
  68. package/esm2015/lib/record/record.gql.js +0 -182
  69. package/esm2015/lib/record/record.service.js +0 -194
  70. package/esm2015/lib/record/record.types.js +0 -15
  71. package/esm2015/lib/record-type/record-type.service.js +0 -75
  72. package/esm2015/lib/record-type/record-type.types.js +0 -28
  73. package/esm2015/lib/trusted-party/trusted-party.gql.js +0 -148
  74. package/esm2015/lib/trusted-party/trusted-party.service.js +0 -308
  75. package/esm2015/lib/trusted-party/trusted-party.types.js +0 -41
  76. package/lib/auth/auth.gql.d.ts +0 -12
  77. package/lib/auth/auth.types.d.ts +0 -52
  78. package/lib/auth/life-ready-auth.service.d.ts +0 -73
  79. package/lib/category/category-meta.service.d.ts +0 -23
  80. package/lib/category/category.gql.d.ts +0 -44
  81. package/lib/category/category.service.d.ts +0 -66
  82. package/lib/category/category.types.d.ts +0 -75
  83. package/lib/key-exchange/key-exchange.gql.d.ts +0 -9
  84. package/lib/key-exchange/key-exchange.service.d.ts +0 -37
  85. package/lib/key-exchange/key-exchange.types.d.ts +0 -188
  86. package/lib/message/message.gql.d.ts +0 -13
  87. package/lib/message/message.service.d.ts +0 -36
  88. package/lib/message/message.types.d.ts +0 -12
  89. package/lib/plan/plan.gql.d.ts +0 -11
  90. package/lib/plan/plan.service.d.ts +0 -34
  91. package/lib/plan/plan.types.d.ts +0 -32
  92. package/lib/record/record-attachment.service.d.ts +0 -16
  93. package/lib/record/record.gql.d.ts +0 -14
  94. package/lib/record/record.service.d.ts +0 -25
  95. package/lib/record/record.types.d.ts +0 -56
  96. package/lib/record-type/record-type.service.d.ts +0 -11
  97. package/lib/record-type/record-type.types.d.ts +0 -50
  98. package/lib/trusted-party/trusted-party.gql.d.ts +0 -9
  99. package/lib/trusted-party/trusted-party.service.d.ts +0 -43
  100. package/lib/trusted-party/trusted-party.types.d.ts +0 -101
  101. /package/lib/{auth → auth2}/auth.config.d.ts +0 -0
@@ -108,7 +108,6 @@ export class IdleService {
108
108
  const { expiresAfterSeconds } = yield this.keepalivePost();
109
109
  // Persist the derived passKey
110
110
  yield this.keyService.persistMasterKey(masterKey, expiresAfterSeconds);
111
- console.log('setMasterKey() done');
112
111
  });
113
112
  }
114
113
  onPing() {
@@ -157,4 +156,4 @@ IdleService.ctorParameters = () => [
157
156
  { type: KeyService },
158
157
  { type: AuthClass }
159
158
  ];
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2lkbGUvaWRsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFZLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBbUIsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7O0FBY3ZELE1BQU0sT0FBTyxXQUFXO0lBUXRCLFlBQzZCLE1BQWdCLEVBQ25DLElBQWdCLEVBQ2hCLElBQVUsRUFDVixTQUFvQixFQUNwQixVQUFzQixFQUN0QixJQUFlO1FBTEksV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUNuQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQU07UUFDVixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBVztRQWJSLG9CQUFlLEdBQUcscUJBQXFCLENBQUM7UUFDeEMsZUFBVSxHQUFHLHFCQUFxQixDQUFDO1FBRTVD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QyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Ozs7WUFoTEYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7NENBVUksTUFBTSxTQUFDLFNBQVM7WUFuQ1osVUFBVTtZQUdnQixJQUFJO1lBQzlCLFNBQVM7WUFDVCxVQUFVO1lBSFYsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhDbGFzcyB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9hdXRoL2xpYi1lc20vQXV0aCc7XG5pbXBvcnQgeyBERUZBVUxUX0lOVEVSUlVQVFNPVVJDRVMsIElkbGUgfSBmcm9tICdAbmctaWRsZS9jb3JlJztcbmltcG9ydCB7IEtlZXBhbGl2ZSB9IGZyb20gJ0BuZy1pZGxlL2tlZXBhbGl2ZSc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS5zZXJ2aWNlJztcbmltcG9ydCB7IEtleSB9IGZyb20gJy4uL2tleS9rZXkudHlwZXMnO1xuaW1wb3J0IHsgaHR0cE9wdGlvbnMsIEtjQ29uZmlnLCBLQ19DT05GSUcgfSBmcm9tICcuLi9saWZlLXJlYWR5LmNvbmZpZyc7XG5pbXBvcnQge1xuICBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uLFxuICBLY0JhZFN0YXRlRXhjZXB0aW9uLFxufSBmcm9tICcuLi9fY29tbW9uL2V4Y2VwdGlvbnMnO1xuaW1wb3J0IHsgQ29uZmlnLCBLZWVwYWxpdmVSZXN1bHQgfSBmcm9tICcuL2lkbGUudHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElkbGVTZXJ2aWNlSW5pdCB7XG4gIC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIEV2ZW50RW1pdHRlciBpbnN0ZWFkIG9mIGEgY2FsbGJhY2suXG4gIG9uVGltZW91dD86ICgoKSA9PiB2b2lkKSB8ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGw7XG4gIG9uS2VlcGFsaXZlPzogKCgpID0+IHZvaWQpIHwgKCgpID0+IFByb21pc2U8dm9pZD4pIHwgbnVsbDtcbiAgaWRsZVNlYz86IG51bWJlcjtcbiAgdGltZW91dFNlYz86IG51bWJlcjtcbiAga2VlcEFsaXZlSW50ZXJ2YWxTZWM/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJZGxlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgSURMRV9FWFBJUllfS0VZID0gJ25nMklkbGUubWFpbi5leHBpcnknO1xuICBwcml2YXRlIHJlYWRvbmx5IElETElOR19LRVkgPSAnbmcySWRsZS5tYWluLmlkbGluZyc7XG5cbiAgcHJpdmF0ZSBpbml0Q2FsbGVkID0gZmFsc2U7XG4gIHByaXZhdGUgb25UaW1lb3V0OiAoKCkgPT4gdm9pZCkgfCAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsO1xuICBwcml2YXRlIG9uS2VlcGFsaXZlOiAoKCkgPT4gdm9pZCkgfCAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoS0NfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogS2NDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgaWRsZTogSWRsZSxcbiAgICBwcml2YXRlIGtlZXBhbGl2ZTogS2VlcGFsaXZlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhDbGFzc1xuICApIHt9XG5cbiAgcHJpdmF0ZSBhc3NlcnRJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbml0Q2FsbGVkKSB7XG4gICAgICB0aHJvdyBuZXcgS2NCYWRTdGF0ZUV4Y2VwdGlvbignQ2FsbCBJZGxlU2VydmljZS5pbml0KCkgZmlyc3QuJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXQocGFyYW1zPzogSWRsZVNlcnZpY2VJbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaW5pdENhbGxlZCkge1xuICAgICAgdGhyb3cgbmV3IEtjQmFkU3RhdGVFeGNlcHRpb24oXG4gICAgICAgICdJZGxlU2VydmljZS5pbml0KCkgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIElkbGVTZXJ2aWNlLnN0YXJ0KCkgY2FsbHMgaW5pdCgpIHdpdGggZGVmYXVsdCB2YWx1ZXMgaWYgaW5pdCgpIGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0Q2FsbGVkID0gdHJ1ZTtcblxuICAgIC8vIERlZmF1bHRzXG4gICAgcGFyYW1zID0ge1xuICAgICAgb25UaW1lb3V0OiBudWxsLFxuICAgICAgb25LZWVwYWxpdmU6IG51bGwsXG4gICAgICBpZGxlU2VjOiBDb25maWcuSURMRSxcbiAgICAgIHRpbWVvdXRTZWM6IENvbmZpZy5USU1FT1VULFxuICAgICAga2VlcEFsaXZlSW50ZXJ2YWxTZWM6IENvbmZpZy5LRUVQX0FMSVZFX0lOVEVSVkFMLFxuICAgICAgLi4ucGFyYW1zLFxuICAgIH07XG5cbiAgICAvLyBJZiB0aW1lb3V0U2VjID09IDAgdGhlbiB0aGUgb25UaW1lb3V0KCkgY2FsbGJhY2sgaXMgbmV2ZXIgY2FsbGVkLlxuICAgIGlmIChwYXJhbXMudGltZW91dFNlYyA8IDAuMDEpIHtcbiAgICAgIHRocm93IG5ldyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICAgICAnTWluaW11bSB2YWx1ZSBmb3IgSWRsZVNlcnZpY2UuaW5pdCh7IHRpbWVvdXRTZWMgfSkgaXMgMC4wMSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vblRpbWVvdXQgPSBwYXJhbXMub25UaW1lb3V0O1xuICAgIHRoaXMub25LZWVwYWxpdmUgPSBwYXJhbXMub25LZWVwYWxpdmU7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTZXR1cCBJZGxlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gc2V0cyBhbiBpZGxlIHRpbWVvdXQgb2YgNSBzZWNvbmRzLCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICB0aGlzLmlkbGUuc2V0SWRsZShwYXJhbXMuaWRsZVNlYyk7XG4gICAgLy8gc2V0cyBhIHRpbWVvdXQgcGVyaW9kIG9mIDUgc2Vjb25kcy4gYWZ0ZXIgMTAgc2Vjb25kcyBvZiBpbmFjdGl2aXR5LCB0aGUgdXNlciB3aWxsIGJlIGNvbnNpZGVyZWQgdGltZWQgb3V0LlxuICAgIHRoaXMuaWRsZS5zZXRUaW1lb3V0KHBhcmFtcy50aW1lb3V0U2VjKTtcbiAgICAvLyBzZXRzIHRoZSBkZWZhdWx0IGludGVycnVwdHMsIGluIHRoaXMgY2FzZSwgdGhpbmdzIGxpa2UgY2xpY2tzLCBzY3JvbGxzLCB0b3VjaGVzIHRvIHRoZSBkb2N1bWVudFxuICAgIHRoaXMuaWRsZS5zZXRJbnRlcnJ1cHRzKERFRkFVTFRfSU5URVJSVVBUU09VUkNFUyk7XG5cbiAgICB0aGlzLmlkbGUub25JZGxlRW5kLnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZygnSWRsZSBzdG9wcGVkJykpO1xuICAgIHRoaXMuaWRsZS5vbklkbGVTdGFydC5zdWJzY3JpYmUoKCkgPT4gY29uc29sZS5sb2coJ0lkbGUgc3RhcnRlZCcpKTtcblxuICAgIHRoaXMuaWRsZS5vblRpbWVvdXQuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdJZGxlIHRpbWVkIG91dCcpO1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMub25UaW1lb3V0ICYmIHRoaXMub25UaW1lb3V0KCkpO1xuICAgIH0pO1xuICAgIHRoaXMuaWRsZS5vblRpbWVvdXRXYXJuaW5nLnN1YnNjcmliZSgoY291bnRkb3duKSA9PlxuICAgICAgY29uc29sZS5sb2coYFdpbGwgdGltZW91dCBpbiAke2NvdW50ZG93bn0gc2Vjb25kcyFgKVxuICAgICk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTZXR1cCBLZWVwYWxpdmVcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3JpYnZuZHZzL25nMi1pZGxlI3JlYWRtZVxuICAgIC8vIG5nLWlkbGUgd2lsbCBpbnN0cnVjdCBAbmctaWRsZS9rZWVwYWxpdmUgdG8gcGluZyB3aGlsZSB0aGUgdXNlciBpcyBhY3RpdmUsIGFuZCBzdG9wIG9uY2VcbiAgICAvLyB0aGV5IGdvIGlkbGUgb3IgdGltZSBvdXQuIFdoZW4gdGhlIHVzZXIgcmVzdW1lcyBhY3Rpdml0eSBvciB0aGUgaWRsZSBzdGF0ZSBpcyByZXNldCwgaXQgd2lsbFxuICAgIC8vIHBpbmcgaW1tZWRpYXRlbHkgYW5kIHRoZW4gcmVzdW1lIHBpbmdpbmcuXG4gICAgdGhpcy5rZWVwYWxpdmUuaW50ZXJ2YWwocGFyYW1zLmtlZXBBbGl2ZUludGVydmFsU2VjKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBLZWVwIGFsaXZlIGludGVydmFsIHNldCBhdDogJHtDb25maWcuS0VFUF9BTElWRV9JTlRFUlZBTH0gc2Vjb25kc2BcbiAgICApO1xuXG4gICAgdGhpcy5rZWVwYWxpdmUub25QaW5nLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uUGluZygpKTtcblxuICAgIC8vIElmIHRoZSBicm93c2VyIHRhYiBoYXMgYmVlbiBjbG9zZWQgZm9yIGEgcGVyaW9kIGxvbmdlciB0aGFudCB0aGUgaW5hY3Rpdml0eVxuICAgIC8vIHBlcmlvZCwgdGhlbiB3ZSBzaG91bGQgbG9nb3V0IHJpZ2h0IGZyb20gdGhlIHN0YXJ0LlxuICAgIGNvbnN0IGlkbGVFeHBpcnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLklETEVfRVhQSVJZX0tFWSk7XG4gICAgaWYgKFxuICAgICAgaWRsZUV4cGlyeSAmJlxuICAgICAgcGFyc2VJbnQoaWRsZUV4cGlyeSwgMTApICsgdGhpcy5pZGxlLmdldFRpbWVvdXQoKSAqIDEwMDAgPCBEYXRlLm5vdygpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy5vblRpbWVvdXQgJiYgdGhpcy5vblRpbWVvdXQoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGtlZXBhbGl2ZVBvc3QoKTogUHJvbWlzZTx7XG4gICAgZXhwaXJlc0FmdGVyU2Vjb25kczogbnVtYmVyO1xuICAgIGtlZXBhbGl2ZVJlc3VsdDogS2VlcGFsaXZlUmVzdWx0O1xuICB9PiB7XG4gICAgY29uc3Qga2VlcGFsaXZlUmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwXG4gICAgICAucG9zdDxLZWVwYWxpdmVSZXN1bHQ+KFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy5hdXRoVXJsfWF1dGgva2VlcGFsaXZlL2AsXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIC9hdXRoL2tlZXBhbGl2ZS8gd2lsbCBiZSBleHRlbmRpbmcgdGhlIHNlc3Npb25zIGNvb2tpZS5cbiAgICAgICAgYXdhaXQgaHR0cE9wdGlvbnModGhpcy5hdXRoLCB0aGlzLmNvbmZpZylcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZWVwYWxpdmVSZXN1bHQsXG4gICAgICBleHBpcmVzQWZ0ZXJTZWNvbmRzOlxuICAgICAgICB0aGlzLmlkbGUuZ2V0SWRsZSgpICtcbiAgICAgICAgdGhpcy5pZGxlLmdldFRpbWVvdXQoKSArXG4gICAgICAgIHRoaXMua2VlcGFsaXZlLmludGVydmFsKCksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZXJzaXN0TWFzdGVyS2V5KG1hc3RlcktleTogS2V5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBBUEkgY2FsbCBleHRlbmRzIHRoZSBzZXJ2ZXItc2lkZSBzZXNzaW9uLCB0aGUgc2Vzc2lvbiBjb29raWUgZXhwaXJ5LCByZWZyZXNoIGtleSBjb29raWVcbiAgICAvLyBleHBpcnksIGFuZCByZXR1cm5zIHRoZSBzZXNzaW9uIGV4cGlyeS5cbiAgICAvLyBOT1RFIFVzZSB0aW1lIGRlbHRhIHJhdGhlciB0aGFuIGFic29sdXRlIHRpbWUsIHNpbmNlIGNsaWVudCBjbG9jayBhbmQgc2VydmVyIGNsb2NrIG1heWJlXG4gICAgLy8gb3V0IG9mIHN5bmMuIFdlIGNhbid0IHVzZSB0aGUgc2VydmVyVGltZSgpIGZ1bmN0aW9uYWxpdHkgYmVjYXVzZSB0aGUgY29va2llIGV4cGlyeSBzdGlsbFxuICAgIC8vIHJ1biBvbiBsb2NhbCBjbG9jay5cbiAgICBjb25zdCB7IGV4cGlyZXNBZnRlclNlY29uZHMgfSA9IGF3YWl0IHRoaXMua2VlcGFsaXZlUG9zdCgpO1xuXG4gICAgLy8gUGVyc2lzdCB0aGUgZGVyaXZlZCBwYXNzS2V5XG4gICAgYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLnBlcnNpc3RNYXN0ZXJLZXkobWFzdGVyS2V5LCBleHBpcmVzQWZ0ZXJTZWNvbmRzKTtcblxuICAgIGNvbnNvbGUubG9nKCdzZXRNYXN0ZXJLZXkoKSBkb25lJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uUGluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBLZWVwIGFsaXZlIHRyaWdnZXJlZCBhdCB0aW1lOiAke0RhdGUubm93KCl9LiBJbnRlcnZhbCBzZXQgYXQ6ICR7dGhpcy5rZWVwYWxpdmUuaW50ZXJ2YWwoKX0gc2Vjb25kc2BcbiAgICApO1xuXG4gICAgLy8gS2VlcGFsaXZlIEFQSSB3aWxsIGV4dGVuZCB0aGUgc2Vzc2lvbiBleHBpcnkuXG4gICAgY29uc3QgeyBleHBpcmVzQWZ0ZXJTZWNvbmRzIH0gPSBhd2FpdCB0aGlzLmtlZXBhbGl2ZVBvc3QoKTtcblxuICAgIC8vIEV4dGVuZCB0aGUgZXhwaXJ5IG9mIHRoZSBwZXJzaXN0ZWQga2V5XG4gICAgYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLnNldE1hc3RlcktleUV4cGlyZXNBZnRlclNlY29uZHMoZXhwaXJlc0FmdGVyU2Vjb25kcyk7XG5cbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy5vbktlZXBhbGl2ZSAmJiB0aGlzLm9uS2VlcGFsaXZlKCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pbml0Q2FsbGVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pZGxlLmlzUnVubmluZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUGluZyBkb2VzIG5vdCBzZWVtIHRvIGhhcHBlbiByaWdodCBhdCB0aGUgc3RhcnQuIFNvIHdlIGNhbGwgaXQgZXhwbGljaXRseVxuICAgIGF3YWl0IHRoaXMub25QaW5nKCk7XG5cbiAgICB0aGlzLmlkbGUud2F0Y2goKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaWRsZS5zdG9wKCk7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldCgpIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLklETEVfRVhQSVJZX0tFWSk7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5JRExJTkdfS0VZKTtcbiAgfVxufVxuIl19
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2lkbGUvaWRsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFZLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBbUIsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7O0FBY3ZELE1BQU0sT0FBTyxXQUFXO0lBUXRCLFlBQzZCLE1BQWdCLEVBQ25DLElBQWdCLEVBQ2hCLElBQVUsRUFDVixTQUFvQixFQUNwQixVQUFzQixFQUN0QixJQUFlO1FBTEksV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUNuQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQU07UUFDVixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBVztRQWJSLG9CQUFlLEdBQUcscUJBQXFCLENBQUM7UUFDeEMsZUFBVSxHQUFHLHFCQUFxQixDQUFDO1FBRTVD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Q0FBQzs7OztZQTlLRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs0Q0FVSSxNQUFNLFNBQUMsU0FBUztZQW5DWixVQUFVO1lBR2dCLElBQUk7WUFDOUIsU0FBUztZQUNULFVBQVU7WUFIVixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aENsYXNzIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgvbGliLWVzbS9BdXRoJztcbmltcG9ydCB7IERFRkFVTFRfSU5URVJSVVBUU09VUkNFUywgSWRsZSB9IGZyb20gJ0BuZy1pZGxlL2NvcmUnO1xuaW1wb3J0IHsgS2VlcGFsaXZlIH0gZnJvbSAnQG5nLWlkbGUva2VlcGFsaXZlJztcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnLi4va2V5L2tleS50eXBlcyc7XG5pbXBvcnQgeyBodHRwT3B0aW9ucywgS2NDb25maWcsIEtDX0NPTkZJRyB9IGZyb20gJy4uL2xpZmUtcmVhZHkuY29uZmlnJztcbmltcG9ydCB7XG4gIEtjQmFkQXJndW1lbnRFeGNlcHRpb24sXG4gIEtjQmFkU3RhdGVFeGNlcHRpb24sXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBDb25maWcsIEtlZXBhbGl2ZVJlc3VsdCB9IGZyb20gJy4vaWRsZS50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRsZVNlcnZpY2VJbml0IHtcbiAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgRXZlbnRFbWl0dGVyIGluc3RlYWQgb2YgYSBjYWxsYmFjay5cbiAgb25UaW1lb3V0PzogKCgpID0+IHZvaWQpIHwgKCgpID0+IFByb21pc2U8dm9pZD4pIHwgbnVsbDtcbiAgb25LZWVwYWxpdmU/OiAoKCkgPT4gdm9pZCkgfCAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsO1xuICBpZGxlU2VjPzogbnVtYmVyO1xuICB0aW1lb3V0U2VjPzogbnVtYmVyO1xuICBrZWVwQWxpdmVJbnRlcnZhbFNlYz86IG51bWJlcjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIElkbGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBJRExFX0VYUElSWV9LRVkgPSAnbmcySWRsZS5tYWluLmV4cGlyeSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgSURMSU5HX0tFWSA9ICduZzJJZGxlLm1haW4uaWRsaW5nJztcblxuICBwcml2YXRlIGluaXRDYWxsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvblRpbWVvdXQ6ICgoKSA9PiB2b2lkKSB8ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGw7XG4gIHByaXZhdGUgb25LZWVwYWxpdmU6ICgoKSA9PiB2b2lkKSB8ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChLQ19DT05GSUcpIHByaXZhdGUgY29uZmlnOiBLY0NvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBpZGxlOiBJZGxlLFxuICAgIHByaXZhdGUga2VlcGFsaXZlOiBLZWVwYWxpdmUsXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aDogQXV0aENsYXNzXG4gICkge31cblxuICBwcml2YXRlIGFzc2VydEluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmluaXRDYWxsZWQpIHtcbiAgICAgIHRocm93IG5ldyBLY0JhZFN0YXRlRXhjZXB0aW9uKCdDYWxsIElkbGVTZXJ2aWNlLmluaXQoKSBmaXJzdC4nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW5pdChwYXJhbXM/OiBJZGxlU2VydmljZUluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbml0Q2FsbGVkKSB7XG4gICAgICB0aHJvdyBuZXcgS2NCYWRTdGF0ZUV4Y2VwdGlvbihcbiAgICAgICAgJ0lkbGVTZXJ2aWNlLmluaXQoKSBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4gSWRsZVNlcnZpY2Uuc3RhcnQoKSBjYWxscyBpbml0KCkgd2l0aCBkZWZhdWx0IHZhbHVlcyBpZiBpbml0KCkgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRDYWxsZWQgPSB0cnVlO1xuXG4gICAgLy8gRGVmYXVsdHNcbiAgICBwYXJhbXMgPSB7XG4gICAgICBvblRpbWVvdXQ6IG51bGwsXG4gICAgICBvbktlZXBhbGl2ZTogbnVsbCxcbiAgICAgIGlkbGVTZWM6IENvbmZpZy5JRExFLFxuICAgICAgdGltZW91dFNlYzogQ29uZmlnLlRJTUVPVVQsXG4gICAgICBrZWVwQWxpdmVJbnRlcnZhbFNlYzogQ29uZmlnLktFRVBfQUxJVkVfSU5URVJWQUwsXG4gICAgICAuLi5wYXJhbXMsXG4gICAgfTtcblxuICAgIC8vIElmIHRpbWVvdXRTZWMgPT0gMCB0aGVuIHRoZSBvblRpbWVvdXQoKSBjYWxsYmFjayBpcyBuZXZlciBjYWxsZWQuXG4gICAgaWYgKHBhcmFtcy50aW1lb3V0U2VjIDwgMC4wMSkge1xuICAgICAgdGhyb3cgbmV3IEtjQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICdNaW5pbXVtIHZhbHVlIGZvciBJZGxlU2VydmljZS5pbml0KHsgdGltZW91dFNlYyB9KSBpcyAwLjAxJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm9uVGltZW91dCA9IHBhcmFtcy5vblRpbWVvdXQ7XG4gICAgdGhpcy5vbktlZXBhbGl2ZSA9IHBhcmFtcy5vbktlZXBhbGl2ZTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNldHVwIElkbGVcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBzZXRzIGFuIGlkbGUgdGltZW91dCBvZiA1IHNlY29uZHMsIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgIHRoaXMuaWRsZS5zZXRJZGxlKHBhcmFtcy5pZGxlU2VjKTtcbiAgICAvLyBzZXRzIGEgdGltZW91dCBwZXJpb2Qgb2YgNSBzZWNvbmRzLiBhZnRlciAxMCBzZWNvbmRzIG9mIGluYWN0aXZpdHksIHRoZSB1c2VyIHdpbGwgYmUgY29uc2lkZXJlZCB0aW1lZCBvdXQuXG4gICAgdGhpcy5pZGxlLnNldFRpbWVvdXQocGFyYW1zLnRpbWVvdXRTZWMpO1xuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgaW50ZXJydXB0cywgaW4gdGhpcyBjYXNlLCB0aGluZ3MgbGlrZSBjbGlja3MsIHNjcm9sbHMsIHRvdWNoZXMgdG8gdGhlIGRvY3VtZW50XG4gICAgdGhpcy5pZGxlLnNldEludGVycnVwdHMoREVGQVVMVF9JTlRFUlJVUFRTT1VSQ0VTKTtcblxuICAgIHRoaXMuaWRsZS5vbklkbGVFbmQuc3Vic2NyaWJlKCgpID0+IGNvbnNvbGUubG9nKCdJZGxlIHN0b3BwZWQnKSk7XG4gICAgdGhpcy5pZGxlLm9uSWRsZVN0YXJ0LnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZygnSWRsZSBzdGFydGVkJykpO1xuXG4gICAgdGhpcy5pZGxlLm9uVGltZW91dC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ0lkbGUgdGltZWQgb3V0Jyk7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy5vblRpbWVvdXQgJiYgdGhpcy5vblRpbWVvdXQoKSk7XG4gICAgfSk7XG4gICAgdGhpcy5pZGxlLm9uVGltZW91dFdhcm5pbmcuc3Vic2NyaWJlKChjb3VudGRvd24pID0+XG4gICAgICBjb25zb2xlLmxvZyhgV2lsbCB0aW1lb3V0IGluICR7Y291bnRkb3dufSBzZWNvbmRzIWApXG4gICAgKTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNldHVwIEtlZXBhbGl2ZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL21vcmlidm5kdnMvbmcyLWlkbGUjcmVhZG1lXG4gICAgLy8gbmctaWRsZSB3aWxsIGluc3RydWN0IEBuZy1pZGxlL2tlZXBhbGl2ZSB0byBwaW5nIHdoaWxlIHRoZSB1c2VyIGlzIGFjdGl2ZSwgYW5kIHN0b3Agb25jZVxuICAgIC8vIHRoZXkgZ28gaWRsZSBvciB0aW1lIG91dC4gV2hlbiB0aGUgdXNlciByZXN1bWVzIGFjdGl2aXR5IG9yIHRoZSBpZGxlIHN0YXRlIGlzIHJlc2V0LCBpdCB3aWxsXG4gICAgLy8gcGluZyBpbW1lZGlhdGVseSBhbmQgdGhlbiByZXN1bWUgcGluZ2luZy5cbiAgICB0aGlzLmtlZXBhbGl2ZS5pbnRlcnZhbChwYXJhbXMua2VlcEFsaXZlSW50ZXJ2YWxTZWMpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEtlZXAgYWxpdmUgaW50ZXJ2YWwgc2V0IGF0OiAke0NvbmZpZy5LRUVQX0FMSVZFX0lOVEVSVkFMfSBzZWNvbmRzYFxuICAgICk7XG5cbiAgICB0aGlzLmtlZXBhbGl2ZS5vblBpbmcuc3Vic2NyaWJlKCgpID0+IHRoaXMub25QaW5nKCkpO1xuXG4gICAgLy8gSWYgdGhlIGJyb3dzZXIgdGFiIGhhcyBiZWVuIGNsb3NlZCBmb3IgYSBwZXJpb2QgbG9uZ2VyIHRoYW50IHRoZSBpbmFjdGl2aXR5XG4gICAgLy8gcGVyaW9kLCB0aGVuIHdlIHNob3VsZCBsb2dvdXQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuXG4gICAgY29uc3QgaWRsZUV4cGlyeSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuSURMRV9FWFBJUllfS0VZKTtcbiAgICBpZiAoXG4gICAgICBpZGxlRXhwaXJ5ICYmXG4gICAgICBwYXJzZUludChpZGxlRXhwaXJ5LCAxMCkgKyB0aGlzLmlkbGUuZ2V0VGltZW91dCgpICogMTAwMCA8IERhdGUubm93KClcbiAgICApIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLm9uVGltZW91dCAmJiB0aGlzLm9uVGltZW91dCgpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMga2VlcGFsaXZlUG9zdCgpOiBQcm9taXNlPHtcbiAgICBleHBpcmVzQWZ0ZXJTZWNvbmRzOiBudW1iZXI7XG4gICAga2VlcGFsaXZlUmVzdWx0OiBLZWVwYWxpdmVSZXN1bHQ7XG4gIH0+IHtcbiAgICBjb25zdCBrZWVwYWxpdmVSZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PEtlZXBhbGl2ZVJlc3VsdD4oXG4gICAgICAgIGAke3RoaXMuY29uZmlnLmF1dGhVcmx9YXV0aC9rZWVwYWxpdmUvYCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gL2F1dGgva2VlcGFsaXZlLyB3aWxsIGJlIGV4dGVuZGluZyB0aGUgc2Vzc2lvbnMgY29va2llLlxuICAgICAgICBhd2FpdCBodHRwT3B0aW9ucyh0aGlzLmF1dGgsIHRoaXMuY29uZmlnKVxuICAgICAgKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtlZXBhbGl2ZVJlc3VsdCxcbiAgICAgIGV4cGlyZXNBZnRlclNlY29uZHM6XG4gICAgICAgIHRoaXMuaWRsZS5nZXRJZGxlKCkgK1xuICAgICAgICB0aGlzLmlkbGUuZ2V0VGltZW91dCgpICtcbiAgICAgICAgdGhpcy5rZWVwYWxpdmUuaW50ZXJ2YWwoKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBlcnNpc3RNYXN0ZXJLZXkobWFzdGVyS2V5OiBLZXkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUaGUga2VlcGFsaXZlIEFQSSBjYWxsIGV4dGVuZHMgdGhlIHNlcnZlci1zaWRlIHNlc3Npb24sIHRoZSBzZXNzaW9uIGNvb2tpZSBleHBpcnksIHJlZnJlc2gga2V5IGNvb2tpZVxuICAgIC8vIGV4cGlyeSwgYW5kIHJldHVybnMgdGhlIHNlc3Npb24gZXhwaXJ5LlxuICAgIC8vIE5PVEUgVXNlIHRpbWUgZGVsdGEgcmF0aGVyIHRoYW4gYWJzb2x1dGUgdGltZSwgc2luY2UgY2xpZW50IGNsb2NrIGFuZCBzZXJ2ZXIgY2xvY2sgbWF5YmVcbiAgICAvLyBvdXQgb2Ygc3luYy4gV2UgY2FuJ3QgdXNlIHRoZSBzZXJ2ZXJUaW1lKCkgZnVuY3Rpb25hbGl0eSBiZWNhdXNlIHRoZSBjb29raWUgZXhwaXJ5IHN0aWxsXG4gICAgLy8gcnVuIG9uIGxvY2FsIGNsb2NrLlxuICAgIGNvbnN0IHsgZXhwaXJlc0FmdGVyU2Vjb25kcyB9ID0gYXdhaXQgdGhpcy5rZWVwYWxpdmVQb3N0KCk7XG5cbiAgICAvLyBQZXJzaXN0IHRoZSBkZXJpdmVkIHBhc3NLZXlcbiAgICBhd2FpdCB0aGlzLmtleVNlcnZpY2UucGVyc2lzdE1hc3RlcktleShtYXN0ZXJLZXksIGV4cGlyZXNBZnRlclNlY29uZHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvblBpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgS2VlcCBhbGl2ZSB0cmlnZ2VyZWQgYXQgdGltZTogJHtEYXRlLm5vdygpfS4gSW50ZXJ2YWwgc2V0IGF0OiAke3RoaXMua2VlcGFsaXZlLmludGVydmFsKCl9IHNlY29uZHNgXG4gICAgKTtcblxuICAgIC8vIEtlZXBhbGl2ZSBBUEkgd2lsbCBleHRlbmQgdGhlIHNlc3Npb24gZXhwaXJ5LlxuICAgIGNvbnN0IHsgZXhwaXJlc0FmdGVyU2Vjb25kcyB9ID0gYXdhaXQgdGhpcy5rZWVwYWxpdmVQb3N0KCk7XG5cbiAgICAvLyBFeHRlbmQgdGhlIGV4cGlyeSBvZiB0aGUgcGVyc2lzdGVkIGtleVxuICAgIGF3YWl0IHRoaXMua2V5U2VydmljZS5zZXRNYXN0ZXJLZXlFeHBpcmVzQWZ0ZXJTZWNvbmRzKGV4cGlyZXNBZnRlclNlY29uZHMpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMub25LZWVwYWxpdmUgJiYgdGhpcy5vbktlZXBhbGl2ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaW5pdENhbGxlZCkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaWRsZS5pc1J1bm5pbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFBpbmcgZG9lcyBub3Qgc2VlbSB0byBoYXBwZW4gcmlnaHQgYXQgdGhlIHN0YXJ0LiBTbyB3ZSBjYWxsIGl0IGV4cGxpY2l0bHlcbiAgICBhd2FpdCB0aGlzLm9uUGluZygpO1xuXG4gICAgdGhpcy5pZGxlLndhdGNoKCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLmlkbGUuc3RvcCgpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXQoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5JRExFX0VYUElSWV9LRVkpO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuSURMSU5HX0tFWSk7XG4gIH1cbn1cbiJdfQ==
@@ -7,6 +7,7 @@ import { FileUploadService } from '../file-upload/file-upload.service';
7
7
  import { KeyFactoryService } from '../key/key-factory.service';
8
8
  import { KeyGraphService } from '../key/key-graph.service';
9
9
  import { KeyService } from '../key/key.service';
10
+ import { PayloadType } from '../key/key.types';
10
11
  import { LockService } from '../lock/lock.service';
11
12
  import { KcBadArgumentException } from '../_common/exceptions';
12
13
  import { RunOutsideAngular } from '../_common/run-outside-angular';
@@ -36,10 +37,10 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
36
37
  }
37
38
  downloadFileContent(options) {
38
39
  return __awaiter(this, void 0, void 0, function* () {
39
- const fileContent = yield this.fileUploadService.downloadEncryptedFile2(options.fileStateNodeId);
40
+ const fileContent = yield this.fileUploadService.downloadEncryptedFile(options.fileStateNodeId);
40
41
  const fileStateKey = yield this.keyGraph.getKey(options.fileStateKeyId, () => this.getFileStateKeyId(options.fileStateNodeId));
41
42
  return this.keyGraph.decryptFromString(fileStateKey, fileContent, {
42
- payloadType: 'ArrayBuffer',
43
+ payloadType: PayloadType.UINT_8_ARRAY,
43
44
  });
44
45
  });
45
46
  }
@@ -73,11 +74,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
73
74
  return this.keyGraph.getKey(fileKeyId, () => this.getFileKeyId(fileId));
74
75
  });
75
76
  }
76
- createDirectoryExec(options) {
77
- return this.mutate(this.createDirectoryMutation(options));
78
- }
79
77
  createDirectory(options) {
80
- return this.createDirectoryMutation(options);
78
+ return this.mutate(this.createDirectoryMutation(options));
81
79
  }
82
80
  createDirectoryMutation(options) {
83
81
  return __awaiter(this, void 0, void 0, function* () {
@@ -89,11 +87,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
89
87
  });
90
88
  });
91
89
  }
92
- updateDirectoryExec(options) {
93
- return this.mutate(this.updateDirectoryMutation(options));
94
- }
95
90
  updateDirectory(options) {
96
- return this.updateDirectoryMutation(options);
91
+ return this.mutate(this.updateDirectoryMutation(options));
97
92
  }
98
93
  updateDirectoryMutation(options) {
99
94
  return __awaiter(this, void 0, void 0, function* () {
@@ -105,11 +100,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
105
100
  });
106
101
  });
107
102
  }
108
- deleteDirectoryExec(id) {
109
- return this.mutate(this.deleteDirectoryMutation(id));
110
- }
111
103
  deleteDirectory(id) {
112
- return this.deleteDirectoryMutation(id);
104
+ return this.mutate(this.deleteDirectoryMutation(id));
113
105
  }
114
106
  deleteDirectoryMutation(id) {
115
107
  return new LrMutation({
@@ -121,11 +113,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
121
113
  },
122
114
  });
123
115
  }
124
- createFileExec(options) {
125
- return this.mutate(this.createFileMutation(options));
126
- }
127
116
  createFile(options) {
128
- return this.createFileMutation(options);
117
+ return this.mutate(this.createFileMutation(options));
129
118
  }
130
119
  createFileMutation(options) {
131
120
  return __awaiter(this, void 0, void 0, function* () {
@@ -137,11 +126,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
137
126
  });
138
127
  });
139
128
  }
140
- updateFileExec(options) {
141
- return this.mutate(this.updateFileMutation(options));
142
- }
143
129
  updateFile(options) {
144
- return this.updateFileMutation(options);
130
+ return this.mutate(this.updateFileMutation(options));
145
131
  }
146
132
  updateFileMutation(options) {
147
133
  return __awaiter(this, void 0, void 0, function* () {
@@ -153,11 +139,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
153
139
  });
154
140
  });
155
141
  }
156
- revertFileExec(options) {
157
- return this.mutate(this.revertFileMutation(options));
158
- }
159
142
  revertFile(options) {
160
- return this.revertFileMutation(options);
143
+ return this.mutate(this.revertFileMutation(options));
161
144
  }
162
145
  revertFileMutation(options) {
163
146
  return __awaiter(this, void 0, void 0, function* () {
@@ -169,11 +152,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
169
152
  });
170
153
  });
171
154
  }
172
- deleteFileExec(id) {
173
- return this.mutate(this.deleteFileMutation(id));
174
- }
175
155
  deleteFile(id) {
176
- return this.deleteFileMutation(id);
156
+ return this.mutate(this.deleteFileMutation(id));
177
157
  }
178
158
  deleteFileMutation(id) {
179
159
  return new LrMutation({
@@ -185,11 +165,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
185
165
  },
186
166
  });
187
167
  }
188
- archiveDirectoryExec(directoryId, options) {
189
- return this.mutate(this.archiveDirectoryMutation(directoryId, options));
190
- }
191
168
  archiveDirectory(directoryId, options) {
192
- return this.archiveDirectoryMutation(directoryId, options);
169
+ return this.mutate(this.archiveDirectoryMutation(directoryId, options));
193
170
  }
194
171
  archiveDirectoryMutation(directoryId, options) {
195
172
  return new LrMutation({
@@ -202,7 +179,7 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
202
179
  },
203
180
  });
204
181
  }
205
- archiveFileExec(fileId) {
182
+ archiveFile(fileId) {
206
183
  return this.mutate(this.archiveFileMutation(fileId));
207
184
  }
208
185
  archiveFileMutation(fileId) {
@@ -215,11 +192,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
215
192
  },
216
193
  });
217
194
  }
218
- unarchiveDirectoryExec(directoryId, options) {
219
- return this.mutate(this.unarchiveDirectoryMutation(directoryId, options));
220
- }
221
195
  unarchiveDirectory(directoryId, options) {
222
- return this.unarchiveDirectoryMutation(directoryId, options);
196
+ return this.mutate(this.unarchiveDirectoryMutation(directoryId, options));
223
197
  }
224
198
  unarchiveDirectoryMutation(directoryId, options) {
225
199
  return new LrMutation({
@@ -232,11 +206,8 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
232
206
  },
233
207
  });
234
208
  }
235
- unarchiveFileExec(fileId) {
236
- return this.mutate(this.unarchiveFileMutation(fileId));
237
- }
238
209
  unarchiveFile(fileId) {
239
- return this.unarchiveFileMutation(fileId);
210
+ return this.mutate(this.unarchiveFileMutation(fileId));
240
211
  }
241
212
  unarchiveFileMutation(fileId) {
242
213
  return new LrMutation({
@@ -327,7 +298,7 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
327
298
  }
328
299
  if (existing.rootDirectories.edges.length === 0) {
329
300
  // Doesn't exist yet, create it
330
- const createDirectory = yield this.createDirectory({
301
+ const createDirectory = yield this.createDirectoryMutation({
331
302
  asRootDirectory: true,
332
303
  plainMetaJson: Item2Service_1.TEMP_DIRECTORY_PLAIN_META,
333
304
  });
@@ -381,7 +352,7 @@ let Item2Service = Item2Service_1 = class Item2Service extends LrService {
381
352
  requestWindowMs: options.requestWindowMs,
382
353
  });
383
354
  // Create the directory that has contents
384
- const directory = (yield this.createDirectoryExec({
355
+ const directory = (yield this.createDirectory({
385
356
  cipherMetaClearJson: options.cipherMetaClearJson,
386
357
  parentDirectories: [
387
358
  {
@@ -618,4 +589,4 @@ Item2Service = Item2Service_1 = __decorate([
618
589
  })
619
590
  ], Item2Service);
620
591
  export { Item2Service };
621
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbTIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9pdGVtMi9pdGVtMi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ25CLHVDQUF1QyxFQUN2Qyw4QkFBOEIsRUFDOUIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsZ0NBQWdDLEVBQ2hDLDJCQUEyQixFQUMzQixrQkFBa0IsRUFDbEIsMEJBQTBCLEVBQzFCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsa0JBQWtCLEdBQ25CLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxpQkFBaUIsRUFD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QyxXQUFXLElBQ2hDO1FBQ0osQ0FBQztLQUFBO0lBRWEsd0JBQXdCLENBQUMsT0FBaUM7O1lBQ3RFLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV6RSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXhFLHVDQUNLLEtBQUssS0FDUixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFDdEI7UUFDSixDQUFDO0tBQUE7SUFFTyxRQUFRO1FBQ2QseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7Q0FDRixDQUFBO0FBMXJCUSxzQ0FBeUIsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvQyw2Q0FBZ0MsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZELE1BQU0sRUFBRTtRQUNOO1lBQ0UsUUFBUSxFQUFFLGNBQVksQ0FBQyx5QkFBeUI7U0FDakQ7S0FDRjtDQUNGLENBQUMsQ0FBQzs7O1lBNUJKLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBaEU4QixNQUFNO1lBQWhCLFFBQVE7WUFLcEIsaUJBQWlCO1lBR2pCLFVBQVU7WUFGVixpQkFBaUI7WUFDakIsZUFBZTtZQUVmLFdBQVc7WUFMWCxZQUFZOztBQTZEUixZQUFZO0lBTnhCLGlCQUFpQixDQUFDO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7R0FJVyxZQUFZLENBNHNCeEI7U0E1c0JZLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHsgSUQsIEpTT05PYmplY3QsIExyUmVsYXlJZElucHV0IH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEF1dGgyU2VydmljZSB9IGZyb20gJy4uL2F1dGgyL2F1dGgyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS1ncmFwaC5zZXJ2aWNlJztcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9sb2NrL2xvY2suc2VydmljZSc7XG5pbXBvcnQgeyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uIH0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbixcbiAgQXJjaGl2ZUZpbGVNdXRhdGlvbixcbiAgQmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd011dGF0aW9uLFxuICBDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb24sXG4gIENoYW5nZUZpbGVQYXJlbnRzTXV0YXRpb24sXG4gIENyZWF0ZURpcmVjdG9yeU11dGF0aW9uLFxuICBDcmVhdGVGaWxlTXV0YXRpb24sXG4gIERlbGV0ZURpcmVjdG9yeU11dGF0aW9uLFxuICBEZWxldGVGaWxlTXV0YXRpb24sXG4gIFJldmVydEZpbGVNdXRhdGlvbixcbiAgU2V0RGlyZWN0b3J5Q29uZmlkZW50aWFsTXV0YXRpb24sXG4gIFNldEZpbGVDb25maWRlbnRpYWxNdXRhdGlvbixcbiAgVGVtcERpcmVjdG9yeVF1ZXJ5LFxuICBVbmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbixcbiAgVW5hcmNoaXZlRmlsZU11dGF0aW9uLFxuICBVcGRhdGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgVXBkYXRlRmlsZU11dGF0aW9uLFxufSBmcm9tICcuL2l0ZW0yLmdxbCc7XG5pbXBvcnQge1xuICBEaXJlY3RvcnlLZXlRdWVyeSxcbiAgRmlsZUtleVF1ZXJ5LFxuICBGaWxlU3RhdGVLZXlRdWVyeSxcbn0gZnJvbSAnLi9pdGVtMi5ncWwucHJpdmF0ZSc7XG5pbXBvcnQge1xuICBBcmNoaXZlRGlyZWN0b3J5T3B0aW9ucyxcbiAgQmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd09wdGlvbnMsXG4gIENoYW5nZURpcmVjdG9yeVBhcmVudHNPcHRpb25zLFxuICBDaGFuZ2VGaWxlUGFyZW50c09wdGlvbnMsXG4gIENoYW5nZUl0ZW1QYXJlbnRzT3B0aW9ucyxcbiAgQ3JlYXRlRGlyZWN0b3J5T3B0aW9ucyxcbiAgQ3JlYXRlRGlyZWN0b3J5VHJlZU9wdGlvbnMsXG4gIENyZWF0ZUZpbGVPcHRpb25zLFxuICBEb3dubG9hZEZpbGVDb250ZW50T3B0aW9ucyxcbiAgRmlsZVBhcmVudERpcmVjdG9yeUlucHV0LFxuICBJZEtleVBhaXIsXG4gIFBhcmVudERpcmVjdG9yeUlucHV0LFxuICBQYXJlbnREaXJlY3RvcnlPcHRpb25zLFxuICBQYXJlbnRSb290RGlyZWN0b3J5SW5wdXQsXG4gIFJldmVydEZpbGVPcHRpb25zLFxuICBTZXREaXJlY3RvcnlDb25maWRlbnRpYWxPcHRpb25zLFxuICBTZXRGaWxlQ29uZmlkZW50aWFsT3B0aW9ucyxcbiAgVW5hcmNoaXZlRGlyZWN0b3J5T3B0aW9ucyxcbiAgVXBkYXRlRGlyZWN0b3J5T3B0aW9ucyxcbiAgVXBkYXRlRmlsZU9wdGlvbnMsXG59IGZyb20gJy4vaXRlbTIudHlwZXMnO1xuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSXRlbTJTZXJ2aWNlIGV4dGVuZHMgTHJTZXJ2aWNlIHtcbiAgLy8gQ2FjaGluZyB0aGUgdGVtcCBkaXJlY3RvcnkuXG4gIHByaXZhdGUgdGVtcERpcmVjdG9yeTogSWRLZXlQYWlyID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgZmlsZVVwbG9hZFNlcnZpY2U6IEZpbGVVcGxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGtleUZhY3Rvcnk6IEtleUZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGgyU2VydmljZTogQXV0aDJTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB0aGlzLmF1dGgyU2VydmljZS5hZGRMb2dvdXRMaXN0ZW5lcigoKSA9PiB0aGlzLm9uTG9nb3V0KCkpO1xuICB9XG5cbiAgc3RhdGljIFRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEEgPSB7IGtjVHlwZTogJ3RlbXAnIH07XG4gIHN0YXRpYyBURU1QX0RJUkVDVE9SWV9QTEFJTl9NRVRBX0ZJTFRFUiA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBmaWx0ZXI6IFtcbiAgICAgIHtcbiAgICAgICAgY29udGFpbnM6IEl0ZW0yU2VydmljZS5URU1QX0RJUkVDVE9SWV9QTEFJTl9NRVRBLFxuICAgICAgfSxcbiAgICBdLFxuICB9KTtcblxuICBhc3luYyBkb3dubG9hZEZpbGVDb250ZW50KFxuICAgIG9wdGlvbnM6IERvd25sb2FkRmlsZUNvbnRlbnRPcHRpb25zXG4gICk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IHRoaXMuZmlsZVVwbG9hZFNlcnZpY2UuZG93bmxvYWRFbmNyeXB0ZWRGaWxlMihcbiAgICAgIG9wdGlvbnMuZmlsZVN0YXRlTm9kZUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGZpbGVTdGF0ZUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgb3B0aW9ucy5maWxlU3RhdGVLZXlJZCxcbiAgICAgICgpID0+IHRoaXMuZ2V0RmlsZVN0YXRlS2V5SWQob3B0aW9ucy5maWxlU3RhdGVOb2RlSWQpXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nKGZpbGVTdGF0ZUtleSwgZmlsZUNvbnRlbnQsIHtcbiAgICAgIHBheWxvYWRUeXBlOiAnQXJyYXlCdWZmZXInLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGlyZWN0b3J5S2V5SWQoZGlyZWN0b3J5SWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgICBxdWVyeTogRGlyZWN0b3J5S2V5UXVlcnksXG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGlkOiBkaXJlY3RvcnlJZCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS5kaXJlY3Rvcnkua2V5SWQ7XG4gIH1cblxuICBhc3luYyBnZXRGaWxlS2V5SWQoZmlsZUlkOiBMclJlbGF5SWRJbnB1dCkge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IEZpbGVLZXlRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgaWQ6IGZpbGVJZCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS5maWxlLmtleUlkO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGlyZWN0b3J5S2V5KFxuICAgIGRpcmVjdG9yeUlkOiBMclJlbGF5SWRJbnB1dCxcbiAgICBkaXJlY3RvcnlLZXlJZD86IExyUmVsYXlJZElucHV0XG4gICkge1xuICAgIHJldHVybiB0aGlzLmtleUdyYXBoLmdldEtleShkaXJlY3RvcnlLZXlJZCwgKCkgPT5cbiAgICAgIHRoaXMuZ2V0RGlyZWN0b3J5S2V5SWQoZGlyZWN0b3J5SWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVLZXkoZmlsZUlkOiBMclJlbGF5SWRJbnB1dCwgZmlsZUtleUlkPzogTHJSZWxheUlkSW5wdXQpIHtcbiAgICByZXR1cm4gdGhpcy5rZXlHcmFwaC5nZXRLZXkoZmlsZUtleUlkLCAoKSA9PiB0aGlzLmdldEZpbGVLZXlJZChmaWxlSWQpKTtcbiAgfVxuXG4gIGNyZWF0ZURpcmVjdG9yeUV4ZWMob3B0aW9uczogQ3JlYXRlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZURpcmVjdG9yeU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGNyZWF0ZURpcmVjdG9yeShvcHRpb25zOiBDcmVhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRGlyZWN0b3J5TXV0YXRpb24ob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVEaXJlY3RvcnlNdXRhdGlvbihvcHRpb25zOiBDcmVhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZURpcmVjdG9yeUV4ZWMob3B0aW9uczogVXBkYXRlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZURpcmVjdG9yeU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIHVwZGF0ZURpcmVjdG9yeShvcHRpb25zOiBVcGRhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlRGlyZWN0b3J5TXV0YXRpb24ob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEaXJlY3RvcnlNdXRhdGlvbihvcHRpb25zOiBVcGRhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlRGlyZWN0b3J5KG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZURpcmVjdG9yeUV4ZWMoaWQ6IElEKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuZGVsZXRlRGlyZWN0b3J5TXV0YXRpb24oaWQpKTtcbiAgfVxuXG4gIGRlbGV0ZURpcmVjdG9yeShpZDogSUQpIHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGVEaXJlY3RvcnlNdXRhdGlvbihpZCk7XG4gIH1cblxuICBkZWxldGVEaXJlY3RvcnlNdXRhdGlvbihpZDogSUQpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZURpcmVjdG9yeU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IGlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUZpbGVFeGVjKG9wdGlvbnM6IENyZWF0ZUZpbGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlRmlsZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGNyZWF0ZUZpbGUob3B0aW9uczogQ3JlYXRlRmlsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVGaWxlTXV0YXRpb24ob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlRmlsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZUZpbGVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlRmlsZShvcHRpb25zKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVGaWxlRXhlYyhvcHRpb25zOiBVcGRhdGVGaWxlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZUZpbGVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICB1cGRhdGVGaWxlKG9wdGlvbnM6IFVwZGF0ZUZpbGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlRmlsZU11dGF0aW9uKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsZU11dGF0aW9uKG9wdGlvbnM6IFVwZGF0ZUZpbGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVGaWxlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZUZpbGUob3B0aW9ucyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV2ZXJ0RmlsZUV4ZWMob3B0aW9uczogUmV2ZXJ0RmlsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZXZlcnRGaWxlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgcmV2ZXJ0RmlsZShvcHRpb25zOiBSZXZlcnRGaWxlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnJldmVydEZpbGVNdXRhdGlvbihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHJldmVydEZpbGVNdXRhdGlvbihvcHRpb25zOiBSZXZlcnRGaWxlT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogUmV2ZXJ0RmlsZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBvcHRpb25zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZUZpbGVFeGVjKGlkOiBJRCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmRlbGV0ZUZpbGVNdXRhdGlvbihpZCkpO1xuICB9XG5cbiAgZGVsZXRlRmlsZShpZDogSUQpIHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGVGaWxlTXV0YXRpb24oaWQpO1xuICB9XG5cbiAgZGVsZXRlRmlsZU11dGF0aW9uKGlkOiBJRCkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlRmlsZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgZmlsZUlkOiBpZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhcmNoaXZlRGlyZWN0b3J5RXhlYyhkaXJlY3RvcnlJZDogc3RyaW5nLCBvcHRpb25zOiBBcmNoaXZlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbihkaXJlY3RvcnlJZCwgb3B0aW9ucykpO1xuICB9XG5cbiAgYXJjaGl2ZURpcmVjdG9yeShkaXJlY3RvcnlJZDogc3RyaW5nLCBvcHRpb25zOiBBcmNoaXZlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbihkaXJlY3RvcnlJZCwgb3B0aW9ucyk7XG4gIH1cblxuICBhcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24oXG4gICAgZGlyZWN0b3J5SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBBcmNoaXZlRGlyZWN0b3J5T3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IEFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGRpcmVjdG9yeUlkLFxuICAgICAgICAgIHJlY3Vyc2l2ZTogb3B0aW9ucy5yZWN1cnNpdmUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXJjaGl2ZUZpbGVFeGVjKGZpbGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuYXJjaGl2ZUZpbGVNdXRhdGlvbihmaWxlSWQpKTtcbiAgfVxuXG4gIGFyY2hpdmVGaWxlTXV0YXRpb24oZmlsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IEFyY2hpdmVGaWxlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdW5hcmNoaXZlRGlyZWN0b3J5RXhlYyhcbiAgICBkaXJlY3RvcnlJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFVuYXJjaGl2ZURpcmVjdG9yeU9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24oZGlyZWN0b3J5SWQsIG9wdGlvbnMpKTtcbiAgfVxuXG4gIHVuYXJjaGl2ZURpcmVjdG9yeShkaXJlY3RvcnlJZDogc3RyaW5nLCBvcHRpb25zOiBVbmFyY2hpdmVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMudW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24oZGlyZWN0b3J5SWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgdW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24oXG4gICAgZGlyZWN0b3J5SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBVbmFyY2hpdmVEaXJlY3RvcnlPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBkaXJlY3RvcnlJZCxcbiAgICAgICAgICByZWN1cnNpdmU6IG9wdGlvbnMucmVjdXJzaXZlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVuYXJjaGl2ZUZpbGVFeGVjKGZpbGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudW5hcmNoaXZlRmlsZU11dGF0aW9uKGZpbGVJZCkpO1xuICB9XG5cbiAgdW5hcmNoaXZlRmlsZShmaWxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnVuYXJjaGl2ZUZpbGVNdXRhdGlvbihmaWxlSWQpO1xuICB9XG5cbiAgdW5hcmNoaXZlRmlsZU11dGF0aW9uKGZpbGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVbmFyY2hpdmVGaWxlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgY2hhbmdlRGlyZWN0b3J5UGFyZW50cyhvcHRpb25zOiBDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNoYW5nZURpcmVjdG9yeVBhcmVudHNNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb24ob3B0aW9uczogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENoYW5nZURpcmVjdG9yeVBhcmVudHNNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQ2hhbmdlRGlyZWN0b3J5UGFyZW50cyhvcHRpb25zKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjaGFuZ2VGaWxlUGFyZW50cyhvcHRpb25zOiBDaGFuZ2VGaWxlUGFyZW50c09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jaGFuZ2VGaWxlUGFyZW50c011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNoYW5nZUZpbGVQYXJlbnRzTXV0YXRpb24ob3B0aW9uczogQ2hhbmdlRmlsZVBhcmVudHNPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDaGFuZ2VGaWxlUGFyZW50c011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVDaGFuZ2VGaWxlUGFyZW50cyhvcHRpb25zKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBiZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93KFxuICAgIG9wdGlvbnM6IEJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3dPcHRpb25zXG4gICkge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3dNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogU2NoZWR1bGUgY2xlYW51cCBvZiB0aGUgaGFyZCBsaW5rcyBpbiBhIGRpcmVjdG9yeS5cbiAgICogVGhlIHNlcnZlciB3aWxsIGRlbGV0ZSBhbGwgaGFyZCBsaW5rIHdpdGhpbiB0aGUgZGlyZWN0b3J5IHdpdGhpbiBhIHRpbWUgd2luZG93OiBzdGFydGluZyBmcm9tIG5vdyBhbmRcbiAgICogZW5kaW5nIGF0IHJlcXVlc3RXaW5kb3dNcyBhZnRlciBub3cuXG4gICAqIFRoZSBzZXJ2ZXIgZGVjaWRlcyBfd2hlbl8gaXQgd2lsbCBwZXJmb3JtIHRoZSBkZWxldGUuIEl0J3Mgbm90IGd1YXJhbnRlZWQgdGhhdCBpdCB3aWxsIHBlcmZvcm1cbiAgICogdGhlIGRlbGV0ZSBhdCBcIm5vdyArIHJlcXVlc3RXaW5kb3dNc1wiLCBidXQgaXQgd2lsbCBoYXBwZW4gYXQgc29tZSB0aW1lIGFmdGVyIFwibm93ICsgcmVxdWVzdFdpbmRvd01zXCIuXG4gICAqIFRoaXMgYWxsb3dzIG11bHRpcGxlIG92ZXJsYXBwaW5nIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBzZXJ2ZXIgYWxsb2NhdGVzIGVub3VnaCBmb3IgZWFjaCByZXF1ZXN0LlxuICAgKiBUaGUgc2VydmVyIGhhcyBhIHNldHRpbmcgdGhhdCBhbGxvd3MgZm9yIGEgbWF4aW11bSB2YWx1ZSBvbiByZXF1ZXN0V2luZG93TXMuIElmIHRoZSByZXF1ZXN0ZWQgdmFsdWVcbiAgICogaXMgbGFyZ2VyIHRoYW4gdGhpcyBtYXhpbXVtLCB0aGUgY2FsbCB3aWxsIGZhaWwuXG4gICAqL1xuICBhc3luYyBiZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93TXV0YXRpb24oXG4gICAgb3B0aW9uczogQmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd09wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBCZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IG9wdGlvbnMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG1heSByYWlzZSBWRVJTSU9OX01JU01BVENIIGV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uXG4gICAqIHdoZW4gbXVsdGlwbGUgY2xpZW50cyB0cnkgdG8gY3JlYXRlIHRoZSB0ZW1wIGRpcmVjdG9yeS5cbiAgICpcbiAgICogVE9ETyBUaGVyZSBpcyBhIHJldHJ5IG1lY2hhbmlzbSBpbiBncmFwaHFsIHdpdGggZXhwb25lbnRpYWwgYmFjayBvZmYgYnV0IHRoYXQncyBpbnRlcm5hbC5cbiAgICogQnV0IG5lZWQgdG8gdXNlIGFuIGV4cG9uZW50aWFsIGJhY2sgb2ZmIGxpYiBpZiB3ZSB3YW50IHRvIHJldHJ5IGhlcmUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBJRCBvZiB0aGUgdGVtcCBkaXJlY3RvcnlcbiAgICpcbiAgICovXG4gIGFzeW5jIGVuc3VyZVRlbXBEaXJlY3RvcnkoKTogUHJvbWlzZTxJZEtleVBhaXI+IHtcbiAgICBpZiAodGhpcy50ZW1wRGlyZWN0b3J5KSB7XG4gICAgICByZXR1cm4gdGhpcy50ZW1wRGlyZWN0b3J5O1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5xdWVyeSh7XG4gICAgICBxdWVyeTogVGVtcERpcmVjdG9yeVF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIHBsYWluTWV0YTogSXRlbTJTZXJ2aWNlLlRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEFfRklMVEVSLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChleGlzdGluZy5yb290RGlyZWN0b3JpZXMuZWRnZXMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG1vcmUgdGhhbiAxIHRlbXAgZGlyZWN0b3J5IChwbGFpbk1ldGEgZmlsdGVyOiAke0l0ZW0yU2VydmljZS5URU1QX0RJUkVDVE9SWV9QTEFJTl9NRVRBX0ZJTFRFUn0pYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXhpc3Rpbmcucm9vdERpcmVjdG9yaWVzLmVkZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXQsIGNyZWF0ZSBpdFxuICAgICAgY29uc3QgY3JlYXRlRGlyZWN0b3J5ID0gYXdhaXQgdGhpcy5jcmVhdGVEaXJlY3Rvcnkoe1xuICAgICAgICBhc1Jvb3REaXJlY3Rvcnk6IHRydWUsXG4gICAgICAgIHBsYWluTWV0YUpzb246IEl0ZW0yU2VydmljZS5URU1QX0RJUkVDVE9SWV9QTEFJTl9NRVRBLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9wdGltaXN0aWMgbG9jayBvbiB0aGUgY3VycmVudCB1c2VyLlxuICAgICAgY29uc3QgdXBkYXRlTG9jayA9IHRoaXMubG9ja1NlcnZpY2UudXBkYXRlTG9ja011dGF0aW9uKHtcbiAgICAgICAgdmVyc2lvbjogZXhpc3RpbmcubG9jaz8udmVyc2lvbixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBCZWNhdXNlIHRoaXMubXV0YXRlKCkgb25seSBoYW5kbGVzIHNpbXBsZSB0eXBlcyB3ZSBuZWVkIHRvIHVzZSB0aGUgbW9yZVxuICAgICAgLy8gYWR2YW5jZWQgdGhpcy5sckdyYXBoUUwubHJNdXRhdGUoKVxuICAgICAgY29uc3QgW2NyZWF0ZURpcmVjdG9yeVJlc3VsdF0gPSBhd2FpdCB0aGlzLmxyR3JhcGhRTC5sck11dGF0ZShbXG4gICAgICAgIGNyZWF0ZURpcmVjdG9yeSxcbiAgICAgICAgdXBkYXRlTG9jayxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCB7IGlkLCBrZXlJZCB9ID0gY3JlYXRlRGlyZWN0b3J5UmVzdWx0LmNyZWF0ZURpcmVjdG9yeS5kaXJlY3Rvcnk7XG5cbiAgICAgIHRoaXMudGVtcERpcmVjdG9yeSA9IHtcbiAgICAgICAgaWQsXG4gICAgICAgIGtleUlkLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV0dXJuIGV4aXN0aW5nIHRlbXBcbiAgICAgIGNvbnN0IHsgaWQsIGtleUlkIH0gPSBleGlzdGluZy5yb290RGlyZWN0b3JpZXMuZWRnZXNbMF0ubm9kZTtcblxuICAgICAgdGhpcy50ZW1wRGlyZWN0b3J5ID0ge1xuICAgICAgICBpZCxcbiAgICAgICAga2V5SWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlbXBEaXJlY3Rvcnk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVEaXJlY3RvcnlUcmVlKG9wdGlvbnM6IENyZWF0ZURpcmVjdG9yeVRyZWVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlRGlyZWN0b3J5VHJlZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgbXVzdCBydW4gdGhpcyBtdXRhdGlvbiB3aXRoaW4gdGhlIHRlbXAgZGlyZWN0b3J5IGNsZWFudXAgd2luZG93IG9uIHRoZVxuICAgKiBzZXJ2ZXIsIG90aGVyd2lzZSB0aGUgdGVtcCBkaXJlY3Rvcnkgd2lsbCBnZXQgY2xlYW5lZCB1cC5cbiAgICpcbiAgICovXG4gIGFzeW5jIGNyZWF0ZURpcmVjdG9yeVRyZWVNdXRhdGlvbihvcHRpb25zOiBDcmVhdGVEaXJlY3RvcnlUcmVlT3B0aW9ucykge1xuICAgIGNvbnN0IHRlbXBEaXIgPSBhd2FpdCB0aGlzLmVuc3VyZVRlbXBEaXJlY3RvcnkoKTtcblxuICAgIC8vIENsZWFyIHRoZSB0ZW1wIGRpcmVjdG9yeSBvZiB0aGUgb25lcyB3ZSBhcmUgYWJvdXQgdG8gY3JlYXRlLlxuICAgIC8vIE5PVEU6IHRoaXMgbXV0YXRpb24gY2FuIG5vdCBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSBtdXRhdGlvbiB3aXRoIHRoZVxuICAgIC8vIHRoZSBjcmVhdGVEaXJlY3RvcnkgbXV0YXRpb24gYmVjYXVzZSBpdCB1c2VzIHRoZSBjdXJyZW50IHNlcnZlciB0aW1lIHRvXG4gICAgLy8gY2xlYW4gdXAuIFNvIGl0IG11c3Qgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIGJlZm9yZSB0aGUgY3JlYXRpb24gb2YgdGhlXG4gICAgLy8gZGlyZWN0b3JpZXMuXG4gICAgYXdhaXQgdGhpcy5iZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93KHtcbiAgICAgIGRpcmVjdG9yeUlkOiB0ZW1wRGlyLmlkLFxuICAgICAgcmVxdWVzdFdpbmRvd01zOiBvcHRpb25zLnJlcXVlc3RXaW5kb3dNcyxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIGNvbnRlbnRzXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gKFxuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVEaXJlY3RvcnlFeGVjKHtcbiAgICAgICAgY2lwaGVyTWV0YUNsZWFySnNvbjogb3B0aW9ucy5jaXBoZXJNZXRhQ2xlYXJKc29uLFxuICAgICAgICBwYXJlbnREaXJlY3RvcmllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdG9yeUlkOiB0ZW1wRGlyLmlkLFxuICAgICAgICAgICAgd3JhcHBpbmdLZXlJZDogdGVtcERpci5rZXlJZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwbGFpbk1ldGFKc29uOiBvcHRpb25zLnBsYWluTWV0YUpzb24sXG4gICAgICB9KVxuICAgICkuY3JlYXRlRGlyZWN0b3J5LmRpcmVjdG9yeTtcblxuICAgIC8vIENyZWF0ZSB0aGUgY29udGVudHNcbiAgICBhd2FpdCBvcHRpb25zLmNyZWF0ZUNvbnRlbnQoe1xuICAgICAgaWQ6IGRpcmVjdG9yeS5pZCxcbiAgICAgIGtleUlkOiBkaXJlY3Rvcnkua2V5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIGNsaWVudC1zaWRlIGNoZWNrIGZvciB0aW1lb3V0IG9uIHJlcXVlc3RXaW5kb3dNc1xuICAgIC8vIFRPRE8gcmV0dXJuIHRoZSBzZXJ2ZXIgdGltZSB3aGVyZSBkZWxldGUgaXMgc2NoZWR1bGVkLiBFeHBpcmFibGUgbXV0YXRpb25cblxuICAgIC8vIFJldHVybiB0aGUgbXV0YXRpb24gdGhhdCBtb3ZlcyB0aGUgZGlyZWN0b3J5IGludG8gdGhlIGRzdCBkaXJlY3Rvcmllc1xuICAgIHJldHVybiB0aGlzLmNoYW5nZURpcmVjdG9yeVBhcmVudHNNdXRhdGlvbih7XG4gICAgICBkaXJlY3RvcnlJZDogZGlyZWN0b3J5LmlkLFxuICAgICAgZGlyZWN0b3J5S2V5SWQ6IGRpcmVjdG9yeS5rZXlJZCxcbiAgICAgIHBhcmVudHNUb1JlbW92ZTogW3RlbXBEaXIuaWRdLFxuICAgICAgcGFyZW50c1RvQWRkOiBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0RmlsZUNvbmZpZGVudGlhbChvcHRpb25zOiBTZXRGaWxlQ29uZmlkZW50aWFsT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnNldEZpbGVDb25maWRlbnRpYWxNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBzZXRGaWxlQ29uZmlkZW50aWFsTXV0YXRpb24ob3B0aW9uczogU2V0RmlsZUNvbmZpZGVudGlhbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFNldEZpbGVDb25maWRlbnRpYWxNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGZpbGVJZDogb3B0aW9ucy5maWxlSWQsXG4gICAgICAgICAgY29uZmlkZW50aWFsOiBvcHRpb25zLmNvbmZpZGVudGlhbCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzZXREaXJlY3RvcnlDb25maWRlbnRpYWwob3B0aW9uczogU2V0RGlyZWN0b3J5Q29uZmlkZW50aWFsT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnNldERpcmVjdG9yeUNvbmZpZGVudGlhbE11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHNldERpcmVjdG9yeUNvbmZpZGVudGlhbE11dGF0aW9uKFxuICAgIG9wdGlvbnM6IFNldERpcmVjdG9yeUNvbmZpZGVudGlhbE9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBTZXREaXJlY3RvcnlDb25maWRlbnRpYWxNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGRpcmVjdG9yeUlkOiBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgICAgIGNvbmZpZGVudGlhbDogb3B0aW9ucy5jb25maWRlbnRpYWwsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIZWxwZXJzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVQYXJlbnREaXJlY3RvcnkoXG4gICAgb3B0aW9uczogUGFyZW50RGlyZWN0b3J5T3B0aW9ucyxcbiAgICBuZXdLZXk6IEpXSy5LZXlcbiAgKTogUHJvbWlzZTxQYXJlbnREaXJlY3RvcnlJbnB1dD4ge1xuICAgIC8vIElmIGRpcmVjdG9yeSdzIGtleSBpcyBub3QgYWxyZWFkeSBpbiB0aGUga2V5IGdyYXBoLCB0aGVuIG5lZWQgdG9cbiAgICAvLyBmZXRjaCB0aGUgZGlyZWN0b3J5J3Mga2V5LlxuICAgIGNvbnN0IHdyYXBwaW5nS2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgb3B0aW9ucy53cmFwcGluZ0tleUlkXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXJlY3RvcnlJZDogb3B0aW9ucy5kaXJlY3RvcnlJZCxcbiAgICAgIHdyYXBwaW5nS2V5SWQ6IHdyYXBwaW5nS2V5LmlkLFxuICAgICAgd3JhcHBlZEtleTogYXdhaXQgdGhpcy5rZXlHcmFwaC53cmFwS2V5KHdyYXBwaW5nS2V5LCBuZXdLZXkpLFxuICAgICAgbGlua1R5cGU6IG9wdGlvbnMubGlua1R5cGUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RmlsZVN0YXRlS2V5SWQoZmlsZVN0YXRlTm9kZUlkOiBMclJlbGF5SWRJbnB1dCkge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IEZpbGVTdGF0ZUtleVF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZDogZmlsZVN0YXRlTm9kZUlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLmZpbGVTdGF0ZS5rZXlJZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZUZpbGVTdGF0ZShcbiAgICBmaWxlS2V5OiBKV0suS2V5LFxuICAgIG9wdGlvbnM6IENyZWF0ZUZpbGVPcHRpb25zIHwgVXBkYXRlRmlsZU9wdGlvbnNcbiAgKSB7XG4gICAgLy8gRWFjaCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIGVuY3J5cHRlZCB1c2luZyBhIG5ldyBrZXkuXG4gICAgY29uc3QgZmlsZVN0YXRlS2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuXG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPVxuICAgICAgb3B0aW9ucy5maWxlICYmIChhd2FpdCB0aGlzLmZpbGVVcGxvYWRTZXJ2aWNlLmxvYWRGaWxlKG9wdGlvbnMuZmlsZSkpO1xuXG4gICAgbGV0IGNvbnRlbnRSZXNvdXJjZTogc3RyaW5nO1xuICAgIGlmIChmaWxlQ29udGVudCkge1xuICAgICAgY29uc3QgY2lwaGVyRmlsZUNvbnRlbnQgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgZmlsZVN0YXRlS2V5LFxuICAgICAgICBmaWxlQ29udGVudFxuICAgICAgKTtcbiAgICAgIGlmIChvcHRpb25zLnVwbG9hZCkge1xuICAgICAgICBjb250ZW50UmVzb3VyY2UgPSBhd2FpdCBvcHRpb25zLnVwbG9hZChjaXBoZXJGaWxlQ29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50UmVzb3VyY2UgPSBhd2FpdCB0aGlzLmZpbGVVcGxvYWRTZXJ2aWNlLnVwbG9hZEVuY3J5cHRlZEZpbGUoe1xuICAgICAgICAgIGVuY3J5cHRlZENvbnRlbnQ6IGNpcGhlckZpbGVDb250ZW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMucHJlcGFyZUl0ZW0oZmlsZVN0YXRlS2V5LCBvcHRpb25zKSksXG4gICAgICB3cmFwcGVkU3RhdGVLZXk6IGF3YWl0IHRoaXMua2V5R3JhcGgud3JhcEtleShmaWxlS2V5LCBmaWxlU3RhdGVLZXkpLFxuICAgICAgY29udGVudFJlc291cmNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDaGFuZ2VJdGVtUGFyZW50cyhcbiAgICBvcHRpb25zOiBDaGFuZ2VJdGVtUGFyZW50c09wdGlvbnMsXG4gICAgaXRlbUtleTogSldLLktleVxuICApIHtcbiAgICBjb25zdCBwYXJlbnRzVG9BZGQgPSBvcHRpb25zLnBhcmVudHNUb0FkZFxuICAgICAgPyBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBvcHRpb25zLnBhcmVudHNUb0FkZC5tYXAoKHQpID0+XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVQYXJlbnREaXJlY3RvcnkodCwgaXRlbUtleSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogW107XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlyZWN0b3JpZXNUb1JlbW92ZTogb3B0aW9ucy5wYXJlbnRzVG9SZW1vdmUgfHwgW10sXG4gICAgICBkaXJlY3Rvcmllc1RvQWRkOiBwYXJlbnRzVG9BZGQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUl0ZW0oXG4gICAga2V5OiBKV0suS2V5LFxuICAgIG9wdGlvbnM6IHsgcGxhaW5NZXRhSnNvbj86IEpTT05PYmplY3Q7IGNpcGhlck1ldGFDbGVhckpzb24/OiBKU09OT2JqZWN0IH1cbiAgKSB7XG4gICAgY29uc3QgeyBwbGFpbk1ldGFKc29uLCBjaXBoZXJNZXRhQ2xlYXJKc29uIH0gPSBvcHRpb25zO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYWluTWV0YTogcGxhaW5NZXRhSnNvbiAmJiBKU09OLnN0cmluZ2lmeShwbGFpbk1ldGFKc29uKSxcbiAgICAgIGNpcGhlck1ldGE6XG4gICAgICAgIGNpcGhlck1ldGFDbGVhckpzb24gJiZcbiAgICAgICAgKGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKGtleSwgY2lwaGVyTWV0YUNsZWFySnNvbikpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVEaXJlY3Rvcnkob3B0aW9uczogQ3JlYXRlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIGNvbnN0IGRpcmVjdG9yeUtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcbiAgICBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzID0gb3B0aW9ucy5wYXJlbnREaXJlY3RvcmllcyB8fCBbXTtcbiAgICBpZiAoIW9wdGlvbnMuYXNSb290RGlyZWN0b3J5ICYmICFvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICAgICAnQSBuZXcgZGlyZWN0b3J5IG11c3QgYmUgZWl0aGVyIGEgcm9vdCBkaXJlY3Rvcnkgb3IgYSBzdWItZGlyZWN0b3J5LiBTbyB5b3UgbXVzdCBwcm92aWRlIGVpdGhlciBwYXJlbnREaXJlY3RvcmllcyBvciBhc1Jvb3REaXJlY3RvcnkgcGFyYW1ldGVyLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYXNSb290RGlyZWN0b3J5ICYmIG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXM/Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEtjQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICdBIG5ldyBkaXJlY3RvcnkgbXVzdCBiZSBlaXRoZXIgYSByb290IGRpcmVjdG9yeSBvciBhIHN1Yi1kaXJlY3RvcnkuIFNvIHlvdSBjYW4gb25seSBwcm92aWRlIGVpdGhlciBwYXJlbnREaXJlY3RvcmllcyBvciBhc1Jvb3REaXJlY3RvcnkgcGFyYW1ldGVyLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50RGlyZWN0b3JpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXM/Lm1hcCgodCkgPT5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGFyZW50RGlyZWN0b3J5KHQsIGRpcmVjdG9yeUtleSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gVE9ETyB0aGlzIGlzIHJhdGhlciBhbiB1bmZvcnR1bmF0ZSBuYW1lLCBjaGFuZ2UgaXQgdG8gYXNSb290RGlyZWN0b3J5LlxuICAgIGxldCBwYXJlbnRSb290RGlyZWN0b3J5OiBQYXJlbnRSb290RGlyZWN0b3J5SW5wdXQ7XG4gICAgaWYgKG9wdGlvbnMuYXNSb290RGlyZWN0b3J5KSB7XG4gICAgICBjb25zdCByb290S2V5ID0gdGhpcy5rZXlTZXJ2aWNlLmN1cnJlbnRSb290S2V5O1xuICAgICAgcGFyZW50Um9vdERpcmVjdG9yeSA9IHtcbiAgICAgICAgd3JhcHBpbmdLZXlJZDogcm9vdEtleS5pZCxcbiAgICAgICAgd3JhcHBlZEtleTogYXdhaXQgdGhpcy5rZXlHcmFwaC53cmFwS2V5KHJvb3RLZXksIGRpcmVjdG9yeUtleSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1JbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUl0ZW0oZGlyZWN0b3J5S2V5LCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pdGVtSW5wdXQsXG4gICAgICBwYXJlbnREaXJlY3RvcmllcyxcbiAgICAgIHBhcmVudFJvb3REaXJlY3RvcnksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZURpcmVjdG9yeShvcHRpb25zOiBVcGRhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgY29uc3QgZGlyZWN0b3J5S2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgb3B0aW9ucy5kaXJlY3RvcnlLZXlJZFxuICAgICk7XG5cbiAgICBjb25zdCBpdGVtSW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVJdGVtKGRpcmVjdG9yeUtleS5qd2ssIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLml0ZW1JbnB1dCxcbiAgICAgIGRpcmVjdG9yeUlkOiBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVGaWxlKG9wdGlvbnM6IENyZWF0ZUZpbGVPcHRpb25zKSB7XG4gICAgY29uc3QgZmlsZUtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcblxuICAgIGNvbnN0IHBhcmVudERpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzLm1hcChhc3luYyAodCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRpcmVjdG9yeUlkLCB3cmFwcGluZ0tleUlkLCB3cmFwcGVkS2V5IH0gPVxuICAgICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZVBhcmVudERpcmVjdG9yeSh0LCBmaWxlS2V5KTtcbiAgICAgICAgLy8gcmVtYXAgZnJvbSBQYXJlbnREaXJlY3RvcnlJbnB1dCB0byBGaWxlUGFyZW50RGlyZWN0b3J5SW5wdXRcbiAgICAgICAgLy8gVE9ETyB0aGUgc2VydmVyIHNob3VsZCByZWFsbHkganVzdCB1c2Ugd3JhcHBlZEtleSBpbnN0ZWFkIG9mIHdyYXBwZWRGaWxlS2V5XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlyZWN0b3J5SWQsXG4gICAgICAgICAgd3JhcHBpbmdLZXlJZCxcbiAgICAgICAgICB3cmFwcGVkRmlsZUtleTogd3JhcHBlZEtleSxcbiAgICAgICAgfSBhcyBGaWxlUGFyZW50RGlyZWN0b3J5SW5wdXQ7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZUZpbGVTdGF0ZShmaWxlS2V5LCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIHBhcmVudERpcmVjdG9yaWVzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVGaWxlKG9wdGlvbnM6IFVwZGF0ZUZpbGVPcHRpb25zKSB7XG4gICAgY29uc3QgZmlsZUtleSA9IGF3YWl0IHRoaXMuZ2V0RmlsZUtleShvcHRpb25zLmZpbGVJZCwgb3B0aW9ucy5maWxlS2V5SWQpO1xuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlRmlsZVN0YXRlKGZpbGVLZXkuandrLCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIGZpbGVJZDogb3B0aW9ucy5maWxlSWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNoYW5nZURpcmVjdG9yeVBhcmVudHMoXG4gICAgb3B0aW9uczogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgZGlyZWN0b3J5S2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgb3B0aW9ucy5kaXJlY3RvcnlLZXlJZFxuICAgICk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNoYW5nZUl0ZW1QYXJlbnRzKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGRpcmVjdG9yeUtleS5qd2tcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmlucHV0LFxuICAgICAgZGlyZWN0b3J5SWQ6IG9wdGlvbnMuZGlyZWN0b3J5SWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNoYW5nZUZpbGVQYXJlbnRzKG9wdGlvbnM6IENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucykge1xuICAgIGNvbnN0IGZpbGVLZXkgPSBhd2FpdCB0aGlzLmdldEZpbGVLZXkob3B0aW9ucy5maWxlSWQsIG9wdGlvbnMuZmlsZUtleUlkKTtcblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ2hhbmdlSXRlbVBhcmVudHMob3B0aW9ucywgZmlsZUtleS5qd2spO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmlucHV0LFxuICAgICAgZmlsZUlkOiBvcHRpb25zLmZpbGVJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvbkxvZ291dCgpIHtcbiAgICAvLyBDbGVhciBhbGwgY2FjaGVkIGRhdGEuXG4gICAgdGhpcy50ZW1wRGlyZWN0b3J5ID0gbnVsbDtcbiAgfVxufVxuIl19
592
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbTIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9pdGVtMi9pdGVtMi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQix1Q0FBdUMsRUFDdkMsOEJBQThCLEVBQzlCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGdDQUFnQyxFQUNoQywyQkFBMkIsRUFDM0Isa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixHQUNu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ZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcbmltcG9ydCB7IExyTXV0YXRpb24sIExyU2VydmljZSB9IGZyb20gJy4uL2FwaS9sci1ncmFwaHFsJztcbmltcG9ydCB7IElELCBKU09OT2JqZWN0LCBMclJlbGF5SWRJbnB1dCB9IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgeyBBdXRoMlNlcnZpY2UgfSBmcm9tICcuLi9hdXRoMi9hdXRoMi5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBLZXlGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2tleS9rZXktZmFjdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2tleS9rZXktZ3JhcGguc2VydmljZSc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS5zZXJ2aWNlJztcbmltcG9ydCB7IFBheWxvYWRUeXBlIH0gZnJvbSAnLi4va2V5L2tleS50eXBlcyc7XG5pbXBvcnQgeyBMb2NrU2VydmljZSB9IGZyb20gJy4uL2xvY2svbG9jay5zZXJ2aWNlJztcbmltcG9ydCB7IEtjQmFkQXJndW1lbnRFeGNlcHRpb24gfSBmcm9tICcuLi9fY29tbW9uL2V4Y2VwdGlvbnMnO1xuaW1wb3J0IHsgUnVuT3V0c2lkZUFuZ3VsYXIgfSBmcm9tICcuLi9fY29tbW9uL3J1bi1vdXRzaWRlLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgQXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uLFxuICBBcmNoaXZlRmlsZU11dGF0aW9uLFxuICBCZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93TXV0YXRpb24sXG4gIENoYW5nZURpcmVjdG9yeVBhcmVudHNNdXRhdGlvbixcbiAgQ2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvbixcbiAgQ3JlYXRlRGlyZWN0b3J5TXV0YXRpb24sXG4gIENyZWF0ZUZpbGVNdXRhdGlvbixcbiAgRGVsZXRlRGlyZWN0b3J5TXV0YXRpb24sXG4gIERlbGV0ZUZpbGVNdXRhdGlvbixcbiAgUmV2ZXJ0RmlsZU11dGF0aW9uLFxuICBTZXREaXJlY3RvcnlDb25maWRlbnRpYWxNdXRhdGlvbixcbiAgU2V0RmlsZUNvbmZpZGVudGlhbE11dGF0aW9uLFxuICBUZW1wRGlyZWN0b3J5UXVlcnksXG4gIFVuYXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uLFxuICBVbmFyY2hpdmVGaWxlTXV0YXRpb24sXG4gIFVwZGF0ZURpcmVjdG9yeU11dGF0aW9uLFxuICBVcGRhdGVGaWxlTXV0YXRpb24sXG59IGZyb20gJy4vaXRlbTIuZ3FsJztcbmltcG9ydCB7XG4gIERpcmVjdG9yeUtleVF1ZXJ5LFxuICBGaWxlS2V5UXVlcnksXG4gIEZpbGVTdGF0ZUtleVF1ZXJ5LFxufSBmcm9tICcuL2l0ZW0yLmdxbC5wcml2YXRlJztcbmltcG9ydCB7XG4gIEFyY2hpdmVEaXJlY3RvcnlPcHRpb25zLFxuICBCZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93T3B0aW9ucyxcbiAgQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnMsXG4gIENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucyxcbiAgQ2hhbmdlSXRlbVBhcmVudHNPcHRpb25zLFxuICBDcmVhdGVEaXJlY3RvcnlPcHRpb25zLFxuICBDcmVhdGVEaXJlY3RvcnlUcmVlT3B0aW9ucyxcbiAgQ3JlYXRlRmlsZU9wdGlvbnMsXG4gIERvd25sb2FkRmlsZUNvbnRlbnRPcHRpb25zLFxuICBGaWxlUGFyZW50RGlyZWN0b3J5SW5wdXQsXG4gIElkS2V5UGFpcixcbiAgUGFyZW50RGlyZWN0b3J5SW5wdXQsXG4gIFBhcmVudERpcmVjdG9yeU9wdGlvbnMsXG4gIFBhcmVudFJvb3REaXJlY3RvcnlJbnB1dCxcbiAgUmV2ZXJ0RmlsZU9wdGlvbnMsXG4gIFNldERpcmVjdG9yeUNvbmZpZGVudGlhbE9wdGlvbnMsXG4gIFNldEZpbGVDb25maWRlbnRpYWxPcHRpb25zLFxuICBVbmFyY2hpdmVEaXJlY3RvcnlPcHRpb25zLFxuICBVcGRhdGVEaXJlY3RvcnlPcHRpb25zLFxuICBVcGRhdGVGaWxlT3B0aW9ucyxcbn0gZnJvbSAnLi9pdGVtMi50eXBlcyc7XG5cbkBSdW5PdXRzaWRlQW5ndWxhcih7XG4gIG5nWm9uZU5hbWU6ICduZ1pvbmUnLFxufSlcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJdGVtMlNlcnZpY2UgZXh0ZW5kcyBMclNlcnZpY2Uge1xuICAvLyBDYWNoaW5nIHRoZSB0ZW1wIGRpcmVjdG9yeS5cbiAgcHJpdmF0ZSB0ZW1wRGlyZWN0b3J5OiBJZEtleVBhaXIgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBmaWxlVXBsb2FkU2VydmljZTogRmlsZVVwbG9hZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aDJTZXJ2aWNlOiBBdXRoMlNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMuYXV0aDJTZXJ2aWNlLmFkZExvZ291dExpc3RlbmVyKCgpID0+IHRoaXMub25Mb2dvdXQoKSk7XG4gIH1cblxuICBzdGF0aWMgVEVNUF9ESVJFQ1RPUllfUExBSU5fTUVUQSA9IHsga2NUeXBlOiAndGVtcCcgfTtcbiAgc3RhdGljIFRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEFfRklMVEVSID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIGZpbHRlcjogW1xuICAgICAge1xuICAgICAgICBjb250YWluczogSXRlbTJTZXJ2aWNlLlRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEEsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIGFzeW5jIGRvd25sb2FkRmlsZUNvbnRlbnQoXG4gICAgb3B0aW9uczogRG93bmxvYWRGaWxlQ29udGVudE9wdGlvbnNcbiAgKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVVcGxvYWRTZXJ2aWNlLmRvd25sb2FkRW5jcnlwdGVkRmlsZShcbiAgICAgIG9wdGlvbnMuZmlsZVN0YXRlTm9kZUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGZpbGVTdGF0ZUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgb3B0aW9ucy5maWxlU3RhdGVLZXlJZCxcbiAgICAgICgpID0+IHRoaXMuZ2V0RmlsZVN0YXRlS2V5SWQob3B0aW9ucy5maWxlU3RhdGVOb2RlSWQpXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nKGZpbGVTdGF0ZUtleSwgZmlsZUNvbnRlbnQsIHtcbiAgICAgIHBheWxvYWRUeXBlOiBQYXlsb2FkVHlwZS5VSU5UXzhfQVJSQVksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXREaXJlY3RvcnlLZXlJZChkaXJlY3RvcnlJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5xdWVyeSh7XG4gICAgICAgIHF1ZXJ5OiBEaXJlY3RvcnlLZXlRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgaWQ6IGRpcmVjdG9yeUlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLmRpcmVjdG9yeS5rZXlJZDtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVLZXlJZChmaWxlSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgICBxdWVyeTogRmlsZUtleVF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZDogZmlsZUlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLmZpbGUua2V5SWQ7XG4gIH1cblxuICBhc3luYyBnZXREaXJlY3RvcnlLZXkoXG4gICAgZGlyZWN0b3J5SWQ6IExyUmVsYXlJZElucHV0LFxuICAgIGRpcmVjdG9yeUtleUlkPzogTHJSZWxheUlkSW5wdXRcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5R3JhcGguZ2V0S2V5KGRpcmVjdG9yeUtleUlkLCAoKSA9PlxuICAgICAgdGhpcy5nZXREaXJlY3RvcnlLZXlJZChkaXJlY3RvcnlJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmlsZUtleShmaWxlSWQ6IExyUmVsYXlJZElucHV0LCBmaWxlS2V5SWQ/OiBMclJlbGF5SWRJbnB1dCkge1xuICAgIHJldHVybiB0aGlzLmtleUdyYXBoLmdldEtleShmaWxlS2V5SWQsICgpID0+IHRoaXMuZ2V0RmlsZUtleUlkKGZpbGVJZCkpO1xuICB9XG5cbiAgY3JlYXRlRGlyZWN0b3J5KG9wdGlvbnM6IENyZWF0ZURpcmVjdG9yeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jcmVhdGVEaXJlY3RvcnlNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVEaXJlY3RvcnlNdXRhdGlvbihvcHRpb25zOiBDcmVhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZURpcmVjdG9yeShvcHRpb25zOiBVcGRhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlRGlyZWN0b3J5TXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGlyZWN0b3J5TXV0YXRpb24ob3B0aW9uczogVXBkYXRlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRGlyZWN0b3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZURpcmVjdG9yeShvcHRpb25zKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVEaXJlY3RvcnkoaWQ6IElEKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuZGVsZXRlRGlyZWN0b3J5TXV0YXRpb24oaWQpKTtcbiAgfVxuXG4gIGRlbGV0ZURpcmVjdG9yeU11dGF0aW9uKGlkOiBJRCkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlRGlyZWN0b3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBkaXJlY3RvcnlJZDogaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRmlsZShvcHRpb25zOiBDcmVhdGVGaWxlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZUZpbGVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlRmlsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZUZpbGVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlRmlsZShvcHRpb25zKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVGaWxlKG9wdGlvbnM6IFVwZGF0ZUZpbGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlRmlsZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZpbGVNdXRhdGlvbihvcHRpb25zOiBVcGRhdGVGaWxlT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRmlsZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVGaWxlKG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldmVydEZpbGUob3B0aW9uczogUmV2ZXJ0RmlsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZXZlcnRGaWxlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgcmV2ZXJ0RmlsZU11dGF0aW9uKG9wdGlvbnM6IFJldmVydEZpbGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBSZXZlcnRGaWxlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IG9wdGlvbnMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlRmlsZShpZDogSUQpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5kZWxldGVGaWxlTXV0YXRpb24oaWQpKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbGVNdXRhdGlvbihpZDogSUQpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZUZpbGVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGZpbGVJZDogaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXJjaGl2ZURpcmVjdG9yeShkaXJlY3RvcnlJZDogc3RyaW5nLCBvcHRpb25zOiBBcmNoaXZlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbihkaXJlY3RvcnlJZCwgb3B0aW9ucykpO1xuICB9XG5cbiAgYXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uKFxuICAgIGRpcmVjdG9yeUlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXJjaGl2ZURpcmVjdG9yeU9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBBcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBkaXJlY3RvcnlJZCxcbiAgICAgICAgICByZWN1cnNpdmU6IG9wdGlvbnMucmVjdXJzaXZlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFyY2hpdmVGaWxlKGZpbGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuYXJjaGl2ZUZpbGVNdXRhdGlvbihmaWxlSWQpKTtcbiAgfVxuXG4gIGFyY2hpdmVGaWxlTXV0YXRpb24oZmlsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IEFyY2hpdmVGaWxlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdW5hcmNoaXZlRGlyZWN0b3J5KGRpcmVjdG9yeUlkOiBzdHJpbmcsIG9wdGlvbnM6IFVuYXJjaGl2ZURpcmVjdG9yeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51bmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbihkaXJlY3RvcnlJZCwgb3B0aW9ucykpO1xuICB9XG5cbiAgdW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24oXG4gICAgZGlyZWN0b3J5SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBVbmFyY2hpdmVEaXJlY3RvcnlPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBkaXJlY3RvcnlJZCxcbiAgICAgICAgICByZWN1cnNpdmU6IG9wdGlvbnMucmVjdXJzaXZlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVuYXJjaGl2ZUZpbGUoZmlsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51bmFyY2hpdmVGaWxlTXV0YXRpb24oZmlsZUlkKSk7XG4gIH1cblxuICB1bmFyY2hpdmVGaWxlTXV0YXRpb24oZmlsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVuYXJjaGl2ZUZpbGVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VEaXJlY3RvcnlQYXJlbnRzKG9wdGlvbnM6IENoYW5nZURpcmVjdG9yeVBhcmVudHNPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY2hhbmdlRGlyZWN0b3J5UGFyZW50c011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNoYW5nZURpcmVjdG9yeVBhcmVudHNNdXRhdGlvbihvcHRpb25zOiBDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzKG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNoYW5nZUZpbGVQYXJlbnRzKG9wdGlvbnM6IENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNoYW5nZUZpbGVQYXJlbnRzTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgY2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvbihvcHRpb25zOiBDaGFuZ2VGaWxlUGFyZW50c09wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENoYW5nZUZpbGVQYXJlbnRzTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZUNoYW5nZUZpbGVQYXJlbnRzKG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3coXG4gICAgb3B0aW9uczogQmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd09wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuYmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY2hlZHVsZSBjbGVhbnVwIG9mIHRoZSBoYXJkIGxpbmtzIGluIGEgZGlyZWN0b3J5LlxuICAgKiBUaGUgc2VydmVyIHdpbGwgZGVsZXRlIGFsbCBoYXJkIGxpbmsgd2l0aGluIHRoZSBkaXJlY3Rvcnkgd2l0aGluIGEgdGltZSB3aW5kb3c6IHN0YXJ0aW5nIGZyb20gbm93IGFuZFxuICAgKiBlbmRpbmcgYXQgcmVxdWVzdFdpbmRvd01zIGFmdGVyIG5vdy5cbiAgICogVGhlIHNlcnZlciBkZWNpZGVzIF93aGVuXyBpdCB3aWxsIHBlcmZvcm0gdGhlIGRlbGV0ZS4gSXQncyBub3QgZ3VhcmFudGVlZCB0aGF0IGl0IHdpbGwgcGVyZm9ybVxuICAgKiB0aGUgZGVsZXRlIGF0IFwibm93ICsgcmVxdWVzdFdpbmRvd01zXCIsIGJ1dCBpdCB3aWxsIGhhcHBlbiBhdCBzb21lIHRpbWUgYWZ0ZXIgXCJub3cgKyByZXF1ZXN0V2luZG93TXNcIi5cbiAgICogVGhpcyBhbGxvd3MgbXVsdGlwbGUgb3ZlcmxhcHBpbmcgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIHNlcnZlciBhbGxvY2F0ZXMgZW5vdWdoIGZvciBlYWNoIHJlcXVlc3QuXG4gICAqIFRoZSBzZXJ2ZXIgaGFzIGEgc2V0dGluZyB0aGF0IGFsbG93cyBmb3IgYSBtYXhpbXVtIHZhbHVlIG9uIHJlcXVlc3RXaW5kb3dNcy4gSWYgdGhlIHJlcXVlc3RlZCB2YWx1ZVxuICAgKiBpcyBsYXJnZXIgdGhhbiB0aGlzIG1heGltdW0sIHRoZSBjYWxsIHdpbGwgZmFpbC5cbiAgICovXG4gIGFzeW5jIGJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3dNdXRhdGlvbihcbiAgICBvcHRpb25zOiBCZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93T3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IEJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3dNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogb3B0aW9ucyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVGhpcyBtZXRob2QgbWF5IHJhaXNlIFZFUlNJT05fTUlTTUFUQ0ggZXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb25cbiAgICogd2hlbiBtdWx0aXBsZSBjbGllbnRzIHRyeSB0byBjcmVhdGUgdGhlIHRlbXAgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBUT0RPIFRoZXJlIGlzIGEgcmV0cnkgbWVjaGFuaXNtIGluIGdyYXBocWwgd2l0aCBleHBvbmVudGlhbCBiYWNrIG9mZiBidXQgdGhhdCdzIGludGVybmFsLlxuICAgKiBCdXQgbmVlZCB0byB1c2UgYW4gZXhwb25lbnRpYWwgYmFjayBvZmYgbGliIGlmIHdlIHdhbnQgdG8gcmV0cnkgaGVyZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSB0ZW1wIGRpcmVjdG9yeVxuICAgKlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlVGVtcERpcmVjdG9yeSgpOiBQcm9taXNlPElkS2V5UGFpcj4ge1xuICAgIGlmICh0aGlzLnRlbXBEaXJlY3RvcnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRlbXBEaXJlY3Rvcnk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBUZW1wRGlyZWN0b3J5UXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgcGxhaW5NZXRhOiBJdGVtMlNlcnZpY2UuVEVNUF9ESVJFQ1RPUllfUExBSU5fTUVUQV9GSUxURVIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKGV4aXN0aW5nLnJvb3REaXJlY3Rvcmllcy5lZGdlcy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbW9yZSB0aGFuIDEgdGVtcCBkaXJlY3RvcnkgKHBsYWluTWV0YSBmaWx0ZXI6ICR7SXRlbTJTZXJ2aWNlLlRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEFfRklMVEVSfSlgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZy5yb290RGlyZWN0b3JpZXMuZWRnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldCwgY3JlYXRlIGl0XG4gICAgICBjb25zdCBjcmVhdGVEaXJlY3RvcnkgPSBhd2FpdCB0aGlzLmNyZWF0ZURpcmVjdG9yeU11dGF0aW9uKHtcbiAgICAgICAgYXNSb290RGlyZWN0b3J5OiB0cnVlLFxuICAgICAgICBwbGFpbk1ldGFKc29uOiBJdGVtMlNlcnZpY2UuVEVNUF9ESVJFQ1RPUllfUExBSU5fTUVUQSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBPcHRpbWlzdGljIGxvY2sgb24gdGhlIGN1cnJlbnQgdXNlci5cbiAgICAgIGNvbnN0IHVwZGF0ZUxvY2sgPSB0aGlzLmxvY2tTZXJ2aWNlLnVwZGF0ZUxvY2tNdXRhdGlvbih7XG4gICAgICAgIHZlcnNpb246IGV4aXN0aW5nLmxvY2s/LnZlcnNpb24sXG4gICAgICB9KTtcblxuICAgICAgLy8gQmVjYXVzZSB0aGlzLm11dGF0ZSgpIG9ubHkgaGFuZGxlcyBzaW1wbGUgdHlwZXMgd2UgbmVlZCB0byB1c2UgdGhlIG1vcmVcbiAgICAgIC8vIGFkdmFuY2VkIHRoaXMubHJHcmFwaFFMLmxyTXV0YXRlKClcbiAgICAgIGNvbnN0IFtjcmVhdGVEaXJlY3RvcnlSZXN1bHRdID0gYXdhaXQgdGhpcy5sckdyYXBoUUwubHJNdXRhdGUoW1xuICAgICAgICBjcmVhdGVEaXJlY3RvcnksXG4gICAgICAgIHVwZGF0ZUxvY2ssXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgeyBpZCwga2V5SWQgfSA9IGNyZWF0ZURpcmVjdG9yeVJlc3VsdC5jcmVhdGVEaXJlY3RvcnkuZGlyZWN0b3J5O1xuXG4gICAgICB0aGlzLnRlbXBEaXJlY3RvcnkgPSB7XG4gICAgICAgIGlkLFxuICAgICAgICBrZXlJZCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldHVybiBleGlzdGluZyB0ZW1wXG4gICAgICBjb25zdCB7IGlkLCBrZXlJZCB9ID0gZXhpc3Rpbmcucm9vdERpcmVjdG9yaWVzLmVkZ2VzWzBdLm5vZGU7XG5cbiAgICAgIHRoaXMudGVtcERpcmVjdG9yeSA9IHtcbiAgICAgICAgaWQsXG4gICAgICAgIGtleUlkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wRGlyZWN0b3J5O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRGlyZWN0b3J5VHJlZShvcHRpb25zOiBDcmVhdGVEaXJlY3RvcnlUcmVlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZURpcmVjdG9yeVRyZWVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogWW91IG11c3QgcnVuIHRoaXMgbXV0YXRpb24gd2l0aGluIHRoZSB0ZW1wIGRpcmVjdG9yeSBjbGVhbnVwIHdpbmRvdyBvbiB0aGVcbiAgICogc2VydmVyLCBvdGhlcndpc2UgdGhlIHRlbXAgZGlyZWN0b3J5IHdpbGwgZ2V0IGNsZWFuZWQgdXAuXG4gICAqXG4gICAqL1xuICBhc3luYyBjcmVhdGVEaXJlY3RvcnlUcmVlTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlRGlyZWN0b3J5VHJlZU9wdGlvbnMpIHtcbiAgICBjb25zdCB0ZW1wRGlyID0gYXdhaXQgdGhpcy5lbnN1cmVUZW1wRGlyZWN0b3J5KCk7XG5cbiAgICAvLyBDbGVhciB0aGUgdGVtcCBkaXJlY3Rvcnkgb2YgdGhlIG9uZXMgd2UgYXJlIGFib3V0IHRvIGNyZWF0ZS5cbiAgICAvLyBOT1RFOiB0aGlzIG11dGF0aW9uIGNhbiBub3QgYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgbXV0YXRpb24gd2l0aCB0aGVcbiAgICAvLyB0aGUgY3JlYXRlRGlyZWN0b3J5IG11dGF0aW9uIGJlY2F1c2UgaXQgdXNlcyB0aGUgY3VycmVudCBzZXJ2ZXIgdGltZSB0b1xuICAgIC8vIGNsZWFuIHVwLiBTbyBpdCBtdXN0IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZSBiZWZvcmUgdGhlIGNyZWF0aW9uIG9mIHRoZVxuICAgIC8vIGRpcmVjdG9yaWVzLlxuICAgIGF3YWl0IHRoaXMuYmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvdyh7XG4gICAgICBkaXJlY3RvcnlJZDogdGVtcERpci5pZCxcbiAgICAgIHJlcXVlc3RXaW5kb3dNczogb3B0aW9ucy5yZXF1ZXN0V2luZG93TXMsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGRpcmVjdG9yeSB0aGF0IGhhcyBjb250ZW50c1xuICAgIGNvbnN0IGRpcmVjdG9yeSA9IChcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRGlyZWN0b3J5KHtcbiAgICAgICAgY2lwaGVyTWV0YUNsZWFySnNvbjogb3B0aW9ucy5jaXBoZXJNZXRhQ2xlYXJKc29uLFxuICAgICAgICBwYXJlbnREaXJlY3RvcmllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdG9yeUlkOiB0ZW1wRGlyLmlkLFxuICAgICAgICAgICAgd3JhcHBpbmdLZXlJZDogdGVtcERpci5rZXlJZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwbGFpbk1ldGFKc29uOiBvcHRpb25zLnBsYWluTWV0YUpzb24sXG4gICAgICB9KVxuICAgICkuY3JlYXRlRGlyZWN0b3J5LmRpcmVjdG9yeTtcblxuICAgIC8vIENyZWF0ZSB0aGUgY29udGVudHNcbiAgICBhd2FpdCBvcHRpb25zLmNyZWF0ZUNvbnRlbnQoe1xuICAgICAgaWQ6IGRpcmVjdG9yeS5pZCxcbiAgICAgIGtleUlkOiBkaXJlY3Rvcnkua2V5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIGNsaWVudC1zaWRlIGNoZWNrIGZvciB0aW1lb3V0IG9uIHJlcXVlc3RXaW5kb3dNc1xuICAgIC8vIFRPRE8gcmV0dXJuIHRoZSBzZXJ2ZXIgdGltZSB3aGVyZSBkZWxldGUgaXMgc2NoZWR1bGVkLiBFeHBpcmFibGUgbXV0YXRpb25cblxuICAgIC8vIFJldHVybiB0aGUgbXV0YXRpb24gdGhhdCBtb3ZlcyB0aGUgZGlyZWN0b3J5IGludG8gdGhlIGRzdCBkaXJlY3Rvcmllc1xuICAgIHJldHVybiB0aGlzLmNoYW5nZURpcmVjdG9yeVBhcmVudHNNdXRhdGlvbih7XG4gICAgICBkaXJlY3RvcnlJZDogZGlyZWN0b3J5LmlkLFxuICAgICAgZGlyZWN0b3J5S2V5SWQ6IGRpcmVjdG9yeS5rZXlJZCxcbiAgICAgIHBhcmVudHNUb1JlbW92ZTogW3RlbXBEaXIuaWRdLFxuICAgICAgcGFyZW50c1RvQWRkOiBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0RmlsZUNvbmZpZGVudGlhbChvcHRpb25zOiBTZXRGaWxlQ29uZmlkZW50aWFsT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnNldEZpbGVDb25maWRlbnRpYWxNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBzZXRGaWxlQ29uZmlkZW50aWFsTXV0YXRpb24ob3B0aW9uczogU2V0RmlsZUNvbmZpZGVudGlhbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFNldEZpbGVDb25maWRlbnRpYWxNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGZpbGVJZDogb3B0aW9ucy5maWxlSWQsXG4gICAgICAgICAgY29uZmlkZW50aWFsOiBvcHRpb25zLmNvbmZpZGVudGlhbCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzZXREaXJlY3RvcnlDb25maWRlbnRpYWwob3B0aW9uczogU2V0RGlyZWN0b3J5Q29uZmlkZW50aWFsT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnNldERpcmVjdG9yeUNvbmZpZGVudGlhbE11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHNldERpcmVjdG9yeUNvbmZpZGVudGlhbE11dGF0aW9uKFxuICAgIG9wdGlvbnM6IFNldERpcmVjdG9yeUNvbmZpZGVudGlhbE9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBTZXREaXJlY3RvcnlDb25maWRlbnRpYWxNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGRpcmVjdG9yeUlkOiBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgICAgIGNvbmZpZGVudGlhbDogb3B0aW9ucy5jb25maWRlbnRpYWwsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIZWxwZXJzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVQYXJlbnREaXJlY3RvcnkoXG4gICAgb3B0aW9uczogUGFyZW50RGlyZWN0b3J5T3B0aW9ucyxcbiAgICBuZXdLZXk6IEpXSy5LZXlcbiAgKTogUHJvbWlzZTxQYXJlbnREaXJlY3RvcnlJbnB1dD4ge1xuICAgIC8vIElmIGRpcmVjdG9yeSdzIGtleSBpcyBub3QgYWxyZWFkeSBpbiB0aGUga2V5IGdyYXBoLCB0aGVuIG5lZWQgdG9cbiAgICAvLyBmZXRjaCB0aGUgZGlyZWN0b3J5J3Mga2V5LlxuICAgIGNvbnN0IHdyYXBwaW5nS2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgb3B0aW9ucy53cmFwcGluZ0tleUlkXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXJlY3RvcnlJZDogb3B0aW9ucy5kaXJlY3RvcnlJZCxcbiAgICAgIHdyYXBwaW5nS2V5SWQ6IHdyYXBwaW5nS2V5LmlkLFxuICAgICAgd3JhcHBlZEtleTogYXdhaXQgdGhpcy5rZXlHcmFwaC53cmFwS2V5KHdyYXBwaW5nS2V5LCBuZXdLZXkpLFxuICAgICAgbGlua1R5cGU6IG9wdGlvbnMubGlua1R5cGUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RmlsZVN0YXRlS2V5SWQoZmlsZVN0YXRlTm9kZUlkOiBMclJlbGF5SWRJbnB1dCkge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IEZpbGVTdGF0ZUtleVF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZDogZmlsZVN0YXRlTm9kZUlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLmZpbGVTdGF0ZS5rZXlJZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZUZpbGVTdGF0ZShcbiAgICBmaWxlS2V5OiBKV0suS2V5LFxuICAgIG9wdGlvbnM6IENyZWF0ZUZpbGVPcHRpb25zIHwgVXBkYXRlRmlsZU9wdGlvbnNcbiAgKSB7XG4gICAgLy8gRWFjaCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIGVuY3J5cHRlZCB1c2luZyBhIG5ldyBrZXkuXG4gICAgY29uc3QgZmlsZVN0YXRlS2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuXG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPVxuICAgICAgb3B0aW9ucy5maWxlICYmIChhd2FpdCB0aGlzLmZpbGVVcGxvYWRTZXJ2aWNlLmxvYWRGaWxlKG9wdGlvbnMuZmlsZSkpO1xuXG4gICAgbGV0IGNvbnRlbnRSZXNvdXJjZTogc3RyaW5nO1xuICAgIGlmIChmaWxlQ29udGVudCkge1xuICAgICAgY29uc3QgY2lwaGVyRmlsZUNvbnRlbnQgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgZmlsZVN0YXRlS2V5LFxuICAgICAgICBmaWxlQ29udGVudFxuICAgICAgKTtcbiAgICAgIGlmIChvcHRpb25zLnVwbG9hZCkge1xuICAgICAgICBjb250ZW50UmVzb3VyY2UgPSBhd2FpdCBvcHRpb25zLnVwbG9hZChjaXBoZXJGaWxlQ29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50UmVzb3VyY2UgPSBhd2FpdCB0aGlzLmZpbGVVcGxvYWRTZXJ2aWNlLnVwbG9hZEVuY3J5cHRlZEZpbGUoe1xuICAgICAgICAgIGVuY3J5cHRlZENvbnRlbnQ6IGNpcGhlckZpbGVDb250ZW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMucHJlcGFyZUl0ZW0oZmlsZVN0YXRlS2V5LCBvcHRpb25zKSksXG4gICAgICB3cmFwcGVkU3RhdGVLZXk6IGF3YWl0IHRoaXMua2V5R3JhcGgud3JhcEtleShmaWxlS2V5LCBmaWxlU3RhdGVLZXkpLFxuICAgICAgY29udGVudFJlc291cmNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDaGFuZ2VJdGVtUGFyZW50cyhcbiAgICBvcHRpb25zOiBDaGFuZ2VJdGVtUGFyZW50c09wdGlvbnMsXG4gICAgaXRlbUtleTogSldLLktleVxuICApIHtcbiAgICBjb25zdCBwYXJlbnRzVG9BZGQgPSBvcHRpb25zLnBhcmVudHNUb0FkZFxuICAgICAgPyBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBvcHRpb25zLnBhcmVudHNUb0FkZC5tYXAoKHQpID0+XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVQYXJlbnREaXJlY3RvcnkodCwgaXRlbUtleSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogW107XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlyZWN0b3JpZXNUb1JlbW92ZTogb3B0aW9ucy5wYXJlbnRzVG9SZW1vdmUgfHwgW10sXG4gICAgICBkaXJlY3Rvcmllc1RvQWRkOiBwYXJlbnRzVG9BZGQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUl0ZW0oXG4gICAga2V5OiBKV0suS2V5LFxuICAgIG9wdGlvbnM6IHsgcGxhaW5NZXRhSnNvbj86IEpTT05PYmplY3Q7IGNpcGhlck1ldGFDbGVhckpzb24/OiBKU09OT2JqZWN0IH1cbiAgKSB7XG4gICAgY29uc3QgeyBwbGFpbk1ldGFKc29uLCBjaXBoZXJNZXRhQ2xlYXJKc29uIH0gPSBvcHRpb25zO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYWluTWV0YTogcGxhaW5NZXRhSnNvbiAmJiBKU09OLnN0cmluZ2lmeShwbGFpbk1ldGFKc29uKSxcbiAgICAgIGNpcGhlck1ldGE6XG4gICAgICAgIGNpcGhlck1ldGFDbGVhckpzb24gJiZcbiAgICAgICAgKGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKGtleSwgY2lwaGVyTWV0YUNsZWFySnNvbikpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVEaXJlY3Rvcnkob3B0aW9uczogQ3JlYXRlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIGNvbnN0IGRpcmVjdG9yeUtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcbiAgICBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzID0gb3B0aW9ucy5wYXJlbnREaXJlY3RvcmllcyB8fCBbXTtcbiAgICBpZiAoIW9wdGlvbnMuYXNSb290RGlyZWN0b3J5ICYmICFvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICAgICAnQSBuZXcgZGlyZWN0b3J5IG11c3QgYmUgZWl0aGVyIGEgcm9vdCBkaXJlY3Rvcnkgb3IgYSBzdWItZGlyZWN0b3J5LiBTbyB5b3UgbXVzdCBwcm92aWRlIGVpdGhlciBwYXJlbnREaXJlY3RvcmllcyBvciBhc1Jvb3REaXJlY3RvcnkgcGFyYW1ldGVyLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYXNSb290RGlyZWN0b3J5ICYmIG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXM/Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEtjQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICdBIG5ldyBkaXJlY3RvcnkgbXVzdCBiZSBlaXRoZXIgYSByb290IGRpcmVjdG9yeSBvciBhIHN1Yi1kaXJlY3RvcnkuIFNvIHlvdSBjYW4gb25seSBwcm92aWRlIGVpdGhlciBwYXJlbnREaXJlY3RvcmllcyBvciBhc1Jvb3REaXJlY3RvcnkgcGFyYW1ldGVyLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50RGlyZWN0b3JpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXM/Lm1hcCgodCkgPT5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGFyZW50RGlyZWN0b3J5KHQsIGRpcmVjdG9yeUtleSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gVE9ETyB0aGlzIGlzIHJhdGhlciBhbiB1bmZvcnR1bmF0ZSBuYW1lLCBjaGFuZ2UgaXQgdG8gYXNSb290RGlyZWN0b3J5LlxuICAgIGxldCBwYXJlbnRSb290RGlyZWN0b3J5OiBQYXJlbnRSb290RGlyZWN0b3J5SW5wdXQ7XG4gICAgaWYgKG9wdGlvbnMuYXNSb290RGlyZWN0b3J5KSB7XG4gICAgICBjb25zdCByb290S2V5ID0gdGhpcy5rZXlTZXJ2aWNlLmN1cnJlbnRSb290S2V5O1xuICAgICAgcGFyZW50Um9vdERpcmVjdG9yeSA9IHtcbiAgICAgICAgd3JhcHBpbmdLZXlJZDogcm9vdEtleS5pZCxcbiAgICAgICAgd3JhcHBlZEtleTogYXdhaXQgdGhpcy5rZXlHcmFwaC53cmFwS2V5KHJvb3RLZXksIGRpcmVjdG9yeUtleSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1JbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUl0ZW0oZGlyZWN0b3J5S2V5LCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pdGVtSW5wdXQsXG4gICAgICBwYXJlbnREaXJlY3RvcmllcyxcbiAgICAgIHBhcmVudFJvb3REaXJlY3RvcnksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZURpcmVjdG9yeShvcHRpb25zOiBVcGRhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgY29uc3QgZGlyZWN0b3J5S2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgb3B0aW9ucy5kaXJlY3RvcnlLZXlJZFxuICAgICk7XG5cbiAgICBjb25zdCBpdGVtSW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVJdGVtKGRpcmVjdG9yeUtleS5qd2ssIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLml0ZW1JbnB1dCxcbiAgICAgIGRpcmVjdG9yeUlkOiBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVGaWxlKG9wdGlvbnM6IENyZWF0ZUZpbGVPcHRpb25zKSB7XG4gICAgY29uc3QgZmlsZUtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcblxuICAgIGNvbnN0IHBhcmVudERpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzLm1hcChhc3luYyAodCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRpcmVjdG9yeUlkLCB3cmFwcGluZ0tleUlkLCB3cmFwcGVkS2V5IH0gPVxuICAgICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZVBhcmVudERpcmVjdG9yeSh0LCBmaWxlS2V5KTtcbiAgICAgICAgLy8gcmVtYXAgZnJvbSBQYXJlbnREaXJlY3RvcnlJbnB1dCB0byBGaWxlUGFyZW50RGlyZWN0b3J5SW5wdXRcbiAgICAgICAgLy8gVE9ETyB0aGUgc2VydmVyIHNob3VsZCByZWFsbHkganVzdCB1c2Ugd3JhcHBlZEtleSBpbnN0ZWFkIG9mIHdyYXBwZWRGaWxlS2V5XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlyZWN0b3J5SWQsXG4gICAgICAgICAgd3JhcHBpbmdLZXlJZCxcbiAgICAgICAgICB3cmFwcGVkRmlsZUtleTogd3JhcHBlZEtleSxcbiAgICAgICAgfSBhcyBGaWxlUGFyZW50RGlyZWN0b3J5SW5wdXQ7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZUZpbGVTdGF0ZShmaWxlS2V5LCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIHBhcmVudERpcmVjdG9yaWVzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVGaWxlKG9wdGlvbnM6IFVwZGF0ZUZpbGVPcHRpb25zKSB7XG4gICAgY29uc3QgZmlsZUtleSA9IGF3YWl0IHRoaXMuZ2V0RmlsZUtleShvcHRpb25zLmZpbGVJZCwgb3B0aW9ucy5maWxlS2V5SWQpO1xuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlRmlsZVN0YXRlKGZpbGVLZXkuandrLCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIGZpbGVJZDogb3B0aW9ucy5maWxlSWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNoYW5nZURpcmVjdG9yeVBhcmVudHMoXG4gICAgb3B0aW9uczogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgZGlyZWN0b3J5S2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgb3B0aW9ucy5kaXJlY3RvcnlLZXlJZFxuICAgICk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNoYW5nZUl0ZW1QYXJlbnRzKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGRpcmVjdG9yeUtleS5qd2tcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmlucHV0LFxuICAgICAgZGlyZWN0b3J5SWQ6IG9wdGlvbnMuZGlyZWN0b3J5SWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNoYW5nZUZpbGVQYXJlbnRzKG9wdGlvbnM6IENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucykge1xuICAgIGNvbnN0IGZpbGVLZXkgPSBhd2FpdCB0aGlzLmdldEZpbGVLZXkob3B0aW9ucy5maWxlSWQsIG9wdGlvbnMuZmlsZUtleUlkKTtcblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ2hhbmdlSXRlbVBhcmVudHMob3B0aW9ucywgZmlsZUtleS5qd2spO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmlucHV0LFxuICAgICAgZmlsZUlkOiBvcHRpb25zLmZpbGVJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvbkxvZ291dCgpIHtcbiAgICAvLyBDbGVhciBhbGwgY2FjaGVkIGRhdGEuXG4gICAgdGhpcy50ZW1wRGlyZWN0b3J5ID0gbnVsbDtcbiAgfVxufVxuIl19