tedious 20.0.7 → 20.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.UnexpectedTokenError = exports.TokenHandler = exports.RequestTokenHandler = exports.Login7TokenHandler = exports.InitialSqlTokenHandler = exports.AttentionTokenHandler = void 0;
6
+ exports.tds71DeprecationWarning = exports.UnexpectedTokenError = exports.TokenHandler = exports.RequestTokenHandler = exports.Login7TokenHandler = exports.InitialSqlTokenHandler = exports.AttentionTokenHandler = void 0;
7
7
  var _request = _interopRequireDefault(require("../request"));
8
8
  var _errors = require("../errors");
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -12,7 +12,27 @@ class UnexpectedTokenError extends Error {
12
12
  super('Unexpected token `' + token.name + '` in `' + handler.constructor.name + '`');
13
13
  }
14
14
  }
15
+
16
+ /**
17
+ * Emits a warning (once per process) when a connection is established
18
+ * using TDS 7.1.
19
+ *
20
+ * @private
21
+ */
15
22
  exports.UnexpectedTokenError = UnexpectedTokenError;
23
+ const tds71DeprecationWarning = exports.tds71DeprecationWarning = {
24
+ emitted: false,
25
+ emit() {
26
+ if (this.emitted) {
27
+ return;
28
+ }
29
+ this.emitted = true;
30
+ process.emitWarning('Support for TDS 7.1 (used by SQL Server 2000) is deprecated and will be removed in a future version of `tedious`.', {
31
+ type: 'DeprecationWarning',
32
+ code: 'TEDIOUS_DEP_TDS71'
33
+ });
34
+ }
35
+ };
16
36
  class TokenHandler {
17
37
  onInfoMessage(token) {
18
38
  throw new UnexpectedTokenError(this, token);
@@ -65,6 +85,12 @@ class TokenHandler {
65
85
  onColMetadata(token) {
66
86
  throw new UnexpectedTokenError(this, token);
67
87
  }
88
+ onTabName(token) {
89
+ throw new UnexpectedTokenError(this, token);
90
+ }
91
+ onColInfo(token) {
92
+ throw new UnexpectedTokenError(this, token);
93
+ }
68
94
  onOrder(token) {
69
95
  throw new UnexpectedTokenError(this, token);
70
96
  }
@@ -245,6 +271,9 @@ class Login7TokenHandler extends TokenHandler {
245
271
 
246
272
  // use negotiated version
247
273
  this.connection.config.options.tdsVersion = token.tdsVersion;
274
+ if (token.tdsVersion < '7_2') {
275
+ tds71DeprecationWarning.emit();
276
+ }
248
277
  this.loginAckReceived = true;
249
278
  }
250
279
  onRoutingChange(token) {
@@ -344,6 +373,16 @@ class RequestTokenHandler extends TokenHandler {
344
373
  }
345
374
  }
346
375
  }
376
+ onTabName(token) {
377
+ if (!this.request.canceled) {
378
+ this.request.emit('tabName', token.tableNames);
379
+ }
380
+ }
381
+ onColInfo(token) {
382
+ if (!this.request.canceled) {
383
+ this.request.emit('colInfo', token.columns);
384
+ }
385
+ }
347
386
  onOrder(token) {
348
387
  if (!this.request.canceled) {
349
388
  this.request.emit('order', token.orderColumns);
@@ -443,4 +482,4 @@ class AttentionTokenHandler extends TokenHandler {
443
482
  }
444
483
  }
445
484
  exports.AttentionTokenHandler = AttentionTokenHandler;
446
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVxdWVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Vycm9ycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlVuZXhwZWN0ZWRUb2tlbkVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsImhhbmRsZXIiLCJ0b2tlbiIsIm5hbWUiLCJleHBvcnRzIiwiVG9rZW5IYW5kbGVyIiwib25JbmZvTWVzc2FnZSIsIm9uRXJyb3JNZXNzYWdlIiwib25TU1BJIiwib25EYXRhYmFzZUNoYW5nZSIsIm9uTGFuZ3VhZ2VDaGFuZ2UiLCJvbkNoYXJzZXRDaGFuZ2UiLCJvblNxbENvbGxhdGlvbkNoYW5nZSIsIm9uUm91dGluZ0NoYW5nZSIsIm9uUGFja2V0U2l6ZUNoYW5nZSIsIm9uUmVzZXRDb25uZWN0aW9uIiwib25CZWdpblRyYW5zYWN0aW9uIiwib25Db21taXRUcmFuc2FjdGlvbiIsIm9uUm9sbGJhY2tUcmFuc2FjdGlvbiIsIm9uRmVkQXV0aEluZm8iLCJvbkZlYXR1cmVFeHRBY2siLCJvbkxvZ2luQWNrIiwib25Db2xNZXRhZGF0YSIsIm9uT3JkZXIiLCJvblJvdyIsIm9uUmV0dXJuU3RhdHVzIiwib25SZXR1cm5WYWx1ZSIsIm9uRG9uZVByb2MiLCJvbkRvbmVJblByb2MiLCJvbkRvbmUiLCJvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lciIsIkluaXRpYWxTcWxUb2tlbkhhbmRsZXIiLCJjb25uZWN0aW9uIiwiZW1pdCIsIm5ld1ZhbHVlIiwiZGF0YWJhc2VDb2xsYXRpb24iLCJtZXNzYWdlSW8iLCJwYWNrZXRTaXplIiwidHJhbnNhY3Rpb25EZXNjcmlwdG9ycyIsInB1c2giLCJpblRyYW5zYWN0aW9uIiwibGVuZ3RoIiwiY2xvc2UiLCJMb2dpbjdUb2tlbkhhbmRsZXIiLCJsb2dpbkFja1JlY2VpdmVkIiwibG9naW5FcnJvciIsInVuZGVmaW5lZCIsImVycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwibWVzc2FnZSIsImlzTG9naW5FcnJvclRyYW5zaWVudCIsInRyYW5zaWVudEVycm9yTG9va3VwIiwiaXNUcmFuc2llbnRFcnJvciIsIm51bWJlciIsImN1clRyYW5zaWVudFJldHJ5Q291bnQiLCJjb25maWciLCJvcHRpb25zIiwibWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzIiwiaXNUcmFuc2llbnQiLCJudGxtcGFja2V0IiwibnRsbXBhY2tldEJ1ZmZlciIsImZlZEF1dGhJbmZvVG9rZW4iLCJhdXRoZW50aWNhdGlvbiIsInR5cGUiLCJmZWRBdXRoIiwidXRmOFN1cHBvcnQiLCJ0ZHNWZXJzaW9uIiwiaW50ZXJmYWNlIiwic2VydmVyIiwiaW5zdGFuY2UiLCJzcGxpdCIsInJvdXRpbmdEYXRhIiwicG9ydCIsIlJlcXVlc3RUb2tlbkhhbmRsZXIiLCJyZXF1ZXN0IiwiZXJyb3JzIiwiY2FuY2VsZWQiLCJSZXF1ZXN0RXJyb3IiLCJzdGF0ZSIsImNsYXNzIiwic2VydmVyTmFtZSIsInByb2NOYW1lIiwibGluZU51bWJlciIsIlJlcXVlc3QiLCJBZ2dyZWdhdGVFcnJvciIsInVzZUNvbHVtbk5hbWVzIiwiY29sdW1ucyIsIk9iamVjdCIsImNyZWF0ZSIsImoiLCJsZW4iLCJjb2wiLCJjb2xOYW1lIiwib3JkZXJDb2x1bW5zIiwicm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb24iLCJyb3dzIiwicm93Q29sbGVjdGlvbk9uRG9uZSIsInJzdCIsInByb2NSZXR1cm5TdGF0dXNWYWx1ZSIsInZhbHVlIiwicGFyYW1OYW1lIiwibWV0YWRhdGEiLCJzcWxFcnJvciIsInJvd0NvdW50IiwibW9yZSIsIkF0dGVudGlvblRva2VuSGFuZGxlciIsImF0dGVudGlvblJlY2VpdmVkIiwiYXR0ZW50aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rva2VuL2hhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbm5lY3Rpb24gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciwgUmVxdWVzdEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7IHR5cGUgQ29sdW1uTWV0YWRhdGEgfSBmcm9tICcuL2NvbG1ldGFkYXRhLXRva2VuLXBhcnNlcic7XG5pbXBvcnQge1xuICBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIENoYXJzZXRFbnZDaGFuZ2VUb2tlbixcbiAgQ29sbGF0aW9uQ2hhbmdlVG9rZW4sXG4gIENvbE1ldGFkYXRhVG9rZW4sXG4gIENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIERhdGFiYXNlRW52Q2hhbmdlVG9rZW4sXG4gIERhdGFiYXNlTWlycm9yaW5nUGFydG5lckVudkNoYW5nZVRva2VuLFxuICBEb25lSW5Qcm9jVG9rZW4sXG4gIERvbmVQcm9jVG9rZW4sXG4gIERvbmVUb2tlbixcbiAgRXJyb3JNZXNzYWdlVG9rZW4sXG4gIEZlYXR1cmVFeHRBY2tUb2tlbixcbiAgRmVkQXV0aEluZm9Ub2tlbixcbiAgSW5mb01lc3NhZ2VUb2tlbixcbiAgTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbixcbiAgTG9naW5BY2tUb2tlbixcbiAgTkJDUm93VG9rZW4sXG4gIE9yZGVyVG9rZW4sXG4gIFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbixcbiAgUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIFJldHVyblN0YXR1c1Rva2VuLFxuICBSZXR1cm5WYWx1ZVRva2VuLFxuICBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIFJvdXRpbmdFbnZDaGFuZ2VUb2tlbixcbiAgUm93VG9rZW4sXG4gIFNTUElUb2tlbixcbiAgVG9rZW5cbn0gZnJvbSAnLi90b2tlbic7XG5pbXBvcnQgQnVsa0xvYWQgZnJvbSAnLi4vYnVsay1sb2FkJztcblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRUb2tlbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihoYW5kbGVyOiBUb2tlbkhhbmRsZXIsIHRva2VuOiBUb2tlbikge1xuICAgIHN1cGVyKCdVbmV4cGVjdGVkIHRva2VuIGAnICsgdG9rZW4ubmFtZSArICdgIGluIGAnICsgaGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lICsgJ2AnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVG9rZW5IYW5kbGVyIHtcbiAgb25JbmZvTWVzc2FnZSh0b2tlbjogSW5mb01lc3NhZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25TU1BJKHRva2VuOiBTU1BJVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ2hhcnNldENoYW5nZSh0b2tlbjogQ2hhcnNldEVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJvdXRpbmdDaGFuZ2UodG9rZW46IFJvdXRpbmdFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJlc2V0Q29ubmVjdGlvbih0b2tlbjogUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25CZWdpblRyYW5zYWN0aW9uKHRva2VuOiBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Db21taXRUcmFuc2FjdGlvbih0b2tlbjogQ29tbWl0VHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJvbGxiYWNrVHJhbnNhY3Rpb24odG9rZW46IFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkZlZEF1dGhJbmZvKHRva2VuOiBGZWRBdXRoSW5mb1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRmVhdHVyZUV4dEFjayh0b2tlbjogRmVhdHVyZUV4dEFja1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uTG9naW5BY2sodG9rZW46IExvZ2luQWNrVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Db2xNZXRhZGF0YSh0b2tlbjogQ29sTWV0YWRhdGFUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbk9yZGVyKHRva2VuOiBPcmRlclRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uUm93KHRva2VuOiBSb3dUb2tlbiB8IE5CQ1Jvd1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJldHVyblZhbHVlKHRva2VuOiBSZXR1cm5WYWx1ZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZVByb2ModG9rZW46IERvbmVQcm9jVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25EYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXIodG9rZW46IERhdGFiYXNlTWlycm9yaW5nUGFydG5lckVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdG9rZW5zIHJlY2VpdmVkIGluIHRoZSByZXNwb25zZSBtZXNzYWdlIHRvIHRoZSBpbml0aWFsIFNRTCBCYXRjaCByZXF1ZXN0XG4gKiB0aGF0IHNldHMgdXAgZGlmZmVyZW50IGNvbm5lY3Rpb24gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbml0aWFsU3FsVG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgfVxuXG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnaW5mb01lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3JNZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnbGFuZ3VhZ2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdjaGFyc2V0Q2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uID0gdG9rZW4ubmV3VmFsdWU7XG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkJlZ2luVHJhbnNhY3Rpb24odG9rZW46IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLnB1c2godG9rZW4ubmV3VmFsdWUpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBvblJvbGxiYWNrVHJhbnNhY3Rpb24odG9rZW46IFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCA9IDE7XG4gICAgLy8gQW4gb3V0ZXJtb3N0IHRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjay4gUmVzZXQgdGhlIHRyYW5zYWN0aW9uIGNvdW50ZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyb2xsYmFja1RyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBvbkNvbE1ldGFkYXRhKHRva2VuOiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKFwiUmVjZWl2ZWQgJ2NvbHVtbk1ldGFkYXRhJyB3aGVuIG5vIHNxbFJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3NcIikpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG5cbiAgb25PcmRlcih0b2tlbjogT3JkZXJUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdvcmRlcicgd2hlbiBubyBzcWxSZXF1ZXN0IGlzIGluIHByb2dyZXNzXCIpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIG9uUm93KHRva2VuOiBSb3dUb2tlbiB8IE5CQ1Jvd1Rva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKFwiUmVjZWl2ZWQgJ3Jvdycgd2hlbiBubyBzcWxSZXF1ZXN0IGlzIGluIHByb2dyZXNzXCIpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uUmV0dXJuVmFsdWUodG9rZW46IFJldHVyblZhbHVlVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvbkRvbmVQcm9jKHRva2VuOiBEb25lUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvbkRvbmUodG9rZW46IERvbmVUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uUmVzZXRDb25uZWN0aW9uKHRva2VuOiBSZXNldENvbm5lY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyZXNldENvbm5lY3Rpb24nKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdG9rZW5zIHJlY2VpdmVkIGluIHRoZSByZXNwb25zZSBtZXNzYWdlIHRvIGEgTG9naW43IG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dpbjdUb2tlbkhhbmRsZXIgZXh0ZW5kcyBUb2tlbkhhbmRsZXIge1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb247XG5cbiAgZGVjbGFyZSBmZWRBdXRoSW5mb1Rva2VuOiBGZWRBdXRoSW5mb1Rva2VuIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIHJvdXRpbmdEYXRhOiB7IHNlcnZlcjogc3RyaW5nLCBwb3J0OiBudW1iZXIsIGluc3RhbmNlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGxvZ2luQWNrUmVjZWl2ZWQ6IGJvb2xlYW47XG5cbiAgZGVjbGFyZSBsb2dpbkVycm9yOiBDb25uZWN0aW9uRXJyb3IgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2dpbkFja1JlY2VpdmVkID0gZmFsc2U7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgICB0aGlzLmxvZ2luRXJyb3IgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2luZm9NZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yTWVzc2FnZScsIHRva2VuKTtcblxuICAgIGNvbnN0IGVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcih0b2tlbi5tZXNzYWdlLCAnRUxPR0lOJyk7XG5cbiAgICBjb25zdCBpc0xvZ2luRXJyb3JUcmFuc2llbnQgPSB0aGlzLmNvbm5lY3Rpb24udHJhbnNpZW50RXJyb3JMb29rdXAuaXNUcmFuc2llbnRFcnJvcih0b2tlbi5udW1iZXIpO1xuICAgIGlmIChpc0xvZ2luRXJyb3JUcmFuc2llbnQgJiYgdGhpcy5jb25uZWN0aW9uLmN1clRyYW5zaWVudFJldHJ5Q291bnQgIT09IHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMpIHtcbiAgICAgIGVycm9yLmlzVHJhbnNpZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2luRXJyb3IgPSBlcnJvcjtcbiAgfVxuXG4gIG9uU1NQSSh0b2tlbjogU1NQSVRva2VuKSB7XG4gICAgaWYgKHRva2VuLm50bG1wYWNrZXQpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5udGxtcGFja2V0ID0gdG9rZW4ubnRsbXBhY2tldDtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5udGxtcGFja2V0QnVmZmVyID0gdG9rZW4ubnRsbXBhY2tldEJ1ZmZlcjtcbiAgICB9XG4gIH1cblxuICBvbkRhdGFiYXNlQ2hhbmdlKHRva2VuOiBEYXRhYmFzZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2RhdGFiYXNlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25EYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXIodG9rZW46IERhdGFiYXNlTWlycm9yaW5nUGFydG5lckVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2RhdGFiYXNlTWlycm9yaW5nUGFydG5lcicsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnbGFuZ3VhZ2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdjaGFyc2V0Q2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uID0gdG9rZW4ubmV3VmFsdWU7XG4gIH1cblxuICBvbkZlZEF1dGhJbmZvKHRva2VuOiBGZWRBdXRoSW5mb1Rva2VuKSB7XG4gICAgdGhpcy5mZWRBdXRoSW5mb1Rva2VuID0gdG9rZW47XG4gIH1cblxuICBvbkZlYXR1cmVFeHRBY2sodG9rZW46IEZlYXR1cmVFeHRBY2tUb2tlbikge1xuICAgIGNvbnN0IHsgYXV0aGVudGljYXRpb24gfSA9IHRoaXMuY29ubmVjdGlvbi5jb25maWc7XG5cbiAgICBpZiAoYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlbicgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldCcgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCcpIHtcbiAgICAgIGlmICh0b2tlbi5mZWRBdXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignRGlkIG5vdCByZWNlaXZlIEFjdGl2ZSBEaXJlY3RvcnkgYXV0aGVudGljYXRpb24gYWNrbm93bGVkZ2VtZW50Jyk7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLmZlZEF1dGgubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoYEFjdGl2ZSBEaXJlY3RvcnkgYXV0aGVudGljYXRpb24gYWNrbm93bGVkZ21lbnQgZm9yICR7YXV0aGVudGljYXRpb24udHlwZX0gYXV0aGVudGljYXRpb24gbWV0aG9kIGluY2x1ZGVzIGV4dHJhIGRhdGFgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRva2VuLmZlZEF1dGggPT09IHVuZGVmaW5lZCAmJiB0b2tlbi51dGY4U3VwcG9ydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdSZWNlaXZlZCBhY2tub3dsZWRnZW1lbnQgZm9yIHVua25vd24gZmVhdHVyZScpO1xuICAgIH0gZWxzZSBpZiAodG9rZW4uZmVkQXV0aCkge1xuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignRGlkIG5vdCByZXF1ZXN0IEFjdGl2ZSBEaXJlY3RvcnkgYXV0aGVudGljYXRpb24sIGJ1dCByZWNlaXZlZCB0aGUgYWNrbm93bGVkZ21lbnQnKTtcbiAgICB9XG4gIH1cblxuICBvbkxvZ2luQWNrKHRva2VuOiBMb2dpbkFja1Rva2VuKSB7XG4gICAgaWYgKCF0b2tlbi50ZHNWZXJzaW9uKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCBURFMgdmVyc2lvblxuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignU2VydmVyIHJlc3BvbmRlZCB3aXRoIHVua25vd24gVERTIHZlcnNpb24uJywgJ0VURFMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRva2VuLmludGVyZmFjZSkge1xuICAgICAgLy8gdW5zdXBwb3J0ZWQgaW50ZXJmYWNlXG4gICAgICB0aGlzLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggdW5zdXBwb3J0ZWQgaW50ZXJmYWNlLicsICdFSU5URVJGQUNFTk9UU1VQUCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHVzZSBuZWdvdGlhdGVkIHZlcnNpb25cbiAgICB0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA9IHRva2VuLnRkc1ZlcnNpb247XG5cbiAgICB0aGlzLmxvZ2luQWNrUmVjZWl2ZWQgPSB0cnVlO1xuICB9XG5cbiAgb25Sb3V0aW5nQ2hhbmdlKHRva2VuOiBSb3V0aW5nRW52Q2hhbmdlVG9rZW4pIHtcbiAgICAvLyBTcGxpdHMgaW5zdGFuY2UgbmFtZSBhdHRhY2hlZCB0byB0aGUgcmVkaXJlY3QgdXJsLiBFLmcuLCByZWRpcmVjdC5kYi5uZXRcXGluc3RhbmNlMSAtLT4gW3JlZGlyZWN0LmRiLm5ldCwgaW5zdGFuY2UxXVxuICAgIGNvbnN0IFsgc2VydmVyLCBpbnN0YW5jZSBdID0gdG9rZW4ubmV3VmFsdWUuc2VydmVyLnNwbGl0KCdcXFxcJyk7XG5cbiAgICB0aGlzLnJvdXRpbmdEYXRhID0ge1xuICAgICAgc2VydmVyLCBwb3J0OiB0b2tlbi5uZXdWYWx1ZS5wb3J0LCBpbnN0YW5jZVxuICAgIH07XG4gIH1cblxuICBvbkRvbmVJblByb2ModG9rZW46IERvbmVJblByb2NUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24ubWVzc2FnZUlvLnBhY2tldFNpemUodG9rZW4ubmV3VmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0b2tlbnMgcmVjZWl2ZWQgaW4gdGhlIHJlc3BvbnNlIG1lc3NhZ2UgdG8gYSBSUEMgUmVxdWVzdCxcbiAqIGEgU1FMIEJhdGNoIFJlcXVlc3QsIGEgQnVsayBMb2FkIEJDUCBSZXF1ZXN0IG9yIGEgVHJhbnNhY3Rpb24gTWFuYWdlciBSZXF1ZXN0LlxuICovXG5leHBvcnQgY2xhc3MgUmVxdWVzdFRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcbiAgZGVjbGFyZSByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQ7XG4gIGRlY2xhcmUgZXJyb3JzOiBSZXF1ZXN0RXJyb3JbXTtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uLCByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuZXJyb3JzID0gW107XG4gIH1cblxuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2luZm9NZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yTWVzc2FnZScsIHRva2VuKTtcblxuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IodG9rZW4ubWVzc2FnZSwgJ0VSRVFVRVNUJyk7XG5cbiAgICAgIGVycm9yLm51bWJlciA9IHRva2VuLm51bWJlcjtcbiAgICAgIGVycm9yLnN0YXRlID0gdG9rZW4uc3RhdGU7XG4gICAgICBlcnJvci5jbGFzcyA9IHRva2VuLmNsYXNzO1xuICAgICAgZXJyb3Iuc2VydmVyTmFtZSA9IHRva2VuLnNlcnZlck5hbWU7XG4gICAgICBlcnJvci5wcm9jTmFtZSA9IHRva2VuLnByb2NOYW1lO1xuICAgICAgZXJyb3IubGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IGVycm9yO1xuICAgICAgaWYgKHRoaXMucmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QgJiYgdGhpcy5lcnJvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBuZXcgQWdncmVnYXRlRXJyb3IodGhpcy5lcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24ubWVzc2FnZUlvLnBhY2tldFNpemUodG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25CZWdpblRyYW5zYWN0aW9uKHRva2VuOiBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5wdXNoKHRva2VuLm5ld1ZhbHVlKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gIH1cblxuICBvbkNvbW1pdFRyYW5zYWN0aW9uKHRva2VuOiBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID0gMTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIC8vIEFuIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2suIFJlc2V0IHRoZSB0cmFuc2FjdGlvbiBjb3VudGVyXG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncm9sbGJhY2tUcmFuc2FjdGlvbicpO1xuICB9XG5cbiAgb25Db2xNZXRhZGF0YSh0b2tlbjogQ29sTWV0YWRhdGFUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogQ29sdW1uTWV0YWRhdGEgfSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IHRva2VuLmNvbHVtbnMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBjb2wgPSB0b2tlbi5jb2x1bW5zW2pdO1xuICAgICAgICAgIGlmIChjb2x1bW5zW2NvbC5jb2xOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb2x1bW5zW2NvbC5jb2xOYW1lXSA9IGNvbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnY29sdW1uTWV0YWRhdGEnLCBjb2x1bW5zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdjb2x1bW5NZXRhZGF0YScsIHRva2VuLmNvbHVtbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ29yZGVyJywgdG9rZW4ub3JkZXJDb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dzIS5wdXNoKHRva2VuLmNvbHVtbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJzdCEucHVzaCh0b2tlbi5jb2x1bW5zKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3JvdycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICAvLyBLZWVwIHZhbHVlIGZvciBwYXNzaW5nIGluICdkb25lUHJvYycgZXZlbnQuXG4gICAgICB0aGlzLmNvbm5lY3Rpb24ucHJvY1JldHVyblN0YXR1c1ZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgfVxuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgncmV0dXJuVmFsdWUnLCB0b2tlbi5wYXJhbU5hbWUsIHRva2VuLnZhbHVlLCB0b2tlbi5tZXRhZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodG9rZW4uc3FsRXJyb3IgJiYgIXRoaXMucmVxdWVzdC5lcnJvcikge1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgRE9ORV9FUlJPUiBmbGFncyB3YXMgc2V0LCBidXQgYW4gRVJST1IgdG9rZW4gd2FzIG5vdCBzZW50LlxuICAgICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKCdBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nLCAnVU5LTk9XTicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZG9uZVByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5jb25uZWN0aW9uLnByb2NSZXR1cm5TdGF0dXNWYWx1ZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIHRoaXMuY29ubmVjdGlvbi5wcm9jUmV0dXJuU3RhdHVzVmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmVJblByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgaWYgKHRva2VuLnNxbEVycm9yICYmICF0aGlzLnJlcXVlc3QuZXJyb3IpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIERPTkVfRVJST1IgZmxhZ3Mgd2FzIHNldCwgYnV0IGFuIEVSUk9SIHRva2VuIHdhcyBub3Qgc2VudC5cbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcignQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQuJywgJ1VOS05PV04nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmUnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ3Jlc2V0Q29ubmVjdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgYXR0ZW50aW9uIGFja25vd2xlZGdlbWVudCBtZXNzYWdlLlxuICpcbiAqIFRoaXMgbWVzc2FnZSBvbmx5IGNvbnRhaW5zIGEgYERPTkVgIHRva2VuIHRoYXQgYWNrbm93bGVkZ2VzXG4gKiB0aGF0IHRoZSBhdHRlbnRpb24gbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0dGVudGlvblRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcbiAgZGVjbGFyZSByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBhbiBhdHRlbnRpb24gYWNrbm93bGVkZ2VtZW50IHdhcyByZWNlaXZlZC5cbiAgICovXG4gIGRlY2xhcmUgYXR0ZW50aW9uUmVjZWl2ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgcmVxdWVzdDogUmVxdWVzdCB8IEJ1bGtMb2FkKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcblxuICAgIHRoaXMuYXR0ZW50aW9uUmVjZWl2ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgaWYgKHRva2VuLmF0dGVudGlvbikge1xuICAgICAgdGhpcy5hdHRlbnRpb25SZWNlaXZlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUEwRCxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQWlDbkQsTUFBTUcsb0JBQW9CLFNBQVNDLEtBQUssQ0FBQztFQUM5Q0MsV0FBV0EsQ0FBQ0MsT0FBcUIsRUFBRUMsS0FBWSxFQUFFO0lBQy9DLEtBQUssQ0FBQyxvQkFBb0IsR0FBR0EsS0FBSyxDQUFDQyxJQUFJLEdBQUcsUUFBUSxHQUFHRixPQUFP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
485
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVxdWVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Vycm9ycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlVuZXhwZWN0ZWRUb2tlbkVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsImhhbmRsZXIiLCJ0b2tlbiIsIm5hbWUiLCJleHBvcnRzIiwidGRzNzFEZXByZWNhdGlvbldhcm5pbmciLCJlbWl0dGVkIiwiZW1pdCIsInByb2Nlc3MiLCJlbWl0V2FybmluZyIsInR5cGUiLCJjb2RlIiwiVG9rZW5IYW5kbGVyIiwib25JbmZvTWVzc2FnZSIsIm9uRXJyb3JNZXNzYWdlIiwib25TU1BJIiwib25EYXRhYmFzZUNoYW5nZSIsIm9uTGFuZ3VhZ2VDaGFuZ2UiLCJvbkNoYXJzZXRDaGFuZ2UiLCJvblNxbENvbGxhdGlvbkNoYW5nZSIsIm9uUm91dGluZ0NoYW5nZSIsIm9uUGFja2V0U2l6ZUNoYW5nZSIsIm9uUmVzZXRDb25uZWN0aW9uIiwib25CZWdpblRyYW5zYWN0aW9uIiwib25Db21taXRUcmFuc2FjdGlvbiIsIm9uUm9sbGJhY2tUcmFuc2FjdGlvbiIsIm9uRmVkQXV0aEluZm8iLCJvbkZlYXR1cmVFeHRBY2siLCJvbkxvZ2luQWNrIiwib25Db2xNZXRhZGF0YSIsIm9uVGFiTmFtZSIsIm9uQ29sSW5mbyIsIm9uT3JkZXIiLCJvblJvdyIsIm9uUmV0dXJuU3RhdHVzIiwib25SZXR1cm5WYWx1ZSIsIm9uRG9uZVByb2MiLCJvbkRvbmVJblByb2MiLCJvbkRvbmUiLCJvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lciIsIkluaXRpYWxTcWxUb2tlbkhhbmRsZXIiLCJjb25uZWN0aW9uIiwibmV3VmFsdWUiLCJkYXRhYmFzZUNvbGxhdGlvbiIsIm1lc3NhZ2VJbyIsInBhY2tldFNpemUiLCJ0cmFuc2FjdGlvbkRlc2NyaXB0b3JzIiwicHVzaCIsImluVHJhbnNhY3Rpb24iLCJsZW5ndGgiLCJjbG9zZSIsIkxvZ2luN1Rva2VuSGFuZGxlciIsImxvZ2luQWNrUmVjZWl2ZWQiLCJsb2dpbkVycm9yIiwidW5kZWZpbmVkIiwiZXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJtZXNzYWdlIiwiaXNMb2dpbkVycm9yVHJhbnNpZW50IiwidHJhbnNpZW50RXJyb3JMb29rdXAiLCJpc1RyYW5zaWVudEVycm9yIiwibnVtYmVyIiwiY3VyVHJhbnNpZW50UmV0cnlDb3VudCIsImNvbmZpZyIsIm9wdGlvbnMiLCJtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMiLCJpc1RyYW5zaWVudCIsIm50bG1wYWNrZXQiLCJudGxtcGFja2V0QnVmZmVyIiwiZmVkQXV0aEluZm9Ub2tlbiIsImF1dGhlbnRpY2F0aW9uIiwiZmVkQXV0aCIsInV0ZjhTdXBwb3J0IiwidGRzVmVyc2lvbiIsImludGVyZmFjZSIsInNlcnZlciIsImluc3RhbmNlIiwic3BsaXQiLCJyb3V0aW5nRGF0YSIsInBvcnQiLCJSZXF1ZXN0VG9rZW5IYW5kbGVyIiwicmVxdWVzdCIsImVycm9ycyIsImNhbmNlbGVkIiwiUmVxdWVzdEVycm9yIiwic3RhdGUiLCJjbGFzcyIsInNlcnZlck5hbWUiLCJwcm9jTmFtZSIsImxpbmVOdW1iZXIiLCJSZXF1ZXN0IiwiQWdncmVnYXRlRXJyb3IiLCJ1c2VDb2x1bW5OYW1lcyIsImNvbHVtbnMiLCJPYmplY3QiLCJjcmVhdGUiLCJqIiwibGVuIiwiY29sIiwiY29sTmFtZSIsInRhYmxlTmFtZXMiLCJvcmRlckNvbHVtbnMiLCJyb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiIsInJvd3MiLCJyb3dDb2xsZWN0aW9uT25Eb25lIiwicnN0IiwicHJvY1JldHVyblN0YXR1c1ZhbHVlIiwidmFsdWUiLCJwYXJhbU5hbWUiLCJtZXRhZGF0YSIsInNxbEVycm9yIiwicm93Q291bnQiLCJtb3JlIiwiQXR0ZW50aW9uVG9rZW5IYW5kbGVyIiwiYXR0ZW50aW9uUmVjZWl2ZWQiLCJhdHRlbnRpb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29ubmVjdGlvbiBmcm9tICcuLi9jb25uZWN0aW9uJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yLCBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgdHlwZSBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7XG4gIEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbixcbiAgQ2hhcnNldEVudkNoYW5nZVRva2VuLFxuICBDb2xJbmZvVG9rZW4sXG4gIENvbGxhdGlvbkNoYW5nZVRva2VuLFxuICBDb2xNZXRhZGF0YVRva2VuLFxuICBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZUVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbixcbiAgRG9uZUluUHJvY1Rva2VuLFxuICBEb25lUHJvY1Rva2VuLFxuICBEb25lVG9rZW4sXG4gIEVycm9yTWVzc2FnZVRva2VuLFxuICBGZWF0dXJlRXh0QWNrVG9rZW4sXG4gIEZlZEF1dGhJbmZvVG9rZW4sXG4gIEluZm9NZXNzYWdlVG9rZW4sXG4gIExhbmd1YWdlRW52Q2hhbmdlVG9rZW4sXG4gIExvZ2luQWNrVG9rZW4sXG4gIE5CQ1Jvd1Rva2VuLFxuICBPcmRlclRva2VuLFxuICBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4sXG4gIFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSZXR1cm5TdGF0dXNUb2tlbixcbiAgUmV0dXJuVmFsdWVUb2tlbixcbiAgUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSb3V0aW5nRW52Q2hhbmdlVG9rZW4sXG4gIFJvd1Rva2VuLFxuICBTU1BJVG9rZW4sXG4gIFRhYk5hbWVUb2tlbixcbiAgVG9rZW5cbn0gZnJvbSAnLi90b2tlbic7XG5pbXBvcnQgQnVsa0xvYWQgZnJvbSAnLi4vYnVsay1sb2FkJztcblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRUb2tlbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihoYW5kbGVyOiBUb2tlbkhhbmRsZXIsIHRva2VuOiBUb2tlbikge1xuICAgIHN1cGVyKCdVbmV4cGVjdGVkIHRva2VuIGAnICsgdG9rZW4ubmFtZSArICdgIGluIGAnICsgaGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lICsgJ2AnKTtcbiAgfVxufVxuXG4vKipcbiAqIEVtaXRzIGEgd2FybmluZyAob25jZSBwZXIgcHJvY2Vzcykgd2hlbiBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWRcbiAqIHVzaW5nIFREUyA3LjEuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHRkczcxRGVwcmVjYXRpb25XYXJuaW5nID0ge1xuICBlbWl0dGVkOiBmYWxzZSxcblxuICBlbWl0KCkge1xuICAgIGlmICh0aGlzLmVtaXR0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0dGVkID0gdHJ1ZTtcblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoXG4gICAgICAnU3VwcG9ydCBmb3IgVERTIDcuMSAodXNlZCBieSBTUUwgU2VydmVyIDIwMDApIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIGB0ZWRpb3VzYC4nLFxuICAgICAgeyB0eXBlOiAnRGVwcmVjYXRpb25XYXJuaW5nJywgY29kZTogJ1RFRElPVVNfREVQX1REUzcxJyB9XG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIFRva2VuSGFuZGxlciB7XG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uU1NQSSh0b2tlbjogU1NQSVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSh0b2tlbjogTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblNxbENvbGxhdGlvbkNoYW5nZSh0b2tlbjogQ29sbGF0aW9uQ2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb3V0aW5nQ2hhbmdlKHRva2VuOiBSb3V0aW5nRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQmVnaW5UcmFuc2FjdGlvbih0b2tlbjogQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkZlYXR1cmVFeHRBY2sodG9rZW46IEZlYXR1cmVFeHRBY2tUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkxvZ2luQWNrKHRva2VuOiBMb2dpbkFja1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29sTWV0YWRhdGEodG9rZW46IENvbE1ldGFkYXRhVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25UYWJOYW1lKHRva2VuOiBUYWJOYW1lVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Db2xJbmZvKHRva2VuOiBDb2xJbmZvVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25PcmRlcih0b2tlbjogT3JkZXJUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkRvbmVQcm9jKHRva2VuOiBEb25lUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byB0aGUgaW5pdGlhbCBTUUwgQmF0Y2ggcmVxdWVzdFxuICogdGhhdCBzZXRzIHVwIGRpZmZlcmVudCBjb25uZWN0aW9uIHNldHRpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgSW5pdGlhbFNxbFRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gIH1cblxuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2luZm9NZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24ubWVzc2FnZUlvLnBhY2tldFNpemUodG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25CZWdpblRyYW5zYWN0aW9uKHRva2VuOiBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5wdXNoKHRva2VuLm5ld1ZhbHVlKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gIH1cblxuICBvbkNvbW1pdFRyYW5zYWN0aW9uKHRva2VuOiBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID0gMTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIC8vIEFuIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2suIFJlc2V0IHRoZSB0cmFuc2FjdGlvbiBjb3VudGVyXG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncm9sbGJhY2tUcmFuc2FjdGlvbicpO1xuICB9XG5cbiAgb25Db2xNZXRhZGF0YSh0b2tlbjogQ29sTWV0YWRhdGFUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdjb2x1bW5NZXRhZGF0YScgd2hlbiBubyBzcWxSZXF1ZXN0IGlzIGluIHByb2dyZXNzXCIpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoXCJSZWNlaXZlZCAnb3JkZXInIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdyb3cnIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJldHVyblZhbHVlKHRva2VuOiBSZXR1cm5WYWx1ZVRva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJlc2V0Q29ubmVjdGlvbih0b2tlbjogUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncmVzZXRDb25uZWN0aW9uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIExvZ2luNyBtZXNzYWdlLlxuICovXG5leHBvcnQgY2xhc3MgTG9naW43VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuXG4gIGRlY2xhcmUgZmVkQXV0aEluZm9Ub2tlbjogRmVkQXV0aEluZm9Ub2tlbiB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSByb3V0aW5nRGF0YTogeyBzZXJ2ZXI6IHN0cmluZywgcG9ydDogbnVtYmVyLCBpbnN0YW5jZTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5cbiAgZGVjbGFyZSBsb2dpbkFja1JlY2VpdmVkOiBib29sZWFuO1xuXG4gIGRlY2xhcmUgbG9naW5FcnJvcjogQ29ubmVjdGlvbkVycm9yIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9naW5BY2tSZWNlaXZlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5sb2dpbkVycm9yID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgb25JbmZvTWVzc2FnZSh0b2tlbjogSW5mb01lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdpbmZvTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRXJyb3JNZXNzYWdlKHRva2VuOiBFcnJvck1lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvck1lc3NhZ2UnLCB0b2tlbik7XG5cbiAgICBjb25zdCBlcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IodG9rZW4ubWVzc2FnZSwgJ0VMT0dJTicpO1xuXG4gICAgY29uc3QgaXNMb2dpbkVycm9yVHJhbnNpZW50ID0gdGhpcy5jb25uZWN0aW9uLnRyYW5zaWVudEVycm9yTG9va3VwLmlzVHJhbnNpZW50RXJyb3IodG9rZW4ubnVtYmVyKTtcbiAgICBpZiAoaXNMb2dpbkVycm9yVHJhbnNpZW50ICYmIHRoaXMuY29ubmVjdGlvbi5jdXJUcmFuc2llbnRSZXRyeUNvdW50ICE9PSB0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzKSB7XG4gICAgICBlcnJvci5pc1RyYW5zaWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dpbkVycm9yID0gZXJyb3I7XG4gIH1cblxuICBvblNTUEkodG9rZW46IFNTUElUb2tlbikge1xuICAgIGlmICh0b2tlbi5udGxtcGFja2V0KSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldCA9IHRva2VuLm50bG1wYWNrZXQ7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldEJ1ZmZlciA9IHRva2VuLm50bG1wYWNrZXRCdWZmZXI7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXInLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRoaXMuZmVkQXV0aEluZm9Ub2tlbiA9IHRva2VuO1xuICB9XG5cbiAgb25GZWF0dXJlRXh0QWNrKHRva2VuOiBGZWF0dXJlRXh0QWNrVG9rZW4pIHtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0aW9uIH0gPSB0aGlzLmNvbm5lY3Rpb24uY29uZmlnO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bScgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnKSB7XG4gICAgICBpZiAodG9rZW4uZmVkQXV0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0RpZCBub3QgcmVjZWl2ZSBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uIGFja25vd2xlZGdlbWVudCcpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKGBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uIGFja25vd2xlZGdtZW50IGZvciAke2F1dGhlbnRpY2F0aW9uLnR5cGV9IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpbmNsdWRlcyBleHRyYSBkYXRhYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoID09PSB1bmRlZmluZWQgJiYgdG9rZW4udXRmOFN1cHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignUmVjZWl2ZWQgYWNrbm93bGVkZ2VtZW50IGZvciB1bmtub3duIGZlYXR1cmUnKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLmZlZEF1dGgpIHtcbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0RpZCBub3QgcmVxdWVzdCBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uLCBidXQgcmVjZWl2ZWQgdGhlIGFja25vd2xlZGdtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgb25Mb2dpbkFjayh0b2tlbjogTG9naW5BY2tUb2tlbikge1xuICAgIGlmICghdG9rZW4udGRzVmVyc2lvbikge1xuICAgICAgLy8gdW5zdXBwb3J0ZWQgVERTIHZlcnNpb25cbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ1NlcnZlciByZXNwb25kZWQgd2l0aCB1bmtub3duIFREUyB2ZXJzaW9uLicsICdFVERTJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0b2tlbi5pbnRlcmZhY2UpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIGludGVyZmFjZVxuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignU2VydmVyIHJlc3BvbmRlZCB3aXRoIHVuc3VwcG9ydGVkIGludGVyZmFjZS4nLCAnRUlOVEVSRkFDRU5PVFNVUFAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1c2UgbmVnb3RpYXRlZCB2ZXJzaW9uXG4gICAgdGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPSB0b2tlbi50ZHNWZXJzaW9uO1xuXG4gICAgaWYgKHRva2VuLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgdGRzNzFEZXByZWNhdGlvbldhcm5pbmcuZW1pdCgpO1xuICAgIH1cblxuICAgIHRoaXMubG9naW5BY2tSZWNlaXZlZCA9IHRydWU7XG4gIH1cblxuICBvblJvdXRpbmdDaGFuZ2UodG9rZW46IFJvdXRpbmdFbnZDaGFuZ2VUb2tlbikge1xuICAgIC8vIFNwbGl0cyBpbnN0YW5jZSBuYW1lIGF0dGFjaGVkIHRvIHRoZSByZWRpcmVjdCB1cmwuIEUuZy4sIHJlZGlyZWN0LmRiLm5ldFxcaW5zdGFuY2UxIC0tPiBbcmVkaXJlY3QuZGIubmV0LCBpbnN0YW5jZTFdXG4gICAgY29uc3QgWyBzZXJ2ZXIsIGluc3RhbmNlIF0gPSB0b2tlbi5uZXdWYWx1ZS5zZXJ2ZXIuc3BsaXQoJ1xcXFwnKTtcblxuICAgIHRoaXMucm91dGluZ0RhdGEgPSB7XG4gICAgICBzZXJ2ZXIsIHBvcnQ6IHRva2VuLm5ld1ZhbHVlLnBvcnQsIGluc3RhbmNlXG4gICAgfTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIFJQQyBSZXF1ZXN0LFxuICogYSBTUUwgQmF0Y2ggUmVxdWVzdCwgYSBCdWxrIExvYWQgQkNQIFJlcXVlc3Qgb3IgYSBUcmFuc2FjdGlvbiBNYW5hZ2VyIFJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuICBkZWNsYXJlIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZDtcbiAgZGVjbGFyZSBlcnJvcnM6IFJlcXVlc3RFcnJvcltdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24sIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgfVxuXG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnaW5mb01lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3JNZXNzYWdlJywgdG9rZW4pO1xuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFJlcXVlc3RFcnJvcih0b2tlbi5tZXNzYWdlLCAnRVJFUVVFU1QnKTtcblxuICAgICAgZXJyb3IubnVtYmVyID0gdG9rZW4ubnVtYmVyO1xuICAgICAgZXJyb3Iuc3RhdGUgPSB0b2tlbi5zdGF0ZTtcbiAgICAgIGVycm9yLmNsYXNzID0gdG9rZW4uY2xhc3M7XG4gICAgICBlcnJvci5zZXJ2ZXJOYW1lID0gdG9rZW4uc2VydmVyTmFtZTtcbiAgICAgIGVycm9yLnByb2NOYW1lID0gdG9rZW4ucHJvY05hbWU7XG4gICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gZXJyb3I7XG4gICAgICBpZiAodGhpcy5yZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCAmJiB0aGlzLmVycm9ycy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IG5ldyBBZ2dyZWdhdGVFcnJvcih0aGlzLmVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnbGFuZ3VhZ2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdjaGFyc2V0Q2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uID0gdG9rZW4ubmV3VmFsdWU7XG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkJlZ2luVHJhbnNhY3Rpb24odG9rZW46IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLnB1c2godG9rZW4ubmV3VmFsdWUpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBvblJvbGxiYWNrVHJhbnNhY3Rpb24odG9rZW46IFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCA9IDE7XG4gICAgLy8gQW4gb3V0ZXJtb3N0IHRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjay4gUmVzZXQgdGhlIHRyYW5zYWN0aW9uIGNvdW50ZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyb2xsYmFja1RyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBvbkNvbE1ldGFkYXRhKHRva2VuOiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMpIHtcbiAgICAgICAgY29uc3QgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBDb2x1bW5NZXRhZGF0YSB9ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gdG9rZW4uY29sdW1ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbCA9IHRva2VuLmNvbHVtbnNbal07XG4gICAgICAgICAgaWYgKGNvbHVtbnNbY29sLmNvbE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbnNbY29sLmNvbE5hbWVdID0gY29sO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdjb2x1bW5NZXRhZGF0YScsIGNvbHVtbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2NvbHVtbk1ldGFkYXRhJywgdG9rZW4uY29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25UYWJOYW1lKHRva2VuOiBUYWJOYW1lVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3RhYk5hbWUnLCB0b2tlbi50YWJsZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbEluZm8odG9rZW46IENvbEluZm9Ub2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnY29sSW5mbycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ29yZGVyJywgdG9rZW4ub3JkZXJDb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dzIS5wdXNoKHRva2VuLmNvbHVtbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJzdCEucHVzaCh0b2tlbi5jb2x1bW5zKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3JvdycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICAvLyBLZWVwIHZhbHVlIGZvciBwYXNzaW5nIGluICdkb25lUHJvYycgZXZlbnQuXG4gICAgICB0aGlzLmNvbm5lY3Rpb24ucHJvY1JldHVyblN0YXR1c1ZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgfVxuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgncmV0dXJuVmFsdWUnLCB0b2tlbi5wYXJhbU5hbWUsIHRva2VuLnZhbHVlLCB0b2tlbi5tZXRhZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodG9rZW4uc3FsRXJyb3IgJiYgIXRoaXMucmVxdWVzdC5lcnJvcikge1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgRE9ORV9FUlJPUiBmbGFncyB3YXMgc2V0LCBidXQgYW4gRVJST1IgdG9rZW4gd2FzIG5vdCBzZW50LlxuICAgICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKCdBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nLCAnVU5LTk9XTicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZG9uZVByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5jb25uZWN0aW9uLnByb2NSZXR1cm5TdGF0dXNWYWx1ZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIHRoaXMuY29ubmVjdGlvbi5wcm9jUmV0dXJuU3RhdHVzVmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmVJblByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgaWYgKHRva2VuLnNxbEVycm9yICYmICF0aGlzLnJlcXVlc3QuZXJyb3IpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIERPTkVfRVJST1IgZmxhZ3Mgd2FzIHNldCwgYnV0IGFuIEVSUk9SIHRva2VuIHdhcyBub3Qgc2VudC5cbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcignQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQuJywgJ1VOS05PV04nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmUnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ3Jlc2V0Q29ubmVjdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgYXR0ZW50aW9uIGFja25vd2xlZGdlbWVudCBtZXNzYWdlLlxuICpcbiAqIFRoaXMgbWVzc2FnZSBvbmx5IGNvbnRhaW5zIGEgYERPTkVgIHRva2VuIHRoYXQgYWNrbm93bGVkZ2VzXG4gKiB0aGF0IHRoZSBhdHRlbnRpb24gbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0dGVudGlvblRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcbiAgZGVjbGFyZSByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBhbiBhdHRlbnRpb24gYWNrbm93bGVkZ2VtZW50IHdhcyByZWNlaXZlZC5cbiAgICovXG4gIGRlY2xhcmUgYXR0ZW50aW9uUmVjZWl2ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgcmVxdWVzdDogUmVxdWVzdCB8IEJ1bGtMb2FkKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcblxuICAgIHRoaXMuYXR0ZW50aW9uUmVjZWl2ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgaWYgKHRva2VuLmF0dGVudGlvbikge1xuICAgICAgdGhpcy5hdHRlbnRpb25SZWNlaXZlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUEwRCxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQW1DbkQsTUFBTUcsb0JBQW9CLFNBQVNDLEtBQUssQ0FBQztFQUM5Q0MsV0FBV0EsQ0FBQ0MsT0FBcUIsRUFBRUMsS0FBWSxFQUFFO0lBQy9DLEtBQUssQ0FBQyxvQkFBb0IsR0FBR0EsS0FBSyxDQUFDQyxJQUFJLEdBQUcsUUFBUSxHQUFHRixPQUFPLENBQUNELFdBQVcsQ0FBQ0csSUFBSSxHQUFHLEdBQUcsQ0FBQztFQUN0RjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBQyxPQUFBLENBQUFOLG9CQUFBLEdBQUFBLG9CQUFBO0FBTU8sTUFBTU8sdUJBQXVCLEdBQUFELE9BQUEsQ0FBQUMsdUJBQUEsR0FBRztFQUNyQ0MsT0FBTyxFQUFFLEtBQUs7RUFFZEMsSUFBSUEsQ0FBQSxFQUFHO0lBQ0wsSUFBSSxJQUFJLENBQUNELE9BQU8sRUFBRTtNQUNoQjtJQUNGO0lBQ0EsSUFBSSxDQUFDQSxPQUFPLEdBQUcsSUFBSTtJQUVuQkUsT0FBTyxDQUFDQyxXQUFXLENBQ2pCLG1IQUFtSCxFQUNuSDtNQUFFQyxJQUFJLEVBQUUsb0JBQW9CO01BQUVDLElBQUksRUFBRTtJQUFvQixDQUMxRCxDQUFDO0VBQ0g7QUFDRixDQUFDO0FBRU0sTUFBTUMsWUFBWSxDQUFDO0VBQ3hCQyxhQUFhQSxDQUFDWCxLQUF1QixFQUFFO0lBQ3JDLE1BQU0sSUFBSUosb0JBQW9CLENBQUMsSUFBSSxFQUFFSSxLQUFLLENBQUM7RUFDN0M7RUFFQVksY0FBY0EsQ0FBQ1osS0FBd0IsRUFBRTtJQUN2QyxNQUFNLElBQUlKLG9CQUFvQixDQUFDLElBQUksRUFBRUksS0FBSyxDQUFDO0VBQzdDO0VBRUFhLE1BQU1BLENBQUNiLEtBQWdCLEVBQUU7SUFDdkIsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBYyxnQkFBZ0JBLENBQUNkLEtBQTZCLEVBQUU7SUFDOUMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBZSxnQkFBZ0JBLENBQUNmLEtBQTZCLEVBQUU7SUFDOUMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBZ0IsZUFBZUEsQ0FBQ2hCLEtBQTRCLEVBQUU7SUFDNUMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBaUIsb0JBQW9CQSxDQUFDakIsS0FBMkIsRUFBRTtJQUNoRCxNQUFNLElBQUlKLG9CQUFvQixDQUFDLElBQUksRUFBRUksS0FBSyxDQUFDO0VBQzdDO0VBRUFrQixlQUFlQSxDQUFDbEIsS0FBNEIsRUFBRTtJQUM1QyxNQUFNLElBQUlKLG9CQUFvQixDQUFDLElBQUksRUFBRUksS0FBSyxDQUFDO0VBQzdDO0VBRUFtQixrQkFBa0JBLENBQUNuQixLQUErQixFQUFFO0lBQ2xELE1BQU0sSUFBSUosb0JBQW9CLENBQUMsSUFBSSxFQUFFSSxLQUFLLENBQUM7RUFDN0M7RUFFQW9CLGlCQUFpQkEsQ0FBQ3BCLEtBQW9DLEVBQUU7SUFDdEQsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBcUIsa0JBQWtCQSxDQUFDckIsS0FBcUMsRUFBRTtJQUN4RCxNQUFNLElBQUlKLG9CQUFvQixDQUFDLElBQUksRUFBRUksS0FBSyxDQUFDO0VBQzdDO0VBRUFzQixtQkFBbUJBLENBQUN0QixLQUFzQyxFQUFFO0lBQzFELE1BQU0sSUFBSUosb0JBQW9CLENBQUMsSUFBSSxFQUFFSSxLQUFLLENBQUM7RUFDN0M7RUFFQXVCLHFCQUFxQkEsQ0FBQ3ZCLEtBQXdDLEVBQUU7SUFDOUQsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBd0IsYUFBYUEsQ0FBQ3hCLEtBQXVCLEVBQUU7SUFDckMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBeUIsZUFBZUEsQ0FBQ3pCLEtBQXlCLEVBQUU7SUFDekMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBMEIsVUFBVUEsQ0FBQzFCLEtBQW9CLEVBQUU7SUFDL0IsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBMkIsYUFBYUEsQ0FBQzNCLEtBQXVCLEVBQUU7SUFDckMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBNEIsU0FBU0EsQ0FBQzVCLEtBQW1CLEVBQUU7SUFDN0IsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBNkIsU0FBU0EsQ0FBQzdCLEtBQW1CLEVBQUU7SUFDN0IsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBOEIsT0FBT0EsQ0FBQzlCLEtBQWlCLEVBQUU7SUFDekIsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBK0IsS0FBS0EsQ0FBQy9CLEtBQTZCLEVBQUU7SUFDbkMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBZ0MsY0FBY0EsQ0FBQ2hDLEtBQXdCLEVBQUU7SUFDdkMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBaUMsYUFBYUEsQ0FBQ2pDLEtBQXVCLEVBQUU7SUFDckMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBa0MsVUFBVUEsQ0FBQ2xDLEtBQW9CLEVBQUU7SUFDL0IsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBbUMsWUFBWUEsQ0FBQ25DLEtBQXNCLEVBQUU7SUFDbkMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBb0MsTUFBTUEsQ0FBQ3BDLEtBQWdCLEVBQUU7SUFDdkIsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQyxJQUFJLEVBQUVJLEtBQUssQ0FBQztFQUM3QztFQUVBcUMsMEJBQTBCQSxDQUFDckMsS0FBNkMsRUFBRTtJQUN4RSxNQUFNLElBQUlKLG9CQUFvQixDQUFDLElBQUksRUFBRUksS0FBSyxDQUFDO0VBQzdDO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQUUsT0FBQSxDQUFBUSxZQUFBLEdBQUFBLFlBQUE7QUFJTyxNQUFNNEIsc0JBQXNCLFNBQVM1QixZQUFZLENBQUM7RUFHdkRaLFdBQVdBLENBQUN5QyxVQUFzQixFQUFFO0lBQ2xDLEtBQUssQ0FBQyxDQUFDO0lBRVAsSUFBSSxDQUFDQSxVQUFVLEdBQUdBLFVBQVU7RUFDOUI7RUFFQTVCLGFBQWFBLENBQUNYLEtBQXVCLEVBQUU7SUFDckMsSUFBSSxDQUFDdUMsVUFBVSxDQUFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRUwsS0FBSyxDQUFDO0VBQzVDO0VBRUFZLGNBQWNBLENBQUNaLEtBQXdCLEVBQUU7SUFDdkMsSUFBSSxDQUFDdUMsVUFBVSxDQUFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRUwsS0FBSyxDQUFDO0VBQzdDO0VBRUFjLGdCQUFnQkEsQ0FBQ2QsS0FBNkIsRUFBRTtJQUM5QyxJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUVMLEtBQUssQ0FBQ3dDLFFBQVEsQ0FBQztFQUN4RDtFQUVBekIsZ0JBQWdCQSxDQUFDZixLQUE2QixFQUFFO0lBQzlDLElBQUksQ0FBQ3VDLFVBQVUsQ0FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRUwsS0FBSyxDQUFDd0MsUUFBUSxDQUFDO0VBQ3hEO0VBRUF4QixlQUFlQSxDQUFDaEIsS0FBNEIsRUFBRTtJQUM1QyxJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsZUFBZSxFQUFFTCxLQUFLLENBQUN3QyxRQUFRLENBQUM7RUFDdkQ7RUFFQXZCLG9CQUFvQkEsQ0FBQ2pCLEtBQTJCLEVBQUU7SUFDaEQsSUFBSSxDQUFDdUMsVUFBVSxDQUFDRSxpQkFBaUIsR0FBR3pDLEtBQUssQ0FBQ3dDLFFBQVE7RUFDcEQ7RUFFQXJCLGtCQUFrQkEsQ0FBQ25CLEtBQStCLEVBQUU7SUFDbEQsSUFBSSxDQUFDdUMsVUFBVSxDQUFDRyxTQUFTLENBQUNDLFVBQVUsQ0FBQzNDLEtBQUssQ0FBQ3dDLFFBQVEsQ0FBQztFQUN0RDtFQUVBbkIsa0JBQWtCQSxDQUFDckIsS0FBcUMsRUFBRTtJQUN4RCxJQUFJLENBQUN1QyxVQUFVLENBQUNLLHNCQUFzQixDQUFDQyxJQUFJLENBQUM3QyxLQUFLLENBQUN3QyxRQUFRLENBQUM7SUFDM0QsSUFBSSxDQUFDRCxVQUFVLENBQUNPLGFBQWEsR0FBRyxJQUFJO0VBQ3RDO0VBRUF4QixtQkFBbUJBLENBQUN0QixLQUFzQyxFQUFFO0lBQzFELElBQUksQ0FBQ3VDLFVBQVUsQ0FBQ0ssc0JBQXNCLENBQUNHLE1BQU0sR0FBRyxDQUFDO0lBQ2pELElBQUksQ0FBQ1IsVUFBVSxDQUFDTyxhQUFhLEdBQUcsS0FBSztFQUN2QztFQUVBdkIscUJBQXFCQSxDQUFDdkIsS0FBd0MsRUFBRTtJQUM5RCxJQUFJLENBQUN1QyxVQUFVLENBQUNLLHNCQUFzQixDQUFDRyxNQUFNLEdBQUcsQ0FBQztJQUNqRDtJQUNBLElBQUksQ0FBQ1IsVUFBVSxDQUFDTyxhQUFhLEdBQUcsS0FBSztJQUNyQyxJQUFJLENBQUNQLFVBQVUsQ0FBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztFQUM3QztFQUVBc0IsYUFBYUEsQ0FBQzNCLEtBQXVCLEVBQUU7SUFDckMsSUFBSSxDQUFDdUMsVUFBVSxDQUFDbEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJUixLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUN2RyxJQUFJLENBQUMwQyxVQUFVLENBQUNTLEtBQUssQ0FBQyxDQUFDO0VBQ3pCO0VBRUFsQixPQUFPQSxDQUFDOUIsS0FBaUIsRUFBRTtJQUN6QixJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUlSLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0lBQzlGLElBQUksQ0FBQzBDLFVBQVUsQ0FBQ1MsS0FBSyxDQUFDLENBQUM7RUFDekI7RUFFQWpCLEtBQUtBLENBQUMvQixLQUE2QixFQUFFO0lBQ25DLElBQUksQ0FBQ3VDLFVBQVUsQ0FBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSVIsS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDNUYsSUFBSSxDQUFDMEMsVUFBVSxDQUFDUyxLQUFLLENBQUMsQ0FBQztFQUN6QjtFQUVBaEIsY0FBY0EsQ0FBQ2hDLEtBQXdCLEVBQUU7SUFDdkM7RUFBQTtFQUdGaUMsYUFBYUEsQ0FBQ2pDLEtBQXVCLEVBQUU7SUFDckM7RUFBQTtFQUdGa0MsVUFBVUEsQ0FBQ2xDLEtBQW9CLEVBQUU7SUFDL0I7RUFBQTtFQUdGbUMsWUFBWUEsQ0FBQ25DLEtBQXNCLEVBQUU7SUFDbkM7RUFBQTtFQUdGb0MsTUFBTUEsQ0FBQ3BDLEtBQWdCLEVBQUU7SUFDdkI7RUFBQTtFQUdGb0IsaUJBQWlCQSxDQUFDcEIsS0FBb0MsRUFBRTtJQUN0RCxJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7RUFDekM7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFGQUgsT0FBQSxDQUFBb0Msc0JBQUEsR0FBQUEsc0JBQUE7QUFHTyxNQUFNVyxrQkFBa0IsU0FBU3ZDLFlBQVksQ0FBQztFQVVuRFosV0FBV0EsQ0FBQ3lDLFVBQXNCLEVBQUU7SUFDbEMsS0FBSyxDQUFDLENBQUM7SUFDUCxJQUFJLENBQUNXLGdCQUFnQixHQUFHLEtBQUs7SUFDN0IsSUFBSSxDQUFDWCxVQUFVLEdBQUdBLFVBQVU7SUFDNUIsSUFBSSxDQUFDWSxVQUFVLEdBQUdDLFNBQVM7RUFDN0I7RUFFQXpDLGFBQWFBLENBQUNYLEtBQXVCLEVBQUU7SUFDckMsSUFBSSxDQUFDdUMsVUFBVSxDQUFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRUwsS0FBSyxDQUFDO0VBQzVDO0VBRUFZLGNBQWNBLENBQUNaLEtBQXdCLEVBQUU7SUFDdkMsSUFBSSxDQUFDdUMsVUFBVSxDQUFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRUwsS0FBSyxDQUFDO0lBRTNDLE1BQU1xRCxLQUFLLEdBQUcsSUFBSUMsdUJBQWUsQ0FBQ3RELEtBQUssQ0FBQ3VELE9BQU8sRUFBRSxRQUFRLENBQUM7SUFFMUQsTUFBTUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDakIsVUFBVSxDQUFDa0Isb0JBQW9CLENBQUNDLGdCQUFnQixDQUFDMUQsS0FBSyxDQUFDMkQsTUFBTSxDQUFDO0lBQ2pHLElBQUlILHFCQUFxQixJQUFJLElBQUksQ0FBQ2pCLFVBQVUsQ0FBQ3FCLHNCQUFzQixLQUFLLElBQUksQ0FBQ3JCLFVBQVUsQ0FBQ3NCLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDQywyQkFBMkIsRUFBRTtNQUNsSVYsS0FBSyxDQUFDVyxXQUFXLEdBQUcsSUFBSTtJQUMxQjtJQUVBLElBQUksQ0FBQ2IsVUFBVSxHQUFHRSxLQUFLO0VBQ3pCO0VBRUF4QyxNQUFNQSxDQUFDYixLQUFnQixFQUFFO0lBQ3ZCLElBQUlBLEtBQUssQ0FBQ2lFLFVBQVUsRUFBRTtNQUNwQixJQUFJLENBQUMxQixVQUFVLENBQUMwQixVQUFVLEdBQUdqRSxLQUFLLENBQUNpRSxVQUFVO01BQzdDLElBQUksQ0FBQzFCLFVBQVUsQ0FBQzJCLGdCQUFnQixHQUFHbEUsS0FBSyxDQUFDa0UsZ0JBQWdCO0lBQzNEO0VBQ0Y7RUFFQXBELGdCQUFnQkEsQ0FBQ2QsS0FBNkIsRUFBRTtJQUM5QyxJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUVMLEtBQUssQ0FBQ3dDLFFBQVEsQ0FBQztFQUN4RDtFQUVBSCwwQkFBMEJBLENBQUNyQyxLQUE2QyxFQUFFO0lBQ3hFLElBQUksQ0FBQ3VDLFVBQVUsQ0FBQ2xDLElBQUksQ0FBQywwQkFBMEIsRUFBRUwsS0FBSyxDQUFDd0MsUUFBUSxDQUFDO0VBQ2xFO0VBRUF6QixnQkFBZ0JBLENBQUNmLEtBQTZCLEVBQUU7SUFDOUMsSUFBSSxDQUFDdUMsVUFBVSxDQUFDbEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFTCxLQUFLLENBQUN3QyxRQUFRLENBQUM7RUFDeEQ7RUFFQXhCLGVBQWVBLENBQUNoQixLQUE0QixFQUFFO0lBQzVDLElBQUksQ0FBQ3VDLFVBQVUsQ0FBQ2xDLElBQUksQ0FBQyxlQUFlLEVBQUVMLEtBQUssQ0FBQ3dDLFFBQVEsQ0FBQztFQUN2RDtFQUVBdkIsb0JBQW9CQSxDQUFDakIsS0FBMkIsRUFBRTtJQUNoRCxJQUFJLENBQUN1QyxVQUFVLENBQUNFLGlCQUFpQixHQUFHekMsS0FBSyxDQUFDd0MsUUFBUTtFQUNwRDtFQUVBaEIsYUFBYUEsQ0FBQ3hCLEtBQXVCLEVBQUU7SUFDckMsSUFBSSxDQUFDbUUsZ0JBQWdCLEdBQUduRSxLQUFLO0VBQy9CO0VBRUF5QixlQUFlQSxDQUFDekIsS0FBeUIsRUFBRTtJQUN6QyxNQUFNO01BQUVvRTtJQUFlLENBQUMsR0FBRyxJQUFJLENBQUM3QixVQUFVLENBQUNzQixNQUFNO0lBRWpELElBQUlPLGNBQWMsQ0FBQzVELElBQUksS0FBSyxpQ0FBaUMsSUFBSTRELGNBQWMsQ0FBQzVELElBQUksS0FBSyxxQ0FBcUMsSUFBSTRELGNBQWMsQ0FBQzVELElBQUksS0FBSywrQkFBK0IsSUFBSTRELGNBQWMsQ0FBQzVELElBQUksS0FBSyx3Q0FBd0MsSUFBSTRELGNBQWMsQ0FBQzVELElBQUksS0FBSyxpREFBaUQsSUFBSTRELGNBQWMsQ0FBQzVELElBQUksS0FBSyxnQ0FBZ0MsRUFBRTtNQUN0WSxJQUFJUixLQUFLLENBQUNxRSxPQUFPLEtBQUtqQixTQUFTLEVBQUU7UUFDL0IsSUFBSSxDQUFDRCxVQUFVLEdBQUcsSUFBSUcsdUJBQWUsQ0FBQyxpRUFBaUUsQ0FBQztNQUMxRyxDQUFDLE1BQU0sSUFBSXRELEtBQUssQ0FBQ3FFLE9BQU8sQ0FBQ3RCLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckMsSUFBSSxDQUFDSSxVQUFVLEdBQUcsSUFBSUcsdUJBQWUsQ0FBQyxzREFBc0RjLGNBQWMsQ0FBQzVELElBQUksNENBQTRDLENBQUM7TUFDOUo7SUFDRixDQUFDLE1BQU0sSUFBSVIsS0FBSyxDQUFDcUUsT0FBTyxLQUFLakIsU0FBUyxJQUFJcEQsS0FBSyxDQUFDc0UsV0FBVyxLQUFLbEIsU0FBUyxFQUFFO01BQ3pFLElBQUksQ0FBQ0QsVUFBVSxHQUFHLElBQUlHLHVCQUFlLENBQUMsOENBQThDLENBQUM7SUFDdkYsQ0FBQyxNQUFNLElBQUl0RCxLQUFLLENBQUNxRSxPQUFPLEVBQUU7TUFDeEIsSUFBSSxDQUFDbEIsVUFBVSxHQUFHLElBQUlHLHVCQUFlLENBQUMsa0ZBQWtGLENBQUM7SUFDM0g7RUFDRjtFQUVBNUIsVUFBVUEsQ0FBQzFCLEtBQW9CLEVBQUU7SUFDL0IsSUFBSSxDQUFDQSxLQUFLLENBQUN1RSxVQUFVLEVBQUU7TUFDckI7TUFDQSxJQUFJLENBQUNwQixVQUFVLEdBQUcsSUFBSUcsdUJBQWUsQ0FBQyw0Q0FBNEMsRUFBRSxNQUFNLENBQUM7TUFDM0Y7SUFDRjtJQUVBLElBQUksQ0FBQ3RELEtBQUssQ0FBQ3dFLFNBQVMsRUFBRTtNQUNwQjtNQUNBLElBQUksQ0FBQ3JCLFVBQVUsR0FBRyxJQUFJRyx1QkFBZSxDQUFDLDhDQUE4QyxFQUFFLG1CQUFtQixDQUFDO01BQzFHO0lBQ0Y7O0lBRUE7SUFDQSxJQUFJLENBQUNmLFVBQVUsQ0FBQ3NCLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDUyxVQUFVLEdBQUd2RSxLQUFLLENBQUN1RSxVQUFVO0lBRTVELElBQUl2RSxLQUFLLENBQUN1RSxVQUFVLEdBQUcsS0FBSyxFQUFFO01BQzVCcEUsdUJBQXVCLENBQUNFLElBQUksQ0FBQyxDQUFDO0lBQ2hDO0lBRUEsSUFBSSxDQUFDNkMsZ0JBQWdCLEdBQUcsSUFBSTtFQUM5QjtFQUVBaEMsZUFBZUEsQ0FBQ2xCLEtBQTRCLEVBQUU7SUFDNUM7SUFDQSxNQUFNLENBQUV5RSxNQUFNLEVBQUVDLFFBQVEsQ0FBRSxHQUFHMUUsS0FBSyxDQUFDd0MsUUFBUSxDQUFDaUMsTUFBTSxDQUFDRSxLQUFLLENBQUMsSUFBSSxDQUFDO0lBRTlELElBQUksQ0FBQ0MsV0FBVyxHQUFHO01BQ2pCSCxNQUFNO01BQUVJLElBQUksRUFBRTdFLEtBQUssQ0FBQ3dDLFFBQVEsQ0FBQ3FDLElBQUk7TUFBRUg7SUFDckMsQ0FBQztFQUNIO0VBRUF2QyxZQUFZQSxDQUFDbkMsS0FBc0IsRUFBRTtJQUNuQztFQUFBO0VBR0ZvQyxNQUFNQSxDQUFDcEMsS0FBZ0IsRUFBRTtJQUN2QjtFQUFBO0VBR0ZtQixrQkFBa0JBLENBQUNuQixLQUErQixFQUFFO0lBQ2xELElBQUksQ0FBQ3VDLFVBQVUsQ0FBQ0csU0FBUyxDQUFDQyxVQUFVLENBQUMzQyxLQUFLLENBQUN3QyxRQUFRLENBQUM7RUFDdEQ7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBdEMsT0FBQSxDQUFBK0Msa0JBQUEsR0FBQUEsa0JBQUE7QUFJTyxNQUFNNkIsbUJBQW1CLFNBQVNwRSxZQUFZLENBQUM7RUFLcERaLFdBQVdBLENBQUN5QyxVQUFzQixFQUFFd0MsT0FBMkIsRUFBRTtJQUMvRCxLQUFLLENBQUMsQ0FBQztJQUVQLElBQUksQ0FBQ3hDLFVBQVUsR0FBR0EsVUFBVTtJQUM1QixJQUFJLENBQUN3QyxPQUFPLEdBQUdBLE9BQU87SUFDdEIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsRUFBRTtFQUNsQjtFQUVBckUsYUFBYUEsQ0FBQ1gsS0FBdUIsRUFBRTtJQUNyQyxJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsYUFBYSxFQUFFTCxLQUFLLENBQUM7RUFDNUM7RUFFQVksY0FBY0EsQ0FBQ1osS0FBd0IsRUFBRTtJQUN2QyxJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsY0FBYyxFQUFFTCxLQUFLLENBQUM7SUFFM0MsSUFBSSxDQUFDLElBQUksQ0FBQytFLE9BQU8sQ0FBQ0UsUUFBUSxFQUFFO01BQzFCLE1BQU01QixLQUFLLEdBQUcsSUFBSTZCLG9CQUFZLENBQUNsRixLQUFLLENBQUN1RCxPQUFPLEVBQUUsVUFBVSxDQUFDO01BRXpERixLQUFLLENBQUNNLE1BQU0sR0FBRzNELEtBQUssQ0FBQzJELE1BQU07TUFDM0JOLEtBQUssQ0FBQzhCLEtBQUssR0FBR25GLEtBQUssQ0FBQ21GLEtBQUs7TUFDekI5QixLQUFLLENBQUMrQixLQUFLLEdBQUdwRixLQUFLLENBQUNvRixLQUFLO01BQ3pCL0IsS0FBSyxDQUFDZ0MsVUFBVSxHQUFHckYsS0FBSyxDQUFDcUYsVUFBVTtNQUNuQ2hDLEtBQUssQ0FBQ2lDLFFBQVEsR0FBR3RGLEtBQUssQ0FBQ3NGLFFBQVE7TUFDL0JqQyxLQUFLLENBQUNrQyxVQUFVLEdBQUd2RixLQUFLLENBQUN1RixVQUFVO01BQ25DLElBQUksQ0FBQ1AsTUFBTSxDQUFDbkMsSUFBSSxDQUFDUSxLQUFLLENBQUM7TUFDdkIsSUFBSSxDQUFDMEIsT0FBTyxDQUFDMUIsS0FBSyxHQUFHQSxLQUFLO01BQzFCLElBQUksSUFBSSxDQUFDMEIsT0FBTyxZQUFZUyxnQkFBTyxJQUFJLElBQUksQ0FBQ1IsTUFBTSxDQUFDakMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUM3RCxJQUFJLENBQUNnQyxPQUFPLENBQUMxQixLQUFLLEdBQUcsSUFBSW9DLGNBQWMsQ0FBQyxJQUFJLENBQUNULE1BQU0sQ0FBQztNQUN0RDtJQUNGO0VBQ0Y7RUFFQWxFLGdCQUFnQkEsQ0FBQ2QsS0FBNkIsRUFBRTtJQUM5QyxJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUVMLEtBQUssQ0FBQ3dDLFFBQVEsQ0FBQztFQUN4RDtFQUVBekIsZ0JBQWdCQSxDQUFDZixLQUE2QixFQUFFO0lBQzlDLElBQUksQ0FBQ3VDLFVBQVUsQ0FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRUwsS0FBSyxDQUFDd0MsUUFBUSxDQUFDO0VBQ3hEO0VBRUF4QixlQUFlQSxDQUFDaEIsS0FBNEIsRUFBRTtJQUM1QyxJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsZUFBZSxFQUFFTCxLQUFLLENBQUN3QyxRQUFRLENBQUM7RUFDdkQ7RUFFQXZCLG9CQUFvQkEsQ0FBQ2pCLEtBQTJCLEVBQUU7SUFDaEQsSUFBSSxDQUFDdUMsVUFBVSxDQUFDRSxpQkFBaUIsR0FBR3pDLEtBQUssQ0FBQ3dDLFFBQVE7RUFDcEQ7RUFFQXJCLGtCQUFrQkEsQ0FBQ25CLEtBQStCLEVBQUU7SUFDbEQsSUFBSSxDQUFDdUMsVUFBVSxDQUFDRyxTQUFTLENBQUNDLFVBQVUsQ0FBQzNDLEtBQUssQ0FBQ3dDLFFBQVEsQ0FBQztFQUN0RDtFQUVBbkIsa0JBQWtCQSxDQUFDckIsS0FBcUMsRUFBRTtJQUN4RCxJQUFJLENBQUN1QyxVQUFVLENBQUNLLHNCQUFzQixDQUFDQyxJQUFJLENBQUM3QyxLQUFLLENBQUN3QyxRQUFRLENBQUM7SUFDM0QsSUFBSSxDQUFDRCxVQUFVLENBQUNPLGFBQWEsR0FBRyxJQUFJO0VBQ3RDO0VBRUF4QixtQkFBbUJBLENBQUN0QixLQUFzQyxFQUFFO0lBQzFELElBQUksQ0FBQ3VDLFVBQVUsQ0FBQ0ssc0JBQXNCLENBQUNHLE1BQU0sR0FBRyxDQUFDO0lBQ2pELElBQUksQ0FBQ1IsVUFBVSxDQUFDTyxhQUFhLEdBQUcsS0FBSztFQUN2QztFQUVBdkIscUJBQXFCQSxDQUFDdkIsS0FBd0MsRUFBRTtJQUM5RCxJQUFJLENBQUN1QyxVQUFVLENBQUNLLHNCQUFzQixDQUFDRyxNQUFNLEdBQUcsQ0FBQztJQUNqRDtJQUNBLElBQUksQ0FBQ1IsVUFBVSxDQUFDTyxhQUFhLEdBQUcsS0FBSztJQUNyQyxJQUFJLENBQUNQLFVBQVUsQ0FBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztFQUM3QztFQUVBc0IsYUFBYUEsQ0FBQzNCLEtBQXVCLEVBQUU7SUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQytFLE9BQU8sQ0FBQ0UsUUFBUSxFQUFFO01BQzFCLElBQUksSUFBSSxDQUFDMUMsVUFBVSxDQUFDc0IsTUFBTSxDQUFDQyxPQUFPLENBQUM0QixjQUFjLEVBQUU7UUFDakQsTUFBTUMsT0FBMEMsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRXRFLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUMsR0FBRyxHQUFHL0YsS0FBSyxDQUFDMkYsT0FBTyxDQUFDNUMsTUFBTSxFQUFFK0MsQ0FBQyxHQUFHQyxHQUFHLEVBQUVELENBQUMsRUFBRSxFQUFFO1VBQ3hELE1BQU1FLEdBQUcsR0FBR2hHLEtBQUssQ0FBQzJGLE9BQU8sQ0FBQ0csQ0FBQyxDQUFDO1VBQzVCLElBQUlILE9BQU8sQ0FBQ0ssR0FBRyxDQUFDQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDaENOLE9BQU8sQ0FBQ0ssR0FBRyxDQUFDQyxPQUFPLENBQUMsR0FBR0QsR0FBRztVQUM1QjtRQUNGO1FBRUEsSUFBSSxDQUFDakIsT0FBTyxDQUFDMUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFc0YsT0FBTyxDQUFDO01BQzlDLENBQUMsTUFBTTtRQUNMLElBQUksQ0FBQ1osT0FBTyxDQUFDMUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFTCxLQUFLLENBQUMyRixPQUFPLENBQUM7TUFDcEQ7SUFDRjtFQUNGO0VBRUEvRCxTQUFTQSxDQUFDNUIsS0FBbUIsRUFBRTtJQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDK0UsT0FBTyxDQUFDRSxRQUFRLEVBQUU7TUFDMUIsSUFBSSxDQUFDRixPQUFPLENBQUMxRSxJQUFJLENBQUMsU0FBUyxFQUFFTCxLQUFLLENBQUNrRyxVQUFVLENBQUM7SUFDaEQ7RUFDRjtFQUVBckUsU0FBU0EsQ0FBQzdCLEtBQW1CLEVBQUU7SUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQytFLE9BQU8sQ0FBQ0UsUUFBUSxFQUFFO01BQzFCLElBQUksQ0FBQ0YsT0FBTyxDQUFDMUUsSUFBSSxDQUFDLFNBQVMsRUFBRUwsS0FBSyxDQUFDMkYsT0FBTyxDQUFDO0lBQzdDO0VBQ0Y7RUFFQTdELE9BQU9BLENBQUM5QixLQUFpQixFQUFFO0lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMrRSxPQUFPLENBQUNFLFFBQVEsRUFBRTtNQUMxQixJQUFJLENBQUNGLE9BQU8sQ0FBQzFFLElBQUksQ0FBQyxPQUFPLEVBQUVMLEtBQUssQ0FBQ21HLFlBQVksQ0FBQztJQUNoRDtFQUNGO0VBRUFwRSxLQUFLQSxDQUFDL0IsS0FBNkIsRUFBRTtJQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDK0UsT0FBTyxDQUFDRSxRQUFRLEVBQUU7TUFDMUIsSUFBSSxJQUFJLENBQUMxQyxVQUFVLENBQUNzQixNQUFNLENBQUNDLE9BQU8sQ0FBQ3NDLGdDQUFnQyxFQUFFO1FBQ25FLElBQUksQ0FBQ3JCLE9BQU8sQ0FBQ3NCLElBQUksQ0FBRXhELElBQUksQ0FBQzdDLEtBQUssQ0FBQzJGLE9BQU8sQ0FBQztNQUN4QztNQUVBLElBQUksSUFBSSxDQUFDcEQsVUFBVSxDQUFDc0IsTUFBTSxDQUFDQyxPQUFPLENBQUN3QyxtQkFBbUIsRUFBRTtRQUN0RCxJQUFJLENBQUN2QixPQUFPLENBQUN3QixHQUFHLENBQUUxRCxJQUFJLENBQUM3QyxLQUFLLENBQUMyRixPQUFPLENBQUM7TUFDdkM7TUFFQSxJQUFJLENBQUNaLE9BQU8sQ0FBQzFFLElBQUksQ0FBQyxLQUFLLEVBQUVMLEtBQUssQ0FBQzJGLE9BQU8sQ0FBQztJQUN6QztFQUNGO0VBRUEzRCxjQUFjQSxDQUFDaEMsS0FBd0IsRUFBRTtJQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDK0UsT0FBTyxDQUFDRSxRQUFRLEVBQUU7TUFDMUI7TUFDQSxJQUFJLENBQUMxQyxVQUFVLENBQUNpRSxxQkFBcUIsR0FBR3hHLEtBQUssQ0FBQ3lHLEtBQUs7SUFDckQ7RUFDRjtFQUVBeEUsYUFBYUEsQ0FBQ2pDLEtBQXVCLEVBQUU7SUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQytFLE9BQU8sQ0FBQ0UsUUFBUSxFQUFFO01BQzFCLElBQUksQ0FBQ0YsT0FBTyxDQUFDMUUsSUFBSSxDQUFDLGFBQWEsRUFBRUwsS0FBSyxDQUFDMEcsU0FBUyxFQUFFMUcsS0FBSyxDQUFDeUcsS0FBSyxFQUFFekcsS0FBSyxDQUFDMkcsUUFBUSxDQUFDO0lBQ2hGO0VBQ0Y7RUFFQXpFLFVBQVVBLENBQUNsQyxLQUFvQixFQUFFO0lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMrRSxPQUFPLENBQUNFLFFBQVEsRUFBRTtNQUMxQixJQUFJakYsS0FBSyxDQUFDNEcsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDN0IsT0FBTyxDQUFDMUIsS0FBSyxFQUFFO1FBQ3pDO1FBQ0EsSUFBSSxDQUFDMEIsT0FBTyxDQUFDMUIsS0FBSyxHQUFHLElBQUk2QixvQkFBWSxDQUFDLGdDQUFnQyxFQUFFLFNBQVMsQ0FBQztNQUNwRjtNQUVBLElBQUksQ0FBQ0gsT0FBTyxDQUFDMUUsSUFBSSxDQUFDLFVBQVUsRUFBRUwsS0FBSyxDQUFDNkcsUUFBUSxFQUFFN0csS0FBSyxDQUFDOEcsSUFBSSxFQUFFLElBQUksQ0FBQ3ZFLFVBQVUsQ0FBQ2lFLHFCQUFxQixFQUFFLElBQUksQ0FBQ3pCLE9BQU8sQ0FBQ3dCLEdBQUcsQ0FBQztNQUVsSCxJQUFJLENBQUNoRSxVQUFVLENBQUNpRSxxQkFBcUIsR0FBR3BELFNBQVM7TUFFakQsSUFBSXBELEtBQUssQ0FBQzZHLFFBQVEsS0FBS3pELFNBQVMsRUFBRTtRQUNoQyxJQUFJLENBQUMyQixPQUFPLENBQUM4QixRQUFRLElBQUs3RyxLQUFLLENBQUM2RyxRQUFRO01BQzFDO01BRUEsSUFBSSxJQUFJLENBQUN0RSxVQUFVLENBQUNzQixNQUFNLENBQUNDLE9BQU8sQ0FBQ3dDLG1CQUFtQixFQUFFO1FBQ3RELElBQUksQ0FBQ3ZCLE9BQU8sQ0FBQ3dCLEdBQUcsR0FBRyxFQUFFO01BQ3ZCO0lBQ0Y7RUFDRjtFQUVBcEUsWUFBWUEsQ0FBQ25DLEtBQXNCLEVBQUU7SUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQytFLE9BQU8sQ0FBQ0UsUUFBUSxFQUFFO01BQzFCLElBQUksQ0FBQ0YsT0FBTyxDQUFDMUUsSUFBSSxDQUFDLFlBQVksRUFBRUwsS0FBSyxDQUFDNkcsUUFBUSxFQUFFN0csS0FBSyxDQUFDOEcsSUFBSSxFQUFFLElBQUksQ0FBQy9CLE9BQU8sQ0FBQ3dCLEdBQUcsQ0FBQztNQUU3RSxJQUFJdkcsS0FBSyxDQUFDNkcsUUFBUSxLQUFLekQsU0FBUyxFQUFFO1FBQ2hDLElBQUksQ0FBQzJCLE9BQU8sQ0FBQzhCLFFBQVEsSUFBSzdHLEtBQUssQ0FBQzZHLFFBQVE7TUFDMUM7TUFFQSxJQUFJLElBQUksQ0FBQ3RFLFVBQVUsQ0FBQ3NCLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDd0MsbUJBQW1CLEVBQUU7UUFDdEQsSUFBSSxDQUFDdkIsT0FBTyxDQUFDd0IsR0FBRyxHQUFHLEVBQUU7TUFDdkI7SUFDRjtFQUNGO0VBRUFuRSxNQUFNQSxDQUFDcEMsS0FBZ0IsRUFBRTtJQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDK0UsT0FBTyxDQUFDRSxRQUFRLEVBQUU7TUFDMUIsSUFBSWpGLEtBQUssQ0FBQzRHLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQzdCLE9BQU8sQ0FBQzFCLEtBQUssRUFBRTtRQUN6QztRQUNBLElBQUksQ0FBQzBCLE9BQU8sQ0FBQzFCLEtBQUssR0FBRyxJQUFJNkIsb0JBQVksQ0FBQyxnQ0FBZ0MsRUFBRSxTQUFTLENBQUM7TUFDcEY7TUFFQSxJQUFJLENBQUNILE9BQU8sQ0FBQzFFLElBQUksQ0FBQyxNQUFNLEVBQUVMLEtBQUssQ0FBQzZHLFFBQVEsRUFBRTdHLEtBQUssQ0FBQzhHLElBQUksRUFBRSxJQUFJLENBQUMvQixPQUFPLENBQUN3QixHQUFHLENBQUM7TUFFdkUsSUFBSXZHLEtBQUssQ0FBQzZHLFFBQVEsS0FBS3pELFNBQVMsRUFBRTtRQUNoQyxJQUFJLENBQUMyQixPQUFPLENBQUM4QixRQUFRLElBQUs3RyxLQUFLLENBQUM2RyxRQUFRO01BQzFDO01BRUEsSUFBSSxJQUFJLENBQUN0RSxVQUFVLENBQUNzQixNQUFNLENBQUNDLE9BQU8sQ0FBQ3dDLG1CQUFtQixFQUFFO1FBQ3RELElBQUksQ0FBQ3ZCLE9BQU8sQ0FBQ3dCLEdBQUcsR0FBRyxFQUFFO01BQ3ZCO0lBQ0Y7RUFDRjtFQUVBbkYsaUJBQWlCQSxDQUFDcEIsS0FBb0MsRUFBRTtJQUN0RCxJQUFJLENBQUN1QyxVQUFVLENBQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7RUFDekM7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQUgsT0FBQSxDQUFBNEUsbUJBQUEsR0FBQUEsbUJBQUE7QUFNTyxNQUFNaUMscUJBQXFCLFNBQVNyRyxZQUFZLENBQUM7RUFJdEQ7QUFDRjtBQUNBOztFQUdFWixXQUFXQSxDQUFDeUMsVUFBc0IsRUFBRXdDLE9BQTJCLEVBQUU7SUFDL0QsS0FBSyxDQUFDLENBQUM7SUFFUCxJQUFJLENBQUN4QyxVQUFVLEdBQUdBLFVBQVU7SUFDNUIsSUFBSSxDQUFDd0MsT0FBTyxHQUFHQSxPQUFPO0lBRXRCLElBQUksQ0FBQ2lDLGlCQUFpQixHQUFHLEtBQUs7RUFDaEM7RUFFQTVFLE1BQU1BLENBQUNwQyxLQUFnQixFQUFFO0lBQ3ZCLElBQUlBLEtBQUssQ0FBQ2lILFNBQVMsRUFBRTtNQUNuQixJQUFJLENBQUNELGlCQUFpQixHQUFHLElBQUk7SUFDL0I7RUFDRjtBQUNGO0FBQUM5RyxPQUFBLENBQUE2RyxxQkFBQSxHQUFBQSxxQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","names":["_request","_interopRequireDefault","require","_errors","e","__esModule","default","UnexpectedTokenError","Error","constructor","handler","token","name","exports","TokenHandler","onInfoMessage","onErrorMessage","onSSPI","onDatabaseChange","onLanguageChange","onCharsetChange","onSqlCollationChange","onRoutingChange","onPacketSizeChange","onResetConnection","onBeginTransaction","onCommitTransaction","onRollbackTransaction","onFedAuthInfo","onFeatureExtAck","onLoginAck","onColMetadata","onOrder","onRow","onReturnStatus","onReturnValue","onDoneProc","onDoneInProc","onDone","onDatabaseMirroringPartner","InitialSqlTokenHandler","connection","emit","newValue","databaseCollation","messageIo","packetSize","transactionDescriptors","push","inTransaction","length","close","Login7TokenHandler","loginAckReceived","loginError","undefined","error","ConnectionError","message","isLoginErrorTransient","transientErrorLookup","isTransientError","number","curTransientRetryCount","config","options","maxRetriesOnTransientErrors","isTransient","ntlmpacket","ntlmpacketBuffer","fedAuthInfoToken","authentication","type","fedAuth","utf8Support","tdsVersion","interface","server","instance","split","routingData","port","RequestTokenHandler","request","errors","canceled","RequestError","state","class","serverName","procName","lineNumber","Request","AggregateError","useColumnNames","columns","Object","create","j","len","col","colName","orderColumns","rowCollectionOnRequestCompletion","rows","rowCollectionOnDone","rst","procReturnStatusValue","value","paramName","metadata","sqlError","rowCount","more","AttentionTokenHandler","attentionReceived","attention"],"sources":["../../src/token/handler.ts"],"sourcesContent":["import Connection from '../connection';\nimport Request from '../request';\nimport { ConnectionError, RequestError } from '../errors';\nimport { type ColumnMetadata } from './colmetadata-token-parser';\nimport {\n BeginTransactionEnvChangeToken,\n CharsetEnvChangeToken,\n CollationChangeToken,\n ColMetadataToken,\n CommitTransactionEnvChangeToken,\n DatabaseEnvChangeToken,\n DatabaseMirroringPartnerEnvChangeToken,\n DoneInProcToken,\n DoneProcToken,\n DoneToken,\n ErrorMessageToken,\n FeatureExtAckToken,\n FedAuthInfoToken,\n InfoMessageToken,\n LanguageEnvChangeToken,\n LoginAckToken,\n NBCRowToken,\n OrderToken,\n PacketSizeEnvChangeToken,\n ResetConnectionEnvChangeToken,\n ReturnStatusToken,\n ReturnValueToken,\n RollbackTransactionEnvChangeToken,\n RoutingEnvChangeToken,\n RowToken,\n SSPIToken,\n Token\n} from './token';\nimport BulkLoad from '../bulk-load';\n\nexport class UnexpectedTokenError extends Error {\n constructor(handler: TokenHandler, token: Token) {\n super('Unexpected token `' + token.name + '` in `' + handler.constructor.name + '`');\n }\n}\n\nexport class TokenHandler {\n onInfoMessage(token: InfoMessageToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onSSPI(token: SSPIToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRoutingChange(token: RoutingEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onFedAuthInfo(token: FedAuthInfoToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onFeatureExtAck(token: FeatureExtAckToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onLoginAck(token: LoginAckToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onColMetadata(token: ColMetadataToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onOrder(token: OrderToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRow(token: RowToken | NBCRowToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onReturnValue(token: ReturnValueToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDoneProc(token: DoneProcToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDoneInProc(token: DoneInProcToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDone(token: DoneToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n}\n\n/**\n * A handler for tokens received in the response message to the initial SQL Batch request\n * that sets up different connection settings.\n */\nexport class InitialSqlTokenHandler extends TokenHandler {\n declare connection: Connection;\n\n constructor(connection: Connection) {\n super();\n\n this.connection = connection;\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.push(token.newValue);\n this.connection.inTransaction = true;\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n this.connection.inTransaction = false;\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n // An outermost transaction was rolled back. Reset the transaction counter\n this.connection.inTransaction = false;\n this.connection.emit('rollbackTransaction');\n }\n\n onColMetadata(token: ColMetadataToken) {\n this.connection.emit('error', new Error(\"Received 'columnMetadata' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onOrder(token: OrderToken) {\n this.connection.emit('error', new Error(\"Received 'order' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onRow(token: RowToken | NBCRowToken) {\n this.connection.emit('error', new Error(\"Received 'row' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n // Do nothing\n }\n\n onReturnValue(token: ReturnValueToken) {\n // Do nothing\n }\n\n onDoneProc(token: DoneProcToken) {\n // Do nothing\n }\n\n onDoneInProc(token: DoneInProcToken) {\n // Do nothing\n }\n\n onDone(token: DoneToken) {\n // Do nothing\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n this.connection.emit('resetConnection');\n }\n}\n\n/**\n * A handler for tokens received in the response message to a Login7 message.\n */\nexport class Login7TokenHandler extends TokenHandler {\n declare connection: Connection;\n\n declare fedAuthInfoToken: FedAuthInfoToken | undefined;\n declare routingData: { server: string, port: number, instance: string } | undefined;\n\n declare loginAckReceived: boolean;\n\n declare loginError: ConnectionError | undefined;\n\n constructor(connection: Connection) {\n super();\n this.loginAckReceived = false;\n this.connection = connection;\n this.loginError = undefined;\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n\n const error = new ConnectionError(token.message, 'ELOGIN');\n\n const isLoginErrorTransient = this.connection.transientErrorLookup.isTransientError(token.number);\n if (isLoginErrorTransient && this.connection.curTransientRetryCount !== this.connection.config.options.maxRetriesOnTransientErrors) {\n error.isTransient = true;\n }\n\n this.loginError = error;\n }\n\n onSSPI(token: SSPIToken) {\n if (token.ntlmpacket) {\n this.connection.ntlmpacket = token.ntlmpacket;\n this.connection.ntlmpacketBuffer = token.ntlmpacketBuffer;\n }\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) {\n this.connection.emit('databaseMirroringPartner', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onFedAuthInfo(token: FedAuthInfoToken) {\n this.fedAuthInfoToken = token;\n }\n\n onFeatureExtAck(token: FeatureExtAckToken) {\n const { authentication } = this.connection.config;\n\n if (authentication.type === 'azure-active-directory-password' || authentication.type === 'azure-active-directory-access-token' || authentication.type === 'azure-active-directory-msi-vm' || authentication.type === 'azure-active-directory-msi-app-service' || authentication.type === 'azure-active-directory-service-principal-secret' || authentication.type === 'azure-active-directory-default') {\n if (token.fedAuth === undefined) {\n this.loginError = new ConnectionError('Did not receive Active Directory authentication acknowledgement');\n } else if (token.fedAuth.length !== 0) {\n this.loginError = new ConnectionError(`Active Directory authentication acknowledgment for ${authentication.type} authentication method includes extra data`);\n }\n } else if (token.fedAuth === undefined && token.utf8Support === undefined) {\n this.loginError = new ConnectionError('Received acknowledgement for unknown feature');\n } else if (token.fedAuth) {\n this.loginError = new ConnectionError('Did not request Active Directory authentication, but received the acknowledgment');\n }\n }\n\n onLoginAck(token: LoginAckToken) {\n if (!token.tdsVersion) {\n // unsupported TDS version\n this.loginError = new ConnectionError('Server responded with unknown TDS version.', 'ETDS');\n return;\n }\n\n if (!token.interface) {\n // unsupported interface\n this.loginError = new ConnectionError('Server responded with unsupported interface.', 'EINTERFACENOTSUPP');\n return;\n }\n\n // use negotiated version\n this.connection.config.options.tdsVersion = token.tdsVersion;\n\n this.loginAckReceived = true;\n }\n\n onRoutingChange(token: RoutingEnvChangeToken) {\n // Splits instance name attached to the redirect url. E.g., redirect.db.net\\instance1 --> [redirect.db.net, instance1]\n const [ server, instance ] = token.newValue.server.split('\\\\');\n\n this.routingData = {\n server, port: token.newValue.port, instance\n };\n }\n\n onDoneInProc(token: DoneInProcToken) {\n // Do nothing\n }\n\n onDone(token: DoneToken) {\n // Do nothing\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n}\n\n/**\n * A handler for tokens received in the response message to a RPC Request,\n * a SQL Batch Request, a Bulk Load BCP Request or a Transaction Manager Request.\n */\nexport class RequestTokenHandler extends TokenHandler {\n declare connection: Connection;\n declare request: Request | BulkLoad;\n declare errors: RequestError[];\n\n constructor(connection: Connection, request: Request | BulkLoad) {\n super();\n\n this.connection = connection;\n this.request = request;\n this.errors = [];\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n\n if (!this.request.canceled) {\n const error = new RequestError(token.message, 'EREQUEST');\n\n error.number = token.number;\n error.state = token.state;\n error.class = token.class;\n error.serverName = token.serverName;\n error.procName = token.procName;\n error.lineNumber = token.lineNumber;\n this.errors.push(error);\n this.request.error = error;\n if (this.request instanceof Request && this.errors.length > 1) {\n this.request.error = new AggregateError(this.errors);\n }\n }\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.push(token.newValue);\n this.connection.inTransaction = true;\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n this.connection.inTransaction = false;\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n // An outermost transaction was rolled back. Reset the transaction counter\n this.connection.inTransaction = false;\n this.connection.emit('rollbackTransaction');\n }\n\n onColMetadata(token: ColMetadataToken) {\n if (!this.request.canceled) {\n if (this.connection.config.options.useColumnNames) {\n const columns: { [key: string]: ColumnMetadata } = Object.create(null);\n\n for (let j = 0, len = token.columns.length; j < len; j++) {\n const col = token.columns[j];\n if (columns[col.colName] == null) {\n columns[col.colName] = col;\n }\n }\n\n this.request.emit('columnMetadata', columns);\n } else {\n this.request.emit('columnMetadata', token.columns);\n }\n }\n }\n\n onOrder(token: OrderToken) {\n if (!this.request.canceled) {\n this.request.emit('order', token.orderColumns);\n }\n }\n\n onRow(token: RowToken | NBCRowToken) {\n if (!this.request.canceled) {\n if (this.connection.config.options.rowCollectionOnRequestCompletion) {\n this.request.rows!.push(token.columns);\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst!.push(token.columns);\n }\n\n this.request.emit('row', token.columns);\n }\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n if (!this.request.canceled) {\n // Keep value for passing in 'doneProc' event.\n this.connection.procReturnStatusValue = token.value;\n }\n }\n\n onReturnValue(token: ReturnValueToken) {\n if (!this.request.canceled) {\n this.request.emit('returnValue', token.paramName, token.value, token.metadata);\n }\n }\n\n onDoneProc(token: DoneProcToken) {\n if (!this.request.canceled) {\n if (token.sqlError && !this.request.error) {\n // check if the DONE_ERROR flags was set, but an ERROR token was not sent.\n this.request.error = new RequestError('An unknown error has occurred.', 'UNKNOWN');\n }\n\n this.request.emit('doneProc', token.rowCount, token.more, this.connection.procReturnStatusValue, this.request.rst);\n\n this.connection.procReturnStatusValue = undefined;\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onDoneInProc(token: DoneInProcToken) {\n if (!this.request.canceled) {\n this.request.emit('doneInProc', token.rowCount, token.more, this.request.rst);\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onDone(token: DoneToken) {\n if (!this.request.canceled) {\n if (token.sqlError && !this.request.error) {\n // check if the DONE_ERROR flags was set, but an ERROR token was not sent.\n this.request.error = new RequestError('An unknown error has occurred.', 'UNKNOWN');\n }\n\n this.request.emit('done', token.rowCount, token.more, this.request.rst);\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n this.connection.emit('resetConnection');\n }\n}\n\n/**\n * A handler for the attention acknowledgement message.\n *\n * This message only contains a `DONE` token that acknowledges\n * that the attention message was received by the server.\n */\nexport class AttentionTokenHandler extends TokenHandler {\n declare connection: Connection;\n declare request: Request | BulkLoad;\n\n /**\n * Returns whether an attention acknowledgement was received.\n */\n declare attentionReceived: boolean;\n\n constructor(connection: Connection, request: Request | BulkLoad) {\n super();\n\n this.connection = connection;\n this.request = request;\n\n this.attentionReceived = false;\n }\n\n onDone(token: DoneToken) {\n if (token.attention) {\n this.attentionReceived = true;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"handler.js","names":["_request","_interopRequireDefault","require","_errors","e","__esModule","default","UnexpectedTokenError","Error","constructor","handler","token","name","exports","tds71DeprecationWarning","emitted","emit","process","emitWarning","type","code","TokenHandler","onInfoMessage","onErrorMessage","onSSPI","onDatabaseChange","onLanguageChange","onCharsetChange","onSqlCollationChange","onRoutingChange","onPacketSizeChange","onResetConnection","onBeginTransaction","onCommitTransaction","onRollbackTransaction","onFedAuthInfo","onFeatureExtAck","onLoginAck","onColMetadata","onTabName","onColInfo","onOrder","onRow","onReturnStatus","onReturnValue","onDoneProc","onDoneInProc","onDone","onDatabaseMirroringPartner","InitialSqlTokenHandler","connection","newValue","databaseCollation","messageIo","packetSize","transactionDescriptors","push","inTransaction","length","close","Login7TokenHandler","loginAckReceived","loginError","undefined","error","ConnectionError","message","isLoginErrorTransient","transientErrorLookup","isTransientError","number","curTransientRetryCount","config","options","maxRetriesOnTransientErrors","isTransient","ntlmpacket","ntlmpacketBuffer","fedAuthInfoToken","authentication","fedAuth","utf8Support","tdsVersion","interface","server","instance","split","routingData","port","RequestTokenHandler","request","errors","canceled","RequestError","state","class","serverName","procName","lineNumber","Request","AggregateError","useColumnNames","columns","Object","create","j","len","col","colName","tableNames","orderColumns","rowCollectionOnRequestCompletion","rows","rowCollectionOnDone","rst","procReturnStatusValue","value","paramName","metadata","sqlError","rowCount","more","AttentionTokenHandler","attentionReceived","attention"],"sources":["../../src/token/handler.ts"],"sourcesContent":["import Connection from '../connection';\nimport Request from '../request';\nimport { ConnectionError, RequestError } from '../errors';\nimport { type ColumnMetadata } from './colmetadata-token-parser';\nimport {\n BeginTransactionEnvChangeToken,\n CharsetEnvChangeToken,\n ColInfoToken,\n CollationChangeToken,\n ColMetadataToken,\n CommitTransactionEnvChangeToken,\n DatabaseEnvChangeToken,\n DatabaseMirroringPartnerEnvChangeToken,\n DoneInProcToken,\n DoneProcToken,\n DoneToken,\n ErrorMessageToken,\n FeatureExtAckToken,\n FedAuthInfoToken,\n InfoMessageToken,\n LanguageEnvChangeToken,\n LoginAckToken,\n NBCRowToken,\n OrderToken,\n PacketSizeEnvChangeToken,\n ResetConnectionEnvChangeToken,\n ReturnStatusToken,\n ReturnValueToken,\n RollbackTransactionEnvChangeToken,\n RoutingEnvChangeToken,\n RowToken,\n SSPIToken,\n TabNameToken,\n Token\n} from './token';\nimport BulkLoad from '../bulk-load';\n\nexport class UnexpectedTokenError extends Error {\n constructor(handler: TokenHandler, token: Token) {\n super('Unexpected token `' + token.name + '` in `' + handler.constructor.name + '`');\n }\n}\n\n/**\n * Emits a warning (once per process) when a connection is established\n * using TDS 7.1.\n *\n * @private\n */\nexport const tds71DeprecationWarning = {\n emitted: false,\n\n emit() {\n if (this.emitted) {\n return;\n }\n this.emitted = true;\n\n process.emitWarning(\n 'Support for TDS 7.1 (used by SQL Server 2000) is deprecated and will be removed in a future version of `tedious`.',\n { type: 'DeprecationWarning', code: 'TEDIOUS_DEP_TDS71' }\n );\n }\n};\n\nexport class TokenHandler {\n onInfoMessage(token: InfoMessageToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onSSPI(token: SSPIToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRoutingChange(token: RoutingEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onFedAuthInfo(token: FedAuthInfoToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onFeatureExtAck(token: FeatureExtAckToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onLoginAck(token: LoginAckToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onColMetadata(token: ColMetadataToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onTabName(token: TabNameToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onColInfo(token: ColInfoToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onOrder(token: OrderToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRow(token: RowToken | NBCRowToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onReturnValue(token: ReturnValueToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDoneProc(token: DoneProcToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDoneInProc(token: DoneInProcToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDone(token: DoneToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n}\n\n/**\n * A handler for tokens received in the response message to the initial SQL Batch request\n * that sets up different connection settings.\n */\nexport class InitialSqlTokenHandler extends TokenHandler {\n declare connection: Connection;\n\n constructor(connection: Connection) {\n super();\n\n this.connection = connection;\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.push(token.newValue);\n this.connection.inTransaction = true;\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n this.connection.inTransaction = false;\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n // An outermost transaction was rolled back. Reset the transaction counter\n this.connection.inTransaction = false;\n this.connection.emit('rollbackTransaction');\n }\n\n onColMetadata(token: ColMetadataToken) {\n this.connection.emit('error', new Error(\"Received 'columnMetadata' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onOrder(token: OrderToken) {\n this.connection.emit('error', new Error(\"Received 'order' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onRow(token: RowToken | NBCRowToken) {\n this.connection.emit('error', new Error(\"Received 'row' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n // Do nothing\n }\n\n onReturnValue(token: ReturnValueToken) {\n // Do nothing\n }\n\n onDoneProc(token: DoneProcToken) {\n // Do nothing\n }\n\n onDoneInProc(token: DoneInProcToken) {\n // Do nothing\n }\n\n onDone(token: DoneToken) {\n // Do nothing\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n this.connection.emit('resetConnection');\n }\n}\n\n/**\n * A handler for tokens received in the response message to a Login7 message.\n */\nexport class Login7TokenHandler extends TokenHandler {\n declare connection: Connection;\n\n declare fedAuthInfoToken: FedAuthInfoToken | undefined;\n declare routingData: { server: string, port: number, instance: string } | undefined;\n\n declare loginAckReceived: boolean;\n\n declare loginError: ConnectionError | undefined;\n\n constructor(connection: Connection) {\n super();\n this.loginAckReceived = false;\n this.connection = connection;\n this.loginError = undefined;\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n\n const error = new ConnectionError(token.message, 'ELOGIN');\n\n const isLoginErrorTransient = this.connection.transientErrorLookup.isTransientError(token.number);\n if (isLoginErrorTransient && this.connection.curTransientRetryCount !== this.connection.config.options.maxRetriesOnTransientErrors) {\n error.isTransient = true;\n }\n\n this.loginError = error;\n }\n\n onSSPI(token: SSPIToken) {\n if (token.ntlmpacket) {\n this.connection.ntlmpacket = token.ntlmpacket;\n this.connection.ntlmpacketBuffer = token.ntlmpacketBuffer;\n }\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) {\n this.connection.emit('databaseMirroringPartner', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onFedAuthInfo(token: FedAuthInfoToken) {\n this.fedAuthInfoToken = token;\n }\n\n onFeatureExtAck(token: FeatureExtAckToken) {\n const { authentication } = this.connection.config;\n\n if (authentication.type === 'azure-active-directory-password' || authentication.type === 'azure-active-directory-access-token' || authentication.type === 'azure-active-directory-msi-vm' || authentication.type === 'azure-active-directory-msi-app-service' || authentication.type === 'azure-active-directory-service-principal-secret' || authentication.type === 'azure-active-directory-default') {\n if (token.fedAuth === undefined) {\n this.loginError = new ConnectionError('Did not receive Active Directory authentication acknowledgement');\n } else if (token.fedAuth.length !== 0) {\n this.loginError = new ConnectionError(`Active Directory authentication acknowledgment for ${authentication.type} authentication method includes extra data`);\n }\n } else if (token.fedAuth === undefined && token.utf8Support === undefined) {\n this.loginError = new ConnectionError('Received acknowledgement for unknown feature');\n } else if (token.fedAuth) {\n this.loginError = new ConnectionError('Did not request Active Directory authentication, but received the acknowledgment');\n }\n }\n\n onLoginAck(token: LoginAckToken) {\n if (!token.tdsVersion) {\n // unsupported TDS version\n this.loginError = new ConnectionError('Server responded with unknown TDS version.', 'ETDS');\n return;\n }\n\n if (!token.interface) {\n // unsupported interface\n this.loginError = new ConnectionError('Server responded with unsupported interface.', 'EINTERFACENOTSUPP');\n return;\n }\n\n // use negotiated version\n this.connection.config.options.tdsVersion = token.tdsVersion;\n\n if (token.tdsVersion < '7_2') {\n tds71DeprecationWarning.emit();\n }\n\n this.loginAckReceived = true;\n }\n\n onRoutingChange(token: RoutingEnvChangeToken) {\n // Splits instance name attached to the redirect url. E.g., redirect.db.net\\instance1 --> [redirect.db.net, instance1]\n const [ server, instance ] = token.newValue.server.split('\\\\');\n\n this.routingData = {\n server, port: token.newValue.port, instance\n };\n }\n\n onDoneInProc(token: DoneInProcToken) {\n // Do nothing\n }\n\n onDone(token: DoneToken) {\n // Do nothing\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n}\n\n/**\n * A handler for tokens received in the response message to a RPC Request,\n * a SQL Batch Request, a Bulk Load BCP Request or a Transaction Manager Request.\n */\nexport class RequestTokenHandler extends TokenHandler {\n declare connection: Connection;\n declare request: Request | BulkLoad;\n declare errors: RequestError[];\n\n constructor(connection: Connection, request: Request | BulkLoad) {\n super();\n\n this.connection = connection;\n this.request = request;\n this.errors = [];\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n\n if (!this.request.canceled) {\n const error = new RequestError(token.message, 'EREQUEST');\n\n error.number = token.number;\n error.state = token.state;\n error.class = token.class;\n error.serverName = token.serverName;\n error.procName = token.procName;\n error.lineNumber = token.lineNumber;\n this.errors.push(error);\n this.request.error = error;\n if (this.request instanceof Request && this.errors.length > 1) {\n this.request.error = new AggregateError(this.errors);\n }\n }\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.push(token.newValue);\n this.connection.inTransaction = true;\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n this.connection.inTransaction = false;\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n // An outermost transaction was rolled back. Reset the transaction counter\n this.connection.inTransaction = false;\n this.connection.emit('rollbackTransaction');\n }\n\n onColMetadata(token: ColMetadataToken) {\n if (!this.request.canceled) {\n if (this.connection.config.options.useColumnNames) {\n const columns: { [key: string]: ColumnMetadata } = Object.create(null);\n\n for (let j = 0, len = token.columns.length; j < len; j++) {\n const col = token.columns[j];\n if (columns[col.colName] == null) {\n columns[col.colName] = col;\n }\n }\n\n this.request.emit('columnMetadata', columns);\n } else {\n this.request.emit('columnMetadata', token.columns);\n }\n }\n }\n\n onTabName(token: TabNameToken) {\n if (!this.request.canceled) {\n this.request.emit('tabName', token.tableNames);\n }\n }\n\n onColInfo(token: ColInfoToken) {\n if (!this.request.canceled) {\n this.request.emit('colInfo', token.columns);\n }\n }\n\n onOrder(token: OrderToken) {\n if (!this.request.canceled) {\n this.request.emit('order', token.orderColumns);\n }\n }\n\n onRow(token: RowToken | NBCRowToken) {\n if (!this.request.canceled) {\n if (this.connection.config.options.rowCollectionOnRequestCompletion) {\n this.request.rows!.push(token.columns);\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst!.push(token.columns);\n }\n\n this.request.emit('row', token.columns);\n }\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n if (!this.request.canceled) {\n // Keep value for passing in 'doneProc' event.\n this.connection.procReturnStatusValue = token.value;\n }\n }\n\n onReturnValue(token: ReturnValueToken) {\n if (!this.request.canceled) {\n this.request.emit('returnValue', token.paramName, token.value, token.metadata);\n }\n }\n\n onDoneProc(token: DoneProcToken) {\n if (!this.request.canceled) {\n if (token.sqlError && !this.request.error) {\n // check if the DONE_ERROR flags was set, but an ERROR token was not sent.\n this.request.error = new RequestError('An unknown error has occurred.', 'UNKNOWN');\n }\n\n this.request.emit('doneProc', token.rowCount, token.more, this.connection.procReturnStatusValue, this.request.rst);\n\n this.connection.procReturnStatusValue = undefined;\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onDoneInProc(token: DoneInProcToken) {\n if (!this.request.canceled) {\n this.request.emit('doneInProc', token.rowCount, token.more, this.request.rst);\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onDone(token: DoneToken) {\n if (!this.request.canceled) {\n if (token.sqlError && !this.request.error) {\n // check if the DONE_ERROR flags was set, but an ERROR token was not sent.\n this.request.error = new RequestError('An unknown error has occurred.', 'UNKNOWN');\n }\n\n this.request.emit('done', token.rowCount, token.more, this.request.rst);\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n this.connection.emit('resetConnection');\n }\n}\n\n/**\n * A handler for the attention acknowledgement message.\n *\n * This message only contains a `DONE` token that acknowledges\n * that the attention message was received by the server.\n */\nexport class AttentionTokenHandler extends TokenHandler {\n declare connection: Connection;\n declare request: Request | BulkLoad;\n\n /**\n * Returns whether an attention acknowledgement was received.\n */\n declare attentionReceived: boolean;\n\n constructor(connection: Connection, request: Request | BulkLoad) {\n super();\n\n this.connection = connection;\n this.request = request;\n\n this.attentionReceived = false;\n }\n\n onDone(token: DoneToken) {\n if (token.attention) {\n this.attentionReceived = true;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import Debug from '../debug';
2
2
  import { type InternalConnectionOptions } from '../connection';
3
- import { ColMetadataToken, DoneProcToken, DoneToken, DoneInProcToken, ErrorMessageToken, InfoMessageToken, RowToken, type EnvChangeToken, LoginAckToken, ReturnStatusToken, OrderToken, FedAuthInfoToken, SSPIToken, ReturnValueToken, NBCRowToken, FeatureExtAckToken, Token } from './token';
3
+ import { ColInfoToken, ColMetadataToken, DoneProcToken, DoneToken, DoneInProcToken, ErrorMessageToken, InfoMessageToken, RowToken, type EnvChangeToken, LoginAckToken, ReturnStatusToken, OrderToken, FedAuthInfoToken, SSPIToken, ReturnValueToken, NBCRowToken, FeatureExtAckToken, TabNameToken, Token } from './token';
4
4
  import { type ColumnMetadata } from './colmetadata-token-parser';
5
5
  export type ParserOptions = Pick<InternalConnectionOptions, 'useUTC' | 'lowerCaseGuids' | 'tdsVersion' | 'useColumnNames' | 'columnNameReplacer' | 'camelCaseColumns'>;
6
6
  declare class Parser {
@@ -13,6 +13,8 @@ declare class Parser {
13
13
  static parseTokens(iterable: AsyncIterable<Buffer> | Iterable<Buffer>, debug: Debug, options: ParserOptions, colMetadata?: ColumnMetadata[]): AsyncGenerator<Token | undefined, void, unknown>;
14
14
  readToken(type: number): Token | undefined | Promise<Token | undefined>;
15
15
  readFeatureExtAckToken(): FeatureExtAckToken | Promise<FeatureExtAckToken>;
16
+ readTabNameToken(): TabNameToken | Promise<TabNameToken>;
17
+ readColInfoToken(): ColInfoToken | Promise<ColInfoToken>;
16
18
  readNbcRowToken(): Promise<NBCRowToken>;
17
19
  readReturnValueToken(): Promise<ReturnValueToken>;
18
20
  readColMetadataToken(): Promise<ColMetadataToken>;