clientnode 4.0.1493 → 4.0.1494

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.
package/dist/string.js CHANGED
@@ -41,8 +41,15 @@ export const ALLOWED_VARIABLE_SYMBOLS = '0-9a-zA-Z_$';
41
41
  export const ALLOWED_STARTING_VARIABLE_SYMBOLS = 'a-zA-Z_$';
42
42
  export const FIX_ENCODING_ERROR_MAPPING = [['Ã\\x84', 'Ä'], ['Ã\\x96', 'Ö'], ['Ã\\x9c', 'Ü'], ['ä', 'ä'], ['ö', 'ö'], ['ü', 'ü'], ['\\x96', '-'], ['é', 'é'], ['è', 'e'], ['ô', 'o'], ['à ', 'á'], ['ø', 'ø'], ['Ã\\x9f', 'ß'], ['Ã', 'ß']];
43
43
  export const AsyncFunction =
44
- // eslint-disable-next-line @typescript-eslint/no-empty-function
45
- Object.getPrototypeOf(async function () {}).constructor;
44
+ /*
45
+ eslint-disable
46
+ @typescript-eslint/no-implied-eval,@typescript-eslint/no-unsafe-call
47
+ */
48
+ new Function('return Object.getPrototypeOf(async function() {})')().constructor;
49
+ /*
50
+ eslint-enable
51
+ @typescript-eslint/no-implied-eval,@typescript-eslint/no-unsafe-call
52
+ */
46
53
 
