@magic-xpa/gui 4.800.0 → 4.801.0-dev000.0

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 (128) hide show
  1. package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  2. package/{esm2015/magic-xpa-gui.js → esm2020/magic-xpa-gui.mjs} +0 -0
  3. package/esm2020/src/Commands.mjs +186 -0
  4. package/esm2020/src/Events.mjs +420 -0
  5. package/esm2020/src/EventsProcessor.mjs +67 -0
  6. package/esm2020/src/FocusManager.mjs +34 -0
  7. package/{esm2015/src/GuiConstants.js → esm2020/src/GuiConstants.mjs} +0 -0
  8. package/{esm2015/src/GuiEnums.js → esm2020/src/GuiEnums.mjs} +0 -0
  9. package/{esm2015/src/GuiEnvironment.js → esm2020/src/GuiEnvironment.mjs} +0 -0
  10. package/{esm2015/src/IFlowMonitorQueue.js → esm2020/src/IFlowMonitorQueue.mjs} +2 -1
  11. package/esm2020/src/Manager.mjs +192 -0
  12. package/{esm2015/src/UIBridge.js → esm2020/src/UIBridge.mjs} +0 -0
  13. package/{esm2015/src/env/IEnvironment.js → esm2020/src/env/IEnvironment.mjs} +1 -0
  14. package/{esm2015/src/gui/ControlBase.js → esm2020/src/gui/ControlBase.mjs} +0 -0
  15. package/{esm2015/src/gui/GuiMgControl.js → esm2020/src/gui/GuiMgControl.mjs} +0 -0
  16. package/{esm2015/src/gui/GuiMgForm.js → esm2020/src/gui/GuiMgForm.mjs} +0 -0
  17. package/{esm2015/src/gui/KeyboardItem.js → esm2020/src/gui/KeyboardItem.mjs} +0 -0
  18. package/{esm2015/src/gui/LastFocusedVal.js → esm2020/src/gui/LastFocusedVal.mjs} +0 -0
  19. package/{esm2015/src/gui/MgValue.js → esm2020/src/gui/MgValue.mjs} +0 -0
  20. package/{esm2015/src/gui/PropParentInterface.js → esm2020/src/gui/PropParentInterface.mjs} +1 -0
  21. package/{esm2015/src/gui/low/DialogHandler.js → esm2020/src/gui/low/DialogHandler.mjs} +0 -0
  22. package/{esm2015/src/gui/low/GuiCommand.js → esm2020/src/gui/low/GuiCommand.mjs} +0 -0
  23. package/{esm2015/src/gui/low/GuiCommandQueue.js → esm2020/src/gui/low/GuiCommandQueue.mjs} +0 -0
  24. package/esm2020/src/gui/low/GuiInteractive.mjs +545 -0
  25. package/{esm2015/src/gui/low/Style.js → esm2020/src/gui/low/Style.mjs} +0 -0
  26. package/{esm2015/src/management/RuntimeContextBase.js → esm2020/src/management/RuntimeContextBase.mjs} +0 -0
  27. package/{esm2015/src/management/data/BlobType.js → esm2020/src/management/data/BlobType.mjs} +0 -0
  28. package/esm2020/src/management/data/DcValues.mjs +214 -0
  29. package/esm2020/src/management/data/DcValuesBuilderBase.mjs +97 -0
  30. package/{esm2015/src/management/data/FieldDef.js → esm2020/src/management/data/FieldDef.mjs} +0 -0
  31. package/{esm2015/src/management/data/FieldsTable.js → esm2020/src/management/data/FieldsTable.mjs} +0 -0
  32. package/esm2020/src/management/data/GuiDataViewBase.mjs +90 -0
  33. package/esm2020/src/management/data/GuiFieldBase.mjs +82 -0
  34. package/{esm2015/src/management/data/IRecord.js → esm2020/src/management/data/IRecord.mjs} +1 -0
  35. package/{esm2015/src/management/data/IReferencedObject.js → esm2020/src/management/data/IReferencedObject.mjs} +1 -0
  36. package/{esm2015/src/management/data/NUM_TYPE.js → esm2020/src/management/data/NUM_TYPE.mjs} +0 -0
  37. package/esm2020/src/management/data/ObjectReferenceBase.mjs +48 -0
  38. package/{esm2015/src/management/data/ObjectReferencesCollection.js → esm2020/src/management/data/ObjectReferencesCollection.mjs} +0 -0
  39. package/esm2020/src/management/data/RecordUtils.mjs +361 -0
  40. package/{esm2015/src/management/data/VectorType.js → esm2020/src/management/data/VectorType.mjs} +0 -0
  41. package/{esm2015/src/management/data/VectorTypeBase.js → esm2020/src/management/data/VectorTypeBase.mjs} +0 -0
  42. package/{esm2015/src/management/events/IActionManager.js → esm2020/src/management/events/IActionManager.mjs} +1 -0
  43. package/esm2020/src/management/events/IGuiEventsManager.mjs +2 -0
  44. package/{esm2015/src/management/exp/ExpressionInterface.js → esm2020/src/management/exp/ExpressionInterface.mjs} +0 -0
  45. package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +333 -0
  46. package/{esm2015/src/management/gui/ControlTable.js → esm2020/src/management/gui/ControlTable.mjs} +0 -0
  47. package/esm2020/src/management/gui/DisplayConvertor.mjs +1706 -0
  48. package/esm2020/src/management/gui/FieldValidator.mjs +1507 -0
  49. package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +22 -0
  50. package/{esm2015/src/management/gui/GuiFormPropertyAdapter.js → esm2020/src/management/gui/GuiFormPropertyAdapter.mjs} +0 -0
  51. package/{esm2015/src/management/gui/HebrewDate.js → esm2020/src/management/gui/HebrewDate.mjs} +0 -0
  52. package/{esm2015/src/management/gui/Helps.js → esm2020/src/management/gui/Helps.mjs} +0 -0
  53. package/esm2020/src/management/gui/MgControlBase.mjs +1873 -0
  54. package/esm2020/src/management/gui/MgFormBase.mjs +748 -0
  55. package/{esm2015/src/management/gui/PIC.js → esm2020/src/management/gui/PIC.mjs} +0 -0
  56. package/esm2020/src/management/gui/PropDefaults.mjs +230 -0
  57. package/{esm2015/src/management/gui/PropInterface.js → esm2020/src/management/gui/PropInterface.mjs} +0 -0
  58. package/esm2020/src/management/gui/PropTable.mjs +221 -0
  59. package/esm2020/src/management/gui/Property.mjs +1382 -0
  60. package/{esm2015/src/management/gui/ValidationDetails.js → esm2020/src/management/gui/ValidationDetails.mjs} +0 -0
  61. package/{esm2015/src/management/gui/ValidationDetailsBase.js → esm2020/src/management/gui/ValidationDetailsBase.mjs} +0 -0
  62. package/{esm2015/src/management/gui/WrongFormatException.js → esm2020/src/management/gui/WrongFormatException.mjs} +0 -0
  63. package/{esm2015/src/management/tasks/GuiDataCollection.js → esm2020/src/management/tasks/GuiDataCollection.mjs} +0 -0
  64. package/esm2020/src/management/tasks/GuiTaskBase.mjs +502 -0
  65. package/{esm2015/src/management/tasks/IMGDataTable.js → esm2020/src/management/tasks/IMGDataTable.mjs} +1 -0
  66. package/{esm2015/src/management/tasks/ITask.js → esm2020/src/management/tasks/ITask.mjs} +1 -0
  67. package/esm2020/src/management/tasks/MgTimer.mjs +21 -0
  68. package/{esm2015/src/management/tasks/TaskDefinitionId.js → esm2020/src/management/tasks/TaskDefinitionId.mjs} +0 -0
  69. package/esm2020/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -0
  70. package/{esm2015/src/util/AuthenticationDialogHandler.js → esm2020/src/util/AuthenticationDialogHandler.mjs} +0 -0
  71. package/{esm2015/src/util/MemoryUtil.js → esm2020/src/util/MemoryUtil.mjs} +0 -0
  72. package/{esm2015/src/util/ObjectReference.js → esm2020/src/util/ObjectReference.mjs} +0 -0
  73. package/esm2020/src/util/ProcessLauncher.mjs +32 -0
  74. package/esm2020/src/util/UsernamePasswordCredentials.mjs +52 -0
  75. package/fesm2015/{magic-xpa-gui.js → magic-xpa-gui.mjs} +133 -175
  76. package/fesm2015/magic-xpa-gui.mjs.map +1 -0
  77. package/fesm2020/magic-xpa-gui.mjs +17805 -0
  78. package/fesm2020/magic-xpa-gui.mjs.map +1 -0
  79. package/package.json +27 -14
  80. package/src/Events.d.ts +2 -2
  81. package/src/EventsProcessor.d.ts +1 -1
  82. package/src/IFlowMonitorQueue.d.ts +1 -1
  83. package/src/Manager.d.ts +2 -3
  84. package/src/management/data/DcValues.d.ts +1 -1
  85. package/src/management/data/DcValuesBuilderBase.d.ts +1 -1
  86. package/src/management/data/RecordUtils.d.ts +0 -3
  87. package/src/management/events/IGuiEventsManager.d.ts +5 -5
  88. package/src/management/exp/GuiExpressionEvaluator.d.ts +2 -2
  89. package/src/management/gui/DisplayConvertor.d.ts +6 -6
  90. package/src/management/gui/GuiControlPropertyAdapter.d.ts +6 -6
  91. package/src/management/gui/MgControlBase.d.ts +2 -4
  92. package/src/management/gui/MgFormBase.d.ts +1 -1
  93. package/src/management/gui/PropTable.d.ts +1 -1
  94. package/src/management/gui/Property.d.ts +2 -2
  95. package/src/management/tasks/GuiTaskBase.d.ts +3 -3
  96. package/src/util/ProcessLauncher.d.ts +1 -3
  97. package/bundles/magic-xpa-gui.umd.js +0 -19431
  98. package/bundles/magic-xpa-gui.umd.js.map +0 -1
  99. package/bundles/magic-xpa-gui.umd.min.js +0 -16
  100. package/bundles/magic-xpa-gui.umd.min.js.map +0 -1
  101. package/esm2015/src/Commands.js +0 -189
  102. package/esm2015/src/Events.js +0 -420
  103. package/esm2015/src/EventsProcessor.js +0 -68
  104. package/esm2015/src/FocusManager.js +0 -41
  105. package/esm2015/src/Manager.js +0 -197
  106. package/esm2015/src/gui/low/GuiInteractive.js +0 -545
  107. package/esm2015/src/management/data/DcValues.js +0 -214
  108. package/esm2015/src/management/data/DcValuesBuilderBase.js +0 -97
  109. package/esm2015/src/management/data/GuiDataViewBase.js +0 -90
  110. package/esm2015/src/management/data/GuiFieldBase.js +0 -85
  111. package/esm2015/src/management/data/ObjectReferenceBase.js +0 -48
  112. package/esm2015/src/management/data/RecordUtils.js +0 -447
  113. package/esm2015/src/management/events/IGuiEventsManager.js +0 -1
  114. package/esm2015/src/management/exp/GuiExpressionEvaluator.js +0 -333
  115. package/esm2015/src/management/gui/DisplayConvertor.js +0 -1706
  116. package/esm2015/src/management/gui/FieldValidator.js +0 -1507
  117. package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +0 -4
  118. package/esm2015/src/management/gui/MgControlBase.js +0 -1981
  119. package/esm2015/src/management/gui/MgFormBase.js +0 -763
  120. package/esm2015/src/management/gui/PropDefaults.js +0 -230
  121. package/esm2015/src/management/gui/PropTable.js +0 -224
  122. package/esm2015/src/management/gui/Property.js +0 -1402
  123. package/esm2015/src/management/tasks/GuiTaskBase.js +0 -506
  124. package/esm2015/src/management/tasks/MgTimer.js +0 -21
  125. package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +0 -41
  126. package/esm2015/src/util/ProcessLauncher.js +0 -32
  127. package/esm2015/src/util/UsernamePasswordCredentials.js +0 -52
  128. package/fesm2015/magic-xpa-gui.js.map +0 -1
