@cloudbase/oauth 2.5.46-beta.0 → 2.5.48-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.
@@ -47,7 +47,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
47
47
  };
48
48
  import { ErrorType } from './consts';
49
49
  import { ApiUrls, ApiUrlsV2 } from '../auth/consts';
50
+ import adapterForWxMp from 'cloudbase-adapter-wx_mp';
50
51
  import { uuidv4 } from '../utils/uuid';
52
+ import { getPathName } from '../utils/index';
51
53
  import { SinglePromise } from '../utils/function/single-promise';
52
54
  var RequestIdHeaderName = 'x-request-id';
53
55
  var DeviceIdHeaderName = 'x-device-id';
@@ -309,6 +311,15 @@ export var OAuth2Client = (function () {
309
311
  storage: this.storage,
310
312
  });
311
313
  this.clientSecret = options.clientSecret;
314
+ this.wxCloud = options.wxCloud;
315
+ try {
316
+ if (adapterForWxMp.isMatch() && this.wxCloud === undefined && options.env) {
317
+ wx.cloud.init({ env: options.env });
318
+ this.wxCloud = wx.cloud;
319
+ }
320
+ }
321
+ catch (error) {
322
+ }
312
323
  this.refreshTokenFunc = options.refreshTokenFunc || this.defaultRefreshTokenFunc;
313
324
  this.anonymousSignInFunc = options.anonymousSignInFunc;
314
325
  }
