@magic-xpa/gui 4.1100.0-dev4110.253 → 4.1100.0-dev4110.256

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 (47) hide show
  1. package/esm2022/src/Commands.mjs +1 -1
  2. package/esm2022/src/Events.mjs +1 -1
  3. package/esm2022/src/EventsProcessor.mjs +1 -1
  4. package/esm2022/src/FocusManager.mjs +1 -1
  5. package/esm2022/src/Manager.mjs +1 -1
  6. package/esm2022/src/UIBridge.mjs +1 -1
  7. package/esm2022/src/gui/GuiMgControl.mjs +1 -1
  8. package/esm2022/src/gui/KeyboardItem.mjs +1 -1
  9. package/esm2022/src/gui/low/GuiCommand.mjs +1 -1
  10. package/esm2022/src/gui/low/GuiCommandQueue.mjs +1 -1
  11. package/esm2022/src/gui/low/GuiInteractive.mjs +1 -1
  12. package/esm2022/src/management/RuntimeContextBase.mjs +1 -1
  13. package/esm2022/src/management/data/BlobType.mjs +1 -1
  14. package/esm2022/src/management/data/DcValues.mjs +1 -1
  15. package/esm2022/src/management/data/DcValuesBuilderBase.mjs +1 -1
  16. package/esm2022/src/management/data/FieldDef.mjs +1 -1
  17. package/esm2022/src/management/data/FieldsTable.mjs +1 -1
  18. package/esm2022/src/management/data/GuiDataViewBase.mjs +1 -1
  19. package/esm2022/src/management/data/GuiFieldBase.mjs +1 -1
  20. package/esm2022/src/management/data/NUM_TYPE.mjs +1 -1
  21. package/esm2022/src/management/data/ObjectReferenceBase.mjs +1 -1
  22. package/esm2022/src/management/data/ObjectReferencesCollection.mjs +1 -1
  23. package/esm2022/src/management/data/RecordUtils.mjs +1 -1
  24. package/esm2022/src/management/data/VectorType.mjs +1 -1
  25. package/esm2022/src/management/data/VectorTypeBase.mjs +1 -1
  26. package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +1 -1
  27. package/esm2022/src/management/gui/ControlTable.mjs +1 -1
  28. package/esm2022/src/management/gui/DisplayConvertor.mjs +1 -1
  29. package/esm2022/src/management/gui/FieldValidator.mjs +1 -1
  30. package/esm2022/src/management/gui/HebrewDate.mjs +1 -1
  31. package/esm2022/src/management/gui/Helps.mjs +1 -1
  32. package/esm2022/src/management/gui/MgControlBase.mjs +1 -1
  33. package/esm2022/src/management/gui/MgFormBase.mjs +1 -1
  34. package/esm2022/src/management/gui/PIC.mjs +1 -1
  35. package/esm2022/src/management/gui/PropDefaults.mjs +1 -1
  36. package/esm2022/src/management/gui/PropTable.mjs +1 -1
  37. package/esm2022/src/management/gui/Property.mjs +1 -1
  38. package/esm2022/src/management/gui/ValidationDetails.mjs +1 -1
  39. package/esm2022/src/management/gui/ValidationDetailsBase.mjs +1 -1
  40. package/esm2022/src/management/gui/WrongFormatException.mjs +1 -1
  41. package/esm2022/src/management/tasks/GuiTaskBase.mjs +1 -1
  42. package/esm2022/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +1 -1
  43. package/esm2022/src/util/MemoryUtil.mjs +1 -1
  44. package/esm2022/src/util/ObjectReference.mjs +1 -1
  45. package/esm2022/src/util/UsernamePasswordCredentials.mjs +1 -1
  46. package/fesm2022/magic-xpa-gui.mjs.map +1 -1
  47. package/package.json +2 -2
@@ -1182,4 +1182,4 @@ export class PIC {
1182
1182
  return "{Picture: " + this._format + "}";
1183
1183
  }
1184
1184
  }
