@bitgo-beta/sdk-coin-sol 2.4.3-beta.98 → 2.4.3-beta.980

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 (69) hide show
  1. package/CHANGELOG.md +968 -0
  2. package/dist/src/index.js +6 -2
  3. package/dist/src/lib/ataInitializationBuilder.d.ts.map +1 -1
  4. package/dist/src/lib/ataInitializationBuilder.js +60 -22
  5. package/dist/src/lib/closeAtaBuilder.d.ts +19 -0
  6. package/dist/src/lib/closeAtaBuilder.d.ts.map +1 -0
  7. package/dist/src/lib/closeAtaBuilder.js +69 -0
  8. package/dist/src/lib/constants.d.ts +35 -8
  9. package/dist/src/lib/constants.d.ts.map +1 -1
  10. package/dist/src/lib/constants.js +39 -10
  11. package/dist/src/lib/iface.d.ts +45 -4
  12. package/dist/src/lib/iface.d.ts.map +1 -1
  13. package/dist/src/lib/iface.js +1 -1
  14. package/dist/src/lib/index.d.ts +12 -9
  15. package/dist/src/lib/index.d.ts.map +1 -1
  16. package/dist/src/lib/index.js +46 -26
  17. package/dist/src/lib/instructionParamsFactory.d.ts +1 -1
  18. package/dist/src/lib/instructionParamsFactory.d.ts.map +1 -1
  19. package/dist/src/lib/instructionParamsFactory.js +287 -60
  20. package/dist/src/lib/keyPair.js +5 -5
  21. package/dist/src/lib/messages/index.d.ts +2 -0
  22. package/dist/src/lib/messages/index.d.ts.map +1 -0
  23. package/dist/src/lib/messages/index.js +18 -0
  24. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  25. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  26. package/dist/src/lib/messages/messageBuilderFactory.js +19 -0
  27. package/dist/src/lib/solInstructionFactory.d.ts.map +1 -1
  28. package/dist/src/lib/solInstructionFactory.js +146 -53
  29. package/dist/src/lib/stakingActivateBuilder.d.ts +9 -2
  30. package/dist/src/lib/stakingActivateBuilder.d.ts.map +1 -1
  31. package/dist/src/lib/stakingActivateBuilder.js +23 -10
  32. package/dist/src/lib/stakingAuthorizeBuilder.js +7 -7
  33. package/dist/src/lib/stakingDeactivateBuilder.d.ts +26 -1
  34. package/dist/src/lib/stakingDeactivateBuilder.d.ts.map +1 -1
  35. package/dist/src/lib/stakingDeactivateBuilder.js +106 -25
  36. package/dist/src/lib/stakingDelegateBuilder.d.ts +42 -0
  37. package/dist/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
  38. package/dist/src/lib/stakingDelegateBuilder.js +120 -0
  39. package/dist/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -1
  40. package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +9 -5
  41. package/dist/src/lib/stakingWithdrawBuilder.js +6 -6
  42. package/dist/src/lib/tokenTransferBuilder.d.ts +4 -1
  43. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -1
  44. package/dist/src/lib/tokenTransferBuilder.js +87 -23
  45. package/dist/src/lib/transaction.d.ts +12 -3
  46. package/dist/src/lib/transaction.d.ts.map +1 -1
  47. package/dist/src/lib/transaction.js +61 -26
  48. package/dist/src/lib/transactionBuilder.d.ts +2 -1
  49. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  50. package/dist/src/lib/transactionBuilder.js +30 -19
  51. package/dist/src/lib/transactionBuilderFactory.d.ts +22 -9
  52. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  53. package/dist/src/lib/transactionBuilderFactory.js +32 -10
  54. package/dist/src/lib/transferBuilder.js +4 -4
  55. package/dist/src/lib/transferBuilderV2.d.ts +14 -1
  56. package/dist/src/lib/transferBuilderV2.d.ts.map +1 -1
  57. package/dist/src/lib/transferBuilderV2.js +114 -11
  58. package/dist/src/lib/utils.d.ts +16 -6
  59. package/dist/src/lib/utils.d.ts.map +1 -1
  60. package/dist/src/lib/utils.js +145 -53
  61. package/dist/src/lib/walletInitializationBuilder.js +6 -6
  62. package/dist/src/sol.d.ts +71 -25
  63. package/dist/src/sol.d.ts.map +1 -1
  64. package/dist/src/sol.js +615 -81
  65. package/dist/src/solToken.d.ts +2 -1
  66. package/dist/src/solToken.d.ts.map +1 -1
  67. package/dist/src/solToken.js +6 -3
  68. package/dist/src/tsol.js +1 -1
  69. package/package.json +10 -9
@@ -15,7 +15,7 @@ class KeyPair extends sdk_core_1.Ed25519KeyPair {
15
15
  }
16
16
  /** @inheritdoc */
