@snabcentr/client-core 3.20.0 → 3.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/catalog/services/sc-catalog-redirect.service.d.ts +1 -1
  2. package/esm2022/auth/services/sc-auth.service.mjs +3 -2
  3. package/esm2022/catalog/services/sc-catalog-redirect.service.mjs +3 -3
  4. package/esm2022/public-api.mjs +2 -1
  5. package/esm2022/ssr-cache/classes/index.mjs +2 -0
  6. package/esm2022/ssr-cache/classes/sc-ssr-response-cache.mjs +100 -0
  7. package/esm2022/ssr-cache/index.mjs +6 -0
  8. package/esm2022/ssr-cache/interfaces/index.mjs +3 -0
  9. package/esm2022/ssr-cache/interfaces/sc-i-ssr-response-cache-settings.mjs +2 -0
  10. package/esm2022/ssr-cache/interfaces/sc-i-ssr-response-cache-stats.mjs +2 -0
  11. package/esm2022/ssr-cache/internal/is-ssr-response-cacheable.mjs +25 -0
  12. package/esm2022/ssr-cache/internal/sc-i-ssr-cached-response.mjs +2 -0
  13. package/esm2022/ssr-cache/sc-ssr-response-cache.backend.mjs +71 -0
  14. package/esm2022/ssr-cache/sc-ssr-response-cache.providers.mjs +12 -0
  15. package/esm2022/ssr-cache/tokens/index.mjs +3 -0
  16. package/esm2022/ssr-cache/tokens/sc-ssr-response-cache-settings.mjs +8 -0
  17. package/esm2022/ssr-cache/tokens/sc-ssr-response-cache.mjs +13 -0
  18. package/fesm2022/snabcentr-client-core.mjs +222 -7
  19. package/fesm2022/snabcentr-client-core.mjs.map +1 -1
  20. package/package.json +1 -1
  21. package/public-api.d.ts +1 -0
  22. package/release_notes.tmp +3 -3
  23. package/ssr-cache/classes/index.d.ts +1 -0
  24. package/ssr-cache/classes/sc-ssr-response-cache.d.ts +59 -0
  25. package/ssr-cache/index.d.ts +5 -0
  26. package/ssr-cache/interfaces/index.d.ts +2 -0
  27. package/ssr-cache/interfaces/sc-i-ssr-response-cache-settings.d.ts +17 -0
  28. package/ssr-cache/interfaces/sc-i-ssr-response-cache-stats.d.ts +17 -0
  29. package/ssr-cache/internal/is-ssr-response-cacheable.d.ts +14 -0
  30. package/ssr-cache/internal/sc-i-ssr-cached-response.d.ts +16 -0
  31. package/ssr-cache/sc-ssr-response-cache.backend.d.ts +42 -0
  32. package/ssr-cache/sc-ssr-response-cache.providers.d.ts +6 -0
  33. package/ssr-cache/tokens/index.d.ts +2 -0
  34. package/ssr-cache/tokens/sc-ssr-response-cache-settings.d.ts +6 -0
  35. package/ssr-cache/tokens/sc-ssr-response-cache.d.ts +6 -0
@@ -56,7 +56,7 @@ export declare class ScCatalogRedirectService {
56
56
  * (адрес со slug либо с идентификатором — в зависимости от настроек окружения).
57
57
  *
58
58
  * @param commands Сегменты канонического маршрута.
59
- * @param status Статус редиректа: адрес с идентификатором заменяется на канонический навсегда, поэтому по умолчанию постоянный.
59
+ * @param status Статус редиректа: вид адреса задаётся настройками окружения и может быть изменён, поэтому по умолчанию временный.
60
60
  * @returns Дерево канонического маршрута для навигации либо `false`, если редирект выполнен ответом сервера.
61
61
  */
62
62
  redirectToCanonicalUrl(commands: Array<number | string>, status?: ScRedirectStatusEnum): boolean | UrlTree;
@@ -60,7 +60,8 @@ export class ScAuthService {
60
60
  this.tokenService.removeGuestToken();
61
61
  return of(null);
62
62
  }
63
- return this.getGuestToken$();
63
+ // На сервере ключ Гостя некуда сохранить, поэтому запрос не выполняется.
64
+ return this.isServer ? of(null) : this.getGuestToken$();
64
65
  }), takeUntilDestroyed(this.destroyRef))
65
66
  .subscribe();
