filestack-js 4.0.0 → 4.0.2

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.
@@ -9,6 +9,6 @@
9
9
  },
10
10
  "main.js": {
11
11
  "src": "filestack.min.js",
12
- "integrity": "sha256-cuqOFA8wgfoKDd7Z00l4zlbniMVKGPBoFMw5+cXWLH4= sha384-yVEpUDAA2491uE2FIorGHLZUS1Ae0Xn9JwqgIPJm6PP2MMPX5hYYpRre2c1YPb9h sha512-/mJ/YrWisnnH1BB3vjXcMeUpjRNlHcSEKgotSRDhWiYBUfyVLxGGfjreK+Fbe+OdKA/l6U9Hn9XFdAFn0Upiow=="
12
+ "integrity": "sha256-MXqct87ozWW342bUb1eJxSSApJD7EHEFr/okgnGcWLs= sha384-0BlvPwRdKlZx3B1BGEuRk1K54Hn4hFadZx7G+DdCSHENyve1O8RpLNEtlCTjGJkS sha512-+0XXO51/7S9sp8qYJ5S7H7a2dimWyC/WFz9w8jKULDHO7OYsQ35OocnpJ55T2yGb5r/U0VxRNrYtKpFkdd8Yvw=="
13
13
  }
14
14
  }
@@ -23,7 +23,7 @@ export declare const init: (apikey: string, options?: ClientOptions) => Client;
23
23
  /**
24
24
  * filestack-js version. Interpolated at build time.
25
25
  */
26
- export declare const version = "4.0.0";
26
+ export declare const version = "4.0.2";
27
27
  export * from './lib/api/transform';
28
28
  export * from './lib/filelink';
29
29
  export * from './filestack_error';
@@ -49,8 +49,8 @@ exports.init = exports.Filestack;
49
49
  /**
50
50
  * filestack-js version. Interpolated at build time.
51
51
  */
52
- exports.version = '4.0.0';
53
- (0, loader_1.registerModule)(loader_1.FILESTACK_MODULES.FILESTACK_SDK, exports.Filestack, { version: '4.0.0' });
52
+ exports.version = '4.0.2';
53
+ (0, loader_1.registerModule)(loader_1.FILESTACK_MODULES.FILESTACK_SDK, exports.Filestack, { version: '4.0.2' });
54
54
  tslib_1.__exportStar(require("./lib/api/transform"), exports);
55
55
  tslib_1.__exportStar(require("./lib/filelink"), exports);
56
56
  tslib_1.__exportStar(require("./filestack_error"), exports);
