@colijnit/transaction 1.9.31 → 12.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/app/component/common/icon/icon.component.d.ts +1 -2
  2. package/bundles/colijnit-transaction.umd.js +950 -983
  3. package/bundles/colijnit-transaction.umd.js.map +1 -1
  4. package/colijnit-transaction.d.ts +14 -14
  5. package/colijnit-transaction.metadata.json +1 -1
  6. package/esm2015/app/component/checkout/checkout/checkout.component.js +22 -26
  7. package/esm2015/app/component/checkout/checkout-login/checkout-login.component.js +18 -27
  8. package/esm2015/app/component/checkout/checkout-overview/checkout-overview.component.js +26 -49
  9. package/esm2015/app/component/checkout/checkout-overview-block/checkout-overview-block.component.js +17 -24
  10. package/esm2015/app/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +18 -24
  11. package/esm2015/app/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +27 -42
  12. package/esm2015/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.js +19 -22
  13. package/esm2015/app/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +25 -36
  14. package/esm2015/app/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +18 -24
  15. package/esm2015/app/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +16 -21
  16. package/esm2015/app/component/checkout/ione-checkout.component.js +27 -34
  17. package/esm2015/app/component/checkout/ione-checkout.module.js +55 -58
  18. package/esm2015/app/component/checkout/retail-transaction-checkout/retail-transaction-checkout.component.js +16 -18
  19. package/esm2015/app/component/common/icon/icon.component.js +14 -18
  20. package/esm2015/app/component/common/image-display/image-display.component.js +19 -36
  21. package/esm2015/app/component/common/no-image-display/no-image-display.component.js +14 -20
  22. package/esm2015/app/component/core/core.module.js +32 -34
  23. package/esm2015/app/component/shopping-cart/characteristic-answer/characteristic-answer.component.js +20 -27
  24. package/esm2015/app/component/shopping-cart/ione-shopping-cart.component.js +31 -48
  25. package/esm2015/app/component/shopping-cart/ione-shopping-cart.module.js +51 -52
  26. package/esm2015/app/component/shopping-cart/shopping-cart/shopping-cart.component.js +29 -49
  27. package/esm2015/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.js +25 -38
  28. package/esm2015/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.js +27 -38
  29. package/esm2015/app/component/shopping-cart/stock-status-indicator/stock-status-indicator.component.js +13 -17
  30. package/esm2015/app/enum/checkout-steps.enum.js +1 -1
  31. package/esm2015/app/enum/content-view-mode.enum.js +1 -1
  32. package/esm2015/app/enum/direction.enum.js +1 -1
  33. package/esm2015/app/enum/language-code.enum.js +1 -1
  34. package/esm2015/app/enum/order-discount-type.enum.js +1 -1
  35. package/esm2015/app/enum/time-size.type.js +1 -1
  36. package/esm2015/app/model/business-object.js +6 -6
  37. package/esm2015/app/model/text-value-container.js +1 -1
  38. package/esm2015/app/pipe/append.pipe.js +6 -8
  39. package/esm2015/app/pipe/co-currency.pipe.js +8 -11
  40. package/esm2015/app/pipe/date-duration.pipe.js +6 -8
  41. package/esm2015/app/pipe/delivery-time.pipe.js +6 -8
  42. package/esm2015/app/pipe/localize.pipe.js +9 -13
  43. package/esm2015/app/pipe/safe-style-pipe.js +9 -11
  44. package/esm2015/app/service/dictionary.service.js +10 -10
  45. package/esm2015/app/service/ione-connector-adapter.service.js +8 -8
  46. package/esm2015/app/service/options.service.js +8 -8
  47. package/esm2015/app/service/transaction-event.service.js +6 -8
  48. package/esm2015/app/service/transaction.service.js +11 -12
  49. package/esm2015/app/utils/string-utils.js +1 -1
  50. package/esm2015/assets/dictionary/text.properties.js +1 -1
  51. package/esm2015/colijnit-transaction.js +15 -15
  52. package/esm2015/factory/business-object-factory.js +1 -1
  53. package/esm2015/factory/decorators/boolean.decorator.js +1 -1
  54. package/esm2015/factory/decorators/complex-array.decorator.js +1 -1
  55. package/esm2015/factory/decorators/complex-field.decorator.js +2 -2
  56. package/esm2015/factory/decorators/date-field.decorator.js +1 -1
  57. package/esm2015/factory/decorators/string-number.decorator.js +1 -1
  58. package/esm2015/public_api.js +1 -1
  59. package/esm2015/utils/array-utils.js +1 -1
  60. package/esm2015/utils/is-nill.function.js +1 -1
  61. package/fesm2015/colijnit-transaction.js +640 -799
  62. package/fesm2015/colijnit-transaction.js.map +1 -1
  63. package/package.json +33 -23
  64. package/bundles/colijnit-transaction.umd.min.js +0 -16
  65. package/bundles/colijnit-transaction.umd.min.js.map +0 -1
  66. package/enum/icon.enum.d.ts +0 -281
  67. package/esm2015/enum/icon.enum.js +0 -283
  68. package/esm5/app/component/checkout/checkout/checkout.component.js +0 -196
  69. package/esm5/app/component/checkout/checkout-login/checkout-login.component.js +0 -62
  70. package/esm5/app/component/checkout/checkout-overview/checkout-overview.component.js +0 -183
  71. package/esm5/app/component/checkout/checkout-overview-block/checkout-overview-block.component.js +0 -48
  72. package/esm5/app/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +0 -34
  73. package/esm5/app/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +0 -298
  74. package/esm5/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.js +0 -98
  75. package/esm5/app/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +0 -303
  76. package/esm5/app/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +0 -33
  77. package/esm5/app/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +0 -48
  78. package/esm5/app/component/checkout/ione-checkout.component.js +0 -163
  79. package/esm5/app/component/checkout/ione-checkout.module.js +0 -82
  80. package/esm5/app/component/checkout/retail-transaction-checkout/retail-transaction-checkout.component.js +0 -62
  81. package/esm5/app/component/common/icon/icon.component.js +0 -40
  82. package/esm5/app/component/common/image-display/image-display.component.js +0 -57
  83. package/esm5/app/component/common/no-image-display/no-image-display.component.js +0 -29
  84. package/esm5/app/component/core/core.module.js +0 -48
  85. package/esm5/app/component/shopping-cart/characteristic-answer/characteristic-answer.component.js +0 -66
  86. package/esm5/app/component/shopping-cart/ione-shopping-cart.component.js +0 -169
  87. package/esm5/app/component/shopping-cart/ione-shopping-cart.module.js +0 -70
  88. package/esm5/app/component/shopping-cart/shopping-cart/shopping-cart.component.js +0 -179
  89. package/esm5/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.js +0 -208
  90. package/esm5/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.js +0 -563
  91. package/esm5/app/component/shopping-cart/stock-status-indicator/stock-status-indicator.component.js +0 -28
  92. package/esm5/app/enum/checkout-steps.enum.js +0 -10
  93. package/esm5/app/enum/content-view-mode.enum.js +0 -10
  94. package/esm5/app/enum/direction.enum.js +0 -9
  95. package/esm5/app/enum/language-code.enum.js +0 -8
  96. package/esm5/app/enum/order-discount-type.enum.js +0 -7
  97. package/esm5/app/enum/time-size.type.js +0 -10
  98. package/esm5/app/model/business-object.js +0 -85
  99. package/esm5/app/model/text-value-container.js +0 -7
  100. package/esm5/app/pipe/append.pipe.js +0 -22
  101. package/esm5/app/pipe/co-currency.pipe.js +0 -55
  102. package/esm5/app/pipe/date-duration.pipe.js +0 -61
  103. package/esm5/app/pipe/delivery-time.pipe.js +0 -38
  104. package/esm5/app/pipe/localize.pipe.js +0 -34
  105. package/esm5/app/pipe/safe-style-pipe.js +0 -22
  106. package/esm5/app/service/dictionary.service.js +0 -83
  107. package/esm5/app/service/ione-connector-adapter.service.js +0 -549
  108. package/esm5/app/service/options.service.js +0 -108
  109. package/esm5/app/service/transaction-event.service.js +0 -21
  110. package/esm5/app/service/transaction.service.js +0 -690
  111. package/esm5/app/utils/string-utils.js +0 -73
  112. package/esm5/assets/dictionary/text.properties.js +0 -282
  113. package/esm5/colijnit-transaction.js +0 -36
  114. package/esm5/enum/icon.enum.js +0 -283
  115. package/esm5/factory/business-object-factory.js +0 -122
  116. package/esm5/factory/decorators/boolean.decorator.js +0 -106
  117. package/esm5/factory/decorators/complex-array.decorator.js +0 -59
  118. package/esm5/factory/decorators/complex-field.decorator.js +0 -61
  119. package/esm5/factory/decorators/date-field.decorator.js +0 -40
  120. package/esm5/factory/decorators/string-number.decorator.js +0 -47
  121. package/esm5/public_api.js +0 -8
  122. package/esm5/utils/array-utils.js +0 -188
  123. package/esm5/utils/is-nill.function.js +0 -5
  124. package/fesm5/colijnit-transaction.js +0 -5620
  125. package/fesm5/colijnit-transaction.js.map +0 -1
