@sumaris-net/ngx-components 18.13.0 → 18.14.1

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 (38) hide show
  1. package/doc/changelog.md +4 -0
  2. package/doc/feed/feed-en.json +26 -0
  3. package/doc/feed/feed-fr.json +26 -0
  4. package/esm2022/public_api.mjs +9 -1
  5. package/esm2022/src/app/core/home/home.mjs +13 -12
  6. package/esm2022/src/app/core/home/home.module.mjs +7 -3
  7. package/esm2022/src/app/core/services/local-settings.service.mjs +3 -2
  8. package/esm2022/src/app/core/services/network.service.mjs +12 -1
  9. package/esm2022/src/app/social/feed/discourse/discourse-feed.service.mjs +179 -0
  10. package/esm2022/src/app/social/feed/discourse/discourse.model.mjs +2 -0
  11. package/esm2022/src/app/social/feed/discourse/discourse.utils.mjs +168 -0
  12. package/esm2022/src/app/social/feed/feed.component.mjs +121 -0
  13. package/esm2022/src/app/social/feed/feed.directive.mjs +151 -0
  14. package/esm2022/src/app/social/feed/feed.model.mjs +68 -0
  15. package/esm2022/src/app/social/feed/feed.module.mjs +22 -0
  16. package/esm2022/src/app/social/feed/feed.service.mjs +3 -0
  17. package/esm2022/src/environments/environment.class.mjs +2 -1
  18. package/esm2022/src/environments/environment.mjs +10 -1
  19. package/fesm2022/sumaris-net.ngx-components.mjs +681 -8
  20. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  21. package/package.json +1 -1
  22. package/public_api.d.ts +8 -0
  23. package/src/app/core/home/home.d.ts +1 -1
  24. package/src/app/core/home/home.module.d.ts +2 -1
  25. package/src/app/core/services/local-settings.service.d.ts +1 -0
  26. package/src/app/core/services/network.service.d.ts +1 -0
  27. package/src/app/social/feed/discourse/discourse-feed.service.d.ts +55 -0
  28. package/src/app/social/feed/discourse/discourse.model.d.ts +7 -0
  29. package/src/app/social/feed/discourse/discourse.utils.d.ts +44 -0
  30. package/src/app/social/feed/feed.component.d.ts +39 -0
  31. package/src/app/social/feed/feed.directive.d.ts +32 -0
  32. package/src/app/social/feed/feed.model.d.ts +69 -0
  33. package/src/app/social/feed/feed.module.d.ts +11 -0
  34. package/src/app/social/feed/feed.service.d.ts +13 -0
  35. package/src/assets/i18n/en-US.json +5 -1
  36. package/src/assets/i18n/en.json +5 -0
  37. package/src/assets/i18n/fr.json +5 -0
  38. package/src/environments/environment.class.d.ts +8 -0
@@ -400,6 +400,17 @@ export class NetworkService extends StartableObservableService {
400
400
  console.debug(`[network] All cache cleared, in ${Date.now() - now}ms`);
401
401
  });
402
402
  }
403
+ async fetch(url) {
404
+ if (!url)
405
+ throw new Error('Missing url');
406
+ try {
407
+ return firstValueFrom(this.http.get(url));
408
+ }
409
+ catch (err) {
410
+ console.error(`[network] Error fetching data from ${url}:`, err);
411
+ return null;
412
+ }
413
+ }
403
414
  /* -- protected functions -- */
404
415
  async ngOnStart(peer) {
405
416
  console.info('[network] Starting network...');
@@ -635,4 +646,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
635
646
  }] }, { type: i1.ToastController, decorators: [{
636
647
  type: Optional
637
648
  }] }] });
