@secrecy/lib 0.1.441 → 1.0.0-dev.12

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.
@@ -1,4 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
2
3
  import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
3
4
  import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
4
5
  import _classPrivateFieldLooseBase from "@babel/runtime/helpers/classPrivateFieldLooseBase";
@@ -31,7 +32,7 @@ import { generate } from "shortid";
31
32
  import { md5 } from "../worker/md5.js";
32
33
  import { encrypt, decrypt } from "../worker/sodium.js";
33
34
  import { chunks, concatenate, enumerate, promiseAllLimit } from "../utils.js";
34
- import { gqlFileQuery, gqlFolderQuery, gqlFolderQueryWithLinks, gqlMailQuery, gqlVFileQuery, gqlVFileWithFolderQuery } from "./types/queries.js";
35
+ import { gqlFileQuery, gqlFolderQuery, gqlFolderFullQuery, gqlMailQuery, gqlVFileQuery, gqlVFileWithFolderQuery } from "./types/queries.js";
35
36
  import { convertInternalMailToExternal } from "./convert/mail.js"; // import { md5 } from "../worker/index.js";
36
37
  // import { firstValueFrom, of } from "rxjs";
37
38
 
@@ -408,13 +409,13 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
408
409
  var _uploadFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9(_ref8) {
409
410
  var _this3 = this;
410
411
 
411
- var file, encryptProgress, uploadProgress, cancelToken, fileKey, fileBuffer, compressed, _yield$encrypt, encryptedFile, md5File, md5Encrypted, encryptedFileKey, _yield$this$client$mu2, uploadFile, uploadPartEnded, uploadEnded, chunkParts, _iterator2, _step2, _step2$value, index, chunk, progressParts, onProgress, byPart;
412
+ var file, encryptProgress, uploadProgress, signal, fileKey, fileBuffer, compressed, _yield$encrypt, encryptedFile, md5File, md5Encrypted, encryptedFileKey, _yield$this$client$mu2, uploadFile, uploadPartEnded, uploadEnded, chunkParts, _iterator2, _step2, _step2$value, index, chunk, progressParts, onProgress, byPart;
412
413
 
413
414
  return _regeneratorRuntime.wrap(function _callee9$(_context9) {
414
415
  while (1) {
415
416
  switch (_context9.prev = _context9.next) {
416
417
  case 0:
417
- file = _ref8.file, encryptProgress = _ref8.encryptProgress, uploadProgress = _ref8.uploadProgress, cancelToken = _ref8.cancelToken;
418
+ file = _ref8.file, encryptProgress = _ref8.encryptProgress, uploadProgress = _ref8.uploadProgress, signal = _ref8.signal;
418
419
  fileKey = secretstreamKeygen();
419
420
 
420
421
  if (!(file instanceof File)) {
@@ -437,10 +438,9 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
437
438
 
438
439
  case 11:
439
440
  fileBuffer = _context9.t0;
440
- compressed = compress(fileBuffer); // TODO: use abort controller to cancel upload, and see typings
441
-
441
+ compressed = compress(fileBuffer);
442
442
  _context9.next = 15;
443
- return encrypt(fileKey, compressed, encryptProgress);
443
+ return encrypt(fileKey, compressed, encryptProgress, signal);
444
444
 
445
445
  case 15:
446
446
  _yield$encrypt = _context9.sent;
@@ -644,7 +644,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
644
644
  onUploadProgress: function onUploadProgress(progressEvent) {
645
645
  return onProgress(part.order, progressEvent);
646
646
  },
647
- cancelToken: cancelToken
647
+ signal: signal
648
648
  });
649
649
 
650
650
  case 9:
@@ -710,18 +710,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
710
710
 
711
711
  _proto.uploadFileInCloud = /*#__PURE__*/function () {
712
712
  var _uploadFileInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10(_ref12) {
713
- var file, name, folderId, cancelToken, encryptProgress, uploadProgress, fileId;
713
+ var file, name, folderId, encryptProgress, uploadProgress, signal, fileId;
714
714
  return _regeneratorRuntime.wrap(function _callee10$(_context10) {
715
715
  while (1) {
716
716
  switch (_context10.prev = _context10.next) {
717
717
  case 0:
718
- file = _ref12.file, name = _ref12.name, folderId = _ref12.folderId, cancelToken = _ref12.cancelToken, encryptProgress = _ref12.encryptProgress, uploadProgress = _ref12.uploadProgress;
718
+ file = _ref12.file, name = _ref12.name, folderId = _ref12.folderId, encryptProgress = _ref12.encryptProgress, uploadProgress = _ref12.uploadProgress, signal = _ref12.signal;
719
719
  _context10.next = 3;
720
720
  return this.uploadFile({
721
721
  file: file,
722
722
  encryptProgress: encryptProgress,
723
723
  uploadProgress: uploadProgress,
724
- cancelToken: cancelToken
724
+ signal: signal
725
725
  });
726
726
 
727
727
  case 3:
@@ -810,7 +810,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
810
810
  name: encryptedName,
811
811
  parentFolderId: parentFolderId,
812
812
  key: sodium.to_hex(encryptedKey)
813
- }, gqlFolderQueryWithLinks]
813
+ }, gqlFolderFullQuery]
814
814
  });
815
815
 
816
816
  case 8:
@@ -883,7 +883,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
883
883
  folder: [{
884
884
  deleted: deleted,
885
885
  id: id
886
- }, gqlFolderQueryWithLinks]
886
+ }, gqlFolderFullQuery]
887
887
  });
888
888
 
889
889
  case 3:
@@ -1502,33 +1502,80 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1502
1502
  return deletedFolders;
1503
1503
  }();
1504
1504
 