@@ -1,690 +0,0 @@
1
- import { __awaiter, __decorate, __generator, __values } from "tslib";
2
- import { EventEmitter, Injectable } from "@angular/core";
3
- import { IOneConnectorAdapterService } from "./ione-connector-adapter.service";
4
- import { NULL_RELATION_OBJECT } from "@colijnit/transactionapi/build/model/nul-relation-object";
5
- import { TransactionKind } from "@colijnit/transactionapi/build/enum/transaction-kind.enum";
6
- import { SequenceName } from "@colijnit/transactionapi/build/enum/sequence-name.enum";
7
- import { isNill } from "@colijnit/transactionapi/build/utils/function/is-nill.function";
8
- import { ArrayUtils } from "@colijnit/transactionapi/build/utils/array-utils";
9
- import { SetTransactionDeliveryOptionsRequest } from "@colijnit/transactionapi/build/model/set-transaction-delivery-options-request.bo";
10
- import { TransactionTotal } from "@colijnit/transactionapi/build/model/transaction-total.bo";
11
- import { TransactionLineType } from "@colijnit/transactionapi/build/enum/transaction-line-type.enum";
12
- import { LineOperationStatus } from "@colijnit/transactionapi/build/model/line-operation-status.bo";
13
- import { TransactionInfo } from "@colijnit/transactionapi/build/model/transaction-info.bo";
14
- import { PendingReasonType } from "@colijnit/transactionapi/build/enum/pending-reason-type.enum";
15
- var TransactionService = /** @class */ (function () {
16
- function TransactionService(_connector) {
17
- this._connector = _connector;
18
- this.transactionUpdated = new EventEmitter();
19
- this.applicationUser = false;
20
- this.articleAmount = 0;
21
- this._currentLines = [];
22
- this._currentTotals = new TransactionTotal();
23
- this._currentRelation = NULL_RELATION_OBJECT;
24
- this._currentTransaction = new TransactionInfo();
25
- this._currentLineOperationStatus = new LineOperationStatus();
26
- this._currentLineOperationStatuses = [];
27
- this._initializeTransaction();
28
- }
29
- Object.defineProperty(TransactionService.prototype, "currentLines", {
30
- get: function () {
31
- return this._currentLines;
32
- },
33
- set: function (value) {
34
- this._currentLines = value;
35
- this.articleAmount = ArrayUtils.FindAll(this._currentLines, function (line) { return line.isArticle; }).length;
36
- },
37
- enumerable: true,
38
- configurable: true
39
- });
40
- Object.defineProperty(TransactionService.prototype, "currentTotals", {
41
- get: function () {
42
- return this._currentTotals;
43
- },
44
- set: function (value) {
45
- this._currentTotals = value;
46
- },
47
- enumerable: true,
48
- configurable: true
49
- });
50
- Object.defineProperty(TransactionService.prototype, "currentRelation", {
51
- get: function () {
52
- return this._currentRelation;
53
- },
54
- enumerable: true,
55
- configurable: true
56
- });
57
- Object.defineProperty(TransactionService.prototype, "currentTransaction", {
58
- get: function () {
59
- return this._currentTransaction;
60
- },
61
- enumerable: true,
62
- configurable: true
63
- });
64
- Object.defineProperty(TransactionService.prototype, "currentLineOperationStatuses", {
65
- get: function () {
66
- return this._currentLineOperationStatuses;
67
- },
68
- set: function (values) {
69
- this._currentLineOperationStatuses = values;
70
- },
71
- enumerable: true,
72
- configurable: true
73
- });
74
- Object.defineProperty(TransactionService.prototype, "currentLineOperationStatus", {
75
- get: function () {
76
- var status = this.currentLineOperationStatuses.find(function (line) { return line.pendingReasonType !== PendingReasonType.NONE
77
- && line.pendingReasonType !== PendingReasonType.NON_CRITICAL_DISCONTINUATION; });
78
- return status;
79
- },
80
- set: function (value) {
81
- this._currentLineOperationStatus = value;
82
- },
83
- enumerable: true,
84
- configurable: true
85
- });
86
- TransactionService.prototype.getArticleFullObject = function (goodId) {
87
- return __awaiter(this, void 0, void 0, function () {
88
- return __generator(this, function (_a) {
89
- switch (_a.label) {
90
- case 0: return [4 /*yield*/, this._connector.getArticleFullObject(goodId)];
91
- case 1: return [2 /*return*/, _a.sent()];
92
- }
93
- });
94
- });
95
- };
96
- TransactionService.prototype.getGoodIdFromArticleNr = function (sku) {
97
- return __awaiter(this, void 0, void 0, function () {
98
- return __generator(this, function (_a) {
99
- switch (_a.label) {
100
- case 0: return [4 /*yield*/, this._connector.getGoodIdFromArticleNr(sku)];
101
- case 1: return [2 /*return*/, _a.sent()];
102
- }
103
- });
104
- });
105
- };
106
- TransactionService.prototype.getRelation = function () {
107
- return __awaiter(this, void 0, void 0, function () {
108
- var relationNo, _a;
109
- return __generator(this, function (_b) {
110
- switch (_b.label) {
111
- case 0: return [4 /*yield*/, this._connector.getRelationNumber(this._currentTransaction.relation.relationId)];
112
- case 1:
113
- relationNo = _b.sent();
114
- if (!relationNo) return [3 /*break*/, 4];
115
- _a = this;
116
- return [4 /*yield*/, this._connector.getCustomerFullObject(Number(relationNo))];
117
- case 2:
118
- _a._currentRelation = _b.sent();
119
- return [4 /*yield*/, this.loadCountriesOfRelationAddresses()];
120
- case 3:
121
- _b.sent();
122
- _b.label = 4;
123
- case 4: return [2 /*return*/, this._currentRelation];
124
- }
125
- });
126
- });
127
- };
128
- TransactionService.prototype.loadCountriesOfRelationAddresses = function () {
129
- return __awaiter(this, void 0, void 0, function () {
130
- var _a, _b, address, country, e_1_1;
131
- var e_1, _c;
132
- return __generator(this, function (_d) {
133
- switch (_d.label) {
134
- case 0:
135
- _d.trys.push([0, 5, 6, 7]);
136
- _a = __values(this.currentRelation.addresses), _b = _a.next();
137
- _d.label = 1;
138
- case 1:
139
- if (!!_b.done) return [3 /*break*/, 4];
140
- address = _b.value;
141
- return [4 /*yield*/, this.getCountry(address.countryId)];
142
- case 2:
143
- country = _d.sent();
144
- address.countryName = country.description;
145
- _d.label = 3;
146
- case 3:
147
- _b = _a.next();
148
- return [3 /*break*/, 1];
149
- case 4: return [3 /*break*/, 7];
150
- case 5:
151
- e_1_1 = _d.sent();
152
- e_1 = { error: e_1_1 };
153
- return [3 /*break*/, 7];
154
- case 6:
155
- try {
156
- if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
157
- }
158
- finally { if (e_1) throw e_1.error; }
159
- return [7 /*endfinally*/];
160
- case 7: return [2 /*return*/];
161
- }
162
- });
163
- });
164
- };
165
- TransactionService.prototype.getCountry = function (countryCode) {
166
- return __awaiter(this, void 0, void 0, function () {
167
- return __generator(this, function (_a) {
168
- switch (_a.label) {
169
- case 0: return [4 /*yield*/, this._connector.getCountry(countryCode)];
170
- case 1: return [2 /*return*/, _a.sent()];
171
- }
172
- });
173
- });
174
- };
175
- TransactionService.prototype.getRelationNumber = function (relationId) {
176
- return __awaiter(this, void 0, void 0, function () {
177
- return __generator(this, function (_a) {
178
- return [2 /*return*/, this._connector.getRelationNumber(relationId)];
179
- });
180
- });
181
- };
182
- TransactionService.prototype.saveNewRelation = function () {
183
- return __awaiter(this, void 0, void 0, function () {
184
- var _a;
185
- return __generator(this, function (_b) {
186
- switch (_b.label) {
187
- case 0:
188
- this.cleanRelationBeforeSave();
189
- _a = this;
190
- return [4 /*yield*/, this._connector.insertCustomer(this._currentRelation)];
191
- case 1:
192
- _a._currentRelation = _b.sent();
193
- return [4 /*yield*/, this.addRelationToTransaction(this._currentRelation.relationId)];
194
- case 2:
195
- _b.sent();
196
- return [2 /*return*/];
197
- }
198
- });
199
- });
200
- };
201
- TransactionService.prototype.saveRelation = function () {
202
- return __awaiter(this, void 0, void 0, function () {
203
- var _a;
204
- return __generator(this, function (_b) {
205
- switch (_b.label) {
206
- case 0:
207
- this.cleanRelationBeforeSave();
208
- _a = this;
209
- return [4 /*yield*/, this._connector.updateCustomer(this._currentRelation)];
210
- case 1:
211
- _a._currentRelation = _b.sent();
212
- return [2 /*return*/];
213
- }
214
- });
215
- });
216
- };
217
- TransactionService.prototype.cleanRelationBeforeSave = function () {
218
- ArrayUtils.RemoveElementsByFilter(this._currentRelation.contactOptions, (function (item) {
219
- return isNill(item.value);
220
- }));
221
- };
222
- TransactionService.prototype.getSequenceValue = function () {
223
- return __awaiter(this, void 0, void 0, function () {
224
- return __generator(this, function (_a) {
225
- switch (_a.label) {
226
- case 0: return [4 /*yield*/, this._connector.getSequenceValue(SequenceName.RelationId)];
227
- case 1: return [2 /*return*/, _a.sent()];
228
- }
229
- });
230
- });
231
- };
232
- TransactionService.prototype.getRelationPrivacySettings = function () {
233
- return __awaiter(this, void 0, void 0, function () {
234
- return __generator(this, function (_a) {
235
- switch (_a.label) {
236
- case 0: return [4 /*yield*/, this._connector.getRelationPrivacySettings()];
237
- case 1: return [2 /*return*/, _a.sent()];
238
- }
239
- });
240
- });
241
- };
242
- TransactionService.prototype.createTransaction = function () {
243
- return __awaiter(this, void 0, void 0, function () {
244
- var _this = this;
245
- return __generator(this, function (_a) {
246
- return [2 /*return*/, new Promise(function (resolve, reject) {
247
- _this._connector.createTransaction(TransactionKind.SalesOrder, "1").then(function (response) {
248
- _this._rememberCurrentTransaction(response);
249
- resolve(true);
250
- }, function (error) {
251
- reject(error);
252
- }).catch(function (reason) {
253
- reject(false);
254
- });
255
- })];
256
- });
257
- });
258
- };
259
- TransactionService.prototype.resolvePendingLineReason = function (pendingLineValues) {
260
- var _this = this;
261
- return new Promise(function (resolve) {
262
- _this._connector.resolvePendingLineReason(pendingLineValues).then(function (response) { return __awaiter(_this, void 0, void 0, function () {
263
- return __generator(this, function (_a) {
264
- this._rememberCurrentTransaction(response);
265
- this._rememberCurrentTransactionLineStatus(response);
266
- resolve(response);
267
- return [2 /*return*/];
268
- });
269
- }); }).catch(function (reason) {
270
- resolve();
271
- });
272
- });
273
- };
274
- TransactionService.prototype.getTransaction = function (transactionNo) {
275
- return __awaiter(this, void 0, void 0, function () {
276
- return __generator(this, function (_a) {
277
- switch (_a.label) {
278
- case 0: return [4 /*yield*/, this.openExistingTransaction(TransactionKind.SalesOrder, transactionNo)];
279
- case 1: return [2 /*return*/, _a.sent()];
280
- }
281
- });
282
- });
283
- };
284
- TransactionService.prototype.openExistingTransaction = function (kind, transactionNr) {
285
- var _this = this;
286
- return new Promise(function (resolve, reject) {
287
- _this._connector.getTransactionByNrAndKind(kind, transactionNr)
288
- .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
289
- return __generator(this, function (_a) {
290
- this._rememberCurrentTransaction(response);
291
- if (response.isSuccess) {
292
- resolve(true);
293
- }
294
- else {
295
- reject(false);
296
- }
297
- return [2 /*return*/];
298
- });
299
- }); })
300
- .catch(function (reason) {
301
- reject(false);
302
- });
303
- });
304
- };
305
- TransactionService.prototype.saveTransaction = function (close) {
306
- if (close === void 0) { close = false; }
307
- return __awaiter(this, void 0, void 0, function () {
308
- var response;
309
- return __generator(this, function (_a) {
310
- switch (_a.label) {
311
- case 0: return [4 /*yield*/, this._connector.saveTransaction(this.currentTransaction.uuid)];
312
- case 1:
313
- response = _a.sent();
314
- if (response.isSuccess) {
315
- this._rememberCurrentTransaction(response);
316
- }
317
- return [2 /*return*/];
318
- }
319
- });
320
- });
321
- };
322
- TransactionService.prototype.addRelationToTransaction = function (relationId) {
323
- return __awaiter(this, void 0, void 0, function () {
324
- var success;
325
- return __generator(this, function (_a) {
326
- switch (_a.label) {
327
- case 0: return [4 /*yield*/, this._connector.addRelationToTransaction(this._currentTransaction.uuid, relationId)];
328
- case 1:
329
- success = _a.sent();
330
- if (!success) return [3 /*break*/, 4];
331
- return [4 /*yield*/, this.saveTransaction()];
332
- case 2:
333
- _a.sent();
334
- return [4 /*yield*/, this.getTransaction(this._currentTransaction.transactionNr)];
335
- case 3:
336
- _a.sent();
337
- _a.label = 4;
338
- case 4: return [2 /*return*/];
339
- }
340
- });
341
- });
342
- };
343
- TransactionService.prototype.getCommissionCodes = function (languageCode) {
344
- return __awaiter(this, void 0, void 0, function () {
345
- return __generator(this, function (_a) {
346
- switch (_a.label) {
347
- case 0: return [4 /*yield*/, this._connector.getCommissionCodes(languageCode)];
348
- case 1: return [2 /*return*/, _a.sent()];
349
- }
350
- });
351
- });
352
- };
353
- TransactionService.prototype.getInOutCollection = function (languageCode) {
354
- return __awaiter(this, void 0, void 0, function () {
355
- return __generator(this, function (_a) {
356
- switch (_a.label) {
357
- case 0: return [4 /*yield*/, this._connector.getInOutCollection(languageCode)];
358
- case 1: return [2 /*return*/, _a.sent()];
359
- }
360
- });
361
- });
362
- };
363
- TransactionService.prototype.getTransactionArticleWarehouses = function (goodId) {
364
- return __awaiter(this, void 0, void 0, function () {
365
- return __generator(this, function (_a) {
366
- return [2 /*return*/, this._connector.getTransactionArticleWarehouses(goodId)];
367
- });
368
- });
369
- };
370
- TransactionService.prototype.getMarketingCodes = function () {
371
- return __awaiter(this, void 0, void 0, function () {
372
- return __generator(this, function (_a) {
373
- switch (_a.label) {
374
- case 0: return [4 /*yield*/, this._connector.getMarketingCodes()];
375
- case 1: return [2 /*return*/, _a.sent()];
376
- }
377
- });
378
- });
379
- };
380
- TransactionService.prototype.insertCustomer = function (relation) {
381
- return __awaiter(this, void 0, void 0, function () {
382
- return __generator(this, function (_a) {
383
- switch (_a.label) {
384
- case 0: return [4 /*yield*/, this._connector.insertCustomer(relation)];
385
- case 1: return [2 /*return*/, _a.sent()];
386
- }
387
- });
388
- });
389
- };
390
- TransactionService.prototype.updateCustomer = function (relation) {
391
- return __awaiter(this, void 0, void 0, function () {
392
- var _this = this;
393
- return __generator(this, function (_a) {
394
- return [2 /*return*/, new Promise(function (resolve, reject) {
395
- _this._connector.updateCustomer(relation).then(function (response) { return __awaiter(_this, void 0, void 0, function () {
396
- return __generator(this, function (_a) {
397
- this._currentRelation = relation;
398
- resolve(response);
399
- return [2 /*return*/];
400
- });
401
- }); })
402
- .catch(function (response) {
403
- resolve(response);
404
- });
405
- })];
406
- });
407
- });
408
- };
409
- TransactionService.prototype.getDeliveryMethods = function () {
410
- return __awaiter(this, void 0, void 0, function () {
411
- return __generator(this, function (_a) {
412
- switch (_a.label) {
413
- case 0: return [4 /*yield*/, this._connector.getDeliveryMethods()];
414
- case 1: return [2 /*return*/, _a.sent()];
415
- }
416
- });
417
- });
418
- };
419
- TransactionService.prototype.getDeliveryOptions = function () {
420
- return __awaiter(this, void 0, void 0, function () {
421
- return __generator(this, function (_a) {
422
- switch (_a.label) {
423
- case 0: return [4 /*yield*/, this._connector.getDeliveryOptions()];
424
- case 1: return [2 /*return*/, _a.sent()];
425
- }
426
- });
427
- });
428
- };
429
- TransactionService.prototype.setTransactionDeliveryOptions = function () {
430
- return __awaiter(this, void 0, void 0, function () {
431
- var transactionDeliveryOptionsRequest;
432
- var _this = this;
433
- return __generator(this, function (_a) {
434
- transactionDeliveryOptionsRequest = this._getTransactionDeliveryOptions();
435
- return [2 /*return*/, new Promise(function (resolve, reject) {
436
- _this._connector.setTransactionDeliveryOptions(transactionDeliveryOptionsRequest).then(function (response) { return __awaiter(_this, void 0, void 0, function () {
437
- return __generator(this, function (_a) {
438
- resolve(response.isSuccess);
439
- return [2 /*return*/];
440
- });
441
- }); }, function (error) {
442
- reject(error);
443
- })
444
- .catch(function (response) {
445
- resolve(false);
446
- });
447
- })];
448
- });
449
- });
450
- };
451
- TransactionService.prototype.getRelationListObjects = function (relationRequest) {
452
- return __awaiter(this, void 0, void 0, function () {
453
- return __generator(this, function (_a) {
454
- switch (_a.label) {
455
- case 0: return [4 /*yield*/, this._connector.getRelationListObjects(relationRequest)];
456
- case 1: return [2 /*return*/, _a.sent()];
457
- }
458
- });
459
- });
460
- };
461
- TransactionService.prototype.retrieveLineImage = function (line) {
462
- return __awaiter(this, void 0, void 0, function () {
463
- var goodId;
464
- return __generator(this, function (_a) {
465
- switch (_a.label) {
466
- case 0: return [4 /*yield*/, this._connector.getGoodIdFromArticleNr(line.articleNumber)];
467
- case 1:
468
- goodId = _a.sent();
469
- if (!isNaN(goodId)) {
470
- return [2 /*return*/, this._connector.getSingleImage(goodId, 1, true, true)];
471
- }
472
- else {
473
- return [2 /*return*/, ""];
474
- }
475
- return [2 /*return*/];
476
- }
477
- });
478
- });
479
- };
480
- TransactionService.prototype.addArticle = function (articleNo, amount, warehouseNo, commissionCode, isReturn) {
481
- if (amount === void 0) { amount = 1; }
482
- if (warehouseNo === void 0) { warehouseNo = 1; }
483
- if (commissionCode === void 0) { commissionCode = "2"; }
484
- if (isReturn === void 0) { isReturn = false; }
485
- return __awaiter(this, void 0, void 0, function () {
486
- var _this = this;
487
- return __generator(this, function (_a) {
488
- return [2 /*return*/, new Promise(function (resolve, reject) {
489
- _this._connector.addTransactionLine(_this._currentTransaction.uuid, TransactionLineType.ArticleLine, articleNo, amount, warehouseNo, commissionCode, isReturn)
490
- .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
491
- return __generator(this, function (_a) {
492
- resolve(true);
493
- return [2 /*return*/];
494
- });
495
- }); }, function (error) {
496
- reject(error);
497
- })
498
- .catch(function (reason) {
499
- resolve(false);
500
- });
501
- })];
502
- });
503
- });
504
- };
505
- TransactionService.prototype.addTransactionLine = function (lineType, articleNo, amount, warehouseNo, commissionCode, isReturn) {
506
- return __awaiter(this, void 0, void 0, function () {
507
- var _this = this;
508
- return __generator(this, function (_a) {
509
- return [2 /*return*/, new Promise(function (resolve, reject) {
510
- _this._connector.addTransactionLine(_this.currentTransaction.uuid, lineType, articleNo, amount, warehouseNo, commissionCode, isReturn)
511
- .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
512
- return __generator(this, function (_a) {
513
- this._rememberCurrentTransaction(response);
514
- this._rememberCurrentTransactionLineStatus(response);
515
- resolve(response);
516
- return [2 /*return*/];
517
- });
518
- }); }, function (error) {
519
- reject(error);
520
- })
521
- .catch(function (reason) {
522
- resolve();
523
- });
524
- })];
525
- });
526
- });
527
- };
528
- TransactionService.prototype.cancelAddTransactionLine = function (lineUuid) {
529
- return __awaiter(this, void 0, void 0, function () {
530
- var _this = this;
531
- return __generator(this, function (_a) {
532
- return [2 /*return*/, new Promise(function (resolve, reject) {
533
- _this._connector.cancelAddTransactionLine(lineUuid)
534
- .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
535
- return __generator(this, function (_a) {
536
- this._rememberCurrentTransaction(response);
537
- if (response.isSuccess) {
538
- resolve(response);
539
- }
540
- else {
541
- reject(response);
542
- }
543
- return [2 /*return*/];
544
- });
545
- }); })
546
- .catch(function (reason) {
547
- resolve();
548
- });
549
- })];
550
- });
551
- });
552
- };
553
- TransactionService.prototype.deleteTransactionLine = function (transactionUuid, TransactionLineUuid) {
554
- return __awaiter(this, void 0, void 0, function () {
555
- var _this = this;
556
- return __generator(this, function (_a) {
557
- return [2 /*return*/, new Promise(function (resolve, reject) {
558
- _this._connector.deleteTransactionLine(transactionUuid, TransactionLineUuid)
559
- .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
560
- return __generator(this, function (_a) {
561
- this._rememberCurrentTransaction(response);
562
- this._rememberCurrentTransactionLineStatus(response);
563
- if (response.isSuccess) {
564
- resolve(response);
565
- }
566
- else {
567
- reject(response);
568
- }
569
- return [2 /*return*/];
570
- });
571
- }); })
572
- .catch(function (reason) {
573
- resolve();
574
- });
575
- })];
576
- });
577
- });
578
- };
579
- TransactionService.prototype.changeTransactionLineQuantity = function (lineUuid, newQuantity) {
580
- return __awaiter(this, void 0, void 0, function () {
581
- var _this = this;
582
- return __generator(this, function (_a) {
583
- return [2 /*return*/, new Promise(function (resolve) {
584
- _this._connector.changeTransactionLineQuantity(_this.currentTransaction.uuid, lineUuid, newQuantity)
585
- .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
586
- return __generator(this, function (_a) {
587
- if (response.isSuccess) {
588
- this._rememberCurrentTransaction(response);
589
- this._rememberCurrentTransactionLineStatus(response);
590
- }
591
- resolve(response);
592
- return [2 /*return*/];
593
- });
594
- }); }).catch(function (reason) {
595
- resolve();
596
- });
597
- })];
598
- });
599
- });
600
- };
601
- TransactionService.prototype.setRelationByUser = function (username, password) {
602
- return __awaiter(this, void 0, void 0, function () {
603
- var _this = this;
604
- return __generator(this, function (_a) {
605
- return [2 /*return*/, new Promise(function (resolve) {
606
- _this._connector.setRelationByUser(_this.currentTransaction.uuid, username, password)
607
- .then(function (isSuccess) { return __awaiter(_this, void 0, void 0, function () {
608
- return __generator(this, function (_a) {
609
- resolve(isSuccess);
610
- return [2 /*return*/];
611
- });
612
- }); }).catch(function (reason) {
613
- resolve(false);
614
- });
615
- })];
616
- });
617
- });
618
- };
619
- // public async setRelationByUser(username: string, password: string): Promise<boolean> {
620
- // const response: boolean = await this._connector.setRelationByUser(this.currentTransaction.uuid, username, password);
621
- // return response;
622
- // }
623
- TransactionService.prototype._initializeTransaction = function () {
624
- if (this._currentTransaction.preferredDeliveryDate2 === undefined) {
625
- this._currentTransaction.preferredDeliveryDate2 = "=";
626
- }
627
- };
628
- TransactionService.prototype._rememberCurrentTransaction = function (value) {
629
- this._currentTransaction = value.transactionInfo;
630
- this._initializeTransaction();
631
- this.currentLines = value.transactionLines;
632
- this.currentTotals = value.transactionTotal;
633
- this.currentLineOperationStatuses = value.lineOperationStatuses;
634
- this._updateRelation();
635
- this.transactionUpdated.emit();
636
- };
637
- TransactionService.prototype._rememberCurrentTransactionLineStatus = function (value) {
638
- // this._currentLineOperationStatus.uuid = value.lineUuid;
639
- // this._currentLineOperationStatus.pendingReason = value.pendingReason;
640
- // this._currentLineOperationStatus.pendingReasonType = value.pendingReasonType;
641
- };
642
- TransactionService.prototype._updateRelation = function () {
643
- return __awaiter(this, void 0, void 0, function () {
644
- var relationNr, _a;
645
- return __generator(this, function (_b) {
646
- switch (_b.label) {
647
- case 0:
648
- if (!(this.currentTransaction && this.currentTransaction.relation && this.currentTransaction.relation.relationId)) return [3 /*break*/, 3];
649
- if (!(!this._currentRelation || this._currentRelation.relationId !== this.currentTransaction.relation.relationId)) return [3 /*break*/, 3];
650
- return [4 /*yield*/, this._connector.getRelationNumber(this.currentTransaction.relation.relationId)];
651
- case 1:
652
- relationNr = _b.sent();
653
- if (!relationNr) return [3 /*break*/, 3];
654
- _a = this;
655
- return [4 /*yield*/, this._connector.getCustomerFullObject(Number(relationNr))];
656
- case 2:
657
- _a._currentRelation = _b.sent();
658
- _b.label = 3;
659
- case 3: return [2 /*return*/];
660
- }
661
- });
662
- });
663
- };
664
- TransactionService.prototype._getTransactionDeliveryOptions = function () {
665
- var transactionDeliveryOptionsRequest = new SetTransactionDeliveryOptionsRequest();
666
- transactionDeliveryOptionsRequest.allowPartialDelivery = this._currentTransaction.allowPartialDelivery;
667
- transactionDeliveryOptionsRequest.deliveryDate = this._currentTransaction.deliveryDate;
668
- transactionDeliveryOptionsRequest.deliveryMethod = this._currentTransaction.deliveryMethod;
669
- transactionDeliveryOptionsRequest.deliveryOptions = this._currentTransaction.deliveryOptions;
670
- transactionDeliveryOptionsRequest.marketingCode = this._currentTransaction.marketingCode;
671
- transactionDeliveryOptionsRequest.ownReference = this._currentTransaction.ownReference;
672
- transactionDeliveryOptionsRequest.preferredDeliveryDate = this._currentTransaction.preferredDeliveryDate;
673
- transactionDeliveryOptionsRequest.preferredDeliveryDate2 = this._currentTransaction.preferredDeliveryDate2;
674
- transactionDeliveryOptionsRequest.relationReference = this._currentTransaction.relationReference;
675
- transactionDeliveryOptionsRequest.remark = this._currentTransaction.remark;
676
- transactionDeliveryOptionsRequest.transactionUuid = this._currentTransaction.uuid;
677
- transactionDeliveryOptionsRequest.transactionAddress = this._currentTransaction.transactionAddress.nawNr;
678
- transactionDeliveryOptionsRequest.invoiceAddress = this._currentTransaction.invoiceAddress.nawNr;
679
- return transactionDeliveryOptionsRequest;
680
- };
681
- TransactionService.ctorParameters = function () { return [
682
- { type: IOneConnectorAdapterService }
683
- ]; };
684
- TransactionService = __decorate([
685
- Injectable()
686
- ], TransactionService);
687
- return TransactionService;
688
- }());
689
- export { TransactionService };
690
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb2xpam5pdC90cmFuc2FjdGlvbi8iLCJzb3VyY2VzIjpbImFwcC9zZXJ2aWNlL3RyYW5zYWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQWtCLFVBQVUsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUc3RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUU5RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFHMUYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBSXBGLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN0RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDNUUsT0FBTyxFQUFDLG9DQUFvQyxFQUFDLE1BQU0sa0ZBQWtGLENBQUM7QUFJdEksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFFM0YsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFLbkcsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFHbEcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBRXpGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBRy9GO0lBMERFLDRCQUNTLFVBQXVDO1FBQXZDLGVBQVUsR0FBVixVQUFVLENBQTZCO1FBMUR6Qyx1QkFBa0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUdsRSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQTZDakMsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFekIsa0JBQWEs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LEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQztRQUN2RixpQ0FBaUMsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUM7UUFDekcsaUNBQWlDLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDO1FBQzNHLGlDQUFpQyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUNqRyxpQ0FBaUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztRQUMzRSxpQ0FBaUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUNsRixpQ0FBaUMsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1FBQ3pHLGlDQUFpQyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztRQUNqRyxPQUFPLGlDQUFpQyxDQUFDO0lBQzNDLENBQUM7O2dCQXRWb0IsMkJBQTJCOztJQTNEckMsa0JBQWtCO1FBRDlCLFVBQVUsRUFBRTtPQUNBLGtCQUFrQixDQWtaOUI7SUFBRCx5QkFBQztDQUFBLEFBbFpELElBa1pDO1NBbFpZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge0lPbmVDb25uZWN0b3JBZGFwdGVyU2VydmljZX0gZnJvbSBcIi4vaW9uZS1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0N1c3RvbWVyRnVsbE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jdXN0b21lci1mdWxsLW9iamVjdC5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvbkFueVR5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tYW55LXR5cGVcIjtcbmltcG9ydCB7TlVMTF9SRUxBVElPTl9PQkpFQ1R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbnVsLXJlbGF0aW9uLW9iamVjdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLXJlc3BvbnNlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uS2luZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWtpbmQuZW51bVwiO1xuaW1wb3J0IHtNYXJrZXRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbWFya2V0aW5nLmJvXCI7XG5pbXBvcnQge1JlbGF0aW9uUHJpdmFjeVNldHRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcHJpdmFjeS1zZXR0aW5nLmJvXCI7XG5pbXBvcnQge1NlcXVlbmNlTmFtZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3NlcXVlbmNlLW5hbWUuZW51bVwiO1xuaW1wb3J0IHtEZWxpdmVyeU1ldGhvZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxpdmVyeS1tZXRob2QuYm9cIjtcbmltcG9ydCB7RGVsaXZlcnlPcHRpb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktb3B0aW9uLmJvXCI7XG5pbXBvcnQge0NvbnRhY3RPcHRpb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY29udGFjdC1vcHRpb24uYm9cIjtcbmltcG9ydCB7aXNOaWxsfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL3V0aWxzL2Z1bmN0aW9uL2lzLW5pbGwuZnVuY3Rpb25cIjtcbmltcG9ydCB7QXJyYXlVdGlsc30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC91dGlscy9hcnJheS11dGlsc1wiO1xuaW1wb3J0IHtTZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvc2V0LXRyYW5zYWN0aW9uLWRlbGl2ZXJ5LW9wdGlvbnMtcmVxdWVzdC5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvbkxpc3RPYmplY3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tbGlzdC1vYmplY3QuYm9cIjtcbmltcG9ydCB7UmVsYXRpb25SZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXJlcXVlc3RcIjtcbmltcG9ydCB7Q291bnRyeX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb3VudHJ5LmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uVG90YWx9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tdG90YWwuYm9cIjtcbmltcG9ydCB7VmFsaWRhdGlvblJlc3VsdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC92YWxpZGF0aW9uLXJlc3VsdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24tbGluZS10eXBlLmVudW1cIjtcbmltcG9ydCB7UmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZXNvbHZlLXBlbmRpbmctcmVhc29uLXJlcXVlc3QuYm9cIjtcbmltcG9ydCB7Q29Eb21haW5WYWx1ZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWFydGljbGUtd2FyZWhvdXNlLmJvXCI7XG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3RcIjtcbmltcG9ydCB7TGluZU9wZXJhdGlvblN0YXR1c30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9saW5lLW9wZXJhdGlvbi1zdGF0dXMuYm9cIjtcbmltcG9ydCB7TGluZU9wZXJhdGlvblJlc3BvbnNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2xpbmUtb3BlcmF0aW9uLXJlc3BvbnNlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZUluZm99IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbGluZS1pbmZvLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uUmVzcG9uc2VCYXNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXJlc3BvbnNlLWJhc2UuYm9cIjtcbmltcG9ydCB7UGVuZGluZ1JlYXNvblR5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9wZW5kaW5nLXJlYXNvbi10eXBlLmVudW1cIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uU2VydmljZSB7XG4gIHB1YmxpYyB0cmFuc2FjdGlvblVwZGF0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwdWJsaWMgZW1haWxBZGRyZXNzOiBzdHJpbmc7XG4gIHB1YmxpYyBhcHBsaWNhdGlvblVzZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRMaW5lcygpOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50TGluZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0IGN1cnJlbnRMaW5lcyh2YWx1ZTogVHJhbnNhY3Rpb25MaW5lSW5mb1tdKSB7XG4gICAgdGhpcy5fY3VycmVudExpbmVzID0gdmFsdWU7XG4gICAgdGhpcy5hcnRpY2xlQW1vdW50ID0gQXJyYXlVdGlscy5GaW5kQWxsKHRoaXMuX2N1cnJlbnRMaW5lcywgbGluZSA9PiBsaW5lLmlzQXJ0aWNsZSkubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50VG90YWxzKHZhbHVlOiBUcmFuc2FjdGlvblRvdGFsKSB7XG4gICAgdGhpcy5fY3VycmVudFRvdGFscyA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50VG90YWxzKCk6IFRyYW5zYWN0aW9uVG90YWwge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VG90YWxzO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50UmVsYXRpb24oKTogUmVsYXRpb25BbnlUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlbGF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50VHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25JbmZvIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzKHZhbHVlczogTGluZU9wZXJhdGlvblN0YXR1c1tdKSB7XG4gICAgdGhpcy5fY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcyA9IHZhbHVlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcygpOiBMaW5lT3BlcmF0aW9uU3RhdHVzW10ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzO1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cyh2YWx1ZTogTGluZU9wZXJhdGlvblN0YXR1cykge1xuICAgIHRoaXMuX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzKCk6IExpbmVPcGVyYXRpb25TdGF0dXMgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YXR1czogTGluZU9wZXJhdGlvblN0YXR1cyA9IHRoaXMuY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcy5maW5kKGxpbmUgPT4gbGluZS5wZW5kaW5nUmVhc29uVHlwZSAhPT0gUGVuZGluZ1JlYXNvblR5cGUuTk9ORVxuICAgICAgICAmJiBsaW5lLnBlbmRpbmdSZWFzb25UeXBlICE9PSBQZW5kaW5nUmVhc29uVHlwZS5OT05fQ1JJVElDQUxfRElTQ09OVElOVUFUSU9OKTtcbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgcHVibGljIGFydGljbGVBbW91bnQ6IG51bWJlciA9IDA7XG5cbiAgcHJpdmF0ZSBfY3VycmVudExpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSBbXTtcbiAgcHJpdmF0ZSBfY3VycmVudFRvdGFsczogVHJhbnNhY3Rpb25Ub3RhbCA9IG5ldyBUcmFuc2FjdGlvblRvdGFsKCk7XG4gIHByaXZhdGUgX2N1cnJlbnRSZWxhdGlvbjogUmVsYXRpb25BbnlUeXBlID0gTlVMTF9SRUxBVElPTl9PQkpFQ1Q7XG4gIHByaXZhdGUgX2N1cnJlbnRUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25JbmZvID0gbmV3IFRyYW5zYWN0aW9uSW5mbygpO1xuICBwcml2YXRlIF9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1czogTGluZU9wZXJhdGlvblN0YXR1cyA9IG5ldyBMaW5lT3BlcmF0aW9uU3RhdHVzKCk7XG4gIHByaXZhdGUgX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzZXM6IExpbmVPcGVyYXRpb25TdGF0dXNbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBfY29ubmVjdG9yOiBJT25lQ29ubmVjdG9yQWRhcHRlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuX2luaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvbigpOiBQcm9taXNlPFJlbGF0aW9uQW55VHlwZT4ge1xuICAgIGNvbnN0IHJlbGF0aW9uTm86IHN0cmluZyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRSZWxhdGlvbk51bWJlcih0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ucmVsYXRpb24ucmVsYXRpb25JZCk7XG5cbiAgICBpZiAocmVsYXRpb25Obykge1xuICAgICAgdGhpcy5fY3VycmVudFJlbGF0aW9uID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEN1c3RvbWVyRnVsbE9iamVjdChOdW1iZXIocmVsYXRpb25ObykpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkQ291bnRyaWVzT2ZSZWxhdGlvbkFkZHJlc3NlcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlbGF0aW9uO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRDb3VudHJpZXNPZlJlbGF0aW9uQWRkcmVzc2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiB0aGlzLmN1cnJlbnRSZWxhdGlvbi5hZGRyZXNzZXMpIHtcbiAgICAgIGNvbnN0IGNvdW50cnk6IENvdW50cnkgPSBhd2FpdCB0aGlzLmdldENvdW50cnkoYWRkcmVzcy5jb3VudHJ5SWQpO1xuICAgICAgYWRkcmVzcy5jb3VudHJ5TmFtZSA9IGNvdW50cnkuZGVzY3JpcHRpb247XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENvdW50cnkoY291bnRyeUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q291bnRyeT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0Q291bnRyeShjb3VudHJ5Q29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25OdW1iZXIocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldFJlbGF0aW9uTnVtYmVyKHJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmVOZXdSZWxhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsZWFuUmVsYXRpb25CZWZvcmVTYXZlKCk7XG4gICAgdGhpcy5fY3VycmVudFJlbGF0aW9uID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmluc2VydEN1c3RvbWVyKHRoaXMuX2N1cnJlbnRSZWxhdGlvbik7XG4gICAgYXdhaXQgdGhpcy5hZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24odGhpcy5fY3VycmVudFJlbGF0aW9uLnJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmVSZWxhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsZWFuUmVsYXRpb25CZWZvcmVTYXZlKCk7XG4gICAgdGhpcy5fY3VycmVudFJlbGF0aW9uID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLnVwZGF0ZUN1c3RvbWVyKHRoaXMuX2N1cnJlbnRSZWxhdGlvbik7XG4gIH1cblxuICBwdWJsaWMgY2xlYW5SZWxhdGlvbkJlZm9yZVNhdmUoKTogdm9pZCB7XG4gICAgQXJyYXlVdGlscy5SZW1vdmVFbGVtZW50c0J5RmlsdGVyKHRoaXMuX2N1cnJlbnRSZWxhdGlvbi5jb250YWN0T3B0aW9ucywgKChpdGVtOiBDb250YWN0T3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gaXNOaWxsKGl0ZW0udmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTZXF1ZW5jZVZhbHVlKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRTZXF1ZW5jZVZhbHVlKFNlcXVlbmNlTmFtZS5SZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpOiBQcm9taXNlPFJlbGF0aW9uUHJpdmFjeVNldHRpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0UmVsYXRpb25Qcml2YWN5U2V0dGluZ3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVUcmFuc2FjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuY3JlYXRlVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFwiMVwiKS50aGVuKChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmVQZW5kaW5nTGluZVJlYXNvbihwZW5kaW5nTGluZVZhbHVlczogUmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uUmVxdWVzdCk6IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4oKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IucmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uKHBlbmRpbmdMaW5lVmFsdWVzKS50aGVuKGFzeW5jIChyZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb25MaW5lU3RhdHVzKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9KS5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25ObzogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3BlbkV4aXN0aW5nVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIHRyYW5zYWN0aW9uTm8pO1xuICB9XG5cbiAgcHVibGljIG9wZW5FeGlzdGluZ1RyYW5zYWN0aW9uKGtpbmQ6IFRyYW5zYWN0aW9uS2luZCwgdHJhbnNhY3Rpb25OcjogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQoa2luZCwgdHJhbnNhY3Rpb25OcilcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb24oY2xvc2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCk7XG4gICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24ocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9ICBhd2FpdCB0aGlzLl9jb25uZWN0b3IuYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi51dWlkLCByZWxhdGlvbklkKTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgYXdhaXQgdGhpcy5zYXZlVHJhbnNhY3Rpb24oKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb24odGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTnIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0Q29tbWlzc2lvbkNvZGVzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW5PdXRDb2xsZWN0aW9uKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEluT3V0Q29sbGVjdGlvbihsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZXMoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VzKGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWFya2V0aW5nQ29kZXMoKTogUHJvbWlzZTxNYXJrZXRpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0TWFya2V0aW5nQ29kZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbnNlcnRDdXN0b21lcihyZWxhdGlvbjogQ3VzdG9tZXJGdWxsT2JqZWN0KTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmluc2VydEN1c3RvbWVyKHJlbGF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDdXN0b21lcihyZWxhdGlvbjogQ3VzdG9tZXJGdWxsT2JqZWN0KTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q3VzdG9tZXJGdWxsT2JqZWN0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IudXBkYXRlQ3VzdG9tZXIocmVsYXRpb24pLnRoZW4oYXN5bmMoIHJlc3BvbnNlOiBDdXN0b21lckZ1bGxPYmplY3QpID0+IHtcbiAgICAgICAgdGhpcy5fY3VycmVudFJlbGF0aW9uID0gcmVsYXRpb247XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgocmVzcG9uc2U6IEN1c3RvbWVyRnVsbE9iamVjdCkgPT4ge1xuICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5TWV0aG9kcygpOiBQcm9taXNlPERlbGl2ZXJ5TWV0aG9kW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldERlbGl2ZXJ5TWV0aG9kcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5T3B0aW9ucygpOiBQcm9taXNlPERlbGl2ZXJ5T3B0aW9uW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldERlbGl2ZXJ5T3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdDogU2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0ID0gdGhpcy5fZ2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnMoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLnNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdCkudGhlbihhc3luYyggcmVzcG9uc2U6IFRyYW5zYWN0aW9uUmVzcG9uc2VCYXNlKSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UuaXNTdWNjZXNzKTtcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgocmVzcG9uc2U6IFRyYW5zYWN0aW9uUmVzcG9uc2VCYXNlKSA9PiB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25MaXN0T2JqZWN0cyhyZWxhdGlvblJlcXVlc3Q6IFJlbGF0aW9uUmVxdWVzdCk6IFByb21pc2U8UmVsYXRpb25MaXN0T2JqZWN0W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldFJlbGF0aW9uTGlzdE9iamVjdHMocmVsYXRpb25SZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXRyaWV2ZUxpbmVJbWFnZShsaW5lOiBUcmFuc2FjdGlvbkxpbmVJbmZvKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKGxpbmUuYXJ0aWNsZU51bWJlcik7XG4gICAgaWYgKCFpc05hTihnb29kSWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldFNpbmdsZUltYWdlKGdvb2RJZCwgMSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRBcnRpY2xlKGFydGljbGVObzogc3RyaW5nLCBhbW91bnQ6IG51bWJlciA9IDEsIHdhcmVob3VzZU5vOiBudW1iZXIgPSAxLCBjb21taXNzaW9uQ29kZTogc3RyaW5nID0gXCIyXCIsIGlzUmV0dXJuOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmFkZFRyYW5zYWN0aW9uTGluZSh0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgVHJhbnNhY3Rpb25MaW5lVHlwZS5BcnRpY2xlTGluZSwgYXJ0aWNsZU5vLCBhbW91bnQsIHdhcmVob3VzZU5vLCBjb21taXNzaW9uQ29kZSwgaXNSZXR1cm4pXG4gICAgICAgIC50aGVuKGFzeW5jKCByZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFRyYW5zYWN0aW9uTGluZShsaW5lVHlwZTogVHJhbnNhY3Rpb25MaW5lVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnRpY2xlTm86IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJlaG91c2VObz86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXNzaW9uQ29kZT86IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JldHVybj86IGJvb2xlYW4pOiBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rvci5hZGRUcmFuc2FjdGlvbkxpbmUodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgbGluZVR5cGUsIGFydGljbGVObywgYW1vdW50LCB3YXJlaG91c2VObywgY29tbWlzc2lvbkNvZGUsIGlzUmV0dXJuKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbkxpbmVTdGF0dXMocmVzcG9uc2UpO1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2FuY2VsQWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVVdWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuY2FuY2VsQWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVVdWlkKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QocmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQ6IHN0cmluZywgVHJhbnNhY3Rpb25MaW5lVXVpZDogc3RyaW5nKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZCwgVHJhbnNhY3Rpb25MaW5lVXVpZClcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb25MaW5lU3RhdHVzKHJlc3BvbnNlKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eShsaW5lVXVpZDogc3RyaW5nLCBuZXdRdWFudGl0eTogbnVtYmVyKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eSh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi51dWlkLCBsaW5lVXVpZCwgbmV3UXVhbnRpdHkpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb25MaW5lU3RhdHVzKHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0pLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRSZWxhdGlvbkJ5VXNlcih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLnNldFJlbGF0aW9uQnlVc2VyKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQsIHVzZXJuYW1lLCBwYXNzd29yZClcbiAgICAgICAgLnRoZW4oYXN5bmMgKGlzU3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHJlc29sdmUoaXNTdWNjZXNzKTtcbiAgICAgICAgfSkuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8vIHB1YmxpYyBhc3luYyBzZXRSZWxhdGlvbkJ5VXNlcih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIC8vICAgY29uc3QgcmVzcG9uc2U6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jb25uZWN0b3Iuc2V0UmVsYXRpb25CeVVzZXIodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgdXNlcm5hbWUsIHBhc3N3b3JkKTtcbiAgLy8gICByZXR1cm4gcmVzcG9uc2U7XG4gIC8vIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ucHJlZmVycmVkRGVsaXZlcnlEYXRlMiA9IFwiPVwiO1xuICAgICAgfVxuICB9XG4gIHByaXZhdGUgX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHZhbHVlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbiA9IHZhbHVlLnRyYW5zYWN0aW9uSW5mbztcbiAgICB0aGlzLl9pbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcblxuICAgIHRoaXMuY3VycmVudExpbmVzID0gdmFsdWUudHJhbnNhY3Rpb25MaW5lcztcbiAgICB0aGlzLmN1cnJlbnRUb3RhbHMgPSB2YWx1ZS50cmFuc2FjdGlvblRvdGFsO1xuXG4gICAgdGhpcy5jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzID0gdmFsdWUubGluZU9wZXJhdGlvblN0YXR1c2VzO1xuXG4gICAgdGhpcy5fdXBkYXRlUmVsYXRpb24oKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uVXBkYXRlZC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbkxpbmVTdGF0dXModmFsdWU6IExpbmVPcGVyYXRpb25SZXNwb25zZSk6IHZvaWQge1xuICAgIC8vIHRoaXMuX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzLnV1aWQgPSB2YWx1ZS5saW5lVXVpZDtcbiAgICAvLyB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cy5wZW5kaW5nUmVhc29uID0gdmFsdWUucGVuZGluZ1JlYXNvbjtcbiAgICAvLyB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cy5wZW5kaW5nUmVhc29uVHlwZSA9IHZhbHVlLnBlbmRpbmdSZWFzb25UeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfdXBkYXRlUmVsYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnJlbGF0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnJlbGF0aW9uLnJlbGF0aW9uSWQpIHtcbiAgICAgIGlmICghdGhpcy5fY3VycmVudFJlbGF0aW9uIHx8IHRoaXMuX2N1cnJlbnRSZWxhdGlvbi5yZWxhdGlvbklkICE9PSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uTnI6IHN0cmluZyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRSZWxhdGlvbk51bWJlcih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi5yZWxhdGlvbi5yZWxhdGlvbklkKTtcbiAgICAgICAgaWYgKHJlbGF0aW9uTnIpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50UmVsYXRpb24gPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0Q3VzdG9tZXJGdWxsT2JqZWN0KE51bWJlcihyZWxhdGlvbk5yKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucygpOiBTZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3Qge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdDogU2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0ID0gbmV3IFNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdCAoKTtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QuYWxsb3dQYXJ0aWFsRGVsaXZlcnkgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24uYWxsb3dQYXJ0aWFsRGVsaXZlcnk7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LmRlbGl2ZXJ5RGF0ZSA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5kZWxpdmVyeURhdGU7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LmRlbGl2ZXJ5TWV0aG9kID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLmRlbGl2ZXJ5TWV0aG9kO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5kZWxpdmVyeU9wdGlvbnMgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24uZGVsaXZlcnlPcHRpb25zO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5tYXJrZXRpbmdDb2RlID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLm1hcmtldGluZ0NvZGU7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0Lm93blJlZmVyZW5jZSA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5vd25SZWZlcmVuY2U7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LnByZWZlcnJlZERlbGl2ZXJ5RGF0ZSA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5wcmVmZXJyZWREZWxpdmVyeURhdGU7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTIgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ucHJlZmVycmVkRGVsaXZlcnlEYXRlMjtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QucmVsYXRpb25SZWZlcmVuY2UgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ucmVsYXRpb25SZWZlcmVuY2U7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LnJlbWFyayA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5yZW1hcms7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LnRyYW5zYWN0aW9uVXVpZCA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi51dWlkO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC50cmFuc2FjdGlvbkFkZHJlc3MgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25BZGRyZXNzLm5hd05yO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5pbnZvaWNlQWRkcmVzcyA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5pbnZvaWNlQWRkcmVzcy5uYXdOcjtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0O1xuICB9XG59XG4iXX0=