@bitgo/sdk-core 38.0.0 → 38.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 (100) hide show
  1. package/dist/src/account-lib/baseCoin/enum.d.ts +23 -22
  2. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  3. package/dist/src/account-lib/baseCoin/enum.js +27 -23
  4. package/dist/src/bitgo/defi/defiVault.d.ts +39 -9
  5. package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
  6. package/dist/src/bitgo/defi/defiVault.js +137 -8
  7. package/dist/src/bitgo/defi/iDefiVault.d.ts +24 -3
  8. package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -1
  9. package/dist/src/bitgo/defi/iDefiVault.js +1 -1
  10. package/dist/src/bitgo/enterprise/enterprise.d.ts +6 -0
  11. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
  12. package/dist/src/bitgo/enterprise/enterprise.js +9 -1
  13. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +3 -0
  14. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
  15. package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
  16. package/dist/src/bitgo/index.d.ts +1 -0
  17. package/dist/src/bitgo/index.d.ts.map +1 -1
  18. package/dist/src/bitgo/index.js +2 -1
  19. package/dist/src/bitgo/keychain/iKeychains.d.ts +12 -0
  20. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  21. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  22. package/dist/src/bitgo/keychain/keychains.d.ts +15 -3
  23. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  24. package/dist/src/bitgo/keychain/keychains.js +32 -14
  25. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
  26. package/dist/src/bitgo/pendingApproval/pendingApproval.js +1 -1
  27. package/dist/src/bitgo/safe/iSafe.d.ts +85 -0
  28. package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -0
  29. package/dist/src/bitgo/safe/iSafe.js +3 -0
  30. package/dist/src/bitgo/safe/iSafes.d.ts +86 -0
  31. package/dist/src/bitgo/safe/iSafes.d.ts.map +1 -0
  32. package/dist/src/bitgo/safe/iSafes.js +3 -0
  33. package/dist/src/bitgo/safe/index.d.ts +5 -0
  34. package/dist/src/bitgo/safe/index.d.ts.map +1 -0
  35. package/dist/src/bitgo/safe/index.js +21 -0
  36. package/dist/src/bitgo/safe/safe.d.ts +66 -0
  37. package/dist/src/bitgo/safe/safe.d.ts.map +1 -0
  38. package/dist/src/bitgo/safe/safe.js +96 -0
  39. package/dist/src/bitgo/safe/safes.d.ts +104 -0
  40. package/dist/src/bitgo/safe/safes.d.ts.map +1 -0
  41. package/dist/src/bitgo/safe/safes.js +294 -0
  42. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  43. package/dist/src/bitgo/tss/common.js +3 -1
  44. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  45. package/dist/src/bitgo/utils/mpcUtils.js +13 -6
  46. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  47. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +3 -1
  48. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +5 -2
  49. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  50. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  51. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +1 -0
  52. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  53. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +1 -1
  54. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +3 -2
  55. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  56. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +15 -14
  57. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +1 -1
  58. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -1
  59. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +6 -3
  60. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +1 -0
  61. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  62. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +1 -1
  63. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +21 -2
  64. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  65. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +108 -14
  66. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +1 -1
  67. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -1
  68. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +6 -3
  69. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
  70. package/dist/src/bitgo/utils/tss/recipientUtils.js +2 -1
  71. package/dist/src/bitgo/wallet/BuildParams.d.ts +30 -0
  72. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
  73. package/dist/src/bitgo/wallet/BuildParams.js +27 -2
  74. package/dist/src/bitgo/wallet/iWallet.d.ts +54 -0
  75. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  76. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  77. package/dist/src/bitgo/wallet/iWallets.d.ts +48 -1
  78. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  79. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  80. package/dist/src/bitgo/wallet/wallet.d.ts +24 -1
  81. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  82. package/dist/src/bitgo/wallet/wallet.js +218 -3
  83. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  84. package/dist/src/bitgo/wallet/wallets.js +3 -1
  85. package/dist/src/index.d.ts +1 -1
  86. package/dist/src/index.d.ts.map +1 -1
  87. package/dist/src/index.js +1 -1
  88. package/dist/test/unit/bitgo/defi/defiVault.js +336 -132
  89. package/dist/test/unit/bitgo/safe/safe.d.ts +2 -0
  90. package/dist/test/unit/bitgo/safe/safe.d.ts.map +1 -0
  91. package/dist/test/unit/bitgo/safe/safe.js +134 -0
  92. package/dist/test/unit/bitgo/safe/safes.d.ts +2 -0
  93. package/dist/test/unit/bitgo/safe/safes.d.ts.map +1 -0
  94. package/dist/test/unit/bitgo/safe/safes.js +297 -0
  95. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +246 -1
  96. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +2 -1
  97. package/dist/test/unit/bitgo/wallet/BuildParams.js +28 -1
  98. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +8 -1
  99. package/dist/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +4 -4
@@ -59,28 +59,29 @@ export declare enum TransactionType {
59
59
  AllocationRequest = 54,
60
60
  AllocationReject = 55,
61
61
  CantonCommand = 56,
62
- FREEZE = 57,
63
- VOTE = 58,
64
- UNFREEZE = 59,
65
- WITHDRAW_EXPIRE_UNFREEZE = 60,
66
- CLAIM_REWARDS = 61,
67
- AccountCreate = 62,
68
- stakingLock = 63,
69
- 'self-stack' = 64,
70
- staking = 65,
71
- stakingUnlock = 66,
72
- RejectInstruction = 67,
73
- ImportToC = 68,
74
- TonWhalesDeposit = 69,
75
- TonWhalesWithdrawal = 70,
76
- TonWhalesVestingDeposit = 71,
77
- TonWhalesVestingWithdrawal = 72,
78
- AccountDelete = 73,
79
- MPTokenAuthorize = 74,
80
- SendMPT = 75,
81
- DecryptionDelegation = 76,
82
- SendERC7984 = 77,
83
- FlushERC7984ForwarderToken = 78
62
+ EndInvestorOnboardingOffer = 57,
63
+ FREEZE = 58,
64
+ VOTE = 59,
65
+ UNFREEZE = 60,
66
+ WITHDRAW_EXPIRE_UNFREEZE = 61,
67
+ CLAIM_REWARDS = 62,
68
+ AccountCreate = 63,
69
+ stakingLock = 64,
70
+ 'self-stack' = 65,
71
+ staking = 66,
72
+ stakingUnlock = 67,
73
+ RejectInstruction = 68,
74
+ ImportToC = 69,
75
+ TonWhalesDeposit = 70,
76
+ TonWhalesWithdrawal = 71,
77
+ TonWhalesVestingDeposit = 72,
78
+ TonWhalesVestingWithdrawal = 73,
79
+ AccountDelete = 74,
80
+ MPTokenAuthorize = 75,
81
+ SendMPT = 76,
82
+ DecryptionDelegation = 77,
83
+ SendERC7984 = 78,
84
+ FlushERC7984ForwarderToken = 79
84
85
  }
