@bitgo/abstract-lightning 6.5.1 → 7.1.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/CHANGELOG.md +28 -0
- package/dist/src/codecs/api/payment.d.ts.map +1 -1
- package/dist/src/codecs/api/wallet.d.ts +15 -12
- package/dist/src/codecs/api/wallet.d.ts.map +1 -1
- package/dist/src/codecs/api/wallet.js +10 -6
- package/dist/src/codecs/api/withdraw.d.ts +14 -2
- package/dist/src/codecs/api/withdraw.d.ts.map +1 -1
- package/dist/src/codecs/api/withdraw.js +11 -8
- package/dist/src/lightning/index.d.ts +1 -0
- package/dist/src/lightning/index.d.ts.map +1 -1
- package/dist/src/lightning/index.js +2 -1
- package/dist/src/lightning/lightningUtils.d.ts +7 -1
- package/dist/src/lightning/lightningUtils.d.ts.map +1 -1
- package/dist/src/lightning/lightningUtils.js +6 -3
- package/dist/src/lightning/parseWithdrawPsbt.d.ts +8 -0
- package/dist/src/lightning/parseWithdrawPsbt.d.ts.map +1 -0
- package/dist/src/lightning/parseWithdrawPsbt.js +149 -0
- package/dist/src/wallet/lightning.d.ts +3 -0
- package/dist/src/wallet/lightning.d.ts.map +1 -1
- package/dist/src/wallet/lightning.js +44 -8
- package/package.json +7 -6
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,34 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [7.1.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-lightning@7.0.0...@bitgo/abstract-lightning@7.1.0) (2025-09-25)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- coinspecific update in withdraw fix ([50faef5](https://github.com/BitGo/BitGoJS/commit/50faef5fb3c8c6230c0606bd849cdf75ee3932ce))
|
|
11
|
+
- removed fund psbt request codec ([0cfbaf4](https://github.com/BitGo/BitGoJS/commit/0cfbaf4d3812d65835b3586b436225a046ac5483))
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- added bip174 to abstract lightning ([6031d76](https://github.com/BitGo/BitGoJS/commit/6031d762c1b27e79a50c87e342a562297f8455ce))
|
|
16
|
+
- added fundpsbtrequest codec ([af7cc28](https://github.com/BitGo/BitGoJS/commit/af7cc28134ff3da88e52169f504a60d2811ca7df))
|
|
17
|
+
- bumped public types ([6bd0aec](https://github.com/BitGo/BitGoJS/commit/6bd0aecb700a740f76c169b1476e1832bc3abe22))
|
|
18
|
+
- configure learn to skip git operations ([ee3a622](https://github.com/BitGo/BitGoJS/commit/ee3a6220496476aa7f4545b5f4a9a3bf97d9bdb9))
|
|
19
|
+
- import onchain withdraw from public types ([c01af4f](https://github.com/BitGo/BitGoJS/commit/c01af4f541efc3406a31e615e338adef7e31b39e))
|
|
20
|
+
- only accounts required for custody ([f7a26ad](https://github.com/BitGo/BitGoJS/commit/f7a26adb139bc3ae3ba8b5c12d70ef9a6a9149d1))
|
|
21
|
+
- optional only create addrees accounts lightning ([c15c011](https://github.com/BitGo/BitGoJS/commit/c15c011b000c7f11d93c4c567b9ddd916ce25886))
|
|
22
|
+
- verify psbt withdraw lightning ([e2befa7](https://github.com/BitGo/BitGoJS/commit/e2befa7cca34f553e355e02450626ad6eee08f86))
|
|
23
|
+
|
|
24
|
+
# [7.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-lightning@6.5.1...@bitgo/abstract-lightning@7.0.0) (2025-09-03)
|
|
25
|
+
|
|
26
|
+
### Features
|
|
27
|
+
|
|
28
|
+
- adding signature in withdraw lightning ([514aaee](https://github.com/BitGo/BitGoJS/commit/514aaeebf0e6a20c78f9a3beb7715a77d2b0b9dc))
|
|
29
|
+
|
|
30
|
+
### BREAKING CHANGES
|
|
31
|
+
|
|
32
|
+
- withdraw request changed
|
|
33
|
+
|
|
6
34
|
## [6.5.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-lightning@6.5.0...@bitgo/abstract-lightning@6.5.1) (2025-08-30)
|
|
7
35
|
|
|
8
36
|
**Note:** Version bump only for package @bitgo/abstract-lightning
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../../../../src/codecs/api/payment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAO3B,eAAO,MAAM,aAAa,kFAQxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAE3D,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,wBAAwB,aAAa,CAAC;AACnD,8BAA8B;AAC9B,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAC7C,eAAO,MAAM,iCAAiC,8BAA8B,CAAC;AAC7E,6CAA6C;AAC7C,eAAO,MAAM,4CAA4C,yBAAyB,CAAC;AACnF,yEAAyE;AACzE,eAAO,MAAM,2CAA2C,gCAAgC,CAAC;AACzF,mEAAmE;AACnE,eAAO,MAAM,qCAAqC,0BAA0B,CAAC;AAC7E,eAAO,MAAM,+BAA+B,oBAAoB,CAAC;AACjE,eAAO,MAAM,uCAAuC,4BAA4B,CAAC;AACjF,eAAO,MAAM,yCAAyC,8BAA8B,CAAC;AACrF,eAAO,MAAM,2CAA2C,gCAAgC,CAAC;AACzF,eAAO,MAAM,wBAAwB,aAAa,CAAC;AACnD,eAAO,MAAM,4BAA4B,iBAAiB,CAAC;AAE3D,eAAO,MAAM,oBAAoB,2bAc/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;IAsBvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAEvD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;IAM3B;;;SAGK;;IAKV,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;IAOrB,iEAAiE;;EAIpE,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEzD,eAAO,MAAM,mBAAmB;
|
|
1
|
+
{"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../../../../src/codecs/api/payment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAO3B,eAAO,MAAM,aAAa,kFAQxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAE3D,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,wBAAwB,aAAa,CAAC;AACnD,8BAA8B;AAC9B,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAC7C,eAAO,MAAM,iCAAiC,8BAA8B,CAAC;AAC7E,6CAA6C;AAC7C,eAAO,MAAM,4CAA4C,yBAAyB,CAAC;AACnF,yEAAyE;AACzE,eAAO,MAAM,2CAA2C,gCAAgC,CAAC;AACzF,mEAAmE;AACnE,eAAO,MAAM,qCAAqC,0BAA0B,CAAC;AAC7E,eAAO,MAAM,+BAA+B,oBAAoB,CAAC;AACjE,eAAO,MAAM,uCAAuC,4BAA4B,CAAC;AACjF,eAAO,MAAM,yCAAyC,8BAA8B,CAAC;AACrF,eAAO,MAAM,2CAA2C,gCAAgC,CAAC;AACzF,eAAO,MAAM,wBAAwB,aAAa,CAAC;AACnD,eAAO,MAAM,4BAA4B,iBAAiB,CAAC;AAE3D,eAAO,MAAM,oBAAoB,2bAc/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;IAsBvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAEvD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;IAM3B;;;SAGK;;IAKV,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;IAOrB,iEAAiE;;EAIpE,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEzD,eAAO,MAAM,mBAAmB;aAlG3B,EAAG,OAAO;;uBACT,8BAAY;yBACe,8BACjC;mBAAuC,EAAG,OAAO;;;;;;IAwG/C,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEvE,eAAO,MAAM,wBAAwB;;;;;;;;;IAepC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -42,30 +42,32 @@ export declare const WatchOnlyAccount: t.TypeC<{
|
|
|
42
42
|
xpub: t.StringC;
|
|
43
43
|
}>;
|
|
44
44
|
export type WatchOnlyAccount = t.TypeOf<typeof WatchOnlyAccount>;
|
|
45
|
-
export declare const WatchOnly: t.TypeC<{
|
|
46
|
-
master_key_birthday_timestamp: t.StringC;
|
|
47
|
-
master_key_fingerprint: t.StringC;
|
|
45
|
+
export declare const WatchOnly: t.IntersectionC<[t.TypeC<{
|
|
48
46
|
accounts: t.ArrayC<t.TypeC<{
|
|
49
47
|
purpose: t.NumberC;
|
|
50
48
|
coin_type: t.NumberC;
|
|
51
49
|
account: t.NumberC;
|
|
52
50
|
xpub: t.StringC;
|
|
53
51
|
}>>;
|
|
54
|
-
}
|
|
52
|
+
}>, t.PartialC<{
|
|
53
|
+
master_key_birthday_timestamp: t.StringC;
|
|
54
|
+
master_key_fingerprint: t.StringC;
|
|
55
|
+
}>]>;
|
|
55
56
|
export type WatchOnly = t.TypeOf<typeof WatchOnly>;
|
|
56
57
|
export declare const UpdateLightningWalletEncryptedRequest: t.IntersectionC<[t.PartialC<{
|
|
57
58
|
signerHost: t.StringC;
|
|
58
59
|
signerTlsCert: t.StringC;
|
|
59
|
-
watchOnlyAccounts: t.TypeC<{
|
|
60
|
-
master_key_birthday_timestamp: t.StringC;
|
|
61
|
-
master_key_fingerprint: t.StringC;
|
|
60
|
+
watchOnlyAccounts: t.IntersectionC<[t.TypeC<{
|
|
62
61
|
accounts: t.ArrayC<t.TypeC<{
|
|
63
62
|
purpose: t.NumberC;
|
|
64
63
|
coin_type: t.NumberC;
|
|
65
64
|
account: t.NumberC;
|
|
66
65
|
xpub: t.StringC;
|
|
67
66
|
}>>;
|
|
68
|
-
}
|
|
67
|
+
}>, t.PartialC<{
|
|
68
|
+
master_key_birthday_timestamp: t.StringC;
|
|
69
|
+
master_key_fingerprint: t.StringC;
|
|
70
|
+
}>]>;
|
|
69
71
|
}>, t.PartialC<{
|
|
70
72
|
encryptedSignerMacaroon: t.StringC;
|
|
71
73
|
encryptedSignerAdminMacaroon: t.StringC;
|
|
@@ -74,16 +76,17 @@ export declare const UpdateLightningWalletEncryptedRequest: t.IntersectionC<[t.P
|
|
|
74
76
|
export declare const UpdateLightningWalletClientRequest: t.IntersectionC<[t.PartialC<{
|
|
75
77
|
signerHost: t.StringC;
|
|
76
78
|
signerTlsCert: t.StringC;
|
|
77
|
-
watchOnlyAccounts: t.TypeC<{
|
|
78
|
-
master_key_birthday_timestamp: t.StringC;
|
|
79
|
-
master_key_fingerprint: t.StringC;
|
|
79
|
+
watchOnlyAccounts: t.IntersectionC<[t.TypeC<{
|
|
80
80
|
accounts: t.ArrayC<t.TypeC<{
|
|
81
81
|
purpose: t.NumberC;
|
|
82
82
|
coin_type: t.NumberC;
|
|
83
83
|
account: t.NumberC;
|
|
84
84
|
xpub: t.StringC;
|
|
85
85
|
}>>;
|
|
86
|
-
}
|
|
86
|
+
}>, t.PartialC<{
|
|
87
|
+
master_key_birthday_timestamp: t.StringC;
|
|
88
|
+
master_key_fingerprint: t.StringC;
|
|
89
|
+
}>]>;
|
|
87
90
|
}>, t.TypeC<{
|
|
88
91
|
passphrase: t.StringC;
|
|
89
92
|
}>, t.PartialC<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../../src/codecs/api/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAM3B,eAAO,MAAM,UAAU,4DAAwE,CAAC;AAEhG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;AAErD,eAAO,MAAM,iCAAiC;;;;;;;;IAAgD,CAAC;AAE/F,eAAO,MAAM,iBAAiB;;;;;;IAY7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEnE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;IAajC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE3E,eAAO,MAAM,gBAAgB;;;;;EAK3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEjE,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../../src/codecs/api/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAM3B,eAAO,MAAM,UAAU,4DAAwE,CAAC;AAEhG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;AAErD,eAAO,MAAM,iCAAiC;;;;;;;;IAAgD,CAAC;AAE/F,eAAO,MAAM,iBAAiB;;;;;;IAY7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEnE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;IAajC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE3E,eAAO,MAAM,gBAAgB;;;;;EAK3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEjE,eAAO,MAAM,SAAS;;;;;;;;;;IAQpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC;AAQnD,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;IAOhD,CAAC;AAEH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;IAU7C,CAAC;AAEH,MAAM,MAAM,qCAAqC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAC3G,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
|
|
@@ -67,11 +67,15 @@ exports.WatchOnlyAccount = t.type({
|
|
|
67
67
|
account: t.number,
|
|
68
68
|
xpub: t.string,
|
|
69
69
|
});
|
|
70
|
-
exports.WatchOnly = t.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
exports.WatchOnly = t.intersection([
|
|
71
|
+
t.type({
|
|
72
|
+
accounts: t.array(exports.WatchOnlyAccount),
|
|
73
|
+
}),
|
|
74
|
+
t.partial({
|
|
75
|
+
master_key_birthday_timestamp: t.string,
|
|
76
|
+
master_key_fingerprint: t.string,
|
|
77
|
+
}),
|
|
78
|
+
]);
|
|
75
79
|
const CommonLightningUpdateWalletFields = t.partial({
|
|
76
80
|
signerHost: t.string,
|
|
77
81
|
signerTlsCert: t.string,
|
|
@@ -96,4 +100,4 @@ exports.UpdateLightningWalletClientRequest = t.intersection([
|
|
|
96
100
|
signerTlsKey: t.string,
|
|
97
101
|
}),
|
|
98
102
|
]);
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvZGVjcy9hcGkvd2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUEyQjtBQUMzQiw2Q0FBNkM7QUFDN0Msc0NBQXlDO0FBRXpDLHVEQUF1RDtBQUUxQyxRQUFBLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFJbkYsUUFBQSxpQ0FBaUMsR0FBRyxJQUFBLHFCQUFZLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWxGLFFBQUEsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FDN0M7SUFDRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ0wsRUFBRSxFQUFFLDRCQUFjO1FBQ2xCLEdBQUcsRUFBRSw0QkFBYztRQUNuQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDMUIsQ0FBQztJQUNGLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDUixZQUFZLEVBQUUsNEJBQWM7S0FDN0IsQ0FBQztDQUNILEVBQ0QsbUJBQW1CLENBQ3BCLENBQUM7QUFJVyxRQUFBLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxZQUFZLENBQ2pEO0lBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNMLEVBQUUsRUFBRSw0QkFBYztRQUNsQixHQUFHLEVBQUUsNEJBQWM7UUFDbkIsWUFBWSxFQUFFLHlDQUFpQztRQUMvQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDMUIsQ0FBQztJQUNGLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDUixZQUFZLEVBQUUsNEJBQWM7S0FDN0IsQ0FBQztDQUNILEVBQ0QsdUJBQXVCLENBQ3hCLENBQUM7QUFJVyxRQUFBLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ2pCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNuQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDakIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO0NBQ2YsQ0FBQyxDQUFDO0FBSVUsUUFBQSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ0wsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsd0JBQWdCLENBQUM7S0FDcEMsQ0FBQztJQUNGLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDUiw2QkFBNkIsRUFBRSxDQUFDLENBQUMsTUFBTTtRQUN2QyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsTUFBTTtLQUNqQyxDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBSUgsTUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ2xELFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNwQixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDdkIsaUJBQWlCLEVBQUUsaUJBQVM7Q0FDN0IsQ0FBQyxDQUFDO0FBRVUsUUFBQSxxQ0FBcUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ2xFLGlDQUFpQztJQUNqQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ1IsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDakMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDdEMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLE1BQU07S0FDaEMsQ0FBQztDQUNILENBQUMsQ0FBQztBQUVVLFFBQUEsa0NBQWtDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUMvRCxpQ0FBaUM7SUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNMLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTTtLQUNyQixDQUFDO0lBQ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNSLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTTtRQUN4QixtQkFBbUIsRUFBRSxDQUFDLENBQUMsTUFBTTtRQUM3QixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU07S0FDdkIsQ0FBQztDQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuaW1wb3J0IHsgTm9uRW1wdHlTdHJpbmcgfSBmcm9tICdpby10cy10eXBlcyc7XG5pbXBvcnQgeyBnZXRDb2RlY1BhaXIgfSBmcm9tICcuLi9zaGFyZWQnO1xuXG4vLyBjb2RlYyBmb3IgbGlnaHRuaW5nIHdhbGxldCBhbmQga2V5Y2hhaW4gcmVsYXRlZCBhcGlzXG5cbmV4cG9ydCBjb25zdCBLZXlQdXJwb3NlID0gdC51bmlvbihbdC5saXRlcmFsKCd1c2VyQXV0aCcpLCB0LmxpdGVyYWwoJ25vZGVBdXRoJyldLCAnS2V5UHVycG9zZScpO1xuXG5leHBvcnQgdHlwZSBLZXlQdXJwb3NlID0gdC5UeXBlT2Y8dHlwZW9mIEtleVB1cnBvc2U+O1xuXG5leHBvcnQgY29uc3QgTGlnaHRuaW5nQXV0aEtleWNoYWluQ29pblNwZWNpZmljID0gZ2V0Q29kZWNQYWlyKHQudHlwZSh7IHB1cnBvc2U6IEtleVB1cnBvc2UgfSkpO1xuXG5leHBvcnQgY29uc3QgTGlnaHRuaW5nS2V5Y2hhaW4gPSB0LmludGVyc2VjdGlvbihcbiAgW1xuICAgIHQudHlwZSh7XG4gICAgICBpZDogTm9uRW1wdHlTdHJpbmcsXG4gICAgICBwdWI6IE5vbkVtcHR5U3RyaW5nLFxuICAgICAgc291cmNlOiB0LmxpdGVyYWwoJ3VzZXInKSxcbiAgICB9KSxcbiAgICB0LnBhcnRpYWwoe1xuICAgICAgZW5jcnlwdGVkUHJ2OiBOb25FbXB0eVN0cmluZyxcbiAgICB9KSxcbiAgXSxcbiAgJ0xpZ2h0bmluZ0tleWNoYWluJ1xuKTtcblxuZXhwb3J0IHR5cGUgTGlnaHRuaW5nS2V5Y2hhaW4gPSB0LlR5cGVPZjx0eXBlb2YgTGlnaHRuaW5nS2V5Y2hhaW4+O1xuXG5leHBvcnQgY29uc3QgTGlnaHRuaW5nQXV0aEtleWNoYWluID0gdC5pbnRlcnNlY3Rpb24oXG4gIFtcbiAgICB0LnR5cGUoe1xuICAgICAgaWQ6IE5vbkVtcHR5U3RyaW5nLFxuICAgICAgcHViOiBOb25FbXB0eVN0cmluZyxcbiAgICAgIGNvaW5TcGVjaWZpYzogTGlnaHRuaW5nQXV0aEtleWNoYWluQ29pblNwZWNpZmljLFxuICAgICAgc291cmNlOiB0LmxpdGVyYWwoJ3VzZXInKSxcbiAgICB9KSxcbiAgICB0LnBhcnRpYWwoe1xuICAgICAgZW5jcnlwdGVkUHJ2OiBOb25FbXB0eVN0cmluZyxcbiAgICB9KSxcbiAgXSxcbiAgJ0xpZ2h0bmluZ0F1dGhLZXljaGFpbidcbik7XG5cbmV4cG9ydCB0eXBlIExpZ2h0bmluZ0F1dGhLZXljaGFpbiA9IHQuVHlwZU9mPHR5cGVvZiBMaWdodG5pbmdBdXRoS2V5Y2hhaW4+O1xuXG5leHBvcnQgY29uc3QgV2F0Y2hPbmx5QWNjb3VudCA9IHQudHlwZSh7XG4gIHB1cnBvc2U6IHQubnVtYmVyLFxuICBjb2luX3R5cGU6IHQubnVtYmVyLFxuICBhY2NvdW50OiB0Lm51bWJlcixcbiAgeHB1YjogdC5zdHJpbmcsXG59KTtcblxuZXhwb3J0IHR5cGUgV2F0Y2hPbmx5QWNjb3VudCA9IHQuVHlwZU9mPHR5cGVvZiBXYXRjaE9ubHlBY2NvdW50PjtcblxuZXhwb3J0IGNvbnN0IFdhdGNoT25seSA9IHQuaW50ZXJzZWN0aW9uKFtcbiAgdC50eXBlKHtcbiAgICBhY2NvdW50czogdC5hcnJheShXYXRjaE9ubHlBY2NvdW50KSxcbiAgfSksXG4gIHQucGFydGlhbCh7XG4gICAgbWFzdGVyX2tleV9iaXJ0aGRheV90aW1lc3RhbXA6IHQuc3RyaW5nLFxuICAgIG1hc3Rlcl9rZXlfZmluZ2VycHJpbnQ6IHQuc3RyaW5nLFxuICB9KSxcbl0pO1xuXG5leHBvcnQgdHlwZSBXYXRjaE9ubHkgPSB0LlR5cGVPZjx0eXBlb2YgV2F0Y2hPbmx5PjtcblxuY29uc3QgQ29tbW9uTGlnaHRuaW5nVXBkYXRlV2FsbGV0RmllbGRzID0gdC5wYXJ0aWFsKHtcbiAgc2lnbmVySG9zdDogdC5zdHJpbmcsXG4gIHNpZ25lclRsc0NlcnQ6IHQuc3RyaW5nLFxuICB3YXRjaE9ubHlBY2NvdW50czogV2F0Y2hPbmx5LFxufSk7XG5cbmV4cG9ydCBjb25zdCBVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0ID0gdC5pbnRlcnNlY3Rpb24oW1xuICBDb21tb25MaWdodG5pbmdVcGRhdGVXYWxsZXRGaWVsZHMsXG4gIHQucGFydGlhbCh7XG4gICAgZW5jcnlwdGVkU2lnbmVyTWFjYXJvb246IHQuc3RyaW5nLFxuICAgIGVuY3J5cHRlZFNpZ25lckFkbWluTWFjYXJvb246IHQuc3RyaW5nLFxuICAgIGVuY3J5cHRlZFNpZ25lclRsc0tleTogdC5zdHJpbmcsXG4gIH0pLFxuXSk7XG5cbmV4cG9ydCBjb25zdCBVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0ID0gdC5pbnRlcnNlY3Rpb24oW1xuICBDb21tb25MaWdodG5pbmdVcGRhdGVXYWxsZXRGaWVsZHMsXG4gIHQudHlwZSh7XG4gICAgcGFzc3BocmFzZTogdC5zdHJpbmcsXG4gIH0pLFxuICB0LnBhcnRpYWwoe1xuICAgIHNpZ25lck1hY2Fyb29uOiB0LnN0cmluZyxcbiAgICBzaWduZXJBZG1pbk1hY2Fyb29uOiB0LnN0cmluZyxcbiAgICBzaWduZXJUbHNLZXk6IHQuc3RyaW5nLFxuICB9KSxcbl0pO1xuXG5leHBvcnQgdHlwZSBVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0ID0gdC5UeXBlT2Y8dHlwZW9mIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldEVuY3J5cHRlZFJlcXVlc3Q+O1xuZXhwb3J0IHR5cGUgVXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdCA9IHQuVHlwZU9mPHR5cGVvZiBVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0PjtcbiJdfQ==
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import * as t from 'io-ts';
|
|
2
2
|
import { PendingApprovalData, TxRequestState } from '@bitgo/sdk-core';
|
|
3
|
+
import { Bip32Derivation } from 'bip174/src/lib/interfaces';
|
|
3
4
|
export declare const WithdrawStatusDelivered = "delivered";
|
|
4
5
|
export declare const WithdrawStatusFailed = "failed";
|
|
5
6
|
export declare const WithdrawStatus: t.UnionC<[t.LiteralC<"delivered">, t.LiteralC<"failed">]>;
|
|
6
|
-
export declare const LightningOnchainWithdrawParams: t.TypeC<{
|
|
7
|
+
export declare const LightningOnchainWithdrawParams: t.IntersectionC<[t.TypeC<{
|
|
7
8
|
recipients: t.ArrayC<t.TypeC<{
|
|
8
9
|
amountSat: import("io-ts-types").BigIntFromStringC;
|
|
9
10
|
address: t.StringC;
|
|
10
11
|
}>>;
|
|
11
12
|
satsPerVbyte: import("io-ts-types").BigIntFromStringC;
|
|
12
|
-
}
|
|
13
|
+
}>, t.TypeC<{
|
|
14
|
+
passphrase: t.StringC;
|
|
15
|
+
}>, t.PartialC<{
|
|
16
|
+
sequenceId: t.UnionC<[t.Type<string, string, unknown>, t.UndefinedC]>;
|
|
17
|
+
comment: t.UnionC<[t.Type<string, string, unknown>, t.UndefinedC]>;
|
|
18
|
+
}>]>;
|
|
13
19
|
export type LightningOnchainWithdrawParams = t.TypeOf<typeof LightningOnchainWithdrawParams>;
|
|
14
20
|
export declare const LndCreateWithdrawResponse: t.IntersectionC<[t.TypeC<{
|
|
15
21
|
status: t.UnionC<[t.LiteralC<"delivered">, t.LiteralC<"failed">]>;
|
|
@@ -82,4 +88,10 @@ export declare const SendPsbtResponse: t.IntersectionC<[t.TypeC<{
|
|
|
82
88
|
failureReason: t.StringC;
|
|
83
89
|
}>]>;
|
|
84
90
|
export type SendPsbtResponse = t.TypeOf<typeof SendPsbtResponse>;
|
|
91
|
+
export type WithdrawBaseOutputUTXO<TNumber extends number | bigint = number> = {
|
|
92
|
+
value: TNumber;
|
|
93
|
+
change: boolean;
|
|
94
|
+
address: string;
|
|
95
|
+
bip32Derivation?: Bip32Derivation;
|
|
96
|
+
};
|
|
85
97
|
//# sourceMappingURL=withdraw.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdraw.d.ts","sourceRoot":"","sources":["../../../../src/codecs/api/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"withdraw.d.ts","sourceRoot":"","sources":["../../../../src/codecs/api/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,eAAO,MAAM,uBAAuB,cAAc,CAAC;AACnD,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAE7C,eAAO,MAAM,cAAc,2DAAiF,CAAC;AAE7G,eAAO,MAAM,8BAA8B;gBAJT,EAAE,MAAM,CAAC,EAE3C,KAAG;0BAA6B,aAAa;iBAAqC,EAAG,OAAO;;yBAE3E,aAAa;;;;;;IAS5B,CAAC;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE7F,eAAO,MAAM,yBAAyB;;;;;IAWrC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEnF,MAAM,MAAM,gCAAgC,GAAG;IAC7C;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,cAAc,EAAE,cAAc,CAAC;IAE/B;;;OAGG;IACH,eAAe,CAAC,EAAE,mBAAmB,CAAC;IAEtC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,yBAAyB,CAAC;IAE3C;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;EAM5B,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEjE,eAAO,MAAM,eAAe;;;;;;EAS3B,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAE/D,eAAO,MAAM,gBAAgB;;;EAM5B,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEjE,eAAO,MAAM,eAAe;;;;;;EAS3B,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAE/D,eAAO,MAAM,gBAAgB;;;;;IAW5B,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEjE,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC7E,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC"}
|
|
@@ -36,16 +36,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.SendPsbtResponse = exports.SendPsbtRequest = exports.SignPsbtResponse = exports.SignPsbtRequest = exports.FundPsbtResponse = exports.LndCreateWithdrawResponse = exports.LightningOnchainWithdrawParams = exports.WithdrawStatus = exports.WithdrawStatusFailed = exports.WithdrawStatusDelivered = void 0;
|
|
37
37
|
const t = __importStar(require("io-ts"));
|
|
38
38
|
const public_types_1 = require("@bitgo/public-types");
|
|
39
|
-
const io_ts_types_1 = require("io-ts-types");
|
|
40
39
|
exports.WithdrawStatusDelivered = 'delivered';
|
|
41
40
|
exports.WithdrawStatusFailed = 'failed';
|
|
42
41
|
exports.WithdrawStatus = t.union([t.literal(exports.WithdrawStatusDelivered), t.literal(exports.WithdrawStatusFailed)]);
|
|
43
|
-
exports.LightningOnchainWithdrawParams = t.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
exports.LightningOnchainWithdrawParams = t.intersection([
|
|
43
|
+
public_types_1.LightningOnchainRequest,
|
|
44
|
+
t.type({
|
|
45
|
+
passphrase: t.string,
|
|
46
|
+
}),
|
|
47
|
+
t.partial({
|
|
48
|
+
sequenceId: public_types_1.optionalString,
|
|
49
|
+
comment: public_types_1.optionalString,
|
|
50
|
+
}),
|
|
51
|
+
]);
|
|
49
52
|
exports.LndCreateWithdrawResponse = t.intersection([
|
|
50
53
|
t.type({
|
|
51
54
|
status: exports.WithdrawStatus,
|
|
@@ -86,4 +89,4 @@ exports.SendPsbtResponse = t.intersection([
|
|
|
86
89
|
failureReason: t.string,
|
|
87
90
|
}),
|
|
88
91
|
], 'SendPsbtResponse');
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aGRyYXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29kZWNzL2FwaS93aXRoZHJhdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBMkI7QUFDM0Isc0RBQThFO0FBSWpFLFFBQUEsdUJBQXVCLEdBQUcsV0FBVyxDQUFDO0FBQ3RDLFFBQUEsb0JBQW9CLEdBQUcsUUFBUSxDQUFDO0FBRWhDLFFBQUEsY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLCtCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyw0QkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVoRyxRQUFBLDhCQUE4QixHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDM0Qsc0NBQXVCO0lBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDTCxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU07S0FDckIsQ0FBQztJQUNGLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDUixVQUFVLEVBQUUsNkJBQWM7UUFDMUIsT0FBTyxFQUFFLDZCQUFjO0tBQ3hCLENBQUM7Q0FDSCxDQUFDLENBQUM7QUFHVSxRQUFBLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxZQUFZLENBQ3JEO0lBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNMLE1BQU0sRUFBRSxzQkFBYztLQUN2QixDQUFDO0lBQ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNSLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNkLGFBQWEsRUFBRSxDQUFDLENBQUMsTUFBTTtLQUN4QixDQUFDO0NBQ0gsRUFDRCwyQkFBMkIsQ0FDNUIsQ0FBQztBQXVDVyxRQUFBLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ3BDO0lBQ0UsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ3BCLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxNQUFNO0NBQzVCLEVBQ0Qsa0JBQWtCLENBQ25CLENBQUM7QUFHVyxRQUFBLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNuQztJQUNFLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNwQixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDckIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ3JCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNuQixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU07Q0FDeEIsRUFDRCxpQkFBaUIsQ0FDbEIsQ0FBQztBQUdXLFFBQUEsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDcEM7SUFDRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDcEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNO0NBQ3RCLEVBQ0Qsa0JBQWtCLENBQ25CLENBQUM7QUFHVyxRQUFBLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNuQztJQUNFLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNyQixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDckIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ3JCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNuQixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU07Q0FDeEIsRUFDRCxpQkFBaUIsQ0FDbEIsQ0FBQztBQUdXLFFBQUEsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FDNUM7SUFDRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ0wsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNO0tBQ2hCLENBQUM7SUFDRixDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ1IsTUFBTSxFQUFFLHNCQUFjO1FBQ3RCLGFBQWEsRUFBRSxDQUFDLENBQUMsTUFBTTtLQUN4QixDQUFDO0NBQ0gsRUFDRCxrQkFBa0IsQ0FDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuaW1wb3J0IHsgTGlnaHRuaW5nT25jaGFpblJlcXVlc3QsIG9wdGlvbmFsU3RyaW5nIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBQZW5kaW5nQXBwcm92YWxEYXRhLCBUeFJlcXVlc3RTdGF0ZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCaXAzMkRlcml2YXRpb24gfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IFdpdGhkcmF3U3RhdHVzRGVsaXZlcmVkID0gJ2RlbGl2ZXJlZCc7XG5leHBvcnQgY29uc3QgV2l0aGRyYXdTdGF0dXNGYWlsZWQgPSAnZmFpbGVkJztcblxuZXhwb3J0IGNvbnN0IFdpdGhkcmF3U3RhdHVzID0gdC51bmlvbihbdC5saXRlcmFsKFdpdGhkcmF3U3RhdHVzRGVsaXZlcmVkKSwgdC5saXRlcmFsKFdpdGhkcmF3U3RhdHVzRmFpbGVkKV0pO1xuXG5leHBvcnQgY29uc3QgTGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UGFyYW1zID0gdC5pbnRlcnNlY3Rpb24oW1xuICBMaWdodG5pbmdPbmNoYWluUmVxdWVzdCxcbiAgdC50eXBlKHtcbiAgICBwYXNzcGhyYXNlOiB0LnN0cmluZyxcbiAgfSksXG4gIHQucGFydGlhbCh7XG4gICAgc2VxdWVuY2VJZDogb3B0aW9uYWxTdHJpbmcsXG4gICAgY29tbWVudDogb3B0aW9uYWxTdHJpbmcsXG4gIH0pLFxuXSk7XG5leHBvcnQgdHlwZSBMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdQYXJhbXMgPSB0LlR5cGVPZjx0eXBlb2YgTGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UGFyYW1zPjtcblxuZXhwb3J0IGNvbnN0IExuZENyZWF0ZVdpdGhkcmF3UmVzcG9uc2UgPSB0LmludGVyc2VjdGlvbihcbiAgW1xuICAgIHQudHlwZSh7XG4gICAgICBzdGF0dXM6IFdpdGhkcmF3U3RhdHVzLFxuICAgIH0pLFxuICAgIHQucGFydGlhbCh7XG4gICAgICB0eGlkOiB0LnN0cmluZyxcbiAgICAgIGZhaWx1cmVSZWFzb246IHQuc3RyaW5nLFxuICAgIH0pLFxuICBdLFxuICAnTG5kQ3JlYXRlV2l0aGRyYXdSZXNwb25zZSdcbik7XG5leHBvcnQgdHlwZSBMbmRDcmVhdGVXaXRoZHJhd1Jlc3BvbnNlID0gdC5UeXBlT2Y8dHlwZW9mIExuZENyZWF0ZVdpdGhkcmF3UmVzcG9uc2U+O1xuXG5leHBvcnQgdHlwZSBMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdSZXNwb25zZSA9IHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB3aXRoZHJhdyByZXF1ZXN0IHN1Ym1pdHRlZCB0byBCaXRHby5cbiAgICovXG4gIHR4UmVxdWVzdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0YXR1cyBvZiB3aXRoZHJhdyByZXF1ZXN0IHN1Ym1pc3Npb24gdG8gQml0R28uXG4gICAqIC0gYCdkZWxpdmVyZWQnYDogU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGJ5IEJpdEdvLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuIHNlbnQgdG8gdGhlIEJpdGNvaW4gbmV0d29yayB5ZXQuXG4gICAqIC0gRm9yIHRoZSBhY3R1YWwgd2l0aGRyYXcgc3RhdHVzLCB0cmFjayBgdHJhbnNmZXJgLlxuICAgKi9cbiAgdHhSZXF1ZXN0U3RhdGU6IFR4UmVxdWVzdFN0YXRlO1xuXG4gIC8qKlxuICAgKiBQZW5kaW5nIGFwcHJvdmFsIGRldGFpbHMsIGlmIGFwcGxpY2FibGUuXG4gICAqIC0gSWYgcHJlc2VudCwgd2l0aGRyYXcgaGFzIG5vdCBiZWVuIGluaXRpYXRlZCB5ZXQuXG4gICAqL1xuICBwZW5kaW5nQXBwcm92YWw/OiBQZW5kaW5nQXBwcm92YWxEYXRhO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHNuYXBzaG90IG9mIHdpdGhkcmF3IHN0YXR1cyAoaWYgYXZhaWxhYmxlKS5cbiAgICogLSAqKmAnZGVsaXZlcmVkJ2AqKjogV2l0aGRyYXcgcmVxdWVzdCBpcyBkZWxpdmVyZWQgdG8gdGhlIGJsb2NrY2hhaW4uXG4gICAqIC0gKipgJ2ZhaWxlZCdgKio6IFdpdGhkcmF3IGZhaWxlZC5cbiAgICogVGhpcyBmaWVsZCBpcyBhYnNlbnQgaWYgYXBwcm92YWwgaXMgcmVxdWlyZWQgYmVmb3JlIHByb2Nlc3NpbmcuXG4gICAqL1xuICB3aXRoZHJhd1N0YXR1cz86IExuZENyZWF0ZVdpdGhkcmF3UmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIExhdGVzdCB0cmFuc2ZlciBkZXRhaWxzIGZvciB0aGlzIHdpdGhkcmF3IHJlcXVlc3QgKGlmIGF2YWlsYWJsZSkuXG4gICAqIC0gUHJvdmlkZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRyYW5zZmVyLlxuICAgKiAtIFRvIHRyYWNrIHRoZSBsYXRlc3Qgd2l0aGRyYXcgc3RhdHVzLCBtb25pdG9yIGB0cmFuc2ZlcmAgYXN5bmNocm9ub3VzbHkuXG4gICAqIFRoaXMgZmllbGQgaXMgYWJzZW50IGlmIGFwcHJvdmFsIGlzIHJlcXVpcmVkIGJlZm9yZSBwcm9jZXNzaW5nLlxuICAgKi9cbiAgdHJhbnNmZXI/OiBhbnk7XG59O1xuXG5leHBvcnQgY29uc3QgRnVuZFBzYnRSZXNwb25zZSA9IHQudHlwZShcbiAge1xuICAgIGZ1bmRlZFBzYnQ6IHQuc3RyaW5nLFxuICAgIGNoYW5nZU91dHB1dEluZGV4OiB0Lm51bWJlcixcbiAgfSxcbiAgJ0Z1bmRQc2J0UmVzcG9uc2UnXG4pO1xuZXhwb3J0IHR5cGUgRnVuZFBzYnRSZXNwb25zZSA9IHQuVHlwZU9mPHR5cGVvZiBGdW5kUHNidFJlc3BvbnNlPjtcblxuZXhwb3J0IGNvbnN0IFNpZ25Qc2J0UmVxdWVzdCA9IHQudHlwZShcbiAge1xuICAgIGZ1bmRlZFBzYnQ6IHQuc3RyaW5nLFxuICAgIHR4UmVxdWVzdElkOiB0LnN0cmluZyxcbiAgICB1c2VyQXV0aEtleTogdC5zdHJpbmcsXG4gICAgc2lnbmF0dXJlOiB0LnN0cmluZyxcbiAgICBzaWduZWRSZXF1ZXN0OiB0LnN0cmluZyxcbiAgfSxcbiAgJ1NlbmRQc2J0UmVxdWVzdCdcbik7XG5leHBvcnQgdHlwZSBTaWduUHNidFJlcXVlc3QgPSB0LlR5cGVPZjx0eXBlb2YgU2lnblBzYnRSZXF1ZXN0PjtcblxuZXhwb3J0IGNvbnN0IFNpZ25Qc2J0UmVzcG9uc2UgPSB0LnR5cGUoXG4gIHtcbiAgICBzaWduZWRQc2J0OiB0LnN0cmluZyxcbiAgICBzaWduZWRUeEhleDogdC5zdHJpbmcsXG4gIH0sXG4gICdTZW5kUHNidFJlc3BvbnNlJ1xuKTtcbmV4cG9ydCB0eXBlIFNpZ25Qc2J0UmVzcG9uc2UgPSB0LlR5cGVPZjx0eXBlb2YgU2lnblBzYnRSZXNwb25zZT47XG5cbmV4cG9ydCBjb25zdCBTZW5kUHNidFJlcXVlc3QgPSB0LnR5cGUoXG4gIHtcbiAgICBzaWduZWRUeEhleDogdC5zdHJpbmcsXG4gICAgdHhSZXF1ZXN0SWQ6IHQuc3RyaW5nLFxuICAgIHVzZXJBdXRoS2V5OiB0LnN0cmluZyxcbiAgICBzaWduYXR1cmU6IHQuc3RyaW5nLFxuICAgIHNpZ25lZFJlcXVlc3Q6IHQuc3RyaW5nLFxuICB9LFxuICAnU2VuZFBzYnRSZXF1ZXN0J1xuKTtcbmV4cG9ydCB0eXBlIFNlbmRQc2J0UmVxdWVzdCA9IHQuVHlwZU9mPHR5cGVvZiBTZW5kUHNidFJlcXVlc3Q+O1xuXG5leHBvcnQgY29uc3QgU2VuZFBzYnRSZXNwb25zZSA9IHQuaW50ZXJzZWN0aW9uKFxuICBbXG4gICAgdC50eXBlKHtcbiAgICAgIGxhYmVsOiB0LnN0cmluZyxcbiAgICB9KSxcbiAgICB0LnBhcnRpYWwoe1xuICAgICAgc3RhdHVzOiBXaXRoZHJhd1N0YXR1cyxcbiAgICAgIGZhaWx1cmVSZWFzb246IHQuc3RyaW5nLFxuICAgIH0pLFxuICBdLFxuICAnU2VuZFBzYnRSZXNwb25zZSdcbik7XG5leHBvcnQgdHlwZSBTZW5kUHNidFJlc3BvbnNlID0gdC5UeXBlT2Y8dHlwZW9mIFNlbmRQc2J0UmVzcG9uc2U+O1xuXG5leHBvcnQgdHlwZSBXaXRoZHJhd0Jhc2VPdXRwdXRVVFhPPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0ge1xuICB2YWx1ZTogVE51bWJlcjtcbiAgY2hhbmdlOiBib29sZWFuO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGJpcDMyRGVyaXZhdGlvbj86IEJpcDMyRGVyaXZhdGlvbjtcbn07XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lightning/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lightning/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
|
|
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./signableJson"), exports);
|
|
18
18
|
__exportStar(require("./signature"), exports);
|
|
19
19
|
__exportStar(require("./lightningUtils"), exports);
|
|
20
|
-
|
|
20
|
+
__exportStar(require("./parseWithdrawPsbt"), exports);
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlnaHRuaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBK0I7QUFDL0IsOENBQTRCO0FBQzVCLG1EQUFpQztBQUNqQyxzREFBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NpZ25hYmxlSnNvbic7XG5leHBvcnQgKiBmcm9tICcuL3NpZ25hdHVyZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpZ2h0bmluZ1V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcGFyc2VXaXRoZHJhd1BzYnQnO1xuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as statics from '@bitgo/statics';
|
|
2
2
|
import * as utxolib from '@bitgo/utxo-lib';
|
|
3
|
-
import { WatchOnly } from '../codecs';
|
|
3
|
+
import { WatchOnly, WatchOnlyAccount } from '../codecs';
|
|
4
4
|
export declare const signerMacaroonPermissions: {
|
|
5
5
|
entity: string;
|
|
6
6
|
action: string;
|
|
@@ -47,6 +47,12 @@ export declare function unwrapLightningCoinSpecific<V>(obj: {
|
|
|
47
47
|
* Adds an IP caveat to a macaroon and returns the modified macaroon as a Base64 string.
|
|
48
48
|
*/
|
|
49
49
|
export declare function addIPCaveatToMacaroon(macaroonBase64: string, ip: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Derives watch-only accounts from the master HD node for the given purposes and network.
|
|
52
|
+
*/
|
|
53
|
+
export declare function deriveWatchOnlyAccounts(masterHDNode: utxolib.BIP32Interface, isMainnet: boolean, params?: {
|
|
54
|
+
onlyAddressCreationAccounts?: boolean;
|
|
55
|
+
}): WatchOnlyAccount[];
|
|
50
56
|
/**
|
|
51
57
|
* Creates a watch-only wallet init data from the provided signer root key and network.
|
|
52
58
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightningUtils.d.ts","sourceRoot":"","sources":["../../../src/lightning/lightningUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAK3C,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"lightningUtils.d.ts","sourceRoot":"","sources":["../../../src/lightning/lightningUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAK3C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGxD,eAAO,MAAM,yBAAyB;;;GAiBrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,iCAAkC,CAAC;AACpE,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,IAAI,OAAO,GAAG,QAAQ,CAErF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAEtF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,IAAI,oBAAoB,CAErG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,OAAO,CAEpF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CASrF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAMnE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,GAAG,EAAE;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,CAAC,CAW7G;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAIhF;AAuCD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,OAAO,CAAC,cAAc,EACpC,SAAS,EAAE,OAAO,EAClB,MAAM,GAAE;IAAE,2BAA2B,CAAC,EAAE,OAAO,CAAA;CAA2C,GACzF,gBAAgB,EAAE,CA4BpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,SAAS,CAS1F;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAI7G;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxF;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzE"}
|
|
@@ -43,6 +43,7 @@ exports.getStaticsLightningNetwork = getStaticsLightningNetwork;
|
|
|
43
43
|
exports.getUtxolibNetwork = getUtxolibNetwork;
|
|
44
44
|
exports.unwrapLightningCoinSpecific = unwrapLightningCoinSpecific;
|
|
45
45
|
exports.addIPCaveatToMacaroon = addIPCaveatToMacaroon;
|
|
46
|
+
exports.deriveWatchOnlyAccounts = deriveWatchOnlyAccounts;
|
|
46
47
|
exports.createWatchOnly = createWatchOnly;
|
|
47
48
|
exports.deriveLightningServiceSharedSecret = deriveLightningServiceSharedSecret;
|
|
48
49
|
exports.deriveMiddlewareSharedSecret = deriveMiddlewareSharedSecret;
|
|
@@ -179,12 +180,14 @@ function convertXpubPrefix(xpub, purpose, isMainnet) {
|
|
|
179
180
|
/**
|
|
180
181
|
* Derives watch-only accounts from the master HD node for the given purposes and network.
|
|
181
182
|
*/
|
|
182
|
-
function deriveWatchOnlyAccounts(masterHDNode, isMainnet) {
|
|
183
|
+
function deriveWatchOnlyAccounts(masterHDNode, isMainnet, params = { onlyAddressCreationAccounts: false }) {
|
|
183
184
|
// https://github.com/lightningnetwork/lnd/blob/master/docs/remote-signing.md#required-accounts
|
|
184
185
|
if (masterHDNode.isNeutered()) {
|
|
185
186
|
throw new Error('masterHDNode must not be neutered');
|
|
186
187
|
}
|
|
187
|
-
const purposes =
|
|
188
|
+
const purposes = params.onlyAddressCreationAccounts
|
|
189
|
+
? [PURPOSE_WRAPPED_P2WKH, PURPOSE_P2WKH, PURPOSE_P2TR]
|
|
190
|
+
: [PURPOSE_WRAPPED_P2WKH, PURPOSE_P2WKH, PURPOSE_P2TR, PURPOSE_ALL_OTHERS];
|
|
188
191
|
return purposes.flatMap((purpose) => {
|
|
189
192
|
const maxAccount = purpose === PURPOSE_ALL_OTHERS ? 255 : 0;
|
|
190
193
|
const coinType = purpose !== PURPOSE_ALL_OTHERS || isMainnet ? 0 : 1;
|
|
@@ -252,4 +255,4 @@ function computeBip32DerivationIndexFromSeed(seed) {
|
|
|
252
255
|
Math.pow(2, 31)) -
|
|
253
256
|
1);
|
|
254
257
|
}
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlnaHRuaW5nL2xpZ2h0bmluZ1V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDQSxrREFFQztBQUtELGtEQUVDO0FBS0Qsb0RBRUM7QUFLRCxrRUFFQztBQUtELDBEQUVDO0FBS0QsZ0VBU0M7QUFLRCw4Q0FNQztBQUtELGtFQVdDO0FBS0Qsc0RBSUM7QUEyRUQsMENBU0M7QUFNRCxnRkFJQztBQUtELG9FQUlDO0FBS0Qsc0RBSUM7QUFRRCxrRkFNQztBQWhQRCx3REFBMEM7QUFDMUMseURBQTJDO0FBQzNDLG1DQUFxQztBQUNyQyx1Q0FBeUQ7QUFDekQscURBQXVDO0FBQ3ZDLHlEQUEyQztBQUczQyw2RkFBNkY7QUFDaEYsUUFBQSx5QkFBeUIsR0FBRztJQUN2QztRQUNFLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLE1BQU0sRUFBRSxPQUFPO0tBQ2hCO0lBQ0Q7UUFDRSxNQUFNLEVBQUUsUUFBUTtRQUNoQixNQUFNLEVBQUUsVUFBVTtLQUNuQjtJQUNEO1FBQ0UsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLE1BQU07S0FDZjtJQUNEO1FBQ0UsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLE9BQU87S0FDaEI7Q0FDRixDQUFDO0FBRVcsUUFBQSxvQkFBb0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQVUsQ0FBQztBQUdwRTs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFFBQWlCO0lBQ25ELE9BQU8sUUFBUSxLQUFLLE9BQU8sSUFBSSxRQUFRLEtBQUssUUFBUSxDQUFDO0FBQ3ZELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFdBQWlDO0lBQ25FLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztB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b3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgaW1wb3J0TWFjYXJvb24sIGJ5dGVzVG9CYXNlNjQgfSBmcm9tICdtYWNhcm9vbic7XG5pbXBvcnQgKiBhcyBiczU4Y2hlY2sgZnJvbSAnYnM1OGNoZWNrJztcbmltcG9ydCAqIGFzIHNka2NvcmUgZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFdhdGNoT25seSwgV2F0Y2hPbmx5QWNjb3VudCB9IGZyb20gJy4uL2NvZGVjcyc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saWdodG5pbmduZXR3b3JrL2xuZC9ibG9iL21hc3Rlci9kb2NzL3JlbW90ZS1zaWduaW5nLm1kI3RoZS1zaWduZXItbm9kZVxuZXhwb3J0IGNvbnN0IHNpZ25lck1hY2Fyb29uUGVybWlzc2lvbnMgPSBbXG4gIHtcbiAgICBlbnRpdHk6ICdtZXNzYWdlJyxcbiAgICBhY3Rpb246ICd3cml0ZScsXG4gIH0sXG4gIHtcbiAgICBlbnRpdHk6ICdzaWduZXInLFxuICAgIGFjdGlvbjogJ2dlbmVyYXRlJyxcbiAgfSxcbiAge1xuICAgIGVudGl0eTogJ2FkZHJlc3MnLFxuICAgIGFjdGlvbjogJ3JlYWQnLFxuICB9LFxuICB7XG4gICAgZW50aXR5OiAnb25jaGFpbicsXG4gICAgYWN0aW9uOiAnd3JpdGUnLFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IGxpZ2h0bmluZ05ldHdvcmtOYW1lID0gWydiaXRjb2luJywgJ3Rlc3RuZXQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIExpZ2h0bmluZ05ldHdvcmtOYW1lID0gKHR5cGVvZiBsaWdodG5pbmdOZXR3b3JrTmFtZSlbbnVtYmVyXTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGNvaW4gbmFtZSBpcyBhIGxpZ2h0bmluZyBjb2luIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xpZ2h0bmluZ0NvaW5OYW1lKGNvaW5OYW1lOiB1bmtub3duKTogY29pbk5hbWUgaXMgJ2xuYnRjJyB8ICd0bG5idGMnIHtcbiAgcmV0dXJuIGNvaW5OYW1lID09PSAnbG5idGMnIHx8IGNvaW5OYW1lID09PSAndGxuYnRjJztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHV0eG9saWIgbmV0d29yayBmb3IgYSBsaWdodG5pbmcgbmV0d29yay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpZ2h0bmluZ05ldHdvcmsobmV0d29ya05hbWU6IExpZ2h0bmluZ05ldHdvcmtOYW1lKTogdXR4b2xpYi5OZXR3b3JrIHtcbiAgcmV0dXJuIHV0eG9saWIubmV0d29ya3NbbmV0d29ya05hbWVdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbGlnaHRuaW5nIGNvaW4gbmFtZSBmb3IgYSB1dHhvbGliIG5ldHdvcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWdodG5pbmdDb2luTmFtZShuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBzdHJpbmcge1xuICByZXR1cm4gbmV0d29yayA9PT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luID8gJ2xuYnRjJyA6ICd0bG5idGMnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgbmV0d29yayBuYW1lIGlzIGEgdmFsaWQgbGlnaHRuaW5nIG5ldHdvcmsgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRMaWdodG5pbmdOZXR3b3JrTmFtZShuZXR3b3JrTmFtZTogdW5rbm93bik6IG5ldHdvcmtOYW1lIGlzIExpZ2h0bmluZ05ldHdvcmtOYW1lIHtcbiAgcmV0dXJuIGxpZ2h0bmluZ05ldHdvcmtOYW1lLmluY2x1ZGVzKG5ldHdvcmtOYW1lIGFzIExpZ2h0bmluZ05ldHdvcmtOYW1lKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIG5ldHdvcmsgaXMgYSB2YWxpZCBsaWdodG5pbmcgbmV0d29yay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRMaWdodG5pbmdOZXR3b3JrKG5ldHdvcms6IHVua25vd24pOiBuZXR3b3JrIGlzIHV0eG9saWIuTmV0d29yayB7XG4gIHJldHVybiB1dHhvbGliLmlzVmFsaWROZXR3b3JrKG5ldHdvcmspICYmIGlzVmFsaWRMaWdodG5pbmdOZXR3b3JrTmFtZSh1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdGF0aWNzIG5ldHdvcmsgZGF0YSBmb3IgYSBsaWdodG5pbmcgY29pbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY3NMaWdodG5pbmdOZXR3b3JrKGNvaW5OYW1lOiBzdHJpbmcpOiBzdGF0aWNzLkxpZ2h0bmluZ05ldHdvcmsge1xuICBpZiAoIWlzTGlnaHRuaW5nQ29pbk5hbWUoY29pbk5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2NvaW5OYW1lfSBpcyBub3QgYSBsaWdodG5pbmcgY29pbmApO1xuICB9XG4gIGNvbnN0IGNvaW4gPSBzdGF0aWNzLmNvaW5zLmdldChjb2luTmFtZSk7XG4gIGlmICghKGNvaW4gaW5zdGFuY2VvZiBzdGF0aWNzLkxpZ2h0bmluZ0NvaW4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb2luIGlzIG5vdCBhIGxpZ2h0bmluZyBjb2luJyk7XG4gIH1cbiAgcmV0dXJuIGNvaW4ubmV0d29yaztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB1dHhvbGliIG5ldHdvcmsgZm9yIGEgbGlnaHRuaW5nIGNvaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVdHhvbGliTmV0d29yayhjb2luTmFtZTogc3RyaW5nKTogdXR4b2xpYi5OZXR3b3JrIHtcbiAgY29uc3QgbmV0d29ya05hbWUgPSBnZXRTdGF0aWNzTGlnaHRuaW5nTmV0d29yayhjb2luTmFtZSkudXR4b2xpYk5hbWU7XG4gIGlmICghaXNWYWxpZExpZ2h0bmluZ05ldHdvcmtOYW1lKG5ldHdvcmtOYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBsaWdodG5pbmcgbmV0d29yaycpO1xuICB9XG4gIHJldHVybiBnZXRMaWdodG5pbmdOZXR3b3JrKG5ldHdvcmtOYW1lKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGNvaW4gc3BlY2lmaWMgZGF0YSBmb3IgYSBsaWdodG5pbmcgY29pbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcExpZ2h0bmluZ0NvaW5TcGVjaWZpYzxWPihvYmo6IHsgbG5idGM6IFYgfSB8IHsgdGxuYnRjOiBWIH0sIGNvaW5TcGVjaWZpY1BhdGg6IHN0cmluZyk6IFYge1xuICBpZiAoY29pblNwZWNpZmljUGF0aCAhPT0gJ2xuYnRjJyAmJiBjb2luU3BlY2lmaWNQYXRoICE9PSAndGxuYnRjJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjb2luU3BlY2lmaWNQYXRoICR7Y29pblNwZWNpZmljUGF0aH0gZm9yIGxpZ2h0bmluZyBjb2luYCk7XG4gIH1cbiAgaWYgKGNvaW5TcGVjaWZpY1BhdGggPT09ICdsbmJ0YycgJiYgJ2xuYnRjJyBpbiBvYmopIHtcbiAgICByZXR1cm4gb2JqLmxuYnRjO1xuICB9XG4gIGlmIChjb2luU3BlY2lmaWNQYXRoID09PSAndGxuYnRjJyAmJiAndGxuYnRjJyBpbiBvYmopIHtcbiAgICByZXR1cm4gb2JqLnRsbmJ0YztcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbGlnaHRuaW5nIGNvaW4gc3BlY2lmaWMnKTtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIElQIGNhdmVhdCB0byBhIG1hY2Fyb29uIGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBtYWNhcm9vbiBhcyBhIEJhc2U2NCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRJUENhdmVhdFRvTWFjYXJvb24obWFjYXJvb25CYXNlNjQ6IHN0cmluZywgaXA6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hY2Fyb29uID0gaW1wb3J0TWFjYXJvb24obWFjYXJvb25CYXNlNjQpO1xuICBtYWNhcm9vbi5hZGRGaXJzdFBhcnR5Q2F2ZWF0KGBpcGFkZHIgJHtpcH1gKTtcbiAgcmV0dXJuIGJ5dGVzVG9CYXNlNjQobWFjYXJvb24uZXhwb3J0QmluYXJ5KCkpO1xufVxuXG5jb25zdCBQVVJQT1NFX1dSQVBQRURfUDJXS0ggPSA0OTtcbmNvbnN0IFBVUlBPU0VfUDJXS0ggPSA4NDtcbmNvbnN0IFBVUlBPU0VfUDJUUiA9IDg2O1xuY29uc3QgUFVSUE9TRV9BTExfT1RIRVJTID0gMTAxNztcblxudHlwZSBFeHRlbmRlZEtleVB1cnBvc2UgPVxuICB8IHR5cGVvZiBQVVJQT1NFX1dSQVBQRURfUDJXS0hcbiAgfCB0eXBlb2YgUFVSUE9TRV9QMldLSFxuICB8IHR5cGVvZiBQVVJQT1NFX1AyVFJcbiAgfCB0eXBlb2YgUFVSUE9TRV9BTExfT1RIRVJTO1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIGV4dGVuZGVkIHB1YmxpYyBrZXkgKHhwdWIpIHRvIHRoZSBhcHByb3ByaWF0ZSBwcmVmaXggKHlwdWIsIHZwdWIsIGV0Yy4pIGJhc2VkIG9uIGl0cyBwdXJwb3NlIGFuZCBuZXR3b3JrLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0WHB1YlByZWZpeCh4cHViOiBzdHJpbmcsIHB1cnBvc2U6IEV4dGVuZGVkS2V5UHVycG9zZSwgaXNNYWlubmV0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKHB1cnBvc2UgPT09IFBVUlBPU0VfUDJUUiB8fCBwdXJwb3NlID09PSBQVVJQT1NFX0FMTF9PVEhFUlMpIHtcbiAgICByZXR1cm4geHB1YjtcbiAgfVxuICBjb25zdCBkYXRhID0gYnM1OGNoZWNrLmRlY29kZSh4cHViKTtcblxuICBsZXQgdmVyc2lvbkJ5dGVzOiBCdWZmZXI7XG5cbiAgc3dpdGNoIChwdXJwb3NlKSB7XG4gICAgY2FzZSBQVVJQT1NFX1dSQVBQRURfUDJXS0g6XG4gICAgICB2ZXJzaW9uQnl0ZXMgPSBpc01haW5uZXQgPyBCdWZmZXIuZnJvbShbMHgwNCwgMHg5ZCwgMHg3YywgMHhiMl0pIDogQnVmZmVyLmZyb20oWzB4MDQsIDB4NGEsIDB4NTIsIDB4NjJdKTsgLy8geXB1Yi91cHViIGZvciBwMnNoLXAyd3BraFxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBQVVJQT1NFX1AyV0tIOlxuICAgICAgdmVyc2lvbkJ5dGVzID0gaXNNYWlubmV0ID8gQnVmZmVyLmZyb20oWzB4MDQsIDB4YjIsIDB4NDcsIDB4NDZdKSA6IEJ1ZmZlci5mcm9tKFsweDA0LCAweDVmLCAweDFjLCAweGY2XSk7IC8vIHpwdWIvdnB1YiBmb3IgcDJ3cGtoXG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBwdXJwb3NlJyk7XG4gIH1cblxuICB2ZXJzaW9uQnl0ZXMuY29weShkYXRhLCAwLCAwLCA0KTtcbiAgcmV0dXJuIGJzNThjaGVjay5lbmNvZGUoZGF0YSk7XG59XG5cbi8qKlxuICogRGVyaXZlcyB3YXRjaC1vbmx5IGFjY291bnRzIGZyb20gdGhlIG1hc3RlciBIRCBub2RlIGZvciB0aGUgZ2l2ZW4gcHVycG9zZXMgYW5kIG5ldHdvcmsuXG4gKi9cbmZ1bmN0aW9uIGRlcml2ZVdhdGNoT25seUFjY291bnRzKG1hc3RlckhETm9kZTogdXR4b2xpYi5CSVAzMkludGVyZmFjZSwgaXNNYWlubmV0OiBib29sZWFuKTogV2F0Y2hPbmx5QWNjb3VudFtdIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0bmluZ25ldHdvcmsvbG5kL2Jsb2IvbWFzdGVyL2RvY3MvcmVtb3RlLXNpZ25pbmcubWQjcmVxdWlyZWQtYWNjb3VudHNcbiAgaWYgKG1hc3RlckhETm9kZS5pc05ldXRlcmVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hc3RlckhETm9kZSBtdXN0IG5vdCBiZSBuZXV0ZXJlZCcpO1xuICB9XG5cbiAgY29uc3QgcHVycG9zZXMgPSBbUFVSUE9TRV9XUkFQUEVEX1AyV0tILCBQVVJQT1NFX1AyV0tILCBQVVJQT1NFX1AyVFIsIFBVUlBPU0VfQUxMX09USEVSU10gYXMgY29uc3Q7XG5cbiAgcmV0dXJuIHB1cnBvc2VzLmZsYXRNYXAoKHB1cnBvc2UpID0+IHtcbiAgICBjb25zdCBtYXhBY2NvdW50ID0gcHVycG9zZSA9PT0gUFVSUE9TRV9BTExfT1RIRVJTID8gMjU1IDogMDtcbiAgICBjb25zdCBjb2luVHlwZSA9IHB1cnBvc2UgIT09IFBVUlBPU0VfQUxMX09USEVSUyB8fCBpc01haW5uZXQgPyAwIDogMTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBtYXhBY2NvdW50ICsgMSB9LCAoXywgYWNjb3VudCkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IGBtLyR7cHVycG9zZX0nLyR7Y29pblR5cGV9Jy8ke2FjY291bnR9J2A7XG4gICAgICBjb25zdCBkZXJpdmVkTm9kZSA9IG1hc3RlckhETm9kZS5kZXJpdmVQYXRoKHBhdGgpO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIG5vZGUgaXMgbmV1dGVyZWQgKGkuZS4sIGNvbnZlcnRlZCB0byBwdWJsaWMga2V5IG9ubHkpXG4gICAgICBjb25zdCBuZXV0ZXJlZE5vZGUgPSBkZXJpdmVkTm9kZS5uZXV0ZXJlZCgpO1xuICAgICAgY29uc3QgeHB1YiA9IGNvbnZlcnRYcHViUHJlZml4KG5ldXRlcmVkTm9kZS50b0Jhc2U1OCgpLCBwdXJwb3NlLCBpc01haW5uZXQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwdXJwb3NlLFxuICAgICAgICBjb2luX3R5cGU6IGNvaW5UeXBlLFxuICAgICAgICBhY2NvdW50LFxuICAgICAgICB4cHViLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHdhdGNoLW9ubHkgd2FsbGV0IGluaXQgZGF0YSBmcm9tIHRoZSBwcm92aWRlZCBzaWduZXIgcm9vdCBrZXkgYW5kIG5ldHdvcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXYXRjaE9ubHkoc2lnbmVyUm9vdEtleTogc3RyaW5nLCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBXYXRjaE9ubHkge1xuICBjb25zdCBtYXN0ZXJIRE5vZGUgPSB1dHhvbGliLmJpcDMyLmZyb21CYXNlNTgoc2lnbmVyUm9vdEtleSwgbmV0d29yayk7XG4gIGNvbnN0IGdldEN1cnJlbnRVbml4VGltZXN0YW1wID0gKCkgPT4ge1xuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgfTtcbiAgY29uc3QgbWFzdGVyX2tleV9iaXJ0aGRheV90aW1lc3RhbXAgPSBnZXRDdXJyZW50VW5peFRpbWVzdGFtcCgpLnRvU3RyaW5nKCk7XG4gIGNvbnN0IG1hc3Rlcl9rZXlfZmluZ2VycHJpbnQgPSBtYXN0ZXJIRE5vZGUuZmluZ2VycHJpbnQudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBhY2NvdW50cyA9IGRlcml2ZVdhdGNoT25seUFjY291bnRzKG1hc3RlckhETm9kZSwgdXR4b2xpYi5pc01haW5uZXQobmV0d29yaykpO1xuICByZXR1cm4geyBtYXN0ZXJfa2V5X2JpcnRoZGF5X3RpbWVzdGFtcCwgbWFzdGVyX2tleV9maW5nZXJwcmludCwgYWNjb3VudHMgfTtcbn1cblxuLyoqXG4gKiBEZXJpdmVzIHRoZSBzaGFyZWQgRWxsaXB0aWMgQ3VydmUgRGlmZmllLUhlbGxtYW4gKEVDREgpIHNlY3JldCBiZXR3ZWVuIHRoZSB1c2VyJ3MgYXV0aCBleHRlbmRlZCBwcml2YXRlIGtleVxuICogYW5kIHRoZSBMaWdodG5pbmcgc2VydmljZSdzIHB1YmxpYyBrZXkgZm9yIHNlY3VyZSBjb21tdW5pY2F0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlTGlnaHRuaW5nU2VydmljZVNoYXJlZFNlY3JldChjb2luTmFtZTogJ2xuYnRjJyB8ICd0bG5idGMnLCB1c2VyQXV0aFhwcnY6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKGdldFN0YXRpY3NMaWdodG5pbmdOZXR3b3JrKGNvaW5OYW1lKS5saWdodG5pbmdTZXJ2aWNlUHViS2V5LCAnaGV4Jyk7XG4gIGNvbnN0IHVzZXJBdXRoSGROb2RlID0gdXR4b2xpYi5iaXAzMi5mcm9tQmFzZTU4KHVzZXJBdXRoWHBydik7XG4gIHJldHVybiBzZGtjb3JlLmdldFNoYXJlZFNlY3JldCh1c2VyQXV0aEhkTm9kZSwgcHVibGljS2V5KTtcbn1cblxuLyoqXG4gKiBEZXJpdmVzIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB0aGUgbWlkZGxld2FyZSB1c2luZyBhIHByaXZhdGUga2V5IGFuZCB0aGUgbWlkZGxld2FyZSdzIHB1YmxpYyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVNaWRkbGV3YXJlU2hhcmVkU2VjcmV0KGNvaW5OYW1lOiAnbG5idGMnIHwgJ3RsbmJ0YycsIHhwcnY6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKGdldFN0YXRpY3NMaWdodG5pbmdOZXR3b3JrKGNvaW5OYW1lKS5taWRkbGV3YXJlUHViS2V5LCAnaGV4Jyk7XG4gIGNvbnN0IHVzZXJBdXRoSGROb2RlID0gdXR4b2xpYi5iaXAzMi5mcm9tQmFzZTU4KHhwcnYpO1xuICByZXR1cm4gc2RrY29yZS5nZXRTaGFyZWRTZWNyZXQodXNlckF1dGhIZE5vZGUsIHB1YmxpY0tleSk7XG59XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgc2hhcmVkIHNlY3JldCBmb3IgVEFUIHNlcnZpY2UgdXNpbmcgdGEgcHJpdmF0ZSBrZXkgYW5kIHRoZSBUQVQgcHVibGljIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZVRhdFNoYXJlZFNlY3JldChjb2luTmFtZTogJ2xuYnRjJyB8ICd0bG5idGMnLCB4cHJ2OiBzdHJpbmcpOiBCdWZmZXIge1xuICBjb25zdCBwdWJsaWNLZXkgPSBCdWZmZXIuZnJvbShnZXRTdGF0aWNzTGlnaHRuaW5nTmV0d29yayhjb2luTmFtZSkudGF0UHViS2V5LCAnaGV4Jyk7XG4gIGNvbnN0IHVzZXJBdXRoSGROb2RlID0gdXR4b2xpYi5iaXAzMi5mcm9tQmFzZTU4KHhwcnYpO1xuICByZXR1cm4gc2RrY29yZS5nZXRTaGFyZWRTZWNyZXQodXNlckF1dGhIZE5vZGUsIHB1YmxpY0tleSk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzZWVkLCBjb21wdXRlIGEgQklQMzIgZGVyaXZhdGlvbiBpbmRleC5cbiAqIDAgPD0gaW5kZXggPCAyMTQ3NDgzNjQ4IChsYXJnZXN0IDMxIGJpdCBudW1iZXIpLiBUaGlzIG5lZWRzIHRvIGJlIDJeMzEgLSAxIHNvIHRoYXQgdGhlIGJpcDMyIGxpYnJhcnlcbiAqIGNhbiBkZXJpdmUgdGhlIGhhcmRlbmVkIGtleS5cbiAqIEBwYXJhbSBzZWVkIChvcHRpb25hbCkgSWYgbm90aGluZyBwcm92aWRlZCwgd2Ugd2lsbCBnZW5lcmF0ZSBvbmUgcmFuZG9tbHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVCaXAzMkRlcml2YXRpb25JbmRleEZyb21TZWVkKHNlZWQ/OiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIChCdWZmZXIuZnJvbSh1dHhvbGliLmNyeXB0by5zaGEyNTYoQnVmZmVyLmZyb20oc2VlZCA/PyByYW5kb21CeXRlcygzMikudG9TdHJpbmcoJ2hleCcpLCAndXRmOCcpKSkucmVhZFVpbnQzMkJFKDApICVcbiAgICAgIE1hdGgucG93KDIsIDMxKSkgLVxuICAgIDFcbiAgKTtcbn1cbiJdfQ==
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlnaHRuaW5nL2xpZ2h0bmluZ1V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDQSxrREFFQztBQUtELGtEQUVDO0FBS0Qsb0RBRUM7QUFLRCxrRUFFQztBQUtELDBEQUVDO0FBS0QsZ0VBU0M7QUFLRCw4Q0FNQztBQUtELGtFQVdDO0FBS0Qsc0RBSUM7QUEwQ0QsMERBZ0NDO0FBS0QsMENBU0M7QUFNRCxnRkFJQztBQUtELG9FQUlDO0FBS0Qsc0RBSUM7QUFRRCxrRkFNQztBQXBQRCx3REFBMEM7QUFDMUMseURBQTJDO0FBQzNDLG1DQUFxQztBQUNyQyx1Q0FBeUQ7QUFDekQscURBQXVDO0FBQ3ZDLHlEQUEyQztBQUczQyw2RkFBNkY7QUFDaEYsUUFBQSx5QkFBeUIsR0FBRztJQUN2QztRQUNFLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLE1BQU0sRUFBRSxPQUFPO0tBQ2hCO0lBQ0Q7UUFDRSxNQUFNLEVBQUUsUUFBUTtRQUNoQixNQUFNLEVBQUUsVUFBVTtLQUNuQjtJQUNEO1FBQ0UsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLE1BQU07S0FDZjtJQUNEO1FBQ0UsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLE9BQU87S0FDaEI7Q0FDRixDQUFDO0FBRVcsUUFBQSxvQkFBb0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQVUsQ0FBQztBQUdwRTs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFFBQWlCO0lBQ25ELE9BQU8sUUFBUSxLQUFLLE9BQU8sSUFBSSxRQUFRLEtBQUssUUFBUSxDQUFDO0FBQ3ZELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFdBQWlDO0lBQ25FLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxPQUF3QjtJQUMzRCxPQUFPLE9BQU8sS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDbkUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQUMsV0FBb0I7SUFDOUQsT0FBTyw0QkFBb0IsQ0FBQyxRQUFRLENBQUMsV0FBbUMsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLE9BQWdCO0lBQ3RELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDekcsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsMEJBQTBCLENBQUMsUUFBZ0I7SUFDekQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEsMEJBQTBCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFFBQWdCO0lBQ2hELE1BQU0sV0FBVyxHQUFHLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUNyRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQUksR0FBaUMsRUFBRSxnQkFBd0I7SUFDeEcsSUFBSSxnQkFBZ0IsS0FBSyxPQUFPLElBQUksZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsZ0JBQWdCLHFCQUFxQixDQUFDLENBQUM7SUFDckYsQ0FBQztJQUNELElBQUksZ0JBQWdCLEtBQUssT0FBTyxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNuRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksZ0JBQWdCLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDcEIsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxjQUFzQixFQUFFLEVBQVU7SUFDdEUsTUFBTSxRQUFRLEdBQUcsSUFBQSx5QkFBYyxFQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0MsT0FBTyxJQUFBLHdCQUFhLEVBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFRaEM7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLElBQVksRUFBRSxPQUEyQixFQUFFLFNBQWtCO0lBQ3RGLElBQUksT0FBTyxLQUFLLFlBQVksSUFBSSxPQUFPLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztRQUMvRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBDLElBQUksWUFBb0IsQ0FBQztJQUV6QixRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUsscUJBQXFCO1lBQ3hCLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtZQUN0SSxNQUFNO1FBQ1IsS0FBSyxhQUFhO1lBQ2hCLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtZQUNqSSxNQUFNO1FBQ1I7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxZQUFvQyxFQUNwQyxTQUFrQixFQUNsQixTQUFvRCxFQUFFLDJCQUEyQixFQUFFLEtBQUssRUFBRTtJQUUxRiwrRkFBK0Y7SUFDL0YsSUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQywyQkFBMkI7UUFDakQsQ0FBQyxDQUFFLENBQUMscUJBQXFCLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBVztRQUNqRSxDQUFDLENBQUUsQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixDQUFXLENBQUM7SUFDeEYsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxLQUFLLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxPQUFPLEtBQUssa0JBQWtCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzNELE1BQU0sSUFBSSxHQUFHLEtBQUssT0FBTyxLQUFLLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztZQUN0RCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWxELG1FQUFtRTtZQUNuRSxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUU1RSxPQUFPO2dCQUNMLE9BQU87Z0JBQ1AsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU87Z0JBQ1AsSUFBSTthQUNMLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLGFBQXFCLEVBQUUsT0FBd0I7SUFDN0UsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxFQUFFO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0lBQ0YsTUFBTSw2QkFBNkIsR0FBRyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNFLE1BQU0sc0JBQXNCLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEUsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDN0UsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGtDQUFrQyxDQUFDLFFBQTRCLEVBQUUsWUFBb0I7SUFDbkcsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5RCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLDRCQUE0QixDQUFDLFFBQTRCLEVBQUUsSUFBWTtJQUNyRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsUUFBNEIsRUFBRSxJQUFZO0lBQzlFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsbUNBQW1DLENBQUMsSUFBYTtJQUMvRCxPQUFPLENBQ0wsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDL0csSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3RhdGljcyBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBpbXBvcnRNYWNhcm9vbiwgYnl0ZXNUb0Jhc2U2NCB9IGZyb20gJ21hY2Fyb29uJztcbmltcG9ydCAqIGFzIGJzNThjaGVjayBmcm9tICdiczU4Y2hlY2snO1xuaW1wb3J0ICogYXMgc2RrY29yZSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgV2F0Y2hPbmx5LCBXYXRjaE9ubHlBY2NvdW50IH0gZnJvbSAnLi4vY29kZWNzJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0bmluZ25ldHdvcmsvbG5kL2Jsb2IvbWFzdGVyL2RvY3MvcmVtb3RlLXNpZ25pbmcubWQjdGhlLXNpZ25lci1ub2RlXG5leHBvcnQgY29uc3Qgc2lnbmVyTWFjYXJvb25QZXJtaXNzaW9ucyA9IFtcbiAge1xuICAgIGVudGl0eTogJ21lc3NhZ2UnLFxuICAgIGFjdGlvbjogJ3dyaXRlJyxcbiAgfSxcbiAge1xuICAgIGVudGl0eTogJ3NpZ25lcicsXG4gICAgYWN0aW9uOiAnZ2VuZXJhdGUnLFxuICB9LFxuICB7XG4gICAgZW50aXR5OiAnYWRkcmVzcycsXG4gICAgYWN0aW9uOiAncmVhZCcsXG4gIH0sXG4gIHtcbiAgICBlbnRpdHk6ICdvbmNoYWluJyxcbiAgICBhY3Rpb246ICd3cml0ZScsXG4gIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgbGlnaHRuaW5nTmV0d29ya05hbWUgPSBbJ2JpdGNvaW4nLCAndGVzdG5ldCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTGlnaHRuaW5nTmV0d29ya05hbWUgPSAodHlwZW9mIGxpZ2h0bmluZ05ldHdvcmtOYW1lKVtudW1iZXJdO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgY29pbiBuYW1lIGlzIGEgbGlnaHRuaW5nIGNvaW4gbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlnaHRuaW5nQ29pbk5hbWUoY29pbk5hbWU6IHVua25vd24pOiBjb2luTmFtZSBpcyAnbG5idGMnIHwgJ3RsbmJ0Yycge1xuICByZXR1cm4gY29pbk5hbWUgPT09ICdsbmJ0YycgfHwgY29pbk5hbWUgPT09ICd0bG5idGMnO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdXR4b2xpYiBuZXR3b3JrIGZvciBhIGxpZ2h0bmluZyBuZXR3b3JrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlnaHRuaW5nTmV0d29yayhuZXR3b3JrTmFtZTogTGlnaHRuaW5nTmV0d29ya05hbWUpOiB1dHhvbGliLk5ldHdvcmsge1xuICByZXR1cm4gdXR4b2xpYi5uZXR3b3Jrc1tuZXR3b3JrTmFtZV07XG59XG5cbi8qKlxuICogR2V0IHRoZSBsaWdodG5pbmcgY29pbiBuYW1lIGZvciBhIHV0eG9saWIgbmV0d29yay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpZ2h0bmluZ0NvaW5OYW1lKG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IHN0cmluZyB7XG4gIHJldHVybiBuZXR3b3JrID09PSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4gPyAnbG5idGMnIDogJ3RsbmJ0Yyc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBuZXR3b3JrIG5hbWUgaXMgYSB2YWxpZCBsaWdodG5pbmcgbmV0d29yayBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZExpZ2h0bmluZ05ldHdvcmtOYW1lKG5ldHdvcmtOYW1lOiB1bmtub3duKTogbmV0d29ya05hbWUgaXMgTGlnaHRuaW5nTmV0d29ya05hbWUge1xuICByZXR1cm4gbGlnaHRuaW5nTmV0d29ya05hbWUuaW5jbHVkZXMobmV0d29ya05hbWUgYXMgTGlnaHRuaW5nTmV0d29ya05hbWUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgbmV0d29yayBpcyBhIHZhbGlkIGxpZ2h0bmluZyBuZXR3b3JrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZExpZ2h0bmluZ05ldHdvcmsobmV0d29yazogdW5rbm93bik6IG5ldHdvcmsgaXMgdXR4b2xpYi5OZXR3b3JrIHtcbiAgcmV0dXJuIHV0eG9saWIuaXNWYWxpZE5ldHdvcmsobmV0d29yaykgJiYgaXNWYWxpZExpZ2h0bmluZ05ldHdvcmtOYW1lKHV0eG9saWIuZ2V0TmV0d29ya05hbWUobmV0d29yaykpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0YXRpY3MgbmV0d29yayBkYXRhIGZvciBhIGxpZ2h0bmluZyBjb2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdGljc0xpZ2h0bmluZ05ldHdvcmsoY29pbk5hbWU6IHN0cmluZyk6IHN0YXRpY3MuTGlnaHRuaW5nTmV0d29yayB7XG4gIGlmICghaXNMaWdodG5pbmdDb2luTmFtZShjb2luTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y29pbk5hbWV9IGlzIG5vdCBhIGxpZ2h0bmluZyBjb2luYCk7XG4gIH1cbiAgY29uc3QgY29pbiA9IHN0YXRpY3MuY29pbnMuZ2V0KGNvaW5OYW1lKTtcbiAgaWYgKCEoY29pbiBpbnN0YW5jZW9mIHN0YXRpY3MuTGlnaHRuaW5nQ29pbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvaW4gaXMgbm90IGEgbGlnaHRuaW5nIGNvaW4nKTtcbiAgfVxuICByZXR1cm4gY29pbi5uZXR3b3JrO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHV0eG9saWIgbmV0d29yayBmb3IgYSBsaWdodG5pbmcgY29pbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFV0eG9saWJOZXR3b3JrKGNvaW5OYW1lOiBzdHJpbmcpOiB1dHhvbGliLk5ldHdvcmsge1xuICBjb25zdCBuZXR3b3JrTmFtZSA9IGdldFN0YXRpY3NMaWdodG5pbmdOZXR3b3JrKGNvaW5OYW1lKS51dHhvbGliTmFtZTtcbiAgaWYgKCFpc1ZhbGlkTGlnaHRuaW5nTmV0d29ya05hbWUobmV0d29ya05hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGxpZ2h0bmluZyBuZXR3b3JrJyk7XG4gIH1cbiAgcmV0dXJuIGdldExpZ2h0bmluZ05ldHdvcmsobmV0d29ya05hbWUpO1xufVxuXG4vKipcbiAqIFJldHVybnMgY29pbiBzcGVjaWZpYyBkYXRhIGZvciBhIGxpZ2h0bmluZyBjb2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwTGlnaHRuaW5nQ29pblNwZWNpZmljPFY+KG9iajogeyBsbmJ0YzogViB9IHwgeyB0bG5idGM6IFYgfSwgY29pblNwZWNpZmljUGF0aDogc3RyaW5nKTogViB7XG4gIGlmIChjb2luU3BlY2lmaWNQYXRoICE9PSAnbG5idGMnICYmIGNvaW5TcGVjaWZpY1BhdGggIT09ICd0bG5idGMnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGNvaW5TcGVjaWZpY1BhdGggJHtjb2luU3BlY2lmaWNQYXRofSBmb3IgbGlnaHRuaW5nIGNvaW5gKTtcbiAgfVxuICBpZiAoY29pblNwZWNpZmljUGF0aCA9PT0gJ2xuYnRjJyAmJiAnbG5idGMnIGluIG9iaikge1xuICAgIHJldHVybiBvYmoubG5idGM7XG4gIH1cbiAgaWYgKGNvaW5TcGVjaWZpY1BhdGggPT09ICd0bG5idGMnICYmICd0bG5idGMnIGluIG9iaikge1xuICAgIHJldHVybiBvYmoudGxuYnRjO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBsaWdodG5pbmcgY29pbiBzcGVjaWZpYycpO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gSVAgY2F2ZWF0IHRvIGEgbWFjYXJvb24gYW5kIHJldHVybnMgdGhlIG1vZGlmaWVkIG1hY2Fyb29uIGFzIGEgQmFzZTY0IHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZElQQ2F2ZWF0VG9NYWNhcm9vbihtYWNhcm9vbkJhc2U2NDogc3RyaW5nLCBpcDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWFjYXJvb24gPSBpbXBvcnRNYWNhcm9vbihtYWNhcm9vbkJhc2U2NCk7XG4gIG1hY2Fyb29uLmFkZEZpcnN0UGFydHlDYXZlYXQoYGlwYWRkciAke2lwfWApO1xuICByZXR1cm4gYnl0ZXNUb0Jhc2U2NChtYWNhcm9vbi5leHBvcnRCaW5hcnkoKSk7XG59XG5cbmNvbnN0IFBVUlBPU0VfV1JBUFBFRF9QMldLSCA9IDQ5O1xuY29uc3QgUFVSUE9TRV9QMldLSCA9IDg0O1xuY29uc3QgUFVSUE9TRV9QMlRSID0gODY7XG5jb25zdCBQVVJQT1NFX0FMTF9PVEhFUlMgPSAxMDE3O1xuXG50eXBlIEV4dGVuZGVkS2V5UHVycG9zZSA9XG4gIHwgdHlwZW9mIFBVUlBPU0VfV1JBUFBFRF9QMldLSFxuICB8IHR5cGVvZiBQVVJQT1NFX1AyV0tIXG4gIHwgdHlwZW9mIFBVUlBPU0VfUDJUUlxuICB8IHR5cGVvZiBQVVJQT1NFX0FMTF9PVEhFUlM7XG5cbi8qKlxuICogQ29udmVydHMgYW4gZXh0ZW5kZWQgcHVibGljIGtleSAoeHB1YikgdG8gdGhlIGFwcHJvcHJpYXRlIHByZWZpeCAoeXB1YiwgdnB1YiwgZXRjLikgYmFzZWQgb24gaXRzIHB1cnBvc2UgYW5kIG5ldHdvcmsuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRYcHViUHJlZml4KHhwdWI6IHN0cmluZywgcHVycG9zZTogRXh0ZW5kZWRLZXlQdXJwb3NlLCBpc01haW5uZXQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAocHVycG9zZSA9PT0gUFVSUE9TRV9QMlRSIHx8IHB1cnBvc2UgPT09IFBVUlBPU0VfQUxMX09USEVSUykge1xuICAgIHJldHVybiB4cHViO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBiczU4Y2hlY2suZGVjb2RlKHhwdWIpO1xuXG4gIGxldCB2ZXJzaW9uQnl0ZXM6IEJ1ZmZlcjtcblxuICBzd2l0Y2ggKHB1cnBvc2UpIHtcbiAgICBjYXNlIFBVUlBPU0VfV1JBUFBFRF9QMldLSDpcbiAgICAgIHZlcnNpb25CeXRlcyA9IGlzTWFpbm5ldCA/IEJ1ZmZlci5mcm9tKFsweDA0LCAweDlkLCAweDdjLCAweGIyXSkgOiBCdWZmZXIuZnJvbShbMHgwNCwgMHg0YSwgMHg1MiwgMHg2Ml0pOyAvLyB5cHViL3VwdWIgZm9yIHAyc2gtcDJ3cGtoXG4gICAgICBicmVhaztcbiAgICBjYXNlIFBVUlBPU0VfUDJXS0g6XG4gICAgICB2ZXJzaW9uQnl0ZXMgPSBpc01haW5uZXQgPyBCdWZmZXIuZnJvbShbMHgwNCwgMHhiMiwgMHg0NywgMHg0Nl0pIDogQnVmZmVyLmZyb20oWzB4MDQsIDB4NWYsIDB4MWMsIDB4ZjZdKTsgLy8genB1Yi92cHViIGZvciBwMndwa2hcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHB1cnBvc2UnKTtcbiAgfVxuXG4gIHZlcnNpb25CeXRlcy5jb3B5KGRhdGEsIDAsIDAsIDQpO1xuICByZXR1cm4gYnM1OGNoZWNrLmVuY29kZShkYXRhKTtcbn1cblxuLyoqXG4gKiBEZXJpdmVzIHdhdGNoLW9ubHkgYWNjb3VudHMgZnJvbSB0aGUgbWFzdGVyIEhEIG5vZGUgZm9yIHRoZSBnaXZlbiBwdXJwb3NlcyBhbmQgbmV0d29yay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZVdhdGNoT25seUFjY291bnRzKFxuICBtYXN0ZXJIRE5vZGU6IHV0eG9saWIuQklQMzJJbnRlcmZhY2UsXG4gIGlzTWFpbm5ldDogYm9vbGVhbixcbiAgcGFyYW1zOiB7IG9ubHlBZGRyZXNzQ3JlYXRpb25BY2NvdW50cz86IGJvb2xlYW4gfSA9IHsgb25seUFkZHJlc3NDcmVhdGlvbkFjY291bnRzOiBmYWxzZSB9XG4pOiBXYXRjaE9ubHlBY2NvdW50W10ge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbGlnaHRuaW5nbmV0d29yay9sbmQvYmxvYi9tYXN0ZXIvZG9jcy9yZW1vdGUtc2lnbmluZy5tZCNyZXF1aXJlZC1hY2NvdW50c1xuICBpZiAobWFzdGVySEROb2RlLmlzTmV1dGVyZWQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWFzdGVySEROb2RlIG11c3Qgbm90IGJlIG5ldXRlcmVkJyk7XG4gIH1cbiAgY29uc3QgcHVycG9zZXMgPSBwYXJhbXMub25seUFkZHJlc3NDcmVhdGlvbkFjY291bnRzXG4gICAgPyAoW1BVUlBPU0VfV1JBUFBFRF9QMldLSCwgUFVSUE9TRV9QMldLSCwgUFVSUE9TRV9QMlRSXSBhcyBjb25zdClcbiAgICA6IChbUFVSUE9TRV9XUkFQUEVEX1AyV0tILCBQVVJQT1NFX1AyV0tILCBQVVJQT1NFX1AyVFIsIFBVUlBPU0VfQUxMX09USEVSU10gYXMgY29uc3QpO1xuICByZXR1cm4gcHVycG9zZXMuZmxhdE1hcCgocHVycG9zZSkgPT4ge1xuICAgIGNvbnN0IG1heEFjY291bnQgPSBwdXJwb3NlID09PSBQVVJQT1NFX0FMTF9PVEhFUlMgPyAyNTUgOiAwO1xuICAgIGNvbnN0IGNvaW5UeXBlID0gcHVycG9zZSAhPT0gUFVSUE9TRV9BTExfT1RIRVJTIHx8IGlzTWFpbm5ldCA/IDAgOiAxO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IG1heEFjY291bnQgKyAxIH0sIChfLCBhY2NvdW50KSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gYG0vJHtwdXJwb3NlfScvJHtjb2luVHlwZX0nLyR7YWNjb3VudH0nYDtcbiAgICAgIGNvbnN0IGRlcml2ZWROb2RlID0gbWFzdGVySEROb2RlLmRlcml2ZVBhdGgocGF0aCk7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGUgbm9kZSBpcyBuZXV0ZXJlZCAoaS5lLiwgY29udmVydGVkIHRvIHB1YmxpYyBrZXkgb25seSlcbiAgICAgIGNvbnN0IG5ldXRlcmVkTm9kZSA9IGRlcml2ZWROb2RlLm5ldXRlcmVkKCk7XG4gICAgICBjb25zdCB4cHViID0gY29udmVydFhwdWJQcmVmaXgobmV1dGVyZWROb2RlLnRvQmFzZTU4KCksIHB1cnBvc2UsIGlzTWFpbm5ldCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHB1cnBvc2UsXG4gICAgICAgIGNvaW5fdHlwZTogY29pblR5cGUsXG4gICAgICAgIGFjY291bnQsXG4gICAgICAgIHhwdWIsXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgd2F0Y2gtb25seSB3YWxsZXQgaW5pdCBkYXRhIGZyb20gdGhlIHByb3ZpZGVkIHNpZ25lciByb290IGtleSBhbmQgbmV0d29yay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhdGNoT25seShzaWduZXJSb290S2V5OiBzdHJpbmcsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IFdhdGNoT25seSB7XG4gIGNvbnN0IG1hc3RlckhETm9kZSA9IHV0eG9saWIuYmlwMzIuZnJvbUJhc2U1OChzaWduZXJSb290S2V5LCBuZXR3b3JrKTtcbiAgY29uc3QgZ2V0Q3VycmVudFVuaXhUaW1lc3RhbXAgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICB9O1xuICBjb25zdCBtYXN0ZXJfa2V5X2JpcnRoZGF5X3RpbWVzdGFtcCA9IGdldEN1cnJlbnRVbml4VGltZXN0YW1wKCkudG9TdHJpbmcoKTtcbiAgY29uc3QgbWFzdGVyX2tleV9maW5nZXJwcmludCA9IG1hc3RlckhETm9kZS5maW5nZXJwcmludC50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IGFjY291bnRzID0gZGVyaXZlV2F0Y2hPbmx5QWNjb3VudHMobWFzdGVySEROb2RlLCB1dHhvbGliLmlzTWFpbm5ldChuZXR3b3JrKSk7XG4gIHJldHVybiB7IG1hc3Rlcl9rZXlfYmlydGhkYXlfdGltZXN0YW1wLCBtYXN0ZXJfa2V5X2ZpbmdlcnByaW50LCBhY2NvdW50cyB9O1xufVxuXG4vKipcbiAqIERlcml2ZXMgdGhlIHNoYXJlZCBFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUtSGVsbG1hbiAoRUNESCkgc2VjcmV0IGJldHdlZW4gdGhlIHVzZXIncyBhdXRoIGV4dGVuZGVkIHByaXZhdGUga2V5XG4gKiBhbmQgdGhlIExpZ2h0bmluZyBzZXJ2aWNlJ3MgcHVibGljIGtleSBmb3Igc2VjdXJlIGNvbW11bmljYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVMaWdodG5pbmdTZXJ2aWNlU2hhcmVkU2VjcmV0KGNvaW5OYW1lOiAnbG5idGMnIHwgJ3RsbmJ0YycsIHVzZXJBdXRoWHBydjogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmZyb20oZ2V0U3RhdGljc0xpZ2h0bmluZ05ldHdvcmsoY29pbk5hbWUpLmxpZ2h0bmluZ1NlcnZpY2VQdWJLZXksICdoZXgnKTtcbiAgY29uc3QgdXNlckF1dGhIZE5vZGUgPSB1dHhvbGliLmJpcDMyLmZyb21CYXNlNTgodXNlckF1dGhYcHJ2KTtcbiAgcmV0dXJuIHNka2NvcmUuZ2V0U2hhcmVkU2VjcmV0KHVzZXJBdXRoSGROb2RlLCBwdWJsaWNLZXkpO1xufVxuXG4vKipcbiAqIERlcml2ZXMgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIHRoZSBtaWRkbGV3YXJlIHVzaW5nIGEgcHJpdmF0ZSBrZXkgYW5kIHRoZSBtaWRkbGV3YXJlJ3MgcHVibGljIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZU1pZGRsZXdhcmVTaGFyZWRTZWNyZXQoY29pbk5hbWU6ICdsbmJ0YycgfCAndGxuYnRjJywgeHBydjogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmZyb20oZ2V0U3RhdGljc0xpZ2h0bmluZ05ldHdvcmsoY29pbk5hbWUpLm1pZGRsZXdhcmVQdWJLZXksICdoZXgnKTtcbiAgY29uc3QgdXNlckF1dGhIZE5vZGUgPSB1dHhvbGliLmJpcDMyLmZyb21CYXNlNTgoeHBydik7XG4gIHJldHVybiBzZGtjb3JlLmdldFNoYXJlZFNlY3JldCh1c2VyQXV0aEhkTm9kZSwgcHVibGljS2V5KTtcbn1cblxuLyoqXG4gKiBEZXJpdmVzIHRoZSBzaGFyZWQgc2VjcmV0IGZvciBUQVQgc2VydmljZSB1c2luZyB0YSBwcml2YXRlIGtleSBhbmQgdGhlIFRBVCBwdWJsaWMga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlVGF0U2hhcmVkU2VjcmV0KGNvaW5OYW1lOiAnbG5idGMnIHwgJ3RsbmJ0YycsIHhwcnY6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKGdldFN0YXRpY3NMaWdodG5pbmdOZXR3b3JrKGNvaW5OYW1lKS50YXRQdWJLZXksICdoZXgnKTtcbiAgY29uc3QgdXNlckF1dGhIZE5vZGUgPSB1dHhvbGliLmJpcDMyLmZyb21CYXNlNTgoeHBydik7XG4gIHJldHVybiBzZGtjb3JlLmdldFNoYXJlZFNlY3JldCh1c2VyQXV0aEhkTm9kZSwgcHVibGljS2V5KTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIHNlZWQsIGNvbXB1dGUgYSBCSVAzMiBkZXJpdmF0aW9uIGluZGV4LlxuICogMCA8PSBpbmRleCA8IDIxNDc0ODM2NDggKGxhcmdlc3QgMzEgYml0IG51bWJlcikuIFRoaXMgbmVlZHMgdG8gYmUgMl4zMSAtIDEgc28gdGhhdCB0aGUgYmlwMzIgbGlicmFyeVxuICogY2FuIGRlcml2ZSB0aGUgaGFyZGVuZWQga2V5LlxuICogQHBhcmFtIHNlZWQgKG9wdGlvbmFsKSBJZiBub3RoaW5nIHByb3ZpZGVkLCB3ZSB3aWxsIGdlbmVyYXRlIG9uZSByYW5kb21seVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUJpcDMyRGVyaXZhdGlvbkluZGV4RnJvbVNlZWQoc2VlZD86IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgKEJ1ZmZlci5mcm9tKHV0eG9saWIuY3J5cHRvLnNoYTI1NihCdWZmZXIuZnJvbShzZWVkID8/IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4JyksICd1dGY4JykpKS5yZWFkVWludDMyQkUoMCkgJVxuICAgICAgTWF0aC5wb3coMiwgMzEpKSAtXG4gICAgMVxuICApO1xufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
2
|
+
import { WatchOnlyAccount } from '../codecs';
|
|
3
|
+
import { LightningOnchainRecipient } from '@bitgo/public-types';
|
|
4
|
+
/**
|
|
5
|
+
* Validates the funded psbt before creating the signatures for withdraw.
|
|
6
|
+
*/
|
|
7
|
+
export declare function validatePsbtForWithdraw(psbtHex: string, network: utxolib.Network, recipients: LightningOnchainRecipient[], accounts: WatchOnlyAccount[]): void;
|
|
8
|
+
//# sourceMappingURL=parseWithdrawPsbt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseWithdrawPsbt.d.ts","sourceRoot":"","sources":["../../../src/lightning/parseWithdrawPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAA0B,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA+GhE;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,UAAU,EAAE,yBAAyB,EAAE,EACvC,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,IAAI,CAsBN"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.validatePsbtForWithdraw = validatePsbtForWithdraw;
|
|
37
|
+
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
38
|
+
const utxo_lib_1 = require("@bitgo/utxo-lib");
|
|
39
|
+
function parseDerivationPath(derivationPath) {
|
|
40
|
+
const pathSegments = derivationPath.split('/');
|
|
41
|
+
const purpose = Number(pathSegments[1].replace(/'/g, ''));
|
|
42
|
+
const change = Number(pathSegments[pathSegments.length - 2]);
|
|
43
|
+
const addressIndex = Number(pathSegments[pathSegments.length - 1]);
|
|
44
|
+
return { purpose, change, addressIndex };
|
|
45
|
+
}
|
|
46
|
+
function parsePsbtOutputs(psbt, network) {
|
|
47
|
+
const parsedOutputs = [];
|
|
48
|
+
let bip32Derivation;
|
|
49
|
+
for (let i = 0; i < psbt.data.outputs.length; i++) {
|
|
50
|
+
const output = psbt.data.outputs[i];
|
|
51
|
+
const txOutput = psbt.txOutputs[i];
|
|
52
|
+
let address = '';
|
|
53
|
+
const value = txOutput.value;
|
|
54
|
+
let isChange = false;
|
|
55
|
+
if (output.bip32Derivation && output.bip32Derivation.length > 0) {
|
|
56
|
+
isChange = true;
|
|
57
|
+
bip32Derivation = output.bip32Derivation[0];
|
|
58
|
+
}
|
|
59
|
+
if (txOutput.script) {
|
|
60
|
+
address = utxolib.address.fromOutputScript(txOutput.script, network);
|
|
61
|
+
}
|
|
62
|
+
const valueBigInt = BigInt(value);
|
|
63
|
+
parsedOutputs.push({
|
|
64
|
+
address,
|
|
65
|
+
value: valueBigInt,
|
|
66
|
+
change: isChange,
|
|
67
|
+
bip32Derivation,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return parsedOutputs;
|
|
71
|
+
}
|
|
72
|
+
function verifyChangeAddress(output, accounts, network) {
|
|
73
|
+
if (!output.bip32Derivation || !output.bip32Derivation.path) {
|
|
74
|
+
throw new Error(`bip32Derivation path not found for change address`);
|
|
75
|
+
}
|
|
76
|
+
// derivation path example: m/84'/0'/0'/1/0
|
|
77
|
+
const { purpose, change, addressIndex } = parseDerivationPath(output.bip32Derivation.path);
|
|
78
|
+
// Find the corresponding account using the purpose
|
|
79
|
+
const account = accounts.find((acc) => acc.purpose === purpose);
|
|
80
|
+
if (!account) {
|
|
81
|
+
throw new Error(`Account not found for purpose: ${purpose}`);
|
|
82
|
+
}
|
|
83
|
+
// Create a BIP32 node from the xpub
|
|
84
|
+
const xpubNode = utxolib.bip32.fromBase58(account.xpub, network);
|
|
85
|
+
// Derive the public key from the xpub using the change and address index
|
|
86
|
+
const derivedPubkey = xpubNode.derive(change).derive(addressIndex).publicKey;
|
|
87
|
+
if (derivedPubkey.toString('hex') !== output.bip32Derivation.pubkey.toString('hex')) {
|
|
88
|
+
throw new Error(`Derived pubkey does not match for address: ${output.address}, derived: ${derivedPubkey.toString('hex')}, expected: ${output.bip32Derivation.pubkey.toString('hex')}`);
|
|
89
|
+
}
|
|
90
|
+
// Determine the correct payment type based on the purpose
|
|
91
|
+
let derivedAddress;
|
|
92
|
+
switch (purpose) {
|
|
93
|
+
case 49: // P2SH-P2WPKH (Nested SegWit)
|
|
94
|
+
derivedAddress = utxolib.payments.p2sh({
|
|
95
|
+
redeem: utxolib.payments.p2wpkh({
|
|
96
|
+
pubkey: derivedPubkey,
|
|
97
|
+
network,
|
|
98
|
+
}),
|
|
99
|
+
network,
|
|
100
|
+
}).address;
|
|
101
|
+
break;
|
|
102
|
+
case 84: // P2WPKH (Native SegWit)
|
|
103
|
+
derivedAddress = utxolib.payments.p2wpkh({
|
|
104
|
+
pubkey: derivedPubkey,
|
|
105
|
+
network,
|
|
106
|
+
}).address;
|
|
107
|
+
break;
|
|
108
|
+
case 86: // P2TR (Taproot)
|
|
109
|
+
derivedAddress = utxolib.payments.p2tr({
|
|
110
|
+
pubkey: derivedPubkey,
|
|
111
|
+
network,
|
|
112
|
+
}).address;
|
|
113
|
+
break;
|
|
114
|
+
default:
|
|
115
|
+
throw new Error(`Unsupported purpose: ${purpose}`);
|
|
116
|
+
}
|
|
117
|
+
if (derivedAddress !== output.address) {
|
|
118
|
+
throw new Error(`invalid change address: expected ${derivedAddress}, got ${output.address}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Validates the funded psbt before creating the signatures for withdraw.
|
|
123
|
+
*/
|
|
124
|
+
function validatePsbtForWithdraw(psbtHex, network, recipients, accounts) {
|
|
125
|
+
const parsedPsbt = utxo_lib_1.Psbt.fromHex(psbtHex, { network: network });
|
|
126
|
+
const outputs = parsePsbtOutputs(parsedPsbt, network);
|
|
127
|
+
outputs.forEach((output) => {
|
|
128
|
+
if (output.change) {
|
|
129
|
+
try {
|
|
130
|
+
verifyChangeAddress(output, accounts, network);
|
|
131
|
+
}
|
|
132
|
+
catch (e) {
|
|
133
|
+
throw new Error(`Unable to verify change address: ${e}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
let match = false;
|
|
138
|
+
recipients.forEach((recipient) => {
|
|
139
|
+
if (recipient.address === output.address && BigInt(recipient.amountSat) === output.value) {
|
|
140
|
+
match = true;
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
if (!match) {
|
|
144
|
+
throw new Error(`PSBT output ${output.address} with value ${output.value} does not match any recipient`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VXaXRoZHJhd1BzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlnaHRuaW5nL3BhcnNlV2l0aGRyYXdQc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUhBLDBEQTJCQztBQWhKRCx5REFBMkM7QUFDM0MsOENBQXVDO0FBS3ZDLFNBQVMsbUJBQW1CLENBQUMsY0FBc0I7SUFLakQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFVLEVBQUUsT0FBd0I7SUFDNUQsTUFBTSxhQUFhLEdBQXFDLEVBQUUsQ0FBQztJQUMzRCxJQUFJLGVBQTRDLENBQUM7SUFFakQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sUUFBUSxH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QU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3pGLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2YsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxNQUFNLENBQUMsT0FBTyxlQUFlLE1BQU0sQ0FBQyxLQUFLLCtCQUErQixDQUFDLENBQUM7WUFDM0csQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBQc2J0IH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IFdhdGNoT25seUFjY291bnQsIFdpdGhkcmF3QmFzZU91dHB1dFVUWE8gfSBmcm9tICcuLi9jb2RlY3MnO1xuaW1wb3J0IHsgTGlnaHRuaW5nT25jaGFpblJlY2lwaWVudCB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHsgQmlwMzJEZXJpdmF0aW9uIH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5cbmZ1bmN0aW9uIHBhcnNlRGVyaXZhdGlvblBhdGgoZGVyaXZhdGlvblBhdGg6IHN0cmluZyk6IHtcbiAgcHVycG9zZTogbnVtYmVyO1xuICBjaGFuZ2U6IG51bWJlcjtcbiAgYWRkcmVzc0luZGV4OiBudW1iZXI7XG59IHtcbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gZGVyaXZhdGlvblBhdGguc3BsaXQoJy8nKTtcbiAgY29uc3QgcHVycG9zZSA9IE51bWJlcihwYXRoU2VnbWVudHNbMV0ucmVwbGFjZSgvJy9nLCAnJykpO1xuICBjb25zdCBjaGFuZ2UgPSBOdW1iZXIocGF0aFNlZ21lbnRzW3BhdGhTZWdtZW50cy5sZW5ndGggLSAyXSk7XG4gIGNvbnN0IGFkZHJlc3NJbmRleCA9IE51bWJlcihwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDFdKTtcbiAgcmV0dXJuIHsgcHVycG9zZSwgY2hhbmdlLCBhZGRyZXNzSW5kZXggfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQc2J0T3V0cHV0cyhwc2J0OiBQc2J0LCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBXaXRoZHJhd0Jhc2VPdXRwdXRVVFhPPGJpZ2ludD5bXSB7XG4gIGNvbnN0IHBhcnNlZE91dHB1dHM6IFdpdGhkcmF3QmFzZU91dHB1dFVUWE88YmlnaW50PltdID0gW107XG4gIGxldCBiaXAzMkRlcml2YXRpb246IEJpcDMyRGVyaXZhdGlvbiB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBzYnQuZGF0YS5vdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gcHNidC5kYXRhLm91dHB1dHNbaV07XG4gICAgY29uc3QgdHhPdXRwdXQgPSBwc2J0LnR4T3V0cHV0c1tpXTtcblxuICAgIGxldCBhZGRyZXNzID0gJyc7XG4gICAgY29uc3QgdmFsdWUgPSB0eE91dHB1dC52YWx1ZTtcbiAgICBsZXQgaXNDaGFuZ2UgPSBmYWxzZTtcblxuICAgIGlmIChvdXRwdXQuYmlwMzJEZXJpdmF0aW9uICYmIG91dHB1dC5iaXAzMkRlcml2YXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgaXNDaGFuZ2UgPSB0cnVlO1xuICAgICAgYmlwMzJEZXJpdmF0aW9uID0gb3V0cHV0LmJpcDMyRGVyaXZhdGlvblswXTtcbiAgICB9XG4gICAgaWYgKHR4T3V0cHV0LnNjcmlwdCkge1xuICAgICAgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHR4T3V0cHV0LnNjcmlwdCwgbmV0d29yayk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlQmlnSW50ID0gQmlnSW50KHZhbHVlKTtcblxuICAgIHBhcnNlZE91dHB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzLFxuICAgICAgdmFsdWU6IHZhbHVlQmlnSW50LFxuICAgICAgY2hhbmdlOiBpc0NoYW5nZSxcbiAgICAgIGJpcDMyRGVyaXZhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWRPdXRwdXRzO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlDaGFuZ2VBZGRyZXNzKFxuICBvdXRwdXQ6IFdpdGhkcmF3QmFzZU91dHB1dFVUWE88YmlnaW50PixcbiAgYWNjb3VudHM6IFdhdGNoT25seUFjY291bnRbXSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB2b2lkIHtcbiAgaWYgKCFvdXRwdXQuYmlwMzJEZXJpdmF0aW9uIHx8ICFvdXRwdXQuYmlwMzJEZXJpdmF0aW9uLnBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJpcDMyRGVyaXZhdGlvbiBwYXRoIG5vdCBmb3VuZCBmb3IgY2hhbmdlIGFkZHJlc3NgKTtcbiAgfVxuICAvLyBkZXJpdmF0aW9uIHBhdGggZXhhbXBsZTogbS84NCcvMCcvMCcvMS8wXG4gIGNvbnN0IHsgcHVycG9zZSwgY2hhbmdlLCBhZGRyZXNzSW5kZXggfSA9IHBhcnNlRGVyaXZhdGlvblBhdGgob3V0cHV0LmJpcDMyRGVyaXZhdGlvbi5wYXRoKTtcblxuICAvLyBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIGFjY291bnQgdXNpbmcgdGhlIHB1cnBvc2VcbiAgY29uc3QgYWNjb3VudCA9IGFjY291bnRzLmZpbmQoKGFjYykgPT4gYWNjLnB1cnBvc2UgPT09IHB1cnBvc2UpO1xuICBpZiAoIWFjY291bnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFjY291bnQgbm90IGZvdW5kIGZvciBwdXJwb3NlOiAke3B1cnBvc2V9YCk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSBCSVAzMiBub2RlIGZyb20gdGhlIHhwdWJcbiAgY29uc3QgeHB1Yk5vZGUgPSB1dHhvbGliLmJpcDMyLmZyb21CYXNlNTgoYWNjb3VudC54cHViLCBuZXR3b3JrKTtcblxuICAvLyBEZXJpdmUgdGhlIHB1YmxpYyBrZXkgZnJvbSB0aGUgeHB1YiB1c2luZyB0aGUgY2hhbmdlIGFuZCBhZGRyZXNzIGluZGV4XG4gIGNvbnN0IGRlcml2ZWRQdWJrZXkgPSB4cHViTm9kZS5kZXJpdmUoY2hhbmdlKS5kZXJpdmUoYWRkcmVzc0luZGV4KS5wdWJsaWNLZXk7XG5cbiAgaWYgKGRlcml2ZWRQdWJrZXkudG9TdHJpbmcoJ2hleCcpICE9PSBvdXRwdXQuYmlwMzJEZXJpdmF0aW9uLnB1YmtleS50b1N0cmluZygnaGV4JykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRGVyaXZlZCBwdWJrZXkgZG9lcyBub3QgbWF0Y2ggZm9yIGFkZHJlc3M6ICR7b3V0cHV0LmFkZHJlc3N9LCBkZXJpdmVkOiAke2Rlcml2ZWRQdWJrZXkudG9TdHJpbmcoXG4gICAgICAgICdoZXgnXG4gICAgICApfSwgZXhwZWN0ZWQ6ICR7b3V0cHV0LmJpcDMyRGVyaXZhdGlvbi5wdWJrZXkudG9TdHJpbmcoJ2hleCcpfWBcbiAgICApO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBheW1lbnQgdHlwZSBiYXNlZCBvbiB0aGUgcHVycG9zZVxuICBsZXQgZGVyaXZlZEFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChwdXJwb3NlKSB7XG4gICAgY2FzZSA0OTogLy8gUDJTSC1QMldQS0ggKE5lc3RlZCBTZWdXaXQpXG4gICAgICBkZXJpdmVkQWRkcmVzcyA9IHV0eG9saWIucGF5bWVudHMucDJzaCh7XG4gICAgICAgIHJlZGVlbTogdXR4b2xpYi5wYXltZW50cy5wMndwa2goe1xuICAgICAgICAgIHB1YmtleTogZGVyaXZlZFB1YmtleSxcbiAgICAgICAgICBuZXR3b3JrLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV0d29yayxcbiAgICAgIH0pLmFkZHJlc3M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg0OiAvLyBQMldQS0ggKE5hdGl2ZSBTZWdXaXQpXG4gICAgICBkZXJpdmVkQWRkcmVzcyA9IHV0eG9saWIucGF5bWVudHMucDJ3cGtoKHtcbiAgICAgICAgcHVia2V5OiBkZXJpdmVkUHVia2V5LFxuICAgICAgICBuZXR3b3JrLFxuICAgICAgfSkuYWRkcmVzcztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODY6IC8vIFAyVFIgKFRhcHJvb3QpXG4gICAgICBkZXJpdmVkQWRkcmVzcyA9IHV0eG9saWIucGF5bWVudHMucDJ0cih7XG4gICAgICAgIHB1YmtleTogZGVyaXZlZFB1YmtleSxcbiAgICAgICAgbmV0d29yayxcbiAgICAgIH0pLmFkZHJlc3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBwdXJwb3NlOiAke3B1cnBvc2V9YCk7XG4gIH1cblxuICBpZiAoZGVyaXZlZEFkZHJlc3MgIT09IG91dHB1dC5hZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGNoYW5nZSBhZGRyZXNzOiBleHBlY3RlZCAke2Rlcml2ZWRBZGRyZXNzfSwgZ290ICR7b3V0cHV0LmFkZHJlc3N9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGZ1bmRlZCBwc2J0IGJlZm9yZSBjcmVhdGluZyB0aGUgc2lnbmF0dXJlcyBmb3Igd2l0aGRyYXcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBzYnRGb3JXaXRoZHJhdyhcbiAgcHNidEhleDogc3RyaW5nLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIHJlY2lwaWVudHM6IExpZ2h0bmluZ09uY2hhaW5SZWNpcGllbnRbXSxcbiAgYWNjb3VudHM6IFdhdGNoT25seUFjY291bnRbXVxuKTogdm9pZCB7XG4gIGNvbnN0IHBhcnNlZFBzYnQgPSBQc2J0LmZyb21IZXgocHNidEhleCwgeyBuZXR3b3JrOiBuZXR3b3JrIH0pO1xuICBjb25zdCBvdXRwdXRzID0gcGFyc2VQc2J0T3V0cHV0cyhwYXJzZWRQc2J0LCBuZXR3b3JrKTtcbiAgb3V0cHV0cy5mb3JFYWNoKChvdXRwdXQpID0+IHtcbiAgICBpZiAob3V0cHV0LmNoYW5nZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmVyaWZ5Q2hhbmdlQWRkcmVzcyhvdXRwdXQsIGFjY291bnRzLCBuZXR3b3JrKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byB2ZXJpZnkgY2hhbmdlIGFkZHJlc3M6ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG1hdGNoID0gZmFsc2U7XG4gICAgICByZWNpcGllbnRzLmZvckVhY2goKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICBpZiAocmVjaXBpZW50LmFkZHJlc3MgPT09IG91dHB1dC5hZGRyZXNzICYmIEJpZ0ludChyZWNpcGllbnQuYW1vdW50U2F0KSA9PT0gb3V0cHV0LnZhbHVlKSB7XG4gICAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQU0JUIG91dHB1dCAke291dHB1dC5hZGRyZXNzfSB3aXRoIHZhbHVlICR7b3V0cHV0LnZhbHVlfSBkb2VzIG5vdCBtYXRjaCBhbnkgcmVjaXBpZW50YCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -88,6 +88,9 @@ export interface ILightningWallet {
|
|
|
88
88
|
* @param {LightningOnchainWithdrawParams} params - Withdraw parameters
|
|
89
89
|
* @param {LightningOnchainRecipient[]} params.recipients - The recipients to pay
|
|
90
90
|
* @param {bigint} params.satsPerVbyte - Value for sats per virtual byte
|
|
91
|
+
* @param {string} params.passphrase - The wallet passphrase
|
|
92
|
+
* @param {string} [params.sequenceId] - Optional sequence ID for the respective withdraw transfer
|
|
93
|
+
* @param {string} [params.comment] - Optional comment for the respective withdraw transfer
|
|
91
94
|
* @returns {Promise<LightningOnchainWithdrawResponse>} Withdraw result containing transaction request details and status
|
|
92
95
|
*/
|
|
93
96
|
withdrawOnchain(params: LightningOnchainWithdrawParams): Promise<LightningOnchainWithdrawResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../../src/wallet/lightning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EACL,mBAAmB,EAMnB,cAAc,EAEf,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../../src/wallet/lightning.ts"],"names":[],"mappings":"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"}
|
|
@@ -188,6 +188,8 @@ class LightningWallet {
|
|
|
188
188
|
this.wallet.bitgo.setRequestTracer(reqId);
|
|
189
189
|
const paymentIntent = {
|
|
190
190
|
intent: {
|
|
191
|
+
comment: params.comment,
|
|
192
|
+
sequenceId: params.sequenceId,
|
|
191
193
|
onchainRequest: {
|
|
192
194
|
recipients: params.recipients,
|
|
193
195
|
satsPerVbyte: params.satsPerVbyte,
|
|
@@ -199,20 +201,54 @@ class LightningWallet {
|
|
|
199
201
|
.post(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests', 2))
|
|
200
202
|
.send(t.type({ intent: public_types_1.LightningPaymentIntent }).encode(paymentIntent))
|
|
201
203
|
.result());
|
|
202
|
-
if (transactionRequestCreate.
|
|
204
|
+
if (!transactionRequestCreate.transactions ||
|
|
205
|
+
transactionRequestCreate.transactions.length === 0 ||
|
|
206
|
+
!transactionRequestCreate.transactions[0].unsignedTx.serializedTxHex) {
|
|
207
|
+
throw new Error(`serialized txHex is missing`);
|
|
208
|
+
}
|
|
209
|
+
const walletData = this.wallet.toJSON();
|
|
210
|
+
if (!walletData.coinSpecific.watchOnlyAccounts) {
|
|
211
|
+
throw new Error(`wallet is missing watch only accounts`);
|
|
212
|
+
}
|
|
213
|
+
const watchOnlyAccountDetails = (0, sdk_core_1.decodeOrElse)(codecs_1.WatchOnly.name, codecs_1.WatchOnly, walletData.coinSpecific.watchOnlyAccounts, (errors) => {
|
|
214
|
+
throw new Error(`invalid watch only accounts, error: ${errors}`);
|
|
215
|
+
});
|
|
216
|
+
const network = (0, lightning_1.getUtxolibNetwork)(this.wallet.coin());
|
|
217
|
+
try {
|
|
218
|
+
(0, lightning_1.validatePsbtForWithdraw)(transactionRequestCreate.transactions[0].unsignedTx.serializedTxHex, network, params.recipients, watchOnlyAccountDetails.accounts);
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
throw new Error(`error validating withdraw psbt: ${err}`);
|
|
222
|
+
}
|
|
223
|
+
const { userAuthKey } = await getLightningAuthKeychains(this.wallet);
|
|
224
|
+
const userAuthKeyEncryptedPrv = userAuthKey.encryptedPrv;
|
|
225
|
+
if (!userAuthKeyEncryptedPrv) {
|
|
226
|
+
throw new Error(`user auth key is missing encrypted private key`);
|
|
227
|
+
}
|
|
228
|
+
const signature = (0, lightning_1.createMessageSignature)(transactionRequestCreate.transactions[0].unsignedTx.serializedTxHex, this.wallet.bitgo.decrypt({ password: params.passphrase, input: userAuthKeyEncryptedPrv }));
|
|
229
|
+
const transactionRequestWithSignature = (await this.wallet.bitgo
|
|
230
|
+
.put(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests/' + transactionRequestCreate.txRequestId + '/coinSpecific', 2))
|
|
231
|
+
.send({
|
|
232
|
+
unsignedCoinSpecific: {
|
|
233
|
+
coin: this.wallet.baseCoin.getChain(),
|
|
234
|
+
data: { signature },
|
|
235
|
+
},
|
|
236
|
+
})
|
|
237
|
+
.result());
|
|
238
|
+
if (transactionRequestWithSignature.state === 'pendingApproval') {
|
|
203
239
|
const pendingApprovals = new sdk_core_1.PendingApprovals(this.wallet.bitgo, this.wallet.baseCoin);
|
|
204
|
-
const pendingApproval = await pendingApprovals.get({ id:
|
|
240
|
+
const pendingApproval = await pendingApprovals.get({ id: transactionRequestWithSignature.pendingApprovalId });
|
|
205
241
|
return {
|
|
206
242
|
pendingApproval: pendingApproval.toJSON(),
|
|
207
|
-
txRequestId:
|
|
208
|
-
txRequestState:
|
|
243
|
+
txRequestId: transactionRequestWithSignature.txRequestId,
|
|
244
|
+
txRequestState: transactionRequestWithSignature.state,
|
|
209
245
|
};
|
|
210
246
|
}
|
|
211
247
|
const transfer = await this.wallet.bitgo
|
|
212
|
-
.post(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests/' +
|
|
248
|
+
.post(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests/' + transactionRequestWithSignature.txRequestId + '/transfers', 2))
|
|
213
249
|
.send()
|
|
214
250
|
.result();
|
|
215
|
-
const transactionRequestSend = await sdk_core_1.commonTssMethods.sendTxRequest(this.wallet.bitgo, this.wallet.id(),
|
|
251
|
+
const transactionRequestSend = await sdk_core_1.commonTssMethods.sendTxRequest(this.wallet.bitgo, this.wallet.id(), transactionRequestWithSignature.txRequestId, sdk_core_1.RequestType.tx, reqId);
|
|
216
252
|
const coinSpecific = transactionRequestSend.transactions?.[0]?.unsignedTx?.coinSpecific;
|
|
217
253
|
let updatedTransfer = undefined;
|
|
218
254
|
try {
|
|
@@ -224,7 +260,7 @@ class LightningWallet {
|
|
|
224
260
|
// We still want to return the txRequestId and txRequestState.
|
|
225
261
|
}
|
|
226
262
|
return {
|
|
227
|
-
txRequestId:
|
|
263
|
+
txRequestId: transactionRequestWithSignature.txRequestId,
|
|
228
264
|
txRequestState: transactionRequestSend.state,
|
|
229
265
|
transfer: updatedTransfer,
|
|
230
266
|
withdrawStatus: coinSpecific && 'status' in coinSpecific
|
|
@@ -268,4 +304,4 @@ class LightningWallet {
|
|
|
268
304
|
}
|
|
269
305
|
}
|
|
270
306
|
exports.LightningWallet = LightningWallet;
|
|
271
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC9saWdodG5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUVBLG9EQWFDO0FBS0QsOERBOEJDO0FBekhELHlEQUEyQztBQUMzQyw4Q0FTeUI7QUFDekIseUNBQTJCO0FBQzNCLDRDQUFtRjtBQUNuRixzQ0FpQm1CO0FBQ25CLHNEQUFzRjtBQXVDdEY7O0dBRUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBdUI7SUFDaEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsMEJBQWlCLENBQUMsSUFBSSxFQUFFLDBCQUFpQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3JGLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0QyxDQUFD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LEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkYsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXJPRCwwQ0FxT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZGtjb3JlIGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQge1xuICBQZW5kaW5nQXBwcm92YWxEYXRhLFxuICBQZW5kaW5nQXBwcm92YWxzLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBSZXF1ZXN0VHlwZSxcbiAgVHhSZXF1ZXN0LFxuICBjb21tb25Uc3NNZXRob2RzLFxuICBUeFJlcXVlc3RTdGF0ZSxcbiAgZGVjb2RlT3JFbHNlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQgeyBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlLCB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWMgfSBmcm9tICcuLi9saWdodG5pbmcnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlSW52b2ljZUJvZHksXG4gIEludm9pY2UsXG4gIEludm9pY2VRdWVyeSxcbiAgTGlnaHRuaW5nQXV0aEtleWNoYWluLFxuICBMaWdodG5pbmdLZXljaGFpbixcbiAgTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlLFxuICBTdWJtaXRQYXltZW50UGFyYW1zLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25RdWVyeSxcbiAgUGF5bWVudEluZm8sXG4gIFBheW1lbnRRdWVyeSxcbiAgTGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UGFyYW1zLFxuICBMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdSZXNwb25zZSxcbiAgTGlzdEludm9pY2VzUmVzcG9uc2UsXG4gIExpc3RQYXltZW50c1Jlc3BvbnNlLFxuICBMbmRDcmVhdGVXaXRoZHJhd1Jlc3BvbnNlLFxufSBmcm9tICcuLi9jb2RlY3MnO1xuaW1wb3J0IHsgTGlnaHRuaW5nUGF5bWVudEludGVudCwgTGlnaHRuaW5nUGF5bWVudFJlcXVlc3QgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcblxuZXhwb3J0IHR5cGUgUGF5SW52b2ljZVJlc3BvbnNlID0ge1xuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwYXltZW50IHJlcXVlc3Qgc3VibWl0dGVkIHRvIEJpdEdvLlxuICAgKi9cbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3RhdHVzIG9mIHRoZSBwYXltZW50IHJlcXVlc3Qgc3VibWlzc2lvbiB0byBCaXRHby5cbiAgICogLSBgJ2RlbGl2ZXJlZCdgOiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYnkgQml0R28sIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gc2VudCB0byB0aGUgTGlnaHRuaW5nIE5ldHdvcmsgeWV0LlxuICAgKiAtIEZvciB0aGUgYWN0dWFsIHBheW1lbnQgc3RhdHVzLCByZWZlciB0byBgcGF5bWVudFN0YXR1c2AgYW5kIHRyYWNrIGB0cmFuc2ZlcmAuXG4gICAqL1xuICB0eFJlcXVlc3RTdGF0ZTogVHhSZXF1ZXN0U3RhdGU7XG5cbiAgLyoqXG4gICAqIFBlbmRpbmcgYXBwcm92YWwgZGV0YWlscywgaWYgYXBwbGljYWJsZS5cbiAgICogLSBJZiBwcmVzZW50LCB0aGUgcGF5bWVudCBoYXMgbm90IGJlZW4gaW5pdGlhdGVkIHlldC5cbiAgICovXG4gIHBlbmRpbmdBcHByb3ZhbD86IFBlbmRpbmdBcHByb3ZhbERhdGE7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc25hcHNob3Qgb2YgcGF5bWVudCBzdGF0dXMgKGlmIGF2YWlsYWJsZSkuXG4gICAqIC0gKipgJ2luX2ZsaWdodCdgKio6IFBheW1lbnQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAqIC0gKipgJ3NldHRsZWQnYCoqOiBQYXltZW50IHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLlxuICAgKiAtICoqYCdmYWlsZWQnYCoqOiBQYXltZW50IGZhaWxlZC5cbiAgICogVGhpcyBmaWVsZCBpcyBhYnNlbnQgaWYgYXBwcm92YWwgaXMgcmVxdWlyZWQgYmVmb3JlIHByb2Nlc3NpbmcuXG4gICAqL1xuICBwYXltZW50U3RhdHVzPzogTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlO1xuXG4gIC8qKlxuICAgKiBMYXRlc3QgdHJhbnNmZXIgZGV0YWlscyBmb3IgdGhpcyBwYXltZW50IHJlcXVlc3QgKGlmIGF2YWlsYWJsZSkuXG4gICAqIC0gUHJvdmlkZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRyYW5zZmVyLlxuICAgKiAtIFRvIHRyYWNrIHRoZSBmaW5hbCBwYXltZW50IHN0YXR1cywgbW9uaXRvciBgdHJhbnNmZXJgIGFzeW5jaHJvbm91c2x5LlxuICAgKiBUaGlzIGZpZWxkIGlzIGFic2VudCBpZiBhcHByb3ZhbCBpcyByZXF1aXJlZCBiZWZvcmUgcHJvY2Vzc2luZy5cbiAgICovXG4gIHRyYW5zZmVyPzogYW55O1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxpZ2h0bmluZyBrZXljaGFpbiBmb3IgdGhlIGdpdmVuIHdhbGxldC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExpZ2h0bmluZ0tleWNoYWluKHdhbGxldDogc2RrY29yZS5JV2FsbGV0KTogUHJvbWlzZTxMaWdodG5pbmdLZXljaGFpbj4ge1xuICBjb25zdCBjb2luID0gd2FsbGV0LmJhc2VDb2luO1xuICBpZiAoY29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIHRvIGdldCBsaWdodG5pbmcgd2FsbGV0IGtleTogJHtjb2luLmdldEZhbWlseSgpfWApO1xuICB9XG4gIGNvbnN0IGtleUlkcyA9IHdhbGxldC5rZXlJZHMoKTtcbiAgaWYgKGtleUlkcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbnVtYmVyIG9mIGtleSBpbiBsaWdodG5pbmcgd2FsbGV0OiAke2tleUlkcy5sZW5ndGh9YCk7XG4gIH1cbiAgY29uc3Qga2V5Y2hhaW4gPSBhd2FpdCBjb2luLmtleWNoYWlucygpLmdldCh7IGlkOiBrZXlJZHNbMF0gfSk7XG4gIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShMaWdodG5pbmdLZXljaGFpbi5uYW1lLCBMaWdodG5pbmdLZXljaGFpbiwga2V5Y2hhaW4sIChfKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVzZXIga2V5YCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbGlnaHRuaW5nIGF1dGgga2V5Y2hhaW5zIGZvciB0aGUgZ2l2ZW4gd2FsbGV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucyh3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCk6IFByb21pc2U8e1xuICB1c2VyQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluO1xuICBub2RlQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluO1xufT4ge1xuICBjb25zdCBjb2luID0gd2FsbGV0LmJhc2VDb2luO1xuICBpZiAoY29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIHRvIGdldCBsaWdodG5pbmcgd2FsbGV0IGF1dGgga2V5czogJHtjb2luLmdldEZhbWlseSgpfWApO1xuICB9XG4gIGNvbnN0IGF1dGhLZXlJZHMgPSB3YWxsZXQuY29pblNwZWNpZmljKCk/LmtleXM7XG4gIGlmIChhdXRoS2V5SWRzPy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbnVtYmVyIG9mIGF1dGgga2V5cyBpbiBsaWdodG5pbmcgd2FsbGV0OiAke2F1dGhLZXlJZHM/Lmxlbmd0aH1gKTtcbiAgfVxuICBjb25zdCBrZXljaGFpbnMgPSBhd2FpdCBQcm9taXNlLmFsbChhdXRoS2V5SWRzLm1hcCgoaWQpID0+IGNvaW4ua2V5Y2hhaW5zKCkuZ2V0KHsgaWQgfSkpKTtcbiAgY29uc3QgYXV0aEtleWNoYWlucyA9IGtleWNoYWlucy5tYXAoKGtleWNoYWluKSA9PiB7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKExpZ2h0bmluZ0F1dGhLZXljaGFpbi5uYW1lLCBMaWdodG5pbmdBdXRoS2V5Y2hhaW4sIGtleWNoYWluLCAoXykgPT4ge1xuICAgICAgLy8gRE9OJ1QgdGhyb3cgZXJyb3JzIGZyb20gZGVjb2RlT3JFbHNlLiBJdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBsaWdodG5pbmcgYXV0aCBrZXk6ICR7a2V5Y2hhaW4/LmlkfWApO1xuICAgIH0pO1xuICB9KTtcbiAgY29uc3QgW3VzZXJBdXRoS2V5LCBub2RlQXV0aEtleV0gPSAoWyd1c2VyQXV0aCcsICdub2RlQXV0aCddIGFzIGNvbnN0KS5tYXAoKHB1cnBvc2UpID0+IHtcbiAgICBjb25zdCBrZXljaGFpbiA9IGF1dGhLZXljaGFpbnMuZmluZChcbiAgICAgIChrKSA9PiB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWMoay5jb2luU3BlY2lmaWMsIGNvaW4uZ2V0Q2hhaW4oKSkucHVycG9zZSA9PT0gcHVycG9zZVxuICAgICk7XG4gICAgaWYgKCFrZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICR7cHVycG9zZX0ga2V5YCk7XG4gICAgfVxuICAgIHJldHVybiBrZXljaGFpbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgdXNlckF1dGhLZXksIG5vZGVBdXRoS2V5IH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbGlnaHRuaW5nIGludm9pY2VcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyBJbnZvaWNlIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtiaWdpbnR9IHBhcmFtcy52YWx1ZU1zYXQgVGhlIHZhbHVlIG9mIHRoZSBpbnZvaWNlIGluIG1pbGxpc2F0b3NoaXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMubWVtb10gQSBtZW1vIG9yIGRlc2NyaXB0aW9uIGZvciB0aGUgaW52b2ljZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5leHBpcnldIFRoZSBleHBpcnkgdGltZSBvZiB0aGUgaW52b2ljZSBpbiBzZWNvbmRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEludm9pY2U+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBpbnZvaWNlXG4gICAqL1xuICBjcmVhdGVJbnZvaWNlKHBhcmFtczogQ3JlYXRlSW52b2ljZUJvZHkpOiBQcm9taXNlPEludm9pY2U+O1xuICAvKipcbiAgICogR2V0IGludm9pY2UgZGV0YWlscyBieSBwYXltZW50IGhhc2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBheW1lbnRIYXNoIC0gUGF5bWVudCBoYXNoIHRvIGxvb2t1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnZvaWNlPn0gSW52b2ljZSBkZXRhaWxzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRQYXltZW50SGFzaH0gV2hlbiBwYXltZW50IGhhc2ggaXMgbm90IHZhbGlkXG4gICAqL1xuICBnZXRJbnZvaWNlKHBheW1lbnRIYXNoOiBzdHJpbmcpOiBQcm9taXNlPEludm9pY2U+O1xuICAvKipcbiAgICogTGlzdHMgY3VycmVudCBsaWdodG5pbmcgaW52b2ljZXNcbiAgICogQHBhcmFtIHtJbnZvaWNlUXVlcnl9IHBhcmFtcyBRdWVyeSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgaW52b2ljZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuc3RhdHVzXSBUaGUgc3RhdHVzIG9mIHRoZSBpbnZvaWNlIChvcGVuLCBzZXR0bGVkLCBjYW5jZWxlZClcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnZvaWNlcyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJldklkXSBDb250aW51ZSBpdGVyYXRpbmcgKHByb3ZpZGVkIGJ5IG5leHRCYXRjaFByZXZJZCBpbiB0aGUgcHJldmlvdXMgbGlzdClcbiAgICogQHJldHVybnMge1Byb21pc2U8TGlzdEludm9pY2VzUmVzcG9uc2U+fSBMaXN0IG9mIGludm9pY2VzIGFuZCBuZXh0QmF0Y2hQcmV2SWRcbiAgICovXG4gIGxpc3RJbnZvaWNlcyhwYXJhbXM6IEludm9pY2VRdWVyeSk6IFByb21pc2U8TGlzdEludm9pY2VzUmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBQYXkgYSBsaWdodG5pbmcgaW52b2ljZVxuICAgKiBAcGFyYW0ge1N1Ym1pdFBheW1lbnRQYXJhbXN9IHBhcmFtcyAtIFBheW1lbnQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmludm9pY2UgLSBUaGUgaW52b2ljZSB0byBwYXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5hbW91bnRNc2F0IC0gVGhlIGFtb3VudCB0byBwYXkgaW4gbWlsbGlzYXRvc2hpc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBhc3NwaHJhc2UgLSBUaGUgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuc2VxdWVuY2VJZF0gLSBPcHRpb25hbCBzZXF1ZW5jZSBJRCBmb3IgdGhlIHJlc3BlY3RpdmUgcGF5bWVudCB0cmFuc2ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5jb21tZW50XSAtIE9wdGlvbmFsIGNvbW1lbnQgZm9yIHRoZSByZXNwZWN0aXZlIHBheW1lbnQgdHJhbnNmZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8UGF5SW52b2ljZVJlc3BvbnNlPn0gUGF5bWVudCByZXN1bHQgY29udGFpbmluZyB0cmFuc2FjdGlvbiByZXF1ZXN0IGRldGFpbHMgYW5kIHBheW1lbnQgc3RhdHVzXG4gICAqL1xuICBwYXlJbnZvaWNlKHBhcmFtczogU3VibWl0UGF5bWVudFBhcmFtcyk6IFByb21pc2U8UGF5SW52b2ljZVJlc3BvbnNlPjtcblxuICAvKipcbiAgICogT24gY2hhaW4gd2l0aGRyYXdhbFxuICAgKiBAcGFyYW0ge0xpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtc30gcGFyYW1zIC0gV2l0aGRyYXcgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge0xpZ2h0bmluZ09uY2hhaW5SZWNpcGllbnRbXX0gcGFyYW1zLnJlY2lwaWVudHMgLSBUaGUgcmVjaXBpZW50cyB0byBwYXlcbiAgICogQHBhcmFtIHtiaWdpbnR9IHBhcmFtcy5zYXRzUGVyVmJ5dGUgLSBWYWx1ZSBmb3Igc2F0cyBwZXIgdmlydHVhbCBieXRlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1Jlc3BvbnNlPn0gV2l0aGRyYXcgcmVzdWx0IGNvbnRhaW5pbmcgdHJhbnNhY3Rpb24gcmVxdWVzdCBkZXRhaWxzIGFuZCBzdGF0dXNcbiAgICovXG4gIHdpdGhkcmF3T25jaGFpbihwYXJhbXM6IExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtcyk6IFByb21pc2U8TGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UmVzcG9uc2U+O1xuICAvKipcbiAgICogR2V0IHBheW1lbnQgZGV0YWlscyBieSBwYXltZW50IGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXltZW50SWQgLSBQYXltZW50IGlkIHRvIGxvb2t1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXltZW50SW5mbz59IFBheW1lbnQgZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkUGF5bWVudElkfSBXaGVuIHBheW1lbnQgaWQgaXMgbm90IHZhbGlkXG4gICAqL1xuICBnZXRQYXltZW50KHBheW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50SW5mbz47XG4gIC8qKlxuICAgKiBMaXN0IHBheW1lbnRzIGZvciBhIHdhbGxldCB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZ1xuICAgKiBAcGFyYW0ge1BheW1lbnRRdWVyeX0gcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBwYXltZW50c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zdGF0dXNdIFRoZSBzdGF0dXMgb2YgdGhlIHBheW1lbnRcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXltZW50cyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucGF5bWVudEhhc2hdIFRoZSBwYXltZW50IGhhc2ggb2YgdGhlIHBheW1lbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByZXZJZF0gQ29udGludWUgaXRlcmF0aW5nIChwcm92aWRlZCBieSBuZXh0QmF0Y2hQcmV2SWQgaW4gdGhlIHByZXZpb3VzIGxpc3QpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExpc3RQYXltZW50c1Jlc3BvbnNlPn0gTGlzdCBvZiBwYXltZW50cyBhbmQgbmV4dEJhdGNoUHJldklkXG4gICAqL1xuICBsaXN0UGF5bWVudHMocGFyYW1zOiBQYXltZW50UXVlcnkpOiBQcm9taXNlPExpc3RQYXltZW50c1Jlc3BvbnNlPjtcbiAgLyoqXG4gICAqIEdldCB0cmFuc2FjdGlvbiBkZXRhaWxzIGJ5IElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eElkIC0gVHJhbnNhY3Rpb24gSUQgdG8gbG9va3VwXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRyYW5zYWN0aW9uPn0gVHJhbnNhY3Rpb24gZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkVHhJZH0gV2hlbiB0cmFuc2FjdGlvbiBJRCBpcyBub3QgdmFsaWRcbiAgICovXG4gIGdldFRyYW5zYWN0aW9uKHR4SWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb24+O1xuXG4gIC8qKlxuICAgKiBMaXN0IHRyYW5zYWN0aW9ucyBmb3IgYSB3YWxsZXQgd2l0aCBvcHRpb25hbCBmaWx0ZXJpbmdcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblF1ZXJ5fSBwYXJhbXMgUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIHRyYW5zYWN0aW9uc1xuICAgKiBAcGFyYW0ge2JpZ2ludH0gW3BhcmFtcy5saW1pdF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHJldHVybnMge1Byb21pc2U8VHJhbnNhY3Rpb25bXT59IExpc3Qgb2YgdHJhbnNhY3Rpb25zXG4gICAqL1xuICBsaXN0VHJhbnNhY3Rpb25zKHBhcmFtczogVHJhbnNhY3Rpb25RdWVyeSk6IFByb21pc2U8VHJhbnNhY3Rpb25bXT47XG59XG5cbmV4cG9ydCBjbGFzcyBMaWdodG5pbmdXYWxsZXQgaW1wbGVtZW50cyBJTGlnaHRuaW5nV2FsbGV0IHtcbiAgcHVibGljIHdhbGxldDogc2RrY29yZS5JV2FsbGV0O1xuXG4gIGNvbnN0cnVjdG9yKHdhbGxldDogc2RrY29yZS5JV2FsbGV0KSB7XG4gICAgY29uc3QgY29pbiA9IHdhbGxldC5iYXNlQ29pbjtcbiAgICBpZiAoY29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvaW4gZm9yIGxpZ2h0bmluZyB3YWxsZXQ6ICR7Y29pbi5nZXRGYW1pbHkoKX1gKTtcbiAgICB9XG4gICAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVJbnZvaWNlKHBhcmFtczogQ3JlYXRlSW52b2ljZUJvZHkpOiBQcm9taXNlPEludm9pY2U+IHtcbiAgICBjb25zdCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2VgLCAyKSlcbiAgICAgIC5zZW5kKHQuZXhhY3QoQ3JlYXRlSW52b2ljZUJvZHkpLmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShJbnZvaWNlLm5hbWUsIEludm9pY2UsIGNyZWF0ZUludm9pY2VSZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICAvLyBET04nVCB0aHJvdyBlcnJvcnMgZnJvbSBkZWNvZGVPckVsc2UuIEl0IGNvdWxkIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNyZWF0ZSBpbnZvaWNlIHJlc3BvbnNlICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRJbnZvaWNlKHBheW1lbnRIYXNoOiBzdHJpbmcpOiBQcm9taXNlPEludm9pY2U+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9pbnZvaWNlLyR7cGF5bWVudEhhc2h9YCwgMikpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShJbnZvaWNlLm5hbWUsIEludm9pY2UsIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnZXQgaW52b2ljZSByZXNwb25zZSAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdEludm9pY2VzKHBhcmFtczogSW52b2ljZVF1ZXJ5KTogUHJvbWlzZTxMaXN0SW52b2ljZXNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJldHVybkNvZGVjID0gTGlzdEludm9pY2VzUmVzcG9uc2U7XG4gICAgY29uc3QgY3JlYXRlSW52b2ljZVJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2VgLCAyKSlcbiAgICAgIC5xdWVyeShJbnZvaWNlUXVlcnkuZW5jb2RlKHBhcmFtcykpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKHJldHVybkNvZGVjLm5hbWUsIHJldHVybkNvZGVjLCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpc3QgaW52b2ljZXMgcmVzcG9uc2UgJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHBheUludm9pY2UocGFyYW1zOiBTdWJtaXRQYXltZW50UGFyYW1zKTogUHJvbWlzZTxQYXlJbnZvaWNlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy53YWxsZXQuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG5cbiAgICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHRoaXMud2FsbGV0KTtcbiAgICBjb25zdCB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiA9IHVzZXJBdXRoS2V5LmVuY3J5cHRlZFBydjtcbiAgICBpZiAoIXVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXIgYXV0aCBrZXkgaXMgbWlzc2luZyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICAgIHQuZXhhY3QoTGlnaHRuaW5nUGF5bWVudFJlcXVlc3QpLmVuY29kZShwYXJhbXMpLFxuICAgICAgdGhpcy53YWxsZXQuYml0Z28uZGVjcnlwdCh7IHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSwgaW5wdXQ6IHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2IH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHBheW1lbnRJbnRlbnQ6IHsgaW50ZW50OiBMaWdodG5pbmdQYXltZW50SW50ZW50IH0gPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIHNpZ25lZFJlcXVlc3Q6IHtcbiAgICAgICAgICBpbnZvaWNlOiBwYXJhbXMuaW52b2ljZSxcbiAgICAgICAgICBhbW91bnRNc2F0OiBwYXJhbXMuYW1vdW50TXNhdCxcbiAgICAgICAgICBmZWVMaW1pdE1zYXQ6IHBhcmFtcy5mZWVMaW1pdE1zYXQsXG4gICAgICAgICAgZmVlTGltaXRSYXRpbzogcGFyYW1zLmZlZUxpbWl0UmF0aW8sXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZSA9IChhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKCcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzJywgMikpXG4gICAgICAuc2VuZCh0LnR5cGUoeyBpbnRlbnQ6IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQgfSkuZW5jb2RlKHBheW1lbnRJbnRlbnQpKVxuICAgICAgLnJlc3VsdCgpKSBhcyBUeFJlcXVlc3Q7XG5cbiAgICBpZiAodHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnN0YXRlID09PSAncGVuZGluZ0FwcHJvdmFsJykge1xuICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFscyA9IG5ldyBQZW5kaW5nQXBwcm92YWxzKHRoaXMud2FsbGV0LmJpdGdvLCB0aGlzLndhbGxldC5iYXNlQ29pbik7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSBhd2FpdCBwZW5kaW5nQXBwcm92YWxzLmdldCh7IGlkOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUucGVuZGluZ0FwcHJvdmFsSWQgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZW5kaW5nQXBwcm92YWw6IHBlbmRpbmdBcHByb3ZhbC50b0pTT04oKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCxcbiAgICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS5zdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmZXI6IHsgaWQ6IHN0cmluZyB9ID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wb3N0KFxuICAgICAgICB0aGlzLndhbGxldC5iaXRnby51cmwoXG4gICAgICAgICAgJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMvJyArIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCArICcvdHJhbnNmZXJzJyxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zZW5kKClcbiAgICAgIC5yZXN1bHQoKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQgPSBhd2FpdCBjb21tb25Uc3NNZXRob2RzLnNlbmRUeFJlcXVlc3QoXG4gICAgICB0aGlzLndhbGxldC5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQsXG4gICAgICBSZXF1ZXN0VHlwZS50eCxcbiAgICAgIHJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGNvaW5TcGVjaWZpYyA9IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQudHJhbnNhY3Rpb25zPy5bMF0/LnVuc2lnbmVkVHg/LmNvaW5TcGVjaWZpYztcbiAgICBsZXQgdXBkYXRlZFRyYW5zZmVyOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZWRUcmFuc2ZlciA9IGF3YWl0IHRoaXMud2FsbGV0LmdldFRyYW5zZmVyKHsgaWQ6IHRyYW5zZmVyLmlkIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIHRyYW5zZmVyIGlzIG5vdCBmb3VuZCB3aGljaCBpcyBwb3NzaWJsZSBpbiBjYXNlcyB3aGVyZSB0aGUgcGF5bWVudCBoYXMgZGVmaW5pdGVseSBmYWlsZWRcbiAgICAgIC8vIE9yIGV2ZW4gaWYgc29tZSB1bmtub3duIGVycm9yIG9jY3Vycywgd2Ugd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaGVyZVxuICAgICAgLy8gV2Ugc3RpbGwgd2FudCB0byByZXR1cm4gdGhlIHR4UmVxdWVzdElkLCB0eFJlcXVlc3RTdGF0ZSBhbmQgcGF5bWVudFN0YXR1cy5cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCxcbiAgICAgIHR4UmVxdWVzdFN0YXRlOiB0cmFuc2FjdGlvblJlcXVlc3RTZW5kLnN0YXRlLFxuICAgICAgcGF5bWVudFN0YXR1czogY29pblNwZWNpZmljXG4gICAgICAgID8gdC5leGFjdChMbmRDcmVhdGVQYXltZW50UmVzcG9uc2UpLmVuY29kZShjb2luU3BlY2lmaWMgYXMgTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHRyYW5zZmVyOiB1cGRhdGVkVHJhbnNmZXIsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHdpdGhkcmF3T25jaGFpbihwYXJhbXM6IExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtcyk6IFByb21pc2U8TGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy53YWxsZXQuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG5cbiAgICBjb25zdCBwYXltZW50SW50ZW50OiB7IGludGVudDogTGlnaHRuaW5nUGF5bWVudEludGVudCB9ID0ge1xuICAgICAgaW50ZW50OiB7XG4gICAgICAgIG9uY2hhaW5SZXF1ZXN0OiB7XG4gICAgICAgICAgcmVjaXBpZW50czogcGFyYW1zLnJlY2lwaWVudHMsXG4gICAgICAgICAgc2F0c1BlclZieXRlOiBwYXJhbXMuc2F0c1BlclZieXRlLFxuICAgICAgICB9LFxuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUgPSAoYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMud2FsbGV0LmJpdGdvLnVybCgnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHhyZXF1ZXN0cycsIDIpKVxuICAgICAgLnNlbmQodC50eXBlKHsgaW50ZW50OiBMaWdodG5pbmdQYXltZW50SW50ZW50IH0pLmVuY29kZShwYXltZW50SW50ZW50KSlcbiAgICAgIC5yZXN1bHQoKSkgYXMgVHhSZXF1ZXN0O1xuXG4gICAgaWYgKHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS5zdGF0ZSA9PT0gJ3BlbmRpbmdBcHByb3ZhbCcpIHtcbiAgICAgIGNvbnN0IHBlbmRpbmdBcHByb3ZhbHMgPSBuZXcgUGVuZGluZ0FwcHJvdmFscyh0aGlzLndhbGxldC5iaXRnbywgdGhpcy53YWxsZXQuYmFzZUNvaW4pO1xuICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFsID0gYXdhaXQgcGVuZGluZ0FwcHJvdmFscy5nZXQoeyBpZDogdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnBlbmRpbmdBcHByb3ZhbElkIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGVuZGluZ0FwcHJvdmFsOiBwZW5kaW5nQXBwcm92YWwudG9KU09OKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQsXG4gICAgICAgIHR4UmVxdWVzdFN0YXRlOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUuc3RhdGUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZmVyOiB7IGlkOiBzdHJpbmcgfSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAucG9zdChcbiAgICAgICAgdGhpcy53YWxsZXQuYml0Z28udXJsKFxuICAgICAgICAgICcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzLycgKyB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQgKyAnL3RyYW5zZmVycycsXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc2VuZCgpXG4gICAgICAucmVzdWx0KCk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvblJlcXVlc3RTZW5kID0gYXdhaXQgY29tbW9uVHNzTWV0aG9kcy5zZW5kVHhSZXF1ZXN0KFxuICAgICAgdGhpcy53YWxsZXQuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnR4UmVxdWVzdElkLFxuICAgICAgUmVxdWVzdFR5cGUudHgsXG4gICAgICByZXFJZFxuICAgICk7XG5cbiAgICBjb25zdCBjb2luU3BlY2lmaWMgPSB0cmFuc2FjdGlvblJlcXVlc3RTZW5kLnRyYW5zYWN0aW9ucz8uWzBdPy51bnNpZ25lZFR4Py5jb2luU3BlY2lmaWM7XG4gICAgbGV0IHVwZGF0ZWRUcmFuc2ZlcjogYW55ID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB1cGRhdGVkVHJhbnNmZXIgPSBhd2FpdCB0aGlzLndhbGxldC5nZXRUcmFuc2Zlcih7IGlkOiB0cmFuc2Zlci5pZCB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZiB0cmFuc2ZlciBpcyBub3QgZm91bmQgd2hpY2ggaXMgcG9zc2libGUgaW4gY2FzZXMgd2hlcmUgdGhlIHdpdGhkcmF3IGhhcyBkZWZpbml0ZWx5IGZhaWxlZFxuICAgICAgLy8gT3IgZXZlbiBpZiBzb21lIHVua25vd24gZXJyb3Igb2NjdXJzLCB3ZSB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBoZXJlXG4gICAgICAvLyBXZSBzdGlsbCB3YW50IHRvIHJldHVybiB0aGUgdHhSZXF1ZXN0SWQgYW5kIHR4UmVxdWVzdFN0YXRlLlxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnR4UmVxdWVzdElkLFxuICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQuc3RhdGUsXG4gICAgICB0cmFuc2ZlcjogdXBkYXRlZFRyYW5zZmVyLFxuICAgICAgd2l0aGRyYXdTdGF0dXM6XG4gICAgICAgIGNvaW5TcGVjaWZpYyAmJiAnc3RhdHVzJyBpbiBjb2luU3BlY2lmaWNcbiAgICAgICAgICA/IHQuZXhhY3QoTG5kQ3JlYXRlV2l0aGRyYXdSZXNwb25zZSkuZW5jb2RlKGNvaW5TcGVjaWZpYyBhcyBMbmRDcmVhdGVXaXRoZHJhd1Jlc3BvbnNlKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRQYXltZW50KHBheW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50SW5mbz4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3BheW1lbnQvJHtwYXltZW50SWR9YCwgMikpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShQYXltZW50SW5mby5uYW1lLCBQYXltZW50SW5mbywgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBheW1lbnQgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0UGF5bWVudHMocGFyYW1zOiBQYXltZW50UXVlcnkpOiBQcm9taXNlPExpc3RQYXltZW50c1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvcGF5bWVudGAsIDIpKVxuICAgICAgLnF1ZXJ5KFBheW1lbnRRdWVyeS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKExpc3RQYXltZW50c1Jlc3BvbnNlLm5hbWUsIExpc3RQYXltZW50c1Jlc3BvbnNlLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGF5bWVudCBsaXN0IHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0VHJhbnNhY3Rpb24odHhJZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3RyYW5zYWN0aW9uLyR7dHhJZH1gLCAyKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKFRyYW5zYWN0aW9uLm5hbWUsIFRyYW5zYWN0aW9uLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb24gcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0VHJhbnNhY3Rpb25zKHBhcmFtczogVHJhbnNhY3Rpb25RdWVyeSk6IFByb21pc2U8VHJhbnNhY3Rpb25bXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3RyYW5zYWN0aW9uYCwgMikpXG4gICAgICAucXVlcnkoVHJhbnNhY3Rpb25RdWVyeS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKHQuYXJyYXkoVHJhbnNhY3Rpb24pLm5hbWUsIHQuYXJyYXkoVHJhbnNhY3Rpb24pLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb24gbGlzdCByZXNwb25zZTogJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC9saWdodG5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0VBLG9EQWFDO0FBS0QsOERBOEJDO0FBL0hELHlEQUEyQztBQUMzQyw4Q0FTeUI7QUFDekIseUNBQTJCO0FBQzNCLDRDQUtzQjtBQUN0QixzQ0FrQm1CO0FBQ25CLHNEQUFzRjtBQXVDdEY7O0dBRUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBdUI7SUFDaEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsMEJBQWlCLENBQUMsSUFBSSxFQUFFLDBCQUFpQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3JGLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0QyxDQUFD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Q0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2RixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbFNELDBDQWtTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNka2NvcmUgZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIFBlbmRpbmdBcHByb3ZhbERhdGEsXG4gIFBlbmRpbmdBcHByb3ZhbHMsXG4gIFJlcXVlc3RUcmFjZXIsXG4gIFJlcXVlc3RUeXBlLFxuICBUeFJlcXVlc3QsXG4gIGNvbW1vblRzc01ldGhvZHMsXG4gIFR4UmVxdWVzdFN0YXRlLFxuICBkZWNvZGVPckVsc2UsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7XG4gIGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUsXG4gIGdldFV0eG9saWJOZXR3b3JrLFxuICB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWMsXG4gIHZhbGlkYXRlUHNidEZvcldpdGhkcmF3LFxufSBmcm9tICcuLi9saWdodG5pbmcnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlSW52b2ljZUJvZHksXG4gIEludm9pY2UsXG4gIEludm9pY2VRdWVyeSxcbiAgTGlnaHRuaW5nQXV0aEtleWNoYWluLFxuICBMaWdodG5pbmdLZXljaGFpbixcbiAgTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlLFxuICBTdWJtaXRQYXltZW50UGFyYW1zLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25RdWVyeSxcbiAgUGF5bWVudEluZm8sXG4gIFBheW1lbnRRdWVyeSxcbiAgTGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UGFyYW1zLFxuICBMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdSZXNwb25zZSxcbiAgTGlzdEludm9pY2VzUmVzcG9uc2UsXG4gIExpc3RQYXltZW50c1Jlc3BvbnNlLFxuICBMbmRDcmVhdGVXaXRoZHJhd1Jlc3BvbnNlLFxuICBXYXRjaE9ubHksXG59IGZyb20gJy4uL2NvZGVjcyc7XG5pbXBvcnQgeyBMaWdodG5pbmdQYXltZW50SW50ZW50LCBMaWdodG5pbmdQYXltZW50UmVxdWVzdCB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBQYXlJbnZvaWNlUmVzcG9uc2UgPSB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBheW1lbnQgcmVxdWVzdCBzdWJtaXR0ZWQgdG8gQml0R28uXG4gICAqL1xuICB0eFJlcXVlc3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGF0dXMgb2YgdGhlIHBheW1lbnQgcmVxdWVzdCBzdWJtaXNzaW9uIHRvIEJpdEdvLlxuICAgKiAtIGAnZGVsaXZlcmVkJ2A6IFN1Y2Nlc3NmdWxseSByZWNlaXZlZCBieSBCaXRHbywgYnV0IG1heSBvciBtYXkgbm90IGhhdmUgYmVlbiBzZW50IHRvIHRoZSBMaWdodG5pbmcgTmV0d29yayB5ZXQuXG4gICAqIC0gRm9yIHRoZSBhY3R1YWwgcGF5bWVudCBzdGF0dXMsIHJlZmVyIHRvIGBwYXltZW50U3RhdHVzYCBhbmQgdHJhY2sgYHRyYW5zZmVyYC5cbiAgICovXG4gIHR4UmVxdWVzdFN0YXRlOiBUeFJlcXVlc3RTdGF0ZTtcblxuICAvKipcbiAgICogUGVuZGluZyBhcHByb3ZhbCBkZXRhaWxzLCBpZiBhcHBsaWNhYmxlLlxuICAgKiAtIElmIHByZXNlbnQsIHRoZSBwYXltZW50IGhhcyBub3QgYmVlbiBpbml0aWF0ZWQgeWV0LlxuICAgKi9cbiAgcGVuZGluZ0FwcHJvdmFsPzogUGVuZGluZ0FwcHJvdmFsRGF0YTtcblxuICAvKipcbiAgICogQ3VycmVudCBzbmFwc2hvdCBvZiBwYXltZW50IHN0YXR1cyAoaWYgYXZhaWxhYmxlKS5cbiAgICogLSAqKmAnaW5fZmxpZ2h0J2AqKjogUGF5bWVudCBpcyBpbiBwcm9ncmVzcy5cbiAgICogLSAqKmAnc2V0dGxlZCdgKio6IFBheW1lbnQgd2FzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuXG4gICAqIC0gKipgJ2ZhaWxlZCdgKio6IFBheW1lbnQgZmFpbGVkLlxuICAgKiBUaGlzIGZpZWxkIGlzIGFic2VudCBpZiBhcHByb3ZhbCBpcyByZXF1aXJlZCBiZWZvcmUgcHJvY2Vzc2luZy5cbiAgICovXG4gIHBheW1lbnRTdGF0dXM/OiBMbmRDcmVhdGVQYXltZW50UmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIExhdGVzdCB0cmFuc2ZlciBkZXRhaWxzIGZvciB0aGlzIHBheW1lbnQgcmVxdWVzdCAoaWYgYXZhaWxhYmxlKS5cbiAgICogLSBQcm92aWRlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdHJhbnNmZXIuXG4gICAqIC0gVG8gdHJhY2sgdGhlIGZpbmFsIHBheW1lbnQgc3RhdHVzLCBtb25pdG9yIGB0cmFuc2ZlcmAgYXN5bmNocm9ub3VzbHkuXG4gICAqIFRoaXMgZmllbGQgaXMgYWJzZW50IGlmIGFwcHJvdmFsIGlzIHJlcXVpcmVkIGJlZm9yZSBwcm9jZXNzaW5nLlxuICAgKi9cbiAgdHJhbnNmZXI/OiBhbnk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgbGlnaHRuaW5nIGtleWNoYWluIGZvciB0aGUgZ2l2ZW4gd2FsbGV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGlnaHRuaW5nS2V5Y2hhaW4od2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpOiBQcm9taXNlPExpZ2h0bmluZ0tleWNoYWluPiB7XG4gIGNvbnN0IGNvaW4gPSB3YWxsZXQuYmFzZUNvaW47XG4gIGlmIChjb2luLmdldEZhbWlseSgpICE9PSAnbG5idGMnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvaW4gdG8gZ2V0IGxpZ2h0bmluZyB3YWxsZXQga2V5OiAke2NvaW4uZ2V0RmFtaWx5KCl9YCk7XG4gIH1cbiAgY29uc3Qga2V5SWRzID0gd2FsbGV0LmtleUlkcygpO1xuICBpZiAoa2V5SWRzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBudW1iZXIgb2Yga2V5IGluIGxpZ2h0bmluZyB3YWxsZXQ6ICR7a2V5SWRzLmxlbmd0aH1gKTtcbiAgfVxuICBjb25zdCBrZXljaGFpbiA9IGF3YWl0IGNvaW4ua2V5Y2hhaW5zKCkuZ2V0KHsgaWQ6IGtleUlkc1swXSB9KTtcbiAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKExpZ2h0bmluZ0tleWNoYWluLm5hbWUsIExpZ2h0bmluZ0tleWNoYWluLCBrZXljaGFpbiwgKF8pID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdXNlciBrZXlgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBsaWdodG5pbmcgYXV0aCBrZXljaGFpbnMgZm9yIHRoZSBnaXZlbiB3YWxsZXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHdhbGxldDogc2RrY29yZS5JV2FsbGV0KTogUHJvbWlzZTx7XG4gIHVzZXJBdXRoS2V5OiBMaWdodG5pbmdBdXRoS2V5Y2hhaW47XG4gIG5vZGVBdXRoS2V5OiBMaWdodG5pbmdBdXRoS2V5Y2hhaW47XG59PiB7XG4gIGNvbnN0IGNvaW4gPSB3YWxsZXQuYmFzZUNvaW47XG4gIGlmIChjb2luLmdldEZhbWlseSgpICE9PSAnbG5idGMnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvaW4gdG8gZ2V0IGxpZ2h0bmluZyB3YWxsZXQgYXV0aCBrZXlzOiAke2NvaW4uZ2V0RmFtaWx5KCl9YCk7XG4gIH1cbiAgY29uc3QgYXV0aEtleUlkcyA9IHdhbGxldC5jb2luU3BlY2lmaWMoKT8ua2V5cztcbiAgaWYgKGF1dGhLZXlJZHM/Lmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBudW1iZXIgb2YgYXV0aCBrZXlzIGluIGxpZ2h0bmluZyB3YWxsZXQ6ICR7YXV0aEtleUlkcz8ubGVuZ3RofWApO1xuICB9XG4gIGNvbnN0IGtleWNoYWlucyA9IGF3YWl0IFByb21pc2UuYWxsKGF1dGhLZXlJZHMubWFwKChpZCkgPT4gY29pbi5rZXljaGFpbnMoKS5nZXQoeyBpZCB9KSkpO1xuICBjb25zdCBhdXRoS2V5Y2hhaW5zID0ga2V5Y2hhaW5zLm1hcCgoa2V5Y2hhaW4pID0+IHtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoTGlnaHRuaW5nQXV0aEtleWNoYWluLm5hbWUsIExpZ2h0bmluZ0F1dGhLZXljaGFpbiwga2V5Y2hhaW4sIChfKSA9PiB7XG4gICAgICAvLyBET04nVCB0aHJvdyBlcnJvcnMgZnJvbSBkZWNvZGVPckVsc2UuIEl0IGNvdWxkIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpZ2h0bmluZyBhdXRoIGtleTogJHtrZXljaGFpbj8uaWR9YCk7XG4gICAgfSk7XG4gIH0pO1xuICBjb25zdCBbdXNlckF1dGhLZXksIG5vZGVBdXRoS2V5XSA9IChbJ3VzZXJBdXRoJywgJ25vZGVBdXRoJ10gYXMgY29uc3QpLm1hcCgocHVycG9zZSkgPT4ge1xuICAgIGNvbnN0IGtleWNoYWluID0gYXV0aEtleWNoYWlucy5maW5kKFxuICAgICAgKGspID0+IHVud3JhcExpZ2h0bmluZ0NvaW5TcGVjaWZpYyhrLmNvaW5TcGVjaWZpYywgY29pbi5nZXRDaGFpbigpKS5wdXJwb3NlID09PSBwdXJwb3NlXG4gICAgKTtcbiAgICBpZiAoIWtleWNoYWluKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgJHtwdXJwb3NlfSBrZXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleWNoYWluO1xuICB9KTtcblxuICByZXR1cm4geyB1c2VyQXV0aEtleSwgbm9kZUF1dGhLZXkgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGlnaHRuaW5nV2FsbGV0IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBsaWdodG5pbmcgaW52b2ljZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zIEludm9pY2UgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge2JpZ2ludH0gcGFyYW1zLnZhbHVlTXNhdCBUaGUgdmFsdWUgb2YgdGhlIGludm9pY2UgaW4gbWlsbGlzYXRvc2hpc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5tZW1vXSBBIG1lbW8gb3IgZGVzY3JpcHRpb24gZm9yIHRoZSBpbnZvaWNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyYW1zLmV4cGlyeV0gVGhlIGV4cGlyeSB0aW1lIG9mIHRoZSBpbnZvaWNlIGluIHNlY29uZHNcbiAgICogQHJldHVybnMge1Byb21pc2U8SW52b2ljZT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjcmVhdGVkIGludm9pY2VcbiAgICovXG4gIGNyZWF0ZUludm9pY2UocGFyYW1zOiBDcmVhdGVJbnZvaWNlQm9keSk6IFByb21pc2U8SW52b2ljZT47XG4gIC8qKlxuICAgKiBHZXQgaW52b2ljZSBkZXRhaWxzIGJ5IHBheW1lbnQgaGFzaFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF5bWVudEhhc2ggLSBQYXltZW50IGhhc2ggdG8gbG9va3VwXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEludm9pY2U+fSBJbnZvaWNlIGRldGFpbHNcbiAgICogQHRocm93cyB7SW52YWxpZFBheW1lbnRIYXNofSBXaGVuIHBheW1lbnQgaGFzaCBpcyBub3QgdmFsaWRcbiAgICovXG4gIGdldEludm9pY2UocGF5bWVudEhhc2g6IHN0cmluZyk6IFByb21pc2U8SW52b2ljZT47XG4gIC8qKlxuICAgKiBMaXN0cyBjdXJyZW50IGxpZ2h0bmluZyBpbnZvaWNlc1xuICAgKiBAcGFyYW0ge0ludm9pY2VRdWVyeX0gcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBpbnZvaWNlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zdGF0dXNdIFRoZSBzdGF0dXMgb2YgdGhlIGludm9pY2UgKG9wZW4sIHNldHRsZWQsIGNhbmNlbGVkKVxuICAgKiBAcGFyYW0ge2JpZ2ludH0gW3BhcmFtcy5saW1pdF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGludm9pY2VzIHRvIHJldHVyblxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuc3RhcnREYXRlXSBUaGUgc3RhcnQgZGF0ZSBmb3IgdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSB7RGF0ZX0gW3BhcmFtcy5lbmREYXRlXSBUaGUgZW5kIGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5wcmV2SWRdIENvbnRpbnVlIGl0ZXJhdGluZyAocHJvdmlkZWQgYnkgbmV4dEJhdGNoUHJldklkIGluIHRoZSBwcmV2aW91cyBsaXN0KVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMaXN0SW52b2ljZXNSZXNwb25zZT59IExpc3Qgb2YgaW52b2ljZXMgYW5kIG5leHRCYXRjaFByZXZJZFxuICAgKi9cbiAgbGlzdEludm9pY2VzKHBhcmFtczogSW52b2ljZVF1ZXJ5KTogUHJvbWlzZTxMaXN0SW52b2ljZXNSZXNwb25zZT47XG5cbiAgLyoqXG4gICAqIFBheSBhIGxpZ2h0bmluZyBpbnZvaWNlXG4gICAqIEBwYXJhbSB7U3VibWl0UGF5bWVudFBhcmFtc30gcGFyYW1zIC0gUGF5bWVudCBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuaW52b2ljZSAtIFRoZSBpbnZvaWNlIHRvIHBheVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmFtb3VudE1zYXQgLSBUaGUgYW1vdW50IHRvIHBheSBpbiBtaWxsaXNhdG9zaGlzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucGFzc3BocmFzZSAtIFRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zZXF1ZW5jZUlkXSAtIE9wdGlvbmFsIHNlcXVlbmNlIElEIGZvciB0aGUgcmVzcGVjdGl2ZSBwYXltZW50IHRyYW5zZmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLmNvbW1lbnRdIC0gT3B0aW9uYWwgY29tbWVudCBmb3IgdGhlIHJlc3BlY3RpdmUgcGF5bWVudCB0cmFuc2ZlclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXlJbnZvaWNlUmVzcG9uc2U+fSBQYXltZW50IHJlc3VsdCBjb250YWluaW5nIHRyYW5zYWN0aW9uIHJlcXVlc3QgZGV0YWlscyBhbmQgcGF5bWVudCBzdGF0dXNcbiAgICovXG4gIHBheUludm9pY2UocGFyYW1zOiBTdWJtaXRQYXltZW50UGFyYW1zKTogUHJvbWlzZTxQYXlJbnZvaWNlUmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBPbiBjaGFpbiB3aXRoZHJhd2FsXG4gICAqIEBwYXJhbSB7TGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UGFyYW1zfSBwYXJhbXMgLSBXaXRoZHJhdyBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7TGlnaHRuaW5nT25jaGFpblJlY2lwaWVudFtdfSBwYXJhbXMucmVjaXBpZW50cyAtIFRoZSByZWNpcGllbnRzIHRvIHBheVxuICAgKiBAcGFyYW0ge2JpZ2ludH0gcGFyYW1zLnNhdHNQZXJWYnl0ZSAtIFZhbHVlIGZvciBzYXRzIHBlciB2aXJ0dWFsIGJ5dGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wYXNzcGhyYXNlIC0gVGhlIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnNlcXVlbmNlSWRdIC0gT3B0aW9uYWwgc2VxdWVuY2UgSUQgZm9yIHRoZSByZXNwZWN0aXZlIHdpdGhkcmF3IHRyYW5zZmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLmNvbW1lbnRdIC0gT3B0aW9uYWwgY29tbWVudCBmb3IgdGhlIHJlc3BlY3RpdmUgd2l0aGRyYXcgdHJhbnNmZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8TGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UmVzcG9uc2U+fSBXaXRoZHJhdyByZXN1bHQgY29udGFpbmluZyB0cmFuc2FjdGlvbiByZXF1ZXN0IGRldGFpbHMgYW5kIHN0YXR1c1xuICAgKi9cbiAgd2l0aGRyYXdPbmNoYWluKHBhcmFtczogTGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UGFyYW1zKTogUHJvbWlzZTxMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdSZXNwb25zZT47XG4gIC8qKlxuICAgKiBHZXQgcGF5bWVudCBkZXRhaWxzIGJ5IHBheW1lbnQgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBheW1lbnRJZCAtIFBheW1lbnQgaWQgdG8gbG9va3VwXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBheW1lbnRJbmZvPn0gUGF5bWVudCBkZXRhaWxzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRQYXltZW50SWR9IFdoZW4gcGF5bWVudCBpZCBpcyBub3QgdmFsaWRcbiAgICovXG4gIGdldFBheW1lbnQocGF5bWVudElkOiBzdHJpbmcpOiBQcm9taXNlPFBheW1lbnRJbmZvPjtcbiAgLyoqXG4gICAqIExpc3QgcGF5bWVudHMgZm9yIGEgd2FsbGV0IHdpdGggb3B0aW9uYWwgZmlsdGVyaW5nXG4gICAqIEBwYXJhbSB7UGF5bWVudFF1ZXJ5fSBwYXJhbXMgUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIHBheW1lbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnN0YXR1c10gVGhlIHN0YXR1cyBvZiB0aGUgcGF5bWVudFxuICAgKiBAcGFyYW0ge2JpZ2ludH0gW3BhcmFtcy5saW1pdF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBheW1lbnRzIHRvIHJldHVyblxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuc3RhcnREYXRlXSBUaGUgc3RhcnQgZGF0ZSBmb3IgdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSB7RGF0ZX0gW3BhcmFtcy5lbmREYXRlXSBUaGUgZW5kIGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5wYXltZW50SGFzaF0gVGhlIHBheW1lbnQgaGFzaCBvZiB0aGUgcGF5bWVudHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJldklkXSBDb250aW51ZSBpdGVyYXRpbmcgKHByb3ZpZGVkIGJ5IG5leHRCYXRjaFByZXZJZCBpbiB0aGUgcHJldmlvdXMgbGlzdClcbiAgICogQHJldHVybnMge1Byb21pc2U8TGlzdFBheW1lbnRzUmVzcG9uc2U+fSBMaXN0IG9mIHBheW1lbnRzIGFuZCBuZXh0QmF0Y2hQcmV2SWRcbiAgICovXG4gIGxpc3RQYXltZW50cyhwYXJhbXM6IFBheW1lbnRRdWVyeSk6IFByb21pc2U8TGlzdFBheW1lbnRzUmVzcG9uc2U+O1xuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9uIGRldGFpbHMgYnkgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR4SWQgLSBUcmFuc2FjdGlvbiBJRCB0byBsb29rdXBcbiAgICogQHJldHVybnMge1Byb21pc2U8VHJhbnNhY3Rpb24+fSBUcmFuc2FjdGlvbiBkZXRhaWxzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRUeElkfSBXaGVuIHRyYW5zYWN0aW9uIElEIGlzIG5vdCB2YWxpZFxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb24odHhJZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbj47XG5cbiAgLyoqXG4gICAqIExpc3QgdHJhbnNhY3Rpb25zIGZvciBhIHdhbGxldCB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZ1xuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uUXVlcnl9IHBhcmFtcyBRdWVyeSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgdHJhbnNhY3Rpb25zXG4gICAqIEBwYXJhbSB7YmlnaW50fSBbcGFyYW1zLmxpbWl0XSBUaGUgbWF4aW11bSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHRvIHJldHVyblxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuc3RhcnREYXRlXSBUaGUgc3RhcnQgZGF0ZSBmb3IgdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSB7RGF0ZX0gW3BhcmFtcy5lbmREYXRlXSBUaGUgZW5kIGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUcmFuc2FjdGlvbltdPn0gTGlzdCBvZiB0cmFuc2FjdGlvbnNcbiAgICovXG4gIGxpc3RUcmFuc2FjdGlvbnMocGFyYW1zOiBUcmFuc2FjdGlvblF1ZXJ5KTogUHJvbWlzZTxUcmFuc2FjdGlvbltdPjtcbn1cblxuZXhwb3J0IGNsYXNzIExpZ2h0bmluZ1dhbGxldCBpbXBsZW1lbnRzIElMaWdodG5pbmdXYWxsZXQge1xuICBwdWJsaWMgd2FsbGV0OiBzZGtjb3JlLklXYWxsZXQ7XG5cbiAgY29uc3RydWN0b3Iod2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpIHtcbiAgICBjb25zdCBjb2luID0gd2FsbGV0LmJhc2VDb2luO1xuICAgIGlmIChjb2luLmdldEZhbWlseSgpICE9PSAnbG5idGMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29pbiBmb3IgbGlnaHRuaW5nIHdhbGxldDogJHtjb2luLmdldEZhbWlseSgpfWApO1xuICAgIH1cbiAgICB0aGlzLndhbGxldCA9IHdhbGxldDtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUludm9pY2UocGFyYW1zOiBDcmVhdGVJbnZvaWNlQm9keSk6IFByb21pc2U8SW52b2ljZT4ge1xuICAgIGNvbnN0IGNyZWF0ZUludm9pY2VSZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAucG9zdCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvaW52b2ljZWAsIDIpKVxuICAgICAgLnNlbmQodC5leGFjdChDcmVhdGVJbnZvaWNlQm9keSkuZW5jb2RlKHBhcmFtcykpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKEludm9pY2UubmFtZSwgSW52b2ljZSwgY3JlYXRlSW52b2ljZVJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIC8vIERPTidUIHRocm93IGVycm9ycyBmcm9tIGRlY29kZU9yRWxzZS4gSXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY3JlYXRlIGludm9pY2UgcmVzcG9uc2UgJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldEludm9pY2UocGF5bWVudEhhc2g6IHN0cmluZyk6IFByb21pc2U8SW52b2ljZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2UvJHtwYXltZW50SGFzaH1gLCAyKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKEludm9pY2UubmFtZSwgSW52b2ljZSwgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdldCBpbnZvaWNlIHJlc3BvbnNlICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0SW52b2ljZXMocGFyYW1zOiBJbnZvaWNlUXVlcnkpOiBQcm9taXNlPExpc3RJbnZvaWNlc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmV0dXJuQ29kZWMgPSBMaXN0SW52b2ljZXNSZXNwb25zZTtcbiAgICBjb25zdCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvaW52b2ljZWAsIDIpKVxuICAgICAgLnF1ZXJ5KEludm9pY2VRdWVyeS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UocmV0dXJuQ29kZWMubmFtZSwgcmV0dXJuQ29kZWMsIGNyZWF0ZUludm9pY2VSZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGlzdCBpbnZvaWNlcyByZXNwb25zZSAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcGF5SW52b2ljZShwYXJhbXM6IFN1Ym1pdFBheW1lbnRQYXJhbXMpOiBQcm9taXNlPFBheUludm9pY2VSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICB0aGlzLndhbGxldC5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcblxuICAgIGNvbnN0IHsgdXNlckF1dGhLZXkgfSA9IGF3YWl0IGdldExpZ2h0bmluZ0F1dGhLZXljaGFpbnModGhpcy53YWxsZXQpO1xuICAgIGNvbnN0IHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2ID0gdXNlckF1dGhLZXkuZW5jcnlwdGVkUHJ2O1xuICAgIGlmICghdXNlckF1dGhLZXlFbmNyeXB0ZWRQcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXNlciBhdXRoIGtleSBpcyBtaXNzaW5nIGVuY3J5cHRlZCBwcml2YXRlIGtleWApO1xuICAgIH1cbiAgICBjb25zdCBzaWduYXR1cmUgPSBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlKFxuICAgICAgdC5leGFjdChMaWdodG5pbmdQYXltZW50UmVxdWVzdCkuZW5jb2RlKHBhcmFtcyksXG4gICAgICB0aGlzLndhbGxldC5iaXRnby5kZWNyeXB0KHsgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLCBpbnB1dDogdXNlckF1dGhLZXlFbmNyeXB0ZWRQcnYgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcGF5bWVudEludGVudDogeyBpbnRlbnQ6IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQgfSA9IHtcbiAgICAgIGludGVudDoge1xuICAgICAgICBjb21tZW50OiBwYXJhbXMuY29tbWVudCxcbiAgICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgc2lnbmVkUmVxdWVzdDoge1xuICAgICAgICAgIGludm9pY2U6IHBhcmFtcy5pbnZvaWNlLFxuICAgICAgICAgIGFtb3VudE1zYXQ6IHBhcmFtcy5hbW91bnRNc2F0LFxuICAgICAgICAgIGZlZUxpbWl0TXNhdDogcGFyYW1zLmZlZUxpbWl0TXNhdCxcbiAgICAgICAgICBmZWVMaW1pdFJhdGlvOiBwYXJhbXMuZmVlTGltaXRSYXRpbyxcbiAgICAgICAgfSxcbiAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlID0gKGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAucG9zdCh0aGlzLndhbGxldC5iaXRnby51cmwoJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMnLCAyKSlcbiAgICAgIC5zZW5kKHQudHlwZSh7IGludGVudDogTGlnaHRuaW5nUGF5bWVudEludGVudCB9KS5lbmNvZGUocGF5bWVudEludGVudCkpXG4gICAgICAucmVzdWx0KCkpIGFzIFR4UmVxdWVzdDtcblxuICAgIGlmICh0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUuc3RhdGUgPT09ICdwZW5kaW5nQXBwcm92YWwnKSB7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWxzID0gbmV3IFBlbmRpbmdBcHByb3ZhbHModGhpcy53YWxsZXQuYml0Z28sIHRoaXMud2FsbGV0LmJhc2VDb2luKTtcbiAgICAgIGNvbnN0IHBlbmRpbmdBcHByb3ZhbCA9IGF3YWl0IHBlbmRpbmdBcHByb3ZhbHMuZ2V0KHsgaWQ6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS5wZW5kaW5nQXBwcm92YWxJZCB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBlbmRpbmdBcHByb3ZhbDogcGVuZGluZ0FwcHJvdmFsLnRvSlNPTigpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnR4UmVxdWVzdElkLFxuICAgICAgICB0eFJlcXVlc3RTdGF0ZTogdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnN0YXRlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2ZlcjogeyBpZDogc3RyaW5nIH0gPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QoXG4gICAgICAgIHRoaXMud2FsbGV0LmJpdGdvLnVybChcbiAgICAgICAgICAnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHhyZXF1ZXN0cy8nICsgdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnR4UmVxdWVzdElkICsgJy90cmFuc2ZlcnMnLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnNlbmQoKVxuICAgICAgLnJlc3VsdCgpO1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0U2VuZCA9IGF3YWl0IGNvbW1vblRzc01ldGhvZHMuc2VuZFR4UmVxdWVzdChcbiAgICAgIHRoaXMud2FsbGV0LmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCxcbiAgICAgIFJlcXVlc3RUeXBlLnR4LFxuICAgICAgcmVxSWRcbiAgICApO1xuXG4gICAgY29uc3QgY29pblNwZWNpZmljID0gdHJhbnNhY3Rpb25SZXF1ZXN0U2VuZC50cmFuc2FjdGlvbnM/LlswXT8udW5zaWduZWRUeD8uY29pblNwZWNpZmljO1xuICAgIGxldCB1cGRhdGVkVHJhbnNmZXI6IGFueSA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdXBkYXRlZFRyYW5zZmVyID0gYXdhaXQgdGhpcy53YWxsZXQuZ2V0VHJhbnNmZXIoeyBpZDogdHJhbnNmZXIuaWQgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWYgdHJhbnNmZXIgaXMgbm90IGZvdW5kIHdoaWNoIGlzIHBvc3NpYmxlIGluIGNhc2VzIHdoZXJlIHRoZSBwYXltZW50IGhhcyBkZWZpbml0ZWx5IGZhaWxlZFxuICAgICAgLy8gT3IgZXZlbiBpZiBzb21lIHVua25vd24gZXJyb3Igb2NjdXJzLCB3ZSB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBoZXJlXG4gICAgICAvLyBXZSBzdGlsbCB3YW50IHRvIHJldHVybiB0aGUgdHhSZXF1ZXN0SWQsIHR4UmVxdWVzdFN0YXRlIGFuZCBwYXltZW50U3RhdHVzLlxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnR4UmVxdWVzdElkLFxuICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQuc3RhdGUsXG4gICAgICBwYXltZW50U3RhdHVzOiBjb2luU3BlY2lmaWNcbiAgICAgICAgPyB0LmV4YWN0KExuZENyZWF0ZVBheW1lbnRSZXNwb25zZSkuZW5jb2RlKGNvaW5TcGVjaWZpYyBhcyBMbmRDcmVhdGVQYXltZW50UmVzcG9uc2UpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgdHJhbnNmZXI6IHVwZGF0ZWRUcmFuc2ZlcixcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgd2l0aGRyYXdPbmNoYWluKHBhcmFtczogTGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UGFyYW1zKTogUHJvbWlzZTxMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICB0aGlzLndhbGxldC5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcblxuICAgIGNvbnN0IHBheW1lbnRJbnRlbnQ6IHsgaW50ZW50OiBMaWdodG5pbmdQYXltZW50SW50ZW50IH0gPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgICBvbmNoYWluUmVxdWVzdDoge1xuICAgICAgICAgIHJlY2lwaWVudHM6IHBhcmFtcy5yZWNpcGllbnRzLFxuICAgICAgICAgIHNhdHNQZXJWYnl0ZTogcGFyYW1zLnNhdHNQZXJWYnl0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlID0gKGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAucG9zdCh0aGlzLndhbGxldC5iaXRnby51cmwoJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMnLCAyKSlcbiAgICAgIC5zZW5kKHQudHlwZSh7IGludGVudDogTGlnaHRuaW5nUGF5bWVudEludGVudCB9KS5lbmNvZGUocGF5bWVudEludGVudCkpXG4gICAgICAucmVzdWx0KCkpIGFzIFR4UmVxdWVzdDtcblxuICAgIGlmIChcbiAgICAgICF0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zIHx8XG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIXRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXhcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc2VyaWFsaXplZCB0eEhleCBpcyBtaXNzaW5nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHRoaXMud2FsbGV0LnRvSlNPTigpO1xuICAgIGlmICghd2FsbGV0RGF0YS5jb2luU3BlY2lmaWMud2F0Y2hPbmx5QWNjb3VudHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgd2FsbGV0IGlzIG1pc3Npbmcgd2F0Y2ggb25seSBhY2NvdW50c2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHdhdGNoT25seUFjY291bnREZXRhaWxzID0gZGVjb2RlT3JFbHNlKFxuICAgICAgV2F0Y2hPbmx5Lm5hbWUsXG4gICAgICBXYXRjaE9ubHksXG4gICAgICB3YWxsZXREYXRhLmNvaW5TcGVjaWZpYy53YXRjaE9ubHlBY2NvdW50cyxcbiAgICAgIChlcnJvcnMpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHdhdGNoIG9ubHkgYWNjb3VudHMsIGVycm9yOiAke2Vycm9yc31gKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBnZXRVdHhvbGliTmV0d29yayh0aGlzLndhbGxldC5jb2luKCkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlUHNidEZvcldpdGhkcmF3KFxuICAgICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICBuZXR3b3JrLFxuICAgICAgICBwYXJhbXMucmVjaXBpZW50cyxcbiAgICAgICAgd2F0Y2hPbmx5QWNjb3VudERldGFpbHMuYWNjb3VudHNcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXJyb3IgdmFsaWRhdGluZyB3aXRoZHJhdyBwc2J0OiAke2Vycn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHRoaXMud2FsbGV0KTtcbiAgICBjb25zdCB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiA9IHVzZXJBdXRoS2V5LmVuY3J5cHRlZFBydjtcbiAgICBpZiAoIXVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXIgYXV0aCBrZXkgaXMgbWlzc2luZyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICAgIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXgsXG4gICAgICB0aGlzLndhbGxldC5iaXRnby5kZWNyeXB0KHsgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLCBpbnB1dDogdXNlckF1dGhLZXlFbmNyeXB0ZWRQcnYgfSlcbiAgICApO1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZSA9IChhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnB1dChcbiAgICAgICAgdGhpcy53YWxsZXQuYml0Z28udXJsKFxuICAgICAgICAgICcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzLycgKyB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQgKyAnL2NvaW5TcGVjaWZpYycsXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc2VuZCh7XG4gICAgICAgIHVuc2lnbmVkQ29pblNwZWNpZmljOiB7XG4gICAgICAgICAgY29pbjogdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgICAgICBkYXRhOiB7IHNpZ25hdHVyZSB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKSkgYXMgVHhSZXF1ZXN0O1xuXG4gICAgaWYgKHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUuc3RhdGUgPT09ICdwZW5kaW5nQXBwcm92YWwnKSB7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWxzID0gbmV3IFBlbmRpbmdBcHByb3ZhbHModGhpcy53YWxsZXQuYml0Z28sIHRoaXMud2FsbGV0LmJhc2VDb2luKTtcbiAgICAgIGNvbnN0IHBlbmRpbmdBcHByb3ZhbCA9IGF3YWl0IHBlbmRpbmdBcHByb3ZhbHMuZ2V0KHsgaWQ6IHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUucGVuZGluZ0FwcHJvdmFsSWQgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZW5kaW5nQXBwcm92YWw6IHBlbmRpbmdBcHByb3ZhbC50b0pTT04oKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUudHhSZXF1ZXN0SWQsXG4gICAgICAgIHR4UmVxdWVzdFN0YXRlOiB0cmFuc2FjdGlvblJlcXVlc3RXaXRoU2lnbmF0dXJlLnN0YXRlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2ZlcjogeyBpZDogc3RyaW5nIH0gPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QoXG4gICAgICAgIHRoaXMud2FsbGV0LmJpdGdvLnVybChcbiAgICAgICAgICAnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHhyZXF1ZXN0cy8nICsgdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZS50eFJlcXVlc3RJZCArICcvdHJhbnNmZXJzJyxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zZW5kKClcbiAgICAgIC5yZXN1bHQoKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQgPSBhd2FpdCBjb21tb25Uc3NNZXRob2RzLnNlbmRUeFJlcXVlc3QoXG4gICAgICB0aGlzLndhbGxldC5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RXaXRoU2lnbmF0dXJlLnR4UmVxdWVzdElkLFxuICAgICAgUmVxdWVzdFR5cGUudHgsXG4gICAgICByZXFJZFxuICAgICk7XG5cbiAgICBjb25zdCBjb2luU3BlY2lmaWMgPSB0cmFuc2FjdGlvblJlcXVlc3RTZW5kLnRyYW5zYWN0aW9ucz8uWzBdPy51bnNpZ25lZFR4Py5jb2luU3BlY2lmaWM7XG4gICAgbGV0IHVwZGF0ZWRUcmFuc2ZlcjogYW55ID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB1cGRhdGVkVHJhbnNmZXIgPSBhd2FpdCB0aGlzLndhbGxldC5nZXRUcmFuc2Zlcih7IGlkOiB0cmFuc2Zlci5pZCB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZiB0cmFuc2ZlciBpcyBub3QgZm91bmQgd2hpY2ggaXMgcG9zc2libGUgaW4gY2FzZXMgd2hlcmUgdGhlIHdpdGhkcmF3IGhhcyBkZWZpbml0ZWx5IGZhaWxlZFxuICAgICAgLy8gT3IgZXZlbiBpZiBzb21lIHVua25vd24gZXJyb3Igb2NjdXJzLCB3ZSB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBoZXJlXG4gICAgICAvLyBXZSBzdGlsbCB3YW50IHRvIHJldHVybiB0aGUgdHhSZXF1ZXN0SWQgYW5kIHR4UmVxdWVzdFN0YXRlLlxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZS50eFJlcXVlc3RJZCxcbiAgICAgIHR4UmVxdWVzdFN0YXRlOiB0cmFuc2FjdGlvblJlcXVlc3RTZW5kLnN0YXRlLFxuICAgICAgdHJhbnNmZXI6IHVwZGF0ZWRUcmFuc2ZlcixcbiAgICAgIHdpdGhkcmF3U3RhdHVzOlxuICAgICAgICBjb2luU3BlY2lmaWMgJiYgJ3N0YXR1cycgaW4gY29pblNwZWNpZmljXG4gICAgICAgICAgPyB0LmV4YWN0KExuZENyZWF0ZVdpdGhkcmF3UmVzcG9uc2UpLmVuY29kZShjb2luU3BlY2lmaWMgYXMgTG5kQ3JlYXRlV2l0aGRyYXdSZXNwb25zZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0UGF5bWVudChwYXltZW50SWQ6IHN0cmluZyk6IFByb21pc2U8UGF5bWVudEluZm8+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9wYXltZW50LyR7cGF5bWVudElkfWAsIDIpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UoUGF5bWVudEluZm8ubmFtZSwgUGF5bWVudEluZm8sIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXltZW50IHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdFBheW1lbnRzKHBhcmFtczogUGF5bWVudFF1ZXJ5KTogUHJvbWlzZTxMaXN0UGF5bWVudHNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3BheW1lbnRgLCAyKSlcbiAgICAgIC5xdWVyeShQYXltZW50UXVlcnkuZW5jb2RlKHBhcmFtcykpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShMaXN0UGF5bWVudHNSZXNwb25zZS5uYW1lLCBMaXN0UGF5bWVudHNSZXNwb25zZSwgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBheW1lbnQgbGlzdCByZXNwb25zZTogJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRyYW5zYWN0aW9uKHR4SWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy90cmFuc2FjdGlvbi8ke3R4SWR9YCwgMikpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShUcmFuc2FjdGlvbi5uYW1lLCBUcmFuc2FjdGlvbiwgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRyYW5zYWN0aW9uIHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRyYW5zYWN0aW9ucyhwYXJhbXM6IFRyYW5zYWN0aW9uUXVlcnkpOiBQcm9taXNlPFRyYW5zYWN0aW9uW10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy90cmFuc2FjdGlvbmAsIDIpKVxuICAgICAgLnF1ZXJ5KFRyYW5zYWN0aW9uUXVlcnkuZW5jb2RlKHBhcmFtcykpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZSh0LmFycmF5KFRyYW5zYWN0aW9uKS5uYW1lLCB0LmFycmF5KFRyYW5zYWN0aW9uKSwgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRyYW5zYWN0aW9uIGxpc3QgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo/abstract-lightning",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.1.0",
|
|
4
4
|
"description": "BitGo SDK coin library for base Lightning Network coin implementation",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -39,15 +39,16 @@
|
|
|
39
39
|
]
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@bitgo/public-types": "5.
|
|
43
|
-
"@bitgo/sdk-core": "^36.
|
|
44
|
-
"@bitgo/statics": "^
|
|
45
|
-
"@bitgo/utxo-lib": "^11.
|
|
42
|
+
"@bitgo/public-types": "5.22.0",
|
|
43
|
+
"@bitgo/sdk-core": "^36.9.0",
|
|
44
|
+
"@bitgo/statics": "^58.0.0",
|
|
45
|
+
"@bitgo/utxo-lib": "^11.11.0",
|
|
46
|
+
"bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4",
|
|
46
47
|
"bs58check": "^2.1.2",
|
|
47
48
|
"fp-ts": "^2.12.2",
|
|
48
49
|
"io-ts": "npm:@bitgo-forks/io-ts@2.1.4",
|
|
49
50
|
"io-ts-types": "^0.5.16",
|
|
50
51
|
"macaroon": "^3.0.4"
|
|
51
52
|
},
|
|
52
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "898a411878b6b33b717d7130ac5456dc9a73e2a7"
|
|
53
54
|
}
|