47
54
  /**
48
55
  * Translates a given string into the regular expression validated
@@ -445,7 +452,7 @@ export const compile = (expression, givenOptions = {}) => {
445
452
  // eslint-disable-next-line @typescript-eslint/no-unsafe-call
446
453
  innerTemplateFunction = new (options.async ? AsyncFunction : Function)(...(options.removeGlobalScope ? result.globalNames : []), ...result.scopeNames, `${options.execute ? '' : 'return '}${expression}`);
447
454
  } catch (error) {
448
- result.error = `Given expression "${expression}" could not be compiled width ` + `given scope names "${result.scopeNames.join('", "')}": ` + represent(error);
455
+ result.error = `Given ${options.async ? 'async' : 'sync'} expression ` + `"${expression}" could not be compiled width ` + `given scope names "${result.scopeNames.join('", "')}": ` + represent(error);
449
456
  }
450
457
  if (innerTemplateFunction) {
451
458
  const boundInnerTemplateFunction = innerTemplateFunction.bind(options.binding);
@@ -512,7 +519,7 @@ export const evaluate = (expression, givenOptions = {}) => {
512
519
  ...originalScopeNames.map(name => options.scope[name]))
513
520
  };
514
521
  } catch (error) {
515
- result.error = result.runtimeError = `Given expression "${expression}" could not be evaluated ` + `with given scope names "${scopeNames.join('", "')}": ` + represent(error);
522
+ result.error = result.runtimeError = `Given ${options.async ? 'async' : 'sync'} expression ` + `"${expression}" could not be evaluated with given scope ` + `names "${scopeNames.join('", "')}": ` + represent(error);
516
523
  }
517
524
  return result;
518
525
  };
@@ -850,4 +857,4 @@ export const limit = (value, limit = 100) => {
850
857
  const dots = '...';
851
858
  return value.substring(0, limit - dots.length) + dots;
852
859
  };
853
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3N0cmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAjIS91c3IvYmluL2VudiBiYWJlbC1ub2RlXG4vLyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbi8qKiBAbW9kdWxlIHN0cmluZyAqL1xuJ3VzZSBzdHJpY3QnXG4vKiAhXG4gICAgcmVnaW9uIGhlYWRlclxuICAgIFtQcm9qZWN0IHBhZ2VdKGh0dHBzOi8vdG9yYmVuLndlYnNpdGUvY2xpZW50bm9kZSlcblxuICAgIENvcHlyaWdodCBUb3JiZW4gU2lja2VydCAoaW5mb1tcIn5hdH5cIl10b3JiZW4ud2Vic2l0ZSkgMTYuMTIuMjAxMlxuXG4gICAgTGljZW5zZVxuICAgIC0tLS0tLS1cblxuICAgIFRoaXMgbGlicmFyeSB3cml0dGVuIGJ5IFRvcmJlbiBTaWNrZXJ0IHN0YW5kcyB1bmRlciBhIGNyZWF0aXZlIGNvbW1vbnNcbiAgICBuYW1pbmcgMy4wIHVucG9ydGVkIGxpY2Vuc2UuXG4gICAgU2VlIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvZGVlZC5kZVxuICAgIGVuZHJlZ2lvblxuKi9cbi8vIHJlZ2lvbiBpbXBvcnRzXG5pbXBvcnQge1xuICAgIENvbXBpbGF0aW9uUmVzdWx0LFxuICAgIENvbXBpbGVFeHByZXNzaW9uT3B0aW9ucyxcbiAgICBFdmFsdWF0ZUV4cHJlc3Npb25PcHRpb25zLFxuICAgIEV2YWx1YXRpb25SZXN1bHQsXG4gICAgTWFwcGluZyxcbiAgICBQbGFpbk9iamVjdCxcbiAgICBTdHJpbmdNYXJrT3B0aW9ucyxcbiAgICBUZW1wbGF0ZUZ1bmN0aW9uLFxuICAgIFF1ZXJ5UGFyYW1ldGVycyxcbiAgICBWYWx1ZU9mXG59IGZyb20gJy4vdHlwZSdcblxuaW1wb3J0IHtcbiAgICBBQkJSRVZJQVRJT05TLCBERUZBVUxUX0VOQ09ESU5HLCBTUEVDSUFMX1JFR0VYX1NFUVVFTkNFU1xufSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7Z2xvYmFsQ29udGV4dCwgTUFYSU1BTF9OVU1CRVJfT0ZfSVRFUkFUSU9OU30gZnJvbSAnLi9jb250ZXh0J1xuaW1wb3J0IHtpc0ZpbGVTeW5jLCBpbXBvcnRzfSBmcm9tICcuL2ZpbGVzeXN0ZW0nXG5pbXBvcnQge2RldGVybWluZVR5cGUsIHJlcHJlc2VudH0gZnJvbSAnLi9vYmplY3QnXG4vLyBlbmRyZWdpb25cbmV4cG9ydCBjb25zdCBLTk9XTl9ESVNBTExPV0VEX1ZBUklBQkxFX05BTUVTX0JVVF9PQkpFQ1RfS0VZUyA9IFtcbiAgICAnZGVmYXVsdCcsXG4gICAgJ2lmJywgJ2ZvcicsXG4gICAgJ2NsYXNzJywgJ2Z1bmN0aW9uJywgJ3JldHVybicsXG4gICAgJ2NvbnN0JywgJ2xldCcsICd2YXInXG5dXG5leHBvcnQgY29uc3QgUE9MWUZJTExfVEVNUExBVEVfU1RSSU5HUyA9IHt2YWx1ZTogZmFsc2V9XG4vLyBQYXJ0aWFsIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBzeW1ib2xzIHdoaWNoIHNob3VsZCBiZSBhbGxvd2VkIHdpdGhpbiBhXG4vLyB2YXJpYWJsZSBuYW1lIGV4Y2x1ZGluZyB0aGUgZmlyc3QgY2hhcmFjdGVyLlxuZXhwb3J0IGNvbnN0IEFMTE9XRURfVkFSSUFCTEVfU1lNQk9MUyA9ICcwLTlhLXpBLVpfJCdcbi8vIFBhcnRpYWwgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHN5bWJvbHMgd2hpY2ggc2hvdWxkIGJlIGFsbG93ZWQgYXNcbi8vIHN0YXJ0aW5nIGNoYXJhY3RlciBmb3IgYSB2YXJpYWJsZSBuYW1lLlxuZXhwb3J0IGNvbnN0IEFMTE9XRURfU1RBUlRJTkdfVkFSSUFCTEVfU1lNQk9MUyA9ICdhLXpBLVpfJCdcbmV4cG9ydCBjb25zdCBGSVhfRU5DT0RJTkdfRVJST1JfTUFQUElORyA9IFtcbiAgICBbJ8ODXFxcXHg4NCcsICfDhCddLFxuICAgIFsnw4NcXFxceDk2JywgJ8OWJ10sXG4gICAgWyfDg1xcXFx4OWMnLCAnw5wnXSxcbiAgICBbJ8ODwqQnLCAnw6QnXSxcbiAgICBbJ8ODwrYnLCAnw7YnXSxcbiAgICBbJ8ODwrwnLCAnw7wnXSxcblxuICAgIFsnXFxcXHg5NicsICctJ10sXG5cbiAgICBbJ8ODwqknLCAnw6knXSxcbiAgICBbJ8ODwqgnLCAnZSddLFxuXG4gICAgWyfDg8K0JywgJ28nXSxcblxuICAgIFsnw4MgJywgJ8OhJ10sXG4gICAgWyfDg8K4JywgJ8O4J10sXG5cbiAgICBbJ8ODXFxcXHg5ZicsICfDnyddLFxuICAgIFsnw4MnLCAnw58nXVxuXSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgQXN5bmNGdW5jdGlvbj1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFzeW5jIGZ1bmN0aW9uKCkge30pLmNvbnN0cnVjdG9yXG5cbi8qKlxuICogVHJhbnNsYXRlcyBhIGdpdmVuIHN0cmluZyBpbnRvIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGVkXG4gKiByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSB2YWx1ZSAtIFN0cmluZyB0byBjb252ZXJ0LlxuICogQHBhcmFtIGV4Y2x1ZGVTeW1ib2xzIC0gU3ltYm9scyBub3QgdG8gZXNjYXBlLlxuICogQHJldHVybnMgQ29udmVydGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGVzY2FwZVJlZ3VsYXJFeHByZXNzaW9ucyA9IChcbiAgICB2YWx1ZTogc3RyaW5nLCBleGNsdWRlU3ltYm9sczogQXJyYXk8c3RyaW5nPiA9IFtdXG4pOiBzdHJpbmcgPT4ge1xuICAgIC8vIE5PVEU6IFRoaXMgaXMgb25seSBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLlxuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEgJiYgIVNQRUNJQUxfUkVHRVhfU0VRVUVOQ0VTLmluY2x1ZGVzKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlXG5cbiAgICAvLyBUaGUgZXNjYXBlIHNlcXVlbmNlIG11c3QgYWxzbyBiZSBlc2NhcGVkOyBidXQgYXQgZmlyc3QuXG4gICAgaWYgKCFleGNsdWRlU3ltYm9scy5pbmNsdWRlcygnXFxcXCcpKVxuICAgICAgICB2YWx1ZS5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpXG5cbiAgICBmb3IgKGNvbnN0IHJlcGxhY2Ugb2YgU1BFQ0lBTF9SRUdFWF9TRVFVRU5DRVMpXG4gICAgICAgIGlmICghZXhjbHVkZVN5bWJvbHMuaW5jbHVkZXMocmVwbGFjZSkpXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChgXFxcXCR7cmVwbGFjZX1gLCAnZycpLCBgXFxcXCR7cmVwbGFjZX1gKVxuXG4gICAgcmV0dXJuIHZhbHVlXG59XG4vKipcbiAqIFRyYW5zbGF0ZXMgYSBnaXZlbiBuYW1lIGludG8gYSB2YWxpZCBKYXZhU2NyaXB0IG9uZS5cbiAqIEBwYXJhbSBuYW1lIC0gTmFtZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQ29udmVydGVkIG5hbWUgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9WYWxpZFZhcmlhYmxlTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGlmIChbJ2NsYXNzJywgJ2RlZmF1bHQnXS5pbmNsdWRlcyhuYW1lKSlcbiAgICAgICAgcmV0dXJuIGBfJHtuYW1lfWBcblxuICAgIHJldHVybiBuYW1lXG4gICAgICAgIC8vIFJlbW92ZSBhbGwgZGlzYWxsb3dlZCBzdGFydGluZyBjaGFyYWN0ZXJzLlxuICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBeW14ke0FMTE9XRURfU1RBUlRJTkdfVkFSSUFCTEVfU1lNQk9MU31dK2ApLCAnJylcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBkaXNhbGxvd2VkIGNoYXJhY3RlcnMgd2l0aGluIGEgdmFyaWFibGUgbmFtZSBhbmQgbWFrZVxuICAgICAgICAvLyBjb250aW51aW5nIGNoYXJhY3RlciB1cHBlciBjYXNlLlxuICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYFteJHtBTExPV0VEX1ZBUklBQkxFX1NZTUJPTFN9XSsoW2EtekEtWl0pYCwgJ2cnKSxcbiAgICAgICAgICAgIChfZnVsbE1hdGNoOiBzdHJpbmcsIGZpcnN0TGV0dGVyOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICAgICAgICAgICAgICBmaXJzdExldHRlci50b1VwcGVyQ2FzZSgpXG4gICAgICAgIClcbn1cbi8vIHJlZ2lvbiB1cmwgaGFuZGxpbmVcbi8qKlxuICogVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIGVuY29kaW5nICprZXkqIG9yICp2YWx1ZSogcGFydHMgb2YgYSBxdWVyeVxuICogY29tcG9uZW50LiBXZSBuZWVkIGEgY3VzdG9tIG1ldGhvZCBiZWNhdXNlIFwiZW5jb2RlVVJJQ29tcG9uZW50KClcIiBpcyB0b29cbiAqIGFnZ3Jlc3NpdmUgYW5kIGVuY29kZXMgc3R1ZmYgdGhhdCBkb2Vzbid0IGhhdmUgdG8gYmUgZW5jb2RlZCBwZXJcbiAqIFwiaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NjpcIi5cbiAqIEBwYXJhbSB1cmwgLSBVUkwgdG8gZW5jb2RlLlxuICogQHBhcmFtIGVuY29kZVNwYWNlcyAtIEluZGljYXRlcyB3aGV0aGVyIGdpdmVuIHVybCBzaG91bGQgZW5jb2RlXG4gKiB3aGl0ZXNwYWNlcyBhcyBcIitcIiBvciBcIiUyMFwiLlxuICogQHJldHVybnMgRW5jb2RlZCBnaXZlbiB1cmwuXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNvZGVVUklDb21wb25lbnRFeHRlbmRlZCA9IChcbiAgICB1cmw6IHN0cmluZywgZW5jb2RlU3BhY2VzID0gZmFsc2Vcbik6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh1cmwpXG4gICAgICAgIC5yZXBsYWNlKC8lNDAvZ2ksICdAJylcbiAgICAgICAgLnJlcGxhY2UoLyUzQS9naSwgJzonKVxuICAgICAgICAucmVwbGFjZSgvJTI0L2csICckJylcbiAgICAgICAgLnJlcGxhY2UoLyUyQy9naSwgJywnKVxuICAgICAgICAucmVwbGFjZSgvJTIwL2csIGVuY29kZVNwYWNlcyA/ICclMjAnIDogJysnKVxufVxuLyoqXG4gKiBBcHBlbmRzIGEgcGF0aCBzZWxlY3RvciB0byB0aGUgZ2l2ZW4gcGF0aCBpZiB0aGVyZSBpc24ndCBvbmUgeWV0LlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBmb3IgYXBwZW5kaW5nIGEgc2VsZWN0b3IuXG4gKiBAcGFyYW0gcGF0aFNlcGFyYXRvciAtIFRoZSBzZWxlY3RvciBmb3IgYXBwZW5kaW5nIHRvIGEgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBhcHBlbmRlZCBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgYWRkU2VwYXJhdG9yVG9QYXRoID0gKFxuICAgIHBhdGg6IHN0cmluZywgcGF0aFNlcGFyYXRvciA9ICcvJ1xuKTogc3RyaW5nID0+IHtcbiAgICBwYXRoID0gcGF0aC50cmltKClcblxuICAgIGlmIChwYXRoLnN1YnN0cmluZyhwYXRoLmxlbmd0aCAtIDEpICE9PSBwYXRoU2VwYXJhdG9yICYmIHBhdGgubGVuZ3RoKVxuICAgICAgICByZXR1cm4gcGF0aCArIHBhdGhTZXBhcmF0b3JcblxuICAgIHJldHVybiBwYXRoXG59XG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIHBhdGggaGFzIGdpdmVuIHBhdGggcHJlZml4LlxuICogQHBhcmFtIHByZWZpeCAtIFBhdGggcHJlZml4IHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0gcGF0aCAtIFBhdGggdG8gc2VhcmNoIGluLlxuICogQHBhcmFtIHNlcGFyYXRvciAtIERlbGltaXRlciB0byB1c2UgaW4gYSBwYXRoIChkZWZhdWx0IGlzIHRoZSBwb3NpeFxuICogY29uZm9ybSBzbGFzaCkuXG4gKiBAcmV0dXJucyBWYWx1ZSBcInRydWVcIiBpZiBnaXZlbiBwcmVmaXggb2NjdXJzIGFuZCBcImZhbHNlXCIgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgaGFzUGF0aFByZWZpeCA9IChcbiAgICBwcmVmaXg6IHVua25vd24gPSAnL2FkbWluJyxcbiAgICBwYXRoOiBzdHJpbmcgPSBnbG9iYWxDb250ZXh0LmxvY2F0aW9uPy5wYXRobmFtZSB8fCAnJyxcbiAgICBzZXBhcmF0b3IgPSAnLydcbik6IGJvb2xlYW4gPT4ge1xuICAgIGlmICh0eXBlb2YgcHJlZml4ID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoIXByZWZpeC5lbmRzV2l0aChzZXBhcmF0b3IpKVxuICAgICAgICAgICAgcHJlZml4ICs9IHNlcGFyYXRvclxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwYXRoID09PVxuICAgICAgICAgICAgcHJlZml4LnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoIC0gc2VwYXJhdG9yLmxlbmd0aCkgfHxcbiAgICAgICAgICAgIHBhdGguc3RhcnRzV2l0aChwcmVmaXgpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2Vcbn1cbi8qKlxuICogRXh0cmFjdHMgZG9tYWluIG5hbWUgZnJvbSBnaXZlbiB1cmwuIElmIG5vIGV4cGxpY2l0IGRvbWFpbiBuYW1lIGdpdmVuXG4gKiBjdXJyZW50IGRvbWFpbiBuYW1lIHdpbGwgYmUgYXNzdW1lZC4gSWYgbm8gcGFyYW1ldGVyIGlzIGdpdmVuLCB0aGUgY3VycmVudFxuICogZG9tYWluIG5hbWUgd2lsbCBiZSBkZXRlcm1pbmVkLlxuICogQHBhcmFtIHVybCAtIFRoZSB1cmwgdG8gZXh0cmFjdCBkb21haW4gZnJvbS5cbiAqIEBwYXJhbSBmYWxsYmFjayAtIFRoZSBmYWxsYmFjayBob3N0IG5hbWUgaWYgbm8gb25lIGV4aXRzIGluIGdpdmVuIHVybFxuICogKGRlZmF1bHQgaXMgY3VycmVudCBob3N0bmFtZSkuXG4gKiBAcmV0dXJucyBFeHRyYWN0ZWQgZG9tYWluLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RG9tYWluTmFtZSA9IChcbiAgICB1cmw6IHN0cmluZyA9IGdsb2JhbENvbnRleHQubG9jYXRpb24/LmhyZWYgfHwgJycsXG4gICAgZmFsbGJhY2s6IHN0cmluZyA9IGdsb2JhbENvbnRleHQubG9jYXRpb24/Lmhvc3RuYW1lIHx8ICcnXG4pOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8c3RyaW5nPiB8IG51bGwgPVxuICAgICAgICAvXihbYS16XSo6P1xcL1xcLyk/KFteL10rPykoPzo6WzAtOV0rKT8oPzpcXC8uKnwkKS9pLmV4ZWModXJsKVxuXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMiAmJiByZXN1bHRbMV0gJiYgcmVzdWx0WzJdKVxuICAgICAgICByZXR1cm4gcmVzdWx0WzJdXG5cbiAgICByZXR1cm4gZmFsbGJhY2tcbn1cbi8qKlxuICogRXh0cmFjdHMgcG9ydCBudW1iZXIgZnJvbSBnaXZlbiB1cmwuIElmIG5vIGV4cGxpY2l0IHBvcnQgbnVtYmVyIGlzIGdpdmVuXG4gKiBhbmQgbm8gZmFsbGJhY2sgaXMgZGVmaW5lZCwgdGhlIGN1cnJlbnQgcG9ydCBudW1iZXIgd2lsbCBiZSBhc3N1bWVkIGZvciBsb2NhbFxuICogbGlua3MuIEZvciBleHRlcm5hbCBsaW5rcyA4MCB3aWxsIGJlIGFzc3VtZWQgZm9yIGh0dHAgcHJvdG9jb2xzIGFuZCA0NDNcbiAqIGZvciBodHRwcyBwcm90b2NvbHMuXG4gKiBAcGFyYW0gdXJsIC0gVGhlIHVybCB0byBleHRyYWN0IHBvcnQgZnJvbS5cbiAqIEBwYXJhbSBmYWxsYmFjayAtIEZhbGxiYWNrIHBvcnQgbnVtYmVyIGlmIG5vIGV4cGxpY2l0IG9uZSB3YXMgZm91bmQuXG4gKiBEZWZhdWx0IGlzIGRlcml2ZWQgZnJvbSB0aGUgY3VycmVudCBwcm90b2NvbCBuYW1lLlxuICogQHJldHVybnMgRXh0cmFjdGVkIHBvcnQgbnVtYmVyLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UG9ydE51bWJlciA9IChcbiAgICB1cmw6IHN0cmluZyA9IGdsb2JhbENvbnRleHQubG9jYXRpb24/LmhyZWYgfHwgJycsXG4gICAgZmFsbGJhY2s6IG51bGwgfCBudW1iZXIgPSBnbG9iYWxDb250ZXh0LmxvY2F0aW9uPy5wb3J0ID9cbiAgICAgICAgcGFyc2VJbnQoZ2xvYmFsQ29udGV4dC5sb2NhdGlvbi5wb3J0KSA6XG4gICAgICAgIG51bGxcbik6IG51bGwgfCBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8c3RyaW5nPiB8IG51bGwgPVxuICAgICAgICAvXig/OlthLXpdKjo/XFwvXFwvW14vXSs/KT9bXi9dKz86KFswLTldKykvaS5leGVjKHVybClcblxuICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCA+IDEpXG4gICAgICAgIHJldHVybiBwYXJzZUludChyZXN1bHRbMV0sIDEwKVxuXG4gICAgaWYgKGZhbGxiYWNrICE9PSBudWxsKVxuICAgICAgICByZXR1cm4gZmFsbGJhY2tcblxuICAgIGlmIChcbiAgICAgICAgLy8gTk9URTogV291bGQgcmVzdWx0IGluIGFuIGVuZGxlc3MgbG9vcDpcbiAgICAgICAgLy8gc2VydmljZVVSTEVxdWFscyh1cmwsIC4uLnBhcmFtZXRlcnMpICYmXG4gICAgICAgIGdsb2JhbENvbnRleHQubG9jYXRpb24/LnBvcnQgJiZcbiAgICAgICAgcGFyc2VJbnQoZ2xvYmFsQ29udGV4dC5sb2NhdGlvbi5wb3J0LCAxMClcbiAgICApXG4gICAgICAgIHJldHVybiBwYXJzZUludChnbG9iYWxDb250ZXh0LmxvY2F0aW9uLnBvcnQsIDEwKVxuXG4gICAgcmV0dXJuIGdldFByb3RvY29sTmFtZSh1cmwpID09PSAnaHR0cHMnID8gNDQzIDogODBcbn1cbi8qKlxuICogRXh0cmFjdHMgcHJvdG9jb2wgbmFtZSBmcm9tIGdpdmVuIHVybC4gSWYgbm8gZXhwbGljaXQgdXJsIGlzIGdpdmVuLFxuICogdGhlIGN1cnJlbnQgcHJvdG9jb2wgd2lsbCBiZSBhc3N1bWVkLiBJZiBubyBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50XG4gKiBwcm90b2NvbCBudW1iZXIgd2lsbCBiZSBkZXRlcm1pbmVkLlxuICogQHBhcmFtIHVybCAtIFRoZSB1cmwgdG8gZXh0cmFjdCBwcm90b2NvbCBmcm9tLlxuICogQHBhcmFtIGZhbGxiYWNrIC0gRmFsbGJhY2sgcG9ydCB0byB1c2UgaWYgbm8gcHJvdG9jb2wgZXhpc3RzIGluIGdpdmVuXG4gKiB1cmwgKGRlZmF1bHQgaXMgY3VycmVudCBwcm90b2NvbCkuXG4gKiBAcmV0dXJucyBFeHRyYWN0ZWQgcHJvdG9jb2wuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcm90b2NvbE5hbWUgPSAoXG4gICAgdXJsOiBzdHJpbmcgPSBnbG9iYWxDb250ZXh0LmxvY2F0aW9uPy5ocmVmIHx8ICcnLFxuICAgIGZhbGxiYWNrOiBzdHJpbmcgPSAoXG4gICAgICAgIGdsb2JhbENvbnRleHQubG9jYXRpb24/LnByb3RvY29sICYmXG4gICAgICAgIGdsb2JhbENvbnRleHQubG9jYXRpb24ucHJvdG9jb2wuc3Vic3RyaW5nKFxuICAgICAgICAgICAgMCwgZ2xvYmFsQ29udGV4dC5sb2NhdGlvbi5wcm90b2NvbC5sZW5ndGggLSAxXG4gICAgICAgICkgfHxcbiAgICAgICAgJydcbiAgICApXG4pOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8c3RyaW5nPiB8IG51bGwgPSAvXihbYS16XSspOlxcL1xcLy9pLmV4ZWModXJsKVxuXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMSAmJiByZXN1bHRbMV0pXG4gICAgICAgIHJldHVybiByZXN1bHRbMV1cblxuICAgIHJldHVybiBmYWxsYmFja1xufVxuLyoqXG4gKiBSZWFkIGEgcGFnZSdzIEdFVCBVUkwgdmFyaWFibGVzIGFuZCByZXR1cm4gdGhlbSBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheVxuICogYW5kIHByZXNlcnZlcyBvcmRlcmluZy5cbiAqIEBwYXJhbSBrZXlUb0dldCAtIElmIHByb3ZpZGVkIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGZvciBhIGdpdmVuIGtleSBpc1xuICogcmV0dXJuZWQgb3IgZnVsbCBvYmplY3Qgb3RoZXJ3aXNlLlxuICogQHBhcmFtIGFsbG93RHVwbGljYXRlcyAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHJldHVybiBhcnJheXMgb2YgdmFsdWVzIG9yXG4gKiBzaW5nbGUgdmFsdWVzLiBJZiBzZXQgdG8gXCJmYWxzZVwiIChkZWZhdWx0KSBsYXN0IHZhbHVlcyB3aWxsIG92ZXJ3cml0ZVxuICogcHJlY2VkaW5nIHZhbHVlcy5cbiAqIEBwYXJhbSBnaXZlbklucHV0IC0gQW4gYWx0ZXJuYXRpdmUgaW5wdXQgdG8gdGhlIHVybCBzZWFyY2ggcGFyYW1ldGVyLiBJZlxuICogXCIjXCIgaXMgZ2l2ZW4sIHRoZSBjb21wbGV0ZSBjdXJyZW50IGhhc2h0YWcgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyB1cmwgYW5kXG4gKiBzZWFyY2ggcGFyYW1ldGVyIHdpbGwgYmUgZXh0cmFjdGVkIGZyb20gdGhlcmUuIElmIFwiJlwiIGlzIGdpdmVuIGEgY2xhc3NpY2FsXG4gKiBzZWFyY2ggcGFyYW1ldGVyLCBhbmQgaGFzaCBwYXJhbWV0ZXIgd2lsbCBiZSB0YWtlbiBpbiBhbiBhY2NvdW50LiBJZiBhXG4gKiBzZWFyY2ggc3RyaW5nIGlzIGdpdmVuLCB0aGlzIHdpbGwgYmUgYW5hbHl6ZWQuIFRoZSBkZWZhdWx0IGlzIHRvIHRha2UgYVxuICogZ2l2ZW4gc2VhcmNoIHBhcnQgaW50byBhY2NvdW50LlxuICogQHBhcmFtIHN1YkRlbGltaXRlciAtIERlZmluZXMgd2hpY2ggc2VxdWVuY2UgaW5kaWNhdGVzIHRoZSBzdGFydCBvZlxuICogcGFyYW1ldGVyIGluIGEgaGFzaCBwYXJ0IG9mIHRoZSB1cmwuXG4gKiBAcGFyYW0gaGFzaGVkUGF0aEluZGljYXRvciAtIElmIGRlZmluZWQgYW5kIGdpdmVuIGhhc2ggc3RhcnRzIHdpdGggdGhpc1xuICogaW5kaWNhdG9yLCBnaXZlbiBoYXNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBwYXRoIGNvbnRhaW5pbmcgc2VhcmNoIGFuZFxuICogaGFzaCBwYXJ0cy5cbiAqIEBwYXJhbSBnaXZlblNlYXJjaCAtIFNlYXJjaCBwYXJ0IHRvIHRha2UgaW50byBhY2NvdW50IGRlZmF1bHRzIHRvXG4gKiBjdXJyZW50IHVybCBzZWFyY2ggcGFydC5cbiAqIEBwYXJhbSBnaXZlbkhhc2ggLSBIYXNoIHBhcnQgdG8gdGFrZSBpbnRvIGFjY291bnQgZGVmYXVsdHMgdG8gY3VycmVudFxuICogdXJsIGhhc2ggcGFydC5cbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGN1cnJlbnQgZ2V0IGFycmF5IG9yIHJlcXVlc3RlZCB2YWx1ZS4gSWYgdGhlIHJlcXVlc3RlZFxuICoga2V5IGRvZXNuJ3QgZXhpc3QsIFwidW5kZWZpbmVkXCIgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRVUkxQYXJhbWV0ZXIgPSAoXG4gICAga2V5VG9HZXQ6IG51bGwgfCBzdHJpbmcgPSBudWxsLFxuICAgIGFsbG93RHVwbGljYXRlcyA9IGZhbHNlLFxuICAgIGdpdmVuSW5wdXQ6IG51bGwgfCBzdHJpbmcgPSBudWxsLFxuICAgIHN1YkRlbGltaXRlciA9ICckJyxcbiAgICBoYXNoZWRQYXRoSW5kaWNhdG9yID0gJyEnLFxuICAgIGdpdmVuU2VhcmNoOiBudWxsIHwgc3RyaW5nID0gbnVsbCxcbiAgICBnaXZlbkhhc2g6IG51bGwgfCBzdHJpbmcgPSBnbG9iYWxDb250ZXh0LmxvY2F0aW9uPy5oYXNoID8/ICcnXG4pOiBBcnJheTxzdHJpbmc+IHwgbnVsbCB8IFF1ZXJ5UGFyYW1ldGVycyB8IHN0cmluZyA9PiB7XG4gICAgLy8gcmVnaW9uIHNldCBzZWFyY2ggYW5kIGhhc2hcbiAgICBsZXQgaGFzaDogc3RyaW5nID0gZ2l2ZW5IYXNoID8/ICcjJ1xuICAgIGxldCBzZWFyY2ggPSAnJ1xuICAgIGlmIChnaXZlblNlYXJjaClcbiAgICAgICAgc2VhcmNoID0gZ2l2ZW5TZWFyY2hcbiAgICBlbHNlIGlmIChoYXNoZWRQYXRoSW5kaWNhdG9yICYmIGhhc2guc3RhcnRzV2l0aChoYXNoZWRQYXRoSW5kaWNhdG9yKSkge1xuICAgICAgICBjb25zdCBzdWJIYXNoU3RhcnRJbmRleDogbnVtYmVyID0gaGFzaC5pbmRleE9mKCcjJylcbiAgICAgICAgbGV0IHBhdGhBbmRTZWFyY2g6IHN0cmluZ1xuICAgICAgICBpZiAoc3ViSGFzaFN0YXJ0SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBwYXRoQW5kU2VhcmNoID0gaGFzaC5zdWJzdHJpbmcoaGFzaGVkUGF0aEluZGljYXRvci5sZW5ndGgpXG4gICAgICAgICAgICBoYXNoID0gJydcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdGhBbmRTZWFyY2ggPSBoYXNoLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICBoYXNoZWRQYXRoSW5kaWNhdG9yLmxlbmd0aCwgc3ViSGFzaFN0YXJ0SW5kZXhcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGhhc2ggPSBoYXNoLnN1YnN0cmluZyhzdWJIYXNoU3RhcnRJbmRleClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWJTZWFyY2hTdGFydEluZGV4OiBudW1iZXIgPSBwYXRoQW5kU2VhcmNoLmluZGV4T2YoJz8nKVxuICAgICAgICBpZiAoc3ViU2VhcmNoU3RhcnRJbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBzZWFyY2ggPSBwYXRoQW5kU2VhcmNoLnN1YnN0cmluZyhzdWJTZWFyY2hTdGFydEluZGV4KVxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsQ29udGV4dC5sb2NhdGlvbilcbiAgICAgICAgc2VhcmNoID0gZ2xvYmFsQ29udGV4dC5sb2NhdGlvbi5zZWFyY2ggfHwgJydcbiAgICBsZXQgaW5wdXQ6IHN0cmluZyA9IGdpdmVuSW5wdXQgPyBnaXZlbklucHV0IDogc2VhcmNoXG4gICAgLy8gZW5kcmVnaW9uXG4gICAgLy8gcmVnaW9uIGRldGVybWluZSBkYXRhIGZyb20gc2VhcmNoIGFuZCBoYXNoIGlmIHNwZWNpZmllZFxuICAgIGNvbnN0IGJvdGg6IGJvb2xlYW4gPSBpbnB1dCA9PT0gJyYnXG4gICAgaWYgKGJvdGggfHwgaW5wdXQgPT09ICcjJykge1xuICAgICAgICBsZXQgZGVjb2RlZEhhc2ggPSAnJ1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVjb2RlZEhhc2ggPSBkZWNvZGVVUklDb21wb25lbnQoaGFzaClcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBDb250aW51ZSByZWdhcmRsZXNzIG9mIGFuIGVycm9yLlxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YkRlbGltaXRlckluZGV4OiBudW1iZXIgPSBkZWNvZGVkSGFzaC5pbmRleE9mKHN1YkRlbGltaXRlcilcbiAgICAgICAgaWYgKHN1YkRlbGltaXRlckluZGV4ID09PSAtMSlcbiAgICAgICAgICAgIGlucHV0ID0gJydcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbnB1dCA9IGRlY29kZWRIYXNoLnN1YnN0cmluZyhzdWJEZWxpbWl0ZXJJbmRleClcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKHN1YkRlbGltaXRlcikpXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoc3ViRGVsaW1pdGVyLmxlbmd0aClcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnPycpKVxuICAgICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZygnPycubGVuZ3RoKVxuICAgIGxldCBkYXRhOiBBcnJheTxzdHJpbmc+ID0gaW5wdXQgPyBpbnB1dC5zcGxpdCgnJicpIDogW11cbiAgICBzZWFyY2ggPSBzZWFyY2guc3Vic3RyaW5nKCc/Jy5sZW5ndGgpXG4gICAgaWYgKGJvdGggJiYgc2VhcmNoKVxuICAgICAgICBkYXRhID0gZGF0YS5jb25jYXQoc2VhcmNoLnNwbGl0KCcmJykpXG4gICAgLy8gZW5kcmVnaW9uXG4gICAgLy8gcmVnaW9uIGNvbnN0cnVjdCBkYXRhIHN0cnVjdHVyZVxuICAgIGNvbnN0IHBhcmFtZXRlcnM6IFF1ZXJ5UGFyYW1ldGVycyA9IFtdIGFzIHVua25vd24gYXMgUXVlcnlQYXJhbWV0ZXJzXG4gICAgZm9yIChsZXQgdmFsdWUgb2YgZGF0YSkge1xuICAgICAgICBjb25zdCBrZXlWYWx1ZVBhaXI6IEFycmF5PHN0cmluZz4gPSB2YWx1ZS5zcGxpdCgnPScpXG4gICAgICAgIGxldCBrZXk6IHN0cmluZ1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleVZhbHVlUGFpclswXSlcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBrZXkgPSAnJ1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVBhaXJbMV0pXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1ldGVycy5wdXNoKGtleSlcbiAgICAgICAgaWYgKGFsbG93RHVwbGljYXRlcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1ldGVycywga2V5KSAmJlxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocGFyYW1ldGVyc1trZXldKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIChwYXJhbWV0ZXJzW2tleV0gYXMgQXJyYXk8c3RyaW5nPikucHVzaCh2YWx1ZSlcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2tleV0gPSBbdmFsdWVdXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhcmFtZXRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuICAgIC8vIGVuZHJlZ2lvblxuXG4gICAgaWYgKGtleVRvR2V0KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1ldGVycywga2V5VG9HZXQpKVxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNba2V5VG9HZXRdXG5cbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1xufVxuLyoqXG4gKiBDaGVja3MgaWYgZ2l2ZW4gdXJsIHBvaW50cyB0byBhbm90aGVyIFwic2VydmljZVwiIHRoYW4gdGhlIHNlY29uZCBnaXZlbiB1cmwuXG4gKiBJZiBubyBzZWNvbmQgZ2l2ZW4gdXJsIGlzIHByb3ZpZGVkLCB0aGUgY3VycmVudCB1cmwgd2lsbCBiZSBhc3N1bWVkLlxuICogQHBhcmFtIHVybCAtIFVSTCB0byBjaGVjayBhZ2FpbnN0IHNlY29uZCB1cmwuXG4gKiBAcGFyYW0gcmVmZXJlbmNlVVJMIC0gVVJMIHRvIGNoZWNrIGFnYWluc3QgZmlyc3QgdXJsLlxuICogQHJldHVybnMgUmV0dXJucyBcInRydWVcIiBpZiBnaXZlbiBmaXJzdCB1cmwgaGFzIHNhbWUgZG9tYWluIGFzIGdpdmVuXG4gKiBzZWNvbmQgKG9yIGN1cnJlbnQpLlxuICovXG5leHBvcnQgY29uc3Qgc2VydmljZVVSTEVxdWFscyA9IChcbiAgICB1cmw6IHN0cmluZywgcmVmZXJlbmNlVVJMOiBzdHJpbmcgPSBnbG9iYWxDb250ZXh0LmxvY2F0aW9uPy5ocmVmIHx8ICcnXG4pOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBkb21haW46IHN0cmluZyA9IGdldERvbWFpbk5hbWUodXJsLCAnJylcbiAgICBjb25zdCBwcm90b2NvbDogc3RyaW5nID0gZ2V0UHJvdG9jb2xOYW1lKHVybCwgJycpXG4gICAgY29uc3QgcG9ydDogbnVsbCB8IG51bWJlciA9IGdldFBvcnROdW1iZXIodXJsKVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgKGRvbWFpbiA9PT0gJycgfHwgZG9tYWluID09PSBnZXREb21haW5OYW1lKHJlZmVyZW5jZVVSTCkpICYmXG4gICAgICAgIChwcm90b2NvbCA9PT0gJycgfHwgcHJvdG9jb2wgPT09IGdldFByb3RvY29sTmFtZShyZWZlcmVuY2VVUkwpKSAmJlxuICAgICAgICAocG9ydCA9PT0gbnVsbCB8fCBwb3J0ID09PSBnZXRQb3J0TnVtYmVyKHJlZmVyZW5jZVVSTCkpXG4gICAgKVxufVxuLyoqXG4gKiBOb3JtYWxpemVkIGdpdmVuIHdlYnNpdGUgdXJsLlxuICogQHBhcmFtIGdpdmVuVVJMIC0gVW5pZm9ybSByZXNvdXJjZSBsb2NhdG9yIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgcmVzdWx0LlxuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplVVJMID0gKGdpdmVuVVJMOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICBpZiAodHlwZW9mIGdpdmVuVVJMID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB1cmwgPSBnaXZlblVSTC5yZXBsYWNlKC9eOj9cXC8rLywgJycpLnJlcGxhY2UoL1xcLyskLywgJycpLnRyaW0oKVxuXG4gICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaHR0cCcpKVxuICAgICAgICAgICAgcmV0dXJuIHVybFxuXG4gICAgICAgIHJldHVybiBgaHR0cDovLyR7dXJsfWBcbiAgICB9XG5cbiAgICByZXR1cm4gJydcbn1cbi8qKlxuICogUmVwcmVzZW50cyBnaXZlbiB3ZWJzaXRlIHVybC5cbiAqIEBwYXJhbSB1cmwgLSBVbmlmb3JtIHJlc291cmNlIGxvY2F0b3IgdG8gcmVwcmVzZW50LlxuICogQHJldHVybnMgUmVwcmVzZW50ZWQgcmVzdWx0LlxuICovXG5leHBvcnQgY29uc3QgcmVwcmVzZW50VVJMID0gKHVybDogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgICAucmVwbGFjZSgvXihodHRwcz8pPzo/XFwvKy8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLyskLywgJycpXG4gICAgICAgICAgICAudHJpbSgpXG5cbiAgICByZXR1cm4gJydcbn1cbi8vIGVuZHJlZ2lvblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNhbWVsLWNhc2VkIHN0cmluZyB0byBpdHMgZGVsaW1pdGVkIHN0cmluZyB2ZXJzaW9uLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byBmb3JtYXQuXG4gKiBAcGFyYW0gZGVsaW1pdGVyIC0gRGVmaW5lcyBkZWxpbWl0ZXIgc3RyaW5nLlxuICogQHBhcmFtIGFiYnJldmlhdGlvbnMgLSBDb2xsZWN0aW9uIG9mIHNob3J0Y3V0IHdvcmRzIHRvIHJlcHJlc2VudCB1cHBlcmNhc2VkLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBjYW1lbENhc2VUb0RlbGltaXRlZCA9IChcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIGRlbGltaXRlciA9ICctJyxcbiAgICBhYmJyZXZpYXRpb25zOiBBcnJheTxzdHJpbmc+IHwgbnVsbCA9IG51bGxcbik6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFhYmJyZXZpYXRpb25zKVxuICAgICAgICBhYmJyZXZpYXRpb25zID0gQUJCUkVWSUFUSU9OU1xuXG4gICAgY29uc3QgZXNjYXBlZERlbGltaXRlcjogc3RyaW5nID0gbWFza0ZvclJlZ3VsYXJFeHByZXNzaW9uKGRlbGltaXRlcilcblxuICAgIGlmIChhYmJyZXZpYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBsZXQgYWJicmV2aWF0aW9uUGF0dGVybiA9ICcnXG4gICAgICAgIGZvciAoY29uc3QgYWJicmV2aWF0aW9uIG9mIGFiYnJldmlhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChhYmJyZXZpYXRpb25QYXR0ZXJuKVxuICAgICAgICAgICAgICAgIGFiYnJldmlhdGlvblBhdHRlcm4gKz0gJ3wnXG4gICAgICAgICAgICBhYmJyZXZpYXRpb25QYXR0ZXJuICs9IGFiYnJldmlhdGlvbi50b1VwcGVyQ2FzZSgpXG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgIGAoJHthYmJyZXZpYXRpb25QYXR0ZXJufSkoJHthYmJyZXZpYXRpb25QYXR0ZXJufSlgLCAnZydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBgJDEke2RlbGltaXRlcn0kMmBcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShcbiAgICAgICAgbmV3IFJlZ0V4cChgKFteJHtlc2NhcGVkRGVsaW1pdGVyfV0pKFtBLVpdW2Etel0rKWAsICdnJyksXG4gICAgICAgIGAkMSR7ZGVsaW1pdGVyfSQyYFxuICAgIClcblxuICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKCcoW2EtejAtOV0pKFtBLVpdKScsICdnJyksIGAkMSR7ZGVsaW1pdGVyfSQyYClcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbn1cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgdG8gaXRzIGNhcGl0YWxpemVkIHJlcHJlc2VudGF0aW9uLlxuICogQHBhcmFtIHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gZm9ybWF0LlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gKHN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnN1YnN0cmluZygxKVxufVxuLyoqXG4gKiBDb21wcmVzc2VzIGdpdmVuIHN0eWxlIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqIEBwYXJhbSBzdHlsZVZhbHVlIC0gU3R5bGUgdmFsdWUgdG8gY29tcHJlc3MuXG4gKiBAcmV0dXJucyBUaGUgY29tcHJlc3NlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXByZXNzU3R5bGVWYWx1ZSA9IChzdHlsZVZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBzdHlsZVZhbHVlXG4gICAgICAgIC5yZXBsYWNlKC8gKihbOjtdKSAqL2csICckMScpXG4gICAgICAgIC5yZXBsYWNlKC8gKy9nLCAnICcpXG4gICAgICAgIC5yZXBsYWNlKC9eOysvLCAnJylcbiAgICAgICAgLnJlcGxhY2UoLzsrJC8sICcnKVxuICAgICAgICAudHJpbSgpXG59XG4vKipcbiAqIERlY29kZXMgYWxsIGh0bWwgc3ltYm9scyBpbiB0ZXh0IG5vZGVzIGluIGEgZ2l2ZW4gaHRtbCBzdHJpbmcuXG4gKiBAcGFyYW0gaHRtbFN0cmluZyAtIEhUTUwgc3RyaW5nIHRvIGRlY29kZS5cbiAqIEByZXR1cm5zIERlY29kZWQgaHRtbCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNvZGVIVE1MRW50aXRpZXMgPSAoaHRtbFN0cmluZzogc3RyaW5nKTogbnVsbCB8IHN0cmluZyA9PiB7XG4gICAgaWYgKGdsb2JhbENvbnRleHQuZG9jdW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGV4dGFyZWFEb21Ob2RlID1cbiAgICAgICAgICAgIGdsb2JhbENvbnRleHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKVxuICAgICAgICB0ZXh0YXJlYURvbU5vZGUuaW5uZXJIVE1MID0gaHRtbFN0cmluZ1xuXG4gICAgICAgIHJldHVybiB0ZXh0YXJlYURvbU5vZGUudmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxufVxuLyoqXG4gKiBDb252ZXJ0cyBhIGRlbGltaXRlZCBzdHJpbmcgdG8gaXRzIGNhbWVsIGNhc2UgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RyaW5nIHRvIGZvcm1hdC5cbiAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBEZWxpbWl0ZXIgc3RyaW5nIHRvIHVzZS5cbiAqIEBwYXJhbSBhYmJyZXZpYXRpb25zIC0gQ29sbGVjdGlvbiBvZiBzaG9ydGN1dCB3b3JkcyB0byByZXByZXNlbnQgdXBwZXJjYXNlZC5cbiAqIEBwYXJhbSBwcmVzZXJ2ZVdyb25nRm9ybWF0dGVkQWJicmV2aWF0aW9ucyAtIElmIHNldCB0byBcIlRydWVcIiB3cm9uZ1xuICogZm9ybWF0dGVkIGNhbWVsIGNhc2UgYWJicmV2aWF0aW9ucyB3aWxsIGJlIGlnbm9yZWQuXG4gKiBAcGFyYW0gcmVtb3ZlTXVsdGlwbGVEZWxpbWl0ZXIgLSBJbmRpY2F0ZXMgd2hldGhlciBhIHNlcmllcyBvZiBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjb25zb2xpZGF0ZWQuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlbGltaXRlZFRvQ2FtZWxDYXNlID0gKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZGVsaW1pdGVyID0gJy0nLFxuICAgIGFiYnJldmlhdGlvbnM6IEFycmF5PHN0cmluZz4gfCBudWxsID0gbnVsbCxcbiAgICBwcmVzZXJ2ZVdyb25nRm9ybWF0dGVkQWJicmV2aWF0aW9ucyA9IGZhbHNlLFxuICAgIHJlbW92ZU11bHRpcGxlRGVsaW1pdGVyID0gZmFsc2Vcbik6IHN0cmluZyA9PiB7XG4gICAgbGV0IGVzY2FwZWREZWxpbWl0ZXI6IHN0cmluZyA9IG1hc2tGb3JSZWd1bGFyRXhwcmVzc2lvbihkZWxpbWl0ZXIpXG5cbiAgICBpZiAoIWFiYnJldmlhdGlvbnMpXG4gICAgICAgIGFiYnJldmlhdGlvbnMgPSBBQkJSRVZJQVRJT05TXG4gICAgbGV0IGFiYnJldmlhdGlvblBhdHRlcm46IHN0cmluZ1xuICAgIGlmIChwcmVzZXJ2ZVdyb25nRm9ybWF0dGVkQWJicmV2aWF0aW9ucylcbiAgICAgICAgYWJicmV2aWF0aW9uUGF0dGVybiA9IEFCQlJFVklBVElPTlMuam9pbignfCcpXG4gICAgZWxzZSB7XG4gICAgICAgIGFiYnJldmlhdGlvblBhdHRlcm4gPSAnJ1xuICAgICAgICBmb3IgKGNvbnN0IGFiYnJldmlhdGlvbiBvZiBhYmJyZXZpYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoYWJicmV2aWF0aW9uUGF0dGVybilcbiAgICAgICAgICAgICAgICBhYmJyZXZpYXRpb25QYXR0ZXJuICs9ICd8J1xuICAgICAgICAgICAgYWJicmV2aWF0aW9uUGF0dGVybiArPVxuICAgICAgICAgICAgICAgIGAke2NhcGl0YWxpemUoYWJicmV2aWF0aW9uKX18JHthYmJyZXZpYXRpb259YFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaW5nU3RhcnRzV2l0aERlbGltaXRlcjogYm9vbGVhbiA9IHZhbHVlLnN0YXJ0c1dpdGgoZGVsaW1pdGVyKVxuICAgIGlmIChzdHJpbmdTdGFydHNXaXRoRGVsaW1pdGVyKVxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyhkZWxpbWl0ZXIubGVuZ3RoKVxuXG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKFxuICAgICAgICBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgYCgke2VzY2FwZWREZWxpbWl0ZXJ9KSgke2FiYnJldmlhdGlvblBhdHRlcm59KWAgK1xuICAgICAgICAgICAgYCgke2VzY2FwZWREZWxpbWl0ZXJ9fCQpYCxcbiAgICAgICAgICAgICdnJ1xuICAgICAgICApLFxuICAgICAgICAoXG4gICAgICAgICAgICBfZnVsbE1hdGNoOiBzdHJpbmcsXG4gICAgICAgICAgICBiZWZvcmU6IHN0cmluZyxcbiAgICAgICAgICAgIGFiYnJldmlhdGlvbjogc3RyaW5nLFxuICAgICAgICAgICAgYWZ0ZXI6IHN0cmluZ1xuICAgICAgICApOiBzdHJpbmcgPT4gYmVmb3JlICsgYWJicmV2aWF0aW9uLnRvVXBwZXJDYXNlKCkgKyBhZnRlclxuICAgIClcblxuICAgIGlmIChyZW1vdmVNdWx0aXBsZURlbGltaXRlcilcbiAgICAgICAgZXNjYXBlZERlbGltaXRlciA9IGAoPzoke2VzY2FwZWREZWxpbWl0ZXJ9KStgXG5cbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXG4gICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlZERlbGltaXRlcn0oW2EtekEtWjAtOV0pYCwgJ2cnKSxcbiAgICAgICAgKF9mdWxsTWF0Y2g6IHN0cmluZywgZmlyc3RMZXR0ZXI6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgICAgICAgICAgZmlyc3RMZXR0ZXIudG9VcHBlckNhc2UoKVxuICAgIClcblxuICAgIGlmIChzdHJpbmdTdGFydHNXaXRoRGVsaW1pdGVyKVxuICAgICAgICB2YWx1ZSA9IGRlbGltaXRlciArIHZhbHVlXG5cbiAgICByZXR1cm4gdmFsdWVcbn1cbi8qKlxuICogQ29tcGlsZXMgYSBnaXZlbiBzdHJpbmcgYXMgYW4gZXhwcmVzc2lvbiB3aXRoIGdpdmVuIHNjb3BlIG5hbWVzLlxuICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgc3RyaW5nIHRvIGludGVycHJldC5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMgLSBFeHByZXNzaW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLnNjb3BlIC0gU2NvcGUgdG8gZXh0cmFjdCBuYW1lcyBmcm9tLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5leGVjdXRlIC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBvciBldmFsdWF0ZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMucmVtb3ZlR2xvYmFsU2NvcGUgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBzaGFkb3cgZ2xvYmFsXG4gKiBzY29wZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuYmluZGluZyAtIE9iamVjdCB0byBhcHBseSBhcyBcInRoaXNcIiBpbiBldmFsdWF0aW9uIHNjb3BlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5hc3luYyAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGNvbXBpbGUgYW4gYXN5bmMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBPYmplY3Qgb2YgcHJlcGFyZWQgc2NvcGUgbmFtZSBtYXBwaW5ncyBhbmQgY29tcGlsZWQgZnVuY3Rpb24gb3JcbiAqIGVycm9yIHN0cmluZyBtZXNzYWdlIGlmIGdpdmVuIGV4cHJlc3Npb24gY291bGRuJ3QgYmUgY29tcGlsZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlID0gPFQgPSBzdHJpbmcsIE4gZXh0ZW5kcyBBcnJheTxzdHJpbmc+ID0gQXJyYXk8c3RyaW5nPj4oXG4gICAgZXhwcmVzc2lvbjogc3RyaW5nLFxuICAgIGdpdmVuT3B0aW9uczogUGFydGlhbDxDb21waWxlRXhwcmVzc2lvbk9wdGlvbnM8Tj4+ID0ge31cbik6IENvbXBpbGF0aW9uUmVzdWx0PFQsIE4+ID0+IHtcbiAgICBjb25zdCBvcHRpb25zOiBDb21waWxlRXhwcmVzc2lvbk9wdGlvbnM8Tj4gPSB7XG4gICAgICAgIHNjb3BlOiBbXSBhcyB1bmtub3duIGFzIE4sXG4gICAgICAgIGFzeW5jOiBmYWxzZSxcbiAgICAgICAgZXhlY3V0ZTogZmFsc2UsXG4gICAgICAgIHJlbW92ZUdsb2JhbFNjb3BlOiB0cnVlLFxuICAgICAgICBiaW5kaW5nOiB7fSxcbiAgICAgICAgLi4uZ2l2ZW5PcHRpb25zXG4gICAgfVxuICAgIC8qXG4gICAgICAgIE5PVEU6IFdlIGRvIHRoaXMgZ2xvYmFsIHZhcmlhYmxlIG5hbWUgZGV0ZXJtaW5pbmcgYXMgY2xvc2UgYXMgcG9zc2libGVcbiAgICAgICAgdG8gdGhlIGNvbXBpbGluZyBzdGVwIHRvIGNvdmVyIGFzIG11Y2ggYXMgcG9zc2libGUgZ2xvYmFsIGludHJvZHVjZXNcbiAgICAgICAgdmFyaWFibGVzLlxuICAgICovXG4gICAgY29uc3QgZ2xvYmFsTmFtZXMgPSBPYmplY3Qua2V5cyhnbG9iYWxUaGlzKVxuICAgICAgICAuY29uY2F0KCdnbG9iYWxUaGlzJylcbiAgICAgICAgLmZpbHRlcigobmFtZSkgPT5cbiAgICAgICAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgYF5bJHtBTExPV0VEX1NUQVJUSU5HX1ZBUklBQkxFX1NZTUJPTFN9XWAgK1xuICAgICAgICAgICAgICAgIGBbJHtBTExPV0VEX1ZBUklBQkxFX1NZTUJPTFN9XSokYFxuICAgICAgICAgICAgKS50ZXN0KG5hbWUpICYmXG4gICAgICAgICAgICAhS05PV05fRElTQUxMT1dFRF9WQVJJQUJMRV9OQU1FU19CVVRfT0JKRUNUX0tFWVNcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMobmFtZSlcbiAgICAgICAgKVxuICAgIGNvbnN0IHJlc3VsdDogQ29tcGlsYXRpb25SZXN1bHQ8VCwgTj4gPSB7XG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBnbG9iYWxOYW1lczogZ2xvYmFsTmFtZXMsXG4gICAgICAgIGdsb2JhbE5hbWVzVW5kZWZpbmVkTGlzdDogZ2xvYmFsTmFtZXMubWFwKCgpID0+IHVuZGVmaW5lZCksXG4gICAgICAgIG9yaWdpbmFsU2NvcGVOYW1lczogKFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShvcHRpb25zLnNjb3BlKSA/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zY29wZSA6XG4gICAgICAgICAgICAgICAgdHlwZW9mIG9wdGlvbnMuc2NvcGUgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuc2NvcGVdIDpcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5zY29wZSlcbiAgICAgICAgKSBhcyBOLFxuICAgICAgICBzY29wZU5hbWVNYXBwaW5nOiB7fSBhcyBSZWNvcmQ8TltudW1iZXJdLCBzdHJpbmc+LFxuICAgICAgICBzY29wZU5hbWVzOiBbXSxcbiAgICAgICAgdGVtcGxhdGVGdW5jdGlvbjogKCk6IFQgPT4gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHQub3JpZ2luYWxTY29wZU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IG5ld05hbWU6IHN0cmluZyA9IGNvbnZlcnRUb1ZhbGlkVmFyaWFibGVOYW1lKG5hbWUpXG4gICAgICAgIHJlc3VsdC5zY29wZU5hbWVNYXBwaW5nW25hbWUgYXMgTltudW1iZXJdXSA9IG5ld05hbWVcbiAgICAgICAgcmVzdWx0LnNjb3BlTmFtZXMucHVzaChuZXdOYW1lKVxuICAgIH1cbiAgICAvLyByZWdpb24gdHJ5IHRvIHBvbHlmaWxsIHRlbXBsYXRlIHN0cmluZyBsaXRlcmFscyBmb3Igb2xkZXIgZW5naW5lc1xuICAgIGlmIChQT0xZRklMTF9URU1QTEFURV9TVFJJTkdTLnZhbHVlKVxuICAgICAgICBpZiAoKChcbiAgICAgICAgICAgIGdsb2JhbENvbnRleHQgYXMgTWFwcGluZzx1bmtub3duPlxuICAgICAgICApLkJhYmVsIGFzIE1hcHBpbmc8dW5rbm93bj4gfCB1bmRlZmluZWQpPy50cmFuc2Zvcm0pXG4gICAgICAgICAgICBleHByZXNzaW9uID0gKFxuICAgICAgICAgICAgICAgICgoZ2xvYmFsQ29udGV4dCBhcyBNYXBwaW5nPHVua25vd24+KS5CYWJlbCBhcyBNYXBwaW5nPHVua25vd24+KVxuICAgICAgICAgICAgICAgICAgICAudHJhbnNmb3JtIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAoKHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM6IE1hcHBpbmc8dW5rbm93bj4pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvZGU6IHN0cmluZ30pXG4gICAgICAgICAgICApKFxuICAgICAgICAgICAgICAgIGAoJHtleHByZXNzaW9ufSlgLFxuICAgICAgICAgICAgICAgIHtwbHVnaW5zOiBbJ3RyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyddfVxuICAgICAgICAgICAgKS5jb2RlXG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgZXhwcmVzc2lvbi5zdGFydHNXaXRoKCdgJykgJiYgZXhwcmVzc2lvbi5lbmRzV2l0aCgnYCcpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZXNjYXBlTWFya2VyID0gJyMjIyMnXG4gICAgICAgICAgICAvLyBDb252ZXJ0IHRlbXBsYXRlIHN0cmluZyBpbnRvIGxlZ2FjeSBzdHJpbmcgY29uY2F0ZW5hdGlvbnMuXG4gICAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIC8vIE1hcmsgc2ltcGxlIGVzY2FwZSBzZXF1ZW5jZXMuXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcXCQvZywgZXNjYXBlTWFya2VyKVxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhdm9pZGFibGUgdGVtcGxhdGUgZXhwcmVzc2lvbjogVXNlIHJhdyBjb2RlLlxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eYFxcJFxceyhbXFxzXFxTXSspfWAkLywgJ1N0cmluZygkMSknKVxuICAgICAgICAgICAgICAgIC8vIFVzZSBwbGFpbiBzdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGVzLlxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eYChbXiddKylgJC8sIGAnJDEnYClcbiAgICAgICAgICAgICAgICAvLyBVc2UgcGxhaW4gc3RyaW5nIHdpdGggZG91YmxlIHF1b3Rlcy5cbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXmAoW15cIl0rKWAkLywgJ1wiJDFcIicpXG4gICAgICAgICAgICAvLyBVc2Ugc2luZ2xlIHF1b3RlcyBhbmQgaG9wZSAoanVzdCBhIGhldXJpc3RpYykuXG4gICAgICAgICAgICBjb25zdCBxdW90ZTogc3RyaW5nID1cbiAgICAgICAgICAgICAgICBleHByZXNzaW9uLmNoYXJBdCgwKSA9PT0gJ2AnID8gYCdgIDogZXhwcmVzc2lvbi5jaGFyQXQoMClcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBhIHNpbXBsZSBwbGFjZWhvbGRlci5cbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBSZXBsYWNlIGNvbXBsZXRlIGJyYWNrZXQgcGFpcnMuXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXCRcXHsoKChbXntdKntbXn1dKn1bXn1dKn0pfFtee31dKykrKX0vZyxcbiAgICAgICAgICAgICAgICAgICAgYCR7cXVvdGV9KygkMSkrJHtxdW90ZX1gXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eYChbXFxzXFxTXSspYCQvLCBgJHtxdW90ZX0kMSR7cXVvdGV9YClcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgcmVtYWluaW5nIG5ld2xpbmVzLlxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXG4rL2csICcnKVxuICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgbWFya2VkIGVzY2FwZSBzZXF1ZW5jZXMuXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChlc2NhcGVNYXJrZXIsICdnJyksICdcXFxcJCcpXG4gICAgICAgIH1cbiAgICAvLyBlbmRyZWdpb25cbiAgICBsZXQgaW5uZXJUZW1wbGF0ZUZ1bmN0aW9uOiBUZW1wbGF0ZUZ1bmN0aW9uPFQ+IHwgdW5kZWZpbmVkXG5cbiAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgIGlubmVyVGVtcGxhdGVGdW5jdGlvbiA9IG5ldyAob3B0aW9ucy5hc3luYyA/IEFzeW5jRnVuY3Rpb24gOiBGdW5jdGlvbikoXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5yZW1vdmVHbG9iYWxTY29wZSA/IHJlc3VsdC5nbG9iYWxOYW1lcyA6IFtdKSxcbiAgICAgICAgICAgIC4uLnJlc3VsdC5zY29wZU5hbWVzLFxuICAgICAgICAgICAgYCR7b3B0aW9ucy5leGVjdXRlID8gJycgOiAncmV0dXJuICd9JHtleHByZXNzaW9ufWBcbiAgICAgICAgKSBhcyBUZW1wbGF0ZUZ1bmN0aW9uPFQ+XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVzdWx0LmVycm9yID1cbiAgICAgICAgICAgIGBHaXZlbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aWR0aCBgICtcbiAgICAgICAgICAgIGBnaXZlbiBzY29wZSBuYW1lcyBcIiR7cmVzdWx0LnNjb3BlTmFtZXMuam9pbignXCIsIFwiJyl9XCI6IGAgK1xuICAgICAgICAgICAgcmVwcmVzZW50KGVycm9yKVxuICAgIH1cbiAgICBpZiAoaW5uZXJUZW1wbGF0ZUZ1bmN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJvdW5kSW5uZXJUZW1wbGF0ZUZ1bmN0aW9uID1cbiAgICAgICAgICAgIGlubmVyVGVtcGxhdGVGdW5jdGlvbi5iaW5kKG9wdGlvbnMuYmluZGluZylcbiAgICAgICAgcmVzdWx0LnRlbXBsYXRlRnVuY3Rpb24gPSBvcHRpb25zLnJlbW92ZUdsb2JhbFNjb3BlID9cbiAgICAgICAgICAgICguLi5wYXJhbWV0ZXJzKSA9PlxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgIE5PVEU6IFdlIHNoYWRvdyBleGlzdGluZyBnbG9iYWwgbmFtZXMgdG8gc2FuZGJveFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5cbiAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGJvdW5kSW5uZXJUZW1wbGF0ZUZ1bmN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQuZ2xvYmFsTmFtZXNVbmRlZmluZWRMaXN0LCAuLi5wYXJhbWV0ZXJzXG4gICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICBib3VuZElubmVyVGVtcGxhdGVGdW5jdGlvblxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbn1cbi8qKlxuICogRXZhbHVhdGVzIGEgZ2l2ZW4gc3RyaW5nIGFzIGFuIGV4cHJlc3Npb24gYWdhaW5zdCBhIGdpdmVuIHNjb3BlLlxuICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgc3RyaW5nIHRvIGludGVycHJldC5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMgLSBFeHByZXNzaW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLnNjb3BlIC0gU2NvcGUgdG8gZXh0cmFjdCBuYW1lcyBmcm9tLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5leGVjdXRlIC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBvciBldmFsdWF0ZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMucmVtb3ZlR2xvYmFsU2NvcGUgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBzaGFkb3cgZ2xvYmFsXG4gKiBzY29wZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuYmluZGluZyAtIE9iamVjdCB0byBhcHBseSBhcyBcInRoaXNcIiBpbiBldmFsdWF0aW9uIHNjb3BlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5hc3luYyAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGNvbXBpbGUgYW4gYXN5bmMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGR1cmluZyBwYXJzaW5nIC8gcnVubmluZyBvciByZXN1bHQuXG4gKi9cbmV4cG9ydCBjb25zdCBldmFsdWF0ZSA9IDxUID0gc3RyaW5nLCBTIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PihcbiAgICBleHByZXNzaW9uOiBzdHJpbmcsXG4gICAgZ2l2ZW5PcHRpb25zOiBQYXJ0aWFsPEV2YWx1YXRlRXhwcmVzc2lvbk9wdGlvbnM8Uz4+ID0ge31cbik6IEV2YWx1YXRpb25SZXN1bHQ8VD4gPT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IEV2YWx1YXRlRXhwcmVzc2lvbk9wdGlvbnM8Uz4gPSB7XG4gICAgICAgIHNjb3BlOiB7fSBhcyBTLFxuICAgICAgICBhc3luYzogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICByZW1vdmVHbG9iYWxTY29wZTogdHJ1ZSxcbiAgICAgICAgYmluZGluZzoge30sXG4gICAgICAgIC4uLmdpdmVuT3B0aW9uc1xuICAgIH1cbiAgICAvLyBOT1RFOiBXZSBleHRyYWN0IHN0cmluZy1vbmx5IHR5cGVzIGZyb20gZ2l2ZW4gc2NvcGUgdHlwZS5cbiAgICB0eXBlIE4gPSBBcnJheTxrZXlvZiBTIGV4dGVuZHMgc3RyaW5nID8ga2V5b2YgUyA6IG5ldmVyPlxuXG4gICAgY29uc3Qge1xuICAgICAgICBlcnJvcixcbiAgICAgICAgb3JpZ2luYWxTY29wZU5hbWVzLFxuICAgICAgICBzY29wZU5hbWVzLFxuICAgICAgICB0ZW1wbGF0ZUZ1bmN0aW9uXG4gICAgfSA9IGNvbXBpbGU8VCwgTj4oZXhwcmVzc2lvbiwgb3B0aW9ucyBhcyBDb21waWxlRXhwcmVzc2lvbk9wdGlvbnM8Tj4pXG5cbiAgICBsZXQgcmVzdWx0OiBFdmFsdWF0aW9uUmVzdWx0PFQ+ID0ge1xuICAgICAgICBjb21waWxlRXJyb3I6IG51bGwsXG4gICAgICAgIHJ1bnRpbWVFcnJvcjogbnVsbCxcbiAgICAgICAgZXJyb3I6ICdOb3QgeWV0IGV2YWx1YXRlZC4nLFxuXG4gICAgICAgIHJlc3VsdDogdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlc3VsdC5jb21waWxlRXJyb3IgPSByZXN1bHQuZXJyb3IgPSBlcnJvclxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICBjb21waWxlRXJyb3I6IG51bGwsXG4gICAgICAgICAgICBydW50aW1lRXJyb3I6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIHJlc3VsdDogdGVtcGxhdGVGdW5jdGlvbihcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICBOT1RFOiBXZSB3YW50IHRvIGJlIHN1cmUgdG8gaGF2ZSB0aGUgc2FtZSBvcmRlcmluZyBhcyB3ZVxuICAgICAgICAgICAgICAgICAgICBoYXZlIGZvciB0aGUgc2NvcGUgbmFtZXMgYW5kIHRvIGNhbGwgaW50ZXJuYWwgcmVnaXN0ZXJlZFxuICAgICAgICAgICAgICAgICAgICBnZXR0ZXIgYnkgcmV0cmlldmluZyB2YWx1ZXMuIFNvIHNpbXBsZSB1c2luZ1xuICAgICAgICAgICAgICAgICAgICBcIi4uLk9iamVjdC52YWx1ZXMoc2NvcGUpXCIgaXMgbm90IGFwcHJlY2lhdGUgaGVyZS5cbiAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIC4uLm9yaWdpbmFsU2NvcGVOYW1lcy5tYXAoKG5hbWU6IGtleW9mIFMpOiBWYWx1ZU9mPFM+ID0+XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2NvcGVbbmFtZV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXN1bHQuZXJyb3IgPVxuICAgICAgICAgICAgcmVzdWx0LnJ1bnRpbWVFcnJvciA9IChcbiAgICAgICAgICAgICAgICBgR2l2ZW4gZXhwcmVzc2lvbiBcIiR7ZXhwcmVzc2lvbn1cIiBjb3VsZCBub3QgYmUgZXZhbHVhdGVkIGAgK1xuICAgICAgICAgICAgICAgIGB3aXRoIGdpdmVuIHNjb3BlIG5hbWVzIFwiJHtzY29wZU5hbWVzLmpvaW4oJ1wiLCBcIicpfVwiOiBgICtcbiAgICAgICAgICAgICAgICByZXByZXNlbnQoZXJyb3IpXG4gICAgICAgICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBnaXZlbiBzdHJpbmcgYXMgYW4gZXhwcmVzc2lvbiBhZ2FpbnN0IGEgZ2l2ZW4gc2NvcGUuIERvZXMgc2FtZVxuICogYXMgXCJldmFsdWF0ZVwiIGJ1dCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3VycyBhbmQgcmV0dXJucyB0aGVcbiAqIGV2YWx1YXRlZCB2YWx1ZSBpbnN0ZWFkIG9mIGFuIG9iamVjdCB3aXRoIGVycm9yIGFuZCByZXN1bHQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBzdHJpbmcgdG8gaW50ZXJwcmV0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBFeHByZXNzaW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0gb3B0aW9ucy5zY29wZSAtIFNjb3BlIHRvIGV4dHJhY3QgbmFtZXMgZnJvbS5cbiAqIEBwYXJhbSBvcHRpb25zLmV4ZWN1dGUgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBleGVjdXRlIG9yIGV2YWx1YXRlLlxuICogQHBhcmFtIG9wdGlvbnMucmVtb3ZlR2xvYmFsU2NvcGUgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBzaGFkb3cgZ2xvYmFsIHNjb3BlLlxuICogQHBhcmFtIG9wdGlvbnMuYmluZGluZyAtIE9iamVjdCB0byBhcHBseSBhcyBcInRoaXNcIiBpbiBldmFsdWF0aW9uIHNjb3BlLlxuICogQHBhcmFtIG9wdGlvbnMuYXN5bmMgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBjb21waWxlIGFuIGFzeW5jIGZ1bmN0aW9uLlxuICogQHJldHVybnMgT2JqZWN0IHdpdGggYW4gZXJyb3IgbWVzc2FnZSBkdXJpbmcgcGFyc2luZyAvIHJ1bm5pbmcgb3IgcmVzdWx0LlxuICovXG5leHBvcnQgY29uc3QgZXZhbHVhdGVPclRocm93RXJyb3IgPSA8XG4gICAgUmVzdWx0ID0gc3RyaW5nLCBTY29wZSBleHRlbmRzIG9iamVjdCA9IG9iamVjdFxuPihcbiAgICAgICAgZXhwcmVzc2lvbjogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiBQYXJ0aWFsPEV2YWx1YXRlRXhwcmVzc2lvbk9wdGlvbnM8U2NvcGU+PiA9IHt9XG4gICAgKTogUmVzdWx0ID0+IHtcbiAgICBjb25zdCBldmFsdWF0ZWQ6IEV2YWx1YXRpb25SZXN1bHQ8UmVzdWx0PiA9IGV2YWx1YXRlPFJlc3VsdCwgU2NvcGU+KFxuICAgICAgICBleHByZXNzaW9uLCBvcHRpb25zXG4gICAgKVxuXG4gICAgaWYgKGV2YWx1YXRlZC5lcnJvcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGV2YWx1YXRlZC5lcnJvcilcblxuICAgIHJldHVybiBldmFsdWF0ZWQucmVzdWx0IGFzIFJlc3VsdFxufVxuLyoqXG4gKiBGaW5kcyB0aGUgc3RyaW5nIG1hdGNoIG9mIGEgZ2l2ZW4gcXVlcnkgaW4gYSBnaXZlbiB0YXJnZXQgdGV4dCBieSBhcHBseWluZyBhXG4gKiBnaXZlbiBub3JtYWxpemF0aW9uIGZ1bmN0aW9uIHRvIHRhcmdldCBhbmQgcXVlcnkuXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGFyZ2V0IHRvIHNlYXJjaCBpbi5cbiAqIEBwYXJhbSBxdWVyeSAtIFNlYXJjaCBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSBub3JtYWxpemVyIC0gRnVuY3Rpb24gdG8gdXNlIGFzIG5vcm1hbGl6YXRpb24gZm9yIHF1ZXJpZXMgYW5kIHNlYXJjaFxuICogdGFyZ2V0cy5cbiAqIEBwYXJhbSBza2lwVGFnRGVsaW1pdGVkUGFydHMgLSBJbmRpY2F0ZXMgd2hldGhlciB0bywgZm9yIGV4YW1wbGUsIGlnbm9yZVxuICogaHRtbCB0YWdzIHZpYSBcIlsnPCcsICc+J11cIiAodGhlIGRlZmF1bHQpLlxuICogQHJldHVybnMgU3RhcnQgYW5kIGVuZCBpbmRleCBvZiBtYXRjaGluZyByYW5nZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmROb3JtYWxpemVkTWF0Y2hSYW5nZSA9IChcbiAgICB0YXJnZXQ6IHVua25vd24sXG4gICAgcXVlcnk6IHVua25vd24sXG4gICAgbm9ybWFsaXplciA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCksXG4gICAgc2tpcFRhZ0RlbGltaXRlZFBhcnRzOiBudWxsIHwgW3N0cmluZywgc3RyaW5nXSA9IFsnPCcsICc+J11cbik6IEFycmF5PG51bWJlcj4gfCBudWxsID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkUXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZXIocXVlcnkpXG4gICAgY29uc3Qgbm9ybWFsaXplZFRhcmdldDogc3RyaW5nID0gbm9ybWFsaXplcih0YXJnZXQpXG5cbiAgICBjb25zdCBzdHJpbmdUYXJnZXQgPSB0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJyA/XG4gICAgICAgIHRhcmdldCA6XG4gICAgICAgIG5vcm1hbGl6ZWRUYXJnZXRcblxuICAgIGlmIChub3JtYWxpemVkVGFyZ2V0ICYmIG5vcm1hbGl6ZWRRdWVyeSkge1xuICAgICAgICBsZXQgaW5UYWcgPSBmYWxzZVxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3RyaW5nVGFyZ2V0Lmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICAgICAgaWYgKGluVGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHNraXBUYWdEZWxpbWl0ZWRQYXJ0cykgJiZcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVGFyZ2V0LmNoYXJBdChpbmRleCkgPT09IHNraXBUYWdEZWxpbWl0ZWRQYXJ0c1sxXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaW5UYWcgPSBmYWxzZVxuXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc2tpcFRhZ0RlbGltaXRlZFBhcnRzKSAmJlxuICAgICAgICAgICAgICAgIHN0cmluZ1RhcmdldC5jaGFyQXQoaW5kZXgpID09PSBza2lwVGFnRGVsaW1pdGVkUGFydHNbMF1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGluVGFnID0gdHJ1ZVxuXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZXIoc3RyaW5nVGFyZ2V0LnN1YnN0cmluZyhpbmRleCkpLnN0YXJ0c1dpdGgoXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFF1ZXJ5XG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRRdWVyeS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbaW5kZXgsIGluZGV4ICsgMV1cblxuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJJbmRleCA9IHN0cmluZ1RhcmdldC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHN1YkluZGV4ID4gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHN1YkluZGV4IC09IDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9ybWFsaXplcihzdHJpbmdUYXJnZXQuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIHN1YkluZGV4XG4gICAgICAgICAgICAgICAgICAgICkpLnN0YXJ0c1dpdGgobm9ybWFsaXplZFF1ZXJ5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbaW5kZXgsIHN1YkluZGV4ICsgMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG59XG4vKipcbiAqIEZpeGVzIGtub3duIGVuY29kaW5nIHByb2JsZW1zIGluIGdpdmVuIGRhdGEuXG4gKiBAcGFyYW0gZGF0YSAtIFRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyBQcm9jZXNzZWQgZGF0YS5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpeEtub3duRW5jb2RpbmdFcnJvcnMgPSAoZGF0YTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBmb3IgKGNvbnN0IFtzZWFyY2gsIHJlcGxhY2VtZW50XSBvZiBGSVhfRU5DT0RJTkdfRVJST1JfTUFQUElORylcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZShuZXcgUmVnRXhwKHNlYXJjaCwgJ2cnKSwgcmVwbGFjZW1lbnQpXG5cbiAgICByZXR1cm4gZGF0YVxufVxuLyoqXG4gKiBQZXJmb3JtcyBhIHN0cmluZyBmb3JtYXRpb24uIFJlcGxhY2VzIGV2ZXJ5IHBsYWNlaG9sZGVyIFwie2l9XCIgd2l0aCB0aGUgaSd0aFxuICogYXJndW1lbnQuXG4gKiBAcGFyYW0gc3RyaW5nIC0gVGhlIHN0cmluZyB0byBmb3JtYXQuXG4gKiBAcGFyYW0gYWRkaXRpb25hbEFyZ3VtZW50cyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBpbnRlcnByZXRlZCBhc1xuICogcmVwbGFjZW1lbnRzIGZvciBzdHJpbmcgZm9ybWF0dGluZy5cbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0ID0gKFxuICAgIHN0cmluZzogc3RyaW5nLCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzOiBBcnJheTx1bmtub3duPlxuKTogc3RyaW5nID0+IHtcbiAgICBhZGRpdGlvbmFsQXJndW1lbnRzLnVuc2hpZnQoc3RyaW5nKVxuXG4gICAgbGV0IGluZGV4ID0gMFxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYWRkaXRpb25hbEFyZ3VtZW50cykge1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYFxcXFx7JHtTdHJpbmcoaW5kZXgpfVxcXFx9YCwgJ2dtJyksIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgKVxuXG4gICAgICAgIGluZGV4ICs9IDFcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nXG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGVkaXQgKGxldmVuc3RlaW4pIGRpc3RhbmNlIGJldHdlZW4gdHdvIGdpdmVuIHN0cmluZ3MuXG4gKiBAcGFyYW0gZmlyc3QgLSBGaXJzdCBzdHJpbmcgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBzZWNvbmQgLSBTZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYXMgbnVtYmVyLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdERpc3RhbmNlID0gKGZpcnN0OiBzdHJpbmcsIHNlY29uZDogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgICAvKlxuICAgICAgICBDcmVhdGUgZW1wdHkgZWRpdCBkaXN0YW5jZSBtYXRyaXggZm9yIGFsbCBwb3NzaWJsZSBtb2RpZmljYXRpb25zIG9mXG4gICAgICAgIHN1YnN0cmluZ3Mgb2YgXCJmaXJzdFwiIHRvIHN1YnN0cmluZ3Mgb2YgXCJzZWNvbmRcIi5cbiAgICAqL1xuICAgIGNvbnN0IGRpc3RhbmNlTWF0cml4OiBBcnJheTxBcnJheTxudW1iZXI+PiA9XG4gICAgICAgIEFycmF5KHNlY29uZC5sZW5ndGggKyAxKS5maWxsKG51bGwpLm1hcCgoKTogQXJyYXk8bnVtYmVyPiA9PlxuICAgICAgICAgICAgQXJyYXkoZmlyc3QubGVuZ3RoICsgMSkuZmlsbChudWxsKSBhcyBBcnJheTxudW1iZXI+XG4gICAgICAgIClcbiAgICAvKlxuICAgICAgICBGaWxsIHRoZSBmaXJzdCByb3cgb2YgdGhlIG1hdHJpeC5cbiAgICAgICAgSWYgdGhpcyBpcyB0aGUgZmlyc3Qgcm93LCB0aGVuLCB3ZSdyZSB0cmFuc2Zvcm1pbmcgYW4gZW1wdHkgc3RyaW5nIHRvXG4gICAgICAgIFwiZmlyc3RcIi4gSW4gdGhpcyBjYXNlIHRoZSBudW1iZXIgb2YgdHJhbnNmb3JtYXRpb25zIGVxdWFscyB0byB0aGUgc2l6ZVxuICAgICAgICBvZiB0aGUgXCJmaXJzdFwiIHN1YnN0cmluZy5cbiAgICAqL1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gZmlyc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgICAgICBkaXN0YW5jZU1hdHJpeFswXVtpbmRleF0gPSBpbmRleFxuICAgIC8qXG4gICAgICAgIEZpbGwgdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgbWF0cml4LlxuICAgICAgICBJZiB0aGlzIGlzIHRoZSBmaXJzdCBjb2x1bW4sIHRoZW4gd2UncmUgdHJhbnNmb3JtaW5nIGFuIGVtcHR5IHN0cmluZyB0b1xuICAgICAgICBcInNlY29uZFwiLlxuICAgICAgICBJbiB0aGlzIGNhc2UgdGhlIG51bWJlciBvZiB0cmFuc2Zvcm1hdGlvbnMgZXF1YWxzIHRvIHRoZSBzaXplIG9mIHRoZVxuICAgICAgICBcInNlY29uZFwiIHN1YnN0cmluZy5cbiAgICAqL1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gc2Vjb25kLmxlbmd0aDsgaW5kZXgrKylcbiAgICAgICAgZGlzdGFuY2VNYXRyaXhbaW5kZXhdWzBdID0gaW5kZXhcblxuICAgIGZvciAobGV0IGZpcnN0SW5kZXggPSAxOyBmaXJzdEluZGV4IDw9IHNlY29uZC5sZW5ndGg7IGZpcnN0SW5kZXgrKylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGxldCBzZWNvbmRJbmRleCA9IDE7XG4gICAgICAgICAgICBzZWNvbmRJbmRleCA8PSBmaXJzdC5sZW5ndGg7XG4gICAgICAgICAgICBzZWNvbmRJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5kaWNhdG9yOiBudW1iZXIgPVxuICAgICAgICAgICAgICAgIGZpcnN0W3NlY29uZEluZGV4IC0gMV0gPT09IHNlY29uZFtmaXJzdEluZGV4IC0gMV0gPyAwIDogMVxuICAgICAgICAgICAgZGlzdGFuY2VNYXRyaXhbZmlyc3RJbmRleF1bc2Vjb25kSW5kZXhdID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgLy8gZGVsZXRpb25cbiAgICAgICAgICAgICAgICBkaXN0YW5jZU1hdHJpeFtmaXJzdEluZGV4XVtzZWNvbmRJbmRleCAtIDFdICsgMSxcbiAgICAgICAgICAgICAgICAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgICBkaXN0YW5jZU1hdHJpeFtmaXJzdEluZGV4IC0gMV1bc2Vjb25kSW5kZXhdICsgMSxcbiAgICAgICAgICAgICAgICAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgICAgICBkaXN0YW5jZU1hdHJpeFtmaXJzdEluZGV4IC0gMV1bc2Vjb25kSW5kZXggLSAxXSArIGluZGljYXRvclxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICByZXR1cm4gZGlzdGFuY2VNYXRyaXhbc2Vjb25kLmxlbmd0aF1bZmlyc3QubGVuZ3RoXVxufVxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGN1cnJlbnQgc3RyaW5nIGZvciB1c2luZyBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLlxuICogU3BlY2lhbCByZWd1bGFyIGV4cHJlc3Npb24gY2hhcnMgd2lsbCBiZSBlc2NhcGVkLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byBmb3JtYXQuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hc2tGb3JSZWd1bGFyRXhwcmVzc2lvbiA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKFtcXFxcfC4qJF4rW1xcXSgpP1xcLXt9XSkvZywgJ1xcXFwkMScpXG59XG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGl0cyBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9uLlxuICogQHBhcmFtIHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gZm9ybWF0LlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBsb3dlckNhc2UgPSAoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc3Vic3RyaW5nKDEpXG59XG4vKipcbiAqIFdyYXBzIGdpdmVuIG1hcmsgc3RyaW5ncyBpbiBhIGdpdmVuIHRhcmdldCB3aXRoIGEgZ2l2ZW4gbWFya2VyLlxuICogQHBhcmFtIHRhcmdldCAtIFN0cmluZyB0byBzZWFyY2ggZm9yIG1hcmtlci5cbiAqIEBwYXJhbSBnaXZlbldvcmRzIC0gU3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgdG8gc2VhcmNoIGluIHRhcmdldCBmb3IuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zIC0gRGVmaW5lcyBoaWdobGlnaHRpbmcgYmVoYXZpb3IuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLm1hcmtlciAtIEhUTUwgdGVtcGxhdGUgc3RyaW5nIHRvIG1hcmsuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLm5vcm1hbGl6ZXIgLSBQdXJlIG5vcm1hbGl6YXRpb24gZnVuY3Rpb24gdG8gdXNlIGJlZm9yZVxuICogc2VhcmNoaW5nIGZvciBtYXRjaGVzLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5za2lwVGFnRGVsaW1pdGVkUGFydHMgLSBJbmRpY2F0ZXMgd2hldGhlciB0bywgZm9yXG4gKiBleGFtcGxlLCBpZ25vcmUgaHRtbCB0YWdzIHZpYSBcIlsnPCcsICc+J11cIiAodGhlIGRlZmF1bHQpLlxuICogQHJldHVybnMgUHJvY2Vzc2VkIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hcmsgPSAoXG4gICAgdGFyZ2V0OiB1bmtub3duLFxuICAgIGdpdmVuV29yZHM/OiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nLFxuICAgIGdpdmVuT3B0aW9uczogUGFydGlhbDxTdHJpbmdNYXJrT3B0aW9ucz4gPSB7fVxuKTogdW5rbm93biA9PiB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnICYmIGdpdmVuV29yZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBvcHRpb25zOiBTdHJpbmdNYXJrT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1hcmtlcjogJzxzcGFuIGNsYXNzPVwidG9vbHMtbWFya1wiPnsxfTwvc3Bhbj4nLFxuICAgICAgICAgICAgbm9ybWFsaXplcjogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBza2lwVGFnRGVsaW1pdGVkUGFydHM6IFsnPCcsICc+J10sXG4gICAgICAgICAgICAuLi5naXZlbk9wdGlvbnNcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldCA9IHRhcmdldC50cmltKClcbiAgICAgICAgY29uc3QgbWFya2VkVGFyZ2V0OiBBcnJheTx1bmtub3duPiA9IFtdXG5cbiAgICAgICAgY29uc3Qgd29yZHM6IEFycmF5PHN0cmluZz4gPVxuICAgICAgICAgICAgKFtdIGFzIEFycmF5PHN0cmluZz4pLmNvbmNhdChnaXZlbldvcmRzKVxuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qgd29yZCBvZiB3b3Jkcykge1xuICAgICAgICAgICAgd29yZHNbaW5kZXhdID0gb3B0aW9ucy5ub3JtYWxpemVyKHdvcmQpLnRyaW0oKVxuXG4gICAgICAgICAgICBpbmRleCArPSAxXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzdFRhcmdldDogc3RyaW5nID0gdGFyZ2V0IGFzIHN0cmluZ1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMFxuICAgICAgICAvKlxuICAgICAgICAgICAgU2VhcmNoIGZvciBtYXRjaGVzIGFzIGxvbmcgdGhlcmUgaXMgZW5vdWdoIHRhcmdldCB0ZXh0IHJlbWFpbmluZyB0b1xuICAgICAgICAgICAgd2FsayB0aHJvdWdoLlxuICAgICAgICAqL1xuICAgICAgICBmb3IgKFxuICAgICAgICAgICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgICAgICAgICBpdGVyYXRpb24gPCBNQVhJTUFMX05VTUJFUl9PRl9JVEVSQVRJT05TLnZhbHVlO1xuICAgICAgICAgICAgaXRlcmF0aW9uKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgbmVhcmVzdFJhbmdlOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGxcbiAgICAgICAgICAgIGxldCBjdXJyZW50UmFuZ2U6IEFycmF5PG51bWJlcj4gfCBudWxsXG5cbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgbmV4dCBtYXRjaGluZyB3b3JkLlxuICAgICAgICAgICAgZm9yIChjb25zdCB3b3JkIG9mIHdvcmRzKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJhbmdlID0gZmluZE5vcm1hbGl6ZWRNYXRjaFJhbmdlKFxuICAgICAgICAgICAgICAgICAgICByZXN0VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICB3b3JkLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm5vcm1hbGl6ZXIsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2tpcFRhZ0RlbGltaXRlZFBhcnRzXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICghbmVhcmVzdFJhbmdlIHx8IGN1cnJlbnRSYW5nZVswXSA8IG5lYXJlc3RSYW5nZVswXSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3RSYW5nZSA9IGN1cnJlbnRSYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmVhcmVzdFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5lYXJlc3RSYW5nZVswXSA+IDApXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlZFRhcmdldC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldCBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnN0cmluZyhvZmZzZXQsIG9mZnNldCArIG5lYXJlc3RSYW5nZVswXSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIG1hcmtlZFRhcmdldC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5tYXJrZXIgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0IGFzIHN0cmluZykuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBuZWFyZXN0UmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArIG5lYXJlc3RSYW5nZVsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXJrZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldCBhcyBzdHJpbmcpLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgbmVhcmVzdFJhbmdlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBuZWFyZXN0UmFuZ2VbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlZFRhcmdldFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBuZWFyZXN0UmFuZ2VbMV1cblxuICAgICAgICAgICAgICAgIHJlc3RUYXJnZXQgPSAodGFyZ2V0IGFzIHN0cmluZykuc3Vic3RyaW5nKG9mZnNldClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3RUYXJnZXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZWRUYXJnZXQucHVzaChyZXN0VGFyZ2V0KVxuXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0eXBlb2Ygb3B0aW9ucy5tYXJrZXIgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgIG1hcmtlZFRhcmdldC5qb2luKCcnKSA6XG4gICAgICAgICAgICBtYXJrZWRUYXJnZXRcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0XG59XG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBnaXZlbiBwaG9uZSBudW1iZXIgZm9yIGF1dG9tYXRpYyBkaWFsaW5nIG9yIGNvbXBhcmlzb24uXG4gKiBAcGFyYW0gdmFsdWUgLSBOdW1iZXIgdG8gbm9ybWFsaXplLlxuICogQHBhcmFtIGRpYWxhYmxlIC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlc3VsdCBzaG91bGQgYmUgZGlhbGVkIG9yXG4gKiByZXByZXNlbnRlZCBhcyBsb3NzbGVzcyBkYXRhLlxuICogQHJldHVybnMgTm9ybWFsaXplZCBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVQaG9uZU51bWJlciA9IChcbiAgICB2YWx1ZTogdW5rbm93biwgZGlhbGFibGUgPSB0cnVlXG4pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZTogc3RyaW5nID0gU3RyaW5nKHZhbHVlKS50cmltKClcblxuICAgICAgICAvLyBOb3JtYWxpemUgY291bnRyeSBjb2RlIHByZWZpeC5cbiAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoL15bXjAtOV0qXFwrLywgJzAwJylcblxuICAgICAgICAvLyBSZW1vdmUgYWx0ZXJuYXRlIGRpcmVjdCBkaWFsIG51bWJlcnMuXG4gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLyhbMC05XS4qPykgKigsfG9bcmRdPylcXC4/ID8tP1swLTldKyQvLCAnJDEnXG4gICAgICAgIClcblxuICAgICAgICBpZiAoZGlhbGFibGUpXG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoL1teMC05XSsvZywgJycpXG5cbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yUGF0dGVybiA9ICcoPzpbIC9cXFxcLV0rKSdcbiAgICAgICAgLy8gUmVtb3ZlIHVubmVlZGVkIGFyZWEgY29kZSB6ZXJvIGluIGJyYWNrZXRzLlxuICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkVmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgYF4oLis/KSR7c2VwYXJhdG9yUGF0dGVybn0/XFxcXCgwXFxcXCkke3NlcGFyYXRvclBhdHRlcm59P2AgK1xuICAgICAgICAgICAgICAgICcoLispJCdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAnJDEtJDInXG4gICAgICAgIClcbiAgICAgICAgLy8gUmVtb3ZlIHVubmVlZGVkIGFyZWEgY29kZSBicmFja2V0cy5cbiAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgIGBeKC4rPykke3NlcGFyYXRvclBhdHRlcm59P1xcXFwoKC4rKVxcXFwpYCArXG4gICAgICAgICAgICAgICAgYCR7c2VwYXJhdG9yUGF0dGVybn0/KC4rKSRgXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgJyQxLSQyLSQzJ1xuICAgICAgICApXG4gICAgICAgIC8qXG4gICAgICAgICAgICBSZW1vdmUgc2VwYXJhdG9ycyB0aGF0IGRvbid0IG1hcmsgc2VtYW50aWNzOlxuICAgICAgICAgICAgMTogQ291bnRyeSBjb2RlXG4gICAgICAgICAgICAyOiBBcmVhIGNvZGVcbiAgICAgICAgICAgIDM6IE51bWJlclxuICAgICAgICAqL1xuICAgICAgICBsZXQgY29tcGlsZWRQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgIGBeKDAwWzAtOV0rKSR7c2VwYXJhdG9yUGF0dGVybn0oWzAtOV0rKSR7c2VwYXJhdG9yUGF0dGVybn1gICtcbiAgICAgICAgICAgICcoLispJCdcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChjb21waWxlZFBhdHRlcm4udGVzdChub3JtYWxpemVkVmFsdWUpKVxuICAgICAgICAgICAgLy8gQ291bnRyeSBjb2RlIGFuZCBhcmVhIGNvZGUgbWF0Y2hlZC5cbiAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZS5yZXBsYWNlKGNvbXBpbGVkUGF0dGVybiwgKFxuICAgICAgICAgICAgICAgIF9tYXRjaDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgYXJlYUNvZGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICBudW1iZXI6IHN0cmluZ1xuICAgICAgICAgICAgKTogc3RyaW5nID0+XG4gICAgICAgICAgICAgICAgYCR7Y291bnRyeUNvZGV9LSR7YXJlYUNvZGV9LWAgK1xuICAgICAgICAgICAgICAgIHNsaWNlQWxsRXhjZXB0TnVtYmVyQW5kTGFzdFNlcGFyYXRvcihudW1iZXIpXG4gICAgICAgICAgICApXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBPbmUgcHJlZml4IGNvZGUgbWF0Y2hlZDpcbiAgICAgICAgICAgICAgICAxOiBQcmVmaXggY29kZVxuICAgICAgICAgICAgICAgIDI6IE51bWJlclxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbXBpbGVkUGF0dGVybiA9IC9eKFswLTkgXSspWy8tXSguKykkL1xuICAgICAgICAgICAgY29uc3QgcmVwbGFjZXIgPSAoXG4gICAgICAgICAgICAgICAgX21hdGNoOiBzdHJpbmcsIHByZWZpeENvZGU6IHN0cmluZywgbnVtYmVyOiBzdHJpbmdcbiAgICAgICAgICAgICk6IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgIGAke3ByZWZpeENvZGUucmVwbGFjZSgvICsvLCAnJyl9LWAgK1xuICAgICAgICAgICAgICAgIHNsaWNlQWxsRXhjZXB0TnVtYmVyQW5kTGFzdFNlcGFyYXRvcihudW1iZXIpXG5cbiAgICAgICAgICAgIGlmIChjb21waWxlZFBhdHRlcm4udGVzdChub3JtYWxpemVkVmFsdWUpKVxuICAgICAgICAgICAgICAgIC8vIFByZWZlciBcIi9cIiBvciBcIi1cIiBvdmVyIFwiIFwiIGFzIGFyZWEgY29kZSBzZXBhcmF0b3IuXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoY29tcGlsZWRQYXR0ZXJuLCByZXBsYWNlcilcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkVmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChgXihbMC05XSspJHtzZXBhcmF0b3JQYXR0ZXJufSguKykkYCksXG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZS5yZXBsYWNlKC9bXjAtOS1dKy9nLCAnJykucmVwbGFjZSgvXi0rJC8sICcnKVxuICAgIH1cblxuICAgIHJldHVybiAnJ1xufVxuLyoqXG4gKiBOb3JtYWxpemVzIGEgZ2l2ZW4gemlwIGNvZGUgZm9yIGF1dG9tYXRpYyBhZGRyZXNzIHByb2Nlc3NpbmcuXG4gKiBAcGFyYW0gdmFsdWUgLSBOdW1iZXIgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgTm9ybWFsaXplZCBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVaaXBDb2RlID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKS50cmltKCkucmVwbGFjZShcbiAgICAgICAgICAgIC9eKFteMC05XSpbYS16QS1aXS0pPyguKykkLyxcbiAgICAgICAgICAgIChtYXRjaDogc3RyaW5nLCBwcmVmaXg/OiBzdHJpbmcsIGNvZGU/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJlZml4KVxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoIC0gMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2hhckF0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJy0nXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHByZWZpeCA/PyAnJykgK1xuICAgICAgICAgICAgICAgICAgICAoY29kZSA/PyAnJykudHJpbSgpLnJlcGxhY2UoL1teMC05XSsvZywgJycpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICApXG5cbiAgICByZXR1cm4gJydcbn1cbi8qKlxuICogQ29udmVydHMgYSBnaXZlbiBzZXJpYWxpemVkLCBiYXNlNjQgZW5jb2RlZCBvciBmaWxlIHBhdGggZ2l2ZW4gb2JqZWN0IGludG8gYVxuICogbmF0aXZlIEphdmFTY3JpcHQgb25lIGlmIHBvc3NpYmxlLlxuICogQHBhcmFtIHNlcmlhbGl6ZWRPYmplY3QgLSBPYmplY3QgYXMgc3RyaW5nLlxuICogQHBhcmFtIHNjb3BlIC0gQW4gb3B0aW9uYWwgc2NvcGUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGV2YWx1YXRlIGdpdmVuIG9iamVjdFxuICogaW4uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIHVuZGVyIGdpdmVuIHNjb3BlIHdpbGwgYmUgYXZhaWxhYmxlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBvYmplY3QgaWYgcG9zc2libGUgYW5kIG51bGwgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VFbmNvZGVkT2JqZWN0ID0gPFQgPSBQbGFpbk9iamVjdD4oXG4gICAgc2VyaWFsaXplZE9iamVjdDogc3RyaW5nLCBzY29wZTogTWFwcGluZzx1bmtub3duPiA9IHt9LCBuYW1lID0gJ3Njb3BlJ1xuKTogbnVsbCB8IFQgPT4ge1xuICAgIGlmICghaW1wb3J0cy5mcz8ucmVhZEZpbGVTeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgc3lzdGVtIGFwaSBjb3VsZCBub3QgYmUgbG9hZGVkLicpXG5cbiAgICBpZiAoc2VyaWFsaXplZE9iamVjdC5lbmRzV2l0aCgnLmpzb24nKSAmJiBpc0ZpbGVTeW5jKHNlcmlhbGl6ZWRPYmplY3QpKVxuICAgICAgICBzZXJpYWxpemVkT2JqZWN0ID1cbiAgICAgICAgICAgIGltcG9ydHMuZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRPYmplY3QsIHtlbmNvZGluZzogREVGQVVMVF9FTkNPRElOR31cbiAgICAgICAgICAgIClcblxuICAgIHNlcmlhbGl6ZWRPYmplY3QgPSBzZXJpYWxpemVkT2JqZWN0LnRyaW0oKVxuXG4gICAgaWYgKCFzZXJpYWxpemVkT2JqZWN0LnN0YXJ0c1dpdGgoJ3snKSlcbiAgICAgICAgc2VyaWFsaXplZE9iamVjdCA9IChldmFsKCdCdWZmZXInKSBhcyB0eXBlb2YgQnVmZmVyKVxuICAgICAgICAgICAgLmZyb20oc2VyaWFsaXplZE9iamVjdCwgJ2Jhc2U2NCcpXG4gICAgICAgICAgICAudG9TdHJpbmcoREVGQVVMVF9FTkNPRElORylcblxuICAgIGNvbnN0IHJlc3VsdDogRXZhbHVhdGlvblJlc3VsdDxUPiA9XG4gICAgICAgIGV2YWx1YXRlPFQ+KHNlcmlhbGl6ZWRPYmplY3QsIHtzY29wZToge1tuYW1lXTogc2NvcGV9fSlcblxuICAgIGlmICh0eXBlb2YgcmVzdWx0LnJlc3VsdCA9PT0gJ29iamVjdCcpXG4gICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0XG5cbiAgICByZXR1cm4gbnVsbFxufVxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZ2l2ZW4gcGhvbmUgbnVtYmVyLiBOT1RFOiBDdXJyZW50bHkgb25seSBzdXBwb3J0IEdlcm1hbiBwaG9uZVxuICogbnVtYmVycy5cbiAqIEBwYXJhbSB2YWx1ZSAtIE51bWJlciB0byBmb3JtYXQuXG4gKiBAcmV0dXJucyBGb3JtYXR0ZWQgbnVtYmVyLlxuICovXG5leHBvcnQgY29uc3QgcmVwcmVzZW50UGhvbmVOdW1iZXIgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgIGlmIChbJ251bWJlcicsICdzdHJpbmcnXS5pbmNsdWRlcyhkZXRlcm1pbmVUeXBlKHZhbHVlKSkgJiYgdmFsdWUpIHtcbiAgICAgICAgLy8gUmVwcmVzZW50IGNvdW50cnkgY29kZSBhbmQgbGVhZGluZyBhcmVhIGNvZGUgemVyby5cbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tYmFzZS10by1zdHJpbmdcbiAgICAgICAgICAgIFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvXigwMHxcXCspKFswLTldKyktKFswLTktXSspJC8sICcrJDIgKDApICQzJylcblxuICAgICAgICAvLyBBZGQgR2VybWFuIGNvdW50cnkgY29kZSBpZiBub3QgZXhpc3RzLlxuICAgICAgICBub3JtYWxpemVkVmFsdWUgPVxuICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoL14wKFsxLTldWzAtOS1dKykkLywgJys0OSAoMCkgJDEnKVxuICAgICAgICAvLyBTZXBhcmF0ZSBhcmVhIGNvZGUgZnJvbSBiYXNlIG51bWJlci5cbiAgICAgICAgbm9ybWFsaXplZFZhbHVlID1cbiAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZS5yZXBsYWNlKC9eKFteLV0rKS0oWzAtOS1dKykkLywgJyQxIC8gJDInKVxuXG4gICAgICAgIC8vIFBhcnRpdGlvbiBiYXNlIG51bWJlciBpbiBvbmUgdHJpcGxlIGFuZCB0dXBsZXMgb3IgdHVwbGVzIG9ubHkuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkVmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIC9eKC4qPykoWzAtOV0rKSgtP1swLTldKikkLyxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBfbWF0Y2g6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIG51bWJlcjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZ1xuICAgICAgICAgICAgKTogc3RyaW5nID0+XG4gICAgICAgICAgICAgICAgcHJlZml4ICtcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIChudW1iZXIubGVuZ3RoICUgMiA9PT0gMCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLnJlcGxhY2UoLyhbMC05XXsyfSkvZywgJyQxICcpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlci5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eKFswLTldezN9KShbMC05XSspJC8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWF0Y2g6IHN0cmluZywgdHJpcGxlOiBzdHJpbmcsIHJlc3Q6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk6IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0cmlwbGV9IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0LnJlcGxhY2UoLyhbMC05XXsyfSkvZywgJyQxICcpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSArIHN1ZmZpeFxuICAgICAgICAgICAgICAgICkudHJpbSgpXG4gICAgICAgICkudHJpbSgpXG4gICAgfVxuXG4gICAgcmV0dXJuICcnXG59XG4vKipcbiAqIFNsaWNlcyBhbGwgbm9uZSBudW1iZXJzIGJ1dCBwcmVzZXJ2ZXMgbGFzdCBzZXBhcmF0b3IuXG4gKiBAcGFyYW0gdmFsdWUgLSBTdHJpbmcgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIC0gU2xpY2VkIGdpdmVuIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3Qgc2xpY2VBbGxFeGNlcHROdW1iZXJBbmRMYXN0U2VwYXJhdG9yID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIC8qXG4gICAgICAgIDE6IGJhc2VOdW1iZXJcbiAgICAgICAgMjogZGlyZWN0RGlhbGluZ051bWJlclN1ZmZpeFxuICAgICovXG4gICAgY29uc3QgY29tcGlsZWRQYXR0ZXJuID0gL14oLipbMC05XS4qKS0oWzAtOV0rKSQvXG4gICAgaWYgKGNvbXBpbGVkUGF0dGVybi50ZXN0KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoY29tcGlsZWRQYXR0ZXJuLCAoXG4gICAgICAgICAgICBfbWF0Y2g6IHN0cmluZyxcbiAgICAgICAgICAgIGJhc2VOdW1iZXI6IHN0cmluZyxcbiAgICAgICAgICAgIGRpcmVjdERpYWxpbmdOdW1iZXJTdWZmaXg6IHN0cmluZ1xuICAgICAgICApOiBzdHJpbmcgPT5cbiAgICAgICAgICAgIGAke2Jhc2VOdW1iZXIucmVwbGFjZSgvW14wLTldKy9nLCAnJyl9LWAgK1xuICAgICAgICAgICAgZGlyZWN0RGlhbGluZ051bWJlclN1ZmZpeFxuICAgICAgICApXG5cbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW14wLTldKy9nLCAnJylcbn1cbi8qKlxuICogQ29udmVydHMgYSBkb20gc2VsZWN0b3IgdG8gYSBwcmVmaXhlZCBkb20gc2VsZWN0b3Igc3RyaW5nLlxuICogQHBhcmFtIHNlbGVjdG9yIC0gQSBkb20gbm9kZSBzZWxlY3Rvci5cbiAqIEBwYXJhbSBzZWxlY3RvclByZWZpeCAtIEEgZG9tIG5vZGUgc2VsZWN0b3IgcHJlZml4IHRvIHRha2UgaW50byBhY2NvdW50LlxuICogQHJldHVybnMgUmV0dXJucyBnaXZlbiBzZWxlY3RvciBwcmVmaXhlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZURvbU5vZGVTZWxlY3RvciA9IChcbiAgICBzZWxlY3Rvcjogc3RyaW5nLCBzZWxlY3RvclByZWZpeCA9ICcnXG4pOiBzdHJpbmcgPT4ge1xuICAgIGxldCBkb21Ob2RlU2VsZWN0b3JQcmVmaXggPSAnJ1xuICAgIGlmIChzZWxlY3RvclByZWZpeClcbiAgICAgICAgZG9tTm9kZVNlbGVjdG9yUHJlZml4ID0gYCR7c2VsZWN0b3JQcmVmaXh9IGBcbiAgICBpZiAoIShcbiAgICAgICAgc2VsZWN0b3Iuc3RhcnRzV2l0aChkb21Ob2RlU2VsZWN0b3JQcmVmaXgpIHx8XG4gICAgICAgIHNlbGVjdG9yLnRyaW0oKS5zdGFydHNXaXRoKCc8JylcbiAgICApKVxuICAgICAgICBzZWxlY3RvciA9IGRvbU5vZGVTZWxlY3RvclByZWZpeCArIHNlbGVjdG9yXG5cbiAgICByZXR1cm4gc2VsZWN0b3IudHJpbSgpXG59XG4vKipcbiAqIEFiYnJldmlhdGVzIGEgZ2l2ZW4gc3RyaW5nIGlmIGl0IGV4Y2Vzc2VzIGEgZ2l2ZW4gbGltaXQuXG4gKiBAcGFyYW0gdmFsdWUgLSBTdHJpbmcgdG8gYWJicmV2aWF0ZS5cbiAqIEBwYXJhbSBsaW1pdCAtIE1heGltdW0gbGVuZ3RoIG9mIHByb2Nlc3NlZCBzdHJpbmcuXG4gKiBAcmV0dXJucyBBYmJyZXZpYXRlZCBnaXZlbiBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBsaW1pdCA9ICh2YWx1ZTogc3RyaW5nLCBsaW1pdCA9IDEwMCkgPT4ge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPD0gbGltaXQpXG4gICAgICAgIHJldHVybiB2YWx1ZVxuXG4gICAgY29uc3QgZG90cyA9ICcuLi4nXG4gICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBsaW1pdCAtIGRvdHMubGVuZ3RoKSArIGRvdHNcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsU0FDSSxpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixPQUFPO0FBR1gsU0FDSSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCO0FBRTVELFNBQVEsYUFBYSxFQUFFLDRCQUE0QjtBQUNuRCxTQUFRLFVBQVUsRUFBRSxPQUFPO0FBQzNCLFNBQVEsYUFBYSxFQUFFLFNBQVM7QUFDaEM7QUFDQSxPQUFPLE1BQU0sK0NBQStDLEdBQUcsQ0FDM0QsU0FBUyxFQUNULElBQUksRUFBRSxLQUFLLEVBQ1gsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQzdCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUN4QjtBQUNELE9BQU8sTUFBTSx5QkFBeUIsR0FBRztFQUFDLEtBQUssRUFBRTtBQUFLLENBQUM7QUFDdkQ7QUFDQTtBQUNBLE9BQU8sTUFBTSx3QkFBd0IsR0FBRyxhQUFhO0FBQ3JEO0FBQ0E7QUFDQSxPQUFPLE1BQU0saUNBQWlDLEdBQUcsVUFBVTtBQUMzRCxPQUFPLE1BQU0sMEJBQTBCLEdBQUcsQ0FDdEMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQ2YsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQ2YsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQ2YsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBRVgsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBRWQsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBRVgsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBRVgsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBRVgsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQ2YsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQ0o7QUFFVixPQUFPLE1BQU0sYUFBYTtBQUN0QjtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsa0JBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVzs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sd0JBQXdCLEdBQUcsQ0FDcEMsS0FBYSxFQUFFLGNBQTZCLEdBQUcsRUFBRSxLQUN4QztFQUNUO0VBQ0EsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDOUQsT0FBTyxLQUFLOztFQUVoQjtFQUNBLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUM5QixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7RUFFaEMsS0FBSyxNQUFNLE9BQU8sSUFBSSx1QkFBdUIsRUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ2pDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUNqQixJQUFJLE1BQU0sQ0FBQyxLQUFLLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7RUFFNUQsT0FBTyxLQUFLO0FBQ2hCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLDBCQUEwQixHQUFJLElBQVksSUFBYTtFQUNoRSxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDbkMsT0FBTyxJQUFJLElBQUksRUFBRTtFQUVyQixPQUFPO0VBQ0g7RUFBQSxDQUNDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxJQUFJLENBQUMsRUFBRSxFQUFFO0VBQ3BFO0VBQ0E7RUFBQSxDQUNDLE9BQU8sQ0FDSixJQUFJLE1BQU0sQ0FBQyxLQUFLLHdCQUF3QixjQUFjLEVBQUUsR0FBRyxDQUFDLEVBQzVELENBQUMsVUFBa0IsRUFBRSxXQUFtQixLQUNwQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQ2hDLENBQUM7QUFDVCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSwwQkFBMEIsR0FBRyxDQUN0QyxHQUFXLEVBQUUsWUFBWSxHQUFHLEtBQUssS0FDeEI7RUFDVCxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUN6QixPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUNyQixPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUNyQixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUNwQixPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUNyQixPQUFPLENBQUMsTUFBTSxFQUFFLFlBQVksR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3BELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sa0JBQWtCLEdBQUcsQ0FDOUIsSUFBWSxFQUFFLGFBQWEsR0FBRyxHQUFHLEtBQ3hCO0VBQ1QsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUVsQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sRUFDaEUsT0FBTyxJQUFJLEdBQUcsYUFBYTtFQUUvQixPQUFPLElBQUk7QUFDZixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxhQUFhLEdBQUcsQ0FDekIsTUFBZSxHQUFHLFFBQVEsRUFDMUIsSUFBWSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFDckQsU0FBUyxHQUFHLEdBQUcsS0FDTDtFQUNWLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO0lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUMzQixNQUFNLElBQUksU0FBUztJQUV2QixPQUNJLElBQUksS0FDSixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7RUFFL0I7RUFFQSxPQUFPLEtBQUs7QUFDaEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxhQUFhLEdBQUcsQ0FDekIsR0FBVyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFDaEQsUUFBZ0IsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFLEtBQ2hEO0VBQ1QsTUFBTSxNQUE0QixHQUM5QixpREFBaUQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBRS9ELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ3JELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQztFQUVwQixPQUFPLFFBQVE7QUFDbkIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUN6QixHQUFXLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRSxFQUNoRCxRQUF1QixHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxHQUNsRCxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FDckMsSUFBSSxLQUNRO0VBQ2hCLE1BQU0sTUFBNEIsR0FDOUIsMENBQTBDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUV4RCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDM0IsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVsQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQ2pCLE9BQU8sUUFBUTtFQUVuQjtFQUNJO0VBQ0E7RUFDQSxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksSUFDNUIsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUV6QyxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7RUFFcEQsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssT0FBTyxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQ3RELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sZUFBZSxHQUFHLENBQzNCLEdBQVcsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQ2hELFFBQWdCLEdBQ1osYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQ2hDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDckMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUNoRCxDQUFDLElBQ0QsRUFDSCxLQUNRO0VBQ1QsTUFBTSxNQUE0QixHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7RUFFaEUsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUN4QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFFcEIsT0FBTyxRQUFRO0FBQ25CLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLGVBQWUsR0FBRyxDQUMzQixRQUF1QixHQUFHLElBQUksRUFDOUIsZUFBZSxHQUFHLEtBQUssRUFDdkIsVUFBeUIsR0FBRyxJQUFJLEVBQ2hDLFlBQVksR0FBRyxHQUFHLEVBQ2xCLG1CQUFtQixHQUFHLEdBQUcsRUFDekIsV0FBMEIsR0FBRyxJQUFJLEVBQ2pDLFNBQXdCLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRSxLQUNYO0VBQ2xEO0VBQ0EsSUFBSSxJQUFZLEdBQUcsU0FBUyxJQUFJLEdBQUc7RUFDbkMsSUFBSSxNQUFNLEdBQUcsRUFBRTtFQUNmLElBQUksV0FBVyxFQUNYLE1BQU0sR0FBRyxXQUFXLE1BQ25CLElBQUksbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO0lBQ2xFLE1BQU0saUJBQXlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDbkQsSUFBSSxhQUFxQjtJQUN6QixJQUFJLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxFQUFFO01BQzFCLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztNQUMxRCxJQUFJLEdBQUcsRUFBRTtJQUNiLENBQUMsTUFBTTtNQUNILGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUMxQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsaUJBQ2hDLENBQUM7TUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztJQUM1QztJQUNBLE1BQU0sbUJBQTJCLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDOUQsSUFBSSxtQkFBbUIsS0FBSyxDQUFDLENBQUMsRUFDMUIsTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUM7RUFDN0QsQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDLFFBQVEsRUFDN0IsTUFBTSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUU7RUFDaEQsSUFBSSxLQUFhLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxNQUFNO0VBQ3BEO0VBQ0E7RUFDQSxNQUFNLElBQWEsR0FBRyxLQUFLLEtBQUssR0FBRztFQUNuQyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO0lBQ3ZCLElBQUksV0FBVyxHQUFHLEVBQUU7SUFDcEIsSUFBSTtNQUNBLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQyxDQUFDLE1BQU07TUFDSjtJQUFBO0lBRUosTUFBTSxpQkFBeUIsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUNuRSxJQUFJLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxFQUN4QixLQUFLLEdBQUcsRUFBRSxNQUNUO01BQ0QsS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUM7TUFDaEQsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUM5QixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ3BEO0VBQ0osQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFDNUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztFQUN2QyxJQUFJLElBQW1CLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtFQUN2RCxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0VBQ3JDLElBQUksSUFBSSxJQUFJLE1BQU0sRUFDZCxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3pDO0VBQ0E7RUFDQSxNQUFNLFVBQTJCLEdBQUcsRUFBZ0M7RUFDcEUsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7SUFDcEIsTUFBTSxZQUEyQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3BELElBQUksR0FBVztJQUNmLElBQUk7TUFDQSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxNQUFNO01BQ0osR0FBRyxHQUFHLEVBQUU7SUFDWjtJQUNBLElBQUk7TUFDQSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQyxNQUFNO01BQ0osS0FBSyxHQUFHLEVBQUU7SUFDZDtJQUVBLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BCLElBQUksZUFBZTtNQUNmLElBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsSUFDckQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFFN0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BRTlDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUFBLE9BRTdCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLO0VBQy9CO0VBQ0E7O0VBRUEsSUFBSSxRQUFRLEVBQUU7SUFDVixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQzFELE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUUvQixPQUFPLElBQUk7RUFDZjtFQUVBLE9BQU8sVUFBVTtBQUNyQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxnQkFBZ0IsR0FBRyxDQUM1QixHQUFXLEVBQUUsWUFBb0IsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFLEtBQzVEO0VBQ1YsTUFBTSxNQUFjLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDN0MsTUFBTSxRQUFnQixHQUFHLGVBQWUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQ2pELE1BQU0sSUFBbUIsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDO0VBRTlDLE9BQ0ksQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLE1BQU0sS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQ3ZELFFBQVEsS0FBSyxFQUFFLElBQUksUUFBUSxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUM5RCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFL0QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sWUFBWSxHQUFJLFFBQWlCLElBQWE7RUFDdkQsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7SUFDOUIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVyRSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQ3RCLE9BQU8sR0FBRztJQUVkLE9BQU8sVUFBVSxHQUFHLEVBQUU7RUFDMUI7RUFFQSxPQUFPLEVBQUU7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxZQUFZLEdBQUksR0FBWSxJQUFhO0VBQ2xELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUN2QixPQUFPLEdBQUcsQ0FDTCxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQzlCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQ25CLElBQUksQ0FBQyxDQUFDO0VBRWYsT0FBTyxFQUFFO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sb0JBQW9CLEdBQUcsQ0FDaEMsS0FBYSxFQUNiLFNBQVMsR0FBRyxHQUFHLEVBQ2YsYUFBbUMsR0FBRyxJQUFJLEtBQ2pDO0VBQ1QsSUFBSSxDQUFDLGFBQWEsRUFDZCxhQUFhLEdBQUcsYUFBYTtFQUVqQyxNQUFNLGdCQUF3QixHQUFHLHdCQUF3QixDQUFDLFNBQVMsQ0FBQztFQUVwRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7SUFDdEIsSUFBSSxtQkFBbUIsR0FBRyxFQUFFO0lBQzVCLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFO01BQ3RDLElBQUksbUJBQW1CLEVBQ25CLG1CQUFtQixJQUFJLEdBQUc7TUFDOUIsbUJBQW1CLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JEO0lBRUEsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQ2pCLElBQUksTUFBTSxDQUNOLElBQUksbUJBQW1CLEtBQUssbUJBQW1CLEdBQUcsRUFBRSxHQUN4RCxDQUFDLEVBQ0QsS0FBSyxTQUFTLElBQ2xCLENBQUM7RUFDTDtFQUVBLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUNqQixJQUFJLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFDeEQsS0FBSyxTQUFTLElBQ2xCLENBQUM7RUFFRCxPQUFPLEtBQUssQ0FDUCxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUNqRSxXQUFXLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxVQUFVLEdBQUksTUFBYyxJQUFhO0VBQ2xELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLGtCQUFrQixHQUFJLFVBQWtCLElBQWE7RUFDOUQsT0FBTyxVQUFVLENBQ1osT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FDNUIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FDbkIsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDbEIsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDbEIsSUFBSSxDQUFDLENBQUM7QUFDZixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxrQkFBa0IsR0FBSSxVQUFrQixJQUFvQjtFQUNyRSxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUU7SUFDeEIsTUFBTSxlQUFlLEdBQ2pCLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztJQUNwRCxlQUFlLENBQUMsU0FBUyxHQUFHLFVBQVU7SUFFdEMsT0FBTyxlQUFlLENBQUMsS0FBSztFQUNoQztFQUVBLE9BQU8sSUFBSTtBQUNmLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLG9CQUFvQixHQUFHLENBQ2hDLEtBQWEsRUFDYixTQUFTLEdBQUcsR0FBRyxFQUNmLGFBQW1DLEdBQUcsSUFBSSxFQUMxQyxtQ0FBbUMsR0FBRyxLQUFLLEVBQzNDLHVCQUF1QixHQUFHLEtBQUssS0FDdEI7RUFDVCxJQUFJLGdCQUF3QixHQUFHLHdCQUF3QixDQUFDLFNBQVMsQ0FBQztFQUVsRSxJQUFJLENBQUMsYUFBYSxFQUNkLGFBQWEsR0FBRyxhQUFhO0VBQ2pDLElBQUksbUJBQTJCO0VBQy9CLElBQUksbUNBQW1DLEVBQ25DLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQzVDO0lBQ0QsbUJBQW1CLEdBQUcsRUFBRTtJQUN4QixLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRTtNQUN0QyxJQUFJLG1CQUFtQixFQUNuQixtQkFBbUIsSUFBSSxHQUFHO01BQzlCLG1CQUFtQixJQUNmLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksRUFBRTtJQUNyRDtFQUNKO0VBRUEsTUFBTSx5QkFBa0MsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztFQUN0RSxJQUFJLHlCQUF5QixFQUN6QixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0VBRTdDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUNqQixJQUFJLE1BQU0sQ0FDTixJQUFJLGdCQUFnQixLQUFLLG1CQUFtQixHQUFHLEdBQy9DLElBQUksZ0JBQWdCLEtBQUssRUFDekIsR0FDSixDQUFDLEVBQ0QsQ0FDSSxVQUFrQixFQUNsQixNQUFjLEVBQ2QsWUFBb0IsRUFDcEIsS0FBYSxLQUNKLE1BQU0sR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxLQUN2RCxDQUFDO0VBRUQsSUFBSSx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQUcsTUFBTSxnQkFBZ0IsSUFBSTtFQUVqRCxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FDakIsSUFBSSxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUNuRCxDQUFDLFVBQWtCLEVBQUUsV0FBbUIsS0FDcEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUNoQyxDQUFDO0VBRUQsSUFBSSx5QkFBeUIsRUFDekIsS0FBSyxHQUFHLFNBQVMsR0FBRyxLQUFLO0VBRTdCLE9BQU8sS0FBSztBQUNoQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sT0FBTyxHQUFHLENBQ25CLFVBQWtCLEVBQ2xCLFlBQWtELEdBQUcsQ0FBQyxDQUFDLEtBQzdCO0VBQzFCLE1BQU0sT0FBb0MsR0FBRztJQUN6QyxLQUFLLEVBQUUsRUFBa0I7SUFDekIsS0FBSyxFQUFFLEtBQUs7SUFDWixPQUFPLEVBQUUsS0FBSztJQUNkLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNYLEdBQUc7RUFDUCxDQUFDO0VBQ0Q7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNJLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3RDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FDcEIsTUFBTSxDQUFFLElBQUksSUFDVCxJQUFJLE1BQU0sQ0FDTixLQUFLLGlDQUFpQyxHQUFHLEdBQ3pDLElBQUksd0JBQXdCLEtBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQ1osQ0FBQywrQ0FBK0MsQ0FDM0MsUUFBUSxDQUFDLElBQUksQ0FDdEIsQ0FBQztFQUNMLE1BQU0sTUFBK0IsR0FBRztJQUNwQyxLQUFLLEVBQUUsSUFBSTtJQUNYLFdBQVcsRUFBRSxXQUFXO0lBQ3hCLHdCQUF3QixFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxTQUFTLENBQUM7SUFDMUQsa0JBQWtCLEVBQ2QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQ3hCLE9BQU8sQ0FBQyxLQUFLLEdBQ2IsT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsR0FDN0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUMvQjtJQUNOLGdCQUFnQixFQUFFLENBQUMsQ0FBOEI7SUFDakQsVUFBVSxFQUFFLEVBQUU7SUFDZCxnQkFBZ0IsRUFBRSxNQUFTO0VBQy9CLENBQUM7RUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtJQUMxQyxNQUFNLE9BQWUsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUM7SUFDeEQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBYyxHQUFHLE9BQU87SUFDcEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0VBQ25DO0VBQ0E7RUFDQSxJQUFJLHlCQUF5QixDQUFDLEtBQUssRUFDL0IsSUFDSSxhQUFhLENBQ2YsS0FBSyxFQUFtQyxTQUFTLEVBQy9DLFVBQVUsR0FDSixhQUFhLENBQXNCLEtBQUssQ0FDckMsU0FBUyxDQUlkLElBQUksVUFBVSxHQUFHLEVBQ2pCO0lBQUMsT0FBTyxFQUFFLENBQUMsNkJBQTZCO0VBQUMsQ0FDN0MsQ0FBQyxDQUFDLElBQUksTUFDTCxJQUNELFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFDeEQ7SUFDRSxNQUFNLFlBQVksR0FBRyxNQUFNO0lBQzNCO0lBQ0EsVUFBVSxHQUFHO0lBQ1Q7SUFBQSxDQUNDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsWUFBWTtJQUM5QjtJQUFBLENBQ0MsT0FBTyxDQUFDLG9CQUFvQixFQUFFLFlBQVk7SUFDM0M7SUFBQSxDQUNDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTTtJQUM5QjtJQUFBLENBQ0MsT0FBTyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDbkM7SUFDQSxNQUFNLEtBQWEsR0FDZixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDN0QsVUFBVSxHQUFHO0lBQ1Q7SUFDQTtJQUFBLENBQ0MsT0FBTyxDQUNKLHdDQUF3QyxFQUN4QyxHQUFHLEtBQUssU0FBUyxLQUFLLEVBQzFCLENBQUMsQ0FDQSxPQUFPLENBQUMsZUFBZSxFQUFFLEdBQUcsS0FBSyxLQUFLLEtBQUssRUFBRTtJQUM5QztJQUFBLENBQ0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQ25CO0lBQUEsQ0FDQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQztFQUN0RDtFQUNKO0VBQ0EsSUFBSSxxQkFBc0Q7RUFFMUQsSUFBSTtJQUNBO0lBQ0EscUJBQXFCLEdBQUcsS0FBSyxPQUFPLENBQUMsS0FBSyxHQUFHLGFBQWEsR0FBRyxRQUFRLEVBQ2pFLElBQUksT0FBTyxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLEVBQ3hELEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFDcEIsR0FBRyxPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsVUFBVSxFQUNwRCxDQUF3QjtFQUM1QixDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUU7SUFDWixNQUFNLENBQUMsS0FBSyxHQUNSLHFCQUFxQixVQUFVLGdDQUFnQyxHQUMvRCxzQkFBc0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FDekQsU0FBUyxDQUFDLEtBQUssQ0FBQztFQUN4QjtFQUNBLElBQUkscUJBQXFCLEVBQUU7SUFDdkIsTUFBTSwwQkFBMEIsR0FDNUIscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDL0MsTUFBTSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FDL0MsQ0FBQyxHQUFHLFVBQVU7SUFDVjtBQUNoQjtBQUNBO0FBQ0E7SUFDZ0IsMEJBQTBCLENBQ3RCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsVUFDM0MsQ0FBQyxHQUNMLDBCQUEwQjtFQUNsQztFQUVBLE9BQU8sTUFBTTtBQUNqQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLFFBQVEsR0FBRyxDQUNwQixVQUFrQixFQUNsQixZQUFtRCxHQUFHLENBQUMsQ0FBQyxLQUNsQztFQUN0QixNQUFNLE9BQXFDLEdBQUc7SUFDMUMsS0FBSyxFQUFFLENBQUMsQ0FBTTtJQUNkLEtBQUssRUFBRSxLQUFLO0lBQ1osT0FBTyxFQUFFLEtBQUs7SUFDZCxpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDWCxHQUFHO0VBQ1AsQ0FBQztFQUNEOztFQUdBLE1BQU07SUFDRixLQUFLO0lBQ0wsa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVjtFQUNKLENBQUMsR0FBRyxPQUFPLENBQU8sVUFBVSxFQUFFLE9BQXNDLENBQUM7RUFFckUsSUFBSSxNQUEyQixHQUFHO0lBQzlCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLEtBQUssRUFBRSxvQkFBb0I7SUFFM0IsTUFBTSxFQUFFO0VBQ1osQ0FBQztFQUVELElBQUksS0FBSyxFQUFFO0lBQ1AsTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUs7SUFFMUMsT0FBTyxNQUFNO0VBQ2pCO0VBRUEsSUFBSTtJQUNBLE1BQU0sR0FBRztNQUNMLFlBQVksRUFBRSxJQUFJO01BQ2xCLFlBQVksRUFBRSxJQUFJO01BQ2xCLEtBQUssRUFBRSxJQUFJO01BQ1gsTUFBTSxFQUFFLGdCQUFnQjtNQUNwQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ2dCLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFFLElBQWEsSUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3RCLENBQ0o7SUFDSixDQUFDO0VBQ0wsQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFO0lBQ1osTUFBTSxDQUFDLEtBQUssR0FDUixNQUFNLENBQUMsWUFBWSxHQUNmLHFCQUFxQixVQUFVLDJCQUEyQixHQUMxRCwyQkFBMkIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUN2RCxTQUFTLENBQUMsS0FBSyxDQUNsQjtFQUNUO0VBRUEsT0FBTyxNQUFNO0FBQ2pCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxvQkFBb0IsR0FBRyxDQUc1QixVQUFrQixFQUNsQixPQUFrRCxHQUFHLENBQUMsQ0FBQyxLQUM5QztFQUNiLE1BQU0sU0FBbUMsR0FBRyxRQUFRLENBQ2hELFVBQVUsRUFBRSxPQUNoQixDQUFDO0VBRUQsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztFQUVwQyxPQUFPLFNBQVMsQ0FBQyxNQUFNO0FBQzNCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLHdCQUF3QixHQUFHLENBQ3BDLE1BQWUsRUFDZixLQUFjLEVBQ2QsVUFBVSxHQUFJLEtBQWMsSUFBYSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDcEUscUJBQThDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQ3BDO0VBQ3ZCLE1BQU0sZUFBdUIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0VBQ2pELE1BQU0sZ0JBQXdCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztFQUVuRCxNQUFNLFlBQVksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLEdBQzNDLE1BQU0sR0FDTixnQkFBZ0I7RUFFcEIsSUFBSSxnQkFBZ0IsSUFBSSxlQUFlLEVBQUU7SUFDckMsSUFBSSxLQUFLLEdBQUcsS0FBSztJQUNqQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO01BQ3pELElBQUksS0FBSyxFQUFFO1FBQ1AsSUFDSSxLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQ3BDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUsscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBRXZELEtBQUssR0FBRyxLQUFLO1FBRWpCO01BQ0o7TUFFQSxJQUNJLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFDcEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFDekQ7UUFDRSxLQUFLLEdBQUcsSUFBSTtRQUVaO01BQ0o7TUFFQSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUNwRCxlQUNKLENBQUMsRUFBRTtRQUNDLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQzVCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUU3QixLQUNJLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQ2xDLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLFFBQVEsSUFBSSxDQUFDLEVBRWIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUNsQyxLQUFLLEVBQUUsUUFDWCxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQzFCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQztNQUN4QztJQUNKO0VBQ0o7RUFFQSxPQUFPLElBQUk7QUFDZixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxzQkFBc0IsR0FBSSxJQUFZLElBQWE7RUFDNUQsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLDBCQUEwQixFQUMxRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDO0VBRTdELE9BQU8sSUFBSTtBQUNmLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLE1BQU0sR0FBRyxDQUNsQixNQUFjLEVBQUUsR0FBRyxtQkFBbUMsS0FDN0M7RUFDVCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0VBRW5DLElBQUksS0FBSyxHQUFHLENBQUM7RUFDYixLQUFLLE1BQU0sS0FBSyxJQUFJLG1CQUFtQixFQUFFO0lBQ3JDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUNuQixJQUFJLE1BQU0sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQzVELENBQUM7SUFFRCxLQUFLLElBQUksQ0FBQztFQUNkO0VBRUEsT0FBTyxNQUFNO0FBQ2pCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYSxFQUFFLE1BQWMsS0FBYTtFQUN0RTtBQUNKO0FBQ0E7QUFDQTtFQUNJLE1BQU0sY0FBb0MsR0FDdEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUNwQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNyQyxDQUFDO0VBQ0w7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0ksS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQzlDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLO0VBQ3BDO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0ksS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQy9DLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO0VBRXBDLEtBQUssSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQVUsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUM5RCxLQUNJLElBQUksV0FBVyxHQUFHLENBQUMsRUFDbkIsV0FBVyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQzNCLFdBQVcsRUFBRSxFQUNmO0lBQ0UsTUFBTSxTQUFpQixHQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDN0QsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHO0lBQzlDO0lBQ0EsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQy9DO0lBQ0EsY0FBYyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO0lBQy9DO0lBQ0EsY0FBYyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FDdEQsQ0FBQztFQUNMO0VBRUosT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDdEQsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSx3QkFBd0IsR0FBSSxLQUFhLElBQWE7RUFDL0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFLE1BQU0sQ0FBQztBQUMzRCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxTQUFTLEdBQUksTUFBYyxJQUFhO0VBQ2pELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sSUFBSSxHQUFHLENBQ2hCLE1BQWUsRUFDZixVQUFtQyxFQUNuQyxZQUF3QyxHQUFHLENBQUMsQ0FBQyxLQUNuQztFQUNWLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUU7SUFDbEQsTUFBTSxPQUEwQixHQUFHO01BQy9CLE1BQU0sRUFBRSxxQ0FBcUM7TUFDN0MsVUFBVSxFQUFHLEtBQWMsSUFBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDM0QscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO01BQ2pDLEdBQUc7SUFDUCxDQUFDO0lBRUQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixNQUFNLFlBQTRCLEdBQUcsRUFBRTtJQUV2QyxNQUFNLEtBQW9CLEdBQ3JCLEVBQUUsQ0FBbUIsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUM1QyxJQUFJLEtBQUssR0FBRyxDQUFDO0lBQ2IsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7TUFDdEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7TUFFOUMsS0FBSyxJQUFJLENBQUM7SUFDZDtJQUVBLElBQUksVUFBa0IsR0FBRyxNQUFnQjtJQUN6QyxJQUFJLE1BQU0sR0FBRyxDQUFDO0lBQ2Q7QUFDUjtBQUNBO0FBQ0E7SUFDUSxLQUNJLElBQUksU0FBUyxHQUFHLENBQUMsRUFDakIsU0FBUyxHQUFHLDRCQUE0QixDQUFDLEtBQUssRUFDOUMsU0FBUyxFQUFFLEVBQ2I7TUFDRSxJQUFJLFlBQWtDLEdBQUcsSUFBSTtNQUM3QyxJQUFJLFlBQWtDOztNQUV0QztNQUNBLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1FBQ3RCLFlBQVksR0FBRyx3QkFBd0IsQ0FDbkMsVUFBVSxFQUNWLElBQUksRUFDSixPQUFPLENBQUMsVUFBVSxFQUNsQixPQUFPLENBQUMscUJBQ1osQ0FBQztRQUNELElBQ0ksWUFBWSxLQUNYLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFFcEQsWUFBWSxHQUFHLFlBQVk7TUFDbkM7TUFFQSxJQUFJLFlBQVksRUFBRTtRQUNkLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDbkIsWUFBWSxDQUFDLElBQUksQ0FDWixNQUFNLENBQ0YsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNuRCxDQUFDO1FBQ0wsWUFBWSxDQUFDLElBQUksQ0FDYixPQUFPLE9BQU8sQ0FBQyxNQUFNLEtBQUssUUFBUSxHQUM5QixNQUFNLENBQ0YsT0FBTyxDQUFDLE1BQU0sRUFDYixNQUFNLENBQVksU0FBUyxDQUN4QixNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUN4QixNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FDM0IsQ0FDSixDQUFDLEdBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FDVCxNQUFNLENBQVksU0FBUyxDQUN4QixNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUN4QixNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FDM0IsQ0FBQyxFQUNELFlBQ0osQ0FDUixDQUFDO1FBRUQsTUFBTSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFFekIsVUFBVSxHQUFJLE1BQU0sQ0FBWSxTQUFTLENBQUMsTUFBTSxDQUFDO01BQ3JELENBQUMsTUFBTTtRQUNILElBQUksVUFBVSxDQUFDLE1BQU0sRUFDakIsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFakM7TUFDSjtJQUNKO0lBRUEsT0FBTyxPQUFPLE9BQU8sQ0FBQyxNQUFNLEtBQUssUUFBUSxHQUNyQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUNyQixZQUFZO0VBQ3BCO0VBRUEsT0FBTyxNQUFNO0FBQ2pCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxvQkFBb0IsR0FBRyxDQUNoQyxLQUFjLEVBQUUsUUFBUSxHQUFHLElBQUksS0FDdEI7RUFDVCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7SUFDeEQsSUFBSSxlQUF1QixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFbEQ7SUFDQSxlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDOztJQUU3RDtJQUNBLGVBQWUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUNyQyxzQ0FBc0MsRUFBRSxJQUM1QyxDQUFDO0lBRUQsSUFBSSxRQUFRLEVBQ1IsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFFbEQsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjO0lBQ3ZDO0lBQ0EsZUFBZSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQ3JDLElBQUksTUFBTSxDQUNOLFNBQVMsZ0JBQWdCLFdBQVcsZ0JBQWdCLEdBQUcsR0FDdkQsT0FDSixDQUFDLEVBQ0QsT0FDSixDQUFDO0lBQ0Q7SUFDQSxlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FDckMsSUFBSSxNQUFNLENBQ04sU0FBUyxnQkFBZ0IsYUFBYSxHQUN0QyxHQUFHLGdCQUFnQixRQUN2QixDQUFDLEVBQ0QsVUFDSixDQUFDO0lBQ0Q7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ1EsSUFBSSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQzVCLGNBQWMsZ0JBQWdCLFdBQVcsZ0JBQWdCLEVBQUUsR0FDM0QsT0FDSixDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztNQUNyQztNQUNBLGVBQWUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUN2RCxNQUFjLEVBQ2QsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsTUFBYyxLQUVkLEdBQUcsV0FBVyxJQUFJLFFBQVEsR0FBRyxHQUM3QixvQ0FBb0MsQ0FBQyxNQUFNLENBQy9DLENBQUMsTUFDQTtNQUNEO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7TUFDWSxlQUFlLEdBQUcscUJBQXFCO01BQ3ZDLE1BQU0sUUFBUSxHQUFHLENBQ2IsTUFBYyxFQUFFLFVBQWtCLEVBQUUsTUFBYyxLQUVsRCxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQ2xDLG9DQUFvQyxDQUFDLE1BQU0sQ0FBQztNQUVoRCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3JDO1FBQ0EsZUFBZSxHQUNYLGVBQWUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxNQUV0RCxlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FDckMsSUFBSSxNQUFNLENBQUMsWUFBWSxnQkFBZ0IsT0FBTyxDQUFDLEVBQy9DLFFBQ0osQ0FBQztJQUNUO0lBRUEsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztFQUN2RTtFQUVBLE9BQU8sRUFBRTtBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLGdCQUFnQixHQUFJLEtBQWMsSUFBYTtFQUN4RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQ3RELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUMvQiwyQkFBMkIsRUFDM0IsQ0FBQyxLQUFhLEVBQUUsTUFBZSxFQUFFLElBQWEsS0FBSztJQUMvQyxJQUFJLE1BQU0sRUFDTixNQUFNLEdBQ0YsTUFBTSxDQUNELFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUM1QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ1QsV0FBVyxDQUFDLENBQUMsR0FDbEIsR0FBRztJQUNYLE9BQ0ksQ0FBQyxNQUFNLElBQUksRUFBRSxJQUNiLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0VBRW5ELENBQ0osQ0FBQztFQUVMLE9BQU8sRUFBRTtBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sa0JBQWtCLEdBQUcsQ0FDOUIsZ0JBQXdCLEVBQUUsS0FBdUIsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsT0FBTyxLQUMzRDtFQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFlBQVksRUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQztFQUUzRCxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFDbEUsZ0JBQWdCLEdBQ1osT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ25CLGdCQUFnQixFQUFFO0lBQUMsUUFBUSxFQUFFO0VBQWdCLENBQ2pELENBQUM7RUFFVCxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUUxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUNqQyxnQkFBZ0IsR0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQzdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FDaEMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO0VBRW5DLE1BQU0sTUFBMkIsR0FDN0IsUUFBUSxDQUFJLGdCQUFnQixFQUFFO0lBQUMsS0FBSyxFQUFFO01BQUMsQ0FBQyxJQUFJLEdBQUc7SUFBSztFQUFDLENBQUMsQ0FBQztFQUUzRCxJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQ2pDLE9BQU8sTUFBTSxDQUFDLE1BQU07RUFFeEIsT0FBTyxJQUFJO0FBQ2YsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxvQkFBb0IsR0FBSSxLQUFjLElBQWE7RUFDNUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFO0lBQzlEO0lBQ0EsSUFBSSxlQUFlO0lBQ25CO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxZQUFZLENBQUM7O0lBRXRFO0lBQ0EsZUFBZSxHQUNYLGVBQWUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxDQUFDO0lBQzlEO0lBQ0EsZUFBZSxHQUNYLGVBQWUsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsU0FBUyxDQUFDOztJQUU3RDtJQUNBLE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FDMUIsMkJBQTJCLEVBQzNCLENBQ0ksTUFBYyxFQUFFLE1BQWMsRUFBRSxNQUFjLEVBQUUsTUFBYyxLQUU5RCxNQUFNLEdBQ04sQ0FDSyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxHQUNwQyxNQUFNLENBQUMsT0FBTyxDQUNWLHNCQUFzQixFQUN0QixDQUNJLE1BQWMsRUFBRSxNQUFjLEVBQUUsSUFBWSxLQUU1QyxHQUFHLE1BQU0sR0FBRyxHQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUNoRCxDQUFDLEdBQUcsTUFBTSxFQUNoQixJQUFJLENBQUMsQ0FDZixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDWjtFQUVBLE9BQU8sRUFBRTtBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLG9DQUFvQyxHQUFJLEtBQWEsSUFBYTtFQUMzRTtBQUNKO0FBQ0E7QUFDQTtFQUNJLE1BQU0sZUFBZSxHQUFHLHdCQUF3QjtFQUNoRCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQzNCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FDbEMsTUFBYyxFQUNkLFVBQWtCLEVBQ2xCLHlCQUFpQyxLQUVqQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQ3hDLHlCQUNKLENBQUM7RUFFTCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLHdCQUF3QixHQUFHLENBQ3BDLFFBQWdCLEVBQUUsY0FBYyxHQUFHLEVBQUUsS0FDNUI7RUFDVCxJQUFJLHFCQUFxQixHQUFHLEVBQUU7RUFDOUIsSUFBSSxjQUFjLEVBQ2QscUJBQXFCLEdBQUcsR0FBRyxjQUFjLEdBQUc7RUFDaEQsSUFBSSxFQUNBLFFBQVEsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsSUFDMUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUNsQyxFQUNHLFFBQVEsR0FBRyxxQkFBcUIsR0FBRyxRQUFRO0VBRS9DLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBYSxFQUFFLEtBQUssR0FBRyxHQUFHLEtBQUs7RUFDakQsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssRUFDckIsT0FBTyxLQUFLO0VBRWhCLE1BQU0sSUFBSSxHQUFHLEtBQUs7RUFDbEIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUk7QUFDekQsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
860
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3N0cmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAjIS91c3IvYmluL2VudiBiYWJlbC1ub2RlXG4vLyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbi8qKiBAbW9kdWxlIHN0cmluZyAqL1xuJ3VzZSBzdHJpY3QnXG4vKiAhXG4gICAgcmVnaW9uIGhlYWRlclxuICAgIFtQcm9qZWN0IHBhZ2VdKGh0dHBzOi8vdG9yYmVuLndlYnNpdGUvY2xpZW50bm9kZSlcblxuICAgIENvcHlyaWdodCBUb3JiZW4gU2lja2VydCAoaW5mb1tcIn5hdH5cIl10b3JiZW4ud2Vic2l0ZSkgMTYuMTIuMjAxMlxuXG4gICAgTGljZW5zZVxuICAgIC0tLS0tLS1cblxuICAgIFRoaXMgbGlicmFyeSB3cml0dGVuIGJ5IFRvcmJlbiBTaWNrZXJ0IHN0YW5kcyB1bmRlciBhIGNyZWF0aXZlIGNvbW1vbnNcbiAgICBuYW1pbmcgMy4wIHVucG9ydGVkIGxpY2Vuc2UuXG4gICAgU2VlIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvZGVlZC5kZVxuICAgIGVuZHJlZ2lvblxuKi9cbi8vIHJlZ2lvbiBpbXBvcnRzXG5pbXBvcnQge1xuICAgIENvbXBpbGF0aW9uUmVzdWx0LFxuICAgIENvbXBpbGVFeHByZXNzaW9uT3B0aW9ucyxcbiAgICBFdmFsdWF0ZUV4cHJlc3Npb25PcHRpb25zLFxuICAgIEV2YWx1YXRpb25SZXN1bHQsXG4gICAgTWFwcGluZyxcbiAgICBQbGFpbk9iamVjdCxcbiAgICBTdHJpbmdNYXJrT3B0aW9ucyxcbiAgICBUZW1wbGF0ZUZ1bmN0aW9uLFxuICAgIFF1ZXJ5UGFyYW1ldGVycyxcbiAgICBWYWx1ZU9mXG59IGZyb20gJy4vdHlwZSdcblxuaW1wb3J0IHtcbiAgICBBQkJSRVZJQVRJT05TLCBERUZBVUxUX0VOQ09ESU5HLCBTUEVDSUFMX1JFR0VYX1NFUVVFTkNFU1xufSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7Z2xvYmFsQ29udGV4dCwgTUFYSU1BTF9OVU1CRVJfT0ZfSVRFUkFUSU9OU30gZnJvbSAnLi9jb250ZXh0J1xuaW1wb3J0IHtpc0ZpbGVTeW5jLCBpbXBvcnRzfSBmcm9tICcuL2ZpbGVzeXN0ZW0nXG5pbXBvcnQge2RldGVybWluZVR5cGUsIHJlcHJlc2VudH0gZnJvbSAnLi9vYmplY3QnXG4vLyBlbmRyZWdpb25cbmV4cG9ydCBjb25zdCBLTk9XTl9ESVNBTExPV0VEX1ZBUklBQkxFX05BTUVTX0JVVF9PQkpFQ1RfS0VZUyA9IFtcbiAgICAnZGVmYXVsdCcsXG4gICAgJ2lmJywgJ2ZvcicsXG4gICAgJ2NsYXNzJywgJ2Z1bmN0aW9uJywgJ3JldHVybicsXG4gICAgJ2NvbnN0JywgJ2xldCcsICd2YXInXG5dXG5leHBvcnQgY29uc3QgUE9MWUZJTExfVEVNUExBVEVfU1RSSU5HUyA9IHt2YWx1ZTogZmFsc2V9XG4vLyBQYXJ0aWFsIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBzeW1ib2xzIHdoaWNoIHNob3VsZCBiZSBhbGxvd2VkIHdpdGhpbiBhXG4vLyB2YXJpYWJsZSBuYW1lIGV4Y2x1ZGluZyB0aGUgZmlyc3QgY2hhcmFjdGVyLlxuZXhwb3J0IGNvbnN0IEFMTE9XRURfVkFSSUFCTEVfU1lNQk9MUyA9ICcwLTlhLXpBLVpfJCdcbi8vIFBhcnRpYWwgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHN5bWJvbHMgd2hpY2ggc2hvdWxkIGJlIGFsbG93ZWQgYXNcbi8vIHN0YXJ0aW5nIGNoYXJhY3RlciBmb3IgYSB2YXJpYWJsZSBuYW1lLlxuZXhwb3J0IGNvbnN0IEFMTE9XRURfU1RBUlRJTkdfVkFSSUFCTEVfU1lNQk9MUyA9ICdhLXpBLVpfJCdcbmV4cG9ydCBjb25zdCBGSVhfRU5DT0RJTkdfRVJST1JfTUFQUElORyA9IFtcbiAgICBbJ8ODXFxcXHg4NCcsICfDhCddLFxuICAgIFsnw4NcXFxceDk2JywgJ8OWJ10sXG4gICAgWyfDg1xcXFx4OWMnLCAnw5wnXSxcbiAgICBbJ8ODwqQnLCAnw6QnXSxcbiAgICBbJ8ODwrYnLCAnw7YnXSxcbiAgICBbJ8ODwrwnLCAnw7wnXSxcblxuICAgIFsnXFxcXHg5NicsICctJ10sXG5cbiAgICBbJ8ODwqknLCAnw6knXSxcbiAgICBbJ8ODwqgnLCAnZSddLFxuXG4gICAgWyfDg8K0JywgJ28nXSxcblxuICAgIFsnw4MgJywgJ8OhJ10sXG4gICAgWyfDg8K4JywgJ8O4J10sXG5cbiAgICBbJ8ODXFxcXHg5ZicsICfDnyddLFxuICAgIFsnw4MnLCAnw58nXVxuXSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgQXN5bmNGdW5jdGlvbj1cbiAgICAvKlxuICAgICAgICBlc2xpbnQtZGlzYWJsZVxuICAgICAgICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgICovXG4gICAgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGFzeW5jIGZ1bmN0aW9uKCkge30pJykoKVxuICAgICAgICAuY29uc3RydWN0b3JcbiAgICAvKlxuICAgICAgICBlc2xpbnQtZW5hYmxlXG4gICAgICAgIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWwsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgKi9cblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEgZ2l2ZW4gc3RyaW5nIGludG8gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0ZWRcbiAqIHJlcHJlc2VudGF0aW9uLlxuICogQHBhcmFtIHZhbHVlIC0gU3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0gZXhjbHVkZVN5bWJvbHMgLSBTeW1ib2xzIG5vdCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBDb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZXNjYXBlUmVndWxhckV4cHJlc3Npb25zID0gKFxuICAgIHZhbHVlOiBzdHJpbmcsIGV4Y2x1ZGVTeW1ib2xzOiBBcnJheTxzdHJpbmc+ID0gW11cbik6IHN0cmluZyA9PiB7XG4gICAgLy8gTk9URTogVGhpcyBpcyBvbmx5IGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSAmJiAhU1BFQ0lBTF9SRUdFWF9TRVFVRU5DRVMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICByZXR1cm4gdmFsdWVcblxuICAgIC8vIFRoZSBlc2NhcGUgc2VxdWVuY2UgbXVzdCBhbHNvIGJlIGVzY2FwZWQ7IGJ1dCBhdCBmaXJzdC5cbiAgICBpZiAoIWV4Y2x1ZGVTeW1ib2xzLmluY2x1ZGVzKCdcXFxcJykpXG4gICAgICAgIHZhbHVlLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcblxuICAgIGZvciAoY29uc3QgcmVwbGFjZSBvZiBTUEVDSUFMX1JFR0VYX1NFUVVFTkNFUylcbiAgICAgICAgaWYgKCFleGNsdWRlU3ltYm9scy5pbmNsdWRlcyhyZXBsYWNlKSlcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKGBcXFxcJHtyZXBsYWNlfWAsICdnJyksIGBcXFxcJHtyZXBsYWNlfWApXG5cbiAgICByZXR1cm4gdmFsdWVcbn1cbi8qKlxuICogVHJhbnNsYXRlcyBhIGdpdmVuIG5hbWUgaW50byBhIHZhbGlkIEphdmFTY3JpcHQgb25lLlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBDb252ZXJ0ZWQgbmFtZSBpcyByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRUb1ZhbGlkVmFyaWFibGVOYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgaWYgKFsnY2xhc3MnLCAnZGVmYXVsdCddLmluY2x1ZGVzKG5hbWUpKVxuICAgICAgICByZXR1cm4gYF8ke25hbWV9YFxuXG4gICAgcmV0dXJuIG5hbWVcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBkaXNhbGxvd2VkIHN0YXJ0aW5nIGNoYXJhY3RlcnMuXG4gICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYF5bXiR7QUxMT1dFRF9TVEFSVElOR19WQVJJQUJMRV9TWU1CT0xTfV0rYCksICcnKVxuICAgICAgICAvLyBSZW1vdmUgYWxsIGRpc2FsbG93ZWQgY2hhcmFjdGVycyB3aXRoaW4gYSB2YXJpYWJsZSBuYW1lIGFuZCBtYWtlXG4gICAgICAgIC8vIGNvbnRpbnVpbmcgY2hhcmFjdGVyIHVwcGVyIGNhc2UuXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgW14ke0FMTE9XRURfVkFSSUFCTEVfU1lNQk9MU31dKyhbYS16QS1aXSlgLCAnZycpLFxuICAgICAgICAgICAgKF9mdWxsTWF0Y2g6IHN0cmluZywgZmlyc3RMZXR0ZXI6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgIGZpcnN0TGV0dGVyLnRvVXBwZXJDYXNlKClcbiAgICAgICAgKVxufVxuLy8gcmVnaW9uIHVybCBoYW5kbGluZVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgZW5jb2RpbmcgKmtleSogb3IgKnZhbHVlKiBwYXJ0cyBvZiBhIHF1ZXJ5XG4gKiBjb21wb25lbnQuIFdlIG5lZWQgYSBjdXN0b20gbWV0aG9kIGJlY2F1c2UgXCJlbmNvZGVVUklDb21wb25lbnQoKVwiIGlzIHRvb1xuICogYWdncmVzc2l2ZSBhbmQgZW5jb2RlcyBzdHVmZiB0aGF0IGRvZXNuJ3QgaGF2ZSB0byBiZSBlbmNvZGVkIHBlclxuICogXCJodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2OlwiLlxuICogQHBhcmFtIHVybCAtIFVSTCB0byBlbmNvZGUuXG4gKiBAcGFyYW0gZW5jb2RlU3BhY2VzIC0gSW5kaWNhdGVzIHdoZXRoZXIgZ2l2ZW4gdXJsIHNob3VsZCBlbmNvZGVcbiAqIHdoaXRlc3BhY2VzIGFzIFwiK1wiIG9yIFwiJTIwXCIuXG4gKiBAcmV0dXJucyBFbmNvZGVkIGdpdmVuIHVybC5cbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVSSUNvbXBvbmVudEV4dGVuZGVkID0gKFxuICAgIHVybDogc3RyaW5nLCBlbmNvZGVTcGFjZXMgPSBmYWxzZVxuKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHVybClcbiAgICAgICAgLnJlcGxhY2UoLyU0MC9naSwgJ0AnKVxuICAgICAgICAucmVwbGFjZSgvJTNBL2dpLCAnOicpXG4gICAgICAgIC5yZXBsYWNlKC8lMjQvZywgJyQnKVxuICAgICAgICAucmVwbGFjZSgvJTJDL2dpLCAnLCcpXG4gICAgICAgIC5yZXBsYWNlKC8lMjAvZywgZW5jb2RlU3BhY2VzID8gJyUyMCcgOiAnKycpXG59XG4vKipcbiAqIEFwcGVuZHMgYSBwYXRoIHNlbGVjdG9yIHRvIHRoZSBnaXZlbiBwYXRoIGlmIHRoZXJlIGlzbid0IG9uZSB5ZXQuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIGZvciBhcHBlbmRpbmcgYSBzZWxlY3Rvci5cbiAqIEBwYXJhbSBwYXRoU2VwYXJhdG9yIC0gVGhlIHNlbGVjdG9yIGZvciBhcHBlbmRpbmcgdG8gYSBwYXRoLlxuICogQHJldHVybnMgVGhlIGFwcGVuZGVkIHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRTZXBhcmF0b3JUb1BhdGggPSAoXG4gICAgcGF0aDogc3RyaW5nLCBwYXRoU2VwYXJhdG9yID0gJy8nXG4pOiBzdHJpbmcgPT4ge1xuICAgIHBhdGggPSBwYXRoLnRyaW0oKVxuXG4gICAgaWYgKHBhdGguc3Vic3RyaW5nKHBhdGgubGVuZ3RoIC0gMSkgIT09IHBhdGhTZXBhcmF0b3IgJiYgcGF0aC5sZW5ndGgpXG4gICAgICAgIHJldHVybiBwYXRoICsgcGF0aFNlcGFyYXRvclxuXG4gICAgcmV0dXJuIHBhdGhcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gcGF0aCBoYXMgZ2l2ZW4gcGF0aCBwcmVmaXguXG4gKiBAcGFyYW0gcHJlZml4IC0gUGF0aCBwcmVmaXggdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSBwYXRoIC0gUGF0aCB0byBzZWFyY2ggaW4uXG4gKiBAcGFyYW0gc2VwYXJhdG9yIC0gRGVsaW1pdGVyIHRvIHVzZSBpbiBhIHBhdGggKGRlZmF1bHQgaXMgdGhlIHBvc2l4XG4gKiBjb25mb3JtIHNsYXNoKS5cbiAqIEByZXR1cm5zIFZhbHVlIFwidHJ1ZVwiIGlmIGdpdmVuIHByZWZpeCBvY2N1cnMgYW5kIFwiZmFsc2VcIiBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQYXRoUHJlZml4ID0gKFxuICAgIHByZWZpeDogdW5rbm93biA9ICcvYWRtaW4nLFxuICAgIHBhdGg6IHN0cmluZyA9IGdsb2JhbENvbnRleHQubG9jYXRpb24/LnBhdGhuYW1lIHx8ICcnLFxuICAgIHNlcGFyYXRvciA9ICcvJ1xuKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHR5cGVvZiBwcmVmaXggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghcHJlZml4LmVuZHNXaXRoKHNlcGFyYXRvcikpXG4gICAgICAgICAgICBwcmVmaXggKz0gc2VwYXJhdG9yXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBhdGggPT09XG4gICAgICAgICAgICBwcmVmaXguc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGggLSBzZXBhcmF0b3IubGVuZ3RoKSB8fFxuICAgICAgICAgICAgcGF0aC5zdGFydHNXaXRoKHByZWZpeClcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxufVxuLyoqXG4gKiBFeHRyYWN0cyBkb21haW4gbmFtZSBmcm9tIGdpdmVuIHVybC4gSWYgbm8gZXhwbGljaXQgZG9tYWluIG5hbWUgZ2l2ZW5cbiAqIGN1cnJlbnQgZG9tYWluIG5hbWUgd2lsbCBiZSBhc3N1bWVkLiBJZiBubyBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50XG4gKiBkb21haW4gbmFtZSB3aWxsIGJlIGRldGVybWluZWQuXG4gKiBAcGFyYW0gdXJsIC0gVGhlIHVybCB0byBleHRyYWN0IGRvbWFpbiBmcm9tLlxuICogQHBhcmFtIGZhbGxiYWNrIC0gVGhlIGZhbGxiYWNrIGhvc3QgbmFtZSBpZiBubyBvbmUgZXhpdHMgaW4gZ2l2ZW4gdXJsXG4gKiAoZGVmYXVsdCBpcyBjdXJyZW50IGhvc3RuYW1lKS5cbiAqIEByZXR1cm5zIEV4dHJhY3RlZCBkb21haW4uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREb21haW5OYW1lID0gKFxuICAgIHVybDogc3RyaW5nID0gZ2xvYmFsQ29udGV4dC5sb2NhdGlvbj8uaHJlZiB8fCAnJyxcbiAgICBmYWxsYmFjazogc3RyaW5nID0gZ2xvYmFsQ29udGV4dC5sb2NhdGlvbj8uaG9zdG5hbWUgfHwgJydcbik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxzdHJpbmc+IHwgbnVsbCA9XG4gICAgICAgIC9eKFthLXpdKjo/XFwvXFwvKT8oW14vXSs/KSg/OjpbMC05XSspPyg/OlxcLy4qfCQpL2kuZXhlYyh1cmwpXG5cbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGggPiAyICYmIHJlc3VsdFsxXSAmJiByZXN1bHRbMl0pXG4gICAgICAgIHJldHVybiByZXN1bHRbMl1cblxuICAgIHJldHVybiBmYWxsYmFja1xufVxuLyoqXG4gKiBFeHRyYWN0cyBwb3J0IG51bWJlciBmcm9tIGdpdmVuIHVybC4gSWYgbm8gZXhwbGljaXQgcG9ydCBudW1iZXIgaXMgZ2l2ZW5cbiAqIGFuZCBubyBmYWxsYmFjayBpcyBkZWZpbmVkLCB0aGUgY3VycmVudCBwb3J0IG51bWJlciB3aWxsIGJlIGFzc3VtZWQgZm9yIGxvY2FsXG4gKiBsaW5rcy4gRm9yIGV4dGVybmFsIGxpbmtzIDgwIHdpbGwgYmUgYXNzdW1lZCBmb3IgaHR0cCBwcm90b2NvbHMgYW5kIDQ0M1xuICogZm9yIGh0dHBzIHByb3RvY29scy5cbiAqIEBwYXJhbSB1cmwgLSBUaGUgdXJsIHRvIGV4dHJhY3QgcG9ydCBmcm9tLlxuICogQHBhcmFtIGZhbGxiYWNrIC0gRmFsbGJhY2sgcG9ydCBudW1iZXIgaWYgbm8gZXhwbGljaXQgb25lIHdhcyBmb3VuZC5cbiAqIERlZmF1bHQgaXMgZGVyaXZlZCBmcm9tIHRoZSBjdXJyZW50IHByb3RvY29sIG5hbWUuXG4gKiBAcmV0dXJucyBFeHRyYWN0ZWQgcG9ydCBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQb3J0TnVtYmVyID0gKFxuICAgIHVybDogc3RyaW5nID0gZ2xvYmFsQ29udGV4dC5sb2NhdGlvbj8uaHJlZiB8fCAnJyxcbiAgICBmYWxsYmFjazogbnVsbCB8IG51bWJlciA9IGdsb2JhbENvbnRleHQubG9jYXRpb24/LnBvcnQgP1xuICAgICAgICBwYXJzZUludChnbG9iYWxDb250ZXh0LmxvY2F0aW9uLnBvcnQpIDpcbiAgICAgICAgbnVsbFxuKTogbnVsbCB8IG51bWJlciA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxzdHJpbmc+IHwgbnVsbCA9XG4gICAgICAgIC9eKD86W2Etel0qOj9cXC9cXC9bXi9dKz8pP1teL10rPzooWzAtOV0rKS9pLmV4ZWModXJsKVxuXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMSlcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJlc3VsdFsxXSwgMTApXG5cbiAgICBpZiAoZmFsbGJhY2sgIT09IG51bGwpXG4gICAgICAgIHJldHVybiBmYWxsYmFja1xuXG4gICAgaWYgKFxuICAgICAgICAvLyBOT1RFOiBXb3VsZCByZXN1bHQgaW4gYW4gZW5kbGVzcyBsb29wOlxuICAgICAgICAvLyBzZXJ2aWNlVVJMRXF1YWxzKHVybCwgLi4ucGFyYW1ldGVycykgJiZcbiAgICAgICAgZ2xvYmFsQ29udGV4dC5sb2NhdGlvbj8ucG9ydCAmJlxuICAgICAgICBwYXJzZUludChnbG9iYWxDb250ZXh0LmxvY2F0aW9uLnBvcnQsIDEwKVxuICAgIClcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGdsb2JhbENvbnRleHQubG9jYXRpb24ucG9ydCwgMTApXG5cbiAgICByZXR1cm4gZ2V0UHJvdG9jb2xOYW1lKHVybCkgPT09ICdodHRwcycgPyA0NDMgOiA4MFxufVxuLyoqXG4gKiBFeHRyYWN0cyBwcm90b2NvbCBuYW1lIGZyb20gZ2l2ZW4gdXJsLiBJZiBubyBleHBsaWNpdCB1cmwgaXMgZ2l2ZW4sXG4gKiB0aGUgY3VycmVudCBwcm90b2NvbCB3aWxsIGJlIGFzc3VtZWQuIElmIG5vIHBhcmFtZXRlciBpcyBnaXZlbiwgdGhlIGN1cnJlbnRcbiAqIHByb3RvY29sIG51bWJlciB3aWxsIGJlIGRldGVybWluZWQuXG4gKiBAcGFyYW0gdXJsIC0gVGhlIHVybCB0byBleHRyYWN0IHByb3RvY29sIGZyb20uXG4gKiBAcGFyYW0gZmFsbGJhY2sgLSBGYWxsYmFjayBwb3J0IHRvIHVzZSBpZiBubyBwcm90b2NvbCBleGlzdHMgaW4gZ2l2ZW5cbiAqIHVybCAoZGVmYXVsdCBpcyBjdXJyZW50IHByb3RvY29sKS5cbiAqIEByZXR1cm5zIEV4dHJhY3RlZCBwcm90b2NvbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByb3RvY29sTmFtZSA9IChcbiAgICB1cmw6IHN0cmluZyA9IGdsb2JhbENvbnRleHQubG9jYXRpb24/LmhyZWYgfHwgJycsXG4gICAgZmFsbGJhY2s6IHN0cmluZyA9IChcbiAgICAgICAgZ2xvYmFsQ29udGV4dC5sb2NhdGlvbj8ucHJvdG9jb2wgJiZcbiAgICAgICAgZ2xvYmFsQ29udGV4dC5sb2NhdGlvbi5wcm90b2NvbC5zdWJzdHJpbmcoXG4gICAgICAgICAgICAwLCBnbG9iYWxDb250ZXh0LmxvY2F0aW9uLnByb3RvY29sLmxlbmd0aCAtIDFcbiAgICAgICAgKSB8fFxuICAgICAgICAnJ1xuICAgIClcbik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxzdHJpbmc+IHwgbnVsbCA9IC9eKFthLXpdKyk6XFwvXFwvL2kuZXhlYyh1cmwpXG5cbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGggPiAxICYmIHJlc3VsdFsxXSlcbiAgICAgICAgcmV0dXJuIHJlc3VsdFsxXVxuXG4gICAgcmV0dXJuIGZhbGxiYWNrXG59XG4vKipcbiAqIFJlYWQgYSBwYWdlJ3MgR0VUIFVSTCB2YXJpYWJsZXMgYW5kIHJldHVybiB0aGVtIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5XG4gKiBhbmQgcHJlc2VydmVzIG9yZGVyaW5nLlxuICogQHBhcmFtIGtleVRvR2V0IC0gSWYgcHJvdmlkZWQgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgZm9yIGEgZ2l2ZW4ga2V5IGlzXG4gKiByZXR1cm5lZCBvciBmdWxsIG9iamVjdCBvdGhlcndpc2UuXG4gKiBAcGFyYW0gYWxsb3dEdXBsaWNhdGVzIC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gcmV0dXJuIGFycmF5cyBvZiB2YWx1ZXMgb3JcbiAqIHNpbmdsZSB2YWx1ZXMuIElmIHNldCB0byBcImZhbHNlXCIgKGRlZmF1bHQpIGxhc3QgdmFsdWVzIHdpbGwgb3ZlcndyaXRlXG4gKiBwcmVjZWRpbmcgdmFsdWVzLlxuICogQHBhcmFtIGdpdmVuSW5wdXQgLSBBbiBhbHRlcm5hdGl2ZSBpbnB1dCB0byB0aGUgdXJsIHNlYXJjaCBwYXJhbWV0ZXIuIElmXG4gKiBcIiNcIiBpcyBnaXZlbiwgdGhlIGNvbXBsZXRlIGN1cnJlbnQgaGFzaHRhZyB3aWxsIGJlIGludGVycHJldGVkIGFzIHVybCBhbmRcbiAqIHNlYXJjaCBwYXJhbWV0ZXIgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbSB0aGVyZS4gSWYgXCImXCIgaXMgZ2l2ZW4gYSBjbGFzc2ljYWxcbiAqIHNlYXJjaCBwYXJhbWV0ZXIsIGFuZCBoYXNoIHBhcmFtZXRlciB3aWxsIGJlIHRha2VuIGluIGFuIGFjY291bnQuIElmIGFcbiAqIHNlYXJjaCBzdHJpbmcgaXMgZ2l2ZW4sIHRoaXMgd2lsbCBiZSBhbmFseXplZC4gVGhlIGRlZmF1bHQgaXMgdG8gdGFrZSBhXG4gKiBnaXZlbiBzZWFyY2ggcGFydCBpbnRvIGFjY291bnQuXG4gKiBAcGFyYW0gc3ViRGVsaW1pdGVyIC0gRGVmaW5lcyB3aGljaCBzZXF1ZW5jZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mXG4gKiBwYXJhbWV0ZXIgaW4gYSBoYXNoIHBhcnQgb2YgdGhlIHVybC5cbiAqIEBwYXJhbSBoYXNoZWRQYXRoSW5kaWNhdG9yIC0gSWYgZGVmaW5lZCBhbmQgZ2l2ZW4gaGFzaCBzdGFydHMgd2l0aCB0aGlzXG4gKiBpbmRpY2F0b3IsIGdpdmVuIGhhc2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHBhdGggY29udGFpbmluZyBzZWFyY2ggYW5kXG4gKiBoYXNoIHBhcnRzLlxuICogQHBhcmFtIGdpdmVuU2VhcmNoIC0gU2VhcmNoIHBhcnQgdG8gdGFrZSBpbnRvIGFjY291bnQgZGVmYXVsdHMgdG9cbiAqIGN1cnJlbnQgdXJsIHNlYXJjaCBwYXJ0LlxuICogQHBhcmFtIGdpdmVuSGFzaCAtIEhhc2ggcGFydCB0byB0YWtlIGludG8gYWNjb3VudCBkZWZhdWx0cyB0byBjdXJyZW50XG4gKiB1cmwgaGFzaCBwYXJ0LlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY3VycmVudCBnZXQgYXJyYXkgb3IgcmVxdWVzdGVkIHZhbHVlLiBJZiB0aGUgcmVxdWVzdGVkXG4gKiBrZXkgZG9lc24ndCBleGlzdCwgXCJ1bmRlZmluZWRcIiBpcyByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFVSTFBhcmFtZXRlciA9IChcbiAgICBrZXlUb0dldDogbnVsbCB8IHN0cmluZyA9IG51bGwsXG4gICAgYWxsb3dEdXBsaWNhdGVzID0gZmFsc2UsXG4gICAgZ2l2ZW5JbnB1dDogbnVsbCB8IHN0cmluZyA9IG51bGwsXG4gICAgc3ViRGVsaW1pdGVyID0gJyQnLFxuICAgIGhhc2hlZFBhdGhJbmRpY2F0b3IgPSAnIScsXG4gICAgZ2l2ZW5TZWFyY2g6IG51bGwgfCBzdHJpbmcgPSBudWxsLFxuICAgIGdpdmVuSGFzaDogbnVsbCB8IHN0cmluZyA9IGdsb2JhbENvbnRleHQubG9jYXRpb24/Lmhhc2ggPz8gJydcbik6IEFycmF5PHN0cmluZz4gfCBudWxsIHwgUXVlcnlQYXJhbWV0ZXJzIHwgc3RyaW5nID0+IHtcbiAgICAvLyByZWdpb24gc2V0IHNlYXJjaCBhbmQgaGFzaFxuICAgIGxldCBoYXNoOiBzdHJpbmcgPSBnaXZlbkhhc2ggPz8gJyMnXG4gICAgbGV0IHNlYXJjaCA9ICcnXG4gICAgaWYgKGdpdmVuU2VhcmNoKVxuICAgICAgICBzZWFyY2ggPSBnaXZlblNlYXJjaFxuICAgIGVsc2UgaWYgKGhhc2hlZFBhdGhJbmRpY2F0b3IgJiYgaGFzaC5zdGFydHNXaXRoKGhhc2hlZFBhdGhJbmRpY2F0b3IpKSB7XG4gICAgICAgIGNvbnN0IHN1Ykhhc2hTdGFydEluZGV4OiBudW1iZXIgPSBoYXNoLmluZGV4T2YoJyMnKVxuICAgICAgICBsZXQgcGF0aEFuZFNlYXJjaDogc3RyaW5nXG4gICAgICAgIGlmIChzdWJIYXNoU3RhcnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHBhdGhBbmRTZWFyY2ggPSBoYXNoLnN1YnN0cmluZyhoYXNoZWRQYXRoSW5kaWNhdG9yLmxlbmd0aClcbiAgICAgICAgICAgIGhhc2ggPSAnJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0aEFuZFNlYXJjaCA9IGhhc2guc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgIGhhc2hlZFBhdGhJbmRpY2F0b3IubGVuZ3RoLCBzdWJIYXNoU3RhcnRJbmRleFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaGFzaCA9IGhhc2guc3Vic3RyaW5nKHN1Ykhhc2hTdGFydEluZGV4KVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YlNlYXJjaFN0YXJ0SW5kZXg6IG51bWJlciA9IHBhdGhBbmRTZWFyY2guaW5kZXhPZignPycpXG4gICAgICAgIGlmIChzdWJTZWFyY2hTdGFydEluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgIHNlYXJjaCA9IHBhdGhBbmRTZWFyY2guc3Vic3RyaW5nKHN1YlNlYXJjaFN0YXJ0SW5kZXgpXG4gICAgfSBlbHNlIGlmIChnbG9iYWxDb250ZXh0LmxvY2F0aW9uKVxuICAgICAgICBzZWFyY2ggPSBnbG9iYWxDb250ZXh0LmxvY2F0aW9uLnNlYXJjaCB8fCAnJ1xuICAgIGxldCBpbnB1dDogc3RyaW5nID0gZ2l2ZW5JbnB1dCA/IGdpdmVuSW5wdXQgOiBzZWFyY2hcbiAgICAvLyBlbmRyZWdpb25cbiAgICAvLyByZWdpb24gZGV0ZXJtaW5lIGRhdGEgZnJvbSBzZWFyY2ggYW5kIGhhc2ggaWYgc3BlY2lmaWVkXG4gICAgY29uc3QgYm90aDogYm9vbGVhbiA9IGlucHV0ID09PSAnJidcbiAgICBpZiAoYm90aCB8fCBpbnB1dCA9PT0gJyMnKSB7XG4gICAgICAgIGxldCBkZWNvZGVkSGFzaCA9ICcnXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZWNvZGVkSGFzaCA9IGRlY29kZVVSSUNvbXBvbmVudChoYXNoKVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHJlZ2FyZGxlc3Mgb2YgYW4gZXJyb3IuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3ViRGVsaW1pdGVySW5kZXg6IG51bWJlciA9IGRlY29kZWRIYXNoLmluZGV4T2Yoc3ViRGVsaW1pdGVyKVxuICAgICAgICBpZiAoc3ViRGVsaW1pdGVySW5kZXggPT09IC0xKVxuICAgICAgICAgICAgaW5wdXQgPSAnJ1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0ID0gZGVjb2RlZEhhc2guc3Vic3RyaW5nKHN1YkRlbGltaXRlckluZGV4KVxuICAgICAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoc3ViRGVsaW1pdGVyKSlcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZyhzdWJEZWxpbWl0ZXIubGVuZ3RoKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKCc/JykpXG4gICAgICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKCc/Jy5sZW5ndGgpXG4gICAgbGV0IGRhdGE6IEFycmF5PHN0cmluZz4gPSBpbnB1dCA/IGlucHV0LnNwbGl0KCcmJykgOiBbXVxuICAgIHNlYXJjaCA9IHNlYXJjaC5zdWJzdHJpbmcoJz8nLmxlbmd0aClcbiAgICBpZiAoYm90aCAmJiBzZWFyY2gpXG4gICAgICAgIGRhdGEgPSBkYXRhLmNvbmNhdChzZWFyY2guc3BsaXQoJyYnKSlcbiAgICAvLyBlbmRyZWdpb25cbiAgICAvLyByZWdpb24gY29uc3RydWN0IGRhdGEgc3RydWN0dXJlXG4gICAgY29uc3QgcGFyYW1ldGVyczogUXVlcnlQYXJhbWV0ZXJzID0gW10gYXMgdW5rbm93biBhcyBRdWVyeVBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGtleVZhbHVlUGFpcjogQXJyYXk8c3RyaW5nPiA9IHZhbHVlLnNwbGl0KCc9JylcbiAgICAgICAgbGV0IGtleTogc3RyaW5nXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVQYWlyWzBdKVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGtleSA9ICcnXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleVZhbHVlUGFpclsxXSlcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICAgIH1cblxuICAgICAgICBwYXJhbWV0ZXJzLnB1c2goa2V5KVxuICAgICAgICBpZiAoYWxsb3dEdXBsaWNhdGVzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbWV0ZXJzLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzW2tleV0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKHBhcmFtZXRlcnNba2V5XSBhcyBBcnJheTxzdHJpbmc+KS5wdXNoKHZhbHVlKVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNba2V5XSA9IFt2YWx1ZV1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFyYW1ldGVyc1trZXldID0gdmFsdWVcbiAgICB9XG4gICAgLy8gZW5kcmVnaW9uXG5cbiAgICBpZiAoa2V5VG9HZXQpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbWV0ZXJzLCBrZXlUb0dldCkpXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyc1trZXlUb0dldF1cblxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbWV0ZXJzXG59XG4vKipcbiAqIENoZWNrcyBpZiBnaXZlbiB1cmwgcG9pbnRzIHRvIGFub3RoZXIgXCJzZXJ2aWNlXCIgdGhhbiB0aGUgc2Vjb25kIGdpdmVuIHVybC5cbiAqIElmIG5vIHNlY29uZCBnaXZlbiB1cmwgaXMgcHJvdmlkZWQsIHRoZSBjdXJyZW50IHVybCB3aWxsIGJlIGFzc3VtZWQuXG4gKiBAcGFyYW0gdXJsIC0gVVJMIHRvIGNoZWNrIGFnYWluc3Qgc2Vjb25kIHVybC5cbiAqIEBwYXJhbSByZWZlcmVuY2VVUkwgLSBVUkwgdG8gY2hlY2sgYWdhaW5zdCBmaXJzdCB1cmwuXG4gKiBAcmV0dXJucyBSZXR1cm5zIFwidHJ1ZVwiIGlmIGdpdmVuIGZpcnN0IHVybCBoYXMgc2FtZSBkb21haW4gYXMgZ2l2ZW5cbiAqIHNlY29uZCAob3IgY3VycmVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXJ2aWNlVVJMRXF1YWxzID0gKFxuICAgIHVybDogc3RyaW5nLCByZWZlcmVuY2VVUkw6IHN0cmluZyA9IGdsb2JhbENvbnRleHQubG9jYXRpb24/LmhyZWYgfHwgJydcbik6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGRvbWFpbjogc3RyaW5nID0gZ2V0RG9tYWluTmFtZSh1cmwsICcnKVxuICAgIGNvbnN0IHByb3RvY29sOiBzdHJpbmcgPSBnZXRQcm90b2NvbE5hbWUodXJsLCAnJylcbiAgICBjb25zdCBwb3J0OiBudWxsIHwgbnVtYmVyID0gZ2V0UG9ydE51bWJlcih1cmwpXG5cbiAgICByZXR1cm4gKFxuICAgICAgICAoZG9tYWluID09PSAnJyB8fCBkb21haW4gPT09IGdldERvbWFpbk5hbWUocmVmZXJlbmNlVVJMKSkgJiZcbiAgICAgICAgKHByb3RvY29sID09PSAnJyB8fCBwcm90b2NvbCA9PT0gZ2V0UHJvdG9jb2xOYW1lKHJlZmVyZW5jZVVSTCkpICYmXG4gICAgICAgIChwb3J0ID09PSBudWxsIHx8IHBvcnQgPT09IGdldFBvcnROdW1iZXIocmVmZXJlbmNlVVJMKSlcbiAgICApXG59XG4vKipcbiAqIE5vcm1hbGl6ZWQgZ2l2ZW4gd2Vic2l0ZSB1cmwuXG4gKiBAcGFyYW0gZ2l2ZW5VUkwgLSBVbmlmb3JtIHJlc291cmNlIGxvY2F0b3IgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgTm9ybWFsaXplZCByZXN1bHQuXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVVUkwgPSAoZ2l2ZW5VUkw6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0eXBlb2YgZ2l2ZW5VUkwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGdpdmVuVVJMLnJlcGxhY2UoL146P1xcLysvLCAnJykucmVwbGFjZSgvXFwvKyQvLCAnJykudHJpbSgpXG5cbiAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCdodHRwJykpXG4gICAgICAgICAgICByZXR1cm4gdXJsXG5cbiAgICAgICAgcmV0dXJuIGBodHRwOi8vJHt1cmx9YFxuICAgIH1cblxuICAgIHJldHVybiAnJ1xufVxuLyoqXG4gKiBSZXByZXNlbnRzIGdpdmVuIHdlYnNpdGUgdXJsLlxuICogQHBhcmFtIHVybCAtIFVuaWZvcm0gcmVzb3VyY2UgbG9jYXRvciB0byByZXByZXNlbnQuXG4gKiBAcmV0dXJucyBSZXByZXNlbnRlZCByZXN1bHQuXG4gKi9cbmV4cG9ydCBjb25zdCByZXByZXNlbnRVUkwgPSAodXJsOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKGh0dHBzPyk/Oj9cXC8rLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvKyQvLCAnJylcbiAgICAgICAgICAgIC50cmltKClcblxuICAgIHJldHVybiAnJ1xufVxuLy8gZW5kcmVnaW9uXG4vKipcbiAqIENvbnZlcnRzIGEgY2FtZWwtY2FzZWQgc3RyaW5nIHRvIGl0cyBkZWxpbWl0ZWQgc3RyaW5nIHZlcnNpb24uXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RyaW5nIHRvIGZvcm1hdC5cbiAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBEZWZpbmVzIGRlbGltaXRlciBzdHJpbmcuXG4gKiBAcGFyYW0gYWJicmV2aWF0aW9ucyAtIENvbGxlY3Rpb24gb2Ygc2hvcnRjdXQgd29yZHMgdG8gcmVwcmVzZW50IHVwcGVyY2FzZWQuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNhbWVsQ2FzZVRvRGVsaW1pdGVkID0gKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZGVsaW1pdGVyID0gJy0nLFxuICAgIGFiYnJldmlhdGlvbnM6IEFycmF5PHN0cmluZz4gfCBudWxsID0gbnVsbFxuKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIWFiYnJldmlhdGlvbnMpXG4gICAgICAgIGFiYnJldmlhdGlvbnMgPSBBQkJSRVZJQVRJT05TXG5cbiAgICBjb25zdCBlc2NhcGVkRGVsaW1pdGVyOiBzdHJpbmcgPSBtYXNrRm9yUmVndWxhckV4cHJlc3Npb24oZGVsaW1pdGVyKVxuXG4gICAgaWYgKGFiYnJldmlhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBhYmJyZXZpYXRpb25QYXR0ZXJuID0gJydcbiAgICAgICAgZm9yIChjb25zdCBhYmJyZXZpYXRpb24gb2YgYWJicmV2aWF0aW9ucykge1xuICAgICAgICAgICAgaWYgKGFiYnJldmlhdGlvblBhdHRlcm4pXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9uUGF0dGVybiArPSAnfCdcbiAgICAgICAgICAgIGFiYnJldmlhdGlvblBhdHRlcm4gKz0gYWJicmV2aWF0aW9uLnRvVXBwZXJDYXNlKClcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgYCgke2FiYnJldmlhdGlvblBhdHRlcm59KSgke2FiYnJldmlhdGlvblBhdHRlcm59KWAsICdnJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGAkMSR7ZGVsaW1pdGVyfSQyYFxuICAgICAgICApXG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKFxuICAgICAgICBuZXcgUmVnRXhwKGAoW14ke2VzY2FwZWREZWxpbWl0ZXJ9XSkoW0EtWl1bYS16XSspYCwgJ2cnKSxcbiAgICAgICAgYCQxJHtkZWxpbWl0ZXJ9JDJgXG4gICAgKVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbYS16MC05XSkoW0EtWl0pJywgJ2cnKSwgYCQxJHtkZWxpbWl0ZXJ9JDJgKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxufVxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyB0byBpdHMgY2FwaXRhbGl6ZWQgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gc3RyaW5nIC0gVGhlIHN0cmluZyB0byBmb3JtYXQuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNhcGl0YWxpemUgPSAoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc3Vic3RyaW5nKDEpXG59XG4vKipcbiAqIENvbXByZXNzZXMgZ2l2ZW4gc3R5bGUgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHN0eWxlVmFsdWUgLSBTdHlsZSB2YWx1ZSB0byBjb21wcmVzcy5cbiAqIEByZXR1cm5zIFRoZSBjb21wcmVzc2VkIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgY29tcHJlc3NTdHlsZVZhbHVlID0gKHN0eWxlVmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIHN0eWxlVmFsdWVcbiAgICAgICAgLnJlcGxhY2UoLyAqKFs6O10pICovZywgJyQxJylcbiAgICAgICAgLnJlcGxhY2UoLyArL2csICcgJylcbiAgICAgICAgLnJlcGxhY2UoL147Ky8sICcnKVxuICAgICAgICAucmVwbGFjZSgvOyskLywgJycpXG4gICAgICAgIC50cmltKClcbn1cbi8qKlxuICogRGVjb2RlcyBhbGwgaHRtbCBzeW1ib2xzIGluIHRleHQgbm9kZXMgaW4gYSBnaXZlbiBodG1sIHN0cmluZy5cbiAqIEBwYXJhbSBodG1sU3RyaW5nIC0gSFRNTCBzdHJpbmcgdG8gZGVjb2RlLlxuICogQHJldHVybnMgRGVjb2RlZCBodG1sIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlY29kZUhUTUxFbnRpdGllcyA9IChodG1sU3RyaW5nOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nID0+IHtcbiAgICBpZiAoZ2xvYmFsQ29udGV4dC5kb2N1bWVudCkge1xuICAgICAgICBjb25zdCB0ZXh0YXJlYURvbU5vZGUgPVxuICAgICAgICAgICAgZ2xvYmFsQ29udGV4dC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpXG4gICAgICAgIHRleHRhcmVhRG9tTm9kZS5pbm5lckhUTUwgPSBodG1sU3RyaW5nXG5cbiAgICAgICAgcmV0dXJuIHRleHRhcmVhRG9tTm9kZS52YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG59XG4vKipcbiAqIENvbnZlcnRzIGEgZGVsaW1pdGVkIHN0cmluZyB0byBpdHMgY2FtZWwgY2FzZSByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gZm9ybWF0LlxuICogQHBhcmFtIGRlbGltaXRlciAtIERlbGltaXRlciBzdHJpbmcgdG8gdXNlLlxuICogQHBhcmFtIGFiYnJldmlhdGlvbnMgLSBDb2xsZWN0aW9uIG9mIHNob3J0Y3V0IHdvcmRzIHRvIHJlcHJlc2VudCB1cHBlcmNhc2VkLlxuICogQHBhcmFtIHByZXNlcnZlV3JvbmdGb3JtYXR0ZWRBYmJyZXZpYXRpb25zIC0gSWYgc2V0IHRvIFwiVHJ1ZVwiIHdyb25nXG4gKiBmb3JtYXR0ZWQgY2FtZWwgY2FzZSBhYmJyZXZpYXRpb25zIHdpbGwgYmUgaWdub3JlZC5cbiAqIEBwYXJhbSByZW1vdmVNdWx0aXBsZURlbGltaXRlciAtIEluZGljYXRlcyB3aGV0aGVyIGEgc2VyaWVzIG9mIGRlbGltaXRlclxuICogc2hvdWxkIGJlIGNvbnNvbGlkYXRlZC5cbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZGVsaW1pdGVkVG9DYW1lbENhc2UgPSAoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBkZWxpbWl0ZXIgPSAnLScsXG4gICAgYWJicmV2aWF0aW9uczogQXJyYXk8c3RyaW5nPiB8IG51bGwgPSBudWxsLFxuICAgIHByZXNlcnZlV3JvbmdGb3JtYXR0ZWRBYmJyZXZpYXRpb25zID0gZmFsc2UsXG4gICAgcmVtb3ZlTXVsdGlwbGVEZWxpbWl0ZXIgPSBmYWxzZVxuKTogc3RyaW5nID0+IHtcbiAgICBsZXQgZXNjYXBlZERlbGltaXRlcjogc3RyaW5nID0gbWFza0ZvclJlZ3VsYXJFeHByZXNzaW9uKGRlbGltaXRlcilcblxuICAgIGlmICghYWJicmV2aWF0aW9ucylcbiAgICAgICAgYWJicmV2aWF0aW9ucyA9IEFCQlJFVklBVElPTlNcbiAgICBsZXQgYWJicmV2aWF0aW9uUGF0dGVybjogc3RyaW5nXG4gICAgaWYgKHByZXNlcnZlV3JvbmdGb3JtYXR0ZWRBYmJyZXZpYXRpb25zKVxuICAgICAgICBhYmJyZXZpYXRpb25QYXR0ZXJuID0gQUJCUkVWSUFUSU9OUy5qb2luKCd8JylcbiAgICBlbHNlIHtcbiAgICAgICAgYWJicmV2aWF0aW9uUGF0dGVybiA9ICcnXG4gICAgICAgIGZvciAoY29uc3QgYWJicmV2aWF0aW9uIG9mIGFiYnJldmlhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChhYmJyZXZpYXRpb25QYXR0ZXJuKVxuICAgICAgICAgICAgICAgIGFiYnJldmlhdGlvblBhdHRlcm4gKz0gJ3wnXG4gICAgICAgICAgICBhYmJyZXZpYXRpb25QYXR0ZXJuICs9XG4gICAgICAgICAgICAgICAgYCR7Y2FwaXRhbGl6ZShhYmJyZXZpYXRpb24pfXwke2FiYnJldmlhdGlvbn1gXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdHJpbmdTdGFydHNXaXRoRGVsaW1pdGVyOiBib29sZWFuID0gdmFsdWUuc3RhcnRzV2l0aChkZWxpbWl0ZXIpXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGhEZWxpbWl0ZXIpXG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKGRlbGltaXRlci5sZW5ndGgpXG5cbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXG4gICAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgICAgICBgKCR7ZXNjYXBlZERlbGltaXRlcn0pKCR7YWJicmV2aWF0aW9uUGF0dGVybn0pYCArXG4gICAgICAgICAgICBgKCR7ZXNjYXBlZERlbGltaXRlcn18JClgLFxuICAgICAgICAgICAgJ2cnXG4gICAgICAgICksXG4gICAgICAgIChcbiAgICAgICAgICAgIF9mdWxsTWF0Y2g6IHN0cmluZyxcbiAgICAgICAgICAgIGJlZm9yZTogc3RyaW5nLFxuICAgICAgICAgICAgYWJicmV2aWF0aW9uOiBzdHJpbmcsXG4gICAgICAgICAgICBhZnRlcjogc3RyaW5nXG4gICAgICAgICk6IHN0cmluZyA9PiBiZWZvcmUgKyBhYmJyZXZpYXRpb24udG9VcHBlckNhc2UoKSArIGFmdGVyXG4gICAgKVxuXG4gICAgaWYgKHJlbW92ZU11bHRpcGxlRGVsaW1pdGVyKVxuICAgICAgICBlc2NhcGVkRGVsaW1pdGVyID0gYCg/OiR7ZXNjYXBlZERlbGltaXRlcn0pK2BcblxuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShcbiAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVkRGVsaW1pdGVyfShbYS16QS1aMC05XSlgLCAnZycpLFxuICAgICAgICAoX2Z1bGxNYXRjaDogc3RyaW5nLCBmaXJzdExldHRlcjogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgICAgICAgICBmaXJzdExldHRlci50b1VwcGVyQ2FzZSgpXG4gICAgKVxuXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGhEZWxpbWl0ZXIpXG4gICAgICAgIHZhbHVlID0gZGVsaW1pdGVyICsgdmFsdWVcblxuICAgIHJldHVybiB2YWx1ZVxufVxuLyoqXG4gKiBDb21waWxlcyBhIGdpdmVuIHN0cmluZyBhcyBhbiBleHByZXNzaW9uIHdpdGggZ2l2ZW4gc2NvcGUgbmFtZXMuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBzdHJpbmcgdG8gaW50ZXJwcmV0LlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucyAtIEV4cHJlc3Npb24gb3B0aW9ucy5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuc2NvcGUgLSBTY29wZSB0byBleHRyYWN0IG5hbWVzIGZyb20uXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLmV4ZWN1dGUgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBleGVjdXRlIG9yIGV2YWx1YXRlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5yZW1vdmVHbG9iYWxTY29wZSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHNoYWRvdyBnbG9iYWxcbiAqIHNjb3BlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5iaW5kaW5nIC0gT2JqZWN0IHRvIGFwcGx5IGFzIFwidGhpc1wiIGluIGV2YWx1YXRpb24gc2NvcGUuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLmFzeW5jIC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gY29tcGlsZSBhbiBhc3luYyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIE9iamVjdCBvZiBwcmVwYXJlZCBzY29wZSBuYW1lIG1hcHBpbmdzIGFuZCBjb21waWxlZCBmdW5jdGlvbiBvclxuICogZXJyb3Igc3RyaW5nIG1lc3NhZ2UgaWYgZ2l2ZW4gZXhwcmVzc2lvbiBjb3VsZG4ndCBiZSBjb21waWxlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBpbGUgPSA8VCA9IHN0cmluZywgTiBleHRlbmRzIEFycmF5PHN0cmluZz4gPSBBcnJheTxzdHJpbmc+PihcbiAgICBleHByZXNzaW9uOiBzdHJpbmcsXG4gICAgZ2l2ZW5PcHRpb25zOiBQYXJ0aWFsPENvbXBpbGVFeHByZXNzaW9uT3B0aW9uczxOPj4gPSB7fVxuKTogQ29tcGlsYXRpb25SZXN1bHQ8VCwgTj4gPT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IENvbXBpbGVFeHByZXNzaW9uT3B0aW9uczxOPiA9IHtcbiAgICAgICAgc2NvcGU6IFtdIGFzIHVua25vd24gYXMgTixcbiAgICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgICBleGVjdXRlOiBmYWxzZSxcbiAgICAgICAgcmVtb3ZlR2xvYmFsU2NvcGU6IHRydWUsXG4gICAgICAgIGJpbmRpbmc6IHt9LFxuICAgICAgICAuLi5naXZlbk9wdGlvbnNcbiAgICB9XG4gICAgLypcbiAgICAgICAgTk9URTogV2UgZG8gdGhpcyBnbG9iYWwgdmFyaWFibGUgbmFtZSBkZXRlcm1pbmluZyBhcyBjbG9zZSBhcyBwb3NzaWJsZVxuICAgICAgICB0byB0aGUgY29tcGlsaW5nIHN0ZXAgdG8gY292ZXIgYXMgbXVjaCBhcyBwb3NzaWJsZSBnbG9iYWwgaW50cm9kdWNlc1xuICAgICAgICB2YXJpYWJsZXMuXG4gICAgKi9cbiAgICBjb25zdCBnbG9iYWxOYW1lcyA9IE9iamVjdC5rZXlzKGdsb2JhbFRoaXMpXG4gICAgICAgIC5jb25jYXQoJ2dsb2JhbFRoaXMnKVxuICAgICAgICAuZmlsdGVyKChuYW1lKSA9PlxuICAgICAgICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICBgXlske0FMTE9XRURfU1RBUlRJTkdfVkFSSUFCTEVfU1lNQk9MU31dYCArXG4gICAgICAgICAgICAgICAgYFske0FMTE9XRURfVkFSSUFCTEVfU1lNQk9MU31dKiRgXG4gICAgICAgICAgICApLnRlc3QobmFtZSkgJiZcbiAgICAgICAgICAgICFLTk9XTl9ESVNBTExPV0VEX1ZBUklBQkxFX05BTUVTX0JVVF9PQkpFQ1RfS0VZU1xuICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhuYW1lKVxuICAgICAgICApXG4gICAgY29uc3QgcmVzdWx0OiBDb21waWxhdGlvblJlc3VsdDxULCBOPiA9IHtcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGdsb2JhbE5hbWVzOiBnbG9iYWxOYW1lcyxcbiAgICAgICAgZ2xvYmFsTmFtZXNVbmRlZmluZWRMaXN0OiBnbG9iYWxOYW1lcy5tYXAoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICAgICAgb3JpZ2luYWxTY29wZU5hbWVzOiAoXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KG9wdGlvbnMuc2NvcGUpID9cbiAgICAgICAgICAgICAgICBvcHRpb25zLnNjb3BlIDpcbiAgICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5zY29wZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5zY29wZV0gOlxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zLnNjb3BlKVxuICAgICAgICApIGFzIE4sXG4gICAgICAgIHNjb3BlTmFtZU1hcHBpbmc6IHt9IGFzIFJlY29yZDxOW251bWJlcl0sIHN0cmluZz4sXG4gICAgICAgIHNjb3BlTmFtZXM6IFtdLFxuICAgICAgICB0ZW1wbGF0ZUZ1bmN0aW9uOiAoKTogVCA9PiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdC5vcmlnaW5hbFNjb3BlTmFtZXMpIHtcbiAgICAgICAgY29uc3QgbmV3TmFtZTogc3RyaW5nID0gY29udmVydFRvVmFsaWRWYXJpYWJsZU5hbWUobmFtZSlcbiAgICAgICAgcmVzdWx0LnNjb3BlTmFtZU1hcHBpbmdbbmFtZSBhcyBOW251bWJlcl1dID0gbmV3TmFtZVxuICAgICAgICByZXN1bHQuc2NvcGVOYW1lcy5wdXNoKG5ld05hbWUpXG4gICAgfVxuICAgIC8vIHJlZ2lvbiB0cnkgdG8gcG9seWZpbGwgdGVtcGxhdGUgc3RyaW5nIGxpdGVyYWxzIGZvciBvbGRlciBlbmdpbmVzXG4gICAgaWYgKFBPTFlGSUxMX1RFTVBMQVRFX1NUUklOR1MudmFsdWUpXG4gICAgICAgIGlmICgoKFxuICAgICAgICAgICAgZ2xvYmFsQ29udGV4dCBhcyBNYXBwaW5nPHVua25vd24+XG4gICAgICAgICkuQmFiZWwgYXMgTWFwcGluZzx1bmtub3duPiB8IHVuZGVmaW5lZCk/LnRyYW5zZm9ybSlcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSAoXG4gICAgICAgICAgICAgICAgKChnbG9iYWxDb250ZXh0IGFzIE1hcHBpbmc8dW5rbm93bj4pLkJhYmVsIGFzIE1hcHBpbmc8dW5rbm93bj4pXG4gICAgICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICgodmFsdWU6IHN0cmluZywgb3B0aW9uczogTWFwcGluZzx1bmtub3duPikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29kZTogc3RyaW5nfSlcbiAgICAgICAgICAgICkoXG4gICAgICAgICAgICAgICAgYCgke2V4cHJlc3Npb259KWAsXG4gICAgICAgICAgICAgICAge3BsdWdpbnM6IFsndHJhbnNmb3JtLXRlbXBsYXRlLWxpdGVyYWxzJ119XG4gICAgICAgICAgICApLmNvZGVcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICBleHByZXNzaW9uLnN0YXJ0c1dpdGgoJ2AnKSAmJiBleHByZXNzaW9uLmVuZHNXaXRoKCdgJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBlc2NhcGVNYXJrZXIgPSAnIyMjIydcbiAgICAgICAgICAgIC8vIENvbnZlcnQgdGVtcGxhdGUgc3RyaW5nIGludG8gbGVnYWN5IHN0cmluZyBjb25jYXRlbmF0aW9ucy5cbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgLy8gTWFyayBzaW1wbGUgZXNjYXBlIHNlcXVlbmNlcy5cbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFxcJC9nLCBlc2NhcGVNYXJrZXIpXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIGF2b2lkYWJsZSB0ZW1wbGF0ZSBleHByZXNzaW9uOiBVc2UgcmF3IGNvZGUuXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL15gXFwkXFx7KFtcXHNcXFNdKyl9YCQvLCAnU3RyaW5nKCQxKScpXG4gICAgICAgICAgICAgICAgLy8gVXNlIHBsYWluIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMuXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL15gKFteJ10rKWAkLywgYCckMSdgKVxuICAgICAgICAgICAgICAgIC8vIFVzZSBwbGFpbiBzdHJpbmcgd2l0aCBkb3VibGUgcXVvdGVzLlxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eYChbXlwiXSspYCQvLCAnXCIkMVwiJylcbiAgICAgICAgICAgIC8vIFVzZSBzaW5nbGUgcXVvdGVzIGFuZCBob3BlIChqdXN0IGEgaGV1cmlzdGljKS5cbiAgICAgICAgICAgIGNvbnN0IHF1b3RlOiBzdHJpbmcgPVxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uY2hhckF0KDApID09PSAnYCcgPyBgJ2AgOiBleHByZXNzaW9uLmNoYXJBdCgwKVxuICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGEgc2ltcGxlIHBsYWNlaG9sZGVyLlxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IFJlcGxhY2UgY29tcGxldGUgYnJhY2tldCBwYWlycy5cbiAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgL1xcJFxceygoKFtee10qe1tefV0qfVtefV0qfSl8W157fV0rKSspfS9nLFxuICAgICAgICAgICAgICAgICAgICBgJHtxdW90ZX0rKCQxKSske3F1b3RlfWBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL15gKFtcXHNcXFNdKylgJC8sIGAke3F1b3RlfSQxJHtxdW90ZX1gKVxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSByZW1haW5pbmcgbmV3bGluZXMuXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcbisvZywgJycpXG4gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBtYXJrZWQgZXNjYXBlIHNlcXVlbmNlcy5cbiAgICAgICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGVzY2FwZU1hcmtlciwgJ2cnKSwgJ1xcXFwkJylcbiAgICAgICAgfVxuICAgIC8vIGVuZHJlZ2lvblxuICAgIGxldCBpbm5lclRlbXBsYXRlRnVuY3Rpb246IFRlbXBsYXRlRnVuY3Rpb248VD4gfCB1bmRlZmluZWRcblxuICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgaW5uZXJUZW1wbGF0ZUZ1bmN0aW9uID0gbmV3IChvcHRpb25zLmFzeW5jID8gQXN5bmNGdW5jdGlvbiA6IEZ1bmN0aW9uKShcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnJlbW92ZUdsb2JhbFNjb3BlID8gcmVzdWx0Lmdsb2JhbE5hbWVzIDogW10pLFxuICAgICAgICAgICAgLi4ucmVzdWx0LnNjb3BlTmFtZXMsXG4gICAgICAgICAgICBgJHtvcHRpb25zLmV4ZWN1dGUgPyAnJyA6ICdyZXR1cm4gJ30ke2V4cHJlc3Npb259YFxuICAgICAgICApIGFzIFRlbXBsYXRlRnVuY3Rpb248VD5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXN1bHQuZXJyb3IgPVxuICAgICAgICAgICAgYEdpdmVuICR7b3B0aW9ucy5hc3luYyA/ICdhc3luYycgOiAnc3luYyd9IGV4cHJlc3Npb24gYCArXG4gICAgICAgICAgICBgXCIke2V4cHJlc3Npb259XCIgY291bGQgbm90IGJlIGNvbXBpbGVkIHdpZHRoIGAgK1xuICAgICAgICAgICAgYGdpdmVuIHNjb3BlIG5hbWVzIFwiJHtyZXN1bHQuc2NvcGVOYW1lcy5qb2luKCdcIiwgXCInKX1cIjogYCArXG4gICAgICAgICAgICByZXByZXNlbnQoZXJyb3IpXG4gICAgfVxuICAgIGlmIChpbm5lclRlbXBsYXRlRnVuY3Rpb24pIHtcbiAgICAgICAgY29uc3QgYm91bmRJbm5lclRlbXBsYXRlRnVuY3Rpb24gPVxuICAgICAgICAgICAgaW5uZXJUZW1wbGF0ZUZ1bmN0aW9uLmJpbmQob3B0aW9ucy5iaW5kaW5nKVxuICAgICAgICByZXN1bHQudGVtcGxhdGVGdW5jdGlvbiA9IG9wdGlvbnMucmVtb3ZlR2xvYmFsU2NvcGUgP1xuICAgICAgICAgICAgKC4uLnBhcmFtZXRlcnMpID0+XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgTk9URTogV2Ugc2hhZG93IGV4aXN0aW5nIGdsb2JhbCBuYW1lcyB0byBzYW5kYm94XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLlxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgYm91bmRJbm5lclRlbXBsYXRlRnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5nbG9iYWxOYW1lc1VuZGVmaW5lZExpc3QsIC4uLnBhcmFtZXRlcnNcbiAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgIGJvdW5kSW5uZXJUZW1wbGF0ZUZ1bmN0aW9uXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBnaXZlbiBzdHJpbmcgYXMgYW4gZXhwcmVzc2lvbiBhZ2FpbnN0IGEgZ2l2ZW4gc2NvcGUuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBzdHJpbmcgdG8gaW50ZXJwcmV0LlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucyAtIEV4cHJlc3Npb24gb3B0aW9ucy5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuc2NvcGUgLSBTY29wZSB0byBleHRyYWN0IG5hbWVzIGZyb20uXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLmV4ZWN1dGUgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBleGVjdXRlIG9yIGV2YWx1YXRlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5yZW1vdmVHbG9iYWxTY29wZSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHNoYWRvdyBnbG9iYWxcbiAqIHNjb3BlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5iaW5kaW5nIC0gT2JqZWN0IHRvIGFwcGx5IGFzIFwidGhpc1wiIGluIGV2YWx1YXRpb24gc2NvcGUuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLmFzeW5jIC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gY29tcGlsZSBhbiBhc3luYyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgZHVyaW5nIHBhcnNpbmcgLyBydW5uaW5nIG9yIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV2YWx1YXRlID0gPFQgPSBzdHJpbmcsIFMgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+KFxuICAgIGV4cHJlc3Npb246IHN0cmluZyxcbiAgICBnaXZlbk9wdGlvbnM6IFBhcnRpYWw8RXZhbHVhdGVFeHByZXNzaW9uT3B0aW9uczxTPj4gPSB7fVxuKTogRXZhbHVhdGlvblJlc3VsdDxUPiA9PiB7XG4gICAgY29uc3Qgb3B0aW9uczogRXZhbHVhdGVFeHByZXNzaW9uT3B0aW9uczxTPiA9IHtcbiAgICAgICAgc2NvcGU6IHt9IGFzIFMsXG4gICAgICAgIGFzeW5jOiBmYWxzZSxcbiAgICAgICAgZXhlY3V0ZTogZmFsc2UsXG4gICAgICAgIHJlbW92ZUdsb2JhbFNjb3BlOiB0cnVlLFxuICAgICAgICBiaW5kaW5nOiB7fSxcbiAgICAgICAgLi4uZ2l2ZW5PcHRpb25zXG4gICAgfVxuICAgIC8vIE5PVEU6IFdlIGV4dHJhY3Qgc3RyaW5nLW9ubHkgdHlwZXMgZnJvbSBnaXZlbiBzY29wZSB0eXBlLlxuICAgIHR5cGUgTiA9IEFycmF5PGtleW9mIFMgZXh0ZW5kcyBzdHJpbmcgPyBrZXlvZiBTIDogbmV2ZXI+XG5cbiAgICBjb25zdCB7XG4gICAgICAgIGVycm9yLFxuICAgICAgICBvcmlnaW5hbFNjb3BlTmFtZXMsXG4gICAgICAgIHNjb3BlTmFtZXMsXG4gICAgICAgIHRlbXBsYXRlRnVuY3Rpb25cbiAgICB9ID0gY29tcGlsZTxULCBOPihleHByZXNzaW9uLCBvcHRpb25zIGFzIENvbXBpbGVFeHByZXNzaW9uT3B0aW9uczxOPilcblxuICAgIGxldCByZXN1bHQ6IEV2YWx1YXRpb25SZXN1bHQ8VD4gPSB7XG4gICAgICAgIGNvbXBpbGVFcnJvcjogbnVsbCxcbiAgICAgICAgcnVudGltZUVycm9yOiBudWxsLFxuICAgICAgICBlcnJvcjogJ05vdCB5ZXQgZXZhbHVhdGVkLicsXG5cbiAgICAgICAgcmVzdWx0OiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmVzdWx0LmNvbXBpbGVFcnJvciA9IHJlc3VsdC5lcnJvciA9IGVycm9yXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGNvbXBpbGVFcnJvcjogbnVsbCxcbiAgICAgICAgICAgIHJ1bnRpbWVFcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgcmVzdWx0OiB0ZW1wbGF0ZUZ1bmN0aW9uKFxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgIE5PVEU6IFdlIHdhbnQgdG8gYmUgc3VyZSB0byBoYXZlIHRoZSBzYW1lIG9yZGVyaW5nIGFzIHdlXG4gICAgICAgICAgICAgICAgICAgIGhhdmUgZm9yIHRoZSBzY29wZSBuYW1lcyBhbmQgdG8gY2FsbCBpbnRlcm5hbCByZWdpc3RlcmVkXG4gICAgICAgICAgICAgICAgICAgIGdldHRlciBieSByZXRyaWV2aW5nIHZhbHVlcy4gU28gc2ltcGxlIHVzaW5nXG4gICAgICAgICAgICAgICAgICAgIFwiLi4uT2JqZWN0LnZhbHVlcyhzY29wZSlcIiBpcyBub3QgYXBwcmVjaWF0ZSBoZXJlLlxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgLi4ub3JpZ2luYWxTY29wZU5hbWVzLm1hcCgobmFtZToga2V5b2YgUyk6IFZhbHVlT2Y8Uz4gPT5cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zY29wZVtuYW1lXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlc3VsdC5lcnJvciA9XG4gICAgICAgICAgICByZXN1bHQucnVudGltZUVycm9yID0gKFxuICAgICAgICAgICAgICAgIGBHaXZlbiAke29wdGlvbnMuYXN5bmMgPyAnYXN5bmMnIDogJ3N5bmMnfSBleHByZXNzaW9uIGAgK1xuICAgICAgICAgICAgICAgIGBcIiR7ZXhwcmVzc2lvbn1cIiBjb3VsZCBub3QgYmUgZXZhbHVhdGVkIHdpdGggZ2l2ZW4gc2NvcGUgYCArXG4gICAgICAgICAgICAgICAgYG5hbWVzIFwiJHtzY29wZU5hbWVzLmpvaW4oJ1wiLCBcIicpfVwiOiBgICtcbiAgICAgICAgICAgICAgICByZXByZXNlbnQoZXJyb3IpXG4gICAgICAgICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBnaXZlbiBzdHJpbmcgYXMgYW4gZXhwcmVzc2lvbiBhZ2FpbnN0IGEgZ2l2ZW4gc2NvcGUuIERvZXMgc2FtZVxuICogYXMgXCJldmFsdWF0ZVwiIGJ1dCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3VycyBhbmQgcmV0dXJucyB0aGVcbiAqIGV2YWx1YXRlZCB2YWx1ZSBpbnN0ZWFkIG9mIGFuIG9iamVjdCB3aXRoIGVycm9yIGFuZCByZXN1bHQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBzdHJpbmcgdG8gaW50ZXJwcmV0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBFeHByZXNzaW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0gb3B0aW9ucy5zY29wZSAtIFNjb3BlIHRvIGV4dHJhY3QgbmFtZXMgZnJvbS5cbiAqIEBwYXJhbSBvcHRpb25zLmV4ZWN1dGUgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBleGVjdXRlIG9yIGV2YWx1YXRlLlxuICogQHBhcmFtIG9wdGlvbnMucmVtb3ZlR2xvYmFsU2NvcGUgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBzaGFkb3cgZ2xvYmFsIHNjb3BlLlxuICogQHBhcmFtIG9wdGlvbnMuYmluZGluZyAtIE9iamVjdCB0byBhcHBseSBhcyBcInRoaXNcIiBpbiBldmFsdWF0aW9uIHNjb3BlLlxuICogQHBhcmFtIG9wdGlvbnMuYXN5bmMgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBjb21waWxlIGFuIGFzeW5jIGZ1bmN0aW9uLlxuICogQHJldHVybnMgT2JqZWN0IHdpdGggYW4gZXJyb3IgbWVzc2FnZSBkdXJpbmcgcGFyc2luZyAvIHJ1bm5pbmcgb3IgcmVzdWx0LlxuICovXG5leHBvcnQgY29uc3QgZXZhbHVhdGVPclRocm93RXJyb3IgPSA8XG4gICAgUmVzdWx0ID0gc3RyaW5nLCBTY29wZSBleHRlbmRzIG9iamVjdCA9IG9iamVjdFxuPihcbiAgICAgICAgZXhwcmVzc2lvbjogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiBQYXJ0aWFsPEV2YWx1YXRlRXhwcmVzc2lvbk9wdGlvbnM8U2NvcGU+PiA9IHt9XG4gICAgKTogUmVzdWx0ID0+IHtcbiAgICBjb25zdCBldmFsdWF0ZWQ6IEV2YWx1YXRpb25SZXN1bHQ8UmVzdWx0PiA9IGV2YWx1YXRlPFJlc3VsdCwgU2NvcGU+KFxuICAgICAgICBleHByZXNzaW9uLCBvcHRpb25zXG4gICAgKVxuXG4gICAgaWYgKGV2YWx1YXRlZC5lcnJvcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGV2YWx1YXRlZC5lcnJvcilcblxuICAgIHJldHVybiBldmFsdWF0ZWQucmVzdWx0IGFzIFJlc3VsdFxufVxuLyoqXG4gKiBGaW5kcyB0aGUgc3RyaW5nIG1hdGNoIG9mIGEgZ2l2ZW4gcXVlcnkgaW4gYSBnaXZlbiB0YXJnZXQgdGV4dCBieSBhcHBseWluZyBhXG4gKiBnaXZlbiBub3JtYWxpemF0aW9uIGZ1bmN0aW9uIHRvIHRhcmdldCBhbmQgcXVlcnkuXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGFyZ2V0IHRvIHNlYXJjaCBpbi5cbiAqIEBwYXJhbSBxdWVyeSAtIFNlYXJjaCBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSBub3JtYWxpemVyIC0gRnVuY3Rpb24gdG8gdXNlIGFzIG5vcm1hbGl6YXRpb24gZm9yIHF1ZXJpZXMgYW5kIHNlYXJjaFxuICogdGFyZ2V0cy5cbiAqIEBwYXJhbSBza2lwVGFnRGVsaW1pdGVkUGFydHMgLSBJbmRpY2F0ZXMgd2hldGhlciB0bywgZm9yIGV4YW1wbGUsIGlnbm9yZVxuICogaHRtbCB0YWdzIHZpYSBcIlsnPCcsICc+J11cIiAodGhlIGRlZmF1bHQpLlxuICogQHJldHVybnMgU3RhcnQgYW5kIGVuZCBpbmRleCBvZiBtYXRjaGluZyByYW5nZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmROb3JtYWxpemVkTWF0Y2hSYW5nZSA9IChcbiAgICB0YXJnZXQ6IHVua25vd24sXG4gICAgcXVlcnk6IHVua25vd24sXG4gICAgbm9ybWFsaXplciA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCksXG4gICAgc2tpcFRhZ0RlbGltaXRlZFBhcnRzOiBudWxsIHwgW3N0cmluZywgc3RyaW5nXSA9IFsnPCcsICc+J11cbik6IEFycmF5PG51bWJlcj4gfCBudWxsID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkUXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZXIocXVlcnkpXG4gICAgY29uc3Qgbm9ybWFsaXplZFRhcmdldDogc3RyaW5nID0gbm9ybWFsaXplcih0YXJnZXQpXG5cbiAgICBjb25zdCBzdHJpbmdUYXJnZXQgPSB0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJyA/XG4gICAgICAgIHRhcmdldCA6XG4gICAgICAgIG5vcm1hbGl6ZWRUYXJnZXRcblxuICAgIGlmIChub3JtYWxpemVkVGFyZ2V0ICYmIG5vcm1hbGl6ZWRRdWVyeSkge1xuICAgICAgICBsZXQgaW5UYWcgPSBmYWxzZVxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3RyaW5nVGFyZ2V0Lmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICAgICAgaWYgKGluVGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHNraXBUYWdEZWxpbWl0ZWRQYXJ0cykgJiZcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVGFyZ2V0LmNoYXJBdChpbmRleCkgPT09IHNraXBUYWdEZWxpbWl0ZWRQYXJ0c1sxXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaW5UYWcgPSBmYWxzZVxuXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc2tpcFRhZ0RlbGltaXRlZFBhcnRzKSAmJlxuICAgICAgICAgICAgICAgIHN0cmluZ1RhcmdldC5jaGFyQXQoaW5kZXgpID09PSBza2lwVGFnRGVsaW1pdGVkUGFydHNbMF1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGluVGFnID0gdHJ1ZVxuXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZXIoc3RyaW5nVGFyZ2V0LnN1YnN0cmluZyhpbmRleCkpLnN0YXJ0c1dpdGgoXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFF1ZXJ5XG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRRdWVyeS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbaW5kZXgsIGluZGV4ICsgMV1cblxuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJJbmRleCA9IHN0cmluZ1RhcmdldC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHN1YkluZGV4ID4gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHN1YkluZGV4IC09IDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9ybWFsaXplcihzdHJpbmdUYXJnZXQuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIHN1YkluZGV4XG4gICAgICAgICAgICAgICAgICAgICkpLnN0YXJ0c1dpdGgobm9ybWFsaXplZFF1ZXJ5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbaW5kZXgsIHN1YkluZGV4ICsgMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG59XG4vKipcbiAqIEZpeGVzIGtub3duIGVuY29kaW5nIHByb2JsZW1zIGluIGdpdmVuIGRhdGEuXG4gKiBAcGFyYW0gZGF0YSAtIFRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyBQcm9jZXNzZWQgZGF0YS5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpeEtub3duRW5jb2RpbmdFcnJvcnMgPSAoZGF0YTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBmb3IgKGNvbnN0IFtzZWFyY2gsIHJlcGxhY2VtZW50XSBvZiBGSVhfRU5DT0RJTkdfRVJST1JfTUFQUElORylcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZShuZXcgUmVnRXhwKHNlYXJjaCwgJ2cnKSwgcmVwbGFjZW1lbnQpXG5cbiAgICByZXR1cm4gZGF0YVxufVxuLyoqXG4gKiBQZXJmb3JtcyBhIHN0cmluZyBmb3JtYXRpb24uIFJlcGxhY2VzIGV2ZXJ5IHBsYWNlaG9sZGVyIFwie2l9XCIgd2l0aCB0aGUgaSd0aFxuICogYXJndW1lbnQuXG4gKiBAcGFyYW0gc3RyaW5nIC0gVGhlIHN0cmluZyB0byBmb3JtYXQuXG4gKiBAcGFyYW0gYWRkaXRpb25hbEFyZ3VtZW50cyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBpbnRlcnByZXRlZCBhc1xuICogcmVwbGFjZW1lbnRzIGZvciBzdHJpbmcgZm9ybWF0dGluZy5cbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0ID0gKFxuICAgIHN0cmluZzogc3RyaW5nLCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzOiBBcnJheTx1bmtub3duPlxuKTogc3RyaW5nID0+IHtcbiAgICBhZGRpdGlvbmFsQXJndW1lbnRzLnVuc2hpZnQoc3RyaW5nKVxuXG4gICAgbGV0IGluZGV4ID0gMFxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYWRkaXRpb25hbEFyZ3VtZW50cykge1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYFxcXFx7JHtTdHJpbmcoaW5kZXgpfVxcXFx9YCwgJ2dtJyksIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgKVxuXG4gICAgICAgIGluZGV4ICs9IDFcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nXG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGVkaXQgKGxldmVuc3RlaW4pIGRpc3RhbmNlIGJldHdlZW4gdHdvIGdpdmVuIHN0cmluZ3MuXG4gKiBAcGFyYW0gZmlyc3QgLSBGaXJzdCBzdHJpbmcgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBzZWNvbmQgLSBTZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYXMgbnVtYmVyLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdERpc3RhbmNlID0gKGZpcnN0OiBzdHJpbmcsIHNlY29uZDogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgICAvKlxuICAgICAgICBDcmVhdGUgZW1wdHkgZWRpdCBkaXN0YW5jZSBtYXRyaXggZm9yIGFsbCBwb3NzaWJsZSBtb2RpZmljYXRpb25zIG9mXG4gICAgICAgIHN1YnN0cmluZ3Mgb2YgXCJmaXJzdFwiIHRvIHN1YnN0cmluZ3Mgb2YgXCJzZWNvbmRcIi5cbiAgICAqL1xuICAgIGNvbnN0IGRpc3RhbmNlTWF0cml4OiBBcnJheTxBcnJheTxudW1iZXI+PiA9XG4gICAgICAgIEFycmF5KHNlY29uZC5sZW5ndGggKyAxKS5maWxsKG51bGwpLm1hcCgoKTogQXJyYXk8bnVtYmVyPiA9PlxuICAgICAgICAgICAgQXJyYXkoZmlyc3QubGVuZ3RoICsgMSkuZmlsbChudWxsKSBhcyBBcnJheTxudW1iZXI+XG4gICAgICAgIClcbiAgICAvKlxuICAgICAgICBGaWxsIHRoZSBmaXJzdCByb3cgb2YgdGhlIG1hdHJpeC5cbiAgICAgICAgSWYgdGhpcyBpcyB0aGUgZmlyc3Qgcm93LCB0aGVuLCB3ZSdyZSB0cmFuc2Zvcm1pbmcgYW4gZW1wdHkgc3RyaW5nIHRvXG4gICAgICAgIFwiZmlyc3RcIi4gSW4gdGhpcyBjYXNlIHRoZSBudW1iZXIgb2YgdHJhbnNmb3JtYXRpb25zIGVxdWFscyB0byB0aGUgc2l6ZVxuICAgICAgICBvZiB0aGUgXCJmaXJzdFwiIHN1YnN0cmluZy5cbiAgICAqL1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gZmlyc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgICAgICBkaXN0YW5jZU1hdHJpeFswXVtpbmRleF0gPSBpbmRleFxuICAgIC8qXG4gICAgICAgIEZpbGwgdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgbWF0cml4LlxuICAgICAgICBJZiB0aGlzIGlzIHRoZSBmaXJzdCBjb2x1bW4sIHRoZW4gd2UncmUgdHJhbnNmb3JtaW5nIGFuIGVtcHR5IHN0cmluZyB0b1xuICAgICAgICBcInNlY29uZFwiLlxuICAgICAgICBJbiB0aGlzIGNhc2UgdGhlIG51bWJlciBvZiB0cmFuc2Zvcm1hdGlvbnMgZXF1YWxzIHRvIHRoZSBzaXplIG9mIHRoZVxuICAgICAgICBcInNlY29uZFwiIHN1YnN0cmluZy5cbiAgICAqL1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gc2Vjb25kLmxlbmd0aDsgaW5kZXgrKylcbiAgICAgICAgZGlzdGFuY2VNYXRyaXhbaW5kZXhdWzBdID0gaW5kZXhcblxuICAgIGZvciAobGV0IGZpcnN0SW5kZXggPSAxOyBmaXJzdEluZGV4IDw9IHNlY29uZC5sZW5ndGg7IGZpcnN0SW5kZXgrKylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGxldCBzZWNvbmRJbmRleCA9IDE7XG4gICAgICAgICAgICBzZWNvbmRJbmRleCA8PSBmaXJzdC5sZW5ndGg7XG4gICAgICAgICAgICBzZWNvbmRJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5kaWNhdG9yOiBudW1iZXIgPVxuICAgICAgICAgICAgICAgIGZpcnN0W3NlY29uZEluZGV4IC0gMV0gPT09IHNlY29uZFtmaXJzdEluZGV4IC0gMV0gPyAwIDogMVxuICAgICAgICAgICAgZGlzdGFuY2VNYXRyaXhbZmlyc3RJbmRleF1bc2Vjb25kSW5kZXhdID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgLy8gZGVsZXRpb25cbiAgICAgICAgICAgICAgICBkaXN0YW5jZU1hdHJpeFtmaXJzdEluZGV4XVtzZWNvbmRJbmRleCAtIDFdICsgMSxcbiAgICAgICAgICAgICAgICAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgICBkaXN0YW5jZU1hdHJpeFtmaXJzdEluZGV4IC0gMV1bc2Vjb25kSW5kZXhdICsgMSxcbiAgICAgICAgICAgICAgICAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgICAgICBkaXN0YW5jZU1hdHJpeFtmaXJzdEluZGV4IC0gMV1bc2Vjb25kSW5kZXggLSAxXSArIGluZGljYXRvclxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICByZXR1cm4gZGlzdGFuY2VNYXRyaXhbc2Vjb25kLmxlbmd0aF1bZmlyc3QubGVuZ3RoXVxufVxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGN1cnJlbnQgc3RyaW5nIGZvciB1c2luZyBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLlxuICogU3BlY2lhbCByZWd1bGFyIGV4cHJlc3Npb24gY2hhcnMgd2lsbCBiZSBlc2NhcGVkLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byBmb3JtYXQuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hc2tGb3JSZWd1bGFyRXhwcmVzc2lvbiA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKFtcXFxcfC4qJF4rW1xcXSgpP1xcLXt9XSkvZywgJ1xcXFwkMScpXG59XG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGl0cyBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9uLlxuICogQHBhcmFtIHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gZm9ybWF0LlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBsb3dlckNhc2UgPSAoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc3Vic3RyaW5nKDEpXG59XG4vKipcbiAqIFdyYXBzIGdpdmVuIG1hcmsgc3RyaW5ncyBpbiBhIGdpdmVuIHRhcmdldCB3aXRoIGEgZ2l2ZW4gbWFya2VyLlxuICogQHBhcmFtIHRhcmdldCAtIFN0cmluZyB0byBzZWFyY2ggZm9yIG1hcmtlci5cbiAqIEBwYXJhbSBnaXZlbldvcmRzIC0gU3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgdG8gc2VhcmNoIGluIHRhcmdldCBmb3IuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zIC0gRGVmaW5lcyBoaWdobGlnaHRpbmcgYmVoYXZpb3IuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLm1hcmtlciAtIEhUTUwgdGVtcGxhdGUgc3RyaW5nIHRvIG1hcmsuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLm5vcm1hbGl6ZXIgLSBQdXJlIG5vcm1hbGl6YXRpb24gZnVuY3Rpb24gdG8gdXNlIGJlZm9yZVxuICogc2VhcmNoaW5nIGZvciBtYXRjaGVzLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5za2lwVGFnRGVsaW1pdGVkUGFydHMgLSBJbmRpY2F0ZXMgd2hldGhlciB0bywgZm9yXG4gKiBleGFtcGxlLCBpZ25vcmUgaHRtbCB0YWdzIHZpYSBcIlsnPCcsICc+J11cIiAodGhlIGRlZmF1bHQpLlxuICogQHJldHVybnMgUHJvY2Vzc2VkIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hcmsgPSAoXG4gICAgdGFyZ2V0OiB1bmtub3duLFxuICAgIGdpdmVuV29yZHM/OiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nLFxuICAgIGdpdmVuT3B0aW9uczogUGFydGlhbDxTdHJpbmdNYXJrT3B0aW9ucz4gPSB7fVxuKTogdW5rbm93biA9PiB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnICYmIGdpdmVuV29yZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBvcHRpb25zOiBTdHJpbmdNYXJrT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1hcmtlcjogJzxzcGFuIGNsYXNzPVwidG9vbHMtbWFya1wiPnsxfTwvc3Bhbj4nLFxuICAgICAgICAgICAgbm9ybWFsaXplcjogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBza2lwVGFnRGVsaW1pdGVkUGFydHM6IFsnPCcsICc+J10sXG4gICAgICAgICAgICAuLi5naXZlbk9wdGlvbnNcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldCA9IHRhcmdldC50cmltKClcbiAgICAgICAgY29uc3QgbWFya2VkVGFyZ2V0OiBBcnJheTx1bmtub3duPiA9IFtdXG5cbiAgICAgICAgY29uc3Qgd29yZHM6IEFycmF5PHN0cmluZz4gPVxuICAgICAgICAgICAgKFtdIGFzIEFycmF5PHN0cmluZz4pLmNvbmNhdChnaXZlbldvcmRzKVxuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qgd29yZCBvZiB3b3Jkcykge1xuICAgICAgICAgICAgd29yZHNbaW5kZXhdID0gb3B0aW9ucy5ub3JtYWxpemVyKHdvcmQpLnRyaW0oKVxuXG4gICAgICAgICAgICBpbmRleCArPSAxXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzdFRhcmdldDogc3RyaW5nID0gdGFyZ2V0IGFzIHN0cmluZ1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMFxuICAgICAgICAvKlxuICAgICAgICAgICAgU2VhcmNoIGZvciBtYXRjaGVzIGFzIGxvbmcgdGhlcmUgaXMgZW5vdWdoIHRhcmdldCB0ZXh0IHJlbWFpbmluZyB0b1xuICAgICAgICAgICAgd2FsayB0aHJvdWdoLlxuICAgICAgICAqL1xuICAgICAgICBmb3IgKFxuICAgICAgICAgICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgICAgICAgICBpdGVyYXRpb24gPCBNQVhJTUFMX05VTUJFUl9PRl9JVEVSQVRJT05TLnZhbHVlO1xuICAgICAgICAgICAgaXRlcmF0aW9uKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgbmVhcmVzdFJhbmdlOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGxcbiAgICAgICAgICAgIGxldCBjdXJyZW50UmFuZ2U6IEFycmF5PG51bWJlcj4gfCBudWxsXG5cbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgbmV4dCBtYXRjaGluZyB3b3JkLlxuICAgICAgICAgICAgZm9yIChjb25zdCB3b3JkIG9mIHdvcmRzKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJhbmdlID0gZmluZE5vcm1hbGl6ZWRNYXRjaFJhbmdlKFxuICAgICAgICAgICAgICAgICAgICByZXN0VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICB3b3JkLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm5vcm1hbGl6ZXIsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2tpcFRhZ0RlbGltaXRlZFBhcnRzXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICghbmVhcmVzdFJhbmdlIHx8IGN1cnJlbnRSYW5nZVswXSA8IG5lYXJlc3RSYW5nZVswXSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3RSYW5nZSA9IGN1cnJlbnRSYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmVhcmVzdFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5lYXJlc3RSYW5nZVswXSA+IDApXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlZFRhcmdldC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldCBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnN0cmluZyhvZmZzZXQsIG9mZnNldCArIG5lYXJlc3RSYW5nZVswXSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIG1hcmtlZFRhcmdldC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5tYXJrZXIgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0IGFzIHN0cmluZykuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBuZWFyZXN0UmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArIG5lYXJlc3RSYW5nZVsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXJrZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldCBhcyBzdHJpbmcpLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgbmVhcmVzdFJhbmdlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBuZWFyZXN0UmFuZ2VbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlZFRhcmdldFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBuZWFyZXN0UmFuZ2VbMV1cblxuICAgICAgICAgICAgICAgIHJlc3RUYXJnZXQgPSAodGFyZ2V0IGFzIHN0cmluZykuc3Vic3RyaW5nKG9mZnNldClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3RUYXJnZXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZWRUYXJnZXQucHVzaChyZXN0VGFyZ2V0KVxuXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0eXBlb2Ygb3B0aW9ucy5tYXJrZXIgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgIG1hcmtlZFRhcmdldC5qb2luKCcnKSA6XG4gICAgICAgICAgICBtYXJrZWRUYXJnZXRcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0XG59XG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBnaXZlbiBwaG9uZSBudW1iZXIgZm9yIGF1dG9tYXRpYyBkaWFsaW5nIG9yIGNvbXBhcmlzb24uXG4gKiBAcGFyYW0gdmFsdWUgLSBOdW1iZXIgdG8gbm9ybWFsaXplLlxuICogQHBhcmFtIGRpYWxhYmxlIC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlc3VsdCBzaG91bGQgYmUgZGlhbGVkIG9yXG4gKiByZXByZXNlbnRlZCBhcyBsb3NzbGVzcyBkYXRhLlxuICogQHJldHVybnMgTm9ybWFsaXplZCBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVQaG9uZU51bWJlciA9IChcbiAgICB2YWx1ZTogdW5rbm93biwgZGlhbGFibGUgPSB0cnVlXG4pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZTogc3RyaW5nID0gU3RyaW5nKHZhbHVlKS50cmltKClcblxuICAgICAgICAvLyBOb3JtYWxpemUgY291bnRyeSBjb2RlIHByZWZpeC5cbiAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoL15bXjAtOV0qXFwrLywgJzAwJylcblxuICAgICAgICAvLyBSZW1vdmUgYWx0ZXJuYXRlIGRpcmVjdCBkaWFsIG51bWJlcnMuXG4gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLyhbMC05XS4qPykgKigsfG9bcmRdPylcXC4/ID8tP1swLTldKyQvLCAnJDEnXG4gICAgICAgIClcblxuICAgICAgICBpZiAoZGlhbGFibGUpXG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoL1teMC05XSsvZywgJycpXG5cbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yUGF0dGVybiA9ICcoPzpbIC9cXFxcLV0rKSdcbiAgICAgICAgLy8gUmVtb3ZlIHVubmVlZGVkIGFyZWEgY29kZSB6ZXJvIGluIGJyYWNrZXRzLlxuICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkVmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgYF4oLis/KSR7c2VwYXJhdG9yUGF0dGVybn0/XFxcXCgwXFxcXCkke3NlcGFyYXRvclBhdHRlcm59P2AgK1xuICAgICAgICAgICAgICAgICcoLispJCdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAnJDEtJDInXG4gICAgICAgIClcbiAgICAgICAgLy8gUmVtb3ZlIHVubmVlZGVkIGFyZWEgY29kZSBicmFja2V0cy5cbiAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgIGBeKC4rPykke3NlcGFyYXRvclBhdHRlcm59P1xcXFwoKC4rKVxcXFwpYCArXG4gICAgICAgICAgICAgICAgYCR7c2VwYXJhdG9yUGF0dGVybn0/KC4rKSRgXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgJyQxLSQyLSQzJ1xuICAgICAgICApXG4gICAgICAgIC8qXG4gICAgICAgICAgICBSZW1vdmUgc2VwYXJhdG9ycyB0aGF0IGRvbid0IG1hcmsgc2VtYW50aWNzOlxuICAgICAgICAgICAgMTogQ291bnRyeSBjb2RlXG4gICAgICAgICAgICAyOiBBcmVhIGNvZGVcbiAgICAgICAgICAgIDM6IE51bWJlclxuICAgICAgICAqL1xuICAgICAgICBsZXQgY29tcGlsZWRQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgIGBeKDAwWzAtOV0rKSR7c2VwYXJhdG9yUGF0dGVybn0oWzAtOV0rKSR7c2VwYXJhdG9yUGF0dGVybn1gICtcbiAgICAgICAgICAgICcoLispJCdcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChjb21waWxlZFBhdHRlcm4udGVzdChub3JtYWxpemVkVmFsdWUpKVxuICAgICAgICAgICAgLy8gQ291bnRyeSBjb2RlIGFuZCBhcmVhIGNvZGUgbWF0Y2hlZC5cbiAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZS5yZXBsYWNlKGNvbXBpbGVkUGF0dGVybiwgKFxuICAgICAgICAgICAgICAgIF9tYXRjaDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgYXJlYUNvZGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICBudW1iZXI6IHN0cmluZ1xuICAgICAgICAgICAgKTogc3RyaW5nID0+XG4gICAgICAgICAgICAgICAgYCR7Y291bnRyeUNvZGV9LSR7YXJlYUNvZGV9LWAgK1xuICAgICAgICAgICAgICAgIHNsaWNlQWxsRXhjZXB0TnVtYmVyQW5kTGFzdFNlcGFyYXRvcihudW1iZXIpXG4gICAgICAgICAgICApXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBPbmUgcHJlZml4IGNvZGUgbWF0Y2hlZDpcbiAgICAgICAgICAgICAgICAxOiBQcmVmaXggY29kZVxuICAgICAgICAgICAgICAgIDI6IE51bWJlclxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbXBpbGVkUGF0dGVybiA9IC9eKFswLTkgXSspWy8tXSguKykkL1xuICAgICAgICAgICAgY29uc3QgcmVwbGFjZXIgPSAoXG4gICAgICAgICAgICAgICAgX21hdGNoOiBzdHJpbmcsIHByZWZpeENvZGU6IHN0cmluZywgbnVtYmVyOiBzdHJpbmdcbiAgICAgICAgICAgICk6IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgIGAke3ByZWZpeENvZGUucmVwbGFjZSgvICsvLCAnJyl9LWAgK1xuICAgICAgICAgICAgICAgIHNsaWNlQWxsRXhjZXB0TnVtYmVyQW5kTGFzdFNlcGFyYXRvcihudW1iZXIpXG5cbiAgICAgICAgICAgIGlmIChjb21waWxlZFBhdHRlcm4udGVzdChub3JtYWxpemVkVmFsdWUpKVxuICAgICAgICAgICAgICAgIC8vIFByZWZlciBcIi9cIiBvciBcIi1cIiBvdmVyIFwiIFwiIGFzIGFyZWEgY29kZSBzZXBhcmF0b3IuXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoY29tcGlsZWRQYXR0ZXJuLCByZXBsYWNlcilcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkVmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChgXihbMC05XSspJHtzZXBhcmF0b3JQYXR0ZXJufSguKykkYCksXG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZS5yZXBsYWNlKC9bXjAtOS1dKy9nLCAnJykucmVwbGFjZSgvXi0rJC8sICcnKVxuICAgIH1cblxuICAgIHJldHVybiAnJ1xufVxuLyoqXG4gKiBOb3JtYWxpemVzIGEgZ2l2ZW4gemlwIGNvZGUgZm9yIGF1dG9tYXRpYyBhZGRyZXNzIHByb2Nlc3NpbmcuXG4gKiBAcGFyYW0gdmFsdWUgLSBOdW1iZXIgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgTm9ybWFsaXplZCBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVaaXBDb2RlID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKS50cmltKCkucmVwbGFjZShcbiAgICAgICAgICAgIC9eKFteMC05XSpbYS16QS1aXS0pPyguKykkLyxcbiAgICAgICAgICAgIChtYXRjaDogc3RyaW5nLCBwcmVmaXg/OiBzdHJpbmcsIGNvZGU/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJlZml4KVxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoIC0gMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2hhckF0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJy0nXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHByZWZpeCA/PyAnJykgK1xuICAgICAgICAgICAgICAgICAgICAoY29kZSA/PyAnJykudHJpbSgpLnJlcGxhY2UoL1teMC05XSsvZywgJycpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICApXG5cbiAgICByZXR1cm4gJydcbn1cbi8qKlxuICogQ29udmVydHMgYSBnaXZlbiBzZXJpYWxpemVkLCBiYXNlNjQgZW5jb2RlZCBvciBmaWxlIHBhdGggZ2l2ZW4gb2JqZWN0IGludG8gYVxuICogbmF0aXZlIEphdmFTY3JpcHQgb25lIGlmIHBvc3NpYmxlLlxuICogQHBhcmFtIHNlcmlhbGl6ZWRPYmplY3QgLSBPYmplY3QgYXMgc3RyaW5nLlxuICogQHBhcmFtIHNjb3BlIC0gQW4gb3B0aW9uYWwgc2NvcGUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGV2YWx1YXRlIGdpdmVuIG9iamVjdFxuICogaW4uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIHVuZGVyIGdpdmVuIHNjb3BlIHdpbGwgYmUgYXZhaWxhYmxlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBvYmplY3QgaWYgcG9zc2libGUgYW5kIG51bGwgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VFbmNvZGVkT2JqZWN0ID0gPFQgPSBQbGFpbk9iamVjdD4oXG4gICAgc2VyaWFsaXplZE9iamVjdDogc3RyaW5nLCBzY29wZTogTWFwcGluZzx1bmtub3duPiA9IHt9LCBuYW1lID0gJ3Njb3BlJ1xuKTogbnVsbCB8IFQgPT4ge1xuICAgIGlmICghaW1wb3J0cy5mcz8ucmVhZEZpbGVTeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgc3lzdGVtIGFwaSBjb3VsZCBub3QgYmUgbG9hZGVkLicpXG5cbiAgICBpZiAoc2VyaWFsaXplZE9iamVjdC5lbmRzV2l0aCgnLmpzb24nKSAmJiBpc0ZpbGVTeW5jKHNlcmlhbGl6ZWRPYmplY3QpKVxuICAgICAgICBzZXJpYWxpemVkT2JqZWN0ID1cbiAgICAgICAgICAgIGltcG9ydHMuZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRPYmplY3QsIHtlbmNvZGluZzogREVGQVVMVF9FTkNPRElOR31cbiAgICAgICAgICAgIClcblxuICAgIHNlcmlhbGl6ZWRPYmplY3QgPSBzZXJpYWxpemVkT2JqZWN0LnRyaW0oKVxuXG4gICAgaWYgKCFzZXJpYWxpemVkT2JqZWN0LnN0YXJ0c1dpdGgoJ3snKSlcbiAgICAgICAgc2VyaWFsaXplZE9iamVjdCA9IChldmFsKCdCdWZmZXInKSBhcyB0eXBlb2YgQnVmZmVyKVxuICAgICAgICAgICAgLmZyb20oc2VyaWFsaXplZE9iamVjdCwgJ2Jhc2U2NCcpXG4gICAgICAgICAgICAudG9TdHJpbmcoREVGQVVMVF9FTkNPRElORylcblxuICAgIGNvbnN0IHJlc3VsdDogRXZhbHVhdGlvblJlc3VsdDxUPiA9XG4gICAgICAgIGV2YWx1YXRlPFQ+KHNlcmlhbGl6ZWRPYmplY3QsIHtzY29wZToge1tuYW1lXTogc2NvcGV9fSlcblxuICAgIGlmICh0eXBlb2YgcmVzdWx0LnJlc3VsdCA9PT0gJ29iamVjdCcpXG4gICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0XG5cbiAgICByZXR1cm4gbnVsbFxufVxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZ2l2ZW4gcGhvbmUgbnVtYmVyLiBOT1RFOiBDdXJyZW50bHkgb25seSBzdXBwb3J0IEdlcm1hbiBwaG9uZVxuICogbnVtYmVycy5cbiAqIEBwYXJhbSB2YWx1ZSAtIE51bWJlciB0byBmb3JtYXQuXG4gKiBAcmV0dXJucyBGb3JtYXR0ZWQgbnVtYmVyLlxuICovXG5leHBvcnQgY29uc3QgcmVwcmVzZW50UGhvbmVOdW1iZXIgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgIGlmIChbJ251bWJlcicsICdzdHJpbmcnXS5pbmNsdWRlcyhkZXRlcm1pbmVUeXBlKHZhbHVlKSkgJiYgdmFsdWUpIHtcbiAgICAgICAgLy8gUmVwcmVzZW50IGNvdW50cnkgY29kZSBhbmQgbGVhZGluZyBhcmVhIGNvZGUgemVyby5cbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tYmFzZS10by1zdHJpbmdcbiAgICAgICAgICAgIFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvXigwMHxcXCspKFswLTldKyktKFswLTktXSspJC8sICcrJDIgKDApICQzJylcblxuICAgICAgICAvLyBBZGQgR2VybWFuIGNvdW50cnkgY29kZSBpZiBub3QgZXhpc3RzLlxuICAgICAgICBub3JtYWxpemVkVmFsdWUgPVxuICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnJlcGxhY2UoL14wKFsxLTldWzAtOS1dKykkLywgJys0OSAoMCkgJDEnKVxuICAgICAgICAvLyBTZXBhcmF0ZSBhcmVhIGNvZGUgZnJvbSBiYXNlIG51bWJlci5cbiAgICAgICAgbm9ybWFsaXplZFZhbHVlID1cbiAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZS5yZXBsYWNlKC9eKFteLV0rKS0oWzAtOS1dKykkLywgJyQxIC8gJDInKVxuXG4gICAgICAgIC8vIFBhcnRpdGlvbiBiYXNlIG51bWJlciBpbiBvbmUgdHJpcGxlIGFuZCB0dXBsZXMgb3IgdHVwbGVzIG9ubHkuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkVmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIC9eKC4qPykoWzAtOV0rKSgtP1swLTldKikkLyxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBfbWF0Y2g6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIG51bWJlcjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZ1xuICAgICAgICAgICAgKTogc3RyaW5nID0+XG4gICAgICAgICAgICAgICAgcHJlZml4ICtcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIChudW1iZXIubGVuZ3RoICUgMiA9PT0gMCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLnJlcGxhY2UoLyhbMC05XXsyfSkvZywgJyQxICcpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlci5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eKFswLTldezN9KShbMC05XSspJC8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWF0Y2g6IHN0cmluZywgdHJpcGxlOiBzdHJpbmcsIHJlc3Q6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk6IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0cmlwbGV9IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0LnJlcGxhY2UoLyhbMC05XXsyfSkvZywgJyQxICcpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSArIHN1ZmZpeFxuICAgICAgICAgICAgICAgICkudHJpbSgpXG4gICAgICAgICkudHJpbSgpXG4gICAgfVxuXG4gICAgcmV0dXJuICcnXG59XG4vKipcbiAqIFNsaWNlcyBhbGwgbm9uZSBudW1iZXJzIGJ1dCBwcmVzZXJ2ZXMgbGFzdCBzZXBhcmF0b3IuXG4gKiBAcGFyYW0gdmFsdWUgLSBTdHJpbmcgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIC0gU2xpY2VkIGdpdmVuIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3Qgc2xpY2VBbGxFeGNlcHROdW1iZXJBbmRMYXN0U2VwYXJhdG9yID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIC8qXG4gICAgICAgIDE6IGJhc2VOdW1iZXJcbiAgICAgICAgMjogZGlyZWN0RGlhbGluZ051bWJlclN1ZmZpeFxuICAgICovXG4gICAgY29uc3QgY29tcGlsZWRQYXR0ZXJuID0gL14oLipbMC05XS4qKS0oWzAtOV0rKSQvXG4gICAgaWYgKGNvbXBpbGVkUGF0dGVybi50ZXN0KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoY29tcGlsZWRQYXR0ZXJuLCAoXG4gICAgICAgICAgICBfbWF0Y2g6IHN0cmluZyxcbiAgICAgICAgICAgIGJhc2VOdW1iZXI6IHN0cmluZyxcbiAgICAgICAgICAgIGRpcmVjdERpYWxpbmdOdW1iZXJTdWZmaXg6IHN0cmluZ1xuICAgICAgICApOiBzdHJpbmcgPT5cbiAgICAgICAgICAgIGAke2Jhc2VOdW1iZXIucmVwbGFjZSgvW14wLTldKy9nLCAnJyl9LWAgK1xuICAgICAgICAgICAgZGlyZWN0RGlhbGluZ051bWJlclN1ZmZpeFxuICAgICAgICApXG5cbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW14wLTldKy9nLCAnJylcbn1cbi8qKlxuICogQ29udmVydHMgYSBkb20gc2VsZWN0b3IgdG8gYSBwcmVmaXhlZCBkb20gc2VsZWN0b3Igc3RyaW5nLlxuICogQHBhcmFtIHNlbGVjdG9yIC0gQSBkb20gbm9kZSBzZWxlY3Rvci5cbiAqIEBwYXJhbSBzZWxlY3RvclByZWZpeCAtIEEgZG9tIG5vZGUgc2VsZWN0b3IgcHJlZml4IHRvIHRha2UgaW50byBhY2NvdW50LlxuICogQHJldHVybnMgUmV0dXJucyBnaXZlbiBzZWxlY3RvciBwcmVmaXhlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZURvbU5vZGVTZWxlY3RvciA9IChcbiAgICBzZWxlY3Rvcjogc3RyaW5nLCBzZWxlY3RvclByZWZpeCA9ICcnXG4pOiBzdHJpbmcgPT4ge1xuICAgIGxldCBkb21Ob2RlU2VsZWN0b3JQcmVmaXggPSAnJ1xuICAgIGlmIChzZWxlY3RvclByZWZpeClcbiAgICAgICAgZG9tTm9kZVNlbGVjdG9yUHJlZml4ID0gYCR7c2VsZWN0b3JQcmVmaXh9IGBcbiAgICBpZiAoIShcbiAgICAgICAgc2VsZWN0b3Iuc3RhcnRzV2l0aChkb21Ob2RlU2VsZWN0b3JQcmVmaXgpIHx8XG4gICAgICAgIHNlbGVjdG9yLnRyaW0oKS5zdGFydHNXaXRoKCc8JylcbiAgICApKVxuICAgICAgICBzZWxlY3RvciA9IGRvbU5vZGVTZWxlY3RvclByZWZpeCArIHNlbGVjdG9yXG5cbiAgICByZXR1cm4gc2VsZWN0b3IudHJpbSgpXG59XG4vKipcbiAqIEFiYnJldmlhdGVzIGEgZ2l2ZW4gc3RyaW5nIGlmIGl0IGV4Y2Vzc2VzIGEgZ2l2ZW4gbGltaXQuXG4gKiBAcGFyYW0gdmFsdWUgLSBTdHJpbmcgdG8gYWJicmV2aWF0ZS5cbiAqIEBwYXJhbSBsaW1pdCAtIE1heGltdW0gbGVuZ3RoIG9mIHByb2Nlc3NlZCBzdHJpbmcuXG4gKiBAcmV0dXJucyBBYmJyZXZpYXRlZCBnaXZlbiBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBsaW1pdCA9ICh2YWx1ZTogc3RyaW5nLCBsaW1pdCA9IDEwMCkgPT4ge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPD0gbGltaXQpXG4gICAgICAgIHJldHVybiB2YWx1ZVxuXG4gICAgY29uc3QgZG90cyA9ICcuLi4nXG4gICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBsaW1pdCAtIGRvdHMubGVuZ3RoKSArIGRvdHNcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsU0FDSSxpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixPQUFPO0FBR1gsU0FDSSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCO0FBRTVELFNBQVEsYUFBYSxFQUFFLDRCQUE0QjtBQUNuRCxTQUFRLFVBQVUsRUFBRSxPQUFPO0FBQzNCLFNBQVEsYUFB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
package/dist/type.js CHANGED
@@ -18,4 +18,4 @@
18
18
  */
