@bitgo/sdk-core 8.2.0 → 8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +13 -4
  3. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
  4. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +53 -8
  5. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +17 -17
  6. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
  7. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +18 -18
  8. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +32 -35
  9. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
  10. package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
  11. package/dist/src/bitgo/bitgoBase.d.ts +0 -1
  12. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  13. package/dist/src/bitgo/bitgoBase.js +1 -1
  14. package/dist/src/bitgo/enterprise/enterprise.d.ts +11 -8
  15. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
  16. package/dist/src/bitgo/enterprise/enterprise.js +16 -4
  17. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +10 -3
  18. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
  19. package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
  20. package/dist/src/bitgo/tss/common.d.ts +2 -2
  21. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  22. package/dist/src/bitgo/tss/common.js +1 -1
  23. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +3 -3
  24. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  25. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +2 -2
  26. package/dist/src/bitgo/tss/ecdsa/types.d.ts +2 -2
  27. package/dist/src/bitgo/tss/ecdsa/types.js +1 -1
  28. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +16 -22
  29. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  30. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +52 -92
  31. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +2 -21
  32. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
  33. package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
  34. package/dist/src/bitgo/wallet/iWallet.d.ts +13 -0
  35. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  36. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  37. package/dist/src/bitgo/wallet/iWallets.d.ts +1 -1
  38. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  39. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  40. package/dist/src/bitgo/wallet/wallet.d.ts +9 -1
  41. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  42. package/dist/src/bitgo/wallet/wallet.js +13 -1
  43. package/dist/tsconfig.tsbuildinfo +899 -754
  44. package/package.json +4 -4
  45. package/LICENSE +0 -191
@@ -1,61 +1,61 @@
1
1
  import BaseCurve from '../../curves';
2
2
  import { PublicKey } from 'paillier-bigint';
3
- import { NTilde, NtildeProofH1H2, RangeProof, RangeProofWithCheck } from './types';
3
+ import { DeserializedNtilde, DeserializedNtildeProof, RangeProof, RangeProofWithCheck } from './types';
4
4
  export declare function generateSafePrimes(bitLengths: number[]): Promise<bigint[]>;
5
5
  export declare function randomCoPrimeTo(x: bigint): Promise<bigint>;
6
6
  /**
7
7
  * Generate "challenge" values for range proofs.
8
8
  * @param {number} bitlength The bit length of the modulus to generate. This should
9
9
  * be the same as the bit length of the paillier public keys used for MtA.
10
- * @returns {NTilde} The generated NTilde values.
10
+ * @returns {DeserializedNtilde} The generated Ntilde values.
11
11
  */
12
- export declare function generateNTilde(bitlength: number): Promise<NTilde>;
12
+ export declare function generateNtilde(bitlength: number): Promise<DeserializedNtilde>;
13
13
  /**
14
14
  * Generate iterations of Ntilde, h1, h2 discrete log proofs.
15
- * @param {NTilde} ntilde Ntilde, h1, h2 to generate the proofs for.
15
+ * @param {DeserializedNtilde} ntilde Ntilde, h1, h2 to generate the proofs for.
16
16
  * @param {bigint} x Either alpha or beta depending on whether it is a discrete log proof of
17
17
  * h1 w.r.t h2 or h2 w.r.t h1.
18
18
  * @param {bigint} q1 The Sophie Germain prime associated with the first safe prime p1 used to generate Ntilde.
19
19
  * @param {bigint} q2 The Sophie Germain prime associated with the second safe prime p2 used to generate Ntilde.
20
- * @returns {NTildeProof} The generated NTilde Proofs.
20
+ * @returns {NtildeProof} The generated Ntilde Proofs.
21
21
  */
22
- export declare function generateNTildeProof(ntilde: NTilde, x: bigint, q1: bigint, q2: bigint): Promise<NtildeProofH1H2>;
22
+ export declare function generateNtildeProof(ntilde: DeserializedNtilde, x: bigint, q1: bigint, q2: bigint): Promise<DeserializedNtildeProof>;
23
23
  /**
24
24
  * Verify discrete log proofs of h1 and h2 mod Ntilde.
25
- * @param {NTilde} ntilde Ntilde, h1, h2 to generate the proofs for.
26
- * @param {NtildeProof} ntildeProof Ntilde Proofs
25
+ * @param {DeserializedNtilde} ntilde Ntilde, h1, h2 to generate the proofs for.
26
+ * @param {DeserializedNtildeProof} ntildeProof Ntilde Proofs
27
27
  * @returns {boolean} true if proof is verified, false otherwise.
28
28
  */
29
- export declare function verifyNtildeProof(ntilde: NTilde, ntildeProof: NtildeProofH1H2): Promise<boolean>;
29
+ export declare function verifyNtildeProof(ntilde: DeserializedNtilde, ntildeProof: DeserializedNtildeProof): Promise<boolean>;
30
30
  /**
31
31
  * Generate a zero-knowledge range proof that an encrypted value is "small".
32
32
  * @param {BaseCurve} curve An elliptic curve to use for group operations.
33
33
  * @param {number} modulusBits The bit count of the prover's public key.
34
34
  * @param {PublicKey} pk The prover's public key.
35
- * @param {NTilde} ntilde The verifier's NTilde values.
35
+ * @param {DeserializedNtilde} ntilde The verifier's Ntilde values.
36
36
  * @param {bigint} c The ciphertext.
37
37
  * @param {bigint} m The plaintext.
38
38
  * @param {bigint} r The obfuscation value used to encrypt m.
39
39
  * @returns {RangeProof} The generated proof.
40
40
  */
41
- export declare function prove(curve: BaseCurve, modulusBits: number, pk: PublicKey, ntilde: NTilde, c: bigint, m: bigint, r: bigint): Promise<RangeProof>;
41
+ export declare function prove(curve: BaseCurve, modulusBits: number, pk: PublicKey, ntilde: DeserializedNtilde, c: bigint, m: bigint, r: bigint): Promise<RangeProof>;
42
42
  /**
43
43
  * Verify a zero-knowledge range proof that an encrypted value is "small".
44
44
  * @param {BaseCurve} curve An elliptic curve to use for group operations.
45
45
  * @param {number} modulusBits The bit count of the prover's public key.
46
46
  * @param {PublicKey} pk The prover's public key.
47
- * @param {NTilde} ntilde The verifier's NTilde values.
47
+ * @param {DeserializedNtilde} ntilde The verifier's Ntilde values.
48
48
  * @param {RangeProof} proof The range proof.
49
49
  * @param {bigint} c The ciphertext.
50
50
  * @returns {boolean} True if verification succeeds.
51
51
  */
52
- export declare function verify(curve: BaseCurve, modulusBits: number, pk: PublicKey, ntilde: NTilde, proof: RangeProof, c: bigint): boolean;
52
+ export declare function verify(curve: BaseCurve, modulusBits: number, pk: PublicKey, ntilde: DeserializedNtilde, proof: RangeProof, c: bigint): boolean;
53
53
  /**
54
54
  * Generate a zero-knowledge range proof that a homomorphically manipulated value is "small".
55
55
  * @param {BaseCurve} curve An elliptic curve to use for group operations.
56
56
  * @param {number} modulusBits The bit count of the prover's public key.
57
57
  * @param {PublicKey} pk The prover's public key.
58
- * @param {NTilde} ntilde The verifier's NTilde values.
58
+ * @param {DeserializedNtilde} ntilde The verifier's Ntilde values.
59
59
  * @param {bigint} c1 The original ciphertext.
60
60
  * @param {bigint} c2 The manipulated ciphertext.
61
61
  * @param {bigint} x The plaintext value multiplied by the original plaintext.
@@ -64,18 +64,18 @@ export declare function verify(curve: BaseCurve, modulusBits: number, pk: Public
64
64
  * @param {bigint} X The curve's base point raised to x.
65
65
  * @returns {RangeProofWithCheck} The generated proof.
66
66
  */
67
- export declare function proveWithCheck(curve: BaseCurve, modulusBits: number, pk: PublicKey, ntilde: NTilde, c1: bigint, c2: bigint, x: bigint, y: bigint, r: bigint, X: bigint): Promise<RangeProofWithCheck>;
67
+ export declare function proveWithCheck(curve: BaseCurve, modulusBits: number, pk: PublicKey, ntilde: DeserializedNtilde, c1: bigint, c2: bigint, x: bigint, y: bigint, r: bigint, X: bigint): Promise<RangeProofWithCheck>;
68
68
  /**
69
69
  * Verify a zero-knowledge range proof that a homomorphically manipulated value is "small".
70
70
  * @param {BaseCurve} curve An elliptic curve to use for group operations.
71
71
  * @param {number} modulusBits The bit count of the prover's public key.
72
72
  * @param {PublicKey} pk The prover's public key.
73
- * @param {NTilde} ntilde The verifier's NTilde values.
73
+ * @param {DeserializedNtilde} ntilde The verifier's Ntilde values.
74
74
  * @param {RangeProofWithCheck} proof The range proof.
75
75
  * @param {bigint} c1 The original ciphertext.
76
76
  * @param {bigint} c2 The manipulated ciphertext.
77
77
  * @param {bigint} X The curve's base point raised to x.
78
78
  * @returns {boolean} True if verification succeeds.
79
79
  */
80
- export declare function verifyWithCheck(curve: BaseCurve, modulusBits: number, pk: PublicKey, ntilde: NTilde, proof: RangeProofWithCheck, c1: bigint, c2: bigint, X: bigint): boolean;
80
+ export declare function verifyWithCheck(curve: BaseCurve, modulusBits: number, pk: PublicKey, ntilde: DeserializedNtilde, proof: RangeProofWithCheck, c1: bigint, c2: bigint, X: bigint): boolean;
81
81
  //# sourceMappingURL=rangeproof.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rangeproof.d.ts","sourceRoot":"","sources":["../../../../../../src/account-lib/mpc/tss/ecdsa/rangeproof.ts"],"names":[],"mappings":"AAKA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,eAAe,EAAc,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAO/F,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOhF;AAqBD,wBAAsB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CvE;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsBrH;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CA0CtG;AACD;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CACzB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,EACjB,CAAC,EAAE,MAAM,GACR,OAAO,CAmCT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,mBAAmB,EAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,GACR,OAAO,CAoET"}
