@bitgo-beta/sdk-core 8.2.1-beta.61 → 8.2.1-beta.610

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 (491) hide show
  1. package/CHANGELOG.md +2444 -0
  2. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts +0 -1
  3. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -1
  4. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +0 -1
  5. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
  6. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +1 -1
  7. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +0 -1
  8. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +1 -1
  9. package/dist/src/account-lib/baseCoin/blsKeyPair.js +43 -29
  10. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +1 -0
  11. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -1
  12. package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +38 -23
  13. package/dist/src/account-lib/baseCoin/enum.d.ts +13 -2
  14. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  15. package/dist/src/account-lib/baseCoin/enum.js +25 -5
  16. package/dist/src/account-lib/baseCoin/errors.js +1 -1
  17. package/dist/src/account-lib/baseCoin/iface.d.ts +18 -15
  18. package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
  19. package/dist/src/account-lib/baseCoin/iface.js +10 -7
  20. package/dist/src/account-lib/baseCoin/index.js +6 -2
  21. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +0 -1
  22. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -1
  23. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +31 -17
  24. package/dist/src/account-lib/index.js +23 -9
  25. package/dist/src/account-lib/mpc/curves/ed25519.d.ts +4 -18
  26. package/dist/src/account-lib/mpc/curves/ed25519.d.ts.map +1 -1
  27. package/dist/src/account-lib/mpc/curves/ed25519.js +6 -60
  28. package/dist/src/account-lib/mpc/index.d.ts +4 -4
  29. package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
  30. package/dist/src/account-lib/mpc/index.js +11 -7
  31. package/dist/src/account-lib/mpc/shamir.d.ts +5 -37
  32. package/dist/src/account-lib/mpc/shamir.d.ts.map +1 -1
  33. package/dist/src/account-lib/mpc/shamir.js +6 -130
  34. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +38 -9
  35. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
  36. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +495 -347
  37. package/dist/src/account-lib/mpc/tss/ecdsa/index.js +23 -9
  38. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +2 -2
  39. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
  40. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +3 -3
  41. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +73 -52
  42. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
  43. package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
  44. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +1 -2
  45. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -1
  46. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +65 -67
  47. package/dist/src/account-lib/mpc/tss/eddsa/index.js +23 -9
  48. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +1 -1
  49. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -1
  50. package/dist/src/account-lib/mpc/tss/eddsa/types.js +1 -1
  51. package/dist/src/account-lib/mpc/tss/index.js +23 -9
  52. package/dist/src/account-lib/mpc/util.d.ts +7 -1
  53. package/dist/src/account-lib/mpc/util.d.ts.map +1 -1
  54. package/dist/src/account-lib/mpc/util.js +20 -1
  55. package/dist/src/account-lib/staking/index.js +6 -2
  56. package/dist/src/account-lib/staking/utils.js +3 -3
  57. package/dist/src/account-lib/util/crypto.d.ts +8 -2
  58. package/dist/src/account-lib/util/crypto.d.ts.map +1 -1
  59. package/dist/src/account-lib/util/crypto.js +61 -31
  60. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +2 -1
  61. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -1
  62. package/dist/src/account-lib/util/ed25519KeyDeriver.js +5 -3
  63. package/dist/src/api/bip32path.js +2 -3
  64. package/dist/src/api/index.js +6 -2
  65. package/dist/src/api/types.d.ts +1 -0
  66. package/dist/src/api/types.d.ts.map +1 -1
  67. package/dist/src/api/types.js +1 -1
  68. package/dist/src/bitgo/address-book/address-book.d.ts +61 -0
  69. package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -0
  70. package/dist/src/bitgo/address-book/address-book.js +142 -0
  71. package/dist/src/bitgo/address-book/index.d.ts +3 -0
  72. package/dist/src/bitgo/address-book/index.d.ts.map +1 -0
  73. package/dist/src/bitgo/address-book/index.js +19 -0
  74. package/dist/src/bitgo/address-book/types.d.ts +170 -0
  75. package/dist/src/bitgo/address-book/types.d.ts.map +1 -0
  76. package/dist/src/bitgo/address-book/types.js +3 -0
  77. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +57 -4
  78. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  79. package/dist/src/bitgo/baseCoin/baseCoin.js +96 -10
  80. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +77 -19
  81. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  82. package/dist/src/bitgo/baseCoin/iBaseCoin.js +2 -2
  83. package/dist/src/bitgo/baseCoin/index.js +6 -2
  84. package/dist/src/bitgo/bip32util.d.ts +0 -1
  85. package/dist/src/bitgo/bip32util.d.ts.map +1 -1
  86. package/dist/src/bitgo/bip32util.js +25 -12
  87. package/dist/src/bitgo/bitcoin.d.ts +0 -1
  88. package/dist/src/bitgo/bitcoin.d.ts.map +1 -1
  89. package/dist/src/bitgo/bitcoin.js +26 -13
  90. package/dist/src/bitgo/bitgoBase.d.ts +4 -1
  91. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  92. package/dist/src/bitgo/bitgoBase.js +1 -1
  93. package/dist/src/bitgo/coinFactory.d.ts +1 -1
  94. package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
  95. package/dist/src/bitgo/coinFactory.js +1 -1
  96. package/dist/src/bitgo/config.d.ts +49 -25
  97. package/dist/src/bitgo/config.d.ts.map +1 -1
  98. package/dist/src/bitgo/config.js +25 -11
  99. package/dist/src/bitgo/ecdh.d.ts +0 -1
  100. package/dist/src/bitgo/ecdh.d.ts.map +1 -1
  101. package/dist/src/bitgo/ecdh.js +26 -13
  102. package/dist/src/bitgo/enterprise/enterprise.d.ts +16 -14
  103. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
  104. package/dist/src/bitgo/enterprise/enterprise.js +62 -28
  105. package/dist/src/bitgo/enterprise/enterprises.d.ts +6 -0
  106. package/dist/src/bitgo/enterprise/enterprises.d.ts.map +1 -1
  107. package/dist/src/bitgo/enterprise/enterprises.js +48 -9
  108. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +6 -7
  109. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
  110. package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
  111. package/dist/src/bitgo/enterprise/iEnterprises.d.ts +2 -0
  112. package/dist/src/bitgo/enterprise/iEnterprises.d.ts.map +1 -1
  113. package/dist/src/bitgo/enterprise/iEnterprises.js +1 -1
  114. package/dist/src/bitgo/enterprise/index.js +6 -2
  115. package/dist/src/bitgo/environments.d.ts +26 -5
  116. package/dist/src/bitgo/environments.d.ts.map +1 -1
  117. package/dist/src/bitgo/environments.js +44 -15
  118. package/dist/src/bitgo/errors.d.ts +3 -0
  119. package/dist/src/bitgo/errors.d.ts.map +1 -1
  120. package/dist/src/bitgo/errors.js +8 -2
  121. package/dist/src/bitgo/index.d.ts +1 -0
  122. package/dist/src/bitgo/index.d.ts.map +1 -1
  123. package/dist/src/bitgo/index.js +24 -9
  124. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts +3 -3
  125. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts.map +1 -1
  126. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.js +1 -1
  127. package/dist/src/bitgo/inscriptionBuilder/index.js +6 -2
  128. package/dist/src/bitgo/internal/index.js +6 -2
  129. package/dist/src/bitgo/internal/internal.js +5 -6
  130. package/dist/src/bitgo/internal/keycard.js +6 -7
  131. package/dist/src/bitgo/keychain/decryptKeychain.d.ts +13 -0
  132. package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -0
  133. package/dist/src/bitgo/keychain/decryptKeychain.js +36 -0
  134. package/dist/src/bitgo/keychain/iKeychains.d.ts +62 -4
  135. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  136. package/dist/src/bitgo/keychain/iKeychains.js +2 -2
  137. package/dist/src/bitgo/keychain/index.d.ts +1 -0
  138. package/dist/src/bitgo/keychain/index.d.ts.map +1 -1
  139. package/dist/src/bitgo/keychain/index.js +7 -2
  140. package/dist/src/bitgo/keychain/keychains.d.ts +13 -3
  141. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  142. package/dist/src/bitgo/keychain/keychains.js +124 -23
  143. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts +63 -33
  144. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts.map +1 -1
  145. package/dist/src/bitgo/keychain/ovcJsonCodec.js +35 -16
  146. package/dist/src/bitgo/legacyBitcoin.d.ts +0 -1
  147. package/dist/src/bitgo/legacyBitcoin.d.ts.map +1 -1
  148. package/dist/src/bitgo/legacyBitcoin.js +27 -13
  149. package/dist/src/bitgo/lightning/codecs.d.ts +143 -0
  150. package/dist/src/bitgo/lightning/codecs.d.ts.map +1 -0
  151. package/dist/src/bitgo/lightning/codecs.js +85 -0
  152. package/dist/src/bitgo/lightning/{iLightning.d.ts → custodial/iLightning.d.ts} +12 -12
  153. package/dist/src/bitgo/lightning/custodial/iLightning.d.ts.map +1 -0
  154. package/dist/src/bitgo/lightning/custodial/iLightning.js +120 -0
  155. package/dist/src/bitgo/lightning/custodial/index.d.ts +5 -0
  156. package/dist/src/bitgo/lightning/custodial/index.d.ts.map +1 -0
  157. package/dist/src/bitgo/lightning/custodial/index.js +21 -0
  158. package/dist/src/bitgo/lightning/{lightning.d.ts → custodial/lightning.d.ts} +2 -2
  159. package/dist/src/bitgo/lightning/custodial/lightning.d.ts.map +1 -0
  160. package/dist/src/bitgo/lightning/custodial/lightning.js +111 -0
  161. package/dist/src/bitgo/lightning/custodial/lightningUtils.d.ts +46 -0
  162. package/dist/src/bitgo/lightning/custodial/lightningUtils.d.ts.map +1 -0
  163. package/dist/src/bitgo/lightning/custodial/lightningUtils.js +146 -0
  164. package/dist/src/bitgo/lightning/custodial/lnurlCodec.d.ts.map +1 -0
  165. package/dist/src/bitgo/lightning/custodial/lnurlCodec.js +27 -0
  166. package/dist/src/bitgo/lightning/index.d.ts +4 -3
  167. package/dist/src/bitgo/lightning/index.d.ts.map +1 -1
  168. package/dist/src/bitgo/lightning/index.js +10 -5
  169. package/dist/src/bitgo/lightning/lightningUtils.d.ts +58 -45
  170. package/dist/src/bitgo/lightning/lightningUtils.d.ts.map +1 -1
  171. package/dist/src/bitgo/lightning/lightningUtils.js +190 -99
  172. package/dist/src/bitgo/lightning/lightningWallet.d.ts +18 -0
  173. package/dist/src/bitgo/lightning/lightningWallet.d.ts.map +1 -0
  174. package/dist/src/bitgo/lightning/lightningWallet.js +66 -0
  175. package/dist/src/bitgo/lightning/signableJson.d.ts +17 -0
  176. package/dist/src/bitgo/lightning/signableJson.d.ts.map +1 -0
  177. package/dist/src/bitgo/lightning/signableJson.js +29 -0
  178. package/dist/src/bitgo/lightning/signature.d.ts +22 -0
  179. package/dist/src/bitgo/lightning/signature.d.ts.map +1 -0
  180. package/dist/src/bitgo/lightning/signature.js +69 -0
  181. package/dist/src/bitgo/market/iMarkets.d.ts +2 -2
  182. package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -1
  183. package/dist/src/bitgo/market/index.js +6 -2
  184. package/dist/src/bitgo/market/markets.js +23 -9
  185. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +2 -0
  186. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
  187. package/dist/src/bitgo/pendingApproval/iPendingApproval.js +4 -4
  188. package/dist/src/bitgo/pendingApproval/index.js +6 -2
  189. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +20 -8
  190. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
  191. package/dist/src/bitgo/pendingApproval/pendingApproval.js +204 -107
  192. package/dist/src/bitgo/pendingApproval/pendingApprovals.js +23 -9
  193. package/dist/src/bitgo/recovery/index.js +6 -2
  194. package/dist/src/bitgo/recovery/initiate.d.ts +8 -2
  195. package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
  196. package/dist/src/bitgo/recovery/initiate.js +7 -8
  197. package/dist/src/bitgo/staking/iStakingWallet.d.ts +89 -5
  198. package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
  199. package/dist/src/bitgo/staking/iStakingWallet.js +2 -2
  200. package/dist/src/bitgo/staking/index.js +6 -2
  201. package/dist/src/bitgo/staking/stakingWallet.d.ts +13 -2
  202. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  203. package/dist/src/bitgo/staking/stakingWallet.js +38 -2
  204. package/dist/src/bitgo/trading/iTradingAccount.d.ts +2 -32
  205. package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
  206. package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
  207. package/dist/src/bitgo/trading/index.d.ts +1 -15
  208. package/dist/src/bitgo/trading/index.d.ts.map +1 -1
  209. package/dist/src/bitgo/trading/index.js +7 -17
  210. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts +8 -0
  211. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts.map +1 -0
  212. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.js +31 -0
  213. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts +8 -0
  214. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts.map +1 -0
  215. package/dist/src/bitgo/trading/network/decrypt-rsa.js +23 -0
  216. package/dist/src/bitgo/trading/network/decrypt.d.ts +14 -0
  217. package/dist/src/bitgo/trading/network/decrypt.d.ts.map +1 -0
  218. package/dist/src/bitgo/trading/network/decrypt.js +23 -0
  219. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts +8 -0
  220. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts.map +1 -0
  221. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.js +25 -0
  222. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts +8 -0
  223. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts.map +1 -0
  224. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.js +65 -0
  225. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts +8 -0
  226. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts.map +1 -0
  227. package/dist/src/bitgo/trading/network/encrypt-rsa.js +23 -0
  228. package/dist/src/bitgo/trading/network/encrypt.d.ts +37 -0
  229. package/dist/src/bitgo/trading/network/encrypt.d.ts.map +1 -0
  230. package/dist/src/bitgo/trading/network/encrypt.js +58 -0
  231. package/dist/src/bitgo/trading/network/index.d.ts +5 -0
  232. package/dist/src/bitgo/trading/network/index.d.ts.map +1 -0
  233. package/dist/src/bitgo/trading/network/index.js +21 -0
  234. package/dist/src/bitgo/trading/network/network.d.ts +36 -0
  235. package/dist/src/bitgo/trading/network/network.d.ts.map +1 -0
  236. package/dist/src/bitgo/trading/network/network.js +101 -0
  237. package/dist/src/bitgo/trading/network/types.d.ts +277 -0
  238. package/dist/src/bitgo/trading/network/types.d.ts.map +1 -0
  239. package/dist/src/bitgo/trading/network/types.js +3 -0
  240. package/dist/src/bitgo/trading/network/utils.d.ts +20 -0
  241. package/dist/src/bitgo/trading/network/utils.d.ts.map +1 -0
  242. package/dist/src/bitgo/trading/network/utils.js +54 -0
  243. package/dist/src/bitgo/trading/tradingAccount.d.ts +11 -35
  244. package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
  245. package/dist/src/bitgo/trading/tradingAccount.js +9 -96
  246. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +27 -0
  247. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
  248. package/dist/src/bitgo/tss/bitgoPubKeys.js +61 -0
  249. package/dist/src/bitgo/tss/common.d.ts +37 -5
  250. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  251. package/dist/src/bitgo/tss/common.js +83 -17
  252. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +6 -4
  253. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  254. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +75 -59
  255. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts +15 -0
  256. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  257. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +152 -0
  258. package/dist/src/bitgo/tss/ecdsa/index.d.ts +1 -0
  259. package/dist/src/bitgo/tss/ecdsa/index.d.ts.map +1 -1
  260. package/dist/src/bitgo/tss/ecdsa/index.js +25 -10
  261. package/dist/src/bitgo/tss/ecdsa/types.d.ts +27 -27
  262. package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
  263. package/dist/src/bitgo/tss/ecdsa/types.js +3 -3
  264. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +11 -8
  265. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
  266. package/dist/src/bitgo/tss/eddsa/eddsa.js +38 -38
  267. package/dist/src/bitgo/tss/eddsa/index.js +23 -9
  268. package/dist/src/bitgo/tss/eddsa/types.d.ts +4 -4
  269. package/dist/src/bitgo/tss/eddsa/types.d.ts.map +1 -1
  270. package/dist/src/bitgo/tss/index.d.ts +3 -2
  271. package/dist/src/bitgo/tss/index.d.ts.map +1 -1
  272. package/dist/src/bitgo/tss/index.js +26 -10
  273. package/dist/src/bitgo/tss/types.d.ts +16 -1
  274. package/dist/src/bitgo/tss/types.d.ts.map +1 -1
  275. package/dist/src/bitgo/tss/types.js +2 -2
  276. package/dist/src/bitgo/types.d.ts +3 -3
  277. package/dist/src/bitgo/types.d.ts.map +1 -1
  278. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +11 -0
  279. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -1
  280. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +66 -10
  281. package/dist/src/bitgo/utils/blsUtils.js +5 -5
  282. package/dist/src/bitgo/utils/codecProps.d.ts +7 -0
  283. package/dist/src/bitgo/utils/codecProps.d.ts.map +1 -0
  284. package/dist/src/bitgo/utils/codecProps.js +54 -0
  285. package/dist/src/bitgo/utils/decode.d.ts.map +1 -1
  286. package/dist/src/bitgo/utils/decode.js +30 -16
  287. package/dist/src/bitgo/utils/index.d.ts +2 -0
  288. package/dist/src/bitgo/utils/index.d.ts.map +1 -1
  289. package/dist/src/bitgo/utils/index.js +25 -9
  290. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  291. package/dist/src/bitgo/utils/mpcUtils.js +15 -12
  292. package/dist/src/bitgo/utils/notEmpty.d.ts +2 -0
  293. package/dist/src/bitgo/utils/notEmpty.d.ts.map +1 -0
  294. package/dist/src/bitgo/utils/notEmpty.js +7 -0
  295. package/dist/src/bitgo/utils/opengpgUtils.d.ts +11 -4
  296. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
  297. package/dist/src/bitgo/utils/opengpgUtils.js +67 -54
  298. package/dist/src/bitgo/utils/postWithCodec.d.ts +18 -0
  299. package/dist/src/bitgo/utils/postWithCodec.d.ts.map +1 -0
  300. package/dist/src/bitgo/utils/postWithCodec.js +25 -0
  301. package/dist/src/bitgo/utils/promise-utils.d.ts +1 -1
  302. package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -1
  303. package/dist/src/bitgo/utils/promise-utils.js +2 -3
  304. package/dist/src/bitgo/utils/triple.d.ts +1 -1
  305. package/dist/src/bitgo/utils/triple.d.ts.map +1 -1
  306. package/dist/src/bitgo/utils/triple.js +2 -3
  307. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +53 -8
  308. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  309. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +169 -22
  310. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +225 -20
  311. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  312. package/dist/src/bitgo/utils/tss/baseTypes.js +26 -7
  313. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts +23 -0
  314. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts.map +1 -0
  315. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.js +157 -0
  316. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts +30 -0
  317. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts.map +1 -0
  318. package/dist/src/bitgo/utils/tss/ecdsa/base.js +51 -0
  319. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +48 -32
  320. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  321. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +269 -163
  322. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +199 -0
  323. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  324. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +935 -0
  325. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +8 -0
  326. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -0
  327. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +13 -0
  328. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +4 -0
  329. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
  330. package/dist/src/bitgo/utils/tss/ecdsa/index.js +10 -2
  331. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +15 -7
  332. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
  333. package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
  334. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +107 -0
  335. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -0
  336. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +55 -0
  337. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +5 -3
  338. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  339. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +68 -53
  340. package/dist/src/bitgo/utils/tss/eddsa/index.js +23 -9
  341. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +7 -7
  342. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
  343. package/dist/src/bitgo/utils/tss/index.js +23 -9
  344. package/dist/src/bitgo/utils/util.js +24 -10
  345. package/dist/src/bitgo/utils/wallet.d.ts +7 -0
  346. package/dist/src/bitgo/utils/wallet.d.ts.map +1 -0
  347. package/dist/src/bitgo/utils/wallet.js +48 -0
  348. package/dist/src/bitgo/wallet/BuildParams.d.ts +119 -0
  349. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -0
  350. package/dist/src/bitgo/wallet/BuildParams.js +140 -0
  351. package/dist/src/bitgo/wallet/iWallet.d.ts +183 -14
  352. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  353. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  354. package/dist/src/bitgo/wallet/iWallets.d.ts +61 -13
  355. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  356. package/dist/src/bitgo/wallet/iWallets.js +42 -2
  357. package/dist/src/bitgo/wallet/index.js +6 -2
  358. package/dist/src/bitgo/wallet/wallet.d.ts +164 -16
  359. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  360. package/dist/src/bitgo/wallet/wallet.js +817 -286
  361. package/dist/src/bitgo/wallet/wallets.d.ts +66 -8
  362. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  363. package/dist/src/bitgo/wallet/wallets.js +604 -189
  364. package/dist/src/bitgo/webhook/index.js +6 -2
  365. package/dist/src/bitgo/webhook/webhooks.js +23 -9
  366. package/dist/src/coins/fiateur.d.ts +0 -1
  367. package/dist/src/coins/fiateur.d.ts.map +1 -1
  368. package/dist/src/coins/fiatgbp.d.ts +0 -1
  369. package/dist/src/coins/fiatgbp.d.ts.map +1 -1
  370. package/dist/src/coins/fiatusd.d.ts +0 -1
  371. package/dist/src/coins/fiatusd.d.ts.map +1 -1
  372. package/dist/src/coins/index.js +6 -2
  373. package/dist/src/coins/ofc.d.ts +0 -1
  374. package/dist/src/coins/ofc.d.ts.map +1 -1
  375. package/dist/src/coins/ofc.js +2 -2
  376. package/dist/src/coins/ofcToken.js +2 -2
  377. package/dist/src/coins/susd.d.ts +0 -1
  378. package/dist/src/coins/susd.d.ts.map +1 -1
  379. package/dist/src/common.js +27 -13
  380. package/dist/src/index.d.ts +6 -1
  381. package/dist/src/index.d.ts.map +1 -1
  382. package/dist/src/index.js +28 -11
  383. package/dist/src/units.js +5 -6
  384. package/dist/test/node.utils.d.ts +2 -0
  385. package/dist/test/node.utils.d.ts.map +1 -0
  386. package/dist/test/node.utils.js +5 -0
  387. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +2 -0
  388. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
  389. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +233 -0
  390. package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.d.ts +3 -0
  391. package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.d.ts.map +1 -0
  392. package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.js +24 -0
  393. package/dist/test/unit/bitgo/lightning/codecs.d.ts +2 -0
  394. package/dist/test/unit/bitgo/lightning/codecs.d.ts.map +1 -0
  395. package/dist/test/unit/bitgo/lightning/codecs.js +147 -0
  396. package/dist/test/unit/bitgo/lightning/createWatchOnlyFixture.d.ts +4 -0
  397. package/dist/test/unit/bitgo/lightning/createWatchOnlyFixture.d.ts.map +1 -0
  398. package/dist/test/unit/bitgo/lightning/createWatchOnlyFixture.js +1562 -0
  399. package/dist/test/unit/bitgo/lightning/lightningUtils.d.ts +2 -0
  400. package/dist/test/unit/bitgo/lightning/lightningUtils.d.ts.map +1 -0
  401. package/dist/test/unit/bitgo/lightning/lightningUtils.js +104 -0
  402. package/dist/test/unit/bitgo/lightning/signableJson.d.ts +2 -0
  403. package/dist/test/unit/bitgo/lightning/signableJson.d.ts.map +1 -0
  404. package/dist/test/unit/bitgo/lightning/signableJson.js +52 -0
  405. package/dist/test/unit/bitgo/lightning/signature.d.ts +2 -0
  406. package/dist/test/unit/bitgo/lightning/signature.d.ts.map +1 -0
  407. package/dist/test/unit/bitgo/lightning/signature.js +91 -0
  408. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts +2 -0
  409. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts.map +1 -0
  410. package/dist/test/unit/bitgo/trading/network/encrypt.js +71 -0
  411. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.d.ts +2 -0
  412. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -0
  413. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.js +45 -0
  414. package/dist/test/unit/bitgo/utils/notEmpty.d.ts +2 -0
  415. package/dist/test/unit/bitgo/utils/notEmpty.d.ts.map +1 -0
  416. package/dist/test/unit/bitgo/utils/notEmpty.js +15 -0
  417. package/dist/test/unit/bitgo/utils/postWithCodec.d.ts +2 -0
  418. package/dist/test/unit/bitgo/utils/postWithCodec.d.ts.map +1 -0
  419. package/dist/test/unit/bitgo/utils/postWithCodec.js +73 -0
  420. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts +2 -0
  421. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts.map +1 -0
  422. package/dist/test/unit/bitgo/wallet/BuildParams.js +68 -0
  423. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.d.ts +2 -0
  424. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.d.ts.map +1 -0
  425. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +58 -0
  426. package/dist/test/unit/units.d.ts +2 -0
  427. package/dist/test/unit/units.d.ts.map +1 -0
  428. package/dist/test/unit/units.js +98 -0
  429. package/dist/tsconfig.tsbuildinfo +1 -1
  430. package/package.json +28 -17
  431. package/dist/src/account-lib/mpc/hdTree.d.ts +0 -31
  432. package/dist/src/account-lib/mpc/hdTree.d.ts.map +0 -1
  433. package/dist/src/account-lib/mpc/hdTree.js +0 -141
  434. package/dist/src/account-lib/mpc/types.d.ts +0 -5
  435. package/dist/src/account-lib/mpc/types.d.ts.map +0 -1
  436. package/dist/src/account-lib/mpc/types.js +0 -3
  437. package/dist/src/bitgo/lightning/iLightning.d.ts.map +0 -1
  438. package/dist/src/bitgo/lightning/iLightning.js +0 -106
  439. package/dist/src/bitgo/lightning/lightning.d.ts.map +0 -1
  440. package/dist/src/bitgo/lightning/lightning.js +0 -111
  441. package/dist/src/bitgo/lightning/lnurlCodec.d.ts.map +0 -1
  442. package/dist/src/bitgo/lightning/lnurlCodec.js +0 -28
  443. package/dist/src/bitgo/trading/affirmation.d.ts +0 -35
  444. package/dist/src/bitgo/trading/affirmation.d.ts.map +0 -1
  445. package/dist/src/bitgo/trading/affirmation.js +0 -53
  446. package/dist/src/bitgo/trading/affirmations.d.ts +0 -23
  447. package/dist/src/bitgo/trading/affirmations.d.ts.map +0 -1
  448. package/dist/src/bitgo/trading/affirmations.js +0 -45
  449. package/dist/src/bitgo/trading/iAffirmation.d.ts +0 -15
  450. package/dist/src/bitgo/trading/iAffirmation.d.ts.map +0 -1
  451. package/dist/src/bitgo/trading/iAffirmation.js +0 -13
  452. package/dist/src/bitgo/trading/iAffirmations.d.ts +0 -10
  453. package/dist/src/bitgo/trading/iAffirmations.d.ts.map +0 -1
  454. package/dist/src/bitgo/trading/iAffirmations.js +0 -3
  455. package/dist/src/bitgo/trading/iSettlement.d.ts +0 -25
  456. package/dist/src/bitgo/trading/iSettlement.d.ts.map +0 -1
  457. package/dist/src/bitgo/trading/iSettlement.js +0 -17
  458. package/dist/src/bitgo/trading/iSettlements.d.ts +0 -19
  459. package/dist/src/bitgo/trading/iSettlements.d.ts.map +0 -1
  460. package/dist/src/bitgo/trading/iSettlements.js +0 -3
  461. package/dist/src/bitgo/trading/iTradingPartner.d.ts +0 -14
  462. package/dist/src/bitgo/trading/iTradingPartner.d.ts.map +0 -1
  463. package/dist/src/bitgo/trading/iTradingPartner.js +0 -17
  464. package/dist/src/bitgo/trading/iTradingPartners.d.ts +0 -15
  465. package/dist/src/bitgo/trading/iTradingPartners.d.ts.map +0 -1
  466. package/dist/src/bitgo/trading/iTradingPartners.js +0 -9
  467. package/dist/src/bitgo/trading/lock.d.ts +0 -16
  468. package/dist/src/bitgo/trading/lock.d.ts.map +0 -1
  469. package/dist/src/bitgo/trading/lock.js +0 -12
  470. package/dist/src/bitgo/trading/payload.d.ts +0 -22
  471. package/dist/src/bitgo/trading/payload.d.ts.map +0 -1
  472. package/dist/src/bitgo/trading/payload.js +0 -3
  473. package/dist/src/bitgo/trading/settlement.d.ts +0 -16
  474. package/dist/src/bitgo/trading/settlement.d.ts.map +0 -1
  475. package/dist/src/bitgo/trading/settlement.js +0 -21
  476. package/dist/src/bitgo/trading/settlements.d.ts +0 -32
  477. package/dist/src/bitgo/trading/settlements.d.ts.map +0 -1
  478. package/dist/src/bitgo/trading/settlements.js +0 -61
  479. package/dist/src/bitgo/trading/trade.d.ts +0 -29
  480. package/dist/src/bitgo/trading/trade.d.ts.map +0 -1
  481. package/dist/src/bitgo/trading/trade.js +0 -11
  482. package/dist/src/bitgo/trading/tradingPartner.d.ts +0 -26
  483. package/dist/src/bitgo/trading/tradingPartner.d.ts.map +0 -1
  484. package/dist/src/bitgo/trading/tradingPartner.js +0 -31
  485. package/dist/src/bitgo/trading/tradingPartners.d.ts +0 -24
  486. package/dist/src/bitgo/trading/tradingPartners.d.ts.map +0 -1
  487. package/dist/src/bitgo/trading/tradingPartners.js +0 -32
  488. package/dist/src/openssl/index.d.ts +0 -5
  489. package/dist/src/openssl/index.d.ts.map +0 -1
  490. package/dist/src/openssl/index.js +0 -9
  491. /package/dist/src/bitgo/lightning/{lnurlCodec.d.ts → custodial/lnurlCodec.d.ts} +0 -0
