@infrab4a/connect-angular 4.1.5-beta.1 → 4.1.5-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular-connect.module.d.ts +23 -23
- package/angular-elastic-search.module.d.ts +9 -9
- package/angular-firebase-auth.module.d.ts +11 -11
- package/angular-firestore.module.d.ts +17 -17
- package/angular-hasura-graphql.module.d.ts +16 -16
- package/consts/backend-url.const.d.ts +1 -1
- package/consts/category-structure.d.ts +1 -1
- package/consts/default-shop.const.d.ts +1 -1
- package/consts/es-config.const.d.ts +1 -1
- package/consts/firebase-const.d.ts +3 -3
- package/consts/hasura-options.const.d.ts +1 -1
- package/consts/index.d.ts +6 -6
- package/esm2020/angular-connect.module.mjs +97 -97
- package/esm2020/angular-elastic-search.module.mjs +34 -34
- package/esm2020/angular-firebase-auth.module.mjs +115 -115
- package/esm2020/angular-firestore.module.mjs +455 -455
- package/esm2020/angular-hasura-graphql.module.mjs +243 -243
- package/esm2020/consts/backend-url.const.mjs +1 -1
- package/esm2020/consts/category-structure.mjs +2 -2
- package/esm2020/consts/default-shop.const.mjs +2 -2
- package/esm2020/consts/es-config.const.mjs +2 -2
- package/esm2020/consts/firebase-const.mjs +4 -4
- package/esm2020/consts/hasura-options.const.mjs +2 -2
- package/esm2020/consts/index.mjs +7 -7
- package/esm2020/helpers/index.mjs +2 -2
- package/esm2020/helpers/mobile-operation-system-checker.helper.mjs +7 -7
- package/esm2020/index.mjs +6 -6
- package/esm2020/infrab4a-connect-angular.mjs +4 -4
- package/esm2020/services/auth.service.mjs +37 -37
- package/esm2020/services/cart.service.mjs +281 -281
- package/esm2020/services/catalog/adapters/category-structure.adapter.mjs +2 -2
- package/esm2020/services/catalog/adapters/index.mjs +4 -4
- package/esm2020/services/catalog/adapters/new-category-structure.adapter.mjs +41 -41
- package/esm2020/services/catalog/adapters/old-category-structure.adapter.mjs +23 -23
- package/esm2020/services/catalog/catalog.service.mjs +166 -163
- package/esm2020/services/catalog/category.service.mjs +51 -51
- package/esm2020/services/catalog/enums/index.mjs +2 -2
- package/esm2020/services/catalog/enums/product-sorts.enum.mjs +11 -11
- package/esm2020/services/catalog/index.mjs +7 -7
- package/esm2020/services/catalog/models/category-with-tree.model.mjs +10 -10
- package/esm2020/services/catalog/models/index.mjs +2 -2
- package/esm2020/services/catalog/types/index.mjs +2 -2
- package/esm2020/services/catalog/types/product-sort.type.mjs +2 -2
- package/esm2020/services/catalog/wishlist.service.mjs +107 -107
- package/esm2020/services/checkout-subscription.service.mjs +53 -53
- package/esm2020/services/checkout.service.mjs +71 -71
- package/esm2020/services/coupon.service.mjs +218 -218
- package/esm2020/services/helpers/index.mjs +2 -2
- package/esm2020/services/helpers/util.helper.mjs +18 -18
- package/esm2020/services/home-shop.service.mjs +114 -114
- package/esm2020/services/index.mjs +11 -11
- package/esm2020/services/order.service.mjs +30 -30
- package/esm2020/services/shipping.service.mjs +96 -96
- package/esm2020/services/types/index.mjs +3 -3
- package/esm2020/services/types/required-checkout-data.type.mjs +2 -2
- package/esm2020/services/types/required-checkout-subscription-data.type.mjs +2 -2
- package/esm2020/services/types/shipping-methods.type.mjs +2 -2
- package/esm2020/types/firebase-app-config.type.mjs +2 -2
- package/esm2020/types/index.mjs +2 -2
- package/fesm2015/infrab4a-connect-angular.mjs +2173 -2173
- package/fesm2015/infrab4a-connect-angular.mjs.map +1 -1
- package/fesm2020/infrab4a-connect-angular.mjs +2105 -2102
- package/fesm2020/infrab4a-connect-angular.mjs.map +1 -1
- package/helpers/index.d.ts +1 -1
- package/helpers/mobile-operation-system-checker.helper.d.ts +3 -3
- package/index.d.ts +5 -5
- package/package.json +2 -2
- package/services/auth.service.d.ts +18 -18
- package/services/cart.service.d.ts +42 -42
- package/services/catalog/adapters/category-structure.adapter.d.ts +4 -4
- package/services/catalog/adapters/index.d.ts +3 -3
- package/services/catalog/adapters/new-category-structure.adapter.d.ts +12 -12
- package/services/catalog/adapters/old-category-structure.adapter.d.ts +10 -10
- package/services/catalog/catalog.service.d.ts +83 -83
- package/services/catalog/category.service.d.ts +15 -15
- package/services/catalog/enums/index.d.ts +1 -1
- package/services/catalog/enums/product-sorts.enum.d.ts +9 -9
- package/services/catalog/index.d.ts +6 -6
- package/services/catalog/models/category-with-tree.model.d.ts +4 -4
- package/services/catalog/models/index.d.ts +1 -1
- package/services/catalog/types/index.d.ts +1 -1
- package/services/catalog/types/product-sort.type.d.ts +2 -2
- package/services/catalog/wishlist.service.d.ts +22 -22
- package/services/checkout-subscription.service.d.ts +18 -18
- package/services/checkout.service.d.ts +23 -23
- package/services/coupon.service.d.ts +28 -28
- package/services/helpers/index.d.ts +1 -1
- package/services/helpers/util.helper.d.ts +3 -3
- package/services/home-shop.service.d.ts +25 -25
- package/services/index.d.ts +10 -10
- package/services/order.service.d.ts +13 -13
- package/services/shipping.service.d.ts +19 -19
- package/services/types/index.d.ts +2 -2
- package/services/types/required-checkout-data.type.d.ts +2 -2
- package/services/types/required-checkout-subscription-data.type.d.ts +2 -2
- package/services/types/shipping-methods.type.d.ts +12 -12
- package/types/firebase-app-config.type.d.ts +1 -1
- package/types/index.d.ts +1 -1
|
@@ -1,163 +1,166 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { InvalidArgumentError, ProductsIndex, RoundProductPricesHelper, Shops, Where,
|
|
3
|
-
import { CATEGORY_STRUCTURE, DEFAULT_SHOP } from '../../consts';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@infrab4a/connect";
|
|
6
|
-
export class CatalogService {
|
|
7
|
-
constructor(productRepository, categoryStructureAdapter, shop, productIndex) {
|
|
8
|
-
this.productRepository = productRepository;
|
|
9
|
-
this.categoryStructureAdapter = categoryStructureAdapter;
|
|
10
|
-
this.shop = shop;
|
|
11
|
-
this.productIndex = productIndex;
|
|
12
|
-
this.productsByTerm = {};
|
|
13
|
-
this.buildFilterQuery = ({ clubDiscount, brands, prices, gender, tags, rate, customOptions, }) => {
|
|
14
|
-
const filters = {};
|
|
15
|
-
if (clubDiscount?.length)
|
|
16
|
-
set(filters, 'price.subscriberDiscountPercentage', { operator: Where.IN, value: clubDiscount });
|
|
17
|
-
if (brands?.length)
|
|
18
|
-
filters.brand = { operator: Where.IN, value: brands };
|
|
19
|
-
if (gender?.length)
|
|
20
|
-
filters.gender = { operator: Where.IN, value: gender };
|
|
21
|
-
if (prices?.min || prices?.max)
|
|
22
|
-
set(filters, prices.subscriberPrice ? 'price.subscriberPrice' : 'price.price', [
|
|
23
|
-
...(prices.min ? [{ operator: Where.GTE, value: Math.round(prices.min) }] : []),
|
|
24
|
-
...(prices.max ? [{ operator: Where.LTE, value: Math.ceil(prices.max) }] : []),
|
|
25
|
-
]);
|
|
26
|
-
if (rate)
|
|
27
|
-
filters.rate = { operator: Where.GTE, value: rate };
|
|
28
|
-
if (tags?.length)
|
|
29
|
-
filters.tags = { operator: Where.LIKE, value: tags };
|
|
30
|
-
if (customOptions?.length)
|
|
31
|
-
filters.filters = { operator: Where.LIKE, value: customOptions };
|
|
32
|
-
return filters;
|
|
33
|
-
};
|
|
34
|
-
this.buildSortQuery = (sort) => {
|
|
35
|
-
if (!sort || sort === 'most-relevant')
|
|
36
|
-
return {};
|
|
37
|
-
if (sort === 'best-sellers')
|
|
38
|
-
return { shoppingCount: 'desc' };
|
|
39
|
-
if (sort === 'biggest-price')
|
|
40
|
-
return { subscriberPrice: 'desc' };
|
|
41
|
-
if (sort === 'lowest-price')
|
|
42
|
-
return { subscriberPrice: 'asc' };
|
|
43
|
-
if (sort === 'best-rating')
|
|
44
|
-
return { rate: 'desc' };
|
|
45
|
-
if (sort === 'news')
|
|
46
|
-
return { createdAt: 'desc' };
|
|
47
|
-
if (sort === 'biggest-discount')
|
|
48
|
-
return { subscriberDiscountPercentage: 'desc' };
|
|
49
|
-
};
|
|
50
|
-
this.buildLimitQuery = (options) => {
|
|
51
|
-
const limit = options?.perPage || 20;
|
|
52
|
-
return {
|
|
53
|
-
limit,
|
|
54
|
-
offset: ((options?.page || 1) - 1) * limit,
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
this.hasProfile = (options) => 'profile' in options;
|
|
58
|
-
this.hasTerm = (options) => 'term' in options;
|
|
59
|
-
this.hasCategory = (options) => 'category' in options;
|
|
60
|
-
}
|
|
61
|
-
async fetchProducts(options) {
|
|
62
|
-
const limits = this.buildLimitQuery(options);
|
|
63
|
-
if (this.hasProfile(options) && options.filters?.customOptions)
|
|
64
|
-
throw new InvalidArgumentError(`It couldn't filled customOptions when profile is given`);
|
|
65
|
-
if (this.hasProfile(options) && options.filters?.tags)
|
|
66
|
-
throw new InvalidArgumentError(`It couldn't filled tags when profile is given`);
|
|
67
|
-
if (this.hasTerm(options) && options.filters?.customOptions)
|
|
68
|
-
throw new InvalidArgumentError(`It couldn't filled customOptions when term is given`);
|
|
69
|
-
return await this.findCatalog(options, limits).then(({ data, count: total, maximum, minimal, distinct }) => ({
|
|
70
|
-
products: { data: data.map((product) => RoundProductPricesHelper.roundProductPrices(product)), total },
|
|
71
|
-
pages: Math.ceil(total / limits.limit),
|
|
72
|
-
prices: {
|
|
73
|
-
price: { min: +minimal?.price?.price?.toFixed(2), max: +maximum?.price?.price?.toFixed(2) },
|
|
74
|
-
subscriberPrice: {
|
|
75
|
-
min: +minimal?.price?.subscriberPrice?.toFixed(2),
|
|
76
|
-
max: +maximum?.price?.subscriberPrice?.toFixed(2),
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
brands: distinct?.brand,
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
|
-
async findCatalog(options, limits) {
|
|
83
|
-
if (this.hasTerm(options) && options.sort === 'most-relevant')
|
|
84
|
-
return this.findCatalogByTermAndSortByMostRevelant(options, limits);
|
|
85
|
-
const repoParams = {
|
|
86
|
-
filters: {
|
|
87
|
-
...(await this.buildMainFilter(options)),
|
|
88
|
-
...this.buildFilterQuery(options?.filters || {}),
|
|
89
|
-
},
|
|
90
|
-
...(options?.sort ? { orderBy: this.buildSortQuery(options?.sort) } : {}),
|
|
91
|
-
limits,
|
|
92
|
-
options: {
|
|
93
|
-
minimal: ['price'],
|
|
94
|
-
maximum: ['price'],
|
|
95
|
-
...(!this.hasCategory(options) ? { distinct: ['brand'] } : {}),
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
if (['biggest-price', 'lowest-price', 'biggest-discount', 'best-rating'].includes(options.sort))
|
|
99
|
-
return this.productRepository.findCatalog(repoParams);
|
|
100
|
-
return this.productRepository.findCatalog(repoParams, options?.mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female');
|
|
101
|
-
}
|
|
102
|
-
async buildMainFilter({ category, profile, term, }) {
|
|
103
|
-
if (category)
|
|
104
|
-
return this.categoryStructureAdapter.buildProductFilterByCategory(category);
|
|
105
|
-
if (profile)
|
|
106
|
-
return { tags: { operator: Where.LIKE, value: profile } };
|
|
107
|
-
if (term)
|
|
108
|
-
return this.productIndex
|
|
109
|
-
.search(term, 999, this.shop)
|
|
110
|
-
.then((data) => ({ id: { operator: Where.IN, value: data.hits.map(({ _source }) => _source.id) } }));
|
|
111
|
-
}
|
|
112
|
-
async findCatalogByTermAndSortByMostRevelant(options, limits) {
|
|
113
|
-
const productIds = await this.findCatalogIdsByElasticSearch(options.term);
|
|
114
|
-
const limitedProductId = productIds.slice(limits.offset, limits.offset + limits.limit);
|
|
115
|
-
const productResult = await this.productRepository.findCatalog({
|
|
116
|
-
filters: {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
type: Inject,
|
|
158
|
-
args: [
|
|
159
|
-
}] }, { type:
|
|
160
|
-
type: Inject,
|
|
161
|
-
args: [
|
|
162
|
-
}] }, { type: i1.
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXRhbG9nL2NhdGFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBR0wsb0JBQW9CLEVBSXBCLGFBQWEsRUFJYix3QkFBd0IsRUFDeEIsS0FBSyxFQUNMLEtBQUssRUFDTCxHQUFHLEdBQ0osTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBOzs7QUFzRC9ELE1BQU0sT0FBTyxjQUFjO0lBR3pCLFlBQ2dELGlCQUFvQyxFQUNyQyx3QkFBa0QsRUFDeEQsSUFBVyxFQUNqQyxZQUEyQjtRQUhFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDckMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUN4RCxTQUFJLEdBQUosSUFBSSxDQUFPO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBTnRDLG1CQUFjLEdBQTZCLEVBQUUsQ0FBQTtRQXNJN0MscUJBQWdCLEdBQUcsQ0FBQyxFQUMxQixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLElBQUksRUFDSixhQUFhLEdBQ1EsRUFBbUMsRUFBRTtZQUMxRCxNQUFNLE9BQU8sR0FBRyxFQUFxQyxDQUFBO1lBRXJELElBQUksWUFBWSxFQUFFLE1BQU07Z0JBQ3RCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQTtZQUNqRyxJQUFJLE1BQU0sRUFBRSxNQUFNO2dC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RUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQzVCLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQzlFLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUNsRixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUE7WUFFOUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDOUQsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUM7OzJHQXJJVSxjQUFjLGtCQUlmLG1CQUFtQixhQUNuQixrQkFBa0IsYUFDbEIsWUFBWTsrR0FOWCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQUtOLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUN6QixNQUFNOzJCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQ2F0ZWdvcnksXG4gIEZpbmRSZXBvc2l0b3J5UGFyYW1zLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgUHJvZHVjdCxcbiAgUHJvZHVjdEdlbmRlcixcbiAgUHJvZHVjdFJlcG9zaXRvcnksXG4gIFByb2R1Y3RzSW5kZXgsXG4gIFJlcG9zaXRvcnlGaW5kRmllbHRlcnMsXG4gIFJlcG9zaXRvcnlGaW5kUmVzdWx0LFxuICBSZXBvc2l0b3J5T3JkZXJCeSxcbiAgUm91bmRQcm9kdWN0UHJpY2VzSGVscGVyLFxuICBTaG9wcyxcbiAgV2hlcmUsXG4gIHNldCxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBDQVRFR09SWV9TVFJVQ1RVUkUsIERFRkFVTFRfU0hPUCB9IGZyb20gJy4uLy4uL2NvbnN0cydcbmltcG9ydCB7IENhdGVnb3J5U3RydWN0dXJlQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcnMnXG5pbXBvcnQgeyBQcm9kdWN0U29ydCB9IGZyb20gJy4vdHlwZXMvcHJvZHVjdC1zb3J0LnR5cGUnXG5cbnR5cGUgRmV0Y2hQcm9kdWN0c0ZpbHRlcnMgPSB7XG4gIGNsdWJEaXNjb3VudD86IG51bWJlcltdXG4gIGJyYW5kcz86IHN0cmluZ1tdXG4gIHByaWNlcz86IHsgbWluPzogbnVtYmVyOyBtYXg/OiBudW1iZXI7IHN1YnNjcmliZXJQcmljZT86IGJvb2xlYW4gfVxuICBnZW5kZXI/OiBQcm9kdWN0R2VuZGVyW11cbiAgcmF0ZT86IG51bWJlclxuICBjdXN0b21PcHRpb25zPzogc3RyaW5nW11cbiAgdGFncz86IHN0cmluZ1tdXG59XG5cbnR5cGUgRmV0Y2hQcm9kdWN0c09wdGlvbnMgPSB7XG4gIHBhZ2U/OiBudW1iZXJcbiAgcGVyUGFnZT86IG51bWJlclxuICBzb3J0PzogUHJvZHVjdFNvcnRcbiAgbWFpbkdlbmRlcj86IFByb2R1Y3RHZW5kZXJcbn1cblxudHlwZSBGZXRjaFByb2R1Y3RzTWFpblBhcmFtczxUIGV4dGVuZHMgQ2F0ZWdvcnk+ID0ge1xuICBjYXRlZ29yeT86IFRcbiAgcHJvZmlsZT86IHN0cmluZ1tdXG4gIHRlcm0/OiBzdHJpbmdcbn1cblxudHlwZSBGZXRjaFByb2R1Y3RzUGFyYW1zPFQgZXh0ZW5kcyBDYXRlZ29yeT4gPSBGZXRjaFByb2R1Y3RzT3B0aW9ucyAmXG4gIChcbiAgICB8IHtcbiAgICAgICAgY2F0ZWdvcnk6IEZldGNoUHJvZHVjdHNNYWluUGFyYW1zPFQ+WydjYXRlZ29yeSddXG4gICAgICAgIGZpbHRlcnM/OiBGZXRjaFByb2R1Y3RzRmlsdGVyc1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBwcm9maWxlOiBGZXRjaFByb2R1Y3RzTWFpblBhcmFtczxUPlsncHJvZmlsZSddXG4gICAgICAgIGZpbHRlcnM/OiBGZXRjaFByb2R1Y3RzRmlsdGVycyAmIHsgY3VzdG9tT3B0aW9ucz86IG5ldmVyOyB0YWdzPzogbmV2ZXIgfVxuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0ZXJtOiBGZXRjaFByb2R1Y3RzTWFpblBhcmFtczxUPlsndGVybSddXG4gICAgICAgIGZpbHRlcnM/OiBGZXRjaFByb2R1Y3RzRmlsdGVycyAmIHsgY3VzdG9tT3B0aW9ucz86IG5ldmVyIH1cbiAgICAgIH1cbiAgKVxuXG50eXBlIEZldGNoUHJvZHVjdHNSZXNwb25zZSA9IHtcbiAgcHJvZHVjdHM6IHsgZGF0YTogUHJvZHVjdFtdOyB0b3RhbDogbnVtYmVyIH1cbiAgcGFnZXM6IG51bWJlclxuICBwcmljZXM6IHtcbiAgICBwcmljZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfVxuICAgIHN1YnNjcmliZXJQcmljZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfVxuICB9XG4gIGJyYW5kcz86IHN0cmluZ1tdXG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXRhbG9nU2VydmljZTxUIGV4dGVuZHMgQ2F0ZWdvcnkgPSBDYXRlZ29yeT4ge1xuICBwcml2YXRlIHByb2R1Y3RzQnlUZXJtOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ1Byb2R1Y3RSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0UmVwb3NpdG9yeTogUHJvZHVjdFJlcG9zaXRvcnksXG4gICAgQEluamVjdChDQVRFR09SWV9TVFJVQ1RVUkUpIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyOiBDYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIsXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgc2hvcDogU2hvcHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0SW5kZXg6IFByb2R1Y3RzSW5kZXgsXG4gICkge31cblxuICBhc3luYyBmZXRjaFByb2R1Y3RzKG9wdGlvbnM6IEZldGNoUHJvZHVjdHNQYXJhbXM8VD4pOiBQcm9taXNlPEZldGNoUHJvZHVjdHNSZXNwb25zZT4ge1xuICAgIGNvbnN0IGxpbWl0cyA9IHRoaXMuYnVpbGRMaW1pdFF1ZXJ5KG9wdGlvbnMpXG5cbiAgICBpZiAodGhpcy5oYXNQcm9maWxlKG9wdGlvbnMpICYmIG9wdGlvbnMuZmlsdGVycz8uY3VzdG9tT3B0aW9ucylcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSXQgY291bGRuJ3QgZmlsbGVkIGN1c3RvbU9wdGlvbnMgd2hlbiBwcm9maWxlIGlzIGdpdmVuYClcbiAgICBpZiAodGhpcy5oYXNQcm9maWxlKG9wdGlvbnMpICYmIG9wdGlvbnMuZmlsdGVycz8udGFncylcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSXQgY291bGRuJ3QgZmlsbGVkIHRhZ3Mgd2hlbiBwcm9maWxlIGlzIGdpdmVuYClcbiAgICBpZiAodGhpcy5oYXNUZXJtKG9wdGlvbnMpICYmIG9wdGlvbnMuZmlsdGVycz8uY3VzdG9tT3B0aW9ucylcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSXQgY291bGRuJ3QgZmlsbGVkIGN1c3RvbU9wdGlvbnMgd2hlbiB0ZXJtIGlzIGdpdmVuYClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRDYXRhbG9nKG9wdGlvbnMsIGxpbWl0cykudGhlbigoeyBkYXRhLCBjb3VudDogdG90YWwsIG1heGltdW0sIG1pbmltYWwsIGRpc3RpbmN0IH0pID0+ICh7XG4gICAgICBwcm9kdWN0czogeyBkYXRhOiBkYXRhLm1hcCgocHJvZHVjdCkgPT4gUm91bmRQcm9kdWN0UHJpY2VzSGVscGVyLnJvdW5kUHJvZHVjdFByaWNlcyhwcm9kdWN0KSksIHRvdGFsIH0sXG4gICAgICBwYWdlczogTWF0aC5jZWlsKHRvdGFsIC8gbGltaXRzLmxpbWl0KSxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBwcmljZTogeyBtaW46ICttaW5pbWFsPy5wcmljZT8ucHJpY2U/LnRvRml4ZWQoMiksIG1heDogK21heGltdW0/LnByaWNlPy5wcmljZT8udG9GaXhlZCgyKSB9LFxuICAgICAgICBzdWJzY3JpYmVyUHJpY2U6IHtcbiAgICAgICAgICBtaW46ICttaW5pbWFsPy5wcmljZT8uc3Vic2NyaWJlclByaWNlPy50b0ZpeGVkKDIpLFxuICAgICAgICAgIG1heDogK21heGltdW0/LnByaWNlPy5zdWJzY3JpYmVyUHJpY2U/LnRvRml4ZWQoMiksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnJhbmRzOiBkaXN0aW5jdD8uYnJhbmQsXG4gICAgfSkpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRDYXRhbG9nKFxuICAgIG9wdGlvbnM6IEZldGNoUHJvZHVjdHNQYXJhbXM8VD4sXG4gICAgbGltaXRzOiB7XG4gICAgICBsaW1pdD86IG51bWJlclxuICAgICAgb2Zmc2V0PzogbnVtYmVyXG4gICAgfSxcbiAgKTogUHJvbWlzZTxSZXBvc2l0b3J5RmluZFJlc3VsdDxQcm9kdWN0Pj4ge1xuICAgIGlmICh0aGlzLmhhc1Rlcm0ob3B0aW9ucykgJiYgb3B0aW9ucy5zb3J0ID09PSAnbW9zdC1yZWxldmFudCcpXG4gICAgICByZXR1cm4gdGhpcy5maW5kQ2F0YWxvZ0J5VGVybUFuZFNvcnRCeU1vc3RSZXZlbGFudChvcHRpb25zLCBsaW1pdHMpXG5cbiAgICBjb25zdCByZXBvUGFyYW1zOiBGaW5kUmVwb3NpdG9yeVBhcmFtczxQcm9kdWN0PiA9IHtcbiAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgLi4uKGF3YWl0IHRoaXMuYnVpbGRNYWluRmlsdGVyKG9wdGlvbnMpKSxcbiAgICAgICAgLi4udGhpcy5idWlsZEZpbHRlclF1ZXJ5KG9wdGlvbnM/LmZpbHRlcnMgfHwge30pLFxuICAgICAgfSxcbiAgICAgIC4uLihvcHRpb25zPy5zb3J0ID8geyBvcmRlckJ5OiB0aGlzLmJ1aWxkU29ydFF1ZXJ5KG9wdGlvbnM/LnNvcnQpIH0gOiB7fSksXG4gICAgICBsaW1pdHMsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIG1pbmltYWw6IFsncHJpY2UnXSxcbiAgICAgICAgbWF4aW11bTogWydwcmljZSddLFxuICAgICAgICAuLi4oIXRoaXMuaGFzQ2F0ZWdvcnkob3B0aW9ucykgPyB7IGRpc3RpbmN0OiBbJ2JyYW5kJ10gfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgaWYgKFsnYmlnZ2VzdC1wcmljZScsICdsb3dlc3QtcHJpY2UnLCAnYmlnZ2VzdC1kaXNjb3VudCcsICdiZXN0LXJhdGluZyddLmluY2x1ZGVzKG9wdGlvbnMuc29ydCkpXG4gICAgICByZXR1cm4gdGhpcy5wcm9kdWN0UmVwb3NpdG9yeS5maW5kQ2F0YWxvZyhyZXBvUGFyYW1zKVxuXG4gICAgcmV0dXJuIHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZmluZENhdGFsb2coXG4gICAgICByZXBvUGFyYW1zLFxuICAgICAgb3B0aW9ucz8ubWFpbkdlbmRlciB8fCB0aGlzLnNob3AgPT09IFNob3BzLk1FTlNNQVJLRVQgPyAnbWFsZScgOiAnZmVtYWxlJyxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkTWFpbkZpbHRlcih7XG4gICAgY2F0ZWdvcnksXG4gICAgcHJvZmlsZSxcbiAgICB0ZXJtLFxuICB9OiBGZXRjaFByb2R1Y3RzTWFpblBhcmFtczxUPik6IFByb21pc2U8UmVwb3NpdG9yeUZpbmRGaWVsdGVyczxQcm9kdWN0Pj4ge1xuICAgIGlmIChjYXRlZ29yeSkgcmV0dXJuIHRoaXMuY2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyLmJ1aWxkUHJvZHVjdEZpbHRlckJ5Q2F0ZWdvcnkoY2F0ZWdvcnkpXG4gICAgaWYgKHByb2ZpbGUpIHJldHVybiB7IHRhZ3M6IHsgb3BlcmF0b3I6IFdoZXJlLkxJS0UsIHZhbHVlOiBwcm9maWxlIH0gfVxuICAgIGlmICh0ZXJtKVxuICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdEluZGV4XG4gICAgICAgIC5zZWFyY2godGVybSwgOTk5LCB0aGlzLnNob3ApXG4gICAgICAgIC50aGVuKChkYXRhKSA9PiAoeyBpZDogeyBvcGVyYXRvcjogV2hlcmUuSU4sIHZhbHVlOiBkYXRhLmhpdHMubWFwKCh7IF9zb3VyY2UgfSkgPT4gX3NvdXJjZS5pZCkgfSB9KSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZENhdGFsb2dCeVRlcm1BbmRTb3J0QnlNb3N0UmV2ZWxhbnQoXG4gICAgb3B0aW9uczogT21pdDxGZXRjaFByb2R1Y3RzT3B0aW9ucywgJ3NvcnQnPiAmIHtcbiAgICAgIHRlcm06IEZldGNoUHJvZHVjdHNNYWluUGFyYW1zPFQ+Wyd0ZXJtJ11cbiAgICAgIGZpbHRlcnM/OiBGZXRjaFByb2R1Y3RzRmlsdGVycyAmIHsgY3VzdG9tT3B0aW9ucz86IG5ldmVyIH1cbiAgICB9LFxuICAgIGxpbWl0czoge1xuICAgICAgbGltaXQ/OiBudW1iZXJcbiAgICAgIG9mZnNldD86IG51bWJlclxuICAgIH0sXG4gICk6IFByb21pc2U8UmVwb3NpdG9yeUZpbmRSZXN1bHQ8UHJvZHVjdD4+IHtcbiAgICBjb25zdCBwcm9kdWN0SWRzID0gYXdhaXQgdGhpcy5maW5kQ2F0YWxvZ0lkc0J5RWxhc3RpY1NlYXJjaChvcHRpb25zLnRlcm0pXG4gICAgY29uc3QgbGltaXRlZFByb2R1Y3RJZCA9IHByb2R1Y3RJZHMuc2xpY2UobGltaXRzLm9mZnNldCwgbGltaXRzLm9mZnNldCArIGxpbWl0cy5saW1pdClcbiAgICBjb25zdCBwcm9kdWN0UmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9kdWN0UmVwb3NpdG9yeS5maW5kQ2F0YWxvZyhcbiAgICAgIHtcbiAgICAgICAgZmlsdGVyczogeyBpZDogeyBvcGVyYXRvcjogV2hlcmUuSU4sIHZhbHVlOiBsaW1pdGVkUHJvZHVjdElkIH0gfSxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zPy5tYWluR2VuZGVyIHx8IHRoaXMuc2hvcCA9PT0gU2hvcHMuTUVOU01BUktFVCA/ICdtYWxlJyA6ICdmZW1hbGUnLFxuICAgIClcbiAgICBjb25zdCB0b3RhbFJlc3VsdCA9IGF3YWl0IHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZmluZENhdGFsb2coXG4gICAgICB7XG4gICAgICAgIGZpZWxkczogWydpZCddLFxuICAgICAgICBmaWx0ZXJzOiB7IGlkOiB7IG9wZXJhdG9yOiBXaGVyZS5JTiwgdmFsdWU6IHByb2R1Y3RJZHMgfSB9LFxuICAgICAgICBsaW1pdHM6IHsgbGltaXQ6IDEsIG9mZnNldDogMCB9LFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgbWluaW1hbDogWydwcmljZSddLFxuICAgICAgICAgIG1heGltdW06IFsncHJpY2UnXSxcbiAgICAgICAgICBkaXN0aW5jdDogWydicmFuZCddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM/Lm1haW5HZW5kZXIgfHwgdGhpcy5zaG9wID09PSBTaG9wcy5NRU5TTUFSS0VUID8gJ21hbGUnIDogJ2ZlbWFsZScsXG4gICAgKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGxpbWl0ZWRQcm9kdWN0SWQubWFwKChpZCkgPT4gcHJvZHVjdFJlc3VsdC5kYXRhLmZpbmQoKHByb2R1Y3QpID0+IHByb2R1Y3QuaWQgPT09IGlkKSkuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgY291bnQ6IHRvdGFsUmVzdWx0LmNvdW50LFxuICAgICAgbWF4aW11bTogdG90YWxSZXN1bHQubWF4aW11bSxcbiAgICAgIG1pbmltYWw6IHRvdGFsUmVzdWx0Lm1pbmltYWwsXG4gICAgICBkaXN0aW5jdDogdG90YWxSZXN1bHQuZGlzdGluY3QsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kQ2F0YWxvZ0lkc0J5RWxhc3RpY1NlYXJjaCh0ZXJtOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKHRoaXMucHJvZHVjdHNCeVRlcm1bdGVybV0pIHJldHVybiB0aGlzLnByb2R1Y3RzQnlUZXJtW3Rlcm1dXG5cbiAgICByZXR1cm4gKHRoaXMucHJvZHVjdHNCeVRlcm1bdGVybV0gPSBhd2FpdCB0aGlzLnByb2R1Y3RJbmRleFxuICAgICAgLnNlYXJjaCh0ZXJtLCA5OTksIHRoaXMuc2hvcClcbiAgICAgIC50aGVuKCh7IGhpdHM6IHByb2R1Y3RzIH0pID0+IHtcbiAgICAgICAgY29uc3Qgd2l0aFN0b2NrID0gcHJvZHVjdHMuZmlsdGVyKCh7IF9zb3VyY2UgfSkgPT4gX3NvdXJjZS5zdG9jay5xdWFudGl0eSA+IDApXG4gICAgICAgIGNvbnN0IHdpdGhPdXRTdG9jayA9IHByb2R1Y3RzLmZpbHRlcigoeyBfc291cmNlIH0pID0+IF9zb3VyY2Uuc3RvY2sucXVhbnRpdHkgPD0gMClcbiAgICAgICAgY29uc3Qgc29ydGVkID0gWy4uLndpdGhTdG9jaywgLi4ud2l0aE91dFN0b2NrXVxuXG4gICAgICAgIHJldHVybiBbLi4ubmV3IFNldChzb3J0ZWQubWFwKCh7IF9zb3VyY2UgfSkgPT4gX3NvdXJjZS5pZCkpXVxuICAgICAgfSkpXG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsdGVyUXVlcnkgPSAoe1xuICAgIGNsdWJEaXNjb3VudCxcbiAgICBicmFuZHMsXG4gICAgcHJpY2VzLFxuICAgIGdlbmRlcixcbiAgICB0YWdzLFxuICAgIHJhdGUsXG4gICAgY3VzdG9tT3B0aW9ucyxcbiAgfTogRmV0Y2hQcm9kdWN0c0ZpbHRlcnMpOiBSZXBvc2l0b3J5RmluZEZpZWx0ZXJzPFByb2R1Y3Q+ID0+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge30gYXMgUmVwb3NpdG9yeUZpbmRGaWVsdGVyczxQcm9kdWN0PlxuXG4gICAgaWYgKGNsdWJEaXNjb3VudD8ubGVuZ3RoKVxuICAgICAgc2V0KGZpbHRlcnMsICdwcmljZS5zdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlJywgeyBvcGVyYXRvcjogV2hlcmUuSU4sIHZhbHVlOiBjbHViRGlzY291bnQgfSlcbiAgICBpZiAoYnJhbmRzPy5sZW5ndGgpIGZpbHRlcnMuYnJhbmQgPSB7IG9wZXJhdG9yOiBXaGVyZS5JTiwgdmFsdWU6IGJyYW5kcyB9XG4gICAgaWYgKGdlbmRlcj8ubGVuZ3RoKSBmaWx0ZXJzLmdlbmRlciA9IHsgb3BlcmF0b3I6IFdoZXJlLklOLCB2YWx1ZTogZ2VuZGVyIH1cbiAgICBpZiAocHJpY2VzPy5taW4gfHwgcHJpY2VzPy5tYXgpXG4gICAgICBzZXQoZmlsdGVycywgcHJpY2VzLnN1YnNjcmliZXJQcmljZSA/ICdwcmljZS5zdWJzY3JpYmVyUHJpY2UnIDogJ3ByaWNlLnByaWNlJywgW1xuICAgICAgICAuLi4ocHJpY2VzLm1pbiA/IFt7IG9wZXJhdG9yOiBXaGVyZS5HVEUsIHZhbHVlOiBNYXRoLnJvdW5kKHByaWNlcy5taW4pIH1dIDogW10pLFxuICAgICAgICAuLi4ocHJpY2VzLm1heCA/IFt7IG9wZXJhdG9yOiBXaGVyZS5MVEUsIHZhbHVlOiBNYXRoLmNlaWwocHJpY2VzLm1heCkgfV0gOiBbXSksXG4gICAgICBdKVxuICAgIGlmIChyYXRlKSBmaWx0ZXJzLnJhdGUgPSB7IG9wZXJhdG9yOiBXaGVyZS5HVEUsIHZhbHVlOiByYXRlIH1cbiAgICBpZiAodGFncz8ubGVuZ3RoKSBmaWx0ZXJzLnRhZ3MgPSB7IG9wZXJhdG9yOiBXaGVyZS5MSUtFLCB2YWx1ZTogdGFncyB9XG4gICAgaWYgKGN1c3RvbU9wdGlvbnM/Lmxlbmd0aCkgZmlsdGVycy5maWx0ZXJzID0geyBvcGVyYXRvcjogV2hlcmUuTElLRSwgdmFsdWU6IGN1c3RvbU9wdGlvbnMgfVxuXG4gICAgcmV0dXJuIGZpbHRlcnNcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTb3J0UXVlcnkgPSAoc29ydDogUHJvZHVjdFNvcnQpOiBSZXBvc2l0b3J5T3JkZXJCeTxQcm9kdWN0PiA9PiB7XG4gICAgaWYgKCFzb3J0IHx8IHNvcnQgPT09ICdtb3N0LXJlbGV2YW50JykgcmV0dXJuIHt9XG5cbiAgICBpZiAoc29ydCA9PT0gJ2Jlc3Qtc2VsbGVycycpIHJldHVybiB7IHNob3BwaW5nQ291bnQ6ICdkZXNjJyB9XG4gICAgaWYgKHNvcnQgPT09ICdiaWdnZXN0LXByaWNlJykgcmV0dXJuIHsgc3Vic2NyaWJlclByaWNlOiAnZGVzYycgfSBhcyBhbnlcbiAgICBpZiAoc29ydCA9PT0gJ2xvd2VzdC1wcmljZScpIHJldHVybiB7IHN1YnNjcmliZXJQcmljZTogJ2FzYycgfSBhcyBhbnlcbiAgICBpZiAoc29ydCA9PT0gJ2Jlc3QtcmF0aW5nJykgcmV0dXJuIHsgcmF0ZTogJ2Rlc2MnIH1cbiAgICBpZiAoc29ydCA9PT0gJ25ld3MnKSByZXR1cm4geyBjcmVhdGVkQXQ6ICdkZXNjJyB9XG4gICAgaWYgKHNvcnQgPT09ICdiaWdnZXN0LWRpc2NvdW50JykgcmV0dXJuIHsgc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZTogJ2Rlc2MnIH0gYXMgYW55XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTGltaXRRdWVyeSA9IChvcHRpb25zOiB7IHBhZ2U/OiBudW1iZXI7IHBlclBhZ2U/OiBudW1iZXIgfSk6IHsgbGltaXQ/OiBudW1iZXI7IG9mZnNldD86IG51bWJlciB9ID0+IHtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnM/LnBlclBhZ2UgfHwgMjBcblxuICAgIHJldHVybiB7XG4gICAgICBsaW1pdCxcbiAgICAgIG9mZnNldDogKChvcHRpb25zPy5wYWdlIHx8IDEpIC0gMSkgKiBsaW1pdCxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc1Byb2ZpbGUgPSAoXG4gICAgb3B0aW9uczogRmV0Y2hQcm9kdWN0c1BhcmFtczxUPixcbiAgKTogb3B0aW9ucyBpcyBGZXRjaFByb2R1Y3RzT3B0aW9ucyAmIHtcbiAgICBwcm9maWxlOiBGZXRjaFByb2R1Y3RzTWFpblBhcmFtczxUPlsncHJvZmlsZSddXG4gICAgZmlsdGVycz86IEZldGNoUHJvZHVjdHNGaWx0ZXJzICYgeyBjdXN0b21PcHRpb25zPzogbmV2ZXI7IHRhZ3M/OiBuZXZlciB9XG4gIH0gPT4gJ3Byb2ZpbGUnIGluIG9wdGlvbnNcblxuICBwcml2YXRlIGhhc1Rlcm0gPSAoXG4gICAgb3B0aW9uczogRmV0Y2hQcm9kdWN0c1BhcmFtczxUPixcbiAgKTogb3B0aW9ucyBpcyBGZXRjaFByb2R1Y3RzT3B0aW9ucyAmIHtcbiAgICB0ZXJtOiBGZXRjaFByb2R1Y3RzTWFpblBhcmFtczxUPlsndGVybSddXG4gICAgZmlsdGVycz86IEZldGNoUHJvZHVjdHNGaWx0ZXJzICYgeyBjdXN0b21PcHRpb25zPzogbmV2ZXIgfVxuICB9ID0+ICd0ZXJtJyBpbiBvcHRpb25zXG5cbiAgcHJpdmF0ZSBoYXNDYXRlZ29yeSA9IChcbiAgICBvcHRpb25zOiBGZXRjaFByb2R1Y3RzUGFyYW1zPFQ+LFxuICApOiBvcHRpb25zIGlzIEZldGNoUHJvZHVjdHNPcHRpb25zICYge1xuICAgIGNhdGVnb3J5OiBGZXRjaFByb2R1Y3RzTWFpblBhcmFtczxUPlsnY2F0ZWdvcnknXVxuICAgIGZpbHRlcnM/OiBGZXRjaFByb2R1Y3RzRmlsdGVyc1xuICB9ID0+ICdjYXRlZ29yeScgaW4gb3B0aW9uc1xufVxuIl19
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { InvalidArgumentError, ProductsIndex, RoundProductPricesHelper, set, Shops, Where, } from '@infrab4a/connect';
|
|
3
|
+
import { CATEGORY_STRUCTURE, DEFAULT_SHOP } from '../../consts';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@infrab4a/connect";
|
|
6
|
+
export class CatalogService {
|
|
7
|
+
constructor(productRepository, categoryStructureAdapter, shop, productIndex) {
|
|
8
|
+
this.productRepository = productRepository;
|
|
9
|
+
this.categoryStructureAdapter = categoryStructureAdapter;
|
|
10
|
+
this.shop = shop;
|
|
11
|
+
this.productIndex = productIndex;
|
|
12
|
+
this.productsByTerm = {};
|
|
13
|
+
this.buildFilterQuery = ({ clubDiscount, brands, prices, gender, tags, rate, customOptions, }) => {
|
|
14
|
+
const filters = {};
|
|
15
|
+
if (clubDiscount?.length)
|
|
16
|
+
set(filters, 'price.subscriberDiscountPercentage', { operator: Where.IN, value: clubDiscount });
|
|
17
|
+
if (brands?.length)
|
|
18
|
+
filters.brand = { operator: Where.IN, value: brands };
|
|
19
|
+
if (gender?.length)
|
|
20
|
+
filters.gender = { operator: Where.IN, value: gender };
|
|
21
|
+
if (prices?.min || prices?.max)
|
|
22
|
+
set(filters, prices.subscriberPrice ? 'price.subscriberPrice' : 'price.price', [
|
|
23
|
+
...(prices.min ? [{ operator: Where.GTE, value: Math.round(prices.min) }] : []),
|
|
24
|
+
...(prices.max ? [{ operator: Where.LTE, value: Math.ceil(prices.max) }] : []),
|
|
25
|
+
]);
|
|
26
|
+
if (rate)
|
|
27
|
+
filters.rate = { operator: Where.GTE, value: rate };
|
|
28
|
+
if (tags?.length)
|
|
29
|
+
filters.tags = { operator: Where.LIKE, value: tags };
|
|
30
|
+
if (customOptions?.length)
|
|
31
|
+
filters.filters = { operator: Where.LIKE, value: customOptions };
|
|
32
|
+
return filters;
|
|
33
|
+
};
|
|
34
|
+
this.buildSortQuery = (sort) => {
|
|
35
|
+
if (!sort || sort === 'most-relevant')
|
|
36
|
+
return {};
|
|
37
|
+
if (sort === 'best-sellers')
|
|
38
|
+
return { shoppingCount: 'desc' };
|
|
39
|
+
if (sort === 'biggest-price')
|
|
40
|
+
return { subscriberPrice: 'desc' };
|
|
41
|
+
if (sort === 'lowest-price')
|
|
42
|
+
return { subscriberPrice: 'asc' };
|
|
43
|
+
if (sort === 'best-rating')
|
|
44
|
+
return { rate: 'desc' };
|
|
45
|
+
if (sort === 'news')
|
|
46
|
+
return { createdAt: 'desc' };
|
|
47
|
+
if (sort === 'biggest-discount')
|
|
48
|
+
return { subscriberDiscountPercentage: 'desc' };
|
|
49
|
+
};
|
|
50
|
+
this.buildLimitQuery = (options) => {
|
|
51
|
+
const limit = options?.perPage || 20;
|
|
52
|
+
return {
|
|
53
|
+
limit,
|
|
54
|
+
offset: ((options?.page || 1) - 1) * limit,
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
this.hasProfile = (options) => 'profile' in options;
|
|
58
|
+
this.hasTerm = (options) => 'term' in options;
|
|
59
|
+
this.hasCategory = (options) => 'category' in options;
|
|
60
|
+
}
|
|
61
|
+
async fetchProducts(options) {
|
|
62
|
+
const limits = this.buildLimitQuery(options);
|
|
63
|
+
if (this.hasProfile(options) && options.filters?.customOptions)
|
|
64
|
+
throw new InvalidArgumentError(`It couldn't filled customOptions when profile is given`);
|
|
65
|
+
if (this.hasProfile(options) && options.filters?.tags)
|
|
66
|
+
throw new InvalidArgumentError(`It couldn't filled tags when profile is given`);
|
|
67
|
+
if (this.hasTerm(options) && options.filters?.customOptions)
|
|
68
|
+
throw new InvalidArgumentError(`It couldn't filled customOptions when term is given`);
|
|
69
|
+
return await this.findCatalog(options, limits).then(({ data, count: total, maximum, minimal, distinct }) => ({
|
|
70
|
+
products: { data: data.map((product) => RoundProductPricesHelper.roundProductPrices(product)), total },
|
|
71
|
+
pages: Math.ceil(total / limits.limit),
|
|
72
|
+
prices: {
|
|
73
|
+
price: { min: +minimal?.price?.price?.toFixed(2), max: +maximum?.price?.price?.toFixed(2) },
|
|
74
|
+
subscriberPrice: {
|
|
75
|
+
min: +minimal?.price?.subscriberPrice?.toFixed(2),
|
|
76
|
+
max: +maximum?.price?.subscriberPrice?.toFixed(2),
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
brands: distinct?.brand,
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
async findCatalog(options, limits) {
|
|
83
|
+
if (this.hasTerm(options) && options.sort === 'most-relevant')
|
|
84
|
+
return this.findCatalogByTermAndSortByMostRevelant(options, limits);
|
|
85
|
+
const repoParams = {
|
|
86
|
+
filters: {
|
|
87
|
+
...(await this.buildMainFilter(options)),
|
|
88
|
+
...this.buildFilterQuery(options?.filters || {}),
|
|
89
|
+
},
|
|
90
|
+
...(options?.sort ? { orderBy: this.buildSortQuery(options?.sort) } : {}),
|
|
91
|
+
limits,
|
|
92
|
+
options: {
|
|
93
|
+
minimal: ['price'],
|
|
94
|
+
maximum: ['price'],
|
|
95
|
+
...(!this.hasCategory(options) ? { distinct: ['brand'] } : {}),
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
if (['biggest-price', 'lowest-price', 'biggest-discount', 'best-rating'].includes(options.sort))
|
|
99
|
+
return this.productRepository.findCatalog(repoParams);
|
|
100
|
+
return this.productRepository.findCatalog(repoParams, options?.mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female');
|
|
101
|
+
}
|
|
102
|
+
async buildMainFilter({ category, profile, term, }) {
|
|
103
|
+
if (category)
|
|
104
|
+
return this.categoryStructureAdapter.buildProductFilterByCategory(category);
|
|
105
|
+
if (profile)
|
|
106
|
+
return { tags: { operator: Where.LIKE, value: profile } };
|
|
107
|
+
if (term)
|
|
108
|
+
return this.productIndex
|
|
109
|
+
.search(term, 999, this.shop)
|
|
110
|
+
.then((data) => ({ id: { operator: Where.IN, value: data.hits.map(({ _source }) => _source.id) } }));
|
|
111
|
+
}
|
|
112
|
+
async findCatalogByTermAndSortByMostRevelant(options, limits) {
|
|
113
|
+
const productIds = await this.findCatalogIdsByElasticSearch(options.term);
|
|
114
|
+
const limitedProductId = productIds.slice(limits.offset, limits.offset + limits.limit);
|
|
115
|
+
const productResult = await this.productRepository.findCatalog({
|
|
116
|
+
filters: {
|
|
117
|
+
id: { operator: Where.IN, value: limitedProductId },
|
|
118
|
+
...this.buildFilterQuery(options?.filters || {}),
|
|
119
|
+
},
|
|
120
|
+
}, options?.mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female');
|
|
121
|
+
const totalResult = await this.productRepository.findCatalog({
|
|
122
|
+
fields: ['id'],
|
|
123
|
+
filters: { id: { operator: Where.IN, value: productIds } },
|
|
124
|
+
limits: { limit: 1, offset: 0 },
|
|
125
|
+
options: {
|
|
126
|
+
minimal: ['price'],
|
|
127
|
+
maximum: ['price'],
|
|
128
|
+
distinct: ['brand'],
|
|
129
|
+
},
|
|
130
|
+
}, options?.mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female');
|
|
131
|
+
return {
|
|
132
|
+
data: limitedProductId.map((id) => productResult.data.find((product) => product.id === id)).filter(Boolean),
|
|
133
|
+
count: totalResult.count,
|
|
134
|
+
maximum: totalResult.maximum,
|
|
135
|
+
minimal: totalResult.minimal,
|
|
136
|
+
distinct: totalResult.distinct,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
async findCatalogIdsByElasticSearch(term) {
|
|
140
|
+
if (this.productsByTerm[term])
|
|
141
|
+
return this.productsByTerm[term];
|
|
142
|
+
return (this.productsByTerm[term] = await this.productIndex
|
|
143
|
+
.search(term, 999, this.shop)
|
|
144
|
+
.then(({ hits: products }) => {
|
|
145
|
+
const withStock = products.filter(({ _source }) => _source.stock.quantity > 0);
|
|
146
|
+
const withOutStock = products.filter(({ _source }) => _source.stock.quantity <= 0);
|
|
147
|
+
const sorted = [...withStock, ...withOutStock];
|
|
148
|
+
return [...new Set(sorted.map(({ _source }) => _source.id))];
|
|
149
|
+
}));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
CatalogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService, deps: [{ token: 'ProductRepository' }, { token: CATEGORY_STRUCTURE }, { token: DEFAULT_SHOP }, { token: i1.ProductsIndex }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
153
|
+
CatalogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService });
|
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService, decorators: [{
|
|
155
|
+
type: Injectable
|
|
156
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
157
|
+
type: Inject,
|
|
158
|
+
args: ['ProductRepository']
|
|
159
|
+
}] }, { type: undefined, decorators: [{
|
|
160
|
+
type: Inject,
|
|
161
|
+
args: [CATEGORY_STRUCTURE]
|
|
162
|
+
}] }, { type: i1.Shops, decorators: [{
|
|
163
|
+
type: Inject,
|
|
164
|
+
args: [DEFAULT_SHOP]
|
|
165
|
+
}] }, { type: i1.ProductsIndex }]; } });
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXRhbG9nL2NhdGFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBR0wsb0JBQW9CLEVBSXBCLGFBQWEsRUFJYix3QkFBd0IsRUFDeEIsR0FBRyxFQUNILEtBQUssRUFDTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBOzs7QUFzRC9ELE1BQU0sT0FBTyxjQUFjO0lBR3pCLFlBQ2dELGlCQUFvQyxFQUNyQyx3QkFBa0QsRUFDeEQsSUFBVyxFQUNqQyxZQUEyQjtRQUhFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDckMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUN4RCxTQUFJLEdBQUosSUFBSSxDQUFPO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBTnRDLG1CQUFjLEdBQTZCLEVBQUUsQ0FBQTtRQXlJN0MscUJBQWdCLEdBQUcsQ0FBQyxFQUMxQixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLElBQUksRUFDSixhQUFhLEdBQ1EsRUFBbUMsRUFBRTtZQUMxRCxNQUFNLE9BQU8sR0FBRyxFQUFxQyxDQUFBO1lBRXJELElBQUksWUFBWSxFQUFFLE1BQU07Z0JBQ3RCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQTtZQUNqRyxJQUFJLE1BQU0sRUFBRSxNQUFNO2dC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QUFJLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZO2FBQ3hELE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDNUIsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUMzQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDOUUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQTtZQUU5QyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5RCxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQzs7MkdBeElVLGNBQWMsa0JBSWYsbUJBQW1CLGFBQ25CLGtCQUFrQixhQUNsQixZQUFZOytHQU5YLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsVUFBVTs7MEJBS04sTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLE1BQU07MkJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7XHJcbiAgQ2F0ZWdvcnksXHJcbiAgRmluZFJlcG9zaXRvcnlQYXJhbXMsXHJcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXHJcbiAgUHJvZHVjdCxcclxuICBQcm9kdWN0R2VuZGVyLFxyXG4gIFByb2R1Y3RSZXBvc2l0b3J5LFxyXG4gIFByb2R1Y3RzSW5kZXgsXHJcbiAgUmVwb3NpdG9yeUZpbmRGaWVsdGVycyxcclxuICBSZXBvc2l0b3J5RmluZFJlc3VsdCxcclxuICBSZXBvc2l0b3J5T3JkZXJCeSxcclxuICBSb3VuZFByb2R1Y3RQcmljZXNIZWxwZXIsXHJcbiAgc2V0LFxyXG4gIFNob3BzLFxyXG4gIFdoZXJlLFxyXG59IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xyXG5pbXBvcnQgeyBDQVRFR09SWV9TVFJVQ1RVUkUsIERFRkFVTFRfU0hPUCB9IGZyb20gJy4uLy4uL2NvbnN0cydcclxuaW1wb3J0IHsgQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVycydcclxuaW1wb3J0IHsgUHJvZHVjdFNvcnQgfSBmcm9tICcuL3R5cGVzL3Byb2R1Y3Qtc29ydC50eXBlJ1xyXG5cclxudHlwZSBGZXRjaFByb2R1Y3RzRmlsdGVycyA9IHtcclxuICBjbHViRGlzY291bnQ/OiBudW1iZXJbXVxyXG4gIGJyYW5kcz86IHN0cmluZ1tdXHJcbiAgcHJpY2VzPzogeyBtaW4/OiBudW1iZXI7IG1heD86IG51bWJlcjsgc3Vic2NyaWJlclByaWNlPzogYm9vbGVhbiB9XHJcbiAgZ2VuZGVyPzogUHJvZHVjdEdlbmRlcltdXHJcbiAgcmF0ZT86IG51bWJlclxyXG4gIGN1c3RvbU9wdGlvbnM/OiBzdHJpbmdbXVxyXG4gIHRhZ3M/OiBzdHJpbmdbXVxyXG59XHJcblxyXG50eXBlIEZldGNoUHJvZHVjdHNPcHRpb25zID0ge1xyXG4gIHBhZ2U/OiBudW1iZXJcclxuICBwZXJQYWdlPzogbnVtYmVyXHJcbiAgc29ydD86IFByb2R1Y3RTb3J0XHJcbiAgbWFpbkdlbmRlcj86IFByb2R1Y3RHZW5kZXJcclxufVxyXG5cclxudHlwZSBGZXRjaFByb2R1Y3RzTWFpblBhcmFtczxUIGV4dGVuZHMgQ2F0ZWdvcnk+ID0ge1xyXG4gIGNhdGVnb3J5PzogVFxyXG4gIHByb2ZpbGU/OiBzdHJpbmdbXVxyXG4gIHRlcm0/OiBzdHJpbmdcclxufVxyXG5cclxudHlwZSBGZXRjaFByb2R1Y3RzUGFyYW1zPFQgZXh0ZW5kcyBDYXRlZ29yeT4gPSBGZXRjaFByb2R1Y3RzT3B0aW9ucyAmXHJcbiAgKFxyXG4gICAgfCB7XHJcbiAgICAgICAgY2F0ZWdvcnk6IEZldGNoUHJvZHVjdHNNYWluUGFyYW1zPFQ+WydjYXRlZ29yeSddXHJcbiAgICAgICAgZmlsdGVycz86IEZldGNoUHJvZHVjdHNGaWx0ZXJzXHJcbiAgICAgIH1cclxuICAgIHwge1xyXG4gICAgICAgIHByb2ZpbGU6IEZldGNoUHJvZHVjdHNNYWluUGFyYW1zPFQ+Wydwcm9maWxlJ11cclxuICAgICAgICBmaWx0ZXJzPzogRmV0Y2hQcm9kdWN0c0ZpbHRlcnMgJiB7IGN1c3RvbU9wdGlvbnM/OiBuZXZlcjsgdGFncz86IG5ldmVyIH1cclxuICAgICAgfVxyXG4gICAgfCB7XHJcbiAgICAgICAgdGVybTogRmV0Y2hQcm9kdWN0c01haW5QYXJhbXM8VD5bJ3Rlcm0nXVxyXG4gICAgICAgIGZpbHRlcnM/OiBGZXRjaFByb2R1Y3RzRmlsdGVycyAmIHsgY3VzdG9tT3B0aW9ucz86IG5ldmVyIH1cclxuICAgICAgfVxyXG4gIClcclxuXHJcbnR5cGUgRmV0Y2hQcm9kdWN0c1Jlc3BvbnNlID0ge1xyXG4gIHByb2R1Y3RzOiB7IGRhdGE6IFByb2R1Y3RbXTsgdG90YWw6IG51bWJlciB9XHJcbiAgcGFnZXM6IG51bWJlclxyXG4gIHByaWNlczoge1xyXG4gICAgcHJpY2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH1cclxuICAgIHN1YnNjcmliZXJQcmljZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfVxyXG4gIH1cclxuICBicmFuZHM/OiBzdHJpbmdbXVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDYXRhbG9nU2VydmljZTxUIGV4dGVuZHMgQ2F0ZWdvcnkgPSBDYXRlZ29yeT4ge1xyXG4gIHByaXZhdGUgcHJvZHVjdHNCeVRlcm06IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnUHJvZHVjdFJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3RSZXBvc2l0b3J5OiBQcm9kdWN0UmVwb3NpdG9yeSxcclxuICAgIEBJbmplY3QoQ0FURUdPUllfU1RSVUNUVVJFKSBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5U3RydWN0dXJlQWRhcHRlcjogQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyLFxyXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgc2hvcDogU2hvcHMsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3RJbmRleDogUHJvZHVjdHNJbmRleCxcclxuICApIHt9XHJcblxyXG4gIGFzeW5jIGZldGNoUHJvZHVjdHMob3B0aW9uczogRmV0Y2hQcm9kdWN0c1BhcmFtczxUPik6IFByb21pc2U8RmV0Y2hQcm9kdWN0c1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBsaW1pdHMgPSB0aGlzLmJ1aWxkTGltaXRRdWVyeShvcHRpb25zKVxyXG5cclxuICAgIGlmICh0aGlzLmhhc1Byb2ZpbGUob3B0aW9ucykgJiYgb3B0aW9ucy5maWx0ZXJzPy5jdXN0b21PcHRpb25zKVxyXG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYEl0IGNvdWxkbid0IGZpbGxlZCBjdXN0b21PcHRpb25zIHdoZW4gcHJvZmlsZSBpcyBnaXZlbmApXHJcbiAgICBpZiAodGhpcy5oYXNQcm9maWxlKG9wdGlvbnMpICYmIG9wdGlvbnMuZmlsdGVycz8udGFncylcclxuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBJdCBjb3VsZG4ndCBmaWxsZWQgdGFncyB3aGVuIHByb2ZpbGUgaXMgZ2l2ZW5gKVxyXG4gICAgaWYgKHRoaXMuaGFzVGVybShvcHRpb25zKSAmJiBvcHRpb25zLmZpbHRlcnM/LmN1c3RvbU9wdGlvbnMpXHJcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSXQgY291bGRuJ3QgZmlsbGVkIGN1c3RvbU9wdGlvbnMgd2hlbiB0ZXJtIGlzIGdpdmVuYClcclxuXHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQ2F0YWxvZyhvcHRpb25zLCBsaW1pdHMpLnRoZW4oKHsgZGF0YSwgY291bnQ6IHRvdGFsLCBtYXhpbXVtLCBtaW5pbWFsLCBkaXN0aW5jdCB9KSA9PiAoe1xyXG4gICAgICBwcm9kdWN0czogeyBkYXRhOiBkYXRhLm1hcCgocHJvZHVjdCkgPT4gUm91bmRQcm9kdWN0UHJpY2VzSGVscGVyLnJvdW5kUHJvZHVjdFByaWNlcyhwcm9kdWN0KSksIHRvdGFsIH0sXHJcbiAgICAgIHBhZ2VzOiBNYXRoLmNlaWwodG90YWwgLyBsaW1pdHMubGltaXQpLFxyXG4gICAgICBwcmljZXM6IHtcclxuICAgICAgICBwcmljZTogeyBtaW46ICttaW5pbWFsPy5wcmljZT8ucHJpY2U/LnRvRml4ZWQoMiksIG1heDogK21heGltdW0/LnByaWNlPy5wcmljZT8udG9GaXhlZCgyKSB9LFxyXG4gICAgICAgIHN1YnNjcmliZXJQcmljZToge1xyXG4gICAgICAgICAgbWluOiArbWluaW1hbD8ucHJpY2U/LnN1YnNjcmliZXJQcmljZT8udG9GaXhlZCgyKSxcclxuICAgICAgICAgIG1heDogK21heGltdW0/LnByaWNlPy5zdWJzY3JpYmVyUHJpY2U/LnRvRml4ZWQoMiksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAgYnJhbmRzOiBkaXN0aW5jdD8uYnJhbmQsXHJcbiAgICB9KSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZmluZENhdGFsb2coXHJcbiAgICBvcHRpb25zOiBGZXRjaFByb2R1Y3RzUGFyYW1zPFQ+LFxyXG4gICAgbGltaXRzOiB7XHJcbiAgICAgIGxpbWl0PzogbnVtYmVyXHJcbiAgICAgIG9mZnNldD86IG51bWJlclxyXG4gICAgfSxcclxuICApOiBQcm9taXNlPFJlcG9zaXRvcnlGaW5kUmVzdWx0PFByb2R1Y3Q+PiB7XHJcbiAgICBpZiAodGhpcy5oYXNUZXJtKG9wdGlvbnMpICYmIG9wdGlvbnMuc29ydCA9PT0gJ21vc3QtcmVsZXZhbnQnKVxyXG4gICAgICByZXR1cm4gdGhpcy5maW5kQ2F0YWxvZ0J5VGVybUFuZFNvcnRCeU1vc3RSZXZlbGFudChvcHRpb25zLCBsaW1pdHMpXHJcblxyXG4gICAgY29uc3QgcmVwb1BhcmFtczogRmluZFJlcG9zaXRvcnlQYXJhbXM8UHJvZHVjdD4gPSB7XHJcbiAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAuLi4oYXdhaXQgdGhpcy5idWlsZE1haW5GaWx0ZXIob3B0aW9ucykpLFxyXG4gICAgICAgIC4uLnRoaXMuYnVpbGRGaWx0ZXJRdWVyeShvcHRpb25zPy5maWx0ZXJzIHx8IHt9KSxcclxuICAgICAgfSxcclxuICAgICAgLi4uKG9wdGlvbnM/LnNvcnQgPyB7IG9yZGVyQnk6IHRoaXMuYnVpbGRTb3J0UXVlcnkob3B0aW9ucz8uc29ydCkgfSA6IHt9KSxcclxuICAgICAgbGltaXRzLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgbWluaW1hbDogWydwcmljZSddLFxyXG4gICAgICAgIG1heGltdW06IFsncHJpY2UnXSxcclxuICAgICAgICAuLi4oIXRoaXMuaGFzQ2F0ZWdvcnkob3B0aW9ucykgPyB7IGRpc3RpbmN0OiBbJ2JyYW5kJ10gfSA6IHt9KSxcclxuICAgICAgfSxcclxuICAgIH1cclxuXHJcbiAgICBpZiAoWydiaWdnZXN0LXByaWNlJywgJ2xvd2VzdC1wcmljZScsICdiaWdnZXN0LWRpc2NvdW50JywgJ2Jlc3QtcmF0aW5nJ10uaW5jbHVkZXMob3B0aW9ucy5zb3J0KSlcclxuICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZmluZENhdGFsb2cocmVwb1BhcmFtcylcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wcm9kdWN0UmVwb3NpdG9yeS5maW5kQ2F0YWxvZyhcclxuICAgICAgcmVwb1BhcmFtcyxcclxuICAgICAgb3B0aW9ucz8ubWFpbkdlbmRlciB8fCB0aGlzLnNob3AgPT09IFNob3BzLk1FTlNNQVJLRVQgPyAnbWFsZScgOiAnZmVtYWxlJyxcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRNYWluRmlsdGVyKHtcclxuICAgIGNhdGVnb3J5LFxyXG4gICAgcHJvZmlsZSxcclxuICAgIHRlcm0sXHJcbiAgfTogRmV0Y2hQcm9kdWN0c01haW5QYXJhbXM8VD4pOiBQcm9taXNlPFJlcG9zaXRvcnlGaW5kRmllbHRlcnM8UHJvZHVjdD4+IHtcclxuICAgIGlmIChjYXRlZ29yeSkgcmV0dXJuIHRoaXMuY2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyLmJ1aWxkUHJvZHVjdEZpbHRlckJ5Q2F0ZWdvcnkoY2F0ZWdvcnkpXHJcbiAgICBpZiAocHJvZmlsZSkgcmV0dXJuIHsgdGFnczogeyBvcGVyYXRvcjogV2hlcmUuTElLRSwgdmFsdWU6IHByb2ZpbGUgfSB9XHJcbiAgICBpZiAodGVybSlcclxuICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdEluZGV4XHJcbiAgICAgICAgLnNlYXJjaCh0ZXJtLCA5OTksIHRoaXMuc2hvcClcclxuICAgICAgICAudGhlbigoZGF0YSkgPT4gKHsgaWQ6IHsgb3BlcmF0b3I6IFdoZXJlLklOLCB2YWx1ZTogZGF0YS5oaXRzLm1hcCgoeyBfc291cmNlIH0pID0+IF9zb3VyY2UuaWQpIH0gfSkpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGZpbmRDYXRhbG9nQnlUZXJtQW5kU29ydEJ5TW9zdFJldmVsYW50KFxyXG4gICAgb3B0aW9uczogT21pdDxGZXRjaFByb2R1Y3RzT3B0aW9ucywgJ3NvcnQnPiAmIHtcclxuICAgICAgdGVybTogRmV0Y2hQcm9kdWN0c01haW5QYXJhbXM8VD5bJ3Rlcm0nXVxyXG4gICAgICBmaWx0ZXJzPzogRmV0Y2hQcm9kdWN0c0ZpbHRlcnMgJiB7IGN1c3RvbU9wdGlvbnM/OiBuZXZlciB9XHJcbiAgICB9LFxyXG4gICAgbGltaXRzOiB7XHJcbiAgICAgIGxpbWl0PzogbnVtYmVyXHJcbiAgICAgIG9mZnNldD86IG51bWJlclxyXG4gICAgfSxcclxuICApOiBQcm9taXNlPFJlcG9zaXRvcnlGaW5kUmVzdWx0PFByb2R1Y3Q+PiB7XHJcbiAgICBjb25zdCBwcm9kdWN0SWRzID0gYXdhaXQgdGhpcy5maW5kQ2F0YWxvZ0lkc0J5RWxhc3RpY1NlYXJjaChvcHRpb25zLnRlcm0pXHJcbiAgICBjb25zdCBsaW1pdGVkUHJvZHVjdElkID0gcHJvZHVjdElkcy5zbGljZShsaW1pdHMub2Zmc2V0LCBsaW1pdHMub2Zmc2V0ICsgbGltaXRzLmxpbWl0KVxyXG4gICAgY29uc3QgcHJvZHVjdFJlc3VsdCA9IGF3YWl0IHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZmluZENhdGFsb2coXHJcbiAgICAgIHtcclxuICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICBpZDogeyBvcGVyYXRvcjogV2hlcmUuSU4sIHZhbHVlOiBsaW1pdGVkUHJvZHVjdElkIH0sXHJcbiAgICAgICAgICAuLi50aGlzLmJ1aWxkRmlsdGVyUXVlcnkob3B0aW9ucz8uZmlsdGVycyB8fCB7fSksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9ucz8ubWFpbkdlbmRlciB8fCB0aGlzLnNob3AgPT09IFNob3BzLk1FTlNNQVJLRVQgPyAnbWFsZScgOiAnZmVtYWxlJyxcclxuICAgIClcclxuICAgIGNvbnN0IHRvdGFsUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9kdWN0UmVwb3NpdG9yeS5maW5kQ2F0YWxvZyhcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkczogWydpZCddLFxyXG4gICAgICAgIGZpbHRlcnM6IHsgaWQ6IHsgb3BlcmF0b3I6IFdoZXJlLklOLCB2YWx1ZTogcHJvZHVjdElkcyB9IH0sXHJcbiAgICAgICAgbGltaXRzOiB7IGxpbWl0OiAxLCBvZmZzZXQ6IDAgfSxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBtaW5pbWFsOiBbJ3ByaWNlJ10sXHJcbiAgICAgICAgICBtYXhpbXVtOiBbJ3ByaWNlJ10sXHJcbiAgICAgICAgICBkaXN0aW5jdDogWydicmFuZCddLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIG9wdGlvbnM/Lm1haW5HZW5kZXIgfHwgdGhpcy5zaG9wID09PSBTaG9wcy5NRU5TTUFSS0VUID8gJ21hbGUnIDogJ2ZlbWFsZScsXHJcbiAgICApXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGF0YTogbGltaXRlZFByb2R1Y3RJZC5tYXAoKGlkKSA9PiBwcm9kdWN0UmVzdWx0LmRhdGEuZmluZCgocHJvZHVjdCkgPT4gcHJvZHVjdC5pZCA9PT0gaWQpKS5maWx0ZXIoQm9vbGVhbiksXHJcbiAgICAgIGNvdW50OiB0b3RhbFJlc3VsdC5jb3VudCxcclxuICAgICAgbWF4aW11bTogdG90YWxSZXN1bHQubWF4aW11bSxcclxuICAgICAgbWluaW1hbDogdG90YWxSZXN1bHQubWluaW1hbCxcclxuICAgICAgZGlzdGluY3Q6IHRvdGFsUmVzdWx0LmRpc3RpbmN0LFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBmaW5kQ2F0YWxvZ0lkc0J5RWxhc3RpY1NlYXJjaCh0ZXJtOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICBpZiAodGhpcy5wcm9kdWN0c0J5VGVybVt0ZXJtXSkgcmV0dXJuIHRoaXMucHJvZHVjdHNCeVRlcm1bdGVybV1cclxuXHJcbiAgICByZXR1cm4gKHRoaXMucHJvZHVjdHNCeVRlcm1bdGVybV0gPSBhd2FpdCB0aGlzLnByb2R1Y3RJbmRleFxyXG4gICAgICAuc2VhcmNoKHRlcm0sIDk5OSwgdGhpcy5zaG9wKVxyXG4gICAgICAudGhlbigoeyBoaXRzOiBwcm9kdWN0cyB9KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgd2l0aFN0b2NrID0gcHJvZHVjdHMuZmlsdGVyKCh7IF9zb3VyY2UgfSkgPT4gX3NvdXJjZS5zdG9jay5xdWFudGl0eSA+IDApXHJcbiAgICAgICAgY29uc3Qgd2l0aE91dFN0b2NrID0gcHJvZHVjdHMuZmlsdGVyKCh7IF9zb3VyY2UgfSkgPT4gX3NvdXJjZS5zdG9jay5xdWFudGl0eSA8PSAwKVxyXG4gICAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi53aXRoU3RvY2ssIC4uLndpdGhPdXRTdG9ja11cclxuXHJcbiAgICAgICAgcmV0dXJuIFsuLi5uZXcgU2V0KHNvcnRlZC5tYXAoKHsgX3NvdXJjZSB9KSA9PiBfc291cmNlLmlkKSldXHJcbiAgICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZpbHRlclF1ZXJ5ID0gKHtcclxuICAgIGNsdWJEaXNjb3VudCxcclxuICAgIGJyYW5kcyxcclxuICAgIHByaWNlcyxcclxuICAgIGdlbmRlcixcclxuICAgIHRhZ3MsXHJcbiAgICByYXRlLFxyXG4gICAgY3VzdG9tT3B0aW9ucyxcclxuICB9OiBGZXRjaFByb2R1Y3RzRmlsdGVycyk6IFJlcG9zaXRvcnlGaW5kRmllbHRlcnM8UHJvZHVjdD4gPT4ge1xyXG4gICAgY29uc3QgZmlsdGVycyA9IHt9IGFzIFJlcG9zaXRvcnlGaW5kRmllbHRlcnM8UHJvZHVjdD5cclxuXHJcbiAgICBpZiAoY2x1YkRpc2NvdW50Py5sZW5ndGgpXHJcbiAgICAgIHNldChmaWx0ZXJzLCAncHJpY2Uuc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZScsIHsgb3BlcmF0b3I6IFdoZXJlLklOLCB2YWx1ZTogY2x1YkRpc2NvdW50IH0pXHJcbiAgICBpZiAoYnJhbmRzPy5sZW5ndGgpIGZpbHRlcnMuYnJhbmQgPSB7IG9wZXJhdG9yOiBXaGVyZS5JTiwgdmFsdWU6IGJyYW5kcyB9XHJcbiAgICBpZiAoZ2VuZGVyPy5sZW5ndGgpIGZpbHRlcnMuZ2VuZGVyID0geyBvcGVyYXRvcjogV2hlcmUuSU4sIHZhbHVlOiBnZW5kZXIgfVxyXG4gICAgaWYgKHByaWNlcz8ubWluIHx8IHByaWNlcz8ubWF4KVxyXG4gICAgICBzZXQoZmlsdGVycywgcHJpY2VzLnN1YnNjcmliZXJQcmljZSA/ICdwcmljZS5zdWJzY3JpYmVyUHJpY2UnIDogJ3ByaWNlLnByaWNlJywgW1xyXG4gICAgICAgIC4uLihwcmljZXMubWluID8gW3sgb3BlcmF0b3I6IFdoZXJlLkdURSwgdmFsdWU6IE1hdGgucm91bmQocHJpY2VzLm1pbikgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKHByaWNlcy5tYXggPyBbeyBvcGVyYXRvcjogV2hlcmUuTFRFLCB2YWx1ZTogTWF0aC5jZWlsKHByaWNlcy5tYXgpIH1dIDogW10pLFxyXG4gICAgICBdKVxyXG4gICAgaWYgKHJhdGUpIGZpbHRlcnMucmF0ZSA9IHsgb3BlcmF0b3I6IFdoZXJlLkdURSwgdmFsdWU6IHJhdGUgfVxyXG4gICAgaWYgKHRhZ3M/Lmxlbmd0aCkgZmlsdGVycy50YWdzID0geyBvcGVyYXRvcjogV2hlcmUuTElLRSwgdmFsdWU6IHRhZ3MgfVxyXG4gICAgaWYgKGN1c3RvbU9wdGlvbnM/Lmxlbmd0aCkgZmlsdGVycy5maWx0ZXJzID0geyBvcGVyYXRvcjogV2hlcmUuTElLRSwgdmFsdWU6IGN1c3RvbU9wdGlvbnMgfVxyXG5cclxuICAgIHJldHVybiBmaWx0ZXJzXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkU29ydFF1ZXJ5ID0gKHNvcnQ6IFByb2R1Y3RTb3J0KTogUmVwb3NpdG9yeU9yZGVyQnk8UHJvZHVjdD4gPT4ge1xyXG4gICAgaWYgKCFzb3J0IHx8IHNvcnQgPT09ICdtb3N0LXJlbGV2YW50JykgcmV0dXJuIHt9XHJcblxyXG4gICAgaWYgKHNvcnQgPT09ICdiZXN0LXNlbGxlcnMnKSByZXR1cm4geyBzaG9wcGluZ0NvdW50OiAnZGVzYycgfVxyXG4gICAgaWYgKHNvcnQgPT09ICdiaWdnZXN0LXByaWNlJykgcmV0dXJuIHsgc3Vic2NyaWJlclByaWNlOiAnZGVzYycgfSBhcyBhbnlcclxuICAgIGlmIChzb3J0ID09PSAnbG93ZXN0LXByaWNlJykgcmV0dXJuIHsgc3Vic2NyaWJlclByaWNlOiAnYXNjJyB9IGFzIGFueVxyXG4gICAgaWYgKHNvcnQgPT09ICdiZXN0LXJhdGluZycpIHJldHVybiB7IHJhdGU6ICdkZXNjJyB9XHJcbiAgICBpZiAoc29ydCA9PT0gJ25ld3MnKSByZXR1cm4geyBjcmVhdGVkQXQ6ICdkZXNjJyB9XHJcbiAgICBpZiAoc29ydCA9PT0gJ2JpZ2dlc3QtZGlzY291bnQnKSByZXR1cm4geyBzdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlOiAnZGVzYycgfSBhcyBhbnlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRMaW1pdFF1ZXJ5ID0gKG9wdGlvbnM6IHsgcGFnZT86IG51bWJlcjsgcGVyUGFnZT86IG51bWJlciB9KTogeyBsaW1pdD86IG51bWJlcjsgb2Zmc2V0PzogbnVtYmVyIH0gPT4ge1xyXG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zPy5wZXJQYWdlIHx8IDIwXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbGltaXQsXHJcbiAgICAgIG9mZnNldDogKChvcHRpb25zPy5wYWdlIHx8IDEpIC0gMSkgKiBsaW1pdCxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUHJvZmlsZSA9IChcclxuICAgIG9wdGlvbnM6IEZldGNoUHJvZHVjdHNQYXJhbXM8VD4sXHJcbiAgKTogb3B0aW9ucyBpcyBGZXRjaFByb2R1Y3RzT3B0aW9ucyAmIHtcclxuICAgIHByb2ZpbGU6IEZldGNoUHJvZHVjdHNNYWluUGFyYW1zPFQ+Wydwcm9maWxlJ11cclxuICAgIGZpbHRlcnM/OiBGZXRjaFByb2R1Y3RzRmlsdGVycyAmIHsgY3VzdG9tT3B0aW9ucz86IG5ldmVyOyB0YWdzPzogbmV2ZXIgfVxyXG4gIH0gPT4gJ3Byb2ZpbGUnIGluIG9wdGlvbnNcclxuXHJcbiAgcHJpdmF0ZSBoYXNUZXJtID0gKFxyXG4gICAgb3B0aW9uczogRmV0Y2hQcm9kdWN0c1BhcmFtczxUPixcclxuICApOiBvcHRpb25zIGlzIEZldGNoUHJvZHVjdHNPcHRpb25zICYge1xyXG4gICAgdGVybTogRmV0Y2hQcm9kdWN0c01haW5QYXJhbXM8VD5bJ3Rlcm0nXVxyXG4gICAgZmlsdGVycz86IEZldGNoUHJvZHVjdHNGaWx0ZXJzICYgeyBjdXN0b21PcHRpb25zPzogbmV2ZXIgfVxyXG4gIH0gPT4gJ3Rlcm0nIGluIG9wdGlvbnNcclxuXHJcbiAgcHJpdmF0ZSBoYXNDYXRlZ29yeSA9IChcclxuICAgIG9wdGlvbnM6IEZldGNoUHJvZHVjdHNQYXJhbXM8VD4sXHJcbiAgKTogb3B0aW9ucyBpcyBGZXRjaFByb2R1Y3RzT3B0aW9ucyAmIHtcclxuICAgIGNhdGVnb3J5OiBGZXRjaFByb2R1Y3RzTWFpblBhcmFtczxUPlsnY2F0ZWdvcnknXVxyXG4gICAgZmlsdGVycz86IEZldGNoUHJvZHVjdHNGaWx0ZXJzXHJcbiAgfSA9PiAnY2F0ZWdvcnknIGluIG9wdGlvbnNcclxufVxyXG4iXX0=
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { Shops, } from '@infrab4a/connect';
|
|
3
|
-
import { CATEGORY_STRUCTURE, DEFAULT_SHOP } from '../../consts';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@infrab4a/connect";
|
|
6
|
-
export class CategoryService {
|
|
7
|
-
constructor(productRepository, categoryRepository, categoryFilterRepository, categoryStructureAdapter, shop) {
|
|
8
|
-
this.productRepository = productRepository;
|
|
9
|
-
this.categoryRepository = categoryRepository;
|
|
10
|
-
this.categoryFilterRepository = categoryFilterRepository;
|
|
11
|
-
this.categoryStructureAdapter = categoryStructureAdapter;
|
|
12
|
-
this.shop = shop;
|
|
13
|
-
}
|
|
14
|
-
async fetchBrands(category, mainGender) {
|
|
15
|
-
const brands = await this.productRepository
|
|
16
|
-
.findCatalog({
|
|
17
|
-
filters: await this.categoryStructureAdapter.buildProductFilterByCategory(category),
|
|
18
|
-
fields: ['brand'],
|
|
19
|
-
}, mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female')
|
|
20
|
-
.then(({ data }) => Object.keys(data.map((product) => product.brand).reduce((brands, brand) => ({ ...brands, [brand]: true }), {})));
|
|
21
|
-
return this.categoryRepository
|
|
22
|
-
.find({ filters: { brandCategory: true, shop: this.shop }, orderBy: { name: 'asc' } })
|
|
23
|
-
.then(({ data }) => data.filter((category) => brands.includes(category.conditions.brand)));
|
|
24
|
-
}
|
|
25
|
-
async fetchFilterOptions(category) {
|
|
26
|
-
return await this.categoryFilterRepository
|
|
27
|
-
.find({ filters: { categoryId: +category.id } })
|
|
28
|
-
.then(({ data }) => data.map((categoryFilter) => categoryFilter.filter));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
CategoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, deps: [{ token: 'ProductRepository' }, { token: 'CategoryRepository' }, { token: 'CategoryFilterRepository' }, { token: CATEGORY_STRUCTURE }, { token: DEFAULT_SHOP }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
32
|
-
CategoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService });
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, decorators: [{
|
|
34
|
-
type: Injectable
|
|
35
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
36
|
-
type: Inject,
|
|
37
|
-
args: ['ProductRepository']
|
|
38
|
-
}] }, { type: undefined, decorators: [{
|
|
39
|
-
type: Inject,
|
|
40
|
-
args: ['CategoryRepository']
|
|
41
|
-
}] }, { type: undefined, decorators: [{
|
|
42
|
-
type: Inject,
|
|
43
|
-
args: ['CategoryFilterRepository']
|
|
44
|
-
}] }, { type: undefined, decorators: [{
|
|
45
|
-
type: Inject,
|
|
46
|
-
args: [CATEGORY_STRUCTURE]
|
|
47
|
-
}] }, { type: i1.Shops, decorators: [{
|
|
48
|
-
type: Inject,
|
|
49
|
-
args: [DEFAULT_SHOP]
|
|
50
|
-
}] }]; } });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { Shops, } from '@infrab4a/connect';
|
|
3
|
+
import { CATEGORY_STRUCTURE, DEFAULT_SHOP } from '../../consts';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@infrab4a/connect";
|
|
6
|
+
export class CategoryService {
|
|
7
|
+
constructor(productRepository, categoryRepository, categoryFilterRepository, categoryStructureAdapter, shop) {
|
|
8
|
+
this.productRepository = productRepository;
|
|
9
|
+
this.categoryRepository = categoryRepository;
|
|
10
|
+
this.categoryFilterRepository = categoryFilterRepository;
|
|
11
|
+
this.categoryStructureAdapter = categoryStructureAdapter;
|
|
12
|
+
this.shop = shop;
|
|
13
|
+
}
|
|
14
|
+
async fetchBrands(category, mainGender) {
|
|
15
|
+
const brands = await this.productRepository
|
|
16
|
+
.findCatalog({
|
|
17
|
+
filters: await this.categoryStructureAdapter.buildProductFilterByCategory(category),
|
|
18
|
+
fields: ['brand'],
|
|
19
|
+
}, mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female')
|
|
20
|
+
.then(({ data }) => Object.keys(data.map((product) => product.brand).reduce((brands, brand) => ({ ...brands, [brand]: true }), {})));
|
|
21
|
+
return this.categoryRepository
|
|
22
|
+
.find({ filters: { brandCategory: true, shop: this.shop }, orderBy: { name: 'asc' } })
|
|
23
|
+
.then(({ data }) => data.filter((category) => brands.includes(category.conditions.brand)));
|
|
24
|
+
}
|
|
25
|
+
async fetchFilterOptions(category) {
|
|
26
|
+
return await this.categoryFilterRepository
|
|
27
|
+
.find({ filters: { categoryId: +category.id } })
|
|
28
|
+
.then(({ data }) => data.map((categoryFilter) => categoryFilter.filter));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
CategoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, deps: [{ token: 'ProductRepository' }, { token: 'CategoryRepository' }, { token: 'CategoryFilterRepository' }, { token: CATEGORY_STRUCTURE }, { token: DEFAULT_SHOP }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
32
|
+
CategoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService });
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, decorators: [{
|
|
34
|
+
type: Injectable
|
|
35
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
36
|
+
type: Inject,
|
|
37
|
+
args: ['ProductRepository']
|
|
38
|
+
}] }, { type: undefined, decorators: [{
|
|
39
|
+
type: Inject,
|
|
40
|
+
args: ['CategoryRepository']
|
|
41
|
+
}] }, { type: undefined, decorators: [{
|
|
42
|
+
type: Inject,
|
|
43
|
+
args: ['CategoryFilterRepository']
|
|
44
|
+
}] }, { type: undefined, decorators: [{
|
|
45
|
+
type: Inject,
|
|
46
|
+
args: [CATEGORY_STRUCTURE]
|
|
47
|
+
}] }, { type: i1.Shops, decorators: [{
|
|
48
|
+
type: Inject,
|
|
49
|
+
args: [DEFAULT_SHOP]
|
|
50
|
+
}] }]; } });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvc2VydmljZXMvY2F0YWxvZy9jYXRlZ29yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFPTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBOzs7QUFJL0QsTUFBTSxPQUFPLGVBQWU7SUFDMUIsWUFDZ0QsaUJBQW9DLEVBQ25DLGtCQUFzQyxFQUNoQyx3QkFBa0QsRUFDMUQsd0JBQWtELEVBQ3hELElBQVc7UUFKSixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ25DLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDaEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUMxRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ3hELFNBQUksR0FBSixJQUFJLENBQU87SUFDakQsQ0FBQztJQUVKLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBa0IsRUFBRSxVQUEwQjtRQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUI7YUFDeEMsV0FBVyxDQUNWO1lBQ0UsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQztZQUNuRixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDbEIsRUFDRCxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDakU7YUFDQSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUNoSCxDQUFBO1FBRUgsT0FBTyxJQUFJLENBQUMsa0JBQWtCO2FBQzNCLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQzthQUNyRixJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlGLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBa0I7UUFDekMsT0FBTyxNQUFNLElBQUksQ0FBQyx3QkFBd0I7YUFDdkMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDL0MsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQzs7NEdBL0JVLGVBQWUsa0JBRWhCLG1CQUFtQixhQUNuQixvQkFBb0IsYUFDcEIsMEJBQTBCLGFBQzFCLGtCQUFrQixhQUNsQixZQUFZO2dIQU5YLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBR04sTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG9CQUFvQjs7MEJBQzNCLE1BQU07MkJBQUMsMEJBQTBCOzswQkFDakMsTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUN6QixNQUFNOzJCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIENhdGVnb3J5LFxyXG4gIENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSxcclxuICBDYXRlZ29yeVJlcG9zaXRvcnksXHJcbiAgRmlsdGVyLFxyXG4gIFByb2R1Y3RHZW5kZXIsXHJcbiAgUHJvZHVjdFJlcG9zaXRvcnksXHJcbiAgU2hvcHMsXHJcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXHJcbmltcG9ydCB7IENBVEVHT1JZX1NUUlVDVFVSRSwgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vLi4vY29uc3RzJ1xyXG5pbXBvcnQgeyBDYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXJzJ1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnlTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ1Byb2R1Y3RSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0UmVwb3NpdG9yeTogUHJvZHVjdFJlcG9zaXRvcnksXHJcbiAgICBASW5qZWN0KCdDYXRlZ29yeVJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5UmVwb3NpdG9yeTogQ2F0ZWdvcnlSZXBvc2l0b3J5LFxyXG4gICAgQEluamVjdCgnQ2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnk6IENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSxcclxuICAgIEBJbmplY3QoQ0FURUdPUllfU1RSVUNUVVJFKSBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5U3RydWN0dXJlQWRhcHRlcjogQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyLFxyXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgc2hvcDogU2hvcHMsXHJcbiAgKSB7fVxyXG5cclxuICBhc3luYyBmZXRjaEJyYW5kcyhjYXRlZ29yeTogQ2F0ZWdvcnksIG1haW5HZW5kZXI/OiBQcm9kdWN0R2VuZGVyKTogUHJvbWlzZTxDYXRlZ29yeVtdPiB7XHJcbiAgICBjb25zdCBicmFuZHMgPSBhd2FpdCB0aGlzLnByb2R1Y3RSZXBvc2l0b3J5XHJcbiAgICAgIC5maW5kQ2F0YWxvZyhcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWx0ZXJzOiBhd2FpdCB0aGlzLmNhdGVnb3J5U3RydWN0dXJlQWRhcHRlci5idWlsZFByb2R1Y3RGaWx0ZXJCeUNhdGVnb3J5KGNhdGVnb3J5KSxcclxuICAgICAgICAgIGZpZWxkczogWydicmFuZCddLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWFpbkdlbmRlciB8fCB0aGlzLnNob3AgPT09IFNob3BzLk1FTlNNQVJLRVQgPyAnbWFsZScgOiAnZmVtYWxlJyxcclxuICAgICAgKVxyXG4gICAgICAudGhlbigoeyBkYXRhIH0pID0+XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZGF0YS5tYXAoKHByb2R1Y3QpID0+IHByb2R1Y3QuYnJhbmQpLnJlZHVjZSgoYnJhbmRzLCBicmFuZCkgPT4gKHsgLi4uYnJhbmRzLCBbYnJhbmRdOiB0cnVlIH0pLCB7fSkpLFxyXG4gICAgICApXHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlSZXBvc2l0b3J5XHJcbiAgICAgIC5maW5kKHsgZmlsdGVyczogeyBicmFuZENhdGVnb3J5OiB0cnVlLCBzaG9wOiB0aGlzLnNob3AgfSwgb3JkZXJCeTogeyBuYW1lOiAnYXNjJyB9IH0pXHJcbiAgICAgIC50aGVuKCh7IGRhdGEgfSkgPT4gZGF0YS5maWx0ZXIoKGNhdGVnb3J5KSA9PiBicmFuZHMuaW5jbHVkZXMoY2F0ZWdvcnkuY29uZGl0aW9ucy5icmFuZCkpKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZmV0Y2hGaWx0ZXJPcHRpb25zKGNhdGVnb3J5OiBDYXRlZ29yeSk6IFByb21pc2U8RmlsdGVyW10+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeVxyXG4gICAgICAuZmluZCh7IGZpbHRlcnM6IHsgY2F0ZWdvcnlJZDogK2NhdGVnb3J5LmlkIH0gfSlcclxuICAgICAgLnRoZW4oKHsgZGF0YSB9KSA9PiBkYXRhLm1hcCgoY2F0ZWdvcnlGaWx0ZXIpID0+IGNhdGVnb3J5RmlsdGVyLmZpbHRlcikpXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './product-sorts.enum';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './product-sorts.enum';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NhdGFsb2cvZW51bXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHJvZHVjdC1zb3J0cy5lbnVtJ1xyXG4iXX0=
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export var ProductSorts;
|
|
2
|
-
(function (ProductSorts) {
|
|
3
|
-
ProductSorts["MOST_RELEVANT"] = "most-relevant";
|
|
4
|
-
ProductSorts["BEST_SELLER"] = "best-sellers";
|
|
5
|
-
ProductSorts["BIGGEST_PRICE"] = "biggest-price";
|
|
6
|
-
ProductSorts["LOWEST_PRICE"] = "lowest-price";
|
|
7
|
-
ProductSorts["BIGGEST_DISCOUNT"] = "biggest-discount";
|
|
8
|
-
ProductSorts["BEST_RATING"] = "best-rating";
|
|
9
|
-
ProductSorts["NEWS"] = "news";
|
|
10
|
-
})(ProductSorts || (ProductSorts = {}));
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export var ProductSorts;
|
|
2
|
+
(function (ProductSorts) {
|
|
3
|
+
ProductSorts["MOST_RELEVANT"] = "most-relevant";
|
|
4
|
+
ProductSorts["BEST_SELLER"] = "best-sellers";
|
|
5
|
+
ProductSorts["BIGGEST_PRICE"] = "biggest-price";
|
|
6
|
+
ProductSorts["LOWEST_PRICE"] = "lowest-price";
|
|
7
|
+
ProductSorts["BIGGEST_DISCOUNT"] = "biggest-discount";
|
|
8
|
+
ProductSorts["BEST_RATING"] = "best-rating";
|
|
9
|
+
ProductSorts["NEWS"] = "news";
|
|
10
|
+
})(ProductSorts || (ProductSorts = {}));
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zb3J0cy5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXRhbG9nL2VudW1zL3Byb2R1Y3Qtc29ydHMuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxZQVFYO0FBUkQsV0FBWSxZQUFZO0lBQ3RCLCtDQUErQixDQUFBO0lBQy9CLDRDQUE0QixDQUFBO0lBQzVCLCtDQUErQixDQUFBO0lBQy9CLDZDQUE2QixDQUFBO0lBQzdCLHFEQUFxQyxDQUFBO0lBQ3JDLDJDQUEyQixDQUFBO0lBQzNCLDZCQUFhLENBQUE7QUFDZixDQUFDLEVBUlcsWUFBWSxLQUFaLFlBQVksUUFRdkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBQcm9kdWN0U29ydHMge1xyXG4gIE1PU1RfUkVMRVZBTlQgPSAnbW9zdC1yZWxldmFudCcsXHJcbiAgQkVTVF9TRUxMRVIgPSAnYmVzdC1zZWxsZXJzJyxcclxuICBCSUdHRVNUX1BSSUNFID0gJ2JpZ2dlc3QtcHJpY2UnLFxyXG4gIExPV0VTVF9QUklDRSA9ICdsb3dlc3QtcHJpY2UnLFxyXG4gIEJJR0dFU1RfRElTQ09VTlQgPSAnYmlnZ2VzdC1kaXNjb3VudCcsXHJcbiAgQkVTVF9SQVRJTkcgPSAnYmVzdC1yYXRpbmcnLFxyXG4gIE5FV1MgPSAnbmV3cycsXHJcbn1cclxuIl19
|