@pmcretail/mapper-library 0.0.13 → 0.0.14

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.
@@ -101,6 +101,11 @@ export class RJMapperBuilderClass {
101
101
  * @return {THIS}
102
102
  */
103
103
  rjMapper() {
104
+ /** @type {?} */
105
+ var transactionDiscount = [];
106
+ if ((/** @type {?} */ (this)).transactionDocument.basket.transactionDiscount && (/** @type {?} */ (this)).transactionDocument.basket.transactionDiscount.length > 0) {
107
+ transactionDiscount = (/** @type {?} */ (this)).transactionDocument.basket.transactionDiscount;
108
+ }
104
109
  if ((/** @type {?} */ (this)).transactionDocument.type === TRANSACTION_TYPE.SALE) {
105
110
  (/** @type {?} */ (this)).rjObject['ProductSale'] = [];
106
111
  (/** @type {?} */ (this)).rjObject['ModifierItem'] = [];
@@ -126,7 +131,7 @@ export class RJMapperBuilderClass {
126
131
  }
127
132
  }
128
133
  /** @type {?} */
129
- let data = (/** @type {?} */ (this)).addProduct(element, (lineDiscount.length > 0 ? lineDiscount[0] : null));
134
+ let data = (/** @type {?} */ (this)).addProduct(element, (lineDiscount.length > 0 ? lineDiscount[0] : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
130
135
  (/** @type {?} */ (this)).rjObject['ProductSale'].push(data);
131
136
  (/** @type {?} */ (this)).getModifierItem(lineDiscount.length > 0 ? lineDiscount[0] : null, element.itemLineId);
132
137
  }));
@@ -146,7 +151,7 @@ export class RJMapperBuilderClass {
146
151
  */
147
152
  (element) => {
148
153
  /** @type {?} */
149
- let data = (/** @type {?} */ (this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
154
+ let data = (/** @type {?} */ (this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
150
155
  (/** @type {?} */ (this)).rjObject['ProductReturn'].push(data);
151
156
  (/** @type {?} */ (this)).getModifierItem(element.lineDiscount, element.itemLineId);
152
157
  }));
@@ -162,7 +167,7 @@ export class RJMapperBuilderClass {
162
167
  */
163
168
  (element) => {
164
169
  /** @type {?} */
165
- let data = (/** @type {?} */ (this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
170
+ let data = (/** @type {?} */ (this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
166
171
  /** @type {?} */
167
172
  let obj = {
168
173
  "OriginalReceiptSupplied": 0,
@@ -189,7 +194,7 @@ export class RJMapperBuilderClass {
189
194
  (element) => {
190
195
  if (element.refundedQuantity > 0) {
191
196
  /** @type {?} */
192
- let returnProduct = (/** @type {?} */ (this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
197
+ let returnProduct = (/** @type {?} */ (this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
193
198
  /** @type {?} */
194
199
  let obj = {
195
200
  "OriginalReceiptSupplied": 0,
@@ -203,7 +208,7 @@ export class RJMapperBuilderClass {
203
208
  }
204
209
  else {
205
210
  /** @type {?} */
206
- let addProduct = (/** @type {?} */ (this)).addProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
211
+ let addProduct = (/** @type {?} */ (this)).addProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
207
212
  (/** @type {?} */ (this)).rjObject['ProductSale'].push(addProduct);
208
213
  }
209
214
  (/** @type {?} */ (this)).getModifierItem(element.lineDiscount, element.itemLineId);
@@ -227,18 +232,24 @@ export class RJMapperBuilderClass {
227
232
  (element) => {
228
233
  /** @type {?} */
229
234
  let obj = {};
230
- obj['XMLSchemaVersion'] = "1";
231
- obj['NetValue'] = (/** @type {?} */ (this)).convertToString(element.discountAmount < 0 ? element.discountAmount : -element.discountAmount);
232
- obj['EffectiveNetValue'] = (/** @type {?} */ (this)).convertToString(element.discountAmount < 0 ? element.discountAmount : -element.discountAmount);
235
+ obj['XMLSchemaVersion'] = (/** @type {?} */ (this)).xmlSchemaVersion;
236
+ obj['NetValue'] = (/** @type {?} */ (this)).convertToString(element.discountAmount * -1);
237
+ obj['EffectiveNetValue'] = (/** @type {?} */ (this)).convertToString(element.discountAmount * -1);
233
238
  obj['Description'] = element.reasonDisplayText;
234
239
  obj['UserID'] = (/** @type {?} */ (this)).transactionDocument.userName;
235
240
  obj['ReasonCodeID'] = element.reasonCode;
236
- obj['DiscountType'] = (/** @type {?} */ (this)).convertToString(element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase() ? 0 : 1); // todo - compare values
241
+ obj['DiscountType'] = (/** @type {?} */ (this)).convertToString(element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase() ? 0 : 1);
237
242
  obj['RoundingRule'] = (/** @type {?} */ (this)).convertToString(2);
238
243
  obj['ModifiedLineNumber'] = element.itemLineIds;
239
244
  obj['LineNumber'] = (/** @type {?} */ (this)).convertToString((/** @type {?} */ (this)).generateLineNumber());
240
- // obj['DiscountedValue'] = obj['discountAmount'] // todo - confirm value before discount;
241
- // obj['DiscountPercentage'] = obj['discountAmount'] / 100 ; // todo - optional
245
+ obj['DiscountedValue'] = (/** @type {?} */ (this)).transactionDocument.basketSummary.basketTotal + (/** @type {?} */ (this)).transactionDocument.basketSummary.discountTotal;
246
+ if (element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase()) {
247
+ obj['DiscountPercentage'] = (/** @type {?} */ (this)).convertToString((element.discountAmount / (/** @type {?} */ (this)).transactionDocument.basketSummary.basketTotal).toFixed(1));
248
+ }
249
+ if ((/** @type {?} */ (this)).transactionDocument.type === 'REFUND') {
250
+ obj['NetValue'] = (/** @type {?} */ (this)).convertToString(element.discountAmount < 0 ? -element.discountAmount : element.discountAmount);
251
+ obj['EffectiveNetValue'] = (/** @type {?} */ (this)).convertToString(element.discountAmount < 0 ? -element.discountAmount : element.discountAmount);
252
+ }
242
253
  (/** @type {?} */ (this)).rjObject['BasketDiscount'].push(obj);
243
254
  }));
244
255
  return (/** @type {?} */ (this));
@@ -313,7 +324,6 @@ export class RJMapperBuilderClass {
313
324
  * @return {?}
314
325
  */
315
326
  (element) => {
316
- console.log('element', element);
317
327
  /** @type {?} */
318
328
  let obj = {};
319
329
  obj['PromotionID'] = element.promotionId;
@@ -697,9 +707,10 @@ export class RJMapperBuilderClass {
697
707
  /**
698
708
  * @param {?} element
699
709
  * @param {?} lineDiscount
710
+ * @param {?} transactionDiscount
700
711
  * @return {?}
701
712
  */
702
- returnProduct(element, lineDiscount) {
713
+ returnProduct(element, lineDiscount, transactionDiscount) {
703
714
  /** @type {?} */
704
715
  let obj = {};
705
716
  /** @type {?} */
@@ -774,14 +785,51 @@ export class RJMapperBuilderClass {
774
785
  obj.ExtendedValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;
775
786
  obj.UnitPrice = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;
776
787
  }
788
+ if (transactionDiscount) {
789
+ obj['BasketDiscountModifier'] = [];
790
+ this.transactionDocument.basket.transactionDiscount.forEach((/**
791
+ * @param {?} e
792
+ * @return {?}
793
+ */
794
+ (e) => {
795
+ /** @type {?} */
796
+ let obj1 = {};
797
+ e.itemLineIds.forEach((/**
798
+ * @param {?} x
799
+ * @return {?}
800
+ */
801
+ (x) => {
802
+ if (x == element.itemLineId) {
803
+ /** @type {?} */
804
+ var discountAmount = this.convertToString(e.discountAmount * -1);
805
+ obj1.BasketDiscountLineNumber = this.getLineNumber(e, discountAmount);
806
+ obj1.XMLSchemaVersion = this.xmlSchemaVersion;
807
+ obj1.DiscountedValue = this.getDiscountedValue(element.totalLinePrice, e.discountAmount);
808
+ obj['BasketDiscountModifier'].push(obj1);
809
+ }
810
+ }));
811
+ }));
812
+ /** @type {?} */
813
+ var totaltransactionDiscount = 0;
814
+ obj['BasketDiscountModifier'].forEach((/**
815
+ * @param {?} value
816
+ * @return {?}
817
+ */
818
+ (value) => {
819
+ totaltransactionDiscount = totaltransactionDiscount + value.DiscountedValue;
820
+ }));
821
+ //update the product price
822
+ obj['EffectiveNetValue'] = obj.EffectiveNetValue + totaltransactionDiscount;
823
+ }
777
824
  return obj;
778
825
  }
779
826
  /**
780
827
  * @param {?} element
781
828
  * @param {?} lineDiscount
829
+ * @param {?} transactionDiscount
782
830
  * @return {?}
783
831
  */
784
- addProduct(element, lineDiscount) {
832
+ addProduct(element, lineDiscount, transactionDiscount) {
785
833
  /** @type {?} */
786
834
  let taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
787
835
  * @param {?} item
@@ -846,7 +894,7 @@ export class RJMapperBuilderClass {
846
894
  obj['PriceOverride'].ModifierReasonID = lineDiscount.priceOverrideReasonCode;
847
895
  obj['PriceOverride'].ModifierReasonDescription = lineDiscount.priceOverrideReasonName;
848
896
  obj['PriceOverride'].AuthorisingUserID = this.transactionDocument.userName;
849
- obj['PriceOverride'].XMLSchemaVersion = 1;
897
+ obj['PriceOverride'].XMLSchemaVersion = this.xmlSchemaVersion;
850
898
  obj['PriceOverride'].NewPrice = this.removeDecimal(lineDiscount.unitPrice);
851
899
  obj['PriceOverride'].OriginalPrice = this.removeDecimal(lineDiscount.discountedLinePrice || 0 + lineDiscount.discountAmount);
852
900
  }
@@ -856,8 +904,72 @@ export class RJMapperBuilderClass {
856
904
  obj['ExtendedValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);
857
905
  obj['UnitPrice'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);
858
906
  }
907
+ if (transactionDiscount) {
908
+ obj['BasketDiscountModifier'] = [];
909
+ this.transactionDocument.basket.transactionDiscount.forEach((/**
910
+ * @param {?} e
911
+ * @return {?}
912
+ */
913
+ (e) => {
914
+ /** @type {?} */
915
+ var obj1 = {};
916
+ e.itemLineIds.forEach((/**
917
+ * @param {?} x
918
+ * @return {?}
919
+ */
920
+ (x) => {
921
+ if (x == element.itemLineId) {
922
+ /** @type {?} */
923
+ var discountAmount = this.convertToString(e.discountAmount * -1);
924
+ obj1.XMLSchemaVersion = this.xmlSchemaVersion;
925
+ obj1.DiscountedValue = -(this.getDiscountedValue(element.totalLinePrice, e.discountAmount).toFixed(0));
926
+ obj1.BasketDiscountLineNumber = this.getLineNumber(e, discountAmount);
927
+ obj['BasketDiscountModifier'].push(obj1);
928
+ }
929
+ }));
930
+ }));
931
+ /** @type {?} */
932
+ var totaltransactionDiscount = 0;
933
+ obj['BasketDiscountModifier'].forEach((/**
934
+ * @param {?} value
935
+ * @return {?}
936
+ */
937
+ (value) => {
938
+ totaltransactionDiscount = totaltransactionDiscount + value.DiscountedValue;
939
+ }));
940
+ //update the product price
941
+ obj['EffectiveNetValue'] = obj.EffectiveNetValue + totaltransactionDiscount;
942
+ }
859
943
  return obj;
860
944
  }
945
+ /**
946
+ * @param {?} value
947
+ * @param {?} discountAmount
948
+ * @return {?}
949
+ */
950
+ getLineNumber(value, discountAmount) {
951
+ /** @type {?} */
952
+ let lineNumber;
953
+ for (let i = 0; i < this.rjObject['BasketDiscount'].length; i++) {
954
+ /** @type {?} */
955
+ const element = this.rjObject['BasketDiscount'][i];
956
+ if (value.reasonCode === element.ReasonCodeID && discountAmount === element.NetValue) {
957
+ lineNumber = element.LineNumber;
958
+ break;
959
+ }
960
+ }
961
+ return lineNumber;
962
+ }
963
+ /**
964
+ * @param {?} price
965
+ * @param {?} discountAmount
966
+ * @return {?}
967
+ */
968
+ getDiscountedValue(price, discountAmount) {
969
+ /** @type {?} */
970
+ let DiscountedValue = (price * discountAmount) / this.transactionDocument.basketSummary.saleTotal;
971
+ return DiscountedValue;
972
+ }
861
973
  /**
862
974
  * @param {?} element
863
975
  * @param {?} VAT
@@ -880,7 +992,7 @@ export class RJMapperBuilderClass {
880
992
  return value;
881
993
  }
882
994
  catch (e) {
883
- console.log(value, ' can not be converted in string', e);
995
+ console.log(value, 'can not be converted in string', e);
884
996
  }
885
997
  }
886
998
  /**
@@ -1109,4 +1221,4 @@ if (false) {
1109
1221
  */
1110
1222
  RJMapperBuilderClass.prototype.rjObject;
1111
1223
  }
1112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkotbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBtY3JldGFpbC9tYXBwZXItbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9SSi1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUErQyxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE1BQU0sT0FBTyxvQkFBb0I7Ozs7SUEyQjdCLFlBQVksY0FBb0M7UUFQeEMsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBSWxCLGFBQVEsR0FBUSxFQUFFLENBQUE7UUFHdEIsSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztTQUM3QzthQUFNO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHO2dCQUN2QixhQUFhLEVBQUUsRUFBRTtnQkFDakIsb0JBQW9CLEVBQUUsRUFBRTtnQkFDeEIsY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFdBQVcsRUFBRSxFQUFFO2dCQUNmLGtCQUFrQixFQUFFLEVBQUU7Z0JBQ3RCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE1BQU0sRUFBRSxFQUFFO2dCQUNWLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxtQkFBQSxFQUFFLEVBQU87Z0JBQ2pCLGFBQWEsRUFBRSxtQkFBQSxFQUFFLEVBQU87Z0JBQ3hCLFlBQVksRUFBRSxFQUFFO2dCQUNoQixJQUFJLEVBQUUsRUFBRTtnQkFDUixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsU0FBUyxF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Ozs7O0lBQzNCLHlDQUF1Qjs7Ozs7SUFDdkIseUNBQXVCOzs7OztJQUN2Qiw4Q0FBNEI7Ozs7O0lBQzVCLDJDQUF5Qjs7Ozs7SUFDekIsK0NBQTZCOzs7OztJQUM3QixnREFBOEI7Ozs7O0lBQzlCLCtDQUE2Qjs7Ozs7SUFDN0IsZ0RBQThCOzs7OztJQUM5Qix5Q0FBc0I7Ozs7O0lBQ3RCLDZDQUEwQjs7Ozs7SUFDMUIsd0NBQXNCOzs7OztJQUN0Qix5Q0FBdUI7Ozs7O0lBQ3ZCLHlDQUF1Qjs7Ozs7SUFDdkIsd0NBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRElTQ09VTlRUWVBFLCBMaW5lRGlzY291bnQsIFRQcm9kdWN0LCBUcmFuc2FjdGlvbkRvY3VtZW50LCBUUkFOU0FDVElPTl9UWVBFIH0gZnJvbSBcIi4vbWFwcGVyLWxpYnJhcnkubW9kZWxcIlxyXG5pbXBvcnQgeyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB9IGZyb20gXCIuL1RyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyXCI7XHJcbmV4cG9ydCBjbGFzcyBSSk1hcHBlckJ1aWxkZXJDbGFzcyB7XHJcblxyXG4gICAgcHJpdmF0ZSB0cmFuc2FjdGlvbkRvY3VtZW50OiBUcmFuc2FjdGlvbkRvY3VtZW50O1xyXG4gICAgcHJpdmF0ZSBkZXZpY2VJZDogYW55O1xyXG4gICAgcHJpdmF0ZSB0cmFuc2FjdGlvbk51bWJlcjogYW55O1xyXG4gICAgcHJpdmF0ZSBtYW5pZmVzdFZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgZGF0YWJhc2VTY2hlbWFWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldFR5cGU6IGFueTtcclxuICAgIHByaXZhdGUgeG1sU2NoZW1hVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBtYWpvclZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgbWlub3JWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIGV4dGVybmFsU3RhdGU6IGFueTtcclxuICAgIHByaXZhdGUgY2FzaGllcklkOiBhbnk7XHJcbiAgICBwcml2YXRlIGNvbXBhbnlJZDogYW55O1xyXG4gICAgcHJpdmF0ZSB0ZXJtaW5hbE51bWJlcjogYW55O1xyXG4gICAgcHJpdmF0ZSB0YXhNZXRob2RJZDogYW55O1xyXG4gICAgcHJpdmF0ZSB0cmFkaW5nUmVnaW9uSWQ6IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0Q3VycmVuY3lJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRDb3VudHJ5SWQ6IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0TGFuZ3VhZ2VJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBpdGVtQ291bnQgPSAwO1xyXG4gICAgcHJpdmF0ZSBsYXJnZXN0TnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgYnJhbmNoSWQ6IGFueTtcclxuICAgIHByaXZhdGUgY3JlYXRlZEF0OiBhbnk7XHJcbiAgICBwcml2YXRlIHVwZGF0ZWRBdCA6YW55O1xyXG4gICAgcHJpdmF0ZSByak9iamVjdDogYW55ID0ge31cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2FjdGlvbkRvYz86IFRyYW5zYWN0aW9uRG9jdW1lbnQpIHtcclxuICAgICAgICBpZiAodHJhbnNhY3Rpb25Eb2MpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0gdHJhbnNhY3Rpb25Eb2M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25JZDogXCJcIixcclxuICAgICAgICAgICAgICAgIG9mZmxpbmVUcmFuc2FjdGlvbklkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25SZWY6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBkYXRlVGltZTogXCJcIixcclxuICAgICAgICAgICAgICAgIG9yZ0NvZGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZUlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc3RvcmVOb2RlSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZU5vZGVTdHJ1Y3R1cmU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHRlcm1pbmFsSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB1c2VySWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpbml0aWF0aW5nTW9kdWxlOiBcImVCYXNrZXRcIixcclxuICAgICAgICAgICAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiYXNrZXQ6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGJhc2tldFN1bW1hcnk6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGJhc2VDdXJyZW5jeTogXCJcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25TdGF0dXM6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJcIixcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHM6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIHNhbGVUb3RhbDogMCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbml0aWxpemVJdGVtQ291bnQoKTtcclxuICAgICAgICB0aGlzLnNldExpbmVOdW1iZXJGb3JQcm9kdWN0cygpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlZEF0ID0gdGhpcy5nZXREYXRlKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlZEF0ID0gdGhpcy5nZXREYXRlKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51cGRhdGVkQXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBvc2Jhc2tldEluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnS2V5d29yZCddID0gdGhpcy5nZW5lcmF0ZUtleXdvcmQoKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydJRCddID0gdGhpcy5nZW5lcmF0ZUlkKHRoaXMuY3JlYXRlZEF0KTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydYTUxTY2hlbWFWZXJzaW9uJ10gPSAnMic7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTGFzdFVwZGF0ZWQnXSA9IHRoaXMudXBkYXRlZEF0O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ01ham9yVmVyc2lvbiddID0gdGhpcy5tYWpvclZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTWlub3JWZXJzaW9uJ10gPSB0aGlzLm1pbm9yVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydNYW5pZmVzdFZlcnNpb24nXSA9IHRoaXMubWFuaWZlc3RWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0RhdGFiYXNlU2NoZW1hVmVyc2lvbiddID0gdGhpcy5kYXRhYmFzZVNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0VHlwZSddID0gdGhpcy5iYXNrZXRUeXBlO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1N0YXRlJ10gPSB0aGlzLmdldFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnRXh0ZXJuYWxTdGF0ZSddID0gdGhpcy5leHRlcm5hbFN0YXRlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0aGVhZGVySW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlRpbWVab25lT2Zmc2V0ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5nZW5lcmF0ZVRpbWV6b25lb2Zmc2V0KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQpKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5EYXRlVGltZUNyZWF0ZWQgPSB0aGlzLmNyZWF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkgPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5DYXNoaWVySUQgPSB0aGlzLmNhc2hpZXJJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQ29tcGFueUlEID0gdGhpcy5jb21wYW55SWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlN0b3JlSUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQnJhbmNoSUQgPSB0aGlzLmJyYW5jaElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5UZXJtaW5hbE51bWJlciA9IHRoaXMudGVybWluYWxOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlRyYW5zYWN0aW9uTnVtYmVyID0gdGhpcy50cmFuc2FjdGlvbk51bWJlcjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UYXhNZXRob2RJRCA9IHRoaXMudGF4TWV0aG9kSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRHluYW1pY1N0b2NrTG9va3VwID0gdGhpcy5nZW5lcmF0ZUR5bmFtaWNTdG9ja0xvb2tVcCgpOy8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldExhbmd1YWdlSUQgPSB0aGlzLmJhc2tldExhbmd1YWdlSWQ7IC8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldENvdW50cnlJRCA9IHRoaXMuYmFza2V0Q291bnRyeUlkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5CYXNrZXRDdXJyZW5jeUlEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UcmFkaW5nUmVnaW9uSUQgPSB0aGlzLnRyYWRpbmdSZWdpb25JZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5FdXJvem9uZSA9IFwiIFwiOy8vdW5rbm93blxyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkV1cm9CYXNlRXhjaGFuZ2VSYXRlID0gXCJcIjsgLy91bmtub3duXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uUHJpbnRhYmxlTmFtZSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTsgLy91bmtub3duXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHJqTWFwcGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluZURpc2NvdW50ID0gW107XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVEaXNjb3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LmZpbHRlcigoeDogYW55KSA9PiB4Lml0ZW1MaW5lSWQgPT09IGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuaW5kZXhPZihsaW5lRGlzY291bnRbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5hZGRQcm9kdWN0KGVsZW1lbnQsIChsaW5lRGlzY291bnQubGVuZ3RoID4gMCA/IGxpbmVEaXNjb3VudFswXSA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwID8gbGluZURpc2NvdW50WzBdIDogbnVsbCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvblByb21vdGlvbiA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25Qcm9tb3Rpb24odHJhbnNhY3Rpb25Qcm9tb3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5SRUZVTkQpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9SRUZVTkQpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Eb2M6IGFueSA9IG5ldyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcigpLmJhc2tldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscykuYnVpbGQoKTtcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb25Eb2MuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxSZWNlaXB0U3VwcGxpZWRcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQnJhbmNoSURcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsVGVybWluYWxOdW1iZXJcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsVHJhbnNhY3Rpb25OdW1iZXJcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQ2FzaGllck51bWJlclwiOiAwXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZGF0YVsnUmV0dXJuJ10gPSB7Li4uZGF0YVsnUmV0dXJuJ10sIC4uLm9ian07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGVsZW1lbnQubGluZURpc2NvdW50LCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9FWENIQU5HRSkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uRG9jOiBhbnkgPSBuZXcgVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIoKS5iYXNrZXQodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMpLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uRG9jLmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlZnVuZGVkUXVhbnRpdHkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVyblByb2R1Y3QgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFJlY2VpcHRTdXBwbGllZFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQnJhbmNoSURcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFRlcm1pbmFsTnVtYmVyXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUcmFuc2FjdGlvbk51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQ2FzaGllck51bWJlclwiOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5Qcm9kdWN0WydSZXR1cm4nXSA9IHsuLi5yZXR1cm5Qcm9kdWN0WydSZXR1cm4nXSwgLi4ub2JqfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10ucHVzaChyZXR1cm5Qcm9kdWN0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFkZFByb2R1Y3QgPSB0aGlzLmFkZFByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXS5wdXNoKGFkZFByb2R1Y3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRCYXNrZXREaXNjb3VudCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudCkgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXSA9IFtdO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge31cclxuICAgICAgICAgICAgb2JqWydYTUxTY2hlbWFWZXJzaW9uJ10gPSBcIjFcIjtcclxuICAgICAgICAgICAgb2JqWydOZXRWYWx1ZSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC5kaXNjb3VudEFtb3VudCA8IDAgPyBlbGVtZW50LmRpc2NvdW50QW1vdW50IDogLWVsZW1lbnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPXRoaXMuY29udmVydFRvU3RyaW5nKCBlbGVtZW50LmRpc2NvdW50QW1vdW50IDwgMCA/IGVsZW1lbnQuZGlzY291bnRBbW91bnQgOiAtZWxlbWVudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnRGVzY3JpcHRpb24nXSA9IGVsZW1lbnQucmVhc29uRGlzcGxheVRleHQ7XHJcbiAgICAgICAgICAgIG9ialsnVXNlcklEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgIG9ialsnUmVhc29uQ29kZUlEJ10gPSBlbGVtZW50LnJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9ialsnRGlzY291bnRUeXBlJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LmRpc2NvdW50VHlwZS50b1VwcGVyQ2FzZSgpID09IERJU0NPVU5UVFlQRS5QRVJDRU5ULnRvVXBwZXJDYXNlKCkgPyAwIDogMSk7IC8vIHRvZG8gLSBjb21wYXJlIHZhbHVlcyBcclxuICAgICAgICAgICAgb2JqWydSb3VuZGluZ1J1bGUnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKDIpO1xyXG4gICAgICAgICAgICBvYmpbJ01vZGlmaWVkTGluZU51bWJlciddID0gZWxlbWVudC5pdGVtTGluZUlkczsgICAgICAgICAgIFxyXG4gICAgICAgICAgICBvYmpbJ0xpbmVOdW1iZXInXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCkpOyBcclxuICAgICAgICAgICAgLy8gb2JqWydEaXNjb3VudGVkVmFsdWUnXSA9IG9ialsnZGlzY291bnRBbW91bnQnXSAvLyB0b2RvIC0gY29uZmlybSB2YWx1ZSBiZWZvcmUgZGlzY291bnQ7XHJcbiAgICAgICAgICAgIC8vIG9ialsnRGlzY291bnRQZXJjZW50YWdlJ10gPSBvYmpbJ2Rpc2NvdW50QW1vdW50J10gLyAxMDAgOyAvLyB0b2RvIC0gb3B0aW9uYWxcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10ucHVzaChvYmopO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZGlmaWVySXRlbShkYXRhOiBhbnksIGxpbmVObzogYW55KSB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgbGluZU5vKSB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICBvYmouWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgIG9iai5MaW5lTnVtYmVyID0gdGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKTtcclxuICAgICAgICAgICAgb2JqLk5ldFZhbHVlID0gMDtcclxuICAgICAgICAgICAgb2JqLkVmZmVjdGl2ZU5ldFZhbHVlID0gMDtcclxuICAgICAgICAgICAgb2JqLkRlc2NyaXB0aW9uID0gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lID8gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lIDogZGF0YS5wcmljZU92ZXJyaWRlUmVhc29uTmFtZTtcclxuICAgICAgICAgICAgb2JqLkRldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICAgICAgb2JqLlVzZXJJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgb2JqLkRhdGVUaW1lQ3JlYXRlZCA9IHRoaXMudXBkYXRlZEF0O1xyXG4gICAgICAgICAgICBvYmouQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgIG9iai5SZWFzb25Db2RlSUQgPSBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUgPyBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUgOiBkYXRhLnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICBvYmouTW9kaWZpZWRMaW5lTnVtYmVyID0gbGluZU5vO1xyXG4gICAgICAgICAgICBvYmouTW9kaWZpZWRJbmRleCA9IDE7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXS5wdXNoKG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFRyYWlsZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5EYXRlVGltZUNvbXBsZXRlZCA9IHRoaXMudXBkYXRlZEF0O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5EZXZpY2VJRCA9IHRoaXMuZGV2aWNlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkNhc2hpZXJJRCA9IHRoaXMuY2FzaGllcklkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5TdG9yZUlEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkJyYW5jaElEID0gdGhpcy5icmFuY2hJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuVGVybWluYWxOdW1iZXIgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudGVybWluYWxJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuVG90YWwgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCAqIDEwMCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkl0ZW1Db3VudCA9IHRoaXMuaXRlbUNvdW50OyAvL2dpdmVzIHRvdGFsIGNvdW50IGZvciBwcm9kdWN0XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkl0ZW1RdWFudGl0eSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5OZXRJdGVtUXVhbnRpdHkgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS50b3RhbEl0ZW1zKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuVGF4VG90YWwgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5WQVRUb3RhbCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlNlcXVlbmNlRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5TZXF1ZW5jZU51bWJlciA9ICdzbnNuJyAvL3N0YXRpYyBmb3Igbm93XHJcblxyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnVGF4SXRlbSddID0gW107XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgb2JqWydYTUxTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgICAgIG9ialsnVGF4UmF0ZSddID0gZWxlbWVudC5WQVQ7XHJcbiAgICAgICAgICAgIG9ialsnVGF4YWJsZVRvdGFsJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LnRheGFibGVBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ1RheFRvdGFsJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LnRheExpbmVUb3RhbCk7XHJcbiAgICAgICAgICAgIG9ialsnVGF4RGVzY3JpcHRpb24nXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQuVkFUQ29kZSk7XHJcbiAgICAgICAgICAgIG9ialsnVGF4SW5jbHVkZWQnXSA9ICcxJztcclxuICAgICAgICAgICAgb2JqWydUYXhQZXJjZW50YWdlJ10gPSBlbGVtZW50LlZBVC50b0ZpeGVkKDIpOyAvLyB0b2RvXHJcblxyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1RheEl0ZW0nXS5wdXNoKG9iailcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gVE9ETzogbWFrZSBUcmFpbGVyIG9iamVjdCBmcm9tIHByb21vdGlvbiAgICAgICBcclxuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydQcm9tb3Rpb25JdGVtJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2VsZW1lbnQnLCBlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25JRCddID0gZWxlbWVudC5wcm9tb3Rpb25JZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uU2F2aW5nJ10gPSBlbGVtZW50LnByb21vdGlvbkFtb3VudCA8IDAgPyBlbGVtZW50LnByb21vdGlvbkFtb3VudCA6IC1lbGVtZW50LnByb21vdGlvbkFtb3VudDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uUXVhbnRpdHknXSA9IFwiXCI7IC8vIHRvZG8gLSBub3QgYXZhaWFsYmxlXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkRlc2NyaXB0aW9uJ10gPSBlbGVtZW50LmRpc3BsYXlUZXh0O1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXSA9IHt9XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydYTUxTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXROdW1iZXInXSA9IFwiXCI7IC8vIHRvZG87XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXRRdWFudGl0eSddID0gXCJcIjsgLy8gdG9kbztcclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdFNhdmluZyddID0gXCJcIjsvLyB0b2RvO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddID0ge307XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnRyaWdnZXIuZm9yRWFjaCgoc3ViRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb2R1Y3QgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IHN1YkVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXVsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXVsnUHJvZHVjdElEJ10gPSBwcm9kdWN0LlNLVTtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ11bJ1VuaXRWYWx1ZSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC5wcm9tb3Rpb25MaW5lUHJpY2UgLyBwcm9kdWN0LnF1YW50aXR5KTtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ11bJ0xpbmVOdW1iZXInXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHN1YkVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddWydRdWFudGl0eSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoc3ViRWxlbWVudC5xdWFudGl0eS50b0ZpeGVkKDEpKTtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ11bJ1RheENvZGUnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnQuaXRlbUxpbmVJZCkuVkFUQ29kZTsgLy8gdG9kb1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydQcm9tb3Rpb25JdGVtJ10ucHVzaChvYmopO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGVuZGVySW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5wYXltZW50RGV0YWlscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5wYXltZW50RGV0YWlscy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBheW1lbnRUeXBlLnRvVXBwZXJDYXNlKCkgPT09ICdHSUZUIENBUkQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogdGhpcy54bWxTY2hlbWFWZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5lTnVtYmVyOiB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5nZXREZXNjcmlwdGlvbihlbGVtZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSUQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZUNyZWF0ZWQ6IHRoaXMudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiBlbGVtZW50LmV4dGVybmFsVGVuZGVyVHlwZSA/IGVsZW1lbnQuZXh0ZXJuYWxUZW5kZXJUeXBlIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlclN1YlR5cGU6IGVsZW1lbnQuZXh0ZXJuYWxTdWJUZW5kZXJUeXBlID8gZWxlbWVudC5leHRlcm5hbFN1YlRlbmRlclR5cGUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyQW1vdW50OiB0aGlzLmNvbnZlcnRUb1N0cmluZygtMSAqIHRoaXMucmVtb3ZlRGVjaW1hbCgoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdpZnRWb3VjaGVyU2FsZXNBbGxvd2VkOiAnJywvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dSZWNoYXJnZWFibGVWb3VjaGVyU2FsZXM6ICcnLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBHaWZ0Vm91Y2hlcklEOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmopXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqMSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24oZWxlbWVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUlEOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyVHlwZTogZWxlbWVudC5leHRlcm5hbFRlbmRlclR5cGUgPyBlbGVtZW50LmV4dGVybmFsVGVuZGVyVHlwZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiBlbGVtZW50LmV4dGVybmFsU3ViVGVuZGVyVHlwZSA/IGVsZW1lbnQuZXh0ZXJuYWxTdWJUZW5kZXJUeXBlIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlckFtb3VudDogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lEZXNjcmlwdGlvbjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZUluVHJhbnNhY3Rpb25Ub3RhbENoZWNrOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dSZWNoYXJnZWFibGVWb3VjaGVyU2FsZXM6IFwiMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuRHJhd2VyQXRFbmQ6IFwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Nhc2hUZW5kZXInXS5wdXNoKG9iajEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRMaW5lTnVtYmVyRm9yUHJvZHVjdHMoKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1MaW5lSWRBcnJheSA9IFtdO1xyXG4gICAgICAgIGl0ZW1MaW5lSWRBcnJheSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMubWFwKChwcm9kdWN0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHByb2R1Y3QuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmxhcmdlc3ROdW1iZXIgPSBpdGVtTGluZUlkQXJyYXkucmVkdWNlKChhOiBhbnksIGI6IGFueSkgPT4gTWF0aC5tYXgoYSwgYikpO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlTGluZU51bWJlcigpIHtcclxuICAgICAgICB0aGlzLmxhcmdlc3ROdW1iZXIgKz0gMTtcclxuICAgICAgICB0aGlzLml0ZW1Db3VudCArPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxhcmdlc3ROdW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlsaXplSXRlbUNvdW50KCkge1xyXG4gICAgICAgIHRoaXMuaXRlbUNvdW50ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmpPYmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVzY3JpcHRpb24oZWxlbWVudDogYW55KSB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQucGF5bWVudFR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0NBUkQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmNhcmRUeXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5wYXltZW50VHlwZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGV2aWNlSW5mbyhpZDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VJZCA9IGlkXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVEZWNpbWFsKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgKiAxMDA7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VHJhbnNhY3Rpb25OdW1iZXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1hbmlmZXN0VmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tYW5pZmVzdFZlcnNpb24gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldERhdGFiYXNlU2NoZW1hVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhYmFzZVNjaGVtYVZlcnNpb24gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJhc2tldFR5cGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0VHlwZSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VHJhZGluZ1JlZ2lvbklEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRyYWRpbmdSZWdpb25JZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRDb21wYW55SUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY29tcGFueUlkID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRheE1ldGhvZElEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRheE1ldGhvZElkID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1ham9yVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tYWpvclZlcnNpb24gPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWlub3JWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1pbm9yVmVyc2lvbiA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRYTUxTY2hlbWFWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnhtbFNjaGVtYVZlcnNpb24gPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0RXh0ZXJuYWxTdGF0ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5leHRlcm5hbFN0YXRlID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldENhc2hpZXJJRCgpIHtcclxuICAgICAgICB0aGlzLmNhc2hpZXJJZCA9ICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lKSA/ICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUgOiAnJztcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRlcm1pbmFsTnVtYmVyKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRlcm1pbmFsTnVtYmVyID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QmFza2V0TGFuZ3VhZ2VJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXRMYW5ndWFnZUlkID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzZXRCYXNrZXRDb3VudHJ5SUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0Q291bnRyeUlkID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QmFza2V0Q3VycmVuY3lJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXRDdXJyZW5jeUlkID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QnJhbmNoSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYnJhbmNoSWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUlkKGRhdGU6IGFueSkge1xyXG4gICAgICAgIGxldCBuZXdEYXRlVGltZSA9IGRhdGUucmVwbGFjZSgvW14wLTldL2csICcnKVxyXG4gICAgICAgIGxldCBpZCA9ICh0aGlzLmRldmljZUlkICsgJ3wnICsgbmV3RGF0ZVRpbWUgKyAnfCcgKyB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyKS50b1N0cmluZygpO1xyXG4gICAgICAgIHJldHVybiBpZDtcclxuICAgIH0gXHJcblxyXG4gICAgZ2VuZXJhdGVUaW1lem9uZW9mZnNldChkYXRlOiBhbnkpIHtcclxuICAgICAgICBsZXQgeCA9IGRhdGUgPyBkYXRlIDogJyc7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVLZXl3b3JkKCkge1xyXG4gICAgICAgIGxldCB4ID0gKHRoaXMuY29tcGFueUlkICsgJ3wnICsgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQgKyAnfCcgKyB0aGlzLnRlcm1pbmFsTnVtYmVyICsgJ3wnICsgdGhpcy50cmFuc2FjdGlvbk51bWJlcikudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Lm9wZXJhdGlvblN0YXR1cyA9PT0gJ1BBWV9TVUNDRVNTJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0NvbXBsZXRlZCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0NhbmNlbGxlZCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVyblByb2R1Y3QoZWxlbWVudDogYW55LCBsaW5lRGlzY291bnQ6IExpbmVEaXNjb3VudCkge1xyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHt9XHJcbiAgICAgICAgbGV0IHRheFRvdGFsID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFsndGF4QnJlYWtkb3duJ11bJ3RheExpbmVzJ10uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudFsnaXRlbUxpbmVJZCddKTtcclxuICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICBvYmpbJ0xpbmVOdW1iZXInXSA9IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXTtcclxuICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncmVmdW5kZWRUb3RhbCddKTtcclxuICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncmVmdW5kZWRUb3RhbCddKTtcclxuICAgICAgICBvYmpbJ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydkZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnRGV2aWNlSUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudFsndGVybWluYWxJZCddO1xyXG4gICAgICAgIG9ialsnVXNlcklEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgb2JqWydEYXRlVGltZUNyZWF0ZWQnXSA9IHRoaXMuY3JlYXRlZEF0O1xyXG4gICAgICAgIG9ialsnRXh0ZW5kZWRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnRbJ3RvdGFsTGluZVByaWNlJ10qLTEpO1xyXG4gICAgICAgIG9ialsnVW5pdFByaWNlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncHJpY2UnXSk7XHJcbiAgICAgICAgb2JqWydRdWFudGl0eSddID0gdGhpcy5nZXRRdWFudGl0eShlbGVtZW50KTtcclxuICAgICAgICBvYmpbJ09yaWdpbmFsVGF4QW1vdW50U2V0J10gPSAxO1xyXG4gICAgICAgIG9ialsnUHJvZHVjdElEJ10gPSBlbGVtZW50WydTS1UnXTtcclxuICAgICAgICBvYmpbJ0hhbmRLZXllZCddID0gMTtcclxuICAgICAgICBvYmpbJ0xvbmdEZXNjcmlwdGlvbiddID0gZWxlbWVudFsnZGVzY3JpcHRpb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddID0ge307XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXVsnUmV0dXJuUmVhc29uSUQnXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUmVhc29uJ107XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXVsnUmV0dXJuRGVzY3JpcHRpb24nXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUmVhc29uRGVzY3JpcHRpb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5Ub1N0b2NrJ10gPSB0aGlzLmdldFF1YW50aXR5KGVsZW1lbnQpO1xyXG4gICAgICAgIG9ialsnVGF4Q29kZSddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFsndGF4QnJlYWtkb3duJ11bJ3RheExpbmVzJ10uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudFsnaXRlbUxpbmVJZCddKS5WQVRDb2RlO1xyXG5cclxuICAgICAgICBvYmpbJ0Rpc3BsYXlUYXhDb2RlJ10gPSAnJzsgLy8gdG9kb1xyXG4gICAgICAgIG9ialsnUHJvZHVjdEF0dHJpYnV0ZXMnXSA9ICcnOyAvL3RvZG8gLSBub3QgcmVxdWlyZWRcclxuICAgICAgICBvYmpbJ1BlcmlzaGFibGUnXSA9IHRoaXMuZ2V0QXR0cmlidXRlcygpO1xyXG4gICAgICAgIG9ialsnTU1Hcm91cElEJ10gPSB0aGlzLmdldEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICBvYmpbJ0N1c3RvbWVyRGV0YWlscyddID0gXCJcIjsgLy8gdG9kbyAtIGJsYW5rXHJcbiAgICAgICAgb2JqWydUb3RhbFByb21vdGlvblNhdmluZyddID0gZWxlbWVudFsncHJvbW90aW9uQW1vdW50J10gfHwgLTE7IC8vIFRPRE9cclxuICAgICAgICBvYmpbJ09yaWdpbmFsVGF4QW1vdW50J10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmdldE9yaWdpbmFsVGF4KGVsZW1lbnQsdGF4VG90YWwuVkFUKSAqIC0xKVxyXG4gICAgICAgIG9ialsndGF4QW1vdW50J10gPSB0YXhUb3RhbC50YXhMaW5lVG90YWwgPCAwID8odGF4VG90YWwudGF4TGluZVRvdGFsKSA6ICgtdGF4VG90YWwudGF4TGluZVRvdGFsKTtcclxuXHJcbiAgICAgICAgaWYgKGxpbmVEaXNjb3VudCkge1xyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgJiYgbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGxpbmUgZGlzY291bnRcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50VHlwZSA9IGxpbmVEaXNjb3VudC5kaXNjb3VudFR5cGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQgKyAobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50ZWRWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFBlcmNlbnRhZ2UgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uUm91bmRpbmdSdWxlID0gMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZSAmJiBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vcHJpY2Ugb3ZlcnJpZGVcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTmV3UHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDAgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgcHJvZHVjdCBwcmljZVxyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRXh0ZW5kZWRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5Vbml0UHJpY2UgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcm9kdWN0KGVsZW1lbnQ6IFRQcm9kdWN0LCBsaW5lRGlzY291bnQ6IExpbmVEaXNjb3VudCkge1xyXG4gICAgICAgIGxldCB0YXhUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSk7XHJcbiAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiB0aGlzLnhtbFNjaGVtYVZlcnNpb24sXHJcbiAgICAgICAgICAgIExpbmVOdW1iZXI6IGVsZW1lbnQuaXRlbUxpbmVJZCxcclxuICAgICAgICAgICAgTmV0VmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnRvdGFsTGluZVByaWNlKSxcclxuICAgICAgICAgICAgRWZmZWN0aXZlTmV0VmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnRvdGFsTGluZVByaWNlKSxcclxuICAgICAgICAgICAgRGVzY3JpcHRpb246IGVsZW1lbnQuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIERldmljZUlEOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICBVc2VySUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLmNyZWF0ZWRBdCxcclxuICAgICAgICAgICAgRXh0ZW5kZWRWYWx1ZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQucHJpY2UpLFxyXG4gICAgICAgICAgICBVbml0UHJpY2U6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnByaWNlKSxcclxuICAgICAgICAgICAgTU1Hcm91cElEOiB0aGlzLmdldEF0dHJpYnV0ZXMoKSwgLy90b2RvXHJcbiAgICAgICAgICAgIFF1YW50aXR5OiBlbGVtZW50LnF1YW50aXR5LnRvRml4ZWQoMSksXHJcbiAgICAgICAgICAgIFNhbGVzcGVyc29uSUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VySWQsXHJcbiAgICAgICAgICAgIFNhbGVzcGVyc29uTmFtZTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lLFxyXG4gICAgICAgICAgICBUYXhDb2RlOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pLlZBVENvZGUsXHJcbiAgICAgICAgICAgIFRheE1vZGlmaWFibGU6IDEsIC8vdG9kb1xyXG4gICAgICAgICAgICBPcmlnaW5hbFRheEFtb3VudCA6ICB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmdldE9yaWdpbmFsVGF4KGVsZW1lbnQsdGF4VG90YWwuVkFUKSksXHJcbiAgICAgICAgICAgIFRheEFtb3VudCA6ICB0aGlzLmNvbnZlcnRUb1N0cmluZyh0YXhUb3RhbC50YXhMaW5lVG90YWwpLFxyXG4gICAgICAgICAgICBPcmlnaW5hbFRheEFtb3VudFNldDogMSwvL3RvZG9cclxuICAgICAgICAgICAgUHJvZHVjdElEOiBlbGVtZW50LlNLVSxcclxuICAgICAgICAgICAgSGFuZEtleWVkOiAxLC8vdG9kb1xyXG4gICAgICAgICAgICBDdXN0b21lckRldGFpbHM6IFwiXCIsXHJcbiAgICAgICAgICAgIFBlcmlzaGFibGU6IHRoaXMuZ2V0QXR0cmlidXRlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaW5lRGlzY291bnQpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lICYmIGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsaW5lIGRpc2NvdW50XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFR5cGUgPSBsaW5lRGlzY291bnQuZGlzY291bnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50ICsgKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudGVkVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRQZXJjZW50YWdlID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlJvdW5kaW5nUnVsZSA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGUgJiYgbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAvL3ByaWNlIG92ZXJyaWRlXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbkRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk5ld1ByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy91cGRhdGUgdGhlIHByb2R1Y3QgcHJpY2VcclxuICAgICAgICAgICAgb2JqWydOZXRWYWx1ZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ0V4dGVuZGVkVmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ1VuaXRQcmljZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9yaWdpbmFsVGF4KGVsZW1lbnQ6IFRQcm9kdWN0LCBWQVQpIHtcclxuICAgICAgICBsZXQgcHJpY2ViZWZvcmV0YXggPSAoZWxlbWVudC5wcmljZSAqIDEwMCkvKDEwMCArIFZBVCApXHJcbiAgICAgICAgbGV0IG9yaWdpbmFsdGF4PSBlbGVtZW50LnByaWNlIC0gcHJpY2ViZWZvcmV0YXhcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWx0YXg7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvU3RyaW5nKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSwgJyBjYW4gbm90IGJlIGNvbnZlcnRlZCBpbiBzdHJpbmcnLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVEeW5hbWljU3RvY2tMb29rVXAoKSB7XHJcbiAgICAgICAgbGV0IHggPSAnMCc7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVsaXZlcnlNZXRob2QgPT09ICcxJyB8fCBlbGVtZW50LmRlbGl2ZXJ5TWV0aG9kID09PSAnMicpIHtcclxuICAgICAgICAgICAgICAgIHggPSAnMSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdHRyaWJ1dGVzKCl7XHJcbiAgICAgICAgbGV0IG5hbWU6IHN0cmluZyB8IGFueVtdID0gW11cclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIGVsZW1lbnQuYXR0cmlidXRlcyAmJiBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbmFtZSA9IGVsZW1lbnQuYXR0cmlidXRlcy5maWx0ZXIoKHg6IGFueSkgPT4geC5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IGVsZW1lbnQubmFtZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChuYW1lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5hbWVbMF0udmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCJcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0ZShkYXRlOnN0cmluZyl7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IHRoaXMuZ2VuZXJhdGVUaW1lem9uZW9mZnNldChkYXRlKSAqIC0xO1xyXG4gICAgICAgIGxldCBvZmZzZXRIb3VycyA9IE1hdGguYWJzKE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApKTsgICAgICAgIFxyXG5cdCAgICBsZXQgb2Zmc2V0TWludXRlcyA9IE1hdGguYWJzKG9mZnNldCkgLSBvZmZzZXRIb3VycyAqIDYwO1xyXG5cclxuICAgICAgICBsZXQgb2Zmc2V0U2lnbiA9ICcrJztcclxuICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xyXG4gICAgICAgICAgICBvZmZzZXRTaWduID0gJy0nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5ld2RhdGUgPSBkYXRlLnN1YnN0cmluZygwLDE5KTtcclxuICAgICAgICBjb25zdCB4ID0gKG5ld2RhdGUrIG9mZnNldFNpZ24gK1N0cmluZyhvZmZzZXRIb3VycykucGFkU3RhcnQoMiwgJzAnKSsnOicrU3RyaW5nKG9mZnNldE1pbnV0ZXMpLnBhZFN0YXJ0KDIsICcwJykpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHg7ICAgICAgICBcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0VHJhbnNhY3Rpb25Qcm9tb3Rpb24odHJhbnNhY3Rpb25Qcm9tb3Rpb24pe1xyXG4gICAgICAgIGlmKHRyYW5zYWN0aW9uUHJvbW90aW9uICYmIHRyYW5zYWN0aW9uUHJvbW90aW9uLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddID0ge307XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ1hNTFNjaGVtYVZlcnNpb24nXSA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ0xpbmVOdW1iZXInXSA9IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ05ldFZhbHVlJ10gPSAgdGhpcy5yZW1vdmVEZWNpbWFsKHRyYW5zYWN0aW9uUHJvbW90aW9uWzBdLnByb21vdGlvbkxpbmVQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbCh0cmFuc2FjdGlvblByb21vdGlvblswXS5wcm9tb3Rpb25MaW5lUHJpY2UpICogLTE7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ0Rlc2NyaXB0aW9uJ10gPSB0cmFuc2FjdGlvblByb21vdGlvblswXS5wcm9tb3Rpb25JbmZvO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddWydEZXZpY2VJRCddID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnVXNlcklEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ0RhdGVUaW1lQ3JlYXRlZCddID0gdGhpcy5jcmVhdGVkQXQ7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ01vZGlmaWVkTGluZU51bWJlciddID0gdHJhbnNhY3Rpb25Qcm9tb3Rpb25bMF0uaXRlbUxpbmVJZHM7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ1JlYXNvbkNvZGVJRCddID0gMDtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRGlzY291bnRUeXBlJ10gPSB0cmFuc2FjdGlvblByb21vdGlvblswXS5wcm9tb3Rpb25UeXBlID09ICdUUkFOU0FDVElPTl9PRkYnID8gMSA6IDA7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ0Rpc2NvdW50UGVyY2VudGFnZSddID0gMDsgLy90b2RvXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ0Rpc2NvdW50ZWRWYWx1ZSddID0gMDsgLy90b2RvXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ1JvdW5kaW5nUnVsZSddID0gMjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldFF1YW50aXR5KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGxldCBxdWFudGl0eVxyXG4gICAgICAgIGlmKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51bnJlZmVyZW5jZWRSZWZ1bmQpe1xyXG4gICAgICAgICAgICBxdWFudGl0eSA9IGVsZW1lbnRbJ3F1YW50aXR5J10gPCAwID8gZWxlbWVudFsncXVhbnRpdHknXS50b0ZpeGVkKDEpIDogKC1lbGVtZW50WydxdWFudGl0eSddKS50b0ZpeGVkKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBxdWFudGl0eSA9IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXSA8IDAgPyBlbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10udG9GaXhlZCgxKSA6ICgtZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddKS50b0ZpeGVkKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcXVhbnRpdHk7XHJcbiAgICB9XHJcbn1cclxuIl19
1224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkotbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBtY3JldGFpbC9tYXBwZXItbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9SSi1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFvRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3pJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE1BQU0sT0FBTyxvQkFBb0I7Ozs7SUEyQjdCLFlBQVksY0FBb0M7UUFQeEMsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBSWxCLGFBQVEsR0FBUSxFQUFFLENBQUE7UUFHdEIsSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztTQUM3QzthQUFNO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHO2dCQUN2QixhQUFhLEVBQUUsRUFBRTtnQkFDakIsb0JBQW9CLEVBQUUsRUFBRTtnQkFDeEIsY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFdBQVcsRUFBRSxFQUFFO2dCQUNmLGtCQUFrQixFQUFFLEVBQUU7Z0JBQ3RCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE1BQU0sRUFBRSxFQUFFO2dCQUNWLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxtQkFBQSxFQUFFLEVBQU87Z0JBQ2pCLGFBQWEsRUFBRSxtQkFBQSxFQUFFLEVBQU87Z0JBQ3hCLFlBQVksRUFBRSxFQUFFO2dCQUNoQixJQUFJLEVBQUUsRUFBRTtnQkFDUixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsU0FBUyxF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c0I7Ozs7O0lBQ3RCLGlEQUErQjs7Ozs7SUFDL0IsK0NBQTZCOzs7OztJQUM3QixxREFBbUM7Ozs7O0lBQ25DLDBDQUF3Qjs7Ozs7SUFDeEIsZ0RBQThCOzs7OztJQUM5Qiw0Q0FBMEI7Ozs7O0lBQzFCLDRDQUEwQjs7Ozs7SUFDMUIsNkNBQTJCOzs7OztJQUMzQix5Q0FBdUI7Ozs7O0lBQ3ZCLHlDQUF1Qjs7Ozs7SUFDdkIsOENBQTRCOzs7OztJQUM1QiwyQ0FBeUI7Ozs7O0lBQ3pCLCtDQUE2Qjs7Ozs7SUFDN0IsZ0RBQThCOzs7OztJQUM5QiwrQ0FBNkI7Ozs7O0lBQzdCLGdEQUE4Qjs7Ozs7SUFDOUIseUNBQXNCOzs7OztJQUN0Qiw2Q0FBMEI7Ozs7O0lBQzFCLHdDQUFzQjs7Ozs7SUFDdEIseUNBQXVCOzs7OztJQUN2Qix5Q0FBdUI7Ozs7O0lBQ3ZCLHdDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERJU0NPVU5UVFlQRSwgTGluZURpc2NvdW50LCBUUHJvZHVjdCwgVHJhbnNhY3Rpb25EaXNjb3VudCwgVHJhbnNhY3Rpb25Eb2N1bWVudCwgVFJBTlNBQ1RJT05fVFlQRSB9IGZyb20gXCIuL21hcHBlci1saWJyYXJ5Lm1vZGVsXCJcclxuaW1wb3J0IHsgVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIgfSBmcm9tIFwiLi9UcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlclwiO1xyXG5leHBvcnQgY2xhc3MgUkpNYXBwZXJCdWlsZGVyQ2xhc3Mge1xyXG5cclxuICAgIHByaXZhdGUgdHJhbnNhY3Rpb25Eb2N1bWVudDogVHJhbnNhY3Rpb25Eb2N1bWVudDtcclxuICAgIHByaXZhdGUgZGV2aWNlSWQ6IGFueTtcclxuICAgIHByaXZhdGUgdHJhbnNhY3Rpb25OdW1iZXI6IGFueTtcclxuICAgIHByaXZhdGUgbWFuaWZlc3RWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIGRhdGFiYXNlU2NoZW1hVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRUeXBlOiBhbnk7XHJcbiAgICBwcml2YXRlIHhtbFNjaGVtYVZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgbWFqb3JWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIG1pbm9yVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBleHRlcm5hbFN0YXRlOiBhbnk7XHJcbiAgICBwcml2YXRlIGNhc2hpZXJJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBjb21wYW55SWQ6IGFueTtcclxuICAgIHByaXZhdGUgdGVybWluYWxOdW1iZXI6IGFueTtcclxuICAgIHByaXZhdGUgdGF4TWV0aG9kSWQ6IGFueTtcclxuICAgIHByaXZhdGUgdHJhZGluZ1JlZ2lvbklkOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldEN1cnJlbmN5SWQ6IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0Q291bnRyeUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldExhbmd1YWdlSWQ6IGFueTtcclxuICAgIHByaXZhdGUgaXRlbUNvdW50ID0gMDtcclxuICAgIHByaXZhdGUgbGFyZ2VzdE51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGJyYW5jaElkOiBhbnk7XHJcbiAgICBwcml2YXRlIGNyZWF0ZWRBdDogYW55O1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVkQXQgOmFueTtcclxuICAgIHByaXZhdGUgcmpPYmplY3Q6IGFueSA9IHt9XHJcblxyXG4gICAgY29uc3RydWN0b3IodHJhbnNhY3Rpb25Eb2M/OiBUcmFuc2FjdGlvbkRvY3VtZW50KSB7XHJcbiAgICAgICAgaWYgKHRyYW5zYWN0aW9uRG9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCA9IHRyYW5zYWN0aW9uRG9jO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCA9IHtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBvZmZsaW5lVHJhbnNhY3Rpb25JZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUmVmOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgZGF0ZVRpbWU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBvcmdDb2RlOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc3RvcmVJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHN0b3JlTm9kZUlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc3RvcmVOb2RlU3RydWN0dXJlOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB0ZXJtaW5hbElkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdXNlcklkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgaW5pdGlhdGluZ01vZHVsZTogXCJlQmFza2V0XCIsXHJcbiAgICAgICAgICAgICAgICBleHBvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYmFza2V0OiB7fSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICBiYXNrZXRTdW1tYXJ5OiB7fSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICBiYXNlQ3VycmVuY3k6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uU3RhdHVzOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzOiB7fSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICBzYWxlVG90YWw6IDAsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdGlsaXplSXRlbUNvdW50KCk7XHJcbiAgICAgICAgdGhpcy5zZXRMaW5lTnVtYmVyRm9yUHJvZHVjdHMoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMuZ2V0RGF0ZSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3JlYXRlZEF0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZWRBdCA9IHRoaXMuZ2V0RGF0ZSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQb3NiYXNrZXRJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0tleXdvcmQnXSA9IHRoaXMuZ2VuZXJhdGVLZXl3b3JkKCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSUQnXSA9IHRoaXMuZ2VuZXJhdGVJZCh0aGlzLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnWE1MU2NoZW1hVmVyc2lvbiddID0gJzInO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0xhc3RVcGRhdGVkJ10gPSB0aGlzLnVwZGF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydNYWpvclZlcnNpb24nXSA9IHRoaXMubWFqb3JWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ01pbm9yVmVyc2lvbiddID0gdGhpcy5taW5vclZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTWFuaWZlc3RWZXJzaW9uJ10gPSB0aGlzLm1hbmlmZXN0VmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydEYXRhYmFzZVNjaGVtYVZlcnNpb24nXSA9IHRoaXMuZGF0YWJhc2VTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldFR5cGUnXSA9IHRoaXMuYmFza2V0VHlwZTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydTdGF0ZSddID0gdGhpcy5nZXRTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0V4dGVybmFsU3RhdGUnXSA9IHRoaXMuZXh0ZXJuYWxTdGF0ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldGhlYWRlckluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10gPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5UaW1lWm9uZU9mZnNldCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZ2VuZXJhdGVUaW1lem9uZW9mZnNldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3JlYXRlZEF0KSk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRGF0ZVRpbWVDcmVhdGVkID0gdGhpcy5jcmVhdGVkQXQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5ID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LkRldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQ2FzaGllcklEID0gdGhpcy5jYXNoaWVySWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LkNvbXBhbnlJRCA9IHRoaXMuY29tcGFueUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5TdG9yZUlEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LkJyYW5jaElEID0gdGhpcy5icmFuY2hJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuVGVybWluYWxOdW1iZXIgPSB0aGlzLnRlcm1pbmFsTnVtYmVyO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5UcmFuc2FjdGlvbk51bWJlciA9IHRoaXMudHJhbnNhY3Rpb25OdW1iZXI7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uVGF4TWV0aG9kSUQgPSB0aGlzLnRheE1ldGhvZElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkR5bmFtaWNTdG9ja0xvb2t1cCA9IHRoaXMuZ2VuZXJhdGVEeW5hbWljU3RvY2tMb29rVXAoKTsvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5CYXNrZXRMYW5ndWFnZUlEID0gdGhpcy5iYXNrZXRMYW5ndWFnZUlkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5CYXNrZXRDb3VudHJ5SUQgPSB0aGlzLmJhc2tldENvdW50cnlJZDsgLy90b2RvXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uQmFza2V0Q3VycmVuY3lJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3k7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uVHJhZGluZ1JlZ2lvbklEID0gdGhpcy50cmFkaW5nUmVnaW9uSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRXVyb3pvbmUgPSBcIiBcIjsvL3Vua25vd25cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5FdXJvQmFzZUV4Y2hhbmdlUmF0ZSA9IFwiXCI7IC8vdW5rbm93blxyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlByaW50YWJsZU5hbWUgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7IC8vdW5rbm93blxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICByak1hcHBlcigpIHtcclxuICAgICAgICB2YXIgdHJhbnNhY3Rpb25EaXNjb3VudDphbnkgPSBbXSA7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudCAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgdHJhbnNhY3Rpb25EaXNjb3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRSkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmVEaXNjb3VudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50ICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lRGlzY291bnQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5maWx0ZXIoKHg6IGFueSkgPT4geC5pdGVtTGluZUlkID09PSBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LmluZGV4T2YobGluZURpc2NvdW50WzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMuYWRkUHJvZHVjdChlbGVtZW50LCAobGluZURpc2NvdW50Lmxlbmd0aCA+IDAgPyBsaW5lRGlzY291bnRbMF0gOiBudWxsKSwodHJhbnNhY3Rpb25EaXNjb3VudC5sZW5ndGggPiAwID8gdHJhbnNhY3Rpb25EaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwID8gbGluZURpc2NvdW50WzBdIDogbnVsbCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvblByb21vdGlvbiA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25Qcm9tb3Rpb24odHJhbnNhY3Rpb25Qcm9tb3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5SRUZVTkQpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpLCh0cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDAgPyB0cmFuc2FjdGlvbkRpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShlbGVtZW50LmxpbmVEaXNjb3VudCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX1JFRlVORCkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvbkRvYzogYW55ID0gbmV3IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyKCkuYmFza2V0KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKS5idWlsZCgpO1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkRvYy5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpLCh0cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDAgPyB0cmFuc2FjdGlvbkRpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsUmVjZWlwdFN1cHBsaWVkXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbEJyYW5jaElEXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFRlcm1pbmFsTnVtYmVyXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFRyYW5zYWN0aW9uTnVtYmVyXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbENhc2hpZXJOdW1iZXJcIjogMFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGRhdGFbJ1JldHVybiddID0gey4uLmRhdGFbJ1JldHVybiddLCAuLi5vYmp9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShlbGVtZW50LmxpbmVEaXNjb3VudCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEVfRVhDSEFOR0UpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvbkRvYzogYW55ID0gbmV3IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyKCkuYmFza2V0KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKS5idWlsZCgpO1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkRvYy5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZWZ1bmRlZFF1YW50aXR5ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXR1cm5Qcm9kdWN0ID0gdGhpcy5yZXR1cm5Qcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCksKHRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMCA/IHRyYW5zYWN0aW9uRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFJlY2VpcHRTdXBwbGllZFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQnJhbmNoSURcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFRlcm1pbmFsTnVtYmVyXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUcmFuc2FjdGlvbk51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsQ2FzaGllck51bWJlclwiOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5Qcm9kdWN0WydSZXR1cm4nXSA9IHsuLi5yZXR1cm5Qcm9kdWN0WydSZXR1cm4nXSwgLi4ub2JqfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10ucHVzaChyZXR1cm5Qcm9kdWN0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFkZFByb2R1Y3QgPSB0aGlzLmFkZFByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSAsKHRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMCA/IHRyYW5zYWN0aW9uRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXS5wdXNoKGFkZFByb2R1Y3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRCYXNrZXREaXNjb3VudCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudCkgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXSA9IFtdO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge31cclxuICAgICAgICAgICAgb2JqWydYTUxTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgICAgIG9ialsnTmV0VmFsdWUnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQuZGlzY291bnRBbW91bnQgKiAtMSk7XHJcbiAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9dGhpcy5jb252ZXJ0VG9TdHJpbmcoIGVsZW1lbnQuZGlzY291bnRBbW91bnQgKiAtMSk7XHJcbiAgICAgICAgICAgIG9ialsnRGVzY3JpcHRpb24nXSA9IGVsZW1lbnQucmVhc29uRGlzcGxheVRleHQ7XHJcbiAgICAgICAgICAgIG9ialsnVXNlcklEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgIG9ialsnUmVhc29uQ29kZUlEJ10gPSBlbGVtZW50LnJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9ialsnRGlzY291bnRUeXBlJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LmRpc2NvdW50VHlwZS50b1VwcGVyQ2FzZSgpID09IERJU0NPVU5UVFlQRS5QRVJDRU5ULnRvVXBwZXJDYXNlKCkgPyAwIDogMSk7IFxyXG4gICAgICAgICAgICBvYmpbJ1JvdW5kaW5nUnVsZSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoMik7XHJcbiAgICAgICAgICAgIG9ialsnTW9kaWZpZWRMaW5lTnVtYmVyJ10gPSBlbGVtZW50Lml0ZW1MaW5lSWRzOyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG9ialsnTGluZU51bWJlciddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKSk7IFxyXG4gICAgICAgICAgICBvYmpbJ0Rpc2NvdW50ZWRWYWx1ZSddID0gIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsICsgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuZGlzY291bnRUb3RhbDtcclxuICAgICAgICAgICAgaWYoZWxlbWVudC5kaXNjb3VudFR5cGUudG9VcHBlckNhc2UoKSA9PSBESVNDT1VOVFRZUEUuUEVSQ0VOVC50b1VwcGVyQ2FzZSgpKXtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnRQZXJjZW50YWdlJ10gPSAgdGhpcy5jb252ZXJ0VG9TdHJpbmcoKGVsZW1lbnQuZGlzY291bnRBbW91bnQgLyB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCkudG9GaXhlZCgxKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gJ1JFRlVORCcpe1xyXG4gICAgICAgICAgICAgICAgb2JqWydOZXRWYWx1ZSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC5kaXNjb3VudEFtb3VudCA8IDAgPyAtZWxlbWVudC5kaXNjb3VudEFtb3VudCA6IGVsZW1lbnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydFZmZlY3RpdmVOZXRWYWx1ZSddID10aGlzLmNvbnZlcnRUb1N0cmluZyggZWxlbWVudC5kaXNjb3VudEFtb3VudCA8IDAgPyAtZWxlbWVudC5kaXNjb3VudEFtb3VudCA6IGVsZW1lbnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddLnB1c2gob2JqKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2RpZmllckl0ZW0oZGF0YTogYW55LCBsaW5lTm86IGFueSkge1xyXG4gICAgICAgIGlmIChkYXRhICYmIGxpbmVObykge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgb2JqLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICBvYmouTGluZU51bWJlciA9IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCk7XHJcbiAgICAgICAgICAgIG9iai5OZXRWYWx1ZSA9IDA7XHJcbiAgICAgICAgICAgIG9iai5FZmZlY3RpdmVOZXRWYWx1ZSA9IDA7XHJcbiAgICAgICAgICAgIG9iai5EZXNjcmlwdGlvbiA9IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZSA/IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZSA6IGRhdGEucHJpY2VPdmVycmlkZVJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgIG9iai5EZXZpY2VJRCA9IHRoaXMuZGV2aWNlSWQ7XHJcbiAgICAgICAgICAgIG9iai5Vc2VySUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgIG9iai5EYXRlVGltZUNyZWF0ZWQgPSB0aGlzLnVwZGF0ZWRBdDtcclxuICAgICAgICAgICAgb2JqLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICBvYmouUmVhc29uQ29kZUlEID0gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlID8gZGF0YS5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlIDogZGF0YS5wcmljZU92ZXJyaWRlUmVhc29uQ29kZTtcclxuICAgICAgICAgICAgb2JqLk1vZGlmaWVkTGluZU51bWJlciA9IGxpbmVObztcclxuICAgICAgICAgICAgb2JqLk1vZGlmaWVkSW5kZXggPSAxO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10ucHVzaChvYmopO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmFpbGVySW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ10gPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuRGF0ZVRpbWVDb21wbGV0ZWQgPSB0aGlzLnVwZGF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkgPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5DYXNoaWVySUQgPSB0aGlzLmNhc2hpZXJJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuU3RvcmVJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5CcmFuY2hJRCA9IHRoaXMuYnJhbmNoSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LlRlcm1pbmFsTnVtYmVyID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnRlcm1pbmFsSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlRvdGFsID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgKiAxMDApO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5JdGVtQ291bnQgPSB0aGlzLml0ZW1Db3VudDsgLy9naXZlcyB0b3RhbCBjb3VudCBmb3IgcHJvZHVjdFxyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5JdGVtUXVhbnRpdHkgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS50b3RhbEl0ZW1zKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuTmV0SXRlbVF1YW50aXR5ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlRheFRvdGFsID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuVkFUVG90YWwpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5TZXF1ZW5jZURldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuU2VxdWVuY2VOdW1iZXIgPSAnc25zbicgLy9zdGF0aWMgZm9yIG5vd1xyXG5cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1RheEl0ZW0nXSA9IFtdO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIG9ialsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICBvYmpbJ1RheFJhdGUnXSA9IGVsZW1lbnQuVkFUO1xyXG4gICAgICAgICAgICBvYmpbJ1RheGFibGVUb3RhbCddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC50YXhhYmxlQW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydUYXhUb3RhbCddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC50YXhMaW5lVG90YWwpO1xyXG4gICAgICAgICAgICBvYmpbJ1RheERlc2NyaXB0aW9uJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LlZBVENvZGUpO1xyXG4gICAgICAgICAgICBvYmpbJ1RheEluY2x1ZGVkJ10gPSAnMSc7XHJcbiAgICAgICAgICAgIG9ialsnVGF4UGVyY2VudGFnZSddID0gZWxlbWVudC5WQVQudG9GaXhlZCgyKTsgLy8gdG9kb1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydUYXhJdGVtJ10ucHVzaChvYmopXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFRPRE86IG1ha2UgVHJhaWxlciBvYmplY3QgZnJvbSBwcm9tb3Rpb24gICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnUHJvbW90aW9uSXRlbSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSUQnXSA9IGVsZW1lbnQucHJvbW90aW9uSWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvblNhdmluZyddID0gZWxlbWVudC5wcm9tb3Rpb25BbW91bnQgPCAwID8gZWxlbWVudC5wcm9tb3Rpb25BbW91bnQgOiAtZWxlbWVudC5wcm9tb3Rpb25BbW91bnQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvblF1YW50aXR5J10gPSBcIlwiOyAvLyB0b2RvIC0gbm90IGF2YWlhbGJsZVxyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25EZXNjcmlwdGlvbiddID0gZWxlbWVudC5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J10gPSB7fVxyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnSGl0TnVtYmVyJ10gPSBcIlwiOyAvLyB0b2RvO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnSGl0UXVhbnRpdHknXSA9IFwiXCI7IC8vIHRvZG87XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXRTYXZpbmcnXSA9IFwiXCI7Ly8gdG9kbztcclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC50cmlnZ2VyLmZvckVhY2goKHN1YkVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9kdWN0ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBzdWJFbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ11bJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ11bJ1Byb2R1Y3RJRCddID0gcHJvZHVjdC5TS1U7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddWydVbml0VmFsdWUnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQucHJvbW90aW9uTGluZVByaWNlIC8gcHJvZHVjdC5xdWFudGl0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddWydMaW5lTnVtYmVyJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhzdWJFbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXVsnUXVhbnRpdHknXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHN1YkVsZW1lbnQucXVhbnRpdHkudG9GaXhlZCgxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddWydUYXhDb2RlJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50Lml0ZW1MaW5lSWQpLlZBVENvZGU7IC8vIHRvZG9cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnUHJvbW90aW9uSXRlbSddLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRlbmRlckluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnQ2FzaFRlbmRlciddID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5wYXltZW50RGV0YWlscyAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSAnR0lGVCBDQVJEJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFhNTFNjaGVtYVZlcnNpb246IHRoaXMueG1sU2NoZW1hVmVyc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgTGluZU51bWJlcjogdGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgTmV0VmFsdWU6IHRoaXMuY29udmVydFRvU3RyaW5nKC0xICogdGhpcy5yZW1vdmVEZWNpbWFsKChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlTmV0VmFsdWU6IHRoaXMuY29udmVydFRvU3RyaW5nKC0xICogdGhpcy5yZW1vdmVEZWNpbWFsKChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24oZWxlbWVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUlEOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyVHlwZTogZWxlbWVudC5leHRlcm5hbFRlbmRlclR5cGUgPyBlbGVtZW50LmV4dGVybmFsVGVuZGVyVHlwZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiBlbGVtZW50LmV4dGVybmFsU3ViVGVuZGVyVHlwZSA/IGVsZW1lbnQuZXh0ZXJuYWxTdWJUZW5kZXJUeXBlIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlckFtb3VudDogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW5jeUlEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW5jeURlc2NyaXB0aW9uOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBHaWZ0Vm91Y2hlclNhbGVzQWxsb3dlZDogJycsLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93UmVjaGFyZ2VhYmxlVm91Y2hlclNhbGVzOiAnJywvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgR2lmdFZvdWNoZXJJRDogJydcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQ2FzaFRlbmRlciddLnB1c2gob2JqKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iajEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFhNTFNjaGVtYVZlcnNpb246IFwiMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5lTnVtYmVyOiB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBOZXRWYWx1ZTogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlTmV0VmFsdWU6IEpTT04uc3RyaW5naWZ5KC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiB0aGlzLmdldERlc2NyaXB0aW9uKGVsZW1lbnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lQ3JlYXRlZDogdGhpcy51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlclR5cGU6IGVsZW1lbnQuZXh0ZXJuYWxUZW5kZXJUeXBlID8gZWxlbWVudC5leHRlcm5hbFRlbmRlclR5cGUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyU3ViVHlwZTogZWxlbWVudC5leHRlcm5hbFN1YlRlbmRlclR5cGUgPyBlbGVtZW50LmV4dGVybmFsU3ViVGVuZGVyVHlwZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IEpTT04uc3RyaW5naWZ5KC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVJblRyYW5zYWN0aW9uVG90YWxDaGVjazogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93UmVjaGFyZ2VhYmxlVm91Y2hlclNhbGVzOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkRyYXdlckF0RW5kOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmoxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGluZU51bWJlckZvclByb2R1Y3RzKCkge1xyXG4gICAgICAgIGxldCBpdGVtTGluZUlkQXJyYXkgPSBbXTtcclxuICAgICAgICBpdGVtTGluZUlkQXJyYXkgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLm1hcCgocHJvZHVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChwcm9kdWN0Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyID0gaXRlbUxpbmVJZEFycmF5LnJlZHVjZSgoYTogYW55LCBiOiBhbnkpID0+IE1hdGgubWF4KGEsIGIpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUxpbmVOdW1iZXIoKSB7XHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyICs9IDE7XHJcbiAgICAgICAgdGhpcy5pdGVtQ291bnQgKz0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXJnZXN0TnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpbGl6ZUl0ZW1Db3VudCgpIHtcclxuICAgICAgICB0aGlzLml0ZW1Db3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJqT2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlc2NyaXB0aW9uKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmIChlbGVtZW50LnBheW1lbnRUeXBlLnRvVXBwZXJDYXNlKCkgPT09ICdDQVJEJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5jYXJkVHlwZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQucGF5bWVudFR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldERldmljZUluZm8oaWQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZGV2aWNlSWQgPSBpZFxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICogMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYW5zYWN0aW9uTnVtYmVyKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYW5pZmVzdFZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFuaWZlc3RWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhYmFzZVNjaGVtYVZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZGF0YWJhc2VTY2hlbWFWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRUeXBlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldFR5cGUgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYWRpbmdSZWdpb25JRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50cmFkaW5nUmVnaW9uSWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29tcGFueUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNvbXBhbnlJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUYXhNZXRob2RJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50YXhNZXRob2RJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYWpvclZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFqb3JWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1pbm9yVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5taW5vclZlcnNpb24gPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0WE1MU2NoZW1hVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy54bWxTY2hlbWFWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldEV4dGVybmFsU3RhdGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxTdGF0ZSA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRDYXNoaWVySUQoKSB7XHJcbiAgICAgICAgdGhpcy5jYXNoaWVySWQgPSAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSkgPyAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lIDogJyc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUZXJtaW5hbE51bWJlcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50ZXJtaW5hbE51bWJlciA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJhc2tldExhbmd1YWdlSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0TGFuZ3VhZ2VJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc2V0QmFza2V0Q291bnRyeUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldENvdW50cnlJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJhc2tldEN1cnJlbmN5SUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0Q3VycmVuY3lJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJyYW5jaElEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJyYW5jaElkID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVJZChkYXRlOiBhbnkpIHtcclxuICAgICAgICBsZXQgbmV3RGF0ZVRpbWUgPSBkYXRlLnJlcGxhY2UoL1teMC05XS9nLCAnJylcclxuICAgICAgICBsZXQgaWQgPSAodGhpcy5kZXZpY2VJZCArICd8JyArIG5ld0RhdGVUaW1lICsgJ3wnICsgdGhpcy50cmFuc2FjdGlvbk51bWJlcikudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICB9IFxyXG5cclxuICAgIGdlbmVyYXRlVGltZXpvbmVvZmZzZXQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IHggPSBkYXRlID8gZGF0ZSA6ICcnO1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh4KS5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlS2V5d29yZCgpIHtcclxuICAgICAgICBsZXQgeCA9ICh0aGlzLmNvbXBhbnlJZCArICd8JyArIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkICsgJ3wnICsgdGhpcy50ZXJtaW5hbE51bWJlciArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vcGVyYXRpb25TdGF0dXMgPT09ICdQQVlfU1VDQ0VTUycpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDb21wbGV0ZWQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDYW5jZWxsZWQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5Qcm9kdWN0KGVsZW1lbnQ6IGFueSwgbGluZURpc2NvdW50OiBMaW5lRGlzY291bnQgLCB0cmFuc2FjdGlvbkRpc2NvdW50OiBUcmFuc2FjdGlvbkRpc2NvdW50KSB7XHJcbiAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgbGV0IHRheFRvdGFsID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFsndGF4QnJlYWtkb3duJ11bJ3RheExpbmVzJ10uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudFsnaXRlbUxpbmVJZCddKTtcclxuICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICBvYmpbJ0xpbmVOdW1iZXInXSA9IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXTtcclxuICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncmVmdW5kZWRUb3RhbCddKTtcclxuICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncmVmdW5kZWRUb3RhbCddKTtcclxuICAgICAgICBvYmpbJ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydkZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnRGV2aWNlSUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudFsndGVybWluYWxJZCddO1xyXG4gICAgICAgIG9ialsnVXNlcklEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgb2JqWydEYXRlVGltZUNyZWF0ZWQnXSA9IHRoaXMuY3JlYXRlZEF0O1xyXG4gICAgICAgIG9ialsnRXh0ZW5kZWRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnRbJ3RvdGFsTGluZVByaWNlJ10qLTEpO1xyXG4gICAgICAgIG9ialsnVW5pdFByaWNlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncHJpY2UnXSk7XHJcbiAgICAgICAgb2JqWydRdWFudGl0eSddID0gdGhpcy5nZXRRdWFudGl0eShlbGVtZW50KTtcclxuICAgICAgICBvYmpbJ09yaWdpbmFsVGF4QW1vdW50U2V0J10gPSAxO1xyXG4gICAgICAgIG9ialsnUHJvZHVjdElEJ10gPSBlbGVtZW50WydTS1UnXTtcclxuICAgICAgICBvYmpbJ0hhbmRLZXllZCddID0gMTtcclxuICAgICAgICBvYmpbJ0xvbmdEZXNjcmlwdGlvbiddID0gZWxlbWVudFsnZGVzY3JpcHRpb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddID0ge307XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXVsnUmV0dXJuUmVhc29uSUQnXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUmVhc29uJ107XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXVsnUmV0dXJuRGVzY3JpcHRpb24nXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUmVhc29uRGVzY3JpcHRpb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5Ub1N0b2NrJ10gPSB0aGlzLmdldFF1YW50aXR5KGVsZW1lbnQpO1xyXG4gICAgICAgIG9ialsnVGF4Q29kZSddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFsndGF4QnJlYWtkb3duJ11bJ3RheExpbmVzJ10uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudFsnaXRlbUxpbmVJZCddKS5WQVRDb2RlO1xyXG5cclxuICAgICAgICBvYmpbJ0Rpc3BsYXlUYXhDb2RlJ10gPSAnJzsgLy8gdG9kb1xyXG4gICAgICAgIG9ialsnUHJvZHVjdEF0dHJpYnV0ZXMnXSA9ICcnOyAvL3RvZG8gLSBub3QgcmVxdWlyZWRcclxuICAgICAgICBvYmpbJ1BlcmlzaGFibGUnXSA9IHRoaXMuZ2V0QXR0cmlidXRlcygpO1xyXG4gICAgICAgIG9ialsnTU1Hcm91cElEJ10gPSB0aGlzLmdldEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICBvYmpbJ0N1c3RvbWVyRGV0YWlscyddID0gXCJcIjsgLy8gdG9kbyAtIGJsYW5rXHJcbiAgICAgICAgb2JqWydUb3RhbFByb21vdGlvblNhdmluZyddID0gZWxlbWVudFsncHJvbW90aW9uQW1vdW50J10gfHwgLTE7IC8vIFRPRE9cclxuICAgICAgICBvYmpbJ09yaWdpbmFsVGF4QW1vdW50J10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmdldE9yaWdpbmFsVGF4KGVsZW1lbnQsdGF4VG90YWwuVkFUKSAqIC0xKVxyXG4gICAgICAgIG9ialsndGF4QW1vdW50J10gPSB0YXhUb3RhbC50YXhMaW5lVG90YWwgPCAwID8odGF4VG90YWwudGF4TGluZVRvdGFsKSA6ICgtdGF4VG90YWwudGF4TGluZVRvdGFsKTtcclxuXHJcbiAgICAgICAgaWYgKGxpbmVEaXNjb3VudCkge1xyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgJiYgbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGxpbmUgZGlzY291bnRcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50VHlwZSA9IGxpbmVEaXNjb3VudC5kaXNjb3VudFR5cGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQgKyAobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50ZWRWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFBlcmNlbnRhZ2UgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uUm91bmRpbmdSdWxlID0gMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZSAmJiBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vcHJpY2Ugb3ZlcnJpZGVcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTmV3UHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDAgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgcHJvZHVjdCBwcmljZVxyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRXh0ZW5kZWRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5Vbml0UHJpY2UgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodHJhbnNhY3Rpb25EaXNjb3VudCkge1xyXG4gICAgICAgICAgICBvYmpbJ0Jhc2tldERpc2NvdW50TW9kaWZpZXInXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQuZm9yRWFjaCgoZTogYW55KSA9PiB7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGxldCBvYmoxOiBhbnkgPXt9XHJcbiAgICAgICAgICAgICAgICAgZS5pdGVtTGluZUlkcy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBlbGVtZW50Lml0ZW1MaW5lSWQpIHsgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzY291bnRBbW91bnQgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlLmRpc2NvdW50QW1vdW50ICogLTEpOyAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iajEuQmFza2V0RGlzY291bnRMaW5lTnVtYmVyID0gdGhpcy5nZXRMaW5lTnVtYmVyKGUsZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoxLlhNTFNjaGVtYVZlcnNpb24gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iajEuRGlzY291bnRlZFZhbHVlID0gdGhpcy5nZXREaXNjb3VudGVkVmFsdWUoZWxlbWVudC50b3RhbExpbmVQcmljZSwgZS5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialsnQmFza2V0RGlzY291bnRNb2RpZmllciddLnB1c2gob2JqMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIHRvdGFsdHJhbnNhY3Rpb25EaXNjb3VudCA9IDA7XHJcbiAgICAgICAgICAgIG9ialsnQmFza2V0RGlzY291bnRNb2RpZmllciddLmZvckVhY2goKHZhbHVlOmFueSk9PntcclxuICAgICAgICAgICAgICAgIHRvdGFsdHJhbnNhY3Rpb25EaXNjb3VudCA9IHRvdGFsdHJhbnNhY3Rpb25EaXNjb3VudCArIHZhbHVlLkRpc2NvdW50ZWRWYWx1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBwcm9kdWN0IHByaWNlXHJcbiAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9IG9iai5FZmZlY3RpdmVOZXRWYWx1ZSArICB0b3RhbHRyYW5zYWN0aW9uRGlzY291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUHJvZHVjdChlbGVtZW50OiBUUHJvZHVjdCwgbGluZURpc2NvdW50OiBMaW5lRGlzY291bnQsIHRyYW5zYWN0aW9uRGlzY291bnQ6IFRyYW5zYWN0aW9uRGlzY291bnQpIHtcclxuICAgICAgICBsZXQgdGF4VG90YWwgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pO1xyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogdGhpcy54bWxTY2hlbWFWZXJzaW9uLFxyXG4gICAgICAgICAgICBMaW5lTnVtYmVyOiBlbGVtZW50Lml0ZW1MaW5lSWQsXHJcbiAgICAgICAgICAgIE5ldFZhbHVlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC50b3RhbExpbmVQcmljZSksXHJcbiAgICAgICAgICAgIEVmZmVjdGl2ZU5ldFZhbHVlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC50b3RhbExpbmVQcmljZSksXHJcbiAgICAgICAgICAgIERlc2NyaXB0aW9uOiBlbGVtZW50LmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgVXNlcklEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUsXHJcbiAgICAgICAgICAgIERhdGVUaW1lQ3JlYXRlZDogdGhpcy5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIEV4dGVuZGVkVmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnByaWNlKSxcclxuICAgICAgICAgICAgVW5pdFByaWNlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC5wcmljZSksXHJcbiAgICAgICAgICAgIE1NR3JvdXBJRDogdGhpcy5nZXRBdHRyaWJ1dGVzKCksIC8vdG9kb1xyXG4gICAgICAgICAgICBRdWFudGl0eTogZWxlbWVudC5xdWFudGl0eS50b0ZpeGVkKDEpLFxyXG4gICAgICAgICAgICBTYWxlc3BlcnNvbklEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlcklkLFxyXG4gICAgICAgICAgICBTYWxlc3BlcnNvbk5hbWU6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgVGF4Q29kZTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFsndGF4QnJlYWtkb3duJ11bJ3RheExpbmVzJ10uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudFsnaXRlbUxpbmVJZCddKS5WQVRDb2RlLFxyXG4gICAgICAgICAgICBUYXhNb2RpZmlhYmxlOiAxLCAvL3RvZG9cclxuICAgICAgICAgICAgT3JpZ2luYWxUYXhBbW91bnQgOiAgdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5nZXRPcmlnaW5hbFRheChlbGVtZW50LHRheFRvdGFsLlZBVCkpLFxyXG4gICAgICAgICAgICBUYXhBbW91bnQgOiAgdGhpcy5jb252ZXJ0VG9TdHJpbmcodGF4VG90YWwudGF4TGluZVRvdGFsKSxcclxuICAgICAgICAgICAgT3JpZ2luYWxUYXhBbW91bnRTZXQ6IDEsLy90b2RvXHJcbiAgICAgICAgICAgIFByb2R1Y3RJRDogZWxlbWVudC5TS1UsXHJcbiAgICAgICAgICAgIEhhbmRLZXllZDogMSwvL3RvZG9cclxuICAgICAgICAgICAgQ3VzdG9tZXJEZXRhaWxzOiBcIlwiLFxyXG4gICAgICAgICAgICBQZXJpc2hhYmxlOiB0aGlzLmdldEF0dHJpYnV0ZXMoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGluZURpc2NvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZSAmJiBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbGluZSBkaXNjb3VudFxyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRUeXBlID0gbGluZURpc2NvdW50LmRpc2NvdW50VHlwZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCArIChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRlZFZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50UGVyY2VudGFnZSA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Sb3VuZGluZ1J1bGUgPSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlICYmIGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgLy9wcmljZSBvdmVycmlkZVxyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25EZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uWE1MU2NoZW1hVmVyc2lvbiA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk5ld1ByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy91cGRhdGUgdGhlIHByb2R1Y3QgcHJpY2VcclxuICAgICAgICAgICAgb2JqWydOZXRWYWx1ZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ0V4dGVuZGVkVmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ1VuaXRQcmljZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0cmFuc2FjdGlvbkRpc2NvdW50KSB7XHJcbiAgICAgICAgICAgIG9ialsnQmFza2V0RGlzY291bnRNb2RpZmllciddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudC5mb3JFYWNoKChlOiBhbnkpID0+IHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB2YXIgb2JqMTogYW55ID17fVxyXG4gICAgICAgICAgICAgICAgIGUuaXRlbUxpbmVJZHMuZm9yRWFjaCgoeDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gZWxlbWVudC5pdGVtTGluZUlkKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzY291bnRBbW91bnQgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlLmRpc2NvdW50QW1vdW50ICogLTEpOyAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iajEuWE1MU2NoZW1hVmVyc2lvbiA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqMS5EaXNjb3VudGVkVmFsdWUgPSAtKHRoaXMuZ2V0RGlzY291bnRlZFZhbHVlKGVsZW1lbnQudG90YWxMaW5lUHJpY2UsIGUuZGlzY291bnRBbW91bnQpLnRvRml4ZWQoMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoxLkJhc2tldERpc2NvdW50TGluZU51bWJlciA9IHRoaXMuZ2V0TGluZU51bWJlcihlLGRpc2NvdW50QW1vdW50KSA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialsnQmFza2V0RGlzY291bnRNb2RpZmllciddLnB1c2gob2JqMSk7IFxyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgdG90YWx0cmFuc2FjdGlvbkRpc2NvdW50ID0gMDtcclxuICAgICAgICAgICAgb2JqWydCYXNrZXREaXNjb3VudE1vZGlmaWVyJ10uZm9yRWFjaCgodmFsdWU6YW55KT0+e1xyXG4gICAgICAgICAgICAgICAgdG90YWx0cmFuc2FjdGlvbkRpc2NvdW50ID0gdG90YWx0cmFuc2FjdGlvbkRpc2NvdW50ICsgdmFsdWUuRGlzY291bnRlZFZhbHVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy91cGRhdGUgdGhlIHByb2R1Y3QgcHJpY2VcclxuICAgICAgICAgICAgb2JqWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gb2JqLkVmZmVjdGl2ZU5ldFZhbHVlICsgIHRvdGFsdHJhbnNhY3Rpb25EaXNjb3VudDsgICAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExpbmVOdW1iZXIodmFsdWU6IGFueSxkaXNjb3VudEFtb3VudDpzdHJpbmcgKXtcclxuICAgICAgICBsZXQgbGluZU51bWJlcjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11baV07XHJcbiAgICAgICAgICAgIGlmKCB2YWx1ZS5yZWFzb25Db2RlID09PSBlbGVtZW50LlJlYXNvbkNvZGVJRCAmJiBkaXNjb3VudEFtb3VudCA9PT0gZWxlbWVudC5OZXRWYWx1ZSl7XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZWxlbWVudC5MaW5lTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXI7ICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0RGlzY291bnRlZFZhbHVlKHByaWNlOmFueSAsZGlzY291bnRBbW91bnQ6YW55ICkge1xyXG4gICAgICAgIGxldCBEaXNjb3VudGVkVmFsdWUgPSAocHJpY2UgKiBkaXNjb3VudEFtb3VudCkvdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuc2FsZVRvdGFsIDtcclxuICAgICAgICByZXR1cm4gRGlzY291bnRlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9yaWdpbmFsVGF4KGVsZW1lbnQ6IFRQcm9kdWN0LCBWQVQpIHtcclxuICAgICAgICBsZXQgcHJpY2ViZWZvcmV0YXggPSAoZWxlbWVudC5wcmljZSAqIDEwMCkvKDEwMCArIFZBVCApXHJcbiAgICAgICAgbGV0IG9yaWdpbmFsdGF4PSBlbGVtZW50LnByaWNlIC0gcHJpY2ViZWZvcmV0YXhcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWx0YXg7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvU3RyaW5nKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSwgJ2NhbiBub3QgYmUgY29udmVydGVkIGluIHN0cmluZycsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUR5bmFtaWNTdG9ja0xvb2tVcCgpIHtcclxuICAgICAgICBsZXQgeCA9ICcwJztcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kZWxpdmVyeU1ldGhvZCA9PT0gJzEnIHx8IGVsZW1lbnQuZGVsaXZlcnlNZXRob2QgPT09ICcyJykge1xyXG4gICAgICAgICAgICAgICAgeCA9ICcxJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF0dHJpYnV0ZXMoKXtcclxuICAgICAgICBsZXQgbmFtZTogc3RyaW5nIHwgYW55W10gPSBbXVxyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICggZWxlbWVudC5hdHRyaWJ1dGVzICYmIGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gZWxlbWVudC5hdHRyaWJ1dGVzLmZpbHRlcigoeDogYW55KSA9PiB4Lm5hbWUudG9VcHBlckNhc2UoKSA9PT0gZWxlbWVudC5uYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmFtZVswXS52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRlKGRhdGU6c3RyaW5nKXtcclxuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5nZW5lcmF0ZVRpbWV6b25lb2Zmc2V0KGRhdGUpICogLTE7XHJcbiAgICAgICAgbGV0IG9mZnNldEhvdXJzID0gTWF0aC5hYnMoTWF0aC5mbG9vcihvZmZzZXQgLyA2MCkpOyAgICAgICAgXHJcblx0ICAgIGxldCBvZmZzZXRNaW51dGVzID0gTWF0aC5hYnMob2Zmc2V0KSAtIG9mZnNldEhvdXJzICogNjA7XHJcblxyXG4gICAgICAgIGxldCBvZmZzZXRTaWduID0gJysnO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgICAgIG9mZnNldFNpZ24gPSAnLSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmV3ZGF0ZSA9IGRhdGUuc3Vic3RyaW5nKDAsMTkpO1xyXG4gICAgICAgIGNvbnN0IHggPSAobmV3ZGF0ZSsgb2Zmc2V0U2lnbiArU3RyaW5nKG9mZnNldEhvdXJzKS5wYWRTdGFydCgyLCAnMCcpKyc6JytTdHJpbmcob2Zmc2V0TWludXRlcykucGFkU3RhcnQoMiwgJzAnKSkudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4geDsgICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXRUcmFuc2FjdGlvblByb21vdGlvbih0cmFuc2FjdGlvblByb21vdGlvbil7XHJcbiAgICAgICAgaWYodHJhbnNhY3Rpb25Qcm9tb3Rpb24gJiYgdHJhbnNhY3Rpb25Qcm9tb3Rpb24ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10gPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnWE1MU2NoZW1hVmVyc2lvbiddID0gMTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnTGluZU51bWJlciddID0gdGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnTmV0VmFsdWUnXSA9ICB0aGlzLnJlbW92ZURlY2ltYWwodHJhbnNhY3Rpb25Qcm9tb3Rpb25bMF0ucHJvbW90aW9uTGluZVByaWNlKSAqIC0xO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKHRyYW5zYWN0aW9uUHJvbW90aW9uWzBdLnByb21vdGlvbkxpbmVQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRGVzY3JpcHRpb24nXSA9IHRyYW5zYWN0aW9uUHJvbW90aW9uWzBdLnByb21vdGlvbkluZm87XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ0RldmljZUlEJ10gPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddWydVc2VySUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRGF0ZVRpbWVDcmVhdGVkJ10gPSB0aGlzLmNyZWF0ZWRBdDtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnTW9kaWZpZWRMaW5lTnVtYmVyJ10gPSB0cmFuc2FjdGlvblByb21vdGlvblswXS5pdGVtTGluZUlkcztcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnUmVhc29uQ29kZUlEJ10gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddWydEaXNjb3VudFR5cGUnXSA9IHRyYW5zYWN0aW9uUHJvbW90aW9uWzBdLnByb21vdGlvblR5cGUgPT0gJ1RSQU5TQUNUSU9OX09GRicgPyAxIDogMDtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRGlzY291bnRQZXJjZW50YWdlJ10gPSAwOyAvL3RvZG9cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRGlzY291bnRlZFZhbHVlJ10gPSAwOyAvL3RvZG9cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnUm91bmRpbmdSdWxlJ10gPSAyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0UXVhbnRpdHkoZWxlbWVudDogYW55KSB7XHJcbiAgICAgICAgbGV0IHF1YW50aXR5XHJcbiAgICAgICAgaWYodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVucmVmZXJlbmNlZFJlZnVuZCl7XHJcbiAgICAgICAgICAgIHF1YW50aXR5ID0gZWxlbWVudFsncXVhbnRpdHknXSA8IDAgPyBlbGVtZW50WydxdWFudGl0eSddLnRvRml4ZWQoMSkgOiAoLWVsZW1lbnRbJ3F1YW50aXR5J10pLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHF1YW50aXR5ID0gZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddIDwgMCA/IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpIDogKC1lbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10pLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBxdWFudGl0eTtcclxuICAgIH1cclxufVxyXG4iXX0=