@@ -5,15 +5,22 @@ import { BitGoBase } from '../../bitgoBase';
5
5
  import { Keychain } from '../../keychain';
6
6
  import { IWallet, BackupProvider } from '../../wallet';
7
7
  import { MpcUtils } from '../mpcUtils';
8
- import { BitgoHeldBackupKeyShare, CustomGShareGeneratingFunction, CustomRShareGeneratingFunction, ITssUtils, PrebuildTransactionWithIntentOptions, SignatureShareRecord, TSSParams, TxRequest, TxRequestVersion, CreateKeychainParamsBase, IntentOptionsForMessage, IntentOptionsForTypedData, CreateBitGoKeychainParamsBase, CommitmentShareRecord, EncryptedSignerShareRecord, CustomCommitmentGeneratingFunction } from './baseTypes';
8
+ import { BitgoHeldBackupKeyShare, CustomGShareGeneratingFunction, CustomRShareGeneratingFunction, ITssUtils, PrebuildTransactionWithIntentOptions, SignatureShareRecord, TSSParams, TxRequest, TxRequestVersion, CreateKeychainParamsBase, IntentOptionsForMessage, IntentOptionsForTypedData, CreateBitGoKeychainParamsBase, CommitmentShareRecord, EncryptedSignerShareRecord, CustomCommitmentGeneratingFunction, TSSParamsForMessage, RequestType, CustomPaillierModulusGetterFunction, CustomKShareGeneratingFunction, CustomMuDeltaShareGeneratingFunction, CustomSShareGeneratingFunction, CustomMPCv2SigningRound1GeneratingFunction, CustomMPCv2SigningRound2GeneratingFunction, CustomMPCv2SigningRound3GeneratingFunction, TSSParamsWithPrv } from './baseTypes';
9
9
  import { GShare, SignShare } from '../../../account-lib/mpc/tss';
