@bitgo/abstract-utxo 10.17.0 → 10.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/abstractUtxoCoin.d.ts +5 -6
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +24 -5
- package/dist/cjs/src/address/fixedScript.d.ts +1 -5
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
- package/dist/cjs/src/address/fixedScript.js +3 -5
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +4 -5
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/NamedDescriptor.js +4 -6
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -38
- package/dist/cjs/src/descriptor/builder/builder.d.ts +2 -3
- package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/builder/builder.js +1 -1
- package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/builder/parse.js +3 -3
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +2 -2
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.js +1 -1
- package/dist/cjs/src/descriptor/index.d.ts +1 -1
- package/dist/cjs/src/descriptor/index.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/index.js +1 -1
- package/dist/cjs/src/descriptor/validatePolicy.d.ts +3 -3
- package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/validatePolicy.js +3 -3
- package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
- package/dist/cjs/src/impl/bch/bch.js +6 -38
- package/dist/cjs/src/impl/doge/doge.d.ts +2 -1
- package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
- package/dist/cjs/src/impl/doge/doge.js +1 -1
- package/dist/cjs/src/impl/ltc/ltc.d.ts +0 -1
- package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -1
- package/dist/cjs/src/impl/ltc/ltc.js +3 -41
- package/dist/cjs/src/impl/ltc/tltc.d.ts +0 -1
- package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -1
- package/dist/cjs/src/impl/ltc/tltc.js +3 -40
- package/dist/cjs/src/index.d.ts +2 -0
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +3 -1
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +2 -2
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/descriptor/transaction.js +5 -8
- package/dist/cjs/src/recovery/RecoveryProvider.d.ts +1 -3
- package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -1
- package/dist/cjs/src/recovery/RecoveryProvider.js +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +73 -4
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +163 -129
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts +5 -5
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/crossChainRecovery.js +22 -121
- package/dist/cjs/src/recovery/psbt.d.ts +8 -31
- package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
- package/dist/cjs/src/recovery/psbt.js +14 -126
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +3 -3
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/explainPsbt.js +17 -54
- package/dist/cjs/src/transaction/descriptor/index.d.ts +1 -1
- package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/index.js +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.d.ts +6 -4
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.js +24 -50
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +6 -7
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/signPsbt.js +19 -18
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +4 -4
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +10 -38
- package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/explainTransaction.js +3 -2
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +1 -3
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/SigningError.js +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -8
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseOutput.js +6 -11
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +4 -2
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +2 -2
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +4 -8
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +6 -5
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +42 -7
- package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/signTransaction.js +10 -10
- package/dist/cjs/src/unspent.d.ts +55 -0
- package/dist/cjs/src/unspent.d.ts.map +1 -0
- package/dist/cjs/src/unspent.js +12 -0
- package/dist/cjs/src/wasmUtil.d.ts +29 -0
- package/dist/cjs/src/wasmUtil.d.ts.map +1 -0
- package/dist/cjs/src/wasmUtil.js +87 -0
- package/dist/cjs/test/unit/address.d.ts +1 -1
- package/dist/cjs/test/unit/address.d.ts.map +1 -1
- package/dist/cjs/test/unit/address.js +107 -137
- package/dist/cjs/test/unit/bip322.js +50 -1
- package/dist/cjs/test/unit/customSigner.js +5 -4
- package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +37 -4
- package/dist/cjs/test/unit/descriptor/builder.js +10 -4
- package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +37 -4
- package/dist/cjs/test/unit/descriptor/descriptorWallet.js +40 -6
- package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
- package/dist/cjs/test/unit/descriptorAddress.js +3 -3
- package/dist/cjs/test/unit/explainTransaction.js +26 -3
- package/dist/cjs/test/unit/keychains.js +40 -1
- package/dist/cjs/test/unit/postProcessPrebuild.d.ts +2 -0
- package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -0
- package/dist/cjs/test/unit/postProcessPrebuild.js +62 -0
- package/dist/cjs/test/unit/prebuildAndSign.d.ts +0 -4
- package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -1
- package/dist/cjs/test/unit/prebuildAndSign.js +12 -32
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +82 -259
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.js +144 -0
- package/dist/cjs/test/unit/recovery/crossChainRecovery.js +38 -35
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +186 -0
- package/dist/cjs/test/unit/recovery/mock.d.ts +15 -8
- package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
- package/dist/cjs/test/unit/recovery/mock.js +49 -77
- package/dist/cjs/test/unit/signTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/signTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/signTransaction.js +244 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/testSpoofTransaction.js +114 -0
- package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +46 -12
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -1
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +38 -4
- package/dist/cjs/test/unit/transaction/descriptor/parse.js +22 -19
- package/dist/cjs/test/unit/transaction/descriptor/sign.js +60 -16
- package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +43 -10
- package/dist/cjs/test/unit/transaction.js +6 -225
- package/dist/cjs/test/unit/util/address.d.ts +13 -0
- package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/address.js +15 -0
- package/dist/cjs/test/unit/util/index.d.ts +3 -0
- package/dist/cjs/test/unit/util/index.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/index.js +4 -1
- package/dist/cjs/test/unit/util/keychains.d.ts +29 -0
- package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/keychains.js +51 -1
- package/dist/cjs/test/unit/util/nockBitGo.d.ts +8 -1
- package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/nockBitGo.js +17 -1
- package/dist/cjs/test/unit/util/psbt.d.ts +19 -0
- package/dist/cjs/test/unit/util/psbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/psbt.js +21 -0
- package/dist/cjs/test/unit/util/transaction.d.ts +8 -4
- package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/transaction.js +19 -1
- package/dist/cjs/test/unit/util/unspents.d.ts +66 -8
- package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/unspents.js +130 -15
- package/dist/cjs/test/unit/util/utxoCoins.d.ts +13 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/utxoCoins.js +33 -2
- package/dist/cjs/test/unit/wallet.js +4 -4
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +5 -6
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +26 -7
- package/dist/esm/address/fixedScript.d.ts +1 -5
- package/dist/esm/address/fixedScript.d.ts.map +1 -1
- package/dist/esm/address/fixedScript.js +3 -5
- package/dist/esm/descriptor/NamedDescriptor.d.ts +4 -5
- package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -1
- package/dist/esm/descriptor/NamedDescriptor.js +5 -7
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -5
- package/dist/esm/descriptor/builder/builder.d.ts +2 -3
- package/dist/esm/descriptor/builder/builder.d.ts.map +1 -1
- package/dist/esm/descriptor/builder/builder.js +1 -1
- package/dist/esm/descriptor/builder/parse.d.ts.map +1 -1
- package/dist/esm/descriptor/builder/parse.js +3 -3
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +2 -2
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
- package/dist/esm/descriptor/createWallet/createDescriptors.js +1 -1
- package/dist/esm/descriptor/descriptorWallet.d.ts +1 -1
- package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -1
- package/dist/esm/descriptor/descriptorWallet.js +1 -1
- package/dist/esm/descriptor/index.d.ts +1 -1
- package/dist/esm/descriptor/index.d.ts.map +1 -1
- package/dist/esm/descriptor/index.js +1 -1
- package/dist/esm/descriptor/validatePolicy.d.ts +3 -3
- package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -1
- package/dist/esm/descriptor/validatePolicy.js +3 -3
- package/dist/esm/impl/bch/bch.d.ts.map +1 -1
- package/dist/esm/impl/bch/bch.js +6 -5
- package/dist/esm/impl/doge/doge.d.ts +2 -1
- package/dist/esm/impl/doge/doge.d.ts.map +1 -1
- package/dist/esm/impl/doge/doge.js +1 -1
- package/dist/esm/impl/ltc/ltc.d.ts +0 -1
- package/dist/esm/impl/ltc/ltc.d.ts.map +1 -1
- package/dist/esm/impl/ltc/ltc.js +3 -8
- package/dist/esm/impl/ltc/tltc.d.ts +0 -1
- package/dist/esm/impl/ltc/tltc.d.ts.map +1 -1
- package/dist/esm/impl/ltc/tltc.js +3 -7
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +2 -2
- package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/esm/offlineVault/descriptor/transaction.js +5 -8
- package/dist/esm/recovery/RecoveryProvider.d.ts +1 -3
- package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -1
- package/dist/esm/recovery/RecoveryProvider.js +1 -1
- package/dist/esm/recovery/backupKeyRecovery.d.ts +73 -4
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +165 -100
- package/dist/esm/recovery/crossChainRecovery.d.ts +5 -5
- package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/crossChainRecovery.js +24 -90
- package/dist/esm/recovery/psbt.d.ts +8 -31
- package/dist/esm/recovery/psbt.d.ts.map +1 -1
- package/dist/esm/recovery/psbt.js +14 -91
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts +3 -3
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/explainPsbt.js +14 -18
- package/dist/esm/transaction/descriptor/index.d.ts +1 -1
- package/dist/esm/transaction/descriptor/index.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/index.js +1 -1
- package/dist/esm/transaction/descriptor/parse.d.ts +6 -4
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parse.js +22 -15
- package/dist/esm/transaction/descriptor/signPsbt.d.ts +6 -7
- package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/signPsbt.js +19 -18
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +4 -4
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.js +10 -5
- package/dist/esm/transaction/explainTransaction.d.ts +2 -1
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/explainTransaction.js +3 -2
- package/dist/esm/transaction/fixedScript/SigningError.d.ts +1 -3
- package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/SigningError.js +1 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +2 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -8
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseOutput.js +6 -11
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +4 -2
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +2 -2
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.js +2 -6
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +6 -5
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.js +10 -8
- package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/signTransaction.js +10 -10
- package/dist/esm/unspent.d.ts +55 -0
- package/dist/esm/unspent.d.ts.map +1 -0
- package/dist/esm/unspent.js +8 -0
- package/dist/esm/wasmUtil.d.ts +29 -0
- package/dist/esm/wasmUtil.d.ts.map +1 -0
- package/dist/esm/wasmUtil.js +47 -0
- package/package.json +11 -12
- package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts +0 -2
- package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/btc/unit/btc.js +0 -220
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts +0 -4
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.js +0 -10
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts +0 -2
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.js +0 -18
- package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts +0 -2
- package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/ltc/unit/index.js +0 -39
|
@@ -33,27 +33,30 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.getOutputScript = getOutputScript;
|
|
37
|
-
exports.getWalletAddress = getWalletAddress;
|
|
38
36
|
exports.mockWalletUnspent = mockWalletUnspent;
|
|
39
37
|
exports.mockUnspentReplayProtection = mockUnspentReplayProtection;
|
|
40
38
|
exports.mockUnspent = mockUnspent;
|
|
39
|
+
exports.toUnspent = toUnspent;
|
|
40
|
+
exports.createWasmWalletUnspent = createWasmWalletUnspent;
|
|
41
|
+
exports.createMockPrevTx = createMockPrevTx;
|
|
42
|
+
exports.toUnspentWithPrevTx = toUnspentWithPrevTx;
|
|
41
43
|
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
42
44
|
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
43
45
|
const wasmUtxo = __importStar(require("@bitgo/wasm-utxo"));
|
|
44
46
|
const src_1 = require("../../../src");
|
|
45
47
|
const names_1 = require("../../../src/names");
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return
|
|
48
|
+
const address_1 = require("./address");
|
|
49
|
+
const { chainCodesP2sh, getExternalChainCode, getInternalChainCode } = utxolib.bitgo;
|
|
50
|
+
function toCoinName(network) {
|
|
51
|
+
if (typeof network === 'string') {
|
|
52
|
+
if (!(0, names_1.isUtxoCoinName)(network)) {
|
|
53
|
+
throw new Error(`not a valid coin name: ${network}`);
|
|
54
|
+
}
|
|
55
|
+
return network;
|
|
54
56
|
}
|
|
55
|
-
return
|
|
57
|
+
return (0, names_1.getCoinName)(network);
|
|
56
58
|
}
|
|
59
|
+
const defaultChain = getExternalChainCode(chainCodesP2sh);
|
|
57
60
|
function mockOutputIdForAddress(address) {
|
|
58
61
|
return (0, sdk_test_1.getSeed)(address).toString('hex') + ':1';
|
|
59
62
|
}
|
|
@@ -64,7 +67,7 @@ function mockWalletUnspent(network, walletKeys, { id, chain = defaultChain, inde
|
|
|
64
67
|
if (chain === undefined) {
|
|
65
68
|
throw new Error(`unspent chain must be set`);
|
|
66
69
|
}
|
|
67
|
-
const deriveAddress = getWalletAddress(network, walletKeys, chain, index);
|
|
70
|
+
const deriveAddress = (0, address_1.getWalletAddress)(toCoinName(network), walletKeys, chain, index);
|
|
68
71
|
if (address) {
|
|
69
72
|
if (address !== deriveAddress) {
|
|
70
73
|
throw new Error(`derivedAddress mismatch: ${address} derived=${deriveAddress}`);
|
|
@@ -85,7 +88,7 @@ function mockWalletUnspent(network, walletKeys, { id, chain = defaultChain, inde
|
|
|
85
88
|
};
|
|
86
89
|
}
|
|
87
90
|
function mockUnspentReplayProtection(network, value) {
|
|
88
|
-
const coinName = (
|
|
91
|
+
const coinName = toCoinName(network);
|
|
89
92
|
const addresses = (0, src_1.getReplayProtectionAddresses)(coinName);
|
|
90
93
|
if (addresses.length) {
|
|
91
94
|
const address = addresses[0];
|
|
@@ -95,7 +98,7 @@ function mockUnspentReplayProtection(network, value) {
|
|
|
95
98
|
value,
|
|
96
99
|
};
|
|
97
100
|
}
|
|
98
|
-
throw new Error(`${
|
|
101
|
+
throw new Error(`${coinName} has no replay protection unspents`);
|
|
99
102
|
}
|
|
100
103
|
function mockUnspent(network, walletKeys, chain, index, value) {
|
|
101
104
|
if (chain === 'replayProtection') {
|
|
@@ -105,4 +108,116 @@ function mockUnspent(network, walletKeys, chain, index, value) {
|
|
|
105
108
|
return mockWalletUnspent(network, walletKeys, { chain: getInternalChainCode(chain), value, index });
|
|
106
109
|
}
|
|
107
110
|
}
|
|
108
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Create unspent object from input script type, index, network and root wallet keys.
|
|
113
|
+
* Supports both utxolib and wasm-utxo RootWalletKeys.
|
|
114
|
+
*/
|
|
115
|
+
function toUnspent(input, index, network, rootWalletKeys) {
|
|
116
|
+
const scriptType = input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType;
|
|
117
|
+
const chain = getInternalChainCode(scriptType);
|
|
118
|
+
return mockWalletUnspent(network, rootWalletKeys, {
|
|
119
|
+
chain,
|
|
120
|
+
index,
|
|
121
|
+
value: input.value,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Create a mock wallet unspent using wasm-utxo only (no utxolib dependency).
|
|
126
|
+
* Uses createMockPrevTx to generate a realistic txid for the unspent.
|
|
127
|
+
*
|
|
128
|
+
* This is useful for tests that need a valid unspent but don't require the prevTx buffer.
|
|
129
|
+
*
|
|
130
|
+
* @param address - The wallet address for the unspent
|
|
131
|
+
* @param chain - The derivation chain
|
|
132
|
+
* @param index - The derivation index
|
|
133
|
+
* @param value - The value in satoshis (bigint)
|
|
134
|
+
* @param network - The network to get the output script
|
|
135
|
+
* @returns WalletUnspent with a valid txid from a wasm-utxo generated transaction
|
|
136
|
+
*/
|
|
137
|
+
function createWasmWalletUnspent(address, chain, index, value, network) {
|
|
138
|
+
// Get output script from address using correct wasm-utxo function
|
|
139
|
+
const outputScript = wasmUtxo.address.toOutputScriptWithCoin(address, toCoinName(network));
|
|
140
|
+
// Create a mock transaction with output at vout=0
|
|
141
|
+
const { txid } = createMockPrevTx(0, outputScript, BigInt(value));
|
|
142
|
+
return {
|
|
143
|
+
id: `${txid}:0`,
|
|
144
|
+
address,
|
|
145
|
+
chain,
|
|
146
|
+
index,
|
|
147
|
+
value,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Create a mock previous transaction using wasm-utxo's low-level Psbt class.
|
|
152
|
+
*
|
|
153
|
+
* Creates a valid transaction structure with:
|
|
154
|
+
* - A p2wpkh input (segwit, easy to construct)
|
|
155
|
+
* - Outputs including the target output at the specified vout
|
|
156
|
+
* - Reasonable fee rate (input value slightly higher than output sum)
|
|
157
|
+
*
|
|
158
|
+
* @param vout - The output index where the target output should be placed
|
|
159
|
+
* @param outputScript - The scriptPubKey for the target output
|
|
160
|
+
* @param value - The value in satoshis for the target output
|
|
161
|
+
* @returns Object with prevTx buffer and the transaction's txid
|
|
162
|
+
*/
|
|
163
|
+
function createMockPrevTx(vout, outputScript, value) {
|
|
164
|
+
// Create a p2wpkh script for the dummy input
|
|
165
|
+
// p2wpkh: OP_0 <20-byte-hash> - we use a deterministic hash
|
|
166
|
+
const dummyHash = (0, sdk_test_1.getSeed)('mock-prev-tx-input').subarray(0, 20);
|
|
167
|
+
const p2wpkhScript = new Uint8Array([0x00, 0x14, ...dummyHash]);
|
|
168
|
+
// Calculate total output value
|
|
169
|
+
const dummyOutputValue = BigInt(1000); // 1000 satoshis per dummy output
|
|
170
|
+
const totalOutputValue = dummyOutputValue * BigInt(vout) + value;
|
|
171
|
+
// Input value = output value + small fee (1000 sat - reasonable fee)
|
|
172
|
+
const inputValue = totalOutputValue + BigInt(1000);
|
|
173
|
+
// Create PSBT using WrapPsbt (exported as Psbt)
|
|
174
|
+
const psbt = new wasmUtxo.Psbt(2, 0);
|
|
175
|
+
// Add dummy segwit input - p2wpkh
|
|
176
|
+
psbt.addInput('01'.repeat(32), // non-zero txid to avoid coinbase detection
|
|
177
|
+
0, inputValue, p2wpkhScript);
|
|
178
|
+
// Add dummy outputs before the target vout
|
|
179
|
+
for (let i = 0; i < vout; i++) {
|
|
180
|
+
psbt.addOutput(p2wpkhScript, dummyOutputValue);
|
|
181
|
+
}
|
|
182
|
+
// Add the target output at the specified vout
|
|
183
|
+
psbt.addOutput(outputScript, value);
|
|
184
|
+
// Get the unsigned transaction bytes
|
|
185
|
+
// Note: This is a valid transaction structure without signatures
|
|
186
|
+
// For prevTx purposes, we just need the output scripts and values
|
|
187
|
+
const txBytes = psbt.getUnsignedTx();
|
|
188
|
+
// Parse with wasm-utxo Transaction to get the txid
|
|
189
|
+
const tx = wasmUtxo.Transaction.fromBytes(txBytes);
|
|
190
|
+
const txid = tx.getId();
|
|
191
|
+
return {
|
|
192
|
+
prevTx: Buffer.from(txBytes),
|
|
193
|
+
txid,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Create unspent with prevTx using wasm-utxo only (no utxolib dependency).
|
|
198
|
+
* The prevTx is built using wasm-utxo's low-level Psbt class.
|
|
199
|
+
*
|
|
200
|
+
* Key: The unspent id uses the actual txid from the generated prevTx,
|
|
201
|
+
* ensuring the MockRecoveryProvider returns the correct prevTx.
|
|
202
|
+
*/
|
|
203
|
+
function toUnspentWithPrevTx(input, index, network, rootWalletKeys) {
|
|
204
|
+
const scriptType = input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType;
|
|
205
|
+
const chain = getInternalChainCode(scriptType);
|
|
206
|
+
const coinName = toCoinName(network);
|
|
207
|
+
// Get the output script for the wallet address
|
|
208
|
+
const outputScript = wasmUtxo.fixedScriptWallet.outputScript(rootWalletKeys, chain, index, coinName);
|
|
209
|
+
// Create mock prevTx with output at vout=0
|
|
210
|
+
const { prevTx, txid } = createMockPrevTx(0, outputScript, input.value);
|
|
211
|
+
// Get the wallet address
|
|
212
|
+
const address = (0, address_1.getWalletAddress)(toCoinName(network), rootWalletKeys, chain, index);
|
|
213
|
+
// Use the actual txid from the prevTx in the unspent id
|
|
214
|
+
return {
|
|
215
|
+
id: `${txid}:0`,
|
|
216
|
+
address,
|
|
217
|
+
chain,
|
|
218
|
+
index,
|
|
219
|
+
value: input.value,
|
|
220
|
+
prevTx,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zcGVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC91bnNwZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThDQSw4Q0E2QkM7QUFFRCxrRUFlQztBQUVELGtDQVlDO0FBTUQsOEJBYUM7QUFzQkQsMERBb0JDO0FBZUQsNENBaURDO0FBU0Qsa0RBNEJDO0FBNVFELHlEQUEyQztBQUMzQyw4Q0FBMEM7QUFDMUMsMkRBQTZDO0FBRTdDLHNDQUE0RDtBQUM1RCw4Q0FBb0Y7QUFHcEYsdUNBQTZDO0FBRTdDLE1BQU0sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBVXJGLFNBQVMsVUFBVSxDQUFDLE9BQW1CO0lBQ3JDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUEsc0JBQWMsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLElBQUEsbUJBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBWUQsTUFBTSxZQUFZLEdBQWMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFckUsU0FBUyxzQkFBc0IsQ0FBQyxPQUFlO0lBQzdDLE9BQU8sSUFBQSxrQkFBTyxFQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUMvQixPQUFtQixFQUNuQixVQUEwQixFQUMxQixFQUFFLEVBQUUsRUFBRSxLQUFLLEdB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R0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckMsK0NBQStDO0lBQy9DLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFckcsMkNBQTJDO0lBQzNDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEUseUJBQXlCO0lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUEsMEJBQWdCLEVBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFcEYsd0RBQXdEO0lBQ3hELE9BQU87UUFDTCxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUk7UUFDZixPQUFPO1FBQ1AsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgZ2V0U2VlZCB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgKiBhcyB3YXNtVXR4byBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSwgaXNVdHhvQ29pbk5hbWUsIHR5cGUgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vc3JjL25hbWVzJztcbmltcG9ydCB0eXBlIHsgVW5zcGVudCwgVW5zcGVudFdpdGhQcmV2VHgsIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7IGdldFdhbGxldEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuXG5jb25zdCB7IGNoYWluQ29kZXNQMnNoLCBnZXRFeHRlcm5hbENoYWluQ29kZSwgZ2V0SW50ZXJuYWxDaGFpbkNvZGUgfSA9IHV0eG9saWIuYml0Z287XG5cbmV4cG9ydCB0eXBlIFV0eG9saWJSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG5leHBvcnQgdHlwZSBXYXNtUm9vdFdhbGxldEtleXMgPSB3YXNtVXR4by5maXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cztcbmV4cG9ydCB0eXBlIFJvb3RXYWxsZXRLZXlzID0gVXR4b2xpYlJvb3RXYWxsZXRLZXlzIHwgV2FzbVJvb3RXYWxsZXRLZXlzO1xudHlwZSBDaGFpbkNvZGUgPSB1dHhvbGliLmJpdGdvLkNoYWluQ29kZTtcblxuLyoqIEFjY2VwdCBlaXRoZXIgYSBjb2luIG5hbWUgc3RyaW5nIG9yIGEgdXR4b2xpYi5OZXR3b3JrIG9iamVjdCAqL1xuZXhwb3J0IHR5cGUgTmV0d29ya0FyZyA9IHN0cmluZyB8IHV0eG9saWIuTmV0d29yaztcblxuZnVuY3Rpb24gdG9Db2luTmFtZShuZXR3b3JrOiBOZXR3b3JrQXJnKTogVXR4b0NvaW5OYW1lIHtcbiAgaWYgKHR5cGVvZiBuZXR3b3JrID09PSAnc3RyaW5nJykge1xuICAgIGlmICghaXNVdHhvQ29pbk5hbWUobmV0d29yaykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IGEgdmFsaWQgY29pbiBuYW1lOiAke25ldHdvcmt9YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXR3b3JrO1xuICB9XG4gIHJldHVybiBnZXRDb2luTmFtZShuZXR3b3JrKTtcbn1cblxuZXhwb3J0IHR5cGUgSW5wdXRTY3JpcHRUeXBlID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzIHwgJ3JlcGxheVByb3RlY3Rpb24nO1xuXG4vKipcbiAqIElucHV0IGRlZmluaXRpb24gZm9yIHRvVW5zcGVudCBmdW5jdGlvblxuICovXG5leHBvcnQgdHlwZSBJbnB1dCA9IHtcbiAgc2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuICB2YWx1ZTogYmlnaW50O1xufTtcblxuY29uc3QgZGVmYXVsdENoYWluOiBDaGFpbkNvZGUgPSBnZXRFeHRlcm5hbENoYWluQ29kZShjaGFpbkNvZGVzUDJzaCk7XG5cbmZ1bmN0aW9uIG1vY2tPdXRwdXRJZEZvckFkZHJlc3MoYWRkcmVzczogc3RyaW5nKSB7XG4gIHJldHVybiBnZXRTZWVkKGFkZHJlc3MpLnRvU3RyaW5nKCdoZXgnKSArICc6MSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHsgaWQsIGNoYWluID0gZGVmYXVsdENoYWluLCBpbmRleCA9IDAsIHZhbHVlLCBhZGRyZXNzIH06IFBhcnRpYWw8V2FsbGV0VW5zcGVudDxUTnVtYmVyPj5cbik6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5zcGVudCB2YWx1ZSBtdXN0IGJlIHNldGApO1xuICB9XG4gIGlmIChjaGFpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnNwZW50IGNoYWluIG11c3QgYmUgc2V0YCk7XG4gIH1cbiAgY29uc3QgZGVyaXZlQWRkcmVzcyA9IGdldFdhbGxldEFkZHJlc3ModG9Db2luTmFtZShuZXR3b3JrKSwgd2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcbiAgaWYgKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAhPT0gZGVyaXZlQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVkQWRkcmVzcyBtaXNtYXRjaDogJHthZGRyZXNzfSBkZXJpdmVkPSR7ZGVyaXZlQWRkcmVzc31gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWRkcmVzcyA9IGRlcml2ZUFkZHJlc3M7XG4gIH1cbiAgaWYgKCFpZCkge1xuICAgIGlkID0gbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVW5zcGVudFJlcGxheVByb3RlY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHZhbHVlOiBUTnVtYmVyXG4pOiBVbnNwZW50PFROdW1iZXI+IHtcbiAgY29uc3QgY29pbk5hbWUgPSB0b0NvaW5OYW1lKG5ldHdvcmspO1xuICBjb25zdCBhZGRyZXNzZXMgPSBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKGNvaW5OYW1lKTtcbiAgaWYgKGFkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc2VzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKSxcbiAgICAgIGFkZHJlc3MsXG4gICAgICB2YWx1ZSxcbiAgICB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgJHtjb2luTmFtZX0gaGFzIG5vIHJlcGxheSBwcm90ZWN0aW9uIHVuc3BlbnRzYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBDaGFpbkNvZGUgfCBJbnB1dFNjcmlwdFR5cGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIHZhbHVlOiBUTnVtYmVyXG4pOiBVbnNwZW50PFROdW1iZXI+IHtcbiAgaWYgKGNoYWluID09PSAncmVwbGF5UHJvdGVjdGlvbicpIHtcbiAgICByZXR1cm4gbW9ja1Vuc3BlbnRSZXBsYXlQcm90ZWN0aW9uKG5ldHdvcmssICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gQmlnSW50KDEwMDApIDogMTAwMCkgYXMgVE51bWJlcik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1vY2tXYWxsZXRVbnNwZW50KG5ldHdvcmssIHdhbGxldEtleXMsIHsgY2hhaW46IGdldEludGVybmFsQ2hhaW5Db2RlKGNoYWluKSwgdmFsdWUsIGluZGV4IH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIHVuc3BlbnQgb2JqZWN0IGZyb20gaW5wdXQgc2NyaXB0IHR5cGUsIGluZGV4LCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXlzLlxuICogU3VwcG9ydHMgYm90aCB1dHhvbGliIGFuZCB3YXNtLXV0eG8gUm9vdFdhbGxldEtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Vuc3BlbnQoXG4gIGlucHV0OiBJbnB1dCxcbiAgaW5kZXg6IG51bWJlcixcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzXG4pOiBXYWxsZXRVbnNwZW50PGJpZ2ludD4ge1xuICBjb25zdCBzY3JpcHRUeXBlID0gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogaW5wdXQuc2NyaXB0VHlwZTtcbiAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShzY3JpcHRUeXBlKTtcbiAgcmV0dXJuIG1vY2tXYWxsZXRVbnNwZW50KG5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCB7XG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWU6IGlucHV0LnZhbHVlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBXYWxsZXQgdW5zcGVudCB3aXRoIHByZXZUeCAtIGNvbWJpbmVzIFdhbGxldFVuc3BlbnQgYW5kIFVuc3BlbnRXaXRoUHJldlR4XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FsbGV0VW5zcGVudFdpdGhQcmV2VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+LFxuICAgIFVuc3BlbnRXaXRoUHJldlR4PFROdW1iZXI+IHt9XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9jayB3YWxsZXQgdW5zcGVudCB1c2luZyB3YXNtLXV0eG8gb25seSAobm8gdXR4b2xpYiBkZXBlbmRlbmN5KS5cbiAqIFVzZXMgY3JlYXRlTW9ja1ByZXZUeCB0byBnZW5lcmF0ZSBhIHJlYWxpc3RpYyB0eGlkIGZvciB0aGUgdW5zcGVudC5cbiAqXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdHMgdGhhdCBuZWVkIGEgdmFsaWQgdW5zcGVudCBidXQgZG9uJ3QgcmVxdWlyZSB0aGUgcHJldlR4IGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSB3YWxsZXQgYWRkcmVzcyBmb3IgdGhlIHVuc3BlbnRcbiAqIEBwYXJhbSBjaGFpbiAtIFRoZSBkZXJpdmF0aW9uIGNoYWluXG4gKiBAcGFyYW0gaW5kZXggLSBUaGUgZGVyaXZhdGlvbiBpbmRleFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIGluIHNhdG9zaGlzIChiaWdpbnQpXG4gKiBAcGFyYW0gbmV0d29yayAtIFRoZSBuZXR3b3JrIHRvIGdldCB0aGUgb3V0cHV0IHNjcmlwdFxuICogQHJldHVybnMgV2FsbGV0VW5zcGVudCB3aXRoIGEgdmFsaWQgdHhpZCBmcm9tIGEgd2FzbS11dHhvIGdlbmVyYXRlZCB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FzbVdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IGJpZ2ludD4oXG4gIGFkZHJlc3M6IHN0cmluZyxcbiAgY2hhaW46IENoYWluQ29kZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgdmFsdWU6IFROdW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtBcmdcbik6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICAvLyBHZXQgb3V0cHV0IHNjcmlwdCBmcm9tIGFkZHJlc3MgdXNpbmcgY29ycmVjdCB3YXNtLXV0eG8gZnVuY3Rpb25cbiAgY29uc3Qgb3V0cHV0U2NyaXB0ID0gd2FzbVV0eG8uYWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIHRvQ29pbk5hbWUobmV0d29yaykpO1xuXG4gIC8vIENyZWF0ZSBhIG1vY2sgdHJhbnNhY3Rpb24gd2l0aCBvdXRwdXQgYXQgdm91dD0wXG4gIGNvbnN0IHsgdHhpZCB9ID0gY3JlYXRlTW9ja1ByZXZUeCgwLCBvdXRwdXRTY3JpcHQsIEJpZ0ludCh2YWx1ZSkpO1xuXG4gIHJldHVybiB7XG4gICAgaWQ6IGAke3R4aWR9OjBgLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9jayBwcmV2aW91cyB0cmFuc2FjdGlvbiB1c2luZyB3YXNtLXV0eG8ncyBsb3ctbGV2ZWwgUHNidCBjbGFzcy5cbiAqXG4gKiBDcmVhdGVzIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RydWN0dXJlIHdpdGg6XG4gKiAtIEEgcDJ3cGtoIGlucHV0IChzZWd3aXQsIGVhc3kgdG8gY29uc3RydWN0KVxuICogLSBPdXRwdXRzIGluY2x1ZGluZyB0aGUgdGFyZ2V0IG91dHB1dCBhdCB0aGUgc3BlY2lmaWVkIHZvdXRcbiAqIC0gUmVhc29uYWJsZSBmZWUgcmF0ZSAoaW5wdXQgdmFsdWUgc2xpZ2h0bHkgaGlnaGVyIHRoYW4gb3V0cHV0IHN1bSlcbiAqXG4gKiBAcGFyYW0gdm91dCAtIFRoZSBvdXRwdXQgaW5kZXggd2hlcmUgdGhlIHRhcmdldCBvdXRwdXQgc2hvdWxkIGJlIHBsYWNlZFxuICogQHBhcmFtIG91dHB1dFNjcmlwdCAtIFRoZSBzY3JpcHRQdWJLZXkgZm9yIHRoZSB0YXJnZXQgb3V0cHV0XG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgaW4gc2F0b3NoaXMgZm9yIHRoZSB0YXJnZXQgb3V0cHV0XG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBwcmV2VHggYnVmZmVyIGFuZCB0aGUgdHJhbnNhY3Rpb24ncyB0eGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrUHJldlR4KFxuICB2b3V0OiBudW1iZXIsXG4gIG91dHB1dFNjcmlwdDogVWludDhBcnJheSxcbiAgdmFsdWU6IGJpZ2ludFxuKTogeyBwcmV2VHg6IEJ1ZmZlcjsgdHhpZDogc3RyaW5nIH0ge1xuICAvLyBDcmVhdGUgYSBwMndwa2ggc2NyaXB0IGZvciB0aGUgZHVtbXkgaW5wdXRcbiAgLy8gcDJ3cGtoOiBPUF8wIDwyMC1ieXRlLWhhc2g+IC0gd2UgdXNlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoXG4gIGNvbnN0IGR1bW15SGFzaCA9IGdldFNlZWQoJ21vY2stcHJldi10eC1pbnB1dCcpLnN1YmFycmF5KDAsIDIwKTtcbiAgY29uc3QgcDJ3cGtoU2NyaXB0ID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MTQsIC4uLmR1bW15SGFzaF0pO1xuXG4gIC8vIENhbGN1bGF0ZSB0b3RhbCBvdXRwdXQgdmFsdWVcbiAgY29uc3QgZHVtbXlPdXRwdXRWYWx1ZSA9IEJpZ0ludCgxMDAwKTsgLy8gMTAwMCBzYXRvc2hpcyBwZXIgZHVtbXkgb3V0cHV0XG4gIGNvbnN0IHRvdGFsT3V0cHV0VmFsdWUgPSBkdW1teU91dHB1dFZhbHVlICogQmlnSW50KHZvdXQpICsgdmFsdWU7XG5cbiAgLy8gSW5wdXQgdmFsdWUgPSBvdXRwdXQgdmFsdWUgKyBzbWFsbCBmZWUgKDEwMDAgc2F0IC0gcmVhc29uYWJsZSBmZWUpXG4gIGNvbnN0IGlucHV0VmFsdWUgPSB0b3RhbE91dHB1dFZhbHVlICsgQmlnSW50KDEwMDApO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHVzaW5nIFdyYXBQc2J0IChleHBvcnRlZCBhcyBQc2J0KVxuICBjb25zdCBwc2J0ID0gbmV3IHdhc21VdHhvLlBzYnQoMiwgMCk7XG5cbiAgLy8gQWRkIGR1bW15IHNlZ3dpdCBpbnB1dCAtIHAyd3BraFxuICBwc2J0LmFkZElucHV0KFxuICAgICcwMScucmVwZWF0KDMyKSwgLy8gbm9uLXplcm8gdHhpZCB0byBhdm9pZCBjb2luYmFzZSBkZXRlY3Rpb25cbiAgICAwLFxuICAgIGlucHV0VmFsdWUsXG4gICAgcDJ3cGtoU2NyaXB0XG4gICk7XG5cbiAgLy8gQWRkIGR1bW15IG91dHB1dHMgYmVmb3JlIHRoZSB0YXJnZXQgdm91dFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZvdXQ7IGkrKykge1xuICAgIHBzYnQuYWRkT3V0cHV0KHAyd3BraFNjcmlwdCwgZHVtbXlPdXRwdXRWYWx1ZSk7XG4gIH1cblxuICAvLyBBZGQgdGhlIHRhcmdldCBvdXRwdXQgYXQgdGhlIHNwZWNpZmllZCB2b3V0XG4gIHBzYnQuYWRkT3V0cHV0KG91dHB1dFNjcmlwdCwgdmFsdWUpO1xuXG4gIC8vIEdldCB0aGUgdW5zaWduZWQgdHJhbnNhY3Rpb24gYnl0ZXNcbiAgLy8gTm90ZTogVGhpcyBpcyBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0cnVjdHVyZSB3aXRob3V0IHNpZ25hdHVyZXNcbiAgLy8gRm9yIHByZXZUeCBwdXJwb3Nlcywgd2UganVzdCBuZWVkIHRoZSBvdXRwdXQgc2NyaXB0cyBhbmQgdmFsdWVzXG4gIGNvbnN0IHR4Qnl0ZXMgPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcblxuICAvLyBQYXJzZSB3aXRoIHdhc20tdXR4byBUcmFuc2FjdGlvbiB0byBnZXQgdGhlIHR4aWRcbiAgY29uc3QgdHggPSB3YXNtVXR4by5UcmFuc2FjdGlvbi5mcm9tQnl0ZXModHhCeXRlcyk7XG4gIGNvbnN0IHR4aWQgPSB0eC5nZXRJZCgpO1xuXG4gIHJldHVybiB7XG4gICAgcHJldlR4OiBCdWZmZXIuZnJvbSh0eEJ5dGVzKSxcbiAgICB0eGlkLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB1bnNwZW50IHdpdGggcHJldlR4IHVzaW5nIHdhc20tdXR4byBvbmx5IChubyB1dHhvbGliIGRlcGVuZGVuY3kpLlxuICogVGhlIHByZXZUeCBpcyBidWlsdCB1c2luZyB3YXNtLXV0eG8ncyBsb3ctbGV2ZWwgUHNidCBjbGFzcy5cbiAqXG4gKiBLZXk6IFRoZSB1bnNwZW50IGlkIHVzZXMgdGhlIGFjdHVhbCB0eGlkIGZyb20gdGhlIGdlbmVyYXRlZCBwcmV2VHgsXG4gKiBlbnN1cmluZyB0aGUgTW9ja1JlY292ZXJ5UHJvdmlkZXIgcmV0dXJucyB0aGUgY29ycmVjdCBwcmV2VHguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Vuc3BlbnRXaXRoUHJldlR4KFxuICBpbnB1dDogSW5wdXQsXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHJvb3RXYWxsZXRLZXlzOiBXYXNtUm9vdFdhbGxldEtleXNcbik6IFdhbGxldFVuc3BlbnRXaXRoUHJldlR4PGJpZ2ludD4ge1xuICBjb25zdCBzY3JpcHRUeXBlID0gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogaW5wdXQuc2NyaXB0VHlwZTtcbiAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShzY3JpcHRUeXBlKTtcbiAgY29uc3QgY29pbk5hbWUgPSB0b0NvaW5OYW1lKG5ldHdvcmspO1xuXG4gIC8vIEdldCB0aGUgb3V0cHV0IHNjcmlwdCBmb3IgdGhlIHdhbGxldCBhZGRyZXNzXG4gIGNvbnN0IG91dHB1dFNjcmlwdCA9IHdhc21VdHhvLmZpeGVkU2NyaXB0V2FsbGV0Lm91dHB1dFNjcmlwdChyb290V2FsbGV0S2V5cywgY2hhaW4sIGluZGV4LCBjb2luTmFtZSk7XG5cbiAgLy8gQ3JlYXRlIG1vY2sgcHJldlR4IHdpdGggb3V0cHV0IGF0IHZvdXQ9MFxuICBjb25zdCB7IHByZXZUeCwgdHhpZCB9ID0gY3JlYXRlTW9ja1ByZXZUeCgwLCBvdXRwdXRTY3JpcHQsIGlucHV0LnZhbHVlKTtcblxuICAvLyBHZXQgdGhlIHdhbGxldCBhZGRyZXNzXG4gIGNvbnN0IGFkZHJlc3MgPSBnZXRXYWxsZXRBZGRyZXNzKHRvQ29pbk5hbWUobmV0d29yayksIHJvb3RXYWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gIC8vIFVzZSB0aGUgYWN0dWFsIHR4aWQgZnJvbSB0aGUgcHJldlR4IGluIHRoZSB1bnNwZW50IGlkXG4gIHJldHVybiB7XG4gICAgaWQ6IGAke3R4aWR9OjBgLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWU6IGlucHV0LnZhbHVlLFxuICAgIHByZXZUeCxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -3,6 +3,19 @@ import { BitGoAPI } from '@bitgo/sdk-api';
|
|
|
3
3
|
import { AbstractUtxoCoin } from '../../../src';
|
|
4
4
|
export declare const defaultBitGo: import("@bitgo/sdk-test").TestableBG & BitGoAPI;
|
|
5
5
|
export declare const utxoCoins: AbstractUtxoCoin[];
|
|
6
|
+
/**
|
|
7
|
+
* Minimal subset of coins for comprehensive test coverage.
|
|
8
|
+
* - btc: Full feature set (segwit, taproot, musig2)
|
|
9
|
+
* - bch: replay protection addresses
|
|
10
|
+
* - zec: special transaction format (Overwinter/Sapling)
|
|
11
|
+
*/
|
|
12
|
+
export declare const minUtxoCoinNames: readonly ["btc", "bch", "zec"];
|
|
13
|
+
/**
|
|
14
|
+
* Get minimal set of coins for testing. Covers ~99% of feature paths.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getMinUtxoCoins(): AbstractUtxoCoin[];
|
|
6
17
|
export declare function getUtxoCoin(name: string): AbstractUtxoCoin;
|
|
7
18
|
export declare function getUtxoCoinForNetwork(n: utxolib.Network): AbstractUtxoCoin;
|
|
19
|
+
export type TxFormat = 'legacy' | 'psbt';
|
|
20
|
+
export declare function getScriptTypes(coin: AbstractUtxoCoin, txFormat: TxFormat): utxolib.testutil.InputScriptType[];
|
|
8
21
|
//# sourceMappingURL=utxoCoins.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utxoCoins.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/utxoCoins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,gBAAgB,
|
|
1
|
+
{"version":3,"file":"utxoCoins.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/utxoCoins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,gBAAgB,EAsBjB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,YAAY,iDAAgD,CAAC;AAqC1E,eAAO,MAAM,SAAS,oBAAiB,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,gCAAiC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAEpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAO1D;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAO1E;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,CAiB7G"}
|
|
@@ -33,9 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.utxoCoins = exports.defaultBitGo = void 0;
|
|
36
|
+
exports.minUtxoCoinNames = exports.utxoCoins = exports.defaultBitGo = void 0;
|
|
37
|
+
exports.getMinUtxoCoins = getMinUtxoCoins;
|
|
37
38
|
exports.getUtxoCoin = getUtxoCoin;
|
|
38
39
|
exports.getUtxoCoinForNetwork = getUtxoCoinForNetwork;
|
|
40
|
+
exports.getScriptTypes = getScriptTypes;
|
|
39
41
|
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
40
42
|
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
41
43
|
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
@@ -76,6 +78,19 @@ function getUtxoCoins(bitgo = exports.defaultBitGo) {
|
|
|
76
78
|
.sort((a, b) => utxolib.getNetworkList().indexOf(a.network) - utxolib.getNetworkList().indexOf(b.network));
|
|
77
79
|
}
|
|
78
80
|
exports.utxoCoins = getUtxoCoins();
|
|
81
|
+
/**
|
|
82
|
+
* Minimal subset of coins for comprehensive test coverage.
|
|
83
|
+
* - btc: Full feature set (segwit, taproot, musig2)
|
|
84
|
+
* - bch: replay protection addresses
|
|
85
|
+
* - zec: special transaction format (Overwinter/Sapling)
|
|
86
|
+
*/
|
|
87
|
+
exports.minUtxoCoinNames = ['btc', 'bch', 'zec'];
|
|
88
|
+
/**
|
|
89
|
+
* Get minimal set of coins for testing. Covers ~99% of feature paths.
|
|
90
|
+
*/
|
|
91
|
+
function getMinUtxoCoins() {
|
|
92
|
+
return exports.minUtxoCoinNames.map(getUtxoCoin);
|
|
93
|
+
}
|
|
79
94
|
function getUtxoCoin(name) {
|
|
80
95
|
for (const c of exports.utxoCoins) {
|
|
81
96
|
if (c.getChain() === name) {
|
|
@@ -92,4 +107,20 @@ function getUtxoCoinForNetwork(n) {
|
|
|
92
107
|
}
|
|
93
108
|
throw new Error(`no coin for network ${utxolib.getNetworkName(n)}`);
|
|
94
109
|
}
|
|
95
|
-
|
|
110
|
+
function getScriptTypes(coin, txFormat) {
|
|
111
|
+
return ['p2shP2pk', 'p2sh', 'p2shP2wsh', 'p2wsh', 'p2tr', 'p2trMusig2', 'taprootKeyPathSpend'].filter((t) => {
|
|
112
|
+
if (t === 'p2shP2pk') {
|
|
113
|
+
return (0, src_1.getReplayProtectionAddresses)(coin.name).length > 0;
|
|
114
|
+
}
|
|
115
|
+
if (txFormat === 'legacy') {
|
|
116
|
+
if (t === 'p2tr' || t === 'p2trMusig2' || t === 'taprootKeyPathSpend') {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (t === 'taprootKeyPathSpend') {
|
|
121
|
+
return coin.supportsAddressType('p2trMusig2');
|
|
122
|
+
}
|
|
123
|
+
return coin.supportsAddressType(t);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0NvaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3V0aWwvdXR4b0NvaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStFQSwwQ0FFQztBQUVELGtDQU9DO0FBRUQsc0RBT0M7QUFJRCx3Q0FpQkM7QUF4SEQseURBQTJDO0FBQzNDLDRDQUEwQztBQUMxQyw4Q0FBNEM7QUFFNUMsc0NBdUJzQjtBQUVULFFBQUEsWUFBWSxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUUxRSxNQUFNLGVBQWUsR0FBRztJQUN0QixTQUFHO0lBQ0gsVUFBSTtJQUNKLFdBQUs7SUFDTCxhQUFPO0lBQ1AsZUFBUztJQUNULFNBQUc7SUFDSCxVQUFJO0lBQ0osVUFBSTtJQUNKLFdBQUs7SUFDTCxTQUFHO0lBQ0gsVUFBSTtJQUNKLFNBQUc7SUFDSCxTQUFHO0lBQ0gsVUFBSTtJQUNKLFVBQUk7SUFDSixXQUFLO0lBQ0wsVUFBSTtJQUNKLFdBQUs7SUFDTCxTQUFHO0lBQ0gsVUFBSTtDQUNMLENBQUM7QUFFRixTQUFTLFlBQVksQ0FBQyxRQUFrQixvQkFBWTtJQUNsRCxPQUFPLGVBQWU7U0FDbkIsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFvQixFQUFFO1FBQzdCLElBQUksQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMvRyxDQUFDO0FBRVksUUFBQSxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUM7QUFFeEM7Ozs7O0dBS0c7QUFDVSxRQUFBLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQVUsQ0FBQztBQUUvRDs7R0FFRztBQUNILFNBQWdCLGVBQWU7SUFDN0IsT0FBTyx3QkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLEtBQUssTUFBTSxDQUFDLElBQUksaUJBQVMsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxDQUFrQjtJQUN0RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLGlCQUFTLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFJRCxTQUFnQixjQUFjLENBQUMsSUFBc0IsRUFBRSxRQUFrQjtJQUN2RSxPQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLENBQVcsQ0FBQyxNQUFNLENBQzlHLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDSixJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUEsa0NBQTRCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN0RSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBCdGMsXG4gIFRidGMsXG4gIFRidGM0LFxuICBUYnRjc2lnLFxuICBUYnRjYmdzaWcsXG4gIEJjaCxcbiAgVGJjaCxcbiAgQmNoYSxcbiAgVGJjaGEsXG4gIEJzdixcbiAgVGJzdixcbiAgQnRnLFxuICBMdGMsXG4gIFRsdGMsXG4gIERhc2gsXG4gIFRkYXNoLFxuICBEb2dlLFxuICBUZG9nZSxcbiAgWmVjLFxuICBUemVjLFxuICBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzLFxufSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEJpdEdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuXG5jb25zdCB1dHhvQ29pbkNsYXNzZXMgPSBbXG4gIEJ0YyxcbiAgVGJ0YyxcbiAgVGJ0YzQsXG4gIFRidGNzaWcsXG4gIFRidGNiZ3NpZyxcbiAgQmNoLFxuICBUYmNoLFxuICBCY2hhLFxuICBUYmNoYSxcbiAgQnN2LFxuICBUYnN2LFxuICBCdGcsXG4gIEx0YyxcbiAgVGx0YyxcbiAgRGFzaCxcbiAgVGRhc2gsXG4gIERvZ2UsXG4gIFRkb2dlLFxuICBaZWMsXG4gIFR6ZWMsXG5dO1xuXG5mdW5jdGlvbiBnZXRVdHhvQ29pbnMoYml0Z286IEJpdEdvQVBJID0gZGVmYXVsdEJpdEdvKTogQWJzdHJhY3RVdHhvQ29pbltdIHtcbiAgcmV0dXJuIHV0eG9Db2luQ2xhc3Nlc1xuICAgIC5tYXAoKGNscyk6IEFic3RyYWN0VXR4b0NvaW4gPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNscy5jcmVhdGVJbnN0YW5jZShiaXRnbyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZXJyb3IgY3JlYXRpbmcgJHtjbHMubmFtZX06ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PiB1dHhvbGliLmdldE5ldHdvcmtMaXN0KCkuaW5kZXhPZihhLm5ldHdvcmspIC0gdXR4b2xpYi5nZXROZXR3b3JrTGlzdCgpLmluZGV4T2YoYi5uZXR3b3JrKSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dHhvQ29pbnMgPSBnZXRVdHhvQ29pbnMoKTtcblxuLyoqXG4gKiBNaW5pbWFsIHN1YnNldCBvZiBjb2lucyBmb3IgY29tcHJlaGVuc2l2ZSB0ZXN0IGNvdmVyYWdlLlxuICogLSBidGM6IEZ1bGwgZmVhdHVyZSBzZXQgKHNlZ3dpdCwgdGFwcm9vdCwgbXVzaWcyKVxuICogLSBiY2g6IHJlcGxheSBwcm90ZWN0aW9uIGFkZHJlc3Nlc1xuICogLSB6ZWM6IHNwZWNpYWwgdHJhbnNhY3Rpb24gZm9ybWF0IChPdmVyd2ludGVyL1NhcGxpbmcpXG4gKi9cbmV4cG9ydCBjb25zdCBtaW5VdHhvQ29pbk5hbWVzID0gWydidGMnLCAnYmNoJywgJ3plYyddIGFzIGNvbnN0O1xuXG4vKipcbiAqIEdldCBtaW5pbWFsIHNldCBvZiBjb2lucyBmb3IgdGVzdGluZy4gQ292ZXJzIH45OSUgb2YgZmVhdHVyZSBwYXRocy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pblV0eG9Db2lucygpOiBBYnN0cmFjdFV0eG9Db2luW10ge1xuICByZXR1cm4gbWluVXR4b0NvaW5OYW1lcy5tYXAoZ2V0VXR4b0NvaW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXR4b0NvaW4obmFtZTogc3RyaW5nKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5nZXRDaGFpbigpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIHdpdGggbmFtZSAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVdHhvQ29pbkZvck5ldHdvcmsobjogdXR4b2xpYi5OZXR3b3JrKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5uZXR3b3JrID09PSBuKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIGZvciBuZXR3b3JrICR7dXR4b2xpYi5nZXROZXR3b3JrTmFtZShuKX1gKTtcbn1cblxuZXhwb3J0IHR5cGUgVHhGb3JtYXQgPSAnbGVnYWN5JyB8ICdwc2J0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcmlwdFR5cGVzKGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHR4Rm9ybWF0OiBUeEZvcm1hdCk6IHV0eG9saWIudGVzdHV0aWwuSW5wdXRTY3JpcHRUeXBlW10ge1xuICByZXR1cm4gKFsncDJzaFAycGsnLCAncDJzaCcsICdwMnNoUDJ3c2gnLCAncDJ3c2gnLCAncDJ0cicsICdwMnRyTXVzaWcyJywgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXSBhcyBjb25zdCkuZmlsdGVyKFxuICAgICh0KSA9PiB7XG4gICAgICBpZiAodCA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICByZXR1cm4gZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3Nlcyhjb2luLm5hbWUpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICAgIGlmICh0ID09PSAncDJ0cicgfHwgdCA9PT0gJ3AydHJNdXNpZzInIHx8IHQgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHQgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgICByZXR1cm4gY29pbi5zdXBwb3J0c0FkZHJlc3NUeXBlKCdwMnRyTXVzaWcyJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29pbi5zdXBwb3J0c0FkZHJlc3NUeXBlKHQpO1xuICAgIH1cbiAgKTtcbn1cbiJdfQ==
|
|
@@ -66,8 +66,8 @@ describe('manage unspents', function () {
|
|
|
66
66
|
const nocks = [];
|
|
67
67
|
nocks.push(nock(bgUrl).post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/consolidateUnspents`).reply(200, txHexes));
|
|
68
68
|
nocks.push(...keysObj.map((k, i) => nock(bgUrl).get(`/api/v2/${wallet.coin()}/key/${wallet.keyIds()[i]}`).reply(200, k)));
|
|
69
|
-
nocks.push(...psbts.map((
|
|
70
|
-
.post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`, _.matches({
|
|
69
|
+
nocks.push(...psbts.map(() => nock(bgUrl)
|
|
70
|
+
.post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`, _.matches({ type: 'consolidate', bulk: true }))
|
|
71
71
|
.reply(200)));
|
|
72
72
|
await wallet.consolidateUnspents({ bulk: true, walletPassphrase });
|
|
73
73
|
nocks.forEach((n) => {
|
|
@@ -83,7 +83,7 @@ describe('manage unspents', function () {
|
|
|
83
83
|
.reply(200, { txHex: psbt.toHex() }));
|
|
84
84
|
nocks.push(...keysObj.map((k, i) => nock(bgUrl).get(`/api/v2/${wallet.coin()}/key/${wallet.keyIds()[i]}`).reply(200, k)));
|
|
85
85
|
nocks.push(nock(bgUrl)
|
|
86
|
-
.post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`, _.matches({
|
|
86
|
+
.post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`, _.matches({ type: 'consolidate' }))
|
|
87
87
|
.reply(200));
|
|
88
88
|
await wallet.consolidateUnspents({ walletPassphrase });
|
|
89
89
|
nocks.forEach((n) => {
|
|
@@ -245,4 +245,4 @@ describe('allowPartialSweep verification', function () {
|
|
|
245
245
|
response.isDone().should.be.true();
|
|
246
246
|
});
|
|
247
247
|
});
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUEyQztBQUMzQyxrQkFBZ0I7QUFDaEIsNkJBQThCO0FBQzlCLDBDQUE0QjtBQUM1Qiw4Q0FBd0U7QUFFeEUsaUNBQTRGO0FBRTVGLE1BQU0sS0FBSyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLG1CQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDN0QsTUFBTSxLQUFLLEdBQUcsbUJBQVksQ0FBQztBQUUzQixRQUFRLENBQUMsaUJBQWlCLEVBQUU7SUFDMUIsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxnQkFBZ0IsQ0FBQztJQUNyQixJQUFJLFFBQVEsQ0FBQztJQUNiLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxPQUFPLENBQUM7SUFFWixNQUFNLENBQUMsS0FBSztRQUNWLGFBQWEsR0FBRyxJQUFBLDJCQUFvQixHQUFFLENBQUM7UUFDdkMsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7UUFDNUMsT0FBTyxHQUFHLElBQUEsd0JBQWlCLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsUUFBUSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRztZQUNqQixFQUFFLEVBQUUsMEJBQTBCO1lBQzlCLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDL0IsQ0FBQztRQUNGLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuRCxD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QzVGLHdGQUF3RjtRQUMxRixDQUFDO1FBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9MaWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgV2FsbGV0LCBNYW5hZ2VVbnNwZW50c09wdGlvbnMsIGNvbW1vbiB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IGRlZmF1bHRCaXRHbywgZ2V0RGVmYXVsdFdhbGxldEtleXMsIHRvS2V5Y2hhaW5PYmplY3RzLCBnZXRVdHhvQ29pbiB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcbmNvbnN0IGJpdGdvID0gZGVmYXVsdEJpdEdvO1xuXG5kZXNjcmliZSgnbWFuYWdlIHVuc3BlbnRzJywgZnVuY3Rpb24gKCkge1xuICBsZXQgcm9vdFdhbGxldEtleTtcbiAgbGV0IHdhbGxldFBhc3NwaHJhc2U7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IHdhbGxldDtcbiAgbGV0IGtleXNPYmo7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICByb290V2FsbGV0S2V5ID0gZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgICB3YWxsZXRQYXNzcGhyYXNlID0gJ2ZpeHRoZW1vbmV5Zml4dGhld29ybGQnO1xuICAgIGtleXNPYmogPSB0b0tleWNoYWluT2JqZWN0cyhyb290V2FsbGV0S2V5LCB3YWxsZXRQYXNzcGhyYXNlKTtcbiAgICBiYXNlY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgIGtleXM6IGtleXNPYmoubWFwKChrKSA9PiBrLmlkKSxcbiAgICB9O1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIGZvciBidWxrIGNvbnNvbGlkYXRpbmcgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcHNidHMgPSAoWydwMndzaCcsICdwMnNoUDJ3c2gnXSBhcyBjb25zdCkubWFwKChzY3JpcHRUeXBlKSA9PlxuICAgICAgdXR4b0xpYi50ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KFxuICAgICAgICBbeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDEwMDApIH1dLFxuICAgICAgICBbeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDkwMCkgfV0sXG4gICAgICAgIGJhc2Vjb2luLm5ldHdvcmssXG4gICAgICAgIHJvb3RXYWxsZXRLZXksXG4gICAgICAgICd1bnNpZ25lZCdcbiAgICAgIClcbiAgICApO1xuICAgIHBzYnRzLmZvckVhY2goKHBzYnQpID0+IHV0eG9MaWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgcm9vdFdhbGxldEtleSkpO1xuICAgIGNvbnN0IHR4SGV4ZXMgPSBwc2J0cy5tYXAoKHBzYnQpID0+ICh7IHR4SGV4OiBwc2J0LnRvSGV4KCkgfSkpO1xuXG4gICAgY29uc3Qgbm9ja3M6IG5vY2suU2NvcGVbXSA9IFtdO1xuICAgIG5vY2tzLnB1c2goXG4gICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2NvbnNvbGlkYXRlVW5zcGVudHNgKS5yZXBseSgyMDAsIHR4SGV4ZXMpXG4gICAgKTtcblxuICAgIG5vY2tzLnB1c2goXG4gICAgICAuLi5rZXlzT2JqLm1hcCgoaywgaSkgPT4gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7d2FsbGV0LmtleUlkcygpW2ldfWApLnJlcGx5KDIwMCwgaykpXG4gICAgKTtcblxuICAgIG5vY2tzLnB1c2goXG4gICAgICAuLi5wc2J0cy5tYXAoKHBzYnQpID0+XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBvc3QoXG4gICAgICAgICAgICBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYCxcbiAgICAgICAgICAgIF8ubWF0Y2hlcyh7IHR4SGV4OiBwc2J0LnNpZ25BbGxJbnB1dHNIRChyb290V2FsbGV0S2V5LnVzZXIpLnRvSGV4KCkgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlcGx5KDIwMClcbiAgICAgIClcbiAgICApO1xuXG4gICAgYXdhaXQgd2FsbGV0LmNvbnNvbGlkYXRlVW5zcGVudHMoeyBidWxrOiB0cnVlLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgbm9ja3MuZm9yRWFjaCgobikgPT4ge1xuICAgICAgbi5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgZm9yIHNpbmdsZSBjb25zb2xpZGF0aW5nIHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSB1dHhvTGliLnRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoXG4gICAgICBbeyBzY3JpcHRUeXBlOiAncDJ3c2gnLCB2YWx1ZTogQmlnSW50KDEwMDApIH1dLFxuICAgICAgW3sgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsIHZhbHVlOiBCaWdJbnQoOTAwKSB9XSxcbiAgICAgIGJhc2Vjb2luLm5ldHdvcmssXG4gICAgICByb290V2FsbGV0S2V5LFxuICAgICAgJ3Vuc2lnbmVkJ1xuICAgICk7XG4gICAgdXR4b0xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCByb290V2FsbGV0S2V5KTtcblxuICAgIGNvbnN0IG5vY2tzOiBub2NrLlNjb3BlW10gPSBbXTtcbiAgICBub2Nrcy5wdXNoKFxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vY29uc29saWRhdGVVbnNwZW50c2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHsgdHhIZXg6IHBzYnQudG9IZXgoKSB9KVxuICAgICk7XG5cbiAgICBub2Nrcy5wdXNoKFxuICAgICAgLi4ua2V5c09iai5tYXAoKGssIGkpID0+IG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L2tleS8ke3dhbGxldC5rZXlJZHMoKVtpXX1gKS5yZXBseSgyMDAsIGspKVxuICAgICk7XG5cbiAgICBub2Nrcy5wdXNoKFxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoXG4gICAgICAgICAgYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2VuZGAsXG4gICAgICAgICAgXy5tYXRjaGVzKHsgdHhIZXg6IHBzYnQuc2lnbkFsbElucHV0c0hEKHJvb3RXYWxsZXRLZXkudXNlcikudG9IZXgoKSB9KVxuICAgICAgICApXG4gICAgICAgIC5yZXBseSgyMDApXG4gICAgKTtcblxuICAgIGF3YWl0IHdhbGxldC5jb25zb2xpZGF0ZVVuc3BlbnRzKHsgd2FsbGV0UGFzc3BocmFzZSB9KTtcblxuICAgIG5vY2tzLmZvckVhY2goKG4pID0+IHtcbiAgICAgIG4uaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbmRlc2NyaWJlKCdtYXggcmVjaXBpZW50JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhZGRyZXNzID0gJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYSc7XG4gIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGFtb3VudDogJ21heCcsXG4gICAgfSxcbiAgXTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgd2FsbGV0O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4gPSBnZXRVdHhvQ29pbigndGJ0YycpO1xuICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYScsXG4gICAgICBjb2luOiAndGJ0YycsXG4gICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgIH07XG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgbWF4RmVlUmF0ZSBwYXJhbWV0ZXIgd2hlbiBidWlsZGluZyB0cmFuc2FjdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAucG9zdChcbiAgICAgICAgcGF0aCxcbiAgICAgICAgXy5tYXRjaGVzKHtcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB9KVxuICAgICAgKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAucmVwbHkoMjAwKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHMgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdGhlIHByZWJ1aWxkVHJhbnNhY3Rpb24gbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC90eC9idWlsZCBhbmQgd2hldGhlciBtYXhGZWVSYXRlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ21heEZlZVJhdGUgdmVyaWZpY2F0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhZGRyZXNzID0gJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYSc7XG4gIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGFtb3VudDogMCxcbiAgICB9LFxuICBdO1xuICBjb25zdCBtYXhGZWVSYXRlID0gMTAwMDA7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IHdhbGxldDtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgY29pbjogJ3RidGMnLFxuICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICB9O1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIG1heEZlZVJhdGUgcGFyYW1ldGVyIHdoZW4gYnVpbGRpbmcgdHJhbnNhY3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgcmVjaXBpZW50cywgbWF4RmVlUmF0ZSB9KSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzLCBtYXhGZWVSYXRlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBwcmVidWlsZFRyYW5zYWN0aW9uIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgbWF4RmVlUmF0ZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBtYXhGZWVSYXRlIHBhcmFtZXRlciB3aGVuIGNvbnNvbGlkYXRpbmcgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2NvbnNvbGlkYXRlVW5zcGVudHNgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IG1heEZlZVJhdGUgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LmNvbnNvbGlkYXRlVW5zcGVudHMoeyByZWNpcGllbnRzLCBtYXhGZWVSYXRlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBjb25zb2xpZGF0ZVVuc3BlbnRzIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvY29uc29saWRhdGVVbnNwZW50cyBhbmQgd2hldGhlciBtYXhGZWVSYXRlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBvbmx5IGJ1aWxkIHR4IChub3Qgc2lnbi9zZW5kKSB3aGlsZSBjb25zb2xpZGF0aW5nIHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRvQmVVc2VkTm9jayA9IG5vY2soYmdVcmwpO1xuICAgIHRvQmVVc2VkTm9jay5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2NvbnNvbGlkYXRlVW5zcGVudHNgKS5yZXBseSgyMDApO1xuXG4gICAgY29uc3QgdW51c2VkTm9ja3MgPSBub2NrKGJnVXJsKTtcbiAgICB1bnVzZWROb2Nrcy5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS9rZXkvJHt3YWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwKTtcbiAgICB1bnVzZWROb2Nrcy5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NlbmRgKS5yZXBseSgyMDApO1xuXG4gICAgYXdhaXQgd2FsbGV0LmNvbnNvbGlkYXRlVW5zcGVudHMoeyByZWNpcGllbnRzIH0sIE1hbmFnZVVuc3BlbnRzT3B0aW9ucy5CVUlMRF9PTkxZKTtcblxuICAgIHRvQmVVc2VkTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIHVudXNlZE5vY2tzLnBlbmRpbmdNb2NrcygpLmxlbmd0aC5zaG91bGQuZXFsKDIpO1xuICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIG1heEZlZVJhdGUgcGFyYW1ldGVyIHdoZW4gY2FsbGluZyBzd2VlcCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9zd2VlcFdhbGxldGA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgYWRkcmVzcywgbWF4RmVlUmF0ZSB9KSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LnN3ZWVwKHsgYWRkcmVzcywgbWF4RmVlUmF0ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgc3dlZXAgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC9zd2VlcFdhbGxldCBhbmQgd2hldGhlciBtYXhGZWVSYXRlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIG1heEZlZVJhdGUgcGFyYW1ldGVyIHdoZW4gY2FsbGluZyBmYW5vdXQgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYDtcbiAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMoeyBtYXhGZWVSYXRlIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAucmVwbHkoMjAwKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWxsZXQuZmFub3V0VW5zcGVudHMoeyBhZGRyZXNzLCBtYXhGZWVSYXRlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBmYW5vdXRVbnNwZW50cyBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2Zhbm91dFVuc3BlbnRzIGFuZCB3aGV0aGVyIG1heEZlZVJhdGUgaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICB9XG5cbiAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnYWxsb3dQYXJ0aWFsU3dlZXAgdmVyaWZpY2F0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhZGRyZXNzID0gJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYSc7XG4gIGNvbnN0IGFsbG93UGFydGlhbFN3ZWVwID0gdHJ1ZTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgd2FsbGV0O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4gPSBnZXRVdHhvQ29pbigndGJ0YycpO1xuICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYScsXG4gICAgICBjb2luOiAndGJ0YycsXG4gICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgIH07XG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgYWxsb3dQYXJ0aWFsU3dlZXAgcGFyYW1ldGVyIHdoZW4gY2FsbGluZyBzd2VlcCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9zd2VlcFdhbGxldGA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgYWRkcmVzcywgYWxsb3dQYXJ0aWFsU3dlZXAgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhbGxldC5zd2VlcCh7IGFkZHJlc3MsIGFsbG93UGFydGlhbFN3ZWVwIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBzd2VlcCBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL3N3ZWVwV2FsbGV0IGFuZCB3aGV0aGVyIGFsbG93UGFydGlhbFN3ZWVwIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUEyQztBQUMzQyxrQkFBZ0I7QUFDaEIsNkJBQThCO0FBQzlCLDBDQUE0QjtBQUM1Qiw4Q0FBd0U7QUFFeEUsaUNBQTRGO0FBRTVGLE1BQU0sS0FBSyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLG1CQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDN0QsTUFBTSxLQUFLLEdBQUcsbUJBQVksQ0FBQztBQUUzQixRQUFRLENBQUMsaUJBQWlCLEVBQUU7SUFDMUIsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxnQkFBZ0IsQ0FBQztJQUNyQixJQUFJLFFBQVEsQ0FBQztJQUNiLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxPQUFPLENBQUM7SUFFWixNQUFNLENBQUMsS0FBSztRQUNWLGFBQWEsR0FBRyxJQUFBLDJCQUFvQixHQUFFLENBQUM7UUFDdkMsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7UUFDNUMsT0FBTyxHQUFHLElBQUEsd0JBQWlCLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsUUFBUSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRztZQUNqQixFQUFFLEVBQUUsMEJBQTBCO1lBQzlCLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDL0IsQ0FBQztRQUNGLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuRCxD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QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b0xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBXYWxsZXQsIE1hbmFnZVVuc3BlbnRzT3B0aW9ucywgY29tbW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgZGVmYXVsdEJpdEdvLCBnZXREZWZhdWx0V2FsbGV0S2V5cywgdG9LZXljaGFpbk9iamVjdHMsIGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2RlZmF1bHRCaXRHby5nZXRFbnYoKV0udXJpO1xuY29uc3QgYml0Z28gPSBkZWZhdWx0Qml0R287XG5cbmRlc2NyaWJlKCdtYW5hZ2UgdW5zcGVudHMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCByb290V2FsbGV0S2V5O1xuICBsZXQgd2FsbGV0UGFzc3BocmFzZTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgd2FsbGV0O1xuICBsZXQga2V5c09iajtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHJvb3RXYWxsZXRLZXkgPSBnZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICAgIHdhbGxldFBhc3NwaHJhc2UgPSAnZml4dGhlbW9uZXlmaXh0aGV3b3JsZCc7XG4gICAga2V5c09iaiA9IHRvS2V5Y2hhaW5PYmplY3RzKHJvb3RXYWxsZXRLZXksIHdhbGxldFBhc3NwaHJhc2UpO1xuICAgIGJhc2Vjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgY29pbjogJ3RidGMnLFxuICAgICAga2V5czoga2V5c09iai5tYXAoKGspID0+IGsuaWQpLFxuICAgIH07XG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgZm9yIGJ1bGsgY29uc29saWRhdGluZyB1bnNwZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0cyA9IChbJ3Ayd3NoJywgJ3Ayc2hQMndzaCddIGFzIGNvbnN0KS5tYXAoKHNjcmlwdFR5cGUpID0+XG4gICAgICB1dHhvTGliLnRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoXG4gICAgICAgIFt7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoMTAwMCkgfV0sXG4gICAgICAgIFt7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoOTAwKSB9XSxcbiAgICAgICAgYmFzZWNvaW4ubmV0d29yayxcbiAgICAgICAgcm9vdFdhbGxldEtleSxcbiAgICAgICAgJ3Vuc2lnbmVkJ1xuICAgICAgKVxuICAgICk7XG4gICAgcHNidHMuZm9yRWFjaCgocHNidCkgPT4gdXR4b0xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCByb290V2FsbGV0S2V5KSk7XG4gICAgY29uc3QgdHhIZXhlcyA9IHBzYnRzLm1hcCgocHNidCkgPT4gKHsgdHhIZXg6IHBzYnQudG9IZXgoKSB9KSk7XG5cbiAgICBjb25zdCBub2Nrczogbm9jay5TY29wZVtdID0gW107XG4gICAgbm9ja3MucHVzaChcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vY29uc29saWRhdGVVbnNwZW50c2ApLnJlcGx5KDIwMCwgdHhIZXhlcylcbiAgICApO1xuXG4gICAgbm9ja3MucHVzaChcbiAgICAgIC4uLmtleXNPYmoubWFwKChrLCBpKSA9PiBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS9rZXkvJHt3YWxsZXQua2V5SWRzKClbaV19YCkucmVwbHkoMjAwLCBrKSlcbiAgICApO1xuXG4gICAgbm9ja3MucHVzaChcbiAgICAgIC4uLnBzYnRzLm1hcCgoKSA9PlxuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KFxuICAgICAgICAgICAgYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2VuZGAsXG4gICAgICAgICAgICBfLm1hdGNoZXMoeyB0eXBlOiAnY29uc29saWRhdGUnLCBidWxrOiB0cnVlIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZXBseSgyMDApXG4gICAgICApXG4gICAgKTtcblxuICAgIGF3YWl0IHdhbGxldC5jb25zb2xpZGF0ZVVuc3BlbnRzKHsgYnVsazogdHJ1ZSwgd2FsbGV0UGFzc3BocmFzZSB9KTtcblxuICAgIG5vY2tzLmZvckVhY2goKG4pID0+IHtcbiAgICAgIG4uaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIGZvciBzaW5nbGUgY29uc29saWRhdGluZyB1bnNwZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0ID0gdXR4b0xpYi50ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KFxuICAgICAgW3sgc2NyaXB0VHlwZTogJ3Ayd3NoJywgdmFsdWU6IEJpZ0ludCgxMDAwKSB9XSxcbiAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLCB2YWx1ZTogQmlnSW50KDkwMCkgfV0sXG4gICAgICBiYXNlY29pbi5uZXR3b3JrLFxuICAgICAgcm9vdFdhbGxldEtleSxcbiAgICAgICd1bnNpZ25lZCdcbiAgICApO1xuICAgIHV0eG9MaWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgcm9vdFdhbGxldEtleSk7XG5cbiAgICBjb25zdCBub2Nrczogbm9jay5TY29wZVtdID0gW107XG4gICAgbm9ja3MucHVzaChcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2NvbnNvbGlkYXRlVW5zcGVudHNgKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHR4SGV4OiBwc2J0LnRvSGV4KCkgfSlcbiAgICApO1xuXG4gICAgbm9ja3MucHVzaChcbiAgICAgIC4uLmtleXNPYmoubWFwKChrLCBpKSA9PiBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS9rZXkvJHt3YWxsZXQua2V5SWRzKClbaV19YCkucmVwbHkoMjAwLCBrKSlcbiAgICApO1xuXG4gICAgbm9ja3MucHVzaChcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NlbmRgLCBfLm1hdGNoZXMoeyB0eXBlOiAnY29uc29saWRhdGUnIH0pKVxuICAgICAgICAucmVwbHkoMjAwKVxuICAgICk7XG5cbiAgICBhd2FpdCB3YWxsZXQuY29uc29saWRhdGVVbnNwZW50cyh7IHdhbGxldFBhc3NwaHJhc2UgfSk7XG5cbiAgICBub2Nrcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICBuLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5kZXNjcmliZSgnbWF4IHJlY2lwaWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWRkcmVzcyA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnO1xuICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgIHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICdtYXgnLFxuICAgIH0sXG4gIF07XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IHdhbGxldDtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgY29pbjogJ3RidGMnLFxuICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICB9O1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIG1heEZlZVJhdGUgcGFyYW1ldGVyIHdoZW4gYnVpbGRpbmcgdHJhbnNhY3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QoXG4gICAgICAgIHBhdGgsXG4gICAgICAgIF8ubWF0Y2hlcyh7XG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgfSlcbiAgICAgICkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBwcmVidWlsZFRyYW5zYWN0aW9uIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgbWF4RmVlUmF0ZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdtYXhGZWVSYXRlIHZlcmlmaWNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWRkcmVzcyA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnO1xuICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgIHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBhbW91bnQ6IDAsXG4gICAgfSxcbiAgXTtcbiAgY29uc3QgbWF4RmVlUmF0ZSA9IDEwMDAwO1xuICBsZXQgYmFzZWNvaW47XG4gIGxldCB3YWxsZXQ7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgfTtcbiAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgd2FsbGV0RGF0YSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBtYXhGZWVSYXRlIHBhcmFtZXRlciB3aGVuIGJ1aWxkaW5nIHRyYW5zYWN0aW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMsIG1heEZlZVJhdGUgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHsgcmVjaXBpZW50cywgbWF4RmVlUmF0ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgcHJlYnVpbGRUcmFuc2FjdGlvbiBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL3R4L2J1aWxkIGFuZCB3aGV0aGVyIG1heEZlZVJhdGUgaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICB9XG5cbiAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgbWF4RmVlUmF0ZSBwYXJhbWV0ZXIgd2hlbiBjb25zb2xpZGF0aW5nIHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9jb25zb2xpZGF0ZVVuc3BlbnRzYDtcbiAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMoeyBtYXhGZWVSYXRlIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAucmVwbHkoMjAwKTtcblxuICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L2tleS8ke3dhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhbGxldC5jb25zb2xpZGF0ZVVuc3BlbnRzKHsgcmVjaXBpZW50cywgbWF4RmVlUmF0ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgY29uc29saWRhdGVVbnNwZW50cyBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2NvbnNvbGlkYXRlVW5zcGVudHMgYW5kIHdoZXRoZXIgbWF4RmVlUmF0ZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgb25seSBidWlsZCB0eCAobm90IHNpZ24vc2VuZCkgd2hpbGUgY29uc29saWRhdGluZyB1bnNwZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0b0JlVXNlZE5vY2sgPSBub2NrKGJnVXJsKTtcbiAgICB0b0JlVXNlZE5vY2sucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9jb25zb2xpZGF0ZVVuc3BlbnRzYCkucmVwbHkoMjAwKTtcblxuICAgIGNvbnN0IHVudXNlZE5vY2tzID0gbm9jayhiZ1VybCk7XG4gICAgdW51c2VkTm9ja3MuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCk7XG4gICAgdW51c2VkTm9ja3MucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYCkucmVwbHkoMjAwKTtcblxuICAgIGF3YWl0IHdhbGxldC5jb25zb2xpZGF0ZVVuc3BlbnRzKHsgcmVjaXBpZW50cyB9LCBNYW5hZ2VVbnNwZW50c09wdGlvbnMuQlVJTERfT05MWSk7XG5cbiAgICB0b0JlVXNlZE5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB1bnVzZWROb2Nrcy5wZW5kaW5nTW9ja3MoKS5sZW5ndGguc2hvdWxkLmVxbCgyKTtcbiAgICBub2NrLmNsZWFuQWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBtYXhGZWVSYXRlIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgc3dlZXAgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vc3dlZXBXYWxsZXRgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IGFkZHJlc3MsIG1heEZlZVJhdGUgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhbGxldC5zd2VlcCh7IGFkZHJlc3MsIG1heEZlZVJhdGUgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdGhlIHN3ZWVwIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvc3dlZXBXYWxsZXQgYW5kIHdoZXRoZXIgbWF4RmVlUmF0ZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBtYXhGZWVSYXRlIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgZmFub3V0IHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9mYW5vdXRVbnNwZW50c2A7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgbWF4RmVlUmF0ZSB9KSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LmZhbm91dFVuc3BlbnRzKHsgYWRkcmVzcywgbWF4RmVlUmF0ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgZmFub3V0VW5zcGVudHMgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC9mYW5vdXRVbnNwZW50cyBhbmQgd2hldGhlciBtYXhGZWVSYXRlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2FsbG93UGFydGlhbFN3ZWVwIHZlcmlmaWNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWRkcmVzcyA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnO1xuICBjb25zdCBhbGxvd1BhcnRpYWxTd2VlcCA9IHRydWU7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IHdhbGxldDtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgY29pbjogJ3RidGMnLFxuICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICB9O1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIGFsbG93UGFydGlhbFN3ZWVwIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgc3dlZXAgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vc3dlZXBXYWxsZXRgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IGFkZHJlc3MsIGFsbG93UGFydGlhbFN3ZWVwIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAucmVwbHkoMjAwKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWxsZXQuc3dlZXAoeyBhZGRyZXNzLCBhbGxvd1BhcnRpYWxTd2VlcCB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgc3dlZXAgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC9zd2VlcFdhbGxldCBhbmQgd2hldGhlciBhbGxvd1BhcnRpYWxTd2VlcCBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xufSk7XG4iXX0=
|