85
86
  /**
86
87
  * Generic list of encoding formats. Can be used as arguments for methods inputs.
@@ -1 +1 @@
1
- {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../../../src/account-lib/baseCoin/enum.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,IAAA;IAEJ,UAAU,IAAA;IAEV,WAAW,IAAA;IAEX,oBAAoB,IAAA;IAEpB,qBAAqB,IAAA;IAErB,oCAAoC,IAAA;IAEpC,WAAW,IAAA;IAEX,UAAU,IAAA;IAEV,aAAa,IAAA;IAEb,aAAa,IAAA;IAEb,WAAW,KAAA;IAEX,WAAW,KAAA;IAEX,aAAa,KAAA;IAEb,eAAe,KAAA;IAEf,aAAa,KAAA;IAEb,eAAe,KAAA;IAEf,YAAY,KAAA;IAEZ,iBAAiB,KAAA;IAEjB,KAAK,KAAA;IAEL,YAAY,KAAA;IAGZ,YAAY,KAAA;IAGZ,YAAY,KAAA;IAEZ,MAAM,KAAA;IACN,MAAM,KAAA;IAEN,wBAAwB,KAAA;IAExB,UAAU,KAAA;IAEV,aAAa,KAAA;IAEb,cAAc,KAAA;IAEd,gBAAgB,KAAA;IAEhB,mBAAmB,KAAA;IAEnB,eAAe,KAAA;IAEf,QAAQ,KAAA;IACR,iBAAiB,KAAA;IACjB,0BAA0B,KAAA;IAC1B,0BAA0B,KAAA;IAE1B,2BAA2B,KAAA;IAC3B,uBAAuB,KAAA;IAEvB,SAAS,KAAA;IAET,SAAS,KAAA;IAET,OAAO,KAAA;IAEP,gBAAgB,KAAA;IAEhB,kBAAkB,KAAA;IAClB,cAAc,KAAA;IAEd,WAAW,KAAA;IAEX,YAAY,KAAA;IAEZ,kBAAkB,KAAA;IAElB,cAAc,KAAA;IAEd,mBAAmB,KAAA;IAEnB,cAAc,KAAA;IAEd,sBAAsB,KAAA;IAEtB,wBAAwB,KAAA;IAExB,sBAAsB,KAAA;IAEtB,kBAAkB,KAAA;IAElB,2BAA2B,KAAA;IAE3B,iBAAiB,KAAA;IAEjB,gBAAgB,KAAA;IAEhB,aAAa,KAAA;IAGb,MAAM,KAAA;IACN,IAAI,KAAA;IACJ,QAAQ,KAAA;IACR,wBAAwB,KAAA;IACxB,aAAa,KAAA;IAEb,aAAa,KAAA;IAGb,WAAW,KAAA;IAEX,YAAY,KAAA;IAGZ,OAAO,KAAA;IAGP,aAAa,KAAA;IAGb,iBAAiB,KAAA;IAGjB,SAAS,KAAA;IAGT,gBAAgB,KAAA;IAChB,mBAAmB,KAAA;IACnB,uBAAuB,KAAA;IACvB,0BAA0B,KAAA;IAG1B,aAAa,KAAA;IAEb,gBAAgB,KAAA;IAEhB,OAAO,KAAA;IAEP,oBAAoB,KAAA;IAEpB,WAAW,KAAA;IAGX,0BAA0B,KAAA;CAC3B;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAID,oBAAY,gBAAgB;IAE1B,SAAS,KAAK;IAEd,QAAQ,IAAI;CACb;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,oBAAY,qBAAqB;IAC/B,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,QAAQ,IAAA;CACT"}
1
+ {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../../../src/account-lib/baseCoin/enum.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,IAAA;IAEJ,UAAU,IAAA;IAEV,WAAW,IAAA;IAEX,oBAAoB,IAAA;IAEpB,qBAAqB,IAAA;IAErB,oCAAoC,IAAA;IAEpC,WAAW,IAAA;IAEX,UAAU,IAAA;IAEV,aAAa,IAAA;IAEb,aAAa,IAAA;IAEb,WAAW,KAAA;IAEX,WAAW,KAAA;IAEX,aAAa,KAAA;IAEb,eAAe,KAAA;IAEf,aAAa,KAAA;IAEb,eAAe,KAAA;IAEf,YAAY,KAAA;IAEZ,iBAAiB,KAAA;IAEjB,KAAK,KAAA;IAEL,YAAY,KAAA;IAGZ,YAAY,KAAA;IAGZ,YAAY,KAAA;IAEZ,MAAM,KAAA;IACN,MAAM,KAAA;IAEN,wBAAwB,KAAA;IAExB,UAAU,KAAA;IAEV,aAAa,KAAA;IAEb,cAAc,KAAA;IAEd,gBAAgB,KAAA;IAEhB,mBAAmB,KAAA;IAEnB,eAAe,KAAA;IAEf,QAAQ,KAAA;IACR,iBAAiB,KAAA;IACjB,0BAA0B,KAAA;IAC1B,0BAA0B,KAAA;IAE1B,2BAA2B,KAAA;IAC3B,uBAAuB,KAAA;IAEvB,SAAS,KAAA;IAET,SAAS,KAAA;IAET,OAAO,KAAA;IAEP,gBAAgB,KAAA;IAEhB,kBAAkB,KAAA;IAClB,cAAc,KAAA;IAEd,WAAW,KAAA;IAEX,YAAY,KAAA;IAEZ,kBAAkB,KAAA;IAElB,cAAc,KAAA;IAEd,mBAAmB,KAAA;IAEnB,cAAc,KAAA;IAEd,sBAAsB,KAAA;IAEtB,wBAAwB,KAAA;IAExB,sBAAsB,KAAA;IAEtB,kBAAkB,KAAA;IAElB,2BAA2B,KAAA;IAE3B,iBAAiB,KAAA;IAEjB,gBAAgB,KAAA;IAEhB,aAAa,KAAA;IAIb,0BAA0B,KAAA;IAG1B,MAAM,KAAA;IACN,IAAI,KAAA;IACJ,QAAQ,KAAA;IACR,wBAAwB,KAAA;IACxB,aAAa,KAAA;IAEb,aAAa,KAAA;IAGb,WAAW,KAAA;IAEX,YAAY,KAAA;IAGZ,OAAO,KAAA;IAGP,aAAa,KAAA;IAGb,iBAAiB,KAAA;IAGjB,SAAS,KAAA;IAGT,gBAAgB,KAAA;IAChB,mBAAmB,KAAA;IACnB,uBAAuB,KAAA;IACvB,0BAA0B,KAAA;IAG1B,aAAa,KAAA;IAEb,gBAAgB,KAAA;IAEhB,OAAO,KAAA;IAEP,oBAAoB,KAAA;IAEpB,WAAW,KAAA;IAGX,0BAA0B,KAAA;CAC3B;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAID,oBAAY,gBAAgB;IAE1B,SAAS,KAAK;IAEd,QAAQ,IAAI;CACb;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,oBAAY,qBAAqB;IAC/B,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,QAAQ,IAAA;CACT"}
@@ -115,44 +115,48 @@ var TransactionType;
115
115
  TransactionType[TransactionType["AllocationReject"] = 55] = "AllocationReject";
116
116
  // canton generic DAML command
117
117
  TransactionType[TransactionType["CantonCommand"] = 56] = "CantonCommand";
118
+ // canton end investor onboarding offer (internal/dummy txRequest recording an on-chain
119
+ // EndInvestorOnboardingOffer contract on the end investor's wallet so they can accept or reject.
120
+ // Never signed or submitted — built locally without an IMS call.)
121
+ TransactionType[TransactionType["EndInvestorOnboardingOffer"] = 57] = "EndInvestorOnboardingOffer";
118
122
  // trx
119
- TransactionType[TransactionType["FREEZE"] = 57] = "FREEZE";
120
- TransactionType[TransactionType["VOTE"] = 58] = "VOTE";
121
- TransactionType[TransactionType["UNFREEZE"] = 59] = "UNFREEZE";
122
- TransactionType[TransactionType["WITHDRAW_EXPIRE_UNFREEZE"] = 60] = "WITHDRAW_EXPIRE_UNFREEZE";
123
- TransactionType[TransactionType["CLAIM_REWARDS"] = 61] = "CLAIM_REWARDS";
123
+ TransactionType[TransactionType["FREEZE"] = 58] = "FREEZE";
124
+ TransactionType[TransactionType["VOTE"] = 59] = "VOTE";
125
+ TransactionType[TransactionType["UNFREEZE"] = 60] = "UNFREEZE";
126
+ TransactionType[TransactionType["WITHDRAW_EXPIRE_UNFREEZE"] = 61] = "WITHDRAW_EXPIRE_UNFREEZE";
127
+ TransactionType[TransactionType["CLAIM_REWARDS"] = 62] = "CLAIM_REWARDS";
124
128
  // Create an account on-chain (e.g. TRX AccountCreateContract)
125
- TransactionType[TransactionType["AccountCreate"] = 62] = "AccountCreate";
129
+ TransactionType[TransactionType["AccountCreate"] = 63] = "AccountCreate";
126
130
  // cspr and stx
127
- TransactionType[TransactionType["stakingLock"] = 63] = "stakingLock";
131
+ TransactionType[TransactionType["stakingLock"] = 64] = "stakingLock";
128
132
  // stx
129
- TransactionType[TransactionType["self-stack"] = 64] = "self-stack";
133
+ TransactionType[TransactionType["self-stack"] = 65] = "self-stack";
130
134
  // btc,
131
- TransactionType[TransactionType["staking"] = 65] = "staking";
135
+ TransactionType[TransactionType["staking"] = 66] = "staking";
132
136
  // cspr
133
- TransactionType[TransactionType["stakingUnlock"] = 66] = "stakingUnlock";
137
+ TransactionType[TransactionType["stakingUnlock"] = 67] = "stakingUnlock";
134
138
  // polyx
135
- TransactionType[TransactionType["RejectInstruction"] = 67] = "RejectInstruction";
139
+ TransactionType[TransactionType["RejectInstruction"] = 68] = "RejectInstruction";
136
140
  // flrp
137
- TransactionType[TransactionType["ImportToC"] = 68] = "ImportToC";
141
+ TransactionType[TransactionType["ImportToC"] = 69] = "ImportToC";
138
142
  // ton whales
139
- TransactionType[TransactionType["TonWhalesDeposit"] = 69] = "TonWhalesDeposit";
140
- TransactionType[TransactionType["TonWhalesWithdrawal"] = 70] = "TonWhalesWithdrawal";
141
- TransactionType[TransactionType["TonWhalesVestingDeposit"] = 71] = "TonWhalesVestingDeposit";
142
- TransactionType[TransactionType["TonWhalesVestingWithdrawal"] = 72] = "TonWhalesVestingWithdrawal";
143
+ TransactionType[TransactionType["TonWhalesDeposit"] = 70] = "TonWhalesDeposit";
144
+ TransactionType[TransactionType["TonWhalesWithdrawal"] = 71] = "TonWhalesWithdrawal";
145
+ TransactionType[TransactionType["TonWhalesVestingDeposit"] = 72] = "TonWhalesVestingDeposit";
146
+ TransactionType[TransactionType["TonWhalesVestingWithdrawal"] = 73] = "TonWhalesVestingWithdrawal";
143
147
  // xrp — delete an account and recover the full balance including reserve
144
- TransactionType[TransactionType["AccountDelete"] = 73] = "AccountDelete";
148
+ TransactionType[TransactionType["AccountDelete"] = 74] = "AccountDelete";
145
149
  // xrp — opt-in to receive a Multi-Purpose Token (MPTokenAuthorize)
146
- TransactionType[TransactionType["MPTokenAuthorize"] = 74] = "MPTokenAuthorize";
150
+ TransactionType[TransactionType["MPTokenAuthorize"] = 75] = "MPTokenAuthorize";
147
151
  // xrp — send a Multi-Purpose Token via Payment with MPT Amount object
148
- TransactionType[TransactionType["SendMPT"] = 75] = "SendMPT";
152
+ TransactionType[TransactionType["SendMPT"] = 76] = "SendMPT";
149
153
  // Delegate decryption access for Zama ERC-7984 confidential tokens via ACL contract
150
- TransactionType[TransactionType["DecryptionDelegation"] = 76] = "DecryptionDelegation";
154
+ TransactionType[TransactionType["DecryptionDelegation"] = 77] = "DecryptionDelegation";
151
155
  // Send ERC-7984 confidential tokens via encrypted transfer
152
- TransactionType[TransactionType["SendERC7984"] = 77] = "SendERC7984";
156
+ TransactionType[TransactionType["SendERC7984"] = 78] = "SendERC7984";
153
157
  // Flush ERC-7984 confidential tokens from a forwarder address to the parent wallet
154
158
  // via forwarder.callFromParent(tokenAddr, 0, confidentialTransfer(parentAddr, handle))
155
- TransactionType[TransactionType["FlushERC7984ForwarderToken"] = 78] = "FlushERC7984ForwarderToken";
159
+ TransactionType[TransactionType["FlushERC7984ForwarderToken"] = 79] = "FlushERC7984ForwarderToken";
156
160
  })(TransactionType || (exports.TransactionType = TransactionType = {}));
157
161
  /**
158
162
  * Generic list of encoding formats. Can be used as arguments for methods inputs.
@@ -182,4 +186,4 @@ var StakingOperationTypes;
182
186
  StakingOperationTypes[StakingOperationTypes["UNLOCK"] = 4] = "UNLOCK";
183
187
  StakingOperationTypes[StakingOperationTypes["WITHDRAW"] = 5] = "WITHDRAW";
184
188
  })(StakingOperationTypes || (exports.StakingOperationTypes = StakingOperationTypes = {}));
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hY2NvdW50LWxpYi9iYXNlQ29pbi9lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsSUFBWSxlQTRKWDtBQTVKRCxXQUFZLGVBQWU7SUFDekIscURBQUksQ0FBQTtJQUNKLCtCQUErQjtJQUMvQixpRUFBVSxDQUFBO0lBQ1YsZ0NBQWdDO0lBQ2hDLG1FQUFXLENBQUE7SUFDWCxvRUFBb0U7SUFDcEUscUZBQW9CLENBQUE7SUFDcEIscUVBQXFFO0lBQ3JFLHVGQUFxQixDQUFBO0lBQ3JCLDBDQUEwQztJQUMxQyxxSEFBb0MsQ0FBQTtJQUNwQyw0REFBNEQ7SUFDNUQsbUVBQVcsQ0FBQTtJQUNYLHdFQUF3RTtJQUN4RSxpRUFBVSxDQUFBO0lBQ1Ysb0NBQW9DO0lBQ3BDLHVFQUFhLENBQUE7SUFDYiw4RUFBOEU7SUFDOUUsdUVBQWEsQ0FBQTtJQUNiLE9BQU87SUFDUCxvRUFBVyxDQUFBO0lBQ1gsT0FBTztJQUNQLG9FQUFXLENBQUE7SUFDWCxTQUFTO0lBQ1Qsd0VBQWEsQ0FBQTtJQUNiLFdBQVc7SUFDWCw0RUFBZSxDQUFBO0lBQ2YsU0FBUztJQUNULHdFQUFhLENBQUE7SUFDYixXQUFXO0lBQ1gsNEVBQWUsQ0FBQTtJQUNmLDhCQUE4QjtJQUM5QixzRUFBWSxDQUFBO0lBQ1osYUFBYTtJQUNiLGdGQUFpQixDQUFBO0lBQ2pCLG1FQUFtRTtJQUNuRSx3REFBSyxDQUFBO0lBQ0wsNEJBQTRCO0lBQzVCLHNFQUFZLENBQUE7SUFDWiwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLHNFQUFZLENBQUE7SUFDWiwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLHNFQUFZLENBQUE7SUFDWix5Q0FBeUM7SUFDekMsMERBQU0sQ0FBQTtJQUNOLDBEQUFNLENBQUE7SUFDTiwyQ0FBMkM7SUFDM0MsOEZBQXdCLENBQUE7SUFDeEIsY0FBYztJQUNkLGtFQUFVLENBQUE7SUFDViw0QkFBNEI7SUFDNUIsd0VBQWEsQ0FBQTtJQUNiLDZCQUE2QjtJQUM3QiwwRUFBYyxDQUFBO0lBQ2QsK0JBQStCO0lBQy9CLDhFQUFnQixDQUFBO0lBQ2hCLGdEQUFnRDtJQUNoRCxvRkFBbUIsQ0FBQTtJQUNuQixXQUFXO0lBQ1gsNEVBQWUsQ0FBQTtJQUNmLGdDQUFnQztJQUNoQyw4REFBUSxDQUFBO0lBQ1IsZ0ZBQWlCLENBQUE7SUFDakIsa0dBQTBCLENBQUE7SUFDMUIsa0dBQTBCLENBQUE7SUFDMUIsaURBQWlEO0lBQ2pELG9HQUEyQixDQUFBO0lBQzNCLDRGQUF1QixDQUFBO0lBQ3ZCLGdDQUFnQztJQUNoQyxnRUFBUyxDQUFBO0lBQ1QsNkRBQTZEO0lBQzdELGdFQUFTLENBQUE7SUFDVCwwQ0FBMEM7SUFDMUMsNERBQU8sQ0FBQTtJQUNQLCtCQUErQjtJQUMvQiw4RUFBZ0IsQ0FBQTtJQUNoQixrQ0FBa0M7SUFDbEMsa0ZBQWtCLENBQUE7SUFDbEIsMEVBQWMsQ0FBQTtJQUNkLDZEQUE2RDtJQUM3RCxvRUFBVyxDQUFBO0lBQ1gsZ0VBQWdFO0lBQ2hFLHNFQUFZLENBQUE7SUFDWix3Q0FBd0M7SUFDeEMsa0ZBQWtCLENBQUE7SUFDbEIsaUNBQWlDO0lBQ2pDLDBFQUFjLENBQUE7SUFDZCxrQ0FBa0M7SUFDbEMsb0ZBQW1CLENBQUE7SUFDbkIsaUNBQWlDO0lBQ2pDLDBFQUFjLENBQUE7SUFDZCwwQ0FBMEM7SUFDMUMsMEZBQXNCLENBQUE7SUFDdEIsb0NBQW9DO0lBQ3BDLDhGQUF3QixDQUFBO0lBQ3hCLGtDQUFrQztJQUNsQywwRkFBc0IsQ0FBQTtJQUN0Qiw2QkFBNkI7SUFDN0Isa0ZBQWtCLENBQUE7SUFDbEIsdUNBQXVDO0lBQ3ZDLG9HQUEyQixDQUFBO0lBQzNCLDJHQUEyRztJQUMzRyxnRkFBaUIsQ0FBQTtJQUNqQiwyQkFBMkI7SUFDM0IsOEVBQWdCLENBQUE7SUFDaEIsOEJBQThCO0lBQzlCLHdFQUFhLENBQUE7SUFFYixNQUFNO0lBQ04sMERBQU0sQ0FBQTtJQUNOLHNEQUFJLENBQUE7SUFDSiw4REFBUSxDQUFBO0lBQ1IsOEZBQXdCLENBQUE7SUFDeEIsd0VBQWEsQ0FBQTtJQUNiLDhEQUE4RDtJQUM5RCx3RUFBYSxDQUFBO0lBRWIsZUFBZTtJQUNmLG9FQUFXLENBQUE7SUFDWCxNQUFNO0lBQ04sa0VBQVksQ0FBQTtJQUVaLE9BQU87SUFDUCw0REFBTyxDQUFBO0lBRVAsT0FBTztJQUNQLHdFQUFhLENBQUE7SUFFYixRQUFRO0lBQ1IsZ0ZBQWlCLENBQUE7SUFFakIsT0FBTztJQUNQLGdFQUFTLENBQUE7SUFFVCxhQUFhO0lBQ2IsOEVBQWdCLENBQUE7SUFDaEIsb0ZBQW1CLENBQUE7SUFDbkIsNEZBQXVCLENBQUE7SUFDdkIsa0dBQTBCLENBQUE7SUFFMUIseUVBQXlFO0lBQ3pFLHdFQUFhLENBQUE7SUFDYixtRUFBbUU7SUFDbkUsOEVBQWdCLENBQUE7SUFDaEIsc0VBQXNFO0lBQ3RFLDREQUFPLENBQUE7SUFDUCxvRkFBb0Y7SUFDcEYsc0ZBQW9CLENBQUE7SUFDcEIsMkRBQTJEO0lBQzNELG9FQUFXLENBQUE7SUFDWCxtRkFBbUY7SUFDbkYsdUZBQXVGO0lBQ3ZGLGtHQUEwQixDQUFBO0FBQzVCLENBQUMsRUE1SlcsZUFBZSwrQkFBZixlQUFlLFFBNEoxQjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxhQUtYO0FBTEQsV0FBWSxhQUFhO0lBQ3ZCLDRCQUFXLENBQUE7SUFDWCxrQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBbUIsQ0FBQTtJQUNuQixvQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsYUFBYSw2QkFBYixhQUFhLFFBS3hCO0FBRUQseURBQXlEO0FBQ3pELHVEQUF1RDtBQUN2RCxJQUFZLGdCQUtYO0FBTEQsV0FBWSxnQkFBZ0I7SUFDMUIsbURBQW1EO0lBQ25ELGtFQUFjLENBQUE7SUFDZCx3Q0FBd0M7SUFDeEMsK0RBQVksQ0FBQTtBQUNkLENBQUMsRUFMVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQUszQjtBQUlELElBQVkscUJBT1g7QUFQRCxXQUFZLHFCQUFxQjtJQUMvQixpRUFBSSxDQUFBO0lBQ0osaUVBQUksQ0FBQTtJQUNKLHFFQUFNLENBQUE7SUFDTix5RUFBUSxDQUFBO0lBQ1IscUVBQU0sQ0FBQTtJQUNOLHlFQUFRLENBQUE7QUFDVixDQUFDLEVBUFcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFPaEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVybmFsIG1ldGFkYXRhLiBEZWZpbmVzIHRoZSB0eXBlIG9mIHRyYW5zYWN0aW9uLlxuICovXG5leHBvcnQgZW51bSBUcmFuc2FjdGlvblR5cGUge1xuICBTZW5kLFxuICAvLyBTZW5kIEVSQzcyMSBjb21wbGlhbnQgdG9rZW5zXG4gIFNlbmRFUkM3MjEsXG4gIC8vIFNlbmQgRVJDMTE1NSBjb21wbGlhbnQgdG9rZW5zXG4gIFNlbmRFUkMxMTU1LFxuICAvLyBJbml0aWFsaXplIGEgd2FsbGV0IG9uLWNoYWluIChlLmcuIE11bHRpLXNpZyBjb250cmFjdCBkZXBsb3ltZW50KVxuICBXYWxsZXRJbml0aWFsaXphdGlvbixcbiAgLy8gSW5pdGlhbGl6ZSBhbiBhZGRyZXNzIG9uLWNoYWluKGUuZy4gRm9yd2FyZGVyIGNvbnRyYWN0IGRlcGxveW1lbnQpXG4gIEFkZHJlc3NJbml0aWFsaXphdGlvbixcbiAgLy8gSW5pdGlhbGl6ZWQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50XG4gIEFzc29jaWF0ZWRUb2tlbkFjY291bnRJbml0aWFsaXphdGlvbixcbiAgLy8gRmx1c2ggdG9rZW5zIGZyb20gYSBmb3J3YXJkZXIgYWRkcmVzcyB0byBpdHMgYmFzZSBhZGRyZXNzXG4gIEZsdXNoVG9rZW5zLFxuICAvLyBGbHVzaCBuYXRpdmUgY29pbnMgKGVnLiBFVEgpIGZyb20gYSBmb3J3YXJkZXIgYWRkcmVzcyB0byBiYXNlIGFkZHJlc3NcbiAgRmx1c2hDb2lucyxcbiAgLy8gU2VuZCBhIHJhdyBzaW5nbGUtc2lnIHRyYW5zYWN0aW9uXG4gIFNpbmdsZVNpZ1NlbmQsXG4gIC8vIFVwZGF0ZSBhbiBhY2NvdW50IG9uLWNoYWluIChlLmcuIFB1YmxpYyBrZXkgcmV2ZWxhdGlvbiBvcGVyYXRpb24gZm9yIFRlem9zKVxuICBBY2NvdW50VXBkYXRlLFxuICAvLyBMb2NrXG4gIFN0YWtpbmdMb2NrLFxuICAvLyBWb3RlXG4gIFN0YWtpbmdWb3RlLFxuICAvLyBVbnZvdGVcbiAgU3Rha2luZ1Vudm90ZSxcbiAgLy8gQWN0aXZhdGVcbiAgU3Rha2luZ0FjdGl2YXRlLFxuICAvLyBVbmxvY2tcbiAgU3Rha2luZ1VubG9jayxcbiAgLy8gV2l0aGRyYXdcbiAgU3Rha2luZ1dpdGhkcmF3LFxuICAvLyBIYW5kbGUgc21hcnQgY29udHJhY3QgY2FsbHNcbiAgQ29udHJhY3RDYWxsLFxuICAvLyBEZWFjdGl2YXRlXG4gIFN0YWtpbmdEZWFjdGl2YXRlLFxuICAvLyBCYXRjaCBvZiBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgYnJvYWRjYXN0IGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4gIEJhdGNoLFxuICAvLyBDbGFpbSB0aGUgc3Rha2luZyByZXdhcmRzXG4gIFN0YWtpbmdDbGFpbSxcbiAgLy8gQWRkIGRlbGVnYXRvciB0byBwLWNoYWluXG4gIC8vIEBkZXByZWNhdGVkXG4gIEFkZERlbGVnYXRvcixcbiAgLy8gQWRkIHZhbGlkYXRvciB0byBwLWNoYWluXG4gIC8vIEBkZXByZWNhdGVkXG4gIEFkZFZhbGlkYXRvcixcbiAgLy8gQ3Jvc3MgY2hhaW4gdHJhbnNmZXIgYXQgQXZheCBhbmQgZmxhcmVcbiAgRXhwb3J0LFxuICBJbXBvcnQsXG4gIC8vIENyb3NzIGNoYWluIFJlY292ZXJ5IGZvciBldm0gbGlrZSBjaGFpbnNcbiAgUmVjb3ZlcnlXYWxsZXREZXBsb3ltZW50LFxuICAvLyBBZGQgc3Rha2luZ1xuICBTdGFraW5nQWRkLFxuICAvLyBTdGFraW5nIHBsZWRnZSAoZS5nLiBBREEpXG4gIFN0YWtpbmdQbGVkZ2UsXG4gIC8vIERlbGVnYXRpbmcgdm90ZSAoZS5nLiBBREEpXG4gIFZvdGVEZWxlZ2F0aW9uLFxuICAvLyBTdGFraW5nIEF1dGhvcml6ZSAoZS5nLiBTT0wpXG4gIFN0YWtpbmdBdXRob3JpemUsXG4gIC8vIFN0YWtpbmcgQXV0aG9yaXplIGZyb20gcmF3IG1lc3NhZ2UgKGUuZy4gU09MKVxuICBTdGFraW5nQXV0aG9yaXplUmF3LFxuICAvLyBEZWxlZ2F0ZVxuICBTdGFraW5nRGVsZWdhdGUsXG4gIC8vIEN1c3RvbSB0cmFuc2FjdGlvbiAoZS5nLiBTVUkpXG4gIEN1c3RvbVR4LFxuICBTdGFraW5nUmVkZWxlZ2F0ZSxcbiAgQWRkUGVybWlzc2lvbmxlc3NEZWxlZ2F0b3IsXG4gIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yLFxuICAvLyBDbG9zaW5nIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCAoZS5nLiBTT0wpXG4gIENsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCxcbiAgU2luZ2xlTm9taW5hdG9yV2l0aGRyYXcsXG4gIC8vIFNlbmQgVG9rZW5zIChlLmcgWFJQTCB0b2tlbnMpXG4gIFNlbmRUb2tlbixcbiAgLy8gU2V0dXAgYSB0cnVzdGxpbmUgd2l0aCBpc3N1ZXIgb2YgYSB0b2tlbiAoZWcuIFhSUEwgdG9rZW5zKVxuICBUcnVzdExpbmUsXG4gIC8vIFNlbmQgTm9uIEZ1bmdpYmxlIFRva2VuIChlLmcuIEFQVCBORlRzKVxuICBTZW5kTkZULFxuICAvLyBEZWxlZ2F0ZSByZXNvdXJjZSAoZS5nLiBUUlgpXG4gIERlbGVnYXRlUmVzb3VyY2UsXG4gIC8vIFVuLWRlbGVnYXRlIHJlc291cmNlIChlLmcuIFRSWClcbiAgVW5EZWxlZ2F0ZVJlc291cmNlLFxuICBTdG9yYWdlRGVwb3NpdCxcbiAgLy8gRmx1c2ggRVJDNzIxIE5GVHMgZnJvbSBhIGZvcndhcmRlciBhZGRyZXNzIHRvIGJhc2UgYWRkcmVzc1xuICBGbHVzaEVSQzcyMSxcbiAgLy8gRmx1c2ggRVJDMTE1NSB0b2tlbnMgZnJvbSBhIGZvcndhcmRlciBhZGRyZXNzIHRvIGJhc2UgYWRkcmVzc1xuICBGbHVzaEVSQzExNTUsXG4gIC8vIFNldCB1cCAxLXN0ZXAgcHJlLWFwcHJvdmFsIGZvciBjYW50b25cbiAgT25lU3RlcFByZUFwcHJvdmFsLFxuICAvLyBjYW50b24gdHJhbnNmZXIgYWNjZXB0LCAyLXN0ZXBcbiAgVHJhbnNmZXJBY2NlcHQsXG4gIC8vIGNhbnRvbiB0cmFuc2ZlciBhY2tub3dsZWRnZW1lbnRcbiAgVHJhbnNmZXJBY2tub3dsZWRnZSxcbiAgLy8gY2FudG9uIHRyYW5zZmVyIHJlamVjdCwgMi1zdGVwXG4gIFRyYW5zZmVyUmVqZWN0LFxuICAvLyBjYW50b24gdHJhbnNmZXIgb2ZmZXIgd2l0aGRyYXduLCAyLXN0ZXBcbiAgVHJhbnNmZXJPZmZlcldpdGhkcmF3bixcbiAgLy8gY2FudG9uIGNvc2lnbiBkZWxlZ2F0aW9uIHByb3Bvc2FsXG4gIENvc2lnbkRlbGVnYXRpb25Qcm9wb3NhbCxcbiAgLy8gY2FudG9uIGNvc2lnbiBkZWxlZ2F0aW9uIGFjY2VwdFxuICBDb3NpZ25EZWxlZ2F0aW9uQWNjZXB0LFxuICAvLyBjYW50b24gYWxsb2NhdGlvbiBhbGxvY2F0ZVxuICBBbGxvY2F0aW9uQWxsb2NhdGUsXG4gIC8vIGNhbnRvbiBhbGxvY2F0aW9uIGFsbG9jYXRlIHdpdGhkcmF3blxuICBBbGxvY2F0aW9uQWxsb2NhdGVXaXRoZHJhd24sXG4gIC8vIGNhbnRvbiBhbGxvY2F0aW9uIHJlcXVlc3QgKGludGVybmFsL2R1bW15IHR4UmVxdWVzdCBzdXJmYWNpbmcgRHZQIHRyYWRlIGRldGFpbHMgdG8gdGhlIGFsbG9jYXRpbmcgcGFydHkpXG4gIEFsbG9jYXRpb25SZXF1ZXN0LFxuICAvLyBjYW50b24gYWxsb2NhdGlvbiByZWplY3RcbiAgQWxsb2NhdGlvblJlamVjdCxcbiAgLy8gY2FudG9uIGdlbmVyaWMgREFNTCBjb21tYW5kXG4gIENhbnRvbkNvbW1hbmQsXG5cbiAgLy8gdHJ4XG4gIEZSRUVaRSxcbiAgVk9URSxcbiAgVU5GUkVFWkUsXG4gIFdJVEhEUkFXX0VYUElSRV9VTkZSRUVaRSxcbiAgQ0xBSU1fUkVXQVJEUyxcbiAgLy8gQ3JlYXRlIGFuIGFjY291bnQgb24tY2hhaW4gKGUuZy4gVFJYIEFjY291bnRDcmVhdGVDb250cmFjdClcbiAgQWNjb3VudENyZWF0ZSxcblxuICAvLyBjc3ByIGFuZCBzdHhcbiAgc3Rha2luZ0xvY2ssXG4gIC8vIHN0eFxuICAnc2VsZi1zdGFjaycsXG5cbiAgLy8gYnRjLFxuICBzdGFraW5nLFxuXG4gIC8vIGNzcHJcbiAgc3Rha2luZ1VubG9jayxcblxuICAvLyBwb2x5eFxuICBSZWplY3RJbnN0cnVjdGlvbixcblxuICAvLyBmbHJwXG4gIEltcG9ydFRvQyxcblxuICAvLyB0b24gd2hhbGVzXG4gIFRvbldoYWxlc0RlcG9zaXQsXG4gIFRvbldoYWxlc1dpdGhkcmF3YWwsXG4gIFRvbldoYWxlc1Zlc3RpbmdEZXBvc2l0LFxuICBUb25XaGFsZXNWZXN0aW5nV2l0aGRyYXdhbCxcblxuICAvLyB4cnAg4oCUIGRlbGV0ZSBhbiBhY2NvdW50IGFuZCByZWNvdmVyIHRoZSBmdWxsIGJhbGFuY2UgaW5jbHVkaW5nIHJlc2VydmVcbiAgQWNjb3VudERlbGV0ZSxcbiAgLy8geHJwIOKAlCBvcHQtaW4gdG8gcmVjZWl2ZSBhIE11bHRpLVB1cnBvc2UgVG9rZW4gKE1QVG9rZW5BdXRob3JpemUpXG4gIE1QVG9rZW5BdXRob3JpemUsXG4gIC8vIHhycCDigJQgc2VuZCBhIE11bHRpLVB1cnBvc2UgVG9rZW4gdmlhIFBheW1lbnQgd2l0aCBNUFQgQW1vdW50IG9iamVjdFxuICBTZW5kTVBULFxuICAvLyBEZWxlZ2F0ZSBkZWNyeXB0aW9uIGFjY2VzcyBmb3IgWmFtYSBFUkMtNzk4NCBjb25maWRlbnRpYWwgdG9rZW5zIHZpYSBBQ0wgY29udHJhY3RcbiAgRGVjcnlwdGlvbkRlbGVnYXRpb24sXG4gIC8vIFNlbmQgRVJDLTc5ODQgY29uZmlkZW50aWFsIHRva2VucyB2aWEgZW5jcnlwdGVkIHRyYW5zZmVyXG4gIFNlbmRFUkM3OTg0LFxuICAvLyBGbHVzaCBFUkMtNzk4NCBjb25maWRlbnRpYWwgdG9rZW5zIGZyb20gYSBmb3J3YXJkZXIgYWRkcmVzcyB0byB0aGUgcGFyZW50IHdhbGxldFxuICAvLyB2aWEgZm9yd2FyZGVyLmNhbGxGcm9tUGFyZW50KHRva2VuQWRkciwgMCwgY29uZmlkZW50aWFsVHJhbnNmZXIocGFyZW50QWRkciwgaGFuZGxlKSlcbiAgRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4sXG59XG5cbi8qKlxuICogR2VuZXJpYyBsaXN0IG9mIGVuY29kaW5nIGZvcm1hdHMuIENhbiBiZSB1c2VkIGFzIGFyZ3VtZW50cyBmb3IgbWV0aG9kcyBpbnB1dHMuXG4gKi9cbmV4cG9ydCBlbnVtIEFkZHJlc3NGb3JtYXQge1xuICBoZXggPSAnaGV4JyxcbiAgYmFzZTU4ID0gJ2Jhc2U1OCcsXG4gIG1haW5uZXQgPSAnbWFpbm5ldCcsXG4gIHRlc3RuZXQgPSAndGVzdG5ldCcsXG59XG5cbi8vIFRPRE8oKTogY3JlYXRlIHVuaW9uIHR5cGUgb2YgYWxsIGFkZHJlc3MgZm9ybWF0cyBlbnVtc1xuLy8gbGlzdCBvZiBzczU4IGZvcm1hdCBlbmNvZGluZyB0eXBlcyBmb3IgRG90IGVjb3N5c3RlbVxuZXhwb3J0IGVudW0gRG90QWRkcmVzc0Zvcm1hdCB7XG4gIC8vIGZvcm1hdCBmb3Igd2VzdGVuZCAoZ2VuZXJpYyBzdWJzdHJhdGUpIGFkZHJlc3Nlc1xuICBzdWJzdHJhdGUgPSA0MixcbiAgLy8gZm9ybWF0IGZvciBwb2xrYWRvdCBtYWlubmV0IGFkZHJlc3Nlc1xuICBwb2xrYWRvdCA9IDAsXG59XG5cbmV4cG9ydCB0eXBlIERvdEFzc2V0VHlwZXMgPSAnZG90JyB8ICd0ZG90JztcblxuZXhwb3J0IGVudW0gU3Rha2luZ09wZXJhdGlvblR5cGVzIHtcbiAgTE9DSyxcbiAgVk9URSxcbiAgVU5WT1RFLFxuICBBQ1RJVkFURSxcbiAgVU5MT0NLLFxuICBXSVRIRFJBVyxcbn1cbiJdfQ==
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hY2NvdW50LWxpYi9iYXNlQ29pbi9lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsSUFBWSxlQWdLWDtBQWhLRCxXQUFZLGVBQWU7SUFDekIscURBQUksQ0FBQTtJQUNKLCtCQUErQjtJQUMvQixpRUFBVSxDQUFBO0lBQ1YsZ0NBQWdDO0lBQ2hDLG1FQUFXLENBQUE7SUFDWCxvRUFBb0U7SUFDcEUscUZBQW9CLENBQUE7SUFDcEIscUVBQXFFO0lBQ3JFLHVGQUFxQixDQUFBO0lBQ3JCLDBDQUEwQztJQUMxQyxxSEFBb0MsQ0FBQTtJQUNwQyw0REFBNEQ7SUFDNUQsbUVBQVcsQ0FBQTtJQUNYLHdFQUF3RTtJQUN4RSxpRUFBVSxDQUFBO0lBQ1Ysb0NBQW9DO0lBQ3BDLHVFQUFhLENBQUE7SUFDYiw4RUFBOEU7SUFDOUUsdUVBQWEsQ0FBQTtJQUNiLE9BQU87SUFDUCxvRUFBVyxDQUFBO0lBQ1gsT0FBTztJQUNQLG9FQUFXLENBQUE7SUFDWCxTQUFTO0lBQ1Qsd0VBQWEsQ0FBQTtJQUNiLFdBQVc7SUFDWCw0RUFBZSxDQUFBO0lBQ2YsU0FBUztJQUNULHdFQUFhLENBQUE7SUFDYixXQUFXO0lBQ1gsNEVBQWUsQ0FBQTtJQUNmLDhCQUE4QjtJQUM5QixzRUFBWSxDQUFBO0lBQ1osYUFBYTtJQUNiLGdGQUFpQixDQUFBO0lBQ2pCLG1FQUFtRTtJQUNuRSx3REFBSyxDQUFBO0lBQ0wsNEJBQTRCO0lBQzVCLHNFQUFZLENBQUE7SUFDWiwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLHNFQUFZLENBQUE7SUFDWiwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLHNFQUFZLENBQUE7SUFDWix5Q0FBeUM7SUFDekMsMERBQU0sQ0FBQTtJQUNOLDBEQUFNLENBQUE7SUFDTiwyQ0FBMkM7SUFDM0MsOEZBQXdCLENBQUE7SUFDeEIsY0FBYztJQUNkLGtF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QUMsRUFMVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQUszQjtBQUlELElBQVkscUJBT1g7QUFQRCxXQUFZLHFCQUFxQjtJQUMvQixpRUFBSSxDQUFBO0lBQ0osaUVBQUksQ0FBQTtJQUNKLHFFQUFNLENBQUE7SUFDTix5RUFBUSxDQUFBO0lBQ1IscUVBQU0sQ0FBQTtJQUNOLHlFQUFRLENBQUE7QUFDVixDQUFDLEVBUFcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFPaEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVybmFsIG1ldGFkYXRhLiBEZWZpbmVzIHRoZSB0eXBlIG9mIHRyYW5zYWN0aW9uLlxuICovXG5leHBvcnQgZW51bSBUcmFuc2FjdGlvblR5cGUge1xuICBTZW5kLFxuICAvLyBTZW5kIEVSQzcyMSBjb21wbGlhbnQgdG9rZW5zXG4gIFNlbmRFUkM3MjEsXG4gIC8vIFNlbmQgRVJDMTE1NSBjb21wbGlhbnQgdG9rZW5zXG4gIFNlbmRFUkMxMTU1LFxuICAvLyBJbml0aWFsaXplIGEgd2FsbGV0IG9uLWNoYWluIChlLmcuIE11bHRpLXNpZyBjb250cmFjdCBkZXBsb3ltZW50KVxuICBXYWxsZXRJbml0aWFsaXphdGlvbixcbiAgLy8gSW5pdGlhbGl6ZSBhbiBhZGRyZXNzIG9uLWNoYWluKGUuZy4gRm9yd2FyZGVyIGNvbnRyYWN0IGRlcGxveW1lbnQpXG4gIEFkZHJlc3NJbml0aWFsaXphdGlvbixcbiAgLy8gSW5pdGlhbGl6ZWQgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50XG4gIEFzc29jaWF0ZWRUb2tlbkFjY291bnRJbml0aWFsaXphdGlvbixcbiAgLy8gRmx1c2ggdG9rZW5zIGZyb20gYSBmb3J3YXJkZXIgYWRkcmVzcyB0byBpdHMgYmFzZSBhZGRyZXNzXG4gIEZsdXNoVG9rZW5zLFxuICAvLyBGbHVzaCBuYXRpdmUgY29pbnMgKGVnLiBFVEgpIGZyb20gYSBmb3J3YXJkZXIgYWRkcmVzcyB0byBiYXNlIGFkZHJlc3NcbiAgRmx1c2hDb2lucyxcbiAgLy8gU2VuZCBhIHJhdyBzaW5nbGUtc2lnIHRyYW5zYWN0aW9uXG4gIFNpbmdsZVNpZ1NlbmQsXG4gIC8vIFVwZGF0ZSBhbiBhY2NvdW50IG9uLWNoYWluIChlLmcuIFB1YmxpYyBrZXkgcmV2ZWxhdGlvbiBvcGVyYXRpb24gZm9yIFRlem9zKVxuICBBY2NvdW50VXBkYXRlLFxuICAvLyBMb2NrXG4gIFN0YWtpbmdMb2NrLFxuICAvLyBWb3RlXG4gIFN0YWtpbmdWb3RlLFxuICAvLyBVbnZvdGVcbiAgU3Rha2luZ1Vudm90ZSxcbiAgLy8gQWN0aXZhdGVcbiAgU3Rha2luZ0FjdGl2YXRlLFxuICAvLyBVbmxvY2tcbiAgU3Rha2luZ1VubG9jayxcbiAgLy8gV2l0aGRyYXdcbiAgU3Rha2luZ1dpdGhkcmF3LFxuICAvLyBIYW5kbGUgc21hcnQgY29udHJhY3QgY2FsbHNcbiAgQ29udHJhY3RDYWxsLFxuICAvLyBEZWFjdGl2YXRlXG4gIFN0YWtpbmdEZWFjdGl2YXRlLFxuICAvLyBCYXRjaCBvZiBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgYnJvYWRjYXN0IGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4gIEJhdGNoLFxuICAvLyBDbGFpbSB0aGUgc3Rha2luZyByZXdhcmRzXG4gIFN0YWtpbmdDbGFpbSxcbiAgLy8gQWRkIGRlbGVnYXRvciB0byBwLWNoYWluXG4gIC8vIEBkZXByZWNhdGVkXG4gIEFkZERlbGVnYXRvcixcbiAgLy8gQWRkIHZhbGlkYXRvciB0byBwLWNoYWluXG4gIC8vIEBkZXByZWNhdGVkXG4gIEFkZFZhbGlkYXRvcixcbiAgLy8gQ3Jvc3MgY2hhaW4gdHJhbnNmZXIgYXQgQXZheCBhbmQgZmxhcmVcbiAgRXhwb3J0LFxuICBJbXBvcnQsXG4gIC8vIENyb3NzIGNoYWluIFJlY292ZXJ5IGZvciBldm0gbGlrZSBjaGFpbnNcbiAgUmVjb3ZlcnlXYWxsZXREZXBsb3ltZW50LFxuICAvLyBBZGQgc3Rha2luZ1xuICBTdGFraW5nQWRkLFxuICAvLyBTdGFraW5nIHBsZWRnZSAoZS5nLiBBREEpXG4gIFN0YWtpbmdQbGVkZ2UsXG4gIC8vIERlbGVnYXRpbmcgdm90ZSAoZS5nLiBBREEpXG4gIFZvdGVEZWxlZ2F0aW9uLFxuICAvLyBTdGFraW5nIEF1dGhvcml6ZSAoZS5nLiBTT0wpXG4gIFN0YWtpbmdBdXRob3JpemUsXG4gIC8vIFN0YWtpbmcgQXV0aG9yaXplIGZyb20gcmF3IG1lc3NhZ2UgKGUuZy4gU09MKVxuICBTdGFraW5nQXV0aG9yaXplUmF3LFxuICAvLyBEZWxlZ2F0ZVxuICBTdGFraW5nRGVsZWdhdGUsXG4gIC8vIEN1c3RvbSB0cmFuc2FjdGlvbiAoZS5nLiBTVUkpXG4gIEN1c3RvbVR4LFxuICBTdGFraW5nUmVkZWxlZ2F0ZSxcbiAgQWRkUGVybWlzc2lvbmxlc3NEZWxlZ2F0b3IsXG4gIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yLFxuICAvLyBDbG9zaW5nIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCAoZS5nLiBTT0wpXG4gIENsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCxcbiAgU2luZ2xlTm9taW5hdG9yV2l0aGRyYXcsXG4gIC8vIFNlbmQgVG9rZW5zIChlLmcgWFJQTCB0b2tlbnMpXG4gIFNlbmRUb2tlbixcbiAgLy8gU2V0dXAgYSB0cnVzdGxpbmUgd2l0aCBpc3N1ZXIgb2YgYSB0b2tlbiAoZWcuIFhSUEwgdG9rZW5zKVxuICBUcnVzdExpbmUsXG4gIC8vIFNlbmQgTm9uIEZ1bmdpYmxlIFRva2VuIChlLmcuIEFQVCBORlRzKVxuICBTZW5kTkZULFxuICAvLyBEZWxlZ2F0ZSByZXNvdXJjZSAoZS5nLiBUUlgpXG4gIERlbGVnYXRlUmVzb3VyY2UsXG4gIC8vIFVuLWRlbGVnYXRlIHJlc291cmNlIChlLmcuIFRSWClcbiAgVW5EZWxlZ2F0ZVJlc291cmNlLFxuICBTdG9yYWdlRGVwb3NpdCxcbiAgLy8gRmx1c2ggRVJDNzIxIE5GVHMgZnJvbSBhIGZvcndhcmRlciBhZGRyZXNzIHRvIGJhc2UgYWRkcmVzc1xuICBGbHVzaEVSQzcyMSxcbiAgLy8gRmx1c2ggRVJDMTE1NSB0b2tlbnMgZnJvbSBhIGZvcndhcmRlciBhZGRyZXNzIHRvIGJhc2UgYWRkcmVzc1xuICBGbHVzaEVSQzExNTUsXG4gIC8vIFNldCB1cCAxLXN0ZXAgcHJlLWFwcHJvdmFsIGZvciBjYW50b25cbiAgT25lU3RlcFByZUFwcHJvdmFsLFxuICAvLyBjYW50b24gdHJhbnNmZXIgYWNjZXB0LCAyLXN0ZXBcbiAgVHJhbnNmZXJBY2NlcHQsXG4gIC8vIGNhbnRvbiB0cmFuc2ZlciBhY2tub3dsZWRnZW1lbnRcbiAgVHJhbnNmZXJBY2tub3dsZWRnZSxcbiAgLy8gY2FudG9uIHRyYW5zZmVyIHJlamVjdCwgMi1zdGVwXG4gIFRyYW5zZmVyUmVqZWN0LFxuICAvLyBjYW50b24gdHJhbnNmZXIgb2ZmZXIgd2l0aGRyYXduLCAyLXN0ZXBcbiAgVHJhbnNmZXJPZmZlcldpdGhkcmF3bixcbiAgLy8gY2FudG9uIGNvc2lnbiBkZWxlZ2F0aW9uIHByb3Bvc2FsXG4gIENvc2lnbkRlbGVnYXRpb25Qcm9wb3NhbCxcbiAgLy8gY2FudG9uIGNvc2lnbiBkZWxlZ2F0aW9uIGFjY2VwdFxuICBDb3NpZ25EZWxlZ2F0aW9uQWNjZXB0LFxuICAvLyBjYW50b24gYWxsb2NhdGlvbiBhbGxvY2F0ZVxuICBBbGxvY2F0aW9uQWxsb2NhdGUsXG4gIC8vIGNhbnRvbiBhbGxvY2F0aW9uIGFsbG9jYXRlIHdpdGhkcmF3blxuICBBbGxvY2F0aW9uQWxsb2NhdGVXaXRoZHJhd24sXG4gIC8vIGNhbnRvbiBhbGxvY2F0aW9uIHJlcXVlc3QgKGludGVybmFsL2R1bW15IHR4UmVxdWVzdCBzdXJmYWNpbmcgRHZQIHRyYWRlIGRldGFpbHMgdG8gdGhlIGFsbG9jYXRpbmcgcGFydHkpXG4gIEFsbG9jYXRpb25SZXF1ZXN0LFxuICAvLyBjYW50b24gYWxsb2NhdGlvbiByZWplY3RcbiAgQWxsb2NhdGlvblJlamVjdCxcbiAgLy8gY2FudG9uIGdlbmVyaWMgREFNTCBjb21tYW5kXG4gIENhbnRvbkNvbW1hbmQsXG4gIC8vIGNhbnRvbiBlbmQgaW52ZXN0b3Igb25ib2FyZGluZyBvZmZlciAoaW50ZXJuYWwvZHVtbXkgdHhSZXF1ZXN0IHJlY29yZGluZyBhbiBvbi1jaGFpblxuICAvLyBFbmRJbnZlc3Rvck9uYm9hcmRpbmdPZmZlciBjb250cmFjdCBvbiB0aGUgZW5kIGludmVzdG9yJ3Mgd2FsbGV0IHNvIHRoZXkgY2FuIGFjY2VwdCBvciByZWplY3QuXG4gIC8vIE5ldmVyIHNpZ25lZCBvciBzdWJtaXR0ZWQg4oCUIGJ1aWx0IGxvY2FsbHkgd2l0aG91dCBhbiBJTVMgY2FsbC4pXG4gIEVuZEludmVzdG9yT25ib2FyZGluZ09mZmVyLFxuXG4gIC8vIHRyeFxuICBGUkVFWkUsXG4gIFZPVEUsXG4gIFVORlJFRVpFLFxuICBXSVRIRFJBV19FWFBJUkVfVU5GUkVFWkUsXG4gIENMQUlNX1JFV0FSRFMsXG4gIC8vIENyZWF0ZSBhbiBhY2NvdW50IG9uLWNoYWluIChlLmcuIFRSWCBBY2NvdW50Q3JlYXRlQ29udHJhY3QpXG4gIEFjY291bnRDcmVhdGUsXG5cbiAgLy8gY3NwciBhbmQgc3R4XG4gIHN0YWtpbmdMb2NrLFxuICAvLyBzdHhcbiAgJ3NlbGYtc3RhY2snLFxuXG4gIC8vIGJ0YyxcbiAgc3Rha2luZyxcblxuICAvLyBjc3ByXG4gIHN0YWtpbmdVbmxvY2ssXG5cbiAgLy8gcG9seXhcbiAgUmVqZWN0SW5zdHJ1Y3Rpb24sXG5cbiAgLy8gZmxycFxuICBJbXBvcnRUb0MsXG5cbiAgLy8gdG9uIHdoYWxlc1xuICBUb25XaGFsZXNEZXBvc2l0LFxuICBUb25XaGFsZXNXaXRoZHJhd2FsLFxuICBUb25XaGFsZXNWZXN0aW5nRGVwb3NpdCxcbiAgVG9uV2hhbGVzVmVzdGluZ1dpdGhkcmF3YWwsXG5cbiAgLy8geHJwIOKAlCBkZWxldGUgYW4gYWNjb3VudCBhbmQgcmVjb3ZlciB0aGUgZnVsbCBiYWxhbmNlIGluY2x1ZGluZyByZXNlcnZlXG4gIEFjY291bnREZWxldGUsXG4gIC8vIHhycCDigJQgb3B0LWluIHRvIHJlY2VpdmUgYSBNdWx0aS1QdXJwb3NlIFRva2VuIChNUFRva2VuQXV0aG9yaXplKVxuICBNUFRva2VuQXV0aG9yaXplLFxuICAvLyB4cnAg4oCUIHNlbmQgYSBNdWx0aS1QdXJwb3NlIFRva2VuIHZpYSBQYXltZW50IHdpdGggTVBUIEFtb3VudCBvYmplY3RcbiAgU2VuZE1QVCxcbiAgLy8gRGVsZWdhdGUgZGVjcnlwdGlvbiBhY2Nlc3MgZm9yIFphbWEgRVJDLTc5ODQgY29uZmlkZW50aWFsIHRva2VucyB2aWEgQUNMIGNvbnRyYWN0XG4gIERlY3J5cHRpb25EZWxlZ2F0aW9uLFxuICAvLyBTZW5kIEVSQy03OTg0IGNvbmZpZGVudGlhbCB0b2tlbnMgdmlhIGVuY3J5cHRlZCB0cmFuc2ZlclxuICBTZW5kRVJDNzk4NCxcbiAgLy8gRmx1c2ggRVJDLTc5ODQgY29uZmlkZW50aWFsIHRva2VucyBmcm9tIGEgZm9yd2FyZGVyIGFkZHJlc3MgdG8gdGhlIHBhcmVudCB3YWxsZXRcbiAgLy8gdmlhIGZvcndhcmRlci5jYWxsRnJvbVBhcmVudCh0b2tlbkFkZHIsIDAsIGNvbmZpZGVudGlhbFRyYW5zZmVyKHBhcmVudEFkZHIsIGhhbmRsZSkpXG4gIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuLFxufVxuXG4vKipcbiAqIEdlbmVyaWMgbGlzdCBvZiBlbmNvZGluZyBmb3JtYXRzLiBDYW4gYmUgdXNlZCBhcyBhcmd1bWVudHMgZm9yIG1ldGhvZHMgaW5wdXRzLlxuICovXG5leHBvcnQgZW51bSBBZGRyZXNzRm9ybWF0IHtcbiAgaGV4ID0gJ2hleCcsXG4gIGJhc2U1OCA9ICdiYXNlNTgnLFxuICBtYWlubmV0ID0gJ21haW5uZXQnLFxuICB0ZXN0bmV0ID0gJ3Rlc3RuZXQnLFxufVxuXG4vLyBUT0RPKCk6IGNyZWF0ZSB1bmlvbiB0eXBlIG9mIGFsbCBhZGRyZXNzIGZvcm1hdHMgZW51bXNcbi8vIGxpc3Qgb2Ygc3M1OCBmb3JtYXQgZW5jb2RpbmcgdHlwZXMgZm9yIERvdCBlY29zeXN0ZW1cbmV4cG9ydCBlbnVtIERvdEFkZHJlc3NGb3JtYXQge1xuICAvLyBmb3JtYXQgZm9yIHdlc3RlbmQgKGdlbmVyaWMgc3Vic3RyYXRlKSBhZGRyZXNzZXNcbiAgc3Vic3RyYXRlID0gNDIsXG4gIC8vIGZvcm1hdCBmb3IgcG9sa2Fkb3QgbWFpbm5ldCBhZGRyZXNzZXNcbiAgcG9sa2Fkb3QgPSAwLFxufVxuXG5leHBvcnQgdHlwZSBEb3RBc3NldFR5cGVzID0gJ2RvdCcgfCAndGRvdCc7XG5cbmV4cG9ydCBlbnVtIFN0YWtpbmdPcGVyYXRpb25UeXBlcyB7XG4gIExPQ0ssXG4gIFZPVEUsXG4gIFVOVk9URSxcbiAgQUNUSVZBVEUsXG4gIFVOTE9DSyxcbiAgV0lUSERSQVcsXG59XG4iXX0=
@@ -1,7 +1,5 @@
1
- /**
2
- * @prettier
3
- */
4
- import { DefiOperation, DefiOperationListResult, DepositResult, DepositToVaultOptions, GetOperationOptions, IDefiVault, ListOperationsOptions, ResumeDepositOptions } from './iDefiVault';
1
+ import { GetVaultResponse } from '@bitgo/public-types';
2
+ import { DefiOperation, DefiOperationListResult, DepositResult, DepositToVaultOptions, GetOperationOptions, GetVaultConfigOptions, IDefiVault, ListOperationsOptions, ResumeDepositOptions, WithdrawFromVaultOptions, WithdrawResult } from './iDefiVault';
5
3
  import { IWallet } from '../wallet';