10
+ import * as openpgp from 'openpgp';
10
11
  /**
11
12
  * BaseTssUtil class which different signature schemes have to extend
12
13
  */
13
14
  export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtils<KeyShare> {
14
15
  private _wallet?;
16
+ protected bitgoPublicGpgKey: openpgp.Key;
17
+ protected bitgoMPCv2PublicGpgKey: openpgp.Key | undefined;
15
18
  constructor(bitgo: BitGoBase, baseCoin: IBaseCoin, wallet?: IWallet);
16
19
  get wallet(): IWallet;
20
+ protected setBitgoGpgPubKey(bitgo: any): Promise<void>;
21
+ protected pickBitgoPubGpgKeyForSigning(isMpcv2: boolean, reqId?: IRequestTracer, enterpriseId?: string): Promise<openpgp.Key>;
22
+ getBitgoPublicGpgKey(): Promise<openpgp.Key>;
23
+ getBitgoMpcv2PublicGpgKey(): Promise<openpgp.Key>;
17
24
  createBitgoHeldBackupKeyShare(userGpgKey: SerializedKeyPair<string>, enterprise: string | undefined): Promise<BitgoHeldBackupKeyShare>;
18
25
  finalizeBitgoHeldBackupKeyShare(keyId: string, commonKeychain: string, userKeyShare: KeyShare, bitgoKeychain: Keychain, userGpgKey: SerializedKeyPair<string>, backupGpgKey: Key): Promise<BitgoHeldBackupKeyShare>;
19
26
  createUserKeychain(params: CreateKeychainParamsBase): Promise<Keychain>;
@@ -26,8 +33,8 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
26
33
  isThirdPartyBackup?: boolean;
27
34
  backupProvider?: BackupProvider;
28
35
  }): Promise<KeychainsTriplet>;
29
- signTxRequest(params: TSSParams): Promise<TxRequest>;
30
- signTxRequestForMessage(params: TSSParams): Promise<TxRequest>;
36
+ signTxRequest(params: TSSParamsWithPrv): Promise<TxRequest>;
37
+ signTxRequestForMessage(params: TSSParamsForMessage): Promise<TxRequest>;
31
38
  /**
32
39
  * Signs a transaction using TSS for EdDSA and through utilization of custom share generators
33
40
  *
@@ -36,7 +43,29 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
36
43
  * @param {CustomGShareGeneratingFunction} externalSignerGShareGenerator a function that creates G shares in the EdDSA TSS flow
37
44
  * @returns {Promise<TxRequest>} - a signed tx request
38
45
  */
39
- signUsingExternalSigner(txRequest: string | TxRequest, externalSignerCommitmentGenerator: CustomCommitmentGeneratingFunction, externalSignerRShareGenerator: CustomRShareGeneratingFunction, externalSignerGShareGenerator: CustomGShareGeneratingFunction): Promise<TxRequest>;
46
+ signEddsaTssUsingExternalSigner(txRequest: string | TxRequest, externalSignerCommitmentGenerator: CustomCommitmentGeneratingFunction, externalSignerRShareGenerator: CustomRShareGeneratingFunction, externalSignerGShareGenerator: CustomGShareGeneratingFunction): Promise<TxRequest>;
47
+ /**
48
+ * Signs a transaction using TSS for ECDSA and through utilization of custom share generators
49
+ *
50
+ * @param {params: TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
51
+ * @param {RequestType} requestType - the type of the request to sign (transaction or message).
52
+ * @param {CustomPaillierModulusGetterFunction} externalSignerPaillierModulusGetter a function that creates Paillier Modulus shares in the ECDSA TSS flow.
53
+ * @param {CustomKShareGeneratingFunction} externalSignerKShareGenerator a function that creates K shares in the ECDSA TSS flow.
54
+ * @param {CustomMuDeltaShareGeneratingFunction} externalSignerMuDeltaShareGenerator a function that creates Mu and Delta shares in the ECDSA TSS flow.
55
+ * @param {CustomSShareGeneratingFunction} externalSignerSShareGenerator a function that creates S shares in the ECDSA TSS flow.
56
+ */
57
+ signEcdsaTssUsingExternalSigner(params: TSSParams | TSSParamsForMessage, requestType: RequestType, externalSignerPaillierModulusGetter: CustomPaillierModulusGetterFunction, externalSignerKShareGenerator: CustomKShareGeneratingFunction, externalSignerMuDeltaShareGenerator: CustomMuDeltaShareGeneratingFunction, externalSignerSShareGenerator: CustomSShareGeneratingFunction): Promise<TxRequest>;
58
+ /**
59
+ * Signs a transaction using TSS MPCv2 for ECDSA and through utilization of custom share generators
60
+ *
61
+ * @param {TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
62
+ * @param {CustomMPCv2SigningRound1GeneratingFunction} externalSignerMPCv2SigningRound1Generator - a function that creates MPCv2 Round 1 shares in the ECDSA TSS MPCv2 flow.
63
+ * @param {CustomMPCv2SigningRound2GeneratingFunction} externalSignerMPCv2SigningRound2Generator - a function that creates MPCv2 Round 2 shares in the ECDSA TSS MPCv2 flow.
64
+ * @param {CustomMPCv2SigningRound3GeneratingFunction} externalSignerMPCv2SigningRound3Generator - a function that creates MPCv2 Round 3 shares in the ECDSA TSS MPCv2 flow.
65
+ * @param {RequestType} requestType - the type of the request to sign (transaction or message).
66
+ * @returns {Promise<TxRequest>} - a signed tx request
67
+ */
68
+ signEcdsaMPCv2TssUsingExternalSigner(params: TSSParams | TSSParamsForMessage, externalSignerMPCv2SigningRound1Generator: CustomMPCv2SigningRound1GeneratingFunction, externalSignerMPCv2SigningRound2Generator: CustomMPCv2SigningRound2GeneratingFunction, externalSignerMPCv2SigningRound3Generator: CustomMPCv2SigningRound3GeneratingFunction, requestType?: RequestType): Promise<TxRequest>;
40
69
  /**
41
70
  * Create an Commitment (User to BitGo) share from an unsigned transaction and private user signing material
42
71
  * EDDSA only
@@ -52,6 +81,7 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
52
81
  txRequest: TxRequest;
53
82
  prv: string;
54
83
  walletPassphrase: string;
84
+ bitgoGpgPubKey: string;
55
85
  }): Promise<{
56
86
  userToBitgoCommitment: CommitmentShareRecord;
57
87
  encryptedSignerShare: EncryptedSignerShareRecord;
@@ -127,16 +157,18 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
127
157
  * Call delete signature shares for a txRequest, the endpoint delete the signatures and return them
128
158
  *
129
159
  * @param {string} txRequestId tx id reference to delete signature shares
160
+ * @param {IRequestTracer} reqId - the request tracer request id
130
161
  * @returns {SignatureShareRecord[]}
131
162
  */
132
- deleteSignatureShares(txRequestId: string): Promise<SignatureShareRecord[]>;
163
+ deleteSignatureShares(txRequestId: string, reqId?: IRequestTracer): Promise<SignatureShareRecord[]>;
133
164
  /**
134
165
  * Initialize the send procedure once Bitgo has the User To Bitgo GShare
135
166
  *
136
167
  * @param {String} txRequestId - the txRequest Id
168
+ * @param {IRequestTracer} reqId - the request tracer request id
137
169
  * @returns {Promise<any>}
138
170
  */
139
- sendTxRequest(txRequestId: string): Promise<any>;
171
+ sendTxRequest(txRequestId: string, reqId?: IRequestTracer): Promise<any>;
140
172
  /**
141
173
  * Delete signature shares, get the tx request without them from the db and sign it to finally send it.
142
174
  *
@@ -152,9 +184,10 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
152
184
  * Gets the latest Tx Request by id
153
185
  *
154
186
  * @param {String} txRequestId - the txRequest Id
187
+ * @param {IRequestTracer} reqId - request tracer request id
155
188
  * @returns {Promise<TxRequest>}
156
189
  */
157
- getTxRequest(txRequestId: string): Promise<TxRequest>;
190
+ getTxRequest(txRequestId: string, reqId?: IRequestTracer): Promise<TxRequest>;
158
191
  /**
159
192
  * Checks whether the third party backup provider is valid/supported
160
193
  * @param backupProvider - the backup provider client selected
@@ -164,7 +197,19 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
164
197
  * It gets the appropriate BitGo GPG public key for key creation based on a
165
198
  * combination of coin and the feature flags on the user and their enterprise if set.
166
199
  * @param enterpriseId - enterprise under which user wants to create the wallet
200
+ * @param isMPCv2 - true to get the MPCv2 GPG public key, defaults to false
201
+ * @param reqId - request tracer request id
202
+ */
203
+ getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId: string | undefined, isMPCv2?: boolean, reqId?: IRequestTracer): Promise<Key>;
204
+ /**
205
+ * Returns supported TxRequest versions for this wallet
206
+ */
207
+ supportedTxRequestVersions(): TxRequestVersion[];
208
+ /**
209
+ * Returns true if the txRequest is using apiVersion == full and is pending approval
210
+ * @param txRequest
211
+ * @returns boolean
167
212
  */
168
- getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId: string | undefined): Promise<Key>;
213
+ isPendingApprovalTxRequestFull(txRequest: TxRequest): boolean;
169
214
  }
170
215
  //# sourceMappingURL=baseTSSUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"baseTSSUtils.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/utils/tss/baseTSSUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"baseTSSUtils.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/utils/tss/baseTSSUtils.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,18 +15,33 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
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
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
36
  const openpgp_1 = require("openpgp");
37
+ const keychain_1 = require("../../keychain");
23
38
  const tss_1 = require("../../tss");
24
39
  const mpcUtils_1 = require("../mpcUtils");
25
40
  const _ = __importStar(require("lodash"));
41
+ const util_1 = require("../util");
42
+ const openpgp = __importStar(require("openpgp"));
43
+ const bitgoPubKeys_1 = require("../../tss/bitgoPubKeys");
44
+ const opengpgUtils_1 = require("../opengpgUtils");
26
45
  /**
27
46
  * BaseTssUtil class which different signature schemes have to extend
28
47
  */
@@ -37,6 +56,62 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
37
56
  }
38
57
  return this._wallet;
39
58
  }