1505
- _proto.shareFolder = /*#__PURE__*/function () {
1506
- var _shareFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref21) {
1507
- var folderId, userId, rights, user, _yield$this$client$mu5, shareFolder, shareFolders, _iterator10, _step10, id, nameKey, _iterator11, _step11, _id, vFileInput, _yield$this$client$mu6, shareFolderFinish;
1505
+ _proto.deletedMails = /*#__PURE__*/function () {
1506
+ var _deletedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref21) {
1507
+ var mailType, _yield$this$client$qu11, deletedMails, mails, _iterator10, _step10, m, mail;
1508
1508
 
1509
1509
  return _regeneratorRuntime.wrap(function _callee24$(_context24) {
1510
1510
  while (1) {
1511
1511
  switch (_context24.prev = _context24.next) {
1512
1512
  case 0:
1513
- folderId = _ref21.folderId, userId = _ref21.userId, rights = _ref21.rights;
1513
+ mailType = _ref21.mailType;
1514
1514
  _context24.next = 3;
1515
+ return this.client.query({
1516
+ deletedMails: [{
1517
+ mailType: mailType
1518
+ }, gqlMailQuery]
1519
+ });
1520
+
1521
+ case 3:
1522
+ _yield$this$client$qu11 = _context24.sent;
1523
+ deletedMails = _yield$this$client$qu11.deletedMails;
1524
+ mails = new Array();
1525
+
1526
+ for (_iterator10 = _createForOfIteratorHelperLoose(deletedMails); !(_step10 = _iterator10()).done;) {
1527
+ m = _step10.value;
1528
+ mail = convertInternalMailToExternal(m, _classPrivateFieldLooseBase(this, _keys)[_keys]);
1529
+
1530
+ if (mail) {
1531
+ mails.push(mail);
1532
+ }
1533
+ }
1534
+
1535
+ return _context24.abrupt("return", mails);
1536
+
1537
+ case 8:
1538
+ case "end":
1539
+ return _context24.stop();
1540
+ }
1541
+ }
1542
+ }, _callee24, this);
1543
+ }));
1544
+
1545
+ function deletedMails(_x24) {
1546
+ return _deletedMails.apply(this, arguments);
1547
+ }
1548
+
1549
+ return deletedMails;
1550
+ }();
1551
+
1552
+ _proto.shareFolder = /*#__PURE__*/function () {
1553
+ var _shareFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(_ref22) {
1554
+ var folderId, userId, rights, user, _yield$this$client$mu5, shareFolder, shareFolders, _iterator11, _step11, id, nameKey, _iterator12, _step12, _id, vFileInput, _yield$this$client$mu6, shareFolderFinish;
1555
+
1556
+ return _regeneratorRuntime.wrap(function _callee25$(_context25) {
1557
+ while (1) {
1558
+ switch (_context25.prev = _context25.next) {
1559
+ case 0:
1560
+ folderId = _ref22.folderId, userId = _ref22.userId, rights = _ref22.rights;
1561
+ _context25.next = 3;
1515
1562
  return this.user({
1516
1563
  userId: userId,
1517
1564
  withPublicKey: true
1518
1565
  });
1519
1566
 
1520
1567
  case 3:
1521
- user = _context24.sent;
1568
+ user = _context25.sent;
1522
1569
 
1523
1570
  if (user) {
1524
- _context24.next = 6;
1571
+ _context25.next = 6;
1525
1572
  break;
1526
1573
  }
1527
1574
 
1528
- return _context24.abrupt("return", false);
1575
+ return _context25.abrupt("return", false);
1529
1576
 
1530
1577
  case 6:
1531
- _context24.next = 8;
1578
+ _context25.next = 8;
1532
1579
  return this.client.mutation({
1533
1580
  shareFolder: [{
1534
1581
  folderId: folderId,
@@ -1540,61 +1587,61 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1540
1587
  });
1541
1588
 
1542
1589
  case 8:
1543
- _yield$this$client$mu5 = _context24.sent;
1590
+ _yield$this$client$mu5 = _context25.sent;
1544
1591
  shareFolder = _yield$this$client$mu5.shareFolder;
1545
1592
  shareFolders = {
1546
1593
  vFiles: [],
1547
1594
  folders: []
1548
1595
  };
1549
- _iterator10 = _createForOfIteratorHelperLoose(shareFolder.folders);
1596
+ _iterator11 = _createForOfIteratorHelperLoose(shareFolder.folders);
1550
1597
 
1551
1598
  case 12:
1552
- if ((_step10 = _iterator10()).done) {
1553
- _context24.next = 20;
1599
+ if ((_step11 = _iterator11()).done) {
1600
+ _context25.next = 20;
1554
1601
  break;
1555
1602
  }
1556
1603
 
1557
- id = _step10.value;
1558
- _context24.next = 16;
1604
+ id = _step11.value;
1605
+ _context25.next = 16;
1559
1606
  return this.perFolder(id, user.publicKey);
1560
1607
 
1561
1608
  case 16:
1562
- nameKey = _context24.sent;
1609
+ nameKey = _context25.sent;
1563
1610
 
1564
1611
  if (nameKey) {
1565
1612
  shareFolders.folders.push(nameKey);
1566
1613
  }
1567
1614
 
1568
1615
  case 18:
1569
- _context24.next = 12;
1616
+ _context25.next = 12;
1570
1617
  break;
1571
1618
 
1572
1619
  case 20:
1573
- _iterator11 = _createForOfIteratorHelperLoose(shareFolder.vFiles);
1620
+ _iterator12 = _createForOfIteratorHelperLoose(shareFolder.vFiles);
1574
1621
 
1575
1622
  case 21:
1576
- if ((_step11 = _iterator11()).done) {
1577
- _context24.next = 29;
1623
+ if ((_step12 = _iterator12()).done) {
1624
+ _context25.next = 29;
1578
1625
  break;
1579
1626
  }
1580
1627
 
1581
- _id = _step11.value;
1582
- _context24.next = 25;
1628
+ _id = _step12.value;
1629
+ _context25.next = 25;
1583
1630
  return this.perVFile(_id, user.publicKey);
1584
1631
 
1585
1632
  case 25:
1586
- vFileInput = _context24.sent;
1633
+ vFileInput = _context25.sent;
1587
1634
 
1588
1635
  if (vFileInput) {
1589
1636
  shareFolders.vFiles.push(vFileInput);
1590
1637
  }
1591
1638
 
1592
1639
  case 27:
1593
- _context24.next = 21;
1640
+ _context25.next = 21;
1594
1641
  break;
1595
1642
 
1596
1643
  case 29:
1597
- _context24.next = 31;
1644
+ _context25.next = 31;
1598
1645
  return this.client.mutation({
1599
1646
  shareFolderFinish: [{
1600
1647
  rights: rights,
@@ -1604,19 +1651,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1604
1651
  });
1605
1652
 
1606
1653
  case 31:
1607
- _yield$this$client$mu6 = _context24.sent;
1654
+ _yield$this$client$mu6 = _context25.sent;
1608
1655
  shareFolderFinish = _yield$this$client$mu6.shareFolderFinish;
1609
- return _context24.abrupt("return", shareFolderFinish != null ? shareFolderFinish : false);
1656
+ return _context25.abrupt("return", shareFolderFinish != null ? shareFolderFinish : false);
1610
1657
 
1611
1658
  case 34:
1612
1659
  case "end":
1613
- return _context24.stop();
1660
+ return _context25.stop();
1614
1661
  }
1615
1662
  }
1616
- }, _callee24, this);
1663
+ }, _callee25, this);
1617
1664
  }));
1618
1665
 
1619
- function shareFolder(_x24) {
1666
+ function shareFolder(_x25) {
1620
1667
  return _shareFolder.apply(this, arguments);
1621
1668
  }
1622
1669
 
@@ -1624,24 +1671,24 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1624
1671
  }();
1625
1672
 
1626
1673
  _proto.updateFolder = /*#__PURE__*/function () {
1627
- var _updateFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(_ref22) {
1674
+ var _updateFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(_ref23) {
1628
1675
  var _folder$userApp2;
1629
1676
 
1630
1677
  var folderId, name, isFavorite, deletedAt, folder, _yield$this$client$mu7, updateFolder;
1631
1678
 
1632
- return _regeneratorRuntime.wrap(function _callee25$(_context25) {
1679
+ return _regeneratorRuntime.wrap(function _callee26$(_context26) {
1633
1680
  while (1) {
1634
- switch (_context25.prev = _context25.next) {
1681
+ switch (_context26.prev = _context26.next) {
1635
1682
  case 0:
1636
- folderId = _ref22.folderId, name = _ref22.name, isFavorite = _ref22.isFavorite, deletedAt = _ref22.deletedAt;
1683
+ folderId = _ref23.folderId, name = _ref23.name, isFavorite = _ref23.isFavorite, deletedAt = _ref23.deletedAt;
1637
1684
  folder = foldersCache.get(folderId);
1638
1685
 
1639
1686
  if (folder) {
1640
- _context25.next = 8;
1687
+ _context26.next = 8;
1641
1688
  break;
1642
1689
  }
1643
1690
 
1644
- _context25.next = 5;
1691
+ _context26.next = 5;
1645
1692
  return this.folder({
1646
1693
  id: folderId
1647
1694
  });
@@ -1650,7 +1697,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1650
1697
  folder = foldersCache.get(folderId);
1651
1698
 
1652
1699
  if (folder) {
1653
- _context25.next = 8;
1700
+ _context26.next = 8;
1654
1701
  break;
1655
1702
  }
1656
1703
 
@@ -1658,107 +1705,205 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1658
1705
 
1659
1706
  case 8:
1660
1707
  if (!name) {
1661
- _context25.next = 19;
1708
+ _context26.next = 19;
1662
1709
  break;
1663
1710
  }
1664
1711
 
1665
1712
  if (!((_folder$userApp2 = folder.userApp) != null && _folder$userApp2.nameKey)) {
1666
- _context25.next = 15;
1713
+ _context26.next = 15;
1667
1714
  break;
1668
1715
  }
1669
1716
 
1670
- _context25.next = 12;
1717
+ _context26.next = 12;
1671
1718
  return encryptName(name, folder.userApp.nameKey);
1672
1719
 
1673
1720
  case 12:
1674
- _context25.t1 = _context25.sent;
1675
- _context25.next = 16;
1721
+ _context26.t1 = _context26.sent;
1722
+ _context26.next = 16;
1676
1723
  break;
1677
1724
 
1678
1725
  case 15:
1679
- _context25.t1 = name;
1726
+ _context26.t1 = name;
1680
1727
 
1681
1728
  case 16:
1682
- _context25.t0 = _context25.t1;
1683
- _context25.next = 20;
1729
+ _context26.t0 = _context26.t1;
1730
+ _context26.next = 20;
1684
1731
  break;
1685
1732
 
1686
1733
  case 19:
1687
- _context25.t0 = null;
1734
+ _context26.t0 = null;
1688
1735
 
1689
1736
  case 20:
1690
- name = _context25.t0;
1691
- _context25.next = 23;
1737
+ name = _context26.t0;
1738
+ _context26.next = 23;
1692
1739
  return this.client.mutation({
1693
1740
  updateFolder: [{
1694
1741
  folderId: folderId,
1695
1742
  name: name,
1696
1743
  isFavorite: isFavorite,
1697
1744
  deletedAt: deletedAt
1698
- }, gqlFolderQueryWithLinks]
1745
+ }, gqlFolderFullQuery]
1699
1746
  });
1700
1747
 
1701
1748
  case 23:
1702
- _yield$this$client$mu7 = _context25.sent;
1749
+ _yield$this$client$mu7 = _context26.sent;
1703
1750
  updateFolder = _yield$this$client$mu7.updateFolder;
1704
1751
 
1705
1752
  if (updateFolder) {
1706
- _context25.next = 27;
1753
+ _context26.next = 27;
1707
1754
  break;
1708
1755
  }
1709
1756
 
1710
1757
  throw new Error("Can't update folder");
1711
1758
 
1712
1759
  case 27:
1713
- return _context25.abrupt("return", gqlFolderToExternalFolderFull(updateFolder, _classPrivateFieldLooseBase(this, _keys)[_keys]));
1760
+ return _context26.abrupt("return", gqlFolderToExternalFolderFull(updateFolder, _classPrivateFieldLooseBase(this, _keys)[_keys]));
1714
1761
 
1715
1762
  case 28:
1716
1763
  case "end":
1717
- return _context25.stop();
1764
+ return _context26.stop();
1718
1765
  }
1719
1766
  }
1720
- }, _callee25, this);
1767
+ }, _callee26, this);
1721
1768
  }));
1722
1769
 
1723
- function updateFolder(_x25) {
1770
+ function updateFolder(_x26) {
1724
1771
  return _updateFolder.apply(this, arguments);
1725
1772
  }
1726
1773
 
1727
1774
  return updateFolder;
1728
1775
  }();
1729
1776
 
1777
+ _proto.updateAppNotifications = /*#__PURE__*/function () {
1778
+ var _updateAppNotifications = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27(notifications) {
1779
+ var _yield$this$client$mu8, updateAppNotifications;
1780
+
1781
+ return _regeneratorRuntime.wrap(function _callee27$(_context27) {
1782
+ while (1) {
1783
+ switch (_context27.prev = _context27.next) {
1784
+ case 0:
1785
+ _context27.next = 2;
1786
+ return this.client.mutation({
1787
+ updateAppNotifications: [notifications, {
1788
+ enableAll: true,
1789
+ mail: true,
1790
+ cloud: true,
1791
+ disableAllUntil: true
1792
+ }]
1793
+ });
1794
+
1795
+ case 2:
1796
+ _yield$this$client$mu8 = _context27.sent;
1797
+ updateAppNotifications = _yield$this$client$mu8.updateAppNotifications;
1798
+
1799
+ if (updateAppNotifications) {
1800
+ _context27.next = 6;
1801
+ break;
1802
+ }
1803
+
1804
+ return _context27.abrupt("return", null);
1805
+
1806
+ case 6:
1807
+ return _context27.abrupt("return", _objectSpread(_objectSpread({}, updateAppNotifications), {}, {
1808
+ disableAllUntil: updateAppNotifications.disableAllUntil ? new Date(updateAppNotifications.disableAllUntil) : null
1809
+ }));
1810
+
1811
+ case 7:
1812
+ case "end":
1813
+ return _context27.stop();
1814
+ }
1815
+ }
1816
+ }, _callee27, this);
1817
+ }));
1818
+
1819
+ function updateAppNotifications(_x27) {
1820
+ return _updateAppNotifications.apply(this, arguments);
1821
+ }
1822
+
1823
+ return updateAppNotifications;
1824
+ }();
1825
+
1826
+ _proto.appNotifications = /*#__PURE__*/function () {
1827
+ var _appNotifications = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee28() {
1828
+ var _yield$this$client$qu12, appNotifications;
1829
+
1830
+ return _regeneratorRuntime.wrap(function _callee28$(_context28) {
1831
+ while (1) {
1832
+ switch (_context28.prev = _context28.next) {
1833
+ case 0:
1834
+ _context28.next = 2;
1835
+ return this.client.query({
1836
+ appNotifications: {
1837
+ enableAll: true,
1838
+ mail: true,
1839
+ cloud: true,
1840
+ disableAllUntil: true
1841
+ }
1842
+ });
1843
+
1844
+ case 2:
1845
+ _yield$this$client$qu12 = _context28.sent;
1846
+ appNotifications = _yield$this$client$qu12.appNotifications;
1847
+
1848
+ if (appNotifications) {
1849
+ _context28.next = 6;
1850
+ break;
1851
+ }
1852
+
1853
+ return _context28.abrupt("return", null);
1854
+
1855
+ case 6:
1856
+ return _context28.abrupt("return", _objectSpread(_objectSpread({}, appNotifications), {}, {
1857
+ disableAllUntil: appNotifications.disableAllUntil ? new Date(appNotifications.disableAllUntil) : null
1858
+ }));
1859
+
1860
+ case 7:
1861
+ case "end":
1862
+ return _context28.stop();
1863
+ }
1864
+ }
1865
+ }, _callee28, this);
1866
+ }));
1867
+
1868
+ function appNotifications() {
1869
+ return _appNotifications.apply(this, arguments);
1870
+ }
1871
+
1872
+ return appNotifications;
1873
+ }();
1874
+
1730
1875
  _proto.createMail = /*#__PURE__*/function () {
1731
- var _createMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(data, customMessage) {
1876
+ var _createMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee29(data, customMessage) {
1732
1877
  var mail;
1733
- return _regeneratorRuntime.wrap(function _callee26$(_context26) {
1878
+ return _regeneratorRuntime.wrap(function _callee29$(_context29) {
1734
1879
  while (1) {
1735
- switch (_context26.prev = _context26.next) {
1880
+ switch (_context29.prev = _context29.next) {
1736
1881
  case 0:
1737
- _context26.next = 2;
1882
+ _context29.next = 2;
1738
1883
  return this.createDraftMail(data);
1739
1884
 
1740
1885
  case 2:
1741
- mail = _context26.sent;
1886
+ mail = _context29.sent;
1742
1887
 
1743
1888
  if (mail) {
1744
- _context26.next = 5;
1889
+ _context29.next = 5;
1745
1890
  break;
1746
1891
  }
1747
1892
 
1748
- return _context26.abrupt("return", false);
1893
+ return _context29.abrupt("return", false);
1749
1894
 
1750
1895
  case 5:
1751
- return _context26.abrupt("return", this.sendDraftMail(mail.mailIntegrityId, customMessage));
1896
+ return _context29.abrupt("return", this.sendDraftMail(mail.mailIntegrityId, customMessage));
1752
1897
 
1753
1898
  case 6:
1754
1899
  case "end":
1755
- return _context26.stop();
1900
+ return _context29.stop();
1756
1901
  }
1757
1902
  }
1758
- }, _callee26, this);
1903
+ }, _callee29, this);
1759
1904
  }));
1760
1905
 
1761
- function createMail(_x26, _x27) {
1906
+ function createMail(_x28, _x29) {
1762
1907
  return _createMail.apply(this, arguments);
1763
1908
  }
1764
1909
 
@@ -1766,14 +1911,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1766
1911
  }();
1767
1912
 
1768
1913
  _proto.waitingReceivedMails = /*#__PURE__*/function () {
1769
- var _waitingReceivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27() {
1770
- var _yield$this$client$qu11, user;
1914
+ var _waitingReceivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee30() {
1915
+ var _yield$this$client$qu13, user;
1771
1916
 
1772
- return _regeneratorRuntime.wrap(function _callee27$(_context27) {
1917
+ return _regeneratorRuntime.wrap(function _callee30$(_context30) {
1773
1918
  while (1) {
1774
- switch (_context27.prev = _context27.next) {
1919
+ switch (_context30.prev = _context30.next) {
1775
1920
  case 0:
1776
- _context27.next = 2;
1921
+ _context30.next = 2;
1777
1922
  return this.client.query({
1778
1923
  user: [{}, {
1779
1924
  waitingReceivedMails: {
@@ -1801,18 +1946,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1801
1946
  });
1802
1947
 
1803
1948
  case 2:
1804
- _yield$this$client$qu11 = _context27.sent;
1805
- user = _yield$this$client$qu11.user;
1949
+ _yield$this$client$qu13 = _context30.sent;
1950
+ user = _yield$this$client$qu13.user;
1806
1951
 
1807
1952
  if (user) {
1808
- _context27.next = 6;
1953
+ _context30.next = 6;
1809
1954
  break;
1810
1955
  }
1811
1956
 
1812
1957
  throw new Error("Can't get waiting received mails");
1813
1958
 
1814
1959
  case 6:
1815
- return _context27.abrupt("return", user.waitingReceivedMails.map(function (m) {
1960
+ return _context30.abrupt("return", user.waitingReceivedMails.map(function (m) {
1816
1961
  return _objectSpread(_objectSpread({
1817
1962
  id: generate()
1818
1963
  }, m), {}, {
@@ -1822,10 +1967,10 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1822
1967
 
1823
1968
  case 7:
1824
1969
  case "end":
1825
- return _context27.stop();
1970
+ return _context30.stop();
1826
1971
  }
1827
1972
  }
1828
- }, _callee27, this);
1973
+ }, _callee30, this);
1829
1974
  }));
1830
1975
 
1831
1976
  function waitingReceivedMails() {
@@ -1836,25 +1981,25 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1836
1981
  }();
1837
1982
 
1838
1983
  _proto.updateDraftMail = /*#__PURE__*/function () {
1839
- var _updateDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee28(draftId, _ref23) {
1840
- var body, subject, files, recipientsIds, replyTo, drafts, draft, hashKey, hash, senderFiles, _iterator12, _step12, f, file, _yield$this$client$mu8, updateDraftMail;
1984
+ var _updateDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee31(draftId, _ref24) {
1985
+ var body, subject, files, recipientsIds, replyTo, drafts, draft, hashKey, hash, senderFiles, _iterator13, _step13, f, file, _yield$this$client$mu9, updateDraftMail;
1841
1986
 
1842
- return _regeneratorRuntime.wrap(function _callee28$(_context28) {
1987
+ return _regeneratorRuntime.wrap(function _callee31$(_context31) {
1843
1988
  while (1) {
1844
- switch (_context28.prev = _context28.next) {
1989
+ switch (_context31.prev = _context31.next) {
1845
1990
  case 0:
1846
- body = _ref23.body, subject = _ref23.subject, files = _ref23.files, recipientsIds = _ref23.recipientsIds, replyTo = _ref23.replyTo;
1847
- _context28.next = 3;
1991
+ body = _ref24.body, subject = _ref24.subject, files = _ref24.files, recipientsIds = _ref24.recipientsIds, replyTo = _ref24.replyTo;
1992
+ _context31.next = 3;
1848
1993
  return this.draftMails();
1849
1994
 
1850
1995
  case 3:
1851
- drafts = _context28.sent;
1996
+ drafts = _context31.sent;
1852
1997
  draft = drafts.find(function (d) {
1853
1998
  return d.mailIntegrityId === draftId;
1854
1999
  });
1855
2000
 
1856
2001
  if (draft) {
1857
- _context28.next = 7;
2002
+ _context31.next = 7;
1858
2003
  break;
1859
2004
  }
1860
2005
 
@@ -1875,27 +2020,27 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1875
2020
  senderFiles = new Array();
1876
2021
 
1877
2022
  if (!files) {
1878
- _context28.next = 27;
2023
+ _context31.next = 27;
1879
2024
  break;
1880
2025
  }
1881
2026
 
1882
- _iterator12 = _createForOfIteratorHelperLoose(files);
2027
+ _iterator13 = _createForOfIteratorHelperLoose(files);
1883
2028
 
1884
2029
  case 13:
1885
- if ((_step12 = _iterator12()).done) {
1886
- _context28.next = 27;
2030
+ if ((_step13 = _iterator13()).done) {
2031
+ _context31.next = 27;
1887
2032
  break;
1888
2033
  }
1889
2034
 
1890
- f = _step12.value;
2035
+ f = _step13.value;
1891
2036
  file = filesCache.get(f.id);
1892
2037
 
1893
2038
  if (file) {
1894
- _context28.next = 22;
2039
+ _context31.next = 22;
1895
2040
  break;
1896
2041
  }
1897
2042
 
1898
- _context28.next = 19;
2043
+ _context31.next = 19;
1899
2044
  return this.file({
1900
2045
  id: f.id
1901
2046
  });
@@ -1904,7 +2049,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1904
2049
  file = filesCache.get(f.id);
1905
2050
 
1906
2051
  if (file) {
1907
- _context28.next = 22;
2052
+ _context31.next = 22;
1908
2053
  break;
1909
2054
  }
1910
2055
 
@@ -1912,11 +2057,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1912
2057
 
1913
2058
  case 22:
1914
2059
  if (file.user) {
1915
- _context28.next = 24;
2060
+ _context31.next = 24;
1916
2061
  break;
1917
2062
  }
1918
2063
 
1919
- return _context28.abrupt("continue", 25);
2064
+ return _context31.abrupt("continue", 25);
1920
2065
 
1921
2066
  case 24:
1922
2067
  senderFiles.push({
@@ -1926,11 +2071,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1926
2071
  });
1927
2072
 
1928
2073
  case 25:
1929
- _context28.next = 13;
2074
+ _context31.next = 13;
1930
2075
  break;
1931
2076
 
1932
2077
  case 27:
1933
- _context28.next = 29;
2078
+ _context31.next = 29;
1934
2079
  return this.client.mutation({
1935
2080
  updateDraftMail: [{
1936
2081
  draftId: draftId,
@@ -1945,28 +2090,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1945
2090
  });
1946
2091
 
1947
2092
  case 29:
1948
- _yield$this$client$mu8 = _context28.sent;
1949
- updateDraftMail = _yield$this$client$mu8.updateDraftMail;
2093
+ _yield$this$client$mu9 = _context31.sent;
2094
+ updateDraftMail = _yield$this$client$mu9.updateDraftMail;
1950
2095
 
1951
2096
  if (updateDraftMail) {
1952
- _context28.next = 33;
2097
+ _context31.next = 33;
1953
2098
  break;
1954
2099
  }
1955
2100
 
1956
- return _context28.abrupt("return", null);
2101
+ return _context31.abrupt("return", null);
1957
2102
 
1958
2103
  case 33:
1959
- return _context28.abrupt("return", convertInternalMailToExternal(updateDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
2104
+ return _context31.abrupt("return", convertInternalMailToExternal(updateDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
1960
2105
 
1961
2106
  case 34:
1962
2107
  case "end":
1963
- return _context28.stop();
2108
+ return _context31.stop();
1964
2109
  }
1965
2110
  }
1966
- }, _callee28, this);
2111
+ }, _callee31, this);
1967
2112
  }));
1968
2113
 
1969
- function updateDraftMail(_x28, _x29) {
2114
+ function updateDraftMail(_x30, _x31) {
1970
2115
  return _updateDraftMail.apply(this, arguments);
1971
2116
  }
1972
2117
 
@@ -1974,14 +2119,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1974
2119
  }();
1975
2120
 
1976
2121
  _proto.deleteDraftMail = /*#__PURE__*/function () {
1977
- var _deleteDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee29(draftId) {
1978
- var _yield$this$client$mu9, deleteDraftMail;
2122
+ var _deleteDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee32(draftId) {
2123
+ var _yield$this$client$mu10, deleteDraftMail;
1979
2124
 
1980
- return _regeneratorRuntime.wrap(function _callee29$(_context29) {
2125
+ return _regeneratorRuntime.wrap(function _callee32$(_context32) {
1981
2126
  while (1) {
1982
- switch (_context29.prev = _context29.next) {
2127
+ switch (_context32.prev = _context32.next) {
1983
2128
  case 0:
1984
- _context29.next = 2;
2129
+ _context32.next = 2;
1985
2130
  return this.client.mutation({
1986
2131
  deleteDraftMail: [{
1987
2132
  draftId: draftId
@@ -1989,19 +2134,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1989
2134
  });
1990
2135
 
1991
2136
  case 2:
1992
- _yield$this$client$mu9 = _context29.sent;
1993
- deleteDraftMail = _yield$this$client$mu9.deleteDraftMail;
1994
- return _context29.abrupt("return", deleteDraftMail != null ? deleteDraftMail : false);
2137
+ _yield$this$client$mu10 = _context32.sent;
2138
+ deleteDraftMail = _yield$this$client$mu10.deleteDraftMail;
2139
+ return _context32.abrupt("return", deleteDraftMail != null ? deleteDraftMail : false);
1995
2140
 
1996
2141
  case 5:
1997
2142
  case "end":
1998
- return _context29.stop();
2143
+ return _context32.stop();
1999
2144
  }
2000
2145
  }
2001
- }, _callee29, this);
2146
+ }, _callee32, this);
2002
2147
  }));
2003
2148
 
2004
- function deleteDraftMail(_x30) {
2149
+ function deleteDraftMail(_x32) {
2005
2150
  return _deleteDraftMail.apply(this, arguments);
2006
2151
  }
2007
2152
 
@@ -2009,15 +2154,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2009
2154
  }();
2010
2155
 
2011
2156
  _proto.deleteVFileSharing = /*#__PURE__*/function () {
2012
- var _deleteVFileSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee30(_ref24) {
2013
- var vFileId, userId, _yield$this$client$mu10, deleteVFileSharing;
2157
+ var _deleteVFileSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee33(_ref25) {
2158
+ var vFileId, userId, _yield$this$client$mu11, deleteVFileSharing;
2014
2159
 
2015
- return _regeneratorRuntime.wrap(function _callee30$(_context30) {
2160
+ return _regeneratorRuntime.wrap(function _callee33$(_context33) {
2016
2161
  while (1) {
2017
- switch (_context30.prev = _context30.next) {
2162
+ switch (_context33.prev = _context33.next) {
2018
2163
  case 0:
2019
- vFileId = _ref24.vFileId, userId = _ref24.userId;
2020
- _context30.next = 3;
2164
+ vFileId = _ref25.vFileId, userId = _ref25.userId;
2165
+ _context33.next = 3;
2021
2166
  return this.client.mutation({
2022
2167
  deleteVFileSharing: [{
2023
2168
  vFileId: vFileId,
@@ -2026,19 +2171,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2026
2171
  });
2027
2172
 
2028
2173
  case 3:
2029
- _yield$this$client$mu10 = _context30.sent;
2030
- deleteVFileSharing = _yield$this$client$mu10.deleteVFileSharing;
2031
- return _context30.abrupt("return", deleteVFileSharing);
2174
+ _yield$this$client$mu11 = _context33.sent;
2175
+ deleteVFileSharing = _yield$this$client$mu11.deleteVFileSharing;
2176
+ return _context33.abrupt("return", deleteVFileSharing);
2032
2177
 
2033
2178
  case 6:
2034
2179
  case "end":
2035
- return _context30.stop();
2180
+ return _context33.stop();
2036
2181
  }
2037
2182
  }
2038
- }, _callee30, this);
2183
+ }, _callee33, this);
2039
2184
  }));
2040
2185
 
2041
- function deleteVFileSharing(_x31) {
2186
+ function deleteVFileSharing(_x33) {
2042
2187
  return _deleteVFileSharing.apply(this, arguments);
2043
2188
  }
2044
2189
 
@@ -2046,15 +2191,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2046
2191
  }();
2047
2192
 
2048
2193
  _proto.deleteFolderSharing = /*#__PURE__*/function () {
2049
- var _deleteFolderSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee31(_ref25) {
2050
- var folderId, userId, _yield$this$client$mu11, deleteFolderSharing;
2194
+ var _deleteFolderSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee34(_ref26) {
2195
+ var folderId, userId, _yield$this$client$mu12, deleteFolderSharing;
2051
2196
 
2052
- return _regeneratorRuntime.wrap(function _callee31$(_context31) {
2197
+ return _regeneratorRuntime.wrap(function _callee34$(_context34) {
2053
2198
  while (1) {
2054
- switch (_context31.prev = _context31.next) {
2199
+ switch (_context34.prev = _context34.next) {
2055
2200
  case 0:
2056
- folderId = _ref25.folderId, userId = _ref25.userId;
2057
- _context31.next = 3;
2201
+ folderId = _ref26.folderId, userId = _ref26.userId;
2202
+ _context34.next = 3;
2058
2203
  return this.client.mutation({
2059
2204
  deleteFolderSharing: [{
2060
2205
  folderId: folderId,
@@ -2063,19 +2208,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2063
2208
  });
2064
2209
 
2065
2210
  case 3:
2066
- _yield$this$client$mu11 = _context31.sent;
2067
- deleteFolderSharing = _yield$this$client$mu11.deleteFolderSharing;
2068
- return _context31.abrupt("return", deleteFolderSharing);
2211
+ _yield$this$client$mu12 = _context34.sent;
2212
+ deleteFolderSharing = _yield$this$client$mu12.deleteFolderSharing;
2213
+ return _context34.abrupt("return", deleteFolderSharing);
2069
2214
 
2070
2215
  case 6:
2071
2216
  case "end":
2072
- return _context31.stop();
2217
+ return _context34.stop();
2073
2218
  }
2074
2219
  }
2075
- }, _callee31, this);
2220
+ }, _callee34, this);
2076
2221
  }));
2077
2222
 
2078
- function deleteFolderSharing(_x32) {
2223
+ function deleteFolderSharing(_x34) {
2079
2224
  return _deleteFolderSharing.apply(this, arguments);
2080
2225
  }
2081
2226
 
@@ -2083,78 +2228,78 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2083
2228
  }();
2084
2229
 
2085
2230
  _proto.duplicateVFile = /*#__PURE__*/function () {
2086
- var _duplicateVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee32(_ref26) {
2087
- var fileId, folderId, customName, file, _yield$this$client$mu12, duplicateVFile;
2231
+ var _duplicateVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee35(_ref27) {
2232
+ var vFileId, folderId, customName, file, _yield$this$client$mu13, duplicateVFile;
2088
2233
 
2089
- return _regeneratorRuntime.wrap(function _callee32$(_context32) {
2234
+ return _regeneratorRuntime.wrap(function _callee35$(_context35) {
2090
2235
  while (1) {
2091
- switch (_context32.prev = _context32.next) {
2236
+ switch (_context35.prev = _context35.next) {
2092
2237
  case 0:
2093
- fileId = _ref26.fileId, folderId = _ref26.folderId, customName = _ref26.customName;
2094
- file = vFilesCache.get(fileId);
2238
+ vFileId = _ref27.vFileId, folderId = _ref27.folderId, customName = _ref27.customName;
2239
+ file = vFilesCache.get(vFileId);
2095
2240
 
2096
2241
  if (file) {
2097
- _context32.next = 8;
2242
+ _context35.next = 8;
2098
2243
  break;
2099
2244
  }
2100
2245
 
2101
- _context32.next = 5;
2246
+ _context35.next = 5;
2102
2247
  return this.vFile({
2103
- id: fileId
2248
+ id: vFileId
2104
2249
  });
2105
2250
 
2106
2251
  case 5:
2107
- file = vFilesCache.get(fileId);
2252
+ file = vFilesCache.get(vFileId);
2108
2253
 
2109
2254
  if (file) {
2110
- _context32.next = 8;
2255
+ _context35.next = 8;
2111
2256
  break;
2112
2257
  }
2113
2258
 
2114
- throw new Error("File (" + fileId + ") does not exists");
2259
+ throw new Error("File (" + vFileId + ") does not exists");
2115
2260
 
2116
2261
  case 8:
2117
2262
  if (!customName) {
2118
- _context32.next = 14;
2263
+ _context35.next = 14;
2119
2264
  break;
2120
2265
  }
2121
2266
 
2122
- _context32.next = 11;
2267
+ _context35.next = 11;
2123
2268
  return encryptName(customName, file.userApp.nameKey);
2124
2269
 
2125
2270
  case 11:
2126
- _context32.t0 = _context32.sent;
2127
- _context32.next = 15;
2271
+ _context35.t0 = _context35.sent;
2272
+ _context35.next = 15;
2128
2273
  break;
2129
2274
 
2130
2275
  case 14:
2131
- _context32.t0 = null;
2276
+ _context35.t0 = null;
2132
2277
 
2133
2278
  case 15:
2134
- customName = _context32.t0;
2135
- _context32.next = 18;
2279
+ customName = _context35.t0;
2280
+ _context35.next = 18;
2136
2281
  return this.client.mutation({
2137
2282
  duplicateVFile: [{
2138
- fileId: fileId,
2283
+ vFileId: vFileId,
2139
2284
  folderId: folderId,
2140
2285
  customName: customName
2141
2286
  }, true]
2142
2287
  });
2143
2288
 
2144
2289
  case 18:
2145
- _yield$this$client$mu12 = _context32.sent;
2146
- duplicateVFile = _yield$this$client$mu12.duplicateVFile;
2147
- return _context32.abrupt("return", duplicateVFile);
2290
+ _yield$this$client$mu13 = _context35.sent;
2291
+ duplicateVFile = _yield$this$client$mu13.duplicateVFile;
2292
+ return _context35.abrupt("return", duplicateVFile);
2148
2293
 
2149
2294
  case 21:
2150
2295
  case "end":
2151
- return _context32.stop();
2296
+ return _context35.stop();
2152
2297
  }
2153
2298
  }
2154
- }, _callee32, this);
2299
+ }, _callee35, this);
2155
2300
  }));
2156
2301
 
2157
- function duplicateVFile(_x33) {
2302
+ function duplicateVFile(_x35) {
2158
2303
  return _duplicateVFile.apply(this, arguments);
2159
2304
  }
2160
2305
 
@@ -2162,15 +2307,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2162
2307
  }();
2163
2308
 
2164
2309
  _proto.deleteFolderCloudTrash = /*#__PURE__*/function () {
2165
- var _deleteFolderCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee33(_ref27) {
2166
- var ids, _yield$this$client$mu13, deleteFolderCloudTrash;
2310
+ var _deleteFolderCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee36(_ref28) {
2311
+ var ids, _yield$this$client$mu14, deleteFolderCloudTrash;
2167
2312
 
2168
- return _regeneratorRuntime.wrap(function _callee33$(_context33) {
2313
+ return _regeneratorRuntime.wrap(function _callee36$(_context36) {
2169
2314
  while (1) {
2170
- switch (_context33.prev = _context33.next) {
2315
+ switch (_context36.prev = _context36.next) {
2171
2316
  case 0:
2172
- ids = _ref27.ids;
2173
- _context33.next = 3;
2317
+ ids = _ref28.ids;
2318
+ _context36.next = 3;
2174
2319
  return this.client.mutation({
2175
2320
  deleteFolderCloudTrash: [{
2176
2321
  ids: ids
@@ -2178,19 +2323,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2178
2323
  });
2179
2324
 
2180
2325
  case 3:
2181
- _yield$this$client$mu13 = _context33.sent;
2182
- deleteFolderCloudTrash = _yield$this$client$mu13.deleteFolderCloudTrash;
2183
- return _context33.abrupt("return", deleteFolderCloudTrash != null ? deleteFolderCloudTrash : false);
2326
+ _yield$this$client$mu14 = _context36.sent;
2327
+ deleteFolderCloudTrash = _yield$this$client$mu14.deleteFolderCloudTrash;
2328
+ return _context36.abrupt("return", deleteFolderCloudTrash != null ? deleteFolderCloudTrash : false);
2184
2329
 
2185
2330
  case 6:
2186
2331
  case "end":
2187
- return _context33.stop();
2332
+ return _context36.stop();
2188
2333
  }
2189
2334
  }
2190
- }, _callee33, this);
2335
+ }, _callee36, this);
2191
2336
  }));
2192
2337
 
2193
- function deleteFolderCloudTrash(_x34) {
2338
+ function deleteFolderCloudTrash(_x36) {
2194
2339
  return _deleteFolderCloudTrash.apply(this, arguments);
2195
2340
  }
2196
2341
 
@@ -2198,15 +2343,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2198
2343
  }();
2199
2344
 
2200
2345
  _proto.deleteVFileCloudTrash = /*#__PURE__*/function () {
2201
- var _deleteVFileCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee34(_ref28) {
2202
- var ids, _yield$this$client$mu14, deleteVFileCloudTrash;
2346
+ var _deleteVFileCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee37(_ref29) {
2347
+ var ids, _yield$this$client$mu15, deleteVFileCloudTrash;
2203
2348
 
2204
- return _regeneratorRuntime.wrap(function _callee34$(_context34) {
2349
+ return _regeneratorRuntime.wrap(function _callee37$(_context37) {
2205
2350
  while (1) {
2206
- switch (_context34.prev = _context34.next) {
2351
+ switch (_context37.prev = _context37.next) {
2207
2352
  case 0:
2208
- ids = _ref28.ids;
2209
- _context34.next = 3;
2353
+ ids = _ref29.ids;
2354
+ _context37.next = 3;
2210
2355
  return this.client.mutation({
2211
2356
  deleteVFileCloudTrash: [{
2212
2357
  ids: ids
@@ -2214,19 +2359,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2214
2359
  });
2215
2360
 
2216
2361
  case 3:
2217
- _yield$this$client$mu14 = _context34.sent;
2218
- deleteVFileCloudTrash = _yield$this$client$mu14.deleteVFileCloudTrash;
2219
- return _context34.abrupt("return", deleteVFileCloudTrash != null ? deleteVFileCloudTrash : false);
2362
+ _yield$this$client$mu15 = _context37.sent;
2363
+ deleteVFileCloudTrash = _yield$this$client$mu15.deleteVFileCloudTrash;
2364
+ return _context37.abrupt("return", deleteVFileCloudTrash != null ? deleteVFileCloudTrash : false);
2220
2365
 
2221
2366
  case 6:
2222
2367
  case "end":
2223
- return _context34.stop();
2368
+ return _context37.stop();
2224
2369
  }
2225
2370
  }
2226
- }, _callee34, this);
2371
+ }, _callee37, this);
2227
2372
  }));
2228
2373
 
2229
- function deleteVFileCloudTrash(_x35) {
2374
+ function deleteVFileCloudTrash(_x37) {
2230
2375
  return _deleteVFileCloudTrash.apply(this, arguments);
2231
2376
  }
2232
2377
 
@@ -2234,15 +2379,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2234
2379
  }();
2235
2380
 
2236
2381
  _proto.deleteMailTrash = /*#__PURE__*/function () {
2237
- var _deleteMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee35(_ref29) {
2238
- var ids, _yield$this$client$mu15, deleteMailTrash;
2382
+ var _deleteMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee38(_ref30) {
2383
+ var ids, _yield$this$client$mu16, deleteMailTrash;
2239
2384
 
2240
- return _regeneratorRuntime.wrap(function _callee35$(_context35) {
2385
+ return _regeneratorRuntime.wrap(function _callee38$(_context38) {
2241
2386
  while (1) {
2242
- switch (_context35.prev = _context35.next) {
2387
+ switch (_context38.prev = _context38.next) {
2243
2388
  case 0:
2244
- ids = _ref29.ids;
2245
- _context35.next = 3;
2389
+ ids = _ref30.ids;
2390
+ _context38.next = 3;
2246
2391
  return this.client.mutation({
2247
2392
  deleteMailTrash: [{
2248
2393
  ids: ids
@@ -2250,19 +2395,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2250
2395
  });
2251
2396
 
2252
2397
  case 3:
2253
- _yield$this$client$mu15 = _context35.sent;
2254
- deleteMailTrash = _yield$this$client$mu15.deleteMailTrash;
2255
- return _context35.abrupt("return", deleteMailTrash);
2398
+ _yield$this$client$mu16 = _context38.sent;
2399
+ deleteMailTrash = _yield$this$client$mu16.deleteMailTrash;
2400
+ return _context38.abrupt("return", deleteMailTrash);
2256
2401
 
2257
2402
  case 6:
2258
2403
  case "end":
2259
- return _context35.stop();
2404
+ return _context38.stop();
2260
2405
  }
2261
2406
  }
2262
- }, _callee35, this);
2407
+ }, _callee38, this);
2263
2408
  }));
2264
2409
 
2265
- function deleteMailTrash(_x36) {
2410
+ function deleteMailTrash(_x38) {
2266
2411
  return _deleteMailTrash.apply(this, arguments);
2267
2412
  }
2268
2413
 
@@ -2270,29 +2415,29 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2270
2415
  }();
2271
2416
 
2272
2417
  _proto.emptyMailTrash = /*#__PURE__*/function () {
2273
- var _emptyMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee36() {
2274
- var _yield$this$client$mu16, emptyMailTrash;
2418
+ var _emptyMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee39() {
2419
+ var _yield$this$client$mu17, emptyMailTrash;
2275
2420
 
2276
- return _regeneratorRuntime.wrap(function _callee36$(_context36) {
2421
+ return _regeneratorRuntime.wrap(function _callee39$(_context39) {
2277
2422
  while (1) {
2278
- switch (_context36.prev = _context36.next) {
2423
+ switch (_context39.prev = _context39.next) {
2279
2424
  case 0:
2280
- _context36.next = 2;
2425
+ _context39.next = 2;
2281
2426
  return this.client.mutation({
2282
2427
  emptyMailTrash: true
2283
2428
  });
2284
2429
 
2285
2430
  case 2:
2286
- _yield$this$client$mu16 = _context36.sent;
2287
- emptyMailTrash = _yield$this$client$mu16.emptyMailTrash;
2288
- return _context36.abrupt("return", emptyMailTrash != null ? emptyMailTrash : false);
2431
+ _yield$this$client$mu17 = _context39.sent;
2432
+ emptyMailTrash = _yield$this$client$mu17.emptyMailTrash;
2433
+ return _context39.abrupt("return", emptyMailTrash != null ? emptyMailTrash : false);
2289
2434
 
2290
2435
  case 5:
2291
2436
  case "end":
2292
- return _context36.stop();
2437
+ return _context39.stop();
2293
2438
  }
2294
2439
  }
2295
- }, _callee36, this);
2440
+ }, _callee39, this);
2296
2441
  }));
2297
2442
 
2298
2443
  function emptyMailTrash() {
@@ -2303,29 +2448,29 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2303
2448
  }();
2304
2449
 
2305
2450
  _proto.emptyCloudTrash = /*#__PURE__*/function () {
2306
- var _emptyCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee37() {
2307
- var _yield$this$client$mu17, emptyCloudTrash;
2451
+ var _emptyCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee40() {
2452
+ var _yield$this$client$mu18, emptyCloudTrash;
2308
2453
 
2309
- return _regeneratorRuntime.wrap(function _callee37$(_context37) {
2454
+ return _regeneratorRuntime.wrap(function _callee40$(_context40) {
2310
2455
  while (1) {
2311
- switch (_context37.prev = _context37.next) {
2456
+ switch (_context40.prev = _context40.next) {
2312
2457
  case 0:
2313
- _context37.next = 2;
2458
+ _context40.next = 2;
2314
2459
  return this.client.mutation({
2315
2460
  emptyCloudTrash: true
2316
2461
  });
2317
2462
 
2318
2463
  case 2:
2319
- _yield$this$client$mu17 = _context37.sent;
2320
- emptyCloudTrash = _yield$this$client$mu17.emptyCloudTrash;
2321
- return _context37.abrupt("return", emptyCloudTrash != null ? emptyCloudTrash : false);
2464
+ _yield$this$client$mu18 = _context40.sent;
2465
+ emptyCloudTrash = _yield$this$client$mu18.emptyCloudTrash;
2466
+ return _context40.abrupt("return", emptyCloudTrash != null ? emptyCloudTrash : false);
2322
2467
 
2323
2468
  case 5:
2324
2469
  case "end":
2325
- return _context37.stop();
2470
+ return _context40.stop();
2326
2471
  }
2327
2472
  }
2328
- }, _callee37, this);
2473
+ }, _callee40, this);
2329
2474
  }));
2330
2475
 
2331
2476
  function emptyCloudTrash() {
@@ -2335,52 +2480,52 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2335
2480
  return emptyCloudTrash;
2336
2481
  }();
2337
2482
 
2338
- _proto.recoverFile = /*#__PURE__*/function () {
2339
- var _recoverFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee38(_ref30) {
2340
- var fileId, _yield$this$client$mu18, recoverFile;
2483
+ _proto.recoverVFile = /*#__PURE__*/function () {
2484
+ var _recoverVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee41(_ref31) {
2485
+ var vFileId, _yield$this$client$mu19, recoverVFile;
2341
2486
 
2342
- return _regeneratorRuntime.wrap(function _callee38$(_context38) {
2487
+ return _regeneratorRuntime.wrap(function _callee41$(_context41) {
2343
2488
  while (1) {
2344
- switch (_context38.prev = _context38.next) {
2489
+ switch (_context41.prev = _context41.next) {
2345
2490
  case 0:
2346
- fileId = _ref30.fileId;
2347
- _context38.next = 3;
2491
+ vFileId = _ref31.vFileId;
2492
+ _context41.next = 3;
2348
2493
  return this.client.mutation({
2349
- recoverFile: [{
2350
- fileId: fileId
2494
+ recoverVFile: [{
2495
+ vFileId: vFileId
2351
2496
  }, true]
2352
2497
  });
2353
2498
 
2354
2499
  case 3:
2355
- _yield$this$client$mu18 = _context38.sent;
2356
- recoverFile = _yield$this$client$mu18.recoverFile;
2357
- return _context38.abrupt("return", recoverFile);
2500
+ _yield$this$client$mu19 = _context41.sent;
2501
+ recoverVFile = _yield$this$client$mu19.recoverVFile;
2502
+ return _context41.abrupt("return", recoverVFile);
2358
2503
 
2359
2504
  case 6:
2360
2505
  case "end":
2361
- return _context38.stop();
2506
+ return _context41.stop();
2362
2507
  }
2363
2508
  }
2364
- }, _callee38, this);
2509
+ }, _callee41, this);
2365
2510
  }));
2366
2511
 
2367
- function recoverFile(_x37) {
2368
- return _recoverFile.apply(this, arguments);
2512
+ function recoverVFile(_x39) {
2513
+ return _recoverVFile.apply(this, arguments);
2369
2514
  }
2370
2515
 
2371
- return recoverFile;
2516
+ return recoverVFile;
2372
2517
  }();
2373
2518
 
2374
2519
  _proto.recoverFolder = /*#__PURE__*/function () {
2375
- var _recoverFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee39(_ref31) {
2376
- var id, _yield$this$client$mu19, recoverFolder;
2520
+ var _recoverFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee42(_ref32) {
2521
+ var id, _yield$this$client$mu20, recoverFolder;
2377
2522
 
2378
- return _regeneratorRuntime.wrap(function _callee39$(_context39) {
2523
+ return _regeneratorRuntime.wrap(function _callee42$(_context42) {
2379
2524
  while (1) {
2380
- switch (_context39.prev = _context39.next) {
2525
+ switch (_context42.prev = _context42.next) {
2381
2526
  case 0:
2382
- id = _ref31.id;
2383
- _context39.next = 3;
2527
+ id = _ref32.id;
2528
+ _context42.next = 3;
2384
2529
  return this.client.mutation({
2385
2530
  recoverFolder: [{
2386
2531
  id: id
@@ -2388,19 +2533,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2388
2533
  });
2389
2534
 
2390
2535
  case 3:
2391
- _yield$this$client$mu19 = _context39.sent;
2392
- recoverFolder = _yield$this$client$mu19.recoverFolder;
2393
- return _context39.abrupt("return", recoverFolder != null ? recoverFolder : false);
2536
+ _yield$this$client$mu20 = _context42.sent;
2537
+ recoverFolder = _yield$this$client$mu20.recoverFolder;
2538
+ return _context42.abrupt("return", recoverFolder != null ? recoverFolder : false);
2394
2539
 
2395
2540
  case 6:
2396
2541
  case "end":
2397
- return _context39.stop();
2542
+ return _context42.stop();
2398
2543
  }
2399
2544
  }
2400
- }, _callee39, this);
2545
+ }, _callee42, this);
2401
2546
  }));
2402
2547
 
2403
- function recoverFolder(_x38) {
2548
+ function recoverFolder(_x40) {
2404
2549
  return _recoverFolder.apply(this, arguments);
2405
2550
  }
2406
2551
 
@@ -2408,15 +2553,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2408
2553
  }();
2409
2554
 
2410
2555
  _proto.recoverMail = /*#__PURE__*/function () {
2411
- var _recoverMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee40(_ref32) {
2412
- var mailId, _yield$this$client$mu20, recoverMail;
2556
+ var _recoverMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee43(_ref33) {
2557
+ var mailId, _yield$this$client$mu21, recoverMail;
2413
2558
 
2414
- return _regeneratorRuntime.wrap(function _callee40$(_context40) {
2559
+ return _regeneratorRuntime.wrap(function _callee43$(_context43) {
2415
2560
  while (1) {
2416
- switch (_context40.prev = _context40.next) {
2561
+ switch (_context43.prev = _context43.next) {
2417
2562
  case 0:
2418
- mailId = _ref32.mailId;
2419
- _context40.next = 3;
2563
+ mailId = _ref33.mailId;
2564
+ _context43.next = 3;
2420
2565
  return this.client.mutation({
2421
2566
  recoverMail: [{
2422
2567
  mailId: mailId
@@ -2424,19 +2569,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2424
2569
  });
2425
2570
 
2426
2571
  case 3:
2427
- _yield$this$client$mu20 = _context40.sent;
2428
- recoverMail = _yield$this$client$mu20.recoverMail;
2429
- return _context40.abrupt("return", recoverMail);
2572
+ _yield$this$client$mu21 = _context43.sent;
2573
+ recoverMail = _yield$this$client$mu21.recoverMail;
2574
+ return _context43.abrupt("return", recoverMail);
2430
2575
 
2431
2576
  case 6:
2432
2577
  case "end":
2433
- return _context40.stop();
2578
+ return _context43.stop();
2434
2579
  }
2435
2580
  }
2436
- }, _callee40, this);
2581
+ }, _callee43, this);
2437
2582
  }));
2438
2583
 
2439
- function recoverMail(_x39) {
2584
+ function recoverMail(_x41) {
2440
2585
  return _recoverMail.apply(this, arguments);
2441
2586
  }
2442
2587
 
@@ -2444,15 +2589,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2444
2589
  }();
2445
2590
 
2446
2591
  _proto.deleteFile = /*#__PURE__*/function () {
2447
- var _deleteFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee41(_ref33) {
2448
- var fileId, vFileId, _yield$this$client$mu21, deleteFile;
2592
+ var _deleteFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee44(_ref34) {
2593
+ var fileId, vFileId, _yield$this$client$mu22, deleteFile;
2449
2594
 
2450
- return _regeneratorRuntime.wrap(function _callee41$(_context41) {
2595
+ return _regeneratorRuntime.wrap(function _callee44$(_context44) {
2451
2596
  while (1) {
2452
- switch (_context41.prev = _context41.next) {
2597
+ switch (_context44.prev = _context44.next) {
2453
2598
  case 0:
2454
- fileId = _ref33.fileId, vFileId = _ref33.vFileId;
2455
- _context41.next = 3;
2599
+ fileId = _ref34.fileId, vFileId = _ref34.vFileId;
2600
+ _context44.next = 3;
2456
2601
  return this.client.mutation({
2457
2602
  deleteFile: [{
2458
2603
  fileId: fileId,
@@ -2461,19 +2606,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2461
2606
  });
2462
2607
 
2463
2608
  case 3:
2464
- _yield$this$client$mu21 = _context41.sent;
2465
- deleteFile = _yield$this$client$mu21.deleteFile;
2466
- return _context41.abrupt("return", deleteFile);
2609
+ _yield$this$client$mu22 = _context44.sent;
2610
+ deleteFile = _yield$this$client$mu22.deleteFile;
2611
+ return _context44.abrupt("return", deleteFile);
2467
2612
 
2468
2613
  case 6:
2469
2614
  case "end":
2470
- return _context41.stop();
2615
+ return _context44.stop();
2471
2616
  }
2472
2617
  }
2473
- }, _callee41, this);
2618
+ }, _callee44, this);
2474
2619
  }));
2475
2620
 
2476
- function deleteFile(_x40) {
2621
+ function deleteFile(_x42) {
2477
2622
  return _deleteFile.apply(this, arguments);
2478
2623
  }
2479
2624
 
@@ -2481,15 +2626,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2481
2626
  }();
2482
2627
 
2483
2628
  _proto.deleteVFile = /*#__PURE__*/function () {
2484
- var _deleteVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee42(_ref34) {
2485
- var fileId, _yield$this$client$mu22, deleteVFile;
2629
+ var _deleteVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee45(_ref35) {
2630
+ var fileId, _yield$this$client$mu23, deleteVFile;
2486
2631
 
2487
- return _regeneratorRuntime.wrap(function _callee42$(_context42) {
2632
+ return _regeneratorRuntime.wrap(function _callee45$(_context45) {
2488
2633
  while (1) {
2489
- switch (_context42.prev = _context42.next) {
2634
+ switch (_context45.prev = _context45.next) {
2490
2635
  case 0:
2491
- fileId = _ref34.fileId;
2492
- _context42.next = 3;
2636
+ fileId = _ref35.fileId;
2637
+ _context45.next = 3;
2493
2638
  return this.client.mutation({
2494
2639
  deleteVFile: [{
2495
2640
  fileId: fileId
@@ -2497,19 +2642,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2497
2642
  });
2498
2643
 
2499
2644
  case 3:
2500
- _yield$this$client$mu22 = _context42.sent;
2501
- deleteVFile = _yield$this$client$mu22.deleteVFile;
2502
- return _context42.abrupt("return", deleteVFile);
2645
+ _yield$this$client$mu23 = _context45.sent;
2646
+ deleteVFile = _yield$this$client$mu23.deleteVFile;
2647
+ return _context45.abrupt("return", deleteVFile);
2503
2648
 
2504
2649
  case 6:
2505
2650
  case "end":
2506
- return _context42.stop();
2651
+ return _context45.stop();
2507
2652
  }
2508
2653
  }
2509
- }, _callee42, this);
2654
+ }, _callee45, this);
2510
2655
  }));
2511
2656
 
2512
- function deleteVFile(_x41) {
2657
+ function deleteVFile(_x43) {
2513
2658
  return _deleteVFile.apply(this, arguments);
2514
2659
  }
2515
2660
 
@@ -2517,15 +2662,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2517
2662
  }();
2518
2663
 
2519
2664
  _proto.deleteMail = /*#__PURE__*/function () {
2520
- var _deleteMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee43(_ref35) {
2521
- var mailId, _yield$this$client$mu23, deleteMail;
2665
+ var _deleteMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee46(_ref36) {
2666
+ var mailId, _yield$this$client$mu24, deleteMail;
2522
2667
 
2523
- return _regeneratorRuntime.wrap(function _callee43$(_context43) {
2668
+ return _regeneratorRuntime.wrap(function _callee46$(_context46) {
2524
2669
  while (1) {
2525
- switch (_context43.prev = _context43.next) {
2670
+ switch (_context46.prev = _context46.next) {
2526
2671
  case 0:
2527
- mailId = _ref35.mailId;
2528
- _context43.next = 3;
2672
+ mailId = _ref36.mailId;
2673
+ _context46.next = 3;
2529
2674
  return this.client.mutation({
2530
2675
  deleteMail: [{
2531
2676
  mailId: mailId
@@ -2533,19 +2678,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2533
2678
  });
2534
2679
 
2535
2680
  case 3:
2536
- _yield$this$client$mu23 = _context43.sent;
2537
- deleteMail = _yield$this$client$mu23.deleteMail;
2538
- return _context43.abrupt("return", deleteMail);
2681
+ _yield$this$client$mu24 = _context46.sent;
2682
+ deleteMail = _yield$this$client$mu24.deleteMail;
2683
+ return _context46.abrupt("return", deleteMail);
2539
2684
 
2540
2685
  case 6:
2541
2686
  case "end":
2542
- return _context43.stop();
2687
+ return _context46.stop();
2543
2688
  }
2544
2689
  }
2545
- }, _callee43, this);
2690
+ }, _callee46, this);
2546
2691
  }));
2547
2692
 
2548
- function deleteMail(_x42) {
2693
+ function deleteMail(_x44) {
2549
2694
  return _deleteMail.apply(this, arguments);
2550
2695
  }
2551
2696
 
@@ -2553,30 +2698,30 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2553
2698
  }();
2554
2699
 
2555
2700
  _proto.saveInCloud = /*#__PURE__*/function () {
2556
- var _saveInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee44(_ref36) {
2701
+ var _saveInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee47(_ref37) {
2557
2702
  var _this5 = this;
2558
2703
 
2559
- var fileId, name, folderId, key, file, _filesCache$get, _file2, receivedMails, mail, fileMail, fileKey, nameKey, encryptedName, encryptedNameKey, _yield$this$client$mu24, saveInCloud, vFile, me, others;
2704
+ var fileId, name, folderId, key, file, _filesCache$get, _file2, receivedMails, mail, fileMail, fileKey, nameKey, encryptedName, encryptedNameKey, _yield$this$client$mu25, saveInCloud, vFile, me, others;
2560
2705
 
2561
- return _regeneratorRuntime.wrap(function _callee44$(_context44) {
2706
+ return _regeneratorRuntime.wrap(function _callee47$(_context47) {
2562
2707
  while (1) {
2563
- switch (_context44.prev = _context44.next) {
2708
+ switch (_context47.prev = _context47.next) {
2564
2709
  case 0:
2565
- fileId = _ref36.fileId, name = _ref36.name, folderId = _ref36.folderId;
2710
+ fileId = _ref37.fileId, name = _ref37.name, folderId = _ref37.folderId;
2566
2711
 
2567
2712
  if (!(folderId && !foldersCache.has(folderId))) {
2568
- _context44.next = 6;
2713
+ _context47.next = 6;
2569
2714
  break;
2570
2715
  }
2571
2716
 
2572
- _context44.next = 4;
2717
+ _context47.next = 4;
2573
2718
  return this.folder({
2574
2719
  id: folderId
2575
2720
  });
2576
2721
 
2577
2722
  case 4:
2578
2723
  if (foldersCache.has(folderId)) {
2579
- _context44.next = 6;
2724
+ _context47.next = 6;
2580
2725
  break;
2581
2726
  }
2582
2727
 
@@ -2587,11 +2732,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2587
2732
  file = filesCache.get(fileId);
2588
2733
 
2589
2734
  if (file) {
2590
- _context44.next = 31;
2735
+ _context47.next = 31;
2591
2736
  break;
2592
2737
  }
2593
2738
 
2594
- _context44.next = 11;
2739
+ _context47.next = 11;
2595
2740
  return this.file({
2596
2741
  id: fileId
2597
2742
  });
@@ -2600,15 +2745,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2600
2745
  _file2 = (_filesCache$get = filesCache.get(fileId)) != null ? _filesCache$get : null;
2601
2746
 
2602
2747
  if (_file2) {
2603
- _context44.next = 26;
2748
+ _context47.next = 26;
2604
2749
  break;
2605
2750
  }
2606
2751
 
2607
- _context44.next = 15;
2752
+ _context47.next = 15;
2608
2753
  return this.receivedMails();
2609
2754
 
2610
2755
  case 15:
2611
- receivedMails = _context44.sent;
2756
+ receivedMails = _context47.sent;
2612
2757
  mail = receivedMails.find(function (m) {
2613
2758
  return m.files.some(function (f) {
2614
2759
  return f.id === fileId;
@@ -2616,7 +2761,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2616
2761
  });
2617
2762
 
2618
2763
  if (mail) {
2619
- _context44.next = 19;
2764
+ _context47.next = 19;
2620
2765
  break;
2621
2766
  }
2622
2767
 
@@ -2628,7 +2773,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2628
2773
  });
2629
2774
 
2630
2775
  if (fileMail) {
2631
- _context44.next = 22;
2776
+ _context47.next = 22;
2632
2777
  break;
2633
2778
  }
2634
2779
 
@@ -2637,12 +2782,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2637
2782
  case 22:
2638
2783
  fileKey = decryptCryptoBox(sodium.from_hex(fileMail.key), mail.sender.publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
2639
2784
  key = sodium.to_hex(fileKey);
2640
- _context44.next = 29;
2785
+ _context47.next = 29;
2641
2786
  break;
2642
2787
 
2643
2788
  case 26:
2644
2789
  if (_file2.user) {
2645
- _context44.next = 28;
2790
+ _context47.next = 28;
2646
2791
  break;
2647
2792
  }
2648
2793
 
@@ -2652,12 +2797,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2652
2797
  key = _file2.user.key;
2653
2798
 
2654
2799
  case 29:
2655
- _context44.next = 34;
2800
+ _context47.next = 34;
2656
2801
  break;
2657
2802
 
2658
2803
  case 31:
2659
2804
  if (file.user) {
2660
- _context44.next = 33;
2805
+ _context47.next = 33;
2661
2806
  break;
2662
2807
  }
2663
2808
 
@@ -2668,7 +2813,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2668
2813
 
2669
2814
  case 34:
2670
2815
  if (!(key === "")) {
2671
- _context44.next = 36;
2816
+ _context47.next = 36;
2672
2817
  break;
2673
2818
  }
2674
2819
 
@@ -2677,13 +2822,13 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2677
2822
  case 36:
2678
2823
  key = sodium.to_hex(encryptCryptoBox(sodium.from_hex(key), _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey));
2679
2824
  nameKey = secretstreamKeygen();
2680
- _context44.next = 40;
2825
+ _context47.next = 40;
2681
2826
  return encryptName(name, sodium.to_hex(nameKey));
2682
2827
 
2683
2828
  case 40:
2684
- encryptedName = _context44.sent;
2829
+ encryptedName = _context47.sent;
2685
2830
  encryptedNameKey = sodium.to_hex(encryptCryptoBox(nameKey, _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey));
2686
- _context44.next = 44;
2831
+ _context47.next = 44;
2687
2832
  return this.client.mutation({
2688
2833
  saveInCloud: [{
2689
2834
  fileId: fileId,
@@ -2695,31 +2840,31 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2695
2840
  });
2696
2841
 
2697
2842
  case 44:
2698
- _yield$this$client$mu24 = _context44.sent;
2699
- saveInCloud = _yield$this$client$mu24.saveInCloud;
2700
- _context44.next = 48;
2843
+ _yield$this$client$mu25 = _context47.sent;
2844
+ saveInCloud = _yield$this$client$mu25.saveInCloud;
2845
+ _context47.next = 48;
2701
2846
  return gqlVFileToExternal(saveInCloud, _classPrivateFieldLooseBase(this, _keys)[_keys]);
2702
2847
 
2703
2848
  case 48:
2704
- vFile = _context44.sent;
2705
- me = vFile.folder.users.find(function (_ref37) {
2706
- var u = _ref37[0];
2849
+ vFile = _context47.sent;
2850
+ me = vFile.folder.users.find(function (_ref38) {
2851
+ var u = _ref38[0];
2707
2852
  return u.publicKey === _classPrivateFieldLooseBase(_this5, _keys)[_keys].publicKey;
2708
2853
  });
2709
2854
 
2710
2855
  if (!(me && ["admin", "write"].includes(me[1]))) {
2711
- _context44.next = 54;
2856
+ _context47.next = 54;
2712
2857
  break;
2713
2858
  }
2714
2859
 
2715
- others = vFile.folder.users.filter(function (_ref38) {
2716
- var u = _ref38[0];
2860
+ others = vFile.folder.users.filter(function (_ref39) {
2861
+ var u = _ref39[0];
2717
2862
  return u.publicKey !== _classPrivateFieldLooseBase(_this5, _keys)[_keys].publicKey;
2718
2863
  });
2719
- _context44.next = 54;
2720
- return Promise.all(others.map(function (_ref39) {
2721
- var u = _ref39[0],
2722
- rights = _ref39[1];
2864
+ _context47.next = 54;
2865
+ return Promise.all(others.map(function (_ref40) {
2866
+ var u = _ref40[0],
2867
+ rights = _ref40[1];
2723
2868
  return _this5.shareVFile({
2724
2869
  vFileId: vFile.id,
2725
2870
  rights: rights,
@@ -2728,17 +2873,17 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2728
2873
  }));
2729
2874
 
2730
2875
  case 54:
2731
- return _context44.abrupt("return", vFile);
2876
+ return _context47.abrupt("return", vFile);
2732
2877
 
2733
2878
  case 55:
2734
2879
  case "end":
2735
- return _context44.stop();
2880
+ return _context47.stop();
2736
2881
  }
2737
2882
  }
2738
- }, _callee44, this);
2883
+ }, _callee47, this);
2739
2884
  }));
2740
2885
 
2741
- function saveInCloud(_x43) {
2886
+ function saveInCloud(_x45) {
2742
2887
  return _saveInCloud.apply(this, arguments);
2743
2888
  }
2744
2889
 
@@ -2746,55 +2891,55 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2746
2891
  }();
2747
2892
 
2748
2893
  _proto.sendDraftMail = /*#__PURE__*/function () {
2749
- var _sendDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee45(draftId, customMessage) {
2750
- var drafts, draft, recipients, temporaryRecipients, _iterator13, _step13, email, input, _iterator14, _step14, id, _input, _yield$this$client$mu25, sendDraftMail;
2894
+ var _sendDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee48(draftId, customMessage) {
2895
+ var drafts, draft, recipients, temporaryRecipients, _iterator14, _step14, email, input, _iterator15, _step15, id, _input, _yield$this$client$mu26, sendDraftMail;
2751
2896
 
2752
- return _regeneratorRuntime.wrap(function _callee45$(_context45) {
2897
+ return _regeneratorRuntime.wrap(function _callee48$(_context48) {
2753
2898
  while (1) {
2754
- switch (_context45.prev = _context45.next) {
2899
+ switch (_context48.prev = _context48.next) {
2755
2900
  case 0:
2756
- _context45.next = 2;
2901
+ _context48.next = 2;
2757
2902
  return this.draftMails();
2758
2903
 
2759
2904
  case 2:
2760
- drafts = _context45.sent;
2905
+ drafts = _context48.sent;
2761
2906
  draft = drafts.find(function (d) {
2762
2907
  return d.mailIntegrityId === draftId;
2763
2908
  });
2764
2909
 
2765
2910
  if (draft) {
2766
- _context45.next = 6;
2911
+ _context48.next = 6;
2767
2912
  break;
2768
2913
  }
2769
2914
 
2770
- return _context45.abrupt("return", false);
2915
+ return _context48.abrupt("return", false);
2771
2916
 
2772
2917
  case 6:
2773
2918
  recipients = new Array();
2774
2919
  temporaryRecipients = new Array();
2775
- _iterator13 = _createForOfIteratorHelperLoose(draft.temporaryRecipients);
2920
+ _iterator14 = _createForOfIteratorHelperLoose(draft.temporaryRecipients);
2776
2921
 
2777
2922
  case 9:
2778
- if ((_step13 = _iterator13()).done) {
2779
- _context45.next = 19;
2923
+ if ((_step14 = _iterator14()).done) {
2924
+ _context48.next = 19;
2780
2925
  break;
2781
2926
  }
2782
2927
 
2783
- email = _step13.value.email;
2928
+ email = _step14.value.email;
2784
2929
 
2785
2930
  if (email) {
2786
- _context45.next = 13;
2931
+ _context48.next = 13;
2787
2932
  break;
2788
2933
  }
2789
2934
 
2790
- return _context45.abrupt("continue", 17);
2935
+ return _context48.abrupt("continue", 17);
2791
2936
 
2792
2937
  case 13:
2793
- _context45.next = 15;
2938
+ _context48.next = 15;
2794
2939
  return this._eachUser(draft.files, draft.subject, draft.body, email);
2795
2940
 
2796
2941
  case 15:
2797
- input = _context45.sent;
2942
+ input = _context48.sent;
2798
2943
 
2799
2944
  if (!input) {
2800
2945
  temporaryRecipients.push(email);
@@ -2803,24 +2948,24 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2803
2948
  }
2804
2949
 
2805
2950
  case 17:
2806
- _context45.next = 9;
2951
+ _context48.next = 9;
2807
2952
  break;
2808
2953
 
2809
2954
  case 19:
2810
- _iterator14 = _createForOfIteratorHelperLoose(draft.recipients);
2955
+ _iterator15 = _createForOfIteratorHelperLoose(draft.recipients);
2811
2956
 
2812
2957
  case 20:
2813
- if ((_step14 = _iterator14()).done) {
2814
- _context45.next = 28;
2958
+ if ((_step15 = _iterator15()).done) {
2959
+ _context48.next = 28;
2815
2960
  break;
2816
2961
  }
2817
2962
 
2818
- id = _step14.value.id;
2819
- _context45.next = 24;
2963
+ id = _step15.value.id;
2964
+ _context48.next = 24;
2820
2965
  return this._eachUser(draft.files, draft.subject, draft.body, id);
2821
2966
 
2822
2967
  case 24:
2823
- _input = _context45.sent;
2968
+ _input = _context48.sent;
2824
2969
 
2825
2970
  if (!_input) {
2826
2971
  temporaryRecipients.push(id);
@@ -2829,11 +2974,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2829
2974
  }
2830
2975
 
2831
2976
  case 26:
2832
- _context45.next = 20;
2977
+ _context48.next = 20;
2833
2978
  break;
2834
2979
 
2835
2980
  case 28:
2836
- _context45.next = 30;
2981
+ _context48.next = 30;
2837
2982
  return this.client.mutation({
2838
2983
  sendDraftMail: [{
2839
2984
  temporaryRecipients: temporaryRecipients,
@@ -2844,19 +2989,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2844
2989
  });
2845
2990
 
2846
2991
  case 30:
2847
- _yield$this$client$mu25 = _context45.sent;
2848
- sendDraftMail = _yield$this$client$mu25.sendDraftMail;
2849
- return _context45.abrupt("return", sendDraftMail != null ? sendDraftMail : false);
2992
+ _yield$this$client$mu26 = _context48.sent;
2993
+ sendDraftMail = _yield$this$client$mu26.sendDraftMail;
2994
+ return _context48.abrupt("return", sendDraftMail != null ? sendDraftMail : false);
2850
2995
 
2851
2996
  case 33:
2852
2997
  case "end":
2853
- return _context45.stop();
2998
+ return _context48.stop();
2854
2999
  }
2855
3000
  }
2856
- }, _callee45, this);
3001
+ }, _callee48, this);
2857
3002
  }));
2858
3003
 
2859
- function sendDraftMail(_x44, _x45) {
3004
+ function sendDraftMail(_x46, _x47) {
2860
3005
  return _sendDraftMail.apply(this, arguments);
2861
3006
  }
2862
3007
 
@@ -2864,60 +3009,60 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2864
3009
  }();
2865
3010
 
2866
3011
  _proto.sendWaitingEmails = /*#__PURE__*/function () {
2867
- var _sendWaitingEmails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee46() {
2868
- var mails, filtered, _iterator15, _step15, mail, _iterator16, _step16, email, input;
3012
+ var _sendWaitingEmails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee49() {
3013
+ var mails, filtered, _iterator16, _step16, mail, _iterator17, _step17, email, input;
2869
3014
 
2870
- return _regeneratorRuntime.wrap(function _callee46$(_context46) {
3015
+ return _regeneratorRuntime.wrap(function _callee49$(_context49) {
2871
3016
  while (1) {
2872
- switch (_context46.prev = _context46.next) {
3017
+ switch (_context49.prev = _context49.next) {
2873
3018
  case 0:
2874
- _context46.next = 2;
3019
+ _context49.next = 2;
2875
3020
  return this.sentMails();
2876
3021
 
2877
3022
  case 2:
2878
- mails = _context46.sent;
3023
+ mails = _context49.sent;
2879
3024
  filtered = mails.filter(function (m) {
2880
3025
  return m.temporaryRecipients.length > 0;
2881
3026
  });
2882
- _iterator15 = _createForOfIteratorHelperLoose(filtered);
3027
+ _iterator16 = _createForOfIteratorHelperLoose(filtered);
2883
3028
 
2884
3029
  case 5:
2885
- if ((_step15 = _iterator15()).done) {
2886
- _context46.next = 22;
3030
+ if ((_step16 = _iterator16()).done) {
3031
+ _context49.next = 22;
2887
3032
  break;
2888
3033
  }
2889
3034
 
2890
- mail = _step15.value;
2891
- _iterator16 = _createForOfIteratorHelperLoose(mail.temporaryRecipients);
3035
+ mail = _step16.value;
3036
+ _iterator17 = _createForOfIteratorHelperLoose(mail.temporaryRecipients);
2892
3037
 
2893
3038
  case 8:
2894
- if ((_step16 = _iterator16()).done) {
2895
- _context46.next = 20;
3039
+ if ((_step17 = _iterator17()).done) {
3040
+ _context49.next = 20;
2896
3041
  break;
2897
3042
  }
2898
3043
 
2899
- email = _step16.value.email;
3044
+ email = _step17.value.email;
2900
3045
 
2901
3046
  if (email) {
2902
- _context46.next = 12;
3047
+ _context49.next = 12;
2903
3048
  break;
2904
3049
  }
2905
3050
 
2906
- return _context46.abrupt("continue", 18);
3051
+ return _context49.abrupt("continue", 18);
2907
3052
 
2908
3053
  case 12:
2909
- _context46.next = 14;
3054
+ _context49.next = 14;
2910
3055
  return this._eachUser(mail.files, mail.subject, mail.body, email);
2911
3056
 
2912
3057
  case 14:
2913
- input = _context46.sent;
3058
+ input = _context49.sent;
2914
3059
 
2915
3060
  if (!input) {
2916
- _context46.next = 18;
3061
+ _context49.next = 18;
2917
3062
  break;
2918
3063
  }
2919
3064
 
2920
- _context46.next = 18;
3065
+ _context49.next = 18;
2921
3066
  return this.client.mutation({
2922
3067
  sendOneMail: [{
2923
3068
  mailIntegrityId: mail.mailIntegrityId,
@@ -2926,22 +3071,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2926
3071
  });
2927
3072
 
2928
3073
  case 18:
2929
- _context46.next = 8;
3074
+ _context49.next = 8;
2930
3075
  break;
2931
3076
 
2932
3077
  case 20:
2933
- _context46.next = 5;
3078
+ _context49.next = 5;
2934
3079
  break;
2935
3080
 
2936
3081
  case 22:
2937
- return _context46.abrupt("return", false);
3082
+ return _context49.abrupt("return", false);
2938
3083
 
2939
3084
  case 23:
2940
3085
  case "end":
2941
- return _context46.stop();
3086
+ return _context49.stop();
2942
3087
  }
2943
3088
  }
2944
- }, _callee46, this);
3089
+ }, _callee49, this);
2945
3090
  }));
2946
3091
 
2947
3092
  function sendWaitingEmails() {
@@ -2952,37 +3097,37 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2952
3097
  }();
2953
3098
 
2954
3099
  _proto.createDraftMail = /*#__PURE__*/function () {
2955
- var _createDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee47(_ref40) {
2956
- var body, subject, files, recipientsIds, replyTo, hashKey, hash, senderFiles, _iterator17, _step17, f, file, _yield$this$client$mu26, createDraftMail;
3100
+ var _createDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee50(_ref41) {
3101
+ var body, subject, files, recipientsIds, replyTo, hashKey, hash, senderFiles, _iterator18, _step18, f, file, _yield$this$client$mu27, createDraftMail;
2957
3102
 
2958
- return _regeneratorRuntime.wrap(function _callee47$(_context47) {
3103
+ return _regeneratorRuntime.wrap(function _callee50$(_context50) {
2959
3104
  while (1) {
2960
- switch (_context47.prev = _context47.next) {
3105
+ switch (_context50.prev = _context50.next) {
2961
3106
  case 0:
2962
- body = _ref40.body, subject = _ref40.subject, files = _ref40.files, recipientsIds = _ref40.recipientsIds, replyTo = _ref40.replyTo;
3107
+ body = _ref41.body, subject = _ref41.subject, files = _ref41.files, recipientsIds = _ref41.recipientsIds, replyTo = _ref41.replyTo;
2963
3108
  hashKey = sodium.randombytes_buf(sodium.crypto_generichash_KEYBYTES, "hex");
2964
3109
  hash = sodium.crypto_generichash(sodium.crypto_generichash_BYTES, JSON.stringify({
2965
3110
  body: body,
2966
3111
  subject: subject
2967
3112
  }), hashKey, "hex");
2968
3113
  senderFiles = new Array();
2969
- _iterator17 = _createForOfIteratorHelperLoose(files);
3114
+ _iterator18 = _createForOfIteratorHelperLoose(files);
2970
3115
 
2971
3116
  case 5:
2972
- if ((_step17 = _iterator17()).done) {
2973
- _context47.next = 19;
3117
+ if ((_step18 = _iterator18()).done) {
3118
+ _context50.next = 19;
2974
3119
  break;
2975
3120
  }
2976
3121
 
2977
- f = _step17.value;
3122
+ f = _step18.value;
2978
3123
  file = filesCache.get(f.id);
2979
3124
 
2980
3125
  if (file) {
2981
- _context47.next = 14;
3126
+ _context50.next = 14;
2982
3127
  break;
2983
3128
  }
2984
3129
 
2985
- _context47.next = 11;
3130
+ _context50.next = 11;
2986
3131
  return this.file({
2987
3132
  id: f.id
2988
3133
  });
@@ -2991,7 +3136,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2991
3136
  file = filesCache.get(f.id);
2992
3137
 
2993
3138
  if (file) {
2994
- _context47.next = 14;
3139
+ _context50.next = 14;
2995
3140
  break;
2996
3141
  }
2997
3142
 
@@ -2999,11 +3144,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2999
3144
 
3000
3145
  case 14:
3001
3146
  if (file.user) {
3002
- _context47.next = 16;
3147
+ _context50.next = 16;
3003
3148
  break;
3004
3149
  }
3005
3150
 
3006
- return _context47.abrupt("continue", 17);
3151
+ return _context50.abrupt("continue", 17);
3007
3152
 
3008
3153
  case 16:
3009
3154
  senderFiles.push({
@@ -3013,11 +3158,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3013
3158
  });
3014
3159
 
3015
3160
  case 17:
3016
- _context47.next = 5;
3161
+ _context50.next = 5;
3017
3162
  break;
3018
3163
 
3019
3164
  case 19:
3020
- _context47.next = 21;
3165
+ _context50.next = 21;
3021
3166
  return this.client.mutation({
3022
3167
  createDraftMail: [{
3023
3168
  recipients: recipientsIds,
@@ -3031,28 +3176,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3031
3176
  });
3032
3177
 
3033
3178
  case 21:
3034
- _yield$this$client$mu26 = _context47.sent;
3035
- createDraftMail = _yield$this$client$mu26.createDraftMail;
3179
+ _yield$this$client$mu27 = _context50.sent;
3180
+ createDraftMail = _yield$this$client$mu27.createDraftMail;
3036
3181
 
3037
3182
  if (createDraftMail) {
3038
- _context47.next = 25;
3183
+ _context50.next = 25;
3039
3184
  break;
3040
3185
  }
3041
3186
 
3042
- return _context47.abrupt("return", null);
3187
+ return _context50.abrupt("return", null);
3043
3188
 
3044
3189
  case 25:
3045
- return _context47.abrupt("return", convertInternalMailToExternal(createDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
3190
+ return _context50.abrupt("return", convertInternalMailToExternal(createDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
3046
3191
 
3047
3192
  case 26:
3048
3193
  case "end":
3049
- return _context47.stop();
3194
+ return _context50.stop();
3050
3195
  }
3051
3196
  }
3052
- }, _callee47, this);
3197
+ }, _callee50, this);
3053
3198
  }));
3054
3199
 
3055
- function createDraftMail(_x46) {
3200
+ function createDraftMail(_x48) {
3056
3201
  return _createDraftMail.apply(this, arguments);
3057
3202
  }
3058
3203
 
@@ -3060,15 +3205,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3060
3205
  }();
3061
3206
 
3062
3207
  _proto.fileContent = /*#__PURE__*/function () {
3063
- var _fileContent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee49(_ref41) {
3064
- var fileId, onDownloadProgress, progressDecrypt, abort, _yield$this$client$qu12, fileContent, progressParts, onProgress, parts, byPart, encryptedContent, md5Encrypted, key, src, md5Content;
3208
+ var _fileContent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee52(_ref42) {
3209
+ var fileId, onDownloadProgress, progressDecrypt, signal, _yield$this$client$qu14, fileContent, progressParts, onProgress, parts, byPart, encryptedContent, md5Encrypted, key, src, md5Content;
3065
3210
 
3066
- return _regeneratorRuntime.wrap(function _callee49$(_context49) {
3211
+ return _regeneratorRuntime.wrap(function _callee52$(_context52) {
3067
3212
  while (1) {
3068
- switch (_context49.prev = _context49.next) {
3213
+ switch (_context52.prev = _context52.next) {
3069
3214
  case 0:
3070
- fileId = _ref41.fileId, onDownloadProgress = _ref41.onDownloadProgress, progressDecrypt = _ref41.progressDecrypt, abort = _ref41.abort;
3071
- _context49.next = 3;
3215
+ fileId = _ref42.fileId, onDownloadProgress = _ref42.onDownloadProgress, progressDecrypt = _ref42.progressDecrypt, signal = _ref42.signal;
3216
+ _context52.next = 3;
3072
3217
  return this.client.query({
3073
3218
  fileContent: [{
3074
3219
  fileId: fileId
@@ -3113,11 +3258,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3113
3258
  });
3114
3259
 
3115
3260
  case 3:
3116
- _yield$this$client$qu12 = _context49.sent;
3117
- fileContent = _yield$this$client$qu12.fileContent;
3261
+ _yield$this$client$qu14 = _context52.sent;
3262
+ fileContent = _yield$this$client$qu14.fileContent;
3118
3263
 
3119
3264
  if (fileContent) {
3120
- _context49.next = 7;
3265
+ _context52.next = 7;
3121
3266
  break;
3122
3267
  }
3123
3268
 
@@ -3142,32 +3287,32 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3142
3287
  parts = new Array();
3143
3288
 
3144
3289
  byPart = /*#__PURE__*/function () {
3145
- var _ref42 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee48(part) {
3290
+ var _ref43 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee51(part) {
3146
3291
  var buf, md5Part;
3147
- return _regeneratorRuntime.wrap(function _callee48$(_context48) {
3292
+ return _regeneratorRuntime.wrap(function _callee51$(_context51) {
3148
3293
  while (1) {
3149
- switch (_context48.prev = _context48.next) {
3294
+ switch (_context51.prev = _context51.next) {
3150
3295
  case 0:
3151
- _context48.t0 = Uint8Array;
3152
- _context48.next = 3;
3296
+ _context51.t0 = Uint8Array;
3297
+ _context51.next = 3;
3153
3298
  return ky.get(part.contentUrl, {
3154
3299
  onDownloadProgress: function onDownloadProgress(pr) {
3155
3300
  return onProgress(part.order, pr);
3156
3301
  },
3157
- signal: abort == null ? void 0 : abort.signal
3302
+ signal: signal
3158
3303
  }).arrayBuffer();
3159
3304
 
3160
3305
  case 3:
3161
- _context48.t1 = _context48.sent;
3162
- buf = new _context48.t0(_context48.t1);
3163
- _context48.next = 7;
3306
+ _context51.t1 = _context51.sent;
3307
+ buf = new _context51.t0(_context51.t1);
3308
+ _context51.next = 7;
3164
3309
  return md5(buf);
3165
3310
 
3166
3311
  case 7:
3167
- md5Part = _context48.sent;
3312
+ md5Part = _context51.sent;
3168
3313
 
3169
3314
  if (!(md5Part !== part.md5)) {
3170
- _context48.next = 10;
3315
+ _context51.next = 10;
3171
3316
  break;
3172
3317
  }
3173
3318
 
@@ -3181,18 +3326,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3181
3326
 
3182
3327
  case 11:
3183
3328
  case "end":
3184
- return _context48.stop();
3329
+ return _context51.stop();
3185
3330
  }
3186
3331
  }
3187
- }, _callee48);
3332
+ }, _callee51);
3188
3333
  }));
3189
3334
 
3190
- return function byPart(_x48) {
3191
- return _ref42.apply(this, arguments);
3335
+ return function byPart(_x50) {
3336
+ return _ref43.apply(this, arguments);
3192
3337
  };
3193
3338
  }();
3194
3339
 
3195
- _context49.next = 13;
3340
+ _context52.next = 13;
3196
3341
  return promiseAllLimit(3, fileContent.parts.map(function (p) {
3197
3342
  return function () {
3198
3343
  return byPart(p);
@@ -3206,52 +3351,51 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3206
3351
  return p.data;
3207
3352
  })); // const md5Encrypted = await firstValueFrom(md5(of(encryptedContent)));
3208
3353
 
3209
- _context49.next = 16;
3354
+ _context52.next = 16;
3210
3355
  return md5(encryptedContent);
3211
3356
 
3212
3357
  case 16:
3213
- md5Encrypted = _context49.sent;
3358
+ md5Encrypted = _context52.sent;
3214
3359
 
3215
3360
  if (!(md5Encrypted !== fileContent.md5Encrypted)) {
3216
- _context49.next = 19;
3361
+ _context52.next = 19;
3217
3362
  break;
3218
3363
  }
3219
3364
 
3220
3365
  throw new Error("Encrypted content does not match");
3221
3366
 
3222
3367
  case 19:
3223
- key = decryptCryptoBox(sodium.from_hex(fileContent.key), fileContent.__typename === "FileContentReceivedMail" ? fileContent.senderPublicKey : fileContent.__typename === "FileContentCloud" ? fileContent.publicKey : _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey); // TODO add abort
3224
-
3225
- _context49.next = 22;
3226
- return decrypt(key, encryptedContent, progressDecrypt);
3368
+ key = decryptCryptoBox(sodium.from_hex(fileContent.key), fileContent.__typename === "FileContentReceivedMail" ? fileContent.senderPublicKey : fileContent.__typename === "FileContentCloud" ? fileContent.publicKey : _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
3369
+ _context52.next = 22;
3370
+ return decrypt(key, encryptedContent, progressDecrypt, signal);
3227
3371
 
3228
3372
  case 22:
3229
- src = _context49.sent;
3230
- _context49.next = 25;
3373
+ src = _context52.sent;
3374
+ _context52.next = 25;
3231
3375
  return md5(src);
3232
3376
 
3233
3377
  case 25:
3234
- md5Content = _context49.sent;
3378
+ md5Content = _context52.sent;
3235
3379
 
3236
3380
  if (!(md5Content !== fileContent.md5)) {
3237
- _context49.next = 28;
3381
+ _context52.next = 28;
3238
3382
  break;
3239
3383
  }
3240
3384
 
3241
3385
  throw new Error("Content does not match");
3242
3386
 
3243
3387
  case 28:
3244
- return _context49.abrupt("return", uncompress(src));
3388
+ return _context52.abrupt("return", uncompress(src));
3245
3389
 
3246
3390
  case 29:
3247
3391
  case "end":
3248
- return _context49.stop();
3392
+ return _context52.stop();
3249
3393
  }
3250
3394
  }
3251
- }, _callee49, this);
3395
+ }, _callee52, this);
3252
3396
  }));
3253
3397
 
3254
- function fileContent(_x47) {
3398
+ function fileContent(_x49) {
3255
3399
  return _fileContent.apply(this, arguments);
3256
3400
  }
3257
3401
 
@@ -3259,18 +3403,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3259
3403
  }();
3260
3404
 
3261
3405
  _proto.updateFile = /*#__PURE__*/function () {
3262
- var _updateFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee50(_ref43) {
3263
- var fileId, filename, isFavorite, deletedAt, file, encryptedName, _yield$this$client$mu27, updateFile;
3406
+ var _updateFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee53(_ref44) {
3407
+ var fileId, filename, isFavorite, deletedAt, file, encryptedName, _yield$this$client$mu28, updateFile;
3264
3408
 
3265
- return _regeneratorRuntime.wrap(function _callee50$(_context50) {
3409
+ return _regeneratorRuntime.wrap(function _callee53$(_context53) {
3266
3410
  while (1) {
3267
- switch (_context50.prev = _context50.next) {
3411
+ switch (_context53.prev = _context53.next) {
3268
3412
  case 0:
3269
- fileId = _ref43.fileId, filename = _ref43.filename, isFavorite = _ref43.isFavorite, deletedAt = _ref43.deletedAt;
3413
+ fileId = _ref44.fileId, filename = _ref44.filename, isFavorite = _ref44.isFavorite, deletedAt = _ref44.deletedAt;
3270
3414
  file = vFilesCache.get(fileId);
3271
3415
 
3272
3416
  if (file) {
3273
- _context50.next = 4;
3417
+ _context53.next = 4;
3274
3418
  break;
3275
3419
  }
3276
3420
 
@@ -3278,24 +3422,24 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3278
3422
 
3279
3423
  case 4:
3280
3424
  if (!filename) {
3281
- _context50.next = 10;
3425
+ _context53.next = 10;
3282
3426
  break;
3283
3427
  }
3284
3428
 
3285
- _context50.next = 7;
3429
+ _context53.next = 7;
3286
3430
  return encryptName(filename, file.userApp.nameKey);
3287
3431
 
3288
3432
  case 7:
3289
- _context50.t0 = _context50.sent;
3290
- _context50.next = 11;
3433
+ _context53.t0 = _context53.sent;
3434
+ _context53.next = 11;
3291
3435
  break;
3292
3436
 
3293
3437
  case 10:
3294
- _context50.t0 = null;
3438
+ _context53.t0 = null;
3295
3439
 
3296
3440
  case 11:
3297
- encryptedName = _context50.t0;
3298
- _context50.next = 14;
3441
+ encryptedName = _context53.t0;
3442
+ _context53.next = 14;
3299
3443
  return this.client.mutation({
3300
3444
  updateFile: [{
3301
3445
  fileId: fileId,
@@ -3306,28 +3450,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3306
3450
  });
3307
3451
 
3308
3452
  case 14:
3309
- _yield$this$client$mu27 = _context50.sent;
3310
- updateFile = _yield$this$client$mu27.updateFile;
3453
+ _yield$this$client$mu28 = _context53.sent;
3454
+ updateFile = _yield$this$client$mu28.updateFile;
3311
3455
 
3312
3456
  if (updateFile) {
3313
- _context50.next = 18;
3457
+ _context53.next = 18;
3314
3458
  break;
3315
3459
  }
3316
3460
 
3317
3461
  throw new Error("Can't update file");
3318
3462
 
3319
3463
  case 18:
3320
- return _context50.abrupt("return", gqlVFileToExternal(updateFile, _classPrivateFieldLooseBase(this, _keys)[_keys]));
3464
+ return _context53.abrupt("return", gqlVFileToExternal(updateFile, _classPrivateFieldLooseBase(this, _keys)[_keys]));
3321
3465
 
3322
3466
  case 19:
3323
3467
  case "end":
3324
- return _context50.stop();
3468
+ return _context53.stop();
3325
3469
  }
3326
3470
  }
3327
- }, _callee50, this);
3471
+ }, _callee53, this);
3328
3472
  }));
3329
3473
 
3330
- function updateFile(_x49) {
3474
+ function updateFile(_x51) {
3331
3475
  return _updateFile.apply(this, arguments);
3332
3476
  }
3333
3477
 
@@ -3335,15 +3479,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3335
3479
  }();
3336
3480
 
3337
3481
  _proto.readMail = /*#__PURE__*/function () {
3338
- var _readMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee51(_ref44) {
3339
- var mailId, _yield$this$client$mu28, readMail;
3482
+ var _readMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee54(_ref45) {
3483
+ var mailId, _yield$this$client$mu29, readMail;
3340
3484
 
3341
- return _regeneratorRuntime.wrap(function _callee51$(_context51) {
3485
+ return _regeneratorRuntime.wrap(function _callee54$(_context54) {
3342
3486
  while (1) {
3343
- switch (_context51.prev = _context51.next) {
3487
+ switch (_context54.prev = _context54.next) {
3344
3488
  case 0:
3345
- mailId = _ref44.mailId;
3346
- _context51.next = 3;
3489
+ mailId = _ref45.mailId;
3490
+ _context54.next = 3;
3347
3491
  return this.client.mutation({
3348
3492
  readMail: [{
3349
3493
  mailId: mailId
@@ -3351,19 +3495,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3351
3495
  });
3352
3496
 
3353
3497
  case 3:
3354
- _yield$this$client$mu28 = _context51.sent;
3355
- readMail = _yield$this$client$mu28.readMail;
3356
- return _context51.abrupt("return", readMail != null ? readMail : false);
3498
+ _yield$this$client$mu29 = _context54.sent;
3499
+ readMail = _yield$this$client$mu29.readMail;
3500
+ return _context54.abrupt("return", readMail != null ? readMail : false);
3357
3501
 
3358
3502
  case 6:
3359
3503
  case "end":
3360
- return _context51.stop();
3504
+ return _context54.stop();
3361
3505
  }
3362
3506
  }
3363
- }, _callee51, this);
3507
+ }, _callee54, this);
3364
3508
  }));
3365
3509
 
3366
- function readMail(_x50) {
3510
+ function readMail(_x52) {
3367
3511
  return _readMail.apply(this, arguments);
3368
3512
  }
3369
3513
 
@@ -3371,15 +3515,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3371
3515
  }();
3372
3516
 
3373
3517
  _proto.unreadMail = /*#__PURE__*/function () {
3374
- var _unreadMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee52(_ref45) {
3375
- var mailId, _yield$this$client$mu29, unreadMail;
3518
+ var _unreadMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee55(_ref46) {
3519
+ var mailId, _yield$this$client$mu30, unreadMail;
3376
3520
 
3377
- return _regeneratorRuntime.wrap(function _callee52$(_context52) {
3521
+ return _regeneratorRuntime.wrap(function _callee55$(_context55) {
3378
3522
  while (1) {
3379
- switch (_context52.prev = _context52.next) {
3523
+ switch (_context55.prev = _context55.next) {
3380
3524
  case 0:
3381
- mailId = _ref45.mailId;
3382
- _context52.next = 3;
3525
+ mailId = _ref46.mailId;
3526
+ _context55.next = 3;
3383
3527
  return this.client.mutation({
3384
3528
  unreadMail: [{
3385
3529
  mailId: mailId
@@ -3387,19 +3531,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3387
3531
  });
3388
3532
 
3389
3533
  case 3:
3390
- _yield$this$client$mu29 = _context52.sent;
3391
- unreadMail = _yield$this$client$mu29.unreadMail;
3392
- return _context52.abrupt("return", unreadMail != null ? unreadMail : false);
3534
+ _yield$this$client$mu30 = _context55.sent;
3535
+ unreadMail = _yield$this$client$mu30.unreadMail;
3536
+ return _context55.abrupt("return", unreadMail != null ? unreadMail : false);
3393
3537
 
3394
3538
  case 6:
3395
3539
  case "end":
3396
- return _context52.stop();
3540
+ return _context55.stop();
3397
3541
  }
3398
3542
  }
3399
- }, _callee52, this);
3543
+ }, _callee55, this);
3400
3544
  }));
3401
3545
 
3402
- function unreadMail(_x51) {
3546
+ function unreadMail(_x53) {
3403
3547
  return _unreadMail.apply(this, arguments);
3404
3548
  }
3405
3549
 
@@ -3407,16 +3551,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3407
3551
  }();
3408
3552
 
3409
3553
  _proto.appSettings = /*#__PURE__*/function () {
3410
- var _appSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee53() {
3554
+ var _appSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee56() {
3411
3555
  var _user$appSettings;
3412
3556
 
3413
- var _yield$this$client$qu13, user;
3557
+ var _yield$this$client$qu15, user;
3414
3558
 
3415
- return _regeneratorRuntime.wrap(function _callee53$(_context53) {
3559
+ return _regeneratorRuntime.wrap(function _callee56$(_context56) {
3416
3560
  while (1) {
3417
- switch (_context53.prev = _context53.next) {
3561
+ switch (_context56.prev = _context56.next) {
3418
3562
  case 0:
3419
- _context53.next = 2;
3563
+ _context56.next = 2;
3420
3564
  return this.client.query({
3421
3565
  user: [{}, {
3422
3566
  appSettings: {
@@ -3430,25 +3574,25 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3430
3574
  });
3431
3575
 
3432
3576
  case 2:
3433
- _yield$this$client$qu13 = _context53.sent;
3434
- user = _yield$this$client$qu13.user;
3577
+ _yield$this$client$qu15 = _context56.sent;
3578
+ user = _yield$this$client$qu15.user;
3435
3579
 
3436
3580
  if (user) {
3437
- _context53.next = 6;
3581
+ _context56.next = 6;
3438
3582
  break;
3439
3583
  }
3440
3584
 
3441
- return _context53.abrupt("return", null);
3585
+ return _context56.abrupt("return", null);
3442
3586
 
3443
3587
  case 6:
3444
- return _context53.abrupt("return", (_user$appSettings = user.appSettings) != null ? _user$appSettings : null);
3588
+ return _context56.abrupt("return", (_user$appSettings = user.appSettings) != null ? _user$appSettings : null);
3445
3589
 
3446
3590
  case 7:
3447
3591
  case "end":
3448
- return _context53.stop();
3592
+ return _context56.stop();
3449
3593
  }
3450
3594
  }
3451
- }, _callee53, this);
3595
+ }, _callee56, this);
3452
3596
  }));
3453
3597
 
3454
3598
  function appSettings() {
@@ -3459,14 +3603,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3459
3603
  }();
3460
3604
 
3461
3605
  _proto.updateAppSettings = /*#__PURE__*/function () {
3462
- var _updateAppSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee54(settings) {
3463
- var _yield$this$client$mu30, updateAppSettings;
3606
+ var _updateAppSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee57(settings) {
3607
+ var _yield$this$client$mu31, updateAppSettings;
3464
3608
 
3465
- return _regeneratorRuntime.wrap(function _callee54$(_context54) {
3609
+ return _regeneratorRuntime.wrap(function _callee57$(_context57) {
3466
3610
  while (1) {
3467
- switch (_context54.prev = _context54.next) {
3611
+ switch (_context57.prev = _context57.next) {
3468
3612
  case 0:
3469
- _context54.next = 2;
3613
+ _context57.next = 2;
3470
3614
  return this.client.mutation({
3471
3615
  updateAppSettings: [settings, {
3472
3616
  autoDisconnectDelay: true,
@@ -3478,19 +3622,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3478
3622
  });
3479
3623
 
3480
3624
  case 2:
3481
- _yield$this$client$mu30 = _context54.sent;
3482
- updateAppSettings = _yield$this$client$mu30.updateAppSettings;
3483
- return _context54.abrupt("return", updateAppSettings);
3625
+ _yield$this$client$mu31 = _context57.sent;
3626
+ updateAppSettings = _yield$this$client$mu31.updateAppSettings;
3627
+ return _context57.abrupt("return", updateAppSettings);
3484
3628
 
3485
3629
  case 5:
3486
3630
  case "end":
3487
- return _context54.stop();
3631
+ return _context57.stop();
3488
3632
  }
3489
3633
  }
3490
- }, _callee54, this);
3634
+ }, _callee57, this);
3491
3635
  }));
3492
3636
 
3493
- function updateAppSettings(_x52) {
3637
+ function updateAppSettings(_x54) {
3494
3638
  return _updateAppSettings.apply(this, arguments);
3495
3639
  }
3496
3640
 
@@ -3498,16 +3642,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3498
3642
  }();
3499
3643
 
3500
3644
  _proto.receivedMails = /*#__PURE__*/function () {
3501
- var _receivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee55() {
3645
+ var _receivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee58() {
3502
3646
  var _user$receivedMails;
3503
3647
 
3504
- var _yield$this$client$qu14, user, mails, receivedMails, _iterator18, _step18, m, mail;
3648
+ var _yield$this$client$qu16, user, mails, receivedMails, _iterator19, _step19, m, mail;
3505
3649
 
3506
- return _regeneratorRuntime.wrap(function _callee55$(_context55) {
3650
+ return _regeneratorRuntime.wrap(function _callee58$(_context58) {
3507
3651
  while (1) {
3508
- switch (_context55.prev = _context55.next) {
3652
+ switch (_context58.prev = _context58.next) {
3509
3653
  case 0:
3510
- _context55.next = 2;
3654
+ _context58.next = 2;
3511
3655
  return this.client.query({
3512
3656
  user: [{}, {
3513
3657
  receivedMails: gqlMailQuery
@@ -3515,14 +3659,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3515
3659
  });
3516
3660
 
3517
3661
  case 2:
3518
- _yield$this$client$qu14 = _context55.sent;
3519
- user = _yield$this$client$qu14.user;
3662
+ _yield$this$client$qu16 = _context58.sent;
3663
+ user = _yield$this$client$qu16.user;
3520
3664
  mails = (_user$receivedMails = user == null ? void 0 : user.receivedMails) != null ? _user$receivedMails : []; // TODO get actual mails on this app only
3521
3665
 
3522
3666
  receivedMails = new Array();
3523
3667
 
3524
- for (_iterator18 = _createForOfIteratorHelperLoose(mails); !(_step18 = _iterator18()).done;) {
3525
- m = _step18.value;
3668
+ for (_iterator19 = _createForOfIteratorHelperLoose(mails); !(_step19 = _iterator19()).done;) {
3669
+ m = _step19.value;
3526
3670
  mail = convertInternalMailToExternal(m, _classPrivateFieldLooseBase(this, _keys)[_keys]);
3527
3671
 
3528
3672
  if (mail) {
@@ -3530,14 +3674,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3530
3674
  }
3531
3675
  }
3532
3676
 
3533
- return _context55.abrupt("return", receivedMails);
3677
+ return _context58.abrupt("return", receivedMails);
3534
3678
 
3535
3679
  case 8:
3536
3680
  case "end":
3537
- return _context55.stop();
3681
+ return _context58.stop();
3538
3682
  }
3539
3683
  }
3540
- }, _callee55, this);
3684
+ }, _callee58, this);
3541
3685
  }));
3542
3686
 
3543
3687
  function receivedMails() {
@@ -3548,16 +3692,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3548
3692
  }();
3549
3693
 
3550
3694
  _proto.sentMails = /*#__PURE__*/function () {
3551
- var _sentMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee56() {
3695
+ var _sentMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee59() {
3552
3696
  var _user$sentMails;
3553
3697
 
3554
- var _yield$this$client$qu15, user, mails, sentMails, _iterator19, _step19, m, mail;
3698
+ var _yield$this$client$qu17, user, mails, sentMails, _iterator20, _step20, m, mail;
3555
3699
 
3556
- return _regeneratorRuntime.wrap(function _callee56$(_context56) {
3700
+ return _regeneratorRuntime.wrap(function _callee59$(_context59) {
3557
3701
  while (1) {
3558
- switch (_context56.prev = _context56.next) {
3702
+ switch (_context59.prev = _context59.next) {
3559
3703
  case 0:
3560
- _context56.next = 2;
3704
+ _context59.next = 2;
3561
3705
  return this.client.query({
3562
3706
  user: [{}, {
3563
3707
  sentMails: gqlMailQuery
@@ -3565,14 +3709,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3565
3709
  });
3566
3710
 
3567
3711
  case 2:
3568
- _yield$this$client$qu15 = _context56.sent;
3569
- user = _yield$this$client$qu15.user;
3712
+ _yield$this$client$qu17 = _context59.sent;
3713
+ user = _yield$this$client$qu17.user;
3570
3714
  mails = (_user$sentMails = user == null ? void 0 : user.sentMails) != null ? _user$sentMails : []; // TODO get actual mails on this app only
3571
3715
 
3572
3716
  sentMails = new Array();
3573
3717
 
3574
- for (_iterator19 = _createForOfIteratorHelperLoose(mails); !(_step19 = _iterator19()).done;) {
3575
- m = _step19.value;
3718
+ for (_iterator20 = _createForOfIteratorHelperLoose(mails); !(_step20 = _iterator20()).done;) {
3719
+ m = _step20.value;
3576
3720
  mail = convertInternalMailToExternal(m, _classPrivateFieldLooseBase(this, _keys)[_keys]);
3577
3721
 
3578
3722
  if (mail) {
@@ -3580,14 +3724,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3580
3724
  }
3581
3725
  }
3582
3726
 
3583
- return _context56.abrupt("return", sentMails);
3727
+ return _context59.abrupt("return", sentMails);
3584
3728
 
3585
3729
  case 8:
3586
3730
  case "end":
3587
- return _context56.stop();
3731
+ return _context59.stop();
3588
3732
  }
3589
3733
  }
3590
- }, _callee56, this);
3734
+ }, _callee59, this);
3591
3735
  }));
3592
3736
 
3593
3737
  function sentMails() {
@@ -3598,16 +3742,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3598
3742
  }();
3599
3743
 
3600
3744
  _proto.draftMails = /*#__PURE__*/function () {
3601
- var _draftMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee57() {
3745
+ var _draftMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee60() {
3602
3746
  var _user$draftMails;
3603
3747
 
3604
- var _yield$this$client$qu16, user, mails, draftMails, _iterator20, _step20, m, draft;
3748
+ var _yield$this$client$qu18, user, mails, draftMails, _iterator21, _step21, m, draft;
3605
3749
 
3606
- return _regeneratorRuntime.wrap(function _callee57$(_context57) {
3750
+ return _regeneratorRuntime.wrap(function _callee60$(_context60) {
3607
3751
  while (1) {
3608
- switch (_context57.prev = _context57.next) {
3752
+ switch (_context60.prev = _context60.next) {
3609
3753
  case 0:
3610
- _context57.next = 2;
3754
+ _context60.next = 2;
3611
3755
  return this.client.query({
3612
3756
  user: [{}, {
3613
3757
  draftMails: gqlMailQuery
@@ -3615,14 +3759,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3615
3759
  });
3616
3760
 
3617
3761
  case 2:
3618
- _yield$this$client$qu16 = _context57.sent;
3619
- user = _yield$this$client$qu16.user;
3762
+ _yield$this$client$qu18 = _context60.sent;
3763
+ user = _yield$this$client$qu18.user;
3620
3764
  mails = (_user$draftMails = user == null ? void 0 : user.draftMails) != null ? _user$draftMails : []; // TODO get actual mails on this app only
3621
3765
 
3622
3766
  draftMails = new Array();
3623
3767
 
3624
- for (_iterator20 = _createForOfIteratorHelperLoose(mails); !(_step20 = _iterator20()).done;) {
3625
- m = _step20.value;
3768
+ for (_iterator21 = _createForOfIteratorHelperLoose(mails); !(_step21 = _iterator21()).done;) {
3769
+ m = _step21.value;
3626
3770
  draft = convertInternalMailToExternal(m, _classPrivateFieldLooseBase(this, _keys)[_keys]);
3627
3771
 
3628
3772
  if (draft) {
@@ -3630,14 +3774,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3630
3774
  }
3631
3775
  }
3632
3776
 
3633
- return _context57.abrupt("return", draftMails);
3777
+ return _context60.abrupt("return", draftMails);
3634
3778
 
3635
3779
  case 8:
3636
3780
  case "end":
3637
- return _context57.stop();
3781
+ return _context60.stop();
3638
3782
  }
3639
3783
  }
3640
- }, _callee57, this);
3784
+ }, _callee60, this);
3641
3785
  }));
3642
3786
 
3643
3787
  function draftMails() {
@@ -3647,6 +3791,13 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3647
3791
  return draftMails;
3648
3792
  }();
3649
3793
 
3794
+ _createClass(SecrecyClient, [{
3795
+ key: "publicKey",
3796
+ get: function get() {
3797
+ return _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey;
3798
+ }
3799
+ }]);
3800
+
3650
3801
  return SecrecyClient;
3651
3802
  }(BaseClient);
3652
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOlsia3kiLCJheGlvcyIsIkJhc2VDbGllbnQiLCJ2RmlsZXNDYWNoZSIsImZvbGRlcnNDYWNoZSIsImZpbGVzQ2FjaGUiLCJ1c2Vyc0NhY2hlIiwic2VjcmV0c3RyZWFtS2V5Z2VuIiwiZW5jcnlwdFNlY3JldHN0cmVhbSIsImNvbXByZXNzIiwidW5jb21wcmVzcyIsImdxbEZvbGRlclRvRXh0ZXJuYWwiLCJncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCIsImdxbFZGaWxlVG9FeHRlcm5hbCIsImdxbFZGaWxlVG9JbnRlcm5hbCIsImludGVybmFsVkZpbGVUb1ZGaWxlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImdxbEZpbGVRdWVyeSIsImdxbEZvbGRlclF1ZXJ5IiwiZ3FsRm9sZGVyUXVlcnlXaXRoTGlua3MiLCJncWxNYWlsUXVlcnkiLCJncWxWRmlsZVF1ZXJ5IiwiZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnkiLCJjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbCIsImVuY3J5cHROYW1lIiwibmFtZSIsIm5hbWVLZXkiLCJmcm9tX2hleCIsImZyb21fc3RyaW5nIiwiZGF0YSIsIm5hbWVFbmNyeXB0ZWQiLCJ0b19oZXgiLCJTZWNyZWN5Q2xpZW50IiwidWFTZXNzaW9uIiwidWFLZXlzIiwidWFKd3QiLCJlbnYiLCJqd3QiLCJwZXJGb2xkZXIiLCJmb2xkZXJJZCIsInB1YmxpY0tleSIsImZvbGRlciIsImdldCIsImlkIiwidXNlckFwcCIsInByaXZhdGVLZXkiLCJwZXJWRmlsZSIsInZGaWxlSWQiLCJ2RmlsZSIsImZpbGVzIiwiaGlzdG9yeSIsIm1hcCIsImYiLCJrZXkiLCJ1c2VyIiwiX2VhY2hVc2VyIiwic3ViamVjdCIsImJvZHkiLCJpZE9yTWFpbCIsInUiLCJ1c2VySWQiLCJ3aXRoUHVibGljS2V5IiwidW5kZWZpbmVkIiwiRXJyb3IiLCJyZWNpcGllbnRzRmlsZXMiLCJBcnJheSIsImZpbGVJbkhpc3RvcnkiLCJmaWxlIiwicHVzaCIsImZpbGVLZXkiLCJyZWNpcGllbnRJZCIsImFkZEZpbGVUb0hpc3RvcnkiLCJmaWxlSWQiLCJjbGllbnQiLCJtdXRhdGlvbiIsImZpbmQiLCJ1c2VycyIsImZpbHRlciIsImlucHV0Iiwic2hhcmVGaWxlSW5IaXN0b3J5IiwidXBsb2FkRmlsZSIsImVuY3J5cHRQcm9ncmVzcyIsInVwbG9hZFByb2dyZXNzIiwiY2FuY2VsVG9rZW4iLCJGaWxlIiwiVWludDhBcnJheSIsImFycmF5QnVmZmVyIiwiZmlsZUJ1ZmZlciIsImNvbXByZXNzZWQiLCJlbmNyeXB0ZWRGaWxlIiwibWQ1RmlsZSIsIm1kNUVuY3J5cHRlZCIsImVuY3J5cHRlZEZpbGVLZXkiLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlU2l6ZUJlZm9yZSIsImZpbGVQYXJ0U2l6ZSIsInBhcnRzIiwiZmllbGRzIiwib3JkZXIiLCJ1cmwiLCJ0b3RhbCIsImN1cnJlbnQiLCJwZXJjZW50IiwibGVuZ3RoIiwidXBsb2FkUGFydEVuZGVkIiwidXBsb2FkRmlsZVBhcnRFbmQiLCJ1cGxvYWRFbmRlZCIsInVwbG9hZEZpbGVFbmQiLCJjaHVua1BhcnRzIiwiTnVtYmVyIiwiaW5kZXgiLCJjaHVuayIsInByb2dyZXNzUGFydHMiLCJvblByb2dyZXNzIiwicGFydCIsInByb2dyZXNzRXZlbnQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJwcnYiLCJjdXIiLCJsb2FkZWQiLCJieVBhcnQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwicCIsImVudHJpZXMiLCJ2YWx1ZSIsImFwcGVuZCIsIkJsb2IiLCJwb3N0Iiwib25VcGxvYWRQcm9ncmVzcyIsInJlc3BvbnNlIiwic3RhdHVzIiwidXBsb2FkRmlsZUluQ2xvdWQiLCJzYXZlSW5DbG91ZCIsImxvZ291dCIsInNlc3Npb25JZCIsImNsZWFyIiwiY3JlYXRlRm9sZGVyIiwicGFyZW50Rm9sZGVySWQiLCJlbmNyeXB0ZWROYW1lIiwiZW5jcnlwdGVkS2V5IiwicGFyZW50Rm9sZGVyIiwiUHJvbWlzZSIsImFsbCIsInJpZ2h0cyIsInNoYXJlRm9sZGVyIiwiZGVsZXRlZCIsInF1ZXJ5IiwibWFpbCIsInNoYXJlVkZpbGUiLCJoIiwic2hhcmVkVkZpbGVzIiwidkZpbGVzIiwidkZpbGVzU2hhcmVkV2l0aE1lIiwiZGVsZXRlZFZGaWxlcyIsInNoYXJlZEZvbGRlcnMiLCJmb2xkZXJzIiwiZm9sZGVyc1NoYXJlZFdpdGhNZSIsImRlbGV0ZWRGb2xkZXJzIiwic2hhcmVGb2xkZXJzIiwidkZpbGVJbnB1dCIsInNoYXJlRm9sZGVyRmluaXNoIiwidXBkYXRlRm9sZGVyIiwiaXNGYXZvcml0ZSIsImRlbGV0ZWRBdCIsImNyZWF0ZU1haWwiLCJjdXN0b21NZXNzYWdlIiwiY3JlYXRlRHJhZnRNYWlsIiwic2VuZERyYWZ0TWFpbCIsIm1haWxJbnRlZ3JpdHlJZCIsIndhaXRpbmdSZWNlaXZlZE1haWxzIiwiZGF0ZSIsImF0dGFjaG1lbnRzQ291bnQiLCJzZW5kZXIiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImVtYWlsIiwicmVjaXBpZW50cyIsInRlbXBvcmFyeVJlY2lwaWVudHMiLCJtIiwiRGF0ZSIsInVwZGF0ZURyYWZ0TWFpbCIsImRyYWZ0SWQiLCJyZWNpcGllbnRzSWRzIiwicmVwbHlUbyIsImRyYWZ0TWFpbHMiLCJkcmFmdHMiLCJkcmFmdCIsImQiLCJoYXNoS2V5IiwiaGFzaCIsInJhbmRvbWJ5dGVzX2J1ZiIsImNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyIsImNyeXB0b19nZW5lcmljaGFzaCIsImNyeXB0b19nZW5lcmljaGFzaF9CWVRFUyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZW5kZXJGaWxlcyIsImRlbGV0ZURyYWZ0TWFpbCIsImRlbGV0ZVZGaWxlU2hhcmluZyIsImRlbGV0ZUZvbGRlclNoYXJpbmciLCJkdXBsaWNhdGVWRmlsZSIsImN1c3RvbU5hbWUiLCJkZWxldGVGb2xkZXJDbG91ZFRyYXNoIiwiaWRzIiwiZGVsZXRlVkZpbGVDbG91ZFRyYXNoIiwiZGVsZXRlTWFpbFRyYXNoIiwiZW1wdHlNYWlsVHJhc2giLCJlbXB0eUNsb3VkVHJhc2giLCJyZWNvdmVyRmlsZSIsInJlY292ZXJGb2xkZXIiLCJyZWNvdmVyTWFpbCIsIm1haWxJZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVWRmlsZSIsImRlbGV0ZU1haWwiLCJoYXMiLCJyZWNlaXZlZE1haWxzIiwic29tZSIsImZpbGVNYWlsIiwiZW5jcnlwdGVkTmFtZUtleSIsImZpbGVuYW1lIiwibWUiLCJpbmNsdWRlcyIsIm90aGVycyIsImRyYWZ0TWFpbElkIiwic2VuZFdhaXRpbmdFbWFpbHMiLCJzZW50TWFpbHMiLCJtYWlscyIsImZpbHRlcmVkIiwic2VuZE9uZU1haWwiLCJyZWNpcGllbnQiLCJmaWxlQ29udGVudCIsIm9uRG93bmxvYWRQcm9ncmVzcyIsInByb2dyZXNzRGVjcnlwdCIsImFib3J0IiwiX190eXBlbmFtZSIsImNvbnRlbnRVcmwiLCJ0b3RhbFNpemUiLCJzZW5kZXJQdWJsaWNLZXkiLCJ0cmFuc2ZlcnJlZEJ5dGVzIiwidG90YWxCeXRlcyIsInByIiwic2lnbmFsIiwiYnVmIiwibWQ1UGFydCIsImVuY3J5cHRlZENvbnRlbnQiLCJzb3J0IiwiYSIsImIiLCJzcmMiLCJtZDVDb250ZW50IiwidXBkYXRlRmlsZSIsInJlYWRNYWlsIiwidW5yZWFkTWFpbCIsImFwcFNldHRpbmdzIiwiYXV0b0Rpc2Nvbm5lY3REZWxheSIsImNsb3VkRmlsZURheXNGb3JEZWxldGUiLCJjbG91ZEZvbGRlckRheXNGb3JEZWxldGUiLCJoaXN0b3J5RmlsZURheXNGb3JEZWxldGUiLCJoaXN0b3J5TWF4RmlsZUNvdW50IiwidXBkYXRl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O0FBRXJCLG9CQUFJUSxLQUFKLEVBQVc7QUFDVEYsa0JBQUFBLFVBQVUsQ0FBQ3hILElBQVgsQ0FBZ0IwSCxLQUFoQjtBQUNEO0FBQ0Y7O0FBckJILGlEQXVCU0YsVUF2QlQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FyakRGOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUEsRUFBbUNyTSxVQUFuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRG93bmxvYWRQcm9ncmVzcyB9IGZyb20gXCJreVwiO1xuaW1wb3J0IGt5IGZyb20gXCJreVwiO1xuaW1wb3J0IHR5cGUgeyBDYW5jZWxUb2tlbiB9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHsgQmFzZUNsaWVudCB9IGZyb20gXCIuLi9CYXNlQ2xpZW50LmpzXCI7XG5pbXBvcnQgeyB2RmlsZXNDYWNoZSwgZm9sZGVyc0NhY2hlLCBmaWxlc0NhY2hlLCB1c2Vyc0NhY2hlIH0gZnJvbSBcIi4uL2NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2dyZXNzIH0gZnJvbSBcIi4uL2NyeXB0by9maWxlLmpzXCI7XG5pbXBvcnQgeyBzZWNyZXRzdHJlYW1LZXlnZW4sIGVuY3J5cHRTZWNyZXRzdHJlYW0gfSBmcm9tIFwiLi4vY3J5cHRvL2ZpbGUuanNcIjtcbmltcG9ydCB7IGNvbXByZXNzLCB1bmNvbXByZXNzIH0gZnJvbSBcIi4uL21pbmlmeS9pbmRleC5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsRm9sZGVyVG9FeHRlcm5hbCxcbiAgZ3FsRm9sZGVyVG9FeHRlcm5hbEZvbGRlckZ1bGxcbn0gZnJvbSBcIi4vY29udmVydC9mb2xkZXIuanNcIjtcbmltcG9ydCB7XG4gIGdxbFZGaWxlVG9FeHRlcm5hbCxcbiAgZ3FsVkZpbGVUb0ludGVybmFsLFxuICBpbnRlcm5hbFZGaWxlVG9WRmlsZVxufSBmcm9tIFwiLi9jb252ZXJ0L3ZGaWxlLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIE1haWxGaWxlSW5wdXQsXG4gIFJlY2VpdmVkTWFpbCxcbiAgU2VudE1haWwsXG4gIEZvbGRlcixcbiAgVkZpbGVXaXRoRm9sZGVyLFxuICBGb2xkZXJGdWxsLFxuICBVc2VyQXBwU2V0dGluZ3MsXG4gIEZpbGUgYXMgU2VjcmVjeUZpbGUsXG4gIFdhaXRpbmdSZWNlaXZlZE1haWwsXG4gIERyYWZ0TWFpbCxcbiAgTWFpbFJlY2lwaWVudElucHV0LFxuICBWRmlsZSxcbiAgU2hhcmVGb2xkZXJzSW5wdXQsXG4gIE5hbWVLZXlJbnB1dCxcbiAgTmFtZUtleUlucHV0Rm9sZGVycyxcbiAgTWFpbCxcbiAgU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQsXG4gIEZpbGVQYXJ0UmVzcG9uc2UsXG4gIEZpbGVDb250ZW50UGFydFxufSBmcm9tIFwiLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ3FsRmlsZVRvRXh0ZXJuYWwgfSBmcm9tIFwiLi9jb252ZXJ0L2ZpbGUuanNcIjtcbmltcG9ydCB7IHNvZGl1bSB9IGZyb20gXCIuLi9zb2RpdW0uanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5UGFpciB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB7IGRlY3J5cHRDcnlwdG9Cb3gsIGVuY3J5cHRDcnlwdG9Cb3ggfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzaG9ydGlkXCI7XG5pbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL21kNS5qc1wiO1xuaW1wb3J0IHsgZW5jcnlwdCwgZGVjcnlwdCB9IGZyb20gXCIuLi93b3JrZXIvc29kaXVtLmpzXCI7XG5pbXBvcnQgeyBjaHVua3MsIGNvbmNhdGVuYXRlLCBlbnVtZXJhdGUsIHByb21pc2VBbGxMaW1pdCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsRmlsZVF1ZXJ5LFxuICBncWxGb2xkZXJRdWVyeSxcbiAgZ3FsRm9sZGVyUXVlcnlXaXRoTGlua3MsXG4gIGdxbE1haWxRdWVyeSxcbiAgZ3FsVkZpbGVRdWVyeSxcbiAgZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbn0gZnJvbSBcIi4vdHlwZXMvcXVlcmllcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSaWdodHMgfSBmcm9tIFwiLi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwgfSBmcm9tIFwiLi9jb252ZXJ0L21haWwuanNcIjtcbi8vIGltcG9ydCB7IG1kNSB9IGZyb20gXCIuLi93b3JrZXIvaW5kZXguanNcIjtcbi8vIGltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCB0eXBlIE5ld01haWwgPSB7XG4gIGJvZHk6IHN0cmluZztcbiAgc3ViamVjdDogc3RyaW5nO1xuICBmaWxlczogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdO1xuICByZWNpcGllbnRzSWRzOiBzdHJpbmdbXTtcbiAgcmVwbHlUbz86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBQcm9ncmVzcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuY29uc3QgZW5jcnlwdE5hbWUgPSBhc3luYyAobmFtZTogc3RyaW5nLCBuYW1lS2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGVuY3J5cHRTZWNyZXRzdHJlYW0oXG4gICAgc29kaXVtLmZyb21faGV4KG5hbWVLZXkpLFxuICAgIHNvZGl1bS5mcm9tX3N0cmluZyhuYW1lKVxuICApO1xuICBjb25zdCBuYW1lRW5jcnlwdGVkID0gc29kaXVtLnRvX2hleChkYXRhKTtcbiAgcmV0dXJuIG5hbWVFbmNyeXB0ZWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgU2VjcmVjeUNsaWVudCBleHRlbmRzIEJhc2VDbGllbnQge1xuICBqd3Q6IHN0cmluZztcblxuICAja2V5czogS2V5UGFpcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB1YVNlc3Npb246IHN0cmluZyxcbiAgICB1YUtleXM6IEtleVBhaXIsXG4gICAgdWFKd3Q6IHN0cmluZyxcbiAgICBlbnY6IFNlY3JlY3lFbnZcbiAgKSB7XG4gICAgc3VwZXIodWFTZXNzaW9uLCBlbnYpO1xuICAgIHRoaXMuand0ID0gdWFKd3Q7XG4gICAgdGhpcy4ja2V5cyA9IHVhS2V5cztcbiAgfVxuXG4gIGFzeW5jIGFkZEZpbGVUb0hpc3Rvcnkoe1xuICAgIGZpbGVJZCxcbiAgICB2RmlsZUlkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFZGaWxlPiB7XG4gICAgY29uc3QgeyBhZGRGaWxlVG9IaXN0b3J5IH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBhZGRGaWxlVG9IaXN0b3J5OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgdkZpbGVJZFxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCB2RmlsZSA9IGF3YWl0IGdxbFZGaWxlVG9JbnRlcm5hbChhZGRGaWxlVG9IaXN0b3J5LCB0aGlzLiNrZXlzKTtcbiAgICBjb25zdCBmaWxlID0gdkZpbGUuaGlzdG9yeS5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgdXNlcnMgPSB2RmlsZS51c2Vycy5maWx0ZXIoXG4gICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGlucHV0OiBTaGFyZUZpbGVJbkhpc3RvcnlJbnB1dCA9IHtcbiAgICAgICAgZmlsZUlkOiBmaWxlLmlkLFxuICAgICAgICB1c2VyczogdXNlcnMubWFwKChbdV0pID0+ICh7XG4gICAgICAgICAgaWQ6IHUuaWQsXG4gICAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGUudXNlciEua2V5KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSkpXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHNoYXJlRmlsZUluSGlzdG9yeTogW3sgaW5wdXQsIHZGaWxlSWQgfSwgdHJ1ZV1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJuYWxWRmlsZVRvVkZpbGUodkZpbGUpO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZSh7XG4gICAgZmlsZSxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgY2FuY2VsVG9rZW5cbiAgfToge1xuICAgIGZpbGU6IGdsb2JhbFRoaXMuRmlsZSB8IFVpbnQ4QXJyYXk7XG4gICAgY2FuY2VsVG9rZW4/OiBDYW5jZWxUb2tlbjtcbiAgICBlbmNyeXB0UHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHVwbG9hZFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICAvLyBhYm9ydD86IEFib3J0Q29udHJvbGxlcjtcbiAgfSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGNvbnN0IGZpbGVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBmaWxlQnVmZmVyID1cbiAgICAgIGZpbGUgaW5zdGFuY2VvZiBGaWxlID8gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpKSA6IGZpbGU7XG4gICAgY29uc3QgY29tcHJlc3NlZCA9IGNvbXByZXNzKGZpbGVCdWZmZXIpO1xuICAgIC8vIFRPRE86IHVzZSBhYm9ydCBjb250cm9sbGVyIHRvIGNhbmNlbCB1cGxvYWQsIGFuZCBzZWUgdHlwaW5nc1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGE6IGVuY3J5cHRlZEZpbGUsXG4gICAgICBtZDU6IG1kNUZpbGUsXG4gICAgICBtZDVFbmNyeXB0ZWRcbiAgICB9ID0gYXdhaXQgZW5jcnlwdChmaWxlS2V5LCBjb21wcmVzc2VkLCBlbmNyeXB0UHJvZ3Jlc3MpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkRmlsZUtleSA9IGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICBmaWxlS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuXG4gICAgY29uc3QgeyB1cGxvYWRGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGxvYWRGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlU2l6ZTogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICAgIGZpbGVTaXplQmVmb3JlOiBmaWxlQnVmZmVyLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChlbmNyeXB0ZWRGaWxlS2V5KSxcbiAgICAgICAgICBtZDVFbmNyeXB0ZWQsXG4gICAgICAgICAgbWQ1OiBtZDVGaWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQ6IHRydWUsXG4gICAgICAgICAgZmlsZVBhcnRTaXplOiB0cnVlLFxuICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICBmaWVsZHM6IHRydWUsXG4gICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgIHVybDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICBjdXJyZW50OiAwLFxuICAgICAgcGVyY2VudDogMFxuICAgIH0pO1xuXG4gICAgaWYgKHVwbG9hZEZpbGUucGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgY3VycmVudDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBwZXJjZW50OiAxXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHVwbG9hZEZpbGUuZmlsZUlkO1xuICAgIH1cblxuICAgIGNvbnN0IHVwbG9hZFBhcnRFbmRlZCA9IGFzeW5jIChcbiAgICAgIG1kNTogc3RyaW5nLFxuICAgICAgb3JkZXI6IG51bWJlclxuICAgICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlUGFydEVuZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgICB1cGxvYWRGaWxlUGFydEVuZDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpbGVJZDogdXBsb2FkRmlsZS5maWxlSWQsXG4gICAgICAgICAgICBtZDUsXG4gICAgICAgICAgICBvcmRlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHVwbG9hZEZpbGVQYXJ0RW5kO1xuICAgIH07XG5cbiAgICBjb25zdCB1cGxvYWRFbmRlZCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgICAgIGNvbnN0IHsgdXBsb2FkRmlsZUVuZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgICB1cGxvYWRGaWxlRW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLmZpbGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHVwbG9hZEZpbGVFbmQgPz8gbnVsbDtcbiAgICB9O1xuXG4gICAgY29uc3QgY2h1bmtQYXJ0cyA9IG5ldyBBcnJheTx7XG4gICAgICBvcmRlcjogbnVtYmVyO1xuICAgICAgZGF0YTogVWludDhBcnJheTtcbiAgICAgIG1kNTogc3RyaW5nO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY2h1bmtdIG9mIGVudW1lcmF0ZShcbiAgICAgIGNodW5rcyhlbmNyeXB0ZWRGaWxlLCBOdW1iZXIodXBsb2FkRmlsZS5maWxlUGFydFNpemUpKVxuICAgICkpIHtcbiAgICAgIGNodW5rUGFydHMucHVzaCh7XG4gICAgICAgIG9yZGVyOiBpbmRleCArIDEsXG4gICAgICAgIGRhdGE6IGNodW5rLFxuICAgICAgICBtZDU6IGF3YWl0IG1kNShjaHVuaylcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIFByb2dyZXNzRXZlbnQ+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChwYXJ0OiBudW1iZXIsIHByb2dyZXNzRXZlbnQ6IFByb2dyZXNzRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgY3VycmVudCA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci5sb2FkZWQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudDogY3VycmVudCAvIGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ5UGFydCA9IGFzeW5jIChwYXJ0OiBGaWxlUGFydFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgY29uc3QgY2h1bmsgPSBjaHVua1BhcnRzLmZpbmQocCA9PiBwLm9yZGVyID09PSBwYXJ0Lm9yZGVyKTtcbiAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFydC5maWVsZHMpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgXCJmaWxlXCIsXG4gICAgICAgIG5ldyBCbG9iKFtjaHVuay5kYXRhXSksXG4gICAgICAgIGAke3VwbG9hZEZpbGUuZmlsZUlkfS0ke2NodW5rLm9yZGVyfWBcbiAgICAgICk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGF4aW9zLnBvc3QocGFydC51cmwsIGZvcm1EYXRhLCB7XG4gICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogcHJvZ3Jlc3NFdmVudCA9PlxuICAgICAgICAgICAgb25Qcm9ncmVzcyhwYXJ0Lm9yZGVyLCBwcm9ncmVzc0V2ZW50KSxcbiAgICAgICAgICBjYW5jZWxUb2tlblxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB1cGxvYWRQYXJ0RW5kZWQoY2h1bmsubWQ1LCBjaHVuay5vcmRlcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICgoZSBhcyBhbnkpLnJlc3BvbnNlLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgIC8vIFRPRE8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9reS9pc3N1ZXMvMzA1XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAzLFxuICAgICAgdXBsb2FkRmlsZS5wYXJ0cy5tYXAocCA9PiAoKTogUHJvbWlzZTx2b2lkPiA9PiBieVBhcnQocCkpXG4gICAgKTtcblxuICAgIHJldHVybiB1cGxvYWRFbmRlZCgpO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZUluQ2xvdWQoe1xuICAgIGZpbGUsXG4gICAgbmFtZSxcbiAgICBmb2xkZXJJZCxcbiAgICBjYW5jZWxUb2tlbixcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3NcbiAgfToge1xuICAgIGZpbGU6IGdsb2JhbFRoaXMuRmlsZSB8IFVpbnQ4QXJyYXk7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNhbmNlbFRva2VuPzogQ2FuY2VsVG9rZW47XG4gICAgZm9sZGVySWQ/OiBzdHJpbmc7XG4gICAgZW5jcnlwdFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB1cGxvYWRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gIH0pOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcj4ge1xuICAgIGNvbnN0IGZpbGVJZCA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZSh7XG4gICAgICBmaWxlLFxuICAgICAgZW5jcnlwdFByb2dyZXNzLFxuICAgICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgICBjYW5jZWxUb2tlblxuICAgIH0pO1xuICAgIGlmICghZmlsZUlkKSB7XG4gICAgICB0aHJvdyBgQ2FuJ3QgdXBsb2FkIGZpbGVgO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zYXZlSW5DbG91ZCh7IGZpbGVJZCwgbmFtZSwgZm9sZGVySWQgfSk7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHZGaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgZmlsZXNDYWNoZS5jbGVhcigpO1xuICAgIGZvbGRlcnNDYWNoZS5jbGVhcigpO1xuICAgIGF3YWl0IHN1cGVyLmxvZ291dChzZXNzaW9uSWQpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRm9sZGVyKHtcbiAgICBuYW1lLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGFyZW50Rm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsO1xuICB9KTogUHJvbWlzZTxGb2xkZXJGdWxsPiB7XG4gICAgY29uc3Qga2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZSA9IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIHNvZGl1bS50b19oZXgoa2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcbiAgICBjb25zdCB7IGNyZWF0ZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgY3JlYXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChlbmNyeXB0ZWRLZXkpXG4gICAgICAgIH0sXG4gICAgICAgIGdxbEZvbGRlclF1ZXJ5V2l0aExpbmtzXG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCFjcmVhdGVGb2xkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgY3JlYXRlIGZvbGRlcmApO1xuICAgIH1cbiAgICBjb25zdCBmb2xkZXIgPSBhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbChcbiAgICAgIGNyZWF0ZUZvbGRlcixcbiAgICAgIHRoaXMuI2tleXNcbiAgICApO1xuXG4gICAgY29uc3QgdXNlcnMgPVxuICAgICAgZm9sZGVyLnBhcmVudEZvbGRlcj8udXNlcnM/LmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApID8/IFtdO1xuXG4gICAgaWYgKHVzZXJzLmxlbmd0aCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHVzZXJzLm1hcCgoW3UsIHJpZ2h0c10pID0+XG4gICAgICAgICAgdGhpcy5zaGFyZUZvbGRlcih7XG4gICAgICAgICAgICBmb2xkZXJJZDogZm9sZGVyLmlkLFxuICAgICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgICAgdXNlcklkOiB1LmlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9sZGVyO1xuICB9XG5cbiAgYXN5bmMgZm9sZGVyKHtcbiAgICBpZCxcbiAgICBkZWxldGVkXG4gIH06IHtcbiAgICBpZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZD86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9ID0ge30pOiBQcm9taXNlPEZvbGRlckZ1bGwgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGZvbGRlcjogW3sgZGVsZXRlZCwgaWQgfSwgZ3FsRm9sZGVyUXVlcnlXaXRoTGlua3NdXG4gICAgfSk7XG4gICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZ3FsRm9sZGVyVG9FeHRlcm5hbEZvbGRlckZ1bGwoZm9sZGVyLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIGZpbGUoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2VjcmVjeUZpbGUgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBmaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICBncWxGaWxlUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZ3FsRmlsZVRvRXh0ZXJuYWwoZmlsZSwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyB2RmlsZSh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXIgfCBudWxsPiB7XG4gICAgY29uc3QgeyB2RmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCF2RmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpIGFzIFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPjtcbiAgfVxuXG4gIGFzeW5jIG1haWwoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8TWFpbCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIG1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbE1haWxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFtYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobWFpbCwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyBzaGFyZVZGaWxlKHtcbiAgICB2RmlsZUlkLFxuICAgIHVzZXJJZCxcbiAgICByaWdodHNcbiAgfToge1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICByaWdodHM6IFJpZ2h0cztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgIGlmICghdkZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudkZpbGUoeyBpZDogdkZpbGVJZCB9KTtcbiAgICAgIHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgICBpZiAoIXZGaWxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy51c2VyKHsgdXNlcklkLCB3aXRoUHVibGljS2V5OiB0cnVlIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICBzb2RpdW0uZnJvbV9oZXgodkZpbGUudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgdXNlci5wdWJsaWNLZXksXG4gICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBoaXN0b3J5ID0gbmV3IEFycmF5PHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBrZXk6IHN0cmluZztcbiAgICB9PigpO1xuXG4gICAgZm9yIChjb25zdCBoIG9mIHZGaWxlLmhpc3RvcnkpIHtcbiAgICAgIGlmICghaC51c2VyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaGlzdG9yeS5wdXNoKHtcbiAgICAgICAgaWQ6IGguaWQsXG4gICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGgudXNlci5rZXkpLFxuICAgICAgICAgICAgdXNlci5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2hhcmVWRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdkZpbGVJZCxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIG5hbWVLZXksXG4gICAgICAgICAgaGlzdG9yeVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2hhcmVWRmlsZSA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHNoYXJlZFZGaWxlcygpOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBzaGFyZWRWRmlsZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHNoYXJlZFZGaWxlczogZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlcyA9IG5ldyBBcnJheTxWRmlsZVdpdGhGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHZGaWxlIG9mIHNoYXJlZFZGaWxlcykge1xuICAgICAgdkZpbGVzLnB1c2goXG4gICAgICAgIChhd2FpdCBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpKSBhcyBWRmlsZVdpdGhGb2xkZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlcztcbiAgfVxuXG4gIGFzeW5jIHZGaWxlc1NoYXJlZFdpdGhNZSgpOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyB2RmlsZXNTaGFyZWRXaXRoTWUgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHZGaWxlc1NoYXJlZFdpdGhNZTogZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlcyA9IG5ldyBBcnJheTxWRmlsZVdpdGhGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHZGaWxlIG9mIHZGaWxlc1NoYXJlZFdpdGhNZSkge1xuICAgICAgdkZpbGVzLnB1c2goXG4gICAgICAgIChhd2FpdCBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpKSBhcyBWRmlsZVdpdGhGb2xkZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlcztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWRWRmlsZXMoKTogUHJvbWlzZTxWRmlsZVtdPiB7XG4gICAgY29uc3QgeyBkZWxldGVkVkZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBkZWxldGVkVkZpbGVzOiBncWxWRmlsZVF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCB2RmlsZXMgPSBuZXcgQXJyYXk8VkZpbGU+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHZGaWxlIG9mIGRlbGV0ZWRWRmlsZXMpIHtcbiAgICAgIHZGaWxlcy5wdXNoKChhd2FpdCBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpKSBhcyBWRmlsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlcztcbiAgfVxuXG4gIGFzeW5jIHNoYXJlZEZvbGRlcnMoKTogUHJvbWlzZTxGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgc2hhcmVkRm9sZGVycyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgc2hhcmVkRm9sZGVyczogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2Ygc2hhcmVkRm9sZGVycykge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBmb2xkZXJzU2hhcmVkV2l0aE1lKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IGZvbGRlcnNTaGFyZWRXaXRoTWUgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGZvbGRlcnNTaGFyZWRXaXRoTWU6IGdxbEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2xkZXJzID0gbmV3IEFycmF5PEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIGZvbGRlcnNTaGFyZWRXaXRoTWUpIHtcbiAgICAgIGZvbGRlcnMucHVzaChhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXJzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZEZvbGRlcnMoKTogUHJvbWlzZTxGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgZGVsZXRlZEZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGRlbGV0ZWRGb2xkZXJzOiBncWxGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9sZGVycyA9IG5ldyBBcnJheTxGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBkZWxldGVkRm9sZGVycykge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBzaGFyZUZvbGRlcih7XG4gICAgZm9sZGVySWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgZm9sZGVySWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICByaWdodHM6IFJpZ2h0cztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXIoeyB1c2VySWQsIHdpdGhQdWJsaWNLZXk6IHRydWUgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeyBzaGFyZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2hhcmVGb2xkZXI6IFtcbiAgICAgICAgeyBmb2xkZXJJZCwgdXNlcklkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB2RmlsZXM6IHRydWUsXG4gICAgICAgICAgZm9sZGVyczogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCBzaGFyZUZvbGRlcnM6IFNoYXJlRm9sZGVyc0lucHV0ID0ge1xuICAgICAgdkZpbGVzOiBbXSxcbiAgICAgIGZvbGRlcnM6IFtdXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2hhcmVGb2xkZXIuZm9sZGVycykge1xuICAgICAgY29uc3QgbmFtZUtleSA9IGF3YWl0IHRoaXMucGVyRm9sZGVyKGlkLCB1c2VyLnB1YmxpY0tleSk7XG4gICAgICBpZiAobmFtZUtleSkge1xuICAgICAgICBzaGFyZUZvbGRlcnMuZm9sZGVycy5wdXNoKG5hbWVLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2hhcmVGb2xkZXIudkZpbGVzKSB7XG4gICAgICBjb25zdCB2RmlsZUlucHV0ID0gYXdhaXQgdGhpcy5wZXJWRmlsZShpZCwgdXNlci5wdWJsaWNLZXkpO1xuICAgICAgaWYgKHZGaWxlSW5wdXQpIHtcbiAgICAgICAgc2hhcmVGb2xkZXJzLnZGaWxlcy5wdXNoKHZGaWxlSW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVGb2xkZXJGaW5pc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNoYXJlRm9sZGVyRmluaXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHNoYXJlRm9sZGVyc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2hhcmVGb2xkZXJGaW5pc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyB1cGRhdGVGb2xkZXIoe1xuICAgIGZvbGRlcklkLFxuICAgIG5hbWUsXG4gICAgaXNGYXZvcml0ZSxcbiAgICBkZWxldGVkQXRcbiAgfToge1xuICAgIGZvbGRlcklkOiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgaXNGYXZvcml0ZT86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxGb2xkZXJGdWxsPiB7XG4gICAgbGV0IGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuICAgIGlmICghZm9sZGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvbGRlcih7IGlkOiBmb2xkZXJJZCB9KTtcbiAgICAgIGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuICAgICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgICAgdGhyb3cgYENhbid0IGZpbmQgZm9sZGVyICR7Zm9sZGVySWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuYW1lID0gbmFtZVxuICAgICAgPyBmb2xkZXIudXNlckFwcD8ubmFtZUtleVxuICAgICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIGZvbGRlci51c2VyQXBwLm5hbWVLZXkpXG4gICAgICAgIDogbmFtZVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyB1cGRhdGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwZGF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpc0Zhdm9yaXRlLFxuICAgICAgICAgIGRlbGV0ZWRBdFxuICAgICAgICB9LFxuICAgICAgICBncWxGb2xkZXJRdWVyeVdpdGhMaW5rc1xuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVGb2xkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHVwZGF0ZSBmb2xkZXJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsKHVwZGF0ZUZvbGRlciwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVNYWlsKFxuICAgIGRhdGE6IE5ld01haWwsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbWFpbCA9IGF3YWl0IHRoaXMuY3JlYXRlRHJhZnRNYWlsKGRhdGEpO1xuICAgIGlmICghbWFpbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZW5kRHJhZnRNYWlsKG1haWwubWFpbEludGVncml0eUlkLCBjdXN0b21NZXNzYWdlKTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRpbmdSZWNlaXZlZE1haWxzKCk6IFByb21pc2U8V2FpdGluZ1JlY2VpdmVkTWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgd2FpdGluZ1JlY2VpdmVkTWFpbHM6IHtcbiAgICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgICBhdHRhY2htZW50c0NvdW50OiB0cnVlLFxuICAgICAgICAgICAgc2VuZGVyOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVjaXBpZW50czoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHM6IHtcbiAgICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZ2V0IHdhaXRpbmcgcmVjZWl2ZWQgbWFpbHNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXIud2FpdGluZ1JlY2VpdmVkTWFpbHMubWFwKG0gPT4gKHtcbiAgICAgIGlkOiBnZW5lcmF0ZSgpLFxuICAgICAgLi4ubSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKG0uZGF0ZSlcbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEcmFmdE1haWwoXG4gICAgZHJhZnRJZDogc3RyaW5nLFxuICAgIHsgYm9keSwgc3ViamVjdCwgZmlsZXMsIHJlY2lwaWVudHNJZHMsIHJlcGx5VG8gfTogUGFydGlhbDxOZXdNYWlsPlxuICApOiBQcm9taXNlPERyYWZ0TWFpbCB8IG51bGw+IHtcbiAgICBjb25zdCBkcmFmdHMgPSBhd2FpdCB0aGlzLmRyYWZ0TWFpbHMoKTtcbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5maW5kKGQgPT4gZC5tYWlsSW50ZWdyaXR5SWQgPT09IGRyYWZ0SWQpO1xuICAgIGlmICghZHJhZnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkcmFmdCAke2RyYWZ0SWR9YCk7XG4gICAgfVxuICAgIGxldCBoYXNoS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaGFzaDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGJvZHkgfHwgc3ViamVjdCkge1xuICAgICAgaGFzaEtleSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoXG4gICAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfS0VZQllURVMsXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgICBoYXNoID0gc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaChcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9CWVRFUyxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBib2R5LCBzdWJqZWN0IH0pLFxuICAgICAgICBoYXNoS2V5LFxuICAgICAgICBcImhleFwiXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzZW5kZXJGaWxlcyA9IG5ldyBBcnJheTxNYWlsRmlsZUlucHV0PigpO1xuICAgIGlmIChmaWxlcykge1xuICAgICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICAgIGxldCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICAgIGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZmlsZS51c2VyLmtleSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZi5uYW1lKSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB1cGRhdGVEcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwZGF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZCxcbiAgICAgICAgICByZWNpcGllbnRzOiByZWNpcGllbnRzSWRzLFxuICAgICAgICAgIHJlcGx5VG8sXG4gICAgICAgICAgYm9keTogYm9keVxuICAgICAgICAgICAgPyBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3RcbiAgICAgICAgICAgID8gc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzZW5kZXJGaWxlcyxcbiAgICAgICAgICBoYXNoLFxuICAgICAgICAgIGhhc2hLZXlcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsTWFpbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKFxuICAgICAgdXBkYXRlRHJhZnRNYWlsLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkgYXMgRHJhZnRNYWlsO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRHJhZnRNYWlsKGRyYWZ0SWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRyYWZ0SWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVEcmFmdE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVWRmlsZVNoYXJpbmcoe1xuICAgIHZGaWxlSWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVZGaWxlU2hhcmluZyB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVkZpbGVTaGFyaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB2RmlsZUlkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZVZGaWxlU2hhcmluZztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZvbGRlclNoYXJpbmcoe1xuICAgIGZvbGRlcklkLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgZm9sZGVySWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyU2hhcmluZyB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRm9sZGVyU2hhcmluZzogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRm9sZGVyU2hhcmluZztcbiAgfVxuXG4gIGFzeW5jIGR1cGxpY2F0ZVZGaWxlKHtcbiAgICBmaWxlSWQsXG4gICAgZm9sZGVySWQsXG4gICAgY3VzdG9tTmFtZVxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGZpbGUgPSB2RmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudkZpbGUoeyBpZDogZmlsZUlkIH0pO1xuICAgICAgZmlsZSA9IHZGaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAoJHtmaWxlSWR9KSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VzdG9tTmFtZSA9IGN1c3RvbU5hbWVcbiAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUoY3VzdG9tTmFtZSwgZmlsZS51c2VyQXBwLm5hbWVLZXkpXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IGR1cGxpY2F0ZVZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkdXBsaWNhdGVWRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIGN1c3RvbU5hbWVcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGR1cGxpY2F0ZVZGaWxlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZvbGRlckNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZUZvbGRlckNsb3VkVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZUZvbGRlckNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVWRmlsZUNsb3VkVHJhc2goe1xuICAgIGlkc1xuICB9OiB7XG4gICAgaWRzOiBBcnJheTxzdHJpbmc+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlVkZpbGVDbG91ZFRyYXNoID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFpbFRyYXNoKHsgaWRzIH06IHsgaWRzOiBBcnJheTxzdHJpbmc+IH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU1haWxUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlTWFpbFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVNYWlsVHJhc2g7XG4gIH1cblxuICBhc3luYyBlbXB0eU1haWxUcmFzaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGVtcHR5TWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBlbXB0eU1haWxUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5TWFpbFRyYXNoID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZW1wdHlDbG91ZFRyYXNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZW1wdHlDbG91ZFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBlbXB0eUNsb3VkVHJhc2g6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiBlbXB0eUNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZWNvdmVyRmlsZSh7IGZpbGVJZCB9OiB7IGZpbGVJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHJlY292ZXJGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICByZWNvdmVyRmlsZTogW3sgZmlsZUlkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVjb3ZlckZpbGU7XG4gIH1cblxuICBhc3luYyByZWNvdmVyRm9sZGVyKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHJlY292ZXJGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHJlY292ZXJGb2xkZXI6IFt7IGlkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVjb3ZlckZvbGRlciA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3Zlck1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHJlY292ZXJNYWlsOiBbeyBtYWlsSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyTWFpbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICB2RmlsZUlkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICB2RmlsZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRmlsZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlKHsgZmlsZUlkIH06IHsgZmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZVZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYWlsSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVNYWlsO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUluQ2xvdWQoe1xuICAgIGZpbGVJZCxcbiAgICBuYW1lLFxuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcj4ge1xuICAgIGlmIChmb2xkZXJJZCAmJiAhZm9sZGVyc0NhY2hlLmhhcyhmb2xkZXJJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgaWYgKCFmb2xkZXJzQ2FjaGUuaGFzKGZvbGRlcklkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJHtmb2xkZXJJZH0gZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGtleSA9IFwiXCI7XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcblxuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGZpbGVJZCB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpID8/IG51bGw7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IGF3YWl0IHRoaXMucmVjZWl2ZWRNYWlscygpO1xuICAgICAgICBjb25zdCBtYWlsID0gcmVjZWl2ZWRNYWlscy5maW5kKG0gPT5cbiAgICAgICAgICBtLmZpbGVzLnNvbWUoZiA9PiBmLmlkID09PSBmaWxlSWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFtYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVNYWlsID0gbWFpbC5maWxlcy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcblxuICAgICAgICBpZiAoIWZpbGVNYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlTWFpbC5rZXkpLFxuICAgICAgICAgIG1haWwuc2VuZGVyLnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKTtcblxuICAgICAgICBrZXkgPSBzb2RpdW0udG9faGV4KGZpbGVLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDFcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlcnJvciAyXCIpO1xuICAgICAgfVxuICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBcIlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDNcIik7XG4gICAgfVxuXG4gICAga2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IG5hbWVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChuYW1lS2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZUtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KG5hbWVLZXksIHRoaXMuI2tleXMucHVibGljS2V5LCB0aGlzLiNrZXlzLnByaXZhdGVLZXkpXG4gICAgKTtcblxuICAgIGNvbnN0IHsgc2F2ZUluQ2xvdWQgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNhdmVJbkNsb3VkOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIGZpbGVuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIG5hbWVLZXk6IGVuY3J5cHRlZE5hbWVLZXlcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlID0gKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbChcbiAgICAgIHNhdmVJbkNsb3VkLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkpIGFzIFZGaWxlV2l0aEZvbGRlcjtcblxuICAgIGNvbnN0IG1lID0gdkZpbGUuZm9sZGVyLnVzZXJzLmZpbmQoXG4gICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSA9PT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICApO1xuXG4gICAgaWYgKG1lICYmIFtcImFkbWluXCIsIFwid3JpdGVcIl0uaW5jbHVkZXMobWVbMV0pKSB7XG4gICAgICBjb25zdCBvdGhlcnMgPSB2RmlsZS5mb2xkZXIudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvdGhlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlVkZpbGUoe1xuICAgICAgICAgICAgdkZpbGVJZDogdkZpbGUuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZTtcbiAgfVxuXG4gIGFzeW5jIHNlbmREcmFmdE1haWwoXG4gICAgZHJhZnRJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRyYWZ0cyA9IGF3YWl0IHRoaXMuZHJhZnRNYWlscygpO1xuXG4gICAgY29uc3QgZHJhZnQgPSBkcmFmdHMuZmluZChkID0+IGQubWFpbEludGVncml0eUlkID09PSBkcmFmdElkKTtcbiAgICBpZiAoIWRyYWZ0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSBuZXcgQXJyYXk8TWFpbFJlY2lwaWVudElucHV0PigpO1xuXG4gICAgY29uc3QgdGVtcG9yYXJ5UmVjaXBpZW50cyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgZW1haWwgfSBvZiBkcmFmdC50ZW1wb3JhcnlSZWNpcGllbnRzKSB7XG4gICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGVtYWlsXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChlbWFpbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgeyBpZCB9IG9mIGRyYWZ0LnJlY2lwaWVudHMpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgIGRyYWZ0LmZpbGVzLFxuICAgICAgICBkcmFmdC5zdWJqZWN0LFxuICAgICAgICBkcmFmdC5ib2R5LFxuICAgICAgICBpZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzLnB1c2goaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjaXBpZW50cy5wdXNoKGlucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHNlbmREcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNlbmREcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBkcmFmdE1haWxJZDogZHJhZnQubWFpbEludGVncml0eUlkLFxuICAgICAgICAgIGN1c3RvbU1lc3NhZ2VcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbmREcmFmdE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBzZW5kV2FpdGluZ0VtYWlscygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBUT0RPIG9wdGkgdGhpc1xuICAgIGNvbnN0IG1haWxzID0gYXdhaXQgdGhpcy5zZW50TWFpbHMoKTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IG1haWxzLmZpbHRlcihtID0+IG0udGVtcG9yYXJ5UmVjaXBpZW50cy5sZW5ndGggPiAwKTtcblxuICAgIGZvciAoY29uc3QgbWFpbCBvZiBmaWx0ZXJlZCkge1xuICAgICAgZm9yIChjb25zdCB7IGVtYWlsIH0gb2YgbWFpbC50ZW1wb3JhcnlSZWNpcGllbnRzKSB7XG4gICAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICAgIG1haWwuZmlsZXMsXG4gICAgICAgICAgbWFpbC5zdWJqZWN0LFxuICAgICAgICAgIG1haWwuYm9keSxcbiAgICAgICAgICBlbWFpbFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgICAgICAgIHNlbmRPbmVNYWlsOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYWlsSW50ZWdyaXR5SWQ6IG1haWwubWFpbEludGVncml0eUlkLFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogaW5wdXRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZURyYWZ0TWFpbCh7XG4gICAgYm9keSxcbiAgICBzdWJqZWN0LFxuICAgIGZpbGVzLFxuICAgIHJlY2lwaWVudHNJZHMsXG4gICAgcmVwbHlUb1xuICB9OiBOZXdNYWlsKTogUHJvbWlzZTxEcmFmdE1haWwgfCBudWxsPiB7XG4gICAgY29uc3QgaGFzaEtleSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTLFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3QgaGFzaCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBib2R5LCBzdWJqZWN0IH0pLFxuICAgICAgaGFzaEtleSxcbiAgICAgIFwiaGV4XCJcbiAgICApO1xuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGZpbGUudXNlci5rZXkpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3JlYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBjcmVhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlY2lwaWVudHM6IHJlY2lwaWVudHNJZHMsXG4gICAgICAgICAgcmVwbHlUbyxcbiAgICAgICAgICBib2R5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzZW5kZXJGaWxlcyxcbiAgICAgICAgICBoYXNoLFxuICAgICAgICAgIGhhc2hLZXlcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsTWFpbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWNyZWF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKFxuICAgICAgY3JlYXRlRHJhZnRNYWlsLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkgYXMgRHJhZnRNYWlsO1xuICB9XG5cbiAgYXN5bmMgZmlsZUNvbnRlbnQoe1xuICAgIGZpbGVJZCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgcHJvZ3Jlc3NEZWNyeXB0LFxuICAgIGFib3J0XG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/OiAocHJvZ3Jlc3M6IERvd25sb2FkUHJvZ3Jlc3MpID0+IHZvaWQ7XG4gICAgcHJvZ3Jlc3NEZWNyeXB0PzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICBhYm9ydD86IEFib3J0Q29udHJvbGxlcjtcbiAgfSk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IHsgZmlsZUNvbnRlbnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGZpbGVDb250ZW50OiBbXG4gICAgICAgIHsgZmlsZUlkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRDbG91ZFwiOiB7XG4gICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICBzZW5kZXJQdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRTZW50TWFpbFwiOiB7XG4gICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZpbGVDb250ZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmaWxlSWR9IGRvZXMgbm90IGV4aXN0c2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIERvd25sb2FkUHJvZ3Jlc3M+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChcbiAgICAgIHBhcnQ6IG51bWJlcixcbiAgICAgIHByb2dyZXNzRXZlbnQ6IERvd25sb2FkUHJvZ3Jlc3NcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgdHJhbnNmZXJyZWRCeXRlcyA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci50cmFuc2ZlcnJlZEJ5dGVzLFxuICAgICAgICAwXG4gICAgICApO1xuICAgICAgY29uc3QgdG90YWxCeXRlcyA9IE51bWJlcihmaWxlQ29udGVudC50b3RhbFNpemUpO1xuICAgICAgb25Eb3dubG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiB0cmFuc2ZlcnJlZEJ5dGVzIC8gdG90YWxCeXRlcyxcbiAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgdHJhbnNmZXJyZWRCeXRlc1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnRzID0gbmV3IEFycmF5PHsgZGF0YTogVWludDhBcnJheTsgb3JkZXI6IG51bWJlciB9PigpO1xuXG4gICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVDb250ZW50UGFydCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgIGF3YWl0IGt5XG4gICAgICAgICAgLmdldChwYXJ0LmNvbnRlbnRVcmwsIHtcbiAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogcHIgPT4gb25Qcm9ncmVzcyhwYXJ0Lm9yZGVyLCBwciksXG4gICAgICAgICAgICBzaWduYWw6IGFib3J0Py5zaWduYWxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hcnJheUJ1ZmZlcigpXG4gICAgICApO1xuICAgICAgY29uc3QgbWQ1UGFydCA9IGF3YWl0IG1kNShidWYpO1xuICAgICAgaWYgKG1kNVBhcnQgIT09IHBhcnQubWQ1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtZDUgZm9yIHBhcnQgJHtwYXJ0Lm9yZGVyfSBvZiBmaWxlICR7ZmlsZUlkfWApO1xuICAgICAgfVxuICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgIGRhdGE6IGJ1ZixcbiAgICAgICAgb3JkZXI6IHBhcnQub3JkZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAzLFxuICAgICAgZmlsZUNvbnRlbnQucGFydHMubWFwKHAgPT4gKCk6IFByb21pc2U8dm9pZD4gPT4gYnlQYXJ0KHApKVxuICAgICk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRDb250ZW50ID0gY29uY2F0ZW5hdGUoXG4gICAgICAuLi5wYXJ0cy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcikubWFwKHAgPT4gcC5kYXRhKVxuICAgICk7XG5cbiAgICAvLyBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShtZDUob2YoZW5jcnlwdGVkQ29udGVudCkpKTtcbiAgICBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBtZDUoZW5jcnlwdGVkQ29udGVudCk7XG5cbiAgICBpZiAobWQ1RW5jcnlwdGVkICE9PSBmaWxlQ29udGVudC5tZDVFbmNyeXB0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5jcnlwdGVkIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgc29kaXVtLmZyb21faGV4KGZpbGVDb250ZW50LmtleSksXG4gICAgICBmaWxlQ29udGVudC5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCJcbiAgICAgICAgPyBmaWxlQ29udGVudC5zZW5kZXJQdWJsaWNLZXlcbiAgICAgICAgOiBmaWxlQ29udGVudC5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50Q2xvdWRcIlxuICAgICAgICA/IGZpbGVDb250ZW50LnB1YmxpY0tleVxuICAgICAgICA6IHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcblxuICAgIC8vIFRPRE8gYWRkIGFib3J0XG4gICAgY29uc3Qgc3JjID0gYXdhaXQgZGVjcnlwdChrZXksIGVuY3J5cHRlZENvbnRlbnQsIHByb2dyZXNzRGVjcnlwdCk7XG5cbiAgICAvLyBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKHNyYykpKTtcbiAgICBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgbWQ1KHNyYyk7XG5cbiAgICBpZiAobWQ1Q29udGVudCAhPT0gZmlsZUNvbnRlbnQubWQ1KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5jb21wcmVzcyhzcmMpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIGZpbGVuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBmaWxlbmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgaXNGYXZvcml0ZT86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxWRmlsZT4ge1xuICAgIGNvbnN0IGZpbGUgPSB2RmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHRocm93IGBDYW4ndCBmaW5kIGZpbGUgJHtmaWxlSWR9YDtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gZmlsZW5hbWVcbiAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUoZmlsZW5hbWUsIGZpbGUudXNlckFwcC5uYW1lS2V5KVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyB1cGRhdGVGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVGaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZmlsZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3FsVkZpbGVUb0V4dGVybmFsKHVwZGF0ZUZpbGUsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgcmVhZE1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyByZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgcmVhZE1haWw6IFt7IG1haWxJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlYWRNYWlsID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgdW5yZWFkTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHVucmVhZE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVucmVhZE1haWw6IFt7IG1haWxJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVucmVhZE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBhcHBTZXR0aW5ncygpOiBQcm9taXNlPFVzZXJBcHBTZXR0aW5ncyB8IG51bGw+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBTZXR0aW5nczoge1xuICAgICAgICAgICAgYXV0b0Rpc2Nvbm5lY3REZWxheTogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5RmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyLmFwcFNldHRpbmdzID8/IG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBTZXR0aW5ncyhcbiAgICBzZXR0aW5nczogUGFydGlhbDxVc2VyQXBwU2V0dGluZ3M+XG4gICk6IFByb21pc2U8VXNlckFwcFNldHRpbmdzPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBTZXR0aW5ncyB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdXBkYXRlQXBwU2V0dGluZ3M6IFtcbiAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvRGlzY29ubmVjdERlbGF5OiB0cnVlLFxuICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiB1cGRhdGVBcHBTZXR0aW5ncztcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmVkTWFpbHMoKTogUHJvbWlzZTxSZWNlaXZlZE1haWxbXT4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIHJlY2VpdmVkTWFpbHM6IGdxbE1haWxRdWVyeVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYWlscyA9IHVzZXI/LnJlY2VpdmVkTWFpbHMgPz8gW107XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IG5ldyBBcnJheTxSZWNlaXZlZE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgbWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIHJlY2VpdmVkTWFpbHMucHVzaChtYWlsIGFzIFJlY2VpdmVkTWFpbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY2VpdmVkTWFpbHM7XG4gIH1cblxuICBhc3luYyBzZW50TWFpbHMoKTogUHJvbWlzZTxTZW50TWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VudE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5zZW50TWFpbHMgPz8gW107XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3Qgc2VudE1haWxzID0gbmV3IEFycmF5PFNlbnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICBzZW50TWFpbHMucHVzaChtYWlsIGFzIFNlbnRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VudE1haWxzO1xuICB9XG5cbiAgYXN5bmMgZHJhZnRNYWlscygpOiBQcm9taXNlPERyYWZ0TWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRNYWlsczogZ3FsTWFpbFF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1haWxzID0gdXNlcj8uZHJhZnRNYWlscyA/PyBbXTtcblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCBkcmFmdE1haWxzID0gbmV3IEFycmF5PERyYWZ0TWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiBtYWlscykge1xuICAgICAgY29uc3QgZHJhZnQgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKSBhcyBEcmFmdE1haWw7XG4gICAgICBpZiAoZHJhZnQpIHtcbiAgICAgICAgZHJhZnRNYWlscy5wdXNoKGRyYWZ0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZHJhZnRNYWlscztcbiAgfVxuXG4gIHByaXZhdGUgcGVyRm9sZGVyID0gYXN5bmMgKFxuICAgIGZvbGRlcklkOiBzdHJpbmcsXG4gICAgcHVibGljS2V5OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxOYW1lS2V5SW5wdXRGb2xkZXJzIHwgbnVsbD4gPT4ge1xuICAgIGxldCBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcblxuICAgIGlmICghZm9sZGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvbGRlcih7IGlkOiBmb2xkZXJJZCB9KTtcbiAgICAgIGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuXG4gICAgICBpZiAoIWZvbGRlcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZvbGRlci51c2VyQXBwPy5uYW1lS2V5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGZvbGRlcklkLFxuICAgICAgbmFtZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZm9sZGVyLnVzZXJBcHAubmFtZUtleSksXG4gICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApXG4gICAgfTtcbiAgfTtcblxuICBwcml2YXRlIHBlclZGaWxlID0gYXN5bmMgKFxuICAgIHZGaWxlSWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dCB8IG51bGw+ID0+IHtcbiAgICBsZXQgdkZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG5cbiAgICBpZiAoIXZGaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLnZGaWxlKHsgaWQ6IHZGaWxlSWQgfSk7XG4gICAgICB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgICAgaWYgKCF2RmlsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHZGaWxlLmlkLFxuICAgICAgbmFtZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgodkZpbGUudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWxlczogdkZpbGUuaGlzdG9yeS5tYXAoZiA9PiAoe1xuICAgICAgICBpZDogZi5pZCxcbiAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZi51c2VyIS5rZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KSlcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgX2VhY2hVc2VyID0gYXN5bmMgKFxuICAgIGZpbGVzOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10sXG4gICAgc3ViamVjdDogc3RyaW5nLFxuICAgIGJvZHk6IHN0cmluZyxcbiAgICBpZE9yTWFpbDogc3RyaW5nXG4gICk6IFByb21pc2U8TWFpbFJlY2lwaWVudElucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCB1ID0gdXNlcnNDYWNoZS5nZXQoaWRPck1haWwpO1xuICAgIGlmICghdSB8fCAhKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHUgPVxuICAgICAgICAoYXdhaXQgdGhpcy51c2VyKHtcbiAgICAgICAgICB1c2VySWQ6IGlkT3JNYWlsLFxuICAgICAgICAgIHdpdGhQdWJsaWNLZXk6IHRydWVcbiAgICAgICAgfSkpID8/IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF1KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXNlciAke2lkT3JNYWlsfSBoYXZlIG5vIHB1YmxpYyBrZXlgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGllbnRzRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcblxuICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgbGV0IGZpbGVJbkhpc3RvcnkgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgIGlmICghZmlsZUluSGlzdG9yeSkge1xuICAgICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZi5pZCB9KTtcbiAgICAgICAgZmlsZUluSGlzdG9yeSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWZpbGVJbkhpc3RvcnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmLm5hbWV9ICgke2YuaWR9KSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qga2V5ID0gZmlsZUluSGlzdG9yeS51c2VyPy5rZXk7XG4gICAgICBpZiAoIWtleSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlY2lwaWVudHNGaWxlcy5wdXNoKHtcbiAgICAgICAgaWQ6IGYuaWQsXG4gICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZWNpcGllbnRJZDogdS5pZCxcbiAgICAgIGJvZHk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgc3ViamVjdDogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWxlczogcmVjaXBpZW50c0ZpbGVzXG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
3803
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOlsia3kiLCJheGlvcyIsIkJhc2VDbGllbnQiLCJ2RmlsZXNDYWNoZSIsImZvbGRlcnNDYWNoZSIsImZpbGVzQ2FjaGUiLCJ1c2Vyc0NhY2hlIiwic2VjcmV0c3RyZWFtS2V5Z2VuIiwiZW5jcnlwdFNlY3JldHN0cmVhbSIsImNvbXByZXNzIiwidW5jb21wcmVzcyIsImdxbEZvbGRlclRvRXh0ZXJuYWwiLCJncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCIsImdxbFZGaWxlVG9FeHRlcm5hbCIsImdxbFZGaWxlVG9JbnRlcm5hbCIsImludGVybmFsVkZpbGVUb1ZGaWxlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImdxbEZpbGVRdWVyeSIsImdxbEZvbGRlclF1ZXJ5IiwiZ3FsRm9sZGVyRnVsbFF1ZXJ5IiwiZ3FsTWFpbFF1ZXJ5IiwiZ3FsVkZpbGVRdWVyeSIsImdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5IiwiY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwiLCJlbmNyeXB0TmFtZSIsIm5hbWUiLCJuYW1lS2V5IiwiZnJvbV9oZXgiLCJmcm9tX3N0cmluZyIsImRhdGEiLCJuYW1lRW5jcnlwdGVkIiwidG9faGV4IiwiU2VjcmVjeUNsaWVudCIsInVhU2Vzc2lvbiIsInVhS2V5cyIsInVhSnd0IiwiZW52Iiwiand0IiwicGVyRm9sZGVyIiwiZm9sZGVySWQiLCJwdWJsaWNLZXkiLCJmb2xkZXIiLCJnZXQiLCJpZCIsInVzZXJBcHAiLCJwcml2YXRlS2V5IiwicGVyVkZpbGUiLCJ2RmlsZUlkIiwidkZpbGUiLCJmaWxlcyIsImhpc3RvcnkiLCJtYXAiLCJmIiwia2V5IiwidXNlciIsIl9lYWNoVXNlciIsInN1YmplY3QiLCJib2R5IiwiaWRPck1haWwiLCJ1IiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVuZGVmaW5lZCIsIkVycm9yIiwicmVjaXBpZW50c0ZpbGVzIiwiQXJyYXkiLCJmaWxlSW5IaXN0b3J5IiwiZmlsZSIsInB1c2giLCJmaWxlS2V5IiwicmVjaXBpZW50SWQiLCJhZGRGaWxlVG9IaXN0b3J5IiwiZmlsZUlkIiwiY2xpZW50IiwibXV0YXRpb24iLCJmaW5kIiwidXNlcnMiLCJmaWx0ZXIiLCJpbnB1dCIsInNoYXJlRmlsZUluSGlzdG9yeSIsInVwbG9hZEZpbGUiLCJlbmNyeXB0UHJvZ3Jlc3MiLCJ1cGxvYWRQcm9ncmVzcyIsInNpZ25hbCIsIkZpbGUiLCJVaW50OEFycmF5IiwiYXJyYXlCdWZmZXIiLCJmaWxlQnVmZmVyIiwiY29tcHJlc3NlZCIsImVuY3J5cHRlZEZpbGUiLCJtZDVGaWxlIiwibWQ1RW5jcnlwdGVkIiwiZW5jcnlwdGVkRmlsZUtleSIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVTaXplQmVmb3JlIiwiZmlsZVBhcnRTaXplIiwicGFydHMiLCJmaWVsZHMiLCJvcmRlciIsInVybCIsInRvdGFsIiwiY3VycmVudCIsInBlcmNlbnQiLCJsZW5ndGgiLCJ1cGxvYWRQYXJ0RW5kZWQiLCJ1cGxvYWRGaWxlUGFydEVuZCIsInVwbG9hZEVuZGVkIiwidXBsb2FkRmlsZUVuZCIsImNodW5rUGFydHMiLCJOdW1iZXIiLCJpbmRleCIsImNodW5rIiwicHJvZ3Jlc3NQYXJ0cyIsIm9uUHJvZ3Jlc3MiLCJwYXJ0IiwicHJvZ3Jlc3NFdmVudCIsIk9iamVjdCIsInZhbHVlcyIsInJlZHVjZSIsInBydiIsImN1ciIsImxvYWRlZCIsImJ5UGFydCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJwIiwiZW50cmllcyIsInZhbHVlIiwiYXBwZW5kIiwiQmxvYiIsInBvc3QiLCJvblVwbG9hZFByb2dyZXNzIiwicmVzcG9uc2UiLCJzdGF0dXMiLCJ1cGxvYWRGaWxlSW5DbG91ZCIsInNhdmVJbkNsb3VkIiwibG9nb3V0Iiwic2Vzc2lvbklkIiwiY2xlYXIiLCJjcmVhdGVGb2xkZXIiLCJwYXJlbnRGb2xkZXJJZCIsImVuY3J5cHRlZE5hbWUiLCJlbmNyeXB0ZWRLZXkiLCJwYXJlbnRGb2xkZXIiLCJQcm9taXNlIiwiYWxsIiwicmlnaHRzIiwic2hhcmVGb2xkZXIiLCJkZWxldGVkIiwicXVlcnkiLCJtYWlsIiwic2hhcmVWRmlsZSIsImgiLCJzaGFyZWRWRmlsZXMiLCJ2RmlsZXMiLCJ2RmlsZXNTaGFyZWRXaXRoTWUiLCJkZWxldGVkVkZpbGVzIiwic2hhcmVkRm9sZGVycyIsImZvbGRlcnMiLCJmb2xkZXJzU2hhcmVkV2l0aE1lIiwiZGVsZXRlZEZvbGRlcnMiLCJkZWxldGVkTWFpbHMiLCJtYWlsVHlwZSIsIm1haWxzIiwibSIsInNoYXJlRm9sZGVycyIsInZGaWxlSW5wdXQiLCJzaGFyZUZvbGRlckZpbmlzaCIsInVwZGF0ZUZvbGRlciIsImlzRmF2b3JpdGUiLCJkZWxldGVkQXQiLCJ1cGRhdGVBcHBOb3RpZmljYXRpb25zIiwibm90aWZpY2F0aW9ucyIsImVuYWJsZUFsbCIsImNsb3VkIiwiZGlzYWJsZUFsbFVudGlsIiwiRGF0ZSIsImFwcE5vdGlmaWNhdGlvbnMiLCJjcmVhdGVNYWlsIiwiY3VzdG9tTWVzc2FnZSIsImNyZWF0ZURyYWZ0TWFpbCIsInNlbmREcmFmdE1haWwiLCJtYWlsSW50ZWdyaXR5SWQiLCJ3YWl0aW5nUmVjZWl2ZWRNYWlscyIsImRhdGUiLCJhdHRhY2htZW50c0NvdW50Iiwic2VuZGVyIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJlbWFpbCIsInJlY2lwaWVudHMiLCJ0ZW1wb3JhcnlSZWNpcGllbnRzIiwidXBkYXRlRHJhZnRNYWlsIiwiZHJhZnRJZCIsInJlY2lwaWVudHNJZHMiLCJyZXBseVRvIiwiZHJhZnRNYWlscyIsImRyYWZ0cyIsImRyYWZ0IiwiZCIsImhhc2hLZXkiLCJoYXNoIiwicmFuZG9tYnl0ZXNfYnVmIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTIiwiY3J5cHRvX2dlbmVyaWNoYXNoIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTIiwiSlNPTiIsInN0cmluZ2lmeSIsInNlbmRlckZpbGVzIiwiZGVsZXRlRHJhZnRNYWlsIiwiZGVsZXRlVkZpbGVTaGFyaW5nIiwiZGVsZXRlRm9sZGVyU2hhcmluZyIsImR1cGxpY2F0ZVZGaWxlIiwiY3VzdG9tTmFtZSIsImRlbGV0ZUZvbGRlckNsb3VkVHJhc2giLCJpZHMiLCJkZWxldGVWRmlsZUNsb3VkVHJhc2giLCJkZWxldGVNYWlsVHJhc2giLCJlbXB0eU1haWxUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJWRmlsZSIsInJlY292ZXJGb2xkZXIiLCJyZWNvdmVyTWFpbCIsIm1haWxJZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVWRmlsZSIsImRlbGV0ZU1haWwiLCJoYXMiLCJyZWNlaXZlZE1haWxzIiwic29tZSIsImZpbGVNYWlsIiwiZW5jcnlwdGVkTmFtZUtleSIsImZpbGVuYW1lIiwibWUiLCJpbmNsdWRlcyIsIm90aGVycyIsImRyYWZ0TWFpbElkIiwic2VuZFdhaXRpbmdFbWFpbHMiLCJzZW50TWFpbHMiLCJmaWx0ZXJlZCIsInNlbmRPbmVNYWlsIiwicmVjaXBpZW50IiwiZmlsZUNvbnRlbnQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJwcm9ncmVzc0RlY3J5cHQiLCJfX3R5cGVuYW1lIiwiY29udGVudFVybCIsInRvdGFsU2l6ZSIsInNlbmRlclB1YmxpY0tleSIsInRyYW5zZmVycmVkQnl0ZXMiLCJ0b3RhbEJ5dGVzIiwicHIiLCJidWYiLCJtZDVQYXJ0IiwiZW5jcnlwdGVkQ29udGVudCIsInNvcnQiLCJhIiwiYiIsInNyYyIsIm1kNUNvbnRlbnQiLCJ1cGRhdGVGaWxlIiwicmVhZE1haWwiLCJ1bnJlYWRNYWlsIiwiYXBwU2V0dGluZ3MiLCJhdXRvRGlzY29ubmVjdERlbGF5IiwiY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZSIsImNsb3VkRm9sZGVyRGF5c0ZvckRlbGV0ZSIsImhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZSIsImhpc3RvcnlNYXhGaWxlQ291bnQiLCJ1cGRhdGVBcHBTZXR0aW5ncyIsInNldHRpbmdzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsT0FBT0EsRUFBUCxNQUFlLElBQWY7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLE9BQWxCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixrQkFBM0I7QUFDQSxTQUFTQyxXQUFULEVBQXNCQyxZQUF0QixFQUFvQ0MsVUFBcEMsRUFBZ0RDLFVBQWhELFFBQWtFLGFBQWxFO0FBRUEsU0FBU0Msa0JBQVQsRUFBNkJDLG1CQUE3QixRQUF3RCxtQkFBeEQ7QUFDQSxTQUFTQyxRQUFULEVBQW1CQyxVQUFuQixRQUFxQyxvQkFBckM7QUFDQSxTQUNFQyxtQkFERixFQUVFQyw2QkFGRixRQUdPLHFCQUhQO0FBSUEsU0FDRUMsa0JBREYsRUFFRUMsa0JBRkYsRUFHRUMsb0JBSEYsUUFJTyxvQkFKUDtBQTJCQSxTQUFTQyxpQkFBVCxRQUFrQyxtQkFBbEM7QUFDQSxTQUFTQyxNQUFULFFBQXVCLGNBQXZCO0FBRUEsU0FBU0MsZ0JBQVQsRUFBMkJDLGdCQUEzQixRQUFtRCxvQkFBbkQ7QUFFQSxTQUFTQyxRQUFULFFBQXlCLFNBQXpCO0FBQ0EsU0FBU0MsR0FBVCxRQUFvQixrQkFBcEI7QUFDQSxTQUFTQyxPQUFULEVBQWtCQyxPQUFsQixRQUFpQyxxQkFBakM7QUFDQSxTQUFTQyxNQUFULEVBQWlCQyxXQUFqQixFQUE4QkMsU0FBOUIsRUFBeUNDLGVBQXpDLFFBQWdFLGFBQWhFO0FBQ0EsU0FDRUMsWUFERixFQUVFQyxjQUZGLEVBR0VDLGtCQUhGLEVBSUVDLFlBSkYsRUFLRUMsYUFMRixFQU1FQyx1QkFORixRQU9PLG9CQVBQO0FBU0EsU0FBU0MsNkJBQVQsUUFBOEMsbUJBQTlDLEMsQ0FDQTtBQUNBOztBQVlBLElBQU1DLFdBQVc7QUFBQSxz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LDZCQUE2QixDQUFDOEksQ0FBRCw4QkFBSSxJQUFKLGdCQUR0Qjs7QUFFckIsb0JBQUlrQyxLQUFKLEVBQVc7QUFDVEYsa0JBQUFBLFVBQVUsQ0FBQ2pJLElBQVgsQ0FBZ0JtSSxLQUFoQjtBQUNEO0FBQ0Y7O0FBckJILGlEQXVCU0YsVUF2QlQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0F6bkRGOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSxTQWdCRSxlQUF3QjtBQUN0QixhQUFPLGdEQUFXN0osU0FBbEI7QUFDRDtBQWxCSDs7QUFBQTtBQUFBLEVBQW1DakQsVUFBbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1haWxUeXBlIH0gZnJvbSBcIi4vLi4vemV1cy9pbmRleFwiO1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQga3kgZnJvbSBcImt5XCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBCYXNlQ2xpZW50IH0gZnJvbSBcIi4uL0Jhc2VDbGllbnQuanNcIjtcbmltcG9ydCB7IHZGaWxlc0NhY2hlLCBmb2xkZXJzQ2FjaGUsIGZpbGVzQ2FjaGUsIHVzZXJzQ2FjaGUgfSBmcm9tIFwiLi4vY2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vY3J5cHRvL2ZpbGUuanNcIjtcbmltcG9ydCB7IHNlY3JldHN0cmVhbUtleWdlbiwgZW5jcnlwdFNlY3JldHN0cmVhbSB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHsgY29tcHJlc3MsIHVuY29tcHJlc3MgfSBmcm9tIFwiLi4vbWluaWZ5L2luZGV4LmpzXCI7XG5pbXBvcnQge1xuICBncWxGb2xkZXJUb0V4dGVybmFsLFxuICBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbFxufSBmcm9tIFwiLi9jb252ZXJ0L2ZvbGRlci5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsVkZpbGVUb0V4dGVybmFsLFxuICBncWxWRmlsZVRvSW50ZXJuYWwsXG4gIGludGVybmFsVkZpbGVUb1ZGaWxlXG59IGZyb20gXCIuL2NvbnZlcnQvdkZpbGUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWFpbEZpbGVJbnB1dCxcbiAgUmVjZWl2ZWRNYWlsLFxuICBTZW50TWFpbCxcbiAgRm9sZGVyLFxuICBWRmlsZVdpdGhGb2xkZXIsXG4gIEZvbGRlckZ1bGwsXG4gIFVzZXJBcHBTZXR0aW5ncyxcbiAgVXNlckFwcE5vdGlmaWNhdGlvbnMsXG4gIEZpbGUgYXMgU2VjcmVjeUZpbGUsXG4gIFdhaXRpbmdSZWNlaXZlZE1haWwsXG4gIERyYWZ0TWFpbCxcbiAgTWFpbFJlY2lwaWVudElucHV0LFxuICBWRmlsZSxcbiAgU2hhcmVGb2xkZXJzSW5wdXQsXG4gIE5hbWVLZXlJbnB1dCxcbiAgTmFtZUtleUlucHV0Rm9sZGVycyxcbiAgTWFpbCxcbiAgU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQsXG4gIEZpbGVQYXJ0UmVzcG9uc2UsXG4gIEZpbGVDb250ZW50UGFydFxufSBmcm9tIFwiLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ3FsRmlsZVRvRXh0ZXJuYWwgfSBmcm9tIFwiLi9jb252ZXJ0L2ZpbGUuanNcIjtcbmltcG9ydCB7IHNvZGl1bSB9IGZyb20gXCIuLi9zb2RpdW0uanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5UGFpciB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB7IGRlY3J5cHRDcnlwdG9Cb3gsIGVuY3J5cHRDcnlwdG9Cb3ggfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzaG9ydGlkXCI7XG5pbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL21kNS5qc1wiO1xuaW1wb3J0IHsgZW5jcnlwdCwgZGVjcnlwdCB9IGZyb20gXCIuLi93b3JrZXIvc29kaXVtLmpzXCI7XG5pbXBvcnQgeyBjaHVua3MsIGNvbmNhdGVuYXRlLCBlbnVtZXJhdGUsIHByb21pc2VBbGxMaW1pdCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsRmlsZVF1ZXJ5LFxuICBncWxGb2xkZXJRdWVyeSxcbiAgZ3FsRm9sZGVyRnVsbFF1ZXJ5LFxuICBncWxNYWlsUXVlcnksXG4gIGdxbFZGaWxlUXVlcnksXG4gIGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG59IGZyb20gXCIuL3R5cGVzL3F1ZXJpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmlnaHRzIH0gZnJvbSBcIi4uL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9tYWlsLmpzXCI7XG4vLyBpbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL2luZGV4LmpzXCI7XG4vLyBpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgdHlwZSBOZXdNYWlsID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXTtcbiAgcmVjaXBpZW50c0lkczogc3RyaW5nW107XG4gIHJlcGx5VG8/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogUHJvZ3Jlc3MpID0+IFByb21pc2U8dm9pZD47XG5cbmNvbnN0IGVuY3J5cHROYW1lID0gYXN5bmMgKG5hbWU6IHN0cmluZywgbmFtZUtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBlbmNyeXB0U2VjcmV0c3RyZWFtKFxuICAgIHNvZGl1bS5mcm9tX2hleChuYW1lS2V5KSxcbiAgICBzb2RpdW0uZnJvbV9zdHJpbmcobmFtZSlcbiAgKTtcbiAgY29uc3QgbmFtZUVuY3J5cHRlZCA9IHNvZGl1bS50b19oZXgoZGF0YSk7XG4gIHJldHVybiBuYW1lRW5jcnlwdGVkO1xufTtcblxuZXhwb3J0IGNsYXNzIFNlY3JlY3lDbGllbnQgZXh0ZW5kcyBCYXNlQ2xpZW50IHtcbiAgand0OiBzdHJpbmc7XG5cbiAgI2tleXM6IEtleVBhaXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdWFTZXNzaW9uOiBzdHJpbmcsXG4gICAgdWFLZXlzOiBLZXlQYWlyLFxuICAgIHVhSnd0OiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52XG4gICkge1xuICAgIHN1cGVyKHVhU2Vzc2lvbiwgZW52KTtcbiAgICB0aGlzLmp3dCA9IHVhSnd0O1xuICAgIHRoaXMuI2tleXMgPSB1YUtleXM7XG4gIH1cblxuICBnZXQgcHVibGljS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2tleXMucHVibGljS2V5O1xuICB9XG5cbiAgYXN5bmMgYWRkRmlsZVRvSGlzdG9yeSh7XG4gICAgZmlsZUlkLFxuICAgIHZGaWxlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8VkZpbGU+IHtcbiAgICBjb25zdCB7IGFkZEZpbGVUb0hpc3RvcnkgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICB2RmlsZUlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbFZGaWxlUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlID0gYXdhaXQgZ3FsVkZpbGVUb0ludGVybmFsKGFkZEZpbGVUb0hpc3RvcnksIHRoaXMuI2tleXMpO1xuICAgIGNvbnN0IGZpbGUgPSB2RmlsZS5oaXN0b3J5LmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB1c2VycyA9IHZGaWxlLnVzZXJzLmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgaW5wdXQ6IFNoYXJlRmlsZUluSGlzdG9yeUlucHV0ID0ge1xuICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgIHVzZXJzOiB1c2Vycy5tYXAoKFt1XSkgPT4gKHtcbiAgICAgICAgICBpZDogdS5pZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZS51c2VyIS5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KSlcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgICAgc2hhcmVGaWxlSW5IaXN0b3J5OiBbeyBpbnB1dCwgdkZpbGVJZCB9LCB0cnVlXVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbnRlcm5hbFZGaWxlVG9WRmlsZSh2RmlsZSk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKHtcbiAgICBmaWxlLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICBzaWduYWxcbiAgfToge1xuICAgIGZpbGU6IGdsb2JhbFRoaXMuRmlsZSB8IFVpbnQ4QXJyYXk7XG4gICAgZW5jcnlwdFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB1cGxvYWRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBmaWxlS2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZmlsZUJ1ZmZlciA9XG4gICAgICBmaWxlIGluc3RhbmNlb2YgRmlsZSA/IG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSkgOiBmaWxlO1xuICAgIGNvbnN0IGNvbXByZXNzZWQgPSBjb21wcmVzcyhmaWxlQnVmZmVyKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGRhdGE6IGVuY3J5cHRlZEZpbGUsXG4gICAgICBtZDU6IG1kNUZpbGUsXG4gICAgICBtZDVFbmNyeXB0ZWRcbiAgICB9ID0gYXdhaXQgZW5jcnlwdChmaWxlS2V5LCBjb21wcmVzc2VkLCBlbmNyeXB0UHJvZ3Jlc3MsIHNpZ25hbCk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRGaWxlS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGZpbGVLZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG5cbiAgICBjb25zdCB7IHVwbG9hZEZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwbG9hZEZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVTaXplOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZVNpemVCZWZvcmU6IGZpbGVCdWZmZXIuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEZpbGVLZXkpLFxuICAgICAgICAgIG1kNUVuY3J5cHRlZCxcbiAgICAgICAgICBtZDU6IG1kNUZpbGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZDogdHJ1ZSxcbiAgICAgICAgICBmaWxlUGFydFNpemU6IHRydWUsXG4gICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgIGZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICBwZXJjZW50OiAwXG4gICAgfSk7XG5cbiAgICBpZiAodXBsb2FkRmlsZS5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50OiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHBlcmNlbnQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZS5maWxlSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkUGFydEVuZGVkID0gYXN5bmMgKFxuICAgICAgbWQ1OiBzdHJpbmcsXG4gICAgICBvcmRlcjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICBjb25zdCB7IHVwbG9hZEZpbGVQYXJ0RW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLmZpbGVJZCxcbiAgICAgICAgICAgIG1kNSxcbiAgICAgICAgICAgIG9yZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZVBhcnRFbmQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwbG9hZEVuZGVkID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT4ge1xuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlRW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHVwbG9hZEZpbGVFbmQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWxlSWQ6IHVwbG9hZEZpbGUuZmlsZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZUVuZCA/PyBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBjaHVua1BhcnRzID0gbmV3IEFycmF5PHtcbiAgICAgIG9yZGVyOiBudW1iZXI7XG4gICAgICBkYXRhOiBVaW50OEFycmF5O1xuICAgICAgbWQ1OiBzdHJpbmc7XG4gICAgfT4oKTtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBjaHVua10gb2YgZW51bWVyYXRlKFxuICAgICAgY2h1bmtzKGVuY3J5cHRlZEZpbGUsIE51bWJlcih1cGxvYWRGaWxlLmZpbGVQYXJ0U2l6ZSkpXG4gICAgKSkge1xuICAgICAgY2h1bmtQYXJ0cy5wdXNoKHtcbiAgICAgICAgb3JkZXI6IGluZGV4ICsgMSxcbiAgICAgICAgZGF0YTogY2h1bmssXG4gICAgICAgIG1kNTogYXdhaXQgbWQ1KGNodW5rKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgUHJvZ3Jlc3NFdmVudD4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKHBhcnQ6IG51bWJlciwgcHJvZ3Jlc3NFdmVudDogUHJvZ3Jlc3NFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCBjdXJyZW50ID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLmxvYWRlZCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiBjdXJyZW50IC8gZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVQYXJ0UmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBjb25zdCBjaHVuayA9IGNodW5rUGFydHMuZmluZChwID0+IHAub3JkZXIgPT09IHBhcnQub3JkZXIpO1xuICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJ0LmZpZWxkcykpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICBcImZpbGVcIixcbiAgICAgICAgbmV3IEJsb2IoW2NodW5rLmRhdGFdKSxcbiAgICAgICAgYCR7dXBsb2FkRmlsZS5maWxlSWR9LSR7Y2h1bmsub3JkZXJ9YFxuICAgICAgKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucG9zdChwYXJ0LnVybCwgZm9ybURhdGEsIHtcbiAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBwcm9ncmVzc0V2ZW50ID0+XG4gICAgICAgICAgICBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByb2dyZXNzRXZlbnQpLFxuICAgICAgICAgIHNpZ25hbFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB1cGxvYWRQYXJ0RW5kZWQoY2h1bmsubWQ1LCBjaHVuay5vcmRlcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICgoZSBhcyBhbnkpLnJlc3BvbnNlLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgIC8vIFRPRE8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9reS9pc3N1ZXMvMzA1XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAzLFxuICAgICAgdXBsb2FkRmlsZS5wYXJ0cy5tYXAocCA9PiAoKTogUHJvbWlzZTx2b2lkPiA9PiBieVBhcnQocCkpXG4gICAgKTtcblxuICAgIHJldHVybiB1cGxvYWRFbmRlZCgpO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZUluQ2xvdWQoe1xuICAgIGZpbGUsXG4gICAgbmFtZSxcbiAgICBmb2xkZXJJZCxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmb2xkZXJJZD86IHN0cmluZztcbiAgICBlbmNyeXB0UHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHVwbG9hZFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPiB7XG4gICAgY29uc3QgZmlsZUlkID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlKHtcbiAgICAgIGZpbGUsXG4gICAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICAgIHNpZ25hbFxuICAgIH0pO1xuICAgIGlmICghZmlsZUlkKSB7XG4gICAgICB0aHJvdyBgQ2FuJ3QgdXBsb2FkIGZpbGVgO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zYXZlSW5DbG91ZCh7IGZpbGVJZCwgbmFtZSwgZm9sZGVySWQgfSk7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHZGaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgZmlsZXNDYWNoZS5jbGVhcigpO1xuICAgIGZvbGRlcnNDYWNoZS5jbGVhcigpO1xuICAgIGF3YWl0IHN1cGVyLmxvZ291dChzZXNzaW9uSWQpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRm9sZGVyKHtcbiAgICBuYW1lLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGFyZW50Rm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsO1xuICB9KTogUHJvbWlzZTxGb2xkZXJGdWxsPiB7XG4gICAgY29uc3Qga2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZSA9IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIHNvZGl1bS50b19oZXgoa2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcbiAgICBjb25zdCB7IGNyZWF0ZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgY3JlYXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChlbmNyeXB0ZWRLZXkpXG4gICAgICAgIH0sXG4gICAgICAgIGdxbEZvbGRlckZ1bGxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghY3JlYXRlRm9sZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNyZWF0ZSBmb2xkZXJgKTtcbiAgICB9XG4gICAgY29uc3QgZm9sZGVyID0gYXdhaXQgZ3FsRm9sZGVyVG9FeHRlcm5hbEZvbGRlckZ1bGwoXG4gICAgICBjcmVhdGVGb2xkZXIsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJzID1cbiAgICAgIGZvbGRlci5wYXJlbnRGb2xkZXI/LnVzZXJzPy5maWx0ZXIoXG4gICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgKSA/PyBbXTtcblxuICAgIGlmICh1c2Vycy5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICB1c2Vycy5tYXAoKFt1LCByaWdodHNdKSA9PlxuICAgICAgICAgIHRoaXMuc2hhcmVGb2xkZXIoe1xuICAgICAgICAgICAgZm9sZGVySWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcjtcbiAgfVxuXG4gIGFzeW5jIGZvbGRlcih7XG4gICAgaWQsXG4gICAgZGVsZXRlZFxuICB9OiB7XG4gICAgaWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWQ/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSA9IHt9KTogUHJvbWlzZTxGb2xkZXJGdWxsIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBmb2xkZXI6IFt7IGRlbGV0ZWQsIGlkIH0sIGdxbEZvbGRlckZ1bGxRdWVyeV1cbiAgICB9KTtcbiAgICBpZiAoIWZvbGRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbChmb2xkZXIsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgZmlsZSh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZWNyZWN5RmlsZSB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbEZpbGVRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxGaWxlVG9FeHRlcm5hbChmaWxlLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIHZGaWxlKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlciB8IG51bGw+IHtcbiAgICBjb25zdCB7IHZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB2RmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIXZGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykgYXMgUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXI+O1xuICB9XG5cbiAgYXN5bmMgbWFpbCh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNYWlsIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgbWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsTWFpbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtYWlsLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIHNoYXJlVkZpbGUoe1xuICAgIHZGaWxlSWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgdkZpbGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHJpZ2h0czogUmlnaHRzO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgaWYgKCF2RmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy52RmlsZSh7IGlkOiB2RmlsZUlkIH0pO1xuICAgICAgdkZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG5cbiAgICAgIGlmICghdkZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXIoeyB1c2VySWQsIHdpdGhQdWJsaWNLZXk6IHRydWUgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lS2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleCh2RmlsZS51c2VyQXBwLm5hbWVLZXkpLFxuICAgICAgICB1c2VyLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGhpc3RvcnkgPSBuZXcgQXJyYXk8e1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGtleTogc3RyaW5nO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGggb2YgdkZpbGUuaGlzdG9yeSkge1xuICAgICAgaWYgKCFoLnVzZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBoaXN0b3J5LnB1c2goe1xuICAgICAgICBpZDogaC5pZCxcbiAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoaC51c2VyLmtleSksXG4gICAgICAgICAgICB1c2VyLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZVZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBzaGFyZVZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB2RmlsZUlkLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgbmFtZUtleSxcbiAgICAgICAgICBoaXN0b3J5XG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzaGFyZVZGaWxlID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVkVkZpbGVzKCk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyW10+IHtcbiAgICBjb25zdCB7IHNoYXJlZFZGaWxlcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgc2hhcmVkVkZpbGVzOiBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlV2l0aEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgdkZpbGUgb2Ygc2hhcmVkVkZpbGVzKSB7XG4gICAgICB2RmlsZXMucHVzaChcbiAgICAgICAgKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykpIGFzIFZGaWxlV2l0aEZvbGRlclxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdkZpbGVzO1xuICB9XG5cbiAgYXN5bmMgdkZpbGVzU2hhcmVkV2l0aE1lKCk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyW10+IHtcbiAgICBjb25zdCB7IHZGaWxlc1NoYXJlZFdpdGhNZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdkZpbGVzU2hhcmVkV2l0aE1lOiBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlV2l0aEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgdkZpbGUgb2YgdkZpbGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICB2RmlsZXMucHVzaChcbiAgICAgICAgKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykpIGFzIFZGaWxlV2l0aEZvbGRlclxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdkZpbGVzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZFZGaWxlcygpOiBQcm9taXNlPFZGaWxlW10+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRWRmlsZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGRlbGV0ZWRWRmlsZXM6IGdxbFZGaWxlUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlcyA9IG5ldyBBcnJheTxWRmlsZT4oKTtcblxuICAgIGZvciAoY29uc3QgdkZpbGUgb2YgZGVsZXRlZFZGaWxlcykge1xuICAgICAgdkZpbGVzLnB1c2goKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykpIGFzIFZGaWxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdkZpbGVzO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVkRm9sZGVycygpOiBQcm9taXNlPEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBzaGFyZWRGb2xkZXJzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBzaGFyZWRGb2xkZXJzOiBncWxGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9sZGVycyA9IG5ldyBBcnJheTxGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBzaGFyZWRGb2xkZXJzKSB7XG4gICAgICBmb2xkZXJzLnB1c2goYXdhaXQgZ3FsRm9sZGVyVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9sZGVycztcbiAgfVxuXG4gIGFzeW5jIGZvbGRlcnNTaGFyZWRXaXRoTWUoKTogUHJvbWlzZTxGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgZm9sZGVyc1NoYXJlZFdpdGhNZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZm9sZGVyc1NoYXJlZFdpdGhNZTogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2YgZm9sZGVyc1NoYXJlZFdpdGhNZSkge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBkZWxldGVkRm9sZGVycygpOiBQcm9taXNlPEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBkZWxldGVkRm9sZGVycyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZGVsZXRlZEZvbGRlcnM6IGdxbEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2xkZXJzID0gbmV3IEFycmF5PEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIGRlbGV0ZWRGb2xkZXJzKSB7XG4gICAgICBmb2xkZXJzLnB1c2goYXdhaXQgZ3FsRm9sZGVyVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9sZGVycztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWRNYWlscyh7IG1haWxUeXBlIH06IHsgbWFpbFR5cGU6IE1haWxUeXBlIH0pOiBQcm9taXNlPE1haWxbXT4ge1xuICAgIGNvbnN0IHsgZGVsZXRlZE1haWxzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBkZWxldGVkTWFpbHM6IFt7IG1haWxUeXBlIH0sIGdxbE1haWxRdWVyeV1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1haWxzID0gbmV3IEFycmF5PE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgZGVsZXRlZE1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICBtYWlscy5wdXNoKG1haWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYWlscztcbiAgfVxuXG4gIGFzeW5jIHNoYXJlRm9sZGVyKHtcbiAgICBmb2xkZXJJZCxcbiAgICB1c2VySWQsXG4gICAgcmlnaHRzXG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHJpZ2h0czogUmlnaHRzO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcih7IHVzZXJJZCwgd2l0aFB1YmxpY0tleTogdHJ1ZSB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB7IHNoYXJlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBzaGFyZUZvbGRlcjogW1xuICAgICAgICB7IGZvbGRlcklkLCB1c2VySWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlczogdHJ1ZSxcbiAgICAgICAgICBmb2xkZXJzOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNoYXJlRm9sZGVyczogU2hhcmVGb2xkZXJzSW5wdXQgPSB7XG4gICAgICB2RmlsZXM6IFtdLFxuICAgICAgZm9sZGVyczogW11cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZUZvbGRlci5mb2xkZXJzKSB7XG4gICAgICBjb25zdCBuYW1lS2V5ID0gYXdhaXQgdGhpcy5wZXJGb2xkZXIoaWQsIHVzZXIucHVibGljS2V5KTtcbiAgICAgIGlmIChuYW1lS2V5KSB7XG4gICAgICAgIHNoYXJlRm9sZGVycy5mb2xkZXJzLnB1c2gobmFtZUtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZUZvbGRlci52RmlsZXMpIHtcbiAgICAgIGNvbnN0IHZGaWxlSW5wdXQgPSBhd2FpdCB0aGlzLnBlclZGaWxlKGlkLCB1c2VyLnB1YmxpY0tleSk7XG4gICAgICBpZiAodkZpbGVJbnB1dCkge1xuICAgICAgICBzaGFyZUZvbGRlcnMudkZpbGVzLnB1c2godkZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZUZvbGRlckZpbmlzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2hhcmVGb2xkZXJGaW5pc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgc2hhcmVGb2xkZXJzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzaGFyZUZvbGRlckZpbmlzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZvbGRlcih7XG4gICAgZm9sZGVySWQsXG4gICAgbmFtZSxcbiAgICBpc0Zhdm9yaXRlLFxuICAgIGRlbGV0ZWRBdFxuICB9OiB7XG4gICAgZm9sZGVySWQ6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEZvbGRlckZ1bGw+IHtcbiAgICBsZXQgZm9sZGVyID0gZm9sZGVyc0NhY2hlLmdldChmb2xkZXJJZCk7XG4gICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgZm9sZGVyID0gZm9sZGVyc0NhY2hlLmdldChmb2xkZXJJZCk7XG4gICAgICBpZiAoIWZvbGRlcikge1xuICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBmb2xkZXIgJHtmb2xkZXJJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lXG4gICAgICA/IGZvbGRlci51c2VyQXBwPy5uYW1lS2V5XG4gICAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgZm9sZGVyLnVzZXJBcHAubmFtZUtleSlcbiAgICAgICAgOiBuYW1lXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IHVwZGF0ZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdXBkYXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGlzRmF2b3JpdGUsXG4gICAgICAgICAgZGVsZXRlZEF0XG4gICAgICAgIH0sXG4gICAgICAgIGdxbEZvbGRlckZ1bGxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVGb2xkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHVwZGF0ZSBmb2xkZXJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsKHVwZGF0ZUZvbGRlciwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBOb3RpZmljYXRpb25zKFxuICAgIG5vdGlmaWNhdGlvbnM6IFBhcnRpYWw8VXNlckFwcE5vdGlmaWNhdGlvbnM+XG4gICk6IFByb21pc2U8VXNlckFwcE5vdGlmaWNhdGlvbnMgfCBudWxsPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBOb3RpZmljYXRpb25zIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVBcHBOb3RpZmljYXRpb25zOiBbXG4gICAgICAgIG5vdGlmaWNhdGlvbnMsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmFibGVBbGw6IHRydWUsXG4gICAgICAgICAgbWFpbDogdHJ1ZSxcbiAgICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgICBkaXNhYmxlQWxsVW50aWw6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVBcHBOb3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlQXBwTm90aWZpY2F0aW9ucyxcbiAgICAgIGRpc2FibGVBbGxVbnRpbDogdXBkYXRlQXBwTm90aWZpY2F0aW9ucy5kaXNhYmxlQWxsVW50aWxcbiAgICAgICAgPyBuZXcgRGF0ZSh1cGRhdGVBcHBOb3RpZmljYXRpb25zLmRpc2FibGVBbGxVbnRpbClcbiAgICAgICAgOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFwcE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxVc2VyQXBwTm90aWZpY2F0aW9ucyB8IG51bGw+IHtcbiAgICBjb25zdCB7IGFwcE5vdGlmaWNhdGlvbnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGFwcE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICBtYWlsOiB0cnVlLFxuICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hcHBOb3RpZmljYXRpb25zLFxuICAgICAgZGlzYWJsZUFsbFVudGlsOiBhcHBOb3RpZmljYXRpb25zLmRpc2FibGVBbGxVbnRpbFxuICAgICAgICA/IG5ldyBEYXRlKGFwcE5vdGlmaWNhdGlvbnMuZGlzYWJsZUFsbFVudGlsKVxuICAgICAgICA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlTWFpbChcbiAgICBkYXRhOiBOZXdNYWlsLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG1haWwgPSBhd2FpdCB0aGlzLmNyZWF0ZURyYWZ0TWFpbChkYXRhKTtcbiAgICBpZiAoIW1haWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VuZERyYWZ0TWFpbChtYWlsLm1haWxJbnRlZ3JpdHlJZCwgY3VzdG9tTWVzc2FnZSk7XG4gIH1cblxuICBhc3luYyB3YWl0aW5nUmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFdhaXRpbmdSZWNlaXZlZE1haWxbXT4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIHdhaXRpbmdSZWNlaXZlZE1haWxzOiB7XG4gICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgYXR0YWNobWVudHNDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIHNlbmRlcjoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzOiB7XG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGdldCB3YWl0aW5nIHJlY2VpdmVkIG1haWxzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyLndhaXRpbmdSZWNlaXZlZE1haWxzLm1hcChtID0+ICh7XG4gICAgICBpZDogZ2VuZXJhdGUoKSxcbiAgICAgIC4uLm0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZShtLmRhdGUpXG4gICAgfSkpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJhZnRNYWlsKFxuICAgIGRyYWZ0SWQ6IHN0cmluZyxcbiAgICB7IGJvZHksIHN1YmplY3QsIGZpbGVzLCByZWNpcGllbnRzSWRzLCByZXBseVRvIH06IFBhcnRpYWw8TmV3TWFpbD5cbiAgKTogUHJvbWlzZTxEcmFmdE1haWwgfCBudWxsPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG4gICAgY29uc3QgZHJhZnQgPSBkcmFmdHMuZmluZChkID0+IGQubWFpbEludGVncml0eUlkID09PSBkcmFmdElkKTtcbiAgICBpZiAoIWRyYWZ0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZHJhZnQgJHtkcmFmdElkfWApO1xuICAgIH1cbiAgICBsZXQgaGFzaEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGhhc2g6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChib2R5IHx8IHN1YmplY3QpIHtcbiAgICAgIGhhc2hLZXkgPSBzb2RpdW0ucmFuZG9tYnl0ZXNfYnVmKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTLFxuICAgICAgICBcImhleFwiXG4gICAgICApO1xuICAgICAgaGFzaCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goXG4gICAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfQllURVMsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHsgYm9keSwgc3ViamVjdCB9KSxcbiAgICAgICAgaGFzaEtleSxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc2VuZGVyRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgICBsZXQgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZi5pZCB9KTtcbiAgICAgICAgICBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmLm5hbWV9ICgke2YuaWR9KSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzZW5kZXJGaWxlcy5wdXNoKHtcbiAgICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGZpbGUudXNlci5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdXBkYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRyYWZ0SWQsXG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgICAgID8gc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzdWJqZWN0OiBzdWJqZWN0XG4gICAgICAgICAgICA/IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2VuZGVyRmlsZXMsXG4gICAgICAgICAgaGFzaCxcbiAgICAgICAgICBoYXNoS2V5XG4gICAgICAgIH0sXG4gICAgICAgIGdxbE1haWxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVEcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChcbiAgICAgIHVwZGF0ZURyYWZ0TWFpbCxcbiAgICAgIHRoaXMuI2tleXNcbiAgICApIGFzIERyYWZ0TWFpbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZURyYWZ0TWFpbChkcmFmdElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRHJhZnRNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdElkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRHJhZnRNYWlsID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVkZpbGVTaGFyaW5nKHtcbiAgICB2RmlsZUlkLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgdkZpbGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZVNoYXJpbmcgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZVZGaWxlU2hhcmluZzogW1xuICAgICAgICB7XG4gICAgICAgICAgdkZpbGVJZCxcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZVNoYXJpbmc7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXJTaGFyaW5nKHtcbiAgICBmb2xkZXJJZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIGZvbGRlcklkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZvbGRlclNoYXJpbmcgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZUZvbGRlclNoYXJpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZUZvbGRlclNoYXJpbmc7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVWRmlsZSh7XG4gICAgdkZpbGVJZCxcbiAgICBmb2xkZXJJZCxcbiAgICBjdXN0b21OYW1lXG4gIH06IHtcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLnZGaWxlKHsgaWQ6IHZGaWxlSWQgfSk7XG4gICAgICBmaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAoJHt2RmlsZUlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGN1c3RvbU5hbWUgPSBjdXN0b21OYW1lXG4gICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKGN1c3RvbU5hbWUsIGZpbGUudXNlckFwcC5uYW1lS2V5KVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyBkdXBsaWNhdGVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZHVwbGljYXRlVkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgY3VzdG9tTmFtZVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZHVwbGljYXRlVkZpbGU7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXJDbG91ZFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVkZpbGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZUNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsVHJhc2goeyBpZHMgfTogeyBpZHM6IEFycmF5PHN0cmluZz4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVNYWlsVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZU1haWxUcmFzaDtcbiAgfVxuXG4gIGFzeW5jIGVtcHR5TWFpbFRyYXNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZW1wdHlNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5TWFpbFRyYXNoOiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW1wdHlNYWlsVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBlbXB0eUNsb3VkVHJhc2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBlbXB0eUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5Q2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJWRmlsZSh7IHZGaWxlSWQgfTogeyB2RmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlclZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICByZWNvdmVyVkZpbGU6IFt7IHZGaWxlSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyVkZpbGU7XG4gIH1cblxuICBhc3luYyByZWNvdmVyRm9sZGVyKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHJlY292ZXJGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHJlY292ZXJGb2xkZXI6IFt7IGlkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVjb3ZlckZvbGRlciA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3Zlck1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHJlY292ZXJNYWlsOiBbeyBtYWlsSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyTWFpbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICB2RmlsZUlkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICB2RmlsZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRmlsZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlKHsgZmlsZUlkIH06IHsgZmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZVZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYWlsSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVNYWlsO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUluQ2xvdWQoe1xuICAgIGZpbGVJZCxcbiAgICBuYW1lLFxuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcj4ge1xuICAgIGlmIChmb2xkZXJJZCAmJiAhZm9sZGVyc0NhY2hlLmhhcyhmb2xkZXJJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgaWYgKCFmb2xkZXJzQ2FjaGUuaGFzKGZvbGRlcklkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJHtmb2xkZXJJZH0gZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGtleSA9IFwiXCI7XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcblxuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGZpbGVJZCB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpID8/IG51bGw7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IGF3YWl0IHRoaXMucmVjZWl2ZWRNYWlscygpO1xuICAgICAgICBjb25zdCBtYWlsID0gcmVjZWl2ZWRNYWlscy5maW5kKG0gPT5cbiAgICAgICAgICBtLmZpbGVzLnNvbWUoZiA9PiBmLmlkID09PSBmaWxlSWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFtYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVNYWlsID0gbWFpbC5maWxlcy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcblxuICAgICAgICBpZiAoIWZpbGVNYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlTWFpbC5rZXkpLFxuICAgICAgICAgIG1haWwuc2VuZGVyLnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKTtcblxuICAgICAgICBrZXkgPSBzb2RpdW0udG9faGV4KGZpbGVLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDFcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlcnJvciAyXCIpO1xuICAgICAgfVxuICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBcIlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDNcIik7XG4gICAgfVxuXG4gICAga2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IG5hbWVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChuYW1lS2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZUtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KG5hbWVLZXksIHRoaXMuI2tleXMucHVibGljS2V5LCB0aGlzLiNrZXlzLnByaXZhdGVLZXkpXG4gICAgKTtcblxuICAgIGNvbnN0IHsgc2F2ZUluQ2xvdWQgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNhdmVJbkNsb3VkOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIGZpbGVuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIG5hbWVLZXk6IGVuY3J5cHRlZE5hbWVLZXlcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlID0gKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbChcbiAgICAgIHNhdmVJbkNsb3VkLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkpIGFzIFZGaWxlV2l0aEZvbGRlcjtcblxuICAgIGNvbnN0IG1lID0gdkZpbGUuZm9sZGVyLnVzZXJzLmZpbmQoXG4gICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSA9PT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICApO1xuXG4gICAgaWYgKG1lICYmIFtcImFkbWluXCIsIFwid3JpdGVcIl0uaW5jbHVkZXMobWVbMV0pKSB7XG4gICAgICBjb25zdCBvdGhlcnMgPSB2RmlsZS5mb2xkZXIudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvdGhlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlVkZpbGUoe1xuICAgICAgICAgICAgdkZpbGVJZDogdkZpbGUuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZTtcbiAgfVxuXG4gIGFzeW5jIHNlbmREcmFmdE1haWwoXG4gICAgZHJhZnRJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRyYWZ0cyA9IGF3YWl0IHRoaXMuZHJhZnRNYWlscygpO1xuXG4gICAgY29uc3QgZHJhZnQgPSBkcmFmdHMuZmluZChkID0+IGQubWFpbEludGVncml0eUlkID09PSBkcmFmdElkKTtcbiAgICBpZiAoIWRyYWZ0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSBuZXcgQXJyYXk8TWFpbFJlY2lwaWVudElucHV0PigpO1xuXG4gICAgY29uc3QgdGVtcG9yYXJ5UmVjaXBpZW50cyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgZW1haWwgfSBvZiBkcmFmdC50ZW1wb3JhcnlSZWNpcGllbnRzKSB7XG4gICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGVtYWlsXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChlbWFpbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgeyBpZCB9IG9mIGRyYWZ0LnJlY2lwaWVudHMpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgIGRyYWZ0LmZpbGVzLFxuICAgICAgICBkcmFmdC5zdWJqZWN0LFxuICAgICAgICBkcmFmdC5ib2R5LFxuICAgICAgICBpZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzLnB1c2goaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjaXBpZW50cy5wdXNoKGlucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHNlbmREcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNlbmREcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBkcmFmdE1haWxJZDogZHJhZnQubWFpbEludGVncml0eUlkLFxuICAgICAgICAgIGN1c3RvbU1lc3NhZ2VcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbmREcmFmdE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBzZW5kV2FpdGluZ0VtYWlscygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBUT0RPIG9wdGkgdGhpc1xuICAgIGNvbnN0IG1haWxzID0gYXdhaXQgdGhpcy5zZW50TWFpbHMoKTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IG1haWxzLmZpbHRlcihtID0+IG0udGVtcG9yYXJ5UmVjaXBpZW50cy5sZW5ndGggPiAwKTtcblxuICAgIGZvciAoY29uc3QgbWFpbCBvZiBmaWx0ZXJlZCkge1xuICAgICAgZm9yIChjb25zdCB7IGVtYWlsIH0gb2YgbWFpbC50ZW1wb3JhcnlSZWNpcGllbnRzKSB7XG4gICAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICAgIG1haWwuZmlsZXMsXG4gICAgICAgICAgbWFpbC5zdWJqZWN0LFxuICAgICAgICAgIG1haWwuYm9keSxcbiAgICAgICAgICBlbWFpbFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgICAgICAgIHNlbmRPbmVNYWlsOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYWlsSW50ZWdyaXR5SWQ6IG1haWwubWFpbEludGVncml0eUlkLFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogaW5wdXRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZURyYWZ0TWFpbCh7XG4gICAgYm9keSxcbiAgICBzdWJqZWN0LFxuICAgIGZpbGVzLFxuICAgIHJlY2lwaWVudHNJZHMsXG4gICAgcmVwbHlUb1xuICB9OiBOZXdNYWlsKTogUHJvbWlzZTxEcmFmdE1haWwgfCBudWxsPiB7XG4gICAgY29uc3QgaGFzaEtleSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTLFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3QgaGFzaCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBib2R5LCBzdWJqZWN0IH0pLFxuICAgICAgaGFzaEtleSxcbiAgICAgIFwiaGV4XCJcbiAgICApO1xuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGZpbGUudXNlci5rZXkpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3JlYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBjcmVhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlY2lwaWVudHM6IHJlY2lwaWVudHNJZHMsXG4gICAgICAgICAgcmVwbHlUbyxcbiAgICAgICAgICBib2R5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzZW5kZXJGaWxlcyxcbiAgICAgICAgICBoYXNoLFxuICAgICAgICAgIGhhc2hLZXlcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsTWFpbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWNyZWF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKFxuICAgICAgY3JlYXRlRHJhZnRNYWlsLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkgYXMgRHJhZnRNYWlsO1xuICB9XG5cbiAgYXN5bmMgZmlsZUNvbnRlbnQoe1xuICAgIGZpbGVJZCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgcHJvZ3Jlc3NEZWNyeXB0LFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgb25Eb3dubG9hZFByb2dyZXNzPzogKHByb2dyZXNzOiBEb3dubG9hZFByb2dyZXNzKSA9PiB2b2lkO1xuICAgIHByb2dyZXNzRGVjcnlwdD86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBjb25zdCB7IGZpbGVDb250ZW50IH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBmaWxlQ29udGVudDogW1xuICAgICAgICB7IGZpbGVJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50Q2xvdWRcIjoge1xuICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFJlY2VpdmVkTWFpbFwiOiB7XG4gICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgc2VuZGVyUHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50U2VudE1haWxcIjoge1xuICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFmaWxlQ29udGVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7ZmlsZUlkfSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzc1BhcnRzOiBSZWNvcmQ8bnVtYmVyLCBEb3dubG9hZFByb2dyZXNzPiA9IHt9O1xuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAoXG4gICAgICBwYXJ0OiBudW1iZXIsXG4gICAgICBwcm9ncmVzc0V2ZW50OiBEb3dubG9hZFByb2dyZXNzXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBwcm9ncmVzc1BhcnRzW3BhcnRdID0gcHJvZ3Jlc3NFdmVudDtcbiAgICAgIGNvbnN0IHRyYW5zZmVycmVkQnl0ZXMgPSBPYmplY3QudmFsdWVzKHByb2dyZXNzUGFydHMpLnJlZHVjZShcbiAgICAgICAgKHBydiwgY3VyKSA9PiBwcnYgKyBjdXIudHJhbnNmZXJyZWRCeXRlcyxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRvdGFsQnl0ZXMgPSBOdW1iZXIoZmlsZUNvbnRlbnQudG90YWxTaXplKTtcbiAgICAgIG9uRG93bmxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudDogdHJhbnNmZXJyZWRCeXRlcyAvIHRvdGFsQnl0ZXMsXG4gICAgICAgIHRvdGFsQnl0ZXMsXG4gICAgICAgIHRyYW5zZmVycmVkQnl0ZXNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBwYXJ0cyA9IG5ldyBBcnJheTx7IGRhdGE6IFVpbnQ4QXJyYXk7IG9yZGVyOiBudW1iZXIgfT4oKTtcblxuICAgIGNvbnN0IGJ5UGFydCA9IGFzeW5jIChwYXJ0OiBGaWxlQ29udGVudFBhcnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICBhd2FpdCBreVxuICAgICAgICAgIC5nZXQocGFydC5jb250ZW50VXJsLCB7XG4gICAgICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IHByID0+IG9uUHJvZ3Jlc3MocGFydC5vcmRlciwgcHIpLFxuICAgICAgICAgICAgc2lnbmFsOiBzaWduYWxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hcnJheUJ1ZmZlcigpXG4gICAgICApO1xuICAgICAgY29uc3QgbWQ1UGFydCA9IGF3YWl0IG1kNShidWYpO1xuICAgICAgaWYgKG1kNVBhcnQgIT09IHBhcnQubWQ1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtZDUgZm9yIHBhcnQgJHtwYXJ0Lm9yZGVyfSBvZiBmaWxlICR7ZmlsZUlkfWApO1xuICAgICAgfVxuICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgIGRhdGE6IGJ1ZixcbiAgICAgICAgb3JkZXI6IHBhcnQub3JkZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAzLFxuICAgICAgZmlsZUNvbnRlbnQucGFydHMubWFwKHAgPT4gKCk6IFByb21pc2U8dm9pZD4gPT4gYnlQYXJ0KHApKVxuICAgICk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRDb250ZW50ID0gY29uY2F0ZW5hdGUoXG4gICAgICAuLi5wYXJ0cy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcikubWFwKHAgPT4gcC5kYXRhKVxuICAgICk7XG5cbiAgICAvLyBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShtZDUob2YoZW5jcnlwdGVkQ29udGVudCkpKTtcbiAgICBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBtZDUoZW5jcnlwdGVkQ29udGVudCk7XG5cbiAgICBpZiAobWQ1RW5jcnlwdGVkICE9PSBmaWxlQ29udGVudC5tZDVFbmNyeXB0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5jcnlwdGVkIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgc29kaXVtLmZyb21faGV4KGZpbGVDb250ZW50LmtleSksXG4gICAgICBmaWxlQ29udGVudC5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCJcbiAgICAgICAgPyBmaWxlQ29udGVudC5zZW5kZXJQdWJsaWNLZXlcbiAgICAgICAgOiBmaWxlQ29udGVudC5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50Q2xvdWRcIlxuICAgICAgICA/IGZpbGVDb250ZW50LnB1YmxpY0tleVxuICAgICAgICA6IHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcblxuICAgIGNvbnN0IHNyYyA9IGF3YWl0IGRlY3J5cHQoa2V5LCBlbmNyeXB0ZWRDb250ZW50LCBwcm9ncmVzc0RlY3J5cHQsIHNpZ25hbCk7XG5cbiAgICAvLyBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKHNyYykpKTtcbiAgICBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgbWQ1KHNyYyk7XG5cbiAgICBpZiAobWQ1Q29udGVudCAhPT0gZmlsZUNvbnRlbnQubWQ1KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5jb21wcmVzcyhzcmMpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIGZpbGVuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBmaWxlbmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgaXNGYXZvcml0ZT86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxWRmlsZT4ge1xuICAgIGNvbnN0IGZpbGUgPSB2RmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHRocm93IGBDYW4ndCBmaW5kIGZpbGUgJHtmaWxlSWR9YDtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gZmlsZW5hbWVcbiAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUoZmlsZW5hbWUsIGZpbGUudXNlckFwcC5uYW1lS2V5KVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyB1cGRhdGVGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVGaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZmlsZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3FsVkZpbGVUb0V4dGVybmFsKHVwZGF0ZUZpbGUsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgcmVhZE1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyByZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgcmVhZE1haWw6IFt7IG1haWxJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlYWRNYWlsID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgdW5yZWFkTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHVucmVhZE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVucmVhZE1haWw6IFt7IG1haWxJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVucmVhZE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBhcHBTZXR0aW5ncygpOiBQcm9taXNlPFVzZXJBcHBTZXR0aW5ncyB8IG51bGw+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBTZXR0aW5nczoge1xuICAgICAgICAgICAgYXV0b0Rpc2Nvbm5lY3REZWxheTogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5RmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyLmFwcFNldHRpbmdzID8/IG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBTZXR0aW5ncyhcbiAgICBzZXR0aW5nczogUGFydGlhbDxVc2VyQXBwU2V0dGluZ3M+XG4gICk6IFByb21pc2U8VXNlckFwcFNldHRpbmdzPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBTZXR0aW5ncyB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdXBkYXRlQXBwU2V0dGluZ3M6IFtcbiAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvRGlzY29ubmVjdERlbGF5OiB0cnVlLFxuICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiB1cGRhdGVBcHBTZXR0aW5ncztcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmVkTWFpbHMoKTogUHJvbWlzZTxSZWNlaXZlZE1haWxbXT4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIHJlY2VpdmVkTWFpbHM6IGdxbE1haWxRdWVyeVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYWlscyA9IHVzZXI/LnJlY2VpdmVkTWFpbHMgPz8gW107XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IG5ldyBBcnJheTxSZWNlaXZlZE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgbWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIHJlY2VpdmVkTWFpbHMucHVzaChtYWlsIGFzIFJlY2VpdmVkTWFpbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY2VpdmVkTWFpbHM7XG4gIH1cblxuICBhc3luYyBzZW50TWFpbHMoKTogUHJvbWlzZTxTZW50TWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VudE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5zZW50TWFpbHMgPz8gW107XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3Qgc2VudE1haWxzID0gbmV3IEFycmF5PFNlbnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICBzZW50TWFpbHMucHVzaChtYWlsIGFzIFNlbnRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VudE1haWxzO1xuICB9XG5cbiAgYXN5bmMgZHJhZnRNYWlscygpOiBQcm9taXNlPERyYWZ0TWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRNYWlsczogZ3FsTWFpbFF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1haWxzID0gdXNlcj8uZHJhZnRNYWlscyA/PyBbXTtcblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCBkcmFmdE1haWxzID0gbmV3IEFycmF5PERyYWZ0TWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiBtYWlscykge1xuICAgICAgY29uc3QgZHJhZnQgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKSBhcyBEcmFmdE1haWw7XG4gICAgICBpZiAoZHJhZnQpIHtcbiAgICAgICAgZHJhZnRNYWlscy5wdXNoKGRyYWZ0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZHJhZnRNYWlscztcbiAgfVxuXG4gIHByaXZhdGUgcGVyRm9sZGVyID0gYXN5bmMgKFxuICAgIGZvbGRlcklkOiBzdHJpbmcsXG4gICAgcHVibGljS2V5OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxOYW1lS2V5SW5wdXRGb2xkZXJzIHwgbnVsbD4gPT4ge1xuICAgIGxldCBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcblxuICAgIGlmICghZm9sZGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvbGRlcih7IGlkOiBmb2xkZXJJZCB9KTtcbiAgICAgIGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuXG4gICAgICBpZiAoIWZvbGRlcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZvbGRlci51c2VyQXBwPy5uYW1lS2V5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGZvbGRlcklkLFxuICAgICAgbmFtZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZm9sZGVyLnVzZXJBcHAubmFtZUtleSksXG4gICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApXG4gICAgfTtcbiAgfTtcblxuICBwcml2YXRlIHBlclZGaWxlID0gYXN5bmMgKFxuICAgIHZGaWxlSWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dCB8IG51bGw+ID0+IHtcbiAgICBsZXQgdkZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG5cbiAgICBpZiAoIXZGaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLnZGaWxlKHsgaWQ6IHZGaWxlSWQgfSk7XG4gICAgICB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgICAgaWYgKCF2RmlsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHZGaWxlLmlkLFxuICAgICAgbmFtZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgodkZpbGUudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWxlczogdkZpbGUuaGlzdG9yeS5tYXAoZiA9PiAoe1xuICAgICAgICBpZDogZi5pZCxcbiAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZi51c2VyIS5rZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KSlcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgX2VhY2hVc2VyID0gYXN5bmMgKFxuICAgIGZpbGVzOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10sXG4gICAgc3ViamVjdDogc3RyaW5nLFxuICAgIGJvZHk6IHN0cmluZyxcbiAgICBpZE9yTWFpbDogc3RyaW5nXG4gICk6IFByb21pc2U8TWFpbFJlY2lwaWVudElucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCB1ID0gdXNlcnNDYWNoZS5nZXQoaWRPck1haWwpO1xuICAgIGlmICghdSB8fCAhKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHUgPVxuICAgICAgICAoYXdhaXQgdGhpcy51c2VyKHtcbiAgICAgICAgICB1c2VySWQ6IGlkT3JNYWlsLFxuICAgICAgICAgIHdpdGhQdWJsaWNLZXk6IHRydWVcbiAgICAgICAgfSkpID8/IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF1KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXNlciAke2lkT3JNYWlsfSBoYXZlIG5vIHB1YmxpYyBrZXlgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGllbnRzRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcblxuICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgbGV0IGZpbGVJbkhpc3RvcnkgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgIGlmICghZmlsZUluSGlzdG9yeSkge1xuICAgICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZi5pZCB9KTtcbiAgICAgICAgZmlsZUluSGlzdG9yeSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWZpbGVJbkhpc3RvcnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmLm5hbWV9ICgke2YuaWR9KSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qga2V5ID0gZmlsZUluSGlzdG9yeS51c2VyPy5rZXk7XG4gICAgICBpZiAoIWtleSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlY2lwaWVudHNGaWxlcy5wdXNoKHtcbiAgICAgICAgaWQ6IGYuaWQsXG4gICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZWNpcGllbnRJZDogdS5pZCxcbiAgICAgIGJvZHk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgc3ViamVjdDogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWxlczogcmVjaXBpZW50c0ZpbGVzXG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==