6
4
  /**
7
5
  * Error thrown when a concurrent active deposit already exists for the (wallet, vault) pair.
@@ -25,20 +23,34 @@ export declare class DefiVault implements IDefiVault {
25
23
  private readonly wallet;
26
24
  private readonly bitgo;
27
25
  constructor(wallet: IWallet);
26
+ /**
27
+ * Fetch vault config from defi-service. Used internally to determine
28
+ * which deposit path to take (Concrete vs Morpho).
29
+ */
30
+ getVaultConfig(params: GetVaultConfigOptions): Promise<GetVaultResponse>;
28
31
  /**
29
32
  * Deposit an amount of underlying asset into a vault.
30
33
  *
31
- * Internally issues two sendMany calls (approve + deposit) and returns the
32
- * operationId that links them. If the deposit sendMany fails after
33
- * the approve succeeds, the error propagates the server-side reconciler
34
- * handles orphaned approvals.
34
+ * Dispatches to the concrete or morpho path based on vault provider.
35
+ * The concrete path returns a pendingApproval (custodial wallet).
36
+ * The morpho path issues two sendMany calls (approve + deposit).
35
37
  *
36
38
  * @param params.vaultId - DeFi-service vault identifier
37
39
  * @param params.amount - amount in base units of the underlying asset
38
- * @param params.clientIdempotencyKey - optional client idempotency key
39
40
  * @param params.walletPassphrase - required for hot wallets, omit for custody
40
41
  */