59
+ async setBitgoGpgPubKey(bitgo) {
60
+ const { mpcV1, mpcV2 } = await (0, opengpgUtils_1.getBitgoGpgPubKey)(bitgo);
61
+ // Do not unset the MPCv1 key if it is already set. This is to avoid unsetting if extra constants api calls fail.
62
+ if (mpcV1 !== undefined) {
63
+ this.bitgoPublicGpgKey = mpcV1;
64
+ }
65
+ // Do not unset the MPCv2 key if it is already set
66
+ if (mpcV2 !== undefined) {
67
+ this.bitgoMPCv2PublicGpgKey = mpcV2;
68
+ }
69
+ }
70
+ async pickBitgoPubGpgKeyForSigning(isMpcv2, reqId, enterpriseId) {
71
+ let bitgoGpgPubKey;
72
+ try {
73
+ const bitgoKeyChain = await this.baseCoin.keychains().get({ id: this.wallet.keyIds()[keychain_1.KeyIndices.BITGO], reqId });
74
+ if (!bitgoKeyChain || !bitgoKeyChain.hsmType) {
75
+ throw new Error('Missing Bitgo GPG Pub Key Type.');
76
+ }
77
+ bitgoGpgPubKey = await openpgp.readKey({
78
+ armoredKey: (0, bitgoPubKeys_1.getBitgoMpcGpgPubKey)(this.bitgo.getEnv(), bitgoKeyChain.hsmType === 'nitro' ? 'nitro' : 'onprem', isMpcv2 ? 'mpcv2' : 'mpcv1'),
79
+ });
80
+ }
81
+ catch (e) {
82
+ if (!(0, bitgoPubKeys_1.envRequiresBitgoPubGpgKeyConfig)(this.bitgo.getEnv())) {
83
+ console.warn(`Unable to get BitGo GPG key based on key data with error: ${e}. Fetching BitGo GPG key based on feature flags.`);
84
+ // First try to get the key based on feature flags, if that fails, fallback to the default key from constants api.
85
+ bitgoGpgPubKey = await this.getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId, isMpcv2, reqId)
86
+ .then(async (pubKey) => pubKey !== null && pubKey !== void 0 ? pubKey : (isMpcv2 ? await this.getBitgoMpcv2PublicGpgKey() : await this.getBitgoPublicGpgKey()))
87
+ .catch(async (e) => (isMpcv2 ? await this.getBitgoMpcv2PublicGpgKey() : await this.getBitgoPublicGpgKey()));
88
+ }
89
+ else {
90
+ throw new Error(`Environment "${this.bitgo.getEnv()}" requires a BitGo GPG Pub Key Config in BitGoJS for TSS. Error thrown while getting the key from config: ${e}`);
91
+ }
92
+ }
93
+ return bitgoGpgPubKey;
94
+ }
95
+ async getBitgoPublicGpgKey() {
96
+ if (!this.bitgoPublicGpgKey) {
97
+ // retry getting bitgo's gpg key
98
+ await this.setBitgoGpgPubKey(this.bitgo);
99
+ if (!this.bitgoPublicGpgKey) {
100
+ throw new Error("Failed to get Bitgo's gpg key");
101
+ }
102
+ }
103
+ return this.bitgoPublicGpgKey;
104
+ }
105
+ async getBitgoMpcv2PublicGpgKey() {
106
+ if (!this.bitgoMPCv2PublicGpgKey) {
107
+ // retry getting bitgo's gpg key
108
+ await this.setBitgoGpgPubKey(this.bitgo);
109
+ if (!this.bitgoMPCv2PublicGpgKey) {
110
+ throw new Error("Failed to get Bitgo's gpg key");
111
+ }
112
+ }
113
+ return this.bitgoMPCv2PublicGpgKey;
114
+ }
40
115
  async createBitgoHeldBackupKeyShare(userGpgKey, enterprise) {
41
116
  const keyResponse = await this.bitgo
42
117
  .post(this.baseCoin.url('/krs/backupkeys'))
@@ -82,7 +157,33 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
82
157
  * @param {CustomGShareGeneratingFunction} externalSignerGShareGenerator a function that creates G shares in the EdDSA TSS flow
83
158
  * @returns {Promise<TxRequest>} - a signed tx request
84
159
  */
85
- signUsingExternalSigner(txRequest, externalSignerCommitmentGenerator, externalSignerRShareGenerator, externalSignerGShareGenerator) {
160
+ signEddsaTssUsingExternalSigner(txRequest, externalSignerCommitmentGenerator, externalSignerRShareGenerator, externalSignerGShareGenerator) {
161
+ throw new Error('Method not implemented.');
162
+ }
163
+ /**
164
+ * Signs a transaction using TSS for ECDSA and through utilization of custom share generators
165
+ *
166
+ * @param {params: TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
167
+ * @param {RequestType} requestType - the type of the request to sign (transaction or message).
168
+ * @param {CustomPaillierModulusGetterFunction} externalSignerPaillierModulusGetter a function that creates Paillier Modulus shares in the ECDSA TSS flow.
169
+ * @param {CustomKShareGeneratingFunction} externalSignerKShareGenerator a function that creates K shares in the ECDSA TSS flow.
170
+ * @param {CustomMuDeltaShareGeneratingFunction} externalSignerMuDeltaShareGenerator a function that creates Mu and Delta shares in the ECDSA TSS flow.
171
+ * @param {CustomSShareGeneratingFunction} externalSignerSShareGenerator a function that creates S shares in the ECDSA TSS flow.
172
+ */
173
+ signEcdsaTssUsingExternalSigner(params, requestType, externalSignerPaillierModulusGetter, externalSignerKShareGenerator, externalSignerMuDeltaShareGenerator, externalSignerSShareGenerator) {
174
+ throw new Error('Method not implemented.');
175
+ }
176
+ /**
177
+ * Signs a transaction using TSS MPCv2 for ECDSA and through utilization of custom share generators
178
+ *
179
+ * @param {TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
180
+ * @param {CustomMPCv2SigningRound1GeneratingFunction} externalSignerMPCv2SigningRound1Generator - a function that creates MPCv2 Round 1 shares in the ECDSA TSS MPCv2 flow.
181
+ * @param {CustomMPCv2SigningRound2GeneratingFunction} externalSignerMPCv2SigningRound2Generator - a function that creates MPCv2 Round 2 shares in the ECDSA TSS MPCv2 flow.
182
+ * @param {CustomMPCv2SigningRound3GeneratingFunction} externalSignerMPCv2SigningRound3Generator - a function that creates MPCv2 Round 3 shares in the ECDSA TSS MPCv2 flow.
183
+ * @param {RequestType} requestType - the type of the request to sign (transaction or message).
184
+ * @returns {Promise<TxRequest>} - a signed tx request
185
+ */
186
+ signEcdsaMPCv2TssUsingExternalSigner(params, externalSignerMPCv2SigningRound1Generator, externalSignerMPCv2SigningRound2Generator, externalSignerMPCv2SigningRound3Generator, requestType) {
86
187
  throw new Error('Method not implemented.');
87
188
  }
88
189
  /**
@@ -143,6 +244,8 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
143
244
  apiVersion: apiVersion,
144
245
  preview,
145
246
  };
247
+ const reqTracer = params.reqId || new util_1.RequestTracer();
248
+ this.bitgo.setRequestTracer(reqTracer);
146
249
  const unsignedTx = (await this.bitgo
147
250
  .post(this.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests', 2))
148
251
  .send(whitelistedParams)
@@ -168,7 +271,7 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
168
271
  messageRaw: params.messageRaw,
169
272
  messageEncoded: (_b = params.messageEncoded) !== null && _b !== void 0 ? _b : '',
170
273
  };
171
- return this.createTxRequestBase(intentOptions, apiVersion, preview);
274
+ return this.createTxRequestBase(intentOptions, apiVersion, preview, params.reqId);
172
275
  }
173
276
  /**
174
277
  * Create a tx request from params for type data signing
@@ -189,14 +292,14 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
189
292
  messageRaw: params.typedDataRaw,
190
293
  messageEncoded: (_b = params.typedDataEncoded) !== null && _b !== void 0 ? _b : '',
191
294
  };
192
- return this.createTxRequestBase(intentOptions, apiVersion, preview);
295
+ return this.createTxRequestBase(intentOptions, apiVersion, preview, params.reqId);
193
296
  }
194
297
  /**
195
298
  * Calls Bitgo API to create tx request.
196
299
  *
197
300
  * @private
198
301
  */
199
- async createTxRequestBase(intentOptions, apiVersion, preview) {
302
+ async createTxRequestBase(intentOptions, apiVersion, preview, reqId) {
200
303
  const whitelistedParams = {
201
304
  intent: {
202
305
  ...intentOptions,
@@ -204,6 +307,8 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
204
307
  apiVersion,
205
308
  preview,
206
309
  };
310
+ const reqTracer = reqId || new util_1.RequestTracer();
311
+ this.bitgo.setRequestTracer(reqTracer);
207
312
  return this.bitgo
208
313
  .post(this.bitgo.url(`/wallet/${this.wallet.id()}/txrequests`, 2))
209
314
  .send(whitelistedParams)
@@ -213,9 +318,12 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
213
318
  * Call delete signature shares for a txRequest, the endpoint delete the signatures and return them
214
319
  *
215
320
  * @param {string} txRequestId tx id reference to delete signature shares
321
+ * @param {IRequestTracer} reqId - the request tracer request id
216
322
  * @returns {SignatureShareRecord[]}
217
323
  */
218
- async deleteSignatureShares(txRequestId) {
324
+ async deleteSignatureShares(txRequestId, reqId) {
325
+ const reqTracer = reqId || new util_1.RequestTracer();
326
+ this.bitgo.setRequestTracer(reqTracer);
219
327
  return this.bitgo
220
328
  .del(this.bitgo.url(`/wallet/${this.wallet.id()}/txrequests/${txRequestId}/signatureshares`, 2))
221
329
  .send()
@@ -225,10 +333,13 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
225
333
  * Initialize the send procedure once Bitgo has the User To Bitgo GShare
226
334
  *
227
335
  * @param {String} txRequestId - the txRequest Id
336
+ * @param {IRequestTracer} reqId - the request tracer request id
228
337
  * @returns {Promise<any>}
229
338
  */
230
339
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
231
- async sendTxRequest(txRequestId) {
340
+ async sendTxRequest(txRequestId, reqId) {
341
+ const reqTracer = reqId || new util_1.RequestTracer();
342
+ this.bitgo.setRequestTracer(reqTracer);
232
343
  return this.bitgo
233
344
  .post(this.baseCoin.url('/wallet/' + this.wallet.id() + '/tx/send'))
234
345
  .send({ txRequestId })
@@ -245,19 +356,20 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
245
356
  * @returns {Promise<any>}
246
357
  */
247
358
  async recreateTxRequest(txRequestId, decryptedPrv, reqId) {
248
- await this.deleteSignatureShares(txRequestId);
359
+ await this.deleteSignatureShares(txRequestId, reqId);
249
360
  // after delete signatures shares get the tx without them
250
- const txRequest = await tss_1.getTxRequest(this.bitgo, this.wallet.id(), txRequestId);
361
+ const txRequest = await (0, tss_1.getTxRequest)(this.bitgo, this.wallet.id(), txRequestId, reqId);
251
362
  return await this.signTxRequest({ txRequest, prv: decryptedPrv, reqId });
252
363
  }
253
364
  /**
254
365
  * Gets the latest Tx Request by id
255
366
  *
256
367
  * @param {String} txRequestId - the txRequest Id
368
+ * @param {IRequestTracer} reqId - request tracer request id
257
369
  * @returns {Promise<TxRequest>}
258
370
  */
259
- async getTxRequest(txRequestId) {
260
- return tss_1.getTxRequest(this.bitgo, this.wallet.id(), txRequestId);
371
+ async getTxRequest(txRequestId, reqId) {
372
+ return (0, tss_1.getTxRequest)(this.bitgo, this.wallet.id(), txRequestId, reqId);
261
373
  }
262
374
  /**
263
375
  * Checks whether the third party backup provider is valid/supported
@@ -271,15 +383,50 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
271
383
  * It gets the appropriate BitGo GPG public key for key creation based on a
272
384
  * combination of coin and the feature flags on the user and their enterprise if set.
273
385
  * @param enterpriseId - enterprise under which user wants to create the wallet
386
+ * @param isMPCv2 - true to get the MPCv2 GPG public key, defaults to false
387
+ * @param reqId - request tracer request id
274
388
  */
275
- async getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId) {
389
+ async getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId, isMPCv2 = false, reqId) {
390
+ const reqTracer = reqId || new util_1.RequestTracer();
391
+ this.bitgo.setRequestTracer(reqTracer);
276
392
  const response = await this.bitgo
277
393
  .get(this.baseCoin.url('/tss/pubkey'))
278
394
  .query({ enterpriseId })
395
+ .retry(3)
279
396
  .result();
280
- const bitgoPublicKeyStr = response.publicKey;
281
- return openpgp_1.readKey({ armoredKey: bitgoPublicKeyStr });
397
+ const bitgoPublicKeyStr = isMPCv2 ? response.mpcv2PublicKey : response.publicKey;
398
+ return (0, openpgp_1.readKey)({ armoredKey: bitgoPublicKeyStr });
399
+ }
400
+ /**
401
+ * Returns supported TxRequest versions for this wallet
402
+ */
403
+ supportedTxRequestVersions() {
404
+ var _a, _b, _c, _d;
405
+ const walletType = (_a = this._wallet) === null || _a === void 0 ? void 0 : _a.type();
406
+ const supportedWalletTypes = ['custodial', 'cold', 'hot'];
407
+ if (!walletType || ((_b = this._wallet) === null || _b === void 0 ? void 0 : _b.multisigType()) !== 'tss' || !supportedWalletTypes.includes(walletType)) {
408
+ return [];
409
+ }
410
+ else if (((_c = this._wallet) === null || _c === void 0 ? void 0 : _c.baseCoin.getMPCAlgorithm()) === 'ecdsa') {
411
+ return ['full'];
412
+ }
413
+ else if (walletType === 'custodial' || walletType === 'cold') {
414
+ return ['full'];
415
+ }
416
+ else if (((_d = this._wallet) === null || _d === void 0 ? void 0 : _d.baseCoin.getMPCAlgorithm()) === 'eddsa' && walletType === 'hot') {
417
+ return ['lite', 'full'];
418
+ }
419
+ return [];
420
+ }
421
+ /**
422
+ * Returns true if the txRequest is using apiVersion == full and is pending approval
423
+ * @param txRequest
424
+ * @returns boolean
425
+ */
426
+ isPendingApprovalTxRequestFull(txRequest) {
427
+ const { apiVersion, state } = txRequest;
428
+ return apiVersion === 'full' && 'pendingApproval' === state;
282
429
  }
283
430
  }
284
431
  exports.default = BaseTssUtils;
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EscUNBQTBEO0FBSTFELG1DQUF5QztBQUV6QywwQ0FBdUM7QUFDdkMsMENBQTRCO0FBd0I1Qjs7R0FFRztBQUNILE1BQXFCLFlBQXVCLFNBQVEsbUJBQVE7SUFHMUQsWUFBWSxLQUFnQixFQUFFLFFBQW1CLEVBQUUsTUFBZ0I7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkIsQ0FDakMsVUFBcUMsRUFDckMsVUFBOEI7UUFFOUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSzthQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUMxQyxJQUFJLENBQUM7WUFDSixVQUFVO1lBQ1YsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLFNBQVM7U0FDdkMsQ0FBQzthQUNELE1BQU0sRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsT0FBTztZQUNMLEVBQUUs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RUFBRSxXQUFXLENBQUMsQ0FBQztRQUNoRixPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFtQjtRQUNwQyxPQUFPLGtCQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSCwrQkFBK0IsQ0FDN0IsY0FBbUQ7UUFFbkQsOERBQThEO1FBQzlELE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLGNBQWMsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLFlBQWdDO1FBQ2hGLE1BQU0sUUFBUSxHQUFzQixNQUFNLElBQUksQ0FBQyxLQUFLO2FBQ2pELEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNyQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQzthQUN2QixNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFNBQW1CLENBQUM7UUFDdkQsT0FBTyxpQkFBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFoVkQsK0JBZ1ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi8uLi8uLi9hcGknO1xuaW1wb3J0IHsgS2V5LCByZWFkS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEtleWNoYWluIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZ2V0VHhSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHNzJztcbmltcG9ydCB7IElXYWxsZXQsIEJhY2t1cFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vd2FsbGV0JztcbmltcG9ydCB7IE1wY1V0aWxzIH0gZnJvbSAnLi4vbXBjVXRpbHMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQml0Z29HUEdQdWJsaWNLZXksXG4gIEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlLFxuICBDdXN0b21HU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVJTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgSVRzc1V0aWxzLFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBUU1NQYXJhbXMsXG4gIFR4UmVxdWVzdCxcbiAgVHhSZXF1ZXN0VmVyc2lvbixcbiAgQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcsXG4gIEludGVudE9wdGlvbnNGb3JUeXBlZERhdGEsXG4gIFBvcHVsYXRlZEludGVudEZvclR5cGVkRGF0YVNpZ25pbmcsXG4gIENyZWF0ZUJpdEdvS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBDb21taXRtZW50U2hhcmVSZWNvcmQsXG4gIEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBDdXN0b21Db21taXRtZW50R2VuZXJhdGluZ0Z1bmN0aW9uLFxufSBmcm9tICcuL2Jhc2VUeXBlcyc7XG5pbXBvcnQgeyBHU2hhcmUsIFNpZ25TaGFyZSB9IGZyb20gJy4uLy4uLy4uL2FjY291bnQtbGliL21wYy90c3MnO1xuXG4vKipcbiAqIEJhc2VUc3NVdGlsIGNsYXNzIHdoaWNoIGRpZmZlcmVudCBzaWduYXR1cmUgc2NoZW1lcyBoYXZlIHRvIGV4dGVuZFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlVHNzVXRpbHM8S2V5U2hhcmU+IGV4dGVuZHMgTXBjVXRpbHMgaW1wbGVtZW50cyBJVHNzVXRpbHM8S2V5U2hhcmU+IHtcbiAgcHJpdmF0ZSBfd2FsbGV0PzogSVdhbGxldDtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luLCB3YWxsZXQ/OiBJV2FsbGV0KSB7XG4gICAgc3VwZXIoYml0Z28sIGJhc2VDb2luKTtcbiAgICB0aGlzLl93YWxsZXQgPSB3YWxsZXQ7XG4gIH1cblxuICBnZXQgd2FsbGV0KCk6IElXYWxsZXQge1xuICAgIGlmIChfLmlzTmlsKHRoaXMuX3dhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IG5vdCBkZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl93YWxsZXQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZShcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIGVudGVycHJpc2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlPiB7XG4gICAgY29uc3Qga2V5UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJhc2VDb2luLnVybCgnL2tycy9iYWNrdXBrZXlzJykpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIGVudGVycHJpc2UsXG4gICAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IHVzZXJHcGdLZXkucHVibGljS2V5LFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBpZiAoIWtleVJlc3BvbnNlIHx8ICFrZXlSZXNwb25zZS5rZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBiYWNrdXAgc2hhcmVzIGZyb20gQml0R28uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDoga2V5UmVzcG9uc2UuaWQsXG4gICAgICBrZXlTaGFyZXM6IGtleVJlc3BvbnNlLmtleVNoYXJlcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGZpbmFsaXplQml0Z29IZWxkQmFja3VwS2V5U2hhcmUoXG4gICAga2V5SWQ6IHN0cmluZyxcbiAgICBjb21tb25LZXljaGFpbjogc3RyaW5nLFxuICAgIHVzZXJLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBiYWNrdXBHcGdLZXk6IEtleVxuICApOiBQcm9taXNlPEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgY3JlYXRlVXNlcktleWNoYWluKHBhcmFtczogQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGNyZWF0ZUJhY2t1cEtleWNoYWluKHBhcmFtczogQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGNyZWF0ZUJpdGdvS2V5Y2hhaW4ocGFyYW1zOiBDcmVhdGVCaXRHb0tleWNoYWluUGFyYW1zQmFzZSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBjcmVhdGVLZXljaGFpbnMocGFyYW1zOiB7XG4gICAgcGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVudGVycHJpc2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzVGhpcmRQYXJ0eUJhY2t1cD86IGJvb2xlYW47XG4gICAgYmFja3VwUHJvdmlkZXI/OiBCYWNrdXBQcm92aWRlcjtcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHNpZ25UeFJlcXVlc3QocGFyYW1zOiBUU1NQYXJhbXMpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlKHBhcmFtczogVFNTUGFyYW1zKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgYSB0cmFuc2FjdGlvbiB1c2luZyBUU1MgZm9yIEVkRFNBIGFuZCB0aHJvdWdoIHV0aWxpemF0aW9uIG9mIGN1c3RvbSBzaGFyZSBnZW5lcmF0b3JzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSB0eFJlcXVlc3QgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IHdpdGggdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyUlNoYXJlR2VuZXJhdG9yIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIFIgc2hhcmVzIGluIHRoZSBFZERTQSBUU1MgZmxvd1xuICAgKiBAcGFyYW0ge0N1c3RvbUdTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJHU2hhcmVHZW5lcmF0b3IgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgRyBzaGFyZXMgaW4gdGhlIEVkRFNBIFRTUyBmbG93XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59IC0gYSBzaWduZWQgdHggcmVxdWVzdFxuICAgKi9cbiAgc2lnblVzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgdHhSZXF1ZXN0OiBzdHJpbmcgfCBUeFJlcXVlc3QsXG4gICAgZXh0ZXJuYWxTaWduZXJDb21taXRtZW50R2VuZXJhdG9yOiBDdXN0b21Db21taXRtZW50R2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyUlNoYXJlR2VuZXJhdG9yOiBDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJHU2hhcmVHZW5lcmF0b3I6IEN1c3RvbUdTaGFyZUdlbmVyYXRpbmdGdW5jdGlvblxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQ29tbWl0bWVudCAoVXNlciB0byBCaXRHbykgc2hhcmUgZnJvbSBhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgcHJpdmF0ZSB1c2VyIHNpZ25pbmcgbWF0ZXJpYWxcbiAgICogRUREU0Egb25seVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdFxuICAgKiBAcGFyYW0ge1R4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgd2l0aCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBydiAtIHVzZXIgc2lnbmluZyBtYXRlcmlhbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHVzZXJUb0JpdGdvQ29tbWl0bWVudDogQ29tbWl0bWVudFNoYXJlUmVjb3IsIGVuY3J5cHRlZFNpZ25lclNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZCB9Pn0gLSBDb21taXRtZW50IFNoYXJlIGFuZCB0aGUgRW5jcnlwdGVkIFNpZ25lciBTaGFyZSB0byBCaXRHb1xuICAgKi9cbiAgY3JlYXRlQ29tbWl0bWVudFNoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHsgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7IHBydjogc3RyaW5nOyB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmcgfSk6IFByb21pc2U8e1xuICAgIHVzZXJUb0JpdGdvQ29tbWl0bWVudDogQ29tbWl0bWVudFNoYXJlUmVjb3JkO1xuICAgIGVuY3J5cHRlZFNpZ25lclNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZDtcbiAgICBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQ7XG4gIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFIgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCB3aXRoIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLndhbGxldFBhc3NwaHJhc2VdIC0gd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHtFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZH0gW3BhcmFtcy5lbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZV0gLSBlbmNyeXB0ZWQgdXNlciB0byBiaXRnbyBSIHNoYXJlIGdlbmVyYXRlZCBpbiB0aGUgY29tbWl0bWVudCBwaGFzZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHJTaGFyZTogU2lnblNoYXJlIH0+fSAtIFIgU2hhcmUgdG8gQml0R29cbiAgICovXG4gIGNyZWF0ZVJTaGFyZUZyb21UeFJlcXVlc3QocGFyYW1zOiB7XG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZDtcbiAgfSk6IFByb21pc2U8eyByU2hhcmU6IFNpZ25TaGFyZSB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEcgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCB3aXRoIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEBwYXJhbSB7U2lnbmF0dXJlU2hhcmVSZWNvcmR9IHBhcmFtcy5iaXRnb1RvVXNlclJTaGFyZSAtIEJpdEdvIHRvIFVzZXIgUiBTaGFyZVxuICAgKiBAcGFyYW0ge1NpZ25TaGFyZX0gcGFyYW1zLnVzZXJUb0JpdGdvUlNoYXJlIC0gVXNlciB0byBCaXRHbyBSIFNoYXJlXG4gICAqIEBwYXJhbSB7Q29tbWl0bWVudFNoYXJlUmVjb3JkfSBwYXJhbXMuYml0Z29Ub1VzZXJDb21taXRtZW50IC0gQml0R28gdG8gVXNlciBDb21taXRtZW50XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEdTaGFyZT59IC0gR1NoYXJlIGZyb20gVXNlciB0byBCaXRHb1xuICAgKi9cbiAgY3JlYXRlR1NoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdDtcbiAgICBwcnY6IHN0cmluZztcbiAgICBiaXRnb1RvVXNlclJTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgdXNlclRvQml0Z29SU2hhcmU6IFNpZ25TaGFyZTtcbiAgICBiaXRnb1RvVXNlckNvbW1pdG1lbnQ6IENvbW1pdG1lbnRTaGFyZVJlY29yZDtcbiAgfSk6IFByb21pc2U8R1NoYXJlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgYW5kIHZlcmlmeSBpdFxuICAgKlxuICAgKiBAcGFyYW0ge1ByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9uc30gcGFyYW1zIC0gcGFyYW1ldGVycyB0byBidWlsZCB0aGUgdHhcbiAgICogQHBhcmFtIHtUeFJlcXVlc3RWZXJzaW9ufSBhcGlWZXJzaW9uIGxpdGUgb3IgZnVsbFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZpZXcgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgaXMgdG8gcHJldmlldyBhIHR4IHJlcXVlc3QsIHdoaWNoIHdpbGwgbm90IGluaXRpYXRlIHBvbGljeSBjaGVja3Mgb3IgcGVuZGluZyBhcHByb3ZhbHNcbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gLSBhIGJ1aWx0IHR4IHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHByZWJ1aWxkVHhXaXRoSW50ZW50KFxuICAgIHBhcmFtczogUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24gPSAnbGl0ZScsXG4gICAgcHJldmlldz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBpbnRlbnRPcHRpb25zID0gdGhpcy5wb3B1bGF0ZUludGVudCh0aGlzLmJhc2VDb2luLCBwYXJhbXMpO1xuXG4gICAgY29uc3Qgd2hpdGVsaXN0ZWRQYXJhbXMgPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgLi4uaW50ZW50T3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiBhcGlWZXJzaW9uLFxuICAgICAgcHJldmlldyxcbiAgICB9O1xuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IChhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLnVybCgnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHhyZXF1ZXN0cycsIDIpKVxuICAgICAgLnNlbmQod2hpdGVsaXN0ZWRQYXJhbXMpXG4gICAgICAucmVzdWx0KCkpIGFzIFR4UmVxdWVzdDtcblxuICAgIHJldHVybiB1bnNpZ25lZFR4O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgZm9yIG1lc3NhZ2Ugc2lnbmluZ1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBhcGlWZXJzaW9uXG4gICAqIEBwYXJhbSBwcmV2aWV3XG4gICAqL1xuICBhc3luYyBjcmVhdGVUeFJlcXVlc3RXaXRoSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcoXG4gICAgcGFyYW1zOiBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2Z1bGwnLFxuICAgIHByZXZpZXc/OiBib29sZWFuXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcgPSB7XG4gICAgICBjdXN0b2RpYW5NZXNzYWdlSWQ6IHBhcmFtcy5jdXN0b2RpYW5NZXNzYWdlSWQsXG4gICAgICBpbnRlbnRUeXBlOiBwYXJhbXMuaW50ZW50VHlwZSxcbiAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICBtZW1vOiBwYXJhbXMubWVtbz8udmFsdWUsXG4gICAgICBpc1RzczogcGFyYW1zLmlzVHNzLFxuICAgICAgbWVzc2FnZVJhdzogcGFyYW1zLm1lc3NhZ2VSYXcsXG4gICAgICBtZXNzYWdlRW5jb2RlZDogcGFyYW1zLm1lc3NhZ2VFbmNvZGVkID8/ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUeFJlcXVlc3RCYXNlKGludGVudE9wdGlvbnMsIGFwaVZlcnNpb24sIHByZXZpZXcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgZm9yIHR5cGUgZGF0YSBzaWduaW5nXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIGFwaVZlcnNpb25cbiAgICogQHBhcmFtIHByZXZpZXdcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVR4UmVxdWVzdFdpdGhJbnRlbnRGb3JUeXBlZERhdGFTaWduaW5nKFxuICAgIHBhcmFtczogSW50ZW50T3B0aW9uc0ZvclR5cGVkRGF0YSxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2Z1bGwnLFxuICAgIHByZXZpZXc/OiBib29sZWFuXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yVHlwZWREYXRhU2lnbmluZyA9IHtcbiAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogcGFyYW1zLmN1c3RvZGlhbk1lc3NhZ2VJZCxcbiAgICAgIGludGVudFR5cGU6IHBhcmFtcy5pbnRlbnRUeXBlLFxuICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICBjb21tZW50OiBwYXJhbXMuY29tbWVudCxcbiAgICAgIG1lbW86IHBhcmFtcy5tZW1vPy52YWx1ZSxcbiAgICAgIGlzVHNzOiBwYXJhbXMuaXNUc3MsXG4gICAgICBtZXNzYWdlUmF3OiBwYXJhbXMudHlwZWREYXRhUmF3LFxuICAgICAgbWVzc2FnZUVuY29kZWQ6IHBhcmFtcy50eXBlZERhdGFFbmNvZGVkID8/ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUeFJlcXVlc3RCYXNlKGludGVudE9wdGlvbnMsIGFwaVZlcnNpb24sIHByZXZpZXcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIEJpdGdvIEFQSSB0byBjcmVhdGUgdHggcmVxdWVzdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVHhSZXF1ZXN0QmFzZShcbiAgICBpbnRlbnRPcHRpb25zOiBQb3B1bGF0ZWRJbnRlbnRGb3JUeXBlZERhdGFTaWduaW5nIHwgUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcsXG4gICAgYXBpVmVyc2lvbjogVHhSZXF1ZXN0VmVyc2lvbixcbiAgICBwcmV2aWV3PzogYm9vbGVhblxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGNvbnN0IHdoaXRlbGlzdGVkUGFyYW1zID0ge1xuICAgICAgaW50ZW50OiB7XG4gICAgICAgIC4uLmludGVudE9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHByZXZpZXcsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgLCAyKSlcbiAgICAgIC5zZW5kKHdoaXRlbGlzdGVkUGFyYW1zKVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgZGVsZXRlIHNpZ25hdHVyZSBzaGFyZXMgZm9yIGEgdHhSZXF1ZXN0LCB0aGUgZW5kcG9pbnQgZGVsZXRlIHRoZSBzaWduYXR1cmVzIGFuZCByZXR1cm4gdGhlbVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHhSZXF1ZXN0SWQgdHggaWQgcmVmZXJlbmNlIHRvIGRlbGV0ZSBzaWduYXR1cmUgc2hhcmVzXG4gICAqIEByZXR1cm5zIHtTaWduYXR1cmVTaGFyZVJlY29yZFtdfVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlU2lnbmF0dXJlU2hhcmVzKHR4UmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkW10+IHtcbiAgICByZXR1cm4gdGhpcy5iaXRnb1xuICAgICAgLmRlbCh0aGlzLmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L3R4cmVxdWVzdHMvJHt0eFJlcXVlc3RJZH0vc2lnbmF0dXJlc2hhcmVzYCwgMikpXG4gICAgICAuc2VuZCgpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgc2VuZCBwcm9jZWR1cmUgb25jZSBCaXRnbyBoYXMgdGhlIFVzZXIgVG8gQml0Z28gR1NoYXJlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGFzeW5jIHNlbmRUeFJlcXVlc3QodHhSZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYmFzZUNvaW4udXJsKCcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eC9zZW5kJykpXG4gICAgICAuc2VuZCh7IHR4UmVxdWVzdElkIH0pXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHNpZ25hdHVyZSBzaGFyZXMsIGdldCB0aGUgdHggcmVxdWVzdCB3aXRob3V0IHRoZW0gZnJvbSB0aGUgZGIgYW5kIHNpZ24gaXQgdG8gZmluYWxseSBzZW5kIGl0LlxuICAgKlxuICAgKiBOb3RlIDogVGhpcyBjYW4gYmUgcGVyZm9ybWVkIGluIG9yZGVyIHRvIHJlYWNoIGxhdGVzdCBuZXR3b3JrIGNvbmRpdGlvbnMgcmVxdWlyZWQgb24gcGVuZGluZyBhcHByb3ZhbCBmbG93LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkIHRvIG1ha2UgdGhlIHJlcXVlc3RzLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGVjcnlwdGVkUHJ2IC0gZGVjcnlwdGVkIHBydiB0byBzaWduIHRoZSB0eCByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge1JlcXVlc3RUcmFjZXJ9IHJlcUlkIGlkIHRyYWNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGFzeW5jIHJlY3JlYXRlVHhSZXF1ZXN0KHR4UmVxdWVzdElkOiBzdHJpbmcsIGRlY3J5cHRlZFBydjogc3RyaW5nLCByZXFJZDogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGF3YWl0IHRoaXMuZGVsZXRlU2lnbmF0dXJlU2hhcmVzKHR4UmVxdWVzdElkKTtcbiAgICAvLyBhZnRlciBkZWxldGUgc2lnbmF0dXJlcyBzaGFyZXMgZ2V0IHRoZSB0eCB3aXRob3V0IHRoZW1cbiAgICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ25UeFJlcXVlc3QoeyB0eFJlcXVlc3QsIHBydjogZGVjcnlwdGVkUHJ2LCByZXFJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXRlc3QgVHggUmVxdWVzdCBieSBpZFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59XG4gICAqL1xuICBhc3luYyBnZXRUeFJlcXVlc3QodHhSZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHRoaXJkIHBhcnR5IGJhY2t1cCBwcm92aWRlciBpcyB2YWxpZC9zdXBwb3J0ZWRcbiAgICogQHBhcmFtIGJhY2t1cFByb3ZpZGVyIC0gdGhlIGJhY2t1cCBwcm92aWRlciBjbGllbnQgc2VsZWN0ZWRcbiAgICovXG4gIGlzVmFsaWRUaGlyZFBhcnR5QmFja3VwUHJvdmlkZXIoXG4gICAgYmFja3VwUHJvdmlkZXI6IEJhY2t1cFByb3ZpZGVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IGJhY2t1cFByb3ZpZGVyIGlzIEJhY2t1cFByb3ZpZGVyIHtcbiAgICAvLyBBcyBvZiBub3csIEJpdEdvIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBLUlMgcHJvdmlkZXIgZm9yIFRTU1xuICAgIHJldHVybiAhIShiYWNrdXBQcm92aWRlciAmJiBiYWNrdXBQcm92aWRlciA9PT0gJ0JpdEdvVHJ1c3RBc0tycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGdldHMgdGhlIGFwcHJvcHJpYXRlIEJpdEdvIEdQRyBwdWJsaWMga2V5IGZvciBrZXkgY3JlYXRpb24gYmFzZWQgb24gYVxuICAgKiBjb21iaW5hdGlvbiBvZiBjb2luIGFuZCB0aGUgZmVhdHVyZSBmbGFncyBvbiB0aGUgdXNlciBhbmQgdGhlaXIgZW50ZXJwcmlzZSBpZiBzZXQuXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlSWQgLSBlbnRlcnByaXNlIHVuZGVyIHdoaWNoIHVzZXIgd2FudHMgdG8gY3JlYXRlIHRoZSB3YWxsZXRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MoZW50ZXJwcmlzZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPEtleT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBCaXRnb0dQR1B1YmxpY0tleSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5nZXQodGhpcy5iYXNlQ29pbi51cmwoJy90c3MvcHVia2V5JykpXG4gICAgICAucXVlcnkoeyBlbnRlcnByaXNlSWQgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0tleVN0ciA9IHJlc3BvbnNlLnB1YmxpY0tleSBhcyBzdHJpbmc7XG4gICAgcmV0dXJuIHJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb1B1YmxpY0tleVN0ciB9KTtcbiAgfVxufVxuIl19
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxQ0FBMEQ7QUFHMUQsNkNBQXNEO0FBQ3RELG1DQUF5QztBQUV6QywwQ0FBdUM7QUFDdkMsMENBQTRCO0FBaUM1QixrQ0FBd0M7QUFDeEMsaURBQW1DO0FBQ25DLHlEQUErRjtBQUMvRixrREFBb0Q7QUFFcEQ7O0dBRUc7QUFDSCxNQUFxQixZQUF1QixTQUFRLG1CQUFRO0lBSzFELFlBQVksS0FBZ0IsRUFBRSxRQUFtQixFQUFFLE1BQWdCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUs7UUFDckMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUEsZ0NBQWlCLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsaUhBQWlIO1FBQ2pILElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDakMsQ0FBQztRQUNELGtEQUFrRDtRQUNsRCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixJQUFJLENB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QUFPLDBDQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsTUFBSyxPQUFPLEVBQUUsQ0FBQztZQUNoRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsQ0FBQzthQUFNLElBQUksVUFBVSxLQUFLLFdBQVcsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDL0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxRQUFRLENBQUMsZUFBZSxFQUFFLE1BQUssT0FBTyxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN4RixPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsOEJBQThCLENBQUMsU0FBb0I7UUFDakQsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDeEMsT0FBTyxVQUFVLEtBQUssTUFBTSxJQUFJLGlCQUFpQixLQUFLLEtBQUssQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUE1ZkQsK0JBNGZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi8uLi8uLi9hcGknO1xuaW1wb3J0IHsgS2V5LCByZWFkS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEtleWNoYWluLCBLZXlJbmRpY2VzIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZ2V0VHhSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHNzJztcbmltcG9ydCB7IElXYWxsZXQsIEJhY2t1cFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vd2FsbGV0JztcbmltcG9ydCB7IE1wY1V0aWxzIH0gZnJvbSAnLi4vbXBjVXRpbHMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQml0Z29HUEdQdWJsaWNLZXksXG4gIEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlLFxuICBDdXN0b21HU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVJTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgSVRzc1V0aWxzLFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBUU1NQYXJhbXMsXG4gIFR4UmVxdWVzdCxcbiAgVHhSZXF1ZXN0VmVyc2lvbixcbiAgQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcsXG4gIEludGVudE9wdGlvbnNGb3JUeXBlZERhdGEsXG4gIFBvcHVsYXRlZEludGVudEZvclR5cGVkRGF0YVNpZ25pbmcsXG4gIENyZWF0ZUJpdEdvS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBDb21taXRtZW50U2hhcmVSZWNvcmQsXG4gIEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBDdXN0b21Db21taXRtZW50R2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICBSZXF1ZXN0VHlwZSxcbiAgQ3VzdG9tUGFpbGxpZXJNb2R1bHVzR2V0dGVyRnVuY3Rpb24sXG4gIEN1c3RvbUtTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tTXVEZWx0YVNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbU1QQ3YyU2lnbmluZ1JvdW5kMUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21NUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIFRTU1BhcmFtc1dpdGhQcnYsXG59IGZyb20gJy4vYmFzZVR5cGVzJztcbmltcG9ydCB7IEdTaGFyZSwgU2lnblNoYXJlIH0gZnJvbSAnLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5pbXBvcnQgeyBSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgKiBhcyBvcGVucGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZywgZ2V0Qml0Z29NcGNHcGdQdWJLZXkgfSBmcm9tICcuLi8uLi90c3MvYml0Z29QdWJLZXlzJztcbmltcG9ydCB7IGdldEJpdGdvR3BnUHViS2V5IH0gZnJvbSAnLi4vb3BlbmdwZ1V0aWxzJztcblxuLyoqXG4gKiBCYXNlVHNzVXRpbCBjbGFzcyB3aGljaCBkaWZmZXJlbnQgc2lnbmF0dXJlIHNjaGVtZXMgaGF2ZSB0byBleHRlbmRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZVRzc1V0aWxzPEtleVNoYXJlPiBleHRlbmRzIE1wY1V0aWxzIGltcGxlbWVudHMgSVRzc1V0aWxzPEtleVNoYXJlPiB7XG4gIHByaXZhdGUgX3dhbGxldD86IElXYWxsZXQ7XG4gIHByb3RlY3RlZCBiaXRnb1B1YmxpY0dwZ0tleTogb3BlbnBncC5LZXk7XG4gIHByb3RlY3RlZCBiaXRnb01QQ3YyUHVibGljR3BnS2V5OiBvcGVucGdwLktleSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luLCB3YWxsZXQ/OiBJV2FsbGV0KSB7XG4gICAgc3VwZXIoYml0Z28sIGJhc2VDb2luKTtcbiAgICB0aGlzLl93YWxsZXQgPSB3YWxsZXQ7XG4gIH1cblxuICBnZXQgd2FsbGV0KCk6IElXYWxsZXQge1xuICAgIGlmIChfLmlzTmlsKHRoaXMuX3dhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IG5vdCBkZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl93YWxsZXQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2V0Qml0Z29HcGdQdWJLZXkoYml0Z28pIHtcbiAgICBjb25zdCB7IG1wY1YxLCBtcGNWMiB9ID0gYXdhaXQgZ2V0Qml0Z29HcGdQdWJLZXkoYml0Z28pO1xuICAgIC8vIERvIG5vdCB1bnNldCB0aGUgTVBDdjEga2V5IGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIGlzIHRvIGF2b2lkIHVuc2V0dGluZyBpZiBleHRyYSBjb25zdGFudHMgYXBpIGNhbGxzIGZhaWwuXG4gICAgaWYgKG1wY1YxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYml0Z29QdWJsaWNHcGdLZXkgPSBtcGNWMTtcbiAgICB9XG4gICAgLy8gRG8gbm90IHVuc2V0IHRoZSBNUEN2MiBrZXkgaWYgaXQgaXMgYWxyZWFkeSBzZXRcbiAgICBpZiAobXBjVjIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5ID0gbXBjVjI7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHBpY2tCaXRnb1B1YkdwZ0tleUZvclNpZ25pbmcoXG4gICAgaXNNcGN2MjogYm9vbGVhbixcbiAgICByZXFJZD86IElSZXF1ZXN0VHJhY2VyLFxuICAgIGVudGVycHJpc2VJZD86IHN0cmluZ1xuICApOiBQcm9taXNlPG9wZW5wZ3AuS2V5PiB7XG4gICAgbGV0IGJpdGdvR3BnUHViS2V5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiaXRnb0tleUNoYWluID0gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5nZXQoeyBpZDogdGhpcy53YWxsZXQua2V5SWRzKClbS2V5SW5kaWNlcy5CSVRHT10sIHJlcUlkIH0pO1xuICAgICAgaWYgKCFiaXRnb0tleUNoYWluIHx8ICFiaXRnb0tleUNoYWluLmhzbVR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdGdvIEdQRyBQdWIgS2V5IFR5cGUuJyk7XG4gICAgICB9XG4gICAgICBiaXRnb0dwZ1B1YktleSA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7XG4gICAgICAgIGFybW9yZWRLZXk6IGdldEJpdGdvTXBjR3BnUHViS2V5KFxuICAgICAgICAgIHRoaXMuYml0Z28uZ2V0RW52KCksXG4gICAgICAgICAgYml0Z29LZXlDaGFpbi5oc21UeXBlID09PSAnbml0cm8nID8gJ25pdHJvJyA6ICdvbnByZW0nLFxuICAgICAgICAgIGlzTXBjdjIgPyAnbXBjdjInIDogJ21wY3YxJ1xuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCFlbnZSZXF1aXJlc0JpdGdvUHViR3BnS2V5Q29uZmlnKHRoaXMuYml0Z28uZ2V0RW52KCkpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgVW5hYmxlIHRvIGdldCBCaXRHbyBHUEcga2V5IGJhc2VkIG9uIGtleSBkYXRhIHdpdGggZXJyb3I6ICR7ZX0uIEZldGNoaW5nIEJpdEdvIEdQRyBrZXkgYmFzZWQgb24gZmVhdHVyZSBmbGFncy5gXG4gICAgICAgICk7XG4gICAgICAgIC8vIEZpcnN0IHRyeSB0byBnZXQgdGhlIGtleSBiYXNlZCBvbiBmZWF0dXJlIGZsYWdzLCBpZiB0aGF0IGZhaWxzLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBrZXkgZnJvbSBjb25zdGFudHMgYXBpLlxuICAgICAgICBiaXRnb0dwZ1B1YktleSA9IGF3YWl0IHRoaXMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKGVudGVycHJpc2VJZCwgaXNNcGN2MiwgcmVxSWQpXG4gICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICBhc3luYyAocHViS2V5KSA9PlxuICAgICAgICAgICAgICBwdWJLZXkgPz8gKGlzTXBjdjIgPyBhd2FpdCB0aGlzLmdldEJpdGdvTXBjdjJQdWJsaWNHcGdLZXkoKSA6IGF3YWl0IHRoaXMuZ2V0Qml0Z29QdWJsaWNHcGdLZXkoKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLmNhdGNoKGFzeW5jIChlKSA9PiAoaXNNcGN2MiA/IGF3YWl0IHRoaXMuZ2V0Qml0Z29NcGN2MlB1YmxpY0dwZ0tleSgpIDogYXdhaXQgdGhpcy5nZXRCaXRnb1B1YmxpY0dwZ0tleSgpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEVudmlyb25tZW50IFwiJHt0aGlzLmJpdGdvLmdldEVudigpfVwiIHJlcXVpcmVzIGEgQml0R28gR1BHIFB1YiBLZXkgQ29uZmlnIGluIEJpdEdvSlMgZm9yIFRTUy4gRXJyb3IgdGhyb3duIHdoaWxlIGdldHRpbmcgdGhlIGtleSBmcm9tIGNvbmZpZzogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJpdGdvR3BnUHViS2V5O1xuICB9XG5cbiAgYXN5bmMgZ2V0Qml0Z29QdWJsaWNHcGdLZXkoKTogUHJvbWlzZTxvcGVucGdwLktleT4ge1xuICAgIGlmICghdGhpcy5iaXRnb1B1YmxpY0dwZ0tleSkge1xuICAgICAgLy8gcmV0cnkgZ2V0dGluZyBiaXRnbydzIGdwZyBrZXlcbiAgICAgIGF3YWl0IHRoaXMuc2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbyk7XG4gICAgICBpZiAoIXRoaXMuYml0Z29QdWJsaWNHcGdLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBCaXRnbydzIGdwZyBrZXlcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYml0Z29QdWJsaWNHcGdLZXk7XG4gIH1cblxuICBhc3luYyBnZXRCaXRnb01wY3YyUHVibGljR3BnS2V5KCk6IFByb21pc2U8b3BlbnBncC5LZXk+IHtcbiAgICBpZiAoIXRoaXMuYml0Z29NUEN2MlB1YmxpY0dwZ0tleSkge1xuICAgICAgLy8gcmV0cnkgZ2V0dGluZyBiaXRnbydzIGdwZyBrZXlcbiAgICAgIGF3YWl0IHRoaXMuc2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbyk7XG4gICAgICBpZiAoIXRoaXMuYml0Z29NUEN2MlB1YmxpY0dwZ0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IEJpdGdvJ3MgZ3BnIGtleVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQml0Z29IZWxkQmFja3VwS2V5U2hhcmUoXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBlbnRlcnByaXNlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZT4ge1xuICAgIGNvbnN0IGtleVJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iYXNlQ29pbi51cmwoJy9rcnMvYmFja3Vwa2V5cycpKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBlbnRlcnByaXNlLFxuICAgICAgICB1c2VyR1BHUHVibGljS2V5OiB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KCk7XG4gICAgaWYgKCFrZXlSZXNwb25zZSB8fCAha2V5UmVzcG9uc2Uua2V5U2hhcmVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgYmFja3VwIHNoYXJlcyBmcm9tIEJpdEdvLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGtleVJlc3BvbnNlLmlkLFxuICAgICAga2V5U2hhcmVzOiBrZXlSZXNwb25zZS5rZXlTaGFyZXMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5hbGl6ZUJpdGdvSGVsZEJhY2t1cEtleVNoYXJlKFxuICAgIGtleUlkOiBzdHJpbmcsXG4gICAgY29tbW9uS2V5Y2hhaW46IHN0cmluZyxcbiAgICB1c2VyS2V5U2hhcmU6IEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgYmFja3VwR3BnS2V5OiBLZXlcbiAgKTogUHJvbWlzZTxCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGNyZWF0ZVVzZXJLZXljaGFpbihwYXJhbXM6IENyZWF0ZUtleWNoYWluUGFyYW1zQmFzZSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBjcmVhdGVCYWNrdXBLZXljaGFpbihwYXJhbXM6IENyZWF0ZUtleWNoYWluUGFyYW1zQmFzZSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBjcmVhdGVCaXRnb0tleWNoYWluKHBhcmFtczogQ3JlYXRlQml0R29LZXljaGFpblBhcmFtc0Jhc2UpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1RoaXJkUGFydHlCYWNrdXA/OiBib29sZWFuO1xuICAgIGJhY2t1cFByb3ZpZGVyPzogQmFja3VwUHJvdmlkZXI7XG4gIH0pOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBzaWduVHhSZXF1ZXN0KHBhcmFtczogVFNTUGFyYW1zV2l0aFBydik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UocGFyYW1zOiBUU1NQYXJhbXNGb3JNZXNzYWdlKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgYSB0cmFuc2FjdGlvbiB1c2luZyBUU1MgZm9yIEVkRFNBIGFuZCB0aHJvdWdoIHV0aWxpemF0aW9uIG9mIGN1c3RvbSBzaGFyZSBnZW5lcmF0b3JzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSB0eFJlcXVlc3QgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IHdpdGggdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyUlNoYXJlR2VuZXJhdG9yIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIFIgc2hhcmVzIGluIHRoZSBFZERTQSBUU1MgZmxvd1xuICAgKiBAcGFyYW0ge0N1c3RvbUdTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJHU2hhcmVHZW5lcmF0b3IgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgRyBzaGFyZXMgaW4gdGhlIEVkRFNBIFRTUyBmbG93XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59IC0gYSBzaWduZWQgdHggcmVxdWVzdFxuICAgKi9cbiAgc2lnbkVkZHNhVHNzVXNpbmdFeHRlcm5hbFNpZ25lcihcbiAgICB0eFJlcXVlc3Q6IHN0cmluZyB8IFR4UmVxdWVzdCxcbiAgICBleHRlcm5hbFNpZ25lckNvbW1pdG1lbnRHZW5lcmF0b3I6IEN1c3RvbUNvbW1pdG1lbnRHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJSU2hhcmVHZW5lcmF0b3I6IEN1c3RvbVJTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lckdTaGFyZUdlbmVyYXRvcjogQ3VzdG9tR1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIGEgdHJhbnNhY3Rpb24gdXNpbmcgVFNTIGZvciBFQ0RTQSBhbmQgdGhyb3VnaCB1dGlsaXphdGlvbiBvZiBjdXN0b20gc2hhcmUgZ2VuZXJhdG9yc1xuICAgKlxuICAgKiBAcGFyYW0ge3BhcmFtczogVFNTUGFyYW1zIHwgVFNTUGFyYW1zRm9yTWVzc2FnZX0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgcGFyYW1ldGVycyB0byBzaWduIGEgdHJhbnNhY3Rpb24gb3IgYSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge1JlcXVlc3RUeXBlfSByZXF1ZXN0VHlwZSAtIHRoZSB0eXBlIG9mIHRoZSByZXF1ZXN0IHRvIHNpZ24gKHRyYW5zYWN0aW9uIG9yIG1lc3NhZ2UpLlxuICAgKiBAcGFyYW0ge0N1c3RvbVBhaWxsaWVyTW9kdWx1c0dldHRlckZ1bmN0aW9ufSBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlciBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBQYWlsbGllciBNb2R1bHVzIHNoYXJlcyBpbiB0aGUgRUNEU0EgVFNTIGZsb3cuXG4gICAqIEBwYXJhbSB7Q3VzdG9tS1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lcktTaGFyZUdlbmVyYXRvciBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBLIHNoYXJlcyBpbiB0aGUgRUNEU0EgVFNTIGZsb3cuXG4gICAqIEBwYXJhbSB7Q3VzdG9tTXVEZWx0YVNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lck11RGVsdGFTaGFyZUdlbmVyYXRvciBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBNdSBhbmQgRGVsdGEgc2hhcmVzIGluIHRoZSBFQ0RTQSBUU1MgZmxvdy5cbiAgICogQHBhcmFtIHtDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyU1NoYXJlR2VuZXJhdG9yIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIFMgc2hhcmVzIGluIHRoZSBFQ0RTQSBUU1MgZmxvdy5cbiAgICovXG4gIHNpZ25FY2RzYVRzc1VzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgcGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgICBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlcjogQ3VzdG9tUGFpbGxpZXJNb2R1bHVzR2V0dGVyRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJLU2hhcmVHZW5lcmF0b3I6IEN1c3RvbUtTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lck11RGVsdGFTaGFyZUdlbmVyYXRvcjogQ3VzdG9tTXVEZWx0YVNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyU1NoYXJlR2VuZXJhdG9yOiBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb25cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgYSB0cmFuc2FjdGlvbiB1c2luZyBUU1MgTVBDdjIgZm9yIEVDRFNBIGFuZCB0aHJvdWdoIHV0aWxpemF0aW9uIG9mIGN1c3RvbSBzaGFyZSBnZW5lcmF0b3JzXG4gICAqXG4gICAqIEBwYXJhbSB7VFNTUGFyYW1zIHwgVFNTUGFyYW1zRm9yTWVzc2FnZX0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgcGFyYW1ldGVycyB0byBzaWduIGEgdHJhbnNhY3Rpb24gb3IgYSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge0N1c3RvbU1QQ3YyU2lnbmluZ1JvdW5kMUdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJNUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0b3IgLSBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBNUEN2MiBSb3VuZCAxIHNoYXJlcyBpbiB0aGUgRUNEU0EgVFNTIE1QQ3YyIGZsb3cuXG4gICAqIEBwYXJhbSB7Q3VzdG9tTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lck1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRvciAtIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIE1QQ3YyIFJvdW5kIDIgc2hhcmVzIGluIHRoZSBFQ0RTQSBUU1MgTVBDdjIgZmxvdy5cbiAgICogQHBhcmFtIHtDdXN0b21NUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdG9yIC0gYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgTVBDdjIgUm91bmQgMyBzaGFyZXMgaW4gdGhlIEVDRFNBIFRTUyBNUEN2MiBmbG93LlxuICAgKiBAcGFyYW0ge1JlcXVlc3RUeXBlfSByZXF1ZXN0VHlwZSAtIHRoZSB0eXBlIG9mIHRoZSByZXF1ZXN0IHRvIHNpZ24gKHRyYW5zYWN0aW9uIG9yIG1lc3NhZ2UpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fSAtIGEgc2lnbmVkIHR4IHJlcXVlc3RcbiAgICovXG4gIHNpZ25FY2RzYU1QQ3YyVHNzVXNpbmdFeHRlcm5hbFNpZ25lcihcbiAgICBwYXJhbXM6IFRTU1BhcmFtcyB8IFRTU1BhcmFtc0Zvck1lc3NhZ2UsXG4gICAgZXh0ZXJuYWxTaWduZXJNUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0b3I6IEN1c3RvbU1QQ3YyU2lnbmluZ1JvdW5kMUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lck1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRvcjogQ3VzdG9tTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdG9yOiBDdXN0b21NUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgcmVxdWVzdFR5cGU/OiBSZXF1ZXN0VHlwZVxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQ29tbWl0bWVudCAoVXNlciB0byBCaXRHbykgc2hhcmUgZnJvbSBhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgcHJpdmF0ZSB1c2VyIHNpZ25pbmcgbWF0ZXJpYWxcbiAgICogRUREU0Egb25seVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdFxuICAgKiBAcGFyYW0ge1R4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgd2l0aCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBydiAtIHVzZXIgc2lnbmluZyBtYXRlcmlhbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHVzZXJUb0JpdGdvQ29tbWl0bWVudDogQ29tbWl0bWVudFNoYXJlUmVjb3IsIGVuY3J5cHRlZFNpZ25lclNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZCB9Pn0gLSBDb21taXRtZW50IFNoYXJlIGFuZCB0aGUgRW5jcnlwdGVkIFNpZ25lciBTaGFyZSB0byBCaXRHb1xuICAgKi9cbiAgY3JlYXRlQ29tbWl0bWVudFNoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdDtcbiAgICBwcnY6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgYml0Z29HcGdQdWJLZXk6IHN0cmluZztcbiAgfSk6IFByb21pc2U8e1xuICAgIHVzZXJUb0JpdGdvQ29tbWl0bWVudDogQ29tbWl0bWVudFNoYXJlUmVjb3JkO1xuICAgIGVuY3J5cHRlZFNpZ25lclNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZDtcbiAgICBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQ7XG4gIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFIgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCB3aXRoIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLndhbGxldFBhc3NwaHJhc2VdIC0gd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHtFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZH0gW3BhcmFtcy5lbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZV0gLSBlbmNyeXB0ZWQgdXNlciB0byBiaXRnbyBSIHNoYXJlIGdlbmVyYXRlZCBpbiB0aGUgY29tbWl0bWVudCBwaGFzZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHJTaGFyZTogU2lnblNoYXJlIH0+fSAtIFIgU2hhcmUgdG8gQml0R29cbiAgICovXG4gIGNyZWF0ZVJTaGFyZUZyb21UeFJlcXVlc3QocGFyYW1zOiB7XG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZDtcbiAgfSk6IFByb21pc2U8eyByU2hhcmU6IFNpZ25TaGFyZSB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEcgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCB3aXRoIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEBwYXJhbSB7U2lnbmF0dXJlU2hhcmVSZWNvcmR9IHBhcmFtcy5iaXRnb1RvVXNlclJTaGFyZSAtIEJpdEdvIHRvIFVzZXIgUiBTaGFyZVxuICAgKiBAcGFyYW0ge1NpZ25TaGFyZX0gcGFyYW1zLnVzZXJUb0JpdGdvUlNoYXJlIC0gVXNlciB0byBCaXRHbyBSIFNoYXJlXG4gICAqIEBwYXJhbSB7Q29tbWl0bWVudFNoYXJlUmVjb3JkfSBwYXJhbXMuYml0Z29Ub1VzZXJDb21taXRtZW50IC0gQml0R28gdG8gVXNlciBDb21taXRtZW50XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEdTaGFyZT59IC0gR1NoYXJlIGZyb20gVXNlciB0byBCaXRHb1xuICAgKi9cbiAgY3JlYXRlR1NoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdDtcbiAgICBwcnY6IHN0cmluZztcbiAgICBiaXRnb1RvVXNlclJTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgdXNlclRvQml0Z29SU2hhcmU6IFNpZ25TaGFyZTtcbiAgICBiaXRnb1RvVXNlckNvbW1pdG1lbnQ6IENvbW1pdG1lbnRTaGFyZVJlY29yZDtcbiAgfSk6IFByb21pc2U8R1NoYXJlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgYW5kIHZlcmlmeSBpdFxuICAgKlxuICAgKiBAcGFyYW0ge1ByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9uc30gcGFyYW1zIC0gcGFyYW1ldGVycyB0byBidWlsZCB0aGUgdHhcbiAgICogQHBhcmFtIHtUeFJlcXVlc3RWZXJzaW9ufSBhcGlWZXJzaW9uIGxpdGUgb3IgZnVsbFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZpZXcgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgaXMgdG8gcHJldmlldyBhIHR4IHJlcXVlc3QsIHdoaWNoIHdpbGwgbm90IGluaXRpYXRlIHBvbGljeSBjaGVja3Mgb3IgcGVuZGluZyBhcHByb3ZhbHNcbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gLSBhIGJ1aWx0IHR4IHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHByZWJ1aWxkVHhXaXRoSW50ZW50KFxuICAgIHBhcmFtczogUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24gPSAnbGl0ZScsXG4gICAgcHJldmlldz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBpbnRlbnRPcHRpb25zID0gdGhpcy5wb3B1bGF0ZUludGVudCh0aGlzLmJhc2VDb2luLCBwYXJhbXMpO1xuXG4gICAgY29uc3Qgd2hpdGVsaXN0ZWRQYXJhbXMgPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgLi4uaW50ZW50T3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiBhcGlWZXJzaW9uLFxuICAgICAgcHJldmlldyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVxVHJhY2VyID0gcGFyYW1zLnJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gICAgY29uc3QgdW5zaWduZWRUeCA9IChhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLnVybCgnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHhyZXF1ZXN0cycsIDIpKVxuICAgICAgLnNlbmQod2hpdGVsaXN0ZWRQYXJhbXMpXG4gICAgICAucmVzdWx0KCkpIGFzIFR4UmVxdWVzdDtcblxuICAgIHJldHVybiB1bnNpZ25lZFR4O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgZm9yIG1lc3NhZ2Ugc2lnbmluZ1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBhcGlWZXJzaW9uXG4gICAqIEBwYXJhbSBwcmV2aWV3XG4gICAqL1xuICBhc3luYyBjcmVhdGVUeFJlcXVlc3RXaXRoSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcoXG4gICAgcGFyYW1zOiBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2Z1bGwnLFxuICAgIHByZXZpZXc/OiBib29sZWFuXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcgPSB7XG4gICAgICBjdXN0b2RpYW5NZXNzYWdlSWQ6IHBhcmFtcy5jdXN0b2RpYW5NZXNzYWdlSWQsXG4gICAgICBpbnRlbnRUeXBlOiBwYXJhbXMuaW50ZW50VHlwZSxcbiAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICBtZW1vOiBwYXJhbXMubWVtbz8udmFsdWUsXG4gICAgICBpc1RzczogcGFyYW1zLmlzVHNzLFxuICAgICAgbWVzc2FnZVJhdzogcGFyYW1zLm1lc3NhZ2VSYXcsXG4gICAgICBtZXNzYWdlRW5jb2RlZDogcGFyYW1zLm1lc3NhZ2VFbmNvZGVkID8/ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUeFJlcXVlc3RCYXNlKGludGVudE9wdGlvbnMsIGFwaVZlcnNpb24sIHByZXZpZXcsIHBhcmFtcy5yZXFJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgdHggcmVxdWVzdCBmcm9tIHBhcmFtcyBmb3IgdHlwZSBkYXRhIHNpZ25pbmdcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gYXBpVmVyc2lvblxuICAgKiBAcGFyYW0gcHJldmlld1xuICAgKi9cbiAgYXN5bmMgY3JlYXRlVHhSZXF1ZXN0V2l0aEludGVudEZvclR5cGVkRGF0YVNpZ25pbmcoXG4gICAgcGFyYW1zOiBJbnRlbnRPcHRpb25zRm9yVHlwZWREYXRhLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24gPSAnZnVsbCcsXG4gICAgcHJldmlldz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBpbnRlbnRPcHRpb25zOiBQb3B1bGF0ZWRJbnRlbnRGb3JUeXBlZERhdGFTaWduaW5nID0ge1xuICAgICAgY3VzdG9kaWFuTWVzc2FnZUlkOiBwYXJhbXMuY3VzdG9kaWFuTWVzc2FnZUlkLFxuICAgICAgaW50ZW50VHlwZTogcGFyYW1zLmludGVudFR5cGUsXG4gICAgICBzZXF1ZW5jZUlkOiBwYXJhbXMuc2VxdWVuY2VJZCxcbiAgICAgIGNvbW1lbnQ6IHBhcmFtcy5jb21tZW50LFxuICAgICAgbWVtbzogcGFyYW1zLm1lbW8/LnZhbHVlLFxuICAgICAgaXNUc3M6IHBhcmFtcy5pc1RzcyxcbiAgICAgIG1lc3NhZ2VSYXc6IHBhcmFtcy50eXBlZERhdGFSYXcsXG4gICAgICBtZXNzYWdlRW5jb2RlZDogcGFyYW1zLnR5cGVkRGF0YUVuY29kZWQgPz8gJycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVR4UmVxdWVzdEJhc2UoaW50ZW50T3B0aW9ucywgYXBpVmVyc2lvbiwgcHJldmlldywgcGFyYW1zLnJlcUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBCaXRnbyBBUEkgdG8gY3JlYXRlIHR4IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVR4UmVxdWVzdEJhc2UoXG4gICAgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yVHlwZWREYXRhU2lnbmluZyB8IFBvcHVsYXRlZEludGVudEZvck1lc3NhZ2VTaWduaW5nLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24sXG4gICAgcHJldmlldz86IGJvb2xlYW4sXG4gICAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlclxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGNvbnN0IHdoaXRlbGlzdGVkUGFyYW1zID0ge1xuICAgICAgaW50ZW50OiB7XG4gICAgICAgIC4uLmludGVudE9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHByZXZpZXcsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gICAgcmV0dXJuIHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2AsIDIpKVxuICAgICAgLnNlbmQod2hpdGVsaXN0ZWRQYXJhbXMpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBkZWxldGUgc2lnbmF0dXJlIHNoYXJlcyBmb3IgYSB0eFJlcXVlc3QsIHRoZSBlbmRwb2ludCBkZWxldGUgdGhlIHNpZ25hdHVyZXMgYW5kIHJldHVybiB0aGVtXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eFJlcXVlc3RJZCB0eCBpZCByZWZlcmVuY2UgdG8gZGVsZXRlIHNpZ25hdHVyZSBzaGFyZXNcbiAgICogQHBhcmFtIHtJUmVxdWVzdFRyYWNlcn0gcmVxSWQgLSB0aGUgcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7U2lnbmF0dXJlU2hhcmVSZWNvcmRbXX1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3RJZDogc3RyaW5nLCByZXFJZD86IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZFtdPiB7XG4gICAgY29uc3QgcmVxVHJhY2VyID0gcmVxSWQgfHwgbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgICByZXR1cm4gdGhpcy5iaXRnb1xuICAgICAgLmRlbCh0aGlzLmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L3R4cmVxdWVzdHMvJHt0eFJlcXVlc3RJZH0vc2lnbmF0dXJlc2hhcmVzYCwgMikpXG4gICAgICAuc2VuZCgpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgc2VuZCBwcm9jZWR1cmUgb25jZSBCaXRnbyBoYXMgdGhlIFVzZXIgVG8gQml0Z28gR1NoYXJlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAgICogQHBhcmFtIHtJUmVxdWVzdFRyYWNlcn0gcmVxSWQgLSB0aGUgcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgYXN5bmMgc2VuZFR4UmVxdWVzdCh0eFJlcXVlc3RJZDogc3RyaW5nLCByZXFJZD86IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFUcmFjZXIpO1xuICAgIHJldHVybiB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJhc2VDb2luLnVybCgnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHgvc2VuZCcpKVxuICAgICAgLnNlbmQoeyB0eFJlcXVlc3RJZCB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBzaWduYXR1cmUgc2hhcmVzLCBnZXQgdGhlIHR4IHJlcXVlc3Qgd2l0aG91dCB0aGVtIGZyb20gdGhlIGRiIGFuZCBzaWduIGl0IHRvIGZpbmFsbHkgc2VuZCBpdC5cbiAgICpcbiAgICogTm90ZSA6IFRoaXMgY2FuIGJlIHBlcmZvcm1lZCBpbiBvcmRlciB0byByZWFjaCBsYXRlc3QgbmV0d29yayBjb25kaXRpb25zIHJlcXVpcmVkIG9uIHBlbmRpbmcgYXBwcm92YWwgZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZCB0byBtYWtlIHRoZSByZXF1ZXN0cy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlY3J5cHRlZFBydiAtIGRlY3J5cHRlZCBwcnYgdG8gc2lnbiB0aGUgdHggcmVxdWVzdC5cbiAgICogQHBhcmFtIHtSZXF1ZXN0VHJhY2VyfSByZXFJZCBpZCB0cmFjZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyByZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZDogc3RyaW5nLCBkZWNyeXB0ZWRQcnY6IHN0cmluZywgcmVxSWQ6IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3RJZCwgcmVxSWQpO1xuICAgIC8vIGFmdGVyIGRlbGV0ZSBzaWduYXR1cmVzIHNoYXJlcyBnZXQgdGhlIHR4IHdpdGhvdXQgdGhlbVxuICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RJZCwgcmVxSWQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ25UeFJlcXVlc3QoeyB0eFJlcXVlc3QsIHBydjogZGVjcnlwdGVkUHJ2LCByZXFJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXRlc3QgVHggUmVxdWVzdCBieSBpZFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gICAqIEBwYXJhbSB7SVJlcXVlc3RUcmFjZXJ9IHJlcUlkIC0gcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fVxuICAgKi9cbiAgYXN5bmMgZ2V0VHhSZXF1ZXN0KHR4UmVxdWVzdElkOiBzdHJpbmcsIHJlcUlkPzogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHJldHVybiBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQsIHJlcUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgdGhpcmQgcGFydHkgYmFja3VwIHByb3ZpZGVyIGlzIHZhbGlkL3N1cHBvcnRlZFxuICAgKiBAcGFyYW0gYmFja3VwUHJvdmlkZXIgLSB0aGUgYmFja3VwIHByb3ZpZGVyIGNsaWVudCBzZWxlY3RlZFxuICAgKi9cbiAgaXNWYWxpZFRoaXJkUGFydHlCYWNrdXBQcm92aWRlcihcbiAgICBiYWNrdXBQcm92aWRlcjogQmFja3VwUHJvdmlkZXIgfCBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogYmFja3VwUHJvdmlkZXIgaXMgQmFja3VwUHJvdmlkZXIge1xuICAgIC8vIEFzIG9mIG5vdywgQml0R28gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIEtSUyBwcm92aWRlciBmb3IgVFNTXG4gICAgcmV0dXJuICEhKGJhY2t1cFByb3ZpZGVyICYmIGJhY2t1cFByb3ZpZGVyID09PSAnQml0R29UcnVzdEFzS3JzJyk7XG4gIH1cblxuICAvKipcbiAgICogSXQgZ2V0cyB0aGUgYXBwcm9wcmlhdGUgQml0R28gR1BHIHB1YmxpYyBrZXkgZm9yIGtleSBjcmVhdGlvbiBiYXNlZCBvbiBhXG4gICAqIGNvbWJpbmF0aW9uIG9mIGNvaW4gYW5kIHRoZSBmZWF0dXJlIGZsYWdzIG9uIHRoZSB1c2VyIGFuZCB0aGVpciBlbnRlcnByaXNlIGlmIHNldC5cbiAgICogQHBhcmFtIGVudGVycHJpc2VJZCAtIGVudGVycHJpc2UgdW5kZXIgd2hpY2ggdXNlciB3YW50cyB0byBjcmVhdGUgdGhlIHdhbGxldFxuICAgKiBAcGFyYW0gaXNNUEN2MiAtIHRydWUgdG8gZ2V0IHRoZSBNUEN2MiBHUEcgcHVibGljIGtleSwgZGVmYXVsdHMgdG8gZmFsc2VcbiAgICogQHBhcmFtIHJlcUlkIC0gcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncyhcbiAgICBlbnRlcnByaXNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBpc01QQ3YyID0gZmFsc2UsXG4gICAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlclxuICApOiBQcm9taXNlPEtleT4ge1xuICAgIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gICAgY29uc3QgcmVzcG9uc2U6IEJpdGdvR1BHUHVibGljS2V5ID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLmdldCh0aGlzLmJhc2VDb2luLnVybCgnL3Rzcy9wdWJrZXknKSlcbiAgICAgIC5xdWVyeSh7IGVudGVycHJpc2VJZCB9KVxuICAgICAgLnJldHJ5KDMpXG4gICAgICAucmVzdWx0KCk7XG4gICAgY29uc3QgYml0Z29QdWJsaWNLZXlTdHIgPSBpc01QQ3YyID8gcmVzcG9uc2UubXBjdjJQdWJsaWNLZXkgOiByZXNwb25zZS5wdWJsaWNLZXk7XG4gICAgcmV0dXJuIHJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb1B1YmxpY0tleVN0ciBhcyBzdHJpbmcgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzdXBwb3J0ZWQgVHhSZXF1ZXN0IHZlcnNpb25zIGZvciB0aGlzIHdhbGxldFxuICAgKi9cbiAgcHVibGljIHN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zKCk6IFR4UmVxdWVzdFZlcnNpb25bXSB7XG4gICAgY29uc3Qgd2FsbGV0VHlwZSA9IHRoaXMuX3dhbGxldD8udHlwZSgpO1xuICAgIGNvbnN0IHN1cHBvcnRlZFdhbGxldFR5cGVzID0gWydjdXN0b2RpYWwnLCAnY29sZCcsICdob3QnXTtcbiAgICBpZiAoIXdhbGxldFR5cGUgfHwgdGhpcy5fd2FsbGV0Py5tdWx0aXNpZ1R5cGUoKSAhPT0gJ3RzcycgfHwgIXN1cHBvcnRlZFdhbGxldFR5cGVzLmluY2x1ZGVzKHdhbGxldFR5cGUpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIGlmICh0aGlzLl93YWxsZXQ/LmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpID09PSAnZWNkc2EnKSB7XG4gICAgICByZXR1cm4gWydmdWxsJ107XG4gICAgfSBlbHNlIGlmICh3YWxsZXRUeXBlID09PSAnY3VzdG9kaWFsJyB8fCB3YWxsZXRUeXBlID09PSAnY29sZCcpIHtcbiAgICAgIHJldHVybiBbJ2Z1bGwnXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3dhbGxldD8uYmFzZUNvaW4uZ2V0TVBDQWxnb3JpdGhtKCkgPT09ICdlZGRzYScgJiYgd2FsbGV0VHlwZSA9PT0gJ2hvdCcpIHtcbiAgICAgIHJldHVybiBbJ2xpdGUnLCAnZnVsbCddO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0eFJlcXVlc3QgaXMgdXNpbmcgYXBpVmVyc2lvbiA9PSBmdWxsIGFuZCBpcyBwZW5kaW5nIGFwcHJvdmFsXG4gICAqIEBwYXJhbSB0eFJlcXVlc3RcbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgaXNQZW5kaW5nQXBwcm92YWxUeFJlcXVlc3RGdWxsKHR4UmVxdWVzdDogVHhSZXF1ZXN0KTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBhcGlWZXJzaW9uLCBzdGF0ZSB9ID0gdHhSZXF1ZXN0O1xuICAgIHJldHVybiBhcGlWZXJzaW9uID09PSAnZnVsbCcgJiYgJ3BlbmRpbmdBcHByb3ZhbCcgPT09IHN0YXRlO1xuICB9XG59XG4iXX0=