1185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUElDLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9QSUMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUXRELE1BQU0sT0FBTyxHQUFHO0lBSU4sT0FBTyxHQUFXLENBQUMsQ0FBQztJQUNwQixRQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUMsUUFBUSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQzlDLFFBQVEsR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBQ25ELFFBQVEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUM5QyxRQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUMsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixjQUFjLEdBQVcsQ0FBQyxDQUFDO0lBQzNCLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUN2QixPQUFPLEdBQWEsSUFBSSxDQUFDO0lBQ3pCLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFDeEIsUUFBUSxHQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLEtBQUssR0FBWSxLQUFLLENBQUM7SUFDdkIsV0FBVyxHQUFXLENBQUMsQ0FBQztJQUN4QixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFDdEIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixVQUFVLEdBQVcsS0FBSyxDQUFDO0lBSTNCLElBQUksR0FBYSxJQUFJLENBQUM7SUFDdEIsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLElBQUksR0FBVyxJQUFJLENBQUM7SUFDcEIsUUFBUSxHQUFXLENBQUMsQ0FBQztJQUNyQixLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBQ2xCLFFBQVEsR0FBVyxDQUFDLENBQUM7SUFDckIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixLQUFLLEdBQVksS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFDbkIsS0FBSyxHQUFXLElBQUksQ0FBQztJQVE3QixZQUFZLE1BQWMsRUFBRSxJQUFzQixFQUFFLE9BQWU7UUFDakUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGdCQUFnQixDQUFDLElBQUk7WUFDekMsSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUMzRSxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFeEIsQ0FBQztJQU1ELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENB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LENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbkQsTUFBTTtZQUVSLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN2QixJQUFJLFNBQVMsS0FBSyxRQUFRO29CQUN4QixHQUFHLEdBQUcsSUFBSSxDQUFDO3FCQUNSLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7b0JBQzdDLEdBQUcsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDOztvQkFFbEQsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckQsTUFBTTtZQUVSLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN2QixHQUFHLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtZQUVSO2dCQUNFLE1BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBS0QscUJBQXFCO1FBQ25CLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUdyQyxPQUFPLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDcEQsU0FBUyxFQUFFLENBQUM7UUFFZCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQzNDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1zZ0ludGVyZmFjZSwgUElDSW50ZXJmYWNlLCBTdG9yYWdlQXR0cmlidXRlLCBVdGlsSW1lSnBuLCBVdGlsU3RyQnl0ZU1vZGUgfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgRXZlbnRzIH0gZnJvbSAnLi4vLi4vRXZlbnRzJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25FeGNlcHRpb24sIEludDMyLCBOU3RyaW5nLCBTdHJpbmdCdWlsZGVyIH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQgeyBHdWlFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL0d1aUVudmlyb25tZW50JztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhlIGNsYXNzIGhhbmRsZXMgdGhlIHByb2Nlc3Mgb2YgY29udmVydGluZyBpbnRlcm5hbCBkYXRhIHRvIGRpc3BsYXllZCBkYXRhXHJcbi8vLyAgIGJ5IHVzaW5nIGEgc3BlY2lmaWMgZm9ybWF0LlxyXG4vLy8gICBUaGUgY2xhc3MgaW1wbGVtZW50cyB0aGUgUElDIHN0cnVjdHVyZSBvZiBNYWdpYywgYW5kIGFsbCBpdHMgcmVsYXRlZCBvcGVyYXRpb25zLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgUElDIHtcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIE9yaWdpbmFsIG1lbWJlcnMgb2YgdGhlIE1hZ2ljIFBJQyBzdHJ1Y3R1cmVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHByaXZhdGUgX21za0xlbjogbnVtYmVyID0gMDsgLy8gVGhlIG1hc2sgbGVuXHJcbiAgcHJpdmF0ZSBfbmVnUHJlZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgcHJpdmF0ZSBfbmVnU3VmZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgcHJpdmF0ZSBfcGljQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTtcclxuICBwcml2YXRlIF9wb3NQcmVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICBwcml2YXRlIF9wb3NTdWZmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICBwcml2YXRlIF9hdXRvU2tpcF86IGJvb2xlYW4gPSBmYWxzZTsgIC8vIEF1dG9za2lwID9cclxuICBwcml2YXRlIF9wYWRGaWxsOiBib29sZWFuID0gZmFsc2U7IC8vIFBhZCBmaWxsID9cclxuICBwcml2YXRlIF96ZXJvRmlsbDogYm9vbGVhbiA9IGZhbHNlOyAgLy8gWmVybyBmaWxsID9cclxuICBwcml2YXRlIF9jb21tYTogYm9vbGVhbiA9IGZhbHNlOyAvLyBEaXNwbGF5IG51bWJlcnMgd2l0aCBjb21tYXMgP1xyXG4gIHByaXZhdGUgX2RlY2ltYWxEaWdpdHM6IG51bWJlciA9IDA7IC8vIERlY2ltYWwgZGlnaXRzXHJcbiAgcHJpdmF0ZSBfZGVjUG9pbnRJc0ZpcnN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGVjaW1hbDogYm9vbGVhbiA9IGZhbHNlOyAvLyBEZWNpbWFscyA/XHJcbiAgcHJpdmF0ZSBfZW1iZWRlZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBFbWJlZGVkIGNoYXJhY3RlcnMgP1xyXG4gIHByaXZhdGUgX2Zvcm1hdElkeDogbnVtYmVyID0gMDsgLy8gQ3VycmVudCBjaGFyIHByb2Nlc3NlZCBpbiBmb3JtYXRfO1xyXG4gIHByaXZhdGUgX2Zvcm1hdDogc3RyaW5nW10gPSBudWxsOyAvLyBUaGUgZm9ybWF0IHByb2Nlc3NlZFxyXG4gIHByaXZhdGUgaGVicmV3OiBib29sZWFuID0gZmFsc2U7IC8vIEhlYnJldyA/XHJcbiAgcHJpdmF0ZSBfaW1lTW9kZTogbnVtYmVyID0gLTE7IC8vIEpQTjogSU1FIHN1cHBvcnRcclxuICBwcml2YXRlIF9sZWZ0OiBib29sZWFuID0gZmFsc2U7IC8vIExlZnQganVzdGlmaWVkID9cclxuICBwcml2YXRlIF9tYXNrTGVuZ3RoOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX21hc2tDaGFyczogbnVtYmVyID0gMDsgLy8gTWFzayBjaGFycyBjb3VudFxyXG4gIHByaXZhdGUgX21hc2tTaXplOiBudW1iZXIgPSAwOyAvLyBTaXplIG9mIHBpY3R1cmUgaS9vIG1hc2tcclxuICBwcml2YXRlIF9taXhlZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBNaXhlZCBsYW5ndWFnZSA/XHJcbiAgcHJpdmF0ZSBfZm9ybWF0RXhwOmJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEFkZGVkIHZhcmlhYmxlc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBfbXNrOiBzdHJpbmdbXSA9IG51bGw7IC8vIFRoZSBtYXNrIGZvciB0aGUgc3BlY2lmaWVkIHBpY3R1cmUgZm9ybWF0XHJcbiAgcHJpdmF0ZSBfbmVlZExlbmd0aDogYm9vbGVhbiA9IGZhbHNlOyAvLyBnZXQgbGVuZ3RoIG9mIHRoZSBwaWN0dXJlIGFmdGVyIHBhcnNpbmdcclxuICBwcml2YXRlIF9uZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBOZWdhdGl2ZSB2YWx1ZXMgYWxsb3dlZCA/XHJcbiAgcHJpdmF0ZSBfcGFkOiBzdHJpbmcgPSAnXFwwJzsgLy8gUGFkIGNoYXJhY3RlclxyXG4gIHByaXZhdGUgX3ByZWZMZW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc2l6ZTogbnVtYmVyID0gMDsgLy8gU2l6ZSBvZiBBbHBoYSBkYXRhICB3aXRob3V0IG1hc2sgY2hhcmFjdGVyc1xyXG4gIHByaXZhdGUgX3N1ZmZMZW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdGVybUZsYWc6IGJvb2xlYW4gPSBmYWxzZTsgLy8gYXJlIHRlcm1pbmF0b3JzIHNwZWNpZmllZCA/XHJcbiAgcHJpdmF0ZSBfdHJpbTogYm9vbGVhbiA9IGZhbHNlOyAvLyBUcmltID9cclxuICBwcml2YXRlIF93aG9sZTogbnVtYmVyID0gMDsgLy8gV2hvbGUgZGlnaXRzXHJcbiAgcHJpdmF0ZSBfemVybzogc3RyaW5nID0gJ1xcMCc7IC8vIFplcm8gY2hhcmFjdGVyXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGRzIGEgUElDIGNsYXNzIGZyb20gcGljdHVyZSBmb3JtYXQgYW5kIGF0dHJpYnV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj5UaGUgcGljdHVyZSBmb3JtYXQgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImF0dHJcIj5UaGUgZGF0YSBhdHRyaWJ1dGUgKE4vQS9EL1QvLi4uKTwvcGFyYW0+XHJcbiAgY29uc3RydWN0b3IocGljU3RyOiBzdHJpbmcsIGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGNvbXBJZHg6IG51bWJlcikge1xyXG4gICAgdGhpcy5fcGljQXR0ciA9IGF0dHI7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fFxyXG4gICAgICB0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIGlmIChwaWNTdHIudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyhcIlBJQy5QSUMgdGhlIHBpY3R1cmUgb2YgQkxPQiBtdXN0IGJlIGVtcHR5IHN0cmluZ1wiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZm9ybWF0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShwaWNTdHIpO1xyXG4gICAgdGhpcy5fZm9ybWF0SWR4ID0gMDtcclxuXHJcbiAgICB0aGlzLl9tc2tMZW4gPSB0aGlzLmdldE1hc2tMZW4oY29tcElkeCk7XHJcbiAgICB0aGlzLnByc19hbGwoY29tcElkeCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgaW5mb3JtYXRpb24gbWV0aG9kc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0hlYnJldygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhlYnJldztcclxuICB9XHJcblxyXG4gIGlzTWl4ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWl4ZWQ7XHJcbiAgfVxyXG5cclxuICBlbWJlZGVkQ2hhcnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW1iZWRlZDtcclxuICB9XHJcblxyXG4gIGlzTmVnYXRpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVnYXRpdmU7XHJcbiAgfVxyXG5cclxuICB3aXRoQ29tYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21tYTtcclxuICB9XHJcblxyXG4gIGlzTGVmdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9sZWZ0O1xyXG4gIH1cclxuXHJcbiAgcGFkRmlsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWRGaWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFkO1xyXG4gIH1cclxuXHJcbiAgemVyb0ZpbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5femVyb0ZpbGw7XHJcbiAgfVxyXG5cclxuICBnZXRaZXJvUGFkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5femVybztcclxuICB9XHJcblxyXG4gIGlzVHJpbWVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyaW07XHJcbiAgfVxyXG5cclxuICBhdXRvU2tpcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hdXRvU2tpcF87XHJcbiAgfVxyXG5cclxuICB3aXRoRGVjaW1hbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNpbWFsO1xyXG4gIH1cclxuXHJcbiAgd2l0aFRlcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVybUZsYWc7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrQ2hhcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXNrQ2hhcnM7XHJcbiAgfVxyXG5cclxuICBnZXRXaG9sZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl93aG9sZTtcclxuICB9XHJcblxyXG4gIGdldERlYygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlY2ltYWxEaWdpdHM7XHJcbiAgfVxyXG5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcclxuICB9XHJcblxyXG4gIGdldE1hc2tTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza1NpemU7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza0xlbmd0aDtcclxuICB9XHJcblxyXG4gIGRlY0luRmlyc3RQb3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjUG9pbnRJc0ZpcnN0O1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0RXhwKHZhbCA6Ym9vbGVhbikge1xyXG4gICAgdGhpcy5fZm9ybWF0RXhwID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgaXNGb3JtYXRFeHAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0RXhwO1xyXG4gIH1cclxuICBnZXRQb3NQcmVmXygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Bvc1ByZWYuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldFBvc1N1ZmZfKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcG9zU3VmZi5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmVnUHJlZl8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdQcmVmLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBnZXROZWdTdWZmXygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX25lZ1N1ZmYuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldE1hc2soKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyh0aGlzLl9tc2spO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnModGhpcy5fZm9ybWF0KTtcclxuICB9XHJcblxyXG4gIGdldEF0dHIoKTogU3RvcmFnZUF0dHJpYnV0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGljQXR0cjtcclxuICB9XHJcblxyXG5cclxuICBzZXRBdHRyKHNldDpTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9waWNBdHRyID09IHNldDtcclxuICB9XHJcblxyXG4gIGdldEltZU1vZGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pbWVNb2RlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhcnNlIHRoZSBwaWN0dXJlIGZvcm1hdCBieSB0aGUgYXR0cmlidXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHByc19hbGwoY29tcElkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX25lZWRMZW5ndGgpIHtcclxuICAgICAgdGhpcy5fbXNrID0gbmV3IEFycmF5PHN0cmluZz4odGhpcy5fbXNrTGVuKTtcclxuICAgICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0aGlzLl9tc2subGVuZ3RoOyArK19haSlcclxuICAgICAgICB0aGlzLl9tc2tbX2FpXSA9ICdcXDAnO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLl9waWNBdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdGhpcy5hbHBoYV9wcnMoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIHRoaXMubnVtX3BycygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgdGhpcy5kYXRlX3Bycyhjb21wSWR4KTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIHRoaXMudGltZV9wcnMoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHRoaXMuYm9vbF9wcnMoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAvLyBkbyBub3RoaW5nXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQYXJzZSBhbiBhbHBoYSBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhbHBoYV9wcnMoKTogdm9pZCB7XHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG4gICAgbGV0IGRydjogbnVtYmVyO1xyXG4gICAgbGV0IGNvdW50OiBudW1iZXI7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICdIJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5zZXRIZWJyZXcoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIHRoaXMuX2F1dG9Ta2lwXyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcjJzpcclxuICAgICAgICBjYXNlICdMJzpcclxuICAgICAgICBjYXNlICdVJzpcclxuICAgICAgICBjYXNlICdYJzpcclxuICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICAgICAgY2FzZSAnIyc6XHJcbiAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19OO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnTCc6XHJcbiAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19MO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnVSc6XHJcbiAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19VO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnWCc6XHJcbiAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19YO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGNvdW50KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIC8vIEpQTjogREJDUyBzdXBwb3J0XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIEpQTjogSU1FIHN1cHBvcnRcclxuICAgICAgICAgICAgbGV0IHVzZUltZUpwbjogYm9vbGVhbiA9IFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJDaHIgPT09ICdLJyAmJiB1c2VJbWVKcG4pIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5waWNfa2FuamkoKSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0TG9jYWxBczQwMFNldCgpKSB7XHJcbiAgICAgICAgICAgICAgZHJ2ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGN1cnJDaHIgPT09ICdKJylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSjtcclxuICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyQ2hyID09PSAnVCcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1Q7XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyckNociA9PT0gJ0cnKVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19HO1xyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJDaHIgPT09ICdTJylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfUztcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGRydiAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gSlBOOiBJTUUgc3VwcG9ydFxyXG4gICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIElNRSBtb2RlIGZyb20gQVMvNDAwIHBpY3R1cmVzIGlmIEthbmppIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faW1lTW9kZSA9PT0gLTEgJiYgdXNlSW1lSnBuKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChkcnYgPT09IFBJQ0ludGVyZmFjZS5QSUNfSiB8fCBkcnYgPT09IFBJQ0ludGVyZmFjZS5QSUNfRylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbWVNb2RlID0gVXRpbEltZUpwbi5JTUVfWkVOX0hJUkFHQU5BX1JPTUFOO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIChkcnYgPT09IFBJQ0ludGVyZmFjZS5QSUNfUylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbWVNb2RlID0gVXRpbEltZUpwbi5JTUVfRk9SQ0VfT0ZGO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGNvdW50KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjdXJyQ2hyKSkge1xyXG4gICAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWCwgY291bnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEluIGNhc2UgdGhhdCBubyBwaWN0dXJlIGlzIHNwZWNpZmllZCwgYXNzdW1lIGFsbCBpcyBYc1xyXG4gICAgaWYgKHRoaXMuX21hc2tTaXplID09PSAwKVxyXG4gICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1gsIHRoaXMuX21za0xlbik7XHJcblxyXG4gICAgLy8gQ29tcHV0ZSBtYXNrIHNpemUgd2l0aG91dCB0aGUgbWFzayBjaGFyYWN0ZXJzXHJcbiAgICB0aGlzLl9zaXplID0gdGhpcy5fbWFza1NpemU7XHJcbiAgICBpZiAoIXRoaXMuX2VtYmVkZWQpXHJcbiAgICAgIHRoaXMuX3NpemUgLT0gdGhpcy5fbWFza0NoYXJzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhcnNlIGEgbnVtZXJpYyBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBudW1fcHJzKCk6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG4gICAgbGV0IGNvdW50OiBudW1iZXI7XHJcbiAgICBsZXQgdG1wOiBudW1iZXI7XHJcbiAgICBsZXQgdG1wczogbnVtYmVyO1xyXG4gICAgbGV0IHRtcF9jOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGZpcnN0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5femVybyA9ICcgJy8qJyAnKi87XHJcbiAgICB0aGlzLl9wYWQgPSAnICcvKicgJyovO1xyXG4gICAgdGhpcy5fbmVnUHJlZi5BcHBlbmQoJy0nKS8qJy0nKi87XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuX2Zvcm1hdC5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICBpZiAodGhpcy5fZm9ybWF0W2ldID09PSAnKycgLyonKycqLyB8fCB0aGlzLl9mb3JtYXRbaV0gPT09ICctJy8qJy0nKi8pIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fZm9ybWF0W2ldID09PSAnXFxcXCcgLyonXFwnKi8gfHwgdGhpcy5fZm9ybWF0W2ldID09PSAnUCcvKidQJyovKSB7XHJcbiAgICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9mb3JtYXRbaV0gPT09ICdDJy8qJ0MnKi8pIHtcclxuICAgICAgICB0aGlzLl9jb21tYSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ04nOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9uZWdhdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQyc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2NvbW1hID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdMJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fbGVmdCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnUCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3BhZEZpbGwgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX3BhZCA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHgrK107XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3plcm9GaWxsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl96ZXJvID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCsrXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fYXV0b1NraXBfID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcuJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX25lZWRMZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX21hc2tMZW5ndGgrKztcclxuICAgICAgICAgIHRoaXMuX2RlY2ltYWwgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX21hc2tTaXplIDwgdGhpcy5fbXNrTGVuKVxyXG4gICAgICAgICAgICB0aGlzLl9tc2tbdGhpcy5fbWFza1NpemVdID0gIFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKTtcclxuICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAvLyAyNi8xMS85NyBTaGF5IFouIEJ1ZyAjNzcwNTI2IC0gTWFyayB0aGF0XHJcbiAgICAgICAgICAvLyBEZWNpbWFsIFBvaW50IGlzIGluIEZpcnN0IFBvc2l0aW9uOlxyXG4gICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgIGlmICh0aGlzLl9tYXNrU2l6ZSA9PT0gMClcclxuICAgICAgICAgICAgdGhpcy5fZGVjUG9pbnRJc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX21hc2tTaXplKys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnKyc6XHJcbiAgICAgICAgY2FzZSAnLSc6XHJcbiAgICAgICAgICB0aGlzLnBpa19zaWduKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjdXJyQ2hyKSB8fCBjdXJyQ2hyID09PSAnIycpIHtcclxuICAgICAgICAgICAgdG1wID0gdGhpcy5fZm9ybWF0SWR4O1xyXG4gICAgICAgICAgICBpZiAoY3VyckNociA9PT0gJyMnKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgY291bnQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0W3RtcF0gPT09ICcjJykge1xyXG4gICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdG1wcyA9IHRoaXMuX2Zvcm1hdElkeDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCA9IHRtcDtcclxuICAgICAgICAgICAgICAgIHRtcF9jID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggPSB0bXBzO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZmlyc3QgJiYgKHRtcF9jID4gMCB8fCBjb3VudCA+IDEpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAxKVxyXG4gICAgICAgICAgICAgICAgICB0bXBfYyA9IGNvdW50O1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIGNvbW1hcyBiZWZvciBwbGFjZXNcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21tYSAmJiAhdGhpcy5fZGVjaW1hbClcclxuICAgICAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19OLCBNYXRoLmZsb29yKCh0bXBfYyAtIDEpIC8gMykpO1xyXG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYWRkIGNvbW1hcyBiZWZvciBwbGFjZXNcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fY29tbWEgJiYgIXRoaXMuX2RlY2ltYWwpXHJcbiAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19OLCBNYXRoLmZsb29yKChjb3VudCAtIDEpIC8gMykpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RlY2ltYWwpXHJcbiAgICAgICAgICAgICAgdGhpcy5fZGVjaW1hbERpZ2l0cyArPSBjb3VudDtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRoaXMuX3dob2xlICs9IGNvdW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuLy8gU3RvcmUgdGhlIG1heGltYWwgbGVuZ3RoIG9mIHNpZ24gcHJlZml4IGFuZCBzdWZmaXggYmV0d2VlbiBuZWdhdGl2ZSBhbmQgcG9zaXRpdmVcclxuICAgIHRoaXMuX3ByZWZMZW4gPSB0aGlzLl9wb3NQcmVmLkxlbmd0aDtcclxuICAgIHRoaXMuX3N1ZmZMZW4gPSB0aGlzLl9wb3NTdWZmLkxlbmd0aDtcclxuICAgIGlmICh0aGlzLl9uZWdhdGl2ZSkge1xyXG4gICAgICBpZiAodGhpcy5fbmVnUHJlZi5MZW5ndGggPiB0aGlzLl9wcmVmTGVuKSB7XHJcbiAgICAgICAgdGhpcy5fcHJlZkxlbiA9IHRoaXMuX25lZ1ByZWYuTGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9uZWdTdWZmLkxlbmd0aCA+IHRoaXMuX3N1ZmZMZW4pIHtcclxuICAgICAgICB0aGlzLl9zdWZmTGVuID0gdGhpcy5fbmVnU3VmZi5MZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBmb3IgYSBmb3JtYXQgd2l0aG91dCBkaWdpdHNcclxuICAgIGlmICh0aGlzLl93aG9sZSA9PT0gMCAmJiB0aGlzLl9kZWNpbWFsRGlnaXRzID09PSAwKSB7XHJcbiAgICAgIGNvdW50ID0gUElDSW50ZXJmYWNlLlBJQ19NQVhfTVNLX0xFTiAtIHRoaXMuX3ByZWZMZW4gLSB0aGlzLl9zdWZmTGVuO1xyXG4gICAgICBpZiAodGhpcy5fbWFza1NpemUgPCBjb3VudCkge1xyXG4gICAgICAgIHRoaXMuX3dob2xlID0gY291bnQgLSB0aGlzLl9tYXNrU2l6ZTtcclxuICAgICAgICBpZiAodGhpcy5fY29tbWEpXHJcbiAgICAgICAgICB0aGlzLl93aG9sZSAtPSBNYXRoLmZsb29yKHRoaXMuX3dob2xlIC8gNCk7XHJcbiAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19OLCB0aGlzLl93aG9sZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgZXh0cmEgZm9yIHByZWYvc3VmZiBhbmQgY29tbWFzXHJcbiAgICBpZiAodGhpcy5fY29tbWEpIHtcclxuICAgICAgY291bnQgPSBNYXRoLmZsb29yKCh0aGlzLl93aG9sZSAtIDEpIC8gMyk7XHJcbiAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgY291bnQpO1xyXG4gICAgICAvLyByZW1vdmUgY29tbWFzIHBsYWNlc1xyXG4gICAgICB0aGlzLl9tYXNrU2l6ZSAtPSBjb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBpID0gdGhpcy5fcHJlZkxlbjtcclxuICAgIGlmIChpID4gMCAmJiB0aGlzLl9tc2sgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoKHRoaXMuX21hc2tTaXplICsgaSkgPD0gdGhpcy5fbXNrTGVuKSB7XHJcbiAgICAgICAgZm9yIChqID0gdGhpcy5fbWFza1NpemUgLSAxO1xyXG4gICAgICAgICAgICAgaiA+PSAwO1xyXG4gICAgICAgICAgICAgai0tKVxyXG4gICAgICAgICAgdGhpcy5fbXNrW2ogKyBpXSA9IHRoaXMuX21za1tqXTtcclxuICAgICAgICAvLyBtZW1zZXQgKHRoaXMtPm1zaywgUElDX04sIGkpOyAvLyBPcmlnaW5hbCBMaW5lXHJcbiAgICAgICAgZm9yIChqID0gMDtcclxuICAgICAgICAgICAgIGogPCBpO1xyXG4gICAgICAgICAgICAgaisrKVxyXG4gICAgICAgICAgaWYgKHRoaXMuX21zayAhPSBudWxsICYmIGogPCB0aGlzLl9tc2subGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9tc2tbal0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWFza1NpemUgKz0gaTtcclxuICAgIH1cclxuICAgIGkgPSB0aGlzLl9zdWZmTGVuO1xyXG4gICAgaWYgKGkgPiAwICYmIHRoaXMuX21zayAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLl9tYXNrU2l6ZSArIHRoaXMuX3N1ZmZMZW4gPD0gdGhpcy5fbXNrTGVuKVxyXG4gICAgICAvLyBtZW1zZXQgKCZNc2tbdGhpcy0+cGljLT5tYXNrX3NpemVdLCBQSUNfTiwgdGhpcy0+cGljLT5zdWZmX2xlbik7IC8vIE9yaWdpbmFsIExpbmVcclxuICAgICAgICBmb3IgKGogPSAwO1xyXG4gICAgICAgICAgICAgaiA8IHRoaXMuX3N1ZmZMZW47XHJcbiAgICAgICAgICAgICBqKyspXHJcbiAgICAgICAgICB0aGlzLl9tc2tbdGhpcy5fbWFza1NpemUgKyBqXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKTtcclxuICAgICAgdGhpcy5fbWFza1NpemUgKz0gaTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXRVbmZvcm1hdHRlZE51bWVyaWNQaWMgZnJvbSBjdXJyZW50IHBpY1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGdldFVuZm9ybWF0dGVkTnVtZXJpY1BpYygpOiBQSUMge1xyXG4gICAgbGV0IHBpY1N0ciA9ICcnO1xyXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKVxyXG4gICAgICBwaWNTdHIgPSB0aGlzLmlzTmVnYXRpdmUoKSA/ICdOJzogJyc7XHJcblxyXG4gICAgcGljU3RyICs9IHRoaXMuZ2V0V2hvbGVzKCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICBpZiAodGhpcy5nZXREZWMoKSA+IDApXHJcbiAgICAgIHBpY1N0ciArPSAgJy4nICsgdGhpcy5nZXREZWMoKS50b1N0cmluZygpO1xyXG4gICAgaWYgKHRoaXMuX3plcm9GaWxsKVxyXG4gICAgICBwaWNTdHIgKz0gJ1onO1xyXG4gICAgbGV0ICBuZXdQaWMgPSBuZXcgUElDIChwaWNTdHIsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgMCk7XHJcblxyXG4gICAgcmV0dXJuIG5ld1BpYztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQYXJzZSBhIGRhdGUgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZGF0ZV9wcnMoY29tcElkeDogbnVtYmVyKSB7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gT3JpZ2luYWwgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgb2NyOiBudW1iZXI7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlcjtcclxuICAgIGxldCBkcnY6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgU3dpdGNoQW5kRXhwYW5kRGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IFNXRXhwYW5kRGF0ZUNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gQWRkZWQgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcbiAgICBsZXQgaXNKcG5FcmFZZWFyOiBib29sZWFuID0gZmFsc2U7IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgIHRoaXMuX3plcm8gPSAnICc7XHJcbiAgICBvY3IgPSAwO1xyXG5cclxuICAgIGlmICh0aGlzLl9mb3JtYXQubGVuZ3RoID09PSAwIHx8IHRoaXMuX2Zvcm1hdFswXSA9PT0gJ1xcMCcpXHJcbiAgICAgIHRoaXMuX2Zvcm1hdCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoUElDLmdldERlZmF1bHREYXRlTWFzayhHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSkpO1xyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5fZm9ybWF0Lmxlbmd0aDsgaisrKVxyXG4gICAgICBpZiAodGhpcy5fZm9ybWF0W2pdID09PSAnSCcpXHJcbiAgICAgICAgdGhpcy5zZXRIZWJyZXcoKTtcclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3plcm9GaWxsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl96ZXJvID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCsrXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdUJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fdHJpbSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2F1dG9Ta2lwXyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnTCc6XHJcbiAgICAgICAgICBpZiAodGhpcy5oZWJyZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfSEwsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnWSc6XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgIGkgPSBjb3VudDtcclxuICAgICAgICAgIHN3aXRjaCAoY291bnQpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZWVk7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19IWVlZWVk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0hZWVlZWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkcnYgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnTSc6XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgIGlmIChjb3VudCA9PT0gMilcclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTUQ7XHJcbiAgICAgICAgICBlbHNlIGlmIChjb3VudCA+IDIpIHtcclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTU07XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDEwKVxyXG4gICAgICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZHJ2ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBjb3VudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdEJzpcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgc3dpdGNoIChjb3VudCkge1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldykge1xyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ERDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyogIGZhbGxzIHRocm91Z2ggKi9cclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0RERDtcclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0hERDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19EREREO1xyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRydiAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGNvdW50KTtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJyMnOlxyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgIGlmIChjb3VudCA9PT0gMikge1xyXG4gICAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgICBvY3IrKztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICBzd2l0Y2ggKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGVNb2RlKGNvbXBJZHgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdCJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0UnOlxyXG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9jcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfREQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9jcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1EO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfREQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ0onOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2NyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFTV0V4cGFuZERhdGVDaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGZvcm1hdF8gY29udGFpbnMgXCIjIyMjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgU3dpdGNoQW5kRXhwYW5kRGF0ZSA9IE5TdHJpbmcuRnJvbUNoYXJzKHRoaXMuX2Zvcm1hdCkuaW5kZXhPZihcIiMjIyNcIikgPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU1dFeHBhbmREYXRlQ2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoU3dpdGNoQW5kRXhwYW5kRGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19ZWVlZLCA0KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01NRDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0REO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZHJ2ICE9PSAwKVxyXG4gICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgMik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChjb3VudCA9PT0gNCkge1xyXG4gICAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgICBvY3IrKztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICBzd2l0Y2ggKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGVNb2RlKGNvbXBJZHgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdCJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0UnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvY3IgPT09IDMpXHJcbiAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdKJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgICAgICAgICBpZiAob2NyID09PSAxKVxyXG4gICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVlZWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTV0V4cGFuZERhdGVDaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBmb3JtYXRfIGNvbnRhaW5zIFwiIyMjI1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2hBbmRFeHBhbmREYXRlID0gIE5TdHJpbmcuRnJvbUNoYXJzKHRoaXMuX2Zvcm1hdCkuaW5kZXhPZihcIiMjIyNcIikgPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgIFNXRXhwYW5kRGF0ZUNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoU3dpdGNoQW5kRXhwYW5kRGF0ZSAmJiBvY3IgPT09IDMpXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX0RELCAyKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRydiAhPT0gMClcclxuICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIDQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAnVyc6XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgaSA9IGNvdW50O1xyXG4gICAgICAgICAgaWYgKGNvdW50ID09PSAxKVxyXG4gICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1c7XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSA1KVxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfV1dXO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICBlbHNlIGlmIChjb3VudCA+IDIgJiYgY291bnQgPD0gMTApXHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfV1dXO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgaSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnLyc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGUoKS5jaGFyQ29kZUF0KDApLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdTJzogLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG5cclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgICAgaSA9IGNvdW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAyICYmIGNvdW50ICE9PSA0ICYmIGNvdW50ICE9PSA2KVxyXG4gICAgICAgICAgICAgIGkgPSAwO1xyXG5cclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19CQjtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdKJzogLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG5cclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgICAgaSA9IGNvdW50O1xyXG4gICAgICAgICAgICBpc0pwbkVyYVllYXIgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChjb3VudCkge1xyXG4gICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSlkxO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSlkyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSlk0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgICAgICAgIGlzSnBuRXJhWWVhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fbmVlZExlbmd0aCAmJiBpc0pwbkVyYVllYXIpXHJcbi8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgIHtcclxuICAgICAgZm9yIChpID0gMDtcclxuICAgICAgICAgICBpIDwgdGhpcy5fbXNrLmxlbmd0aDtcclxuICAgICAgICAgICBpKyspIHtcclxuICAgICAgICBpZiAodGhpcy5fbXNrW2ldLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWVkpXHJcbiAgICAgICAgICB0aGlzLl9tc2tbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCBQSUNJbnRlcmZhY2UuUElDX1lKKTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9tc2tbaV0uY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZKVxyXG4gICAgICAgICAgdGhpcy5fbXNrW2ldID0gJ1knO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGFyc2UgYSBudW1lcmljIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHRpbWVfcHJzKCk6IHZvaWQge1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIE9yaWdpbmFsIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgZHJ2OiBudW1iZXI7XHJcbiAgICBsZXQgTm9Gb3JtYXQ6IHN0cmluZztcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBBZGRlZCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuXHJcbiAgICB0aGlzLl96ZXJvID0gJyAnO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBVc2UgYSBkZWZhdWx0IGZvcm1hdCwgaWYgb25lIGlzIG5vdCBzcGVjaWZpZWRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9mb3JtYXRbMF0uY2hhckNvZGVBdCgwKSA9PT0gMCkge1xyXG4gICAgICBOb0Zvcm1hdCA9IFwiSEg6TU06U1NcIjtcclxuICAgICAgaWYgKHRoaXMuX21za0xlbiA8IDgpXHJcbiAgICAgICAgTm9Gb3JtYXQgPSBOb0Zvcm1hdC5zdWJzdHIoMCwgdGhpcy5fbXNrTGVuKTsgLy8gTm9Gb3JtYXRbdGhpcy0+bXNrX2xlbl0gPSAwOyAvLyBPcmlnaW5hbCBMaW5lXHJcbiAgICAgIHRoaXMuX2Zvcm1hdCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoTm9Gb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuXHJcbiAgICAgIGxldCBtYXNrTGVuZ3RoOiBudW1iZXI7XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgIGNhc2UgJ00nOlxyXG4gICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgbWFza0xlbmd0aCA9IDI7XHJcbiAgICAgICAgICAvKiB3ZSBwYXJzZSAnSC9NL1MnIG9ubHkgaWYgaXQgaGFzIG9uZSBzaW1pbGFyIGNoYXJhY3RlciBhZnRlciBpdCAoaS5lLiAnSEgnLydNTScvJ1NTJykgKi9cclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggKyAxIDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCAmJiB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSA9PT0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCArIDFdKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ISDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlICdNJzpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1UO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19TUztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLk5VTExfQ0hBUjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBtYXNrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIG1hc2tMZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnbSc6XHJcbiAgICAgICAgICBtYXNrTGVuZ3RoID0gMztcclxuICAgICAgICAgIC8qIHdlIHBhcnNlICdtJyBvbmx5IGlmIGl0IGhhcyAyIHNpbWlsYXIgY2hhcmFjdGVycyBhZnRlciBpdCAoaS5lLiAnbW1tJykgKi9cclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggKyAyIDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAxXSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAxXSA9PT0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCArIDJdKSkge1xyXG4gICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01TO1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gbWFza0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBtYXNrTGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJzonOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaW1lKCkuY2hhckNvZGVBdCgwKSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3plcm9GaWxsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl96ZXJvID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCsrXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fYXV0b1NraXBfID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdQJzpcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMV0gPT09ICdNJylcclxuICAgICAgICAgIC8vIGNoYW5nZWQgZnJvbSBmb3JtYXRfWzFdIC0+IGZvcm1hdF9bZm9ybWF0SWR4XysxXVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gMjtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19QTSwgMik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgUGljdHVyZSBmb3IgdGhlIHZhcmlhYmxlIG9mIHRoZSAndHlwZScgd2l0aCAndmFsdWUnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj5vZiB0aGUgcGljdHVyZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWx1ZVwiPmlzIG5lZWRlZCB0byBiZSBldmFsdWF0ZWQgd2l0aCB0aGUgcGljdHVyZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBQSUN0dXJlIG9mIHRoZSBuZWVkZWQgJ3R5cGUnPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBzdGF0aWMgYnVpbGRQaWN0dXJlKHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHZhbDogc3RyaW5nLCBjb21wSWR4OiBudW1iZXIsIHVzZURlY2ltYWw6IGJvb2xlYW4pOiBQSUMge1xyXG4gICAgbGV0IHBpYzogUElDID0gbnVsbDtcclxuICAgIGxldCBtYXNrOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoMTApO1xyXG4gICAgbGV0IGRlY2ltYWxTZXBhcmF0b3I6IHN0cmluZztcclxuICAgIGxldCB0aG91c2FuZHM6IHN0cmluZztcclxuICAgIGxldCBjdXJyQ2hhcjogc3RyaW5nO1xyXG4gICAgbGV0IGNvdW50ZXI6IG51bWJlcjtcclxuICAgIGxldCBsZW5ndGg6IG51bWJlcjtcclxuICAgIGxldCBiZWZvcmVEZWM6IG51bWJlcjtcclxuICAgIGxldCBhZnRlckRlYzogbnVtYmVyO1xyXG4gICAgbGV0IGRlY2ltYWxEZWxpbUZvdW5kOiBib29sZWFuO1xyXG4gICAgbGV0IGlzVGhvdXNhbmRzRGVsaW06IGJvb2xlYW47XHJcbiAgICBsZXQgaXNOZWdhdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvciA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERlY2ltYWwoKTtcclxuICAgICAgICB0aG91c2FuZHMgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaG91c2FuZHMoKTtcclxuICAgICAgICBiZWZvcmVEZWMgPSBhZnRlckRlYyA9IDA7XHJcbiAgICAgICAgZGVjaW1hbERlbGltRm91bmQgPSBmYWxzZTtcclxuICAgICAgICBpc1Rob3VzYW5kc0RlbGltID0gZmFsc2U7XHJcbiAgICAgICAgaXNOZWdhdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbC5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICBiZWZvcmVEZWMgPSBhZnRlckRlYyA9IDE7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZW5ndGggPSB2YWwubGVuZ3RoO1xyXG4gICAgICAgICAgY291bnRlciA9IDA7XHJcblxyXG4gICAgICAgICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcclxuICAgICAgICAgICAgY3VyckNoYXIgPSB2YWxbY291bnRlcl07XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY3VyckNoYXIpIHtcclxuICAgICAgICAgICAgICBjYXNlICcrJzpcclxuICAgICAgICAgICAgICBjYXNlICctJzpcclxuICAgICAgICAgICAgICAgIGlzTmVnYXRpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZURlY2ltYWwgJiYgY3VyckNoYXIgPT09IGRlY2ltYWxTZXBhcmF0b3IpXHJcbiAgICAgICAgICAgICAgICAgIGRlY2ltYWxEZWxpbUZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJDaGFyID09PSB0aG91c2FuZHMpXHJcbiAgICAgICAgICAgICAgICAgIGlzVGhvdXNhbmRzRGVsaW0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjaW1hbERlbGltRm91bmQpXHJcbiAgICAgICAgICAgICAgICAgIGFmdGVyRGVjKys7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIGJlZm9yZURlYysrO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY291bnRlcisrO1xyXG4gICAgICAgICAgfSAvLyBlbmQgb2Ygd2hpbGUgZm9yIGxvb2tpbmcgaW4gdGhlIHZhbHVlXHJcblxyXG4gICAgICAgICAgbWFzay5BcHBlbmQoXCJcIiArIGJlZm9yZURlYyArIGRlY2ltYWxTZXBhcmF0b3IgKyBhZnRlckRlYyk7XHJcbiAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSlcclxuICAgICAgICAgICAgbWFzay5BcHBlbmQoJ04nKTtcclxuICAgICAgICAgIGlmIChpc1Rob3VzYW5kc0RlbGltKVxyXG4gICAgICAgICAgICBtYXNrLkFwcGVuZCgnQycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICBtYXNrLkFwcGVuZCh0aGlzLmdldERlZmF1bHREYXRlTWFzayhHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIG1hc2suQXBwZW5kKFwiSEhcIiArIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRpbWUoKSArIFwiTU1cIiArIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRpbWUoKSArIFwiU1NcIik7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgRXZlbnRzLldyaXRlRGV2VG9Mb2coXCJFdmVudC5idWlsZFBpY3R1cmUoKSB0aGVyZSBpcyBubyBQSUNUVVJFIGJ1aWxkaW5nIGZvciB0eXBlIDpcIiArIHR5cGUgK1xyXG4gICAgICAgICAgXCIgYW5kIHZhbHVlIDpcIiArIHZhbCk7XHJcbiAgICAgICAgcmV0dXJuIHBpYzsgLy8gbnVsbCwgdGhlIFBJQyBkaWRuJ3QgYnVpbGRcclxuICAgIH1cclxuXHJcbiAgICBwaWMgPSBuZXcgUElDKG1hc2suVG9TdHJpbmcoKSwgdHlwZSwgY29tcElkeCk7XHJcbiAgICByZXR1cm4gcGljO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgc2V0IEhlYnJldyB0byB0cnVlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0SGVicmV3KCk6IHZvaWQge1xyXG4gICAgLy8gRGVmZWN0IDExNjI1OC4gU2V0IGhlYnJldyBmbGFnIG9ubHkgZm9yIGhlYnJldyBtZ2NvbnN0LlxyXG4gICAgaWYgKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50Lkxhbmd1YWdlID09PSAnSCcpXHJcbiAgICAgIHRoaXMuaGVicmV3ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGdldCBkZWZhdWx0IG1hc2sgZm9yIERhdGUgdHlwZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFNb2RlXCI+LSBkYXRhIG1vZGUgKEosUyxCLEUsQSk8L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+IG1hc2sgb2YgZGVmYXVsdCBkYXRlPC9yZXR1cm5zPlxyXG4gIHByb3RlY3RlZCBzdGF0aWMgZ2V0RGVmYXVsdERhdGVNYXNrKGRhdGFNb2RlOiBzdHJpbmcpIHtcclxuICAgIGxldCBmcm10OiBzdHJpbmc7XHJcbiAgICBzd2l0Y2ggKGRhdGFNb2RlKSB7XHJcbiAgICAgIGNhc2UgJ0onOlxyXG4gICAgICBjYXNlICdTJzpcclxuICAgICAgICBmcm10ID0gXCIjIyMjLyMjLyMjXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdCJzpcclxuICAgICAgY2FzZSAnRSc6XHJcbiAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGZybXQgPSBcIiMjLyMjLyMjIyNcIjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBmcm10O1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgUGFyc2UgYSBudW1lcmljIHBpY3R1cmUgZm9ybWF0XHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBib29sX3BycygpOiB2b2lkIHtcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBPcmlnaW5hbCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGNvdW50OiBudW1iZXI7IC8vIENvdW50IG9mIGRpcmV2dGl2ZSBvciBtYXNrIGNoYXJhY3RlclxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEFkZGVkIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuc2V0SGVicmV3KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9hdXRvU2tpcF8gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlICdYJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19YLCBjb3VudCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY3VyckNocikpIHtcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1gsIGNvdW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gRmlsbCBpbiBhbiBlbXB0eSBmb3JtYXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAodGhpcy5fbWFza1NpemUgPT09IDApXHJcbiAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWCwgdGhpcy5fbXNrTGVuKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFBhcnNlIHRoZSBzaWduIHByZWZpeC9zdWZmaXggZnJvbSB0aGUgZm9ybWF0XHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwaWtfc2lnbigpOiB2b2lkIHtcclxuICAgIGxldCBwb3NTaWduOiBib29sZWFuO1xyXG4gICAgbGV0IHNpZ25TdHI6IFN0cmluZ0J1aWxkZXI7XHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG5cclxuICAgIHBvc1NpZ24gPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSA9PT0gJysnXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcblxyXG4gICAgaWYgKHBvc1NpZ24pXHJcbiAgICAgIHNpZ25TdHIgPSB0aGlzLl9wb3NQcmVmO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX25lZ1ByZWYuUmVtb3ZlKDAsIHRoaXMuX25lZ1ByZWYuTGVuZ3RoKTtcclxuICAgICAgc2lnblN0ciA9IHRoaXMuX25lZ1ByZWY7XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICc7JzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAnLCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGlmIChwb3NTaWduKVxyXG4gICAgICAgICAgICBzaWduU3RyID0gdGhpcy5fcG9zU3VmZjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgc2lnblN0ciA9IHRoaXMuX25lZ1N1ZmY7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgJ1xcXFwnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4ID49IHRoaXMuX2Zvcm1hdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHNpZ25TdHIuQXBwZW5kKGN1cnJDaHIpO1xyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgUGFyc2UgYSBudW1iZXIgd2hpY2ggaXMgYSBjb3VudGVyIG9mIHNwZWNpZmljIGNoYXIgaW4gdGhlIGZvcm1hdFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcGlrX2NvdW50KCk6IG51bWJlciB7XHJcbiAgICBsZXQgc3BlY2lhbFZhbE5ld1BvbGljeTogYm9vbGVhbiA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNwZWNpYWxWYWxOZXdQb2xpY3koKTtcclxuICAgIGxldCB2YWw6IG51bWJlcjtcclxuICAgIGxldCBpc0RpZ2l0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgdmFsID0gMDtcclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdCh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSkpIHtcclxuICAgICAgdmFsICo9IDEwO1xyXG4gICAgICBpc0RpZ2l0ID0gdHJ1ZTtcclxuICAgICAgdmFsICs9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdLmNoYXJDb2RlQXQoMCkgLSAnMCcuY2hhckNvZGVBdCgwKTtcclxuICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbCA+IDMyMDAwKVxyXG4gICAgICB2YWwgPSAzMjAwMDtcclxuICAgIGVsc2UgaWYgKHZhbCA8PSAwKSB7XHJcbiAgICAgIC8vIElmICBmbGFnIFNwZWNpYWxWYWxOZXdQb2xpY3kgaXMgc2V0LCB0aGVuIHBpY3R1cmUgaGF2aW5nIHdob2xlL2RlYyBhcyAwIGUuZy4gJzMuMCcgc2hvdWxkIHJldHVybiBhcyAwLlxyXG4gICAgICBpZiAoc3BlY2lhbFZhbE5ld1BvbGljeSAmJiBpc0RpZ2l0ICYmIHZhbCA9PT0gMClcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHZhbCA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbCA+IEludDMyLk1heFZhbHVlKVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLlNUUl9FUlJfTUFYX1ZBUl9TSVpFKSk7XHJcblxyXG4gICAgcmV0dXJuICh2YWwpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgRmlsbCBhIHNwZWNpZmljIG1hc2sgY2hhcmFjdGVyIGluIHRoZSBtYXNrIHN0cmluZ1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImRydlwiPiAgICBUaGUgbWFzayBjaGFyYWN0ZXIgdG8gZmlsbDwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiY291bnRcIj4gIE51bWJlciBvZiB0aW1lcyBmb3IgdGhlIG1hc2sgY2hhcmFjdGVyIHRvIGFwZWFyPC9wYXJhbT5cclxuICBwcml2YXRlIHBpa19kcnZfZmlsbChkcnY6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGxldCBNc2taOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMuX25lZWRMZW5ndGgpIHtcclxuICAgICAgdGhpcy5fbWFza0xlbmd0aCArPSBjb3VudDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIE1za1ogPSB0aGlzLl9tYXNrU2l6ZTtcclxuICAgIHRoaXMuX21hc2tTaXplICs9IGNvdW50O1xyXG5cclxuICAgIGlmIChNc2taICsgY291bnQgPiB0aGlzLl9tc2tMZW4pXHJcbiAgICAgIGNvdW50ID0gdGhpcy5fbXNrTGVuIC0gTXNrWjtcclxuXHJcbiAgICBpZiAoY291bnQgPiAwKSB7XHJcbiAgICAgIC8vIG1lbXNldCAoJnRoaXMtPm1za1t0aGlzLk1za1pdLCAoVWNoYXIpIGRydiwgY291bnQpOyAvLyBPcmlnaW5hbCBMaW5lXHJcbiAgICAgIGZvciAoaSA9IDA7XHJcbiAgICAgICAgICAgaSA8IGNvdW50O1xyXG4gICAgICAgICAgIGkrKylcclxuICAgICAgICB0aGlzLl9tc2tbTXNrWiArIGldID0gU3RyaW5nLmZyb21DaGFyQ29kZShkcnYpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBQYXJzZSBhIGdlbmVyYWwgbWFzayBjaGFyYWN0ZXJcclxuLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHBpa19tYXNrKCk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuICAgIGxldCBjb3VudDogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSA9PT0gJ1xcXFwnKVxyXG4gICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoY3VyckNoci5jaGFyQ29kZUF0KDApLCBjb3VudCk7XHJcbiAgICAgIHRoaXMuX21hc2tDaGFycyArPSBjb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIENvdW50IGNvbnRpbnVlcyBvY2N1cnJlbmNlcyBvZiBhIG1hc2sgY2hhcmFjdGVyIGluIHRoZSBmb3JtYXQgc3RyaW5nXHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwaWtfZHVwKCk6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IGR1cENvdW50ID0gMTtcclxuXHJcbiAgICBsZXQgYzogc3RyaW5nO1xyXG5cclxuICAgIGxldCB0bXBJZHggPSB0aGlzLl9mb3JtYXRJZHg7XHJcblxyXG4gICAgYyA9IHRoaXMuX2Zvcm1hdFt0bXBJZHhdO1xyXG4gICAgdG1wSWR4Kys7XHJcbiAgICB3aGlsZSAodG1wSWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCAmJiBjID09PSB0aGlzLl9mb3JtYXRbdG1wSWR4XSkge1xyXG4gICAgICBkdXBDb3VudCsrO1xyXG4gICAgICB0bXBJZHgrKztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZHVwQ291bnQ7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBzZXQgSU1FIG1vZGUgZGVwZW5kcyBvbiBLIHBpY3R1cmUgKEswIC0gSzkpXHJcbi8vLyAgIChKUE46IElNRSBzdXBwb3J0KVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcGljX2thbmppKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvdW50O1xyXG5cclxuICAgIGlmICh0aGlzLl9mb3JtYXRJZHggKyAxID49IHRoaXMuX2Zvcm1hdC5sZW5ndGgpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAxXSkpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09ICcwJykgIC8vIEswXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuX2ltZU1vZGUgPSBVdGlsSW1lSnBuLklNRV9GT1JDRV9PRkY7XHJcbiAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgaWYgKDEgPD0gY291bnQgJiYgY291bnQgPD0gOSkgLy8gSzEgLSBLOVxyXG4gICAgICAgIHRoaXMuX2ltZU1vZGUgPSBjb3VudDtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgRmluZCBsZW5ndGggb2YgdGhlIHBpY3R1cmUgYWZ0ZXIgcGFyc2luZyB0aGUgcGljdHVyZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+IGxlbmd0aCBvZiB0aGUgcGljdHVyZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldE1hc2tMZW4oY29tcElkeDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9uZWVkTGVuZ3RoID0gdHJ1ZTtcclxuICAgIHRoaXMuX21hc2tMZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fZm9ybWF0SWR4ID0gMDtcclxuXHJcbiAgICB0aGlzLnByc19hbGwoY29tcElkeCk7XHJcblxyXG4gICAgLy8gYWRkIHByZWZpeCBhbmQgc3VmZml4IGxlbmd0aCB0byB0aGUgbWFza1xyXG4gICAgaWYgKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyAmJiAodGhpcy5fcHJlZkxlbiA+IDAgfHwgdGhpcy5fc3VmZkxlbiA+IDApKVxyXG4gICAgICB0aGlzLl9tYXNrTGVuZ3RoICs9ICh0aGlzLl9wcmVmTGVuICsgdGhpcy5fc3VmZkxlbik7XHJcblxyXG4gICAgdGhpcy5fbmVlZExlbmd0aCA9IGZhbHNlO1xyXG4gICAgLy8gaW5pdCBmb3IgbmV4dCBydW5uaW5nIDpcclxuICAgIHRoaXMuX2Zvcm1hdElkeCA9IHRoaXMuX21hc2tDaGFycyA9IHRoaXMuX3dob2xlID0gdGhpcy5fZGVjaW1hbERpZ2l0cyA9IHRoaXMuX3NpemUgPSB0aGlzLl9tYXNrU2l6ZSA9IHRoaXMuX3ByZWZMZW4gPSB0aGlzLl9zdWZmTGVuID0gMDtcclxuICAgIHRoaXMuX3BhZCA9IHRoaXMuX3plcm8gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApO1xyXG4gICAgdGhpcy5oZWJyZXcgPSB0aGlzLl9taXhlZCA9IHRoaXMuX2VtYmVkZWQgPSB0aGlzLl9uZWdhdGl2ZSA9IHRoaXMuX2NvbW1hID0gdGhpcy5fbGVmdCA9IHRoaXMuX3BhZEZpbGwgPSB0aGlzLl96ZXJvRmlsbCA9IHRoaXMuX3RyaW0gPSB0aGlzLl9hdXRvU2tpcF8gPSB0aGlzLl9kZWNpbWFsID0gdGhpcy5fdGVybUZsYWcgPSB0aGlzLl9kZWNQb2ludElzRmlyc3QgPSBmYWxzZTtcclxuICAgIHRoaXMuX3Bvc1ByZWYuUmVtb3ZlKDAsIHRoaXMuX3Bvc1ByZWYuTGVuZ3RoKTtcclxuICAgIHRoaXMuX3Bvc1N1ZmYuUmVtb3ZlKDAsIHRoaXMuX3Bvc1N1ZmYuTGVuZ3RoKTtcclxuICAgIHRoaXMuX25lZ1ByZWYuUmVtb3ZlKDAsIHRoaXMuX25lZ1ByZWYuTGVuZ3RoKTtcclxuICAgIHRoaXMuX25lZ1N1ZmYuUmVtb3ZlKDAsIHRoaXMuX25lZ1N1ZmYuTGVuZ3RoKTtcclxuICAgIHJldHVybiB0aGlzLl9tYXNrTGVuZ3RoO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVtYmVkZWQgY2hhciBpbiB0aGUgbWFzayBpbiBhIGdpdnZlbiBwb3NpdGlvbi5cclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+IHRydWUgaWYgcGljIGlzIG1hc2s8L3JldHVybnM+XHJcbiAgcHVibGljIHBpY0lzTWFzayhwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHBvcyA8IDAgfHwgcG9zID49IHRoaXMuX21hc2tMZW5ndGgpXHJcbiAgICAgIHBvcyA9IDA7XHJcbiAgICByZXR1cm4gdGhpcy5fbXNrW3Bvc10uY2hhckNvZGVBdCgwKSA+IFBJQ0ludGVyZmFjZS5QSUNfTUFYX09QO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJzIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwibXNrUG9zXCI+PC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJidWZQb3NcIj48L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZlwiPjwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0RGlyZWN0aXZlTGVuKHBvczogbnVtYmVyKTogbnVtYmVyO1xyXG4gIGdldERpcmVjdGl2ZUxlbihtc2tQb3M6IG51bWJlciwgYnVmUG9zOiBudW1iZXIsIGJ1Zjogc3RyaW5nKTogbnVtYmVyO1xyXG4gIGdldERpcmVjdGl2ZUxlbihwb3NPck1za1BvczogbnVtYmVyLCBidWZQb3M/OiBudW1iZXIsIGJ1Zj86IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlyZWN0aXZlTGVuXzAocG9zT3JNc2tQb3MpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXREaXJlY3RpdmVMZW5fMShwb3NPck1za1BvcywgYnVmUG9zLCBidWYpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFycyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbnVtYmVyIG9mIGNoYXJzIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2U8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXREaXJlY3RpdmVMZW5fMChwb3M6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgYzogc3RyaW5nID0gdGhpcy5fbXNrW3Bvc107XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSBwb3M7XHJcbiAgICB3aGlsZSAobnVtIDwgdGhpcy5fbWFza1NpemUgJiYgYyA9PT0gdGhpcy5fbXNrW251bV0pIHtcclxuICAgICAgbnVtID0gbnVtICsgMTtcclxuICAgIH1cclxuICAgIHJldHVybiBudW0gLSBwb3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJzIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1za1Bvc1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJidWZQb3NcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnVmXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0RGlyZWN0aXZlTGVuXzEobXNrUG9zOiBudW1iZXIsIGJ1ZlBvczogbnVtYmVyLCBidWY6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgZHJ2OiBzdHJpbmcgPSB0aGlzLl9tc2tbbXNrUG9zXTtcclxuICAgIGxldCBjdXJyTXNrUG9zOiBudW1iZXIgPSBtc2tQb3M7XHJcbiAgICBsZXQgY3VyckJ1ZlBvczogbnVtYmVyID0gYnVmUG9zO1xyXG5cclxuICAgIC8vIHRpbGwgdGhlIGVuZCBvZiB0aGUgbWFzaywgaWYgbWFza1twb3NdIGhhcyBzYW1lIGRpcmVjdGl2ZSBhcyBvdXJzLCB0aGlzIGlzIHRoZSBzYW1lIHNlcXVlbmNlLlxyXG4gICAgd2hpbGUgKGN1cnJNc2tQb3MgPCB0aGlzLl9tYXNrU2l6ZSAmJiBkcnYgPT09IHRoaXMuX21za1tjdXJyTXNrUG9zXSkge1xyXG4gICAgICAvLyBJZ25vcmUgdGhlIGNoYW5nZSBvZiBzZXF1ZW5jZSBpZiBpdCBpcyBpbi1iZXR3ZWVuIGEgREJDUyBjaGFyLlxyXG4gICAgICAvLyBJZiB0aGUgY3VycmVudCBjaGFyIGlzIGEgRnVsbCBXaWR0aCBjaGFyLCB0aGVuIHRoZSBuZXh0IG1hc2sgYml0XHJcbiAgICAgIC8vIGlzIGFjdHVhbGx5IG5vdCB1c2VkLiBTbywgaWdub3JlIHRoYXQgYml0IGFuZCBtb3ZlIG9uLlxyXG4gICAgICBpZiAoY3VyckJ1ZlBvcyA8IGJ1Zi5sZW5ndGggJiYgVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiB0aGlzLmlzQXR0ckFscGhhT3JEYXRlKCkpIHtcclxuICAgICAgICBpZiAoIVV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChidWZbY3VyckJ1ZlBvcysrXSkpXHJcbiAgICAgICAgICBjdXJyTXNrUG9zKys7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJNc2tQb3MrKztcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXR1cm4gb25seSBob3cgbWFueSBjaGFycyB0byB0aGUgZW5kLCBpbmNsdWRpbmcgb3VyIHBvcy5cclxuICAgIHJldHVybiAoY3Vyck1za1BvcyAtIG1za1Bvcyk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiBjaGFyIGlzIHZhbGlkIGluIHRoZSBnaXZlbiBtYXNrIHBvc2l0aW9uXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiY2hhclRvVmFsaWRhdGVcIj5cclxuLy8vIDwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+b2YgZGlyZWN0aXZlIG1hc2sgdG8gY2hlY2tcclxuLy8vICAgVGhlIHJldHVybmVkIGNoYXIgbWlnaHQgYmUgZGlmZmVyZW50IHRoZW4gdGhlIGNoYXIgdGhhdCB3YXMgY2hlY2tlZC5cclxuLy8vICAgVGhlIHJlYXNvbiBpcyB0aGF0ICdVJyBhbmQgJ0wnIGRpcmVjdGl2ZSBtaWdodCBjaGFuZ2UgaXQsIGFuZCBpbiBudW1lcmljLFxyXG4vLy8gICBkZWNpbWFsIHNlcGFyYXRvciBhbmQgdGhvdXNhbmQgc2VwYXJhdG9yIG1pZ2h0IGJlIGNoYW5nZWQgYXMgd2VsbCB3aGlsZSB0eXBpbmcuXHJcbi8vLyA8L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+IDAgaWYgbm90IHZhbGlkIG9yIGEgY2hhciBpZiB2YWxpZC48L3JldHVybnM+XHJcbiAgcHVibGljIHZhbGlkYXRlQ2hhcihjaGFyVG9WYWxpZGF0ZTogc3RyaW5nLCBwb3M6IG51bWJlcikge1xyXG4gICAgbGV0IGNoYXJSZXR1cm5lZCA9IGNoYXJUb1ZhbGlkYXRlO1xyXG4gICAgaWYgKHBvcyA+PSB0aGlzLmdldE1hc2tTaXplKCkpXHJcbiAgICAgIHJldHVybiBjaGFyUmV0dXJuZWQ7XHJcblxyXG4gICAgLy8gd2UgbmVlZCB0byBza2lwIGFueSBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBlbWJlZGVkIGludG8gdGhlIHBpY3R1cmVcclxuICAgIHdoaWxlICh0aGlzLnBpY0lzTWFzayhwb3MpKVxyXG4gICAgICBwb3MrKztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX21za1twb3NdLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1U6XHJcbiAgICAgICAgY2hhclJldHVybmVkID0gY2hhclRvVmFsaWRhdGUudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19MOlxyXG4gICAgICAgIGNoYXJSZXR1cm5lZCA9IGNoYXJUb1ZhbGlkYXRlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKCFVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjaGFyVG9WYWxpZGF0ZSkpXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IFBJQ0ludGVyZmFjZS5OdW1EaXJlY3RpdmUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tc2tbcG9zXS5jaGFyQ29kZUF0KDApID09PSBQSUNJbnRlcmZhY2UuTnVtRGlyZWN0aXZlW2ldKSB7XHJcbiAgICAgICAgICAgICAgY2hhclJldHVybmVkID0gdGhpcy5pc1ZhbGlkSW5OdW0oY2hhclRvVmFsaWRhdGUpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hhclJldHVybmVkO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQ2hlY2tzIHdoZXRoZXIgYSBub24gZGlnaXQgY2hhcmFjdGVyIGlzIHZhbGlkIGluIGEgbnVtZXJpYyBtYXNrXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwibGV0dGVyOlwiPmEgY2hhcmFjdGVyIHRvIGJlIGNoZWNrZWQuPC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiAwIGlmIG5vdCB2YWxpZC4gY2hhciBpZiB2YWxpZC4gY2hhciBtaWdodCBiZSBkaWZmZXJlbnQgdGhlbiBsZXR0ZXIuPC9yZXR1cm5zPlxyXG4gIGlzVmFsaWRJbk51bShsZXR0ZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY2hhclJldCA9ICdcXDAnO1xyXG4gICAgbGV0IGRlY2ltYWxDaGFyOiBzdHJpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWNpbWFsKCk7XHJcblxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gICAgLyogIHJlcGxhY2UgJy4nIHdpdGggYSBkaWZmZXJlbnQgY2hhciBmb3IgbnVtZXJpYyBzZXBlcmF0b3Igb25seSBpZlxyXG4gICAgKiAgU3BlY2lhbE1vZGlmaWVkRGVjaW1hbFNlcGFyYXRvciA9IFkqL1xyXG4gICAgLy8gZm9yIG51bWVyaWMsIGlmICcuJyB3YXMgZW50ZXJlZCwgY2hhbmdlIGl0IHRvIHRoZSBlbnYgc2VwZXJhdG9yLlxyXG4gICAgLy8gIzkzMTc4NDogSWYgU3BlY2lhbE1vZGlmaWVkRGVjaW1hbFNlcGFyYXRvciA9IFkgdGhlbiByZXBsYWNlICcuJyBieSBkZWNpbWFsIHNlcGFyYXRvci5cclxuICAgIGlmIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5DYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcigpICYmIHRoaXMuaXNBdHRyTnVtZXJpYygpKVxyXG4gICAgICBpZiAobGV0dGVyID09PSAnLicpXHJcbiAgICAgICAgbGV0dGVyID0gZGVjaW1hbENoYXI7XHJcblxyXG4gICAgc3dpdGNoIChsZXR0ZXIpIHtcclxuICAgICAgY2FzZSAnICc6XHJcbiAgICAgIGNhc2UgJy0nOlxyXG4gICAgICBjYXNlICcqJzpcclxuICAgICAgY2FzZSAnKyc6XHJcbiAgICAgIGNhc2UgJy8nOlxyXG4gICAgICAgIGNoYXJSZXQgPSBsZXR0ZXI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIC8vIHRoZSBlbnYgZGVjaW1hbCBzZXBlcmF0b3IgYW5kIHRob3VzYW5kcyBzZXBlcmF0b3IgYXJlIGFsc28gdmFsaWRcclxuICAgICAgICBpZiAobGV0dGVyID09PSBkZWNpbWFsQ2hhciB8fCBsZXR0ZXIgPT09IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRob3VzYW5kcygpKVxyXG4gICAgICAgICAgY2hhclJldCA9IGxldHRlcjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2hhclJldDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbG9naWNhbFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJMb2dpY2FsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyBudW1lcmljXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0ck51bWVyaWMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIGFscGhhXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0ckFscGhhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgdW5pY29kZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJVbmljb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHBoYSBvciBkYXRlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0ckFscGhhT3JEYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIHRpbWUgb3IgZGF0ZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJEYXRlT3JUaW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUgfHwgdGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgYmxvYlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJCbG9iKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHxcclxuICAgICAgdGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUik7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgbWFzayBhdCBhIGdpdmVuIHBvc2l0aW9uIGlzIG51bWVyaWNcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc051bWVyaWMocG9zOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9tc2sgW3Bvc10gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBtYXNrIGlzIGFsbCBYXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQWxsWCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fbXNrWzBdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfWCkgJiYgdGhpcy5nZXREaXJlY3RpdmVMZW4oMCkgPT09IHRoaXMuX21hc2tTaXplKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlzIG1hc2sgYXQgcG9zaXRpb24gcG9zIGlzIHNhbWUgYXMgcGFyYW1ldGVyIG1hc2tQaWNcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcIm1hc2tQaWNcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc01hc2tQaWNFcShwb3M6IG51bWJlciwgbWFza1BpYzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbXNrW3Bvc10gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUobWFza1BpYyk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgaW5wdXQgY2hhciBpcyB2YWxpZCBmb3IgbG9jYWwgQVM0MDAgKHN5c3RlbSBpKSBwaWN0dXJlcy5cclxuLy8vICAgKERCQ1MgU3VwcG9ydClcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJjaGFyVG9WYWxpZGF0ZVwiPjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiZmlyc3RDaGFyXCI+PC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+IDAgaWYgbm90IHZhbGlkIG9yIGEgY2hhciBpZiB2YWxpZC48L3JldHVybnM+XHJcbiAgcHVibGljIGlzVmFsaWRDaGFyX2FzNDAwKGNoYXJUb1ZhbGlkYXRlOiBzdHJpbmcsIGZpcnN0Q2hhcjogc3RyaW5nLCBwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldCA9IHRydWU7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl9tc2tbcG9zXS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19KOlxyXG4gICAgICAvLyBvbmx5IGZ1bGwtd2lkdGggY2hhcmFjdGVycyBhcmUgYWxsb3dlZFxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfRzpcclxuICAgICAgICByZXQgPSAhVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfVCk6IC8vIG1peHR1cmUgb2YgZnVsbC13aWR0aCBhbmQgaGFsZi13aWR0aCBpcyBub3QgYWxsb3dlZFxyXG4gICAgICAgIGlmIChmaXJzdENoYXIgPT09ICdcXHgwMDAwJylcclxuICAgICAgICAgIHJldCA9IHRydWU7XHJcbiAgICAgICAgZWxzZSBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGZpcnN0Q2hhcikpXHJcbiAgICAgICAgICByZXQgPSBVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoY2hhclRvVmFsaWRhdGUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldCA9ICFVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoY2hhclRvVmFsaWRhdGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19TKTogLy8gb25seSBoYWxmLXdpZHRoIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWRcclxuICAgICAgICByZXQgPSBVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoY2hhclRvVmFsaWRhdGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICByZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlIGxlbmd0aFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIGdldE1pbmltdW1WYWx1ZUxlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbkxlbmd0aCA9IHRoaXMuZ2V0TWFza0xlbmd0aCgpO1xyXG5cclxuICAgIC8vIHRyYXZlcnNlIGZyb20gcmlnaHQgdGlsbCBhIHZhbGlkIG1hc2sgY2hhciBpcyBlbmNvdW50ZXJlZFxyXG4gICAgd2hpbGUgKG1pbkxlbmd0aCA+IDAgJiYgIXRoaXMucGljSXNNYXNrKG1pbkxlbmd0aCAtIDEpKVxyXG4gICAgICBtaW5MZW5ndGgtLTtcclxuXHJcbiAgICByZXR1cm4gbWluTGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJ7UGljdHVyZTogXCIgKyB0aGlzLl9mb3JtYXQgKyBcIn1cIjtcclxuICB9XHJcbn1cclxuIl19
1185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUElDLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9QSUMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUXRELE1BQU0sT0FBTyxHQUFHO0lBSU4sT0FBTyxHQUFXLENBQUMsQ0FBQztJQUNwQixRQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUMsUUFBUSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQzlDLFFBQVEsR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBQ25ELFFBQVEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUM5QyxRQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUMsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixjQUFjLEdBQVcsQ0FBQyxDQUFDO0lBQzNCLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUN2QixPQUFPLEdBQWEsSUFBSSxDQUFDO0lBQ3pCLE1BQU0sR0FBWSxLQUFL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YyxDQUFDLENBQUM7Z0JBQ25ELE1BQU07WUFFUixLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztnQkFDdkIsSUFBSSxTQUFTLEtBQUssUUFBUTtvQkFDeEIsR0FBRyxHQUFHLElBQUksQ0FBQztxQkFDUixJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO29CQUM3QyxHQUFHLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQzs7b0JBRWxELEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3JELE1BQU07WUFFUixLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztnQkFDdkIsR0FBRyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2xELE1BQU07WUFFUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFLRCxxQkFBcUI7UUFDbkIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBR3JDLE9BQU8sU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNwRCxTQUFTLEVBQUUsQ0FBQztRQUVkLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDM0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTXNnSW50ZXJmYWNlLCBQSUNJbnRlcmZhY2UsIFN0b3JhZ2VBdHRyaWJ1dGUsIFV0aWxJbWVKcG4sIFV0aWxTdHJCeXRlTW9kZSB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBFdmVudHMgfSBmcm9tICcuLi8uLi9FdmVudHMnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkV4Y2VwdGlvbiwgSW50MzIsIE5TdHJpbmcsIFN0cmluZ0J1aWxkZXIgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IEd1aUVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vR3VpRW52aXJvbm1lbnQnO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBUaGUgY2xhc3MgaGFuZGxlcyB0aGUgcHJvY2VzcyBvZiBjb252ZXJ0aW5nIGludGVybmFsIGRhdGEgdG8gZGlzcGxheWVkIGRhdGFcclxuLy8vICAgYnkgdXNpbmcgYSBzcGVjaWZpYyBmb3JtYXQuXHJcbi8vLyAgIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHRoZSBQSUMgc3RydWN0dXJlIG9mIE1hZ2ljLCBhbmQgYWxsIGl0cyByZWxhdGVkIG9wZXJhdGlvbnMuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vIEBkeW5hbWljXHJcbmV4cG9ydCBjbGFzcyBQSUMge1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gT3JpZ2luYWwgbWVtYmVycyBvZiB0aGUgTWFnaWMgUElDIHN0cnVjdHVyZVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBfbXNrTGVuOiBudW1iZXIgPSAwOyAvLyBUaGUgbWFzayBsZW5cclxuICBwcml2YXRlIF9uZWdQcmVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICBwcml2YXRlIF9uZWdTdWZmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICBwcml2YXRlIF9waWNBdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG4gIHByaXZhdGUgX3Bvc1ByZWY6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gIHByaXZhdGUgX3Bvc1N1ZmY6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gIHByaXZhdGUgX2F1dG9Ta2lwXzogYm9vbGVhbiA9IGZhbHNlOyAgLy8gQXV0b3NraXAgP1xyXG4gIHByaXZhdGUgX3BhZEZpbGw6IGJvb2xlYW4gPSBmYWxzZTsgLy8gUGFkIGZpbGwgP1xyXG4gIHByaXZhdGUgX3plcm9GaWxsOiBib29sZWFuID0gZmFsc2U7ICAvLyBaZXJvIGZpbGwgP1xyXG4gIHByaXZhdGUgX2NvbW1hOiBib29sZWFuID0gZmFsc2U7IC8vIERpc3BsYXkgbnVtYmVycyB3aXRoIGNvbW1hcyA/XHJcbiAgcHJpdmF0ZSBfZGVjaW1hbERpZ2l0czogbnVtYmVyID0gMDsgLy8gRGVjaW1hbCBkaWdpdHNcclxuICBwcml2YXRlIF9kZWNQb2ludElzRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9kZWNpbWFsOiBib29sZWFuID0gZmFsc2U7IC8vIERlY2ltYWxzID9cclxuICBwcml2YXRlIF9lbWJlZGVkOiBib29sZWFuID0gZmFsc2U7IC8vIEVtYmVkZWQgY2hhcmFjdGVycyA/XHJcbiAgcHJpdmF0ZSBfZm9ybWF0SWR4OiBudW1iZXIgPSAwOyAvLyBDdXJyZW50IGNoYXIgcHJvY2Vzc2VkIGluIGZvcm1hdF87XHJcbiAgcHJpdmF0ZSBfZm9ybWF0OiBzdHJpbmdbXSA9IG51bGw7IC8vIFRoZSBmb3JtYXQgcHJvY2Vzc2VkXHJcbiAgcHJpdmF0ZSBoZWJyZXc6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSGVicmV3ID9cclxuICBwcml2YXRlIF9pbWVNb2RlOiBudW1iZXIgPSAtMTsgLy8gSlBOOiBJTUUgc3VwcG9ydFxyXG4gIHByaXZhdGUgX2xlZnQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gTGVmdCBqdXN0aWZpZWQgP1xyXG4gIHByaXZhdGUgX21hc2tMZW5ndGg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfbWFza0NoYXJzOiBudW1iZXIgPSAwOyAvLyBNYXNrIGNoYXJzIGNvdW50XHJcbiAgcHJpdmF0ZSBfbWFza1NpemU6IG51bWJlciA9IDA7IC8vIFNpemUgb2YgcGljdHVyZSBpL28gbWFza1xyXG4gIHByaXZhdGUgX21peGVkOiBib29sZWFuID0gZmFsc2U7IC8vIE1peGVkIGxhbmd1YWdlID9cclxuICBwcml2YXRlIF9mb3JtYXRFeHA6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQWRkZWQgdmFyaWFibGVzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBwcml2YXRlIF9tc2s6IHN0cmluZ1tdID0gbnVsbDsgLy8gVGhlIG1hc2sgZm9yIHRoZSBzcGVjaWZpZWQgcGljdHVyZSBmb3JtYXRcclxuICBwcml2YXRlIF9uZWVkTGVuZ3RoOiBib29sZWFuID0gZmFsc2U7IC8vIGdldCBsZW5ndGggb2YgdGhlIHBpY3R1cmUgYWZ0ZXIgcGFyc2luZ1xyXG4gIHByaXZhdGUgX25lZ2F0aXZlOiBib29sZWFuID0gZmFsc2U7IC8vIE5lZ2F0aXZlIHZhbHVlcyBhbGxvd2VkID9cclxuICBwcml2YXRlIF9wYWQ6IHN0cmluZyA9ICdcXDAnOyAvLyBQYWQgY2hhcmFjdGVyXHJcbiAgcHJpdmF0ZSBfcHJlZkxlbjogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9zaXplOiBudW1iZXIgPSAwOyAvLyBTaXplIG9mIEFscGhhIGRhdGEgIHdpdGhvdXQgbWFzayBjaGFyYWN0ZXJzXHJcbiAgcHJpdmF0ZSBfc3VmZkxlbjogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF90ZXJtRmxhZzogYm9vbGVhbiA9IGZhbHNlOyAvLyBhcmUgdGVybWluYXRvcnMgc3BlY2lmaWVkID9cclxuICBwcml2YXRlIF90cmltOiBib29sZWFuID0gZmFsc2U7IC8vIFRyaW0gP1xyXG4gIHByaXZhdGUgX3dob2xlOiBudW1iZXIgPSAwOyAvLyBXaG9sZSBkaWdpdHNcclxuICBwcml2YXRlIF96ZXJvOiBzdHJpbmcgPSAnXFwwJzsgLy8gWmVybyBjaGFyYWN0ZXJcclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZHMgYSBQSUMgY2xhc3MgZnJvbSBwaWN0dXJlIGZvcm1hdCBhbmQgYXR0cmlidXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPlRoZSBwaWN0dXJlIGZvcm1hdCBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYXR0clwiPlRoZSBkYXRhIGF0dHJpYnV0ZSAoTi9BL0QvVC8uLi4pPC9wYXJhbT5cclxuICBjb25zdHJ1Y3RvcihwaWNTdHI6IHN0cmluZywgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgY29tcElkeDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9waWNBdHRyID0gYXR0cjtcclxuXHJcbiAgICBpZiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8XHJcbiAgICAgIHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgaWYgKHBpY1N0ci50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIEV2ZW50cy5Xcml0ZURldlRvTG9nKFwiUElDLlBJQyB0aGUgcGljdHVyZSBvZiBCTE9CIG11c3QgYmUgZW1wdHkgc3RyaW5nXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mb3JtYXQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KHBpY1N0cik7XHJcbiAgICB0aGlzLl9mb3JtYXRJZHggPSAwO1xyXG5cclxuICAgIHRoaXMuX21za0xlbiA9IHRoaXMuZ2V0TWFza0xlbihjb21wSWR4KTtcclxuICAgIHRoaXMucHJzX2FsbChjb21wSWR4KTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldCBpbmZvcm1hdGlvbiBtZXRob2RzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzSGVicmV3KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVicmV3O1xyXG4gIH1cclxuXHJcbiAgaXNNaXhlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9taXhlZDtcclxuICB9XHJcblxyXG4gIGVtYmVkZWRDaGFycygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9lbWJlZGVkO1xyXG4gIH1cclxuXHJcbiAgaXNOZWdhdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdhdGl2ZTtcclxuICB9XHJcblxyXG4gIHdpdGhDb21hKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbW1hO1xyXG4gIH1cclxuXHJcbiAgaXNMZWZ0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xlZnQ7XHJcbiAgfVxyXG5cclxuICBwYWRGaWxsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhZEZpbGw7XHJcbiAgfVxyXG5cclxuICBnZXRQYWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWQ7XHJcbiAgfVxyXG5cclxuICB6ZXJvRmlsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl96ZXJvRmlsbDtcclxuICB9XHJcblxyXG4gIGdldFplcm9QYWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl96ZXJvO1xyXG4gIH1cclxuXHJcbiAgaXNUcmltZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJpbTtcclxuICB9XHJcblxyXG4gIGF1dG9Ta2lwKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1dG9Ta2lwXztcclxuICB9XHJcblxyXG4gIHdpdGhEZWNpbWFsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlY2ltYWw7XHJcbiAgfVxyXG5cclxuICB3aXRoVGVybSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXJtRmxhZztcclxuICB9XHJcblxyXG4gIGdldE1hc2tDaGFycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21hc2tDaGFycztcclxuICB9XHJcblxyXG4gIGdldFdob2xlcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dob2xlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVjKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjaW1hbERpZ2l0cztcclxuICB9XHJcblxyXG4gIGdldFNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zaXplO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWFza1NpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXNrU2l6ZTtcclxuICB9XHJcblxyXG4gIGdldE1hc2tMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXNrTGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZGVjSW5GaXJzdFBvcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNQb2ludElzRmlyc3Q7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXRFeHAodmFsIDpib29sZWFuKSB7XHJcbiAgICB0aGlzLl9mb3JtYXRFeHAgPSB2YWw7XHJcbiAgfVxyXG5cclxuICBpc0Zvcm1hdEV4cCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtYXRFeHA7XHJcbiAgfVxyXG4gIGdldFBvc1ByZWZfKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcG9zUHJlZi5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zU3VmZl8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wb3NTdWZmLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBnZXROZWdQcmVmXygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX25lZ1ByZWYuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldE5lZ1N1ZmZfKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVnU3VmZi5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWFzaygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKHRoaXMuX21zayk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtYXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyh0aGlzLl9mb3JtYXQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXR0cigpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9waWNBdHRyO1xyXG4gIH1cclxuXHJcblxyXG4gIHNldEF0dHIoc2V0OlN0b3JhZ2VBdHRyaWJ1dGUpOiB2b2lkIHtcclxuICAgIHRoaXMuX3BpY0F0dHIgPT0gc2V0O1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1lTW9kZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ltZU1vZGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGFyc2UgdGhlIHBpY3R1cmUgZm9ybWF0IGJ5IHRoZSBhdHRyaWJ1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcHJzX2FsbChjb21wSWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fbmVlZExlbmd0aCkge1xyXG4gICAgICB0aGlzLl9tc2sgPSBuZXcgQXJyYXk8c3RyaW5nPih0aGlzLl9tc2tMZW4pO1xyXG4gICAgICBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IHRoaXMuX21zay5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICAgIHRoaXMuX21za1tfYWldID0gJ1xcMCc7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMuX3BpY0F0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICB0aGlzLmFscGhhX3BycygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgdGhpcy5udW1fcHJzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICB0aGlzLmRhdGVfcHJzKGNvbXBJZHgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgdGhpcy50aW1lX3BycygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgdGhpcy5ib29sX3BycygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIC8vIGRvIG5vdGhpbmdcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhcnNlIGFuIGFscGhhIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFscGhhX3BycygpOiB2b2lkIHtcclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcbiAgICBsZXQgZHJ2OiBudW1iZXI7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlcjtcclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLnNldEhlYnJldygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgdGhpcy5fYXV0b1NraXBfID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJyMnOlxyXG4gICAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgIGNhc2UgJ1UnOlxyXG4gICAgICAgIGNhc2UgJ1gnOlxyXG4gICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgICAgICBjYXNlICcjJzpcclxuICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX047XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdMJzpcclxuICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0w7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdVJzpcclxuICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1U7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdYJzpcclxuICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1g7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgY291bnQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSkgLy8gSlBOOiBEQkNTIHN1cHBvcnRcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gSlBOOiBJTUUgc3VwcG9ydFxyXG4gICAgICAgICAgICBsZXQgdXNlSW1lSnBuOiBib29sZWFuID0gVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpO1xyXG4gICAgICAgICAgICBpZiAoY3VyckNociA9PT0gJ0snICYmIHVzZUltZUpwbikge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnBpY19rYW5qaSgpKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRMb2NhbEFzNDAwU2V0KCkpIHtcclxuICAgICAgICAgICAgICBkcnYgPSAwO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoY3VyckNociA9PT0gJ0onKVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19KO1xyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJDaHIgPT09ICdUJylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfVDtcclxuICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyQ2hyID09PSAnRycpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0c7XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyckNociA9PT0gJ1MnKVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19TO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZHJ2ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBKUE46IElNRSBzdXBwb3J0XHJcbiAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgSU1FIG1vZGUgZnJvbSBBUy80MDAgcGljdHVyZXMgaWYgS2FuamkgcGFyYW1ldGVyIGlzbid0IHNwZWNpZmllZC5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbWVNb2RlID09PSAtMSAmJiB1c2VJbWVKcG4pIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRydiA9PT0gUElDSW50ZXJmYWNlLlBJQ19KIHx8IGRydiA9PT0gUElDSW50ZXJmYWNlLlBJQ19HKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ltZU1vZGUgPSBVdGlsSW1lSnBuLklNRV9aRU5fSElSQUdBTkFfUk9NQU47XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRydiA9PT0gUElDSW50ZXJmYWNlLlBJQ19TKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ltZU1vZGUgPSBVdGlsSW1lSnBuLklNRV9GT1JDRV9PRkY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgY291bnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGN1cnJDaHIpKSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19YLCBjb3VudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW4gY2FzZSB0aGF0IG5vIHBpY3R1cmUgaXMgc3BlY2lmaWVkLCBhc3N1bWUgYWxsIGlzIFhzXHJcbiAgICBpZiAodGhpcy5fbWFza1NpemUgPT09IDApXHJcbiAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWCwgdGhpcy5fbXNrTGVuKTtcclxuXHJcbiAgICAvLyBDb21wdXRlIG1hc2sgc2l6ZSB3aXRob3V0IHRoZSBtYXNrIGNoYXJhY3RlcnNcclxuICAgIHRoaXMuX3NpemUgPSB0aGlzLl9tYXNrU2l6ZTtcclxuICAgIGlmICghdGhpcy5fZW1iZWRlZClcclxuICAgICAgdGhpcy5fc2l6ZSAtPSB0aGlzLl9tYXNrQ2hhcnM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGFyc2UgYSBudW1lcmljIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG51bV9wcnMoKTogdm9pZCB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGo6IG51bWJlcjtcclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlcjtcclxuICAgIGxldCB0bXA6IG51bWJlcjtcclxuICAgIGxldCB0bXBzOiBudW1iZXI7XHJcbiAgICBsZXQgdG1wX2M6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZmlyc3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgICB0aGlzLl96ZXJvID0gJyAnLyonICcqLztcclxuICAgIHRoaXMuX3BhZCA9ICcgJy8qJyAnKi87XHJcbiAgICB0aGlzLl9uZWdQcmVmLkFwcGVuZCgnLScpLyonLScqLztcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5fZm9ybWF0Lmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGlmICh0aGlzLl9mb3JtYXRbaV0gPT09ICcrJyAvKicrJyovIHx8IHRoaXMuX2Zvcm1hdFtpXSA9PT0gJy0nLyonLScqLykge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9mb3JtYXRbaV0gPT09ICdcXFxcJyAvKidcXCcqLyB8fCB0aGlzLl9mb3JtYXRbaV0gPT09ICdQJy8qJ1AnKi8pIHtcclxuICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2Zvcm1hdFtpXSA9PT0gJ0MnLyonQycqLykge1xyXG4gICAgICAgIHRoaXMuX2NvbW1hID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnTic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX25lZ2F0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdDJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fY29tbWEgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9sZWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdQJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fcGFkRmlsbCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5fcGFkID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCsrXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5femVyb0ZpbGwgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX3plcm8gPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4KytdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9hdXRvU2tpcF8gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJy4nOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBpZiAodGhpcy5fbmVlZExlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5fbWFza0xlbmd0aCsrO1xyXG4gICAgICAgICAgdGhpcy5fZGVjaW1hbCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5fbWFza1NpemUgPCB0aGlzLl9tc2tMZW4pXHJcbiAgICAgICAgICAgIHRoaXMuX21za1t0aGlzLl9tYXNrU2l6ZV0gPSAgU3RyaW5nLmZyb21DaGFyQ29kZShQSUNJbnRlcmZhY2UuUElDX04pO1xyXG4gICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgIC8vIDI2LzExLzk3IFNoYXkgWi4gQnVnICM3NzA1MjYgLSBNYXJrIHRoYXRcclxuICAgICAgICAgIC8vIERlY2ltYWwgUG9pbnQgaXMgaW4gRmlyc3QgUG9zaXRpb246XHJcbiAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgaWYgKHRoaXMuX21hc2tTaXplID09PSAwKVxyXG4gICAgICAgICAgICB0aGlzLl9kZWNQb2ludElzRmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fbWFza1NpemUrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcrJzpcclxuICAgICAgICBjYXNlICctJzpcclxuICAgICAgICAgIHRoaXMucGlrX3NpZ24oKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGN1cnJDaHIpIHx8IGN1cnJDaHIgPT09ICcjJykge1xyXG4gICAgICAgICAgICB0bXAgPSB0aGlzLl9mb3JtYXRJZHg7XHJcbiAgICAgICAgICAgIGlmIChjdXJyQ2hyID09PSAnIycpXHJcbiAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19OLCBjb3VudCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRbdG1wXSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0bXBzID0gdGhpcy5fZm9ybWF0SWR4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ID0gdG1wO1xyXG4gICAgICAgICAgICAgICAgdG1wX2MgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCA9IHRtcHM7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChmaXJzdCAmJiAodG1wX2MgPiAwIHx8IGNvdW50ID4gMSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDEpXHJcbiAgICAgICAgICAgICAgICAgIHRtcF9jID0gY291bnQ7XHJcbiAgICAgICAgICAgICAgICAvLyBhZGQgY29tbWFzIGJlZm9yIHBsYWNlc1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbW1hICYmICF0aGlzLl9kZWNpbWFsKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX04sIE1hdGguZmxvb3IoKHRtcF9jIC0gMSkgLyAzKSk7XHJcbiAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhZGQgY29tbWFzIGJlZm9yIHBsYWNlc1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9jb21tYSAmJiAhdGhpcy5fZGVjaW1hbClcclxuICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX04sIE1hdGguZmxvb3IoKGNvdW50IC0gMSkgLyAzKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVjaW1hbClcclxuICAgICAgICAgICAgICB0aGlzLl9kZWNpbWFsRGlnaXRzICs9IGNvdW50O1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy5fd2hvbGUgKz0gY291bnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4vLyBTdG9yZSB0aGUgbWF4aW1hbCBsZW5ndGggb2Ygc2lnbiBwcmVmaXggYW5kIHN1ZmZpeCBiZXR3ZWVuIG5lZ2F0aXZlIGFuZCBwb3NpdGl2ZVxyXG4gICAgdGhpcy5fcHJlZkxlbiA9IHRoaXMuX3Bvc1ByZWYuTGVuZ3RoO1xyXG4gICAgdGhpcy5fc3VmZkxlbiA9IHRoaXMuX3Bvc1N1ZmYuTGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuX25lZ2F0aXZlKSB7XHJcbiAgICAgIGlmICh0aGlzLl9uZWdQcmVmLkxlbmd0aCA+IHRoaXMuX3ByZWZMZW4pIHtcclxuICAgICAgICB0aGlzLl9wcmVmTGVuID0gdGhpcy5fbmVnUHJlZi5MZW5ndGg7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX25lZ1N1ZmYuTGVuZ3RoID4gdGhpcy5fc3VmZkxlbikge1xyXG4gICAgICAgIHRoaXMuX3N1ZmZMZW4gPSB0aGlzLl9uZWdTdWZmLkxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGZvciBhIGZvcm1hdCB3aXRob3V0IGRpZ2l0c1xyXG4gICAgaWYgKHRoaXMuX3dob2xlID09PSAwICYmIHRoaXMuX2RlY2ltYWxEaWdpdHMgPT09IDApIHtcclxuICAgICAgY291bnQgPSBQSUNJbnRlcmZhY2UuUElDX01BWF9NU0tfTEVOIC0gdGhpcy5fcHJlZkxlbiAtIHRoaXMuX3N1ZmZMZW47XHJcbiAgICAgIGlmICh0aGlzLl9tYXNrU2l6ZSA8IGNvdW50KSB7XHJcbiAgICAgICAgdGhpcy5fd2hvbGUgPSBjb3VudCAtIHRoaXMuX21hc2tTaXplO1xyXG4gICAgICAgIGlmICh0aGlzLl9jb21tYSlcclxuICAgICAgICAgIHRoaXMuX3dob2xlIC09IE1hdGguZmxvb3IodGhpcy5fd2hvbGUgLyA0KTtcclxuICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX04sIHRoaXMuX3dob2xlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCBleHRyYSBmb3IgcHJlZi9zdWZmIGFuZCBjb21tYXNcclxuICAgIGlmICh0aGlzLl9jb21tYSkge1xyXG4gICAgICBjb3VudCA9IE1hdGguZmxvb3IoKHRoaXMuX3dob2xlIC0gMSkgLyAzKTtcclxuICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19OLCBjb3VudCk7XHJcbiAgICAgIC8vIHJlbW92ZSBjb21tYXMgcGxhY2VzXHJcbiAgICAgIHRoaXMuX21hc2tTaXplIC09IGNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIGkgPSB0aGlzLl9wcmVmTGVuO1xyXG4gICAgaWYgKGkgPiAwICYmIHRoaXMuX21zayAhPSBudWxsKSB7XHJcbiAgICAgIGlmICgodGhpcy5fbWFza1NpemUgKyBpKSA8PSB0aGlzLl9tc2tMZW4pIHtcclxuICAgICAgICBmb3IgKGogPSB0aGlzLl9tYXNrU2l6ZSAtIDE7XHJcbiAgICAgICAgICAgICBqID49IDA7XHJcbiAgICAgICAgICAgICBqLS0pXHJcbiAgICAgICAgICB0aGlzLl9tc2tbaiArIGldID0gdGhpcy5fbXNrW2pdO1xyXG4gICAgICAgIC8vIG1lbXNldCAodGhpcy0+bXNrLCBQSUNfTiwgaSk7IC8vIE9yaWdpbmFsIExpbmVcclxuICAgICAgICBmb3IgKGogPSAwO1xyXG4gICAgICAgICAgICAgaiA8IGk7XHJcbiAgICAgICAgICAgICBqKyspXHJcbiAgICAgICAgICBpZiAodGhpcy5fbXNrICE9IG51bGwgJiYgaiA8IHRoaXMuX21zay5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX21za1tqXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9tYXNrU2l6ZSArPSBpO1xyXG4gICAgfVxyXG4gICAgaSA9IHRoaXMuX3N1ZmZMZW47XHJcbiAgICBpZiAoaSA+IDAgJiYgdGhpcy5fbXNrICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuX21hc2tTaXplICsgdGhpcy5fc3VmZkxlbiA8PSB0aGlzLl9tc2tMZW4pXHJcbiAgICAgIC8vIG1lbXNldCAoJk1za1t0aGlzLT5waWMtPm1hc2tfc2l6ZV0sIFBJQ19OLCB0aGlzLT5waWMtPnN1ZmZfbGVuKTsgLy8gT3JpZ2luYWwgTGluZVxyXG4gICAgICAgIGZvciAoaiA9IDA7XHJcbiAgICAgICAgICAgICBqIDwgdGhpcy5fc3VmZkxlbjtcclxuICAgICAgICAgICAgIGorKylcclxuICAgICAgICAgIHRoaXMuX21za1t0aGlzLl9tYXNrU2l6ZSArIGpdID0gU3RyaW5nLmZyb21DaGFyQ29kZShQSUNJbnRlcmZhY2UuUElDX04pO1xyXG4gICAgICB0aGlzLl9tYXNrU2l6ZSArPSBpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldFVuZm9ybWF0dGVkTnVtZXJpY1BpYyBmcm9tIGN1cnJlbnQgcGljXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0VW5mb3JtYXR0ZWROdW1lcmljUGljKCk6IFBJQyB7XHJcbiAgICBsZXQgcGljU3RyID0gJyc7XHJcbiAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpXHJcbiAgICAgIHBpY1N0ciA9IHRoaXMuaXNOZWdhdGl2ZSgpID8gJ04nOiAnJztcclxuXHJcbiAgICBwaWNTdHIgKz0gdGhpcy5nZXRXaG9sZXMoKS50b1N0cmluZygpO1xyXG5cclxuICAgIGlmICh0aGlzLmdldERlYygpID4gMClcclxuICAgICAgcGljU3RyICs9ICAnLicgKyB0aGlzLmdldERlYygpLnRvU3RyaW5nKCk7XHJcbiAgICBpZiAodGhpcy5femVyb0ZpbGwpXHJcbiAgICAgIHBpY1N0ciArPSAnWic7XHJcbiAgICBsZXQgIG5ld1BpYyA9IG5ldyBQSUMgKHBpY1N0ciwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDLCAwKTtcclxuXHJcbiAgICByZXR1cm4gbmV3UGljO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhcnNlIGEgZGF0ZSBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBkYXRlX3Bycyhjb21wSWR4OiBudW1iZXIpIHtcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBPcmlnaW5hbCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBvY3I6IG51bWJlcjtcclxuICAgIGxldCBjb3VudDogbnVtYmVyO1xyXG4gICAgbGV0IGRydjogbnVtYmVyID0gMDtcclxuICAgIGxldCBTd2l0Y2hBbmRFeHBhbmREYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgU1dFeHBhbmREYXRlQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBBZGRlZCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuICAgIGxldCBpc0pwbkVyYVllYXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgdGhpcy5femVybyA9ICcgJztcclxuICAgIG9jciA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX2Zvcm1hdC5sZW5ndGggPT09IDAgfHwgdGhpcy5fZm9ybWF0WzBdID09PSAnXFwwJylcclxuICAgICAgdGhpcy5fZm9ybWF0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShQSUMuZ2V0RGVmYXVsdERhdGVNYXNrKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGVNb2RlKGNvbXBJZHgpKSk7XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLl9mb3JtYXQubGVuZ3RoOyBqKyspXHJcbiAgICAgIGlmICh0aGlzLl9mb3JtYXRbal0gPT09ICdIJylcclxuICAgICAgICB0aGlzLnNldEhlYnJldygpO1xyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5femVyb0ZpbGwgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX3plcm8gPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4KytdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1QnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl90cmltID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fYXV0b1NraXBfID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdMJzpcclxuICAgICAgICAgIGlmICh0aGlzLmhlYnJldykge1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19ITCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdZJzpcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgaSA9IGNvdW50O1xyXG4gICAgICAgICAgc3dpdGNoIChjb3VudCkge1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVlZWTtcclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0hZWVlZWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSFlZWVlZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRydiAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgaSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdNJzpcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgaWYgKGNvdW50ID09PSAyKVxyXG4gICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01NRDtcclxuICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID4gMikge1xyXG4gICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01NTTtcclxuICAgICAgICAgICAgaWYgKGNvdW50ID4gMTApXHJcbiAgICAgICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkcnYgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGNvdW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0QnOlxyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICBzd2l0Y2ggKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KSB7XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0REO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvKiAgZmFsbHMgdGhyb3VnaCAqL1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfREREO1xyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSEREO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0REREQ7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZHJ2ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgY291bnQpO1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnIyc6XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgaWYgKGNvdW50ID09PSAyKSB7XHJcbiAgICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICAgIG9jcisrO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgIHN3aXRjaCAoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0InOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnRSc6XHJcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2NyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ERDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01NRDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2NyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ERDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAnSic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdTJzpcclxuICAgICAgICAgICAgICAgICAgc3dpdGNoIChvY3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIVNXRXhwYW5kRGF0ZUNoZWNrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZm9ybWF0XyBjb250YWlucyBcIiMjIyNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2hBbmRFeHBhbmREYXRlID0gTlN0cmluZy5Gcm9tQ2hhcnModGhpcy5fZm9ybWF0KS5pbmRleE9mKFwiIyMjI1wiKSA+IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTV0V4cGFuZERhdGVDaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChTd2l0Y2hBbmRFeHBhbmREYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1lZWVksIDQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1EO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfREQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkcnYgIT09IDApXHJcbiAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCAyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID09PSA0KSB7XHJcbiAgICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICAgIG9jcisrO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgIHN3aXRjaCAoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0InOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnRSc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgICAgICAgICAgaWYgKG9jciA9PT0gMylcclxuICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZWVk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ0onOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvY3IgPT09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIVNXRXhwYW5kRGF0ZUNoZWNrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGZvcm1hdF8gY29udGFpbnMgXCIjIyMjXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaEFuZEV4cGFuZERhdGUgPSAgTlN0cmluZy5Gcm9tQ2hhcnModGhpcy5fZm9ybWF0KS5pbmRleE9mKFwiIyMjI1wiKSA+IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgU1dFeHBhbmREYXRlQ2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChTd2l0Y2hBbmRFeHBhbmREYXRlICYmIG9jciA9PT0gMylcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfREQsIDIpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZHJ2ICE9PSAwKVxyXG4gICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgNCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlICdXJzpcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICBpID0gY291bnQ7XHJcbiAgICAgICAgICBpZiAoY291bnQgPT09IDEpXHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfVztcclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IDUpXHJcbiAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19XV1c7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID4gMiAmJiBjb3VudCA8PSAxMClcclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19XV1c7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcvJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGF0ZSgpLmNoYXJDb2RlQXQoMCksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1MnOiAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcblxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgICBpID0gY291bnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoY291bnQgIT09IDIgJiYgY291bnQgIT09IDQgJiYgY291bnQgIT09IDYpXHJcbiAgICAgICAgICAgICAgaSA9IDA7XHJcblxyXG4gICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0JCO1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgaSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0onOiAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcblxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgICBpID0gY291bnQ7XHJcbiAgICAgICAgICAgIGlzSnBuRXJhWWVhciA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGNvdW50KSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19KWTE7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19KWTI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19KWTQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgICAgICAgaXNKcG5FcmFZZWFyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl9uZWVkTGVuZ3RoICYmIGlzSnBuRXJhWWVhcilcclxuLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAge1xyXG4gICAgICBmb3IgKGkgPSAwO1xyXG4gICAgICAgICAgIGkgPCB0aGlzLl9tc2subGVuZ3RoO1xyXG4gICAgICAgICAgIGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLl9tc2tbaV0uY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZWSlcclxuICAgICAgICAgIHRoaXMuX21za1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoIFBJQ0ludGVyZmFjZS5QSUNfWUopO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX21za1tpXS5jaGFyQ29kZUF0KDApID09PSBQSUNJbnRlcmZhY2UuUElDX1lZWVkpXHJcbiAgICAgICAgICB0aGlzLl9tc2tbaV0gPSAnWSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQYXJzZSBhIG51bWVyaWMgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgdGltZV9wcnMoKTogdm9pZCB7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gT3JpZ2luYWwgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBkcnY6IG51bWJlcjtcclxuICAgIGxldCBOb0Zvcm1hdDogc3RyaW5nO1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEFkZGVkIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG5cclxuICAgIHRoaXMuX3plcm8gPSAnICc7XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFVzZSBhIGRlZmF1bHQgZm9ybWF0LCBpZiBvbmUgaXMgbm90IHNwZWNpZmllZFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmICh0aGlzLl9mb3JtYXQubGVuZ3RoID09PSAwIHx8IHRoaXMuX2Zvcm1hdFswXS5jaGFyQ29kZUF0KDApID09PSAwKSB7XHJcbiAgICAgIE5vRm9ybWF0ID0gXCJISDpNTTpTU1wiO1xyXG4gICAgICBpZiAodGhpcy5fbXNrTGVuIDwgOClcclxuICAgICAgICBOb0Zvcm1hdCA9IE5vRm9ybWF0LnN1YnN0cigwLCB0aGlzLl9tc2tMZW4pOyAvLyBOb0Zvcm1hdFt0aGlzLT5tc2tfbGVuXSA9IDA7IC8vIE9yaWdpbmFsIExpbmVcclxuICAgICAgdGhpcy5fZm9ybWF0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShOb0Zvcm1hdCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG5cclxuICAgICAgbGV0IG1hc2tMZW5ndGg6IG51bWJlcjtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgY2FzZSAnTSc6XHJcbiAgICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgICBtYXNrTGVuZ3RoID0gMjtcclxuICAgICAgICAgIC8qIHdlIHBhcnNlICdIL00vUycgb25seSBpZiBpdCBoYXMgb25lIHNpbWlsYXIgY2hhcmFjdGVyIGFmdGVyIGl0IChpLmUuICdISCcvJ01NJy8nU1MnKSAqL1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdElkeCArIDEgPCB0aGlzLl9mb3JtYXQubGVuZ3RoICYmIHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdID09PSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMV0pIHtcclxuICAgICAgICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0hIO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgJ00nOlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTVQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1NTO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuTlVMTF9DSEFSO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IG1hc2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgbWFza0xlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdtJzpcclxuICAgICAgICAgIG1hc2tMZW5ndGggPSAzO1xyXG4gICAgICAgICAgLyogd2UgcGFyc2UgJ20nIG9ubHkgaWYgaXQgaGFzIDIgc2ltaWxhciBjaGFyYWN0ZXJzIGFmdGVyIGl0IChpLmUuICdtbW0nKSAqL1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdElkeCArIDIgPCB0aGlzLl9mb3JtYXQubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSA9PT0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCArIDFdICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCArIDFdID09PSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMl0pKSB7XHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTVM7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBtYXNrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIG1hc2tMZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnOic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRpbWUoKS5jaGFyQ29kZUF0KDApLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5femVyb0ZpbGwgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX3plcm8gPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4KytdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9hdXRvU2tpcF8gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1AnOlxyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAxXSA9PT0gJ00nKVxyXG4gICAgICAgICAgLy8gY2hhbmdlZCBmcm9tIGZvcm1hdF9bMV0gLT4gZm9ybWF0X1tmb3JtYXRJZHhfKzFdXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSAyO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1BNLCAyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBQaWN0dXJlIGZvciB0aGUgdmFyaWFibGUgb2YgdGhlICd0eXBlJyB3aXRoICd2YWx1ZSdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPm9mIHRoZSBwaWN0dXJlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbHVlXCI+aXMgbmVlZGVkIHRvIGJlIGV2YWx1YXRlZCB3aXRoIHRoZSBwaWN0dXJlPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFBJQ3R1cmUgb2YgdGhlIG5lZWRlZCAndHlwZSc8L3JldHVybnM+XHJcbiAgcHVibGljIHN0YXRpYyBidWlsZFBpY3R1cmUodHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdmFsOiBzdHJpbmcsIGNvbXBJZHg6IG51bWJlciwgdXNlRGVjaW1hbDogYm9vbGVhbik6IFBJQyB7XHJcbiAgICBsZXQgcGljOiBQSUMgPSBudWxsO1xyXG4gICAgbGV0IG1hc2s6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigxMCk7XHJcbiAgICBsZXQgZGVjaW1hbFNlcGFyYXRvcjogc3RyaW5nO1xyXG4gICAgbGV0IHRob3VzYW5kczogc3RyaW5nO1xyXG4gICAgbGV0IGN1cnJDaGFyOiBzdHJpbmc7XHJcbiAgICBsZXQgY291bnRlcjogbnVtYmVyO1xyXG4gICAgbGV0IGxlbmd0aDogbnVtYmVyO1xyXG4gICAgbGV0IGJlZm9yZURlYzogbnVtYmVyO1xyXG4gICAgbGV0IGFmdGVyRGVjOiBudW1iZXI7XHJcbiAgICBsZXQgZGVjaW1hbERlbGltRm91bmQ6IGJvb2xlYW47XHJcbiAgICBsZXQgaXNUaG91c2FuZHNEZWxpbTogYm9vbGVhbjtcclxuICAgIGxldCBpc05lZ2F0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGVjaW1hbCgpO1xyXG4gICAgICAgIHRob3VzYW5kcyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRob3VzYW5kcygpO1xyXG4gICAgICAgIGJlZm9yZURlYyA9IGFmdGVyRGVjID0gMDtcclxuICAgICAgICBkZWNpbWFsRGVsaW1Gb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgIGlzVGhvdXNhbmRzRGVsaW0gPSBmYWxzZTtcclxuICAgICAgICBpc05lZ2F0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgIGJlZm9yZURlYyA9IGFmdGVyRGVjID0gMTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxlbmd0aCA9IHZhbC5sZW5ndGg7XHJcbiAgICAgICAgICBjb3VudGVyID0gMDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICBjdXJyQ2hhciA9IHZhbFtjb3VudGVyXTtcclxuICAgICAgICAgICAgc3dpdGNoIChjdXJyQ2hhcikge1xyXG4gICAgICAgICAgICAgIGNhc2UgJysnOlxyXG4gICAgICAgICAgICAgIGNhc2UgJy0nOlxyXG4gICAgICAgICAgICAgICAgaXNOZWdhdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlRGVjaW1hbCAmJiBjdXJyQ2hhciA9PT0gZGVjaW1hbFNlcGFyYXRvcilcclxuICAgICAgICAgICAgICAgICAgZGVjaW1hbERlbGltRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyckNoYXIgPT09IHRob3VzYW5kcylcclxuICAgICAgICAgICAgICAgICAgaXNUaG91c2FuZHNEZWxpbSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNpbWFsRGVsaW1Gb3VuZClcclxuICAgICAgICAgICAgICAgICAgYWZ0ZXJEZWMrKztcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgYmVmb3JlRGVjKys7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb3VudGVyKys7XHJcbiAgICAgICAgICB9IC8vIGVuZCBvZiB3aGlsZSBmb3IgbG9va2luZyBpbiB0aGUgdmFsdWVcclxuXHJcbiAgICAgICAgICBtYXNrLkFwcGVuZChcIlwiICsgYmVmb3JlRGVjICsgZGVjaW1hbFNlcGFyYXRvciArIGFmdGVyRGVjKTtcclxuICAgICAgICAgIGlmIChpc05lZ2F0aXZlKVxyXG4gICAgICAgICAgICBtYXNrLkFwcGVuZCgnTicpO1xyXG4gICAgICAgICAgaWYgKGlzVGhvdXNhbmRzRGVsaW0pXHJcbiAgICAgICAgICAgIG1hc2suQXBwZW5kKCdDJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgIG1hc2suQXBwZW5kKHRoaXMuZ2V0RGVmYXVsdERhdGVNYXNrKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGVNb2RlKGNvbXBJZHgpKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgbWFzay5BcHBlbmQoXCJISFwiICsgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGltZSgpICsgXCJNTVwiICsgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGltZSgpICsgXCJTU1wiKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyhcIkV2ZW50LmJ1aWxkUGljdHVyZSgpIHRoZXJlIGlzIG5vIFBJQ1RVUkUgYnVpbGRpbmcgZm9yIHR5cGUgOlwiICsgdHlwZSArXHJcbiAgICAgICAgICBcIiBhbmQgdmFsdWUgOlwiICsgdmFsKTtcclxuICAgICAgICByZXR1cm4gcGljOyAvLyBudWxsLCB0aGUgUElDIGRpZG4ndCBidWlsZFxyXG4gICAgfVxyXG5cclxuICAgIHBpYyA9IG5ldyBQSUMobWFzay5Ub1N0cmluZygpLCB0eXBlLCBjb21wSWR4KTtcclxuICAgIHJldHVybiBwaWM7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBzZXQgSGVicmV3IHRvIHRydWVcclxuLy8vIDwvc3VtbWFyeT5cclxuICBzZXRIZWJyZXcoKTogdm9pZCB7XHJcbiAgICAvLyBEZWZlY3QgMTE2MjU4LiBTZXQgaGVicmV3IGZsYWcgb25seSBmb3IgaGVicmV3IG1nY29uc3QuXHJcbiAgICBpZiAoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuTGFuZ3VhZ2UgPT09ICdIJylcclxuICAgICAgdGhpcy5oZWJyZXcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZ2V0IGRlZmF1bHQgbWFzayBmb3IgRGF0ZSB0eXBlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YU1vZGVcIj4tIGRhdGEgbW9kZSAoSixTLEIsRSxBKTwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz4gbWFzayBvZiBkZWZhdWx0IGRhdGU8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIHN0YXRpYyBnZXREZWZhdWx0RGF0ZU1hc2soZGF0YU1vZGU6IHN0cmluZykge1xyXG4gICAgbGV0IGZybXQ6IHN0cmluZztcclxuICAgIHN3aXRjaCAoZGF0YU1vZGUpIHtcclxuICAgICAgY2FzZSAnSic6XHJcbiAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgIGZybXQgPSBcIiMjIyMvIyMvIyNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ0InOlxyXG4gICAgICBjYXNlICdFJzpcclxuICAgICAgY2FzZSAnQSc6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZnJtdCA9IFwiIyMvIyMvIyMjI1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZybXQ7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBQYXJzZSBhIG51bWVyaWMgcGljdHVyZSBmb3JtYXRcclxuLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGJvb2xfcHJzKCk6IHZvaWQge1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIE9yaWdpbmFsIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgY291bnQ6IG51bWJlcjsgLy8gQ291bnQgb2YgZGlyZXZ0aXZlIG9yIG1hc2sgY2hhcmFjdGVyXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gQWRkZWQgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICdIJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5zZXRIZWJyZXcoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2F1dG9Ta2lwXyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgJ1gnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1gsIGNvdW50KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjdXJyQ2hyKSkge1xyXG4gICAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWCwgY291bnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBGaWxsIGluIGFuIGVtcHR5IGZvcm1hdFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmICh0aGlzLl9tYXNrU2l6ZSA9PT0gMClcclxuICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19YLCB0aGlzLl9tc2tMZW4pO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgUGFyc2UgdGhlIHNpZ24gcHJlZml4L3N1ZmZpeCBmcm9tIHRoZSBmb3JtYXRcclxuLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHBpa19zaWduKCk6IHZvaWQge1xyXG4gICAgbGV0IHBvc1NpZ246IGJvb2xlYW47XHJcbiAgICBsZXQgc2lnblN0cjogU3RyaW5nQnVpbGRlcjtcclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcblxyXG4gICAgcG9zU2lnbiA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdID09PSAnKydcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuXHJcbiAgICBpZiAocG9zU2lnbilcclxuICAgICAgc2lnblN0ciA9IHRoaXMuX3Bvc1ByZWY7XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fbmVnUHJlZi5SZW1vdmUoMCwgdGhpcy5fbmVnUHJlZi5MZW5ndGgpO1xyXG4gICAgICBzaWduU3RyID0gdGhpcy5fbmVnUHJlZjtcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJzsnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG5cclxuICAgICAgICBjYXNlICcsJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgaWYgKHBvc1NpZ24pXHJcbiAgICAgICAgICAgIHNpZ25TdHIgPSB0aGlzLl9wb3NTdWZmO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzaWduU3RyID0gdGhpcy5fbmVnU3VmZjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAnXFxcXCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPj0gdGhpcy5fZm9ybWF0Lmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgc2lnblN0ci5BcHBlbmQoY3VyckNocik7XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBQYXJzZSBhIG51bWJlciB3aGljaCBpcyBhIGNvdW50ZXIgb2Ygc3BlY2lmaWMgY2hhciBpbiB0aGUgZm9ybWF0XHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwaWtfY291bnQoKTogbnVtYmVyIHtcclxuICAgIGxldCBzcGVjaWFsVmFsTmV3UG9saWN5OiBib29sZWFuID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U3BlY2lhbFZhbE5ld1BvbGljeSgpO1xyXG4gICAgbGV0IHZhbDogbnVtYmVyO1xyXG4gICAgbGV0IGlzRGlnaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICB2YWwgPSAwO1xyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoICYmIFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdKSkge1xyXG4gICAgICB2YWwgKj0gMTA7XHJcbiAgICAgIGlzRGlnaXQgPSB0cnVlO1xyXG4gICAgICB2YWwgKz0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0uY2hhckNvZGVBdCgwKSAtICcwJy5jaGFyQ29kZUF0KDApO1xyXG4gICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsID4gMzIwMDApXHJcbiAgICAgIHZhbCA9IDMyMDAwO1xyXG4gICAgZWxzZSBpZiAodmFsIDw9IDApIHtcclxuICAgICAgLy8gSWYgIGZsYWcgU3BlY2lhbFZhbE5ld1BvbGljeSBpcyBzZXQsIHRoZW4gcGljdHVyZSBoYXZpbmcgd2hvbGUvZGVjIGFzIDAgZS5nLiAnMy4wJyBzaG91bGQgcmV0dXJuIGFzIDAuXHJcbiAgICAgIGlmIChzcGVjaWFsVmFsTmV3UG9saWN5ICYmIGlzRGlnaXQgJiYgdmFsID09PSAwKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdmFsID0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsID4gSW50MzIuTWF4VmFsdWUpXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuU1RSX0VSUl9NQVhfVkFSX1NJWkUpKTtcclxuXHJcbiAgICByZXR1cm4gKHZhbCk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBGaWxsIGEgc3BlY2lmaWMgbWFzayBjaGFyYWN0ZXIgaW4gdGhlIG1hc2sgc3RyaW5nXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiZHJ2XCI+ICAgIFRoZSBtYXNrIGNoYXJhY3RlciB0byBmaWxsPC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJjb3VudFwiPiAgTnVtYmVyIG9mIHRpbWVzIGZvciB0aGUgbWFzayBjaGFyYWN0ZXIgdG8gYXBlYXI8L3BhcmFtPlxyXG4gIHByaXZhdGUgcGlrX2Rydl9maWxsKGRydjogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogdm9pZCB7XHJcblxyXG4gICAgbGV0IE1za1o6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5fbmVlZExlbmd0aCkge1xyXG4gICAgICB0aGlzLl9tYXNrTGVuZ3RoICs9IGNvdW50O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgTXNrWiA9IHRoaXMuX21hc2tTaXplO1xyXG4gICAgdGhpcy5fbWFza1NpemUgKz0gY291bnQ7XHJcblxyXG4gICAgaWYgKE1za1ogKyBjb3VudCA+IHRoaXMuX21za0xlbilcclxuICAgICAgY291bnQgPSB0aGlzLl9tc2tMZW4gLSBNc2taO1xyXG5cclxuICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgLy8gbWVtc2V0ICgmdGhpcy0+bXNrW3RoaXMuTXNrWl0sIChVY2hhcikgZHJ2LCBjb3VudCk7IC8vIE9yaWdpbmFsIExpbmVcclxuICAgICAgZm9yIChpID0gMDtcclxuICAgICAgICAgICBpIDwgY291bnQ7XHJcbiAgICAgICAgICAgaSsrKVxyXG4gICAgICAgIHRoaXMuX21za1tNc2taICsgaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGRydik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFBhcnNlIGEgZ2VuZXJhbCBtYXNrIGNoYXJhY3RlclxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcGlrX21hc2soKTogdm9pZCB7XHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG4gICAgbGV0IGNvdW50OiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdID09PSAnXFxcXCcpXHJcbiAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgaWYgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICB0aGlzLnBpa19kcnZfZmlsbChjdXJyQ2hyLmNoYXJDb2RlQXQoMCksIGNvdW50KTtcclxuICAgICAgdGhpcy5fbWFza0NoYXJzICs9IGNvdW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQ291bnQgY29udGludWVzIG9jY3VycmVuY2VzIG9mIGEgbWFzayBjaGFyYWN0ZXIgaW4gdGhlIGZvcm1hdCBzdHJpbmdcclxuLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHBpa19kdXAoKTogbnVtYmVyIHtcclxuXHJcbiAgICBsZXQgZHVwQ291bnQgPSAxO1xyXG5cclxuICAgIGxldCBjOiBzdHJpbmc7XHJcblxyXG4gICAgbGV0IHRtcElkeCA9IHRoaXMuX2Zvcm1hdElkeDtcclxuXHJcbiAgICBjID0gdGhpcy5fZm9ybWF0W3RtcElkeF07XHJcbiAgICB0bXBJZHgrKztcclxuICAgIHdoaWxlICh0bXBJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoICYmIGMgPT09IHRoaXMuX2Zvcm1hdFt0bXBJZHhdKSB7XHJcbiAgICAgIGR1cENvdW50Kys7XHJcbiAgICAgIHRtcElkeCsrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkdXBDb3VudDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHNldCBJTUUgbW9kZSBkZXBlbmRzIG9uIEsgcGljdHVyZSAoSzAgLSBLOSlcclxuLy8vICAgKEpQTjogSU1FIHN1cHBvcnQpXHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwaWNfa2FuamkoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY291bnQ7XHJcblxyXG4gICAgaWYgKHRoaXMuX2Zvcm1hdElkeCArIDEgPj0gdGhpcy5fZm9ybWF0Lmxlbmd0aClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmICghVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCArIDFdKSlcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG5cclxuICAgIGlmICh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSA9PT0gJzAnKSAgLy8gSzBcclxuICAgIHtcclxuICAgICAgdGhpcy5faW1lTW9kZSA9IFV0aWxJbWVKcG4uSU1FX0ZPUkNFX09GRjtcclxuICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICBpZiAoMSA8PSBjb3VudCAmJiBjb3VudCA8PSA5KSAvLyBLMSAtIEs5XHJcbiAgICAgICAgdGhpcy5faW1lTW9kZSA9IGNvdW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBGaW5kIGxlbmd0aCBvZiB0aGUgcGljdHVyZSBhZnRlciBwYXJzaW5nIHRoZSBwaWN0dXJlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz4gbGVuZ3RoIG9mIHRoZSBwaWN0dXJlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0TWFza0xlbihjb21wSWR4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX25lZWRMZW5ndGggPSB0cnVlO1xyXG4gICAgdGhpcy5fbWFza0xlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9mb3JtYXRJZHggPSAwO1xyXG5cclxuICAgIHRoaXMucHJzX2FsbChjb21wSWR4KTtcclxuXHJcbiAgICAvLyBhZGQgcHJlZml4IGFuZCBzdWZmaXggbGVuZ3RoIHRvIHRoZSBtYXNrXHJcbiAgICBpZiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDICYmICh0aGlzLl9wcmVmTGVuID4gMCB8fCB0aGlzLl9zdWZmTGVuID4gMCkpXHJcbiAgICAgIHRoaXMuX21hc2tMZW5ndGggKz0gKHRoaXMuX3ByZWZMZW4gKyB0aGlzLl9zdWZmTGVuKTtcclxuXHJcbiAgICB0aGlzLl9uZWVkTGVuZ3RoID0gZmFsc2U7XHJcbiAgICAvLyBpbml0IGZvciBuZXh0IHJ1bm5pbmcgOlxyXG4gICAgdGhpcy5fZm9ybWF0SWR4ID0gdGhpcy5fbWFza0NoYXJzID0gdGhpcy5fd2hvbGUgPSB0aGlzLl9kZWNpbWFsRGlnaXRzID0gdGhpcy5fc2l6ZSA9IHRoaXMuX21hc2tTaXplID0gdGhpcy5fcHJlZkxlbiA9IHRoaXMuX3N1ZmZMZW4gPSAwO1xyXG4gICAgdGhpcy5fcGFkID0gdGhpcy5femVybyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCk7XHJcbiAgICB0aGlzLmhlYnJldyA9IHRoaXMuX21peGVkID0gdGhpcy5fZW1iZWRlZCA9IHRoaXMuX25lZ2F0aXZlID0gdGhpcy5fY29tbWEgPSB0aGlzLl9sZWZ0ID0gdGhpcy5fcGFkRmlsbCA9IHRoaXMuX3plcm9GaWxsID0gdGhpcy5fdHJpbSA9IHRoaXMuX2F1dG9Ta2lwXyA9IHRoaXMuX2RlY2ltYWwgPSB0aGlzLl90ZXJtRmxhZyA9IHRoaXMuX2RlY1BvaW50SXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcG9zUHJlZi5SZW1vdmUoMCwgdGhpcy5fcG9zUHJlZi5MZW5ndGgpO1xyXG4gICAgdGhpcy5fcG9zU3VmZi5SZW1vdmUoMCwgdGhpcy5fcG9zU3VmZi5MZW5ndGgpO1xyXG4gICAgdGhpcy5fbmVnUHJlZi5SZW1vdmUoMCwgdGhpcy5fbmVnUHJlZi5MZW5ndGgpO1xyXG4gICAgdGhpcy5fbmVnU3VmZi5SZW1vdmUoMCwgdGhpcy5fbmVnU3VmZi5MZW5ndGgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21hc2tMZW5ndGg7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gZW1iZWRlZCBjaGFyIGluIHRoZSBtYXNrIGluIGEgZ2l2dmVuIHBvc2l0aW9uLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcInBvc1wiPjwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz4gdHJ1ZSBpZiBwaWMgaXMgbWFzazwvcmV0dXJucz5cclxuICBwdWJsaWMgcGljSXNNYXNrKHBvczogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAocG9zIDwgMCB8fCBwb3MgPj0gdGhpcy5fbWFza0xlbmd0aClcclxuICAgICAgcG9zID0gMDtcclxuICAgIHJldHVybiB0aGlzLl9tc2tbcG9zXS5jaGFyQ29kZUF0KDApID4gUElDSW50ZXJmYWNlLlBJQ19NQVhfT1A7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcnMgdGlsbCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS5cclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJtc2tQb3NcIj48L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZlBvc1wiPjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiYnVmXCI+PC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXREaXJlY3RpdmVMZW4ocG9zOiBudW1iZXIpOiBudW1iZXI7XHJcbiAgZ2V0RGlyZWN0aXZlTGVuKG1za1BvczogbnVtYmVyLCBidWZQb3M6IG51bWJlciwgYnVmOiBzdHJpbmcpOiBudW1iZXI7XHJcbiAgZ2V0RGlyZWN0aXZlTGVuKHBvc09yTXNrUG9zOiBudW1iZXIsIGJ1ZlBvcz86IG51bWJlciwgYnVmPzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXREaXJlY3RpdmVMZW5fMChwb3NPck1za1Bvcyk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLmdldERpcmVjdGl2ZUxlbl8xKHBvc09yTXNrUG9zLCBidWZQb3MsIGJ1Zik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJzIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBvc1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBudW1iZXIgb2YgY2hhcnMgdGlsbCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldERpcmVjdGl2ZUxlbl8wKHBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBjOiBzdHJpbmcgPSB0aGlzLl9tc2tbcG9zXTtcclxuICAgIGxldCBudW06IG51bWJlciA9IHBvcztcclxuICAgIHdoaWxlIChudW0gPCB0aGlzLl9tYXNrU2l6ZSAmJiBjID09PSB0aGlzLl9tc2tbbnVtXSkge1xyXG4gICAgICBudW0gPSBudW0gKyAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bSAtIHBvcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcnMgdGlsbCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibXNrUG9zXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZlBvc1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJidWZcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXREaXJlY3RpdmVMZW5fMShtc2tQb3M6IG51bWJlciwgYnVmUG9zOiBudW1iZXIsIGJ1Zjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCBkcnY6IHN0cmluZyA9IHRoaXMuX21za1ttc2tQb3NdO1xyXG4gICAgbGV0IGN1cnJNc2tQb3M6IG51bWJlciA9IG1za1BvcztcclxuICAgIGxldCBjdXJyQnVmUG9zOiBudW1iZXIgPSBidWZQb3M7XHJcblxyXG4gICAgLy8gdGlsbCB0aGUgZW5kIG9mIHRoZSBtYXNrLCBpZiBtYXNrW3Bvc10gaGFzIHNhbWUgZGlyZWN0aXZlIGFzIG91cnMsIHRoaXMgaXMgdGhlIHNhbWUgc2VxdWVuY2UuXHJcbiAgICB3aGlsZSAoY3Vyck1za1BvcyA8IHRoaXMuX21hc2tTaXplICYmIGRydiA9PT0gdGhpcy5fbXNrW2N1cnJNc2tQb3NdKSB7XHJcbiAgICAgIC8vIElnbm9yZSB0aGUgY2hhbmdlIG9mIHNlcXVlbmNlIGlmIGl0IGlzIGluLWJldHdlZW4gYSBEQkNTIGNoYXIuXHJcbiAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXIgaXMgYSBGdWxsIFdpZHRoIGNoYXIsIHRoZW4gdGhlIG5leHQgbWFzayBiaXRcclxuICAgICAgLy8gaXMgYWN0dWFsbHkgbm90IHVzZWQuIFNvLCBpZ25vcmUgdGhhdCBiaXQgYW5kIG1vdmUgb24uXHJcbiAgICAgIGlmIChjdXJyQnVmUG9zIDwgYnVmLmxlbmd0aCAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmIHRoaXMuaXNBdHRyQWxwaGFPckRhdGUoKSkge1xyXG4gICAgICAgIGlmICghVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGJ1ZltjdXJyQnVmUG9zKytdKSlcclxuICAgICAgICAgIGN1cnJNc2tQb3MrKztcclxuICAgICAgfVxyXG5cclxuICAgICAgY3Vyck1za1BvcysrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldHVybiBvbmx5IGhvdyBtYW55IGNoYXJzIHRvIHRoZSBlbmQsIGluY2x1ZGluZyBvdXIgcG9zLlxyXG4gICAgcmV0dXJuIChjdXJyTXNrUG9zIC0gbXNrUG9zKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIGNoYXIgaXMgdmFsaWQgaW4gdGhlIGdpdmVuIG1hc2sgcG9zaXRpb25cclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJjaGFyVG9WYWxpZGF0ZVwiPlxyXG4vLy8gPC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj5vZiBkaXJlY3RpdmUgbWFzayB0byBjaGVja1xyXG4vLy8gICBUaGUgcmV0dXJuZWQgY2hhciBtaWdodCBiZSBkaWZmZXJlbnQgdGhlbiB0aGUgY2hhciB0aGF0IHdhcyBjaGVja2VkLlxyXG4vLy8gICBUaGUgcmVhc29uIGlzIHRoYXQgJ1UnIGFuZCAnTCcgZGlyZWN0aXZlIG1pZ2h0IGNoYW5nZSBpdCwgYW5kIGluIG51bWVyaWMsXHJcbi8vLyAgIGRlY2ltYWwgc2VwYXJhdG9yIGFuZCB0aG91c2FuZCBzZXBhcmF0b3IgbWlnaHQgYmUgY2hhbmdlZCBhcyB3ZWxsIHdoaWxlIHR5cGluZy5cclxuLy8vIDwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz4gMCBpZiBub3QgdmFsaWQgb3IgYSBjaGFyIGlmIHZhbGlkLjwvcmV0dXJucz5cclxuICBwdWJsaWMgdmFsaWRhdGVDaGFyKGNoYXJUb1ZhbGlkYXRlOiBzdHJpbmcsIHBvczogbnVtYmVyKSB7XHJcbiAgICBsZXQgY2hhclJldHVybmVkID0gY2hhclRvVmFsaWRhdGU7XHJcbiAgICBpZiAocG9zID49IHRoaXMuZ2V0TWFza1NpemUoKSlcclxuICAgICAgcmV0dXJuIGNoYXJSZXR1cm5lZDtcclxuXHJcbiAgICAvLyB3ZSBuZWVkIHRvIHNraXAgYW55IGNoYXJhY3RlcnMgd2hpY2ggYXJlIGVtYmVkZWQgaW50byB0aGUgcGljdHVyZVxyXG4gICAgd2hpbGUgKHRoaXMucGljSXNNYXNrKHBvcykpXHJcbiAgICAgIHBvcysrO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5fbXNrW3Bvc10uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgICBjaGFyUmV0dXJuZWQgPSBjaGFyVG9WYWxpZGF0ZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0w6XHJcbiAgICAgICAgY2hhclJldHVybmVkID0gY2hhclRvVmFsaWRhdGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpZiAoIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGNoYXJUb1ZhbGlkYXRlKSlcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgUElDSW50ZXJmYWNlLk51bURpcmVjdGl2ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgaWYgKHRoaXMuX21za1twb3NdLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5OdW1EaXJlY3RpdmVbaV0pIHtcclxuICAgICAgICAgICAgICBjaGFyUmV0dXJuZWQgPSB0aGlzLmlzVmFsaWRJbk51bShjaGFyVG9WYWxpZGF0ZSk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBjaGFyUmV0dXJuZWQ7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBDaGVja3Mgd2hldGhlciBhIG5vbiBkaWdpdCBjaGFyYWN0ZXIgaXMgdmFsaWQgaW4gYSBudW1lcmljIG1hc2tcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJsZXR0ZXI6XCI+YSBjaGFyYWN0ZXIgdG8gYmUgY2hlY2tlZC48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+IDAgaWYgbm90IHZhbGlkLiBjaGFyIGlmIHZhbGlkLiBjaGFyIG1pZ2h0IGJlIGRpZmZlcmVudCB0aGVuIGxldHRlci48L3JldHVybnM+XHJcbiAgaXNWYWxpZEluTnVtKGxldHRlcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBjaGFyUmV0ID0gJ1xcMCc7XHJcbiAgICBsZXQgZGVjaW1hbENoYXI6IHN0cmluZyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERlY2ltYWwoKTtcclxuXHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICAvKiAgcmVwbGFjZSAnLicgd2l0aCBhIGRpZmZlcmVudCBjaGFyIGZvciBudW1lcmljIHNlcGVyYXRvciBvbmx5IGlmXHJcbiAgICAqICBTcGVjaWFsTW9kaWZpZWREZWNpbWFsU2VwYXJhdG9yID0gWSovXHJcbiAgICAvLyBmb3IgbnVtZXJpYywgaWYgJy4nIHdhcyBlbnRlcmVkLCBjaGFuZ2UgaXQgdG8gdGhlIGVudiBzZXBlcmF0b3IuXHJcbiAgICAvLyAjOTMxNzg0OiBJZiBTcGVjaWFsTW9kaWZpZWREZWNpbWFsU2VwYXJhdG9yID0gWSB0aGVuIHJlcGxhY2UgJy4nIGJ5IGRlY2ltYWwgc2VwYXJhdG9yLlxyXG4gICAgaWYgKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkNhblJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yKCkgJiYgdGhpcy5pc0F0dHJOdW1lcmljKCkpXHJcbiAgICAgIGlmIChsZXR0ZXIgPT09ICcuJylcclxuICAgICAgICBsZXR0ZXIgPSBkZWNpbWFsQ2hhcjtcclxuXHJcbiAgICBzd2l0Y2ggKGxldHRlcikge1xyXG4gICAgICBjYXNlICcgJzpcclxuICAgICAgY2FzZSAnLSc6XHJcbiAgICAgIGNhc2UgJyonOlxyXG4gICAgICBjYXNlICcrJzpcclxuICAgICAgY2FzZSAnLyc6XHJcbiAgICAgICAgY2hhclJldCA9IGxldHRlcjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgLy8gdGhlIGVudiBkZWNpbWFsIHNlcGVyYXRvciBhbmQgdGhvdXNhbmRzIHNlcGVyYXRvciBhcmUgYWxzbyB2YWxpZFxyXG4gICAgICAgIGlmIChsZXR0ZXIgPT09IGRlY2ltYWxDaGFyIHx8IGxldHRlciA9PT0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGhvdXNhbmRzKCkpXHJcbiAgICAgICAgICBjaGFyUmV0ID0gbGV0dGVyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjaGFyUmV0O1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyBsb2dpY2FsXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0ckxvZ2ljYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIG51bWVyaWNcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyTnVtZXJpYygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgYWxwaGFcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyQWxwaGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyB1bmljb2RlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0clVuaWNvZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIGFscGhhIG9yIGRhdGVcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyQWxwaGFPckRhdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgdGltZSBvciBkYXRlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0ckRhdGVPclRpbWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSB8fCB0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyBibG9iXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0ckJsb2IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fFxyXG4gICAgICB0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBtYXNrIGF0IGEgZ2l2ZW4gcG9zaXRpb24gaXMgbnVtZXJpY1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcInBvc1wiPjwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzTnVtZXJpYyhwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX21zayBbcG9zXSA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZShQSUNJbnRlcmZhY2UuUElDX04pO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIG1hc2sgaXMgYWxsIFhcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBbGxYKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9tc2tbMF0gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19YKSAmJiB0aGlzLmdldERpcmVjdGl2ZUxlbigwKSA9PT0gdGhpcy5fbWFza1NpemUpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaXMgbWFzayBhdCBwb3NpdGlvbiBwb3MgaXMgc2FtZSBhcyBwYXJhbWV0ZXIgbWFza1BpY1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcInBvc1wiPjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwibWFza1BpY1wiPjwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzTWFza1BpY0VxKHBvczogbnVtYmVyLCBtYXNrUGljOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9tc2tbcG9zXSA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZShtYXNrUGljKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBpbnB1dCBjaGFyIGlzIHZhbGlkIGZvciBsb2NhbCBBUzQwMCAoc3lzdGVtIGkpIHBpY3R1cmVzLlxyXG4vLy8gICAoREJDUyBTdXBwb3J0KVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImNoYXJUb1ZhbGlkYXRlXCI+PC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJmaXJzdENoYXJcIj48L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcInBvc1wiPjwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz4gMCBpZiBub3QgdmFsaWQgb3IgYSBjaGFyIGlmIHZhbGlkLjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNWYWxpZENoYXJfYXM0MDAoY2hhclRvVmFsaWRhdGU6IHN0cmluZywgZmlyc3RDaGFyOiBzdHJpbmcsIHBvczogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0ID0gdHJ1ZTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX21za1twb3NdLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0o6XHJcbiAgICAgIC8vIG9ubHkgZnVsbC13aWR0aCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkXHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19HOlxyXG4gICAgICAgIHJldCA9ICFVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoY2hhclRvVmFsaWRhdGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19UKTogLy8gbWl4dHVyZSBvZiBmdWxsLXdpZHRoIGFuZCBoYWxmLXdpZHRoIGlzIG5vdCBhbGxvd2VkXHJcbiAgICAgICAgaWYgKGZpcnN0Q2hhciA9PT0gJ1xceDAwMDAnKVxyXG4gICAgICAgICAgcmV0ID0gdHJ1ZTtcclxuICAgICAgICBlbHNlIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoZmlyc3RDaGFyKSlcclxuICAgICAgICAgIHJldCA9IFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChjaGFyVG9WYWxpZGF0ZSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0ID0gIVV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChjaGFyVG9WYWxpZGF0ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1MpOiAvLyBvbmx5IGhhbGYtd2lkdGggY2hhcmFjdGVycyBhcmUgYWxsb3dlZFxyXG4gICAgICAgIHJldCA9IFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChjaGFyVG9WYWxpZGF0ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUgbGVuZ3RoXHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TWluaW11bVZhbHVlTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluTGVuZ3RoID0gdGhpcy5nZXRNYXNrTGVuZ3RoKCk7XHJcblxyXG4gICAgLy8gdHJhdmVyc2UgZnJvbSByaWdodCB0aWxsIGEgdmFsaWQgbWFzayBjaGFyIGlzIGVuY291bnRlcmVkXHJcbiAgICB3aGlsZSAobWluTGVuZ3RoID4gMCAmJiAhdGhpcy5waWNJc01hc2sobWluTGVuZ3RoIC0gMSkpXHJcbiAgICAgIG1pbkxlbmd0aC0tO1xyXG5cclxuICAgIHJldHVybiBtaW5MZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBcIntQaWN0dXJlOiBcIiArIHRoaXMuX2Zvcm1hdCArIFwifVwiO1xyXG4gIH1cclxufVxyXG4iXX0=