41
42
  depositToVault(params: DepositToVaultOptions): Promise<DepositResult>;
43
+ /**
44
+ * Concrete BTC vault deposit path. The client BTC wallet is custodial, so
45
+ * sendMany returns a pendingApproval rather than a signed transfer.
46
+ * No recipients are sent — WP resolves the escrow destination server-side.
47
+ */
48
+ private depositToConcreteVault;
49
+ /**
50
+ * Morpho vault deposit path. Issues two sendMany calls (approve + deposit)
51
+ * and returns the operationId that links them.
52
+ */
53
+ private depositToMorphoVault;
42
54
  /**
43
55
  * Resume a partially-completed deposit. Call this when the SDK process died
44
56
  * between the approve and deposit txRequest creation.
@@ -63,6 +75,18 @@ export declare class DefiVault implements IDefiVault {
63
75
  * @param params.cursor - pagination cursor
64
76
  */
65
77
  listOperations(params: ListOperationsOptions): Promise<DefiOperationListResult>;
78
+ /**
79
+ * Withdraw vault shares from a DeFi vault.
80
+ *
81
+ * Issues a single sendMany call (defiWithdraw) and returns the operationId
82
+ * and txRequestId. The state machine for withdrawal is simpler than deposit:
83
+ * CREATED → WITHDRAW_TX_REQUESTED → WITHDRAW_SIGNED → WITHDRAW_CONFIRMED → COMPLETED
84
+ *
85
+ * @param params.vaultId - DeFi-service vault identifier
86
+ * @param params.amount - amount in base units of the vault share token
87
+ * @param params.walletPassphrase - required for hot wallets, omit for custody
88
+ */
89
+ withdrawFromVault(params: WithdrawFromVaultOptions): Promise<WithdrawResult>;
66
90
  /**
67
91
  * Extract txRequestId from a sendMany result.
68
92
  * sendMany returns different shapes depending on wallet type:
@@ -82,6 +106,12 @@ export declare class DefiVault implements IDefiVault {
82
106
  * populates the intent.
83
107
  */