17
17
  recordKeysFromPrivateKeyInProtocolFormat(prv) {
18
- const prvKey = utils_1.base58ToUint8Array(prv);
18
+ const prvKey = (0, utils_1.base58ToUint8Array)(prv);
19
19
  const keyPair = web3_js_1.Keypair.fromSecretKey(prvKey);
20
20
  return {
21
21
  pub: keyPair.publicKey.toBuffer().toString('hex'),
@@ -25,7 +25,7 @@ class KeyPair extends sdk_core_1.Ed25519KeyPair {
25
25
  /** @inheritdoc */
26
26
  recordKeysFromPublicKeyInProtocolFormat(pub) {
27
27
  return {
28
- pub: Buffer.from(utils_1.base58ToUint8Array(pub)).toString('hex'),
28
+ pub: Buffer.from((0, utils_1.base58ToUint8Array)(pub)).toString('hex'),
29
29
  };
30
30
  }
31
31
  /**
@@ -37,7 +37,7 @@ class KeyPair extends sdk_core_1.Ed25519KeyPair {
37
37
  getKeys(raw = false) {
38
38
  // keys are originally created in hex, but we need base58
39
39
  const publicKeyBuffer = Buffer.from(this.keyPair.pub, 'hex');
40
- const base58Pub = utils_1.Uint8ArrayTobase58(publicKeyBuffer);
40
+ const base58Pub = (0, utils_1.Uint8ArrayTobase58)(publicKeyBuffer);
41
41
  const result = { pub: base58Pub };
42
42
  if (!!this.keyPair.prv) {
43
43
  const secretKeyBuffer = Buffer.from(this.keyPair.prv, 'hex');
@@ -48,7 +48,7 @@ class KeyPair extends sdk_core_1.Ed25519KeyPair {
48
48
  result.prv = solanaSecretKey;
49
49
  }
50
50
  else {
51
- result.prv = utils_1.Uint8ArrayTobase58(solanaSecretKey);
51
+ result.prv = (0, utils_1.Uint8ArrayTobase58)(solanaSecretKey);
52
52
  }
53
53
  }
54
54
  return result;
@@ -60,4 +60,4 @@ class KeyPair extends sdk_core_1.Ed25519KeyPair {
60
60
  }
61
61
  }
62
62
  exports.KeyPair = KeyPair;
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBd0Q7QUFDeEQsbURBQW1GO0FBRW5GLG1DQUFpRTtBQUVqRSxNQUFhLE9BQVEsU0FBUSx5QkFBYztJQUl6Qzs7OztPQUlHO0lBQ0gsWUFBWSxNQUF1QjtRQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQix3Q0FBd0MsQ0FBQyxHQUFXO1FBQ2xELE1BQU0sTUFBTSxHQUFHLDBCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLGlCQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELE9BQU87WUFDTCxHQUFHLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2pELEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7U0FDakUsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsdUNBQXVDLENBQUMsR0FBVztRQUNqRCxPQUFPO1lBQ0wsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUs7UUFDakIseURBQXlEO1FBQ3pELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0QsTUFBTSxTQUFTLEdBQUcsMEJBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdEQsTUFBTSxNQUFNLEdBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RCxNQUFNLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXpDLElBQUksR0FBRyxFQUFFO2dCQUNQLE1BQU0sQ0FBQyxHQUFHLEdBQUcsZUFBZSxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxHQUFHLEdBQUcsMEJBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDbEQ7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsVUFBVTtRQUNSLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBL0RELDBCQStEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleXBhaXIgYXMgU29sS2V5cGFpciB9IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0S2V5cywgS2V5UGFpck9wdGlvbnMsIEVkMjU1MTlLZXlQYWlyIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgU29sYW5hS2V5cyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgYmFzZTU4VG9VaW50OEFycmF5LCBVaW50OEFycmF5VG9iYXNlNTggfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEtleVBhaXIgZXh0ZW5kcyBFZDI1NTE5S2V5UGFpciB7XG4gIHByb3RlY3RlZCBrZXlQYWlyOiBEZWZhdWx0S2V5cztcbiAgcHJvdGVjdGVkIHNvdXJjZT86IEtleVBhaXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuIEJ5IGRlZmF1bHQsIGNyZWF0ZXMgYSBrZXkgcGFpciB3aXRoIGEgcmFuZG9tIG1hc3RlciBzZWVkLlxuICAgKlxuICAgKiBAcGFyYW0geyBLZXlQYWlyT3B0aW9ucyB9IHNvdXJjZSBFaXRoZXIgYSBtYXN0ZXIgc2VlZCwgYSBwcml2YXRlIGtleSwgb3IgYSBwdWJsaWMga2V5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihzb3VyY2U/OiBLZXlQYWlyT3B0aW9ucykge1xuICAgIHN1cGVyKHNvdXJjZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcmVjb3JkS2V5c0Zyb21Qcml2YXRlS2V5SW5Qcm90b2NvbEZvcm1hdChwcnY6IHN0cmluZyk6IERlZmF1bHRLZXlzIHtcbiAgICBjb25zdCBwcnZLZXkgPSBiYXNlNThUb1VpbnQ4QXJyYXkocHJ2KTtcbiAgICBjb25zdCBrZXlQYWlyID0gU29sS2V5cGFpci5mcm9tU2VjcmV0S2V5KHBydktleSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlQYWlyLnB1YmxpY0tleS50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHBydjogQnVmZmVyLmZyb20oa2V5UGFpci5zZWNyZXRLZXkuc2xpY2UoMCwgMzIpKS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICByZWNvcmRLZXlzRnJvbVB1YmxpY0tleUluUHJvdG9jb2xGb3JtYXQocHViOiBzdHJpbmcpOiBEZWZhdWx0S2V5cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogQnVmZmVyLmZyb20oYmFzZTU4VG9VaW50OEFycmF5KHB1YikpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNvbGFuYSBkZWZhdWx0IGtleXMgZm9ybWF0IHB1YmxpYyBrZXkgYXMgYSBiYXNlNTggc3RyaW5nIGFuZCBzZWNyZXQga2V5IGFzIFVpbnQ4QXJyYXlcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSByYXcgZGVmaW5lcyBpZiB0aGUgcHJ2IGtleSBpcyByZXR1cm5lZCBpbiBVaW50OEFycmF5LCBkZWZhdWx0IGlzIGJhc2U1OFxuICAgKiBAcmV0dXJucyB7U29sYW5hS2V5c30gVGhlIGtleXMgaW4gdGhlIGRlZmluZWQgZm9ybWF0XG4gICAqL1xuICBnZXRLZXlzKHJhdyA9IGZhbHNlKTogU29sYW5hS2V5cyB7XG4gICAgLy8ga2V5cyBhcmUgb3JpZ2luYWxseSBjcmVhdGVkIGluIGhleCwgYnV0IHdlIG5lZWQgYmFzZTU4XG4gICAgY29uc3QgcHVibGljS2V5QnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5rZXlQYWlyLnB1YiwgJ2hleCcpO1xuICAgIGNvbnN0IGJhc2U1OFB1YiA9IFVpbnQ4QXJyYXlUb2Jhc2U1OChwdWJsaWNLZXlCdWZmZXIpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBTb2xhbmFLZXlzID0geyBwdWI6IGJhc2U1OFB1YiB9O1xuICAgIGlmICghIXRoaXMua2V5UGFpci5wcnYpIHtcbiAgICAgIGNvbnN0IHNlY3JldEtleUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMua2V5UGFpci5wcnYsICdoZXgnKTtcbiAgICAgIGNvbnN0IHNvbGFuYVNlY3JldEtleSA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgICAgIHNvbGFuYVNlY3JldEtleS5zZXQoc2VjcmV0S2V5QnVmZmVyKTtcbiAgICAgIHNvbGFuYVNlY3JldEtleS5zZXQocHVibGljS2V5QnVmZmVyLCAzMik7XG5cbiAgICAgIGlmIChyYXcpIHtcbiAgICAgICAgcmVzdWx0LnBydiA9IHNvbGFuYVNlY3JldEtleTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wcnYgPSBVaW50OEFycmF5VG9iYXNlNTgoc29sYW5hU2VjcmV0S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5cyA9IHRoaXMuZ2V0S2V5cygpO1xuICAgIHJldHVybiBrZXlzLnB1YjtcbiAgfVxufVxuIl19
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBd0Q7QUFDeEQsbURBQW1GO0FBRW5GLG1DQUFpRTtBQUVqRSxNQUFhLE9BQVEsU0FBUSx5QkFBYztJQUl6Qzs7OztPQUlHO0lBQ0gsWUFBWSxNQUF1QjtRQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQix3Q0FBd0MsQ0FBQyxHQUFXO1FBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUEsMEJBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsaUJBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakQsT0FBTztZQUNMLEdBQUcsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDakQsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNqRSxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQix1Q0FBdUMsQ0FBQyxHQUFXO1FBQ2pELE9BQU87WUFDTCxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFBLDBCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLEdBQUcsR0FBRyxLQUFLO1FBQ2pCLHlEQUF5RDtRQUN6RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUFHLElBQUEsMEJBQWtCLEVBQUMsZUFBZSxDQUFDLENBQUM7UUFFdEQsTUFBTSxNQUFNLEdBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdELE1BQU0sZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDckMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFekMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLENBQUMsR0FBRyxHQUFHLGVBQWUsQ0FBQztZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFBLDBCQUFrQixFQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixVQUFVO1FBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUEvREQsMEJBK0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5cGFpciBhcyBTb2xLZXlwYWlyIH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCB7IERlZmF1bHRLZXlzLCBLZXlQYWlyT3B0aW9ucywgRWQyNTUxOUtleVBhaXIgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBTb2xhbmFLZXlzIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBiYXNlNThUb1VpbnQ4QXJyYXksIFVpbnQ4QXJyYXlUb2Jhc2U1OCB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgS2V5UGFpciBleHRlbmRzIEVkMjU1MTlLZXlQYWlyIHtcbiAgcHJvdGVjdGVkIGtleVBhaXI6IERlZmF1bHRLZXlzO1xuICBwcm90ZWN0ZWQgc291cmNlPzogS2V5UGFpck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci4gQnkgZGVmYXVsdCwgY3JlYXRlcyBhIGtleSBwYWlyIHdpdGggYSByYW5kb20gbWFzdGVyIHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7IEtleVBhaXJPcHRpb25zIH0gc291cmNlIEVpdGhlciBhIG1hc3RlciBzZWVkLCBhIHByaXZhdGUga2V5LCBvciBhIHB1YmxpYyBrZXlcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNvdXJjZT86IEtleVBhaXJPcHRpb25zKSB7XG4gICAgc3VwZXIoc291cmNlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICByZWNvcmRLZXlzRnJvbVByaXZhdGVLZXlJblByb3RvY29sRm9ybWF0KHBydjogc3RyaW5nKTogRGVmYXVsdEtleXMge1xuICAgIGNvbnN0IHBydktleSA9IGJhc2U1OFRvVWludDhBcnJheShwcnYpO1xuICAgIGNvbnN0IGtleVBhaXIgPSBTb2xLZXlwYWlyLmZyb21TZWNyZXRLZXkocHJ2S2V5KTtcblxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleVBhaXIucHVibGljS2V5LnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHJ2OiBCdWZmZXIuZnJvbShrZXlQYWlyLnNlY3JldEtleS5zbGljZSgwLCAzMikpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHJlY29yZEtleXNGcm9tUHVibGljS2V5SW5Qcm90b2NvbEZvcm1hdChwdWI6IHN0cmluZyk6IERlZmF1bHRLZXlzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBCdWZmZXIuZnJvbShiYXNlNThUb1VpbnQ4QXJyYXkocHViKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU29sYW5hIGRlZmF1bHQga2V5cyBmb3JtYXQgcHVibGljIGtleSBhcyBhIGJhc2U1OCBzdHJpbmcgYW5kIHNlY3JldCBrZXkgYXMgVWludDhBcnJheVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJhdyBkZWZpbmVzIGlmIHRoZSBwcnYga2V5IGlzIHJldHVybmVkIGluIFVpbnQ4QXJyYXksIGRlZmF1bHQgaXMgYmFzZTU4XG4gICAqIEByZXR1cm5zIHtTb2xhbmFLZXlzfSBUaGUga2V5cyBpbiB0aGUgZGVmaW5lZCBmb3JtYXRcbiAgICovXG4gIGdldEtleXMocmF3ID0gZmFsc2UpOiBTb2xhbmFLZXlzIHtcbiAgICAvLyBrZXlzIGFyZSBvcmlnaW5hbGx5IGNyZWF0ZWQgaW4gaGV4LCBidXQgd2UgbmVlZCBiYXNlNThcbiAgICBjb25zdCBwdWJsaWNLZXlCdWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmtleVBhaXIucHViLCAnaGV4Jyk7XG4gICAgY29uc3QgYmFzZTU4UHViID0gVWludDhBcnJheVRvYmFzZTU4KHB1YmxpY0tleUJ1ZmZlcik7XG5cbiAgICBjb25zdCByZXN1bHQ6IFNvbGFuYUtleXMgPSB7IHB1YjogYmFzZTU4UHViIH07XG4gICAgaWYgKCEhdGhpcy5rZXlQYWlyLnBydikge1xuICAgICAgY29uc3Qgc2VjcmV0S2V5QnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5rZXlQYWlyLnBydiwgJ2hleCcpO1xuICAgICAgY29uc3Qgc29sYW5hU2VjcmV0S2V5ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICAgICAgc29sYW5hU2VjcmV0S2V5LnNldChzZWNyZXRLZXlCdWZmZXIpO1xuICAgICAgc29sYW5hU2VjcmV0S2V5LnNldChwdWJsaWNLZXlCdWZmZXIsIDMyKTtcblxuICAgICAgaWYgKHJhdykge1xuICAgICAgICByZXN1bHQucHJ2ID0gc29sYW5hU2VjcmV0S2V5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnBydiA9IFVpbnQ4QXJyYXlUb2Jhc2U1OChzb2xhbmFTZWNyZXRLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXlzID0gdGhpcy5nZXRLZXlzKCk7XG4gICAgcmV0dXJuIGtleXMucHViO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './messageBuilderFactory';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/messages/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./messageBuilderFactory"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lc3NhZ2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwREFBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21lc3NhZ2VCdWlsZGVyRmFjdG9yeSc7XG4iXX0=
@@ -0,0 +1,7 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { BaseMessageBuilderFactory, IMessageBuilder, MessageStandardType } from '@bitgo-beta/sdk-core';
3
+ export declare class MessageBuilderFactory extends BaseMessageBuilderFactory {
4
+ constructor(coinConfig: Readonly<CoinConfig>);
5
+ getMessageBuilder(type: MessageStandardType): IMessageBuilder;
6
+ }
7
+ //# sourceMappingURL=messageBuilderFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../src/lib/messages/messageBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,mBAAmB,EAAwB,MAAM,sBAAsB,CAAC;AAE7H,qBAAa,qBAAsB,SAAQ,yBAAyB;gBACtD,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAIrC,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe;CAQrE"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageBuilderFactory = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ class MessageBuilderFactory extends sdk_core_1.BaseMessageBuilderFactory {
6
+ constructor(coinConfig) {
7
+ super(coinConfig);
8
+ }
9
+ getMessageBuilder(type) {
10
+ switch (type) {
11
+ case sdk_core_1.MessageStandardType.SIMPLE:
12
+ return new sdk_core_1.SimpleMessageBuilder(this.coinConfig);
13
+ default:
14
+ throw new Error(`Invalid message standard ${type}`);
15
+ }
16
+ }
17
+ }
18
+ exports.MessageBuilderFactory = MessageBuilderFactory;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZUJ1aWxkZXJGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZXNzYWdlcy9tZXNzYWdlQnVpbGRlckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQTZIO0FBRTdILE1BQWEscUJBQXNCLFNBQVEsb0NBQXlCO0lBQ2xFLFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUF5QjtRQUNoRCxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyw4QkFBbUIsQ0FBQyxNQUFNO2dCQUM3QixPQUFPLElBQUksK0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25EO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWJELHNEQWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQmFzZU1lc3NhZ2VCdWlsZGVyRmFjdG9yeSwgSU1lc3NhZ2VCdWlsZGVyLCBNZXNzYWdlU3RhbmRhcmRUeXBlLCBTaW1wbGVNZXNzYWdlQnVpbGRlciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VCdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VNZXNzYWdlQnVpbGRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgcHVibGljIGdldE1lc3NhZ2VCdWlsZGVyKHR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUpOiBJTWVzc2FnZUJ1aWxkZXIge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRTpcbiAgICAgICAgcmV0dXJuIG5ldyBTaW1wbGVNZXNzYWdlQnVpbGRlcih0aGlzLmNvaW5Db25maWcpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1lc3NhZ2Ugc3RhbmRhcmQgJHt0eXBlfWApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"solInstructionFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/solInstructionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAEL,iBAAiB,EAUlB,MAAM,SAAS,CAAC;AAIjB;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,kBAAkB,EAAE,iBAAiB,GAAG,sBAAsB,EAAE,CAyBrG"}
1
+ {"version":3,"file":"solInstructionFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/solInstructionFactory.ts"],"names":[],"mappings":"AAOA,OAAO,EAQL,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAGL,iBAAiB,EAYlB,MAAM,SAAS,CAAC;AAGjB;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,kBAAkB,EAAE,iBAAiB,GAAG,sBAAsB,EAAE,CA+BrG"}
@@ -3,13 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.solInstructionFactory = void 0;
6
+ exports.solInstructionFactory = solInstructionFactory;
7
+ const statics_1 = require("@bitgo-beta/statics");
8
+ const spl_token_1 = require("@solana/spl-token");
7
9
  const web3_js_1 = require("@solana/web3.js");
8
10
  const assert_1 = __importDefault(require("assert"));
9
11
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
10
12
  const constants_1 = require("./constants");
11
- const statics_1 = require("@bitgo-beta/statics");
12
- const spl_token_1 = require("@solana/spl-token");
13
+ const utils_1 = require("./utils");
13
14
  /**
14
15
  * Construct Solana instructions from instructions params
15
16
  *
@@ -36,13 +37,18 @@ function solInstructionFactory(instructionToBuild) {
36
37
  return stakingWithdrawInstruction(instructionToBuild);
37
38
  case constants_1.InstructionBuilderTypes.CreateAssociatedTokenAccount:
38
39
  return createATAInstruction(instructionToBuild);
40
+ case constants_1.InstructionBuilderTypes.CloseAssociatedTokenAccount:
41
+ return closeATAInstruction(instructionToBuild);
39
42
  case constants_1.InstructionBuilderTypes.StakingAuthorize:
40
43
  return stakingAuthorizeInstruction(instructionToBuild);
44
+ case constants_1.InstructionBuilderTypes.StakingDelegate:
45
+ return stakingDelegateInstruction(instructionToBuild);
46
+ case constants_1.InstructionBuilderTypes.SetPriorityFee:
47
+ return fetchPriorityFeeInstruction(instructionToBuild);
41
48
  default:
42
49
  throw new Error(`Invalid instruction type or not supported`);
43
50
  }
44
51
  }
45
- exports.solInstructionFactory = solInstructionFactory;
46
52
  /**
47
53
  * Construct Advance Nonce Solana instructions
48
54
  *
@@ -51,14 +57,20 @@ exports.solInstructionFactory = solInstructionFactory;
51
57
  */
52
58
  function advanceNonceInstruction(data) {
53
59
  const { params: { authWalletAddress, walletNonceAddress }, } = data;
54
- assert_1.default(authWalletAddress, 'Missing authWalletAddress param');
55
- assert_1.default(walletNonceAddress, 'Missing walletNonceAddress param');
60
+ (0, assert_1.default)(authWalletAddress, 'Missing authWalletAddress param');
61
+ (0, assert_1.default)(walletNonceAddress, 'Missing walletNonceAddress param');
56
62
  const nonceInstruction = web3_js_1.SystemProgram.nonceAdvance({
57
63
  noncePubkey: new web3_js_1.PublicKey(walletNonceAddress),
58
64
  authorizedPubkey: new web3_js_1.PublicKey(authWalletAddress),
59
65
  });
60
66
  return [nonceInstruction];
61
67
  }
68
+ function fetchPriorityFeeInstruction(instructionToBuild) {
69
+ const addPriorityFee = web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
70
+ microLamports: instructionToBuild.params.fee,
71
+ });
72
+ return [addPriorityFee];
73
+ }
62
74
  /**
63
75
  * Construct Memo Solana instructions
64
76
  *
@@ -67,7 +79,7 @@ function advanceNonceInstruction(data) {
67
79
  */
68
80
  function memoInstruction(data) {
69
81
  const { params: { memo }, } = data;
70
- assert_1.default(memo, 'Missing memo param');
82
+ (0, assert_1.default)(memo, 'Missing memo param');
71
83
  const memoInstruction = new web3_js_1.TransactionInstruction({
72
84
  keys: [],
73
85
  programId: new web3_js_1.PublicKey(constants_1.MEMO_PROGRAM_PK),
@@ -83,9 +95,9 @@ function memoInstruction(data) {
83
95
  */
84
96
  function transferInstruction(data) {
85
97
  const { params: { fromAddress, toAddress, amount }, } = data;
86
- assert_1.default(fromAddress, 'Missing fromAddress param');
87
- assert_1.default(toAddress, 'Missing toAddress param');
88
- assert_1.default(amount, 'Missing toAddress param');
98
+ (0, assert_1.default)(fromAddress, 'Missing fromAddress param');
99
+ (0, assert_1.default)(toAddress, 'Missing toAddress param');
100
+ (0, assert_1.default)(amount, 'Missing toAddress param');
89
101
  const transferInstruction = web3_js_1.SystemProgram.transfer({
90
102
  fromPubkey: new web3_js_1.PublicKey(fromAddress),
91
103
  toPubkey: new web3_js_1.PublicKey(toAddress),
@@ -101,14 +113,36 @@ function transferInstruction(data) {
101
113
  */
102
114
  function tokenTransferInstruction(data) {
103
115
  const { params: { fromAddress, toAddress, amount, tokenName, sourceAddress }, } = data;
104
- assert_1.default(fromAddress, 'Missing fromAddress (owner) param');
105
- assert_1.default(toAddress, 'Missing toAddress param');
106
- assert_1.default(amount, 'Missing amount param');
107
- assert_1.default(tokenName, 'Missing token name');
108
- assert_1.default(sourceAddress, 'Missing ata address');
109
- const token = statics_1.coins.get(data.params.tokenName);
110
- assert_1.default(token instanceof statics_1.SolCoin);
111
- const transferInstruction = spl_token_1.createTransferCheckedInstruction(new web3_js_1.PublicKey(sourceAddress), new web3_js_1.PublicKey(token.tokenAddress), new web3_js_1.PublicKey(toAddress), new web3_js_1.PublicKey(fromAddress), BigInt(amount), token.decimalPlaces);
116
+ (0, assert_1.default)(fromAddress, 'Missing fromAddress (owner) param');
117
+ (0, assert_1.default)(toAddress, 'Missing toAddress param');
118
+ (0, assert_1.default)(amount, 'Missing amount param');
119
+ (0, assert_1.default)(tokenName, 'Missing token name');
120
+ (0, assert_1.default)(sourceAddress, 'Missing ata address');
121
+ const token = (0, utils_1.getSolTokenFromTokenName)(data.params.tokenName);
122
+ let tokenAddress;
123
+ let programId;
124
+ let decimalPlaces;
125
+ if (data.params.tokenAddress && data.params.decimalPlaces) {
126
+ tokenAddress = data.params.tokenAddress;
127
+ decimalPlaces = data.params.decimalPlaces;
128
+ programId = data.params.programId;
129
+ }
130
+ else if (token) {
131
+ (0, assert_1.default)(token instanceof statics_1.SolCoin);
132
+ tokenAddress = token.tokenAddress;
133
+ decimalPlaces = token.decimalPlaces;
134
+ programId = token.programId;
135
+ }
136
+ else {
137
+ throw new Error('Invalid token name, got:' + data.params.tokenName);
138
+ }
139
+ let transferInstruction;
140
+ if (programId === spl_token_1.TOKEN_2022_PROGRAM_ID.toString()) {
141
+ transferInstruction = (0, spl_token_1.createTransferCheckedInstruction)(new web3_js_1.PublicKey(sourceAddress), new web3_js_1.PublicKey(tokenAddress), new web3_js_1.PublicKey(toAddress), new web3_js_1.PublicKey(fromAddress), BigInt(amount), decimalPlaces, [], spl_token_1.TOKEN_2022_PROGRAM_ID);
142
+ }
143
+ else {
144
+ transferInstruction = (0, spl_token_1.createTransferCheckedInstruction)(new web3_js_1.PublicKey(sourceAddress), new web3_js_1.PublicKey(tokenAddress), new web3_js_1.PublicKey(toAddress), new web3_js_1.PublicKey(fromAddress), BigInt(amount), decimalPlaces);
145
+ }
112
146
  return [transferInstruction];
113
147
  }
114
148
  /**
@@ -119,10 +153,10 @@ function tokenTransferInstruction(data) {
119
153
  */
120
154
  function createNonceAccountInstruction(data) {
121
155
  const { params: { fromAddress, nonceAddress, authAddress, amount }, } = data;
122
- assert_1.default(fromAddress, 'Missing fromAddress param');
123
- assert_1.default(nonceAddress, 'Missing nonceAddress param');
124
- assert_1.default(authAddress, 'Missing authAddress param');
125
- assert_1.default(amount, 'Missing amount param');
156
+ (0, assert_1.default)(fromAddress, 'Missing fromAddress param');
157
+ (0, assert_1.default)(nonceAddress, 'Missing nonceAddress param');
158
+ (0, assert_1.default)(authAddress, 'Missing authAddress param');
159
+ (0, assert_1.default)(amount, 'Missing amount param');
126
160
  const nonceAccountInstruction = web3_js_1.SystemProgram.createNonceAccount({
127
161
  fromPubkey: new web3_js_1.PublicKey(fromAddress),
128
162
  noncePubkey: new web3_js_1.PublicKey(nonceAddress),
@@ -138,28 +172,33 @@ function createNonceAccountInstruction(data) {
138
172
  * @returns {TransactionInstruction[]} An array containing Create Staking Account and Delegate Solana instructions
139
173
  */
140
174
  function stakingInitializeInstruction(data) {
141
- const { params: { fromAddress, stakingAddress, amount, validator }, } = data;
142
- assert_1.default(fromAddress, 'Missing fromAddress param');
143
- assert_1.default(stakingAddress, 'Missing stakingAddress param');
144
- assert_1.default(amount, 'Missing amount param');
145
- assert_1.default(validator, 'Missing validator param');
175
+ const { params: { fromAddress, stakingAddress, amount, validator, isMarinade }, } = data;
176
+ (0, assert_1.default)(fromAddress, 'Missing fromAddress param');
177
+ (0, assert_1.default)(stakingAddress, 'Missing stakingAddress param');
178
+ (0, assert_1.default)(amount, 'Missing amount param');
179
+ (0, assert_1.default)(validator, 'Missing validator param');
180
+ (0, assert_1.default)(isMarinade !== undefined, 'Missing isMarinade param');
146
181
  const fromPubkey = new web3_js_1.PublicKey(fromAddress);
147
182
  const stakePubkey = new web3_js_1.PublicKey(stakingAddress);
183
+ const validatorPubkey = new web3_js_1.PublicKey(validator);
148
184
  const tx = new web3_js_1.Transaction();
185
+ const stakerPubkey = isMarinade ? validatorPubkey : fromPubkey;
149
186
  const walletInitStaking = web3_js_1.StakeProgram.createAccount({
150
187
  fromPubkey,
151
188
  stakePubkey,
152
- authorized: new web3_js_1.Authorized(fromPubkey, fromPubkey),
153
- lockup: new web3_js_1.Lockup(0, 0, fromPubkey),
189
+ authorized: new web3_js_1.Authorized(stakerPubkey, fromPubkey), // staker and withdrawer
190
+ lockup: new web3_js_1.Lockup(0, 0, fromPubkey), // No minimum epoch to withdraw
154
191
  lamports: new bignumber_js_1.default(amount).toNumber(),
155
192
  });
156
193
  tx.add(walletInitStaking);
157
- const delegateStaking = web3_js_1.StakeProgram.delegate({
158
- stakePubkey: new web3_js_1.PublicKey(stakingAddress),
159
- authorizedPubkey: new web3_js_1.PublicKey(fromAddress),
160
- votePubkey: new web3_js_1.PublicKey(validator),
161
- });
162
- tx.add(delegateStaking);
194
+ if (!isMarinade) {
195
+ const delegateStaking = web3_js_1.StakeProgram.delegate({
196
+ stakePubkey: new web3_js_1.PublicKey(stakingAddress),
197
+ authorizedPubkey: new web3_js_1.PublicKey(fromAddress),
198
+ votePubkey: new web3_js_1.PublicKey(validator),
199
+ });
200
+ tx.add(delegateStaking);
201
+ }
163
202
  return tx.instructions;
164
203
  }
165
204
  /**
@@ -169,9 +208,23 @@ function stakingInitializeInstruction(data) {
169
208
  * @returns {TransactionInstruction[]} An array containing staking deactivate instruction
170
209
  */
171
210
  function stakingDeactivateInstruction(data) {
172
- const { params: { fromAddress, stakingAddress }, } = data;
173
- assert_1.default(fromAddress, 'Missing fromAddress param');
174
- assert_1.default(stakingAddress, 'Missing stakingAddress param');
211
+ const { params: { fromAddress, stakingAddress, isMarinade, recipients }, } = data;
212
+ (0, assert_1.default)(fromAddress, 'Missing fromAddress param');
213
+ if (!isMarinade) {
214
+ (0, assert_1.default)(stakingAddress, 'Missing stakingAddress param');
215
+ }
216
+ if (isMarinade) {
217
+ const tx = new web3_js_1.Transaction();
218
+ (0, assert_1.default)(recipients, 'Missing recipients param');
219
+ const toPubkeyAddress = new web3_js_1.PublicKey(recipients[0].address || '');
220
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
221
+ fromPubkey: new web3_js_1.PublicKey(fromAddress),
222
+ toPubkey: toPubkeyAddress,
223
+ lamports: parseInt(recipients[0].amount, 10),
224
+ });
225
+ tx.add(transferInstruction);
226
+ return tx.instructions;
227
+ }
175
228
  if (data.params.amount && data.params.unstakingAddress) {
176
229
  const tx = new web3_js_1.Transaction();
177
230
  const unstakingAddress = new web3_js_1.PublicKey(data.params.unstakingAddress);
@@ -190,7 +243,7 @@ function stakingDeactivateInstruction(data) {
190
243
  authorizedPubkey: new web3_js_1.PublicKey(fromAddress),
191
244
  splitStakePubkey: unstakingAddress,
192
245
  lamports: new bignumber_js_1.default(data.params.amount).toNumber(),
193
- });
246
+ }, 0);
194
247
  tx.add(splitStake.instructions[1]);
195
248
  const deactivateStaking = web3_js_1.StakeProgram.deactivate({
196
249
  stakePubkey: unstakingAddress,
@@ -215,9 +268,9 @@ function stakingDeactivateInstruction(data) {
215
268
  */
216
269
  function stakingWithdrawInstruction(data) {
217
270
  const { params: { fromAddress, stakingAddress, amount }, } = data;
218
- assert_1.default(fromAddress, 'Missing fromAddress param');
219
- assert_1.default(stakingAddress, 'Missing stakingAddress param');
220
- assert_1.default(amount, 'Missing amount param');
271
+ (0, assert_1.default)(fromAddress, 'Missing fromAddress param');
272
+ (0, assert_1.default)(stakingAddress, 'Missing stakingAddress param');
273
+ (0, assert_1.default)(amount, 'Missing amount param');
221
274
  const withdrawStaking = web3_js_1.StakeProgram.withdraw({
222
275
  stakePubkey: new web3_js_1.PublicKey(stakingAddress),
223
276
  authorizedPubkey: new web3_js_1.PublicKey(fromAddress),
@@ -233,14 +286,34 @@ function stakingWithdrawInstruction(data) {
233
286
  * @returns {TransactionInstruction[]} An array containing Create and Initialize Nonce Solana instruction
234
287
  */
235
288
  function createATAInstruction(data) {
236
- const { params: { mintAddress, ataAddress, ownerAddress, payerAddress }, } = data;
237
- assert_1.default(mintAddress, 'Missing mintAddress param');
238
- assert_1.default(ataAddress, 'Missing ataAddress param');
239
- assert_1.default(ownerAddress, 'Missing ownerAddress param');
240
- assert_1.default(payerAddress, 'Missing payerAddress param');
241
- const associatedTokenAccountInstruction = spl_token_1.createAssociatedTokenAccountInstruction(new web3_js_1.PublicKey(payerAddress), new web3_js_1.PublicKey(ataAddress), new web3_js_1.PublicKey(ownerAddress), new web3_js_1.PublicKey(mintAddress));
289
+ const { params: { mintAddress, ataAddress, ownerAddress, payerAddress, programId }, } = data;
290
+ (0, assert_1.default)(mintAddress, 'Missing mintAddress param');
291
+ (0, assert_1.default)(ataAddress, 'Missing ataAddress param');
292
+ (0, assert_1.default)(ownerAddress, 'Missing ownerAddress param');
293
+ (0, assert_1.default)(payerAddress, 'Missing payerAddress param');
294
+ let associatedTokenAccountInstruction;
295
+ if (programId && programId === spl_token_1.TOKEN_2022_PROGRAM_ID.toString()) {
296
+ associatedTokenAccountInstruction = (0, spl_token_1.createAssociatedTokenAccountInstruction)(new web3_js_1.PublicKey(payerAddress), new web3_js_1.PublicKey(ataAddress), new web3_js_1.PublicKey(ownerAddress), new web3_js_1.PublicKey(mintAddress), spl_token_1.TOKEN_2022_PROGRAM_ID);
297
+ }
298
+ else {
299
+ associatedTokenAccountInstruction = (0, spl_token_1.createAssociatedTokenAccountInstruction)(new web3_js_1.PublicKey(payerAddress), new web3_js_1.PublicKey(ataAddress), new web3_js_1.PublicKey(ownerAddress), new web3_js_1.PublicKey(mintAddress));
300
+ }
242
301
  return [associatedTokenAccountInstruction];
243
302
  }
303
+ /**
304
+ * Construct Close ATA Solana instructions
305
+ *
306
+ * @param {WalletInit} data - the data to build the instruction
307
+ * @returns {TransactionInstruction[]} An array containing Close ATA Solana instruction
308
+ */
309
+ function closeATAInstruction(data) {
310
+ const { params: { accountAddress, destinationAddress, authorityAddress }, } = data;
311
+ (0, assert_1.default)(accountAddress, 'Missing accountAddress param');
312
+ (0, assert_1.default)(destinationAddress, 'Missing destinationAddress param');
313
+ (0, assert_1.default)(authorityAddress, 'Missing authorityAddress param');
314
+ const closeAssociatedTokenAccountInstruction = (0, spl_token_1.createCloseAccountInstruction)(new web3_js_1.PublicKey(accountAddress), new web3_js_1.PublicKey(destinationAddress), new web3_js_1.PublicKey(authorityAddress));
315
+ return [closeAssociatedTokenAccountInstruction];
316
+ }
244
317
  /**
245
318
  * Construct Staking Account Authorize Solana instructions
246
319
  *
@@ -249,10 +322,10 @@ function createATAInstruction(data) {
249
322
  */
250
323
  function stakingAuthorizeInstruction(data) {
251
324
  const { params: { stakingAddress, oldAuthorizeAddress, newAuthorizeAddress, newWithdrawAddress }, } = data;
252
- assert_1.default(stakingAddress, 'Missing stakingAddress param');
253
- assert_1.default(oldAuthorizeAddress, 'Missing oldAuthorizeAddress param');
254
- assert_1.default(newAuthorizeAddress, 'Missing newAuthorizeAddress param');
255
- assert_1.default(newWithdrawAddress, 'Missing newWithdrawAddress param');
325
+ (0, assert_1.default)(stakingAddress, 'Missing stakingAddress param');
326
+ (0, assert_1.default)(oldAuthorizeAddress, 'Missing oldAuthorizeAddress param');
327
+ (0, assert_1.default)(newAuthorizeAddress, 'Missing newAuthorizeAddress param');
328
+ (0, assert_1.default)(newWithdrawAddress, 'Missing newWithdrawAddress param');
256
329
  const tx = new web3_js_1.Transaction();
257
330
  const authorizeStaking = web3_js_1.StakeProgram.authorize({
258
331
  stakePubkey: new web3_js_1.PublicKey(stakingAddress),
@@ -271,4 +344,24 @@ function stakingAuthorizeInstruction(data) {
271
344
  tx.add(authorizeWithdraw);
272
345
  return tx.instructions;
273
346
  }
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sSW5zdHJ1Y3Rpb25GYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zb2xJbnN0cnVjdGlvbkZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkNBU3lCO0FBQ3pCLG9EQUE0QjtBQUM1QixnRUFBcUM7QUFDckMsMkNBQXVFO0FBY3ZFLGlEQUFxRDtBQUNyRCxpREFBOEc7QUFFOUc7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxrQkFBcUM7SUFDekUsUUFBUSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7UUFDL0IsS0FBSyxtQ0FBdUIsQ0FBQyxZQUFZO1lBQ3ZDLE9BQU8sdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNyRCxLQUFLLG1DQUF1QixDQUFDLElBQUk7WUFDL0IsT0FBTyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxLQUFLLG1DQUF1QixDQUFDLFFBQVE7WUFDbkMsT0FBTyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pELEtBQUssbUNBQXVCLENBQUMsYUFBYTtZQUN4QyxPQUFPLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEQsS0FBSyxtQ0FBdUIsQ0FBQyxrQkFBa0I7WUFDN0MsT0FBTyw2QkFBNkIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNELEtBQUssbUNBQXVCLENBQUMsZUFBZTtZQUMxQyxPQUFPLDRCQUE0QixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUQsS0FBSyxtQ0FBdUIsQ0FBQyxpQkFBaUI7WUFDNUMsT0FBTyw0QkFBNEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFELEtBQUssbUNBQXVCLENBQUMsZUFBZTtZQUMxQyxPQUFPLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEQsS0FBSyxtQ0FBdUIsQ0FBQyw0QkFBNEI7WUFDdkQsT0FBTyxvQkFBb0IsQ0FB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QUFFLENBQUMsWUFBWSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBdXRob3JpemVkLFxuICBMb2NrdXAsXG4gIFB1YmxpY0tleSxcbiAgU3Rha2VQcm9ncmFtLFxuICBTeXN0ZW1Qcm9ncmFtLFxuICBUcmFuc2FjdGlvbkluc3RydWN0aW9uLFxuICBUcmFuc2FjdGlvbixcbiAgU3Rha2VBdXRob3JpemF0aW9uTGF5b3V0LFxufSBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMsIE1FTU9fUFJPR1JBTV9QSyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEF0YUluaXQsXG4gIEluc3RydWN0aW9uUGFyYW1zLFxuICBNZW1vLFxuICBOb25jZSxcbiAgU3Rha2luZ0FjdGl2YXRlLFxuICBTdGFraW5nQXV0aG9yaXplLFxuICBTdGFraW5nRGVhY3RpdmF0ZSxcbiAgU3Rha2luZ1dpdGhkcmF3LFxuICBUb2tlblRyYW5zZmVyLFxuICBUcmFuc2ZlcixcbiAgV2FsbGV0SW5pdCxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBjb2lucywgU29sQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNmZXJDaGVja2VkSW5zdHJ1Y3Rpb24sIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbiB9IGZyb20gJ0Bzb2xhbmEvc3BsLXRva2VuJztcblxuLyoqXG4gKiBDb25zdHJ1Y3QgU29sYW5hIGluc3RydWN0aW9ucyBmcm9tIGluc3RydWN0aW9ucyBwYXJhbXNcbiAqXG4gKiBAcGFyYW0ge0luc3RydWN0aW9uUGFyYW1zfSBpbnN0cnVjdGlvblRvQnVpbGQgLSB0aGUgZGF0YSBjb250YWluaW5nIHRoZSBpbnN0cnVjdGlvbiBwYXJhbXNcbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgc3VwcG9ydGVkIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvbEluc3RydWN0aW9uRmFjdG9yeShpbnN0cnVjdGlvblRvQnVpbGQ6IEluc3RydWN0aW9uUGFyYW1zKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgc3dpdGNoIChpbnN0cnVjdGlvblRvQnVpbGQudHlwZSkge1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlOlxuICAgICAgcmV0dXJuIGFkdmFuY2VOb25jZUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vOlxuICAgICAgcmV0dXJuIG1lbW9JbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVHJhbnNmZXI6XG4gICAgICByZXR1cm4gdHJhbnNmZXJJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVG9rZW5UcmFuc2ZlcjpcbiAgICAgIHJldHVybiB0b2tlblRyYW5zZmVySW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZU5vbmNlQWNjb3VudDpcbiAgICAgIHJldHVybiBjcmVhdGVOb25jZUFjY291bnRJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgcmV0dXJuIHN0YWtpbmdJbml0aWFsaXplSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgcmV0dXJuIHN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgIHJldHVybiBzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgIHJldHVybiBjcmVhdGVBVEFJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0F1dGhvcml6ZTpcbiAgICAgIHJldHVybiBzdGFraW5nQXV0aG9yaXplSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGluc3RydWN0aW9uIHR5cGUgb3Igbm90IHN1cHBvcnRlZGApO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0IEFkdmFuY2UgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7Tm9uY2V9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQWR2YW5jZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24oZGF0YTogTm9uY2UpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGF1dGhXYWxsZXRBZGRyZXNzLCB3YWxsZXROb25jZUFkZHJlc3MgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChhdXRoV2FsbGV0QWRkcmVzcywgJ01pc3NpbmcgYXV0aFdhbGxldEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHdhbGxldE5vbmNlQWRkcmVzcywgJ01pc3Npbmcgd2FsbGV0Tm9uY2VBZGRyZXNzIHBhcmFtJyk7XG4gIGNvbnN0IG5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLm5vbmNlQWR2YW5jZSh7XG4gICAgbm9uY2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkod2FsbGV0Tm9uY2VBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGF1dGhXYWxsZXRBZGRyZXNzKSxcbiAgfSk7XG4gIHJldHVybiBbbm9uY2VJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IE1lbW8gU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7TWVtb30gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBtZW1vSW5zdHJ1Y3Rpb24oZGF0YTogTWVtbyk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgbWVtbyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KG1lbW8sICdNaXNzaW5nIG1lbW8gcGFyYW0nKTtcbiAgY29uc3QgbWVtb0luc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oe1xuICAgIGtleXM6IFtdLFxuICAgIHByb2dyYW1JZDogbmV3IFB1YmxpY0tleShNRU1PX1BST0dSQU1fUEspLFxuICAgIGRhdGE6IEJ1ZmZlci5mcm9tKG1lbW8pLFxuICB9KTtcbiAgcmV0dXJuIFttZW1vSW5zdHJ1Y3Rpb25dO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBUcmFuc2ZlciBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtUcmFuc2Zlcn0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBUcmFuc2ZlciBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gdHJhbnNmZXJJbnN0cnVjdGlvbihkYXRhOiBUcmFuc2Zlcik6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHRvQWRkcmVzcywgYW1vdW50IH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydCh0b0FkZHJlc3MsICdNaXNzaW5nIHRvQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyB0b0FkZHJlc3MgcGFyYW0nKTtcbiAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgIGZyb21QdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIHRvUHVia2V5OiBuZXcgUHVibGljS2V5KHRvQWRkcmVzcyksXG4gICAgbGFtcG9ydHM6IHBhcnNlSW50KGFtb3VudCwgMTApLFxuICB9KTtcbiAgcmV0dXJuIFt0cmFuc2Zlckluc3RydWN0aW9uXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNmZXJ9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHRva2VuVHJhbnNmZXJJbnN0cnVjdGlvbihkYXRhOiBUb2tlblRyYW5zZmVyKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzcywgdG9BZGRyZXNzLCBhbW91bnQsIHRva2VuTmFtZSwgc291cmNlQWRkcmVzcyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyAob3duZXIpIHBhcmFtJyk7XG4gIGFzc2VydCh0b0FkZHJlc3MsICdNaXNzaW5nIHRvQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcbiAgYXNzZXJ0KHRva2VuTmFtZSwgJ01pc3NpbmcgdG9rZW4gbmFtZScpO1xuICBhc3NlcnQoc291cmNlQWRkcmVzcywgJ01pc3NpbmcgYXRhIGFkZHJlc3MnKTtcbiAgY29uc3QgdG9rZW4gPSBjb2lucy5nZXQoZGF0YS5wYXJhbXMudG9rZW5OYW1lKTtcbiAgYXNzZXJ0KHRva2VuIGluc3RhbmNlb2YgU29sQ29pbik7XG4gIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBjcmVhdGVUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbihcbiAgICBuZXcgUHVibGljS2V5KHNvdXJjZUFkZHJlc3MpLFxuICAgIG5ldyBQdWJsaWNLZXkodG9rZW4udG9rZW5BZGRyZXNzKSxcbiAgICBuZXcgUHVibGljS2V5KHRvQWRkcmVzcyksXG4gICAgbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgQmlnSW50KGFtb3VudCksXG4gICAgdG9rZW4uZGVjaW1hbFBsYWNlc1xuICApO1xuICByZXR1cm4gW3RyYW5zZmVySW5zdHJ1Y3Rpb25dO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBDcmVhdGUgYW5kIEluaXRpYWxpemUgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7V2FsbGV0SW5pdH0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBDcmVhdGUgYW5kIEluaXRpYWxpemUgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vbmNlQWNjb3VudEluc3RydWN0aW9uKGRhdGE6IFdhbGxldEluaXQpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBub25jZUFkZHJlc3MsIGF1dGhBZGRyZXNzLCBhbW91bnQgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG5vbmNlQWRkcmVzcywgJ01pc3Npbmcgbm9uY2VBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChhdXRoQWRkcmVzcywgJ01pc3NpbmcgYXV0aEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG4gIGNvbnN0IG5vbmNlQWNjb3VudEluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS5jcmVhdGVOb25jZUFjY291bnQoe1xuICAgIGZyb21QdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIG5vbmNlUHVia2V5OiBuZXcgUHVibGljS2V5KG5vbmNlQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoQWRkcmVzcyksXG4gICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICB9KTtcbiAgcmV0dXJuIG5vbmNlQWNjb3VudEluc3RydWN0aW9uLmluc3RydWN0aW9ucztcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgQ3JlYXRlIFN0YWtpbmcgQWNjb3VudCBhbmQgRGVsZWdhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ0FjdGl2YXRlfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIENyZWF0ZSBTdGFraW5nIEFjY291bnQgYW5kIERlbGVnYXRlIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gc3Rha2luZ0luaXRpYWxpemVJbnN0cnVjdGlvbihkYXRhOiBTdGFraW5nQWN0aXZhdGUpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBzdGFraW5nQWRkcmVzcywgYW1vdW50LCB2YWxpZGF0b3IgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHN0YWtpbmdBZGRyZXNzLCAnTWlzc2luZyBzdGFraW5nQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcbiAgYXNzZXJ0KHZhbGlkYXRvciwgJ01pc3NpbmcgdmFsaWRhdG9yIHBhcmFtJyk7XG5cbiAgY29uc3QgZnJvbVB1YmtleSA9IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpO1xuICBjb25zdCBzdGFrZVB1YmtleSA9IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpO1xuXG4gIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG5cbiAgY29uc3Qgd2FsbGV0SW5pdFN0YWtpbmcgPSBTdGFrZVByb2dyYW0uY3JlYXRlQWNjb3VudCh7XG4gICAgZnJvbVB1YmtleSxcbiAgICBzdGFrZVB1YmtleSxcbiAgICBhdXRob3JpemVkOiBuZXcgQXV0aG9yaXplZChmcm9tUHVia2V5LCBmcm9tUHVia2V5KSwgLy8gc3Rha2VyIGFuZCB3aXRoZHJhd2VyXG4gICAgbG9ja3VwOiBuZXcgTG9ja3VwKDAsIDAsIGZyb21QdWJrZXkpLCAvLyBMb29rdXAgc2V0cyB0aGUgbWluaW11bSBlcG9jaCB0byB3aXRoZHJhdywgYnkgZGVmYXVsdCBpcyAwLDAgd2hpY2ggbWVhbnMgdGhlcmUncyBubyBtaW5pbXVtIGxpbWl0XG4gICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICB9KTtcbiAgdHguYWRkKHdhbGxldEluaXRTdGFraW5nKTtcblxuICBjb25zdCBkZWxlZ2F0ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uZGVsZWdhdGUoe1xuICAgIHN0YWtlUHVia2V5OiBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICB2b3RlUHVia2V5OiBuZXcgUHVibGljS2V5KHZhbGlkYXRvciksXG4gIH0pO1xuICB0eC5hZGQoZGVsZWdhdGVTdGFraW5nKTtcblxuICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBzdGFraW5nIGRlYWN0aXZhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ0RlYWN0aXZhdGV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgc3Rha2luZyBkZWFjdGl2YXRlIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ0RlYWN0aXZhdGUpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBzdGFraW5nQWRkcmVzcyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHN0YWtpbmdBZGRyZXNzIHBhcmFtJyk7XG5cbiAgaWYgKGRhdGEucGFyYW1zLmFtb3VudCAmJiBkYXRhLnBhcmFtcy51bnN0YWtpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcblxuICAgIGNvbnN0IHVuc3Rha2luZ0FkZHJlc3MgPSBuZXcgUHVibGljS2V5KGRhdGEucGFyYW1zLnVuc3Rha2luZ0FkZHJlc3MpO1xuICAgIGNvbnN0IGFsbG9jYXRlQWNjb3VudCA9IFN5c3RlbVByb2dyYW0uYWxsb2NhdGUoe1xuICAgICAgYWNjb3VudFB1YmtleTogdW5zdGFraW5nQWRkcmVzcyxcbiAgICAgIHNwYWNlOiBTdGFrZVByb2dyYW0uc3BhY2UsXG4gICAgfSk7XG4gICAgdHguYWRkKGFsbG9jYXRlQWNjb3VudCk7XG5cbiAgICBjb25zdCBhc3NpZ25BY2NvdW50ID0gU3lzdGVtUHJvZ3JhbS5hc3NpZ24oe1xuICAgICAgYWNjb3VudFB1YmtleTogdW5zdGFraW5nQWRkcmVzcyxcbiAgICAgIHByb2dyYW1JZDogU3Rha2VQcm9ncmFtLnByb2dyYW1JZCxcbiAgICB9KTtcbiAgICB0eC5hZGQoYXNzaWduQWNjb3VudCk7XG5cbiAgICBjb25zdCBzcGxpdFN0YWtlID0gU3Rha2VQcm9ncmFtLnNwbGl0KHtcbiAgICAgIHN0YWtlUHVia2V5OiBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKSxcbiAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgICAgc3BsaXRTdGFrZVB1YmtleTogdW5zdGFraW5nQWRkcmVzcyxcbiAgICAgIGxhbXBvcnRzOiBuZXcgQmlnTnVtYmVyKGRhdGEucGFyYW1zLmFtb3VudCkudG9OdW1iZXIoKSxcbiAgICB9KTtcbiAgICB0eC5hZGQoc3BsaXRTdGFrZS5pbnN0cnVjdGlvbnNbMV0pO1xuXG4gICAgY29uc3QgZGVhY3RpdmF0ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uZGVhY3RpdmF0ZSh7XG4gICAgICBzdGFrZVB1YmtleTogdW5zdGFraW5nQWRkcmVzcyxcbiAgICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIH0pO1xuICAgIHR4LmFkZChkZWFjdGl2YXRlU3Rha2luZyk7XG5cbiAgICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlYWN0aXZhdGVTdGFraW5nID0gU3Rha2VQcm9ncmFtLmRlYWN0aXZhdGUoe1xuICAgICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVhY3RpdmF0ZVN0YWtpbmcuaW5zdHJ1Y3Rpb25zO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFN0YWtpbmcgV2l0aGRyYXcgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ1dpdGhkcmF3fSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIFN0YWtpbmcgV2l0aGRyYXcgIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ1dpdGhkcmF3KTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzcywgc3Rha2luZ0FkZHJlc3MsIGFtb3VudCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHN0YWtpbmdBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChhbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuXG4gIGNvbnN0IHdpdGhkcmF3U3Rha2luZyA9IFN0YWtlUHJvZ3JhbS53aXRoZHJhdyh7XG4gICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIHRvUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoZHJhd1N0YWtpbmcuaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBDcmVhdGUgYW5kIEluaXRpYWxpemUgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7V2FsbGV0SW5pdH0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBDcmVhdGUgYW5kIEluaXRpYWxpemUgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFUQUluc3RydWN0aW9uKGRhdGE6IEF0YUluaXQpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IG1pbnRBZGRyZXNzLCBhdGFBZGRyZXNzLCBvd25lckFkZHJlc3MsIHBheWVyQWRkcmVzcyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KG1pbnRBZGRyZXNzLCAnTWlzc2luZyBtaW50QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYXRhQWRkcmVzcywgJ01pc3NpbmcgYXRhQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQob3duZXJBZGRyZXNzLCAnTWlzc2luZyBvd25lckFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KHBheWVyQWRkcmVzcywgJ01pc3NpbmcgcGF5ZXJBZGRyZXNzIHBhcmFtJyk7XG5cbiAgY29uc3QgYXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uID0gY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uKFxuICAgIG5ldyBQdWJsaWNLZXkocGF5ZXJBZGRyZXNzKSxcbiAgICBuZXcgUHVibGljS2V5KGF0YUFkZHJlc3MpLFxuICAgIG5ldyBQdWJsaWNLZXkob3duZXJBZGRyZXNzKSxcbiAgICBuZXcgUHVibGljS2V5KG1pbnRBZGRyZXNzKVxuICApO1xuICByZXR1cm4gW2Fzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFN0YWtpbmcgQWNjb3VudCBBdXRob3JpemUgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ0F1dGhvcml6ZX0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBTdGFraW5nIEFjY291bnQgQXV0aG9yaXplIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBzdGFraW5nQXV0aG9yaXplSW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ0F1dGhvcml6ZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgc3Rha2luZ0FkZHJlc3MsIG9sZEF1dGhvcml6ZUFkZHJlc3MsIG5ld0F1dGhvcml6ZUFkZHJlc3MsIG5ld1dpdGhkcmF3QWRkcmVzcyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KHN0YWtpbmdBZGRyZXNzLCAnTWlzc2luZyBzdGFraW5nQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQob2xkQXV0aG9yaXplQWRkcmVzcywgJ01pc3Npbmcgb2xkQXV0aG9yaXplQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQobmV3QXV0aG9yaXplQWRkcmVzcywgJ01pc3NpbmcgbmV3QXV0aG9yaXplQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQobmV3V2l0aGRyYXdBZGRyZXNzLCAnTWlzc2luZyBuZXdXaXRoZHJhd0FkZHJlc3MgcGFyYW0nKTtcblxuICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuXG4gIGNvbnN0IGF1dGhvcml6ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uYXV0aG9yaXplKHtcbiAgICBzdGFrZVB1YmtleTogbmV3IFB1YmxpY0tleShzdGFraW5nQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShvbGRBdXRob3JpemVBZGRyZXNzKSxcbiAgICBuZXdBdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KG5ld0F1dGhvcml6ZUFkZHJlc3MpLFxuICAgIHN0YWtlQXV0aG9yaXphdGlvblR5cGU6IFN0YWtlQXV0aG9yaXphdGlvbkxheW91dC5TdGFrZXIsXG4gIH0pO1xuXG4gIGNvbnN0IGF1dGhvcml6ZVdpdGhkcmF3ID0gU3Rha2VQcm9ncmFtLmF1dGhvcml6ZSh7XG4gICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkob2xkQXV0aG9yaXplQWRkcmVzcyksXG4gICAgbmV3QXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShuZXdBdXRob3JpemVBZGRyZXNzKSxcbiAgICBzdGFrZUF1dGhvcml6YXRpb25UeXBlOiBTdGFrZUF1dGhvcml6YXRpb25MYXlvdXQuV2l0aGRyYXdlcixcbiAgICBjdXN0b2RpYW5QdWJrZXk6IG5ldyBQdWJsaWNLZXkobmV3V2l0aGRyYXdBZGRyZXNzKSxcbiAgfSk7XG4gIHR4LmFkZChhdXRob3JpemVTdGFraW5nKTtcbiAgdHguYWRkKGF1dGhvcml6ZVdpdGhkcmF3KTtcblxuICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xufVxuIl19
347
+ /**
348
+ * Construct Delegate Solana instructions
349
+ *
350
+ * @param {StakingActivate} data - the data to build the instruction
351
+ * @returns {TransactionInstruction[]} An array containing Delegate Solana instructions
352
+ */
353
+ function stakingDelegateInstruction(data) {
354
+ const { params: { fromAddress, stakingAddress, validator }, } = data;
355
+ (0, assert_1.default)(fromAddress, 'Missing fromAddress param');
356
+ (0, assert_1.default)(stakingAddress, 'Missing stakingAddress param');
357
+ (0, assert_1.default)(validator, 'Missing validator param');
358
+ const tx = new web3_js_1.Transaction();
359
+ const delegateStaking = web3_js_1.StakeProgram.delegate({
360
+ stakePubkey: new web3_js_1.PublicKey(stakingAddress),
361
+ authorizedPubkey: new web3_js_1.PublicKey(fromAddress),
362
+ votePubkey: new web3_js_1.PublicKey(validator),
363
+ });
364
+ tx.add(delegateStaking);
365
+ return tx.instructions;
366
+ }
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sSW5zdHJ1Y3Rpb25GYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zb2xJbnN0cnVjdGlvbkZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE2Q0Esc0RBK0JDO0FBNUVELGlEQUE4QztBQUM5QyxpREFLMkI7QUFDM0IsNkNBVXlCO0FBQ3pCLG9EQUE0QjtBQUM1QixnRUFBcUM7QUFDckMsMkNBQXVFO0FBaUJ2RSxtQ0FBbUQ7QUFFbkQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxrQkFBcUM7SUFDekUsUUFBUSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxLQUFLLG1DQUF1QixDQUFDLFlBQVk7WUFDdkMsT0FBTyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JELEtBQUssbUNBQXVCLENBQUMsSUFBSTtZQUMvQixPQUFPLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdDLEtBQUssbUNBQXVCLENBQUMsUUFBUTtZQUNuQyxPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakQsS0FBSyxtQ0FBdUIsQ0FBQyxhQUFhO1lBQ3hDLE9BQU8sd0JBQXdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0RCxLQUFLLG1DQUF1QixDQUFDLGtCQUFrQjtZQUM3QyxPQUFPLDZCQUE2QixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0QsS0FBSyxtQ0FBdUIsQ0FBQyxlQUFlO1lBQzFDLE9BQU8sNEJBQTRCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCxLQUFLLG1DQUF1QixDQUFDLGlCQUFpQjtZQUM1QyxPQUFPLDRCQUE0QixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUQsS0FBSyxtQ0FBdUIsQ0FBQyxlQUFlO1lBQzFDLE9BQU8sMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4RCxLQUFLLG1DQUF1QixD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QUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb2xDb2luIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5zdHJ1Y3Rpb24sXG4gIGNyZWF0ZUNsb3NlQWNjb3VudEluc3RydWN0aW9uLFxuICBjcmVhdGVUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbixcbiAgVE9LRU5fMjAyMl9QUk9HUkFNX0lELFxufSBmcm9tICdAc29sYW5hL3NwbC10b2tlbic7XG5pbXBvcnQge1xuICBBdXRob3JpemVkLFxuICBMb2NrdXAsXG4gIFB1YmxpY0tleSxcbiAgU3Rha2VBdXRob3JpemF0aW9uTGF5b3V0LFxuICBTdGFrZVByb2dyYW0sXG4gIFN5c3RlbVByb2dyYW0sXG4gIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkluc3RydWN0aW9uLFxuICBDb21wdXRlQnVkZ2V0UHJvZ3JhbSxcbn0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLCBNRU1PX1BST0dSQU1fUEsgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBdGFDbG9zZSxcbiAgQXRhSW5pdCxcbiAgSW5zdHJ1Y3Rpb25QYXJhbXMsXG4gIE1lbW8sXG4gIE5vbmNlLFxuICBTdGFraW5nQWN0aXZhdGUsXG4gIFN0YWtpbmdBdXRob3JpemUsXG4gIFN0YWtpbmdEZWFjdGl2YXRlLFxuICBTdGFraW5nRGVsZWdhdGUsXG4gIFN0YWtpbmdXaXRoZHJhdyxcbiAgVG9rZW5UcmFuc2ZlcixcbiAgVHJhbnNmZXIsXG4gIFdhbGxldEluaXQsXG4gIFNldFByaW9yaXR5RmVlLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGdldFNvbFRva2VuRnJvbVRva2VuTmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIENvbnN0cnVjdCBTb2xhbmEgaW5zdHJ1Y3Rpb25zIGZyb20gaW5zdHJ1Y3Rpb25zIHBhcmFtc1xuICpcbiAqIEBwYXJhbSB7SW5zdHJ1Y3Rpb25QYXJhbXN9IGluc3RydWN0aW9uVG9CdWlsZCAtIHRoZSBkYXRhIGNvbnRhaW5pbmcgdGhlIGluc3RydWN0aW9uIHBhcmFtc1xuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29sSW5zdHJ1Y3Rpb25GYWN0b3J5KGluc3RydWN0aW9uVG9CdWlsZDogSW5zdHJ1Y3Rpb25QYXJhbXMpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBzd2l0Y2ggKGluc3RydWN0aW9uVG9CdWlsZC50eXBlKSB7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2U6XG4gICAgICByZXR1cm4gYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW86XG4gICAgICByZXR1cm4gbWVtb0luc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5UcmFuc2ZlcjpcbiAgICAgIHJldHVybiB0cmFuc2Zlckluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ub2tlblRyYW5zZmVyOlxuICAgICAgcmV0dXJuIHRva2VuVHJhbnNmZXJJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3JlYXRlTm9uY2VBY2NvdW50OlxuICAgICAgcmV0dXJuIGNyZWF0ZU5vbmNlQWNjb3VudEluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nQWN0aXZhdGU6XG4gICAgICByZXR1cm4gc3Rha2luZ0luaXRpYWxpemVJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICByZXR1cm4gc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ1dpdGhkcmF3OlxuICAgICAgcmV0dXJuIHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgcmV0dXJuIGNyZWF0ZUFUQUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICByZXR1cm4gY2xvc2VBVEFJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0F1dGhvcml6ZTpcbiAgICAgIHJldHVybiBzdGFraW5nQXV0aG9yaXplSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkKTtcbiAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdEZWxlZ2F0ZTpcbiAgICAgIHJldHVybiBzdGFraW5nRGVsZWdhdGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU2V0UHJpb3JpdHlGZWU6XG4gICAgICByZXR1cm4gZmV0Y2hQcmlvcml0eUZlZUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnN0cnVjdGlvbiB0eXBlIG9yIG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCBBZHZhbmNlIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge05vbmNlfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIEFkdmFuY2UgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGFkdmFuY2VOb25jZUluc3RydWN0aW9uKGRhdGE6IE5vbmNlKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBhdXRoV2FsbGV0QWRkcmVzcywgd2FsbGV0Tm9uY2VBZGRyZXNzIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoYXV0aFdhbGxldEFkZHJlc3MsICdNaXNzaW5nIGF1dGhXYWxsZXRBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydCh3YWxsZXROb25jZUFkZHJlc3MsICdNaXNzaW5nIHdhbGxldE5vbmNlQWRkcmVzcyBwYXJhbScpO1xuICBjb25zdCBub25jZUluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS5ub25jZUFkdmFuY2Uoe1xuICAgIG5vbmNlUHVia2V5OiBuZXcgUHVibGljS2V5KHdhbGxldE5vbmNlQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoV2FsbGV0QWRkcmVzcyksXG4gIH0pO1xuICByZXR1cm4gW25vbmNlSW5zdHJ1Y3Rpb25dO1xufVxuXG5mdW5jdGlvbiBmZXRjaFByaW9yaXR5RmVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25Ub0J1aWxkOiBTZXRQcmlvcml0eUZlZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IGFkZFByaW9yaXR5RmVlID0gQ29tcHV0ZUJ1ZGdldFByb2dyYW0uc2V0Q29tcHV0ZVVuaXRQcmljZSh7XG4gICAgbWljcm9MYW1wb3J0czogaW5zdHJ1Y3Rpb25Ub0J1aWxkLnBhcmFtcy5mZWUsXG4gIH0pO1xuXG4gIHJldHVybiBbYWRkUHJpb3JpdHlGZWVdO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge01lbW99IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgTWVtbyBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gbWVtb0luc3RydWN0aW9uKGRhdGE6IE1lbW8pOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IG1lbW8gfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChtZW1vLCAnTWlzc2luZyBtZW1vIHBhcmFtJyk7XG4gIGNvbnN0IG1lbW9JbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICBrZXlzOiBbXSxcbiAgICBwcm9ncmFtSWQ6IG5ldyBQdWJsaWNLZXkoTUVNT19QUk9HUkFNX1BLKSxcbiAgICBkYXRhOiBCdWZmZXIuZnJvbShtZW1vKSxcbiAgfSk7XG4gIHJldHVybiBbbWVtb0luc3RydWN0aW9uXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNmZXJ9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZmVySW5zdHJ1Y3Rpb24oZGF0YTogVHJhbnNmZXIpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCB0b0FkZHJlc3MsIGFtb3VudCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQodG9BZGRyZXNzLCAnTWlzc2luZyB0b0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgdG9BZGRyZXNzIHBhcmFtJyk7XG4gIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleSh0b0FkZHJlc3MpLFxuICAgIGxhbXBvcnRzOiBwYXJzZUludChhbW91bnQsIDEwKSxcbiAgfSk7XG4gIHJldHVybiBbdHJhbnNmZXJJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zZmVyfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIFRyYW5zZmVyIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiB0b2tlblRyYW5zZmVySW5zdHJ1Y3Rpb24oZGF0YTogVG9rZW5UcmFuc2Zlcik6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHRvQWRkcmVzcywgYW1vdW50LCB0b2tlbk5hbWUsIHNvdXJjZUFkZHJlc3MgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChmcm9tQWRkcmVzcywgJ01pc3NpbmcgZnJvbUFkZHJlc3MgKG93bmVyKSBwYXJhbScpO1xuICBhc3NlcnQodG9BZGRyZXNzLCAnTWlzc2luZyB0b0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG4gIGFzc2VydCh0b2tlbk5hbWUsICdNaXNzaW5nIHRva2VuIG5hbWUnKTtcbiAgYXNzZXJ0KHNvdXJjZUFkZHJlc3MsICdNaXNzaW5nIGF0YSBhZGRyZXNzJyk7XG4gIGNvbnN0IHRva2VuID0gZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lKGRhdGEucGFyYW1zLnRva2VuTmFtZSk7XG4gIGxldCB0b2tlbkFkZHJlc3M6IHN0cmluZztcbiAgbGV0IHByb2dyYW1JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgZGVjaW1hbFBsYWNlczogbnVtYmVyO1xuICBpZiAoZGF0YS5wYXJhbXMudG9rZW5BZGRyZXNzICYmIGRhdGEucGFyYW1zLmRlY2ltYWxQbGFjZXMpIHtcbiAgICB0b2tlbkFkZHJlc3MgPSBkYXRhLnBhcmFtcy50b2tlbkFkZHJlc3M7XG4gICAgZGVjaW1hbFBsYWNlcyA9IGRhdGEucGFyYW1zLmRlY2ltYWxQbGFjZXM7XG4gICAgcHJvZ3JhbUlkID0gZGF0YS5wYXJhbXMucHJvZ3JhbUlkO1xuICB9IGVsc2UgaWYgKHRva2VuKSB7XG4gICAgYXNzZXJ0KHRva2VuIGluc3RhbmNlb2YgU29sQ29pbik7XG4gICAgdG9rZW5BZGRyZXNzID0gdG9rZW4udG9rZW5BZGRyZXNzO1xuICAgIGRlY2ltYWxQbGFjZXMgPSB0b2tlbi5kZWNpbWFsUGxhY2VzO1xuICAgIHByb2dyYW1JZCA9IHRva2VuLnByb2dyYW1JZDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdG9rZW4gbmFtZSwgZ290OicgKyBkYXRhLnBhcmFtcy50b2tlbk5hbWUpO1xuICB9XG5cbiAgbGV0IHRyYW5zZmVySW5zdHJ1Y3Rpb246IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb247XG4gIGlmIChwcm9ncmFtSWQgPT09IFRPS0VOXzIwMjJfUFJPR1JBTV9JRC50b1N0cmluZygpKSB7XG4gICAgdHJhbnNmZXJJbnN0cnVjdGlvbiA9IGNyZWF0ZVRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uKFxuICAgICAgbmV3IFB1YmxpY0tleShzb3VyY2VBZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkodG9rZW5BZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkodG9BZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgICAgQmlnSW50KGFtb3VudCksXG4gICAgICBkZWNpbWFsUGxhY2VzLFxuICAgICAgW10sXG4gICAgICBUT0tFTl8yMDIyX1BST0dSQU1fSURcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBjcmVhdGVUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbihcbiAgICAgIG5ldyBQdWJsaWNLZXkoc291cmNlQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRva2VuQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KHRvQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICAgIEJpZ0ludChhbW91bnQpLFxuICAgICAgZGVjaW1hbFBsYWNlc1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIFt0cmFuc2Zlckluc3RydWN0aW9uXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgQ3JlYXRlIGFuZCBJbml0aWFsaXplIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1dhbGxldEluaXR9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQ3JlYXRlIGFuZCBJbml0aWFsaXplIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVOb25jZUFjY291bnRJbnN0cnVjdGlvbihkYXRhOiBXYWxsZXRJbml0KTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzcywgbm9uY2VBZGRyZXNzLCBhdXRoQWRkcmVzcywgYW1vdW50IH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChub25jZUFkZHJlc3MsICdNaXNzaW5nIG5vbmNlQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYXV0aEFkZHJlc3MsICdNaXNzaW5nIGF1dGhBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChhbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuICBjb25zdCBub25jZUFjY291bnRJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0uY3JlYXRlTm9uY2VBY2NvdW50KHtcbiAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICBub25jZVB1YmtleTogbmV3IFB1YmxpY0tleShub25jZUFkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoYXV0aEFkZHJlc3MpLFxuICAgIGxhbXBvcnRzOiBuZXcgQmlnTnVtYmVyKGFtb3VudCkudG9OdW1iZXIoKSxcbiAgfSk7XG4gIHJldHVybiBub25jZUFjY291bnRJbnN0cnVjdGlvbi5pbnN0cnVjdGlvbnM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IENyZWF0ZSBTdGFraW5nIEFjY291bnQgYW5kIERlbGVnYXRlIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1N0YWtpbmdBY3RpdmF0ZX0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBDcmVhdGUgU3Rha2luZyBBY2NvdW50IGFuZCBEZWxlZ2F0ZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKi9cbmZ1bmN0aW9uIHN0YWtpbmdJbml0aWFsaXplSW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ0FjdGl2YXRlKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzcywgc3Rha2luZ0FkZHJlc3MsIGFtb3VudCwgdmFsaWRhdG9yLCBpc01hcmluYWRlIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChzdGFraW5nQWRkcmVzcywgJ01pc3Npbmcgc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG4gIGFzc2VydCh2YWxpZGF0b3IsICdNaXNzaW5nIHZhbGlkYXRvciBwYXJhbScpO1xuICBhc3NlcnQoaXNNYXJpbmFkZSAhPT0gdW5kZWZpbmVkLCAnTWlzc2luZyBpc01hcmluYWRlIHBhcmFtJyk7XG5cbiAgY29uc3QgZnJvbVB1YmtleSA9IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpO1xuICBjb25zdCBzdGFrZVB1YmtleSA9IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpO1xuICBjb25zdCB2YWxpZGF0b3JQdWJrZXkgPSBuZXcgUHVibGljS2V5KHZhbGlkYXRvcik7XG4gIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG5cbiAgY29uc3Qgc3Rha2VyUHVia2V5ID0gaXNNYXJpbmFkZSA/IHZhbGlkYXRvclB1YmtleSA6IGZyb21QdWJrZXk7XG4gIGNvbnN0IHdhbGxldEluaXRTdGFraW5nID0gU3Rha2VQcm9ncmFtLmNyZWF0ZUFjY291bnQoe1xuICAgIGZyb21QdWJrZXksXG4gICAgc3Rha2VQdWJrZXksXG4gICAgYXV0aG9yaXplZDogbmV3IEF1dGhvcml6ZWQoc3Rha2VyUHVia2V5LCBmcm9tUHVia2V5KSwgLy8gc3Rha2VyIGFuZCB3aXRoZHJhd2VyXG4gICAgbG9ja3VwOiBuZXcgTG9ja3VwKDAsIDAsIGZyb21QdWJrZXkpLCAvLyBObyBtaW5pbXVtIGVwb2NoIHRvIHdpdGhkcmF3XG4gICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoYW1vdW50KS50b051bWJlcigpLFxuICB9KTtcbiAgdHguYWRkKHdhbGxldEluaXRTdGFraW5nKTtcblxuICBpZiAoIWlzTWFyaW5hZGUpIHtcbiAgICBjb25zdCBkZWxlZ2F0ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uZGVsZWdhdGUoe1xuICAgICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICB2b3RlUHVia2V5OiBuZXcgUHVibGljS2V5KHZhbGlkYXRvciksXG4gICAgfSk7XG4gICAgdHguYWRkKGRlbGVnYXRlU3Rha2luZyk7XG4gIH1cblxuICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBzdGFraW5nIGRlYWN0aXZhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ0RlYWN0aXZhdGV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgc3Rha2luZyBkZWFjdGl2YXRlIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHN0YWtpbmdEZWFjdGl2YXRlSW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ0RlYWN0aXZhdGUpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBzdGFraW5nQWRkcmVzcywgaXNNYXJpbmFkZSwgcmVjaXBpZW50cyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBpZiAoIWlzTWFyaW5hZGUpIHtcbiAgICBhc3NlcnQoc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHN0YWtpbmdBZGRyZXNzIHBhcmFtJyk7XG4gIH1cblxuICBpZiAoaXNNYXJpbmFkZSkge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG4gICAgYXNzZXJ0KHJlY2lwaWVudHMsICdNaXNzaW5nIHJlY2lwaWVudHMgcGFyYW0nKTtcbiAgICBjb25zdCB0b1B1YmtleUFkZHJlc3MgPSBuZXcgUHVibGljS2V5KHJlY2lwaWVudHNbMF0uYWRkcmVzcyB8fCAnJyk7XG4gICAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgICB0b1B1YmtleTogdG9QdWJrZXlBZGRyZXNzLFxuICAgICAgbGFtcG9ydHM6IHBhcnNlSW50KHJlY2lwaWVudHNbMF0uYW1vdW50LCAxMCksXG4gICAgfSk7XG5cbiAgICB0eC5hZGQodHJhbnNmZXJJbnN0cnVjdGlvbik7XG4gICAgcmV0dXJuIHR4Lmluc3RydWN0aW9ucztcbiAgfVxuXG4gIGlmIChkYXRhLnBhcmFtcy5hbW91bnQgJiYgZGF0YS5wYXJhbXMudW5zdGFraW5nQWRkcmVzcykge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgdW5zdGFraW5nQWRkcmVzcyA9IG5ldyBQdWJsaWNLZXkoZGF0YS5wYXJhbXMudW5zdGFraW5nQWRkcmVzcyk7XG5cbiAgICBjb25zdCBhbGxvY2F0ZUFjY291bnQgPSBTeXN0ZW1Qcm9ncmFtLmFsbG9jYXRlKHtcbiAgICAgIGFjY291bnRQdWJrZXk6IHVuc3Rha2luZ0FkZHJlc3MsXG4gICAgICBzcGFjZTogU3Rha2VQcm9ncmFtLnNwYWNlLFxuICAgIH0pO1xuICAgIHR4LmFkZChhbGxvY2F0ZUFjY291bnQpO1xuXG4gICAgY29uc3QgYXNzaWduQWNjb3VudCA9IFN5c3RlbVByb2dyYW0uYXNzaWduKHtcbiAgICAgIGFjY291bnRQdWJrZXk6IHVuc3Rha2luZ0FkZHJlc3MsXG4gICAgICBwcm9ncmFtSWQ6IFN0YWtlUHJvZ3JhbS5wcm9ncmFtSWQsXG4gICAgfSk7XG4gICAgdHguYWRkKGFzc2lnbkFjY291bnQpO1xuXG4gICAgY29uc3Qgc3BsaXRTdGFrZSA9IFN0YWtlUHJvZ3JhbS5zcGxpdChcbiAgICAgIHtcbiAgICAgICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgICAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICAgICAgc3BsaXRTdGFrZVB1YmtleTogdW5zdGFraW5nQWRkcmVzcyxcbiAgICAgICAgbGFtcG9ydHM6IG5ldyBCaWdOdW1iZXIoZGF0YS5wYXJhbXMuYW1vdW50KS50b051bWJlcigpLFxuICAgICAgfSxcbiAgICAgIDBcbiAgICApO1xuICAgIHR4LmFkZChzcGxpdFN0YWtlLmluc3RydWN0aW9uc1sxXSk7XG5cbiAgICBjb25zdCBkZWFjdGl2YXRlU3Rha2luZyA9IFN0YWtlUHJvZ3JhbS5kZWFjdGl2YXRlKHtcbiAgICAgIHN0YWtlUHVia2V5OiB1bnN0YWtpbmdBZGRyZXNzLFxuICAgICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgfSk7XG4gICAgdHguYWRkKGRlYWN0aXZhdGVTdGFraW5nKTtcblxuICAgIHJldHVybiB0eC5pbnN0cnVjdGlvbnM7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGVhY3RpdmF0ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uZGVhY3RpdmF0ZSh7XG4gICAgICBzdGFrZVB1YmtleTogbmV3IFB1YmxpY0tleShzdGFraW5nQWRkcmVzcyksXG4gICAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkZWFjdGl2YXRlU3Rha2luZy5pbnN0cnVjdGlvbnM7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgU3Rha2luZyBXaXRoZHJhdyBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtTdGFraW5nV2l0aGRyYXd9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgU3Rha2luZyBXaXRoZHJhdyAgU29sYW5hIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbihkYXRhOiBTdGFraW5nV2l0aGRyYXcpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCBzdGFraW5nQWRkcmVzcywgYW1vdW50IH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChzdGFraW5nQWRkcmVzcywgJ01pc3Npbmcgc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG5cbiAgY29uc3Qgd2l0aGRyYXdTdGFraW5nID0gU3Rha2VQcm9ncmFtLndpdGhkcmF3KHtcbiAgICBzdGFrZVB1YmtleTogbmV3IFB1YmxpY0tleShzdGFraW5nQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgdG9QdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIGxhbXBvcnRzOiBuZXcgQmlnTnVtYmVyKGFtb3VudCkudG9OdW1iZXIoKSxcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhkcmF3U3Rha2luZy5pbnN0cnVjdGlvbnM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtXYWxsZXRJbml0fSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQVRBSW5zdHJ1Y3Rpb24oZGF0YTogQXRhSW5pdCk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgbWludEFkZHJlc3MsIGF0YUFkZHJlc3MsIG93bmVyQWRkcmVzcywgcGF5ZXJBZGRyZXNzLCBwcm9ncmFtSWQgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChtaW50QWRkcmVzcywgJ01pc3NpbmcgbWludEFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGF0YUFkZHJlc3MsICdNaXNzaW5nIGF0YUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG93bmVyQWRkcmVzcywgJ01pc3Npbmcgb3duZXJBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChwYXllckFkZHJlc3MsICdNaXNzaW5nIHBheWVyQWRkcmVzcyBwYXJhbScpO1xuXG4gIGxldCBhc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5zdHJ1Y3Rpb246IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb247XG4gIGlmIChwcm9ncmFtSWQgJiYgcHJvZ3JhbUlkID09PSBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSkge1xuICAgIGFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbiA9IGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbihcbiAgICAgIG5ldyBQdWJsaWNLZXkocGF5ZXJBZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkoYXRhQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KG93bmVyQWRkcmVzcyksXG4gICAgICBuZXcgUHVibGljS2V5KG1pbnRBZGRyZXNzKSxcbiAgICAgIFRPS0VOXzIwMjJfUFJPR1JBTV9JRFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgYXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uID0gY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudEluc3RydWN0aW9uKFxuICAgICAgbmV3IFB1YmxpY0tleShwYXllckFkZHJlc3MpLFxuICAgICAgbmV3IFB1YmxpY0tleShhdGFBZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkob3duZXJBZGRyZXNzKSxcbiAgICAgIG5ldyBQdWJsaWNLZXkobWludEFkZHJlc3MpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gW2Fzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IENsb3NlIEFUQSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtXYWxsZXRJbml0fSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIENsb3NlIEFUQSBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gY2xvc2VBVEFJbnN0cnVjdGlvbihkYXRhOiBBdGFDbG9zZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgYWNjb3VudEFkZHJlc3MsIGRlc3RpbmF0aW9uQWRkcmVzcywgYXV0aG9yaXR5QWRkcmVzcyB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGFjY291bnRBZGRyZXNzLCAnTWlzc2luZyBhY2NvdW50QWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoZGVzdGluYXRpb25BZGRyZXNzLCAnTWlzc2luZyBkZXN0aW5hdGlvbkFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGF1dGhvcml0eUFkZHJlc3MsICdNaXNzaW5nIGF1dGhvcml0eUFkZHJlc3MgcGFyYW0nKTtcblxuICBjb25zdCBjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJbnN0cnVjdGlvbiA9IGNyZWF0ZUNsb3NlQWNjb3VudEluc3RydWN0aW9uKFxuICAgIG5ldyBQdWJsaWNLZXkoYWNjb3VudEFkZHJlc3MpLFxuICAgIG5ldyBQdWJsaWNLZXkoZGVzdGluYXRpb25BZGRyZXNzKSxcbiAgICBuZXcgUHVibGljS2V5KGF1dGhvcml0eUFkZHJlc3MpXG4gICk7XG4gIHJldHVybiBbY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5zdHJ1Y3Rpb25dO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBTdGFraW5nIEFjY291bnQgQXV0aG9yaXplIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1N0YWtpbmdBdXRob3JpemV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgU3Rha2luZyBBY2NvdW50IEF1dGhvcml6ZSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gc3Rha2luZ0F1dGhvcml6ZUluc3RydWN0aW9uKGRhdGE6IFN0YWtpbmdBdXRob3JpemUpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IHN0YWtpbmdBZGRyZXNzLCBvbGRBdXRob3JpemVBZGRyZXNzLCBuZXdBdXRob3JpemVBZGRyZXNzLCBuZXdXaXRoZHJhd0FkZHJlc3MgfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChzdGFraW5nQWRkcmVzcywgJ01pc3Npbmcgc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG9sZEF1dGhvcml6ZUFkZHJlc3MsICdNaXNzaW5nIG9sZEF1dGhvcml6ZUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG5ld0F1dGhvcml6ZUFkZHJlc3MsICdNaXNzaW5nIG5ld0F1dGhvcml6ZUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KG5ld1dpdGhkcmF3QWRkcmVzcywgJ01pc3NpbmcgbmV3V2l0aGRyYXdBZGRyZXNzIHBhcmFtJyk7XG5cbiAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcblxuICBjb25zdCBhdXRob3JpemVTdGFraW5nID0gU3Rha2VQcm9ncmFtLmF1dGhvcml6ZSh7XG4gICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkob2xkQXV0aG9yaXplQWRkcmVzcyksXG4gICAgbmV3QXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShuZXdBdXRob3JpemVBZGRyZXNzKSxcbiAgICBzdGFrZUF1dGhvcml6YXRpb25UeXBlOiBTdGFrZUF1dGhvcml6YXRpb25MYXlvdXQuU3Rha2VyLFxuICB9KTtcblxuICBjb25zdCBhdXRob3JpemVXaXRoZHJhdyA9IFN0YWtlUHJvZ3JhbS5hdXRob3JpemUoe1xuICAgIHN0YWtlUHVia2V5OiBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KG9sZEF1dGhvcml6ZUFkZHJlc3MpLFxuICAgIG5ld0F1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkobmV3QXV0aG9yaXplQWRkcmVzcyksXG4gICAgc3Rha2VBdXRob3JpemF0aW9uVHlwZTogU3Rha2VBdXRob3JpemF0aW9uTGF5b3V0LldpdGhkcmF3ZXIsXG4gICAgY3VzdG9kaWFuUHVia2V5OiBuZXcgUHVibGljS2V5KG5ld1dpdGhkcmF3QWRkcmVzcyksXG4gIH0pO1xuICB0eC5hZGQoYXV0aG9yaXplU3Rha2luZyk7XG4gIHR4LmFkZChhdXRob3JpemVXaXRoZHJhdyk7XG5cbiAgcmV0dXJuIHR4Lmluc3RydWN0aW9ucztcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgRGVsZWdhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ0FjdGl2YXRlfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIERlbGVnYXRlIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gc3Rha2luZ0RlbGVnYXRlSW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ0RlbGVnYXRlKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzcywgc3Rha2luZ0FkZHJlc3MsIHZhbGlkYXRvciB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHN0YWtpbmdBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydCh2YWxpZGF0b3IsICdNaXNzaW5nIHZhbGlkYXRvciBwYXJhbScpO1xuICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICBjb25zdCBkZWxlZ2F0ZVN0YWtpbmcgPSBTdGFrZVByb2dyYW0uZGVsZWdhdGUoe1xuICAgIHN0YWtlUHVia2V5OiBuZXcgUHVibGljS2V5KHN0YWtpbmdBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICB2b3RlUHVia2V5OiBuZXcgUHVibGljS2V5KHZhbGlkYXRvciksXG4gIH0pO1xuICB0eC5hZGQoZGVsZWdhdGVTdGFraW5nKTtcblxuICByZXR1cm4gdHguaW5zdHJ1Y3Rpb25zO1xufVxuIl19