638
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUUsT0FBTyxFQUF3QixvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBHLE9BQU8sRUFBZSxZQUFZLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVqRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQUU1QyxNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0I7SUFDekMsT0FBTyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQjtDQUN6QyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLDhCQUE4QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLEtBQUssQ0FBQyxDQUFDLHNEQUFzRDtBQUUvRzs7NkNBRTZDO0FBRzdDLE1BQU0sT0FBTyxjQUFlLFNBQVEsMEJBQXNDO0lBeUQ1QztJQUVsQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ3VCO0lBQ2tCO0lBQzdCO0lBQ0E7SUFsRXRCLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBYSxDQUFDLEVBQ2xDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFDdkIsb0JBQW9CLEVBQVUsQ0FDL0IsQ0FBQztJQUNGLHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFpQixJQUFJLENBQUMsQ0FBQztJQUNuRSxtQkFBbUIsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1QixPQUFPLENBQVU7SUFDakIsT0FBTyxDQUFVO0lBQzFCLGtCQUFrQixDQUFlO0lBQ3hCLG1CQUFtQixDQUFTO0lBQzVCLHNCQUFzQixDQUFnQjtJQUMvQyxxQkFBcUIsQ0FBaUI7SUFDdEMsYUFBYSxDQUFVO0lBQ2Qsa0JBQWtCLENBQVM7SUFFcEMsVUFBVSxHQUVkLEVBQUUsQ0FBQztJQUVQLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLGtDQUFrQztRQUNsQyxPQUFPLElBQUksQ0FBQyxhQUFhO1lBQ3ZCLENBQUMsQ0FBQyxNQUFNO1lBQ1IsQ0FBQyxDQUFDLG1EQUFtRDtnQkFDbkQsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBVTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFDNEIsU0FBYyxFQUN4QyxRQUFrQixFQUNWLFNBQTBCLEVBQzFCLE9BQWdCLEVBQ2hCLFFBQThCLEVBQzlCLEtBQW1CLEVBQ25CLElBQWdCLEVBQ08sV0FBd0IsRUFDTixjQUErQixFQUM1RCxTQUEyQixFQUMzQixlQUFnQztRQUVwRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFaVSxjQUFTLEdBQVQsU0FBUyxDQUFLO1FBRWhDLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ08sZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDTixtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFDNUQsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBR3BELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxrQ0FBa0MsQ0FBQztRQUM5RixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLENBQUM7WUFDNUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxnREFBZ0Q7UUFDbkcsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsbUJBQW1CLEdBQUcseUJBQXlCLENBQUMsT0FBTyxDQUFDO1lBQzdELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlO1FBQzNELENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpFLGVBQWU7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxFQUFFLENBQVUsU0FBMkIsRUFBRSxRQUFvQztRQUMzRSxRQUFRLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssT0FBTztnQkFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFdkQsS0FBSyxhQUFhO2dCQUNoQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFeEQsS0FBSyxlQUFlO2dCQUNsQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFvQixDQUFDLENBQUMsQ0FBQztZQUV6RixLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFOUQ7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsSUFNZjtRQUNDLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFN0YscUJBQXFCO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLENBQUM7UUFDbEUsSUFBSSxZQUFpQyxDQUFDO1FBQ3RDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoSSxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sUUFBUSxHQUFrQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO2dCQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsdUJBQXVCO1lBRTVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRCxNQUFNLHNCQUFzQixHQUFHLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEYsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO2dCQUMzQiwyQkFBMkI7Z0JBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO2dCQUUxQywyQkFBMkI7Z0JBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTVCLFVBQVU7Z0JBQ1YsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV6QixpQ0FBaUM7Z0JBQ2pDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDM0MsV0FBVztRQUNiLENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksWUFBWTtnQkFBRSxNQUFNLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqRCxDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFM0IsMEJBQTBCO1FBQzFCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQzVDLDRFQUE0RTtnQkFDNUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNuRSxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNsRCw0RUFBNEU7WUFDNUUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBT3RCO1FBQ0MsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxpQkFBaUI7UUFFMUMsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksd0JBQXdCO2dCQUMzRCxJQUFJLEVBQUUsU0FBUztnQkFDZixlQUFlLEVBQUUsSUFBSTtnQkFDckIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE9BQU8sRUFBRTtvQkFDUCxtQkFBbUI7b0JBQ25CO3dCQUNFLElBQUksRUFBRSxTQUFTO3dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztxQkFDeEQ7aUJBQ0Y7YUFDRixDQUFDLENBQUM7WUFFSCxxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFNBQVM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFakUsZ0RBQWdEO1lBQ2hELElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFN0IsbUJBQW1CO1lBQ25CLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbEMsZ0JBQWdCLEVBQUUsS0FBSztnQkFDdkIsZUFBZSxFQUFFLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQztnQkFDcEUsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDO2FBQ3RFLENBQUMsQ0FBQztZQUNILElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsZ0NBQWdDO2dCQUNoQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ2hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxHQUFHO2dCQUNMLEdBQUcsSUFBSTtnQkFDUCxlQUFlLEVBQUUsS0FBSztnQkFDdEIsZUFBZSxFQUFFLElBQUk7YUFDdEIsQ0FBQztRQUNKLENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLE9BQU8sRUFBRSx3QkFBd0I7WUFDakMsSUFBSSxFQUFFLE9BQU87WUFDYixHQUFHLElBQUk7U0FDUixDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFvQjtRQUN2QyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxRQUFRLEdBQWtCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyx1QkFBdUI7WUFDaEUsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBa0IsRUFBRSxJQUE4QjtRQUMxRSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMseUJBQXlCO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWM7WUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLDJCQUEyQjtRQUU5RSxnREFBZ0Q7UUFDaEQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWUsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV0SSxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLElBQUksRUFBRSxPQUFPO2dCQUNiLE9BQU8sRUFBRSxtQ0FBbUM7Z0JBQzVDLGFBQWEsRUFBRTtvQkFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjO2lCQUN6QztnQkFDRCxlQUFlLEVBQUUsSUFBSTthQUN0QixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBb0IsRUFBRSxJQUE4QztRQUNwRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxZQUFZLElBQUksT0FBTyxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQWEsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLElBQUksTUFBTSxHQUFHLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0YsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLElBQW9CLEVBQUUsSUFBNEI7UUFDckUsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDdkQsSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdCLENBQUM7WUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtnQkFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxpR0FBaUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7Z0JBQ25ILE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdkUsV0FBVztRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFvQixFQUFFLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7UUFDaEUsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDdkQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdCLENBQUM7WUFDRCxNQUFNLFVBQVUsR0FBVyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFELElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQztnQkFBRSxPQUFPLFVBQVUsQ0FBQztRQUNyRCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVO2dCQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLGlHQUFpRyxDQUFDLENBQUM7O2dCQUM5RyxPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLFdBQVc7UUFDYixDQUFDO1FBRUQsNEJBQTRCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsT0FBTyxRQUFRLEVBQUUsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBK0IsRUFBRSxJQUFZO1FBQzNELElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRTVCLElBQUksT0FBTyxHQUFHLElBQUksWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFLElBQWUsQ0FBQztRQUVqRSx3QkFBd0I7UUFDeEIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsT0FBTyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FDYixLQUFlLEVBQ2YsSUFFQztRQUVELEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBRWxELElBQUksc0JBQXNCLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztnQkFDckQsT0FBTyxDQUFDLElBQUksQ0FBQyxvQ0FBb0MscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBRXhELCtCQUErQjtnQkFDL0IsSUFBSSxxQkFBcUIsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzVFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQzVFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBdUM7UUFDL0QsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN4QyxTQUFTLEVBQUUsZUFBZTtZQUMxQixjQUFjLEVBQTJCO2dCQUN2QyxZQUFZLEVBQUUsS0FBSztnQkFDbkIsR0FBRyxJQUFJO2FBQ1I7WUFDRCxhQUFhLEVBQUUsSUFBSTtZQUNuQixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFDSCxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV0QixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFN0MsT0FBTyxDQUFDLElBQUksSUFBSyxJQUFhLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBOEI7UUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUs7YUFDZCxRQUFRLEVBQUU7YUFDVixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsYUFBYTtZQUNiLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUVoQywrQ0FBK0M7Z0JBQy9DLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMxRixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCwrQkFBK0I7SUFFckIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFXO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUU5QyxxQ0FBcUM7UUFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFakksMkJBQTJCO1FBQzNCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLDREQUE0RDtZQUM1RCxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUUxQiwwQ0FBMEM7WUFDMUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztnQkFDMUUsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSx5Q0FBeUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM1SSxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLDZDQUE2QztZQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLGtFQUFrRTtnQkFDbEUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDN0UsTUFBTSxjQUFjLENBQ2xCLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUMzQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtREFBbUQsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFDM0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDekMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQzFCLEtBQUssRUFBRSxDQUNSLENBQ0YsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sNEJBQTRCO29CQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxJQUFJLENBQUMsR0FBRyxjQUFjLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRTlGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVTLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBVTtRQUN2QyxtREFBbUQ7UUFDbkQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUVqRCxvQ0FBb0M7UUFDcEMsSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sY0FBYyxHQUFHLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRS9DLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxjQUFjLElBQUksU0FBUyxDQUFDLENBQUMsQ0FDeEgsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVTLFFBQVE7UUFDaEIsMkNBQTJDO1FBQzNDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxjQUFjO1FBQzVCLHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixJQUFJLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDNUQsUUFBUSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzFFLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixRQUFRLENBQUMsT0FBTyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ3ZGLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELG9EQUFvRDtRQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztRQUMxQyxJQUFJLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUVoSCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUUsT0FBTyxZQUFZLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLGdCQUFnQjtRQUN4QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLGlCQUFpQjtRQUN6QixJQUFJLElBQUksQ0FBQyxrQkFBa0I7WUFBRSxPQUFPLENBQUMsd0JBQXdCO1FBRTdELE9BQU8sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLElBQUksQ0FBQyxtQkFBbUIsT0FBTyxDQUFDLENBQUM7UUFFekYsSUFBSSxRQUFrQixDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQzthQUNoRixJQUFJO1FBQ0gsMENBQTBDO1FBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFFbkMsd0JBQXdCO1FBQ3hCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsRUFDbkUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlDLDhCQUE4QjtRQUM5QixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUN6QyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRWhDLHNCQUFzQjtRQUN0QixRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUN4RTthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFNUIseUNBQXlDO2dCQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsQ0FBQztpQkFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFM0IsbUJBQW1CO2dCQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFUyxLQUFLLENBQUMsT0FBTyxDQUNyQixJQUFZLEVBQ1osSUFRQztRQUVELE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVTLEdBQUcsQ0FDWCxJQUFZLEVBQ1osSUFTQztRQUVELE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELDZCQUE2QjtJQUVuQixNQUFNLENBQUMsSUFBWTtRQUMzQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFFZiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDOUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUV6Qyx3QkFBd0I7WUFDeEIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFFRCxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7WUFDcEIsQ0FBQztZQUVELDJDQUEyQztZQUMzQyxHQUFHLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ1MseUJBQXlCLENBQUMsY0FBK0I7UUFDakUsSUFBSSxjQUFjLEtBQUssSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGNBQWMsQ0FBQztZQUU1QywrQ0FBK0M7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztnQkFDaEYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFFN0Qsb0JBQW9CO2dCQUNwQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2pCLHFCQUFxQjt3QkFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBRTFCLGlCQUFpQjt3QkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDNUUsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLGlCQUFpQjt3QkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDdkUsQ0FBQztvQkFFRCwyQkFBMkI7b0JBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxLQUFLLENBQUMsZUFBZTtRQUM3QixNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFUyxTQUFTLENBQVUsSUFBc0I7UUFDakQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRVMsV0FBVyxDQUFVLElBQXNCLEVBQUUsUUFBcUM7UUFDMUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVyQyw2Q0FBNkM7UUFDN0MsT0FBTyxJQUFJLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxLQUFLLENBQUMsSUFBSSxDQUFVLElBQXNCLEVBQUUsSUFBUTtRQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxvQkFBb0IsS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFDLENBQUM7WUFFL0YsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3JCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTztnQkFDckIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzt3R0E3c0JVLGNBQWMsa0JBeURmLFFBQVEscUxBT1IsV0FBVyxhQUNDLG1CQUFtQjs0R0FqRTlCLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQTBEN0IsTUFBTTsyQkFBQyxRQUFROzswQkFPZixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQ3RDLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcbmltcG9ydCB7IFBlZXIgfSBmcm9tICcuL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5ncyB9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSwgVG9hc3RDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgSVNlbGVjdFBlZXJNb2RhbE9wdGlvbnMsIFNlbGVjdFBlZXJNb2RhbCB9IGZyb20gJy4uL3BlZXIvc2VsZWN0LXBlZXIubW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblR5cGUgfSBmcm9tICdAY2FwYWNpdG9yL25ldHdvcmsnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UsIFNFVFRJTkdTX1NUT1JBR0VfS0VZIH0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFNwbGFzaFNjcmVlbiB9IGZyb20gJ0BjYXBhY2l0b3Ivc3BsYXNoLXNjcmVlbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGVxdWFscywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmssIHNsZWVwLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT3ZlcmxheUV2ZW50RGV0YWlsIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgQXBwTWFuaWZlc3QsIE5ldHdvcmtVdGlscywgTm9kZUluZm8gfSBmcm9tICcuL25ldHdvcmsudXRpbHMnO1xuaW1wb3J0IHsgSHR0cFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2h0dHAvaHR0cC51dGlscyc7XG5pbXBvcnQgeyBWZXJzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBOZXR3b3JrRXZlbnRUeXBlIH0gZnJvbSAnLi9uZXR3b3JrLnR5cGVzJztcbmltcG9ydCB7IEFQUF9MT0dHSU5HX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgSUxvZ2dlciwgSUxvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2VyLm1vZGVsJztcbmltcG9ydCB7IENhcGFjaXRvciB9IGZyb20gJ0BjYXBhY2l0b3IvY29yZSc7XG5cbmNvbnN0IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QgPSB7XG4gIE1PQklMRTogMTAwMCAqIDYwICogMTAgLyogZXZlcnkgMTAgbWluICovLFxuICBERVNLVE9QOiAxMDAwICogNjAgKiA1IC8qIGV2ZXJ5IDUgbWluICovLFxufTtcblxuZXhwb3J0IGNvbnN0IFBFRVJfVVJMX1JFR0VYUCA9IC9eKGh0dHB8aHR0cHMpOlxcL1xcL1teIFwiPyNAXSskLztcblxuZXhwb3J0IGNvbnN0IE5FVFdPUktfREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQgPSAxMDAwMDsgLy8gMTBzIC0gLyFcXCBzaG91bGQgYmUgaGlnaCAoZS5nLiBmb3IgcG9vciBjb25uZWN0aW9uKVxuXG4vKiAtLSBERVYgb25seSAodG8gZGVidWcgcmVmcmVzaCB0aW1lcilcbk5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QuTU9CSUxFID0gIDEwMDA7XG5OZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLkRFU0tUT1AgPSAgMTAwMDsgKi9cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBOZXR3b3JrU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlPFBlZXIsIFBlZXI+IHtcbiAgb25QZWVyQ2hhbmdlcyA9IHRoaXMuc3RhcnRTdWJqZWN0LnBpcGUoXG4gICAgbWFwKChwZWVyKSA9PiBwZWVyPy51cmwgYXMgc3RyaW5nKSxcbiAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmc+KClcbiAgKTtcbiAgb25OZXR3b3JrU3RhdHVzQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdGlvblR5cGU+KG51bGwpO1xuICBvblJlc2V0TmV0d29ya0NhY2hlID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlcjtcbiAgcHJpdmF0ZSBfdGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoUGVyaW9kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaENvbmRpdGlvbjogKCkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGV2aWNlQ29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25UeXBlO1xuICBwcml2YXRlIF9mb3JjZU9mZmxpbmU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Nvbm5lY3Rpb25UaW1lb3V0OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogKChkYXRhPzogYW55KSA9PiBQcm9taXNlPHZvaWQ+KVtdO1xuICB9ID0ge307XG5cbiAgZ2V0IG9ubGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSAhPT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgPT09ICdub25lJztcbiAgfVxuXG4gIGdldCBmb3JjZU9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlT2ZmbGluZTtcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uVHlwZSgpOiBDb25uZWN0aW9uVHlwZSB7XG4gICAgLy8gSWYgZm9yY2Ugb2ZmbGluZTogcmV0dXJuICdub25lJ1xuICAgIHJldHVybiB0aGlzLl9mb3JjZU9mZmxpbmVcbiAgICAgID8gJ25vbmUnXG4gICAgICA6IC8vIEVsc2UsIHJldHVybiBkZXZpY2UgY29ubmVjdGlvbiB0eXBlIChvciB1bmtub3duKVxuICAgICAgICAodGhpcy5zdGFydGVkICYmIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB8fCAndW5rbm93bic7XG4gIH1cblxuICBnZXQgcGVlcigpOiBQZWVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZT8uY2xvbmUoKTtcbiAgfVxuXG4gIHNldCBwZWVyKHBlZXI6IFBlZXIpIHtcbiAgICBpZiAoIVBlZXIuZXF1YWxzKHRoaXMuZGF0YVN1YmplY3QudmFsdWUsIHBlZXIpKSB7XG4gICAgICB0aGlzLnJlc3RhcnQocGVlcik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25UaW1lb3V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25UaW1lb3V0O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWNoZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPR0dJTkdfU0VSVklDRSkgcHJpdmF0ZSBsb2dnaW5nU2VydmljZTogSUxvZ2dpbmdTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXJcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuX21vYmlsZSA9IHRoaXMuc2V0dGluZ3MubW9iaWxlO1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25UaW1lb3V0ID0gZW52aXJvbm1lbnQuY29ubmVjdGlvblRpbWVvdXQgfHwgTkVUV09SS19ERUZBVUxUX0NPTk5FQ1RJT05fVElNRU9VVDtcbiAgICB0aGlzLl9sb2dnZXIgPSB0aGlzLmxvZ2dpbmdTZXJ2aWNlPy5nZXRMb2dnZXIoJ25ldHdvcmsnKTtcblxuICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZCA9IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QuTU9CSUxFO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdGhpcy5vbmxpbmU7IC8vIENoZWNrIG9ubHkgd2hlbiBvbmxpbmUsIGFuZCBzdG9wIHdoZW4gb2ZmbGluZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLkRFU0tUT1A7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24gPSAoKSA9PiB0cnVlOyAvLyBBbHdheXMgY2hlY2tcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUoKHBlZXIpID0+IHRoaXMubmdPbkFmdGVyU3RhcnQocGVlcikpO1xuXG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB0byBuZXR3b3JrIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFR5cGVcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICBvbjxUID0gYW55PihldmVudFR5cGU6IE5ldHdvcmtFdmVudFR5cGUsIGNhbGxiYWNrOiAoZGF0YT86IFQpID0+IFByb21pc2U8YW55Pik6IFN1YnNjcmlwdGlvbiB7XG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAncGVlckNoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vblBlZXJDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAnc3RhdHVzQ2hhbmdlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCh0eXBlKSA9PiBjYWxsYmFjayh0eXBlIGFzIHVua25vd24gYXMgVCkpO1xuXG4gICAgICBjYXNlICdyZXNldENhY2hlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyeU9ubGluZShvcHRzPzoge1xuICAgIHNob3dPZmZsaW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dPbmxpbmVUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd0xvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgYWZ0ZXJSZXRyeURlbGF5PzogbnVtYmVyO1xuICAgIGFmdGVyUmV0cnlQcm9taXNlPzogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gSWYgb2ZmbGluZSBtb2RlIG5vdCBmb3JjZWQsIG9yIGlmIGRldmljZSBzYXlzIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb246IHNraXBcbiAgICBpZiAoIXRoaXMuX2ZvcmNlT2ZmbGluZSB8fCAoYXdhaXQgTmV0d29ya1V0aWxzLmdldENvbm5lY3Rpb25UeXBlKCkpID09PSAnbm9uZScpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFNIb3cgbG9hZGluZyB0b2FzdFxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2hvd0xvYWRpbmdUb2FzdCA9ICFvcHRzIHx8IG9wdHMuc2hvd0xvYWRpbmdUb2FzdCAhPT0gZmFsc2U7XG4gICAgbGV0IGxvYWRpbmdUb2FzdDogSFRNTElvblRvYXN0RWxlbWVudDtcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLlJFVFJZX1RPX0NPTk5FQ1QnLCBkdXJhdGlvbjogMTAwMDAsIG9uV2lsbFByZXNlbnQ6ICh0KSA9PiAobG9hZGluZ1RvYXN0ID0gdCkgfSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJyk7XG4gICAgICBjb25zdCBzZXR0aW5nczogTG9jYWxTZXR0aW5ncyA9IGF3YWl0IHRoaXMuc2V0dGluZ3MucmVhZHkoKTtcblxuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gZmFsc2U7IC8vIE5vIHBlZXIgZGVmaW5lLiBTa2lwXG5cbiAgICAgIGNvbnN0IHBlZXIgPSBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgICAgY29uc3QgcGVlckluZm8gPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgY29uc3QgcGVlckFsaXZlQW5kQ29tcGF0aWJsZSA9IHBlZXJJbmZvICYmIChhd2FpdCB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm8pKTtcbiAgICAgIGlmIChwZWVyQWxpdmVBbmRDb21wYXRpYmxlKSB7XG4gICAgICAgIC8vIFNldCBzb2Z0d2FyZSBhbmQgdmVyc2lvblxuICAgICAgICBwZWVyLnNvZnR3YXJlVmVyc2lvbiA9IHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbjtcbiAgICAgICAgcGVlci5zb2Z0d2FyZU5hbWUgPSBwZWVySW5mby5zb2Z0d2FyZU5hbWU7XG5cbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgb2ZmbGluZSBtb2RlXG4gICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAvLyBSZXN0YXJ0XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdGFydChwZWVyKTtcblxuICAgICAgICAvLyBXYWl0IGEgcHJvbWlzZSwgYmVmb3JlIHJlY2hlY2tcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCB0aGlzLm9ubGluZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIENsb3NlIGxvYWRpbmcgdG9hc3QgKHdpdGggYSBtaW5pbWFsIGRpc3BsYXkgZHVyYXRpb24gb2YgMnMpXG4gICAgaWYgKHNob3dMb2FkaW5nVG9hc3QpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDIwMDAgLSAoRGF0ZS5ub3coKSAtIG5vdykpO1xuICAgICAgaWYgKGxvYWRpbmdUb2FzdCkgYXdhaXQgbG9hZGluZ1RvYXN0LmRpc21pc3MoKTtcbiAgICB9XG5cbiAgICAvLyBSZWNoZWNrIG5ldHdvcmsgc3RhdHVzXG4gICAgY29uc3Qgb25saW5lID0gdGhpcy5vbmxpbmU7XG5cbiAgICAvLyBEaXNwbGF5IGEgdG9hc3QgdG8gdXNlclxuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLnNob3dPbmxpbmVUb2FzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgLy8gRGlzcGxheSB0b2FzdCAod2l0aG91dCBhd2FpdCwgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0IGNsb3NlIGV2ZW50KVxuICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT05MSU5FJywgdHlwZTogJ2luZm8nIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0cyAmJiBvcHRzLnNob3dPZmZsaW5lVG9hc3QgPT09IHRydWUpIHtcbiAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgIHJldHVybiB0aGlzLnNob3dPZmZsaW5lVG9hc3QoeyBzaG93UmV0cnlCdXR0b246IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQgJiYgb25saW5lO1xuICB9XG5cbiAgYXN5bmMgc2hvd09mZmxpbmVUb2FzdChvcHRzPzoge1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgc2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlCdXR0b24/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeVN1Y2Nlc3NUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5TG9hZGluZ1RvYXN0PzogYm9vbGVhbjtcbiAgICBvblJldHJ5U3VjY2Vzcz86ICgpID0+IHZvaWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybjsgLy8gU2tpcCBpZiBvbmxpbmVcblxuICAgIC8vIFRvYXN0IHdpdGggYSByZXRyeSBidXR0b25cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93UmV0cnlCdXR0b24gIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCB0b2FzdFJlc3VsdCA9IGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogKG9wdHMgJiYgb3B0cy5tZXNzYWdlKSB8fCAnRVJST1IuTkVUV09SS19SRVFVSVJFRCcsXG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICBkdXJhdGlvbjogMTAwMDAwLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgLy8gcmVjb25uZWN0IGJ1dHRvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJvbGU6ICdyZWZyZXNoJyxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ05FVFdPUksuQlROX0NIRUNLX0FMSVZFJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVc2VyIGRvbid0IGNsaWNrIHJlY29ubmVjdDogcmV0dXJuXG4gICAgICBpZiAoIXRvYXN0UmVzdWx0IHx8IHRvYXN0UmVzdWx0LnJvbGUgIT09ICdyZWZyZXNoJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBpZiBuZXR3b3JrIHN0YXRlIGNoYW5nZWQgdG8gb25saW5lOiBleGl0IGhlcmVcbiAgICAgIGlmICh0aGlzLm9ubGluZSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFRyeSB0byByZWNvbm5lY3RcbiAgICAgIGNvbnN0IG9ubGluZSA9IGF3YWl0IHRoaXMudHJ5T25saW5lKHtcbiAgICAgICAgc2hvd09mZmxpbmVUb2FzdDogZmFsc2UsXG4gICAgICAgIHNob3dPbmxpbmVUb2FzdDogdG9Cb29sZWFuKG9wdHMgJiYgb3B0cy5zaG93UmV0cnlTdWNjZXNzVG9hc3QsIHRydWUpLFxuICAgICAgICBzaG93TG9hZGluZ1RvYXN0OiB0b0Jvb2xlYW4ob3B0cyAmJiBvcHRzLnNob3dSZXRyeUxvYWRpbmdUb2FzdCwgdHJ1ZSksXG4gICAgICB9KTtcbiAgICAgIGlmIChvbmxpbmUpIHtcbiAgICAgICAgLy8gQ2FsbCBzdWNjZXNzIGNhbGxiYWNrIChhc3luYylcbiAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vblJldHJ5U3VjY2Vzcykge1xuICAgICAgICAgIHNldFRpbWVvdXQob3B0cy5vblJldHJ5U3VjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIG9wdHMgPSB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHNob3dSZXRyeUJ1dHRvbjogZmFsc2UsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIHRvYXN0LCB3aXRob3V0ICdhd2FpdCcsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCdzIGRpc21pc3NcbiAgICB0aGlzLnNob3dUb2FzdCh7XG4gICAgICBtZXNzYWdlOiAnRVJST1IuTkVUV09SS19SRVFVSVJFRCcsXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgLi4ub3B0cyxcbiAgICB9KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgcGVlciBpcyBhbGl2ZVxuICAgKlxuICAgKiBAcGFyYW0gcGVlclxuICAgKi9cbiAgYXN5bmMgY2hlY2tQZWVyQWxpdmUocGVlcj86IHN0cmluZyB8IFBlZXIpOiBQcm9taXNlPE5vZGVJbmZvPiB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikge1xuICAgICAgY29uc3Qgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG4gICAgICBpZiAoIXNldHRpbmdzLnBlZXJVcmwpIHJldHVybiB1bmRlZmluZWQ7IC8vIE5vIHBlZXIgZGVmaW5lLiBTa2lwXG4gICAgICBwZWVyID0gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXROb2RlSW5mbyhwZWVyLCB7IG5vY2FjaGU6IHRydWUsIHRpbWVvdXQ6IHRoaXMuX2Nvbm5lY3Rpb25UaW1lb3V0IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgcGVlciBpcyBjb21wYXRpYmxlIGJhc2VkIG9uIGl0cyBzb2Z0d2FyZSB2ZXJzaW9uIGFuZCB0aGUgcmVxdWlyZWQgbWluaW11bSB2ZXJzaW9uLlxuICAgKiBPcHRpb25hbGx5IGRpc3BsYXlzIGEgdG9hc3Qgbm90aWZpY2F0aW9uIGlmIHRoZSBwZWVyIGlzIG5vdCBjb21wYXRpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVJbmZvfSBwZWVySW5mbyAtIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwZWVyLCBpbmNsdWRpbmcgaXRzIHNvZnR3YXJlIHZlcnNpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBjb21wYXRpYmlsaXR5IGNoZWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNob3dUb2FzdF0gLSBXaGV0aGVyIHRvIHNob3cgYSB0b2FzdCBub3RpZmljYXRpb24gaWYgdGhlIHBlZXIgaXMgbm90IGNvbXBhdGlibGUuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYHRydWVgIGlmIHRoZSBwZWVyIGlzIGNvbXBhdGlibGUsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgYXN5bmMgY2hlY2tQZWVyQ29tcGF0aWJsZShwZWVySW5mbzogTm9kZUluZm8sIG9wdHM/OiB7IHNob3dUb2FzdD86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghcGVlckluZm8pIHJldHVybiBmYWxzZTsgLy8gUGVlciBjYW5ub3QgYmUgcmVhY2hlZFxuICAgIGlmICghdGhpcy5lbnZpcm9ubWVudC5wZWVyTWluVmVyc2lvbikgcmV0dXJuIHRydWU7IC8vIFNraXAgY29tcGF0aWJpbGl0eSBjaGVja1xuXG4gICAgLy8gQ2hlY2sgdGhlIG1pbiBwb2QgdmVyc2lvbiwgZGVmaW5lZCBieSB0aGUgYXBwXG4gICAgY29uc3QgaXNDb21wYXRpYmxlID0gcGVlckluZm8uc29mdHdhcmVWZXJzaW9uICYmIFZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUodGhpcy5lbnZpcm9ubWVudC5wZWVyTWluVmVyc2lvbiwgcGVlckluZm8uc29mdHdhcmVWZXJzaW9uKTtcblxuICAgIC8vIERpc3BsYXkgdG9hc3QsIGlmIG5vdCBjb21wYXRpYmxlXG4gICAgaWYgKCFpc0NvbXBhdGlibGUgJiYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgbWVzc2FnZTogJ05FVFdPUksuRVJST1IuTk9UX0NPTVBBVElCTEVfUEVFUicsXG4gICAgICAgIG1lc3NhZ2VQYXJhbXM6IHtcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uLFxuICAgICAgICB9LFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQ29tcGF0aWJsZTtcbiAgfVxuXG4gIGFzeW5jIGdldE5vZGVJbmZvKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzogeyBub2NhY2hlPzogYm9vbGVhbjsgdGltZW91dD86IG51bWJlciB9KTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmNvbXB1dGVQZWVyUGF0aChwZWVyLCAnL2FwaS9ub2RlL2luZm8nKTtcbiAgICB0aGlzLl9sb2dnZXI/LmRlYnVnKCdnZXROb2RlSW5mbycsIGBHZXR0aW5nICcke3BhdGh9JyAuLi5gKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhOiBOb2RlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0KHBhdGgsIG9wdHMpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5kZWJ1ZygnZ2V0Tm9kZUluZm8nLCBgUmVzcG9uc2Ugb2YgJyR7cGF0aH0nOlxcbiR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YCk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBFcnJvciB3aGlsZSBnZXR0aW5nICcke3BhdGh9JzogJHsoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnJ9YCwgZXJyKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uZXJyb3IoJ2dldE5vZGVJbmZvJywgYEVycm9yIHdoaWxlIGdldHRpbmcgJyR7cGF0aH0nOiAke2Vycj8ubWVzc2FnZSB8fCAnJ31gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXBwTWFuaWZlc3QocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHM/OiB7IG5vY2FjaGU/OiBib29sZWFuIH0pOiBQcm9taXNlPEFwcE1hbmlmZXN0IHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJ21hbmlmZXN0Lmpzb24nKTtcbiAgICAgIGlmIChvcHRzPy5ub2NhY2hlKSB7XG4gICAgICAgIHBhdGggKz0gJz90PScgKyBEYXRlLm5vdygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0KHBhdGgsIG9wdHMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbilcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlICdtYW5pZmVzdC5qc29uJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzXCIsIGVycik7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAnbWFuaWZlc3QuanNvbicuXCIsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFwcFZlcnNpb24ocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHMgPSB7IG5vY2FjaGU6IHRydWUgfSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJ3ZlcnNpb24uYXBwdXAnKTtcbiAgICAgIGlmIChvcHRzLm5vY2FjaGUpIHtcbiAgICAgICAgcGF0aCArPSAnP3Q9JyArIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBWZXJzaW9uOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFRleHQocGF0aCwgb3B0cyk7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGFwcFZlcnNpb24pKSByZXR1cm4gYXBwVmVyc2lvbjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAndmVyc2lvbi5hcHB1cCcuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2Vzc1wiKTtcbiAgICAgIGVsc2UgY29uc29sZS5lcnJvcihcIltuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlICd2ZXJzaW9uLmFwcHVwJy5cIiwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gVHJ5IGxvYWRpbmcgbWFuaWZlc3QuanNvblxuICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRBcHBNYW5pZmVzdChwZWVyLCBvcHRzKTtcbiAgICByZXR1cm4gbWFuaWZlc3Q/LnZlcnNpb247XG4gIH1cblxuICBjb21wdXRlUGVlclBhdGgocGVlcjogc3RyaW5nIHwgUGVlciB8IHVuZGVmaW5lZCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBwZWVyID0gcGVlciB8fCB0aGlzLnBlZXI7XG4gICAgaWYgKCFwZWVyKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgbGV0IHBlZXJVcmwgPSBwZWVyIGluc3RhbmNlb2YgUGVlciA/IHBlZXIudXJsIDogKHBlZXIgYXMgc3RyaW5nKTtcblxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHBlZXJVcmwgPSBwZWVyVXJsLnN1YnN0cmluZygwLCBwZWVyVXJsLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIC8vIEFkZCBmaXJzdCBwYXRoXG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcGF0aCA9ICcvJyArIHBhdGg7XG4gICAgfVxuXG4gICAgLy8gQ29uY2F0IHBlZXIgVVJMIGFuZCBwYXRoXG4gICAgcmV0dXJuIHBlZXJVcmwgKyBwYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgKi9cbiAgc2V0Rm9yY2VPZmZsaW5lKFxuICAgIHZhbHVlPzogYm9vbGVhbixcbiAgICBvcHRzPzoge1xuICAgICAgc2hvd1RvYXN0PzogYm9vbGVhbjsgLy8gRGlzcGxheSBhIHRvYXN0LCB3aGVuIG9mZmxpbmUgP1xuICAgIH1cbiAgKSB7XG4gICAgdmFsdWUgPSB0b0Jvb2xlYW4odmFsdWUsIHRydWUpO1xuICAgIGlmICh0aGlzLl9mb3JjZU9mZmxpbmUgIT09IHZhbHVlKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0Nvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcbiAgICAgIHRoaXMuX2ZvcmNlT2ZmbGluZSA9IHZhbHVlO1xuICAgICAgY29uc3QgY3VycmVudENvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcblxuICAgICAgaWYgKHByZXZpb3VzQ29ubmVjdGlvblR5cGUgIT09IGN1cnJlbnRDb25uZWN0aW9uVHlwZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBDb25uZWN0aW9uIGNoYW5nZWQgdG8geyR7Y3VycmVudENvbm5lY3Rpb25UeXBlfX1gKTtcbiAgICAgICAgdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLm5leHQoY3VycmVudENvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBPZmZsaW5lIG1vZGU6IGFsZXJ0IHRoZSB1c2VyXG4gICAgICAgIGlmIChjdXJyZW50Q29ubmVjdGlvblR5cGUgPT09ICdub25lJyAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHsgbWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FX0hFTFAnLCB0eXBlOiAnd2FybmluZycgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzaG93U2VsZWN0UGVlck1vZGFsKG9wdHM/OiBQYXJ0aWFsPElTZWxlY3RQZWVyTW9kYWxPcHRpb25zPik6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgY29uc3QgcGVlcnMgPSBhd2FpdCB0aGlzLmdldERlZmF1bHRQZWVycygpO1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogU2VsZWN0UGVlck1vZGFsLFxuICAgICAgY29tcG9uZW50UHJvcHM6IDxJU2VsZWN0UGVlck1vZGFsT3B0aW9ucz57XG4gICAgICAgIGRlZmF1bHRQZWVyczogcGVlcnMsXG4gICAgICAgIC4uLm9wdHMsXG4gICAgICB9LFxuICAgICAga2V5Ym9hcmRDbG9zZTogdHJ1ZSxcbiAgICAgIHNob3dCYWNrZHJvcDogdHJ1ZSxcbiAgICB9KTtcbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG5cbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IG1vZGFsLm9uV2lsbERpc21pc3MoKTtcblxuICAgIHJldHVybiAoZGF0YSAmJiAoZGF0YSBhcyBQZWVyKSkgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuXG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gQ2xlYXJpbmcgYWxsIGNhY2hlcy4uLicpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlXG4gICAgICAuY2xlYXJBbGwoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBFbWl0IGV2ZW50XG4gICAgICAgIGlmICgoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSAmJiB0aGlzLm9uUmVzZXROZXR3b3JrQ2FjaGUub2JzZXJ2ZWQpIHtcbiAgICAgICAgICB0aGlzLm9uUmVzZXROZXR3b3JrQ2FjaGUuZW1pdCgpO1xuXG4gICAgICAgICAgLy8gV2FpdCBvYnNlcnZlcnMgY2xlYW4gdGhlaXIgY2FjaGVzLCBpZiBuZWVkZWRcbiAgICAgICAgICByZXR1cm4gc2xlZXAoNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gQWxsIGNhY2hlIGNsZWFyZWQsIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydChwZWVyPzogUGVlcik6IFByb21pc2U8UGVlcj4ge1xuICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIFN0YXJ0aW5nIG5ldHdvcmsuLi4nKTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGNhbiB1c2UgTmV0d29yayBwbHVnaW5cbiAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gQ2FwYWNpdG9yIE5ldHdvcmsgcGx1Z2luIGlzICR7Q2FwYWNpdG9yLmlzUGx1Z2luQXZhaWxhYmxlKCdOZXR3b3JrJykgPyAnYXZhaWxhYmxlJyA6ICdub3QgYXZhaWxhYmxlJ31gKTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHBlZXIgPSBwZWVyIHx8IChhd2FpdCB0aGlzLnJlc3RvcmVMb2NhbGx5KCkpO1xuXG4gICAgaWYgKCFwZWVyKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgdG8gaGlkZSB0aGUgc3BsYXNoc2NyZWVuLCBiZWZvcmUgb3BlbiB0aGUgbW9kYWxcbiAgICAgIGF3YWl0IFNwbGFzaFNjcmVlbi5oaWRlKCk7XG5cbiAgICAgIC8vIE5vIHBlZXIgaW4gc2V0dGluZ3M6IGFzayB1c2VyIHRvIGNob29zZVxuICAgICAgd2hpbGUgKCFwZWVyKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBObyBwZWVyIGRlZmluZWQuIEFza2luZyB1c2VyIHRvIGNob29zZSBhIHBlZXIuJyk7XG4gICAgICAgIHBlZXIgPSBhd2FpdCB0aGlzLnNob3dTZWxlY3RQZWVyTW9kYWwoeyBhbGxvd1NlbGVjdERvd25QZWVyOiBmYWxzZSwgdGl0bGU6ICdORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLlNUQVJUVVBfVElUTEUnLCBjYW5DYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vbmxpbmUpIHtcbiAgICAgIC8vIENoZWNrIGlmIGFsaXZlLiBJZiBub3QsIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgY29uc3QgYWxpdmUgPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgaWYgKCFhbGl2ZSkge1xuICAgICAgICAvLyBQZWVyIG5vdCBhbGl2ZSwgYnV0IHNob3VsZCBiZSBhdCB0aGUgc2FtZSBVUkwsIHJldHJ5aW5nIGVhY2ggMXNcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc2FtZVVybFBlZXIpIHtcbiAgICAgICAgICBjb25zdCByZXRyeU1zID0gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgPiAwID8gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgOiAxMDAwO1xuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGltZXIocmV0cnlNcywgcmV0cnlNcykucGlwZShcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFN1YmplY3QpLFxuICAgICAgICAgICAgICB0YXAoKCkgPT4gY29uc29sZS53YXJuKGBbbmV0d29yay1zZXJ2aWNlXSBXYWl0aW5nIHBlZXIgYmUgYmUgYWxpdmUsIGF0IHske3BlZXIudXJsfX0gLi4uYCkpLFxuICAgICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpKSxcbiAgICAgICAgICAgICAgZmlsdGVyKChhbGl2ZSkgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENvbnRpbnVlLCBpbiBvZmZsaW5lIG1vZGVcbiAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHNlcnZpY2UgW09LXSB7cGVlcjogJyR7cGVlci51cmx9Jywgb25saW5lOiAke3RoaXMub25saW5lfX1gKTtcblxuICAgIHJldHVybiBwZWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25BZnRlclN0YXJ0KHBlZXI6IFBlZXIpIHtcbiAgICAvLyBXYWl0IHNldHRpbmdzIHN0YXJ0cywgdGhlbiBzYXZlIHBlZXIgaW4gc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLmFwcGx5KHsgcGVlclVybDogcGVlci51cmwgfSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGRldmljZSBuZXR3b3JrIGNoYW5nZXNcbiAgICBpZiAoTmV0d29ya1V0aWxzLmlzUGx1Z2luQXZhaWxhYmxlKCkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25UeXBlID0gYXdhaXQgTmV0d29ya1V0aWxzLmdldENvbm5lY3Rpb25UeXBlKCk7XG4gICAgICB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoY29ubmVjdGlvblR5cGUpO1xuXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICBOZXR3b3JrVXRpbHMuc3RhdHVzQ2hhbmdlcygpLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoc3RhdHVzPy5jb25uZWN0aW9uVHlwZSB8fCAndW5rbm93bicpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKCd1bmtub3duJyk7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgdGhlIHJlZnJlc2ggdGltZXJcbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbmdPblN0b3AoKSB7XG4gICAgLy8gU3RvcCB0aW1lciwgaWYgd2UgY2Fubm90IHJlZnJlc2ggYW55bW9yZVxuICAgIGlmICh0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24oKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gcmVzdG9yZSBwZWVyIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBGb3JjZSB1c2UgcHJlZGVmaW5lZCBwZWVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucGVlcikge1xuICAgICAgcmV0dXJuIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LnBlZXIpO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgZnJvbSBzdG9yYWdlXG4gICAgbGV0IHNldHRpbmdzID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChTRVRUSU5HU19TVE9SQUdFX0tFWSk7XG4gICAgc2V0dGluZ3MgPSB0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShzZXR0aW5ncykgOiBzZXR0aW5ncztcbiAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MucGVlclVybCkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW25ldHdvcmtdIFVzZSBwZWVyIHske3NldHRpbmdzLnBlZXJVcmx9fSAoZm91bmQgaW4gdGhlIGxvY2FsIHN0b3JhZ2UpYCk7XG4gICAgICByZXR1cm4gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCB1c2UgZGVmYXVsdCBwZWVyIGluIGVudiwgaWYgZXhpc3RzXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpIHtcbiAgICAgIHJldHVybiBQZWVyLmZyb21PYmplY3QodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcik7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgaWYgQXBwIGlzIGhvc3RlZCwgdHJ5IHRoZSB3ZWJzaXRlIGFzIGEgcGVlclxuICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5fZG9jdW1lbnQ/LmxvY2F0aW9uO1xuICAgIGlmIChsb2NhdGlvbj8ucHJvdG9jb2w/LnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgY29uc3QgaG9zdG5hbWUgPSB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbi5ob3N0O1xuICAgICAgY29uc3QgZGV0ZWN0ZWRQZWVyID0gUGVlci5wYXJzZVVybChgJHt0aGlzLl9kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbH0ke2hvc3RuYW1lfSR7dGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsfWApO1xuXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlciB8fCAoYXdhaXQgdGhpcy5jaGVja1BlZXJBbGl2ZShkZXRlY3RlZFBlZXIpKSkge1xuICAgICAgICByZXR1cm4gZGV0ZWN0ZWRQZWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0byBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdG9wUmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFJlZnJlc2hUaW1lcigpIHtcbiAgICBpZiAodGhpcy5fdGltZXJTdWJzY3JpcHRpb24pIHJldHVybjsgLy8gQWxyZWFkeSBydW5uaW5nOiBza2lwXG5cbiAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBTdGFydGluZyByZWZyZXNoIHRpbWVyLCBldmVyeSAke3RoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZH1tcy4uLmApO1xuXG4gICAgbGV0IGxhc3RJbmZvOiBOb2RlSW5mbztcbiAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHRoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZCwgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kKVxuICAgICAgLnBpcGUoXG4gICAgICAgIC8vIFNraXAgc29tZSB0aW1lciBldmVudCAoc2VlIGNvbnN0cnVjdG9yKVxuICAgICAgICBmaWx0ZXIodGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uKSxcblxuICAgICAgICAvLyBDaGVja2luIGlmIHBlZXIgYWxpdmVcbiAgICAgICAgdGFwKCgpID0+IGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5jaGVja1BlZXJBbGl2ZSh0aGlzLnBlZXIpKSxcblxuICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGNoYW5nZXNcbiAgICAgICAgZmlsdGVyKChpbmZvKSA9PiAhZXF1YWxzKGluZm8sIGxhc3RJbmZvKSksXG4gICAgICAgIHRhcCgoaW5mbykgPT4gKGxhc3RJbmZvID0gaW5mbykpLFxuXG4gICAgICAgIC8vIENoZWNrIGNvbXBhdGliaWxpdHlcbiAgICAgICAgbWVyZ2VNYXAoKGluZm8pID0+IHRoaXMuY2hlY2tQZWVyQ29tcGF0aWJsZShpbmZvLCB7IHNob3dUb2FzdDogdHJ1ZSB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGFsaXZlKSA9PiB7XG4gICAgICAgIGlmIChhbGl2ZSAmJiB0aGlzLm9mZmxpbmUpIHtcbiAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZShmYWxzZSk7XG5cbiAgICAgICAgICAvLyBSZXN0YXJ0IHRoZSBzZXJ2aWNlICh0byBmb3JjZSByZSBhdXRoKVxuICAgICAgICAgIHRoaXMucmVzdGFydCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFhbGl2ZSAmJiB0aGlzLm9ubGluZSkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKHRydWUpO1xuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgc2VydmljZVxuICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uLmFkZCgoKSA9PiBjb25zb2xlLmRlYnVnKCdbbmV0d29ya10gUmVmcmVzaCB0aW1lciBzdG9wcGVkJykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFRleHQoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdHM/OiB7XG4gICAgICBoZWFkZXJzPzpcbiAgICAgICAgfCBIdHRwSGVhZGVyc1xuICAgICAgICB8IHtcbiAgICAgICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgICAgIH07XG4gICAgICByZXNwb25zZVR5cGU/OiAndGV4dCc7XG4gICAgICBub2NhY2hlPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRUZXh0KHRoaXMuaHR0cCwgdGhpcy5nZXRVcmkocGF0aCksIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIGhlYWRlcnM/OlxuICAgICAgICB8IEh0dHBIZWFkZXJzXG4gICAgICAgIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgICAgfTtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICAgICAgdGltZW91dD86IG51bWJlcjtcbiAgICB9XG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0SnNvbjxUPih0aGlzLmh0dHAsIHRoaXMuZ2V0VXJpKHBhdGgpLCBvcHRzKTtcbiAgfVxuXG4gIC8qIC0tIFByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGdldFVyaShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB1cmkgPSBwYXRoO1xuXG4gICAgLy8gSWYgcGF0aCBpcyBub3QgYW4gVVJJOiBwcmVwZW5kIHdpdGggcGVlciBVUkxcbiAgICBpZiAoIXVyaS5zdGFydHNXaXRoKCdodHRwOi8vJykgJiYgIXVyaS5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICBsZXQgcGVlclVybCA9IHRoaXMucGVlciAmJiB0aGlzLnBlZXIudXJsO1xuXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyaW5nKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBmaXJzdCBwYXRoXG4gICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIFVSSTogY29uY2F0IHBlZXIgVVJMIGFuZCBwYXRoXG4gICAgICB1cmkgPSBwZWVyVXJsICsgcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuICBwcm90ZWN0ZWQgb25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZChjb25uZWN0aW9uVHlwZT86IENvbm5lY3Rpb25UeXBlKSB7XG4gICAgaWYgKGNvbm5lY3Rpb25UeXBlICE9PSB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSkge1xuICAgICAgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPSBjb25uZWN0aW9uVHlwZTtcblxuICAgICAgLy8gSWYgTk9UIGFscmVhZHkgZm9yY2VkIGFzIG9mZmxpbmUsIGVtaXQgZXZlbnRcbiAgICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHt0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBDaGFuZ2UgdG8gb2ZmbGluZVxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHsgbWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FX0hFTFAnLCB0eXBlOiAnd2FybmluZycgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORScsIHR5cGU6ICd3YXJuaW5nJyB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdG9wIHRoZSBuZXR3b3JrIHNlcnZpY2VcbiAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCBwZWVycywgZnJvbSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldERlZmF1bHRQZWVycygpOiBQcm9taXNlPFBlZXJbXT4ge1xuICAgIGNvbnN0IHBlZXJzID0gKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXJzIHx8IFtdKS5tYXAoUGVlci5mcm9tT2JqZWN0KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBlZXJzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Q8VCA9IGFueT4ob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPFQ+PiB7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTGlzdGVuZXI8VCA9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTx2b2lkPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmUsIHJlbW92ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0PFQgPSBhbnk+KG5hbWU6IE5ldHdvcmtFdmVudFR5cGUsIGRhdGE/OiBUKSB7XG4gICAgY29uc3QgaG9va3MgPSB0aGlzLl9saXN0ZW5lcnNbbmFtZV07XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShob29rcykpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmstc2VydmljZV0gVHJpZ2dlciAke25hbWV9IGhvb2s6IEV4ZWN1dGluZyAke2hvb2tzLmxlbmd0aH0gY2FsbGJhY2tzLi4uYCk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgaG9va3MubWFwKChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgICBpZiAoIXByb21pc2UpIHJldHVybjtcbiAgICAgICAgICByZXR1cm4gcHJvbWlzZS5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBleGVjdXRpbmcgaG9vayAnICsgbmFtZSwgZXJyKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
649
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUUsT0FBTyxFQUF3QixvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBHLE9BQU8sRUFBZSxZQUFZLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBZSxXQUFXLEVBQUUs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a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkEwRDdCLE1BQU07MkJBQUMsUUFBUTs7MEJBT2YsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUN0QyxRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3MgfSBmcm9tICcuL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciwgUGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IElTZWxlY3RQZWVyTW9kYWxPcHRpb25zLCBTZWxlY3RQZWVyTW9kYWwgfSBmcm9tICcuLi9wZWVyL3NlbGVjdC1wZWVyLm1vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbm5lY3Rpb25UeXBlIH0gZnJvbSAnQGNhcGFjaXRvci9uZXR3b3JrJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlLCBTRVRUSU5HU19TVE9SQUdFX0tFWSB9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBTcGxhc2hTY3JlZW4gfSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBlcXVhbHMsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWxPckJsYW5rLCBzbGVlcCwgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE92ZXJsYXlFdmVudERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IEFwcE1hbmlmZXN0LCBOZXR3b3JrVXRpbHMsIE5vZGVJbmZvIH0gZnJvbSAnLi9uZXR3b3JrLnV0aWxzJztcbmltcG9ydCB7IEh0dHBVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9odHRwL2h0dHAudXRpbHMnO1xuaW1wb3J0IHsgVmVyc2lvblV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1vYnNlcnZhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgTmV0d29ya0V2ZW50VHlwZSB9IGZyb20gJy4vbmV0d29yay50eXBlcyc7XG5pbXBvcnQgeyBBUFBfTE9HR0lOR19TRVJWSUNFIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2luZy1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IElMb2dnZXIsIElMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xuXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICBNT0JJTEU6IDEwMDAgKiA2MCAqIDEwIC8qIGV2ZXJ5IDEwIG1pbiAqLyxcbiAgREVTS1RPUDogMTAwMCAqIDYwICogNSAvKiBldmVyeSA1IG1pbiAqLyxcbn07XG5cbmV4cG9ydCBjb25zdCBQRUVSX1VSTF9SRUdFWFAgPSAvXihodHRwfGh0dHBzKTpcXC9cXC9bXiBcIj8jQF0rJC87XG5cbmV4cG9ydCBjb25zdCBORVRXT1JLX0RFRkFVTFRfQ09OTkVDVElPTl9USU1FT1VUID0gMTAwMDA7IC8vIDEwcyAtIC8hXFwgc2hvdWxkIGJlIGhpZ2ggKGUuZy4gZm9yIHBvb3IgY29ubmVjdGlvbilcblxuLyogLS0gREVWIG9ubHkgKHRvIGRlYnVnIHJlZnJlc2ggdGltZXIpXG5OZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRSA9ICAxMDAwO1xuTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QID0gIDEwMDA7ICovXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxQZWVyLCBQZWVyPiB7XG4gIG9uUGVlckNoYW5nZXMgPSB0aGlzLnN0YXJ0U3ViamVjdC5waXBlKFxuICAgIG1hcCgocGVlcikgPT4gcGVlcj8udXJsIGFzIHN0cmluZyksXG4gICAgZmlsdGVyKGlzTm90TmlsT3JCbGFuayksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8c3RyaW5nPigpXG4gICk7XG4gIG9uTmV0d29ya1N0YXR1c0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25UeXBlPihudWxsKTtcbiAgb25SZXNldE5ldHdvcmtDYWNoZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW9iaWxlOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXI7XG4gIHByaXZhdGUgX3RpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaFBlcmlvZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lclJlZnJlc2hDb25kaXRpb246ICgpID0+IGJvb2xlYW47XG4gIHByaXZhdGUgX2RldmljZUNvbm5lY3Rpb25UeXBlOiBDb25uZWN0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfZm9yY2VPZmZsaW5lOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25uZWN0aW9uVGltZW91dDogbnVtYmVyO1xuXG4gIHByaXZhdGUgX2xpc3RlbmVyczoge1xuICAgIFtrZXk6IHN0cmluZ106ICgoZGF0YT86IGFueSkgPT4gUHJvbWlzZTx2b2lkPilbXTtcbiAgfSA9IHt9O1xuXG4gIGdldCBvbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgIT09ICdub25lJztcbiAgfVxuXG4gIGdldCBvZmZsaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25UeXBlID09PSAnbm9uZSc7XG4gIH1cblxuICBnZXQgZm9yY2VPZmZsaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JjZU9mZmxpbmU7XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblR5cGUoKTogQ29ubmVjdGlvblR5cGUge1xuICAgIC8vIElmIGZvcmNlIG9mZmxpbmU6IHJldHVybiAnbm9uZSdcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VPZmZsaW5lXG4gICAgICA/ICdub25lJ1xuICAgICAgOiAvLyBFbHNlLCByZXR1cm4gZGV2aWNlIGNvbm5lY3Rpb24gdHlwZSAob3IgdW5rbm93bilcbiAgICAgICAgKHRoaXMuc3RhcnRlZCAmJiB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSkgfHwgJ3Vua25vd24nO1xuICB9XG5cbiAgZ2V0IHBlZXIoKTogUGVlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN1YmplY3QudmFsdWU/LmNsb25lKCk7XG4gIH1cblxuICBzZXQgcGVlcihwZWVyOiBQZWVyKSB7XG4gICAgaWYgKCFQZWVyLmVxdWFscyh0aGlzLmRhdGFTdWJqZWN0LnZhbHVlLCBwZWVyKSkge1xuICAgICAgdGhpcy5yZXN0YXJ0KHBlZXIpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uVGltZW91dCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uVGltZW91dDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FjaGU6IENhY2hlU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0dHSU5HX1NFUlZJQ0UpIHByaXZhdGUgbG9nZ2luZ1NlcnZpY2U6IElMb2dnaW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLl9tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcbiAgICB0aGlzLl9jb25uZWN0aW9uVGltZW91dCA9IGVudmlyb25tZW50LmNvbm5lY3Rpb25UaW1lb3V0IHx8IE5FVFdPUktfREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQ7XG4gICAgdGhpcy5fbG9nZ2VyID0gdGhpcy5sb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrJyk7XG5cbiAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRTtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiA9ICgpID0+IHRoaXMub25saW5lOyAvLyBDaGVjayBvbmx5IHdoZW4gb25saW5lLCBhbmQgc3RvcCB3aGVuIG9mZmxpbmVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdHJ1ZTsgLy8gQWx3YXlzIGNoZWNrXG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKChwZWVyKSA9PiB0aGlzLm5nT25BZnRlclN0YXJ0KHBlZXIpKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdG8gbmV0d29yayBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb248VCA9IGFueT4oZXZlbnRUeXBlOiBOZXR3b3JrRXZlbnRUeXBlLCBjYWxsYmFjazogKGRhdGE/OiBUKSA9PiBQcm9taXNlPGFueT4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3BlZXJDaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25QZWVyQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3N0YXR1c0NoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgodHlwZSkgPT4gY2FsbGJhY2sodHlwZSBhcyB1bmtub3duIGFzIFQpKTtcblxuICAgICAgY2FzZSAncmVzZXRDYWNoZSc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uUmVzZXROZXR3b3JrQ2FjaGUuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB0cnlPbmxpbmUob3B0cz86IHtcbiAgICBzaG93T2ZmbGluZVRvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93T25saW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIGFmdGVyUmV0cnlEZWxheT86IG51bWJlcjtcbiAgICBhZnRlclJldHJ5UHJvbWlzZT86ICgpID0+IFByb21pc2U8YW55PjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIElmIG9mZmxpbmUgbW9kZSBub3QgZm9yY2VkLCBvciBpZiBkZXZpY2Ugc2F5cyB0aGVyZSBpcyBubyBjb25uZWN0aW9uOiBza2lwXG4gICAgaWYgKCF0aGlzLl9mb3JjZU9mZmxpbmUgfHwgKGF3YWl0IE5ldHdvcmtVdGlscy5nZXRDb25uZWN0aW9uVHlwZSgpKSA9PT0gJ25vbmUnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBTSG93IGxvYWRpbmcgdG9hc3RcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNob3dMb2FkaW5nVG9hc3QgPSAhb3B0cyB8fCBvcHRzLnNob3dMb2FkaW5nVG9hc3QgIT09IGZhbHNlO1xuICAgIGxldCBsb2FkaW5nVG9hc3Q6IEhUTUxJb25Ub2FzdEVsZW1lbnQ7XG4gICAgaWYgKHNob3dMb2FkaW5nVG9hc3QpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHsgbWVzc2FnZTogJ05FVFdPUksuSU5GTy5SRVRSWV9UT19DT05ORUNUJywgZHVyYXRpb246IDEwMDAwLCBvbldpbGxQcmVzZW50OiAodCkgPT4gKGxvYWRpbmdUb2FzdCA9IHQpIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpO1xuICAgICAgY29uc3Qgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG5cbiAgICAgIGlmICghc2V0dGluZ3MucGVlclVybCkgcmV0dXJuIGZhbHNlOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuXG4gICAgICBjb25zdCBwZWVyID0gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICAgIGNvbnN0IHBlZXJJbmZvID0gYXdhaXQgdGhpcy5jaGVja1BlZXJBbGl2ZShwZWVyKTtcbiAgICAgIGNvbnN0IHBlZXJBbGl2ZUFuZENvbXBhdGlibGUgPSBwZWVySW5mbyAmJiAoYXdhaXQgdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvKSk7XG4gICAgICBpZiAocGVlckFsaXZlQW5kQ29tcGF0aWJsZSkge1xuICAgICAgICAvLyBTZXQgc29mdHdhcmUgYW5kIHZlcnNpb25cbiAgICAgICAgcGVlci5zb2Z0d2FyZVZlcnNpb24gPSBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb247XG4gICAgICAgIHBlZXIuc29mdHdhcmVOYW1lID0gcGVlckluZm8uc29mdHdhcmVOYW1lO1xuXG4gICAgICAgIC8vIERpc2FibGUgdGhlIG9mZmxpbmUgbW9kZVxuICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZShmYWxzZSk7XG5cbiAgICAgICAgLy8gUmVzdGFydFxuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnQocGVlcik7XG5cbiAgICAgICAgLy8gV2FpdCBhIHByb21pc2UsIGJlZm9yZSByZWNoZWNrXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnYmVmb3JlVHJ5T25saW5lRmluaXNoJywgdGhpcy5vbmxpbmUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBsb2FkaW5nIHRvYXN0ICh3aXRoIGEgbWluaW1hbCBkaXNwbGF5IGR1cmF0aW9uIG9mIDJzKVxuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCBzbGVlcCgyMDAwIC0gKERhdGUubm93KCkgLSBub3cpKTtcbiAgICAgIGlmIChsb2FkaW5nVG9hc3QpIGF3YWl0IGxvYWRpbmdUb2FzdC5kaXNtaXNzKCk7XG4gICAgfVxuXG4gICAgLy8gUmVjaGVjayBuZXR3b3JrIHN0YXR1c1xuICAgIGNvbnN0IG9ubGluZSA9IHRoaXMub25saW5lO1xuXG4gICAgLy8gRGlzcGxheSBhIHRvYXN0IHRvIHVzZXJcbiAgICBpZiAob25saW5lKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93T25saW5lVG9hc3QgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9OTElORScsIHR5cGU6ICdpbmZvJyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdHMgJiYgb3B0cy5zaG93T2ZmbGluZVRvYXN0ID09PSB0cnVlKSB7XG4gICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy5zaG93T2ZmbGluZVRvYXN0KHsgc2hvd1JldHJ5QnV0dG9uOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydGVkICYmIG9ubGluZTtcbiAgfVxuXG4gIGFzeW5jIHNob3dPZmZsaW5lVG9hc3Qob3B0cz86IHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIHNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5QnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlTdWNjZXNzVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeUxvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgb25SZXRyeVN1Y2Nlc3M/OiAoKSA9PiB2b2lkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMub25saW5lKSByZXR1cm47IC8vIFNraXAgaWYgb25saW5lXG5cbiAgICAvLyBUb2FzdCB3aXRoIGEgcmV0cnkgYnV0dG9uXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd1JldHJ5QnV0dG9uICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdG9hc3RSZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IChvcHRzICYmIG9wdHMubWVzc2FnZSkgfHwgJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnLFxuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwMCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIHJlY29ubmVjdCBidXR0b25cbiAgICAgICAgICB7XG4gICAgICAgICAgICByb2xlOiAncmVmcmVzaCcsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdORVRXT1JLLkJUTl9DSEVDS19BTElWRScpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlciBkb24ndCBjbGljayByZWNvbm5lY3Q6IHJldHVyblxuICAgICAgaWYgKCF0b2FzdFJlc3VsdCB8fCB0b2FzdFJlc3VsdC5yb2xlICE9PSAncmVmcmVzaCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gaWYgbmV0d29yayBzdGF0ZSBjaGFuZ2VkIHRvIG9ubGluZTogZXhpdCBoZXJlXG4gICAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVjb25uZWN0XG4gICAgICBjb25zdCBvbmxpbmUgPSBhd2FpdCB0aGlzLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5U3VjY2Vzc1RvYXN0LCB0cnVlKSxcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogdG9Cb29sZWFuKG9wdHMgJiYgb3B0cy5zaG93UmV0cnlMb2FkaW5nVG9hc3QsIHRydWUpLFxuICAgICAgfSk7XG4gICAgICBpZiAob25saW5lKSB7XG4gICAgICAgIC8vIENhbGwgc3VjY2VzcyBjYWxsYmFjayAoYXN5bmMpXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMub25SZXRyeVN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KG9wdHMub25SZXRyeVN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBvcHRzID0ge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzaG93UmV0cnlCdXR0b246IGZhbHNlLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNpbXBsZSB0b2FzdCwgd2l0aG91dCAnYXdhaXQnLCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QncyBkaXNtaXNzXG4gICAgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgbWVzc2FnZTogJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnLFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBlZXIgaXMgYWxpdmVcbiAgICpcbiAgICogQHBhcmFtIHBlZXJcbiAgICovXG4gIGFzeW5jIGNoZWNrUGVlckFsaXZlKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuICAgICAgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZUluZm8ocGVlciwgeyBub2NhY2hlOiB0cnVlLCB0aW1lb3V0OiB0aGlzLl9jb25uZWN0aW9uVGltZW91dCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHBlZXIgaXMgY29tcGF0aWJsZSBiYXNlZCBvbiBpdHMgc29mdHdhcmUgdmVyc2lvbiBhbmQgdGhlIHJlcXVpcmVkIG1pbmltdW0gdmVyc2lvbi5cbiAgICogT3B0aW9uYWxseSBkaXNwbGF5cyBhIHRvYXN0IG5vdGlmaWNhdGlvbiBpZiB0aGUgcGVlciBpcyBub3QgY29tcGF0aWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlSW5mb30gcGVlckluZm8gLSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVlciwgaW5jbHVkaW5nIGl0cyBzb2Z0d2FyZSB2ZXJzaW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgY29tcGF0aWJpbGl0eSBjaGVjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zaG93VG9hc3RdIC0gV2hldGhlciB0byBzaG93IGEgdG9hc3Qgbm90aWZpY2F0aW9uIGlmIHRoZSBwZWVyIGlzIG5vdCBjb21wYXRpYmxlLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCBpZiB0aGUgcGVlciBpcyBjb21wYXRpYmxlLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGFzeW5jIGNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm86IE5vZGVJbmZvLCBvcHRzPzogeyBzaG93VG9hc3Q/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXBlZXJJbmZvKSByZXR1cm4gZmFsc2U7IC8vIFBlZXIgY2Fubm90IGJlIHJlYWNoZWRcbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24pIHJldHVybiB0cnVlOyAvLyBTa2lwIGNvbXBhdGliaWxpdHkgY2hlY2tcblxuICAgIC8vIENoZWNrIHRoZSBtaW4gcG9kIHZlcnNpb24sIGRlZmluZWQgYnkgdGhlIGFwcFxuICAgIGNvbnN0IGlzQ29tcGF0aWJsZSA9IHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbiAmJiBWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24sIHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbik7XG5cbiAgICAvLyBEaXNwbGF5IHRvYXN0LCBpZiBub3QgY29tcGF0aWJsZVxuICAgIGlmICghaXNDb21wYXRpYmxlICYmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdORVRXT1JLLkVSUk9SLk5PVF9DT01QQVRJQkxFX1BFRVInLFxuICAgICAgICBtZXNzYWdlUGFyYW1zOiB7XG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5lbnZpcm9ubWVudC5wZWVyTWluVmVyc2lvbixcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NvbXBhdGlibGU7XG4gIH1cblxuICBhc3luYyBnZXROb2RlSW5mbyhwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHsgbm9jYWNoZT86IGJvb2xlYW47IHRpbWVvdXQ/OiBudW1iZXIgfSk6IFByb21pc2U8Tm9kZUluZm8+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJy9hcGkvbm9kZS9pbmZvJyk7XG4gICAgdGhpcy5fbG9nZ2VyPy5kZWJ1ZygnZ2V0Tm9kZUluZm8nLCBgR2V0dGluZyAnJHtwYXRofScgLi4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YTogTm9kZUluZm8gPSBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2dldE5vZGVJbmZvJywgYFJlc3BvbnNlIG9mICcke3BhdGh9JzpcXG4ke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7KGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyfWAsIGVycik7XG4gICAgICB0aGlzLl9sb2dnZXI/LmVycm9yKCdnZXROb2RlSW5mbycsIGBFcnJvciB3aGlsZSBnZXR0aW5nICcke3BhdGh9JzogJHtlcnI/Lm1lc3NhZ2UgfHwgJyd9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFwcE1hbmlmZXN0KHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzogeyBub2NhY2hlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxBcHBNYW5pZmVzdCB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICdtYW5pZmVzdC5qc29uJyk7XG4gICAgICBpZiAob3B0cz8ubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAnbWFuaWZlc3QuanNvbicuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2Vzc1wiLCBlcnIpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ21hbmlmZXN0Lmpzb24nLlwiLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBWZXJzaW9uKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzID0geyBub2NhY2hlOiB0cnVlIH0pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICd2ZXJzaW9uLmFwcHVwJyk7XG4gICAgICBpZiAob3B0cy5ub2NhY2hlKSB7XG4gICAgICAgIHBhdGggKz0gJz90PScgKyBEYXRlLm5vdygpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwVmVyc2lvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRUZXh0KHBhdGgsIG9wdHMpO1xuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhhcHBWZXJzaW9uKSkgcmV0dXJuIGFwcFZlcnNpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ3ZlcnNpb24uYXBwdXAnLiBQbGVhc2UgbWFrZSBzdXJlIHdlYnNlcnZlciBjb25maWcgYWxsb3cgQ09SUyBhY2Nlc3NcIik7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAndmVyc2lvbi5hcHB1cCcuXCIsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIFRyeSBsb2FkaW5nIG1hbmlmZXN0Lmpzb25cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0QXBwTWFuaWZlc3QocGVlciwgb3B0cyk7XG4gICAgcmV0dXJuIG1hbmlmZXN0Py52ZXJzaW9uO1xuICB9XG5cbiAgY29tcHV0ZVBlZXJQYXRoKHBlZXI6IHN0cmluZyB8IFBlZXIgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBwZWVyVXJsID0gcGVlciBpbnN0YW5jZW9mIFBlZXIgPyBwZWVyLnVybCA6IChwZWVyIGFzIHN0cmluZyk7XG5cbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICBpZiAocGVlclVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHJpbmcoMCwgcGVlclVybC5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgIH1cblxuICAgIC8vIENvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgIHJldHVybiBwZWVyVXJsICsgcGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBmb3JjZSBvZmZsaW5lIG1vZGVcbiAgICovXG4gIHNldEZvcmNlT2ZmbGluZShcbiAgICB2YWx1ZT86IGJvb2xlYW4sXG4gICAgb3B0cz86IHtcbiAgICAgIHNob3dUb2FzdD86IGJvb2xlYW47IC8vIERpc3BsYXkgYSB0b2FzdCwgd2hlbiBvZmZsaW5lID9cbiAgICB9XG4gICkge1xuICAgIHZhbHVlID0gdG9Cb29sZWFuKHZhbHVlLCB0cnVlKTtcbiAgICBpZiAodGhpcy5fZm9yY2VPZmZsaW5lICE9PSB2YWx1ZSkge1xuICAgICAgY29uc3QgcHJldmlvdXNDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG4gICAgICB0aGlzLl9mb3JjZU9mZmxpbmUgPSB2YWx1ZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG5cbiAgICAgIGlmIChwcmV2aW91c0Nvbm5lY3Rpb25UeXBlICE9PSBjdXJyZW50Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gQ29ubmVjdGlvbiBjaGFuZ2VkIHRvIHske2N1cnJlbnRDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KGN1cnJlbnRDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gT2ZmbGluZSBtb2RlOiBhbGVydCB0aGUgdXNlclxuICAgICAgICBpZiAoY3VycmVudENvbm5lY3Rpb25UeXBlID09PSAnbm9uZScgJiYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzogUGFydGlhbDxJU2VsZWN0UGVlck1vZGFsT3B0aW9ucz4pOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGNvbnN0IHBlZXJzID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0UGVlcnMoKTtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFNlbGVjdFBlZXJNb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+e1xuICAgICAgICBkZWZhdWx0UGVlcnM6IHBlZXJzLFxuICAgICAgICAuLi5vcHRzLFxuICAgICAgfSxcbiAgICAgIGtleWJvYXJkQ2xvc2U6IHRydWUsXG4gICAgICBzaG93QmFja2Ryb3A6IHRydWUsXG4gICAgfSk7XG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbldpbGxEaXNtaXNzKCk7XG5cbiAgICByZXR1cm4gKGRhdGEgJiYgKGRhdGEgYXMgUGVlcikpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcblxuICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIENsZWFyaW5nIGFsbCBjYWNoZXMuLi4nKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVxuICAgICAgLmNsZWFyQWxsKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBldmVudFxuICAgICAgICBpZiAoKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgJiYgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLm9ic2VydmVkKSB7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLmVtaXQoKTtcblxuICAgICAgICAgIC8vIFdhaXQgb2JzZXJ2ZXJzIGNsZWFuIHRoZWlyIGNhY2hlcywgaWYgbmVlZGVkXG4gICAgICAgICAgcmV0dXJuIHNsZWVwKDUwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW25ldHdvcmtdIEFsbCBjYWNoZSBjbGVhcmVkLCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2g8VD4odXJsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHVybCcpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxUPih1cmwpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtuZXR3b3JrXSBFcnJvciBmZXRjaGluZyBkYXRhIGZyb20gJHt1cmx9OmAsIGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydChwZWVyPzogUGVlcik6IFByb21pc2U8UGVlcj4ge1xuICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIFN0YXJ0aW5nIG5ldHdvcmsuLi4nKTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGNhbiB1c2UgTmV0d29yayBwbHVnaW5cbiAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gQ2FwYWNpdG9yIE5ldHdvcmsgcGx1Z2luIGlzICR7Q2FwYWNpdG9yLmlzUGx1Z2luQXZhaWxhYmxlKCdOZXR3b3JrJykgPyAnYXZhaWxhYmxlJyA6ICdub3QgYXZhaWxhYmxlJ31gKTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHBlZXIgPSBwZWVyIHx8IChhd2FpdCB0aGlzLnJlc3RvcmVMb2NhbGx5KCkpO1xuXG4gICAgaWYgKCFwZWVyKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgdG8gaGlkZSB0aGUgc3BsYXNoc2NyZWVuLCBiZWZvcmUgb3BlbiB0aGUgbW9kYWxcbiAgICAgIGF3YWl0IFNwbGFzaFNjcmVlbi5oaWRlKCk7XG5cbiAgICAgIC8vIE5vIHBlZXIgaW4gc2V0dGluZ3M6IGFzayB1c2VyIHRvIGNob29zZVxuICAgICAgd2hpbGUgKCFwZWVyKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBObyBwZWVyIGRlZmluZWQuIEFza2luZyB1c2VyIHRvIGNob29zZSBhIHBlZXIuJyk7XG4gICAgICAgIHBlZXIgPSBhd2FpdCB0aGlzLnNob3dTZWxlY3RQZWVyTW9kYWwoeyBhbGxvd1NlbGVjdERvd25QZWVyOiBmYWxzZSwgdGl0bGU6ICdORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLlNUQVJUVVBfVElUTEUnLCBjYW5DYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vbmxpbmUpIHtcbiAgICAgIC8vIENoZWNrIGlmIGFsaXZlLiBJZiBub3QsIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgY29uc3QgYWxpdmUgPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgaWYgKCFhbGl2ZSkge1xuICAgICAgICAvLyBQZWVyIG5vdCBhbGl2ZSwgYnV0IHNob3VsZCBiZSBhdCB0aGUgc2FtZSBVUkwsIHJldHJ5aW5nIGVhY2ggMXNcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc2FtZVVybFBlZXIpIHtcbiAgICAgICAgICBjb25zdCByZXRyeU1zID0gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgPiAwID8gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgOiAxMDAwO1xuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGltZXIocmV0cnlNcywgcmV0cnlNcykucGlwZShcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFN1YmplY3QpLFxuICAgICAgICAgICAgICB0YXAoKCkgPT4gY29uc29sZS53YXJuKGBbbmV0d29yay1zZXJ2aWNlXSBXYWl0aW5nIHBlZXIgYmUgYmUgYWxpdmUsIGF0IHske3BlZXIudXJsfX0gLi4uYCkpLFxuICAgICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpKSxcbiAgICAgICAgICAgICAgZmlsdGVyKChhbGl2ZSkgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENvbnRpbnVlLCBpbiBvZmZsaW5lIG1vZGVcbiAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHNlcnZpY2UgW09LXSB7cGVlcjogJyR7cGVlci51cmx9Jywgb25saW5lOiAke3RoaXMub25saW5lfX1gKTtcblxuICAgIHJldHVybiBwZWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25BZnRlclN0YXJ0KHBlZXI6IFBlZXIpIHtcbiAgICAvLyBXYWl0IHNldHRpbmdzIHN0YXJ0cywgdGhlbiBzYXZlIHBlZXIgaW4gc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLmFwcGx5KHsgcGVlclVybDogcGVlci51cmwgfSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGRldmljZSBuZXR3b3JrIGNoYW5nZXNcbiAgICBpZiAoTmV0d29ya1V0aWxzLmlzUGx1Z2luQXZhaWxhYmxlKCkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25UeXBlID0gYXdhaXQgTmV0d29ya1V0aWxzLmdldENvbm5lY3Rpb25UeXBlKCk7XG4gICAgICB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoY29ubmVjdGlvblR5cGUpO1xuXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICBOZXR3b3JrVXRpbHMuc3RhdHVzQ2hhbmdlcygpLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoc3RhdHVzPy5jb25uZWN0aW9uVHlwZSB8fCAndW5rbm93bicpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKCd1bmtub3duJyk7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgdGhlIHJlZnJlc2ggdGltZXJcbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbmdPblN0b3AoKSB7XG4gICAgLy8gU3RvcCB0aW1lciwgaWYgd2UgY2Fubm90IHJlZnJlc2ggYW55bW9yZVxuICAgIGlmICh0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24oKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gcmVzdG9yZSBwZWVyIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBGb3JjZSB1c2UgcHJlZGVmaW5lZCBwZWVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucGVlcikge1xuICAgICAgcmV0dXJuIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LnBlZXIpO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgZnJvbSBzdG9yYWdlXG4gICAgbGV0IHNldHRpbmdzID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChTRVRUSU5HU19TVE9SQUdFX0tFWSk7XG4gICAgc2V0dGluZ3MgPSB0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShzZXR0aW5ncykgOiBzZXR0aW5ncztcbiAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MucGVlclVybCkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW25ldHdvcmtdIFVzZSBwZWVyIHske3NldHRpbmdzLnBlZXJVcmx9fSAoZm91bmQgaW4gdGhlIGxvY2FsIHN0b3JhZ2UpYCk7XG4gICAgICByZXR1cm4gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCB1c2UgZGVmYXVsdCBwZWVyIGluIGVudiwgaWYgZXhpc3RzXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpIHtcbiAgICAgIHJldHVybiBQZWVyLmZyb21PYmplY3QodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcik7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgaWYgQXBwIGlzIGhvc3RlZCwgdHJ5IHRoZSB3ZWJzaXRlIGFzIGEgcGVlclxuICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5fZG9jdW1lbnQ/LmxvY2F0aW9uO1xuICAgIGlmIChsb2NhdGlvbj8ucHJvdG9jb2w/LnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgY29uc3QgaG9zdG5hbWUgPSB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbi5ob3N0O1xuICAgICAgY29uc3QgZGV0ZWN0ZWRQZWVyID0gUGVlci5wYXJzZVVybChgJHt0aGlzLl9kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbH0ke2hvc3RuYW1lfSR7dGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsfWApO1xuXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlciB8fCAoYXdhaXQgdGhpcy5jaGVja1BlZXJBbGl2ZShkZXRlY3RlZFBlZXIpKSkge1xuICAgICAgICByZXR1cm4gZGV0ZWN0ZWRQZWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0byBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdG9wUmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFJlZnJlc2hUaW1lcigpIHtcbiAgICBpZiAodGhpcy5fdGltZXJTdWJzY3JpcHRpb24pIHJldHVybjsgLy8gQWxyZWFkeSBydW5uaW5nOiBza2lwXG5cbiAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBTdGFydGluZyByZWZyZXNoIHRpbWVyLCBldmVyeSAke3RoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZH1tcy4uLmApO1xuXG4gICAgbGV0IGxhc3RJbmZvOiBOb2RlSW5mbztcbiAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHRoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZCwgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kKVxuICAgICAgLnBpcGUoXG4gICAgICAgIC8vIFNraXAgc29tZSB0aW1lciBldmVudCAoc2VlIGNvbnN0cnVjdG9yKVxuICAgICAgICBmaWx0ZXIodGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uKSxcblxuICAgICAgICAvLyBDaGVja2luIGlmIHBlZXIgYWxpdmVcbiAgICAgICAgdGFwKCgpID0+IGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5jaGVja1BlZXJBbGl2ZSh0aGlzLnBlZXIpKSxcblxuICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGNoYW5nZXNcbiAgICAgICAgZmlsdGVyKChpbmZvKSA9PiAhZXF1YWxzKGluZm8sIGxhc3RJbmZvKSksXG4gICAgICAgIHRhcCgoaW5mbykgPT4gKGxhc3RJbmZvID0gaW5mbykpLFxuXG4gICAgICAgIC8vIENoZWNrIGNvbXBhdGliaWxpdHlcbiAgICAgICAgbWVyZ2VNYXAoKGluZm8pID0+IHRoaXMuY2hlY2tQZWVyQ29tcGF0aWJsZShpbmZvLCB7IHNob3dUb2FzdDogdHJ1ZSB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGFsaXZlKSA9PiB7XG4gICAgICAgIGlmIChhbGl2ZSAmJiB0aGlzLm9mZmxpbmUpIHtcbiAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZShmYWxzZSk7XG5cbiAgICAgICAgICAvLyBSZXN0YXJ0IHRoZSBzZXJ2aWNlICh0byBmb3JjZSByZSBhdXRoKVxuICAgICAgICAgIHRoaXMucmVzdGFydCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFhbGl2ZSAmJiB0aGlzLm9ubGluZSkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKHRydWUpO1xuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgc2VydmljZVxuICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uLmFkZCgoKSA9PiBjb25zb2xlLmRlYnVnKCdbbmV0d29ya10gUmVmcmVzaCB0aW1lciBzdG9wcGVkJykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFRleHQoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdHM/OiB7XG4gICAgICBoZWFkZXJzPzpcbiAgICAgICAgfCBIdHRwSGVhZGVyc1xuICAgICAgICB8IHtcbiAgICAgICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgICAgIH07XG4gICAgICByZXNwb25zZVR5cGU/OiAndGV4dCc7XG4gICAgICBub2NhY2hlPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRUZXh0KHRoaXMuaHR0cCwgdGhpcy5nZXRVcmkocGF0aCksIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIGhlYWRlcnM/OlxuICAgICAgICB8IEh0dHBIZWFkZXJzXG4gICAgICAgIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgICAgfTtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICAgICAgdGltZW91dD86IG51bWJlcjtcbiAgICB9XG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0SnNvbjxUPih0aGlzLmh0dHAsIHRoaXMuZ2V0VXJpKHBhdGgpLCBvcHRzKTtcbiAgfVxuXG4gIC8qIC0tIFByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGdldFVyaShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB1cmkgPSBwYXRoO1xuXG4gICAgLy8gSWYgcGF0aCBpcyBub3QgYW4gVVJJOiBwcmVwZW5kIHdpdGggcGVlciBVUkxcbiAgICBpZiAoIXVyaS5zdGFydHNXaXRoKCdodHRwOi8vJykgJiYgIXVyaS5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICBsZXQgcGVlclVybCA9IHRoaXMucGVlciAmJiB0aGlzLnBlZXIudXJsO1xuXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyaW5nKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBmaXJzdCBwYXRoXG4gICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIFVSSTogY29uY2F0IHBlZXIgVVJMIGFuZCBwYXRoXG4gICAgICB1cmkgPSBwZWVyVXJsICsgcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuICBwcm90ZWN0ZWQgb25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZChjb25uZWN0aW9uVHlwZT86IENvbm5lY3Rpb25UeXBlKSB7XG4gICAgaWYgKGNvbm5lY3Rpb25UeXBlICE9PSB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSkge1xuICAgICAgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPSBjb25uZWN0aW9uVHlwZTtcblxuICAgICAgLy8gSWYgTk9UIGFscmVhZHkgZm9yY2VkIGFzIG9mZmxpbmUsIGVtaXQgZXZlbnRcbiAgICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHt0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBDaGFuZ2UgdG8gb2ZmbGluZVxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHsgbWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FX0hFTFAnLCB0eXBlOiAnd2FybmluZycgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORScsIHR5cGU6ICd3YXJuaW5nJyB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdG9wIHRoZSBuZXR3b3JrIHNlcnZpY2VcbiAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCBwZWVycywgZnJvbSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldERlZmF1bHRQZWVycygpOiBQcm9taXNlPFBlZXJbXT4ge1xuICAgIGNvbnN0IHBlZXJzID0gKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXJzIHx8IFtdKS5tYXAoUGVlci5mcm9tT2JqZWN0KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBlZXJzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Q8VCA9IGFueT4ob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPFQ+PiB7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTGlzdGVuZXI8VCA9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTx2b2lkPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmUsIHJlbW92ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0PFQgPSBhbnk+KG5hbWU6IE5ldHdvcmtFdmVudFR5cGUsIGRhdGE/OiBUKSB7XG4gICAgY29uc3QgaG9va3MgPSB0aGlzLl9saXN0ZW5lcnNbbmFtZV07XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShob29rcykpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmstc2VydmljZV0gVHJpZ2dlciAke25hbWV9IGhvb2s6IEV4ZWN1dGluZyAke2hvb2tzLmxlbmd0aH0gY2FsbGJhY2tzLi4uYCk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgaG9va3MubWFwKChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgICBpZiAoIXByb21pc2UpIHJldHVybjtcbiAgICAgICAgICByZXR1cm4gcHJvbWlzZS5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBleGVjdXRpbmcgaG9vayAnICsgbmFtZSwgZXJyKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,179 @@
1
+ import { __decorate } from "tslib";
2
+ import { Inject, inject, Injectable, Optional } from '@angular/core';
3
+ import { Promise } from '@rx-angular/cdk/zone-less/browser';
4
+ import { DiscourseUtils } from './discourse.utils';
5
+ import DiscourseAPI from 'discourse2';
6
+ import { JsonFeedUtils } from '../feed.model';
7
+ import { firstArrayValue, isEmptyArray, isNotEmptyArray, isNotNilOrBlank } from '../../../shared/functions';
8
+ import { from, switchMap } from 'rxjs';
9
+ import { filter, map, mergeMap } from 'rxjs/operators';
10
+ import { StartableService } from '../../../shared/services/startable-service.class';
11
+ import { NetworkService } from '../../../core/services/network.service';
12
+ import { RxStateProperty, RxStateSelect } from '../../../shared/rx-state/rx-state.decorators';
13
+ import { RxState } from '@rx-angular/state';
14
+ import { ENVIRONMENT } from '../../../../environments/environment.class';
15
+ import { UrlUtils } from '../../../shared/file/url.utils';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "../../../core/services/local-settings.service";
18
+ import * as i2 from "../../../../environments/environment.class";
19
+ export class DiscourseFeedService extends StartableService {
20
+ settings;
21
+ environment;
22
+ discourseApis = new Map();
23
+ _logPrefix = '[discourse-feed-service] ';
24
+ _state = new RxState();
25
+ network = inject(NetworkService);
26
+ locale$;
27
+ feedUrls$;
28
+ locale;
29
+ feedUrls;
30
+ constructor(settings, environment) {
31
+ super(settings);
32
+ this.settings = settings;
33
+ this.environment = environment;
34
+ this._debug = !environment.production;
35
+ if (this._debug)
36
+ console.debug('[discourse-feed-service] Creating service');
37
+ this._state.connect('locale', this.settings.locale$);
38
+ this._state.connect('feedUrls', this.locale$.pipe(filter(isNotNilOrBlank), map((locale) => (locale && environment.feed?.jsonFeed?.[locale]) ?? [])));
39
+ }
40
+ async ngOnStart() {
41
+ await this.settings.ready();
42
+ console.debug(`${this._logPrefix}Service started`, this.settings.locale, this.feedUrls);
43
+ return {
44
+ locale: this.settings.locale,
45
+ feedUrls: this.feedUrls,
46
+ };
47
+ }
48
+ watchAll(opts) {
49
+ if (!this.started) {
50
+ return from(this.start()).pipe(switchMap(() => this.watchAll(opts)));
51
+ }
52
+ return this.feedUrls$.pipe(filter(isNotEmptyArray), mergeMap((urls) => this.loadAll(urls, opts)));
53
+ }
54
+ getHomeUrl(feed) {
55
+ const feedUrl = feed?.feed_url ?? firstArrayValue(this.feedUrls);
56
+ return feedUrl ? UrlUtils.getRootUrl(feedUrl) : undefined;
57
+ }
58
+ getTagUrl(feed, tag) {
59
+ if (!feed || !tag)
60
+ throw new Error("Missing 'feed' or 'tag' argument");
61
+ const baseUrl = this.getHomeUrl(feed);
62
+ return feed.tag_template?.replace('{tag}', tag) ?? baseUrl + '/tag/' + tag;
63
+ }
64
+ async load(url, opts) {
65
+ const { data } = await this.loadAll([url], opts);
66
+ return data?.[0];
67
+ }
68
+ async loadAll(urls, opts) {
69
+ await this.ready();
70
+ urls = urls ?? this.feedUrls;
71
+ opts = {
72
+ maxAgeInMonths: opts?.maxAgeInMonths ?? this.environment.feed?.maxAgeInMonths,
73
+ maxContentLength: opts?.maxContentLength ?? this.environment.feed?.maxContentLength,
74
+ locale: this.settings.locale,
75
+ depth: 0,
76
+ closeApis: true,
77
+ ...opts,
78
+ };
79
+ const feeds = await Promise.all((urls || []).map(async (url) => {
80
+ try {
81
+ // Get JSON
82
+ const json = await this.network.fetch(url);
83
+ console.debug(`${this._logPrefix}Loaded JSON from ${url}`, json);
84
+ if (JsonFeedUtils.isJsonFeed(json)) {
85
+ // Migrate old version
86
+ let feed = JsonFeedUtils.migrateFeed(json);
87
+ // Resolve items (e.g. using feed.next_url)
88
+ feed = await this.resolveFeedItems(feed, { ...opts, depth: opts?.depth ?? 0 });
89
+ // Truncate html
90
+ JsonFeedUtils.truncateFeedItemsHtml(feed, opts);
91
+ return isNotEmptyArray(feed?.items) ? [feed] : [];
92
+ }
93
+ // Get discourse
94
+ if (DiscourseUtils.isDiscourseObject(json)) {
95
+ const api = this.getOrCreateDiscourseApi(url);
96
+ return await DiscourseUtils.getFeedsByUrl(url, { ...opts, api });
97
+ }
98
+ return undefined;
99
+ }
100
+ catch (err) {
101
+ if (err?.status === 404) {
102
+ console.error(`${this._logPrefix} Error while fetching feed at ${url}. 404 (Not found)`);
103
+ }
104
+ else {
105
+ console.error(`${this._logPrefix} Error while fetching feed at ${url}`, err);
106
+ }
107
+ return Promise.resolve([]);
108
+ }
109
+ }));
110
+ if (opts?.closeApis !== false) {
111
+ this.closeApis();
112
+ }
113
+ const data = feeds.flat();
114
+ return { data, total: data.length };
115
+ }
116
+ getOrCreateDiscourseApi(url) {
117
+ const baseUrl = DiscourseUtils.getDiscourseBaseUrl(url);
118
+ let api = this.discourseApis.get(baseUrl);
119
+ if (!api) {
120
+ api = new DiscourseAPI(baseUrl);
121
+ this.discourseApis.set(baseUrl, api);
122
+ }
123
+ return api;
124
+ }
125
+ closeApis() {
126
+ this.discourseApis.clear();
127
+ }
128
+ async resolveFeedItems(json, opts) {
129
+ if (!json)
130
+ return json;
131
+ // Load items
132
+ if (isEmptyArray(json.items) && isNotNilOrBlank(json.next_url)) {
133
+ const depth = opts?.depth ?? 0;
134
+ if (depth >= 3) {
135
+ console.warn(`${this._logPrefix}Max depth reached (${depth}) for ${json.feed_url}`);
136
+ return json;
137
+ }
138
+ // Load items
139
+ const feed = await this.load(json.next_url, { ...opts, closeApis: false, depth: depth + 1 });
140
+ if (isEmptyArray(feed?.items)) {
141
+ return json;
142
+ }
143
+ // Merge with the input json
144
+ return {
145
+ ...json,
146
+ title: json.title ?? feed.title,
147
+ home_page_url: json.home_page_url ?? feed.home_page_url,
148
+ authors: isNotEmptyArray(json.authors) ? json.authors : feed.authors,
149
+ items: feed.items,
150
+ tag_template: json.tag_template ?? feed.tag_template,
151
+ };
152
+ }
153
+ return json;
154
+ }
155
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DiscourseFeedService, deps: [{ token: i1.LocalSettingsService }, { token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
156
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DiscourseFeedService, providedIn: 'root' });
157
+ }
158
+ __decorate([
159
+ RxStateSelect()
160
+ ], DiscourseFeedService.prototype, "locale$", void 0);
161
+ __decorate([
162
+ RxStateSelect()
163
+ ], DiscourseFeedService.prototype, "feedUrls$", void 0);
164
+ __decorate([
165
+ RxStateProperty()
166
+ ], DiscourseFeedService.prototype, "locale", void 0);
167
+ __decorate([
168
+ RxStateProperty()
169
+ ], DiscourseFeedService.prototype, "feedUrls", void 0);
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DiscourseFeedService, decorators: [{
171
+ type: Injectable,
172
+ args: [{ providedIn: 'root' }]
173
+ }], ctorParameters: () => [{ type: i1.LocalSettingsService }, { type: i2.Environment, decorators: [{
174
+ type: Optional
175
+ }, {
176
+ type: Inject,
177
+ args: [ENVIRONMENT]
178
+ }] }], propDecorators: { locale$: [], feedUrls$: [], locale: [], feedUrls: [] } });
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY291cnNlLWZlZWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc29jaWFsL2ZlZWQvZGlzY291cnNlL2Rpc2NvdXJzZS1mZWVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLFlBQVksTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUcsT0FBTyxFQUFFLElBQUksRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSw0Q0FBNEMsQ0FBQztBQUV0RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFTMUQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGdCQUEyQztJQWN6RTtJQUNtQztJQWRyQyxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDaEQsVUFBVSxHQUFHLDJCQUEyQixDQUFDO0lBRXpDLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBNkIsQ0FBQztJQUNsRCxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXhCLE9BQU8sQ0FBcUI7SUFDNUIsU0FBUyxDQUF1QjtJQUU5QixNQUFNLENBQVM7SUFDZixRQUFRLENBQVc7SUFFdEMsWUFDVSxRQUE4QixFQUNLLFdBQXdCO1FBRW5FLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUhSLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQ0ssZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFJbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDakIsVUFBVSxFQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFDdkIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQ3hFLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFUyxLQUFLLENBQUMsU0FBUztRQUN2QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLGlCQUFpQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUM1QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBNkQ7UUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUN4QixNQUFNLENBQUMsZUFBZSxDQUFDLEVBQ3ZCLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDN0MsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBZTtRQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsUUFBUSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQWMsRUFBRSxHQUFXO1FBQ25DLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDN0UsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQ1IsR0FBVyxFQUNYLElBT0M7UUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakQsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FDWCxJQUFlLEVBQ2YsSUFPQztRQUVELE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixJQUFJLEdBQUc7WUFDTCxjQUFjLEVBQUUsSUFBSSxFQUFFLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxjQUFjO1lBQzdFLGdCQUFnQixFQUFFLElBQUksRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxnQkFBZ0I7WUFDbkYsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUM1QixLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsRUFBRSxJQUFJO1lBQ2YsR0FBRyxJQUFJO1NBQ1IsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDN0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUM7Z0JBQ0gsV0FBVztnQkFDWCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsb0JBQW9CLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsc0JBQXNCO29CQUN0QixJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUUzQywyQ0FBMkM7b0JBQzNDLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUUvRSxnQkFBZ0I7b0JBQ2hCLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBRWhELE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxDQUFDO2dCQUVELGdCQUFnQjtnQkFDaEIsSUFBSSxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM5QyxPQUFPLE1BQU0sY0FBYyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO2dCQUVELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLGlDQUFpQyxHQUFHLG1CQUFtQixDQUFDLENBQUM7Z0JBQzNGLENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsaUNBQWlDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDO2dCQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksSUFBSSxFQUFFLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUxQixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVTLHVCQUF1QixDQUFDLEdBQVc7UUFDM0MsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQWMsRUFBRSxJQUFvRDtRQUNuRyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXZCLGFBQWE7UUFDYixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxzQkFBc0IsS0FBSyxTQUFTLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxhQUFhO1lBQ2IsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU3RixJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsNEJBQTRCO1lBQzVCLE9BQU87Z0JBQ0wsR0FBRyxJQUFJO2dCQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUMvQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYTtnQkFDdkQsT0FBTyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUNwRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZO2FBQ3JELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO3dHQTdMVSxvQkFBb0Isc0RBZVQsV0FBVzs0R0FmdEIsb0JBQW9CLGNBRFAsTUFBTTs7QUFRYjtJQUFoQixhQUFhLEVBQUU7cURBQTZCO0FBQzVCO0lBQWhCLGFBQWEsRUFBRTt1REFBaUM7QUFFOUI7SUFBbEIsZUFBZSxFQUFFO29EQUFnQjtBQUNmO0lBQWxCLGVBQWUsRUFBRTtzREFBb0I7NEZBWDNCLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQWdCN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXO3lDQVJoQixPQUFPLE1BQ1AsU0FBUyxNQUVQLE1BQU0sTUFDTixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBpbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFByb21pc2UgfSBmcm9tICdAcngtYW5ndWxhci9jZGsvem9uZS1sZXNzL2Jyb3dzZXInO1xuaW1wb3J0IHsgRGlzY291cnNlVXRpbHMgfSBmcm9tICcuL2Rpc2NvdXJzZS51dGlscyc7XG5pbXBvcnQgRGlzY291cnNlQVBJIGZyb20gJ2Rpc2NvdXJzZTInO1xuaW1wb3J0IHsgSnNvbkZlZWQsIEpzb25GZWVkVXRpbHMgfSBmcm9tICcuLi9mZWVkLm1vZGVsJztcbmltcG9ydCB7IGZpcnN0QXJyYXlWYWx1ZSwgaXNFbXB0eUFycmF5LCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnhTdGF0ZVByb3BlcnR5LCBSeFN0YXRlU2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3J4LXN0YXRlL3J4LXN0YXRlLmRlY29yYXRvcnMnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnhTdGF0ZSB9IGZyb20gJ0ByeC1hbmd1bGFyL3N0YXRlJztcbmltcG9ydCB7IEVOVklST05NRU5ULCBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2ZpbGUvdXJsLnV0aWxzJztcbmltcG9ydCB7IElGZWVkU2VydmljZSB9IGZyb20gJy4uL2ZlZWQuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY291cnNlRmVlZFNlcnZpY2VTdGF0ZSB7XG4gIGxvY2FsZTogc3RyaW5nO1xuICBmZWVkVXJscz86IHN0cmluZ1tdO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIERpc2NvdXJzZUZlZWRTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZTxEaXNjb3Vyc2VGZWVkU2VydmljZVN0YXRlPiBpbXBsZW1lbnRzIElGZWVkU2VydmljZSB7XG4gIHByaXZhdGUgZGlzY291cnNlQXBpcyA9IG5ldyBNYXA8c3RyaW5nLCBEaXNjb3Vyc2VBUEk+KCk7XG4gIHByaXZhdGUgX2xvZ1ByZWZpeCA9ICdbZGlzY291cnNlLWZlZWQtc2VydmljZV0gJztcblxuICBwcml2YXRlIF9zdGF0ZSA9IG5ldyBSeFN0YXRlPERpc2NvdXJzZUZlZWRTZXJ2aWNlU3RhdGU+KCk7XG4gIHByaXZhdGUgbmV0d29yayA9IGluamVjdChOZXR3b3JrU2VydmljZSk7XG5cbiAgQFJ4U3RhdGVTZWxlY3QoKSBsb2NhbGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIEBSeFN0YXRlU2VsZWN0KCkgZmVlZFVybHMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcblxuICBAUnhTdGF0ZVByb3BlcnR5KCkgbG9jYWxlOiBzdHJpbmc7XG4gIEBSeFN0YXRlUHJvcGVydHkoKSBmZWVkVXJsczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFxuICApIHtcbiAgICBzdXBlcihzZXR0aW5ncyk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2Rpc2NvdXJzZS1mZWVkLXNlcnZpY2VdIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIHRoaXMuX3N0YXRlLmNvbm5lY3QoJ2xvY2FsZScsIHRoaXMuc2V0dGluZ3MubG9jYWxlJCk7XG5cbiAgICB0aGlzLl9zdGF0ZS5jb25uZWN0KFxuICAgICAgJ2ZlZWRVcmxzJyxcbiAgICAgIHRoaXMubG9jYWxlJC5waXBlKFxuICAgICAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICAgICAgbWFwKChsb2NhbGUpID0+IChsb2NhbGUgJiYgZW52aXJvbm1lbnQuZmVlZD8uanNvbkZlZWQ/Lltsb2NhbGVdKSA/PyBbXSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpOiBQcm9taXNlPERpc2NvdXJzZUZlZWRTZXJ2aWNlU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG4gICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2VydmljZSBzdGFydGVkYCwgdGhpcy5zZXR0aW5ncy5sb2NhbGUsIHRoaXMuZmVlZFVybHMpO1xuICAgIHJldHVybiB7XG4gICAgICBsb2NhbGU6IHRoaXMuc2V0dGluZ3MubG9jYWxlLFxuICAgICAgZmVlZFVybHM6IHRoaXMuZmVlZFVybHMsXG4gICAgfTtcbiAgfVxuXG4gIHdhdGNoQWxsKG9wdHM/OiB7IG1heEFnZUluTW9udGhzPzogbnVtYmVyOyBtYXhDb250ZW50TGVuZ3RoPzogbnVtYmVyIH0pOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8SnNvbkZlZWQ+PiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiBmcm9tKHRoaXMuc3RhcnQoKSkucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy53YXRjaEFsbChvcHRzKSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mZWVkVXJscyQucGlwZShcbiAgICAgIGZpbHRlcihpc05vdEVtcHR5QXJyYXkpLFxuICAgICAgbWVyZ2VNYXAoKHVybHMpID0+IHRoaXMubG9hZEFsbCh1cmxzLCBvcHRzKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0SG9tZVVybChmZWVkPzogSnNvbkZlZWQpIHtcbiAgICBjb25zdCBmZWVkVXJsID0gZmVlZD8uZmVlZF91cmwgPz8gZmlyc3RBcnJheVZhbHVlKHRoaXMuZmVlZFVybHMpO1xuICAgIHJldHVybiBmZWVkVXJsID8gVXJsVXRpbHMuZ2V0Um9vdFVybChmZWVkVXJsKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFRhZ1VybChmZWVkOiBKc29uRmVlZCwgdGFnOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghZmVlZCB8fCAhdGFnKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nICdmZWVkJyBvciAndGFnJyBhcmd1bWVudFwiKTtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5nZXRIb21lVXJsKGZlZWQpO1xuICAgIHJldHVybiBmZWVkLnRhZ190ZW1wbGF0ZT8ucmVwbGFjZSgne3RhZ30nLCB0YWcpID8/IGJhc2VVcmwgKyAnL3RhZy8nICsgdGFnO1xuICB9XG5cbiAgYXN5bmMgbG9hZChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRzPzoge1xuICAgICAgbG9jYWxlPzogc3RyaW5nO1xuICAgICAgbWF4QWdlSW5Nb250aHM/OiBudW1iZXI7XG4gICAgICBtYXhDb250ZW50TGVuZ3RoPzogbnVtYmVyO1xuICAgICAgLy8gSW50ZXJuYWwgb3B0aW9ucyAoZm9yIHJlY3Vyc2l2ZSBjYWxscylcbiAgICAgIGNsb3NlQXBpcz86IGJvb2xlYW47XG4gICAgICBkZXB0aD86IG51bWJlcjtcbiAgICB9XG4gICk6IFByb21pc2U8SnNvbkZlZWQ+IHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMubG9hZEFsbChbdXJsXSwgb3B0cyk7XG4gICAgcmV0dXJuIGRhdGE/LlswXTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRBbGwoXG4gICAgdXJscz86IHN0cmluZ1tdLFxuICAgIG9wdHM/OiB7XG4gICAgICBsb2NhbGU/OiBzdHJpbmc7XG4gICAgICBtYXhBZ2VJbk1vbnRocz86IG51bWJlcjtcbiAgICAgIG1heENvbnRlbnRMZW5ndGg/OiBudW1iZXI7XG4gICAgICAvLyBJbnRlcm5hbCBvcHRpb25zIChmb3IgcmVjdXJzaXZlIGNhbGxzKVxuICAgICAgY2xvc2VBcGlzPzogYm9vbGVhbjtcbiAgICAgIGRlcHRoPzogbnVtYmVyO1xuICAgIH1cbiAgKTogUHJvbWlzZTxMb2FkUmVzdWx0PEpzb25GZWVkPj4ge1xuICAgIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICB1cmxzID0gdXJscyA/PyB0aGlzLmZlZWRVcmxzO1xuICAgIG9wdHMgPSB7XG4gICAgICBtYXhBZ2VJbk1vbnRoczogb3B0cz8ubWF4QWdlSW5Nb250aHMgPz8gdGhpcy5lbnZpcm9ubWVudC5mZWVkPy5tYXhBZ2VJbk1vbnRocyxcbiAgICAgIG1heENvbnRlbnRMZW5ndGg6IG9wdHM/Lm1heENvbnRlbnRMZW5ndGggPz8gdGhpcy5lbnZpcm9ubWVudC5mZWVkPy5tYXhDb250ZW50TGVuZ3RoLFxuICAgICAgbG9jYWxlOiB0aGlzLnNldHRpbmdzLmxvY2FsZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgY2xvc2VBcGlzOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuICAgIGNvbnN0IGZlZWRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAodXJscyB8fCBbXSkubWFwKGFzeW5jICh1cmwpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBHZXQgSlNPTlxuICAgICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCB0aGlzLm5ldHdvcmsuZmV0Y2godXJsKTtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Mb2FkZWQgSlNPTiBmcm9tICR7dXJsfWAsIGpzb24pO1xuICAgICAgICAgIGlmIChKc29uRmVlZFV0aWxzLmlzSnNvbkZlZWQoanNvbikpIHtcbiAgICAgICAgICAgIC8vIE1pZ3JhdGUgb2xkIHZlcnNpb25cbiAgICAgICAgICAgIGxldCBmZWVkID0gSnNvbkZlZWRVdGlscy5taWdyYXRlRmVlZChqc29uKTtcblxuICAgICAgICAgICAgLy8gUmVzb2x2ZSBpdGVtcyAoZS5nLiB1c2luZyBmZWVkLm5leHRfdXJsKVxuICAgICAgICAgICAgZmVlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZUZlZWRJdGVtcyhmZWVkLCB7IC4uLm9wdHMsIGRlcHRoOiBvcHRzPy5kZXB0aCA/PyAwIH0pO1xuXG4gICAgICAgICAgICAvLyBUcnVuY2F0ZSBodG1sXG4gICAgICAgICAgICBKc29uRmVlZFV0aWxzLnRydW5jYXRlRmVlZEl0ZW1zSHRtbChmZWVkLCBvcHRzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGlzTm90RW1wdHlBcnJheShmZWVkPy5pdGVtcykgPyBbZmVlZF0gOiBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgZGlzY291cnNlXG4gICAgICAgICAgaWYgKERpc2NvdXJzZVV0aWxzLmlzRGlzY291cnNlT2JqZWN0KGpzb24pKSB7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLmdldE9yQ3JlYXRlRGlzY291cnNlQXBpKHVybCk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgRGlzY291cnNlVXRpbHMuZ2V0RmVlZHNCeVVybCh1cmwsIHsgLi4ub3B0cywgYXBpIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnI/LnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke3RoaXMuX2xvZ1ByZWZpeH0gRXJyb3Igd2hpbGUgZmV0Y2hpbmcgZmVlZCBhdCAke3VybH0uIDQwNCAoTm90IGZvdW5kKWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke3RoaXMuX2xvZ1ByZWZpeH0gRXJyb3Igd2hpbGUgZmV0Y2hpbmcgZmVlZCBhdCAke3VybH1gLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKG9wdHM/LmNsb3NlQXBpcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuY2xvc2VBcGlzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGZlZWRzLmZsYXQoKTtcblxuICAgIHJldHVybiB7IGRhdGEsIHRvdGFsOiBkYXRhLmxlbmd0aCB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE9yQ3JlYXRlRGlzY291cnNlQXBpKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgYmFzZVVybCA9IERpc2NvdXJzZVV0aWxzLmdldERpc2NvdXJzZUJhc2VVcmwodXJsKTtcbiAgICBsZXQgYXBpID0gdGhpcy5kaXNjb3Vyc2VBcGlzLmdldChiYXNlVXJsKTtcbiAgICBpZiAoIWFwaSkge1xuICAgICAgYXBpID0gbmV3IERpc2NvdXJzZUFQSShiYXNlVXJsKTtcbiAgICAgIHRoaXMuZGlzY291cnNlQXBpcy5zZXQoYmFzZVVybCwgYXBpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFwaTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZUFwaXMoKSB7XG4gICAgdGhpcy5kaXNjb3Vyc2VBcGlzLmNsZWFyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzb2x2ZUZlZWRJdGVtcyhqc29uOiBKc29uRmVlZCwgb3B0cz86IHsgbWF4Q29udGVudExlbmd0aD86IG51bWJlcjsgZGVwdGg/OiBudW1iZXIgfSk6IFByb21pc2U8SnNvbkZlZWQ+IHtcbiAgICBpZiAoIWpzb24pIHJldHVybiBqc29uO1xuXG4gICAgLy8gTG9hZCBpdGVtc1xuICAgIGlmIChpc0VtcHR5QXJyYXkoanNvbi5pdGVtcykgJiYgaXNOb3ROaWxPckJsYW5rKGpzb24ubmV4dF91cmwpKSB7XG4gICAgICBjb25zdCBkZXB0aCA9IG9wdHM/LmRlcHRoID8/IDA7XG4gICAgICBpZiAoZGVwdGggPj0gMykge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5fbG9nUHJlZml4fU1heCBkZXB0aCByZWFjaGVkICgke2RlcHRofSkgZm9yICR7anNvbi5mZWVkX3VybH1gKTtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgaXRlbXNcbiAgICAgIGNvbnN0IGZlZWQgPSBhd2FpdCB0aGlzLmxvYWQoanNvbi5uZXh0X3VybCwgeyAuLi5vcHRzLCBjbG9zZUFwaXM6IGZhbHNlLCBkZXB0aDogZGVwdGggKyAxIH0pO1xuXG4gICAgICBpZiAoaXNFbXB0eUFycmF5KGZlZWQ/Lml0ZW1zKSkge1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgIH1cblxuICAgICAgLy8gTWVyZ2Ugd2l0aCB0aGUgaW5wdXQganNvblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uanNvbixcbiAgICAgICAgdGl0bGU6IGpzb24udGl0bGUgPz8gZmVlZC50aXRsZSxcbiAgICAgICAgaG9tZV9wYWdlX3VybDoganNvbi5ob21lX3BhZ2VfdXJsID8/IGZlZWQuaG9tZV9wYWdlX3VybCxcbiAgICAgICAgYXV0aG9yczogaXNOb3RFbXB0eUFycmF5KGpzb24uYXV0aG9ycykgPyBqc29uLmF1dGhvcnMgOiBmZWVkLmF1dGhvcnMsXG4gICAgICAgIGl0ZW1zOiBmZWVkLml0ZW1zLFxuICAgICAgICB0YWdfdGVtcGxhdGU6IGpzb24udGFnX3RlbXBsYXRlID8/IGZlZWQudGFnX3RlbXBsYXRlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY291cnNlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvZmVlZC9kaXNjb3Vyc2UvZGlzY291cnNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IG9wZXJhdGlvbnMgfSBmcm9tICdkaXNjb3Vyc2UyL2VzbS9zY2hlbWEnO1xuXG5leHBvcnQgdHlwZSBEaXNjb3Vyc2VDYXRlZ29yeSA9IG9wZXJhdGlvbnNbJ2xpc3RDYXRlZ29yeVRvcGljcyddWydyZXNwb25zZXMnXVsnMjAwJ11bJ2NvbnRlbnQnXVsnYXBwbGljYXRpb24vanNvbiddO1xuZXhwb3J0IHR5cGUgRGlzY291cnNlQ2F0ZWdvcnlUb3BpYyA9IERpc2NvdXJzZUNhdGVnb3J5Wyd0b3BpY19saXN0J11bJ3RvcGljcyddWzBdO1xuZXhwb3J0IHR5cGUgRGlzY291cnNlVG9waWMgPSBvcGVyYXRpb25zWydnZXRUb3BpYyddWydyZXNwb25zZXMnXVsnMjAwJ11bJ2NvbnRlbnQnXVsnYXBwbGljYXRpb24vanNvbiddO1xuXG5leHBvcnQgdHlwZSBEaXNjb3Vyc2VQb3N0ID0gb3BlcmF0aW9uc1snZ2V0VG9waWMnXVsncmVzcG9uc2VzJ11bJzIwMCddWydjb250ZW50J11bJ2FwcGxpY2F0aW9uL2pzb24nXVsncG9zdF9zdHJlYW0nXVsncG9zdHMnXVswXSAmIHtcbiAgcG9zdF91cmw/OiBzdHJpbmc7XG59O1xuIl19