1
+ {"version":3,"file":"rangeproof.d.ts","sourceRoot":"","sources":["../../../../../../src/account-lib/mpc/tss/ecdsa/rangeproof.ts"],"names":[],"mappings":"AAKA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAc,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAOnH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOhF;AAqBD,wBAAsB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2CnF;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,uBAAuB,CAAC,CAsBlC;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,uBAAuB,GACnC,OAAO,CAAC,OAAO,CAAC,CA0ClB;AACD;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CACzB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,UAAU,EACjB,CAAC,EAAE,MAAM,GACR,OAAO,CAmCT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,mBAAmB,EAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,GACR,OAAO,CAoET"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.verifyWithCheck = exports.proveWithCheck = exports.verify = exports.prove = exports.verifyNtildeProof = exports.generateNTildeProof = exports.generateNTilde = exports.randomCoPrimeTo = exports.generateSafePrimes = void 0;
3
+ exports.verifyWithCheck = exports.proveWithCheck = exports.verify = exports.prove = exports.verifyNtildeProof = exports.generateNtildeProof = exports.generateNtilde = exports.randomCoPrimeTo = exports.generateSafePrimes = void 0;
4
4
  /**
5
5
  * Zero Knowledge Range Proofs as described in (Two-party generation of DSA signatures)[1].
6
6
  * [1]: https://reitermk.github.io/papers/2004/IJIS.pdf
@@ -50,21 +50,21 @@ exports.randomCoPrimeTo = randomCoPrimeTo;
50
50
  * Generate "challenge" values for range proofs.
51
51
  * @param {number} bitlength The bit length of the modulus to generate. This should
52
52
  * be the same as the bit length of the paillier public keys used for MtA.
53
- * @returns {NTilde} The generated NTilde values.
53
+ * @returns {DeserializedNtilde} The generated Ntilde values.
54
54
  */
55
- async function generateNTilde(bitlength) {
55
+ async function generateNtilde(bitlength) {
56
56
  const { n: ntilde, q1, q2 } = await generateModulus(bitlength);
57
57
  const [f1, f2] = await Promise.all([randomCoPrimeTo(ntilde), randomCoPrimeTo(ntilde)]);
58
58
  const h1 = bigint_mod_arith_1.modPow(f1, BigInt(2), ntilde);
59
59
  const h2 = bigint_mod_arith_1.modPow(h1, f2, ntilde);
60
60
  const beta = bigint_mod_arith_1.modInv(f2, q1 * q2);
61
61
  const [h1wrtH2Proofs, h2wrtH1Proofs] = await Promise.all([
62
- generateNTildeProof({
62
+ generateNtildeProof({
63
63
  h1: h1,
64
64
  h2: h2,
65
65
  ntilde: ntilde,
66
66
  }, f2, q1, q2),
67
- generateNTildeProof({
67
+ generateNtildeProof({
68
68
  h1: h2,
69
69
  h2: h1,
70
70
  ntilde: ntilde,
@@ -86,17 +86,17 @@ async function generateNTilde(bitlength) {
86
86
  },
87
87
  };
88
88
  }
89
- exports.generateNTilde = generateNTilde;
89
+ exports.generateNtilde = generateNtilde;
90
90
  /**
91
91
  * Generate iterations of Ntilde, h1, h2 discrete log proofs.
92
- * @param {NTilde} ntilde Ntilde, h1, h2 to generate the proofs for.
92
+ * @param {DeserializedNtilde} ntilde Ntilde, h1, h2 to generate the proofs for.
93
93
  * @param {bigint} x Either alpha or beta depending on whether it is a discrete log proof of
94
94
  * h1 w.r.t h2 or h2 w.r.t h1.
95
95
  * @param {bigint} q1 The Sophie Germain prime associated with the first safe prime p1 used to generate Ntilde.
96
96
  * @param {bigint} q2 The Sophie Germain prime associated with the second safe prime p2 used to generate Ntilde.
97
- * @returns {NTildeProof} The generated NTilde Proofs.
97
+ * @returns {NtildeProof} The generated Ntilde Proofs.
98
98
  */
99
- async function generateNTildeProof(ntilde, x, q1, q2) {
99
+ async function generateNtildeProof(ntilde, x, q1, q2) {
100
100
  const q1MulQ2 = q1 * q2;
101
101
  const a = [];
102
102
  const alpha = [];
@@ -119,11 +119,11 @@ async function generateNTildeProof(ntilde, x, q1, q2) {
119
119
  }
120
120
  return { alpha, t };
121
121
  }
122
- exports.generateNTildeProof = generateNTildeProof;
122
+ exports.generateNtildeProof = generateNtildeProof;
123
123
  /**
124
124
  * Verify discrete log proofs of h1 and h2 mod Ntilde.
125
- * @param {NTilde} ntilde Ntilde, h1, h2 to generate the proofs for.
126
- * @param {NtildeProof} ntildeProof Ntilde Proofs
125
+ * @param {DeserializedNtilde} ntilde Ntilde, h1, h2 to generate the proofs for.
126
+ * @param {DeserializedNtildeProof} ntildeProof Ntilde Proofs
127
127
  * @returns {boolean} true if proof is verified, false otherwise.
128
128
  */
129
129
  async function verifyNtildeProof(ntilde, ntildeProof) {
@@ -173,7 +173,7 @@ exports.verifyNtildeProof = verifyNtildeProof;
173
173
  * @param {BaseCurve} curve An elliptic curve to use for group operations.
174
174
  * @param {number} modulusBits The bit count of the prover's public key.
175
175
  * @param {PublicKey} pk The prover's public key.
176
- * @param {NTilde} ntilde The verifier's NTilde values.
176
+ * @param {DeserializedNtilde} ntilde The verifier's Ntilde values.
177
177
  * @param {bigint} c The ciphertext.
178
178
  * @param {bigint} m The plaintext.
179
179
  * @param {bigint} r The obfuscation value used to encrypt m.
@@ -218,7 +218,7 @@ exports.prove = prove;
218
218
  * @param {BaseCurve} curve An elliptic curve to use for group operations.
219
219
  * @param {number} modulusBits The bit count of the prover's public key.
220
220
  * @param {PublicKey} pk The prover's public key.
221
- * @param {NTilde} ntilde The verifier's NTilde values.
221
+ * @param {DeserializedNtilde} ntilde The verifier's Ntilde values.
222
222
  * @param {RangeProof} proof The range proof.
223
223
  * @param {bigint} c The ciphertext.
224
224
  * @returns {boolean} True if verification succeeds.
@@ -227,7 +227,7 @@ function verify(curve, modulusBits, pk, ntilde, proof, c) {
227
227
  const modulusBytes = Math.floor((modulusBits + 7) / 8);
228
228
  const q = curve.order();
229
229
  const q3 = q ** BigInt(3);
230
- if (proof.s1 == q3) {
230
+ if (proof.s1 > q3) {
231
231
  return false;
232
232
  }
233
233
  const hash = crypto_1.createHash('sha256');
@@ -265,7 +265,7 @@ exports.verify = verify;
265
265
  * @param {BaseCurve} curve An elliptic curve to use for group operations.
266
266
  * @param {number} modulusBits The bit count of the prover's public key.
267
267
  * @param {PublicKey} pk The prover's public key.
268
- * @param {NTilde} ntilde The verifier's NTilde values.
268
+ * @param {DeserializedNtilde} ntilde The verifier's Ntilde values.
269
269
  * @param {bigint} c1 The original ciphertext.
270
270
  * @param {bigint} c2 The manipulated ciphertext.
271
271
  * @param {bigint} x The plaintext value multiplied by the original plaintext.
@@ -332,7 +332,7 @@ exports.proveWithCheck = proveWithCheck;
332
332
  * @param {BaseCurve} curve An elliptic curve to use for group operations.
333
333
  * @param {number} modulusBits The bit count of the prover's public key.
334
334
  * @param {PublicKey} pk The prover's public key.
335
- * @param {NTilde} ntilde The verifier's NTilde values.
335
+ * @param {DeserializedNtilde} ntilde The verifier's Ntilde values.
336
336
  * @param {RangeProofWithCheck} proof The range proof.
337
337
  * @param {bigint} c1 The original ciphertext.
338
338
  * @param {bigint} c2 The manipulated ciphertext.
@@ -409,4 +409,4 @@ function verifyWithCheck(curve, modulusBits, pk, ntilde, proof, c1, c2, X) {
409
409
  return true;
410
410
  }
411
411
  exports.verifyWithCheck = verifyWithCheck;
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Vwcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hY2NvdW50LWxpYi9tcGMvdHNzL2VjZHNhL3JhbmdlcHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7OztHQUdHO0FBQ0gsbUNBQW9DO0FBR3BDLDZEQUF1RTtBQUN2RSx1REFBdUQ7QUFFdkQscUNBQWtFO0FBQ2xFLGlEQUE4QztBQUU5Qyw0RkFBNEY7QUFDNUYsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRWhCLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxVQUFvQjtJQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztJQUM5QixNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixNQUFNLFFBQVEsR0FBc0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtRQUN2RSxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFQRCxnREFPQztBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsU0FBaUI7SUFDOUMsSUFBSSxTQUFTLEdBQUcsSUFBSSxFQUFFO1FBQ3BCLGtDQUFrQztRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7S0FDOUU7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLFVBQVUsR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENB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QUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7UUFDZCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDO0lBQ2hCLE1BQU0sT0FBTyxHQUFHLHlCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRCxNQUFNLE9BQU8sR0FBRyx5QkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0QsSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDM0MsTUFBTSxLQUFLLEdBQUcseUJBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzdDLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtRQUNsQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxPQUFPLEdBQUcseUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELE1BQU0sT0FBTyxHQUFHLHlCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMzQyxNQUFNLEtBQUssR0FBRyx5QkFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUMsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQ2xCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxNQUFNLE9BQU8sR0FBRyx5QkFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxNQUFNLEtBQUssR0FBRyx5QkFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsTUFBTSxVQUFVLEdBQUcseUJBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUQsTUFBTSxNQUFNLEdBQUcseUJBQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDcEMsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQ2xCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUE3RUQsMENBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBaZXJvIEtub3dsZWRnZSBSYW5nZSBQcm9vZnMgYXMgZGVzY3JpYmVkIGluIChUd28tcGFydHkgZ2VuZXJhdGlvbiBvZiBEU0Egc2lnbmF0dXJlcylbMV0uXG4gKiBbMV06IGh0dHBzOi8vcmVpdGVybWsuZ2l0aHViLmlvL3BhcGVycy8yMDA0L0lKSVMucGRmXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IEJhc2VDdXJ2ZSBmcm9tICcuLi8uLi9jdXJ2ZXMnO1xuaW1wb3J0IHsgUHVibGljS2V5IH0gZnJvbSAncGFpbGxpZXItYmlnaW50JztcbmltcG9ydCB7IGJpdExlbmd0aCwgcmFuZEJpdHMsIHJhbmRCZXR3ZWVuIH0gZnJvbSAnYmlnaW50LWNyeXB0by11dGlscyc7XG5pbXBvcnQgeyBnY2QsIG1vZEludiwgbW9kUG93IH0gZnJvbSAnYmlnaW50LW1vZC1hcml0aCc7XG5pbXBvcnQgeyBOVGlsZGUsIE50aWxkZVByb29mSDFIMiwgUlNBTW9kdWx1cywgUmFuZ2VQcm9vZiwgUmFuZ2VQcm9vZldpdGhDaGVjayB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckJFLCBiaWdJbnRUb0J1ZmZlckJFIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBPcGVuU1NMIH0gZnJvbSAnLi4vLi4vLi4vLi4vb3BlbnNzbCc7XG5cbi8vIDEyOCBhcyByZWNvbW1lbmVkIGJ5IGh0dHBzOi8vYmxvZy52ZXJpY2hhaW5zLmlvL3AvdnNhLTIwMjItMTIwLW11bHRpY2hhaW4ta2V5LWV4dHJhY3Rpb24uXG5jb25zdCBJVEVSQVRJT05TID0gMTI4O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTYWZlUHJpbWVzKGJpdExlbmd0aHM6IG51bWJlcltdKTogUHJvbWlzZTxiaWdpbnRbXT4ge1xuICBjb25zdCBvcGVuU1NMID0gbmV3IE9wZW5TU0woKTtcbiAgYXdhaXQgb3BlblNTTC5pbml0KCk7XG4gIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPGJpZ2ludD5bXSA9IGJpdExlbmd0aHMubWFwKChiaXRsZW5ndGg6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBvcGVuU1NMLmdlbmVyYXRlU2FmZVByaW1lKGJpdGxlbmd0aCk7XG4gIH0pO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU1vZHVsdXMoYml0bGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPFJTQU1vZHVsdXM+IHtcbiAgaWYgKGJpdGxlbmd0aCA8IDMwNzIpIHtcbiAgICAvLyBodHRwczovL3d3dy5rZXlsZW5ndGguY29tL2VuLzYvXG4gICAgY29uc29sZS53YXJuKCdHZW5lcmF0aW5nIGEgbW9kdWx1cyB3aXRoIGxlc3MgdGhhbiAzMDcyIGlzIG5vdCByZWNvbW1lbmRlZCEnKTtcbiAgfVxuICBjb25zdCBiaXRsZW5ndGhQID0gTWF0aC5mbG9vcihiaXRsZW5ndGggLyAyKTtcbiAgY29uc3QgYml0bGVuZ3RoUSA9IGJpdGxlbmd0aCAtIGJpdGxlbmd0aFA7XG4gIGNvbnN0IFtwLCBxXSA9IGF3YWl0IGdlbmVyYXRlU2FmZVByaW1lcyhbYml0bGVuZ3RoUCwgYml0bGVuZ3RoUV0pO1xuICBjb25zdCBuID0gcCAqIHE7XG4gIC8vIFdlIG5ldmVyIGV4cGVjdCB0aGlzIHRvIGhhcHBlbiB1bmxlc3Mgc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgd2FzbS9vcGVuc3NsIG1vZHVsZVxuICBpZiAoYml0TGVuZ3RoKG4pICE9PSBiaXRsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5hYmxlIHRvIGdlbmVyYXRlIG1vZHVsdXMgd2l0aCBiaXQgbGVuZ3RoIG9mICR7Yml0bGVuZ3RofS4gRXhwZWN0ZWQgbGVuZ3RoICR7Yml0bGVuZ3RofSwgZ290IFxuICAgICAgJHtiaXRMZW5ndGgobil9LiBwbGVhc2UgdHJ5IGFnYWluIG9yIHJlYWNoIG91dCB0byBzdXBwb3J0QGJpdGdvLmNvbWBcbiAgICApO1xuICB9XG4gIHJldHVybiB7IG4sIHExOiAocCAtIEJpZ0ludCgxKSkgLyBCaWdJbnQoMiksIHEyOiAocSAtIEJpZ0ludCgxKSkgLyBCaWdJbnQoMikgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbUNvUHJpbWVUbyh4OiBiaWdpbnQpOiBQcm9taXNlPGJpZ2ludD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHkgPSBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYXdhaXQgcmFuZEJpdHMoYml0TGVuZ3RoKHgpLCB0cnVlKSkpO1xuICAgIGlmICh5ID4gQmlnSW50KDApICYmIGdjZCh4LCB5KSA9PT0gQmlnSW50KDEpKSB7XG4gICAgICByZXR1cm4geTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBcImNoYWxsZW5nZVwiIHZhbHVlcyBmb3IgcmFuZ2UgcHJvb2ZzLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdGxlbmd0aCBUaGUgYml0IGxlbmd0aCBvZiB0aGUgbW9kdWx1cyB0byBnZW5lcmF0ZS4gVGhpcyBzaG91bGRcbiAqIGJlIHRoZSBzYW1lIGFzIHRoZSBiaXQgbGVuZ3RoIG9mIHRoZSBwYWlsbGllciBwdWJsaWMga2V5cyB1c2VkIGZvciBNdEEuXG4gKiBAcmV0dXJucyB7TlRpbGRlfSBUaGUgZ2VuZXJhdGVkIE5UaWxkZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU5UaWxkZShiaXRsZW5ndGg6IG51bWJlcik6IFByb21pc2U8TlRpbGRlPiB7XG4gIGNvbnN0IHsgbjogbnRpbGRlLCBxMSwgcTIgfSA9IGF3YWl0IGdlbmVyYXRlTW9kdWx1cyhiaXRsZW5ndGgpO1xuICBjb25zdCBbZjEsIGYyXSA9IGF3YWl0IFByb21pc2UuYWxsKFtyYW5kb21Db1ByaW1lVG8obnRpbGRlKSwgcmFuZG9tQ29QcmltZVRvKG50aWxkZSldKTtcbiAgY29uc3QgaDEgPSBtb2RQb3coZjEsIEJpZ0ludCgyKSwgbnRpbGRlKTtcbiAgY29uc3QgaDIgPSBtb2RQb3coaDEsIGYyLCBudGlsZGUpO1xuICBjb25zdCBiZXRhID0gbW9kSW52KGYyLCBxMSAqIHEyKTtcbiAgY29uc3QgW2gxd3J0SDJQcm9vZnMsIGgyd3J0SDFQcm9vZnNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdlbmVyYXRlTlRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIGgxOiBoMSxcbiAgICAgICAgaDI6IGgyLFxuICAgICAgICBudGlsZGU6IG50aWxkZSxcbiAgICAgIH0sXG4gICAgICBmMixcbiAgICAgIHExLFxuICAgICAgcTJcbiAgICApLFxuICAgIGdlbmVyYXRlTlRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIGgxOiBoMixcbiAgICAgICAgaDI6IGgxLFxuICAgICAgICBudGlsZGU6IG50aWxkZSxcbiAgICAgIH0sXG4gICAgICBiZXRhLFxuICAgICAgcTEsXG4gICAgICBxMlxuICAgICksXG4gIF0pO1xuICByZXR1cm4ge1xuICAgIG50aWxkZSxcbiAgICBoMSxcbiAgICBoMixcbiAgICBudGlsZGVQcm9vZjoge1xuICAgICAgaDFXcnRIMjoge1xuICAgICAgICBhbHBoYTogaDF3cnRIMlByb29mcy5hbHBoYSxcbiAgICAgICAgdDogaDF3cnRIMlByb29mcy50LFxuICAgICAgfSxcbiAgICAgIGgyV3J0SDE6IHtcbiAgICAgICAgYWxwaGE6IGgyd3J0SDFQcm9vZnMuYWxwaGEsXG4gICAgICAgIHQ6IGgyd3J0SDFQcm9vZnMudCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBpdGVyYXRpb25zIG9mIE50aWxkZSwgaDEsIGgyIGRpc2NyZXRlIGxvZyBwcm9vZnMuXG4gKiBAcGFyYW0ge05UaWxkZX0gbnRpbGRlIE50aWxkZSwgaDEsIGgyIHRvIGdlbmVyYXRlIHRoZSBwcm9vZnMgZm9yLlxuICogQHBhcmFtIHtiaWdpbnR9IHggRWl0aGVyIGFscGhhIG9yIGJldGEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgaXMgYSBkaXNjcmV0ZSBsb2cgcHJvb2Ygb2ZcbiAqIGgxIHcuci50IGgyIG9yIGgyIHcuci50IGgxLlxuICogQHBhcmFtIHtiaWdpbnR9IHExIFRoZSBTb3BoaWUgR2VybWFpbiBwcmltZSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0IHNhZmUgcHJpbWUgcDEgdXNlZCB0byBnZW5lcmF0ZSBOdGlsZGUuXG4gKiBAcGFyYW0ge2JpZ2ludH0gcTIgVGhlIFNvcGhpZSBHZXJtYWluIHByaW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vjb25kIHNhZmUgcHJpbWUgcDIgdXNlZCB0byBnZW5lcmF0ZSBOdGlsZGUuXG4gKiBAcmV0dXJucyB7TlRpbGRlUHJvb2Z9IFRoZSBnZW5lcmF0ZWQgTlRpbGRlIFByb29mcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTlRpbGRlUHJvb2YobnRpbGRlOiBOVGlsZGUsIHg6IGJpZ2ludCwgcTE6IGJpZ2ludCwgcTI6IGJpZ2ludCk6IFByb21pc2U8TnRpbGRlUHJvb2ZIMUgyPiB7XG4gIGNvbnN0IHExTXVsUTIgPSBxMSAqIHEyO1xuICBjb25zdCBhOiBiaWdpbnRbXSA9IFtdO1xuICBjb25zdCBhbHBoYTogYmlnaW50W10gPSBbXTtcbiAgbGV0IG1zZ1RvSGFzaDogQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgYmlnSW50VG9CdWZmZXJCRShudGlsZGUuaDEpLFxuICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlLmgyKSxcbiAgICBiaWdJbnRUb0J1ZmZlckJFKG50aWxkZS5udGlsZGUpLFxuICBdKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHtcbiAgICBhLnB1c2gocmFuZEJldHdlZW4ocTFNdWxRMikpO1xuICAgIGFscGhhLnB1c2gobW9kUG93KG50aWxkZS5oMSwgYVtpXSwgbnRpbGRlLm50aWxkZSkpO1xuICAgIG1zZ1RvSGFzaCA9IEJ1ZmZlci5jb25jYXQoW21zZ1RvSGFzaCwgYmlnSW50VG9CdWZmZXJCRShhbHBoYVtpXSwgTWF0aC5jZWlsKGJpdExlbmd0aChudGlsZGUubnRpbGRlKSAvIDgpKV0pO1xuICB9XG4gIGNvbnN0IHNpbXVsYXRlZFJlc3BvbnNlID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKG1zZ1RvSGFzaCkuZGlnZXN0KCk7XG4gIGNvbnN0IHQ6IGJpZ2ludFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgSVRFUkFUSU9OUzsgaSsrKSB7XG4gICAgLy8gR2V0IHRoZSBpdGggYml0IGZyb20gYSBidWZmZXIgb2YgYnl0ZXMuXG4gICAgY29uc3QgaXRoQml0ID0gKHNpbXVsYXRlZFJlc3BvbnNlW01hdGguZmxvb3IoaSAvIDgpXSA+PiAoNyAtIChpICUgOCkpKSAmIDE7XG4gICAgdC5wdXNoKChhW2ldICsgKChCaWdJbnQoaXRoQml0KSAqIHgpICUgcTFNdWxRMikpICUgcTFNdWxRMik7XG4gIH1cbiAgcmV0dXJuIHsgYWxwaGEsIHQgfTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgZGlzY3JldGUgbG9nIHByb29mcyBvZiBoMSBhbmQgaDIgbW9kIE50aWxkZS5cbiAqIEBwYXJhbSB7TlRpbGRlfSBudGlsZGUgTnRpbGRlLCBoMSwgaDIgdG8gZ2VuZXJhdGUgdGhlIHByb29mcyBmb3IuXG4gKiBAcGFyYW0ge050aWxkZVByb29mfSBudGlsZGVQcm9vZiBOdGlsZGUgUHJvb2ZzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBwcm9vZiBpcyB2ZXJpZmllZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TnRpbGRlUHJvb2YobnRpbGRlOiBOVGlsZGUsIG50aWxkZVByb29mOiBOdGlsZGVQcm9vZkgxSDIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgaDFNb2ROdGlsZGUgPSBudGlsZGUuaDEgJSBudGlsZGUubnRpbGRlO1xuICBjb25zdCBoMk1vZE50aWxkZSA9IG50aWxkZS5oMiAlIG50aWxkZS5udGlsZGU7XG4gIGlmIChoMU1vZE50aWxkZSA9PT0gQmlnSW50KDApIHx8IGgyTW9kTnRpbGRlID09PSBCaWdJbnQoMCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGgxTW9kTnRpbGRlID09PSBCaWdJbnQoMSkgfHwgaDJNb2ROdGlsZGUgPT09IEJpZ0ludCgxKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaDFNb2ROdGlsZGUgPT09IGgyTW9kTnRpbGRlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICBudGlsZGVQcm9vZi5hbHBoYS5sZW5ndGggPiAyNTYgfHxcbiAgICBudGlsZGVQcm9vZi5hbHBoYS5sZW5ndGggIT09IElURVJBVElPTlMgfHxcbiAgICBudGlsZGVQcm9vZi50Lmxlbmd0aCAhPT0gSVRFUkFUSU9OU1xuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbGV0IG1zZ1RvSGFzaDogQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgYmlnSW50VG9CdWZmZXJCRShudGlsZGUuaDEpLFxuICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlLmgyKSxcbiAgICBiaWdJbnRUb0J1ZmZlckJFKG50aWxkZS5udGlsZGUpLFxuICBdKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudGlsZGVQcm9vZi5hbHBoYS5sZW5ndGg7IGkrKykge1xuICAgIG1zZ1RvSGFzaCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgbXNnVG9IYXNoLFxuICAgICAgYmlnSW50VG9CdWZmZXJCRShudGlsZGVQcm9vZi5hbHBoYVtpXSwgTWF0aC5jZWlsKGJpdExlbmd0aChudGlsZGUubnRpbGRlKSAvIDgpKSxcbiAgICBdKTtcbiAgfVxuICBjb25zdCBzaW11bGF0ZWRSZXNwb25zZSA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShtc2dUb0hhc2gpLmRpZ2VzdCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG50aWxkZVByb29mLmFscGhhLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gR2V0IHRoZSBpdGggYml0IGZyb20gYSBidWZmZXIgb2YgYnl0ZXMuXG4gICAgY29uc3QgaXRoQml0ID0gKHNpbXVsYXRlZFJlc3BvbnNlW01hdGguZmxvb3IoaSAvIDgpXSA+PiAoNyAtIChpICUgOCkpKSAmIDE7XG4gICAgY29uc3QgaDFQb3dUaSA9IG1vZFBvdyhudGlsZGUuaDEsIG50aWxkZVByb29mLnRbaV0sIG50aWxkZS5udGlsZGUpO1xuICAgIGNvbnN0IGgyUG93Q2kgPSBtb2RQb3cobnRpbGRlLmgyLCBCaWdJbnQoaXRoQml0KSwgbnRpbGRlLm50aWxkZSk7XG4gICAgY29uc3QgYWxwaGFNdWxoMlBvd0NpID0gKG50aWxkZVByb29mLmFscGhhW2ldICogaDJQb3dDaSkgJSBudGlsZGUubnRpbGRlO1xuICAgIGlmIChoMVBvd1RpICE9PSBhbHBoYU11bGgyUG93Q2kpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgemVyby1rbm93bGVkZ2UgcmFuZ2UgcHJvb2YgdGhhdCBhbiBlbmNyeXB0ZWQgdmFsdWUgaXMgXCJzbWFsbFwiLlxuICogQHBhcmFtIHtCYXNlQ3VydmV9IGN1cnZlIEFuIGVsbGlwdGljIGN1cnZlIHRvIHVzZSBmb3IgZ3JvdXAgb3BlcmF0aW9ucy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtb2R1bHVzQml0cyBUaGUgYml0IGNvdW50IG9mIHRoZSBwcm92ZXIncyBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtQdWJsaWNLZXl9IHBrIFRoZSBwcm92ZXIncyBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtOVGlsZGV9IG50aWxkZSBUaGUgdmVyaWZpZXIncyBOVGlsZGUgdmFsdWVzLlxuICogQHBhcmFtIHtiaWdpbnR9IGMgVGhlIGNpcGhlcnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0gbSBUaGUgcGxhaW50ZXh0LlxuICogQHBhcmFtIHtiaWdpbnR9IHIgVGhlIG9iZnVzY2F0aW9uIHZhbHVlIHVzZWQgdG8gZW5jcnlwdCBtLlxuICogQHJldHVybnMge1JhbmdlUHJvb2Z9IFRoZSBnZW5lcmF0ZWQgcHJvb2YuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm92ZShcbiAgY3VydmU6IEJhc2VDdXJ2ZSxcbiAgbW9kdWx1c0JpdHM6IG51bWJlcixcbiAgcGs6IFB1YmxpY0tleSxcbiAgbnRpbGRlOiBOVGlsZGUsXG4gIGM6IGJpZ2ludCxcbiAgbTogYmlnaW50LFxuICByOiBiaWdpbnRcbik6IFByb21pc2U8UmFuZ2VQcm9vZj4ge1xuICBjb25zdCBtb2R1bHVzQnl0ZXMgPSBNYXRoLmZsb29yKChtb2R1bHVzQml0cyArIDcpIC8gOCk7XG4gIGNvbnN0IHEgPSBjdXJ2ZS5vcmRlcigpO1xuICBjb25zdCBxMyA9IHEgKiogQmlnSW50KDMpO1xuICBjb25zdCBxbnRpbGRlID0gcSAqIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHEzbnRpbGRlID0gcTMgKiBudGlsZGUubnRpbGRlO1xuICBjb25zdCBhbHBoYSA9IHJhbmRCZXR3ZWVuKHEzKTtcbiAgY29uc3QgYmV0YSA9IGF3YWl0IHJhbmRvbUNvUHJpbWVUbyhway5uKTtcbiAgY29uc3QgZ2FtbWEgPSByYW5kQmV0d2VlbihxM250aWxkZSk7XG4gIGNvbnN0IHJobyA9IHJhbmRCZXR3ZWVuKHFudGlsZGUpO1xuICBjb25zdCB6ID0gKG1vZFBvdyhudGlsZGUuaDEsIG0sIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgcmhvLCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlO1xuICBjb25zdCB1ID0gKG1vZFBvdyhway5nLCBhbHBoYSwgcGsuX24yKSAqIG1vZFBvdyhiZXRhLCBway5uLCBway5fbjIpKSAlIHBrLl9uMjtcbiAgY29uc3QgdyA9IChtb2RQb3cobnRpbGRlLmgxLCBhbHBoYSwgbnRpbGRlLm50aWxkZSkgKiBtb2RQb3cobnRpbGRlLmgyLCBnYW1tYSwgbnRpbGRlLm50aWxkZSkpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICBoYXNoLnVwZGF0ZSgnXFx4MDZcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLm4sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLmcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh6LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh1LCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUodywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGNvbnN0IGUgPSBiaWdJbnRGcm9tQnVmZmVyQkUoaGFzaC5kaWdlc3QoKSkgJSBxO1xuICBjb25zdCBzID0gKG1vZFBvdyhyLCBlLCBway5uKSAqIGJldGEpICUgcGsubjtcbiAgY29uc3QgczEgPSBlICogbSArIGFscGhhO1xuICBjb25zdCBzMiA9IGUgKiByaG8gKyBnYW1tYTtcbiAgcmV0dXJuIHsgeiwgdSwgdywgcywgczEsIHMyIH07XG59XG5cbi8qKlxuICogVmVyaWZ5IGEgemVyby1rbm93bGVkZ2UgcmFuZ2UgcHJvb2YgdGhhdCBhbiBlbmNyeXB0ZWQgdmFsdWUgaXMgXCJzbWFsbFwiLlxuICogQHBhcmFtIHtCYXNlQ3VydmV9IGN1cnZlIEFuIGVsbGlwdGljIGN1cnZlIHRvIHVzZSBmb3IgZ3JvdXAgb3BlcmF0aW9ucy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtb2R1bHVzQml0cyBUaGUgYml0IGNvdW50IG9mIHRoZSBwcm92ZXIncyBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtQdWJsaWNLZXl9IHBrIFRoZSBwcm92ZXIncyBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtOVGlsZGV9IG50aWxkZSBUaGUgdmVyaWZpZXIncyBOVGlsZGUgdmFsdWVzLlxuICogQHBhcmFtIHtSYW5nZVByb29mfSBwcm9vZiBUaGUgcmFuZ2UgcHJvb2YuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYyBUaGUgY2lwaGVydGV4dC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBzdWNjZWVkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeShcbiAgY3VydmU6IEJhc2VDdXJ2ZSxcbiAgbW9kdWx1c0JpdHM6IG51bWJlcixcbiAgcGs6IFB1YmxpY0tleSxcbiAgbnRpbGRlOiBOVGlsZGUsXG4gIHByb29mOiBSYW5nZVByb29mLFxuICBjOiBiaWdpbnRcbik6IGJvb2xlYW4ge1xuICBjb25zdCBtb2R1bHVzQnl0ZXMgPSBNYXRoLmZsb29yKChtb2R1bHVzQml0cyArIDcpIC8gOCk7XG4gIGNvbnN0IHEgPSBjdXJ2ZS5vcmRlcigpO1xuICBjb25zdCBxMyA9IHEgKiogQmlnSW50KDMpO1xuICBpZiAocHJvb2YuczEgPT0gcTMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICBoYXNoLnVwZGF0ZSgnXFx4MDZcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLm4sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLmcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi56LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi51LCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGNvbnN0IGUgPSBiaWdJbnRGcm9tQnVmZmVyQkUoaGFzaC5kaWdlc3QoKSkgJSBxO1xuICBsZXQgcHJvZHVjdHM6IGJpZ2ludDtcbiAgcHJvZHVjdHMgPSAobW9kUG93KHBrLmcsIHByb29mLnMxLCBway5fbjIpICogbW9kUG93KHByb29mLnMsIHBrLm4sIHBrLl9uMikgKiBtb2RQb3coYywgLWUsIHBrLl9uMikpICUgcGsuX24yO1xuICBpZiAocHJvb2YudSAhPT0gcHJvZHVjdHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvZHVjdHMgPVxuICAgICgoKG1vZFBvdyhudGlsZGUuaDEsIHByb29mLnMxLCBudGlsZGUubnRpbGRlKSAqIG1vZFBvdyhudGlsZGUuaDIsIHByb29mLnMyLCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlKSAqXG4gICAgICBtb2RQb3cocHJvb2YueiwgLWUsIG50aWxkZS5udGlsZGUpKSAlXG4gICAgbnRpbGRlLm50aWxkZTtcbiAgaWYgKHByb29mLncgIT09IHByb2R1Y3RzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgemVyby1rbm93bGVkZ2UgcmFuZ2UgcHJvb2YgdGhhdCBhIGhvbW9tb3JwaGljYWxseSBtYW5pcHVsYXRlZCB2YWx1ZSBpcyBcInNtYWxsXCIuXG4gKiBAcGFyYW0ge0Jhc2VDdXJ2ZX0gY3VydmUgQW4gZWxsaXB0aWMgY3VydmUgdG8gdXNlIGZvciBncm91cCBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtudW1iZXJ9IG1vZHVsdXNCaXRzIFRoZSBiaXQgY291bnQgb2YgdGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge1B1YmxpY0tleX0gcGsgVGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge05UaWxkZX0gbnRpbGRlIFRoZSB2ZXJpZmllcidzIE5UaWxkZSB2YWx1ZXMuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYzEgVGhlIG9yaWdpbmFsIGNpcGhlcnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYzIgVGhlIG1hbmlwdWxhdGVkIGNpcGhlcnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0geCBUaGUgcGxhaW50ZXh0IHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIG9yaWdpbmFsIHBsYWludGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSB5IFRoZSBwbGFpbnRleHQgdmFsdWUgdGhhdCBpcyBhZGRlZCB0byB4LlxuICogQHBhcmFtIHtiaWdpbnR9IHIgVGhlIG9iZnVzY2F0aW9uIHZhbHVlIHVzZWQgdG8gZW5jcnlwdCB4LlxuICogQHBhcmFtIHtiaWdpbnR9IFggVGhlIGN1cnZlJ3MgYmFzZSBwb2ludCByYWlzZWQgdG8geC5cbiAqIEByZXR1cm5zIHtSYW5nZVByb29mV2l0aENoZWNrfSBUaGUgZ2VuZXJhdGVkIHByb29mLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmVXaXRoQ2hlY2soXG4gIGN1cnZlOiBCYXNlQ3VydmUsXG4gIG1vZHVsdXNCaXRzOiBudW1iZXIsXG4gIHBrOiBQdWJsaWNLZXksXG4gIG50aWxkZTogTlRpbGRlLFxuICBjMTogYmlnaW50LFxuICBjMjogYmlnaW50LFxuICB4OiBiaWdpbnQsXG4gIHk6IGJpZ2ludCxcbiAgcjogYmlnaW50LFxuICBYOiBiaWdpbnRcbik6IFByb21pc2U8UmFuZ2VQcm9vZldpdGhDaGVjaz4ge1xuICBjb25zdCBtb2R1bHVzQnl0ZXMgPSBNYXRoLmZsb29yKChtb2R1bHVzQml0cyArIDcpIC8gOCk7XG4gIGNvbnN0IHEgPSBjdXJ2ZS5vcmRlcigpO1xuICBjb25zdCBxMyA9IHEgKiogQmlnSW50KDMpO1xuICBjb25zdCBxNyA9IHEgKiogQmlnSW50KDcpO1xuICBjb25zdCBxbnRpbGRlID0gcSAqIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHEzbnRpbGRlID0gcTMgKiBudGlsZGUubnRpbGRlO1xuICBjb25zdCBhbHBoYSA9IHJhbmRCZXR3ZWVuKHEzKTtcbiAgY29uc3QgcmhvID0gcmFuZEJldHdlZW4ocW50aWxkZSk7XG4gIGNvbnN0IHNpZ21hID0gcmFuZEJldHdlZW4ocW50aWxkZSk7XG4gIGNvbnN0IHRhdSA9IHJhbmRCZXR3ZWVuKHEzbnRpbGRlKTtcbiAgY29uc3QgcmhvcHJtID0gcmFuZEJldHdlZW4ocTNudGlsZGUpO1xuICBjb25zdCBiZXRhID0gYXdhaXQgcmFuZG9tQ29QcmltZVRvKHBrLm4pO1xuICBjb25zdCBnYW1tYSA9IHJhbmRCZXR3ZWVuKHE3KTtcbiAgY29uc3QgdSA9IGN1cnZlLmJhc2VQb2ludE11bHQoY3VydmUuc2NhbGFyUmVkdWNlKGFscGhhKSk7XG4gIGNvbnN0IHogPSAobW9kUG93KG50aWxkZS5oMSwgeCwgbnRpbGRlLm50aWxkZSkgKiBtb2RQb3cobnRpbGRlLmgyLCByaG8sIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHpwcm0gPSAobW9kUG93KG50aWxkZS5oMSwgYWxwaGEsIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgcmhvcHJtLCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlO1xuICBjb25zdCB0ID0gKG1vZFBvdyhudGlsZGUuaDEsIHksIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgc2lnbWEsIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHYgPVxuICAgICgoKG1vZFBvdyhjMSwgYWxwaGEsIHBrLl9uMikgKiBtb2RQb3cocGsuZywgZ2FtbWEsIHBrLl9uMikpICUgcGsuX24yKSAqIG1vZFBvdyhiZXRhLCBway5uLCBway5fbjIpKSAlIHBrLl9uMjtcbiAgY29uc3QgdyA9IChtb2RQb3cobnRpbGRlLmgxLCBnYW1tYSwgbnRpbGRlLm50aWxkZSkgKiBtb2RQb3cobnRpbGRlLmgyLCB0YXUsIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgaGFzaC51cGRhdGUoJ1xceDBkXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDAnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5uLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5nLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShYLCAzMykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMxLCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoYzIsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh1LCAzMykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHosIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHpwcm0sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHQsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHYsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh3LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgY29uc3QgZSA9IGJpZ0ludEZyb21CdWZmZXJCRShoYXNoLmRpZ2VzdCgpKSAlIHE7XG4gIGNvbnN0IHMgPSAobW9kUG93KHIsIGUsIHBrLm4pICogYmV0YSkgJSBway5uO1xuICBjb25zdCBzMSA9IGUgKiB4ICsgYWxwaGE7XG4gIGNvbnN0IHMyID0gZSAqIHJobyArIHJob3BybTtcbiAgY29uc3QgdDEgPSBlICogeSArIGdhbW1hO1xuICBjb25zdCB0MiA9IGUgKiBzaWdtYSArIHRhdTtcbiAgcmV0dXJuIHsgeiwgenBybSwgdCwgdiwgdywgcywgczEsIHMyLCB0MSwgdDIsIHUgfTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgYSB6ZXJvLWtub3dsZWRnZSByYW5nZSBwcm9vZiB0aGF0IGEgaG9tb21vcnBoaWNhbGx5IG1hbmlwdWxhdGVkIHZhbHVlIGlzIFwic21hbGxcIi5cbiAqIEBwYXJhbSB7QmFzZUN1cnZlfSBjdXJ2ZSBBbiBlbGxpcHRpYyBjdXJ2ZSB0byB1c2UgZm9yIGdyb3VwIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gbW9kdWx1c0JpdHMgVGhlIGJpdCBjb3VudCBvZiB0aGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7UHVibGljS2V5fSBwayBUaGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7TlRpbGRlfSBudGlsZGUgVGhlIHZlcmlmaWVyJ3MgTlRpbGRlIHZhbHVlcy5cbiAqIEBwYXJhbSB7UmFuZ2VQcm9vZldpdGhDaGVja30gcHJvb2YgVGhlIHJhbmdlIHByb29mLlxuICogQHBhcmFtIHtiaWdpbnR9IGMxIFRoZSBvcmlnaW5hbCBjaXBoZXJ0ZXh0LlxuICogQHBhcmFtIHtiaWdpbnR9IGMyIFRoZSBtYW5pcHVsYXRlZCBjaXBoZXJ0ZXh0LlxuICogQHBhcmFtIHtiaWdpbnR9IFggVGhlIGN1cnZlJ3MgYmFzZSBwb2ludCByYWlzZWQgdG8geC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBzdWNjZWVkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVdpdGhDaGVjayhcbiAgY3VydmU6IEJhc2VDdXJ2ZSxcbiAgbW9kdWx1c0JpdHM6IG51bWJlcixcbiAgcGs6IFB1YmxpY0tleSxcbiAgbnRpbGRlOiBOVGlsZGUsXG4gIHByb29mOiBSYW5nZVByb29mV2l0aENoZWNrLFxuICBjMTogYmlnaW50LFxuICBjMjogYmlnaW50LFxuICBYOiBiaWdpbnRcbik6IGJvb2xlYW4ge1xuICBjb25zdCBtb2R1bHVzQnl0ZXMgPSBNYXRoLmZsb29yKChtb2R1bHVzQml0cyArIDcpIC8gOCk7XG4gIGNvbnN0IHEgPSBjdXJ2ZS5vcmRlcigpO1xuICBjb25zdCBxMyA9IHEgKiogQmlnSW50KDMpO1xuICBjb25zdCBxNyA9IHEgKiogQmlnSW50KDcpO1xuICBpZiAocHJvb2YuczEgPiBxMykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocHJvb2YudDEgPiBxNykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG4gIGhhc2gudXBkYXRlKCdcXHgwZFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocGsubiwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocGsuZywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoWCwgMzMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShjMSwgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMyLCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudSwgMzMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi56LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi56cHJtLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi50LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi52LCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGNvbnN0IGUgPSBiaWdJbnRGcm9tQnVmZmVyQkUoaGFzaC5kaWdlc3QoKSkgJSBxO1xuICBjb25zdCBnUzEgPSBjdXJ2ZS5iYXNlUG9pbnRNdWx0KGN1cnZlLnNjYWxhclJlZHVjZShwcm9vZi5zMSkpO1xuICBjb25zdCB4RVUgPSBjdXJ2ZS5wb2ludEFkZChjdXJ2ZS5wb2ludE11bHRpcGx5KFgsIGUpLCBwcm9vZi51KTtcbiAgaWYgKGdTMSAhPSB4RVUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbGV0IGxlZnQsIHJpZ2h0O1xuICBjb25zdCBoMUV4cFMxID0gbW9kUG93KG50aWxkZS5oMSwgcHJvb2YuczEsIG50aWxkZS5udGlsZGUpO1xuICBjb25zdCBoMkV4cFMyID0gbW9kUG93KG50aWxkZS5oMiwgcHJvb2YuczIsIG50aWxkZS5udGlsZGUpO1xuICBsZWZ0ID0gKGgxRXhwUzEgKiBoMkV4cFMyKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHpFeHBFID0gbW9kUG93KHByb29mLnosIGUsIG50aWxkZS5udGlsZGUpO1xuICByaWdodCA9ICh6RXhwRSAqIHByb29mLnpwcm0pICUgbnRpbGRlLm50aWxkZTtcbiAgaWYgKGxlZnQgIT09IHJpZ2h0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGgxRXhwVDEgPSBtb2RQb3cobnRpbGRlLmgxLCBwcm9vZi50MSwgbnRpbGRlLm50aWxkZSk7XG4gIGNvbnN0IGgyRXhwVDIgPSBtb2RQb3cobnRpbGRlLmgyLCBwcm9vZi50MiwgbnRpbGRlLm50aWxkZSk7XG4gIGxlZnQgPSAoaDFFeHBUMSAqIGgyRXhwVDIpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgdEV4cEUgPSBtb2RQb3cocHJvb2YudCwgZSwgbnRpbGRlLm50aWxkZSk7XG4gIHJpZ2h0ID0gKHRFeHBFICogcHJvb2YudykgJSBudGlsZGUubnRpbGRlO1xuICBpZiAobGVmdCAhPT0gcmlnaHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgYzFFeHBTMSA9IG1vZFBvdyhjMSwgcHJvb2YuczEsIHBrLl9uMik7XG4gIGNvbnN0IHNFeHBOID0gbW9kUG93KHByb29mLnMsIHBrLm4sIHBrLl9uMik7XG4gIGNvbnN0IGdhbW1hRXhwVDEgPSBtb2RQb3cocGsuZywgcHJvb2YudDEsIHBrLl9uMik7XG4gIGxlZnQgPSAoKChjMUV4cFMxICogc0V4cE4pICUgcGsuX24yKSAqIGdhbW1hRXhwVDEpICUgcGsuX24yO1xuICBjb25zdCBjMkV4cEUgPSBtb2RQb3coYzIsIGUsIHBrLl9uMik7XG4gIHJpZ2h0ID0gKGMyRXhwRSAqIHByb29mLnYpICUgcGsuX24yO1xuICBpZiAobGVmdCAhPT0gcmlnaHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
412
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Vwcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hY2NvdW50LWxpYi9tcGMvdHNzL2VjZHNhL3JhbmdlcHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7OztHQUdHO0FBQ0gsbUNBQW9DO0FBR3BDLDZEQUF1RTtBQUN2RSx1REFBdUQ7QUFFdkQscUNBQWtFO0FBQ2xFLGlEQUE4QztBQUU5Qyw0RkFBNEY7QUFDNUYsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRWhCLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxVQUFvQjtJQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztJQUM5QixNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixNQUFNLFFBQVEsR0FBc0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtRQUN2RSxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFQRCxnREFPQztBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsU0FBaUI7SUFDOUMsSUFBSSxTQUFTLEdBQUcsSUFBSSxFQUFFO1FBQ3BCLGtDQUFrQztRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7S0FDOUU7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLFVBQVUsR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENB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QUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzFDLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtRQUNsQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxPQUFPLEdBQUcseUJBQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcseUJBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLHlCQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVELE1BQU0sTUFBTSxHQUFHLHlCQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsS0FBSyxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ3BDLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtRQUNsQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBN0VELDBDQTZFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogWmVybyBLbm93bGVkZ2UgUmFuZ2UgUHJvb2ZzIGFzIGRlc2NyaWJlZCBpbiAoVHdvLXBhcnR5IGdlbmVyYXRpb24gb2YgRFNBIHNpZ25hdHVyZXMpWzFdLlxuICogWzFdOiBodHRwczovL3JlaXRlcm1rLmdpdGh1Yi5pby9wYXBlcnMvMjAwNC9JSklTLnBkZlxuICovXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBCYXNlQ3VydmUgZnJvbSAnLi4vLi4vY3VydmVzJztcbmltcG9ydCB7IFB1YmxpY0tleSB9IGZyb20gJ3BhaWxsaWVyLWJpZ2ludCc7XG5pbXBvcnQgeyBiaXRMZW5ndGgsIHJhbmRCaXRzLCByYW5kQmV0d2VlbiB9IGZyb20gJ2JpZ2ludC1jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgZ2NkLCBtb2RJbnYsIG1vZFBvdyB9IGZyb20gJ2JpZ2ludC1tb2QtYXJpdGgnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTnRpbGRlLCBEZXNlcmlhbGl6ZWROdGlsZGVQcm9vZiwgUlNBTW9kdWx1cywgUmFuZ2VQcm9vZiwgUmFuZ2VQcm9vZldpdGhDaGVjayB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckJFLCBiaWdJbnRUb0J1ZmZlckJFIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBPcGVuU1NMIH0gZnJvbSAnLi4vLi4vLi4vLi4vb3BlbnNzbCc7XG5cbi8vIDEyOCBhcyByZWNvbW1lbmVkIGJ5IGh0dHBzOi8vYmxvZy52ZXJpY2hhaW5zLmlvL3AvdnNhLTIwMjItMTIwLW11bHRpY2hhaW4ta2V5LWV4dHJhY3Rpb24uXG5jb25zdCBJVEVSQVRJT05TID0gMTI4O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTYWZlUHJpbWVzKGJpdExlbmd0aHM6IG51bWJlcltdKTogUHJvbWlzZTxiaWdpbnRbXT4ge1xuICBjb25zdCBvcGVuU1NMID0gbmV3IE9wZW5TU0woKTtcbiAgYXdhaXQgb3BlblNTTC5pbml0KCk7XG4gIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPGJpZ2ludD5bXSA9IGJpdExlbmd0aHMubWFwKChiaXRsZW5ndGg6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBvcGVuU1NMLmdlbmVyYXRlU2FmZVByaW1lKGJpdGxlbmd0aCk7XG4gIH0pO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU1vZHVsdXMoYml0bGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPFJTQU1vZHVsdXM+IHtcbiAgaWYgKGJpdGxlbmd0aCA8IDMwNzIpIHtcbiAgICAvLyBodHRwczovL3d3dy5rZXlsZW5ndGguY29tL2VuLzYvXG4gICAgY29uc29sZS53YXJuKCdHZW5lcmF0aW5nIGEgbW9kdWx1cyB3aXRoIGxlc3MgdGhhbiAzMDcyIGlzIG5vdCByZWNvbW1lbmRlZCEnKTtcbiAgfVxuICBjb25zdCBiaXRsZW5ndGhQID0gTWF0aC5mbG9vcihiaXRsZW5ndGggLyAyKTtcbiAgY29uc3QgYml0bGVuZ3RoUSA9IGJpdGxlbmd0aCAtIGJpdGxlbmd0aFA7XG4gIGNvbnN0IFtwLCBxXSA9IGF3YWl0IGdlbmVyYXRlU2FmZVByaW1lcyhbYml0bGVuZ3RoUCwgYml0bGVuZ3RoUV0pO1xuICBjb25zdCBuID0gcCAqIHE7XG4gIC8vIFdlIG5ldmVyIGV4cGVjdCB0aGlzIHRvIGhhcHBlbiB1bmxlc3Mgc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgd2FzbS9vcGVuc3NsIG1vZHVsZVxuICBpZiAoYml0TGVuZ3RoKG4pICE9PSBiaXRsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5hYmxlIHRvIGdlbmVyYXRlIG1vZHVsdXMgd2l0aCBiaXQgbGVuZ3RoIG9mICR7Yml0bGVuZ3RofS4gRXhwZWN0ZWQgbGVuZ3RoICR7Yml0bGVuZ3RofSwgZ290IFxuICAgICAgJHtiaXRMZW5ndGgobil9LiBwbGVhc2UgdHJ5IGFnYWluIG9yIHJlYWNoIG91dCB0byBzdXBwb3J0QGJpdGdvLmNvbWBcbiAgICApO1xuICB9XG4gIHJldHVybiB7IG4sIHExOiAocCAtIEJpZ0ludCgxKSkgLyBCaWdJbnQoMiksIHEyOiAocSAtIEJpZ0ludCgxKSkgLyBCaWdJbnQoMikgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbUNvUHJpbWVUbyh4OiBiaWdpbnQpOiBQcm9taXNlPGJpZ2ludD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHkgPSBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYXdhaXQgcmFuZEJpdHMoYml0TGVuZ3RoKHgpLCB0cnVlKSkpO1xuICAgIGlmICh5ID4gQmlnSW50KDApICYmIGdjZCh4LCB5KSA9PT0gQmlnSW50KDEpKSB7XG4gICAgICByZXR1cm4geTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBcImNoYWxsZW5nZVwiIHZhbHVlcyBmb3IgcmFuZ2UgcHJvb2ZzLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdGxlbmd0aCBUaGUgYml0IGxlbmd0aCBvZiB0aGUgbW9kdWx1cyB0byBnZW5lcmF0ZS4gVGhpcyBzaG91bGRcbiAqIGJlIHRoZSBzYW1lIGFzIHRoZSBiaXQgbGVuZ3RoIG9mIHRoZSBwYWlsbGllciBwdWJsaWMga2V5cyB1c2VkIGZvciBNdEEuXG4gKiBAcmV0dXJucyB7RGVzZXJpYWxpemVkTnRpbGRlfSBUaGUgZ2VuZXJhdGVkIE50aWxkZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU50aWxkZShiaXRsZW5ndGg6IG51bWJlcik6IFByb21pc2U8RGVzZXJpYWxpemVkTnRpbGRlPiB7XG4gIGNvbnN0IHsgbjogbnRpbGRlLCBxMSwgcTIgfSA9IGF3YWl0IGdlbmVyYXRlTW9kdWx1cyhiaXRsZW5ndGgpO1xuICBjb25zdCBbZjEsIGYyXSA9IGF3YWl0IFByb21pc2UuYWxsKFtyYW5kb21Db1ByaW1lVG8obnRpbGRlKSwgcmFuZG9tQ29QcmltZVRvKG50aWxkZSldKTtcbiAgY29uc3QgaDEgPSBtb2RQb3coZjEsIEJpZ0ludCgyKSwgbnRpbGRlKTtcbiAgY29uc3QgaDIgPSBtb2RQb3coaDEsIGYyLCBudGlsZGUpO1xuICBjb25zdCBiZXRhID0gbW9kSW52KGYyLCBxMSAqIHEyKTtcbiAgY29uc3QgW2gxd3J0SDJQcm9vZnMsIGgyd3J0SDFQcm9vZnNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdlbmVyYXRlTnRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIGgxOiBoMSxcbiAgICAgICAgaDI6IGgyLFxuICAgICAgICBudGlsZGU6IG50aWxkZSxcbiAgICAgIH0sXG4gICAgICBmMixcbiAgICAgIHExLFxuICAgICAgcTJcbiAgICApLFxuICAgIGdlbmVyYXRlTnRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIGgxOiBoMixcbiAgICAgICAgaDI6IGgxLFxuICAgICAgICBudGlsZGU6IG50aWxkZSxcbiAgICAgIH0sXG4gICAgICBiZXRhLFxuICAgICAgcTEsXG4gICAgICBxMlxuICAgICksXG4gIF0pO1xuICByZXR1cm4ge1xuICAgIG50aWxkZSxcbiAgICBoMSxcbiAgICBoMixcbiAgICBudGlsZGVQcm9vZjoge1xuICAgICAgaDFXcnRIMjoge1xuICAgICAgICBhbHBoYTogaDF3cnRIMlByb29mcy5hbHBoYSxcbiAgICAgICAgdDogaDF3cnRIMlByb29mcy50LFxuICAgICAgfSxcbiAgICAgIGgyV3J0SDE6IHtcbiAgICAgICAgYWxwaGE6IGgyd3J0SDFQcm9vZnMuYWxwaGEsXG4gICAgICAgIHQ6IGgyd3J0SDFQcm9vZnMudCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBpdGVyYXRpb25zIG9mIE50aWxkZSwgaDEsIGgyIGRpc2NyZXRlIGxvZyBwcm9vZnMuXG4gKiBAcGFyYW0ge0Rlc2VyaWFsaXplZE50aWxkZX0gbnRpbGRlIE50aWxkZSwgaDEsIGgyIHRvIGdlbmVyYXRlIHRoZSBwcm9vZnMgZm9yLlxuICogQHBhcmFtIHtiaWdpbnR9IHggRWl0aGVyIGFscGhhIG9yIGJldGEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgaXMgYSBkaXNjcmV0ZSBsb2cgcHJvb2Ygb2ZcbiAqIGgxIHcuci50IGgyIG9yIGgyIHcuci50IGgxLlxuICogQHBhcmFtIHtiaWdpbnR9IHExIFRoZSBTb3BoaWUgR2VybWFpbiBwcmltZSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0IHNhZmUgcHJpbWUgcDEgdXNlZCB0byBnZW5lcmF0ZSBOdGlsZGUuXG4gKiBAcGFyYW0ge2JpZ2ludH0gcTIgVGhlIFNvcGhpZSBHZXJtYWluIHByaW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vjb25kIHNhZmUgcHJpbWUgcDIgdXNlZCB0byBnZW5lcmF0ZSBOdGlsZGUuXG4gKiBAcmV0dXJucyB7TnRpbGRlUHJvb2Z9IFRoZSBnZW5lcmF0ZWQgTnRpbGRlIFByb29mcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTnRpbGRlUHJvb2YoXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICB4OiBiaWdpbnQsXG4gIHExOiBiaWdpbnQsXG4gIHEyOiBiaWdpbnRcbik6IFByb21pc2U8RGVzZXJpYWxpemVkTnRpbGRlUHJvb2Y+IHtcbiAgY29uc3QgcTFNdWxRMiA9IHExICogcTI7XG4gIGNvbnN0IGE6IGJpZ2ludFtdID0gW107XG4gIGNvbnN0IGFscGhhOiBiaWdpbnRbXSA9IFtdO1xuICBsZXQgbXNnVG9IYXNoOiBCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFtcbiAgICBiaWdJbnRUb0J1ZmZlckJFKG50aWxkZS5oMSksXG4gICAgYmlnSW50VG9CdWZmZXJCRShudGlsZGUuaDIpLFxuICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlLm50aWxkZSksXG4gIF0pO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IElURVJBVElPTlM7IGkrKykge1xuICAgIGEucHVzaChyYW5kQmV0d2VlbihxMU11bFEyKSk7XG4gICAgYWxwaGEucHVzaChtb2RQb3cobnRpbGRlLmgxLCBhW2ldLCBudGlsZGUubnRpbGRlKSk7XG4gICAgbXNnVG9IYXNoID0gQnVmZmVyLmNvbmNhdChbbXNnVG9IYXNoLCBiaWdJbnRUb0J1ZmZlckJFKGFscGhhW2ldLCBNYXRoLmNlaWwoYml0TGVuZ3RoKG50aWxkZS5udGlsZGUpIC8gOCkpXSk7XG4gIH1cbiAgY29uc3Qgc2ltdWxhdGVkUmVzcG9uc2UgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUobXNnVG9IYXNoKS5kaWdlc3QoKTtcbiAgY29uc3QgdDogYmlnaW50W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHtcbiAgICAvLyBHZXQgdGhlIGl0aCBiaXQgZnJvbSBhIGJ1ZmZlciBvZiBieXRlcy5cbiAgICBjb25zdCBpdGhCaXQgPSAoc2ltdWxhdGVkUmVzcG9uc2VbTWF0aC5mbG9vcihpIC8gOCldID4+ICg3IC0gKGkgJSA4KSkpICYgMTtcbiAgICB0LnB1c2goKGFbaV0gKyAoKEJpZ0ludChpdGhCaXQpICogeCkgJSBxMU11bFEyKSkgJSBxMU11bFEyKTtcbiAgfVxuICByZXR1cm4geyBhbHBoYSwgdCB9O1xufVxuXG4vKipcbiAqIFZlcmlmeSBkaXNjcmV0ZSBsb2cgcHJvb2ZzIG9mIGgxIGFuZCBoMiBtb2QgTnRpbGRlLlxuICogQHBhcmFtIHtEZXNlcmlhbGl6ZWROdGlsZGV9IG50aWxkZSBOdGlsZGUsIGgxLCBoMiB0byBnZW5lcmF0ZSB0aGUgcHJvb2ZzIGZvci5cbiAqIEBwYXJhbSB7RGVzZXJpYWxpemVkTnRpbGRlUHJvb2Z9IG50aWxkZVByb29mIE50aWxkZSBQcm9vZnNcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHByb29mIGlzIHZlcmlmaWVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlOdGlsZGVQcm9vZihcbiAgbnRpbGRlOiBEZXNlcmlhbGl6ZWROdGlsZGUsXG4gIG50aWxkZVByb29mOiBEZXNlcmlhbGl6ZWROdGlsZGVQcm9vZlxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGgxTW9kTnRpbGRlID0gbnRpbGRlLmgxICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgaDJNb2ROdGlsZGUgPSBudGlsZGUuaDIgJSBudGlsZGUubnRpbGRlO1xuICBpZiAoaDFNb2ROdGlsZGUgPT09IEJpZ0ludCgwKSB8fCBoMk1vZE50aWxkZSA9PT0gQmlnSW50KDApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChoMU1vZE50aWxkZSA9PT0gQmlnSW50KDEpIHx8IGgyTW9kTnRpbGRlID09PSBCaWdJbnQoMSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGgxTW9kTnRpbGRlID09PSBoMk1vZE50aWxkZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgbnRpbGRlUHJvb2YuYWxwaGEubGVuZ3RoID4gMjU2IHx8XG4gICAgbnRpbGRlUHJvb2YuYWxwaGEubGVuZ3RoICE9PSBJVEVSQVRJT05TIHx8XG4gICAgbnRpbGRlUHJvb2YudC5sZW5ndGggIT09IElURVJBVElPTlNcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGxldCBtc2dUb0hhc2g6IEJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1xuICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlLmgxKSxcbiAgICBiaWdJbnRUb0J1ZmZlckJFKG50aWxkZS5oMiksXG4gICAgYmlnSW50VG9CdWZmZXJCRShudGlsZGUubnRpbGRlKSxcbiAgXSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnRpbGRlUHJvb2YuYWxwaGEubGVuZ3RoOyBpKyspIHtcbiAgICBtc2dUb0hhc2ggPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIG1zZ1RvSGFzaCxcbiAgICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlUHJvb2YuYWxwaGFbaV0sIE1hdGguY2VpbChiaXRMZW5ndGgobnRpbGRlLm50aWxkZSkgLyA4KSksXG4gICAgXSk7XG4gIH1cbiAgY29uc3Qgc2ltdWxhdGVkUmVzcG9uc2UgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUobXNnVG9IYXNoKS5kaWdlc3QoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudGlsZGVQcm9vZi5hbHBoYS5sZW5ndGg7IGkrKykge1xuICAgIC8vIEdldCB0aGUgaXRoIGJpdCBmcm9tIGEgYnVmZmVyIG9mIGJ5dGVzLlxuICAgIGNvbnN0IGl0aEJpdCA9IChzaW11bGF0ZWRSZXNwb25zZVtNYXRoLmZsb29yKGkgLyA4KV0gPj4gKDcgLSAoaSAlIDgpKSkgJiAxO1xuICAgIGNvbnN0IGgxUG93VGkgPSBtb2RQb3cobnRpbGRlLmgxLCBudGlsZGVQcm9vZi50W2ldLCBudGlsZGUubnRpbGRlKTtcbiAgICBjb25zdCBoMlBvd0NpID0gbW9kUG93KG50aWxkZS5oMiwgQmlnSW50KGl0aEJpdCksIG50aWxkZS5udGlsZGUpO1xuICAgIGNvbnN0IGFscGhhTXVsaDJQb3dDaSA9IChudGlsZGVQcm9vZi5hbHBoYVtpXSAqIGgyUG93Q2kpICUgbnRpbGRlLm50aWxkZTtcbiAgICBpZiAoaDFQb3dUaSAhPT0gYWxwaGFNdWxoMlBvd0NpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIHplcm8ta25vd2xlZGdlIHJhbmdlIHByb29mIHRoYXQgYW4gZW5jcnlwdGVkIHZhbHVlIGlzIFwic21hbGxcIi5cbiAqIEBwYXJhbSB7QmFzZUN1cnZlfSBjdXJ2ZSBBbiBlbGxpcHRpYyBjdXJ2ZSB0byB1c2UgZm9yIGdyb3VwIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gbW9kdWx1c0JpdHMgVGhlIGJpdCBjb3VudCBvZiB0aGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7UHVibGljS2V5fSBwayBUaGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7RGVzZXJpYWxpemVkTnRpbGRlfSBudGlsZGUgVGhlIHZlcmlmaWVyJ3MgTnRpbGRlIHZhbHVlcy5cbiAqIEBwYXJhbSB7YmlnaW50fSBjIFRoZSBjaXBoZXJ0ZXh0LlxuICogQHBhcmFtIHtiaWdpbnR9IG0gVGhlIHBsYWludGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSByIFRoZSBvYmZ1c2NhdGlvbiB2YWx1ZSB1c2VkIHRvIGVuY3J5cHQgbS5cbiAqIEByZXR1cm5zIHtSYW5nZVByb29mfSBUaGUgZ2VuZXJhdGVkIHByb29mLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmUoXG4gIGN1cnZlOiBCYXNlQ3VydmUsXG4gIG1vZHVsdXNCaXRzOiBudW1iZXIsXG4gIHBrOiBQdWJsaWNLZXksXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICBjOiBiaWdpbnQsXG4gIG06IGJpZ2ludCxcbiAgcjogYmlnaW50XG4pOiBQcm9taXNlPFJhbmdlUHJvb2Y+IHtcbiAgY29uc3QgbW9kdWx1c0J5dGVzID0gTWF0aC5mbG9vcigobW9kdWx1c0JpdHMgKyA3KSAvIDgpO1xuICBjb25zdCBxID0gY3VydmUub3JkZXIoKTtcbiAgY29uc3QgcTMgPSBxICoqIEJpZ0ludCgzKTtcbiAgY29uc3QgcW50aWxkZSA9IHEgKiBudGlsZGUubnRpbGRlO1xuICBjb25zdCBxM250aWxkZSA9IHEzICogbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgYWxwaGEgPSByYW5kQmV0d2VlbihxMyk7XG4gIGNvbnN0IGJldGEgPSBhd2FpdCByYW5kb21Db1ByaW1lVG8ocGsubik7XG4gIGNvbnN0IGdhbW1hID0gcmFuZEJldHdlZW4ocTNudGlsZGUpO1xuICBjb25zdCByaG8gPSByYW5kQmV0d2VlbihxbnRpbGRlKTtcbiAgY29uc3QgeiA9IChtb2RQb3cobnRpbGRlLmgxLCBtLCBudGlsZGUubnRpbGRlKSAqIG1vZFBvdyhudGlsZGUuaDIsIHJobywgbnRpbGRlLm50aWxkZSkpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgdSA9IChtb2RQb3cocGsuZywgYWxwaGEsIHBrLl9uMikgKiBtb2RQb3coYmV0YSwgcGsubiwgcGsuX24yKSkgJSBway5fbjI7XG4gIGNvbnN0IHcgPSAobW9kUG93KG50aWxkZS5oMSwgYWxwaGEsIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgZ2FtbWEsIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgaGFzaC51cGRhdGUoJ1xceDA2XFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDAnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5uLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5nLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShjLCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoeiwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUodSwgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBjb25zdCBlID0gYmlnSW50RnJvbUJ1ZmZlckJFKGhhc2guZGlnZXN0KCkpICUgcTtcbiAgY29uc3QgcyA9IChtb2RQb3cociwgZSwgcGsubikgKiBiZXRhKSAlIHBrLm47XG4gIGNvbnN0IHMxID0gZSAqIG0gKyBhbHBoYTtcbiAgY29uc3QgczIgPSBlICogcmhvICsgZ2FtbWE7XG4gIHJldHVybiB7IHosIHUsIHcsIHMsIHMxLCBzMiB9O1xufVxuXG4vKipcbiAqIFZlcmlmeSBhIHplcm8ta25vd2xlZGdlIHJhbmdlIHByb29mIHRoYXQgYW4gZW5jcnlwdGVkIHZhbHVlIGlzIFwic21hbGxcIi5cbiAqIEBwYXJhbSB7QmFzZUN1cnZlfSBjdXJ2ZSBBbiBlbGxpcHRpYyBjdXJ2ZSB0byB1c2UgZm9yIGdyb3VwIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gbW9kdWx1c0JpdHMgVGhlIGJpdCBjb3VudCBvZiB0aGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7UHVibGljS2V5fSBwayBUaGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7RGVzZXJpYWxpemVkTnRpbGRlfSBudGlsZGUgVGhlIHZlcmlmaWVyJ3MgTnRpbGRlIHZhbHVlcy5cbiAqIEBwYXJhbSB7UmFuZ2VQcm9vZn0gcHJvb2YgVGhlIHJhbmdlIHByb29mLlxuICogQHBhcmFtIHtiaWdpbnR9IGMgVGhlIGNpcGhlcnRleHQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2ZXJpZmljYXRpb24gc3VjY2VlZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnkoXG4gIGN1cnZlOiBCYXNlQ3VydmUsXG4gIG1vZHVsdXNCaXRzOiBudW1iZXIsXG4gIHBrOiBQdWJsaWNLZXksXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICBwcm9vZjogUmFuZ2VQcm9vZixcbiAgYzogYmlnaW50XG4pOiBib29sZWFuIHtcbiAgY29uc3QgbW9kdWx1c0J5dGVzID0gTWF0aC5mbG9vcigobW9kdWx1c0JpdHMgKyA3KSAvIDgpO1xuICBjb25zdCBxID0gY3VydmUub3JkZXIoKTtcbiAgY29uc3QgcTMgPSBxICoqIEJpZ0ludCgzKTtcbiAgaWYgKHByb29mLnMxID4gcTMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICBoYXNoLnVwZGF0ZSgnXFx4MDZcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLm4sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLmcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi56LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi51LCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGNvbnN0IGUgPSBiaWdJbnRGcm9tQnVmZmVyQkUoaGFzaC5kaWdlc3QoKSkgJSBxO1xuICBsZXQgcHJvZHVjdHM6IGJpZ2ludDtcbiAgcHJvZHVjdHMgPSAobW9kUG93KHBrLmcsIHByb29mLnMxLCBway5fbjIpICogbW9kUG93KHByb29mLnMsIHBrLm4sIHBrLl9uMikgKiBtb2RQb3coYywgLWUsIHBrLl9uMikpICUgcGsuX24yO1xuICBpZiAocHJvb2YudSAhPT0gcHJvZHVjdHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvZHVjdHMgPVxuICAgICgoKG1vZFBvdyhudGlsZGUuaDEsIHByb29mLnMxLCBudGlsZGUubnRpbGRlKSAqIG1vZFBvdyhudGlsZGUuaDIsIHByb29mLnMyLCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlKSAqXG4gICAgICBtb2RQb3cocHJvb2YueiwgLWUsIG50aWxkZS5udGlsZGUpKSAlXG4gICAgbnRpbGRlLm50aWxkZTtcbiAgaWYgKHByb29mLncgIT09IHByb2R1Y3RzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgemVyby1rbm93bGVkZ2UgcmFuZ2UgcHJvb2YgdGhhdCBhIGhvbW9tb3JwaGljYWxseSBtYW5pcHVsYXRlZCB2YWx1ZSBpcyBcInNtYWxsXCIuXG4gKiBAcGFyYW0ge0Jhc2VDdXJ2ZX0gY3VydmUgQW4gZWxsaXB0aWMgY3VydmUgdG8gdXNlIGZvciBncm91cCBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtudW1iZXJ9IG1vZHVsdXNCaXRzIFRoZSBiaXQgY291bnQgb2YgdGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge1B1YmxpY0tleX0gcGsgVGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge0Rlc2VyaWFsaXplZE50aWxkZX0gbnRpbGRlIFRoZSB2ZXJpZmllcidzIE50aWxkZSB2YWx1ZXMuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYzEgVGhlIG9yaWdpbmFsIGNpcGhlcnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYzIgVGhlIG1hbmlwdWxhdGVkIGNpcGhlcnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0geCBUaGUgcGxhaW50ZXh0IHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIG9yaWdpbmFsIHBsYWludGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSB5IFRoZSBwbGFpbnRleHQgdmFsdWUgdGhhdCBpcyBhZGRlZCB0byB4LlxuICogQHBhcmFtIHtiaWdpbnR9IHIgVGhlIG9iZnVzY2F0aW9uIHZhbHVlIHVzZWQgdG8gZW5jcnlwdCB4LlxuICogQHBhcmFtIHtiaWdpbnR9IFggVGhlIGN1cnZlJ3MgYmFzZSBwb2ludCByYWlzZWQgdG8geC5cbiAqIEByZXR1cm5zIHtSYW5nZVByb29mV2l0aENoZWNrfSBUaGUgZ2VuZXJhdGVkIHByb29mLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmVXaXRoQ2hlY2soXG4gIGN1cnZlOiBCYXNlQ3VydmUsXG4gIG1vZHVsdXNCaXRzOiBudW1iZXIsXG4gIHBrOiBQdWJsaWNLZXksXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICBjMTogYmlnaW50LFxuICBjMjogYmlnaW50LFxuICB4OiBiaWdpbnQsXG4gIHk6IGJpZ2ludCxcbiAgcjogYmlnaW50LFxuICBYOiBiaWdpbnRcbik6IFByb21pc2U8UmFuZ2VQcm9vZldpdGhDaGVjaz4ge1xuICBjb25zdCBtb2R1bHVzQnl0ZXMgPSBNYXRoLmZsb29yKChtb2R1bHVzQml0cyArIDcpIC8gOCk7XG4gIGNvbnN0IHEgPSBjdXJ2ZS5vcmRlcigpO1xuICBjb25zdCBxMyA9IHEgKiogQmlnSW50KDMpO1xuICBjb25zdCBxNyA9IHEgKiogQmlnSW50KDcpO1xuICBjb25zdCBxbnRpbGRlID0gcSAqIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHEzbnRpbGRlID0gcTMgKiBudGlsZGUubnRpbGRlO1xuICBjb25zdCBhbHBoYSA9IHJhbmRCZXR3ZWVuKHEzKTtcbiAgY29uc3QgcmhvID0gcmFuZEJldHdlZW4ocW50aWxkZSk7XG4gIGNvbnN0IHNpZ21hID0gcmFuZEJldHdlZW4ocW50aWxkZSk7XG4gIGNvbnN0IHRhdSA9IHJhbmRCZXR3ZWVuKHEzbnRpbGRlKTtcbiAgY29uc3QgcmhvcHJtID0gcmFuZEJldHdlZW4ocTNudGlsZGUpO1xuICBjb25zdCBiZXRhID0gYXdhaXQgcmFuZG9tQ29QcmltZVRvKHBrLm4pO1xuICBjb25zdCBnYW1tYSA9IHJhbmRCZXR3ZWVuKHE3KTtcbiAgY29uc3QgdSA9IGN1cnZlLmJhc2VQb2ludE11bHQoY3VydmUuc2NhbGFyUmVkdWNlKGFscGhhKSk7XG4gIGNvbnN0IHogPSAobW9kUG93KG50aWxkZS5oMSwgeCwgbnRpbGRlLm50aWxkZSkgKiBtb2RQb3cobnRpbGRlLmgyLCByaG8sIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHpwcm0gPSAobW9kUG93KG50aWxkZS5oMSwgYWxwaGEsIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgcmhvcHJtLCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlO1xuICBjb25zdCB0ID0gKG1vZFBvdyhudGlsZGUuaDEsIHksIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgc2lnbWEsIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHYgPVxuICAgICgoKG1vZFBvdyhjMSwgYWxwaGEsIHBrLl9uMikgKiBtb2RQb3cocGsuZywgZ2FtbWEsIHBrLl9uMikpICUgcGsuX24yKSAqIG1vZFBvdyhiZXRhLCBway5uLCBway5fbjIpKSAlIHBrLl9uMjtcbiAgY29uc3QgdyA9IChtb2RQb3cobnRpbGRlLmgxLCBnYW1tYSwgbnRpbGRlLm50aWxkZSkgKiBtb2RQb3cobnRpbGRlLmgyLCB0YXUsIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgaGFzaC51cGRhdGUoJ1xceDBkXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDAnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5uLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5nLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShYLCAzMykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMxLCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoYzIsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh1LCAzMykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHosIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHpwcm0sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHQsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHYsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh3LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgY29uc3QgZSA9IGJpZ0ludEZyb21CdWZmZXJCRShoYXNoLmRpZ2VzdCgpKSAlIHE7XG4gIGNvbnN0IHMgPSAobW9kUG93KHIsIGUsIHBrLm4pICogYmV0YSkgJSBway5uO1xuICBjb25zdCBzMSA9IGUgKiB4ICsgYWxwaGE7XG4gIGNvbnN0IHMyID0gZSAqIHJobyArIHJob3BybTtcbiAgY29uc3QgdDEgPSBlICogeSArIGdhbW1hO1xuICBjb25zdCB0MiA9IGUgKiBzaWdtYSArIHRhdTtcbiAgcmV0dXJuIHsgeiwgenBybSwgdCwgdiwgdywgcywgczEsIHMyLCB0MSwgdDIsIHUgfTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgYSB6ZXJvLWtub3dsZWRnZSByYW5nZSBwcm9vZiB0aGF0IGEgaG9tb21vcnBoaWNhbGx5IG1hbmlwdWxhdGVkIHZhbHVlIGlzIFwic21hbGxcIi5cbiAqIEBwYXJhbSB7QmFzZUN1cnZlfSBjdXJ2ZSBBbiBlbGxpcHRpYyBjdXJ2ZSB0byB1c2UgZm9yIGdyb3VwIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gbW9kdWx1c0JpdHMgVGhlIGJpdCBjb3VudCBvZiB0aGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7UHVibGljS2V5fSBwayBUaGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7RGVzZXJpYWxpemVkTnRpbGRlfSBudGlsZGUgVGhlIHZlcmlmaWVyJ3MgTnRpbGRlIHZhbHVlcy5cbiAqIEBwYXJhbSB7UmFuZ2VQcm9vZldpdGhDaGVja30gcHJvb2YgVGhlIHJhbmdlIHByb29mLlxuICogQHBhcmFtIHtiaWdpbnR9IGMxIFRoZSBvcmlnaW5hbCBjaXBoZXJ0ZXh0LlxuICogQHBhcmFtIHtiaWdpbnR9IGMyIFRoZSBtYW5pcHVsYXRlZCBjaXBoZXJ0ZXh0LlxuICogQHBhcmFtIHtiaWdpbnR9IFggVGhlIGN1cnZlJ3MgYmFzZSBwb2ludCByYWlzZWQgdG8geC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBzdWNjZWVkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVdpdGhDaGVjayhcbiAgY3VydmU6IEJhc2VDdXJ2ZSxcbiAgbW9kdWx1c0JpdHM6IG51bWJlcixcbiAgcGs6IFB1YmxpY0tleSxcbiAgbnRpbGRlOiBEZXNlcmlhbGl6ZWROdGlsZGUsXG4gIHByb29mOiBSYW5nZVByb29mV2l0aENoZWNrLFxuICBjMTogYmlnaW50LFxuICBjMjogYmlnaW50LFxuICBYOiBiaWdpbnRcbik6IGJvb2xlYW4ge1xuICBjb25zdCBtb2R1bHVzQnl0ZXMgPSBNYXRoLmZsb29yKChtb2R1bHVzQml0cyArIDcpIC8gOCk7XG4gIGNvbnN0IHEgPSBjdXJ2ZS5vcmRlcigpO1xuICBjb25zdCBxMyA9IHEgKiogQmlnSW50KDMpO1xuICBjb25zdCBxNyA9IHEgKiogQmlnSW50KDcpO1xuICBpZiAocHJvb2YuczEgPiBxMykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocHJvb2YudDEgPiBxNykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG4gIGhhc2gudXBkYXRlKCdcXHgwZFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocGsubiwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocGsuZywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoWCwgMzMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShjMSwgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMyLCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudSwgMzMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi56LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi56cHJtLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi50LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi52LCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGNvbnN0IGUgPSBiaWdJbnRGcm9tQnVmZmVyQkUoaGFzaC5kaWdlc3QoKSkgJSBxO1xuICBjb25zdCBnUzEgPSBjdXJ2ZS5iYXNlUG9pbnRNdWx0KGN1cnZlLnNjYWxhclJlZHVjZShwcm9vZi5zMSkpO1xuICBjb25zdCB4RVUgPSBjdXJ2ZS5wb2ludEFkZChjdXJ2ZS5wb2ludE11bHRpcGx5KFgsIGUpLCBwcm9vZi51KTtcbiAgaWYgKGdTMSAhPSB4RVUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbGV0IGxlZnQsIHJpZ2h0O1xuICBjb25zdCBoMUV4cFMxID0gbW9kUG93KG50aWxkZS5oMSwgcHJvb2YuczEsIG50aWxkZS5udGlsZGUpO1xuICBjb25zdCBoMkV4cFMyID0gbW9kUG93KG50aWxkZS5oMiwgcHJvb2YuczIsIG50aWxkZS5udGlsZGUpO1xuICBsZWZ0ID0gKGgxRXhwUzEgKiBoMkV4cFMyKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHpFeHBFID0gbW9kUG93KHByb29mLnosIGUsIG50aWxkZS5udGlsZGUpO1xuICByaWdodCA9ICh6RXhwRSAqIHByb29mLnpwcm0pICUgbnRpbGRlLm50aWxkZTtcbiAgaWYgKGxlZnQgIT09IHJpZ2h0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGgxRXhwVDEgPSBtb2RQb3cobnRpbGRlLmgxLCBwcm9vZi50MSwgbnRpbGRlLm50aWxkZSk7XG4gIGNvbnN0IGgyRXhwVDIgPSBtb2RQb3cobnRpbGRlLmgyLCBwcm9vZi50MiwgbnRpbGRlLm50aWxkZSk7XG4gIGxlZnQgPSAoaDFFeHBUMSAqIGgyRXhwVDIpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgdEV4cEUgPSBtb2RQb3cocHJvb2YudCwgZSwgbnRpbGRlLm50aWxkZSk7XG4gIHJpZ2h0ID0gKHRFeHBFICogcHJvb2YudykgJSBudGlsZGUubnRpbGRlO1xuICBpZiAobGVmdCAhPT0gcmlnaHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgYzFFeHBTMSA9IG1vZFBvdyhjMSwgcHJvb2YuczEsIHBrLl9uMik7XG4gIGNvbnN0IHNFeHBOID0gbW9kUG93KHByb29mLnMsIHBrLm4sIHBrLl9uMik7XG4gIGNvbnN0IGdhbW1hRXhwVDEgPSBtb2RQb3cocGsuZywgcHJvb2YudDEsIHBrLl9uMik7XG4gIGxlZnQgPSAoKChjMUV4cFMxICogc0V4cE4pICUgcGsuX24yKSAqIGdhbW1hRXhwVDEpICUgcGsuX24yO1xuICBjb25zdCBjMkV4cEUgPSBtb2RQb3coYzIsIGUsIHBrLl9uMik7XG4gIHJpZ2h0ID0gKGMyRXhwRSAqIHByb29mLnYpICUgcGsuX24yO1xuICBpZiAobGVmdCAhPT0gcmlnaHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
@@ -1,38 +1,34 @@
1
- export interface NTilde {
2
- ntilde: bigint;
3
- h1: bigint;
4
- h2: bigint;
5
- ntildeProof?: NtildeProof;
6
- }
7
- export interface NtildeProof {
8
- h1WrtH2: NtildeProofH1H2;
9
- h2WrtH1: NtildeProofH1H2;
10
- }
11
- export interface NtildeProofH1H2 {
12
- alpha: bigint[];
13
- t: bigint[];
14
- }
1
+ interface NtildeProof<T> {
2
+ alpha: T[];
3
+ t: T[];
4
+ }
5
+ interface NtildeProofs<T> {
6
+ h1WrtH2: NtildeProof<T>;
7
+ h2WrtH1: NtildeProof<T>;
8
+ }
9
+ interface Ntilde<T> {
10
+ ntilde: T;
11
+ h1: T;
12
+ h2: T;
13
+ ntildeProof?: NtildeProofs<T>;
14
+ }
15
+ export declare type DeserializedNtildeProof = NtildeProof<bigint>;
16
+ export declare type DeserializedNtildeProofs = NtildeProofs<bigint>;
17
+ export declare type DeserializedNtilde = Ntilde<bigint>;
18
+ export declare type DeserializedNtildeWithProofs = Omit<DeserializedNtilde, 'ntildeProof'> & {
19
+ ntildeProof: DeserializedNtildeProofs;
20
+ };
21
+ export declare type SerializedNtildeProof = NtildeProof<string>;
22
+ export declare type SerializedNtildeProofs = NtildeProofs<string>;
23
+ export declare type SerializedNtilde = Ntilde<string>;
24
+ export declare type SerializedNtildeWithProofs = Omit<SerializedNtilde, 'ntildeProof'> & {
25
+ ntildeProof: SerializedNtildeProofs;
26
+ };
15
27
  export interface RSAModulus {
16
28
  n: bigint;
17
29
  q1: bigint;
18
30
  q2: bigint;
19
31
  }
20
- export interface NtildeProofShare {
21
- h1WrtH2: {
22
- alpha: string[];
23
- t: string[];
24
- };
25
- h2WrtH1: {
26
- alpha: string[];
27
- t: string[];
28
- };
29
- }
30
- export interface NTildeShare {
31
- ntilde: string;
32
- h1: string;
33
- h2: string;
34
- ntildeProof?: NtildeProofShare;
35
- }
36
32
  export interface RangeProof {
37
33
  z: bigint;
38
34
  u: bigint;
@@ -88,20 +84,20 @@ export interface XShare {
88
84
  x: string;
89
85
  chaincode: string;
90
86
  }
91
- export declare type XShareWithNTilde = XShare & NTildeShare;
87
+ export declare type XShareWithNtilde = XShare & SerializedNtilde;
92
88
  export interface YShare {
93
89
  i: number;
94
90
  j: number;
95
91
  n: string;
96
92
  }
97
- export declare type YShareWithNTilde = YShare & NTildeShare;
93
+ export declare type YShareWithNtilde = YShare & SerializedNtilde;
98
94
  export interface KeyCombined {
99
95
  xShare: XShare;
100
96
  yShares: Record<number, YShare>;
101
97
  }
102
- export interface KeyCombinedWithNTilde {
103
- xShare: XShareWithNTilde;
104
- yShares: Record<number, YShareWithNTilde>;
98
+ export interface KeyCombinedWithNtilde {
99
+ xShare: XShareWithNtilde;
100
+ yShares: Record<number, YShareWithNtilde>;
105
101
  }
106
102
  export interface SubkeyShare {
107
103
  xShare: XShare;
@@ -250,4 +246,5 @@ export interface Signature {
250
246
  r: string;
251
247
  s: string;
252
248
  }
249
+ export {};
253
250
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/account-lib/mpc/tss/ecdsa/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/account-lib/mpc/tss/ecdsa/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC1saWIvbXBjL3Rzcy9lY2RzYS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTlRpbGRlIGNoYWxsZW5nZSB2YWx1ZXNcbmV4cG9ydCBpbnRlcmZhY2UgTlRpbGRlIHtcbiAgbnRpbGRlOiBiaWdpbnQ7XG4gIGgxOiBiaWdpbnQ7XG4gIGgyOiBiaWdpbnQ7XG4gIG50aWxkZVByb29mPzogTnRpbGRlUHJvb2Y7XG59XG5cbi8vIE5UaWxkZSBQcm9vZlxuZXhwb3J0IGludGVyZmFjZSBOdGlsZGVQcm9vZiB7XG4gIGgxV3J0SDI6IE50aWxkZVByb29mSDFIMjtcbiAgaDJXcnRIMTogTnRpbGRlUHJvb2ZIMUgyO1xufVxuXG4vLyBOVGlsZGUgUHJvb2Ygd2hlcmUgYm90aCBhbHBoYSBhbmQgdCBhcmUgYSBzZXQgb2YgMTI4IHByb29mcyBlYWNoLlxuZXhwb3J0IGludGVyZmFjZSBOdGlsZGVQcm9vZkgxSDIge1xuICBhbHBoYTogYmlnaW50W107XG4gIHQ6IGJpZ2ludFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJTQU1vZHVsdXMge1xuICBuOiBiaWdpbnQ7XG4gIC8vIFNvcGhpZSBHZXJtYWluIHByaW1lcy5cbiAgcTE6IGJpZ2ludDtcbiAgcTI6IGJpZ2ludDtcbn1cblxuLy8gU3RyaW5nIHNlcmlhbGl6ZWQgTlRpbGRlIFByb29mIHZhbHVlc1xuZXhwb3J0IGludGVyZmFjZSBOdGlsZGVQcm9vZlNoYXJlIHtcbiAgaDFXcnRIMjoge1xuICAgIGFscGhhOiBzdHJpbmdbXTtcbiAgICB0OiBzdHJpbmdbXTtcbiAgfTtcbiAgaDJXcnRIMToge1xuICAgIGFscGhhOiBzdHJpbmdbXTtcbiAgICB0OiBzdHJpbmdbXTtcbiAgfTtcbn1cblxuLy8gU3RyaW5nLXNlcmlhbGl6ZWQgTlRpbGRlIHZhbHVlcy5cbmV4cG9ydCBpbnRlcmZhY2UgTlRpbGRlU2hhcmUge1xuICBudGlsZGU6IHN0cmluZztcbiAgaDE6IHN0cmluZztcbiAgaDI6IHN0cmluZztcbiAgbnRpbGRlUHJvb2Y/OiBOdGlsZGVQcm9vZlNoYXJlO1xufVxuXG4vLyBSYW5nZSBwcm9vZiB2YWx1ZXNcbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VQcm9vZiB7XG4gIHo6IGJpZ2ludDtcbiAgdTogYmlnaW50O1xuICB3OiBiaWdpbnQ7XG4gIHM6IGJpZ2ludDtcbiAgczE6IGJpZ2ludDtcbiAgczI6IGJpZ2ludDtcbn1cblxuLy8gUmFuZ2UgcHJvb2YgdmFsdWVzXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlUHJvb2ZXaXRoQ2hlY2sge1xuICB6OiBiaWdpbnQ7XG4gIHpwcm06IGJpZ2ludDtcbiAgdDogYmlnaW50O1xuICB2OiBiaWdpbnQ7XG4gIHc6IGJpZ2ludDtcbiAgczogYmlnaW50O1xuICBzMTogYmlnaW50O1xuICBzMjogYmlnaW50O1xuICB0MTogYmlnaW50O1xuICB0MjogYmlnaW50O1xuICB1OiBiaWdpbnQ7XG59XG5cbi8vIFByaXZhdGUgc2hhcmUgb2YgdGhlIHVzZXIgZ2VuZXJhdGVkIGR1cmluZyBrZXkgZ2VuZXJhdGlvblxuZXhwb3J0IGludGVyZmFjZSBQU2hhcmUge1xuICBpOiBudW1iZXI7IC8vIHBhcnRpY2lwYW50IGluZGV4XG4gIHQ/OiBudW1iZXI7IC8vIHRocmVzaG9sZFxuICBjPzogbnVtYmVyOyAvLyBudW1iZXIgb2Ygc2hhcmVzXG4gIGw6IHN0cmluZzsgLy8gbGFtYmRhIHZhbHVlIGZvciBwYWlsbGllciBzZWNyZXQga2V5XG4gIG06IHN0cmluZzsgLy8gbXUgdmFsdWUgZm9yIHBhaWxsaWVyIHNlY3JldCBrZXlcbiAgdTogc3RyaW5nOyAvLyBzaGFtaXIgc2hhcmUgb2Ygc2VjcmV0XG4gIHV1OiBzdHJpbmc7IC8vIHVuc3BsaXQgc2hhbWlyIHNoYXJlIG9mIHNlY3JldFxuICBuOiBzdHJpbmc7IC8vIG4gPT4gKHAgLiBxKSB3aGVyZSBwIGFuZCBxIGFyZSB0aGUgdHdvIHJhbmRvbSBwcmltZSBudW1iZXJzIGNob3NlbiBmb3IgcGFpbGxpZXIgZW5jcnlwdGlvblxuICB5OiBzdHJpbmc7XG4gIGNoYWluY29kZTogc3RyaW5nO1xufVxuXG4vLyBOU2hhcmVzIHdoaWNoIGlzIHNoYXJlZCB0byB0aGUgb3RoZXIgcGFydGljaXBhbnRzIGR1cmluZyBrZXkgZ2VuZXJhdGlvblxuZXhwb3J0IGludGVyZmFjZSBOU2hhcmUge1xuICBpOiBudW1iZXI7IC8vIHBhcnRpY2lwYW50IGluZGV4XG4gIGo6IG51bWJlcjsgLy8gdGFyZ2V0IHBhcnRpY2lwYW50IGluZGV4XG4gIG46IHN0cmluZztcbiAgdTogc3RyaW5nOyAvLyBzaGFtaXIgc2hhcmUgb2Ygc2VjcmV0IGF0IGondGggaW5kZXhcbiAgeTogc3RyaW5nO1xuICB2Pzogc3RyaW5nO1xuICBjaGFpbmNvZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgS2V5U2hhcmUgPSB7XG4gIHBTaGFyZTogUFNoYXJlO1xuICBuU2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBOU2hhcmU+O1xufTtcblxuLy8gUHJpdmF0ZSBYU2hhcmUgb2YgdGhlIGN1cnJlbnQgcGFydGljaXBhbnRcbmV4cG9ydCBpbnRlcmZhY2UgWFNoYXJlIHtcbiAgaTogbnVtYmVyO1xuICBsOiBzdHJpbmc7XG4gIG06IHN0cmluZztcbiAgbjogc3RyaW5nO1xuICB5OiBzdHJpbmc7IC8vIGNvbWJpbmVkIHB1YmxpYyBrZXlcbiAgeDogc3RyaW5nOyAvLyBjb21iaW5lZCBzZWNyZXRcbiAgY2hhaW5jb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFhTaGFyZVdpdGhOVGlsZGUgPSBYU2hhcmUgJiBOVGlsZGVTaGFyZTtcblxuLy8gWVNoYXJlcyB1c2VkIGR1cmluZyBzaWduYXR1cmUgZ2VuZXJhdGlvblxuZXhwb3J0IGludGVyZmFjZSBZU2hhcmUge1xuICBpOiBudW1iZXI7XG4gIGo6IG51bWJlcjtcbiAgbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBZU2hhcmVXaXRoTlRpbGRlID0gWVNoYXJlICYgTlRpbGRlU2hhcmU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Q29tYmluZWQge1xuICB4U2hhcmU6IFhTaGFyZTtcbiAgeVNoYXJlczogUmVjb3JkPG51bWJlciwgWVNoYXJlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLZXlDb21iaW5lZFdpdGhOVGlsZGUge1xuICB4U2hhcmU6IFhTaGFyZVdpdGhOVGlsZGU7XG4gIHlTaGFyZXM6IFJlY29yZDxudW1iZXIsIFlTaGFyZVdpdGhOVGlsZGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmtleVNoYXJlIHtcbiAgeFNoYXJlOiBYU2hhcmU7XG4gIG5TaGFyZXM6IFJlY29yZDxudW1iZXIsIE5TaGFyZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV1NoYXJlIHtcbiAgaTogbnVtYmVyO1xuICBsOiBzdHJpbmc7XG4gIG06IHN0cmluZztcbiAgbjogc3RyaW5nO1xuICB5OiBzdHJpbmc7IC8vIGNvbWJpbmVkIHB1YmxpYyBrZXlcbiAgbnRpbGRlOiBzdHJpbmc7XG4gIGgxOiBzdHJpbmc7XG4gIGgyOiBzdHJpbmc7XG4gIGNrOiBzdHJpbmc7XG4gIGs6IHN0cmluZztcbiAgdzogc3RyaW5nO1xuICBnYW1tYTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlUHJvb2ZTaGFyZSB7XG4gIHo6IHN0cmluZztcbiAgdTogc3RyaW5nO1xuICB3OiBzdHJpbmc7XG4gIHM6IHN0cmluZztcbiAgczE6IHN0cmluZztcbiAgczI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLU2hhcmUge1xuICBpOiBudW1iZXI7XG4gIGo6IG51bWJlcjtcbiAgbjogc3RyaW5nO1xuICBudGlsZGU6IHN0cmluZztcbiAgaDE6IHN0cmluZztcbiAgaDI6IHN0cmluZztcbiAgazogc3RyaW5nO1xuICBwcm9vZjogUmFuZ2VQcm9vZlNoYXJlO1xufVxuZXhwb3J0IGludGVyZmFjZSBTaWduU2hhcmVSVCB7XG4gIHdTaGFyZTogV1NoYXJlO1xuICBrU2hhcmU6IEtTaGFyZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYW5nZVByb29mV2l0aENoZWNrU2hhcmUge1xuICB6OiBzdHJpbmc7XG4gIHpwcm06IHN0cmluZztcbiAgdDogc3RyaW5nO1xuICB2OiBzdHJpbmc7XG4gIHc6IHN0cmluZztcbiAgczogc3RyaW5nO1xuICBzMTogc3RyaW5nO1xuICBzMjogc3RyaW5nO1xuICB0MTogc3RyaW5nO1xuICB0Mjogc3RyaW5nO1xuICB1OiBzdHJpbmc7XG4gIHg6IHN0cmluZztcbn1cblxuLy8gQWxwaGEgU2hhcmVcbmV4cG9ydCBpbnRlcmZhY2UgQVNoYXJlIHtcbiAgaTogbnVtYmVyO1xuICBqOiBudW1iZXI7XG4gIG46IHN0cmluZztcbiAgbnRpbGRlOiBzdHJpbmc7XG4gIGgxOiBzdHJpbmc7XG4gIGgyOiBzdHJpbmc7XG4gIGs6IHN0cmluZztcbiAgYWxwaGE6IHN0cmluZztcbiAgbXU6IHN0cmluZztcbiAgcHJvb2Y6IFJhbmdlUHJvb2ZTaGFyZTtcbiAgZ2FtbWFQcm9vZjogUmFuZ2VQcm9vZldpdGhDaGVja1NoYXJlO1xuICB3UHJvb2Y6IFJhbmdlUHJvb2ZXaXRoQ2hlY2tTaGFyZTtcbn1cblxuLy8gQmV0YSBTaGFyZVxuZXhwb3J0IGludGVyZmFjZSBCU2hhcmUgZXh0ZW5kcyBXU2hhcmUge1xuICBnYW1tYTogc3RyaW5nO1xuICBiZXRhOiBzdHJpbmc7XG4gIG51OiBzdHJpbmc7XG59XG5cbi8vIE11IFNoYXJlXG5leHBvcnQgaW50ZXJmYWNlIE1VU2hhcmUge1xuICBpOiBudW1iZXI7XG4gIGo6IG51bWJlcjtcbiAgYWxwaGE6IHN0cmluZztcbiAgbXU6IHN0cmluZztcbiAgZ2FtbWFQcm9vZjogUmFuZ2VQcm9vZldpdGhDaGVja1NoYXJlO1xuICB3UHJvb2Y6IFJhbmdlUHJvb2ZXaXRoQ2hlY2tTaGFyZTtcbn1cblxuLy8gR2FtbWEgU2hhcmVcbmV4cG9ydCBpbnRlcmZhY2UgR1NoYXJlIHtcbiAgaTogbnVtYmVyO1xuICBsPzogc3RyaW5nO1xuICBtPzogc3RyaW5nO1xuICBuOiBzdHJpbmc7XG4gIHk6IHN0cmluZzsgLy8gY29tYmluZWQgcHVibGljIGtleVxuICBrOiBzdHJpbmc7XG4gIHc6IHN0cmluZztcbiAgZ2FtbWE6IHN0cmluZztcbiAgYWxwaGE6IHN0cmluZztcbiAgbXU6IHN0cmluZztcbiAgYmV0YTogc3RyaW5nO1xuICBudTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBTaWduQ29udmVydCB7XG4gIHhTaGFyZT86IFhTaGFyZTsgLy8gWFNoYXJlIG9mIHRoZSBjdXJyZW50IHBhcnRpY2lwYW50XG4gIHlTaGFyZT86IFlTaGFyZTsgLy8gWVNoYXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50XG4gIGtTaGFyZT86IEtTaGFyZTsgLy8gS1NoYXJlIHJlY2VpdmVkIGZyb20gdGhlIG90aGVyIHBhcnRpY2lwYW50XG4gIGJTaGFyZT86IEJTaGFyZTsgLy8gUHJpdmF0ZSBCZXRhIHNoYXJlIG9mIHRoZSBwYXJ0aWNpcGFudFxuICBtdVNoYXJlPzogTVVTaGFyZTsgLy8gbXVTaGFyZSByZWNlaXZlZCBmcm9tIHRoZSBvdGhlciBwYXJ0aWNpcGFudFxuICBhU2hhcmU/OiBBU2hhcmU7XG4gIHdTaGFyZT86IFdTaGFyZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduQ29udmVydFJUIHtcbiAgYVNoYXJlPzogQVNoYXJlO1xuICBiU2hhcmU/OiBCU2hhcmU7XG4gIG11U2hhcmU/OiBNVVNoYXJlO1xuICBnU2hhcmU/OiBHU2hhcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT1NoYXJlIHtcbiAgaTogbnVtYmVyO1xuICB5OiBzdHJpbmc7XG4gIGs6IHN0cmluZztcbiAgb21pY3Jvbjogc3RyaW5nO1xuICBkZWx0YTogc3RyaW5nO1xuICBHYW1tYTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgajogbnVtYmVyO1xuICBkZWx0YTogc3RyaW5nO1xuICBHYW1tYTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgUjogc3RyaW5nO1xuICBzOiBzdHJpbmc7XG4gIHk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduQ29tYmluZSB7XG4gIGdTaGFyZTogR1NoYXJlO1xuICBzaWduSW5kZXg6IHtcbiAgICBpOiBudW1iZXI7XG4gICAgajogbnVtYmVyO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Db21iaW5lUlQge1xuICBvU2hhcmU6IE9TaGFyZTtcbiAgZFNoYXJlOiBEU2hhcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmF0dXJlIHtcbiAgeTogc3RyaW5nO1xuICByZWNpZDogbnVtYmVyO1xuICByOiBzdHJpbmc7XG4gIHM6IHN0cmluZztcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC1saWIvbXBjL3Rzcy9lY2RzYS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTnRpbGRlIFByb29mIHdoZXJlIGJvdGggYWxwaGEgYW5kIHQgYXJlIGEgc2V0IG9mIDEyOCBwcm9vZnMgZWFjaC5cbmludGVyZmFjZSBOdGlsZGVQcm9vZjxUPiB7XG4gIGFscGhhOiBUW107XG4gIHQ6IFRbXTtcbn1cblxuLy8gTnRpbGRlIFByb29mXG5pbnRlcmZhY2UgTnRpbGRlUHJvb2ZzPFQ+IHtcbiAgaDFXcnRIMjogTnRpbGRlUHJvb2Y8VD47XG4gIGgyV3J0SDE6IE50aWxkZVByb29mPFQ+O1xufVxuXG4vLyBOdGlsZGUgY2hhbGxlbmdlIHZhbHVlc1xuaW50ZXJmYWNlIE50aWxkZTxUPiB7XG4gIG50aWxkZTogVDtcbiAgaDE6IFQ7XG4gIGgyOiBUO1xuICBudGlsZGVQcm9vZj86IE50aWxkZVByb29mczxUPjtcbn1cblxuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkTnRpbGRlUHJvb2YgPSBOdGlsZGVQcm9vZjxiaWdpbnQ+O1xuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkTnRpbGRlUHJvb2ZzID0gTnRpbGRlUHJvb2ZzPGJpZ2ludD47XG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWROdGlsZGUgPSBOdGlsZGU8YmlnaW50PjtcbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnMgPSBPbWl0PERlc2VyaWFsaXplZE50aWxkZSwgJ250aWxkZVByb29mJz4gJiB7XG4gIG50aWxkZVByb29mOiBEZXNlcmlhbGl6ZWROdGlsZGVQcm9vZnM7XG59O1xuXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkTnRpbGRlUHJvb2YgPSBOdGlsZGVQcm9vZjxzdHJpbmc+O1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZE50aWxkZVByb29mcyA9IE50aWxkZVByb29mczxzdHJpbmc+O1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZE50aWxkZSA9IE50aWxkZTxzdHJpbmc+O1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnMgPSBPbWl0PFNlcmlhbGl6ZWROdGlsZGUsICdudGlsZGVQcm9vZic+ICYge1xuICBudGlsZGVQcm9vZjogU2VyaWFsaXplZE50aWxkZVByb29mcztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUlNBTW9kdWx1cyB7XG4gIG46IGJpZ2ludDtcbiAgLy8gU29waGllIEdlcm1haW4gcHJpbWVzLlxuICBxMTogYmlnaW50O1xuICBxMjogYmlnaW50O1xufVxuXG4vLyBSYW5nZSBwcm9vZiB2YWx1ZXNcbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VQcm9vZiB7XG4gIHo6IGJpZ2ludDtcbiAgdTogYmlnaW50O1xuICB3OiBiaWdpbnQ7XG4gIHM6IGJpZ2ludDtcbiAgczE6IGJpZ2ludDtcbiAgczI6IGJpZ2ludDtcbn1cblxuLy8gUmFuZ2UgcHJvb2YgdmFsdWVzXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlUHJvb2ZXaXRoQ2hlY2sge1xuICB6OiBiaWdpbnQ7XG4gIHpwcm06IGJpZ2ludDtcbiAgdDogYmlnaW50O1xuICB2OiBiaWdpbnQ7XG4gIHc6IGJpZ2ludDtcbiAgczogYmlnaW50O1xuICBzMTogYmlnaW50O1xuICBzMjogYmlnaW50O1xuICB0MTogYmlnaW50O1xuICB0MjogYmlnaW50O1xuICB1OiBiaWdpbnQ7XG59XG5cbi8vIFByaXZhdGUgc2hhcmUgb2YgdGhlIHVzZXIgZ2VuZXJhdGVkIGR1cmluZyBrZXkgZ2VuZXJhdGlvblxuZXhwb3J0IGludGVyZmFjZSBQU2hhcmUge1xuICBpOiBudW1iZXI7IC8vIHBhcnRpY2lwYW50IGluZGV4XG4gIHQ/OiBudW1iZXI7IC8vIHRocmVzaG9sZFxuICBjPzogbnVtYmVyOyAvLyBudW1iZXIgb2Ygc2hhcmVzXG4gIGw6IHN0cmluZzsgLy8gbGFtYmRhIHZhbHVlIGZvciBwYWlsbGllciBzZWNyZXQga2V5XG4gIG06IHN0cmluZzsgLy8gbXUgdmFsdWUgZm9yIHBhaWxsaWVyIHNlY3JldCBrZXlcbiAgdTogc3RyaW5nOyAvLyBzaGFtaXIgc2hhcmUgb2Ygc2VjcmV0XG4gIHV1OiBzdHJpbmc7IC8vIHVuc3BsaXQgc2hhbWlyIHNoYXJlIG9mIHNlY3JldFxuICBuOiBzdHJpbmc7IC8vIG4gPT4gKHAgLiBxKSB3aGVyZSBwIGFuZCBxIGFyZSB0aGUgdHdvIHJhbmRvbSBwcmltZSBudW1iZXJzIGNob3NlbiBmb3IgcGFpbGxpZXIgZW5jcnlwdGlvblxuICB5OiBzdHJpbmc7XG4gIGNoYWluY29kZTogc3RyaW5nO1xufVxuXG4vLyBOU2hhcmVzIHdoaWNoIGlzIHNoYXJlZCB0byB0aGUgb3RoZXIgcGFydGljaXBhbnRzIGR1cmluZyBrZXkgZ2VuZXJhdGlvblxuZXhwb3J0IGludGVyZmFjZSBOU2hhcmUge1xuICBpOiBudW1iZXI7IC8vIHBhcnRpY2lwYW50IGluZGV4XG4gIGo6IG51bWJlcjsgLy8gdGFyZ2V0IHBhcnRpY2lwYW50IGluZGV4XG4gIG46IHN0cmluZztcbiAgdTogc3RyaW5nOyAvLyBzaGFtaXIgc2hhcmUgb2Ygc2VjcmV0IGF0IGondGggaW5kZXhcbiAgeTogc3RyaW5nO1xuICB2Pzogc3RyaW5nO1xuICBjaGFpbmNvZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgS2V5U2hhcmUgPSB7XG4gIHBTaGFyZTogUFNoYXJlO1xuICBuU2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBOU2hhcmU+O1xufTtcblxuLy8gUHJpdmF0ZSBYU2hhcmUgb2YgdGhlIGN1cnJlbnQgcGFydGljaXBhbnRcbmV4cG9ydCBpbnRlcmZhY2UgWFNoYXJlIHtcbiAgaTogbnVtYmVyO1xuICBsOiBzdHJpbmc7XG4gIG06IHN0cmluZztcbiAgbjogc3RyaW5nO1xuICB5OiBzdHJpbmc7IC8vIGNvbWJpbmVkIHB1YmxpYyBrZXlcbiAgeDogc3RyaW5nOyAvLyBjb21iaW5lZCBzZWNyZXRcbiAgY2hhaW5jb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFhTaGFyZVdpdGhOdGlsZGUgPSBYU2hhcmUgJiBTZXJpYWxpemVkTnRpbGRlO1xuXG4vLyBZU2hhcmVzIHVzZWQgZHVyaW5nIHNpZ25hdHVyZSBnZW5lcmF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIFlTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgajogbnVtYmVyO1xuICBuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFlTaGFyZVdpdGhOdGlsZGUgPSBZU2hhcmUgJiBTZXJpYWxpemVkTnRpbGRlO1xuXG5leHBvcnQgaW50ZXJmYWNlIEtleUNvbWJpbmVkIHtcbiAgeFNoYXJlOiBYU2hhcmU7XG4gIHlTaGFyZXM6IFJlY29yZDxudW1iZXIsIFlTaGFyZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Q29tYmluZWRXaXRoTnRpbGRlIHtcbiAgeFNoYXJlOiBYU2hhcmVXaXRoTnRpbGRlO1xuICB5U2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBZU2hhcmVXaXRoTnRpbGRlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJrZXlTaGFyZSB7XG4gIHhTaGFyZTogWFNoYXJlO1xuICBuU2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBOU2hhcmU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgbDogc3RyaW5nO1xuICBtOiBzdHJpbmc7XG4gIG46IHN0cmluZztcbiAgeTogc3RyaW5nOyAvLyBjb21iaW5lZCBwdWJsaWMga2V5XG4gIG50aWxkZTogc3RyaW5nO1xuICBoMTogc3RyaW5nO1xuICBoMjogc3RyaW5nO1xuICBjazogc3RyaW5nO1xuICBrOiBzdHJpbmc7XG4gIHc6IHN0cmluZztcbiAgZ2FtbWE6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYW5nZVByb29mU2hhcmUge1xuICB6OiBzdHJpbmc7XG4gIHU6IHN0cmluZztcbiAgdzogc3RyaW5nO1xuICBzOiBzdHJpbmc7XG4gIHMxOiBzdHJpbmc7XG4gIHMyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS1NoYXJlIHtcbiAgaTogbnVtYmVyO1xuICBqOiBudW1iZXI7XG4gIG46IHN0cmluZztcbiAgbnRpbGRlOiBzdHJpbmc7XG4gIGgxOiBzdHJpbmc7XG4gIGgyOiBzdHJpbmc7XG4gIGs6IHN0cmluZztcbiAgcHJvb2Y6IFJhbmdlUHJvb2ZTaGFyZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblNoYXJlUlQge1xuICB3U2hhcmU6IFdTaGFyZTtcbiAga1NoYXJlOiBLU2hhcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VQcm9vZldpdGhDaGVja1NoYXJlIHtcbiAgejogc3RyaW5nO1xuICB6cHJtOiBzdHJpbmc7XG4gIHQ6IHN0cmluZztcbiAgdjogc3RyaW5nO1xuICB3OiBzdHJpbmc7XG4gIHM6IHN0cmluZztcbiAgczE6IHN0cmluZztcbiAgczI6IHN0cmluZztcbiAgdDE6IHN0cmluZztcbiAgdDI6IHN0cmluZztcbiAgdTogc3RyaW5nO1xuICB4OiBzdHJpbmc7XG59XG5cbi8vIEFscGhhIFNoYXJlXG5leHBvcnQgaW50ZXJmYWNlIEFTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgajogbnVtYmVyO1xuICBuOiBzdHJpbmc7XG4gIG50aWxkZTogc3RyaW5nO1xuICBoMTogc3RyaW5nO1xuICBoMjogc3RyaW5nO1xuICBrOiBzdHJpbmc7XG4gIGFscGhhOiBzdHJpbmc7XG4gIG11OiBzdHJpbmc7XG4gIHByb29mOiBSYW5nZVByb29mU2hhcmU7XG4gIGdhbW1hUHJvb2Y6IFJhbmdlUHJvb2ZXaXRoQ2hlY2tTaGFyZTtcbiAgd1Byb29mOiBSYW5nZVByb29mV2l0aENoZWNrU2hhcmU7XG59XG5cbi8vIEJldGEgU2hhcmVcbmV4cG9ydCBpbnRlcmZhY2UgQlNoYXJlIGV4dGVuZHMgV1NoYXJlIHtcbiAgZ2FtbWE6IHN0cmluZztcbiAgYmV0YTogc3RyaW5nO1xuICBudTogc3RyaW5nO1xufVxuXG4vLyBNdSBTaGFyZVxuZXhwb3J0IGludGVyZmFjZSBNVVNoYXJlIHtcbiAgaTogbnVtYmVyO1xuICBqOiBudW1iZXI7XG4gIGFscGhhOiBzdHJpbmc7XG4gIG11OiBzdHJpbmc7XG4gIGdhbW1hUHJvb2Y6IFJhbmdlUHJvb2ZXaXRoQ2hlY2tTaGFyZTtcbiAgd1Byb29mOiBSYW5nZVByb29mV2l0aENoZWNrU2hhcmU7XG59XG5cbi8vIEdhbW1hIFNoYXJlXG5leHBvcnQgaW50ZXJmYWNlIEdTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgbD86IHN0cmluZztcbiAgbT86IHN0cmluZztcbiAgbjogc3RyaW5nO1xuICB5OiBzdHJpbmc7IC8vIGNvbWJpbmVkIHB1YmxpYyBrZXlcbiAgazogc3RyaW5nO1xuICB3OiBzdHJpbmc7XG4gIGdhbW1hOiBzdHJpbmc7XG4gIGFscGhhOiBzdHJpbmc7XG4gIG11OiBzdHJpbmc7XG4gIGJldGE6IHN0cmluZztcbiAgbnU6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkNvbnZlcnQge1xuICB4U2hhcmU/OiBYU2hhcmU7IC8vIFhTaGFyZSBvZiB0aGUgY3VycmVudCBwYXJ0aWNpcGFudFxuICB5U2hhcmU/OiBZU2hhcmU7IC8vIFlTaGFyZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudFxuICBrU2hhcmU/OiBLU2hhcmU7IC8vIEtTaGFyZSByZWNlaXZlZCBmcm9tIHRoZSBvdGhlciBwYXJ0aWNpcGFudFxuICBiU2hhcmU/OiBCU2hhcmU7IC8vIFByaXZhdGUgQmV0YSBzaGFyZSBvZiB0aGUgcGFydGljaXBhbnRcbiAgbXVTaGFyZT86IE1VU2hhcmU7IC8vIG11U2hhcmUgcmVjZWl2ZWQgZnJvbSB0aGUgb3RoZXIgcGFydGljaXBhbnRcbiAgYVNoYXJlPzogQVNoYXJlO1xuICB3U2hhcmU/OiBXU2hhcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkNvbnZlcnRSVCB7XG4gIGFTaGFyZT86IEFTaGFyZTtcbiAgYlNoYXJlPzogQlNoYXJlO1xuICBtdVNoYXJlPzogTVVTaGFyZTtcbiAgZ1NoYXJlPzogR1NoYXJlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9TaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgeTogc3RyaW5nO1xuICBrOiBzdHJpbmc7XG4gIG9taWNyb246IHN0cmluZztcbiAgZGVsdGE6IHN0cmluZztcbiAgR2FtbWE6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEU2hhcmUge1xuICBpOiBudW1iZXI7XG4gIGo6IG51bWJlcjtcbiAgZGVsdGE6IHN0cmluZztcbiAgR2FtbWE6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTU2hhcmUge1xuICBpOiBudW1iZXI7XG4gIFI6IHN0cmluZztcbiAgczogc3RyaW5nO1xuICB5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkNvbWJpbmUge1xuICBnU2hhcmU6IEdTaGFyZTtcbiAgc2lnbkluZGV4OiB7XG4gICAgaTogbnVtYmVyO1xuICAgIGo6IG51bWJlcjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduQ29tYmluZVJUIHtcbiAgb1NoYXJlOiBPU2hhcmU7XG4gIGRTaGFyZTogRFNoYXJlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hdHVyZSB7XG4gIHk6IHN0cmluZztcbiAgcmVjaWQ6IG51bWJlcjtcbiAgcjogc3RyaW5nO1xuICBzOiBzdHJpbmc7XG59XG4iXX0=