19
19
  // region imports
20
20
  export {};
21
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3R5cGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gLSotIGNvZGluZzogdXRmLTggLSotXG4vKiogQG1vZHVsZSB0eXBlICovXG4ndXNlIHN0cmljdCdcbi8qICFcbiAgICByZWdpb24gaGVhZGVyXG4gICAgW1Byb2plY3QgcGFnZV0oaHR0cHM6Ly90b3JiZW4ud2Vic2l0ZS9jbGllbnRub2RlKVxuXG4gICAgQ29weXJpZ2h0IFRvcmJlbiBTaWNrZXJ0IChpbmZvW1wifmF0flwiXXRvcmJlbi53ZWJzaXRlKSAxNi4xMi4yMDEyXG5cbiAgICBMaWNlbnNlXG4gICAgLS0tLS0tLVxuXG4gICAgVGhpcyBsaWJyYXJ5IHdyaXR0ZW4gYnkgVG9yYmVuIFNpY2tlcnQgc3RhbmRzIHVuZGVyIGEgY3JlYXRpdmUgY29tbW9uc1xuICAgIG5hbWluZyAzLjAgdW5wb3J0ZWQgbGljZW5zZS5cbiAgICBTZWUgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC9kZWVkLmRlXG4gICAgZW5kcmVnaW9uXG4qL1xuLy8gcmVnaW9uIGltcG9ydHNcbmltcG9ydCB0eXBlIHtNYXRjaGVyc30gZnJvbSAnZXhwZWN0J1xuaW1wb3J0IHR5cGUge0RpcmVudCBhcyBEaXJlY3RvcnlFbnRyeSwgU3RhdHMgYXMgRmlsZVN0YXRzfSBmcm9tICdmcydcblxuaW1wb3J0IHR5cGUge0xldmVsfSBmcm9tICcuL0xvZ2dlcidcblxuaW1wb3J0IHR5cGUge1xuICAgIFRFU1RfREVGSU5FRF9TWU1CT0wsIFRFU1RfVEhST1dfU1lNQk9MLCBURVNUX1VOREVGSU5FRF9TWU1CT0xcbn0gZnJvbSAnLi90ZXN0LWhlbHBlcidcbi8vIGVuZHJlZ2lvblxuLy8gcmVnaW9uIGV4cG9ydHNcbi8vLyByZWdpb24gaGVscGVyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5leHBvcnQgdHlwZSBBbnlGdW5jdGlvbiA9ICguLi5wYXJhbWV0ZXJzOiBBcnJheTxhbnk+KSA9PiBhbnlcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5leHBvcnQgdHlwZSBVbnBhY2tlZDxUPiA9IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/XG4gICAgVSA6XG4gICAgVCBleHRlbmRzICguLi5wYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPikgPT4gaW5mZXIgVSA/XG4gICAgICAgIFUgOlxuICAgICAgICBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPiA/XG4gICAgICAgICAgICBVIDpcbiAgICAgICAgICAgIFRcblxuZXhwb3J0IHR5cGUgRmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5bMF1cbmV4cG9ydCB0eXBlIFNlY29uZFBhcmFtZXRlcjxGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbj4gPVxuICAgIFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPlsxXVxuZXhwb3J0IHR5cGUgVGhpcmRQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5bMl1cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmV4cG9ydCB0eXBlIFBhcmFtZXRlcnNFeGNlcHRGaXJzdDxGdW5jdGlvblR5cGU+ID0gRnVuY3Rpb25UeXBlIGV4dGVuZHNcbiAgICAocGFyYW1ldGVyOiBhbnksIC4uLmFkZGl0aW9uYWxQYXJhbWV0ZXJzOiBpbmZlciBBZGRpdGlvbmFsUGFyYW1ldGVycykgPT5cbiAgICAgICAgYW55ID9cbiAgICAgICAgICAgIEFkZGl0aW9uYWxQYXJhbWV0ZXJzIDpcbiAgICAgICAgICAgIFtdXG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25UZXN0VHVwbGU8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBbUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+LCAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5dXG5leHBvcnQgdHlwZSBGdW5jdGlvblRlc3RBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlVHVwbGU8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb25cbj4gPSBbUHJvbWlzZTxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LCAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5dXG5leHBvcnQgdHlwZSBGdW5jdGlvblRlc3RQcm9taXNlVHVwbGU8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBbVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LCAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5dXG5leHBvcnQgdHlwZSBGdW5jdGlvblRlc3RQcm9taXNlQWdhaW5zdFJlc29sdmVkUHJvbWlzZVR1cGxlPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uXG4+ID0gW1xuICAgIFByb21pc2U8VGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+PixcbiAgICAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5cbl1cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uVGVzdFByb21pc2VSZWplY3Rpb25UdXBsZTxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvblxuPiA9IFtFcnJvciwgLi4uUGFyYW1ldGVyczxGdW5jdGlvblR5cGU+XVxuZXhwb3J0IHR5cGUgRnVuY3Rpb25UZXN0UHJvbWlzZVJlamVjdGlvbkFnYWluc3RSZXNvbHZlZFByb21pc2VUdXBsZTxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvblxuPiA9IFtQcm9taXNlPEVycm9yPiwgLi4uUGFyYW1ldGVyczxGdW5jdGlvblR5cGU+XVxuXG5leHBvcnQgdHlwZSBUZXN0U3ltYm9sID0gKFxuICAgIHR5cGVvZiBURVNUX0RFRklORURfU1lNQk9MIHxcbiAgICB0eXBlb2YgVEVTVF9USFJPV19TWU1CT0wgfFxuICAgIHR5cGVvZiBURVNUX1VOREVGSU5FRF9TWU1CT0xcbilcblxuZXhwb3J0IHR5cGUgVGhlblBhcmFtZXRlcjxUeXBlPiA9IFR5cGUgZXh0ZW5kcyBQcm9taXNlTGlrZTxpbmZlciBVPiA/IFUgOiBUeXBlXG5leHBvcnQgdHlwZSBUaGVuUGFyYW1ldGVyUmVjdXJzaXZlPFR5cGU+ID1cbiAgICBUeXBlIGV4dGVuZHMgUHJvbWlzZUxpa2U8aW5mZXIgVT4gPyBUaGVuUGFyYW1ldGVyUmVjdXJzaXZlPFU+IDogVHlwZVxuXG5leHBvcnQgdHlwZSBWYWx1ZU9mPFR5cGU+ID0gVHlwZVtrZXlvZiBUeXBlXVxuXG5leHBvcnQgdHlwZSBSZWN1cnNpdmVOb25OdWxsYWJsZTxUeXBlPiA9IHtcbiAgICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZV06IFR5cGVbUHJvcGVydHldIGV4dGVuZHMgQXJyYXk8aW5mZXIgT3RoZXJUeXBlPiA/XG4gICAgICAgIEFycmF5PFJlY3Vyc2l2ZU5vbk51bGxhYmxlPE90aGVyVHlwZT4+IDpcbiAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBBbnlGdW5jdGlvbiA/XG4gICAgICAgICAgICBOb25OdWxsYWJsZTxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBNYXBwaW5nPHVua25vd24+ID9cbiAgICAgICAgICAgICAgICBSZWN1cnNpdmVOb25OdWxsYWJsZTxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgIE5vbk51bGxhYmxlPFR5cGVbUHJvcGVydHldPlxufVxuZXhwb3J0IHR5cGUgUmVjdXJzaXZlUGFydGlhbDxUeXBlPiA9XG4gICAgUGFydGlhbDxUeXBlPiB8XG4gICAge1xuICAgICAgICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZV0/OiBUeXBlW1xuICAgICAgICAgICAgUHJvcGVydHlcbiAgICAgICAgXSBleHRlbmRzIEFycmF5PGluZmVyIE90aGVyVHlwZT4gP1xuICAgICAgICAgICAgQXJyYXk8UmVjdXJzaXZlUGFydGlhbDxPdGhlclR5cGU+PiA6XG4gICAgICAgICAgICBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIEFueUZ1bmN0aW9uID9cbiAgICAgICAgICAgICAgICBQYXJ0aWFsPFR5cGVbUHJvcGVydHldPiA6XG4gICAgICAgICAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBNYXBwaW5nPHVua25vd24+ID9cbiAgICAgICAgICAgICAgICAgICAgUmVjdXJzaXZlUGFydGlhbDxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgICAgICBQYXJ0aWFsPFR5cGVbUHJvcGVydHldPlxuICAgIH1cblxuZXhwb3J0IHR5cGUgRmlsZVRyYXZlcnNlUmVzdWx0ID1cbiAgICBmYWxzZSB8IG51bGwgfCBQcm9taXNlPGZhbHNlIHwgbnVsbCB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWRcblxuZXhwb3J0IHR5cGUgVGVzdE1hdGNoZXJzPFQgZXh0ZW5kcyBQcm9taXNlPHZvaWQ+IHwgdm9pZD4gPVxuICAgIE1hdGNoZXJzPFQ+ICYge25vdDogTWF0Y2hlcnM8VD59XG4vLy8gZW5kcmVnaW9uXG4vLy8gcmVnaW9uIG5hdGl2ZVxuZXhwb3J0IHR5cGUgSW1wb3J0RnVuY3Rpb24gPVxuICAgIChpZDogc3RyaW5nKSA9PiBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIHJlcXVpcmU+PlxuZXhwb3J0IHR5cGUgSFRNTEl0ZW0gPSBDb21tZW50IHwgSFRNTEVsZW1lbnQgfCBUZXh0XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZSA9IGJvb2xlYW4gfCBudWxsIHwgbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG5leHBvcnQgdHlwZSBNYXBwaW5nPFYgPSBzdHJpbmcsIEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gUmVjb3JkPEssIFY+XG4vLyBOT1RFOiBNYXBwaW5nIGNhbm5vdCBiZSB1c2VkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbmV4cG9ydCB0eXBlIFBsYWluT2JqZWN0PFYgPSBQcmltaXRpdmUsIEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID1cbiAgICB7W2tleSBpbiBLXTogQXJyYXk8UGxhaW5PYmplY3Q8ViwgSz4gfCBWPiB8IFBsYWluT2JqZWN0PFYsIEs+IHwgVn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eUhhbmRsZXI8VCA9IHVua25vd24+IHtcbiAgICBkZWxldGVQcm9wZXJ0eTogKHRhcmdldDogVCwga2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IGJvb2xlYW5cbiAgICBnZXQ6ICh0YXJnZXQ6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiB1bmtub3duXG4gICAgaGFzOiAodGFyZ2V0OiBULCBrZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4gYm9vbGVhblxuICAgIHNldDogKHRhcmdldDogVCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duKSA9PiBib29sZWFuXG59XG5leHBvcnQgdHlwZSBQcm94eVR5cGU8VCA9IHVua25vd24+ID0gVCAmIHtcbiAgICBfX3Jldm9rZV9fPzogKCkgPT4gdm9pZFxuICAgIF9fdGFyZ2V0X186IFRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb29raWVPcHRpb25zIHtcbiAgICBkb21haW46IHN0cmluZ1xuICAgIGh0dHBPbmx5OiBib29sZWFuXG4gICAgbWluaW1hbDogYm9vbGVhblxuICAgIG51bWJlck9mRGF5c1VudGlsRXhwaXJhdGlvbjogbnVtYmVyXG4gICAgcGF0aDogc3RyaW5nXG4gICAgc2FtZVNpdGU6ICdMYXgnIHwgJ05vbmUnIHwgJ1N0cmljdCcgfCAnJ1xuICAgIHNlY3VyZTogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtub3duV2luZG93RXZlbnRNYXAgZXh0ZW5kcyBXaW5kb3dFdmVudE1hcCB7XG4gICAgRE9NTW91c2VTY3JvbGw6IEV2ZW50XG4gICAgbW91c2V3aGVlbDogRXZlbnRcbn1cbmV4cG9ydCB0eXBlIEtub3duRXZlbnROYW1lID0ga2V5b2YgS25vd25XaW5kb3dFdmVudE1hcFxuLy8vLyByZWdpb24gZnVuY3Rpb25zXG5leHBvcnQgdHlwZSBVbmtub3duRnVuY3Rpb24gPSAoLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+IHVua25vd25cbmV4cG9ydCB0eXBlIEFycmF5VHJhbnNmb3JtZXI8VCA9IHVua25vd24sIFIgPSB1bmtub3duLCBQID0gdW5rbm93bj4gPSAoXG4gICAgZGF0YTogQXJyYXk8VD4sIC4uLmFkZGl0aW9uYWxQYXJhbWV0ZXI6IEFycmF5PFA+XG4pID0+IEFycmF5PFI+XG5cbmV4cG9ydCB0eXBlIFN5bmNocm9ub3VzUHJvY2VkdXJlRnVuY3Rpb24gPSAoLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+XG4gICAgdm9pZFxuZXhwb3J0IHR5cGUgQXN5bmNocm9ub3VzUHJvY2VkdXJlRnVuY3Rpb24gPSAoLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+XG4gICAgUHJvbWlzZTx2b2lkPlxuZXhwb3J0IHR5cGUgUHJvY2VkdXJlRnVuY3Rpb24gPVxuICAgIEFzeW5jaHJvbm91c1Byb2NlZHVyZUZ1bmN0aW9uIHwgU3luY2hyb25vdXNQcm9jZWR1cmVGdW5jdGlvblxuXG5leHBvcnQgdHlwZSBHZXR0ZXJGdW5jdGlvbiA9XG4gICAgKGtleU9yVmFsdWU6IHVua25vd24sIGtleTogc3RyaW5nIHwgc3ltYm9sLCB0YXJnZXQ6IHVua25vd24pID0+IHVua25vd25cbmV4cG9ydCB0eXBlIFNldHRlckZ1bmN0aW9uID1cbiAgICAoa2V5OiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duLCB0YXJnZXQ6IHVua25vd24pID0+IHVua25vd25cbi8vLy8gZW5kcmVnaW9uXG4vLy8gZW5kcmVnaW9uXG4vLy8gcmVnaW9uIGhlbHBlclxuZXhwb3J0IGludGVyZmFjZSBDaGVja1JlYWNoYWJpbGl0eU9wdGlvbnMge1xuICAgIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyXG4gICAgZXhwZWN0ZWRJbnRlcm1lZGlhdGVTdGF0dXNDb2RlczogQXJyYXk8bnVtYmVyPiB8IG51bWJlclxuICAgIG9wdGlvbnM6IFJlcXVlc3RJbml0XG4gICAgcG9sbEludGVydmFsbEluU2Vjb25kczogbnVtYmVyXG4gICAgc3RhdHVzQ29kZXM6IEFycmF5PG51bWJlcj4gfCBudW1iZXJcbiAgICB0aW1lb3V0SW5TZWNvbmRzOiBudW1iZXJcbiAgICB3YWl0OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyZU9wdGlvbnMge1xuICAgIGNvbXBhcmVCbG9iczogYm9vbGVhblxuICAgIGRlZXA6IG51bWJlclxuICAgIGV4Y2VwdGlvblByZWZpeGVzOiBBcnJheTxzdHJpbmc+XG4gICAgaWdub3JlRnVuY3Rpb25zOiBib29sZWFuXG4gICAgcHJvcGVydGllczogQXJyYXk8c3RyaW5nPiB8IG51bGxcbiAgICByZXR1cm5SZWFzb25JZk5vdEVxdWFsOiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIEVuY29kaW5nID1cbiAgICAnYXNjaWknIHxcbiAgICAnYmFzZTY0JyB8XG4gICAgJ2Jhc2U2NHVybCcgfFxuICAgICdiaW5hcnknIHxcbiAgICAnaGV4JyB8XG4gICAgJ2xhdGluMScgfFxuICAgICd1Y3MyJyB8XG4gICAgJ3Vjcy0yJyB8XG4gICAgJ3V0ZjgnIHxcbiAgICAndXRmMTZsZScgfFxuICAgICd1dGYtOCdcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZSB7XG4gICAgZGlyZWN0b3J5UGF0aDogc3RyaW5nXG4gICAgZGlyZWN0b3J5RW50cnk6IERpcmVjdG9yeUVudHJ5IHwgbnVsbFxuICAgIGVycm9yOiBFcnJvciB8IG51bGxcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBwYXRoOiBzdHJpbmdcbiAgICBzdGF0czogRmlsZVN0YXRzIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPlxuICAgIHJldHVybkNvZGU6IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBRdWVyeVBhcmFtZXRlcnMgPVxuICAgIEFycmF5PEFycmF5PHN0cmluZz4gfCBzdHJpbmc+ICYgTWFwcGluZzxBcnJheTxzdHJpbmc+IHwgc3RyaW5nPlxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRQcm9taXNlIGV4dGVuZHMgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY2xlYXI6ICgpID0+IHZvaWRcbiAgICB0aW1lb3V0SUQ6IE5vZGVKUy5UaW1lb3V0XG59XG5cbi8vIE5PVEU6IE1hcHBpbmcgY2Fubm90IGJlIHVzZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzLlxuZXhwb3J0IHR5cGUgT2JqZWN0TWFzayA9IEFycmF5PHN0cmluZz4gfCBib29sZWFuIHwge1trZXk6IHN0cmluZ106IE9iamVjdE1hc2t9XG5leHBvcnQgdHlwZSBOb3JtYWxpemVkT2JqZWN0TWFzayA9IGJvb2xlYW4gfCBNYXBwaW5nPE9iamVjdE1hc2s+XG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdE1hc2tDb25maWd1cmF0aW9uIHtcbiAgICBleGNsdWRlPzogT2JqZWN0TWFza1xuICAgIGluY2x1ZGU/OiBPYmplY3RNYXNrXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwcmVzc2lvbk9wdGlvbnMge1xuICAgIGFzeW5jOiBib29sZWFuXG4gICAgZXhlY3V0ZTogYm9vbGVhblxuICAgIHJlbW92ZUdsb2JhbFNjb3BlOiBib29sZWFuXG4gICAgYmluZGluZzogdW5rbm93blxufVxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlRXhwcmVzc2lvbk9wdGlvbnM8XG4gICAgTiBleHRlbmRzIEFycmF5PHN0cmluZz4gPSBBcnJheTxzdHJpbmc+XG4+IGV4dGVuZHMgRXhwcmVzc2lvbk9wdGlvbnMge1xuICAgIHNjb3BlOiBNYXBwaW5nPHVua25vd24+IHwgTiB8IE5bbnVtYmVyXSB8IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZUV4cHJlc3Npb25PcHRpb25zPFxuICAgIFMgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Rcbj4gZXh0ZW5kcyBFeHByZXNzaW9uT3B0aW9ucyB7XG4gICAgc2NvcGU6IFNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZU9iamVjdCB7XG4gICAgX19ldmFsdWF0ZV9fOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZU9iamVjdCB7XG4gICAgX19leGVjdXRlX186IHN0cmluZ1xufVxuZXhwb3J0IHR5cGUgRXZhbHVhdGVhYmxlID0gRXZhbHVhdGVPYmplY3QgfCBFeGVjdXRlT2JqZWN0XG5leHBvcnQgdHlwZSBFdmFsdWF0ZWRPYmplY3Q8VHlwZSBleHRlbmRzIG9iamVjdD4gPSB7XG4gICAgW1Byb3BlcnR5IGluIGtleW9mIFR5cGVdOiAoXG4gICAgICAgIFR5cGVbUHJvcGVydHldIGV4dGVuZHMgRXZhbHVhdGVhYmxlID9cbiAgICAgICAgICAgIHVua25vd24gOlxuICAgICAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBvYmplY3QgP1xuICAgICAgICAgICAgICAgIEV2YWx1YXRlZE9iamVjdDxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgIFR5cGVbUHJvcGVydHldXG4gICAgICAgIClcbn1cbmV4cG9ydCB0eXBlIFJlY3Vyc2l2ZUV2YWx1YXRlYWJsZTxUeXBlPiA9XG4gICAgRXZhbHVhdGVhYmxlIHxcbiAgICB7XG4gICAgICAgIFtQcm9wZXJ0eSBpbiBrZXlvZiBUeXBlXTogKFxuICAgICAgICAgICAgRXZhbHVhdGVhYmxlIHwgKFR5cGVbUHJvcGVydHldIGV4dGVuZHMgQXJyYXk8aW5mZXIgT3RoZXJUeXBlPiA/XG4gICAgICAgICAgICAgICAgQXJyYXk8UmVjdXJzaXZlRXZhbHVhdGVhYmxlPE90aGVyVHlwZT4+IDpcbiAgICAgICAgICAgICAgICBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIE1hcHBpbmc8dW5rbm93bj4gP1xuICAgICAgICAgICAgICAgICAgICBSZWN1cnNpdmVFdmFsdWF0ZWFibGU8VHlwZVtQcm9wZXJ0eV0+IDpcbiAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGVhYmxlIHwgVHlwZVtQcm9wZXJ0eV1cbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuZXhwb3J0IGludGVyZmFjZSBBc3luY0V2YWx1YXRlT2JqZWN0IHtcbiAgICBfX2F3YWl0X2V2YWx1YXRlX186IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBBc3luY0V4ZWN1dGVPYmplY3Qge1xuICAgIF9fYXdhaXRfZXhlY3V0ZV9fOiBzdHJpbmdcbn1cbmV4cG9ydCB0eXBlIEFzeW5jRXZhbHVhdGVhYmxlID0gQXN5bmNFdmFsdWF0ZU9iamVjdCB8IEFzeW5jRXhlY3V0ZU9iamVjdFxuXG5leHBvcnQgdHlwZSBBc3luY0V2YWx1YXRlZE9iamVjdDxUeXBlIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZV06IChcbiAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBBc3luY0V2YWx1YXRlYWJsZSA/XG4gICAgICAgICAgICB1bmtub3duIDpcbiAgICAgICAgICAgIFR5cGVbUHJvcGVydHldIGV4dGVuZHMgb2JqZWN0ID9cbiAgICAgICAgICAgICAgICBBc3luY0V2YWx1YXRlZE9iamVjdDxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgIFR5cGVbUHJvcGVydHldXG4gICAgICAgIClcbn1cbmV4cG9ydCB0eXBlIFJlY3Vyc2l2ZUFzeW5jRXZhbHVhdGVhYmxlPFR5cGU+ID1cbiAgICBBc3luY0V2YWx1YXRlYWJsZSB8XG4gICAge1xuICAgICAgICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZV06IChcbiAgICAgICAgQXN5bmNFdmFsdWF0ZWFibGUgfCAoXG4gICAgICAgICAgICBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIEFycmF5PGluZmVyIE90aGVyVHlwZT4gP1xuICAgICAgICAgICAgICAgIEFycmF5PFJlY3Vyc2l2ZUFzeW5jRXZhbHVhdGVhYmxlPE90aGVyVHlwZT4+IDpcbiAgICAgICAgICAgICAgICBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIE1hcHBpbmc8dW5rbm93bj4gP1xuICAgICAgICAgICAgICAgICAgICBSZWN1cnNpdmVBc3luY0V2YWx1YXRlYWJsZTxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgICAgICBBc3luY0V2YWx1YXRlYWJsZSB8IFR5cGVbUHJvcGVydHldXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgfVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlT3B0aW9ucyB7XG4gICAgYm91bmRhcnlDb3VudDogbnVtYmVyXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW5cbiAgICBoaWRlTmV4dEJ1dHRvbjogYm9vbGVhblxuICAgIGhpZGVQcmV2QnV0dG9uOiBib29sZWFuXG4gICAgcGFnZTogbnVtYmVyXG4gICAgcGFnZVNpemU/OiBudWxsIHwgbnVtYmVyXG4gICAgc2hvd0ZpcnN0QnV0dG9uOiBib29sZWFuXG4gICAgc2hvd0xhc3RCdXR0b246IGJvb2xlYW5cbiAgICBzaWJsaW5nQ291bnQ6IG51bWJlclxuICAgIHRvdGFsOiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZSB7XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW5cbiAgICBwYWdlPzogbnVtYmVyXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW5cbiAgICB0eXBlOiBQYWdlVHlwZVxufVxuZXhwb3J0IHR5cGUgUGFnZVR5cGUgPVxuICAgICdlbmQtZWxsaXBzaXMnIHxcbiAgICAnZmlyc3QnIHxcbiAgICAnbGFzdCcgfFxuICAgICduZXh0JyB8XG4gICAgJ3BhZ2UnIHxcbiAgICAncHJldmlvdXMnIHxcbiAgICAnc3RhcnQtZWxsaXBzaXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgT2Zmc2V0IHtcbiAgICBsZWZ0OiBudW1iZXJcbiAgICB0b3A6IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbiBleHRlbmRzIE9mZnNldCB7XG4gICAgYm90dG9tOiBudW1iZXJcbiAgICByaWdodDogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIFByb2Nlc3NIYW5kbGVyID1cbiAgICAocmV0dXJuQ29kZTogdW5rbm93biwgLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+IHZvaWRcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0Nsb3NlUmVhc29uIHtcbiAgICBwYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPlxuICAgIHJlYXNvbjogdW5rbm93blxufVxuZXhwb3J0IHR5cGUgUHJvY2Vzc0Nsb3NlQ2FsbGJhY2sgPSAocmVhc29uOiBQcm9jZXNzQ2xvc2VSZWFzb24pID0+IHZvaWRcbmV4cG9ydCB0eXBlIFByb2Nlc3NFcnJvckNhbGxiYWNrID0gKHJlYXNvbjogUHJvY2Vzc0Vycm9yKSA9PiB2b2lkXG5cbmV4cG9ydCB0eXBlIFJlbGF0aXZlUG9zaXRpb24gPSAnYWJvdmUnIHwgJ2JlbG93JyB8ICdpbicgfCAnbGVmdCcgfCAncmlnaHQnXG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlRnVuY3Rpb248VHlwZSA9IHN0cmluZz4gPVxuICAgICguLi5wYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPikgPT4gVHlwZVxuZXhwb3J0IGludGVyZmFjZSBDb21waWxhdGlvblJlc3VsdDxcbiAgICBUID0gc3RyaW5nLCBOIGV4dGVuZHMgQXJyYXk8c3RyaW5nPiA9IEFycmF5PHN0cmluZz5cbj4ge1xuICAgIGVycm9yOiBudWxsIHwgc3RyaW5nXG5cbiAgICBnbG9iYWxOYW1lczogQXJyYXk8c3RyaW5nPlxuICAgIGdsb2JhbE5hbWVzVW5kZWZpbmVkTGlzdDogQXJyYXk8dW5kZWZpbmVkPlxuICAgIG9yaWdpbmFsU2NvcGVOYW1lczogTlxuICAgIHNjb3BlTmFtZU1hcHBpbmc6IFJlY29yZDxOW251bWJlcl0sIHN0cmluZz5cbiAgICBzY29wZU5hbWVzOiBBcnJheTxzdHJpbmc+XG5cbiAgICB0ZW1wbGF0ZUZ1bmN0aW9uOiBUZW1wbGF0ZUZ1bmN0aW9uPFQ+XG59XG5leHBvcnQgaW50ZXJmYWNlIE5lZ2F0aXZlRXZhbHVhdGlvblJlc3VsdCB7XG4gICAgY29tcGlsZUVycm9yOiBudWxsIHwgc3RyaW5nXG4gICAgZXJyb3I6IHN0cmluZ1xuICAgIHJlc3VsdDogdW5kZWZpbmVkXG4gICAgcnVudGltZUVycm9yOiBudWxsIHwgc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aXZlRXZhbHVhdGlvblJlc3VsdDxUeXBlID0gc3RyaW5nPiB7XG4gICAgY29tcGlsZUVycm9yOiBudWxsXG4gICAgZXJyb3I6IG51bGxcbiAgICByZXN1bHQ6IFR5cGVcbiAgICBydW50aW1lRXJyb3I6IG51bGxcbn1cbmV4cG9ydCB0eXBlIEV2YWx1YXRpb25SZXN1bHQ8VHlwZSA9IHN0cmluZz4gPVxuICAgIFBvc2l0aXZlRXZhbHVhdGlvblJlc3VsdDxUeXBlPiB8IE5lZ2F0aXZlRXZhbHVhdGlvblJlc3VsdFxuXG5leHBvcnQgdHlwZSBMb2NrQ2FsbGJhY2tGdW5jdGlvbjxUeXBlPiA9XG4gICAgKGRlc2NyaXB0aW9uPzogc3RyaW5nKSA9PiBQcm9taXNlPFR5cGU+IHwgVHlwZVxuLy8vIGVuZHJlZ2lvblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXJrT3B0aW9ucyB7XG4gICAgbWFya2VyOlxuICAgICAgICAoKGZvdW5kV29yZDogc3RyaW5nLCBtYXJrZWRUYXJnZXQ6IEFycmF5PHVua25vd24+KSA9PiB1bmtub3duKSB8IHN0cmluZ1xuICAgIG5vcm1hbGl6ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nXG4gICAgc2tpcFRhZ0RlbGltaXRlZFBhcnRzOiBudWxsIHwgW3N0cmluZywgc3RyaW5nXVxufVxuZXhwb3J0IGludGVyZmFjZSBJbnRlcnJ1cHRhYmxlU2Nyb2xsVG9PcHRpb25zIHtcbiAgICB0YXJnZXREb21Ob2RlOiBIVE1MRWxlbWVudFxuICAgIGNvbnRhaW5lckRvbU5vZGU6IEhUTUxFbGVtZW50IHwgV2luZG93XG4gICAgZHVyYXRpb25Jbk1pbGxpc2Vjb25kczogbnVtYmVyXG4gICAgaW50ZXJydXB0T25NYW51YWxTY3JvbGw6IGJvb2xlYW5cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgdG9wOiBudW1iZXJcbiAgICAgICAgbGVmdDogbnVtYmVyXG4gICAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBHaXZlbkludGVycnVwdGFibGVTY3JvbGxUb09wdGlvbnNcbiAgICBleHRlbmRzXG5QYXJ0aWFsPFNjcm9sbFRvT3B0aW9ucz4ge1xuICAgIHRhcmdldERvbU5vZGU/OiBOb2RlIHwgbnVsbFxuICAgIGNvbnRhaW5lckRvbU5vZGU/OiBOb2RlIHwgbnVsbCB8IFdpbmRvd1xuICAgIG9mZnNldD86IFBhcnRpYWw8SW50ZXJydXB0YWJsZVNjcm9sbFRvT3B0aW9uc1snb2Zmc2V0J10+XG59XG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlck9wdGlvbnMge1xuICAgIGxldmVsOiBMZXZlbFxuICAgIG5hbWU6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZUR5bmFtaWNEYXRhT3B0aW9ucyB7XG4gICAgc2NvcGU6IE1hcHBpbmc8dW5rbm93bj5cbiAgICBzZWxmUmVmZXJlbmNlTmFtZTogc3RyaW5nXG4gICAgZXhwcmVzc2lvbkluZGljYXRvcktleTogc3RyaW5nXG4gICAgZXhlY3V0aW9uSW5kaWNhdG9yS2V5OiBzdHJpbmdcbn1cbi8vIGVuZHJlZ2lvblxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsWUFBWTs7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
21
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3R5cGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gLSotIGNvZGluZzogdXRmLTggLSotXG4vKiogQG1vZHVsZSB0eXBlICovXG4ndXNlIHN0cmljdCdcbi8qICFcbiAgICByZWdpb24gaGVhZGVyXG4gICAgW1Byb2plY3QgcGFnZV0oaHR0cHM6Ly90b3JiZW4ud2Vic2l0ZS9jbGllbnRub2RlKVxuXG4gICAgQ29weXJpZ2h0IFRvcmJlbiBTaWNrZXJ0IChpbmZvW1wifmF0flwiXXRvcmJlbi53ZWJzaXRlKSAxNi4xMi4yMDEyXG5cbiAgICBMaWNlbnNlXG4gICAgLS0tLS0tLVxuXG4gICAgVGhpcyBsaWJyYXJ5IHdyaXR0ZW4gYnkgVG9yYmVuIFNpY2tlcnQgc3RhbmRzIHVuZGVyIGEgY3JlYXRpdmUgY29tbW9uc1xuICAgIG5hbWluZyAzLjAgdW5wb3J0ZWQgbGljZW5zZS5cbiAgICBTZWUgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC9kZWVkLmRlXG4gICAgZW5kcmVnaW9uXG4qL1xuLy8gcmVnaW9uIGltcG9ydHNcbmltcG9ydCB0eXBlIHtNYXRjaGVyc30gZnJvbSAnZXhwZWN0J1xuaW1wb3J0IHR5cGUge0RpcmVudCBhcyBEaXJlY3RvcnlFbnRyeSwgU3RhdHMgYXMgRmlsZVN0YXRzfSBmcm9tICdmcydcblxuaW1wb3J0IHR5cGUge0xldmVsfSBmcm9tICcuL0xvZ2dlcidcblxuaW1wb3J0IHR5cGUge1xuICAgIFRFU1RfREVGSU5FRF9TWU1CT0wsIFRFU1RfVEhST1dfU1lNQk9MLCBURVNUX1VOREVGSU5FRF9TWU1CT0xcbn0gZnJvbSAnLi90ZXN0LWhlbHBlcidcbi8vIGVuZHJlZ2lvblxuLy8gcmVnaW9uIGV4cG9ydHNcbi8vLyByZWdpb24gaGVscGVyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5leHBvcnQgdHlwZSBBbnlGdW5jdGlvbiA9ICguLi5wYXJhbWV0ZXJzOiBBcnJheTxhbnk+KSA9PiBhbnlcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5leHBvcnQgdHlwZSBVbnBhY2tlZDxUPiA9IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/XG4gICAgVSA6XG4gICAgVCBleHRlbmRzICguLi5wYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPikgPT4gaW5mZXIgVSA/XG4gICAgICAgIFUgOlxuICAgICAgICBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPiA/XG4gICAgICAgICAgICBVIDpcbiAgICAgICAgICAgIFRcblxuZXhwb3J0IHR5cGUgRmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5bMF1cbmV4cG9ydCB0eXBlIFNlY29uZFBhcmFtZXRlcjxGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbj4gPVxuICAgIFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPlsxXVxuZXhwb3J0IHR5cGUgVGhpcmRQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5bMl1cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmV4cG9ydCB0eXBlIFBhcmFtZXRlcnNFeGNlcHRGaXJzdDxGdW5jdGlvblR5cGU+ID0gRnVuY3Rpb25UeXBlIGV4dGVuZHNcbiAgICAocGFyYW1ldGVyOiBhbnksIC4uLmFkZGl0aW9uYWxQYXJhbWV0ZXJzOiBpbmZlciBBZGRpdGlvbmFsUGFyYW1ldGVycykgPT5cbiAgICAgICAgYW55ID9cbiAgICAgICAgICAgIEFkZGl0aW9uYWxQYXJhbWV0ZXJzIDpcbiAgICAgICAgICAgIFtdXG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25UZXN0VHVwbGU8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBbUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+LCAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5dXG5leHBvcnQgdHlwZSBGdW5jdGlvblRlc3RBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlVHVwbGU8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb25cbj4gPSBbUHJvbWlzZTxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LCAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5dXG5leHBvcnQgdHlwZSBGdW5jdGlvblRlc3RQcm9taXNlVHVwbGU8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24+ID1cbiAgICBbVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LCAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5dXG5leHBvcnQgdHlwZSBGdW5jdGlvblRlc3RQcm9taXNlQWdhaW5zdFJlc29sdmVkUHJvbWlzZVR1cGxlPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uXG4+ID0gW1xuICAgIFByb21pc2U8VGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+PixcbiAgICAuLi5QYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5cbl1cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uVGVzdFByb21pc2VSZWplY3Rpb25UdXBsZTxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvblxuPiA9IFtFcnJvciwgLi4uUGFyYW1ldGVyczxGdW5jdGlvblR5cGU+XVxuZXhwb3J0IHR5cGUgRnVuY3Rpb25UZXN0UHJvbWlzZVJlamVjdGlvbkFnYWluc3RSZXNvbHZlZFByb21pc2VUdXBsZTxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvblxuPiA9IFtQcm9taXNlPEVycm9yPiwgLi4uUGFyYW1ldGVyczxGdW5jdGlvblR5cGU+XVxuXG5leHBvcnQgdHlwZSBUZXN0U3ltYm9sID0gKFxuICAgIHR5cGVvZiBURVNUX0RFRklORURfU1lNQk9MIHxcbiAgICB0eXBlb2YgVEVTVF9USFJPV19TWU1CT0wgfFxuICAgIHR5cGVvZiBURVNUX1VOREVGSU5FRF9TWU1CT0xcbilcblxuZXhwb3J0IHR5cGUgVGhlblBhcmFtZXRlcjxUeXBlPiA9IFR5cGUgZXh0ZW5kcyBQcm9taXNlTGlrZTxpbmZlciBVPiA/IFUgOiBUeXBlXG5leHBvcnQgdHlwZSBUaGVuUGFyYW1ldGVyUmVjdXJzaXZlPFR5cGU+ID1cbiAgICBUeXBlIGV4dGVuZHMgUHJvbWlzZUxpa2U8aW5mZXIgVT4gPyBUaGVuUGFyYW1ldGVyUmVjdXJzaXZlPFU+IDogVHlwZVxuXG5leHBvcnQgdHlwZSBWYWx1ZU9mPFR5cGU+ID0gVHlwZVtrZXlvZiBUeXBlXVxuXG5leHBvcnQgdHlwZSBSZWN1cnNpdmVOb25OdWxsYWJsZTxUeXBlPiA9IHtcbiAgICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZV06IFR5cGVbUHJvcGVydHldIGV4dGVuZHMgQXJyYXk8aW5mZXIgT3RoZXJUeXBlPiA/XG4gICAgICAgIEFycmF5PFJlY3Vyc2l2ZU5vbk51bGxhYmxlPE90aGVyVHlwZT4+IDpcbiAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBBbnlGdW5jdGlvbiA/XG4gICAgICAgICAgICBOb25OdWxsYWJsZTxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBNYXBwaW5nPHVua25vd24+ID9cbiAgICAgICAgICAgICAgICBSZWN1cnNpdmVOb25OdWxsYWJsZTxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgIE5vbk51bGxhYmxlPFR5cGVbUHJvcGVydHldPlxufVxuZXhwb3J0IHR5cGUgUmVjdXJzaXZlUGFydGlhbDxUeXBlPiA9XG4gICAgUGFydGlhbDxUeXBlPiB8XG4gICAge1xuICAgICAgICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZV0/OiBUeXBlW1xuICAgICAgICAgICAgUHJvcGVydHlcbiAgICAgICAgXSBleHRlbmRzIEFycmF5PGluZmVyIE90aGVyVHlwZT4gP1xuICAgICAgICAgICAgQXJyYXk8UmVjdXJzaXZlUGFydGlhbDxPdGhlclR5cGU+PiA6XG4gICAgICAgICAgICBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIEFueUZ1bmN0aW9uID9cbiAgICAgICAgICAgICAgICBQYXJ0aWFsPFR5cGVbUHJvcGVydHldPiA6XG4gICAgICAgICAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBNYXBwaW5nPHVua25vd24+ID9cbiAgICAgICAgICAgICAgICAgICAgUmVjdXJzaXZlUGFydGlhbDxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgICAgICBQYXJ0aWFsPFR5cGVbUHJvcGVydHldPlxuICAgIH1cblxuZXhwb3J0IHR5cGUgRmlsZVRyYXZlcnNlUmVzdWx0ID1cbiAgICBmYWxzZSB8IG51bGwgfCBQcm9taXNlPGZhbHNlIHwgbnVsbCB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWRcblxuZXhwb3J0IHR5cGUgVGVzdE1hdGNoZXJzPFQgZXh0ZW5kcyBQcm9taXNlPHZvaWQ+IHwgdm9pZD4gPVxuICAgIE1hdGNoZXJzPFQ+ICYge25vdDogTWF0Y2hlcnM8VD59XG4vLy8gZW5kcmVnaW9uXG4vLy8gcmVnaW9uIG5hdGl2ZVxuZXhwb3J0IHR5cGUgSW1wb3J0RnVuY3Rpb24gPVxuICAgIChpZDogc3RyaW5nKSA9PiBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIHJlcXVpcmU+PlxuZXhwb3J0IHR5cGUgSFRNTEl0ZW0gPSBDb21tZW50IHwgSFRNTEVsZW1lbnQgfCBUZXh0XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZSA9IGJvb2xlYW4gfCBudWxsIHwgbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG5leHBvcnQgdHlwZSBNYXBwaW5nPFYgPSBzdHJpbmcsIEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gUmVjb3JkPEssIFY+XG4vLyBOT1RFOiBNYXBwaW5nIGNhbm5vdCBiZSB1c2VkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbmV4cG9ydCB0eXBlIFBsYWluT2JqZWN0PFYgPSBQcmltaXRpdmUsIEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID1cbiAgICB7W2tleSBpbiBLXTogQXJyYXk8UGxhaW5PYmplY3Q8ViwgSz4gfCBWPiB8IFBsYWluT2JqZWN0PFYsIEs+IHwgVn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eUhhbmRsZXI8VCA9IHVua25vd24+IHtcbiAgICBkZWxldGVQcm9wZXJ0eTogKHRhcmdldDogVCwga2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IGJvb2xlYW5cbiAgICBnZXQ6ICh0YXJnZXQ6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiB1bmtub3duXG4gICAgaGFzOiAodGFyZ2V0OiBULCBrZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4gYm9vbGVhblxuICAgIHNldDogKHRhcmdldDogVCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duKSA9PiBib29sZWFuXG59XG5leHBvcnQgdHlwZSBQcm94eVR5cGU8VCA9IHVua25vd24+ID0gVCAmIHtcbiAgICBfX3Jldm9rZV9fPzogKCkgPT4gdm9pZFxuICAgIF9fdGFyZ2V0X186IFRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb29raWVPcHRpb25zIHtcbiAgICBkb21haW46IHN0cmluZ1xuICAgIGh0dHBPbmx5OiBib29sZWFuXG4gICAgbWluaW1hbDogYm9vbGVhblxuICAgIG51bWJlck9mRGF5c1VudGlsRXhwaXJhdGlvbjogbnVtYmVyXG4gICAgcGF0aDogc3RyaW5nXG4gICAgc2FtZVNpdGU6ICdMYXgnIHwgJ05vbmUnIHwgJ1N0cmljdCcgfCAnJ1xuICAgIHNlY3VyZTogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtub3duV2luZG93RXZlbnRNYXAgZXh0ZW5kcyBXaW5kb3dFdmVudE1hcCB7XG4gICAgRE9NTW91c2VTY3JvbGw6IEV2ZW50XG4gICAgbW91c2V3aGVlbDogRXZlbnRcbn1cbmV4cG9ydCB0eXBlIEtub3duRXZlbnROYW1lID0ga2V5b2YgS25vd25XaW5kb3dFdmVudE1hcFxuLy8vLyByZWdpb24gZnVuY3Rpb25zXG5leHBvcnQgdHlwZSBVbmtub3duRnVuY3Rpb24gPSAoLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+IHVua25vd25cbmV4cG9ydCB0eXBlIEFycmF5VHJhbnNmb3JtZXI8VCA9IHVua25vd24sIFIgPSB1bmtub3duLCBQID0gdW5rbm93bj4gPSAoXG4gICAgZGF0YTogQXJyYXk8VD4sIC4uLmFkZGl0aW9uYWxQYXJhbWV0ZXI6IEFycmF5PFA+XG4pID0+IEFycmF5PFI+XG5cbmV4cG9ydCB0eXBlIFN5bmNocm9ub3VzUHJvY2VkdXJlRnVuY3Rpb24gPSAoLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+XG4gICAgdm9pZFxuZXhwb3J0IHR5cGUgQXN5bmNocm9ub3VzUHJvY2VkdXJlRnVuY3Rpb24gPSAoLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+XG4gICAgUHJvbWlzZTx2b2lkPlxuZXhwb3J0IHR5cGUgUHJvY2VkdXJlRnVuY3Rpb24gPVxuICAgIEFzeW5jaHJvbm91c1Byb2NlZHVyZUZ1bmN0aW9uIHwgU3luY2hyb25vdXNQcm9jZWR1cmVGdW5jdGlvblxuXG5leHBvcnQgdHlwZSBHZXR0ZXJGdW5jdGlvbiA9XG4gICAgKGtleU9yVmFsdWU6IHVua25vd24sIGtleTogc3RyaW5nIHwgc3ltYm9sLCB0YXJnZXQ6IHVua25vd24pID0+IHVua25vd25cbmV4cG9ydCB0eXBlIFNldHRlckZ1bmN0aW9uID1cbiAgICAoa2V5OiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duLCB0YXJnZXQ6IHVua25vd24pID0+IHVua25vd25cbi8vLy8gZW5kcmVnaW9uXG4vLy8gZW5kcmVnaW9uXG4vLy8gcmVnaW9uIGhlbHBlclxuZXhwb3J0IGludGVyZmFjZSBDaGVja1JlYWNoYWJpbGl0eU9wdGlvbnMge1xuICAgIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyXG4gICAgZXhwZWN0ZWRJbnRlcm1lZGlhdGVTdGF0dXNDb2RlczogQXJyYXk8bnVtYmVyPiB8IG51bWJlclxuICAgIG9wdGlvbnM6IFJlcXVlc3RJbml0XG4gICAgcG9sbEludGVydmFsbEluU2Vjb25kczogbnVtYmVyXG4gICAgc3RhdHVzQ29kZXM6IEFycmF5PG51bWJlcj4gfCBudW1iZXJcbiAgICB0aW1lb3V0SW5TZWNvbmRzOiBudW1iZXJcbiAgICB3YWl0OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyZU9wdGlvbnMge1xuICAgIGNvbXBhcmVCbG9iczogYm9vbGVhblxuICAgIGRlZXA6IG51bWJlclxuICAgIGV4Y2VwdGlvblByZWZpeGVzOiBBcnJheTxzdHJpbmc+XG4gICAgaWdub3JlRnVuY3Rpb25zOiBib29sZWFuXG4gICAgcHJvcGVydGllczogQXJyYXk8c3RyaW5nPiB8IG51bGxcbiAgICByZXR1cm5SZWFzb25JZk5vdEVxdWFsOiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIEVuY29kaW5nID1cbiAgICAnYXNjaWknIHxcbiAgICAnYmFzZTY0JyB8XG4gICAgJ2Jhc2U2NHVybCcgfFxuICAgICdiaW5hcnknIHxcbiAgICAnaGV4JyB8XG4gICAgJ2xhdGluMScgfFxuICAgICd1Y3MyJyB8XG4gICAgJ3Vjcy0yJyB8XG4gICAgJ3V0ZjgnIHxcbiAgICAndXRmMTZsZScgfFxuICAgICd1dGYtOCdcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZSB7XG4gICAgZGlyZWN0b3J5UGF0aDogc3RyaW5nXG4gICAgZGlyZWN0b3J5RW50cnk6IERpcmVjdG9yeUVudHJ5IHwgbnVsbFxuICAgIGVycm9yOiBFcnJvciB8IG51bGxcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBwYXRoOiBzdHJpbmdcbiAgICBzdGF0czogRmlsZVN0YXRzIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPlxuICAgIHJldHVybkNvZGU6IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBRdWVyeVBhcmFtZXRlcnMgPVxuICAgIEFycmF5PEFycmF5PHN0cmluZz4gfCBzdHJpbmc+ICYgTWFwcGluZzxBcnJheTxzdHJpbmc+IHwgc3RyaW5nPlxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRQcm9taXNlIGV4dGVuZHMgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY2xlYXI6ICgpID0+IHZvaWRcbiAgICB0aW1lb3V0SUQ6IE5vZGVKUy5UaW1lb3V0XG59XG5cbi8vIE5PVEU6IE1hcHBpbmcgY2Fubm90IGJlIHVzZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzLlxuZXhwb3J0IHR5cGUgT2JqZWN0TWFzayA9IEFycmF5PHN0cmluZz4gfCBib29sZWFuIHwge1trZXk6IHN0cmluZ106IE9iamVjdE1hc2t9XG5leHBvcnQgdHlwZSBOb3JtYWxpemVkT2JqZWN0TWFzayA9IGJvb2xlYW4gfCBNYXBwaW5nPE9iamVjdE1hc2s+XG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdE1hc2tDb25maWd1cmF0aW9uIHtcbiAgICBleGNsdWRlPzogT2JqZWN0TWFza1xuICAgIGluY2x1ZGU/OiBPYmplY3RNYXNrXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwcmVzc2lvbk9wdGlvbnMge1xuICAgIGFzeW5jOiBib29sZWFuXG4gICAgZXhlY3V0ZTogYm9vbGVhblxuICAgIHJlbW92ZUdsb2JhbFNjb3BlOiBib29sZWFuXG4gICAgYmluZGluZzogdW5rbm93blxufVxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlRXhwcmVzc2lvbk9wdGlvbnM8XG4gICAgTiBleHRlbmRzIEFycmF5PHN0cmluZz4gPSBBcnJheTxzdHJpbmc+XG4+IGV4dGVuZHMgRXhwcmVzc2lvbk9wdGlvbnMge1xuICAgIHNjb3BlOiBNYXBwaW5nPHVua25vd24+IHwgTiB8IE5bbnVtYmVyXSB8IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZUV4cHJlc3Npb25PcHRpb25zPFxuICAgIFMgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Rcbj4gZXh0ZW5kcyBFeHByZXNzaW9uT3B0aW9ucyB7XG4gICAgc2NvcGU6IFNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZU9iamVjdCB7XG4gICAgX19ldmFsdWF0ZV9fOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZU9iamVjdCB7XG4gICAgX19leGVjdXRlX186IHN0cmluZ1xufVxuZXhwb3J0IHR5cGUgRXZhbHVhdGVhYmxlID0gRXZhbHVhdGVPYmplY3QgfCBFeGVjdXRlT2JqZWN0XG5leHBvcnQgdHlwZSBFdmFsdWF0ZWRPYmplY3Q8VHlwZSBleHRlbmRzIG9iamVjdD4gPSB7XG4gICAgW1Byb3BlcnR5IGluIGtleW9mIFR5cGVdOiAoXG4gICAgICAgIFR5cGVbUHJvcGVydHldIGV4dGVuZHMgRXZhbHVhdGVhYmxlID9cbiAgICAgICAgICAgIHVua25vd24gOlxuICAgICAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBvYmplY3QgP1xuICAgICAgICAgICAgICAgIEV2YWx1YXRlZE9iamVjdDxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgIFR5cGVbUHJvcGVydHldXG4gICAgICAgIClcbn1cbmV4cG9ydCB0eXBlIFJlY3Vyc2l2ZUV2YWx1YXRlYWJsZTxUeXBlPiA9XG4gICAgRXZhbHVhdGVhYmxlIHxcbiAgICB7XG4gICAgICAgIFtQcm9wZXJ0eSBpbiBrZXlvZiBUeXBlXTogKFxuICAgICAgICAgICAgRXZhbHVhdGVhYmxlIHwgKFR5cGVbUHJvcGVydHldIGV4dGVuZHMgQXJyYXk8aW5mZXIgT3RoZXJUeXBlPiA/XG4gICAgICAgICAgICAgICAgQXJyYXk8UmVjdXJzaXZlRXZhbHVhdGVhYmxlPE90aGVyVHlwZT4+IDpcbiAgICAgICAgICAgICAgICBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIE1hcHBpbmc8dW5rbm93bj4gP1xuICAgICAgICAgICAgICAgICAgICBSZWN1cnNpdmVFdmFsdWF0ZWFibGU8VHlwZVtQcm9wZXJ0eV0+IDpcbiAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGVhYmxlIHwgVHlwZVtQcm9wZXJ0eV1cbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuZXhwb3J0IGludGVyZmFjZSBBc3luY0V2YWx1YXRlT2JqZWN0IHtcbiAgICBfX2FzeW5jX2V2YWx1YXRlX186IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBBc3luY0V4ZWN1dGVPYmplY3Qge1xuICAgIF9fYXN5bmNfZXhlY3V0ZV9fOiBzdHJpbmdcbn1cbmV4cG9ydCB0eXBlIEFzeW5jRXZhbHVhdGVhYmxlID0gQXN5bmNFdmFsdWF0ZU9iamVjdCB8IEFzeW5jRXhlY3V0ZU9iamVjdFxuXG5leHBvcnQgdHlwZSBBc3luY0V2YWx1YXRlZE9iamVjdDxUeXBlIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZV06IChcbiAgICAgICAgVHlwZVtQcm9wZXJ0eV0gZXh0ZW5kcyBBc3luY0V2YWx1YXRlYWJsZSA/XG4gICAgICAgICAgICB1bmtub3duIDpcbiAgICAgICAgICAgIFR5cGVbUHJvcGVydHldIGV4dGVuZHMgb2JqZWN0ID9cbiAgICAgICAgICAgICAgICBBc3luY0V2YWx1YXRlZE9iamVjdDxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgIFR5cGVbUHJvcGVydHldXG4gICAgICAgIClcbn1cbmV4cG9ydCB0eXBlIFJlY3Vyc2l2ZUFzeW5jRXZhbHVhdGVhYmxlPFR5cGU+ID1cbiAgICBBc3luY0V2YWx1YXRlYWJsZSB8XG4gICAge1xuICAgICAgICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZV06IChcbiAgICAgICAgQXN5bmNFdmFsdWF0ZWFibGUgfCAoXG4gICAgICAgICAgICBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIEFycmF5PGluZmVyIE90aGVyVHlwZT4gP1xuICAgICAgICAgICAgICAgIEFycmF5PFJlY3Vyc2l2ZUFzeW5jRXZhbHVhdGVhYmxlPE90aGVyVHlwZT4+IDpcbiAgICAgICAgICAgICAgICBUeXBlW1Byb3BlcnR5XSBleHRlbmRzIE1hcHBpbmc8dW5rbm93bj4gP1xuICAgICAgICAgICAgICAgICAgICBSZWN1cnNpdmVBc3luY0V2YWx1YXRlYWJsZTxUeXBlW1Byb3BlcnR5XT4gOlxuICAgICAgICAgICAgICAgICAgICBBc3luY0V2YWx1YXRlYWJsZSB8IFR5cGVbUHJvcGVydHldXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgfVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlT3B0aW9ucyB7XG4gICAgYm91bmRhcnlDb3VudDogbnVtYmVyXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW5cbiAgICBoaWRlTmV4dEJ1dHRvbjogYm9vbGVhblxuICAgIGhpZGVQcmV2QnV0dG9uOiBib29sZWFuXG4gICAgcGFnZTogbnVtYmVyXG4gICAgcGFnZVNpemU/OiBudWxsIHwgbnVtYmVyXG4gICAgc2hvd0ZpcnN0QnV0dG9uOiBib29sZWFuXG4gICAgc2hvd0xhc3RCdXR0b246IGJvb2xlYW5cbiAgICBzaWJsaW5nQ291bnQ6IG51bWJlclxuICAgIHRvdGFsOiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZSB7XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW5cbiAgICBwYWdlPzogbnVtYmVyXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW5cbiAgICB0eXBlOiBQYWdlVHlwZVxufVxuZXhwb3J0IHR5cGUgUGFnZVR5cGUgPVxuICAgICdlbmQtZWxsaXBzaXMnIHxcbiAgICAnZmlyc3QnIHxcbiAgICAnbGFzdCcgfFxuICAgICduZXh0JyB8XG4gICAgJ3BhZ2UnIHxcbiAgICAncHJldmlvdXMnIHxcbiAgICAnc3RhcnQtZWxsaXBzaXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgT2Zmc2V0IHtcbiAgICBsZWZ0OiBudW1iZXJcbiAgICB0b3A6IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbiBleHRlbmRzIE9mZnNldCB7XG4gICAgYm90dG9tOiBudW1iZXJcbiAgICByaWdodDogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIFByb2Nlc3NIYW5kbGVyID1cbiAgICAocmV0dXJuQ29kZTogdW5rbm93biwgLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+IHZvaWRcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0Nsb3NlUmVhc29uIHtcbiAgICBwYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPlxuICAgIHJlYXNvbjogdW5rbm93blxufVxuZXhwb3J0IHR5cGUgUHJvY2Vzc0Nsb3NlQ2FsbGJhY2sgPSAocmVhc29uOiBQcm9jZXNzQ2xvc2VSZWFzb24pID0+IHZvaWRcbmV4cG9ydCB0eXBlIFByb2Nlc3NFcnJvckNhbGxiYWNrID0gKHJlYXNvbjogUHJvY2Vzc0Vycm9yKSA9PiB2b2lkXG5cbmV4cG9ydCB0eXBlIFJlbGF0aXZlUG9zaXRpb24gPSAnYWJvdmUnIHwgJ2JlbG93JyB8ICdpbicgfCAnbGVmdCcgfCAncmlnaHQnXG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlRnVuY3Rpb248VHlwZSA9IHN0cmluZz4gPVxuICAgICguLi5wYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPikgPT4gVHlwZVxuZXhwb3J0IGludGVyZmFjZSBDb21waWxhdGlvblJlc3VsdDxcbiAgICBUID0gc3RyaW5nLCBOIGV4dGVuZHMgQXJyYXk8c3RyaW5nPiA9IEFycmF5PHN0cmluZz5cbj4ge1xuICAgIGVycm9yOiBudWxsIHwgc3RyaW5nXG5cbiAgICBnbG9iYWxOYW1lczogQXJyYXk8c3RyaW5nPlxuICAgIGdsb2JhbE5hbWVzVW5kZWZpbmVkTGlzdDogQXJyYXk8dW5kZWZpbmVkPlxuICAgIG9yaWdpbmFsU2NvcGVOYW1lczogTlxuICAgIHNjb3BlTmFtZU1hcHBpbmc6IFJlY29yZDxOW251bWJlcl0sIHN0cmluZz5cbiAgICBzY29wZU5hbWVzOiBBcnJheTxzdHJpbmc+XG5cbiAgICB0ZW1wbGF0ZUZ1bmN0aW9uOiBUZW1wbGF0ZUZ1bmN0aW9uPFQ+XG59XG5leHBvcnQgaW50ZXJmYWNlIE5lZ2F0aXZlRXZhbHVhdGlvblJlc3VsdCB7XG4gICAgY29tcGlsZUVycm9yOiBudWxsIHwgc3RyaW5nXG4gICAgZXJyb3I6IHN0cmluZ1xuICAgIHJlc3VsdDogdW5kZWZpbmVkXG4gICAgcnVudGltZUVycm9yOiBudWxsIHwgc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aXZlRXZhbHVhdGlvblJlc3VsdDxUeXBlID0gc3RyaW5nPiB7XG4gICAgY29tcGlsZUVycm9yOiBudWxsXG4gICAgZXJyb3I6IG51bGxcbiAgICByZXN1bHQ6IFR5cGVcbiAgICBydW50aW1lRXJyb3I6IG51bGxcbn1cbmV4cG9ydCB0eXBlIEV2YWx1YXRpb25SZXN1bHQ8VHlwZSA9IHN0cmluZz4gPVxuICAgIFBvc2l0aXZlRXZhbHVhdGlvblJlc3VsdDxUeXBlPiB8IE5lZ2F0aXZlRXZhbHVhdGlvblJlc3VsdFxuXG5leHBvcnQgdHlwZSBMb2NrQ2FsbGJhY2tGdW5jdGlvbjxUeXBlPiA9XG4gICAgKGRlc2NyaXB0aW9uPzogc3RyaW5nKSA9PiBQcm9taXNlPFR5cGU+IHwgVHlwZVxuLy8vIGVuZHJlZ2lvblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXJrT3B0aW9ucyB7XG4gICAgbWFya2VyOlxuICAgICAgICAoKGZvdW5kV29yZDogc3RyaW5nLCBtYXJrZWRUYXJnZXQ6IEFycmF5PHVua25vd24+KSA9PiB1bmtub3duKSB8IHN0cmluZ1xuICAgIG5vcm1hbGl6ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nXG4gICAgc2tpcFRhZ0RlbGltaXRlZFBhcnRzOiBudWxsIHwgW3N0cmluZywgc3RyaW5nXVxufVxuZXhwb3J0IGludGVyZmFjZSBJbnRlcnJ1cHRhYmxlU2Nyb2xsVG9PcHRpb25zIHtcbiAgICB0YXJnZXREb21Ob2RlOiBIVE1MRWxlbWVudFxuICAgIGNvbnRhaW5lckRvbU5vZGU6IEhUTUxFbGVtZW50IHwgV2luZG93XG4gICAgZHVyYXRpb25Jbk1pbGxpc2Vjb25kczogbnVtYmVyXG4gICAgaW50ZXJydXB0T25NYW51YWxTY3JvbGw6IGJvb2xlYW5cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgdG9wOiBudW1iZXJcbiAgICAgICAgbGVmdDogbnVtYmVyXG4gICAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBHaXZlbkludGVycnVwdGFibGVTY3JvbGxUb09wdGlvbnNcbiAgICBleHRlbmRzXG5QYXJ0aWFsPFNjcm9sbFRvT3B0aW9ucz4ge1xuICAgIHRhcmdldERvbU5vZGU/OiBOb2RlIHwgbnVsbFxuICAgIGNvbnRhaW5lckRvbU5vZGU/OiBOb2RlIHwgbnVsbCB8IFdpbmRvd1xuICAgIG9mZnNldD86IFBhcnRpYWw8SW50ZXJydXB0YWJsZVNjcm9sbFRvT3B0aW9uc1snb2Zmc2V0J10+XG59XG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlck9wdGlvbnMge1xuICAgIGxldmVsOiBMZXZlbFxuICAgIG5hbWU6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZUR5bmFtaWNEYXRhT3B0aW9ucyB7XG4gICAgc2NvcGU6IE1hcHBpbmc8dW5rbm93bj5cbiAgICBzZWxmUmVmZXJlbmNlTmFtZTogc3RyaW5nXG4gICAgZXhwcmVzc2lvbkluZGljYXRvcktleTogc3RyaW5nXG4gICAgZXhlY3V0aW9uSW5kaWNhdG9yS2V5OiBzdHJpbmdcbn1cbi8vIGVuZHJlZ2lvblxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsWUFBWTs7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clientnode",
3
- "version": "4.0.1493",
3
+ "version": "4.0.1494",
4
4
  "description": "Handy utilities for any JavaScript environments.",
5
5
  "keywords": [
6
6
  "client",