@magic-xpa/gui 4.801.0-dev481.290 → 4.801.0-dev481.298

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.
@@ -1,7 +1,6 @@
1
1
  import { ApplicationException, NString } from '@magic-xpa/mscorelib';
2
2
  import { Rtf, StorageAttribute, StorageAttributeCheck, StrUtil } from '@magic-xpa/utils';
3
3
  import { Manager } from '../../Manager';
4
- import { Commands } from '../../Commands';
5
4
  import { NUM_TYPE } from '../data/NUM_TYPE';
6
5
  import { BlobType } from '../data/BlobType';
7
6
  import { DisplayConvertor } from '../gui/DisplayConvertor';
@@ -35,23 +34,11 @@ export class GuiExpressionEvaluator {
35
34
  IsParallel() {
36
35
  return false;
37
36
  }
38
- eval_op_browserExecute_DO(resVal, controlName, text, sync, language) {
39
- resVal.Attr = StorageAttribute.BOOLEAN;
40
- resVal.BoolVal = false;
41
- let form = this.ExpTask.getForm();
42
- let sCtrlName = StrUtil.rtrim(controlName.StrVal);
43
- let control = this.ExpTask.getForm().GetCtrl(sCtrlName);
44
- if (control !== null && control.isBrowserControl()) {
45
- resVal.BoolVal = Commands.browserExecute(control, text.StrVal, sync.BoolVal, language);
46
- }
47
- }
48
37
  eval_op_ctrl_name(resVal) {
49
38
  let lastClickedCtrlName = Manager.GetCurrentRuntimeContext().LastClickedCtrlName;
50
39
  resVal.StrVal = (NString.IsNullOrEmpty(lastClickedCtrlName) ? '' : lastClickedCtrlName);
51
40
  resVal.Attr = StorageAttribute.ALPHA;
52
41
  }
53
- eval_op_formStateClear(formName, resVal) {
54
- }
55
42
  eval_op_gotoCtrl(ctrlName, rowNum, generation, retVal) {
56
43
  retVal.Attr = StorageAttribute.BOOLEAN;
57
44
  retVal.BoolVal = false;
@@ -210,19 +197,6 @@ export class GuiExpressionEvaluator {
210
197
  }
211
198
  }
212
199
  }
