@secrecy/lib 1.0.0-dev.39 → 1.0.0-dev.42

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.
Files changed (63) hide show
  1. package/dist/BaseClient.d.ts +33 -53
  2. package/dist/BaseClient.js +886 -2093
  3. package/dist/PopupTools.js +20 -21
  4. package/dist/ZeusThunder.js +50 -84
  5. package/dist/cache.d.ts +2 -3
  6. package/dist/cache.js +4 -5
  7. package/dist/client/admin/index.js +77 -165
  8. package/dist/client/convert/file.d.ts +3 -3
  9. package/dist/client/convert/file.js +18 -23
  10. package/dist/client/convert/mail.js +13 -13
  11. package/dist/client/convert/node.d.ts +9 -0
  12. package/dist/client/convert/node.js +101 -0
  13. package/dist/client/helpers.js +41 -41
  14. package/dist/client/index.d.ts +63 -74
  15. package/dist/client/index.js +2727 -5759
  16. package/dist/client/storage.js +7 -7
  17. package/dist/client/types/File.d.ts +6 -13
  18. package/dist/client/types/File.js +1 -1
  19. package/dist/client/types/Inputs.d.ts +2 -7
  20. package/dist/client/types/Inputs.js +1 -1
  21. package/dist/client/types/Node.d.ts +49 -0
  22. package/dist/client/types/Node.js +3 -0
  23. package/dist/client/types/UserAppNotifications.d.ts +1 -1
  24. package/dist/client/types/UserAppNotifications.js +1 -1
  25. package/dist/client/types/UserAppSettings.js +1 -1
  26. package/dist/client/types/index.d.ts +7 -13
  27. package/dist/client/types/index.js +2 -4
  28. package/dist/client/types/selectors.d.ts +476 -0
  29. package/dist/client/types/selectors.js +125 -0
  30. package/dist/crypto/file.js +122 -203
  31. package/dist/crypto/index.js +14 -12
  32. package/dist/error.js +1 -1
  33. package/dist/index.d.ts +1 -2
  34. package/dist/index.js +2 -34
  35. package/dist/minify/index.js +7 -7
  36. package/dist/minify/lz4.js +87 -93
  37. package/dist/sodium.js +3 -25
  38. package/dist/utils/store-buddy.js +11 -15
  39. package/dist/utils/time.js +4 -12
  40. package/dist/{utils.d.ts → utils/utils.d.ts} +0 -0
  41. package/dist/utils/utils.js +57 -0
  42. package/dist/worker/__mock__/sodium.worker.js +35 -32
  43. package/dist/worker/md5.js +21 -39
  44. package/dist/worker/sodium.js +95 -130
  45. package/dist/worker/workerCodes.js +3 -3
  46. package/dist/zeus/const.d.ts +5 -0
  47. package/dist/zeus/const.js +303 -1360
  48. package/dist/zeus/index.d.ts +1805 -1817
  49. package/dist/zeus/index.js +542 -434
  50. package/package.json +40 -39
  51. package/dist/client/convert/folder.d.ts +0 -8
  52. package/dist/client/convert/folder.js +0 -264
  53. package/dist/client/convert/vFile.d.ts +0 -5
  54. package/dist/client/convert/vFile.js +0 -164
  55. package/dist/client/types/FilesOnUsersOnApplications.d.ts +0 -9
  56. package/dist/client/types/FilesOnUsersOnApplications.js +0 -3
  57. package/dist/client/types/Folder.d.ts +0 -68
  58. package/dist/client/types/Folder.js +0 -7
  59. package/dist/client/types/VFile.d.ts +0 -62
  60. package/dist/client/types/VFile.js +0 -4
  61. package/dist/client/types/queries.d.ts +0 -535
  62. package/dist/client/types/queries.js +0 -192
  63. package/dist/utils.js +0 -188
@@ -1,12 +1,12 @@
1
1
  import { calcUncompressedLen, compressBlockBound, compressBlockHC, uncompressBlock } from "./lz4.js";