84
108
  private extractOperationId;
109
+ /**
110
+ * Extracts {@link ConcreteDepositResult} from a custodial sendMany response.
111
+ * Concrete BTC deposits return a `pendingApproval` instead of a txRequest —
112
+ * throws if `pendingApproval.id` is absent, indicating an unexpected shape.
113
+ */
114
+ private extractConcreteDepositResult;
85
115
  private operationsUrl;
86
116
  }
87
117
  //# sourceMappingURL=defiVault.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defiVault.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/defi/defiVault.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,WAAW,EAAE,MAAM;CAKhC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;gBAEtB,MAAM,EAAE,OAAO;IAK3B;;;;;;;;;;;;OAYG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;IA2D3E;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAoCzE;;;;OAIG;IACG,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAQvE;;;;;;;;OAQG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkBrF;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,aAAa;CAGtB"}
1
+ {"version":3,"file":"defiVault.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/defi/defiVault.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAiB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAGL,aAAa,EACb,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,WAAW,EAAE,MAAM;CAKhC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;gBAEtB,MAAM,EAAE,OAAO;IAK3B;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAU9E;;;;;;;;;;OAUG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;IAmB3E;;;;OAIG;YACW,sBAAsB;IAcpC;;;OAGG;YACW,oBAAoB;IAkDlC;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAoCzE;;;;OAIG;IACG,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAQvE;;;;;;;;OAQG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAgBrF;;;;;;;;;;OAUG;IACG,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC;IA6BlF;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAWpC,OAAO,CAAC,aAAa;CAGtB"}
@@ -1,6 +1,45 @@
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.DefiVault = exports.ActiveOperationExistsError = void 0;
37
+ /**
38
+ * @prettier
39
+ */
40
+ const t = __importStar(require("io-ts"));
41
+ const public_types_1 = require("@bitgo/public-types");
42
+ const utils_1 = require("../utils");
4
43
  /**
5
44
  * Error thrown when a concurrent active deposit already exists for the (wallet, vault) pair.
6
45
  */
@@ -28,17 +67,28 @@ class DefiVault {
28
67
  this.wallet = wallet;
29
68
  this.bitgo = wallet.bitgo;
30
69
  }
70
+ /**
71
+ * Fetch vault config from defi-service. Used internally to determine
72
+ * which deposit path to take (Concrete vs Morpho).
73
+ */
74
+ async getVaultConfig(params) {
75
+ if (!params.vaultId) {
76
+ throw new Error('vaultId is required');
77
+ }
78
+ const raw = await this.bitgo
79
+ .get(this.bitgo.microservicesUrl(`/api/defi-service/v1/vaults/${params.vaultId}`))
80
+ .result();
81
+ return (0, utils_1.decodeWithCodec)(public_types_1.GetVaultResponse, raw, 'getVaultConfig');
82
+ }
31
83
  /**
32
84
  * Deposit an amount of underlying asset into a vault.
33
85
  *
34
- * Internally issues two sendMany calls (approve + deposit) and returns the
35
- * operationId that links them. If the deposit sendMany fails after
36
- * the approve succeeds, the error propagates the server-side reconciler
37
- * handles orphaned approvals.
86
+ * Dispatches to the concrete or morpho path based on vault provider.
87
+ * The concrete path returns a pendingApproval (custodial wallet).
88
+ * The morpho path issues two sendMany calls (approve + deposit).
38
89
  *
39
90
  * @param params.vaultId - DeFi-service vault identifier
40
91
  * @param params.amount - amount in base units of the underlying asset
41
- * @param params.clientIdempotencyKey - optional client idempotency key
42
92
  * @param params.walletPassphrase - required for hot wallets, omit for custody
43
93
  */
44
94
  async depositToVault(params) {
@@ -48,6 +98,39 @@ class DefiVault {
48
98
  if (!params.amount) {
49
99
  throw new Error('amount is required');
50
100
  }
101
+ const config = await this.getVaultConfig({ vaultId: params.vaultId });
102
+ if (config.protocol === public_types_1.VaultProtocol.CONCRETE_BTCCX) {
103
+ return this.depositToConcreteVault(params);
104
+ }
105
+ else if (config.protocol === public_types_1.VaultProtocol.MORPHO) {
106
+ return this.depositToMorphoVault(params);
107
+ }
108
+ else {
109
+ throw new Error(`Unsupported vault protocol: ${config.protocol}`);
110
+ }
111
+ }
112
+ /**
113
+ * Concrete BTC vault deposit path. The client BTC wallet is custodial, so
114
+ * sendMany returns a pendingApproval rather than a signed transfer.
115
+ * No recipients are sent — WP resolves the escrow destination server-side.
116
+ */
117
+ async depositToConcreteVault(params) {
118
+ const sendManyResult = await this.wallet.sendMany({
119
+ type: 'defi-deposit',
120
+ defiParams: {
121
+ vaultId: params.vaultId,
122
+ amount: params.amount,
123
+ actionType: 'defi-deposit',
124
+ },
125
+ ...(params.walletPassphrase ? { walletPassphrase: params.walletPassphrase } : {}),
126
+ });
127
+ return this.extractConcreteDepositResult(sendManyResult);
128
+ }
129
+ /**
130
+ * Morpho vault deposit path. Issues two sendMany calls (approve + deposit)
131
+ * and returns the operationId that links them.
132
+ */
133
+ async depositToMorphoVault(params) {
51
134
  // TODO(CGD-1709): Re-enable active operation pre-flight check once the
52
135
  // defi-service operations endpoint is deployed and returning active state.
53
136
  // const activeOps: DefiOperationListResult = await this.bitgo
@@ -64,7 +147,6 @@ class DefiVault {
64
147
  defiParams: {
65
148
  vaultId: params.vaultId,
66
149
  amount: params.amount,
67
- ...(params.clientIdempotencyKey ? { clientIdempotencyKey: params.clientIdempotencyKey } : {}),
68
150
  },
69
151
  ...(params.walletPassphrase ? { walletPassphrase: params.walletPassphrase } : {}),
70
152
  });
@@ -80,7 +162,6 @@ class DefiVault {
80
162
  vaultId: params.vaultId,
81
163
  amount: params.amount,
82
164
  operationId,
83
- ...(params.clientIdempotencyKey ? { clientIdempotencyKey: params.clientIdempotencyKey } : {}),
84
165
  },
85
166
  ...(params.walletPassphrase ? { walletPassphrase: params.walletPassphrase } : {}),
86
167
  });
@@ -167,6 +248,39 @@ class DefiVault {
167
248
  query.cursor = params.cursor;
168
249
  return await this.bitgo.get(this.bitgo.microservicesUrl(this.operationsUrl())).query(query).result();
169
250
  }
251
+ /**
252
+ * Withdraw vault shares from a DeFi vault.
253
+ *
254
+ * Issues a single sendMany call (defiWithdraw) and returns the operationId
255
+ * and txRequestId. The state machine for withdrawal is simpler than deposit:
256
+ * CREATED → WITHDRAW_TX_REQUESTED → WITHDRAW_SIGNED → WITHDRAW_CONFIRMED → COMPLETED
257
+ *
258
+ * @param params.vaultId - DeFi-service vault identifier
259
+ * @param params.amount - amount in base units of the vault share token
260
+ * @param params.walletPassphrase - required for hot wallets, omit for custody
261
+ */
262
+ async withdrawFromVault(params) {
263
+ if (!params.vaultId) {
264
+ throw new Error('vaultId is required');
265
+ }
266
+ if (!params.amount) {
267
+ throw new Error('amount is required');
268
+ }
269
+ const withdrawResult = await this.wallet.sendMany({
270
+ type: 'defiWithdraw',
271
+ defiParams: {
272
+ vaultId: params.vaultId,
273
+ amount: params.amount,
274
+ },
275
+ ...(params.walletPassphrase ? { walletPassphrase: params.walletPassphrase } : {}),
276
+ });
277
+ const txRequestId = this.extractTxRequestId(withdrawResult);
278
+ const operationId = this.extractOperationId(withdrawResult);
279
+ if (!operationId) {
280
+ throw new Error('operationId not found in withdraw txRequest response');
281
+ }
282
+ return { operationId, txRequestId };
283
+ }
170
284
  // ── Internal helpers ────────────────────────────────────────────────
171
285
  /**
172
286
  * Extract txRequestId from a sendMany result.
@@ -217,9 +331,24 @@ class DefiVault {
217
331
  const intent = txRequest.intent;
218
332
  return intent?.operationId;
219
333
  }
334
+ /**
335
+ * Extracts {@link ConcreteDepositResult} from a custodial sendMany response.
336
+ * Concrete BTC deposits return a `pendingApproval` instead of a txRequest —
337
+ * throws if `pendingApproval.id` is absent, indicating an unexpected shape.
338
+ */
339
+ extractConcreteDepositResult(sendManyResult) {
340
+ const SendManyConcreteResponse = t.type({
341
+ pendingApproval: t.intersection([t.type({ id: t.string }), t.partial({ state: t.string })]),
342
+ });
343
+ const decoded = (0, utils_1.decodeWithCodec)(SendManyConcreteResponse, sendManyResult, 'defi-deposit sendMany response');
344
+ return {
345
+ pendingApprovalId: decoded.pendingApproval.id,
346
+ state: decoded.pendingApproval.state ?? 'awaitingSignature',
347
+ };
348
+ }
220
349
  operationsUrl() {
221
350
  return `/api/defi-service/v1/wallets/${this.wallet.id()}/operations`;
222
351
  }
223
352
  }