@@ -50,13 +50,14 @@ var HttpWritableStream = /** @class */ (function (_super) {
50
50
  HttpWritableStream.prototype._write = function (chunk, encoding, cb) {
51
51
  this.request.write(chunk, encoding, cb);
52
52
  };
53
- HttpWritableStream.prototype.end = function (chunk) {
54
- if (chunk) {
55
- this.request.write(chunk);
56
- }
57
- this.request.end();
53
+ HttpWritableStream.prototype.end = function (chunk, encoding, cb) {
54
+ _super.prototype.end.call(this, chunk, encoding, cb);
58
55
  return this;
59
56
  };
57
+ HttpWritableStream.prototype._final = function (cb) {
58
+ this.request.end();
59
+ cb();
60
+ };
60
61
  return HttpWritableStream;
61
62
  }(Stream.Writable));
62
63
  /**
@@ -325,4 +326,4 @@ var HttpAdapter = /** @class */ (function () {
325
326
  }());
326
327
  exports.HttpAdapter = HttpAdapter;
327
328
 
328
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7Ozs7QUFFSCwrQ0FBMkI7QUFDM0IsaURBQTZCO0FBQzdCLHdEQUEwQjtBQUcxQixxQ0FBeUM7QUFDekMscURBQWlDO0FBRWpDLHNEQUFrQztBQUNsQyx3Q0FBMEc7QUFDMUcsa0NBQThEO0FBQzlELG9DQUEwQztBQUUxQyxJQUFNLFlBQVksR0FBRyxTQUFTLENBQUM7QUFDL0IsSUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNsQyxJQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO0FBQ3JDLElBQU0sS0FBSyxHQUFHLElBQUEsZUFBSyxFQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFdkM7Ozs7O0dBS0c7QUFDSDtJQUFpQyw4Q0FBZTtJQUc5Qyw0QkFBWSxHQUFHLEVBQUUsSUFBUztRQUFULHFCQUFBLEVBQUEsU0FBUztRQUExQixZQUNFLGtCQUFNLElBQUksQ0FBQyxTQUlaO1FBRkMsS0FBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBTSxPQUFBLEtBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQWxCLENBQWtCLENBQUMsQ0FBQzs7SUFDOUMsQ0FBQztJQUVELG1DQUFNLEdBQU4sVUFBTyxLQUFVLEVBQUUsUUFBaUIsRUFBRSxFQUE4QztRQUNsRixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxnQ0FBRyxHQUFILFVBQUksS0FBSztRQUNQLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENB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QUFDO0FBQUQsQ0FsVEEsQUFrVEMsSUFBQTtBQWxUWSxrQ0FBVyIsImZpbGUiOiJsaWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2tcbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcbmltcG9ydCAqIGFzIHpsaWIgZnJvbSAnemxpYic7XG5pbXBvcnQgRGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCAqIGFzIFN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgRnNSZXF1ZXN0T3B0aW9ucywgRnNSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHByZXBhcmVEYXRhLCBwYXJzZVJlc3BvbnNlLCBjb21iaW5lVVJMLCBzZXQgYXMgc2V0SGVhZGVyLCBub3JtYWxpemVIZWFkZXJzIH0gZnJvbSAnLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IEZzUmVxdWVzdEVycm9yQ29kZSwgRnNSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcic7XG5pbXBvcnQgeyBGc0h0dHBNZXRob2QgfSBmcm9tICcuLy4uL3R5cGVzJztcblxuY29uc3QgSFRUUFNfUkVHRVhQID0gL2h0dHBzOj8vO1xuY29uc3QgSFRUUF9DSFVOS19TSVpFID0gMTYgKiAxMDI0O1xuY29uc3QgTUFYX1JFRElSRUNUUyA9IDEwO1xuY29uc3QgQ0FOQ0VMX0NMRUFSID0gYEZzQ2xlYW5NZW1vcnlgO1xuY29uc3QgZGVidWcgPSBEZWJ1ZygnZnM6cmVxdWVzdDpodHRwJyk7XG5cbi8qKlxuICogV3JpdGFibGUgc3RyZWFtIHRoYXRzIG92ZXJ3cmFwIGh0dHAgcmVxdWVzdCBmb3IgcHJvZ3Jlc3MgZXZlbnRcbiAqXG4gKiBAY2xhc3MgSHR0cFdyaXRhYmxlU3RyZWFtXG4gKiBAZXh0ZW5kcyB7U3RyZWFtLldyaXRhYmxlfVxuICovXG5jbGFzcyBIdHRwV3JpdGFibGVTdHJlYW0gZXh0ZW5kcyBTdHJlYW0uV3JpdGFibGUge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxLCBvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcblxuICAgIHRoaXMucmVxdWVzdCA9IHJlcTtcbiAgICByZXEub25jZSgnZHJhaW4nLCAoKSA9PiB0aGlzLmVtaXQoJ2RyYWluJykpO1xuICB9XG5cbiAgX3dyaXRlKGNodW5rOiBhbnksIGVuY29kaW5nPzogc3RyaW5nLCBjYj86IChlcnJvcjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5yZXF1ZXN0LndyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgZW5kKGNodW5rKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLnJlcXVlc3Qud3JpdGUoY2h1bmspO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdC5lbmQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vKipcbiAqIE5vZGUgaHR0cCByZXF1ZXN0IGNsYXNzXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIEh0dHBBZGFwdGVyXG4gKiBAaW1wbGVtZW50cyB7QWRhcHRlckludGVyZmFjZX1cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBBZGFwdGVyIGltcGxlbWVudHMgQWRhcHRlckludGVyZmFjZSB7XG4gIHByaXZhdGUgcmVkaXJlY3RIb29wcyA9IDA7XG4gIHByaXZhdGUgcmVkaXJlY3RQYXRocyA9IFtdO1xuXG4gIC8qKlxuICAgKiBkbyByZXF1ZXN0IGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGc1JlcXVlc3RPcHRpb25zfSBjb25maWdcbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIEh0dHBBZGFwdGVyXG4gICAqL1xuICByZXF1ZXN0KGNvbmZpZzogRnNSZXF1ZXN0T3B0aW9ucykge1xuICAgIC8vIGlmIHRoaXMgb3B0aW9uIGlzIHVuc3BlY2lmaWVkIHNldCBpdCBieSBkZWZhdWx0XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZmlsZXN0YWNrSGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZy5maWxlc3RhY2tIZWFkZXJzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25maWcuaGVhZGVycyA9IG5vcm1hbGl6ZUhlYWRlcnMoY29uZmlnLmhlYWRlcnMpO1xuXG4gICAgbGV0IHsgZGF0YSwgaGVhZGVycyB9ID0gcHJlcGFyZURhdGEoY29uZmlnKTtcblxuICAgIGhlYWRlcnMgPSBzZXRIZWFkZXIoaGVhZGVycywgJ3VzZXItYWdlbnQnLCBgZmlsZXN0YWNrLXJlcXVlc3QvJHtnZXRWZXJzaW9uKCl9YCk7XG5cbiAgICAvLyBmb3Igbm93IHdlIGFyZSBub3QgdXNpbmcgc3RyZWFtc1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBkZWJ1ZygnUmVxdWVzdCBkYXRhICVPJywgZGF0YSk7XG5cbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGlmICghdXRpbHMuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKCdEYXRhIG11c3QgYmUgYSBzdHJpbmcsIEpTT04gb3IgYSBCdWZmZXInLCBjb25maWcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmLTgnKTtcbiAgICAgIH1cblxuICAgICAgaGVhZGVycyA9IHNldEhlYWRlcihoZWFkZXJzLCAnY29udGVudC1sZW5ndGgnLCBkYXRhLmxlbmd0aCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGxldCBhdXRoO1xuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgaWYgKCFjb25maWcuYXV0aC51c2VybmFtZSB8fCBjb25maWcuYXV0aC51c2VybmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgQmFzaWMgYXV0aDogdXNlcm5hbWUgaXMgcmVxdWlyZWQgJHtjb25maWcuYXV0aH1gLCBjb25maWcpKTtcbiAgICAgIH1cblxuICAgICAgYXV0aCA9IGAke2NvbmZpZy5hdXRoLnVzZXJuYW1lfToke2NvbmZpZy5hdXRoLnBhc3N3b3JkfWA7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgbGV0IHBhcnNlZCA9IHVybC5wYXJzZShjb25maWcudXJsKTtcblxuICAgIC8vIHRyeSB0byBhZGQgZGVmYXVsdCBodHRwcyBwcm90b2NvbFxuICAgIGlmICghcGFyc2VkLnByb3RvY29sKSB7XG4gICAgICBwYXJzZWQgPSB1cmwucGFyc2UoYGh0dHBzOi8vJHtjb25maWcudXJsfWApO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBqdXN0IGJlIHN1cmUgdGhhdCB0aGUgaG9zdCBpcyBwYXJzZWQgY29ycmVjdGx5LCBub3QgbmVlZGVkIHRvIHRlc3QgKi9cbiAgICBpZiAoIXBhcnNlZC5ob3N0KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBDYW5ub3QgcGFyc2UgcHJvdmlkZWQgdXJsICR7Y29uZmlnLnVybH1gLCBjb25maWcpKTtcbiAgICB9XG5cbiAgICAvLyBub3JtYWxpemUgYXV0aCBoZWFkZXJcbiAgICBpZiAoYXV0aCAmJiBoZWFkZXJzLkF1dGhvcml6YXRpb24pIHtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzLkF1dGhvcml6YXRpb247XG4gICAgfVxuXG4gICAgY29uc3QgaXNIdHRwc1JlcXVlc3QgPSBIVFRQU19SRUdFWFAudGVzdChwYXJzZWQucHJvdG9jb2wpO1xuICAgIGNvbnN0IGFnZW50ID0gaXNIdHRwc1JlcXVlc3QgPyByZXF1aXJlKCdodHRwcycpIDogcmVxdWlyZSgnaHR0cCcpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGNvbWJpbmVVUkwocGFyc2VkLnBhdGgsIGNvbmZpZy5wYXJhbXMpLFxuICAgICAgaG9zdDogcGFyc2VkLmhvc3QsXG4gICAgICBwb3J0OiBwYXJzZWQucG9ydCxcbiAgICAgIHByb3RvY29sOiBwYXJzZWQucHJvdG9jb2wsXG4gICAgICBtZXRob2Q6IGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBhZ2VudDogbmV3IGFnZW50LkFnZW50KCksXG4gICAgICBhdXRoOiBhdXRoLFxuICAgIH07XG5cbiAgICBkZWJ1ZygnU3RhcnRpbmcgJXMgcmVxdWVzdCB3aXRoIG9wdGlvbnMgJU8nLCBpc0h0dHBzUmVxdWVzdCA/ICdodHRwcycgOiAnaHR0cCcsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZzUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpOiBhbnkgPT4ge1xuICAgICAgbGV0IHJlcTtcbiAgICAgIGxldCBjYW5jZWxMaXN0ZW5lcjtcblxuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjYW5jZWxMaXN0ZW5lciA9IGNvbmZpZy5jYW5jZWxUb2tlbi5vbignY2FuY2VsJywgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIC8vIGNsZWFudXAgaGFuZGxlclxuICAgICAgICAgIGNhbmNlbExpc3RlbmVyID0gbnVsbDtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgcHJvbWlzZSBpcyByZXNvbHZlZCBieSBzeXN0ZW1cbiAgICAgICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5tZXNzYWdlID09PSBDQU5DRUxfQ0xFQVIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogaWYgcmVxdWVzdCBpcyBkb25lIGNhbmNlbCB0b2tlbiBzaG91bGQgbm90IHRocm93IGFueSBlcnJvciAqL1xuICAgICAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICAgICAgcmVxID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBjYW5jZWxlZCBieSB1c2VyICVzLCBjb25maWc6ICVPJywgcmVhc29uLCBjb25maWcpO1xuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGFib3J0ZWQuIFJlYXNvbjogJHtyZWFzb259YCwgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuQUJPUlRFRCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVxID0gYWdlbnQucmVxdWVzdChvcHRpb25zLCByZXMgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDoganVzdCBiZSBzdXJlIHRoYXQgcmVzcG9uc2Ugd2lsbCBub3QgYmUgY2FsbGVkIGFmdGVyIHJlcXVlc3QgaXMgYWJvcnRlZCAqL1xuICAgICAgICBpZiAoIXJlcSB8fCByZXEuYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBjb25maWcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHJlYW0gPSByZXM7XG4gICAgICAgIGRlYnVnKCdSZXNwb25zZSBzdGF0dXNDb2RlOiAlZCwgUmVzcG9uc2UgSGVhZGVyczogJU8nLCByZXMuc3RhdHVzQ29kZSwgcmVzLmhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGNvbXByZXNzSGVhZGVycyA9IHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG5cbiAgICAgICAgaWYgKGNvbXByZXNzSGVhZGVycyAmJiBjb21wcmVzc0hlYWRlcnMubGVuZ3RoICYmIFsnZ3ppcCcsICdjb21wcmVzcycsICdkZWZsYXRlJ10uc29tZSgodikgPT4gY29tcHJlc3NIZWFkZXJzLmluZGV4T2YodikgPiAtMSkpIHtcbiAgICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtID0gcmVzLnN0YXR1c0NvZGUgPT09IDIwNCA/IHN0cmVhbSA6IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjb250ZW50LWVuY29kaW5nIGluIG9yZGVyIHRvIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlOiBGc1Jlc3BvbnNlID0ge1xuICAgICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzLnN0YXR1c01lc3NhZ2UsXG4gICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gZm9sbG93IHJlZGlyZWN0IHNvIG1ha2Ugc2FtZSByZXF1ZXN0IHdpdGggbmV3IGxvY2F0aW9uXG4gICAgICAgIGlmIChbMzAxLCAzMDJdLmluZGV4T2YocmVzLnN0YXR1c0NvZGUpID4gLTEpIHtcbiAgICAgICAgICBkZWJ1ZygnUmVkaXJlY3QgcmVjZWl2ZWQgJXMnLCByZXMuc3RhdHVzQ29kZSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5yZWRpcmVjdEhvb3BzID49IE1BWF9SRURJUkVDVFMpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBNYXggcmVkaXJlY3RzICgke3RoaXMucmVkaXJlY3RIb29wc30pIHJlYWNoZWQuIEV4aXRpbmdgLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVESVJFQ1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB1cmwgPSByZXMuaGVhZGVyc1snbG9jYXRpb24nXTtcblxuICAgICAgICAgIGlmICghdXJsIHx8IHVybC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZWRpcmVjdCBoZWFkZXIgbG9jYXRpb24gbm90IGZvdW5kYCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFRElSRUNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMucmVkaXJlY3RQYXRocy5pbmRleE9mKHVybCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlZGlyZWN0IGxvb3AgZGV0ZWN0ZWQgYXQgdXJsICR7dXJsfWAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRURJUkVDVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMucmVkaXJlY3RQYXRocy5wdXNoKHVybCk7XG4gICAgICAgICAgdGhpcy5yZWRpcmVjdEhvb3BzKys7XG5cbiAgICAgICAgICAvLyBmcmVlIHJlc291cmNlc1xuICAgICAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXEgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBkZWJ1ZygnUmVkaXJlY3RpbmcgcmVxdWVzdCB0byAlcyAoaG9vcC1jb3VudDogJWQpJywgdXJsLCB0aGlzLnJlZGlyZWN0SG9vcHMpO1xuXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5yZXF1ZXN0KE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZywgeyB1cmwgfSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCBjaHVuayA9PiByZXNwb25zZUJ1ZmZlci5wdXNoKGNodW5rKSk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGl0cyBoYXJkIHRvIHRlc3Qgc29ja2V0IGV2ZW50cyB3aXRoIGplc3QgYW5kIG5vY2sgLSB0ZXN0ZWQgbWFudWFsbHkgKi9cbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlcSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNwb25zZUJ1ZmZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlcnJvcjogQWJvcnRlZCAlTycsIGVycik7XG5cbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjbGVhciBjYW5jZWwgdG9rZW4gdG8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgICAgICAgICBpZiAoY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoZXJyLm1lc3NhZ2UsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLk5FVFdPUkspKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdlbmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gY2xlYXIgY2FuY2VsIHRva2VuIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSByZXNwb25zZSBkYXRhIGluc2lkZVxuICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjA0KSB7XG4gICAgICAgICAgICAvLyBwcmVwYXJlIHJlc3BvbnNlXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHBhcnNlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBmcmVlIHJlc291cmNlc1xuICAgICAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXEgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICByZXNwb25zZUJ1ZmZlciA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmICg1MDAgPD0gcmVzcG9uc2Uuc3RhdHVzICYmIHJlc3BvbnNlLnN0YXR1cyA8PSA1OTkpIHtcbiAgICAgICAgICAgIC8vIHNlcnZlciBlcnJvciB0aHJvd1xuICAgICAgICAgICAgZGVidWcoJ1NlcnZlciBlcnJvcig1eHgpIC0gJU8nLCByZXNwb25zZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgU2VydmVyIGVycm9yICR7dXJsfWAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5TRVJWRVIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKDQwMCA8PSByZXNwb25zZS5zdGF0dXMgJiYgcmVzcG9uc2Uuc3RhdHVzIDw9IDQ5OSkge1xuICAgICAgICAgICAgZGVidWcoJ1JlcXVlc3QgZXJyb3IoNHh4KSAtICVPJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlcXVlc3QgZXJyb3IgJHt1cmx9YCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFUVVFU1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlbmRzOiAlTycsIHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChjb25maWcudGltZW91dCkge1xuICAgICAgICByZXEuc2V0VGltZW91dChjb25maWcudGltZW91dCwgKCkgPT4ge1xuICAgICAgICAgIHJlcS5hYm9ydCgpO1xuXG4gICAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKCdSZXF1ZXN0IHRpbWVvdXQnLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5USU1FT1VUKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXEub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVxIHx8IHJlcS5hYm9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWcoJ1JlcXVlc3QgZXJyb3I6ICVzIC0gJU8nLCBlcnIsIGVyci5jb2RlKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlcXVlc3QgZXJyb3I6ICR7ZXJyLmNvZGV9YCwgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuTkVUV09SSykpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkgJiYgWydQT1NUJywgJ1BVVCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgPiAtMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJUb0NodW5rcyhkYXRhKS5waXBlKHRoaXMuZ2V0UHJvZ3Jlc3NNb25pdG9yKGNvbmZpZywgZGF0YS5sZW5ndGgpKS5waXBlKG5ldyBIdHRwV3JpdGFibGVTdHJlYW0ocmVxKSk7XG4gICAgICB9XG5cbiAgICAgIHJlcS5lbmQoZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTW9uaXRvciBhbmQgZW1pdCBwcm9ncmVzcyBldmVudCBpZiBuZWVkZWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlcm9mIEh0dHBBZGFwdGVyXG4gICAqL1xuICBwcml2YXRlIGdldFByb2dyZXNzTW9uaXRvciA9IChjb25maWcsIHRvdGFsKSA9PiB7XG4gICAgbGV0IGxvYWRlZCA9IDA7XG5cbiAgICBjb25zdCBwcm9ncmVzcyA9IG5ldyBTdHJlYW0uVHJhbnNmb3JtKCk7XG4gICAgcHJvZ3Jlc3MuX3RyYW5zZm9ybSA9IChjaHVuaywgZW5jb2RpbmcsIGNiKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZy5vblByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIFtGc0h0dHBNZXRob2QuUE9TVCwgRnNIdHRwTWV0aG9kLlBVVF0uaW5kZXhPZihjb25maWcubWV0aG9kKSA+IC0xKSB7XG4gICAgICAgIGxvYWRlZCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIGNvbmZpZy5vblByb2dyZXNzKHtcbiAgICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGxvYWRlZCxcbiAgICAgICAgICB0b3RhbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjYihudWxsLCBjaHVuayk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9ncmVzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGJ1ZmZlciB0byBzdHJlYW1cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSBidWZmZXJcbiAgICogQHJldHVybnMge1N0cmVhbS5SZWFkYWJsZX1cbiAgICogQG1lbWJlcm9mIEh0dHBBZGFwdGVyXG4gICAqL1xuICBwcml2YXRlIGJ1ZmZlclRvQ2h1bmtzKGJ1ZmZlcik6IFN0cmVhbS5SZWFkYWJsZSB7XG4gICAgY29uc3QgY2h1bmtpbmcgPSBuZXcgU3RyZWFtLlJlYWRhYmxlKCk7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IHRvdGFsTGVuZ3RoICUgSFRUUF9DSFVOS19TSVpFO1xuICAgIGNvbnN0IGN1dG9mZiA9IHRvdGFsTGVuZ3RoIC0gcmVtYWluZGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXRvZmY7IGkgKz0gSFRUUF9DSFVOS19TSVpFKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGJ1ZmZlci5zbGljZShpLCBpICsgSFRUUF9DSFVOS19TSVpFKTtcbiAgICAgIGNodW5raW5nLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIGlmIChyZW1haW5kZXIgPiAwKSB7XG4gICAgICBjb25zdCByZW1haW5kZXJCdWZmZXIgPSBidWZmZXIuc2xpY2UoLXJlbWFpbmRlcik7XG4gICAgICBjaHVua2luZy5wdXNoKHJlbWFpbmRlckJ1ZmZlcik7XG4gICAgfVxuXG4gICAgY2h1bmtpbmcucHVzaChudWxsKTtcblxuICAgIHJldHVybiBjaHVua2luZztcbiAgfVxufVxuIl19
329
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7Ozs7QUFFSCwrQ0FBMkI7QUFDM0IsaURBQTZCO0FBQzdCLHdEQUEwQjtBQUcxQixxQ0FBeUM7QUFDekMscURBQWlDO0FBRWpDLHNEQUFrQztBQUNsQyx3Q0FBMEc7QUFDMUcsa0NBQThEO0FBQzlELG9DQUEwQztBQUUxQyxJQUFNLFlBQVksR0FBRyxTQUFTLENBQUM7QUFDL0IsSUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNsQyxJQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO0FBQ3JDLElBQU0sS0FBSyxHQUFHLElBQUEsZUFBSyxFQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFdkM7Ozs7O0dBS0c7QUFDSDtJQUFpQyw4Q0FBZTtJQUc5Qyw0QkFBWSxHQUFHLEVBQUUsSUFBUztRQUFULHFCQUFBLEVBQUEsU0FBUztRQUExQixZQUNFLGtCQUFNLElBQUksQ0FBQyxTQUlaO1FBRkMsS0FBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBTSxPQUFBLEtBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQWxCLENBQWtCLENBQUMsQ0FBQzs7SUFDOUMsQ0FBQztJQUVELG1DQUFNLEdBQU4sVUFBTyxLQUFVLEVBQUUsUUFBaUIsRUFBRSxFQUE4QztRQUNsRixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxnQ0FBRyxHQUFILFVBQUksS0FBVyxFQUFFLFFBQWMsRUFBRSxFQUFRO1FBQ3ZDLGlCQUFNLEdBQUcsWUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUs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LENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNILGtCQUFDO0FBQUQsQ0FsVEEsQUFrVEMsSUFBQTtBQWxUWSxrQ0FBVyIsImZpbGUiOiJsaWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2tcbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcbmltcG9ydCAqIGFzIHpsaWIgZnJvbSAnemxpYic7XG5pbXBvcnQgRGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCAqIGFzIFN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgRnNSZXF1ZXN0T3B0aW9ucywgRnNSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHByZXBhcmVEYXRhLCBwYXJzZVJlc3BvbnNlLCBjb21iaW5lVVJMLCBzZXQgYXMgc2V0SGVhZGVyLCBub3JtYWxpemVIZWFkZXJzIH0gZnJvbSAnLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IEZzUmVxdWVzdEVycm9yQ29kZSwgRnNSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcic7XG5pbXBvcnQgeyBGc0h0dHBNZXRob2QgfSBmcm9tICcuLy4uL3R5cGVzJztcblxuY29uc3QgSFRUUFNfUkVHRVhQID0gL2h0dHBzOj8vO1xuY29uc3QgSFRUUF9DSFVOS19TSVpFID0gMTYgKiAxMDI0O1xuY29uc3QgTUFYX1JFRElSRUNUUyA9IDEwO1xuY29uc3QgQ0FOQ0VMX0NMRUFSID0gYEZzQ2xlYW5NZW1vcnlgO1xuY29uc3QgZGVidWcgPSBEZWJ1ZygnZnM6cmVxdWVzdDpodHRwJyk7XG5cbi8qKlxuICogV3JpdGFibGUgc3RyZWFtIHRoYXRzIG92ZXJ3cmFwIGh0dHAgcmVxdWVzdCBmb3IgcHJvZ3Jlc3MgZXZlbnRcbiAqXG4gKiBAY2xhc3MgSHR0cFdyaXRhYmxlU3RyZWFtXG4gKiBAZXh0ZW5kcyB7U3RyZWFtLldyaXRhYmxlfVxuICovXG5jbGFzcyBIdHRwV3JpdGFibGVTdHJlYW0gZXh0ZW5kcyBTdHJlYW0uV3JpdGFibGUge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxLCBvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcblxuICAgIHRoaXMucmVxdWVzdCA9IHJlcTtcbiAgICByZXEub25jZSgnZHJhaW4nLCAoKSA9PiB0aGlzLmVtaXQoJ2RyYWluJykpO1xuICB9XG5cbiAgX3dyaXRlKGNodW5rOiBhbnksIGVuY29kaW5nPzogc3RyaW5nLCBjYj86IChlcnJvcjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5yZXF1ZXN0LndyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgZW5kKGNodW5rPzogYW55LCBlbmNvZGluZz86IGFueSwgY2I/OiBhbnkpOiB0aGlzIHtcbiAgICBzdXBlci5lbmQoY2h1bmssIGVuY29kaW5nLCBjYik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfZmluYWwoY2I6IChlcnJvcj86IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdC5lbmQoKTtcbiAgICBjYigpO1xuICB9XG59XG5cbi8qKlxuICogTm9kZSBodHRwIHJlcXVlc3QgY2xhc3NcbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgSHR0cEFkYXB0ZXJcbiAqIEBpbXBsZW1lbnRzIHtBZGFwdGVySW50ZXJmYWNlfVxuICovXG5leHBvcnQgY2xhc3MgSHR0cEFkYXB0ZXIgaW1wbGVtZW50cyBBZGFwdGVySW50ZXJmYWNlIHtcbiAgcHJpdmF0ZSByZWRpcmVjdEhvb3BzID0gMDtcbiAgcHJpdmF0ZSByZWRpcmVjdFBhdGhzID0gW107XG5cbiAgLyoqXG4gICAqIGRvIHJlcXVlc3QgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0ZzUmVxdWVzdE9wdGlvbnN9IGNvbmZpZ1xuICAgKiBAcmV0dXJuc1xuICAgKiBAbWVtYmVyb2YgSHR0cEFkYXB0ZXJcbiAgICovXG4gIHJlcXVlc3QoY29uZmlnOiBGc1JlcXVlc3RPcHRpb25zKSB7XG4gICAgLy8gaWYgdGhpcyBvcHRpb24gaXMgdW5zcGVjaWZpZWQgc2V0IGl0IGJ5IGRlZmF1bHRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5maWxlc3RhY2tIZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnLmZpbGVzdGFja0hlYWRlcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbmZpZy5oZWFkZXJzID0gbm9ybWFsaXplSGVhZGVycyhjb25maWcuaGVhZGVycyk7XG5cbiAgICBsZXQgeyBkYXRhLCBoZWFkZXJzIH0gPSBwcmVwYXJlRGF0YShjb25maWcpO1xuXG4gICAgaGVhZGVycyA9IHNldEhlYWRlcihoZWFkZXJzLCAndXNlci1hZ2VudCcsIGBmaWxlc3RhY2stcmVxdWVzdC8ke2dldFZlcnNpb24oKX1gKTtcblxuICAgIC8vIGZvciBub3cgd2UgYXJlIG5vdCB1c2luZyBzdHJlYW1zXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGRlYnVnKCdSZXF1ZXN0IGRhdGEgJU8nLCBkYXRhKTtcblxuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgaWYgKCF1dGlscy5pc1N0cmluZyhkYXRhKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoJ0RhdGEgbXVzdCBiZSBhIHN0cmluZywgSlNPTiBvciBhIEJ1ZmZlcicsIGNvbmZpZykpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsICd1dGYtOCcpO1xuICAgICAgfVxuXG4gICAgICBoZWFkZXJzID0gc2V0SGVhZGVyKGhlYWRlcnMsICdjb250ZW50LWxlbmd0aCcsIGRhdGEubGVuZ3RoLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgbGV0IGF1dGg7XG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICBpZiAoIWNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8IGNvbmZpZy5hdXRoLnVzZXJuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBCYXNpYyBhdXRoOiB1c2VybmFtZSBpcyByZXF1aXJlZCAke2NvbmZpZy5hdXRofWAsIGNvbmZpZykpO1xuICAgICAgfVxuXG4gICAgICBhdXRoID0gYCR7Y29uZmlnLmF1dGgudXNlcm5hbWV9OiR7Y29uZmlnLmF1dGgucGFzc3dvcmR9YDtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1cmxcbiAgICBsZXQgcGFyc2VkID0gdXJsLnBhcnNlKGNvbmZpZy51cmwpO1xuXG4gICAgLy8gdHJ5IHRvIGFkZCBkZWZhdWx0IGh0dHBzIHByb3RvY29sXG4gICAgaWYgKCFwYXJzZWQucHJvdG9jb2wpIHtcbiAgICAgIHBhcnNlZCA9IHVybC5wYXJzZShgaHR0cHM6Ly8ke2NvbmZpZy51cmx9YCk7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGp1c3QgYmUgc3VyZSB0aGF0IHRoZSBob3N0IGlzIHBhcnNlZCBjb3JyZWN0bHksIG5vdCBuZWVkZWQgdG8gdGVzdCAqL1xuICAgIGlmICghcGFyc2VkLmhvc3QpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYENhbm5vdCBwYXJzZSBwcm92aWRlZCB1cmwgJHtjb25maWcudXJsfWAsIGNvbmZpZykpO1xuICAgIH1cblxuICAgIC8vIG5vcm1hbGl6ZSBhdXRoIGhlYWRlclxuICAgIGlmIChhdXRoICYmIGhlYWRlcnMuQXV0aG9yaXphdGlvbikge1xuICAgICAgZGVsZXRlIGhlYWRlcnMuQXV0aG9yaXphdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0h0dHBzUmVxdWVzdCA9IEhUVFBTX1JFR0VYUC50ZXN0KHBhcnNlZC5wcm90b2NvbCk7XG4gICAgY29uc3QgYWdlbnQgPSBpc0h0dHBzUmVxdWVzdCA/IHJlcXVpcmUoJ2h0dHBzJykgOiByZXF1aXJlKCdodHRwJyk7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcGF0aDogY29tYmluZVVSTChwYXJzZWQucGF0aCwgY29uZmlnLnBhcmFtcyksXG4gICAgICBob3N0OiBwYXJzZWQuaG9zdCxcbiAgICAgIHBvcnQ6IHBhcnNlZC5wb3J0LFxuICAgICAgcHJvdG9jb2w6IHBhcnNlZC5wcm90b2NvbCxcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGFnZW50OiBuZXcgYWdlbnQuQWdlbnQoKSxcbiAgICAgIGF1dGg6IGF1dGgsXG4gICAgfTtcblxuICAgIGRlYnVnKCdTdGFydGluZyAlcyByZXF1ZXN0IHdpdGggb3B0aW9ucyAlTycsIGlzSHR0cHNSZXF1ZXN0ID8gJ2h0dHBzJyA6ICdodHRwJywgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8RnNSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCk6IGFueSA9PiB7XG4gICAgICBsZXQgcmVxO1xuICAgICAgbGV0IGNhbmNlbExpc3RlbmVyO1xuXG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNhbmNlbExpc3RlbmVyID0gY29uZmlnLmNhbmNlbFRva2VuLm9uKCdjYW5jZWwnLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgLy8gY2xlYW51cCBoYW5kbGVyXG4gICAgICAgICAgY2FuY2VsTGlzdGVuZXIgPSBudWxsO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyBpZiBwcm9taXNlIGlzIHJlc29sdmVkIGJ5IHN5c3RlbVxuICAgICAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLm1lc3NhZ2UgPT09IENBTkNFTF9DTEVBUikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBpZiByZXF1ZXN0IGlzIGRvbmUgY2FuY2VsIHRva2VuIHNob3VsZCBub3QgdGhyb3cgYW55IGVycm9yICovXG4gICAgICAgICAgaWYgKHJlcSkge1xuICAgICAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgICAgICByZXEgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlYnVnKCdSZXF1ZXN0IGNhbmNlbGVkIGJ5IHVzZXIgJXMsIGNvbmZpZzogJU8nLCByZWFzb24sIGNvbmZpZyk7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlcXVlc3QgYWJvcnRlZC4gUmVhc29uOiAke3JlYXNvbn1gLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5BQk9SVEVEKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXEgPSBhZ2VudC5yZXF1ZXN0KG9wdGlvbnMsIHJlcyA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBqdXN0IGJlIHN1cmUgdGhhdCByZXNwb25zZSB3aWxsIG5vdCBiZSBjYWxsZWQgYWZ0ZXIgcmVxdWVzdCBpcyBhYm9ydGVkICovXG4gICAgICAgIGlmICghcmVxIHx8IHJlcS5hYm9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGNvbmZpZykpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0cmVhbSA9IHJlcztcbiAgICAgICAgZGVidWcoJ1Jlc3BvbnNlIHN0YXR1c0NvZGU6ICVkLCBSZXNwb25zZSBIZWFkZXJzOiAlTycsIHJlcy5zdGF0dXNDb2RlLCByZXMuaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgY29tcHJlc3NIZWFkZXJzID0gcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcblxuICAgICAgICBpZiAoY29tcHJlc3NIZWFkZXJzICYmIGNvbXByZXNzSGVhZGVycy5sZW5ndGggJiYgWydnemlwJywgJ2NvbXByZXNzJywgJ2RlZmxhdGUnXS5zb21lKCh2KSA9PiBjb21wcmVzc0hlYWRlcnMuaW5kZXhPZih2KSA+IC0xKSkge1xuICAgICAgICAgIC8vIGFkZCB0aGUgdW56aXBwZXIgdG8gdGhlIGJvZHkgc3RyZWFtIHByb2Nlc3NpbmcgcGlwZWxpbmVcbiAgICAgICAgICBzdHJlYW0gPSByZXMuc3RhdHVzQ29kZSA9PT0gMjA0ID8gc3RyZWFtIDogc3RyZWFtLnBpcGUoemxpYi5jcmVhdGVVbnppcCgpKTtcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2U6IEZzUmVzcG9uc2UgPSB7XG4gICAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZGF0YToge30sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBmb2xsb3cgcmVkaXJlY3Qgc28gbWFrZSBzYW1lIHJlcXVlc3Qgd2l0aCBuZXcgbG9jYXRpb25cbiAgICAgICAgaWYgKFszMDEsIDMwMl0uaW5kZXhPZihyZXMuc3RhdHVzQ29kZSkgPiAtMSkge1xuICAgICAgICAgIGRlYnVnKCdSZWRpcmVjdCByZWNlaXZlZCAlcycsIHJlcy5zdGF0dXNDb2RlKTtcblxuICAgICAgICAgIGlmICh0aGlzLnJlZGlyZWN0SG9vcHMgPj0gTUFYX1JFRElSRUNUUykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYE1heCByZWRpcmVjdHMgKCR7dGhpcy5yZWRpcmVjdEhvb3BzfSkgcmVhY2hlZC4gRXhpdGluZ2AsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRURJUkVDVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHVybCA9IHJlcy5oZWFkZXJzWydsb2NhdGlvbiddO1xuXG4gICAgICAgICAgaWYgKCF1cmwgfHwgdXJsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlZGlyZWN0IGhlYWRlciBsb2NhdGlvbiBub3QgZm91bmRgLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVESVJFQ1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5yZWRpcmVjdFBhdGhzLmluZGV4T2YodXJsKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVkaXJlY3QgbG9vcCBkZXRlY3RlZCBhdCB1cmwgJHt1cmx9YCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFRElSRUNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZWRpcmVjdFBhdGhzLnB1c2godXJsKTtcbiAgICAgICAgICB0aGlzLnJlZGlyZWN0SG9vcHMrKztcblxuICAgICAgICAgIC8vIGZyZWUgcmVzb3VyY2VzXG4gICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlcSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGRlYnVnKCdSZWRpcmVjdGluZyByZXF1ZXN0IHRvICVzIChob29wLWNvdW50OiAlZCknLCB1cmwsIHRoaXMucmVkaXJlY3RIb29wcyk7XG5cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLnJlcXVlc3QoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnLCB7IHVybCB9KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIHN0cmVhbS5vbignZGF0YScsIGNodW5rID0+IHJlc3BvbnNlQnVmZmVyLnB1c2goY2h1bmspKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogaXRzIGhhcmQgdG8gdGVzdCBzb2NrZXQgZXZlbnRzIHdpdGggamVzdCBhbmQgbm9jayAtIHRlc3RlZCBtYW51YWxseSAqL1xuICAgICAgICBzdHJlYW0ub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVxID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVycm9yOiBBYm9ydGVkICVPJywgZXJyKTtcblxuICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNsZWFyIGNhbmNlbCB0b2tlbiB0byBhdm9pZCBtZW1vcnkgbGVha1xuICAgICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihlcnIubWVzc2FnZSwgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuTkVUV09SSykpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBjbGVhciBjYW5jZWwgdG9rZW4gdG8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgICAgICAgICBpZiAoY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IHJlc3BvbnNlIGRhdGEgaW5zaWRlXG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDQpIHtcbiAgICAgICAgICAgIC8vIHByZXBhcmUgcmVzcG9uc2VcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQnVmZmVyKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgcGFyc2VSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGZyZWUgcmVzb3VyY2VzXG4gICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlcSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKDUwMCA8PSByZXNwb25zZS5zdGF0dXMgJiYgcmVzcG9uc2Uuc3RhdHVzIDw9IDU5OSkge1xuICAgICAgICAgICAgLy8gc2VydmVyIGVycm9yIHRocm93XG4gICAgICAgICAgICBkZWJ1ZygnU2VydmVyIGVycm9yKDV4eCkgLSAlTycsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBTZXJ2ZXIgZXJyb3IgJHt1cmx9YCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlNFUlZFUikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoNDAwIDw9IHJlc3BvbnNlLnN0YXR1cyAmJiByZXNwb25zZS5zdGF0dXMgPD0gNDk5KSB7XG4gICAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlcnJvcig0eHgpIC0gJU8nLCByZXNwb25zZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVxdWVzdCBlcnJvciAke3VybH1gLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVRVUVTVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVuZHM6ICVPJywgcmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAgIHJlcS5zZXRUaW1lb3V0KGNvbmZpZy50aW1lb3V0LCAoKSA9PiB7XG4gICAgICAgICAgcmVxLmFib3J0KCk7XG5cbiAgICAgICAgICBpZiAoY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoJ1JlcXVlc3QgdGltZW91dCcsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLlRJTUVPVVQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlcS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICBpZiAoY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXEgfHwgcmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlcnJvcjogJXMgLSAlTycsIGVyciwgZXJyLmNvZGUpO1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVxdWVzdCBlcnJvcjogJHtlcnIuY29kZX1gLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5ORVRXT1JLKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSAmJiBbJ1BPU1QnLCAnUFVUJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlclRvQ2h1bmtzKGRhdGEpLnBpcGUodGhpcy5nZXRQcm9ncmVzc01vbml0b3IoY29uZmlnLCBkYXRhLmxlbmd0aCkpLnBpcGUobmV3IEh0dHBXcml0YWJsZVN0cmVhbShyZXEpKTtcbiAgICAgIH1cblxuICAgICAgcmVxLmVuZChkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb25pdG9yIGFuZCBlbWl0IHByb2dyZXNzIGV2ZW50IGlmIG5lZWRlZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWVtYmVyb2YgSHR0cEFkYXB0ZXJcbiAgICovXG4gIHByaXZhdGUgZ2V0UHJvZ3Jlc3NNb25pdG9yID0gKGNvbmZpZywgdG90YWwpID0+IHtcbiAgICBsZXQgbG9hZGVkID0gMDtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gbmV3IFN0cmVhbS5UcmFuc2Zvcm0oKTtcbiAgICBwcm9ncmVzcy5fdHJhbnNmb3JtID0gKGNodW5rLCBlbmNvZGluZywgY2IpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9uUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgW0ZzSHR0cE1ldGhvZC5QT1NULCBGc0h0dHBNZXRob2QuUFVUXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpID4gLTEpIHtcbiAgICAgICAgbG9hZGVkICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgY29uZmlnLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRydWUsXG4gICAgICAgICAgbG9hZGVkLFxuICAgICAgICAgIHRvdGFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNiKG51bGwsIGNodW5rKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb2dyZXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYnVmZmVyIHRvIHN0cmVhbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IGJ1ZmZlclxuICAgKiBAcmV0dXJucyB7U3RyZWFtLlJlYWRhYmxlfVxuICAgKiBAbWVtYmVyb2YgSHR0cEFkYXB0ZXJcbiAgICovXG4gIHByaXZhdGUgYnVmZmVyVG9DaHVua3MoYnVmZmVyKTogU3RyZWFtLlJlYWRhYmxlIHtcbiAgICBjb25zdCBjaHVua2luZyA9IG5ldyBTdHJlYW0uUmVhZGFibGUoKTtcbiAgICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY29uc3QgcmVtYWluZGVyID0gdG90YWxMZW5ndGggJSBIVFRQX0NIVU5LX1NJWkU7XG4gICAgY29uc3QgY3V0b2ZmID0gdG90YWxMZW5ndGggLSByZW1haW5kZXI7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1dG9mZjsgaSArPSBIVFRQX0NIVU5LX1NJWkUpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gYnVmZmVyLnNsaWNlKGksIGkgKyBIVFRQX0NIVU5LX1NJWkUpO1xuICAgICAgY2h1bmtpbmcucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgaWYgKHJlbWFpbmRlciA+IDApIHtcbiAgICAgIGNvbnN0IHJlbWFpbmRlckJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgtcmVtYWluZGVyKTtcbiAgICAgIGNodW5raW5nLnB1c2gocmVtYWluZGVyQnVmZmVyKTtcbiAgICB9XG5cbiAgICBjaHVua2luZy5wdXNoKG51bGwpO1xuXG4gICAgcmV0dXJuIGNodW5raW5nO1xuICB9XG59XG4iXX0=
@@ -49,7 +49,7 @@ exports.b64 = b64;
49
49
  * Return currently used filestack-js sdk version
50
50
  */
51
51
  var getVersion = function () {
52
- return 'JS-4.0.0';
52
+ return 'JS-4.0.2';
53
53
  };
54
54
  exports.getVersion = getVersion;
55
55
  /**
@@ -47,7 +47,7 @@ exports.b64 = b64;
47
47
  * Return currently used filestack-js sdk version
48
48
  */
49
49
  var getVersion = function () {
50
- return 'JS-4.0.0';
50
+ return 'JS-4.0.2';
51
51
  };
52
52
  exports.getVersion = getVersion;
53
53
  /**
@@ -21,7 +21,7 @@ var utils = tslib_1.__importStar(require("./index"));
21
21
  describe('utils:index', function () {
22
22
  describe('getVersion', function () {
23
23
  it('should return version string to replace', function () {
24
- expect(utils.getVersion()).toEqual("JS-4.0.0");
24
+ expect(utils.getVersion()).toEqual("JS-4.0.2");
25
25
  });
26
26
  });
27
27
  describe('isFacebook', function () {
@@ -23,7 +23,7 @@ export declare const init: (apikey: string, options?: ClientOptions) => Client;
23
23
  /**
24
24
  * filestack-js version. Interpolated at build time.
25
25
  */
26
- export declare const version = "4.0.0";
26
+ export declare const version = "4.0.2";
27
27
  export * from './lib/api/transform';
28
28
  export * from './lib/filelink';
29
29
  export * from './filestack_error';
@@ -36,8 +36,8 @@ export var init = Filestack;
36
36
  /**
37
37
  * filestack-js version. Interpolated at build time.
38
38
  */
39
- export var version = '4.0.0';
40
- registerModule(FILESTACK_MODULES.FILESTACK_SDK, Filestack, { version: '4.0.0' });
39
+ export var version = '4.0.2';
40
+ registerModule(FILESTACK_MODULES.FILESTACK_SDK, Filestack, { version: '4.0.2' });
41
41
  export * from './lib/api/transform';
42
42
  export * from './lib/filelink';
43
43
  export * from './filestack_error';
@@ -47,13 +47,14 @@ var HttpWritableStream = /** @class */ (function (_super) {
47
47
  HttpWritableStream.prototype._write = function (chunk, encoding, cb) {
48
48
  this.request.write(chunk, encoding, cb);
49
49
  };
50
- HttpWritableStream.prototype.end = function (chunk) {
51
- if (chunk) {
52
- this.request.write(chunk);
53
- }
54
- this.request.end();
50
+ HttpWritableStream.prototype.end = function (chunk, encoding, cb) {
51
+ _super.prototype.end.call(this, chunk, encoding, cb);
55
52
  return this;
56
53
  };
54
+ HttpWritableStream.prototype._final = function (cb) {
55
+ this.request.end();
56
+ cb();
57
+ };
57
58
  return HttpWritableStream;
58
59
  }(Stream.Writable));
59
60
  /**
@@ -322,4 +323,4 @@ var HttpAdapter = /** @class */ (function () {
322
323
  }());
323
324
  export { HttpAdapter };
324
325
 
325
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQUMzQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEtBQUssS0FBSyxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFMUMsSUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQy9CLElBQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbEMsSUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztBQUNyQyxJQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUV2Qzs7Ozs7R0FLRztBQUNIO0lBQWlDLHNDQUFlO0lBRzlDLDRCQUFZLEdBQUcsRUFBRSxJQUFTO1FBQVQscUJBQUEsRUFBQSxTQUFTO1FBQTFCLFlBQ0Usa0JBQU0sSUFBSSxDQUFDLFNBSVo7UUFGQyxLQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFNLE9BQUEsS0FBSSxDQUFD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O1NBQ3RCO1FBRUQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLElBQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQWxUQSxBQWtUQyxJQUFBIiwiZmlsZSI6ImxpYi9yZXF1ZXN0L2FkYXB0ZXJzL2h0dHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFja1xuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0ICogYXMgemxpYiBmcm9tICd6bGliJztcbmltcG9ydCBEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCB7IEFkYXB0ZXJJbnRlcmZhY2UgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0ICogYXMgU3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBGc1JlcXVlc3RPcHRpb25zLCBGc1Jlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgcHJlcGFyZURhdGEsIHBhcnNlUmVzcG9uc2UsIGNvbWJpbmVVUkwsIHNldCBhcyBzZXRIZWFkZXIsIG5vcm1hbGl6ZUhlYWRlcnMgfSBmcm9tICcuLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRnNSZXF1ZXN0RXJyb3JDb2RlLCBGc1JlcXVlc3RFcnJvciB9IGZyb20gJy4uL2Vycm9yJztcbmltcG9ydCB7IEZzSHR0cE1ldGhvZCB9IGZyb20gJy4vLi4vdHlwZXMnO1xuXG5jb25zdCBIVFRQU19SRUdFWFAgPSAvaHR0cHM6Py87XG5jb25zdCBIVFRQX0NIVU5LX1NJWkUgPSAxNiAqIDEwMjQ7XG5jb25zdCBNQVhfUkVESVJFQ1RTID0gMTA7XG5jb25zdCBDQU5DRUxfQ0xFQVIgPSBgRnNDbGVhbk1lbW9yeWA7XG5jb25zdCBkZWJ1ZyA9IERlYnVnKCdmczpyZXF1ZXN0Omh0dHAnKTtcblxuLyoqXG4gKiBXcml0YWJsZSBzdHJlYW0gdGhhdHMgb3ZlcndyYXAgaHR0cCByZXF1ZXN0IGZvciBwcm9ncmVzcyBldmVudFxuICpcbiAqIEBjbGFzcyBIdHRwV3JpdGFibGVTdHJlYW1cbiAqIEBleHRlbmRzIHtTdHJlYW0uV3JpdGFibGV9XG4gKi9cbmNsYXNzIEh0dHBXcml0YWJsZVN0cmVhbSBleHRlbmRzIFN0cmVhbS5Xcml0YWJsZSB7XG4gIHByaXZhdGUgcmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXEsIG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuXG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxO1xuICAgIHJlcS5vbmNlKCdkcmFpbicsICgpID0+IHRoaXMuZW1pdCgnZHJhaW4nKSk7XG4gIH1cblxuICBfd3JpdGUoY2h1bms6IGFueSwgZW5jb2Rpbmc/OiBzdHJpbmcsIGNiPzogKGVycm9yOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlcXVlc3Qud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICBlbmQoY2h1bmspIHtcbiAgICBpZiAoY2h1bmspIHtcbiAgICAgIHRoaXMucmVxdWVzdC53cml0ZShjaHVuayk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0LmVuZCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qKlxuICogTm9kZSBodHRwIHJlcXVlc3QgY2xhc3NcbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgSHR0cEFkYXB0ZXJcbiAqIEBpbXBsZW1lbnRzIHtBZGFwdGVySW50ZXJmYWNlfVxuICovXG5leHBvcnQgY2xhc3MgSHR0cEFkYXB0ZXIgaW1wbGVtZW50cyBBZGFwdGVySW50ZXJmYWNlIHtcbiAgcHJpdmF0ZSByZWRpcmVjdEhvb3BzID0gMDtcbiAgcHJpdmF0ZSByZWRpcmVjdFBhdGhzID0gW107XG5cbiAgLyoqXG4gICAqIGRvIHJlcXVlc3QgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0ZzUmVxdWVzdE9wdGlvbnN9IGNvbmZpZ1xuICAgKiBAcmV0dXJuc1xuICAgKiBAbWVtYmVyb2YgSHR0cEFkYXB0ZXJcbiAgICovXG4gIHJlcXVlc3QoY29uZmlnOiBGc1JlcXVlc3RPcHRpb25zKSB7XG4gICAgLy8gaWYgdGhpcyBvcHRpb24gaXMgdW5zcGVjaWZpZWQgc2V0IGl0IGJ5IGRlZmF1bHRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5maWxlc3RhY2tIZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnLmZpbGVzdGFja0hlYWRlcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbmZpZy5oZWFkZXJzID0gbm9ybWFsaXplSGVhZGVycyhjb25maWcuaGVhZGVycyk7XG5cbiAgICBsZXQgeyBkYXRhLCBoZWFkZXJzIH0gPSBwcmVwYXJlRGF0YShjb25maWcpO1xuXG4gICAgaGVhZGVycyA9IHNldEhlYWRlcihoZWFkZXJzLCAndXNlci1hZ2VudCcsIGBmaWxlc3RhY2stcmVxdWVzdC8ke2dldFZlcnNpb24oKX1gKTtcblxuICAgIC8vIGZvciBub3cgd2UgYXJlIG5vdCB1c2luZyBzdHJlYW1zXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGRlYnVnKCdSZXF1ZXN0IGRhdGEgJU8nLCBkYXRhKTtcblxuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgaWYgKCF1dGlscy5pc1N0cmluZyhkYXRhKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoJ0RhdGEgbXVzdCBiZSBhIHN0cmluZywgSlNPTiBvciBhIEJ1ZmZlcicsIGNvbmZpZykpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsICd1dGYtOCcpO1xuICAgICAgfVxuXG4gICAgICBoZWFkZXJzID0gc2V0SGVhZGVyKGhlYWRlcnMsICdjb250ZW50LWxlbmd0aCcsIGRhdGEubGVuZ3RoLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgbGV0IGF1dGg7XG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICBpZiAoIWNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8IGNvbmZpZy5hdXRoLnVzZXJuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBCYXNpYyBhdXRoOiB1c2VybmFtZSBpcyByZXF1aXJlZCAke2NvbmZpZy5hdXRofWAsIGNvbmZpZykpO1xuICAgICAgfVxuXG4gICAgICBhdXRoID0gYCR7Y29uZmlnLmF1dGgudXNlcm5hbWV9OiR7Y29uZmlnLmF1dGgucGFzc3dvcmR9YDtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1cmxcbiAgICBsZXQgcGFyc2VkID0gdXJsLnBhcnNlKGNvbmZpZy51cmwpO1xuXG4gICAgLy8gdHJ5IHRvIGFkZCBkZWZhdWx0IGh0dHBzIHByb3RvY29sXG4gICAgaWYgKCFwYXJzZWQucHJvdG9jb2wpIHtcbiAgICAgIHBhcnNlZCA9IHVybC5wYXJzZShgaHR0cHM6Ly8ke2NvbmZpZy51cmx9YCk7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGp1c3QgYmUgc3VyZSB0aGF0IHRoZSBob3N0IGlzIHBhcnNlZCBjb3JyZWN0bHksIG5vdCBuZWVkZWQgdG8gdGVzdCAqL1xuICAgIGlmICghcGFyc2VkLmhvc3QpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYENhbm5vdCBwYXJzZSBwcm92aWRlZCB1cmwgJHtjb25maWcudXJsfWAsIGNvbmZpZykpO1xuICAgIH1cblxuICAgIC8vIG5vcm1hbGl6ZSBhdXRoIGhlYWRlclxuICAgIGlmIChhdXRoICYmIGhlYWRlcnMuQXV0aG9yaXphdGlvbikge1xuICAgICAgZGVsZXRlIGhlYWRlcnMuQXV0aG9yaXphdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0h0dHBzUmVxdWVzdCA9IEhUVFBTX1JFR0VYUC50ZXN0KHBhcnNlZC5wcm90b2NvbCk7XG4gICAgY29uc3QgYWdlbnQgPSBpc0h0dHBzUmVxdWVzdCA/IHJlcXVpcmUoJ2h0dHBzJykgOiByZXF1aXJlKCdodHRwJyk7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcGF0aDogY29tYmluZVVSTChwYXJzZWQucGF0aCwgY29uZmlnLnBhcmFtcyksXG4gICAgICBob3N0OiBwYXJzZWQuaG9zdCxcbiAgICAgIHBvcnQ6IHBhcnNlZC5wb3J0LFxuICAgICAgcHJvdG9jb2w6IHBhcnNlZC5wcm90b2NvbCxcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGFnZW50OiBuZXcgYWdlbnQuQWdlbnQoKSxcbiAgICAgIGF1dGg6IGF1dGgsXG4gICAgfTtcblxuICAgIGRlYnVnKCdTdGFydGluZyAlcyByZXF1ZXN0IHdpdGggb3B0aW9ucyAlTycsIGlzSHR0cHNSZXF1ZXN0ID8gJ2h0dHBzJyA6ICdodHRwJywgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8RnNSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCk6IGFueSA9PiB7XG4gICAgICBsZXQgcmVxO1xuICAgICAgbGV0IGNhbmNlbExpc3RlbmVyO1xuXG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNhbmNlbExpc3RlbmVyID0gY29uZmlnLmNhbmNlbFRva2VuLm9uKCdjYW5jZWwnLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgLy8gY2xlYW51cCBoYW5kbGVyXG4gICAgICAgICAgY2FuY2VsTGlzdGVuZXIgPSBudWxsO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyBpZiBwcm9taXNlIGlzIHJlc29sdmVkIGJ5IHN5c3RlbVxuICAgICAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLm1lc3NhZ2UgPT09IENBTkNFTF9DTEVBUikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBpZiByZXF1ZXN0IGlzIGRvbmUgY2FuY2VsIHRva2VuIHNob3VsZCBub3QgdGhyb3cgYW55IGVycm9yICovXG4gICAgICAgICAgaWYgKHJlcSkge1xuICAgICAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgICAgICByZXEgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlYnVnKCdSZXF1ZXN0IGNhbmNlbGVkIGJ5IHVzZXIgJXMsIGNvbmZpZzogJU8nLCByZWFzb24sIGNvbmZpZyk7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlcXVlc3QgYWJvcnRlZC4gUmVhc29uOiAke3JlYXNvbn1gLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5BQk9SVEVEKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXEgPSBhZ2VudC5yZXF1ZXN0KG9wdGlvbnMsIHJlcyA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBqdXN0IGJlIHN1cmUgdGhhdCByZXNwb25zZSB3aWxsIG5vdCBiZSBjYWxsZWQgYWZ0ZXIgcmVxdWVzdCBpcyBhYm9ydGVkICovXG4gICAgICAgIGlmICghcmVxIHx8IHJlcS5hYm9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGNvbmZpZykpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0cmVhbSA9IHJlcztcbiAgICAgICAgZGVidWcoJ1Jlc3BvbnNlIHN0YXR1c0NvZGU6ICVkLCBSZXNwb25zZSBIZWFkZXJzOiAlTycsIHJlcy5zdGF0dXNDb2RlLCByZXMuaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgY29tcHJlc3NIZWFkZXJzID0gcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcblxuICAgICAgICBpZiAoY29tcHJlc3NIZWFkZXJzICYmIGNvbXByZXNzSGVhZGVycy5sZW5ndGggJiYgWydnemlwJywgJ2NvbXByZXNzJywgJ2RlZmxhdGUnXS5zb21lKCh2KSA9PiBjb21wcmVzc0hlYWRlcnMuaW5kZXhPZih2KSA+IC0xKSkge1xuICAgICAgICAgIC8vIGFkZCB0aGUgdW56aXBwZXIgdG8gdGhlIGJvZHkgc3RyZWFtIHByb2Nlc3NpbmcgcGlwZWxpbmVcbiAgICAgICAgICBzdHJlYW0gPSByZXMuc3RhdHVzQ29kZSA9PT0gMjA0ID8gc3RyZWFtIDogc3RyZWFtLnBpcGUoemxpYi5jcmVhdGVVbnppcCgpKTtcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2U6IEZzUmVzcG9uc2UgPSB7XG4gICAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZGF0YToge30sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBmb2xsb3cgcmVkaXJlY3Qgc28gbWFrZSBzYW1lIHJlcXVlc3Qgd2l0aCBuZXcgbG9jYXRpb25cbiAgICAgICAgaWYgKFszMDEsIDMwMl0uaW5kZXhPZihyZXMuc3RhdHVzQ29kZSkgPiAtMSkge1xuICAgICAgICAgIGRlYnVnKCdSZWRpcmVjdCByZWNlaXZlZCAlcycsIHJlcy5zdGF0dXNDb2RlKTtcblxuICAgICAgICAgIGlmICh0aGlzLnJlZGlyZWN0SG9vcHMgPj0gTUFYX1JFRElSRUNUUykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYE1heCByZWRpcmVjdHMgKCR7dGhpcy5yZWRpcmVjdEhvb3BzfSkgcmVhY2hlZC4gRXhpdGluZ2AsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRURJUkVDVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHVybCA9IHJlcy5oZWFkZXJzWydsb2NhdGlvbiddO1xuXG4gICAgICAgICAgaWYgKCF1cmwgfHwgdXJsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlZGlyZWN0IGhlYWRlciBsb2NhdGlvbiBub3QgZm91bmRgLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVESVJFQ1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5yZWRpcmVjdFBhdGhzLmluZGV4T2YodXJsKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVkaXJlY3QgbG9vcCBkZXRlY3RlZCBhdCB1cmwgJHt1cmx9YCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFRElSRUNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZWRpcmVjdFBhdGhzLnB1c2godXJsKTtcbiAgICAgICAgICB0aGlzLnJlZGlyZWN0SG9vcHMrKztcblxuICAgICAgICAgIC8vIGZyZWUgcmVzb3VyY2VzXG4gICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlcSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGRlYnVnKCdSZWRpcmVjdGluZyByZXF1ZXN0IHRvICVzIChob29wLWNvdW50OiAlZCknLCB1cmwsIHRoaXMucmVkaXJlY3RIb29wcyk7XG5cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLnJlcXVlc3QoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnLCB7IHVybCB9KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIHN0cmVhbS5vbignZGF0YScsIGNodW5rID0+IHJlc3BvbnNlQnVmZmVyLnB1c2goY2h1bmspKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogaXRzIGhhcmQgdG8gdGVzdCBzb2NrZXQgZXZlbnRzIHdpdGggamVzdCBhbmQgbm9jayAtIHRlc3RlZCBtYW51YWxseSAqL1xuICAgICAgICBzdHJlYW0ub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVxID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVycm9yOiBBYm9ydGVkICVPJywgZXJyKTtcblxuICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNsZWFyIGNhbmNlbCB0b2tlbiB0byBhdm9pZCBtZW1vcnkgbGVha1xuICAgICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihlcnIubWVzc2FnZSwgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuTkVUV09SSykpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBjbGVhciBjYW5jZWwgdG9rZW4gdG8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgICAgICAgICBpZiAoY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IHJlc3BvbnNlIGRhdGEgaW5zaWRlXG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDQpIHtcbiAgICAgICAgICAgIC8vIHByZXBhcmUgcmVzcG9uc2VcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQnVmZmVyKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgcGFyc2VSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGZyZWUgcmVzb3VyY2VzXG4gICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlcSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKDUwMCA8PSByZXNwb25zZS5zdGF0dXMgJiYgcmVzcG9uc2Uuc3RhdHVzIDw9IDU5OSkge1xuICAgICAgICAgICAgLy8gc2VydmVyIGVycm9yIHRocm93XG4gICAgICAgICAgICBkZWJ1ZygnU2VydmVyIGVycm9yKDV4eCkgLSAlTycsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBTZXJ2ZXIgZXJyb3IgJHt1cmx9YCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlNFUlZFUikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoNDAwIDw9IHJlc3BvbnNlLnN0YXR1cyAmJiByZXNwb25zZS5zdGF0dXMgPD0gNDk5KSB7XG4gICAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlcnJvcig0eHgpIC0gJU8nLCByZXNwb25zZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVxdWVzdCBlcnJvciAke3VybH1gLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVRVUVTVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVuZHM6ICVPJywgcmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAgIHJlcS5zZXRUaW1lb3V0KGNvbmZpZy50aW1lb3V0LCAoKSA9PiB7XG4gICAgICAgICAgcmVxLmFib3J0KCk7XG5cbiAgICAgICAgICBpZiAoY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoJ1JlcXVlc3QgdGltZW91dCcsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLlRJTUVPVVQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlcS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICBpZiAoY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXEgfHwgcmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlcnJvcjogJXMgLSAlTycsIGVyciwgZXJyLmNvZGUpO1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVxdWVzdCBlcnJvcjogJHtlcnIuY29kZX1gLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5ORVRXT1JLKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSAmJiBbJ1BPU1QnLCAnUFVUJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlclRvQ2h1bmtzKGRhdGEpLnBpcGUodGhpcy5nZXRQcm9ncmVzc01vbml0b3IoY29uZmlnLCBkYXRhLmxlbmd0aCkpLnBpcGUobmV3IEh0dHBXcml0YWJsZVN0cmVhbShyZXEpKTtcbiAgICAgIH1cblxuICAgICAgcmVxLmVuZChkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb25pdG9yIGFuZCBlbWl0IHByb2dyZXNzIGV2ZW50IGlmIG5lZWRlZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWVtYmVyb2YgSHR0cEFkYXB0ZXJcbiAgICovXG4gIHByaXZhdGUgZ2V0UHJvZ3Jlc3NNb25pdG9yID0gKGNvbmZpZywgdG90YWwpID0+IHtcbiAgICBsZXQgbG9hZGVkID0gMDtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gbmV3IFN0cmVhbS5UcmFuc2Zvcm0oKTtcbiAgICBwcm9ncmVzcy5fdHJhbnNmb3JtID0gKGNodW5rLCBlbmNvZGluZywgY2IpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9uUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgW0ZzSHR0cE1ldGhvZC5QT1NULCBGc0h0dHBNZXRob2QuUFVUXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpID4gLTEpIHtcbiAgICAgICAgbG9hZGVkICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgY29uZmlnLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRydWUsXG4gICAgICAgICAgbG9hZGVkLFxuICAgICAgICAgIHRvdGFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNiKG51bGwsIGNodW5rKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb2dyZXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYnVmZmVyIHRvIHN0cmVhbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IGJ1ZmZlclxuICAgKiBAcmV0dXJucyB7U3RyZWFtLlJlYWRhYmxlfVxuICAgKiBAbWVtYmVyb2YgSHR0cEFkYXB0ZXJcbiAgICovXG4gIHByaXZhdGUgYnVmZmVyVG9DaHVua3MoYnVmZmVyKTogU3RyZWFtLlJlYWRhYmxlIHtcbiAgICBjb25zdCBjaHVua2luZyA9IG5ldyBTdHJlYW0uUmVhZGFibGUoKTtcbiAgICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY29uc3QgcmVtYWluZGVyID0gdG90YWxMZW5ndGggJSBIVFRQX0NIVU5LX1NJWkU7XG4gICAgY29uc3QgY3V0b2ZmID0gdG90YWxMZW5ndGggLSByZW1haW5kZXI7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1dG9mZjsgaSArPSBIVFRQX0NIVU5LX1NJWkUpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gYnVmZmVyLnNsaWNlKGksIGkgKyBIVFRQX0NIVU5LX1NJWkUpO1xuICAgICAgY2h1bmtpbmcucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgaWYgKHJlbWFpbmRlciA+IDApIHtcbiAgICAgIGNvbnN0IHJlbWFpbmRlckJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgtcmVtYWluZGVyKTtcbiAgICAgIGNodW5raW5nLnB1c2gocmVtYWluZGVyQnVmZmVyKTtcbiAgICB9XG5cbiAgICBjaHVua2luZy5wdXNoKG51bGwpO1xuXG4gICAgcmV0dXJuIGNodW5raW5nO1xuICB9XG59XG4iXX0=
326
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQUMzQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEtBQUssS0FBSyxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFMUMsSUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQy9CLElBQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbEMsSUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztBQUNyQyxJQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUV2Qzs7Ozs7R0FLRztBQUNIO0lBQWlDLHNDQUFlO0lBRzlDLDRCQUFZLEdBQUcsRUFBRSxJQUFTO1FBQVQscUJBQUEsRUFBQSxTQUFTO1FBQTFCLFlBQ0Usa0JBQU0sSUFBSSxDQUFDLFNBSVo7UUFGQyxLQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFNLE9BQUEsS0FBSSxDQUFD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R0FBRyxlQUFlLENBQUMsQ0FBQztZQUNuRCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLElBQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQWxUQSxBQWtUQyxJQUFBIiwiZmlsZSI6ImxpYi9yZXF1ZXN0L2FkYXB0ZXJzL2h0dHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFja1xuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0ICogYXMgemxpYiBmcm9tICd6bGliJztcbmltcG9ydCBEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCB7IEFkYXB0ZXJJbnRlcmZhY2UgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0ICogYXMgU3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBGc1JlcXVlc3RPcHRpb25zLCBGc1Jlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgcHJlcGFyZURhdGEsIHBhcnNlUmVzcG9uc2UsIGNvbWJpbmVVUkwsIHNldCBhcyBzZXRIZWFkZXIsIG5vcm1hbGl6ZUhlYWRlcnMgfSBmcm9tICcuLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRnNSZXF1ZXN0RXJyb3JDb2RlLCBGc1JlcXVlc3RFcnJvciB9IGZyb20gJy4uL2Vycm9yJztcbmltcG9ydCB7IEZzSHR0cE1ldGhvZCB9IGZyb20gJy4vLi4vdHlwZXMnO1xuXG5jb25zdCBIVFRQU19SRUdFWFAgPSAvaHR0cHM6Py87XG5jb25zdCBIVFRQX0NIVU5LX1NJWkUgPSAxNiAqIDEwMjQ7XG5jb25zdCBNQVhfUkVESVJFQ1RTID0gMTA7XG5jb25zdCBDQU5DRUxfQ0xFQVIgPSBgRnNDbGVhbk1lbW9yeWA7XG5jb25zdCBkZWJ1ZyA9IERlYnVnKCdmczpyZXF1ZXN0Omh0dHAnKTtcblxuLyoqXG4gKiBXcml0YWJsZSBzdHJlYW0gdGhhdHMgb3ZlcndyYXAgaHR0cCByZXF1ZXN0IGZvciBwcm9ncmVzcyBldmVudFxuICpcbiAqIEBjbGFzcyBIdHRwV3JpdGFibGVTdHJlYW1cbiAqIEBleHRlbmRzIHtTdHJlYW0uV3JpdGFibGV9XG4gKi9cbmNsYXNzIEh0dHBXcml0YWJsZVN0cmVhbSBleHRlbmRzIFN0cmVhbS5Xcml0YWJsZSB7XG4gIHByaXZhdGUgcmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXEsIG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuXG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxO1xuICAgIHJlcS5vbmNlKCdkcmFpbicsICgpID0+IHRoaXMuZW1pdCgnZHJhaW4nKSk7XG4gIH1cblxuICBfd3JpdGUoY2h1bms6IGFueSwgZW5jb2Rpbmc/OiBzdHJpbmcsIGNiPzogKGVycm9yOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlcXVlc3Qud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICBlbmQoY2h1bms/OiBhbnksIGVuY29kaW5nPzogYW55LCBjYj86IGFueSk6IHRoaXMge1xuICAgIHN1cGVyLmVuZChjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9maW5hbChjYjogKGVycm9yPzogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5yZXF1ZXN0LmVuZCgpO1xuICAgIGNiKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb2RlIGh0dHAgcmVxdWVzdCBjbGFzc1xuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBIdHRwQWRhcHRlclxuICogQGltcGxlbWVudHMge0FkYXB0ZXJJbnRlcmZhY2V9XG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwQWRhcHRlciBpbXBsZW1lbnRzIEFkYXB0ZXJJbnRlcmZhY2Uge1xuICBwcml2YXRlIHJlZGlyZWN0SG9vcHMgPSAwO1xuICBwcml2YXRlIHJlZGlyZWN0UGF0aHMgPSBbXTtcblxuICAvKipcbiAgICogZG8gcmVxdWVzdCBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RnNSZXF1ZXN0T3B0aW9uc30gY29uZmlnXG4gICAqIEByZXR1cm5zXG4gICAqIEBtZW1iZXJvZiBIdHRwQWRhcHRlclxuICAgKi9cbiAgcmVxdWVzdChjb25maWc6IEZzUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAvLyBpZiB0aGlzIG9wdGlvbiBpcyB1bnNwZWNpZmllZCBzZXQgaXQgYnkgZGVmYXVsdFxuICAgIGlmICh0eXBlb2YgY29uZmlnLmZpbGVzdGFja0hlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWcuZmlsZXN0YWNrSGVhZGVycyA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBub3JtYWxpemVIZWFkZXJzKGNvbmZpZy5oZWFkZXJzKTtcblxuICAgIGxldCB7IGRhdGEsIGhlYWRlcnMgfSA9IHByZXBhcmVEYXRhKGNvbmZpZyk7XG5cbiAgICBoZWFkZXJzID0gc2V0SGVhZGVyKGhlYWRlcnMsICd1c2VyLWFnZW50JywgYGZpbGVzdGFjay1yZXF1ZXN0LyR7Z2V0VmVyc2lvbigpfWApO1xuXG4gICAgLy8gZm9yIG5vdyB3ZSBhcmUgbm90IHVzaW5nIHN0cmVhbXNcbiAgICBpZiAoZGF0YSkge1xuICAgICAgZGVidWcoJ1JlcXVlc3QgZGF0YSAlTycsIGRhdGEpO1xuXG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcignRGF0YSBtdXN0IGJlIGEgc3RyaW5nLCBKU09OIG9yIGEgQnVmZmVyJywgY29uZmlnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9XG5cbiAgICAgIGhlYWRlcnMgPSBzZXRIZWFkZXIoaGVhZGVycywgJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YS5sZW5ndGgsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBsZXQgYXV0aDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGlmICghY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgY29uZmlnLmF1dGgudXNlcm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYEJhc2ljIGF1dGg6IHVzZXJuYW1lIGlzIHJlcXVpcmVkICR7Y29uZmlnLmF1dGh9YCwgY29uZmlnKSk7XG4gICAgICB9XG5cbiAgICAgIGF1dGggPSBgJHtjb25maWcuYXV0aC51c2VybmFtZX06JHtjb25maWcuYXV0aC5wYXNzd29yZH1gO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHVybFxuICAgIGxldCBwYXJzZWQgPSB1cmwucGFyc2UoY29uZmlnLnVybCk7XG5cbiAgICAvLyB0cnkgdG8gYWRkIGRlZmF1bHQgaHR0cHMgcHJvdG9jb2xcbiAgICBpZiAoIXBhcnNlZC5wcm90b2NvbCkge1xuICAgICAgcGFyc2VkID0gdXJsLnBhcnNlKGBodHRwczovLyR7Y29uZmlnLnVybH1gKTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDoganVzdCBiZSBzdXJlIHRoYXQgdGhlIGhvc3QgaXMgcGFyc2VkIGNvcnJlY3RseSwgbm90IG5lZWRlZCB0byB0ZXN0ICovXG4gICAgaWYgKCFwYXJzZWQuaG9zdCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgQ2Fubm90IHBhcnNlIHByb3ZpZGVkIHVybCAke2NvbmZpZy51cmx9YCwgY29uZmlnKSk7XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXplIGF1dGggaGVhZGVyXG4gICAgaWYgKGF1dGggJiYgaGVhZGVycy5BdXRob3JpemF0aW9uKSB7XG4gICAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IGlzSHR0cHNSZXF1ZXN0ID0gSFRUUFNfUkVHRVhQLnRlc3QocGFyc2VkLnByb3RvY29sKTtcbiAgICBjb25zdCBhZ2VudCA9IGlzSHR0cHNSZXF1ZXN0ID8gcmVxdWlyZSgnaHR0cHMnKSA6IHJlcXVpcmUoJ2h0dHAnKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBwYXRoOiBjb21iaW5lVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zKSxcbiAgICAgIGhvc3Q6IHBhcnNlZC5ob3N0LFxuICAgICAgcG9ydDogcGFyc2VkLnBvcnQsXG4gICAgICBwcm90b2NvbDogcGFyc2VkLnByb3RvY29sLFxuICAgICAgbWV0aG9kOiBjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYWdlbnQ6IG5ldyBhZ2VudC5BZ2VudCgpLFxuICAgICAgYXV0aDogYXV0aCxcbiAgICB9O1xuXG4gICAgZGVidWcoJ1N0YXJ0aW5nICVzIHJlcXVlc3Qgd2l0aCBvcHRpb25zICVPJywgaXNIdHRwc1JlcXVlc3QgPyAnaHR0cHMnIDogJ2h0dHAnLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxGc1Jlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KTogYW55ID0+IHtcbiAgICAgIGxldCByZXE7XG4gICAgICBsZXQgY2FuY2VsTGlzdGVuZXI7XG5cbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY2FuY2VsTGlzdGVuZXIgPSBjb25maWcuY2FuY2VsVG9rZW4ub24oJ2NhbmNlbCcsIChyZWFzb24pID0+IHtcbiAgICAgICAgICAvLyBjbGVhbnVwIGhhbmRsZXJcbiAgICAgICAgICBjYW5jZWxMaXN0ZW5lciA9IG51bGw7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIHByb21pc2UgaXMgcmVzb2x2ZWQgYnkgc3lzdGVtXG4gICAgICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ubWVzc2FnZSA9PT0gQ0FOQ0VMX0NMRUFSKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGlmIHJlcXVlc3QgaXMgZG9uZSBjYW5jZWwgdG9rZW4gc2hvdWxkIG5vdCB0aHJvdyBhbnkgZXJyb3IgKi9cbiAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICByZXEuYWJvcnQoKTtcbiAgICAgICAgICAgIHJlcSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVidWcoJ1JlcXVlc3QgY2FuY2VsZWQgYnkgdXNlciAlcywgY29uZmlnOiAlTycsIHJlYXNvbiwgY29uZmlnKTtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVxdWVzdCBhYm9ydGVkLiBSZWFzb246ICR7cmVhc29ufWAsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLkFCT1JURUQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlcSA9IGFnZW50LnJlcXVlc3Qob3B0aW9ucywgcmVzID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGp1c3QgYmUgc3VyZSB0aGF0IHJlc3BvbnNlIHdpbGwgbm90IGJlIGNhbGxlZCBhZnRlciByZXF1ZXN0IGlzIGFib3J0ZWQgKi9cbiAgICAgICAgaWYgKCFyZXEgfHwgcmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RyZWFtID0gcmVzO1xuICAgICAgICBkZWJ1ZygnUmVzcG9uc2Ugc3RhdHVzQ29kZTogJWQsIFJlc3BvbnNlIEhlYWRlcnM6ICVPJywgcmVzLnN0YXR1c0NvZGUsIHJlcy5oZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBjb21wcmVzc0hlYWRlcnMgPSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuXG4gICAgICAgIGlmIChjb21wcmVzc0hlYWRlcnMgJiYgY29tcHJlc3NIZWFkZXJzLmxlbmd0aCAmJiBbJ2d6aXAnLCAnY29tcHJlc3MnLCAnZGVmbGF0ZSddLnNvbWUoKHYpID0+IGNvbXByZXNzSGVhZGVycy5pbmRleE9mKHYpID4gLTEpKSB7XG4gICAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbSA9IHJlcy5zdGF0dXNDb2RlID09PSAyMDQgPyBzdHJlYW0gOiBzdHJlYW0ucGlwZSh6bGliLmNyZWF0ZVVuemlwKCkpO1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY29udGVudC1lbmNvZGluZyBpbiBvcmRlciB0byBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZTogRnNSZXNwb25zZSA9IHtcbiAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGZvbGxvdyByZWRpcmVjdCBzbyBtYWtlIHNhbWUgcmVxdWVzdCB3aXRoIG5ldyBsb2NhdGlvblxuICAgICAgICBpZiAoWzMwMSwgMzAyXS5pbmRleE9mKHJlcy5zdGF0dXNDb2RlKSA+IC0xKSB7XG4gICAgICAgICAgZGVidWcoJ1JlZGlyZWN0IHJlY2VpdmVkICVzJywgcmVzLnN0YXR1c0NvZGUpO1xuXG4gICAgICAgICAgaWYgKHRoaXMucmVkaXJlY3RIb29wcyA+PSBNQVhfUkVESVJFQ1RTKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgTWF4IHJlZGlyZWN0cyAoJHt0aGlzLnJlZGlyZWN0SG9vcHN9KSByZWFjaGVkLiBFeGl0aW5nYCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFRElSRUNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdXJsID0gcmVzLmhlYWRlcnNbJ2xvY2F0aW9uJ107XG5cbiAgICAgICAgICBpZiAoIXVybCB8fCB1cmwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVkaXJlY3QgaGVhZGVyIGxvY2F0aW9uIG5vdCBmb3VuZGAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRURJUkVDVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnJlZGlyZWN0UGF0aHMuaW5kZXhPZih1cmwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZWRpcmVjdCBsb29wIGRldGVjdGVkIGF0IHVybCAke3VybH1gLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVESVJFQ1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnJlZGlyZWN0UGF0aHMucHVzaCh1cmwpO1xuICAgICAgICAgIHRoaXMucmVkaXJlY3RIb29wcysrO1xuXG4gICAgICAgICAgLy8gZnJlZSByZXNvdXJjZXNcbiAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVxID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgZGVidWcoJ1JlZGlyZWN0aW5nIHJlcXVlc3QgdG8gJXMgKGhvb3AtY291bnQ6ICVkKScsIHVybCwgdGhpcy5yZWRpcmVjdEhvb3BzKTtcblxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMucmVxdWVzdChPYmplY3QuYXNzaWduKHt9LCBjb25maWcsIHsgdXJsIH0pKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VCdWZmZXIgPSBbXTtcbiAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgY2h1bmsgPT4gcmVzcG9uc2VCdWZmZXIucHVzaChjaHVuaykpO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBpdHMgaGFyZCB0byB0ZXN0IHNvY2tldCBldmVudHMgd2l0aCBqZXN0IGFuZCBub2NrIC0gdGVzdGVkIG1hbnVhbGx5ICovXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXEgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVidWcoJ1JlcXVlc3QgZXJyb3I6IEFib3J0ZWQgJU8nLCBlcnIpO1xuXG4gICAgICAgICAgaWYgKHJlcS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2xlYXIgY2FuY2VsIHRva2VuIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGVyci5tZXNzYWdlLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5ORVRXT1JLKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZW5kJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIGNsZWFyIGNhbmNlbCB0b2tlbiB0byBhdm9pZCBtZW1vcnkgbGVha1xuICAgICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVzcG9uc2UgZGF0YSBpbnNpZGVcbiAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwNCkge1xuICAgICAgICAgICAgLy8gcHJlcGFyZSByZXNwb25zZVxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZnJlZSByZXNvdXJjZXNcbiAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVxID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoNTAwIDw9IHJlc3BvbnNlLnN0YXR1cyAmJiByZXNwb25zZS5zdGF0dXMgPD0gNTk5KSB7XG4gICAgICAgICAgICAvLyBzZXJ2ZXIgZXJyb3IgdGhyb3dcbiAgICAgICAgICAgIGRlYnVnKCdTZXJ2ZXIgZXJyb3IoNXh4KSAtICVPJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFNlcnZlciBlcnJvciAke3VybH1gLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuU0VSVkVSKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICg0MDAgPD0gcmVzcG9uc2Uuc3RhdHVzICYmIHJlc3BvbnNlLnN0YXR1cyA8PSA0OTkpIHtcbiAgICAgICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVycm9yKDR4eCkgLSAlTycsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGVycm9yICR7dXJsfWAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRVFVRVNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVidWcoJ1JlcXVlc3QgZW5kczogJU8nLCByZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXQpIHtcbiAgICAgICAgcmVxLnNldFRpbWVvdXQoY29uZmlnLnRpbWVvdXQsICgpID0+IHtcbiAgICAgICAgICByZXEuYWJvcnQoKTtcblxuICAgICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcignUmVxdWVzdCB0aW1lb3V0JywgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuVElNRU9VVCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVxLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlcSB8fCByZXEuYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVycm9yOiAlcyAtICVPJywgZXJyLCBlcnIuY29kZSk7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGVycm9yOiAke2Vyci5jb2RlfWAsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLk5FVFdPUkspKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpICYmIFsnUE9TVCcsICdQVVQnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyVG9DaHVua3MoZGF0YSkucGlwZSh0aGlzLmdldFByb2dyZXNzTW9uaXRvcihjb25maWcsIGRhdGEubGVuZ3RoKSkucGlwZShuZXcgSHR0cFdyaXRhYmxlU3RyZWFtKHJlcSkpO1xuICAgICAgfVxuXG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vbml0b3IgYW5kIGVtaXQgcHJvZ3Jlc3MgZXZlbnQgaWYgbmVlZGVkXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJvZiBIdHRwQWRhcHRlclxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQcm9ncmVzc01vbml0b3IgPSAoY29uZmlnLCB0b3RhbCkgPT4ge1xuICAgIGxldCBsb2FkZWQgPSAwO1xuXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBuZXcgU3RyZWFtLlRyYW5zZm9ybSgpO1xuICAgIHByb2dyZXNzLl90cmFuc2Zvcm0gPSAoY2h1bmssIGVuY29kaW5nLCBjYikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcub25Qcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiBbRnNIdHRwTWV0aG9kLlBPU1QsIEZzSHR0cE1ldGhvZC5QVVRdLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgPiAtMSkge1xuICAgICAgICBsb2FkZWQgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICBjb25maWcub25Qcm9ncmVzcyh7XG4gICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgdG90YWwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY2IobnVsbCwgY2h1bmspO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBidWZmZXIgdG8gc3RyZWFtXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gYnVmZmVyXG4gICAqIEByZXR1cm5zIHtTdHJlYW0uUmVhZGFibGV9XG4gICAqIEBtZW1iZXJvZiBIdHRwQWRhcHRlclxuICAgKi9cbiAgcHJpdmF0ZSBidWZmZXJUb0NodW5rcyhidWZmZXIpOiBTdHJlYW0uUmVhZGFibGUge1xuICAgIGNvbnN0IGNodW5raW5nID0gbmV3IFN0cmVhbS5SZWFkYWJsZSgpO1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICBjb25zdCByZW1haW5kZXIgPSB0b3RhbExlbmd0aCAlIEhUVFBfQ0hVTktfU0laRTtcbiAgICBjb25zdCBjdXRvZmYgPSB0b3RhbExlbmd0aCAtIHJlbWFpbmRlcjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3V0b2ZmOyBpICs9IEhUVFBfQ0hVTktfU0laRSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBidWZmZXIuc2xpY2UoaSwgaSArIEhUVFBfQ0hVTktfU0laRSk7XG4gICAgICBjaHVua2luZy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBpZiAocmVtYWluZGVyID4gMCkge1xuICAgICAgY29uc3QgcmVtYWluZGVyQnVmZmVyID0gYnVmZmVyLnNsaWNlKC1yZW1haW5kZXIpO1xuICAgICAgY2h1bmtpbmcucHVzaChyZW1haW5kZXJCdWZmZXIpO1xuICAgIH1cblxuICAgIGNodW5raW5nLnB1c2gobnVsbCk7XG5cbiAgICByZXR1cm4gY2h1bmtpbmc7XG4gIH1cbn1cbiJdfQ==
@@ -43,7 +43,7 @@ export var b64 = function (data, safeUrl) {
43
43
  * Return currently used filestack-js sdk version
44
44
  */
45
45
  export var getVersion = function () {
46
- return 'JS-4.0.0';
46
+ return 'JS-4.0.2';
47
47
  };
48
48
  /**
49
49
  * Returns if browser is a mobile device (if node env always return false)
@@ -42,7 +42,7 @@ export var b64 = function (data, safeUrl) {
42
42
  * Return currently used filestack-js sdk version
43
43
  */
44
44
  export var getVersion = function () {
45
- return 'JS-4.0.0';
45
+ return 'JS-4.0.2';
46
46
  };
47
47
  /**
48
48
  * Returns if browser is a mobile device (if node env always return false)
@@ -18,7 +18,7 @@ import * as utils from './index';
18
18
  describe('utils:index', function () {
19
19
  describe('getVersion', function () {
20
20
  it('should return version string to replace', function () {
21
- expect(utils.getVersion()).toEqual("JS-4.0.0");
21
+ expect(utils.getVersion()).toEqual("JS-4.0.2");
22
22
  });
23
23
  });
24
24
  describe('isFacebook', function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "filestack-js",
3
- "version": "4.0.0",
3
+ "version": "4.0.2",
4
4
  "description": "Official JavaScript library for Filestack",
5
5
  "main": "build/main/index.js",
6
6
  "module": "build/module/index.js",
@@ -54,13 +54,14 @@ class HttpWritableStream extends Stream.Writable {
54
54
  this.request.write(chunk, encoding, cb);
55
55
  }
56
56
 
57
- end(chunk) {
58
- if (chunk) {
59
- this.request.write(chunk);
60
- }
57
+ end(chunk?: any, encoding?: any, cb?: any): this {
58
+ super.end(chunk, encoding, cb);
59
+ return this;
60
+ }
61
61
 
62
+ _final(cb: (error?: Error | null | undefined) => void): void {
62
63
  this.request.end();
63
- return this;
64
+ cb();
64
65
  }
65
66
  }
66
67