@colijnit/product 12.0.7 → 12.0.8
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/app/components/core/header/header.component.d.ts +7 -7
- package/app/components/core/header/header.module.d.ts +2 -2
- package/app/components/image-carousel/image-carousel.component.d.ts +39 -39
- package/app/components/image-carousel/image-carousel.module.d.ts +2 -2
- package/app/components/product-additional-description/product-additional-description.component.d.ts +14 -14
- package/app/components/product-additional-description/product-additional-description.module.d.ts +2 -2
- package/app/components/product-additional-info/product-additional-info.component.d.ts +21 -21
- package/app/components/product-additional-info/product-additional-info.module.d.ts +2 -2
- package/app/components/product-addtocart/product-addtocart.component.d.ts +33 -33
- package/app/components/product-addtocart/product-addtocart.module.d.ts +2 -2
- package/app/components/product-delivery/product-delivery.component.d.ts +18 -18
- package/app/components/product-delivery/product-delivery.module.d.ts +2 -2
- package/app/components/product-description/product-description.component.d.ts +7 -7
- package/app/components/product-description/product-description.module.d.ts +2 -2
- package/app/components/product-documents/product-document.module.d.ts +2 -2
- package/app/components/product-documents/product-documents.component.d.ts +10 -10
- package/app/components/product-external-source/product-external-source.component.d.ts +34 -34
- package/app/components/product-external-source/product-external-source.module.d.ts +2 -2
- package/app/components/product-info-tabs/product-info-tabs.component.d.ts +18 -18
- package/app/components/product-info-tabs/product-info-tabs.module.d.ts +2 -2
- package/app/components/product-page/product-page.component.d.ts +58 -58
- package/app/components/product-page/product-page.module.d.ts +2 -2
- package/app/components/product-price/product-price.component.d.ts +19 -19
- package/app/components/product-price/product-price.module.d.ts +2 -2
- package/app/components/product-properties/product-properties.component.d.ts +16 -16
- package/app/components/product-properties/product-properties.module.d.ts +2 -2
- package/app/components/product-related/product-related.component.d.ts +16 -16
- package/app/components/product-related/product-related.module.d.ts +2 -2
- package/app/components/product-selector-type/product-selector-type.component.d.ts +21 -21
- package/app/components/product-selector-type/product-selector-type.module.d.ts +2 -2
- package/app/components/product-stock/product-stock.component.d.ts +20 -20
- package/app/components/product-stock/product-stock.module.d.ts +2 -2
- package/app/components/product-symbols/product-symbols.component.d.ts +10 -10
- package/app/components/product-symbols/product-symbols.module.d.ts +2 -2
- package/app/enum/icon.enum.d.ts +17 -17
- package/app/enum/language-code.enum.d.ts +6 -6
- package/app/enum/selector-type.enum.d.ts +5 -5
- package/app/ione-product.component.d.ts +43 -43
- package/app/ione-product.module.d.ts +2 -2
- package/app/model/article-quantity.model.d.ts +5 -5
- package/app/model/icon.d.ts +4 -4
- package/app/model/productSettings.d.ts +30 -30
- package/app/model/render-modes.d.ts +5 -5
- package/app/model/render-parameters.d.ts +7 -7
- package/app/model/settings-options.d.ts +10 -10
- package/app/model/stock-and-delivery.d.ts +5 -5
- package/app/pipe/localize.pipe.d.ts +7 -7
- package/app/pipe/pipe.module.d.ts +2 -2
- package/app/product-version.d.ts +6 -6
- package/app/service/dictionary.service.d.ts +24 -24
- package/app/service/icon-cache.service.d.ts +17 -17
- package/app/service/product-connector-adapter.service.d.ts +34 -34
- package/app/service/product-connector.service.d.ts +38 -38
- package/app/service/product-event.service.d.ts +22 -22
- package/app/service/product-settings.service.d.ts +16 -16
- package/app/style/_scrollbars.mixins.scss +18 -18
- package/app/style/_variables.scss +21 -21
- package/app/utils/bit-utils.d.ts +7 -7
- package/app/utils/json-utils.service.d.ts +3 -3
- package/assets/dictionary/text.properties.d.ts +3 -3
- package/bundles/colijnit-product.umd.js +3108 -3108
- package/bundles/colijnit-product.umd.js.map +1 -1
- package/colijnit-product.d.ts +41 -41
- package/colijnit-product.metadata.json +1 -1
- package/esm2015/app/components/core/header/header.component.js +18 -18
- package/esm2015/app/components/core/header/header.module.js +19 -19
- package/esm2015/app/components/image-carousel/image-carousel.component.js +143 -143
- package/esm2015/app/components/image-carousel/image-carousel.module.js +23 -23
- package/esm2015/app/components/product-additional-description/product-additional-description.component.js +50 -50
- package/esm2015/app/components/product-additional-description/product-additional-description.module.js +21 -21
- package/esm2015/app/components/product-additional-info/product-additional-info.component.js +102 -102
- package/esm2015/app/components/product-additional-info/product-additional-info.module.js +21 -21
- package/esm2015/app/components/product-addtocart/product-addtocart.component.js +90 -90
- package/esm2015/app/components/product-addtocart/product-addtocart.module.js +24 -24
- package/esm2015/app/components/product-delivery/product-delivery.component.js +39 -39
- package/esm2015/app/components/product-delivery/product-delivery.module.js +23 -23
- package/esm2015/app/components/product-description/product-description.component.js +17 -17
- package/esm2015/app/components/product-description/product-description.module.js +19 -19
- package/esm2015/app/components/product-documents/product-document.module.js +25 -25
- package/esm2015/app/components/product-documents/product-documents.component.js +25 -25
- package/esm2015/app/components/product-external-source/product-external-source.component.js +110 -110
- package/esm2015/app/components/product-external-source/product-external-source.module.js +21 -21
- package/esm2015/app/components/product-info-tabs/product-info-tabs.component.js +59 -59
- package/esm2015/app/components/product-info-tabs/product-info-tabs.module.js +29 -29
- package/esm2015/app/components/product-page/product-page.component.js +215 -215
- package/esm2015/app/components/product-page/product-page.module.js +44 -44
- package/esm2015/app/components/product-price/product-price.component.js +60 -60
- package/esm2015/app/components/product-price/product-price.module.js +23 -23
- package/esm2015/app/components/product-properties/product-properties.component.js +50 -50
- package/esm2015/app/components/product-properties/product-properties.module.js +21 -21
- package/esm2015/app/components/product-related/product-related.component.js +62 -62
- package/esm2015/app/components/product-related/product-related.module.js +24 -24
- package/esm2015/app/components/product-selector-type/product-selector-type.component.js +42 -42
- package/esm2015/app/components/product-selector-type/product-selector-type.module.js +26 -26
- package/esm2015/app/components/product-stock/product-stock.component.js +59 -59
- package/esm2015/app/components/product-stock/product-stock.module.js +23 -23
- package/esm2015/app/components/product-symbols/product-symbols.component.js +34 -34
- package/esm2015/app/components/product-symbols/product-symbols.module.js +26 -26
- package/esm2015/app/enum/icon.enum.js +18 -18
- package/esm2015/app/enum/language-code.enum.js +8 -8
- package/esm2015/app/enum/selector-type.enum.js +7 -7
- package/esm2015/app/ione-product.component.js +114 -114
- package/esm2015/app/ione-product.module.js +29 -29
- package/esm2015/app/model/article-quantity.model.js +3 -3
- package/esm2015/app/model/icon.js +17 -17
- package/esm2015/app/model/productSettings.js +16 -16
- package/esm2015/app/model/render-modes.js +7 -7
- package/esm2015/app/model/render-parameters.js +10 -10
- package/esm2015/app/model/settings-options.js +13 -13
- package/esm2015/app/model/stock-and-delivery.js +8 -8
- package/esm2015/app/pipe/localize.pipe.js +27 -27
- package/esm2015/app/pipe/pipe.module.js +18 -18
- package/esm2015/app/product-version.js +10 -10
- package/esm2015/app/service/dictionary.service.js +94 -94
- package/esm2015/app/service/icon-cache.service.js +40 -40
- package/esm2015/app/service/product-connector-adapter.service.js +171 -171
- package/esm2015/app/service/product-connector.service.js +106 -106
- package/esm2015/app/service/product-event.service.js +29 -29
- package/esm2015/app/service/product-settings.service.js +86 -86
- package/esm2015/app/utils/bit-utils.js +18 -18
- package/esm2015/app/utils/json-utils.service.js +29 -29
- package/esm2015/assets/dictionary/text.properties.js +67 -67
- package/esm2015/colijnit-product.js +41 -41
- package/esm2015/public_api.js +10 -10
- package/fesm2015/colijnit-product.js +2212 -2212
- package/fesm2015/colijnit-product.js.map +1 -1
- package/package.json +5 -5
- package/public_api.d.ts +9 -9
|
@@ -1,171 +1,171 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { ArticleFullObject } from '@colijnit/articleapi/build/model/article-full-object';
|
|
5
|
-
import { SuperArticle } from '@colijnit/articleapi/build/model/super-article';
|
|
6
|
-
import { Articles } from '@colijnit/articleapi/build/articles';
|
|
7
|
-
import { DeliveryPrognosis } from '@colijnit/articleapi/build/model/delivery-prognosis';
|
|
8
|
-
import { DocumentContent } from '@colijnit/articleapi/build/model/document-content';
|
|
9
|
-
import { BusinessObjectFactory } from '@colijnit/ioneconnector/build/service/business-object-factory';
|
|
10
|
-
import { Transaction } from '@colijnit/transactionapi/build/transaction';
|
|
11
|
-
import { ProductSettings } from '../model/productSettings';
|
|
12
|
-
import { MainApi } from '@colijnit/mainapi';
|
|
13
|
-
import { TransactionInfoResponse } from '@colijnit/transactionapi/build/model/transaction-info-response.bo';
|
|
14
|
-
import { ArticleExtended } from '@colijnit/articleapi/build/model/article-extended.bo';
|
|
15
|
-
// Sole responsibility is simply to wrap around a colijn.Connector to create a stable inner interface to the library in a 1:1 method way.
|
|
16
|
-
// Only to be used by the IOneControllerService.
|
|
17
|
-
export class ProductConnectorAdapterService {
|
|
18
|
-
constructor() {
|
|
19
|
-
this.showLoader = new Subject();
|
|
20
|
-
this._boFactory = new BusinessObjectFactory();
|
|
21
|
-
}
|
|
22
|
-
ngOnDestroy() {
|
|
23
|
-
this.articleConnector.showLoader.unsubscribe();
|
|
24
|
-
}
|
|
25
|
-
initConnector(options) {
|
|
26
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
this.articleConnector = new Articles(options);
|
|
28
|
-
yield this.articleConnector.connect();
|
|
29
|
-
this.transactionConnector = new Transaction(options);
|
|
30
|
-
this.articleConnector.showLoader.subscribe(value => this.showLoader.next(value));
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
setInstance(instanceId) {
|
|
34
|
-
// this.articleConnector.setInstanceToConfigure(instanceId, false);
|
|
35
|
-
}
|
|
36
|
-
getProductBundleSettings(url, upId) {
|
|
37
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
-
const tempSettings = new ProductSettings();
|
|
39
|
-
tempSettings.url = url;
|
|
40
|
-
tempSettings.schema = upId.toString();
|
|
41
|
-
const tempMainConnector = new MainApi(tempSettings);
|
|
42
|
-
const response = yield tempMainConnector.getPublicParams(upId);
|
|
43
|
-
if (response) {
|
|
44
|
-
return response.productSettings;
|
|
45
|
-
}
|
|
46
|
-
return "";
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
convertArticleFullObjectToArticleExtended(article) {
|
|
50
|
-
if (article) {
|
|
51
|
-
return this._boFactory.makeWithRawBackendData(ArticleExtended, article);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
getDeliveryPrognosis(goodId, branchNr) {
|
|
55
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
-
const deliveryPrognosis = yield this.getSelectorDeliveryDate();
|
|
57
|
-
if (!deliveryPrognosis || !deliveryPrognosis.returnValue) {
|
|
58
|
-
return this.getDeliveryDate2(goodId);
|
|
59
|
-
}
|
|
60
|
-
return deliveryPrognosis;
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
getSelectorDeliveryDate() {
|
|
64
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
-
const response = yield this.articleConnector.getSelectorDeliveryDate();
|
|
66
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
67
|
-
return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
getArtStockStatus(goodId) {
|
|
75
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
-
const response = yield this.articleConnector.getArtStockStatus(goodId);
|
|
77
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
78
|
-
return response.resultObject;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
getDeliveryDate2(goodId) {
|
|
86
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
-
const response = yield this.articleConnector.getDeliveryDate2(goodId);
|
|
88
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
89
|
-
return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
getJsonConfiguredArticles(configuratorStatistics) {
|
|
97
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
const response = yield this.articleConnector.getJsonConfiguredArticles(configuratorStatistics);
|
|
99
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
100
|
-
return response.resultObject;
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
return '';
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
getJsonArticleFlatTree(goodId, goodType, quantity, showLoader = true, instanceId, configuratorStatistics) {
|
|
108
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
-
return this.articleConnector.getJsonArticleFlatTree(goodId, goodType, quantity, showLoader, instanceId, configuratorStatistics);
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
getGoodIdFromArticleNr(sku) {
|
|
113
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
-
const response = yield this.articleConnector.getGoodIdFromArticleNr(sku);
|
|
115
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
116
|
-
return response.resultObject;
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
getArticleFullObject(goodId) {
|
|
124
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
-
const response = yield this.articleConnector.getArticleFullObject(goodId);
|
|
126
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
127
|
-
return this._boFactory.makeWithRawBackendData(ArticleFullObject, response.resultObject);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
return null;
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
getSuperArticle(id, branch) {
|
|
135
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
-
const response = yield this.articleConnector.getSuperArticleQuickSel(id, branch);
|
|
137
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
138
|
-
return this._boFactory.makeWithRawBackendData(SuperArticle, response.resultObject);
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
getDocumentContent(docId, thumbnail = true) {
|
|
146
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
-
const response = yield this.articleConnector.getDocumentContent(docId, thumbnail);
|
|
148
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
149
|
-
return this._boFactory.makeWithRawBackendData(DocumentContent, response.resultObject);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
return null;
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
addWebSessionTransactionLine(transactionUuid, sku, quantity) {
|
|
157
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
-
const response = yield this.transactionConnector.addWebSessionTransactionLine(transactionUuid, sku, quantity);
|
|
159
|
-
if (response && response.validationResult && response.validationResult.success) {
|
|
160
|
-
const infoResponse = this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
161
|
-
return infoResponse.transactionInfo.uuid;
|
|
162
|
-
}
|
|
163
|
-
return "";
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
ProductConnectorAdapterService.decorators = [
|
|
168
|
-
{ type: Injectable }
|
|
169
|
-
];
|
|
170
|
-
ProductConnectorAdapterService.ctorParameters = () => [];
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUU1RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFHN0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDdEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLCtEQUErRCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUV2RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUdyRix5SUFBeUk7QUFDekksZ0RBQWdEO0FBRWhELE1BQU0sT0FBTyw4QkFBOEI7SUFTdkM7UUFQZ0IsZUFBVSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBSzlELGVBQVUsR0FBMEIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBR3hFLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRVksYUFBYSxDQUFDLE9BQWdCOztZQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO0tBQUE7SUFFTSxXQUFXLENBQUMsVUFBa0I7UUFDakMsbUVBQW1FO0lBQ3ZFLENBQUM7SUFFWSx3QkFBd0IsQ0FBQyxHQUFXLEVBQUUsSUFBWTs7WUFDM0QsTUFBTSxZQUFZLEdBQW9CLElBQUksZUFBZSxFQUFFLENBQUM7WUFDNUQsWUFBWSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDdkIsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwRCxNQUFNLFFBQVEsR0FBUSxNQUFNLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxJQUFJLFFBQVEsRUFBRTtnQkFDVixPQUFPLFFBQVEsQ0FBQyxlQUFlLENBQUM7YUFDbkM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FBQTtJQUVNLHlDQUF5QyxDQUFDLE9BQTBCO1FBQ3ZFLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxPQUFPLENBQW9CLENBQUM7U0FDOUY7SUFDTCxDQUFDO0lBRVksb0JBQW9CLENBQUMsTUFBYyxFQUFFLFFBQWlCOztZQUMvRCxNQUFNLGlCQUFpQixHQUFzQixNQUFNLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2xGLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRTtnQkFDdEQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDeEM7WUFDRCxPQUFPLGlCQUFpQixDQUFDO1FBQzdCLENBQUM7S0FBQTtJQUVZLHVCQUF1Qjs7WUFDaEMsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDaEcsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFpQyxDQUFDO2FBQzNIO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2Y7UUFDTCxDQUFDO0tBQUE7SUFFWSxpQkFBaUIsQ0FBQyxNQUFjOztZQUN6QyxNQUFNLFFBQVEsR0FBNEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEcsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVFLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQzthQUNoQztpQkFBTTtnQkFDSCxPQUFPLElBQUksQ0FBQzthQUNmO1FBQ0wsQ0FBQztLQUFBO0lBRVksZ0JBQWdCLENBQUMsTUFBYzs7WUFDeEMsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9GLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dCQUM1RSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBaUMsQ0FBQzthQUMzSDtpQkFBTTtnQkFDSCxPQUFPLElBQUksQ0FBQzthQUNmO1FBQ0wsQ0FBQztLQUFBO0lBRVkseUJBQXlCLENBQUMsc0JBQTBEOztZQUM3RixNQUFNLFFBQVEsR0FBNEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUN4SCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQkFDNUUsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNILE9BQU8sRUFBRSxDQUFDO2FBQ2I7UUFDTCxDQUFDO0tBQUE7SUFFWSxzQkFBc0IsQ0FDL0IsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLGFBQXNCLElBQUksRUFDMUIsVUFBZ0IsRUFDaEIsc0JBQTBEOztZQUUxRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDcEksQ0FBQztLQUFBO0lBRVksc0JBQXNCLENBQUMsR0FBVzs7WUFDM0MsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xHLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dCQUM1RSxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0gsT0FBTyxJQUFJLENBQUM7YUFDZjtRQUNMLENBQUM7S0FBQTtJQUVZLG9CQUFvQixDQUFDLE1BQWM7O1lBQzVDLE1BQU0sUUFBUSxHQUE0QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQkFDNUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQXNCLENBQUM7YUFDaEg7aUJBQU07Z0JBQ0gsT0FBTyxJQUFJLENBQUM7YUFDZjtRQUNMLENBQUM7S0FBQTtJQUVZLGVBQWUsQ0FBQyxFQUFVLEVBQUUsTUFBZTs7WUFDcEQsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxRyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQkFDNUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFpQixDQUFDO2FBQ3RHO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2Y7UUFDTCxDQUFDO0tBQUE7SUFFWSxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsWUFBcUIsSUFBSTs7WUFDcEUsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMzRyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQkFDNUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUErQixDQUFDO2FBQ3ZIO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2Y7UUFDTCxDQUFDO0tBQUE7SUFFWSw0QkFBNEIsQ0FBQyxlQUF1QixFQUFFLEdBQVcsRUFBRSxRQUFnQjs7WUFDNUYsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLDRCQUE0QixDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkksSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVFLE1BQU0sWUFBWSxHQUE0QixJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQTRCLENBQUM7Z0JBQ2hLLE9BQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7YUFDNUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FBQTs7O1lBaEpKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QXJ0aWNsZUZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3QnO1xyXG5pbXBvcnQge1N1cGVyQXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvc3VwZXItYXJ0aWNsZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9jb25maWd1cmF0b3Itc3RhdGlzdGljcy1lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7QXJ0aWNsZXN9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2FydGljbGVzJztcclxuaW1wb3J0IHtPcHRpb25zfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9vcHRpb25zJztcclxuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvZGF0YS1zZXJ2aWNlLXJlc3BvbnNlLWRhdGEnO1xyXG5pbXBvcnQge0RlbGl2ZXJ5UHJvZ25vc2lzfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9kZWxpdmVyeS1wcm9nbm9zaXMnO1xyXG5pbXBvcnQge0RvY3VtZW50Q29udGVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZG9jdW1lbnQtY29udGVudCc7XHJcbmltcG9ydCB7QnVzaW5lc3NPYmplY3RGYWN0b3J5fSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9zZXJ2aWNlL2J1c2luZXNzLW9iamVjdC1mYWN0b3J5JztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL3RyYW5zYWN0aW9uJztcclxuaW1wb3J0IHtQcm9kdWN0U2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL3Byb2R1Y3Qtc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7UHJvZHVjdFNldHRpbmdzfSBmcm9tICcuLi9tb2RlbC9wcm9kdWN0U2V0dGluZ3MnO1xyXG5pbXBvcnQge01haW5BcGl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8tcmVzcG9uc2UuYm8nO1xyXG5pbXBvcnQge0FydGljbGVFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ibyc7XHJcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC1yZXF1ZXN0JztcclxuXHJcbi8vIFNvbGUgcmVzcG9uc2liaWxpdHkgaXMgc2ltcGx5IHRvIHdyYXAgYXJvdW5kIGEgY29saWpuLkNvbm5lY3RvciB0byBjcmVhdGUgYSBzdGFibGUgaW5uZXIgaW50ZXJmYWNlIHRvIHRoZSBsaWJyYXJ5IGluIGEgMToxIG1ldGhvZCB3YXkuXHJcbi8vIE9ubHkgdG8gYmUgdXNlZCBieSB0aGUgSU9uZUNvbnRyb2xsZXJTZXJ2aWNlLlxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0Q29ubmVjdG9yQWRhcHRlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBzaG93TG9hZGVyOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBwdWJsaWMgYXJ0aWNsZUNvbm5lY3Rvcj86IEFydGljbGVzO1xyXG4gICAgcHVibGljIHRyYW5zYWN0aW9uQ29ubmVjdG9yOiBUcmFuc2FjdGlvbjtcclxuXHJcbiAgICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFydGljbGVDb25uZWN0b3Iuc2hvd0xvYWRlci51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBpbml0Q29ubmVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLmFydGljbGVDb25uZWN0b3IgPSBuZXcgQXJ0aWNsZXMob3B0aW9ucyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uQ29ubmVjdG9yID0gbmV3IFRyYW5zYWN0aW9uKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5zaG93TG9hZGVyLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnNob3dMb2FkZXIubmV4dCh2YWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRJbnN0YW5jZShpbnN0YW5jZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICAvLyB0aGlzLmFydGljbGVDb25uZWN0b3Iuc2V0SW5zdGFuY2VUb0NvbmZpZ3VyZShpbnN0YW5jZUlkLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFByb2R1Y3RCdW5kbGVTZXR0aW5ncyh1cmw6IHN0cmluZywgdXBJZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB0ZW1wU2V0dGluZ3M6IFByb2R1Y3RTZXR0aW5ncyA9IG5ldyBQcm9kdWN0U2V0dGluZ3MoKTtcclxuICAgICAgICB0ZW1wU2V0dGluZ3MudXJsID0gdXJsO1xyXG4gICAgICAgIHRlbXBTZXR0aW5ncy5zY2hlbWEgPSB1cElkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29uc3QgdGVtcE1haW5Db25uZWN0b3IgPSBuZXcgTWFpbkFwaSh0ZW1wU2V0dGluZ3MpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCB0ZW1wTWFpbkNvbm5lY3Rvci5nZXRQdWJsaWNQYXJhbXModXBJZCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5wcm9kdWN0U2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0QXJ0aWNsZUZ1bGxPYmplY3RUb0FydGljbGVFeHRlbmRlZChhcnRpY2xlOiBBcnRpY2xlRnVsbE9iamVjdCk6IEFydGljbGVFeHRlbmRlZCB7XHJcbiAgICAgICAgaWYgKGFydGljbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVFeHRlbmRlZCwgYXJ0aWNsZSkgYXMgQXJ0aWNsZUV4dGVuZGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlQcm9nbm9zaXMoZ29vZElkOiBudW1iZXIsIGJyYW5jaE5yPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBkZWxpdmVyeVByb2dub3NpczogRGVsaXZlcnlQcm9nbm9zaXMgPSBhd2FpdCB0aGlzLmdldFNlbGVjdG9yRGVsaXZlcnlEYXRlKCk7XHJcbiAgICAgICAgaWYgKCFkZWxpdmVyeVByb2dub3NpcyB8fCAhZGVsaXZlcnlQcm9nbm9zaXMucmV0dXJuVmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVsaXZlcnlEYXRlMihnb29kSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVsaXZlcnlQcm9nbm9zaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFNlbGVjdG9yRGVsaXZlcnlEYXRlKCk6IFByb21pc2U8RGVsaXZlcnlQcm9nbm9zaXM+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0U2VsZWN0b3JEZWxpdmVyeURhdGUoKTtcclxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKERlbGl2ZXJ5UHJvZ25vc2lzLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgRGVsaXZlcnlQcm9nbm9zaXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRBcnRTdG9ja1N0YXR1cyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEFydFN0b2NrU3RhdHVzKGdvb2RJZCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeURhdGUyKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxEZWxpdmVyeVByb2dub3Npcz4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXREZWxpdmVyeURhdGUyKGdvb2RJZCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShEZWxpdmVyeVByb2dub3NpcywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIERlbGl2ZXJ5UHJvZ25vc2lzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhjb25maWd1cmF0b3JTdGF0aXN0aWNzPzogQ29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRKc29uQXJ0aWNsZUZsYXRUcmVlKFxyXG4gICAgICAgIGdvb2RJZDogbnVtYmVyLFxyXG4gICAgICAgIGdvb2RUeXBlOiBzdHJpbmcsXHJcbiAgICAgICAgcXVhbnRpdHk6IG51bWJlcixcclxuICAgICAgICBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSxcclxuICAgICAgICBpbnN0YW5jZUlkPzogYW55LFxyXG4gICAgICAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3M/OiBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnRcclxuICAgICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRKc29uQXJ0aWNsZUZsYXRUcmVlKGdvb2RJZCwgZ29vZFR5cGUsIHF1YW50aXR5LCBzaG93TG9hZGVyLCBpbnN0YW5jZUlkLCBjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0R29vZElkRnJvbUFydGljbGVOcihza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1KTtcclxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQXJ0aWNsZUZ1bGxPYmplY3QsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgQXJ0aWNsZUZ1bGxPYmplY3Q7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRTdXBlckFydGljbGUoaWQ6IHN0cmluZywgYnJhbmNoPzogc3RyaW5nKTogUHJvbWlzZTxTdXBlckFydGljbGU+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0U3VwZXJBcnRpY2xlUXVpY2tTZWwoaWQsIGJyYW5jaCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShTdXBlckFydGljbGUsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgU3VwZXJBcnRpY2xlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RG9jdW1lbnRDb250ZW50KGRvY0lkOiBudW1iZXIsIHRodW1ibmFpbDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPERvY3VtZW50Q29udGVudD4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXREb2N1bWVudENvbnRlbnQoZG9jSWQsIHRodW1ibmFpbCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShEb2N1bWVudENvbnRlbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBEb2N1bWVudENvbnRlbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBhZGRXZWJTZXNzaW9uVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZDogc3RyaW5nLCBza3U6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy50cmFuc2FjdGlvbkNvbm5lY3Rvci5hZGRXZWJTZXNzaW9uVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZCwgc2t1LCBxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBUcmFuc2FjdGlvbkluZm9SZXNwb25zZTtcclxuICAgICAgICAgICAgcmV0dXJuIGluZm9SZXNwb25zZS50cmFuc2FjdGlvbkluZm8udXVpZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { ArticleFullObject } from '@colijnit/articleapi/build/model/article-full-object';
|
|
5
|
+
import { SuperArticle } from '@colijnit/articleapi/build/model/super-article';
|
|
6
|
+
import { Articles } from '@colijnit/articleapi/build/articles';
|
|
7
|
+
import { DeliveryPrognosis } from '@colijnit/articleapi/build/model/delivery-prognosis';
|
|
8
|
+
import { DocumentContent } from '@colijnit/articleapi/build/model/document-content';
|
|
9
|
+
import { BusinessObjectFactory } from '@colijnit/ioneconnector/build/service/business-object-factory';
|
|
10
|
+
import { Transaction } from '@colijnit/transactionapi/build/transaction';
|
|
11
|
+
import { ProductSettings } from '../model/productSettings';
|
|
12
|
+
import { MainApi } from '@colijnit/mainapi';
|
|
13
|
+
import { TransactionInfoResponse } from '@colijnit/transactionapi/build/model/transaction-info-response.bo';
|
|
14
|
+
import { ArticleExtended } from '@colijnit/articleapi/build/model/article-extended.bo';
|
|
15
|
+
// Sole responsibility is simply to wrap around a colijn.Connector to create a stable inner interface to the library in a 1:1 method way.
|
|
16
|
+
// Only to be used by the IOneControllerService.
|
|
17
|
+
export class ProductConnectorAdapterService {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.showLoader = new Subject();
|
|
20
|
+
this._boFactory = new BusinessObjectFactory();
|
|
21
|
+
}
|
|
22
|
+
ngOnDestroy() {
|
|
23
|
+
this.articleConnector.showLoader.unsubscribe();
|
|
24
|
+
}
|
|
25
|
+
initConnector(options) {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
this.articleConnector = new Articles(options);
|
|
28
|
+
yield this.articleConnector.connect();
|
|
29
|
+
this.transactionConnector = new Transaction(options);
|
|
30
|
+
this.articleConnector.showLoader.subscribe(value => this.showLoader.next(value));
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
setInstance(instanceId) {
|
|
34
|
+
// this.articleConnector.setInstanceToConfigure(instanceId, false);
|
|
35
|
+
}
|
|
36
|
+
getProductBundleSettings(url, upId) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const tempSettings = new ProductSettings();
|
|
39
|
+
tempSettings.url = url;
|
|
40
|
+
tempSettings.schema = upId.toString();
|
|
41
|
+
const tempMainConnector = new MainApi(tempSettings);
|
|
42
|
+
const response = yield tempMainConnector.getPublicParams(upId);
|
|
43
|
+
if (response) {
|
|
44
|
+
return response.productSettings;
|
|
45
|
+
}
|
|
46
|
+
return "";
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
convertArticleFullObjectToArticleExtended(article) {
|
|
50
|
+
if (article) {
|
|
51
|
+
return this._boFactory.makeWithRawBackendData(ArticleExtended, article);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
getDeliveryPrognosis(goodId, branchNr) {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
const deliveryPrognosis = yield this.getSelectorDeliveryDate();
|
|
57
|
+
if (!deliveryPrognosis || !deliveryPrognosis.returnValue) {
|
|
58
|
+
return this.getDeliveryDate2(goodId);
|
|
59
|
+
}
|
|
60
|
+
return deliveryPrognosis;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
getSelectorDeliveryDate() {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
+
const response = yield this.articleConnector.getSelectorDeliveryDate();
|
|
66
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
67
|
+
return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
getArtStockStatus(goodId) {
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
const response = yield this.articleConnector.getArtStockStatus(goodId);
|
|
77
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
78
|
+
return response.resultObject;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
getDeliveryDate2(goodId) {
|
|
86
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
+
const response = yield this.articleConnector.getDeliveryDate2(goodId);
|
|
88
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
89
|
+
return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
getJsonConfiguredArticles(configuratorStatistics) {
|
|
97
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
const response = yield this.articleConnector.getJsonConfiguredArticles(configuratorStatistics);
|
|
99
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
100
|
+
return response.resultObject;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
return '';
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
getJsonArticleFlatTree(goodId, goodType, quantity, showLoader = true, instanceId, configuratorStatistics) {
|
|
108
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
+
return this.articleConnector.getJsonArticleFlatTree(goodId, goodType, quantity, showLoader, instanceId, configuratorStatistics);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
getGoodIdFromArticleNr(sku) {
|
|
113
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
+
const response = yield this.articleConnector.getGoodIdFromArticleNr(sku);
|
|
115
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
116
|
+
return response.resultObject;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
getArticleFullObject(goodId) {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
const response = yield this.articleConnector.getArticleFullObject(goodId);
|
|
126
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
127
|
+
return this._boFactory.makeWithRawBackendData(ArticleFullObject, response.resultObject);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
getSuperArticle(id, branch) {
|
|
135
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
const response = yield this.articleConnector.getSuperArticleQuickSel(id, branch);
|
|
137
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
138
|
+
return this._boFactory.makeWithRawBackendData(SuperArticle, response.resultObject);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
getDocumentContent(docId, thumbnail = true) {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
const response = yield this.articleConnector.getDocumentContent(docId, thumbnail);
|
|
148
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
149
|
+
return this._boFactory.makeWithRawBackendData(DocumentContent, response.resultObject);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
addWebSessionTransactionLine(transactionUuid, sku, quantity) {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
const response = yield this.transactionConnector.addWebSessionTransactionLine(transactionUuid, sku, quantity);
|
|
159
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
160
|
+
const infoResponse = this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
161
|
+
return infoResponse.transactionInfo.uuid;
|
|
162
|
+
}
|
|
163
|
+
return "";
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
ProductConnectorAdapterService.decorators = [
|
|
168
|
+
{ type: Injectable }
|
|
169
|
+
];
|
|
170
|
+
ProductConnectorAdapterService.ctorParameters = () => [];
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUU1RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFHN0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDdEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLCtEQUErRCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUV2RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUdyRix5SUFBeUk7QUFDekksZ0RBQWdEO0FBRWhELE1BQU0sT0FBTyw4QkFBOEI7SUFTdkM7UUFQZ0IsZUFBVSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBSzlELGVBQVUsR0FBMEIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBR3hFLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFB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QUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUErQixDQUFDO2FBQ3ZIO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2Y7UUFDTCxDQUFDO0tBQUE7SUFFWSw0QkFBNEIsQ0FBQyxlQUF1QixFQUFFLEdBQVcsRUFBRSxRQUFnQjs7WUFDNUYsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLDRCQUE0QixDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkksSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVFLE1BQU0sWUFBWSxHQUE0QixJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQTRCLENBQUM7Z0JBQ2hLLE9BQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7YUFDNUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FBQTs7O1lBaEpKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBcnRpY2xlRnVsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1mdWxsLW9iamVjdCc7XG5pbXBvcnQge1N1cGVyQXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvc3VwZXItYXJ0aWNsZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvY29uZmlndXJhdG9yLXN0YXRpc3RpY3MtZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtBcnRpY2xlc30gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvYXJ0aWNsZXMnO1xuaW1wb3J0IHtPcHRpb25zfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9vcHRpb25zJztcbmltcG9ydCB7RGF0YVNlcnZpY2VSZXNwb25zZURhdGF9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhJztcbmltcG9ydCB7RGVsaXZlcnlQcm9nbm9zaXN9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2RlbGl2ZXJ5LXByb2dub3Npcyc7XG5pbXBvcnQge0RvY3VtZW50Q29udGVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZG9jdW1lbnQtY29udGVudCc7XG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvc2VydmljZS9idXNpbmVzcy1vYmplY3QtZmFjdG9yeSc7XG5pbXBvcnQge1RyYW5zYWN0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtQcm9kdWN0U2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL3Byb2R1Y3Qtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge1Byb2R1Y3RTZXR0aW5nc30gZnJvbSAnLi4vbW9kZWwvcHJvZHVjdFNldHRpbmdzJztcbmltcG9ydCB7TWFpbkFwaX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGknO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8tcmVzcG9uc2UuYm8nO1xuaW1wb3J0IHtBcnRpY2xlRXh0ZW5kZWR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZXh0ZW5kZWQuYm8nO1xuaW1wb3J0IHtBcnRpY2xlRXh0ZW5kZWRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWV4dGVuZGVkLXJlcXVlc3QnO1xuXG4vLyBTb2xlIHJlc3BvbnNpYmlsaXR5IGlzIHNpbXBseSB0byB3cmFwIGFyb3VuZCBhIGNvbGlqbi5Db25uZWN0b3IgdG8gY3JlYXRlIGEgc3RhYmxlIGlubmVyIGludGVyZmFjZSB0byB0aGUgbGlicmFyeSBpbiBhIDE6MSBtZXRob2Qgd2F5LlxuLy8gT25seSB0byBiZSB1c2VkIGJ5IHRoZSBJT25lQ29udHJvbGxlclNlcnZpY2UuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUHJvZHVjdENvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyByZWFkb25seSBzaG93TG9hZGVyOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHB1YmxpYyBhcnRpY2xlQ29ubmVjdG9yPzogQXJ0aWNsZXM7XG4gICAgcHVibGljIHRyYW5zYWN0aW9uQ29ubmVjdG9yOiBUcmFuc2FjdGlvbjtcblxuICAgIHByaXZhdGUgX2JvRmFjdG9yeTogQnVzaW5lc3NPYmplY3RGYWN0b3J5ID0gbmV3IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSgpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5zaG93TG9hZGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXRDb25uZWN0b3Iob3B0aW9uczogT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmFydGljbGVDb25uZWN0b3IgPSBuZXcgQXJ0aWNsZXMob3B0aW9ucyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5jb25uZWN0KCk7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Db25uZWN0b3IgPSBuZXcgVHJhbnNhY3Rpb24ob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5zaG93TG9hZGVyLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnNob3dMb2FkZXIubmV4dCh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJbnN0YW5jZShpbnN0YW5jZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLnNldEluc3RhbmNlVG9Db25maWd1cmUoaW5zdGFuY2VJZCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQcm9kdWN0QnVuZGxlU2V0dGluZ3ModXJsOiBzdHJpbmcsIHVwSWQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHRlbXBTZXR0aW5nczogUHJvZHVjdFNldHRpbmdzID0gbmV3IFByb2R1Y3RTZXR0aW5ncygpO1xuICAgICAgICB0ZW1wU2V0dGluZ3MudXJsID0gdXJsO1xuICAgICAgICB0ZW1wU2V0dGluZ3Muc2NoZW1hID0gdXBJZC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCB0ZW1wTWFpbkNvbm5lY3RvciA9IG5ldyBNYWluQXBpKHRlbXBTZXR0aW5ncyk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCB0ZW1wTWFpbkNvbm5lY3Rvci5nZXRQdWJsaWNQYXJhbXModXBJZCk7XG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnByb2R1Y3RTZXR0aW5ncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udmVydEFydGljbGVGdWxsT2JqZWN0VG9BcnRpY2xlRXh0ZW5kZWQoYXJ0aWNsZTogQXJ0aWNsZUZ1bGxPYmplY3QpOiBBcnRpY2xlRXh0ZW5kZWQge1xuICAgICAgICBpZiAoYXJ0aWNsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVFeHRlbmRlZCwgYXJ0aWNsZSkgYXMgQXJ0aWNsZUV4dGVuZGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5UHJvZ25vc2lzKGdvb2RJZDogbnVtYmVyLCBicmFuY2hOcj86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGRlbGl2ZXJ5UHJvZ25vc2lzOiBEZWxpdmVyeVByb2dub3NpcyA9IGF3YWl0IHRoaXMuZ2V0U2VsZWN0b3JEZWxpdmVyeURhdGUoKTtcbiAgICAgICAgaWYgKCFkZWxpdmVyeVByb2dub3NpcyB8fCAhZGVsaXZlcnlQcm9nbm9zaXMucmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERlbGl2ZXJ5RGF0ZTIoZ29vZElkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsaXZlcnlQcm9nbm9zaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFNlbGVjdG9yRGVsaXZlcnlEYXRlKCk6IFByb21pc2U8RGVsaXZlcnlQcm9nbm9zaXM+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldFNlbGVjdG9yRGVsaXZlcnlEYXRlKCk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKERlbGl2ZXJ5UHJvZ25vc2lzLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgRGVsaXZlcnlQcm9nbm9zaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBcnRTdG9ja1N0YXR1cyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRBcnRTdG9ja1N0YXR1cyhnb29kSWQpO1xuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeURhdGUyKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxEZWxpdmVyeVByb2dub3Npcz4ge1xuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0RGVsaXZlcnlEYXRlMihnb29kSWQpO1xuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShEZWxpdmVyeVByb2dub3NpcywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIERlbGl2ZXJ5UHJvZ25vc2lzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhjb25maWd1cmF0b3JTdGF0aXN0aWNzPzogQ29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEpzb25Db25maWd1cmVkQXJ0aWNsZXMoY29uZmlndXJhdG9yU3RhdGlzdGljcyk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRKc29uQXJ0aWNsZUZsYXRUcmVlKFxuICAgICAgICBnb29kSWQ6IG51bWJlcixcbiAgICAgICAgZ29vZFR5cGU6IHN0cmluZyxcbiAgICAgICAgcXVhbnRpdHk6IG51bWJlcixcbiAgICAgICAgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgICAgIGluc3RhbmNlSWQ/OiBhbnksXG4gICAgICAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3M/OiBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnRcbiAgICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEpzb25BcnRpY2xlRmxhdFRyZWUoZ29vZElkLCBnb29kVHlwZSwgcXVhbnRpdHksIHNob3dMb2FkZXIsIGluc3RhbmNlSWQsIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1KTtcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPEFydGljbGVGdWxsT2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBcnRpY2xlRnVsbE9iamVjdCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBBcnRpY2xlRnVsbE9iamVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFN1cGVyQXJ0aWNsZShpZDogc3RyaW5nLCBicmFuY2g/OiBzdHJpbmcpOiBQcm9taXNlPFN1cGVyQXJ0aWNsZT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0U3VwZXJBcnRpY2xlUXVpY2tTZWwoaWQsIGJyYW5jaCk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFN1cGVyQXJ0aWNsZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBTdXBlckFydGljbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREb2N1bWVudENvbnRlbnQoZG9jSWQ6IG51bWJlciwgdGh1bWJuYWlsOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8RG9jdW1lbnRDb250ZW50PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXREb2N1bWVudENvbnRlbnQoZG9jSWQsIHRodW1ibmFpbCk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKERvY3VtZW50Q29udGVudCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIERvY3VtZW50Q29udGVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFkZFdlYlNlc3Npb25UcmFuc2FjdGlvbkxpbmUodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIHNrdTogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy50cmFuc2FjdGlvbkNvbm5lY3Rvci5hZGRXZWJTZXNzaW9uVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZCwgc2t1LCBxdWFudGl0eSk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc3QgaW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlO1xuICAgICAgICAgICAgcmV0dXJuIGluZm9SZXNwb25zZS50cmFuc2FjdGlvbkluZm8udXVpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG59XG4iXX0=
|