66
67
  if (this.isServer) {
@@ -159,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
159
160
  type: Inject,
160
161
  args: [SC_API_KEYS]
161
162
  }] }, { type: i2.ScTokenService }, { type: i3.ScUserMetrikaService }] });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9hdXRoL3NlcnZpY2VzL3NjLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFFMUQsT0FBTyxFQUFjLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWxILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7Ozs7O0FBSWxGOztHQUVHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUFnQnRCOzs7Ozs7OztPQVFHO0lBQ0gsWUFDcUIsSUFBZ0IsRUFDQyxJQUFhLEVBQ1QsT0FBbUIsRUFDeEMsWUFBNEIsRUFDNUIsa0JBQXdDO1FBSnhDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDQyxTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ1QsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUN4QyxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFzQjtRQTdCN0Q7O1dBRUc7UUFDSyxnQkFBVyxHQUEyQixJQUFJLGFBQWEsQ0FBVSxDQUFDLENBQUMsQ0FBQztRQUU1RTs7V0FFRztRQUNjLGFBQVEsR0FBWSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkQ7O1dBRUc7UUFDYyxlQUFVLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBa0J6RCxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FDcEMsYUFBYSxDQUFDO1lBQ1YsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQy9FLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7U0FDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSw2R0FBNkc7UUFDdkksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUNsRSxDQUFDO1FBQ0YsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7WUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRO2FBQ0gsSUFBSSxDQUNELFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtZQUNyQixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFFckMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVqQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQWdCRDs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLElBQTBCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDMUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDekMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLFFBQVE7Z0JBQ3ZDLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFO2FBQ2pGLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLFlBQXdCLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsa0JBQTJCLElBQUk7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNYLElBQUksQ0FDRCxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxjQUFjLEVBQ2pDLEVBQUUsRUFDRjtZQUNJLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDO1NBQ2pHLENBQ0o7YUFDQSxJQUFJLENBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDekMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLFNBQVM7YUFDM0MsQ0FBQyxDQUFDO1lBRUgsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNWLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDVixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxhQUEwQjtRQUM5QyxNQUFNLFlBQVksR0FBRyxhQUFhLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pGLE1BQU0sY0FBYyxHQUFHLGFBQWE7WUFDaEMsQ0FBQyxDQUFDO2dCQUNJLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDaEYsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDO2FBQzNJO1lBQ0gsQ0FBQyxDQUFDO2dCQUNJLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDO2FBQ25HLENBQUM7UUFFUixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLGFBQWEsRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQ3RILEdBQUcsQ0FBQyxDQUFDLE1BQWtCLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYztRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ1gsR0FBRyxDQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLG1CQUFtQixFQUFFO1lBQ2pELE9BQU8sRUFBRSxxQ0FBcUM7U0FDakQsQ0FBQzthQUNELElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ1YsQ0FBQzsrR0E1S1EsYUFBYSw0Q0EyQlYsT0FBTyxhQUNQLFdBQVc7bUhBNUJkLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBNEJRLE1BQU07MkJBQUMsT0FBTzs7MEJBQ2QsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuaWZpZWQtc2lnbmF0dXJlcyAqL1xuXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwQ29udGV4dCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBtYXAsIE9ic2VydmFibGUsIG9mLCBwYXJ0aXRpb24sIFJlcGxheVN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjSUFwaUtleXMgfSBmcm9tICcuLi8uLi9jb25maWcvc2MtaS1hcGkta2V5cyc7XG5pbXBvcnQgeyBTY0lVcmxzIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NjLWktdXJscyc7XG5pbXBvcnQgeyBTQ19BVVRIX0FERF9IRUFERVJfUkVRVUlSRUQgfSBmcm9tICcuLi8uLi9odHRwSW50ZXJjZXB0b3JzL3Rva2Vucy9zYy1hdXRoLWFkZC1oZWFkZXItcmVxdWlyZWQnO1xuaW1wb3J0IHsgU0NfSVNfTE9HT1VUX1JFUVVFU1QgfSBmcm9tICcuLi8uLi9odHRwSW50ZXJjZXB0b3JzL3Rva2Vucy9zYy1pcy1sb2dvdXQtcmVxdWVzdCc7XG5pbXBvcnQgeyBTQ19JU19SRUZSRVNIX1JFUVVJUkVEIH0gZnJvbSAnLi4vLi4vaHR0cEludGVyY2VwdG9ycy90b2tlbnMvc2MtaXMtcmVmcmVzaC10b2tlbi1yZXF1aXJlZCc7XG5pbXBvcnQgeyBJU19TRVJWRVIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvc3NyLnByb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIFNDX0lTX0hJRERFTl9FUlJPUl9BTEVSVF9IVFRQX0NPTlRFWFQgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgU0NfQVBJX0tFWVMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtYXBpLWtleXMnO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy11cmxzJztcbmltcG9ydCB7IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sIFNjVXNlck1ldHJpa2FTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1tZXRyaWthJztcbmltcG9ydCB7IElBdXRoVG9rZW4sIElMb2dpbiwgSVBob25lTG9naW4sIElUb2tlbiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2NUb2tlblNlcnZpY2UgfSBmcm9tICcuL3NjLXRva2VuLnNlcnZpY2UnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY0F1dGhTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgUmVwbGF5U3ViamVjdH0g0LTQu9GPINGB0L7QsdGL0YLQuNC50L3QvtC5INC80L7QtNC10LvQuCDRgdC10YDQstC40YHQsCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgYXV0aFN1YmplY3Q6IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YHQutGA0LjQv9GCINCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L3QsCDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzU2VydmVyOiBib29sZWFuID0gaW5qZWN0KElTX1NFUlZFUik7XG5cbiAgICAvKipcbiAgICAgKiDQntCz0YDQsNC90LjRh9C40LLQsNC10YIg0LbQuNC30L3RjCDQv9C+0LTQv9C40YHQvtC6INC40Lcg0LrQvtC90YHRgtGA0YPQutGC0L7RgNCwINC40L3QttC10LrRgtC+0YDQvtC8ICjQsNC60YLRg9Cw0LvRjNC90L4g0LTQu9GPIHVuaXQt0YLQtdGB0YLQvtCyKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQXV0aFNlcnZpY2V9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGh0dHAgSFRUUC3QutC70LjQtdC90YIuXG4gICAgICogQHBhcmFtIHVybHMg0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQvdCwINGA0LDQt9C00LXQu9GLIGJhY2tlbmQnYS5cbiAgICAgKiBAcGFyYW0gYXBpS2V5cyDQl9Cw0LPQvtC70L7QstC60Lgg0LrQu9GO0YfQtdC5INC00L7RgdGC0YPQv9CwINC6IEFQSS5cbiAgICAgKiBAcGFyYW0gdG9rZW5TZXJ2aWNlINCh0LXRgNCy0LjRgSDQutC70Y7Rh9C10Lkg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgQEluamVjdChTQ19BUElfS0VZUykgcHJpdmF0ZSByZWFkb25seSBhcGlLZXlzOiBTY0lBcGlLZXlzLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuU2VydmljZTogU2NUb2tlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zdCBbYXV0aFN0YXRlJCwgYWN0aW9ucyRdID0gcGFydGl0aW9uKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICAgICAgYWNjZXNzOiB0aGlzLnRva2VuU2VydmljZS5hY2Nlc3NBdXRoVG9rZW4kLnBpcGUobWFwKCh0b2tlbikgPT4gdG9rZW4gIT09IG51bGwpKSxcbiAgICAgICAgICAgICAgICBndWVzdDogdGhpcy50b2tlblNlcnZpY2UuZ3Vlc3RUb2tlbiQucGlwZShtYXAoKHRva2VuKSA9PiB0b2tlbiAhPT0gbnVsbCkpLFxuICAgICAgICAgICAgfSkucGlwZShkZWJvdW5jZVRpbWUoMCkpLCAvLyDQmNGB0L/RgNCw0LLQu9GP0LXRgiDQvtGI0LjQsdC60YMg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+0LPQviDRg9C00LDQu9C10L3QuNGPINC60LvRjtGH0LAg0LPQvtGB0YLRjyDQuCDQutC70Y7Rh9CwINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy4g0JLQvtC30L3QuNC60LDQtdGCINC/0YDQuCDQvtGH0LjRgdGC0LrQtSBTdG9yYWdlLlxuICAgICAgICAgICAgKHsgYWNjZXNzLCBndWVzdCB9KSA9PiAoYWNjZXNzICYmICFndWVzdCkgfHwgKCFhY2Nlc3MgJiYgZ3Vlc3QpXG4gICAgICAgICk7XG4gICAgICAgIGF1dGhTdGF0ZSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCh7IGFjY2VzcyB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF1dGhTdWJqZWN0Lm5leHQoYWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbnMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHsgYWNjZXNzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2UucmVtb3ZlR3Vlc3RUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHdWVzdFRva2VuJCgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0aFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQvtGB0YLQvtGP0L3QuNGPINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LgsINGH0YLQvtCx0Ysg0YDQtdCw0LPQuNGA0L7QstCw0YLRjCDQvdCwINC40LfQvNC10L3QtdC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QXV0aENoYW5nZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXIg0JTQsNC90L3Ri9C1INC00LvRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9C+IGVtYWlsLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTaWduSW4kKHVzZXI6IElMb2dpbik6IE9ic2VydmFibGU8SUF1dGhUb2tlbj47XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlciDQlNCw0L3QvdGL0LUg0LTQu9GPINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC/0L4g0L3QvtC80LXRgNGDINGC0LXQu9C10YTQvtC90LAuXG4gICAgICovXG4gICAgcHVibGljIGdldFNpZ25JbiQodXNlcjogSVBob25lTG9naW4pOiBPYnNlcnZhYmxlPElBdXRoVG9rZW4+O1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXIg0JTQsNC90L3Ri9C1INC+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtSDQtNC70Y8g0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2lnbkluJCh1c2VyOiBJTG9naW4gfCBJUGhvbmVMb2dpbik6IE9ic2VydmFibGU8SUF1dGhUb2tlbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SUF1dGhUb2tlbj4oYCR7dGhpcy51cmxzLmFwaVVybH0vYXV0aC9sb2dpbmAsIHVzZXIpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLnNpZ25lZEluLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgc2lnbl9pbl90eXBlOiAncGFzc3dvcmQnIGluIHVzZXIgPyAnbG9naW4vcGFzc3dvcmQnIDogJ3Bob25lL2NvZGUnIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgodG9rZW5zT2JqZWN0OiBJQXV0aFRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0QXV0aFRva2VuKHRva2Vuc09iamVjdCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZW1vdmVBdXRoVG9rZW4g0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDRg9C00LDQu9C40YLRjCDQutC70Y7RhyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTaWduT3V0JChyZW1vdmVBdXRoVG9rZW46IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTx1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8dW5kZWZpbmVkPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLnVybHMuYXBpVXJsfS9hdXRoL2xvZ291dGAsXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBuZXcgSHR0cENvbnRleHQoKS5zZXQoU0NfSVNfTE9HT1VUX1JFUVVFU1QsIHRydWUpLnNldChTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIHRydWUpLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5zaWduZWRPdXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVBdXRoVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnJlbW92ZUF1dGhUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINC30LDQv9GA0L7RgSDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2lnbk91dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRTaWduT3V0JCgpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQv9C+0LLRgtC+0YDQvdC+0Lkg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg0L7QsdC90L7QstC70LXQvdC40Y8g0LrQu9GO0YfQsCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbnMg0JrQu9GO0YfQuCDQtNC+0YHRgtGD0L/QsCDQuiBBUEksINC4INC+0LHQvdC+0LLQu9C10L3QuNGPINGB0LXRgdGB0LjQuCDQtNC+0YHRgtGD0L/QsCDQuiBBUEkuINCV0YHQu9C4INC60LvRjtGH0Lgg0L3QtSDQv9C10YDQtdC00LDQvdGLLCDQsdC10YDRkdGCINC40YUg0LjQtyB7QGxpbmsgU3RvcmFnZX0uXG4gICAgICovXG4gICAgcHVibGljIGdldFJlZnJlc2hUb2tlbiQocmVmcmVzaFRva2Vucz86IElBdXRoVG9rZW4pOiBPYnNlcnZhYmxlPElBdXRoVG9rZW4+IHtcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gcmVmcmVzaFRva2Vucz8ucmVmcmVzaC50b2tlbiA/PyB0aGlzLnRva2VuU2VydmljZS5nZXRSZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSByZWZyZXNoVG9rZW5zXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCh0aGlzLmFwaUtleXMua2V5TmFtZSwgcmVmcmVzaFRva2Vucy5hY2Nlc3MudG9rZW4pLFxuICAgICAgICAgICAgICAgICAgY29udGV4dDogbmV3IEh0dHBDb250ZXh0KCkuc2V0KFNDX0lTX1JFRlJFU0hfUkVRVUlSRUQsIHRydWUpLnNldChTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIHRydWUpLnNldChTQ19BVVRIX0FERF9IRUFERVJfUkVRVUlSRUQsIGZhbHNlKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBuZXcgSHR0cENvbnRleHQoKS5zZXQoU0NfSVNfUkVGUkVTSF9SRVFVSVJFRCwgdHJ1ZSkuc2V0KFNDX0lTX0hJRERFTl9FUlJPUl9BTEVSVCwgdHJ1ZSksXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxJQXV0aFRva2VuPihgJHt0aGlzLnVybHMuYXBpVXJsfS9hdXRoL3Rva2VuYCwgeyByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4gfSwgcmVxdWVzdE9wdGlvbnMpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHRva2VuczogSUF1dGhUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldEF1dGhUb2tlbih0b2tlbnMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0L/QvtC70YPRh9C10L3QuNGPINCz0L7RgdGC0LXQstC+0LPQviDQutC70Y7Rh9CwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRHdWVzdFRva2VuJCgpOiBPYnNlcnZhYmxlPElUb2tlbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0PElUb2tlbj4oYCR7dGhpcy51cmxzLmFwaVVybH0vYXV0aC9ndWVzdC90b2tlbmAsIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBTQ19JU19ISURERU5fRVJST1JfQUxFUlRfSFRUUF9DT05URVhULFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgodG9rZW46IElUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXRHdWVzdFRva2VuKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9hdXRoL3NlcnZpY2VzL3NjLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFFMUQsT0FBTyxFQUFjLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWxILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7Ozs7O0FBSWxGOztHQUVHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUFnQnRCOzs7Ozs7OztPQVFHO0lBQ0gsWUFDcUIsSUFBZ0IsRUFDQyxJQUFhLEVBQ1Qs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QUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ1YsQ0FBQzsrR0E3S1EsYUFBYSw0Q0EyQlYsT0FBTyxhQUNQLFdBQVc7bUhBNUJkLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBNEJRLE1BQU07MkJBQUMsT0FBTzs7MEJBQ2QsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuaWZpZWQtc2lnbmF0dXJlcyAqL1xuXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwQ29udGV4dCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBtYXAsIE9ic2VydmFibGUsIG9mLCBwYXJ0aXRpb24sIFJlcGxheVN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjSUFwaUtleXMgfSBmcm9tICcuLi8uLi9jb25maWcvc2MtaS1hcGkta2V5cyc7XG5pbXBvcnQgeyBTY0lVcmxzIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NjLWktdXJscyc7XG5pbXBvcnQgeyBTQ19BVVRIX0FERF9IRUFERVJfUkVRVUlSRUQgfSBmcm9tICcuLi8uLi9odHRwSW50ZXJjZXB0b3JzL3Rva2Vucy9zYy1hdXRoLWFkZC1oZWFkZXItcmVxdWlyZWQnO1xuaW1wb3J0IHsgU0NfSVNfTE9HT1VUX1JFUVVFU1QgfSBmcm9tICcuLi8uLi9odHRwSW50ZXJjZXB0b3JzL3Rva2Vucy9zYy1pcy1sb2dvdXQtcmVxdWVzdCc7XG5pbXBvcnQgeyBTQ19JU19SRUZSRVNIX1JFUVVJUkVEIH0gZnJvbSAnLi4vLi4vaHR0cEludGVyY2VwdG9ycy90b2tlbnMvc2MtaXMtcmVmcmVzaC10b2tlbi1yZXF1aXJlZCc7XG5pbXBvcnQgeyBJU19TRVJWRVIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvc3NyLnByb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIFNDX0lTX0hJRERFTl9FUlJPUl9BTEVSVF9IVFRQX0NPTlRFWFQgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgU0NfQVBJX0tFWVMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtYXBpLWtleXMnO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy11cmxzJztcbmltcG9ydCB7IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sIFNjVXNlck1ldHJpa2FTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1tZXRyaWthJztcbmltcG9ydCB7IElBdXRoVG9rZW4sIElMb2dpbiwgSVBob25lTG9naW4sIElUb2tlbiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2NUb2tlblNlcnZpY2UgfSBmcm9tICcuL3NjLXRva2VuLnNlcnZpY2UnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY0F1dGhTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgUmVwbGF5U3ViamVjdH0g0LTQu9GPINGB0L7QsdGL0YLQuNC50L3QvtC5INC80L7QtNC10LvQuCDRgdC10YDQstC40YHQsCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgYXV0aFN1YmplY3Q6IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YHQutGA0LjQv9GCINCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L3QsCDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzU2VydmVyOiBib29sZWFuID0gaW5qZWN0KElTX1NFUlZFUik7XG5cbiAgICAvKipcbiAgICAgKiDQntCz0YDQsNC90LjRh9C40LLQsNC10YIg0LbQuNC30L3RjCDQv9C+0LTQv9C40YHQvtC6INC40Lcg0LrQvtC90YHRgtGA0YPQutGC0L7RgNCwINC40L3QttC10LrRgtC+0YDQvtC8ICjQsNC60YLRg9Cw0LvRjNC90L4g0LTQu9GPIHVuaXQt0YLQtdGB0YLQvtCyKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQXV0aFNlcnZpY2V9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGh0dHAgSFRUUC3QutC70LjQtdC90YIuXG4gICAgICogQHBhcmFtIHVybHMg0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQvdCwINGA0LDQt9C00LXQu9GLIGJhY2tlbmQnYS5cbiAgICAgKiBAcGFyYW0gYXBpS2V5cyDQl9Cw0LPQvtC70L7QstC60Lgg0LrQu9GO0YfQtdC5INC00L7RgdGC0YPQv9CwINC6IEFQSS5cbiAgICAgKiBAcGFyYW0gdG9rZW5TZXJ2aWNlINCh0LXRgNCy0LjRgSDQutC70Y7Rh9C10Lkg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgQEluamVjdChTQ19BUElfS0VZUykgcHJpdmF0ZSByZWFkb25seSBhcGlLZXlzOiBTY0lBcGlLZXlzLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuU2VydmljZTogU2NUb2tlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zdCBbYXV0aFN0YXRlJCwgYWN0aW9ucyRdID0gcGFydGl0aW9uKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICAgICAgYWNjZXNzOiB0aGlzLnRva2VuU2VydmljZS5hY2Nlc3NBdXRoVG9rZW4kLnBpcGUobWFwKCh0b2tlbikgPT4gdG9rZW4gIT09IG51bGwpKSxcbiAgICAgICAgICAgICAgICBndWVzdDogdGhpcy50b2tlblNlcnZpY2UuZ3Vlc3RUb2tlbiQucGlwZShtYXAoKHRva2VuKSA9PiB0b2tlbiAhPT0gbnVsbCkpLFxuICAgICAgICAgICAgfSkucGlwZShkZWJvdW5jZVRpbWUoMCkpLCAvLyDQmNGB0L/RgNCw0LLQu9GP0LXRgiDQvtGI0LjQsdC60YMg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+0LPQviDRg9C00LDQu9C10L3QuNGPINC60LvRjtGH0LAg0LPQvtGB0YLRjyDQuCDQutC70Y7Rh9CwINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy4g0JLQvtC30L3QuNC60LDQtdGCINC/0YDQuCDQvtGH0LjRgdGC0LrQtSBTdG9yYWdlLlxuICAgICAgICAgICAgKHsgYWNjZXNzLCBndWVzdCB9KSA9PiAoYWNjZXNzICYmICFndWVzdCkgfHwgKCFhY2Nlc3MgJiYgZ3Vlc3QpXG4gICAgICAgICk7XG4gICAgICAgIGF1dGhTdGF0ZSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCh7IGFjY2VzcyB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF1dGhTdWJqZWN0Lm5leHQoYWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbnMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHsgYWNjZXNzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2UucmVtb3ZlR3Vlc3RUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyDQndCwINGB0LXRgNCy0LXRgNC1INC60LvRjtGHINCT0L7RgdGC0Y8g0L3QtdC60YPQtNCwINGB0L7RhdGA0LDQvdC40YLRjCwg0L/QvtGN0YLQvtC80YMg0LfQsNC/0YDQvtGBINC90LUg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjy5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTZXJ2ZXIgPyBvZihudWxsKSA6IHRoaXMuZ2V0R3Vlc3RUb2tlbiQoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzU2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INGB0L7RgdGC0L7Rj9C90LjRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LCDRh9GC0L7QsdGLINGA0LXQsNCz0LjRgNC+0LLQsNGC0Ywg0L3QsCDQuNC30LzQtdC90LXQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIGdldEF1dGhDaGFuZ2UoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1c2VyINCU0LDQvdC90YvQtSDQtNC70Y8g0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0L/QviBlbWFpbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2lnbkluJCh1c2VyOiBJTG9naW4pOiBPYnNlcnZhYmxlPElBdXRoVG9rZW4+O1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXIg0JTQsNC90L3Ri9C1INC00LvRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9C+INC90L7QvNC10YDRgyDRgtC10LvQtdGE0L7QvdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTaWduSW4kKHVzZXI6IElQaG9uZUxvZ2luKTogT2JzZXJ2YWJsZTxJQXV0aFRva2VuPjtcblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1c2VyINCU0LDQvdC90YvQtSDQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUg0LTQu9GPINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIGdldFNpZ25JbiQodXNlcjogSUxvZ2luIHwgSVBob25lTG9naW4pOiBPYnNlcnZhYmxlPElBdXRoVG9rZW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElBdXRoVG9rZW4+KGAke3RoaXMudXJscy5hcGlVcmx9L2F1dGgvbG9naW5gLCB1c2VyKS5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5zaWduZWRJbixcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IHNpZ25faW5fdHlwZTogJ3Bhc3N3b3JkJyBpbiB1c2VyID8gJ2xvZ2luL3Bhc3N3b3JkJyA6ICdwaG9uZS9jb2RlJyB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKHRva2Vuc09iamVjdDogSUF1dGhUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldEF1dGhUb2tlbih0b2tlbnNPYmplY3QpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0LfQsNCy0LXRgNGI0LXQvdC40Y8g0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVtb3ZlQXV0aFRva2VuINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0YPQtNCw0LvQuNGC0Ywg0LrQu9GO0Ycg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2lnbk91dCQocmVtb3ZlQXV0aFRva2VuOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8dW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PHVuZGVmaW5lZD4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy51cmxzLmFwaVVybH0vYXV0aC9sb2dvdXRgLFxuICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogbmV3IEh0dHBDb250ZXh0KCkuc2V0KFNDX0lTX0xPR09VVF9SRVFVRVNULCB0cnVlKS5zZXQoU0NfSVNfSElEREVOX0VSUk9SX0FMRVJULCB0cnVlKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0uc2lnbmVkT3V0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlQXV0aFRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuU2VydmljZS5yZW1vdmVBdXRoVG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvQv9C+0LvQvdGP0LXRgiDQt9Cw0L/RgNC+0YEg0LfQsNCy0LXRgNGI0LXQvdC40Y8g0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICovXG4gICAgcHVibGljIHNpZ25PdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0U2lnbk91dCQoKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0L/QvtCy0YLQvtGA0L3QvtC5INCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC4INC+0LHQvdC+0LLQu9C10L3QuNGPINC60LvRjtGH0LAg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW5zINCa0LvRjtGH0Lgg0LTQvtGB0YLRg9C/0LAg0LogQVBJLCDQuCDQvtCx0L3QvtCy0LvQtdC90LjRjyDRgdC10YHRgdC40Lgg0LTQvtGB0YLRg9C/0LAg0LogQVBJLiDQldGB0LvQuCDQutC70Y7Rh9C4INC90LUg0L/QtdGA0LXQtNCw0L3Riywg0LHQtdGA0ZHRgiDQuNGFINC40Lcge0BsaW5rIFN0b3JhZ2V9LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSZWZyZXNoVG9rZW4kKHJlZnJlc2hUb2tlbnM/OiBJQXV0aFRva2VuKTogT2JzZXJ2YWJsZTxJQXV0aFRva2VuPiB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbnM/LnJlZnJlc2gudG9rZW4gPz8gdGhpcy50b2tlblNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gcmVmcmVzaFRva2Vuc1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQodGhpcy5hcGlLZXlzLmtleU5hbWUsIHJlZnJlc2hUb2tlbnMuYWNjZXNzLnRva2VuKSxcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IG5ldyBIdHRwQ29udGV4dCgpLnNldChTQ19JU19SRUZSRVNIX1JFUVVJUkVELCB0cnVlKS5zZXQoU0NfSVNfSElEREVOX0VSUk9SX0FMRVJULCB0cnVlKS5zZXQoU0NfQVVUSF9BRERfSEVBREVSX1JFUVVJUkVELCBmYWxzZSksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbmV3IEh0dHBDb250ZXh0KCkuc2V0KFNDX0lTX1JFRlJFU0hfUkVRVUlSRUQsIHRydWUpLnNldChTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIHRydWUpLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8SUF1dGhUb2tlbj4oYCR7dGhpcy51cmxzLmFwaVVybH0vYXV0aC90b2tlbmAsIHsgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuIH0sIHJlcXVlc3RPcHRpb25zKS5waXBlKFxuICAgICAgICAgICAgdGFwKCh0b2tlbnM6IElBdXRoVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXRBdXRoVG9rZW4odG9rZW5zKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC/0L7Qu9GD0YfQtdC90LjRjyDQs9C+0YHRgtC10LLQvtCz0L4g0LrQu9GO0YfQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0R3Vlc3RUb2tlbiQoKTogT2JzZXJ2YWJsZTxJVG9rZW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmdldDxJVG9rZW4+KGAke3RoaXMudXJscy5hcGlVcmx9L2F1dGgvZ3Vlc3QvdG9rZW5gLCB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogU0NfSVNfSElEREVOX0VSUk9SX0FMRVJUX0hUVFBfQ09OVEVYVCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKHRva2VuOiBJVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0R3Vlc3RUb2tlbih0b2tlbik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -66,11 +66,11 @@ export class ScCatalogRedirectService {
66
66
  * (адрес со slug либо с идентификатором — в зависимости от настроек окружения).
67
67
  *
68
68
  * @param commands Сегменты канонического маршрута.
69
- * @param status Статус редиректа: адрес с идентификатором заменяется на канонический навсегда, поэтому по умолчанию постоянный.
69
+ * @param status Статус редиректа: вид адреса задаётся настройками окружения и может быть изменён, поэтому по умолчанию временный.
70
70
  * @returns Дерево канонического маршрута для навигации либо `false`, если редирект выполнен ответом сервера.
71
71
  */
72
72
  // eslint-disable-next-line sonarjs/function-return-type
73
- redirectToCanonicalUrl(commands, status = ScRedirectStatusEnum.Permanent) {
73
+ redirectToCanonicalUrl(commands, status = ScRedirectStatusEnum.Temporary) {
74
74
  const urlTree = this.router.createUrlTree(commands);
75
75
  if (this.isCanonicalRedirectEnabled && this.isServer && this.setServerRedirect(this.router.serializeUrl(urlTree), status)) {
76
76
  return false;
@@ -207,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
207
207
  providedIn: 'root',
208
208
  }]
209
209
  }] });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1yZWRpcmVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jYXRhbG9nL3NlcnZpY2VzL3NjLWNhdGFsb2ctcmVkaXJlY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXdDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFeEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFIckM7UUFJSTs7V0FFRztRQUNjLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFM0Q7O1dBRUc7UUFDYyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDOztXQUVHO1FBQ2MsYUFBUSxHQUFHLE1BQU0s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LENBQUM7b0JBQ3BFLE9BQU8sS0FBSyxDQUFDO2dCQUNqQixDQUFDO2dCQUVELG1GQUFtRjtnQkFDbkYsK0ZBQStGO2dCQUMvRixFQUFFO2dCQUNGLDJHQUEyRztnQkFDM0csdUhBQXVIO2dCQUN2SCxnRkFBZ0Y7Z0JBQ2hGLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFFRCxxR0FBcUc7WUFDckcsdUdBQXVHO1lBQ3ZHLDhHQUE4RztZQUM5RyxFQUFFO1lBQ0YsMEdBQTBHO1lBQzFHLDZHQUE2RztZQUM3RywySEFBMkg7WUFDM0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTFDLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOytHQTlNUSx3QkFBd0I7bUhBQXhCLHdCQUF3QixjQUZyQixNQUFNOzs0RkFFVCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB0dWlJc1ByZXNlbnQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIEVNUFRZLCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY1JlZGlyZWN0U3RhdHVzRW51bSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy9yZWRpcmVjdC1zdGF0dXMtZW51bSc7XG5pbXBvcnQgeyBJU19TRVJWRVIsIFJFU1BPTlNFIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3Nzci5wcm92aWRlcnMnO1xuaW1wb3J0IHsgU0NfQ0FOT05JQ0FMX1JFRElSRUNUX0VOQUJMRUQgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtY2Fub25pY2FsLXJlZGlyZWN0LWVuYWJsZWQnO1xuaW1wb3J0IHsgU0NfSURfT1JfU0xVR19JTl9ST1VURSB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1pZC1vci1zbHVnLWluLXJvdXRlJztcbmltcG9ydCB7IFNjSVBhcmVudENhdGVnb3J5UmVkaXJlY3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktcGFyZW50LWNhdGVnb3J5LXJlZGlyZWN0JztcbmltcG9ydCB7IFNjQ2F0YWxvZ1NlcnZpY2UgfSBmcm9tICcuL3NjLWNhdGFsb2cuc2VydmljZSc7XG5cbi8qKlxuICog0KHQtdGA0LLQuNGBINGA0LXQtNC40YDQtdC60YLQvtCyINC60LDRgtCw0LvQvtCz0LA6INC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRjiDQv9GA0Lgg0L3QtdC00L7RgdGC0YPQv9C90L7RgdGC0LggKEhUVFAgNDA0KSDRgtC+0LLQsNGA0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjQuFxuICog0Lgg0L3QsCDQutCw0L3QvtC90LjRh9C10YHQutC40Lkg0LDQtNGA0LXRgSDRgtC+0LLQsNGA0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjQuCAo0YHQvC4ge0BsaW5rIHJlZGlyZWN0VG9DYW5vbmljYWxVcmx9KS5cbiAqXG4gKiDQoNC10LTQuNGA0LXQutGCINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRji5cbiAqXG4gKiDQl9Cw0L/RgNCw0YjQuNCy0LDQtdGCINGDINCx0Y3QutC10L3QtNCwINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4g0L3QtdC00L7RgdGC0YPQv9C90L7QuSDRgdGD0YnQvdC+0YHRgtC4INC4INCy0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCOlxuICogLSDQvdCwINGB0LXRgNCy0LXRgNC1IChTU1IpINC/0YDQuCDQtNC+0YHRgtGD0L/QvdC+0Lwge0BsaW5rIFJFU1BPTlNFfSDigJQg0LLRi9GB0YLQsNCy0LvRj9C10YIgSFRUUC3RgdGC0LDRgtGD0YEgMzAyINC4INC30LDQs9C+0LvQvtCy0L7QuiBgTG9jYXRpb25gINC00LvRjyDQutC+0YDRgNC10LrRgtC90L7Qs9C+INGA0LXQtNC40YDQtdC60YLQsCDQv9C+0LjRgdC60L7QstGL0YUg0LHQvtGC0L7QsjtcbiAqIC0g0L3QsCDRgdC10YDQstC10YDQtSDQsdC10Lcge0BsaW5rIFJFU1BPTlNFfSAo0L3QsNC/0YDQuNC80LXRgCwgZGV2LdGB0LXRgNCy0LXRgCBgbmcgc2VydmVgKSDigJQg0LfQsNCy0LXRgNGI0LDQtdGCINC/0L7RgtC+0Log0L7RiNC40LHQutC+0LkgNDA0LCDRh9GC0L7QsdGLINC+0YLQvtCx0YDQsNC30LjQu9Cw0YHRjCDRgdGC0YDQsNC90LjRhtCwINC+0YjQuNCx0LrQuDtcbiAqIC0g0LIg0LHRgNCw0YPQt9C10YDQtSDigJQg0LLRi9C/0L7Qu9C90Y/QtdGCINC/0L7Qu9C90YPRjiDQvdCw0LLQuNCz0LDRhtC40Y4g0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOLlxuICpcbiAqINCV0YHQu9C4INGA0L7QtNC40YLQtdC70YzRgdC60LDRjyDQutCw0YLQtdCz0L7RgNC40Y8g0L3QtSDQvdCw0LnQtNC10L3QsCwg0L/QvtGC0L7QuiDRgtCw0LrQttC1INC30LDQstC10YDRiNCw0LXRgtGB0Y8g0L7RiNC40LHQutC+0Lkge0BsaW5rIEh0dHBFcnJvclJlc3BvbnNlfSxcbiAqINGH0YLQvtCx0Ysg0LLRi9C30YvQstCw0Y7RidC40Lkg0LrQvtC0INC+0YLQvtCx0YDQsNC30LjQuyDRgdGC0YDQsNC90LjRhtGDINC+0YjQuNCx0LrQuC5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NDYXRhbG9nUmVkaXJlY3RTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutCw0YLQsNC70L7Qs9C+0LwuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nU2VydmljZSA9IGluamVjdChTY0NhdGFsb2dTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQvNCw0YDRiNGA0YPRgtC40LfQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsCDQuNC70Lggc2x1ZyDQsiDQvNCw0YDRiNGA0YPRgtCw0YUg0YLQvtCy0LDRgNC+0LIg0Lgg0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRPclNsdWcgPSBpbmplY3QoU0NfSURfT1JfU0xVR19JTl9ST1VURSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INCy0LrQu9GO0YfRkdC9INC/0L7RgdGC0L7Rj9C90L3Ri9C5INGA0LXQtNC40YDQtdC60YIg0L3QsCDQutCw0L3QvtC90LjRh9C10YHQutC40Lkg0LDQtNGA0LXRgSDRgtC+0LLQsNGA0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzQ2Fub25pY2FsUmVkaXJlY3RFbmFibGVkID0gaW5qZWN0KFNDX0NBTk9OSUNBTF9SRURJUkVDVF9FTkFCTEVEKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YLQtdC60YPRidC40Lkg0YHQutGA0LjQv9GCINC40YHQv9C+0LvQvdGP0LXRgtGB0Y8g0L3QsCDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzU2VydmVyID0gaW5qZWN0KElTX1NFUlZFUik7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L7QsSDQvtGC0LLQtdGC0LUg0L3QsCDQt9Cw0L/RgNC+0YEgKNC00L7RgdGC0YPQv9C90Ysg0YLQvtC70YzQutC+INC90LAg0YHQtdGA0LLQtdGA0LUg0L/RgNC4IFNTUikuXG4gICAgICpcbiAgICAgKiBBbmd1bGFyIDIxICjQvNC40LPRgNCw0YbQuNGPIFNTUik6IHtAbGluayBSRVNQT05TRX0g4oCUINC60LDRgdGC0L7QvNC90YvQuSBFeHByZXNzLdGC0L7QutC10L0sINC60L7RgtC+0YDRi9C5INC/0YDQvtCy0LDQudC00LjRgtGB0Y8g0LIgYHNlcnZlci50c2BcbiAgICAgKiDRh9C10YDQtdC3IENvbW1vbkVuZ2luZS4g0J3QsCB1cGdyYWRlLdCy0LXRgtC60LUgYHNlcnZlci50c2Ag0L7RgdGC0LDQu9GB0Y8g0L3QsCBDb21tb25FbmdpbmUsINC/0L7RjdGC0L7QvNGDINC/0YDQuCDRgdC70LjRj9C90LjQuCDQt9C00LXRgdGMXG4gICAgICog0L3QuNGH0LXQs9C+INC80LXQvdGP0YLRjCDQvdC1INC90YPQttC90L4uINCV0YHQu9C4IGBzZXJ2ZXIudHNgINC80LjQs9GA0LjRgNGD0Y7RgiDQvdCwIGBBbmd1bGFyTm9kZUFwcEVuZ2luZWAgKyBgY3JlYXRlTm9kZVJlcXVlc3RIYW5kbGVyYCxcbiAgICAgKiDQt9Cw0LzQtdC90LjRgtC1IHtAbGluayBSRVNQT05TRX0g0L3QsCDQvdCw0YLQuNCy0L3Ri9C5IGBSRVNQT05TRV9JTklUYCAoYEluamVjdGlvblRva2VuPFJlc3BvbnNlSW5pdCB8IG51bGw+YCDQuNC3IGBAYW5ndWxhci9jb3JlYCk7XG4gICAgICog0YHQvC4g0YHQtdGA0LLQtdGA0L3Ri9C1INCy0LXRgtC60Lgg0LIge0BsaW5rIHJlZGlyZWN0VG9QYXJlbnRDYXRlZ29yeSR9INC4IHtAbGluayByZWRpcmVjdFRvQ2Fub25pY2FsVXJsfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3BvbnNlID0gaW5qZWN0KFJFU1BPTlNFLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JTQvtC60YPQvNC10L3RgiDRgtC10LrRg9GJ0LXQuSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0YDQtdC30YPQu9GM0YLQsNGCINGB0YLRgNCw0LbQsCDQvNCw0YDRiNGA0YPRgtCwINC00LvRjyDQv9C10YDQtdGF0L7QtNCwINC90LAg0LrQsNC90L7QvdC40YfQtdGB0LrQuNC5INCw0LTRgNC10YEg0YLQvtCy0LDRgNCwINC40LvQuCDQutCw0YLQtdCz0L7RgNC40LhcbiAgICAgKiAo0LDQtNGA0LXRgSDRgdC+IHNsdWcg0LvQuNCx0L4g0YEg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQvtC8IOKAlCDQsiDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4INC+0YIg0L3QsNGB0YLRgNC+0LXQuiDQvtC60YDRg9C20LXQvdC40Y8pLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbW1hbmRzINCh0LXQs9C80LXQvdGC0Ysg0LrQsNC90L7QvdC40YfQtdGB0LrQvtCz0L4g0LzQsNGA0YjRgNGD0YLQsC5cbiAgICAgKiBAcGFyYW0gc3RhdHVzINCh0YLQsNGC0YPRgSDRgNC10LTQuNGA0LXQutGC0LA6INCw0LTRgNC10YEg0YEg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQvtC8INC30LDQvNC10L3Rj9C10YLRgdGPINC90LAg0LrQsNC90L7QvdC40YfQtdGB0LrQuNC5INC90LDQstGB0LXQs9C00LAsINC/0L7RjdGC0L7QvNGDINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC/0L7RgdGC0L7Rj9C90L3Ri9C5LlxuICAgICAqIEByZXR1cm5zINCU0LXRgNC10LLQviDQutCw0L3QvtC90LjRh9C10YHQutC+0LPQviDQvNCw0YDRiNGA0YPRgtCwINC00LvRjyDQvdCw0LLQuNCz0LDRhtC40Lgg0LvQuNCx0L4gYGZhbHNlYCwg0LXRgdC70Lgg0YDQtdC00LjRgNC10LrRgiDQstGL0L/QvtC70L3QtdC9INC+0YLQstC10YLQvtC8INGB0LXRgNCy0LXRgNCwLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2Z1bmN0aW9uLXJldHVybi10eXBlXG4gICAgcHVibGljIHJlZGlyZWN0VG9DYW5vbmljYWxVcmwoY29tbWFuZHM6IEFycmF5PG51bWJlciB8IHN0cmluZz4sIHN0YXR1czogU2NSZWRpcmVjdFN0YXR1c0VudW0gPSBTY1JlZGlyZWN0U3RhdHVzRW51bS5QZXJtYW5lbnQpOiBib29sZWFuIHwgVXJsVHJlZSB7XG4gICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzKTtcblxuICAgICAgICBpZiAodGhpcy5pc0Nhbm9uaWNhbFJlZGlyZWN0RW5hYmxlZCAmJiB0aGlzLmlzU2VydmVyICYmIHRoaXMuc2V0U2VydmVyUmVkaXJlY3QodGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHVybFRyZWUpLCBzdGF0dXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsVHJlZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0YHRgtCw0LLQu9GP0LXRgiDRgNC10LTQuNGA0LXQutGCINCyINC+0YLQstC10YLQtSDRgdC10YDQstC10YDQsCAoU1NSKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXRVcmwg0JDQtNGA0LXRgSwg0L3QsCDQutC+0YLQvtGA0YvQuSDQstGL0L/QvtC70L3Rj9C10YLRgdGPINGA0LXQtNC40YDQtdC60YIuXG4gICAgICogQHBhcmFtIHN0YXR1cyDQodGC0LDRgtGD0YEg0YDQtdC00LjRgNC10LrRgtCwLlxuICAgICAqIEByZXR1cm5zINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YDQtdC00LjRgNC10LrRgiDQstGL0YHRgtCw0LLQu9C10L07IGBmYWxzZWAsINC10YHQu9C4INC00LDQvdC90YvQtSDQvtCxINC+0YLQstC10YLQtSDQvdC10LTQvtGB0YLRg9C/0L3RiyAo0L3QsNC/0YDQuNC80LXRgCwgZGV2LdGB0LXRgNCy0LXRgCBgbmcgc2VydmVgKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFNlcnZlclJlZGlyZWN0KHRhcmdldFVybDogc3RyaW5nLCBzdGF0dXM6IFNjUmVkaXJlY3RTdGF0dXNFbnVtKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW5ndWxhciAyMSAo0LzQuNCz0YDQsNGG0LjRjyBTU1IpOiDQv9GA0Lgg0L/QtdGA0LXRhdC+0LTQtSBzZXJ2ZXIudHMg0L3QsCBBbmd1bGFyTm9kZUFwcEVuZ2luZSDRgdGC0LDRgtGD0YEg0Lgg0LfQsNCz0L7Qu9C+0LLQvtC6INCy0YvRgdGC0LDQstC70Y/RjtGC0YHRj1xuICAgICAgICAvLyDRh9C10YDQtdC3INC90LDRgtC40LLQvdGL0LkgUkVTUE9OU0VfSU5JVCDQstC80LXRgdGC0L4gRXhwcmVzcy3QvNC10YLQvtC00L7QsiByZXNwb25zZS5zZXRIZWFkZXIvcmVzcG9uc2Uuc3RhdHVzLlxuICAgICAgICB0aGlzLnJlc3BvbnNlLnNldEhlYWRlcignTG9jYXRpb24nLCB0YXJnZXRVcmwpO1xuICAgICAgICB0aGlzLnJlc3BvbnNlLnN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRjiDQvdC10LTQvtGB0YLRg9C/0L3QvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINC90LXQtNC+0YHRgtGD0L/QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqIEByZXR1cm5zINCf0L7RgtC+0LosINC30LDQstC10YDRiNCw0Y7RidC40LnRgdGPINC/0L7RgdC70LUg0YDQtdC00LjRgNC10LrRgtCwLiDQrdC80LjRgtC40YIg0L7RiNC40LHQutGDIHtAbGluayBIdHRwRXJyb3JSZXNwb25zZX0sINC10YHQu9C4INGA0L7QtNC40YLQtdC70YzRgdC60LDRjyDQutCw0YLQtdCz0L7RgNC40Y8g0L3QtSDQvdCw0LnQtNC10L3QsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVkaXJlY3RUb0NhdGVnb3J5UGFyZW50JChjYXRlZ29yeUlkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0VG9QYXJlbnRDYXRlZ29yeSQodGhpcy5jYXRhbG9nU2VydmljZS5nZXRDYXRlZ29yeVBhcmVudENhdGVnb3J5JChjYXRlZ29yeUlkT3JTbHVnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINGA0LXQtNC40YDQtdC60YIg0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOINC90LXQtNC+0YHRgtGD0L/QvdC+0LPQviDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdElkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINC90LXQtNC+0YHRgtGD0L/QvdC+0LPQviDRgtC+0LLQsNGA0LAuXG4gICAgICogQHJldHVybnMg0J/QvtGC0L7Quiwg0LfQsNCy0LXRgNGI0LDRjtGJ0LjQudGB0Y8g0L/QvtGB0LvQtSDRgNC10LTQuNGA0LXQutGC0LAuINCt0LzQuNGC0LjRgiDQvtGI0LjQsdC60YMge0BsaW5rIEh0dHBFcnJvclJlc3BvbnNlfSwg0LXRgdC70Lgg0YDQvtC00LjRgtC10LvRjNGB0LrQsNGPINC60LDRgtC10LPQvtGA0LjRjyDQvdC1INC90LDQudC00LXQvdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWRpcmVjdFRvUHJvZHVjdFBhcmVudCQocHJvZHVjdElkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0VG9QYXJlbnRDYXRlZ29yeSQodGhpcy5jYXRhbG9nU2VydmljZS5nZXRQcm9kdWN0UGFyZW50Q2F0ZWdvcnkkKHByb2R1Y3RJZE9yU2x1ZykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0L/QtdGA0LDRgtC+0YAg0YPRgdGC0L7QudGH0LjQstC+0Lkg0L7QsdGA0LDQsdC+0YLQutC4INC90LXQtNC+0YHRgtGD0L/QvdC+0LkgKEhUVFAt0L7RiNC40LHQutCwKSDQutCw0YLQtdCz0L7RgNC40Lgg0LIg0L/QvtGC0L7QutC1INC00LDQvdC90YvRhTog0L/RgNC4IDQwNCDQstGL0L/QvtC70L3Rj9C10YIg0YDQtdC00LjRgNC10LrRglxuICAgICAqINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRjiwg0L/RgNC4INC90LXQtNC+0YHRgtGD0L/QvdC+0Lwg0YDQvtC00LjRgtC10LvQtSDQuNC70Lgg0LjQvdC+0Lkg0L7RiNC40LHQutC1INGB0L7QvtCx0YnQsNC10YIg0LrQvtC0INGH0LXRgNC10Lcge0BsaW5rIG9uRXJyb3JDb2RlfS5cbiAgICAgKiDQntGI0LjQsdC60YMg0L3QtSDQv9GA0L7QsdGA0LDRgdGL0LLQsNC10YIgKNC30LDQstC10YDRiNCw0LXRgiDQv9C+0YLQvtC6IHtAbGluayBFTVBUWX0pLCDQv9C+0Y3RgtC+0LzRgyDQv9C+0YLQvtC6INC00LDQvdC90YvRhSDQvdC1INC30LDQstC10YDRiNCw0LXRgtGB0Y8g0L7RiNC40LHQutC+0LkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDQvdC10LTQvtGB0YLRg9C/0L3QvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKiBAcGFyYW0gb25FcnJvckNvZGUg0JrQvtC70LHRjdC6INGD0YHRgtCw0L3QvtCy0LrQuCDQutC+0LTQsCDQvtGI0LjQsdC60LggKNC90LDQv9GA0LjQvNC10YAsINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINGB0YLRgNCw0L3QuNGG0Ysg0L7RiNC40LHQutC4KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlVW5hdmFpbGFibGVDYXRlZ29yeSQ8VD4oY2F0ZWdvcnlJZE9yU2x1ZzogbnVtYmVyIHwgc3RyaW5nLCBvbkVycm9yQ29kZTogKHN0YXR1czogbnVtYmVyKSA9PiB2b2lkKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVW5hdmFpbGFibGUkKCgpID0+IHRoaXMucmVkaXJlY3RUb0NhdGVnb3J5UGFyZW50JChjYXRlZ29yeUlkT3JTbHVnKSwgb25FcnJvckNvZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0L/QtdGA0LDRgtC+0YAg0YPRgdGC0L7QudGH0LjQstC+0Lkg0L7QsdGA0LDQsdC+0YLQutC4INC90LXQtNC+0YHRgtGD0L/QvdC+0LPQviAoSFRUUC3QvtGI0LjQsdC60LApINGC0L7QstCw0YDQsCDQsiDQv9C+0YLQvtC60LUg0LTQsNC90L3Ri9GFOiDQv9GA0LggNDA0INCy0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCXG4gICAgICog0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOINGC0L7QstCw0YDQsCwg0L/RgNC4INC90LXQtNC+0YHRgtGD0L/QvdC+0Lwg0YDQvtC00LjRgtC10LvQtSDQuNC70Lgg0LjQvdC+0Lkg0L7RiNC40LHQutC1INGB0L7QvtCx0YnQsNC10YIg0LrQvtC0INGH0LXRgNC10Lcge0BsaW5rIG9uRXJyb3JDb2RlfS5cbiAgICAgKiDQntGI0LjQsdC60YMg0L3QtSDQv9GA0L7QsdGA0LDRgdGL0LLQsNC10YIgKNC30LDQstC10YDRiNCw0LXRgiDQv9C+0YLQvtC6IHtAbGluayBFTVBUWX0pLCDQv9C+0Y3RgtC+0LzRgyDQv9C+0YLQvtC6INC00LDQvdC90YvRhSDQvdC1INC30LDQstC10YDRiNCw0LXRgtGB0Y8g0L7RiNC40LHQutC+0LkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdElkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINC90LXQtNC+0YHRgtGD0L/QvdC+0LPQviDRgtC+0LLQsNGA0LAuXG4gICAgICogQHBhcmFtIG9uRXJyb3JDb2RlINCa0L7Qu9Cx0Y3QuiDRg9GB0YLQsNC90L7QstC60Lgg0LrQvtC00LAg0L7RiNC40LHQutC4ICjQvdCw0L/RgNC40LzQtdGALCDQtNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDRgdGC0YDQsNC90LjRhtGLINC+0YjQuNCx0LrQuCkuXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZVVuYXZhaWxhYmxlUHJvZHVjdCQ8VD4ocHJvZHVjdElkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcsIG9uRXJyb3JDb2RlOiAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVVbmF2YWlsYWJsZSQoKCkgPT4gdGhpcy5yZWRpcmVjdFRvUHJvZHVjdFBhcmVudCQocHJvZHVjdElkT3JTbHVnKSwgb25FcnJvckNvZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCR0LDQt9C+0LLRi9C5INC+0L/QtdGA0LDRgtC+0YAg0YPRgdGC0L7QudGH0LjQstC+0Lkg0L7QsdGA0LDQsdC+0YLQutC4INC90LXQtNC+0YHRgtGD0L/QvdC+0Lkg0YHRg9GJ0L3QvtGB0YLQuDog0L/RgNC4IDQwNCDigJQg0YDQtdC00LjRgNC10LrRgiDQvdCwINGA0L7QtNC40YLQtdC70Y8gKNGH0LXRgNC10Lcge0BsaW5rIHJlZGlyZWN0VG9QYXJlbnQkfSksXG4gICAgICog0L/RgNC4INC90LXQtNC+0YHRgtGD0L/QvdC+0Lwg0YDQvtC00LjRgtC10LvQtSDQuNC70Lgg0LjQvdC+0Lwge0BsaW5rIEh0dHBFcnJvclJlc3BvbnNlfSDigJQge0BsaW5rIG9uRXJyb3JDb2RlfSDRgSDQutC+0LTQvtC8INC+0YLQstC10YLQsDsg0LLRgdC10LPQtNCwIHtAbGluayBFTVBUWX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVkaXJlY3RUb1BhcmVudCQg0KTQsNCx0YDQuNC60LAg0L/QvtGC0L7QutCwINGA0LXQtNC40YDQtdC60YLQsCDQvdCwINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4uXG4gICAgICogQHBhcmFtIG9uRXJyb3JDb2RlINCa0L7Qu9Cx0Y3QuiDRg9GB0YLQsNC90L7QstC60Lgg0LrQvtC00LAg0L7RiNC40LHQutC4LlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSBoYW5kbGVVbmF2YWlsYWJsZSQ8VD4ocmVkaXJlY3RUb1BhcmVudCQ6ICgpID0+IE9ic2VydmFibGU8bmV2ZXI+LCBvbkVycm9yQ29kZTogKHN0YXR1czogbnVtYmVyKSA9PiB2b2lkKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgICAgICAgcmV0dXJuIChzb3VyY2UkKSA9PlxuICAgICAgICAgICAgc291cmNlJC5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVkaXJlY3RUb1BhcmVudCQoKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKHJlZGlyZWN0RXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0RXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvckNvZGUocmVkaXJlY3RFcnJvci5zdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3JDb2RlKGVycm9yLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINGA0LXQtNC40YDQtdC60YIg0L3QsCDQv9C+0LvRg9GH0LXQvdC90YPRjiDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudENhdGVnb3J5JCDQn9C+0YLQvtC6INGBINC00LDQvdC90YvQvNC4INGA0L7QtNC40YLQtdC70YzRgdC60L7QuSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICogQHJldHVybnMg0J/QvtGC0L7Quiwg0LfQsNCy0LXRgNGI0LDRjtGJ0LjQudGB0Y8g0L/QvtGB0LvQtSDRgNC10LTQuNGA0LXQutGC0LAuINCt0LzQuNGC0LjRgiDQvtGI0LjQsdC60YMge0BsaW5rIEh0dHBFcnJvclJlc3BvbnNlfSDRgSDQutC+0LTQvtC8IDQwNCwg0LXRgdC70Lgg0YDQvtC00LjRgtC10LvRjNGB0LrQsNGPINC60LDRgtC10LPQvtGA0LjRjyDQvdC1INC90LDQudC00LXQvdCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVkaXJlY3RUb1BhcmVudENhdGVnb3J5JChwYXJlbnRDYXRlZ29yeSQ6IE9ic2VydmFibGU8U2NJUGFyZW50Q2F0ZWdvcnlSZWRpcmVjdD4pOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIHJldHVybiBwYXJlbnRDYXRlZ29yeSQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgocGFyZW50Q2F0ZWdvcnkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBwYXJlbnRDYXRlZ29yeVt0aGlzLmlkT3JTbHVnXTtcblxuICAgICAgICAgICAgICAgIC8vINCg0L7QtNC40YLQtdC70YzRgdC60LDRjyDQutCw0YLQtdCz0L7RgNC40Y8g0L3QtSDQvdCw0LnQtNC10L3QsCDigJQg0L7RgtC+0LHRgNCw0LbQsNC10Lwg0YHRgtGA0LDQvdC40YbRgyDQvtGI0LjQsdC60LguXG4gICAgICAgICAgICAgICAgaWYgKCF0dWlJc1ByZXNlbnQodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgSHR0cEVycm9yUmVzcG9uc2UoeyBzdGF0dXM6IDQwNCB9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoWycvY2F0YWxvZycsIHRhcmdldF0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHVybFRyZWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g0KHQutGA0YvRgtGL0LUg0LrQsNGC0LXQs9C+0YDQuNGPINC40LvQuCDRgtC+0LLQsNGAINC80L7Qs9GD0YIg0YHQvdC+0LLQsCDRgdGC0LDRgtGMINC00L7RgdGC0YPQv9C90YvQvNC4LCDQv9C+0Y3RgtC+0LzRgyDRgNC10LTQuNGA0LXQutGCINC90LAg0YDQvtC00LjRgtC10LvRjyDQstGA0LXQvNC10L3QvdGL0LkuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldFNlcnZlclJlZGlyZWN0KHRhcmdldFVybCwgU2NSZWRpcmVjdFN0YXR1c0VudW0uVGVtcG9yYXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU1NSINCx0LXQtyBSRVNQT05TRSAo0L3QsNC/0YDQuNC80LXRgCwgZGV2LdGB0LXRgNCy0LXRgCBuZyBzZXJ2ZSk6INGB0LXRgNCy0LXRgNC90YvQuSDRgNC10LTQuNGA0LXQutGCINC90LXQstC+0LfQvNC+0LbQtdC9LFxuICAgICAgICAgICAgICAgICAgICAvLyDQv9C+0Y3RgtC+0LzRgyDQvtGC0L7QsdGA0LDQttCw0LXQvCDRgdGC0YDQsNC90LjRhtGDINC+0YjQuNCx0LrQuCwg0LrQsNC6INC00L4g0LLQvdC10LTRgNC10L3QuNGPINGA0LXQtNC40YDQtdC60YLQsCwg0LLQvNC10YHRgtC+INCx0LXRgdC60L7QvdC10YfQvdC+0LPQviDQu9C+0LDQtNC10YDQsC5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgLy8gQW5ndWxhciAyMSAo0LzQuNCz0YDQsNGG0LjRjyBTU1IpOiDRjdGC0L7RgiDRhNC+0LvQsdGN0Log0L3Rg9C20LXQvSwg0L/QvtC60LAgbmcgc2VydmUg0L3QtSDQuNGB0L/QvtC70L3Rj9C10YIgc2VydmVyLnRzICjQvtC9INC90LAgQ29tbW9uRW5naW5lKS5cbiAgICAgICAgICAgICAgICAgICAgLy8g0J/QvtGB0LvQtSDQvNC40LPRgNCw0YbQuNC4IHNlcnZlci50cyDQvdCwIGNyZWF0ZU5vZGVSZXF1ZXN0SGFuZGxlciBkZXYt0YHQtdGA0LLQtdGAINC90LDRh9C90ZHRgiDQuNGB0L/QvtC70L3Rj9GC0Ywgc2VydmVyLnRzLCDQuCBSRVNQT05TRS9SRVNQT05TRV9JTklUXG4gICAgICAgICAgICAgICAgICAgIC8vINGB0YLQsNC90LXRgiDQtNC+0YHRgtGD0L/QtdC9INCyIG5nIHNlcnZlIOKAlCDRgtC+0LPQtNCwINGN0YLRgyDQstC10YLQutGDINGBIHRocm93RXJyb3IoNDA0KSDQvNC+0LbQvdC+INGD0LTQsNC70LjRgtGMLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgSHR0cEVycm9yUmVzcG9uc2UoeyBzdGF0dXM6IDQwNCB9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g0JHRgNCw0YPQt9C10YA6INC/0L7RgtC+0Log0LTQsNC90L3Ri9GFINC60LDRgtC10LPQvtGA0LjQuCAoU0NfQ0FURUdPUllfSU5GTykg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjyDQvtGI0LjQsdC60L7QuSDQv9GA0LggNDA0INC4INC90LUg0LLQvtC30L7QsdC90L7QstC70Y/QtdGC0YHRj1xuICAgICAgICAgICAgICAgIC8vINC/0YDQuCDQvdCw0LLQuNCz0LDRhtC40Lgg0LIg0YDQsNC80LrQsNGFINGC0L7Qs9C+INC20LUg0LzQsNGA0YjRgNGD0YLQsCwg0L/QvtGN0YLQvtC80YMg0YDQtdC00LjRgNC10LrRgiDQstGL0L/QvtC70L3Rj9C10YLRgdGPINC/0L7Qu9C90L7QuSDQv9C10YDQtdC30LDQs9GA0YPQt9C60L7QuSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9uLnJlcGxhY2Ug0L3QtSDQtNC+0LHQsNCy0LvRj9C10YIg0LfQsNC/0LjRgdGMINCyINC40YHRgtC+0YDQuNGOLCDRh9GC0L7QsdGLINC60L3QvtC/0LrQsCDCq9Cd0LDQt9Cw0LTCuyDQvdC1INCy0L7Qt9Cy0YDQsNGJ0LDQu9CwINC90LAg0L3QtdC00L7RgdGC0YPQv9C90YPRjiDRgdGC0YDQsNC90LjRhtGDLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gQW5ndWxhciAyMSAo0LzQuNCz0YDQsNGG0LjRjyBTU1IpOiDRjdGC0YMg0YHRgtGA0L7QutGDINCw0L/Qs9GA0LXQudC0INCd0JUg0YHQvdC40LzQsNC10YIg4oCUINC/0YDQuNGH0LjQvdCwINCyINGA0LDQvdGC0LDQudC80LUg0L/RgNC40LvQvtC20LXQvdC40Y8gKNC80ZHRgNGC0LLRi9C5INC/0L7RgtC+0LpcbiAgICAgICAgICAgICAgICAvLyBTQ19DQVRFR09SWV9JTkZPINC/0YDQuCBTUEEt0L3QsNCy0LjQs9Cw0YbQuNC4KSwg0LAg0L3QtSDQsiBTU1IuINCS0LXRgNC90YPRgtGMIFNQQS3QvdCw0LLQuNCz0LDRhtC40Y4gKHJvdXRlci5uYXZpZ2F0ZUJ5VXJsKSDQvNC+0LbQvdC+INGC0L7Qu9GM0LrQvlxuICAgICAgICAgICAgICAgIC8vINGB0LTQtdC70LDQsiBTQ19DQVRFR09SWV9JTkZPINGD0YHRgtC+0LnRh9C40LLRi9C8INC6IDQwNCAo0LvQvtCy0LjRgtGMINC+0YjQuNCx0LrRgyDQstC90YPRgtGA0Lggc3dpdGNoTWFwKSDQu9C40LHQviDRg9C90LXRgdGPINGA0LXQtNC40YDQtdC60YIg0LIgZ3VhcmQgKyBSZWRpcmVjdENvbW1hbmQuXG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5yZXBsYWNlKHRhcmdldFVybCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1yZWRpcmVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jYXRhbG9nL3NlcnZpY2VzL3NjLWNhdGFsb2ctcmVkaXJlY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXdDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFeEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFIckM7UUFJSTs7V0FFRztRQUNjLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFM0Q7O1dBRUc7UUFDYyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDOztXQUVHO1FBQ2MsYUFBUSxHQUFHLE1BQU0s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LENBQUM7b0JBQ3BFLE9BQU8sS0FBSyxDQUFDO2dCQUNqQixDQUFDO2dCQUVELG1GQUFtRjtnQkFDbkYsK0ZBQStGO2dCQUMvRixFQUFFO2dCQUNGLDJHQUEyRztnQkFDM0csdUhBQXVIO2dCQUN2SCxnRkFBZ0Y7Z0JBQ2hGLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFFRCxxR0FBcUc7WUFDckcsdUdBQXVHO1lBQ3ZHLDhHQUE4RztZQUM5RyxFQUFFO1lBQ0YsMEdBQTBHO1lBQzFHLDZHQUE2RztZQUM3RywySEFBMkg7WUFDM0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTFDLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOytHQTlNUSx3QkFBd0I7bUhBQXhCLHdCQUF3QixjQUZyQixNQUFNOzs0RkFFVCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB0dWlJc1ByZXNlbnQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIEVNUFRZLCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY1JlZGlyZWN0U3RhdHVzRW51bSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy9yZWRpcmVjdC1zdGF0dXMtZW51bSc7XG5pbXBvcnQgeyBJU19TRVJWRVIsIFJFU1BPTlNFIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3Nzci5wcm92aWRlcnMnO1xuaW1wb3J0IHsgU0NfQ0FOT05JQ0FMX1JFRElSRUNUX0VOQUJMRUQgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtY2Fub25pY2FsLXJlZGlyZWN0LWVuYWJsZWQnO1xuaW1wb3J0IHsgU0NfSURfT1JfU0xVR19JTl9ST1VURSB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1pZC1vci1zbHVnLWluLXJvdXRlJztcbmltcG9ydCB7IFNjSVBhcmVudENhdGVnb3J5UmVkaXJlY3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktcGFyZW50LWNhdGVnb3J5LXJlZGlyZWN0JztcbmltcG9ydCB7IFNjQ2F0YWxvZ1NlcnZpY2UgfSBmcm9tICcuL3NjLWNhdGFsb2cuc2VydmljZSc7XG5cbi8qKlxuICog0KHQtdGA0LLQuNGBINGA0LXQtNC40YDQtdC60YLQvtCyINC60LDRgtCw0LvQvtCz0LA6INC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRjiDQv9GA0Lgg0L3QtdC00L7RgdGC0YPQv9C90L7RgdGC0LggKEhUVFAgNDA0KSDRgtC+0LLQsNGA0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjQuFxuICog0Lgg0L3QsCDQutCw0L3QvtC90LjRh9C10YHQutC40Lkg0LDQtNGA0LXRgSDRgtC+0LLQsNGA0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjQuCAo0YHQvC4ge0BsaW5rIHJlZGlyZWN0VG9DYW5vbmljYWxVcmx9KS5cbiAqXG4gKiDQoNC10LTQuNGA0LXQutGCINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRji5cbiAqXG4gKiDQl9Cw0L/RgNCw0YjQuNCy0LDQtdGCINGDINCx0Y3QutC10L3QtNCwINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4g0L3QtdC00L7RgdGC0YPQv9C90L7QuSDRgdGD0YnQvdC+0YHRgtC4INC4INCy0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCOlxuICogLSDQvdCwINGB0LXRgNCy0LXRgNC1IChTU1IpINC/0YDQuCDQtNC+0YHRgtGD0L/QvdC+0Lwge0BsaW5rIFJFU1BPTlNFfSDigJQg0LLRi9GB0YLQsNCy0LvRj9C10YIgSFRUUC3RgdGC0LDRgtGD0YEgMzAyINC4INC30LDQs9C+0LvQvtCy0L7QuiBgTG9jYXRpb25gINC00LvRjyDQutC+0YDRgNC10LrRgtC90L7Qs9C+INGA0LXQtNC40YDQtdC60YLQsCDQv9C+0LjRgdC60L7QstGL0YUg0LHQvtGC0L7QsjtcbiAqIC0g0L3QsCDRgdC10YDQstC10YDQtSDQsdC10Lcge0BsaW5rIFJFU1BPTlNFfSAo0L3QsNC/0YDQuNC80LXRgCwgZGV2LdGB0LXRgNCy0LXRgCBgbmcgc2VydmVgKSDigJQg0LfQsNCy0LXRgNGI0LDQtdGCINC/0L7RgtC+0Log0L7RiNC40LHQutC+0LkgNDA0LCDRh9GC0L7QsdGLINC+0YLQvtCx0YDQsNC30LjQu9Cw0YHRjCDRgdGC0YDQsNC90LjRhtCwINC+0YjQuNCx0LrQuDtcbiAqIC0g0LIg0LHRgNCw0YPQt9C10YDQtSDigJQg0LLRi9C/0L7Qu9C90Y/QtdGCINC/0L7Qu9C90YPRjiDQvdCw0LLQuNCz0LDRhtC40Y4g0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOLlxuICpcbiAqINCV0YHQu9C4INGA0L7QtNC40YLQtdC70YzRgdC60LDRjyDQutCw0YLQtdCz0L7RgNC40Y8g0L3QtSDQvdCw0LnQtNC10L3QsCwg0L/QvtGC0L7QuiDRgtCw0LrQttC1INC30LDQstC10YDRiNCw0LXRgtGB0Y8g0L7RiNC40LHQutC+0Lkge0BsaW5rIEh0dHBFcnJvclJlc3BvbnNlfSxcbiAqINGH0YLQvtCx0Ysg0LLRi9C30YvQstCw0Y7RidC40Lkg0LrQvtC0INC+0YLQvtCx0YDQsNC30LjQuyDRgdGC0YDQsNC90LjRhtGDINC+0YjQuNCx0LrQuC5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NDYXRhbG9nUmVkaXJlY3RTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutCw0YLQsNC70L7Qs9C+0LwuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nU2VydmljZSA9IGluamVjdChTY0NhdGFsb2dTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQvNCw0YDRiNGA0YPRgtC40LfQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsCDQuNC70Lggc2x1ZyDQsiDQvNCw0YDRiNGA0YPRgtCw0YUg0YLQvtCy0LDRgNC+0LIg0Lgg0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRPclNsdWcgPSBpbmplY3QoU0NfSURfT1JfU0xVR19JTl9ST1VURSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INCy0LrQu9GO0YfRkdC9INC/0L7RgdGC0L7Rj9C90L3Ri9C5INGA0LXQtNC40YDQtdC60YIg0L3QsCDQutCw0L3QvtC90LjRh9C10YHQutC40Lkg0LDQtNGA0LXRgSDRgtC+0LLQsNGA0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzQ2Fub25pY2FsUmVkaXJlY3RFbmFibGVkID0gaW5qZWN0KFNDX0NBTk9OSUNBTF9SRURJUkVDVF9FTkFCTEVEKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YLQtdC60YPRidC40Lkg0YHQutGA0LjQv9GCINC40YHQv9C+0LvQvdGP0LXRgtGB0Y8g0L3QsCDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzU2VydmVyID0gaW5qZWN0KElTX1NFUlZFUik7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L7QsSDQvtGC0LLQtdGC0LUg0L3QsCDQt9Cw0L/RgNC+0YEgKNC00L7RgdGC0YPQv9C90Ysg0YLQvtC70YzQutC+INC90LAg0YHQtdGA0LLQtdGA0LUg0L/RgNC4IFNTUikuXG4gICAgICpcbiAgICAgKiBBbmd1bGFyIDIxICjQvNC40LPRgNCw0YbQuNGPIFNTUik6IHtAbGluayBSRVNQT05TRX0g4oCUINC60LDRgdGC0L7QvNC90YvQuSBFeHByZXNzLdGC0L7QutC10L0sINC60L7RgtC+0YDRi9C5INC/0YDQvtCy0LDQudC00LjRgtGB0Y8g0LIgYHNlcnZlci50c2BcbiAgICAgKiDRh9C10YDQtdC3IENvbW1vbkVuZ2luZS4g0J3QsCB1cGdyYWRlLdCy0LXRgtC60LUgYHNlcnZlci50c2Ag0L7RgdGC0LDQu9GB0Y8g0L3QsCBDb21tb25FbmdpbmUsINC/0L7RjdGC0L7QvNGDINC/0YDQuCDRgdC70LjRj9C90LjQuCDQt9C00LXRgdGMXG4gICAgICog0L3QuNGH0LXQs9C+INC80LXQvdGP0YLRjCDQvdC1INC90YPQttC90L4uINCV0YHQu9C4IGBzZXJ2ZXIudHNgINC80LjQs9GA0LjRgNGD0Y7RgiDQvdCwIGBBbmd1bGFyTm9kZUFwcEVuZ2luZWAgKyBgY3JlYXRlTm9kZVJlcXVlc3RIYW5kbGVyYCxcbiAgICAgKiDQt9Cw0LzQtdC90LjRgtC1IHtAbGluayBSRVNQT05TRX0g0L3QsCDQvdCw0YLQuNCy0L3Ri9C5IGBSRVNQT05TRV9JTklUYCAoYEluamVjdGlvblRva2VuPFJlc3BvbnNlSW5pdCB8IG51bGw+YCDQuNC3IGBAYW5ndWxhci9jb3JlYCk7XG4gICAgICog0YHQvC4g0YHQtdGA0LLQtdGA0L3Ri9C1INCy0LXRgtC60Lgg0LIge0BsaW5rIHJlZGlyZWN0VG9QYXJlbnRDYXRlZ29yeSR9INC4IHtAbGluayByZWRpcmVjdFRvQ2Fub25pY2FsVXJsfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3BvbnNlID0gaW5qZWN0KFJFU1BPTlNFLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JTQvtC60YPQvNC10L3RgiDRgtC10LrRg9GJ0LXQuSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0YDQtdC30YPQu9GM0YLQsNGCINGB0YLRgNCw0LbQsCDQvNCw0YDRiNGA0YPRgtCwINC00LvRjyDQv9C10YDQtdGF0L7QtNCwINC90LAg0LrQsNC90L7QvdC40YfQtdGB0LrQuNC5INCw0LTRgNC10YEg0YLQvtCy0LDRgNCwINC40LvQuCDQutCw0YLQtdCz0L7RgNC40LhcbiAgICAgKiAo0LDQtNGA0LXRgSDRgdC+IHNsdWcg0LvQuNCx0L4g0YEg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQvtC8IOKAlCDQsiDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4INC+0YIg0L3QsNGB0YLRgNC+0LXQuiDQvtC60YDRg9C20LXQvdC40Y8pLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbW1hbmRzINCh0LXQs9C80LXQvdGC0Ysg0LrQsNC90L7QvdC40YfQtdGB0LrQvtCz0L4g0LzQsNGA0YjRgNGD0YLQsC5cbiAgICAgKiBAcGFyYW0gc3RhdHVzINCh0YLQsNGC0YPRgSDRgNC10LTQuNGA0LXQutGC0LA6INCy0LjQtCDQsNC00YDQtdGB0LAg0LfQsNC00LDRkdGC0YHRjyDQvdCw0YHRgtGA0L7QudC60LDQvNC4INC+0LrRgNGD0LbQtdC90LjRjyDQuCDQvNC+0LbQtdGCINCx0YvRgtGMINC40LfQvNC10L3RkdC9LCDQv9C+0Y3RgtC+0LzRgyDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQstGA0LXQvNC10L3QvdGL0LkuXG4gICAgICogQHJldHVybnMg0JTQtdGA0LXQstC+INC60LDQvdC+0L3QuNGH0LXRgdC60L7Qs9C+INC80LDRgNGI0YDRg9GC0LAg0LTQu9GPINC90LDQstC40LPQsNGG0LjQuCDQu9C40LHQviBgZmFsc2VgLCDQtdGB0LvQuCDRgNC10LTQuNGA0LXQutGCINCy0YvQv9C+0LvQvdC10L0g0L7RgtCy0LXRgtC+0Lwg0YHQtdGA0LLQtdGA0LAuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvZnVuY3Rpb24tcmV0dXJuLXR5cGVcbiAgICBwdWJsaWMgcmVkaXJlY3RUb0Nhbm9uaWNhbFVybChjb21tYW5kczogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPiwgc3RhdHVzOiBTY1JlZGlyZWN0U3RhdHVzRW51bSA9IFNjUmVkaXJlY3RTdGF0dXNFbnVtLlRlbXBvcmFyeSk6IGJvb2xlYW4gfCBVcmxUcmVlIHtcbiAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoY29tbWFuZHMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ2Fub25pY2FsUmVkaXJlY3RFbmFibGVkICYmIHRoaXMuaXNTZXJ2ZXIgJiYgdGhpcy5zZXRTZXJ2ZXJSZWRpcmVjdCh0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodXJsVHJlZSksIHN0YXR1cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmxUcmVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvRgdGC0LDQstC70Y/QtdGCINGA0LXQtNC40YDQtdC60YIg0LIg0L7RgtCy0LXRgtC1INGB0LXRgNCy0LXRgNCwIChTU1IpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldFVybCDQkNC00YDQtdGBLCDQvdCwINC60L7RgtC+0YDRi9C5INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0YDQtdC00LjRgNC10LrRgi5cbiAgICAgKiBAcGFyYW0gc3RhdHVzINCh0YLQsNGC0YPRgSDRgNC10LTQuNGA0LXQutGC0LAuXG4gICAgICogQHJldHVybnMg0J/RgNC40LfQvdCw0LosINGH0YLQviDRgNC10LTQuNGA0LXQutGCINCy0YvRgdGC0LDQstC70LXQvTsgYGZhbHNlYCwg0LXRgdC70Lgg0LTQsNC90L3Ri9C1INC+0LEg0L7RgtCy0LXRgtC1INC90LXQtNC+0YHRgtGD0L/QvdGLICjQvdCw0L/RgNC40LzQtdGALCBkZXYt0YHQtdGA0LLQtdGAIGBuZyBzZXJ2ZWApLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0U2VydmVyUmVkaXJlY3QodGFyZ2V0VXJsOiBzdHJpbmcsIHN0YXR1czogU2NSZWRpcmVjdFN0YXR1c0VudW0pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbmd1bGFyIDIxICjQvNC40LPRgNCw0YbQuNGPIFNTUik6INC/0YDQuCDQv9C10YDQtdGF0L7QtNC1IHNlcnZlci50cyDQvdCwIEFuZ3VsYXJOb2RlQXBwRW5naW5lINGB0YLQsNGC0YPRgSDQuCDQt9Cw0LPQvtC70L7QstC+0Log0LLRi9GB0YLQsNCy0LvRj9GO0YLRgdGPXG4gICAgICAgIC8vINGH0LXRgNC10Lcg0L3QsNGC0LjQstC90YvQuSBSRVNQT05TRV9JTklUINCy0LzQtdGB0YLQviBFeHByZXNzLdC80LXRgtC+0LTQvtCyIHJlc3BvbnNlLnNldEhlYWRlci9yZXNwb25zZS5zdGF0dXMuXG4gICAgICAgIHRoaXMucmVzcG9uc2Uuc2V0SGVhZGVyKCdMb2NhdGlvbicsIHRhcmdldFVybCk7XG4gICAgICAgIHRoaXMucmVzcG9uc2Uuc3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINGA0LXQtNC40YDQtdC60YIg0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOINC90LXQtNC+0YHRgtGD0L/QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWRPclNsdWcg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4IHNsdWcg0L3QtdC00L7RgdGC0YPQv9C90L7QuSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICogQHJldHVybnMg0J/QvtGC0L7Quiwg0LfQsNCy0LXRgNGI0LDRjtGJ0LjQudGB0Y8g0L/QvtGB0LvQtSDRgNC10LTQuNGA0LXQutGC0LAuINCt0LzQuNGC0LjRgiDQvtGI0LjQsdC60YMge0BsaW5rIEh0dHBFcnJvclJlc3BvbnNlfSwg0LXRgdC70Lgg0YDQvtC00LjRgtC10LvRjNGB0LrQsNGPINC60LDRgtC10LPQvtGA0LjRjyDQvdC1INC90LDQudC00LXQvdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWRpcmVjdFRvQ2F0ZWdvcnlQYXJlbnQkKGNhdGVnb3J5SWRPclNsdWc6IG51bWJlciB8IHN0cmluZyk6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RUb1BhcmVudENhdGVnb3J5JCh0aGlzLmNhdGFsb2dTZXJ2aWNlLmdldENhdGVnb3J5UGFyZW50Q2F0ZWdvcnkkKGNhdGVnb3J5SWRPclNsdWcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0L/QvtC70L3Rj9C10YIg0YDQtdC00LjRgNC10LrRgiDQvdCwINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4g0L3QtdC00L7RgdGC0YPQv9C90L7Qs9C+INGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0SWRPclNsdWcg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4IHNsdWcg0L3QtdC00L7RgdGC0YPQv9C90L7Qs9C+INGC0L7QstCw0YDQsC5cbiAgICAgKiBAcmV0dXJucyDQn9C+0YLQvtC6LCDQt9Cw0LLQtdGA0YjQsNGO0YnQuNC50YHRjyDQv9C+0YHQu9C1INGA0LXQtNC40YDQtdC60YLQsC4g0K3QvNC40YLQuNGCINC+0YjQuNCx0LrRgyB7QGxpbmsgSHR0cEVycm9yUmVzcG9uc2V9LCDQtdGB0LvQuCDRgNC+0LTQuNGC0LXQu9GM0YHQutCw0Y8g0LrQsNGC0LXQs9C+0YDQuNGPINC90LUg0L3QsNC50LTQtdC90LAuXG4gICAgICovXG4gICAgcHVibGljIHJlZGlyZWN0VG9Qcm9kdWN0UGFyZW50JChwcm9kdWN0SWRPclNsdWc6IG51bWJlciB8IHN0cmluZyk6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RUb1BhcmVudENhdGVnb3J5JCh0aGlzLmNhdGFsb2dTZXJ2aWNlLmdldFByb2R1Y3RQYXJlbnRDYXRlZ29yeSQocHJvZHVjdElkT3JTbHVnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7Qv9C10YDQsNGC0L7RgCDRg9GB0YLQvtC50YfQuNCy0L7QuSDQvtCx0YDQsNCx0L7RgtC60Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QuSAoSFRUUC3QvtGI0LjQsdC60LApINC60LDRgtC10LPQvtGA0LjQuCDQsiDQv9C+0YLQvtC60LUg0LTQsNC90L3Ri9GFOiDQv9GA0LggNDA0INCy0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCXG4gICAgICog0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOLCDQv9GA0Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QvCDRgNC+0LTQuNGC0LXQu9C1INC40LvQuCDQuNC90L7QuSDQvtGI0LjQsdC60LUg0YHQvtC+0LHRidCw0LXRgiDQutC+0LQg0YfQtdGA0LXQtyB7QGxpbmsgb25FcnJvckNvZGV9LlxuICAgICAqINCe0YjQuNCx0LrRgyDQvdC1INC/0YDQvtCx0YDQsNGB0YvQstCw0LXRgiAo0LfQsNCy0LXRgNGI0LDQtdGCINC/0L7RgtC+0Loge0BsaW5rIEVNUFRZfSksINC/0L7RjdGC0L7QvNGDINC/0L7RgtC+0Log0LTQsNC90L3Ri9GFINC90LUg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjyDQvtGI0LjQsdC60L7QuS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINC90LXQtNC+0YHRgtGD0L/QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqIEBwYXJhbSBvbkVycm9yQ29kZSDQmtC+0LvQsdGN0Log0YPRgdGC0LDQvdC+0LLQutC4INC60L7QtNCwINC+0YjQuNCx0LrQuCAo0L3QsNC/0YDQuNC80LXRgCwg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0YHRgtGA0LDQvdC40YbRiyDQvtGI0LjQsdC60LgpLlxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVVbmF2YWlsYWJsZUNhdGVnb3J5JDxUPihjYXRlZ29yeUlkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcsIG9uRXJyb3JDb2RlOiAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVVbmF2YWlsYWJsZSQoKCkgPT4gdGhpcy5yZWRpcmVjdFRvQ2F0ZWdvcnlQYXJlbnQkKGNhdGVnb3J5SWRPclNsdWcpLCBvbkVycm9yQ29kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7Qv9C10YDQsNGC0L7RgCDRg9GB0YLQvtC50YfQuNCy0L7QuSDQvtCx0YDQsNCx0L7RgtC60Lgg0L3QtdC00L7RgdGC0YPQv9C90L7Qs9C+IChIVFRQLdC+0YjQuNCx0LrQsCkg0YLQvtCy0LDRgNCwINCyINC/0L7RgtC+0LrQtSDQtNCw0L3QvdGL0YU6INC/0YDQuCA0MDQg0LLRi9C/0L7Qu9C90Y/QtdGCINGA0LXQtNC40YDQtdC60YJcbiAgICAgKiDQvdCwINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4g0YLQvtCy0LDRgNCwLCDQv9GA0Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QvCDRgNC+0LTQuNGC0LXQu9C1INC40LvQuCDQuNC90L7QuSDQvtGI0LjQsdC60LUg0YHQvtC+0LHRidCw0LXRgiDQutC+0LQg0YfQtdGA0LXQtyB7QGxpbmsgb25FcnJvckNvZGV9LlxuICAgICAqINCe0YjQuNCx0LrRgyDQvdC1INC/0YDQvtCx0YDQsNGB0YvQstCw0LXRgiAo0LfQsNCy0LXRgNGI0LDQtdGCINC/0L7RgtC+0Loge0BsaW5rIEVNUFRZfSksINC/0L7RjdGC0L7QvNGDINC/0L7RgtC+0Log0LTQsNC90L3Ri9GFINC90LUg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjyDQvtGI0LjQsdC60L7QuS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0SWRPclNsdWcg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4IHNsdWcg0L3QtdC00L7RgdGC0YPQv9C90L7Qs9C+INGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gb25FcnJvckNvZGUg0JrQvtC70LHRjdC6INGD0YHRgtCw0L3QvtCy0LrQuCDQutC+0LTQsCDQvtGI0LjQsdC60LggKNC90LDQv9GA0LjQvNC10YAsINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINGB0YLRgNCw0L3QuNGG0Ysg0L7RiNC40LHQutC4KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlVW5hdmFpbGFibGVQcm9kdWN0JDxUPihwcm9kdWN0SWRPclNsdWc6IG51bWJlciB8IHN0cmluZywgb25FcnJvckNvZGU6IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVVuYXZhaWxhYmxlJCgoKSA9PiB0aGlzLnJlZGlyZWN0VG9Qcm9kdWN0UGFyZW50JChwcm9kdWN0SWRPclNsdWcpLCBvbkVycm9yQ29kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JHQsNC30L7QstGL0Lkg0L7Qv9C10YDQsNGC0L7RgCDRg9GB0YLQvtC50YfQuNCy0L7QuSDQvtCx0YDQsNCx0L7RgtC60Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QuSDRgdGD0YnQvdC+0YHRgtC4OiDQv9GA0LggNDA0IOKAlCDRgNC10LTQuNGA0LXQutGCINC90LAg0YDQvtC00LjRgtC10LvRjyAo0YfQtdGA0LXQtyB7QGxpbmsgcmVkaXJlY3RUb1BhcmVudCR9KSxcbiAgICAgKiDQv9GA0Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QvCDRgNC+0LTQuNGC0LXQu9C1INC40LvQuCDQuNC90L7QvCB7QGxpbmsgSHR0cEVycm9yUmVzcG9uc2V9IOKAlCB7QGxpbmsgb25FcnJvckNvZGV9INGBINC60L7QtNC+0Lwg0L7RgtCy0LXRgtCwOyDQstGB0LXQs9C00LAge0BsaW5rIEVNUFRZfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWRpcmVjdFRvUGFyZW50JCDQpNCw0LHRgNC40LrQsCDQv9C+0YLQvtC60LAg0YDQtdC00LjRgNC10LrRgtCwINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRji5cbiAgICAgKiBAcGFyYW0gb25FcnJvckNvZGUg0JrQvtC70LHRjdC6INGD0YHRgtCw0L3QvtCy0LrQuCDQutC+0LTQsCDQvtGI0LjQsdC60LguXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBwcml2YXRlIGhhbmRsZVVuYXZhaWxhYmxlJDxUPihyZWRpcmVjdFRvUGFyZW50JDogKCkgPT4gT2JzZXJ2YWJsZTxuZXZlcj4sIG9uRXJyb3JDb2RlOiAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgICAgICByZXR1cm4gKHNvdXJjZSQpID0+XG4gICAgICAgICAgICBzb3VyY2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWRpcmVjdFRvUGFyZW50JCgpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigocmVkaXJlY3RFcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3RFcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yQ29kZShyZWRpcmVjdEVycm9yLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvckNvZGUoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0L/QvtC70L3Rj9C10YIg0YDQtdC00LjRgNC10LrRgiDQvdCwINC/0L7Qu9GD0YfQtdC90L3Rg9GOINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50Q2F0ZWdvcnkkINCf0L7RgtC+0Log0YEg0LTQsNC90L3Ri9C80Lgg0YDQvtC00LjRgtC10LvRjNGB0LrQvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKiBAcmV0dXJucyDQn9C+0YLQvtC6LCDQt9Cw0LLQtdGA0YjQsNGO0YnQuNC50YHRjyDQv9C+0YHQu9C1INGA0LXQtNC40YDQtdC60YLQsC4g0K3QvNC40YLQuNGCINC+0YjQuNCx0LrRgyB7QGxpbmsgSHR0cEVycm9yUmVzcG9uc2V9INGBINC60L7QtNC+0LwgNDA0LCDQtdGB0LvQuCDRgNC+0LTQuNGC0LXQu9GM0YHQutCw0Y8g0LrQsNGC0LXQs9C+0YDQuNGPINC90LUg0L3QsNC50LTQtdC90LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWRpcmVjdFRvUGFyZW50Q2F0ZWdvcnkkKHBhcmVudENhdGVnb3J5JDogT2JzZXJ2YWJsZTxTY0lQYXJlbnRDYXRlZ29yeVJlZGlyZWN0Pik6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAgICAgcmV0dXJuIHBhcmVudENhdGVnb3J5JC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChwYXJlbnRDYXRlZ29yeSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHBhcmVudENhdGVnb3J5W3RoaXMuaWRPclNsdWddO1xuXG4gICAgICAgICAgICAgICAgLy8g0KDQvtC00LjRgtC10LvRjNGB0LrQsNGPINC60LDRgtC10LPQvtGA0LjRjyDQvdC1INC90LDQudC00LXQvdCwIOKAlCDQvtGC0L7QsdGA0LDQttCw0LXQvCDRgdGC0YDQsNC90LjRhtGDINC+0YjQuNCx0LrQuC5cbiAgICAgICAgICAgICAgICBpZiAoIXR1aUlzUHJlc2VudCh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7IHN0YXR1czogNDA0IH0pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy9jYXRhbG9nJywgdGFyZ2V0XSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRVcmwgPSB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodXJsVHJlZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyDQodC60YDRi9GC0YvQtSDQutCw0YLQtdCz0L7RgNC40Y8g0LjQu9C4INGC0L7QstCw0YAg0LzQvtCz0YPRgiDRgdC90L7QstCwINGB0YLQsNGC0Ywg0LTQvtGB0YLRg9C/0L3Ri9C80LgsINC/0L7RjdGC0L7QvNGDINGA0LXQtNC40YDQtdC60YIg0L3QsCDRgNC+0LTQuNGC0LXQu9GPINCy0YDQtdC80LXQvdC90YvQuS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0U2VydmVyUmVkaXJlY3QodGFyZ2V0VXJsLCBTY1JlZGlyZWN0U3RhdHVzRW51bS5UZW1wb3JhcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBTU1Ig0LHQtdC3IFJFU1BPTlNFICjQvdCw0L/RgNC40LzQtdGALCBkZXYt0YHQtdGA0LLQtdGAIG5nIHNlcnZlKTog0YHQtdGA0LLQtdGA0L3Ri9C5INGA0LXQtNC40YDQtdC60YIg0L3QtdCy0L7Qt9C80L7QttC10L0sXG4gICAgICAgICAgICAgICAgICAgIC8vINC/0L7RjdGC0L7QvNGDINC+0YLQvtCx0YDQsNC20LDQtdC8INGB0YLRgNCw0L3QuNGG0YMg0L7RiNC40LHQutC4LCDQutCw0Log0LTQviDQstC90LXQtNGA0LXQvdC40Y8g0YDQtdC00LjRgNC10LrRgtCwLCDQstC80LXRgdGC0L4g0LHQtdGB0LrQvtC90LXRh9C90L7Qs9C+INC70L7QsNC00LXRgNCwLlxuICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAvLyBBbmd1bGFyIDIxICjQvNC40LPRgNCw0YbQuNGPIFNTUik6INGN0YLQvtGCINGE0L7Qu9Cx0Y3QuiDQvdGD0LbQtdC9LCDQv9C+0LrQsCBuZyBzZXJ2ZSDQvdC1INC40YHQv9C+0LvQvdGP0LXRgiBzZXJ2ZXIudHMgKNC+0L0g0L3QsCBDb21tb25FbmdpbmUpLlxuICAgICAgICAgICAgICAgICAgICAvLyDQn9C+0YHQu9C1INC80LjQs9GA0LDRhtC40Lggc2VydmVyLnRzINC90LAgY3JlYXRlTm9kZVJlcXVlc3RIYW5kbGVyIGRldi3RgdC10YDQstC10YAg0L3QsNGH0L3RkdGCINC40YHQv9C+0LvQvdGP0YLRjCBzZXJ2ZXIudHMsINC4IFJFU1BPTlNFL1JFU1BPTlNFX0lOSVRcbiAgICAgICAgICAgICAgICAgICAgLy8g0YHRgtCw0L3QtdGCINC00L7RgdGC0YPQv9C10L0g0LIgbmcgc2VydmUg4oCUINGC0L7Qs9C00LAg0Y3RgtGDINCy0LXRgtC60YMg0YEgdGhyb3dFcnJvcig0MDQpINC80L7QttC90L4g0YPQtNCw0LvQuNGC0YwuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7IHN0YXR1czogNDA0IH0pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyDQkdGA0LDRg9C30LXRgDog0L/QvtGC0L7QuiDQtNCw0L3QvdGL0YUg0LrQsNGC0LXQs9C+0YDQuNC4IChTQ19DQVRFR09SWV9JTkZPKSDQt9Cw0LLQtdGA0YjQsNC10YLRgdGPINC+0YjQuNCx0LrQvtC5INC/0YDQuCA0MDQg0Lgg0L3QtSDQstC+0LfQvtCx0L3QvtCy0LvRj9C10YLRgdGPXG4gICAgICAgICAgICAgICAgLy8g0L/RgNC4INC90LDQstC40LPQsNGG0LjQuCDQsiDRgNCw0LzQutCw0YUg0YLQvtCz0L4g0LbQtSDQvNCw0YDRiNGA0YPRgtCwLCDQv9C+0Y3RgtC+0LzRgyDRgNC10LTQuNGA0LXQutGCINCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L/QvtC70L3QvtC5INC/0LXRgNC10LfQsNCz0YDRg9C30LrQvtC5INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICAgICAgICAgICAgLy8gbG9jYXRpb24ucmVwbGFjZSDQvdC1INC00L7QsdCw0LLQu9GP0LXRgiDQt9Cw0L/QuNGB0Ywg0LIg0LjRgdGC0L7RgNC40Y4sINGH0YLQvtCx0Ysg0LrQvdC+0L/QutCwIMKr0J3QsNC30LDQtMK7INC90LUg0LLQvtC30LLRgNCw0YnQsNC70LAg0L3QsCDQvdC10LTQvtGB0YLRg9C/0L3Rg9GOINGB0YLRgNCw0L3QuNGG0YMuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBBbmd1bGFyIDIxICjQvNC40LPRgNCw0YbQuNGPIFNTUik6INGN0YLRgyDRgdGC0YDQvtC60YMg0LDQv9Cz0YDQtdC50LQg0J3QlSDRgdC90LjQvNCw0LXRgiDigJQg0L/RgNC40YfQuNC90LAg0LIg0YDQsNC90YLQsNC50LzQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyAo0LzRkdGA0YLQstGL0Lkg0L/QvtGC0L7QulxuICAgICAgICAgICAgICAgIC8vIFNDX0NBVEVHT1JZX0lORk8g0L/RgNC4IFNQQS3QvdCw0LLQuNCz0LDRhtC40LgpLCDQsCDQvdC1INCyIFNTUi4g0JLQtdGA0L3Rg9GC0YwgU1BBLdC90LDQstC40LPQsNGG0LjRjiAocm91dGVyLm5hdmlnYXRlQnlVcmwpINC80L7QttC90L4g0YLQvtC70YzQutC+XG4gICAgICAgICAgICAgICAgLy8g0YHQtNC10LvQsNCyIFNDX0NBVEVHT1JZX0lORk8g0YPRgdGC0L7QudGH0LjQstGL0Lwg0LogNDA0ICjQu9C+0LLQuNGC0Ywg0L7RiNC40LHQutGDINCy0L3Rg9GC0YDQuCBzd2l0Y2hNYXApINC70LjQsdC+INGD0L3QtdGB0Y8g0YDQtdC00LjRgNC10LrRgiDQsiBndWFyZCArIFJlZGlyZWN0Q29tbWFuZC5cbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50LmxvY2F0aW9uLnJlcGxhY2UodGFyZ2V0VXJsKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -27,6 +27,7 @@ export * from './reclamation';
