@magic-xpa/gui 4.801.0-dev481.232 → 4.801.0-dev481.236

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/bundles/magic-xpa-gui.umd.js +81 -81
  2. package/bundles/magic-xpa-gui.umd.js.map +1 -1
  3. package/bundles/magic-xpa-gui.umd.min.js +1 -1
  4. package/bundles/magic-xpa-gui.umd.min.js.map +1 -1
  5. package/esm2015/src/Commands.js +2 -2
  6. package/esm2015/src/Events.js +3 -3
  7. package/esm2015/src/EventsProcessor.js +4 -5
  8. package/esm2015/src/IFlowMonitorQueue.js +1 -1
  9. package/esm2015/src/Manager.js +6 -6
  10. package/esm2015/src/gui/low/GuiInteractive.js +4 -4
  11. package/esm2015/src/management/data/DcValues.js +2 -2
  12. package/esm2015/src/management/data/DcValuesBuilderBase.js +3 -3
  13. package/esm2015/src/management/data/GuiDataViewBase.js +3 -3
  14. package/esm2015/src/management/data/ObjectReferenceBase.js +3 -3
  15. package/esm2015/src/management/data/RecordUtils.js +1 -1
  16. package/esm2015/src/management/events/IGuiEventsManager.js +1 -1
  17. package/esm2015/src/management/exp/GuiExpressionEvaluator.js +3 -3
  18. package/esm2015/src/management/gui/DisplayConvertor.js +12 -12
  19. package/esm2015/src/management/gui/FieldValidator.js +6 -6
  20. package/esm2015/src/management/gui/MgControlBase.js +18 -18
  21. package/esm2015/src/management/gui/MgFormBase.js +6 -6
  22. package/esm2015/src/management/gui/PropDefaults.js +5 -5
  23. package/esm2015/src/management/gui/PropTable.js +6 -6
  24. package/esm2015/src/management/gui/Property.js +7 -7
  25. package/esm2015/src/management/tasks/GuiTaskBase.js +6 -6
  26. package/esm2015/src/management/tasks/MgTimer.js +2 -2
  27. package/esm2015/src/util/ProcessLauncher.js +2 -2
  28. package/esm2015/src/util/UsernamePasswordCredentials.js +3 -3
  29. package/fesm2015/magic-xpa-gui.js +81 -81
  30. package/fesm2015/magic-xpa-gui.js.map +1 -1
  31. package/package.json +2 -2
  32. package/src/Events.d.ts +2 -2
  33. package/src/EventsProcessor.d.ts +1 -1
  34. package/src/IFlowMonitorQueue.d.ts +1 -1
  35. package/src/Manager.d.ts +2 -3
  36. package/src/management/data/DcValues.d.ts +1 -1
  37. package/src/management/data/DcValuesBuilderBase.d.ts +1 -1
  38. package/src/management/events/IGuiEventsManager.d.ts +5 -5
  39. package/src/management/exp/GuiExpressionEvaluator.d.ts +2 -2
  40. package/src/management/gui/DisplayConvertor.d.ts +6 -6
  41. package/src/management/gui/MgControlBase.d.ts +2 -2
  42. package/src/management/gui/MgFormBase.d.ts +1 -1
  43. package/src/management/gui/PropTable.d.ts +1 -1
  44. package/src/management/gui/Property.d.ts +2 -2
  45. package/src/management/tasks/GuiTaskBase.d.ts +3 -3
  46. package/src/util/ProcessLauncher.d.ts +1 -3
@@ -378,14 +378,14 @@ export class FieldValidator {
378
378
  if (this._valDet.getIsNegative() && (this._newvalue.trim().startsWith("-") || (this._valDet.getNegativeSignPref().length !== 0 && this._newvalue.trim().startsWith(this._valDet.getNegativeSignPref())))) {
379
379
  evaluated = "-" + evaluated;
380
380
  }
381
- evaluated = DisplayConvertor.Instance.disp2mg(this._newvalue, "", this._valDet.getPIC(), this._valDet.getControl().getForm().getTask().getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);
381
+ evaluated = DisplayConvertor.Instance.disp2mg(this._newvalue, this._valDet.getPIC(), this._valDet.getControl().getForm().getTask().getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);
382
382
  evaluated = DisplayConvertor.Instance.mg2disp(evaluated, "", this._valDet.getPIC(), true, this._valDet.getControl().getForm().getTask().getCompIdx(), true);
383
383
  let tempDispVal = StrUtil.ltrim(evaluated);
384
384
  if (tempDispVal.length === 0 && this._valDet.getPIC().zeroFill() && this._valDet.getPIC().getZeroPad() === ' ')
385
385
  evaluated = "0";
386
386
  }
387
387
  else {
388
- evaluated = DisplayConvertor.Instance.disp2mg(this._newvalue, "", this._valDet.getPIC(), this._valDet.getControl().getForm().getTask().getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);
388
+ evaluated = DisplayConvertor.Instance.disp2mg(this._newvalue, this._valDet.getPIC(), this._valDet.getControl().getForm().getTask().getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);
389
389
  evaluated = DisplayConvertor.Instance.mg2disp(evaluated, "", this._valDet.getPIC(), true, this._valDet.getControl().getForm().getTask().getCompIdx(), true);
390
390
  }
391
391
  if (this._valDet.getContinuousRangeValues() != null || this._valDet.getDiscreteRangeValues() != null) {
@@ -917,7 +917,7 @@ export class FieldValidator {
917
917
  let i;
918
918
  let downDate;
919
919
  let topDate;
920
- let currDate = DisplayConvertor.Instance.fromNativeDateToMgDateNumber(buffer, pic, this._valDet.getControl().getForm().getTask().getCompIdx());
920
+ let currDate = DisplayConvertor.Instance.fromNativeDateToMgDateNumber(buffer, pic);
921
921
  this.setValidationFailed(false);
922
922
  if (ContinuousRange != null) {
923
923
  for (i = 0; i < ContinuousRange.length - 1; i++) {
@@ -1356,7 +1356,7 @@ export class FieldValidator {
1356
1356
  }
1357
1357
  fillTimeByRange(ContinuousRange, DiscreteRange, buffer) {
1358
1358
  let pic = this._valDet.getPIC();
1359
- let currTime = DisplayConvertor.Instance.fromNativeTimeToMgTimeNumber(buffer, pic);
1359
+ let currTime = DisplayConvertor.Instance.fromNativeTimeToMgTimeNumber(buffer);
1360
1360
  let downTime, topTime;
1361
1361
  let i;
1362
1362
  this.setValidationFailed(false);
@@ -1396,7 +1396,7 @@ export class FieldValidator {
1396
1396
  ctrlType = this._valDet.getControl().Type;
1397
1397
  if (ctrlType !== MgControlType.CTRL_TYPE_BUTTON && ctrlType !== MgControlType.CTRL_TYPE_RADIO && !this._valDet.getControl().isSelectionCtrl()) {
1398
1398
  let msgString = message.ToString();
1399
- this._valDet.getControl().getForm().getTask().WriteToMessagePane(StrUtil.makePrintable2(msgString), true);
1399
+ this._valDet.getControl().getForm().getTask().WriteToMessagePane(StrUtil.makePrintable2(msgString));
1400
1400
  this._valDet.getControl().getForm().ErrorOccured = !NString.IsNullOrEmpty(msgString);
1401
1401
  this._valDet.ErrorMessage = message.ToString();
1402
1402
  }
@@ -1504,4 +1504,4 @@ export class FieldValidator {
1504
1504
  return isNullDisplayVal;
1505
1505
  }
1506
1506
  }
1507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGRWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZ3VpL0ZpZWxkVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUVULEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLGdCQUFnQixFQUNoQixhQUFhLEVBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUs5QixPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkUsT0FBTyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1YsYUFBYSxFQUNiLFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxXQUFXLEVBQ1gsZUFBZSxFQUNoQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRzlDLE1BQU0sT0FBTyxjQUFjO0lBWXpCO1FBWFEsY0FBUyxHQUFRLElBQUksQ0FBQztRQUN0QixjQUFTLEdBQVEsSUFBSSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBQzVCLG1CQUFj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QWU7UUFDL0MsSUFBSSxLQUFLLEdBQVcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxNQUFNLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxRQUFRLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPO2VBQ3ZJLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsT0FBTyxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsUUFBUSxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSztlQUNsSSxLQUFLLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLFVBQVUsSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU07ZUFDdkssS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1SSxDQUFDO0lBR08sZ0NBQWdDLENBQUMsT0FBZTtRQUN0RCxJQUFJLEtBQUssR0FBVyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLFFBQVEsSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU07ZUFDdEksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxRQUFRLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxVQUFVO2VBQ3RJLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsT0FBTyxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsT0FBTztlQUNsSSxLQUFLLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFHLENBQUM7SUFHTyw0QkFBNEIsQ0FBQyxPQUFlO1FBQ2xELElBQUksS0FBSyxHQUFXLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEMsQ0FBQztJQUdPLDBCQUEwQixDQUFDLE9BQWU7UUFDaEQsSUFBSSxLQUFLLEdBQVcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4QyxDQUFDO0lBS08seUJBQXlCLENBQUMsT0FBZTtRQUMvQyxJQUFJLEtBQUssR0FBVyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTlLLENBQUM7SUFNTyw2QkFBNkIsQ0FBQyxHQUFXO1FBQy9DLElBQUksR0FBVyxDQUFDO1FBRWhCLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUMzQztZQUNFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixJQUFJLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDO21CQUNoSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQztnQkFDOUUsU0FBUztZQUNYLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUlPLG1CQUFtQixDQUFDLEdBQVk7UUFDdEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQjtZQUMvQixPQUFPOztZQUVQLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQU1PLHFCQUFxQixDQUFDLFdBQW1CLEVBQUUsV0FBbUIsRUFBRSxTQUFpQjtRQUN2RixJQUFJLE9BQU8sR0FBVyxDQUFDLENBQUM7UUFDeEIsSUFBSSxZQUFZLEdBQVcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFdkUsSUFBSSxZQUFZLEdBQUcsQ0FBQztZQUNsQixZQUFZLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUVwQyxLQUFLLElBQUksQ0FBQyxHQUFXLFdBQVcsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRTtZQUN2RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixPQUFPLEVBQUUsQ0FBQztRQUVaLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFJTyxnQkFBZ0I7UUFDdEIsSUFBSSxnQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsSUFBSSxLQUFLLEdBQWlCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFL0QsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxFQUNwRDtZQUNFLElBQUksWUFBWSxHQUFRLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMvQyxJQUFJLFlBQVksS0FBSyxJQUFJO2dCQUN2QixnQkFBZ0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7O2dCQUVoRSxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUM7U0FDaEQ7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGF0ZVRpbWUsXHJcbiAgRXhjZXB0aW9uLFxyXG4gIExpc3QsXHJcbiAgTkNoYXIsXHJcbiAgTk51bWJlcixcclxuICBOU3RyaW5nLFxyXG4gIE51bWJlckZvcm1hdEluZm8sXHJcbiAgU3RyaW5nQnVpbGRlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkRldGFpbHMgfSBmcm9tICcuL1ZhbGlkYXRpb25EZXRhaWxzJztcclxuaW1wb3J0IHsgSUVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52L0lFbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IE1nQ29udHJvbEJhc2UgfSBmcm9tICcuL01nQ29udHJvbEJhc2UnO1xyXG5pbXBvcnQgeyBHdWlGaWVsZEJhc2UgfSBmcm9tICcuLi9kYXRhL0d1aUZpZWxkQmFzZSc7XHJcbmltcG9ydCB7IERhdGVCcmVha1BhcmFtcywgRGlzcGxheUNvbnZlcnRvciB9IGZyb20gJy4vRGlzcGxheUNvbnZlcnRvcic7XHJcbmltcG9ydCB7XHJcbiAgRGF0ZVV0aWwsXHJcbiAgSFRNTF8yX1NUUixcclxuICBNZ0NvbnRyb2xUeXBlLFxyXG4gIE1zZ0ludGVyZmFjZSxcclxuICBQSUNJbnRlcmZhY2UsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxEYXRlSnBuLFxyXG4gIFV0aWxTdHJCeXRlTW9kZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBFdmVudHMgfSBmcm9tICcuLi8uLi9FdmVudHMnO1xyXG5pbXBvcnQgeyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbiB9IGZyb20gJy4vV3JvbmdGb3JtYXRFeGNlcHRpb24nO1xyXG5pbXBvcnQgeyBQSUMgfSBmcm9tICcuL1BJQyc7XHJcbmltcG9ydCB7IERhdGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vR3VpRW51bXMnO1xyXG5pbXBvcnQgeyBOVU1fVFlQRSB9IGZyb20gJy4uL2RhdGEvTlVNX1RZUEUnO1xyXG5pbXBvcnQgeyBIZWJyZXdEYXRlIH0gZnJvbSAnLi9IZWJyZXdEYXRlJztcclxuaW1wb3J0IHsgQmxvYlR5cGUgfSBmcm9tICcuLi9kYXRhL0Jsb2JUeXBlJztcclxuaW1wb3J0IHsgR3VpRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9HdWlFbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7UHJvcEludGVyZmFjZX0gZnJvbSBcIi4vUHJvcEludGVyZmFjZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWVsZFZhbGlkYXRvciB7XHJcbiAgcHJpdmF0ZSBfbmV3dmFsdWU6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfb2xkdmFsdWU6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcGljdHVyZVJlYWw6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcGljdHVyZUVuYWJsZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF92YWxEZXQ6IFZhbGlkYXRpb25EZXRhaWxzID0gbnVsbDtcclxuICBwcml2YXRlIF9pc1BtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcGljdHVyZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIGhlYnJldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2RlY2ltYWw6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IElFbnZpcm9ubWVudCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudDtcclxuICAgIHRoaXMuX2RlY2ltYWwgPSAodGhpcy5fZW52aXJvbm1lbnQuR2V0RGVjaW1hbCgpIHx8IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiB0aGUgbWFpbiBtZXRob2Qgb2YgdGhpcyBjbGFzczwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxEZXRcIj5hIFZhbGlkYXRpb25EZXRhaWxzIG9iamVjdCB0byB1c2Ugd2hlbiB2YWxpZGF0aW5nPC9wYXJhbT5cclxuICBjaGVja1ZhbCh2YWxEZXQ6IFZhbGlkYXRpb25EZXRhaWxzKTogVmFsaWRhdGlvbkRldGFpbHMge1xyXG4gICAgdGhpcy5fbmV3dmFsdWUgPSAodGhpcy5fb2xkdmFsdWUgPSAodGhpcy5fcGljdHVyZVJlYWwgPSAodGhpcy5fcGljdHVyZUVuYWJsZSA9IG51bGwpKSk7XHJcbiAgICB0aGlzLmluaXQodmFsRGV0KTtcclxuICAgIHZhbERldC5zZXRWYWxpZGF0aW9uRmFpbGVkKGZhbHNlKTtcclxuICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlID0gdmFsRGV0LmdldENvbnRyb2woKTtcclxuICAgIC8vIFRPRE8gLSB1bmNvbW1lbnQgdGhpcyBsaW5lIHdoZW4gJ1BST1BfVFlQRV9NT0RJRllfSU5fUVVFUlknIGlzIHN1cHBvcnRlZCBmb3Igb3RoZXIgY29udHJvbHNcclxuICAgIGxldCBtb2RJblF1ZXV5OiBib29sZWFuID1cclxuICAgICAgY3RybC5pc1JlcGVhdGFibGUoKT8gZmFsc2UgOiAgY3RybC5HZXRDb21wdXRlZEJvb2xlYW5Qcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NT0RJRllfSU5fUVVFUlksIGZhbHNlLCBjdHJsLmdldERpc3BsYXlMaW5lKGZhbHNlKSk7XHJcblxyXG4gICAgbGV0IHVzZU5hdGl2ZTogYm9vbGVhbiA9IGN0cmwuaXNNb2RpZmlhYmxlKCk7XHJcblxyXG4gICAgaWYgKGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRNb2RlKCkgPT09ICdFJyAmJiAhbW9kSW5RdWV1eSkge1xyXG4gICAgICB2YWxEZXQuc2V0VmFsdWUodGhpcy5fb2xkdmFsdWUpO1xyXG4gICAgICByZXR1cm4gdmFsRGV0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdHJsLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1JBRElPIHx8IGN0cmwuVHlwZSA9PT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ0hFQ0tCT1ggfHwgY3RybC5UeXBlID09PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9UQUIgfHwgY3RybC5pc1NlbGVjdGlvbkN0cmwoKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChjdHJsLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NIRUNLQk9YKSB7XHJcbiAgICAgICAgICB2YWxEZXQuc2V0TnVsbChjdHJsLmlzTnVsbFZhbHVlKHRoaXMuX25ld3ZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9uZXd2YWx1ZSAhPT0gbnVsbCAmJiBjdHJsLmlzU2VsZWN0aW9uQ3RybCgpKSB7XHJcbiAgICAgICAgICBsZXQgaWR4OiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKHRoaXMuX25ld3ZhbHVlKTtcclxuICAgICAgICAgIGlmIChjdHJsLmlzQ2hvaWNlTnVsbChpZHgpKSB7XHJcbiAgICAgICAgICAgIHZhbERldC5zZXROdWxsKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZXhfMTExKSB7XHJcbiAgICAgICAgaWYgKGV4XzExMSBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aHJvdyBleF8xMTE7XHJcbiAgICAgIH1cclxuICAgICAgdmFsRGV0LnNldFZhbHVlKHRoaXMuX25ld3ZhbHVlKTtcclxuICAgICAgcmV0dXJuIHZhbERldDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzcGFjZXxub3RoaW5nIHdhcyBpbnNlcnRlZCAgLT4gdXNlIGRlZmF1bHQgdmFsdWVcclxuICAgIGlmIChjdHJsLkRhdGFUeXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBICYmIGN0cmwuRGF0YVR5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSAmJiBjdHJsLkRhdGFUeXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICAgIGlmICgodHlwZW9mIHRoaXMuX25ld3ZhbHVlID09PSAnc3RyaW5nJyAmJiB0aGlzLl9uZXd2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB8fCAoY3RybC5EYXRhVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFICYmIChjdHJsLmlzRGF0ZVplcm8odGhpcy5fbmV3dmFsdWUpIHx8IHRoaXMuaXNOdWxsRGlzcGxheVZhbCgpKSkpIHtcclxuICAgICAgICAgICAgbGV0IGZpZWxkOiBHdWlGaWVsZEJhc2UgPSBjdHJsLmdldEZpZWxkKCk7XHJcbiAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZyA9IGZpZWxkLmdldERlZmF1bHRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBsZXQgdGV4dDogYW55ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGZpZWxkLmlzTnVsbERlZmF1bHQoKSkge1xyXG4gICAgICAgICAgICAgIHZhbERldC5zZXROdWxsKHRydWUpO1xyXG4gICAgICAgICAgICAgIHRleHQgPSBmaWVsZC5nZXROdWxsRGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgIGlmIChOU3RyaW5nLklzTnVsbE9yRW1wdHkodGV4dCkgJiYgY3RybC5EYXRhVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tZzJkaXNwKGRlZmF1bHRWYWx1ZSwgdmFsRGV0LmdldFJhbmdlKCksIHZhbERldC5nZXRQSUMoKSwgdXNlTmF0aXZlLCBmaWVsZC5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXh0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgdGV4dCA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChkZWZhdWx0VmFsdWUsIHZhbERldC5nZXRSYW5nZSgpLCB2YWxEZXQuZ2V0UElDKCksIHVzZU5hdGl2ZSwgZmllbGQuZ2V0VGFzaygpLmdldENvbXBJZHgoKSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgoIWZpZWxkLmlzTnVsbERlZmF1bHQoKSAmJiAodGhpcy5fdmFsRGV0LmdldENvbnRpbnVvdXNSYW5nZVZhbHVlcygpICE9PSBudWxsIHx8IHRoaXMuX3ZhbERldC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCkgIT09IG51bGwpKSlcclxuICAgICAgICAgICAgICB0aGlzLl9uZXd2YWx1ZSA9IHRleHQ7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHZhbERldC5zZXRWYWx1ZSh0ZXh0KTtcclxuICAgICAgICAgICAgICByZXR1cm4gdmFsRGV0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgfVxyXG5cclxuXHJcbiAgICBpZiAoKHR5cGVvZiB0aGlzLl9uZXd2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIShTdHJVdGlsLnJ0cmltKHRoaXMuX25ld3ZhbHVlKSA9PT0gU3RyVXRpbC5ydHJpbSh0aGlzLl9vbGR2YWx1ZSkpKSB8fCBjdHJsLk1vZGlmaWVkQnlVc2VyKVxyXG4gICAge1xyXG4gICAgICB0cnlcclxuICAgICAge1xyXG4gICAgICAgIHN3aXRjaCAodmFsRGV0LmdldFR5cGUoKSlcclxuICAgICAgICB7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgICAgIHZhbERldC5zZXRWYWx1ZSh0aGlzLmNoZWNrQWxwaGFGaWVsZCgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgICAgIHRoaXMuX3BpY3R1cmVSZWFsID0gdmFsRGV0LmdldFBpY3R1cmVSZWFsKCk7IC8vIG9ubHkgbnVtZXJpYyB0eXBlIG5lZWQgYW5vdGhlciBwaWN0dXJlIGZvcm1hdFxyXG4gICAgICAgICAgICB0aGlzLl9waWN0dXJlRW5hYmxlID0gdmFsRGV0LmdldFBpY3R1cmVFbmFibGUoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja051bWVyaWNQaWN0dXJlKCk7XHJcbiAgICAgICAgICAgIHZhbERldC5zZXRWYWx1ZSh0aGlzLmNoZWNrTnVtZXJpY0ZpZWxkKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICAgICAgdmFsRGV0LnNldFZhbHVlKHRoaXMuY2hlY2tMb2dpY2FsRmllbGQoKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgICAgICB2YWxEZXQuc2V0VmFsdWUodGhpcy5jaGVja0RhdGVGaWVsZCgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgICAgIHZhbERldC5zZXRWYWx1ZSh0aGlzLmNoZWNrVGltZUZpZWxkKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIHJlYWwgcGljdHVyZSB0byBCTE9CLCBkbyBub3RoaW5nXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgICAgIHZhbERldC5zZXRWYWx1ZSh0aGlzLl9uZXd2YWx1ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OT05FOlxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coXCJGaWVsZFZhbGlkYXRvci5jaGVja1ZhbDogVHlwZSBvZiB0aGUgZmllbGQgXCIgKyB2YWxEZXQuZ2V0VHlwZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChnb0JhY2spIHtcclxuICAgICAgICBpZiAoZ29CYWNrIGluc3RhbmNlb2YgV3JvbmdGb3JtYXRFeGNlcHRpb24pIHtcclxuICAgICAgICAgIC8vIG5lZWQgY2hhbmdlIHRvIG9sZCB2YWx1ZSwgc2V0IGZvY3VzIGJhY2sgYW5kIHdyaXRlIEVycm9yIE1lc3NhZ2VcclxuICAgICAgICAgIHZhbERldC5zZXRWYWx1ZSh0aGlzLl9vbGR2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25GYWlsZWQodHJ1ZSk7XHJcbiAgICAgICAgICBpZiAoZ29CYWNrLmdldFR5cGUoKSAhPT0gTXNnSW50ZXJmYWNlLlNUUl9STkdfVFhUKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJpbnRNZXNzYWdlKGdvQmFjay5nZXRUeXBlKCksIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnByaW50TWVzc2FnZShNc2dJbnRlcmZhY2UuU1RSX1JOR19UWFQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbERldDtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Q2hlY2sgJiB2YWxpZGF0ZSBBbHBoYSBmaWVsZCBieSBoaXMgb2xkL25ldyB2YWx1ZSBhbmQgMiBwaWN0dXJlczpcclxuICAvLy8gUmVhbCBhbmQgRW5hYmxlXHJcbiAgLy8vIDEuY2hlY2sgaWYgbmV3dmFsdWUgY29tcGxldGUgd2l0aCBwaWN0dXJlcywgb3RoZXJ3aXNlIHJldHVybiBvbGR2YWx1ZVxyXG4gIC8vLyAyLmNoZWNrIGlmIG5ld3ZhbHVlIGNvbXBsZXRlIHdpdGggcmFuZ2VcclxuICAvLy8gMi4xIGNvbXBsZXRlIHZhbHVlLCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlICByZXR1cm4gb2xkdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gU3RyaW5nIC0gbmV3IHZhbHVlIG9mIHZhbGlkYXRlZCBmaWVsZDwvcmV0dXJucz5cclxuICBwcml2YXRlIGNoZWNrQWxwaGFGaWVsZCgpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKTtcclxuXHJcbiAgICBsZXQgSXNBdHRyQWxwaGE6IGJvb2xlYW4gPSB0aGlzLl92YWxEZXQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG5cclxuICAgIGlmICh0aGlzLl9uZXd2YWx1ZS5sZW5ndGggPT09IDAgJiYgdGhpcy5fdmFsRGV0LmdldENvbnRpbnVvdXNSYW5nZVZhbHVlcygpID09PSBudWxsICYmIHRoaXMuX3ZhbERldC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCkgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKGZhbHNlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX25ld3ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChJc0F0dHJBbHBoYSAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgIGxldCBwaWNMZW5COiBudW1iZXIgPSBVdGlsU3RyQnl0ZU1vZGUubGVuQih0aGlzLl9waWN0dXJlKTtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5sZW5CKHRoaXMuX25ld3ZhbHVlKSA+IHBpY0xlbkIpIHtcclxuICAgICAgICB0aGlzLl9uZXd2YWx1ZSA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0Qih0aGlzLl9uZXd2YWx1ZSwgcGljTGVuQik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fbmV3dmFsdWUubGVuZ3RoID4gdGhpcy5fcGljdHVyZS5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLl9uZXd2YWx1ZSA9IHRoaXMuX25ld3ZhbHVlLnN1YnN0cigwLCB0aGlzLl9waWN0dXJlLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgIGxldCBjdXJyUGljdHVyZTogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IGN1cnJQaWN0dXJlID0gMDtcclxuXHJcbiAgICBmb3IgKGN1cnJQaWN0dXJlID0gaSA9IDA7IGkgPCB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggJiYgY3VyclBpY3R1cmUgPCB0aGlzLl9waWN0dXJlLmxlbmd0aDsgKSB7XHJcbiAgICAgIGlmICghRGlzcGxheUNvbnZlcnRvci5pc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZSh0aGlzLl9waWN0dXJlLmNoYXJBdChjdXJyUGljdHVyZSkpICYmIHRoaXMuX25ld3ZhbHVlLmNoYXJBdChpKSA9PT0gdGhpcy5fcGljdHVyZS5jaGFyQXQoY3VyclBpY3R1cmUpKSB7XHJcbiAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQodGhpcy5fcGljdHVyZS5jaGFyQXQoY3VyclBpY3R1cmUpKTtcclxuICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgICAgY3VyclBpY3R1cmUgPSBjdXJyUGljdHVyZSArIDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKCFEaXNwbGF5Q29udmVydG9yLmlzQWxwaGFQb3NpdGlvbmFsRGlyZWN0aXZlKHRoaXMuX3BpY3R1cmUuY2hhckF0KGN1cnJQaWN0dXJlKSkgJiYgdGhpcy5fbmV3dmFsdWUuY2hhckF0KGkpICE9PSB0aGlzLl9waWN0dXJlLmNoYXJBdChjdXJyUGljdHVyZSkpIHtcclxuICAgICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHRoaXMuX3BpY3R1cmUuY2hhckF0KGN1cnJQaWN0dXJlKSk7XHJcbiAgICAgICAgICBjdXJyUGljdHVyZSA9IGN1cnJQaWN0dXJlICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoRGlzcGxheUNvbnZlcnRvci5pc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZSh0aGlzLl9waWN0dXJlLmNoYXJBdChjdXJyUGljdHVyZSkpICYmIHRoaXMuaXNQb3NzaWJsZUFscGhhTGV0dGVyKGksIGN1cnJQaWN0dXJlKSkge1xyXG4gICAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSkge1xyXG4gICAgICAgICAgICAgIGxldCBzdHJWYWw6IHN0cmluZyA9IHRoaXMuX25ld3ZhbHVlLnN1YnN0cihpLCAxKTtcclxuICAgICAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmxlbkIoc3RyVmFsKSA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgaWYgKElzQXR0ckFscGhhKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyUGljdHVyZSArIDEgPCB0aGlzLl9waWN0dXJlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChEaXNwbGF5Q29udmVydG9yLmlzQWxwaGFQb3NpdGlvbmFsRGlyZWN0aXZlKHRoaXMuX3BpY3R1cmUuY2hhckF0KGN1cnJQaWN0dXJlICsgMSkpICYmIHRoaXMuaXNQb3NzaWJsZUFscGhhTGV0dGVyKGksIGN1cnJQaWN0dXJlICsgMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHRoaXMuX25ld3ZhbHVlLmNoYXJBdChpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyUGljdHVyZSA9IGN1cnJQaWN0dXJlICsgMjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZCgnICcpLyonICcqLztcclxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJQaWN0dXJlID0gY3VyclBpY3R1cmUgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZCgnICcpLyonICcqLztcclxuICAgICAgICAgICAgICAgICAgICBjdXJyUGljdHVyZSA9IGN1cnJQaWN0dXJlICsgMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHRoaXMuX25ld3ZhbHVlLmNoYXJBdChpKSk7XHJcbiAgICAgICAgICAgICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgY3VyclBpY3R1cmUgPSBjdXJyUGljdHVyZSArIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQodGhpcy5fbmV3dmFsdWUuY2hhckF0KGkpKTtcclxuICAgICAgICAgICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgIGN1cnJQaWN0dXJlID0gY3VyclBpY3R1cmUgKyAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZCh0aGlzLl9uZXd2YWx1ZS5jaGFyQXQoaSkpO1xyXG4gICAgICAgICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgICAgICAgICBjdXJyUGljdHVyZSA9IGN1cnJQaWN0dXJlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKCcgJykvKicgJyovO1xyXG4gICAgICAgICAgICBjdXJyUGljdHVyZSA9IGN1cnJQaWN0dXJlICsgMTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBsZXQgdHlwZTogTWdDb250cm9sVHlwZSA9IGNvbnRyb2wuVHlwZTtcclxuICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQlVUVE9OKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByaW50TWVzc2FnZShNc2dJbnRlcmZhY2UuU1RSX0VSUl9OVU0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX25ld3ZhbHVlID0gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gICAgaWYgKHRoaXMuX3ZhbERldC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKSAhPT0gbnVsbCB8fCB0aGlzLl92YWxEZXQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX25ld3ZhbHVlID0gdGhpcy5maWxsQWxwaGFCeVJhbmdlKHRoaXMuX3ZhbERldC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKSwgdGhpcy5fdmFsRGV0LmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIHRoaXMuX25ld3ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmNoZWNrIGlmIGNoYXIgaW4gQWxwaGEgY29tcGxlYXRlIHdpdGggRGlyZWN0aXZlIENoYXJhY3RlciBmb3IgdGhlIGxldHRlcjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpbmRleFwiPm9mIGRpcmVjdGl2ZSBpbiBzdHJpbmcgdG8gY2hlY2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiBjb21wbGV0ZSwgZmFsc2Ugb3RoZXJ3aXNlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaXNQb3NzaWJsZUFscGhhTGV0dGVyKGluZGV4SW5wdXQ6IG51bWJlciwgaW5kZXhQaWN0dXJlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW47XHJcbiAgICBzd2l0Y2ggKHRoaXMuX3BpY3R1cmUuY2hhckNvZGVBdChpbmRleFBpY3R1cmUpKSB7XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19YOlxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSjpcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0c6XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19TOlxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVDpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19VOlxyXG4gICAgICAgIGxldCB1cHBlcjogc3RyaW5nID0gdGhpcy5fbmV3dmFsdWVbaW5kZXhJbnB1dF0udG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAodXBwZXIgIT09IHRoaXMuX25ld3ZhbHVlW2luZGV4SW5wdXRdKVxyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VTdHJpbmdJbnNpZGUoXCJcIiArIHVwcGVyLCBpbmRleElucHV0KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19MOlxyXG4gICAgICAgIGxldCBsb3dlcjogc3RyaW5nID0gdGhpcy5fbmV3dmFsdWVbaW5kZXhJbnB1dF0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAobG93ZXIgIT09IHRoaXMuX25ld3ZhbHVlW2luZGV4SW5wdXRdKVxyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VTdHJpbmdJbnNpZGUoXCJcIiArIGxvd2VyLCBpbmRleElucHV0KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19OOlxyXG4gICAgICAgIGxldCBudW1iZXIxOiBzdHJpbmcgPSB0aGlzLl9uZXd2YWx1ZVtpbmRleElucHV0XTtcclxuICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQobnVtYmVyMSkgfHwgTkNoYXIuSXNXaGl0ZVNwYWNlKG51bWJlcjEpIHx8IFV0aWxTdHJCeXRlTW9kZS5hc051bWVyaWMobnVtYmVyMSkpXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgRXZlbnRzLldyaXRlRXJyb3JUb0xvZyhcIkJhZCBBbHBoYSB2YWx1ZS4gU2hvdWxkIGJlIG51bWJlciBvbmx5IG9uIHBsYWNlIE51bS4gXCIgKyBpbmRleElucHV0KTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIEV2ZW50cy5Xcml0ZUVycm9yVG9Mb2coXCJGaWVsZFZhbGlkYXRvci5pc1Bvc3NpYmxlQWxwaGFMZXR0ZXI6IGlsbGVnYWwgQ2hhciBEaXJlY3RpdmU6IFwiICsgdGhpcy5fcGljdHVyZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoaW5kZXhQaWN0dXJlKSkgKyBcIiBmb3IgXCIgKyB0aGlzLl9uZXd2YWx1ZVtpbmRleElucHV0XSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmlmIG5ldyB2YWx1ZSB3YXNuJ3QgZmluaXNoZWQgYW5kIHN0YXkgdW53cml0YWJsZSBwZWFjZXMgb2YgdGhlIFJlYWwgcGljdHVyZSAtIGFkZCBpdFxyXG4gIC8vLyB0byB0aGUgZW5kIG9mIHRoZSBuZXd2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBmaWxsQWxsQWxwaGEoKTogc3RyaW5nIHtcclxuICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIodGhpcy5fcGljdHVyZS5sZW5ndGgpO1xyXG4gICAgc3RyaW5nQnVpbGRlci5BcHBlbmQodGhpcy5fbmV3dmFsdWUpO1xyXG5cclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmIHRoaXMuX3ZhbERldC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpIHtcclxuICAgICAgbGV0IGludE5ld3ZhbHVlTGVuQjogbnVtYmVyID0gVXRpbFN0ckJ5dGVNb2RlLmxlbkIodGhpcy5fbmV3dmFsdWUpO1xyXG4gICAgICBsZXQgc3RyQnVpZWRQaWN0dXJlOiBzdHJpbmcgPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIodGhpcy5fcGljdHVyZSwgaW50TmV3dmFsdWVMZW5CKTtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gc3RyQnVpZWRQaWN0dXJlLmxlbmd0aDsgaSA8IHRoaXMuX3BpY3R1cmUubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICBpZiAoRGlzcGxheUNvbnZlcnRvci5pc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZSh0aGlzLl9waWN0dXJlLmNoYXJBdChpKSkpIHtcclxuICAgICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKCcgJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQodGhpcy5fcGljdHVyZS5jaGFyQXQoaSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IHRoaXMuX25ld3ZhbHVlLmxlbmd0aCAtIDE7IGkgPCB0aGlzLl9waWN0dXJlLmxlbmd0aCAmJiBpID49IDA7IGkrKykge1xyXG4gICAgICAgIGlmIChEaXNwbGF5Q29udmVydG9yLmlzQWxwaGFQb3NpdGlvbmFsRGlyZWN0aXZlKHRoaXMuX3BpY3R1cmUuY2hhckF0KGkpKSkge1xyXG4gICAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoJyAnKS8qJyAnKi87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQodGhpcy5fcGljdHVyZS5jaGFyQXQoaSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Q29tcGFyYXRpdmUgbmV3dmFsdWUgd2l0aCBwb3NzaWJsZSBSYW5nZSBpbiBDb250aW51b3VzUmFuZ2VWYWx1ZXMvRGlzY3JldGVSYW5nZVZhbHVlczwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IG5ld3ZhbHVlIGlmIGl0IHBvc3NpYmxlLCBvbGR2YWx1ZSBvdGhlcndpc2U8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBmaWxsQWxwaGFCeVJhbmdlKENvbnRpbnVvdXNSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+LCBEaXNjcmV0ZVJhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4pOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCB0bXBCdWZmZXI6IHN0cmluZyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZmlsbEFscGhhQnlEaXNjcmV0ZVJhbmdlVmFsdWVzKERpc2NyZXRlUmFuZ2VWYWx1ZXMsIHRoaXMuX25ld3ZhbHVlKTtcclxuICAgIGlmICh0bXBCdWZmZXIgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRtcEJ1ZmZlcjtcclxuICAgIH1cclxuXHJcbiAgICB0bXBCdWZmZXIgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmZpbGxBbHBoYUJ5Q29udGludW91c1JhbmdlVmFsdWVzKENvbnRpbnVvdXNSYW5nZVZhbHVlcywgdGhpcy5fbmV3dmFsdWUpO1xyXG4gICAgaWYgKHRtcEJ1ZmZlciAhPT0gbnVsbClcclxuICAgICAgcmV0dXJuIHRtcEJ1ZmZlcjtcclxuXHJcbiAgICAgIGlmIChEaXNjcmV0ZVJhbmdlVmFsdWVzICE9PSBudWxsKVxyXG4gICAgICAgIHJldHVybiB0aGlzLkNvbXBsZXRlQWxwaGFCeVJhbmdlKERpc2NyZXRlUmFuZ2VWYWx1ZXMpO1xyXG5cclxuXHJcbiAgICB0aGlzLnByaW50TWVzc2FnZShNc2dJbnRlcmZhY2UuU1RSX1JOR19UWFQsIHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuX29sZHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlRyeSB0byBjb21wbGV0ZSB0aGUgbmV3dmFsdWUgYnkgUmFuZ2U8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBjb21wbGV0ZWQgdmFsdWUgaWYgaXQgcG9zc2libGUsIG90aGVyd2lzZSBvbGR2YWx1ZTwvcmV0dXJucz5cclxuICBwcml2YXRlIENvbXBsZXRlQWxwaGFCeVJhbmdlKERpc2NyZXRlUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPik6IHN0cmluZyB7XHJcbiAgICBsZXQgdG1wTmV3VmFsdWU6IHN0cmluZyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuY29tcGxldGVBbHBoYUJ5UmFuZ2UoRGlzY3JldGVSYW5nZVZhbHVlcywgdGhpcy5fbmV3dmFsdWUpO1xyXG4gICAgaWYgKHRtcE5ld1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0bXBOZXdWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb2N1cyBiYWNrXHJcbiAgICB0aGlzLnByaW50TWVzc2FnZShNc2dJbnRlcmZhY2UuU1RSX1JOR19UWFQsIHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuX29sZHZhbHVlO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5jaGVjayAmIHZhbGlkYXRlIExvZ2ljYWwgZmllbGQgYnkgaGlzIG9sZC9uZXcgdmFsdWUgYW5kIDIgcGljdHVyZXM6XHJcbiAgLy8vIFJlYWwgYW5kIEVuYWJsZVxyXG4gIC8vLyAxLmNoZWNrIGlmIG5ld3ZhbHVlIGNvbXBsZXRlIHdpdGggcGljdHVyZXMsIG90aGVyd2lzZSByZXR1cm4gb2xkdmFsdWVcclxuICAvLy8gMi5jaGVjayBpZiBuZXd2YWx1ZSBjb21wbGV0ZSB3aXRoIHJhbmdlXHJcbiAgLy8vIDIuMSBjb21wbGV0ZSB2YWx1ZSwgaWYgcG9zc2libGUsIG90aGVyd2lzZSAgcmV0dXJuIG9sZHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IFN0cmluZyAtIG5ldyB2YWx1ZSBvZiB2YWxpZGF0ZWQgZmllbGQ8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBjaGVja0xvZ2ljYWxGaWVsZCgpOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAodGhpcy5fbmV3dmFsdWUubGVuZ3RoID09PSAwICYmIHRoaXMuX3ZhbERldC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKSA9PT0gbnVsbCAmJiB0aGlzLl92YWxEZXQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbihNc2dJbnRlcmZhY2UuU1RSX1JOR19UWFQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCkgIT09IG51bGwgfHwgdGhpcy5fdmFsRGV0LmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9uZXd2YWx1ZSA9IHRoaXMuZmlsbEFscGhhQnlSYW5nZSh0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCksIHRoaXMuX3ZhbERldC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZhaWxlZChmYWxzZSk7XHJcblxyXG4gIC8vIHRvZG8gOiBuZWVkIHRvIGNoZWNrIHdoYXQgaXMgdG8gaGFuZGxlIGZvciBjaGVja2luZyByYW5nZXNcclxuICAgIHJldHVybiB0aGlzLl9uZXd2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4qKioqKioqKioqKioqKioqKioqKioqKioqKk51bWVyaWMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5jaGVjayAmIHZhbGlkYXRlIE51bWVyaWMgZmllbGQgYnkgaGlzIG9sZC9uZXcgdmFsdWUgYW5kIDIgcGljdHVyZXM6XHJcbiAgLy8vIFJlYWwgYW5kIEVuYWJsZVxyXG4gIC8vLyAxLmNoZWNrIGlmIG5ld3ZhbHVlIGNvbXBsZXRlIHdpdGggcGljdHVyZXMsIG90aGVyd2lzZSByZXR1cm4gb2xkdmFsdWVcclxuICAvLy8gMi5jaGVjayBpZiBuZXd2YWx1ZSBjb21wbGV0ZSB3aXRoIHJhbmdlXHJcbiAgLy8vIDIuMSBjb21wbGV0ZSB2YWx1ZSwgaWYgcG9zc2libGUsIG90aGVyd2lzZSAgcmV0dXJuIG9sZHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IFN0cmluZyAtIG5ldyB2YWx1ZSBvZiB2YWxpZGF0ZWQgZmllbGQ8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBjaGVja051bWVyaWNGaWVsZCgpOiBhbnkge1xyXG5cclxuICAgIGxldCBldmFsdWF0ZWQ6IGFueTtcclxuICAgIGlmICh0eXBlb2YgdGhpcy5fbmV3dmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmICh0aGlzLl9uZXd2YWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLl9uZXd2YWx1ZSA9IFwiMFwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZGVsaW1ldGVyUmVhbEluZGV4OiBudW1iZXIgPSB0aGlzLl9uZXd2YWx1ZS5pbmRleE9mKHRoaXMuX2RlY2ltYWwpO1xyXG4gICAgICBsZXQgZGVsaW1ldGVyUGljdEluZGV4OiBudW1iZXIgPSB0aGlzLl9waWN0dXJlUmVhbC5pbmRleE9mKHRoaXMuX2RlY2ltYWwpO1xyXG5cclxuICAgICAgZXZhbHVhdGVkID0gXCJcIjtcclxuICAgICAgbGV0IGV2YWx1YXRlZExlZnQ6IHN0cmluZztcclxuICAgICAgbGV0IGV2YWx1YXRlZFJpZ2h0OiBzdHJpbmc7XHJcblxyXG5cclxuICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKGZhbHNlKTtcclxuXHJcbiAgICAgIC8vIGNoZWNrIGlmIHRoZSBmb3JtYXQgb2YgbmV3dmFsdWUgbWF0Y2hlcyB0aGUgbnVtZXJpYyBtYXNrLlxyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tOdW1lcmljSW5EZWNGb3JtYXQoKSlcclxuICAgICAgICB0aHJvdyBuZXcgV3JvbmdGb3JtYXRFeGNlcHRpb24oTXNnSW50ZXJmYWNlLkVEVF9FUlJfU1RSXzEpO1xyXG5cclxuICAgICAgaWYgKGRlbGltZXRlclBpY3RJbmRleCAhPT0gLTEgJiYgZGVsaW1ldGVyUmVhbEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGV2YWx1YXRlZExlZnQgPSB0aGlzLmNoZWNrTnVtZXJpY0xlZnQoZGVsaW1ldGVyUGljdEluZGV4LCBkZWxpbWV0ZXJSZWFsSW5kZXgpO1xyXG4gICAgICAgIGV2YWx1YXRlZFJpZ2h0ID0gdGhpcy5jaGVja051bWVyaWNSaWdodChkZWxpbWV0ZXJQaWN0SW5kZXgsIGRlbGltZXRlclJlYWxJbmRleCk7XHJcbiAgICAgICAgZXZhbHVhdGVkID0gZXZhbHVhdGVkTGVmdCArIHRoaXMuX2RlY2ltYWwgKyBldmFsdWF0ZWRSaWdodDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZGVsaW1ldGVyUGljdEluZGV4ICE9PSAtMSAmJiBkZWxpbWV0ZXJSZWFsSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICBldmFsdWF0ZWRMZWZ0ID0gdGhpcy5jaGVja051bWVyaWNMZWZ0KGRlbGltZXRlclBpY3RJbmRleCwgTWF0aC5taW4oZGVsaW1ldGVyUGljdEluZGV4LCB0aGlzLl9uZXd2YWx1ZS5sZW5ndGgpKTtcclxuICAgICAgICAgIGV2YWx1YXRlZFJpZ2h0ID0gdGhpcy5jaGVja051bWVyaWNSaWdodChkZWxpbWV0ZXJQaWN0SW5kZXgsIGRlbGltZXRlclBpY3RJbmRleCAtIDEpO1xyXG4gICAgICAgICAgZXZhbHVhdGVkID0gZXZhbHVhdGVkTGVmdCArIHRoaXMuX2RlY2ltYWwgKyBldmFsdWF0ZWRSaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIGRlbGltZXRlclBpY3RJbmRleCA9PSAtMSAmJiBkZWxpbWV0ZXJSZWFsSW5kZXggIT0gLTFcclxuICAgICAgICAgIGlmIChkZWxpbWV0ZXJQaWN0SW5kZXggPT09IC0xICYmIGRlbGltZXRlclJlYWxJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgZXZhbHVhdGVkID0gdGhpcy5jaGVja051bWVyaWNSaWdodCgtMSwgLTEpO1xyXG4gICAgICAgICAgICBldmFsdWF0ZWRMZWZ0ID0gZXZhbHVhdGVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChkZWxpbWV0ZXJSZWFsSW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fbmV3dmFsdWUgPSB0aGlzLl9uZXd2YWx1ZS5zdWJzdHIoMCwgZGVsaW1ldGVyUmVhbEluZGV4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl9uZXd2YWx1ZSA9IFwiMFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2YWx1YXRlZCA9IHRoaXMuY2hlY2tOdW1lcmljUmlnaHQoLTEsIC0xKTtcclxuICAgICAgICAgICAgZXZhbHVhdGVkTGVmdCA9IGV2YWx1YXRlZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgoZXZhbHVhdGVkUmlnaHQubGVuZ3RoID09PSAwICYmIGV2YWx1YXRlZExlZnQubGVuZ3RoID09PSAwKSB8fCAoZXZhbHVhdGVkLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgIC8vIHNwYWNlfG5vdGhpbmcgd2FzIGluc2VydGVkICAtPiB1c2UgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlO1xyXG4gICAgICAgIGN0cmwgPSB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpO1xyXG5cclxuICAgICAgICBsZXQgZmllbGQ6IEd1aUZpZWxkQmFzZSA9IGN0cmwuZ2V0RmllbGQoKTtcclxuICAgICAgICBsZXQgZGVmVmFsdWU6IHN0cmluZyA9IGZpZWxkLmdldERlZmF1bHRWYWx1ZSgpOyAvLyBpbm5lciB2YWx1ZSBpbnNlcnRlZFxyXG4gICAgICAgIGxldCBkaXNwRGVmVmFsdWU6IGFueSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5pc051bGxEZWZhdWx0KCkpIHtcclxuICAgICAgICAgIHRoaXMuX3ZhbERldC5zZXROdWxsKHRydWUpO1xyXG4gICAgICAgICAgZGlzcERlZlZhbHVlID0gZmllbGQuZ2V0TnVsbERpc3BsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRpc3BEZWZWYWx1ZSA9PSBudWxsKVxyXG4gICAgICAgICAgZGlzcERlZlZhbHVlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tZzJkaXNwKGRlZlZhbHVlLCB0aGlzLl92YWxEZXQuZ2V0UmFuZ2UoKSwgdGhpcy5fdmFsRGV0LmdldFBJQygpLCB0cnVlLCBmaWVsZC5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpLCBmYWxzZSk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjaGVjayBpZiB0aGUgZGlnaXQgYmVmb3JlIHRoZSBkZWxpbWl0ZXIgZG8gbm90IGV4Y2VlZCB0aGUgcGljIHdob2xlcy5cclxuICAgICAgbGV0IHdob2xlRGlnaXRkaWZmOiBudW1iZXIgPSB0aGlzLmRpZ2l0c0JlZm9yZURlbGltZXRlcihldmFsdWF0ZWQsIDAsIHRoaXMuX2RlY2ltYWwpIC0gdGhpcy5fdmFsRGV0LmdldFBJQygpLmdldFdob2xlcygpO1xyXG4gICAgICAvLyBpZiB0aGV5IGRvLCBjaGVjayBpZiB0aGUgZXhjZWVkaW5nIGNoYXJzIGFyZSB0aGUgcGFkIGNoYXJzLiBpZiBzbywgdGhlcmUgaXMgbm8gZXJyb3IuXHJcbiAgICAgIGlmICh3aG9sZURpZ2l0ZGlmZiA+IDApIHtcclxuICAgICAgICBsZXQgcGFkQ2hhck9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAvLyBpcyB0aGVyZSBhIHBhZCwgY2hlY2sgaXQuIG5vIHBhZCBpcyBhIGNlcnRhaW4gZXJyb3IuXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZhbERldC5nZXRJc1BhZEZpbGwoKSkge1xyXG4gICAgICAgICAgcGFkQ2hhck9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHdob2xlRGlnaXRkaWZmICYmIHBhZENoYXJPbmx5OyBpKyspXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjaGFyIGlzIG5vdCB0aGUgcGFkLCB0aGVuIHRoaXMgaXMgYW4gZXJyb3IuXHJcbiAgICAgICAgICAgIGlmIChldmFsdWF0ZWRbaV0gIT09IHRoaXMuX3ZhbERldC5nZXRQYWRGaWxsQ2hhcigpKVxyXG4gICAgICAgICAgICAgIHBhZENoYXJPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXBhZENoYXJPbmx5KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKE1zZ0ludGVyZmFjZS5FRFRfRVJSX1NUUl8xKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGlmICh0aGlzLl92YWxEZXQuZ2V0SXNOZWdhdGl2ZSgpICYmICh0aGlzLl9uZXd2YWx1ZS50cmltKCkuc3RhcnRzV2l0aChcIi1cIikgfHwgKHRoaXMuX3ZhbERldC5nZXROZWdhdGl2ZVNpZ25QcmVmKCkubGVuZ3RoICE9PSAwICYmIHRoaXMuX25ld3ZhbHVlLnRyaW0oKS5zdGFydHNXaXRoKHRoaXMuX3ZhbERldC5nZXROZWdhdGl2ZVNpZ25QcmVmKCkpKSkpIHtcclxuICAgICAgICBldmFsdWF0ZWQgPSBcIi1cIiArIGV2YWx1YXRlZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZnJvbSB0aGlzIHBvaW50IGhhdmUgZXZhbHVhdGVkIHN0cmluZyAtIHRoZSB2YWx1ZSAod2l0aG91dCBtYXNrKSBvZiB0aGUgY29udHJvbFxyXG4gICAgICAvLyBuZWVkZWQgdG8gYmUgaW5zZXJ0ZWQgdG8gdGhlIHBpY3R1cmVcclxuICAgICAgZXZhbHVhdGVkID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kaXNwMm1nKHRoaXMuX25ld3ZhbHVlLCBcIlwiLCB0aGlzLl92YWxEZXQuZ2V0UElDKCksIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCksIEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTktOT1dOKTtcclxuICAgICAgZXZhbHVhdGVkID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tZzJkaXNwKGV2YWx1YXRlZCwgXCJcIiwgdGhpcy5fdmFsRGV0LmdldFBJQygpLCB0cnVlLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpLCB0cnVlKTtcclxuXHJcbiAgICAgIC8vIGluIG9yZGVyIGNoZWNrIGlmIHVzZXIgaGFzIGVudGVyZWQgYSBibGFuayB2YWx1ZSAsIHRyaW0gYW5kIHRoZW4gY2hlY2sgaXQncyBsZW5ndGguXHJcbiAgICAgIGxldCB0ZW1wRGlzcFZhbDogc3RyaW5nID0gU3RyVXRpbC5sdHJpbShldmFsdWF0ZWQpO1xyXG4gICAgICBpZiAodGVtcERpc3BWYWwubGVuZ3RoID09PSAwICYmIHRoaXMuX3ZhbERldC5nZXRQSUMoKS56ZXJvRmlsbCgpICYmIHRoaXMuX3ZhbERldC5nZXRQSUMoKS5nZXRaZXJvUGFkKCkgPT09ICcgJylcclxuICAgICAgICBldmFsdWF0ZWQgPSBcIjBcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG5cclxuICAgICAgLy8gZnJvbSB0aGlzIHBvaW50IGhhdmUgZXZhbHVhdGVkIHN0cmluZyAtIHRoZSB2YWx1ZSAod2l0aG91dCBtYXNrKSBvZiB0aGUgY29udHJvbFxyXG4gICAgICAvLyBuZWVkZWQgdG8gYmUgaW5zZXJ0ZWQgdG8gdGhlIHBpY3R1cmVcclxuICAgICAgZXZhbHVhdGVkID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kaXNwMm1nKHRoaXMuX25ld3ZhbHVlLCBcIlwiLCB0aGlzLl92YWxEZXQuZ2V0UElDKCksIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCksIEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTktOT1dOKTtcclxuICAgICAgZXZhbHVhdGVkID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tZzJkaXNwKGV2YWx1YXRlZCwgXCJcIiwgdGhpcy5fdmFsRGV0LmdldFBJQygpLCB0cnVlLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpLCB0cnVlKTtcclxuXHJcbiAgICB9XHJcbiAgICAvLyBJbnNlcnQgdGhlIG51bWJlciB0byByYW5nZVxyXG4gICAgaWYgKHRoaXMuX3ZhbERldC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKSAhPSBudWxsIHx8IHRoaXMuX3ZhbERldC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCkgIT0gbnVsbClcclxuICAgIHtcclxuICAgICAgdGhpcy5fbmV3dmFsdWUgPSBldmFsdWF0ZWQ7XHJcbiAgICAgIGV2YWx1YXRlZCA9IHRoaXMuZmlsbE51bWVyaWNCeVJhbmdlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXZhbHVhdGVkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNoZWNrIHZhbGlkaXR5IG9mIG51bWVyaWNhbCBwaWN0dXJlIGZyb20gZm91bmQgJ2RlbGltZXRlcicgdG8gbGVmdC5cclxuICAvLy8gPC0uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWxpbWV0ZXJQaWN0SW5kZXhcIj5mb3VuZCBkZWxpbWV0ZXIgaW4gdGhlIHBpY3R1cmU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRlbGltZXRlclJlYWxJbmRleFwiPmZvdW5kIGRlbGltZXRlciBpbiB0aGUgaW5zZXJ0ZWQgYnkgdXNlciBuZXcgdmFsdWU8L3BhcmFtPlxyXG4gIHByaXZhdGUgY2hlY2tOdW1lcmljTGVmdChkZWxpbWV0ZXJQaWN0SW5kZXg6IG51bWJlciwgZGVsaW1ldGVyUmVhbEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJ1ZmZlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICBsZXQgUmVhbEluZGV4OiBudW1iZXIgPSBkZWxpbWV0ZXJSZWFsSW5kZXggLSAxO1xyXG4gICAgbGV0IFBpY3RJbmRleDogbnVtYmVyO1xyXG4gICAgbGV0IGlzRm91bmQ6IGJvb2xlYW47XHJcblxyXG4gICAgZm9yIChQaWN0SW5kZXggPSBkZWxpbWV0ZXJQaWN0SW5kZXggLSAxOyBQaWN0SW5kZXggPj0gMCAmJiBSZWFsSW5kZXggPj0gMDsgUGljdEluZGV4LS0pXHJcbiAgICB7XHJcbiAgICAgIGlmICh0aGlzLl9waWN0dXJlRW5hYmxlW1BpY3RJbmRleF0gPT09ICcxJylcclxuICAgICAge1xyXG4gICAgICAgIGxldCB0bXBzdG9yYWdlOiBudW1iZXIgPSBSZWFsSW5kZXg7XHJcbiAgICAgICAgaXNGb3VuZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKDsgUmVhbEluZGV4ID49IDA7IFJlYWxJbmRleC0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmICh0aGlzLl9waWN0dXJlUmVhbFtQaWN0SW5kZXhdID09PSB0aGlzLl9uZXd2YWx1ZVtSZWFsSW5kZXhdKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpc0ZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgUmVhbEluZGV4LS07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpc0ZvdW5kKVxyXG4gICAgICAgICAgUmVhbEluZGV4ID0gdG1wc3RvcmFnZTtcclxuXHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZCh0aGlzLl9waWN0dXJlUmVhbFtQaWN0SW5kZXhdKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBjYW4gaW5zZXJ0IG9ubHkgbnVtYmVyXHJcbiAgICAgIGVsc2VcclxuICAgICAge1xyXG4gICAgICAgIGZvciAoOyBSZWFsSW5kZXggPj0gMDsgUmVhbEluZGV4LS0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX25ld3ZhbHVlW1JlYWxJbmRleF0pKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBidWZmZXIuQXBwZW5kKHRoaXMuX25ld3ZhbHVlW1JlYWxJbmRleF0pO1xyXG4gICAgICAgICAgICBSZWFsSW5kZXgtLTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFJlYWxJbmRleCA8IDAgJiYgUGljdEluZGV4ID49IDApXHJcbiAgICAvLyB0cnkgdG8gYWRkIHVud3JpdGFibGVcclxuICAgICAgZm9yICg7IFBpY3RJbmRleCA+PSAwOyBQaWN0SW5kZXgtLSlcclxuICAgICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9waWN0dXJlRW5hYmxlW1BpY3RJbmRleF0gPT09ICcxJylcclxuICAgICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fcGljdHVyZVJlYWxbUGljdEluZGV4XSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIC8vIG9ubHkgZnJvbSBsZWZ0IG5lZWQgUGFkRmlsbFxyXG4gICAgICAgICAgaWYgKHRoaXMuX3ZhbERldC5nZXRJc1BhZEZpbGwoKSlcclxuICAgICAgICAgICAgYnVmZmVyLkFwcGVuZCh0aGlzLl92YWxEZXQuZ2V0UGFkRmlsbENoYXIoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgcmV0dXJuIFN0clV0aWwuUmV2ZXJzZVN0cmluZyhidWZmZXIpLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Q2hlY2sgdmFsaWRpdHkgb2YgbnVtZXJpY2FsIHBpY3R1cmUgZnJvbSBmb3VuZCAnZGVsaW1ldGVyJyB0byByaWdodC5cclxuICAvLy8gLi0+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWxpbWV0ZXJQaWN0SW5kZXhcIj5mb3VuZCBkZWxpbWV0ZXIgaW4gdGhlIHBpY3R1cmU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRlbGltZXRlclJlYWxJbmRleFwiPmZvdW5kIGRlbGltZXRlciBpbiB0aGUgaW5zZXJ0ZWQgYnkgdXNlciBuZXcgdmFsdWU8L3BhcmFtPlxyXG4gIHByaXZhdGUgY2hlY2tOdW1lcmljUmlnaHQoZGVsaW1ldGVyUGljdEluZGV4OiBudW1iZXIsIGRlbGltZXRlclJlYWxJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgbGV0IFJlYWxJbmRleDogbnVtYmVyID0gZGVsaW1ldGVyUmVhbEluZGV4ICsgMTtcclxuICAgIGxldCBQaWN0SW5kZXg6IG51bWJlcjtcclxuICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3ZhbERldC5nZXRQSUMoKTtcclxuXHJcbiAgICBmb3IgKFBpY3RJbmRleCA9IGRlbGltZXRlclBpY3RJbmRleCArIDE7IFBpY3RJbmRleCA8IHRoaXMuX3BpY3R1cmVFbmFibGUubGVuZ3RoICYmIFJlYWxJbmRleCA8IHRoaXMuX25ld3ZhbHVlLmxlbmd0aDsgUGljdEluZGV4KyspXHJcbiAgICB7XHJcbiAgICAgIGlmICh0aGlzLl9waWN0dXJlRW5hYmxlW1BpY3RJbmRleF0gPT09ICcxJylcclxuICAgICAge1xyXG4gICAgICAgIGlmIChSZWFsSW5kZXggPCBQaWN0SW5kZXgpXHJcbiAgICAgICAgICBSZWFsSW5kZXggPSBQaWN0SW5kZXg7XHJcblxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fcGljdHVyZVJlYWxbUGljdEluZGV4XSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gY2FuIGluc2VydCBvbmx5IG51bWJlclxyXG4gICAgICBlbHNlXHJcbiAgICAgIHtcclxuICAgICAgICBmb3IgKDsgUmVhbEluZGV4IDwgdGhpcy5fbmV3dmFsdWUubGVuZ3RoOyBSZWFsSW5kZXgrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAvLyBBcHBlbmQgdGhlIGRpZ2l0IG9mIGFjdHVhbCBpbnB1dCBkYXRhLiBJZiBpdCBpcyBtYXNrIGNoYXIsIHNraXAgaXQuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQodGhpcy5fbmV3dmFsdWVbUmVhbEluZGV4XSkgJiYgIXBpYy5waWNJc01hc2soUmVhbEluZGV4KSlcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyLkFwcGVuZCh0aGlzLl9uZXd2YWx1ZVtSZWFsSW5kZXhdKTtcclxuICAgICAgICAgICAgUmVhbEluZGV4Kys7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHJpZ2h0IHBhcnQgaGFzIGFueSBpbnB1dCBkYXRhLCB0aGVuIG9ubHkgYXBwZW5kIHVud3JpdGFibGUgY2hhcnNcclxuICAgIGlmIChidWZmZXIuTGVuZ3RoID4gMClcclxuICAgIHtcclxuICAgICAgaWYgKFJlYWxJbmRleCA+PSB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggJiYgUGljdEluZGV4IDwgdGhpcy5fcGljdHVyZVJlYWwubGVuZ3RoKVxyXG4gICAgICAvLyB0cnkgdG8gYWRkIHVud3JpdGFibGVcclxuICAgICAgICBmb3IgKDsgUGljdEluZGV4IDwgdGhpcy5fcGljdHVyZVJlYWwubGVuZ3RoOyBQaWN0SW5kZXgrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fcGljdHVyZUVuYWJsZVtQaWN0SW5kZXhdID09PSAnMScpXHJcbiAgICAgICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fcGljdHVyZVJlYWxbUGljdEluZGV4XSk7XHJcbiAgICAgICAgICAvLyBlbHNlIERvIG5vdGhpbmdcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+QlVHOiA0NDI3ODhcclxuICAvLy8gQ2hhbmdpbmcgZGVjaW1hbCBzZXBhcmF0b3IgaW4gdGhldyBwaWN0dXJlUmVhbCB0byB2YWx1ZSBnb3QgZnJvbSBFbnZpcm9ubWVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBjaGVja051bWVyaWNQaWN0dXJlKCk6IHZvaWQge1xyXG4gICAgbGV0IGluZGV4T2ZEZWM6IG51bWJlcjtcclxuICAgIGxldCBsYXN0RGVjOiBudW1iZXI7XHJcbiAgICBsZXQgbWF4TGVuZ3RoOiBudW1iZXI7XHJcbiAgICBsZXQgY3VyckluZHg6IG51bWJlcjtcclxuICAgIGxldCBQT0lOVF9ERUM6IHN0cmluZyA9IFwiLlwiOyAvLyB1c2VkIGluIFBJQ1RVUkUgZm9yIGRlY2ltYWwgc2VwYXJhdG9yXHJcblxyXG4gICAgbGV0IHBpYzogUElDID0gdGhpcy5fdmFsRGV0LmdldFBJQygpO1xyXG5cclxuICAgIGlmICh0aGlzLl9waWN0dXJlUmVhbCA9PSBudWxsIHx8IHRoaXMuX3BpY3R1cmVFbmFibGUgPT0gbnVsbCB8fCBwaWMuZ2V0QXR0cigpICE9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgIXBpYy53aXRoRGVjaW1hbCgpKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGFzdERlYyA9IHRoaXMuX3BpY3R1cmVSZWFsLmxhc3RJbmRleE9mKFBPSU5UX0RFQyk7XHJcbiAgICBtYXhMZW5ndGggPSB0aGlzLl9waWN0dXJlRW5hYmxlLmxlbmd0aDtcclxuICAgIGN1cnJJbmR4ID0gMDtcclxuICAgIHdoaWxlIChjdXJySW5keCA8IGxhc3REZWMpXHJcbiAgICB7XHJcbiAgICAgIGluZGV4T2ZEZWMgPSB0aGlzLl9waWN0dXJlRW5hYmxlLmluZGV4T2YoXCIxXCIsIGN1cnJJbmR4KTtcclxuXHJcbiAgICAgIGlmIChpbmRleE9mRGVjID09PSAtMSlcclxuICAgICAgLy8gbm90IGZvdW5kXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBlbHNlXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAoaW5kZXhPZkRlYyA9PT0gdGhpcy5fcGljdHVyZVJlYWwuaW5kZXhPZiggUE9JTlRfREVDLCBjdXJySW5keCkpXHJcbiAgICAgICAgLy8gaXQncyByZWFsIGRlY2ltYWwgcG9pbnQgYW5kIG5vdCBcXC4gaW50byB0aGUgcGljdHVyZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxldCBmaXJzdDogc3RyaW5nO1xyXG4gICAgICAgICAgbGV0IHNlY29uZDogc3RyaW5nO1xyXG5cclxuICAgICAgICAgIGZpcnN0ID0gc2Vjb25kID0gXCJcIjtcclxuICAgICAgICAgIGlmIChpbmRleE9mRGVjID09PSAwKVxyXG4gICAgICAgICAgLy8gdGhlIHBvaW50IG9uIHRoZSBmaXJzdCBwbGFjZSAuIyMjXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleE9mRGVjICsgMSA8IG1heExlbmd0aClcclxuICAgICAgICAgICAgLy8gb25seSAxIC5cclxuICAgICAgICAgICAgICBzZWNvbmQgPSB0aGlzLl9waWN0dXJlUmVhbC5zdWJzdHIoaW5kZXhPZkRlYyArIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoaW5kZXhPZkRlYyA9PT0gbWF4TGVuZ3RoKVxyXG4gICAgICAgICAgLy8gdGhlIHBvaW50IG9uIHRoZSBsYXN0IHBsYWNlICMjIy5cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmlyc3QgPSB0aGlzLl9waWN0dXJlUmVhbC5zdWJzdHIoMCAsIGluZGV4T2ZEZWMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaXJzdCA9IHRoaXMuX3BpY3R1cmVSZWFsLnN1YnN0cigwICwgaW5kZXhPZkRlYyk7XHJcbiAgICAgICAgICAgIHNlY29uZCA9IHRoaXMuX3BpY3R1cmVSZWFsLnN1YnN0cihpbmRleE9mRGVjICsgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9waWN0dXJlUmVhbCA9IGZpcnN0ICsgdGhpcy5fZGVjaW1hbCArIHNlY29uZDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY3VyckluZHggPSArK2luZGV4T2ZEZWM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IENvbXBhcmUgbmV3dmFsdWUgd2l0aCB0aGUgcmFuZ2U8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBuZXd2YWx1ZSBpZiBpdCdzIGluIHRoZSByYW5nZSwgb2xkdmFsdWUgb3RoZXJ3aXNlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZmlsbE51bWVyaWNCeVJhbmdlKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29udHJvbFBpYzogUElDID0gdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRQSUMoKTtcclxuICAgIGxldCBjb250aW51b3VzUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiA9IHRoaXMuX3ZhbERldC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKTtcclxuICAgIGxldCBkaXNjcmV0ZVJhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4gPSB0aGlzLl92YWxEZXQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpO1xyXG4gICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKGZhbHNlKTtcclxuXHJcbiAgICBsZXQgY2hlY2tlZFN0cjogc3RyaW5nID0gdGhpcy5zZXROdW1lcmljVmFsdWVXaXRob3V0UGljdHVyZSh0aGlzLl9uZXd2YWx1ZS50b1N0cmluZygpKTtcclxuXHJcblxyXG4gICAgaWYgKGNoZWNrZWRTdHIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucHJpbnRNZXNzYWdlKE1zZ0ludGVyZmFjZS5TVFJfUk5HX1RYVCwgdHJ1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9vbGR2YWx1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgICBsZXQgY2hlY2tlZE51bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUodGhpcy5fbmV3dmFsdWUudG9TdHJpbmcoKSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRQSUMoKSwgMCk7XHJcblxyXG4gICAgICBpZiAoZGlzY3JldGVSYW5nZVZhbHVlcyAhPT0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBkaXNjcmV0ZVJhbmdlVmFsdWVzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VJdGVtVmFsdWUxOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRShkaXNjcmV0ZVJhbmdlVmFsdWVzLmdldF9JdGVtKGkpLCBjb250cm9sUGljLCAwKTtcclxuXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoTlVNX1RZUEUubnVtX2NtcChjaGVja2VkTnVtLCByYW5nZUl0ZW1WYWx1ZTEpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25ld3ZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXRjaCAoZXhfQ0MpIHtcclxuICAgICAgICAgICAgLy8gc2tpcCBub24tbnVtZXJpYyByYW5nZSB2YWx1ZXNcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb250aW51b3VzUmFuZ2VWYWx1ZXMgIT09IG51bGwpIHtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgY29udGludW91c1JhbmdlVmFsdWVzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcblxyXG4gICAgICAgICAgbGV0IHJhbmdlSXRlbVZhbHVlMTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgICAgIGxldCByYW5nZUl0ZW1WYWx1ZTI6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgICAgICAgcmFuZ2VJdGVtVmFsdWUxLm51bV80X2Ffc3RkKGNvbnRpbnVvdXNSYW5nZVZhbHVlcy5nZXRfSXRlbShpKyspKTtcclxuICAgICAgICAgIHJhbmdlSXRlbVZhbHVlMi5udW1fNF9hX3N0ZChjb250aW51b3VzUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSkpO1xyXG5cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChOVU1fVFlQRS5udW1fY21wKGNoZWNrZWROdW0sIHJhbmdlSXRlbVZhbHVlMSkgIT09IC0xICYmIE5VTV9UWVBFLm51bV9jbXAocmFuZ2VJdGVtVmFsdWUyLCBjaGVja2VkTnVtKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbmV3dmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoIChleF8xNUIpIHtcclxuICAgICAgICAgICAgLy8gc2tpcCBub24tbnVtZXJpYyByYW5nZSB2YWx1ZXNcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybnMgYSBudW1lcmljIHZhbHVlIGV4dHJhY3RlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmdcclxuICAvLy8gb24gZmFpbHVyZSByZXR1cm5zIE5FR0FUSVZFX0lORklOSVRZXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj50aGUgc3RyaW5nIHRvIHBhcnNlPC9wYXJhbT5cclxuICBwcml2YXRlIGdldERvdWJsZVZhbCh2YWw6IHN0cmluZyk6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IGRvdEZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgbWludXNGb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGRpZ2l0Rm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBlbmRPZk51bTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gZmluZCB0aGUgZGVsZW1ldGluZyBub24gbnVtZXJpYyBjaGFyYWN0ZXJcclxuICAgIGZvciAoaSA9IDA7IGkgPCB2YWwubGVuZ3RoICYmICFlbmRPZk51bTsgaSsrKVxyXG4gICAge1xyXG4gICAgICBsZXQgYzogc3RyaW5nID0gdmFsW2ldO1xyXG4gICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpXHJcbiAgICAgICAgZGlnaXRGb3VuZCA9IHRydWU7XHJcbiAgICAgIGVsc2VcclxuICAgICAge1xyXG4gICAgICAgIHN3aXRjaCAoYylcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjYXNlICctJzpcclxuICAgICAgICAgICAgaWYgKGRpZ2l0Rm91bmQgfHwgZG90Rm91bmQgfHwgbWludXNGb3VuZClcclxuICAgICAgICAgICAgICBlbmRPZk51bSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1pbnVzRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlICcuJzpcclxuICAgICAgICAgICAgaWYgKGRvdEZvdW5kIHx8IG1pbnVzRm91bmQgJiYgIWRpZ2l0Rm91bmQpXHJcbiAgICAgICAgICAgICAgZW5kT2ZOdW0gPSB0cnVlO1xyXG4gICAgICAgICAgICBkb3RGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgJyAnOlxyXG4gICAgICAgICAgICBpZiAoZGlnaXRGb3VuZCB8fCBkb3RGb3VuZCB8fCBtaW51c0ZvdW5kKVxyXG4gICAgICAgICAgICAgIGVuZE9mTnVtID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgZW5kT2ZOdW0gPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZW5kT2ZOdW0pIHtcclxuICAgICAgaSA9IGkgLSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpID4gMCkge1xyXG4gICAgICByZXR1cm4gTk51bWJlci5QYXJzZSh2YWwuc3Vic3RyKDAsIGkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLUluZmluaXR5O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnNldCBOdW1lcmljIHZhbHVlIFdpdGhvdXQgUGljdHVyZSwgZmlsdGVyIGlucHV0IGZyb20gdXNlcjwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBwdXJlIG51bWJlciwgd2l0aG91dCBwaWN0dXJlIG1hc2s8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzZXROdW1lcmljVmFsdWVXaXRob3V0UGljdHVyZSh2YWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY2hlY2tlZFN0cjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHZhbC5sZW5ndGgpO1xyXG4gICAgbGV0IGlzRmlyc3REZWNpbWFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgY3VyckNoYXI6IHN0cmluZztcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fcGljdHVyZVJlYWwubGVuZ3RoICYmIGkgPCB2YWwubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgIGN1cnJDaGFyID0gdmFsW2ldO1xyXG4gICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY3VyckNoYXIpKVxyXG4gICAgICAgIGNoZWNrZWRTdHIuQXBwZW5kKGN1cnJDaGFyKTtcclxuICAgICAgZWxzZSBpZiAoY3VyckNoYXIgPT09IHRoaXMuX2Vudmlyb25tZW50LkdldERlY2ltYWwoKSAmJiAhaXNGaXJzdERlY2ltYWwpXHJcbiAgICAgIHtcclxuICAgICAgICBjaGVja2VkU3RyLkFwcGVuZChOU3RyaW5nLlRvQ2hhckFycmF5KE51bWJlckZvcm1hdEluZm8uTnVtYmVyRGVjaW1hbFNlcGFyYXRvcikudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgaXNGaXJzdERlY2ltYWwgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGN1cnJDaGFyID09PSAnLScgJiYgdGhpcy5fdmFsRGV0LmdldElzTmVnYXRpdmUoKSlcclxuICAgICAgICBjaGVja2VkU3RyLkFwcGVuZChOU3RyaW5nLlRvQ2hhckFycmF5KE51bWJlckZvcm1hdEluZm8uTmVnYXRpdmVTaWduKS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGVja2VkU3RyLlRvU3RyaW5nKCkubGVuZ3RoID09PSAwKVxyXG4gICAge1xyXG4gICAgICB0aGlzLnByaW50TWVzc2FnZShNc2dJbnRlcmZhY2UuU1RSX0VSUl9OVU0sIGZhbHNlKTtcclxuICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKHRydWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoZWNrZWRTdHIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgbmV3dmFsdWUgZm9ybWF0IG1hdGNoZXMgdGhlIG51bWVyaWMgcGljIGZvcm1hdC48L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGNoZWNrTnVtZXJpY0luRGVjRm9ybWF0KCk6IGJvb2xlYW4ge1xyXG5cclxuXHJcbiAgICBsZXQgcGljOiBQSUMgPSB0aGlzLl92YWxEZXQuZ2V0UElDKCk7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IERlYzogbnVtYmVyO1xyXG4gICAgbGV0IFdob2xlOiBudW1iZXI7XHJcbiAgICBsZXQgRGVjUG9zOiBudW1iZXI7XHJcbiAgICBsZXQgZGVjaW1hbENoYXI6IHN0cmluZyA9IHRoaXMuX2Vudmlyb25tZW50LkdldERlY2ltYWwoKTtcclxuXHJcbiAgICAvLyBDb3VudCBudW1iZXIgb2YgZGlnaXRzIGFuZCBwb3NpdGlvbiBvZiBkZWNpbWFsIHBvaW50XHJcblxyXG4gICAgRGVjID0gMDtcclxuICAgIFdob2xlID0gMDtcclxuICAgIERlY1BvcyA9IC0xO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9uZXd2YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgaWYgKHBpYy5pc051bWVyaWMoaSkpXHJcbiAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX25ld3ZhbHVlW2ldKSlcclxuICAgICAgICAvLyB3aGVuIGRlYyBwb3Mgbm90IGZvdW5kLCBjb3VudCB3aG9sZXMsIGlmIGZvdW5kLCBjb3VudCBkZWMuXHJcbiAgICAgICAgICBpZiAoRGVjUG9zID49IDApXHJcbiAgICAgICAgICAgIERlYysrO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBXaG9sZSsrO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX25ld3ZhbHVlW2ldID09PSBkZWNpbWFsQ2hhcilcclxuICAgICAgICAgIERlY1BvcyA9IGk7XHJcblxyXG4gICAgLy8gZGlkIHdlIGV4Y2VlZCB0aGUgbWFzayA/XHJcbiAgICBpZiAocGljLmdldFdob2xlcygpIDwgV2hvbGUgfHwgcGljLmdldERlYygpIDwgRGVjKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmNoZWNrICYgdmFsaWRhdGUgRGF0ZSBmaWVsZCBieSBoaXMgb2xkL25ldyB2YWx1ZSBhbmQgMiBwaWN0dXJlczpcclxuICAvLy8gUmVhbCBhbmQgRW5hYmxlXHJcbiAgLy8vIDEuY2hlY2sgaWYgbmV3dmFsdWUgY29tcGxldGUgd2l0aCBwaWN0dXJlcywgb3RoZXJ3aXNlIHJldHVybiBvbGR2YWx1ZVxyXG4gIC8vLyAyLmNoZWNrIGlmIG5ld3ZhbHVlIGNvbXBsZXRlIHdpdGggcmFuZ2VcclxuICAvLy8gMi4xIGNvbXBsZXRlIHZhbHVlLCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlICByZXR1cm4gb2xkdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gbmV3IHZhbHVlIG9mIHZhbGlkYXRlZCBmaWVsZDwvcmV0dXJucz5cclxuICBwcml2YXRlIGNoZWNrRGF0ZUZpZWxkKCk6IERhdGUge1xyXG5cclxuICAgIGxldCBuZXdEYXRlOiBEYXRlID0gKHRoaXMuX25ld3ZhbHVlID09IG51bGwgPyBudWxsIDogbmV3IERhdGUodGhpcy5fbmV3dmFsdWUpKTtcclxuICAgICB0aGlzLnNldFZhbGlkYXRpb25GYWlsZWQoZmFsc2UpO1xyXG5cclxuICAgIGlmICh0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmlzRGF0ZVplcm8odGhpcy5fbmV3dmFsdWUpKSB7XHJcbiAgICAgIC8vIGdldCBkZWZhdWx0IHZhbHVlIG9mIHRoZSBmaWVsZFxyXG4gICAgICBsZXQgZGVmYXVsdE1nVmFsdWU6IHN0cmluZyA9IHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0RmllbGQoKS5nZXREZWZhdWx0VmFsdWUoKTtcclxuXHJcbiAgICAgIG5ld0RhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLm1nMmRpc3AoZGVmYXVsdE1nVmFsdWUsIFwiXCIsIHRoaXMuX3ZhbERldC5nZXRQSUMoKSwgdHJ1ZSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAvLyByYW5nZSBkYXRlXHJcbiAgICAgIGlmICh0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCkgIT0gbnVsbCB8fCB0aGlzLl92YWxEZXQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpICE9IG51bGwpXHJcbiAgICAgICAgbmV3RGF0ZSA9IHRoaXMuZmlsbERhdGVCeVJhbmdlKHRoaXMuX3ZhbERldC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKSwgdGhpcy5fdmFsRGV0LmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKSwgdGhpcy5fbmV3dmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld0RhdGU7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkFkZCBmb3VuZCBpbiBuZXd2YWx1ZSBudW1iZXJzKDIgb3IgMyBsZXR0ZXJzKSB0byBidWZmZXIgYW5kIHJldHVyblxyXG4gIC8vLyBsYXN0IGZvdW5kIG51bWJlciBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3VyclZhbHVlXCI+aW4gbmV3dmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImJ1ZmZlclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidHlwZVwiPi0gd2hpY2ggdHlwZSBvZiBwb3NpdGlvbmFsIGRpcmVjdGl2ZSwgZm9yIGNoZWNraW5nIHZhbGlkaXR5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGN1cnJWYWx1ZSBpbiBuZXd2YWx1ZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGFkZDJEYXRlKGN1cnJWYWx1ZTogbnVtYmVyLCBidWZmZXI6IFN0cmluZ0J1aWxkZXIsIHR5cGU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhcnQ6IG51bWJlciA9IGN1cnJWYWx1ZTtcclxuICAgIGxldCBjdXJyQWRkOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIodGhpcy5fbmV3dmFsdWUubGVuZ3RoKTtcclxuICAgIGxldCBsZXR0ZXJzOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSlcclxuICAgIHtcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0REOlxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfRERERDpcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX01NRDpcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lZOlxyXG4gICAgICAgIGxldHRlcnMgPSAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0RERDpcclxuICAgICAgICBsZXR0ZXJzID0gMztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZWVlZOlxyXG4gICAgICAgIGxldHRlcnMgPSA0O1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1c6XHJcbiAgICAgICAgbGV0dGVycyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWUo6ICAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgICAgbGV0dGVycyA9IDI7XHJcbiAgICAgICAgdHlwZSA9IFBJQ0ludGVyZmFjZS5QSUNfWVk7IC8vIFBJQ19ZSiB3aWxsIGJlIGhhbmRsZWQgYXMgUElDX1lZIGluIHRoaXMgbWV0aG9kLlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlIChzdGFydCA8IHRoaXMuX25ld3ZhbHVlLmxlbmd0aCAmJiAhVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQodGhpcy5fbmV3dmFsdWUuY2hhckF0KHN0YXJ0KSkpXHJcbiAgICAgIHN0YXJ0Kys7IC8vIGZpbmQgZmlyc3QgZGlnaXRcclxuXHJcblxyXG4gICAgaWYgKHN0YXJ0ID09PSB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggJiYgKHRoaXMuX25ld3ZhbHVlLmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9uZXd2YWx1ZSA9PT0gXCIwXCIpKSB7XHJcbiAgICAgIGZvciAobGV0IG51bDogbnVtYmVyID0gMDsgbnVsIDwgbGV0dGVyczsgbnVsID0gbnVsICsgMSkge1xyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoJzAnKS8qJzAnKi87XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGN1cnJWYWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN0YXJ0ID09PSB0aGlzLl9uZXd2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5fbmV3dmFsdWUgPSB0aGlzLl9uZXd2YWx1ZSArIFwiMFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGV0dGVycyAmJiBpIDwgdGhpcy5fbmV3dmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX25ld3ZhbHVlLmNoYXJBdChpKSkpXHJcbiAgICAgICAgY3VyckFkZC5BcHBlbmQodGhpcy5fbmV3dmFsdWUuY2hhckF0KGkpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyQWRkLkxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjdXJyQWRkLkFwcGVuZCgnMCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBhZGQ6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UoY3VyckFkZC5Ub1N0cmluZygpKTtcclxuXHJcbiAgICAvLyBib3VuZGFyeSBjb25kaXRpb25zIGNhc2VzOlxyXG4gICAgaWYgKChhZGQgPCAxICYmIHR5cGUgIT09IFBJQ0ludGVyZmFjZS5QSUNfWVlZWSAmJiB0eXBlICE9PSBQSUNJbnRlcmZhY2UuUElDX1lZKSB8fFxyXG4gICAgICAgKGFkZCA+IDMxICYmICh0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX0REIHx8IHR5cGUgPT09ICBQSUNJbnRlcmZhY2UuUElDX0REREQpKSB8fFxyXG4gICAgICAoYWRkID4gMTIgJiYgdHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19NTUQpIHx8IChhZGQgPiA3ICYmIHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfVykpIHtcclxuICAgICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKE1zZ0ludGVyZmFjZS5TVFJfRVJSX0RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoYW4gcGljdHVyZSBpcyBZWVlZIGFuZCBpbnNlcnRlZCAwLTIgbnVtYmVycywgdXNlIENFTlRVUkUgdmFsdWUsIG90aGVyd2lzZSBhZGQgemVyb3MgYmVmb3JlIHRoZSB5ZWFyXHJcbiAgICBpZiAodHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZICYmIHRoaXMuX2Vudmlyb25tZW50LkdldENlbnR1cnkodGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSkgPiA5OTkgJiYgY3VyckFkZC5MZW5ndGggPCAzKVxyXG4gICAgICBjdXJyQWRkID0gdGhpcy5jaGVja0NlbnR1cnkoYWRkKTtcclxuXHJcbiAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgbGV0dGVycyAtIGN1cnJBZGQuTGVuZ3RoOyBqID0gaiArIDEpIHtcclxuICAgICAgYnVmZmVyLkFwcGVuZCgnMCcpLyonMCcqLztcclxuICAgIH1cclxuICAgIGJ1ZmZlci5BcHBlbmQoY3VyckFkZC5Ub1N0cmluZygpKTtcclxuICAgIHJldHVybiAgaTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5BZGQgZm91bmQgaW4gbmV3dmFsdWUgbGV0dGVycyB0byBidWZmZXIgYW5kIHJldHVyblxyXG4gIC8vLyBsYXN0IGZvdW5kIG51bWJlciBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3VyclZhbHVlXCI+aW4gbmV3dmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxldHRlcnNcIj5hbW91bnQgb2YgbGV0dGVycyB0byBpbnNlcnQgdG8gYnVmZmVyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJidWZmZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gY3VyclZhbHVlIGluIG5ld3ZhbHVlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYWRkTTJEYXRlKGN1cnJWYWx1ZTogbnVtYmVyLCBsZXR0ZXJzOiBudW1iZXIsIGJ1ZmZlcjogU3RyaW5nQnVpbGRlciwgdHlwZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBhcnJheTogc3RyaW5nW107XHJcbiAgICBsZXQgcmVzdWx0OiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1NIHx8IHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1EKSB7XHJcbiAgICAgIGlmICh0aGlzLmhlYnJldykge1xyXG4gICAgICAgIGFycmF5ID0gSGVicmV3RGF0ZS5HZXRMb2NhbE1vbnRocygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBtZXNzYWdlU3RyaW5nOiBzdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuTU9OVEhTX1BUUik7XHJcbiAgICAgICAgYXJyYXkgPSBEYXRlVXRpbC5nZXRMb2NhbE1vbnRocyhtZXNzYWdlU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX1dXVyB8fCB0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX1cpIHtcclxuICAgICAgICBpZiAodGhpcy5oZWJyZXcpIHtcclxuICAgICAgICAgIGFycmF5ID0gSGVicmV3RGF0ZS5HZXRMb2NhbERvd3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZGF5U3RyOiBzdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuREFZU19QVFIpO1xyXG4gICAgICAgICAgYXJyYXkgPSBEYXRlVXRpbC5nZXRMb2NhbERheXMoZGF5U3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfQkIpIHsgLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgICAgICAgYXJyYXkgPSBVdGlsRGF0ZUpwbi5nZXRBcnJheURvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICh0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX0pZMSB8fCB0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX0pZMiB8fCB0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX0pZNClcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX25ld3ZhbHVlLmxlbmd0aCA8IGN1cnJWYWx1ZSArIGxldHRlcnMpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgV3JvbmdGb3JtYXRFeGNlcHRpb24oTXNnSW50ZXJmYWNlLlNUUl9FUlJfREFURSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IHRoaXMuX25ld3ZhbHVlLnN1YnN0cihjdXJyVmFsdWUsIGxldHRlcnMpO1xyXG4gICAgICAgICAgICBidWZmZXIuQXBwZW5kKHRleHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gY3VyclZhbHVlICsgdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBjdXJyVmFsdWUgKyBsZXR0ZXJzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9uZXd2YWx1ZS5sZW5ndGggPCBjdXJyVmFsdWUpIHtcclxuICAgICAgY3VyclZhbHVlID0gdGhpcy5fbmV3dmFsdWUubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgbGV0IG1heDogbnVtYmVyID0gdGhpcy5nZXRNb250aE9yV2Vlayh0aGlzLl9uZXd2YWx1ZS5zdWJzdHIoY3VyclZhbHVlKSwgbGV0dGVycywgdHlwZSk7XHJcblxyXG4gICAgaWYgKGFycmF5W21heF0udHJpbSgpLmxlbmd0aCA+PSBsZXR0ZXJzKSB7XHJcbiAgICAgIGJ1ZmZlci5BcHBlbmQoYXJyYXlbbWF4XS50cmltKCkuc3Vic3RyKDAsIGxldHRlcnMpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBidWZmZXIuQXBwZW5kKGFycmF5W21heF0udHJpbSgpKTtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gbGV0dGVycyAtIGFycmF5W21heF0udHJpbSgpLmxlbmd0aDsgaSA+IDA7IGkgPSBpIC0gMSkge1xyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoJyAnKS8qJyAnKi87XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdXJyVmFsdWUgKyBsZXR0ZXJzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldCBlbmQgaW5kZXggb2YgZXZlcnkgbnVtZXJpYyBibG9jayBpbiB0aGUgbWFzayBmcm9tIG1hc2tbY3VyclZhbHVlXTwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IGVuZCBvZiBudW1lcmljIGJsb2NrIGluIG5ld1ZhbHVlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0RW5kT2ZOdW1lcmljQmxvY2soY3VyclZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgd2hpbGUgKGN1cnJWYWx1ZSA8IHRoaXMuX25ld3ZhbHVlLmxlbmd0aCAmJiAhVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQodGhpcy5fbmV3dmFsdWUuY2hhckF0KGN1cnJWYWx1ZSkpKSB7XHJcbiAgICAgIGN1cnJWYWx1ZSA9IGN1cnJWYWx1ZSArIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VyclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmFkZGVkIHN1ZmZpeCB0byByZWxldmFudCBudW1iZXIgb2YgdGhlIGRheTwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFkZERhdGVTdWZmaXgobGFzdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB0aGVudW1iZXI6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UobGFzdCk7XHJcbiAgICBpZiAodGhlbnVtYmVyID09PSAxIHx8IHRoZW51bWJlciA9PT0gMjEgfHwgdGhlbnVtYmVyID09PSAzMSlcclxuICAgICAgcmV0dXJuIFwic3RcIjtcclxuICAgIGVsc2UgaWYgKHRoZW51bWJlciA9PT0gMiB8fCB0aGVudW1iZXIgPT09IDIyKVxyXG4gICAgICByZXR1cm4gXCJuZFwiO1xyXG4gICAgZWxzZSBpZiAodGhlbnVtYmVyID09PSAzIHx8IHRoZW51bWJlciA9PT0gMjMpXHJcbiAgICAgIHJldHVybiBcInJkXCI7XHJcbiAgICByZXR1cm4gXCJ0aFwiO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldCBzaXplIG9mIGJsb2NrIGxldHRlcnMgb2YgdHlwZSAndHlwZScsIHdoaWNoIHN0YXJ0IGF0ICdzdGFydCc8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBnZXRTaXplT2ZCbG9jayhzdGFydDogbnVtYmVyLCB0eXBlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGxldHRlcnM6IG51bWJlciA9IHN0YXJ0ICsgMTtcclxuICAgIHdoaWxlIChsZXR0ZXJzIDwgdGhpcy5fcGljdHVyZS5sZW5ndGggJiYgdGhpcy5fcGljdHVyZS5jaGFyQ29kZUF0KGxldHRlcnMpID09PSB0eXBlKVxyXG4gICAgbGV0dGVycysrO1xyXG4gICAgcmV0dXJuIGxldHRlcnMgLSBzdGFydDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQgU3RyaW5nIHBhcnQvZnVsbCBuYW1lIG9mIG1vbnRoL2RheSBvZiB3ZWVrPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1vbnRoXCI+cGFydC9mdWxsIG5hbWUgb2YgbW9udGgvZGF5IG9mIHdlZWs8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1heFwiPm9mIHBvc3NpYmxlIGxldHRlcnMgaW4gbW9udGgvZGF5IG9mIHdlZWssIHNpemUgb2YgYmxvY2sgaW4gcGljdHVyZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidHlwZTpcIj5QSUNfICB3ZWVrfG1vbnRoPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG51bWJlciBvZiBtb250aCAxLTEyLCBvciBkYXkgb2Ygd2VlayAxLTc8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRNb250aE9yV2Vlayhtb250aF9zdHI6IHN0cmluZywgbGV0dGVyczogbnVtYmVyLCB0eXBlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGFycmF5OiBzdHJpbmdbXTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19NTU0gfHwgdHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19NTUQpIHtcclxuICAgICAgLy8gTW9udGhcclxuICAgICAgICBpZiAodGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICBhcnJheSA9IEhlYnJld0RhdGUuR2V0TG9jYWxNb250aHMoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGV0IG1vbnRoU3RyOiBTdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuTU9OVEhTX1BUUik7XHJcbiAgICAgICAgICBhcnJheSA9IERhdGVVdGlsLmdldExvY2FsTW9udGhzKG1vbnRoU3RyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19XV1cgfHwgdHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19XKVxyXG4gICAgICAvLyBXZWVrXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAodGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICBhcnJheSA9IEhlYnJld0RhdGUuR2V0TG9jYWxEb3dzKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxldCBkYXlTdHI6IFN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5EQVlTX1BUUik7XHJcbiAgICAgICAgICBhcnJheSA9IERhdGVVdGlsLmdldExvY2FsRGF5cyhkYXlTdHIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfQkIpXHJcbiAgICAgIC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAge1xyXG4gICAgICAgIGFycmF5ID0gVXRpbERhdGVKcG4uZ2V0QXJyYXlEb3coKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm4gMTsgLy8gb25seSB3ZWVrIG9yIG1vbnRoIHBvc3NpYmxlIC0+IGRpZmZhdWx0IDEuXHJcbiAgICAgIH1cclxuXHJcbiAgICBpZiAobGV0dGVycyA+IG1vbnRoX3N0ci5sZW5ndGgpXHJcbiAgICAvLyBjdXQgbGV0dGVyIGlmIGl0J3MgIGVuZCBvZiBzdHJpbmdcclxuICAgICAgbGV0dGVycyA9IG1vbnRoX3N0ci5sZW5ndGg7XHJcblxyXG4gICAgaWYgKHRoaXMuaGVicmV3KVxyXG4gICAge1xyXG4gICAgICBsZXQgaHN0cjogc3RyaW5nID0gTlN0cmluZy5UcmltU3RhcnQobW9udGhfc3RyKS5zdWJzdHIoMCwgbGV0dGVycykudHJpbSgpO1xyXG5cclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAvLyBzdGFydCBjaGVja2luZyBmcm9tIDFzdCBtZW1iZXIsIGJlY2F1c2UgMCA9IFwiXCJcclxuICAgICAge1xyXG4gICAgICAgIGlmIChhcnJheVtpXS50cmltKCkgPT09IGhzdHIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKGkgPT09IDE0KVxyXG4gICAgICAgICAgICBpID0gNjtcclxuICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIHRoZSBudW1iZXIgaW5zZXJ0ZWQgYW5kIG5vdCBzdHJpbmcgLT4gZmluZCBtb3VudGgvZGF5IG9mIHdlZWsgYnkgbnVtYmVyIDEtMTJ8MS03XHJcblxyXG4gICAgICAgIGxldCBzdHI6IHN0cmluZyA9IG1vbnRoX3N0ci5zdWJzdHIoMCwgbGV0dGVycykudHJpbSgpO1xyXG4gICAgICAgIGxldCBudW1CdWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihzdHIubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoc3RyW2ldKSlcclxuICAgICAgICAgICAgbnVtQnVmZmVyLkFwcGVuZChzdHJbaV0pO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0aGVOdW1iZXI6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UobnVtQnVmZmVyLlRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGlmICh0aGVOdW1iZXIgPCAxKVxyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1NIHx8IHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1EKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmICh0aGVOdW1iZXIgPiAxMilcclxuICAgICAgICAgICAgcmV0dXJuIDEyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX1dXVyB8fCB0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX1cgfHwgdHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19CQilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgICAgICBpZiAodGhlTnVtYmVyID4gNylcclxuICAgICAgICAgICAgcmV0dXJuIDc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGVOdW1iZXI7XHJcbiAgICAgICAgfVxyXG4gICAgY2F0Y2ggKGV4XzIxQSkge1xyXG4gICAgICAgICAgLy8gZG9Ob3RoaW5nX1N0cmluZ0luc2VydGVkXHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBpbnNlcnRlZCBzdHJpbmcgLSBuYW1lIG9mIG1vbnRofGRheSBvZiB3ZWVrIC0+dHJ5IGlkZW50eWZ5IGl0XHJcbiAgICBsZXQgZm91bmQ6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4oYXJyYXkubGVuZ3RoKTtcclxuICAgIGxldCBmcm9tOiBudW1iZXI7XHJcbiAgICBsZXQgbWF4OiBudW1iZXIgPSAtMTsgLy8gbnVtYmVyIG9mIGZvdW5kIG1vbnRoL2RheSBvZiB3ZWVrXHJcblxyXG5cclxuICAgIGZvciAobGV0IHRtcDogbnVtYmVyID0gMTsgdG1wIDwgYXJyYXkubGVuZ3RoOyB0bXArKylcclxuICAgIC8vIHN0YXJ0IGNoZWNraW5nIGZyb20gMXN0IG1lbWJlciwgYmVjYXVzZSAwID0gXCJcIlxyXG4gICAge1xyXG4gICAgICBmb3VuZFt0bXBdID0gMDtcclxuICAgICAgZnJvbSA9IDA7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBhcnJheVt0bXBdLmxlbmd0aCAmJiBmcm9tIDwgbW9udGhfc3RyLmxlbmd0aCAmJiBpIDwgbGV0dGVyczsgaSsrLCBmcm9tKyspXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAoYXJyYXlbdG1wXS50b0xvd2VyQ2FzZSgpW2ldID09PSBtb250aF9zdHIudG9Mb3dlckNhc2UoKVtmcm9tXSlcclxuICAgICAgICAgIGZvdW5kW3RtcF0rKztcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZyb20gPT09IGxldHRlcnMgfHwgZnJvbSA9PT0gYXJyYXlbdG1wXS5sZW5ndGgpXHJcbiAgICAgIC8vIGFsbCBsZXR0ZXJzIGZvdW5kXHJcbiAgICAgIHtcclxuICAgICAgICBtYXggPSB0bXA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF4ID09PSAtMSlcclxuICAgICAgbWF4ID0gdGhpcy5maW5kTWF4KGZvdW5kKTtcclxuICAgIHJldHVybiBtYXg7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmlzIG51bWVyaWMgZGF0YSBhbGxvd2VkIGluIGRhdGVcclxuICAvLy8gcmV0dXJuIHRydWUgaWYgaXQgaXMgYWxsb3dlZCwgb3RoZXJ3aXNlIGZhbHNlPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaXNOdW1iZXJBbGxvd2VkSW5EYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3BpY3R1cmUubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgIGlmICh0aGlzLmlzRGF0ZVBvc2l0aW9uYWxOdW1lcmljRGlyZWN0aXZlKHRoaXMuX3BpY3R1cmVbaV0pKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmZpbmQgaWYgYWxsIG51bWJlcnMgb2YgdGhlIG5ldyB1c2VyIGluc2VydGVkIHZhbHVlIGFyZSAwXHJcbiAgLy8vIHJldHVybiB0cnVlIGlmIGFsbCBudW1iZXJzIGluIHRoZSBpbnB1dCBhcmUgMCwgb3RoZXJ3aXNlIHRydWU8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBpc0FsbE51bWJlcnMwKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9uZXd2YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX25ld3ZhbHVlW2ldO1xyXG5cclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGN1cnJDaHIpICYmIGN1cnJDaHIgIT09ICcwJylcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Y2hlY2sgdmFsaWRpdHkgb2YgWWVhciBmb3IgWVlZWSBwYXJ0IG9mIHRoZSBtYXNrPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInllYXJJblwiPmluc2VydGVkIGJ5IHVzZXI8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gY2FsY3VsYXRlZCBieSBlbnZpcm9ubWVudC5jZW50dXJ5IHJpZ2h0IHZhbHVlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgY2hlY2tDZW50dXJ5KHllYXJJbjogbnVtYmVyKTogU3RyaW5nQnVpbGRlciB7XHJcbiAgICBsZXQgb3V0VmFsOiBudW1iZXI7XHJcbiAgICBsZXQgc3RhcnRfY2VudHVyeTogbnVtYmVyID0gdGhpcy5fZW52aXJvbm1lbnQuR2V0Q2VudHVyeSh0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpKTtcclxuICAgIGxldCBjZW50dXJ5OiBudW1iZXIgPSBNYXRoLmZsb29yKHN0YXJ0X2NlbnR1cnkgLyAxMDApO1xyXG4gICAgbGV0IHllYXJzOiBudW1iZXIgPSBzdGFydF9jZW50dXJ5ICUgMTAwO1xyXG4gICAgaWYgKHllYXJJbiA+PSB5ZWFycyAmJiB5ZWFySW4gIT09IDApXHJcbiAgICAgIG91dFZhbCA9IChjZW50dXJ5ICogMTAwICsgeWVhckluKTtcclxuICAgIGVsc2VcclxuICAgICAgb3V0VmFsID0gKCgrK2NlbnR1cnkpICogMTAwICsgeWVhckluKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFN0cmluZ0J1aWxkZXIob3V0VmFsLnRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmNoZWNrIGlmIHRoZSBkYXRlIGxlZ2FsIGZvciBwaWN0dXJlIHJhbmdlLCB1c2VkIGZvciB2YWxpZGF0aW9uIGRhdGUgMDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJDb250aW51b3VzUmFuZ2VcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIkRpc2NyZXRlUmFuZ2VcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRhdGVcIj5pbnRlZ2VyIC0gbWFnaWMgZGF0ZSBudW1iZXIgb2YgZGF5cyBmcm9tIDAxLjAxLjAwMDA8L3BhcmFtPlxyXG4gIHByaXZhdGUgaXNEYXRlTGVnYWw0UmFuZ2UoQ29udGludW91c1JhbmdlOiBMaXN0PHN0cmluZz4sIERpc2NyZXRlUmFuZ2U6IExpc3Q8c3RyaW5nPiwgY3VyckRhdGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cclxuICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3ZhbERldC5nZXRQSUMoKTtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgZG93bkRhdGU6IG51bWJlcjtcclxuICAgIGxldCB0b3BEYXRlOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKENvbnRpbnVvdXNSYW5nZSAhPSBudWxsKVxyXG4gICAge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgQ29udGludW91c1JhbmdlLmxlbmd0aCAtIDE7IGkrKylcclxuICAgICAge1xyXG4gICAgICAgIGRvd25EYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5hXzJfZGF0ZV9waWMoQ29udGludW91c1JhbmdlLmdldF9JdGVtKGkpLCBwaWMsIHBpYy5nZXRNYXNrKCksIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG4gICAgICAgIHRvcERhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmFfMl9kYXRlX3BpYyhDb250aW51b3VzUmFuZ2UuZ2V0X0l0ZW0oKytpKSwgcGljLCBwaWMuZ2V0TWFzaygpLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICBpZiAoY3VyckRhdGUgPj0gZG93bkRhdGUgJiYgY3VyckRhdGUgPD0gdG9wRGF0ZSlcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKERpc2NyZXRlUmFuZ2UgIT0gbnVsbClcclxuICAgIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IERpc2NyZXRlUmFuZ2UubGVuZ3RoOyBpKyspXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAoY3VyckRhdGUgPT09IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuYV8yX2RhdGVfcGljKERpc2NyZXRlUmFuZ2UuZ2V0X0l0ZW0oaSksIHBpYywgcGljLmdldE1hc2soKSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSkpXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdGhlIGRhdGUgaXMgbm90IGluIHRoZSByYW5nZVxyXG4gICAgLy8gcmV0dXJuIGZhbHNlO1xyXG4gICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Y2hlY2sgYW5kIGZpbGwgREFURSB0eXBlIGJ5IHJhbmdlPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZmlsbERhdGVCeVJhbmdlKENvbnRpbnVvdXNSYW5nZTogTGlzdDxzdHJpbmc+LCBEaXNjcmV0ZVJhbmdlOiBMaXN0PHN0cmluZz4sIGJ1ZmZlcjogRGF0ZSk6IERhdGUge1xyXG4gICAgbGV0IHBpYzogUElDID0gdGhpcy5fdmFsRGV0LmdldFBJQygpO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBkb3duRGF0ZTogbnVtYmVyO1xyXG4gICAgbGV0IHRvcERhdGU6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgY3VyckRhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmZyb21OYXRpdmVEYXRlVG9NZ0RhdGVOdW1iZXIoYnVmZmVyLCBwaWMsIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG5cclxuICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZhaWxlZChmYWxzZSk7XHJcbiAgICBpZiAoQ29udGludW91c1JhbmdlICE9IG51bGwpIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IENvbnRpbnVvdXNSYW5nZS5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICBkb3duRGF0ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuYV8yX2RhdGVfcGljKENvbnRpbnVvdXNSYW5nZS5nZXRfSXRlbShpKSwgcGljLCBwaWMuZ2V0TWFzaygpLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICB0b3BEYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5hXzJfZGF0ZV9waWMoQ29udGludW91c1JhbmdlLmdldF9JdGVtKCsraSksIHBpYywgcGljLmdldE1hc2soKSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSk7XHJcbiAgICAgICAgaWYgKGN1cnJEYXRlID49IGRvd25EYXRlICYmIGN1cnJEYXRlIDw9IHRvcERhdGUpXHJcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYnVmZmVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChEaXNjcmV0ZVJhbmdlICE9IG51bGwpIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IERpc2NyZXRlUmFuZ2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoY3VyckRhdGUgPT09IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuYV8yX2RhdGVfcGljKERpc2NyZXRlUmFuZ2UuZ2V0X0l0ZW0oaSksIHBpYywgcGljLmdldE1hc2soKSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSkpIHtcclxuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShidWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdGhlIGRhdGUgaXMgbm90IGluIHRoZSByYW5nZVxyXG4gICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmNoZWNrIGlmIGRheSBzdWl0YWJsZSAobm90IGJpZ2dlciB0aGFuIG1heCkgZm9yIFllYXIgYW5kIE1vbnRoPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRhdGVcIj51c2VyIGluc2VydGVkIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNEb3lcIj5pcyBwaWN0dXJlIG9mIG5lZWRlZCBkYXkgaXMgREREIC0gZGF5IG9mIHllYXI8L3BhcmFtPlxyXG4gIHByaXZhdGUgY2hlY2tEYXkoZGF0ZTogc3RyaW5nLCBpc0RveTogYm9vbGVhbik6IFN0cmluZ0J1aWxkZXIge1xyXG5cclxuICAgIGxldCBkYXk6IG51bWJlciA9IHRoaXMuZ2V0RGF0ZUVsZW1lbnQoZGF0ZSwgRGF0ZUVsZW1lbnQuREFZKTtcclxuICAgIGlmIChkYXkgPCAyOSAmJiAhaXNEb3kpXHJcbiAgICAgIHJldHVybiBuZXcgU3RyaW5nQnVpbGRlcihkYXRlKTtcclxuXHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gdGhpcy5nZXREYXRlRWxlbWVudChkYXRlLCBEYXRlRWxlbWVudC5ZRUFSKTtcclxuXHJcbiAgICBpZiAoIWlzRG95KVxyXG4gICAge1xyXG4gICAgICBpZiAoeWVhci50b1N0cmluZygpLmxlbmd0aCA8IDMpXHJcbiAgICAgICAgeWVhciA9IE5OdW1iZXIuUGFyc2UodGhpcy5jaGVja0NlbnR1cnkoeWVhcikuVG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5fZW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUodGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSkgPT09ICdCJylcclxuICAgICAgICB5ZWFyIC09IFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUDtcclxuXHJcbiAgICAgIGxldCBtb250aDogbnVtYmVyID0gdGhpcy5nZXREYXRlRWxlbWVudChkYXRlLCBEYXRlRWxlbWVudC5NT05USCk7XHJcblxyXG4gICAgICAvLyBpZiBkYXkgbm90IGNvbnNpc3RhaW5lZCB0byB5ZWFyICYgbW9udGggLSBjaGFuZ2UgZGF5XHJcbiAgICAgIGxldCBkYXlNYXg6IG51bWJlciA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aCh5ZWFyLCBtb250aCk7XHJcbiAgICAgIGlmIChkYXkgPiBkYXlNYXgpXHJcbiAgICAgIHtcclxuICAgICAgICB0aHJvdyBuZXcgV3JvbmdGb3JtYXRFeGNlcHRpb24oTXNnSW50ZXJmYWNlLlNUUl9FUlJfREFURSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgLy8gaWYgbW9udGggbm90IGNvbnNpc3RhaW5lZCB0byBkYXkoREREKSAtIGNoYW5nZSBtb250aFxyXG4gICAgICBsZXQgbW9udGhSZWFsOiBudW1iZXIgPSB0aGlzLmdldE1vbnRoQnlEYXkoeWVhciwgZGF5KTtcclxuXHJcbiAgICAgIGlmIChtb250aFJlYWwgPCAxIHx8IG1vbnRoUmVhbCA+IDEyKVxyXG4gICAgICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbihNc2dJbnRlcmZhY2UuU1RSX0VSUl9EQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFN0cmluZ0J1aWxkZXIoZGF0ZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Y2hlY2sgaWYgZGF5IG9mIHdlZWsgc3VpdGFibGUgKHJpZ2h0KSBmb3IgWWVhciwgTW9udGggYW5kIERheTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRlXCI+dXNlciBpbnNlcnRlZCBzdHJpbmc8L3BhcmFtPlxyXG4gIHByaXZhdGUgY2hlY2tXZWVrKGRhdGU6IHN0cmluZyk6IFN0cmluZ0J1aWxkZXIge1xyXG5cclxuICAgIGxldCBkb3c6IG51bWJlciA9IHRoaXMuZ2V0RGF0ZUVsZW1lbnQoZGF0ZSwgRGF0ZUVsZW1lbnQuRE9XKTtcclxuXHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcblxyXG4gICAgbGV0IGRhdGVNYWdpYzogbnVtYmVyID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5hXzJfZGF0ZShkYXRlLCB0aGlzLl9waWN0dXJlLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpKTtcclxuXHJcbiAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGVNYWdpYywgdHJ1ZSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSk7XHJcblxyXG4gICAgbGV0IGRvd1JlYWw6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRvdztcclxuICAgIGlmIChkb3dSZWFsICE9PSBkb3dSZWFsKVxyXG4gICAgICBkYXRlID0gdGhpcy5jaGFuZ2VEb3coZGF0ZSwgZG93UmVhbCk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKGRhdGUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAvLy8gPHN1bW1hcnk+Y2hlY2sgaWYgdGhlIGNvbWJpbmF0aW9uIG9mIEphcGFuZXNlIGVyYSBhbmQgeWVhciBpcyB2YWxpZC48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyRGF0ZVwiPnVzZXIgaW5zZXJ0ZWQgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGRhdGUgc3RyaW5nIG9mIHByb3Blcmx5IEphcGFuZXNlIGVyYTwvcmV0dXJucz5cclxuICBwcml2YXRlIGNoZWNrSnBuRXJhWWVhcihzdHJEYXRlOiBzdHJpbmcpOiBTdHJpbmdCdWlsZGVyIHtcclxuXHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICBsZXQgZGF0ZU1hZ2ljOiBudW1iZXIgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmFfMl9kYXRlKHN0ckRhdGUsIHRoaXMuX3BpY3R1cmUsIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG5cclxuICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZU1hZ2ljLCB0cnVlLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpKTtcclxuXHJcbiAgICBsZXQgaW50WWVhckFEOiBudW1iZXIgPSBicmVha1BhcmFtcy55ZWFyO1xyXG4gICAgbGV0IGludERveTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZG95O1xyXG5cclxuICAgIC8vIGdldCB0aGUgbmFtZSBhbmQgYSB5ZWFyIG9mIHRoZSBlcmFcclxuICAgIGxldCBzdHJFcmFBbHBoYTogc3RyaW5nO1xyXG4gICAgbGV0IHN0ckVyYUthbmppOiBzdHJpbmc7XHJcblxyXG4gICAgc3RyRXJhQWxwaGEgPSBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmRhdGVfanBuX3lyXzJfYShpbnRZZWFyQUQsIGludERveSwgZmFsc2UpO1xyXG4gICAgc3RyRXJhS2FuamkgPSBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmRhdGVfanBuX3lyXzJfYShpbnRZZWFyQUQsIGludERveSwgdHJ1ZSk7XHJcblxyXG4gICAgbGV0IHN0clllYXJKcG5FcmE6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgbGV0IG51bTogbnVtYmVyID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5kYXRlX2pwbl95ZWFyX29mcyhpbnRZZWFyQUQsIGludERveSk7XHJcbiAgICBpZiAobnVtIDw9IDApIHtcclxuICAgICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKE1zZ0ludGVyZmFjZS5TVFJfRVJSX0RBVEUpO1xyXG4gICAgfVxyXG4gICAgaWYgKG51bSA8PSA5KSB7XHJcbiAgICAgIHN0clllYXJKcG5FcmEuQXBwZW5kKFwiMFwiKTtcclxuICAgIH1cclxuICAgIHN0clllYXJKcG5FcmEuQXBwZW5kKG51bS50b1N0cmluZygpKTtcclxuXHJcbiAgICAvLyBidWlsZCBhIHByb3Blcmx5IHllYXIgb2YgdGhlIGVyYVxyXG5cclxuICAgIC8vIEEgREJDUyBjaGFyYWN0ZXIgaW4gXCJzdHJcIiBjb25zdW1lcyB0d28gY2hhcmFjdGVycyBpbiBcIm1hc2tcIi5cclxuICAgIC8vIElmIFwic3RyXCIgY29udGFpbnMgREJDUywgdGhlIHBvc2l0aW9uIG9mIFwibWFza1wiIGhhcyB0byBza2lwIG5leHQgaW5kZXguXHJcbiAgICAvLyBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHNraXBwZWQgaW5kZXhlcy5cclxuICAgIGxldCBpbnRQaWNJZHhPZnM6IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpbnRDbnQ6IG51bWJlciA9IDA7IGludENudCArIGludFBpY0lkeE9mcyA8IHRoaXMuX3BpY3R1cmUubGVuZ3RoOyBpbnRDbnQrKylcclxuICAgIHtcclxuICAgICAgc3dpdGNoICh0aGlzLl9waWN0dXJlLmNoYXJDb2RlQXQoaW50Q250ICsgaW50UGljSWR4T2ZzKSlcclxuICAgICAge1xyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfSlkxKTpcclxuICAgICAgICAgIHN0ckRhdGUgPSBVdGlsU3RyQnl0ZU1vZGUucmVwQyhzdHJEYXRlLCBzdHJFcmFBbHBoYSwgaW50Q250ICsgMSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19KWTIpOlxyXG4gICAgICAgICAgc3RyRGF0ZSA9IFV0aWxTdHJCeXRlTW9kZS5yZXBDKHN0ckRhdGUsIHN0ckVyYUthbmppLCBpbnRDbnQgKyAxLCAxKTtcclxuICAgICAgICAgIGludFBpY0lkeE9mcysrOyAvLyBQSUNfSlkyIGNvbnN1bWVzIDIgY2hhcmFjdGVycyBvZiBwaWN0dXJlICgxIG1vcmUgdGhhbiBzdHJEYXRlKVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfSlk0KTpcclxuICAgICAgICAgIHN0ckRhdGUgPSBVdGlsU3RyQnl0ZU1vZGUucmVwQyhzdHJEYXRlLCBzdHJFcmFLYW5qaSwgaW50Q250ICsgMSwgMik7XHJcbiAgICAgICAgICBpbnRDbnQrKzsgLy8gUElDX0pZNCBjb25zdW1lcyAyIGNoYXJhY3RlcnMgb2Ygc3RyRGF0ZVxyXG4gICAgICAgICAgaW50UGljSWR4T2ZzICs9IDI7IC8vIFBJQ19KWTQgY29uc3VtZXMgNCBjaGFyYWN0ZXJzIG9mIHBpY3R1cmUgKDIgbW9yZSB0aGFuIHN0ckRhdGUpXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ZSik6XHJcbiAgICAgICAgICBzdHJEYXRlID0gVXRpbFN0ckJ5dGVNb2RlLnJlcEMoc3RyRGF0ZSwgc3RyWWVhckpwbkVyYS50b1N0cmluZygpLCBpbnRDbnQgKyAxLCAyKTtcclxuICAgICAgICAgIGludENudCsrOyAvLyBQSUNfWUogY29uc3VtZXMgMiBjaGFyYWN0ZXJzIG9mIHN0ckRhdGVcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaWYgKGludENudCA8IHN0ckRhdGUubGVuZ3RoKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBpZiBcInN0ckRhdGVcIiBjb250YWlucyBEQkNTLCB0aGUgbmV4dCBpbmRleCBvZiBcInBpY3R1cmVcIiBoYXMgdG8gYmUgc2tpcHBlZC5cclxuICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChzdHJEYXRlW2ludENudF0pID09PSBmYWxzZSAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgodGhpcy5fcGljdHVyZVtpbnRDbnQgKyBpbnRQaWNJZHhPZnNdKSA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgICBpbnRQaWNJZHhPZnMrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKHN0ckRhdGUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldCBtYXggbnVtYmVyIG9mIGRheSBpbiBtb250aDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtb250aFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBtYXggZGF5cyBbMjgtMzFdIG51bWJlcjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldE1heERheUluTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBhcnJheTogbnVtYmVyW10gPSBbXHJcbiAgICAgIDAsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFcclxuICAgIF07XHJcbiAgICBsZXQgbGVhcHllYXI6IGJvb2xlYW4gPSB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcclxuXHJcbiAgICBpZiAobGVhcHllYXIgJiYgbW9udGggPT09IDIpXHJcbiAgICAgIHJldHVybiBhcnJheVttb250aF0gKyAxO1xyXG5cclxuICAgICByZXR1cm4gYXJyYXlbbW9udGhdO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldCBtb250aCBmb3IgZGF5LCB0aGFuIGRheSBoYXZlIG1hc2sgREREPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInllYXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRheVwiPlswLTM2NV08L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbnVtYmVyIG9mIG1vbnRoPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0TW9udGhCeURheSh5ZWFyOiBudW1iZXIsIGRheTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgTGVhcFllYXI6IGJvb2xlYW47XHJcblxyXG4gICAgTGVhcFllYXIgPSAoeWVhciAlIDQgPT09IDApICYmICgoeWVhciAlIDEwMCAhPT0gMCkgfHwgKHllYXIgJSA0MDAgPT09IDApKTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgUElDSW50ZXJmYWNlLmRhdGVfZGF5X3RhYi5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgaWYgKCFMZWFwWWVhcilcclxuICAgICAge1xyXG4gICAgICAgIGlmIChQSUNJbnRlcmZhY2UuZGF0ZV9kYXlfdGFiW2ldID49IGRheSlcclxuICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGlzIExlYXAgWWVhclxyXG4gICAgICBlbHNlXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAoaSA8IDMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKFBJQ0ludGVyZmFjZS5kYXRlX2RheV90YWJbaV0gPj0gZGF5KVxyXG4gICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYWRkIDEgZGF5IGFmdGVyIHNlY29uZCBtb250aFxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAoUElDSW50ZXJmYWNlLmRhdGVfZGF5X3RhYltpXSArIDEgPj0gZGF5KVxyXG4gICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gLy8gZm9yIGxvb3BcclxuICAgIHJldHVybiBpOyAvLyB0aGUgZnVuY3Rpb24gY2Fubid0IGNhbWUgdG8gdGhlIHN0YXRlbWVudCBhbnl0aW1lXHJcbiAgfVxyXG5cclxuICAvLy8gPC9zdW1tYXJ5PmdldCBZZWFyfE1vbnRofERheXxEb3cgb2YgZGF0ZVxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRhdGVcIj5kYXRlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJlbGVtZW50XCI+cmVxdWlyZWQgZGF0ZSBlbGVtZW50ICh5ZWFyL21vbnRoL2RheS9kb3cpIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlllYXJ8TW9udGh8RGF5fERvdyBvZiBkYXRlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0RGF0ZUVsZW1lbnQoZGF0ZTogc3RyaW5nLCBlbGVtZW50OiBEYXRlRWxlbWVudCk6IG51bWJlciB7XHJcbiAgICBsZXQgYnVmZmVyOiBTdHJpbmcgPSBudWxsO1xyXG4gICAgbGV0IGxldHRlcnM6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZXhpdExvb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBwaWNXZWVrVHlwZTogbnVtYmVyID0gUElDSW50ZXJmYWNlLlBJQ19XV1c7IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgIGxldCBpc0pwbkVyYVllYXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgbGV0IGVyYV95ZWFyOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIEEgREJDUyBjaGFyYWN0ZXIgaW4gXCJkYXRlXCIgY29uc3VtZXMgdHdvIGNoYXJhY3RlcnMgaW4gXCJwaWN0dXJlXCIuXHJcbiAgICAvLyBJZiBcImRhdGVcIiBjb250YWlucyBEQkNTLCB0aGUgcG9zaXRpb24gb2YgXCJwaWN0dXJlXCIgaGFzIHRvIHNraXAgbmV4dCBpbmRleC5cclxuICAgIC8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc2tpcHBlZCBpbmRleGVzLlxyXG4gICAgbGV0IGludFBpY0lkeE9mczogbnVtYmVyID0gMDsgLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG5cclxuICAgIGxldCBtaW5MZW46IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSlcclxuICAgICAgbWluTGVuID0gVXRpbFN0ckJ5dGVNb2RlLmdldE1pbkxlblBpY3R1cmUoZGF0ZSwgdGhpcy5fcGljdHVyZSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIG1pbkxlbiA9IE1hdGgubWluKGRhdGUubGVuZ3RoLCB0aGlzLl9waWN0dXJlLmxlbmd0aCk7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSArIGludFBpY0lkeE9mcyA8IG1pbkxlbiAmJiAhZXhpdExvb3A7IGkrKylcclxuICAgIHtcclxuICAgICAgaWYgKHRoaXMuaXNEYXRhUG9zaXRpb25hbERpcmVjdGl2ZSh0aGlzLl9waWN0dXJlW2kgKyBpbnRQaWNJZHhPZnNdKSlcclxuICAgICAge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5fcGljdHVyZS5jaGFyQ29kZUF0KGkgKyBpbnRQaWNJZHhPZnMpKVxyXG4gICAgICAgIHtcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0REOlxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IERhdGVFbGVtZW50LkRBWSlcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgMik7XHJcbiAgICAgICAgICAgIGV4aXRMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0RERDpcclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5EQVkpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGUuc3Vic3RyKGksIDMpO1xyXG4gICAgICAgICAgICBleGl0TG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaSArPSAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19EREREOlxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IERhdGVFbGVtZW50LkRBWSlcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgMik7IC8vIG5vdCArNCBuZWVkIG5vdCBzdWZmaXggb2YgJ25kJywgJ3JkJywgJ3N0J1xyXG4gICAgICAgICAgICBleGl0TG9vcCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpICs9IDM7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX01NRDpcclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5NT05USClcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgMik7XHJcbiAgICAgICAgICAgIGV4aXRMb29wID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTU1NOlxyXG4gICAgICAgICAgLy8gZ2V0IHNpemUgb2YgUElDX01NTSBibG9ja1xyXG4gICAgICAgICAgbGV0dGVycyA9IHRoaXMuZ2V0U2l6ZU9mQmxvY2soaSArIGludFBpY0lkeE9mcywgUElDSW50ZXJmYWNlLlBJQ19NTU0pO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IERhdGVFbGVtZW50Lk1PTlRIKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBidWZmZXIgPSBkYXRlLnN1YnN0cihpLCBsZXR0ZXJzKTtcclxuICAgICAgICAgICAgZXhpdExvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkgKz0gbGV0dGVycyAtIDE7XHJcbiAgICAgICAgICBsZXR0ZXJzID0gMDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVk6XHJcbiAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gRGF0ZUVsZW1lbnQuWUVBUilcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgMik7XHJcbiAgICAgICAgICAgIGV4aXRMb29wID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVlZWTpcclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5ZRUFSKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBidWZmZXIgPSBkYXRlLnN1YnN0cihpLCA0KTtcclxuICAgICAgICAgICAgZXhpdExvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaSArPSAzO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19XOlxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IERhdGVFbGVtZW50LkRPVylcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgMSk7XHJcbiAgICAgICAgICAgIGV4aXRMb29wID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfV1dXOlxyXG4gICAgICAgICAgbGV0dGVycyA9IHRoaXMuZ2V0U2l6ZU9mQmxvY2soaSArIGludFBpY0lkeE9mcywgUElDSW50ZXJmYWNlLlBJQ19XV1cpO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IERhdGVFbGVtZW50LkRPVylcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgbGV0dGVycyk7XHJcbiAgICAgICAgICAgIGV4aXRMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpICs9IGxldHRlcnMgLSAxO1xyXG4gICAgICAgICAgbGV0dGVycyA9IDA7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hZWVlZWTpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSEw6XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hERDpcclxuICAgICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZCBmb3IgaGVicmV3IHlldFxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19CQjogIC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAgICAgIGxldHRlcnMgPSB0aGlzLmdldFNpemVPZkJsb2NrKGkgKyBpbnRQaWNJZHhPZnMsIFBJQ0ludGVyZmFjZS5QSUNfQkIpO1xyXG5cclxuICAgICAgICAgIGlmIChpICsgTWF0aC5mbG9vcihsZXR0ZXJzIC8gMikgPCBkYXRlLmxlbmd0aClcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgTWF0aC5mbG9vcihsZXR0ZXJzIC8gMikpO1xyXG4gICAgICAgICAgICAvLyBpZiBkYXRlIGNvbnRhaW5zIERCQ1MsIHNvbWUgaW5kZXhlcyBvZiBwaWN0dXJlIGhhdmUgdG8gYmUgc2tpcHBlZC5cclxuICAgICAgICAgICAgaW50UGljSWR4T2ZzICs9IGxldHRlcnMgLSBidWZmZXIubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5ET1cpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGV4aXRMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgcGljV2Vla1R5cGUgPSBQSUNJbnRlcmZhY2UuUElDX0JCO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBidWZmZXIgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGkgKz0gbGV0dGVycyAtIDE7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0pZMTogIC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAgICAgIGlzSnBuRXJhWWVhciA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0pZMjogIC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAgICAgIGlzSnBuRXJhWWVhciA9IHRydWU7XHJcbiAgICAgICAgICBpbnRQaWNJZHhPZnMrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSlk0OiAgLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgICAgICAgaXNKcG5FcmFZZWFyID0gdHJ1ZTtcclxuICAgICAgICAgIGludFBpY0lkeE9mcyArPSAyO1xyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZSjogIC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5ZRUFSKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBidWZmZXIgPSBkYXRlLnN1YnN0cihpLCAyKTtcclxuICAgICAgICAgICAgZXhpdExvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSAvLyBzd2l0Y2ggb2YgcG9zaXRpb25hbCBkaXJlY3RpdmVzXHJcbiAgICAgICAgfSAvLyBpZiBvZiBwb3NpdGlvbmFsIGRpcmVjdGl2ZXNcclxuICAgIH0gLy8gZm9yIGxvb3AgaW4gcGljdHVyZVxyXG5cclxuICAgIGlmIChidWZmZXIgPT0gbnVsbClcclxuICAgIHtcclxuICAgICAgaWYgKGVsZW1lbnQgPT09IERhdGVFbGVtZW50LllFQVIpXHJcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lLk5vdy5ZZWFyO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgYnVmZmVyID0gYnVmZmVyLnRyaW0oKTtcclxuXHJcbiAgICBpZiAobGV0dGVycyA+IDApXHJcbiAgICAvLyBpdCdzIFBJQ19XV1cgb3IgUElDX01NTVxyXG4gICAge1xyXG4gICAgICBpZiAoZWxlbWVudCA9PT0gRGF0ZUVsZW1lbnQuTU9OVEgpXHJcbiAgICAgICAgbGV0dGVycyA9IHRoaXMuZ2V0TW9udGhPcldlZWsoYnVmZmVyLnRvU3RyaW5nKCksIGxldHRlcnMsIFBJQ0ludGVyZmFjZS5QSUNfTU1NKTtcclxuICAgICAgZWxzZSBpZiAoZWxlbWVudCA9PT0gRGF0ZUVsZW1lbnQuRE9XKVxyXG4gICAgICAgIGxldHRlcnMgPSB0aGlzLmdldE1vbnRoT3JXZWVrKGJ1ZmZlci50b1N0cmluZygpLCBsZXR0ZXJzLCBwaWNXZWVrVHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgIHdoaWxlIChidWZmZXIudG9TdHJpbmcoKS5zdGFydHNXaXRoKFwiMFwiKSB8fCBidWZmZXIudG9TdHJpbmcoKS5zdGFydHNXaXRoKFwiIFwiKSlcclxuICAgICAgICBidWZmZXIgPSBidWZmZXIudG9TdHJpbmcoKS5zdWJzdHIoMSk7XHJcbiAgICAgIGlmIChidWZmZXIubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIGxldHRlcnMgPSAwO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgbGV0dGVycyA9IE5OdW1iZXIuUGFyc2UoYnVmZmVyLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5ZRUFSICYmIGlzSnBuRXJhWWVhcilcclxuICAgIHtcclxuICAgICAgLy8gZ2V0IHRoZSBzdGFydCB5ZWFyIG9mIHRoZSBlcmFcclxuICAgICAgZXJhX3llYXIgPSBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmdldFN0YXJ0WWVhck9mRXJhKGRhdGUsIHRoaXMuX3BpY3R1cmUpO1xyXG4gICAgICBpZiAoZXJhX3llYXIgPT09IDApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIGxldHRlcnMgKz0gZXJhX3llYXIgLSAxO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsZXR0ZXJzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmNoYW5nZSBkYXkgbnVtYmVyIGluIGRhdGUgZmllbGQgdG8gZGF5TWF4PC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRhdGVcIj50byBjaGFuZ2UgZGF5IGludG88L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRheU1heFwiPnRoZSBuZXcgZGF5IHZhbHVlPC9wYXJhbT5cclxuICBwcml2YXRlIGNoYW5nZURvdyhkYXRlOiBzdHJpbmcsIGRvdzogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBpc0RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBsZXR0ZXJzOiBudW1iZXI7XHJcbiAgICBsZXQgc3RhcnRQYXJ0OiBzdHJpbmc7XHJcbiAgICBsZXQgZmluaXNoUGFydDogc3RyaW5nO1xyXG4gICAgbGV0IG51bWJlcjE6IHN0cmluZztcclxuXHJcbiAgICBudW1iZXIxID0gXCJcIiArIGRvdzsgLy8gXCIgXCJcclxuXHJcbiAgICAvLyBBIERCQ1MgY2hhcmFjdGVyIGluIFwiZGF0ZVwiIGNvbnN1bWVzIHR3byBjaGFyYWN0ZXJzIGluIFwicGljdHVyZVwiLlxyXG4gICAgLy8gSWYgXCJkYXRlXCIgY29udGFpbnMgREJDUywgdGhlIHBvc2l0aW9uIG9mIFwicGljdHVyZVwiIGhhcyB0byBza2lwIG5leHQgaW5kZXguXHJcbiAgICAvLyBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHNraXBwZWQgaW5kZXhlcy4gKEpQTjogREJDUyBzdXBwb3J0KVxyXG4gICAgbGV0IGludFBpY0lkeE9mczogbnVtYmVyID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpICsgaW50UGljSWR4T2ZzIDwgdGhpcy5fcGljdHVyZS5sZW5ndGggJiYgIWlzRGF0ZTsgaSsrKVxyXG4gICAge1xyXG4gICAgICBpZiAodGhpcy5pc0RhdGFQb3NpdGlvbmFsRGlyZWN0aXZlKHRoaXMuX3BpY3R1cmVbaSArIGludFBpY0lkeE9mc10pKVxyXG4gICAgICB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLl9waWN0dXJlLmNoYXJDb2RlQXQoaSArIGludFBpY0lkeE9mcykpXHJcbiAgICAgICAge1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVzpcclxuICAgICAgICAgIHN0YXJ0UGFydCA9IGRhdGUuc3Vic3RyKDAsIGkpO1xyXG4gICAgICAgICAgZmluaXNoUGFydCA9IGRhdGUuc3Vic3RyKGkgKyAxKTtcclxuICAgICAgICAgIGRhdGUgPSBzdGFydFBhcnQgKyBudW1iZXIxICsgZmluaXNoUGFydDtcclxuICAgICAgICAgIGlzRGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1dXVzpcclxuICAgICAgICAgIGxldHRlcnMgPSB0aGlzLmdldFNpemVPZkJsb2NrKGkgKyBpbnRQaWNJZHhPZnMsIFBJQ0ludGVyZmFjZS5QSUNfV1dXKTtcclxuICAgICAgICAgIHN0YXJ0UGFydCA9IGRhdGUuc3Vic3RyKDAsIGkpO1xyXG4gICAgICAgICAgZmluaXNoUGFydCA9IGRhdGUuc3Vic3RyKGkgKyBsZXR0ZXJzKTtcclxuICAgICAgICAgIGxldCBkYXlTdHI6IHN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5EQVlTX1BUUik7XHJcbiAgICAgICAgICBsZXQgZGF5TmFtZXM6IHN0cmluZ1tdID0gRGF0ZVV0aWwuZ2V0TG9jYWxEYXlzKGRheVN0cik7XHJcbiAgICAgICAgICBudW1iZXIxID0gZGF5TmFtZXNbZG93XTtcclxuXHJcbiAgICAgICAgICBpZiAobnVtYmVyMS5sZW5ndGggPiBsZXR0ZXJzKVxyXG4gICAgICAgICAgICBudW1iZXIxID0gbnVtYmVyMS5zdWJzdHIoMCwgbGV0dGVycyk7XHJcbiAgICAgICAgICBlbHNlIGlmIChudW1iZXIxLmxlbmd0aCA8IGxldHRlcnMpXHJcbiAgICAgICAgICAgIHdoaWxlIChudW1iZXIxLmxlbmd0aCA8IGxldHRlcnMpXHJcbiAgICAgICAgICAgICAgbnVtYmVyMSA9IG51bWJlcjEgKyAnICc7XHJcbiAgICAgICAgICBkYXRlID0gc3RhcnRQYXJ0ICsgbnVtYmVyMSArIGZpbmlzaFBhcnQ7XHJcbiAgICAgICAgICBpc0RhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19CQjogIC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAgICAgIGxldHRlcnMgPSB0aGlzLmdldFNpemVPZkJsb2NrKGkgKyBpbnRQaWNJZHhPZnMsIFBJQ0ludGVyZmFjZS5QSUNfQkIpO1xyXG4gICAgICAgICAgLy8gXCJsZXR0ZXJzXCIgbWVhbnMgYSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBcInBpY3R1cmVcIlxyXG5cclxuICAgICAgICAgIHN0YXJ0UGFydCA9IGRhdGUuc3Vic3RyKDAsIGkpO1xyXG4gICAgICAgICAgZmluaXNoUGFydCA9IGRhdGUuc3Vic3RyKGkgKyBNYXRoLmZsb29yKGxldHRlcnMgLyAyKSk7XHJcbiAgICAgICAgICAvLyBcImxldHRlcnMgLyAyXCIgbWVhbnMgYSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBcImRhdGVcIlxyXG5cclxuICAgICAgICAgIG51bWJlcjEgPSBVdGlsRGF0ZUpwbi5nZXRTdHJEb3coZG93KTtcclxuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmxlbkIobnVtYmVyMSkgPiBsZXR0ZXJzKVxyXG4gICAgICAgICAgICBudW1iZXIxID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKG51bWJlcjEsIGxldHRlcnMpO1xyXG4gICAgICAgICAgZWxzZSBpZiAoVXRpbFN0ckJ5dGVNb2RlLmxlbkIobnVtYmVyMSkgPCBsZXR0ZXJzKVxyXG4gICAgICAgICAgICB3aGlsZSAoVXRpbFN0ckJ5dGVNb2RlLmxlbkIobnVtYmVyMSkgPCBsZXR0ZXJzKVxyXG4gICAgICAgICAgICAgIG51bWJlcjEgPSBudW1iZXIxICsgJyAnO1xyXG4gICAgICAgICAgZGF0ZSA9IHN0YXJ0UGFydCArIG51bWJlcjEgKyBmaW5pc2hQYXJ0O1xyXG4gICAgICAgICAgaXNEYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpXHJcbiAgICAgICAgICAvLyBKUE46IERCQ1Mgc3VwcG9ydFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoaSA8IGRhdGUubGVuZ3RoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLy8gaWYgXCJkYXRlXCIgY29udGFpbnMgREJDUywgdGhlIG5leHQgaW5kZXggb2YgXCJwaWN0dXJlXCIgaGFzIHRvIGJlIHNraXBwZWQuXHJcbiAgICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChkYXRlW2ldKSA9PT0gZmFsc2UgJiYgVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKHRoaXMuX3BpY3R1cmVbaSArIGludFBpY0lkeE9mc10pID09PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgaW50UGljSWR4T2ZzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9IC8vIHN3aXRjaFxyXG4gICAgICAgIH0gLy8gaWYgb2YgcG9zaXRpb25hbCBkaXJlY3RpdmVzXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5jaGVjayAmIHZhbGlkYXRlIFRpbWUgZmllbGQgYnkgaGlzIG9sZC9uZXcgdmFsdWUgYW5kIDIgcGljdHVyZXM6XHJcbiAgLy8vIFJlYWwgYW5kIEVuYWJsZVxyXG4gIC8vLyAxLmNoZWNrIGlmIG5ld3ZhbHVlIGNvbXBsZXRlIHdpdGggcGljdHVyZXMsIG90aGVyd2lzZSByZXR1cm4gb2xkdmFsdWVcclxuICAvLy8gMi5jaGVjayBpZiBuZXd2YWx1ZSBjb21wbGV0ZSB3aXRoIHJhbmdlXHJcbiAgLy8vIDIuMSBjb21wbGV0ZSB2YWx1ZSwgaWYgcG9zc2libGUsIG90aGVyd2lzZSAgcmV0dXJuIG9sZHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IFN0cmluZyAtIG5ldyB2YWx1ZSBvZiB2YWxpZGF0ZWQgZmllbGQ8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBjaGVja1RpbWVGaWVsZCgpOiBEYXRlIHtcclxuICAgIGxldCBuZXdUaW1lOiBEYXRlID0gbmV3IERhdGUgKHRoaXMuX25ld3ZhbHVlKTtcclxuXHJcblxyXG4gICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKGZhbHNlKTtcclxuXHJcbiAgICBpZiAodGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5pc0RhdGVaZXJvKHRoaXMuX25ld3ZhbHVlKSkge1xyXG4gICAgICAvLyBnZXQgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgZmllbGRcclxuICAgICAgbGV0IGRlZmF1bHRNZ1ZhbHVlOiBzdHJpbmcgPSB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZpZWxkKCkuZ2V0RGVmYXVsdFZhbHVlKCk7XHJcbiAgICAgIG5ld1RpbWUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLm1nMmRpc3AoZGVmYXVsdE1nVmFsdWUsIFwiXCIsIHRoaXMuX3ZhbERldC5nZXRQSUMoKSwgdHJ1ZSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcblxyXG4gICAgICAvLyByYW5nZSBvZiB0aGUgdGltZVxyXG4gICAgICBpZiAodGhpcy5fdmFsRGV0LmdldENvbnRpbnVvdXNSYW5nZVZhbHVlcygpICE9IG51bGwgfHwgdGhpcy5fdmFsRGV0LmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKSAhPSBudWxsKVxyXG4gICAgICAgIG5ld1RpbWUgPSB0aGlzLmZpbGxUaW1lQnlSYW5nZSh0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCksIHRoaXMuX3ZhbERldC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCksIHRoaXMuX25ld3ZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdUaW1lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkFkZCBmb3VuZCBpbiBuZXd2YWx1ZSBudW1iZXJzKDIob3IgMSkgbGV0dGVycykgdG8gYnVmZmVyIGFuZCByZXR1cm5cclxuICAvLy8gbGFzdCBmb3VuZCBudW1iZXIgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN1cnJWYWx1ZVwiPmluIG5ld3ZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJidWZmZXJcIj4vLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0eXBlXCI+d2hpY2ggdHlwZSBvZiBwb3NpdGlvbmFsIGRpcmVjdGl2ZSwgZm9yIGNoZWNraW5nIHZhbGlkaXR5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGN1cnJWYWx1ZSBpbiBuZXd2YWx1ZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGFkZDJUaW1lKGN1cnJWYWx1ZTogbnVtYmVyLCBidWZmZXI6IFN0cmluZ0J1aWxkZXIsIHR5cGU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhcnQ6IG51bWJlciA9IGN1cnJWYWx1ZTtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgU1RSXzAwOiBTdHJpbmcgPSBcIjAwXCI7XHJcbiAgICBsZXQgIGN1cnJBZGQ6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG5cclxuICAgIHdoaWxlIChzdGFydCA8IHRoaXMuX25ld3ZhbHVlLmxlbmd0aCAmJiAhVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQodGhpcy5fbmV3dmFsdWVbc3RhcnRdKSlcclxuICAgIHtcclxuICAgICAgc3RhcnQrKzsgLy8gZmluZCBmaXJzdCBkaWdpdFxyXG4gICAgICAvLyBub24tZGlnaXRzIHdlcmUgZm91bmQgaW4gaW5wdXQgc3RyaW5nXHJcbiAgICAgIC8vIHdlIGRvIG5vdCB0aHJvdyBTVFJfRVJSX1RJTUUgZXhjZXB0aW9uIHRvIHByZXZlbnQgaW5wdXQgZGlnaXRzIGxvc3RcclxuICAgICAgLy8gb24gbm9uLWRpZ2l0cyBwbGFjZSBTVFJfMDAgd2lsbCBiZSBhZGRlZFxyXG4gICAgICAvLyBTaW5jZSBNYXNrIEVkaXRpbmcgLiBUaGlzIGVycm9yIGlzIGlycmVsZXZhbnQuIFRpbWUgbm93LCBhbHdheXMgY29udGFpbnMgbm9uIGRpZ2l0cyBsaWtlIDogYW5kIG1pZ2h0IGNvbnRhaW4gJyAnIGZvciB1bmZpbGxlZCBjaGFycy5cclxuICAgICAgLy8gVGhpcyBpcyBhIHZhbGlkIGNhc2UgYW5kIHdlIGRvIG5vdCB3YW50IGFuIGVycm9yIHBvcHBpbmcgYWJvdXQgaXQuXHJcbiAgICAgIC8vICBndWlNYW5hZ2VyLndyaXRlVG9NZXNzYWdlUGFuZSh2YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCksIENsaWVudE1hbmFnZXIuSW5zdGFuY2UuZ2V0TWVzc2FnZVN0cmluZyhTVFJfRVJSX1RJTUUpLCBTdGF0dXNCYXJNZXNzYWdlVHlwZS5TQl9SVU5USU1FX01TRyk7XHJcbiAgICAgIC8vICBzZXRWYWxpZGF0aW9uRmFpbGVkKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGFydCA9PT0gdGhpcy5fbmV3dmFsdWUubGVuZ3RoKVxyXG4gICAgLy8gbm90IGZvdW5kIG1vcmUgZGlnaXRzXHJcbiAgICB7XHJcbiAgICAgIGJ1ZmZlci5BcHBlbmQoU1RSXzAwLnRvU3RyaW5nKCkpO1xyXG4gICAgICByZXR1cm4gY3VyclZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyAyICYmIGkgPCB0aGlzLl9uZXd2YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX25ld3ZhbHVlW2ldKSlcclxuICAgICAgICBjdXJyQWRkLkFwcGVuZCh0aGlzLl9uZXd2YWx1ZVtpXSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAge1xyXG4gICAgICAgIGN1cnJBZGQuSW5zZXJ0KDAsICcwJyk7IC8vIG9ubHkgMSBkaWdpdCBmb3VuZFxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGkgPT09IHRoaXMuX25ld3ZhbHVlLmxlbmd0aCAmJiBpID09PSBzdGFydCArIDEpXHJcbiAgICAgIGN1cnJBZGQuSW5zZXJ0KDAsICcwJyk7XHJcbiAgICAvLyBvbmx5IDEgZGlnaXQgZm91bmRcclxuICAgIGVsc2UgaWYgKGkgPT09IHRoaXMuX25ld3ZhbHVlLmxlbmd0aCAmJiBpID09PSBzdGFydClcclxuICAgICAgY3VyckFkZC5BcHBlbmQoU1RSXzAwLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgIGxldCBhZGQ6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UoY3VyckFkZC5Ub1N0cmluZygpKTtcclxuXHJcbiAgICAvKmlmIChhZGQgPCAwKVxyXG4gICAgY3VyckFkZD1uZXcgU3RyaW5nQnVmZmVyKFwiMDBcIik7XHJcbiAgICBlbHNlIGlmIChhZGQgPiA1OSAmJiB0eXBlPT1QSUNfTU1UKVxyXG4gICAgY3VyckFkZD1uZXcgU3RyaW5nQnVmZmVyKFwiNTlcIik7XHJcbiAgICBlbHNlIGlmIChhZGQgPiA1OSAmJiB0eXBlPT1QSUNfU1MpXHJcbiAgICBjdXJyQWRkPW5ldyBTdHJpbmdCdWZmZXIoXCI1OVwiKTsqL1xyXG4gICAgaWYgKGFkZCA8IDAgfHwgKGFkZCA+IDU5ICYmIHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1UKSB8fCAoYWRkID4gNTkgJiYgdHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19TUykpXHJcbiAgICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbihNc2dJbnRlcmZhY2UuU1RSX0VSUl9USU1FKTtcclxuICAgIGVsc2UgaWYgKHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfSEgpXHJcbiAgICB7XHJcbiAgICAgIGxldCBQTTogYm9vbGVhbiA9IHRoaXMuZ2V0SXNQTSgpO1xyXG4gICAgICBsZXQgbmV3U3RyOiBTdHJpbmcgPSBudWxsO1xyXG4gICAgICBsZXQgZGlmOiBudW1iZXI7XHJcblxyXG4gICAgICBpZiAoKGFkZCA+PSAxMiB8fCBhZGQgPT09IDApICYmIFBNKVxyXG4gICAgICB7XHJcbiAgICAgICAgbGV0IGFkZFRtcDogbnVtYmVyID0gYWRkICUgMjQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2lzUG0gPSAoYWRkVG1wID49IDEyICYmIGFkZFRtcCA8IDI0KTtcclxuXHJcbiAgICAgICAgaWYgKGFkZFRtcCA+IDEyKVxyXG4gICAgICAgICAgZGlmID0gYWRkVG1wIC0gMTI7XHJcbiAgICAgICAgZWxzZSBpZiAoYWRkVG1wID09PSAwKVxyXG4gICAgICAgICAgZGlmID0gMTI7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZGlmID0gYWRkVG1wO1xyXG5cclxuICAgICAgICBuZXdTdHIgPSAoKGRpZiA+IDkgPyBcIlwiIDogXCIwXCIpICsgZGlmKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhZGQgPiA5OSAmJiAhUE0pXHJcbiAgICAgICAgbmV3U3RyID0gXCI5OVwiO1xyXG5cclxuICAgICAgaWYgKG5ld1N0ciAhPSBudWxsKVxyXG4gICAgICB7XHJcbiAgICAgICAgY3VyckFkZC5SZW1vdmUoMCwgY3VyckFkZC5MZW5ndGgpO1xyXG4gICAgICAgIGN1cnJBZGQuQXBwZW5kKG5ld1N0ci50b1N0cmluZygpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1ZmZlci5BcHBlbmQoY3VyckFkZC5Ub1N0cmluZygpKTtcclxuICAgIHJldHVybiBpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkFwcGVuZCBQTSBvciBBTSB0byB0aW1lPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYWRkUE0yVGltZShjdXJyVmFsdWU6IG51bWJlciwgYnVmZmVyOiBTdHJpbmdCdWlsZGVyKTogbnVtYmVyIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKChpID0gdGhpcy5fbmV3dmFsdWUudG9VcHBlckNhc2UoKS5pbmRleE9mKFwiQU1cIiwgY3VyclZhbHVlKSkgIT09IC0xKVxyXG4gICAge1xyXG4gICAgICBidWZmZXIuQXBwZW5kKFwiYW1cIik7XHJcbiAgICAgIHJldHVybiBpICsgMjtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgaWYgKChpID0gdGhpcy5fbmV3dmFsdWUudG9VcHBlckNhc2UoKS5pbmRleE9mKFwiUE1cIiwgY3VyclZhbHVlKSkgIT09IC0xKVxyXG4gICAgICB7XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcInBtXCIpO1xyXG4gICAgICAgIHJldHVybiBpICsgMjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLl9pc1BtKVxyXG4gICAgICB7XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcInBtXCIpO1xyXG4gICAgICAgIHJldHVybiBjdXJyVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJhbVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjdXJyVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Q2hlY2sgaWYgd2hlcmUgaXMgJ1BNJyBwb3NpdGlvbmFsIGRpcmVjdGl2ZSBpbiB0aGUgVGltZSBQaWN0dXJlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSAtIHRoZXJlIGlzIFBNLCBlbHNlIGZhbHNlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0SXNQTSgpOiBib29sZWFuIHtcclxuXHJcbiAgICBmb3IgKGxldCBjdXJyOiBudW1iZXIgPSAwOyBjdXJyIDwgdGhpcy5fcGljdHVyZS5sZW5ndGg7IGN1cnIrKylcclxuICAgIHtcclxuICAgICAgaWYgKHRoaXMuX3BpY3R1cmUuY2hhckNvZGVBdChjdXJyKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19QTSlcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbGxUaW1lQnlSYW5nZShDb250aW51b3VzUmFuZ2U6IExpc3Q8c3RyaW5nPiwgRGlzY3JldGVSYW5nZTogTGlzdDxzdHJpbmc+LCBidWZmZXI6IERhdGUpOiBEYXRlIHtcclxuICAgIGxldCAgcGljOiBQSUMgPSB0aGlzLl92YWxEZXQuZ2V0UElDKCk7XHJcbiAgICBsZXQgIGN1cnJUaW1lOiBudW1iZXIgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmZyb21OYXRpdmVUaW1lVG9NZ1RpbWVOdW1iZXIoYnVmZmVyLCBwaWMpO1xyXG4gICAgbGV0IGRvd25UaW1lOiBudW1iZXIsIHRvcFRpbWU6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcblxyXG4gICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKGZhbHNlKTtcclxuICAgIGlmIChDb250aW51b3VzUmFuZ2UgIT0gbnVsbClcclxuICAgIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IENvbnRpbnVvdXNSYW5nZS5sZW5ndGggLSAxOyBpKyspXHJcbiAgICAgIHtcclxuICAgICAgICBkb3duVGltZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuYV8yX3RpbWUoQ29udGludW91c1JhbmdlLmdldF9JdGVtKGkpLCBwaWMsIGZhbHNlKTtcclxuICAgICAgICB0b3BUaW1lID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5hXzJfdGltZShDb250aW51b3VzUmFuZ2UuZ2V0X0l0ZW0oKytpKSwgcGljLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKGN1cnJUaW1lID49IGRvd25UaW1lICYmIGN1cnJUaW1lIDw9IHRvcFRpbWUpXHJcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYnVmZmVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChEaXNjcmV0ZVJhbmdlICE9IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBEaXNjcmV0ZVJhbmdlLmxlbmd0aDsgaSsrKVxyXG4gICAgICB7XHJcbiAgICAgICAgaWYgKGN1cnJUaW1lID09PSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmFfMl90aW1lKERpc2NyZXRlUmFuZ2UuZ2V0X0l0ZW0oaSksIHBpYywgZmFsc2UpKVxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGJ1ZmZlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRoZSB0aW1lIGlzIG5vdCBpbiB0aGUgcmFuZ2VcclxuICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLy8gU0VSVklDRSBmdW5jdGlvbnNcclxuICAvLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBwcmludCBFUlJPUiBwcm9tcHQgbWVzc2FnZSBhYm91dCByYW5nZSB0byBzdGF0dXMgYmFyPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1zZ0lkXCI+b2YgZXJyb3IgTWVzc2FnZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2V0VmFsaWRhdGlvbkZhaWxkXCI+dmFsaWRhdGlvbiBmYWlsZWQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgcHJpbnRNZXNzYWdlKG1zZ0lkOiBzdHJpbmcsIHNldFZhbGlkYXRpb25GYWlsZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IG1lc3NhZ2U6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihcIlwiKTtcclxuICAgIGxldCBjdHJsVHlwZTogTWdDb250cm9sVHlwZTtcclxuXHJcbiAgICBpZiAobXNnSWQgPT09IE1zZ0ludGVyZmFjZS5FRFRfRVJSX1NUUl8xKVxyXG4gICAge1xyXG4gICAgICBsZXQgcGljOiBQSUMgPSB0aGlzLl92YWxEZXQuZ2V0UElDKCk7XHJcbiAgICAgIGxldCB0b2tlbjogc3RyaW5nID0gXCIlZFwiO1xyXG4gICAgICBsZXQgbWVzc2FnZVN0cmluZzogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcobXNnSWQpO1xyXG4gICAgICBtZXNzYWdlU3RyaW5nID0gU3RyVXRpbC5yZXBsYWNlU3RyaW5nVG9rZW5zKG1lc3NhZ2VTdHJpbmcsIHRva2VuLCAxLCBwaWMuZ2V0V2hvbGVzKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgIG1lc3NhZ2VTdHJpbmcgPSBTdHJVdGlsLnJlcGxhY2VTdHJpbmdUb2tlbnMobWVzc2FnZVN0cmluZywgdG9rZW4sIDEsIHBpYy5nZXREZWMoKS50b1N0cmluZygpKTtcclxuICAgICAgbWVzc2FnZS5BcHBlbmQobWVzc2FnZVN0cmluZyk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKG1zZ0lkKSk7XHJcbiAgICAgIGlmIChtc2dJZCA9PT0gTXNnSW50ZXJmYWNlLlNUUl9STkdfVFhUICYmIHRoaXMuX3ZhbERldC5nZXRSYW5nZSgpICE9IG51bGwpXHJcbiAgICAgICAgbWVzc2FnZS5BcHBlbmQoU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zKHRoaXMuX3ZhbERldC5nZXRSYW5nZSgpLCBIVE1MXzJfU1RSKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkgIT0gbnVsbClcclxuICAgIHtcclxuICAgICAgY3RybFR5cGUgPSB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLlR5cGU7XHJcbiAgICAgIGlmIChjdHJsVHlwZSAhPT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQlVUVE9OICYmIGN0cmxUeXBlICE9PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9SQURJTyAmJiAhdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5pc1NlbGVjdGlvbkN0cmwoKSlcclxuICAgICAge1xyXG4gICAgICAgIGxldCBtc2dTdHJpbmc6IHN0cmluZyA9IG1lc3NhZ2UuVG9TdHJpbmcoKTtcclxuICAgICAgICB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuV3JpdGVUb01lc3NhZ2VQYW5lKFN0clV0aWwubWFrZVByaW50YWJsZTIobXNnU3RyaW5nKSwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuRXJyb3JPY2N1cmVkID0gIU5TdHJpbmcuSXNOdWxsT3JFbXB0eShtc2dTdHJpbmcpO1xyXG4gICAgICAgIHRoaXMuX3ZhbERldC5FcnJvck1lc3NhZ2UgPSBtZXNzYWdlLlRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChzZXRWYWxpZGF0aW9uRmFpbGQpXHJcbiAgICAvLyBmcm9tIHRoaXMgcG9pbnQgdGhlIGZvY3VzIHNlbmQgYmFjayB0byBjb250cm9sIGFuZCBzZXRWYWxpZGF0aW9uRmFpbGVkKHRydWUpIGNhbiBub3Qgc2V0IGl0IHRvIHRydWVcclxuICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNoYW5nZSBpbnNpZGUgJ25ld3ZhbHVlJyBzdWJzdHJpbmcgb24gcG9zaXRpb24gJ2luZGV4JyB0byBzdHJpbmcgJ3RvJzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJuZXd2YWx1ZVwiPnRvIGNoYW5nZSBpbnNpZGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRvXCI+c3RyaW5nIHRvIGNoYW5nZSBieSBoaW08L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImluZGV4XCI+dGhlIHN1YnN0cmluZyB0byBjaGFuZ2Ugb24gdGhlIHBvc2l0aW9uPC9wYXJhbT5cclxuICBwcml2YXRlIGNoYW5nZVN0cmluZ0luc2lkZSh0bzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9uZXd2YWx1ZSA9IHRoaXMuX25ld3ZhbHVlLnN1YnN0cigwLCBpbmRleCkgKyB0byArICB0aGlzLl9uZXd2YWx1ZS5zdWJzdHIoaW5kZXggKyB0by5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KHZhbGlkYXRpb25EZXRhaWxzOiBWYWxpZGF0aW9uRGV0YWlscyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdmFsRGV0ID0gdmFsaWRhdGlvbkRldGFpbHM7XHJcbiAgICB0aGlzLl92YWxEZXQuc2V0TnVsbChmYWxzZSk7XHJcbiAgICB0aGlzLl9pc1BtID0gZmFsc2U7XHJcbiAgICBsZXQgcElDOiBQSUMgPSB0aGlzLl92YWxEZXQuZ2V0UElDKCk7XHJcbiAgICB0aGlzLl9vbGR2YWx1ZSA9IHRoaXMuX3ZhbERldC5nZXRPbGRWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbmV3dmFsdWUgPSB0aGlzLl92YWxEZXQuZ2V0RGlzcFZhbHVlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX25ld3ZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIGlmIChwSUMgPT0gbnVsbCAgfHwgcElDLmdldEF0dHIoKSAhPSBTdG9yYWdlQXR0cmlidXRlLkRBVEUpXHJcbiAgICAgICAgdGhpcy5fbmV3dmFsdWUgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9vbGR2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9vbGR2YWx1ZSA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEocElDID09PSBudWxsIHx8IHBJQy5nZXRBdHRyKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCBwSUMuZ2V0QXR0cigpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSkge1xyXG4gICAgICB0aGlzLl9waWN0dXJlID0gcElDLmdldE1hc2soKTtcclxuICAgICAgdGhpcy5oZWJyZXcgPSBwSUMuaXNIZWJyZXcoKTtcclxuICAgICAgdGhpcy5fcGljdHVyZSA9IHRoaXMuX3BpY3R1cmUuc3Vic3RyKDAsIHBJQy5nZXRNYXNrU2l6ZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5SZXR1cm4gaW5kZXggb2YgTWF4IG1lbWJlciBpbiBhcnJheTwvc3VtbWFyeT5cclxuICBwcml2YXRlIGZpbmRNYXgoYXJyYXk6IG51bWJlcltdKTogbnVtYmVyIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyID0gMDtcclxuICAgIGxldCBtYXg6IG51bWJlciA9IGFycmF5W2luZGV4XTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDE7IGkgPCBhcnJheS5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgaWYgKGFycmF5W2ldID4gbWF4KVxyXG4gICAgICB7XHJcbiAgICAgICAgbWF4ID0gYXJyYXlbaV07XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5pcyBjaGVja2VkIGNoYXIgRGF0YSBQb3NpdGlvbmFsIERpcmVjdGl2ZTwvc3VtbWFyeT5cclxuICBwcml2YXRlIGlzRGF0YVBvc2l0aW9uYWxEaXJlY3RpdmUodG9DaGVjazogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYXNjaWk6IG51bWJlciA9IHRvQ2hlY2suY2hhckNvZGVBdCgwKTtcclxuICAgIHJldHVybiAoYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWVkgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWVlZWSB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19NTUQgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1NXHJcbiAgICAgIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0REIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0RERCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19EREREIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX1dcclxuICAgICAgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfV1dXIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0hZWVlZWSB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ITCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19IREQgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWUpcclxuICAgICAgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlkxIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0pZMiB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTQgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfQkIpOyAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmNoZWNrIGlmIE51bWVyaWMgRGF0YSBQb3NpdGlvbmFsIERpcmVjdGl2ZSBleGlzdHM8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBpc0RhdGVQb3NpdGlvbmFsTnVtZXJpY0RpcmVjdGl2ZSh0b0NoZWNrOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBhc2NpaTogbnVtYmVyID0gdG9DaGVjay5jaGFyQ29kZUF0KDApO1xyXG4gICAgcmV0dXJuIChhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZWSB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX01NRCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ERFxyXG4gICAgICB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19EREQgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfRERERCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19XIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0hZWVlZWVxyXG4gICAgICB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ITCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19IREQgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWUogfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlkxXHJcbiAgICAgIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0pZMiB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTQgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfQkIpOyAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmlzIGNoZWNrZWQgY2hhciBOdW1lcmljIFBvc2l0aW9uYWwgRGlyZWN0aXZlPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaXNOdW1lcmljUG9zaXRpb25hbERpcmVjdGl2ZSh0b0NoZWNrOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBhc2NpaTogbnVtYmVyID0gdG9DaGVjay5jaGFyQ29kZUF0KDApO1xyXG4gICAgcmV0dXJuIChhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19OKTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+aXMgY2hlY2tlZCBjaGFyIExvZ2ljIFBvc2l0aW9uYWwgRGlyZWN0aXZlPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaXNMb2dpY1Bvc2l0aW9uYWxEaXJlY3RpdmUodG9DaGVjazogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYXNjaWk6IG51bWJlciA9IHRvQ2hlY2suY2hhckNvZGVBdCgwKTtcclxuICAgIHJldHVybiAoYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkZpbmQgaWYgdGhlIGxldHRlciBhdCBpbmRleCBpcyBQb3NpdGlvbmFsIERhdGUgRGlyZWN0aXZlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoYXJcIj50byBjaGVjayBpbiBwaWN0dXJlPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgUG9zaXRpb25hbCBEYXRlIERpcmVjdGl2ZTsgZmFsc2Ugb3RoZXJ3aXNlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaXNUaW1lUG9zaXRpb25hbERpcmVjdGl2ZSh0b0NoZWNrOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBhc2NpaTogbnVtYmVyID0gdG9DaGVjay5jaGFyQ29kZUF0KDApO1xyXG4gICAgcmV0dXJuIChhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ISCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19NTVQgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfU1MgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfUE0gfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfTVMpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5pcyBjaGVja2VkIHN0cmluZyBQb3NpdGlvbmFsIERpcmVjdGl2ZSBvZiBhbnkgdHlwZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmdWxsL3BhcnRcIj5vZiBwaWN0dXJlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBpbmRleCBvZiBkaXJlY3RpdmUgcG9zaXRpb24gb3IgLTEgaWYgbm90IGZvdW5kPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaW5kZXhPZlBvc2l0aW9uYWxOb25EaXJlY3RpdmUoc3RyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IHRtcDogc3RyaW5nO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgIHRtcCA9IHN0cltpXTtcclxuICAgICAgaWYgKERpc3BsYXlDb252ZXJ0b3IuaXNBbHBoYVBvc2l0aW9uYWxEaXJlY3RpdmUodG1wKSB8fCB0aGlzLmlzRGF0YVBvc2l0aW9uYWxEaXJlY3RpdmUodG1wKSB8fCB0aGlzLmlzTnVtZXJpY1Bvc2l0aW9uYWxEaXJlY3RpdmUodG1wKVxyXG4gICAgICAgIHx8IHRoaXMuaXNMb2dpY1Bvc2l0aW9uYWxEaXJlY3RpdmUodG1wKSB8fCB0aGlzLmlzVGltZVBvc2l0aW9uYWxEaXJlY3RpdmUodG1wKSlcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgcmV0dXJuIGk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHNldCB0aGUgXCJ2YWxpZGF0aW9uIGZhaWxlZFwiIGZsYWc8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsXCI+dmFsdWUgdG8gdXNlPC9wYXJhbT5cclxuICBwcml2YXRlIHNldFZhbGlkYXRpb25GYWlsZWQodmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdmFsRGV0LlZhbGlkYXRpb25GYWlsZWQpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fdmFsRGV0LnNldFZhbGlkYXRpb25GYWlsZWQodmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ291bnQgZGlnaXRzIGluIHN0cmluZyBiZWZvcmUgZGVsaW1ldGVyPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlucHV0U3RyaW5nXCI+LSBzdHJpbmcgdG8gbG9vayBpbnRvIGZvciBkZWxpbWV0ZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNlYXJjaFN0YXJ0XCI+LSBpbml0aWFsIGluZGV4IHBvc2l0aW9uIGZvciBzZWFyY2ggaW4gaW5wdXRTdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRlbGltZXRlclwiPndlIGFyZSBsb29raW5nIGZvcjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBkaWdpdHNCZWZvcmVEZWxpbWV0ZXIoaW5wdXRTdHJpbmc6IHN0cmluZywgc2VhcmNoU3RhcnQ6IG51bWJlciwgZGVsaW1ldGVyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IGNvdW50ZXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc2VhcmNoRW5kUG9zOiBudW1iZXIgPSBpbnB1dFN0cmluZy5pbmRleE9mKGRlbGltZXRlciwgc2VhcmNoU3RhcnQpO1xyXG5cclxuICAgIGlmIChzZWFyY2hFbmRQb3MgPCAwKVxyXG4gICAgICBzZWFyY2hFbmRQb3MgPSBpbnB1dFN0cmluZy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gc2VhcmNoU3RhcnQ7IGkgPCBzZWFyY2hFbmRQb3M7IGkrKylcclxuICAgIGlmIChOQ2hhci5Jc0RpZ2l0KGlucHV0U3RyaW5nW2ldKSlcclxuICAgICAgY291bnRlcisrO1xyXG5cclxuICAgIHJldHVybiBjb3VudGVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBieSBDdHJsK1UgKFNldCB0byBOdWxsKSwgbnVsbCBkaXNwbGF5IHZhbHVlIGlzIHNldCB0byBjdHJsLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCBmb2xsb3dpbmcgY2hlY2tpbmcgLCBpbiBvcmRlciB0byBzZXQgZmllbGQgdG8gbnVsbC48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsXCI+LSBlbnRlcmVkIHZhbHVlIHRvIHZhbHVlIHRvIGNoZWNrPC9wYXJhbT5cclxuICBwcml2YXRlIGlzTnVsbERpc3BsYXlWYWwoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNOdWxsRGlzcGxheVZhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGZpZWxkOiBHdWlGaWVsZEJhc2UgPSB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZpZWxkKCk7XHJcblxyXG4gICAgaWYgKGZpZWxkLk51bGxBbGxvd2VkICYmIGZpZWxkLmhhc051bGxEaXNwbGF5VmFsdWUoKSlcclxuICAgIHtcclxuICAgICAgbGV0IGRpc3BEZWZWYWx1ZTogYW55ID0gZmllbGQuZ2V0TnVsbERpc3BsYXkoKTtcclxuICAgICAgaWYgKGRpc3BEZWZWYWx1ZSAhPT0gbnVsbClcclxuICAgICAgICBpc051bGxEaXNwbGF5VmFsID0gKGRpc3BEZWZWYWx1ZS50b1N0cmluZygpID09PSB0aGlzLl9uZXd2YWx1ZSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpc051bGxEaXNwbGF5VmFsID0gKHRoaXMuX25ld3ZhbHVlID09PSBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNOdWxsRGlzcGxheVZhbDtcclxuICB9XHJcbn1cclxuIl19
1507
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGRWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZ3VpL0ZpZWxkVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUVULEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLGdCQUFnQixFQUNoQixhQUFhLEVBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUs5QixPQUFPLEVBQWtCLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDckUsT0FBTyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1YsYUFBYSxFQUNiLFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxXQUFXLEVBQ1gsZUFBZSxFQUNoQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRzlDLE1BQU0sT0FBTyxjQUFjO0lBWXpCO1FBWFEsY0FBUyxHQUFRLElBQUksQ0FBQztRQUN0QixjQUFTLEdBQVEsSUFBSSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBQzVCLG1CQUFj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Q0FBQyxRQUFRLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPO2VBQ3ZJLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsT0FBTyxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsUUFBUSxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSztlQUNsSSxLQUFLLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLFVBQVUsSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU07ZUFDdkssS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1SSxDQUFDO0lBR08sZ0NBQWdDLENBQUMsT0FBZTtRQUN0RCxJQUFJLEtBQUssR0FBVyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLFFBQVEsSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE9BQU8sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU07ZUFDdEksS0FBSyxLQUFLLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxRQUFRLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxVQUFVO2VBQ3RJLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsT0FBTyxJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMs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RSxFQUNwRDtZQUNFLElBQUksWUFBWSxHQUFRLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMvQyxJQUFJLFlBQVksS0FBSyxJQUFJO2dCQUN2QixnQkFBZ0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7O2dCQUVoRSxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUM7U0FDaEQ7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGF0ZVRpbWUsXHJcbiAgRXhjZXB0aW9uLFxyXG4gIExpc3QsXHJcbiAgTkNoYXIsXHJcbiAgTk51bWJlcixcclxuICBOU3RyaW5nLFxyXG4gIE51bWJlckZvcm1hdEluZm8sXHJcbiAgU3RyaW5nQnVpbGRlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtWYWxpZGF0aW9uRGV0YWlsc30gZnJvbSAnLi9WYWxpZGF0aW9uRGV0YWlscyc7XHJcbmltcG9ydCB7SUVudmlyb25tZW50fSBmcm9tICcuLi8uLi9lbnYvSUVudmlyb25tZW50JztcclxuaW1wb3J0IHtNZ0NvbnRyb2xCYXNlfSBmcm9tICcuL01nQ29udHJvbEJhc2UnO1xyXG5pbXBvcnQge0d1aUZpZWxkQmFzZX0gZnJvbSAnLi4vZGF0YS9HdWlGaWVsZEJhc2UnO1xyXG5pbXBvcnQge0RhdGVCcmVha1BhcmFtcywgRGlzcGxheUNvbnZlcnRvcn0gZnJvbSAnLi9EaXNwbGF5Q29udmVydG9yJztcclxuaW1wb3J0IHtcclxuICBEYXRlVXRpbCxcclxuICBIVE1MXzJfU1RSLFxyXG4gIE1nQ29udHJvbFR5cGUsXHJcbiAgTXNnSW50ZXJmYWNlLFxyXG4gIFBJQ0ludGVyZmFjZSxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0clV0aWwsXHJcbiAgVXRpbERhdGVKcG4sXHJcbiAgVXRpbFN0ckJ5dGVNb2RlXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7RXZlbnRzfSBmcm9tICcuLi8uLi9FdmVudHMnO1xyXG5pbXBvcnQge1dyb25nRm9ybWF0RXhjZXB0aW9ufSBmcm9tICcuL1dyb25nRm9ybWF0RXhjZXB0aW9uJztcclxuaW1wb3J0IHtQSUN9IGZyb20gJy4vUElDJztcclxuaW1wb3J0IHtEYXRlRWxlbWVudH0gZnJvbSAnLi4vLi4vR3VpRW51bXMnO1xyXG5pbXBvcnQge05VTV9UWVBFfSBmcm9tICcuLi9kYXRhL05VTV9UWVBFJztcclxuaW1wb3J0IHtIZWJyZXdEYXRlfSBmcm9tICcuL0hlYnJld0RhdGUnO1xyXG5pbXBvcnQge0Jsb2JUeXBlfSBmcm9tICcuLi9kYXRhL0Jsb2JUeXBlJztcclxuaW1wb3J0IHtHdWlFbnZpcm9ubWVudH0gZnJvbSAnLi4vLi4vR3VpRW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge1Byb3BJbnRlcmZhY2V9IGZyb20gXCIuL1Byb3BJbnRlcmZhY2VcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmllbGRWYWxpZGF0b3Ige1xyXG4gIHByaXZhdGUgX25ld3ZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgX29sZHZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgX3BpY3R1cmVSZWFsOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3BpY3R1cmVFbmFibGU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdmFsRGV0OiBWYWxpZGF0aW9uRGV0YWlscyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaXNQbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3BpY3R1cmU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBoZWJyZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9kZWNpbWFsOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBJRW52aXJvbm1lbnQgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQ7XHJcbiAgICB0aGlzLl9kZWNpbWFsID0gKHRoaXMuX2Vudmlyb25tZW50LkdldERlY2ltYWwoKSB8fCBcIlwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdGhlIG1haW4gbWV0aG9kIG9mIHRoaXMgY2xhc3M8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsRGV0XCI+YSBWYWxpZGF0aW9uRGV0YWlscyBvYmplY3QgdG8gdXNlIHdoZW4gdmFsaWRhdGluZzwvcGFyYW0+XHJcbiAgY2hlY2tWYWwodmFsRGV0OiBWYWxpZGF0aW9uRGV0YWlscyk6IFZhbGlkYXRpb25EZXRhaWxzIHtcclxuICAgIHRoaXMuX25ld3ZhbHVlID0gKHRoaXMuX29sZHZhbHVlID0gKHRoaXMuX3BpY3R1cmVSZWFsID0gKHRoaXMuX3BpY3R1cmVFbmFibGUgPSBudWxsKSkpO1xyXG4gICAgdGhpcy5pbml0KHZhbERldCk7XHJcbiAgICB2YWxEZXQuc2V0VmFsaWRhdGlvbkZhaWxlZChmYWxzZSk7XHJcbiAgICBsZXQgY3RybDogTWdDb250cm9sQmFzZSA9IHZhbERldC5nZXRDb250cm9sKCk7XHJcbiAgICAvLyBUT0RPIC0gdW5jb21tZW50IHRoaXMgbGluZSB3aGVuICdQUk9QX1RZUEVfTU9ESUZZX0lOX1FVRVJZJyBpcyBzdXBwb3J0ZWQgZm9yIG90aGVyIGNvbnRyb2xzXHJcbiAgICBsZXQgbW9kSW5RdWV1eTogYm9vbGVhbiA9XHJcbiAgICAgIGN0cmwuaXNSZXBlYXRhYmxlKCk/IGZhbHNlIDogIGN0cmwuR2V0Q29tcHV0ZWRCb29sZWFuUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTU9ESUZZX0lOX1FVRVJZLCBmYWxzZSwgY3RybC5nZXREaXNwbGF5TGluZShmYWxzZSkpO1xyXG5cclxuICAgIGxldCB1c2VOYXRpdmU6IGJvb2xlYW4gPSBjdHJsLmlzTW9kaWZpYWJsZSgpO1xyXG5cclxuICAgIGlmIChjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0TW9kZSgpID09PSAnRScgJiYgIW1vZEluUXVldXkpIHtcclxuICAgICAgdmFsRGV0LnNldFZhbHVlKHRoaXMuX29sZHZhbHVlKTtcclxuICAgICAgcmV0dXJuIHZhbERldDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3RybC5UeXBlID09PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9SQURJTyB8fCBjdHJsLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NIRUNLQk9YIHx8IGN0cmwuVHlwZSA9PT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEFCIHx8IGN0cmwuaXNTZWxlY3Rpb25DdHJsKCkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoY3RybC5UeXBlID09PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DSEVDS0JPWCkge1xyXG4gICAgICAgICAgdmFsRGV0LnNldE51bGwoY3RybC5pc051bGxWYWx1ZSh0aGlzLl9uZXd2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbmV3dmFsdWUgIT09IG51bGwgJiYgY3RybC5pc1NlbGVjdGlvbkN0cmwoKSkge1xyXG4gICAgICAgICAgbGV0IGlkeDogbnVtYmVyID0gTk51bWJlci5QYXJzZSh0aGlzLl9uZXd2YWx1ZSk7XHJcbiAgICAgICAgICBpZiAoY3RybC5pc0Nob2ljZU51bGwoaWR4KSkge1xyXG4gICAgICAgICAgICB2YWxEZXQuc2V0TnVsbCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKGV4XzExMSkge1xyXG4gICAgICAgIGlmIChleF8xMTEgaW5zdGFuY2VvZiBFeGNlcHRpb24pIHtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhyb3cgZXhfMTExO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbERldC5zZXRWYWx1ZSh0aGlzLl9uZXd2YWx1ZSk7XHJcbiAgICAgIHJldHVybiB2YWxEZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3BhY2V8bm90aGluZyB3YXMgaW5zZXJ0ZWQgIC0+IHVzZSBkZWZhdWx0IHZhbHVlXHJcbiAgICBpZiAoY3RybC5EYXRhVHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiBjdHJsLkRhdGFUeXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgJiYgY3RybC5EYXRhVHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgICBpZiAoKHR5cGVvZiB0aGlzLl9uZXd2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5fbmV3dmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMCkgfHwgKGN0cmwuRGF0YVR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSAmJiAoY3RybC5pc0RhdGVaZXJvKHRoaXMuX25ld3ZhbHVlKSB8fCB0aGlzLmlzTnVsbERpc3BsYXlWYWwoKSkpKSB7XHJcbiAgICAgICAgICAgIGxldCBmaWVsZDogR3VpRmllbGRCYXNlID0gY3RybC5nZXRGaWVsZCgpO1xyXG4gICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlOiBzdHJpbmcgPSBmaWVsZC5nZXREZWZhdWx0VmFsdWUoKTtcclxuICAgICAgICAgICAgbGV0IHRleHQ6IGFueSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC5pc051bGxEZWZhdWx0KCkpIHtcclxuICAgICAgICAgICAgICB2YWxEZXQuc2V0TnVsbCh0cnVlKTtcclxuICAgICAgICAgICAgICB0ZXh0ID0gZmllbGQuZ2V0TnVsbERpc3BsYXkoKTtcclxuICAgICAgICAgICAgICBpZiAoTlN0cmluZy5Jc051bGxPckVtcHR5KHRleHQpICYmIGN0cmwuRGF0YVR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSkge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChkZWZhdWx0VmFsdWUsIHZhbERldC5nZXRSYW5nZSgpLCB2YWxEZXQuZ2V0UElDKCksIHVzZU5hdGl2ZSwgZmllbGQuZ2V0VGFzaygpLmdldENvbXBJZHgoKSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHRleHQgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLm1nMmRpc3AoZGVmYXVsdFZhbHVlLCB2YWxEZXQuZ2V0UmFuZ2UoKSwgdmFsRGV0LmdldFBJQygpLCB1c2VOYXRpdmUsIGZpZWxkLmdldFRhc2soKS5nZXRDb21wSWR4KCksIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKCFmaWVsZC5pc051bGxEZWZhdWx0KCkgJiYgKHRoaXMuX3ZhbERldC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKSAhPT0gbnVsbCB8fCB0aGlzLl92YWxEZXQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpICE9PSBudWxsKSkpXHJcbiAgICAgICAgICAgICAgdGhpcy5fbmV3dmFsdWUgPSB0ZXh0O1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB2YWxEZXQuc2V0VmFsdWUodGV4dCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbERldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgIH1cclxuXHJcblxyXG4gICAgaWYgKCh0eXBlb2YgdGhpcy5fbmV3dmFsdWUgPT09ICdzdHJpbmcnICYmICEoU3RyVXRpbC5ydHJpbSh0aGlzLl9uZXd2YWx1ZSkgPT09IFN0clV0aWwucnRyaW0odGhpcy5fb2xkdmFsdWUpKSkgfHwgY3RybC5Nb2RpZmllZEJ5VXNlcilcclxuICAgIHtcclxuICAgICAgdHJ5XHJcbiAgICAgIHtcclxuICAgICAgICBzd2l0Y2ggKHZhbERldC5nZXRUeXBlKCkpXHJcbiAgICAgICAge1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgICAgICB2YWxEZXQuc2V0VmFsdWUodGhpcy5jaGVja0FscGhhRmllbGQoKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgICAgICB0aGlzLl9waWN0dXJlUmVhbCA9IHZhbERldC5nZXRQaWN0dXJlUmVhbCgpOyAvLyBvbmx5IG51bWVyaWMgdHlwZSBuZWVkIGFub3RoZXIgcGljdHVyZSBmb3JtYXRcclxuICAgICAgICAgICAgdGhpcy5fcGljdHVyZUVuYWJsZSA9IHZhbERldC5nZXRQaWN0dXJlRW5hYmxlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tOdW1lcmljUGljdHVyZSgpO1xyXG4gICAgICAgICAgICB2YWxEZXQuc2V0VmFsdWUodGhpcy5jaGVja051bWVyaWNGaWVsZCgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICAgIHZhbERldC5zZXRWYWx1ZSh0aGlzLmNoZWNrTG9naWNhbEZpZWxkKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICAgICAgdmFsRGV0LnNldFZhbHVlKHRoaXMuY2hlY2tEYXRlRmllbGQoKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgICB2YWxEZXQuc2V0VmFsdWUodGhpcy5jaGVja1RpbWVGaWVsZCgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgICAvLyB0aGVyZSBpcyBubyByZWFsIHBpY3R1cmUgdG8gQkxPQiwgZG8gbm90aGluZ1xyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgICAgICB2YWxEZXQuc2V0VmFsdWUodGhpcy5fbmV3dmFsdWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTpcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKFwiRmllbGRWYWxpZGF0b3IuY2hlY2tWYWw6IFR5cGUgb2YgdGhlIGZpZWxkIFwiICsgdmFsRGV0LmdldFR5cGUoKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZ29CYWNrKSB7XHJcbiAgICAgICAgaWYgKGdvQmFjayBpbnN0YW5jZW9mIFdyb25nRm9ybWF0RXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAvLyBuZWVkIGNoYW5nZSB0byBvbGQgdmFsdWUsIHNldCBmb2N1cyBiYWNrIGFuZCB3cml0ZSBFcnJvciBNZXNzYWdlXHJcbiAgICAgICAgICB2YWxEZXQuc2V0VmFsdWUodGhpcy5fb2xkdmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKHRydWUpO1xyXG4gICAgICAgICAgaWYgKGdvQmFjay5nZXRUeXBlKCkgIT09IE1zZ0ludGVyZmFjZS5TVFJfUk5HX1RYVCkge1xyXG4gICAgICAgICAgICB0aGlzLnByaW50TWVzc2FnZShnb0JhY2suZ2V0VHlwZSgpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZhaWxlZCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5wcmludE1lc3NhZ2UoTXNnSW50ZXJmYWNlLlNUUl9STkdfVFhULCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxEZXQ7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNoZWNrICYgdmFsaWRhdGUgQWxwaGEgZmllbGQgYnkgaGlzIG9sZC9uZXcgdmFsdWUgYW5kIDIgcGljdHVyZXM6XHJcbiAgLy8vIFJlYWwgYW5kIEVuYWJsZVxyXG4gIC8vLyAxLmNoZWNrIGlmIG5ld3ZhbHVlIGNvbXBsZXRlIHdpdGggcGljdHVyZXMsIG90aGVyd2lzZSByZXR1cm4gb2xkdmFsdWVcclxuICAvLy8gMi5jaGVjayBpZiBuZXd2YWx1ZSBjb21wbGV0ZSB3aXRoIHJhbmdlXHJcbiAgLy8vIDIuMSBjb21wbGV0ZSB2YWx1ZSwgaWYgcG9zc2libGUsIG90aGVyd2lzZSAgcmV0dXJuIG9sZHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IFN0cmluZyAtIG5ldyB2YWx1ZSBvZiB2YWxpZGF0ZWQgZmllbGQ8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBjaGVja0FscGhhRmllbGQoKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgY29udHJvbDogTWdDb250cm9sQmFzZSA9IHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCk7XHJcblxyXG4gICAgbGV0IElzQXR0ckFscGhhOiBib29sZWFuID0gdGhpcy5fdmFsRGV0LmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuXHJcbiAgICBpZiAodGhpcy5fbmV3dmFsdWUubGVuZ3RoID09PSAwICYmIHRoaXMuX3ZhbERldC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKSA9PT0gbnVsbCAmJiB0aGlzLl92YWxEZXQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZhaWxlZChmYWxzZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9uZXd2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoSXNBdHRyQWxwaGEgJiYgVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSkge1xyXG4gICAgICBsZXQgcGljTGVuQjogbnVtYmVyID0gVXRpbFN0ckJ5dGVNb2RlLmxlbkIodGhpcy5fcGljdHVyZSk7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUubGVuQih0aGlzLl9uZXd2YWx1ZSkgPiBwaWNMZW5CKSB7XHJcbiAgICAgICAgdGhpcy5fbmV3dmFsdWUgPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIodGhpcy5fbmV3dmFsdWUsIHBpY0xlbkIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX25ld3ZhbHVlLmxlbmd0aCA+IHRoaXMuX3BpY3R1cmUubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5fbmV3dmFsdWUgPSB0aGlzLl9uZXd2YWx1ZS5zdWJzdHIoMCwgdGhpcy5fcGljdHVyZS5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICBsZXQgY3VyclBpY3R1cmU6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXIgPSBjdXJyUGljdHVyZSA9IDA7XHJcblxyXG4gICAgZm9yIChjdXJyUGljdHVyZSA9IGkgPSAwOyBpIDwgdGhpcy5fbmV3dmFsdWUubGVuZ3RoICYmIGN1cnJQaWN0dXJlIDwgdGhpcy5fcGljdHVyZS5sZW5ndGg7ICkge1xyXG4gICAgICBpZiAoIURpc3BsYXlDb252ZXJ0b3IuaXNBbHBoYVBvc2l0aW9uYWxEaXJlY3RpdmUodGhpcy5fcGljdHVyZS5jaGFyQXQoY3VyclBpY3R1cmUpKSAmJiB0aGlzLl9uZXd2YWx1ZS5jaGFyQXQoaSkgPT09IHRoaXMuX3BpY3R1cmUuY2hhckF0KGN1cnJQaWN0dXJlKSkge1xyXG4gICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHRoaXMuX3BpY3R1cmUuY2hhckF0KGN1cnJQaWN0dXJlKSk7XHJcbiAgICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICAgIGN1cnJQaWN0dXJlID0gY3VyclBpY3R1cmUgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICghRGlzcGxheUNvbnZlcnRvci5pc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZSh0aGlzLl9waWN0dXJlLmNoYXJBdChjdXJyUGljdHVyZSkpICYmIHRoaXMuX25ld3ZhbHVlLmNoYXJBdChpKSAhPT0gdGhpcy5fcGljdHVyZS5jaGFyQXQoY3VyclBpY3R1cmUpKSB7XHJcbiAgICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZCh0aGlzLl9waWN0dXJlLmNoYXJBdChjdXJyUGljdHVyZSkpO1xyXG4gICAgICAgICAgY3VyclBpY3R1cmUgPSBjdXJyUGljdHVyZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKERpc3BsYXlDb252ZXJ0b3IuaXNBbHBoYVBvc2l0aW9uYWxEaXJlY3RpdmUodGhpcy5fcGljdHVyZS5jaGFyQXQoY3VyclBpY3R1cmUpKSAmJiB0aGlzLmlzUG9zc2libGVBbHBoYUxldHRlcihpLCBjdXJyUGljdHVyZSkpIHtcclxuICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgICAgICAgICBsZXQgc3RyVmFsOiBzdHJpbmcgPSB0aGlzLl9uZXd2YWx1ZS5zdWJzdHIoaSwgMSk7XHJcbiAgICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5sZW5CKHN0clZhbCkgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChJc0F0dHJBbHBoYSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY3VyclBpY3R1cmUgKyAxIDwgdGhpcy5fcGljdHVyZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoRGlzcGxheUNvbnZlcnRvci5pc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZSh0aGlzLl9waWN0dXJlLmNoYXJBdChjdXJyUGljdHVyZSArIDEpKSAmJiB0aGlzLmlzUG9zc2libGVBbHBoYUxldHRlcihpLCBjdXJyUGljdHVyZSArIDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZCh0aGlzLl9uZXd2YWx1ZS5jaGFyQXQoaSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY3VyclBpY3R1cmUgPSBjdXJyUGljdHVyZSArIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoJyAnKS8qJyAnKi87XHJcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyUGljdHVyZSA9IGN1cnJQaWN0dXJlICsgMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoJyAnKS8qJyAnKi87XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyclBpY3R1cmUgPSBjdXJyUGljdHVyZSArIDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZCh0aGlzLl9uZXd2YWx1ZS5jaGFyQXQoaSkpO1xyXG4gICAgICAgICAgICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgIGN1cnJQaWN0dXJlID0gY3VyclBpY3R1cmUgKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHRoaXMuX25ld3ZhbHVlLmNoYXJBdChpKSk7XHJcbiAgICAgICAgICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICBjdXJyUGljdHVyZSA9IGN1cnJQaWN0dXJlICsgMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQodGhpcy5fbmV3dmFsdWUuY2hhckF0KGkpKTtcclxuICAgICAgICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgY3VyclBpY3R1cmUgPSBjdXJyUGljdHVyZSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZCgnICcpLyonICcqLztcclxuICAgICAgICAgICAgY3VyclBpY3R1cmUgPSBjdXJyUGljdHVyZSArIDE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHR5cGU6IE1nQ29udHJvbFR5cGUgPSBjb250cm9sLlR5cGU7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGUgIT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0JVVFRPTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmludE1lc3NhZ2UoTXNnSW50ZXJmYWNlLlNUUl9FUlJfTlVNLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9uZXd2YWx1ZSA9IHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICAgIGlmICh0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCkgIT09IG51bGwgfHwgdGhpcy5fdmFsRGV0LmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9uZXd2YWx1ZSA9IHRoaXMuZmlsbEFscGhhQnlSYW5nZSh0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCksIHRoaXMuX3ZhbERldC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICB0aGlzLl9uZXd2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5jaGVjayBpZiBjaGFyIGluIEFscGhhIGNvbXBsZWF0ZSB3aXRoIERpcmVjdGl2ZSBDaGFyYWN0ZXIgZm9yIHRoZSBsZXR0ZXI8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaW5kZXhcIj5vZiBkaXJlY3RpdmUgaW4gc3RyaW5nIHRvIGNoZWNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgY29tcGxldGUsIGZhbHNlIG90aGVyd2lzZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGlzUG9zc2libGVBbHBoYUxldHRlcihpbmRleElucHV0OiBudW1iZXIsIGluZGV4UGljdHVyZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuO1xyXG4gICAgc3dpdGNoICh0aGlzLl9waWN0dXJlLmNoYXJDb2RlQXQoaW5kZXhQaWN0dXJlKSkge1xyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWDpcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0o6XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19HOlxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfUzpcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1Q6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgICBsZXQgdXBwZXI6IHN0cmluZyA9IHRoaXMuX25ld3ZhbHVlW2luZGV4SW5wdXRdLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKHVwcGVyICE9PSB0aGlzLl9uZXd2YWx1ZVtpbmRleElucHV0XSlcclxuICAgICAgICAgIHRoaXMuY2hhbmdlU3RyaW5nSW5zaWRlKFwiXCIgKyB1cHBlciwgaW5kZXhJbnB1dCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICBsZXQgbG93ZXI6IHN0cmluZyA9IHRoaXMuX25ld3ZhbHVlW2luZGV4SW5wdXRdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGxvd2VyICE9PSB0aGlzLl9uZXd2YWx1ZVtpbmRleElucHV0XSlcclxuICAgICAgICAgIHRoaXMuY2hhbmdlU3RyaW5nSW5zaWRlKFwiXCIgKyBsb3dlciwgaW5kZXhJbnB1dCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTjpcclxuICAgICAgICBsZXQgbnVtYmVyMTogc3RyaW5nID0gdGhpcy5fbmV3dmFsdWVbaW5kZXhJbnB1dF07XHJcbiAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KG51bWJlcjEpIHx8IE5DaGFyLklzV2hpdGVTcGFjZShudW1iZXIxKSB8fCBVdGlsU3RyQnl0ZU1vZGUuYXNOdW1lcmljKG51bWJlcjEpKVxyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIEV2ZW50cy5Xcml0ZUVycm9yVG9Mb2coXCJCYWQgQWxwaGEgdmFsdWUuIFNob3VsZCBiZSBudW1iZXIgb25seSBvbiBwbGFjZSBOdW0uIFwiICsgaW5kZXhJbnB1dCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBFdmVudHMuV3JpdGVFcnJvclRvTG9nKFwiRmllbGRWYWxpZGF0b3IuaXNQb3NzaWJsZUFscGhhTGV0dGVyOiBpbGxlZ2FsIENoYXIgRGlyZWN0aXZlOiBcIiArIHRoaXMuX3BpY3R1cmUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKGluZGV4UGljdHVyZSkpICsgXCIgZm9yIFwiICsgdGhpcy5fbmV3dmFsdWVbaW5kZXhJbnB1dF0pO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5pZiBuZXcgdmFsdWUgd2Fzbid0IGZpbmlzaGVkIGFuZCBzdGF5IHVud3JpdGFibGUgcGVhY2VzIG9mIHRoZSBSZWFsIHBpY3R1cmUgLSBhZGQgaXRcclxuICAvLy8gdG8gdGhlIGVuZCBvZiB0aGUgbmV3dmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZmlsbEFsbEFscGhhKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHRoaXMuX3BpY3R1cmUubGVuZ3RoKTtcclxuICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHRoaXMuX25ld3ZhbHVlKTtcclxuXHJcbiAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiB0aGlzLl92YWxEZXQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKSB7XHJcbiAgICAgIGxldCBpbnROZXd2YWx1ZUxlbkI6IG51bWJlciA9IFV0aWxTdHJCeXRlTW9kZS5sZW5CKHRoaXMuX25ld3ZhbHVlKTtcclxuICAgICAgbGV0IHN0ckJ1aWVkUGljdHVyZTogc3RyaW5nID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHRoaXMuX3BpY3R1cmUsIGludE5ld3ZhbHVlTGVuQik7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IHN0ckJ1aWVkUGljdHVyZS5sZW5ndGg7IGkgPCB0aGlzLl9waWN0dXJlLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgaWYgKERpc3BsYXlDb252ZXJ0b3IuaXNBbHBoYVBvc2l0aW9uYWxEaXJlY3RpdmUodGhpcy5fcGljdHVyZS5jaGFyQXQoaSkpKSB7XHJcbiAgICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZCgnICcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHRoaXMuX3BpY3R1cmUuY2hhckF0KGkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggLSAxOyBpIDwgdGhpcy5fcGljdHVyZS5sZW5ndGggJiYgaSA+PSAwOyBpKyspIHtcclxuICAgICAgICBpZiAoRGlzcGxheUNvbnZlcnRvci5pc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZSh0aGlzLl9waWN0dXJlLmNoYXJBdChpKSkpIHtcclxuICAgICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKCcgJykvKicgJyovO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHRoaXMuX3BpY3R1cmUuY2hhckF0KGkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNvbXBhcmF0aXZlIG5ld3ZhbHVlIHdpdGggcG9zc2libGUgUmFuZ2UgaW4gQ29udGludW91c1JhbmdlVmFsdWVzL0Rpc2NyZXRlUmFuZ2VWYWx1ZXM8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBuZXd2YWx1ZSBpZiBpdCBwb3NzaWJsZSwgb2xkdmFsdWUgb3RoZXJ3aXNlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZmlsbEFscGhhQnlSYW5nZShDb250aW51b3VzUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiwgRGlzY3JldGVSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+KTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgdG1wQnVmZmVyOiBzdHJpbmcgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmZpbGxBbHBoYUJ5RGlzY3JldGVSYW5nZVZhbHVlcyhEaXNjcmV0ZVJhbmdlVmFsdWVzLCB0aGlzLl9uZXd2YWx1ZSk7XHJcbiAgICBpZiAodG1wQnVmZmVyICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0bXBCdWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdG1wQnVmZmVyID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5maWxsQWxwaGFCeUNvbnRpbnVvdXNSYW5nZVZhbHVlcyhDb250aW51b3VzUmFuZ2VWYWx1ZXMsIHRoaXMuX25ld3ZhbHVlKTtcclxuICAgIGlmICh0bXBCdWZmZXIgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiB0bXBCdWZmZXI7XHJcblxyXG4gICAgICBpZiAoRGlzY3JldGVSYW5nZVZhbHVlcyAhPT0gbnVsbClcclxuICAgICAgICByZXR1cm4gdGhpcy5Db21wbGV0ZUFscGhhQnlSYW5nZShEaXNjcmV0ZVJhbmdlVmFsdWVzKTtcclxuXHJcblxyXG4gICAgdGhpcy5wcmludE1lc3NhZ2UoTXNnSW50ZXJmYWNlLlNUUl9STkdfVFhULCB0cnVlKTtcclxuICAgIHJldHVybiB0aGlzLl9vbGR2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5UcnkgdG8gY29tcGxldGUgdGhlIG5ld3ZhbHVlIGJ5IFJhbmdlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gY29tcGxldGVkIHZhbHVlIGlmIGl0IHBvc3NpYmxlLCBvdGhlcndpc2Ugb2xkdmFsdWU8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBDb21wbGV0ZUFscGhhQnlSYW5nZShEaXNjcmV0ZVJhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgbGV0IHRtcE5ld1ZhbHVlOiBzdHJpbmcgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmNvbXBsZXRlQWxwaGFCeVJhbmdlKERpc2NyZXRlUmFuZ2VWYWx1ZXMsIHRoaXMuX25ld3ZhbHVlKTtcclxuICAgIGlmICh0bXBOZXdWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdG1wTmV3VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZm9jdXMgYmFja1xyXG4gICAgdGhpcy5wcmludE1lc3NhZ2UoTXNnSW50ZXJmYWNlLlNUUl9STkdfVFhULCB0cnVlKTtcclxuICAgIHJldHVybiB0aGlzLl9vbGR2YWx1ZTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Y2hlY2sgJiB2YWxpZGF0ZSBMb2dpY2FsIGZpZWxkIGJ5IGhpcyBvbGQvbmV3IHZhbHVlIGFuZCAyIHBpY3R1cmVzOlxyXG4gIC8vLyBSZWFsIGFuZCBFbmFibGVcclxuICAvLy8gMS5jaGVjayBpZiBuZXd2YWx1ZSBjb21wbGV0ZSB3aXRoIHBpY3R1cmVzLCBvdGhlcndpc2UgcmV0dXJuIG9sZHZhbHVlXHJcbiAgLy8vIDIuY2hlY2sgaWYgbmV3dmFsdWUgY29tcGxldGUgd2l0aCByYW5nZVxyXG4gIC8vLyAyLjEgY29tcGxldGUgdmFsdWUsIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgIHJldHVybiBvbGR2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBTdHJpbmcgLSBuZXcgdmFsdWUgb2YgdmFsaWRhdGVkIGZpZWxkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgY2hlY2tMb2dpY2FsRmllbGQoKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKHRoaXMuX25ld3ZhbHVlLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCkgPT09IG51bGwgJiYgdGhpcy5fdmFsRGV0LmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKSA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgV3JvbmdGb3JtYXRFeGNlcHRpb24oTXNnSW50ZXJmYWNlLlNUUl9STkdfVFhUKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmFsRGV0LmdldENvbnRpbnVvdXNSYW5nZVZhbHVlcygpICE9PSBudWxsIHx8IHRoaXMuX3ZhbERldC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCkgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fbmV3dmFsdWUgPSB0aGlzLmZpbGxBbHBoYUJ5UmFuZ2UodGhpcy5fdmFsRGV0LmdldENvbnRpbnVvdXNSYW5nZVZhbHVlcygpLCB0aGlzLl92YWxEZXQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldFZhbGlkYXRpb25GYWlsZWQoZmFsc2UpO1xyXG5cclxuICAvLyB0b2RvIDogbmVlZCB0byBjaGVjayB3aGF0IGlzIHRvIGhhbmRsZSBmb3IgY2hlY2tpbmcgcmFuZ2VzXHJcbiAgICByZXR1cm4gdGhpcy5fbmV3dmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KioqKioqKioqKioqKioqKioqKioqKioqKipOdW1lcmljKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqPC9zdW1tYXJ5PlxyXG5cclxuICAvLy8gPHN1bW1hcnk+Y2hlY2sgJiB2YWxpZGF0ZSBOdW1lcmljIGZpZWxkIGJ5IGhpcyBvbGQvbmV3IHZhbHVlIGFuZCAyIHBpY3R1cmVzOlxyXG4gIC8vLyBSZWFsIGFuZCBFbmFibGVcclxuICAvLy8gMS5jaGVjayBpZiBuZXd2YWx1ZSBjb21wbGV0ZSB3aXRoIHBpY3R1cmVzLCBvdGhlcndpc2UgcmV0dXJuIG9sZHZhbHVlXHJcbiAgLy8vIDIuY2hlY2sgaWYgbmV3dmFsdWUgY29tcGxldGUgd2l0aCByYW5nZVxyXG4gIC8vLyAyLjEgY29tcGxldGUgdmFsdWUsIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgIHJldHVybiBvbGR2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBTdHJpbmcgLSBuZXcgdmFsdWUgb2YgdmFsaWRhdGVkIGZpZWxkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgY2hlY2tOdW1lcmljRmllbGQoKTogYW55IHtcclxuXHJcbiAgICBsZXQgZXZhbHVhdGVkOiBhbnk7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMuX25ld3ZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAodGhpcy5fbmV3dmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5fbmV3dmFsdWUgPSBcIjBcIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGRlbGltZXRlclJlYWxJbmRleDogbnVtYmVyID0gdGhpcy5fbmV3dmFsdWUuaW5kZXhPZih0aGlzLl9kZWNpbWFsKTtcclxuICAgICAgbGV0IGRlbGltZXRlclBpY3RJbmRleDogbnVtYmVyID0gdGhpcy5fcGljdHVyZVJlYWwuaW5kZXhPZih0aGlzLl9kZWNpbWFsKTtcclxuXHJcbiAgICAgIGV2YWx1YXRlZCA9IFwiXCI7XHJcbiAgICAgIGxldCBldmFsdWF0ZWRMZWZ0OiBzdHJpbmc7XHJcbiAgICAgIGxldCBldmFsdWF0ZWRSaWdodDogc3RyaW5nO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZhaWxlZChmYWxzZSk7XHJcblxyXG4gICAgICAvLyBjaGVjayBpZiB0aGUgZm9ybWF0IG9mIG5ld3ZhbHVlIG1hdGNoZXMgdGhlIG51bWVyaWMgbWFzay5cclxuICAgICAgaWYgKCF0aGlzLmNoZWNrTnVtZXJpY0luRGVjRm9ybWF0KCkpXHJcbiAgICAgICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKE1zZ0ludGVyZmFjZS5FRFRfRVJSX1NUUl8xKTtcclxuXHJcbiAgICAgIGlmIChkZWxpbWV0ZXJQaWN0SW5kZXggIT09IC0xICYmIGRlbGltZXRlclJlYWxJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBldmFsdWF0ZWRMZWZ0ID0gdGhpcy5jaGVja051bWVyaWNMZWZ0KGRlbGltZXRlclBpY3RJbmRleCwgZGVsaW1ldGVyUmVhbEluZGV4KTtcclxuICAgICAgICBldmFsdWF0ZWRSaWdodCA9IHRoaXMuY2hlY2tOdW1lcmljUmlnaHQoZGVsaW1ldGVyUGljdEluZGV4LCBkZWxpbWV0ZXJSZWFsSW5kZXgpO1xyXG4gICAgICAgIGV2YWx1YXRlZCA9IGV2YWx1YXRlZExlZnQgKyB0aGlzLl9kZWNpbWFsICsgZXZhbHVhdGVkUmlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGRlbGltZXRlclBpY3RJbmRleCAhPT0gLTEgJiYgZGVsaW1ldGVyUmVhbEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgZXZhbHVhdGVkTGVmdCA9IHRoaXMuY2hlY2tOdW1lcmljTGVmdChkZWxpbWV0ZXJQaWN0SW5kZXgsIE1hdGgubWluKGRlbGltZXRlclBpY3RJbmRleCwgdGhpcy5fbmV3dmFsdWUubGVuZ3RoKSk7XHJcbiAgICAgICAgICBldmFsdWF0ZWRSaWdodCA9IHRoaXMuY2hlY2tOdW1lcmljUmlnaHQoZGVsaW1ldGVyUGljdEluZGV4LCBkZWxpbWV0ZXJQaWN0SW5kZXggLSAxKTtcclxuICAgICAgICAgIGV2YWx1YXRlZCA9IGV2YWx1YXRlZExlZnQgKyB0aGlzLl9kZWNpbWFsICsgZXZhbHVhdGVkUmlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvLyBkZWxpbWV0ZXJQaWN0SW5kZXggPT0gLTEgJiYgZGVsaW1ldGVyUmVhbEluZGV4ICE9IC0xXHJcbiAgICAgICAgICBpZiAoZGVsaW1ldGVyUGljdEluZGV4ID09PSAtMSAmJiBkZWxpbWV0ZXJSZWFsSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGV2YWx1YXRlZCA9IHRoaXMuY2hlY2tOdW1lcmljUmlnaHQoLTEsIC0xKTtcclxuICAgICAgICAgICAgZXZhbHVhdGVkTGVmdCA9IGV2YWx1YXRlZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZGVsaW1ldGVyUmVhbEluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX25ld3ZhbHVlID0gdGhpcy5fbmV3dmFsdWUuc3Vic3RyKDAsIGRlbGltZXRlclJlYWxJbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fbmV3dmFsdWUgPSBcIjBcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldmFsdWF0ZWQgPSB0aGlzLmNoZWNrTnVtZXJpY1JpZ2h0KC0xLCAtMSk7XHJcbiAgICAgICAgICAgIGV2YWx1YXRlZExlZnQgPSBldmFsdWF0ZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKGV2YWx1YXRlZFJpZ2h0Lmxlbmd0aCA9PT0gMCAmJiBldmFsdWF0ZWRMZWZ0Lmxlbmd0aCA9PT0gMCkgfHwgKGV2YWx1YXRlZC5sZW5ndGggPT09IDAgJiYgdGhpcy5fbmV3dmFsdWUubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAvLyBzcGFjZXxub3RoaW5nIHdhcyBpbnNlcnRlZCAgLT4gdXNlIGRlZmF1bHQgdmFsdWVcclxuICAgICAgICBsZXQgY3RybDogTWdDb250cm9sQmFzZTtcclxuICAgICAgICBjdHJsID0gdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKTtcclxuXHJcbiAgICAgICAgbGV0IGZpZWxkOiBHdWlGaWVsZEJhc2UgPSBjdHJsLmdldEZpZWxkKCk7XHJcbiAgICAgICAgbGV0IGRlZlZhbHVlOiBzdHJpbmcgPSBmaWVsZC5nZXREZWZhdWx0VmFsdWUoKTsgLy8gaW5uZXIgdmFsdWUgaW5zZXJ0ZWRcclxuICAgICAgICBsZXQgZGlzcERlZlZhbHVlOiBhbnkgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQuaXNOdWxsRGVmYXVsdCgpKSB7XHJcbiAgICAgICAgICB0aGlzLl92YWxEZXQuc2V0TnVsbCh0cnVlKTtcclxuICAgICAgICAgIGRpc3BEZWZWYWx1ZSA9IGZpZWxkLmdldE51bGxEaXNwbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXNwRGVmVmFsdWUgPT0gbnVsbClcclxuICAgICAgICAgIGRpc3BEZWZWYWx1ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChkZWZWYWx1ZSwgdGhpcy5fdmFsRGV0LmdldFJhbmdlKCksIHRoaXMuX3ZhbERldC5nZXRQSUMoKSwgdHJ1ZSwgZmllbGQuZ2V0VGFzaygpLmdldENvbXBJZHgoKSwgZmFsc2UpO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY2hlY2sgaWYgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgZGVsaW1pdGVyIGRvIG5vdCBleGNlZWQgdGhlIHBpYyB3aG9sZXMuXHJcbiAgICAgIGxldCB3aG9sZURpZ2l0ZGlmZjogbnVtYmVyID0gdGhpcy5kaWdpdHNCZWZvcmVEZWxpbWV0ZXIoZXZhbHVhdGVkLCAwLCB0aGlzLl9kZWNpbWFsKSAtIHRoaXMuX3ZhbERldC5nZXRQSUMoKS5nZXRXaG9sZXMoKTtcclxuICAgICAgLy8gaWYgdGhleSBkbywgY2hlY2sgaWYgdGhlIGV4Y2VlZGluZyBjaGFycyBhcmUgdGhlIHBhZCBjaGFycy4gaWYgc28sIHRoZXJlIGlzIG5vIGVycm9yLlxyXG4gICAgICBpZiAod2hvbGVEaWdpdGRpZmYgPiAwKSB7XHJcbiAgICAgICAgbGV0IHBhZENoYXJPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgLy8gaXMgdGhlcmUgYSBwYWQsIGNoZWNrIGl0LiBubyBwYWQgaXMgYSBjZXJ0YWluIGVycm9yLlxyXG4gICAgICAgIGlmICh0aGlzLl92YWxEZXQuZ2V0SXNQYWRGaWxsKCkpIHtcclxuICAgICAgICAgIHBhZENoYXJPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB3aG9sZURpZ2l0ZGlmZiAmJiBwYWRDaGFyT25seTsgaSsrKVxyXG4gICAgICAgICAgICAvLyBpZiB0aGUgY2hhciBpcyBub3QgdGhlIHBhZCwgdGhlbiB0aGlzIGlzIGFuIGVycm9yLlxyXG4gICAgICAgICAgICBpZiAoZXZhbHVhdGVkW2ldICE9PSB0aGlzLl92YWxEZXQuZ2V0UGFkRmlsbENoYXIoKSlcclxuICAgICAgICAgICAgICBwYWRDaGFyT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFwYWRDaGFyT25seSlcclxuICAgICAgICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbihNc2dJbnRlcmZhY2UuRURUX0VSUl9TVFJfMSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICBpZiAodGhpcy5fdmFsRGV0LmdldElzTmVnYXRpdmUoKSAmJiAodGhpcy5fbmV3dmFsdWUudHJpbSgpLnN0YXJ0c1dpdGgoXCItXCIpIHx8ICh0aGlzLl92YWxEZXQuZ2V0TmVnYXRpdmVTaWduUHJlZigpLmxlbmd0aCAhPT0gMCAmJiB0aGlzLl9uZXd2YWx1ZS50cmltKCkuc3RhcnRzV2l0aCh0aGlzLl92YWxEZXQuZ2V0TmVnYXRpdmVTaWduUHJlZigpKSkpKSB7XHJcbiAgICAgICAgZXZhbHVhdGVkID0gXCItXCIgKyBldmFsdWF0ZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGZyb20gdGhpcyBwb2ludCBoYXZlIGV2YWx1YXRlZCBzdHJpbmcgLSB0aGUgdmFsdWUgKHdpdGhvdXQgbWFzaykgb2YgdGhlIGNvbnRyb2xcclxuICAgICAgLy8gbmVlZGVkIHRvIGJlIGluc2VydGVkIHRvIHRoZSBwaWN0dXJlXHJcbiAgICAgIGV2YWx1YXRlZCA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGlzcDJtZyh0aGlzLl9uZXd2YWx1ZSwgdGhpcy5fdmFsRGV0LmdldFBJQygpLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpLCBCbG9iVHlwZS5DT05URU5UX1RZUEVfVU5LTk9XTik7XHJcbiAgICAgIGV2YWx1YXRlZCA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChldmFsdWF0ZWQsIFwiXCIsIHRoaXMuX3ZhbERldC5nZXRQSUMoKSwgdHJ1ZSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSwgdHJ1ZSk7XHJcblxyXG4gICAgICAvLyBpbiBvcmRlciBjaGVjayBpZiB1c2VyIGhhcyBlbnRlcmVkIGEgYmxhbmsgdmFsdWUgLCB0cmltIGFuZCB0aGVuIGNoZWNrIGl0J3MgbGVuZ3RoLlxyXG4gICAgICBsZXQgdGVtcERpc3BWYWw6IHN0cmluZyA9IFN0clV0aWwubHRyaW0oZXZhbHVhdGVkKTtcclxuICAgICAgaWYgKHRlbXBEaXNwVmFsLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl92YWxEZXQuZ2V0UElDKCkuemVyb0ZpbGwoKSAmJiB0aGlzLl92YWxEZXQuZ2V0UElDKCkuZ2V0WmVyb1BhZCgpID09PSAnICcpXHJcbiAgICAgICAgZXZhbHVhdGVkID0gXCIwXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuXHJcbiAgICAgIC8vIGZyb20gdGhpcyBwb2ludCBoYXZlIGV2YWx1YXRlZCBzdHJpbmcgLSB0aGUgdmFsdWUgKHdpdGhvdXQgbWFzaykgb2YgdGhlIGNvbnRyb2xcclxuICAgICAgLy8gbmVlZGVkIHRvIGJlIGluc2VydGVkIHRvIHRoZSBwaWN0dXJlXHJcbiAgICAgIGV2YWx1YXRlZCA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGlzcDJtZyh0aGlzLl9uZXd2YWx1ZSwgdGhpcy5fdmFsRGV0LmdldFBJQygpLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpLCBCbG9iVHlwZS5DT05URU5UX1RZUEVfVU5LTk9XTik7XHJcbiAgICAgIGV2YWx1YXRlZCA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChldmFsdWF0ZWQsIFwiXCIsIHRoaXMuX3ZhbERldC5nZXRQSUMoKSwgdHJ1ZSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSwgdHJ1ZSk7XHJcblxyXG4gICAgfVxyXG4gICAgLy8gSW5zZXJ0IHRoZSBudW1iZXIgdG8gcmFuZ2VcclxuICAgIGlmICh0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCkgIT0gbnVsbCB8fCB0aGlzLl92YWxEZXQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpICE9IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuX25ld3ZhbHVlID0gZXZhbHVhdGVkO1xyXG4gICAgICBldmFsdWF0ZWQgPSB0aGlzLmZpbGxOdW1lcmljQnlSYW5nZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV2YWx1YXRlZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5DaGVjayB2YWxpZGl0eSBvZiBudW1lcmljYWwgcGljdHVyZSBmcm9tIGZvdW5kICdkZWxpbWV0ZXInIHRvIGxlZnQuXHJcbiAgLy8vIDwtLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1ldGVyUGljdEluZGV4XCI+Zm91bmQgZGVsaW1ldGVyIGluIHRoZSBwaWN0dXJlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWxpbWV0ZXJSZWFsSW5kZXhcIj5mb3VuZCBkZWxpbWV0ZXIgaW4gdGhlIGluc2VydGVkIGJ5IHVzZXIgbmV3IHZhbHVlPC9wYXJhbT5cclxuICBwcml2YXRlIGNoZWNrTnVtZXJpY0xlZnQoZGVsaW1ldGVyUGljdEluZGV4OiBudW1iZXIsIGRlbGltZXRlclJlYWxJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgbGV0IFJlYWxJbmRleDogbnVtYmVyID0gZGVsaW1ldGVyUmVhbEluZGV4IC0gMTtcclxuICAgIGxldCBQaWN0SW5kZXg6IG51bWJlcjtcclxuICAgIGxldCBpc0ZvdW5kOiBib29sZWFuO1xyXG5cclxuICAgIGZvciAoUGljdEluZGV4ID0gZGVsaW1ldGVyUGljdEluZGV4IC0gMTsgUGljdEluZGV4ID49IDAgJiYgUmVhbEluZGV4ID49IDA7IFBpY3RJbmRleC0tKVxyXG4gICAge1xyXG4gICAgICBpZiAodGhpcy5fcGljdHVyZUVuYWJsZVtQaWN0SW5kZXhdID09PSAnMScpXHJcbiAgICAgIHtcclxuICAgICAgICBsZXQgdG1wc3RvcmFnZTogbnVtYmVyID0gUmVhbEluZGV4O1xyXG4gICAgICAgIGlzRm91bmQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yICg7IFJlYWxJbmRleCA+PSAwOyBSZWFsSW5kZXgtLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fcGljdHVyZVJlYWxbUGljdEluZGV4XSA9PT0gdGhpcy5fbmV3dmFsdWVbUmVhbEluZGV4XSlcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaXNGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIFJlYWxJbmRleC0tO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaXNGb3VuZClcclxuICAgICAgICAgIFJlYWxJbmRleCA9IHRtcHN0b3JhZ2U7XHJcblxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fcGljdHVyZVJlYWxbUGljdEluZGV4XSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gY2FuIGluc2VydCBvbmx5IG51bWJlclxyXG4gICAgICBlbHNlXHJcbiAgICAgIHtcclxuICAgICAgICBmb3IgKDsgUmVhbEluZGV4ID49IDA7IFJlYWxJbmRleC0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdCh0aGlzLl9uZXd2YWx1ZVtSZWFsSW5kZXhdKSlcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyLkFwcGVuZCh0aGlzLl9uZXd2YWx1ZVtSZWFsSW5kZXhdKTtcclxuICAgICAgICAgICAgUmVhbEluZGV4LS07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChSZWFsSW5kZXggPCAwICYmIFBpY3RJbmRleCA+PSAwKVxyXG4gICAgLy8gdHJ5IHRvIGFkZCB1bndyaXRhYmxlXHJcbiAgICAgIGZvciAoOyBQaWN0SW5kZXggPj0gMDsgUGljdEluZGV4LS0pXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAodGhpcy5fcGljdHVyZUVuYWJsZVtQaWN0SW5kZXhdID09PSAnMScpXHJcbiAgICAgICAgICBidWZmZXIuQXBwZW5kKHRoaXMuX3BpY3R1cmVSZWFsW1BpY3RJbmRleF0pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAvLyBvbmx5IGZyb20gbGVmdCBuZWVkIFBhZEZpbGxcclxuICAgICAgICAgIGlmICh0aGlzLl92YWxEZXQuZ2V0SXNQYWRGaWxsKCkpXHJcbiAgICAgICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fdmFsRGV0LmdldFBhZEZpbGxDaGFyKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIHJldHVybiBTdHJVdGlsLlJldmVyc2VTdHJpbmcoYnVmZmVyKS5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNoZWNrIHZhbGlkaXR5IG9mIG51bWVyaWNhbCBwaWN0dXJlIGZyb20gZm91bmQgJ2RlbGltZXRlcicgdG8gcmlnaHQuXHJcbiAgLy8vIC4tPlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1ldGVyUGljdEluZGV4XCI+Zm91bmQgZGVsaW1ldGVyIGluIHRoZSBwaWN0dXJlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWxpbWV0ZXJSZWFsSW5kZXhcIj5mb3VuZCBkZWxpbWV0ZXIgaW4gdGhlIGluc2VydGVkIGJ5IHVzZXIgbmV3IHZhbHVlPC9wYXJhbT5cclxuICBwcml2YXRlIGNoZWNrTnVtZXJpY1JpZ2h0KGRlbGltZXRlclBpY3RJbmRleDogbnVtYmVyLCBkZWxpbWV0ZXJSZWFsSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgYnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgIGxldCBSZWFsSW5kZXg6IG51bWJlciA9IGRlbGltZXRlclJlYWxJbmRleCArIDE7XHJcbiAgICBsZXQgUGljdEluZGV4OiBudW1iZXI7XHJcbiAgICBsZXQgcGljOiBQSUMgPSB0aGlzLl92YWxEZXQuZ2V0UElDKCk7XHJcblxyXG4gICAgZm9yIChQaWN0SW5kZXggPSBkZWxpbWV0ZXJQaWN0SW5kZXggKyAxOyBQaWN0SW5kZXggPCB0aGlzLl9waWN0dXJlRW5hYmxlLmxlbmd0aCAmJiBSZWFsSW5kZXggPCB0aGlzLl9uZXd2YWx1ZS5sZW5ndGg7IFBpY3RJbmRleCsrKVxyXG4gICAge1xyXG4gICAgICBpZiAodGhpcy5fcGljdHVyZUVuYWJsZVtQaWN0SW5kZXhdID09PSAnMScpXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAoUmVhbEluZGV4IDwgUGljdEluZGV4KVxyXG4gICAgICAgICAgUmVhbEluZGV4ID0gUGljdEluZGV4O1xyXG5cclxuICAgICAgICBidWZmZXIuQXBwZW5kKHRoaXMuX3BpY3R1cmVSZWFsW1BpY3RJbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNhbiBpbnNlcnQgb25seSBudW1iZXJcclxuICAgICAgZWxzZVxyXG4gICAgICB7XHJcbiAgICAgICAgZm9yICg7IFJlYWxJbmRleCA8IHRoaXMuX25ld3ZhbHVlLmxlbmd0aDsgUmVhbEluZGV4KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgLy8gQXBwZW5kIHRoZSBkaWdpdCBvZiBhY3R1YWwgaW5wdXQgZGF0YS4gSWYgaXQgaXMgbWFzayBjaGFyLCBza2lwIGl0LlxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX25ld3ZhbHVlW1JlYWxJbmRleF0pICYmICFwaWMucGljSXNNYXNrKFJlYWxJbmRleCkpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fbmV3dmFsdWVbUmVhbEluZGV4XSk7XHJcbiAgICAgICAgICAgIFJlYWxJbmRleCsrO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiByaWdodCBwYXJ0IGhhcyBhbnkgaW5wdXQgZGF0YSwgdGhlbiBvbmx5IGFwcGVuZCB1bndyaXRhYmxlIGNoYXJzXHJcbiAgICBpZiAoYnVmZmVyLkxlbmd0aCA+IDApXHJcbiAgICB7XHJcbiAgICAgIGlmIChSZWFsSW5kZXggPj0gdGhpcy5fbmV3dmFsdWUubGVuZ3RoICYmIFBpY3RJbmRleCA8IHRoaXMuX3BpY3R1cmVSZWFsLmxlbmd0aClcclxuICAgICAgLy8gdHJ5IHRvIGFkZCB1bndyaXRhYmxlXHJcbiAgICAgICAgZm9yICg7IFBpY3RJbmRleCA8IHRoaXMuX3BpY3R1cmVSZWFsLmxlbmd0aDsgUGljdEluZGV4KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3BpY3R1cmVFbmFibGVbUGljdEluZGV4XSA9PT0gJzEnKVxyXG4gICAgICAgICAgICBidWZmZXIuQXBwZW5kKHRoaXMuX3BpY3R1cmVSZWFsW1BpY3RJbmRleF0pO1xyXG4gICAgICAgICAgLy8gZWxzZSBEbyBub3RoaW5nXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkJVRzogNDQyNzg4XHJcbiAgLy8vIENoYW5naW5nIGRlY2ltYWwgc2VwYXJhdG9yIGluIHRoZXcgcGljdHVyZVJlYWwgdG8gdmFsdWUgZ290IGZyb20gRW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgY2hlY2tOdW1lcmljUGljdHVyZSgpOiB2b2lkIHtcclxuICAgIGxldCBpbmRleE9mRGVjOiBudW1iZXI7XHJcbiAgICBsZXQgbGFzdERlYzogbnVtYmVyO1xyXG4gICAgbGV0IG1heExlbmd0aDogbnVtYmVyO1xyXG4gICAgbGV0IGN1cnJJbmR4OiBudW1iZXI7XHJcbiAgICBsZXQgUE9JTlRfREVDOiBzdHJpbmcgPSBcIi5cIjsgLy8gdXNlZCBpbiBQSUNUVVJFIGZvciBkZWNpbWFsIHNlcGFyYXRvclxyXG5cclxuICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3ZhbERldC5nZXRQSUMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5fcGljdHVyZVJlYWwgPT0gbnVsbCB8fCB0aGlzLl9waWN0dXJlRW5hYmxlID09IG51bGwgfHwgcGljLmdldEF0dHIoKSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8ICFwaWMud2l0aERlY2ltYWwoKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGxhc3REZWMgPSB0aGlzLl9waWN0dXJlUmVhbC5sYXN0SW5kZXhPZihQT0lOVF9ERUMpO1xyXG4gICAgbWF4TGVuZ3RoID0gdGhpcy5fcGljdHVyZUVuYWJsZS5sZW5ndGg7XHJcbiAgICBjdXJySW5keCA9IDA7XHJcbiAgICB3aGlsZSAoY3VyckluZHggPCBsYXN0RGVjKVxyXG4gICAge1xyXG4gICAgICBpbmRleE9mRGVjID0gdGhpcy5fcGljdHVyZUVuYWJsZS5pbmRleE9mKFwiMVwiLCBjdXJySW5keCk7XHJcblxyXG4gICAgICBpZiAoaW5kZXhPZkRlYyA9PT0gLTEpXHJcbiAgICAgIC8vIG5vdCBmb3VuZFxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgZWxzZVxyXG4gICAgICB7XHJcbiAgICAgICAgaWYgKGluZGV4T2ZEZWMgPT09IHRoaXMuX3BpY3R1cmVSZWFsLmluZGV4T2YoIFBPSU5UX0RFQywgY3VyckluZHgpKVxyXG4gICAgICAgIC8vIGl0J3MgcmVhbCBkZWNpbWFsIHBvaW50IGFuZCBub3QgXFwuIGludG8gdGhlIHBpY3R1cmVcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZXQgZmlyc3Q6IHN0cmluZztcclxuICAgICAgICAgIGxldCBzZWNvbmQ6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBmaXJzdCA9IHNlY29uZCA9IFwiXCI7XHJcbiAgICAgICAgICBpZiAoaW5kZXhPZkRlYyA9PT0gMClcclxuICAgICAgICAgIC8vIHRoZSBwb2ludCBvbiB0aGUgZmlyc3QgcGxhY2UgLiMjI1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXhPZkRlYyArIDEgPCBtYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIC8vIG9ubHkgMSAuXHJcbiAgICAgICAgICAgICAgc2Vjb25kID0gdGhpcy5fcGljdHVyZVJlYWwuc3Vic3RyKGluZGV4T2ZEZWMgKyAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGluZGV4T2ZEZWMgPT09IG1heExlbmd0aClcclxuICAgICAgICAgIC8vIHRoZSBwb2ludCBvbiB0aGUgbGFzdCBwbGFjZSAjIyMuXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpcnN0ID0gdGhpcy5fcGljdHVyZVJlYWwuc3Vic3RyKDAgLCBpbmRleE9mRGVjKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmlyc3QgPSB0aGlzLl9waWN0dXJlUmVhbC5zdWJzdHIoMCAsIGluZGV4T2ZEZWMpO1xyXG4gICAgICAgICAgICBzZWNvbmQgPSB0aGlzLl9waWN0dXJlUmVhbC5zdWJzdHIoaW5kZXhPZkRlYyArIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fcGljdHVyZVJlYWwgPSBmaXJzdCArIHRoaXMuX2RlY2ltYWwgKyBzZWNvbmQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGN1cnJJbmR4ID0gKytpbmRleE9mRGVjO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDb21wYXJlIG5ld3ZhbHVlIHdpdGggdGhlIHJhbmdlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gbmV3dmFsdWUgaWYgaXQncyBpbiB0aGUgcmFuZ2UsIG9sZHZhbHVlIG90aGVyd2lzZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGZpbGxOdW1lcmljQnlSYW5nZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNvbnRyb2xQaWM6IFBJQyA9IHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0UElDKCk7XHJcbiAgICBsZXQgY29udGludW91c1JhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4gPSB0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCk7XHJcbiAgICBsZXQgZGlzY3JldGVSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+ID0gdGhpcy5fdmFsRGV0LmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKTtcclxuICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZhaWxlZChmYWxzZSk7XHJcblxyXG4gICAgbGV0IGNoZWNrZWRTdHI6IHN0cmluZyA9IHRoaXMuc2V0TnVtZXJpY1ZhbHVlV2l0aG91dFBpY3R1cmUodGhpcy5fbmV3dmFsdWUudG9TdHJpbmcoKSk7XHJcblxyXG5cclxuICAgIGlmIChjaGVja2VkU3RyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnByaW50TWVzc2FnZShNc2dJbnRlcmZhY2UuU1RSX1JOR19UWFQsIHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fb2xkdmFsdWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgICAgbGV0IGNoZWNrZWROdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKHRoaXMuX25ld3ZhbHVlLnRvU3RyaW5nKCksIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0UElDKCksIDApO1xyXG5cclxuICAgICAgaWYgKGRpc2NyZXRlUmFuZ2VWYWx1ZXMgIT09IG51bGwpIHtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZGlzY3JldGVSYW5nZVZhbHVlcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgICAgbGV0IHJhbmdlSXRlbVZhbHVlMTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoZGlzY3JldGVSYW5nZVZhbHVlcy5nZXRfSXRlbShpKSwgY29udHJvbFBpYywgMCk7XHJcblxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKE5VTV9UWVBFLm51bV9jbXAoY2hlY2tlZE51bSwgcmFuZ2VJdGVtVmFsdWUxKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLl9uZXd2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2F0Y2ggKGV4X0NDKSB7XHJcbiAgICAgICAgICAgIC8vIHNraXAgbm9uLW51bWVyaWMgcmFuZ2UgdmFsdWVzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29udGludW91c1JhbmdlVmFsdWVzICE9PSBudWxsKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGNvbnRpbnVvdXNSYW5nZVZhbHVlcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG5cclxuICAgICAgICAgIGxldCByYW5nZUl0ZW1WYWx1ZTE6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VJdGVtVmFsdWUyOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgICAgICAgIHJhbmdlSXRlbVZhbHVlMS5udW1fNF9hX3N0ZChjb250aW51b3VzUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSsrKSk7XHJcbiAgICAgICAgICByYW5nZUl0ZW1WYWx1ZTIubnVtXzRfYV9zdGQoY29udGludW91c1JhbmdlVmFsdWVzLmdldF9JdGVtKGkpKTtcclxuXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoTlVNX1RZUEUubnVtX2NtcChjaGVja2VkTnVtLCByYW5nZUl0ZW1WYWx1ZTEpICE9PSAtMSAmJiBOVU1fVFlQRS5udW1fY21wKHJhbmdlSXRlbVZhbHVlMiwgY2hlY2tlZE51bSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25ld3ZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXRjaCAoZXhfMTVCKSB7XHJcbiAgICAgICAgICAgIC8vIHNraXAgbm9uLW51bWVyaWMgcmFuZ2UgdmFsdWVzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXR1cm5zIGEgbnVtZXJpYyB2YWx1ZSBleHRyYWN0ZWQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nXHJcbiAgLy8vIG9uIGZhaWx1cmUgcmV0dXJucyBORUdBVElWRV9JTkZJTklUWVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsXCI+dGhlIHN0cmluZyB0byBwYXJzZTwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBnZXREb3VibGVWYWwodmFsOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cclxuICAgIGxldCBkb3RGb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IG1pbnVzRm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBkaWdpdEZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgZW5kT2ZOdW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIGZpbmQgdGhlIGRlbGVtZXRpbmcgbm9uIG51bWVyaWMgY2hhcmFjdGVyXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsLmxlbmd0aCAmJiAhZW5kT2ZOdW07IGkrKylcclxuICAgIHtcclxuICAgICAgbGV0IGM6IHN0cmluZyA9IHZhbFtpXTtcclxuICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKVxyXG4gICAgICAgIGRpZ2l0Rm91bmQgPSB0cnVlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgIHtcclxuICAgICAgICBzd2l0Y2ggKGMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2FzZSAnLSc6XHJcbiAgICAgICAgICAgIGlmIChkaWdpdEZvdW5kIHx8IGRvdEZvdW5kIHx8IG1pbnVzRm91bmQpXHJcbiAgICAgICAgICAgICAgZW5kT2ZOdW0gPSB0cnVlO1xyXG4gICAgICAgICAgICBtaW51c0ZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSAnLic6XHJcbiAgICAgICAgICAgIGlmIChkb3RGb3VuZCB8fCBtaW51c0ZvdW5kICYmICFkaWdpdEZvdW5kKVxyXG4gICAgICAgICAgICAgIGVuZE9mTnVtID0gdHJ1ZTtcclxuICAgICAgICAgICAgZG90Rm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlICcgJzpcclxuICAgICAgICAgICAgaWYgKGRpZ2l0Rm91bmQgfHwgZG90Rm91bmQgfHwgbWludXNGb3VuZClcclxuICAgICAgICAgICAgICBlbmRPZk51bSA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGVuZE9mTnVtID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVuZE9mTnVtKSB7XHJcbiAgICAgIGkgPSBpIC0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaSA+IDApIHtcclxuICAgICAgcmV0dXJuIE5OdW1iZXIuUGFyc2UodmFsLnN1YnN0cigwLCBpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC1JbmZpbml0eTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5zZXQgTnVtZXJpYyB2YWx1ZSBXaXRob3V0IFBpY3R1cmUsIGZpbHRlciBpbnB1dCBmcm9tIHVzZXI8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcHVyZSBudW1iZXIsIHdpdGhvdXQgcGljdHVyZSBtYXNrPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc2V0TnVtZXJpY1ZhbHVlV2l0aG91dFBpY3R1cmUodmFsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNoZWNrZWRTdHI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcih2YWwubGVuZ3RoKTtcclxuICAgIGxldCBpc0ZpcnN0RGVjaW1hbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGN1cnJDaGFyOiBzdHJpbmc7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3BpY3R1cmVSZWFsLmxlbmd0aCAmJiBpIDwgdmFsLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICBjdXJyQ2hhciA9IHZhbFtpXTtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGN1cnJDaGFyKSlcclxuICAgICAgICBjaGVja2VkU3RyLkFwcGVuZChjdXJyQ2hhcik7XHJcbiAgICAgIGVsc2UgaWYgKGN1cnJDaGFyID09PSB0aGlzLl9lbnZpcm9ubWVudC5HZXREZWNpbWFsKCkgJiYgIWlzRmlyc3REZWNpbWFsKVxyXG4gICAgICB7XHJcbiAgICAgICAgY2hlY2tlZFN0ci5BcHBlbmQoTlN0cmluZy5Ub0NoYXJBcnJheShOdW1iZXJGb3JtYXRJbmZvLk51bWJlckRlY2ltYWxTZXBhcmF0b3IpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGlzRmlyc3REZWNpbWFsID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChjdXJyQ2hhciA9PT0gJy0nICYmIHRoaXMuX3ZhbERldC5nZXRJc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgY2hlY2tlZFN0ci5BcHBlbmQoTlN0cmluZy5Ub0NoYXJBcnJheShOdW1iZXJGb3JtYXRJbmZvLk5lZ2F0aXZlU2lnbikudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hlY2tlZFN0ci5Ub1N0cmluZygpLmxlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgdGhpcy5wcmludE1lc3NhZ2UoTXNnSW50ZXJmYWNlLlNUUl9FUlJfTlVNLCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZhaWxlZCh0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjaGVja2VkU3RyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGNoZWNrIGlmIG5ld3ZhbHVlIGZvcm1hdCBtYXRjaGVzIHRoZSBudW1lcmljIHBpYyBmb3JtYXQuPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBjaGVja051bWVyaWNJbkRlY0Zvcm1hdCgpOiBib29sZWFuIHtcclxuXHJcblxyXG4gICAgbGV0IHBpYzogUElDID0gdGhpcy5fdmFsRGV0LmdldFBJQygpO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBEZWM6IG51bWJlcjtcclxuICAgIGxldCBXaG9sZTogbnVtYmVyO1xyXG4gICAgbGV0IERlY1BvczogbnVtYmVyO1xyXG4gICAgbGV0IGRlY2ltYWxDaGFyOiBzdHJpbmcgPSB0aGlzLl9lbnZpcm9ubWVudC5HZXREZWNpbWFsKCk7XHJcblxyXG4gICAgLy8gQ291bnQgbnVtYmVyIG9mIGRpZ2l0cyBhbmQgcG9zaXRpb24gb2YgZGVjaW1hbCBwb2ludFxyXG5cclxuICAgIERlYyA9IDA7XHJcbiAgICBXaG9sZSA9IDA7XHJcbiAgICBEZWNQb3MgPSAtMTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbmV3dmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICAgIGlmIChwaWMuaXNOdW1lcmljKGkpKVxyXG4gICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdCh0aGlzLl9uZXd2YWx1ZVtpXSkpXHJcbiAgICAgICAgLy8gd2hlbiBkZWMgcG9zIG5vdCBmb3VuZCwgY291bnQgd2hvbGVzLCBpZiBmb3VuZCwgY291bnQgZGVjLlxyXG4gICAgICAgICAgaWYgKERlY1BvcyA+PSAwKVxyXG4gICAgICAgICAgICBEZWMrKztcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgV2hvbGUrKztcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9uZXd2YWx1ZVtpXSA9PT0gZGVjaW1hbENoYXIpXHJcbiAgICAgICAgICBEZWNQb3MgPSBpO1xyXG5cclxuICAgIC8vIGRpZCB3ZSBleGNlZWQgdGhlIG1hc2sgP1xyXG4gICAgaWYgKHBpYy5nZXRXaG9sZXMoKSA8IFdob2xlIHx8IHBpYy5nZXREZWMoKSA8IERlYylcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5jaGVjayAmIHZhbGlkYXRlIERhdGUgZmllbGQgYnkgaGlzIG9sZC9uZXcgdmFsdWUgYW5kIDIgcGljdHVyZXM6XHJcbiAgLy8vIFJlYWwgYW5kIEVuYWJsZVxyXG4gIC8vLyAxLmNoZWNrIGlmIG5ld3ZhbHVlIGNvbXBsZXRlIHdpdGggcGljdHVyZXMsIG90aGVyd2lzZSByZXR1cm4gb2xkdmFsdWVcclxuICAvLy8gMi5jaGVjayBpZiBuZXd2YWx1ZSBjb21wbGV0ZSB3aXRoIHJhbmdlXHJcbiAgLy8vIDIuMSBjb21wbGV0ZSB2YWx1ZSwgaWYgcG9zc2libGUsIG90aGVyd2lzZSAgcmV0dXJuIG9sZHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IG5ldyB2YWx1ZSBvZiB2YWxpZGF0ZWQgZmllbGQ8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBjaGVja0RhdGVGaWVsZCgpOiBEYXRlIHtcclxuXHJcbiAgICBsZXQgbmV3RGF0ZTogRGF0ZSA9ICh0aGlzLl9uZXd2YWx1ZSA9PSBudWxsID8gbnVsbCA6IG5ldyBEYXRlKHRoaXMuX25ld3ZhbHVlKSk7XHJcbiAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRmFpbGVkKGZhbHNlKTtcclxuXHJcbiAgICBpZiAodGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5pc0RhdGVaZXJvKHRoaXMuX25ld3ZhbHVlKSkge1xyXG4gICAgICAvLyBnZXQgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgZmllbGRcclxuICAgICAgbGV0IGRlZmF1bHRNZ1ZhbHVlOiBzdHJpbmcgPSB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZpZWxkKCkuZ2V0RGVmYXVsdFZhbHVlKCk7XHJcblxyXG4gICAgICBuZXdEYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tZzJkaXNwKGRlZmF1bHRNZ1ZhbHVlLCBcIlwiLCB0aGlzLl92YWxEZXQuZ2V0UElDKCksIHRydWUsIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCksIGZhbHNlKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgLy8gcmFuZ2UgZGF0ZVxyXG4gICAgICBpZiAodGhpcy5fdmFsRGV0LmdldENvbnRpbnVvdXNSYW5nZVZhbHVlcygpICE9IG51bGwgfHwgdGhpcy5fdmFsRGV0LmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKSAhPSBudWxsKVxyXG4gICAgICAgIG5ld0RhdGUgPSB0aGlzLmZpbGxEYXRlQnlSYW5nZSh0aGlzLl92YWxEZXQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCksIHRoaXMuX3ZhbERldC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCksIHRoaXMuX25ld3ZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdEYXRlO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5BZGQgZm91bmQgaW4gbmV3dmFsdWUgbnVtYmVycygyIG9yIDMgbGV0dGVycykgdG8gYnVmZmVyIGFuZCByZXR1cm5cclxuICAvLy8gbGFzdCBmb3VuZCBudW1iZXIgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN1cnJWYWx1ZVwiPmluIG5ld3ZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJidWZmZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInR5cGVcIj4tIHdoaWNoIHR5cGUgb2YgcG9zaXRpb25hbCBkaXJlY3RpdmUsIGZvciBjaGVja2luZyB2YWxpZGl0eTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBjdXJyVmFsdWUgaW4gbmV3dmFsdWU8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhZGQyRGF0ZShjdXJyVmFsdWU6IG51bWJlciwgYnVmZmVyOiBTdHJpbmdCdWlsZGVyLCB0eXBlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0YXJ0OiBudW1iZXIgPSBjdXJyVmFsdWU7XHJcbiAgICBsZXQgY3VyckFkZDogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHRoaXMuX25ld3ZhbHVlLmxlbmd0aCk7XHJcbiAgICBsZXQgbGV0dGVyczogbnVtYmVyID0gMDtcclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpXHJcbiAgICB7XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ERDpcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0REREQ6XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19NTUQ6XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZWTpcclxuICAgICAgICBsZXR0ZXJzID0gMjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19EREQ6XHJcbiAgICAgICAgbGV0dGVycyA9IDM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVlZWTpcclxuICAgICAgICBsZXR0ZXJzID0gNDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19XOlxyXG4gICAgICAgIGxldHRlcnMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lKOiAgLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgICAgIGxldHRlcnMgPSAyO1xyXG4gICAgICAgIHR5cGUgPSBQSUNJbnRlcmZhY2UuUElDX1lZOyAvLyBQSUNfWUogd2lsbCBiZSBoYW5kbGVkIGFzIFBJQ19ZWSBpbiB0aGlzIG1ldGhvZC5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAoc3RhcnQgPCB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggJiYgIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX25ld3ZhbHVlLmNoYXJBdChzdGFydCkpKVxyXG4gICAgICBzdGFydCsrOyAvLyBmaW5kIGZpcnN0IGRpZ2l0XHJcblxyXG5cclxuICAgIGlmIChzdGFydCA9PT0gdGhpcy5fbmV3dmFsdWUubGVuZ3RoICYmICh0aGlzLl9uZXd2YWx1ZS5sZW5ndGggPT09IDAgfHwgdGhpcy5fbmV3dmFsdWUgPT09IFwiMFwiKSkge1xyXG4gICAgICBmb3IgKGxldCBudWw6IG51bWJlciA9IDA7IG51bCA8IGxldHRlcnM7IG51bCA9IG51bCArIDEpIHtcclxuICAgICAgICBidWZmZXIuQXBwZW5kKCcwJykvKicwJyovO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdXJyVmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzdGFydCA9PT0gdGhpcy5fbmV3dmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX25ld3ZhbHVlID0gdGhpcy5fbmV3dmFsdWUgKyBcIjBcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIGxldHRlcnMgJiYgaSA8IHRoaXMuX25ld3ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdCh0aGlzLl9uZXd2YWx1ZS5jaGFyQXQoaSkpKVxyXG4gICAgICAgIGN1cnJBZGQuQXBwZW5kKHRoaXMuX25ld3ZhbHVlLmNoYXJBdChpKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VyckFkZC5MZW5ndGggPT09IDApIHtcclxuICAgICAgY3VyckFkZC5BcHBlbmQoJzAnKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYWRkOiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKGN1cnJBZGQuVG9TdHJpbmcoKSk7XHJcblxyXG4gICAgLy8gYm91bmRhcnkgY29uZGl0aW9ucyBjYXNlczpcclxuICAgIGlmICgoYWRkIDwgMSAmJiB0eXBlICE9PSBQSUNJbnRlcmZhY2UuUElDX1lZWVkgJiYgdHlwZSAhPT0gUElDSW50ZXJmYWNlLlBJQ19ZWSkgfHxcclxuICAgICAgIChhZGQgPiAzMSAmJiAodHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ERCB8fCB0eXBlID09PSAgUElDSW50ZXJmYWNlLlBJQ19EREREKSkgfHxcclxuICAgICAgKGFkZCA+IDEyICYmIHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1EKSB8fCAoYWRkID4gNyAmJiB0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX1cpKSB7XHJcbiAgICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbihNc2dJbnRlcmZhY2UuU1RSX0VSUl9EQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGFuIHBpY3R1cmUgaXMgWVlZWSBhbmQgaW5zZXJ0ZWQgMC0yIG51bWJlcnMsIHVzZSBDRU5UVVJFIHZhbHVlLCBvdGhlcndpc2UgYWRkIHplcm9zIGJlZm9yZSB0aGUgeWVhclxyXG4gICAgaWYgKHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfWVlZWSAmJiB0aGlzLl9lbnZpcm9ubWVudC5HZXRDZW50dXJ5KHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpID4gOTk5ICYmIGN1cnJBZGQuTGVuZ3RoIDwgMylcclxuICAgICAgY3VyckFkZCA9IHRoaXMuY2hlY2tDZW50dXJ5KGFkZCk7XHJcblxyXG4gICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IGxldHRlcnMgLSBjdXJyQWRkLkxlbmd0aDsgaiA9IGogKyAxKSB7XHJcbiAgICAgIGJ1ZmZlci5BcHBlbmQoJzAnKS8qJzAnKi87XHJcbiAgICB9XHJcbiAgICBidWZmZXIuQXBwZW5kKGN1cnJBZGQuVG9TdHJpbmcoKSk7XHJcbiAgICByZXR1cm4gIGk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+QWRkIGZvdW5kIGluIG5ld3ZhbHVlIGxldHRlcnMgdG8gYnVmZmVyIGFuZCByZXR1cm5cclxuICAvLy8gbGFzdCBmb3VuZCBudW1iZXIgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN1cnJWYWx1ZVwiPmluIG5ld3ZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZXR0ZXJzXCI+YW1vdW50IG9mIGxldHRlcnMgdG8gaW5zZXJ0IHRvIGJ1ZmZlcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYnVmZmVyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGN1cnJWYWx1ZSBpbiBuZXd2YWx1ZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGFkZE0yRGF0ZShjdXJyVmFsdWU6IG51bWJlciwgbGV0dGVyczogbnVtYmVyLCBidWZmZXI6IFN0cmluZ0J1aWxkZXIsIHR5cGU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgYXJyYXk6IHN0cmluZ1tdO1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX01NTSB8fCB0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX01NRCkge1xyXG4gICAgICBpZiAodGhpcy5oZWJyZXcpIHtcclxuICAgICAgICBhcnJheSA9IEhlYnJld0RhdGUuR2V0TG9jYWxNb250aHMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgbWVzc2FnZVN0cmluZzogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLk1PTlRIU19QVFIpO1xyXG4gICAgICAgIGFycmF5ID0gRGF0ZVV0aWwuZ2V0TG9jYWxNb250aHMobWVzc2FnZVN0cmluZyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19XV1cgfHwgdHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19XKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVicmV3KSB7XHJcbiAgICAgICAgICBhcnJheSA9IEhlYnJld0RhdGUuR2V0TG9jYWxEb3dzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGRheVN0cjogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLkRBWVNfUFRSKTtcclxuICAgICAgICAgIGFycmF5ID0gRGF0ZVV0aWwuZ2V0TG9jYWxEYXlzKGRheVN0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX0JCKSB7IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAgICAgIGFycmF5ID0gVXRpbERhdGVKcG4uZ2V0QXJyYXlEb3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTEgfHwgdHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTIgfHwgdHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTQpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9uZXd2YWx1ZS5sZW5ndGggPCBjdXJyVmFsdWUgKyBsZXR0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKE1zZ0ludGVyZmFjZS5TVFJfRVJSX0RBVEUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCB0ZXh0OiBzdHJpbmcgPSB0aGlzLl9uZXd2YWx1ZS5zdWJzdHIoY3VyclZhbHVlLCBsZXR0ZXJzKTtcclxuICAgICAgICAgICAgYnVmZmVyLkFwcGVuZCh0ZXh0KTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJWYWx1ZSArIHRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VyclZhbHVlICsgbGV0dGVycztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fbmV3dmFsdWUubGVuZ3RoIDwgY3VyclZhbHVlKSB7XHJcbiAgICAgIGN1cnJWYWx1ZSA9IHRoaXMuX25ld3ZhbHVlLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGxldCBtYXg6IG51bWJlciA9IHRoaXMuZ2V0TW9udGhPcldlZWsodGhpcy5fbmV3dmFsdWUuc3Vic3RyKGN1cnJWYWx1ZSksIGxldHRlcnMsIHR5cGUpO1xyXG5cclxuICAgIGlmIChhcnJheVttYXhdLnRyaW0oKS5sZW5ndGggPj0gbGV0dGVycykge1xyXG4gICAgICBidWZmZXIuQXBwZW5kKGFycmF5W21heF0udHJpbSgpLnN1YnN0cigwLCBsZXR0ZXJzKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYnVmZmVyLkFwcGVuZChhcnJheVttYXhdLnRyaW0oKSk7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IGxldHRlcnMgLSBhcnJheVttYXhdLnRyaW0oKS5sZW5ndGg7IGkgPiAwOyBpID0gaSAtIDEpIHtcclxuICAgICAgICBidWZmZXIuQXBwZW5kKCcgJykvKicgJyovO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VyclZhbHVlICsgbGV0dGVycztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQgZW5kIGluZGV4IG9mIGV2ZXJ5IG51bWVyaWMgYmxvY2sgaW4gdGhlIG1hc2sgZnJvbSBtYXNrW2N1cnJWYWx1ZV08L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBlbmQgb2YgbnVtZXJpYyBibG9jayBpbiBuZXdWYWx1ZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldEVuZE9mTnVtZXJpY0Jsb2NrKGN1cnJWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHdoaWxlIChjdXJyVmFsdWUgPCB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggJiYgIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX25ld3ZhbHVlLmNoYXJBdChjdXJyVmFsdWUpKSkge1xyXG4gICAgICBjdXJyVmFsdWUgPSBjdXJyVmFsdWUgKyAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnJWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5hZGRlZCBzdWZmaXggdG8gcmVsZXZhbnQgbnVtYmVyIG9mIHRoZSBkYXk8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhZGREYXRlU3VmZml4KGxhc3Q6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGhlbnVtYmVyOiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKGxhc3QpO1xyXG4gICAgaWYgKHRoZW51bWJlciA9PT0gMSB8fCB0aGVudW1iZXIgPT09IDIxIHx8IHRoZW51bWJlciA9PT0gMzEpXHJcbiAgICAgIHJldHVybiBcInN0XCI7XHJcbiAgICBlbHNlIGlmICh0aGVudW1iZXIgPT09IDIgfHwgdGhlbnVtYmVyID09PSAyMilcclxuICAgICAgcmV0dXJuIFwibmRcIjtcclxuICAgIGVsc2UgaWYgKHRoZW51bWJlciA9PT0gMyB8fCB0aGVudW1iZXIgPT09IDIzKVxyXG4gICAgICByZXR1cm4gXCJyZFwiO1xyXG4gICAgcmV0dXJuIFwidGhcIjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQgc2l6ZSBvZiBibG9jayBsZXR0ZXJzIG9mIHR5cGUgJ3R5cGUnLCB3aGljaCBzdGFydCBhdCAnc3RhcnQnPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZ2V0U2l6ZU9mQmxvY2soc3RhcnQ6IG51bWJlciwgdHlwZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBsZXR0ZXJzOiBudW1iZXIgPSBzdGFydCArIDE7XHJcbiAgICB3aGlsZSAobGV0dGVycyA8IHRoaXMuX3BpY3R1cmUubGVuZ3RoICYmIHRoaXMuX3BpY3R1cmUuY2hhckNvZGVBdChsZXR0ZXJzKSA9PT0gdHlwZSlcclxuICAgIGxldHRlcnMrKztcclxuICAgIHJldHVybiBsZXR0ZXJzIC0gc3RhcnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IFN0cmluZyBwYXJ0L2Z1bGwgbmFtZSBvZiBtb250aC9kYXkgb2Ygd2Vlazwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtb250aFwiPnBhcnQvZnVsbCBuYW1lIG9mIG1vbnRoL2RheSBvZiB3ZWVrPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtYXhcIj5vZiBwb3NzaWJsZSBsZXR0ZXJzIGluIG1vbnRoL2RheSBvZiB3ZWVrLCBzaXplIG9mIGJsb2NrIGluIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInR5cGU6XCI+UElDXyAgd2Vla3xtb250aDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBudW1iZXIgb2YgbW9udGggMS0xMiwgb3IgZGF5IG9mIHdlZWsgMS03PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0TW9udGhPcldlZWsobW9udGhfc3RyOiBzdHJpbmcsIGxldHRlcnM6IG51bWJlciwgdHlwZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBhcnJheTogc3RyaW5nW107XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1NIHx8IHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1EKSB7XHJcbiAgICAgIC8vIE1vbnRoXHJcbiAgICAgICAgaWYgKHRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgYXJyYXkgPSBIZWJyZXdEYXRlLkdldExvY2FsTW9udGhzKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxldCBtb250aFN0cjogU3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLk1PTlRIU19QVFIpO1xyXG4gICAgICAgICAgYXJyYXkgPSBEYXRlVXRpbC5nZXRMb2NhbE1vbnRocyhtb250aFN0ci50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfV1dXIHx8IHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfVylcclxuICAgICAgLy8gV2Vla1xyXG4gICAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgYXJyYXkgPSBIZWJyZXdEYXRlLkdldExvY2FsRG93cygpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZXQgZGF5U3RyOiBTdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuREFZU19QVFIpO1xyXG4gICAgICAgICAgYXJyYXkgPSBEYXRlVXRpbC5nZXRMb2NhbERheXMoZGF5U3RyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX0JCKVxyXG4gICAgICAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgIHtcclxuICAgICAgICBhcnJheSA9IFV0aWxEYXRlSnBuLmdldEFycmF5RG93KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICB7XHJcbiAgICAgICAgcmV0dXJuIDE7IC8vIG9ubHkgd2VlayBvciBtb250aCBwb3NzaWJsZSAtPiBkaWZmYXVsdCAxLlxyXG4gICAgICB9XHJcblxyXG4gICAgaWYgKGxldHRlcnMgPiBtb250aF9zdHIubGVuZ3RoKVxyXG4gICAgLy8gY3V0IGxldHRlciBpZiBpdCdzICBlbmQgb2Ygc3RyaW5nXHJcbiAgICAgIGxldHRlcnMgPSBtb250aF9zdHIubGVuZ3RoO1xyXG5cclxuICAgIGlmICh0aGlzLmhlYnJldylcclxuICAgIHtcclxuICAgICAgbGV0IGhzdHI6IHN0cmluZyA9IE5TdHJpbmcuVHJpbVN0YXJ0KG1vbnRoX3N0cikuc3Vic3RyKDAsIGxldHRlcnMpLnRyaW0oKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDE7IGkgPCBhcnJheS5sZW5ndGg7IGkrKylcclxuICAgICAgLy8gc3RhcnQgY2hlY2tpbmcgZnJvbSAxc3QgbWVtYmVyLCBiZWNhdXNlIDAgPSBcIlwiXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAoYXJyYXlbaV0udHJpbSgpID09PSBoc3RyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmIChpID09PSAxNClcclxuICAgICAgICAgICAgaSA9IDY7XHJcbiAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyB0aGUgbnVtYmVyIGluc2VydGVkIGFuZCBub3Qgc3RyaW5nIC0+IGZpbmQgbW91bnRoL2RheSBvZiB3ZWVrIGJ5IG51bWJlciAxLTEyfDEtN1xyXG5cclxuICAgICAgICBsZXQgc3RyOiBzdHJpbmcgPSBtb250aF9zdHIuc3Vic3RyKDAsIGxldHRlcnMpLnRyaW0oKTtcclxuICAgICAgICBsZXQgbnVtQnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RyLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0cltpXSkpXHJcbiAgICAgICAgICAgIG51bUJ1ZmZlci5BcHBlbmQoc3RyW2ldKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGhlTnVtYmVyOiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKG51bUJ1ZmZlci5Ub1N0cmluZygpKTtcclxuICAgICAgICBpZiAodGhlTnVtYmVyIDwgMSlcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX01NTSB8fCB0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX01NRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAodGhlTnVtYmVyID4gMTIpXHJcbiAgICAgICAgICAgIHJldHVybiAxMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19XV1cgfHwgdHlwZSA9PT0gUElDSW50ZXJmYWNlLlBJQ19XIHx8IHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfQkIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgICAgICAgaWYgKHRoZU51bWJlciA+IDcpXHJcbiAgICAgICAgICAgIHJldHVybiA3O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhlTnVtYmVyO1xyXG4gICAgICAgIH1cclxuICAgIGNhdGNoIChleF8yMUEpIHtcclxuICAgICAgICAgIC8vIGRvTm90aGluZ19TdHJpbmdJbnNlcnRlZFxyXG4gICAgICB9XHJcblxyXG4gICAgLy8gaW5zZXJ0ZWQgc3RyaW5nIC0gbmFtZSBvZiBtb250aHxkYXkgb2Ygd2VlayAtPnRyeSBpZGVudHlmeSBpdFxyXG4gICAgbGV0IGZvdW5kOiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KGFycmF5Lmxlbmd0aCk7XHJcbiAgICBsZXQgZnJvbTogbnVtYmVyO1xyXG4gICAgbGV0IG1heDogbnVtYmVyID0gLTE7IC8vIG51bWJlciBvZiBmb3VuZCBtb250aC9kYXkgb2Ygd2Vla1xyXG5cclxuXHJcbiAgICBmb3IgKGxldCB0bXA6IG51bWJlciA9IDE7IHRtcCA8IGFycmF5Lmxlbmd0aDsgdG1wKyspXHJcbiAgICAvLyBzdGFydCBjaGVja2luZyBmcm9tIDFzdCBtZW1iZXIsIGJlY2F1c2UgMCA9IFwiXCJcclxuICAgIHtcclxuICAgICAgZm91bmRbdG1wXSA9IDA7XHJcbiAgICAgIGZyb20gPSAwO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgYXJyYXlbdG1wXS5sZW5ndGggJiYgZnJvbSA8IG1vbnRoX3N0ci5sZW5ndGggJiYgaSA8IGxldHRlcnM7IGkrKywgZnJvbSsrKVxyXG4gICAgICB7XHJcbiAgICAgICAgaWYgKGFycmF5W3RtcF0udG9Mb3dlckNhc2UoKVtpXSA9PT0gbW9udGhfc3RyLnRvTG93ZXJDYXNlKClbZnJvbV0pXHJcbiAgICAgICAgICBmb3VuZFt0bXBdKys7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmcm9tID09PSBsZXR0ZXJzIHx8IGZyb20gPT09IGFycmF5W3RtcF0ubGVuZ3RoKVxyXG4gICAgICAvLyBhbGwgbGV0dGVycyBmb3VuZFxyXG4gICAgICB7XHJcbiAgICAgICAgbWF4ID0gdG1wO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1heCA9PT0gLTEpXHJcbiAgICAgIG1heCA9IHRoaXMuZmluZE1heChmb3VuZCk7XHJcbiAgICByZXR1cm4gbWF4O1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5pcyBudW1lcmljIGRhdGEgYWxsb3dlZCBpbiBkYXRlXHJcbiAgLy8vIHJldHVybiB0cnVlIGlmIGl0IGlzIGFsbG93ZWQsIG90aGVyd2lzZSBmYWxzZTwvc3VtbWFyeT5cclxuICBwcml2YXRlIGlzTnVtYmVyQWxsb3dlZEluRGF0ZSgpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9waWN0dXJlLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICBpZiAodGhpcy5pc0RhdGVQb3NpdGlvbmFsTnVtZXJpY0RpcmVjdGl2ZSh0aGlzLl9waWN0dXJlW2ldKSlcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5maW5kIGlmIGFsbCBudW1iZXJzIG9mIHRoZSBuZXcgdXNlciBpbnNlcnRlZCB2YWx1ZSBhcmUgMFxyXG4gIC8vLyByZXR1cm4gdHJ1ZSBpZiBhbGwgbnVtYmVycyBpbiB0aGUgaW5wdXQgYXJlIDAsIG90aGVyd2lzZSB0cnVlPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaXNBbGxOdW1iZXJzMCgpOiBib29sZWFuIHtcclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fbmV3dmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9uZXd2YWx1ZVtpXTtcclxuXHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjdXJyQ2hyKSAmJiBjdXJyQ2hyICE9PSAnMCcpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmNoZWNrIHZhbGlkaXR5IG9mIFllYXIgZm9yIFlZWVkgcGFydCBvZiB0aGUgbWFzazwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ5ZWFySW5cIj5pbnNlcnRlZCBieSB1c2VyPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGNhbGN1bGF0ZWQgYnkgZW52aXJvbm1lbnQuY2VudHVyeSByaWdodCB2YWx1ZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGNoZWNrQ2VudHVyeSh5ZWFySW46IG51bWJlcik6IFN0cmluZ0J1aWxkZXIge1xyXG4gICAgbGV0IG91dFZhbDogbnVtYmVyO1xyXG4gICAgbGV0IHN0YXJ0X2NlbnR1cnk6IG51bWJlciA9IHRoaXMuX2Vudmlyb25tZW50LkdldENlbnR1cnkodGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSk7XHJcbiAgICBsZXQgY2VudHVyeTogbnVtYmVyID0gTWF0aC5mbG9vcihzdGFydF9jZW50dXJ5IC8gMTAwKTtcclxuICAgIGxldCB5ZWFyczogbnVtYmVyID0gc3RhcnRfY2VudHVyeSAlIDEwMDtcclxuICAgIGlmICh5ZWFySW4gPj0geWVhcnMgJiYgeWVhckluICE9PSAwKVxyXG4gICAgICBvdXRWYWwgPSAoY2VudHVyeSAqIDEwMCArIHllYXJJbik7XHJcbiAgICBlbHNlXHJcbiAgICAgIG91dFZhbCA9ICgoKytjZW50dXJ5KSAqIDEwMCArIHllYXJJbik7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKG91dFZhbC50b1N0cmluZygpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5jaGVjayBpZiB0aGUgZGF0ZSBsZWdhbCBmb3IgcGljdHVyZSByYW5nZSwgdXNlZCBmb3IgdmFsaWRhdGlvbiBkYXRlIDA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiQ29udGludW91c1JhbmdlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJEaXNjcmV0ZVJhbmdlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRlXCI+aW50ZWdlciAtIG1hZ2ljIGRhdGUgbnVtYmVyIG9mIGRheXMgZnJvbSAwMS4wMS4wMDAwPC9wYXJhbT5cclxuICBwcml2YXRlIGlzRGF0ZUxlZ2FsNFJhbmdlKENvbnRpbnVvdXNSYW5nZTogTGlzdDxzdHJpbmc+LCBEaXNjcmV0ZVJhbmdlOiBMaXN0PHN0cmluZz4sIGN1cnJEYXRlOiBudW1iZXIpOiBib29sZWFuIHtcclxuXHJcbiAgICBsZXQgcGljOiBQSUMgPSB0aGlzLl92YWxEZXQuZ2V0UElDKCk7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGRvd25EYXRlOiBudW1iZXI7XHJcbiAgICBsZXQgdG9wRGF0ZTogbnVtYmVyO1xyXG5cclxuICAgIGlmIChDb250aW51b3VzUmFuZ2UgIT0gbnVsbClcclxuICAgIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IENvbnRpbnVvdXNSYW5nZS5sZW5ndGggLSAxOyBpKyspXHJcbiAgICAgIHtcclxuICAgICAgICBkb3duRGF0ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuYV8yX2RhdGVfcGljKENvbnRpbnVvdXNSYW5nZS5nZXRfSXRlbShpKSwgcGljLCBwaWMuZ2V0TWFzaygpLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICB0b3BEYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5hXzJfZGF0ZV9waWMoQ29udGludW91c1JhbmdlLmdldF9JdGVtKCsraSksIHBpYywgcGljLmdldE1hc2soKSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSk7XHJcbiAgICAgICAgaWYgKGN1cnJEYXRlID49IGRvd25EYXRlICYmIGN1cnJEYXRlIDw9IHRvcERhdGUpXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChEaXNjcmV0ZVJhbmdlICE9IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBEaXNjcmV0ZVJhbmdlLmxlbmd0aDsgaSsrKVxyXG4gICAgICB7XHJcbiAgICAgICAgaWYgKGN1cnJEYXRlID09PSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmFfMl9kYXRlX3BpYyhEaXNjcmV0ZVJhbmdlLmdldF9JdGVtKGkpLCBwaWMsIHBpYy5nZXRNYXNrKCksIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpKVxyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRoZSBkYXRlIGlzIG5vdCBpbiB0aGUgcmFuZ2VcclxuICAgIC8vIHJldHVybiBmYWxzZTtcclxuICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmNoZWNrIGFuZCBmaWxsIERBVEUgdHlwZSBieSByYW5nZTwvc3VtbWFyeT5cclxuICBwcml2YXRlIGZpbGxEYXRlQnlSYW5nZShDb250aW51b3VzUmFuZ2U6IExpc3Q8c3RyaW5nPiwgRGlzY3JldGVSYW5nZTogTGlzdDxzdHJpbmc+LCBidWZmZXI6IERhdGUpOiBEYXRlIHtcclxuICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3ZhbERldC5nZXRQSUMoKTtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgZG93bkRhdGU6IG51bWJlcjtcclxuICAgIGxldCB0b3BEYXRlOiBudW1iZXI7XHJcblxyXG4gICAgbGV0IGN1cnJEYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5mcm9tTmF0aXZlRGF0ZVRvTWdEYXRlTnVtYmVyKGJ1ZmZlciwgcGljKTtcclxuXHJcbiAgICB0aGlzLnNldFZhbGlkYXRpb25GYWlsZWQoZmFsc2UpO1xyXG4gICAgaWYgKENvbnRpbnVvdXNSYW5nZSAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBDb250aW51b3VzUmFuZ2UubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgZG93bkRhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmFfMl9kYXRlX3BpYyhDb250aW51b3VzUmFuZ2UuZ2V0X0l0ZW0oaSksIHBpYywgcGljLmdldE1hc2soKSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSk7XHJcbiAgICAgICAgdG9wRGF0ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuYV8yX2RhdGVfcGljKENvbnRpbnVvdXNSYW5nZS5nZXRfSXRlbSgrK2kpLCBwaWMsIHBpYy5nZXRNYXNrKCksIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG4gICAgICAgIGlmIChjdXJyRGF0ZSA+PSBkb3duRGF0ZSAmJiBjdXJyRGF0ZSA8PSB0b3BEYXRlKVxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGJ1ZmZlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoRGlzY3JldGVSYW5nZSAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBEaXNjcmV0ZVJhbmdlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGN1cnJEYXRlID09PSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmFfMl9kYXRlX3BpYyhEaXNjcmV0ZVJhbmdlLmdldF9JdGVtKGkpLCBwaWMsIHBpYy5nZXRNYXNrKCksIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpKSB7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRoZSBkYXRlIGlzIG5vdCBpbiB0aGUgcmFuZ2VcclxuICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbigpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5jaGVjayBpZiBkYXkgc3VpdGFibGUgKG5vdCBiaWdnZXIgdGhhbiBtYXgpIGZvciBZZWFyIGFuZCBNb250aDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRlXCI+dXNlciBpbnNlcnRlZCBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzRG95XCI+aXMgcGljdHVyZSBvZiBuZWVkZWQgZGF5IGlzIERERCAtIGRheSBvZiB5ZWFyPC9wYXJhbT5cclxuICBwcml2YXRlIGNoZWNrRGF5KGRhdGU6IHN0cmluZywgaXNEb3k6IGJvb2xlYW4pOiBTdHJpbmdCdWlsZGVyIHtcclxuXHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSB0aGlzLmdldERhdGVFbGVtZW50KGRhdGUsIERhdGVFbGVtZW50LkRBWSk7XHJcbiAgICBpZiAoZGF5IDwgMjkgJiYgIWlzRG95KVxyXG4gICAgICByZXR1cm4gbmV3IFN0cmluZ0J1aWxkZXIoZGF0ZSk7XHJcblxyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IHRoaXMuZ2V0RGF0ZUVsZW1lbnQoZGF0ZSwgRGF0ZUVsZW1lbnQuWUVBUik7XHJcblxyXG4gICAgaWYgKCFpc0RveSlcclxuICAgIHtcclxuICAgICAgaWYgKHllYXIudG9TdHJpbmcoKS5sZW5ndGggPCAzKVxyXG4gICAgICAgIHllYXIgPSBOTnVtYmVyLlBhcnNlKHRoaXMuY2hlY2tDZW50dXJ5KHllYXIpLlRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2Vudmlyb25tZW50LkdldERhdGVNb2RlKHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpID09PSAnQicpXHJcbiAgICAgICAgeWVhciAtPSBQSUNJbnRlcmZhY2UuREFURV9CVURESElTVF9HQVA7XHJcblxyXG4gICAgICBsZXQgbW9udGg6IG51bWJlciA9IHRoaXMuZ2V0RGF0ZUVsZW1lbnQoZGF0ZSwgRGF0ZUVsZW1lbnQuTU9OVEgpO1xyXG5cclxuICAgICAgLy8gaWYgZGF5IG5vdCBjb25zaXN0YWluZWQgdG8geWVhciAmIG1vbnRoIC0gY2hhbmdlIGRheVxyXG4gICAgICBsZXQgZGF5TWF4OiBudW1iZXIgPSB0aGlzLmdldE1heERheUluTW9udGgoeWVhciwgbW9udGgpO1xyXG4gICAgICBpZiAoZGF5ID4gZGF5TWF4KVxyXG4gICAgICB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKE1zZ0ludGVyZmFjZS5TVFJfRVJSX0RBVEUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgIC8vIGlmIG1vbnRoIG5vdCBjb25zaXN0YWluZWQgdG8gZGF5KERERCkgLSBjaGFuZ2UgbW9udGhcclxuICAgICAgbGV0IG1vbnRoUmVhbDogbnVtYmVyID0gdGhpcy5nZXRNb250aEJ5RGF5KHllYXIsIGRheSk7XHJcblxyXG4gICAgICBpZiAobW9udGhSZWFsIDwgMSB8fCBtb250aFJlYWwgPiAxMilcclxuICAgICAgICB0aHJvdyBuZXcgV3JvbmdGb3JtYXRFeGNlcHRpb24oTXNnSW50ZXJmYWNlLlNUUl9FUlJfREFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmNoZWNrIGlmIGRheSBvZiB3ZWVrIHN1aXRhYmxlIChyaWdodCkgZm9yIFllYXIsIE1vbnRoIGFuZCBEYXk8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF0ZVwiPnVzZXIgaW5zZXJ0ZWQgc3RyaW5nPC9wYXJhbT5cclxuICBwcml2YXRlIGNoZWNrV2VlayhkYXRlOiBzdHJpbmcpOiBTdHJpbmdCdWlsZGVyIHtcclxuXHJcbiAgICBsZXQgZG93OiBudW1iZXIgPSB0aGlzLmdldERhdGVFbGVtZW50KGRhdGUsIERhdGVFbGVtZW50LkRPVyk7XHJcblxyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG5cclxuICAgIGxldCBkYXRlTWFnaWM6IG51bWJlciA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuYV8yX2RhdGUoZGF0ZSwgdGhpcy5fcGljdHVyZSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSk7XHJcblxyXG4gICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkYXRlTWFnaWMsIHRydWUsIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG5cclxuICAgIGxldCBkb3dSZWFsOiBudW1iZXIgPSBicmVha1BhcmFtcy5kb3c7XHJcbiAgICBpZiAoZG93UmVhbCAhPT0gZG93UmVhbClcclxuICAgICAgZGF0ZSA9IHRoaXMuY2hhbmdlRG93KGRhdGUsIGRvd1JlYWwpO1xyXG5cclxuICAgIHJldHVybiBuZXcgU3RyaW5nQnVpbGRlcihkYXRlKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgLy8vIDxzdW1tYXJ5PmNoZWNrIGlmIHRoZSBjb21iaW5hdGlvbiBvZiBKYXBhbmVzZSBlcmEgYW5kIHllYXIgaXMgdmFsaWQuPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0ckRhdGVcIj51c2VyIGluc2VydGVkIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBkYXRlIHN0cmluZyBvZiBwcm9wZXJseSBKYXBhbmVzZSBlcmE8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBjaGVja0pwbkVyYVllYXIoc3RyRGF0ZTogc3RyaW5nKTogU3RyaW5nQnVpbGRlciB7XHJcblxyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgbGV0IGRhdGVNYWdpYzogbnVtYmVyID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5hXzJfZGF0ZShzdHJEYXRlLCB0aGlzLl9waWN0dXJlLCB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpKTtcclxuXHJcbiAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGVNYWdpYywgdHJ1ZSwgdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldENvbXBJZHgoKSk7XHJcblxyXG4gICAgbGV0IGludFllYXJBRDogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgIGxldCBpbnREb3k6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRveTtcclxuXHJcbiAgICAvLyBnZXQgdGhlIG5hbWUgYW5kIGEgeWVhciBvZiB0aGUgZXJhXHJcbiAgICBsZXQgc3RyRXJhQWxwaGE6IHN0cmluZztcclxuICAgIGxldCBzdHJFcmFLYW5qaTogc3RyaW5nO1xyXG5cclxuICAgIHN0ckVyYUFscGhhID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5kYXRlX2pwbl95cl8yX2EoaW50WWVhckFELCBpbnREb3ksIGZhbHNlKTtcclxuICAgIHN0ckVyYUthbmppID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5kYXRlX2pwbl95cl8yX2EoaW50WWVhckFELCBpbnREb3ksIHRydWUpO1xyXG5cclxuICAgIGxldCBzdHJZZWFySnBuRXJhOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgIGxldCBudW06IG51bWJlciA9IFV0aWxEYXRlSnBuLmdldEluc3RhbmNlKCkuZGF0ZV9qcG5feWVhcl9vZnMoaW50WWVhckFELCBpbnREb3kpO1xyXG4gICAgaWYgKG51bSA8PSAwKSB7XHJcbiAgICAgIHRocm93IG5ldyBXcm9uZ0Zvcm1hdEV4Y2VwdGlvbihNc2dJbnRlcmZhY2UuU1RSX0VSUl9EQVRFKTtcclxuICAgIH1cclxuICAgIGlmIChudW0gPD0gOSkge1xyXG4gICAgICBzdHJZZWFySnBuRXJhLkFwcGVuZChcIjBcIik7XHJcbiAgICB9XHJcbiAgICBzdHJZZWFySnBuRXJhLkFwcGVuZChudW0udG9TdHJpbmcoKSk7XHJcblxyXG4gICAgLy8gYnVpbGQgYSBwcm9wZXJseSB5ZWFyIG9mIHRoZSBlcmFcclxuXHJcbiAgICAvLyBBIERCQ1MgY2hhcmFjdGVyIGluIFwic3RyXCIgY29uc3VtZXMgdHdvIGNoYXJhY3RlcnMgaW4gXCJtYXNrXCIuXHJcbiAgICAvLyBJZiBcInN0clwiIGNvbnRhaW5zIERCQ1MsIHRoZSBwb3NpdGlvbiBvZiBcIm1hc2tcIiBoYXMgdG8gc2tpcCBuZXh0IGluZGV4LlxyXG4gICAgLy8gVGhpcyB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBza2lwcGVkIGluZGV4ZXMuXHJcbiAgICBsZXQgaW50UGljSWR4T2ZzOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaW50Q250OiBudW1iZXIgPSAwOyBpbnRDbnQgKyBpbnRQaWNJZHhPZnMgPCB0aGlzLl9waWN0dXJlLmxlbmd0aDsgaW50Q250KyspXHJcbiAgICB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5fcGljdHVyZS5jaGFyQ29kZUF0KGludENudCArIGludFBpY0lkeE9mcykpXHJcbiAgICAgIHtcclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX0pZMSk6XHJcbiAgICAgICAgICBzdHJEYXRlID0gVXRpbFN0ckJ5dGVNb2RlLnJlcEMoc3RyRGF0ZSwgc3RyRXJhQWxwaGEsIGludENudCArIDEsIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfSlkyKTpcclxuICAgICAgICAgIHN0ckRhdGUgPSBVdGlsU3RyQnl0ZU1vZGUucmVwQyhzdHJEYXRlLCBzdHJFcmFLYW5qaSwgaW50Q250ICsgMSwgMSk7XHJcbiAgICAgICAgICBpbnRQaWNJZHhPZnMrKzsgLy8gUElDX0pZMiBjb25zdW1lcyAyIGNoYXJhY3RlcnMgb2YgcGljdHVyZSAoMSBtb3JlIHRoYW4gc3RyRGF0ZSlcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX0pZNCk6XHJcbiAgICAgICAgICBzdHJEYXRlID0gVXRpbFN0ckJ5dGVNb2RlLnJlcEMoc3RyRGF0ZSwgc3RyRXJhS2FuamksIGludENudCArIDEsIDIpO1xyXG4gICAgICAgICAgaW50Q250Kys7IC8vIFBJQ19KWTQgY29uc3VtZXMgMiBjaGFyYWN0ZXJzIG9mIHN0ckRhdGVcclxuICAgICAgICAgIGludFBpY0lkeE9mcyArPSAyOyAvLyBQSUNfSlk0IGNvbnN1bWVzIDQgY2hhcmFjdGVycyBvZiBwaWN0dXJlICgyIG1vcmUgdGhhbiBzdHJEYXRlKVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfWUopOlxyXG4gICAgICAgICAgc3RyRGF0ZSA9IFV0aWxTdHJCeXRlTW9kZS5yZXBDKHN0ckRhdGUsIHN0clllYXJKcG5FcmEudG9TdHJpbmcoKSwgaW50Q250ICsgMSwgMik7XHJcbiAgICAgICAgICBpbnRDbnQrKzsgLy8gUElDX1lKIGNvbnN1bWVzIDIgY2hhcmFjdGVycyBvZiBzdHJEYXRlXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChpbnRDbnQgPCBzdHJEYXRlLmxlbmd0aClcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gaWYgXCJzdHJEYXRlXCIgY29udGFpbnMgREJDUywgdGhlIG5leHQgaW5kZXggb2YgXCJwaWN0dXJlXCIgaGFzIHRvIGJlIHNraXBwZWQuXHJcbiAgICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoc3RyRGF0ZVtpbnRDbnRdKSA9PT0gZmFsc2UgJiYgVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKHRoaXMuX3BpY3R1cmVbaW50Q250ICsgaW50UGljSWR4T2ZzXSkgPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgaW50UGljSWR4T2ZzKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgU3RyaW5nQnVpbGRlcihzdHJEYXRlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQgbWF4IG51bWJlciBvZiBkYXkgaW4gbW9udGg8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwieWVhclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibW9udGhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbWF4IGRheXMgWzI4LTMxXSBudW1iZXI8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRNYXhEYXlJbk1vbnRoKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgYXJyYXk6IG51bWJlcltdID0gW1xyXG4gICAgICAwLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXHJcbiAgICBdO1xyXG4gICAgbGV0IGxlYXB5ZWFyOiBib29sZWFuID0geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XHJcblxyXG4gICAgaWYgKGxlYXB5ZWFyICYmIG1vbnRoID09PSAyKVxyXG4gICAgICByZXR1cm4gYXJyYXlbbW9udGhdICsgMTtcclxuXHJcbiAgICAgcmV0dXJuIGFycmF5W21vbnRoXTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQgbW9udGggZm9yIGRheSwgdGhhbiBkYXkgaGF2ZSBtYXNrIERERDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXlcIj5bMC0zNjVdPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG51bWJlciBvZiBtb250aDwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldE1vbnRoQnlEYXkoeWVhcjogbnVtYmVyLCBkYXk6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IExlYXBZZWFyOiBib29sZWFuO1xyXG5cclxuICAgIExlYXBZZWFyID0gKHllYXIgJSA0ID09PSAwKSAmJiAoKHllYXIgJSAxMDAgIT09IDApIHx8ICh5ZWFyICUgNDAwID09PSAwKSk7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IFBJQ0ludGVyZmFjZS5kYXRlX2RheV90YWIubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgIGlmICghTGVhcFllYXIpXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAoUElDSW50ZXJmYWNlLmRhdGVfZGF5X3RhYltpXSA+PSBkYXkpXHJcbiAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgICAvLyBpcyBMZWFwIFllYXJcclxuICAgICAgZWxzZVxyXG4gICAgICB7XHJcbiAgICAgICAgaWYgKGkgPCAzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmIChQSUNJbnRlcmZhY2UuZGF0ZV9kYXlfdGFiW2ldID49IGRheSlcclxuICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkZCAxIGRheSBhZnRlciBzZWNvbmQgbW9udGhcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKFBJQ0ludGVyZmFjZS5kYXRlX2RheV90YWJbaV0gKyAxID49IGRheSlcclxuICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IC8vIGZvciBsb29wXHJcbiAgICByZXR1cm4gaTsgLy8gdGhlIGZ1bmN0aW9uIGNhbm4ndCBjYW1lIHRvIHRoZSBzdGF0ZW1lbnQgYW55dGltZVxyXG4gIH1cclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5nZXQgWWVhcnxNb250aHxEYXl8RG93IG9mIGRhdGVcclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRlXCI+ZGF0ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZWxlbWVudFwiPnJlcXVpcmVkIGRhdGUgZWxlbWVudCAoeWVhci9tb250aC9kYXkvZG93KSA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5ZZWFyfE1vbnRofERheXxEb3cgb2YgZGF0ZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldERhdGVFbGVtZW50KGRhdGU6IHN0cmluZywgZWxlbWVudDogRGF0ZUVsZW1lbnQpOiBudW1iZXIge1xyXG4gICAgbGV0IGJ1ZmZlcjogU3RyaW5nID0gbnVsbDtcclxuICAgIGxldCBsZXR0ZXJzOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGV4aXRMb29wOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgcGljV2Vla1R5cGU6IG51bWJlciA9IFBJQ0ludGVyZmFjZS5QSUNfV1dXOyAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICBsZXQgaXNKcG5FcmFZZWFyOiBib29sZWFuID0gZmFsc2U7IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgIGxldCBlcmFfeWVhcjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvLyBBIERCQ1MgY2hhcmFjdGVyIGluIFwiZGF0ZVwiIGNvbnN1bWVzIHR3byBjaGFyYWN0ZXJzIGluIFwicGljdHVyZVwiLlxyXG4gICAgLy8gSWYgXCJkYXRlXCIgY29udGFpbnMgREJDUywgdGhlIHBvc2l0aW9uIG9mIFwicGljdHVyZVwiIGhhcyB0byBza2lwIG5leHQgaW5kZXguXHJcbiAgICAvLyBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHNraXBwZWQgaW5kZXhlcy5cclxuICAgIGxldCBpbnRQaWNJZHhPZnM6IG51bWJlciA9IDA7IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuXHJcbiAgICBsZXQgbWluTGVuOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpXHJcbiAgICAgIG1pbkxlbiA9IFV0aWxTdHJCeXRlTW9kZS5nZXRNaW5MZW5QaWN0dXJlKGRhdGUsIHRoaXMuX3BpY3R1cmUpO1xyXG4gICAgZWxzZVxyXG4gICAgICBtaW5MZW4gPSBNYXRoLm1pbihkYXRlLmxlbmd0aCwgdGhpcy5fcGljdHVyZS5sZW5ndGgpO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgKyBpbnRQaWNJZHhPZnMgPCBtaW5MZW4gJiYgIWV4aXRMb29wOyBpKyspXHJcbiAgICB7XHJcbiAgICAgIGlmICh0aGlzLmlzRGF0YVBvc2l0aW9uYWxEaXJlY3RpdmUodGhpcy5fcGljdHVyZVtpICsgaW50UGljSWR4T2ZzXSkpXHJcbiAgICAgIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuX3BpY3R1cmUuY2hhckNvZGVBdChpICsgaW50UGljSWR4T2ZzKSlcclxuICAgICAgICB7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ERDpcclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5EQVkpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGUuc3Vic3RyKGksIDIpO1xyXG4gICAgICAgICAgICBleGl0TG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19EREQ6XHJcbiAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gRGF0ZUVsZW1lbnQuREFZKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBidWZmZXIgPSBkYXRlLnN1YnN0cihpLCAzKTtcclxuICAgICAgICAgICAgZXhpdExvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkgKz0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfRERERDpcclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5EQVkpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGUuc3Vic3RyKGksIDIpOyAvLyBub3QgKzQgbmVlZCBub3Qgc3VmZml4IG9mICduZCcsICdyZCcsICdzdCdcclxuICAgICAgICAgICAgZXhpdExvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaSArPSAzO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19NTUQ6XHJcbiAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gRGF0ZUVsZW1lbnQuTU9OVEgpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGUuc3Vic3RyKGksIDIpO1xyXG4gICAgICAgICAgICBleGl0TG9vcCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX01NTTpcclxuICAgICAgICAgIC8vIGdldCBzaXplIG9mIFBJQ19NTU0gYmxvY2tcclxuICAgICAgICAgIGxldHRlcnMgPSB0aGlzLmdldFNpemVPZkJsb2NrKGkgKyBpbnRQaWNJZHhPZnMsIFBJQ0ludGVyZmFjZS5QSUNfTU1NKTtcclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5NT05USClcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgbGV0dGVycyk7XHJcbiAgICAgICAgICAgIGV4aXRMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpICs9IGxldHRlcnMgLSAxO1xyXG4gICAgICAgICAgbGV0dGVycyA9IDA7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lZOlxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IERhdGVFbGVtZW50LllFQVIpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGUuc3Vic3RyKGksIDIpO1xyXG4gICAgICAgICAgICBleGl0TG9vcCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lZWVk6XHJcbiAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gRGF0ZUVsZW1lbnQuWUVBUilcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgNCk7XHJcbiAgICAgICAgICAgIGV4aXRMb29wID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkgKz0gMztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVzpcclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5ET1cpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGUuc3Vic3RyKGksIDEpO1xyXG4gICAgICAgICAgICBleGl0TG9vcCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1dXVzpcclxuICAgICAgICAgIGxldHRlcnMgPSB0aGlzLmdldFNpemVPZkJsb2NrKGkgKyBpbnRQaWNJZHhPZnMsIFBJQ0ludGVyZmFjZS5QSUNfV1dXKTtcclxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5ET1cpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGUuc3Vic3RyKGksIGxldHRlcnMpO1xyXG4gICAgICAgICAgICBleGl0TG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaSArPSBsZXR0ZXJzIC0gMTtcclxuICAgICAgICAgIGxldHRlcnMgPSAwO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19IWVlZWVk6XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hMOlxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19IREQ6XHJcbiAgICAgICAgICAvLyBub3QgaW1wbGVtZW50ZWQgZm9yIGhlYnJldyB5ZXRcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfQkI6ICAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgICAgICBsZXR0ZXJzID0gdGhpcy5nZXRTaXplT2ZCbG9jayhpICsgaW50UGljSWR4T2ZzLCBQSUNJbnRlcmZhY2UuUElDX0JCKTtcclxuXHJcbiAgICAgICAgICBpZiAoaSArIE1hdGguZmxvb3IobGV0dGVycyAvIDIpIDwgZGF0ZS5sZW5ndGgpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGUuc3Vic3RyKGksIE1hdGguZmxvb3IobGV0dGVycyAvIDIpKTtcclxuICAgICAgICAgICAgLy8gaWYgZGF0ZSBjb250YWlucyBEQkNTLCBzb21lIGluZGV4ZXMgb2YgcGljdHVyZSBoYXZlIHRvIGJlIHNraXBwZWQuXHJcbiAgICAgICAgICAgIGludFBpY0lkeE9mcyArPSBsZXR0ZXJzIC0gYnVmZmVyLmxlbmd0aDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gRGF0ZUVsZW1lbnQuRE9XKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBleGl0TG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgIHBpY1dlZWtUeXBlID0gUElDSW50ZXJmYWNlLlBJQ19CQjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpICs9IGxldHRlcnMgLSAxO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19KWTE6ICAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgICAgICBpc0pwbkVyYVllYXIgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19KWTI6ICAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgICAgICBpc0pwbkVyYVllYXIgPSB0cnVlO1xyXG4gICAgICAgICAgaW50UGljSWR4T2ZzKys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0pZNDogIC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgICAgICAgIGlzSnBuRXJhWWVhciA9IHRydWU7XHJcbiAgICAgICAgICBpbnRQaWNJZHhPZnMgKz0gMjtcclxuICAgICAgICAgIGkrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWUo6ICAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gRGF0ZUVsZW1lbnQuWUVBUilcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gZGF0ZS5zdWJzdHIoaSwgMik7XHJcbiAgICAgICAgICAgIGV4aXRMb29wID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gLy8gc3dpdGNoIG9mIHBvc2l0aW9uYWwgZGlyZWN0aXZlc1xyXG4gICAgICAgIH0gLy8gaWYgb2YgcG9zaXRpb25hbCBkaXJlY3RpdmVzXHJcbiAgICB9IC8vIGZvciBsb29wIGluIHBpY3R1cmVcclxuXHJcbiAgICBpZiAoYnVmZmVyID09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGlmIChlbGVtZW50ID09PSBEYXRlRWxlbWVudC5ZRUFSKVxyXG4gICAgICAgIHJldHVybiBEYXRlVGltZS5Ob3cuWWVhcjtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1ZmZlciA9IGJ1ZmZlci50cmltKCk7XHJcblxyXG4gICAgaWYgKGxldHRlcnMgPiAwKVxyXG4gICAgLy8gaXQncyBQSUNfV1dXIG9yIFBJQ19NTU1cclxuICAgIHtcclxuICAgICAgaWYgKGVsZW1lbnQgPT09IERhdGVFbGVtZW50Lk1PTlRIKVxyXG4gICAgICAgIGxldHRlcnMgPSB0aGlzLmdldE1vbnRoT3JXZWVrKGJ1ZmZlci50b1N0cmluZygpLCBsZXR0ZXJzLCBQSUNJbnRlcmZhY2UuUElDX01NTSk7XHJcbiAgICAgIGVsc2UgaWYgKGVsZW1lbnQgPT09IERhdGVFbGVtZW50LkRPVylcclxuICAgICAgICBsZXR0ZXJzID0gdGhpcy5nZXRNb250aE9yV2VlayhidWZmZXIudG9TdHJpbmcoKSwgbGV0dGVycywgcGljV2Vla1R5cGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICB3aGlsZSAoYnVmZmVyLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChcIjBcIikgfHwgYnVmZmVyLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChcIiBcIikpXHJcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyLnRvU3RyaW5nKCkuc3Vic3RyKDEpO1xyXG4gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMClcclxuICAgICAgICBsZXR0ZXJzID0gMDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGxldHRlcnMgPSBOTnVtYmVyLlBhcnNlKGJ1ZmZlci50b1N0cmluZygpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZWxlbWVudCA9PT0gRGF0ZUVsZW1lbnQuWUVBUiAmJiBpc0pwbkVyYVllYXIpXHJcbiAgICB7XHJcbiAgICAgIC8vIGdldCB0aGUgc3RhcnQgeWVhciBvZiB0aGUgZXJhXHJcbiAgICAgIGVyYV95ZWFyID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5nZXRTdGFydFllYXJPZkVyYShkYXRlLCB0aGlzLl9waWN0dXJlKTtcclxuICAgICAgaWYgKGVyYV95ZWFyID09PSAwKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICBsZXR0ZXJzICs9IGVyYV95ZWFyIC0gMTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGV0dGVycztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5jaGFuZ2UgZGF5IG51bWJlciBpbiBkYXRlIGZpZWxkIHRvIGRheU1heDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRlXCI+dG8gY2hhbmdlIGRheSBpbnRvPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXlNYXhcIj50aGUgbmV3IGRheSB2YWx1ZTwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjaGFuZ2VEb3coZGF0ZTogc3RyaW5nLCBkb3c6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgaXNEYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgbGV0dGVyczogbnVtYmVyO1xyXG4gICAgbGV0IHN0YXJ0UGFydDogc3RyaW5nO1xyXG4gICAgbGV0IGZpbmlzaFBhcnQ6IHN0cmluZztcclxuICAgIGxldCBudW1iZXIxOiBzdHJpbmc7XHJcblxyXG4gICAgbnVtYmVyMSA9IFwiXCIgKyBkb3c7IC8vIFwiIFwiXHJcblxyXG4gICAgLy8gQSBEQkNTIGNoYXJhY3RlciBpbiBcImRhdGVcIiBjb25zdW1lcyB0d28gY2hhcmFjdGVycyBpbiBcInBpY3R1cmVcIi5cclxuICAgIC8vIElmIFwiZGF0ZVwiIGNvbnRhaW5zIERCQ1MsIHRoZSBwb3NpdGlvbiBvZiBcInBpY3R1cmVcIiBoYXMgdG8gc2tpcCBuZXh0IGluZGV4LlxyXG4gICAgLy8gVGhpcyB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBza2lwcGVkIGluZGV4ZXMuIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgIGxldCBpbnRQaWNJZHhPZnM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSArIGludFBpY0lkeE9mcyA8IHRoaXMuX3BpY3R1cmUubGVuZ3RoICYmICFpc0RhdGU7IGkrKylcclxuICAgIHtcclxuICAgICAgaWYgKHRoaXMuaXNEYXRhUG9zaXRpb25hbERpcmVjdGl2ZSh0aGlzLl9waWN0dXJlW2kgKyBpbnRQaWNJZHhPZnNdKSlcclxuICAgICAge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5fcGljdHVyZS5jaGFyQ29kZUF0KGkgKyBpbnRQaWNJZHhPZnMpKVxyXG4gICAgICAgIHtcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1c6XHJcbiAgICAgICAgICBzdGFydFBhcnQgPSBkYXRlLnN1YnN0cigwLCBpKTtcclxuICAgICAgICAgIGZpbmlzaFBhcnQgPSBkYXRlLnN1YnN0cihpICsgMSk7XHJcbiAgICAgICAgICBkYXRlID0gc3RhcnRQYXJ0ICsgbnVtYmVyMSArIGZpbmlzaFBhcnQ7XHJcbiAgICAgICAgICBpc0RhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19XV1c6XHJcbiAgICAgICAgICBsZXR0ZXJzID0gdGhpcy5nZXRTaXplT2ZCbG9jayhpICsgaW50UGljSWR4T2ZzLCBQSUNJbnRlcmZhY2UuUElDX1dXVyk7XHJcbiAgICAgICAgICBzdGFydFBhcnQgPSBkYXRlLnN1YnN0cigwLCBpKTtcclxuICAgICAgICAgIGZpbmlzaFBhcnQgPSBkYXRlLnN1YnN0cihpICsgbGV0dGVycyk7XHJcbiAgICAgICAgICBsZXQgZGF5U3RyOiBzdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuREFZU19QVFIpO1xyXG4gICAgICAgICAgbGV0IGRheU5hbWVzOiBzdHJpbmdbXSA9IERhdGVVdGlsLmdldExvY2FsRGF5cyhkYXlTdHIpO1xyXG4gICAgICAgICAgbnVtYmVyMSA9IGRheU5hbWVzW2Rvd107XHJcblxyXG4gICAgICAgICAgaWYgKG51bWJlcjEubGVuZ3RoID4gbGV0dGVycylcclxuICAgICAgICAgICAgbnVtYmVyMSA9IG51bWJlcjEuc3Vic3RyKDAsIGxldHRlcnMpO1xyXG4gICAgICAgICAgZWxzZSBpZiAobnVtYmVyMS5sZW5ndGggPCBsZXR0ZXJzKVxyXG4gICAgICAgICAgICB3aGlsZSAobnVtYmVyMS5sZW5ndGggPCBsZXR0ZXJzKVxyXG4gICAgICAgICAgICAgIG51bWJlcjEgPSBudW1iZXIxICsgJyAnO1xyXG4gICAgICAgICAgZGF0ZSA9IHN0YXJ0UGFydCArIG51bWJlcjEgKyBmaW5pc2hQYXJ0O1xyXG4gICAgICAgICAgaXNEYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfQkI6ICAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgICAgICBsZXR0ZXJzID0gdGhpcy5nZXRTaXplT2ZCbG9jayhpICsgaW50UGljSWR4T2ZzLCBQSUNJbnRlcmZhY2UuUElDX0JCKTtcclxuICAgICAgICAgIC8vIFwibGV0dGVyc1wiIG1lYW5zIGEgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gXCJwaWN0dXJlXCJcclxuXHJcbiAgICAgICAgICBzdGFydFBhcnQgPSBkYXRlLnN1YnN0cigwLCBpKTtcclxuICAgICAgICAgIGZpbmlzaFBhcnQgPSBkYXRlLnN1YnN0cihpICsgTWF0aC5mbG9vcihsZXR0ZXJzIC8gMikpO1xyXG4gICAgICAgICAgLy8gXCJsZXR0ZXJzIC8gMlwiIG1lYW5zIGEgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gXCJkYXRlXCJcclxuXHJcbiAgICAgICAgICBudW1iZXIxID0gVXRpbERhdGVKcG4uZ2V0U3RyRG93KGRvdyk7XHJcblxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5sZW5CKG51bWJlcjEpID4gbGV0dGVycylcclxuICAgICAgICAgICAgbnVtYmVyMSA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0QihudW1iZXIxLCBsZXR0ZXJzKTtcclxuICAgICAgICAgIGVsc2UgaWYgKFV0aWxTdHJCeXRlTW9kZS5sZW5CKG51bWJlcjEpIDwgbGV0dGVycylcclxuICAgICAgICAgICAgd2hpbGUgKFV0aWxTdHJCeXRlTW9kZS5sZW5CKG51bWJlcjEpIDwgbGV0dGVycylcclxuICAgICAgICAgICAgICBudW1iZXIxID0gbnVtYmVyMSArICcgJztcclxuICAgICAgICAgIGRhdGUgPSBzdGFydFBhcnQgKyBudW1iZXIxICsgZmluaXNoUGFydDtcclxuICAgICAgICAgIGlzRGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKVxyXG4gICAgICAgICAgLy8gSlBOOiBEQkNTIHN1cHBvcnRcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGkgPCBkYXRlLmxlbmd0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIC8vIGlmIFwiZGF0ZVwiIGNvbnRhaW5zIERCQ1MsIHRoZSBuZXh0IGluZGV4IG9mIFwicGljdHVyZVwiIGhhcyB0byBiZSBza2lwcGVkLlxyXG4gICAgICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoZGF0ZVtpXSkgPT09IGZhbHNlICYmIFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aCh0aGlzLl9waWN0dXJlW2kgKyBpbnRQaWNJZHhPZnNdKSA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgIGludFBpY0lkeE9mcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgfSAvLyBzd2l0Y2hcclxuICAgICAgICB9IC8vIGlmIG9mIHBvc2l0aW9uYWwgZGlyZWN0aXZlc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Y2hlY2sgJiB2YWxpZGF0ZSBUaW1lIGZpZWxkIGJ5IGhpcyBvbGQvbmV3IHZhbHVlIGFuZCAyIHBpY3R1cmVzOlxyXG4gIC8vLyBSZWFsIGFuZCBFbmFibGVcclxuICAvLy8gMS5jaGVjayBpZiBuZXd2YWx1ZSBjb21wbGV0ZSB3aXRoIHBpY3R1cmVzLCBvdGhlcndpc2UgcmV0dXJuIG9sZHZhbHVlXHJcbiAgLy8vIDIuY2hlY2sgaWYgbmV3dmFsdWUgY29tcGxldGUgd2l0aCByYW5nZVxyXG4gIC8vLyAyLjEgY29tcGxldGUgdmFsdWUsIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgIHJldHVybiBvbGR2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBTdHJpbmcgLSBuZXcgdmFsdWUgb2YgdmFsaWRhdGVkIGZpZWxkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgY2hlY2tUaW1lRmllbGQoKTogRGF0ZSB7XHJcbiAgICBsZXQgbmV3VGltZTogRGF0ZSA9IG5ldyBEYXRlICh0aGlzLl9uZXd2YWx1ZSk7XHJcblxyXG5cclxuICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZhaWxlZChmYWxzZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuaXNEYXRlWmVybyh0aGlzLl9uZXd2YWx1ZSkpIHtcclxuICAgICAgLy8gZ2V0IGRlZmF1bHQgdmFsdWUgb2YgdGhlIGZpZWxkXHJcbiAgICAgIGxldCBkZWZhdWx0TWdWYWx1ZTogc3RyaW5nID0gdGhpcy5fdmFsRGV0LmdldENvbnRyb2woKS5nZXRGaWVsZCgpLmdldERlZmF1bHRWYWx1ZSgpO1xyXG4gICAgICBuZXdUaW1lID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tZzJkaXNwKGRlZmF1bHRNZ1ZhbHVlLCBcIlwiLCB0aGlzLl92YWxEZXQuZ2V0UElDKCksIHRydWUsIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCksIGZhbHNlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG5cclxuICAgICAgLy8gcmFuZ2Ugb2YgdGhlIHRpbWVcclxuICAgICAgaWYgKHRoaXMuX3ZhbERldC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKSAhPSBudWxsIHx8IHRoaXMuX3ZhbERldC5nZXREaXNjcmV0ZVJhbmdlVmFsdWVzKCkgIT0gbnVsbClcclxuICAgICAgICBuZXdUaW1lID0gdGhpcy5maWxsVGltZUJ5UmFuZ2UodGhpcy5fdmFsRGV0LmdldENvbnRpbnVvdXNSYW5nZVZhbHVlcygpLCB0aGlzLl92YWxEZXQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpLCB0aGlzLl9uZXd2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3VGltZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5BZGQgZm91bmQgaW4gbmV3dmFsdWUgbnVtYmVycygyKG9yIDEpIGxldHRlcnMpIHRvIGJ1ZmZlciBhbmQgcmV0dXJuXHJcbiAgLy8vIGxhc3QgZm91bmQgbnVtYmVyIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdXJyVmFsdWVcIj5pbiBuZXd2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYnVmZmVyXCI+Ly8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidHlwZVwiPndoaWNoIHR5cGUgb2YgcG9zaXRpb25hbCBkaXJlY3RpdmUsIGZvciBjaGVja2luZyB2YWxpZGl0eTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBjdXJyVmFsdWUgaW4gbmV3dmFsdWU8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhZGQyVGltZShjdXJyVmFsdWU6IG51bWJlciwgYnVmZmVyOiBTdHJpbmdCdWlsZGVyLCB0eXBlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0YXJ0OiBudW1iZXIgPSBjdXJyVmFsdWU7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IFNUUl8wMDogU3RyaW5nID0gXCIwMFwiO1xyXG4gICAgbGV0ICBjdXJyQWRkOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICB3aGlsZSAoc3RhcnQgPCB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggJiYgIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX25ld3ZhbHVlW3N0YXJ0XSkpXHJcbiAgICB7XHJcbiAgICAgIHN0YXJ0Kys7IC8vIGZpbmQgZmlyc3QgZGlnaXRcclxuICAgICAgLy8gbm9uLWRpZ2l0cyB3ZXJlIGZvdW5kIGluIGlucHV0IHN0cmluZ1xyXG4gICAgICAvLyB3ZSBkbyBub3QgdGhyb3cgU1RSX0VSUl9USU1FIGV4Y2VwdGlvbiB0byBwcmV2ZW50IGlucHV0IGRpZ2l0cyBsb3N0XHJcbiAgICAgIC8vIG9uIG5vbi1kaWdpdHMgcGxhY2UgU1RSXzAwIHdpbGwgYmUgYWRkZWRcclxuICAgICAgLy8gU2luY2UgTWFzayBFZGl0aW5nIC4gVGhpcyBlcnJvciBpcyBpcnJlbGV2YW50LiBUaW1lIG5vdywgYWx3YXlzIGNvbnRhaW5zIG5vbiBkaWdpdHMgbGlrZSA6IGFuZCBtaWdodCBjb250YWluICcgJyBmb3IgdW5maWxsZWQgY2hhcnMuXHJcbiAgICAgIC8vIFRoaXMgaXMgYSB2YWxpZCBjYXNlIGFuZCB3ZSBkbyBub3Qgd2FudCBhbiBlcnJvciBwb3BwaW5nIGFib3V0IGl0LlxyXG4gICAgICAvLyAgZ3VpTWFuYWdlci53cml0ZVRvTWVzc2FnZVBhbmUodmFsRGV0LmdldENvbnRyb2woKS5nZXRGb3JtKCkuZ2V0VGFzaygpLCBDbGllbnRNYW5hZ2VyLkluc3RhbmNlLmdldE1lc3NhZ2VTdHJpbmcoU1RSX0VSUl9USU1FKSwgU3RhdHVzQmFyTWVzc2FnZVR5cGUuU0JfUlVOVElNRV9NU0cpO1xyXG4gICAgICAvLyAgc2V0VmFsaWRhdGlvbkZhaWxlZCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhcnQgPT09IHRoaXMuX25ld3ZhbHVlLmxlbmd0aClcclxuICAgIC8vIG5vdCBmb3VuZCBtb3JlIGRpZ2l0c1xyXG4gICAge1xyXG4gICAgICBidWZmZXIuQXBwZW5kKFNUUl8wMC50b1N0cmluZygpKTtcclxuICAgICAgcmV0dXJuIGN1cnJWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgMiAmJiBpIDwgdGhpcy5fbmV3dmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdCh0aGlzLl9uZXd2YWx1ZVtpXSkpXHJcbiAgICAgICAgY3VyckFkZC5BcHBlbmQodGhpcy5fbmV3dmFsdWVbaV0pO1xyXG4gICAgICBlbHNlXHJcbiAgICAgIHtcclxuICAgICAgICBjdXJyQWRkLkluc2VydCgwLCAnMCcpOyAvLyBvbmx5IDEgZGlnaXQgZm91bmRcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpID09PSB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggJiYgaSA9PT0gc3RhcnQgKyAxKVxyXG4gICAgICBjdXJyQWRkLkluc2VydCgwLCAnMCcpO1xyXG4gICAgLy8gb25seSAxIGRpZ2l0IGZvdW5kXHJcbiAgICBlbHNlIGlmIChpID09PSB0aGlzLl9uZXd2YWx1ZS5sZW5ndGggJiYgaSA9PT0gc3RhcnQpXHJcbiAgICAgIGN1cnJBZGQuQXBwZW5kKFNUUl8wMC50b1N0cmluZygpKTtcclxuXHJcbiAgICBsZXQgYWRkOiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKGN1cnJBZGQuVG9TdHJpbmcoKSk7XHJcblxyXG4gICAgLyppZiAoYWRkIDwgMClcclxuICAgIGN1cnJBZGQ9bmV3IFN0cmluZ0J1ZmZlcihcIjAwXCIpO1xyXG4gICAgZWxzZSBpZiAoYWRkID4gNTkgJiYgdHlwZT09UElDX01NVClcclxuICAgIGN1cnJBZGQ9bmV3IFN0cmluZ0J1ZmZlcihcIjU5XCIpO1xyXG4gICAgZWxzZSBpZiAoYWRkID4gNTkgJiYgdHlwZT09UElDX1NTKVxyXG4gICAgY3VyckFkZD1uZXcgU3RyaW5nQnVmZmVyKFwiNTlcIik7Ki9cclxuICAgIGlmIChhZGQgPCAwIHx8IChhZGQgPiA1OSAmJiB0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX01NVCkgfHwgKGFkZCA+IDU5ICYmIHR5cGUgPT09IFBJQ0ludGVyZmFjZS5QSUNfU1MpKVxyXG4gICAgICB0aHJvdyBuZXcgV3JvbmdGb3JtYXRFeGNlcHRpb24oTXNnSW50ZXJmYWNlLlNUUl9FUlJfVElNRSk7XHJcbiAgICBlbHNlIGlmICh0eXBlID09PSBQSUNJbnRlcmZhY2UuUElDX0hIKVxyXG4gICAge1xyXG4gICAgICBsZXQgUE06IGJvb2xlYW4gPSB0aGlzLmdldElzUE0oKTtcclxuICAgICAgbGV0IG5ld1N0cjogU3RyaW5nID0gbnVsbDtcclxuICAgICAgbGV0IGRpZjogbnVtYmVyO1xyXG5cclxuICAgICAgaWYgKChhZGQgPj0gMTIgfHwgYWRkID09PSAwKSAmJiBQTSlcclxuICAgICAge1xyXG4gICAgICAgIGxldCBhZGRUbXA6IG51bWJlciA9IGFkZCAlIDI0O1xyXG5cclxuICAgICAgICB0aGlzLl9pc1BtID0gKGFkZFRtcCA+PSAxMiAmJiBhZGRUbXAgPCAyNCk7XHJcblxyXG4gICAgICAgIGlmIChhZGRUbXAgPiAxMilcclxuICAgICAgICAgIGRpZiA9IGFkZFRtcCAtIDEyO1xyXG4gICAgICAgIGVsc2UgaWYgKGFkZFRtcCA9PT0gMClcclxuICAgICAgICAgIGRpZiA9IDEyO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGRpZiA9IGFkZFRtcDtcclxuXHJcbiAgICAgICAgbmV3U3RyID0gKChkaWYgPiA5ID8gXCJcIiA6IFwiMFwiKSArIGRpZik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYWRkID4gOTkgJiYgIVBNKVxyXG4gICAgICAgIG5ld1N0ciA9IFwiOTlcIjtcclxuXHJcbiAgICAgIGlmIChuZXdTdHIgIT0gbnVsbClcclxuICAgICAge1xyXG4gICAgICAgIGN1cnJBZGQuUmVtb3ZlKDAsIGN1cnJBZGQuTGVuZ3RoKTtcclxuICAgICAgICBjdXJyQWRkLkFwcGVuZChuZXdTdHIudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBidWZmZXIuQXBwZW5kKGN1cnJBZGQuVG9TdHJpbmcoKSk7XHJcbiAgICByZXR1cm4gaTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5BcHBlbmQgUE0gb3IgQU0gdG8gdGltZTwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFkZFBNMlRpbWUoY3VyclZhbHVlOiBudW1iZXIsIGJ1ZmZlcjogU3RyaW5nQnVpbGRlcik6IG51bWJlciB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGlmICgoaSA9IHRoaXMuX25ld3ZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihcIkFNXCIsIGN1cnJWYWx1ZSkpICE9PSAtMSlcclxuICAgIHtcclxuICAgICAgYnVmZmVyLkFwcGVuZChcImFtXCIpO1xyXG4gICAgICByZXR1cm4gaSArIDI7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgIGlmICgoaSA9IHRoaXMuX25ld3ZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihcIlBNXCIsIGN1cnJWYWx1ZSkpICE9PSAtMSlcclxuICAgICAge1xyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJwbVwiKTtcclxuICAgICAgICByZXR1cm4gaSArIDI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5faXNQbSlcclxuICAgICAge1xyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJwbVwiKTtcclxuICAgICAgICByZXR1cm4gY3VyclZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiYW1cIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VyclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNoZWNrIGlmIHdoZXJlIGlzICdQTScgcG9zaXRpb25hbCBkaXJlY3RpdmUgaW4gdGhlIFRpbWUgUGljdHVyZTwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgLSB0aGVyZSBpcyBQTSwgZWxzZSBmYWxzZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldElzUE0oKTogYm9vbGVhbiB7XHJcblxyXG4gICAgZm9yIChsZXQgY3VycjogbnVtYmVyID0gMDsgY3VyciA8IHRoaXMuX3BpY3R1cmUubGVuZ3RoOyBjdXJyKyspXHJcbiAgICB7XHJcbiAgICAgIGlmICh0aGlzLl9waWN0dXJlLmNoYXJDb2RlQXQoY3VycikgPT09IFBJQ0ludGVyZmFjZS5QSUNfUE0pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWxsVGltZUJ5UmFuZ2UoQ29udGludW91c1JhbmdlOiBMaXN0PHN0cmluZz4sIERpc2NyZXRlUmFuZ2U6IExpc3Q8c3RyaW5nPiwgYnVmZmVyOiBEYXRlKTogRGF0ZSB7XHJcbiAgICBsZXQgIHBpYzogUElDID0gdGhpcy5fdmFsRGV0LmdldFBJQygpO1xyXG4gICAgbGV0ICBjdXJyVGltZTogbnVtYmVyID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5mcm9tTmF0aXZlVGltZVRvTWdUaW1lTnVtYmVyKGJ1ZmZlcik7XHJcbiAgICBsZXQgZG93blRpbWU6IG51bWJlciwgdG9wVGltZTogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICB0aGlzLnNldFZhbGlkYXRpb25GYWlsZWQoZmFsc2UpO1xyXG4gICAgaWYgKENvbnRpbnVvdXNSYW5nZSAhPSBudWxsKVxyXG4gICAge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgQ29udGludW91c1JhbmdlLmxlbmd0aCAtIDE7IGkrKylcclxuICAgICAge1xyXG4gICAgICAgIGRvd25UaW1lID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5hXzJfdGltZShDb250aW51b3VzUmFuZ2UuZ2V0X0l0ZW0oaSksIHBpYywgZmFsc2UpO1xyXG4gICAgICAgIHRvcFRpbWUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmFfMl90aW1lKENvbnRpbnVvdXNSYW5nZS5nZXRfSXRlbSgrK2kpLCBwaWMsIGZhbHNlKTtcclxuICAgICAgICBpZiAoY3VyclRpbWUgPj0gZG93blRpbWUgJiYgY3VyclRpbWUgPD0gdG9wVGltZSlcclxuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShidWZmZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKERpc2NyZXRlUmFuZ2UgIT0gbnVsbClcclxuICAgIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IERpc2NyZXRlUmFuZ2UubGVuZ3RoOyBpKyspXHJcbiAgICAgIHtcclxuICAgICAgICBpZiAoY3VyclRpbWUgPT09IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuYV8yX3RpbWUoRGlzY3JldGVSYW5nZS5nZXRfSXRlbShpKSwgcGljLCBmYWxzZSkpXHJcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYnVmZmVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdGhlIHRpbWUgaXMgbm90IGluIHRoZSByYW5nZVxyXG4gICAgdGhyb3cgbmV3IFdyb25nRm9ybWF0RXhjZXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vLyBTRVJWSUNFIGZ1bmN0aW9uc1xyXG4gIC8vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHByaW50IEVSUk9SIHByb21wdCBtZXNzYWdlIGFib3V0IHJhbmdlIHRvIHN0YXR1cyBiYXI8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibXNnSWRcIj5vZiBlcnJvciBNZXNzYWdlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzZXRWYWxpZGF0aW9uRmFpbGRcIj52YWxpZGF0aW9uIGZhaWxlZDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBwcmludE1lc3NhZ2UobXNnSWQ6IHN0cmluZywgc2V0VmFsaWRhdGlvbkZhaWxkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBsZXQgbWVzc2FnZTogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKFwiXCIpO1xyXG4gICAgbGV0IGN0cmxUeXBlOiBNZ0NvbnRyb2xUeXBlO1xyXG5cclxuICAgIGlmIChtc2dJZCA9PT0gTXNnSW50ZXJmYWNlLkVEVF9FUlJfU1RSXzEpXHJcbiAgICB7XHJcbiAgICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3ZhbERldC5nZXRQSUMoKTtcclxuICAgICAgbGV0IHRva2VuOiBzdHJpbmcgPSBcIiVkXCI7XHJcbiAgICAgIGxldCBtZXNzYWdlU3RyaW5nOiBzdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhtc2dJZCk7XHJcbiAgICAgIG1lc3NhZ2VTdHJpbmcgPSBTdHJVdGlsLnJlcGxhY2VTdHJpbmdUb2tlbnMobWVzc2FnZVN0cmluZywgdG9rZW4sIDEsIHBpYy5nZXRXaG9sZXMoKS50b1N0cmluZygpKTtcclxuICAgICAgbWVzc2FnZVN0cmluZyA9IFN0clV0aWwucmVwbGFjZVN0cmluZ1Rva2VucyhtZXNzYWdlU3RyaW5nLCB0b2tlbiwgMSwgcGljLmdldERlYygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICBtZXNzYWdlLkFwcGVuZChtZXNzYWdlU3RyaW5nKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgbWVzc2FnZS5BcHBlbmQoRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcobXNnSWQpKTtcclxuICAgICAgaWYgKG1zZ0lkID09PSBNc2dJbnRlcmZhY2UuU1RSX1JOR19UWFQgJiYgdGhpcy5fdmFsRGV0LmdldFJhbmdlKCkgIT0gbnVsbClcclxuICAgICAgICBtZXNzYWdlLkFwcGVuZChTdHJVdGlsLm1ha2VQcmludGFibGVUb2tlbnModGhpcy5fdmFsRGV0LmdldFJhbmdlKCksIEhUTUxfMl9TVFIpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmFsRGV0LmdldENvbnRyb2woKSAhPSBudWxsKVxyXG4gICAge1xyXG4gICAgICBjdHJsVHlwZSA9IHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuVHlwZTtcclxuICAgICAgaWYgKGN0cmxUeXBlICE9PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9CVVRUT04gJiYgY3RybFR5cGUgIT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1JBRElPICYmICF0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmlzU2VsZWN0aW9uQ3RybCgpKVxyXG4gICAgICB7XHJcbiAgICAgICAgbGV0IG1zZ1N0cmluZzogc3RyaW5nID0gbWVzc2FnZS5Ub1N0cmluZygpO1xyXG4gICAgICAgIHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0Rm9ybSgpLmdldFRhc2soKS5Xcml0ZVRvTWVzc2FnZVBhbmUoU3RyVXRpbC5tYWtlUHJpbnRhYmxlMihtc2dTdHJpbmcpKTtcclxuICAgICAgICB0aGlzLl92YWxEZXQuZ2V0Q29udHJvbCgpLmdldEZvcm0oKS5FcnJvck9jY3VyZWQgPSAhTlN0cmluZy5Jc051bGxPckVtcHR5KG1zZ1N0cmluZyk7XHJcbiAgICAgICAgdGhpcy5fdmFsRGV0LkVycm9yTWVzc2FnZSA9IG1lc3NhZ2UuVG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNldFZhbGlkYXRpb25GYWlsZClcclxuICAgIC8vIGZyb20gdGhpcyBwb2ludCB0aGUgZm9jdXMgc2VuZCBiYWNrIHRvIGNvbnRyb2wgYW5kIHNldFZhbGlkYXRpb25GYWlsZWQodHJ1ZSkgY2FuIG5vdCBzZXQgaXQgdG8gdHJ1ZVxyXG4gICAgICB0aGlzLnNldFZhbGlkYXRpb25GYWlsZWQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Q2hhbmdlIGluc2lkZSAnbmV3dmFsdWUnIHN1YnN0cmluZyBvbiBwb3NpdGlvbiAnaW5kZXgnIHRvIHN0cmluZyAndG8nPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5ld3ZhbHVlXCI+dG8gY2hhbmdlIGluc2lkZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9cIj5zdHJpbmcgdG8gY2hhbmdlIGJ5IGhpbTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaW5kZXhcIj50aGUgc3Vic3RyaW5nIHRvIGNoYW5nZSBvbiB0aGUgcG9zaXRpb248L3BhcmFtPlxyXG4gIHByaXZhdGUgY2hhbmdlU3RyaW5nSW5zaWRlKHRvOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX25ld3ZhbHVlID0gdGhpcy5fbmV3dmFsdWUuc3Vic3RyKDAsIGluZGV4KSArIHRvICsgIHRoaXMuX25ld3ZhbHVlLnN1YnN0cihpbmRleCArIHRvLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQodmFsaWRhdGlvbkRldGFpbHM6IFZhbGlkYXRpb25EZXRhaWxzKTogdm9pZCB7XHJcbiAgICB0aGlzLl92YWxEZXQgPSB2YWxpZGF0aW9uRGV0YWlscztcclxuICAgIHRoaXMuX3ZhbERldC5zZXROdWxsKGZhbHNlKTtcclxuICAgIHRoaXMuX2lzUG0gPSBmYWxzZTtcclxuICAgIGxldCBwSUM6IFBJQyA9IHRoaXMuX3ZhbERldC5nZXRQSUMoKTtcclxuICAgIHRoaXMuX29sZHZhbHVlID0gdGhpcy5fdmFsRGV0LmdldE9sZFZhbHVlKCk7XHJcbiAgICB0aGlzLl9uZXd2YWx1ZSA9IHRoaXMuX3ZhbERldC5nZXREaXNwVmFsdWUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5fbmV3dmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgaWYgKHBJQyA9PSBudWxsICB8fCBwSUMuZ2V0QXR0cigpICE9IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSlcclxuICAgICAgICB0aGlzLl9uZXd2YWx1ZSA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX29sZHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX29sZHZhbHVlID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIShwSUMgPT09IG51bGwgfHwgcElDLmdldEF0dHIoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHBJQy5nZXRBdHRyKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpKSB7XHJcbiAgICAgIHRoaXMuX3BpY3R1cmUgPSBwSUMuZ2V0TWFzaygpO1xyXG4gICAgICB0aGlzLmhlYnJldyA9IHBJQy5pc0hlYnJldygpO1xyXG4gICAgICB0aGlzLl9waWN0dXJlID0gdGhpcy5fcGljdHVyZS5zdWJzdHIoMCwgcElDLmdldE1hc2tTaXplKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlJldHVybiBpbmRleCBvZiBNYXggbWVtYmVyIGluIGFycmF5PC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZmluZE1heChhcnJheTogbnVtYmVyW10pOiBudW1iZXIge1xyXG4gICAgbGV0IGluZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG1heDogbnVtYmVyID0gYXJyYXlbaW5kZXhdO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICBpZiAoYXJyYXlbaV0gPiBtYXgpXHJcbiAgICAgIHtcclxuICAgICAgICBtYXggPSBhcnJheVtpXTtcclxuICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcbiAgLy8vIDxzdW1tYXJ5PmlzIGNoZWNrZWQgY2hhciBEYXRhIFBvc2l0aW9uYWwgRGlyZWN0aXZlPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaXNEYXRhUG9zaXRpb25hbERpcmVjdGl2ZSh0b0NoZWNrOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBhc2NpaTogbnVtYmVyID0gdG9DaGVjay5jaGFyQ29kZUF0KDApO1xyXG4gICAgcmV0dXJuIChhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZWSB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX01NRCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19NTU1cclxuICAgICAgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfREQgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfREREIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0REREQgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfV1xyXG4gICAgICB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19XV1cgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSFlZWVlZIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0hMIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0hERCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZSlxyXG4gICAgICB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTEgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlkyIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0pZNCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19CQik7IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Y2hlY2sgaWYgTnVtZXJpYyBEYXRhIFBvc2l0aW9uYWwgRGlyZWN0aXZlIGV4aXN0czwvc3VtbWFyeT5cclxuICBwcml2YXRlIGlzRGF0ZVBvc2l0aW9uYWxOdW1lcmljRGlyZWN0aXZlKHRvQ2hlY2s6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFzY2lpOiBudW1iZXIgPSB0b0NoZWNrLmNoYXJDb2RlQXQoMCk7XHJcbiAgICByZXR1cm4gKGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX1lZIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX1lZWVkgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfTU1EIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0REXHJcbiAgICAgIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0RERCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19EREREIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX1cgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSFlZWVlZXHJcbiAgICAgIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0hMIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0hERCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZSiB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTFcclxuICAgICAgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlkyIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0pZNCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19CQik7IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+aXMgY2hlY2tlZCBjaGFyIE51bWVyaWMgUG9zaXRpb25hbCBEaXJlY3RpdmU8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBpc051bWVyaWNQb3NpdGlvbmFsRGlyZWN0aXZlKHRvQ2hlY2s6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFzY2lpOiBudW1iZXIgPSB0b0NoZWNrLmNoYXJDb2RlQXQoMCk7XHJcbiAgICByZXR1cm4gKGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX04pO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5pcyBjaGVja2VkIGNoYXIgTG9naWMgUG9zaXRpb25hbCBEaXJlY3RpdmU8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBpc0xvZ2ljUG9zaXRpb25hbERpcmVjdGl2ZSh0b0NoZWNrOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBhc2NpaTogbnVtYmVyID0gdG9DaGVjay5jaGFyQ29kZUF0KDApO1xyXG4gICAgcmV0dXJuIChhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19YKTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+RmluZCBpZiB0aGUgbGV0dGVyIGF0IGluZGV4IGlzIFBvc2l0aW9uYWwgRGF0ZSBEaXJlY3RpdmU8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY2hhclwiPnRvIGNoZWNrIGluIHBpY3R1cmU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiBQb3NpdGlvbmFsIERhdGUgRGlyZWN0aXZlOyBmYWxzZSBvdGhlcndpc2U8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpc1RpbWVQb3NpdGlvbmFsRGlyZWN0aXZlKHRvQ2hlY2s6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFzY2lpOiBudW1iZXIgPSB0b0NoZWNrLmNoYXJDb2RlQXQoMCk7XHJcbiAgICByZXR1cm4gKGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0hIIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX01NVCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19TUyB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19QTSB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19NUyk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmlzIGNoZWNrZWQgc3RyaW5nIFBvc2l0aW9uYWwgRGlyZWN0aXZlIG9mIGFueSB0eXBlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZ1bGwvcGFydFwiPm9mIHBpY3R1cmVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGluZGV4IG9mIGRpcmVjdGl2ZSBwb3NpdGlvbiBvciAtMSBpZiBub3QgZm91bmQ8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpbmRleE9mUG9zaXRpb25hbE5vbkRpcmVjdGl2ZShzdHI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgdG1wOiBzdHJpbmc7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgdG1wID0gc3RyW2ldO1xyXG4gICAgICBpZiAoRGlzcGxheUNvbnZlcnRvci5pc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZSh0bXApIHx8IHRoaXMuaXNEYXRhUG9zaXRpb25hbERpcmVjdGl2ZSh0bXApIHx8IHRoaXMuaXNOdW1lcmljUG9zaXRpb25hbERpcmVjdGl2ZSh0bXApXHJcbiAgICAgICAgfHwgdGhpcy5pc0xvZ2ljUG9zaXRpb25hbERpcmVjdGl2ZSh0bXApIHx8IHRoaXMuaXNUaW1lUG9zaXRpb25hbERpcmVjdGl2ZSh0bXApKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICByZXR1cm4gaTtcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gc2V0IHRoZSBcInZhbGlkYXRpb24gZmFpbGVkXCIgZmxhZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj52YWx1ZSB0byB1c2U8L3BhcmFtPlxyXG4gIHByaXZhdGUgc2V0VmFsaWRhdGlvbkZhaWxlZCh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl92YWxEZXQuVmFsaWRhdGlvbkZhaWxlZClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl92YWxEZXQuc2V0VmFsaWRhdGlvbkZhaWxlZCh2YWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDb3VudCBkaWdpdHMgaW4gc3RyaW5nIGJlZm9yZSBkZWxpbWV0ZXI8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaW5wdXRTdHJpbmdcIj4tIHN0cmluZyB0byBsb29rIGludG8gZm9yIGRlbGltZXRlcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2VhcmNoU3RhcnRcIj4tIGluaXRpYWwgaW5kZXggcG9zaXRpb24gZm9yIHNlYXJjaCBpbiBpbnB1dFN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1ldGVyXCI+d2UgYXJlIGxvb2tpbmcgZm9yPC9wYXJhbT5cclxuICBwcml2YXRlIGRpZ2l0c0JlZm9yZURlbGltZXRlcihpbnB1dFN0cmluZzogc3RyaW5nLCBzZWFyY2hTdGFydDogbnVtYmVyLCBkZWxpbWV0ZXI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgY291bnRlcjogbnVtYmVyID0gMDtcclxuICAgIGxldCBzZWFyY2hFbmRQb3M6IG51bWJlciA9IGlucHV0U3RyaW5nLmluZGV4T2YoZGVsaW1ldGVyLCBzZWFyY2hTdGFydCk7XHJcblxyXG4gICAgaWYgKHNlYXJjaEVuZFBvcyA8IDApXHJcbiAgICAgIHNlYXJjaEVuZFBvcyA9IGlucHV0U3RyaW5nLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBzZWFyY2hTdGFydDsgaSA8IHNlYXJjaEVuZFBvczsgaSsrKVxyXG4gICAgaWYgKE5DaGFyLklzRGlnaXQoaW5wdXRTdHJpbmdbaV0pKVxyXG4gICAgICBjb3VudGVyKys7XHJcblxyXG4gICAgcmV0dXJuIGNvdW50ZXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGJ5IEN0cmwrVSAoU2V0IHRvIE51bGwpLCBudWxsIGRpc3BsYXkgdmFsdWUgaXMgc2V0IHRvIGN0cmwuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIGZvbGxvd2luZyBjaGVja2luZyAsIGluIG9yZGVyIHRvIHNldCBmaWVsZCB0byBudWxsLjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj4tIGVudGVyZWQgdmFsdWUgdG8gdmFsdWUgdG8gY2hlY2s8L3BhcmFtPlxyXG4gIHByaXZhdGUgaXNOdWxsRGlzcGxheVZhbCgpOiBib29sZWFuIHtcclxuICAgIGxldCBpc051bGxEaXNwbGF5VmFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgZmllbGQ6IEd1aUZpZWxkQmFzZSA9IHRoaXMuX3ZhbERldC5nZXRDb250cm9sKCkuZ2V0RmllbGQoKTtcclxuXHJcbiAgICBpZiAoZmllbGQuTnVsbEFsbG93ZWQgJiYgZmllbGQuaGFzTnVsbERpc3BsYXlWYWx1ZSgpKVxyXG4gICAge1xyXG4gICAgICBsZXQgZGlzcERlZlZhbHVlOiBhbnkgPSBmaWVsZC5nZXROdWxsRGlzcGxheSgpO1xyXG4gICAgICBpZiAoZGlzcERlZlZhbHVlICE9PSBudWxsKVxyXG4gICAgICAgIGlzTnVsbERpc3BsYXlWYWwgPSAoZGlzcERlZlZhbHVlLnRvU3RyaW5nKCkgPT09IHRoaXMuX25ld3ZhbHVlKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGlzTnVsbERpc3BsYXlWYWwgPSAodGhpcy5fbmV3dmFsdWUgPT09IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc051bGxEaXNwbGF5VmFsO1xyXG4gIH1cclxufVxyXG4iXX0=