@@ -0,0 +1,48 @@
1
+ import { Debug, StackTrace } from "@magic-xpa/mscorelib";
2
+ import { Logger, Logger_LogLevels } from "@magic-xpa/utils";
3
+ export class ObjectReferenceBase {
4
+ constructor(referent) {
5
+ this.Referent = null;
6
+ this.isDisposed = false;
7
+ this.id = 0;
8
+ this._instantiationTrace = null;
9
+ this.id = (ObjectReferenceBase.LastId = ObjectReferenceBase.LastId + 1);
10
+ this.isDisposed = false;
11
+ this.Referent = referent;
12
+ if (Logger.Instance.LogLevel >= Logger_LogLevels.Development) {
13
+ Logger.Instance.WriteDevToLog("Creating " + this.toString());
14
+ this._instantiationTrace = new StackTrace();
15
+ }
16
+ referent.AddReference();
17
+ }
18
+ Dispose(isDisposing) {
19
+ if (arguments.length === 0) {
20
+ this.Dispose_0();
21
+ return;
22
+ }
23
+ this.Dispose_1();
24
+ }
25
+ Dispose_0() {
26
+ Logger.Instance.WriteDevToLog("Disposing " + this);
27
+ this.Dispose(true);
28
+ }
29
+ Dispose_1() {
30
+ if (!this.isDisposed) {
31
+ if (!this.Referent.HasReferences) {
32
+ if (Logger.Instance.LogLevel >= Logger_LogLevels.Development) {
33
+ Logger.Instance.WriteSupportToLog("Referent does not have any more references: " + this.Referent, false);
34
+ Logger.Instance.WriteStackTrace(this._instantiationTrace, 15, "Instantiation trace:");
35
+ }
36
+ Debug.Assert(false, "Referent does not have any more references. See DEV level log.");
37
+ }
38
+ else
39
+ this.Referent.RemoveReference();
40
+ }
41
+ this.isDisposed = true;
42
+ }
43
+ toString() {
44
+ return "{Reference " + this.id + " to: " + this.Referent + "}";
45
+ }
46
+ }
47
+ ObjectReferenceBase.LastId = 0;
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JqZWN0UmVmZXJlbmNlQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9kYXRhL09iamVjdFJlZmVyZW5jZUJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFMUQsTUFBTSxPQUFnQixtQkFBbUI7SUFRdkMsWUFBWSxRQUEyQjtRQU5oQyxhQUFRLEdBQXNCLElBQUksQ0FBQztRQUNsQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLE9BQUUsR0FBVyxDQUFDLENBQUM7UUFFdkIsd0JBQW1CLEdBQWUsSUFBSSxDQUFDO1FBR3JDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsV0FBVyxFQUFFO1lBQzVELE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztTQUM3QztRQUNELFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBVUQsT0FBTyxDQUFDLFdBQXFCO1FBQzNCLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU8sU0FBUztRQUNmLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUluRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUNoQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsRUFBRTtvQkFDNUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyw4Q0FBOEMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUN6RyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUM7aUJBQ3ZGO2dCQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGdFQUFnRSxDQUFDLENBQUM7YUFDdkY7O2dCQUVDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBSUQsUUFBUTtRQUNOLE9BQU8sYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ2pFLENBQUM7O0FBN0RjLDBCQUFNLEdBQVcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZWJ1ZywgU3RhY2tUcmFjZX0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7SVJlZmVyZW5jZWRPYmplY3R9IGZyb20gXCIuL0lSZWZlcmVuY2VkT2JqZWN0XCI7XHJcbmltcG9ydCB7TG9nZ2VyLCBMb2dnZXJfTG9nTGV2ZWxzfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9iamVjdFJlZmVyZW5jZUJhc2Uge1xyXG4gIHByaXZhdGUgc3RhdGljIExhc3RJZDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgUmVmZXJlbnQ6IElSZWZlcmVuY2VkT2JqZWN0ID0gbnVsbDtcclxuICBwcml2YXRlIGlzRGlzcG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGlkOiBudW1iZXIgPSAwO1xyXG5cclxuICBfaW5zdGFudGlhdGlvblRyYWNlOiBTdGFja1RyYWNlID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocmVmZXJlbnQ6IElSZWZlcmVuY2VkT2JqZWN0KSB7XHJcbiAgICB0aGlzLmlkID0gKE9iamVjdFJlZmVyZW5jZUJhc2UuTGFzdElkID0gT2JqZWN0UmVmZXJlbmNlQmFzZS5MYXN0SWQgKyAxKTtcclxuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5SZWZlcmVudCA9IHJlZmVyZW50O1xyXG4gICAgaWYgKExvZ2dlci5JbnN0YW5jZS5Mb2dMZXZlbCA+PSBMb2dnZXJfTG9nTGV2ZWxzLkRldmVsb3BtZW50KSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiQ3JlYXRpbmcgXCIgKyB0aGlzLnRvU3RyaW5nKCkpO1xyXG4gICAgICB0aGlzLl9pbnN0YW50aWF0aW9uVHJhY2UgPSBuZXcgU3RhY2tUcmFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmVmZXJlbnQuQWRkUmVmZXJlbmNlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPIDogSW1wbGVtZW50IGRlc3RydWN0b3JcclxuLy8gfk9iamVjdFJlZmVyZW5jZUJhc2UoKSB7XHJcbi8vICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcIkZpbmFsaXppbmcgXCIgKyB0aGlzKTtcclxuLy8gICAgIHRoaXMuRGlzcG9zZShmYWxzZSk7XHJcbi8vICAgfVxyXG5cclxuICBEaXNwb3NlKCk6IHZvaWQ7XHJcbiAgRGlzcG9zZShpc0Rpc3Bvc2luZzogYm9vbGVhbik6IHZvaWQ7XHJcbiAgRGlzcG9zZShpc0Rpc3Bvc2luZz86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuRGlzcG9zZV8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRGlzcG9zZV8xKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIERpc3Bvc2VfMCgpOiB2b2lkIHtcclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiRGlzcG9zaW5nIFwiICsgdGhpcyk7XHJcblxyXG4gICAgLy8gVE9ET1xyXG4gICAgLy8gR0MuU3VwcHJlc3NGaW5hbGl6ZSh0aGlzKTtcclxuICAgIHRoaXMuRGlzcG9zZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgRGlzcG9zZV8xKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzRGlzcG9zZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLlJlZmVyZW50Lkhhc1JlZmVyZW5jZXMpIHtcclxuICAgICAgICBpZiAoTG9nZ2VyLkluc3RhbmNlLkxvZ0xldmVsID49IExvZ2dlcl9Mb2dMZXZlbHMuRGV2ZWxvcG1lbnQpIHtcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyhcIlJlZmVyZW50IGRvZXMgbm90IGhhdmUgYW55IG1vcmUgcmVmZXJlbmNlczogXCIgKyB0aGlzLlJlZmVyZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdGFja1RyYWNlKHRoaXMuX2luc3RhbnRpYXRpb25UcmFjZSwgMTUsIFwiSW5zdGFudGlhdGlvbiB0cmFjZTpcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIERlYnVnLkFzc2VydChmYWxzZSwgXCJSZWZlcmVudCBkb2VzIG5vdCBoYXZlIGFueSBtb3JlIHJlZmVyZW5jZXMuIFNlZSBERVYgbGV2ZWwgbG9nLlwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5SZWZlcmVudC5SZW1vdmVSZWZlcmVuY2UoKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNEaXNwb3NlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBDbG9uZSgpOiBPYmplY3RSZWZlcmVuY2VCYXNlO1xyXG5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFwie1JlZmVyZW5jZSBcIiArIHRoaXMuaWQgKyBcIiB0bzogXCIgKyB0aGlzLlJlZmVyZW50ICsgXCJ9XCI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,361 @@
1
+ import { ApplicationException, Debug, ISO_8859_1_Encoding, NNumber, NumberStyles, StringBuilder } from "@magic-xpa/mscorelib";
2
+ import { Base64, StorageAttribute, StorageAttributeCheck, StrUtil, UtilStrByteMode, XmlParser } from "@magic-xpa/utils";
3
+ import { GuiEnvironment } from "../../GuiEnvironment";
4
+ import { VectorTypeBase } from "./VectorTypeBase";
5
+ export class RecordUtils {
6
+ static byteStreamToString(stream) {
7
+ if (arguments.length === 1 && (stream === null || stream instanceof StringBuilder)) {
8
+ return RecordUtils.byteStreamToString_0(stream);
9
+ }
10
+ return RecordUtils.byteStreamToString_1(stream);
11
+ }
12
+ static byteStreamToString_0(stream) {
13
+ let currStr;
14
+ let currChar;
15
+ let result = new StringBuilder(Math.floor(stream.Length / 2));
16
+ for (let indx = 0; indx < stream.Length; indx = indx + 2) {
17
+ currStr = stream.get_Item(indx) + stream.get_Item(indx + 1);
18
+ currChar = String.fromCharCode(NNumber.Parse(currStr, NumberStyles.HexNumber));
19
+ result.Append(currChar);
20
+ }
21
+ return result.ToString();
22
+ }
23
+ static byteStreamToString_1(stream) {
24
+ return RecordUtils.byteStreamToString(new StringBuilder(stream));
25
+ }
26
+ static serializeItemVal(itemVal, itemAttr, cellAttr, toBase64) {
27
+ Debug.Assert(itemVal != null);
28
+ let significantNumSize = GuiEnvironment.Environment.GetSignificantNumSize() * 2;
29
+ let valueSize;
30
+ let j;
31
+ let tmpBuf = new StringBuilder();
32
+ let pos;
33
+ let fldValLen;
34
+ switch (itemAttr) {
35
+ case StorageAttribute.NUMERIC:
36
+ case StorageAttribute.DATE:
37
+ case StorageAttribute.TIME:
38
+ itemVal = !toBase64
39
+ ? itemVal.substr(0, significantNumSize)
40
+ : Base64.encode(this.byteStreamToString(itemVal.substr(0, significantNumSize)), GuiEnvironment.Environment.GetEncoding());
41
+ break;
42
+ case StorageAttribute.ALPHA:
43
+ case StorageAttribute.UNICODE:
44
+ itemVal = StrUtil.rtrim(itemVal);
45
+ pos = 0;
46
+ fldValLen = itemVal.length;
47
+ do {
48
+ let nullChrPos = itemVal.indexOf(String.fromCharCode(0), pos);
49
+ if (nullChrPos === -1) {
50
+ valueSize = (fldValLen - pos).toString(16).toUpperCase();
51
+ for (j = 0; j < 4 - valueSize.length; j++)
52
+ tmpBuf.Append('0');
53
+ tmpBuf.Append(valueSize);
54
+ if (pos > 0)
55
+ itemVal = itemVal.substr(pos, (fldValLen) - (pos));
56
+ pos = fldValLen;
57
+ }
58
+ else {
59
+ valueSize = (nullChrPos - pos + 0x8000).toString(16).toUpperCase();
60
+ tmpBuf.Append(valueSize);
61
+ tmpBuf.Append(itemVal.substr(pos, (nullChrPos) - (pos)));
62
+ for (j = 1; j < fldValLen - nullChrPos && itemVal.charCodeAt(nullChrPos + j) === 0; j++) {
63
+ }
64
+ valueSize = "0000" + (j.toString(16)).toUpperCase();
65
+ tmpBuf.Append(valueSize.substr(valueSize.length - 4));
66
+ for (pos = nullChrPos; j > 0; j--, pos++) {
67
+ let tmpStr = "0" + itemVal.charCodeAt(nullChrPos).toString(16);
68
+ tmpBuf.Append(tmpStr.substr(tmpStr.length - 2));
69
+ }
70
+ if (pos >= fldValLen) {
71
+ tmpBuf.Append("0000");
72
+ itemVal = "";
73
+ break;
74
+ }
75
+ }
76
+ } while (pos < fldValLen);
77
+ break;
78
+ case StorageAttribute.BLOB:
79
+ case StorageAttribute.BLOB_VECTOR:
80
+ case StorageAttribute.DOTNET:
81
+ pos = 0;
82
+ fldValLen = itemVal.length;
83
+ if (UtilStrByteMode.isLocaleDefLangDBCS() && itemAttr === StorageAttribute.BLOB_VECTOR) {
84
+ if (cellAttr === StorageAttribute.ALPHA || cellAttr === StorageAttribute.MEMO) {
85
+ itemVal = VectorTypeBase.adjustAlphaStringsInFlatData(itemVal);
86
+ do {
87
+ if (itemVal.length < pos + 0x3FFF) {
88
+ if (pos > 0)
89
+ itemVal = itemVal.substr(pos);
90
+ valueSize = (UtilStrByteMode.lenB(itemVal).toString(16)).toUpperCase();
91
+ for (j = 0; j < 4 - valueSize.length; j++)
92
+ tmpBuf.Append('0');
93
+ tmpBuf.Append(valueSize);
94
+ itemVal = !toBase64
95
+ ? StrUtil.stringToHexaDump(itemVal, 4)
96
+ : Base64.encode(itemVal, true, GuiEnvironment.Environment.GetEncoding());
97
+ pos = fldValLen;
98
+ }
99
+ else {
100
+ let strSub = itemVal.substr(pos, 0x3FFF);
101
+ valueSize = ((UtilStrByteMode.lenB(strSub) + 0x8000).toString(16)).toUpperCase();
102
+ tmpBuf.Append(valueSize);
103
+ tmpBuf.Append(!toBase64
104
+ ? StrUtil.stringToHexaDump(strSub, 4)
105
+ : Base64.encode(strSub, true, GuiEnvironment.Environment.GetEncoding()));
106
+ tmpBuf.Append("0000");
107
+ pos += 0x3FFF;
108
+ }
109
+ } while (pos < fldValLen);
110
+ break;
111
+ }
112
+ }
113
+ do {
114
+ if (fldValLen < pos + 0x7FFF) {
115
+ valueSize = ((fldValLen - pos).toString(16)).toUpperCase();
116
+ for (j = 0; j < 4 - valueSize.length; j++)
117
+ tmpBuf.Append('0');
118
+ tmpBuf.Append(valueSize);
119
+ if (pos > 0)
120
+ itemVal = itemVal.substr(pos, (fldValLen) - (pos));
121
+ itemVal = !toBase64
122
+ ? StrUtil.stringToHexaDump(itemVal, 4)
123
+ : Base64.encode(itemVal, GuiEnvironment.Environment.GetEncoding());
124
+ pos = fldValLen;
125
+ }
126
+ else {
127
+ valueSize = "FFFF";
128
+ tmpBuf.Append(valueSize);
129
+ if (!toBase64)
130
+ tmpBuf.Append(StrUtil.stringToHexaDump(itemVal.substr(pos, 0x7FFF), 4));
131
+ else
132
+ tmpBuf.Append(Base64.encode(itemVal.substr(pos, 0x7FFF), GuiEnvironment.Environment.GetEncoding()));
133
+ tmpBuf.Append("0000");
134
+ pos += 0x7FFF;
135
+ }
136
+ } while (pos < fldValLen);
137
+ break;
138
+ }
139
+ tmpBuf.Append(itemVal);
140
+ return tmpBuf.ToString();
141
+ }
142
+ static deSerializeItemVal(itemVal, itemAttr, itemLen, useHex, cellAttr, parsedLen) {
143
+ let val = null;
144
+ let idx = 0;
145
+ let len, endIdx;
146
+ let suffixBuf = null;
147
+ let tmp = null;
148
+ if (itemAttr === StorageAttribute.ALPHA
149
+ || itemAttr === StorageAttribute.UNICODE
150
+ || itemAttr === StorageAttribute.BLOB
151
+ || itemAttr === StorageAttribute.BLOB_VECTOR
152
+ || itemAttr === StorageAttribute.DOTNET) {
153
+ endIdx = idx + 4;
154
+ tmp = itemVal.substr(idx, (endIdx) - (idx));
155
+ len = NNumber.Parse(tmp, NumberStyles.HexNumber);
156
+ idx = endIdx;
157
+ }
158
+ else if (itemAttr === StorageAttribute.BOOLEAN)
159
+ len = 1;
160
+ else {
161
+ let significantNumSize = GuiEnvironment.Environment.GetSignificantNumSize();
162
+ if (useHex)
163
+ len = significantNumSize * 2;
164
+ else
165
+ len = (Math.floor((significantNumSize + 2) / 3) * 4);
166
+ }
167
+ if ((len & 0x8000) > 0) {
168
+ suffixBuf = new StringBuilder();
169
+ len = (len & 0x7FFF);
170
+ if (itemAttr === StorageAttribute.BLOB || itemAttr === StorageAttribute.BLOB_VECTOR
171
+ || itemAttr === StorageAttribute.DOTNET)
172
+ if (useHex)
173
+ len *= 2;
174
+ else
175
+ len = (Math.floor((len + 2) / 3) * 4);
176
+ parsedLen.value = this.getSpannedField(itemVal, len, idx, itemAttr, suffixBuf, useHex);
177
+ val = suffixBuf.ToString();
178
+ endIdx = idx + parsedLen.value;
179
+ }
180
+ else {
181
+ if (itemAttr === StorageAttribute.BLOB
182
+ || itemAttr === StorageAttribute.BLOB_VECTOR
183
+ || itemAttr === StorageAttribute.DOTNET)
184
+ if (useHex)
185
+ len *= 2;
186
+ else
187
+ len = (Math.floor((len + 2) / 3) * 4);
188
+ endIdx = idx + len;
189
+ if (endIdx > itemVal.length)
190
+ throw new ApplicationException("in Record.fillFieldsData() data string too short:\n" + itemVal);
191
+ if (UtilStrByteMode.isLocaleDefLangDBCS() && itemAttr === StorageAttribute.BLOB_VECTOR)
192
+ val = this.getString(itemVal.substr(idx, (endIdx) - (idx)), itemAttr, useHex, (cellAttr === StorageAttribute.ALPHA));
193
+ else
194
+ val = this.getString(itemVal.substr(idx, (endIdx) - (idx)), itemAttr, useHex);
195
+ }
196
+ idx = endIdx;
197
+ if (itemAttr === StorageAttribute.ALPHA || itemAttr === StorageAttribute.UNICODE) {
198
+ len = itemLen;
199
+ val = StrUtil.padStr(val, len);
200
+ if (itemAttr === StorageAttribute.ALPHA && UtilStrByteMode.isLocaleDefLangDBCS())
201
+ val = UtilStrByteMode.leftB(val, len);
202
+ }
203
+ parsedLen.value = endIdx;
204
+ return val;
205
+ }
206
+ static getString(str, type, useHex, useEnvCharset) {
207
+ if (arguments.length === 3)
208
+ return RecordUtils.getString_0(str, type, useHex);
209
+ if (arguments.length === 2)
210
+ return RecordUtils.getString_2(str, type);
211
+ return RecordUtils.getString_1(str, type, useHex, useEnvCharset);
212
+ }
213
+ static getString_0(str, type, useHex) {
214
+ return RecordUtils.getString(str, type, useHex, false);
215
+ }
216
+ static getString_1(str, type, useHex, useEnvCharset) {
217
+ let result;
218
+ if (useHex) {
219
+ if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR
220
+ || type === StorageAttribute.DOTNET)
221
+ result = RecordUtils.byteStreamToString(str);
222
+ else
223
+ result = str;
224
+ }
225
+ else {
226
+ if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR
227
+ || type === StorageAttribute.DOTNET)
228
+ result = Base64.decode(str, useEnvCharset ? GuiEnvironment.Environment.GetEncoding() : null);
229
+ else
230
+ result = Base64.decodeToHex(str);
231
+ }
232
+ return result;
233
+ }
234
+ static getSpannedField(fldsVal, firstSegLen, idx, type, result, useHex, noOfPackets) {
235
+ if (arguments.length === 6)
236
+ return RecordUtils.getSpannedField_0(fldsVal, firstSegLen, idx, type, result, useHex);
237
+ return RecordUtils.getSpannedField_1(fldsVal, firstSegLen, idx, type, result, useHex, noOfPackets);
238
+ }
239
+ static getSpannedField_0(fldsVal, firstSegLen, idx, type, result, useHex) {
240
+ let endIdx = idx + firstSegLen;
241
+ let len;
242
+ let begin = idx;
243
+ let asciiCode;
244
+ let tmp;
245
+ let suffixBuf = null;
246
+ let parsedLen;
247
+ if (endIdx > fldsVal.length) {
248
+ throw new ApplicationException("in Record.getSpannedField() data string too short:\n" + fldsVal);
249
+ }
250
+ result.Remove(0, result.Length);
251
+ result.Append(RecordUtils.getString(fldsVal.substr(idx, endIdx - idx), type, useHex));
252
+ idx = idx + firstSegLen;
253
+ endIdx = idx + 4;
254
+ tmp = fldsVal.substr(idx, endIdx - idx);
255
+ len = NNumber.Parse(tmp, NumberStyles.HexNumber);
256
+ idx = endIdx;
257
+ if (useHex)
258
+ endIdx = idx + len * 2;
259
+ else
260
+ endIdx = idx + Math.floor((len + 2) / 3) * 4;
261
+ if (endIdx > fldsVal.length)
262
+ throw new ApplicationException("in Record.getSpannedField() data string too short:\n" + fldsVal);
263
+ while (idx < endIdx) {
264
+ tmp = fldsVal.substr(idx, 2);
265
+ asciiCode = String.fromCharCode(NNumber.Parse(tmp, NumberStyles.HexNumber));
266
+ result.Append(asciiCode);
267
+ idx = idx + 2;
268
+ }
269
+ endIdx = idx + 4;
270
+ tmp = fldsVal.substr(idx, endIdx - idx);
271
+ len = NNumber.Parse(tmp, NumberStyles.HexNumber);
272
+ idx = endIdx;
273
+ if ((len & 0x8000) > 0) {
274
+ suffixBuf = new StringBuilder();
275
+ len = (len & 0x7FFF);
276
+ if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR)
277
+ if (useHex)
278
+ len = len * 2;
279
+ else
280
+ len = Math.floor((len + 2) / 3) * 4;
281
+ parsedLen = RecordUtils.getSpannedField(fldsVal, len, idx, type, suffixBuf, useHex);
282
+ result.Append(suffixBuf.ToString());
283
+ idx = idx + parsedLen;
284
+ }
285
+ else {
286
+ if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR)
287
+ if (useHex)
288
+ len = len * 2;
289
+ else
290
+ len = Math.floor((len + 2) / 3) * 4;
291
+ endIdx = idx + len;
292
+ if (endIdx > fldsVal.length)
293
+ throw new ApplicationException("in Record.fillFieldsData() data string too short:\n" + fldsVal);
294
+ result.Append(RecordUtils.getString(fldsVal.substr(idx, endIdx - idx), type, useHex));
295
+ idx = endIdx;
296
+ }
297
+ return idx - begin;
298
+ }
299
+ static getSpannedField_1(fldsVal, firstSegLen, idx, type, result, useHex, noOfPackets) {
300
+ let endIdx = idx + firstSegLen;
301
+ let len;
302
+ let begin = idx;
303
+ let tmp;
304
+ let suffixBuf = null;
305
+ let parsedLen;
306
+ let tmpEnc;
307
+ if (UtilStrByteMode.isLocaleDefLangDBCS())
308
+ tmpEnc = ISO_8859_1_Encoding.ISO_8859_1;
309
+ else
310
+ tmpEnc = GuiEnvironment.Environment.GetEncoding();
311
+ if (endIdx > fldsVal.length)
312
+ throw new ApplicationException("in Record.getSpannedField() data string too short:\n" + fldsVal);
313
+ result.Remove(0, result.Length);
314
+ result.Append(tmpEnc.GetString(fldsVal, idx, firstSegLen));
315
+ noOfPackets = noOfPackets - 1;
316
+ if (noOfPackets <= 0)
317
+ return 0;
318
+ idx = idx + firstSegLen;
319
+ endIdx = idx + 4;
320
+ tmp = tmpEnc.GetString(fldsVal, idx, 4);
321
+ len = NNumber.Parse(tmp, NumberStyles.HexNumber);
322
+ idx = endIdx;
323
+ if (endIdx > fldsVal.length)
324
+ throw new ApplicationException("in Record.getSpannedField() data string too short:\n" + fldsVal);
325
+ endIdx = idx + 4;
326
+ tmp = tmpEnc.GetString(fldsVal, idx, 4);
327
+ len = NNumber.Parse(tmp, NumberStyles.HexNumber);
328
+ idx = endIdx;
329
+ if ((len & 0x8000) > 0) {
330
+ suffixBuf = new StringBuilder();
331
+ parsedLen = RecordUtils.getSpannedField(fldsVal, len, idx, type, suffixBuf, useHex, noOfPackets);
332
+ result.Append(suffixBuf.ToString());
333
+ idx = idx + parsedLen;
334
+ }
335
+ else {
336
+ endIdx = idx + len;
337
+ if (endIdx > fldsVal.length)
338
+ throw new ApplicationException("in Record.fillFieldsData() data string too short:\n" + fldsVal);
339
+ result.Append(tmpEnc.GetString(fldsVal, idx, len));
340
+ idx = endIdx;
341
+ }
342
+ return idx - begin;
343
+ }
344
+ static itemValToXML(itemVal, itemAttr, cellAttr, ToBase64) {
345
+ let tmpBuf = RecordUtils.serializeItemVal(itemVal, itemAttr, cellAttr, ToBase64);
346
+ return XmlParser.escape(tmpBuf).toString();
347
+ }
348
+ static getString_2(str, type) {
349
+ let useHex = GuiEnvironment.Environment.GetDebugLevel() > 1 || type === StorageAttribute.ALPHA
350
+ || type === StorageAttribute.UNICODE || StorageAttributeCheck.isTypeLogical(type);
351
+ let tmp;
352
+ if (type === StorageAttribute.ALPHA || type === StorageAttribute.UNICODE ||
353
+ type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR) {
354
+ tmp = str.substr(4);
355
+ }
356
+ else
357
+ tmp = str;
358
+ return RecordUtils.getString(tmp, type, useHex);
359
+ }
360
+ }
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9SZWNvcmRVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLEtBQUssRUFFTCxtQkFBbUIsRUFDbkIsT0FBTyxFQUVQLFlBQVksRUFFWixhQUFhLEVBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsTUFBTSxFQUVOLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsT0FBTyxFQUNQLGVBQWUsRUFDZixTQUFTLEVBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE1BQU0sT0FBTyxXQUFXO0lBR3RCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFXO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sWUFBWSxhQUFhLENBQUMsRUFBRTtZQUNsRixPQUFPLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sV0FBVyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFPTyxNQUFNLENBQUMsb0JBQW9CLENBQUMsTUFBcUI7UUFDdkQsSUFBSSxPQUFlLENBQUM7UUFDcEIsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksTUFBTSxHQUFrQixJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RSxLQUFLLElBQUksSUFBSSxHQUFXLENB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QUMsUUFBUSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUdELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBVyxFQUFFLElBQXNCO1FBQ3BELElBQUksTUFBTSxHQUFZLGNBQWMsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLO2VBQ2xHLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUkscUJBQXFCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBR3BGLElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTztZQUN0RSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7WUFDekUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckI7O1lBRUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUVaLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQXBwbGljYXRpb25FeGNlcHRpb24sXHJcbiAgRGVidWcsXHJcbiAgRW5jb2RpbmcsXHJcbiAgSVNPXzg4NTlfMV9FbmNvZGluZyxcclxuICBOTnVtYmVyLFxyXG4gIE5TdHJpbmcsXHJcbiAgTnVtYmVyU3R5bGVzLFxyXG4gIFJlZlBhcmFtLFxyXG4gIFN0cmluZ0J1aWxkZXJcclxufSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtcclxuICBCYXNlNjQsXHJcbiAgTWlzYyxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjayxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxTdHJCeXRlTW9kZSxcclxuICBYbWxQYXJzZXJcclxufSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge05VTV9UWVBFfSBmcm9tIFwiLi9OVU1fVFlQRVwiO1xyXG5pbXBvcnQge0d1aUVudmlyb25tZW50fSBmcm9tIFwiLi4vLi4vR3VpRW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHtWZWN0b3JUeXBlQmFzZX0gZnJvbSBcIi4vVmVjdG9yVHlwZUJhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRVdGlscyB7XHJcbiAgc3RhdGljIGJ5dGVTdHJlYW1Ub1N0cmluZyhzdHJlYW06IFN0cmluZ0J1aWxkZXIpOiBzdHJpbmc7XHJcbiAgc3RhdGljIGJ5dGVTdHJlYW1Ub1N0cmluZyhzdHJlYW06IHN0cmluZyk6IHN0cmluZztcclxuICBzdGF0aWMgYnl0ZVN0cmVhbVRvU3RyaW5nKHN0cmVhbTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtIGluc3RhbmNlb2YgU3RyaW5nQnVpbGRlcikpIHtcclxuICAgICAgcmV0dXJuIFJlY29yZFV0aWxzLmJ5dGVTdHJlYW1Ub1N0cmluZ18wKHN0cmVhbSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVjb3JkVXRpbHMuYnl0ZVN0cmVhbVRvU3RyaW5nXzEoc3RyZWFtKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgYnl0ZSBzdHJlYW0gdG8gU3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc3VsdFwiPm9mIHRoZSB0cmFuc2xhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJlYW1cIj4oaW4gU3RyaW5nQnVmZmVyIGZvcm0pIHRvIHRyYW5zbGF0ZSBmcm9tPC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyBieXRlU3RyZWFtVG9TdHJpbmdfMChzdHJlYW06IFN0cmluZ0J1aWxkZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGN1cnJTdHI6IHN0cmluZztcclxuICAgIGxldCBjdXJyQ2hhcjogc3RyaW5nO1xyXG4gICAgbGV0IHJlc3VsdDogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKE1hdGguZmxvb3Ioc3RyZWFtLkxlbmd0aCAvIDIpKTtcclxuXHJcbiAgICBmb3IgKGxldCBpbmR4OiBudW1iZXIgPSAwOyBpbmR4IDwgc3RyZWFtLkxlbmd0aDsgaW5keCA9IGluZHggKyAyKSB7XHJcbiAgICAgIGN1cnJTdHIgPSBzdHJlYW0uZ2V0X0l0ZW0oaW5keCkgKyBzdHJlYW0uZ2V0X0l0ZW0oaW5keCArIDEpO1xyXG4gICAgICBjdXJyQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoTk51bWJlci5QYXJzZShjdXJyU3RyLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKSk7XHJcbiAgICAgIHJlc3VsdC5BcHBlbmQoY3VyckNoYXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdC5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBieXRlIHN0cmVhbSB0byBTdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc3RhdGljIGJ5dGVTdHJlYW1Ub1N0cmluZ18xKHN0cmVhbTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBSZWNvcmRVdGlscy5ieXRlU3RyZWFtVG9TdHJpbmcobmV3IFN0cmluZ0J1aWxkZXIoc3RyZWFtKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2VyaWFsaXplIGFuIGl0ZW0gKGZpZWxkL2dsb2JhbCBwYXJhbS8uLi4pIHRvIGFuIFhNTCBmb3JtYXQgKGFwcGxpY2FibGUgdG8gYmUgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpdGVtVmFsXCI+aXRlbSdzIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIml0ZW1BdHRyXCI+aXRlbSdzIGF0dHJpYnV0ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjZWxsQXR0clwiPmNlbGwncyBhdHRyaWJ1dGUgLSByZWxldmFudCBvbmx5IGlmICdpdGVtQXR0cicgaXMgdmVjdG9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRvQmFzZTY0XCI+ZGVjaWRlIEJhc2U2NCBlbmNvZGluZyBpcyB0byBiZSBkb25lPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+c2VyaWFsaXplZCBidWZmZXI8L3JldHVybnM+XHJcbiAgc3RhdGljIHNlcmlhbGl6ZUl0ZW1WYWwoaXRlbVZhbDogc3RyaW5nLCBpdGVtQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgY2VsbEF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIHRvQmFzZTY0OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIERlYnVnLkFzc2VydChpdGVtVmFsICE9IG51bGwpO1xyXG5cclxuICAgIGxldCBzaWduaWZpY2FudE51bVNpemU6IG51bWJlciA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpICogMjtcclxuXHJcbiAgICBsZXQgdmFsdWVTaXplOiBzdHJpbmc7XHJcbiAgICBsZXQgajogbnVtYmVyO1xyXG4gICAgbGV0IHRtcEJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgZmxkVmFsTGVuOiBudW1iZXIgO1xyXG5cclxuICAgIC8vIGZvciBhbHBoYSB0eXBlIGFkZCB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBhcyBoZXggbnVtYmVyIG9mIDQgZGlnaXRzXHJcbiAgICBzd2l0Y2ggKGl0ZW1BdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgaXRlbVZhbCA9ICF0b0Jhc2U2NFxyXG4gICAgICAgICAgPyBpdGVtVmFsLnN1YnN0cigwLCBzaWduaWZpY2FudE51bVNpemUpXHJcbiAgICAgICAgICA6IEJhc2U2NC5lbmNvZGUodGhpcy5ieXRlU3RyZWFtVG9TdHJpbmcoaXRlbVZhbC5zdWJzdHIoMCwgc2lnbmlmaWNhbnROdW1TaXplKSksIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldEVuY29kaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBpdGVtVmFsID0gU3RyVXRpbC5ydHJpbShpdGVtVmFsKTtcclxuICAgICAgICBwb3MgPSAwO1xyXG4gICAgICAgIGZsZFZhbExlbiA9IGl0ZW1WYWwubGVuZ3RoO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICBsZXQgbnVsbENoclBvczogbnVtYmVyID0gaXRlbVZhbC5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoMCksIHBvcyk7XHJcbiAgICAgICAgICBpZiAobnVsbENoclBvcyA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdmFsdWVTaXplID0gKGZsZFZhbExlbiAtIHBvcykudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIC8vIGFkZCBsZWFkaW5nIHplcm9zIChpZiBuZWVkZWQpXHJcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA0IC0gdmFsdWVTaXplLmxlbmd0aDsgaisrKVxyXG4gICAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoJzAnKTtcclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCh2YWx1ZVNpemUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBvcyA+IDApXHJcbiAgICAgICAgICAgICAgaXRlbVZhbCA9IGl0ZW1WYWwuc3Vic3RyKHBvcywgKGZsZFZhbExlbikgLSAocG9zKSk7XHJcblxyXG4gICAgICAgICAgICBwb3MgPSBmbGRWYWxMZW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gSWYgTlVMTCBjaGFycyBleGlzdCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB2YWx1ZSAtIGNyZWF0ZSBhIHNwYW5uZWQgcmVjb3JkXHJcbiAgICAgICAgICAgIC8vIFR1cm4gb24gdGhlIGhpZ2ggbW9zdCBiaXQgaW4gdGhlIGxlbmd0aCAodG8gaW5kaWNhdGUgYSBzZWdtZW50KVxyXG4gICAgICAgICAgICB2YWx1ZVNpemUgPSAobnVsbENoclBvcyAtIHBvcyArIDB4ODAwMCkudG9TdHJpbmcgKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoaXRlbVZhbC5zdWJzdHIocG9zLCAobnVsbENoclBvcykgLSAocG9zKSkpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ291bnQgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIE5VTEwgY2hhcnMsIGFuZCBhZGQgdGhlaXIgY291bnQgdG8gWE1MXHJcbiAgICAgICAgICAgIGZvciAoaiA9IDE7IGogPCBmbGRWYWxMZW4gLSBudWxsQ2hyUG9zICYmIGl0ZW1WYWwuY2hhckNvZGVBdChudWxsQ2hyUG9zICsgaikgPT09IDA7IGorKykge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGFkZCBsZWFkaW5nIHplcm9zIChpZiBuZWVkZWQpXHJcbiAgICAgICAgICAgIHZhbHVlU2l6ZSA9IFwiMDAwMFwiICsgKGoudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZS5zdWJzdHIodmFsdWVTaXplLmxlbmd0aCAtIDQpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFwcGVuZCBhIGhleCBkdW1wIG9mIHNwZWNpYWwgY2hhcnNcclxuICAgICAgICAgICAgZm9yIChwb3MgPSBudWxsQ2hyUG9zOyBqID4gMDsgai0tLCBwb3MrKykge1xyXG4gICAgICAgICAgICAgIGxldCB0bXBTdHI6IHN0cmluZyA9IFwiMFwiICsgaXRlbVZhbC5jaGFyQ29kZUF0KG51bGxDaHJQb3MpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHRtcFN0ci5zdWJzdHIodG1wU3RyLmxlbmd0aCAtIDIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgc3BlY2lhbCBjaGFycyB3ZXJlIGxhc3QsIGFkZCB0aGUgbGVuZ3RoIG9mIHRoZSBsYXN0IHNlZ21lbnQgKHplcm8pXHJcbiAgICAgICAgICAgIGlmIChwb3MgPj0gZmxkVmFsTGVuKSB7XHJcbiAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChcIjAwMDBcIik7XHJcbiAgICAgICAgICAgICAgaXRlbVZhbCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChwb3MgPCBmbGRWYWxMZW4pO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVDpcclxuICAgICAgICBwb3MgPSAwO1xyXG5cclxuICAgICAgICBmbGRWYWxMZW4gPSBpdGVtVmFsLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiYgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgICAgIGlmIChjZWxsQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBjZWxsQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PKSB7XHJcbiAgICAgICAgICAgIGl0ZW1WYWwgPSBWZWN0b3JUeXBlQmFzZS5hZGp1c3RBbHBoYVN0cmluZ3NJbkZsYXREYXRhKGl0ZW1WYWwpO1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIGZsYXQgZGF0YSB3aWxsIGJlIGRpdmlkZWQgYnkgMHgzRkZGIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgICAgIC8vIEVhY2ggc2VnbWVudCB3aWxsIGJlIHNpemUgaW4gMHgzRkZGIH4gMHg3RkZGIGJ5dGVzLlxyXG4gICAgICAgICAgICAvLyBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgREJDUyBjaGFyYWN0ZXJzLCBub3QgZml4ZWQgaW4gMHg3RkZGLlxyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW1WYWwubGVuZ3RoIDwgcG9zICsgMHgzRkZGKVxyXG4gICAgICAgICAgICAgIC8vICgweDgwMDAgLSAxKSAvIDIgPSAweDNGRkZcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zID4gMClcclxuICAgICAgICAgICAgICAgICAgaXRlbVZhbCA9IGl0ZW1WYWwuc3Vic3RyKHBvcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFsdWVTaXplID0gKFV0aWxTdHJCeXRlTW9kZS5sZW5CKGl0ZW1WYWwpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCBsZWFkaW5nIHplcm9zIChpZiBuZWVkZWQpXHJcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNCAtIHZhbHVlU2l6ZS5sZW5ndGg7IGorKylcclxuICAgICAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCgnMCcpO1xyXG4gICAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCh2YWx1ZVNpemUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGhleCBlbmNvZGluZ1xyXG4gICAgICAgICAgICAgICAgaXRlbVZhbCA9ICF0b0Jhc2U2NFxyXG4gICAgICAgICAgICAgICAgICA/IFN0clV0aWwuc3RyaW5nVG9IZXhhRHVtcChpdGVtVmFsLCA0KVxyXG4gICAgICAgICAgICAgICAgICA6IEJhc2U2NC5lbmNvZGUoaXRlbVZhbCwgdHJ1ZSwgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zID0gZmxkVmFsTGVuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBzdHJTdWI6IHN0cmluZyA9IGl0ZW1WYWwuc3Vic3RyKHBvcywgMHgzRkZGKTtcclxuICAgICAgICAgICAgICAgIC8vICsgMHg4MDAwIC4uLiB0byBpbmRpY2F0ZSBub3QgdGhlIGxhc3Qgc2VnbWVudFxyXG4gICAgICAgICAgICAgICAgdmFsdWVTaXplID0gKChVdGlsU3RyQnl0ZU1vZGUubGVuQihzdHJTdWIpICsgMHg4MDAwKS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaGV4IG9yIGJhc2U2NCBlbmNvZGluZ1xyXG4gICAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCghdG9CYXNlNjRcclxuICAgICAgICAgICAgICAgICAgPyBTdHJVdGlsLnN0cmluZ1RvSGV4YUR1bXAoc3RyU3ViLCA0KVxyXG4gICAgICAgICAgICAgICAgICA6IEJhc2U2NC5lbmNvZGUoc3RyU3ViLCB0cnVlLCBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRFbmNvZGluZygpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChcIjAwMDBcIik7XHJcbiAgICAgICAgICAgICAgICBwb3MgKz0gMHgzRkZGO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAocG9zIDwgZmxkVmFsTGVuKSA7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgIGlmIChmbGRWYWxMZW4gPCBwb3MgKyAweDdGRkYpXHJcbiAgICAgICAgICAvLyAweDgwMDAgLTEgPSAweDdGRkZcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWVTaXplID0gKChmbGRWYWxMZW4gLSBwb3MpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgLy8gYWRkIGxlYWRpbmcgemVyb3MgKGlmIG5lZWRlZClcclxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDQgLSB2YWx1ZVNpemUubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCgnMCcpO1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zID4gMClcclxuICAgICAgICAgICAgICBpdGVtVmFsID0gaXRlbVZhbC5zdWJzdHIocG9zLCAoZmxkVmFsTGVuKSAtIChwb3MpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGhleCBlbmNvZGluZ1xyXG4gICAgICAgICAgICBpdGVtVmFsID0gIXRvQmFzZTY0XHJcbiAgICAgICAgICAgICAgPyBTdHJVdGlsLnN0cmluZ1RvSGV4YUR1bXAoaXRlbVZhbCwgNClcclxuICAgICAgICAgICAgICA6IEJhc2U2NC5lbmNvZGUoaXRlbVZhbCwgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKSk7XHJcblxyXG4gICAgICAgICAgICBwb3MgPSBmbGRWYWxMZW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdG8gaW5kaWNhdGUgdGhlIGZ1bGwgc2VnbWVudFxyXG4gICAgICAgICAgICB2YWx1ZVNpemUgPSBcIkZGRkZcIjsgLy8gKEludGVnZXIudG9IZXhTdHJpbmcgKDB4RkZGRikpLnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCh2YWx1ZVNpemUpO1xyXG5cclxuICAgICAgICAgICAgLy8gaGV4IG9yIGJhc2U2NCBlbmNvZGluZ1xyXG4gICAgICAgICAgICBpZiAoIXRvQmFzZTY0KVxyXG4gICAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoU3RyVXRpbC5zdHJpbmdUb0hleGFEdW1wKGl0ZW1WYWwuc3Vic3RyKHBvcywgMHg3RkZGKSwgNCkpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChCYXNlNjQuZW5jb2RlKGl0ZW1WYWwuc3Vic3RyKHBvcywgMHg3RkZGKSwgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKSkpO1xyXG5cclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChcIjAwMDBcIik7XHJcbiAgICAgICAgICAgIHBvcyArPSAweDdGRkY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSB3aGlsZSAocG9zIDwgZmxkVmFsTGVuKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH0gLy8gZW5kIG9mIHRoZSB0eXBlIGNhc2UgYmxvY2tcclxuICAgIHRtcEJ1Zi5BcHBlbmQoaXRlbVZhbCk7XHJcbiAgICByZXR1cm4gdG1wQnVmLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IERlc2VyaWFsaXplcyBhbiBpdGVtJ3MgKGZpZWxkL2dsb2JhbCBwYXJhbS8uLi4pIHZhbHVlIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpdGVtVmFsXCI+aXRlbSdzIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpdGVtQXR0clwiPml0ZW0ncyBhdHRyaWJ1dGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIml0ZW1MZW5cIj5pdGVtJ3MgbGVuZ3RoPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VIZXhcIj5pbmRpY2F0ZXMgd2hldGhlciB0aGUgaXRlbVZhbCBpcyBpbiBIZXggb3IgQmFzZTY0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjZWxsQXR0clwiPmNlbGwncyBhdHRyaWJ1dGUgLSByZWxldmFudCBvbmx5IGlmICdpdGVtQXR0cicgaXMgdmVjdG9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJzZWRMZW5cIj5vdXQgcGFyYW1ldGVyLiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgaXRlbVZhbCBwYXJzZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIGRlU2VyaWFsaXplSXRlbVZhbChpdGVtVmFsOiBzdHJpbmcsIGl0ZW1BdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBpdGVtTGVuOiBudW1iZXIsIHVzZUhleDogYm9vbGVhbiwgY2VsbEF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIHBhcnNlZExlbjogUmVmUGFyYW08bnVtYmVyPik6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgbGV0IGlkeDogbnVtYmVyID0gMDtcclxuICAgIGxldCBsZW46IG51bWJlciwgZW5kSWR4OiBudW1iZXI7XHJcbiAgICBsZXQgc3VmZml4QnVmOiBTdHJpbmdCdWlsZGVyID0gbnVsbDtcclxuICAgIGxldCB0bXA6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgaWYgKGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBXHJcbiAgICAgIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREVcclxuICAgICAgfHwgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQlxyXG4gICAgICB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUlxyXG4gICAgICB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5ET1RORVRcclxuICAgICkge1xyXG4gICAgICAvLyBmaXJzdCA0IGNoYXJhY3RlcnMgYXJlIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAoaGV4IG51bWJlcilcclxuICAgICAgZW5kSWR4ID0gaWR4ICsgNDtcclxuICAgICAgdG1wID0gaXRlbVZhbC5zdWJzdHIoaWR4LCAoZW5kSWR4KSAtIChpZHgpKTtcclxuICAgICAgbGVuID0gTk51bWJlci5QYXJzZSh0bXAsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpO1xyXG4gICAgICBpZHggPSBlbmRJZHg7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKVxyXG4gICAgICBsZW4gPSAxO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBzaWduaWZpY2FudE51bVNpemU6IG51bWJlciA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG4gICAgICBpZiAodXNlSGV4KVxyXG4gICAgICAgIGxlbiA9IHNpZ25pZmljYW50TnVtU2l6ZSAqIDI7XHJcbiAgICAgIGVsc2VcclxuICAgICAgLy8gaWYgd29ya2luZyBpbiBiYXNlNjRcclxuICAgICAgICBsZW4gPSAoTWF0aC5mbG9vcigoc2lnbmlmaWNhbnROdW1TaXplICsgMikgLyAzKSAqIDQpO1xyXG4gICAgfVxyXG4gICAgLy8gT29wcywgZGlkIHdlIGJ1bXBlZCBpbnRvIGEgc3Bhbm5lZCByZWNvcmQgKFdlIGlkZW50aWZ5IGl0IHdoZW4gdGhlIGhpZ2gtbW9zdCBiaXQgaXMgb24pP1xyXG4gICAgaWYgKChsZW4gJiAweDgwMDApID4gMCkge1xyXG4gICAgICBzdWZmaXhCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICBsZW4gPSAobGVuICYgMHg3RkZGKTtcclxuXHJcbiAgICAgIGlmIChpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SXHJcbiAgICAgICAgfHwgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUKVxyXG4gICAgICAgIGlmICh1c2VIZXgpXHJcbiAgICAgICAgICBsZW4gKj0gMjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBsZW4gPSAoTWF0aC5mbG9vcigobGVuICsgMikgLyAzKSAqIDQpO1xyXG5cclxuICAgICAgcGFyc2VkTGVuLnZhbHVlID0gdGhpcy5nZXRTcGFubmVkRmllbGQoaXRlbVZhbCwgbGVuLCBpZHgsIGl0ZW1BdHRyLCBzdWZmaXhCdWYsIHVzZUhleCk7XHJcbiAgICAgIHZhbCA9IHN1ZmZpeEJ1Zi5Ub1N0cmluZygpO1xyXG4gICAgICBlbmRJZHggPSBpZHggKyBwYXJzZWRMZW4udmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JcclxuICAgICAgICB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUlxyXG4gICAgICAgIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVFxyXG4gICAgICApXHJcbiAgICAgICAgaWYgKHVzZUhleClcclxuICAgICAgICAgIGxlbiAqPSAyO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGxlbiA9IChNYXRoLmZsb29yKChsZW4gKyAyKSAvIDMpICogNCk7XHJcblxyXG4gICAgICBlbmRJZHggPSBpZHggKyBsZW47XHJcbiAgICAgIGlmIChlbmRJZHggPiBpdGVtVmFsLmxlbmd0aClcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZmlsbEZpZWxkc0RhdGEoKSBkYXRhIHN0cmluZyB0b28gc2hvcnQ6XFxuXCIgKyBpdGVtVmFsKTtcclxuXHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmIGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgIHZhbCA9IHRoaXMuZ2V0U3RyaW5nKGl0ZW1WYWwuc3Vic3RyKGlkeCwgKGVuZElkeCkgLSAoaWR4KSksIGl0ZW1BdHRyLCB1c2VIZXgsIChjZWxsQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSkpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdmFsID0gdGhpcy5nZXRTdHJpbmcoaXRlbVZhbC5zdWJzdHIoaWR4LCAoZW5kSWR4KSAtIChpZHgpKSwgaXRlbUF0dHIsIHVzZUhleCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWR4ID0gZW5kSWR4O1xyXG5cclxuICAgIGlmIChpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgIGxlbiA9IGl0ZW1MZW47XHJcbiAgICAgIHZhbCA9IFN0clV0aWwucGFkU3RyKHZhbCwgbGVuKTtcclxuXHJcbiAgICAgIGlmIChpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKVxyXG4gICAgICAgIHZhbCA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0Qih2YWwsIGxlbik7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VkTGVuLnZhbHVlID0gZW5kSWR4O1xyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcbiAgc3RhdGljIGdldFN0cmluZyhzdHI6IHN0cmluZywgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IHN0cmluZztcclxuICBzdGF0aWMgZ2V0U3RyaW5nKHN0cjogc3RyaW5nLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCB1c2VIZXg6IGJvb2xlYW4pOiBzdHJpbmc7XHJcbiAgc3RhdGljIGdldFN0cmluZyhzdHI6IHN0cmluZywgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdXNlSGV4OiBib29sZWFuLCB1c2VFbnZDaGFyc2V0OiBib29sZWFuKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBnZXRTdHJpbmcoc3RyOiBzdHJpbmcsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHVzZUhleD86IGJvb2xlYW4sIHVzZUVudkNoYXJzZXQ/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKVxyXG4gICAgICByZXR1cm4gUmVjb3JkVXRpbHMuZ2V0U3RyaW5nXzAoc3RyLCB0eXBlLCB1c2VIZXgpO1xyXG5cclxuICAgIGlmKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpXHJcbiAgICAgIHJldHVybiBSZWNvcmRVdGlscy5nZXRTdHJpbmdfMihzdHIsIHR5cGUpO1xyXG5cclxuICAgIHJldHVybiBSZWNvcmRVdGlscy5nZXRTdHJpbmdfMShzdHIsIHR5cGUsIHVzZUhleCwgdXNlRW52Q2hhcnNldCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+IHJpZ2h0IHN0cmluZyBpbiBjb25maWRlbmNlIHdpdGggdGhlIHR5cGU8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3RyaW5nXzAoc3RyOiBzdHJpbmcsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHVzZUhleDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gUmVjb3JkVXRpbHMuZ2V0U3RyaW5nKHN0ciwgdHlwZSwgdXNlSGV4LCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+IHJpZ2h0IHN0cmluZyBpbiBjb25maWRlbmNlIHdpdGggdGhlIHR5cGU8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3RyaW5nXzEoc3RyOiBzdHJpbmcsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHVzZUhleDogYm9vbGVhbiwgdXNlRW52Q2hhcnNldDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBpZiAodXNlSGV4KSB7XHJcbiAgICAgIGlmICh0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUlxyXG4gICAgICAgIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUKVxyXG4gICAgICAgIHJlc3VsdCA9IFJlY29yZFV0aWxzLmJ5dGVTdHJlYW1Ub1N0cmluZyhzdHIpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUlxyXG4gICAgICAgIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUKVxyXG4gICAgICAgIHJlc3VsdCA9IEJhc2U2NC5kZWNvZGUoc3RyLCB1c2VFbnZDaGFyc2V0ID8gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKSA6IG51bGwpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmVzdWx0ID0gQmFzZTY0LmRlY29kZVRvSGV4KHN0cik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFNwYW5uZWRGaWVsZChmbGRzVmFsOiBzdHJpbmcsIGZpcnN0U2VnTGVuOiBudW1iZXIsIGlkeDogbnVtYmVyLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCByZXN1bHQ6IFN0cmluZ0J1aWxkZXIsIHVzZUhleDogYm9vbGVhbik6IG51bWJlcjtcclxuICBzdGF0aWMgZ2V0U3Bhbm5lZEZpZWxkKGZsZHNWYWw6IFVpbnQ4QXJyYXksIGZpcnN0U2VnTGVuOiBudW1iZXIsIGlkeDogbnVtYmVyLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCByZXN1bHQ6IFN0cmluZ0J1aWxkZXIsIHVzZUhleDogYm9vbGVhbiwgbm9PZlBhY2tldHM6IG51bWJlcik6IG51bWJlcjtcclxuICBzdGF0aWMgZ2V0U3Bhbm5lZEZpZWxkKGZsZHNWYWw6IGFueSwgZmlyc3RTZWdMZW46IG51bWJlciwgaWR4OiBudW1iZXIsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHJlc3VsdDogU3RyaW5nQnVpbGRlciwgdXNlSGV4OiBib29sZWFuLCBub09mUGFja2V0cz86IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNilcclxuICAgICAgcmV0dXJuIFJlY29yZFV0aWxzLmdldFNwYW5uZWRGaWVsZF8wKGZsZHNWYWwsIGZpcnN0U2VnTGVuLCBpZHgsIHR5cGUsIHJlc3VsdCwgdXNlSGV4KTtcclxuXHJcbiAgICByZXR1cm4gUmVjb3JkVXRpbHMuZ2V0U3Bhbm5lZEZpZWxkXzEoZmxkc1ZhbCwgZmlyc3RTZWdMZW4sIGlkeCwgdHlwZSwgcmVzdWx0LCB1c2VIZXgsIG5vT2ZQYWNrZXRzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGUgWE1MIC0+IGZpZWxkIHZhbHVlIGZvciBhIHNwYW5uZWQgQUxQSEEgZmllbGQsIGFuZCByZXR1cm4gdGhlIGFjdHVhbFxyXG4gIC8vLyAgIGZpZWxkJ3MgbGVuZ3RoLiBBIHNwYW5uZWQgZmllbGQgbWF5IGJlIGFjY2VwdGVkIGZyb20gdGhlIHNlcnZlciB3aGVuIGFuXHJcbiAgLy8vICAgQUxQSEEgaW5jbHVkZXMgc3BlY2lhbCBjaGFycyBzdWNoIGFzIE5VTEwgd2hpY2ggY2Fubm90IGJlIGVzY2FwZWQgdXNpbmcgYSAnXFwnIChsaWtlLFxyXG4gIC8vLyAgIGZvciBleGFtcGxlLCAnXFxcIicpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmbGRzVmFsXCI+c3RyaW5nIGZvciBwYXJzaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZpcnN0U2VnTGVuXCI+bGVuZ3RoIChpbiBjaGFycykgb2YgZmlyc3Qgc2VnbWVudC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+aW5kZXggaW4gc3RyaW5nLCBmcm9tIHdoaWNoIHRoZSBmaXJzdCBzZWdtZW50cyBkYXRhIHN0YXJ0cy48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPm9mIHZhcmlhYmxlIGlzIGxvb2tpbmcgZm9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc3VsdFwiPnRoZSByZXN1bHQgc3RyaW5nLCB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIHBhcnNlZCBmaWVsZCBjb250ZW50LjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3Bhbm5lZEZpZWxkXzAoZmxkc1ZhbDogc3RyaW5nLCBmaXJzdFNlZ0xlbjogbnVtYmVyLCBpZHg6IG51bWJlciwgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgcmVzdWx0OiBTdHJpbmdCdWlsZGVyLCB1c2VIZXg6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgbGV0IGVuZElkeDogbnVtYmVyID0gaWR4ICsgZmlyc3RTZWdMZW47XHJcbiAgICBsZXQgbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgYmVnaW46IG51bWJlciA9IGlkeDtcclxuICAgIGxldCBhc2NpaUNvZGU6IHN0cmluZztcclxuICAgIGxldCB0bXA6IHN0cmluZztcclxuICAgIGxldCBzdWZmaXhCdWY6IFN0cmluZ0J1aWxkZXIgPSBudWxsO1xyXG4gICAgbGV0IHBhcnNlZExlbjogbnVtYmVyO1xyXG5cclxuICAgIGlmIChlbmRJZHggPiBmbGRzVmFsLmxlbmd0aCkge1xyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZ2V0U3Bhbm5lZEZpZWxkKCkgZGF0YSBzdHJpbmcgdG9vIHNob3J0OlxcblwiICsgZmxkc1ZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXBwZW5kIGZpcnN0IHNlZ21lbnRcclxuICAgIHJlc3VsdC5SZW1vdmUoMCwgcmVzdWx0Lkxlbmd0aCk7XHJcbiAgICByZXN1bHQuQXBwZW5kKFJlY29yZFV0aWxzLmdldFN0cmluZyhmbGRzVmFsLnN1YnN0cihpZHgsIGVuZElkeCAtIGlkeCksIHR5cGUsIHVzZUhleCkpO1xyXG5cclxuICAgIGlkeCA9IGlkeCArIGZpcnN0U2VnTGVuO1xyXG5cclxuICAgIC8vIG5leHQgNCBjaGFyYWN0ZXJzIGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKGhleCBudW1iZXIpIG9mIHNwZWNpYWwgYnl0ZXMuXHJcbiAgICBlbmRJZHggPSBpZHggKyA0O1xyXG4gICAgdG1wID0gZmxkc1ZhbC5zdWJzdHIoaWR4LCBlbmRJZHggLSBpZHgpO1xyXG4gICAgbGVuID0gTk51bWJlci5QYXJzZSh0bXAsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpO1xyXG4gICAgaWR4ID0gZW5kSWR4O1xyXG5cclxuICAgIC8vIGlmIHdvcmtpbmcgaW4gaGV4XHJcbiAgICBpZiAodXNlSGV4KVxyXG4gICAgICBlbmRJZHggPSBpZHggKyBsZW4gKiAyO1xyXG4gICAgZWxzZVxyXG4gICAgICBlbmRJZHggPSBpZHggKyBNYXRoLmZsb29yKChsZW4gKyAyKSAvIDMgKSAqIDQ7XHJcblxyXG4gICAgaWYgKGVuZElkeCA+IGZsZHNWYWwubGVuZ3RoKVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZ2V0U3Bhbm5lZEZpZWxkKCkgZGF0YSBzdHJpbmcgdG9vIHNob3J0OlxcblwiICsgZmxkc1ZhbCk7XHJcblxyXG4gICAgLy8gYXBwZW5kIHNwZWNpYWwgY2hhcnMsIG9uZSBieSBvbmVcclxuICAgIHdoaWxlIChpZHggPCBlbmRJZHgpIHtcclxuICAgICAgdG1wID0gZmxkc1ZhbC5zdWJzdHIoaWR4LCAyKTtcclxuICAgICAgYXNjaWlDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZShOTnVtYmVyLlBhcnNlKHRtcCwgTnVtYmVyU3R5bGVzLkhleE51bWJlcikpO1xyXG4gICAgICByZXN1bHQuQXBwZW5kKGFzY2lpQ29kZSk7XHJcbiAgICAgIGlkeCA9IGlkeCArIDI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbmV4dCA0IGNoYXJzIGFyZSB0aGUgbGVuZ3RoIG9mIG5leHQgc2VnbWVudFxyXG4gICAgZW5kSWR4ID0gaWR4ICsgNDtcclxuICAgIHRtcCA9IGZsZHNWYWwuc3Vic3RyKGlkeCwgZW5kSWR4IC0gaWR4KTtcclxuICAgIGxlbiA9IE5OdW1iZXIuUGFyc2UodG1wLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKTtcclxuICAgIGlkeCA9IGVuZElkeDtcclxuXHJcbiAgICBpZiAoKGxlbiAmIDB4ODAwMCkgPiAwKSB7XHJcbiAgICAgIC8vIE9vcHMsIG5leHQgc2VnbWVudCBtYXkgYWxzbyBiZSBzcGFubmVkXHJcbiAgICAgIHN1ZmZpeEJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgIGxlbiA9IChsZW4gJiAweDdGRkYpO1xyXG5cclxuICAgICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgIGlmICh1c2VIZXgpXHJcbiAgICAgICAgICBsZW4gPSBsZW4gKiAyO1xyXG4gICAgICAgIC8vIHdvcmtpbmcgaW4gYmFzZTY0XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgbGVuID0gTWF0aC5mbG9vcigobGVuICsgMikgLyAzKSAqIDQ7XHJcblxyXG4gICAgICBwYXJzZWRMZW4gPSBSZWNvcmRVdGlscy5nZXRTcGFubmVkRmllbGQoZmxkc1ZhbCwgbGVuLCBpZHgsIHR5cGUsIHN1ZmZpeEJ1ZiwgdXNlSGV4KTtcclxuICAgICAgLy8gYWZ0ZXIgdXNpbmcgcmVjdXJzaXZlIGZ1bmN0aW9uIHRlaCBzdWZmaXhCdWYgaXMgaW4gdGhlIHJpZ2h0IHRyYW5zZm9ybWVkIGZvcm1cclxuICAgICAgcmVzdWx0LkFwcGVuZChzdWZmaXhCdWYuVG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICBpZHggPSBpZHggKyBwYXJzZWRMZW47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgIGlmICh1c2VIZXgpXHJcbiAgICAgICAgICBsZW4gPSBsZW4gKiAyO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGxlbiA9IE1hdGguZmxvb3IoKGxlbiArIDIpIC8gMykgKiA0O1xyXG5cclxuICAgICAgLy8gbmV4dCBzZWdtZW50IGlzbid0IHNwYW5uZWQuIEl0IG11c3QgYmUgdGhlIGxhc3Qgb25lLlxyXG4gICAgICBlbmRJZHggPSBpZHggKyBsZW47XHJcbiAgICAgIGlmIChlbmRJZHggPiBmbGRzVmFsLmxlbmd0aClcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZmlsbEZpZWxkc0RhdGEoKSBkYXRhIHN0cmluZyB0b28gc2hvcnQ6XFxuXCIgKyBmbGRzVmFsKTtcclxuXHJcbiAgICAgIHJlc3VsdC5BcHBlbmQoUmVjb3JkVXRpbHMuZ2V0U3RyaW5nKGZsZHNWYWwuc3Vic3RyKGlkeCwgZW5kSWR4IC0gaWR4KSwgdHlwZSwgdXNlSGV4KSk7XHJcbiAgICAgIGlkeCA9IGVuZElkeDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaWR4IC0gYmVnaW47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRyYW5zbGF0ZSB2YWx1ZSBvZiB0aGUgc3Bhbm5lZCBmaWVsZCB0byBhY3R1YWwgdmFsdWUuIEZpZWxkIHZhbHVlIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBvZiBsZW5ndGggYW5kIGRhdGFcclxuICAvLy8gWyAoTGVuZ3RoIHwgZGF0YSkgKChMZW5ndGggfCBkYXRhKSkuLi4uLl1cclxuICAvLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgbGVuZ3RoIGFuZCBkYXRhIG9mIGVhY2ggcGFja2V0IGFuZCByZXR1cm4gYWN0dWFsIHZhbHVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmxkc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmlyc3RTZWdMZW5cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlkeFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidHlwZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzdWx0XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VIZXhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5vT2ZQYWNrZXRzXCI+IFRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgZnJvbSB0aGUgc2VydmVyPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGdldFNwYW5uZWRGaWVsZF8xKGZsZHNWYWw6IFVpbnQ4QXJyYXksIGZpcnN0U2VnTGVuOiBudW1iZXIsIGlkeDogbnVtYmVyLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCByZXN1bHQ6IFN0cmluZ0J1aWxkZXIsIHVzZUhleDogYm9vbGVhbiwgbm9PZlBhY2tldHM6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgZW5kSWR4OiBudW1iZXIgPSBpZHggKyBmaXJzdFNlZ0xlbjtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBiZWdpbjogbnVtYmVyID0gaWR4O1xyXG4gICAgbGV0IHRtcDogc3RyaW5nO1xyXG4gICAgbGV0IHN1ZmZpeEJ1ZjogU3RyaW5nQnVpbGRlciA9IG51bGw7XHJcbiAgICBsZXQgcGFyc2VkTGVuOiBudW1iZXI7XHJcbiAgICBsZXQgdG1wRW5jOiBFbmNvZGluZztcclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKVxyXG4gICAgICB0bXBFbmMgPSBJU09fODg1OV8xX0VuY29kaW5nLklTT184ODU5XzE7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRtcEVuYyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldEVuY29kaW5nKCk7XHJcblxyXG4gICAgaWYgKGVuZElkeCA+IGZsZHNWYWwubGVuZ3RoKVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZ2V0U3Bhbm5lZEZpZWxkKCkgZGF0YSBzdHJpbmcgdG9vIHNob3J0OlxcblwiICsgZmxkc1ZhbCk7XHJcblxyXG4gICAgLy8gYXBwZW5kIGZpcnN0IHNlZ21lbnRcclxuICAgIHJlc3VsdC5SZW1vdmUoMCwgcmVzdWx0Lkxlbmd0aCk7XHJcbiAgICByZXN1bHQuQXBwZW5kKHRtcEVuYy5HZXRTdHJpbmcoZmxkc1ZhbCwgaWR4LCBmaXJzdFNlZ0xlbikpO1xyXG4gICAgbm9PZlBhY2tldHMgPSBub09mUGFja2V0cyAtIDE7XHJcblxyXG4gICAgaWYgKG5vT2ZQYWNrZXRzIDw9IDApXHJcbiAgICAgIHJldHVybiAwO1xyXG5cclxuICAgIGlkeCA9IGlkeCArIGZpcnN0U2VnTGVuO1xyXG5cclxuICAgIC8vIG5leHQgNCBjaGFyYWN0ZXJzIGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKGhleCBudW1iZXIpIG9mIHNwZWNpYWwgYnl0ZXMuXHJcbiAgICBlbmRJZHggPSBpZHggKyA0O1xyXG4gICAgdG1wID0gdG1wRW5jLkdldFN0cmluZyhmbGRzVmFsLCBpZHgsIDQpO1xyXG4gICAgbGVuID0gTk51bWJlci5QYXJzZSh0bXAsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpO1xyXG4gICAgaWR4ID0gZW5kSWR4O1xyXG5cclxuICAgIGlmIChlbmRJZHggPiBmbGRzVmFsLmxlbmd0aClcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUmVjb3JkLmdldFNwYW5uZWRGaWVsZCgpIGRhdGEgc3RyaW5nIHRvbyBzaG9ydDpcXG5cIiArIGZsZHNWYWwpO1xyXG5cclxuICAgIC8vIG5leHQgNCBjaGFycyBhcmUgdGhlIGxlbmd0aCBvZiBuZXh0IHNlZ21lbnRcclxuICAgIGVuZElkeCA9IGlkeCArIDQ7XHJcbiAgICB0bXAgPSB0bXBFbmMuR2V0U3RyaW5nKGZsZHNWYWwsIGlkeCwgNCk7XHJcbiAgICBsZW4gPSBOTnVtYmVyLlBhcnNlKHRtcCwgTnVtYmVyU3R5bGVzLkhleE51bWJlcik7XHJcbiAgICBpZHggPSBlbmRJZHg7XHJcblxyXG4gICAgaWYgKChsZW4gJiAweDgwMDApID4gMCkge1xyXG4gICAgICAvLyBPb3BzLCBuZXh0IHNlZ21lbnQgbWF5IGFsc28gYmUgc3Bhbm5lZFxyXG4gICAgICBzdWZmaXhCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG5cclxuICAgICAgcGFyc2VkTGVuID0gUmVjb3JkVXRpbHMuZ2V0U3Bhbm5lZEZpZWxkKGZsZHNWYWwsIGxlbiwgaWR4LCB0eXBlLCBzdWZmaXhCdWYsIHVzZUhleCwgbm9PZlBhY2tldHMpO1xyXG4gICAgICAvLyBhZnRlciB1c2luZyByZWN1cnNpdmUgZnVuY3Rpb24gdGVoIHN1ZmZpeEJ1ZiBpcyBpbiB0aGUgcmlnaHQgdHJhbnNmb3JtZWQgZm9ybVxyXG4gICAgICByZXN1bHQuQXBwZW5kKHN1ZmZpeEJ1Zi5Ub1N0cmluZygpKTtcclxuICAgICAgaWR4ID0gaWR4ICsgcGFyc2VkTGVuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIG5leHQgc2VnbWVudCBpc24ndCBzcGFubmVkLiBJdCBtdXN0IGJlIHRoZSBsYXN0IG9uZS5cclxuICAgICAgZW5kSWR4ID0gaWR4ICsgbGVuO1xyXG4gICAgICBpZiAoZW5kSWR4ID4gZmxkc1ZhbC5sZW5ndGgpXHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUmVjb3JkLmZpbGxGaWVsZHNEYXRhKCkgZGF0YSBzdHJpbmcgdG9vIHNob3J0OlxcblwiICsgZmxkc1ZhbCk7XHJcblxyXG4gICAgICByZXN1bHQuQXBwZW5kKHRtcEVuYy5HZXRTdHJpbmcoZmxkc1ZhbCwgaWR4LCBsZW4pKTtcclxuICAgICAgaWR4ID0gZW5kSWR4O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpZHggLSBiZWdpbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXJpYWxpemUgYW4gaXRlbSAoZmllbGQvZ2xvYmFsIHBhcmFtLy4uLikgdG8gYW4gWE1MIGZvcm1hdCAoYXBwbGljYWJsZSB0byBiZSBwYXNzZWQgdG8gdGhlIHNlcnZlcikuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPml0ZW0ncyB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpdGVtQXR0clwiPml0ZW0ncyBhdHRyaWJ1dGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2VsbEF0dHJcIj5jZWxsJ3MgYXR0cmlidXRlIC0gcmVsZXZhbnQgb25seSBpZiAnaXRlbUF0dHInIGlzIHZlY3RvcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJUb0Jhc2U2NFwiPj5kZWNpZGUgQmFzZTY0IGVuY29kaW5nIGlzIHRvIGJlIGRvbmU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5zZXJpYWxpemVkIFhNTCBmb3JtYXQ8L3JldHVybnM+XHJcbiAgc3RhdGljIGl0ZW1WYWxUb1hNTChpdGVtVmFsOiBzdHJpbmcsIGl0ZW1BdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBjZWxsQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgVG9CYXNlNjQ6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IHRtcEJ1Zjogc3RyaW5nID0gUmVjb3JkVXRpbHMuc2VyaWFsaXplSXRlbVZhbChpdGVtVmFsLCBpdGVtQXR0ciwgY2VsbEF0dHIsIFRvQmFzZTY0KTtcclxuICAgIHJldHVybiBYbWxQYXJzZXIuZXNjYXBlKHRtcEJ1ZikudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gZ2V0IHRoZSBhY3R1YWwgc3RyaW5nIGFjY29yZGluZyB0byAndHlwZSc8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldFN0cmluZ18yKHN0cjogc3RyaW5nLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlKTogc3RyaW5nIHtcclxuICAgIGxldCB1c2VIZXg6IGJvb2xlYW4gPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWJ1Z0xldmVsKCkgPiAxIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEFcclxuICAgICAgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8IFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVMb2dpY2FsKHR5cGUpO1xyXG5cclxuICAgIC8vIGZpcnN0IDQgY2hhcmFjdGVycyBhcmUgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIChoZXggbnVtYmVyKVxyXG4gICAgbGV0IHRtcDogc3RyaW5nO1xyXG4gICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8XHJcbiAgICAgIHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIHRtcCA9IHN0ci5zdWJzdHIoNCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRtcCA9IHN0cjtcclxuXHJcbiAgICByZXR1cm4gUmVjb3JkVXRpbHMuZ2V0U3RyaW5nKHRtcCwgdHlwZSwgdXNlSGV4KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -1 +1,2 @@
1
+ export {};
1
2
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUFjdGlvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZXZlbnRzL0lBY3Rpb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHN1bW1hcnk+XHJcbi8vLyBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkIGJ5IHRoZSBHVUkgbmFtZXNwYWNlIGZyb20gdGhlIEFjdGlvbk1hbmFnZXIgY2xhc3MuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvbk1hbmFnZXIge1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIGFjdGlvbiBlbmFibGVkIG9yIGRpc2FibGVkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFjdFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJlbmFibGVcIj48L3BhcmFtPlxyXG4gIGVuYWJsZShhY3Q6IG51bWJlciwgZW5hYmxlOiBib29sZWFuKTogdm9pZDtcclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhY3RcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiB0aGUgYWN0aW9uIGlzIGVuYWJsZWQgb3IgZmFsc2UgaWYgaXQgaXMgbm90PC9yZXR1cm5zPlxyXG4gIGlzRW5hYmxlZChhY3Q6IG51bWJlcik6IGJvb2xlYW47XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYWN0XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGFjdENvdW50IGZvciB0aGUgc3BlY2lmaWMgYWN0aW9uPC9yZXR1cm5zPlxyXG4gIGdldEFjdENvdW50KGFjdDogbnVtYmVyKTogbnVtYmVyO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyBhY3Rpb24gbGlzdCBlbmFibGVkIG9yIGRpc2FibGVkLlxyXG4gIC8vLyAgIG9ubHlJZkNoYW5nZWQgd2FzIGFkZGVkIGluIG9yZGVyIHRvIGF2b2lkIG1hbnkgdXBkYXRlcyB0byBtZW51cyAobGlrZSBpbiBjdXQvY29weSksXHJcbiAgLy8vICAgZXNwZWNpYWxseSB3aGVuIHRoZSByZXF1ZXN0IGNvbWVzIGFzIGFuIGludGVybmFsIGFjdCBmcm9tIHRoZSBndWkgdGhyZWFkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhY3RcIj5hcnJheSBvZiBhY3Rpb25zPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImVuYWJsZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvbmx5SWZDaGFuZ2VkXCI+OiBjYWxsIGVuYWJsZSBvbmx5IGlmIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZC48L3BhcmFtPlxyXG4gIGVuYWJsZUxpc3QoYWN0OiBudW1iZXJbXSwgZW5hYmxlOiBib29sZWFuLCBvbmx5SWZDaGFuZ2VkOiBib29sZWFuKTogdm9pZDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGVuYWJsZSBvciBkaXNhYmxlIGFjdGlvbnMgZm9yIG5hdmlnYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZW5hYmxlXCI+PC9wYXJhbT5cclxuICBlbmFibGVOYXZpZ2F0aW9uQWN0aW9ucyhlbmFibGU6IGJvb2xlYW4pOiB2b2lkO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUd1aUV2ZW50c01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZXZlbnRzL0lHdWlFdmVudHNNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01nQ29udHJvbEJhc2V9IGZyb20gXCIuLi9ndWkvTWdDb250cm9sQmFzZVwiO1xyXG5pbXBvcnQge1ByaW9yaXR5fSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge01nRm9ybUJhc2V9IGZyb20gXCIuLi9ndWkvTWdGb3JtQmFzZVwiO1xyXG5pbXBvcnQge01vZGlmaWVyc30gZnJvbSBcIi4uLy4uL0d1aUVudW1zXCI7XHJcbmltcG9ydCB7SVRhc2t9IGZyb20gXCIuLi90YXNrcy9JVGFza1wiO1xyXG5pbXBvcnQge0tleWJvYXJkSXRlbX0gZnJvbSBcIi4uLy4uL2d1aS9LZXlib2FyZEl0ZW1cIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgdGhlIEdVSSBuYW1lc3BhY2UgZnJvbSB0aGUgRXZlbnRzTWFuYWdlciBjbGFzcy5cclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGludGVyZmFjZSBJR3VpRXZlbnRzTWFuYWdlciB7XHJcbiAgLy8vIDxzdW1tYXJ5Pjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJEaXNwbGF5TGluZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29kZVwiPjwvcGFyYW0+XHJcbiAgYWRkSW50ZXJuYWxFdmVudFdpdGhDdHJsQW5kRGlzcGxheUxpbmVBbmRDb2RlKGN0cmw6IE1nQ29udHJvbEJhc2UsIERpc3BsYXlMaW5lOiBudW1iZXIsIGNvZGU6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicHJpb3JpdHlcIj48L3BhcmFtPlxyXG4gIGFkZEludGVybmFsRXZlbnRXaXRoQ3RybEFuZENvZGVBbmRQcmlvcml0eShjdHJsOiBNZ0NvbnRyb2xCYXNlLCBjb2RlOiBudW1iZXIsIHByaW9yaXR5OiBQcmlvcml0eSk6IHZvaWQ7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm9ybVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibW9kaWZpZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImtleUNvZGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0YXJ0XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJlbmRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRleHRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImltXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc0FjdENoYXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN1Z2dlc3RlZFZhbHVlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb2RlXCI+PC9wYXJhbT5cclxuICBBZGRLZXlib2FyZEV2ZW50KGZvcm06IE1nRm9ybUJhc2UsIGN0cmw6IE1nQ29udHJvbEJhc2UsIG1vZGlmaWVyOiBNb2RpZmllcnMsIGtleUNvZGU6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHRleHQ6IHN0cmluZywgaXNBY3RDaGFyOiBib29sZWFuLCBzdWdnZXN0ZWRWYWx1ZTogc3RyaW5nLCBjb2RlOiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IEFkZCBpbnRlcm5hbCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgR1VJIHF1ZXVlIHRvIHRoZSBxdWV1ZSA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgYWRkR3VpVHJpZ2dlcmVkRXZlbnRXaXRoQ3RybEFuZENvZGVBbmRMaW5lKGN0cmw6IE1nQ29udHJvbEJhc2UsIGNvZGU6IG51bWJlciwgbGluZTogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBBZGQgaW50ZXJuYWwgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IEdVSSBxdWV1ZSB0byB0aGUgcXVldWUgPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0cmxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvZGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIGFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aEN0cmxBbmRDb2RlQW5kTGluZUFuZE1vZGlmaWVyKGN0cmw6IE1nQ29udHJvbEJhc2UsIGNvZGU6IG51bWJlciwgbGluZTogbnVtYmVyKTogdm9pZDtcclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQWRkIGludGVybmFsIGV2ZW50IHRoYXQgd2FzIHRyaWdnZXJlZCBieSBHVUkgcXVldWUgdG8gdGhlIHF1ZXVlIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb2RlXCI+PC9wYXJhbT5cclxuICBhZGRHdWlUcmlnZ2VyZWRFdmVudFdpdGhUYXNrQW5kQ29kZSh0YXNrOiBJVGFzaywgY29kZTogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBBZGQgaW50ZXJuYWwgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IEdVSSBxdWV1ZSB0byB0aGUgcXVldWUgPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRhc2tcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvZGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIGFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aFRhc2tBbmRDb2RlQW5kTGluZSh0YXNrOiBJVGFzaywgY29kZTogbnVtYmVyLCBsaW5lOiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEFkZCBpbnRlcm5hbCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgR1VJIHF1ZXVlIHRvIHRoZSBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFza1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib25NdWx0aU1hcmtcIj4gdHJ1ZSBpZiBtdXRpbWFyayBjb250aW51ZXM8L3BhcmFtPlxyXG4gIGFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aFRhc2tBbmRDb2RlQW5kT25NdWx0aU1hcmsodGFzazogSVRhc2ssIGNvZGU6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQWRkIGludGVybmFsIGV2ZW50IHRoYXQgd2FzIHRyaWdnZXJlZCBieSBHVUkgcXVldWUgdG8gdGhlIHF1ZXVlIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb2RlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyYWlzZWRCeVwiPjwvcGFyYW0+XHJcbiAgYWRkR3VpVHJpZ2dlcmVkRXZlbnRUYXNrQW5kQ29kZUFuZFJhaXNlZEJ5KHRhc2s6IElUYXNrLCBjb2RlOiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IGhhbmRsZSBDb2x1bW4gQ2xpY2sgZXZlbnQgb24gQ29sdW1uIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb2x1bW5DdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkaXJlY3Rpb25cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbHVtbkhlYWRlclwiPjwvcGFyYW0+XHJcbiAgQWRkQ29sdW1uQ2xpY2tFdmVudChjb2x1bW5DdHJsOiBNZ0NvbnRyb2xCYXNlLCBkaXJlY3Rpb246IG51bWJlciwgY29sdW1uSGVhZGVyOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwia2JJdG1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxhc3QgZW5hYmxlZCBhY3Rpb24gZm9yIHRoZSBzcGVjaWZpYyBrZXkgKGluIGtiSXRlbSk8L3JldHVybnM+XHJcbiAgLy8vIDxjaGVja0FjY2Vzc0tleUluTWVudXM6PiAgaWYgdG8gY2hlY2sgdGhlIGtleWJvYXJkIGluIHRoZSBtZW51IDwvY2hlY2tBY2Nlc3NLZXlJbk1lbnVzOj5cclxuICBnZXRNYXRjaGluZ0FjdGlvbigga2JJdG06IEtleWJvYXJkSXRlbSk6IG51bWJlcjtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBcImlnbm9yZSB1bmtub3duIGFib3J0XCIgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaWdub3JlVW5rbm93bkFib3J0KCk6IGJvb2xlYW47XHJcbn1cclxuIl19