27
27
  export * from './references';
28
28
  export * from './search';
29
29
  export * from './seo';
30
+ export * from './ssr-cache';
30
31
  export * from './suggestion';
31
32
  export * from './tokens';
32
33
  export * from './ui';
@@ -37,4 +38,4 @@ export * from './vacancies';
37
38
  export * from './vCard';
38
39
  export * from './verification';
39
40
  export * from './warehouse';
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLE1BQU0sQ0FBQztBQUNyQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aCc7XG5leHBvcnQgKiBmcm9tICcuL2Jhbm5lcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJ0JztcbmV4cG9ydCAqIGZyb20gJy4vY2F0YWxvZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZ3VyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRhY3RzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhZ2VudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWxpdmVyeS1hZGRyZXNzJztcbmV4cG9ydCAqIGZyb20gJy4vZnJlcXVlbnRseS1hc2tlZC1xdWVzdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlcyc7XG5leHBvcnQgKiBmcm9tICcuL2d1YXJkcyc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwSW50ZXJjZXB0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9jYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vbmV3cyc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi91dG0nO1xuZXhwb3J0ICogZnJvbSAnLi9vcmRlcic7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2luYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXN0aW9ubmFpcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWNsYW1hdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3JlZmVyZW5jZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9zZW8nO1xuZXhwb3J0ICogZnJvbSAnLi9zdWdnZXN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vdWknO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1tZXRyaWthJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvcGhvbmUtZm90bWF0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdmFjYW5jaWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdkNhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi93YXJlaG91c2UnO1xuIl19
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLE1BQU0sQ0FBQztBQUNyQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aCc7XG5leHBvcnQgKiBmcm9tICcuL2Jhbm5lcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJ0JztcbmV4cG9ydCAqIGZyb20gJy4vY2F0YWxvZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZ3VyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRhY3RzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhZ2VudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWxpdmVyeS1hZGRyZXNzJztcbmV4cG9ydCAqIGZyb20gJy4vZnJlcXVlbnRseS1hc2tlZC1xdWVzdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlcyc7XG5leHBvcnQgKiBmcm9tICcuL2d1YXJkcyc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwSW50ZXJjZXB0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9jYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vbmV3cyc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi91dG0nO1xuZXhwb3J0ICogZnJvbSAnLi9vcmRlcic7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2luYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXN0aW9ubmFpcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWNsYW1hdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3JlZmVyZW5jZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9zZW8nO1xuZXhwb3J0ICogZnJvbSAnLi9zc3ItY2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWdnZXN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vdWknO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1tZXRyaWthJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvcGhvbmUtZm90bWF0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdmFjYW5jaWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdkNhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi93YXJlaG91c2UnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './sc-ssr-response-cache';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9jbGFzc2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjLXNzci1yZXNwb25zZS1jYWNoZSc7XG4iXX0=
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Кэш ответов API, один на процесс: переживает пересоздание инжектора между SSR-рендерами.
3
+ * Одинаковые одновременные запросы склеиваются, при переполнении вытесняется самая давняя запись.
4
+ */
5
+ export class ScSsrResponseCache {
6
+ /**
7
+ * Инициализирует экземпляр класса {@link ScSsrResponseCache}.
8
+ *
9
+ * @param maxEntries Максимальное количество записей в кэше.
10
+ */
11
+ constructor(maxEntries = 100) {
12
+ /**
13
+ * Закэшированные ответы по ключу запроса.
14
+ */
15
+ this.entries = new Map();
16
+ /**
17
+ * Выполняемые запросы по ключу запроса.
18
+ */
19
+ this.pending = new Map();
20
+ /**
21
+ * Количество запросов, отданных без обращения к API.
22
+ */
23
+ this.hits = 0;
24
+ /**
25
+ * Количество запросов, выполненных к API.
26
+ */
27
+ this.misses = 0;
28
+ this.maxEntries = Number.isFinite(maxEntries) ? Math.max(1, maxEntries) : 100;
29
+ }
30
+ /**
31
+ * Возвращает ответ из кэша, при отсутствии или устаревании загружает и кэширует. Ошибка загрузки не кэшируется.
32
+ *
33
+ * @param key Ключ запроса.
34
+ * @param lifeTime Время жизни ответа (мс).
35
+ * @param loader Функция загрузки ответа.
36
+ */
37
+ getOrLoad(key, lifeTime, loader) {
38
+ const cached = this.get(key);
39
+ if (cached) {
40
+ this.hits += 1;
41
+ return Promise.resolve(cached.response);
42
+ }
43
+ const pending = this.pending.get(key);
44
+ if (pending) {
45
+ this.hits += 1;
46
+ return pending;
47
+ }
48
+ this.misses += 1;
49
+ const loading = loader()
50
+ .then((response) => {
51
+ this.set(key, { response, expiresAt: Date.now() + lifeTime });
52
+ return response;
53
+ })
54
+ .finally(() => {
55
+ this.pending.delete(key);
56
+ });
57
+ this.pending.set(key, loading);
58
+ return loading;
59
+ }
60
+ /**
61
+ * Возвращает статистику работы кэша.
62
+ */
63
+ getStats() {
64
+ return { size: this.entries.size, hits: this.hits, misses: this.misses };
65
+ }
66
+ /**
67
+ * Возвращает актуальную запись или `null`.
68
+ *
69
+ * @param key Ключ запроса.
70
+ */
71
+ get(key) {
72
+ const entry = this.entries.get(key);
73
+ if (!entry) {
74
+ return null;
75
+ }
76
+ if (entry.expiresAt <= Date.now()) {
77
+ this.entries.delete(key);
78
+ return null;
79
+ }
80
+ // Перестановка в конец помечает запись как недавно использованную.
81
+ this.entries.delete(key);
82
+ this.entries.set(key, entry);
83
+ return entry;
84
+ }
85
+ /**
86
+ * Сохраняет запись, при переполнении вытесняя самую давнюю.
87
+ *
88
+ * @param key Ключ запроса.
89
+ * @param entry Запись кэша.
90
+ */
91
+ set(key, entry) {
92
+ this.entries.delete(key);
93
+ if (this.entries.size >= this.maxEntries) {
94
+ const [oldestKey] = this.entries.keys();
95
+ this.entries.delete(oldestKey);
96
+ }
97
+ this.entries.set(key, entry);
98
+ }
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc3NyLXJlc3BvbnNlLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zc3ItY2FjaGUvY2xhc3Nlcy9zYy1zc3ItcmVzcG9uc2UtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQTBCM0I7Ozs7T0FJRztJQUNILFlBQW1CLGFBQXFCLEdBQUc7UUF6QjNDOztXQUVHO1FBQ2MsWUFBTyxHQUFzQyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUV0Rzs7V0FFRztRQUNjLFlBQU8sR0FBZ0QsSUFBSSxHQUFHLEVBQTBDLENBQUM7UUFFMUg7O1dBRUc7UUFDSyxTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBRXpCOztXQUVHO1FBQ0ssV0FBTSxHQUFXLENBQUMsQ0FBQztRQVF2QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDbEYsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxHQUFXLEVBQUUsUUFBZ0IsRUFBRSxNQUE0QztRQUN4RixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVmLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVmLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVqQixNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUU7YUFDbkIsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFOUQsT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQyxDQUFDO2FBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0UsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxHQUFHLENBQUMsR0FBVztRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXpCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxtRUFBbUU7UUFDbkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTdCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBMkI7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IFNjSVNzclJlc3BvbnNlQ2FjaGVTdGF0cyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2MtaS1zc3ItcmVzcG9uc2UtY2FjaGUtc3RhdHMnO1xuaW1wb3J0IHsgU2NJU3NyQ2FjaGVkUmVzcG9uc2UgfSBmcm9tICcuLi9pbnRlcm5hbC9zYy1pLXNzci1jYWNoZWQtcmVzcG9uc2UnO1xuXG4vKipcbiAqINCa0Y3RiCDQvtGC0LLQtdGC0L7QsiBBUEksINC+0LTQuNC9INC90LAg0L/RgNC+0YbQtdGB0YE6INC/0LXRgNC10LbQuNCy0LDQtdGCINC/0LXRgNC10YHQvtC30LTQsNC90LjQtSDQuNC90LbQtdC60YLQvtGA0LAg0LzQtdC20LTRgyBTU1It0YDQtdC90LTQtdGA0LDQvNC4LlxuICog0J7QtNC40L3QsNC60L7QstGL0LUg0L7QtNC90L7QstGA0LXQvNC10L3QvdGL0LUg0LfQsNC/0YDQvtGB0Ysg0YHQutC70LXQuNCy0LDRjtGC0YHRjywg0L/RgNC4INC/0LXRgNC10L/QvtC70L3QtdC90LjQuCDQstGL0YLQtdGB0L3Rj9C10YLRgdGPINGB0LDQvNCw0Y8g0LTQsNCy0L3Rj9GPINC30LDQv9C40YHRjC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjU3NyUmVzcG9uc2VDYWNoZSB7XG4gICAgLyoqXG4gICAgICog0JzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INC30LDQv9C40YHQtdC5INCyINC60Y3RiNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4RW50cmllczogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0JfQsNC60Y3RiNC40YDQvtCy0LDQvdC90YvQtSDQvtGC0LLQtdGC0Ysg0L/QviDQutC70Y7Rh9GDINC30LDQv9GA0L7RgdCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogTWFwPHN0cmluZywgU2NJU3NyQ2FjaGVkUmVzcG9uc2U+ID0gbmV3IE1hcDxzdHJpbmcsIFNjSVNzckNhY2hlZFJlc3BvbnNlPigpO1xuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdC80YvQtSDQt9Cw0L/RgNC+0YHRiyDQv9C+INC60LvRjtGH0YMg0LfQsNC/0YDQvtGB0LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nOiBNYXA8c3RyaW5nLCBQcm9taXNlPEh0dHBSZXNwb25zZTx1bmtub3duPj4+ID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8SHR0cFJlc3BvbnNlPHVua25vd24+Pj4oKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7Qu9C40YfQtdGB0YLQstC+INC30LDQv9GA0L7RgdC+0LIsINC+0YLQtNCw0L3QvdGL0YUg0LHQtdC3INC+0LHRgNCw0YnQtdC90LjRjyDQuiBBUEkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBoaXRzOiBudW1iZXIgPSAwO1xuXG4gICAgLyoqXG4gICAgICog0JrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0YDQvtGB0L7Qsiwg0LLRi9C/0L7Qu9C90LXQvdC90YvRhSDQuiBBUEkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBtaXNzZXM6IG51bWJlciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjU3NyUmVzcG9uc2VDYWNoZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWF4RW50cmllcyDQnNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0LjRgdC10Lkg0LIg0LrRjdGI0LUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1heEVudHJpZXM6IG51bWJlciA9IDEwMCkge1xuICAgICAgICB0aGlzLm1heEVudHJpZXMgPSBOdW1iZXIuaXNGaW5pdGUobWF4RW50cmllcykgPyBNYXRoLm1heCgxLCBtYXhFbnRyaWVzKSA6IDEwMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQvtGC0LLQtdGCINC40Lcg0LrRjdGI0LAsINC/0YDQuCDQvtGC0YHRg9GC0YHRgtCy0LjQuCDQuNC70Lgg0YPRgdGC0LDRgNC10LLQsNC90LjQuCDQt9Cw0LPRgNGD0LbQsNC10YIg0Lgg0LrRjdGI0LjRgNGD0LXRgi4g0J7RiNC40LHQutCwINC30LDQs9GA0YPQt9C60Lgg0L3QtSDQutGN0YjQuNGA0YPQtdGC0YHRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkg0JrQu9GO0Ycg0LfQsNC/0YDQvtGB0LAuXG4gICAgICogQHBhcmFtIGxpZmVUaW1lINCS0YDQtdC80Y8g0LbQuNC30L3QuCDQvtGC0LLQtdGC0LAgKNC80YEpLlxuICAgICAqIEBwYXJhbSBsb2FkZXIg0KTRg9C90LrRhtC40Y8g0LfQsNCz0YDRg9C30LrQuCDQvtGC0LLQtdGC0LAuXG4gICAgICovXG4gICAgcHVibGljIGdldE9yTG9hZChrZXk6IHN0cmluZywgbGlmZVRpbWU6IG51bWJlciwgbG9hZGVyOiAoKSA9PiBQcm9taXNlPEh0dHBSZXNwb25zZTx1bmtub3duPj4pOiBQcm9taXNlPEh0dHBSZXNwb25zZTx1bmtub3duPj4ge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmdldChrZXkpO1xuXG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGl0cyArPSAxO1xuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZC5yZXNwb25zZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nLmdldChrZXkpO1xuXG4gICAgICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmhpdHMgKz0gMTtcblxuICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1pc3NlcyArPSAxO1xuXG4gICAgICAgIGNvbnN0IGxvYWRpbmcgPSBsb2FkZXIoKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB7IHJlc3BvbnNlLCBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBsaWZlVGltZSB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nLnNldChrZXksIGxvYWRpbmcpO1xuXG4gICAgICAgIHJldHVybiBsb2FkaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0YLQsNGC0LjRgdGC0LjQutGDINGA0LDQsdC+0YLRiyDQutGN0YjQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3RhdHMoKTogU2NJU3NyUmVzcG9uc2VDYWNoZVN0YXRzIHtcbiAgICAgICAgcmV0dXJuIHsgc2l6ZTogdGhpcy5lbnRyaWVzLnNpemUsIGhpdHM6IHRoaXMuaGl0cywgbWlzc2VzOiB0aGlzLm1pc3NlcyB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINCw0LrRgtGD0LDQu9GM0L3Rg9GOINC30LDQv9C40YHRjCDQuNC70LggYG51bGxgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSDQmtC70Y7RhyDQt9Cw0L/RgNC+0YHQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldChrZXk6IHN0cmluZyk6IFNjSVNzckNhY2hlZFJlc3BvbnNlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChrZXkpO1xuXG4gICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LmV4cGlyZXNBdCA8PSBEYXRlLm5vdygpKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuZGVsZXRlKGtleSk7XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/QtdGA0LXRgdGC0LDQvdC+0LLQutCwINCyINC60L7QvdC10YYg0L/QvtC80LXRh9Cw0LXRgiDQt9Cw0L/QuNGB0Ywg0LrQsNC6INC90LXQtNCw0LLQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0L3QvdGD0Y4uXG4gICAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoa2V5KTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIGVudHJ5KTtcblxuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtGF0YDQsNC90Y/QtdGCINC30LDQv9C40YHRjCwg0L/RgNC4INC/0LXRgNC10L/QvtC70L3QtdC90LjQuCDQstGL0YLQtdGB0L3Rj9GPINGB0LDQvNGD0Y4g0LTQsNCy0L3RjtGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSDQmtC70Y7RhyDQt9Cw0L/RgNC+0YHQsC5cbiAgICAgKiBAcGFyYW0gZW50cnkg0JfQsNC/0LjRgdGMINC60Y3RiNCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0KGtleTogc3RyaW5nLCBlbnRyeTogU2NJU3NyQ2FjaGVkUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrZXkpO1xuXG4gICAgICAgIGlmICh0aGlzLmVudHJpZXMuc2l6ZSA+PSB0aGlzLm1heEVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IFtvbGRlc3RLZXldID0gdGhpcy5lbnRyaWVzLmtleXMoKTtcblxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShvbGRlc3RLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIGVudHJ5KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * from './classes';
2
+ export * from './interfaces';
3
+ export * from './tokens';
4
+ export * from './sc-ssr-response-cache.backend';
5
+ export * from './sc-ssr-response-cache.providers';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vc2Mtc3NyLXJlc3BvbnNlLWNhY2hlLmJhY2tlbmQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1zc3ItcmVzcG9uc2UtY2FjaGUucHJvdmlkZXJzJztcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './sc-i-ssr-response-cache-settings';
2
+ export * from './sc-i-ssr-response-cache-stats';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2MtaS1zc3ItcmVzcG9uc2UtY2FjaGUtc2V0dGluZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1pLXNzci1yZXNwb25zZS1jYWNoZS1zdGF0cyc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1zc3ItcmVzcG9uc2UtY2FjaGUtc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9pbnRlcmZhY2VzL3NjLWktc3NyLXJlc3BvbnNlLWNhY2hlLXNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqINCd0LDRgdGC0YDQvtC50LrQuCDQutGN0YjQsCDQvtGC0LLQtdGC0L7QsiBBUEksINC+0LHRidC10LPQviDQtNC70Y8g0LLRgdC10YUgU1NSLdGA0LXQvdC00LXRgNC+0LIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NJU3NyUmVzcG9uc2VDYWNoZVNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiDQkNC00YDQtdGB0LAgQVBJINC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviBgYXBpVXJsYCwg0L7RgtCy0LXRgtGLINC90LAg0LrQvtGC0L7RgNGL0LUg0LrRjdGI0LjRgNGD0Y7RgtGB0Y86INGC0L7Rh9C90L7QtSDRgdC+0LLQv9Cw0LTQtdC90LjQtSAoYC9uZXdzYCkg0LjQu9C4INC/0YDQtdGE0LjQutGBINGBIGAqYCAoYC9yZWZlcmVuY2VzLypgKS5cbiAgICAgKi9cbiAgICByZWFkb25seSBlbmRwb2ludHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICog0JLRgNC10LzRjyDQttC40LfQvdC4INC30LDQutGN0YjQuNGA0L7QstCw0L3QvdC+0LPQviDQvtGC0LLQtdGC0LAgKNC80YEpLiDQn9GA0Lgg0LfQvdCw0YfQtdC90LjQuCBgMGAg0LrRjdGIINCy0YvQutC70Y7Rh9C10L0uXG4gICAgICovXG4gICAgcmVhZG9ubHkgbGlmZVRpbWU6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqINCS0YDQtdC80Y8g0L7QttC40LTQsNC90LjRjyDQvtGC0LLQtdGC0LAgQVBJICjQvNGBKSwg0YfRgtC+0LHRiyDQt9Cw0LLQuNGB0YjQuNC5INC30LDQv9GA0L7RgSDQvdC1INCx0LvQvtC60LjRgNC+0LLQsNC7INCw0LTRgNC10YEg0LTQu9GPINCy0YHQtdGFINGA0LXQvdC00LXRgNC+0LIuIGAwYDog0LHQtdC3INC+0LPRgNCw0L3QuNGH0LXQvdC40Y8uXG4gICAgICovXG4gICAgLy8gVE9ETzogQW5ndWxhciAyMTog0LHRgNCw0YLRjCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQuNC3IFNDX1NTUl9IVFRQX1RJTUVPVVQgKGZlYXR1cmUvYW5ndWxhcl91cGdyYWRlKSwg0L3QtSDQt9Cw0LLQvtC00LjRgtGMINCy0YLQvtGA0L7QuSDRgtCw0LnQvNCw0YPRgi5cbiAgICByZWFkb25seSBsb2FkVGltZW91dDogbnVtYmVyO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1zc3ItcmVzcG9uc2UtY2FjaGUtc3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9pbnRlcmZhY2VzL3NjLWktc3NyLXJlc3BvbnNlLWNhY2hlLXN0YXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqINCh0YLQsNGC0LjRgdGC0LjQutCwINGA0LDQsdC+0YLRiyDQutGN0YjQsCDQvtGC0LLQtdGC0L7QsiBBUEkg0LzQtdC20LTRgyBTU1It0YDQtdC90LTQtdGA0LDQvNC4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjSVNzclJlc3BvbnNlQ2FjaGVTdGF0cyB7XG4gICAgLyoqXG4gICAgICog0JrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0LjRgdC10Lkg0LIg0LrRjdGI0LUuXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0JrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0YDQvtGB0L7Qsiwg0L7RgtC00LDQvdC90YvRhSDQsdC10Lcg0L7QsdGA0LDRidC10L3QuNGPINC6IEFQSTog0LjQtyDQutGN0YjQsCDQuNC70Lgg0LjQtyDRg9C20LUg0LLRi9C/0L7Qu9C90Y/RjtGJ0LXQs9C+0YHRjyDQt9Cw0L/RgNC+0YHQsC5cbiAgICAgKi9cbiAgICByZWFkb25seSBoaXRzOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0LvQuNGH0LXRgdGC0LLQviDQt9Cw0L/RgNC+0YHQvtCyLCDQstGL0L/QvtC70L3QtdC90L3Ri9GFINC6IEFQSS5cbiAgICAgKi9cbiAgICByZWFkb25seSBtaXNzZXM6IG51bWJlcjtcbn1cbiJdfQ==
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Возвращает признак, что ответ можно кэшировать между SSR-рендерами: GET за JSON без ключей доступа по адресам из настроек.
3
+ *
4
+ * @param request Данные запроса.
5
+ * @param settings Настройки кэша.
6
+ * @param apiUrl Адрес API.
7
+ * @param apiKeys Названия заголовков ключей доступа к API.
8
+ *
9
+ * @internal
10
+ */
11
+ export function isSsrResponseCacheable(request, settings, apiUrl, apiKeys) {
12
+ if (!Number.isFinite(settings.lifeTime) || settings.lifeTime <= 0 || request.method !== 'GET' || request.responseType !== 'json') {
13
+ return false;
14
+ }
15
+ if (request.headers.has(apiKeys.keyName) || request.headers.has(apiKeys.guestKeyName)) {
16
+ return false;
17
+ }
18
+ const [url] = request.url.split('?');
19
+ if (!url.startsWith(apiUrl)) {
20
+ return false;
21
+ }
22
+ const path = url.slice(apiUrl.length);
23
+ return settings.endpoints.some((endpoint) => (endpoint.endsWith('*') ? path.startsWith(endpoint.slice(0, -1)) : path === endpoint));
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtc3NyLXJlc3BvbnNlLWNhY2hlYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3NyLWNhY2hlL2ludGVybmFsL2lzLXNzci1yZXNwb25zZS1jYWNoZWFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE9BQTZCLEVBQUUsUUFBcUMsRUFBRSxNQUFjLEVBQUUsT0FBbUI7SUFDNUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDL0gsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3BGLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdEMsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBTY0lBcGlLZXlzIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NjLWktYXBpLWtleXMnO1xuaW1wb3J0IHsgU2NJU3NyUmVzcG9uc2VDYWNoZVNldHRpbmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zYy1pLXNzci1yZXNwb25zZS1jYWNoZS1zZXR0aW5ncyc7XG5cbi8qKlxuICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/RgNC40LfQvdCw0LosINGH0YLQviDQvtGC0LLQtdGCINC80L7QttC90L4g0LrRjdGI0LjRgNC+0LLQsNGC0Ywg0LzQtdC20LTRgyBTU1It0YDQtdC90LTQtdGA0LDQvNC4OiBHRVQg0LfQsCBKU09OINCx0LXQtyDQutC70Y7Rh9C10Lkg0LTQvtGB0YLRg9C/0LAg0L/QviDQsNC00YDQtdGB0LDQvCDQuNC3INC90LDRgdGC0YDQvtC10LouXG4gKlxuICogQHBhcmFtIHJlcXVlc3Qg0JTQsNC90L3Ri9C1INC30LDQv9GA0L7RgdCwLlxuICogQHBhcmFtIHNldHRpbmdzINCd0LDRgdGC0YDQvtC50LrQuCDQutGN0YjQsC5cbiAqIEBwYXJhbSBhcGlVcmwg0JDQtNGA0LXRgSBBUEkuXG4gKiBAcGFyYW0gYXBpS2V5cyDQndCw0LfQstCw0L3QuNGPINC30LDQs9C+0LvQvtCy0LrQvtCyINC60LvRjtGH0LXQuSDQtNC+0YHRgtGD0L/QsCDQuiBBUEkuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NzclJlc3BvbnNlQ2FjaGVhYmxlKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBzZXR0aW5nczogU2NJU3NyUmVzcG9uc2VDYWNoZVNldHRpbmdzLCBhcGlVcmw6IHN0cmluZywgYXBpS2V5czogU2NJQXBpS2V5cyk6IGJvb2xlYW4ge1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNldHRpbmdzLmxpZmVUaW1lKSB8fCBzZXR0aW5ncy5saWZlVGltZSA8PSAwIHx8IHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCByZXF1ZXN0LnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5oZWFkZXJzLmhhcyhhcGlLZXlzLmtleU5hbWUpIHx8IHJlcXVlc3QuaGVhZGVycy5oYXMoYXBpS2V5cy5ndWVzdEtleU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBbdXJsXSA9IHJlcXVlc3QudXJsLnNwbGl0KCc/Jyk7XG5cbiAgICBpZiAoIXVybC5zdGFydHNXaXRoKGFwaVVybCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSB1cmwuc2xpY2UoYXBpVXJsLmxlbmd0aCk7XG5cbiAgICByZXR1cm4gc2V0dGluZ3MuZW5kcG9pbnRzLnNvbWUoKGVuZHBvaW50KSA9PiAoZW5kcG9pbnQuZW5kc1dpdGgoJyonKSA/IHBhdGguc3RhcnRzV2l0aChlbmRwb2ludC5zbGljZSgwLCAtMSkpIDogcGF0aCA9PT0gZW5kcG9pbnQpKTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1zc3ItY2FjaGVkLXJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zc3ItY2FjaGUvaW50ZXJuYWwvc2MtaS1zc3ItY2FjaGVkLXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbi8qKlxuICog0J7RgtCy0LXRgiBBUEksINC30LDQutGN0YjQuNGA0L7QstCw0L3QvdGL0Lkg0LzQtdC20LTRgyBTU1It0YDQtdC90LTQtdGA0LDQvNC4LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjSVNzckNhY2hlZFJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiDQnNC+0LzQtdC90YIg0LLRgNC10LzQtdC90LggKNC80YEpLCDQv9C+0YHQu9C1INC60L7RgtC+0YDQvtCz0L4g0L7RgtCy0LXRgiDRgdGH0LjRgtCw0LXRgtGB0Y8g0YPRgdGC0LDRgNC10LLRiNC40LwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0LrRjdGI0LjRgNC+0LLQsNC90L3Ri9C5INC+0YLQstC10YIg0L3QsCDQt9Cw0L/RgNC+0YEuXG4gICAgICovXG4gICAgcmVhZG9ubHkgcmVzcG9uc2U6IEh0dHBSZXNwb25zZTx1bmtub3duPjtcbn1cbiJdfQ==
@@ -0,0 +1,71 @@
1
+ import { FetchBackend, HttpErrorResponse, HttpResponse, HttpStatusCode, HttpXhrBackend } from '@angular/common/http';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { catchError, defer, filter, from, lastValueFrom, map, throwError, timeout, TimeoutError } from 'rxjs';
4
+ import { SC_API_KEYS } from '../tokens/sc-api-keys';
5
+ import { SC_URLS } from '../tokens/sc-urls';
6
+ import { isSsrResponseCacheable } from './internal/is-ssr-response-cacheable';
7
+ import { SC_SSR_RESPONSE_CACHE } from './tokens/sc-ssr-response-cache';
8
+ import { SC_SSR_RESPONSE_CACHE_SETTINGS } from './tokens/sc-ssr-response-cache-settings';
9
+ import * as i0 from "@angular/core";
10
+ /**
11
+ * Обработчик запросов с кэшем ответов API между SSR-рендерами.
12
+ *
13
+ * Стоит на уровне {@link HttpBackend}, ниже перехватчиков: ответ из кэша проходит через перенос в браузер,
14
+ * а проверка ключей доступа видит итоговые заголовки. Отдаёт только итоговый {@link HttpResponse};
15
+ * запрос не отменяется при отписке рендера, а ограничен `loadTimeout` из настроек.
16
+ */
17
+ export class ScSsrResponseCacheBackend {
18
+ constructor() {
19
+ /**
20
+ * Штатный обработчик, выполняющий запросы к API.
21
+ */
22
+ // TODO: Angular 21: проверить, какой backend регистрирует provideHttpClient.
23
+ this.backend = inject(FetchBackend, { optional: true }) ?? inject(HttpXhrBackend);
24
+ /**
25
+ * Кэш ответов API.
26
+ */
27
+ this.cache = inject(SC_SSR_RESPONSE_CACHE);
28
+ /**
29
+ * Настройки кэша.
30
+ */
31
+ this.settings = inject(SC_SSR_RESPONSE_CACHE_SETTINGS);
32
+ /**
33
+ * Адрес API.
34
+ */
35
+ this.apiUrl = inject(SC_URLS).apiUrl;
36
+ /**
37
+ * Названия заголовков ключей доступа к API.
38
+ */
39
+ this.apiKeys = inject(SC_API_KEYS);
40
+ }
41
+ /** @inheritDoc */
42
+ handle(request) {
43
+ if (!isSsrResponseCacheable(request, this.settings, this.apiUrl, this.apiKeys)) {
44
+ return this.backend.handle(request);
45
+ }
46
+ return defer(() => from(this.cache.getOrLoad(request.urlWithParams, this.settings.lifeTime, () => this.load(request)))).pipe(
47
+ // Копия тела на каждый рендер, чтобы изменения не утекали между рендерами.
48
+ map((response) => response.clone({ body: structuredClone(response.body) })));
49
+ }
50
+ /**
51
+ * Выполняет запрос к API и возвращает его ответ.
52
+ *
53
+ * @param request Данные запроса.
54
+ */
55
+ load(request) {
56
+ const response$ = this.backend.handle(request).pipe(filter((event) => event instanceof HttpResponse));
57
+ if (this.settings.loadTimeout <= 0) {
58
+ return lastValueFrom(response$);
59
+ }
60
+ // По таймауту запрос отменяется, ошибка отдаётся как HttpErrorResponse, как и остальные ошибки запросов.
61
+ return lastValueFrom(response$.pipe(timeout(this.settings.loadTimeout), catchError((error) => throwError(() => error instanceof TimeoutError
62
+ ? new HttpErrorResponse({ status: HttpStatusCode.GatewayTimeout, statusText: 'Gateway Timeout', url: request.url, error })
63
+ : error))));
64
+ }
65
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSsrResponseCacheBackend, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSsrResponseCacheBackend }); }
67
+ }
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSsrResponseCacheBackend, decorators: [{
69
+ type: Injectable
70
+ }] });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc3NyLXJlc3BvbnNlLWNhY2hlLmJhY2tlbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9zYy1zc3ItcmVzcG9uc2UtY2FjaGUuYmFja2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFlLGlCQUFpQixFQUEwQixZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFKLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQUV6Rjs7Ozs7O0dBTUc7QUFFSCxNQUFNLE9BQU8seUJBQXlCO0lBRHRDO1FBRUk7O1dBRUc7UUFDSCw2RUFBNkU7UUFDNUQsWUFBTyxHQUFnQixNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTNHOztXQUVHO1FBQ2MsVUFBSyxHQUF1QixNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUUzRTs7V0FFRztRQUNjLGFBQVEsR0FBZ0MsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFaEc7O1dBRUc7UUFDYyxXQUFNLEdBQVcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUV6RDs7V0FFRztRQUNjLFlBQU8sR0FBZSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0F3QzlEO0lBdENHLGtCQUFrQjtJQUNYLE1BQU0sQ0FBQyxPQUE2QjtRQUN2QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3RSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDeEgsMkVBQTJFO1FBQzNFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM5RSxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxJQUFJLENBQUMsT0FBNkI7UUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBa0MsRUFBRSxDQUFDLEtBQUssWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRXRJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELHlHQUF5RztRQUN6RyxPQUFPLGFBQWEsQ0FDaEIsU0FBUyxDQUFDLElBQUksQ0FDVixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFDbEMsVUFBVSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FDMUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUNaLEtBQUssWUFBWSxZQUFZO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzFILENBQUMsQ0FBQyxLQUFLLENBQ2QsQ0FDSixDQUNKLENBQ0osQ0FBQztJQUNOLENBQUM7K0dBaEVRLHlCQUF5QjttSEFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmV0Y2hCYWNrZW5kLCBIdHRwQmFja2VuZCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSwgSHR0cFN0YXR1c0NvZGUsIEh0dHBYaHJCYWNrZW5kIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWZlciwgZmlsdGVyLCBmcm9tLCBsYXN0VmFsdWVGcm9tLCBtYXAsIE9ic2VydmFibGUsIHRocm93RXJyb3IsIHRpbWVvdXQsIFRpbWVvdXRFcnJvciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY0lBcGlLZXlzIH0gZnJvbSAnLi4vY29uZmlnL3NjLWktYXBpLWtleXMnO1xuaW1wb3J0IHsgU0NfQVBJX0tFWVMgfSBmcm9tICcuLi90b2tlbnMvc2MtYXBpLWtleXMnO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uL3Rva2Vucy9zYy11cmxzJztcbmltcG9ydCB7IFNjU3NyUmVzcG9uc2VDYWNoZSB9IGZyb20gJy4vY2xhc3Nlcy9zYy1zc3ItcmVzcG9uc2UtY2FjaGUnO1xuaW1wb3J0IHsgU2NJU3NyUmVzcG9uc2VDYWNoZVNldHRpbmdzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3NjLWktc3NyLXJlc3BvbnNlLWNhY2hlLXNldHRpbmdzJztcbmltcG9ydCB7IGlzU3NyUmVzcG9uc2VDYWNoZWFibGUgfSBmcm9tICcuL2ludGVybmFsL2lzLXNzci1yZXNwb25zZS1jYWNoZWFibGUnO1xuaW1wb3J0IHsgU0NfU1NSX1JFU1BPTlNFX0NBQ0hFIH0gZnJvbSAnLi90b2tlbnMvc2Mtc3NyLXJlc3BvbnNlLWNhY2hlJztcbmltcG9ydCB7IFNDX1NTUl9SRVNQT05TRV9DQUNIRV9TRVRUSU5HUyB9IGZyb20gJy4vdG9rZW5zL3NjLXNzci1yZXNwb25zZS1jYWNoZS1zZXR0aW5ncyc7XG5cbi8qKlxuICog0J7QsdGA0LDQsdC+0YLRh9C40Log0LfQsNC/0YDQvtGB0L7QsiDRgSDQutGN0YjQtdC8INC+0YLQstC10YLQvtCyIEFQSSDQvNC10LbQtNGDIFNTUi3RgNC10L3QtNC10YDQsNC80LguXG4gKlxuICog0KHRgtC+0LjRgiDQvdCwINGD0YDQvtCy0L3QtSB7QGxpbmsgSHR0cEJhY2tlbmR9LCDQvdC40LbQtSDQv9C10YDQtdGF0LLQsNGC0YfQuNC60L7Qsjog0L7RgtCy0LXRgiDQuNC3INC60Y3RiNCwINC/0YDQvtGF0L7QtNC40YIg0YfQtdGA0LXQtyDQv9C10YDQtdC90L7RgSDQsiDQsdGA0LDRg9C30LXRgCxcbiAqINCwINC/0YDQvtCy0LXRgNC60LAg0LrQu9GO0YfQtdC5INC00L7RgdGC0YPQv9CwINCy0LjQtNC40YIg0LjRgtC+0LPQvtCy0YvQtSDQt9Cw0LPQvtC70L7QstC60LguINCe0YLQtNCw0ZHRgiDRgtC+0LvRjNC60L4g0LjRgtC+0LPQvtCy0YvQuSB7QGxpbmsgSHR0cFJlc3BvbnNlfTtcbiAqINC30LDQv9GA0L7RgSDQvdC1INC+0YLQvNC10L3Rj9C10YLRgdGPINC/0YDQuCDQvtGC0L/QuNGB0LrQtSDRgNC10L3QtNC10YDQsCwg0LAg0L7Qs9GA0LDQvdC40YfQtdC9IGBsb2FkVGltZW91dGAg0LjQtyDQvdCw0YHRgtGA0L7QtdC6LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2NTc3JSZXNwb25zZUNhY2hlQmFja2VuZCBpbXBsZW1lbnRzIEh0dHBCYWNrZW5kIHtcbiAgICAvKipcbiAgICAgKiDQqNGC0LDRgtC90YvQuSDQvtCx0YDQsNCx0L7RgtGH0LjQuiwg0LLRi9C/0L7Qu9C90Y/RjtGJ0LjQuSDQt9Cw0L/RgNC+0YHRiyDQuiBBUEkuXG4gICAgICovXG4gICAgLy8gVE9ETzogQW5ndWxhciAyMTog0L/RgNC+0LLQtdGA0LjRgtGMLCDQutCw0LrQvtC5IGJhY2tlbmQg0YDQtdCz0LjRgdGC0YDQuNGA0YPQtdGCIHByb3ZpZGVIdHRwQ2xpZW50LlxuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFja2VuZDogSHR0cEJhY2tlbmQgPSBpbmplY3QoRmV0Y2hCYWNrZW5kLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IGluamVjdChIdHRwWGhyQmFja2VuZCk7XG5cbiAgICAvKipcbiAgICAgKiDQmtGN0Ygg0L7RgtCy0LXRgtC+0LIgQVBJLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FjaGU6IFNjU3NyUmVzcG9uc2VDYWNoZSA9IGluamVjdChTQ19TU1JfUkVTUE9OU0VfQ0FDSEUpO1xuXG4gICAgLyoqXG4gICAgICog0J3QsNGB0YLRgNC+0LnQutC4INC60Y3RiNCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2V0dGluZ3M6IFNjSVNzclJlc3BvbnNlQ2FjaGVTZXR0aW5ncyA9IGluamVjdChTQ19TU1JfUkVTUE9OU0VfQ0FDSEVfU0VUVElOR1MpO1xuXG4gICAgLyoqXG4gICAgICog0JDQtNGA0LXRgSBBUEkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGlVcmw6IHN0cmluZyA9IGluamVjdChTQ19VUkxTKS5hcGlVcmw7XG5cbiAgICAvKipcbiAgICAgKiDQndCw0LfQstCw0L3QuNGPINC30LDQs9C+0LvQvtCy0LrQvtCyINC60LvRjtGH0LXQuSDQtNC+0YHRgtGD0L/QsCDQuiBBUEkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGlLZXlzOiBTY0lBcGlLZXlzID0gaW5qZWN0KFNDX0FQSV9LRVlTKTtcblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBoYW5kbGUocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xuICAgICAgICBpZiAoIWlzU3NyUmVzcG9uc2VDYWNoZWFibGUocmVxdWVzdCwgdGhpcy5zZXR0aW5ncywgdGhpcy5hcGlVcmwsIHRoaXMuYXBpS2V5cykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJhY2tlbmQuaGFuZGxlKHJlcXVlc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5jYWNoZS5nZXRPckxvYWQocmVxdWVzdC51cmxXaXRoUGFyYW1zLCB0aGlzLnNldHRpbmdzLmxpZmVUaW1lLCAoKSA9PiB0aGlzLmxvYWQocmVxdWVzdCkpKSkucGlwZShcbiAgICAgICAgICAgIC8vINCa0L7Qv9C40Y8g0YLQtdC70LAg0L3QsCDQutCw0LbQtNGL0Lkg0YDQtdC90LTQtdGALCDRh9GC0L7QsdGLINC40LfQvNC10L3QtdC90LjRjyDQvdC1INGD0YLQtdC60LDQu9C4INC80LXQttC00YMg0YDQtdC90LTQtdGA0LDQvNC4LlxuICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuY2xvbmUoeyBib2R5OiBzdHJ1Y3R1cmVkQ2xvbmUocmVzcG9uc2UuYm9keSkgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINC30LDQv9GA0L7RgSDQuiBBUEkg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0LXQs9C+INC+0YLQstC10YIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCDQlNCw0L3QvdGL0LUg0LfQsNC/0YDQvtGB0LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSBsb2FkKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+KTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8dW5rbm93bj4+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UkID0gdGhpcy5iYWNrZW5kLmhhbmRsZShyZXF1ZXN0KS5waXBlKGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBIdHRwUmVzcG9uc2U8dW5rbm93bj4gPT4gZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpKTtcblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5sb2FkVGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbShyZXNwb25zZSQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/QviDRgtCw0LnQvNCw0YPRgtGDINC30LDQv9GA0L7RgSDQvtGC0LzQtdC90Y/QtdGC0YHRjywg0L7RiNC40LHQutCwINC+0YLQtNCw0ZHRgtGB0Y8g0LrQsNC6IEh0dHBFcnJvclJlc3BvbnNlLCDQutCw0Log0Lgg0L7RgdGC0LDQu9GM0L3Ri9C1INC+0YjQuNCx0LrQuCDQt9Cw0L/RgNC+0YHQvtCyLlxuICAgICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIHJlc3BvbnNlJC5waXBlKFxuICAgICAgICAgICAgICAgIHRpbWVvdXQodGhpcy5zZXR0aW5ncy5sb2FkVGltZW91dCksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgVGltZW91dEVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgSHR0cEVycm9yUmVzcG9uc2UoeyBzdGF0dXM6IEh0dHBTdGF0dXNDb2RlLkdhdGV3YXlUaW1lb3V0LCBzdGF0dXNUZXh0OiAnR2F0ZXdheSBUaW1lb3V0JywgdXJsOiByZXF1ZXN0LnVybCwgZXJyb3IgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGVycm9yXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,12 @@
1
+ import { HttpBackend } from '@angular/common/http';
2
+ import { makeEnvironmentProviders } from '@angular/core';
3
+ import { ScSsrResponseCacheBackend } from './sc-ssr-response-cache.backend';
4
+ /**
5
+ * Возвращает провайдеры кэша ответов API между SSR-рендерами.
6
+ * Подключать только в серверной конфигурации после `provideHttpClient()`: подменяют {@link HttpBackend}.
7
+ */
8
+ // TODO: Angular 21: проверить, что подмена HttpBackend остаётся последней после provideServerRendering(withRoutes()).
9
+ export function provideSsrResponseCache() {
10
+ return makeEnvironmentProviders([{ provide: HttpBackend, useClass: ScSsrResponseCacheBackend }]);
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc3NyLXJlc3BvbnNlLWNhY2hlLnByb3ZpZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3NyLWNhY2hlL3NjLXNzci1yZXNwb25zZS1jYWNoZS5wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBd0Isd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUU7OztHQUdHO0FBQ0gsc0hBQXNIO0FBQ3RILE1BQU0sVUFBVSx1QkFBdUI7SUFDbkMsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBCYWNrZW5kIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRQcm92aWRlcnMsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTY1NzclJlc3BvbnNlQ2FjaGVCYWNrZW5kIH0gZnJvbSAnLi9zYy1zc3ItcmVzcG9uc2UtY2FjaGUuYmFja2VuZCc7XG5cbi8qKlxuICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/RgNC+0LLQsNC50LTQtdGA0Ysg0LrRjdGI0LAg0L7RgtCy0LXRgtC+0LIgQVBJINC80LXQttC00YMgU1NSLdGA0LXQvdC00LXRgNCw0LzQuC5cbiAqINCf0L7QtNC60LvRjtGH0LDRgtGMINGC0L7Qu9GM0LrQviDQsiDRgdC10YDQstC10YDQvdC+0Lkg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC/0L7RgdC70LUgYHByb3ZpZGVIdHRwQ2xpZW50KClgOiDQv9C+0LTQvNC10L3Rj9GO0YIge0BsaW5rIEh0dHBCYWNrZW5kfS5cbiAqL1xuLy8gVE9ETzogQW5ndWxhciAyMTog0L/RgNC+0LLQtdGA0LjRgtGMLCDRh9GC0L4g0L/QvtC00LzQtdC90LAgSHR0cEJhY2tlbmQg0L7RgdGC0LDRkdGC0YHRjyDQv9C+0YHQu9C10LTQvdC10Lkg0L/QvtGB0LvQtSBwcm92aWRlU2VydmVyUmVuZGVyaW5nKHdpdGhSb3V0ZXMoKSkuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVNzclJlc3BvbnNlQ2FjaGUoKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICAgIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW3sgcHJvdmlkZTogSHR0cEJhY2tlbmQsIHVzZUNsYXNzOiBTY1NzclJlc3BvbnNlQ2FjaGVCYWNrZW5kIH1dKTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './sc-ssr-response-cache';
2
+ export * from './sc-ssr-response-cache-settings';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS90b2tlbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zYy1zc3ItcmVzcG9uc2UtY2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1zc3ItcmVzcG9uc2UtY2FjaGUtc2V0dGluZ3MnO1xuIl19
@@ -0,0 +1,8 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * Токен настроек кэша ответов API между SSR-рендерами. По умолчанию кэш выключен.
4
+ */
5
+ export const SC_SSR_RESPONSE_CACHE_SETTINGS = new InjectionToken('SC_SSR_RESPONSE_CACHE_SETTINGS', {
6
+ factory: () => ({ endpoints: [], lifeTime: 0, loadTimeout: 0 }),
7
+ });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc3NyLXJlc3BvbnNlLWNhY2hlLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zc3ItY2FjaGUvdG9rZW5zL3NjLXNzci1yZXNwb25zZS1jYWNoZS1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQWdELElBQUksY0FBYyxDQUE4QixnQ0FBZ0MsRUFBRTtJQUN6SyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDbEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2NJU3NyUmVzcG9uc2VDYWNoZVNldHRpbmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zYy1pLXNzci1yZXNwb25zZS1jYWNoZS1zZXR0aW5ncyc7XG5cbi8qKlxuICog0KLQvtC60LXQvSDQvdCw0YHRgtGA0L7QtdC6INC60Y3RiNCwINC+0YLQstC10YLQvtCyIEFQSSDQvNC10LbQtNGDIFNTUi3RgNC10L3QtNC10YDQsNC80LguINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC60Y3RiCDQstGL0LrQu9GO0YfQtdC9LlxuICovXG5leHBvcnQgY29uc3QgU0NfU1NSX1JFU1BPTlNFX0NBQ0hFX1NFVFRJTkdTOiBJbmplY3Rpb25Ub2tlbjxTY0lTc3JSZXNwb25zZUNhY2hlU2V0dGluZ3M+ID0gbmV3IEluamVjdGlvblRva2VuPFNjSVNzclJlc3BvbnNlQ2FjaGVTZXR0aW5ncz4oJ1NDX1NTUl9SRVNQT05TRV9DQUNIRV9TRVRUSU5HUycsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiAoeyBlbmRwb2ludHM6IFtdLCBsaWZlVGltZTogMCwgbG9hZFRpbWVvdXQ6IDAgfSksXG59KTtcbiJdfQ==