@pmcretail/mapper-library 0.0.3 → 0.0.4

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.
@@ -3,11 +3,11 @@
3
3
  * Generated from: lib/RJ-mapper.class.ts
4
4
  * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
5
  */
6
+ import * as tslib_1 from "tslib";
6
7
  import { DISCOUNTTYPE, TRANSACTION_TYPE } from "./mapper-library.model";
7
8
  import { TransactionDocumentBuilder } from "./TransactionDocumentBuilder";
8
9
  var RJMapperBuilderClass = /** @class */ (function () {
9
10
  function RJMapperBuilderClass(transactionDoc) {
10
- this.productQuantity = 0;
11
11
  this.itemCount = 0;
12
12
  this.largestNumber = 0;
13
13
  this.rjObject = {};
@@ -195,6 +195,15 @@ var RJMapperBuilderClass = /** @class */ (function () {
195
195
  function (element) {
196
196
  /** @type {?} */
197
197
  var data = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
198
+ /** @type {?} */
199
+ var obj = {
200
+ "OriginalReceiptSupplied": 0,
201
+ "OriginalBranchID": 0,
202
+ "OriginalTerminalNumber": 0,
203
+ "OriginalTransactionNumber": 0,
204
+ "OriginalCashierNumber": 0
205
+ };
206
+ data['Return'] = tslib_1.__assign({}, data['Return'], obj);
198
207
  (/** @type {?} */ (_this)).rjObject['ProductReturn'].push(data);
199
208
  (/** @type {?} */ (_this)).getModifierItem(element.lineDiscount, element.itemLineId);
200
209
  }));
@@ -213,6 +222,15 @@ var RJMapperBuilderClass = /** @class */ (function () {
213
222
  if (element.refundedQuantity > 0) {
214
223
  /** @type {?} */
215
224
  var returnProduct = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
225
+ /** @type {?} */
226
+ var obj = {
227
+ "OriginalReceiptSupplied": 0,
228
+ "OriginalBranchID": 0,
229
+ "OriginalTerminalNumber": 0,
230
+ "OriginalTransactionNumber": 0,
231
+ "OriginalCashierNumber": 0
232
+ };
233
+ returnProduct['Return'] = tslib_1.__assign({}, returnProduct['Return'], obj);
216
234
  (/** @type {?} */ (_this)).rjObject['ProductReturn'].push(returnProduct);
217
235
  }
218
236
  else {
@@ -998,6 +1016,12 @@ var RJMapperBuilderClass = /** @class */ (function () {
998
1016
  * @return {?}
999
1017
  */
1000
1018
  function (element, lineDiscount) {
1019
+ /** @type {?} */
1020
+ var taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
1021
+ * @param {?} item
1022
+ * @return {?}
1023
+ */
1024
+ function (item) { return item.itemLineId == element['itemLineId']; }));
1001
1025
  /** @type {?} */
1002
1026
  var obj = {
1003
1027
  XMLSchemaVersion: this.xmlSchemaVersion,
@@ -1017,14 +1041,15 @@ var RJMapperBuilderClass = /** @class */ (function () {
1017
1041
  Quantity: element.quantity.toFixed(1),
1018
1042
  SalespersonID: this.transactionDocument.userId,
1019
1043
  SalespersonName: this.transactionDocument.userName,
1020
- TaxCode: 0,
1021
- //todo
1044
+ TaxCode: this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
1045
+ * @param {?} item
1046
+ * @return {?}
1047
+ */
1048
+ function (item) { return item.itemLineId == element['itemLineId']; })).VATCode,
1022
1049
  TaxModifiable: 1,
1023
1050
  //todo
1024
- TaxAmount: 0,
1025
- //todo
1026
- OriginalTaxAmount: 0,
1027
- //todo
1051
+ OriginalTaxAmount: taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal),
1052
+ TaxAmount: taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal),
1028
1053
  OriginalTaxAmountSet: 1,
1029
1054
  //todo
1030
1055
  ProductID: element.SKU,
@@ -1144,11 +1169,6 @@ if (false) {
1144
1169
  * @private
1145
1170
  */
1146
1171
  RJMapperBuilderClass.prototype.transactionDocument;
1147
- /**
1148
- * @type {?}
1149
- * @private
1150
- */
1151
- RJMapperBuilderClass.prototype.productQuantity;
1152
1172
  /**
1153
1173
  * @type {?}
1154
1174
  * @private
@@ -1260,4 +1280,4 @@ if (false) {
1260
1280
  */
1261
1281
  RJMapperBuilderClass.prototype.paymentTypes;
1262
1282
  }
1263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkotbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBtY3JldGFpbC9tYXBwZXItbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9SSi1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUErQyxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFO0lBeURJLDhCQUFZLGNBQW9DO1FBckR4QyxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQW1CcEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGFBQVEsR0FBUSxFQUFFLENBQUE7UUFFbEIsaUJBQVksR0FBRztZQUNuQjtnQkFDSSxXQUFXLEVBQUUsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsYUFBYSxFQUFFLEdBQUc7YUFFckI7WUFDRDtnQkFDSSxXQUFXLEVBQUUsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRSxHQUFHO2dCQUNmLGFBQWEsRUFBRSxHQUFHO2FBRXJCO1lBQ0Q7Z0JBQ0ksV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLElBQUksRUFBRSxjQUFjO2dCQUNwQixVQUFVLEVBQUUsR0FBRztnQkFDZixhQUFhLEVBQUUsR0FBRzthQUVyQjtZQUNEO2dCQUNJLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixJQUFJLEVBQUUsY0FBYztnQkFDcEIsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsYUFBYSxFQUFFLEdBQUc7YUFDckI7U0FDSixDQUFBO1FBR0csSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztTQUM3QzthQUFNO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHO2dCQUN2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LENBQW1ELEVBQUMsQ0FBQzthQUNyRztRQUNMLENBQUMsRUFBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7U0FDdkI7YUFDRztZQUNBLE9BQU8sRUFBRSxDQUFBO1NBQ1o7SUFDTCxDQUFDO0lBQ0wsMkJBQUM7QUFBRCxDQUFDLEFBN3FCRCxJQTZxQkM7Ozs7Ozs7SUExcUJHLG1EQUFpRDs7Ozs7SUFDakQsK0NBQTRCOzs7OztJQUM1QixzQ0FBb0I7Ozs7O0lBQ3BCLHdDQUFzQjs7Ozs7SUFDdEIsaURBQStCOzs7OztJQUMvQiwrQ0FBNkI7Ozs7O0lBQzdCLHFEQUFtQzs7Ozs7SUFDbkMsMENBQXdCOzs7OztJQUN4QixnREFBOEI7Ozs7O0lBQzlCLDRDQUEwQjs7Ozs7SUFDMUIsNENBQTBCOzs7OztJQUMxQiw2Q0FBMkI7Ozs7O0lBQzNCLHlDQUF1Qjs7Ozs7SUFDdkIseUNBQXVCOzs7OztJQUN2Qiw4Q0FBNEI7Ozs7O0lBQzVCLDJDQUF5Qjs7Ozs7SUFDekIsK0NBQTZCOzs7OztJQUM3QixnREFBOEI7Ozs7O0lBQzlCLCtDQUE2Qjs7Ozs7SUFDN0IsZ0RBQThCOzs7OztJQUM5Qix5Q0FBc0I7Ozs7O0lBQ3RCLDZDQUEwQjs7Ozs7SUFDMUIsd0NBQTBCOzs7OztJQUUxQiw0Q0E0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBESVNDT1VOVFRZUEUsIExpbmVEaXNjb3VudCwgVFByb2R1Y3QsIFRyYW5zYWN0aW9uRG9jdW1lbnQsIFRSQU5TQUNUSU9OX1RZUEUgfSBmcm9tIFwiLi9tYXBwZXItbGlicmFyeS5tb2RlbFwiXHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXJcIjtcclxuZXhwb3J0IGNsYXNzIFJKTWFwcGVyQnVpbGRlckNsYXNzIHtcclxuXHJcblxyXG4gICAgcHJpdmF0ZSB0cmFuc2FjdGlvbkRvY3VtZW50OiBUcmFuc2FjdGlvbkRvY3VtZW50O1xyXG4gICAgcHJpdmF0ZSBwcm9kdWN0UXVhbnRpdHkgPSAwO1xyXG4gICAgcHJpdmF0ZSB1c2VySWQ6IGFueTtcclxuICAgIHByaXZhdGUgZGV2aWNlSWQ6IGFueTtcclxuICAgIHByaXZhdGUgdHJhbnNhY3Rpb25OdW1iZXI6IGFueTtcclxuICAgIHByaXZhdGUgbWFuaWZlc3RWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIGRhdGFiYXNlU2NoZW1hVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRUeXBlOiBhbnk7XHJcbiAgICBwcml2YXRlIHhtbFNjaGVtYVZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgbWFqb3JWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIG1pbm9yVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBleHRlcm5hbFN0YXRlOiBhbnk7XHJcbiAgICBwcml2YXRlIGNhc2hpZXJJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBjb21wYW55SWQ6IGFueTtcclxuICAgIHByaXZhdGUgdGVybWluYWxOdW1iZXI6IGFueTtcclxuICAgIHByaXZhdGUgdGF4TWV0aG9kSWQ6IGFueTtcclxuICAgIHByaXZhdGUgdHJhZGluZ1JlZ2lvbklkOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldEN1cnJlbmN5SWQ6IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0Q291bnRyeUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldExhbmd1YWdlSWQ6IGFueTtcclxuICAgIHByaXZhdGUgaXRlbUNvdW50ID0gMDtcclxuICAgIHByaXZhdGUgbGFyZ2VzdE51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIHJqT2JqZWN0OiBhbnkgPSB7fVxyXG5cclxuICAgIHByaXZhdGUgcGF5bWVudFR5cGVzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF5bWVudFR5cGU6ICdDYXJkJyxcclxuICAgICAgICAgICAgdHlwZTogJ1NFUEFZJyxcclxuICAgICAgICAgICAgdGVuZGVyVHlwZTogJzUnLFxyXG4gICAgICAgICAgICB0ZW5kZXJTdWJUeXBlOiAnOCcsXHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXltZW50VHlwZTogJ0Nhc2gnLFxyXG4gICAgICAgICAgICB0eXBlOiAnVE1DX0NBU0gnLFxyXG4gICAgICAgICAgICB0ZW5kZXJUeXBlOiAnMScsXHJcbiAgICAgICAgICAgIHRlbmRlclN1YlR5cGU6ICcwJ1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF5bWVudFR5cGU6ICdQRFEnLFxyXG4gICAgICAgICAgICB0eXBlOiAnVW5pbnRlZ3JhdGVkJyxcclxuICAgICAgICAgICAgdGVuZGVyVHlwZTogJzInLFxyXG4gICAgICAgICAgICB0ZW5kZXJTdWJUeXBlOiAnOCdcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBheW1lbnRUeXBlOiAnR2lmdCBDYXJkJyxcclxuICAgICAgICAgICAgdHlwZTogJ1RNQ19HSUZUQ0FSRCcsXHJcbiAgICAgICAgICAgIHRlbmRlclR5cGU6ICc1JyxcclxuICAgICAgICAgICAgdGVuZGVyU3ViVHlwZTogJzgnXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHRyYW5zYWN0aW9uRG9jPzogVHJhbnNhY3Rpb25Eb2N1bWVudCkge1xyXG4gICAgICAgIGlmICh0cmFuc2FjdGlvbkRvYykge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQgPSB0cmFuc2FjdGlvbkRvYztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQgPSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgb2ZmbGluZVRyYW5zYWN0aW9uSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblJlZjogXCJcIixcclxuICAgICAgICAgICAgICAgIGRhdGVUaW1lOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgb3JnQ29kZTogXCJcIixcclxuICAgICAgICAgICAgICAgIHN0b3JlSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZU5vZGVJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHN0b3JlTm9kZVN0cnVjdHVyZTogXCJcIixcclxuICAgICAgICAgICAgICAgIGRldmljZUlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdGVybWluYWxJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHVzZXJJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIGluaXRpYXRpbmdNb2R1bGU6IFwiZUJhc2tldFwiLFxyXG4gICAgICAgICAgICAgICAgZXhwb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJhc2tldDoge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgYmFza2V0U3VtbWFyeToge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgYmFzZUN1cnJlbmN5OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJcIixcclxuICAgICAgICAgICAgICAgIG9wZXJhdGlvblN0YXR1czogXCJcIixcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogXCJcIixcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRBdDogXCJcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zYWN0aW9uRGV0YWlsczoge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgc2FsZVRvdGFsOiAwLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpbGl6ZUl0ZW1Db3VudCgpO1xyXG4gICAgICAgIHRoaXMuc2V0TGluZU51bWJlckZvclByb2R1Y3RzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UG9zYmFza2V0SW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydLZXl3b3JkJ10gPSB0aGlzLmdlbmVyYXRlS2V5d29yZCgpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0lEJ10gPSB0aGlzLmdlbmVyYXRlSWQodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnWE1MU2NoZW1hVmVyc2lvbiddID0gJzInO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0xhc3RVcGRhdGVkJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ01ham9yVmVyc2lvbiddID0gdGhpcy5tYWpvclZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTWlub3JWZXJzaW9uJ10gPSB0aGlzLm1pbm9yVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydNYW5pZmVzdFZlcnNpb24nXSA9IHRoaXMubWFuaWZlc3RWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0RhdGFiYXNlU2NoZW1hVmVyc2lvbiddID0gdGhpcy5kYXRhYmFzZVNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0VHlwZSddID0gdGhpcy5iYXNrZXRUeXBlO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1N0YXRlJ10gPSB0aGlzLmdldFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnRXh0ZXJuYWxTdGF0ZSddID0gdGhpcy5leHRlcm5hbFN0YXRlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0aGVhZGVySW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlRpbWVab25lT2Zmc2V0ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5nZW5lcmF0ZVRpbWV6b25lb2Zmc2V0KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQpKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5EYXRlVGltZUNyZWF0ZWQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3JlYXRlZEF0O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5EZXZpY2VJRCA9IHRoaXMuZGV2aWNlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LkNhc2hpZXJJRCA9IHRoaXMuY2FzaGllcklkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5Db21wYW55SUQgPSB0aGlzLmNvbXBhbnlJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuU3RvcmVJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5CcmFuY2hJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5UZXJtaW5hbE51bWJlciA9IHRoaXMudGVybWluYWxOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlRyYW5zYWN0aW9uTnVtYmVyID0gdGhpcy50cmFuc2FjdGlvbk51bWJlcjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UYXhNZXRob2RJRCA9IHRoaXMudGF4TWV0aG9kSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRHluYW1pY1N0b2NrTG9va3VwID0gdGhpcy5nZW5lcmF0ZUR5bmFtaWNTdG9ja0xvb2tVcCgpOy8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldExhbmd1YWdlSUQgPSB0aGlzLmJhc2tldExhbmd1YWdlSWQ7IC8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldENvdW50cnlJRCA9IHRoaXMuYmFza2V0Q291bnRyeUlkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5CYXNrZXRDdXJyZW5jeUlEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UcmFkaW5nUmVnaW9uSUQgPSB0aGlzLnRyYWRpbmdSZWdpb25JZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5FdXJvem9uZSA9IFwiIFwiOy8vdW5rbm93blxyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkV1cm9CYXNlRXhjaGFuZ2VSYXRlID0gXCJcIjsgLy91bmtub3duXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uUHJpbnRhYmxlTmFtZSA9IFwiXCI7IC8vdW5rbm93blxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICByak1hcHBlcigpIHtcclxuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRSkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmVEaXNjb3VudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50ICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lRGlzY291bnQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5maWx0ZXIoKHg6IGFueSkgPT4geC5pdGVtTGluZUlkID09PSBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LmluZGV4T2YobGluZURpc2NvdW50WzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMuYWRkUHJvZHVjdChlbGVtZW50LCAobGluZURpc2NvdW50Lmxlbmd0aCA+IDAgPyBsaW5lRGlzY291bnRbMF0gOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShsaW5lRGlzY291bnQubGVuZ3RoID4gMCA/IGxpbmVEaXNjb3VudFswXSA6IG51bGwsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuUkVGVU5EKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGVsZW1lbnQubGluZURpc2NvdW50LCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEVfUkVGVU5EKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uRG9jOiBhbnkgPSBuZXcgVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIoKS5iYXNrZXQodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMpLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uRG9jLmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXR1cm5Qcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShlbGVtZW50LmxpbmVEaXNjb3VudCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEVfRVhDSEFOR0UpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvbkRvYzogYW55ID0gbmV3IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyKCkuYmFza2V0KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKS5idWlsZCgpO1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkRvYy5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZWZ1bmRlZFF1YW50aXR5ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXR1cm5Qcm9kdWN0ID0gdGhpcy5yZXR1cm5Qcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKHJldHVyblByb2R1Y3QpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWRkUHJvZHVjdCA9IHRoaXMuYWRkUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddLnB1c2goYWRkUHJvZHVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShlbGVtZW50LmxpbmVEaXNjb3VudCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2tldERpc2NvdW50KCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10gPSBbXTtcclxuICAgICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudCkgcmV0dXJuIHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge31cclxuICAgICAgICAgICAgb2JqWydYTUxTY2hlbWFWZXJzaW9uJ10gPSAxO1xyXG4gICAgICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSBlbGVtZW50LmRpc2NvdW50QW1vdW50IDwgMCA/IGVsZW1lbnQuZGlzY291bnRBbW91bnQgOiAtZWxlbWVudC5kaXNjb3VudEFtb3VudDtcclxuICAgICAgICAgICAgb2JqWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gZWxlbWVudC5kaXNjb3VudEFtb3VudCA8IDAgPyBlbGVtZW50LmRpc2NvdW50QW1vdW50IDogLWVsZW1lbnQuZGlzY291bnRBbW91bnQ7XHJcbiAgICAgICAgICAgIG9ialsnRGVzY3JpcHRpb24nXSA9IGVsZW1lbnQucmVhc29uQ29kZTtcclxuICAgICAgICAgICAgb2JqWydVc2VySUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudXNlcklkO1xyXG4gICAgICAgICAgICBvYmpbJ1JlYXNvbkNvZGVJRCddID0gZWxlbWVudC5yZWFzb25Db2RlO1xyXG4gICAgICAgICAgICBvYmpbJ0Rpc2NvdW50VHlwZSddID0gZWxlbWVudC5kaXNjb3VudFR5cGUudG9VcHBlckNhc2UoKSA9PSBESVNDT1VOVFRZUEUuUEVSQ0VOVC50b1VwcGVyQ2FzZSgpID8gMCA6IDE7IC8vIHRvZG8gLSBjb21wYXJlIHZhbHVlcyBcclxuICAgICAgICAgICAgb2JqWydSb3VuZGluZ1J1bGUnXSA9IDI7XHJcbiAgICAgICAgICAgIG9ialsnTW9kaWZpZWRMaW5lTnVtYmVyICddID0gW107XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50Lml0ZW1MaW5lSWRzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb2JqWydNb2RpZmllZExpbmVOdW1iZXInXS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgb2JqWydMaW5lTnVtYmVyJ10gPSB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpO1xyXG5cclxuICAgICAgICAgICAgLy8gb2JqWydEaXNjb3VudGVkVmFsdWUnXSA9IG9ialsnZGlzY291bnRBbW91bnQnXSAvLyB0b2RvIC0gY29uZmlybSB2YWx1ZSBiZWZvcmUgZGlzY291bnQ7XHJcbiAgICAgICAgICAgIC8vIG9ialsnRGlzY291bnRQZXJjZW50YWdlJ10gPSBvYmpbJ2Rpc2NvdW50QW1vdW50J10gLyAxMDAgOyAvLyB0b2RvIC0gb3B0aW9uYWxcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10ucHVzaChvYmopO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZGlmaWVySXRlbShkYXRhOiBhbnksIGxpbmVObzogYW55KSB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgbGluZU5vKSB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICBvYmouWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgIG9iai5MaW5lTnVtYmVyID0gdGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKTtcclxuICAgICAgICAgICAgb2JqLk5ldFZhbHVlID0gMDtcclxuICAgICAgICAgICAgb2JqLkVmZmVjdGl2ZU5ldFZhbHVlID0gMDtcclxuICAgICAgICAgICAgb2JqLkRlc2NyaXB0aW9uID0gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lID8gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lIDogZGF0YS5wcmljZU92ZXJyaWRlUmVhc29uTmFtZTtcclxuICAgICAgICAgICAgb2JqLkRldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICAgICAgb2JqLlVzZXJJRCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgICAgICBvYmouRGF0ZVRpbWVDcmVhdGVkID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVwZGF0ZWRBdDtcclxuICAgICAgICAgICAgb2JqLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgIG9iai5SZWFzb25Db2RlSUQgPSBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUgPyBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUgOiBkYXRhLnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICBvYmouTW9kaWZpZWRMaW5lTnVtYmVyID0gbGluZU5vO1xyXG4gICAgICAgICAgICBvYmouTW9kaWZpZWRJbmRleCA9IDE7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXS5wdXNoKG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFRyYWlsZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5EYXRlVGltZUNvbXBsZXRlZCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51cGRhdGVkQXQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5ID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkRldmljZUlEID0gdGhpcy5kZXZpY2VJZDsgLy90b2RvXHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkNhc2hpZXJJRCA9IHRoaXMuY2FzaGllcklkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuU3RvcmVJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5CcmFuY2hJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5UZXJtaW5hbE51bWJlciA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50ZXJtaW5hbElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Ub3RhbCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsICogMTAwKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuSXRlbUNvdW50ID0gdGhpcy5pdGVtQ291bnQ7IC8vZ2l2ZXMgdG90YWwgY291bnQgZm9yIHByb2R1Y3RcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuSXRlbVF1YW50aXR5ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLk5ldEl0ZW1RdWFudGl0eSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5UYXhUb3RhbCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LlZBVFRvdGFsKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuU2VxdWVuY2VEZXZpY2VJRCA9IHRoaXMuZGV2aWNlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlNlcXVlbmNlTnVtYmVyID0gJ3Nuc24nIC8vc3RhdGljIGZvciBub3dcclxuXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydUYXhJdGVtJ10gPSBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgb2JqWydUYXhSYXRlJ10gPSBlbGVtZW50LlZBVDtcclxuICAgICAgICAgICAgb2JqWydUYXhhYmxlVG90YWwnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQudGF4YWJsZUFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnVGF4VG90YWwnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQudGF4TGluZVRvdGFsKTtcclxuICAgICAgICAgICAgb2JqWydUYXhEZXNjcmlwdGlvbiddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC5WQVRDb2RlKTtcclxuICAgICAgICAgICAgb2JqWydUYXhJbmNsdWRlZCddID0gJzEnO1xyXG4gICAgICAgICAgICBvYmpbJ1RheFBlcmNlbnRhZ2UnXSA9IGVsZW1lbnQuVkFULnRvRml4ZWQoMik7IC8vIHRvZG9cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnVGF4SXRlbSddLnB1c2gob2JqKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBUT0RPOiBtYWtlIFRyYWlsZXIgb2JqZWN0IGZyb20gcHJvbW90aW9uXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydQcm9tb3Rpb25JdGVtJ10gPSBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25JRCddID0gZWxlbWVudC5wcm9tb3Rpb25JZDtcclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25TYXZpbmcnXSA9IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDwgMCA/IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDogLWVsZW1lbnQucHJvbW90aW9uQW1vdW50O1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvblF1YW50aXR5J10gPSBcIlwiOyAvLyB0b2RvIC0gbm90IGF2YWlhbGJsZVxyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkRlc2NyaXB0aW9uJ10gPSBlbGVtZW50LmRpc3BsYXlUZXh0O1xyXG5cclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdE51bWJlciddID0gXCJcIiAvLyB0b2RvO1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXRRdWFudGl0eSddID0gXCJcIiAvLyB0b2RvO1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXRTYXZpbmcnXSA9IFwiXCIgLy8gdG9kbztcclxuXHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudC50cmlnZ2VyLmZvckVhY2goKHN1YkVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9ialN1YjogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHByb2R1Y3QgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5saW5lSXRlbUlkID09IHN1YkVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgICAgICBvYmpTdWJbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnUHJvZHVjdElEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09PSBzdWJFbGVtZW50Lml0ZW1MaW5lSWQpLlNLVTtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnVW5pdFZhbHVlJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LnByb21vdGlvbkxpbmVQcmljZSAvIHByb2R1Y3QucXVhbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydMaW5lTnVtYmVyJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhzdWJFbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydRdWFudGl0eSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoc3ViRWxlbWVudC5xdWFudGl0eS50b0ZpeGVkKDEpKTtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnVGF4Q29kZSddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudC5pdGVtTGluZUlkKS5WQVRDb2RlOyAvLyB0b2RvXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ10ucHVzaChvYmpTdWIpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnUHJvbW90aW9uSXRlbSddLnB1c2gob2JqKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJqT2JqZWN0KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRUZW5kZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Nhc2hUZW5kZXInXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wYXltZW50VHlwZXMuZmlsdGVyKHggPT4geC5wYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSBlbGVtZW50LnBheW1lbnRUeXBlLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF5bWVudFR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0dJRlQgQ0FSRCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiB0aGlzLnhtbFNjaGVtYVZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiB0aGlzLmNvbnZlcnRUb1N0cmluZygtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24odmFsdWVbMF0ucGF5bWVudFR5cGUsIGVsZW1lbnQpLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEOiB0aGlzLnVzZXJJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiB2YWx1ZVswXS50ZW5kZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiB2YWx1ZVswXS50ZW5kZXJTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IHRoaXMuY29udmVydFRvU3RyaW5nKC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdpZnRWb3VjaGVyU2FsZXNBbGxvd2VkOiAnJywvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dSZWNoYXJnZWFibGVWb3VjaGVyU2FsZXM6ICcnLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBHaWZ0Vm91Y2hlcklEOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmopXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqMSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24odmFsdWVbMF0ucGF5bWVudFR5cGUsIGVsZW1lbnQpLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEOiB0aGlzLnVzZXJJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiB2YWx1ZVswXS50ZW5kZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiB2YWx1ZVswXS50ZW5kZXJTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IEpTT04uc3RyaW5naWZ5KC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVJblRyYW5zYWN0aW9uVG90YWxDaGVjazogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93UmVjaGFyZ2VhYmxlVm91Y2hlclNhbGVzOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkRyYXdlckF0RW5kOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmoxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGluZU51bWJlckZvclByb2R1Y3RzKCkge1xyXG4gICAgICAgIGxldCBpdGVtTGluZUlkQXJyYXkgPSBbXTtcclxuICAgICAgICBpdGVtTGluZUlkQXJyYXkgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLm1hcCgocHJvZHVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChwcm9kdWN0Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyID0gaXRlbUxpbmVJZEFycmF5LnJlZHVjZSgoYTogYW55LCBiOiBhbnkpID0+IE1hdGgubWF4KGEsIGIpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUxpbmVOdW1iZXIoKSB7XHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyICs9IDE7XHJcbiAgICAgICAgdGhpcy5pdGVtQ291bnQgKz0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXJnZXN0TnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpbGl6ZUl0ZW1Db3VudCgpIHtcclxuICAgICAgICB0aGlzLml0ZW1Db3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJqT2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlc2NyaXB0aW9uKHBheW1lbnRUeXBlOiBzdHJpbmcsIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmIChwYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSAnQ0FSRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2FyZFR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXltZW50VHlwZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZXZpY2VJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRldmljZUlkID0gaWRcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVzZXJJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVzZXJJZCA9IGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICogMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYW5zYWN0aW9uTnVtYmVyKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYW5pZmVzdFZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFuaWZlc3RWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhYmFzZVNjaGVtYVZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZGF0YWJhc2VTY2hlbWFWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRUeXBlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldFR5cGUgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYWRpbmdSZWdpb25JRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50cmFkaW5nUmVnaW9uSWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29tcGFueUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNvbXBhbnlJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUYXhNZXRob2RJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50YXhNZXRob2RJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYWpvclZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFqb3JWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1pbm9yVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5taW5vclZlcnNpb24gPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0WE1MU2NoZW1hVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy54bWxTY2hlbWFWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldEV4dGVybmFsU3RhdGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxTdGF0ZSA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRDYXNoaWVySUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY2FzaGllcklkID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUZXJtaW5hbE51bWJlcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50ZXJtaW5hbE51bWJlciA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJhc2tldExhbmd1YWdlSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0TGFuZ3VhZ2VJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc2V0QmFza2V0Q291bnRyeUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldENvdW50cnlJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJhc2tldEN1cnJlbmN5SUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0Q3VycmVuY3lJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlSWQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IG5ld0RhdGVUaW1lID0gZGF0ZS5yZXBsYWNlKC9bXjAtOV0vZywgJycpXHJcbiAgICAgICAgbGV0IGlkID0gKHRoaXMuZGV2aWNlSWQgKyAnfCcgKyBuZXdEYXRlVGltZSArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlVGltZXpvbmVvZmZzZXQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IHggPSBkYXRlID8gZGF0ZSA6ICcnO1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh4KS5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlS2V5d29yZCgpIHtcclxuICAgICAgICBsZXQgeCA9ICh0aGlzLmNvbXBhbnlJZCArICd8JyArIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkICsgJ3wnICsgdGhpcy50ZXJtaW5hbE51bWJlciArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vcGVyYXRpb25TdGF0dXMgPT09ICdQQVlfU1VDQ0VTUycpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDb21wbGV0ZWQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDYW5jZWxsZWQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5Qcm9kdWN0KGVsZW1lbnQ6IGFueSwgbGluZURpc2NvdW50OiBMaW5lRGlzY291bnQpIHtcclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgIG9ialsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgIG9ialsnTGluZU51bWJlciddID0gZWxlbWVudFsnaXRlbUxpbmVJZCddO1xyXG4gICAgICAgIG9ialsnTmV0VmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydyZWZ1bmRlZFRvdGFsJ10pO1xyXG4gICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydyZWZ1bmRlZFRvdGFsJ10pO1xyXG4gICAgICAgIG9ialsnRGVzY3JpcHRpb24nXSA9IGVsZW1lbnRbJ2Rlc2NyaXB0aW9uJ107XHJcbiAgICAgICAgb2JqWydEZXZpY2VJRCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Wyd0ZXJtaW5hbElkJ107XHJcbiAgICAgICAgb2JqWydVc2VySUQnXSA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgIG9ialsnRGF0ZVRpbWVDcmVhdGVkJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnRbJ2NyZWF0ZWRBdCddO1xyXG4gICAgICAgIG9ialsnRXh0ZW5kZWRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnRbJ3RvdGFsTGluZVByaWNlJ10qLTEpO1xyXG4gICAgICAgIG9ialsnVW5pdFByaWNlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncHJpY2UnXSk7XHJcbiAgICAgICAgb2JqWydRdWFudGl0eSddID0gZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddIDwgMCA/IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpIDogLWVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpO1xyXG4gICAgICAgIG9ialsnT3JpZ2luYWxUYXhBbW91bnRTZXQnXSA9IDE7XHJcbiAgICAgICAgb2JqWydQcm9kdWN0SUQnXSA9IGVsZW1lbnRbJ1NLVSddO1xyXG4gICAgICAgIG9ialsnSGFuZEtleWVkJ10gPSAxO1xyXG4gICAgICAgIG9ialsnTG9uZ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydkZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ10gPSB7fTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5SZWFzb25JRCddID0gZWxlbWVudFsncmVmdW5kZWRSZWFzb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5EZXNjcmlwdGlvbiddID0gZWxlbWVudFsncmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ11bJ1JldHVyblRvU3RvY2snXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXSA+IDAgPyBlbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10udG9GaXhlZCgxKSA6IC0xICogZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgb2JqWydUYXhDb2RlJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pLlZBVENvZGU7XHJcblxyXG4gICAgICAgIG9ialsnRGlzcGxheVRheENvZGUnXSA9ICcnOyAvLyB0b2RvXHJcbiAgICAgICAgb2JqWydQcm9kdWN0QXR0cmlidXRlcyddID0gJyc7IC8vdG9kbyAtIG5vdCByZXF1aXJlZFxyXG4gICAgICAgIG9ialsnUGVyaXNoYWJsZSddID0gdGhpcy5nZXRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgb2JqWydNTUdyb3VwSUQnXSA9IHRoaXMuZ2V0QXR0cmlidXRlcygpO1xyXG4gICAgICAgIG9ialsnQ3VzdG9tZXJEZXRhaWxzJ10gPSBcIlwiOyAvLyB0b2RvIC0gYmxhbmtcclxuICAgICAgICBvYmpbJ1RvdGFsUHJvbW90aW9uU2F2aW5nJ10gPSBlbGVtZW50Wydwcm9tb3Rpb25BbW91bnQnXSB8fCAtMTsgLy8gVE9ET1xyXG4gICAgICAgIGxldCB0YXhUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSk7XHJcbiAgICAgICAgb2JqWydPcmlnaW5hbFRheEFtb3VudCddID0gdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpOyAvL3RvZG9cclxuICAgICAgICBvYmpbJ3RheEFtb3VudCddID0gdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpO1xyXG5cclxuICAgICAgICBpZiAobGluZURpc2NvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZSAmJiBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbGluZSBkaXNjb3VudFxyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFR5cGUgPSBsaW5lRGlzY291bnQuZGlzY291bnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50ICsgKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudGVkVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRQZXJjZW50YWdlID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlJvdW5kaW5nUnVsZSA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGUgJiYgbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAvL3ByaWNlIG92ZXJyaWRlXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbkRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTmV3UHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDAgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgcHJvZHVjdCBwcmljZVxyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRXh0ZW5kZWRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5Vbml0UHJpY2UgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcm9kdWN0KGVsZW1lbnQ6IFRQcm9kdWN0LCBsaW5lRGlzY291bnQ6IExpbmVEaXNjb3VudCkge1xyXG5cclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIFhNTFNjaGVtYVZlcnNpb246IHRoaXMueG1sU2NoZW1hVmVyc2lvbixcclxuICAgICAgICAgICAgTGluZU51bWJlcjogZWxlbWVudC5pdGVtTGluZUlkLFxyXG4gICAgICAgICAgICBOZXRWYWx1ZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQudG90YWxMaW5lUHJpY2UpLFxyXG4gICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQudG90YWxMaW5lUHJpY2UpLFxyXG4gICAgICAgICAgICBEZXNjcmlwdGlvbjogZWxlbWVudC5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgRGV2aWNlSUQ6IHRoaXMuZGV2aWNlSWQsIC8vdG8gZG9cclxuICAgICAgICAgICAgVXNlcklEOiB0aGlzLnVzZXJJZCwvL3RvIGRvLFxyXG4gICAgICAgICAgICBEYXRlVGltZUNyZWF0ZWQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIEV4dGVuZGVkVmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnByaWNlKSxcclxuICAgICAgICAgICAgVW5pdFByaWNlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC5wcmljZSksXHJcbiAgICAgICAgICAgIE1NR3JvdXBJRDogdGhpcy5nZXRBdHRyaWJ1dGVzKCksIC8vdG9kb1xyXG4gICAgICAgICAgICBRdWFudGl0eTogZWxlbWVudC5xdWFudGl0eS50b0ZpeGVkKDEpLFxyXG4gICAgICAgICAgICBTYWxlc3BlcnNvbklEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlcklkLFxyXG4gICAgICAgICAgICBTYWxlc3BlcnNvbk5hbWU6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgVGF4Q29kZTogMCwgLy90b2RvXHJcbiAgICAgICAgICAgIFRheE1vZGlmaWFibGU6IDEsIC8vdG9kb1xyXG4gICAgICAgICAgICBUYXhBbW91bnQ6IDAsLy90b2RvXHJcbiAgICAgICAgICAgIE9yaWdpbmFsVGF4QW1vdW50OiAwLC8vdG9kb1xyXG4gICAgICAgICAgICBPcmlnaW5hbFRheEFtb3VudFNldDogMSwvL3RvZG9cclxuICAgICAgICAgICAgUHJvZHVjdElEOiBlbGVtZW50LlNLVSxcclxuICAgICAgICAgICAgSGFuZEtleWVkOiAxLC8vdG9kb1xyXG4gICAgICAgICAgICBDdXN0b21lckRldGFpbHM6IFwiXCIsXHJcbiAgICAgICAgICAgIFBlcmlzaGFibGU6IHRoaXMuZ2V0QXR0cmlidXRlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaW5lRGlzY291bnQpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lICYmIGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsaW5lIGRpc2NvdW50XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50VHlwZSA9IGxpbmVEaXNjb3VudC5kaXNjb3VudFR5cGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQgKyAobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50ZWRWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFBlcmNlbnRhZ2UgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uUm91bmRpbmdSdWxlID0gMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZSAmJiBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vcHJpY2Ugb3ZlcnJpZGVcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5OZXdQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBwcm9kdWN0IHByaWNlXHJcbiAgICAgICAgICAgIG9ialsnTmV0VmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydFeHRlbmRlZFZhbHVlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydVbml0UHJpY2UnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0VG9TdHJpbmcodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlLCAnIGNhbiBub3QgYmUgY29udmVydGVkIGluIHN0cmluZycsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUR5bmFtaWNTdG9ja0xvb2tVcCgpIHtcclxuICAgICAgICBsZXQgeCA9ICcwJztcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kZWxpdmVyeU1ldGhvZCA9PT0gJzEnIHx8IGVsZW1lbnQuZGVsaXZlcnlNZXRob2QgPT09ICcyJykge1xyXG4gICAgICAgICAgICAgICAgeCA9ICcxJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF0dHJpYnV0ZXMoKXtcclxuICAgICAgICBsZXQgbmFtZTogc3RyaW5nIHwgYW55W10gPSBbXVxyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICggZWxlbWVudC5hdHRyaWJ1dGVzICYmIGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gZWxlbWVudC5hdHRyaWJ1dGVzLmZpbHRlcigoeDogYW55KSA9PiB4Lm5hbWUudG9VcHBlckNhc2UoKSA9PT0gZWxlbWVudC5uYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmFtZVswXS52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
1283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkotbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBtY3JldGFpbC9tYXBwZXItbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9SSi1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBK0MsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRTtJQXVESSw4QkFBWSxjQUFvQztRQWxDeEMsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGFBQVEsR0FBUSxFQUFFLENBQUE7UUFFbEIsaUJBQVksR0FBRztZQUNuQjtnQkFDSSxXQUFXLEVBQUUsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsYUFBYSxFQUFFLEdBQUc7YUFFckI7WUFDRDtnQkFDSSxXQUFXLEVBQUUsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRSxHQUFHO2dCQUNmLGFBQWEsRUFBRSxHQUFHO2FBRXJCO1lBQ0Q7Z0JBQ0ksV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLElBQUksRUFBRSxjQUFjO2dCQUNwQixVQUFVLEVBQUUsR0FBRztnQkFDZixhQUFhLEVBQUUsR0FBRzthQUVyQjtZQUNEO2dCQUNJLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixJQUFJLEVBQUUsY0FBYztnQkFDcEIsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsYUFBYSxFQUFFLEdBQUc7YUFDckI7U0FDSixDQUFBO1FBR0csSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztTQUM3QzthQUFNO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHO2dCQUN2QixhQUFhLEVBQUUsRUFBRTtnQkFDakIsb0JB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Ozs7O2dCQUFDLFVBQUMsQ0FBTSxJQUFLLE9BQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFuRCxDQUFtRCxFQUFDLENBQUM7YUFDckc7UUFDTCxDQUFDLEVBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1NBQ3ZCO2FBQ0c7WUFDQSxPQUFPLEVBQUUsQ0FBQTtTQUNaO0lBQ0wsQ0FBQztJQUNMLDJCQUFDO0FBQUQsQ0FBQyxBQTNyQkQsSUEyckJDOzs7Ozs7O0lBenJCRyxtREFBaUQ7Ozs7O0lBQ2pELHNDQUFvQjs7Ozs7SUFDcEIsd0NBQXNCOzs7OztJQUN0QixpREFBK0I7Ozs7O0lBQy9CLCtDQUE2Qjs7Ozs7SUFDN0IscURBQW1DOzs7OztJQUNuQywwQ0FBd0I7Ozs7O0lBQ3hCLGdEQUE4Qjs7Ozs7SUFDOUIsNENBQTBCOzs7OztJQUMxQiw0Q0FBMEI7Ozs7O0lBQzFCLDZDQUEyQjs7Ozs7SUFDM0IseUNBQXVCOzs7OztJQUN2Qix5Q0FBdUI7Ozs7O0lBQ3ZCLDhDQUE0Qjs7Ozs7SUFDNUIsMkNBQXlCOzs7OztJQUN6QiwrQ0FBNkI7Ozs7O0lBQzdCLGdEQUE4Qjs7Ozs7SUFDOUIsK0NBQTZCOzs7OztJQUM3QixnREFBOEI7Ozs7O0lBQzlCLHlDQUFzQjs7Ozs7SUFDdEIsNkNBQTBCOzs7OztJQUMxQix3Q0FBMEI7Ozs7O0lBRTFCLDRDQTRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERJU0NPVU5UVFlQRSwgTGluZURpc2NvdW50LCBUUHJvZHVjdCwgVHJhbnNhY3Rpb25Eb2N1bWVudCwgVFJBTlNBQ1RJT05fVFlQRSB9IGZyb20gXCIuL21hcHBlci1saWJyYXJ5Lm1vZGVsXCJcclxuaW1wb3J0IHsgVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIgfSBmcm9tIFwiLi9UcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlclwiO1xyXG5leHBvcnQgY2xhc3MgUkpNYXBwZXJCdWlsZGVyQ2xhc3Mge1xyXG5cclxuICAgIHByaXZhdGUgdHJhbnNhY3Rpb25Eb2N1bWVudDogVHJhbnNhY3Rpb25Eb2N1bWVudDtcclxuICAgIHByaXZhdGUgdXNlcklkOiBhbnk7XHJcbiAgICBwcml2YXRlIGRldmljZUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uTnVtYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIG1hbmlmZXN0VmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBkYXRhYmFzZVNjaGVtYVZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0VHlwZTogYW55O1xyXG4gICAgcHJpdmF0ZSB4bWxTY2hlbWFWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIG1ham9yVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBtaW5vclZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgZXh0ZXJuYWxTdGF0ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBjYXNoaWVySWQ6IGFueTtcclxuICAgIHByaXZhdGUgY29tcGFueUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRlcm1pbmFsTnVtYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHRheE1ldGhvZElkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRyYWRpbmdSZWdpb25JZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRDdXJyZW5jeUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldENvdW50cnlJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRMYW5ndWFnZUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGl0ZW1Db3VudCA9IDA7XHJcbiAgICBwcml2YXRlIGxhcmdlc3ROdW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSByak9iamVjdDogYW55ID0ge31cclxuXHJcbiAgICBwcml2YXRlIHBheW1lbnRUeXBlcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBheW1lbnRUeXBlOiAnQ2FyZCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdTRVBBWScsXHJcbiAgICAgICAgICAgIHRlbmRlclR5cGU6ICc1JyxcclxuICAgICAgICAgICAgdGVuZGVyU3ViVHlwZTogJzgnLFxyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF5bWVudFR5cGU6ICdDYXNoJyxcclxuICAgICAgICAgICAgdHlwZTogJ1RNQ19DQVNIJyxcclxuICAgICAgICAgICAgdGVuZGVyVHlwZTogJzEnLFxyXG4gICAgICAgICAgICB0ZW5kZXJTdWJUeXBlOiAnMCdcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBheW1lbnRUeXBlOiAnUERRJyxcclxuICAgICAgICAgICAgdHlwZTogJ1VuaW50ZWdyYXRlZCcsXHJcbiAgICAgICAgICAgIHRlbmRlclR5cGU6ICcyJyxcclxuICAgICAgICAgICAgdGVuZGVyU3ViVHlwZTogJzgnXHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXltZW50VHlwZTogJ0dpZnQgQ2FyZCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdUTUNfR0lGVENBUkQnLFxyXG4gICAgICAgICAgICB0ZW5kZXJUeXBlOiAnNScsXHJcbiAgICAgICAgICAgIHRlbmRlclN1YlR5cGU6ICc4J1xyXG4gICAgICAgIH1cclxuICAgIF1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2FjdGlvbkRvYz86IFRyYW5zYWN0aW9uRG9jdW1lbnQpIHtcclxuICAgICAgICBpZiAodHJhbnNhY3Rpb25Eb2MpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0gdHJhbnNhY3Rpb25Eb2M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25JZDogXCJcIixcclxuICAgICAgICAgICAgICAgIG9mZmxpbmVUcmFuc2FjdGlvbklkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25SZWY6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBkYXRlVGltZTogXCJcIixcclxuICAgICAgICAgICAgICAgIG9yZ0NvZGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZUlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc3RvcmVOb2RlSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZU5vZGVTdHJ1Y3R1cmU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHRlcm1pbmFsSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB1c2VySWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpbml0aWF0aW5nTW9kdWxlOiBcImVCYXNrZXRcIixcclxuICAgICAgICAgICAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiYXNrZXQ6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGJhc2tldFN1bW1hcnk6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGJhc2VDdXJyZW5jeTogXCJcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25TdGF0dXM6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJcIixcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHM6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIHNhbGVUb3RhbDogMCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbml0aWxpemVJdGVtQ291bnQoKTtcclxuICAgICAgICB0aGlzLnNldExpbmVOdW1iZXJGb3JQcm9kdWN0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBvc2Jhc2tldEluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnS2V5d29yZCddID0gdGhpcy5nZW5lcmF0ZUtleXdvcmQoKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydJRCddID0gdGhpcy5nZW5lcmF0ZUlkKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1hNTFNjaGVtYVZlcnNpb24nXSA9ICcyJztcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydMYXN0VXBkYXRlZCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVwZGF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydNYWpvclZlcnNpb24nXSA9IHRoaXMubWFqb3JWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ01pbm9yVmVyc2lvbiddID0gdGhpcy5taW5vclZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTWFuaWZlc3RWZXJzaW9uJ10gPSB0aGlzLm1hbmlmZXN0VmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydEYXRhYmFzZVNjaGVtYVZlcnNpb24nXSA9IHRoaXMuZGF0YWJhc2VTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldFR5cGUnXSA9IHRoaXMuYmFza2V0VHlwZTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydTdGF0ZSddID0gdGhpcy5nZXRTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0V4dGVybmFsU3RhdGUnXSA9IHRoaXMuZXh0ZXJuYWxTdGF0ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldGhlYWRlckluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10gPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UaW1lWm9uZU9mZnNldCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZ2VuZXJhdGVUaW1lem9uZW9mZnNldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3JlYXRlZEF0KSk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRGF0ZVRpbWVDcmVhdGVkID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkgPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5DYXNoaWVySUQgPSB0aGlzLmNhc2hpZXJJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQ29tcGFueUlEID0gdGhpcy5jb21wYW55SWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlN0b3JlSUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQnJhbmNoSUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuVGVybWluYWxOdW1iZXIgPSB0aGlzLnRlcm1pbmFsTnVtYmVyO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5UcmFuc2FjdGlvbk51bWJlciA9IHRoaXMudHJhbnNhY3Rpb25OdW1iZXI7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uVGF4TWV0aG9kSUQgPSB0aGlzLnRheE1ldGhvZElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkR5bmFtaWNTdG9ja0xvb2t1cCA9IHRoaXMuZ2VuZXJhdGVEeW5hbWljU3RvY2tMb29rVXAoKTsvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5CYXNrZXRMYW5ndWFnZUlEID0gdGhpcy5iYXNrZXRMYW5ndWFnZUlkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5CYXNrZXRDb3VudHJ5SUQgPSB0aGlzLmJhc2tldENvdW50cnlJZDsgLy90b2RvXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uQmFza2V0Q3VycmVuY3lJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3k7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uVHJhZGluZ1JlZ2lvbklEID0gdGhpcy50cmFkaW5nUmVnaW9uSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRXVyb3pvbmUgPSBcIiBcIjsvL3Vua25vd25cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5FdXJvQmFzZUV4Y2hhbmdlUmF0ZSA9IFwiXCI7IC8vdW5rbm93blxyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlByaW50YWJsZU5hbWUgPSBcIlwiOyAvL3Vua25vd25cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmpNYXBwZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEUpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBsaW5lRGlzY291bnQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudCAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZURpc2NvdW50ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuZmlsdGVyKCh4OiBhbnkpID0+IHguaXRlbUxpbmVJZCA9PT0gZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGluZURpc2NvdW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5pbmRleE9mKGxpbmVEaXNjb3VudFswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmFkZFByb2R1Y3QoZWxlbWVudCwgKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwID8gbGluZURpc2NvdW50WzBdIDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0obGluZURpc2NvdW50Lmxlbmd0aCA+IDAgPyBsaW5lRGlzY291bnRbMF0gOiBudWxsLCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlJFRlVORCkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXR1cm5Qcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShlbGVtZW50LmxpbmVEaXNjb3VudCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX1JFRlVORCkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvbkRvYzogYW55ID0gbmV3IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyKCkuYmFza2V0KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKS5idWlsZCgpO1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkRvYy5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFJlY2VpcHRTdXBwbGllZFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxCcmFuY2hJRFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUZXJtaW5hbE51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUcmFuc2FjdGlvbk51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxDYXNoaWVyTnVtYmVyXCI6IDBcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBkYXRhWydSZXR1cm4nXSA9IHsuLi5kYXRhWydSZXR1cm4nXSwgLi4ub2JqfTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX0VYQ0hBTkdFKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcblxyXG4gICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Eb2M6IGFueSA9IG5ldyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcigpLmJhc2tldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscykuYnVpbGQoKTtcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb25Eb2MuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVmdW5kZWRRdWFudGl0eSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuUHJvZHVjdCA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsUmVjZWlwdFN1cHBsaWVkXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxCcmFuY2hJRFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsVGVybWluYWxOdW1iZXJcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFRyYW5zYWN0aW9uTnVtYmVyXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxDYXNoaWVyTnVtYmVyXCI6IDBcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblByb2R1Y3RbJ1JldHVybiddID0gey4uLnJldHVyblByb2R1Y3RbJ1JldHVybiddLCAuLi5vYmp9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKHJldHVyblByb2R1Y3QpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWRkUHJvZHVjdCA9IHRoaXMuYWRkUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddLnB1c2goYWRkUHJvZHVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShlbGVtZW50LmxpbmVEaXNjb3VudCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2tldERpc2NvdW50KCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10gPSBbXTtcclxuICAgICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudCkgcmV0dXJuIHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge31cclxuICAgICAgICAgICAgb2JqWydYTUxTY2hlbWFWZXJzaW9uJ10gPSAxO1xyXG4gICAgICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSBlbGVtZW50LmRpc2NvdW50QW1vdW50IDwgMCA/IGVsZW1lbnQuZGlzY291bnRBbW91bnQgOiAtZWxlbWVudC5kaXNjb3VudEFtb3VudDtcclxuICAgICAgICAgICAgb2JqWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gZWxlbWVudC5kaXNjb3VudEFtb3VudCA8IDAgPyBlbGVtZW50LmRpc2NvdW50QW1vdW50IDogLWVsZW1lbnQuZGlzY291bnRBbW91bnQ7XHJcbiAgICAgICAgICAgIG9ialsnRGVzY3JpcHRpb24nXSA9IGVsZW1lbnQucmVhc29uQ29kZTtcclxuICAgICAgICAgICAgb2JqWydVc2VySUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudXNlcklkO1xyXG4gICAgICAgICAgICBvYmpbJ1JlYXNvbkNvZGVJRCddID0gZWxlbWVudC5yZWFzb25Db2RlO1xyXG4gICAgICAgICAgICBvYmpbJ0Rpc2NvdW50VHlwZSddID0gZWxlbWVudC5kaXNjb3VudFR5cGUudG9VcHBlckNhc2UoKSA9PSBESVNDT1VOVFRZUEUuUEVSQ0VOVC50b1VwcGVyQ2FzZSgpID8gMCA6IDE7IC8vIHRvZG8gLSBjb21wYXJlIHZhbHVlcyBcclxuICAgICAgICAgICAgb2JqWydSb3VuZGluZ1J1bGUnXSA9IDI7XHJcbiAgICAgICAgICAgIG9ialsnTW9kaWZpZWRMaW5lTnVtYmVyICddID0gW107XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50Lml0ZW1MaW5lSWRzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb2JqWydNb2RpZmllZExpbmVOdW1iZXInXS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgb2JqWydMaW5lTnVtYmVyJ10gPSB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpO1xyXG5cclxuICAgICAgICAgICAgLy8gb2JqWydEaXNjb3VudGVkVmFsdWUnXSA9IG9ialsnZGlzY291bnRBbW91bnQnXSAvLyB0b2RvIC0gY29uZmlybSB2YWx1ZSBiZWZvcmUgZGlzY291bnQ7XHJcbiAgICAgICAgICAgIC8vIG9ialsnRGlzY291bnRQZXJjZW50YWdlJ10gPSBvYmpbJ2Rpc2NvdW50QW1vdW50J10gLyAxMDAgOyAvLyB0b2RvIC0gb3B0aW9uYWxcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10ucHVzaChvYmopO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZGlmaWVySXRlbShkYXRhOiBhbnksIGxpbmVObzogYW55KSB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgbGluZU5vKSB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICBvYmouWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgIG9iai5MaW5lTnVtYmVyID0gdGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKTtcclxuICAgICAgICAgICAgb2JqLk5ldFZhbHVlID0gMDtcclxuICAgICAgICAgICAgb2JqLkVmZmVjdGl2ZU5ldFZhbHVlID0gMDtcclxuICAgICAgICAgICAgb2JqLkRlc2NyaXB0aW9uID0gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lID8gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lIDogZGF0YS5wcmljZU92ZXJyaWRlUmVhc29uTmFtZTtcclxuICAgICAgICAgICAgb2JqLkRldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICAgICAgb2JqLlVzZXJJRCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgICAgICBvYmouRGF0ZVRpbWVDcmVhdGVkID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVwZGF0ZWRBdDtcclxuICAgICAgICAgICAgb2JqLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgIG9iai5SZWFzb25Db2RlSUQgPSBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUgPyBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUgOiBkYXRhLnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICBvYmouTW9kaWZpZWRMaW5lTnVtYmVyID0gbGluZU5vO1xyXG4gICAgICAgICAgICBvYmouTW9kaWZpZWRJbmRleCA9IDE7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXS5wdXNoKG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFRyYWlsZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5EYXRlVGltZUNvbXBsZXRlZCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51cGRhdGVkQXQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5ID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkRldmljZUlEID0gdGhpcy5kZXZpY2VJZDsgLy90b2RvXHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkNhc2hpZXJJRCA9IHRoaXMuY2FzaGllcklkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuU3RvcmVJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5CcmFuY2hJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5UZXJtaW5hbE51bWJlciA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50ZXJtaW5hbElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Ub3RhbCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsICogMTAwKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuSXRlbUNvdW50ID0gdGhpcy5pdGVtQ291bnQ7IC8vZ2l2ZXMgdG90YWwgY291bnQgZm9yIHByb2R1Y3RcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuSXRlbVF1YW50aXR5ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLk5ldEl0ZW1RdWFudGl0eSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5UYXhUb3RhbCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LlZBVFRvdGFsKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuU2VxdWVuY2VEZXZpY2VJRCA9IHRoaXMuZGV2aWNlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlNlcXVlbmNlTnVtYmVyID0gJ3Nuc24nIC8vc3RhdGljIGZvciBub3dcclxuXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydUYXhJdGVtJ10gPSBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgb2JqWydUYXhSYXRlJ10gPSBlbGVtZW50LlZBVDtcclxuICAgICAgICAgICAgb2JqWydUYXhhYmxlVG90YWwnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQudGF4YWJsZUFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnVGF4VG90YWwnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQudGF4TGluZVRvdGFsKTtcclxuICAgICAgICAgICAgb2JqWydUYXhEZXNjcmlwdGlvbiddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC5WQVRDb2RlKTtcclxuICAgICAgICAgICAgb2JqWydUYXhJbmNsdWRlZCddID0gJzEnO1xyXG4gICAgICAgICAgICBvYmpbJ1RheFBlcmNlbnRhZ2UnXSA9IGVsZW1lbnQuVkFULnRvRml4ZWQoMik7IC8vIHRvZG9cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnVGF4SXRlbSddLnB1c2gob2JqKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBUT0RPOiBtYWtlIFRyYWlsZXIgb2JqZWN0IGZyb20gcHJvbW90aW9uXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydQcm9tb3Rpb25JdGVtJ10gPSBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25JRCddID0gZWxlbWVudC5wcm9tb3Rpb25JZDtcclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25TYXZpbmcnXSA9IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDwgMCA/IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDogLWVsZW1lbnQucHJvbW90aW9uQW1vdW50O1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvblF1YW50aXR5J10gPSBcIlwiOyAvLyB0b2RvIC0gbm90IGF2YWlhbGJsZVxyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkRlc2NyaXB0aW9uJ10gPSBlbGVtZW50LmRpc3BsYXlUZXh0O1xyXG5cclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdE51bWJlciddID0gXCJcIiAvLyB0b2RvO1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXRRdWFudGl0eSddID0gXCJcIiAvLyB0b2RvO1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXRTYXZpbmcnXSA9IFwiXCIgLy8gdG9kbztcclxuXHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudC50cmlnZ2VyLmZvckVhY2goKHN1YkVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9ialN1YjogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHByb2R1Y3QgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5saW5lSXRlbUlkID09IHN1YkVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgICAgICBvYmpTdWJbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnUHJvZHVjdElEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09PSBzdWJFbGVtZW50Lml0ZW1MaW5lSWQpLlNLVTtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnVW5pdFZhbHVlJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LnByb21vdGlvbkxpbmVQcmljZSAvIHByb2R1Y3QucXVhbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydMaW5lTnVtYmVyJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhzdWJFbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydRdWFudGl0eSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoc3ViRWxlbWVudC5xdWFudGl0eS50b0ZpeGVkKDEpKTtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnVGF4Q29kZSddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudC5pdGVtTGluZUlkKS5WQVRDb2RlOyAvLyB0b2RvXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ10ucHVzaChvYmpTdWIpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnUHJvbW90aW9uSXRlbSddLnB1c2gob2JqKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJqT2JqZWN0KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRUZW5kZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Nhc2hUZW5kZXInXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wYXltZW50VHlwZXMuZmlsdGVyKHggPT4geC5wYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSBlbGVtZW50LnBheW1lbnRUeXBlLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF5bWVudFR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0dJRlQgQ0FSRCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiB0aGlzLnhtbFNjaGVtYVZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiB0aGlzLmNvbnZlcnRUb1N0cmluZygtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24odmFsdWVbMF0ucGF5bWVudFR5cGUsIGVsZW1lbnQpLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEOiB0aGlzLnVzZXJJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiB2YWx1ZVswXS50ZW5kZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiB2YWx1ZVswXS50ZW5kZXJTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IHRoaXMuY29udmVydFRvU3RyaW5nKC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdpZnRWb3VjaGVyU2FsZXNBbGxvd2VkOiAnJywvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dSZWNoYXJnZWFibGVWb3VjaGVyU2FsZXM6ICcnLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBHaWZ0Vm91Y2hlcklEOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmopXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqMSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24odmFsdWVbMF0ucGF5bWVudFR5cGUsIGVsZW1lbnQpLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEOiB0aGlzLnVzZXJJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiB2YWx1ZVswXS50ZW5kZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiB2YWx1ZVswXS50ZW5kZXJTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IEpTT04uc3RyaW5naWZ5KC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVJblRyYW5zYWN0aW9uVG90YWxDaGVjazogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93UmVjaGFyZ2VhYmxlVm91Y2hlclNhbGVzOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkRyYXdlckF0RW5kOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmoxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGluZU51bWJlckZvclByb2R1Y3RzKCkge1xyXG4gICAgICAgIGxldCBpdGVtTGluZUlkQXJyYXkgPSBbXTtcclxuICAgICAgICBpdGVtTGluZUlkQXJyYXkgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLm1hcCgocHJvZHVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChwcm9kdWN0Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyID0gaXRlbUxpbmVJZEFycmF5LnJlZHVjZSgoYTogYW55LCBiOiBhbnkpID0+IE1hdGgubWF4KGEsIGIpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUxpbmVOdW1iZXIoKSB7XHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyICs9IDE7XHJcbiAgICAgICAgdGhpcy5pdGVtQ291bnQgKz0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXJnZXN0TnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpbGl6ZUl0ZW1Db3VudCgpIHtcclxuICAgICAgICB0aGlzLml0ZW1Db3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJqT2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlc2NyaXB0aW9uKHBheW1lbnRUeXBlOiBzdHJpbmcsIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmIChwYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSAnQ0FSRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2FyZFR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXltZW50VHlwZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZXZpY2VJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRldmljZUlkID0gaWRcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVzZXJJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVzZXJJZCA9IGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICogMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYW5zYWN0aW9uTnVtYmVyKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYW5pZmVzdFZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFuaWZlc3RWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhYmFzZVNjaGVtYVZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZGF0YWJhc2VTY2hlbWFWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRUeXBlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldFR5cGUgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYWRpbmdSZWdpb25JRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50cmFkaW5nUmVnaW9uSWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29tcGFueUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNvbXBhbnlJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUYXhNZXRob2RJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50YXhNZXRob2RJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYWpvclZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFqb3JWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1pbm9yVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5taW5vclZlcnNpb24gPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0WE1MU2NoZW1hVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy54bWxTY2hlbWFWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldEV4dGVybmFsU3RhdGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxTdGF0ZSA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRDYXNoaWVySUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY2FzaGllcklkID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUZXJtaW5hbE51bWJlcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50ZXJtaW5hbE51bWJlciA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJhc2tldExhbmd1YWdlSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0TGFuZ3VhZ2VJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc2V0QmFza2V0Q291bnRyeUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldENvdW50cnlJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJhc2tldEN1cnJlbmN5SUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0Q3VycmVuY3lJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlSWQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IG5ld0RhdGVUaW1lID0gZGF0ZS5yZXBsYWNlKC9bXjAtOV0vZywgJycpXHJcbiAgICAgICAgbGV0IGlkID0gKHRoaXMuZGV2aWNlSWQgKyAnfCcgKyBuZXdEYXRlVGltZSArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlVGltZXpvbmVvZmZzZXQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IHggPSBkYXRlID8gZGF0ZSA6ICcnO1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh4KS5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlS2V5d29yZCgpIHtcclxuICAgICAgICBsZXQgeCA9ICh0aGlzLmNvbXBhbnlJZCArICd8JyArIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkICsgJ3wnICsgdGhpcy50ZXJtaW5hbE51bWJlciArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vcGVyYXRpb25TdGF0dXMgPT09ICdQQVlfU1VDQ0VTUycpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDb21wbGV0ZWQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDYW5jZWxsZWQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5Qcm9kdWN0KGVsZW1lbnQ6IGFueSwgbGluZURpc2NvdW50OiBMaW5lRGlzY291bnQpIHtcclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgIG9ialsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgIG9ialsnTGluZU51bWJlciddID0gZWxlbWVudFsnaXRlbUxpbmVJZCddO1xyXG4gICAgICAgIG9ialsnTmV0VmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydyZWZ1bmRlZFRvdGFsJ10pO1xyXG4gICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydyZWZ1bmRlZFRvdGFsJ10pO1xyXG4gICAgICAgIG9ialsnRGVzY3JpcHRpb24nXSA9IGVsZW1lbnRbJ2Rlc2NyaXB0aW9uJ107XHJcbiAgICAgICAgb2JqWydEZXZpY2VJRCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Wyd0ZXJtaW5hbElkJ107XHJcbiAgICAgICAgb2JqWydVc2VySUQnXSA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgIG9ialsnRGF0ZVRpbWVDcmVhdGVkJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnRbJ2NyZWF0ZWRBdCddO1xyXG4gICAgICAgIG9ialsnRXh0ZW5kZWRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnRbJ3RvdGFsTGluZVByaWNlJ10qLTEpO1xyXG4gICAgICAgIG9ialsnVW5pdFByaWNlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncHJpY2UnXSk7XHJcbiAgICAgICAgb2JqWydRdWFudGl0eSddID0gZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddIDwgMCA/IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpIDogLWVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpO1xyXG4gICAgICAgIG9ialsnT3JpZ2luYWxUYXhBbW91bnRTZXQnXSA9IDE7XHJcbiAgICAgICAgb2JqWydQcm9kdWN0SUQnXSA9IGVsZW1lbnRbJ1NLVSddO1xyXG4gICAgICAgIG9ialsnSGFuZEtleWVkJ10gPSAxO1xyXG4gICAgICAgIG9ialsnTG9uZ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydkZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ10gPSB7fTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5SZWFzb25JRCddID0gZWxlbWVudFsncmVmdW5kZWRSZWFzb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5EZXNjcmlwdGlvbiddID0gZWxlbWVudFsncmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ11bJ1JldHVyblRvU3RvY2snXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXSA+IDAgPyBlbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10udG9GaXhlZCgxKSA6IC0xICogZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgb2JqWydUYXhDb2RlJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pLlZBVENvZGU7XHJcblxyXG4gICAgICAgIG9ialsnRGlzcGxheVRheENvZGUnXSA9ICcnOyAvLyB0b2RvXHJcbiAgICAgICAgb2JqWydQcm9kdWN0QXR0cmlidXRlcyddID0gJyc7IC8vdG9kbyAtIG5vdCByZXF1aXJlZFxyXG4gICAgICAgIG9ialsnUGVyaXNoYWJsZSddID0gdGhpcy5nZXRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgb2JqWydNTUdyb3VwSUQnXSA9IHRoaXMuZ2V0QXR0cmlidXRlcygpO1xyXG4gICAgICAgIG9ialsnQ3VzdG9tZXJEZXRhaWxzJ10gPSBcIlwiOyAvLyB0b2RvIC0gYmxhbmtcclxuICAgICAgICBvYmpbJ1RvdGFsUHJvbW90aW9uU2F2aW5nJ10gPSBlbGVtZW50Wydwcm9tb3Rpb25BbW91bnQnXSB8fCAtMTsgLy8gVE9ET1xyXG4gICAgICAgIGxldCB0YXhUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSk7XHJcbiAgICAgICAgb2JqWydPcmlnaW5hbFRheEFtb3VudCddID0gdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpOyAvL3RvZG9cclxuICAgICAgICBvYmpbJ3RheEFtb3VudCddID0gdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpO1xyXG5cclxuICAgICAgICBpZiAobGluZURpc2NvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZSAmJiBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbGluZSBkaXNjb3VudFxyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFR5cGUgPSBsaW5lRGlzY291bnQuZGlzY291bnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50ICsgKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudGVkVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRQZXJjZW50YWdlID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlJvdW5kaW5nUnVsZSA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGUgJiYgbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAvL3ByaWNlIG92ZXJyaWRlXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbkRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTmV3UHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDAgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgcHJvZHVjdCBwcmljZVxyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRXh0ZW5kZWRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5Vbml0UHJpY2UgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcm9kdWN0KGVsZW1lbnQ6IFRQcm9kdWN0LCBsaW5lRGlzY291bnQ6IExpbmVEaXNjb3VudCkge1xyXG4gICAgICAgIGxldCB0YXhUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSk7XHJcbiAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiB0aGlzLnhtbFNjaGVtYVZlcnNpb24sXHJcbiAgICAgICAgICAgIExpbmVOdW1iZXI6IGVsZW1lbnQuaXRlbUxpbmVJZCxcclxuICAgICAgICAgICAgTmV0VmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnRvdGFsTGluZVByaWNlKSxcclxuICAgICAgICAgICAgRWZmZWN0aXZlTmV0VmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnRvdGFsTGluZVByaWNlKSxcclxuICAgICAgICAgICAgRGVzY3JpcHRpb246IGVsZW1lbnQuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIERldmljZUlEOiB0aGlzLmRldmljZUlkLCAvL3RvIGRvXHJcbiAgICAgICAgICAgIFVzZXJJRDogdGhpcy51c2VySWQsLy90byBkbyxcclxuICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICBFeHRlbmRlZFZhbHVlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC5wcmljZSksXHJcbiAgICAgICAgICAgIFVuaXRQcmljZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQucHJpY2UpLFxyXG4gICAgICAgICAgICBNTUdyb3VwSUQ6IHRoaXMuZ2V0QXR0cmlidXRlcygpLCAvL3RvZG9cclxuICAgICAgICAgICAgUXVhbnRpdHk6IGVsZW1lbnQucXVhbnRpdHkudG9GaXhlZCgxKSxcclxuICAgICAgICAgICAgU2FsZXNwZXJzb25JRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJJZCxcclxuICAgICAgICAgICAgU2FsZXNwZXJzb25OYW1lOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUsXHJcbiAgICAgICAgICAgIFRheENvZGU6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSkuVkFUQ29kZSxcclxuICAgICAgICAgICAgVGF4TW9kaWZpYWJsZTogMSwgLy90b2RvXHJcbiAgICAgICAgICAgIE9yaWdpbmFsVGF4QW1vdW50IDogdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpLFxyXG4gICAgICAgICAgICBUYXhBbW91bnQgOiB0YXhUb3RhbC50YXhMaW5lVG90YWwgPCAwID8gdGhpcy5yZW1vdmVEZWNpbWFsKHRheFRvdGFsLnRheExpbmVUb3RhbCkgOiB0aGlzLnJlbW92ZURlY2ltYWwoLXRheFRvdGFsLnRheExpbmVUb3RhbCksXHJcbiAgICAgICAgICAgIE9yaWdpbmFsVGF4QW1vdW50U2V0OiAxLC8vdG9kb1xyXG4gICAgICAgICAgICBQcm9kdWN0SUQ6IGVsZW1lbnQuU0tVLFxyXG4gICAgICAgICAgICBIYW5kS2V5ZWQ6IDEsLy90b2RvXHJcbiAgICAgICAgICAgIEN1c3RvbWVyRGV0YWlsczogXCJcIixcclxuICAgICAgICAgICAgUGVyaXNoYWJsZTogdGhpcy5nZXRBdHRyaWJ1dGVzKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpbmVEaXNjb3VudCkge1xyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgJiYgbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGxpbmUgZGlzY291bnRcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRUeXBlID0gbGluZURpc2NvdW50LmRpc2NvdW50VHlwZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCArIChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRlZFZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50UGVyY2VudGFnZSA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Sb3VuZGluZ1J1bGUgPSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlICYmIGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgLy9wcmljZSBvdmVycmlkZVxyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25EZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk5ld1ByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy91cGRhdGUgdGhlIHByb2R1Y3QgcHJpY2VcclxuICAgICAgICAgICAgb2JqWydOZXRWYWx1ZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ0V4dGVuZGVkVmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ1VuaXRQcmljZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRUb1N0cmluZyh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codmFsdWUsICcgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgaW4gc3RyaW5nJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlRHluYW1pY1N0b2NrTG9va1VwKCkge1xyXG4gICAgICAgIGxldCB4ID0gJzAnO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmRlbGl2ZXJ5TWV0aG9kID09PSAnMScgfHwgZWxlbWVudC5kZWxpdmVyeU1ldGhvZCA9PT0gJzInKSB7XHJcbiAgICAgICAgICAgICAgICB4ID0gJzEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXR0cmlidXRlcygpe1xyXG4gICAgICAgIGxldCBuYW1lOiBzdHJpbmcgfCBhbnlbXSA9IFtdXHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCBlbGVtZW50LmF0dHJpYnV0ZXMgJiYgZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBlbGVtZW50LmF0dHJpYnV0ZXMuZmlsdGVyKCh4OiBhbnkpID0+IHgubmFtZS50b1VwcGVyQ2FzZSgpID09PSBlbGVtZW50Lm5hbWUudG9VcHBlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAobmFtZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuYW1lWzBdLnZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
@@ -3481,7 +3481,6 @@ class RJMapperBuilderClass {
3481
3481
  * @param {?=} transactionDoc
3482
3482
  */
3483
3483
  constructor(transactionDoc) {
3484
- this.productQuantity = 0;
3485
3484
  this.itemCount = 0;
3486
3485
  this.largestNumber = 0;
3487
3486
  this.rjObject = {};
@@ -3653,6 +3652,15 @@ class RJMapperBuilderClass {
3653
3652
  (element) => {
3654
3653
  /** @type {?} */
3655
3654
  let data = (/** @type {?} */ (this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
3655
+ /** @type {?} */
3656
+ let obj = {
3657
+ "OriginalReceiptSupplied": 0,
3658
+ "OriginalBranchID": 0,
3659
+ "OriginalTerminalNumber": 0,
3660
+ "OriginalTransactionNumber": 0,
3661
+ "OriginalCashierNumber": 0
3662
+ };
3663
+ data['Return'] = Object.assign({}, data['Return'], obj);
3656
3664
  (/** @type {?} */ (this)).rjObject['ProductReturn'].push(data);
3657
3665
  (/** @type {?} */ (this)).getModifierItem(element.lineDiscount, element.itemLineId);
3658
3666
  }));
@@ -3671,6 +3679,15 @@ class RJMapperBuilderClass {
3671
3679
  if (element.refundedQuantity > 0) {
3672
3680
  /** @type {?} */
3673
3681
  let returnProduct = (/** @type {?} */ (this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
3682
+ /** @type {?} */
3683
+ let obj = {
3684
+ "OriginalReceiptSupplied": 0,
3685
+ "OriginalBranchID": 0,
3686
+ "OriginalTerminalNumber": 0,
3687
+ "OriginalTransactionNumber": 0,
3688
+ "OriginalCashierNumber": 0
3689
+ };
3690
+ returnProduct['Return'] = Object.assign({}, returnProduct['Return'], obj);
3674
3691
  (/** @type {?} */ (this)).rjObject['ProductReturn'].push(returnProduct);
3675
3692
  }
3676
3693
  else {
@@ -4280,6 +4297,12 @@ class RJMapperBuilderClass {
4280
4297
  * @return {?}
4281
4298
  */
4282
4299
  addProduct(element, lineDiscount) {
4300
+ /** @type {?} */
4301
+ let taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
4302
+ * @param {?} item
4303
+ * @return {?}
4304
+ */
4305
+ (item) => item.itemLineId == element['itemLineId']));
4283
4306
  /** @type {?} */
4284
4307
  let obj = {
4285
4308
  XMLSchemaVersion: this.xmlSchemaVersion,
@@ -4299,14 +4322,15 @@ class RJMapperBuilderClass {
4299
4322
  Quantity: element.quantity.toFixed(1),
4300
4323
  SalespersonID: this.transactionDocument.userId,
4301
4324
  SalespersonName: this.transactionDocument.userName,
4302
- TaxCode: 0,
4303
- //todo
4325
+ TaxCode: this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
4326
+ * @param {?} item
4327
+ * @return {?}
4328
+ */
4329
+ (item) => item.itemLineId == element['itemLineId'])).VATCode,
4304
4330
  TaxModifiable: 1,
4305
4331
  //todo
4306
- TaxAmount: 0,
4307
- //todo
4308
- OriginalTaxAmount: 0,
4309
- //todo
4332
+ OriginalTaxAmount: taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal),
4333
+ TaxAmount: taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal),
4310
4334
  OriginalTaxAmountSet: 1,
4311
4335
  //todo
4312
4336
  ProductID: element.SKU,
@@ -4414,11 +4438,6 @@ if (false) {
4414
4438
  * @private
4415
4439
  */
4416
4440
  RJMapperBuilderClass.prototype.transactionDocument;
4417
- /**
4418
- * @type {?}
4419
- * @private
4420
- */
4421
- RJMapperBuilderClass.prototype.productQuantity;
4422
4441
  /**
4423
4442
  * @type {?}
4424
4443
  * @private