@secrecy/lib 1.0.0-dev.4 → 1.0.0-dev.8
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.
- package/lib/client/index.d.ts +9 -8
- package/lib/client/index.js +551 -455
- package/lib/client/types/UserAppNotifications.d.ts +6 -0
- package/lib/client/types/UserAppNotifications.js +2 -0
- package/lib/client/types/index.d.ts +1 -0
- package/lib/client/types/index.js +2 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/worker/sodium.d.ts +2 -2
- package/lib/worker/sodium.js +19 -5
- package/lib/zeus/const.js +38 -3
- package/lib/zeus/index.d.ts +178 -8
- package/lib/zeus/index.js +6 -2
- package/package.json +7 -7
package/lib/client/index.js
CHANGED
|
@@ -408,13 +408,13 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
408
408
|
var _uploadFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9(_ref8) {
|
|
409
409
|
var _this3 = this;
|
|
410
410
|
|
|
411
|
-
var file, encryptProgress, uploadProgress,
|
|
411
|
+
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
412
|
|
|
413
413
|
return _regeneratorRuntime.wrap(function _callee9$(_context9) {
|
|
414
414
|
while (1) {
|
|
415
415
|
switch (_context9.prev = _context9.next) {
|
|
416
416
|
case 0:
|
|
417
|
-
file = _ref8.file, encryptProgress = _ref8.encryptProgress, uploadProgress = _ref8.uploadProgress,
|
|
417
|
+
file = _ref8.file, encryptProgress = _ref8.encryptProgress, uploadProgress = _ref8.uploadProgress, signal = _ref8.signal;
|
|
418
418
|
fileKey = secretstreamKeygen();
|
|
419
419
|
|
|
420
420
|
if (!(file instanceof File)) {
|
|
@@ -437,10 +437,9 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
437
437
|
|
|
438
438
|
case 11:
|
|
439
439
|
fileBuffer = _context9.t0;
|
|
440
|
-
compressed = compress(fileBuffer);
|
|
441
|
-
|
|
440
|
+
compressed = compress(fileBuffer);
|
|
442
441
|
_context9.next = 15;
|
|
443
|
-
return encrypt(fileKey, compressed, encryptProgress);
|
|
442
|
+
return encrypt(fileKey, compressed, encryptProgress, signal);
|
|
444
443
|
|
|
445
444
|
case 15:
|
|
446
445
|
_yield$encrypt = _context9.sent;
|
|
@@ -644,7 +643,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
644
643
|
onUploadProgress: function onUploadProgress(progressEvent) {
|
|
645
644
|
return onProgress(part.order, progressEvent);
|
|
646
645
|
},
|
|
647
|
-
|
|
646
|
+
signal: signal
|
|
648
647
|
});
|
|
649
648
|
|
|
650
649
|
case 9:
|
|
@@ -710,18 +709,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
710
709
|
|
|
711
710
|
_proto.uploadFileInCloud = /*#__PURE__*/function () {
|
|
712
711
|
var _uploadFileInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10(_ref12) {
|
|
713
|
-
var file, name, folderId,
|
|
712
|
+
var file, name, folderId, encryptProgress, uploadProgress, signal, fileId;
|
|
714
713
|
return _regeneratorRuntime.wrap(function _callee10$(_context10) {
|
|
715
714
|
while (1) {
|
|
716
715
|
switch (_context10.prev = _context10.next) {
|
|
717
716
|
case 0:
|
|
718
|
-
file = _ref12.file, name = _ref12.name, folderId = _ref12.folderId,
|
|
717
|
+
file = _ref12.file, name = _ref12.name, folderId = _ref12.folderId, encryptProgress = _ref12.encryptProgress, uploadProgress = _ref12.uploadProgress, signal = _ref12.signal;
|
|
719
718
|
_context10.next = 3;
|
|
720
719
|
return this.uploadFile({
|
|
721
720
|
file: file,
|
|
722
721
|
encryptProgress: encryptProgress,
|
|
723
722
|
uploadProgress: uploadProgress,
|
|
724
|
-
|
|
723
|
+
signal: signal
|
|
725
724
|
});
|
|
726
725
|
|
|
727
726
|
case 3:
|
|
@@ -1774,38 +1773,136 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1774
1773
|
return updateFolder;
|
|
1775
1774
|
}();
|
|
1776
1775
|
|
|
1777
|
-
_proto.
|
|
1778
|
-
var
|
|
1779
|
-
var
|
|
1776
|
+
_proto.updateAppNotifications = /*#__PURE__*/function () {
|
|
1777
|
+
var _updateAppNotifications = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27(notifications) {
|
|
1778
|
+
var _yield$this$client$mu8, updateAppNotifications;
|
|
1779
|
+
|
|
1780
1780
|
return _regeneratorRuntime.wrap(function _callee27$(_context27) {
|
|
1781
1781
|
while (1) {
|
|
1782
1782
|
switch (_context27.prev = _context27.next) {
|
|
1783
1783
|
case 0:
|
|
1784
1784
|
_context27.next = 2;
|
|
1785
|
+
return this.client.mutation({
|
|
1786
|
+
updateAppNotifications: [notifications, {
|
|
1787
|
+
enableAll: true,
|
|
1788
|
+
mail: true,
|
|
1789
|
+
cloud: true,
|
|
1790
|
+
disableAllUntil: true
|
|
1791
|
+
}]
|
|
1792
|
+
});
|
|
1793
|
+
|
|
1794
|
+
case 2:
|
|
1795
|
+
_yield$this$client$mu8 = _context27.sent;
|
|
1796
|
+
updateAppNotifications = _yield$this$client$mu8.updateAppNotifications;
|
|
1797
|
+
|
|
1798
|
+
if (updateAppNotifications) {
|
|
1799
|
+
_context27.next = 6;
|
|
1800
|
+
break;
|
|
1801
|
+
}
|
|
1802
|
+
|
|
1803
|
+
return _context27.abrupt("return", null);
|
|
1804
|
+
|
|
1805
|
+
case 6:
|
|
1806
|
+
return _context27.abrupt("return", _objectSpread(_objectSpread({}, updateAppNotifications), {}, {
|
|
1807
|
+
disableAllUntil: updateAppNotifications.disableAllUntil ? new Date(updateAppNotifications.disableAllUntil) : null
|
|
1808
|
+
}));
|
|
1809
|
+
|
|
1810
|
+
case 7:
|
|
1811
|
+
case "end":
|
|
1812
|
+
return _context27.stop();
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
}, _callee27, this);
|
|
1816
|
+
}));
|
|
1817
|
+
|
|
1818
|
+
function updateAppNotifications(_x27) {
|
|
1819
|
+
return _updateAppNotifications.apply(this, arguments);
|
|
1820
|
+
}
|
|
1821
|
+
|
|
1822
|
+
return updateAppNotifications;
|
|
1823
|
+
}();
|
|
1824
|
+
|
|
1825
|
+
_proto.appNotifications = /*#__PURE__*/function () {
|
|
1826
|
+
var _appNotifications = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee28() {
|
|
1827
|
+
var _yield$this$client$qu12, appNotifications;
|
|
1828
|
+
|
|
1829
|
+
return _regeneratorRuntime.wrap(function _callee28$(_context28) {
|
|
1830
|
+
while (1) {
|
|
1831
|
+
switch (_context28.prev = _context28.next) {
|
|
1832
|
+
case 0:
|
|
1833
|
+
_context28.next = 2;
|
|
1834
|
+
return this.client.query({
|
|
1835
|
+
appNotifications: {
|
|
1836
|
+
enableAll: true,
|
|
1837
|
+
mail: true,
|
|
1838
|
+
cloud: true,
|
|
1839
|
+
disableAllUntil: true
|
|
1840
|
+
}
|
|
1841
|
+
});
|
|
1842
|
+
|
|
1843
|
+
case 2:
|
|
1844
|
+
_yield$this$client$qu12 = _context28.sent;
|
|
1845
|
+
appNotifications = _yield$this$client$qu12.appNotifications;
|
|
1846
|
+
|
|
1847
|
+
if (appNotifications) {
|
|
1848
|
+
_context28.next = 6;
|
|
1849
|
+
break;
|
|
1850
|
+
}
|
|
1851
|
+
|
|
1852
|
+
return _context28.abrupt("return", null);
|
|
1853
|
+
|
|
1854
|
+
case 6:
|
|
1855
|
+
return _context28.abrupt("return", _objectSpread(_objectSpread({}, appNotifications), {}, {
|
|
1856
|
+
disableAllUntil: appNotifications.disableAllUntil ? new Date(appNotifications.disableAllUntil) : null
|
|
1857
|
+
}));
|
|
1858
|
+
|
|
1859
|
+
case 7:
|
|
1860
|
+
case "end":
|
|
1861
|
+
return _context28.stop();
|
|
1862
|
+
}
|
|
1863
|
+
}
|
|
1864
|
+
}, _callee28, this);
|
|
1865
|
+
}));
|
|
1866
|
+
|
|
1867
|
+
function appNotifications() {
|
|
1868
|
+
return _appNotifications.apply(this, arguments);
|
|
1869
|
+
}
|
|
1870
|
+
|
|
1871
|
+
return appNotifications;
|
|
1872
|
+
}();
|
|
1873
|
+
|
|
1874
|
+
_proto.createMail = /*#__PURE__*/function () {
|
|
1875
|
+
var _createMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee29(data, customMessage) {
|
|
1876
|
+
var mail;
|
|
1877
|
+
return _regeneratorRuntime.wrap(function _callee29$(_context29) {
|
|
1878
|
+
while (1) {
|
|
1879
|
+
switch (_context29.prev = _context29.next) {
|
|
1880
|
+
case 0:
|
|
1881
|
+
_context29.next = 2;
|
|
1785
1882
|
return this.createDraftMail(data);
|
|
1786
1883
|
|
|
1787
1884
|
case 2:
|
|
1788
|
-
mail =
|
|
1885
|
+
mail = _context29.sent;
|
|
1789
1886
|
|
|
1790
1887
|
if (mail) {
|
|
1791
|
-
|
|
1888
|
+
_context29.next = 5;
|
|
1792
1889
|
break;
|
|
1793
1890
|
}
|
|
1794
1891
|
|
|
1795
|
-
return
|
|
1892
|
+
return _context29.abrupt("return", false);
|
|
1796
1893
|
|
|
1797
1894
|
case 5:
|
|
1798
|
-
return
|
|
1895
|
+
return _context29.abrupt("return", this.sendDraftMail(mail.mailIntegrityId, customMessage));
|
|
1799
1896
|
|
|
1800
1897
|
case 6:
|
|
1801
1898
|
case "end":
|
|
1802
|
-
return
|
|
1899
|
+
return _context29.stop();
|
|
1803
1900
|
}
|
|
1804
1901
|
}
|
|
1805
|
-
},
|
|
1902
|
+
}, _callee29, this);
|
|
1806
1903
|
}));
|
|
1807
1904
|
|
|
1808
|
-
function createMail(
|
|
1905
|
+
function createMail(_x28, _x29) {
|
|
1809
1906
|
return _createMail.apply(this, arguments);
|
|
1810
1907
|
}
|
|
1811
1908
|
|
|
@@ -1813,14 +1910,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1813
1910
|
}();
|
|
1814
1911
|
|
|
1815
1912
|
_proto.waitingReceivedMails = /*#__PURE__*/function () {
|
|
1816
|
-
var _waitingReceivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
1817
|
-
var _yield$this$client$
|
|
1913
|
+
var _waitingReceivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee30() {
|
|
1914
|
+
var _yield$this$client$qu13, user;
|
|
1818
1915
|
|
|
1819
|
-
return _regeneratorRuntime.wrap(function
|
|
1916
|
+
return _regeneratorRuntime.wrap(function _callee30$(_context30) {
|
|
1820
1917
|
while (1) {
|
|
1821
|
-
switch (
|
|
1918
|
+
switch (_context30.prev = _context30.next) {
|
|
1822
1919
|
case 0:
|
|
1823
|
-
|
|
1920
|
+
_context30.next = 2;
|
|
1824
1921
|
return this.client.query({
|
|
1825
1922
|
user: [{}, {
|
|
1826
1923
|
waitingReceivedMails: {
|
|
@@ -1848,18 +1945,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1848
1945
|
});
|
|
1849
1946
|
|
|
1850
1947
|
case 2:
|
|
1851
|
-
_yield$this$client$
|
|
1852
|
-
user = _yield$this$client$
|
|
1948
|
+
_yield$this$client$qu13 = _context30.sent;
|
|
1949
|
+
user = _yield$this$client$qu13.user;
|
|
1853
1950
|
|
|
1854
1951
|
if (user) {
|
|
1855
|
-
|
|
1952
|
+
_context30.next = 6;
|
|
1856
1953
|
break;
|
|
1857
1954
|
}
|
|
1858
1955
|
|
|
1859
1956
|
throw new Error("Can't get waiting received mails");
|
|
1860
1957
|
|
|
1861
1958
|
case 6:
|
|
1862
|
-
return
|
|
1959
|
+
return _context30.abrupt("return", user.waitingReceivedMails.map(function (m) {
|
|
1863
1960
|
return _objectSpread(_objectSpread({
|
|
1864
1961
|
id: generate()
|
|
1865
1962
|
}, m), {}, {
|
|
@@ -1869,10 +1966,10 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1869
1966
|
|
|
1870
1967
|
case 7:
|
|
1871
1968
|
case "end":
|
|
1872
|
-
return
|
|
1969
|
+
return _context30.stop();
|
|
1873
1970
|
}
|
|
1874
1971
|
}
|
|
1875
|
-
},
|
|
1972
|
+
}, _callee30, this);
|
|
1876
1973
|
}));
|
|
1877
1974
|
|
|
1878
1975
|
function waitingReceivedMails() {
|
|
@@ -1883,25 +1980,25 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1883
1980
|
}();
|
|
1884
1981
|
|
|
1885
1982
|
_proto.updateDraftMail = /*#__PURE__*/function () {
|
|
1886
|
-
var _updateDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
1887
|
-
var body, subject, files, recipientsIds, replyTo, drafts, draft, hashKey, hash, senderFiles, _iterator13, _step13, f, file, _yield$this$client$
|
|
1983
|
+
var _updateDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee31(draftId, _ref24) {
|
|
1984
|
+
var body, subject, files, recipientsIds, replyTo, drafts, draft, hashKey, hash, senderFiles, _iterator13, _step13, f, file, _yield$this$client$mu9, updateDraftMail;
|
|
1888
1985
|
|
|
1889
|
-
return _regeneratorRuntime.wrap(function
|
|
1986
|
+
return _regeneratorRuntime.wrap(function _callee31$(_context31) {
|
|
1890
1987
|
while (1) {
|
|
1891
|
-
switch (
|
|
1988
|
+
switch (_context31.prev = _context31.next) {
|
|
1892
1989
|
case 0:
|
|
1893
1990
|
body = _ref24.body, subject = _ref24.subject, files = _ref24.files, recipientsIds = _ref24.recipientsIds, replyTo = _ref24.replyTo;
|
|
1894
|
-
|
|
1991
|
+
_context31.next = 3;
|
|
1895
1992
|
return this.draftMails();
|
|
1896
1993
|
|
|
1897
1994
|
case 3:
|
|
1898
|
-
drafts =
|
|
1995
|
+
drafts = _context31.sent;
|
|
1899
1996
|
draft = drafts.find(function (d) {
|
|
1900
1997
|
return d.mailIntegrityId === draftId;
|
|
1901
1998
|
});
|
|
1902
1999
|
|
|
1903
2000
|
if (draft) {
|
|
1904
|
-
|
|
2001
|
+
_context31.next = 7;
|
|
1905
2002
|
break;
|
|
1906
2003
|
}
|
|
1907
2004
|
|
|
@@ -1922,7 +2019,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1922
2019
|
senderFiles = new Array();
|
|
1923
2020
|
|
|
1924
2021
|
if (!files) {
|
|
1925
|
-
|
|
2022
|
+
_context31.next = 27;
|
|
1926
2023
|
break;
|
|
1927
2024
|
}
|
|
1928
2025
|
|
|
@@ -1930,7 +2027,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1930
2027
|
|
|
1931
2028
|
case 13:
|
|
1932
2029
|
if ((_step13 = _iterator13()).done) {
|
|
1933
|
-
|
|
2030
|
+
_context31.next = 27;
|
|
1934
2031
|
break;
|
|
1935
2032
|
}
|
|
1936
2033
|
|
|
@@ -1938,11 +2035,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1938
2035
|
file = filesCache.get(f.id);
|
|
1939
2036
|
|
|
1940
2037
|
if (file) {
|
|
1941
|
-
|
|
2038
|
+
_context31.next = 22;
|
|
1942
2039
|
break;
|
|
1943
2040
|
}
|
|
1944
2041
|
|
|
1945
|
-
|
|
2042
|
+
_context31.next = 19;
|
|
1946
2043
|
return this.file({
|
|
1947
2044
|
id: f.id
|
|
1948
2045
|
});
|
|
@@ -1951,7 +2048,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1951
2048
|
file = filesCache.get(f.id);
|
|
1952
2049
|
|
|
1953
2050
|
if (file) {
|
|
1954
|
-
|
|
2051
|
+
_context31.next = 22;
|
|
1955
2052
|
break;
|
|
1956
2053
|
}
|
|
1957
2054
|
|
|
@@ -1959,11 +2056,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1959
2056
|
|
|
1960
2057
|
case 22:
|
|
1961
2058
|
if (file.user) {
|
|
1962
|
-
|
|
2059
|
+
_context31.next = 24;
|
|
1963
2060
|
break;
|
|
1964
2061
|
}
|
|
1965
2062
|
|
|
1966
|
-
return
|
|
2063
|
+
return _context31.abrupt("continue", 25);
|
|
1967
2064
|
|
|
1968
2065
|
case 24:
|
|
1969
2066
|
senderFiles.push({
|
|
@@ -1973,11 +2070,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1973
2070
|
});
|
|
1974
2071
|
|
|
1975
2072
|
case 25:
|
|
1976
|
-
|
|
2073
|
+
_context31.next = 13;
|
|
1977
2074
|
break;
|
|
1978
2075
|
|
|
1979
2076
|
case 27:
|
|
1980
|
-
|
|
2077
|
+
_context31.next = 29;
|
|
1981
2078
|
return this.client.mutation({
|
|
1982
2079
|
updateDraftMail: [{
|
|
1983
2080
|
draftId: draftId,
|
|
@@ -1992,28 +2089,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
1992
2089
|
});
|
|
1993
2090
|
|
|
1994
2091
|
case 29:
|
|
1995
|
-
_yield$this$client$
|
|
1996
|
-
updateDraftMail = _yield$this$client$
|
|
2092
|
+
_yield$this$client$mu9 = _context31.sent;
|
|
2093
|
+
updateDraftMail = _yield$this$client$mu9.updateDraftMail;
|
|
1997
2094
|
|
|
1998
2095
|
if (updateDraftMail) {
|
|
1999
|
-
|
|
2096
|
+
_context31.next = 33;
|
|
2000
2097
|
break;
|
|
2001
2098
|
}
|
|
2002
2099
|
|
|
2003
|
-
return
|
|
2100
|
+
return _context31.abrupt("return", null);
|
|
2004
2101
|
|
|
2005
2102
|
case 33:
|
|
2006
|
-
return
|
|
2103
|
+
return _context31.abrupt("return", convertInternalMailToExternal(updateDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
|
|
2007
2104
|
|
|
2008
2105
|
case 34:
|
|
2009
2106
|
case "end":
|
|
2010
|
-
return
|
|
2107
|
+
return _context31.stop();
|
|
2011
2108
|
}
|
|
2012
2109
|
}
|
|
2013
|
-
},
|
|
2110
|
+
}, _callee31, this);
|
|
2014
2111
|
}));
|
|
2015
2112
|
|
|
2016
|
-
function updateDraftMail(
|
|
2113
|
+
function updateDraftMail(_x30, _x31) {
|
|
2017
2114
|
return _updateDraftMail.apply(this, arguments);
|
|
2018
2115
|
}
|
|
2019
2116
|
|
|
@@ -2021,14 +2118,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2021
2118
|
}();
|
|
2022
2119
|
|
|
2023
2120
|
_proto.deleteDraftMail = /*#__PURE__*/function () {
|
|
2024
|
-
var _deleteDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2025
|
-
var _yield$this$client$
|
|
2121
|
+
var _deleteDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee32(draftId) {
|
|
2122
|
+
var _yield$this$client$mu10, deleteDraftMail;
|
|
2026
2123
|
|
|
2027
|
-
return _regeneratorRuntime.wrap(function
|
|
2124
|
+
return _regeneratorRuntime.wrap(function _callee32$(_context32) {
|
|
2028
2125
|
while (1) {
|
|
2029
|
-
switch (
|
|
2126
|
+
switch (_context32.prev = _context32.next) {
|
|
2030
2127
|
case 0:
|
|
2031
|
-
|
|
2128
|
+
_context32.next = 2;
|
|
2032
2129
|
return this.client.mutation({
|
|
2033
2130
|
deleteDraftMail: [{
|
|
2034
2131
|
draftId: draftId
|
|
@@ -2036,19 +2133,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2036
2133
|
});
|
|
2037
2134
|
|
|
2038
2135
|
case 2:
|
|
2039
|
-
_yield$this$client$
|
|
2040
|
-
deleteDraftMail = _yield$this$client$
|
|
2041
|
-
return
|
|
2136
|
+
_yield$this$client$mu10 = _context32.sent;
|
|
2137
|
+
deleteDraftMail = _yield$this$client$mu10.deleteDraftMail;
|
|
2138
|
+
return _context32.abrupt("return", deleteDraftMail != null ? deleteDraftMail : false);
|
|
2042
2139
|
|
|
2043
2140
|
case 5:
|
|
2044
2141
|
case "end":
|
|
2045
|
-
return
|
|
2142
|
+
return _context32.stop();
|
|
2046
2143
|
}
|
|
2047
2144
|
}
|
|
2048
|
-
},
|
|
2145
|
+
}, _callee32, this);
|
|
2049
2146
|
}));
|
|
2050
2147
|
|
|
2051
|
-
function deleteDraftMail(
|
|
2148
|
+
function deleteDraftMail(_x32) {
|
|
2052
2149
|
return _deleteDraftMail.apply(this, arguments);
|
|
2053
2150
|
}
|
|
2054
2151
|
|
|
@@ -2056,15 +2153,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2056
2153
|
}();
|
|
2057
2154
|
|
|
2058
2155
|
_proto.deleteVFileSharing = /*#__PURE__*/function () {
|
|
2059
|
-
var _deleteVFileSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2060
|
-
var vFileId, userId, _yield$this$client$
|
|
2156
|
+
var _deleteVFileSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee33(_ref25) {
|
|
2157
|
+
var vFileId, userId, _yield$this$client$mu11, deleteVFileSharing;
|
|
2061
2158
|
|
|
2062
|
-
return _regeneratorRuntime.wrap(function
|
|
2159
|
+
return _regeneratorRuntime.wrap(function _callee33$(_context33) {
|
|
2063
2160
|
while (1) {
|
|
2064
|
-
switch (
|
|
2161
|
+
switch (_context33.prev = _context33.next) {
|
|
2065
2162
|
case 0:
|
|
2066
2163
|
vFileId = _ref25.vFileId, userId = _ref25.userId;
|
|
2067
|
-
|
|
2164
|
+
_context33.next = 3;
|
|
2068
2165
|
return this.client.mutation({
|
|
2069
2166
|
deleteVFileSharing: [{
|
|
2070
2167
|
vFileId: vFileId,
|
|
@@ -2073,19 +2170,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2073
2170
|
});
|
|
2074
2171
|
|
|
2075
2172
|
case 3:
|
|
2076
|
-
_yield$this$client$
|
|
2077
|
-
deleteVFileSharing = _yield$this$client$
|
|
2078
|
-
return
|
|
2173
|
+
_yield$this$client$mu11 = _context33.sent;
|
|
2174
|
+
deleteVFileSharing = _yield$this$client$mu11.deleteVFileSharing;
|
|
2175
|
+
return _context33.abrupt("return", deleteVFileSharing);
|
|
2079
2176
|
|
|
2080
2177
|
case 6:
|
|
2081
2178
|
case "end":
|
|
2082
|
-
return
|
|
2179
|
+
return _context33.stop();
|
|
2083
2180
|
}
|
|
2084
2181
|
}
|
|
2085
|
-
},
|
|
2182
|
+
}, _callee33, this);
|
|
2086
2183
|
}));
|
|
2087
2184
|
|
|
2088
|
-
function deleteVFileSharing(
|
|
2185
|
+
function deleteVFileSharing(_x33) {
|
|
2089
2186
|
return _deleteVFileSharing.apply(this, arguments);
|
|
2090
2187
|
}
|
|
2091
2188
|
|
|
@@ -2093,15 +2190,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2093
2190
|
}();
|
|
2094
2191
|
|
|
2095
2192
|
_proto.deleteFolderSharing = /*#__PURE__*/function () {
|
|
2096
|
-
var _deleteFolderSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2097
|
-
var folderId, userId, _yield$this$client$
|
|
2193
|
+
var _deleteFolderSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee34(_ref26) {
|
|
2194
|
+
var folderId, userId, _yield$this$client$mu12, deleteFolderSharing;
|
|
2098
2195
|
|
|
2099
|
-
return _regeneratorRuntime.wrap(function
|
|
2196
|
+
return _regeneratorRuntime.wrap(function _callee34$(_context34) {
|
|
2100
2197
|
while (1) {
|
|
2101
|
-
switch (
|
|
2198
|
+
switch (_context34.prev = _context34.next) {
|
|
2102
2199
|
case 0:
|
|
2103
2200
|
folderId = _ref26.folderId, userId = _ref26.userId;
|
|
2104
|
-
|
|
2201
|
+
_context34.next = 3;
|
|
2105
2202
|
return this.client.mutation({
|
|
2106
2203
|
deleteFolderSharing: [{
|
|
2107
2204
|
folderId: folderId,
|
|
@@ -2110,19 +2207,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2110
2207
|
});
|
|
2111
2208
|
|
|
2112
2209
|
case 3:
|
|
2113
|
-
_yield$this$client$
|
|
2114
|
-
deleteFolderSharing = _yield$this$client$
|
|
2115
|
-
return
|
|
2210
|
+
_yield$this$client$mu12 = _context34.sent;
|
|
2211
|
+
deleteFolderSharing = _yield$this$client$mu12.deleteFolderSharing;
|
|
2212
|
+
return _context34.abrupt("return", deleteFolderSharing);
|
|
2116
2213
|
|
|
2117
2214
|
case 6:
|
|
2118
2215
|
case "end":
|
|
2119
|
-
return
|
|
2216
|
+
return _context34.stop();
|
|
2120
2217
|
}
|
|
2121
2218
|
}
|
|
2122
|
-
},
|
|
2219
|
+
}, _callee34, this);
|
|
2123
2220
|
}));
|
|
2124
2221
|
|
|
2125
|
-
function deleteFolderSharing(
|
|
2222
|
+
function deleteFolderSharing(_x34) {
|
|
2126
2223
|
return _deleteFolderSharing.apply(this, arguments);
|
|
2127
2224
|
}
|
|
2128
2225
|
|
|
@@ -2130,22 +2227,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2130
2227
|
}();
|
|
2131
2228
|
|
|
2132
2229
|
_proto.duplicateVFile = /*#__PURE__*/function () {
|
|
2133
|
-
var _duplicateVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2134
|
-
var fileId, folderId, customName, file, _yield$this$client$
|
|
2230
|
+
var _duplicateVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee35(_ref27) {
|
|
2231
|
+
var fileId, folderId, customName, file, _yield$this$client$mu13, duplicateVFile;
|
|
2135
2232
|
|
|
2136
|
-
return _regeneratorRuntime.wrap(function
|
|
2233
|
+
return _regeneratorRuntime.wrap(function _callee35$(_context35) {
|
|
2137
2234
|
while (1) {
|
|
2138
|
-
switch (
|
|
2235
|
+
switch (_context35.prev = _context35.next) {
|
|
2139
2236
|
case 0:
|
|
2140
2237
|
fileId = _ref27.fileId, folderId = _ref27.folderId, customName = _ref27.customName;
|
|
2141
2238
|
file = vFilesCache.get(fileId);
|
|
2142
2239
|
|
|
2143
2240
|
if (file) {
|
|
2144
|
-
|
|
2241
|
+
_context35.next = 8;
|
|
2145
2242
|
break;
|
|
2146
2243
|
}
|
|
2147
2244
|
|
|
2148
|
-
|
|
2245
|
+
_context35.next = 5;
|
|
2149
2246
|
return this.vFile({
|
|
2150
2247
|
id: fileId
|
|
2151
2248
|
});
|
|
@@ -2154,7 +2251,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2154
2251
|
file = vFilesCache.get(fileId);
|
|
2155
2252
|
|
|
2156
2253
|
if (file) {
|
|
2157
|
-
|
|
2254
|
+
_context35.next = 8;
|
|
2158
2255
|
break;
|
|
2159
2256
|
}
|
|
2160
2257
|
|
|
@@ -2162,24 +2259,24 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2162
2259
|
|
|
2163
2260
|
case 8:
|
|
2164
2261
|
if (!customName) {
|
|
2165
|
-
|
|
2262
|
+
_context35.next = 14;
|
|
2166
2263
|
break;
|
|
2167
2264
|
}
|
|
2168
2265
|
|
|
2169
|
-
|
|
2266
|
+
_context35.next = 11;
|
|
2170
2267
|
return encryptName(customName, file.userApp.nameKey);
|
|
2171
2268
|
|
|
2172
2269
|
case 11:
|
|
2173
|
-
|
|
2174
|
-
|
|
2270
|
+
_context35.t0 = _context35.sent;
|
|
2271
|
+
_context35.next = 15;
|
|
2175
2272
|
break;
|
|
2176
2273
|
|
|
2177
2274
|
case 14:
|
|
2178
|
-
|
|
2275
|
+
_context35.t0 = null;
|
|
2179
2276
|
|
|
2180
2277
|
case 15:
|
|
2181
|
-
customName =
|
|
2182
|
-
|
|
2278
|
+
customName = _context35.t0;
|
|
2279
|
+
_context35.next = 18;
|
|
2183
2280
|
return this.client.mutation({
|
|
2184
2281
|
duplicateVFile: [{
|
|
2185
2282
|
fileId: fileId,
|
|
@@ -2189,19 +2286,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2189
2286
|
});
|
|
2190
2287
|
|
|
2191
2288
|
case 18:
|
|
2192
|
-
_yield$this$client$
|
|
2193
|
-
duplicateVFile = _yield$this$client$
|
|
2194
|
-
return
|
|
2289
|
+
_yield$this$client$mu13 = _context35.sent;
|
|
2290
|
+
duplicateVFile = _yield$this$client$mu13.duplicateVFile;
|
|
2291
|
+
return _context35.abrupt("return", duplicateVFile);
|
|
2195
2292
|
|
|
2196
2293
|
case 21:
|
|
2197
2294
|
case "end":
|
|
2198
|
-
return
|
|
2295
|
+
return _context35.stop();
|
|
2199
2296
|
}
|
|
2200
2297
|
}
|
|
2201
|
-
},
|
|
2298
|
+
}, _callee35, this);
|
|
2202
2299
|
}));
|
|
2203
2300
|
|
|
2204
|
-
function duplicateVFile(
|
|
2301
|
+
function duplicateVFile(_x35) {
|
|
2205
2302
|
return _duplicateVFile.apply(this, arguments);
|
|
2206
2303
|
}
|
|
2207
2304
|
|
|
@@ -2209,15 +2306,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2209
2306
|
}();
|
|
2210
2307
|
|
|
2211
2308
|
_proto.deleteFolderCloudTrash = /*#__PURE__*/function () {
|
|
2212
|
-
var _deleteFolderCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2213
|
-
var ids, _yield$this$client$
|
|
2309
|
+
var _deleteFolderCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee36(_ref28) {
|
|
2310
|
+
var ids, _yield$this$client$mu14, deleteFolderCloudTrash;
|
|
2214
2311
|
|
|
2215
|
-
return _regeneratorRuntime.wrap(function
|
|
2312
|
+
return _regeneratorRuntime.wrap(function _callee36$(_context36) {
|
|
2216
2313
|
while (1) {
|
|
2217
|
-
switch (
|
|
2314
|
+
switch (_context36.prev = _context36.next) {
|
|
2218
2315
|
case 0:
|
|
2219
2316
|
ids = _ref28.ids;
|
|
2220
|
-
|
|
2317
|
+
_context36.next = 3;
|
|
2221
2318
|
return this.client.mutation({
|
|
2222
2319
|
deleteFolderCloudTrash: [{
|
|
2223
2320
|
ids: ids
|
|
@@ -2225,19 +2322,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2225
2322
|
});
|
|
2226
2323
|
|
|
2227
2324
|
case 3:
|
|
2228
|
-
_yield$this$client$
|
|
2229
|
-
deleteFolderCloudTrash = _yield$this$client$
|
|
2230
|
-
return
|
|
2325
|
+
_yield$this$client$mu14 = _context36.sent;
|
|
2326
|
+
deleteFolderCloudTrash = _yield$this$client$mu14.deleteFolderCloudTrash;
|
|
2327
|
+
return _context36.abrupt("return", deleteFolderCloudTrash != null ? deleteFolderCloudTrash : false);
|
|
2231
2328
|
|
|
2232
2329
|
case 6:
|
|
2233
2330
|
case "end":
|
|
2234
|
-
return
|
|
2331
|
+
return _context36.stop();
|
|
2235
2332
|
}
|
|
2236
2333
|
}
|
|
2237
|
-
},
|
|
2334
|
+
}, _callee36, this);
|
|
2238
2335
|
}));
|
|
2239
2336
|
|
|
2240
|
-
function deleteFolderCloudTrash(
|
|
2337
|
+
function deleteFolderCloudTrash(_x36) {
|
|
2241
2338
|
return _deleteFolderCloudTrash.apply(this, arguments);
|
|
2242
2339
|
}
|
|
2243
2340
|
|
|
@@ -2245,15 +2342,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2245
2342
|
}();
|
|
2246
2343
|
|
|
2247
2344
|
_proto.deleteVFileCloudTrash = /*#__PURE__*/function () {
|
|
2248
|
-
var _deleteVFileCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2249
|
-
var ids, _yield$this$client$
|
|
2345
|
+
var _deleteVFileCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee37(_ref29) {
|
|
2346
|
+
var ids, _yield$this$client$mu15, deleteVFileCloudTrash;
|
|
2250
2347
|
|
|
2251
|
-
return _regeneratorRuntime.wrap(function
|
|
2348
|
+
return _regeneratorRuntime.wrap(function _callee37$(_context37) {
|
|
2252
2349
|
while (1) {
|
|
2253
|
-
switch (
|
|
2350
|
+
switch (_context37.prev = _context37.next) {
|
|
2254
2351
|
case 0:
|
|
2255
2352
|
ids = _ref29.ids;
|
|
2256
|
-
|
|
2353
|
+
_context37.next = 3;
|
|
2257
2354
|
return this.client.mutation({
|
|
2258
2355
|
deleteVFileCloudTrash: [{
|
|
2259
2356
|
ids: ids
|
|
@@ -2261,19 +2358,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2261
2358
|
});
|
|
2262
2359
|
|
|
2263
2360
|
case 3:
|
|
2264
|
-
_yield$this$client$
|
|
2265
|
-
deleteVFileCloudTrash = _yield$this$client$
|
|
2266
|
-
return
|
|
2361
|
+
_yield$this$client$mu15 = _context37.sent;
|
|
2362
|
+
deleteVFileCloudTrash = _yield$this$client$mu15.deleteVFileCloudTrash;
|
|
2363
|
+
return _context37.abrupt("return", deleteVFileCloudTrash != null ? deleteVFileCloudTrash : false);
|
|
2267
2364
|
|
|
2268
2365
|
case 6:
|
|
2269
2366
|
case "end":
|
|
2270
|
-
return
|
|
2367
|
+
return _context37.stop();
|
|
2271
2368
|
}
|
|
2272
2369
|
}
|
|
2273
|
-
},
|
|
2370
|
+
}, _callee37, this);
|
|
2274
2371
|
}));
|
|
2275
2372
|
|
|
2276
|
-
function deleteVFileCloudTrash(
|
|
2373
|
+
function deleteVFileCloudTrash(_x37) {
|
|
2277
2374
|
return _deleteVFileCloudTrash.apply(this, arguments);
|
|
2278
2375
|
}
|
|
2279
2376
|
|
|
@@ -2281,15 +2378,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2281
2378
|
}();
|
|
2282
2379
|
|
|
2283
2380
|
_proto.deleteMailTrash = /*#__PURE__*/function () {
|
|
2284
|
-
var _deleteMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2285
|
-
var ids, _yield$this$client$
|
|
2381
|
+
var _deleteMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee38(_ref30) {
|
|
2382
|
+
var ids, _yield$this$client$mu16, deleteMailTrash;
|
|
2286
2383
|
|
|
2287
|
-
return _regeneratorRuntime.wrap(function
|
|
2384
|
+
return _regeneratorRuntime.wrap(function _callee38$(_context38) {
|
|
2288
2385
|
while (1) {
|
|
2289
|
-
switch (
|
|
2386
|
+
switch (_context38.prev = _context38.next) {
|
|
2290
2387
|
case 0:
|
|
2291
2388
|
ids = _ref30.ids;
|
|
2292
|
-
|
|
2389
|
+
_context38.next = 3;
|
|
2293
2390
|
return this.client.mutation({
|
|
2294
2391
|
deleteMailTrash: [{
|
|
2295
2392
|
ids: ids
|
|
@@ -2297,19 +2394,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2297
2394
|
});
|
|
2298
2395
|
|
|
2299
2396
|
case 3:
|
|
2300
|
-
_yield$this$client$
|
|
2301
|
-
deleteMailTrash = _yield$this$client$
|
|
2302
|
-
return
|
|
2397
|
+
_yield$this$client$mu16 = _context38.sent;
|
|
2398
|
+
deleteMailTrash = _yield$this$client$mu16.deleteMailTrash;
|
|
2399
|
+
return _context38.abrupt("return", deleteMailTrash);
|
|
2303
2400
|
|
|
2304
2401
|
case 6:
|
|
2305
2402
|
case "end":
|
|
2306
|
-
return
|
|
2403
|
+
return _context38.stop();
|
|
2307
2404
|
}
|
|
2308
2405
|
}
|
|
2309
|
-
},
|
|
2406
|
+
}, _callee38, this);
|
|
2310
2407
|
}));
|
|
2311
2408
|
|
|
2312
|
-
function deleteMailTrash(
|
|
2409
|
+
function deleteMailTrash(_x38) {
|
|
2313
2410
|
return _deleteMailTrash.apply(this, arguments);
|
|
2314
2411
|
}
|
|
2315
2412
|
|
|
@@ -2317,29 +2414,29 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2317
2414
|
}();
|
|
2318
2415
|
|
|
2319
2416
|
_proto.emptyMailTrash = /*#__PURE__*/function () {
|
|
2320
|
-
var _emptyMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2321
|
-
var _yield$this$client$
|
|
2417
|
+
var _emptyMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee39() {
|
|
2418
|
+
var _yield$this$client$mu17, emptyMailTrash;
|
|
2322
2419
|
|
|
2323
|
-
return _regeneratorRuntime.wrap(function
|
|
2420
|
+
return _regeneratorRuntime.wrap(function _callee39$(_context39) {
|
|
2324
2421
|
while (1) {
|
|
2325
|
-
switch (
|
|
2422
|
+
switch (_context39.prev = _context39.next) {
|
|
2326
2423
|
case 0:
|
|
2327
|
-
|
|
2424
|
+
_context39.next = 2;
|
|
2328
2425
|
return this.client.mutation({
|
|
2329
2426
|
emptyMailTrash: true
|
|
2330
2427
|
});
|
|
2331
2428
|
|
|
2332
2429
|
case 2:
|
|
2333
|
-
_yield$this$client$
|
|
2334
|
-
emptyMailTrash = _yield$this$client$
|
|
2335
|
-
return
|
|
2430
|
+
_yield$this$client$mu17 = _context39.sent;
|
|
2431
|
+
emptyMailTrash = _yield$this$client$mu17.emptyMailTrash;
|
|
2432
|
+
return _context39.abrupt("return", emptyMailTrash != null ? emptyMailTrash : false);
|
|
2336
2433
|
|
|
2337
2434
|
case 5:
|
|
2338
2435
|
case "end":
|
|
2339
|
-
return
|
|
2436
|
+
return _context39.stop();
|
|
2340
2437
|
}
|
|
2341
2438
|
}
|
|
2342
|
-
},
|
|
2439
|
+
}, _callee39, this);
|
|
2343
2440
|
}));
|
|
2344
2441
|
|
|
2345
2442
|
function emptyMailTrash() {
|
|
@@ -2350,29 +2447,29 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2350
2447
|
}();
|
|
2351
2448
|
|
|
2352
2449
|
_proto.emptyCloudTrash = /*#__PURE__*/function () {
|
|
2353
|
-
var _emptyCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2354
|
-
var _yield$this$client$
|
|
2450
|
+
var _emptyCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee40() {
|
|
2451
|
+
var _yield$this$client$mu18, emptyCloudTrash;
|
|
2355
2452
|
|
|
2356
|
-
return _regeneratorRuntime.wrap(function
|
|
2453
|
+
return _regeneratorRuntime.wrap(function _callee40$(_context40) {
|
|
2357
2454
|
while (1) {
|
|
2358
|
-
switch (
|
|
2455
|
+
switch (_context40.prev = _context40.next) {
|
|
2359
2456
|
case 0:
|
|
2360
|
-
|
|
2457
|
+
_context40.next = 2;
|
|
2361
2458
|
return this.client.mutation({
|
|
2362
2459
|
emptyCloudTrash: true
|
|
2363
2460
|
});
|
|
2364
2461
|
|
|
2365
2462
|
case 2:
|
|
2366
|
-
_yield$this$client$
|
|
2367
|
-
emptyCloudTrash = _yield$this$client$
|
|
2368
|
-
return
|
|
2463
|
+
_yield$this$client$mu18 = _context40.sent;
|
|
2464
|
+
emptyCloudTrash = _yield$this$client$mu18.emptyCloudTrash;
|
|
2465
|
+
return _context40.abrupt("return", emptyCloudTrash != null ? emptyCloudTrash : false);
|
|
2369
2466
|
|
|
2370
2467
|
case 5:
|
|
2371
2468
|
case "end":
|
|
2372
|
-
return
|
|
2469
|
+
return _context40.stop();
|
|
2373
2470
|
}
|
|
2374
2471
|
}
|
|
2375
|
-
},
|
|
2472
|
+
}, _callee40, this);
|
|
2376
2473
|
}));
|
|
2377
2474
|
|
|
2378
2475
|
function emptyCloudTrash() {
|
|
@@ -2383,15 +2480,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2383
2480
|
}();
|
|
2384
2481
|
|
|
2385
2482
|
_proto.recoverFile = /*#__PURE__*/function () {
|
|
2386
|
-
var _recoverFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2387
|
-
var fileId, _yield$this$client$
|
|
2483
|
+
var _recoverFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee41(_ref31) {
|
|
2484
|
+
var fileId, _yield$this$client$mu19, recoverFile;
|
|
2388
2485
|
|
|
2389
|
-
return _regeneratorRuntime.wrap(function
|
|
2486
|
+
return _regeneratorRuntime.wrap(function _callee41$(_context41) {
|
|
2390
2487
|
while (1) {
|
|
2391
|
-
switch (
|
|
2488
|
+
switch (_context41.prev = _context41.next) {
|
|
2392
2489
|
case 0:
|
|
2393
2490
|
fileId = _ref31.fileId;
|
|
2394
|
-
|
|
2491
|
+
_context41.next = 3;
|
|
2395
2492
|
return this.client.mutation({
|
|
2396
2493
|
recoverFile: [{
|
|
2397
2494
|
fileId: fileId
|
|
@@ -2399,19 +2496,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2399
2496
|
});
|
|
2400
2497
|
|
|
2401
2498
|
case 3:
|
|
2402
|
-
_yield$this$client$
|
|
2403
|
-
recoverFile = _yield$this$client$
|
|
2404
|
-
return
|
|
2499
|
+
_yield$this$client$mu19 = _context41.sent;
|
|
2500
|
+
recoverFile = _yield$this$client$mu19.recoverFile;
|
|
2501
|
+
return _context41.abrupt("return", recoverFile);
|
|
2405
2502
|
|
|
2406
2503
|
case 6:
|
|
2407
2504
|
case "end":
|
|
2408
|
-
return
|
|
2505
|
+
return _context41.stop();
|
|
2409
2506
|
}
|
|
2410
2507
|
}
|
|
2411
|
-
},
|
|
2508
|
+
}, _callee41, this);
|
|
2412
2509
|
}));
|
|
2413
2510
|
|
|
2414
|
-
function recoverFile(
|
|
2511
|
+
function recoverFile(_x39) {
|
|
2415
2512
|
return _recoverFile.apply(this, arguments);
|
|
2416
2513
|
}
|
|
2417
2514
|
|
|
@@ -2419,15 +2516,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2419
2516
|
}();
|
|
2420
2517
|
|
|
2421
2518
|
_proto.recoverFolder = /*#__PURE__*/function () {
|
|
2422
|
-
var _recoverFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2423
|
-
var id, _yield$this$client$
|
|
2519
|
+
var _recoverFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee42(_ref32) {
|
|
2520
|
+
var id, _yield$this$client$mu20, recoverFolder;
|
|
2424
2521
|
|
|
2425
|
-
return _regeneratorRuntime.wrap(function
|
|
2522
|
+
return _regeneratorRuntime.wrap(function _callee42$(_context42) {
|
|
2426
2523
|
while (1) {
|
|
2427
|
-
switch (
|
|
2524
|
+
switch (_context42.prev = _context42.next) {
|
|
2428
2525
|
case 0:
|
|
2429
2526
|
id = _ref32.id;
|
|
2430
|
-
|
|
2527
|
+
_context42.next = 3;
|
|
2431
2528
|
return this.client.mutation({
|
|
2432
2529
|
recoverFolder: [{
|
|
2433
2530
|
id: id
|
|
@@ -2435,19 +2532,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2435
2532
|
});
|
|
2436
2533
|
|
|
2437
2534
|
case 3:
|
|
2438
|
-
_yield$this$client$
|
|
2439
|
-
recoverFolder = _yield$this$client$
|
|
2440
|
-
return
|
|
2535
|
+
_yield$this$client$mu20 = _context42.sent;
|
|
2536
|
+
recoverFolder = _yield$this$client$mu20.recoverFolder;
|
|
2537
|
+
return _context42.abrupt("return", recoverFolder != null ? recoverFolder : false);
|
|
2441
2538
|
|
|
2442
2539
|
case 6:
|
|
2443
2540
|
case "end":
|
|
2444
|
-
return
|
|
2541
|
+
return _context42.stop();
|
|
2445
2542
|
}
|
|
2446
2543
|
}
|
|
2447
|
-
},
|
|
2544
|
+
}, _callee42, this);
|
|
2448
2545
|
}));
|
|
2449
2546
|
|
|
2450
|
-
function recoverFolder(
|
|
2547
|
+
function recoverFolder(_x40) {
|
|
2451
2548
|
return _recoverFolder.apply(this, arguments);
|
|
2452
2549
|
}
|
|
2453
2550
|
|
|
@@ -2455,15 +2552,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2455
2552
|
}();
|
|
2456
2553
|
|
|
2457
2554
|
_proto.recoverMail = /*#__PURE__*/function () {
|
|
2458
|
-
var _recoverMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2459
|
-
var mailId, _yield$this$client$
|
|
2555
|
+
var _recoverMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee43(_ref33) {
|
|
2556
|
+
var mailId, _yield$this$client$mu21, recoverMail;
|
|
2460
2557
|
|
|
2461
|
-
return _regeneratorRuntime.wrap(function
|
|
2558
|
+
return _regeneratorRuntime.wrap(function _callee43$(_context43) {
|
|
2462
2559
|
while (1) {
|
|
2463
|
-
switch (
|
|
2560
|
+
switch (_context43.prev = _context43.next) {
|
|
2464
2561
|
case 0:
|
|
2465
2562
|
mailId = _ref33.mailId;
|
|
2466
|
-
|
|
2563
|
+
_context43.next = 3;
|
|
2467
2564
|
return this.client.mutation({
|
|
2468
2565
|
recoverMail: [{
|
|
2469
2566
|
mailId: mailId
|
|
@@ -2471,19 +2568,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2471
2568
|
});
|
|
2472
2569
|
|
|
2473
2570
|
case 3:
|
|
2474
|
-
_yield$this$client$
|
|
2475
|
-
recoverMail = _yield$this$client$
|
|
2476
|
-
return
|
|
2571
|
+
_yield$this$client$mu21 = _context43.sent;
|
|
2572
|
+
recoverMail = _yield$this$client$mu21.recoverMail;
|
|
2573
|
+
return _context43.abrupt("return", recoverMail);
|
|
2477
2574
|
|
|
2478
2575
|
case 6:
|
|
2479
2576
|
case "end":
|
|
2480
|
-
return
|
|
2577
|
+
return _context43.stop();
|
|
2481
2578
|
}
|
|
2482
2579
|
}
|
|
2483
|
-
},
|
|
2580
|
+
}, _callee43, this);
|
|
2484
2581
|
}));
|
|
2485
2582
|
|
|
2486
|
-
function recoverMail(
|
|
2583
|
+
function recoverMail(_x41) {
|
|
2487
2584
|
return _recoverMail.apply(this, arguments);
|
|
2488
2585
|
}
|
|
2489
2586
|
|
|
@@ -2491,15 +2588,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2491
2588
|
}();
|
|
2492
2589
|
|
|
2493
2590
|
_proto.deleteFile = /*#__PURE__*/function () {
|
|
2494
|
-
var _deleteFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2495
|
-
var fileId, vFileId, _yield$this$client$
|
|
2591
|
+
var _deleteFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee44(_ref34) {
|
|
2592
|
+
var fileId, vFileId, _yield$this$client$mu22, deleteFile;
|
|
2496
2593
|
|
|
2497
|
-
return _regeneratorRuntime.wrap(function
|
|
2594
|
+
return _regeneratorRuntime.wrap(function _callee44$(_context44) {
|
|
2498
2595
|
while (1) {
|
|
2499
|
-
switch (
|
|
2596
|
+
switch (_context44.prev = _context44.next) {
|
|
2500
2597
|
case 0:
|
|
2501
2598
|
fileId = _ref34.fileId, vFileId = _ref34.vFileId;
|
|
2502
|
-
|
|
2599
|
+
_context44.next = 3;
|
|
2503
2600
|
return this.client.mutation({
|
|
2504
2601
|
deleteFile: [{
|
|
2505
2602
|
fileId: fileId,
|
|
@@ -2508,19 +2605,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2508
2605
|
});
|
|
2509
2606
|
|
|
2510
2607
|
case 3:
|
|
2511
|
-
_yield$this$client$
|
|
2512
|
-
deleteFile = _yield$this$client$
|
|
2513
|
-
return
|
|
2608
|
+
_yield$this$client$mu22 = _context44.sent;
|
|
2609
|
+
deleteFile = _yield$this$client$mu22.deleteFile;
|
|
2610
|
+
return _context44.abrupt("return", deleteFile);
|
|
2514
2611
|
|
|
2515
2612
|
case 6:
|
|
2516
2613
|
case "end":
|
|
2517
|
-
return
|
|
2614
|
+
return _context44.stop();
|
|
2518
2615
|
}
|
|
2519
2616
|
}
|
|
2520
|
-
},
|
|
2617
|
+
}, _callee44, this);
|
|
2521
2618
|
}));
|
|
2522
2619
|
|
|
2523
|
-
function deleteFile(
|
|
2620
|
+
function deleteFile(_x42) {
|
|
2524
2621
|
return _deleteFile.apply(this, arguments);
|
|
2525
2622
|
}
|
|
2526
2623
|
|
|
@@ -2528,15 +2625,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2528
2625
|
}();
|
|
2529
2626
|
|
|
2530
2627
|
_proto.deleteVFile = /*#__PURE__*/function () {
|
|
2531
|
-
var _deleteVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2532
|
-
var fileId, _yield$this$client$
|
|
2628
|
+
var _deleteVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee45(_ref35) {
|
|
2629
|
+
var fileId, _yield$this$client$mu23, deleteVFile;
|
|
2533
2630
|
|
|
2534
|
-
return _regeneratorRuntime.wrap(function
|
|
2631
|
+
return _regeneratorRuntime.wrap(function _callee45$(_context45) {
|
|
2535
2632
|
while (1) {
|
|
2536
|
-
switch (
|
|
2633
|
+
switch (_context45.prev = _context45.next) {
|
|
2537
2634
|
case 0:
|
|
2538
2635
|
fileId = _ref35.fileId;
|
|
2539
|
-
|
|
2636
|
+
_context45.next = 3;
|
|
2540
2637
|
return this.client.mutation({
|
|
2541
2638
|
deleteVFile: [{
|
|
2542
2639
|
fileId: fileId
|
|
@@ -2544,19 +2641,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2544
2641
|
});
|
|
2545
2642
|
|
|
2546
2643
|
case 3:
|
|
2547
|
-
_yield$this$client$
|
|
2548
|
-
deleteVFile = _yield$this$client$
|
|
2549
|
-
return
|
|
2644
|
+
_yield$this$client$mu23 = _context45.sent;
|
|
2645
|
+
deleteVFile = _yield$this$client$mu23.deleteVFile;
|
|
2646
|
+
return _context45.abrupt("return", deleteVFile);
|
|
2550
2647
|
|
|
2551
2648
|
case 6:
|
|
2552
2649
|
case "end":
|
|
2553
|
-
return
|
|
2650
|
+
return _context45.stop();
|
|
2554
2651
|
}
|
|
2555
2652
|
}
|
|
2556
|
-
},
|
|
2653
|
+
}, _callee45, this);
|
|
2557
2654
|
}));
|
|
2558
2655
|
|
|
2559
|
-
function deleteVFile(
|
|
2656
|
+
function deleteVFile(_x43) {
|
|
2560
2657
|
return _deleteVFile.apply(this, arguments);
|
|
2561
2658
|
}
|
|
2562
2659
|
|
|
@@ -2564,15 +2661,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2564
2661
|
}();
|
|
2565
2662
|
|
|
2566
2663
|
_proto.deleteMail = /*#__PURE__*/function () {
|
|
2567
|
-
var _deleteMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2568
|
-
var mailId, _yield$this$client$
|
|
2664
|
+
var _deleteMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee46(_ref36) {
|
|
2665
|
+
var mailId, _yield$this$client$mu24, deleteMail;
|
|
2569
2666
|
|
|
2570
|
-
return _regeneratorRuntime.wrap(function
|
|
2667
|
+
return _regeneratorRuntime.wrap(function _callee46$(_context46) {
|
|
2571
2668
|
while (1) {
|
|
2572
|
-
switch (
|
|
2669
|
+
switch (_context46.prev = _context46.next) {
|
|
2573
2670
|
case 0:
|
|
2574
2671
|
mailId = _ref36.mailId;
|
|
2575
|
-
|
|
2672
|
+
_context46.next = 3;
|
|
2576
2673
|
return this.client.mutation({
|
|
2577
2674
|
deleteMail: [{
|
|
2578
2675
|
mailId: mailId
|
|
@@ -2580,19 +2677,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2580
2677
|
});
|
|
2581
2678
|
|
|
2582
2679
|
case 3:
|
|
2583
|
-
_yield$this$client$
|
|
2584
|
-
deleteMail = _yield$this$client$
|
|
2585
|
-
return
|
|
2680
|
+
_yield$this$client$mu24 = _context46.sent;
|
|
2681
|
+
deleteMail = _yield$this$client$mu24.deleteMail;
|
|
2682
|
+
return _context46.abrupt("return", deleteMail);
|
|
2586
2683
|
|
|
2587
2684
|
case 6:
|
|
2588
2685
|
case "end":
|
|
2589
|
-
return
|
|
2686
|
+
return _context46.stop();
|
|
2590
2687
|
}
|
|
2591
2688
|
}
|
|
2592
|
-
},
|
|
2689
|
+
}, _callee46, this);
|
|
2593
2690
|
}));
|
|
2594
2691
|
|
|
2595
|
-
function deleteMail(
|
|
2692
|
+
function deleteMail(_x44) {
|
|
2596
2693
|
return _deleteMail.apply(this, arguments);
|
|
2597
2694
|
}
|
|
2598
2695
|
|
|
@@ -2600,30 +2697,30 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2600
2697
|
}();
|
|
2601
2698
|
|
|
2602
2699
|
_proto.saveInCloud = /*#__PURE__*/function () {
|
|
2603
|
-
var _saveInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2700
|
+
var _saveInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee47(_ref37) {
|
|
2604
2701
|
var _this5 = this;
|
|
2605
2702
|
|
|
2606
|
-
var fileId, name, folderId, key, file, _filesCache$get, _file2, receivedMails, mail, fileMail, fileKey, nameKey, encryptedName, encryptedNameKey, _yield$this$client$
|
|
2703
|
+
var fileId, name, folderId, key, file, _filesCache$get, _file2, receivedMails, mail, fileMail, fileKey, nameKey, encryptedName, encryptedNameKey, _yield$this$client$mu25, saveInCloud, vFile, me, others;
|
|
2607
2704
|
|
|
2608
|
-
return _regeneratorRuntime.wrap(function
|
|
2705
|
+
return _regeneratorRuntime.wrap(function _callee47$(_context47) {
|
|
2609
2706
|
while (1) {
|
|
2610
|
-
switch (
|
|
2707
|
+
switch (_context47.prev = _context47.next) {
|
|
2611
2708
|
case 0:
|
|
2612
2709
|
fileId = _ref37.fileId, name = _ref37.name, folderId = _ref37.folderId;
|
|
2613
2710
|
|
|
2614
2711
|
if (!(folderId && !foldersCache.has(folderId))) {
|
|
2615
|
-
|
|
2712
|
+
_context47.next = 6;
|
|
2616
2713
|
break;
|
|
2617
2714
|
}
|
|
2618
2715
|
|
|
2619
|
-
|
|
2716
|
+
_context47.next = 4;
|
|
2620
2717
|
return this.folder({
|
|
2621
2718
|
id: folderId
|
|
2622
2719
|
});
|
|
2623
2720
|
|
|
2624
2721
|
case 4:
|
|
2625
2722
|
if (foldersCache.has(folderId)) {
|
|
2626
|
-
|
|
2723
|
+
_context47.next = 6;
|
|
2627
2724
|
break;
|
|
2628
2725
|
}
|
|
2629
2726
|
|
|
@@ -2634,11 +2731,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2634
2731
|
file = filesCache.get(fileId);
|
|
2635
2732
|
|
|
2636
2733
|
if (file) {
|
|
2637
|
-
|
|
2734
|
+
_context47.next = 31;
|
|
2638
2735
|
break;
|
|
2639
2736
|
}
|
|
2640
2737
|
|
|
2641
|
-
|
|
2738
|
+
_context47.next = 11;
|
|
2642
2739
|
return this.file({
|
|
2643
2740
|
id: fileId
|
|
2644
2741
|
});
|
|
@@ -2647,15 +2744,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2647
2744
|
_file2 = (_filesCache$get = filesCache.get(fileId)) != null ? _filesCache$get : null;
|
|
2648
2745
|
|
|
2649
2746
|
if (_file2) {
|
|
2650
|
-
|
|
2747
|
+
_context47.next = 26;
|
|
2651
2748
|
break;
|
|
2652
2749
|
}
|
|
2653
2750
|
|
|
2654
|
-
|
|
2751
|
+
_context47.next = 15;
|
|
2655
2752
|
return this.receivedMails();
|
|
2656
2753
|
|
|
2657
2754
|
case 15:
|
|
2658
|
-
receivedMails =
|
|
2755
|
+
receivedMails = _context47.sent;
|
|
2659
2756
|
mail = receivedMails.find(function (m) {
|
|
2660
2757
|
return m.files.some(function (f) {
|
|
2661
2758
|
return f.id === fileId;
|
|
@@ -2663,7 +2760,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2663
2760
|
});
|
|
2664
2761
|
|
|
2665
2762
|
if (mail) {
|
|
2666
|
-
|
|
2763
|
+
_context47.next = 19;
|
|
2667
2764
|
break;
|
|
2668
2765
|
}
|
|
2669
2766
|
|
|
@@ -2675,7 +2772,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2675
2772
|
});
|
|
2676
2773
|
|
|
2677
2774
|
if (fileMail) {
|
|
2678
|
-
|
|
2775
|
+
_context47.next = 22;
|
|
2679
2776
|
break;
|
|
2680
2777
|
}
|
|
2681
2778
|
|
|
@@ -2684,12 +2781,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2684
2781
|
case 22:
|
|
2685
2782
|
fileKey = decryptCryptoBox(sodium.from_hex(fileMail.key), mail.sender.publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
|
|
2686
2783
|
key = sodium.to_hex(fileKey);
|
|
2687
|
-
|
|
2784
|
+
_context47.next = 29;
|
|
2688
2785
|
break;
|
|
2689
2786
|
|
|
2690
2787
|
case 26:
|
|
2691
2788
|
if (_file2.user) {
|
|
2692
|
-
|
|
2789
|
+
_context47.next = 28;
|
|
2693
2790
|
break;
|
|
2694
2791
|
}
|
|
2695
2792
|
|
|
@@ -2699,12 +2796,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2699
2796
|
key = _file2.user.key;
|
|
2700
2797
|
|
|
2701
2798
|
case 29:
|
|
2702
|
-
|
|
2799
|
+
_context47.next = 34;
|
|
2703
2800
|
break;
|
|
2704
2801
|
|
|
2705
2802
|
case 31:
|
|
2706
2803
|
if (file.user) {
|
|
2707
|
-
|
|
2804
|
+
_context47.next = 33;
|
|
2708
2805
|
break;
|
|
2709
2806
|
}
|
|
2710
2807
|
|
|
@@ -2715,7 +2812,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2715
2812
|
|
|
2716
2813
|
case 34:
|
|
2717
2814
|
if (!(key === "")) {
|
|
2718
|
-
|
|
2815
|
+
_context47.next = 36;
|
|
2719
2816
|
break;
|
|
2720
2817
|
}
|
|
2721
2818
|
|
|
@@ -2724,13 +2821,13 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2724
2821
|
case 36:
|
|
2725
2822
|
key = sodium.to_hex(encryptCryptoBox(sodium.from_hex(key), _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey));
|
|
2726
2823
|
nameKey = secretstreamKeygen();
|
|
2727
|
-
|
|
2824
|
+
_context47.next = 40;
|
|
2728
2825
|
return encryptName(name, sodium.to_hex(nameKey));
|
|
2729
2826
|
|
|
2730
2827
|
case 40:
|
|
2731
|
-
encryptedName =
|
|
2828
|
+
encryptedName = _context47.sent;
|
|
2732
2829
|
encryptedNameKey = sodium.to_hex(encryptCryptoBox(nameKey, _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey));
|
|
2733
|
-
|
|
2830
|
+
_context47.next = 44;
|
|
2734
2831
|
return this.client.mutation({
|
|
2735
2832
|
saveInCloud: [{
|
|
2736
2833
|
fileId: fileId,
|
|
@@ -2742,20 +2839,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2742
2839
|
});
|
|
2743
2840
|
|
|
2744
2841
|
case 44:
|
|
2745
|
-
_yield$this$client$
|
|
2746
|
-
saveInCloud = _yield$this$client$
|
|
2747
|
-
|
|
2842
|
+
_yield$this$client$mu25 = _context47.sent;
|
|
2843
|
+
saveInCloud = _yield$this$client$mu25.saveInCloud;
|
|
2844
|
+
_context47.next = 48;
|
|
2748
2845
|
return gqlVFileToExternal(saveInCloud, _classPrivateFieldLooseBase(this, _keys)[_keys]);
|
|
2749
2846
|
|
|
2750
2847
|
case 48:
|
|
2751
|
-
vFile =
|
|
2848
|
+
vFile = _context47.sent;
|
|
2752
2849
|
me = vFile.folder.users.find(function (_ref38) {
|
|
2753
2850
|
var u = _ref38[0];
|
|
2754
2851
|
return u.publicKey === _classPrivateFieldLooseBase(_this5, _keys)[_keys].publicKey;
|
|
2755
2852
|
});
|
|
2756
2853
|
|
|
2757
2854
|
if (!(me && ["admin", "write"].includes(me[1]))) {
|
|
2758
|
-
|
|
2855
|
+
_context47.next = 54;
|
|
2759
2856
|
break;
|
|
2760
2857
|
}
|
|
2761
2858
|
|
|
@@ -2763,7 +2860,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2763
2860
|
var u = _ref39[0];
|
|
2764
2861
|
return u.publicKey !== _classPrivateFieldLooseBase(_this5, _keys)[_keys].publicKey;
|
|
2765
2862
|
});
|
|
2766
|
-
|
|
2863
|
+
_context47.next = 54;
|
|
2767
2864
|
return Promise.all(others.map(function (_ref40) {
|
|
2768
2865
|
var u = _ref40[0],
|
|
2769
2866
|
rights = _ref40[1];
|
|
@@ -2775,17 +2872,17 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2775
2872
|
}));
|
|
2776
2873
|
|
|
2777
2874
|
case 54:
|
|
2778
|
-
return
|
|
2875
|
+
return _context47.abrupt("return", vFile);
|
|
2779
2876
|
|
|
2780
2877
|
case 55:
|
|
2781
2878
|
case "end":
|
|
2782
|
-
return
|
|
2879
|
+
return _context47.stop();
|
|
2783
2880
|
}
|
|
2784
2881
|
}
|
|
2785
|
-
},
|
|
2882
|
+
}, _callee47, this);
|
|
2786
2883
|
}));
|
|
2787
2884
|
|
|
2788
|
-
function saveInCloud(
|
|
2885
|
+
function saveInCloud(_x45) {
|
|
2789
2886
|
return _saveInCloud.apply(this, arguments);
|
|
2790
2887
|
}
|
|
2791
2888
|
|
|
@@ -2793,28 +2890,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2793
2890
|
}();
|
|
2794
2891
|
|
|
2795
2892
|
_proto.sendDraftMail = /*#__PURE__*/function () {
|
|
2796
|
-
var _sendDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
2797
|
-
var drafts, draft, recipients, temporaryRecipients, _iterator14, _step14, email, input, _iterator15, _step15, id, _input, _yield$this$client$
|
|
2893
|
+
var _sendDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee48(draftId, customMessage) {
|
|
2894
|
+
var drafts, draft, recipients, temporaryRecipients, _iterator14, _step14, email, input, _iterator15, _step15, id, _input, _yield$this$client$mu26, sendDraftMail;
|
|
2798
2895
|
|
|
2799
|
-
return _regeneratorRuntime.wrap(function
|
|
2896
|
+
return _regeneratorRuntime.wrap(function _callee48$(_context48) {
|
|
2800
2897
|
while (1) {
|
|
2801
|
-
switch (
|
|
2898
|
+
switch (_context48.prev = _context48.next) {
|
|
2802
2899
|
case 0:
|
|
2803
|
-
|
|
2900
|
+
_context48.next = 2;
|
|
2804
2901
|
return this.draftMails();
|
|
2805
2902
|
|
|
2806
2903
|
case 2:
|
|
2807
|
-
drafts =
|
|
2904
|
+
drafts = _context48.sent;
|
|
2808
2905
|
draft = drafts.find(function (d) {
|
|
2809
2906
|
return d.mailIntegrityId === draftId;
|
|
2810
2907
|
});
|
|
2811
2908
|
|
|
2812
2909
|
if (draft) {
|
|
2813
|
-
|
|
2910
|
+
_context48.next = 6;
|
|
2814
2911
|
break;
|
|
2815
2912
|
}
|
|
2816
2913
|
|
|
2817
|
-
return
|
|
2914
|
+
return _context48.abrupt("return", false);
|
|
2818
2915
|
|
|
2819
2916
|
case 6:
|
|
2820
2917
|
recipients = new Array();
|
|
@@ -2823,25 +2920,25 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2823
2920
|
|
|
2824
2921
|
case 9:
|
|
2825
2922
|
if ((_step14 = _iterator14()).done) {
|
|
2826
|
-
|
|
2923
|
+
_context48.next = 19;
|
|
2827
2924
|
break;
|
|
2828
2925
|
}
|
|
2829
2926
|
|
|
2830
2927
|
email = _step14.value.email;
|
|
2831
2928
|
|
|
2832
2929
|
if (email) {
|
|
2833
|
-
|
|
2930
|
+
_context48.next = 13;
|
|
2834
2931
|
break;
|
|
2835
2932
|
}
|
|
2836
2933
|
|
|
2837
|
-
return
|
|
2934
|
+
return _context48.abrupt("continue", 17);
|
|
2838
2935
|
|
|
2839
2936
|
case 13:
|
|
2840
|
-
|
|
2937
|
+
_context48.next = 15;
|
|
2841
2938
|
return this._eachUser(draft.files, draft.subject, draft.body, email);
|
|
2842
2939
|
|
|
2843
2940
|
case 15:
|
|
2844
|
-
input =
|
|
2941
|
+
input = _context48.sent;
|
|
2845
2942
|
|
|
2846
2943
|
if (!input) {
|
|
2847
2944
|
temporaryRecipients.push(email);
|
|
@@ -2850,7 +2947,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2850
2947
|
}
|
|
2851
2948
|
|
|
2852
2949
|
case 17:
|
|
2853
|
-
|
|
2950
|
+
_context48.next = 9;
|
|
2854
2951
|
break;
|
|
2855
2952
|
|
|
2856
2953
|
case 19:
|
|
@@ -2858,16 +2955,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2858
2955
|
|
|
2859
2956
|
case 20:
|
|
2860
2957
|
if ((_step15 = _iterator15()).done) {
|
|
2861
|
-
|
|
2958
|
+
_context48.next = 28;
|
|
2862
2959
|
break;
|
|
2863
2960
|
}
|
|
2864
2961
|
|
|
2865
2962
|
id = _step15.value.id;
|
|
2866
|
-
|
|
2963
|
+
_context48.next = 24;
|
|
2867
2964
|
return this._eachUser(draft.files, draft.subject, draft.body, id);
|
|
2868
2965
|
|
|
2869
2966
|
case 24:
|
|
2870
|
-
_input =
|
|
2967
|
+
_input = _context48.sent;
|
|
2871
2968
|
|
|
2872
2969
|
if (!_input) {
|
|
2873
2970
|
temporaryRecipients.push(id);
|
|
@@ -2876,11 +2973,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2876
2973
|
}
|
|
2877
2974
|
|
|
2878
2975
|
case 26:
|
|
2879
|
-
|
|
2976
|
+
_context48.next = 20;
|
|
2880
2977
|
break;
|
|
2881
2978
|
|
|
2882
2979
|
case 28:
|
|
2883
|
-
|
|
2980
|
+
_context48.next = 30;
|
|
2884
2981
|
return this.client.mutation({
|
|
2885
2982
|
sendDraftMail: [{
|
|
2886
2983
|
temporaryRecipients: temporaryRecipients,
|
|
@@ -2891,19 +2988,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2891
2988
|
});
|
|
2892
2989
|
|
|
2893
2990
|
case 30:
|
|
2894
|
-
_yield$this$client$
|
|
2895
|
-
sendDraftMail = _yield$this$client$
|
|
2896
|
-
return
|
|
2991
|
+
_yield$this$client$mu26 = _context48.sent;
|
|
2992
|
+
sendDraftMail = _yield$this$client$mu26.sendDraftMail;
|
|
2993
|
+
return _context48.abrupt("return", sendDraftMail != null ? sendDraftMail : false);
|
|
2897
2994
|
|
|
2898
2995
|
case 33:
|
|
2899
2996
|
case "end":
|
|
2900
|
-
return
|
|
2997
|
+
return _context48.stop();
|
|
2901
2998
|
}
|
|
2902
2999
|
}
|
|
2903
|
-
},
|
|
3000
|
+
}, _callee48, this);
|
|
2904
3001
|
}));
|
|
2905
3002
|
|
|
2906
|
-
function sendDraftMail(
|
|
3003
|
+
function sendDraftMail(_x46, _x47) {
|
|
2907
3004
|
return _sendDraftMail.apply(this, arguments);
|
|
2908
3005
|
}
|
|
2909
3006
|
|
|
@@ -2911,18 +3008,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2911
3008
|
}();
|
|
2912
3009
|
|
|
2913
3010
|
_proto.sendWaitingEmails = /*#__PURE__*/function () {
|
|
2914
|
-
var _sendWaitingEmails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3011
|
+
var _sendWaitingEmails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee49() {
|
|
2915
3012
|
var mails, filtered, _iterator16, _step16, mail, _iterator17, _step17, email, input;
|
|
2916
3013
|
|
|
2917
|
-
return _regeneratorRuntime.wrap(function
|
|
3014
|
+
return _regeneratorRuntime.wrap(function _callee49$(_context49) {
|
|
2918
3015
|
while (1) {
|
|
2919
|
-
switch (
|
|
3016
|
+
switch (_context49.prev = _context49.next) {
|
|
2920
3017
|
case 0:
|
|
2921
|
-
|
|
3018
|
+
_context49.next = 2;
|
|
2922
3019
|
return this.sentMails();
|
|
2923
3020
|
|
|
2924
3021
|
case 2:
|
|
2925
|
-
mails =
|
|
3022
|
+
mails = _context49.sent;
|
|
2926
3023
|
filtered = mails.filter(function (m) {
|
|
2927
3024
|
return m.temporaryRecipients.length > 0;
|
|
2928
3025
|
});
|
|
@@ -2930,7 +3027,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2930
3027
|
|
|
2931
3028
|
case 5:
|
|
2932
3029
|
if ((_step16 = _iterator16()).done) {
|
|
2933
|
-
|
|
3030
|
+
_context49.next = 22;
|
|
2934
3031
|
break;
|
|
2935
3032
|
}
|
|
2936
3033
|
|
|
@@ -2939,32 +3036,32 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2939
3036
|
|
|
2940
3037
|
case 8:
|
|
2941
3038
|
if ((_step17 = _iterator17()).done) {
|
|
2942
|
-
|
|
3039
|
+
_context49.next = 20;
|
|
2943
3040
|
break;
|
|
2944
3041
|
}
|
|
2945
3042
|
|
|
2946
3043
|
email = _step17.value.email;
|
|
2947
3044
|
|
|
2948
3045
|
if (email) {
|
|
2949
|
-
|
|
3046
|
+
_context49.next = 12;
|
|
2950
3047
|
break;
|
|
2951
3048
|
}
|
|
2952
3049
|
|
|
2953
|
-
return
|
|
3050
|
+
return _context49.abrupt("continue", 18);
|
|
2954
3051
|
|
|
2955
3052
|
case 12:
|
|
2956
|
-
|
|
3053
|
+
_context49.next = 14;
|
|
2957
3054
|
return this._eachUser(mail.files, mail.subject, mail.body, email);
|
|
2958
3055
|
|
|
2959
3056
|
case 14:
|
|
2960
|
-
input =
|
|
3057
|
+
input = _context49.sent;
|
|
2961
3058
|
|
|
2962
3059
|
if (!input) {
|
|
2963
|
-
|
|
3060
|
+
_context49.next = 18;
|
|
2964
3061
|
break;
|
|
2965
3062
|
}
|
|
2966
3063
|
|
|
2967
|
-
|
|
3064
|
+
_context49.next = 18;
|
|
2968
3065
|
return this.client.mutation({
|
|
2969
3066
|
sendOneMail: [{
|
|
2970
3067
|
mailIntegrityId: mail.mailIntegrityId,
|
|
@@ -2973,22 +3070,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2973
3070
|
});
|
|
2974
3071
|
|
|
2975
3072
|
case 18:
|
|
2976
|
-
|
|
3073
|
+
_context49.next = 8;
|
|
2977
3074
|
break;
|
|
2978
3075
|
|
|
2979
3076
|
case 20:
|
|
2980
|
-
|
|
3077
|
+
_context49.next = 5;
|
|
2981
3078
|
break;
|
|
2982
3079
|
|
|
2983
3080
|
case 22:
|
|
2984
|
-
return
|
|
3081
|
+
return _context49.abrupt("return", false);
|
|
2985
3082
|
|
|
2986
3083
|
case 23:
|
|
2987
3084
|
case "end":
|
|
2988
|
-
return
|
|
3085
|
+
return _context49.stop();
|
|
2989
3086
|
}
|
|
2990
3087
|
}
|
|
2991
|
-
},
|
|
3088
|
+
}, _callee49, this);
|
|
2992
3089
|
}));
|
|
2993
3090
|
|
|
2994
3091
|
function sendWaitingEmails() {
|
|
@@ -2999,12 +3096,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
2999
3096
|
}();
|
|
3000
3097
|
|
|
3001
3098
|
_proto.createDraftMail = /*#__PURE__*/function () {
|
|
3002
|
-
var _createDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3003
|
-
var body, subject, files, recipientsIds, replyTo, hashKey, hash, senderFiles, _iterator18, _step18, f, file, _yield$this$client$
|
|
3099
|
+
var _createDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee50(_ref41) {
|
|
3100
|
+
var body, subject, files, recipientsIds, replyTo, hashKey, hash, senderFiles, _iterator18, _step18, f, file, _yield$this$client$mu27, createDraftMail;
|
|
3004
3101
|
|
|
3005
|
-
return _regeneratorRuntime.wrap(function
|
|
3102
|
+
return _regeneratorRuntime.wrap(function _callee50$(_context50) {
|
|
3006
3103
|
while (1) {
|
|
3007
|
-
switch (
|
|
3104
|
+
switch (_context50.prev = _context50.next) {
|
|
3008
3105
|
case 0:
|
|
3009
3106
|
body = _ref41.body, subject = _ref41.subject, files = _ref41.files, recipientsIds = _ref41.recipientsIds, replyTo = _ref41.replyTo;
|
|
3010
3107
|
hashKey = sodium.randombytes_buf(sodium.crypto_generichash_KEYBYTES, "hex");
|
|
@@ -3017,7 +3114,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3017
3114
|
|
|
3018
3115
|
case 5:
|
|
3019
3116
|
if ((_step18 = _iterator18()).done) {
|
|
3020
|
-
|
|
3117
|
+
_context50.next = 19;
|
|
3021
3118
|
break;
|
|
3022
3119
|
}
|
|
3023
3120
|
|
|
@@ -3025,11 +3122,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3025
3122
|
file = filesCache.get(f.id);
|
|
3026
3123
|
|
|
3027
3124
|
if (file) {
|
|
3028
|
-
|
|
3125
|
+
_context50.next = 14;
|
|
3029
3126
|
break;
|
|
3030
3127
|
}
|
|
3031
3128
|
|
|
3032
|
-
|
|
3129
|
+
_context50.next = 11;
|
|
3033
3130
|
return this.file({
|
|
3034
3131
|
id: f.id
|
|
3035
3132
|
});
|
|
@@ -3038,7 +3135,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3038
3135
|
file = filesCache.get(f.id);
|
|
3039
3136
|
|
|
3040
3137
|
if (file) {
|
|
3041
|
-
|
|
3138
|
+
_context50.next = 14;
|
|
3042
3139
|
break;
|
|
3043
3140
|
}
|
|
3044
3141
|
|
|
@@ -3046,11 +3143,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3046
3143
|
|
|
3047
3144
|
case 14:
|
|
3048
3145
|
if (file.user) {
|
|
3049
|
-
|
|
3146
|
+
_context50.next = 16;
|
|
3050
3147
|
break;
|
|
3051
3148
|
}
|
|
3052
3149
|
|
|
3053
|
-
return
|
|
3150
|
+
return _context50.abrupt("continue", 17);
|
|
3054
3151
|
|
|
3055
3152
|
case 16:
|
|
3056
3153
|
senderFiles.push({
|
|
@@ -3060,11 +3157,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3060
3157
|
});
|
|
3061
3158
|
|
|
3062
3159
|
case 17:
|
|
3063
|
-
|
|
3160
|
+
_context50.next = 5;
|
|
3064
3161
|
break;
|
|
3065
3162
|
|
|
3066
3163
|
case 19:
|
|
3067
|
-
|
|
3164
|
+
_context50.next = 21;
|
|
3068
3165
|
return this.client.mutation({
|
|
3069
3166
|
createDraftMail: [{
|
|
3070
3167
|
recipients: recipientsIds,
|
|
@@ -3078,28 +3175,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3078
3175
|
});
|
|
3079
3176
|
|
|
3080
3177
|
case 21:
|
|
3081
|
-
_yield$this$client$
|
|
3082
|
-
createDraftMail = _yield$this$client$
|
|
3178
|
+
_yield$this$client$mu27 = _context50.sent;
|
|
3179
|
+
createDraftMail = _yield$this$client$mu27.createDraftMail;
|
|
3083
3180
|
|
|
3084
3181
|
if (createDraftMail) {
|
|
3085
|
-
|
|
3182
|
+
_context50.next = 25;
|
|
3086
3183
|
break;
|
|
3087
3184
|
}
|
|
3088
3185
|
|
|
3089
|
-
return
|
|
3186
|
+
return _context50.abrupt("return", null);
|
|
3090
3187
|
|
|
3091
3188
|
case 25:
|
|
3092
|
-
return
|
|
3189
|
+
return _context50.abrupt("return", convertInternalMailToExternal(createDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
|
|
3093
3190
|
|
|
3094
3191
|
case 26:
|
|
3095
3192
|
case "end":
|
|
3096
|
-
return
|
|
3193
|
+
return _context50.stop();
|
|
3097
3194
|
}
|
|
3098
3195
|
}
|
|
3099
|
-
},
|
|
3196
|
+
}, _callee50, this);
|
|
3100
3197
|
}));
|
|
3101
3198
|
|
|
3102
|
-
function createDraftMail(
|
|
3199
|
+
function createDraftMail(_x48) {
|
|
3103
3200
|
return _createDraftMail.apply(this, arguments);
|
|
3104
3201
|
}
|
|
3105
3202
|
|
|
@@ -3107,15 +3204,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3107
3204
|
}();
|
|
3108
3205
|
|
|
3109
3206
|
_proto.fileContent = /*#__PURE__*/function () {
|
|
3110
|
-
var _fileContent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3111
|
-
var fileId, onDownloadProgress, progressDecrypt,
|
|
3207
|
+
var _fileContent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee52(_ref42) {
|
|
3208
|
+
var fileId, onDownloadProgress, progressDecrypt, signal, _yield$this$client$qu14, fileContent, progressParts, onProgress, parts, byPart, encryptedContent, md5Encrypted, key, src, md5Content;
|
|
3112
3209
|
|
|
3113
|
-
return _regeneratorRuntime.wrap(function
|
|
3210
|
+
return _regeneratorRuntime.wrap(function _callee52$(_context52) {
|
|
3114
3211
|
while (1) {
|
|
3115
|
-
switch (
|
|
3212
|
+
switch (_context52.prev = _context52.next) {
|
|
3116
3213
|
case 0:
|
|
3117
|
-
fileId = _ref42.fileId, onDownloadProgress = _ref42.onDownloadProgress, progressDecrypt = _ref42.progressDecrypt,
|
|
3118
|
-
|
|
3214
|
+
fileId = _ref42.fileId, onDownloadProgress = _ref42.onDownloadProgress, progressDecrypt = _ref42.progressDecrypt, signal = _ref42.signal;
|
|
3215
|
+
_context52.next = 3;
|
|
3119
3216
|
return this.client.query({
|
|
3120
3217
|
fileContent: [{
|
|
3121
3218
|
fileId: fileId
|
|
@@ -3160,11 +3257,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3160
3257
|
});
|
|
3161
3258
|
|
|
3162
3259
|
case 3:
|
|
3163
|
-
_yield$this$client$
|
|
3164
|
-
fileContent = _yield$this$client$
|
|
3260
|
+
_yield$this$client$qu14 = _context52.sent;
|
|
3261
|
+
fileContent = _yield$this$client$qu14.fileContent;
|
|
3165
3262
|
|
|
3166
3263
|
if (fileContent) {
|
|
3167
|
-
|
|
3264
|
+
_context52.next = 7;
|
|
3168
3265
|
break;
|
|
3169
3266
|
}
|
|
3170
3267
|
|
|
@@ -3189,32 +3286,32 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3189
3286
|
parts = new Array();
|
|
3190
3287
|
|
|
3191
3288
|
byPart = /*#__PURE__*/function () {
|
|
3192
|
-
var _ref43 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3289
|
+
var _ref43 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee51(part) {
|
|
3193
3290
|
var buf, md5Part;
|
|
3194
|
-
return _regeneratorRuntime.wrap(function
|
|
3291
|
+
return _regeneratorRuntime.wrap(function _callee51$(_context51) {
|
|
3195
3292
|
while (1) {
|
|
3196
|
-
switch (
|
|
3293
|
+
switch (_context51.prev = _context51.next) {
|
|
3197
3294
|
case 0:
|
|
3198
|
-
|
|
3199
|
-
|
|
3295
|
+
_context51.t0 = Uint8Array;
|
|
3296
|
+
_context51.next = 3;
|
|
3200
3297
|
return ky.get(part.contentUrl, {
|
|
3201
3298
|
onDownloadProgress: function onDownloadProgress(pr) {
|
|
3202
3299
|
return onProgress(part.order, pr);
|
|
3203
3300
|
},
|
|
3204
|
-
signal:
|
|
3301
|
+
signal: signal
|
|
3205
3302
|
}).arrayBuffer();
|
|
3206
3303
|
|
|
3207
3304
|
case 3:
|
|
3208
|
-
|
|
3209
|
-
buf = new
|
|
3210
|
-
|
|
3305
|
+
_context51.t1 = _context51.sent;
|
|
3306
|
+
buf = new _context51.t0(_context51.t1);
|
|
3307
|
+
_context51.next = 7;
|
|
3211
3308
|
return md5(buf);
|
|
3212
3309
|
|
|
3213
3310
|
case 7:
|
|
3214
|
-
md5Part =
|
|
3311
|
+
md5Part = _context51.sent;
|
|
3215
3312
|
|
|
3216
3313
|
if (!(md5Part !== part.md5)) {
|
|
3217
|
-
|
|
3314
|
+
_context51.next = 10;
|
|
3218
3315
|
break;
|
|
3219
3316
|
}
|
|
3220
3317
|
|
|
@@ -3228,18 +3325,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3228
3325
|
|
|
3229
3326
|
case 11:
|
|
3230
3327
|
case "end":
|
|
3231
|
-
return
|
|
3328
|
+
return _context51.stop();
|
|
3232
3329
|
}
|
|
3233
3330
|
}
|
|
3234
|
-
},
|
|
3331
|
+
}, _callee51);
|
|
3235
3332
|
}));
|
|
3236
3333
|
|
|
3237
|
-
return function byPart(
|
|
3334
|
+
return function byPart(_x50) {
|
|
3238
3335
|
return _ref43.apply(this, arguments);
|
|
3239
3336
|
};
|
|
3240
3337
|
}();
|
|
3241
3338
|
|
|
3242
|
-
|
|
3339
|
+
_context52.next = 13;
|
|
3243
3340
|
return promiseAllLimit(3, fileContent.parts.map(function (p) {
|
|
3244
3341
|
return function () {
|
|
3245
3342
|
return byPart(p);
|
|
@@ -3253,52 +3350,51 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3253
3350
|
return p.data;
|
|
3254
3351
|
})); // const md5Encrypted = await firstValueFrom(md5(of(encryptedContent)));
|
|
3255
3352
|
|
|
3256
|
-
|
|
3353
|
+
_context52.next = 16;
|
|
3257
3354
|
return md5(encryptedContent);
|
|
3258
3355
|
|
|
3259
3356
|
case 16:
|
|
3260
|
-
md5Encrypted =
|
|
3357
|
+
md5Encrypted = _context52.sent;
|
|
3261
3358
|
|
|
3262
3359
|
if (!(md5Encrypted !== fileContent.md5Encrypted)) {
|
|
3263
|
-
|
|
3360
|
+
_context52.next = 19;
|
|
3264
3361
|
break;
|
|
3265
3362
|
}
|
|
3266
3363
|
|
|
3267
3364
|
throw new Error("Encrypted content does not match");
|
|
3268
3365
|
|
|
3269
3366
|
case 19:
|
|
3270
|
-
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);
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
return decrypt(key, encryptedContent, progressDecrypt);
|
|
3367
|
+
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);
|
|
3368
|
+
_context52.next = 22;
|
|
3369
|
+
return decrypt(key, encryptedContent, progressDecrypt, signal);
|
|
3274
3370
|
|
|
3275
3371
|
case 22:
|
|
3276
|
-
src =
|
|
3277
|
-
|
|
3372
|
+
src = _context52.sent;
|
|
3373
|
+
_context52.next = 25;
|
|
3278
3374
|
return md5(src);
|
|
3279
3375
|
|
|
3280
3376
|
case 25:
|
|
3281
|
-
md5Content =
|
|
3377
|
+
md5Content = _context52.sent;
|
|
3282
3378
|
|
|
3283
3379
|
if (!(md5Content !== fileContent.md5)) {
|
|
3284
|
-
|
|
3380
|
+
_context52.next = 28;
|
|
3285
3381
|
break;
|
|
3286
3382
|
}
|
|
3287
3383
|
|
|
3288
3384
|
throw new Error("Content does not match");
|
|
3289
3385
|
|
|
3290
3386
|
case 28:
|
|
3291
|
-
return
|
|
3387
|
+
return _context52.abrupt("return", uncompress(src));
|
|
3292
3388
|
|
|
3293
3389
|
case 29:
|
|
3294
3390
|
case "end":
|
|
3295
|
-
return
|
|
3391
|
+
return _context52.stop();
|
|
3296
3392
|
}
|
|
3297
3393
|
}
|
|
3298
|
-
},
|
|
3394
|
+
}, _callee52, this);
|
|
3299
3395
|
}));
|
|
3300
3396
|
|
|
3301
|
-
function fileContent(
|
|
3397
|
+
function fileContent(_x49) {
|
|
3302
3398
|
return _fileContent.apply(this, arguments);
|
|
3303
3399
|
}
|
|
3304
3400
|
|
|
@@ -3306,18 +3402,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3306
3402
|
}();
|
|
3307
3403
|
|
|
3308
3404
|
_proto.updateFile = /*#__PURE__*/function () {
|
|
3309
|
-
var _updateFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3310
|
-
var fileId, filename, isFavorite, deletedAt, file, encryptedName, _yield$this$client$
|
|
3405
|
+
var _updateFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee53(_ref44) {
|
|
3406
|
+
var fileId, filename, isFavorite, deletedAt, file, encryptedName, _yield$this$client$mu28, updateFile;
|
|
3311
3407
|
|
|
3312
|
-
return _regeneratorRuntime.wrap(function
|
|
3408
|
+
return _regeneratorRuntime.wrap(function _callee53$(_context53) {
|
|
3313
3409
|
while (1) {
|
|
3314
|
-
switch (
|
|
3410
|
+
switch (_context53.prev = _context53.next) {
|
|
3315
3411
|
case 0:
|
|
3316
3412
|
fileId = _ref44.fileId, filename = _ref44.filename, isFavorite = _ref44.isFavorite, deletedAt = _ref44.deletedAt;
|
|
3317
3413
|
file = vFilesCache.get(fileId);
|
|
3318
3414
|
|
|
3319
3415
|
if (file) {
|
|
3320
|
-
|
|
3416
|
+
_context53.next = 4;
|
|
3321
3417
|
break;
|
|
3322
3418
|
}
|
|
3323
3419
|
|
|
@@ -3325,24 +3421,24 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3325
3421
|
|
|
3326
3422
|
case 4:
|
|
3327
3423
|
if (!filename) {
|
|
3328
|
-
|
|
3424
|
+
_context53.next = 10;
|
|
3329
3425
|
break;
|
|
3330
3426
|
}
|
|
3331
3427
|
|
|
3332
|
-
|
|
3428
|
+
_context53.next = 7;
|
|
3333
3429
|
return encryptName(filename, file.userApp.nameKey);
|
|
3334
3430
|
|
|
3335
3431
|
case 7:
|
|
3336
|
-
|
|
3337
|
-
|
|
3432
|
+
_context53.t0 = _context53.sent;
|
|
3433
|
+
_context53.next = 11;
|
|
3338
3434
|
break;
|
|
3339
3435
|
|
|
3340
3436
|
case 10:
|
|
3341
|
-
|
|
3437
|
+
_context53.t0 = null;
|
|
3342
3438
|
|
|
3343
3439
|
case 11:
|
|
3344
|
-
encryptedName =
|
|
3345
|
-
|
|
3440
|
+
encryptedName = _context53.t0;
|
|
3441
|
+
_context53.next = 14;
|
|
3346
3442
|
return this.client.mutation({
|
|
3347
3443
|
updateFile: [{
|
|
3348
3444
|
fileId: fileId,
|
|
@@ -3353,28 +3449,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3353
3449
|
});
|
|
3354
3450
|
|
|
3355
3451
|
case 14:
|
|
3356
|
-
_yield$this$client$
|
|
3357
|
-
updateFile = _yield$this$client$
|
|
3452
|
+
_yield$this$client$mu28 = _context53.sent;
|
|
3453
|
+
updateFile = _yield$this$client$mu28.updateFile;
|
|
3358
3454
|
|
|
3359
3455
|
if (updateFile) {
|
|
3360
|
-
|
|
3456
|
+
_context53.next = 18;
|
|
3361
3457
|
break;
|
|
3362
3458
|
}
|
|
3363
3459
|
|
|
3364
3460
|
throw new Error("Can't update file");
|
|
3365
3461
|
|
|
3366
3462
|
case 18:
|
|
3367
|
-
return
|
|
3463
|
+
return _context53.abrupt("return", gqlVFileToExternal(updateFile, _classPrivateFieldLooseBase(this, _keys)[_keys]));
|
|
3368
3464
|
|
|
3369
3465
|
case 19:
|
|
3370
3466
|
case "end":
|
|
3371
|
-
return
|
|
3467
|
+
return _context53.stop();
|
|
3372
3468
|
}
|
|
3373
3469
|
}
|
|
3374
|
-
},
|
|
3470
|
+
}, _callee53, this);
|
|
3375
3471
|
}));
|
|
3376
3472
|
|
|
3377
|
-
function updateFile(
|
|
3473
|
+
function updateFile(_x51) {
|
|
3378
3474
|
return _updateFile.apply(this, arguments);
|
|
3379
3475
|
}
|
|
3380
3476
|
|
|
@@ -3382,15 +3478,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3382
3478
|
}();
|
|
3383
3479
|
|
|
3384
3480
|
_proto.readMail = /*#__PURE__*/function () {
|
|
3385
|
-
var _readMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3386
|
-
var mailId, _yield$this$client$
|
|
3481
|
+
var _readMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee54(_ref45) {
|
|
3482
|
+
var mailId, _yield$this$client$mu29, readMail;
|
|
3387
3483
|
|
|
3388
|
-
return _regeneratorRuntime.wrap(function
|
|
3484
|
+
return _regeneratorRuntime.wrap(function _callee54$(_context54) {
|
|
3389
3485
|
while (1) {
|
|
3390
|
-
switch (
|
|
3486
|
+
switch (_context54.prev = _context54.next) {
|
|
3391
3487
|
case 0:
|
|
3392
3488
|
mailId = _ref45.mailId;
|
|
3393
|
-
|
|
3489
|
+
_context54.next = 3;
|
|
3394
3490
|
return this.client.mutation({
|
|
3395
3491
|
readMail: [{
|
|
3396
3492
|
mailId: mailId
|
|
@@ -3398,19 +3494,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3398
3494
|
});
|
|
3399
3495
|
|
|
3400
3496
|
case 3:
|
|
3401
|
-
_yield$this$client$
|
|
3402
|
-
readMail = _yield$this$client$
|
|
3403
|
-
return
|
|
3497
|
+
_yield$this$client$mu29 = _context54.sent;
|
|
3498
|
+
readMail = _yield$this$client$mu29.readMail;
|
|
3499
|
+
return _context54.abrupt("return", readMail != null ? readMail : false);
|
|
3404
3500
|
|
|
3405
3501
|
case 6:
|
|
3406
3502
|
case "end":
|
|
3407
|
-
return
|
|
3503
|
+
return _context54.stop();
|
|
3408
3504
|
}
|
|
3409
3505
|
}
|
|
3410
|
-
},
|
|
3506
|
+
}, _callee54, this);
|
|
3411
3507
|
}));
|
|
3412
3508
|
|
|
3413
|
-
function readMail(
|
|
3509
|
+
function readMail(_x52) {
|
|
3414
3510
|
return _readMail.apply(this, arguments);
|
|
3415
3511
|
}
|
|
3416
3512
|
|
|
@@ -3418,15 +3514,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3418
3514
|
}();
|
|
3419
3515
|
|
|
3420
3516
|
_proto.unreadMail = /*#__PURE__*/function () {
|
|
3421
|
-
var _unreadMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3422
|
-
var mailId, _yield$this$client$
|
|
3517
|
+
var _unreadMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee55(_ref46) {
|
|
3518
|
+
var mailId, _yield$this$client$mu30, unreadMail;
|
|
3423
3519
|
|
|
3424
|
-
return _regeneratorRuntime.wrap(function
|
|
3520
|
+
return _regeneratorRuntime.wrap(function _callee55$(_context55) {
|
|
3425
3521
|
while (1) {
|
|
3426
|
-
switch (
|
|
3522
|
+
switch (_context55.prev = _context55.next) {
|
|
3427
3523
|
case 0:
|
|
3428
3524
|
mailId = _ref46.mailId;
|
|
3429
|
-
|
|
3525
|
+
_context55.next = 3;
|
|
3430
3526
|
return this.client.mutation({
|
|
3431
3527
|
unreadMail: [{
|
|
3432
3528
|
mailId: mailId
|
|
@@ -3434,19 +3530,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3434
3530
|
});
|
|
3435
3531
|
|
|
3436
3532
|
case 3:
|
|
3437
|
-
_yield$this$client$
|
|
3438
|
-
unreadMail = _yield$this$client$
|
|
3439
|
-
return
|
|
3533
|
+
_yield$this$client$mu30 = _context55.sent;
|
|
3534
|
+
unreadMail = _yield$this$client$mu30.unreadMail;
|
|
3535
|
+
return _context55.abrupt("return", unreadMail != null ? unreadMail : false);
|
|
3440
3536
|
|
|
3441
3537
|
case 6:
|
|
3442
3538
|
case "end":
|
|
3443
|
-
return
|
|
3539
|
+
return _context55.stop();
|
|
3444
3540
|
}
|
|
3445
3541
|
}
|
|
3446
|
-
},
|
|
3542
|
+
}, _callee55, this);
|
|
3447
3543
|
}));
|
|
3448
3544
|
|
|
3449
|
-
function unreadMail(
|
|
3545
|
+
function unreadMail(_x53) {
|
|
3450
3546
|
return _unreadMail.apply(this, arguments);
|
|
3451
3547
|
}
|
|
3452
3548
|
|
|
@@ -3454,16 +3550,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3454
3550
|
}();
|
|
3455
3551
|
|
|
3456
3552
|
_proto.appSettings = /*#__PURE__*/function () {
|
|
3457
|
-
var _appSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3553
|
+
var _appSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee56() {
|
|
3458
3554
|
var _user$appSettings;
|
|
3459
3555
|
|
|
3460
|
-
var _yield$this$client$
|
|
3556
|
+
var _yield$this$client$qu15, user;
|
|
3461
3557
|
|
|
3462
|
-
return _regeneratorRuntime.wrap(function
|
|
3558
|
+
return _regeneratorRuntime.wrap(function _callee56$(_context56) {
|
|
3463
3559
|
while (1) {
|
|
3464
|
-
switch (
|
|
3560
|
+
switch (_context56.prev = _context56.next) {
|
|
3465
3561
|
case 0:
|
|
3466
|
-
|
|
3562
|
+
_context56.next = 2;
|
|
3467
3563
|
return this.client.query({
|
|
3468
3564
|
user: [{}, {
|
|
3469
3565
|
appSettings: {
|
|
@@ -3477,25 +3573,25 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3477
3573
|
});
|
|
3478
3574
|
|
|
3479
3575
|
case 2:
|
|
3480
|
-
_yield$this$client$
|
|
3481
|
-
user = _yield$this$client$
|
|
3576
|
+
_yield$this$client$qu15 = _context56.sent;
|
|
3577
|
+
user = _yield$this$client$qu15.user;
|
|
3482
3578
|
|
|
3483
3579
|
if (user) {
|
|
3484
|
-
|
|
3580
|
+
_context56.next = 6;
|
|
3485
3581
|
break;
|
|
3486
3582
|
}
|
|
3487
3583
|
|
|
3488
|
-
return
|
|
3584
|
+
return _context56.abrupt("return", null);
|
|
3489
3585
|
|
|
3490
3586
|
case 6:
|
|
3491
|
-
return
|
|
3587
|
+
return _context56.abrupt("return", (_user$appSettings = user.appSettings) != null ? _user$appSettings : null);
|
|
3492
3588
|
|
|
3493
3589
|
case 7:
|
|
3494
3590
|
case "end":
|
|
3495
|
-
return
|
|
3591
|
+
return _context56.stop();
|
|
3496
3592
|
}
|
|
3497
3593
|
}
|
|
3498
|
-
},
|
|
3594
|
+
}, _callee56, this);
|
|
3499
3595
|
}));
|
|
3500
3596
|
|
|
3501
3597
|
function appSettings() {
|
|
@@ -3506,14 +3602,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3506
3602
|
}();
|
|
3507
3603
|
|
|
3508
3604
|
_proto.updateAppSettings = /*#__PURE__*/function () {
|
|
3509
|
-
var _updateAppSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3510
|
-
var _yield$this$client$
|
|
3605
|
+
var _updateAppSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee57(settings) {
|
|
3606
|
+
var _yield$this$client$mu31, updateAppSettings;
|
|
3511
3607
|
|
|
3512
|
-
return _regeneratorRuntime.wrap(function
|
|
3608
|
+
return _regeneratorRuntime.wrap(function _callee57$(_context57) {
|
|
3513
3609
|
while (1) {
|
|
3514
|
-
switch (
|
|
3610
|
+
switch (_context57.prev = _context57.next) {
|
|
3515
3611
|
case 0:
|
|
3516
|
-
|
|
3612
|
+
_context57.next = 2;
|
|
3517
3613
|
return this.client.mutation({
|
|
3518
3614
|
updateAppSettings: [settings, {
|
|
3519
3615
|
autoDisconnectDelay: true,
|
|
@@ -3525,19 +3621,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3525
3621
|
});
|
|
3526
3622
|
|
|
3527
3623
|
case 2:
|
|
3528
|
-
_yield$this$client$
|
|
3529
|
-
updateAppSettings = _yield$this$client$
|
|
3530
|
-
return
|
|
3624
|
+
_yield$this$client$mu31 = _context57.sent;
|
|
3625
|
+
updateAppSettings = _yield$this$client$mu31.updateAppSettings;
|
|
3626
|
+
return _context57.abrupt("return", updateAppSettings);
|
|
3531
3627
|
|
|
3532
3628
|
case 5:
|
|
3533
3629
|
case "end":
|
|
3534
|
-
return
|
|
3630
|
+
return _context57.stop();
|
|
3535
3631
|
}
|
|
3536
3632
|
}
|
|
3537
|
-
},
|
|
3633
|
+
}, _callee57, this);
|
|
3538
3634
|
}));
|
|
3539
3635
|
|
|
3540
|
-
function updateAppSettings(
|
|
3636
|
+
function updateAppSettings(_x54) {
|
|
3541
3637
|
return _updateAppSettings.apply(this, arguments);
|
|
3542
3638
|
}
|
|
3543
3639
|
|
|
@@ -3545,16 +3641,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3545
3641
|
}();
|
|
3546
3642
|
|
|
3547
3643
|
_proto.receivedMails = /*#__PURE__*/function () {
|
|
3548
|
-
var _receivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3644
|
+
var _receivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee58() {
|
|
3549
3645
|
var _user$receivedMails;
|
|
3550
3646
|
|
|
3551
|
-
var _yield$this$client$
|
|
3647
|
+
var _yield$this$client$qu16, user, mails, receivedMails, _iterator19, _step19, m, mail;
|
|
3552
3648
|
|
|
3553
|
-
return _regeneratorRuntime.wrap(function
|
|
3649
|
+
return _regeneratorRuntime.wrap(function _callee58$(_context58) {
|
|
3554
3650
|
while (1) {
|
|
3555
|
-
switch (
|
|
3651
|
+
switch (_context58.prev = _context58.next) {
|
|
3556
3652
|
case 0:
|
|
3557
|
-
|
|
3653
|
+
_context58.next = 2;
|
|
3558
3654
|
return this.client.query({
|
|
3559
3655
|
user: [{}, {
|
|
3560
3656
|
receivedMails: gqlMailQuery
|
|
@@ -3562,8 +3658,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3562
3658
|
});
|
|
3563
3659
|
|
|
3564
3660
|
case 2:
|
|
3565
|
-
_yield$this$client$
|
|
3566
|
-
user = _yield$this$client$
|
|
3661
|
+
_yield$this$client$qu16 = _context58.sent;
|
|
3662
|
+
user = _yield$this$client$qu16.user;
|
|
3567
3663
|
mails = (_user$receivedMails = user == null ? void 0 : user.receivedMails) != null ? _user$receivedMails : []; // TODO get actual mails on this app only
|
|
3568
3664
|
|
|
3569
3665
|
receivedMails = new Array();
|
|
@@ -3577,14 +3673,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3577
3673
|
}
|
|
3578
3674
|
}
|
|
3579
3675
|
|
|
3580
|
-
return
|
|
3676
|
+
return _context58.abrupt("return", receivedMails);
|
|
3581
3677
|
|
|
3582
3678
|
case 8:
|
|
3583
3679
|
case "end":
|
|
3584
|
-
return
|
|
3680
|
+
return _context58.stop();
|
|
3585
3681
|
}
|
|
3586
3682
|
}
|
|
3587
|
-
},
|
|
3683
|
+
}, _callee58, this);
|
|
3588
3684
|
}));
|
|
3589
3685
|
|
|
3590
3686
|
function receivedMails() {
|
|
@@ -3595,16 +3691,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3595
3691
|
}();
|
|
3596
3692
|
|
|
3597
3693
|
_proto.sentMails = /*#__PURE__*/function () {
|
|
3598
|
-
var _sentMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3694
|
+
var _sentMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee59() {
|
|
3599
3695
|
var _user$sentMails;
|
|
3600
3696
|
|
|
3601
|
-
var _yield$this$client$
|
|
3697
|
+
var _yield$this$client$qu17, user, mails, sentMails, _iterator20, _step20, m, mail;
|
|
3602
3698
|
|
|
3603
|
-
return _regeneratorRuntime.wrap(function
|
|
3699
|
+
return _regeneratorRuntime.wrap(function _callee59$(_context59) {
|
|
3604
3700
|
while (1) {
|
|
3605
|
-
switch (
|
|
3701
|
+
switch (_context59.prev = _context59.next) {
|
|
3606
3702
|
case 0:
|
|
3607
|
-
|
|
3703
|
+
_context59.next = 2;
|
|
3608
3704
|
return this.client.query({
|
|
3609
3705
|
user: [{}, {
|
|
3610
3706
|
sentMails: gqlMailQuery
|
|
@@ -3612,8 +3708,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3612
3708
|
});
|
|
3613
3709
|
|
|
3614
3710
|
case 2:
|
|
3615
|
-
_yield$this$client$
|
|
3616
|
-
user = _yield$this$client$
|
|
3711
|
+
_yield$this$client$qu17 = _context59.sent;
|
|
3712
|
+
user = _yield$this$client$qu17.user;
|
|
3617
3713
|
mails = (_user$sentMails = user == null ? void 0 : user.sentMails) != null ? _user$sentMails : []; // TODO get actual mails on this app only
|
|
3618
3714
|
|
|
3619
3715
|
sentMails = new Array();
|
|
@@ -3627,14 +3723,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3627
3723
|
}
|
|
3628
3724
|
}
|
|
3629
3725
|
|
|
3630
|
-
return
|
|
3726
|
+
return _context59.abrupt("return", sentMails);
|
|
3631
3727
|
|
|
3632
3728
|
case 8:
|
|
3633
3729
|
case "end":
|
|
3634
|
-
return
|
|
3730
|
+
return _context59.stop();
|
|
3635
3731
|
}
|
|
3636
3732
|
}
|
|
3637
|
-
},
|
|
3733
|
+
}, _callee59, this);
|
|
3638
3734
|
}));
|
|
3639
3735
|
|
|
3640
3736
|
function sentMails() {
|
|
@@ -3645,16 +3741,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3645
3741
|
}();
|
|
3646
3742
|
|
|
3647
3743
|
_proto.draftMails = /*#__PURE__*/function () {
|
|
3648
|
-
var _draftMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
3744
|
+
var _draftMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee60() {
|
|
3649
3745
|
var _user$draftMails;
|
|
3650
3746
|
|
|
3651
|
-
var _yield$this$client$
|
|
3747
|
+
var _yield$this$client$qu18, user, mails, draftMails, _iterator21, _step21, m, draft;
|
|
3652
3748
|
|
|
3653
|
-
return _regeneratorRuntime.wrap(function
|
|
3749
|
+
return _regeneratorRuntime.wrap(function _callee60$(_context60) {
|
|
3654
3750
|
while (1) {
|
|
3655
|
-
switch (
|
|
3751
|
+
switch (_context60.prev = _context60.next) {
|
|
3656
3752
|
case 0:
|
|
3657
|
-
|
|
3753
|
+
_context60.next = 2;
|
|
3658
3754
|
return this.client.query({
|
|
3659
3755
|
user: [{}, {
|
|
3660
3756
|
draftMails: gqlMailQuery
|
|
@@ -3662,8 +3758,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3662
3758
|
});
|
|
3663
3759
|
|
|
3664
3760
|
case 2:
|
|
3665
|
-
_yield$this$client$
|
|
3666
|
-
user = _yield$this$client$
|
|
3761
|
+
_yield$this$client$qu18 = _context60.sent;
|
|
3762
|
+
user = _yield$this$client$qu18.user;
|
|
3667
3763
|
mails = (_user$draftMails = user == null ? void 0 : user.draftMails) != null ? _user$draftMails : []; // TODO get actual mails on this app only
|
|
3668
3764
|
|
|
3669
3765
|
draftMails = new Array();
|
|
@@ -3677,14 +3773,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3677
3773
|
}
|
|
3678
3774
|
}
|
|
3679
3775
|
|
|
3680
|
-
return
|
|
3776
|
+
return _context60.abrupt("return", draftMails);
|
|
3681
3777
|
|
|
3682
3778
|
case 8:
|
|
3683
3779
|
case "end":
|
|
3684
|
-
return
|
|
3780
|
+
return _context60.stop();
|
|
3685
3781
|
}
|
|
3686
3782
|
}
|
|
3687
|
-
},
|
|
3783
|
+
}, _callee60, this);
|
|
3688
3784
|
}));
|
|
3689
3785
|
|
|
3690
3786
|
function draftMails() {
|
|
@@ -3696,4 +3792,4 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
|
|
|
3696
3792
|
|
|
3697
3793
|
return SecrecyClient;
|
|
3698
3794
|
}(BaseClient);
|
|
3699
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOlsia3kiLCJheGlvcyIsIkJhc2VDbGllbnQiLCJ2RmlsZXNDYWNoZSIsImZvbGRlcnNDYWNoZSIsImZpbGVzQ2FjaGUiLCJ1c2Vyc0NhY2hlIiwic2VjcmV0c3RyZWFtS2V5Z2VuIiwiZW5jcnlwdFNlY3JldHN0cmVhbSIsImNvbXByZXNzIiwidW5jb21wcmVzcyIsImdxbEZvbGRlclRvRXh0ZXJuYWwiLCJncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCIsImdxbFZGaWxlVG9FeHRlcm5hbCIsImdxbFZGaWxlVG9JbnRlcm5hbCIsImludGVybmFsVkZpbGVUb1ZGaWxlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImdxbEZpbGVRdWVyeSIsImdxbEZvbGRlclF1ZXJ5IiwiZ3FsRm9sZGVyRnVsbFF1ZXJ5IiwiZ3FsTWFpbFF1ZXJ5IiwiZ3FsVkZpbGVRdWVyeSIsImdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5IiwiY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwiLCJlbmNyeXB0TmFtZSIsIm5hbWUiLCJuYW1lS2V5IiwiZnJvbV9oZXgiLCJmcm9tX3N0cmluZyIsImRhdGEiLCJuYW1lRW5jcnlwdGVkIiwidG9faGV4IiwiU2VjcmVjeUNsaWVudCIsInVhU2Vzc2lvbiIsInVhS2V5cyIsInVhSnd0IiwiZW52Iiwiand0IiwicGVyRm9sZGVyIiwiZm9sZGVySWQiLCJwdWJsaWNLZXkiLCJmb2xkZXIiLCJnZXQiLCJpZCIsInVzZXJBcHAiLCJwcml2YXRlS2V5IiwicGVyVkZpbGUiLCJ2RmlsZUlkIiwidkZpbGUiLCJmaWxlcyIsImhpc3RvcnkiLCJtYXAiLCJmIiwia2V5IiwidXNlciIsIl9lYWNoVXNlciIsInN1YmplY3QiLCJib2R5IiwiaWRPck1haWwiLCJ1IiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVuZGVmaW5lZCIsIkVycm9yIiwicmVjaXBpZW50c0ZpbGVzIiwiQXJyYXkiLCJmaWxlSW5IaXN0b3J5IiwiZmlsZSIsInB1c2giLCJmaWxlS2V5IiwicmVjaXBpZW50SWQiLCJhZGRGaWxlVG9IaXN0b3J5IiwiZmlsZUlkIiwiY2xpZW50IiwibXV0YXRpb24iLCJmaW5kIiwidXNlcnMiLCJmaWx0ZXIiLCJpbnB1dCIsInNoYXJlRmlsZUluSGlzdG9yeSIsInVwbG9hZEZpbGUiLCJlbmNyeXB0UHJvZ3Jlc3MiLCJ1cGxvYWRQcm9ncmVzcyIsImNhbmNlbFRva2VuIiwiRmlsZSIsIlVpbnQ4QXJyYXkiLCJhcnJheUJ1ZmZlciIsImZpbGVCdWZmZXIiLCJjb21wcmVzc2VkIiwiZW5jcnlwdGVkRmlsZSIsIm1kNUZpbGUiLCJtZDVFbmNyeXB0ZWQiLCJlbmNyeXB0ZWRGaWxlS2V5IiwiZmlsZVNpemUiLCJieXRlTGVuZ3RoIiwiZmlsZVNpemVCZWZvcmUiLCJmaWxlUGFydFNpemUiLCJwYXJ0cyIsImZpZWxkcyIsIm9yZGVyIiwidXJsIiwidG90YWwiLCJjdXJyZW50IiwicGVyY2VudCIsImxlbmd0aCIsInVwbG9hZFBhcnRFbmRlZCIsInVwbG9hZEZpbGVQYXJ0RW5kIiwidXBsb2FkRW5kZWQiLCJ1cGxvYWRGaWxlRW5kIiwiY2h1bmtQYXJ0cyIsIk51bWJlciIsImluZGV4IiwiY2h1bmsiLCJwcm9ncmVzc1BhcnRzIiwib25Qcm9ncmVzcyIsInBhcnQiLCJwcm9ncmVzc0V2ZW50IiwiT2JqZWN0IiwidmFsdWVzIiwicmVkdWNlIiwicHJ2IiwiY3VyIiwibG9hZGVkIiwiYnlQYXJ0IiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInAiLCJlbnRyaWVzIiwidmFsdWUiLCJhcHBlbmQiLCJCbG9iIiwicG9zdCIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJyZXNwb25zZSIsInN0YXR1cyIsInVwbG9hZEZpbGVJbkNsb3VkIiwic2F2ZUluQ2xvdWQiLCJsb2dvdXQiLCJzZXNzaW9uSWQiLCJjbGVhciIsImNyZWF0ZUZvbGRlciIsInBhcmVudEZvbGRlcklkIiwiZW5jcnlwdGVkTmFtZSIsImVuY3J5cHRlZEtleSIsInBhcmVudEZvbGRlciIsIlByb21pc2UiLCJhbGwiLCJyaWdodHMiLCJzaGFyZUZvbGRlciIsImRlbGV0ZWQiLCJxdWVyeSIsIm1haWwiLCJzaGFyZVZGaWxlIiwiaCIsInNoYXJlZFZGaWxlcyIsInZGaWxlcyIsInZGaWxlc1NoYXJlZFdpdGhNZSIsImRlbGV0ZWRWRmlsZXMiLCJzaGFyZWRGb2xkZXJzIiwiZm9sZGVycyIsImZvbGRlcnNTaGFyZWRXaXRoTWUiLCJkZWxldGVkRm9sZGVycyIsImRlbGV0ZWRNYWlscyIsIm1haWxUeXBlIiwibWFpbHMiLCJtIiwic2hhcmVGb2xkZXJzIiwidkZpbGVJbnB1dCIsInNoYXJlRm9sZGVyRmluaXNoIiwidXBkYXRlRm9sZGVyIiwiaXNGYXZvcml0ZSIsImRlbGV0ZWRBdCIsImNyZWF0ZU1haWwiLCJjdXN0b21NZXNzYWdlIiwiY3JlYXRlRHJhZnRNYWlsIiwic2VuZERyYWZ0TWFpbCIsIm1haWxJbnRlZ3JpdHlJZCIsIndhaXRpbmdSZWNlaXZlZE1haWxzIiwiZGF0ZSIsImF0dGFjaG1lbnRzQ291bnQiLCJzZW5kZXIiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImVtYWlsIiwicmVjaXBpZW50cyIsInRlbXBvcmFyeVJlY2lwaWVudHMiLCJEYXRlIiwidXBkYXRlRHJhZnRNYWlsIiwiZHJhZnRJZCIsInJlY2lwaWVudHNJZHMiLCJyZXBseVRvIiwiZHJhZnRNYWlscyIsImRyYWZ0cyIsImRyYWZ0IiwiZCIsImhhc2hLZXkiLCJoYXNoIiwicmFuZG9tYnl0ZXNfYnVmIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTIiwiY3J5cHRvX2dlbmVyaWNoYXNoIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTIiwiSlNPTiIsInN0cmluZ2lmeSIsInNlbmRlckZpbGVzIiwiZGVsZXRlRHJhZnRNYWlsIiwiZGVsZXRlVkZpbGVTaGFyaW5nIiwiZGVsZXRlRm9sZGVyU2hhcmluZyIsImR1cGxpY2F0ZVZGaWxlIiwiY3VzdG9tTmFtZSIsImRlbGV0ZUZvbGRlckNsb3VkVHJhc2giLCJpZHMiLCJkZWxldGVWRmlsZUNsb3VkVHJhc2giLCJkZWxldGVNYWlsVHJhc2giLCJlbXB0eU1haWxUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJGaWxlIiwicmVjb3ZlckZvbGRlciIsInJlY292ZXJNYWlsIiwibWFpbElkIiwiZGVsZXRlRmlsZSIsImRlbGV0ZVZGaWxlIiwiZGVsZXRlTWFpbCIsImhhcyIsInJlY2VpdmVkTWFpbHMiLCJzb21lIiwiZmlsZU1haWwiLCJlbmNyeXB0ZWROYW1lS2V5IiwiZmlsZW5hbWUiLCJtZSIsImluY2x1ZGVzIiwib3RoZXJzIiwiZHJhZnRNYWlsSWQiLCJzZW5kV2FpdGluZ0VtYWlscyIsInNlbnRNYWlscyIsImZpbHRlcmVkIiwic2VuZE9uZU1haWwiLCJyZWNpcGllbnQiLCJmaWxlQ29udGVudCIsIm9uRG93bmxvYWRQcm9ncmVzcyIsInByb2dyZXNzRGVjcnlwdCIsImFib3J0IiwiX190eXBlbmFtZSIsImNvbnRlbnRVcmwiLCJ0b3RhbFNpemUiLCJzZW5kZXJQdWJsaWNLZXkiLCJ0cmFuc2ZlcnJlZEJ5dGVzIiwidG90YWxCeXRlcyIsInByIiwic2lnbmFsIiwiYnVmIiwibWQ1UGFydCIsImVuY3J5cHRlZENvbnRlbnQiLCJzb3J0IiwiYSIsImIiLCJzcmMiLCJtZDVDb250ZW50IiwidXBkYXRlRmlsZSIsInJlYWRNYWlsIiwidW5yZWFkTWFpbCIsImFwcFNldHRpbmdzIiwiYXV0b0Rpc2Nvbm5lY3REZWxheSIsImNsb3VkRmlsZURheXNGb3JEZWxldGUiLCJjbG91ZEZvbGRlckRheXNGb3JEZWxldGUiLCJoaXN0b3J5RmlsZURheXNGb3JEZWxldGUiLCJoaXN0b3J5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LFNBQVMsQ0FBQ3JLLElBQVYsQ0FBZW1GLElBQWY7QUFDRDtBQUNGOztBQXJCSCxpREF1QlNrRixTQXZCVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQTVpREY7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUEsU0Fza0RRMUMsVUF0a0RSO0FBQUEsK0VBc2tERTtBQUFBOztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFDeUIsS0FBS3RILE1BQUwsQ0FBWTZFLEtBQVosQ0FBa0I7QUFDdkNoRyxnQkFBQUEsSUFBSSxFQUFFLENBQ0osRUFESSxFQUVKO0FBQ0V5SSxrQkFBQUEsVUFBVSxFQUFFM0s7QUFEZCxpQkFGSTtBQURpQyxlQUFsQixDQUR6Qjs7QUFBQTtBQUFBO0FBQ1VrQyxjQUFBQSxJQURWLDJCQUNVQSxJQURWO0FBVVE4RyxjQUFBQSxLQVZSLHVCQVVnQjlHLElBVmhCLG9CQVVnQkEsSUFBSSxDQUFFeUksVUFWdEIsK0JBVW9DLEVBVnBDLEVBWUU7O0FBRU1BLGNBQUFBLFVBZFIsR0FjcUIsSUFBSTlILEtBQUosRUFkckI7O0FBZ0JFLGlFQUFnQm1HLEtBQWhCLHFDQUF1QjtBQUFaQyxnQkFBQUEsQ0FBWTtBQUNmNEIsZ0JBQUFBLEtBRGUsR0FDUDFLLDZCQUE2QixDQUFDOEksQ0FBRCw4QkFBSSxJQUFKLGdCQUR0Qjs7QUFFckIsb0JBQUk0QixLQUFKLEVBQVc7QUFDVEYsa0JBQUFBLFVBQVUsQ0FBQzNILElBQVgsQ0FBZ0I2SCxLQUFoQjtBQUNEO0FBQ0Y7O0FBckJILGlEQXVCU0YsVUF2QlQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0F0a0RGOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUEsRUFBbUN4TSxVQUFuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWFpbFR5cGUgfSBmcm9tIFwiLi8uLi96ZXVzL2luZGV4XCI7XG5pbXBvcnQgdHlwZSB7IERvd25sb2FkUHJvZ3Jlc3MgfSBmcm9tIFwia3lcIjtcbmltcG9ydCBreSBmcm9tIFwia3lcIjtcbmltcG9ydCB0eXBlIHsgQ2FuY2VsVG9rZW4gfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7IEJhc2VDbGllbnQgfSBmcm9tIFwiLi4vQmFzZUNsaWVudC5qc1wiO1xuaW1wb3J0IHsgdkZpbGVzQ2FjaGUsIGZvbGRlcnNDYWNoZSwgZmlsZXNDYWNoZSwgdXNlcnNDYWNoZSB9IGZyb20gXCIuLi9jYWNoZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9ncmVzcyB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHsgc2VjcmV0c3RyZWFtS2V5Z2VuLCBlbmNyeXB0U2VjcmV0c3RyZWFtIH0gZnJvbSBcIi4uL2NyeXB0by9maWxlLmpzXCI7XG5pbXBvcnQgeyBjb21wcmVzcywgdW5jb21wcmVzcyB9IGZyb20gXCIuLi9taW5pZnkvaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGdxbEZvbGRlclRvRXh0ZXJuYWwsXG4gIGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsXG59IGZyb20gXCIuL2NvbnZlcnQvZm9sZGVyLmpzXCI7XG5pbXBvcnQge1xuICBncWxWRmlsZVRvRXh0ZXJuYWwsXG4gIGdxbFZGaWxlVG9JbnRlcm5hbCxcbiAgaW50ZXJuYWxWRmlsZVRvVkZpbGVcbn0gZnJvbSBcIi4vY29udmVydC92RmlsZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBNYWlsRmlsZUlucHV0LFxuICBSZWNlaXZlZE1haWwsXG4gIFNlbnRNYWlsLFxuICBGb2xkZXIsXG4gIFZGaWxlV2l0aEZvbGRlcixcbiAgRm9sZGVyRnVsbCxcbiAgVXNlckFwcFNldHRpbmdzLFxuICBGaWxlIGFzIFNlY3JlY3lGaWxlLFxuICBXYWl0aW5nUmVjZWl2ZWRNYWlsLFxuICBEcmFmdE1haWwsXG4gIE1haWxSZWNpcGllbnRJbnB1dCxcbiAgVkZpbGUsXG4gIFNoYXJlRm9sZGVyc0lucHV0LFxuICBOYW1lS2V5SW5wdXQsXG4gIE5hbWVLZXlJbnB1dEZvbGRlcnMsXG4gIE1haWwsXG4gIFNoYXJlRmlsZUluSGlzdG9yeUlucHV0LFxuICBGaWxlUGFydFJlc3BvbnNlLFxuICBGaWxlQ29udGVudFBhcnRcbn0gZnJvbSBcIi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGdxbEZpbGVUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9maWxlLmpzXCI7XG5pbXBvcnQgeyBzb2RpdW0gfSBmcm9tIFwiLi4vc29kaXVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleVBhaXIgfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBkZWNyeXB0Q3J5cHRvQm94LCBlbmNyeXB0Q3J5cHRvQm94IH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWNyZWN5RW52IH0gZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2hvcnRpZFwiO1xuaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4uL3dvcmtlci9tZDUuanNcIjtcbmltcG9ydCB7IGVuY3J5cHQsIGRlY3J5cHQgfSBmcm9tIFwiLi4vd29ya2VyL3NvZGl1bS5qc1wiO1xuaW1wb3J0IHsgY2h1bmtzLCBjb25jYXRlbmF0ZSwgZW51bWVyYXRlLCBwcm9taXNlQWxsTGltaXQgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIGdxbEZpbGVRdWVyeSxcbiAgZ3FsRm9sZGVyUXVlcnksXG4gIGdxbEZvbGRlckZ1bGxRdWVyeSxcbiAgZ3FsTWFpbFF1ZXJ5LFxuICBncWxWRmlsZVF1ZXJ5LFxuICBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxufSBmcm9tIFwiLi90eXBlcy9xdWVyaWVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJpZ2h0cyB9IGZyb20gXCIuLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbCB9IGZyb20gXCIuL2NvbnZlcnQvbWFpbC5qc1wiO1xuLy8gaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4uL3dvcmtlci9pbmRleC5qc1wiO1xuLy8gaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIG9mIH0gZnJvbSBcInJ4anNcIjtcblxuZXhwb3J0IHR5cGUgTmV3TWFpbCA9IHtcbiAgYm9keTogc3RyaW5nO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIGZpbGVzOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W107XG4gIHJlY2lwaWVudHNJZHM6IHN0cmluZ1tdO1xuICByZXBseVRvPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IFByb2dyZXNzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5jb25zdCBlbmNyeXB0TmFtZSA9IGFzeW5jIChuYW1lOiBzdHJpbmcsIG5hbWVLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZW5jcnlwdFNlY3JldHN0cmVhbShcbiAgICBzb2RpdW0uZnJvbV9oZXgobmFtZUtleSksXG4gICAgc29kaXVtLmZyb21fc3RyaW5nKG5hbWUpXG4gICk7XG4gIGNvbnN0IG5hbWVFbmNyeXB0ZWQgPSBzb2RpdW0udG9faGV4KGRhdGEpO1xuICByZXR1cm4gbmFtZUVuY3J5cHRlZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBTZWNyZWN5Q2xpZW50IGV4dGVuZHMgQmFzZUNsaWVudCB7XG4gIGp3dDogc3RyaW5nO1xuXG4gICNrZXlzOiBLZXlQYWlyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHVhU2Vzc2lvbjogc3RyaW5nLFxuICAgIHVhS2V5czogS2V5UGFpcixcbiAgICB1YUp3dDogc3RyaW5nLFxuICAgIGVudjogU2VjcmVjeUVudlxuICApIHtcbiAgICBzdXBlcih1YVNlc3Npb24sIGVudik7XG4gICAgdGhpcy5qd3QgPSB1YUp3dDtcbiAgICB0aGlzLiNrZXlzID0gdWFLZXlzO1xuICB9XG5cbiAgYXN5bmMgYWRkRmlsZVRvSGlzdG9yeSh7XG4gICAgZmlsZUlkLFxuICAgIHZGaWxlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8VkZpbGU+IHtcbiAgICBjb25zdCB7IGFkZEZpbGVUb0hpc3RvcnkgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICB2RmlsZUlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbFZGaWxlUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlID0gYXdhaXQgZ3FsVkZpbGVUb0ludGVybmFsKGFkZEZpbGVUb0hpc3RvcnksIHRoaXMuI2tleXMpO1xuICAgIGNvbnN0IGZpbGUgPSB2RmlsZS5oaXN0b3J5LmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB1c2VycyA9IHZGaWxlLnVzZXJzLmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgaW5wdXQ6IFNoYXJlRmlsZUluSGlzdG9yeUlucHV0ID0ge1xuICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgIHVzZXJzOiB1c2Vycy5tYXAoKFt1XSkgPT4gKHtcbiAgICAgICAgICBpZDogdS5pZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZS51c2VyIS5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KSlcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgICAgc2hhcmVGaWxlSW5IaXN0b3J5OiBbeyBpbnB1dCwgdkZpbGVJZCB9LCB0cnVlXVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbnRlcm5hbFZGaWxlVG9WRmlsZSh2RmlsZSk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKHtcbiAgICBmaWxlLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICBjYW5jZWxUb2tlblxuICB9OiB7XG4gICAgZmlsZTogZ2xvYmFsVGhpcy5GaWxlIHwgVWludDhBcnJheTtcbiAgICBjYW5jZWxUb2tlbj86IENhbmNlbFRva2VuO1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIC8vIGFib3J0PzogQWJvcnRDb250cm9sbGVyO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGZpbGVCdWZmZXIgPVxuICAgICAgZmlsZSBpbnN0YW5jZW9mIEZpbGUgPyBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpIDogZmlsZTtcbiAgICBjb25zdCBjb21wcmVzc2VkID0gY29tcHJlc3MoZmlsZUJ1ZmZlcik7XG4gICAgLy8gVE9ETzogdXNlIGFib3J0IGNvbnRyb2xsZXIgdG8gY2FuY2VsIHVwbG9hZCwgYW5kIHNlZSB0eXBpbmdzXG4gICAgY29uc3Qge1xuICAgICAgZGF0YTogZW5jcnlwdGVkRmlsZSxcbiAgICAgIG1kNTogbWQ1RmlsZSxcbiAgICAgIG1kNUVuY3J5cHRlZFxuICAgIH0gPSBhd2FpdCBlbmNyeXB0KGZpbGVLZXksIGNvbXByZXNzZWQsIGVuY3J5cHRQcm9ncmVzcyk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRGaWxlS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGZpbGVLZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG5cbiAgICBjb25zdCB7IHVwbG9hZEZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwbG9hZEZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVTaXplOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZVNpemVCZWZvcmU6IGZpbGVCdWZmZXIuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEZpbGVLZXkpLFxuICAgICAgICAgIG1kNUVuY3J5cHRlZCxcbiAgICAgICAgICBtZDU6IG1kNUZpbGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZDogdHJ1ZSxcbiAgICAgICAgICBmaWxlUGFydFNpemU6IHRydWUsXG4gICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgIGZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICBwZXJjZW50OiAwXG4gICAgfSk7XG5cbiAgICBpZiAodXBsb2FkRmlsZS5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50OiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHBlcmNlbnQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZS5maWxlSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkUGFydEVuZGVkID0gYXN5bmMgKFxuICAgICAgbWQ1OiBzdHJpbmcsXG4gICAgICBvcmRlcjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICBjb25zdCB7IHVwbG9hZEZpbGVQYXJ0RW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLmZpbGVJZCxcbiAgICAgICAgICAgIG1kNSxcbiAgICAgICAgICAgIG9yZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZVBhcnRFbmQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwbG9hZEVuZGVkID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT4ge1xuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlRW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHVwbG9hZEZpbGVFbmQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWxlSWQ6IHVwbG9hZEZpbGUuZmlsZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZUVuZCA/PyBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBjaHVua1BhcnRzID0gbmV3IEFycmF5PHtcbiAgICAgIG9yZGVyOiBudW1iZXI7XG4gICAgICBkYXRhOiBVaW50OEFycmF5O1xuICAgICAgbWQ1OiBzdHJpbmc7XG4gICAgfT4oKTtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBjaHVua10gb2YgZW51bWVyYXRlKFxuICAgICAgY2h1bmtzKGVuY3J5cHRlZEZpbGUsIE51bWJlcih1cGxvYWRGaWxlLmZpbGVQYXJ0U2l6ZSkpXG4gICAgKSkge1xuICAgICAgY2h1bmtQYXJ0cy5wdXNoKHtcbiAgICAgICAgb3JkZXI6IGluZGV4ICsgMSxcbiAgICAgICAgZGF0YTogY2h1bmssXG4gICAgICAgIG1kNTogYXdhaXQgbWQ1KGNodW5rKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgUHJvZ3Jlc3NFdmVudD4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKHBhcnQ6IG51bWJlciwgcHJvZ3Jlc3NFdmVudDogUHJvZ3Jlc3NFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCBjdXJyZW50ID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLmxvYWRlZCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiBjdXJyZW50IC8gZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVQYXJ0UmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBjb25zdCBjaHVuayA9IGNodW5rUGFydHMuZmluZChwID0+IHAub3JkZXIgPT09IHBhcnQub3JkZXIpO1xuICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJ0LmZpZWxkcykpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICBcImZpbGVcIixcbiAgICAgICAgbmV3IEJsb2IoW2NodW5rLmRhdGFdKSxcbiAgICAgICAgYCR7dXBsb2FkRmlsZS5maWxlSWR9LSR7Y2h1bmsub3JkZXJ9YFxuICAgICAgKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucG9zdChwYXJ0LnVybCwgZm9ybURhdGEsIHtcbiAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBwcm9ncmVzc0V2ZW50ID0+XG4gICAgICAgICAgICBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByb2dyZXNzRXZlbnQpLFxuICAgICAgICAgIGNhbmNlbFRva2VuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHVwbG9hZFBhcnRFbmRlZChjaHVuay5tZDUsIGNodW5rLm9yZGVyKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKChlIGFzIGFueSkucmVzcG9uc2Uuc3RhdHVzID09PSAwKSB7XG4gICAgICAgICAgLy8gVE9ETyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2t5L2lzc3Vlcy8zMDVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgIDMsXG4gICAgICB1cGxvYWRGaWxlLnBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHVwbG9hZEVuZGVkKCk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlSW5DbG91ZCh7XG4gICAgZmlsZSxcbiAgICBuYW1lLFxuICAgIGZvbGRlcklkLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzc1xuICB9OiB7XG4gICAgZmlsZTogZ2xvYmFsVGhpcy5GaWxlIHwgVWludDhBcnJheTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY2FuY2VsVG9rZW4/OiBDYW5jZWxUb2tlbjtcbiAgICBmb2xkZXJJZD86IHN0cmluZztcbiAgICBlbmNyeXB0UHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHVwbG9hZFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPiB7XG4gICAgY29uc3QgZmlsZUlkID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlKHtcbiAgICAgIGZpbGUsXG4gICAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICAgIGNhbmNlbFRva2VuXG4gICAgfSk7XG4gICAgaWYgKCFmaWxlSWQpIHtcbiAgICAgIHRocm93IGBDYW4ndCB1cGxvYWQgZmlsZWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNhdmVJbkNsb3VkKHsgZmlsZUlkLCBuYW1lLCBmb2xkZXJJZCB9KTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdkZpbGVzQ2FjaGUuY2xlYXIoKTtcbiAgICBmaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgZm9sZGVyc0NhY2hlLmNsZWFyKCk7XG4gICAgYXdhaXQgc3VwZXIubG9nb3V0KHNlc3Npb25JZCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGb2xkZXIoe1xuICAgIG5hbWUsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPEZvbGRlckZ1bGw+IHtcbiAgICBjb25zdCBrZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChrZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRLZXkgPSBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAga2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuICAgIGNvbnN0IHsgY3JlYXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBjcmVhdGVGb2xkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgcGFyZW50Rm9sZGVySWQsXG4gICAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEtleSlcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsRm9sZGVyRnVsbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCFjcmVhdGVGb2xkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgY3JlYXRlIGZvbGRlcmApO1xuICAgIH1cbiAgICBjb25zdCBmb2xkZXIgPSBhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbChcbiAgICAgIGNyZWF0ZUZvbGRlcixcbiAgICAgIHRoaXMuI2tleXNcbiAgICApO1xuXG4gICAgY29uc3QgdXNlcnMgPVxuICAgICAgZm9sZGVyLnBhcmVudEZvbGRlcj8udXNlcnM/LmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApID8/IFtdO1xuXG4gICAgaWYgKHVzZXJzLmxlbmd0aCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHVzZXJzLm1hcCgoW3UsIHJpZ2h0c10pID0+XG4gICAgICAgICAgdGhpcy5zaGFyZUZvbGRlcih7XG4gICAgICAgICAgICBmb2xkZXJJZDogZm9sZGVyLmlkLFxuICAgICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgICAgdXNlcklkOiB1LmlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9sZGVyO1xuICB9XG5cbiAgYXN5bmMgZm9sZGVyKHtcbiAgICBpZCxcbiAgICBkZWxldGVkXG4gIH06IHtcbiAgICBpZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZD86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9ID0ge30pOiBQcm9taXNlPEZvbGRlckZ1bGwgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGZvbGRlcjogW3sgZGVsZXRlZCwgaWQgfSwgZ3FsRm9sZGVyRnVsbFF1ZXJ5XVxuICAgIH0pO1xuICAgIGlmICghZm9sZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsKGZvbGRlciwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyBmaWxlKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNlY3JlY3lGaWxlIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsRmlsZVF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdxbEZpbGVUb0V4dGVybmFsKGZpbGUsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgdkZpbGUoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghdkZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSBhcyBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcj47XG4gIH1cblxuICBhc3luYyBtYWlsKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPE1haWwgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBtYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghbWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG1haWwsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVWRmlsZSh7XG4gICAgdkZpbGVJZCxcbiAgICB1c2VySWQsXG4gICAgcmlnaHRzXG4gIH06IHtcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgcmlnaHRzOiBSaWdodHM7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgdkZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG5cbiAgICBpZiAoIXZGaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLnZGaWxlKHsgaWQ6IHZGaWxlSWQgfSk7XG4gICAgICB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgICAgaWYgKCF2RmlsZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcih7IHVzZXJJZCwgd2l0aFB1YmxpY0tleTogdHJ1ZSB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVLZXkgPSBzb2RpdW0udG9faGV4KFxuICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KHZGaWxlLnVzZXJBcHAubmFtZUtleSksXG4gICAgICAgIHVzZXIucHVibGljS2V5LFxuICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgaGlzdG9yeSA9IG5ldyBBcnJheTx7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgfT4oKTtcblxuICAgIGZvciAoY29uc3QgaCBvZiB2RmlsZS5oaXN0b3J5KSB7XG4gICAgICBpZiAoIWgudXNlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGhpc3RvcnkucHVzaCh7XG4gICAgICAgIGlkOiBoLmlkLFxuICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChoLnVzZXIua2V5KSxcbiAgICAgICAgICAgIHVzZXIucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNoYXJlVkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNoYXJlVkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICBuYW1lS2V5LFxuICAgICAgICAgIGhpc3RvcnlcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNoYXJlVkZpbGUgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBzaGFyZWRWRmlsZXMoKTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgc2hhcmVkVkZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBzaGFyZWRWRmlsZXM6IGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCB2RmlsZXMgPSBuZXcgQXJyYXk8VkZpbGVXaXRoRm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCB2RmlsZSBvZiBzaGFyZWRWRmlsZXMpIHtcbiAgICAgIHZGaWxlcy5wdXNoKFxuICAgICAgICAoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSkgYXMgVkZpbGVXaXRoRm9sZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZXM7XG4gIH1cblxuICBhc3luYyB2RmlsZXNTaGFyZWRXaXRoTWUoKTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgdkZpbGVzU2hhcmVkV2l0aE1lIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB2RmlsZXNTaGFyZWRXaXRoTWU6IGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCB2RmlsZXMgPSBuZXcgQXJyYXk8VkZpbGVXaXRoRm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCB2RmlsZSBvZiB2RmlsZXNTaGFyZWRXaXRoTWUpIHtcbiAgICAgIHZGaWxlcy5wdXNoKFxuICAgICAgICAoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSkgYXMgVkZpbGVXaXRoRm9sZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZXM7XG4gIH1cblxuICBhc3luYyBkZWxldGVkVkZpbGVzKCk6IFByb21pc2U8VkZpbGVbXT4ge1xuICAgIGNvbnN0IHsgZGVsZXRlZFZGaWxlcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZGVsZXRlZFZGaWxlczogZ3FsVkZpbGVRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlPigpO1xuXG4gICAgZm9yIChjb25zdCB2RmlsZSBvZiBkZWxldGVkVkZpbGVzKSB7XG4gICAgICB2RmlsZXMucHVzaCgoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSkgYXMgVkZpbGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZXM7XG4gIH1cblxuICBhc3luYyBzaGFyZWRGb2xkZXJzKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IHNoYXJlZEZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHNoYXJlZEZvbGRlcnM6IGdxbEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2xkZXJzID0gbmV3IEFycmF5PEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIHNoYXJlZEZvbGRlcnMpIHtcbiAgICAgIGZvbGRlcnMucHVzaChhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXJzO1xuICB9XG5cbiAgYXN5bmMgZm9sZGVyc1NoYXJlZFdpdGhNZSgpOiBQcm9taXNlPEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBmb2xkZXJzU2hhcmVkV2l0aE1lIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBmb2xkZXJzU2hhcmVkV2l0aE1lOiBncWxGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9sZGVycyA9IG5ldyBBcnJheTxGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBmb2xkZXJzU2hhcmVkV2l0aE1lKSB7XG4gICAgICBmb2xkZXJzLnB1c2goYXdhaXQgZ3FsRm9sZGVyVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9sZGVycztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWRGb2xkZXJzKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRGb2xkZXJzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBkZWxldGVkRm9sZGVyczogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2YgZGVsZXRlZEZvbGRlcnMpIHtcbiAgICAgIGZvbGRlcnMucHVzaChhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXJzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZE1haWxzKHsgbWFpbFR5cGUgfTogeyBtYWlsVHlwZTogTWFpbFR5cGUgfSk6IFByb21pc2U8TWFpbFtdPiB7XG4gICAgY29uc3QgeyBkZWxldGVkTWFpbHMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGRlbGV0ZWRNYWlsczogW3sgbWFpbFR5cGUgfSwgZ3FsTWFpbFF1ZXJ5XVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSBuZXcgQXJyYXk8TWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiBkZWxldGVkTWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIG1haWxzLnB1c2gobWFpbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1haWxzO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVGb2xkZXIoe1xuICAgIGZvbGRlcklkLFxuICAgIHVzZXJJZCxcbiAgICByaWdodHNcbiAgfToge1xuICAgIGZvbGRlcklkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgcmlnaHRzOiBSaWdodHM7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy51c2VyKHsgdXNlcklkLCB3aXRoUHVibGljS2V5OiB0cnVlIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHsgc2hhcmVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNoYXJlRm9sZGVyOiBbXG4gICAgICAgIHsgZm9sZGVySWQsIHVzZXJJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgdkZpbGVzOiB0cnVlLFxuICAgICAgICAgIGZvbGRlcnM6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2hhcmVGb2xkZXJzOiBTaGFyZUZvbGRlcnNJbnB1dCA9IHtcbiAgICAgIHZGaWxlczogW10sXG4gICAgICBmb2xkZXJzOiBbXVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGlkIG9mIHNoYXJlRm9sZGVyLmZvbGRlcnMpIHtcbiAgICAgIGNvbnN0IG5hbWVLZXkgPSBhd2FpdCB0aGlzLnBlckZvbGRlcihpZCwgdXNlci5wdWJsaWNLZXkpO1xuICAgICAgaWYgKG5hbWVLZXkpIHtcbiAgICAgICAgc2hhcmVGb2xkZXJzLmZvbGRlcnMucHVzaChuYW1lS2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGlkIG9mIHNoYXJlRm9sZGVyLnZGaWxlcykge1xuICAgICAgY29uc3QgdkZpbGVJbnB1dCA9IGF3YWl0IHRoaXMucGVyVkZpbGUoaWQsIHVzZXIucHVibGljS2V5KTtcbiAgICAgIGlmICh2RmlsZUlucHV0KSB7XG4gICAgICAgIHNoYXJlRm9sZGVycy52RmlsZXMucHVzaCh2RmlsZUlucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHNoYXJlRm9sZGVyRmluaXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBzaGFyZUZvbGRlckZpbmlzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBzaGFyZUZvbGRlcnNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNoYXJlRm9sZGVyRmluaXNoID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRm9sZGVyKHtcbiAgICBmb2xkZXJJZCxcbiAgICBuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGlzRmF2b3JpdGU/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Rm9sZGVyRnVsbD4ge1xuICAgIGxldCBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcbiAgICBpZiAoIWZvbGRlcikge1xuICAgICAgYXdhaXQgdGhpcy5mb2xkZXIoeyBpZDogZm9sZGVySWQgfSk7XG4gICAgICBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcbiAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgIHRocm93IGBDYW4ndCBmaW5kIGZvbGRlciAke2ZvbGRlcklkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmFtZSA9IG5hbWVcbiAgICAgID8gZm9sZGVyLnVzZXJBcHA/Lm5hbWVLZXlcbiAgICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBmb2xkZXIudXNlckFwcC5uYW1lS2V5KVxuICAgICAgICA6IG5hbWVcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgdXBkYXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVGb2xkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsRm9sZGVyRnVsbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUZvbGRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgdXBkYXRlIGZvbGRlclwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3FsRm9sZGVyVG9FeHRlcm5hbEZvbGRlckZ1bGwodXBkYXRlRm9sZGVyLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU1haWwoXG4gICAgZGF0YTogTmV3TWFpbCxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtYWlsID0gYXdhaXQgdGhpcy5jcmVhdGVEcmFmdE1haWwoZGF0YSk7XG4gICAgaWYgKCFtYWlsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbmREcmFmdE1haWwobWFpbC5tYWlsSW50ZWdyaXR5SWQsIGN1c3RvbU1lc3NhZ2UpO1xuICB9XG5cbiAgYXN5bmMgd2FpdGluZ1JlY2VpdmVkTWFpbHMoKTogUHJvbWlzZTxXYWl0aW5nUmVjZWl2ZWRNYWlsW10+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICB3YWl0aW5nUmVjZWl2ZWRNYWlsczoge1xuICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBzZW5kZXI6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50czoge1xuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBnZXQgd2FpdGluZyByZWNlaXZlZCBtYWlsc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlci53YWl0aW5nUmVjZWl2ZWRNYWlscy5tYXAobSA9PiAoe1xuICAgICAgaWQ6IGdlbmVyYXRlKCksXG4gICAgICAuLi5tLFxuICAgICAgZGF0ZTogbmV3IERhdGUobS5kYXRlKVxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgeyBib2R5LCBzdWJqZWN0LCBmaWxlcywgcmVjaXBpZW50c0lkcywgcmVwbHlUbyB9OiBQYXJ0aWFsPE5ld01haWw+XG4gICk6IFByb21pc2U8RHJhZnRNYWlsIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRyYWZ0cyA9IGF3YWl0IHRoaXMuZHJhZnRNYWlscygpO1xuICAgIGNvbnN0IGRyYWZ0ID0gZHJhZnRzLmZpbmQoZCA9PiBkLm1haWxJbnRlZ3JpdHlJZCA9PT0gZHJhZnRJZCk7XG4gICAgaWYgKCFkcmFmdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRyYWZ0ICR7ZHJhZnRJZH1gKTtcbiAgICB9XG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoYm9keSB8fCBzdWJqZWN0KSB7XG4gICAgICBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICAgIGhhc2ggPSBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICAgIGhhc2hLZXksXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgICAgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZmlsZS51c2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc2VuZGVyRmlsZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGZpbGUuaWQsXG4gICAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmaWxlLnVzZXIua2V5KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHVwZGF0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdXBkYXRlRHJhZnRNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdElkLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHJlY2lwaWVudHNJZHMsXG4gICAgICAgICAgcmVwbHlUbyxcbiAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgICAgICA/IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhib2R5KSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc3ViamVjdDogc3ViamVjdFxuICAgICAgICAgICAgPyBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHNlbmRlckZpbGVzLFxuICAgICAgICAgIGhhc2gsXG4gICAgICAgICAgaGFzaEtleVxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICB1cGRhdGVEcmFmdE1haWwsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSBhcyBEcmFmdE1haWw7XG4gIH1cblxuICBhc3luYyBkZWxldGVEcmFmdE1haWwoZHJhZnRJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVEcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZURyYWZ0TWFpbCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlU2hhcmluZyh7XG4gICAgdkZpbGVJZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVkZpbGVTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVWRmlsZVNoYXJpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlVkZpbGVTaGFyaW5nO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRm9sZGVyU2hhcmluZyh7XG4gICAgZm9sZGVySWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXJTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVGb2xkZXJTaGFyaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZCxcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVGb2xkZXJTaGFyaW5nO1xuICB9XG5cbiAgYXN5bmMgZHVwbGljYXRlVkZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICBmb2xkZXJJZCxcbiAgICBjdXN0b21OYW1lXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBmb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgY3VzdG9tTmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgZmlsZSA9IHZGaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy52RmlsZSh7IGlkOiBmaWxlSWQgfSk7XG4gICAgICBmaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCk7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICgke2ZpbGVJZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXN0b21OYW1lID0gY3VzdG9tTmFtZVxuICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShjdXN0b21OYW1lLCBmaWxlLnVzZXJBcHAubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgZHVwbGljYXRlVkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGR1cGxpY2F0ZVZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgY3VzdG9tTmFtZVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZHVwbGljYXRlVkZpbGU7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXJDbG91ZFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVkZpbGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZUNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsVHJhc2goeyBpZHMgfTogeyBpZHM6IEFycmF5PHN0cmluZz4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVNYWlsVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZU1haWxUcmFzaDtcbiAgfVxuXG4gIGFzeW5jIGVtcHR5TWFpbFRyYXNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZW1wdHlNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5TWFpbFRyYXNoOiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW1wdHlNYWlsVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBlbXB0eUNsb3VkVHJhc2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBlbXB0eUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5Q2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJGaWxlKHsgZmlsZUlkIH06IHsgZmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlckZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHJlY292ZXJGaWxlOiBbeyBmaWxlSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyRmlsZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJGb2xkZXIoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlckZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgcmVjb3ZlckZvbGRlcjogW3sgaWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyRm9sZGVyID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVjb3Zlck1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyByZWNvdmVyTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgcmVjb3Zlck1haWw6IFt7IG1haWxJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlY292ZXJNYWlsO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIHZGaWxlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIHZGaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVGaWxlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVkZpbGUoeyBmaWxlSWQgfTogeyBmaWxlSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZVZGaWxlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZU1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIG1haWxJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZU1haWw7XG4gIH1cblxuICBhc3luYyBzYXZlSW5DbG91ZCh7XG4gICAgZmlsZUlkLFxuICAgIG5hbWUsXG4gICAgZm9sZGVySWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmb2xkZXJJZD86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPiB7XG4gICAgaWYgKGZvbGRlcklkICYmICFmb2xkZXJzQ2FjaGUuaGFzKGZvbGRlcklkKSkge1xuICAgICAgYXdhaXQgdGhpcy5mb2xkZXIoeyBpZDogZm9sZGVySWQgfSk7XG4gICAgICBpZiAoIWZvbGRlcnNDYWNoZS5oYXMoZm9sZGVySWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAke2ZvbGRlcklkfSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQga2V5ID0gXCJcIjtcblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuXG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZmlsZUlkIH0pO1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCkgPz8gbnVsbDtcbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICBjb25zdCByZWNlaXZlZE1haWxzID0gYXdhaXQgdGhpcy5yZWNlaXZlZE1haWxzKCk7XG4gICAgICAgIGNvbnN0IG1haWwgPSByZWNlaXZlZE1haWxzLmZpbmQobSA9PlxuICAgICAgICAgIG0uZmlsZXMuc29tZShmID0+IGYuaWQgPT09IGZpbGVJZClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIW1haWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZU1haWwgPSBtYWlsLmZpbGVzLmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuXG4gICAgICAgIGlmICghZmlsZU1haWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUtleSA9IGRlY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGVNYWlsLmtleSksXG4gICAgICAgICAgbWFpbC5zZW5kZXIucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApO1xuXG4gICAgICAgIGtleSA9IHNvZGl1bS50b19oZXgoZmlsZUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3IgMVwiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkgPSBmaWxlLnVzZXIua2V5O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDJcIik7XG4gICAgICB9XG4gICAgICBrZXkgPSBmaWxlLnVzZXIua2V5O1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3IgM1wiKTtcbiAgICB9XG5cbiAgICBrZXkgPSBzb2RpdW0udG9faGV4KFxuICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgbmFtZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBzb2RpdW0udG9faGV4KG5hbWVLZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lS2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3gobmFtZUtleSwgdGhpcy4ja2V5cy5wdWJsaWNLZXksIHRoaXMuI2tleXMucHJpdmF0ZUtleSlcbiAgICApO1xuXG4gICAgY29uc3QgeyBzYXZlSW5DbG91ZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2F2ZUluQ2xvdWQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgbmFtZUtleTogZW5jcnlwdGVkTmFtZUtleVxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGUgPSAoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKFxuICAgICAgc2F2ZUluQ2xvdWQsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSkgYXMgVkZpbGVXaXRoRm9sZGVyO1xuXG4gICAgY29uc3QgbWUgPSB2RmlsZS5mb2xkZXIudXNlcnMuZmluZChcbiAgICAgIChbdV0pID0+IHUucHVibGljS2V5ID09PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICk7XG5cbiAgICBpZiAobWUgJiYgW1wiYWRtaW5cIiwgXCJ3cml0ZVwiXS5pbmNsdWRlcyhtZVsxXSkpIHtcbiAgICAgIGNvbnN0IG90aGVycyA9IHZGaWxlLmZvbGRlci51c2Vycy5maWx0ZXIoXG4gICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgKTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG90aGVycy5tYXAoKFt1LCByaWdodHNdKSA9PlxuICAgICAgICAgIHRoaXMuc2hhcmVWRmlsZSh7XG4gICAgICAgICAgICB2RmlsZUlkOiB2RmlsZS5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlO1xuICB9XG5cbiAgYXN5bmMgc2VuZERyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG5cbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5maW5kKGQgPT4gZC5tYWlsSW50ZWdyaXR5SWQgPT09IGRyYWZ0SWQpO1xuICAgIGlmICghZHJhZnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IG5ldyBBcnJheTxNYWlsUmVjaXBpZW50SW5wdXQ+KCk7XG5cbiAgICBjb25zdCB0ZW1wb3JhcnlSZWNpcGllbnRzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIGRyYWZ0LnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICBkcmFmdC5maWxlcyxcbiAgICAgICAgZHJhZnQuc3ViamVjdCxcbiAgICAgICAgZHJhZnQuYm9keSxcbiAgICAgICAgZW1haWxcbiAgICAgICk7XG5cbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cy5wdXNoKGVtYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaChpbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7IGlkIH0gb2YgZHJhZnQucmVjaXBpZW50cykge1xuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2VuZERyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2VuZERyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGRyYWZ0TWFpbElkOiBkcmFmdC5tYWlsSW50ZWdyaXR5SWQsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VuZERyYWZ0TWFpbCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRXYWl0aW5nRW1haWxzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFRPRE8gb3B0aSB0aGlzXG4gICAgY29uc3QgbWFpbHMgPSBhd2FpdCB0aGlzLnNlbnRNYWlscygpO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gbWFpbHMuZmlsdGVyKG0gPT4gbS50ZW1wb3JhcnlSZWNpcGllbnRzLmxlbmd0aCA+IDApO1xuXG4gICAgZm9yIChjb25zdCBtYWlsIG9mIGZpbHRlcmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgZW1haWwgfSBvZiBtYWlsLnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgICAgaWYgKCFlbWFpbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgICAgbWFpbC5maWxlcyxcbiAgICAgICAgICBtYWlsLnN1YmplY3QsXG4gICAgICAgICAgbWFpbC5ib2R5LFxuICAgICAgICAgIGVtYWlsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgICAgICAgc2VuZE9uZU1haWw6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1haWxJbnRlZ3JpdHlJZDogbWFpbC5tYWlsSW50ZWdyaXR5SWQsXG4gICAgICAgICAgICAgICAgcmVjaXBpZW50OiBpbnB1dFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRHJhZnRNYWlsKHtcbiAgICBib2R5LFxuICAgIHN1YmplY3QsXG4gICAgZmlsZXMsXG4gICAgcmVjaXBpZW50c0lkcyxcbiAgICByZXBseVRvXG4gIH06IE5ld01haWwpOiBQcm9taXNlPERyYWZ0TWFpbCB8IG51bGw+IHtcbiAgICBjb25zdCBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfS0VZQllURVMsXG4gICAgICBcImhleFwiXG4gICAgKTtcbiAgICBjb25zdCBoYXNoID0gc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaChcbiAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfQllURVMsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICBoYXNoS2V5LFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3Qgc2VuZGVyRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgIGxldCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgIGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZmlsZS51c2VyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgc2VuZGVyRmlsZXMucHVzaCh7XG4gICAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZmlsZS51c2VyLmtleSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjcmVhdGVEcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGNyZWF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHNlbmRlckZpbGVzLFxuICAgICAgICAgIGhhc2gsXG4gICAgICAgICAgaGFzaEtleVxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghY3JlYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICBjcmVhdGVEcmFmdE1haWwsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSBhcyBEcmFmdE1haWw7XG4gIH1cblxuICBhc3luYyBmaWxlQ29udGVudCh7XG4gICAgZmlsZUlkLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBwcm9ncmVzc0RlY3J5cHQsXG4gICAgYWJvcnRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG9uRG93bmxvYWRQcm9ncmVzcz86IChwcm9ncmVzczogRG93bmxvYWRQcm9ncmVzcykgPT4gdm9pZDtcbiAgICBwcm9ncmVzc0RlY3J5cHQ/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIGFib3J0PzogQWJvcnRDb250cm9sbGVyO1xuICB9KTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3QgeyBmaWxlQ29udGVudCB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZmlsZUNvbnRlbnQ6IFtcbiAgICAgICAgeyBmaWxlSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudENsb3VkXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIjoge1xuICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgIHNlbmRlclB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFNlbnRNYWlsXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZmlsZUNvbnRlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGVJZH0gZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgRG93bmxvYWRQcm9ncmVzcz4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKFxuICAgICAgcGFydDogbnVtYmVyLFxuICAgICAgcHJvZ3Jlc3NFdmVudDogRG93bmxvYWRQcm9ncmVzc1xuICAgICk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcnJlZEJ5dGVzID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLnRyYW5zZmVycmVkQnl0ZXMsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb25zdCB0b3RhbEJ5dGVzID0gTnVtYmVyKGZpbGVDb250ZW50LnRvdGFsU2l6ZSk7XG4gICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQ6IHRyYW5zZmVycmVkQnl0ZXMgLyB0b3RhbEJ5dGVzLFxuICAgICAgICB0b3RhbEJ5dGVzLFxuICAgICAgICB0cmFuc2ZlcnJlZEJ5dGVzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGFydHMgPSBuZXcgQXJyYXk8eyBkYXRhOiBVaW50OEFycmF5OyBvcmRlcjogbnVtYmVyIH0+KCk7XG5cbiAgICBjb25zdCBieVBhcnQgPSBhc3luYyAocGFydDogRmlsZUNvbnRlbnRQYXJ0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQga3lcbiAgICAgICAgICAuZ2V0KHBhcnQuY29udGVudFVybCwge1xuICAgICAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiBwciA9PiBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByKSxcbiAgICAgICAgICAgIHNpZ25hbDogYWJvcnQ/LnNpZ25hbFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFycmF5QnVmZmVyKClcbiAgICAgICk7XG4gICAgICBjb25zdCBtZDVQYXJ0ID0gYXdhaXQgbWQ1KGJ1Zik7XG4gICAgICBpZiAobWQ1UGFydCAhPT0gcGFydC5tZDUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1kNSBmb3IgcGFydCAke3BhcnQub3JkZXJ9IG9mIGZpbGUgJHtmaWxlSWR9YCk7XG4gICAgICB9XG4gICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgZGF0YTogYnVmLFxuICAgICAgICBvcmRlcjogcGFydC5vcmRlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgIDMsXG4gICAgICBmaWxlQ29udGVudC5wYXJ0cy5tYXAocCA9PiAoKTogUHJvbWlzZTx2b2lkPiA9PiBieVBhcnQocCkpXG4gICAgKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZENvbnRlbnQgPSBjb25jYXRlbmF0ZShcbiAgICAgIC4uLnBhcnRzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKS5tYXAocCA9PiBwLmRhdGEpXG4gICAgKTtcblxuICAgIC8vIGNvbnN0IG1kNUVuY3J5cHRlZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1kNShvZihlbmNyeXB0ZWRDb250ZW50KSkpO1xuICAgIGNvbnN0IG1kNUVuY3J5cHRlZCA9IGF3YWl0IG1kNShlbmNyeXB0ZWRDb250ZW50KTtcblxuICAgIGlmIChtZDVFbmNyeXB0ZWQgIT09IGZpbGVDb250ZW50Lm1kNUVuY3J5cHRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmNyeXB0ZWQgY29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGRlY3J5cHRDcnlwdG9Cb3goXG4gICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZUNvbnRlbnQua2V5KSxcbiAgICAgIGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIlxuICAgICAgICA/IGZpbGVDb250ZW50LnNlbmRlclB1YmxpY0tleVxuICAgICAgICA6IGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRDbG91ZFwiXG4gICAgICAgID8gZmlsZUNvbnRlbnQucHVibGljS2V5XG4gICAgICAgIDogdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuXG4gICAgLy8gVE9ETyBhZGQgYWJvcnRcbiAgICBjb25zdCBzcmMgPSBhd2FpdCBkZWNyeXB0KGtleSwgZW5jcnlwdGVkQ29udGVudCwgcHJvZ3Jlc3NEZWNyeXB0KTtcblxuICAgIC8vIGNvbnN0IG1kNUNvbnRlbnQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShtZDUob2Yoc3JjKSkpO1xuICAgIGNvbnN0IG1kNUNvbnRlbnQgPSBhd2FpdCBtZDUoc3JjKTtcblxuICAgIGlmIChtZDVDb250ZW50ICE9PSBmaWxlQ29udGVudC5tZDUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmNvbXByZXNzKHNyYyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWxlKHtcbiAgICBmaWxlSWQsXG4gICAgZmlsZW5hbWUsXG4gICAgaXNGYXZvcml0ZSxcbiAgICBkZWxldGVkQXRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIGZpbGVuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFZGaWxlPiB7XG4gICAgY29uc3QgZmlsZSA9IHZGaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgdGhyb3cgYENhbid0IGZpbmQgZmlsZSAke2ZpbGVJZH1gO1xuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBmaWxlbmFtZVxuICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShmaWxlbmFtZSwgZmlsZS51c2VyQXBwLm5hbWVLZXkpXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IHVwZGF0ZUZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwZGF0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBmaWxlbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBpc0Zhdm9yaXRlLFxuICAgICAgICAgIGRlbGV0ZWRBdFxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHVwZGF0ZSBmaWxlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBncWxWRmlsZVRvRXh0ZXJuYWwodXBkYXRlRmlsZSwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyByZWFkTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHJlYWRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICByZWFkTWFpbDogW3sgbWFpbElkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVhZE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyB1bnJlYWRNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdW5yZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdW5yZWFkTWFpbDogW3sgbWFpbElkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5yZWFkTWFpbCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGFwcFNldHRpbmdzKCk6IFByb21pc2U8VXNlckFwcFNldHRpbmdzIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGFwcFNldHRpbmdzOiB7XG4gICAgICAgICAgICBhdXRvRGlzY29ubmVjdERlbGF5OiB0cnVlLFxuICAgICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3VkRm9sZGVyRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXIuYXBwU2V0dGluZ3MgPz8gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcFNldHRpbmdzKFxuICAgIHNldHRpbmdzOiBQYXJ0aWFsPFVzZXJBcHBTZXR0aW5ncz5cbiAgKTogUHJvbWlzZTxVc2VyQXBwU2V0dGluZ3M+IHtcbiAgICBjb25zdCB7IHVwZGF0ZUFwcFNldHRpbmdzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVBcHBTZXR0aW5nczogW1xuICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9EaXNjb25uZWN0RGVsYXk6IHRydWUsXG4gICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFJlY2VpdmVkTWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgcmVjZWl2ZWRNYWlsczogZ3FsTWFpbFF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1haWxzID0gdXNlcj8ucmVjZWl2ZWRNYWlscyA/PyBbXTtcblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCByZWNlaXZlZE1haWxzID0gbmV3IEFycmF5PFJlY2VpdmVkTWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiBtYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgcmVjZWl2ZWRNYWlscy5wdXNoKG1haWwgYXMgUmVjZWl2ZWRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVjZWl2ZWRNYWlscztcbiAgfVxuXG4gIGFzeW5jIHNlbnRNYWlscygpOiBQcm9taXNlPFNlbnRNYWlsW10+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBzZW50TWFpbHM6IGdxbE1haWxRdWVyeVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYWlscyA9IHVzZXI/LnNlbnRNYWlscyA/PyBbXTtcblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCBzZW50TWFpbHMgPSBuZXcgQXJyYXk8U2VudE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgbWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIHNlbnRNYWlscy5wdXNoKG1haWwgYXMgU2VudE1haWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZW50TWFpbHM7XG4gIH1cblxuICBhc3luYyBkcmFmdE1haWxzKCk6IFByb21pc2U8RHJhZnRNYWlsW10+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5kcmFmdE1haWxzID8/IFtdO1xuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IGRyYWZ0TWFpbHMgPSBuZXcgQXJyYXk8RHJhZnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBkcmFmdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpIGFzIERyYWZ0TWFpbDtcbiAgICAgIGlmIChkcmFmdCkge1xuICAgICAgICBkcmFmdE1haWxzLnB1c2goZHJhZnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkcmFmdE1haWxzO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJGb2xkZXIgPSBhc3luYyAoXG4gICAgZm9sZGVySWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dEZvbGRlcnMgfCBudWxsPiA9PiB7XG4gICAgbGV0IGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuXG4gICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgZm9sZGVyID0gZm9sZGVyc0NhY2hlLmdldChmb2xkZXJJZCk7XG5cbiAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm9sZGVyLnVzZXJBcHA/Lm5hbWVLZXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogZm9sZGVySWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmb2xkZXIudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgcGVyVkZpbGUgPSBhc3luYyAoXG4gICAgdkZpbGVJZDogc3RyaW5nLFxuICAgIHB1YmxpY0tleTogc3RyaW5nXG4gICk6IFByb21pc2U8TmFtZUtleUlucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgIGlmICghdkZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudkZpbGUoeyBpZDogdkZpbGVJZCB9KTtcbiAgICAgIHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgICBpZiAoIXZGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdkZpbGUuaWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleCh2RmlsZS51c2VyQXBwLm5hbWVLZXkpLFxuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiB2RmlsZS5oaXN0b3J5Lm1hcChmID0+ICh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmLnVzZXIhLmtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pKVxuICAgIH07XG4gIH07XG5cbiAgcHJpdmF0ZSBfZWFjaFVzZXIgPSBhc3luYyAoXG4gICAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSxcbiAgICBzdWJqZWN0OiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGlkT3JNYWlsOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNYWlsUmVjaXBpZW50SW5wdXQgfCBudWxsPiA9PiB7XG4gICAgbGV0IHUgPSB1c2Vyc0NhY2hlLmdldChpZE9yTWFpbCk7XG4gICAgaWYgKCF1IHx8ICEoXCJwdWJsaWNLZXlcIiBpbiB1KSkge1xuICAgICAgdSA9XG4gICAgICAgIChhd2FpdCB0aGlzLnVzZXIoe1xuICAgICAgICAgIHVzZXJJZDogaWRPck1haWwsXG4gICAgICAgICAgd2l0aFB1YmxpY0tleTogdHJ1ZVxuICAgICAgICB9KSkgPz8gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIXUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEoXCJwdWJsaWNLZXlcIiBpbiB1KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVc2VyICR7aWRPck1haWx9IGhhdmUgbm8gcHVibGljIGtleWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY2lwaWVudHNGaWxlcyA9IG5ldyBBcnJheTxNYWlsRmlsZUlucHV0PigpO1xuXG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZUluSGlzdG9yeSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlSW5IaXN0b3J5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlSW5IaXN0b3J5ID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZUluSGlzdG9yeSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBmaWxlSW5IaXN0b3J5LnVzZXI/LmtleTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVjaXBpZW50c0ZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2lwaWVudElkOiB1LmlkLFxuICAgICAgYm9keTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiByZWNpcGllbnRzRmlsZXNcbiAgICB9O1xuICB9O1xufVxuIl19
|
|
3795
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOlsia3kiLCJheGlvcyIsIkJhc2VDbGllbnQiLCJ2RmlsZXNDYWNoZSIsImZvbGRlcnNDYWNoZSIsImZpbGVzQ2FjaGUiLCJ1c2Vyc0NhY2hlIiwic2VjcmV0c3RyZWFtS2V5Z2VuIiwiZW5jcnlwdFNlY3JldHN0cmVhbSIsImNvbXByZXNzIiwidW5jb21wcmVzcyIsImdxbEZvbGRlclRvRXh0ZXJuYWwiLCJncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCIsImdxbFZGaWxlVG9FeHRlcm5hbCIsImdxbFZGaWxlVG9JbnRlcm5hbCIsImludGVybmFsVkZpbGVUb1ZGaWxlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImdxbEZpbGVRdWVyeSIsImdxbEZvbGRlclF1ZXJ5IiwiZ3FsRm9sZGVyRnVsbFF1ZXJ5IiwiZ3FsTWFpbFF1ZXJ5IiwiZ3FsVkZpbGVRdWVyeSIsImdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5IiwiY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwiLCJlbmNyeXB0TmFtZSIsIm5hbWUiLCJuYW1lS2V5IiwiZnJvbV9oZXgiLCJmcm9tX3N0cmluZyIsImRhdGEiLCJuYW1lRW5jcnlwdGVkIiwidG9faGV4IiwiU2VjcmVjeUNsaWVudCIsInVhU2Vzc2lvbiIsInVhS2V5cyIsInVhSnd0IiwiZW52Iiwiand0IiwicGVyRm9sZGVyIiwiZm9sZGVySWQiLCJwdWJsaWNLZXkiLCJmb2xkZXIiLCJnZXQiLCJpZCIsInVzZXJBcHAiLCJwcml2YXRlS2V5IiwicGVyVkZpbGUiLCJ2RmlsZUlkIiwidkZpbGUiLCJmaWxlcyIsImhpc3RvcnkiLCJtYXAiLCJmIiwia2V5IiwidXNlciIsIl9lYWNoVXNlciIsInN1YmplY3QiLCJib2R5IiwiaWRPck1haWwiLCJ1IiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVuZGVmaW5lZCIsIkVycm9yIiwicmVjaXBpZW50c0ZpbGVzIiwiQXJyYXkiLCJmaWxlSW5IaXN0b3J5IiwiZmlsZSIsInB1c2giLCJmaWxlS2V5IiwicmVjaXBpZW50SWQiLCJhZGRGaWxlVG9IaXN0b3J5IiwiZmlsZUlkIiwiY2xpZW50IiwibXV0YXRpb24iLCJmaW5kIiwidXNlcnMiLCJmaWx0ZXIiLCJpbnB1dCIsInNoYXJlRmlsZUluSGlzdG9yeSIsInVwbG9hZEZpbGUiLCJlbmNyeXB0UHJvZ3Jlc3MiLCJ1cGxvYWRQcm9ncmVzcyIsInNpZ25hbCIsIkZpbGUiLCJVaW50OEFycmF5IiwiYXJyYXlCdWZmZXIiLCJmaWxlQnVmZmVyIiwiY29tcHJlc3NlZCIsImVuY3J5cHRlZEZpbGUiLCJtZDVGaWxlIiwibWQ1RW5jcnlwdGVkIiwiZW5jcnlwdGVkRmlsZUtleSIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVTaXplQmVmb3JlIiwiZmlsZVBhcnRTaXplIiwicGFydHMiLCJmaWVsZHMiLCJvcmRlciIsInVybCIsInRvdGFsIiwiY3VycmVudCIsInBlcmNlbnQiLCJsZW5ndGgiLCJ1cGxvYWRQYXJ0RW5kZWQiLCJ1cGxvYWRGaWxlUGFydEVuZCIsInVwbG9hZEVuZGVkIiwidXBsb2FkRmlsZUVuZCIsImNodW5rUGFydHMiLCJOdW1iZXIiLCJpbmRleCIsImNodW5rIiwicHJvZ3Jlc3NQYXJ0cyIsIm9uUHJvZ3Jlc3MiLCJwYXJ0IiwicHJvZ3Jlc3NFdmVudCIsIk9iamVjdCIsInZhbHVlcyIsInJlZHVjZSIsInBydiIsImN1ciIsImxvYWRlZCIsImJ5UGFydCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJwIiwiZW50cmllcyIsInZhbHVlIiwiYXBwZW5kIiwiQmxvYiIsInBvc3QiLCJvblVwbG9hZFByb2dyZXNzIiwicmVzcG9uc2UiLCJzdGF0dXMiLCJ1cGxvYWRGaWxlSW5DbG91ZCIsInNhdmVJbkNsb3VkIiwibG9nb3V0Iiwic2Vzc2lvbklkIiwiY2xlYXIiLCJjcmVhdGVGb2xkZXIiLCJwYXJlbnRGb2xkZXJJZCIsImVuY3J5cHRlZE5hbWUiLCJlbmNyeXB0ZWRLZXkiLCJwYXJlbnRGb2xkZXIiLCJQcm9taXNlIiwiYWxsIiwicmlnaHRzIiwic2hhcmVGb2xkZXIiLCJkZWxldGVkIiwicXVlcnkiLCJtYWlsIiwic2hhcmVWRmlsZSIsImgiLCJzaGFyZWRWRmlsZXMiLCJ2RmlsZXMiLCJ2RmlsZXNTaGFyZWRXaXRoTWUiLCJkZWxldGVkVkZpbGVzIiwic2hhcmVkRm9sZGVycyIsImZvbGRlcnMiLCJmb2xkZXJzU2hhcmVkV2l0aE1lIiwiZGVsZXRlZEZvbGRlcnMiLCJkZWxldGVkTWFpbHMiLCJtYWlsVHlwZSIsIm1haWxzIiwibSIsInNoYXJlRm9sZGVycyIsInZGaWxlSW5wdXQiLCJzaGFyZUZvbGRlckZpbmlzaCIsInVwZGF0ZUZvbGRlciIsImlzRmF2b3JpdGUiLCJkZWxldGVkQXQiLCJ1cGRhdGVBcHBOb3RpZmljYXRpb25zIiwibm90aWZpY2F0aW9ucyIsImVuYWJsZUFsbCIsImNsb3VkIiwiZGlzYWJsZUFsbFVudGlsIiwiRGF0ZSIsImFwcE5vdGlmaWNhdGlvbnMiLCJjcmVhdGVNYWlsIiwiY3VzdG9tTWVzc2FnZSIsImNyZWF0ZURyYWZ0TWFpbCIsInNlbmREcmFmdE1haWwiLCJtYWlsSW50ZWdyaXR5SWQiLCJ3YWl0aW5nUmVjZWl2ZWRNYWlscyIsImRhdGUiLCJhdHRhY2htZW50c0NvdW50Iiwic2VuZGVyIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJlbWFpbCIsInJlY2lwaWVudHMiLCJ0ZW1wb3JhcnlSZWNpcGllbnRzIiwidXBkYXRlRHJhZnRNYWlsIiwiZHJhZnRJZCIsInJlY2lwaWVudHNJZHMiLCJyZXBseVRvIiwiZHJhZnRNYWlscyIsImRyYWZ0cyIsImRyYWZ0IiwiZCIsImhhc2hLZXkiLCJoYXNoIiwicmFuZG9tYnl0ZXNfYnVmIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTIiwiY3J5cHRvX2dlbmVyaWNoYXNoIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTIiwiSlNPTiIsInN0cmluZ2lmeSIsInNlbmRlckZpbGVzIiwiZGVsZXRlRHJhZnRNYWlsIiwiZGVsZXRlVkZpbGVTaGFyaW5nIiwiZGVsZXRlRm9sZGVyU2hhcmluZyIsImR1cGxpY2F0ZVZGaWxlIiwiY3VzdG9tTmFtZSIsImRlbGV0ZUZvbGRlckNsb3VkVHJhc2giLCJpZHMiLCJkZWxldGVWRmlsZUNsb3VkVHJhc2giLCJkZWxldGVNYWlsVHJhc2giLCJlbXB0eU1haWxUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJGaWxlIiwicmVjb3ZlckZvbGRlciIsInJlY292ZXJNYWlsIiwibWFpbElkIiwiZGVsZXRlRmlsZSIsImRlbGV0ZVZGaWxlIiwiZGVsZXRlTWFpbCIsImhhcyIsInJlY2VpdmVkTWFpbHMiLCJzb21lIiwiZmlsZU1haWwiLCJlbmNyeXB0ZWROYW1lS2V5IiwiZmlsZW5hbWUiLCJtZSIsImluY2x1ZGVzIiwib3RoZXJzIiwiZHJhZnRNYWlsSWQiLCJzZW5kV2FpdGluZ0VtYWlscyIsInNlbnRNYWlscyIsImZpbHRlcmVkIiwic2VuZE9uZU1haWwiLCJyZWNpcGllbnQiLCJmaWxlQ29udGVudCIsIm9uRG93bmxvYWRQcm9ncmVzcyIsInByb2dyZXNzRGVjcnlwdCIsIl9fdHlwZW5hbWUiLCJjb250ZW50VXJsIiwidG90YWxTaXplIiwic2VuZGVyUHVibGljS2V5IiwidHJhbnNmZXJyZWRCeXRlcyIsInRvdGFsQnl0ZXMiLCJwciIsImJ1ZiIsIm1kNVBhcnQiLCJlbmNyeXB0ZWRDb250ZW50Iiwic29ydCIsImEiLCJiIiwic3JjIiwibWQ1Q29udGVudCIsInVwZGF0ZUZpbGUiLCJyZWFkTWFpbCIsInVucmVhZE1haWwiLCJhcHBTZXR0aW5ncyIsImF1dG9EaXNjb25uZWN0RGVsYXkiLCJjbG91ZEZpbGVEYXlzRm9yRGVsZXRlIiwiY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlIiwiaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlIiwiaGlzdG9yeU1heEZpbGVDb3VudCIsInVwZGF0ZUFwcFNldHRpbmdzIiwic2V0dGluZ3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE9BQU9BLEVBQVAsTUFBZSxJQUFmO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQixPQUFsQjtBQUNBLFNBQVNDLFVBQVQsUUFBMkIsa0JBQTNCO0FBQ0EsU0FBU0MsV0FBVCxFQUFzQkMsWUFBdEIsRUFBb0NDLFVBQXBDLEVBQWdEQyxVQUFoRCxRQUFrRSxhQUFsRTtBQUVBLFNBQVNDLGtCQUFULEVBQTZCQyxtQkFBN0IsUUFBd0QsbUJBQXhEO0FBQ0EsU0FBU0MsUUFBVCxFQUFtQkMsVUFBbkIsUUFBcUMsb0JBQXJDO0FBQ0EsU0FDRUMsbUJBREYsRUFFRUMsNkJBRkYsUUFHTyxxQkFIUDtBQUlBLFNBQ0VDLGtCQURGLEVBRUVDLGtCQUZGLEVBR0VDLG9CQUhGLFFBSU8sb0JBSlA7QUEyQkEsU0FBU0MsaUJBQVQsUUFBa0MsbUJBQWxDO0FBQ0EsU0FBU0MsTUFBVCxRQUF1QixjQUF2QjtBQUVBLFNBQVNDLGdCQUFULEVBQTJCQyxnQkFBM0IsUUFBbUQsb0JBQW5EO0FBRUEsU0FBU0MsUUFBVCxRQUF5QixTQUF6QjtBQUNBLFNBQVNDLEdBQVQsUUFBb0Isa0JBQXBCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsT0FBbEIsUUFBaUMscUJBQWpDO0FBQ0EsU0FBU0MsTUFBVCxFQUFpQkMsV0FBakIsRUFBOEJDLFNBQTlCLEVBQXlDQyxlQUF6QyxRQUFnRSxhQUFoRTtBQUNBLFNBQ0VDLFlBREYsRUFFRUMsY0FGRixFQUdFQyxrQkFIRixFQUlFQyxZQUpGLEVBS0VDLGFBTEYsRUFNRUMsdUJBTkYsUUFPTyxvQkFQUDtBQVNBLFNBQVNDLDZCQUFULFFBQThDLG1CQUE5QyxDLENBQ0E7QUFDQTs7QUFZQSxJQUFNQyxXQUFXO0FBQUEsc0VB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QixDQUFDOEksQ0FBRCw4QkFBSSxJQUFKLGdCQUR0Qjs7QUFFckIsb0JBQUlrQyxLQUFKLEVBQVc7QUFDVEYsa0JBQUFBLFVBQVUsQ0FBQ2pJLElBQVgsQ0FBZ0JtSSxLQUFoQjtBQUNEO0FBQ0Y7O0FBckJILGlEQXVCU0YsVUF2QlQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FybkRGOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUEsRUFBbUM5TSxVQUFuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWFpbFR5cGUgfSBmcm9tIFwiLi8uLi96ZXVzL2luZGV4XCI7XG5pbXBvcnQgdHlwZSB7IERvd25sb2FkUHJvZ3Jlc3MgfSBmcm9tIFwia3lcIjtcbmltcG9ydCBreSBmcm9tIFwia3lcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7IEJhc2VDbGllbnQgfSBmcm9tIFwiLi4vQmFzZUNsaWVudC5qc1wiO1xuaW1wb3J0IHsgdkZpbGVzQ2FjaGUsIGZvbGRlcnNDYWNoZSwgZmlsZXNDYWNoZSwgdXNlcnNDYWNoZSB9IGZyb20gXCIuLi9jYWNoZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9ncmVzcyB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHsgc2VjcmV0c3RyZWFtS2V5Z2VuLCBlbmNyeXB0U2VjcmV0c3RyZWFtIH0gZnJvbSBcIi4uL2NyeXB0by9maWxlLmpzXCI7XG5pbXBvcnQgeyBjb21wcmVzcywgdW5jb21wcmVzcyB9IGZyb20gXCIuLi9taW5pZnkvaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGdxbEZvbGRlclRvRXh0ZXJuYWwsXG4gIGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsXG59IGZyb20gXCIuL2NvbnZlcnQvZm9sZGVyLmpzXCI7XG5pbXBvcnQge1xuICBncWxWRmlsZVRvRXh0ZXJuYWwsXG4gIGdxbFZGaWxlVG9JbnRlcm5hbCxcbiAgaW50ZXJuYWxWRmlsZVRvVkZpbGVcbn0gZnJvbSBcIi4vY29udmVydC92RmlsZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBNYWlsRmlsZUlucHV0LFxuICBSZWNlaXZlZE1haWwsXG4gIFNlbnRNYWlsLFxuICBGb2xkZXIsXG4gIFZGaWxlV2l0aEZvbGRlcixcbiAgRm9sZGVyRnVsbCxcbiAgVXNlckFwcFNldHRpbmdzLFxuICBVc2VyQXBwTm90aWZpY2F0aW9ucyxcbiAgRmlsZSBhcyBTZWNyZWN5RmlsZSxcbiAgV2FpdGluZ1JlY2VpdmVkTWFpbCxcbiAgRHJhZnRNYWlsLFxuICBNYWlsUmVjaXBpZW50SW5wdXQsXG4gIFZGaWxlLFxuICBTaGFyZUZvbGRlcnNJbnB1dCxcbiAgTmFtZUtleUlucHV0LFxuICBOYW1lS2V5SW5wdXRGb2xkZXJzLFxuICBNYWlsLFxuICBTaGFyZUZpbGVJbkhpc3RvcnlJbnB1dCxcbiAgRmlsZVBhcnRSZXNwb25zZSxcbiAgRmlsZUNvbnRlbnRQYXJ0XG59IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBncWxGaWxlVG9FeHRlcm5hbCB9IGZyb20gXCIuL2NvbnZlcnQvZmlsZS5qc1wiO1xuaW1wb3J0IHsgc29kaXVtIH0gZnJvbSBcIi4uL3NvZGl1bS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXlQYWlyIH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZGVjcnlwdENyeXB0b0JveCwgZW5jcnlwdENyeXB0b0JveCB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgU2VjcmVjeUVudiB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNob3J0aWRcIjtcbmltcG9ydCB7IG1kNSB9IGZyb20gXCIuLi93b3JrZXIvbWQ1LmpzXCI7XG5pbXBvcnQgeyBlbmNyeXB0LCBkZWNyeXB0IH0gZnJvbSBcIi4uL3dvcmtlci9zb2RpdW0uanNcIjtcbmltcG9ydCB7IGNodW5rcywgY29uY2F0ZW5hdGUsIGVudW1lcmF0ZSwgcHJvbWlzZUFsbExpbWl0IH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICBncWxGaWxlUXVlcnksXG4gIGdxbEZvbGRlclF1ZXJ5LFxuICBncWxGb2xkZXJGdWxsUXVlcnksXG4gIGdxbE1haWxRdWVyeSxcbiAgZ3FsVkZpbGVRdWVyeSxcbiAgZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbn0gZnJvbSBcIi4vdHlwZXMvcXVlcmllcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSaWdodHMgfSBmcm9tIFwiLi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwgfSBmcm9tIFwiLi9jb252ZXJ0L21haWwuanNcIjtcbi8vIGltcG9ydCB7IG1kNSB9IGZyb20gXCIuLi93b3JrZXIvaW5kZXguanNcIjtcbi8vIGltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCB0eXBlIE5ld01haWwgPSB7XG4gIGJvZHk6IHN0cmluZztcbiAgc3ViamVjdDogc3RyaW5nO1xuICBmaWxlczogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdO1xuICByZWNpcGllbnRzSWRzOiBzdHJpbmdbXTtcbiAgcmVwbHlUbz86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBQcm9ncmVzcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuY29uc3QgZW5jcnlwdE5hbWUgPSBhc3luYyAobmFtZTogc3RyaW5nLCBuYW1lS2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGVuY3J5cHRTZWNyZXRzdHJlYW0oXG4gICAgc29kaXVtLmZyb21faGV4KG5hbWVLZXkpLFxuICAgIHNvZGl1bS5mcm9tX3N0cmluZyhuYW1lKVxuICApO1xuICBjb25zdCBuYW1lRW5jcnlwdGVkID0gc29kaXVtLnRvX2hleChkYXRhKTtcbiAgcmV0dXJuIG5hbWVFbmNyeXB0ZWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgU2VjcmVjeUNsaWVudCBleHRlbmRzIEJhc2VDbGllbnQge1xuICBqd3Q6IHN0cmluZztcblxuICAja2V5czogS2V5UGFpcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB1YVNlc3Npb246IHN0cmluZyxcbiAgICB1YUtleXM6IEtleVBhaXIsXG4gICAgdWFKd3Q6IHN0cmluZyxcbiAgICBlbnY6IFNlY3JlY3lFbnZcbiAgKSB7XG4gICAgc3VwZXIodWFTZXNzaW9uLCBlbnYpO1xuICAgIHRoaXMuand0ID0gdWFKd3Q7XG4gICAgdGhpcy4ja2V5cyA9IHVhS2V5cztcbiAgfVxuXG4gIGFzeW5jIGFkZEZpbGVUb0hpc3Rvcnkoe1xuICAgIGZpbGVJZCxcbiAgICB2RmlsZUlkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFZGaWxlPiB7XG4gICAgY29uc3QgeyBhZGRGaWxlVG9IaXN0b3J5IH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBhZGRGaWxlVG9IaXN0b3J5OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgdkZpbGVJZFxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCB2RmlsZSA9IGF3YWl0IGdxbFZGaWxlVG9JbnRlcm5hbChhZGRGaWxlVG9IaXN0b3J5LCB0aGlzLiNrZXlzKTtcbiAgICBjb25zdCBmaWxlID0gdkZpbGUuaGlzdG9yeS5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgdXNlcnMgPSB2RmlsZS51c2Vycy5maWx0ZXIoXG4gICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGlucHV0OiBTaGFyZUZpbGVJbkhpc3RvcnlJbnB1dCA9IHtcbiAgICAgICAgZmlsZUlkOiBmaWxlLmlkLFxuICAgICAgICB1c2VyczogdXNlcnMubWFwKChbdV0pID0+ICh7XG4gICAgICAgICAgaWQ6IHUuaWQsXG4gICAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGUudXNlciEua2V5KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSkpXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHNoYXJlRmlsZUluSGlzdG9yeTogW3sgaW5wdXQsIHZGaWxlSWQgfSwgdHJ1ZV1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJuYWxWRmlsZVRvVkZpbGUodkZpbGUpO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZSh7XG4gICAgZmlsZSxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGZpbGVCdWZmZXIgPVxuICAgICAgZmlsZSBpbnN0YW5jZW9mIEZpbGUgPyBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpIDogZmlsZTtcbiAgICBjb25zdCBjb21wcmVzc2VkID0gY29tcHJlc3MoZmlsZUJ1ZmZlcik7XG5cbiAgICBjb25zdCB7XG4gICAgICBkYXRhOiBlbmNyeXB0ZWRGaWxlLFxuICAgICAgbWQ1OiBtZDVGaWxlLFxuICAgICAgbWQ1RW5jcnlwdGVkXG4gICAgfSA9IGF3YWl0IGVuY3J5cHQoZmlsZUtleSwgY29tcHJlc3NlZCwgZW5jcnlwdFByb2dyZXNzLCBzaWduYWwpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkRmlsZUtleSA9IGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICBmaWxlS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuXG4gICAgY29uc3QgeyB1cGxvYWRGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGxvYWRGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlU2l6ZTogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICAgIGZpbGVTaXplQmVmb3JlOiBmaWxlQnVmZmVyLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChlbmNyeXB0ZWRGaWxlS2V5KSxcbiAgICAgICAgICBtZDVFbmNyeXB0ZWQsXG4gICAgICAgICAgbWQ1OiBtZDVGaWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQ6IHRydWUsXG4gICAgICAgICAgZmlsZVBhcnRTaXplOiB0cnVlLFxuICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICBmaWVsZHM6IHRydWUsXG4gICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgIHVybDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICBjdXJyZW50OiAwLFxuICAgICAgcGVyY2VudDogMFxuICAgIH0pO1xuXG4gICAgaWYgKHVwbG9hZEZpbGUucGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgY3VycmVudDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBwZXJjZW50OiAxXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHVwbG9hZEZpbGUuZmlsZUlkO1xuICAgIH1cblxuICAgIGNvbnN0IHVwbG9hZFBhcnRFbmRlZCA9IGFzeW5jIChcbiAgICAgIG1kNTogc3RyaW5nLFxuICAgICAgb3JkZXI6IG51bWJlclxuICAgICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlUGFydEVuZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgICB1cGxvYWRGaWxlUGFydEVuZDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpbGVJZDogdXBsb2FkRmlsZS5maWxlSWQsXG4gICAgICAgICAgICBtZDUsXG4gICAgICAgICAgICBvcmRlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHVwbG9hZEZpbGVQYXJ0RW5kO1xuICAgIH07XG5cbiAgICBjb25zdCB1cGxvYWRFbmRlZCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgICAgIGNvbnN0IHsgdXBsb2FkRmlsZUVuZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgICB1cGxvYWRGaWxlRW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLmZpbGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHVwbG9hZEZpbGVFbmQgPz8gbnVsbDtcbiAgICB9O1xuXG4gICAgY29uc3QgY2h1bmtQYXJ0cyA9IG5ldyBBcnJheTx7XG4gICAgICBvcmRlcjogbnVtYmVyO1xuICAgICAgZGF0YTogVWludDhBcnJheTtcbiAgICAgIG1kNTogc3RyaW5nO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY2h1bmtdIG9mIGVudW1lcmF0ZShcbiAgICAgIGNodW5rcyhlbmNyeXB0ZWRGaWxlLCBOdW1iZXIodXBsb2FkRmlsZS5maWxlUGFydFNpemUpKVxuICAgICkpIHtcbiAgICAgIGNodW5rUGFydHMucHVzaCh7XG4gICAgICAgIG9yZGVyOiBpbmRleCArIDEsXG4gICAgICAgIGRhdGE6IGNodW5rLFxuICAgICAgICBtZDU6IGF3YWl0IG1kNShjaHVuaylcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIFByb2dyZXNzRXZlbnQ+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChwYXJ0OiBudW1iZXIsIHByb2dyZXNzRXZlbnQ6IFByb2dyZXNzRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgY3VycmVudCA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci5sb2FkZWQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudDogY3VycmVudCAvIGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ5UGFydCA9IGFzeW5jIChwYXJ0OiBGaWxlUGFydFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgY29uc3QgY2h1bmsgPSBjaHVua1BhcnRzLmZpbmQocCA9PiBwLm9yZGVyID09PSBwYXJ0Lm9yZGVyKTtcbiAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFydC5maWVsZHMpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgXCJmaWxlXCIsXG4gICAgICAgIG5ldyBCbG9iKFtjaHVuay5kYXRhXSksXG4gICAgICAgIGAke3VwbG9hZEZpbGUuZmlsZUlkfS0ke2NodW5rLm9yZGVyfWBcbiAgICAgICk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGF4aW9zLnBvc3QocGFydC51cmwsIGZvcm1EYXRhLCB7XG4gICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogcHJvZ3Jlc3NFdmVudCA9PlxuICAgICAgICAgICAgb25Qcm9ncmVzcyhwYXJ0Lm9yZGVyLCBwcm9ncmVzc0V2ZW50KSxcbiAgICAgICAgICBzaWduYWxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdXBsb2FkUGFydEVuZGVkKGNodW5rLm1kNSwgY2h1bmsub3JkZXIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoKGUgYXMgYW55KS5yZXNwb25zZS5zdGF0dXMgPT09IDApIHtcbiAgICAgICAgICAvLyBUT0RPIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMva3kvaXNzdWVzLzMwNVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYXdhaXQgcHJvbWlzZUFsbExpbWl0KFxuICAgICAgMyxcbiAgICAgIHVwbG9hZEZpbGUucGFydHMubWFwKHAgPT4gKCk6IFByb21pc2U8dm9pZD4gPT4gYnlQYXJ0KHApKVxuICAgICk7XG5cbiAgICByZXR1cm4gdXBsb2FkRW5kZWQoKTtcbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEZpbGVJbkNsb3VkKHtcbiAgICBmaWxlLFxuICAgIG5hbWUsXG4gICAgZm9sZGVySWQsXG4gICAgZW5jcnlwdFByb2dyZXNzLFxuICAgIHVwbG9hZFByb2dyZXNzLFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZTogZ2xvYmFsVGhpcy5GaWxlIHwgVWludDhBcnJheTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmc7XG4gICAgZW5jcnlwdFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB1cGxvYWRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcj4ge1xuICAgIGNvbnN0IGZpbGVJZCA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZSh7XG4gICAgICBmaWxlLFxuICAgICAgZW5jcnlwdFByb2dyZXNzLFxuICAgICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgICBzaWduYWxcbiAgICB9KTtcbiAgICBpZiAoIWZpbGVJZCkge1xuICAgICAgdGhyb3cgYENhbid0IHVwbG9hZCBmaWxlYDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2F2ZUluQ2xvdWQoeyBmaWxlSWQsIG5hbWUsIGZvbGRlcklkIH0pO1xuICB9XG5cbiAgYXN5bmMgbG9nb3V0KHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB2RmlsZXNDYWNoZS5jbGVhcigpO1xuICAgIGZpbGVzQ2FjaGUuY2xlYXIoKTtcbiAgICBmb2xkZXJzQ2FjaGUuY2xlYXIoKTtcbiAgICBhd2FpdCBzdXBlci5sb2dvdXQoc2Vzc2lvbklkKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZvbGRlcih7XG4gICAgbmFtZSxcbiAgICBwYXJlbnRGb2xkZXJJZFxuICB9OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbDtcbiAgfSk6IFByb21pc2U8Rm9sZGVyRnVsbD4ge1xuICAgIGNvbnN0IGtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBzb2RpdW0udG9faGV4KGtleSkpO1xuICAgIGNvbnN0IGVuY3J5cHRlZEtleSA9IGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICBrZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG4gICAgY29uc3QgeyBjcmVhdGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGNyZWF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoZW5jcnlwdGVkS2V5KVxuICAgICAgICB9LFxuICAgICAgICBncWxGb2xkZXJGdWxsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIWNyZWF0ZUZvbGRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBjcmVhdGUgZm9sZGVyYCk7XG4gICAgfVxuICAgIGNvbnN0IGZvbGRlciA9IGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsKFxuICAgICAgY3JlYXRlRm9sZGVyLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG5cbiAgICBjb25zdCB1c2VycyA9XG4gICAgICBmb2xkZXIucGFyZW50Rm9sZGVyPy51c2Vycz8uZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICkgPz8gW107XG5cbiAgICBpZiAodXNlcnMubGVuZ3RoKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdXNlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlRm9sZGVyKHtcbiAgICAgICAgICAgIGZvbGRlcklkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXI7XG4gIH1cblxuICBhc3luYyBmb2xkZXIoe1xuICAgIGlkLFxuICAgIGRlbGV0ZWRcbiAgfToge1xuICAgIGlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0gPSB7fSk6IFByb21pc2U8Rm9sZGVyRnVsbCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZm9sZGVyOiBbeyBkZWxldGVkLCBpZCB9LCBncWxGb2xkZXJGdWxsUXVlcnldXG4gICAgfSk7XG4gICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZ3FsRm9sZGVyVG9FeHRlcm5hbEZvbGRlckZ1bGwoZm9sZGVyLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIGZpbGUoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2VjcmVjeUZpbGUgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBmaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICBncWxGaWxlUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZ3FsRmlsZVRvRXh0ZXJuYWwoZmlsZSwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyB2RmlsZSh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXIgfCBudWxsPiB7XG4gICAgY29uc3QgeyB2RmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCF2RmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpIGFzIFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPjtcbiAgfVxuXG4gIGFzeW5jIG1haWwoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8TWFpbCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIG1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbE1haWxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFtYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobWFpbCwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyBzaGFyZVZGaWxlKHtcbiAgICB2RmlsZUlkLFxuICAgIHVzZXJJZCxcbiAgICByaWdodHNcbiAgfToge1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICByaWdodHM6IFJpZ2h0cztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgIGlmICghdkZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudkZpbGUoeyBpZDogdkZpbGVJZCB9KTtcbiAgICAgIHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgICBpZiAoIXZGaWxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy51c2VyKHsgdXNlcklkLCB3aXRoUHVibGljS2V5OiB0cnVlIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICBzb2RpdW0uZnJvbV9oZXgodkZpbGUudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgdXNlci5wdWJsaWNLZXksXG4gICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBoaXN0b3J5ID0gbmV3IEFycmF5PHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBrZXk6IHN0cmluZztcbiAgICB9PigpO1xuXG4gICAgZm9yIChjb25zdCBoIG9mIHZGaWxlLmhpc3RvcnkpIHtcbiAgICAgIGlmICghaC51c2VyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaGlzdG9yeS5wdXNoKHtcbiAgICAgICAgaWQ6IGguaWQsXG4gICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGgudXNlci5rZXkpLFxuICAgICAgICAgICAgdXNlci5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2hhcmVWRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdkZpbGVJZCxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIG5hbWVLZXksXG4gICAgICAgICAgaGlzdG9yeVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2hhcmVWRmlsZSA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHNoYXJlZFZGaWxlcygpOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBzaGFyZWRWRmlsZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHNoYXJlZFZGaWxlczogZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlcyA9IG5ldyBBcnJheTxWRmlsZVdpdGhGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHZGaWxlIG9mIHNoYXJlZFZGaWxlcykge1xuICAgICAgdkZpbGVzLnB1c2goXG4gICAgICAgIChhd2FpdCBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpKSBhcyBWRmlsZVdpdGhGb2xkZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlcztcbiAgfVxuXG4gIGFzeW5jIHZGaWxlc1NoYXJlZFdpdGhNZSgpOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyB2RmlsZXNTaGFyZWRXaXRoTWUgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHZGaWxlc1NoYXJlZFdpdGhNZTogZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlcyA9IG5ldyBBcnJheTxWRmlsZVdpdGhGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHZGaWxlIG9mIHZGaWxlc1NoYXJlZFdpdGhNZSkge1xuICAgICAgdkZpbGVzLnB1c2goXG4gICAgICAgIChhd2FpdCBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpKSBhcyBWRmlsZVdpdGhGb2xkZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlcztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWRWRmlsZXMoKTogUHJvbWlzZTxWRmlsZVtdPiB7XG4gICAgY29uc3QgeyBkZWxldGVkVkZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBkZWxldGVkVkZpbGVzOiBncWxWRmlsZVF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCB2RmlsZXMgPSBuZXcgQXJyYXk8VkZpbGU+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHZGaWxlIG9mIGRlbGV0ZWRWRmlsZXMpIHtcbiAgICAgIHZGaWxlcy5wdXNoKChhd2FpdCBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpKSBhcyBWRmlsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlcztcbiAgfVxuXG4gIGFzeW5jIHNoYXJlZEZvbGRlcnMoKTogUHJvbWlzZTxGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgc2hhcmVkRm9sZGVycyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgc2hhcmVkRm9sZGVyczogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2Ygc2hhcmVkRm9sZGVycykge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBmb2xkZXJzU2hhcmVkV2l0aE1lKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IGZvbGRlcnNTaGFyZWRXaXRoTWUgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGZvbGRlcnNTaGFyZWRXaXRoTWU6IGdxbEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2xkZXJzID0gbmV3IEFycmF5PEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIGZvbGRlcnNTaGFyZWRXaXRoTWUpIHtcbiAgICAgIGZvbGRlcnMucHVzaChhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXJzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZEZvbGRlcnMoKTogUHJvbWlzZTxGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgZGVsZXRlZEZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGRlbGV0ZWRGb2xkZXJzOiBncWxGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9sZGVycyA9IG5ldyBBcnJheTxGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBkZWxldGVkRm9sZGVycykge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBkZWxldGVkTWFpbHMoeyBtYWlsVHlwZSB9OiB7IG1haWxUeXBlOiBNYWlsVHlwZSB9KTogUHJvbWlzZTxNYWlsW10+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRNYWlscyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZGVsZXRlZE1haWxzOiBbeyBtYWlsVHlwZSB9LCBncWxNYWlsUXVlcnldXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYWlscyA9IG5ldyBBcnJheTxNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIGRlbGV0ZWRNYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgbWFpbHMucHVzaChtYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFpbHM7XG4gIH1cblxuICBhc3luYyBzaGFyZUZvbGRlcih7XG4gICAgZm9sZGVySWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgZm9sZGVySWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICByaWdodHM6IFJpZ2h0cztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXIoeyB1c2VySWQsIHdpdGhQdWJsaWNLZXk6IHRydWUgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeyBzaGFyZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2hhcmVGb2xkZXI6IFtcbiAgICAgICAgeyBmb2xkZXJJZCwgdXNlcklkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB2RmlsZXM6IHRydWUsXG4gICAgICAgICAgZm9sZGVyczogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCBzaGFyZUZvbGRlcnM6IFNoYXJlRm9sZGVyc0lucHV0ID0ge1xuICAgICAgdkZpbGVzOiBbXSxcbiAgICAgIGZvbGRlcnM6IFtdXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2hhcmVGb2xkZXIuZm9sZGVycykge1xuICAgICAgY29uc3QgbmFtZUtleSA9IGF3YWl0IHRoaXMucGVyRm9sZGVyKGlkLCB1c2VyLnB1YmxpY0tleSk7XG4gICAgICBpZiAobmFtZUtleSkge1xuICAgICAgICBzaGFyZUZvbGRlcnMuZm9sZGVycy5wdXNoKG5hbWVLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2hhcmVGb2xkZXIudkZpbGVzKSB7XG4gICAgICBjb25zdCB2RmlsZUlucHV0ID0gYXdhaXQgdGhpcy5wZXJWRmlsZShpZCwgdXNlci5wdWJsaWNLZXkpO1xuICAgICAgaWYgKHZGaWxlSW5wdXQpIHtcbiAgICAgICAgc2hhcmVGb2xkZXJzLnZGaWxlcy5wdXNoKHZGaWxlSW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVGb2xkZXJGaW5pc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNoYXJlRm9sZGVyRmluaXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHNoYXJlRm9sZGVyc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2hhcmVGb2xkZXJGaW5pc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyB1cGRhdGVGb2xkZXIoe1xuICAgIGZvbGRlcklkLFxuICAgIG5hbWUsXG4gICAgaXNGYXZvcml0ZSxcbiAgICBkZWxldGVkQXRcbiAgfToge1xuICAgIGZvbGRlcklkOiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgaXNGYXZvcml0ZT86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxGb2xkZXJGdWxsPiB7XG4gICAgbGV0IGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuICAgIGlmICghZm9sZGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvbGRlcih7IGlkOiBmb2xkZXJJZCB9KTtcbiAgICAgIGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuICAgICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgICAgdGhyb3cgYENhbid0IGZpbmQgZm9sZGVyICR7Zm9sZGVySWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuYW1lID0gbmFtZVxuICAgICAgPyBmb2xkZXIudXNlckFwcD8ubmFtZUtleVxuICAgICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIGZvbGRlci51c2VyQXBwLm5hbWVLZXkpXG4gICAgICAgIDogbmFtZVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyB1cGRhdGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwZGF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpc0Zhdm9yaXRlLFxuICAgICAgICAgIGRlbGV0ZWRBdFxuICAgICAgICB9LFxuICAgICAgICBncWxGb2xkZXJGdWxsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlRm9sZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZm9sZGVyXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCh1cGRhdGVGb2xkZXIsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwTm90aWZpY2F0aW9ucyhcbiAgICBub3RpZmljYXRpb25zOiBQYXJ0aWFsPFVzZXJBcHBOb3RpZmljYXRpb25zPlxuICApOiBQcm9taXNlPFVzZXJBcHBOb3RpZmljYXRpb25zIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdXBkYXRlQXBwTm90aWZpY2F0aW9ucyB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdXBkYXRlQXBwTm90aWZpY2F0aW9uczogW1xuICAgICAgICBub3RpZmljYXRpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICAgIG1haWw6IHRydWUsXG4gICAgICAgICAgY2xvdWQ6IHRydWUsXG4gICAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlQXBwTm90aWZpY2F0aW9ucykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMsXG4gICAgICBkaXNhYmxlQWxsVW50aWw6IHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMuZGlzYWJsZUFsbFVudGlsXG4gICAgICAgID8gbmV3IERhdGUodXBkYXRlQXBwTm90aWZpY2F0aW9ucy5kaXNhYmxlQWxsVW50aWwpXG4gICAgICAgIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBhc3luYyBhcHBOb3RpZmljYXRpb25zKCk6IFByb21pc2U8VXNlckFwcE5vdGlmaWNhdGlvbnMgfCBudWxsPiB7XG4gICAgY29uc3QgeyBhcHBOb3RpZmljYXRpb25zIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBhcHBOb3RpZmljYXRpb25zOiB7XG4gICAgICAgIGVuYWJsZUFsbDogdHJ1ZSxcbiAgICAgICAgbWFpbDogdHJ1ZSxcbiAgICAgICAgY2xvdWQ6IHRydWUsXG4gICAgICAgIGRpc2FibGVBbGxVbnRpbDogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFhcHBOb3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXBwTm90aWZpY2F0aW9ucyxcbiAgICAgIGRpc2FibGVBbGxVbnRpbDogYXBwTm90aWZpY2F0aW9ucy5kaXNhYmxlQWxsVW50aWxcbiAgICAgICAgPyBuZXcgRGF0ZShhcHBOb3RpZmljYXRpb25zLmRpc2FibGVBbGxVbnRpbClcbiAgICAgICAgOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU1haWwoXG4gICAgZGF0YTogTmV3TWFpbCxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtYWlsID0gYXdhaXQgdGhpcy5jcmVhdGVEcmFmdE1haWwoZGF0YSk7XG4gICAgaWYgKCFtYWlsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbmREcmFmdE1haWwobWFpbC5tYWlsSW50ZWdyaXR5SWQsIGN1c3RvbU1lc3NhZ2UpO1xuICB9XG5cbiAgYXN5bmMgd2FpdGluZ1JlY2VpdmVkTWFpbHMoKTogUHJvbWlzZTxXYWl0aW5nUmVjZWl2ZWRNYWlsW10+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICB3YWl0aW5nUmVjZWl2ZWRNYWlsczoge1xuICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBzZW5kZXI6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50czoge1xuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBnZXQgd2FpdGluZyByZWNlaXZlZCBtYWlsc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlci53YWl0aW5nUmVjZWl2ZWRNYWlscy5tYXAobSA9PiAoe1xuICAgICAgaWQ6IGdlbmVyYXRlKCksXG4gICAgICAuLi5tLFxuICAgICAgZGF0ZTogbmV3IERhdGUobS5kYXRlKVxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgeyBib2R5LCBzdWJqZWN0LCBmaWxlcywgcmVjaXBpZW50c0lkcywgcmVwbHlUbyB9OiBQYXJ0aWFsPE5ld01haWw+XG4gICk6IFByb21pc2U8RHJhZnRNYWlsIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRyYWZ0cyA9IGF3YWl0IHRoaXMuZHJhZnRNYWlscygpO1xuICAgIGNvbnN0IGRyYWZ0ID0gZHJhZnRzLmZpbmQoZCA9PiBkLm1haWxJbnRlZ3JpdHlJZCA9PT0gZHJhZnRJZCk7XG4gICAgaWYgKCFkcmFmdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRyYWZ0ICR7ZHJhZnRJZH1gKTtcbiAgICB9XG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoYm9keSB8fCBzdWJqZWN0KSB7XG4gICAgICBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICAgIGhhc2ggPSBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICAgIGhhc2hLZXksXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgICAgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZmlsZS51c2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc2VuZGVyRmlsZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGZpbGUuaWQsXG4gICAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmaWxlLnVzZXIua2V5KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHVwZGF0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdXBkYXRlRHJhZnRNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdElkLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHJlY2lwaWVudHNJZHMsXG4gICAgICAgICAgcmVwbHlUbyxcbiAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgICAgICA/IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhib2R5KSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc3ViamVjdDogc3ViamVjdFxuICAgICAgICAgICAgPyBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHNlbmRlckZpbGVzLFxuICAgICAgICAgIGhhc2gsXG4gICAgICAgICAgaGFzaEtleVxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICB1cGRhdGVEcmFmdE1haWwsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSBhcyBEcmFmdE1haWw7XG4gIH1cblxuICBhc3luYyBkZWxldGVEcmFmdE1haWwoZHJhZnRJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVEcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZURyYWZ0TWFpbCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlU2hhcmluZyh7XG4gICAgdkZpbGVJZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVkZpbGVTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVWRmlsZVNoYXJpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlVkZpbGVTaGFyaW5nO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRm9sZGVyU2hhcmluZyh7XG4gICAgZm9sZGVySWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXJTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVGb2xkZXJTaGFyaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZCxcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVGb2xkZXJTaGFyaW5nO1xuICB9XG5cbiAgYXN5bmMgZHVwbGljYXRlVkZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICBmb2xkZXJJZCxcbiAgICBjdXN0b21OYW1lXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBmb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgY3VzdG9tTmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgZmlsZSA9IHZGaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy52RmlsZSh7IGlkOiBmaWxlSWQgfSk7XG4gICAgICBmaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCk7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICgke2ZpbGVJZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXN0b21OYW1lID0gY3VzdG9tTmFtZVxuICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShjdXN0b21OYW1lLCBmaWxlLnVzZXJBcHAubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgZHVwbGljYXRlVkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGR1cGxpY2F0ZVZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgY3VzdG9tTmFtZVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZHVwbGljYXRlVkZpbGU7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXJDbG91ZFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVkZpbGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZUNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsVHJhc2goeyBpZHMgfTogeyBpZHM6IEFycmF5PHN0cmluZz4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVNYWlsVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZU1haWxUcmFzaDtcbiAgfVxuXG4gIGFzeW5jIGVtcHR5TWFpbFRyYXNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZW1wdHlNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5TWFpbFRyYXNoOiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW1wdHlNYWlsVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBlbXB0eUNsb3VkVHJhc2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBlbXB0eUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5Q2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJGaWxlKHsgZmlsZUlkIH06IHsgZmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlckZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHJlY292ZXJGaWxlOiBbeyBmaWxlSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyRmlsZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJGb2xkZXIoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlckZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgcmVjb3ZlckZvbGRlcjogW3sgaWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyRm9sZGVyID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVjb3Zlck1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyByZWNvdmVyTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgcmVjb3Zlck1haWw6IFt7IG1haWxJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlY292ZXJNYWlsO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIHZGaWxlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIHZGaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVGaWxlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVkZpbGUoeyBmaWxlSWQgfTogeyBmaWxlSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZVZGaWxlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZU1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIG1haWxJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZU1haWw7XG4gIH1cblxuICBhc3luYyBzYXZlSW5DbG91ZCh7XG4gICAgZmlsZUlkLFxuICAgIG5hbWUsXG4gICAgZm9sZGVySWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmb2xkZXJJZD86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPiB7XG4gICAgaWYgKGZvbGRlcklkICYmICFmb2xkZXJzQ2FjaGUuaGFzKGZvbGRlcklkKSkge1xuICAgICAgYXdhaXQgdGhpcy5mb2xkZXIoeyBpZDogZm9sZGVySWQgfSk7XG4gICAgICBpZiAoIWZvbGRlcnNDYWNoZS5oYXMoZm9sZGVySWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAke2ZvbGRlcklkfSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQga2V5ID0gXCJcIjtcblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuXG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZmlsZUlkIH0pO1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCkgPz8gbnVsbDtcbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICBjb25zdCByZWNlaXZlZE1haWxzID0gYXdhaXQgdGhpcy5yZWNlaXZlZE1haWxzKCk7XG4gICAgICAgIGNvbnN0IG1haWwgPSByZWNlaXZlZE1haWxzLmZpbmQobSA9PlxuICAgICAgICAgIG0uZmlsZXMuc29tZShmID0+IGYuaWQgPT09IGZpbGVJZClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIW1haWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZU1haWwgPSBtYWlsLmZpbGVzLmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuXG4gICAgICAgIGlmICghZmlsZU1haWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUtleSA9IGRlY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGVNYWlsLmtleSksXG4gICAgICAgICAgbWFpbC5zZW5kZXIucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApO1xuXG4gICAgICAgIGtleSA9IHNvZGl1bS50b19oZXgoZmlsZUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3IgMVwiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkgPSBmaWxlLnVzZXIua2V5O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDJcIik7XG4gICAgICB9XG4gICAgICBrZXkgPSBmaWxlLnVzZXIua2V5O1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3IgM1wiKTtcbiAgICB9XG5cbiAgICBrZXkgPSBzb2RpdW0udG9faGV4KFxuICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgbmFtZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBzb2RpdW0udG9faGV4KG5hbWVLZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lS2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3gobmFtZUtleSwgdGhpcy4ja2V5cy5wdWJsaWNLZXksIHRoaXMuI2tleXMucHJpdmF0ZUtleSlcbiAgICApO1xuXG4gICAgY29uc3QgeyBzYXZlSW5DbG91ZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2F2ZUluQ2xvdWQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgbmFtZUtleTogZW5jcnlwdGVkTmFtZUtleVxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGUgPSAoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKFxuICAgICAgc2F2ZUluQ2xvdWQsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSkgYXMgVkZpbGVXaXRoRm9sZGVyO1xuXG4gICAgY29uc3QgbWUgPSB2RmlsZS5mb2xkZXIudXNlcnMuZmluZChcbiAgICAgIChbdV0pID0+IHUucHVibGljS2V5ID09PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICk7XG5cbiAgICBpZiAobWUgJiYgW1wiYWRtaW5cIiwgXCJ3cml0ZVwiXS5pbmNsdWRlcyhtZVsxXSkpIHtcbiAgICAgIGNvbnN0IG90aGVycyA9IHZGaWxlLmZvbGRlci51c2Vycy5maWx0ZXIoXG4gICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgKTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG90aGVycy5tYXAoKFt1LCByaWdodHNdKSA9PlxuICAgICAgICAgIHRoaXMuc2hhcmVWRmlsZSh7XG4gICAgICAgICAgICB2RmlsZUlkOiB2RmlsZS5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlO1xuICB9XG5cbiAgYXN5bmMgc2VuZERyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG5cbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5maW5kKGQgPT4gZC5tYWlsSW50ZWdyaXR5SWQgPT09IGRyYWZ0SWQpO1xuICAgIGlmICghZHJhZnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IG5ldyBBcnJheTxNYWlsUmVjaXBpZW50SW5wdXQ+KCk7XG5cbiAgICBjb25zdCB0ZW1wb3JhcnlSZWNpcGllbnRzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIGRyYWZ0LnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICBkcmFmdC5maWxlcyxcbiAgICAgICAgZHJhZnQuc3ViamVjdCxcbiAgICAgICAgZHJhZnQuYm9keSxcbiAgICAgICAgZW1haWxcbiAgICAgICk7XG5cbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cy5wdXNoKGVtYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaChpbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7IGlkIH0gb2YgZHJhZnQucmVjaXBpZW50cykge1xuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2VuZERyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2VuZERyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGRyYWZ0TWFpbElkOiBkcmFmdC5tYWlsSW50ZWdyaXR5SWQsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VuZERyYWZ0TWFpbCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRXYWl0aW5nRW1haWxzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFRPRE8gb3B0aSB0aGlzXG4gICAgY29uc3QgbWFpbHMgPSBhd2FpdCB0aGlzLnNlbnRNYWlscygpO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gbWFpbHMuZmlsdGVyKG0gPT4gbS50ZW1wb3JhcnlSZWNpcGllbnRzLmxlbmd0aCA+IDApO1xuXG4gICAgZm9yIChjb25zdCBtYWlsIG9mIGZpbHRlcmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgZW1haWwgfSBvZiBtYWlsLnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgICAgaWYgKCFlbWFpbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgICAgbWFpbC5maWxlcyxcbiAgICAgICAgICBtYWlsLnN1YmplY3QsXG4gICAgICAgICAgbWFpbC5ib2R5LFxuICAgICAgICAgIGVtYWlsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgICAgICAgc2VuZE9uZU1haWw6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1haWxJbnRlZ3JpdHlJZDogbWFpbC5tYWlsSW50ZWdyaXR5SWQsXG4gICAgICAgICAgICAgICAgcmVjaXBpZW50OiBpbnB1dFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRHJhZnRNYWlsKHtcbiAgICBib2R5LFxuICAgIHN1YmplY3QsXG4gICAgZmlsZXMsXG4gICAgcmVjaXBpZW50c0lkcyxcbiAgICByZXBseVRvXG4gIH06IE5ld01haWwpOiBQcm9taXNlPERyYWZ0TWFpbCB8IG51bGw+IHtcbiAgICBjb25zdCBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfS0VZQllURVMsXG4gICAgICBcImhleFwiXG4gICAgKTtcbiAgICBjb25zdCBoYXNoID0gc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaChcbiAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfQllURVMsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICBoYXNoS2V5LFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3Qgc2VuZGVyRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgIGxldCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgIGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZmlsZS51c2VyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgc2VuZGVyRmlsZXMucHVzaCh7XG4gICAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZmlsZS51c2VyLmtleSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjcmVhdGVEcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGNyZWF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHNlbmRlckZpbGVzLFxuICAgICAgICAgIGhhc2gsXG4gICAgICAgICAgaGFzaEtleVxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghY3JlYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICBjcmVhdGVEcmFmdE1haWwsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSBhcyBEcmFmdE1haWw7XG4gIH1cblxuICBhc3luYyBmaWxlQ29udGVudCh7XG4gICAgZmlsZUlkLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBwcm9ncmVzc0RlY3J5cHQsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/OiAocHJvZ3Jlc3M6IERvd25sb2FkUHJvZ3Jlc3MpID0+IHZvaWQ7XG4gICAgcHJvZ3Jlc3NEZWNyeXB0PzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IHsgZmlsZUNvbnRlbnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGZpbGVDb250ZW50OiBbXG4gICAgICAgIHsgZmlsZUlkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRDbG91ZFwiOiB7XG4gICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICBzZW5kZXJQdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRTZW50TWFpbFwiOiB7XG4gICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZpbGVDb250ZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmaWxlSWR9IGRvZXMgbm90IGV4aXN0c2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIERvd25sb2FkUHJvZ3Jlc3M+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChcbiAgICAgIHBhcnQ6IG51bWJlcixcbiAgICAgIHByb2dyZXNzRXZlbnQ6IERvd25sb2FkUHJvZ3Jlc3NcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgdHJhbnNmZXJyZWRCeXRlcyA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci50cmFuc2ZlcnJlZEJ5dGVzLFxuICAgICAgICAwXG4gICAgICApO1xuICAgICAgY29uc3QgdG90YWxCeXRlcyA9IE51bWJlcihmaWxlQ29udGVudC50b3RhbFNpemUpO1xuICAgICAgb25Eb3dubG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiB0cmFuc2ZlcnJlZEJ5dGVzIC8gdG90YWxCeXRlcyxcbiAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgdHJhbnNmZXJyZWRCeXRlc1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnRzID0gbmV3IEFycmF5PHsgZGF0YTogVWludDhBcnJheTsgb3JkZXI6IG51bWJlciB9PigpO1xuXG4gICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVDb250ZW50UGFydCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgIGF3YWl0IGt5XG4gICAgICAgICAgLmdldChwYXJ0LmNvbnRlbnRVcmwsIHtcbiAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogcHIgPT4gb25Qcm9ncmVzcyhwYXJ0Lm9yZGVyLCBwciksXG4gICAgICAgICAgICBzaWduYWw6IHNpZ25hbFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFycmF5QnVmZmVyKClcbiAgICAgICk7XG4gICAgICBjb25zdCBtZDVQYXJ0ID0gYXdhaXQgbWQ1KGJ1Zik7XG4gICAgICBpZiAobWQ1UGFydCAhPT0gcGFydC5tZDUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1kNSBmb3IgcGFydCAke3BhcnQub3JkZXJ9IG9mIGZpbGUgJHtmaWxlSWR9YCk7XG4gICAgICB9XG4gICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgZGF0YTogYnVmLFxuICAgICAgICBvcmRlcjogcGFydC5vcmRlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgIDMsXG4gICAgICBmaWxlQ29udGVudC5wYXJ0cy5tYXAocCA9PiAoKTogUHJvbWlzZTx2b2lkPiA9PiBieVBhcnQocCkpXG4gICAgKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZENvbnRlbnQgPSBjb25jYXRlbmF0ZShcbiAgICAgIC4uLnBhcnRzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKS5tYXAocCA9PiBwLmRhdGEpXG4gICAgKTtcblxuICAgIC8vIGNvbnN0IG1kNUVuY3J5cHRlZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1kNShvZihlbmNyeXB0ZWRDb250ZW50KSkpO1xuICAgIGNvbnN0IG1kNUVuY3J5cHRlZCA9IGF3YWl0IG1kNShlbmNyeXB0ZWRDb250ZW50KTtcblxuICAgIGlmIChtZDVFbmNyeXB0ZWQgIT09IGZpbGVDb250ZW50Lm1kNUVuY3J5cHRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmNyeXB0ZWQgY29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGRlY3J5cHRDcnlwdG9Cb3goXG4gICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZUNvbnRlbnQua2V5KSxcbiAgICAgIGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIlxuICAgICAgICA/IGZpbGVDb250ZW50LnNlbmRlclB1YmxpY0tleVxuICAgICAgICA6IGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRDbG91ZFwiXG4gICAgICAgID8gZmlsZUNvbnRlbnQucHVibGljS2V5XG4gICAgICAgIDogdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuXG4gICAgY29uc3Qgc3JjID0gYXdhaXQgZGVjcnlwdChrZXksIGVuY3J5cHRlZENvbnRlbnQsIHByb2dyZXNzRGVjcnlwdCwgc2lnbmFsKTtcblxuICAgIC8vIGNvbnN0IG1kNUNvbnRlbnQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShtZDUob2Yoc3JjKSkpO1xuICAgIGNvbnN0IG1kNUNvbnRlbnQgPSBhd2FpdCBtZDUoc3JjKTtcblxuICAgIGlmIChtZDVDb250ZW50ICE9PSBmaWxlQ29udGVudC5tZDUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmNvbXByZXNzKHNyYyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWxlKHtcbiAgICBmaWxlSWQsXG4gICAgZmlsZW5hbWUsXG4gICAgaXNGYXZvcml0ZSxcbiAgICBkZWxldGVkQXRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIGZpbGVuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFZGaWxlPiB7XG4gICAgY29uc3QgZmlsZSA9IHZGaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgdGhyb3cgYENhbid0IGZpbmQgZmlsZSAke2ZpbGVJZH1gO1xuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBmaWxlbmFtZVxuICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShmaWxlbmFtZSwgZmlsZS51c2VyQXBwLm5hbWVLZXkpXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IHVwZGF0ZUZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwZGF0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBmaWxlbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBpc0Zhdm9yaXRlLFxuICAgICAgICAgIGRlbGV0ZWRBdFxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHVwZGF0ZSBmaWxlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBncWxWRmlsZVRvRXh0ZXJuYWwodXBkYXRlRmlsZSwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyByZWFkTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHJlYWRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICByZWFkTWFpbDogW3sgbWFpbElkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVhZE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyB1bnJlYWRNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdW5yZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdW5yZWFkTWFpbDogW3sgbWFpbElkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5yZWFkTWFpbCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGFwcFNldHRpbmdzKCk6IFByb21pc2U8VXNlckFwcFNldHRpbmdzIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGFwcFNldHRpbmdzOiB7XG4gICAgICAgICAgICBhdXRvRGlzY29ubmVjdERlbGF5OiB0cnVlLFxuICAgICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3VkRm9sZGVyRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXIuYXBwU2V0dGluZ3MgPz8gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcFNldHRpbmdzKFxuICAgIHNldHRpbmdzOiBQYXJ0aWFsPFVzZXJBcHBTZXR0aW5ncz5cbiAgKTogUHJvbWlzZTxVc2VyQXBwU2V0dGluZ3M+IHtcbiAgICBjb25zdCB7IHVwZGF0ZUFwcFNldHRpbmdzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVBcHBTZXR0aW5nczogW1xuICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9EaXNjb25uZWN0RGVsYXk6IHRydWUsXG4gICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFJlY2VpdmVkTWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgcmVjZWl2ZWRNYWlsczogZ3FsTWFpbFF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1haWxzID0gdXNlcj8ucmVjZWl2ZWRNYWlscyA/PyBbXTtcblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCByZWNlaXZlZE1haWxzID0gbmV3IEFycmF5PFJlY2VpdmVkTWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiBtYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgcmVjZWl2ZWRNYWlscy5wdXNoKG1haWwgYXMgUmVjZWl2ZWRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVjZWl2ZWRNYWlscztcbiAgfVxuXG4gIGFzeW5jIHNlbnRNYWlscygpOiBQcm9taXNlPFNlbnRNYWlsW10+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBzZW50TWFpbHM6IGdxbE1haWxRdWVyeVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYWlscyA9IHVzZXI/LnNlbnRNYWlscyA/PyBbXTtcblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCBzZW50TWFpbHMgPSBuZXcgQXJyYXk8U2VudE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgbWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIHNlbnRNYWlscy5wdXNoKG1haWwgYXMgU2VudE1haWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZW50TWFpbHM7XG4gIH1cblxuICBhc3luYyBkcmFmdE1haWxzKCk6IFByb21pc2U8RHJhZnRNYWlsW10+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5kcmFmdE1haWxzID8/IFtdO1xuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IGRyYWZ0TWFpbHMgPSBuZXcgQXJyYXk8RHJhZnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBkcmFmdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpIGFzIERyYWZ0TWFpbDtcbiAgICAgIGlmIChkcmFmdCkge1xuICAgICAgICBkcmFmdE1haWxzLnB1c2goZHJhZnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkcmFmdE1haWxzO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJGb2xkZXIgPSBhc3luYyAoXG4gICAgZm9sZGVySWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dEZvbGRlcnMgfCBudWxsPiA9PiB7XG4gICAgbGV0IGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuXG4gICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgZm9sZGVyID0gZm9sZGVyc0NhY2hlLmdldChmb2xkZXJJZCk7XG5cbiAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm9sZGVyLnVzZXJBcHA/Lm5hbWVLZXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogZm9sZGVySWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmb2xkZXIudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgcGVyVkZpbGUgPSBhc3luYyAoXG4gICAgdkZpbGVJZDogc3RyaW5nLFxuICAgIHB1YmxpY0tleTogc3RyaW5nXG4gICk6IFByb21pc2U8TmFtZUtleUlucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgIGlmICghdkZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudkZpbGUoeyBpZDogdkZpbGVJZCB9KTtcbiAgICAgIHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgICBpZiAoIXZGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdkZpbGUuaWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleCh2RmlsZS51c2VyQXBwLm5hbWVLZXkpLFxuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiB2RmlsZS5oaXN0b3J5Lm1hcChmID0+ICh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmLnVzZXIhLmtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pKVxuICAgIH07XG4gIH07XG5cbiAgcHJpdmF0ZSBfZWFjaFVzZXIgPSBhc3luYyAoXG4gICAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSxcbiAgICBzdWJqZWN0OiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGlkT3JNYWlsOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNYWlsUmVjaXBpZW50SW5wdXQgfCBudWxsPiA9PiB7XG4gICAgbGV0IHUgPSB1c2Vyc0NhY2hlLmdldChpZE9yTWFpbCk7XG4gICAgaWYgKCF1IHx8ICEoXCJwdWJsaWNLZXlcIiBpbiB1KSkge1xuICAgICAgdSA9XG4gICAgICAgIChhd2FpdCB0aGlzLnVzZXIoe1xuICAgICAgICAgIHVzZXJJZDogaWRPck1haWwsXG4gICAgICAgICAgd2l0aFB1YmxpY0tleTogdHJ1ZVxuICAgICAgICB9KSkgPz8gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIXUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEoXCJwdWJsaWNLZXlcIiBpbiB1KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVc2VyICR7aWRPck1haWx9IGhhdmUgbm8gcHVibGljIGtleWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY2lwaWVudHNGaWxlcyA9IG5ldyBBcnJheTxNYWlsRmlsZUlucHV0PigpO1xuXG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZUluSGlzdG9yeSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlSW5IaXN0b3J5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlSW5IaXN0b3J5ID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZUluSGlzdG9yeSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBmaWxlSW5IaXN0b3J5LnVzZXI/LmtleTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVjaXBpZW50c0ZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2lwaWVudElkOiB1LmlkLFxuICAgICAgYm9keTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiByZWNpcGllbnRzRmlsZXNcbiAgICB9O1xuICB9O1xufVxuIl19
|