@cloudbase/oauth 2.8.2-beta.0 → 2.8.4-beta.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.
@@ -461,7 +461,7 @@ var OAuth2Client = exports.OAuth2Client = (function () {
461
461
  OAuth2Client.prototype.wxCloudCallFunction = function (url, options) {
462
462
  var _a;
463
463
  return __awaiter(this, void 0, void 0, function () {
464
- var result, responseError, userAgent, responseResult, error_3;
464
+ var result, responseError, userAgent, error_3, responseResult, error_4;
465
465
  return __generator(this, function (_b) {
466
466
  switch (_b.label) {
467
467
  case 0:
@@ -469,20 +469,28 @@ var OAuth2Client = exports.OAuth2Client = (function () {
469
469
  responseError = null;
470
470
  _b.label = 1;
471
471
  case 1:
472
- _b.trys.push([1, 4, , 5]);
473
- return [4, wx.getRendererUserAgent()];
472
+ _b.trys.push([1, 7, , 8]);
473
+ userAgent = '';
474
+ _b.label = 2;
474
475
  case 2:
475
- userAgent = _b.sent();
476
- return [4, this.wxCloud.callFunction({
477
- name: 'httpOverCallFunction',
478
- data: {
479
- url: url,
480
- method: options.method,
481
- headers: __assign({ origin: 'https://servicewechat.com', 'User-Agent': userAgent }, options.headers),
482
- body: options.body,
483
- },
484
- })];
476
+ _b.trys.push([2, 4, , 5]);
477
+ return [4, wx.getRendererUserAgent()];
485
478
  case 3:
479
+ userAgent = _b.sent();
480
+ return [3, 5];
481
+ case 4:
482
+ error_3 = _b.sent();
483
+ return [3, 5];
484
+ case 5: return [4, this.wxCloud.callFunction({
485
+ name: 'httpOverCallFunction',
486
+ data: {
487
+ url: url,
488
+ method: options.method,
489
+ headers: __assign({ origin: 'https://servicewechat.com', 'User-Agent': userAgent }, options.headers),
490
+ body: options.body,
491
+ },
492
+ })];
493
+ case 6:
486
494
  responseResult = (_b.sent()).result;
487
495
  if ((_a = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body) === null || _a === void 0 ? void 0 : _a.error_code) {
488
496
  responseError = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body;
@@ -491,16 +499,16 @@ var OAuth2Client = exports.OAuth2Client = (function () {
491
499
  else {
492
500
  result = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body;
493
501
  }
494
- return [3, 5];
495
- case 4:
496
- error_3 = _b.sent();
502
+ return [3, 8];
503
+ case 7:
504
+ error_4 = _b.sent();
497
505
  responseError = {
498
506
  error: consts_1.ErrorType.UNREACHABLE,
499
- error_description: error_3.message,
507
+ error_description: error_4.message,
500
508
  error_uri: (0, index_1.getPathName)(url),
501
509
  };
502
- return [3, 5];
503
- case 5:
510
+ return [3, 8];
511
+ case 8:
504
512
  if (responseError) {
505
513
  throw responseError;
506
514
  }
@@ -596,7 +604,7 @@ var OAuth2Client = exports.OAuth2Client = (function () {
596
604
  var _this = this;
597
605
  return __generator(this, function (_a) {
598
606
  return [2, this.singlePromise.run('_refreshToken', function () { return __awaiter(_this, void 0, void 0, function () {
599
- var newCredentials, error_4;
607
+ var newCredentials, error_5;
600
608
  return __generator(this, function (_a) {
601
609
  switch (_a.label) {
602
610
  case 0:
@@ -614,13 +622,13 @@ var OAuth2Client = exports.OAuth2Client = (function () {
614
622
  _a.sent();
615
623
  return [2, newCredentials];
616
624
  case 4:
617
- error_4 = _a.sent();
618
- if (!(error_4.error === consts_1.ErrorType.INVALID_GRANT)) return [3, 6];
625
+ error_5 = _a.sent();
626
+ if (!(error_5.error === consts_1.ErrorType.INVALID_GRANT)) return [3, 6];
619
627
  return [4, this.localCredentials.setCredentials(null)];
620
628
  case 5:
621
629
  _a.sent();
622
- return [2, this.unAuthenticatedError(error_4.error_description)];
623
- case 6: return [2, Promise.reject(error_4)];
630
+ return [2, this.unAuthenticatedError(error_5.error_description)];
631
+ case 6: return [2, Promise.reject(error_5)];
624
632
  case 7: return [2];
625
633
  }
626
634
  });
@@ -663,7 +671,7 @@ var OAuth2Client = exports.OAuth2Client = (function () {
663
671
  var _this = this;
664
672
  return __generator(this, function (_a) {
665
673
  return [2, this.singlePromise.run('_anonymous', function () { return __awaiter(_this, void 0, void 0, function () {
666
- var newCredentials, error_5;
674
+ var newCredentials, error_6;
667
675
  return __generator(this, function (_a) {
668
676
  switch (_a.label) {
669
677
  case 0:
@@ -685,13 +693,13 @@ var OAuth2Client = exports.OAuth2Client = (function () {
685
693
  _a.sent();
686
694
  return [2, newCredentials];
687
695
  case 4:
688
- error_5 = _a.sent();
689
- if (!(error_5.error === consts_1.ErrorType.INVALID_GRANT)) return [3, 6];
696
+ error_6 = _a.sent();
697
+ if (!(error_6.error === consts_1.ErrorType.INVALID_GRANT)) return [3, 6];
690
698
  return [4, this.localCredentials.setCredentials(null)];
691
699
  case 5:
692
700
  _a.sent();
693
- return [2, this.unAuthenticatedError(error_5.error_description)];
694
- case 6: return [2, Promise.reject(error_5)];
701
+ return [2, this.unAuthenticatedError(error_6.error_description)];
702
+ case 6: return [2, Promise.reject(error_6)];
695
703
  case 7: return [2];
696
704
  }
697
705
  });
@@ -766,4 +774,4 @@ var OAuth2Client = exports.OAuth2Client = (function () {
766
774
  OAuth2Client.retryInterval = 1000;
767
775
  return OAuth2Client;
768
776
  }());
769
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBb0M7QUFDcEMseUNBQW1EO0FBYW5ELHNDQUFzQztBQUN0Qyx3Q0FBNEM7QUFFNUMsbUVBQWdFO0FBQ2hFLDBDQUF3QztBQUN4Qyw0RUFBMEQ7QUFFMUQsSUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUE7QUFDMUMsSUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUE7QUFDeEMsSUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUE7QUFXaEMsSUFBTSxjQUFjLEdBQW9CLFVBQW1CLEdBQVcsRUFBRSxPQUF3Qjs7Ozs7O29CQUNqRyxNQUFNLEdBQWEsSUFBSSxDQUFBO29CQUN2QixhQUFhLEdBQXlCLElBQUksQ0FBQTs7OztvQkFHdEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO29CQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTt3QkFDdkIsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7cUJBQzNCO29CQUNELElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO3dCQUM1RCxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO3FCQUNwRDtvQkFDZ0MsV0FBTSxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFBOztvQkFBeEQsY0FBYyxHQUFhLFNBQTZCO29CQUN6QyxXQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBQTs7b0JBQTFDLFlBQVksR0FBRyxTQUEyQjtv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LENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxFQUFBOzt3QkFBekQsU0FBeUQsQ0FBQTs7O3dCQUUzRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTt3QkFDeEIsV0FBTyxRQUFRLEVBQUE7Ozs7S0FDaEI7SUFNTywyQ0FBb0IsR0FBNUIsVUFBZ0MsR0FBWTtRQUMxQyxJQUFNLE9BQU8sR0FBa0I7WUFDN0IsS0FBSyxFQUFFLGtCQUFTLENBQUMsZUFBZTtZQUNoQyxpQkFBaUIsRUFBRSxHQUFHO1NBQ3ZCLENBQUE7UUFDRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQXJaYyx5QkFBWSxHQUFHLENBQUMsQUFBSixDQUFJO0lBQ2hCLHFCQUFRLEdBQUcsQ0FBQyxBQUFKLENBQUk7SUFDWixxQkFBUSxHQUFHLENBQUMsQUFBSixDQUFJO0lBQ1osMEJBQWEsR0FBRyxJQUFJLEFBQVAsQ0FBTztJQW1ackMsbUJBQUM7Q0FBQSxBQXZaRCxJQXVaQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVycm9yVHlwZSB9IGZyb20gJy4vY29uc3RzJ1xuaW1wb3J0IHsgQXBpVXJscywgQXBpVXJsc1YyIH0gZnJvbSAnLi4vYXV0aC9jb25zdHMnXG5cbmltcG9ydCB7IEF1dGhDbGllbnQsIFNpbXBsZVN0b3JhZ2UgfSBmcm9tICcuL2ludGVyZmFjZSdcblxuaW1wb3J0IHtcbiAgQ3JlZGVudGlhbHMsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBSZXF1ZXN0RnVuY3Rpb24sXG4gIE9BdXRoMkNsaWVudE9wdGlvbnMsXG4gIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyxcbn0gZnJvbSAnLi9tb2RlbHMnXG5cbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gJy4uL3V0aWxzL3V1aWQnXG5pbXBvcnQgeyBnZXRQYXRoTmFtZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4J1xuXG5pbXBvcnQgeyBTaW5nbGVQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMvZnVuY3Rpb24vc2luZ2xlLXByb21pc2UnXG5pbXBvcnQgeyB3ZUJ0b2EgfSBmcm9tICcuLi91dGlscy9iYXNlNjQnXG5pbXBvcnQgeyBpc01hdGNoIH0gZnJvbSAnLi4vdXRpbHMvY2xvdWRiYXNlLWFkYXB0ZXItd3hfbXAnXG5cbmNvbnN0IFJlcXVlc3RJZEhlYWRlck5hbWUgPSAneC1yZXF1ZXN0LWlkJ1xuY29uc3QgRGV2aWNlSWRIZWFkZXJOYW1lID0gJ3gtZGV2aWNlLWlkJ1xuY29uc3QgRGV2aWNlSWRTZWN0aW9uTmFtZSA9ICdkZXZpY2VfaWQnXG5cbmRlY2xhcmUgY29uc3Qgd3g6IGFueVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvUmVzcG9uc2VFcnJvck9wdGlvbnMge1xuICBlcnJvcj86IEVycm9yVHlwZVxuICBlcnJvcl9kZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGxcbiAgZXJyb3JfdXJpPzogc3RyaW5nIHwgbnVsbFxuICBkZXRhaWxzPzogYW55IHwgbnVsbFxufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlcXVlc3Q6IFJlcXVlc3RGdW5jdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gIGxldCByZXN1bHQ6IFQgfCBudWxsID0gbnVsbFxuICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gIHRyeSB7XG4gICAgLy8gT2JqZWN0cyBtdXN0IGJlIGNvcGllZCB0byBwcmV2ZW50IG1vZGlmaWNhdGlvbiBvZiBkYXRhIHN1Y2ggYXMgYm9keS5cbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpXG4gICAgaWYgKCFjb3B5T3B0aW9ucy5tZXRob2QpIHtcbiAgICAgIGNvcHlPcHRpb25zLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIGlmIChjb3B5T3B0aW9ucy5ib2R5ICYmIHR5cGVvZiBjb3B5T3B0aW9ucy5ib2R5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY29weU9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGNvcHlPcHRpb25zLmJvZHkpXG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0OiBSZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgY29weU9wdGlvbnMpXG4gICAgY29uc3QganNvblJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2VSZXN1bHQuanNvbigpXG4gICAgaWYgKGpzb25SZXNwb25zZT8uZXJyb3IpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3IgPSBqc29uUmVzcG9uc2UgYXMgUmVzcG9uc2VFcnJvclxuICAgICAgcmVzcG9uc2VFcnJvci5lcnJvcl91cmkgPSBuZXcgVVJMKHVybCkucGF0aG5hbWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0ganNvblJlc3BvbnNlIGFzIFRcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5SRUFDSEFCTEUsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZSxcbiAgICAgIGVycm9yX3VyaTogbmV3IFVSTCh1cmwpLnBhdGhuYW1lLFxuICAgIH1cbiAgfVxuICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgIHRocm93IHJlc3BvbnNlRXJyb3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRvUmVzcG9uc2VFcnJvciA9IChlcnJvcjogUmVzcG9uc2VFcnJvciB8IEVycm9yLCBvcHRpb25zPzogVG9SZXNwb25zZUVycm9yT3B0aW9ucyk6IFJlc3BvbnNlRXJyb3IgPT4ge1xuICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvclxuICBjb25zdCBmb3JtYXRPcHRpb25zOiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogZm9ybWF0T3B0aW9ucy5lcnJvciB8fCBFcnJvclR5cGUuTE9DQUwsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZm9ybWF0T3B0aW9ucy5lcnJvcl9kZXNjcmlwdGlvbiB8fCBlcnJvci5tZXNzYWdlLFxuICAgICAgZXJyb3JfdXJpOiBmb3JtYXRPcHRpb25zLmVycm9yX3VyaSxcbiAgICAgIGRldGFpbHM6IGZvcm1hdE9wdGlvbnMuZGV0YWlscyB8fCBlcnJvci5zdGFjayxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZm9ybWF0RXJyb3I6IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMgPSBlcnJvciB8fCB7fVxuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogZm9ybWF0T3B0aW9ucy5lcnJvciB8fCBmb3JtYXRFcnJvci5lcnJvciB8fCBFcnJvclR5cGUuTE9DQUwsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZm9ybWF0T3B0aW9ucy5lcnJvcl9kZXNjcmlwdGlvbiB8fCBmb3JtYXRFcnJvci5lcnJvcl9kZXNjcmlwdGlvbixcbiAgICAgIGVycm9yX3VyaTogZm9ybWF0T3B0aW9ucy5lcnJvcl91cmkgfHwgZm9ybWF0RXJyb3IuZXJyb3JfdXJpLFxuICAgICAgZGV0YWlsczogZm9ybWF0T3B0aW9ucy5kZXRhaWxzIHx8IGZvcm1hdEVycm9yLmRldGFpbHMsXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNwb25zZUVycm9yXG59XG5cbi8qKlxuICogR2VuZXJhdGUgcmVxdWVzdCBpZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmVxdWVzdElkKCk6IHN0cmluZyB7XG4gIHJldHVybiB1dWlkdjQoKVxufVxuXG4vKipcbiAqIERlZmF1bHQgU3RvcmFnZS5cbiAqL1xuY2xhc3MgRGVmYXVsdFN0b3JhZ2UgaW1wbGVtZW50cyBTaW1wbGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIOe8k+WtmGtleee7n+S4gOS9v+eUqOWQjue8gOWMuuWIhlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZW52OiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihvcHRzPzogeyBlbnY6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5fZW52ID0gb3B0cz8uZW52IHx8ICcnXG4gIH1cbiAgLyoqXG4gICAqIEdldCBpdGVtLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBhc3luYyBnZXRJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICovXG4gIGFzeW5jIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWAsIHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpdGVtIHN5bmMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIGdldEl0ZW1TeW5jKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICByZW1vdmVJdGVtU3luYyhrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKi9cbiAgc2V0SXRlbVN5bmMoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWAsIHZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U3RvcmFnZSA9IG5ldyBEZWZhdWx0U3RvcmFnZSgpXG5cbmludGVyZmFjZSBMb2NhbENyZWRlbnRpYWxzT3B0aW9ucyB7XG4gIHRva2VuU2VjdGlvbk5hbWU6IHN0cmluZ1xuICBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY3JlZGVudGlhbHMgaXMgZXhwaXJlZC5cbiAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpOiBib29sZWFuIHtcbiAgbGV0IGlzRXhwaXJlZCA9IHRydWVcbiAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2F0ICYmIGNyZWRlbnRpYWxzPy5hY2Nlc3NfdG9rZW4pIHtcbiAgICBpc0V4cGlyZWQgPSBjcmVkZW50aWFscy5leHBpcmVzX2F0IDwgbmV3IERhdGUoKVxuICB9XG4gIHJldHVybiBpc0V4cGlyZWRcbn1cblxuLyoqXG4gKiBMb2NhbCBjcmVkZW50aWFscy5cbiAqIExvY2FsIGNyZWRlbnRpYWxzLCB3aXRoIG1lbW9yeSBjYWNoZSBhbmQgc3RvcmFnZSBjYWNoZS5cbiAqIElmIHRoZSBtZW1vcnkgY2FjaGUgZXhwaXJlcywgdGhlIHN0b3JhZ2UgY2FjaGUgaXMgYXV0b21hdGljYWxseSBsb2FkZWQuXG4gKi9cbmNsYXNzIExvY2FsQ3JlZGVudGlhbHMge1xuICBwcml2YXRlIHRva2VuU2VjdGlvbk5hbWU6IHN0cmluZ1xuXG4gIHByaXZhdGUgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuXG4gIHByaXZhdGUgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgbnVsbCA9IG51bGxcblxuICBwcml2YXRlIHNpbmdsZVByb21pc2U6IFNpbmdsZVByb21pc2UgPSBuZXcgU2luZ2xlUHJvbWlzZSgpXG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7TG9jYWxDcmVkZW50aWFsc09wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IExvY2FsQ3JlZGVudGlhbHNPcHRpb25zKSB7XG4gICAgdGhpcy50b2tlblNlY3Rpb25OYW1lID0gb3B0aW9ucy50b2tlblNlY3Rpb25OYW1lXG4gICAgdGhpcy5zdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlXG4gIH1cblxuICBwdWJsaWMgZ2V0U3RvcmFnZUNyZWRlbnRpYWxzU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBudWxsXG4gICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtU3luYyh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgaWYgKHRva2VuU3RyICE9PSB1bmRlZmluZWQgJiYgdG9rZW5TdHIgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2F0KSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgY3JlZGVudGlhbHMgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLyoqXG4gICAqIHNldENyZWRlbnRpYWxzIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfaW4pIHtcbiAgICAgIGlmICghY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAoY3JlZGVudGlhbHMuZXhwaXJlc19pbiAtIDMwKSAqIDEwMDApXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjcmVkZW50aWFscylcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lLCB0b2tlblN0cilcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsc1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjcmVkZW50aWFscy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ2dldENyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGlzQ3JlZGVudGlhbHNFeHBpcmVkKHRoaXMuY3JlZGVudGlhbHMpKSB7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldFN0b3JhZ2VDcmVkZW50aWFscygpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0b3JhZ2UgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFN0b3JhZ2VDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdfZ2V0U3RvcmFnZUNyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IG51bGxcbiAgICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNyZWRlbnRpYWxzID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQgPSBuZXcgRGF0ZShjcmVkZW50aWFscy5leHBpcmVzX2F0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBPQXV0aDJDbGllbnRcbiAqL1xuZXhwb3J0IGNsYXNzIE9BdXRoMkNsaWVudCBpbXBsZW1lbnRzIEF1dGhDbGllbnQge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmV0cnkgPSAyXG4gIHByaXZhdGUgc3RhdGljIG1pblJldHJ5ID0gMFxuICBwcml2YXRlIHN0YXRpYyBtYXhSZXRyeSA9IDVcbiAgcHJpdmF0ZSBzdGF0aWMgcmV0cnlJbnRlcnZhbCA9IDEwMDBcblxuICBwcml2YXRlIGFwaU9yaWdpbjogc3RyaW5nXG4gIHByaXZhdGUgY2xpZW50SWQ6IHN0cmluZ1xuICBwcml2YXRlIHJldHJ5OiBudW1iZXJcbiAgcHJpdmF0ZSBjbGllbnRTZWNyZXQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiYXNlUmVxdWVzdDogPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VD5cbiAgcHJpdmF0ZSBsb2NhbENyZWRlbnRpYWxzOiBMb2NhbENyZWRlbnRpYWxzXG4gIHByaXZhdGUgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBwcml2YXRlIGRldmljZUlEPzogc3RyaW5nXG4gIHByaXZhdGUgdG9rZW5JblVSTD86IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5GdW5jOiAocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzPlxuICBwcml2YXRlIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG5ldyBTaW5nbGVQcm9taXNlKClcbiAgcHJpdmF0ZSBhbm9ueW1vdXNTaWduSW5GdW5jOiAoQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHMgfCB2b2lkPlxuICBwcml2YXRlIHd4Q2xvdWQ6IGFueVxuICBwcml2YXRlIGJhc2ljQXV0aDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7T0F1dGgyQ2xpZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT0F1dGgyQ2xpZW50T3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5jbGllbnRTZWNyZXQpIHtcbiAgICAgIG9wdGlvbnMuY2xpZW50U2VjcmV0ID0gJydcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuY2xpZW50SWQgJiYgb3B0aW9ucy5lbnYpIHtcbiAgICAgIG9wdGlvbnMuY2xpZW50SWQgPSBvcHRpb25zLmVudlxuICAgIH1cblxuICAgIHRoaXMuYXBpT3JpZ2luID0gb3B0aW9ucy5hcGlPcmlnaW5cbiAgICB0aGlzLmNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZFxuICAgIHRoaXMucmV0cnkgPSB0aGlzLmZvcm1hdFJldHJ5KG9wdGlvbnMucmV0cnksIE9BdXRoMkNsaWVudC5kZWZhdWx0UmV0cnkpXG4gICAgaWYgKG9wdGlvbnMuYmFzZVJlcXVlc3QpIHtcbiAgICAgIHRoaXMuYmFzZVJlcXVlc3QgPSBvcHRpb25zLmJhc2VSZXF1ZXN0XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFzZVJlcXVlc3QgPSBkZWZhdWx0UmVxdWVzdFxuICAgIH1cbiAgICB0aGlzLnRva2VuSW5VUkwgPSBvcHRpb25zLnRva2VuSW5VUkxcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnNcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5zdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlIHx8IGRlZmF1bHRTdG9yYWdlXG4gICAgdGhpcy5sb2NhbENyZWRlbnRpYWxzID0gbmV3IExvY2FsQ3JlZGVudGlhbHMoe1xuICAgICAgdG9rZW5TZWN0aW9uTmFtZTogYGNyZWRlbnRpYWxzXyR7b3B0aW9ucy5jbGllbnRJZH1gLFxuICAgICAgc3RvcmFnZTogdGhpcy5zdG9yYWdlLFxuICAgIH0pXG5cbiAgICB0aGlzLmNsaWVudFNlY3JldCA9IG9wdGlvbnMuY2xpZW50U2VjcmV0XG4gICAgaWYgKG9wdGlvbnMuY2xpZW50SWQpIHtcbiAgICAgIHRoaXMuYmFzaWNBdXRoID0gYEJhc2ljICR7d2VCdG9hKGAke29wdGlvbnMuY2xpZW50SWR9OiR7dGhpcy5jbGllbnRTZWNyZXR9YCl9YFxuICAgIH1cbiAgICB0aGlzLnd4Q2xvdWQgPSBvcHRpb25zLnd4Q2xvdWRcbiAgICB0cnkge1xuICAgICAgaWYgKGlzTWF0Y2goKSAmJiB0aGlzLnd4Q2xvdWQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmVudikge1xuICAgICAgICB3eC5jbG91ZC5pbml0KHsgZW52OiBvcHRpb25zLmVudiB9KVxuICAgICAgICB0aGlzLnd4Q2xvdWQgPSB3eC5jbG91ZFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvL1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hUb2tlbkZ1bmMgPSBvcHRpb25zLnJlZnJlc2hUb2tlbkZ1bmMgfHwgdGhpcy5kZWZhdWx0UmVmcmVzaFRva2VuRnVuY1xuICAgIHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYyA9IG9wdGlvbnMuYW5vbnltb3VzU2lnbkluRnVuY1xuICB9XG5cbiAgLyoqXG4gICAqIHNldENyZWRlbnRpYWxzIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHVibGljIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIGdldEFjY2Vzc1Rva2VuIHJldHVybiBhIHZhbGlkYXRlIGFjY2VzcyB0b2tlblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKGNyZWRlbnRpYWxzPy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuKVxuICAgIH1cbiAgICBjb25zdCByZXNwRXJyOiBSZXNwb25zZUVycm9yID0geyBlcnJvcjogRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BFcnIpXG4gIH1cblxuICAvKipcbiAgICogcmVxdWVzdCBodHRwIGxpa2Ugc2ltcGxlIGZldGNoIGFwaSwgZXhwOnJlcXVlc3QoJy92MS91c2VyL21lJywge3dpdGhDcmVkZW50aWFsczp0cnVlfSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0F1dGhDbGllbnRSZXF1ZXN0T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cbiAgICBjb25zdCByZXRyeTogbnVtYmVyID0gdGhpcy5mb3JtYXRSZXRyeShvcHRpb25zLnJldHJ5LCB0aGlzLnJldHJ5KVxuICAgIG9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICAgIGlmICh0aGlzLmhlYWRlcnMpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgLi4udGhpcy5oZWFkZXJzLFxuICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnNbUmVxdWVzdElkSGVhZGVyTmFtZV0gPSBnZW5lcmF0ZVJlcXVlc3RJZCgpXG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzW0RldmljZUlkSGVhZGVyTmFtZV0pIHtcbiAgICAgIGNvbnN0IGRldmljZUlkID0gYXdhaXQgdGhpcy5nZXREZXZpY2VJZCgpXG4gICAgICBvcHRpb25zLmhlYWRlcnNbRGV2aWNlSWRIZWFkZXJOYW1lXSA9IGRldmljZUlkXG4gICAgfVxuICAgIGlmIChvcHRpb25zPy53aXRoQmFzaWNBdXRoICYmIHRoaXMuYmFzaWNBdXRoKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IHRoaXMuYmFzaWNBdXRoXG4gICAgfVxuICAgIGlmIChvcHRpb25zPy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5JblVSTCkge1xuICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xuICAgICAgICAgICAgdXJsICs9ICc/J1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cmwgKz0gYGFjY2Vzc190b2tlbj0ke2NyZWRlbnRpYWxzLmFjY2Vzc190b2tlbn1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHtjcmVkZW50aWFscy50b2tlbl90eXBlfSAke2NyZWRlbnRpYWxzLmFjY2Vzc190b2tlbn1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY2xpZW50SWQgJiYgdXJsLmluZGV4T2YoJ2NsaWVudF9pZCcpIDwgMCkge1xuICAgICAgICB1cmwgKz0gdXJsLmluZGV4T2YoJz8nKSA8IDAgPyAnPycgOiAnJidcbiAgICAgICAgdXJsICs9IGBjbGllbnRfaWQ9JHt0aGlzLmNsaWVudElkfWBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHVybCA9IHRoaXMuYXBpT3JpZ2luICsgdXJsXG4gICAgfVxuICAgIGxldCByZXNwb25zZTogVCB8IG51bGwgPSBudWxsXG4gICAgY29uc3QgbWF4UmVxdWVzdFRpbWVzOiBudW1iZXIgPSByZXRyeSArIDFcbiAgICBmb3IgKGxldCByZXF1ZXN0VGltZSA9IDA7IHJlcXVlc3RUaW1lIDwgbWF4UmVxdWVzdFRpbWVzOyByZXF1ZXN0VGltZSsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAob3B0aW9ucy51c2VXeENsb3VkKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnd4Q2xvdWRDYWxsRnVuY3Rpb248VD4odXJsLCBvcHRpb25zKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iYXNlUmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH0gY2F0Y2ggKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMud2l0aENyZWRlbnRpYWxzICYmIHJlc3BvbnNlRXJyb3IgJiYgcmVzcG9uc2VFcnJvci5lcnJvciA9PT0gRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2V0Q3JlZGVudGlhbHMobnVsbClcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2VFcnJvcilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXF1ZXN0VGltZSA9PT0gcmV0cnkgfHwgIXJlc3BvbnNlRXJyb3IgfHwgcmVzcG9uc2VFcnJvci5lcnJvciAhPT0gJ3VucmVhY2hhYmxlJykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZUVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnNsZWVwKE9BdXRoMkNsaWVudC5yZXRyeUludGVydmFsKVxuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB3eENsb3VkQ2FsbEZ1bmN0aW9uPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgcmVzdWx0OiBUIHwgbnVsbCA9IG51bGxcbiAgICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHd4LmdldFJlbmRlcmVyVXNlckFnZW50KClcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiByZXNwb25zZVJlc3VsdCB9ID0gYXdhaXQgdGhpcy53eENsb3VkLmNhbGxGdW5jdGlvbih7XG4gICAgICAgIG5hbWU6ICdodHRwT3ZlckNhbGxGdW5jdGlvbicsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBvcmlnaW46ICdodHRwczovL3NlcnZpY2V3ZWNoYXQuY29tJyxcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogdXNlckFnZW50LFxuICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogb3B0aW9ucy5ib2R5LFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlc3BvbnNlUmVzdWx0Py5ib2R5Py5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHJlc3BvbnNlRXJyb3IgPSByZXNwb25zZVJlc3VsdD8uYm9keSBhcyBSZXNwb25zZUVycm9yXG4gICAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gZ2V0UGF0aE5hbWUodXJsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2VSZXN1bHQ/LmJvZHkgYXMgVFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgZXJyb3JfdXJpOiBnZXRQYXRoTmFtZSh1cmwpLFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCcpXG4gICAgfVxuICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFscykpIHtcbiAgICAgIGlmIChjcmVkZW50aWFscyAmJiBjcmVkZW50aWFscy5zY29wZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYykge1xuICAgICAgICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbkZ1bmMoY3JlZGVudGlhbHMpXG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBjIHx8IChhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuYW5vbnltb3VzU2lnbkluKGNyZWRlbnRpYWxzKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCDlup/lvIPmjqXlj6PvvIzli7/nlKguIOWmgumcgOiOt+WPluWHreivgeS/oeaBr+ivt+S9v+eUqCBnZXRDcmVkZW50aWFscyDmlrnms5VcbiAgICovXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFsc1N5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0U3RvcmFnZUNyZWRlbnRpYWxzU3luYygpXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHNBc3luYygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCcpXG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFscy5zY29wZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEdyb3VwcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcignY3JlZGVudGlhbHMgbm90IGZvdW5kJylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzLmdyb3Vwc1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggZXhwaXJlZCB0b2tlbi5cbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX3JlZnJlc2hUb2tlbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgIWNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ25vIHJlZnJlc2ggdG9rZW4gZm91bmQgaW4gY3JlZGVudGlhbHMnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5GdW5jKGNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4sIGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG4gICAgICAgIHJldHVybiBuZXdDcmVkZW50aWFsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmVycm9yID09PSBFcnJvclR5cGUuSU5WQUxJRF9HUkFOVCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHJldHJ5IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmV0cnlcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1JldHJ5KHJldHJ5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgICBpZiAodHlwZW9mIHJldHJ5ICE9PSAnbnVtYmVyJyB8fCByZXRyeSA8IE9BdXRoMkNsaWVudC5taW5SZXRyeSB8fCByZXRyeSA+IE9BdXRoMkNsaWVudC5tYXhSZXRyeSkge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246ICd3cm9uZyBvcHRpb25zIHBhcmFtOiByZXRyeScsXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gICAgfVxuICAgIHJldHVybiByZXRyeVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCByZXRyeSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsZVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFJldHJ5KHJldHJ5OiBudW1iZXIsIGRlZmF1bHRWYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgcmV0cnkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbGVcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tSZXRyeShyZXRyeSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTbGVlcC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0sIG1zKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogYW5vbnltb3VzIHNpZ25JblxuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYW5vbnltb3VzU2lnbkluKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX2Fub255bW91cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgY3JlZGVudGlhbHMuc2NvcGUgIT09ICdhbm9ueW1vdXMnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdubyBhbm9ueW1vdXMgaW4gY3JlZGVudGlhbHMnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9TSUdOX0lOX0FOT05ZTU9VU0xZX1VSTCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIHdpdGhCYXNpY0F1dGg6IHRydWUsXG4gICAgICAgICAgYm9keToge30sXG4gICAgICAgIH0pXG4gICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhuZXdDcmVkZW50aWFscylcbiAgICAgICAgcmV0dXJuIG5ld0NyZWRlbnRpYWxzXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5JTlZBTElEX0dSQU5UKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoZXJyb3IuZXJyb3JfZGVzY3JpcHRpb24pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCByZWZyZXNoIHRva2VuIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZWZhdWx0UmVmcmVzaFRva2VuRnVuYyhyZWZyZXNoVG9rZW4/OiBzdHJpbmcsIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgaWYgKHJlZnJlc2hUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHJlZnJlc2hUb2tlbiA9PT0gJycpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdyZWZyZXNoIHRva2VuIG5vdCBmb3VuZCcpXG4gICAgfVxuXG4gICAgbGV0IHVybDogc3RyaW5nID0gQXBpVXJscy5BVVRIX1RPS0VOX1VSTFxuXG4gICAgaWYgKGNyZWRlbnRpYWxzPy52ZXJzaW9uID09PSAndjInKSB7XG4gICAgICB1cmwgPSBBcGlVcmxzVjIuQVVUSF9UT0tFTl9VUkxcbiAgICB9XG5cbiAgICBjb25zdCBuZXdDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudFNlY3JldCxcbiAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4geyAuLi5uZXdDcmVkZW50aWFscywgdmVyc2lvbjogY3JlZGVudGlhbHM/LnZlcnNpb24gfHwgJ3YxJyB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRldmljZUlkXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERldmljZUlkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuZGV2aWNlSUQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRldmljZUlEXG4gICAgfVxuICAgIGxldCBkZXZpY2VJZDogc3RyaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldEl0ZW0oRGV2aWNlSWRTZWN0aW9uTmFtZSlcbiAgICBpZiAoISh0eXBlb2YgZGV2aWNlSWQgPT09ICdzdHJpbmcnICYmIGRldmljZUlkLmxlbmd0aCA+PSAxNiAmJiBkZXZpY2VJZC5sZW5ndGggPD0gNDgpKSB7XG4gICAgICBkZXZpY2VJZCA9IHV1aWR2NCgpXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShEZXZpY2VJZFNlY3Rpb25OYW1lLCBkZXZpY2VJZClcbiAgICB9XG4gICAgdGhpcy5kZXZpY2VJRCA9IGRldmljZUlkXG4gICAgcmV0dXJuIGRldmljZUlkXG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuQXV0aGVudGljYXRlZCBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVyclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFQ+fVxuICAgKi9cbiAgcHJpdmF0ZSB1bkF1dGhlbnRpY2F0ZWRFcnJvcjxUPihlcnI/OiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwRXJyOiBSZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyLFxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcEVycilcbiAgfVxufVxuIl19
777
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBb0M7QUFDcEMseUNBQW1EO0FBYW5ELHNDQUFzQztBQUN0Qyx3Q0FBNEM7QUFFNUMsbUVBQWdFO0FBQ2hFLDBDQUF3QztBQUN4Qyw0RUFBMEQ7QUFFMUQsSUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUE7QUFDMUMsSUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUE7QUFDeEMsSUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUE7QUFXaEMsSUFBTSxjQUFjLEdBQW9CLFVBQW1CLEdBQVcsRUFBRSxPQUF3Qjs7Ozs7O29CQUNqRyxNQUFNLEdBQWEsSUFBSSxDQUFBO29CQUN2QixhQUFhLEdBQXlCLElBQUksQ0FBQTs7OztvQkFHdEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO29CQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTt3QkFDdkIsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7cUJBQzNCO29CQUNELElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO3dCQUM1RCxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO3FCQUNwRDtvQkFDZ0MsV0FBTSxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFBOztvQkFBeEQsY0FBYyxHQUFhLFNBQTZCO29CQUN6QyxXQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBQTs7b0JBQTFDLFlBQVksR0FBRyxTQUEyQjtv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TSxHQUFFLENBQUE7d0JBQ25CLFdBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUE7O3dCQUF6RCxTQUF5RCxDQUFBOzs7d0JBRTNELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO3dCQUN4QixXQUFPLFFBQVEsRUFBQTs7OztLQUNoQjtJQU1PLDJDQUFvQixHQUE1QixVQUFnQyxHQUFZO1FBQzFDLElBQU0sT0FBTyxHQUFrQjtZQUM3QixLQUFLLEVBQUUsa0JBQVMsQ0FBQyxlQUFlO1lBQ2hDLGlCQUFpQixFQUFFLEdBQUc7U0FDdkIsQ0FBQTtRQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBMVpjLHlCQUFZLEdBQUcsQ0FBQyxBQUFKLENBQUk7SUFDaEIscUJBQVEsR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNaLHFCQUFRLEdBQUcsQ0FBQyxBQUFKLENBQUk7SUFDWiwwQkFBYSxHQUFHLElBQUksQUFBUCxDQUFPO0lBd1pyQyxtQkFBQztDQUFBLEFBNVpELElBNFpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXJyb3JUeXBlIH0gZnJvbSAnLi9jb25zdHMnXG5pbXBvcnQgeyBBcGlVcmxzLCBBcGlVcmxzVjIgfSBmcm9tICcuLi9hdXRoL2NvbnN0cydcblxuaW1wb3J0IHsgQXV0aENsaWVudCwgU2ltcGxlU3RvcmFnZSB9IGZyb20gJy4vaW50ZXJmYWNlJ1xuXG5pbXBvcnQge1xuICBDcmVkZW50aWFscyxcbiAgUmVzcG9uc2VFcnJvcixcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIFJlcXVlc3RGdW5jdGlvbixcbiAgT0F1dGgyQ2xpZW50T3B0aW9ucyxcbiAgQXV0aENsaWVudFJlcXVlc3RPcHRpb25zLFxufSBmcm9tICcuL21vZGVscydcblxuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSAnLi4vdXRpbHMvdXVpZCdcbmltcG9ydCB7IGdldFBhdGhOYW1lIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXgnXG5cbmltcG9ydCB7IFNpbmdsZVByb21pc2UgfSBmcm9tICcuLi91dGlscy9mdW5jdGlvbi9zaW5nbGUtcHJvbWlzZSdcbmltcG9ydCB7IHdlQnRvYSB9IGZyb20gJy4uL3V0aWxzL2Jhc2U2NCdcbmltcG9ydCB7IGlzTWF0Y2ggfSBmcm9tICcuLi91dGlscy9jbG91ZGJhc2UtYWRhcHRlci13eF9tcCdcblxuY29uc3QgUmVxdWVzdElkSGVhZGVyTmFtZSA9ICd4LXJlcXVlc3QtaWQnXG5jb25zdCBEZXZpY2VJZEhlYWRlck5hbWUgPSAneC1kZXZpY2UtaWQnXG5jb25zdCBEZXZpY2VJZFNlY3Rpb25OYW1lID0gJ2RldmljZV9pZCdcblxuZGVjbGFyZSBjb25zdCB3eDogYW55XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9SZXNwb25zZUVycm9yT3B0aW9ucyB7XG4gIGVycm9yPzogRXJyb3JUeXBlXG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbFxuICBlcnJvcl91cmk/OiBzdHJpbmcgfCBudWxsXG4gIGRldGFpbHM/OiBhbnkgfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVxdWVzdDogUmVxdWVzdEZ1bmN0aW9uID0gYXN5bmMgZnVuY3Rpb24gPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgbGV0IHJlc3VsdDogVCB8IG51bGwgPSBudWxsXG4gIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgdHJ5IHtcbiAgICAvLyBPYmplY3RzIG11c3QgYmUgY29waWVkIHRvIHByZXZlbnQgbW9kaWZpY2F0aW9uIG9mIGRhdGEgc3VjaCBhcyBib2R5LlxuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucylcbiAgICBpZiAoIWNvcHlPcHRpb25zLm1ldGhvZCkge1xuICAgICAgY29weU9wdGlvbnMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgaWYgKGNvcHlPcHRpb25zLmJvZHkgJiYgdHlwZW9mIGNvcHlPcHRpb25zLmJvZHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb3B5T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoY29weU9wdGlvbnMuYm9keSlcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2VSZXN1bHQ6IFJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBjb3B5T3B0aW9ucylcbiAgICBjb25zdCBqc29uUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZVJlc3VsdC5qc29uKClcbiAgICBpZiAoanNvblJlc3BvbnNlPy5lcnJvcikge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IGpzb25SZXNwb25zZSBhcyBSZXNwb25zZUVycm9yXG4gICAgICByZXNwb25zZUVycm9yLmVycm9yX3VyaSA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBqc29uUmVzcG9uc2UgYXMgVFxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuICAgICAgZXJyb3JfdXJpOiBuZXcgVVJMKHVybCkucGF0aG5hbWUsXG4gICAgfVxuICB9XG4gIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdG9SZXNwb25zZUVycm9yID0gKGVycm9yOiBSZXNwb25zZUVycm9yIHwgRXJyb3IsIG9wdGlvbnM/OiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zKTogUmVzcG9uc2VFcnJvciA9PiB7XG4gIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yXG4gIGNvbnN0IGZvcm1hdE9wdGlvbnM6IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IGZvcm1hdE9wdGlvbnMuZXJyb3JfdXJpLFxuICAgICAgZGV0YWlsczogZm9ybWF0T3B0aW9ucy5kZXRhaWxzIHx8IGVycm9yLnN0YWNrLFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmb3JtYXRFcnJvcjogVG9SZXNwb25zZUVycm9yT3B0aW9ucyA9IGVycm9yIHx8IHt9XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IGZvcm1hdEVycm9yLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGZvcm1hdEVycm9yLmVycm9yX2Rlc2NyaXB0aW9uLFxuICAgICAgZXJyb3JfdXJpOiBmb3JtYXRPcHRpb25zLmVycm9yX3VyaSB8fCBmb3JtYXRFcnJvci5lcnJvcl91cmksXG4gICAgICBkZXRhaWxzOiBmb3JtYXRPcHRpb25zLmRldGFpbHMgfHwgZm9ybWF0RXJyb3IuZGV0YWlscyxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlRXJyb3Jcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSByZXF1ZXN0IGlkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSZXF1ZXN0SWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHV1aWR2NCgpXG59XG5cbi8qKlxuICogRGVmYXVsdCBTdG9yYWdlLlxuICovXG5jbGFzcyBEZWZhdWx0U3RvcmFnZSBpbXBsZW1lbnRzIFNpbXBsZVN0b3JhZ2Uge1xuICAvKipcbiAgICog57yT5a2Ya2V557uf5LiA5L2/55So5ZCO57yA5Yy65YiGXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbnY6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKG9wdHM/OiB7IGVudjogc3RyaW5nIH0pIHtcbiAgICB0aGlzLl9lbnYgPSBvcHRzPy5lbnYgfHwgJydcbiAgfVxuICAvKipcbiAgICogR2V0IGl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIGFzeW5jIGdldEl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBpdGVtLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBhc3luYyByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBpdGVtLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKi9cbiAgYXN5bmMgc2V0SXRlbShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YCwgdmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogR2V0IGl0ZW0gc3luYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgZ2V0SXRlbVN5bmMoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBpdGVtIHN5bmMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIHJlbW92ZUl0ZW1TeW5jKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBpdGVtIHN5bmMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqL1xuICBzZXRJdGVtU3luYyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YCwgdmFsdWUpXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTdG9yYWdlID0gbmV3IERlZmF1bHRTdG9yYWdlKClcblxuaW50ZXJmYWNlIExvY2FsQ3JlZGVudGlhbHNPcHRpb25zIHtcbiAgdG9rZW5TZWN0aW9uTmFtZTogc3RyaW5nXG4gIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2Vcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBjcmVkZW50aWFscyBpcyBleHBpcmVkLlxuICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ3JlZGVudGlhbHNFeHBpcmVkKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IGJvb2xlYW4ge1xuICBsZXQgaXNFeHBpcmVkID0gdHJ1ZVxuICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQgJiYgY3JlZGVudGlhbHM/LmFjY2Vzc190b2tlbikge1xuICAgIGlzRXhwaXJlZCA9IGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQgPCBuZXcgRGF0ZSgpXG4gIH1cbiAgcmV0dXJuIGlzRXhwaXJlZFxufVxuXG4vKipcbiAqIExvY2FsIGNyZWRlbnRpYWxzLlxuICogTG9jYWwgY3JlZGVudGlhbHMsIHdpdGggbWVtb3J5IGNhY2hlIGFuZCBzdG9yYWdlIGNhY2hlLlxuICogSWYgdGhlIG1lbW9yeSBjYWNoZSBleHBpcmVzLCB0aGUgc3RvcmFnZSBjYWNoZSBpcyBhdXRvbWF0aWNhbGx5IGxvYWRlZC5cbiAqL1xuY2xhc3MgTG9jYWxDcmVkZW50aWFscyB7XG4gIHByaXZhdGUgdG9rZW5TZWN0aW9uTmFtZTogc3RyaW5nXG5cbiAgcHJpdmF0ZSBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG5cbiAgcHJpdmF0ZSBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCBudWxsID0gbnVsbFxuXG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG5ldyBTaW5nbGVQcm9taXNlKClcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtMb2NhbENyZWRlbnRpYWxzT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTG9jYWxDcmVkZW50aWFsc09wdGlvbnMpIHtcbiAgICB0aGlzLnRva2VuU2VjdGlvbk5hbWUgPSBvcHRpb25zLnRva2VuU2VjdGlvbk5hbWVcbiAgICB0aGlzLnN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2VcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdG9yYWdlQ3JlZGVudGlhbHNTeW5jKCk6IENyZWRlbnRpYWxzIHwgbnVsbCB7XG4gICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IG51bGxcbiAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gdGhpcy5zdG9yYWdlLmdldEl0ZW1TeW5jKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICBjcmVkZW50aWFscy5leHBpcmVzX2F0ID0gbmV3IERhdGUoY3JlZGVudGlhbHMuZXhwaXJlc19hdClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3JlZGVudGlhbHMgUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19pbikge1xuICAgICAgaWYgKCFjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICBjcmVkZW50aWFscy5leHBpcmVzX2F0ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIChjcmVkZW50aWFscy5leHBpcmVzX2luIC0gMzApICogMTAwMClcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUsIHRva2VuU3RyKVxuICAgICAgfVxuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgfVxuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNyZWRlbnRpYWxzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignZ2V0Q3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoaXNDcmVkZW50aWFsc0V4cGlyZWQodGhpcy5jcmVkZW50aWFscykpIHtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0U3RvcmFnZUNyZWRlbnRpYWxzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RvcmFnZSBjcmVkZW50aWFscy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0U3RvcmFnZUNyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19nZXRTdG9yYWdlQ3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIGlmICh0b2tlblN0ciAhPT0gdW5kZWZpbmVkICYmIHRva2VuU3RyICE9PSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIE9BdXRoMkNsaWVudFxuICovXG5leHBvcnQgY2xhc3MgT0F1dGgyQ2xpZW50IGltcGxlbWVudHMgQXV0aENsaWVudCB7XG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRSZXRyeSA9IDJcbiAgcHJpdmF0ZSBzdGF0aWMgbWluUmV0cnkgPSAwXG4gIHByaXZhdGUgc3RhdGljIG1heFJldHJ5ID0gNVxuICBwcml2YXRlIHN0YXRpYyByZXRyeUludGVydmFsID0gMTAwMFxuXG4gIHByaXZhdGUgYXBpT3JpZ2luOiBzdHJpbmdcbiAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nXG4gIHByaXZhdGUgcmV0cnk6IG51bWJlclxuICBwcml2YXRlIGNsaWVudFNlY3JldD86IHN0cmluZ1xuICBwcml2YXRlIGJhc2VSZXF1ZXN0OiA8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxUPlxuICBwcml2YXRlIGxvY2FsQ3JlZGVudGlhbHM6IExvY2FsQ3JlZGVudGlhbHNcbiAgcHJpdmF0ZSBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG4gIHByaXZhdGUgZGV2aWNlSUQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSB0b2tlbkluVVJMPzogYm9vbGVhblxuICBwcml2YXRlIHJlZnJlc2hUb2tlbkZ1bmM6IChyZWZyZXNoVG9rZW4/OiBzdHJpbmcsIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHM+XG4gIHByaXZhdGUgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgcHJpdmF0ZSBzaW5nbGVQcm9taXNlOiBTaW5nbGVQcm9taXNlID0gbmV3IFNpbmdsZVByb21pc2UoKVxuICBwcml2YXRlIGFub255bW91c1NpZ25JbkZ1bmM6IChDcmVkZW50aWFscykgPT4gUHJvbWlzZTxDcmVkZW50aWFscyB8IHZvaWQ+XG4gIHByaXZhdGUgd3hDbG91ZDogYW55XG4gIHByaXZhdGUgYmFzaWNBdXRoOiBzdHJpbmdcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPQXV0aDJDbGllbnRPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPQXV0aDJDbGllbnRPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLmNsaWVudFNlY3JldCkge1xuICAgICAgb3B0aW9ucy5jbGllbnRTZWNyZXQgPSAnJ1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5jbGllbnRJZCAmJiBvcHRpb25zLmVudikge1xuICAgICAgb3B0aW9ucy5jbGllbnRJZCA9IG9wdGlvbnMuZW52XG4gICAgfVxuXG4gICAgdGhpcy5hcGlPcmlnaW4gPSBvcHRpb25zLmFwaU9yaWdpblxuICAgIHRoaXMuY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkXG4gICAgdGhpcy5yZXRyeSA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgT0F1dGgyQ2xpZW50LmRlZmF1bHRSZXRyeSlcbiAgICBpZiAob3B0aW9ucy5iYXNlUmVxdWVzdCkge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IG9wdGlvbnMuYmFzZVJlcXVlc3RcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IGRlZmF1bHRSZXF1ZXN0XG4gICAgfVxuICAgIHRoaXMudG9rZW5JblVSTCA9IG9wdGlvbnMudG9rZW5JblVSTFxuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVyc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2UgfHwgZGVmYXVsdFN0b3JhZ2VcbiAgICB0aGlzLmxvY2FsQ3JlZGVudGlhbHMgPSBuZXcgTG9jYWxDcmVkZW50aWFscyh7XG4gICAgICB0b2tlblNlY3Rpb25OYW1lOiBgY3JlZGVudGlhbHNfJHtvcHRpb25zLmNsaWVudElkfWAsXG4gICAgICBzdG9yYWdlOiB0aGlzLnN0b3JhZ2UsXG4gICAgfSlcblxuICAgIHRoaXMuY2xpZW50U2VjcmV0ID0gb3B0aW9ucy5jbGllbnRTZWNyZXRcbiAgICBpZiAob3B0aW9ucy5jbGllbnRJZCkge1xuICAgICAgdGhpcy5iYXNpY0F1dGggPSBgQmFzaWMgJHt3ZUJ0b2EoYCR7b3B0aW9ucy5jbGllbnRJZH06JHt0aGlzLmNsaWVudFNlY3JldH1gKX1gXG4gICAgfVxuICAgIHRoaXMud3hDbG91ZCA9IG9wdGlvbnMud3hDbG91ZFxuICAgIHRyeSB7XG4gICAgICBpZiAoaXNNYXRjaCgpICYmIHRoaXMud3hDbG91ZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuZW52KSB7XG4gICAgICAgIHd4LmNsb3VkLmluaXQoeyBlbnY6IG9wdGlvbnMuZW52IH0pXG4gICAgICAgIHRoaXMud3hDbG91ZCA9IHd4LmNsb3VkXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vXG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFRva2VuRnVuYyA9IG9wdGlvbnMucmVmcmVzaFRva2VuRnVuYyB8fCB0aGlzLmRlZmF1bHRSZWZyZXNoVG9rZW5GdW5jXG4gICAgdGhpcy5hbm9ueW1vdXNTaWduSW5GdW5jID0gb3B0aW9ucy5hbm9ueW1vdXNTaWduSW5GdW5jXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3JlZGVudGlhbHMgUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwdWJsaWMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogZ2V0QWNjZXNzVG9rZW4gcmV0dXJuIGEgdmFsaWRhdGUgYWNjZXNzIHRva2VuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoY3JlZGVudGlhbHM/LmFjY2Vzc190b2tlbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4pXG4gICAgfVxuICAgIGNvbnN0IHJlc3BFcnI6IFJlc3BvbnNlRXJyb3IgPSB7IGVycm9yOiBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcEVycilcbiAgfVxuXG4gIC8qKlxuICAgKiByZXF1ZXN0IGh0dHAgbGlrZSBzaW1wbGUgZmV0Y2ggYXBpLCBleHA6cmVxdWVzdCgnL3YxL3VzZXIvbWUnLCB7d2l0aENyZWRlbnRpYWxzOnRydWV9KVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7QXV0aENsaWVudFJlcXVlc3RPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgfVxuICAgIGNvbnN0IHJldHJ5OiBudW1iZXIgPSB0aGlzLmZvcm1hdFJldHJ5KG9wdGlvbnMucmV0cnksIHRoaXMucmV0cnkpXG4gICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gICAgaWYgKHRoaXMuaGVhZGVycykge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAuLi50aGlzLmhlYWRlcnMsXG4gICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnNbUmVxdWVzdElkSGVhZGVyTmFtZV0pIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVyc1tSZXF1ZXN0SWRIZWFkZXJOYW1lXSA9IGdlbmVyYXRlUmVxdWVzdElkKClcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnNbRGV2aWNlSWRIZWFkZXJOYW1lXSkge1xuICAgICAgY29uc3QgZGV2aWNlSWQgPSBhd2FpdCB0aGlzLmdldERldmljZUlkKClcbiAgICAgIG9wdGlvbnMuaGVhZGVyc1tEZXZpY2VJZEhlYWRlck5hbWVdID0gZGV2aWNlSWRcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LndpdGhCYXNpY0F1dGggJiYgdGhpcy5iYXNpY0F1dGgpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gdGhpcy5iYXNpY0F1dGhcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LndpdGhDcmVkZW50aWFscykge1xuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICBpZiAodGhpcy50b2tlbkluVVJMKSB7XG4gICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XG4gICAgICAgICAgICB1cmwgKz0gJz8nXG4gICAgICAgICAgfVxuICAgICAgICAgIHVybCArPSBgYWNjZXNzX3Rva2VuPSR7Y3JlZGVudGlhbHMuYWNjZXNzX3Rva2VufWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGAke2NyZWRlbnRpYWxzLnRva2VuX3R5cGV9ICR7Y3JlZGVudGlhbHMuYWNjZXNzX3Rva2VufWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jbGllbnRJZCAmJiB1cmwuaW5kZXhPZignY2xpZW50X2lkJykgPCAwKSB7XG4gICAgICAgIHVybCArPSB1cmwuaW5kZXhPZignPycpIDwgMCA/ICc/JyA6ICcmJ1xuICAgICAgICB1cmwgKz0gYGNsaWVudF9pZD0ke3RoaXMuY2xpZW50SWR9YFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgdXJsID0gdGhpcy5hcGlPcmlnaW4gKyB1cmxcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlOiBUIHwgbnVsbCA9IG51bGxcbiAgICBjb25zdCBtYXhSZXF1ZXN0VGltZXM6IG51bWJlciA9IHJldHJ5ICsgMVxuICAgIGZvciAobGV0IHJlcXVlc3RUaW1lID0gMDsgcmVxdWVzdFRpbWUgPCBtYXhSZXF1ZXN0VGltZXM7IHJlcXVlc3RUaW1lKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZVd4Q2xvdWQpIHtcbiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMud3hDbG91ZENhbGxGdW5jdGlvbjxUPih1cmwsIG9wdGlvbnMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJhc2VSZXF1ZXN0PFQ+KHVybCwgb3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAocmVzcG9uc2VFcnJvcikge1xuICAgICAgICBpZiAob3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgJiYgcmVzcG9uc2VFcnJvciAmJiByZXNwb25zZUVycm9yLmVycm9yID09PSBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZUVycm9yKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RUaW1lID09PSByZXRyeSB8fCAhcmVzcG9uc2VFcnJvciB8fCByZXNwb25zZUVycm9yLmVycm9yICE9PSAndW5yZWFjaGFibGUnKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlRXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuc2xlZXAoT0F1dGgyQ2xpZW50LnJldHJ5SW50ZXJ2YWwpXG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHd4Q2xvdWRDYWxsRnVuY3Rpb248VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGxldCByZXN1bHQ6IFQgfCBudWxsID0gbnVsbFxuICAgIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgICB0cnkge1xuICAgICAgbGV0IHVzZXJBZ2VudCA9ICcnXG4gICAgICB0cnkge1xuICAgICAgICB1c2VyQWdlbnQgPSBhd2FpdCB3eC5nZXRSZW5kZXJlclVzZXJBZ2VudCgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuXG4gICAgICB9XG4gICAgICBjb25zdCB7IHJlc3VsdDogcmVzcG9uc2VSZXN1bHQgfSA9IGF3YWl0IHRoaXMud3hDbG91ZC5jYWxsRnVuY3Rpb24oe1xuICAgICAgICBuYW1lOiAnaHR0cE92ZXJDYWxsRnVuY3Rpb24nLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgb3JpZ2luOiAnaHR0cHM6Ly9zZXJ2aWNld2VjaGF0LmNvbScsXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6IHVzZXJBZ2VudCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChyZXNwb25zZVJlc3VsdD8uYm9keT8uZXJyb3JfY29kZSkge1xuICAgICAgICByZXNwb25zZUVycm9yID0gcmVzcG9uc2VSZXN1bHQ/LmJvZHkgYXMgUmVzcG9uc2VFcnJvclxuICAgICAgICByZXNwb25zZUVycm9yLmVycm9yX3VyaSA9IGdldFBhdGhOYW1lKHVybClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3BvbnNlUmVzdWx0Py5ib2R5IGFzIFRcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIGVycm9yX3VyaTogZ2V0UGF0aE5hbWUodXJsKSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdjcmVkZW50aWFscyBub3QgZm91bmQnKVxuICAgIH1cbiAgICBpZiAoaXNDcmVkZW50aWFsc0V4cGlyZWQoY3JlZGVudGlhbHMpKSB7XG4gICAgICBpZiAoY3JlZGVudGlhbHMgJiYgY3JlZGVudGlhbHMuc2NvcGUgPT09ICdhbm9ueW1vdXMnKSB7XG4gICAgICAgIGlmICh0aGlzLmFub255bW91c1NpZ25JbkZ1bmMpIHtcbiAgICAgICAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5hbm9ueW1vdXNTaWduSW5GdW5jKGNyZWRlbnRpYWxzKVxuICAgICAgICAgIGNyZWRlbnRpYWxzID0gYyB8fCAoYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbihjcmVkZW50aWFscylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihjcmVkZW50aWFscylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQg5bqf5byD5o6l5Y+j77yM5Yu/55SoLiDlpoLpnIDojrflj5blh63or4Hkv6Hmga/or7fkvb/nlKggZ2V0Q3JlZGVudGlhbHMg5pa55rOVXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHNTeW5jKCk6IENyZWRlbnRpYWxzIHwgbnVsbCB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldFN0b3JhZ2VDcmVkZW50aWFsc1N5bmMoKVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgcHVibGljIGdldENyZWRlbnRpYWxzQXN5bmMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDcmVkZW50aWFscygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdjcmVkZW50aWFscyBub3QgZm91bmQnKVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHMuc2NvcGVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCcpXG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFscy5ncm91cHNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIGV4cGlyZWQgdG9rZW4uXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19yZWZyZXNoVG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8ICFjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdubyByZWZyZXNoIHRva2VuIGZvdW5kIGluIGNyZWRlbnRpYWxzJylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuRnVuYyhjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuLCBjcmVkZW50aWFscylcbiAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKVxuICAgICAgICByZXR1cm4gbmV3Q3JlZGVudGlhbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciA9PT0gRXJyb3JUeXBlLklOVkFMSURfR1JBTlQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobnVsbClcbiAgICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihlcnJvci5lcnJvcl9kZXNjcmlwdGlvbilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayByZXRyeSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHByaXZhdGUgY2hlY2tSZXRyeShyZXRyeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gICAgaWYgKHR5cGVvZiByZXRyeSAhPT0gJ251bWJlcicgfHwgcmV0cnkgPCBPQXV0aDJDbGllbnQubWluUmV0cnkgfHwgcmV0cnkgPiBPQXV0aDJDbGllbnQubWF4UmV0cnkpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5SRUFDSEFCTEUsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAnd3Jvbmcgb3B0aW9ucyBwYXJhbTogcmV0cnknLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICAgIH1cbiAgICByZXR1cm4gcmV0cnlcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgcmV0cnkgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZXRyeVxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbGVcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRSZXRyeShyZXRyeTogbnVtYmVyLCBkZWZhdWx0VmFsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIHJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWxlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoZWNrUmV0cnkocmV0cnkpXG4gIH1cblxuICAvKipcbiAgICogU2xlZXAuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9LCBtcylcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGFub255bW91cyBzaWduSW5cbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFub255bW91c1NpZ25JbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19hbm9ueW1vdXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8IGNyZWRlbnRpYWxzLnNjb3BlICE9PSAnYW5vbnltb3VzJykge1xuICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcignbm8gYW5vbnltb3VzIGluIGNyZWRlbnRpYWxzJylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVxdWVzdChBcGlVcmxzLkFVVEhfU0lHTl9JTl9BTk9OWU1PVVNMWV9VUkwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICB3aXRoQmFzaWNBdXRoOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IHt9LFxuICAgICAgICB9KVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG4gICAgICAgIHJldHVybiBuZXdDcmVkZW50aWFsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmVycm9yID09PSBFcnJvclR5cGUuSU5WQUxJRF9HUkFOVCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcmVmcmVzaCB0b2tlbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hUb2tlblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVmYXVsdFJlZnJlc2hUb2tlbkZ1bmMocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGlmIChyZWZyZXNoVG9rZW4gPT09IHVuZGVmaW5lZCB8fCByZWZyZXNoVG9rZW4gPT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcigncmVmcmVzaCB0b2tlbiBub3QgZm91bmQnKVxuICAgIH1cblxuICAgIGxldCB1cmw6IHN0cmluZyA9IEFwaVVybHMuQVVUSF9UT0tFTl9VUkxcblxuICAgIGlmIChjcmVkZW50aWFscz8udmVyc2lvbiA9PT0gJ3YyJykge1xuICAgICAgdXJsID0gQXBpVXJsc1YyLkFVVEhfVE9LRU5fVVJMXG4gICAgfVxuXG4gICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIGNsaWVudF9pZDogdGhpcy5jbGllbnRJZCxcbiAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5jbGllbnRTZWNyZXQsXG4gICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHsgLi4ubmV3Q3JlZGVudGlhbHMsIHZlcnNpb246IGNyZWRlbnRpYWxzPy52ZXJzaW9uIHx8ICd2MScgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXZpY2VJZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VJZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmRldmljZUlEKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXZpY2VJRFxuICAgIH1cbiAgICBsZXQgZGV2aWNlSWQ6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKERldmljZUlkU2VjdGlvbk5hbWUpXG4gICAgaWYgKCEodHlwZW9mIGRldmljZUlkID09PSAnc3RyaW5nJyAmJiBkZXZpY2VJZC5sZW5ndGggPj0gMTYgJiYgZGV2aWNlSWQubGVuZ3RoIDw9IDQ4KSkge1xuICAgICAgZGV2aWNlSWQgPSB1dWlkdjQoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0oRGV2aWNlSWRTZWN0aW9uTmFtZSwgZGV2aWNlSWQpXG4gICAgfVxuICAgIHRoaXMuZGV2aWNlSUQgPSBkZXZpY2VJZFxuICAgIHJldHVybiBkZXZpY2VJZFxuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB1bkF1dGhlbnRpY2F0ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJcbiAgICogQHJldHVybiB7UHJvbWlzZTxUPn1cbiAgICovXG4gIHByaXZhdGUgdW5BdXRoZW50aWNhdGVkRXJyb3I8VD4oZXJyPzogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcEVycjogUmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVELFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycixcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BFcnIpXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ declare class MyURLSearchParams {
2
+ params: {};
3
+ constructor(init: any);
4
+ parse(str: any): void;
5
+ append(key: any, value: any): void;
6
+ get(key: any): any;
7
+ getAll(key: any): any;
8
+ delete(key: any): void;
9
+ has(key: any): boolean;
10
+ set(key: any, value: any): void;
11
+ toString(): string;
12
+ }
13
+ export default MyURLSearchParams;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var MyURLSearchParams = (function () {
4
+ function MyURLSearchParams(init) {
5
+ this.params = {};
6
+ if (typeof init === 'string') {
7
+ this.parse(init);
8
+ }
9
+ else if (init && typeof init === 'object') {
10
+ for (var key in init) {
11
+ if (Object.prototype.hasOwnProperty.call(init, key)) {
12
+ this.append(key, init[key]);
13
+ }
14
+ }
15
+ }
16
+ }
17
+ MyURLSearchParams.prototype.parse = function (str) {
18
+ var _this = this;
19
+ var params = str.split('&');
20
+ params.forEach(function (param) {
21
+ var _a = param.split('=').map(decodeURIComponent), key = _a[0], value = _a[1];
22
+ _this.append(key, value);
23
+ });
24
+ };
25
+ MyURLSearchParams.prototype.append = function (key, value) {
26
+ if (this.params[key]) {
27
+ this.params[key] = this.params[key].concat([value]);
28
+ }
29
+ else {
30
+ this.params[key] = [value];
31
+ }
32
+ };
33
+ MyURLSearchParams.prototype.get = function (key) {
34
+ return this.params[key] ? this.params[key][0] : null;
35
+ };
36
+ MyURLSearchParams.prototype.getAll = function (key) {
37
+ return this.params[key] || [];
38
+ };
39
+ MyURLSearchParams.prototype.delete = function (key) {
40
+ delete this.params[key];
41
+ };
42
+ MyURLSearchParams.prototype.has = function (key) {
43
+ return Object.prototype.hasOwnProperty.call(this.params, key);
44
+ };
45
+ MyURLSearchParams.prototype.set = function (key, value) {
46
+ this.params[key] = [value];
47
+ };
48
+ MyURLSearchParams.prototype.toString = function () {
49
+ var items = [];
50
+ var _loop_1 = function (key) {
51
+ if (Object.prototype.hasOwnProperty.call(this_1.params, key)) {
52
+ this_1.params[key].forEach(function (value) {
53
+ items.push("".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value)));
54
+ });
55
+ }
56
+ };
57
+ var this_1 = this;
58
+ for (var key in this.params) {
59
+ _loop_1(key);
60
+ }
61
+ return items.join('&');
62
+ };
63
+ return MyURLSearchParams;
64
+ }());
65
+ exports.default = MyURLSearchParams;
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsU2VhcmNoUGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3VybFNlYXJjaFBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBO0lBR0UsMkJBQVksSUFBSTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDakI7YUFBTSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDM0MsS0FBSyxJQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3RCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7aUJBQzVCO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFHRCxpQ0FBSyxHQUFMLFVBQU0sR0FBRztRQUFULGlCQU1DO1FBTEMsSUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSztZQUNiLElBQUEsS0FBZSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUF0RCxHQUFHLFFBQUEsRUFBRSxLQUFLLFFBQTRDLENBQUE7WUFDN0QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBR0Qsa0NBQU0sR0FBTixVQUFPLEdBQUcsRUFBRSxLQUFLO1FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1NBQ3BEO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDM0I7SUFDSCxDQUFDO0lBR0QsK0JBQUcsR0FBSCxVQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN0RCxDQUFDO0lBR0Qsa0NBQU0sR0FBTixVQUFPLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQy9CLENBQUM7SUFHRCxrQ0FBTSxHQUFOLFVBQU8sR0FBRztRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBR0QsK0JBQUcsR0FBSCxVQUFJLEdBQUc7UUFDTCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFHRCwrQkFBRyxHQUFILFVBQUksR0FBRyxFQUFFLEtBQUs7UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUdELG9DQUFRLEdBQVI7UUFDRSxJQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7Z0NBQ0wsR0FBRztZQUNaLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQUssTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRCxPQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO29CQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGNBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUUsQ0FBQyxDQUFBO2dCQUN2RSxDQUFDLENBQUMsQ0FBQTthQUNIOzs7UUFMSCxLQUFLLElBQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNO29CQUFsQixHQUFHO1NBTWI7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUNILHdCQUFDO0FBQUQsQ0FBQyxBQXZFRCxJQXVFQztBQUVELGtCQUFlLGlCQUFpQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDlhbzlrrnlsI/nqIvluo9cbiAqL1xuY2xhc3MgTXlVUkxTZWFyY2hQYXJhbXMge1xuICBwYXJhbXM6IHt9XG5cbiAgY29uc3RydWN0b3IoaW5pdCkge1xuICAgIHRoaXMucGFyYW1zID0ge31cbiAgICBpZiAodHlwZW9mIGluaXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnBhcnNlKGluaXQpXG4gICAgfSBlbHNlIGlmIChpbml0ICYmIHR5cGVvZiBpbml0ID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluaXQsIGtleSkpIHtcbiAgICAgICAgICB0aGlzLmFwcGVuZChrZXksIGluaXRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOino+aekOafpeivouWtl+espuS4slxuICBwYXJzZShzdHIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzdHIuc3BsaXQoJyYnKVxuICAgIHBhcmFtcy5mb3JFYWNoKChwYXJhbSkgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFyYW0uc3BsaXQoJz0nKS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KVxuICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICB9KVxuICB9XG5cbiAgLy8g5re75Yqg5Y+C5pWwXG4gIGFwcGVuZChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMucGFyYW1zW2tleV0pIHtcbiAgICAgIHRoaXMucGFyYW1zW2tleV0gPSB0aGlzLnBhcmFtc1trZXldLmNvbmNhdChbdmFsdWVdKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcmFtc1trZXldID0gW3ZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIC8vIOiOt+WPluWPguaVsOWAvO+8iOWNleS4quWAvO+8iVxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zW2tleV0gPyB0aGlzLnBhcmFtc1trZXldWzBdIDogbnVsbFxuICB9XG5cbiAgLy8g6I635Y+W5Y+C5pWw5YC877yI5omA5pyJ5YC877yJXG4gIGdldEFsbChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXNba2V5XSB8fCBbXVxuICB9XG5cbiAgLy8g5Yig6Zmk5Y+C5pWwXG4gIGRlbGV0ZShrZXkpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJhbXNba2V5XVxuICB9XG5cbiAgLy8g5qOA5p+l5Y+C5pWw5piv5ZCm5a2Y5ZyoXG4gIGhhcyhrZXkpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLCBrZXkpXG4gIH1cblxuICAvLyDorr7nva7lj4LmlbDlgLxcbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICB0aGlzLnBhcmFtc1trZXldID0gW3ZhbHVlXVxuICB9XG5cbiAgLy8g6L+U5Zue5p+l6K+i5a2X56ym5LiyXG4gIHRvU3RyaW5nKCkge1xuICAgIGNvbnN0IGl0ZW1zID0gW11cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBhcmFtcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnBhcmFtcywga2V5KSkge1xuICAgICAgICB0aGlzLnBhcmFtc1trZXldLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaXRlbXMucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcy5qb2luKCcmJylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNeVVSTFNlYXJjaFBhcmFtc1xuIl19
@@ -33,7 +33,9 @@ export declare class Auth {
33
33
  signOut(params?: SignoutRequest): Promise<SignoutReponse>;
34
34
  revokeAllDevices(): Promise<void>;
35
35
  revokeDevice(params: RevokeDeviceRequest): Promise<void>;
36
- getVerification(params: GetVerificationRequest): Promise<GetVerificationResponse>;
36
+ getVerification(params: GetVerificationRequest, options?: {
37
+ withCaptcha: boolean;
38
+ }): Promise<GetVerificationResponse>;
37
39
  verify(params: VerifyRequest): Promise<VerifyResponse>;
38
40
  genProviderRedirectUri(params: GenProviderRedirectUriRequest): Promise<GenProviderRedirectUriResponse>;
39
41
  grantProviderToken(params: GrantProviderTokenRequest, useWxCloud?: boolean): Promise<GrantProviderTokenResponse>;
@@ -3,6 +3,7 @@ import { ApiUrls, ApiUrlsV2, ErrorType } from './consts';
3
3
  import { OAuth2Client, defaultStorage } from '../oauth2client/oauth2client';
4
4
  import { Captcha } from '../captcha/captcha';
5
5
  import { deepClone } from '../utils';
6
+ import MyURLSearchParams from '../utils/urlSearchParams';
6
7
  function getEncryptUtils(isEncrypt) {
7
8
  if (globalThis.IS_MP_BUILD) {
8
9
  return;
@@ -19,7 +20,7 @@ export class Auth {
19
20
  delete params[key];
20
21
  }
21
22
  });
22
- const searchParams = new URLSearchParams(params);
23
+ const searchParams = new MyURLSearchParams(params);
23
24
  return searchParams.toString();
24
25
  }
25
26
  constructor(opts) {
@@ -137,7 +138,7 @@ export class Auth {
137
138
  withCredentials: true,
138
139
  });
139
140
  }
140
- async getVerification(params) {
141
+ async getVerification(params, options) {
141
142
  let withCredentials = false;
142
143
  if (params.target === 'CUR_USER') {
143
144
  withCredentials = true;
@@ -151,6 +152,7 @@ export class Auth {
151
152
  return this.config.request(ApiUrls.VERIFICATION_URL, {
152
153
  method: 'POST',
153
154
  body: params,
155
+ withCaptcha: options?.withCaptcha || false,
154
156
  withCredentials,
155
157
  });
156
158
  }
@@ -232,7 +234,7 @@ export class Auth {
232
234
  async getUserInfo(params = {}) {
233
235
  const res = this.getParamsByVersion(params, 'USER_ME_URL');
234
236
  if (res.params?.query) {
235
- const searchParams = new URLSearchParams(res.params.query);
237
+ const searchParams = new MyURLSearchParams(res.params.query);
236
238
  res.url += `?${searchParams.toString()}`;
237
239
  }
238
240
  const userInfo = await this.config.request(res.url, {
@@ -369,7 +371,7 @@ export class Auth {
369
371
  });
370
372
  }
371
373
  async queryUserProfile(params) {
372
- const searchParams = new URLSearchParams(params);
374
+ const searchParams = new MyURLSearchParams(params);
373
375
  return this.config.request(`${ApiUrls.USER_QUERY_URL}?${searchParams.toString()}`, {
374
376
  method: 'GET',
375
377
  withCredentials: true,
@@ -443,7 +445,7 @@ export class Auth {
443
445
  });
444
446
  }
445
447
  async checkIfUserExist(params) {
446
- const searchParams = new URLSearchParams(params);
448
+ const searchParams = new MyURLSearchParams(params);
447
449
  return this.config.request(`${ApiUrls.CHECK_IF_USER_EXIST}?${searchParams.toString()}`, {
448
450
  method: 'GET',
449
451
  });
@@ -1,6 +1,7 @@
1
1
  import { ApiUrls, ErrorType } from '../auth/consts';
2
2
  import { defaultStorage } from '../oauth2client/oauth2client';
3
3
  import { isInMpWebView, isMp } from '../utils/mp';
4
+ import MyURLSearchParams from '../utils/urlSearchParams';
4
5
  export class Captcha {
5
6
  constructor(opts) {
6
7
  if (!opts.openURIWithCallback) {
@@ -77,7 +78,7 @@ export class Captcha {
77
78
  const iframeLocation = iframe.contentWindow.location;
78
79
  if (iframeLocation.host + iframeLocation.pathname === windowLocation.host + windowLocation.pathname) {
79
80
  target.style.display = 'none';
80
- const iframeUrlParams = new URLSearchParams(iframeLocation.search);
81
+ const iframeUrlParams = new MyURLSearchParams(iframeLocation.search);
81
82
  const captchToken = iframeUrlParams.get('captcha_token');
82
83
  if (captchToken) {
83
84
  return resolve({
@@ -295,7 +295,12 @@ class OAuth2Client {
295
295
  let result = null;
296
296
  let responseError = null;
297
297
  try {
298
- const userAgent = await wx.getRendererUserAgent();
298
+ let userAgent = '';
299
+ try {
300
+ userAgent = await wx.getRendererUserAgent();
301
+ }
302
+ catch (error) {
303
+ }
299
304
  const { result: responseResult } = await this.wxCloud.callFunction({
300
305
  name: 'httpOverCallFunction',
301
306
  data: {
@@ -0,0 +1,13 @@
1
+ declare class MyURLSearchParams {
2
+ params: {};
3
+ constructor(init: any);
4
+ parse(str: any): void;
5
+ append(key: any, value: any): void;
6
+ get(key: any): any;
7
+ getAll(key: any): any;
8
+ delete(key: any): void;
9
+ has(key: any): boolean;
10
+ set(key: any, value: any): void;
11
+ toString(): string;
12
+ }
13
+ export default MyURLSearchParams;
@@ -0,0 +1,57 @@
1
+ class MyURLSearchParams {
2
+ constructor(init) {
3
+ this.params = {};
4
+ if (typeof init === 'string') {
5
+ this.parse(init);
6
+ }
7
+ else if (init && typeof init === 'object') {
8
+ for (const key in init) {
9
+ if (Object.prototype.hasOwnProperty.call(init, key)) {
10
+ this.append(key, init[key]);
11
+ }
12
+ }
13
+ }
14
+ }
15
+ parse(str) {
16
+ const params = str.split('&');
17
+ params.forEach((param) => {
18
+ const [key, value] = param.split('=').map(decodeURIComponent);
19
+ this.append(key, value);
20
+ });
21
+ }
22
+ append(key, value) {
23
+ if (this.params[key]) {
24
+ this.params[key] = this.params[key].concat([value]);
25
+ }
26
+ else {
27
+ this.params[key] = [value];
28
+ }
29
+ }
30
+ get(key) {
31
+ return this.params[key] ? this.params[key][0] : null;
32
+ }
33
+ getAll(key) {
34
+ return this.params[key] || [];
35
+ }
36
+ delete(key) {
37
+ delete this.params[key];
38
+ }
39
+ has(key) {
40
+ return Object.prototype.hasOwnProperty.call(this.params, key);
41
+ }
42
+ set(key, value) {
43
+ this.params[key] = [value];
44
+ }
45
+ toString() {
46
+ const items = [];
47
+ for (const key in this.params) {
48
+ if (Object.prototype.hasOwnProperty.call(this.params, key)) {
49
+ this.params[key].forEach((value) => {
50
+ items.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
51
+ });
52
+ }
53
+ }
54
+ return items.join('&');
55
+ }
56
+ }
57
+ export default MyURLSearchParams;