@@ -387,36 +398,91 @@ export var OAuth2Client = (function () {
387
398
  requestTime = 0;
388
399
  _a.label = 6;
389
400
  case 6:
390
- if (!(requestTime < maxRequestTimes)) return [3, 15];
401
+ if (!(requestTime < maxRequestTimes)) return [3, 18];
391
402
  _a.label = 7;
392
403
  case 7:
393
- _a.trys.push([7, 9, , 12]);
394
- return [4, this.baseRequest(url, options)];
404
+ _a.trys.push([7, 12, , 15]);
405
+ if (!options.useWxCloud) return [3, 9];
406
+ return [4, this.wxCloudCallFunction(url, options)];
395
407
  case 8:
396
408
  response = _a.sent();
397
- return [3, 15];
398
- case 9:
409
+ return [3, 11];
410
+ case 9: return [4, this.baseRequest(url, options)];
411
+ case 10:
412
+ response = _a.sent();
413
+ _a.label = 11;
414
+ case 11: return [3, 18];
415
+ case 12:
399
416
  responseError_1 = _a.sent();
400
- if (!(options.withCredentials && responseError_1 && responseError_1.error === ErrorType.UNAUTHENTICATED)) return [3, 11];
417
+ if (!(options.withCredentials && responseError_1 && responseError_1.error === ErrorType.UNAUTHENTICATED)) return [3, 14];
401
418
  return [4, this.setCredentials(null)];
402
- case 10:
419
+ case 13:
403
420
  _a.sent();
404
421
  return [2, Promise.reject(responseError_1)];
405
- case 11:
406
- if (requestTime === retry
407
- || !responseError_1
408
- || responseError_1.error !== 'unreachable') {
422
+ case 14:
423
+ if (requestTime === retry || !responseError_1 || responseError_1.error !== 'unreachable') {
409
424
  return [2, Promise.reject(responseError_1)];
410
425
  }
411
- return [3, 12];
412
- case 12: return [4, this.sleep(OAuth2Client.retryInterval)];
413
- case 13:
426
+ return [3, 15];
427
+ case 15: return [4, this.sleep(OAuth2Client.retryInterval)];
428
+ case 16:
414
429
  _a.sent();
415
- _a.label = 14;
416
- case 14:
430
+ _a.label = 17;
431
+ case 17:
417
432
  requestTime++;
418
433
  return [3, 6];
419
- case 15: return [2, response];
434
+ case 18: return [2, response];
435
+ }
436
+ });
437
+ });
438
+ };
439
+ OAuth2Client.prototype.wxCloudCallFunction = function (url, options) {
440
+ var _a;
441
+ return __awaiter(this, void 0, void 0, function () {
442
+ var result, responseError, responseResult, error_3;
443
+ return __generator(this, function (_b) {
444
+ switch (_b.label) {
445
+ case 0:
446
+ result = null;
447
+ responseError = null;
448
+ _b.label = 1;
449
+ case 1:
450
+ _b.trys.push([1, 3, , 4]);
451
+ return [4, this.wxCloud.callFunction({
452
+ name: 'httpOverCallFunction',
453
+ data: {
454
+ url: url,
455
+ method: options.method,
456
+ headers: __assign({ origin: 'https://servicewechat.com' }, options.headers),
457
+ body: options.body,
458
+ },
459
+ })];
460
+ case 2:
461
+ responseResult = (_b.sent()).result;
462
+ if ((_a = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body) === null || _a === void 0 ? void 0 : _a.error_code) {
463
+ responseError = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body;
464
+ responseError.error_uri = getPathName(url);
465
+ }
466
+ else {
467
+ result = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body;
468
+ }
469
+ return [3, 4];
470
+ case 3:
471
+ error_3 = _b.sent();
472
+ responseError = {
473
+ error: ErrorType.UNREACHABLE,
474
+ error_description: error_3.message,
475
+ error_uri: getPathName(url),
476
+ };
477
+ return [3, 4];
478
+ case 4:
479
+ if (responseError) {
480
+ throw responseError;
481
+ }
482
+ else {
483
+ return [2, result];
484
+ }
485
+ return [2];
420
486
  }
421
487
  });
422
488
  });
@@ -502,7 +568,7 @@ export var OAuth2Client = (function () {
502
568
  var _this = this;
503
569
  return __generator(this, function (_a) {
504
570
  return [2, this.singlePromise.run('_refreshToken', function () { return __awaiter(_this, void 0, void 0, function () {
505
- var newCredentials, error_3;
571
+ var newCredentials, error_4;
506
572
  return __generator(this, function (_a) {
507
573
  switch (_a.label) {
508
574
  case 0:
@@ -520,13 +586,13 @@ export var OAuth2Client = (function () {
520
586
  _a.sent();
521
587
  return [2, newCredentials];
522
588
  case 4:
523
- error_3 = _a.sent();
524
- if (!(error_3.error === ErrorType.INVALID_GRANT)) return [3, 6];
589
+ error_4 = _a.sent();
590
+ if (!(error_4.error === ErrorType.INVALID_GRANT)) return [3, 6];
525
591
  return [4, this.localCredentials.setCredentials(null)];
526
592
  case 5:
527
593
  _a.sent();
528
- return [2, this.unAuthenticatedError(error_3.error_description)];
529
- case 6: return [2, Promise.reject(error_3)];
594
+ return [2, this.unAuthenticatedError(error_4.error_description)];
595
+ case 6: return [2, Promise.reject(error_4)];
530
596
  case 7: return [2];
531
597
  }
532
598
  });
@@ -536,9 +602,7 @@ export var OAuth2Client = (function () {
536
602
  };
537
603
  OAuth2Client.prototype.checkRetry = function (retry) {
538
604
  var responseError = null;
539
- if (typeof retry !== 'number'
540
- || retry < OAuth2Client.minRetry
541
- || retry > OAuth2Client.maxRetry) {
605
+ if (typeof retry !== 'number' || retry < OAuth2Client.minRetry || retry > OAuth2Client.maxRetry) {
542
606
  responseError = {
543
607
  error: ErrorType.UNREACHABLE,
544
608
  error_description: 'wrong options param: retry',
@@ -571,7 +635,7 @@ export var OAuth2Client = (function () {
571
635
  var _this = this;
572
636
  return __generator(this, function (_a) {
573
637
  return [2, this.singlePromise.run('_anonymous', function () { return __awaiter(_this, void 0, void 0, function () {
574
- var newCredentials, error_4;
638
+ var newCredentials, error_5;
575
639
  return __generator(this, function (_a) {
576
640
  switch (_a.label) {
577
641
  case 0:
@@ -595,13 +659,13 @@ export var OAuth2Client = (function () {
595
659
  _a.sent();
596
660
  return [2, newCredentials];
597
661
  case 4:
598
- error_4 = _a.sent();
599
- if (!(error_4.error === ErrorType.INVALID_GRANT)) return [3, 6];
662
+ error_5 = _a.sent();
663
+ if (!(error_5.error === ErrorType.INVALID_GRANT)) return [3, 6];
600
664
  return [4, this.localCredentials.setCredentials(null)];
601
665
  case 5:
602
666
  _a.sent();
603
- return [2, this.unAuthenticatedError(error_4.error_description)];
604
- case 6: return [2, Promise.reject(error_4)];
667
+ return [2, this.unAuthenticatedError(error_5.error_description)];
668
+ case 6: return [2, Promise.reject(error_5)];
605
669
  case 7: return [2];
606
670
  }
607
671
  });
@@ -650,9 +714,7 @@ export var OAuth2Client = (function () {
650
714
  return [4, this.storage.getItem(DeviceIdSectionName)];
651
715
  case 1:
652
716
  deviceId = _a.sent();
653
- if (!!(typeof deviceId === 'string'
654
- && deviceId.length >= 16
655
- && deviceId.length <= 48)) return [3, 3];
717
+ if (!!(typeof deviceId === 'string' && deviceId.length >= 16 && deviceId.length <= 48)) return [3, 3];
656
718
  deviceId = uuidv4();
657
719
  return [4, this.storage.setItem(DeviceIdSectionName, deviceId)];
658
720
  case 2:
@@ -678,4 +740,4 @@ export var OAuth2Client = (function () {
678
740
  OAuth2Client.retryInterval = 1000;
679
741
  return OAuth2Client;
680
742
  }());
681
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFhbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFFaEUsSUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUE7QUFDMUMsSUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUE7QUFDeEMsSUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUE7QUFVdkMsTUFBTSxDQUFDLElBQU0sY0FBYyxHQUFvQixVQUM3QyxHQUFXLEVBQ1gsT0FBd0I7Ozs7OztvQkFFcEIsTUFBTSxHQUFhLElBQUksQ0FBQTtvQkFDdkIsYUFBYSxHQUF5QixJQUFJLENBQUE7Ozs7b0JBR3RDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtvQkFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7d0JBQ3ZCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO3FCQUMzQjtvQkFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksT0FBTyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDNUQsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtxQkFDcEQ7b0JBQ2dDLFdBQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENB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ckMsbUJBQUM7Q0FBQSxBQXJXRCxJQXFXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVycm9yVHlwZSB9IGZyb20gJy4vY29uc3RzJ1xuaW1wb3J0IHsgQXBpVXJscywgQXBpVXJsc1YyIH0gZnJvbSAnLi4vYXV0aC9jb25zdHMnXG5cbmltcG9ydCB7IEF1dGhDbGllbnQsIFNpbXBsZVN0b3JhZ2UgfSBmcm9tICcuL2ludGVyZmFjZSdcblxuaW1wb3J0IHtcbiAgQ3JlZGVudGlhbHMsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBSZXF1ZXN0RnVuY3Rpb24sXG4gIE9BdXRoMkNsaWVudE9wdGlvbnMsXG4gIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyxcbn0gZnJvbSAnLi9tb2RlbHMnXG5cbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gJy4uL3V0aWxzL3V1aWQnXG5cbmltcG9ydCB7IFNpbmdsZVByb21pc2UgfSBmcm9tICcuLi91dGlscy9mdW5jdGlvbi9zaW5nbGUtcHJvbWlzZSdcblxuY29uc3QgUmVxdWVzdElkSGVhZGVyTmFtZSA9ICd4LXJlcXVlc3QtaWQnXG5jb25zdCBEZXZpY2VJZEhlYWRlck5hbWUgPSAneC1kZXZpY2UtaWQnXG5jb25zdCBEZXZpY2VJZFNlY3Rpb25OYW1lID0gJ2RldmljZV9pZCdcblxuZXhwb3J0IGludGVyZmFjZSBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zIHtcbiAgZXJyb3I/OiBFcnJvclR5cGU7XG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbDtcbiAgZXJyb3JfdXJpPzogc3RyaW5nIHwgbnVsbDtcbiAgZGV0YWlscz86IGFueSB8IG51bGw7XG59XG5cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZXF1ZXN0OiBSZXF1ZXN0RnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiA8VD4oXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8VD4ge1xuICBsZXQgcmVzdWx0OiBUIHwgbnVsbCA9IG51bGxcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICB0cnkge1xuICAgIC8vIE9iamVjdHMgbXVzdCBiZSBjb3BpZWQgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgZGF0YSBzdWNoIGFzIGJvZHkuXG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKVxuICAgIGlmICghY29weU9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBjb3B5T3B0aW9ucy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICBpZiAoY29weU9wdGlvbnMuYm9keSAmJiB0eXBlb2YgY29weU9wdGlvbnMuYm9keSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvcHlPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShjb3B5T3B0aW9ucy5ib2R5KVxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZVJlc3VsdDogUmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIGNvcHlPcHRpb25zKVxuICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlUmVzdWx0Lmpzb24oKVxuICAgIGlmIChqc29uUmVzcG9uc2U/LmVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ganNvblJlc3BvbnNlIGFzIFJlc3BvbnNlRXJyb3JcbiAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGpzb25SZXNwb25zZSBhcyBUXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IG5ldyBVUkwodXJsKS5wYXRobmFtZSxcbiAgICB9XG4gIH1cbiAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0b1Jlc3BvbnNlRXJyb3IgPSAoXG4gIGVycm9yOiBSZXNwb25zZUVycm9yIHwgRXJyb3IsXG4gIG9wdGlvbnM/OiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zLFxuKTogUmVzcG9uc2VFcnJvciA9PiB7XG4gIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yXG4gIGNvbnN0IGZvcm1hdE9wdGlvbnM6IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IGZvcm1hdE9wdGlvbnMuZXJyb3JfdXJpLFxuICAgICAgZGV0YWlsczogZm9ybWF0T3B0aW9ucy5kZXRhaWxzIHx8IGVycm9yLnN0YWNrLFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmb3JtYXRFcnJvcjogVG9SZXNwb25zZUVycm9yT3B0aW9ucyA9IGVycm9yIHx8IHt9XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IGZvcm1hdEVycm9yLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOlxuICAgICAgICBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGZvcm1hdEVycm9yLmVycm9yX2Rlc2NyaXB0aW9uLFxuICAgICAgZXJyb3JfdXJpOiBmb3JtYXRPcHRpb25zLmVycm9yX3VyaSB8fCBmb3JtYXRFcnJvci5lcnJvcl91cmksXG4gICAgICBkZXRhaWxzOiBmb3JtYXRPcHRpb25zLmRldGFpbHMgfHwgZm9ybWF0RXJyb3IuZGV0YWlscyxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlRXJyb3Jcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSByZXF1ZXN0IGlkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSZXF1ZXN0SWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHV1aWR2NCgpXG59XG5cblxuLyoqXG4gKiBEZWZhdWx0IFN0b3JhZ2UuXG4gKi9cbmNsYXNzIERlZmF1bHRTdG9yYWdlIGltcGxlbWVudHMgU2ltcGxlU3RvcmFnZSB7XG4gIC8qKlxuICAgICAqIEdldCBpdGVtLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKi9cbiAgYXN5bmMgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KVxuICB9XG5cbiAgLyoqXG4gICAgICogUmVtb3ZlIGl0ZW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgICAqL1xuICBhc3luYyByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgfVxuXG4gIC8qKlxuICAgICAqIFNldCBpdGVtLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICAgKi9cbiAgYXN5bmMgc2V0SXRlbShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAgICogR2V0IGl0ZW0gc3luYy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAgICovXG4gIGdldEl0ZW1TeW5jKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gIH1cblxuICAvKipcbiAgICAgKiBSZW1vdmUgaXRlbSBzeW5jLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKi9cbiAgcmVtb3ZlSXRlbVN5bmMoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KVxuICB9XG5cbiAgLyoqXG4gICAgICogU2V0IGl0ZW0gc3luYy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAgICovXG4gIHNldEl0ZW1TeW5jKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTdG9yYWdlID0gbmV3IERlZmF1bHRTdG9yYWdlKClcblxuaW50ZXJmYWNlIExvY2FsQ3JlZGVudGlhbHNPcHRpb25zIHtcbiAgdG9rZW5TZWN0aW9uTmFtZTogc3RyaW5nO1xuICBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGNyZWRlbnRpYWxzIGlzIGV4cGlyZWQuXG4gKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDcmVkZW50aWFsc0V4cGlyZWQoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogYm9vbGVhbiB7XG4gIGxldCBpc0V4cGlyZWQgPSB0cnVlXG4gIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCAmJiBjcmVkZW50aWFscz8uYWNjZXNzX3Rva2VuKSB7XG4gICAgaXNFeHBpcmVkID0gY3JlZGVudGlhbHMuZXhwaXJlc19hdCA8IG5ldyBEYXRlKClcbiAgfVxuICByZXR1cm4gaXNFeHBpcmVkXG59XG5cbi8qKlxuICogTG9jYWwgY3JlZGVudGlhbHMuXG4gKiBMb2NhbCBjcmVkZW50aWFscywgd2l0aCBtZW1vcnkgY2FjaGUgYW5kIHN0b3JhZ2UgY2FjaGUuXG4gKiBJZiB0aGUgbWVtb3J5IGNhY2hlIGV4cGlyZXMsIHRoZSBzdG9yYWdlIGNhY2hlIGlzIGF1dG9tYXRpY2FsbHkgbG9hZGVkLlxuICovXG5jbGFzcyBMb2NhbENyZWRlbnRpYWxzIHtcbiAgcHJpdmF0ZSB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcblxuICBwcml2YXRlIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2VcblxuICBwcml2YXRlIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IG51bGwgPSBudWxsXG5cbiAgcHJpdmF0ZSBzaW5nbGVQcm9taXNlOiBTaW5nbGVQcm9taXNlID0gbmV3IFNpbmdsZVByb21pc2UoKVxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0xvY2FsQ3JlZGVudGlhbHNPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMb2NhbENyZWRlbnRpYWxzT3B0aW9ucykge1xuICAgIHRoaXMudG9rZW5TZWN0aW9uTmFtZSA9IG9wdGlvbnMudG9rZW5TZWN0aW9uTmFtZVxuICAgIHRoaXMuc3RvcmFnZSA9IG9wdGlvbnMuc3RvcmFnZVxuICB9XG5cbiAgcHVibGljIGdldFN0b3JhZ2VDcmVkZW50aWFsc1N5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbVN5bmModGhpcy50b2tlblNlY3Rpb25OYW1lLClcbiAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICBjcmVkZW50aWFscy5leHBpcmVzX2F0ID0gbmV3IERhdGUoY3JlZGVudGlhbHMuZXhwaXJlc19hdClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3JlZGVudGlhbHMgUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19pbikge1xuICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAoY3JlZGVudGlhbHMuZXhwaXJlc19pbiAtIDMwKSAqIDEwMDAsKVxuICAgICAgaWYgKHRoaXMuc3RvcmFnZSkge1xuICAgICAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY3JlZGVudGlhbHMpXG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSwgdG9rZW5TdHIpXG4gICAgICB9XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHNcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3RvcmFnZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgICB9XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3JlZGVudGlhbHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdnZXRDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZCh0aGlzLmNyZWRlbnRpYWxzKSkge1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRTdG9yYWdlQ3JlZGVudGlhbHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY3JlZGVudGlhbHNcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdG9yYWdlIGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRTdG9yYWdlQ3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX2dldFN0b3JhZ2VDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBudWxsXG4gICAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lLClcbiAgICAgIGlmICh0b2tlblN0ciAhPT0gdW5kZWZpbmVkICYmIHRva2VuU3RyICE9PSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIE9BdXRoMkNsaWVudFxuICovXG5leHBvcnQgY2xhc3MgT0F1dGgyQ2xpZW50IGltcGxlbWVudHMgQXV0aENsaWVudCB7XG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRSZXRyeSA9IDJcbiAgcHJpdmF0ZSBzdGF0aWMgbWluUmV0cnkgPSAwXG4gIHByaXZhdGUgc3RhdGljIG1heFJldHJ5ID0gNVxuICBwcml2YXRlIHN0YXRpYyByZXRyeUludGVydmFsID0gMTAwMFxuXG4gIHByaXZhdGUgYXBpT3JpZ2luOiBzdHJpbmdcbiAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nXG4gIHByaXZhdGUgcmV0cnk6IG51bWJlclxuICBwcml2YXRlIGNsaWVudFNlY3JldD86IHN0cmluZ1xuICBwcml2YXRlIGJhc2VSZXF1ZXN0OiA8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICApID0+IFByb21pc2U8VD5cbiAgcHJpdmF0ZSBsb2NhbENyZWRlbnRpYWxzOiBMb2NhbENyZWRlbnRpYWxzXG4gIHByaXZhdGUgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBwcml2YXRlIGRldmljZUlEPzogc3RyaW5nXG4gIHByaXZhdGUgdG9rZW5JblVSTD86IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5GdW5jOiAocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzPlxuICBwcml2YXRlIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG5ldyBTaW5nbGVQcm9taXNlKClcbiAgcHJpdmF0ZSBhbm9ueW1vdXNTaWduSW5GdW5jOiAoQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHMgfCB2b2lkPlxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge09BdXRoMkNsaWVudE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9BdXRoMkNsaWVudE9wdGlvbnMpIHtcbiAgICB0aGlzLmFwaU9yaWdpbiA9IG9wdGlvbnMuYXBpT3JpZ2luXG4gICAgdGhpcy5jbGllbnRJZCA9IG9wdGlvbnMuY2xpZW50SWRcbiAgICB0aGlzLnJldHJ5ID0gdGhpcy5mb3JtYXRSZXRyeShvcHRpb25zLnJldHJ5LCBPQXV0aDJDbGllbnQuZGVmYXVsdFJldHJ5KVxuICAgIGlmIChvcHRpb25zLmJhc2VSZXF1ZXN0KSB7XG4gICAgICB0aGlzLmJhc2VSZXF1ZXN0ID0gb3B0aW9ucy5iYXNlUmVxdWVzdFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJhc2VSZXF1ZXN0ID0gZGVmYXVsdFJlcXVlc3RcbiAgICB9XG4gICAgdGhpcy50b2tlbkluVVJMID0gb3B0aW9ucy50b2tlbkluVVJMXG4gICAgdGhpcy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMuc3RvcmFnZSA9IG9wdGlvbnMuc3RvcmFnZSB8fCBkZWZhdWx0U3RvcmFnZVxuICAgIHRoaXMubG9jYWxDcmVkZW50aWFscyA9IG5ldyBMb2NhbENyZWRlbnRpYWxzKHtcbiAgICAgIHRva2VuU2VjdGlvbk5hbWU6IGBjcmVkZW50aWFsc18ke29wdGlvbnMuY2xpZW50SWR9YCxcbiAgICAgIHN0b3JhZ2U6IHRoaXMuc3RvcmFnZSxcbiAgICB9KVxuICAgIHRoaXMuY2xpZW50U2VjcmV0ID0gb3B0aW9ucy5jbGllbnRTZWNyZXRcbiAgICB0aGlzLnJlZnJlc2hUb2tlbkZ1bmMgPSBvcHRpb25zLnJlZnJlc2hUb2tlbkZ1bmMgfHwgdGhpcy5kZWZhdWx0UmVmcmVzaFRva2VuRnVuY1xuICAgIHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYyA9IG9wdGlvbnMuYW5vbnltb3VzU2lnbkluRnVuY1xuICB9XG5cbiAgLyoqXG4gICAqIHNldENyZWRlbnRpYWxzIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHVibGljIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIGdldEFjY2Vzc1Rva2VuIHJldHVybiBhIHZhbGlkYXRlIGFjY2VzcyB0b2tlblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKGNyZWRlbnRpYWxzPy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuKVxuICAgIH1cbiAgICBjb25zdCByZXNwRXJyOiBSZXNwb25zZUVycm9yID0geyBlcnJvcjogRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BFcnIpXG4gIH1cblxuICAvKipcbiAgICogcmVxdWVzdCBodHRwIGxpa2Ugc2ltcGxlIGZldGNoIGFwaSwgZXhwOnJlcXVlc3QoJy92MS91c2VyL21lJywge3dpdGhDcmVkZW50aWFsczp0cnVlfSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0F1dGhDbGllbnRSZXF1ZXN0T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG4gICAgY29uc3QgcmV0cnk6IG51bWJlciA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgdGhpcy5yZXRyeSlcbiAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICBpZiAodGhpcy5oZWFkZXJzKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tSZXF1ZXN0SWRIZWFkZXJOYW1lXSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdID0gZ2VuZXJhdGVSZXF1ZXN0SWQoKVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tEZXZpY2VJZEhlYWRlck5hbWVdKSB7XG4gICAgICBjb25zdCBkZXZpY2VJZCA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlSWQoKVxuICAgICAgb3B0aW9ucy5oZWFkZXJzW0RldmljZUlkSGVhZGVyTmFtZV0gPSBkZXZpY2VJZFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2VuSW5VUkwpIHtcbiAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgIHVybCArPSAnPydcbiAgICAgICAgICB9XG4gICAgICAgICAgdXJsICs9IGBhY2Nlc3NfdG9rZW49JHtjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW59YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7Y3JlZGVudGlhbHMudG9rZW5fdHlwZX0gJHtjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW59YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNsaWVudElkICYmIHVybC5pbmRleE9mKCdjbGllbnRfaWQnKSA8IDApIHtcbiAgICAgICAgdXJsICs9IHVybC5pbmRleE9mKCc/JykgPCAwID8gJz8nIDogJyYnXG4gICAgICAgIHVybCArPSBgY2xpZW50X2lkPSR7dGhpcy5jbGllbnRJZH1gXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICB1cmwgPSB0aGlzLmFwaU9yaWdpbiArIHVybFxuICAgIH1cbiAgICBsZXQgcmVzcG9uc2U6IFQgfCBudWxsID0gbnVsbFxuICAgIGNvbnN0IG1heFJlcXVlc3RUaW1lczogbnVtYmVyID0gcmV0cnkgKyAxXG4gICAgZm9yIChcbiAgICAgIGxldCByZXF1ZXN0VGltZSA9IDA7XG4gICAgICByZXF1ZXN0VGltZSA8IG1heFJlcXVlc3RUaW1lcztcbiAgICAgIHJlcXVlc3RUaW1lKytcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iYXNlUmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGNhdGNoIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgIGlmIChvcHRpb25zLndpdGhDcmVkZW50aWFscyAmJiByZXNwb25zZUVycm9yICYmIHJlc3BvbnNlRXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlRXJyb3IpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVxdWVzdFRpbWUgPT09IHJldHJ5XG4gICAgICAgICAgfHwgIXJlc3BvbnNlRXJyb3JcbiAgICAgICAgICB8fCByZXNwb25zZUVycm9yLmVycm9yICE9PSAndW5yZWFjaGFibGUnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZUVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnNsZWVwKE9BdXRoMkNsaWVudC5yZXRyeUludGVydmFsKVxuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldCBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFscykpIHtcbiAgICAgIGlmIChjcmVkZW50aWFscyAmJiBjcmVkZW50aWFscy5zY29wZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYykge1xuICAgICAgICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbkZ1bmMoY3JlZGVudGlhbHMpXG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBjIHx8IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbihjcmVkZW50aWFscylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihjcmVkZW50aWFscylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQg5bqf5byD5o6l5Y+j77yM5Yu/55SoLiDlpoLpnIDojrflj5blh63or4Hkv6Hmga/or7fkvb/nlKggZ2V0Q3JlZGVudGlhbHMg5pa55rOVXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHNTeW5jKCk6IENyZWRlbnRpYWxzIHwgbnVsbCB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldFN0b3JhZ2VDcmVkZW50aWFsc1N5bmMoKVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgcHVibGljIGdldENyZWRlbnRpYWxzQXN5bmMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDcmVkZW50aWFscygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdjcmVkZW50aWFscyBub3QgZm91bmQnKVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHMuc2NvcGVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCcpXG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFscy5ncm91cHNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIGV4cGlyZWQgdG9rZW4uXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19yZWZyZXNoVG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8ICFjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdubyByZWZyZXNoIHRva2VuIGZvdW5kIGluIGNyZWRlbnRpYWxzJylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuRnVuYyhjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuLCBjcmVkZW50aWFscylcbiAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKVxuICAgICAgICByZXR1cm4gbmV3Q3JlZGVudGlhbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciA9PT0gRXJyb3JUeXBlLklOVkFMSURfR1JBTlQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobnVsbClcbiAgICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihlcnJvci5lcnJvcl9kZXNjcmlwdGlvbilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayByZXRyeSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHByaXZhdGUgY2hlY2tSZXRyeShyZXRyeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHJldHJ5ICE9PSAnbnVtYmVyJ1xuICAgICAgfHwgcmV0cnkgPCBPQXV0aDJDbGllbnQubWluUmV0cnlcbiAgICAgIHx8IHJldHJ5ID4gT0F1dGgyQ2xpZW50Lm1heFJldHJ5XG4gICAgKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ3dyb25nIG9wdGlvbnMgcGFyYW06IHJldHJ5JyxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgIHRocm93IHJlc3BvbnNlRXJyb3JcbiAgICB9XG4gICAgcmV0dXJuIHJldHJ5XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHJldHJ5IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmV0cnlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWxlXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHByaXZhdGUgZm9ybWF0UmV0cnkocmV0cnk6IG51bWJlciwgZGVmYXVsdFZhbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiByZXRyeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jaGVja1JldHJ5KHJldHJ5KVxuICB9XG5cbiAgLyoqXG4gICAqIFNsZWVwLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSwgbXMpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBhbm9ueW1vdXMgc2lnbkluXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhbm9ueW1vdXNTaWduSW4oY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdfYW5vbnltb3VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5zY29wZSAhPT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ25vIGFub255bW91cyBpbiBjcmVkZW50aWFscycpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlcXVlc3QoJy9hdXRoL3YxL3NpZ25pbi9hbm9ueW1vdXNseScsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudFNlY3JldCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG4gICAgICAgIHJldHVybiBuZXdDcmVkZW50aWFsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmVycm9yID09PSBFcnJvclR5cGUuSU5WQUxJRF9HUkFOVCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcmVmcmVzaCB0b2tlbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hUb2tlblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVmYXVsdFJlZnJlc2hUb2tlbkZ1bmMocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGlmIChyZWZyZXNoVG9rZW4gPT09IHVuZGVmaW5lZCB8fCByZWZyZXNoVG9rZW4gPT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcigncmVmcmVzaCB0b2tlbiBub3QgZm91bmQnKVxuICAgIH1cblxuICAgIGxldCB1cmw6IHN0cmluZyA9IEFwaVVybHMuQVVUSF9UT0tFTl9VUkxcblxuICAgIGlmIChjcmVkZW50aWFscz8udmVyc2lvbiA9PT0gJ3YyJykge1xuICAgICAgdXJsID0gQXBpVXJsc1YyLkFVVEhfVE9LRU5fVVJMXG4gICAgfVxuXG4gICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIGNsaWVudF9pZDogdGhpcy5jbGllbnRJZCxcbiAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5jbGllbnRTZWNyZXQsXG4gICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHsgLi4ubmV3Q3JlZGVudGlhbHMsIHZlcnNpb246IGNyZWRlbnRpYWxzPy52ZXJzaW9uIHx8ICd2MScgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXZpY2VJZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VJZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmRldmljZUlEKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXZpY2VJRFxuICAgIH1cbiAgICBsZXQgZGV2aWNlSWQ6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKERldmljZUlkU2VjdGlvbk5hbWUsKVxuICAgIGlmICghKHR5cGVvZiBkZXZpY2VJZCA9PT0gJ3N0cmluZydcbiAgICAgICYmIGRldmljZUlkLmxlbmd0aCA+PSAxNlxuICAgICAgJiYgZGV2aWNlSWQubGVuZ3RoIDw9IDQ4KSkge1xuICAgICAgZGV2aWNlSWQgPSB1dWlkdjQoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0oRGV2aWNlSWRTZWN0aW9uTmFtZSwgZGV2aWNlSWQpXG4gICAgfVxuICAgIHRoaXMuZGV2aWNlSUQgPSBkZXZpY2VJZFxuICAgIHJldHVybiBkZXZpY2VJZFxuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB1bkF1dGhlbnRpY2F0ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJcbiAgICogQHJldHVybiB7UHJvbWlzZTxUPn1cbiAgICovXG4gIHByaXZhdGUgdW5BdXRoZW50aWNhdGVkRXJyb3I8VD4oZXJyPzogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcEVycjogUmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVELFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycixcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BFcnIpXG4gIH1cbn1cbiJdfQ==
743
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDbkQsT0FBTyxjQUFjLE1BQU0seUJBQXlCLENBQUE7QUFhcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBRWhFLElBQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFBO0FBQzFDLElBQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFBO0FBQ3hDLElBQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFBO0FBV3ZDLE1BQU0sQ0FBQyxJQUFNLGNBQWMsR0FBb0IsVUFBbUIsR0FBVyxFQUFFLE9BQXdCOzs7Ozs7b0JBQ2pHLE1BQU0sR0FBYSxJQUFJLENBQUE7b0JBQ3ZCLGFBQWEsR0FBeUIsSUFBSSxDQUFBOzs7O29CQUd0QyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7b0JBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO3dCQUN2QixXQUFXLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtxQkFDM0I7b0JBQ0QsSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLE9BQU8sV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7d0JBQzVELFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMs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QUFRLEdBQUcsTUFBTSxFQUFFLENBQUE7d0JBQ25CLFdBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUE7O3dCQUF6RCxTQUF5RCxDQUFBOzs7d0JBRTNELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO3dCQUN4QixXQUFPLFFBQVEsRUFBQTs7OztLQUNoQjtJQU1PLDJDQUFvQixHQUE1QixVQUFnQyxHQUFZO1FBQzFDLElBQU0sT0FBTyxHQUFrQjtZQUM3QixLQUFLLEVBQUUsU0FBUyxDQUFDLGVBQWU7WUFDaEMsaUJBQWlCLEVBQUUsR0FBRztTQUN2QixDQUFBO1FBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFyWWMseUJBQVksR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNoQixxQkFBUSxHQUFHLENBQUMsQUFBSixDQUFJO0lBQ1oscUJBQVEsR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNaLDBCQUFhLEdBQUcsSUFBSSxBQUFQLENBQU87SUFtWXJDLG1CQUFDO0NBQUEsQUF2WUQsSUF1WUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFcnJvclR5cGUgfSBmcm9tICcuL2NvbnN0cydcbmltcG9ydCB7IEFwaVVybHMsIEFwaVVybHNWMiB9IGZyb20gJy4uL2F1dGgvY29uc3RzJ1xuaW1wb3J0IGFkYXB0ZXJGb3JXeE1wIGZyb20gJ2Nsb3VkYmFzZS1hZGFwdGVyLXd4X21wJ1xuXG5pbXBvcnQgeyBBdXRoQ2xpZW50LCBTaW1wbGVTdG9yYWdlIH0gZnJvbSAnLi9pbnRlcmZhY2UnXG5cbmltcG9ydCB7XG4gIENyZWRlbnRpYWxzLFxuICBSZXNwb25zZUVycm9yLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgUmVxdWVzdEZ1bmN0aW9uLFxuICBPQXV0aDJDbGllbnRPcHRpb25zLFxuICBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMsXG59IGZyb20gJy4vbW9kZWxzJ1xuXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tICcuLi91dGlscy91dWlkJ1xuaW1wb3J0IHsgZ2V0UGF0aE5hbWUgfSBmcm9tICcuLi91dGlscy9pbmRleCdcblxuaW1wb3J0IHsgU2luZ2xlUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9uL3NpbmdsZS1wcm9taXNlJ1xuXG5jb25zdCBSZXF1ZXN0SWRIZWFkZXJOYW1lID0gJ3gtcmVxdWVzdC1pZCdcbmNvbnN0IERldmljZUlkSGVhZGVyTmFtZSA9ICd4LWRldmljZS1pZCdcbmNvbnN0IERldmljZUlkU2VjdGlvbk5hbWUgPSAnZGV2aWNlX2lkJ1xuXG5kZWNsYXJlIGNvbnN0IHd4OiBhbnlcblxuZXhwb3J0IGludGVyZmFjZSBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zIHtcbiAgZXJyb3I/OiBFcnJvclR5cGVcbiAgZXJyb3JfZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsXG4gIGVycm9yX3VyaT86IHN0cmluZyB8IG51bGxcbiAgZGV0YWlscz86IGFueSB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZXF1ZXN0OiBSZXF1ZXN0RnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiA8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICBsZXQgcmVzdWx0OiBUIHwgbnVsbCA9IG51bGxcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICB0cnkge1xuICAgIC8vIE9iamVjdHMgbXVzdCBiZSBjb3BpZWQgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgZGF0YSBzdWNoIGFzIGJvZHkuXG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKVxuICAgIGlmICghY29weU9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBjb3B5T3B0aW9ucy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICBpZiAoY29weU9wdGlvbnMuYm9keSAmJiB0eXBlb2YgY29weU9wdGlvbnMuYm9keSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvcHlPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShjb3B5T3B0aW9ucy5ib2R5KVxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZVJlc3VsdDogUmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIGNvcHlPcHRpb25zKVxuICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlUmVzdWx0Lmpzb24oKVxuICAgIGlmIChqc29uUmVzcG9uc2U/LmVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ganNvblJlc3BvbnNlIGFzIFJlc3BvbnNlRXJyb3JcbiAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGpzb25SZXNwb25zZSBhcyBUXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IG5ldyBVUkwodXJsKS5wYXRobmFtZSxcbiAgICB9XG4gIH1cbiAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0b1Jlc3BvbnNlRXJyb3IgPSAoZXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBFcnJvciwgb3B0aW9ucz86IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMpOiBSZXNwb25zZUVycm9yID0+IHtcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3JcbiAgY29uc3QgZm9ybWF0T3B0aW9uczogVG9SZXNwb25zZUVycm9yT3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IGZvcm1hdE9wdGlvbnMuZXJyb3IgfHwgRXJyb3JUeXBlLkxPQ0FMLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGZvcm1hdE9wdGlvbnMuZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IubWVzc2FnZSxcbiAgICAgIGVycm9yX3VyaTogZm9ybWF0T3B0aW9ucy5lcnJvcl91cmksXG4gICAgICBkZXRhaWxzOiBmb3JtYXRPcHRpb25zLmRldGFpbHMgfHwgZXJyb3Iuc3RhY2ssXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZvcm1hdEVycm9yOiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zID0gZXJyb3IgfHwge31cbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IGZvcm1hdE9wdGlvbnMuZXJyb3IgfHwgZm9ybWF0RXJyb3IuZXJyb3IgfHwgRXJyb3JUeXBlLkxPQ0FMLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGZvcm1hdE9wdGlvbnMuZXJyb3JfZGVzY3JpcHRpb24gfHwgZm9ybWF0RXJyb3IuZXJyb3JfZGVzY3JpcHRpb24sXG4gICAgICBlcnJvcl91cmk6IGZvcm1hdE9wdGlvbnMuZXJyb3JfdXJpIHx8IGZvcm1hdEVycm9yLmVycm9yX3VyaSxcbiAgICAgIGRldGFpbHM6IGZvcm1hdE9wdGlvbnMuZGV0YWlscyB8fCBmb3JtYXRFcnJvci5kZXRhaWxzLFxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzcG9uc2VFcnJvclxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHJlcXVlc3QgaWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJlcXVlc3RJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gdXVpZHY0KClcbn1cblxuLyoqXG4gKiBEZWZhdWx0IFN0b3JhZ2UuXG4gKi9cbmNsYXNzIERlZmF1bHRTdG9yYWdlIGltcGxlbWVudHMgU2ltcGxlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBHZXQgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgYXN5bmMgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBpdGVtLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBhc3luYyByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICovXG4gIGFzeW5jIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBnZXRJdGVtU3luYyhrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBpdGVtIHN5bmMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIHJlbW92ZUl0ZW1TeW5jKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKi9cbiAgc2V0SXRlbVN5bmMoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSlcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFN0b3JhZ2UgPSBuZXcgRGVmYXVsdFN0b3JhZ2UoKVxuXG5pbnRlcmZhY2UgTG9jYWxDcmVkZW50aWFsc09wdGlvbnMge1xuICB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcbiAgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGNyZWRlbnRpYWxzIGlzIGV4cGlyZWQuXG4gKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDcmVkZW50aWFsc0V4cGlyZWQoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogYm9vbGVhbiB7XG4gIGxldCBpc0V4cGlyZWQgPSB0cnVlXG4gIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCAmJiBjcmVkZW50aWFscz8uYWNjZXNzX3Rva2VuKSB7XG4gICAgaXNFeHBpcmVkID0gY3JlZGVudGlhbHMuZXhwaXJlc19hdCA8IG5ldyBEYXRlKClcbiAgfVxuICByZXR1cm4gaXNFeHBpcmVkXG59XG5cbi8qKlxuICogTG9jYWwgY3JlZGVudGlhbHMuXG4gKiBMb2NhbCBjcmVkZW50aWFscywgd2l0aCBtZW1vcnkgY2FjaGUgYW5kIHN0b3JhZ2UgY2FjaGUuXG4gKiBJZiB0aGUgbWVtb3J5IGNhY2hlIGV4cGlyZXMsIHRoZSBzdG9yYWdlIGNhY2hlIGlzIGF1dG9tYXRpY2FsbHkgbG9hZGVkLlxuICovXG5jbGFzcyBMb2NhbENyZWRlbnRpYWxzIHtcbiAgcHJpdmF0ZSB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcblxuICBwcml2YXRlIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2VcblxuICBwcml2YXRlIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IG51bGwgPSBudWxsXG5cbiAgcHJpdmF0ZSBzaW5nbGVQcm9taXNlOiBTaW5nbGVQcm9taXNlID0gbmV3IFNpbmdsZVByb21pc2UoKVxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0xvY2FsQ3JlZGVudGlhbHNPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMb2NhbENyZWRlbnRpYWxzT3B0aW9ucykge1xuICAgIHRoaXMudG9rZW5TZWN0aW9uTmFtZSA9IG9wdGlvbnMudG9rZW5TZWN0aW9uTmFtZVxuICAgIHRoaXMuc3RvcmFnZSA9IG9wdGlvbnMuc3RvcmFnZVxuICB9XG5cbiAgcHVibGljIGdldFN0b3JhZ2VDcmVkZW50aWFsc1N5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbVN5bmModGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgIGlmICh0b2tlblN0ciAhPT0gdW5kZWZpbmVkICYmIHRva2VuU3RyICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjcmVkZW50aWFscyA9IEpTT04ucGFyc2UodG9rZW5TdHIpXG4gICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgIGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQgPSBuZXcgRGF0ZShjcmVkZW50aWFscy5leHBpcmVzX2F0KVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgICAgIGNyZWRlbnRpYWxzID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRDcmVkZW50aWFscyBQcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBmZXRjaCBhcGkgcmVxdWVzdCBpbXBsZW1lbnRhdGlvbiB3aXRoIGF1dGggY3JlZGVudGlhbHNcbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2luKSB7XG4gICAgICBjcmVkZW50aWFscy5leHBpcmVzX2F0ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIChjcmVkZW50aWFscy5leHBpcmVzX2luIC0gMzApICogMTAwMClcbiAgICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUsIHRva2VuU3RyKVxuICAgICAgfVxuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgfVxuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNyZWRlbnRpYWxzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignZ2V0Q3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoaXNDcmVkZW50aWFsc0V4cGlyZWQodGhpcy5jcmVkZW50aWFscykpIHtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0U3RvcmFnZUNyZWRlbnRpYWxzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RvcmFnZSBjcmVkZW50aWFscy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0U3RvcmFnZUNyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19nZXRTdG9yYWdlQ3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIGlmICh0b2tlblN0ciAhPT0gdW5kZWZpbmVkICYmIHRva2VuU3RyICE9PSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIE9BdXRoMkNsaWVudFxuICovXG5leHBvcnQgY2xhc3MgT0F1dGgyQ2xpZW50IGltcGxlbWVudHMgQXV0aENsaWVudCB7XG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRSZXRyeSA9IDJcbiAgcHJpdmF0ZSBzdGF0aWMgbWluUmV0cnkgPSAwXG4gIHByaXZhdGUgc3RhdGljIG1heFJldHJ5ID0gNVxuICBwcml2YXRlIHN0YXRpYyByZXRyeUludGVydmFsID0gMTAwMFxuXG4gIHByaXZhdGUgYXBpT3JpZ2luOiBzdHJpbmdcbiAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nXG4gIHByaXZhdGUgcmV0cnk6IG51bWJlclxuICBwcml2YXRlIGNsaWVudFNlY3JldD86IHN0cmluZ1xuICBwcml2YXRlIGJhc2VSZXF1ZXN0OiA8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxUPlxuICBwcml2YXRlIGxvY2FsQ3JlZGVudGlhbHM6IExvY2FsQ3JlZGVudGlhbHNcbiAgcHJpdmF0ZSBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG4gIHByaXZhdGUgZGV2aWNlSUQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSB0b2tlbkluVVJMPzogYm9vbGVhblxuICBwcml2YXRlIHJlZnJlc2hUb2tlbkZ1bmM6IChyZWZyZXNoVG9rZW4/OiBzdHJpbmcsIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHM+XG4gIHByaXZhdGUgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgcHJpdmF0ZSBzaW5nbGVQcm9taXNlOiBTaW5nbGVQcm9taXNlID0gbmV3IFNpbmdsZVByb21pc2UoKVxuICBwcml2YXRlIGFub255bW91c1NpZ25JbkZ1bmM6IChDcmVkZW50aWFscykgPT4gUHJvbWlzZTxDcmVkZW50aWFscyB8IHZvaWQ+XG4gIHByaXZhdGUgd3hDbG91ZDogYW55XG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7T0F1dGgyQ2xpZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT0F1dGgyQ2xpZW50T3B0aW9ucykge1xuICAgIHRoaXMuYXBpT3JpZ2luID0gb3B0aW9ucy5hcGlPcmlnaW5cbiAgICB0aGlzLmNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZFxuICAgIHRoaXMucmV0cnkgPSB0aGlzLmZvcm1hdFJldHJ5KG9wdGlvbnMucmV0cnksIE9BdXRoMkNsaWVudC5kZWZhdWx0UmV0cnkpXG4gICAgaWYgKG9wdGlvbnMuYmFzZVJlcXVlc3QpIHtcbiAgICAgIHRoaXMuYmFzZVJlcXVlc3QgPSBvcHRpb25zLmJhc2VSZXF1ZXN0XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFzZVJlcXVlc3QgPSBkZWZhdWx0UmVxdWVzdFxuICAgIH1cbiAgICB0aGlzLnRva2VuSW5VUkwgPSBvcHRpb25zLnRva2VuSW5VUkxcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnNcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5zdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlIHx8IGRlZmF1bHRTdG9yYWdlXG4gICAgdGhpcy5sb2NhbENyZWRlbnRpYWxzID0gbmV3IExvY2FsQ3JlZGVudGlhbHMoe1xuICAgICAgdG9rZW5TZWN0aW9uTmFtZTogYGNyZWRlbnRpYWxzXyR7b3B0aW9ucy5jbGllbnRJZH1gLFxuICAgICAgc3RvcmFnZTogdGhpcy5zdG9yYWdlLFxuICAgIH0pXG4gICAgdGhpcy5jbGllbnRTZWNyZXQgPSBvcHRpb25zLmNsaWVudFNlY3JldFxuICAgIHRoaXMud3hDbG91ZCA9IG9wdGlvbnMud3hDbG91ZFxuICAgIHRyeSB7XG4gICAgICBpZiAoYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpICYmIHRoaXMud3hDbG91ZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuZW52KSB7XG4gICAgICAgIHd4LmNsb3VkLmluaXQoeyBlbnY6IG9wdGlvbnMuZW52IH0pXG4gICAgICAgIHRoaXMud3hDbG91ZCA9IHd4LmNsb3VkXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vXG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFRva2VuRnVuYyA9IG9wdGlvbnMucmVmcmVzaFRva2VuRnVuYyB8fCB0aGlzLmRlZmF1bHRSZWZyZXNoVG9rZW5GdW5jXG4gICAgdGhpcy5hbm9ueW1vdXNTaWduSW5GdW5jID0gb3B0aW9ucy5hbm9ueW1vdXNTaWduSW5GdW5jXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3JlZGVudGlhbHMgUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwdWJsaWMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogZ2V0QWNjZXNzVG9rZW4gcmV0dXJuIGEgdmFsaWRhdGUgYWNjZXNzIHRva2VuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoY3JlZGVudGlhbHM/LmFjY2Vzc190b2tlbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4pXG4gICAgfVxuICAgIGNvbnN0IHJlc3BFcnI6IFJlc3BvbnNlRXJyb3IgPSB7IGVycm9yOiBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcEVycilcbiAgfVxuXG4gIC8qKlxuICAgKiByZXF1ZXN0IGh0dHAgbGlrZSBzaW1wbGUgZmV0Y2ggYXBpLCBleHA6cmVxdWVzdCgnL3YxL3VzZXIvbWUnLCB7d2l0aENyZWRlbnRpYWxzOnRydWV9KVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7QXV0aENsaWVudFJlcXVlc3RPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgfVxuICAgIGNvbnN0IHJldHJ5OiBudW1iZXIgPSB0aGlzLmZvcm1hdFJldHJ5KG9wdGlvbnMucmV0cnksIHRoaXMucmV0cnkpXG4gICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gICAgaWYgKHRoaXMuaGVhZGVycykge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAuLi50aGlzLmhlYWRlcnMsXG4gICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnNbUmVxdWVzdElkSGVhZGVyTmFtZV0pIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVyc1tSZXF1ZXN0SWRIZWFkZXJOYW1lXSA9IGdlbmVyYXRlUmVxdWVzdElkKClcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnNbRGV2aWNlSWRIZWFkZXJOYW1lXSkge1xuICAgICAgY29uc3QgZGV2aWNlSWQgPSBhd2FpdCB0aGlzLmdldERldmljZUlkKClcbiAgICAgIG9wdGlvbnMuaGVhZGVyc1tEZXZpY2VJZEhlYWRlck5hbWVdID0gZGV2aWNlSWRcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LndpdGhDcmVkZW50aWFscykge1xuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICBpZiAodGhpcy50b2tlbkluVVJMKSB7XG4gICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XG4gICAgICAgICAgICB1cmwgKz0gJz8nXG4gICAgICAgICAgfVxuICAgICAgICAgIHVybCArPSBgYWNjZXNzX3Rva2VuPSR7Y3JlZGVudGlhbHMuYWNjZXNzX3Rva2VufWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGAke2NyZWRlbnRpYWxzLnRva2VuX3R5cGV9ICR7Y3JlZGVudGlhbHMuYWNjZXNzX3Rva2VufWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jbGllbnRJZCAmJiB1cmwuaW5kZXhPZignY2xpZW50X2lkJykgPCAwKSB7XG4gICAgICAgIHVybCArPSB1cmwuaW5kZXhPZignPycpIDwgMCA/ICc/JyA6ICcmJ1xuICAgICAgICB1cmwgKz0gYGNsaWVudF9pZD0ke3RoaXMuY2xpZW50SWR9YFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgdXJsID0gdGhpcy5hcGlPcmlnaW4gKyB1cmxcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlOiBUIHwgbnVsbCA9IG51bGxcbiAgICBjb25zdCBtYXhSZXF1ZXN0VGltZXM6IG51bWJlciA9IHJldHJ5ICsgMVxuICAgIGZvciAobGV0IHJlcXVlc3RUaW1lID0gMDsgcmVxdWVzdFRpbWUgPCBtYXhSZXF1ZXN0VGltZXM7IHJlcXVlc3RUaW1lKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZVd4Q2xvdWQpIHtcbiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMud3hDbG91ZENhbGxGdW5jdGlvbjxUPih1cmwsIG9wdGlvbnMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJhc2VSZXF1ZXN0PFQ+KHVybCwgb3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAocmVzcG9uc2VFcnJvcikge1xuICAgICAgICBpZiAob3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgJiYgcmVzcG9uc2VFcnJvciAmJiByZXNwb25zZUVycm9yLmVycm9yID09PSBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZUVycm9yKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RUaW1lID09PSByZXRyeSB8fCAhcmVzcG9uc2VFcnJvciB8fCByZXNwb25zZUVycm9yLmVycm9yICE9PSAndW5yZWFjaGFibGUnKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlRXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuc2xlZXAoT0F1dGgyQ2xpZW50LnJldHJ5SW50ZXJ2YWwpXG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHd4Q2xvdWRDYWxsRnVuY3Rpb248VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgcmVzdWx0OiBUIHwgbnVsbCA9IG51bGxcbiAgICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiByZXNwb25zZVJlc3VsdCB9ID0gYXdhaXQgdGhpcy53eENsb3VkLmNhbGxGdW5jdGlvbih7XG4gICAgICAgIG5hbWU6ICdodHRwT3ZlckNhbGxGdW5jdGlvbicsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBvcmlnaW46ICdodHRwczovL3NlcnZpY2V3ZWNoYXQuY29tJyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChyZXNwb25zZVJlc3VsdD8uYm9keT8uZXJyb3JfY29kZSkge1xuICAgICAgICByZXNwb25zZUVycm9yID0gcmVzcG9uc2VSZXN1bHQ/LmJvZHkgYXMgUmVzcG9uc2VFcnJvclxuICAgICAgICByZXNwb25zZUVycm9yLmVycm9yX3VyaSA9IGdldFBhdGhOYW1lKHVybClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3BvbnNlUmVzdWx0Py5ib2R5IGFzIFRcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIGVycm9yX3VyaTogZ2V0UGF0aE5hbWUodXJsKSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFscykpIHtcbiAgICAgIGlmIChjcmVkZW50aWFscyAmJiBjcmVkZW50aWFscy5zY29wZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYykge1xuICAgICAgICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbkZ1bmMoY3JlZGVudGlhbHMpXG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBjIHx8IChhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuYW5vbnltb3VzU2lnbkluKGNyZWRlbnRpYWxzKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCDlup/lvIPmjqXlj6PvvIzli7/nlKguIOWmgumcgOiOt+WPluWHreivgeS/oeaBr+ivt+S9v+eUqCBnZXRDcmVkZW50aWFscyDmlrnms5VcbiAgICovXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFsc1N5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0U3RvcmFnZUNyZWRlbnRpYWxzU3luYygpXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHNBc3luYygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCcpXG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFscy5zY29wZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEdyb3VwcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcignY3JlZGVudGlhbHMgbm90IGZvdW5kJylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzLmdyb3Vwc1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggZXhwaXJlZCB0b2tlbi5cbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX3JlZnJlc2hUb2tlbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgIWNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ25vIHJlZnJlc2ggdG9rZW4gZm91bmQgaW4gY3JlZGVudGlhbHMnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5GdW5jKGNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4sIGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG4gICAgICAgIHJldHVybiBuZXdDcmVkZW50aWFsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmVycm9yID09PSBFcnJvclR5cGUuSU5WQUxJRF9HUkFOVCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHJldHJ5IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmV0cnlcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1JldHJ5KHJldHJ5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgICBpZiAodHlwZW9mIHJldHJ5ICE9PSAnbnVtYmVyJyB8fCByZXRyeSA8IE9BdXRoMkNsaWVudC5taW5SZXRyeSB8fCByZXRyeSA+IE9BdXRoMkNsaWVudC5tYXhSZXRyeSkge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246ICd3cm9uZyBvcHRpb25zIHBhcmFtOiByZXRyeScsXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gICAgfVxuICAgIHJldHVybiByZXRyeVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCByZXRyeSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsZVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFJldHJ5KHJldHJ5OiBudW1iZXIsIGRlZmF1bHRWYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgcmV0cnkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbGVcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tSZXRyeShyZXRyeSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTbGVlcC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0sIG1zKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogYW5vbnltb3VzIHNpZ25JblxuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYW5vbnltb3VzU2lnbkluKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX2Fub255bW91cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgY3JlZGVudGlhbHMuc2NvcGUgIT09ICdhbm9ueW1vdXMnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdubyBhbm9ueW1vdXMgaW4gY3JlZGVudGlhbHMnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCcvYXV0aC92MS9zaWduaW4vYW5vbnltb3VzbHknLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5jbGllbnRTZWNyZXQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKVxuICAgICAgICByZXR1cm4gbmV3Q3JlZGVudGlhbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciA9PT0gRXJyb3JUeXBlLklOVkFMSURfR1JBTlQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobnVsbClcbiAgICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihlcnJvci5lcnJvcl9kZXNjcmlwdGlvbilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJlZnJlc2ggdG9rZW4gZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlZmF1bHRSZWZyZXNoVG9rZW5GdW5jKHJlZnJlc2hUb2tlbj86IHN0cmluZywgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBpZiAocmVmcmVzaFRva2VuID09PSB1bmRlZmluZWQgfHwgcmVmcmVzaFRva2VuID09PSAnJykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ3JlZnJlc2ggdG9rZW4gbm90IGZvdW5kJylcbiAgICB9XG5cbiAgICBsZXQgdXJsOiBzdHJpbmcgPSBBcGlVcmxzLkFVVEhfVE9LRU5fVVJMXG5cbiAgICBpZiAoY3JlZGVudGlhbHM/LnZlcnNpb24gPT09ICd2MicpIHtcbiAgICAgIHVybCA9IEFwaVVybHNWMi5BVVRIX1RPS0VOX1VSTFxuICAgIH1cblxuICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY2xpZW50U2VjcmV0LFxuICAgICAgICBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHJldHVybiB7IC4uLm5ld0NyZWRlbnRpYWxzLCB2ZXJzaW9uOiBjcmVkZW50aWFscz8udmVyc2lvbiB8fCAndjEnIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGV2aWNlSWRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGV2aWNlSWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5kZXZpY2VJRCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGV2aWNlSURcbiAgICB9XG4gICAgbGV0IGRldmljZUlkOiBzdHJpbmcgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShEZXZpY2VJZFNlY3Rpb25OYW1lKVxuICAgIGlmICghKHR5cGVvZiBkZXZpY2VJZCA9PT0gJ3N0cmluZycgJiYgZGV2aWNlSWQubGVuZ3RoID49IDE2ICYmIGRldmljZUlkLmxlbmd0aCA8PSA0OCkpIHtcbiAgICAgIGRldmljZUlkID0gdXVpZHY0KClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXRJdGVtKERldmljZUlkU2VjdGlvbk5hbWUsIGRldmljZUlkKVxuICAgIH1cbiAgICB0aGlzLmRldmljZUlEID0gZGV2aWNlSWRcbiAgICByZXR1cm4gZGV2aWNlSWRcbiAgfVxuICAvKipcbiAgICogR2VuZXJhdGUgdW5BdXRoZW50aWNhdGVkIGVycm9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXJyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VD59XG4gICAqL1xuICBwcml2YXRlIHVuQXV0aGVudGljYXRlZEVycm9yPFQ+KGVycj86IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BFcnI6IFJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnIsXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwRXJyKVxuICB9XG59XG4iXX0=
@@ -1 +1,2 @@
1
1
  export declare const deepClone: (value: any) => any;
2
+ export declare const getPathName: (url: string) => string;
@@ -7,9 +7,7 @@ export var deepClone = function (value) {
7
7
  }
8
8
  return copiedValue;
9
9
  };
10
- var type = value === null || value === undefined
11
- ? 'NullOrUndefined'
12
- : Object.prototype.toString.call(value).slice(8, -1);
10
+ var type = value === null || value === undefined ? 'NullOrUndefined' : Object.prototype.toString.call(value).slice(8, -1);
13
11
  if ([
14
12
  'Int8Array',
15
13
  'Uint8Array',
@@ -42,4 +40,12 @@ export var deepClone = function (value) {
42
40
  return value;
43
41
  }
44
42
  };
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxDQUFDLElBQU0sU0FBUyxHQUFHLFVBQUMsS0FBVTtJQUNsQyxJQUFNLEtBQUssR0FBRyxVQUFDLFdBQWdCO1FBQzdCLEtBQUssSUFBTSxHQUFHLElBQUksS0FBSyxFQUFFO1lBRXZCLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDN0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTthQUN6QztTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQyxDQUFBO0lBRUQsSUFBTSxJQUFJLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUztRQUNoRCxDQUFDLENBQUMsaUJBQWlCO1FBQ25CLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXRELElBQ0U7UUFDRSxXQUFXO1FBQ1gsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixZQUFZO1FBQ1osYUFBYTtRQUNiLFlBQVk7UUFDWixhQUFhO1FBQ2IsY0FBYztRQUNkLGNBQWM7UUFDZCxlQUFlO1FBQ2YsZ0JBQWdCO0tBQ2pCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUNoQjtRQUNBLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO0tBQ3JCO0lBRUQsUUFBUSxJQUFJLEVBQUU7UUFDWixLQUFLLFFBQVE7WUFDWCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNELEtBQUssT0FBTztZQUNWLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2xCLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDbEMsS0FBSyxRQUFRO1lBQ1gsT0FBTyxJQUFJLE1BQU0sQ0FDZixLQUFLLENBQUMsTUFBTSxFQUNaLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQ3JCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQzdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQzVCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQ3pCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDL0IsQ0FBQTtRQUNIO1lBQ0UsT0FBTyxLQUFLLENBQUE7S0FDZjtBQUNILENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5rex5ou36LSdXG4gKiBAcGFyYW0geyp9IHZhbHVlIOmcgOimgeaLt+i0neeahOWAvFxuICogQHJldHVybnMgeyp9IOa3seaLt+i0neWQjueahOWAvFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogeyBjOiAyIH0gfTtcbiAqIGNvbnN0IG5ld09iaiA9IGRlZXBDbG9uZShvYmopO1xuICovXG5leHBvcnQgY29uc3QgZGVlcENsb25lID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgY29uc3QgY2xvbmUgPSAoY29waWVkVmFsdWU6IGFueSkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb3BpZWRWYWx1ZVtrZXldID0gZGVlcENsb25lKHZhbHVlW2tleV0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3BpZWRWYWx1ZVxuICB9XG5cbiAgY29uc3QgdHlwZSA9IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWRcbiAgICA/ICdOdWxsT3JVbmRlZmluZWQnXG4gICAgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKVxuXG4gIGlmIChcbiAgICBbXG4gICAgICAnSW50OEFycmF5JyxcbiAgICAgICdVaW50OEFycmF5JyxcbiAgICAgICdVaW50OENsYW1wZWRBcnJheScsXG4gICAgICAnSW50MTZBcnJheScsXG4gICAgICAnVWludDE2QXJyYXknLFxuICAgICAgJ0ludDMyQXJyYXknLFxuICAgICAgJ1VpbnQzMkFycmF5JyxcbiAgICAgICdGbG9hdDMyQXJyYXknLFxuICAgICAgJ0Zsb2F0NjRBcnJheScsXG4gICAgICAnQmlnSW50NjRBcnJheScsXG4gICAgICAnQmlnVWludDY0QXJyYXknLFxuICAgIF0uaW5jbHVkZXModHlwZSlcbiAgKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNsaWNlKClcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ09iamVjdCc6XG4gICAgICByZXR1cm4gY2xvbmUoT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpKSlcbiAgICBjYXNlICdBcnJheSc6XG4gICAgICByZXR1cm4gY2xvbmUoW10pXG4gICAgY2FzZSAnRGF0ZSc6XG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUudmFsdWVPZigpKVxuICAgIGNhc2UgJ1JlZ0V4cCc6XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgdmFsdWUuc291cmNlLFxuICAgICAgICAodmFsdWUuZ2xvYmFsID8gJ2cnIDogJycpXG4gICAgICAgICAgKyAodmFsdWUuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKVxuICAgICAgICAgICsgKHZhbHVlLm11bHRpbGluZSA/ICdtJyA6ICcnKVxuICAgICAgICAgICsgKHZhbHVlLnN0aWNreSA/ICd5JyA6ICcnKVxuICAgICAgICAgICsgKHZhbHVlLnVuaWNvZGUgPyAndScgOiAnJyksXG4gICAgICApXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iXX0=
43
+ export var getPathName = function (url) {
44
+ var regex = /^(?:http(s)?:\/\/[^\/]+)?(\/[^\?#]*)/;
45
+ var match = url.match(regex);
46
+ if (match) {
47
+ return match[2] || '';
48
+ }
49
+ return '';
50
+ };
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxDQUFDLElBQU0sU0FBUyxHQUFHLFVBQUMsS0FBVTtJQUNsQyxJQUFNLEtBQUssR0FBRyxVQUFDLFdBQWdCO1FBQzdCLEtBQUssSUFBTSxHQUFHLElBQUksS0FBSyxFQUFFO1lBRXZCLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDN0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTthQUN6QztTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQyxDQUFBO0lBRUQsSUFBTSxJQUFJLEdBQU0sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUU5SCxJQUNFO1FBQ0UsV0FBVztRQUNYLFlBQVk7UUFDWixtQkFBbUI7UUFDbkIsWUFBWTtRQUNaLGFBQWE7UUFDYixZQUFZO1FBQ1osYUFBYTtRQUNiLGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUNmLGdCQUFnQjtLQUNqQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDaEI7UUFDQSxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtLQUNyQjtJQUVELFFBQVEsSUFBSSxFQUFFO1FBQ1osS0FBSyxRQUFRO1lBQ1gsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzRCxLQUFLLE9BQU87WUFDVixPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNsQixLQUFLLE1BQU07WUFDVCxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQ2xDLEtBQUssUUFBUTtZQUNYLE9BQU8sSUFBSSxNQUFNLENBQ2YsS0FBSyxDQUFDLE1BQU0sRUFDWixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2tCQUNyQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2tCQUM3QixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2tCQUM1QixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2tCQUN6QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQy9CLENBQUE7UUFDSDtZQUNFLE9BQU8sS0FBSyxDQUFBO0tBQ2Y7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsSUFBTSxXQUFXLEdBQUcsVUFBQyxHQUFXO0lBRXJDLElBQU0sS0FBSyxHQUFHLHNDQUFzQyxDQUFBO0lBQ3BELElBQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFOUIsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7S0FDdEI7SUFFRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5rex5ou36LSdXG4gKiBAcGFyYW0geyp9IHZhbHVlIOmcgOimgeaLt+i0neeahOWAvFxuICogQHJldHVybnMgeyp9IOa3seaLt+i0neWQjueahOWAvFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogeyBjOiAyIH0gfTtcbiAqIGNvbnN0IG5ld09iaiA9IGRlZXBDbG9uZShvYmopO1xuICovXG5leHBvcnQgY29uc3QgZGVlcENsb25lID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgY29uc3QgY2xvbmUgPSAoY29waWVkVmFsdWU6IGFueSkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb3BpZWRWYWx1ZVtrZXldID0gZGVlcENsb25lKHZhbHVlW2tleV0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3BpZWRWYWx1ZVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICAgIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyAnTnVsbE9yVW5kZWZpbmVkJyA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpXG5cbiAgaWYgKFxuICAgIFtcbiAgICAgICdJbnQ4QXJyYXknLFxuICAgICAgJ1VpbnQ4QXJyYXknLFxuICAgICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JyxcbiAgICAgICdJbnQxNkFycmF5JyxcbiAgICAgICdVaW50MTZBcnJheScsXG4gICAgICAnSW50MzJBcnJheScsXG4gICAgICAnVWludDMyQXJyYXknLFxuICAgICAgJ0Zsb2F0MzJBcnJheScsXG4gICAgICAnRmxvYXQ2NEFycmF5JyxcbiAgICAgICdCaWdJbnQ2NEFycmF5JyxcbiAgICAgICdCaWdVaW50NjRBcnJheScsXG4gICAgXS5pbmNsdWRlcyh0eXBlKVxuICApIHtcbiAgICByZXR1cm4gdmFsdWUuc2xpY2UoKVxuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgIHJldHVybiBjbG9uZShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkpKVxuICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgIHJldHVybiBjbG9uZShbXSlcbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZS52YWx1ZU9mKCkpXG4gICAgY2FzZSAnUmVnRXhwJzpcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgICB2YWx1ZS5zb3VyY2UsXG4gICAgICAgICh2YWx1ZS5nbG9iYWwgPyAnZycgOiAnJylcbiAgICAgICAgICArICh2YWx1ZS5pZ25vcmVDYXNlID8gJ2knIDogJycpXG4gICAgICAgICAgKyAodmFsdWUubXVsdGlsaW5lID8gJ20nIDogJycpXG4gICAgICAgICAgKyAodmFsdWUuc3RpY2t5ID8gJ3knIDogJycpXG4gICAgICAgICAgKyAodmFsdWUudW5pY29kZSA/ICd1JyA6ICcnKSxcbiAgICAgIClcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBhdGhOYW1lID0gKHVybDogc3RyaW5nKSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICBjb25zdCByZWdleCA9IC9eKD86aHR0cChzKT86XFwvXFwvW15cXC9dKyk/KFxcL1teXFw/I10qKS9cbiAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnZXgpXG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzJdIHx8ICcnXG4gIH1cblxuICByZXR1cm4gJydcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/oauth",
3
- "version": "2.5.46-beta.0",
3
+ "version": "2.5.48-beta.0",
4
4
  "description": "cloudbase javascript sdk auth componets",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -21,5 +21,5 @@
21
21
  "encryptlong": "^3.1.4"
22
22
  },
23
23
  "license": "Apache-2.0",
24
- "gitHead": "b90d74de0cdcc63ba408acbafc7a7c386f582291"
24
+ "gitHead": "5e97c7a104dabec77e18d2237b02432f2270b3f5"
25
25
  }
package/src/auth/apis.ts CHANGED
@@ -66,6 +66,8 @@ export interface AuthOptions {
66
66
  storage?: SimpleStorage
67
67
  anonymousSignInFunc?: (Credentials) => Promise<Credentials | void>
68
68
  captchaOptions?: Partial<CaptchaOptions>
69
+ env?: string
70
+ wxCloud?: any
69
71
  }
70
72
 
71
73
  /**
@@ -97,6 +99,8 @@ export class Auth {
97
99
  apiOrigin: opts.apiOrigin,
98
100
  clientId: opts.clientId,
99
101
  storage: opts.storage,
102
+ env: opts.env,
103
+ wxCloud: opts.wxCloud,
100
104
  }
101
105
  oAuth2Client = new OAuth2Client(initOptions)
102
106
  }
@@ -111,6 +115,7 @@ export class Auth {
111
115
  request = captcha.request.bind(captcha)
112
116
  }
113
117
  this.config = {
118
+ env: opts.env,
114
119
  apiOrigin: opts.apiOrigin,
115
120
  clientId: opts.clientId,
116
121
  request,
@@ -224,7 +229,7 @@ export class Auth {
224
229
  return this.config.request<GetVerificationResponse>(ApiUrls.VERIFICATION_URL, {
225
230
  method: 'POST',
226
231
  body: params,
227
- withCaptcha: true,
232
+ // withCaptcha: true,
228
233
  withCredentials,
229
234
  })
230
235
  }
@@ -276,10 +281,14 @@ export class Auth {
276
281
  * @param {GrantProviderTokenRequest} params A GrantProviderTokenRequest object.
277
282
  * @return {Promise<GrantProviderTokenResponse>} A Promise<GrantProviderTokenResponse> object.
278
283
  */
279
- public async grantProviderToken(params: GrantProviderTokenRequest): Promise<GrantProviderTokenResponse> {
284
+ public async grantProviderToken(
285
+ params: GrantProviderTokenRequest,
286
+ useWxCloud = false,
287
+ ): Promise<GrantProviderTokenResponse> {
280
288
  return this.config.request<GrantProviderTokenResponse>(ApiUrls.PROVIDER_TOKEN_URL, {
281
289
  method: 'POST',
282
290
  body: params,
291
+ useWxCloud,
283
292
  })
284
293
  }
285
294
 
@@ -300,12 +309,15 @@ export class Auth {
300
309
  * @param {SignInWithProviderRequest} params A SignInWithProviderRequest object.
301
310
  * @return {Promise<Credentials>} A Promise<Credentials> object.
302
311
  */
303
- public async signInWithProvider(params: SignInWithProviderRequest): Promise<Credentials> {
312
+ public async signInWithProvider(params: SignInWithProviderRequest, useWxCloud = false): Promise<Credentials> {
304
313
  const res = this.getParamsByVersion(params, 'AUTH_SIGN_IN_WITH_PROVIDER_URL')
314
+
305
315
  const credentials: Credentials = await this.config.request<Credentials>(res.url, {
306
316
  method: 'POST',
307
317
  body: res.params,
318
+ useWxCloud,
308
319
  })
320
+
309
321
  await this.config.credentialsClient.setCredentials({
310
322
  ...credentials,
311
323
  version: params?.version || 'v1',
@@ -9,6 +9,7 @@ export interface SignInRequest extends BaseRequest, EncryptParams {
9
9
  password?: string;
10
10
  verification_token?: string;
11
11
  version?: string;
12
+ query?: { with_department?: boolean, with_role?: boolean }
12
13
  }
13
14
 
14
15
  export interface SignInWithProviderRequest extends BaseRequest {
@@ -69,6 +70,8 @@ export interface GrantProviderTokenRequest extends BaseRequest {
69
70
  export interface GrantProviderTokenResponse {
70
71
  provider_token: string;
71
72
  expires_in: number;
73
+ code?: string;
74
+ error_code?: string;
72
75
  }
73
76
 
74
77
  export interface PatchProviderTokenRequest extends BaseRequest {
@@ -78,6 +81,7 @@ export interface PatchProviderTokenRequest extends BaseRequest {
78
81
  encryptedData?: string;
79
82
  iv?: string;
80
83
  code?: string;
84
+ provider_code_type?: string;
81
85
  };
82
86
  }
83
87
 
@@ -249,11 +253,16 @@ export interface GrantProviderTokenRequest {
249
253
  provider_code?: string;
250
254
  provider_access_token?: string;
251
255
  provider_id_token?: string;
256
+ provider_params?: {
257
+ provider_code_type?: string;
258
+ appid?: string;
259
+ }
252
260
  }
253
261
 
254
262
  export interface GrantProviderTokenResponse {
255
263
  provider_token: string;
256
264
  expires_in: number;
265
+ code?: string;
257
266
  }
258
267
 
259
268
  export interface PatchProviderTokenRequest {
@@ -263,6 +272,7 @@ export interface PatchProviderTokenRequest {
263
272
  encryptedData?: string;
264
273
  iv?: string;
265
274
  code?: string;
275
+ provider_code_type?: string;
266
276
  };
267
277
  }
268
278
 
package/src/index.ts CHANGED
@@ -26,6 +26,7 @@ export {
26
26
 
27
27
  export { AuthOptions, Auth } from './auth/apis'
28
28
  export { authModels }
29
+ export { ApiUrls } from './auth/consts'
29
30
 
30
31
 
31
32
  export class CloudbaseOAuth {
@@ -33,13 +34,15 @@ export class CloudbaseOAuth {
33
34
  public authApi: Auth
34
35
 
35
36
  constructor(authOptions: AuthOptions) {
36
- const { apiOrigin, clientId, storage, request, baseRequest, anonymousSignInFunc } = authOptions
37
+ const { apiOrigin, clientId, env, storage, request, baseRequest, anonymousSignInFunc, wxCloud } = authOptions
37
38
  this.oauth2client = new OAuth2Client({
38
39
  apiOrigin,
39
40
  clientId,
41
+ env,
40
42
  storage,
41
43
  baseRequest: baseRequest || request,
42
44
  anonymousSignInFunc,
45
+ wxCloud,
43
46
  })
44
47
 
45
48
  this.authApi = new Auth({