2
- import { concatenate } from "../utils.js";
2
+ import { concatenate } from "../utils/utils.js";
3
3
  export function compress(data) {
4
4
  if (data.byteLength > 15000000) {
5
5
  return concatenate(new Uint8Array([0]), data);
6
6
  }
7
7
 
8
- var compressed = new Uint8Array(compressBlockBound(data.byteLength));
9
- var compressedSize = compressBlockHC(data, compressed, 0);
8
+ const compressed = new Uint8Array(compressBlockBound(data.byteLength));
9
+ const compressedSize = compressBlockHC(data, compressed, 0);
10
10
 
11
11
  if (compressedSize === 0) {
12
12
  return concatenate(new Uint8Array([0]), data);
@@ -15,14 +15,14 @@ export function compress(data) {
15
15
  return concatenate(new Uint8Array([1]), compressed.slice(0, compressedSize));
16
16
  }
17
17
  export function uncompress(data) {
18
- var realData = data.slice(1);
18
+ const realData = data.slice(1);
19
19
 
20
20
  if (data[0] === 0) {
21
21
  return realData;
22
22
  }
23
23
 
24
- var dst = new Uint8Array(calcUncompressedLen(realData));
25
- var uncompressedSize = uncompressBlock(realData, dst);
24
+ const dst = new Uint8Array(calcUncompressedLen(realData));
25
+ const uncompressedSize = uncompressBlock(realData, dst);
26
26
  return dst.slice(0, uncompressedSize);
27
27
  }
28
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taW5pZnkvaW5kZXgudHMiXSwibmFtZXMiOlsiY2FsY1VuY29tcHJlc3NlZExlbiIsImNvbXByZXNzQmxvY2tCb3VuZCIsImNvbXByZXNzQmxvY2tIQyIsInVuY29tcHJlc3NCbG9jayIsImNvbmNhdGVuYXRlIiwiY29tcHJlc3MiLCJkYXRhIiwiYnl0ZUxlbmd0aCIsIlVpbnQ4QXJyYXkiLCJjb21wcmVzc2VkIiwiY29tcHJlc3NlZFNpemUiLCJzbGljZSIsInVuY29tcHJlc3MiLCJyZWFsRGF0YSIsImRzdCIsInVuY29tcHJlc3NlZFNpemUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0VBLG1CQURGLEVBRUVDLGtCQUZGLEVBR0VDLGVBSEYsRUFJRUMsZUFKRixRQUtPLFVBTFA7QUFNQSxTQUFTQyxXQUFULFFBQTRCLGFBQTVCO0FBRUEsT0FBTyxTQUFTQyxRQUFULENBQWtCQyxJQUFsQixFQUFnRDtBQUNyRCxNQUFJQSxJQUFJLENBQUNDLFVBQUwsR0FBa0IsUUFBdEIsRUFBa0M7QUFDaEMsV0FBT0gsV0FBVyxDQUFDLElBQUlJLFVBQUosQ0FBZSxDQUFDLENBQUQsQ0FBZixDQUFELEVBQXNCRixJQUF0QixDQUFsQjtBQUNEOztBQUNELE1BQU1HLFVBQVUsR0FBRyxJQUFJRCxVQUFKLENBQWVQLGtCQUFrQixDQUFDSyxJQUFJLENBQUNDLFVBQU4sQ0FBakMsQ0FBbkI7QUFDQSxNQUFNRyxjQUFjLEdBQUdSLGVBQWUsQ0FBQ0ksSUFBRCxFQUFPRyxVQUFQLEVBQW1CLENBQW5CLENBQXRDOztBQUNBLE1BQUlDLGNBQWMsS0FBSyxDQUF2QixFQUEwQjtBQUN4QixXQUFPTixXQUFXLENBQUMsSUFBSUksVUFBSixDQUFlLENBQUMsQ0FBRCxDQUFmLENBQUQsRUFBc0JGLElBQXRCLENBQWxCO0FBQ0Q7O0FBQ0QsU0FBT0YsV0FBVyxDQUFDLElBQUlJLFVBQUosQ0FBZSxDQUFDLENBQUQsQ0FBZixDQUFELEVBQXNCQyxVQUFVLENBQUNFLEtBQVgsQ0FBaUIsQ0FBakIsRUFBb0JELGNBQXBCLENBQXRCLENBQWxCO0FBQ0Q7QUFFRCxPQUFPLFNBQVNFLFVBQVQsQ0FBb0JOLElBQXBCLEVBQWtEO0FBQ3ZELE1BQU1PLFFBQVEsR0FBR1AsSUFBSSxDQUFDSyxLQUFMLENBQVcsQ0FBWCxDQUFqQjs7QUFDQSxNQUFJTCxJQUFJLENBQUMsQ0FBRCxDQUFKLEtBQVksQ0FBaEIsRUFBbUI7QUFDakIsV0FBT08sUUFBUDtBQUNEOztBQUNELE1BQU1DLEdBQUcsR0FBRyxJQUFJTixVQUFKLENBQWVSLG1CQUFtQixDQUFDYSxRQUFELENBQWxDLENBQVo7QUFDQSxNQUFNRSxnQkFBZ0IsR0FBR1osZUFBZSxDQUFDVSxRQUFELEVBQVdDLEdBQVgsQ0FBeEM7QUFDQSxTQUFPQSxHQUFHLENBQUNILEtBQUosQ0FBVSxDQUFWLEVBQWFJLGdCQUFiLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNhbGNVbmNvbXByZXNzZWRMZW4sXG4gIGNvbXByZXNzQmxvY2tCb3VuZCxcbiAgY29tcHJlc3NCbG9ja0hDLFxuICB1bmNvbXByZXNzQmxvY2tcbn0gZnJvbSBcIi4vbHo0LmpzXCI7XG5pbXBvcnQgeyBjb25jYXRlbmF0ZSB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3MoZGF0YTogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICBpZiAoZGF0YS5ieXRlTGVuZ3RoID4gMTVfMDAwXzAwMCkge1xuICAgIHJldHVybiBjb25jYXRlbmF0ZShuZXcgVWludDhBcnJheShbMF0pLCBkYXRhKTtcbiAgfVxuICBjb25zdCBjb21wcmVzc2VkID0gbmV3IFVpbnQ4QXJyYXkoY29tcHJlc3NCbG9ja0JvdW5kKGRhdGEuYnl0ZUxlbmd0aCkpO1xuICBjb25zdCBjb21wcmVzc2VkU2l6ZSA9IGNvbXByZXNzQmxvY2tIQyhkYXRhLCBjb21wcmVzc2VkLCAwKTtcbiAgaWYgKGNvbXByZXNzZWRTaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbmNhdGVuYXRlKG5ldyBVaW50OEFycmF5KFswXSksIGRhdGEpO1xuICB9XG4gIHJldHVybiBjb25jYXRlbmF0ZShuZXcgVWludDhBcnJheShbMV0pLCBjb21wcmVzc2VkLnNsaWNlKDAsIGNvbXByZXNzZWRTaXplKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmNvbXByZXNzKGRhdGE6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgY29uc3QgcmVhbERhdGEgPSBkYXRhLnNsaWNlKDEpO1xuICBpZiAoZGF0YVswXSA9PT0gMCkge1xuICAgIHJldHVybiByZWFsRGF0YTtcbiAgfVxuICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShjYWxjVW5jb21wcmVzc2VkTGVuKHJlYWxEYXRhKSk7XG4gIGNvbnN0IHVuY29tcHJlc3NlZFNpemUgPSB1bmNvbXByZXNzQmxvY2socmVhbERhdGEsIGRzdCk7XG4gIHJldHVybiBkc3Quc2xpY2UoMCwgdW5jb21wcmVzc2VkU2l6ZSk7XG59XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjYWxjVW5jb21wcmVzc2VkTGVuIiwiY29tcHJlc3NCbG9ja0JvdW5kIiwiY29tcHJlc3NCbG9ja0hDIiwidW5jb21wcmVzc0Jsb2NrIiwiY29uY2F0ZW5hdGUiLCJjb21wcmVzcyIsImRhdGEiLCJieXRlTGVuZ3RoIiwiVWludDhBcnJheSIsImNvbXByZXNzZWQiLCJjb21wcmVzc2VkU2l6ZSIsInNsaWNlIiwidW5jb21wcmVzcyIsInJlYWxEYXRhIiwiZHN0IiwidW5jb21wcmVzc2VkU2l6ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taW5pZnkvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY2FsY1VuY29tcHJlc3NlZExlbixcbiAgY29tcHJlc3NCbG9ja0JvdW5kLFxuICBjb21wcmVzc0Jsb2NrSEMsXG4gIHVuY29tcHJlc3NCbG9ja1xufSBmcm9tIFwiLi9sejQuanNcIjtcbmltcG9ydCB7IGNvbmNhdGVuYXRlIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wcmVzcyhkYXRhOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gIGlmIChkYXRhLmJ5dGVMZW5ndGggPiAxNV8wMDBfMDAwKSB7XG4gICAgcmV0dXJuIGNvbmNhdGVuYXRlKG5ldyBVaW50OEFycmF5KFswXSksIGRhdGEpO1xuICB9XG4gIGNvbnN0IGNvbXByZXNzZWQgPSBuZXcgVWludDhBcnJheShjb21wcmVzc0Jsb2NrQm91bmQoZGF0YS5ieXRlTGVuZ3RoKSk7XG4gIGNvbnN0IGNvbXByZXNzZWRTaXplID0gY29tcHJlc3NCbG9ja0hDKGRhdGEsIGNvbXByZXNzZWQsIDApO1xuICBpZiAoY29tcHJlc3NlZFNpemUgPT09IDApIHtcbiAgICByZXR1cm4gY29uY2F0ZW5hdGUobmV3IFVpbnQ4QXJyYXkoWzBdKSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGNvbmNhdGVuYXRlKG5ldyBVaW50OEFycmF5KFsxXSksIGNvbXByZXNzZWQuc2xpY2UoMCwgY29tcHJlc3NlZFNpemUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuY29tcHJlc3MoZGF0YTogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCByZWFsRGF0YSA9IGRhdGEuc2xpY2UoMSk7XG4gIGlmIChkYXRhWzBdID09PSAwKSB7XG4gICAgcmV0dXJuIHJlYWxEYXRhO1xuICB9XG4gIGNvbnN0IGRzdCA9IG5ldyBVaW50OEFycmF5KGNhbGNVbmNvbXByZXNzZWRMZW4ocmVhbERhdGEpKTtcbiAgY29uc3QgdW5jb21wcmVzc2VkU2l6ZSA9IHVuY29tcHJlc3NCbG9jayhyZWFsRGF0YSwgZHN0KTtcbiAgcmV0dXJuIGRzdC5zbGljZSgwLCB1bmNvbXByZXNzZWRTaXplKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDRUEsbUJBREYsRUFFRUMsa0JBRkYsRUFHRUMsZUFIRixFQUlFQyxlQUpGLFFBS08sVUFMUDtBQU1BLFNBQVNDLFdBQVQsUUFBNEIsbUJBQTVCO0FBRUEsT0FBTyxTQUFTQyxRQUFULENBQWtCQyxJQUFsQixFQUFnRDtFQUNyRCxJQUFJQSxJQUFJLENBQUNDLFVBQUwsR0FBa0IsUUFBdEIsRUFBa0M7SUFDaEMsT0FBT0gsV0FBVyxDQUFDLElBQUlJLFVBQUosQ0FBZSxDQUFDLENBQUQsQ0FBZixDQUFELEVBQXNCRixJQUF0QixDQUFsQjtFQUNEOztFQUNELE1BQU1HLFVBQVUsR0FBRyxJQUFJRCxVQUFKLENBQWVQLGtCQUFrQixDQUFDSyxJQUFJLENBQUNDLFVBQU4sQ0FBakMsQ0FBbkI7RUFDQSxNQUFNRyxjQUFjLEdBQUdSLGVBQWUsQ0FBQ0ksSUFBRCxFQUFPRyxVQUFQLEVBQW1CLENBQW5CLENBQXRDOztFQUNBLElBQUlDLGNBQWMsS0FBSyxDQUF2QixFQUEwQjtJQUN4QixPQUFPTixXQUFXLENBQUMsSUFBSUksVUFBSixDQUFlLENBQUMsQ0FBRCxDQUFmLENBQUQsRUFBc0JGLElBQXRCLENBQWxCO0VBQ0Q7O0VBQ0QsT0FBT0YsV0FBVyxDQUFDLElBQUlJLFVBQUosQ0FBZSxDQUFDLENBQUQsQ0FBZixDQUFELEVBQXNCQyxVQUFVLENBQUNFLEtBQVgsQ0FBaUIsQ0FBakIsRUFBb0JELGNBQXBCLENBQXRCLENBQWxCO0FBQ0Q7QUFFRCxPQUFPLFNBQVNFLFVBQVQsQ0FBb0JOLElBQXBCLEVBQWtEO0VBQ3ZELE1BQU1PLFFBQVEsR0FBR1AsSUFBSSxDQUFDSyxLQUFMLENBQVcsQ0FBWCxDQUFqQjs7RUFDQSxJQUFJTCxJQUFJLENBQUMsQ0FBRCxDQUFKLEtBQVksQ0FBaEIsRUFBbUI7SUFDakIsT0FBT08sUUFBUDtFQUNEOztFQUNELE1BQU1DLEdBQUcsR0FBRyxJQUFJTixVQUFKLENBQWVSLG1CQUFtQixDQUFDYSxRQUFELENBQWxDLENBQVo7RUFDQSxNQUFNRSxnQkFBZ0IsR0FBR1osZUFBZSxDQUFDVSxRQUFELEVBQVdDLEdBQVgsQ0FBeEM7RUFDQSxPQUFPQSxHQUFHLENBQUNILEtBQUosQ0FBVSxDQUFWLEVBQWFJLGdCQUFiLENBQVA7QUFDRCJ9
@@ -30,66 +30,66 @@
30
30
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
31
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
32
  */
33
- var errInvalidSource = new Error("invalid source");
34
- var errShortBuffer = new Error("short buffer"); // The following constants are used to setup the compression algorithm.
33
+ const errInvalidSource = new Error("invalid source");
34
+ const errShortBuffer = new Error("short buffer"); // The following constants are used to setup the compression algorithm.
35
35
 
36
- var minMatch = 4; // the minimum size of the match sequence size (4 bytes)
36
+ const minMatch = 4; // the minimum size of the match sequence size (4 bytes)
37
37
 
38
- var winSizeLog = 16; // LZ4 64Kb window size limit
38
+ const winSizeLog = 16; // LZ4 64Kb window size limit
39
39
 
40
- var winSize = 1 << winSizeLog;
41
- var winMask = winSize - 1; // 64Kb window of previous data for dependent blocks
40
+ const winSize = 1 << winSizeLog;
41
+ const winMask = winSize - 1; // 64Kb window of previous data for dependent blocks
42
42
  // hashSizeLog determines the size of the hash table used to quickly find a previous match position.
43
43
  // Its value influences the compression speed and memory usage, the lower the faster,
44
44
  // but at the expense of the compression ratio.
45
45
  // 16 seems to be the best compromise.
46
46
 
47
- var hashSizeLog = 16;
48
- var hashSize = 1 << hashSizeLog;
49
- var hashShift = minMatch * 8 - hashSizeLog;
50
- var mfLimit = 8 + minMatch; // The last match cannot start within the last 12 bytes.
47
+ const hashSizeLog = 16;
48
+ const hashSize = 1 << hashSizeLog;
49
+ const hashShift = minMatch * 8 - hashSizeLog;
50
+ const mfLimit = 8 + minMatch; // The last match cannot start within the last 12 bytes.
51
51
 
52
- var skipStrength = 6; // variable step for fast scan
52
+ const skipStrength = 6; // variable step for fast scan
53
53
 
54
- var hasher = 2654435761 | 0; // prime number used to hash minMatch
54
+ const hasher = 2654435761 | 0; // prime number used to hash minMatch
55
55
  // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math/imul#Polyfill
56
56
 
57
57
  function imulPolyfill(a, b) {
58
- var ah = a >>> 16 & 0xffff;
59
- var al = a & 0xffff;
60
- var bh = b >>> 16 & 0xffff;
61
- var bl = b & 0xffff; // the shift by 0 fixes the sign on the high part
58
+ const ah = a >>> 16 & 0xffff;
59
+ const al = a & 0xffff;
60
+ const bh = b >>> 16 & 0xffff;
61
+ const bl = b & 0xffff; // the shift by 0 fixes the sign on the high part
62
62
  // the final |0 converts the unsigned value into a signed value
63
63
 
64
64
  return al * bl + (ah * bl + al * bh << 16 >>> 0) | 0;
65
65
  }
66
66
 
67
- var imul = Math.imul ? Math.imul : imulPolyfill;
67
+ const imul = Math.imul ? Math.imul : imulPolyfill;
68
68
 
69
69
  function getUint32(a, i) {
70
70
  return a[i + 3] | a[i + 2] << 8 | a[i + 1] << 16 | a[i] << 24;
71
71
  }
72
72
 
73
73
  function copy(dest, src, di, si, len) {
74
- for (var i = 0; i < len; ++i) {
74
+ for (let i = 0; i < len; ++i) {
75
75
  dest[di++] = src[si++];
76
76
  }
77
77
  }
78
78
 
79
79
  export function calcUncompressedLen(src) {
80
- var sn = src.length;
80
+ const sn = src.length;
81
81
 
82
82
  if (sn === 0) {
83
83
  return 0;
84
84
  }
85
85
 
86
- var si = 0;
87
- var di = 0;
86
+ let si = 0;
87
+ let di = 0;
88
88
 
89
89
  while (true) {
90
90
  // literals and match lengths (token)
91
- var lLen = src[si] >> 4;
92
- var mLen = src[si] & 0xf;
91
+ let lLen = src[si] >> 4;
92
+ let mLen = src[si] & 0xf;
93
93
 
94
94
  if (++si === sn) {
95
95
  throw errInvalidSource;
@@ -127,7 +127,7 @@ export function calcUncompressedLen(src) {
127
127
  throw errInvalidSource;
128
128
  }
129
129
 
130
- var offset = src[si - 2] | src[si - 1] << 8;
130
+ const offset = src[si - 2] | src[si - 1] << 8;
131
131
 
132
132
  if (di - offset < 0 || offset === 0) {
133
133
  throw errInvalidSource;
@@ -161,20 +161,20 @@ export function calcUncompressedLen(src) {
161
161
  }
162
162
  }
163
163
  export function uncompressBlock(src, dest) {
164
- var sn = src.length;
165
- var dn = dest.length;
164
+ const sn = src.length;
165
+ const dn = dest.length;
166
166
 
167
167
  if (sn === 0) {
168
168
  return 0;
169
169
  }
170
170
 
171
- var si = 0;
172
- var di = 0;
171
+ let si = 0;
172
+ let di = 0;
173
173
 
174
174
  while (true) {
175
175
  // literals and match lengths (token)
176
- var lLen = src[si] >> 4;
177
- var mLen = src[si] & 0xf;
176
+ let lLen = src[si] >> 4;
177
+ let mLen = src[si] & 0xf;
178
178
 
179
179
  if (++si === sn) {
180
180
  throw errInvalidSource;
@@ -217,7 +217,7 @@ export function uncompressBlock(src, dest) {
217
217
  throw errInvalidSource;
218
218
  }
219
219
 
220
- var offset = src[si - 2] | src[si - 1] << 8;
220
+ const offset = src[si - 2] | src[si - 1] << 8;
221
221
 
222
222
  if (di - offset < 0 || offset === 0) {
223
223
  throw errInvalidSource;
@@ -261,36 +261,35 @@ export function compressBlockBound(n) {
261
261
  return n + (n / 255 | 0) + 16;
262
262
  }
263
263
  export function compressBlock(src, dest, soffset) {
264
- var sn = src.length - mfLimit;
265
- var dn = dest.length;
264
+ const sn = src.length - mfLimit;
265
+ const dn = dest.length;
266
266
 
267
267
  if (sn <= 0 || dn === 0 || soffset >= sn) {
268
268
  return 0;
269
269
  }
270
270
 
271
- var si = 0,
271
+ let si = 0,
272
272
  di = 0; // fast scan strategy:
273
273
  // we only need a hash table to store the last sequences (4 bytes)
274
274
 
275
- var hashTable = new Uint32Array(hashSize); // Initialise the hash table with the first 64Kb of the input buffer
275
+ const hashTable = new Uint32Array(hashSize); // Initialise the hash table with the first 64Kb of the input buffer
276
276
  // (used when compressing dependent blocks)
277
277
 
278
278
  while (si < soffset) {
279
- var h = imul(getUint32(src, si), hasher) >>> hashShift;
279
+ const h = imul(getUint32(src, si), hasher) >>> hashShift;
280
280
  hashTable[h] = ++si;
281
281
  }
282
282
 
283
- var anchor = si;
284
- var fma = 1 << skipStrength;
283
+ let anchor = si;
284
+ let fma = 1 << skipStrength;
285
285
 
286
286
  while (si < sn - minMatch) {
287
287
  // hash the next 4 bytes (sequence)...
288
- var _h = imul(getUint32(src, si), hasher) >>> hashShift; // -1 to separate existing entries from new ones
288
+ const h = imul(getUint32(src, si), hasher) >>> hashShift; // -1 to separate existing entries from new ones
289
289
 
290
+ const ref = hashTable[h] - 1; // ...and store the position of the hash in the hash table (+1 to compensate the -1 upon saving)
290
291
 
291
- var ref = hashTable[_h] - 1; // ...and store the position of the hash in the hash table (+1 to compensate the -1 upon saving)
292
-
293
- hashTable[_h] = si + 1; // no need to check the last 3 bytes in the first literal 4 bytes as
292
+ hashTable[h] = si + 1; // no need to check the last 3 bytes in the first literal 4 bytes as
294
293
  // this guarantees that the next match, if any, is compressed with
295
294
  // a lower size, since to have some compression we must have:
296
295
  // ll+ml-overlap > 1 + (ll-15)/255 + (ml-4-15)/255 + 2 (uncompressed size>compressed size)
@@ -311,13 +310,11 @@ export function compressBlock(src, dest, soffset) {
311
310
 
312
311
 
313
312
  fma = 1 << skipStrength;
314
-
315
- var _lLen = si - anchor;
316
-
317
- var offset = si - ref; // encode match length part 1
313
+ const lLen = si - anchor;
314
+ const offset = si - ref; // encode match length part 1
318
315
 
319
316
  si += minMatch;
320
- var mLen = si; // match length has minMatch already
317
+ let mLen = si; // match length has minMatch already
321
318
 
322
319
  while (si <= sn && src[si] === src[si - offset]) {
323
320
  si++;
@@ -332,8 +329,8 @@ export function compressBlock(src, dest, soffset) {
332
329
  } // encode literals length
333
330
 
334
331
 
335
- if (_lLen < 0xf) {
336
- dest[di] |= _lLen << 4;
332
+ if (lLen < 0xf) {
333
+ dest[di] |= lLen << 4;
337
334
  } else {
338
335
  dest[di] |= 0xf0;
339
336
 
@@ -341,7 +338,7 @@ export function compressBlock(src, dest, soffset) {
341
338
  throw errShortBuffer;
342
339
  }
343
340
 
344
- var l = _lLen - 0xf;
341
+ let l = lLen - 0xf;
345
342
 
346
343
  for (; l >= 0xff; l -= 0xff) {
347
344
  dest[di] = 0xff;
@@ -359,12 +356,12 @@ export function compressBlock(src, dest, soffset) {
359
356
  } // literals
360
357
 
361
358
 
362
- if (di + _lLen >= dn) {
359
+ if (di + lLen >= dn) {
363
360
  throw errShortBuffer;
364
361
  }
365
362
 
366
- copy(dest, src, di, anchor, _lLen);
367
- di += _lLen;
363
+ copy(dest, src, di, anchor, lLen);
364
+ di += lLen;
368
365
  anchor = si; // encode offset
369
366
 
370
367
  di += 2;
@@ -399,7 +396,7 @@ export function compressBlock(src, dest, soffset) {
399
396
  } // last literals
400
397
 
401
398
 
402
- var lLen = src.length - anchor;
399
+ let lLen = src.length - anchor;
403
400
 
404
401
  if (lLen < 0xf) {
405
402
  dest[di] = lLen << 4;
@@ -426,8 +423,8 @@ export function compressBlock(src, dest, soffset) {
426
423
  } // write literals
427
424
 
428
425
 
429
- var lastLen = src.length - anchor;
430
- var n = di + lastLen;
426
+ const lastLen = src.length - anchor;
427
+ const n = di + lastLen;
431
428
 
432
429
  if (n > dn) {
433
430
  throw errShortBuffer;
@@ -441,46 +438,45 @@ export function compressBlock(src, dest, soffset) {
441
438
  return di;
442
439
  }
443
440
  export function compressBlockHC(src, dest, soffset) {
444
- var sn = src.length - mfLimit;
445
- var dn = dest.length;
441
+ const sn = src.length - mfLimit;
442
+ const dn = dest.length;
446
443
 
447
444
  if (sn <= 0 || dn === 0 || soffset >= sn) {
448
445
  return 0;
449
446
  }
450
447
 
451
- var si = 0;
452
- var di = 0; // Hash Chain strategy:
448
+ let si = 0;
449
+ let di = 0; // Hash Chain strategy:
453
450
  // we need a hash table and a chain table
454
451
  // the chain table cannot contain more entries than the window size (64Kb entries)
455
452
 
456
- var hashTable = new Uint32Array(hashSize);
457
- var chainTable = new Uint32Array(winSize); // Initialise the hash table with the first 64Kb of the input buffer
453
+ const hashTable = new Uint32Array(hashSize);
454
+ const chainTable = new Uint32Array(winSize); // Initialise the hash table with the first 64Kb of the input buffer
458
455
  // (used when compressing dependent blocks)
459
456
 
460
457
  while (si < soffset) {
461
- var h = imul(getUint32(src, si), hasher) >>> hashShift;
458
+ const h = imul(getUint32(src, si), hasher) >>> hashShift;
462
459
  chainTable[si & winMask] = hashTable[h];
463
460
  hashTable[h] = ++si;
464
461
  }
465
462
 
466
- var anchor = si;
463
+ let anchor = si;
467
464
 
468
465
  while (si < sn - minMatch) {
469
466
  // hash the next 4 bytes (sequence)...
470
- var _h2 = imul(getUint32(src, si), hasher) >>> hashShift; // follow the chain until out of window and give the longest match
471
-
467
+ const h = imul(getUint32(src, si), hasher) >>> hashShift; // follow the chain until out of window and give the longest match
472
468
 
473
- var mLen = 0;
474
- var offset = 0;
469
+ let mLen = 0;
470
+ let offset = 0;
475
471
 
476
- for (var next = hashTable[_h2] - 1; next > 0 && next > si - winSize; next = chainTable[next & winMask] - 1) {
472
+ for (let next = hashTable[h] - 1; next > 0 && next > si - winSize; next = chainTable[next & winMask] - 1) {
477
473
  // the first (mLen==0) or next byte (mLen>=minMatch) at current match length must match to improve on the match length
478
474
  if (src[next + mLen] === src[si + mLen]) {
479
- for (var _ml = 0;; ++_ml) {
480
- if (src[next + _ml] !== src[si + _ml] || si + _ml > sn) {
475
+ for (let ml = 0;; ++ml) {
476
+ if (src[next + ml] !== src[si + ml] || si + ml > sn) {
481
477
  // found a longer match, keep its position and length
482
- if (mLen < _ml && _ml >= minMatch) {
483
- mLen = _ml;
478
+ if (mLen < ml && ml >= minMatch) {
479
+ mLen = ml;
484
480
  offset = si - next;
485
481
  }
486
482
 
@@ -490,28 +486,26 @@ export function compressBlockHC(src, dest, soffset) {
490
486
  }
491
487
  }
492
488
 
493
- chainTable[si & winMask] = hashTable[_h2];
494
- hashTable[_h2] = si + 1; // no match found
489
+ chainTable[si & winMask] = hashTable[h];
490
+ hashTable[h] = si + 1; // no match found
495
491
 
496
492
  if (mLen === 0) {
497
493
  ++si;
498
494
  continue;
499
495
  }
500
496
 
501
- var si2 = si + 1;
502
- var ml = si + mLen; // match found
497
+ let si2 = si + 1;
498
+ const ml = si + mLen; // match found
503
499
  // update hash/chain tables with overlaping bytes:
504
500
  // si already hashed, add everything from si+1 up to the match length
505
501
 
506
502
  while (si2 < ml) {
507
- var _h3 = imul(getUint32(src, si2), hasher) >>> hashShift;
508
-
509
- chainTable[si2 & winMask] = hashTable[_h3];
510
- hashTable[_h3] = ++si2;
503
+ const h = imul(getUint32(src, si2), hasher) >>> hashShift;
504
+ chainTable[si2 & winMask] = hashTable[h];
505
+ hashTable[h] = ++si2;
511
506
  }
512
507
 
513
- var _lLen2 = si - anchor;
514
-
508
+ const lLen = si - anchor;
515
509
  si += mLen;
516
510
  mLen -= minMatch; // match length does not include minMatch
517
511
 
@@ -522,8 +516,8 @@ export function compressBlockHC(src, dest, soffset) {
522
516
  } // encode literals length
523
517
 
524
518
 
525
- if (_lLen2 < 0xf) {
526
- dest[di] |= _lLen2 << 4;
519
+ if (lLen < 0xf) {
520
+ dest[di] |= lLen << 4;
527
521
  } else {
528
522
  dest[di] |= 0xf0;
529
523
 
@@ -531,7 +525,7 @@ export function compressBlockHC(src, dest, soffset) {
531
525
  throw errShortBuffer;
532
526
  }
533
527
 
534
- var l = _lLen2 - 0xf;
528
+ let l = lLen - 0xf;
535
529
 
536
530
  for (; l >= 0xff; l -= 0xff) {
537
531
  dest[di] = 0xff;
@@ -549,12 +543,12 @@ export function compressBlockHC(src, dest, soffset) {
549
543
  } // literals
550
544
 
551
545
 
552
- if (di + _lLen2 >= dn) {
546
+ if (di + lLen >= dn) {
553
547
  throw errShortBuffer;
554
548
  }
555
549
 
556
- copy(dest, src, di, anchor, _lLen2);
557
- di += _lLen2;
550
+ copy(dest, src, di, anchor, lLen);
551
+ di += lLen;
558
552
  anchor = si; // encode offset
559
553
 
560
554
  di += 2;
@@ -589,7 +583,7 @@ export function compressBlockHC(src, dest, soffset) {
589
583
  } // last literals
590
584
 
591
585
 
592
- var lLen = src.length - anchor;
586
+ let lLen = src.length - anchor;
593
587
 
594
588
  if (lLen < 0xf) {
595
589
  dest[di] = lLen << 4;
@@ -616,8 +610,8 @@ export function compressBlockHC(src, dest, soffset) {
616
610
  } // write literals
617
611
 
618
612
 
619
- var lastLen = src.length - anchor;
620
- var n = di + lastLen;
613
+ const lastLen = src.length - anchor;
614
+ const n = di + lastLen;
621
615
 
622
616
  if (n > dn) {
623
617
  throw errShortBuffer;
@@ -630,4 +624,4 @@ export function compressBlockHC(src, dest, soffset) {
630
624
  di += lastLen;
631
625
  return di;
632
626
  }
633
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taW5pZnkvbHo0LnRzIl0sIm5hbWVzIjpbImVyckludmFsaWRTb3VyY2UiLCJFcnJvciIsImVyclNob3J0QnVmZmVyIiwibWluTWF0Y2giLCJ3aW5TaXplTG9nIiwid2luU2l6ZSIsIndpbk1hc2siLCJoYXNoU2l6ZUxvZyIsImhhc2hTaXplIiwiaGFzaFNoaWZ0IiwibWZMaW1pdCIsInNraXBTdHJlbmd0aCIsImhhc2hlciIsImltdWxQb2x5ZmlsbCIsImEiLCJiIiwiYWgiLCJhbCIsImJoIiwiYmwiLCJpbXVsIiwiTWF0aCIsImdldFVpbnQzMiIsImkiLCJjb3B5IiwiZGVzdCIsInNyYyIsImRpIiwic2kiLCJsZW4iLCJjYWxjVW5jb21wcmVzc2VkTGVuIiwic24iLCJsZW5ndGgiLCJsTGVuIiwibUxlbiIsIm9mZnNldCIsInVuY29tcHJlc3NCbG9jayIsImRuIiwiY29tcHJlc3NCbG9ja0JvdW5kIiwibiIsImNvbXByZXNzQmxvY2siLCJzb2Zmc2V0IiwiaGFzaFRhYmxlIiwiVWludDMyQXJyYXkiLCJoIiwiYW5jaG9yIiwiZm1hIiwicmVmIiwibCIsImxhc3RMZW4iLCJjb21wcmVzc0Jsb2NrSEMiLCJjaGFpblRhYmxlIiwibmV4dCIsIm1sIiwic2kyIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFNQSxnQkFBZ0IsR0FBRyxJQUFJQyxLQUFKLENBQVUsZ0JBQVYsQ0FBekI7QUFDQSxJQUFNQyxjQUFjLEdBQUcsSUFBSUQsS0FBSixDQUFVLGNBQVYsQ0FBdkIsQyxDQUVBOztBQUNBLElBQU1FLFFBQVEsR0FBRyxDQUFqQixDLENBQW9COztBQUNwQixJQUFNQyxV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O0FBQ0QsU0FBSytCLElBQUksSUFBSSxHQUFiLEVBQWtCQSxJQUFJLElBQUksSUFBMUIsRUFBZ0NBLElBQUksSUFBSSxJQUF4QyxFQUE4QztBQUM1Q1IsTUFBQUEsSUFBSSxDQUFDRSxFQUFELENBQUosR0FBVyxJQUFYOztBQUNBLFVBQUksRUFBRUEsRUFBRixLQUFTVSxFQUFiLEVBQWlCO0FBQ2YsY0FBTW5DLGNBQU47QUFDRDtBQUNGOztBQUNEdUIsSUFBQUEsSUFBSSxDQUFDRSxFQUFELENBQUosR0FBV00sSUFBWDtBQUNEOztBQUNELE1BQUksRUFBRU4sRUFBRixLQUFTVSxFQUFiLEVBQWlCO0FBQ2YsVUFBTW5DLGNBQU47QUFDRCxHQTdKTyxDQStKUjs7O0FBQ0EsTUFBTStDLE9BQU8sR0FBR3ZCLEdBQUcsQ0FBQ00sTUFBSixHQUFhYSxNQUE3QjtBQUNBLE1BQU1OLENBQUMsR0FBR1osRUFBRSxHQUFHc0IsT0FBZjs7QUFDQSxNQUFJVixDQUFDLEdBQUdGLEVBQVIsRUFBWTtBQUNWLFVBQU1uQyxjQUFOO0FBQ0QsR0FGRCxNQUVPLElBQUlxQyxDQUFDLElBQUlSLEVBQVQsRUFBYTtBQUNsQjtBQUNBLFdBQU8sQ0FBUDtBQUNEOztBQUNEUCxFQUFBQSxJQUFJLENBQUNDLElBQUQsRUFBT0MsR0FBUCxFQUFZQyxFQUFaLEVBQWdCa0IsTUFBaEIsRUFBd0JJLE9BQXhCLENBQUo7QUFDQXRCLEVBQUFBLEVBQUUsSUFBSXNCLE9BQU47QUFDQSxTQUFPdEIsRUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbHo0LXRzIEBsaWNlbnNlIEJTRC0zLUNsYXVzZSAvIENvcHlyaWdodCAoYykgMjAxNSwgUGllcnJlIEN1cnRvIC8gMjAxNiwgb292LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFBpZXJyZSBDdXJ0b1xuICogQ29weXJpZ2h0IChjKSAyMDE2LCBvb3ZcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgeHhIYXNoIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gKiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRVxuICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUxcbiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SXG4gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUlxuICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSxcbiAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbmNvbnN0IGVyckludmFsaWRTb3VyY2UgPSBuZXcgRXJyb3IoXCJpbnZhbGlkIHNvdXJjZVwiKTtcbmNvbnN0IGVyclNob3J0QnVmZmVyID0gbmV3IEVycm9yKFwic2hvcnQgYnVmZmVyXCIpO1xuXG4vLyBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgdXNlZCB0byBzZXR1cCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLlxuY29uc3QgbWluTWF0Y2ggPSA0OyAvLyB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBtYXRjaCBzZXF1ZW5jZSBzaXplICg0IGJ5dGVzKVxuY29uc3Qgd2luU2l6ZUxvZyA9IDE2OyAvLyBMWjQgNjRLYiB3aW5kb3cgc2l6ZSBsaW1pdFxuY29uc3Qgd2luU2l6ZSA9IDEgPDwgd2luU2l6ZUxvZztcbmNvbnN0IHdpbk1hc2sgPSB3aW5TaXplIC0gMTsgLy8gNjRLYiB3aW5kb3cgb2YgcHJldmlvdXMgZGF0YSBmb3IgZGVwZW5kZW50IGJsb2Nrc1xuXG4vLyBoYXNoU2l6ZUxvZyBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlIHVzZWQgdG8gcXVpY2tseSBmaW5kIGEgcHJldmlvdXMgbWF0Y2ggcG9zaXRpb24uXG4vLyBJdHMgdmFsdWUgaW5mbHVlbmNlcyB0aGUgY29tcHJlc3Npb24gc3BlZWQgYW5kIG1lbW9yeSB1c2FnZSwgdGhlIGxvd2VyIHRoZSBmYXN0ZXIsXG4vLyBidXQgYXQgdGhlIGV4cGVuc2Ugb2YgdGhlIGNvbXByZXNzaW9uIHJhdGlvLlxuLy8gMTYgc2VlbXMgdG8gYmUgdGhlIGJlc3QgY29tcHJvbWlzZS5cbmNvbnN0IGhhc2hTaXplTG9nID0gMTY7XG5jb25zdCBoYXNoU2l6ZSA9IDEgPDwgaGFzaFNpemVMb2c7XG5jb25zdCBoYXNoU2hpZnQgPSBtaW5NYXRjaCAqIDggLSBoYXNoU2l6ZUxvZztcblxuY29uc3QgbWZMaW1pdCA9IDggKyBtaW5NYXRjaDsgLy8gVGhlIGxhc3QgbWF0Y2ggY2Fubm90IHN0YXJ0IHdpdGhpbiB0aGUgbGFzdCAxMiBieXRlcy5cbmNvbnN0IHNraXBTdHJlbmd0aCA9IDY7IC8vIHZhcmlhYmxlIHN0ZXAgZm9yIGZhc3Qgc2NhblxuXG5jb25zdCBoYXNoZXIgPSAyNjU0NDM1NzYxIHwgMDsgLy8gcHJpbWUgbnVtYmVyIHVzZWQgdG8gaGFzaCBtaW5NYXRjaFxuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2ltdWwjUG9seWZpbGxcbmZ1bmN0aW9uIGltdWxQb2x5ZmlsbChhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGFoID0gKGEgPj4+IDE2KSAmIDB4ZmZmZjtcbiAgY29uc3QgYWwgPSBhICYgMHhmZmZmO1xuICBjb25zdCBiaCA9IChiID4+PiAxNikgJiAweGZmZmY7XG4gIGNvbnN0IGJsID0gYiAmIDB4ZmZmZjtcbiAgLy8gdGhlIHNoaWZ0IGJ5IDAgZml4ZXMgdGhlIHNpZ24gb24gdGhlIGhpZ2ggcGFydFxuICAvLyB0aGUgZmluYWwgfDAgY29udmVydHMgdGhlIHVuc2lnbmVkIHZhbHVlIGludG8gYSBzaWduZWQgdmFsdWVcbiAgcmV0dXJuIChhbCAqIGJsICsgKCgoYWggKiBibCArIGFsICogYmgpIDw8IDE2KSA+Pj4gMCkpIHwgMDtcbn1cbmNvbnN0IGltdWwgPSBNYXRoLmltdWwgPyBNYXRoLmltdWwgOiBpbXVsUG9seWZpbGw7XG5cbmZ1bmN0aW9uIGdldFVpbnQzMihhOiBVaW50OEFycmF5LCBpOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gYVtpICsgM10gfCAoYVtpICsgMl0gPDwgOCkgfCAoYVtpICsgMV0gPDwgMTYpIHwgKGFbaV0gPDwgMjQpO1xufVxuXG5mdW5jdGlvbiBjb3B5KFxuICBkZXN0OiBVaW50OEFycmF5LFxuICBzcmM6IFVpbnQ4QXJyYXksXG4gIGRpOiBudW1iZXIsXG4gIHNpOiBudW1iZXIsXG4gIGxlbjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGRlc3RbZGkrK10gPSBzcmNbc2krK107XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGNVbmNvbXByZXNzZWRMZW4oc3JjOiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3Qgc24gPSBzcmMubGVuZ3RoO1xuICBpZiAoc24gPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBzaSA9IDA7XG4gIGxldCBkaSA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyBsaXRlcmFscyBhbmQgbWF0Y2ggbGVuZ3RocyAodG9rZW4pXG4gICAgbGV0IGxMZW4gPSBzcmNbc2ldID4+IDQ7XG4gICAgbGV0IG1MZW4gPSBzcmNbc2ldICYgMHhmO1xuICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICB9XG5cbiAgICAvLyBsaXRlcmFsc1xuICAgIGlmIChsTGVuID4gMCkge1xuICAgICAgaWYgKGxMZW4gPT09IDB4Zikge1xuICAgICAgICB3aGlsZSAoc3JjW3NpXSA9PT0gMHhmZikge1xuICAgICAgICAgIGxMZW4gKz0gMHhmZjtcbiAgICAgICAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgICAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxMZW4gKz0gc3JjW3NpXTtcbiAgICAgICAgaWYgKCsrc2kgPT09IHNuKSB7XG4gICAgICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGkgKz0gbExlbjtcbiAgICAgIHNpICs9IGxMZW47XG4gICAgICBpZiAoc2kgPj0gc24pIHtcbiAgICAgICAgcmV0dXJuIGRpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNpICs9IDI7XG4gICAgaWYgKHNpID49IHNuKSB7XG4gICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgIH1cbiAgICBjb25zdCBvZmZzZXQgPSBzcmNbc2kgLSAyXSB8IChzcmNbc2kgLSAxXSA8PCA4KTtcbiAgICBpZiAoZGkgLSBvZmZzZXQgPCAwIHx8IG9mZnNldCA9PT0gMCkge1xuICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICB9XG5cbiAgICAvLyBtYXRjaFxuICAgIGlmIChtTGVuID09PSAweGYpIHtcbiAgICAgIHdoaWxlIChzcmNbc2ldID09PSAweGZmKSB7XG4gICAgICAgIG1MZW4gKz0gMHhmZjtcbiAgICAgICAgaWYgKCsrc2kgPT09IHNuKSB7XG4gICAgICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbUxlbiArPSBzcmNbc2ldO1xuICAgICAgaWYgKCsrc2kgPT09IHNuKSB7XG4gICAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1pbmltdW0gbWF0Y2ggbGVuZ3RoIGlzIDRcbiAgICBtTGVuICs9IDQ7XG5cbiAgICAvLyBjb3B5IHRoZSBtYXRjaCAoTkIuIG1hdGNoIGlzIGF0IGxlYXN0IDQgYnl0ZXMgbG9uZylcbiAgICBmb3IgKDsgbUxlbiA+PSBvZmZzZXQ7IG1MZW4gLT0gb2Zmc2V0KSB7XG4gICAgICBkaSArPSBvZmZzZXQ7XG4gICAgfVxuICAgIGRpICs9IG1MZW47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuY29tcHJlc3NCbG9jayhzcmM6IFVpbnQ4QXJyYXksIGRlc3Q6IFVpbnQ4QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBzbiA9IHNyYy5sZW5ndGg7XG4gIGNvbnN0IGRuID0gZGVzdC5sZW5ndGg7XG4gIGlmIChzbiA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgbGV0IHNpID0gMDtcbiAgbGV0IGRpID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIGxpdGVyYWxzIGFuZCBtYXRjaCBsZW5ndGhzICh0b2tlbilcbiAgICBsZXQgbExlbiA9IHNyY1tzaV0gPj4gNDtcbiAgICBsZXQgbUxlbiA9IHNyY1tzaV0gJiAweGY7XG4gICAgaWYgKCsrc2kgPT09IHNuKSB7XG4gICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgIH1cblxuICAgIC8vIGxpdGVyYWxzXG4gICAgaWYgKGxMZW4gPiAwKSB7XG4gICAgICBpZiAobExlbiA9PT0gMHhmKSB7XG4gICAgICAgIHdoaWxlIChzcmNbc2ldID09PSAweGZmKSB7XG4gICAgICAgICAgbExlbiArPSAweGZmO1xuICAgICAgICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbExlbiArPSBzcmNbc2ldO1xuICAgICAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZG4gLSBkaSA8IGxMZW4gfHwgc2kgKyBsTGVuID4gc24pIHtcbiAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICB9XG4gICAgICBjb3B5KGRlc3QsIHNyYywgZGksIHNpLCBsTGVuKTtcbiAgICAgIGRpICs9IGxMZW47XG4gICAgICBzaSArPSBsTGVuO1xuICAgICAgaWYgKHNpID49IHNuKSB7XG4gICAgICAgIHJldHVybiBkaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaSArPSAyO1xuICAgIGlmIChzaSA+PSBzbikge1xuICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICB9XG4gICAgY29uc3Qgb2Zmc2V0ID0gc3JjW3NpIC0gMl0gfCAoc3JjW3NpIC0gMV0gPDwgOCk7XG4gICAgaWYgKGRpIC0gb2Zmc2V0IDwgMCB8fCBvZmZzZXQgPT09IDApIHtcbiAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgfVxuXG4gICAgLy8gbWF0Y2hcbiAgICBpZiAobUxlbiA9PT0gMHhmKSB7XG4gICAgICB3aGlsZSAoc3JjW3NpXSA9PT0gMHhmZikge1xuICAgICAgICBtTGVuICs9IDB4ZmY7XG4gICAgICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1MZW4gKz0gc3JjW3NpXTtcbiAgICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBtaW5pbXVtIG1hdGNoIGxlbmd0aCBpcyA0XG4gICAgbUxlbiArPSA0O1xuICAgIGlmIChkbiAtIGRpIDw9IG1MZW4pIHtcbiAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgIH1cblxuICAgIC8vIGNvcHkgdGhlIG1hdGNoIChOQi4gbWF0Y2ggaXMgYXQgbGVhc3QgNCBieXRlcyBsb25nKVxuICAgIGZvciAoOyBtTGVuID49IG9mZnNldDsgbUxlbiAtPSBvZmZzZXQpIHtcbiAgICAgIGNvcHkoZGVzdCwgZGVzdCwgZGksIGRpIC0gb2Zmc2V0LCBvZmZzZXQpO1xuICAgICAgZGkgKz0gb2Zmc2V0O1xuICAgIH1cbiAgICBjb3B5KGRlc3QsIGRlc3QsIGRpLCBkaSAtIG9mZnNldCwgbUxlbik7XG4gICAgZGkgKz0gbUxlbjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3NCbG9ja0JvdW5kKG46IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBuICsgKChuIC8gMjU1KSB8IDApICsgMTY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wcmVzc0Jsb2NrKFxuICBzcmM6IFVpbnQ4QXJyYXksXG4gIGRlc3Q6IFVpbnQ4QXJyYXksXG4gIHNvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyIHtcbiAgY29uc3Qgc24gPSBzcmMubGVuZ3RoIC0gbWZMaW1pdDtcbiAgY29uc3QgZG4gPSBkZXN0Lmxlbmd0aDtcbiAgaWYgKHNuIDw9IDAgfHwgZG4gPT09IDAgfHwgc29mZnNldCA+PSBzbikge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGxldCBzaSA9IDAsXG4gICAgZGkgPSAwO1xuXG4gIC8vIGZhc3Qgc2NhbiBzdHJhdGVneTpcbiAgLy8gd2Ugb25seSBuZWVkIGEgaGFzaCB0YWJsZSB0byBzdG9yZSB0aGUgbGFzdCBzZXF1ZW5jZXMgKDQgYnl0ZXMpXG4gIGNvbnN0IGhhc2hUYWJsZSA9IG5ldyBVaW50MzJBcnJheShoYXNoU2l6ZSk7XG5cbiAgLy8gSW5pdGlhbGlzZSB0aGUgaGFzaCB0YWJsZSB3aXRoIHRoZSBmaXJzdCA2NEtiIG9mIHRoZSBpbnB1dCBidWZmZXJcbiAgLy8gKHVzZWQgd2hlbiBjb21wcmVzc2luZyBkZXBlbmRlbnQgYmxvY2tzKVxuICB3aGlsZSAoc2kgPCBzb2Zmc2V0KSB7XG4gICAgY29uc3QgaCA9IGltdWwoZ2V0VWludDMyKHNyYywgc2kpLCBoYXNoZXIpID4+PiBoYXNoU2hpZnQ7XG4gICAgaGFzaFRhYmxlW2hdID0gKytzaTtcbiAgfVxuXG4gIGxldCBhbmNob3IgPSBzaTtcbiAgbGV0IGZtYSA9IDEgPDwgc2tpcFN0cmVuZ3RoO1xuICB3aGlsZSAoc2kgPCBzbiAtIG1pbk1hdGNoKSB7XG4gICAgLy8gaGFzaCB0aGUgbmV4dCA0IGJ5dGVzIChzZXF1ZW5jZSkuLi5cbiAgICBjb25zdCBoID0gaW11bChnZXRVaW50MzIoc3JjLCBzaSksIGhhc2hlcikgPj4+IGhhc2hTaGlmdDtcbiAgICAvLyAtMSB0byBzZXBhcmF0ZSBleGlzdGluZyBlbnRyaWVzIGZyb20gbmV3IG9uZXNcbiAgICBjb25zdCByZWYgPSBoYXNoVGFibGVbaF0gLSAxO1xuICAgIC8vIC4uLmFuZCBzdG9yZSB0aGUgcG9zaXRpb24gb2YgdGhlIGhhc2ggaW4gdGhlIGhhc2ggdGFibGUgKCsxIHRvIGNvbXBlbnNhdGUgdGhlIC0xIHVwb24gc2F2aW5nKVxuICAgIGhhc2hUYWJsZVtoXSA9IHNpICsgMTtcbiAgICAvLyBubyBuZWVkIHRvIGNoZWNrIHRoZSBsYXN0IDMgYnl0ZXMgaW4gdGhlIGZpcnN0IGxpdGVyYWwgNCBieXRlcyBhc1xuICAgIC8vIHRoaXMgZ3VhcmFudGVlcyB0aGF0IHRoZSBuZXh0IG1hdGNoLCBpZiBhbnksIGlzIGNvbXByZXNzZWQgd2l0aFxuICAgIC8vIGEgbG93ZXIgc2l6ZSwgc2luY2UgdG8gaGF2ZSBzb21lIGNvbXByZXNzaW9uIHdlIG11c3QgaGF2ZTpcbiAgICAvLyBsbCttbC1vdmVybGFwID4gMSArIChsbC0xNSkvMjU1ICsgKG1sLTQtMTUpLzI1NSArIDIgKHVuY29tcHJlc3NlZCBzaXplPmNvbXByZXNzZWQgc2l6ZSlcbiAgICAvLyA9PiBsbCttbD4zKzIqb3ZlcmxhcCA9PiBsbCttbD49IDQrMipvdmVybGFwXG4gICAgLy8gYW5kIGJ5IGRlZmluaXRpb24gd2UgZG8gaGF2ZTpcbiAgICAvLyBsbCA+PSAxLCBtbCA+PSA0XG4gICAgLy8gPT4gbGwrbWwgPj0gNVxuICAgIC8vID0+IHNvIG92ZXJsYXAgbXVzdCBiZSAwXG5cbiAgICAvLyB0aGUgc2VxdWVuY2UgaXMgbmV3LCBvdXQgb2YgYm91bmQgKDY0a2IpIG9yIG5vdCB2YWxpZDogdHJ5IG5leHQgc2VxdWVuY2VcbiAgICBpZiAoXG4gICAgICByZWYgPCAwIHx8IC8vKGZtYSAmICgoMSA8PCBza2lwU3RyZW5ndGgpIC0gMSkpIDwgNCB8fCAvLyB0aGlzIGNvZGUgc2VlbXMgaGFzIGEgYmlnIHBlbmFsdHkgZm9yIHNpemUuLi5cbiAgICAgIChzaSAtIHJlZikgPj4gd2luU2l6ZUxvZyA+IDAgfHxcbiAgICAgIHNyY1tyZWZdICE9PSBzcmNbc2ldIHx8XG4gICAgICBzcmNbcmVmICsgMV0gIT09IHNyY1tzaSArIDFdIHx8XG4gICAgICBzcmNbcmVmICsgMl0gIT09IHNyY1tzaSArIDJdIHx8XG4gICAgICBzcmNbcmVmICsgM10gIT09IHNyY1tzaSArIDNdXG4gICAgKSB7XG4gICAgICAvLyB2YXJpYWJsZSBzdGVwOiBpbXByb3ZlcyBwZXJmb3JtYW5jZSBvbiBub24tY29tcHJlc3NpYmxlIGRhdGFcbiAgICAgIHNpICs9IGZtYSA+PiBza2lwU3RyZW5ndGg7XG4gICAgICArK2ZtYTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBtYXRjaCBmb3VuZFxuICAgIGZtYSA9IDEgPDwgc2tpcFN0cmVuZ3RoO1xuICAgIGNvbnN0IGxMZW4gPSBzaSAtIGFuY2hvcjtcbiAgICBjb25zdCBvZmZzZXQgPSBzaSAtIHJlZjtcblxuICAgIC8vIGVuY29kZSBtYXRjaCBsZW5ndGggcGFydCAxXG4gICAgc2kgKz0gbWluTWF0Y2g7XG4gICAgbGV0IG1MZW4gPSBzaTsgLy8gbWF0Y2ggbGVuZ3RoIGhhcyBtaW5NYXRjaCBhbHJlYWR5XG4gICAgd2hpbGUgKHNpIDw9IHNuICYmIHNyY1tzaV0gPT09IHNyY1tzaSAtIG9mZnNldF0pIHtcbiAgICAgIHNpKys7XG4gICAgfVxuICAgIG1MZW4gPSBzaSAtIG1MZW47XG4gICAgaWYgKG1MZW4gPCAweGYpIHtcbiAgICAgIGRlc3RbZGldID0gbUxlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVzdFtkaV0gPSAweGY7XG4gICAgfVxuXG4gICAgLy8gZW5jb2RlIGxpdGVyYWxzIGxlbmd0aFxuICAgIGlmIChsTGVuIDwgMHhmKSB7XG4gICAgICBkZXN0W2RpXSB8PSBsTGVuIDw8IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc3RbZGldIHw9IDB4ZjA7XG4gICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICB9XG4gICAgICBsZXQgbCA9IGxMZW4gLSAweGY7XG4gICAgICBmb3IgKDsgbCA+PSAweGZmOyBsIC09IDB4ZmYpIHtcbiAgICAgICAgZGVzdFtkaV0gPSAweGZmO1xuICAgICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzdFtkaV0gPSBsICYgMHhmZjtcbiAgICB9XG4gICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG5cbiAgICAvLyBsaXRlcmFsc1xuICAgIGlmIChkaSArIGxMZW4gPj0gZG4pIHtcbiAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgIH1cbiAgICBjb3B5KGRlc3QsIHNyYywgZGksIGFuY2hvciwgbExlbik7XG4gICAgZGkgKz0gbExlbjtcbiAgICBhbmNob3IgPSBzaTtcblxuICAgIC8vIGVuY29kZSBvZmZzZXRcbiAgICBkaSArPSAyO1xuICAgIGlmIChkaSA+PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuICAgIGRlc3RbZGkgLSAyXSA9IG9mZnNldDtcbiAgICBkZXN0W2RpIC0gMV0gPSBvZmZzZXQgPj4gODtcblxuICAgIC8vIGVuY29kZSBtYXRjaCBsZW5ndGggcGFydCAyXG4gICAgaWYgKG1MZW4gPj0gMHhmKSB7XG4gICAgICBmb3IgKG1MZW4gLT0gMHhmOyBtTGVuID49IDB4ZmY7IG1MZW4gLT0gMHhmZikge1xuICAgICAgICBkZXN0W2RpXSA9IDB4ZmY7XG4gICAgICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZXN0W2RpXSA9IG1MZW47XG4gICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFuY2hvciA9PT0gMCkge1xuICAgIC8vIGluY29tcHJlc3NpYmxlXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBsYXN0IGxpdGVyYWxzXG4gIGxldCBsTGVuID0gc3JjLmxlbmd0aCAtIGFuY2hvcjtcbiAgaWYgKGxMZW4gPCAweGYpIHtcbiAgICBkZXN0W2RpXSA9IGxMZW4gPDwgNDtcbiAgfSBlbHNlIHtcbiAgICBkZXN0W2RpXSA9IDB4ZjA7XG4gICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG4gICAgZm9yIChsTGVuIC09IDB4ZjsgbExlbiA+PSAweGZmOyBsTGVuIC09IDB4ZmYpIHtcbiAgICAgIGRlc3RbZGldID0gMHhmZjtcbiAgICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVzdFtkaV0gPSBsTGVuO1xuICB9XG4gIGlmICgrK2RpID09PSBkbikge1xuICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICB9XG5cbiAgLy8gd3JpdGUgbGl0ZXJhbHNcbiAgY29uc3QgbGFzdExlbiA9IHNyYy5sZW5ndGggLSBhbmNob3I7XG4gIGNvbnN0IG4gPSBkaSArIGxhc3RMZW47XG4gIGlmIChuID4gZG4pIHtcbiAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgfSBlbHNlIGlmIChuID49IHNuKSB7XG4gICAgLy8gaW5jb21wcmVzc2libGVcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb3B5KGRlc3QsIHNyYywgZGksIGFuY2hvciwgbGFzdExlbik7XG4gIGRpICs9IGxhc3RMZW47XG4gIHJldHVybiBkaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXByZXNzQmxvY2tIQyhcbiAgc3JjOiBVaW50OEFycmF5LFxuICBkZXN0OiBVaW50OEFycmF5LFxuICBzb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciB7XG4gIGNvbnN0IHNuID0gc3JjLmxlbmd0aCAtIG1mTGltaXQ7XG4gIGNvbnN0IGRuID0gZGVzdC5sZW5ndGg7XG4gIGlmIChzbiA8PSAwIHx8IGRuID09PSAwIHx8IHNvZmZzZXQgPj0gc24pIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBsZXQgc2kgPSAwO1xuICBsZXQgZGkgPSAwO1xuXG4gIC8vIEhhc2ggQ2hhaW4gc3RyYXRlZ3k6XG4gIC8vIHdlIG5lZWQgYSBoYXNoIHRhYmxlIGFuZCBhIGNoYWluIHRhYmxlXG4gIC8vIHRoZSBjaGFpbiB0YWJsZSBjYW5ub3QgY29udGFpbiBtb3JlIGVudHJpZXMgdGhhbiB0aGUgd2luZG93IHNpemUgKDY0S2IgZW50cmllcylcbiAgY29uc3QgaGFzaFRhYmxlID0gbmV3IFVpbnQzMkFycmF5KGhhc2hTaXplKTtcbiAgY29uc3QgY2hhaW5UYWJsZSA9IG5ldyBVaW50MzJBcnJheSh3aW5TaXplKTtcblxuICAvLyBJbml0aWFsaXNlIHRoZSBoYXNoIHRhYmxlIHdpdGggdGhlIGZpcnN0IDY0S2Igb2YgdGhlIGlucHV0IGJ1ZmZlclxuICAvLyAodXNlZCB3aGVuIGNvbXByZXNzaW5nIGRlcGVuZGVudCBibG9ja3MpXG4gIHdoaWxlIChzaSA8IHNvZmZzZXQpIHtcbiAgICBjb25zdCBoID0gaW11bChnZXRVaW50MzIoc3JjLCBzaSksIGhhc2hlcikgPj4+IGhhc2hTaGlmdDtcbiAgICBjaGFpblRhYmxlW3NpICYgd2luTWFza10gPSBoYXNoVGFibGVbaF07XG4gICAgaGFzaFRhYmxlW2hdID0gKytzaTtcbiAgfVxuXG4gIGxldCBhbmNob3IgPSBzaTtcbiAgd2hpbGUgKHNpIDwgc24gLSBtaW5NYXRjaCkge1xuICAgIC8vIGhhc2ggdGhlIG5leHQgNCBieXRlcyAoc2VxdWVuY2UpLi4uXG4gICAgY29uc3QgaCA9IGltdWwoZ2V0VWludDMyKHNyYywgc2kpLCBoYXNoZXIpID4+PiBoYXNoU2hpZnQ7XG5cbiAgICAvLyBmb2xsb3cgdGhlIGNoYWluIHVudGlsIG91dCBvZiB3aW5kb3cgYW5kIGdpdmUgdGhlIGxvbmdlc3QgbWF0Y2hcbiAgICBsZXQgbUxlbiA9IDA7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgZm9yIChcbiAgICAgIGxldCBuZXh0ID0gaGFzaFRhYmxlW2hdIC0gMTtcbiAgICAgIG5leHQgPiAwICYmIG5leHQgPiBzaSAtIHdpblNpemU7XG4gICAgICBuZXh0ID0gY2hhaW5UYWJsZVtuZXh0ICYgd2luTWFza10gLSAxXG4gICAgKSB7XG4gICAgICAvLyB0aGUgZmlyc3QgKG1MZW49PTApIG9yIG5leHQgYnl0ZSAobUxlbj49bWluTWF0Y2gpIGF0IGN1cnJlbnQgbWF0Y2ggbGVuZ3RoIG11c3QgbWF0Y2ggdG8gaW1wcm92ZSBvbiB0aGUgbWF0Y2ggbGVuZ3RoXG4gICAgICBpZiAoc3JjW25leHQgKyBtTGVuXSA9PT0gc3JjW3NpICsgbUxlbl0pIHtcbiAgICAgICAgZm9yIChsZXQgbWwgPSAwOyA7ICsrbWwpIHtcbiAgICAgICAgICBpZiAoc3JjW25leHQgKyBtbF0gIT09IHNyY1tzaSArIG1sXSB8fCBzaSArIG1sID4gc24pIHtcbiAgICAgICAgICAgIC8vIGZvdW5kIGEgbG9uZ2VyIG1hdGNoLCBrZWVwIGl0cyBwb3NpdGlvbiBhbmQgbGVuZ3RoXG4gICAgICAgICAgICBpZiAobUxlbiA8IG1sICYmIG1sID49IG1pbk1hdGNoKSB7XG4gICAgICAgICAgICAgIG1MZW4gPSBtbDtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gc2kgLSBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNoYWluVGFibGVbc2kgJiB3aW5NYXNrXSA9IGhhc2hUYWJsZVtoXTtcbiAgICBoYXNoVGFibGVbaF0gPSBzaSArIDE7XG5cbiAgICAvLyBubyBtYXRjaCBmb3VuZFxuICAgIGlmIChtTGVuID09PSAwKSB7XG4gICAgICArK3NpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IHNpMiA9IHNpICsgMTtcbiAgICBjb25zdCBtbCA9IHNpICsgbUxlbjtcblxuICAgIC8vIG1hdGNoIGZvdW5kXG4gICAgLy8gdXBkYXRlIGhhc2gvY2hhaW4gdGFibGVzIHdpdGggb3ZlcmxhcGluZyBieXRlczpcbiAgICAvLyBzaSBhbHJlYWR5IGhhc2hlZCwgYWRkIGV2ZXJ5dGhpbmcgZnJvbSBzaSsxIHVwIHRvIHRoZSBtYXRjaCBsZW5ndGhcbiAgICB3aGlsZSAoc2kyIDwgbWwpIHtcbiAgICAgIGNvbnN0IGggPSBpbXVsKGdldFVpbnQzMihzcmMsIHNpMiksIGhhc2hlcikgPj4+IGhhc2hTaGlmdDtcbiAgICAgIGNoYWluVGFibGVbc2kyICYgd2luTWFza10gPSBoYXNoVGFibGVbaF07XG4gICAgICBoYXNoVGFibGVbaF0gPSArK3NpMjtcbiAgICB9XG5cbiAgICBjb25zdCBsTGVuID0gc2kgLSBhbmNob3I7XG4gICAgc2kgKz0gbUxlbjtcbiAgICBtTGVuIC09IG1pbk1hdGNoOyAvLyBtYXRjaCBsZW5ndGggZG9lcyBub3QgaW5jbHVkZSBtaW5NYXRjaFxuXG4gICAgaWYgKG1MZW4gPCAweGYpIHtcbiAgICAgIGRlc3RbZGldID0gbUxlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVzdFtkaV0gPSAweGY7XG4gICAgfVxuXG4gICAgLy8gZW5jb2RlIGxpdGVyYWxzIGxlbmd0aFxuICAgIGlmIChsTGVuIDwgMHhmKSB7XG4gICAgICBkZXN0W2RpXSB8PSBsTGVuIDw8IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc3RbZGldIHw9IDB4ZjA7XG4gICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICB9XG4gICAgICBsZXQgbCA9IGxMZW4gLSAweGY7XG4gICAgICBmb3IgKDsgbCA+PSAweGZmOyBsIC09IDB4ZmYpIHtcbiAgICAgICAgZGVzdFtkaV0gPSAweGZmO1xuICAgICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzdFtkaV0gPSBsICYgMHhmZjtcbiAgICB9XG4gICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG5cbiAgICAvLyBsaXRlcmFsc1xuICAgIGlmIChkaSArIGxMZW4gPj0gZG4pIHtcbiAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgIH1cbiAgICBjb3B5KGRlc3QsIHNyYywgZGksIGFuY2hvciwgbExlbik7XG4gICAgZGkgKz0gbExlbjtcbiAgICBhbmNob3IgPSBzaTtcblxuICAgIC8vIGVuY29kZSBvZmZzZXRcbiAgICBkaSArPSAyO1xuICAgIGlmIChkaSA+PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuICAgIGRlc3RbZGkgLSAyXSA9IG9mZnNldDtcbiAgICBkZXN0W2RpIC0gMV0gPSBvZmZzZXQgPj4gODtcblxuICAgIC8vIGVuY29kZSBtYXRjaCBsZW5ndGggcGFydCAyXG4gICAgaWYgKG1MZW4gPj0gMHhmKSB7XG4gICAgICBmb3IgKG1MZW4gLT0gMHhmOyBtTGVuID49IDB4ZmY7IG1MZW4gLT0gMHhmZikge1xuICAgICAgICBkZXN0W2RpXSA9IDB4ZmY7XG4gICAgICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZXN0W2RpXSA9IG1MZW47XG4gICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFuY2hvciA9PT0gMCkge1xuICAgIC8vIGluY29tcHJlc3NpYmxlXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBsYXN0IGxpdGVyYWxzXG4gIGxldCBsTGVuID0gc3JjLmxlbmd0aCAtIGFuY2hvcjtcbiAgaWYgKGxMZW4gPCAweGYpIHtcbiAgICBkZXN0W2RpXSA9IGxMZW4gPDwgNDtcbiAgfSBlbHNlIHtcbiAgICBkZXN0W2RpXSA9IDB4ZjA7XG4gICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG4gICAgZm9yIChsTGVuIC09IDB4ZjsgbExlbiA+PSAweGZmOyBsTGVuIC09IDB4ZmYpIHtcbiAgICAgIGRlc3RbZGldID0gMHhmZjtcbiAgICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVzdFtkaV0gPSBsTGVuO1xuICB9XG4gIGlmICgrK2RpID09PSBkbikge1xuICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICB9XG5cbiAgLy8gd3JpdGUgbGl0ZXJhbHNcbiAgY29uc3QgbGFzdExlbiA9IHNyYy5sZW5ndGggLSBhbmNob3I7XG4gIGNvbnN0IG4gPSBkaSArIGxhc3RMZW47XG4gIGlmIChuID4gZG4pIHtcbiAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgfSBlbHNlIGlmIChuID49IHNuKSB7XG4gICAgLy8gaW5jb21wcmVzc2libGVcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb3B5KGRlc3QsIHNyYywgZGksIGFuY2hvciwgbGFzdExlbik7XG4gIGRpICs9IGxhc3RMZW47XG4gIHJldHVybiBkaTtcbn1cbiJdfQ==
627
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlcnJJbnZhbGlkU291cmNlIiwiRXJyb3IiLCJlcnJTaG9ydEJ1ZmZlciIsIm1pbk1hdGNoIiwid2luU2l6ZUxvZyIsIndpblNpemUiLCJ3aW5NYXNrIiwiaGFzaFNpemVMb2ciLCJoYXNoU2l6ZSIsImhhc2hTaGlmdCIsIm1mTGltaXQiLCJza2lwU3RyZW5ndGgiLCJoYXNoZXIiLCJpbXVsUG9seWZpbGwiLCJhIiwiYiIsImFoIiwiYWwiLCJiaCIsImJsIiwiaW11bCIsIk1hdGgiLCJnZXRVaW50MzIiLCJpIiwiY29weSIsImRlc3QiLCJzcmMiLCJkaSIsInNpIiwibGVuIiwiY2FsY1VuY29tcHJlc3NlZExlbiIsInNuIiwibGVuZ3RoIiwibExlbiIsIm1MZW4iLCJvZmZzZXQiLCJ1bmNvbXByZXNzQmxvY2siLCJkbiIsImNvbXByZXNzQmxvY2tCb3VuZCIsIm4iLCJjb21wcmVzc0Jsb2NrIiwic29mZnNldCIsImhhc2hUYWJsZSIsIlVpbnQzMkFycmF5IiwiaCIsImFuY2hvciIsImZtYSIsInJlZiIsImwiLCJsYXN0TGVuIiwiY29tcHJlc3NCbG9ja0hDIiwiY2hhaW5UYWJsZSIsIm5leHQiLCJtbCIsInNpMiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taW5pZnkvbHo0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGx6NC10cyBAbGljZW5zZSBCU0QtMy1DbGF1c2UgLyBDb3B5cmlnaHQgKGMpIDIwMTUsIFBpZXJyZSBDdXJ0byAvIDIwMTYsIG9vdi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LCBQaWVycmUgQ3VydG9cbiAqIENvcHlyaWdodCAoYykgMjAxNiwgb292XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHh4SGFzaCBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICogICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEVcbiAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMXG4gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVJcbiAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksXG4gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5jb25zdCBlcnJJbnZhbGlkU291cmNlID0gbmV3IEVycm9yKFwiaW52YWxpZCBzb3VyY2VcIik7XG5jb25zdCBlcnJTaG9ydEJ1ZmZlciA9IG5ldyBFcnJvcihcInNob3J0IGJ1ZmZlclwiKTtcblxuLy8gVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0dXAgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS5cbmNvbnN0IG1pbk1hdGNoID0gNDsgLy8gdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgbWF0Y2ggc2VxdWVuY2Ugc2l6ZSAoNCBieXRlcylcbmNvbnN0IHdpblNpemVMb2cgPSAxNjsgLy8gTFo0IDY0S2Igd2luZG93IHNpemUgbGltaXRcbmNvbnN0IHdpblNpemUgPSAxIDw8IHdpblNpemVMb2c7XG5jb25zdCB3aW5NYXNrID0gd2luU2l6ZSAtIDE7IC8vIDY0S2Igd2luZG93IG9mIHByZXZpb3VzIGRhdGEgZm9yIGRlcGVuZGVudCBibG9ja3NcblxuLy8gaGFzaFNpemVMb2cgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZSB1c2VkIHRvIHF1aWNrbHkgZmluZCBhIHByZXZpb3VzIG1hdGNoIHBvc2l0aW9uLlxuLy8gSXRzIHZhbHVlIGluZmx1ZW5jZXMgdGhlIGNvbXByZXNzaW9uIHNwZWVkIGFuZCBtZW1vcnkgdXNhZ2UsIHRoZSBsb3dlciB0aGUgZmFzdGVyLFxuLy8gYnV0IGF0IHRoZSBleHBlbnNlIG9mIHRoZSBjb21wcmVzc2lvbiByYXRpby5cbi8vIDE2IHNlZW1zIHRvIGJlIHRoZSBiZXN0IGNvbXByb21pc2UuXG5jb25zdCBoYXNoU2l6ZUxvZyA9IDE2O1xuY29uc3QgaGFzaFNpemUgPSAxIDw8IGhhc2hTaXplTG9nO1xuY29uc3QgaGFzaFNoaWZ0ID0gbWluTWF0Y2ggKiA4IC0gaGFzaFNpemVMb2c7XG5cbmNvbnN0IG1mTGltaXQgPSA4ICsgbWluTWF0Y2g7IC8vIFRoZSBsYXN0IG1hdGNoIGNhbm5vdCBzdGFydCB3aXRoaW4gdGhlIGxhc3QgMTIgYnl0ZXMuXG5jb25zdCBza2lwU3RyZW5ndGggPSA2OyAvLyB2YXJpYWJsZSBzdGVwIGZvciBmYXN0IHNjYW5cblxuY29uc3QgaGFzaGVyID0gMjY1NDQzNTc2MSB8IDA7IC8vIHByaW1lIG51bWJlciB1c2VkIHRvIGhhc2ggbWluTWF0Y2hcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9pbXVsI1BvbHlmaWxsXG5mdW5jdGlvbiBpbXVsUG9seWZpbGwoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBhaCA9IChhID4+PiAxNikgJiAweGZmZmY7XG4gIGNvbnN0IGFsID0gYSAmIDB4ZmZmZjtcbiAgY29uc3QgYmggPSAoYiA+Pj4gMTYpICYgMHhmZmZmO1xuICBjb25zdCBibCA9IGIgJiAweGZmZmY7XG4gIC8vIHRoZSBzaGlmdCBieSAwIGZpeGVzIHRoZSBzaWduIG9uIHRoZSBoaWdoIHBhcnRcbiAgLy8gdGhlIGZpbmFsIHwwIGNvbnZlcnRzIHRoZSB1bnNpZ25lZCB2YWx1ZSBpbnRvIGEgc2lnbmVkIHZhbHVlXG4gIHJldHVybiAoYWwgKiBibCArICgoKGFoICogYmwgKyBhbCAqIGJoKSA8PCAxNikgPj4+IDApKSB8IDA7XG59XG5jb25zdCBpbXVsID0gTWF0aC5pbXVsID8gTWF0aC5pbXVsIDogaW11bFBvbHlmaWxsO1xuXG5mdW5jdGlvbiBnZXRVaW50MzIoYTogVWludDhBcnJheSwgaTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGFbaSArIDNdIHwgKGFbaSArIDJdIDw8IDgpIHwgKGFbaSArIDFdIDw8IDE2KSB8IChhW2ldIDw8IDI0KTtcbn1cblxuZnVuY3Rpb24gY29weShcbiAgZGVzdDogVWludDhBcnJheSxcbiAgc3JjOiBVaW50OEFycmF5LFxuICBkaTogbnVtYmVyLFxuICBzaTogbnVtYmVyLFxuICBsZW46IG51bWJlclxuKTogdm9pZCB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBkZXN0W2RpKytdID0gc3JjW3NpKytdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjVW5jb21wcmVzc2VkTGVuKHNyYzogVWludDhBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IHNuID0gc3JjLmxlbmd0aDtcbiAgaWYgKHNuID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBsZXQgc2kgPSAwO1xuICBsZXQgZGkgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gbGl0ZXJhbHMgYW5kIG1hdGNoIGxlbmd0aHMgKHRva2VuKVxuICAgIGxldCBsTGVuID0gc3JjW3NpXSA+PiA0O1xuICAgIGxldCBtTGVuID0gc3JjW3NpXSAmIDB4ZjtcbiAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgfVxuXG4gICAgLy8gbGl0ZXJhbHNcbiAgICBpZiAobExlbiA+IDApIHtcbiAgICAgIGlmIChsTGVuID09PSAweGYpIHtcbiAgICAgICAgd2hpbGUgKHNyY1tzaV0gPT09IDB4ZmYpIHtcbiAgICAgICAgICBsTGVuICs9IDB4ZmY7XG4gICAgICAgICAgaWYgKCsrc2kgPT09IHNuKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsTGVuICs9IHNyY1tzaV07XG4gICAgICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRpICs9IGxMZW47XG4gICAgICBzaSArPSBsTGVuO1xuICAgICAgaWYgKHNpID49IHNuKSB7XG4gICAgICAgIHJldHVybiBkaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaSArPSAyO1xuICAgIGlmIChzaSA+PSBzbikge1xuICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICB9XG4gICAgY29uc3Qgb2Zmc2V0ID0gc3JjW3NpIC0gMl0gfCAoc3JjW3NpIC0gMV0gPDwgOCk7XG4gICAgaWYgKGRpIC0gb2Zmc2V0IDwgMCB8fCBvZmZzZXQgPT09IDApIHtcbiAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgfVxuXG4gICAgLy8gbWF0Y2hcbiAgICBpZiAobUxlbiA9PT0gMHhmKSB7XG4gICAgICB3aGlsZSAoc3JjW3NpXSA9PT0gMHhmZikge1xuICAgICAgICBtTGVuICs9IDB4ZmY7XG4gICAgICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1MZW4gKz0gc3JjW3NpXTtcbiAgICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBtaW5pbXVtIG1hdGNoIGxlbmd0aCBpcyA0XG4gICAgbUxlbiArPSA0O1xuXG4gICAgLy8gY29weSB0aGUgbWF0Y2ggKE5CLiBtYXRjaCBpcyBhdCBsZWFzdCA0IGJ5dGVzIGxvbmcpXG4gICAgZm9yICg7IG1MZW4gPj0gb2Zmc2V0OyBtTGVuIC09IG9mZnNldCkge1xuICAgICAgZGkgKz0gb2Zmc2V0O1xuICAgIH1cbiAgICBkaSArPSBtTGVuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmNvbXByZXNzQmxvY2soc3JjOiBVaW50OEFycmF5LCBkZXN0OiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3Qgc24gPSBzcmMubGVuZ3RoO1xuICBjb25zdCBkbiA9IGRlc3QubGVuZ3RoO1xuICBpZiAoc24gPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBzaSA9IDA7XG4gIGxldCBkaSA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyBsaXRlcmFscyBhbmQgbWF0Y2ggbGVuZ3RocyAodG9rZW4pXG4gICAgbGV0IGxMZW4gPSBzcmNbc2ldID4+IDQ7XG4gICAgbGV0IG1MZW4gPSBzcmNbc2ldICYgMHhmO1xuICAgIGlmICgrK3NpID09PSBzbikge1xuICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICB9XG5cbiAgICAvLyBsaXRlcmFsc1xuICAgIGlmIChsTGVuID4gMCkge1xuICAgICAgaWYgKGxMZW4gPT09IDB4Zikge1xuICAgICAgICB3aGlsZSAoc3JjW3NpXSA9PT0gMHhmZikge1xuICAgICAgICAgIGxMZW4gKz0gMHhmZjtcbiAgICAgICAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgICAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxMZW4gKz0gc3JjW3NpXTtcbiAgICAgICAgaWYgKCsrc2kgPT09IHNuKSB7XG4gICAgICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRuIC0gZGkgPCBsTGVuIHx8IHNpICsgbExlbiA+IHNuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgICAgY29weShkZXN0LCBzcmMsIGRpLCBzaSwgbExlbik7XG4gICAgICBkaSArPSBsTGVuO1xuICAgICAgc2kgKz0gbExlbjtcbiAgICAgIGlmIChzaSA+PSBzbikge1xuICAgICAgICByZXR1cm4gZGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2kgKz0gMjtcbiAgICBpZiAoc2kgPj0gc24pIHtcbiAgICAgIHRocm93IGVyckludmFsaWRTb3VyY2U7XG4gICAgfVxuICAgIGNvbnN0IG9mZnNldCA9IHNyY1tzaSAtIDJdIHwgKHNyY1tzaSAtIDFdIDw8IDgpO1xuICAgIGlmIChkaSAtIG9mZnNldCA8IDAgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgIH1cblxuICAgIC8vIG1hdGNoXG4gICAgaWYgKG1MZW4gPT09IDB4Zikge1xuICAgICAgd2hpbGUgKHNyY1tzaV0gPT09IDB4ZmYpIHtcbiAgICAgICAgbUxlbiArPSAweGZmO1xuICAgICAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgICAgICB0aHJvdyBlcnJJbnZhbGlkU291cmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtTGVuICs9IHNyY1tzaV07XG4gICAgICBpZiAoKytzaSA9PT0gc24pIHtcbiAgICAgICAgdGhyb3cgZXJySW52YWxpZFNvdXJjZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gbWluaW11bSBtYXRjaCBsZW5ndGggaXMgNFxuICAgIG1MZW4gKz0gNDtcbiAgICBpZiAoZG4gLSBkaSA8PSBtTGVuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG5cbiAgICAvLyBjb3B5IHRoZSBtYXRjaCAoTkIuIG1hdGNoIGlzIGF0IGxlYXN0IDQgYnl0ZXMgbG9uZylcbiAgICBmb3IgKDsgbUxlbiA+PSBvZmZzZXQ7IG1MZW4gLT0gb2Zmc2V0KSB7XG4gICAgICBjb3B5KGRlc3QsIGRlc3QsIGRpLCBkaSAtIG9mZnNldCwgb2Zmc2V0KTtcbiAgICAgIGRpICs9IG9mZnNldDtcbiAgICB9XG4gICAgY29weShkZXN0LCBkZXN0LCBkaSwgZGkgLSBvZmZzZXQsIG1MZW4pO1xuICAgIGRpICs9IG1MZW47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXByZXNzQmxvY2tCb3VuZChuOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbiArICgobiAvIDI1NSkgfCAwKSArIDE2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3NCbG9jayhcbiAgc3JjOiBVaW50OEFycmF5LFxuICBkZXN0OiBVaW50OEFycmF5LFxuICBzb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciB7XG4gIGNvbnN0IHNuID0gc3JjLmxlbmd0aCAtIG1mTGltaXQ7XG4gIGNvbnN0IGRuID0gZGVzdC5sZW5ndGg7XG4gIGlmIChzbiA8PSAwIHx8IGRuID09PSAwIHx8IHNvZmZzZXQgPj0gc24pIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBsZXQgc2kgPSAwLFxuICAgIGRpID0gMDtcblxuICAvLyBmYXN0IHNjYW4gc3RyYXRlZ3k6XG4gIC8vIHdlIG9ubHkgbmVlZCBhIGhhc2ggdGFibGUgdG8gc3RvcmUgdGhlIGxhc3Qgc2VxdWVuY2VzICg0IGJ5dGVzKVxuICBjb25zdCBoYXNoVGFibGUgPSBuZXcgVWludDMyQXJyYXkoaGFzaFNpemUpO1xuXG4gIC8vIEluaXRpYWxpc2UgdGhlIGhhc2ggdGFibGUgd2l0aCB0aGUgZmlyc3QgNjRLYiBvZiB0aGUgaW5wdXQgYnVmZmVyXG4gIC8vICh1c2VkIHdoZW4gY29tcHJlc3NpbmcgZGVwZW5kZW50IGJsb2NrcylcbiAgd2hpbGUgKHNpIDwgc29mZnNldCkge1xuICAgIGNvbnN0IGggPSBpbXVsKGdldFVpbnQzMihzcmMsIHNpKSwgaGFzaGVyKSA+Pj4gaGFzaFNoaWZ0O1xuICAgIGhhc2hUYWJsZVtoXSA9ICsrc2k7XG4gIH1cblxuICBsZXQgYW5jaG9yID0gc2k7XG4gIGxldCBmbWEgPSAxIDw8IHNraXBTdHJlbmd0aDtcbiAgd2hpbGUgKHNpIDwgc24gLSBtaW5NYXRjaCkge1xuICAgIC8vIGhhc2ggdGhlIG5leHQgNCBieXRlcyAoc2VxdWVuY2UpLi4uXG4gICAgY29uc3QgaCA9IGltdWwoZ2V0VWludDMyKHNyYywgc2kpLCBoYXNoZXIpID4+PiBoYXNoU2hpZnQ7XG4gICAgLy8gLTEgdG8gc2VwYXJhdGUgZXhpc3RpbmcgZW50cmllcyBmcm9tIG5ldyBvbmVzXG4gICAgY29uc3QgcmVmID0gaGFzaFRhYmxlW2hdIC0gMTtcbiAgICAvLyAuLi5hbmQgc3RvcmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBoYXNoIGluIHRoZSBoYXNoIHRhYmxlICgrMSB0byBjb21wZW5zYXRlIHRoZSAtMSB1cG9uIHNhdmluZylcbiAgICBoYXNoVGFibGVbaF0gPSBzaSArIDE7XG4gICAgLy8gbm8gbmVlZCB0byBjaGVjayB0aGUgbGFzdCAzIGJ5dGVzIGluIHRoZSBmaXJzdCBsaXRlcmFsIDQgYnl0ZXMgYXNcbiAgICAvLyB0aGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgbmV4dCBtYXRjaCwgaWYgYW55LCBpcyBjb21wcmVzc2VkIHdpdGhcbiAgICAvLyBhIGxvd2VyIHNpemUsIHNpbmNlIHRvIGhhdmUgc29tZSBjb21wcmVzc2lvbiB3ZSBtdXN0IGhhdmU6XG4gICAgLy8gbGwrbWwtb3ZlcmxhcCA+IDEgKyAobGwtMTUpLzI1NSArIChtbC00LTE1KS8yNTUgKyAyICh1bmNvbXByZXNzZWQgc2l6ZT5jb21wcmVzc2VkIHNpemUpXG4gICAgLy8gPT4gbGwrbWw+MysyKm92ZXJsYXAgPT4gbGwrbWw+PSA0KzIqb3ZlcmxhcFxuICAgIC8vIGFuZCBieSBkZWZpbml0aW9uIHdlIGRvIGhhdmU6XG4gICAgLy8gbGwgPj0gMSwgbWwgPj0gNFxuICAgIC8vID0+IGxsK21sID49IDVcbiAgICAvLyA9PiBzbyBvdmVybGFwIG11c3QgYmUgMFxuXG4gICAgLy8gdGhlIHNlcXVlbmNlIGlzIG5ldywgb3V0IG9mIGJvdW5kICg2NGtiKSBvciBub3QgdmFsaWQ6IHRyeSBuZXh0IHNlcXVlbmNlXG4gICAgaWYgKFxuICAgICAgcmVmIDwgMCB8fCAvLyhmbWEgJiAoKDEgPDwgc2tpcFN0cmVuZ3RoKSAtIDEpKSA8IDQgfHwgLy8gdGhpcyBjb2RlIHNlZW1zIGhhcyBhIGJpZyBwZW5hbHR5IGZvciBzaXplLi4uXG4gICAgICAoc2kgLSByZWYpID4+IHdpblNpemVMb2cgPiAwIHx8XG4gICAgICBzcmNbcmVmXSAhPT0gc3JjW3NpXSB8fFxuICAgICAgc3JjW3JlZiArIDFdICE9PSBzcmNbc2kgKyAxXSB8fFxuICAgICAgc3JjW3JlZiArIDJdICE9PSBzcmNbc2kgKyAyXSB8fFxuICAgICAgc3JjW3JlZiArIDNdICE9PSBzcmNbc2kgKyAzXVxuICAgICkge1xuICAgICAgLy8gdmFyaWFibGUgc3RlcDogaW1wcm92ZXMgcGVyZm9ybWFuY2Ugb24gbm9uLWNvbXByZXNzaWJsZSBkYXRhXG4gICAgICBzaSArPSBmbWEgPj4gc2tpcFN0cmVuZ3RoO1xuICAgICAgKytmbWE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gbWF0Y2ggZm91bmRcbiAgICBmbWEgPSAxIDw8IHNraXBTdHJlbmd0aDtcbiAgICBjb25zdCBsTGVuID0gc2kgLSBhbmNob3I7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc2kgLSByZWY7XG5cbiAgICAvLyBlbmNvZGUgbWF0Y2ggbGVuZ3RoIHBhcnQgMVxuICAgIHNpICs9IG1pbk1hdGNoO1xuICAgIGxldCBtTGVuID0gc2k7IC8vIG1hdGNoIGxlbmd0aCBoYXMgbWluTWF0Y2ggYWxyZWFkeVxuICAgIHdoaWxlIChzaSA8PSBzbiAmJiBzcmNbc2ldID09PSBzcmNbc2kgLSBvZmZzZXRdKSB7XG4gICAgICBzaSsrO1xuICAgIH1cbiAgICBtTGVuID0gc2kgLSBtTGVuO1xuICAgIGlmIChtTGVuIDwgMHhmKSB7XG4gICAgICBkZXN0W2RpXSA9IG1MZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc3RbZGldID0gMHhmO1xuICAgIH1cblxuICAgIC8vIGVuY29kZSBsaXRlcmFscyBsZW5ndGhcbiAgICBpZiAobExlbiA8IDB4Zikge1xuICAgICAgZGVzdFtkaV0gfD0gbExlbiA8PCA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXN0W2RpXSB8PSAweGYwO1xuICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgICAgbGV0IGwgPSBsTGVuIC0gMHhmO1xuICAgICAgZm9yICg7IGwgPj0gMHhmZjsgbCAtPSAweGZmKSB7XG4gICAgICAgIGRlc3RbZGldID0gMHhmZjtcbiAgICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlc3RbZGldID0gbCAmIDB4ZmY7XG4gICAgfVxuICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuXG4gICAgLy8gbGl0ZXJhbHNcbiAgICBpZiAoZGkgKyBsTGVuID49IGRuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG4gICAgY29weShkZXN0LCBzcmMsIGRpLCBhbmNob3IsIGxMZW4pO1xuICAgIGRpICs9IGxMZW47XG4gICAgYW5jaG9yID0gc2k7XG5cbiAgICAvLyBlbmNvZGUgb2Zmc2V0XG4gICAgZGkgKz0gMjtcbiAgICBpZiAoZGkgPj0gZG4pIHtcbiAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgIH1cbiAgICBkZXN0W2RpIC0gMl0gPSBvZmZzZXQ7XG4gICAgZGVzdFtkaSAtIDFdID0gb2Zmc2V0ID4+IDg7XG5cbiAgICAvLyBlbmNvZGUgbWF0Y2ggbGVuZ3RoIHBhcnQgMlxuICAgIGlmIChtTGVuID49IDB4Zikge1xuICAgICAgZm9yIChtTGVuIC09IDB4ZjsgbUxlbiA+PSAweGZmOyBtTGVuIC09IDB4ZmYpIHtcbiAgICAgICAgZGVzdFtkaV0gPSAweGZmO1xuICAgICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzdFtkaV0gPSBtTGVuO1xuICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbmNob3IgPT09IDApIHtcbiAgICAvLyBpbmNvbXByZXNzaWJsZVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gbGFzdCBsaXRlcmFsc1xuICBsZXQgbExlbiA9IHNyYy5sZW5ndGggLSBhbmNob3I7XG4gIGlmIChsTGVuIDwgMHhmKSB7XG4gICAgZGVzdFtkaV0gPSBsTGVuIDw8IDQ7XG4gIH0gZWxzZSB7XG4gICAgZGVzdFtkaV0gPSAweGYwO1xuICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuICAgIGZvciAobExlbiAtPSAweGY7IGxMZW4gPj0gMHhmZjsgbExlbiAtPSAweGZmKSB7XG4gICAgICBkZXN0W2RpXSA9IDB4ZmY7XG4gICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGRlc3RbZGldID0gbExlbjtcbiAgfVxuICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgfVxuXG4gIC8vIHdyaXRlIGxpdGVyYWxzXG4gIGNvbnN0IGxhc3RMZW4gPSBzcmMubGVuZ3RoIC0gYW5jaG9yO1xuICBjb25zdCBuID0gZGkgKyBsYXN0TGVuO1xuICBpZiAobiA+IGRuKSB7XG4gICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gIH0gZWxzZSBpZiAobiA+PSBzbikge1xuICAgIC8vIGluY29tcHJlc3NpYmxlXG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29weShkZXN0LCBzcmMsIGRpLCBhbmNob3IsIGxhc3RMZW4pO1xuICBkaSArPSBsYXN0TGVuO1xuICByZXR1cm4gZGk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wcmVzc0Jsb2NrSEMoXG4gIHNyYzogVWludDhBcnJheSxcbiAgZGVzdDogVWludDhBcnJheSxcbiAgc29mZnNldDogbnVtYmVyXG4pOiBudW1iZXIge1xuICBjb25zdCBzbiA9IHNyYy5sZW5ndGggLSBtZkxpbWl0O1xuICBjb25zdCBkbiA9IGRlc3QubGVuZ3RoO1xuICBpZiAoc24gPD0gMCB8fCBkbiA9PT0gMCB8fCBzb2Zmc2V0ID49IHNuKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgbGV0IHNpID0gMDtcbiAgbGV0IGRpID0gMDtcblxuICAvLyBIYXNoIENoYWluIHN0cmF0ZWd5OlxuICAvLyB3ZSBuZWVkIGEgaGFzaCB0YWJsZSBhbmQgYSBjaGFpbiB0YWJsZVxuICAvLyB0aGUgY2hhaW4gdGFibGUgY2Fubm90IGNvbnRhaW4gbW9yZSBlbnRyaWVzIHRoYW4gdGhlIHdpbmRvdyBzaXplICg2NEtiIGVudHJpZXMpXG4gIGNvbnN0IGhhc2hUYWJsZSA9IG5ldyBVaW50MzJBcnJheShoYXNoU2l6ZSk7XG4gIGNvbnN0IGNoYWluVGFibGUgPSBuZXcgVWludDMyQXJyYXkod2luU2l6ZSk7XG5cbiAgLy8gSW5pdGlhbGlzZSB0aGUgaGFzaCB0YWJsZSB3aXRoIHRoZSBmaXJzdCA2NEtiIG9mIHRoZSBpbnB1dCBidWZmZXJcbiAgLy8gKHVzZWQgd2hlbiBjb21wcmVzc2luZyBkZXBlbmRlbnQgYmxvY2tzKVxuICB3aGlsZSAoc2kgPCBzb2Zmc2V0KSB7XG4gICAgY29uc3QgaCA9IGltdWwoZ2V0VWludDMyKHNyYywgc2kpLCBoYXNoZXIpID4+PiBoYXNoU2hpZnQ7XG4gICAgY2hhaW5UYWJsZVtzaSAmIHdpbk1hc2tdID0gaGFzaFRhYmxlW2hdO1xuICAgIGhhc2hUYWJsZVtoXSA9ICsrc2k7XG4gIH1cblxuICBsZXQgYW5jaG9yID0gc2k7XG4gIHdoaWxlIChzaSA8IHNuIC0gbWluTWF0Y2gpIHtcbiAgICAvLyBoYXNoIHRoZSBuZXh0IDQgYnl0ZXMgKHNlcXVlbmNlKS4uLlxuICAgIGNvbnN0IGggPSBpbXVsKGdldFVpbnQzMihzcmMsIHNpKSwgaGFzaGVyKSA+Pj4gaGFzaFNoaWZ0O1xuXG4gICAgLy8gZm9sbG93IHRoZSBjaGFpbiB1bnRpbCBvdXQgb2Ygd2luZG93IGFuZCBnaXZlIHRoZSBsb25nZXN0IG1hdGNoXG4gICAgbGV0IG1MZW4gPSAwO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAoXG4gICAgICBsZXQgbmV4dCA9IGhhc2hUYWJsZVtoXSAtIDE7XG4gICAgICBuZXh0ID4gMCAmJiBuZXh0ID4gc2kgLSB3aW5TaXplO1xuICAgICAgbmV4dCA9IGNoYWluVGFibGVbbmV4dCAmIHdpbk1hc2tdIC0gMVxuICAgICkge1xuICAgICAgLy8gdGhlIGZpcnN0IChtTGVuPT0wKSBvciBuZXh0IGJ5dGUgKG1MZW4+PW1pbk1hdGNoKSBhdCBjdXJyZW50IG1hdGNoIGxlbmd0aCBtdXN0IG1hdGNoIHRvIGltcHJvdmUgb24gdGhlIG1hdGNoIGxlbmd0aFxuICAgICAgaWYgKHNyY1tuZXh0ICsgbUxlbl0gPT09IHNyY1tzaSArIG1MZW5dKSB7XG4gICAgICAgIGZvciAobGV0IG1sID0gMDsgOyArK21sKSB7XG4gICAgICAgICAgaWYgKHNyY1tuZXh0ICsgbWxdICE9PSBzcmNbc2kgKyBtbF0gfHwgc2kgKyBtbCA+IHNuKSB7XG4gICAgICAgICAgICAvLyBmb3VuZCBhIGxvbmdlciBtYXRjaCwga2VlcCBpdHMgcG9zaXRpb24gYW5kIGxlbmd0aFxuICAgICAgICAgICAgaWYgKG1MZW4gPCBtbCAmJiBtbCA+PSBtaW5NYXRjaCkge1xuICAgICAgICAgICAgICBtTGVuID0gbWw7XG4gICAgICAgICAgICAgIG9mZnNldCA9IHNpIC0gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjaGFpblRhYmxlW3NpICYgd2luTWFza10gPSBoYXNoVGFibGVbaF07XG4gICAgaGFzaFRhYmxlW2hdID0gc2kgKyAxO1xuXG4gICAgLy8gbm8gbWF0Y2ggZm91bmRcbiAgICBpZiAobUxlbiA9PT0gMCkge1xuICAgICAgKytzaTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCBzaTIgPSBzaSArIDE7XG4gICAgY29uc3QgbWwgPSBzaSArIG1MZW47XG5cbiAgICAvLyBtYXRjaCBmb3VuZFxuICAgIC8vIHVwZGF0ZSBoYXNoL2NoYWluIHRhYmxlcyB3aXRoIG92ZXJsYXBpbmcgYnl0ZXM6XG4gICAgLy8gc2kgYWxyZWFkeSBoYXNoZWQsIGFkZCBldmVyeXRoaW5nIGZyb20gc2krMSB1cCB0byB0aGUgbWF0Y2ggbGVuZ3RoXG4gICAgd2hpbGUgKHNpMiA8IG1sKSB7XG4gICAgICBjb25zdCBoID0gaW11bChnZXRVaW50MzIoc3JjLCBzaTIpLCBoYXNoZXIpID4+PiBoYXNoU2hpZnQ7XG4gICAgICBjaGFpblRhYmxlW3NpMiAmIHdpbk1hc2tdID0gaGFzaFRhYmxlW2hdO1xuICAgICAgaGFzaFRhYmxlW2hdID0gKytzaTI7XG4gICAgfVxuXG4gICAgY29uc3QgbExlbiA9IHNpIC0gYW5jaG9yO1xuICAgIHNpICs9IG1MZW47XG4gICAgbUxlbiAtPSBtaW5NYXRjaDsgLy8gbWF0Y2ggbGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgbWluTWF0Y2hcblxuICAgIGlmIChtTGVuIDwgMHhmKSB7XG4gICAgICBkZXN0W2RpXSA9IG1MZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc3RbZGldID0gMHhmO1xuICAgIH1cblxuICAgIC8vIGVuY29kZSBsaXRlcmFscyBsZW5ndGhcbiAgICBpZiAobExlbiA8IDB4Zikge1xuICAgICAgZGVzdFtkaV0gfD0gbExlbiA8PCA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXN0W2RpXSB8PSAweGYwO1xuICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgICAgbGV0IGwgPSBsTGVuIC0gMHhmO1xuICAgICAgZm9yICg7IGwgPj0gMHhmZjsgbCAtPSAweGZmKSB7XG4gICAgICAgIGRlc3RbZGldID0gMHhmZjtcbiAgICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlc3RbZGldID0gbCAmIDB4ZmY7XG4gICAgfVxuICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuXG4gICAgLy8gbGl0ZXJhbHNcbiAgICBpZiAoZGkgKyBsTGVuID49IGRuKSB7XG4gICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICB9XG4gICAgY29weShkZXN0LCBzcmMsIGRpLCBhbmNob3IsIGxMZW4pO1xuICAgIGRpICs9IGxMZW47XG4gICAgYW5jaG9yID0gc2k7XG5cbiAgICAvLyBlbmNvZGUgb2Zmc2V0XG4gICAgZGkgKz0gMjtcbiAgICBpZiAoZGkgPj0gZG4pIHtcbiAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgIH1cbiAgICBkZXN0W2RpIC0gMl0gPSBvZmZzZXQ7XG4gICAgZGVzdFtkaSAtIDFdID0gb2Zmc2V0ID4+IDg7XG5cbiAgICAvLyBlbmNvZGUgbWF0Y2ggbGVuZ3RoIHBhcnQgMlxuICAgIGlmIChtTGVuID49IDB4Zikge1xuICAgICAgZm9yIChtTGVuIC09IDB4ZjsgbUxlbiA+PSAweGZmOyBtTGVuIC09IDB4ZmYpIHtcbiAgICAgICAgZGVzdFtkaV0gPSAweGZmO1xuICAgICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzdFtkaV0gPSBtTGVuO1xuICAgICAgaWYgKCsrZGkgPT09IGRuKSB7XG4gICAgICAgIHRocm93IGVyclNob3J0QnVmZmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbmNob3IgPT09IDApIHtcbiAgICAvLyBpbmNvbXByZXNzaWJsZVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gbGFzdCBsaXRlcmFsc1xuICBsZXQgbExlbiA9IHNyYy5sZW5ndGggLSBhbmNob3I7XG4gIGlmIChsTGVuIDwgMHhmKSB7XG4gICAgZGVzdFtkaV0gPSBsTGVuIDw8IDQ7XG4gIH0gZWxzZSB7XG4gICAgZGVzdFtkaV0gPSAweGYwO1xuICAgIGlmICgrK2RpID09PSBkbikge1xuICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgfVxuICAgIGZvciAobExlbiAtPSAweGY7IGxMZW4gPj0gMHhmZjsgbExlbiAtPSAweGZmKSB7XG4gICAgICBkZXN0W2RpXSA9IDB4ZmY7XG4gICAgICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICAgICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGRlc3RbZGldID0gbExlbjtcbiAgfVxuICBpZiAoKytkaSA9PT0gZG4pIHtcbiAgICB0aHJvdyBlcnJTaG9ydEJ1ZmZlcjtcbiAgfVxuXG4gIC8vIHdyaXRlIGxpdGVyYWxzXG4gIGNvbnN0IGxhc3RMZW4gPSBzcmMubGVuZ3RoIC0gYW5jaG9yO1xuICBjb25zdCBuID0gZGkgKyBsYXN0TGVuO1xuICBpZiAobiA+IGRuKSB7XG4gICAgdGhyb3cgZXJyU2hvcnRCdWZmZXI7XG4gIH0gZWxzZSBpZiAobiA+PSBzbikge1xuICAgIC8vIGluY29tcHJlc3NpYmxlXG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29weShkZXN0LCBzcmMsIGRpLCBhbmNob3IsIGxhc3RMZW4pO1xuICBkaSArPSBsYXN0TGVuO1xuICByZXR1cm4gZGk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLGdCQUFnQixHQUFHLElBQUlDLEtBQUosQ0FBVSxnQkFBVixDQUF6QjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxJQUFJRCxLQUFKLENBQVUsY0FBVixDQUF2QixDLENBRUE7O0FBQ0EsTUFBTUUsUUFBUSxHQUFHLENBQWpCLEMsQ0FBb0I7O0FBQ3BCLE1BQU1DLFVBQVUsR0FBRyxFQUFuQixDLENBQXVCOztBQUN2QixNQUFNQyxPQUFPLEdBQUcsS0FBS0QsVUFBckI7QUFDQSxNQUFNRSxPQUFPLEdBQUdELE9BQU8sR0FBRyxDQUExQixDLENBQTZCO0FBRTdCO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1FLFdBQVcsR0FBRyxFQUFwQjtBQUNBLE1BQU1DLFFBQVEsR0FBRyxLQUFLRCxXQUF0QjtBQUNBLE1BQU1FLFNBQVMsR0FBR04sUUFBUSxHQUFHLENBQVgsR0FBZUksV0FBakM7QUFFQSxNQUFNRyxPQUFPLEdBQUcsSUFBSVAsUUFBcEIsQyxDQUE4Qjs7QUFDOUIsTUFBTVEsWUFBWSxHQUFHLENBQXJCLEMsQ0FBd0I7O0FBRXhCLE1BQU1DLE1BQU0sR0FBRyxhQUFhLENBQTVCLEMsQ0FBK0I7QUFFL0I7O0FBQ0EsU0FBU0MsWUFBVCxDQUFzQkMsQ0FBdEIsRUFBaUNDLENBQWpDLEVBQW9EO0VBQ2xELE1BQU1DLEVBQUUsR0FBSUYsQ0FBQyxLQUFLLEVBQVAsR0FBYSxN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