224
353
  exports.DefiVault = DefiVault;
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaVZhdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2RlZmkvZGVmaVZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdCQTs7R0FFRztBQUNILE1BQWEsMEJBQTJCLFNBQVEsS0FBSztJQUduRCxZQUFZLFdBQW1CO1FBQzdCLEtBQUssQ0FBQywrQ0FBK0MsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQVJELGdFQVFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsU0FBUztJQUlwQixZQUFZLE1BQWU7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQTZCO1FBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLDJFQUEyRTtRQUMzRSw4REFBOEQ7UUFDOUQsNERBQTREO1FBQzVELHlEQUF5RDtRQUN6RCxlQUFlO1FBQ2YsRUFBRTtRQUNGLHVEQUF1RDtRQUN2RCwwRUFBMEU7UUFDMUUsSUFBSTtRQUVKLHlDQUF5QztRQUN6QyxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxD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TUFBTSxnQkFBZ0IsR0FBRyxjQUFjLEVBQUUsWUFBbUQsQ0FBQztRQUM3RixJQUFJLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sZ0JBQWdCLENBQUMsV0FBcUIsQ0FBQztRQUNoRCxDQUFDO1FBRUQsMkRBQTJEO1FBQzNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUF5RCxDQUFDO1FBQ3hGLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBbUQsQ0FBQztRQUMvRixJQUFJLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sZ0JBQWdCLENBQUMsV0FBcUIsQ0FBQztRQUNoRCxDQUFDO1FBRUQsaUZBQWlGO1FBQ2pGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUE2QyxDQUFDO1FBQ3ZFLE9BQU8sTUFBTSxFQUFFLFdBQWlDLENBQUM7SUFDbkQsQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxnQ0FBZ0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDO0lBQ3ZFLENBQUM7Q0FDRjtBQTdORCw4QkE2TkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQge1xuICBEZWZpT3BlcmF0aW9uLFxuICBEZWZpT3BlcmF0aW9uTGlzdFJlc3VsdCxcbiAgRGVwb3NpdFJlc3VsdCxcbiAgRGVwb3NpdFRvVmF1bHRPcHRpb25zLFxuICBHZXRPcGVyYXRpb25PcHRpb25zLFxuICBJRGVmaVZhdWx0LFxuICBMaXN0T3BlcmF0aW9uc09wdGlvbnMsXG4gIFJlc3VtZURlcG9zaXRPcHRpb25zLFxufSBmcm9tICcuL2lEZWZpVmF1bHQnO1xuaW1wb3J0IHsgSVdhbGxldCB9IGZyb20gJy4uL3dhbGxldCc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGEgY29uY3VycmVudCBhY3RpdmUgZGVwb3NpdCBhbHJlYWR5IGV4aXN0cyBmb3IgdGhlICh3YWxsZXQsIHZhdWx0KSBwYWlyLlxuICovXG5leHBvcnQgY2xhc3MgQWN0aXZlT3BlcmF0aW9uRXhpc3RzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBvcGVyYXRpb25JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wZXJhdGlvbklkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgQW4gYWN0aXZlIGRlcG9zaXQgb3BlcmF0aW9uIGFscmVhZHkgZXhpc3RzOiAke29wZXJhdGlvbklkfWApO1xuICAgIHRoaXMubmFtZSA9ICdBY3RpdmVPcGVyYXRpb25FeGlzdHNFcnJvcic7XG4gICAgdGhpcy5vcGVyYXRpb25JZCA9IG9wZXJhdGlvbklkO1xuICB9XG59XG5cbi8qKlxuICogT3JjaGVzdHJhdGVzIEVSQy00NjI2IHZhdWx0IGRlcG9zaXQgYW5kIHdpdGhkcmF3IGZsb3dzIGZvciBhIHdhbGxldC5cbiAqXG4gKiBFeHBvc2VkIGFzIGB3YWxsZXQuZGVmaWAgb24gdGhlIFdhbGxldCBjbGFzcy4gU2VlIFRERCDCpzYuMy4xIGZvciB0aGUgZnVsbFxuICogZGVzaWduOiB0aGUgU0RLIHNlcXVlbmNlcyB0d28gc2VuZE1hbnkgY2FsbHMgKGFwcHJvdmUgKyBkZXBvc2l0KSBhbmRcbiAqIHJldHVybnMgYW4gb3BlcmF0aW9uSWQgdGhhdCB0aGUgVUkgdXNlcyBmb3Igc3RhdHVzIHRyYWNraW5nIGFuZCByZWNvdmVyeS5cbiAqXG4gKiBVc2VzIHdhbGxldC5zZW5kTWFueSgpIHVuZGVyIHRoZSBob29kIHNvIHRoYXQgYm90aCBjdXN0b2R5IHdhbGxldHNcbiAqICh0eFJlcXVlc3QgY3JlYXRpb24gb25seSkgYW5kIGhvdCB3YWxsZXRzIChjcmVhdGUgKyBzaWduICsgYnJvYWRjYXN0KVxuICogYXJlIGhhbmRsZWQgYnkgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLlxuICovXG5leHBvcnQgY2xhc3MgRGVmaVZhdWx0IGltcGxlbWVudHMgSURlZmlWYXVsdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2FsbGV0OiBJV2FsbGV0O1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG5cbiAgY29uc3RydWN0b3Iod2FsbGV0OiBJV2FsbGV0KSB7XG4gICAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG4gICAgdGhpcy5iaXRnbyA9IHdhbGxldC5iaXRnbztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBvc2l0IGFuIGFtb3VudCBvZiB1bmRlcmx5aW5nIGFzc2V0IGludG8gYSB2YXVsdC5cbiAgICpcbiAgICogSW50ZXJuYWxseSBpc3N1ZXMgdHdvIHNlbmRNYW55IGNhbGxzIChhcHByb3ZlICsgZGVwb3NpdCkgYW5kIHJldHVybnMgdGhlXG4gICAqIG9wZXJhdGlvbklkIHRoYXQgbGlua3MgdGhlbS4gSWYgdGhlIGRlcG9zaXQgc2VuZE1hbnkgZmFpbHMgYWZ0ZXJcbiAgICogdGhlIGFwcHJvdmUgc3VjY2VlZHMsIHRoZSBlcnJvciBwcm9wYWdhdGVzIOKAlCB0aGUgc2VydmVyLXNpZGUgcmVjb25jaWxlclxuICAgKiBoYW5kbGVzIG9ycGhhbmVkIGFwcHJvdmFscy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy52YXVsdElkIC0gRGVGaS1zZXJ2aWNlIHZhdWx0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHBhcmFtcy5hbW91bnQgLSBhbW91bnQgaW4gYmFzZSB1bml0cyBvZiB0aGUgdW5kZXJseWluZyBhc3NldFxuICAgKiBAcGFyYW0gcGFyYW1zLmNsaWVudElkZW1wb3RlbmN5S2V5IC0gb3B0aW9uYWwgY2xpZW50IGlkZW1wb3RlbmN5IGtleVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSByZXF1aXJlZCBmb3IgaG90IHdhbGxldHMsIG9taXQgZm9yIGN1c3RvZHlcbiAgICovXG4gIGFzeW5jIGRlcG9zaXRUb1ZhdWx0KHBhcmFtczogRGVwb3NpdFRvVmF1bHRPcHRpb25zKTogUHJvbWlzZTxEZXBvc2l0UmVzdWx0PiB7XG4gICAgaWYgKCFwYXJhbXMudmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YXVsdElkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghcGFyYW1zLmFtb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbW91bnQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPKENHRC0xNzA5KTogUmUtZW5hYmxlIGFjdGl2ZSBvcGVyYXRpb24gcHJlLWZsaWdodCBjaGVjayBvbmNlIHRoZVxuICAgIC8vIGRlZmktc2VydmljZSBvcGVyYXRpb25zIGVuZHBvaW50IGlzIGRlcGxveWVkIGFuZCByZXR1cm5pbmcgYWN0aXZlIHN0YXRlLlxuICAgIC8vIGNvbnN0IGFjdGl2ZU9wczogRGVmaU9wZXJhdGlvbkxpc3RSZXN1bHQgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgLy8gICAuZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLm9wZXJhdGlvbnNVcmwoKSkpXG4gICAgLy8gICAucXVlcnkoeyB2YXVsdElkOiBwYXJhbXMudmF1bHRJZCwgc3RhdGU6ICdhY3RpdmUnIH0pXG4gICAgLy8gICAucmVzdWx0KCk7XG4gICAgLy9cbiAgICAvLyBpZiAoYWN0aXZlT3BzLml0ZW1zICYmIGFjdGl2ZU9wcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gICB0aHJvdyBuZXcgQWN0aXZlT3BlcmF0aW9uRXhpc3RzRXJyb3IoYWN0aXZlT3BzLml0ZW1zWzBdLm9wZXJhdGlvbklkKTtcbiAgICAvLyB9XG5cbiAgICAvLyBTdGVwIDE6IEFwcHJvdmUgdHhSZXF1ZXN0IHZpYSBzZW5kTWFueVxuICAgIGNvbnN0IGFwcHJvdmVSZXN1bHQgPSBhd2FpdCB0aGlzLndhbGxldC5zZW5kTWFueSh7XG4gICAgICB0eXBlOiAnZGVmaUFwcHJvdmUnLFxuICAgICAgZGVmaVBhcmFtczoge1xuICAgICAgICB2YXVsdElkOiBwYXJhbXMudmF1bHRJZCxcbiAgICAgICAgYW1vdW50OiBwYXJhbXMuYW1vdW50LFxuICAgICAgICAuLi4ocGFyYW1zLmNsaWVudElkZW1wb3RlbmN5S2V5ID8geyBjbGllbnRJZGVtcG90ZW5jeUtleTogcGFyYW1zLmNsaWVudElkZW1wb3RlbmN5S2V5IH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXBwcm92ZVR4UmVxdWVzdElkID0gdGhpcy5leHRyYWN0VHhSZXF1ZXN0SWQoYXBwcm92ZVJlc3VsdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSB0aGlzLmV4dHJhY3RPcGVyYXRpb25JZChhcHByb3ZlUmVzdWx0KTtcblxuICAgIGlmICghb3BlcmF0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3BlcmF0aW9uSWQgbm90IGZvdW5kIGluIGFwcHJvdmUgdHhSZXF1ZXN0IHJlc3BvbnNlJyk7XG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBEZXBvc2l0IHR4UmVxdWVzdCB2aWEgc2VuZE1hbnlcbiAgICBjb25zdCBkZXBvc2l0UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmlEZXBvc2l0JyxcbiAgICAgIGRlZmlQYXJhbXM6IHtcbiAgICAgICAgdmF1bHRJZDogcGFyYW1zLnZhdWx0SWQsXG4gICAgICAgIGFtb3VudDogcGFyYW1zLmFtb3VudCxcbiAgICAgICAgb3BlcmF0aW9uSWQsXG4gICAgICAgIC4uLihwYXJhbXMuY2xpZW50SWRlbXBvdGVuY3lLZXkgPyB7IGNsaWVudElkZW1wb3RlbmN5S2V5OiBwYXJhbXMuY2xpZW50SWRlbXBvdGVuY3lLZXkgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgICAuLi4ocGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyB7IHdhbGxldFBhc3NwaHJhc2U6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0gOiB7fSksXG4gICAgfSk7XG4gICAgY29uc3QgZGVwb3NpdFR4UmVxdWVzdElkID0gdGhpcy5leHRyYWN0VHhSZXF1ZXN0SWQoZGVwb3NpdFJlc3VsdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0aW9uSWQsXG4gICAgICB0eFJlcXVlc3RJZHM6IHtcbiAgICAgICAgYXBwcm92ZTogYXBwcm92ZVR4UmVxdWVzdElkLFxuICAgICAgICBkZXBvc2l0OiBkZXBvc2l0VHhSZXF1ZXN0SWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIGEgcGFydGlhbGx5LWNvbXBsZXRlZCBkZXBvc2l0LiBDYWxsIHRoaXMgd2hlbiB0aGUgU0RLIHByb2Nlc3MgZGllZFxuICAgKiBiZXR3ZWVuIHRoZSBhcHByb3ZlIGFuZCBkZXBvc2l0IHR4UmVxdWVzdCBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy5vcGVyYXRpb25JZCAtIHRoZSBvcGVyYXRpb25JZCBmcm9tIHRoZSBvcmlnaW5hbCBkZXBvc2l0VG9WYXVsdCBjYWxsXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSAtIHJlcXVpcmVkIGZvciBob3Qgd2FsbGV0cywgb21pdCBmb3IgY3VzdG9keVxuICAgKi9cbiAgYXN5bmMgcmVzdW1lRGVwb3NpdChwYXJhbXM6IFJlc3VtZURlcG9zaXRPcHRpb25zKTogUHJvbWlzZTxEZXBvc2l0UmVzdWx0PiB7XG4gICAgaWYgKCFwYXJhbXMub3BlcmF0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3BlcmF0aW9uSWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvLyBGZXRjaCB0aGUgb3BlcmF0aW9uIHRvIGdldCB0aGUgdmF1bHQgYW5kIGFtb3VudCBkZXRhaWxzXG4gICAgY29uc3Qgb3BlcmF0aW9uID0gYXdhaXQgdGhpcy5nZXRPcGVyYXRpb24oeyBvcGVyYXRpb25JZDogcGFyYW1zLm9wZXJhdGlvbklkIH0pO1xuXG4gICAgaWYgKG9wZXJhdGlvbi5hc3NvY2lhdGVkVHhSZXF1ZXN0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVwb3NpdCB0eFJlcXVlc3QgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgb3BlcmF0aW9uOyBub3RoaW5nIHRvIHJlc3VtZScpO1xuICAgIH1cblxuICAgIGlmICghb3BlcmF0aW9uLnR4UmVxdWVzdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FwcHJvdmUgdHhSZXF1ZXN0IG5vdCBmb3VuZCBmb3IgdGhpcyBvcGVyYXRpb247IGNhbm5vdCByZXN1bWUnKTtcbiAgICB9XG5cbiAgICAvLyBJc3N1ZSB0aGUgZGVwb3NpdCB0eFJlcXVlc3QgdXNpbmcgdGhlIGV4aXN0aW5nIG9wZXJhdGlvbidzIGRldGFpbHNcbiAgICBjb25zdCBkZXBvc2l0UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmlEZXBvc2l0JyxcbiAgICAgIGRlZmlQYXJhbXM6IHtcbiAgICAgICAgdmF1bHRJZDogb3BlcmF0aW9uLnZhdWx0SWQsXG4gICAgICAgIGFtb3VudDogb3BlcmF0aW9uLmFzc2V0QW1vdW50LFxuICAgICAgICBvcGVyYXRpb25JZDogcGFyYW1zLm9wZXJhdGlvbklkLFxuICAgICAgfSxcbiAgICAgIC4uLihwYXJhbXMud2FsbGV0UGFzc3BocmFzZSA/IHsgd2FsbGV0UGFzc3BocmFzZTogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgfSA6IHt9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRpb25JZDogcGFyYW1zLm9wZXJhdGlvbklkLFxuICAgICAgdHhSZXF1ZXN0SWRzOiB7XG4gICAgICAgIGFwcHJvdmU6IG9wZXJhdGlvbi50eFJlcXVlc3RJZCxcbiAgICAgICAgZGVwb3NpdDogdGhpcy5leHRyYWN0VHhSZXF1ZXN0SWQoZGVwb3NpdFJlc3VsdCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgRGVGaSBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMub3BlcmF0aW9uSWQgLSB0aGUgb3BlcmF0aW9uIHRvIHJldHJpZXZlXG4gICAqL1xuICBhc3luYyBnZXRPcGVyYXRpb24ocGFyYW1zOiBHZXRPcGVyYXRpb25PcHRpb25zKTogUHJvbWlzZTxEZWZpT3BlcmF0aW9uPiB7XG4gICAgaWYgKCFwYXJhbXMub3BlcmF0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3BlcmF0aW9uSWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMub3BlcmF0aW9uc1VybCgpICsgJy8nICsgcGFyYW1zLm9wZXJhdGlvbklkKSkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBvcGVyYXRpb25zIGZvciBhIHZhdWx0IGZpbHRlcmVkIGJ5IHdhbGxldElkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zLnZhdWx0SWQgLSB2YXVsdCB0byBsaXN0IG9wZXJhdGlvbnMgZm9yXG4gICAqIEBwYXJhbSBwYXJhbXMuc3RhdGUgLSBvcHRpb25hbCBzdGF0ZSBmaWx0ZXJcbiAgICogQHBhcmFtIHBhcmFtcy50eXBlIC0gb3B0aW9uYWwgdHlwZSBmaWx0ZXIgKERFUE9TSVQgfCBXSVRIRFJBVylcbiAgICogQHBhcmFtIHBhcmFtcy5saW1pdCAtIHBhZ2Ugc2l6ZVxuICAgKiBAcGFyYW0gcGFyYW1zLmN1cnNvciAtIHBhZ2luYXRpb24gY3Vyc29yXG4gICAqL1xuICBhc3luYyBsaXN0T3BlcmF0aW9ucyhwYXJhbXM6IExpc3RPcGVyYXRpb25zT3B0aW9ucyk6IFByb21pc2U8RGVmaU9wZXJhdGlvbkxpc3RSZXN1bHQ+IHtcbiAgICBpZiAoIXBhcmFtcy52YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhdWx0SWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPiA9IHtcbiAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgIH07XG4gICAgaWYgKHBhcmFtcy5zdGF0ZSkgcXVlcnkuc3RhdGUgPSBwYXJhbXMuc3RhdGU7XG4gICAgaWYgKHBhcmFtcy50eXBlKSBxdWVyeS50eXBlID0gcGFyYW1zLnR5cGU7XG4gICAgaWYgKHBhcmFtcy5saW1pdCkgcXVlcnkubGltaXQgPSBwYXJhbXMubGltaXQ7XG4gICAgaWYgKHBhcmFtcy5jdXJzb3IpIHF1ZXJ5LmN1cnNvciA9IHBhcmFtcy5jdXJzb3I7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMub3BlcmF0aW9uc1VybCgpKSkucXVlcnkocXVlcnkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFsIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgdHhSZXF1ZXN0SWQgZnJvbSBhIHNlbmRNYW55IHJlc3VsdC5cbiAgICogc2VuZE1hbnkgcmV0dXJucyBkaWZmZXJlbnQgc2hhcGVzIGRlcGVuZGluZyBvbiB3YWxsZXQgdHlwZTpcbiAgICogLSBUU1MgZnVsbDogeyB0eFJlcXVlc3Q6IHsgdHhSZXF1ZXN0SWQgfSB9IG9yIHsgcGVuZGluZ0FwcHJvdmFsLCB0eFJlcXVlc3QgfVxuICAgKiAtIFRTUyBsaXRlOiByZXN1bHQgZnJvbSB0c3NVdGlscy5zZW5kVHhSZXF1ZXN0XG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RUeFJlcXVlc3RJZChzZW5kTWFueVJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHR4UmVxdWVzdCA9IHNlbmRNYW55UmVzdWx0LnR4UmVxdWVzdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAodHhSZXF1ZXN0Py50eFJlcXVlc3RJZCkge1xuICAgICAgcmV0dXJuIHR4UmVxdWVzdC50eFJlcXVlc3RJZCBhcyBzdHJpbmc7XG4gICAgfVxuICAgIGlmIChzZW5kTWFueVJlc3VsdC50eFJlcXVlc3RJZCkge1xuICAgICAgcmV0dXJuIHNlbmRNYW55UmVzdWx0LnR4UmVxdWVzdElkIGFzIHN0cmluZztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0eFJlcXVlc3RJZCBub3QgZm91bmQgaW4gc2VuZE1hbnkgcmVzcG9uc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IG9wZXJhdGlvbklkIGZyb20gYSBzZW5kTWFueSByZXN1bHQuXG4gICAqXG4gICAqIFRoZSBXUCB3cml0ZXMgdGhlIGRlZmktc2VydmljZS1taW50ZWQgb3BlcmF0aW9uSWQgaW50byB0aGUgYnVpbHRcbiAgICogdHJhbnNhY3Rpb24ncyBgY29pblNwZWNpZmljYCAoYWxvbmdzaWRlIGBhc3NpZ25lZE5vbmNlYCksIG5vdCBpbnRvIHRoZVxuICAgKiBpbnRlbnQuIFJlYWQgaXQgZnJvbSB0aGVyZTogdGhlIGBmdWxsYCBhcGlWZXJzaW9uIHN1cmZhY2VzIGl0IGF0XG4gICAqIGB0cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5jb2luU3BlY2lmaWMub3BlcmF0aW9uSWRgLCB0aGUgYGxpdGVgIHZlcnNpb25cbiAgICogYXQgYHVuc2lnbmVkVHhzWzBdLmNvaW5TcGVjaWZpYy5vcGVyYXRpb25JZGAuIEZhbGwgYmFjayB0b1xuICAgKiBgaW50ZW50Lm9wZXJhdGlvbklkYCBmb3IgZm9yd2FyZC1jb21wYXQgaW4gY2FzZSB0aGUgV1AgbGF0ZXIgYWxzb1xuICAgKiBwb3B1bGF0ZXMgdGhlIGludGVudC5cbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdE9wZXJhdGlvbklkKHNlbmRNYW55UmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdHhSZXF1ZXN0ID0gc2VuZE1hbnlSZXN1bHQudHhSZXF1ZXN0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGlmICghdHhSZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGZ1bGwgYXBpVmVyc2lvbjogdHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLm9wZXJhdGlvbklkXG4gICAgY29uc3QgdHJhbnNhY3Rpb25zID0gdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVsbFVuc2lnbmVkVHggPSB0cmFuc2FjdGlvbnM/LlswXT8udW5zaWduZWRUeCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBmdWxsQ29pblNwZWNpZmljID0gZnVsbFVuc2lnbmVkVHg/LmNvaW5TcGVjaWZpYyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZnVsbENvaW5TcGVjaWZpYz8ub3BlcmF0aW9uSWQpIHtcbiAgICAgIHJldHVybiBmdWxsQ29pblNwZWNpZmljLm9wZXJhdGlvbklkIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvLyBsaXRlIGFwaVZlcnNpb246IHVuc2lnbmVkVHhzWzBdLmNvaW5TcGVjaWZpYy5vcGVyYXRpb25JZFxuICAgIGNvbnN0IHVuc2lnbmVkVHhzID0gdHhSZXF1ZXN0LnVuc2lnbmVkVHhzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsaXRlQ29pblNwZWNpZmljID0gdW5zaWduZWRUeHM/LlswXT8uY29pblNwZWNpZmljIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChsaXRlQ29pblNwZWNpZmljPy5vcGVyYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGxpdGVDb2luU3BlY2lmaWMub3BlcmF0aW9uSWQgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIC8vIGZvcndhcmQtY29tcGF0OiBpbnRlbnQub3BlcmF0aW9uSWQgKGluIGNhc2UgdGhlIFdQIGxhdGVyIHBvcHVsYXRlcyB0aGUgaW50ZW50KVxuICAgIGNvbnN0IGludGVudCA9IHR4UmVxdWVzdC5pbnRlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGludGVudD8ub3BlcmF0aW9uSWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVyYXRpb25zVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAvYXBpL2RlZmktc2VydmljZS92MS93YWxsZXRzLyR7dGhpcy53YWxsZXQuaWQoKX0vb3BlcmF0aW9uc2A7XG4gIH1cbn1cbiJdfQ==
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaVZhdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2RlZmkvZGVmaVZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gseUNBQTJCO0FBQzNCLHNEQUFzRTtBQWtCdEUsb0NBQTJDO0FBRTNDOztHQUVHO0FBQ0gsTUFBYSwwQkFBMkIsU0FBUSxLQUFLO0lBR25ELFlBQVksV0FBbUI7UUFDN0IsS0FBSyxDQUFDLCtDQUErQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxJQUFJLEdBQUcsNEJBQTRCLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBUkQsZ0VBUUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBYSxTQUFTO0lBSXBCLFlBQVksTUFBZTtRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBNkI7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUs7YUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsK0JBQStCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ2pGLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFBLHVCQUFlLEVBQUMsK0JBQWdCLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFD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QUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxJQUFJLG1CQUFtQjtTQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxnQ0FBZ0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDO0lBQ3ZFLENBQUM7Q0FDRjtBQWhVRCw4QkFnVUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IEdldFZhdWx0UmVzcG9uc2UsIFZhdWx0UHJvdG9jb2wgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7XG4gIENvbmNyZXRlRGVwb3NpdFJlc3VsdCxcbiAgTW9ycGhvRGVwb3NpdFJlc3VsdCxcbiAgRGVmaU9wZXJhdGlvbixcbiAgRGVmaU9wZXJhdGlvbkxpc3RSZXN1bHQsXG4gIERlcG9zaXRSZXN1bHQsXG4gIERlcG9zaXRUb1ZhdWx0T3B0aW9ucyxcbiAgR2V0T3BlcmF0aW9uT3B0aW9ucyxcbiAgR2V0VmF1bHRDb25maWdPcHRpb25zLFxuICBJRGVmaVZhdWx0LFxuICBMaXN0T3BlcmF0aW9uc09wdGlvbnMsXG4gIFJlc3VtZURlcG9zaXRPcHRpb25zLFxuICBXaXRoZHJhd0Zyb21WYXVsdE9wdGlvbnMsXG4gIFdpdGhkcmF3UmVzdWx0LFxufSBmcm9tICcuL2lEZWZpVmF1bHQnO1xuaW1wb3J0IHsgSVdhbGxldCB9IGZyb20gJy4uL3dhbGxldCc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGEgY29uY3VycmVudCBhY3RpdmUgZGVwb3NpdCBhbHJlYWR5IGV4aXN0cyBmb3IgdGhlICh3YWxsZXQsIHZhdWx0KSBwYWlyLlxuICovXG5leHBvcnQgY2xhc3MgQWN0aXZlT3BlcmF0aW9uRXhpc3RzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBvcGVyYXRpb25JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wZXJhdGlvbklkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgQW4gYWN0aXZlIGRlcG9zaXQgb3BlcmF0aW9uIGFscmVhZHkgZXhpc3RzOiAke29wZXJhdGlvbklkfWApO1xuICAgIHRoaXMubmFtZSA9ICdBY3RpdmVPcGVyYXRpb25FeGlzdHNFcnJvcic7XG4gICAgdGhpcy5vcGVyYXRpb25JZCA9IG9wZXJhdGlvbklkO1xuICB9XG59XG5cbi8qKlxuICogT3JjaGVzdHJhdGVzIEVSQy00NjI2IHZhdWx0IGRlcG9zaXQgYW5kIHdpdGhkcmF3IGZsb3dzIGZvciBhIHdhbGxldC5cbiAqXG4gKiBFeHBvc2VkIGFzIGB3YWxsZXQuZGVmaWAgb24gdGhlIFdhbGxldCBjbGFzcy4gU2VlIFRERCDCpzYuMy4xIGZvciB0aGUgZnVsbFxuICogZGVzaWduOiB0aGUgU0RLIHNlcXVlbmNlcyB0d28gc2VuZE1hbnkgY2FsbHMgKGFwcHJvdmUgKyBkZXBvc2l0KSBhbmRcbiAqIHJldHVybnMgYW4gb3BlcmF0aW9uSWQgdGhhdCB0aGUgVUkgdXNlcyBmb3Igc3RhdHVzIHRyYWNraW5nIGFuZCByZWNvdmVyeS5cbiAqXG4gKiBVc2VzIHdhbGxldC5zZW5kTWFueSgpIHVuZGVyIHRoZSBob29kIHNvIHRoYXQgYm90aCBjdXN0b2R5IHdhbGxldHNcbiAqICh0eFJlcXVlc3QgY3JlYXRpb24gb25seSkgYW5kIGhvdCB3YWxsZXRzIChjcmVhdGUgKyBzaWduICsgYnJvYWRjYXN0KVxuICogYXJlIGhhbmRsZWQgYnkgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLlxuICovXG5leHBvcnQgY2xhc3MgRGVmaVZhdWx0IGltcGxlbWVudHMgSURlZmlWYXVsdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2FsbGV0OiBJV2FsbGV0O1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG5cbiAgY29uc3RydWN0b3Iod2FsbGV0OiBJV2FsbGV0KSB7XG4gICAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG4gICAgdGhpcy5iaXRnbyA9IHdhbGxldC5iaXRnbztcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB2YXVsdCBjb25maWcgZnJvbSBkZWZpLXNlcnZpY2UuIFVzZWQgaW50ZXJuYWxseSB0byBkZXRlcm1pbmVcbiAgICogd2hpY2ggZGVwb3NpdCBwYXRoIHRvIHRha2UgKENvbmNyZXRlIHZzIE1vcnBobykuXG4gICAqL1xuICBhc3luYyBnZXRWYXVsdENvbmZpZyhwYXJhbXM6IEdldFZhdWx0Q29uZmlnT3B0aW9ucyk6IFByb21pc2U8R2V0VmF1bHRSZXNwb25zZT4ge1xuICAgIGlmICghcGFyYW1zLnZhdWx0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndmF1bHRJZCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBjb25zdCByYXcgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAuZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybChgL2FwaS9kZWZpLXNlcnZpY2UvdjEvdmF1bHRzLyR7cGFyYW1zLnZhdWx0SWR9YCkpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZVdpdGhDb2RlYyhHZXRWYXVsdFJlc3BvbnNlLCByYXcsICdnZXRWYXVsdENvbmZpZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcG9zaXQgYW4gYW1vdW50IG9mIHVuZGVybHlpbmcgYXNzZXQgaW50byBhIHZhdWx0LlxuICAgKlxuICAgKiBEaXNwYXRjaGVzIHRvIHRoZSBjb25jcmV0ZSBvciBtb3JwaG8gcGF0aCBiYXNlZCBvbiB2YXVsdCBwcm92aWRlci5cbiAgICogVGhlIGNvbmNyZXRlIHBhdGggcmV0dXJucyBhIHBlbmRpbmdBcHByb3ZhbCAoY3VzdG9kaWFsIHdhbGxldCkuXG4gICAqIFRoZSBtb3JwaG8gcGF0aCBpc3N1ZXMgdHdvIHNlbmRNYW55IGNhbGxzIChhcHByb3ZlICsgZGVwb3NpdCkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMudmF1bHRJZCAtIERlRmktc2VydmljZSB2YXVsdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBwYXJhbXMuYW1vdW50IC0gYW1vdW50IGluIGJhc2UgdW5pdHMgb2YgdGhlIHVuZGVybHlpbmcgYXNzZXRcbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIC0gcmVxdWlyZWQgZm9yIGhvdCB3YWxsZXRzLCBvbWl0IGZvciBjdXN0b2R5XG4gICAqL1xuICBhc3luYyBkZXBvc2l0VG9WYXVsdChwYXJhbXM6IERlcG9zaXRUb1ZhdWx0T3B0aW9ucyk6IFByb21pc2U8RGVwb3NpdFJlc3VsdD4ge1xuICAgIGlmICghcGFyYW1zLnZhdWx0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndmF1bHRJZCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXBhcmFtcy5hbW91bnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYW1vdW50IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5nZXRWYXVsdENvbmZpZyh7IHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5wcm90b2NvbCA9PT0gVmF1bHRQcm90b2NvbC5DT05DUkVURV9CVENDWCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVwb3NpdFRvQ29uY3JldGVWYXVsdChwYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLnByb3RvY29sID09PSBWYXVsdFByb3RvY29sLk1PUlBITykge1xuICAgICAgcmV0dXJuIHRoaXMuZGVwb3NpdFRvTW9ycGhvVmF1bHQocGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB2YXVsdCBwcm90b2NvbDogJHtjb25maWcucHJvdG9jb2x9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbmNyZXRlIEJUQyB2YXVsdCBkZXBvc2l0IHBhdGguIFRoZSBjbGllbnQgQlRDIHdhbGxldCBpcyBjdXN0b2RpYWwsIHNvXG4gICAqIHNlbmRNYW55IHJldHVybnMgYSBwZW5kaW5nQXBwcm92YWwgcmF0aGVyIHRoYW4gYSBzaWduZWQgdHJhbnNmZXIuXG4gICAqIE5vIHJlY2lwaWVudHMgYXJlIHNlbnQg4oCUIFdQIHJlc29sdmVzIHRoZSBlc2Nyb3cgZGVzdGluYXRpb24gc2VydmVyLXNpZGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlcG9zaXRUb0NvbmNyZXRlVmF1bHQocGFyYW1zOiBEZXBvc2l0VG9WYXVsdE9wdGlvbnMpOiBQcm9taXNlPENvbmNyZXRlRGVwb3NpdFJlc3VsdD4ge1xuICAgIGNvbnN0IHNlbmRNYW55UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmktZGVwb3NpdCcsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICAgIGFjdGlvblR5cGU6ICdkZWZpLWRlcG9zaXQnLFxuICAgICAgfSxcbiAgICAgIC4uLihwYXJhbXMud2FsbGV0UGFzc3BocmFzZSA/IHsgd2FsbGV0UGFzc3BocmFzZTogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgfSA6IHt9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4dHJhY3RDb25jcmV0ZURlcG9zaXRSZXN1bHQoc2VuZE1hbnlSZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vcnBobyB2YXVsdCBkZXBvc2l0IHBhdGguIElzc3VlcyB0d28gc2VuZE1hbnkgY2FsbHMgKGFwcHJvdmUgKyBkZXBvc2l0KVxuICAgKiBhbmQgcmV0dXJucyB0aGUgb3BlcmF0aW9uSWQgdGhhdCBsaW5rcyB0aGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZXBvc2l0VG9Nb3JwaG9WYXVsdChwYXJhbXM6IERlcG9zaXRUb1ZhdWx0T3B0aW9ucyk6IFByb21pc2U8TW9ycGhvRGVwb3NpdFJlc3VsdD4ge1xuICAgIC8vIFRPRE8oQ0dELTE3MDkpOiBSZS1lbmFibGUgYWN0aXZlIG9wZXJhdGlvbiBwcmUtZmxpZ2h0IGNoZWNrIG9uY2UgdGhlXG4gICAgLy8gZGVmaS1zZXJ2aWNlIG9wZXJhdGlvbnMgZW5kcG9pbnQgaXMgZGVwbG95ZWQgYW5kIHJldHVybmluZyBhY3RpdmUgc3RhdGUuXG4gICAgLy8gY29uc3QgYWN0aXZlT3BzOiBEZWZpT3BlcmF0aW9uTGlzdFJlc3VsdCA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAvLyAgIC5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMub3BlcmF0aW9uc1VybCgpKSlcbiAgICAvLyAgIC5xdWVyeSh7IHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLCBzdGF0ZTogJ2FjdGl2ZScgfSlcbiAgICAvLyAgIC5yZXN1bHQoKTtcbiAgICAvL1xuICAgIC8vIGlmIChhY3RpdmVPcHMuaXRlbXMgJiYgYWN0aXZlT3BzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgIHRocm93IG5ldyBBY3RpdmVPcGVyYXRpb25FeGlzdHNFcnJvcihhY3RpdmVPcHMuaXRlbXNbMF0ub3BlcmF0aW9uSWQpO1xuICAgIC8vIH1cblxuICAgIC8vIFN0ZXAgMTogQXBwcm92ZSB0eFJlcXVlc3QgdmlhIHNlbmRNYW55XG4gICAgY29uc3QgYXBwcm92ZVJlc3VsdCA9IGF3YWl0IHRoaXMud2FsbGV0LnNlbmRNYW55KHtcbiAgICAgIHR5cGU6ICdkZWZpQXBwcm92ZScsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXBwcm92ZVR4UmVxdWVzdElkID0gdGhpcy5leHRyYWN0VHhSZXF1ZXN0SWQoYXBwcm92ZVJlc3VsdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSB0aGlzLmV4dHJhY3RPcGVyYXRpb25JZChhcHByb3ZlUmVzdWx0KTtcblxuICAgIGlmICghb3BlcmF0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3BlcmF0aW9uSWQgbm90IGZvdW5kIGluIGFwcHJvdmUgdHhSZXF1ZXN0IHJlc3BvbnNlJyk7XG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBEZXBvc2l0IHR4UmVxdWVzdCB2aWEgc2VuZE1hbnlcbiAgICBjb25zdCBkZXBvc2l0UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmlEZXBvc2l0JyxcbiAgICAgIGRlZmlQYXJhbXM6IHtcbiAgICAgICAgdmF1bHRJZDogcGFyYW1zLnZhdWx0SWQsXG4gICAgICAgIGFtb3VudDogcGFyYW1zLmFtb3VudCxcbiAgICAgICAgb3BlcmF0aW9uSWQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRlcG9zaXRUeFJlcXVlc3RJZCA9IHRoaXMuZXh0cmFjdFR4UmVxdWVzdElkKGRlcG9zaXRSZXN1bHQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdGlvbklkLFxuICAgICAgdHhSZXF1ZXN0SWRzOiB7XG4gICAgICAgIGFwcHJvdmU6IGFwcHJvdmVUeFJlcXVlc3RJZCxcbiAgICAgICAgZGVwb3NpdDogZGVwb3NpdFR4UmVxdWVzdElkLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBhIHBhcnRpYWxseS1jb21wbGV0ZWQgZGVwb3NpdC4gQ2FsbCB0aGlzIHdoZW4gdGhlIFNESyBwcm9jZXNzIGRpZWRcbiAgICogYmV0d2VlbiB0aGUgYXBwcm92ZSBhbmQgZGVwb3NpdCB0eFJlcXVlc3QgY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMub3BlcmF0aW9uSWQgLSB0aGUgb3BlcmF0aW9uSWQgZnJvbSB0aGUgb3JpZ2luYWwgZGVwb3NpdFRvVmF1bHQgY2FsbFxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSByZXF1aXJlZCBmb3IgaG90IHdhbGxldHMsIG9taXQgZm9yIGN1c3RvZHlcbiAgICovXG4gIGFzeW5jIHJlc3VtZURlcG9zaXQocGFyYW1zOiBSZXN1bWVEZXBvc2l0T3B0aW9ucyk6IFByb21pc2U8RGVwb3NpdFJlc3VsdD4ge1xuICAgIGlmICghcGFyYW1zLm9wZXJhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZXJhdGlvbklkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggdGhlIG9wZXJhdGlvbiB0byBnZXQgdGhlIHZhdWx0IGFuZCBhbW91bnQgZGV0YWlsc1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGF3YWl0IHRoaXMuZ2V0T3BlcmF0aW9uKHsgb3BlcmF0aW9uSWQ6IHBhcmFtcy5vcGVyYXRpb25JZCB9KTtcblxuICAgIGlmIChvcGVyYXRpb24uYXNzb2NpYXRlZFR4UmVxdWVzdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcG9zaXQgdHhSZXF1ZXN0IGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIG9wZXJhdGlvbjsgbm90aGluZyB0byByZXN1bWUnKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wZXJhdGlvbi50eFJlcXVlc3RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcHByb3ZlIHR4UmVxdWVzdCBub3QgZm91bmQgZm9yIHRoaXMgb3BlcmF0aW9uOyBjYW5ub3QgcmVzdW1lJyk7XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgdGhlIGRlcG9zaXQgdHhSZXF1ZXN0IHVzaW5nIHRoZSBleGlzdGluZyBvcGVyYXRpb24ncyBkZXRhaWxzXG4gICAgY29uc3QgZGVwb3NpdFJlc3VsdCA9IGF3YWl0IHRoaXMud2FsbGV0LnNlbmRNYW55KHtcbiAgICAgIHR5cGU6ICdkZWZpRGVwb3NpdCcsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IG9wZXJhdGlvbi52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IG9wZXJhdGlvbi5hc3NldEFtb3VudCxcbiAgICAgICAgb3BlcmF0aW9uSWQ6IHBhcmFtcy5vcGVyYXRpb25JZCxcbiAgICAgIH0sXG4gICAgICAuLi4ocGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyB7IHdhbGxldFBhc3NwaHJhc2U6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0gOiB7fSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0aW9uSWQ6IHBhcmFtcy5vcGVyYXRpb25JZCxcbiAgICAgIHR4UmVxdWVzdElkczoge1xuICAgICAgICBhcHByb3ZlOiBvcGVyYXRpb24udHhSZXF1ZXN0SWQsXG4gICAgICAgIGRlcG9zaXQ6IHRoaXMuZXh0cmFjdFR4UmVxdWVzdElkKGRlcG9zaXRSZXN1bHQpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIERlRmkgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zLm9wZXJhdGlvbklkIC0gdGhlIG9wZXJhdGlvbiB0byByZXRyaWV2ZVxuICAgKi9cbiAgYXN5bmMgZ2V0T3BlcmF0aW9uKHBhcmFtczogR2V0T3BlcmF0aW9uT3B0aW9ucyk6IFByb21pc2U8RGVmaU9wZXJhdGlvbj4ge1xuICAgIGlmICghcGFyYW1zLm9wZXJhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZXJhdGlvbklkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLm9wZXJhdGlvbnNVcmwoKSArICcvJyArIHBhcmFtcy5vcGVyYXRpb25JZCkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb3BlcmF0aW9ucyBmb3IgYSB2YXVsdCBmaWx0ZXJlZCBieSB3YWxsZXRJZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy52YXVsdElkIC0gdmF1bHQgdG8gbGlzdCBvcGVyYXRpb25zIGZvclxuICAgKiBAcGFyYW0gcGFyYW1zLnN0YXRlIC0gb3B0aW9uYWwgc3RhdGUgZmlsdGVyXG4gICAqIEBwYXJhbSBwYXJhbXMudHlwZSAtIG9wdGlvbmFsIHR5cGUgZmlsdGVyIChERVBPU0lUIHwgV0lUSERSQVcpXG4gICAqIEBwYXJhbSBwYXJhbXMubGltaXQgLSBwYWdlIHNpemVcbiAgICogQHBhcmFtIHBhcmFtcy5jdXJzb3IgLSBwYWdpbmF0aW9uIGN1cnNvclxuICAgKi9cbiAgYXN5bmMgbGlzdE9wZXJhdGlvbnMocGFyYW1zOiBMaXN0T3BlcmF0aW9uc09wdGlvbnMpOiBQcm9taXNlPERlZmlPcGVyYXRpb25MaXN0UmVzdWx0PiB7XG4gICAgaWYgKCFwYXJhbXMudmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YXVsdElkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7XG4gICAgICB2YXVsdElkOiBwYXJhbXMudmF1bHRJZCxcbiAgICB9O1xuICAgIGlmIChwYXJhbXMuc3RhdGUpIHF1ZXJ5LnN0YXRlID0gcGFyYW1zLnN0YXRlO1xuICAgIGlmIChwYXJhbXMudHlwZSkgcXVlcnkudHlwZSA9IHBhcmFtcy50eXBlO1xuICAgIGlmIChwYXJhbXMubGltaXQpIHF1ZXJ5LmxpbWl0ID0gcGFyYW1zLmxpbWl0O1xuICAgIGlmIChwYXJhbXMuY3Vyc29yKSBxdWVyeS5jdXJzb3IgPSBwYXJhbXMuY3Vyc29yO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLm9wZXJhdGlvbnNVcmwoKSkpLnF1ZXJ5KHF1ZXJ5KS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyB2YXVsdCBzaGFyZXMgZnJvbSBhIERlRmkgdmF1bHQuXG4gICAqXG4gICAqIElzc3VlcyBhIHNpbmdsZSBzZW5kTWFueSBjYWxsIChkZWZpV2l0aGRyYXcpIGFuZCByZXR1cm5zIHRoZSBvcGVyYXRpb25JZFxuICAgKiBhbmQgdHhSZXF1ZXN0SWQuIFRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3aXRoZHJhd2FsIGlzIHNpbXBsZXIgdGhhbiBkZXBvc2l0OlxuICAgKiBDUkVBVEVEIOKGkiBXSVRIRFJBV19UWF9SRVFVRVNURUQg4oaSIFdJVEhEUkFXX1NJR05FRCDihpIgV0lUSERSQVdfQ09ORklSTUVEIOKGkiBDT01QTEVURURcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy52YXVsdElkIC0gRGVGaS1zZXJ2aWNlIHZhdWx0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHBhcmFtcy5hbW91bnQgLSBhbW91bnQgaW4gYmFzZSB1bml0cyBvZiB0aGUgdmF1bHQgc2hhcmUgdG9rZW5cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIC0gcmVxdWlyZWQgZm9yIGhvdCB3YWxsZXRzLCBvbWl0IGZvciBjdXN0b2R5XG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0Zyb21WYXVsdChwYXJhbXM6IFdpdGhkcmF3RnJvbVZhdWx0T3B0aW9ucyk6IFByb21pc2U8V2l0aGRyYXdSZXN1bHQ+IHtcbiAgICBpZiAoIXBhcmFtcy52YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhdWx0SWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMuYW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHdpdGhkcmF3UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmlXaXRoZHJhdycsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSB0aGlzLmV4dHJhY3RUeFJlcXVlc3RJZCh3aXRoZHJhd1Jlc3VsdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSB0aGlzLmV4dHJhY3RPcGVyYXRpb25JZCh3aXRoZHJhd1Jlc3VsdCk7XG5cbiAgICBpZiAoIW9wZXJhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZXJhdGlvbklkIG5vdCBmb3VuZCBpbiB3aXRoZHJhdyB0eFJlcXVlc3QgcmVzcG9uc2UnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBvcGVyYXRpb25JZCwgdHhSZXF1ZXN0SWQgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHR4UmVxdWVzdElkIGZyb20gYSBzZW5kTWFueSByZXN1bHQuXG4gICAqIHNlbmRNYW55IHJldHVybnMgZGlmZmVyZW50IHNoYXBlcyBkZXBlbmRpbmcgb24gd2FsbGV0IHR5cGU6XG4gICAqIC0gVFNTIGZ1bGw6IHsgdHhSZXF1ZXN0OiB7IHR4UmVxdWVzdElkIH0gfSBvciB7IHBlbmRpbmdBcHByb3ZhbCwgdHhSZXF1ZXN0IH1cbiAgICogLSBUU1MgbGl0ZTogcmVzdWx0IGZyb20gdHNzVXRpbHMuc2VuZFR4UmVxdWVzdFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0VHhSZXF1ZXN0SWQoc2VuZE1hbnlSZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eFJlcXVlc3QgPSBzZW5kTWFueVJlc3VsdC50eFJlcXVlc3QgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHR4UmVxdWVzdD8udHhSZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQgYXMgc3RyaW5nO1xuICAgIH1cbiAgICBpZiAoc2VuZE1hbnlSZXN1bHQudHhSZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybiBzZW5kTWFueVJlc3VsdC50eFJlcXVlc3RJZCBhcyBzdHJpbmc7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndHhSZXF1ZXN0SWQgbm90IGZvdW5kIGluIHNlbmRNYW55IHJlc3BvbnNlJyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBvcGVyYXRpb25JZCBmcm9tIGEgc2VuZE1hbnkgcmVzdWx0LlxuICAgKlxuICAgKiBUaGUgV1Agd3JpdGVzIHRoZSBkZWZpLXNlcnZpY2UtbWludGVkIG9wZXJhdGlvbklkIGludG8gdGhlIGJ1aWx0XG4gICAqIHRyYW5zYWN0aW9uJ3MgYGNvaW5TcGVjaWZpY2AgKGFsb25nc2lkZSBgYXNzaWduZWROb25jZWApLCBub3QgaW50byB0aGVcbiAgICogaW50ZW50LiBSZWFkIGl0IGZyb20gdGhlcmU6IHRoZSBgZnVsbGAgYXBpVmVyc2lvbiBzdXJmYWNlcyBpdCBhdFxuICAgKiBgdHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLm9wZXJhdGlvbklkYCwgdGhlIGBsaXRlYCB2ZXJzaW9uXG4gICAqIGF0IGB1bnNpZ25lZFR4c1swXS5jb2luU3BlY2lmaWMub3BlcmF0aW9uSWRgLiBGYWxsIGJhY2sgdG9cbiAgICogYGludGVudC5vcGVyYXRpb25JZGAgZm9yIGZvcndhcmQtY29tcGF0IGluIGNhc2UgdGhlIFdQIGxhdGVyIGFsc29cbiAgICogcG9wdWxhdGVzIHRoZSBpbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RPcGVyYXRpb25JZChzZW5kTWFueVJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR4UmVxdWVzdCA9IHNlbmRNYW55UmVzdWx0LnR4UmVxdWVzdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXR4UmVxdWVzdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBmdWxsIGFwaVZlcnNpb246IHRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LmNvaW5TcGVjaWZpYy5vcGVyYXRpb25JZFxuICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZ1bGxVbnNpZ25lZFR4ID0gdHJhbnNhY3Rpb25zPy5bMF0/LnVuc2lnbmVkVHggYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVsbENvaW5TcGVjaWZpYyA9IGZ1bGxVbnNpZ25lZFR4Py5jb2luU3BlY2lmaWMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKGZ1bGxDb2luU3BlY2lmaWM/Lm9wZXJhdGlvbklkKSB7XG4gICAgICByZXR1cm4gZnVsbENvaW5TcGVjaWZpYy5vcGVyYXRpb25JZCBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gbGl0ZSBhcGlWZXJzaW9uOiB1bnNpZ25lZFR4c1swXS5jb2luU3BlY2lmaWMub3BlcmF0aW9uSWRcbiAgICBjb25zdCB1bnNpZ25lZFR4cyA9IHR4UmVxdWVzdC51bnNpZ25lZFR4cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGl0ZUNvaW5TcGVjaWZpYyA9IHVuc2lnbmVkVHhzPy5bMF0/LmNvaW5TcGVjaWZpYyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAobGl0ZUNvaW5TcGVjaWZpYz8ub3BlcmF0aW9uSWQpIHtcbiAgICAgIHJldHVybiBsaXRlQ29pblNwZWNpZmljLm9wZXJhdGlvbklkIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvLyBmb3J3YXJkLWNvbXBhdDogaW50ZW50Lm9wZXJhdGlvbklkIChpbiBjYXNlIHRoZSBXUCBsYXRlciBwb3B1bGF0ZXMgdGhlIGludGVudClcbiAgICBjb25zdCBpbnRlbnQgPSB0eFJlcXVlc3QuaW50ZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBpbnRlbnQ/Lm9wZXJhdGlvbklkIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyB7QGxpbmsgQ29uY3JldGVEZXBvc2l0UmVzdWx0fSBmcm9tIGEgY3VzdG9kaWFsIHNlbmRNYW55IHJlc3BvbnNlLlxuICAgKiBDb25jcmV0ZSBCVEMgZGVwb3NpdHMgcmV0dXJuIGEgYHBlbmRpbmdBcHByb3ZhbGAgaW5zdGVhZCBvZiBhIHR4UmVxdWVzdCDigJRcbiAgICogdGhyb3dzIGlmIGBwZW5kaW5nQXBwcm92YWwuaWRgIGlzIGFic2VudCwgaW5kaWNhdGluZyBhbiB1bmV4cGVjdGVkIHNoYXBlLlxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0Q29uY3JldGVEZXBvc2l0UmVzdWx0KHNlbmRNYW55UmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IENvbmNyZXRlRGVwb3NpdFJlc3VsdCB7XG4gICAgY29uc3QgU2VuZE1hbnlDb25jcmV0ZVJlc3BvbnNlID0gdC50eXBlKHtcbiAgICAgIHBlbmRpbmdBcHByb3ZhbDogdC5pbnRlcnNlY3Rpb24oW3QudHlwZSh7IGlkOiB0LnN0cmluZyB9KSwgdC5wYXJ0aWFsKHsgc3RhdGU6IHQuc3RyaW5nIH0pXSksXG4gICAgfSk7XG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVdpdGhDb2RlYyhTZW5kTWFueUNvbmNyZXRlUmVzcG9uc2UsIHNlbmRNYW55UmVzdWx0LCAnZGVmaS1kZXBvc2l0IHNlbmRNYW55IHJlc3BvbnNlJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiBkZWNvZGVkLnBlbmRpbmdBcHByb3ZhbC5pZCxcbiAgICAgIHN0YXRlOiBkZWNvZGVkLnBlbmRpbmdBcHByb3ZhbC5zdGF0ZSA/PyAnYXdhaXRpbmdTaWduYXR1cmUnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG9wZXJhdGlvbnNVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYC9hcGkvZGVmaS1zZXJ2aWNlL3YxL3dhbGxldHMvJHt0aGlzLndhbGxldC5pZCgpfS9vcGVyYXRpb25zYDtcbiAgfVxufVxuIl19