oxygen-cli 1.24.3 → 1.24.5-beta.1

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.
@@ -24,6 +24,7 @@ const CDP = require('@oxygenhq/chrome-remote-interface');
24
24
  const CONNECT_RETRIES = 4;
25
25
  const CONNECT_SNOOZE_INTERVAL_MULT = 2;
26
26
  const MAX_DEPTH = 5;
27
+ const IGNORE_SCOPE_CHAIN_VARIABLES = ['exports', 'require', 'module', '__filename', '__dirname'];
27
28
  let maxFindedDepth = 0;
28
29
 
29
30
  const transformToIDEStyle = fileName => {
@@ -39,7 +40,7 @@ const transformToIDEStyle = fileName => {
39
40
  return bpData + _url.default.fileURLToPath(uri);
40
41
  } catch (e) {
41
42
  console.log('transformToIDEStyle fileName', fileName);
42
- console.log('transformToIDEStyle error', e);
43
+ console.error('transformToIDEStyle error', e);
43
44
  throw e;
44
45
  }
45
46
  };
@@ -445,25 +446,19 @@ class Debugger extends EventEmitter {
445
446
  });
446
447
 
447
448
  breakpointsMapResult = breakpointsMapResult.filter(el => !!el);
448
- Promise.all(breakpointsMapResult).then(value => {
449
- let saveValue = value;
450
-
451
- if (saveValue && Array.isArray(saveValue)) {
452
- saveValue = saveValue.filter(el => !!el);
453
- }
454
-
455
- if (saveValue && Array.isArray(saveValue) && saveValue.length > 0) {
449
+ Promise.all(breakpointsMapResult).then(async scopeChainTree => {
450
+ if (scopeChainTree && Array.isArray(scopeChainTree) && scopeChainTree.length > 0) {
451
+ scopeChainTree = scopeChainTree.filter(el => !!el);
456
452
  let breakpointData = null;
457
453
 
458
454
  if (eCallFrames && eCallFrames.length > 0) {
459
455
  breakpointData = {
460
456
  lineNumber: eCallFrames[0].location.lineNumber,
461
- fileName: transformToIDEStyle(eCallFrames[0].url)
457
+ fileName: transformToIDEStyle(eCallFrames[0].url),
458
+ variables: []
462
459
  };
463
-
464
- if (saveValue) {
465
- breakpointData.variables = saveValue;
466
- }
460
+ await this.addVariablesFromScopeChainTree(breakpointData.variables, scopeChainTree);
461
+ await this.addOxygenVariablesFromGlobalScope(breakpointData.variables);
467
462
  }
468
463
 
469
464
  if (this._breakpointErrors && Array.isArray(this._breakpointErrors) && this._breakpointErrors.length > 0) {
@@ -568,8 +563,6 @@ class Debugger extends EventEmitter {
568
563
  });
569
564
  }
570
565
  } else {
571
- console.log('should continue');
572
-
573
566
  if (e.reason === 'OOM') {
574
567
  this.continue();
575
568
  }
@@ -829,6 +822,114 @@ class Debugger extends EventEmitter {
829
822
  await this.reset();
830
823
  }
831
824
 
825
+ async addVariablesFromScopeChainTree(variables, scopeChainTree) {
826
+ if (!Array.isArray(scopeChainTree) || scopeChainTree.length == 0 || !Array.isArray(scopeChainTree[0]) || scopeChainTree[0].length == 0 || !Array.isArray(scopeChainTree[0][0]) || scopeChainTree[0][0].length == 0) {
827
+ return;
828
+ }
829
+
830
+ const {
831
+ objectIdResponse
832
+ } = scopeChainTree[0][0][0];
833
+ const {
834
+ result
835
+ } = objectIdResponse;
836
+
837
+ for (const scopeVar of result) {
838
+ if (!IGNORE_SCOPE_CHAIN_VARIABLES.includes(scopeVar.name)) {
839
+ var value;
840
+ var type;
841
+
842
+ if (scopeVar && scopeVar.value) {
843
+ type = scopeVar.value.type;
844
+
845
+ if (scopeVar.value.value) {
846
+ value = scopeVar.value.value;
847
+ } else {
848
+ value = await this.tryToRetrieveObjectValue(scopeVar.value.objectId);
849
+ }
850
+ }
851
+
852
+ variables.push({
853
+ name: scopeVar.name,
854
+ type: type || 'undefined',
855
+ value
856
+ });
857
+ }
858
+ }
859
+ }
860
+
861
+ async tryToRetrieveObjectValue(objectId) {
862
+ if (!objectId) {
863
+ return undefined;
864
+ }
865
+
866
+ try {
867
+ const {
868
+ result
869
+ } = await this._Runtime.getProperties({
870
+ objectId
871
+ });
872
+
873
+ if (Array.isArray(result) && result.length > 0) {
874
+ const objValue = {};
875
+ result.forEach(propDesc => {
876
+ if (propDesc.value && propDesc.value.value) {
877
+ objValue[propDesc.name] = propDesc.value.value;
878
+ }
879
+ });
880
+ return objValue;
881
+ }
882
+ } catch (e) {
883
+ console.error('Runtime.getProperties call failed', e);
884
+ }
885
+
886
+ return undefined;
887
+ }
888
+
889
+ async addOxygenVariablesFromGlobalScope(variables) {
890
+ const {
891
+ result: poEvalResult
892
+ } = await this._Runtime.evaluate({
893
+ expression: 'po',
894
+ returnByValue: true
895
+ });
896
+ const {
897
+ result: envEvalResult
898
+ } = await this._Runtime.evaluate({
899
+ expression: 'env',
900
+ returnByValue: true
901
+ });
902
+ const {
903
+ result: varsEvalResult
904
+ } = await this._Runtime.evaluate({
905
+ expression: 'vars',
906
+ returnByValue: true
907
+ });
908
+ const {
909
+ result: paramsEvalResult
910
+ } = await this._Runtime.evaluate({
911
+ expression: 'params',
912
+ returnByValue: true
913
+ });
914
+ const results = {
915
+ po: poEvalResult,
916
+ env: envEvalResult,
917
+ vars: varsEvalResult,
918
+ params: paramsEvalResult
919
+ };
920
+ Object.keys(results).forEach(key => {
921
+ const result = results[key];
922
+
923
+ if (result.value) {
924
+ variables.push({
925
+ name: key,
926
+ type: 'object',
927
+ value: result.value
928
+ });
929
+ }
930
+ });
931
+ }
932
+
832
933
  getBreakpoints(filePath) {
833
934
  var bps = [];
834
935
 
@@ -862,4 +963,4 @@ class Debugger extends EventEmitter {
862
963
  }
863
964
 
864
965
  exports.default = Debugger;
865
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZGVidWdnZXIuanMiXSwibmFtZXMiOlsibG9nIiwiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsIkNEUCIsIkNPTk5FQ1RfUkVUUklFUyIsIkNPTk5FQ1RfU05PT1pFX0lOVEVSVkFMX01VTFQiLCJNQVhfREVQVEgiLCJtYXhGaW5kZWREZXB0aCIsInRyYW5zZm9ybVRvSURFU3R5bGUiLCJmaWxlTmFtZSIsInVyaUluZGV4IiwiaW5kZXhPZiIsImJwRGF0YSIsInN1YnN0cmluZyIsInVyaSIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiLCJ1cmwiLCJmaWxlVVJMVG9QYXRoIiwiZSIsImNvbnNvbGUiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImRlbGV0ZVZhbHVlcyIsImFyciIsImRlcHRoIiwicmVzdWx0IiwibWFwIiwiaXRlbSIsInZhbHVlIiwiY2xhc3NOYW1lIiwiY2xvbmVWYWx1ZSIsIk9iamVjdCIsImFzc2lnbiIsIm9iamVjdElkIiwiY2xvbmUiLCJleHRyYWN0QnJlYWtwb2ludERhdGEiLCJicFN0ciIsInBhcnRzIiwic3BsaXQiLCJsaW5lTnVtYmVyIiwicGFyc2VJbnQiLCJzcGxpY2UiLCJqb2luIiwiZXJyb3IiLCJ2YWxpZGF0ZUJyZWFrcG9pbnQiLCJicmVha3BvaW50IiwiYnJPYmoiLCJicmVha3BvaW50SWQiLCJickxpbmVOdW1iZXIiLCJsb2NhdGlvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJickZpbGVOYW1lIiwiaXRlbUxpbmVOdW1iZXIiLCJtc2ciLCJsaW5lIiwiRGVidWdnZXIiLCJjb25zdHJ1Y3RvciIsInBpZCIsIl9waWQiLCJfcG9ydCIsInVuZGVmaW5lZCIsIl9ob3N0IiwiX2JyZWFrcG9pbnRzIiwiX3BlbmRpbmdCUCIsIl9wYXVzZWQiLCJfY2xpZW50IiwiX2ZpbGVOYW1lQWxpYXNlcyIsIl9icmVha3BvaW50RXJyb3JzIiwicmVzZXQiLCJjbG9zZSIsImdldFByb3BlcnRpZXNCeU9iamVjdElkIiwiZWxtIiwiZGF0YSIsIl9SdW50aW1lIiwiZ2V0UHJvcGVydGllcyIsImdldFByb21pY2VBbGxSZXN1bHQiLCJtYXBSZXN1bHRGaWx0ZXJlZCIsInByb21pc2VBbGxQcm9taXNlIiwiYWxsIiwidGhlbiIsImZpbHRlciIsInByb21pc2VzIiwiZ2V0UHJvcGVydGllc1Jlc3VsdCIsIm1hcFJlc3VsdCIsImdldFByb3BlcnRpZXNJbm5lclJlc3VsdCIsInNjb3BlSXRlbSIsIm9iamVjdElkUmVzcG9uc2UiLCJjaGlsZCIsInZhbHVlcyIsInByb2Nlc3NTY29wZSIsInNjb3BlQ2hhaW4iLCJzY29wZUNoYWluUmVzdWx0IiwiY2hhaW4iLCJvYmplY3QiLCJ0eXBlIiwiZWwiLCJwcm9jZXNzQ2FsbEZyYW1lcyIsImNhbGxGcmFtZXMiLCJjYWxsRnJhbWVzTWFwUmVzdWx0IiwiY2FsbEZyYW1lIiwicHJvY2Vzc1Njb3BlUmVzdWx0IiwiaW5CcmVha3BvaW50cyIsIml0ZW1VcmwiLCJicCIsInRvTG93ZXJDYXNlIiwib3JpZ2luIiwic2NyaXB0UGF0aCIsImluRmlsZU5hbWVBbGlhc2VzIiwiYWxpYXMiLCJjb250aW51ZUNvbm5lY3QiLCJvbiIsIm0iLCJmaWxlbGMiLCJicmVha3BvaW50Rm9yQ2hhbmdlIiwiZmluZFJlc3VsdCIsImZpbmQiLCJicmVha3BvaW50bGMiLCJpbmNsdWRlcyIsInB1c2giLCJfRGVidWdnZXIiLCJwYXVzZSIsIm1VcmwiLCJicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbiIsImJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uUmVzdWx0Iiwic2V0QnJlYWtwb2ludCIsInJlc3VtZSIsInJlYXNvbiIsIl9icm9rZU9uU3RhcnQiLCJwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSIsImVDYWxsRnJhbWVzIiwiYnJlYWtwb2ludHNNYXBSZXN1bHQiLCJzY3JpcHRJZCIsImxvY2F0aW9uIiwiaW5pdGlhbERlcHRoIiwidW5pcXVlU2NyaXB0SWRBcnIiLCJmaW5kZWQiLCJlbmRzV2l0aCIsInBvc3NpYmxlQnJlYWtwb2ludHMiLCJnZXRQb3NzaWJsZUJyZWFrcG9pbnRzIiwic2NyaXB0U291cmNlIiwiZ2V0U2NyaXB0U291cmNlIiwic2NyaXB0U291cmNlU3BsaXQiLCJmaWxlTGluZU51bWJlcnNMZW5ndGgiLCJicmVha3BvaW50cyIsImZpbGUiLCJzYXZlVmFsdWUiLCJicmVha3BvaW50RGF0YSIsInZhcmlhYmxlcyIsImlzc2V0IiwibG9jIiwicmVhbEJyZmluZGVkIiwiYnJlYWtwb2ludEVycm9yIiwiYnIiLCJwb3NzaWJsZUJyZWFrcG9pbnREYXRhIiwicmVzb2x2ZWQiLCJlbWl0IiwiaWdub3JlIiwibWVzc2FnZSIsImNvbnRpbnVlIiwib25CcmVha3BvaW50UmVzb2x2ZWQiLCJSdW50aW1lIiwiZW5hYmxlIiwic2V0UGF1c2VPbkV4Y2VwdGlvbnMiLCJzdGF0ZSIsInNldEFzeW5jQ2FsbFN0YWNrRGVwdGgiLCJtYXhEZXB0aCIsInNldEJsYWNrYm94UGF0dGVybnMiLCJwYXR0ZXJucyIsInJ1bklmV2FpdGluZ0ZvckRlYnVnZ2VyIiwicGF1c2VkIiwidmFsaWRhdGVSZXN1bHQiLCJjb25uZWN0IiwicG9ydCIsImhvc3QiLCJzbm9vemVUaW1lIiwibGFzdEVycm9yIiwicmV0cmllcyIsIndhcm4iLCJhbGlhc1Jlc3VsdCIsInBhdGhUb0ZpbGVVUkwiLCJ0b1N0cmluZyIsImVyciIsInNldEJyZWFrcG9pbnRCeVVybCIsImNvbHVtbk51bWJlciIsImNhdGNoIiwicmVzcG9uc2UiLCJzZXRCcmVha3BvaW50c0FjdGl2ZSIsImFjdGl2ZSIsInJlbW92ZUJyZWFrcG9pbnQiLCJyZW1vdmVCciIsInJlc3VtZVRlcm1pbmF0ZSIsImRpc2FibGUiLCJyZW1vdmVCcmVha3BvaW50QnlWYWx1ZSIsImZpbGVQYXRoIiwiaW5wdXRMaW5lIiwiZmlsZVBhdGhBbGlhcyIsInNlbGYiLCJiIiwiY2xlYXJCcmVha3BvaW50cyIsInN0YXJ0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Q0EsS0FBSyxDQUFDekIsTUFBTixHQUFhLENBQWQsQ0FBOUM7QUFDQTJCLFFBQUFBLFVBQVUsR0FBR0MsUUFBUSxDQUFDSCxLQUFLLENBQUMsQ0FBRCxDQUFOLENBQVIsR0FBbUIsQ0FBaEM7QUFDSCxPQUhELE1BR087QUFDSGxDLFFBQUFBLFFBQVEsR0FBR2tDLEtBQUssQ0FBQ0EsS0FBSyxDQUFDekIsTUFBTixHQUFhLENBQWQsQ0FBaEI7QUFDQTJCLFFBQUFBLFVBQVUsR0FBR0MsUUFBUSxDQUFDSCxLQUFLLENBQUMsQ0FBRCxDQUFOLENBQVIsR0FBbUIsQ0FBaEM7QUFDSDs7QUFFRCxVQUFJbEMsUUFBUSxLQUFLK0wsUUFBakIsRUFBMkI7QUFDdkJXLFFBQUFBLEdBQUcsQ0FBQ3RGLElBQUosQ0FBU2hGLFVBQVQ7QUFDSCxPQUZELE1BRU87QUFDSCxjQUFNNkosYUFBYSxHQUFHLEtBQUt4RixpQkFBTCxDQUF1QnNGLFFBQXZCLENBQXRCOztBQUNBLFlBQUlFLGFBQUosRUFBbUI7QUFDZlMsVUFBQUEsR0FBRyxDQUFDdEYsSUFBSixDQUFTaEYsVUFBVDtBQUNIO0FBQ0o7QUFDSjs7QUFDRCxXQUFPc0ssR0FBUDtBQUNIOztBQTEyQjhDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBWOCBkZWJ1Z2dlciBjbGllbnQuXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9saWIvbG9nZ2VyJztcclxuY29uc3QgbG9nID0gbG9nZ2VyKCdEZWJ1Z2dlcicpO1xyXG5jb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gcmVxdWlyZSgnZXZlbnRzJyk7XHJcbmNvbnN0IENEUCA9IHJlcXVpcmUoJ0BveHlnZW5ocS9jaHJvbWUtcmVtb3RlLWludGVyZmFjZScpO1xyXG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XHJcblxyXG5jb25zdCBDT05ORUNUX1JFVFJJRVMgPSA0O1xyXG5jb25zdCBDT05ORUNUX1NOT09aRV9JTlRFUlZBTF9NVUxUID0gMjtcclxuY29uc3QgTUFYX0RFUFRIID0gNTtcclxubGV0IG1heEZpbmRlZERlcHRoID0gMDtcclxuXHJcbmNvbnN0IHRyYW5zZm9ybVRvSURFU3R5bGUgPSAoZmlsZU5hbWUpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgdXJpSW5kZXggPSBmaWxlTmFtZS5pbmRleE9mKCdmaWxlOicpO1xyXG4gICAgICAgIGNvbnN0IGJwRGF0YSA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCB1cmlJbmRleCk7XHJcbiAgICAgICAgbGV0IHVyaSA9IGZpbGVOYW1lLnN1YnN0cmluZyh1cmlJbmRleCk7XHJcbiAgICAgICAgLy8gZml4IFVOQyBwYXRoc1xyXG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIHVyaS5zdGFydHNXaXRoKCdmaWxlOi8vLycpKSB7XHJcbiAgICAgICAgICAgIHVyaSA9ICdmaWxlOi8vJyArIHVyaS5zdWJzdHJpbmcoJ2ZpbGU6Ly8vJy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnBEYXRhICsgdXJsLmZpbGVVUkxUb1BhdGgodXJpKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygndHJhbnNmb3JtVG9JREVTdHlsZSBmaWxlTmFtZScsIGZpbGVOYW1lKTtcclxuICAgICAgICBjb25zb2xlLmxvZygndHJhbnNmb3JtVG9JREVTdHlsZSBlcnJvcicsIGUpO1xyXG4gICAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBzbm9vemUgZnVuY3Rpb24gLSBhc3luYyB3cmFwcGVyIGFyb3VuZCBzZXRUaW1lb3V0IGZ1bmN0aW9uXHJcbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG5cclxuY29uc3QgZGVsZXRlVmFsdWVzID0gKGFyciwgZGVwdGgpID0+IHtcclxuXHJcbiAgICBpZiAoZGVwdGggPiBtYXhGaW5kZWREZXB0aCkge1xyXG4gICAgICAgIG1heEZpbmRlZERlcHRoID0gZGVwdGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRlcHRoID4gTUFYX0RFUFRIKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQgPSBhcnIubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLmNsYXNzTmFtZSAmJiBpdGVtLnZhbHVlLmNsYXNzTmFtZSA9PT0gJ0Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25zdCBjbG9uZVZhbHVlID0gT2JqZWN0LmFzc2lnbihpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgZGVsZXRlIGNsb25lVmFsdWUub2JqZWN0SWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gT2JqZWN0LmFzc2lnbihpdGVtLCB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2xvbmVWYWx1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZGVsZXRlIGNsb25lLm9iamVjdElkO1xyXG4gICAgICAgICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RCcmVha3BvaW50RGF0YShicFN0cikge1xyXG4gICAgaWYgKCFicFN0ciB8fCB0eXBlb2YgYnBTdHIgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBicFN0ciA9IHRyYW5zZm9ybVRvSURFU3R5bGUoYnBTdHIpO1xyXG4gICAgICAgIGNvbnN0IHBhcnRzID0gYnBTdHIuc3BsaXQoJzonKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGluZU51bWJlciA9IHBhcnNlSW50KHBhcnRzWzFdKTtcclxuXHJcbiAgICAgICAgLy8gcm9tb3ZlIGZpbGUgbnVtYmVyLCBsaW5lIG51bWJlciwgY29sdW1uIG51bWJlclxyXG4gICAgICAgIHBhcnRzLnNwbGljZSgwLCAzKTtcclxuXHJcbiAgICAgICAgLy8gbG9va3MgbGluZSBuZWVkIG9ubHkgZm9yIHdpbmRvd3MgcGF0aCB3aGl0aCBkaXNrLCBsaWtlIEM6Ly9cclxuICAgICAgICAvLyBmb3Igd2luZG93cyBuZXR3b3JrIGZvbGRlcnMgYW5kIG1hYyBub3QgbmVlZFxyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGFydHMuam9pbignOicpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXJcclxuICAgICAgICB9O1xyXG5cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBleHRyYWN0IGJyZWFrcG9pbnQgZGF0YTogJHticFN0cn1gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVCcmVha3BvaW50KGJyZWFrcG9pbnQpIHtcclxuICAgIGNvbnN0IGJyT2JqID0gZXh0cmFjdEJyZWFrcG9pbnREYXRhKGJyZWFrcG9pbnQuYnJlYWtwb2ludElkKTtcclxuXHJcbiAgICBjb25zdCBickxpbmVOdW1iZXIgPSBick9iai5saW5lTnVtYmVyICsgMTsgLy8gZnJvbSAwLWJhc2UgdG8gMSBiYXNlO1xyXG5cclxuICAgIGlmIChicmVha3BvaW50ICYmIGJyZWFrcG9pbnQubG9jYXRpb25zICYmIEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludC5sb2NhdGlvbnMpICYmIGJyZWFrcG9pbnQubG9jYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICBicmVha3BvaW50LmxvY2F0aW9ucy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYnJGaWxlTmFtZSA9IGJyT2JqLmZpbGVOYW1lO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtTGluZU51bWJlciA9IGl0ZW0ubGluZU51bWJlciArIDE7IC8vIGZyb20gMC1iYXNlIHRvIDEgYmFzZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChickxpbmVOdW1iZXIgIT09IGl0ZW1MaW5lTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbXNnOiBgQnJlYWtwb2ludHMgd2FybmluZyA6ICR7YnJGaWxlTmFtZX0gRG9uJ3QgaGF2ZSBvcHBvcnR1bml0eSB0byBoYXZlIGJyZWFrcG9pbnQgYXQgbGluZSA6IGAsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGJyRmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZTogYnJMaW5lTnVtYmVyXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxufVxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWJ1Z2dlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwaWQpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgICB0aGlzLl9waWQgPSBwaWQ7XHJcbiAgICAgICAgdGhpcy5fcG9ydCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9ob3N0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0JQID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzID0gW107XHJcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlc2V0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGllbnQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2ZpbGVOYW1lQWxpYXNlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFByb3BlcnRpZXNCeU9iamVjdElkKG9iamVjdElkLCBkZXB0aCwgZWxtKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7fTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZ2V0UHJvcGVydGllcyh7XHJcbiAgICAgICAgICAgICAgICBvYmplY3RJZCA6IG9iamVjdElkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2dldFByb3BlcnRpZXMgZWxtJywgZWxtKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2dldFByb3BlcnRpZXMgZScsIGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKGNsb25lICYmIGNsb25lICYmIGNsb25lLnJlc3VsdCkge1xyXG4gICAgICAgICAgICBjbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIGNsb25lLCB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGRlbGV0ZVZhbHVlcyhjbG9uZS5yZXN1bHQsIGRlcHRoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRQcm9taWNlQWxsUmVzdWx0KG1hcFJlc3VsdEZpbHRlcmVkKSB7XHJcbiAgICAgICAgbGV0IHByb21pc2VBbGxQcm9taXNlID0gYXdhaXQgUHJvbWlzZS5hbGwobWFwUmVzdWx0RmlsdGVyZWQpLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChwcm9taXNlQWxsUHJvbWlzZSAmJiBBcnJheS5pc0FycmF5KHByb21pc2VBbGxQcm9taXNlKSAmJiBwcm9taXNlQWxsUHJvbWlzZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHByb21pc2VBbGxQcm9taXNlID0gcHJvbWlzZUFsbFByb21pc2UuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHByb21pc2VBbGxQcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFByb3BlcnRpZXMob2JqZWN0SWQsIGRlcHRoLCBlbG0pIHtcclxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBnZXRQcm9wZXJ0aWVzUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzQnlPYmplY3RJZChvYmplY3RJZCwgZGVwdGgsIGVsbSk7XHJcblxyXG4gICAgICAgIGlmIChnZXRQcm9wZXJ0aWVzUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChnZXRQcm9wZXJ0aWVzUmVzdWx0ICYmIGdldFByb3BlcnRpZXNSZXN1bHQucmVzdWx0ICYmIEFycmF5LmlzQXJyYXkoZ2V0UHJvcGVydGllc1Jlc3VsdC5yZXN1bHQpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFwUmVzdWx0ID0gZ2V0UHJvcGVydGllc1Jlc3VsdC5yZXN1bHQubWFwKGFzeW5jIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLm9iamVjdElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFByb3BlcnRpZXNJbm5lclJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyhpdGVtLnZhbHVlLm9iamVjdElkLCBkZXB0aCsxLCBpdGVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnNjb3BlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydGllc0lubmVyUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFwUmVzdWx0RmlsdGVyZWQgPSBtYXBSZXN1bHQuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aDogZGVwdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdElkUmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oe30sIGdldFByb3BlcnRpZXNSZXN1bHQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1hcFJlc3VsdEZpbHRlcmVkICYmIEFycmF5LmlzQXJyYXkobWFwUmVzdWx0RmlsdGVyZWQpICYmIG1hcFJlc3VsdEZpbHRlcmVkLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCB0aGlzLmdldFByb21pY2VBbGxSZXN1bHQobWFwUmVzdWx0RmlsdGVyZWQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZUFsbFByb21pc2UgJiYgQXJyYXkuaXNBcnJheShwcm9taXNlQWxsUHJvbWlzZSkgJiYgcHJvbWlzZUFsbFByb21pc2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGQgPSBwcm9taXNlQWxsUHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aDogZGVwdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdElkUmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oe30sIGdldFByb3BlcnRpZXNSZXN1bHQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbih2YWx1ZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2Vzc1Njb3BlKHNjb3BlQ2hhaW4sIGRlcHRoKSB7XHJcbiAgICAgICAgbGV0IHNjb3BlQ2hhaW5SZXN1bHQgPSBhd2FpdCBzY29wZUNoYWluLm1hcChhc3luYyAoY2hhaW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGNoYWluICYmIGNoYWluLm9iamVjdCAmJiBjaGFpbi5vYmplY3Qub2JqZWN0SWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2hhaW4ub2JqZWN0Lm9iamVjdElkID09PSAnc3RyaW5nJyAmJiBjaGFpbi50eXBlICE9PSAnZ2xvYmFsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFByb3BlcnRpZXNSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXMoY2hhaW4ub2JqZWN0Lm9iamVjdElkLCBkZXB0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNjb3BlQ2hhaW5SZXN1bHQgPSBzY29wZUNoYWluUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoc2NvcGVDaGFpblJlc3VsdCkudGhlbih2YWx1ZXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByb2Nlc3NDYWxsRnJhbWVzKGNhbGxGcmFtZXMsIGRlcHRoKSB7XHJcbiAgICAgICAgbGV0IGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBhd2FpdCBjYWxsRnJhbWVzLm1hcChhc3luYyhjYWxsRnJhbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxsRnJhbWUuc2NvcGVDaGFpbiAmJiBBcnJheS5pc0FycmF5KGNhbGxGcmFtZS5zY29wZUNoYWluKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc1Njb3BlUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzU2NvcGUoY2FsbEZyYW1lLnNjb3BlQ2hhaW4sIGRlcHRoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NvcGVSZXN1bHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsRnJhbWVzTWFwUmVzdWx0ID0gY2FsbEZyYW1lc01hcFJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGNhbGxGcmFtZXNNYXBSZXN1bHQpLnRoZW4odmFsdWVzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpbkJyZWFrcG9pbnRzKGl0ZW1VcmwpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzICYmIEFycmF5LmlzQXJyYXkodGhpcy5fYnJlYWtwb2ludHMpICYmIHRoaXMuX2JyZWFrcG9pbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubWFwKChicCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwgJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVtVXJsLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luLnNjcmlwdFBhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4uc2NyaXB0UGF0aC50b0xvd2VyQ2FzZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwudG9Mb3dlckNhc2UoKSA9PT0gYnAub3JpZ2luLnNjcmlwdFBhdGgudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgaW5GaWxlTmFtZUFsaWFzZXMoZmlsZU5hbWUpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVOYW1lQWxpYXNlcyAmJiBBcnJheS5pc0FycmF5KHRoaXMuX2ZpbGVOYW1lQWxpYXNlcykgJiYgdGhpcy5fZmlsZU5hbWVBbGlhc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzLm1hcCgoYWxpYXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBhbGlhcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgJiZcclxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZS50b0xvd2VyQ2FzZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGZpbGVOYW1lLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFsaWFzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb250aW51ZUNvbm5lY3QoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsaWVudC5vbignRGVidWdnZXIuc2NyaXB0UGFyc2VkJywgYXN5bmMobSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLnVybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0udXJsLnRvTG93ZXJDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZWxjID0gbS51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludEZvckNoYW5nZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kUmVzdWx0ID0gdGhpcy5fYnJlYWtwb2ludHMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5vcmlnaW4gJiYgaXRlbS5vcmlnaW4uc2NyaXB0UGF0aCAmJiBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50bGMgPSBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRsYyA9PT0gZmlsZWxjICYmIGl0ZW0ub3JpZ2luLnNjcmlwdFBhdGggIT09IG0udXJsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlTmFtZUFsaWFzZXMuaW5jbHVkZXMobS51cmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVOYW1lQWxpYXNlcy5wdXNoKG0udXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fRGVidWdnZXIucGF1c2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludDogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVybDogbS51cmxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLm1hcCgoYnApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UubVVybCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludC5vcmlnaW4gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50Rm9yQ2hhbmdlLmJyZWFrcG9pbnQub3JpZ2luLnNjcmlwdFBhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4uc2NyaXB0UGF0aCA9PT0gYnJlYWtwb2ludEZvckNoYW5nZS5icmVha3BvaW50Lm9yaWdpbi5zY3JpcHRQYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0UGF0aDogYnJlYWtwb2ludEZvckNoYW5nZS5tVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBicC5vcmlnaW4ubGluZU51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbiAmJiBBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uKSAmJiBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb25SZXN1bHQgPSBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5tYXAoYXN5bmMoYnApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXRCcmVha3BvaW50KGJwLnNjcmlwdFBhdGgsIGJwLmxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb25SZXN1bHQgPSBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCkudGhlbihhc3luYyh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnJlc3VtZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGllbnQub24oJ0RlYnVnZ2VyLnBhdXNlZCcsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChlLnJlYXNvbiA9PT0gJ0JyZWFrIG9uIHN0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYnJva2VPblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIENocm9tZSBkZWJ1Z2dlciBkb2Vzbid0IHNlZW0gdG8gcmVtb3ZlIGJyZWFrcG9pbnRzIHdoZW4gdXNpbmcgcmVtb3ZlQnJlYWtwb2ludFxyXG4gICAgICAgICAgICAgICAgLy8gYW5kICdzb21ldGhpbmcnIGlzIHN0aWxsIGdldHRpbmcgaGl0LiBub3QgY2xlYXIgd2h5IHRoaXMgaXMgaGFwcGVuaW5nLlxyXG4gICAgICAgICAgICAgICAgLy8gdGh1cywgd2UgZW1pdCBicmVhayBldmVudCBvbmx5IGlmIG1hdGNoaW5nIGJyZWFrcG9pbnQgc3RpbGwgZXhpc3RzIGluIHRoaXMuX2JyZWFrcG9pbnRzXHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zc2libGVCcmVha3BvaW50c0RhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBlQ2FsbEZyYW1lcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlICYmIGUuY2FsbEZyYW1lcyAmJiBBcnJheS5pc0FycmF5KGUuY2FsbEZyYW1lcykgJiYgZS5jYWxsRnJhbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBlLmNhbGxGcmFtZXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udXJsICYmIHRoaXMuaW5CcmVha3BvaW50cyhpdGVtLnVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludHNNYXBSZXN1bHQgPSB0aGlzLl9icmVha3BvaW50cy5tYXAoYXN5bmMoYnApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYnAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzWzBdICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9ucy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9uc1swXS5zY3JpcHRJZCA9PT0gZUNhbGxGcmFtZXNbMF0ubG9jYXRpb24uc2NyaXB0SWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zWzBdLmxpbmVOdW1iZXIgPT09IGVDYWxsRnJhbWVzWzBdLmxvY2F0aW9uLmxpbmVOdW1iZXIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluaXRpYWxEZXB0aCA9IDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmNhbGxGcmFtZXMgJiYgQXJyYXkuaXNBcnJheShlLmNhbGxGcmFtZXMpICYmIGUuY2FsbEZyYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlxdWVTY3JpcHRJZEFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbEZyYW1lcyA9IGUuY2FsbEZyYW1lcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kZWQgPSB0aGlzLl9icmVha3BvaW50cy5maW5kKChicmVha3BvaW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuYnJlYWtwb2ludElkLmVuZHNXaXRoKGl0ZW0udXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5sb2NhdGlvbiAmJiBpdGVtLmxvY2F0aW9uLnNjcmlwdElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaXF1ZVNjcmlwdElkQXJyLmluY2x1ZGVzKGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVTY3JpcHRJZEFyci5wdXNoKGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lcy5tYXAoYXN5bmMoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zc2libGVCcmVha3BvaW50cyA9IGF3YWl0IHRoaXMuZ2V0UG9zc2libGVCcmVha3BvaW50cyhpdGVtLmxvY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0U291cmNlID0gYXdhaXQgdGhpcy5nZXRTY3JpcHRTb3VyY2UoaXRlbS5sb2NhdGlvbi5zY3JpcHRJZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRTb3VyY2VTcGxpdCA9IHNjcmlwdFNvdXJjZS5zY3JpcHRTb3VyY2Uuc3BsaXQoJ1xcbicpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVMaW5lTnVtYmVyc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHRTb3VyY2VTcGxpdCAmJiBBcnJheS5pc0FycmF5KHNjcmlwdFNvdXJjZVNwbGl0KSAmJiBzY3JpcHRTb3VyY2VTcGxpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTGluZU51bWJlcnNMZW5ndGggPSBzY3JpcHRTb3VyY2VTcGxpdC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzZWUgaG93IGRlYmJ1Z2VyIHNlZSBzY3JpcHRcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzY3JpcHRTb3VyY2VTcGxpdC5tYXAoKHNjcmlwdFNvdXJjZUl0ZW0sIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKChpZHgpICsgJyAnICsgc2NyaXB0U291cmNlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50czogcG9zc2libGVCcmVha3BvaW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGl0ZW0udXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUxpbmVOdW1iZXJzTGVuZ3RoOiBmaWxlTGluZU51bWJlcnNMZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRTY3JpcHRTb3VyY2UgZScsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYWxsRnJhbWVzTWFwUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzQ2FsbEZyYW1lcyhjYWxsRnJhbWVzLCBpbml0aWFsRGVwdGgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBjYWxsRnJhbWVzTWFwUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsRnJhbWVzTWFwUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWtwb2ludHNNYXBSZXN1bHQgPSBicmVha3BvaW50c01hcFJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChicmVha3BvaW50c01hcFJlc3VsdCkudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNhdmVWYWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2F2ZVZhbHVlICYmIEFycmF5LmlzQXJyYXkoc2F2ZVZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYXZlVmFsdWUgPSBzYXZlVmFsdWUuZmlsdGVyKChlbCkgPT4gISFlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2F2ZVZhbHVlICYmIEFycmF5LmlzQXJyYXkoc2F2ZVZhbHVlKSAmJiBzYXZlVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludERhdGEgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lIHdlIGFsd2F5cyBzZW5kIGJyZWFrcG9pbnQgb2YgdGhlIHRvcCBjYWxsIGZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlQ2FsbEZyYW1lcyAmJiBlQ2FsbEZyYW1lcy5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogZUNhbGxGcmFtZXNbMF0ubG9jYXRpb24ubGluZU51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogdHJhbnNmb3JtVG9JREVTdHlsZShlQ2FsbEZyYW1lc1swXS51cmwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYXZlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS52YXJpYWJsZXMgPSBzYXZlVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5fYnJlYWtwb2ludEVycm9ycykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzc2V0ID0gdGhpcy5fYnJlYWtwb2ludHMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9yaWdpbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9yaWdpbi5saW5lTnVtYmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGl0ZW0ub3JpZ2luLmxpbmVOdW1iZXIpKzEgPT09IHBhcnNlSW50KGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sb2NhdGlvbnMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShpdGVtLmxvY2F0aW9ucykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sb2NhdGlvbnMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxvY2F0aW9ucy5maW5kKGxvYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQobG9jLmxpbmVOdW1iZXIpID09PSBwYXJzZUludChicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaXRlbS5vcmlnaW4ubGluZU51bWJlcikgIT09IDEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYnJlYWtwb2ludERhdGEubGluZU51bWJlcikgIT09IDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFsQnJmaW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLm1hcCgoYnJlYWtwb2ludEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMuX2JyZWFrcG9pbnRzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLm1hcCgoYnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBickZpbGVOYW1lID0gdHJhbnNmb3JtVG9JREVTdHlsZShici5vcmlnaW4uc2NyaXB0UGF0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwb3NzaWJsZUJyZWFrcG9pbnREYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnREYXRhID0gcG9zc2libGVCcmVha3BvaW50c0RhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5maWxlID09PSBlQ2FsbEZyYW1lc1swXS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBickZpbGVOYW1lID09PSBicmVha3BvaW50RGF0YS5maWxlTmFtZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnREYXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEubGluZU51bWJlcisxID09PSBici5vcmlnaW4ubGluZU51bWJlciB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnIub3JpZ2luLmxpbmVOdW1iZXIrMSA9PT0gcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsQnJmaW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVhbEJyZmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnREYXRhLnJlc29sdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwb3NzaWJsZUJyZWFrcG9pbnREYXRhO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocG9zc2libGVCcmVha3BvaW50c0RhdGEpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50RGF0YSA9IHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmlsZSA9PT0gZUNhbGxGcmFtZXNbMF0udXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50RGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBvc3NpYmxlQnJlYWtwb2ludERhdGEuZmlsZUxpbmVOdW1iZXJzTGVuZ3RoICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEubGluZU51bWJlcisxID49IHBvc3NpYmxlQnJlYWtwb2ludERhdGEuZmlsZUxpbmVOdW1iZXJzTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEubGluZU51bWJlciA9IHBvc3NpYmxlQnJlYWtwb2ludERhdGEuZmlsZUxpbmVOdW1iZXJzTGVuZ3RoIC0gMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdicmVhaycsIGJyZWFrcG9pbnREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5fYnJlYWtwb2ludEVycm9ycykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMubWFwKChicmVha3BvaW50RXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludEVycm9yICYmIGJyZWFrcG9pbnRFcnJvci5tc2cgJiYgYnJlYWtwb2ludEVycm9yLmZpbGVOYW1lICYmIGJyZWFrcG9pbnRFcnJvci5saW5lKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWdub3JlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zc2libGVCcmVha3BvaW50c0RhdGEgJiYgQXJyYXkuaXNBcnJheShwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSkgJiYgcG9zc2libGVCcmVha3BvaW50c0RhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEubWFwKChpdGVtKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZmlsZSA9IHRyYW5zZm9ybVRvSURFU3R5bGUoaXRlbS5maWxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZmlsZSA9PT0gYnJlYWtwb2ludEVycm9yLmZpbGVOYW1lICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50RGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbS5maWxlTGluZU51bWJlcnNMZW5ndGggIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRFcnJvci5saW5lID49IGl0ZW0uZmlsZUxpbmVOdW1iZXJzTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gYnJlYWtwb2ludEVycm9yLmxpbmUgLSAyOyAvLyAvLyMgc291cmNlTWFwcGluZ1VSTCBhbmQgfS5jYWxsKHRoaXMsIGV4cG9ydHMsIHJlcXVpcmUsIG1vZHVsZSwgX19maWxlbmFtZSwgX19kaXJuYW1lKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gYnJlYWtwb2ludEVycm9yLmxpbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmJyZWFrcG9pbnRzICYmIEFycmF5LmlzQXJyYXkoaXRlbS5icmVha3BvaW50cykgJiYgaXRlbS5icmVha3BvaW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludEVycm9yICYmIGJyZWFrcG9pbnRFcnJvci5tc2cgJiYgYnJlYWtwb2ludEVycm9yLm1zZy5pbmNsdWRlcygnUG9zc2libGUgYnJlYWtwb2ludCBsaW5lcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmJyZWFrcG9pbnRzLmluY2x1ZGVzKGxpbmUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBicmVha3BvaW50RXJyb3IubXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSBgJHtsaW5lfS4gYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gYCBQb3NzaWJsZSBicmVha3BvaW50IGxpbmVzIDogJHtpdGVtLmJyZWFrcG9pbnRzLm1hcCgobGluZSkgPT4gbGluZSkuam9pbignLCAnKX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRFcnJvciAmJiBicmVha3BvaW50RXJyb3IubXNnICYmIGJyZWFrcG9pbnRFcnJvci5tc2cuaW5jbHVkZXMoJ3Bvc3NpYmxlIGJyZWFrcG9pbnQgbGluZXMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBicmVha3BvaW50RXJyb3IubXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSBgJHtsaW5lfS4gYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJyBGaWxlIGRvblxcJ3QgaGF2ZSBwb3NzaWJsZSBicmVha3BvaW50IGxpbmVzJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdicmVha0Vycm9yJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBicmVha3BvaW50RXJyb3IubGluZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogYnJlYWtwb2ludEVycm9yLmZpbGVOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3Nob3VsZCBjb250aW51ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5yZWFzb24gPT09ICdPT00nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdXQgb2YgbWVtb3J5IGxlYWtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGludWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9LCByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdicmVha3BvaW50c01hcFJlc3VsdCByZXMgcmVhc29uJyAsIHJlYXNvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50Lm9uKCdEZWJ1Z2dlci5icmVha3BvaW50UmVzb2x2ZWQnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludFJlc29sdmVkKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCB7IERlYnVnZ2VyLCBSdW50aW1lIH0gPSB0aGlzLl9jbGllbnQ7XHJcbiAgICAgICAgdGhpcy5fRGVidWdnZXIgPSBEZWJ1Z2dlcjtcclxuICAgICAgICB0aGlzLl9SdW50aW1lID0gUnVudGltZTtcclxuICAgICAgICBSdW50aW1lLmVuYWJsZSgpO1xyXG4gICAgICAgIERlYnVnZ2VyLmVuYWJsZSgpO1xyXG4gICAgICAgIERlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zKHsgc3RhdGU6ICdub25lJyB9KTtcclxuICAgICAgICBEZWJ1Z2dlci5zZXRBc3luY0NhbGxTdGFja0RlcHRoKHsgbWF4RGVwdGg6IDMyIH0pO1xyXG4gICAgICAgIERlYnVnZ2VyLnNldEJsYWNrYm94UGF0dGVybnMoeyBwYXR0ZXJuczogW10gfSk7XHJcbiAgICAgICAgLy8gb25seSB1c2UgJ2F3YWl0JyBmb3IgdGhlIGxhc3QgY2FsbCwgYWxsIHByZXZpb3VzIGNhbGwgdG8gRGVidWdnZXIgb3IgUnVudGltZSB3aWxsIHN0YWNrIG90aGVyd2lzZVxyXG4gICAgICAgIGF3YWl0IFJ1bnRpbWUucnVuSWZXYWl0aW5nRm9yRGVidWdnZXIoKTtcclxuICAgICAgICAvLyBhd2FpdCBmb3IgdGhlIGZpcnN0IGJyZWFrcG9pbnQgd2hpY2ggaXMgcGxhY2VkIGJ5IHRoZSBkZWJ1Z2dlciBhdXRvbWF0aWNhbGx5IFxyXG4gICAgICAgIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnBhdXNlZCgpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgncmVhZHknKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJyZWFrcG9pbnRSZXNvbHZlZChlKSB7XHJcbiAgICAgICAgLy8gYnJlYWtwb2ludHMgc2V0IGJlZm9yZSB0aGUgc2NyaXB0IHdhcyBsb2FkZWQgd2lsbCBiZSByZXNvbHZlZCBvbmNlIGl0IGxvYWRzXHJcbiAgICAgICAgZm9yICh2YXIgYnAgb2YgdGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgYnAgJiZcclxuICAgICAgICAgICAgICAgIGUgJiZcclxuICAgICAgICAgICAgICAgIGJwLmJyZWFrcG9pbnRJZCA9PT0gZS5icmVha3BvaW50SWRcclxuICAgICAgICAgICAgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRlUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKCBlLmxvY2F0aW9uICkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmVkIG9uIHJ1bnRpbWVcclxuICAgICAgICAgICAgICAgICAgICBicC5sb2NhdGlvbnMgPSBbZS5sb2NhdGlvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0ZUJyZWFrcG9pbnQoYnApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZS5sb2NhdGlvbnMgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZWQgb24gcGF1c2VcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVJlc3VsdCA9IHZhbGlkYXRlQnJlYWtwb2ludChicCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5wdXNoKHZhbGlkYXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbm5lY3RzIHRvIGEgZGVidWdnZXIuIERvZXMgbm90aGluZyBpZiBhbHJlYWR5IGNvbm5lY3RlZC5cclxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gRGVidWdnZXIgcG9ydC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY29ubmVjdChwb3J0LCBob3N0KSB7XHJcbiAgICAgICAgdGhpcy5fcG9ydCA9IHBvcnQ7XHJcbiAgICAgICAgdGhpcy5faG9zdCA9IGhvc3QgfHwgJ2xvY2FsaG9zdCc7XHJcblxyXG4gICAgICAgIGxldCBzbm9vemVUaW1lID0gMTAwMDtcclxuICAgICAgICBsZXQgbGFzdEVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmV0cmllcyA9IDA7IHJldHJpZXMgPCBDT05ORUNUX1JFVFJJRVM7IHJldHJpZXMrKykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50ID0gYXdhaXQgQ0RQKHsgcG9ydDogdGhpcy5fcG9ydCwgaG9zdDogdGhpcy5faG9zdCB9KTtcclxuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbG9nLndhcm4oYERlYnVnZ2VyIGNvbm5lY3Rpb24gZmFpbGVkLiBXaWxsIHJldHJ5IGluICR7c25vb3plVGltZS8xMDAwfXMuIEVycm9yOiBgLCBsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoc25vb3plVGltZSk7XHJcbiAgICAgICAgICAgIHNub296ZVRpbWUgKj0gQ09OTkVDVF9TTk9PWkVfSU5URVJWQUxfTVVMVDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgZGVidWdnZXI6ICcsIGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGxhc3RFcnJvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29udGludWVDb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYnJlYWtwb2ludCBmb3IgYSBwYXJ0aWN1bGFyIHNjcmlwdC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBTY3JpcHQgcGF0aC5cclxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gTGluZSBudW1iZXIuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldEJyZWFrcG9pbnQoc2NyaXB0UGF0aCwgbGluZU51bWJlcikge1xyXG4gICAgICAgIGxldCBmaWxlTmFtZSA9IHNjcmlwdFBhdGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGFsaWFzUmVzdWx0ID0gdGhpcy5pbkZpbGVOYW1lQWxpYXNlcyhmaWxlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChhbGlhc1Jlc3VsdCkge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IGFsaWFzUmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZmlsZU5hbWUgPSB1cmwucGF0aFRvRmlsZVVSTChmaWxlTmFtZSkudG9TdHJpbmcoKTtcclxuICAgICAgICBsZXQgZXJyID0gbnVsbDtcclxuXHJcbiAgICAgICAgbGV0IGJyZWFrcG9pbnQgPSBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5zZXRCcmVha3BvaW50QnlVcmwoe1xyXG4gICAgICAgICAgICB1cmw6IGZpbGVOYW1lLFxyXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLTEsIC8vIGZyb20gMS1iYXNlIHRvIDAtYmFzZVxyXG4gICAgICAgICAgICBjb2x1bW5OdW1iZXI6IDBcclxuICAgICAgICB9KS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgZXJyID0gZTtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHNldCBhbiBsYXJlYWR5IGV4aXN0aW5nIGJyZWFrcG9pbnRcclxuICAgICAgICAgICAgaWYgKCFlLnJlc3BvbnNlIHx8IGUucmVzcG9uc2UubWVzc2FnZSAhPT0gJ0JyZWFrcG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzLicpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJyZWFrcG9pbnQub3JpZ2luID0ge1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0UGF0aDogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5ldyBicmVhY2twb2ludCByZXNvbHZlZCBzdWNjZXNzXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludFJlc29sdmVkKGJyZWFrcG9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYnJlYWtwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRCcmVha3BvaW50c0FjdGl2ZShhY3RpdmUpIHtcclxuICAgICAgICBpZiAodGhpcy5fRGVidWdnZXIgJiYgdGhpcy5fRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKHsnYWN0aXZlJzogYWN0aXZlfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldEJyZWFrcG9pbnRzQWN0aXZlKGFjdGl2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKSB7XHJcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50cy5maWx0ZXIoKGJwKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBicC5icmVha3BvaW50SWQgIT09IGJyZWFrcG9pbnRJZDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlQnIgPSB7IGJyZWFrcG9pbnRJZDogYnJlYWtwb2ludElkIH07XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50KHJlbW92ZUJyKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb250aW51ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlc3VtZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlc3VtZVRlcm1pbmF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZXN1bWUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc2FibGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIuZGlzYWJsZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUoZmlsZVBhdGgsIGlucHV0TGluZSkge1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlUGF0aEFsaWFzID0gdGhpcy5pbkZpbGVOYW1lQWxpYXNlcyhmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxpbmUgPSBpbnB1dExpbmUgLSAxOyAvLyBmcm9tIDEtYmFzZSB0byAwLWJhc2VcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGIgb2YgdGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGIgJiYgYi5icmVha3BvaW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBiLmJyZWFrcG9pbnRJZC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lTnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHsgLy8gcGF0aCBtYXkgY29udGFpbiBhIERyaXZlIGxldHRlciBvbiB3aW4zMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMl0gKyAnOicgKyBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZU5hbWUgPT09IGZpbGVQYXRoIHx8IGZpbGVOYW1lID09PSBmaWxlUGF0aEFsaWFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbGluZU51bWJlciA9PT0gbGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlbGYucmVtb3ZlQnJlYWtwb2ludChiLmJyZWFrcG9pbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgd2hlbiB3b3JrIHdpdGggYnJlYWtwb2ludCBkYXRhOicsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbGVhckJyZWFrcG9pbnRzKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBiIG9mIHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzZWxmLnJlbW92ZUJyZWFrcG9pbnQoYi5icmVha3BvaW50SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFBvc3NpYmxlQnJlYWtwb2ludHMoc3RhcnRMb2NhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHBvc3NpYmxlQnJlYWtwb2ludHMgPSBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5nZXRQb3NzaWJsZUJyZWFrcG9pbnRzKHtcclxuICAgICAgICAgICAgc3RhcnQ6IHtcclxuICAgICAgICAgICAgICAgIHNjcmlwdElkOiBzdGFydExvY2F0aW9uLnNjcmlwdElkLFxyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogMCxcclxuICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChwb3NzaWJsZUJyZWFrcG9pbnRzICYmIHBvc3NpYmxlQnJlYWtwb2ludHMubG9jYXRpb25zICYmIEFycmF5LmlzQXJyYXkocG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMpICYmIHBvc3NpYmxlQnJlYWtwb2ludHMubG9jYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbS5saW5lTnVtYmVyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSBpdGVtLmxpbmVOdW1iZXIgKyAxOyAvLyBmcm9tIDAtYmFzZSB0byAxLWJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmNsdWRlcyhsaW5lTnVtYmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzdWx0ICYmIEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgcCA9IHJlc3VsdC5wb3AoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5jbHVkZXMocC0xKSkge1xyXG4gICAgICAgICAgICAgICAgLy9pbmdvcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwLTEgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocC0xKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRTY3JpcHRTb3VyY2Uoc2NyaXB0SWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIuZ2V0U2NyaXB0U291cmNlKHsgc2NyaXB0SWQ6IHNjcmlwdElkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsb3NlKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCcmVha3BvaW50cyhmaWxlUGF0aCkge1xyXG4gICAgICAgIHZhciBicHMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBiIG9mIHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gYi5icmVha3BvaW50SWQuc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVOYW1lO1xyXG4gICAgICAgICAgICBsZXQgbGluZU51bWJlcjtcclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7IC8vIHBhdGggbWF5IGNvbnRhaW4gYSBEcml2ZSBsZXR0ZXIgb24gd2luMzJcclxuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoLTJdICsgJzonICsgcGFydHNbcGFydHMubGVuZ3RoLTFdO1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlciA9IHBhcnNlSW50KHBhcnRzWzFdKSsxOyAvL2Zyb20gMC1iYXNlIHRvIDEtYmFzZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pKzE7IC8vZnJvbSAwLWJhc2UgdG8gMS1iYXNlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PT0gZmlsZVBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGJwcy5wdXNoKGxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGhBbGlhcyA9IHRoaXMuaW5GaWxlTmFtZUFsaWFzZXMoZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVQYXRoQWxpYXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBicHMucHVzaChsaW5lTnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnBzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
966
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZGVidWdnZXIuanMiXSwibmFtZXMiOlsibG9nIiwiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsIkNEUCIsIkNPTk5FQ1RfUkVUUklFUyIsIkNPTk5FQ1RfU05PT1pFX0lOVEVSVkFMX01VTFQiLCJNQVhfREVQVEgiLCJJR05PUkVfU0NPUEVfQ0hBSU5fVkFSSUFCTEVTIiwibWF4RmluZGVkRGVwdGgiLCJ0cmFuc2Zvcm1Ub0lERVN0eWxlIiwiZmlsZU5hbWUiLCJ1cmlJbmRleCIsImluZGV4T2YiLCJicERhdGEiLCJzdWJzdHJpbmciLCJ1cmkiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwidXJsIiwiZmlsZVVSTFRvUGF0aCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImRlbGV0ZVZhbHVlcyIsImFyciIsImRlcHRoIiwicmVzdWx0IiwibWFwIiwiaXRlbSIsInZhbHVlIiwiY2xhc3NOYW1lIiwiY2xvbmVWYWx1ZSIsIk9iamVjdCIsImFzc2lnbiIsIm9iamVjdElkIiwiY2xvbmUiLCJleHRyYWN0QnJlYWtwb2ludERhdGEiLCJicFN0ciIsInBhcnRzIiwic3BsaXQiLCJsaW5lTnVtYmVyIiwicGFyc2VJbnQiLCJzcGxpY2UiLCJqb2luIiwidmFsaWRhdGVCcmVha3BvaW50IiwiYnJlYWtwb2ludCIsImJyT2JqIiwiYnJlYWtwb2ludElkIiwiYnJMaW5lTnVtYmVyIiwibG9jYXRpb25zIiwiQXJyYXkiLCJpc0FycmF5IiwiYnJGaWxlTmFtZSIsIml0ZW1MaW5lTnVtYmVyIiwibXNnIiwibGluZSIsIkRlYnVnZ2VyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJfcGlkIiwiX3BvcnQiLCJ1bmRlZmluZWQiLCJfaG9zdCIsIl9icmVha3BvaW50cyIsIl9wZW5kaW5nQlAiLCJfcGF1c2VkIiwiX2NsaWVudCIsIl9maWxlTmFtZUFsaWFzZXMiLCJfYnJlYWtwb2ludEVycm9ycyIsInJlc2V0IiwiY2xvc2UiLCJnZXRQcm9wZXJ0aWVzQnlPYmplY3RJZCIsImVsbSIsImRhdGEiLCJfUnVudGltZSIsImdldFByb3BlcnRpZXMiLCJnZXRQcm9taWNlQWxsUmVzdWx0IiwibWFwUmVzdWx0RmlsdGVyZWQiLCJwcm9taXNlQWxsUHJvbWlzZSIsImFsbCIsInRoZW4iLCJmaWx0ZXIiLCJwcm9taXNlcyIsImdldFByb3BlcnRpZXNSZXN1bHQiLCJtYXBSZXN1bHQiLCJnZXRQcm9wZXJ0aWVzSW5uZXJSZXN1bHQiLCJzY29wZUl0ZW0iLCJvYmplY3RJZFJlc3BvbnNlIiwiY2hpbGQiLCJ2YWx1ZXMiLCJwcm9jZXNzU2NvcGUiLCJzY29wZUNoYWluIiwic2NvcGVDaGFpblJlc3VsdCIsImNoYWluIiwib2JqZWN0IiwidHlwZSIsImVsIiwicHJvY2Vzc0NhbGxGcmFtZXMiLCJjYWxsRnJhbWVzIiwiY2FsbEZyYW1lc01hcFJlc3VsdCIsImNhbGxGcmFtZSIsInByb2Nlc3NTY29wZVJlc3VsdCIsImluQnJlYWtwb2ludHMiLCJpdGVtVXJsIiwiYnAiLCJ0b0xvd2VyQ2FzZSIsIm9yaWdpbiIsInNjcmlwdFBhdGgiLCJpbkZpbGVOYW1lQWxpYXNlcyIsImFsaWFzIiwiY29udGludWVDb25uZWN0Iiwib24iLCJtIiwiZmlsZWxjIiwiYnJlYWtwb2ludEZvckNoYW5nZSIsImZpbmRSZXN1bHQiLCJmaW5kIiwiYnJlYWtwb2ludGxjIiwiaW5jbHVkZXMiLCJwdXNoIiwiX0RlYnVnZ2VyIiwicGF1c2UiLCJtVXJsIiwiYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24iLCJicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCIsInNldEJyZWFrcG9pbnQiLCJyZXN1bWUiLCJyZWFzb24iLCJfYnJva2VPblN0YXJ0IiwicG9zc2libGVCcmVha3BvaW50c0RhdGEiLCJlQ2FsbEZyYW1lcyIsImJyZWFrcG9pbnRzTWFwUmVzdWx0Iiwic2NyaXB0SWQiLCJsb2NhdGlvbiIsImluaXRpYWxEZXB0aCIsInVuaXF1ZVNjcmlwdElkQXJyIiwiZmluZGVkIiwiZW5kc1dpdGgiLCJwb3NzaWJsZUJyZWFrcG9pbnRzIiwiZ2V0UG9zc2libGVCcmVha3BvaW50cyIsInNjcmlwdFNvdXJjZSIsImdldFNjcmlwdFNvdXJjZSIsInNjcmlwdFNvdXJjZVNwbGl0IiwiZmlsZUxpbmVOdW1iZXJzTGVuZ3RoIiwiYnJlYWtwb2ludHMiLCJmaWxlIiwic2NvcGVDaGFpblRyZWUiLCJicmVha3BvaW50RGF0YSIsInZhcmlhYmxlcyIsImFkZFZhcmlhYmxlc0Zyb21TY29wZUNoYWluVHJlZSIsImFkZE94eWdlblZhcmlhYmxlc0Zyb21HbG9iYWxTY29wZSIsImlzc2V0IiwibG9jIiwicmVhbEJyZmluZGVkIiwiYnJlYWtwb2ludEVycm9yIiwiYnIiLCJwb3NzaWJsZUJyZWFrcG9pbnREYXRhIiwicmVzb2x2ZWQiLCJlbWl0IiwiaWdub3JlIiwibWVzc2FnZSIsImNvbnRpbnVlIiwib25CcmVha3BvaW50UmVzb2x2ZWQiLCJSdW50aW1lIiwiZW5hYmxlIiwic2V0UGF1c2VPbkV4Y2VwdGlvbnMiLCJzdGF0ZSIsInNldEFzeW5jQ2FsbFN0YWNrRGVwdGgiLCJtYXhEZXB0aCIsInNldEJsYWNrYm94UGF0dGVybnMiLCJwYXR0ZXJucyIsInJ1bklmV2FpdGluZ0ZvckRlYnVnZ2VyIiwicGF1c2VkIiwidmFsaWRhdGVSZXN1bHQiLCJjb25uZWN0IiwicG9ydCIsImhvc3QiLCJzbm9vemVUaW1lIiwibGFzdEVycm9yIiwicmV0cmllcyIsIndhcm4iLCJhbGlhc1Jlc3VsdCIsInBhdGhUb0ZpbGVVUkwiLCJ0b1N0cmluZyIsImVyciIsInNldEJyZWFrcG9pbnRCeVVybCIsImNvbHVtbk51bWJlciIsImNhdGNoIiwicmVzcG9uc2UiLCJzZXRCcmVha3BvaW50c0FjdGl2ZSIsImFjdGl2ZSIsInJlbW92ZUJyZWFrcG9pbnQiLCJyZW1vdmVCciIsInJlc3VtZVRlcm1pbmF0ZSIsImRpc2FibGUiLCJyZW1vdmVCcmVha3BvaW50QnlWYWx1ZSIsImZpbGVQYXRoIiwiaW5wdXRMaW5lIiwiZmlsZVBhdGhBbGlhcyIsInNlbGYiLCJiIiwiY2xlYXJCcmVha3BvaW50cyIsInN0YXJ0TG9jYXRpb24iLCJzdGFydCIsInAiLCJwb3AiLCJzY29wZVZhciIsIm5hbWUiLCJ0cnlUb1JldHJpZXZlT2JqZWN0VmFsdWUiLCJvYmpWYWx1ZSIsImZvckVhY2giLCJwcm9wRGVzYyIsInBvRXZhbFJlc3VsdCIsImV2YWx1YXRlIiwiZXhwcmVzc2lvbiIsInJldHVybkJ5VmFsdWUiLCJlbnZFdmFsUmVzdWx0IiwidmFyc0V2YWxSZXN1bHQiLCJwYXJhbXNFdmFsUmVzdWx0IiwicmVzdWx0cyIsInBvIiwiZW52IiwidmFycyIsInBhcmFtcyIsImtleXMiLCJrZXkiLCJnZXRCcmVha3BvaW50cyIsImJwcyJdLCJtYXBwaW5ncyI6IkFBYUE7Ozs7Ozs7OztBQUVBOztBQUlBOzs7O0FBSEEsTUFBTUEsR0FBRyxHQUFHLHFCQUFPLFVBQVAsQ0FBWjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBbUJDLE9BQU8sQ0FBQyxRQUFELENBQWhDOztBQUNBLE1BQU1DLEdBQUcsR0FBR0QsT0FBTyxDQUFDLG1DQUFELENBQW5COztBQUdBLE1BQU1FLGVBQWUsR0FBRyxDQUF4QjtBQUNBLE1BQU1DLDRCQUE0QixHQUFHLENBQXJDO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLENBQWxCO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsQ0FDakMsU0FEaUMsRUFFakMsU0FGaUMsRUFHakMsUUFIaUMsRUFJakMsWUFKaUMsRUFLakMsV0FMaUMsQ0FBckM7QUFPQSxJQUFJQyxjQUFjLEdBQUcsQ0FBckI7O0FBRUEsTUFBTUMsbUJBQW1CLEdBQUlDLFFBQUQsSUFBYztBQUN0QyxNQUFJO0FBQ0EsVUFBTUMsUUFBUSxHQUFHRCxRQUFRLENBQUNFLE9BQVQsQ0FBaUIsT0FBakIsQ0FBakI7QUFDQSxVQUFNQyxNQUFNLEdBQUdILFFBQVEsQ0FB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Uy9FLFVBQVQ7QUFDSCxPQUZELE1BRU87QUFDSCxjQUFNOEosYUFBYSxHQUFHLEtBQUsxRixpQkFBTCxDQUF1QndGLFFBQXZCLENBQXRCOztBQUNBLFlBQUlFLGFBQUosRUFBbUI7QUFDZjZCLFVBQUFBLEdBQUcsQ0FBQzVHLElBQUosQ0FBUy9FLFVBQVQ7QUFDSDtBQUNKO0FBQ0o7O0FBQ0QsV0FBTzJMLEdBQVA7QUFDSDs7QUFuN0I4QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVjggZGVidWdnZXIgY2xpZW50LlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignRGVidWdnZXInKTtcclxuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xyXG5jb25zdCBDRFAgPSByZXF1aXJlKCdAb3h5Z2VuaHEvY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnKTtcclxuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xyXG5cclxuY29uc3QgQ09OTkVDVF9SRVRSSUVTID0gNDtcclxuY29uc3QgQ09OTkVDVF9TTk9PWkVfSU5URVJWQUxfTVVMVCA9IDI7XHJcbmNvbnN0IE1BWF9ERVBUSCA9IDU7XHJcbmNvbnN0IElHTk9SRV9TQ09QRV9DSEFJTl9WQVJJQUJMRVMgPSBbXHJcbiAgICAnZXhwb3J0cycsXHJcbiAgICAncmVxdWlyZScsXHJcbiAgICAnbW9kdWxlJyxcclxuICAgICdfX2ZpbGVuYW1lJyxcclxuICAgICdfX2Rpcm5hbWUnXHJcbl07XHJcbmxldCBtYXhGaW5kZWREZXB0aCA9IDA7XHJcblxyXG5jb25zdCB0cmFuc2Zvcm1Ub0lERVN0eWxlID0gKGZpbGVOYW1lKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHVyaUluZGV4ID0gZmlsZU5hbWUuaW5kZXhPZignZmlsZTonKTtcclxuICAgICAgICBjb25zdCBicERhdGEgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgdXJpSW5kZXgpO1xyXG4gICAgICAgIGxldCB1cmkgPSBmaWxlTmFtZS5zdWJzdHJpbmcodXJpSW5kZXgpO1xyXG4gICAgICAgIC8vIGZpeCBVTkMgcGF0aHNcclxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiB1cmkuc3RhcnRzV2l0aCgnZmlsZTovLy8nKSkge1xyXG4gICAgICAgICAgICB1cmkgPSAnZmlsZTovLycgKyB1cmkuc3Vic3RyaW5nKCdmaWxlOi8vLycubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJwRGF0YSArIHVybC5maWxlVVJMVG9QYXRoKHVyaSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3RyYW5zZm9ybVRvSURFU3R5bGUgZmlsZU5hbWUnLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcigndHJhbnNmb3JtVG9JREVTdHlsZSBlcnJvcicsIGUpO1xyXG4gICAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBzbm9vemUgZnVuY3Rpb24gLSBhc3luYyB3cmFwcGVyIGFyb3VuZCBzZXRUaW1lb3V0IGZ1bmN0aW9uXHJcbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG5cclxuY29uc3QgZGVsZXRlVmFsdWVzID0gKGFyciwgZGVwdGgpID0+IHtcclxuXHJcbiAgICBpZiAoZGVwdGggPiBtYXhGaW5kZWREZXB0aCkge1xyXG4gICAgICAgIG1heEZpbmRlZERlcHRoID0gZGVwdGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRlcHRoID4gTUFYX0RFUFRIKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQgPSBhcnIubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLmNsYXNzTmFtZSAmJiBpdGVtLnZhbHVlLmNsYXNzTmFtZSA9PT0gJ0Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25zdCBjbG9uZVZhbHVlID0gT2JqZWN0LmFzc2lnbihpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgZGVsZXRlIGNsb25lVmFsdWUub2JqZWN0SWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gT2JqZWN0LmFzc2lnbihpdGVtLCB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2xvbmVWYWx1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZGVsZXRlIGNsb25lLm9iamVjdElkO1xyXG4gICAgICAgICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RCcmVha3BvaW50RGF0YShicFN0cikge1xyXG4gICAgaWYgKCFicFN0ciB8fCB0eXBlb2YgYnBTdHIgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBicFN0ciA9IHRyYW5zZm9ybVRvSURFU3R5bGUoYnBTdHIpO1xyXG4gICAgICAgIGNvbnN0IHBhcnRzID0gYnBTdHIuc3BsaXQoJzonKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGluZU51bWJlciA9IHBhcnNlSW50KHBhcnRzWzFdKTtcclxuXHJcbiAgICAgICAgLy8gcm9tb3ZlIGZpbGUgbnVtYmVyLCBsaW5lIG51bWJlciwgY29sdW1uIG51bWJlclxyXG4gICAgICAgIHBhcnRzLnNwbGljZSgwLCAzKTtcclxuXHJcbiAgICAgICAgLy8gbG9va3MgbGluZSBuZWVkIG9ubHkgZm9yIHdpbmRvd3MgcGF0aCB3aGl0aCBkaXNrLCBsaWtlIEM6Ly9cclxuICAgICAgICAvLyBmb3Igd2luZG93cyBuZXR3b3JrIGZvbGRlcnMgYW5kIG1hYyBub3QgbmVlZFxyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGFydHMuam9pbignOicpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXJcclxuICAgICAgICB9O1xyXG5cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBleHRyYWN0IGJyZWFrcG9pbnQgZGF0YTogJHticFN0cn1gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVCcmVha3BvaW50KGJyZWFrcG9pbnQpIHtcclxuICAgIGNvbnN0IGJyT2JqID0gZXh0cmFjdEJyZWFrcG9pbnREYXRhKGJyZWFrcG9pbnQuYnJlYWtwb2ludElkKTtcclxuXHJcbiAgICBjb25zdCBickxpbmVOdW1iZXIgPSBick9iai5saW5lTnVtYmVyICsgMTsgLy8gZnJvbSAwLWJhc2UgdG8gMSBiYXNlO1xyXG5cclxuICAgIGlmIChicmVha3BvaW50ICYmIGJyZWFrcG9pbnQubG9jYXRpb25zICYmIEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludC5sb2NhdGlvbnMpICYmIGJyZWFrcG9pbnQubG9jYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICBicmVha3BvaW50LmxvY2F0aW9ucy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYnJGaWxlTmFtZSA9IGJyT2JqLmZpbGVOYW1lO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtTGluZU51bWJlciA9IGl0ZW0ubGluZU51bWJlciArIDE7IC8vIGZyb20gMC1iYXNlIHRvIDEgYmFzZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChickxpbmVOdW1iZXIgIT09IGl0ZW1MaW5lTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbXNnOiBgQnJlYWtwb2ludHMgd2FybmluZyA6ICR7YnJGaWxlTmFtZX0gRG9uJ3QgaGF2ZSBvcHBvcnR1bml0eSB0byBoYXZlIGJyZWFrcG9pbnQgYXQgbGluZSA6IGAsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGJyRmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZTogYnJMaW5lTnVtYmVyXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxufVxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWJ1Z2dlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwaWQpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgICB0aGlzLl9waWQgPSBwaWQ7XHJcbiAgICAgICAgdGhpcy5fcG9ydCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9ob3N0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0JQID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzID0gW107XHJcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlc2V0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGllbnQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2ZpbGVOYW1lQWxpYXNlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFByb3BlcnRpZXNCeU9iamVjdElkKG9iamVjdElkLCBkZXB0aCwgZWxtKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7fTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZ2V0UHJvcGVydGllcyh7XHJcbiAgICAgICAgICAgICAgICBvYmplY3RJZCA6IG9iamVjdElkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2dldFByb3BlcnRpZXMgZWxtJywgZWxtKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2dldFByb3BlcnRpZXMgZScsIGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKGNsb25lICYmIGNsb25lICYmIGNsb25lLnJlc3VsdCkge1xyXG4gICAgICAgICAgICBjbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIGNsb25lLCB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGRlbGV0ZVZhbHVlcyhjbG9uZS5yZXN1bHQsIGRlcHRoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRQcm9taWNlQWxsUmVzdWx0KG1hcFJlc3VsdEZpbHRlcmVkKSB7XHJcbiAgICAgICAgbGV0IHByb21pc2VBbGxQcm9taXNlID0gYXdhaXQgUHJvbWlzZS5hbGwobWFwUmVzdWx0RmlsdGVyZWQpLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChwcm9taXNlQWxsUHJvbWlzZSAmJiBBcnJheS5pc0FycmF5KHByb21pc2VBbGxQcm9taXNlKSAmJiBwcm9taXNlQWxsUHJvbWlzZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHByb21pc2VBbGxQcm9taXNlID0gcHJvbWlzZUFsbFByb21pc2UuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHByb21pc2VBbGxQcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFByb3BlcnRpZXMob2JqZWN0SWQsIGRlcHRoLCBlbG0pIHtcclxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBnZXRQcm9wZXJ0aWVzUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzQnlPYmplY3RJZChvYmplY3RJZCwgZGVwdGgsIGVsbSk7XHJcblxyXG4gICAgICAgIGlmIChnZXRQcm9wZXJ0aWVzUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChnZXRQcm9wZXJ0aWVzUmVzdWx0ICYmIGdldFByb3BlcnRpZXNSZXN1bHQucmVzdWx0ICYmIEFycmF5LmlzQXJyYXkoZ2V0UHJvcGVydGllc1Jlc3VsdC5yZXN1bHQpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFwUmVzdWx0ID0gZ2V0UHJvcGVydGllc1Jlc3VsdC5yZXN1bHQubWFwKGFzeW5jIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLm9iamVjdElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFByb3BlcnRpZXNJbm5lclJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyhpdGVtLnZhbHVlLm9iamVjdElkLCBkZXB0aCsxLCBpdGVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnNjb3BlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydGllc0lubmVyUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFwUmVzdWx0RmlsdGVyZWQgPSBtYXBSZXN1bHQuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aDogZGVwdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdElkUmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oe30sIGdldFByb3BlcnRpZXNSZXN1bHQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1hcFJlc3VsdEZpbHRlcmVkICYmIEFycmF5LmlzQXJyYXkobWFwUmVzdWx0RmlsdGVyZWQpICYmIG1hcFJlc3VsdEZpbHRlcmVkLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCB0aGlzLmdldFByb21pY2VBbGxSZXN1bHQobWFwUmVzdWx0RmlsdGVyZWQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZUFsbFByb21pc2UgJiYgQXJyYXkuaXNBcnJheShwcm9taXNlQWxsUHJvbWlzZSkgJiYgcHJvbWlzZUFsbFByb21pc2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGQgPSBwcm9taXNlQWxsUHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aDogZGVwdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdElkUmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oe30sIGdldFByb3BlcnRpZXNSZXN1bHQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbih2YWx1ZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2Vzc1Njb3BlKHNjb3BlQ2hhaW4sIGRlcHRoKSB7XHJcbiAgICAgICAgbGV0IHNjb3BlQ2hhaW5SZXN1bHQgPSBhd2FpdCBzY29wZUNoYWluLm1hcChhc3luYyAoY2hhaW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGNoYWluICYmIGNoYWluLm9iamVjdCAmJiBjaGFpbi5vYmplY3Qub2JqZWN0SWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2hhaW4ub2JqZWN0Lm9iamVjdElkID09PSAnc3RyaW5nJyAmJiBjaGFpbi50eXBlICE9PSAnZ2xvYmFsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFByb3BlcnRpZXNSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXMoY2hhaW4ub2JqZWN0Lm9iamVjdElkLCBkZXB0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNjb3BlQ2hhaW5SZXN1bHQgPSBzY29wZUNoYWluUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoc2NvcGVDaGFpblJlc3VsdCkudGhlbih2YWx1ZXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByb2Nlc3NDYWxsRnJhbWVzKGNhbGxGcmFtZXMsIGRlcHRoKSB7XHJcbiAgICAgICAgbGV0IGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBhd2FpdCBjYWxsRnJhbWVzLm1hcChhc3luYyhjYWxsRnJhbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxsRnJhbWUuc2NvcGVDaGFpbiAmJiBBcnJheS5pc0FycmF5KGNhbGxGcmFtZS5zY29wZUNoYWluKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc1Njb3BlUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzU2NvcGUoY2FsbEZyYW1lLnNjb3BlQ2hhaW4sIGRlcHRoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NvcGVSZXN1bHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsRnJhbWVzTWFwUmVzdWx0ID0gY2FsbEZyYW1lc01hcFJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGNhbGxGcmFtZXNNYXBSZXN1bHQpLnRoZW4odmFsdWVzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpbkJyZWFrcG9pbnRzKGl0ZW1VcmwpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzICYmIEFycmF5LmlzQXJyYXkodGhpcy5fYnJlYWtwb2ludHMpICYmIHRoaXMuX2JyZWFrcG9pbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubWFwKChicCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwgJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVtVXJsLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luLnNjcmlwdFBhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4uc2NyaXB0UGF0aC50b0xvd2VyQ2FzZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwudG9Mb3dlckNhc2UoKSA9PT0gYnAub3JpZ2luLnNjcmlwdFBhdGgudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgaW5GaWxlTmFtZUFsaWFzZXMoZmlsZU5hbWUpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVOYW1lQWxpYXNlcyAmJiBBcnJheS5pc0FycmF5KHRoaXMuX2ZpbGVOYW1lQWxpYXNlcykgJiYgdGhpcy5fZmlsZU5hbWVBbGlhc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzLm1hcCgoYWxpYXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBhbGlhcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgJiZcclxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZS50b0xvd2VyQ2FzZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGZpbGVOYW1lLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFsaWFzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb250aW51ZUNvbm5lY3QoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsaWVudC5vbignRGVidWdnZXIuc2NyaXB0UGFyc2VkJywgYXN5bmMobSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLnVybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0udXJsLnRvTG93ZXJDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZWxjID0gbS51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludEZvckNoYW5nZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kUmVzdWx0ID0gdGhpcy5fYnJlYWtwb2ludHMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5vcmlnaW4gJiYgaXRlbS5vcmlnaW4uc2NyaXB0UGF0aCAmJiBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50bGMgPSBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRsYyA9PT0gZmlsZWxjICYmIGl0ZW0ub3JpZ2luLnNjcmlwdFBhdGggIT09IG0udXJsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlTmFtZUFsaWFzZXMuaW5jbHVkZXMobS51cmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVOYW1lQWxpYXNlcy5wdXNoKG0udXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fRGVidWdnZXIucGF1c2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludDogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVybDogbS51cmxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLm1hcCgoYnApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UubVVybCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludC5vcmlnaW4gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50Rm9yQ2hhbmdlLmJyZWFrcG9pbnQub3JpZ2luLnNjcmlwdFBhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4uc2NyaXB0UGF0aCA9PT0gYnJlYWtwb2ludEZvckNoYW5nZS5icmVha3BvaW50Lm9yaWdpbi5zY3JpcHRQYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0UGF0aDogYnJlYWtwb2ludEZvckNoYW5nZS5tVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBicC5vcmlnaW4ubGluZU51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbiAmJiBBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uKSAmJiBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb25SZXN1bHQgPSBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5tYXAoYXN5bmMoYnApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXRCcmVha3BvaW50KGJwLnNjcmlwdFBhdGgsIGJwLmxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb25SZXN1bHQgPSBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCkudGhlbihhc3luYyh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnJlc3VtZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGllbnQub24oJ0RlYnVnZ2VyLnBhdXNlZCcsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChlLnJlYXNvbiA9PT0gJ0JyZWFrIG9uIHN0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYnJva2VPblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIENocm9tZSBkZWJ1Z2dlciBkb2Vzbid0IHNlZW0gdG8gcmVtb3ZlIGJyZWFrcG9pbnRzIHdoZW4gdXNpbmcgcmVtb3ZlQnJlYWtwb2ludFxyXG4gICAgICAgICAgICAgICAgLy8gYW5kICdzb21ldGhpbmcnIGlzIHN0aWxsIGdldHRpbmcgaGl0LiBub3QgY2xlYXIgd2h5IHRoaXMgaXMgaGFwcGVuaW5nLlxyXG4gICAgICAgICAgICAgICAgLy8gdGh1cywgd2UgZW1pdCBicmVhayBldmVudCBvbmx5IGlmIG1hdGNoaW5nIGJyZWFrcG9pbnQgc3RpbGwgZXhpc3RzIGluIHRoaXMuX2JyZWFrcG9pbnRzXHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zc2libGVCcmVha3BvaW50c0RhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBlQ2FsbEZyYW1lcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlICYmIGUuY2FsbEZyYW1lcyAmJiBBcnJheS5pc0FycmF5KGUuY2FsbEZyYW1lcykgJiYgZS5jYWxsRnJhbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBlLmNhbGxGcmFtZXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udXJsICYmIHRoaXMuaW5CcmVha3BvaW50cyhpdGVtLnVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludHNNYXBSZXN1bHQgPSB0aGlzLl9icmVha3BvaW50cy5tYXAoYXN5bmMoYnApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYnAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzWzBdICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9ucy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9uc1swXS5zY3JpcHRJZCA9PT0gZUNhbGxGcmFtZXNbMF0ubG9jYXRpb24uc2NyaXB0SWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zWzBdLmxpbmVOdW1iZXIgPT09IGVDYWxsRnJhbWVzWzBdLmxvY2F0aW9uLmxpbmVOdW1iZXIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluaXRpYWxEZXB0aCA9IDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmNhbGxGcmFtZXMgJiYgQXJyYXkuaXNBcnJheShlLmNhbGxGcmFtZXMpICYmIGUuY2FsbEZyYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlxdWVTY3JpcHRJZEFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbEZyYW1lcyA9IGUuY2FsbEZyYW1lcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kZWQgPSB0aGlzLl9icmVha3BvaW50cy5maW5kKChicmVha3BvaW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuYnJlYWtwb2ludElkLmVuZHNXaXRoKGl0ZW0udXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5sb2NhdGlvbiAmJiBpdGVtLmxvY2F0aW9uLnNjcmlwdElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaXF1ZVNjcmlwdElkQXJyLmluY2x1ZGVzKGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVTY3JpcHRJZEFyci5wdXNoKGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lcy5tYXAoYXN5bmMoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zc2libGVCcmVha3BvaW50cyA9IGF3YWl0IHRoaXMuZ2V0UG9zc2libGVCcmVha3BvaW50cyhpdGVtLmxvY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0U291cmNlID0gYXdhaXQgdGhpcy5nZXRTY3JpcHRTb3VyY2UoaXRlbS5sb2NhdGlvbi5zY3JpcHRJZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRTb3VyY2VTcGxpdCA9IHNjcmlwdFNvdXJjZS5zY3JpcHRTb3VyY2Uuc3BsaXQoJ1xcbicpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVMaW5lTnVtYmVyc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHRTb3VyY2VTcGxpdCAmJiBBcnJheS5pc0FycmF5KHNjcmlwdFNvdXJjZVNwbGl0KSAmJiBzY3JpcHRTb3VyY2VTcGxpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTGluZU51bWJlcnNMZW5ndGggPSBzY3JpcHRTb3VyY2VTcGxpdC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzZWUgaG93IGRlYmJ1Z2VyIHNlZSBzY3JpcHRcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzY3JpcHRTb3VyY2VTcGxpdC5tYXAoKHNjcmlwdFNvdXJjZUl0ZW0sIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKChpZHgpICsgJyAnICsgc2NyaXB0U291cmNlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50czogcG9zc2libGVCcmVha3BvaW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGl0ZW0udXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUxpbmVOdW1iZXJzTGVuZ3RoOiBmaWxlTGluZU51bWJlcnNMZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRTY3JpcHRTb3VyY2UgZScsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYWxsRnJhbWVzTWFwUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzQ2FsbEZyYW1lcyhjYWxsRnJhbWVzLCBpbml0aWFsRGVwdGgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBjYWxsRnJhbWVzTWFwUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsRnJhbWVzTWFwUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWtwb2ludHNNYXBSZXN1bHQgPSBicmVha3BvaW50c01hcFJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChicmVha3BvaW50c01hcFJlc3VsdCkudGhlbihhc3luYyAoc2NvcGVDaGFpblRyZWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGVDaGFpblRyZWUgJiYgQXJyYXkuaXNBcnJheShzY29wZUNoYWluVHJlZSkgJiYgc2NvcGVDaGFpblRyZWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNoYWluVHJlZSA9IHNjb3BlQ2hhaW5UcmVlLmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludERhdGEgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lIHdlIGFsd2F5cyBzZW5kIGJyZWFrcG9pbnQgb2YgdGhlIHRvcCBjYWxsIGZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlQ2FsbEZyYW1lcyAmJiBlQ2FsbEZyYW1lcy5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogZUNhbGxGcmFtZXNbMF0ubG9jYXRpb24ubGluZU51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogdHJhbnNmb3JtVG9JREVTdHlsZShlQ2FsbEZyYW1lc1swXS51cmwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkVmFyaWFibGVzRnJvbVNjb3BlQ2hhaW5UcmVlKGJyZWFrcG9pbnREYXRhLnZhcmlhYmxlcywgc2NvcGVDaGFpblRyZWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRPeHlnZW5WYXJpYWJsZXNGcm9tR2xvYmFsU2NvcGUoYnJlYWtwb2ludERhdGEudmFyaWFibGVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLl9icmVha3BvaW50RXJyb3JzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNzZXQgPSB0aGlzLl9icmVha3BvaW50cy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3JpZ2luICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3JpZ2luLmxpbmVOdW1iZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaXRlbS5vcmlnaW4ubGluZU51bWJlcikrMSA9PT0gcGFyc2VJbnQoYnJlYWtwb2ludERhdGEubGluZU51bWJlcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxvY2F0aW9ucyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGl0ZW0ubG9jYXRpb25zKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxvY2F0aW9ucy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9jYXRpb25zLmZpbmQobG9jID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChsb2MubGluZU51bWJlcikgPT09IHBhcnNlSW50KGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChpdGVtLm9yaWdpbi5saW5lTnVtYmVyKSAhPT0gMSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKSAhPT0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxCcmZpbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMubWFwKChicmVha3BvaW50RXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5fYnJlYWtwb2ludHMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubWFwKChicikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyRmlsZU5hbWUgPSB0cmFuc2Zvcm1Ub0lERVN0eWxlKGJyLm9yaWdpbi5zY3JpcHRQYXRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvc3NpYmxlQnJlYWtwb2ludERhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgPSBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5maW5kKChpdGVtKSA9PiBpdGVtLmZpbGUgPT09IGVDYWxsRnJhbWVzWzBdLnVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyRmlsZU5hbWUgPT09IGJyZWFrcG9pbnREYXRhLmZpbGVOYW1lICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBvc3NpYmxlQnJlYWtwb2ludERhdGEuZmlsZUxpbmVOdW1iZXJzTGVuZ3RoICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKzEgPT09IGJyLm9yaWdpbi5saW5lTnVtYmVyIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBici5vcmlnaW4ubGluZU51bWJlcisxID09PSBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxCcmZpbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWFsQnJmaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEucmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvc3NpYmxlQnJlYWtwb2ludERhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnREYXRhID0gcG9zc2libGVCcmVha3BvaW50c0RhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5maWxlID09PSBlQ2FsbEZyYW1lc1swXS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnREYXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGggIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKzEgPj0gcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS5saW5lTnVtYmVyID0gcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGggLSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrJywgYnJlYWtwb2ludERhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLl9icmVha3BvaW50RXJyb3JzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5tYXAoKGJyZWFrcG9pbnRFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50RXJyb3IgJiYgYnJlYWtwb2ludEVycm9yLm1zZyAmJiBicmVha3BvaW50RXJyb3IuZmlsZU5hbWUgJiYgYnJlYWtwb2ludEVycm9yLmxpbmUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZ25vcmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSAmJiBBcnJheS5pc0FycmF5KHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhKSAmJiBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5tYXAoKGl0ZW0pID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5maWxlID0gdHJhbnNmb3JtVG9JREVTdHlsZShpdGVtLmZpbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5maWxlID09PSBicmVha3BvaW50RXJyb3IuZmlsZU5hbWUgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnREYXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpdGVtLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludEVycm9yLmxpbmUgPj0gaXRlbS5maWxlTGluZU51bWJlcnNMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBicmVha3BvaW50RXJyb3IubGluZSAtIDI7IC8vIC8vIyBzb3VyY2VNYXBwaW5nVVJMIGFuZCB9LmNhbGwodGhpcywgZXhwb3J0cywgcmVxdWlyZSwgbW9kdWxlLCBfX2ZpbGVuYW1lLCBfX2Rpcm5hbWUpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBicmVha3BvaW50RXJyb3IubGluZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uYnJlYWtwb2ludHMgJiYgQXJyYXkuaXNBcnJheShpdGVtLmJyZWFrcG9pbnRzKSAmJiBpdGVtLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50RXJyb3IgJiYgYnJlYWtwb2ludEVycm9yLm1zZyAmJiBicmVha3BvaW50RXJyb3IubXNnLmluY2x1ZGVzKCdQb3NzaWJsZSBicmVha3BvaW50IGxpbmVzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uYnJlYWtwb2ludHMuaW5jbHVkZXMobGluZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGJyZWFrcG9pbnRFcnJvci5tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAke2xpbmV9LiBgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSBgIFBvc3NpYmxlIGJyZWFrcG9pbnQgbGluZXMgOiAke2l0ZW0uYnJlYWtwb2ludHMubWFwKChsaW5lKSA9PiBsaW5lKS5qb2luKCcsICcpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludEVycm9yICYmIGJyZWFrcG9pbnRFcnJvci5tc2cgJiYgYnJlYWtwb2ludEVycm9yLm1zZy5pbmNsdWRlcygncG9zc2libGUgYnJlYWtwb2ludCBsaW5lcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGJyZWFrcG9pbnRFcnJvci5tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAke2xpbmV9LiBgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnIEZpbGUgZG9uXFwndCBoYXZlIHBvc3NpYmxlIGJyZWFrcG9pbnQgbGluZXMnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrRXJyb3InLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbXNnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGJyZWFrcG9pbnRFcnJvci5saW5lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBicmVha3BvaW50RXJyb3IuZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5yZWFzb24gPT09ICdPT00nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdXQgb2YgbWVtb3J5IGxlYWtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGludWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9LCByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdicmVha3BvaW50c01hcFJlc3VsdCByZXMgcmVhc29uJyAsIHJlYXNvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50Lm9uKCdEZWJ1Z2dlci5icmVha3BvaW50UmVzb2x2ZWQnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludFJlc29sdmVkKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCB7IERlYnVnZ2VyLCBSdW50aW1lIH0gPSB0aGlzLl9jbGllbnQ7XHJcbiAgICAgICAgdGhpcy5fRGVidWdnZXIgPSBEZWJ1Z2dlcjtcclxuICAgICAgICB0aGlzLl9SdW50aW1lID0gUnVudGltZTtcclxuICAgICAgICBSdW50aW1lLmVuYWJsZSgpO1xyXG4gICAgICAgIERlYnVnZ2VyLmVuYWJsZSgpO1xyXG4gICAgICAgIERlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zKHsgc3RhdGU6ICdub25lJyB9KTtcclxuICAgICAgICBEZWJ1Z2dlci5zZXRBc3luY0NhbGxTdGFja0RlcHRoKHsgbWF4RGVwdGg6IDMyIH0pO1xyXG4gICAgICAgIERlYnVnZ2VyLnNldEJsYWNrYm94UGF0dGVybnMoeyBwYXR0ZXJuczogW10gfSk7XHJcbiAgICAgICAgLy8gb25seSB1c2UgJ2F3YWl0JyBmb3IgdGhlIGxhc3QgY2FsbCwgYWxsIHByZXZpb3VzIGNhbGwgdG8gRGVidWdnZXIgb3IgUnVudGltZSB3aWxsIHN0YWNrIG90aGVyd2lzZVxyXG4gICAgICAgIGF3YWl0IFJ1bnRpbWUucnVuSWZXYWl0aW5nRm9yRGVidWdnZXIoKTtcclxuICAgICAgICAvLyBhd2FpdCBmb3IgdGhlIGZpcnN0IGJyZWFrcG9pbnQgd2hpY2ggaXMgcGxhY2VkIGJ5IHRoZSBkZWJ1Z2dlciBhdXRvbWF0aWNhbGx5IFxyXG4gICAgICAgIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnBhdXNlZCgpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgncmVhZHknKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJyZWFrcG9pbnRSZXNvbHZlZChlKSB7XHJcbiAgICAgICAgLy8gYnJlYWtwb2ludHMgc2V0IGJlZm9yZSB0aGUgc2NyaXB0IHdhcyBsb2FkZWQgd2lsbCBiZSByZXNvbHZlZCBvbmNlIGl0IGxvYWRzXHJcbiAgICAgICAgZm9yICh2YXIgYnAgb2YgdGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgYnAgJiZcclxuICAgICAgICAgICAgICAgIGUgJiZcclxuICAgICAgICAgICAgICAgIGJwLmJyZWFrcG9pbnRJZCA9PT0gZS5icmVha3BvaW50SWRcclxuICAgICAgICAgICAgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRlUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKCBlLmxvY2F0aW9uICkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmVkIG9uIHJ1bnRpbWVcclxuICAgICAgICAgICAgICAgICAgICBicC5sb2NhdGlvbnMgPSBbZS5sb2NhdGlvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0ZUJyZWFrcG9pbnQoYnApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZS5sb2NhdGlvbnMgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZWQgb24gcGF1c2VcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVJlc3VsdCA9IHZhbGlkYXRlQnJlYWtwb2ludChicCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5wdXNoKHZhbGlkYXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbm5lY3RzIHRvIGEgZGVidWdnZXIuIERvZXMgbm90aGluZyBpZiBhbHJlYWR5IGNvbm5lY3RlZC5cclxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gRGVidWdnZXIgcG9ydC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY29ubmVjdChwb3J0LCBob3N0KSB7XHJcbiAgICAgICAgdGhpcy5fcG9ydCA9IHBvcnQ7XHJcbiAgICAgICAgdGhpcy5faG9zdCA9IGhvc3QgfHwgJ2xvY2FsaG9zdCc7XHJcblxyXG4gICAgICAgIGxldCBzbm9vemVUaW1lID0gMTAwMDtcclxuICAgICAgICBsZXQgbGFzdEVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmV0cmllcyA9IDA7IHJldHJpZXMgPCBDT05ORUNUX1JFVFJJRVM7IHJldHJpZXMrKykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50ID0gYXdhaXQgQ0RQKHsgcG9ydDogdGhpcy5fcG9ydCwgaG9zdDogdGhpcy5faG9zdCB9KTtcclxuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbG9nLndhcm4oYERlYnVnZ2VyIGNvbm5lY3Rpb24gZmFpbGVkLiBXaWxsIHJldHJ5IGluICR7c25vb3plVGltZS8xMDAwfXMuIEVycm9yOiBgLCBsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoc25vb3plVGltZSk7XHJcbiAgICAgICAgICAgIHNub296ZVRpbWUgKj0gQ09OTkVDVF9TTk9PWkVfSU5URVJWQUxfTVVMVDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgZGVidWdnZXI6ICcsIGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGxhc3RFcnJvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29udGludWVDb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYnJlYWtwb2ludCBmb3IgYSBwYXJ0aWN1bGFyIHNjcmlwdC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBTY3JpcHQgcGF0aC5cclxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gTGluZSBudW1iZXIuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldEJyZWFrcG9pbnQoc2NyaXB0UGF0aCwgbGluZU51bWJlcikge1xyXG4gICAgICAgIGxldCBmaWxlTmFtZSA9IHNjcmlwdFBhdGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGFsaWFzUmVzdWx0ID0gdGhpcy5pbkZpbGVOYW1lQWxpYXNlcyhmaWxlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChhbGlhc1Jlc3VsdCkge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IGFsaWFzUmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZmlsZU5hbWUgPSB1cmwucGF0aFRvRmlsZVVSTChmaWxlTmFtZSkudG9TdHJpbmcoKTtcclxuICAgICAgICBsZXQgZXJyID0gbnVsbDtcclxuXHJcbiAgICAgICAgbGV0IGJyZWFrcG9pbnQgPSBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5zZXRCcmVha3BvaW50QnlVcmwoe1xyXG4gICAgICAgICAgICB1cmw6IGZpbGVOYW1lLFxyXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLTEsIC8vIGZyb20gMS1iYXNlIHRvIDAtYmFzZVxyXG4gICAgICAgICAgICBjb2x1bW5OdW1iZXI6IDBcclxuICAgICAgICB9KS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgZXJyID0gZTtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHNldCBhbiBsYXJlYWR5IGV4aXN0aW5nIGJyZWFrcG9pbnRcclxuICAgICAgICAgICAgaWYgKCFlLnJlc3BvbnNlIHx8IGUucmVzcG9uc2UubWVzc2FnZSAhPT0gJ0JyZWFrcG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzLicpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJyZWFrcG9pbnQub3JpZ2luID0ge1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0UGF0aDogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5ldyBicmVhY2twb2ludCByZXNvbHZlZCBzdWNjZXNzXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludFJlc29sdmVkKGJyZWFrcG9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYnJlYWtwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRCcmVha3BvaW50c0FjdGl2ZShhY3RpdmUpIHtcclxuICAgICAgICBpZiAodGhpcy5fRGVidWdnZXIgJiYgdGhpcy5fRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKHsnYWN0aXZlJzogYWN0aXZlfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldEJyZWFrcG9pbnRzQWN0aXZlKGFjdGl2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKSB7XHJcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50cy5maWx0ZXIoKGJwKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBicC5icmVha3BvaW50SWQgIT09IGJyZWFrcG9pbnRJZDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlQnIgPSB7IGJyZWFrcG9pbnRJZDogYnJlYWtwb2ludElkIH07XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50KHJlbW92ZUJyKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb250aW51ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlc3VtZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlc3VtZVRlcm1pbmF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZXN1bWUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc2FibGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIuZGlzYWJsZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUoZmlsZVBhdGgsIGlucHV0TGluZSkge1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlUGF0aEFsaWFzID0gdGhpcy5pbkZpbGVOYW1lQWxpYXNlcyhmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxpbmUgPSBpbnB1dExpbmUgLSAxOyAvLyBmcm9tIDEtYmFzZSB0byAwLWJhc2VcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGIgb2YgdGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGIgJiYgYi5icmVha3BvaW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBiLmJyZWFrcG9pbnRJZC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lTnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHsgLy8gcGF0aCBtYXkgY29udGFpbiBhIERyaXZlIGxldHRlciBvbiB3aW4zMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMl0gKyAnOicgKyBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZU5hbWUgPT09IGZpbGVQYXRoIHx8IGZpbGVOYW1lID09PSBmaWxlUGF0aEFsaWFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbGluZU51bWJlciA9PT0gbGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlbGYucmVtb3ZlQnJlYWtwb2ludChiLmJyZWFrcG9pbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgd2hlbiB3b3JrIHdpdGggYnJlYWtwb2ludCBkYXRhOicsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbGVhckJyZWFrcG9pbnRzKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBiIG9mIHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzZWxmLnJlbW92ZUJyZWFrcG9pbnQoYi5icmVha3BvaW50SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFBvc3NpYmxlQnJlYWtwb2ludHMoc3RhcnRMb2NhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHBvc3NpYmxlQnJlYWtwb2ludHMgPSBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5nZXRQb3NzaWJsZUJyZWFrcG9pbnRzKHtcclxuICAgICAgICAgICAgc3RhcnQ6IHtcclxuICAgICAgICAgICAgICAgIHNjcmlwdElkOiBzdGFydExvY2F0aW9uLnNjcmlwdElkLFxyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogMCxcclxuICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChwb3NzaWJsZUJyZWFrcG9pbnRzICYmIHBvc3NpYmxlQnJlYWtwb2ludHMubG9jYXRpb25zICYmIEFycmF5LmlzQXJyYXkocG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMpICYmIHBvc3NpYmxlQnJlYWtwb2ludHMubG9jYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbS5saW5lTnVtYmVyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSBpdGVtLmxpbmVOdW1iZXIgKyAxOyAvLyBmcm9tIDAtYmFzZSB0byAxLWJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmNsdWRlcyhsaW5lTnVtYmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzdWx0ICYmIEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgcCA9IHJlc3VsdC5wb3AoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5jbHVkZXMocC0xKSkge1xyXG4gICAgICAgICAgICAgICAgLy9pbmdvcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwLTEgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocC0xKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRTY3JpcHRTb3VyY2Uoc2NyaXB0SWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIuZ2V0U2NyaXB0U291cmNlKHsgc2NyaXB0SWQ6IHNjcmlwdElkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsb3NlKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZGRWYXJpYWJsZXNGcm9tU2NvcGVDaGFpblRyZWUodmFyaWFibGVzLCBzY29wZUNoYWluVHJlZSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc2NvcGVDaGFpblRyZWUpXHJcbiAgICAgICAgICAgIHx8IHNjb3BlQ2hhaW5UcmVlLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICAgIHx8ICFBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlWzBdKVxyXG4gICAgICAgICAgICB8fCBzY29wZUNoYWluVHJlZVswXS5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICB8fCAhQXJyYXkuaXNBcnJheShzY29wZUNoYWluVHJlZVswXVswXSlcclxuICAgICAgICAgICAgfHwgc2NvcGVDaGFpblRyZWVbMF1bMF0ubGVuZ3RoID09IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7IG9iamVjdElkUmVzcG9uc2UgfSA9IHNjb3BlQ2hhaW5UcmVlWzBdWzBdWzBdO1xyXG4gICAgICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBvYmplY3RJZFJlc3BvbnNlO1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGVWYXIgb2YgcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmICghSUdOT1JFX1NDT1BFX0NIQUlOX1ZBUklBQkxFUy5pbmNsdWRlcyhzY29wZVZhci5uYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHR5cGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGVWYXIgJiYgc2NvcGVWYXIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gc2NvcGVWYXIudmFsdWUudHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGVWYXIudmFsdWUudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY29wZVZhci52YWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IHRoaXMudHJ5VG9SZXRyaWV2ZU9iamVjdFZhbHVlKHNjb3BlVmFyLnZhbHVlLm9iamVjdElkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogc2NvcGVWYXIubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlIHx8ICd1bmRlZmluZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdHJ5VG9SZXRyaWV2ZU9iamVjdFZhbHVlKG9iamVjdElkKSB7XHJcbiAgICAgICAgaWYgKCFvYmplY3RJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlc3VsdCB9ID0gYXdhaXQgdGhpcy5fUnVudGltZS5nZXRQcm9wZXJ0aWVzKHsgb2JqZWN0SWQgfSk7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ialZhbHVlID0ge307XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZm9yRWFjaChwcm9wRGVzYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BEZXNjLnZhbHVlICYmIHByb3BEZXNjLnZhbHVlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialZhbHVlW3Byb3BEZXNjLm5hbWVdID0gcHJvcERlc2MudmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUnVudGltZS5nZXRQcm9wZXJ0aWVzIGNhbGwgZmFpbGVkJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWRkT3h5Z2VuVmFyaWFibGVzRnJvbUdsb2JhbFNjb3BlKHZhcmlhYmxlcykge1xyXG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBwb0V2YWxSZXN1bHQgfSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZXZhbHVhdGUoeyBleHByZXNzaW9uOiAncG8nLCByZXR1cm5CeVZhbHVlOiB0cnVlIH0pO1xyXG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBlbnZFdmFsUmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmV2YWx1YXRlKHsgZXhwcmVzc2lvbjogJ2VudicsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IHZhcnNFdmFsUmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmV2YWx1YXRlKHsgZXhwcmVzc2lvbjogJ3ZhcnMnLCByZXR1cm5CeVZhbHVlOiB0cnVlIH0pO1xyXG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBwYXJhbXNFdmFsUmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmV2YWx1YXRlKHsgZXhwcmVzc2lvbjogJ3BhcmFtcycsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHtcclxuICAgICAgICAgICAgcG86IHBvRXZhbFJlc3VsdCxcclxuICAgICAgICAgICAgZW52OiBlbnZFdmFsUmVzdWx0LFxyXG4gICAgICAgICAgICB2YXJzOiB2YXJzRXZhbFJlc3VsdCxcclxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXNFdmFsUmVzdWx0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBrZXksXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnJlYWtwb2ludHMoZmlsZVBhdGgpIHtcclxuICAgICAgICB2YXIgYnBzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYiBvZiB0aGlzLl9icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGIuYnJlYWtwb2ludElkLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlTmFtZTtcclxuICAgICAgICAgICAgbGV0IGxpbmVOdW1iZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykgeyAvLyBwYXRoIG1heSBjb250YWluIGEgRHJpdmUgbGV0dGVyIG9uIHdpbjMyXHJcbiAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aC0yXSArICc6JyArIHBhcnRzW3BhcnRzLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSkrMTsgLy9mcm9tIDAtYmFzZSB0byAxLWJhc2VcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoLTFdO1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlciA9IHBhcnNlSW50KHBhcnRzWzFdKSsxOyAvL2Zyb20gMC1iYXNlIHRvIDEtYmFzZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT09IGZpbGVQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBicHMucHVzaChsaW5lTnVtYmVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoQWxpYXMgPSB0aGlzLmluRmlsZU5hbWVBbGlhc2VzKGZpbGVQYXRoKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlUGF0aEFsaWFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnBzLnB1c2gobGluZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJwcztcclxuICAgIH1cclxufVxyXG4iXX0=