213
- eval_op_win_help(expFilePath, expHelpCmd, expHelpKey, resVal) {
214
- let filePath = expFilePath.StrVal;
215
- let helpCmd = expHelpCmd.MgNumVal.NUM_2_LONG();
216
- let helpKey = expHelpKey.StrVal;
217
- resVal.Attr = StorageAttribute.BOOLEAN;
218
- try {
219
- Manager.ShowWindowHelp(filePath, helpCmd, helpKey);
220
- resVal.BoolVal = true;
221
- }
222
- catch (ex) {
223
- resVal.BoolVal = false;
224
- }
225
- }
226
200
  ConvertExpVal(val, expectedType) {
227
201
  if (StorageAttributeCheck.StorageFldAlphaUnicodeOrBlob(val.Attr, expectedType)) {
228
202
  this.BlobStringConversion(val, expectedType);
@@ -330,4 +304,4 @@ export class ExpVal {
330
304
  return (this.Attr === StorageAttribute.ALPHA || this.Attr === StorageAttribute.UNICODE) && this.StrVal === '';
331
305
  }
332
306
  }
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9leHAvR3VpRXhwcmVzc2lvbkV2YWx1YXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQVEsT0FBTyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFjLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUdoSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3RDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHMUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRzFDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE1BQU0sT0FBZ0Isc0JBQXNCO0lBMlUxQztRQXpVQSxZQUFPLEdBQWdCLElBQUksQ0FBQztRQUNwQixXQUFNLEdBQVEsSUFBSSxDQUFDO0lBMFUzQixDQUFDO0lBN1RELDBCQUEwQixDQUFDLE1BQWMsRUFBRSxhQUFxQjtRQUM5RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBRXBFLElBQUksT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ3BCO2FBQU07WUFDTCxNQUFNLENBQUMsTUFBTSxHQUFH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M0IsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7WUFDbEMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDbEIsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQzlCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtnQkFDeEIsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU07WUFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU87Z0JBQzNCLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTztvQkFDaEIsQ0FBQyxDQUFDLEdBQUc7b0JBQ0wsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDUixNQUFNO1lBRVI7Z0JBQ0UsR0FBRyxHQUFHLHNCQUFzQixHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUMvQyxNQUFNO1NBQ1Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFNRCxhQUFhO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7SUFDaEgsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcHBsaWNhdGlvbkV4Y2VwdGlvbiwgTGlzdCwgTlN0cmluZ30gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge0hlbHBDb21tYW5kLCBSdGYsIFN0b3JhZ2VBdHRyaWJ1dGUsIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjaywgU3RyVXRpbCwgVXRpbEltZUpwbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7R3VpVGFza0Jhc2V9IGZyb20gJy4uL3Rhc2tzL0d1aVRhc2tCYXNlJztcclxuaW1wb3J0IHtJVGFza30gZnJvbSAnLi4vdGFza3MvSVRhc2snO1xyXG5pbXBvcnQge01hbmFnZXJ9IGZyb20gJy4uLy4uL01hbmFnZXInO1xyXG5pbXBvcnQge01nRm9ybUJhc2V9IGZyb20gJy4uL2d1aS9NZ0Zvcm1CYXNlJztcclxuaW1wb3J0IHtNZ0NvbnRyb2xCYXNlfSBmcm9tICcuLi9ndWkvTWdDb250cm9sQmFzZSc7XHJcbmltcG9ydCB7Q29tbWFuZHN9IGZyb20gJy4uLy4uL0NvbW1hbmRzJztcclxuaW1wb3J0IHtOVU1fVFlQRX0gZnJvbSAnLi4vZGF0YS9OVU1fVFlQRSc7XHJcbmltcG9ydCB7R3VpRmllbGRCYXNlfSBmcm9tICcuLi9kYXRhL0d1aUZpZWxkQmFzZSc7XHJcblxyXG5pbXBvcnQge0Jsb2JUeXBlfSBmcm9tICcuLi9kYXRhL0Jsb2JUeXBlJztcclxuaW1wb3J0IHtWYWxpZGF0aW9uRGV0YWlsc30gZnJvbSAnLi4vZ3VpL1ZhbGlkYXRpb25EZXRhaWxzJztcclxuaW1wb3J0IHtQSUN9IGZyb20gJy4uL2d1aS9QSUMnO1xyXG5pbXBvcnQge0Rpc3BsYXlDb252ZXJ0b3J9IGZyb20gJy4uL2d1aS9EaXNwbGF5Q29udmVydG9yJztcclxuXHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VpRXhwcmVzc2lvbkV2YWx1YXRvciB7XHJcbiAgc3RhdGljIFRSSUdHRVJfVEFTSzogbnVtYmVyID0gNTAwMDAwO1xyXG4gIEV4cFRhc2s6IEd1aVRhc2tCYXNlID0gbnVsbDtcclxuICBwcml2YXRlIEV2ZW50czogYW55ID0gbnVsbDtcclxuXHJcbiAgYWJzdHJhY3QgR2V0VG9wTW9zdEZvcm1zKCk6IExpc3Q8TWdGb3JtQmFzZT47XHJcblxyXG4gIGFic3RyYWN0IEhhbmRsZUNvbnRyb2xHb3RvKHRhc2s6IElUYXNrLCBjdHJsOiBNZ0NvbnRyb2xCYXNlLCByb3dObzogbnVtYmVyKTogYm9vbGVhbjtcclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBzZXRzIHRoZSBzdGF0dXMgYmFyIHRleHQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCBhbmRcclxuICAvLy8gc2V0cyB0aGUgcmVzdWx0IHdpdGggdGhlIGxhc3QgdGV4dCB0aGF0IHdhcyBzZXQgdG8gdGhlIHN0YXR1cyBiYXIgYnkgdGhlIHVzZSBvZiB0aGlzIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPmxhc3QgdGV4dCBvZiBzdGF0dXMgYmFyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXR1c0JhclRleHRcIj50aGUgdGV4dCB0byBiZSBzZXQgYXQgc3RhdHVzIGJhcjwvcGFyYW0+XHJcbiAgZXZhbF9vcF9zdGF0dXNiYXJfc2V0X3RleHQocmVzVmFsOiBFeHBWYWwsIHN0YXR1c0JhclRleHQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5EZWZhdWx0U3RhdHVzTXNnO1xyXG5cclxuICAgIGlmIChNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2cgPT09IG51bGwpIHtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRGVmYXVsdFN0YXR1c01zZztcclxuICAgIH1cclxuICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIShzdGF0dXNCYXJUZXh0LkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgJiYgc3RhdHVzQmFyVGV4dC5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgIGlmICghc3RhdHVzQmFyVGV4dC5Jc051bGwpIHtcclxuICAgICAgICBsZXQgdGV4dDogc3RyaW5nID0gc3RhdHVzQmFyVGV4dC5TdHJWYWw7XHJcbiAgICAgICAgbGV0IHRhc2s6IEd1aVRhc2tCYXNlID0gPEd1aVRhc2tCYXNlPnRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpO1xyXG5cclxuICAgICAgICAvLyBJbiBjYXNlIG9mIG5vbiBpbnRlcmFjdGl2ZSB0YXNrcywgaXQgaXMgcG9zc2libGUgdGhhdCB0YXNrIGhhcyBvcGVuIHdpbmRvdyA9IE5vLCBTbyBkaXNwbGF5IHRoZSBzdGF0dXMgYmFyIG1zZyBvbiBmcmFtZSB3aW5kb3cuXHJcbiAgICAgICAgaWYgKHRhc2suZ2V0Rm9ybSgpID09PSBudWxsICYmIE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRnJhbWVGb3JtICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0YXNrID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5GcmFtZUZvcm0uZ2V0VGFzaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0YXNrLldyaXRlVG9NZXNzYWdlUGFuZSh0ZXh0KTtcclxuICAgICAgICBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2cgPSB0ZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgSXNQYXJhbGxlbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBldmFsX29wX2Jyb3dzZXJFeGVjdXRlX0RPKHJlc1ZhbDogRXhwVmFsLCBjb250cm9sTmFtZTogRXhwVmFsLCB0ZXh0OiBFeHBWYWwsIHN5bmM6IEV4cFZhbCwgbGFuZ3VhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGJyb3dzZXIgY29udHJvbCBieSB0aGUgY29udHJvbCBuYW1lXHJcbiAgICBsZXQgZm9ybTogTWdGb3JtQmFzZSA9IHRoaXMuRXhwVGFzay5nZXRGb3JtKCk7XHJcbiAgICBsZXQgc0N0cmxOYW1lOiBzdHJpbmcgPSBTdHJVdGlsLnJ0cmltKGNvbnRyb2xOYW1lLlN0clZhbCk7XHJcbiAgICBsZXQgY29udHJvbDogTWdDb250cm9sQmFzZSA9IHRoaXMuRXhwVGFzay5nZXRGb3JtKCkuR2V0Q3RybChzQ3RybE5hbWUpO1xyXG4gICAgaWYgKGNvbnRyb2wgIT09IG51bGwgJiYgY29udHJvbC5pc0Jyb3dzZXJDb250cm9sKCkpIHtcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSBDb21tYW5kcy5icm93c2VyRXhlY3V0ZShjb250cm9sLCB0ZXh0LlN0clZhbCwgc3luYy5Cb29sVmFsLCBsYW5ndWFnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gcmV0dXJuIHRoZSBjb250cm9sIG5hbWUgb2YgbGFzdCBjbGlja2VkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGV2YWxfb3BfY3RybF9uYW1lKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbGFzdENsaWNrZWRDdHJsTmFtZTogc3RyaW5nID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5MYXN0Q2xpY2tlZEN0cmxOYW1lO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IChOU3RyaW5nLklzTnVsbE9yRW1wdHkobGFzdENsaWNrZWRDdHJsTmFtZSkgPyAnJyA6IGxhc3RDbGlja2VkQ3RybE5hbWUpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vICAgQ2xlYXJzIHRoZSBmb3JtIHVzZXIgc3RhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvcm1OYW1lXCI+Zm9ybSBuYW1lIChjdXJyZW50IGZvcm0oJycpIC9hbGwgZm9ybXMoKikpIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+c3VjY2VlZCBvciBmYWlsZWQ8L3BhcmFtPlxyXG4gIGV2YWxfb3BfZm9ybVN0YXRlQ2xlYXIoZm9ybU5hbWU6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBNb3ZlcyB0aGUgY2FyZXQgdG8gc3BlY2lmaWVkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybE5hbWVcIj50aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyb3dOdW1cIj50aGUgcm93IGluIHRoZSB0YWJsZSAgMCByZXByZXNlbnRzIGN1cnJlbnQgcm93PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImdlbmVyYXRpb25cIj50aGUgdGFzayBnZW5lcmF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJldFZhbFwiPnRoZSByZXN1bHQ8L3BhcmFtPlxyXG4gIGV2YWxfb3BfZ290b0N0cmwoY3RybE5hbWU6IEV4cFZhbCwgcm93TnVtOiBFeHBWYWwsIGdlbmVyYXRpb246IEV4cFZhbCwgcmV0VmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJldFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmV0VmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IHRoaXMuR2V0Q29udGV4dFRhc2soZ2VuZXJhdGlvbi5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgaWYgKHRhc2sgPT09IG51bGwgfHwgdGFzay5nZXRGb3JtKCkgPT09IG51bGwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgaVJvd051bTogbnVtYmVyID0gcm93TnVtLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBzQ3RybE5hbWU6IHN0cmluZyA9IFN0clV0aWwucnRyaW0oY3RybE5hbWUuU3RyVmFsKTtcclxuICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlID0gdGFzay5nZXRGb3JtKCkuR2V0Q3RybChzQ3RybE5hbWUpO1xyXG4gICAgcmV0VmFsLkJvb2xWYWwgPSB0aGlzLkhhbmRsZUNvbnRyb2xHb3RvKHRhc2ssIGN0cmwsIGlSb3dOdW0pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIGdldCBjb250ZXh0IHRhc2sgYnkgYSBzcGVjaWZpZWQgZ2VuZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdXJyVGFza1wiPmN1cnJlbnQgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJnZW5lcmF0aW9uXCI+dGFzayBnZW5lcmF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRhc2sgYXQgc3BlY2lmaWVkIGdlbmVyYXRpb248L3JldHVybnM+XHJcbiAgc3RhdGljIEdldENvbnRleHRUYXNrKGN1cnJUYXNrOiBHdWlUYXNrQmFzZSwgZ2VuZXJhdGlvbjogbnVtYmVyKTogR3VpVGFza0Jhc2Uge1xyXG4gICAgbGV0IHRhc2s6IEd1aVRhc2tCYXNlID0gbnVsbDtcclxuICAgIGxldCB0YXNrQmFzZTogR3VpVGFza0Jhc2UgPSA8R3VpVGFza0Jhc2U+IGN1cnJUYXNrLkdldENvbnRleHRUYXNrKCk7XHJcbiAgICBpZiAoZ2VuZXJhdGlvbiA9PT0gR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgdGFzayA9IHRhc2tCYXNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGdlbmVyYXRpb24gPCB0YXNrQmFzZS5HZXRUYXNrRGVwdGgoKSkge1xyXG4gICAgICAgIHRhc2sgPSA8R3VpVGFza0Jhc2U+dGFza0Jhc2UuR2V0VGFza0FuY2VzdG9yKGdlbmVyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBnZXQgY29udGV4dCB0YXNrIGJ5IGEgc3BlY2lmaWVkIGdlbmVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZ2VuZXJhdGlvblwiPnRhc2sgZ2VuZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0YXNrIGF0IHNwZWNpZmllZCBnZW5lcmF0aW9uPC9yZXR1cm5zPlxyXG4gIEdldENvbnRleHRUYXNrKGdlbmVyYXRpb246IG51bWJlcik6IEd1aVRhc2tCYXNlIHtcclxuICAgIHJldHVybiBHdWlFeHByZXNzaW9uRXZhbHVhdG9yLkdldENvbnRleHRUYXNrKHRoaXMuRXhwVGFzaywgZ2VuZXJhdGlvbik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gQ3JlYXRlIGEgTlVNX1RZUEUgd2l0aCB0aGUgdmFsdWUgb2YgaSBhbmQgc2V0IHRoZSBFeHBWYWwgd2l0aCBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsOiBFeHBWYWwsIGk6IG51bWJlciwgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhpKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gYXR0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHVibGljKVxyXG4gIC8vLyBzZXQgbnVsbCB2YWx1ZSB0byBFeHByZXNzaW9uIEV2YWx1YXRvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj50byBzZXQgaXQgTlVMTDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhdHRyXCI+YXR0cmlidXRlIG9mIEV4cFZhbHVlPC9wYXJhbT5cclxuICBTZXROVUxMKHJlc1ZhbDogRXhwVmFsLCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gYXR0cjtcclxuXHJcbiAgICBzd2l0Y2ggKGF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN1cnJDdHJsXCI+Y29udHJvbCB3aG9zZSB2YWx1ZSBuZWVkIHRvIGJlIGV2YWx1YXRlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvbGRWYWx1ZVwiPm9sZCB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdWYWx1ZVwiPm5ldyB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgR2V0VmFsaWRhdGVkVmFsdWUoY3VyckN0cmw6IE1nQ29udHJvbEJhc2UsIG9sZFZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHZkOiBWYWxpZGF0aW9uRGV0YWlscyA9IGN1cnJDdHJsLmJ1aWxkQ29weVBpY3R1cmUob2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIHZkLmV2YWx1YXRlKCk7XHJcbiAgICBsZXQgdmFsaWRhdGlvbkZhaWxlZDogYm9vbGVhbiA9IHZkLlZhbGlkYXRpb25GYWlsZWQ7XHJcbiAgICBsZXQgY3RybFZhbHVlOiBzdHJpbmc7XHJcbiAgICBpZiAodmFsaWRhdGlvbkZhaWxlZCkge1xyXG4gICAgICBsZXQgZmllbGQ6IEd1aUZpZWxkQmFzZSA9IGN1cnJDdHJsLmdldEZpZWxkKCk7XHJcbiAgICAgIGN0cmxWYWx1ZSA9ICgoZmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSA/IGZpZWxkLmdldENlbGxEZWZ1YWx0VmFsdWUoKSA6IGZpZWxkLmdldERlZmF1bHRWYWx1ZSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0cmxWYWx1ZSA9IHZkLmdldERpc3BWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0cmxWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgZXhwVmFsdWUgb2YgbmVlZGVkIHR5cGUgLiB0aGUgdmFsdWUgaXMgaW5pdGVkIGJ5IHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPm5lZWQgYmUgZXZhbHVhdGVkL2luaXRpYWxpemVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj5vZiByZXNWYWwgKEFscGhhfE51bWVyaWN8TG9naWNhbHxEYXRlfFRpbWV8QmxvYnxWZWN0b3IpPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnN0cmluZy9oZXhhIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj5mb3Igc3RyaW5nIGV2YWx1YXRpb248L3BhcmFtPlxyXG4gIFNldFZhbChyZXNWYWw6IEV4cFZhbCwgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdmFsOiBzdHJpbmcsIHBpYzogUElDKTogdm9pZCB7XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdHlwZTtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICByZXNWYWwuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHR5cGU7XHJcbiAgICAgICAgaWYgKHZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbnVsbDtcclxuICAgICAgICBlbHNlIGlmIChwaWMgPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwsIHBpYywgKHRoaXMuRXhwVGFzaykuZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdHlwZTtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKHZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuU2V0TlVMTChyZXNWYWwsIHR5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLkV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKCdFeHByZXNzaW9uRXZhbHVhdG9yLlNldFZhbCgpIHRoZXJlIGlzIG5vIHN1Y2ggdHlwZSA6ICcgKyB0eXBlKTtcclxuXHJcbiAgICAgICAgLy8gQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coXCJFeHByZXNzaW9uRXZhbHVhdG9yLlNldFZhbCgpIHRoZXJlIGlzIG5vIHN1Y2ggdHlwZSA6IFwiICsgdHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gdHJpbXMgYW5kIHJldHVybnMgdGhlIHN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+Y29udGFpbmluZyBzdHJpbmcgdG8gYmUgdHJpbW1lZCAoc3RyVmFsXyBtZW1iZXIgb2YgRXhwVmFsKTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnRyaW1tZWQgc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBleHBfYnVpbGRfc3RyaW5nKHZhbDogRXhwVmFsKTogc3RyaW5nIHtcclxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSAnJztcclxuICAgIGlmICh2YWwuU3RyVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBsZW46IG51bWJlciA9IDxudW1iZXI+dmFsLlN0clZhbC5sZW5ndGg7XHJcbiAgICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgbmFtZSA9IFN0clV0aWwuWnN0cmluZ01ha2UodmFsLlN0clZhbCwgPG51bWJlcj5sZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2hlY2tzIGlmIHRoZSBvYmplY3QgaXMgaW5zdGFuY2Ugb2YgRXhwVmFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvYmpcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIGlzRXhwVmFsKG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRXhwVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcml2YXRlKVxyXG4gIC8vLyBoYW5kbGUgY29udmVyc2lvbnMgYmV0d2VlbiBibG9iIGFuZCB1bmljb2RlL2FscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4cGVjdGVkVHlwZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBCbG9iU3RyaW5nQ29udmVyc2lvbih2YWw6IEV4cFZhbCwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKGV4cGVjdGVkVHlwZSkpIHtcclxuICAgICAgaWYgKHZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICBsZXQgaW5jbHVkZUJsb2JQcmVmaXg6IGJvb2xlYW4gPSB2YWwuSW5jbHVkZUJsb2JQcmVmaXg7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVCbG9iUHJlZml4KSB7XHJcbiAgICAgICAgICBsZXQgY29udGVudFR5cGU6IHN0cmluZyA9IEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKHZhbC5TdHJWYWwpO1xyXG4gICAgICAgICAgdmFsLlN0clZhbCA9IEJsb2JUeXBlLmdldFN0cmluZyh2YWwuU3RyVmFsKTtcclxuICAgICAgICAgIHZhbC5JbmNsdWRlQmxvYlByZWZpeCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfQklOQVJZICYmIFJ0Zi5pc1J0Zih2YWwuU3RyVmFsKSkge1xyXG4gICAgICAgICAgICB2YWwuU3RyVmFsID0gU3RyVXRpbC5HZXRQbGFpblRleHRmcm9tUnRmKHZhbC5TdHJWYWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwuQXR0ciA9IGV4cGVjdGVkVHlwZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgICAgIGxldCBpbmNsdWRlQmxvYlByZWZpeDI6IGJvb2xlYW4gPSB2YWwuSW5jbHVkZUJsb2JQcmVmaXg7XHJcbiAgICAgICAgICBpZiAoaW5jbHVkZUJsb2JQcmVmaXgyKSB7XHJcbiAgICAgICAgICAgIHZhbC5TdHJWYWwgPSBCbG9iVHlwZS5yZW1vdmVCbG9iUHJlZml4KHZhbC5TdHJWYWwpO1xyXG4gICAgICAgICAgICB2YWwuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhbC5BdHRyID0gZXhwZWN0ZWRUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh2YWwuQXR0cikpIHtcclxuICAgICAgICAgIGxldCBjb250ZW50VHlwZTogc3RyaW5nID0gKHZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKSA/IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9BTlNJIDogQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOSUNPREU7XHJcbiAgICAgICAgICB2YWwuU3RyVmFsID0gQmxvYlR5cGUuY3JlYXRlRnJvbVN0cmluZyh2YWwuU3RyVmFsLCBjb250ZW50VHlwZSk7XHJcbiAgICAgICAgICB2YWwuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgICAgdmFsLkF0dHIgPSBleHBlY3RlZFR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBldmFsX29wX3ppbWVyZWFkKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICBsZXQgdXRpbEltZUpwbjogVXRpbEltZUpwbiA9IE1hbmFnZXIuVXRpbEltZUpwbjtcclxuICAgIGlmICh1dGlsSW1lSnBuICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBzdHJJbWVSZWFkOiBzdHJpbmcgPSB1dGlsSW1lSnBuLlN0ckltZVJlYWQ7XHJcbiAgICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHV0aWxJbWVKcG4uU3RySW1lUmVhZCkpIHtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gc3RySW1lUmVhZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXZhbF9vcF93aW5faGVscChleHBGaWxlUGF0aDogRXhwVmFsLCBleHBIZWxwQ21kOiBFeHBWYWwsIGV4cEhlbHBLZXk6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBmaWxlUGF0aDogc3RyaW5nID0gZXhwRmlsZVBhdGguU3RyVmFsO1xyXG4gICAgbGV0IGhlbHBDbWQ6IEhlbHBDb21tYW5kID0gPEhlbHBDb21tYW5kPmV4cEhlbHBDbWQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgbGV0IGhlbHBLZXk6IHN0cmluZyA9IGV4cEhlbHBLZXkuU3RyVmFsO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgTWFuYWdlci5TaG93V2luZG93SGVscChmaWxlUGF0aCwgaGVscENtZCwgaGVscEtleSk7XHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBDb252ZXJ0RXhwVmFsKHZhbDogRXhwVmFsLCBleHBlY3RlZFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiB2b2lkIHtcclxuICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYih2YWwuQXR0ciwgZXhwZWN0ZWRUeXBlKSkge1xyXG4gICAgICB0aGlzLkJsb2JTdHJpbmdDb252ZXJzaW9uKHZhbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhlIGNsYXNzIGhvbGRzIGRhdGEgb2YgYSBiYXNpYyBlbGVtZW50IChjb25zdGFudCBvciB2YXJpYWJsZSkgdGhhdFxyXG4vLy8gICBhcHBlYXJzIG9yIGFyZSByZXN1bHQgb2YgZXhlY3V0aW9uIG9mIG9wZXJhdG9yXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFeHBWYWwge1xyXG4gIEF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgSXNOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgTWdOdW1WYWw6IE5VTV9UWVBFID0gbnVsbDtcclxuICBTdHJWYWw6IHN0cmluZyA9IG51bGw7XHJcbiAgQm9vbFZhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEluY2x1ZGVCbG9iUHJlZml4OiBib29sZWFuID0gZmFsc2U7XHJcbiAgT3JpZ2luYWxOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgVmVjdG9yRmllbGQ6IEd1aUZpZWxkQmFzZSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3IoYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgaXNOdWxsOiBib29sZWFuLCBtZ1ZhbDogc3RyaW5nKTtcclxuICBjb25zdHJ1Y3RvcihhdHRyPzogU3RvcmFnZUF0dHJpYnV0ZSwgaXNOdWxsPzogYm9vbGVhbiwgbWdWYWw/OiBzdHJpbmcpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEoYXR0ciwgaXNOdWxsLCBtZ1ZhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgICB0aGlzLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEoYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgaXNOdWxsOiBib29sZWFuLCBtZ1ZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLkluaXQoYXR0ciwgaXNOdWxsLCBtZ1ZhbCk7XHJcbiAgfVxyXG5cclxuICBDb3B5KHNyYzogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLkF0dHIgPSBzcmMuQXR0cjtcclxuICAgIHRoaXMuQm9vbFZhbCA9IHNyYy5Cb29sVmFsO1xyXG4gICAgdGhpcy5JbmNsdWRlQmxvYlByZWZpeCA9IHNyYy5JbmNsdWRlQmxvYlByZWZpeDtcclxuICAgIHRoaXMuSXNOdWxsID0gc3JjLklzTnVsbDtcclxuICAgIHRoaXMuTWdOdW1WYWwgPSBzcmMuTWdOdW1WYWw7XHJcbiAgICB0aGlzLlN0clZhbCA9IHNyYy5TdHJWYWw7XHJcbiAgICB0aGlzLlZlY3RvckZpZWxkID0gc3JjLlZlY3RvckZpZWxkO1xyXG4gICAgdGhpcy5PcmlnaW5hbE51bGwgPSBzcmMuT3JpZ2luYWxOdWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBudWxsaWZ5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBOdWxsaWZ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5Jbml0KFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORSwgdHJ1ZSwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5pdGlhbGl6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgSW5pdChhdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBpc051bGw6IGJvb2xlYW4sIG1nVmFsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuQXR0ciA9IGF0dHI7XHJcbiAgICB0aGlzLklzTnVsbCA9IGlzTnVsbDtcclxuXHJcblxyXG4gICAgc3dpdGNoICh0aGlzLkF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICB0aGlzLlN0clZhbCA9IG1nVmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICB0aGlzLlN0clZhbCA9IG1nVmFsO1xyXG4gICAgICAgIHRoaXMuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICB0aGlzLk1nTnVtVmFsID0gKChtZ1ZhbCAhPT0gbnVsbCkgPyBuZXcgTlVNX1RZUEUobWdWYWwpIDogbnVsbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLkJvb2xWYWwgPSAobWdWYWwgIT09IG51bGwgJiYgbWdWYWwgPT09ICcxJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTpcclxuICAgICAgICB0aGlzLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlN0clZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5NZ051bVZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5PcmlnaW5hbE51bGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuVmVjdG9yRmllbGQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5ET1RORVQ6XHJcbiAgICAgICAgLy8gRm9yIGRvdG5ldCBvYmplY3RzLCBFeHBWYWwgc2hvdWxkIGJlIGNvbnN0cnVjdGVkIHVzaW5nIG92ZXJsb2FkZWQgQ29uc3RydWN0b3IuXHJcbiAgICAgICAgLy8gSWYgaXQgaXMgYSBibG9iUHJlZml4LCBpdCBzaG91bGQgYmUgZG9uZSBoZXJlLlxyXG4gICAgICAgIHRoaXMuU3RyVmFsID0gbWdWYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbignaW4gRXhwVmFsLkV4cFZhbCgpIGlsbGVnYWwgYXR0cmlidXRlOiBcXCcnICsgdGhpcy5BdHRyICsgJ1xcJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldHMgdGhlIHN0cmluZyBmb3JtIG9mIHRoZSB2YWx1ZSBpbiB0aGUgRXhwVmFsIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBUb01nVmFsKCk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IHN0cjogc3RyaW5nO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5BdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgc3RyID0gdGhpcy5TdHJWYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIHN0ciA9IHRoaXMuTWdOdW1WYWwudG9YTUxyZWNvcmQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHN0ciA9IHRoaXMuQm9vbFZhbFxyXG4gICAgICAgICAgPyAnMSdcclxuICAgICAgICAgIDogJzAnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBzdHIgPSAnW2lsbGVnYWwgYXR0cmlidXRlOiAnICsgdGhpcy5BdHRyICsgJ10nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0VtcHR5U3RyaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpICYmIHRoaXMuU3RyVmFsID09PSAnJztcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9leHAvR3VpRXhwcmVzc2lvbkV2YWx1YXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQVEsT0FBTyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFjLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUdoSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXRDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUcxQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHMUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHekQsTUFBTSxPQUFnQixzQkFBc0I7SUFBNUM7UUFFRSxZQUFPLEdBQWdCLElBQUksQ0FBQztRQUNwQixXQUFNLEdBQVEsSUFBSSxDQUFDO0lBd1M3QixDQUFDO0lBNVJDLDBCQUEwQixDQUFDLE1BQWMsRUFBRSxhQUFxQjtRQUM5RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBRXBFLElBQUksT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ3BCO2FBQU07WUFDTCxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1NBQ3JF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QUFnQixDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU87b0JBQ2hCLENBQUMsQ0FBQyxHQUFHO29CQUNMLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ1IsTUFBTTtZQUVSO2dCQUNFLEdBQUcsR0FBRyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDL0MsTUFBTTtTQUNUO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBTUQsYUFBYTtRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0lBQ2hILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25FeGNlcHRpb24sIExpc3QsIE5TdHJpbmd9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtIZWxwQ29tbWFuZCwgUnRmLCBTdG9yYWdlQXR0cmlidXRlLCBTdG9yYWdlQXR0cmlidXRlQ2hlY2ssIFN0clV0aWwsIFV0aWxJbWVKcG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge0d1aVRhc2tCYXNlfSBmcm9tICcuLi90YXNrcy9HdWlUYXNrQmFzZSc7XHJcbmltcG9ydCB7SVRhc2t9IGZyb20gJy4uL3Rhc2tzL0lUYXNrJztcclxuaW1wb3J0IHtNYW5hZ2VyfSBmcm9tICcuLi8uLi9NYW5hZ2VyJztcclxuaW1wb3J0IHtNZ0Zvcm1CYXNlfSBmcm9tICcuLi9ndWkvTWdGb3JtQmFzZSc7XHJcbmltcG9ydCB7TWdDb250cm9sQmFzZX0gZnJvbSAnLi4vZ3VpL01nQ29udHJvbEJhc2UnO1xyXG5pbXBvcnQge0NvbW1hbmRzfSBmcm9tICcuLi8uLi9Db21tYW5kcyc7XHJcbmltcG9ydCB7TlVNX1RZUEV9IGZyb20gJy4uL2RhdGEvTlVNX1RZUEUnO1xyXG5pbXBvcnQge0d1aUZpZWxkQmFzZX0gZnJvbSAnLi4vZGF0YS9HdWlGaWVsZEJhc2UnO1xyXG5cclxuaW1wb3J0IHtCbG9iVHlwZX0gZnJvbSAnLi4vZGF0YS9CbG9iVHlwZSc7XHJcbmltcG9ydCB7VmFsaWRhdGlvbkRldGFpbHN9IGZyb20gJy4uL2d1aS9WYWxpZGF0aW9uRGV0YWlscyc7XHJcbmltcG9ydCB7UElDfSBmcm9tICcuLi9ndWkvUElDJztcclxuaW1wb3J0IHtEaXNwbGF5Q29udmVydG9yfSBmcm9tICcuLi9ndWkvRGlzcGxheUNvbnZlcnRvcic7XHJcblxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1aUV4cHJlc3Npb25FdmFsdWF0b3Ige1xyXG4gIHN0YXRpYyBUUklHR0VSX1RBU0s6IG51bWJlciA9IDUwMDAwMDtcclxuICBFeHBUYXNrOiBHdWlUYXNrQmFzZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBFdmVudHM6IGFueSA9IG51bGw7XHJcblxyXG5cclxuICBhYnN0cmFjdCBIYW5kbGVDb250cm9sR290byh0YXNrOiBJVGFzaywgY3RybDogTWdDb250cm9sQmFzZSwgcm93Tm86IG51bWJlcik6IGJvb2xlYW47XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gc2V0cyB0aGUgc3RhdHVzIGJhciB0ZXh0IHdpdGggdGhlIGdpdmVuIHRleHQgYW5kXHJcbiAgLy8vIHNldHMgdGhlIHJlc3VsdCB3aXRoIHRoZSBsYXN0IHRleHQgdGhhdCB3YXMgc2V0IHRvIHRoZSBzdGF0dXMgYmFyIGJ5IHRoZSB1c2Ugb2YgdGhpcyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5sYXN0IHRleHQgb2Ygc3RhdHVzIGJhcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0dXNCYXJUZXh0XCI+dGhlIHRleHQgdG8gYmUgc2V0IGF0IHN0YXR1cyBiYXI8L3BhcmFtPlxyXG4gIGV2YWxfb3Bfc3RhdHVzYmFyX3NldF90ZXh0KHJlc1ZhbDogRXhwVmFsLCBzdGF0dXNCYXJUZXh0OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRGVmYXVsdFN0YXR1c01zZztcclxuXHJcbiAgICBpZiAoTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5EZWZhdWx0U3RhdHVzTXNnID09PSBudWxsKSB7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2c7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuSXNOdWxsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCEoc3RhdHVzQmFyVGV4dC5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBICYmIHN0YXR1c0JhclRleHQuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSkge1xyXG4gICAgICBpZiAoIXN0YXR1c0JhclRleHQuSXNOdWxsKSB7XHJcbiAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IHN0YXR1c0JhclRleHQuU3RyVmFsO1xyXG4gICAgICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IDxHdWlUYXNrQmFzZT50aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKTtcclxuXHJcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBub24gaW50ZXJhY3RpdmUgdGFza3MsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGFzayBoYXMgb3BlbiB3aW5kb3cgPSBObywgU28gZGlzcGxheSB0aGUgc3RhdHVzIGJhciBtc2cgb24gZnJhbWUgd2luZG93LlxyXG4gICAgICAgIGlmICh0YXNrLmdldEZvcm0oKSA9PT0gbnVsbCAmJiBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkZyYW1lRm9ybSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGFzayA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRnJhbWVGb3JtLmdldFRhc2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGFzay5Xcml0ZVRvTWVzc2FnZVBhbmUodGV4dCk7XHJcbiAgICAgICAgTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5EZWZhdWx0U3RhdHVzTXNnID0gdGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIElzUGFyYWxsZWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIHJldHVybiB0aGUgY29udHJvbCBuYW1lIG9mIGxhc3QgY2xpY2tlZCBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBldmFsX29wX2N0cmxfbmFtZShyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGxhc3RDbGlja2VkQ3RybE5hbWU6IHN0cmluZyA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuTGFzdENsaWNrZWRDdHJsTmFtZTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAoTlN0cmluZy5Jc051bGxPckVtcHR5KGxhc3RDbGlja2VkQ3RybE5hbWUpID8gJycgOiBsYXN0Q2xpY2tlZEN0cmxOYW1lKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gTW92ZXMgdGhlIGNhcmV0IHRvIHNwZWNpZmllZCBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxOYW1lXCI+dGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicm93TnVtXCI+dGhlIHJvdyBpbiB0aGUgdGFibGUgIDAgcmVwcmVzZW50cyBjdXJyZW50IHJvdzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJnZW5lcmF0aW9uXCI+dGhlIHRhc2sgZ2VuZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXRWYWxcIj50aGUgcmVzdWx0PC9wYXJhbT5cclxuICBldmFsX29wX2dvdG9DdHJsKGN0cmxOYW1lOiBFeHBWYWwsIHJvd051bTogRXhwVmFsLCBnZW5lcmF0aW9uOiBFeHBWYWwsIHJldFZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXRWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJldFZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICBsZXQgdGFzazogR3VpVGFza0Jhc2UgPSB0aGlzLkdldENvbnRleHRUYXNrKGdlbmVyYXRpb24uTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgIGlmICh0YXNrID09PSBudWxsIHx8IHRhc2suZ2V0Rm9ybSgpID09PSBudWxsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IGlSb3dOdW06IG51bWJlciA9IHJvd051bS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgc0N0cmxOYW1lOiBzdHJpbmcgPSBTdHJVdGlsLnJ0cmltKGN0cmxOYW1lLlN0clZhbCk7XHJcbiAgICBsZXQgY3RybDogTWdDb250cm9sQmFzZSA9IHRhc2suZ2V0Rm9ybSgpLkdldEN0cmwoc0N0cmxOYW1lKTtcclxuICAgIHJldFZhbC5Cb29sVmFsID0gdGhpcy5IYW5kbGVDb250cm9sR290byh0YXNrLCBjdHJsLCBpUm93TnVtKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBnZXQgY29udGV4dCB0YXNrIGJ5IGEgc3BlY2lmaWVkIGdlbmVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3VyclRhc2tcIj5jdXJyZW50IHRhc2s8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZ2VuZXJhdGlvblwiPnRhc2sgZ2VuZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0YXNrIGF0IHNwZWNpZmllZCBnZW5lcmF0aW9uPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRDb250ZXh0VGFzayhjdXJyVGFzazogR3VpVGFza0Jhc2UsIGdlbmVyYXRpb246IG51bWJlcik6IEd1aVRhc2tCYXNlIHtcclxuICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IG51bGw7XHJcbiAgICBsZXQgdGFza0Jhc2U6IEd1aVRhc2tCYXNlID0gPEd1aVRhc2tCYXNlPiBjdXJyVGFzay5HZXRDb250ZXh0VGFzaygpO1xyXG4gICAgaWYgKGdlbmVyYXRpb24gPT09IEd1aUV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIHRhc2sgPSB0YXNrQmFzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChnZW5lcmF0aW9uIDwgdGFza0Jhc2UuR2V0VGFza0RlcHRoKCkpIHtcclxuICAgICAgICB0YXNrID0gPEd1aVRhc2tCYXNlPnRhc2tCYXNlLkdldFRhc2tBbmNlc3RvcihnZW5lcmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gZ2V0IGNvbnRleHQgdGFzayBieSBhIHNwZWNpZmllZCBnZW5lcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImdlbmVyYXRpb25cIj50YXNrIGdlbmVyYXRpb248L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGFzayBhdCBzcGVjaWZpZWQgZ2VuZXJhdGlvbjwvcmV0dXJucz5cclxuICBHZXRDb250ZXh0VGFzayhnZW5lcmF0aW9uOiBudW1iZXIpOiBHdWlUYXNrQmFzZSB7XHJcbiAgICByZXR1cm4gR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5HZXRDb250ZXh0VGFzayh0aGlzLkV4cFRhc2ssIGdlbmVyYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIENyZWF0ZSBhIE5VTV9UWVBFIHdpdGggdGhlIHZhbHVlIG9mIGkgYW5kIHNldCB0aGUgRXhwVmFsIHdpdGggaXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIENvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbDogRXhwVmFsLCBpOiBudW1iZXIsIGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoaSk7XHJcbiAgICByZXNWYWwuQXR0ciA9IGF0dHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHB1YmxpYylcclxuICAvLy8gc2V0IG51bGwgdmFsdWUgdG8gRXhwcmVzc2lvbiBFdmFsdWF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+dG8gc2V0IGl0IE5VTEw8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYXR0clwiPmF0dHJpYnV0ZSBvZiBFeHBWYWx1ZTwvcGFyYW0+XHJcbiAgU2V0TlVMTChyZXNWYWw6IEV4cFZhbCwgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgcmVzVmFsLklzTnVsbCA9IHRydWU7XHJcbiAgICByZXNWYWwuQXR0ciA9IGF0dHI7XHJcblxyXG4gICAgc3dpdGNoIChhdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB2YWxpZGF0ZSB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdXJyQ3RybFwiPmNvbnRyb2wgd2hvc2UgdmFsdWUgbmVlZCB0byBiZSBldmFsdWF0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib2xkVmFsdWVcIj5vbGQgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VmFsdWVcIj5uZXcgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIEdldFZhbGlkYXRlZFZhbHVlKGN1cnJDdHJsOiBNZ0NvbnRyb2xCYXNlLCBvbGRWYWx1ZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB2ZDogVmFsaWRhdGlvbkRldGFpbHMgPSBjdXJyQ3RybC5idWlsZENvcHlQaWN0dXJlKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB2ZC5ldmFsdWF0ZSgpO1xyXG4gICAgbGV0IHZhbGlkYXRpb25GYWlsZWQ6IGJvb2xlYW4gPSB2ZC5WYWxpZGF0aW9uRmFpbGVkO1xyXG4gICAgbGV0IGN0cmxWYWx1ZTogc3RyaW5nO1xyXG4gICAgaWYgKHZhbGlkYXRpb25GYWlsZWQpIHtcclxuICAgICAgbGV0IGZpZWxkOiBHdWlGaWVsZEJhc2UgPSBjdXJyQ3RybC5nZXRGaWVsZCgpO1xyXG4gICAgICBjdHJsVmFsdWUgPSAoKGZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikgPyBmaWVsZC5nZXRDZWxsRGVmdWFsdFZhbHVlKCkgOiBmaWVsZC5nZXREZWZhdWx0VmFsdWUoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHJsVmFsdWUgPSB2ZC5nZXREaXNwVmFsdWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjdHJsVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGV4cFZhbHVlIG9mIG5lZWRlZCB0eXBlIC4gdGhlIHZhbHVlIGlzIGluaXRlZCBieSB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5uZWVkIGJlIGV2YWx1YXRlZC9pbml0aWFsaXplZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+b2YgcmVzVmFsIChBbHBoYXxOdW1lcmljfExvZ2ljYWx8RGF0ZXxUaW1lfEJsb2J8VmVjdG9yKTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj5zdHJpbmcvaGV4YSBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+Zm9yIHN0cmluZyBldmFsdWF0aW9uPC9wYXJhbT5cclxuICBTZXRWYWwocmVzVmFsOiBFeHBWYWwsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHZhbDogc3RyaW5nLCBwaWM6IFBJQyk6IHZvaWQge1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHR5cGU7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgcmVzVmFsLkluY2x1ZGVCbG9iUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB0eXBlO1xyXG4gICAgICAgIGlmICh2YWwgPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG51bGw7XHJcbiAgICAgICAgZWxzZSBpZiAocGljID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsLCBwaWMsICh0aGlzLkV4cFRhc2spLmdldENvbXBJZHgoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHR5cGU7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbih2YWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLlNldE5VTEwocmVzVmFsLCB0eXBlKTtcclxuXHJcbiAgICAgICAgdGhpcy5FdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZygnRXhwcmVzc2lvbkV2YWx1YXRvci5TZXRWYWwoKSB0aGVyZSBpcyBubyBzdWNoIHR5cGUgOiAnICsgdHlwZSk7XHJcblxyXG4gICAgICAgIC8vIENsaWVudE1hbmFnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKFwiRXhwcmVzc2lvbkV2YWx1YXRvci5TZXRWYWwoKSB0aGVyZSBpcyBubyBzdWNoIHR5cGUgOiBcIiArIHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIHRyaW1zIGFuZCByZXR1cm5zIHRoZSBzdHJpbmcuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPmNvbnRhaW5pbmcgc3RyaW5nIHRvIGJlIHRyaW1tZWQgKHN0clZhbF8gbWVtYmVyIG9mIEV4cFZhbCk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz50cmltbWVkIHN0cmluZzwvcmV0dXJucz5cclxuICBzdGF0aWMgZXhwX2J1aWxkX3N0cmluZyh2YWw6IEV4cFZhbCk6IHN0cmluZyB7XHJcbiAgICBsZXQgbmFtZTogc3RyaW5nID0gJyc7XHJcbiAgICBpZiAodmFsLlN0clZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgbGVuOiBudW1iZXIgPSA8bnVtYmVyPnZhbC5TdHJWYWwubGVuZ3RoO1xyXG4gICAgICBpZiAobGVuID4gMCkge1xyXG4gICAgICAgIG5hbWUgPSBTdHJVdGlsLlpzdHJpbmdNYWtlKHZhbC5TdHJWYWwsIDxudW1iZXI+bGVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNoZWNrcyBpZiB0aGUgb2JqZWN0IGlzIGluc3RhbmNlIG9mIEV4cFZhbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2JqXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBpc0V4cFZhbChvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEV4cFZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJpdmF0ZSlcclxuICAvLy8gaGFuZGxlIGNvbnZlcnNpb25zIGJldHdlZW4gYmxvYiBhbmQgdW5pY29kZS9hbHBoYVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleHBlY3RlZFR5cGVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgQmxvYlN0cmluZ0NvbnZlcnNpb24odmFsOiBFeHBWYWwsIGV4cGVjdGVkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShleHBlY3RlZFR5cGUpKSB7XHJcbiAgICAgIGlmICh2YWwuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgbGV0IGluY2x1ZGVCbG9iUHJlZml4OiBib29sZWFuID0gdmFsLkluY2x1ZGVCbG9iUHJlZml4O1xyXG4gICAgICAgIGlmIChpbmNsdWRlQmxvYlByZWZpeCkge1xyXG4gICAgICAgICAgbGV0IGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBCbG9iVHlwZS5nZXRDb250ZW50VHlwZSh2YWwuU3RyVmFsKTtcclxuICAgICAgICAgIHZhbC5TdHJWYWwgPSBCbG9iVHlwZS5nZXRTdHJpbmcodmFsLlN0clZhbCk7XHJcbiAgICAgICAgICB2YWwuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0JJTkFSWSAmJiBSdGYuaXNSdGYodmFsLlN0clZhbCkpIHtcclxuICAgICAgICAgICAgdmFsLlN0clZhbCA9IFN0clV0aWwuR2V0UGxhaW5UZXh0ZnJvbVJ0Zih2YWwuU3RyVmFsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsLkF0dHIgPSBleHBlY3RlZFR5cGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgICAgICBsZXQgaW5jbHVkZUJsb2JQcmVmaXgyOiBib29sZWFuID0gdmFsLkluY2x1ZGVCbG9iUHJlZml4O1xyXG4gICAgICAgICAgaWYgKGluY2x1ZGVCbG9iUHJlZml4Mikge1xyXG4gICAgICAgICAgICB2YWwuU3RyVmFsID0gQmxvYlR5cGUucmVtb3ZlQmxvYlByZWZpeCh2YWwuU3RyVmFsKTtcclxuICAgICAgICAgICAgdmFsLkluY2x1ZGVCbG9iUHJlZml4ID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YWwuQXR0ciA9IGV4cGVjdGVkVHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChleHBlY3RlZFR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQikge1xyXG4gICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUodmFsLkF0dHIpKSB7XHJcbiAgICAgICAgICBsZXQgY29udGVudFR5cGU6IHN0cmluZyA9ICh2YWwuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSkgPyBCbG9iVHlwZS5DT05URU5UX1RZUEVfQU5TSSA6IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTklDT0RFO1xyXG4gICAgICAgICAgdmFsLlN0clZhbCA9IEJsb2JUeXBlLmNyZWF0ZUZyb21TdHJpbmcodmFsLlN0clZhbCwgY29udGVudFR5cGUpO1xyXG4gICAgICAgICAgdmFsLkluY2x1ZGVCbG9iUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICAgIHZhbC5BdHRyID0gZXhwZWN0ZWRUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXZhbF9vcF96aW1lcmVhZChyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgbGV0IHV0aWxJbWVKcG46IFV0aWxJbWVKcG4gPSBNYW5hZ2VyLlV0aWxJbWVKcG47XHJcbiAgICBpZiAodXRpbEltZUpwbiAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgc3RySW1lUmVhZDogc3RyaW5nID0gdXRpbEltZUpwbi5TdHJJbWVSZWFkO1xyXG4gICAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh1dGlsSW1lSnBuLlN0ckltZVJlYWQpKSB7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IHN0ckltZVJlYWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgQ29udmVydEV4cFZhbCh2YWw6IEV4cFZhbCwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLlN0b3JhZ2VGbGRBbHBoYVVuaWNvZGVPckJsb2IodmFsLkF0dHIsIGV4cGVjdGVkVHlwZSkpIHtcclxuICAgICAgdGhpcy5CbG9iU3RyaW5nQ29udmVyc2lvbih2YWwsIGV4cGVjdGVkVHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhlIGNsYXNzIGhvbGRzIGRhdGEgb2YgYSBiYXNpYyBlbGVtZW50IChjb25zdGFudCBvciB2YXJpYWJsZSkgdGhhdFxyXG4vLy8gICBhcHBlYXJzIG9yIGFyZSByZXN1bHQgb2YgZXhlY3V0aW9uIG9mIG9wZXJhdG9yXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFeHBWYWwge1xyXG4gIEF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgSXNOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgTWdOdW1WYWw6IE5VTV9UWVBFID0gbnVsbDtcclxuICBTdHJWYWw6IHN0cmluZyA9IG51bGw7XHJcbiAgQm9vbFZhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEluY2x1ZGVCbG9iUHJlZml4OiBib29sZWFuID0gZmFsc2U7XHJcbiAgT3JpZ2luYWxOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgVmVjdG9yRmllbGQ6IEd1aUZpZWxkQmFzZSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3IoYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgaXNOdWxsOiBib29sZWFuLCBtZ1ZhbDogc3RyaW5nKTtcclxuICBjb25zdHJ1Y3RvcihhdHRyPzogU3RvcmFnZUF0dHJpYnV0ZSwgaXNOdWxsPzogYm9vbGVhbiwgbWdWYWw/OiBzdHJpbmcpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEoYXR0ciwgaXNOdWxsLCBtZ1ZhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgICB0aGlzLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEoYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgaXNOdWxsOiBib29sZWFuLCBtZ1ZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLkluaXQoYXR0ciwgaXNOdWxsLCBtZ1ZhbCk7XHJcbiAgfVxyXG5cclxuICBDb3B5KHNyYzogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLkF0dHIgPSBzcmMuQXR0cjtcclxuICAgIHRoaXMuQm9vbFZhbCA9IHNyYy5Cb29sVmFsO1xyXG4gICAgdGhpcy5JbmNsdWRlQmxvYlByZWZpeCA9IHNyYy5JbmNsdWRlQmxvYlByZWZpeDtcclxuICAgIHRoaXMuSXNOdWxsID0gc3JjLklzTnVsbDtcclxuICAgIHRoaXMuTWdOdW1WYWwgPSBzcmMuTWdOdW1WYWw7XHJcbiAgICB0aGlzLlN0clZhbCA9IHNyYy5TdHJWYWw7XHJcbiAgICB0aGlzLlZlY3RvckZpZWxkID0gc3JjLlZlY3RvckZpZWxkO1xyXG4gICAgdGhpcy5PcmlnaW5hbE51bGwgPSBzcmMuT3JpZ2luYWxOdWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBudWxsaWZ5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBOdWxsaWZ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5Jbml0KFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORSwgdHJ1ZSwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5pdGlhbGl6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgSW5pdChhdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBpc051bGw6IGJvb2xlYW4sIG1nVmFsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuQXR0ciA9IGF0dHI7XHJcbiAgICB0aGlzLklzTnVsbCA9IGlzTnVsbDtcclxuXHJcblxyXG4gICAgc3dpdGNoICh0aGlzLkF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICB0aGlzLlN0clZhbCA9IG1nVmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICB0aGlzLlN0clZhbCA9IG1nVmFsO1xyXG4gICAgICAgIHRoaXMuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICB0aGlzLk1nTnVtVmFsID0gKChtZ1ZhbCAhPT0gbnVsbCkgPyBuZXcgTlVNX1RZUEUobWdWYWwpIDogbnVsbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLkJvb2xWYWwgPSAobWdWYWwgIT09IG51bGwgJiYgbWdWYWwgPT09ICcxJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTpcclxuICAgICAgICB0aGlzLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlN0clZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5NZ051bVZhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5PcmlnaW5hbE51bGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuVmVjdG9yRmllbGQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5ET1RORVQ6XHJcbiAgICAgICAgLy8gRm9yIGRvdG5ldCBvYmplY3RzLCBFeHBWYWwgc2hvdWxkIGJlIGNvbnN0cnVjdGVkIHVzaW5nIG92ZXJsb2FkZWQgQ29uc3RydWN0b3IuXHJcbiAgICAgICAgLy8gSWYgaXQgaXMgYSBibG9iUHJlZml4LCBpdCBzaG91bGQgYmUgZG9uZSBoZXJlLlxyXG4gICAgICAgIHRoaXMuU3RyVmFsID0gbWdWYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbignaW4gRXhwVmFsLkV4cFZhbCgpIGlsbGVnYWwgYXR0cmlidXRlOiBcXCcnICsgdGhpcy5BdHRyICsgJ1xcJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldHMgdGhlIHN0cmluZyBmb3JtIG9mIHRoZSB2YWx1ZSBpbiB0aGUgRXhwVmFsIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBUb01nVmFsKCk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IHN0cjogc3RyaW5nO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5BdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgc3RyID0gdGhpcy5TdHJWYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIHN0ciA9IHRoaXMuTWdOdW1WYWwudG9YTUxyZWNvcmQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHN0ciA9IHRoaXMuQm9vbFZhbFxyXG4gICAgICAgICAgPyAnMSdcclxuICAgICAgICAgIDogJzAnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBzdHIgPSAnW2lsbGVnYWwgYXR0cmlidXRlOiAnICsgdGhpcy5BdHRyICsgJ10nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0VtcHR5U3RyaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpICYmIHRoaXMuU3RyVmFsID09PSAnJztcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -606,19 +606,6 @@ class GuiInteractiveBase {
606
606
  this.Invoke();
607
607
  return this._mgValue.boolVal;
608
608
  }
609
- GetSelectedIndice(guiMgControl) {
610
- this._commandType = InteractiveCommandType.GET_SELECTED_INDICE;
611
- this._obj1 = guiMgControl;
612
- this._mgValue = new MgValue();
613
- this.Invoke();
614
- return this._mgValue.str;
615
- }
616
- GetHasIndent(guiMgControl) {
617
- this._commandType = InteractiveCommandType.GET_HASINDENT;
618
- this._obj1 = guiMgControl;
619
- this.Invoke();
620
- return this._boolVal;
621
- }
622
609
  setGetSuggestedValueOfChoiceControlOnTagData(ctrl, line, retSuggestedValue) {
623
610
  this._commandType = InteractiveCommandType.SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA;
624
611
  this._obj2 = ctrl;
@@ -648,20 +635,6 @@ class GuiInteractiveBase {
648
635
  this.Invoke();
649
636
  return this._boolVal;
650
637
  }
651
- browserExecute(browserControl, text, syncExec, language) {
652
- this._commandType = InteractiveCommandType.BROWSER_EXECUTE;
653
- this._obj2 = browserControl;
654
- this._mgValue = new MgValue();
655
- this._mgValue.str = text;
656
- this._mgValue.obj = language;
657
- if (syncExec) {
658
- this.Invoke();
659
- return this._mgValue.boolVal;
660
- }
661
- else {
662
- return true;
663
- }
664
- }
665
638
  messageBox(title, msg, style) {
666
639
  this._commandType = InteractiveCommandType.MESSAGE_BOX;
667
640
  this._mgValue = new MgValue();
@@ -679,57 +652,12 @@ class GuiInteractiveBase {
679
652
  this._mgValue.title = ((title === null) ? '' : title);
680
653
  this.Invoke();
681
654
  }
682
- invokeUDP(contextId) {
683
- this._commandType = InteractiveCommandType.INVOKE_UDPCOMMAND;
684
- this._mgValue = new MgValue();
685
- this._mgValue.obj = contextId;
686
- this.Invoke();
687
- return this._mgValue.number;
688
- }
689
- directoryDialogBox(caption, path, bShowNewFolder) {
690
- this._commandType = InteractiveCommandType.DIRECTORY_DIALOG_BOX;
691
- this._mgValue = new MgValue();
692
- this._mgValue.caption = caption;
693
- this._mgValue.path = path;
694
- this._mgValue.bool1 = bShowNewFolder;
695
- this.Invoke();
696
- return this._mgValue.str;
697
- }
698
- fileOpenDialogBox(title, dirName, fileName, filterNames, checkExists, multiSelect) {
699
- this._commandType = InteractiveCommandType.FILE_OPEN_DIALOG_BOX;
700
- this._mgValue = new MgValue();
701
- this._mgValue.title = title;
702
- this._mgValue.path = dirName;
703
- this._mgValue.str = fileName;
704
- this._mgValue.filter = filterNames;
705
- this._mgValue.boolVal = checkExists;
706
- this._mgValue.bool1 = multiSelect;
707
- this.Invoke();
708
- return this._mgValue.str;
709
- }
710
- fileSaveDialogBox(title, dirName, fileName, filterNames, defaultExtension, overwritePrompt) {
711
- this._commandType = InteractiveCommandType.FILE_SAVE_DIALOG_BOX;
712
- this._mgValue = new MgValue();
713
- this._mgValue.title = title;
714
- this._mgValue.path = dirName;
715
- this._mgValue.str = fileName;
716
- this._mgValue.filter = filterNames;
717
- this._mgValue.caption = defaultExtension;
718
- this._mgValue.bool1 = overwritePrompt;
719
- this.Invoke();
720
- return this._mgValue.str;
721
- }
722
655
  createDialog(handle, parameters) {
723
656
  this._commandType = InteractiveCommandType.CREATE_DIALOG;
724
657
  this._parameters = parameters;
725
658
  this._obj2 = handle;
726
659
  this.Invoke();
727
660
  }
728
- closeDialog(handle) {
729
- this._commandType = InteractiveCommandType.CLOSE_DIALOG;
730
- this._obj2 = handle;
731
- this.Invoke();
732
- }
733
661
  setEditText(control, line, text) {
734
662
  this._commandType = InteractiveCommandType.SET_EDIT_TEXT;
735
663
  this._obj2 = control;
@@ -749,23 +677,6 @@ class GuiInteractiveBase {
749
677
  this.Invoke();
750
678
  return this._mgValue.boolVal;
751
679
  }
752
- setSelection(control, line, start, end, caretPos) {
753
- this._commandType = InteractiveCommandType.SET_SELECTION;
754
- this._obj2 = control;
755
- this._line = line;
756
- this._x = start;
757
- this._y = end;
758
- this._mgValue = new MgValue();
759
- this._mgValue.number = caretPos;
760
- this.Invoke();
761
- }
762
- setSuggestedValue(control, suggestedValue) {
763
- this._commandType = InteractiveCommandType.SET_SUGGESTED_VALUE;
764
- this._obj2 = control;
765
- this._mgValue = new MgValue();
766
- this._mgValue.str = suggestedValue;
767
- this.Invoke();
768
- }
769
680
  caretPosGet(control, line) {
770
681
  this._commandType = InteractiveCommandType.GET_CARET_POS;
771
682
  this._obj2 = control;
@@ -781,20 +692,6 @@ class GuiInteractiveBase {
781
692
  this.Invoke();
782
693
  return;
783
694
  }
784
- getIsTopOfTextBox(control, line) {
785
- this._commandType = InteractiveCommandType.GET_IS_TOP_OF_TEXTBOX;
786
- this._obj2 = control;
787
- this._line = line;
788
- this.Invoke();
789
- return this._boolVal;
790
- }
791
- getIsEndOfTextBox(control, line) {
792
- this._commandType = InteractiveCommandType.GET_IS_END_OF_TEXTBOX;
793
- this._obj2 = control;
794
- this._line = line;
795
- this.Invoke();
796
- return this._boolVal;
797
- }
798
695
  postKeyEvent(control, line, keys, PostChar, forceLogicalControlTextUpdate) {
799
696
  this._commandType = InteractiveCommandType.POST_KEY_EVENT;
800
697
  this._obj2 = control;
@@ -839,18 +736,6 @@ class GuiInteractiveBase {
839
736
  this.Invoke();
840
737
  return this._intVal1;
841
738
  }
842
- getLastWindowState(guiMgForm) {
843
- this._commandType = InteractiveCommandType.GET_LAST_WINDOW_STATE;
844
- this._obj2 = guiMgForm;
845
- this.Invoke();
846
- return this._intVal1;
847
- }
848
- getLinkedParentIdx(frameset) {
849
- this._commandType = InteractiveCommandType.GET_LINKED_PARENT_IDX;
850
- this._obj2 = frameset;
851
- this.Invoke();
852
- return this._intVal1;
853
- }
854
739
  getColumnsState(tableCtrl) {
855
740
  this._commandType = InteractiveCommandType.GET_COLUMNS_STATE;
856
741
  this._obj2 = tableCtrl;
@@ -858,46 +743,11 @@ class GuiInteractiveBase {
858
743
  this.Invoke();
859
744
  return this._mgValue.listOfIntArr;
860
745
  }
861
- MapWidget(newObjectToSet) {
862
- if (arguments.length === 1)
863
- this.MapWidget_0(newObjectToSet);
864
- else
865
- this.MapWidget_1();
866
- }
867
- MapWidget_0(newObjectToSet) {
868
- this._commandType = InteractiveCommandType.MAP_WIDGET_TO_GUI_OBJECT;
869
- this._obj1 = newObjectToSet;
870
- this.Invoke();
871
- }
872
746
  ActivateForm(guiMgForm) {
873
747
  this._commandType = InteractiveCommandType.ACTIVATE_FORM;
874
748
  this._obj1 = guiMgForm;
875
749
  this.Invoke();
876
750
  }
877
- isFormActive() {
878
- if (arguments.length === 1)
879
- return this.isFormActive_0();
880
- else
881
- this.isFormActive_1();
882
- }
883
- isFormActive_0() {
884
- return this._boolVal;
885
- }
886
- GetRtfValueBeforeEnteringControl(guiMgControl, line) {
887
- this._commandType = InteractiveCommandType.GET_RTF_VALUE_BEFORE_ENTERING_CONTROL;
888
- this._obj2 = guiMgControl;
889
- this._line = line;
890
- this._mgValue = new MgValue();
891
- this.Invoke();
892
- return this._mgValue.str;
893
- }
894
- GetDVControlPositionIsn(dataTable, line) {
895
- this._commandType = InteractiveCommandType.GET_DVCONTROL_POSITION_ISN;
896
- this._obj1 = dataTable;
897
- this._line = line;
898
- this.Invoke();
899
- return this._intVal1;
900
- }
901
751
  ClearDatatable(dvControl, dataTable) {
902
752
  this._commandType = InteractiveCommandType.CLEAR_DATA_TABLE;
903
753
  this._obj1 = dvControl;
@@ -942,107 +792,10 @@ class GuiInteractiveBase {
942
792
  this.TaskTag = '0';
943
793
  UIBridge.getInstance().ExecuteInteractiveCommand(this);
944
794
  }
945
- OnRemoveDNControlValueChangedHandler() {
946
- Events.WriteExceptionToLog('RemoveDNControlValueChangedHandler - Not Implemented Yet');
947
- }
948
- OnAddDNControlValueChangedHandler() {
949
- Events.WriteExceptionToLog('AddDNControlValueChangedHandler - Not Implemented Yet');
950
- }
951
- OnGetRtfValueBeforeEnteringControl() {
952
- Events.WriteExceptionToLog('OnGetOrgRtfValue - Not Implemented Yet');
953
- }
954
- onInvokeUDP() {
955
- }
956
- onFileOpenDialogBox() {
957
- }
958
- onFileSaveDialogBox() {
959
- }
960
- onCreateDialog() {
961
- }
962
- onOpenDialog() {
963
- }
964
- onCloseDialog() {
965
- }
966
- isFormActive_1() {
967
- }
968
- onDisposeAllForms() {
969
- }
970
- onGetFontMetrics() {
971
- }
972
- onGetResolution() {
973
- }
974
- onCaretPosGet() {
975
- }
976
- onGetIsTopOfTextBox() {
977
- return this._boolVal;
978
- }
979
- onGetIsEndOfTextBox() {
980
- return this._boolVal;
981
- }
982
- onSelectionGet() {
983
- }
984
- onSetEditText() {
985
- }
986
- onInsertEditText() {
987
- }
988
- onSetBrowserText() {
989
- }
990
- onSetSelection() {
991
- }
992
- onSetSuggestedValue() {
993
- }
994
795
  onGetRowsInPage() {
995
796
  }
996
- onGetHiddenRowsCountInTable() {
997
- }
998
- onGetTopIndex() {
999
- }
1000
- getClientBounds_1() {
1001
- }
1002
- onPostKeyEvent() {
1003
- }
1004
- onPostCharEvent() {
1005
- }
1006
- OnSetGetSuggestedValueOfChoiceControlOnTagData() {
1007
- }
1008
- onSendImeMsg() {
1009
- }
1010
- onSetCursor() {
1011
- }
1012
- invokeRequired() {
1013
- return false;
1014
- }
1015
- onGetLastWindowState() {
1016
- }
1017
- onGetLinkedParentIdx() {
1018
- }
1019
- onGetColumnsState() {
1020
- }
1021
- onCanFocus() {
1022
- }
1023
- OnGetSelectedIndice() {
1024
- }
1025
- OnGetHasIndent() {
1026
- }
1027
- MapWidget_1() {
1028
- }
1029
- OnGetDVControlPositionIsn() {
1030
- }
1031
- OnActivateForm() {
1032
- }
1033
- OnIsComboDroppedDowndState() {
1034
- }
1035
797
  }
1036
- GuiInteractiveBase.lockObject = null;
1037
798
  class GuiInteractive extends GuiInteractiveBase {
1038
- OnGetRtfValueBeforeEnteringControl() {
1039
- }
1040
- onGetBrowserText() {
1041
- }
1042
- onBrowserExecute() {
1043
- }
1044
- onDirectoryDialogBox() {
1045
- }
1046
799
  constructor() {
1047
800
  super();
1048
801
  }
@@ -1687,18 +1440,6 @@ class Commands {
1687
1440
  let guiInteractive = new GuiInteractive();
1688
1441
  return guiInteractive.getIsRowEditing(tablecontrol, rowIndex, isLineMode);
1689
1442
  }
1690
- static browserExecute(browserControl, text, syncExec, language) {
1691
- let guiInteractive = new GuiInteractive();
1692
- return guiInteractive.browserExecute(browserControl, text, syncExec, language);
1693
- }
1694
- static directoryDialogBox(caption, path, bShowNewFolder) {
1695
- let guiInteractive = new GuiInteractive();
1696
- return guiInteractive.directoryDialogBox(caption, path, bShowNewFolder);
1697
- }
1698
- static fileOpenDialogBox(title, dirName, fileName, filterNames, checkExists, multiSelect) {
1699
- let guiInteractive = new GuiInteractive();
1700
- return guiInteractive.fileOpenDialogBox(title, dirName, fileName, filterNames, checkExists, multiSelect);
1701
- }
1702
1443
  static setEditText(control, line, text) {
1703
1444
  let guiInteractive = new GuiInteractive();
1704
1445
  return guiInteractive.setEditText(control, line, text);
@@ -15936,23 +15677,11 @@ class GuiExpressionEvaluator {
15936
15677
  IsParallel() {
15937
15678
  return false;
15938
15679
  }
15939
- eval_op_browserExecute_DO(resVal, controlName, text, sync, language) {
15940
- resVal.Attr = StorageAttribute.BOOLEAN;
15941
- resVal.BoolVal = false;
15942
- let form = this.ExpTask.getForm();
15943
- let sCtrlName = StrUtil.rtrim(controlName.StrVal);
15944
- let control = this.ExpTask.getForm().GetCtrl(sCtrlName);
15945
- if (control !== null && control.isBrowserControl()) {
15946
- resVal.BoolVal = Commands.browserExecute(control, text.StrVal, sync.BoolVal, language);
15947
- }
15948
- }
15949
15680
  eval_op_ctrl_name(resVal) {
15950
15681
  let lastClickedCtrlName = Manager.GetCurrentRuntimeContext().LastClickedCtrlName;
15951
15682
  resVal.StrVal = (NString.IsNullOrEmpty(lastClickedCtrlName) ? '' : lastClickedCtrlName);
15952
15683
  resVal.Attr = StorageAttribute.ALPHA;
15953
15684
  }
15954
- eval_op_formStateClear(formName, resVal) {
15955
- }
15956
15685
  eval_op_gotoCtrl(ctrlName, rowNum, generation, retVal) {
15957
15686
  retVal.Attr = StorageAttribute.BOOLEAN;
15958
15687
  retVal.BoolVal = false;
@@ -16111,19 +15840,6 @@ class GuiExpressionEvaluator {
16111
15840
  }
16112
15841
  }
16113
15842
  }
16114
- eval_op_win_help(expFilePath, expHelpCmd, expHelpKey, resVal) {
16115
- let filePath = expFilePath.StrVal;
16116
- let helpCmd = expHelpCmd.MgNumVal.NUM_2_LONG();
16117
- let helpKey = expHelpKey.StrVal;
16118
- resVal.Attr = StorageAttribute.BOOLEAN;
16119
- try {
16120
- Manager.ShowWindowHelp(filePath, helpCmd, helpKey);
16121
- resVal.BoolVal = true;
16122
- }
16123
- catch (ex) {
16124
- resVal.BoolVal = false;
16125
- }
16126
- }
16127
15843
  ConvertExpVal(val, expectedType) {
16128
15844
  if (StorageAttributeCheck.StorageFldAlphaUnicodeOrBlob(val.Attr, expectedType)) {
16129
15845
  this.BlobStringConversion(val, expectedType);