@bitgo-beta/abstract-lightning 1.0.0-alpha.360 → 1.0.0-alpha.361
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.
|
@@ -131,7 +131,7 @@ class LightningWallet {
|
|
|
131
131
|
if (!userAuthKeyEncryptedPrv) {
|
|
132
132
|
throw new Error(`user auth key is missing encrypted private key`);
|
|
133
133
|
}
|
|
134
|
-
const signature = (0, lightning_1.createMessageSignature)(t.exact(public_types_1.LightningPaymentRequest).encode(params), this.wallet.bitgo.
|
|
134
|
+
const signature = (0, lightning_1.createMessageSignature)(t.exact(public_types_1.LightningPaymentRequest).encode(params), await this.wallet.bitgo.decryptAsync({ password: params.passphrase, input: userAuthKeyEncryptedPrv }));
|
|
135
135
|
const paymentIntent = {
|
|
136
136
|
intent: {
|
|
137
137
|
comment: params.comment,
|
|
@@ -216,7 +216,7 @@ class LightningWallet {
|
|
|
216
216
|
if (!userAuthKeyEncryptedPrv) {
|
|
217
217
|
throw new Error(`user auth key is missing encrypted private key`);
|
|
218
218
|
}
|
|
219
|
-
const signature = (0, lightning_1.createMessageSignature)(transactionRequestCreate.transactions[0].unsignedTx.serializedTxHex, this.wallet.bitgo.
|
|
219
|
+
const signature = (0, lightning_1.createMessageSignature)(transactionRequestCreate.transactions[0].unsignedTx.serializedTxHex, await this.wallet.bitgo.decryptAsync({ password: params.passphrase, input: userAuthKeyEncryptedPrv }));
|
|
220
220
|
const transactionRequestWithSignature = (await this.wallet.bitgo
|
|
221
221
|
.put(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests/' + transactionRequestCreate.txRequestId + '/coinSpecific', 2))
|
|
222
222
|
.send({
|
|
@@ -285,4 +285,4 @@ class LightningWallet {
|
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
exports.LightningWallet = LightningWallet;
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC9saWdodG5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0VBLG9EQWFDO0FBS0QsOERBOEJDO0FBeEhELDhEQUFnRDtBQUNoRCxtREFTOEI7QUFDOUIseUNBQTJCO0FBQzNCLDRDQUtzQjtBQUN0QixzQ0FtQm1CO0FBQ25CLHNEQUFzRjtBQStCdEY7O0dBRUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBdUI7SUFDaEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsMEJBQWlCLENBQUMsSUFBSSxFQUFFLDBCQUFpQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3JGLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0QyxDQUFD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QztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBd0I7UUFDN0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2xGLEtBQUssQ0FBQyx5QkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDdEMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLElBQUEsdUJBQVksRUFBQyxpQ0FBd0IsQ0FBQyxJQUFJLEVBQUUsaUNBQXdCLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDL0YsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpSRCwwQ0FpUkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZGtjb3JlIGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIFBlbmRpbmdBcHByb3ZhbERhdGEsXG4gIFBlbmRpbmdBcHByb3ZhbHMsXG4gIFJlcXVlc3RUcmFjZXIsXG4gIFJlcXVlc3RUeXBlLFxuICBUeFJlcXVlc3QsXG4gIGNvbW1vblRzc01ldGhvZHMsXG4gIFR4UmVxdWVzdFN0YXRlLFxuICBkZWNvZGVPckVsc2UsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlTWVzc2FnZVNpZ25hdHVyZSxcbiAgZ2V0VXR4b2xpYk5ldHdvcmssXG4gIHVud3JhcExpZ2h0bmluZ0NvaW5TcGVjaWZpYyxcbiAgdmFsaWRhdGVQc2J0Rm9yV2l0aGRyYXcsXG59IGZyb20gJy4uL2xpZ2h0bmluZyc7XG5pbXBvcnQge1xuICBDcmVhdGVJbnZvaWNlQm9keSxcbiAgSW52b2ljZSxcbiAgSW52b2ljZVF1ZXJ5LFxuICBMaWdodG5pbmdBdXRoS2V5Y2hhaW4sXG4gIExpZ2h0bmluZ0tleWNoYWluLFxuICBMbmRDcmVhdGVQYXltZW50UmVzcG9uc2UsXG4gIFN1Ym1pdFBheW1lbnRQYXJhbXMsXG4gIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblF1ZXJ5LFxuICBMaXN0VHJhbnNhY3Rpb25zUmVzcG9uc2UsXG4gIFBheW1lbnRJbmZvLFxuICBQYXltZW50UXVlcnksXG4gIExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtcyxcbiAgTGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UmVzcG9uc2UsXG4gIExpc3RJbnZvaWNlc1Jlc3BvbnNlLFxuICBMaXN0UGF5bWVudHNSZXNwb25zZSxcbiAgTG5kQ3JlYXRlV2l0aGRyYXdSZXNwb25zZSxcbiAgV2F0Y2hPbmx5LFxufSBmcm9tICcuLi9jb2RlY3MnO1xuaW1wb3J0IHsgTGlnaHRuaW5nUGF5bWVudEludGVudCwgTGlnaHRuaW5nUGF5bWVudFJlcXVlc3QgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcblxuZXhwb3J0IHR5cGUgUGF5SW52b2ljZVJlc3BvbnNlID0ge1xuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwYXltZW50IHJlcXVlc3Qgc3VibWl0dGVkIHRvIEJpdEdvLlxuICAgKi9cbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3RhdHVzIG9mIHRoZSBwYXltZW50IHJlcXVlc3Qgc3VibWlzc2lvbiB0byBCaXRHby5cbiAgICogLSBgJ2RlbGl2ZXJlZCdgOiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYnkgQml0R28sIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gc2VudCB0byB0aGUgTGlnaHRuaW5nIE5ldHdvcmsgeWV0LlxuICAgKiAtIEZvciB0aGUgYWN0dWFsIHBheW1lbnQgc3RhdHVzLCByZWZlciB0byBgcGF5bWVudFN0YXR1c2AgYW5kIHRyYWNrIGB0cmFuc2ZlcmAuXG4gICAqL1xuICB0eFJlcXVlc3RTdGF0ZTogVHhSZXF1ZXN0U3RhdGU7XG5cbiAgLyoqXG4gICAqIFBlbmRpbmcgYXBwcm92YWwgZGV0YWlscywgaWYgYXBwbGljYWJsZS5cbiAgICogLSBJZiBwcmVzZW50LCB0aGUgcGF5bWVudCBoYXMgbm90IGJlZW4gaW5pdGlhdGVkIHlldC5cbiAgICovXG4gIHBlbmRpbmdBcHByb3ZhbD86IFBlbmRpbmdBcHByb3ZhbERhdGE7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc25hcHNob3Qgb2YgcGF5bWVudCBzdGF0dXMgKGlmIGF2YWlsYWJsZSkuXG4gICAqIC0gKipgJ2luX2ZsaWdodCdgKio6IFBheW1lbnQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAqIC0gKipgJ3NldHRsZWQnYCoqOiBQYXltZW50IHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLlxuICAgKiAtICoqYCdmYWlsZWQnYCoqOiBQYXltZW50IGZhaWxlZC5cbiAgICogVGhpcyBmaWVsZCBpcyBhYnNlbnQgaWYgYXBwcm92YWwgaXMgcmVxdWlyZWQgYmVmb3JlIHByb2Nlc3NpbmcuXG4gICAqL1xuICBwYXltZW50U3RhdHVzPzogTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxpZ2h0bmluZyBrZXljaGFpbiBmb3IgdGhlIGdpdmVuIHdhbGxldC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExpZ2h0bmluZ0tleWNoYWluKHdhbGxldDogc2RrY29yZS5JV2FsbGV0KTogUHJvbWlzZTxMaWdodG5pbmdLZXljaGFpbj4ge1xuICBjb25zdCBjb2luID0gd2FsbGV0LmJhc2VDb2luO1xuICBpZiAoY29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIHRvIGdldCBsaWdodG5pbmcgd2FsbGV0IGtleTogJHtjb2luLmdldEZhbWlseSgpfWApO1xuICB9XG4gIGNvbnN0IGtleUlkcyA9IHdhbGxldC5rZXlJZHMoKTtcbiAgaWYgKGtleUlkcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbnVtYmVyIG9mIGtleSBpbiBsaWdodG5pbmcgd2FsbGV0OiAke2tleUlkcy5sZW5ndGh9YCk7XG4gIH1cbiAgY29uc3Qga2V5Y2hhaW4gPSBhd2FpdCBjb2luLmtleWNoYWlucygpLmdldCh7IGlkOiBrZXlJZHNbMF0gfSk7XG4gIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShMaWdodG5pbmdLZXljaGFpbi5uYW1lLCBMaWdodG5pbmdLZXljaGFpbiwga2V5Y2hhaW4sIChfKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVzZXIga2V5YCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbGlnaHRuaW5nIGF1dGgga2V5Y2hhaW5zIGZvciB0aGUgZ2l2ZW4gd2FsbGV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucyh3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCk6IFByb21pc2U8e1xuICB1c2VyQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluO1xuICBub2RlQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluO1xufT4ge1xuICBjb25zdCBjb2luID0gd2FsbGV0LmJhc2VDb2luO1xuICBpZiAoY29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIHRvIGdldCBsaWdodG5pbmcgd2FsbGV0IGF1dGgga2V5czogJHtjb2luLmdldEZhbWlseSgpfWApO1xuICB9XG4gIGNvbnN0IGF1dGhLZXlJZHMgPSB3YWxsZXQuY29pblNwZWNpZmljKCk/LmtleXM7XG4gIGlmIChhdXRoS2V5SWRzPy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbnVtYmVyIG9mIGF1dGgga2V5cyBpbiBsaWdodG5pbmcgd2FsbGV0OiAke2F1dGhLZXlJZHM/Lmxlbmd0aH1gKTtcbiAgfVxuICBjb25zdCBrZXljaGFpbnMgPSBhd2FpdCBQcm9taXNlLmFsbChhdXRoS2V5SWRzLm1hcCgoaWQpID0+IGNvaW4ua2V5Y2hhaW5zKCkuZ2V0KHsgaWQgfSkpKTtcbiAgY29uc3QgYXV0aEtleWNoYWlucyA9IGtleWNoYWlucy5tYXAoKGtleWNoYWluKSA9PiB7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKExpZ2h0bmluZ0F1dGhLZXljaGFpbi5uYW1lLCBMaWdodG5pbmdBdXRoS2V5Y2hhaW4sIGtleWNoYWluLCAoXykgPT4ge1xuICAgICAgLy8gRE9OJ1QgdGhyb3cgZXJyb3JzIGZyb20gZGVjb2RlT3JFbHNlLiBJdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBsaWdodG5pbmcgYXV0aCBrZXk6ICR7a2V5Y2hhaW4/LmlkfWApO1xuICAgIH0pO1xuICB9KTtcbiAgY29uc3QgW3VzZXJBdXRoS2V5LCBub2RlQXV0aEtleV0gPSAoWyd1c2VyQXV0aCcsICdub2RlQXV0aCddIGFzIGNvbnN0KS5tYXAoKHB1cnBvc2UpID0+IHtcbiAgICBjb25zdCBrZXljaGFpbiA9IGF1dGhLZXljaGFpbnMuZmluZChcbiAgICAgIChrKSA9PiB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWMoay5jb2luU3BlY2lmaWMsIGNvaW4uZ2V0Q2hhaW4oKSkucHVycG9zZSA9PT0gcHVycG9zZVxuICAgICk7XG4gICAgaWYgKCFrZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICR7cHVycG9zZX0ga2V5YCk7XG4gICAgfVxuICAgIHJldHVybiBrZXljaGFpbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgdXNlckF1dGhLZXksIG5vZGVBdXRoS2V5IH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbGlnaHRuaW5nIGludm9pY2VcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyBJbnZvaWNlIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtiaWdpbnR9IHBhcmFtcy52YWx1ZU1zYXQgVGhlIHZhbHVlIG9mIHRoZSBpbnZvaWNlIGluIG1pbGxpc2F0b3NoaXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMubWVtb10gQSBtZW1vIG9yIGRlc2NyaXB0aW9uIGZvciB0aGUgaW52b2ljZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5leHBpcnldIFRoZSBleHBpcnkgdGltZSBvZiB0aGUgaW52b2ljZSBpbiBzZWNvbmRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEludm9pY2U+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBpbnZvaWNlXG4gICAqL1xuICBjcmVhdGVJbnZvaWNlKHBhcmFtczogQ3JlYXRlSW52b2ljZUJvZHkpOiBQcm9taXNlPEludm9pY2U+O1xuICAvKipcbiAgICogR2V0IGludm9pY2UgZGV0YWlscyBieSBwYXltZW50IGhhc2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBheW1lbnRIYXNoIC0gUGF5bWVudCBoYXNoIHRvIGxvb2t1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnZvaWNlPn0gSW52b2ljZSBkZXRhaWxzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRQYXltZW50SGFzaH0gV2hlbiBwYXltZW50IGhhc2ggaXMgbm90IHZhbGlkXG4gICAqL1xuICBnZXRJbnZvaWNlKHBheW1lbnRIYXNoOiBzdHJpbmcpOiBQcm9taXNlPEludm9pY2U+O1xuICAvKipcbiAgICogTGlzdHMgY3VycmVudCBsaWdodG5pbmcgaW52b2ljZXNcbiAgICogQHBhcmFtIHtJbnZvaWNlUXVlcnl9IHBhcmFtcyBRdWVyeSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgaW52b2ljZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuc3RhdHVzXSBUaGUgc3RhdHVzIG9mIHRoZSBpbnZvaWNlIChvcGVuLCBzZXR0bGVkLCBjYW5jZWxlZClcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnZvaWNlcyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJldklkXSBDb250aW51ZSBpdGVyYXRpbmcgKHByb3ZpZGVkIGJ5IG5leHRCYXRjaFByZXZJZCBpbiB0aGUgcHJldmlvdXMgbGlzdClcbiAgICogQHJldHVybnMge1Byb21pc2U8TGlzdEludm9pY2VzUmVzcG9uc2U+fSBMaXN0IG9mIGludm9pY2VzIGFuZCBuZXh0QmF0Y2hQcmV2SWRcbiAgICovXG4gIGxpc3RJbnZvaWNlcyhwYXJhbXM6IEludm9pY2VRdWVyeSk6IFByb21pc2U8TGlzdEludm9pY2VzUmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBQYXkgYSBsaWdodG5pbmcgaW52b2ljZVxuICAgKiBAcGFyYW0ge1N1Ym1pdFBheW1lbnRQYXJhbXN9IHBhcmFtcyAtIFBheW1lbnQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmludm9pY2UgLSBUaGUgaW52b2ljZSB0byBwYXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5hbW91bnRNc2F0IC0gVGhlIGFtb3VudCB0byBwYXkgaW4gbWlsbGlzYXRvc2hpc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBhc3NwaHJhc2UgLSBUaGUgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuc2VxdWVuY2VJZF0gLSBPcHRpb25hbCBzZXF1ZW5jZSBJRCBmb3IgdGhlIHJlc3BlY3RpdmUgcGF5bWVudCB0cmFuc2ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5jb21tZW50XSAtIE9wdGlvbmFsIGNvbW1lbnQgZm9yIHRoZSByZXNwZWN0aXZlIHBheW1lbnQgdHJhbnNmZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8UGF5SW52b2ljZVJlc3BvbnNlPn0gUGF5bWVudCByZXN1bHQgY29udGFpbmluZyB0cmFuc2FjdGlvbiByZXF1ZXN0IGRldGFpbHMgYW5kIHBheW1lbnQgc3RhdHVzXG4gICAqL1xuICBwYXlJbnZvaWNlKHBhcmFtczogU3VibWl0UGF5bWVudFBhcmFtcyk6IFByb21pc2U8UGF5SW52b2ljZVJlc3BvbnNlPjtcblxuICAvKipcbiAgICogT24gY2hhaW4gd2l0aGRyYXdhbFxuICAgKiBAcGFyYW0ge0xpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtc30gcGFyYW1zIC0gV2l0aGRyYXcgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge0xpZ2h0bmluZ09uY2hhaW5SZWNpcGllbnRbXX0gcGFyYW1zLnJlY2lwaWVudHMgLSBUaGUgcmVjaXBpZW50cyB0byBwYXlcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMuc2F0c1BlclZieXRlXSAtIE9wdGlvbmFsIHZhbHVlIGZvciBzYXRzIHBlciB2aXJ0dWFsIGJ5dGUuIElmIG5vdCBwcmVzZW50LCBpdCB3aWxsIGJlIGVzdGltYXRlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMubnVtQmxvY2tzXSAtIFRhcmdldCBibG9ja3MgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBiZSBjb25maXJtZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wYXNzcGhyYXNlIC0gVGhlIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnNlcXVlbmNlSWRdIC0gT3B0aW9uYWwgc2VxdWVuY2UgSUQgZm9yIHRoZSByZXNwZWN0aXZlIHdpdGhkcmF3IHRyYW5zZmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLmNvbW1lbnRdIC0gT3B0aW9uYWwgY29tbWVudCBmb3IgdGhlIHJlc3BlY3RpdmUgd2l0aGRyYXcgdHJhbnNmZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8TGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UmVzcG9uc2U+fSBXaXRoZHJhdyByZXN1bHQgY29udGFpbmluZyB0cmFuc2FjdGlvbiByZXF1ZXN0IGRldGFpbHMgYW5kIHN0YXR1c1xuICAgKi9cbiAgd2l0aGRyYXdPbmNoYWluKHBhcmFtczogTGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UGFyYW1zKTogUHJvbWlzZTxMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdSZXNwb25zZT47XG4gIC8qKlxuICAgKiBHZXQgcGF5bWVudCBkZXRhaWxzIGJ5IHBheW1lbnQgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBheW1lbnRJZCAtIFBheW1lbnQgaWQgdG8gbG9va3VwXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBheW1lbnRJbmZvPn0gUGF5bWVudCBkZXRhaWxzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRQYXltZW50SWR9IFdoZW4gcGF5bWVudCBpZCBpcyBub3QgdmFsaWRcbiAgICovXG4gIGdldFBheW1lbnQocGF5bWVudElkOiBzdHJpbmcpOiBQcm9taXNlPFBheW1lbnRJbmZvPjtcbiAgLyoqXG4gICAqIExpc3QgcGF5bWVudHMgZm9yIGEgd2FsbGV0IHdpdGggb3B0aW9uYWwgZmlsdGVyaW5nXG4gICAqIEBwYXJhbSB7UGF5bWVudFF1ZXJ5fSBwYXJhbXMgUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIHBheW1lbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnN0YXR1c10gVGhlIHN0YXR1cyBvZiB0aGUgcGF5bWVudFxuICAgKiBAcGFyYW0ge2JpZ2ludH0gW3BhcmFtcy5saW1pdF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBheW1lbnRzIHRvIHJldHVyblxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuc3RhcnREYXRlXSBUaGUgc3RhcnQgZGF0ZSBmb3IgdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSB7RGF0ZX0gW3BhcmFtcy5lbmREYXRlXSBUaGUgZW5kIGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5wYXltZW50SGFzaF0gVGhlIHBheW1lbnQgaGFzaCBvZiB0aGUgcGF5bWVudHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJldklkXSBDb250aW51ZSBpdGVyYXRpbmcgKHByb3ZpZGVkIGJ5IG5leHRCYXRjaFByZXZJZCBpbiB0aGUgcHJldmlvdXMgbGlzdClcbiAgICogQHJldHVybnMge1Byb21pc2U8TGlzdFBheW1lbnRzUmVzcG9uc2U+fSBMaXN0IG9mIHBheW1lbnRzIGFuZCBuZXh0QmF0Y2hQcmV2SWRcbiAgICovXG4gIGxpc3RQYXltZW50cyhwYXJhbXM6IFBheW1lbnRRdWVyeSk6IFByb21pc2U8TGlzdFBheW1lbnRzUmVzcG9uc2U+O1xuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9uIGRldGFpbHMgYnkgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR4SWQgLSBUcmFuc2FjdGlvbiBJRCB0byBsb29rdXBcbiAgICogQHJldHVybnMge1Byb21pc2U8VHJhbnNhY3Rpb24+fSBUcmFuc2FjdGlvbiBkZXRhaWxzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRUeElkfSBXaGVuIHRyYW5zYWN0aW9uIElEIGlzIG5vdCB2YWxpZFxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb24odHhJZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbj47XG5cbiAgLyoqXG4gICAqIExpc3QgdHJhbnNhY3Rpb25zIGZvciBhIHdhbGxldCB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZyBhbmQgY3Vyc29yLWJhc2VkIHBhZ2luYXRpb25cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblF1ZXJ5fSBwYXJhbXMgUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIHRyYW5zYWN0aW9uc1xuICAgKiBAcGFyYW0ge2JpZ2ludH0gW3BhcmFtcy5saW1pdF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJldklkXSBUcmFuc2FjdGlvbiBJRCBmb3IgY3Vyc29yLWJhc2VkIHBhZ2luYXRpb24gKGZyb20gbmV4dEJhdGNoUHJldklkKVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMaXN0VHJhbnNhY3Rpb25zUmVzcG9uc2U+fSBMaXN0IG9mIHRyYW5zYWN0aW9ucyB3aXRoIHBhZ2luYXRpb24gaW5mb1xuICAgKi9cbiAgbGlzdFRyYW5zYWN0aW9ucyhwYXJhbXM6IFRyYW5zYWN0aW9uUXVlcnkpOiBQcm9taXNlPExpc3RUcmFuc2FjdGlvbnNSZXNwb25zZT47XG59XG5cbmV4cG9ydCBjbGFzcyBMaWdodG5pbmdXYWxsZXQgaW1wbGVtZW50cyBJTGlnaHRuaW5nV2FsbGV0IHtcbiAgcHVibGljIHdhbGxldDogc2RrY29yZS5JV2FsbGV0O1xuXG4gIGNvbnN0cnVjdG9yKHdhbGxldDogc2RrY29yZS5JV2FsbGV0KSB7XG4gICAgY29uc3QgY29pbiA9IHdhbGxldC5iYXNlQ29pbjtcbiAgICBpZiAoY29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvaW4gZm9yIGxpZ2h0bmluZyB3YWxsZXQ6ICR7Y29pbi5nZXRGYW1pbHkoKX1gKTtcbiAgICB9XG4gICAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVJbnZvaWNlKHBhcmFtczogQ3JlYXRlSW52b2ljZUJvZHkpOiBQcm9taXNlPEludm9pY2U+IHtcbiAgICBjb25zdCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2VgLCAyKSlcbiAgICAgIC5zZW5kKHQuZXhhY3QoQ3JlYXRlSW52b2ljZUJvZHkpLmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShJbnZvaWNlLm5hbWUsIEludm9pY2UsIGNyZWF0ZUludm9pY2VSZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICAvLyBET04nVCB0aHJvdyBlcnJvcnMgZnJvbSBkZWNvZGVPckVsc2UuIEl0IGNvdWxkIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNyZWF0ZSBpbnZvaWNlIHJlc3BvbnNlICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRJbnZvaWNlKHBheW1lbnRIYXNoOiBzdHJpbmcpOiBQcm9taXNlPEludm9pY2U+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9pbnZvaWNlLyR7cGF5bWVudEhhc2h9YCwgMikpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShJbnZvaWNlLm5hbWUsIEludm9pY2UsIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnZXQgaW52b2ljZSByZXNwb25zZSAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdEludm9pY2VzKHBhcmFtczogSW52b2ljZVF1ZXJ5KTogUHJvbWlzZTxMaXN0SW52b2ljZXNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJldHVybkNvZGVjID0gTGlzdEludm9pY2VzUmVzcG9uc2U7XG4gICAgY29uc3QgY3JlYXRlSW52b2ljZVJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2VgLCAyKSlcbiAgICAgIC5xdWVyeShJbnZvaWNlUXVlcnkuZW5jb2RlKHBhcmFtcykpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKHJldHVybkNvZGVjLm5hbWUsIHJldHVybkNvZGVjLCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpc3QgaW52b2ljZXMgcmVzcG9uc2UgJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHBheUludm9pY2UocGFyYW1zOiBTdWJtaXRQYXltZW50UGFyYW1zKTogUHJvbWlzZTxQYXlJbnZvaWNlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy53YWxsZXQuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG5cbiAgICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHRoaXMud2FsbGV0KTtcbiAgICBjb25zdCB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiA9IHVzZXJBdXRoS2V5LmVuY3J5cHRlZFBydjtcbiAgICBpZiAoIXVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXIgYXV0aCBrZXkgaXMgbWlzc2luZyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICAgIHQuZXhhY3QoTGlnaHRuaW5nUGF5bWVudFJlcXVlc3QpLmVuY29kZShwYXJhbXMpLFxuICAgICAgdGhpcy53YWxsZXQuYml0Z28uZGVjcnlwdCh7IHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSwgaW5wdXQ6IHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2IH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHBheW1lbnRJbnRlbnQ6IHsgaW50ZW50OiBMaWdodG5pbmdQYXltZW50SW50ZW50IH0gPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIHNpZ25lZFJlcXVlc3Q6IHtcbiAgICAgICAgICBpbnZvaWNlOiBwYXJhbXMuaW52b2ljZSxcbiAgICAgICAgICBhbW91bnRNc2F0OiBwYXJhbXMuYW1vdW50TXNhdCxcbiAgICAgICAgICBmZWVMaW1pdE1zYXQ6IHBhcmFtcy5mZWVMaW1pdE1zYXQsXG4gICAgICAgICAgZmVlTGltaXRSYXRpbzogcGFyYW1zLmZlZUxpbWl0UmF0aW8sXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZSA9IChhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKCcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzJywgMikpXG4gICAgICAuc2VuZCh0LnR5cGUoeyBpbnRlbnQ6IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQgfSkuZW5jb2RlKHBheW1lbnRJbnRlbnQpKVxuICAgICAgLnJlc3VsdCgpKSBhcyBUeFJlcXVlc3Q7XG5cbiAgICBpZiAodHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnN0YXRlID09PSAncGVuZGluZ0FwcHJvdmFsJykge1xuICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFscyA9IG5ldyBQZW5kaW5nQXBwcm92YWxzKHRoaXMud2FsbGV0LmJpdGdvLCB0aGlzLndhbGxldC5iYXNlQ29pbik7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSBhd2FpdCBwZW5kaW5nQXBwcm92YWxzLmdldCh7IGlkOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUucGVuZGluZ0FwcHJvdmFsSWQgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZW5kaW5nQXBwcm92YWw6IHBlbmRpbmdBcHByb3ZhbC50b0pTT04oKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCxcbiAgICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS5zdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wb3N0KFxuICAgICAgICB0aGlzLndhbGxldC5iaXRnby51cmwoXG4gICAgICAgICAgJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMvJyArIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCArICcvdHJhbnNmZXJzJyxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zZW5kKClcbiAgICAgIC5yZXN1bHQoKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQgPSBhd2FpdCBjb21tb25Uc3NNZXRob2RzLnNlbmRUeFJlcXVlc3QoXG4gICAgICB0aGlzLndhbGxldC5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQsXG4gICAgICBSZXF1ZXN0VHlwZS50eCxcbiAgICAgIHJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGNvaW5TcGVjaWZpYyA9IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQudHJhbnNhY3Rpb25zPy5bMF0/LnVuc2lnbmVkVHg/LmNvaW5TcGVjaWZpYztcblxuICAgIHJldHVybiB7XG4gICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnR4UmVxdWVzdElkLFxuICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQuc3RhdGUsXG4gICAgICBwYXltZW50U3RhdHVzOiBjb2luU3BlY2lmaWNcbiAgICAgICAgPyB0LmV4YWN0KExuZENyZWF0ZVBheW1lbnRSZXNwb25zZSkuZW5jb2RlKGNvaW5TcGVjaWZpYyBhcyBMbmRDcmVhdGVQYXltZW50UmVzcG9uc2UpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyB3aXRoZHJhd09uY2hhaW4ocGFyYW1zOiBMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdQYXJhbXMpOiBQcm9taXNlPExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIHRoaXMud2FsbGV0LmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuXG4gICAgY29uc3QgcGF5bWVudEludGVudDogeyBpbnRlbnQ6IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQgfSA9IHtcbiAgICAgIGludGVudDoge1xuICAgICAgICBjb21tZW50OiBwYXJhbXMuY29tbWVudCxcbiAgICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICAgIG9uY2hhaW5SZXF1ZXN0OiB7XG4gICAgICAgICAgcmVjaXBpZW50czogcGFyYW1zLnJlY2lwaWVudHMsXG4gICAgICAgICAgc2F0c1BlclZieXRlOiBwYXJhbXMuc2F0c1BlclZieXRlLFxuICAgICAgICAgIG51bUJsb2NrczogcGFyYW1zLm51bUJsb2NrcyxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlID0gKGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAucG9zdCh0aGlzLndhbGxldC5iaXRnby51cmwoJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMnLCAyKSlcbiAgICAgIC5zZW5kKHQudHlwZSh7IGludGVudDogTGlnaHRuaW5nUGF5bWVudEludGVudCB9KS5lbmNvZGUocGF5bWVudEludGVudCkpXG4gICAgICAucmVzdWx0KCkpIGFzIFR4UmVxdWVzdDtcblxuICAgIGlmIChcbiAgICAgICF0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zIHx8XG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIXRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXhcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc2VyaWFsaXplZCB0eEhleCBpcyBtaXNzaW5nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHRoaXMud2FsbGV0LnRvSlNPTigpO1xuICAgIGlmICghd2FsbGV0RGF0YS5jb2luU3BlY2lmaWMud2F0Y2hPbmx5QWNjb3VudHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgd2FsbGV0IGlzIG1pc3Npbmcgd2F0Y2ggb25seSBhY2NvdW50c2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHdhdGNoT25seUFjY291bnREZXRhaWxzID0gZGVjb2RlT3JFbHNlKFxuICAgICAgV2F0Y2hPbmx5Lm5hbWUsXG4gICAgICBXYXRjaE9ubHksXG4gICAgICB3YWxsZXREYXRhLmNvaW5TcGVjaWZpYy53YXRjaE9ubHlBY2NvdW50cyxcbiAgICAgIChlcnJvcnMpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHdhdGNoIG9ubHkgYWNjb3VudHMsIGVycm9yOiAke2Vycm9yc31gKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBnZXRVdHhvbGliTmV0d29yayh0aGlzLndhbGxldC5jb2luKCkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlUHNidEZvcldpdGhkcmF3KFxuICAgICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICBuZXR3b3JrLFxuICAgICAgICBwYXJhbXMucmVjaXBpZW50cyxcbiAgICAgICAgd2F0Y2hPbmx5QWNjb3VudERldGFpbHMuYWNjb3VudHNcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXJyb3IgdmFsaWRhdGluZyB3aXRoZHJhdyBwc2J0OiAke2Vycn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHRoaXMud2FsbGV0KTtcbiAgICBjb25zdCB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiA9IHVzZXJBdXRoS2V5LmVuY3J5cHRlZFBydjtcbiAgICBpZiAoIXVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXIgYXV0aCBrZXkgaXMgbWlzc2luZyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICAgIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXgsXG4gICAgICB0aGlzLndhbGxldC5iaXRnby5kZWNyeXB0KHsgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLCBpbnB1dDogdXNlckF1dGhLZXlFbmNyeXB0ZWRQcnYgfSlcbiAgICApO1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZSA9IChhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnB1dChcbiAgICAgICAgdGhpcy53YWxsZXQuYml0Z28udXJsKFxuICAgICAgICAgICcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzLycgKyB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQgKyAnL2NvaW5TcGVjaWZpYycsXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc2VuZCh7XG4gICAgICAgIHVuc2lnbmVkQ29pblNwZWNpZmljOiB7XG4gICAgICAgICAgY29pbjogdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgICAgICBkYXRhOiB7IHNpZ25hdHVyZSB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKSkgYXMgVHhSZXF1ZXN0O1xuXG4gICAgaWYgKHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUuc3RhdGUgPT09ICdwZW5kaW5nQXBwcm92YWwnKSB7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWxzID0gbmV3IFBlbmRpbmdBcHByb3ZhbHModGhpcy53YWxsZXQuYml0Z28sIHRoaXMud2FsbGV0LmJhc2VDb2luKTtcbiAgICAgIGNvbnN0IHBlbmRpbmdBcHByb3ZhbCA9IGF3YWl0IHBlbmRpbmdBcHByb3ZhbHMuZ2V0KHsgaWQ6IHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUucGVuZGluZ0FwcHJvdmFsSWQgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZW5kaW5nQXBwcm92YWw6IHBlbmRpbmdBcHByb3ZhbC50b0pTT04oKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUudHhSZXF1ZXN0SWQsXG4gICAgICAgIHR4UmVxdWVzdFN0YXRlOiB0cmFuc2FjdGlvblJlcXVlc3RXaXRoU2lnbmF0dXJlLnN0YXRlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QoXG4gICAgICAgIHRoaXMud2FsbGV0LmJpdGdvLnVybChcbiAgICAgICAgICAnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHhyZXF1ZXN0cy8nICsgdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZS50eFJlcXVlc3RJZCArICcvdHJhbnNmZXJzJyxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zZW5kKClcbiAgICAgIC5yZXN1bHQoKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQgPSBhd2FpdCBjb21tb25Uc3NNZXRob2RzLnNlbmRUeFJlcXVlc3QoXG4gICAgICB0aGlzLndhbGxldC5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RXaXRoU2lnbmF0dXJlLnR4UmVxdWVzdElkLFxuICAgICAgUmVxdWVzdFR5cGUudHgsXG4gICAgICByZXFJZFxuICAgICk7XG5cbiAgICBjb25zdCBjb2luU3BlY2lmaWMgPSB0cmFuc2FjdGlvblJlcXVlc3RTZW5kLnRyYW5zYWN0aW9ucz8uWzBdPy51bnNpZ25lZFR4Py5jb2luU3BlY2lmaWM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUudHhSZXF1ZXN0SWQsXG4gICAgICB0eFJlcXVlc3RTdGF0ZTogdHJhbnNhY3Rpb25SZXF1ZXN0U2VuZC5zdGF0ZSxcbiAgICAgIHdpdGhkcmF3U3RhdHVzOlxuICAgICAgICBjb2luU3BlY2lmaWMgJiYgJ3N0YXR1cycgaW4gY29pblNwZWNpZmljXG4gICAgICAgICAgPyB0LmV4YWN0KExuZENyZWF0ZVdpdGhkcmF3UmVzcG9uc2UpLmVuY29kZShjb2luU3BlY2lmaWMgYXMgTG5kQ3JlYXRlV2l0aGRyYXdSZXNwb25zZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0UGF5bWVudChwYXltZW50SWQ6IHN0cmluZyk6IFByb21pc2U8UGF5bWVudEluZm8+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9wYXltZW50LyR7cGF5bWVudElkfWAsIDIpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UoUGF5bWVudEluZm8ubmFtZSwgUGF5bWVudEluZm8sIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXltZW50IHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdFBheW1lbnRzKHBhcmFtczogUGF5bWVudFF1ZXJ5KTogUHJvbWlzZTxMaXN0UGF5bWVudHNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3BheW1lbnRgLCAyKSlcbiAgICAgIC5xdWVyeShQYXltZW50UXVlcnkuZW5jb2RlKHBhcmFtcykpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShMaXN0UGF5bWVudHNSZXNwb25zZS5uYW1lLCBMaXN0UGF5bWVudHNSZXNwb25zZSwgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBheW1lbnQgbGlzdCByZXNwb25zZTogJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRyYW5zYWN0aW9uKHR4SWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy90cmFuc2FjdGlvbi8ke3R4SWR9YCwgMikpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShUcmFuc2FjdGlvbi5uYW1lLCBUcmFuc2FjdGlvbiwgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRyYW5zYWN0aW9uIHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRyYW5zYWN0aW9ucyhwYXJhbXM6IFRyYW5zYWN0aW9uUXVlcnkpOiBQcm9taXNlPExpc3RUcmFuc2FjdGlvbnNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3RyYW5zYWN0aW9uYCwgMikpXG4gICAgICAucXVlcnkoVHJhbnNhY3Rpb25RdWVyeS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKExpc3RUcmFuc2FjdGlvbnNSZXNwb25zZS5uYW1lLCBMaXN0VHJhbnNhY3Rpb25zUmVzcG9uc2UsIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0cmFuc2FjdGlvbiBsaXN0IHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC9saWdodG5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0VBLG9EQWFDO0FBS0QsOERBOEJDO0FBeEhELDhEQUFnRDtBQUNoRCxtREFTOEI7QUFDOUIseUNBQTJCO0FBQzNCLDRDQUtzQjtBQUN0QixzQ0FtQm1CO0FBQ25CLHNEQUFzRjtBQStCdEY7O0dBRUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBdUI7SUFDaEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsMEJBQWlCLENBQUMsSUFBSSxFQUFFLDBCQUFpQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3JGLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0QyxDQUFD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QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQXdCO1FBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2FBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNsRixLQUFLLENBQUMseUJBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3RDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFBLHVCQUFZLEVBQUMsaUNBQXdCLENBQUMsSUFBSSxFQUFFLGlDQUF3QixFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQy9GLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFqUkQsMENBaVJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2RrY29yZSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQge1xuICBQZW5kaW5nQXBwcm92YWxEYXRhLFxuICBQZW5kaW5nQXBwcm92YWxzLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBSZXF1ZXN0VHlwZSxcbiAgVHhSZXF1ZXN0LFxuICBjb21tb25Uc3NNZXRob2RzLFxuICBUeFJlcXVlc3RTdGF0ZSxcbiAgZGVjb2RlT3JFbHNlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7XG4gIGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUsXG4gIGdldFV0eG9saWJOZXR3b3JrLFxuICB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWMsXG4gIHZhbGlkYXRlUHNidEZvcldpdGhkcmF3LFxufSBmcm9tICcuLi9saWdodG5pbmcnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlSW52b2ljZUJvZHksXG4gIEludm9pY2UsXG4gIEludm9pY2VRdWVyeSxcbiAgTGlnaHRuaW5nQXV0aEtleWNoYWluLFxuICBMaWdodG5pbmdLZXljaGFpbixcbiAgTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlLFxuICBTdWJtaXRQYXltZW50UGFyYW1zLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25RdWVyeSxcbiAgTGlzdFRyYW5zYWN0aW9uc1Jlc3BvbnNlLFxuICBQYXltZW50SW5mbyxcbiAgUGF5bWVudFF1ZXJ5LFxuICBMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdQYXJhbXMsXG4gIExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1Jlc3BvbnNlLFxuICBMaXN0SW52b2ljZXNSZXNwb25zZSxcbiAgTGlzdFBheW1lbnRzUmVzcG9uc2UsXG4gIExuZENyZWF0ZVdpdGhkcmF3UmVzcG9uc2UsXG4gIFdhdGNoT25seSxcbn0gZnJvbSAnLi4vY29kZWNzJztcbmltcG9ydCB7IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQsIExpZ2h0bmluZ1BheW1lbnRSZXF1ZXN0IH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFBheUludm9pY2VSZXNwb25zZSA9IHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcGF5bWVudCByZXF1ZXN0IHN1Ym1pdHRlZCB0byBCaXRHby5cbiAgICovXG4gIHR4UmVxdWVzdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0YXR1cyBvZiB0aGUgcGF5bWVudCByZXF1ZXN0IHN1Ym1pc3Npb24gdG8gQml0R28uXG4gICAqIC0gYCdkZWxpdmVyZWQnYDogU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGJ5IEJpdEdvLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuIHNlbnQgdG8gdGhlIExpZ2h0bmluZyBOZXR3b3JrIHlldC5cbiAgICogLSBGb3IgdGhlIGFjdHVhbCBwYXltZW50IHN0YXR1cywgcmVmZXIgdG8gYHBheW1lbnRTdGF0dXNgIGFuZCB0cmFjayBgdHJhbnNmZXJgLlxuICAgKi9cbiAgdHhSZXF1ZXN0U3RhdGU6IFR4UmVxdWVzdFN0YXRlO1xuXG4gIC8qKlxuICAgKiBQZW5kaW5nIGFwcHJvdmFsIGRldGFpbHMsIGlmIGFwcGxpY2FibGUuXG4gICAqIC0gSWYgcHJlc2VudCwgdGhlIHBheW1lbnQgaGFzIG5vdCBiZWVuIGluaXRpYXRlZCB5ZXQuXG4gICAqL1xuICBwZW5kaW5nQXBwcm92YWw/OiBQZW5kaW5nQXBwcm92YWxEYXRhO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHNuYXBzaG90IG9mIHBheW1lbnQgc3RhdHVzIChpZiBhdmFpbGFibGUpLlxuICAgKiAtICoqYCdpbl9mbGlnaHQnYCoqOiBQYXltZW50IGlzIGluIHByb2dyZXNzLlxuICAgKiAtICoqYCdzZXR0bGVkJ2AqKjogUGF5bWVudCB3YXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC5cbiAgICogLSAqKmAnZmFpbGVkJ2AqKjogUGF5bWVudCBmYWlsZWQuXG4gICAqIFRoaXMgZmllbGQgaXMgYWJzZW50IGlmIGFwcHJvdmFsIGlzIHJlcXVpcmVkIGJlZm9yZSBwcm9jZXNzaW5nLlxuICAgKi9cbiAgcGF5bWVudFN0YXR1cz86IExuZENyZWF0ZVBheW1lbnRSZXNwb25zZTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBsaWdodG5pbmcga2V5Y2hhaW4gZm9yIHRoZSBnaXZlbiB3YWxsZXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMaWdodG5pbmdLZXljaGFpbih3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCk6IFByb21pc2U8TGlnaHRuaW5nS2V5Y2hhaW4+IHtcbiAgY29uc3QgY29pbiA9IHdhbGxldC5iYXNlQ29pbjtcbiAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgIT09ICdsbmJ0YycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29pbiB0byBnZXQgbGlnaHRuaW5nIHdhbGxldCBrZXk6ICR7Y29pbi5nZXRGYW1pbHkoKX1gKTtcbiAgfVxuICBjb25zdCBrZXlJZHMgPSB3YWxsZXQua2V5SWRzKCk7XG4gIGlmIChrZXlJZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG51bWJlciBvZiBrZXkgaW4gbGlnaHRuaW5nIHdhbGxldDogJHtrZXlJZHMubGVuZ3RofWApO1xuICB9XG4gIGNvbnN0IGtleWNoYWluID0gYXdhaXQgY29pbi5rZXljaGFpbnMoKS5nZXQoeyBpZDoga2V5SWRzWzBdIH0pO1xuICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoTGlnaHRuaW5nS2V5Y2hhaW4ubmFtZSwgTGlnaHRuaW5nS2V5Y2hhaW4sIGtleWNoYWluLCAoXykgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB1c2VyIGtleWApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGxpZ2h0bmluZyBhdXRoIGtleWNoYWlucyBmb3IgdGhlIGdpdmVuIHdhbGxldC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExpZ2h0bmluZ0F1dGhLZXljaGFpbnMod2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpOiBQcm9taXNlPHtcbiAgdXNlckF1dGhLZXk6IExpZ2h0bmluZ0F1dGhLZXljaGFpbjtcbiAgbm9kZUF1dGhLZXk6IExpZ2h0bmluZ0F1dGhLZXljaGFpbjtcbn0+IHtcbiAgY29uc3QgY29pbiA9IHdhbGxldC5iYXNlQ29pbjtcbiAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgIT09ICdsbmJ0YycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29pbiB0byBnZXQgbGlnaHRuaW5nIHdhbGxldCBhdXRoIGtleXM6ICR7Y29pbi5nZXRGYW1pbHkoKX1gKTtcbiAgfVxuICBjb25zdCBhdXRoS2V5SWRzID0gd2FsbGV0LmNvaW5TcGVjaWZpYygpPy5rZXlzO1xuICBpZiAoYXV0aEtleUlkcz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG51bWJlciBvZiBhdXRoIGtleXMgaW4gbGlnaHRuaW5nIHdhbGxldDogJHthdXRoS2V5SWRzPy5sZW5ndGh9YCk7XG4gIH1cbiAgY29uc3Qga2V5Y2hhaW5zID0gYXdhaXQgUHJvbWlzZS5hbGwoYXV0aEtleUlkcy5tYXAoKGlkKSA9PiBjb2luLmtleWNoYWlucygpLmdldCh7IGlkIH0pKSk7XG4gIGNvbnN0IGF1dGhLZXljaGFpbnMgPSBrZXljaGFpbnMubWFwKChrZXljaGFpbikgPT4ge1xuICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShMaWdodG5pbmdBdXRoS2V5Y2hhaW4ubmFtZSwgTGlnaHRuaW5nQXV0aEtleWNoYWluLCBrZXljaGFpbiwgKF8pID0+IHtcbiAgICAgIC8vIERPTidUIHRocm93IGVycm9ycyBmcm9tIGRlY29kZU9yRWxzZS4gSXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGlnaHRuaW5nIGF1dGgga2V5OiAke2tleWNoYWluPy5pZH1gKTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IFt1c2VyQXV0aEtleSwgbm9kZUF1dGhLZXldID0gKFsndXNlckF1dGgnLCAnbm9kZUF1dGgnXSBhcyBjb25zdCkubWFwKChwdXJwb3NlKSA9PiB7XG4gICAgY29uc3Qga2V5Y2hhaW4gPSBhdXRoS2V5Y2hhaW5zLmZpbmQoXG4gICAgICAoaykgPT4gdW53cmFwTGlnaHRuaW5nQ29pblNwZWNpZmljKGsuY29pblNwZWNpZmljLCBjb2luLmdldENoYWluKCkpLnB1cnBvc2UgPT09IHB1cnBvc2VcbiAgICApO1xuICAgIGlmICgha2V5Y2hhaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAke3B1cnBvc2V9IGtleWApO1xuICAgIH1cbiAgICByZXR1cm4ga2V5Y2hhaW47XG4gIH0pO1xuXG4gIHJldHVybiB7IHVzZXJBdXRoS2V5LCBub2RlQXV0aEtleSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMaWdodG5pbmdXYWxsZXQge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxpZ2h0bmluZyBpbnZvaWNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXMgSW52b2ljZSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7YmlnaW50fSBwYXJhbXMudmFsdWVNc2F0IFRoZSB2YWx1ZSBvZiB0aGUgaW52b2ljZSBpbiBtaWxsaXNhdG9zaGlzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLm1lbW9dIEEgbWVtbyBvciBkZXNjcmlwdGlvbiBmb3IgdGhlIGludm9pY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMuZXhwaXJ5XSBUaGUgZXhwaXJ5IHRpbWUgb2YgdGhlIGludm9pY2UgaW4gc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnZvaWNlPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNyZWF0ZWQgaW52b2ljZVxuICAgKi9cbiAgY3JlYXRlSW52b2ljZShwYXJhbXM6IENyZWF0ZUludm9pY2VCb2R5KTogUHJvbWlzZTxJbnZvaWNlPjtcbiAgLyoqXG4gICAqIEdldCBpbnZvaWNlIGRldGFpbHMgYnkgcGF5bWVudCBoYXNoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXltZW50SGFzaCAtIFBheW1lbnQgaGFzaCB0byBsb29rdXBcbiAgICogQHJldHVybnMge1Byb21pc2U8SW52b2ljZT59IEludm9pY2UgZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkUGF5bWVudEhhc2h9IFdoZW4gcGF5bWVudCBoYXNoIGlzIG5vdCB2YWxpZFxuICAgKi9cbiAgZ2V0SW52b2ljZShwYXltZW50SGFzaDogc3RyaW5nKTogUHJvbWlzZTxJbnZvaWNlPjtcbiAgLyoqXG4gICAqIExpc3RzIGN1cnJlbnQgbGlnaHRuaW5nIGludm9pY2VzXG4gICAqIEBwYXJhbSB7SW52b2ljZVF1ZXJ5fSBwYXJhbXMgUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIGludm9pY2VzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnN0YXR1c10gVGhlIHN0YXR1cyBvZiB0aGUgaW52b2ljZSAob3Blbiwgc2V0dGxlZCwgY2FuY2VsZWQpXG4gICAqIEBwYXJhbSB7YmlnaW50fSBbcGFyYW1zLmxpbWl0XSBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW52b2ljZXMgdG8gcmV0dXJuXG4gICAqIEBwYXJhbSB7RGF0ZX0gW3BhcmFtcy5zdGFydERhdGVdIFRoZSBzdGFydCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLmVuZERhdGVdIFRoZSBlbmQgZGF0ZSBmb3IgdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByZXZJZF0gQ29udGludWUgaXRlcmF0aW5nIChwcm92aWRlZCBieSBuZXh0QmF0Y2hQcmV2SWQgaW4gdGhlIHByZXZpb3VzIGxpc3QpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExpc3RJbnZvaWNlc1Jlc3BvbnNlPn0gTGlzdCBvZiBpbnZvaWNlcyBhbmQgbmV4dEJhdGNoUHJldklkXG4gICAqL1xuICBsaXN0SW52b2ljZXMocGFyYW1zOiBJbnZvaWNlUXVlcnkpOiBQcm9taXNlPExpc3RJbnZvaWNlc1Jlc3BvbnNlPjtcblxuICAvKipcbiAgICogUGF5IGEgbGlnaHRuaW5nIGludm9pY2VcbiAgICogQHBhcmFtIHtTdWJtaXRQYXltZW50UGFyYW1zfSBwYXJhbXMgLSBQYXltZW50IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5pbnZvaWNlIC0gVGhlIGludm9pY2UgdG8gcGF5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuYW1vdW50TXNhdCAtIFRoZSBhbW91bnQgdG8gcGF5IGluIG1pbGxpc2F0b3NoaXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wYXNzcGhyYXNlIC0gVGhlIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnNlcXVlbmNlSWRdIC0gT3B0aW9uYWwgc2VxdWVuY2UgSUQgZm9yIHRoZSByZXNwZWN0aXZlIHBheW1lbnQgdHJhbnNmZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuY29tbWVudF0gLSBPcHRpb25hbCBjb21tZW50IGZvciB0aGUgcmVzcGVjdGl2ZSBwYXltZW50IHRyYW5zZmVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBheUludm9pY2VSZXNwb25zZT59IFBheW1lbnQgcmVzdWx0IGNvbnRhaW5pbmcgdHJhbnNhY3Rpb24gcmVxdWVzdCBkZXRhaWxzIGFuZCBwYXltZW50IHN0YXR1c1xuICAgKi9cbiAgcGF5SW52b2ljZShwYXJhbXM6IFN1Ym1pdFBheW1lbnRQYXJhbXMpOiBQcm9taXNlPFBheUludm9pY2VSZXNwb25zZT47XG5cbiAgLyoqXG4gICAqIE9uIGNoYWluIHdpdGhkcmF3YWxcbiAgICogQHBhcmFtIHtMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdQYXJhbXN9IHBhcmFtcyAtIFdpdGhkcmF3IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtMaWdodG5pbmdPbmNoYWluUmVjaXBpZW50W119IHBhcmFtcy5yZWNpcGllbnRzIC0gVGhlIHJlY2lwaWVudHMgdG8gcGF5XG4gICAqIEBwYXJhbSB7YmlnaW50fSBbcGFyYW1zLnNhdHNQZXJWYnl0ZV0gLSBPcHRpb25hbCB2YWx1ZSBmb3Igc2F0cyBwZXIgdmlydHVhbCBieXRlLiBJZiBub3QgcHJlc2VudCwgaXQgd2lsbCBiZSBlc3RpbWF0ZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyYW1zLm51bUJsb2Nrc10gLSBUYXJnZXQgYmxvY2tzIGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gYmUgY29uZmlybWVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucGFzc3BocmFzZSAtIFRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zZXF1ZW5jZUlkXSAtIE9wdGlvbmFsIHNlcXVlbmNlIElEIGZvciB0aGUgcmVzcGVjdGl2ZSB3aXRoZHJhdyB0cmFuc2ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5jb21tZW50XSAtIE9wdGlvbmFsIGNvbW1lbnQgZm9yIHRoZSByZXNwZWN0aXZlIHdpdGhkcmF3IHRyYW5zZmVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1Jlc3BvbnNlPn0gV2l0aGRyYXcgcmVzdWx0IGNvbnRhaW5pbmcgdHJhbnNhY3Rpb24gcmVxdWVzdCBkZXRhaWxzIGFuZCBzdGF0dXNcbiAgICovXG4gIHdpdGhkcmF3T25jaGFpbihwYXJhbXM6IExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtcyk6IFByb21pc2U8TGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UmVzcG9uc2U+O1xuICAvKipcbiAgICogR2V0IHBheW1lbnQgZGV0YWlscyBieSBwYXltZW50IGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXltZW50SWQgLSBQYXltZW50IGlkIHRvIGxvb2t1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXltZW50SW5mbz59IFBheW1lbnQgZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkUGF5bWVudElkfSBXaGVuIHBheW1lbnQgaWQgaXMgbm90IHZhbGlkXG4gICAqL1xuICBnZXRQYXltZW50KHBheW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50SW5mbz47XG4gIC8qKlxuICAgKiBMaXN0IHBheW1lbnRzIGZvciBhIHdhbGxldCB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZ1xuICAgKiBAcGFyYW0ge1BheW1lbnRRdWVyeX0gcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBwYXltZW50c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zdGF0dXNdIFRoZSBzdGF0dXMgb2YgdGhlIHBheW1lbnRcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXltZW50cyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucGF5bWVudEhhc2hdIFRoZSBwYXltZW50IGhhc2ggb2YgdGhlIHBheW1lbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByZXZJZF0gQ29udGludWUgaXRlcmF0aW5nIChwcm92aWRlZCBieSBuZXh0QmF0Y2hQcmV2SWQgaW4gdGhlIHByZXZpb3VzIGxpc3QpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExpc3RQYXltZW50c1Jlc3BvbnNlPn0gTGlzdCBvZiBwYXltZW50cyBhbmQgbmV4dEJhdGNoUHJldklkXG4gICAqL1xuICBsaXN0UGF5bWVudHMocGFyYW1zOiBQYXltZW50UXVlcnkpOiBQcm9taXNlPExpc3RQYXltZW50c1Jlc3BvbnNlPjtcbiAgLyoqXG4gICAqIEdldCB0cmFuc2FjdGlvbiBkZXRhaWxzIGJ5IElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eElkIC0gVHJhbnNhY3Rpb24gSUQgdG8gbG9va3VwXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRyYW5zYWN0aW9uPn0gVHJhbnNhY3Rpb24gZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkVHhJZH0gV2hlbiB0cmFuc2FjdGlvbiBJRCBpcyBub3QgdmFsaWRcbiAgICovXG4gIGdldFRyYW5zYWN0aW9uKHR4SWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb24+O1xuXG4gIC8qKlxuICAgKiBMaXN0IHRyYW5zYWN0aW9ucyBmb3IgYSB3YWxsZXQgd2l0aCBvcHRpb25hbCBmaWx0ZXJpbmcgYW5kIGN1cnNvci1iYXNlZCBwYWdpbmF0aW9uXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25RdWVyeX0gcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyB0cmFuc2FjdGlvbnNcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdG8gcmV0dXJuXG4gICAqIEBwYXJhbSB7RGF0ZX0gW3BhcmFtcy5zdGFydERhdGVdIFRoZSBzdGFydCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLmVuZERhdGVdIFRoZSBlbmQgZGF0ZSBmb3IgdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByZXZJZF0gVHJhbnNhY3Rpb24gSUQgZm9yIGN1cnNvci1iYXNlZCBwYWdpbmF0aW9uIChmcm9tIG5leHRCYXRjaFByZXZJZClcbiAgICogQHJldHVybnMge1Byb21pc2U8TGlzdFRyYW5zYWN0aW9uc1Jlc3BvbnNlPn0gTGlzdCBvZiB0cmFuc2FjdGlvbnMgd2l0aCBwYWdpbmF0aW9uIGluZm9cbiAgICovXG4gIGxpc3RUcmFuc2FjdGlvbnMocGFyYW1zOiBUcmFuc2FjdGlvblF1ZXJ5KTogUHJvbWlzZTxMaXN0VHJhbnNhY3Rpb25zUmVzcG9uc2U+O1xufVxuXG5leHBvcnQgY2xhc3MgTGlnaHRuaW5nV2FsbGV0IGltcGxlbWVudHMgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIHB1YmxpYyB3YWxsZXQ6IHNka2NvcmUuSVdhbGxldDtcblxuICBjb25zdHJ1Y3Rvcih3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCkge1xuICAgIGNvbnN0IGNvaW4gPSB3YWxsZXQuYmFzZUNvaW47XG4gICAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgIT09ICdsbmJ0YycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIGZvciBsaWdodG5pbmcgd2FsbGV0OiAke2NvaW4uZ2V0RmFtaWx5KCl9YCk7XG4gICAgfVxuICAgIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlSW52b2ljZShwYXJhbXM6IENyZWF0ZUludm9pY2VCb2R5KTogUHJvbWlzZTxJbnZvaWNlPiB7XG4gICAgY29uc3QgY3JlYXRlSW52b2ljZVJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9pbnZvaWNlYCwgMikpXG4gICAgICAuc2VuZCh0LmV4YWN0KENyZWF0ZUludm9pY2VCb2R5KS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoSW52b2ljZS5uYW1lLCBJbnZvaWNlLCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgLy8gRE9OJ1QgdGhyb3cgZXJyb3JzIGZyb20gZGVjb2RlT3JFbHNlLiBJdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjcmVhdGUgaW52b2ljZSByZXNwb25zZSAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW52b2ljZShwYXltZW50SGFzaDogc3RyaW5nKTogUHJvbWlzZTxJbnZvaWNlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvaW52b2ljZS8ke3BheW1lbnRIYXNofWAsIDIpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UoSW52b2ljZS5uYW1lLCBJbnZvaWNlLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ2V0IGludm9pY2UgcmVzcG9uc2UgJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RJbnZvaWNlcyhwYXJhbXM6IEludm9pY2VRdWVyeSk6IFByb21pc2U8TGlzdEludm9pY2VzUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXR1cm5Db2RlYyA9IExpc3RJbnZvaWNlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGNyZWF0ZUludm9pY2VSZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9pbnZvaWNlYCwgMikpXG4gICAgICAucXVlcnkoSW52b2ljZVF1ZXJ5LmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShyZXR1cm5Db2RlYy5uYW1lLCByZXR1cm5Db2RlYywgY3JlYXRlSW52b2ljZVJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBsaXN0IGludm9pY2VzIHJlc3BvbnNlICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBwYXlJbnZvaWNlKHBhcmFtczogU3VibWl0UGF5bWVudFBhcmFtcyk6IFByb21pc2U8UGF5SW52b2ljZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIHRoaXMud2FsbGV0LmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuXG4gICAgY29uc3QgeyB1c2VyQXV0aEtleSB9ID0gYXdhaXQgZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucyh0aGlzLndhbGxldCk7XG4gICAgY29uc3QgdXNlckF1dGhLZXlFbmNyeXB0ZWRQcnYgPSB1c2VyQXV0aEtleS5lbmNyeXB0ZWRQcnY7XG4gICAgaWYgKCF1c2VyQXV0aEtleUVuY3J5cHRlZFBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyIGF1dGgga2V5IGlzIG1pc3NpbmcgZW5jcnlwdGVkIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUoXG4gICAgICB0LmV4YWN0KExpZ2h0bmluZ1BheW1lbnRSZXF1ZXN0KS5lbmNvZGUocGFyYW1zKSxcbiAgICAgIGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvLmRlY3J5cHRBc3luYyh7IHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSwgaW5wdXQ6IHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2IH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHBheW1lbnRJbnRlbnQ6IHsgaW50ZW50OiBMaWdodG5pbmdQYXltZW50SW50ZW50IH0gPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIHNpZ25lZFJlcXVlc3Q6IHtcbiAgICAgICAgICBpbnZvaWNlOiBwYXJhbXMuaW52b2ljZSxcbiAgICAgICAgICBhbW91bnRNc2F0OiBwYXJhbXMuYW1vdW50TXNhdCxcbiAgICAgICAgICBmZWVMaW1pdE1zYXQ6IHBhcmFtcy5mZWVMaW1pdE1zYXQsXG4gICAgICAgICAgZmVlTGltaXRSYXRpbzogcGFyYW1zLmZlZUxpbWl0UmF0aW8sXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZSA9IChhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKCcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzJywgMikpXG4gICAgICAuc2VuZCh0LnR5cGUoeyBpbnRlbnQ6IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQgfSkuZW5jb2RlKHBheW1lbnRJbnRlbnQpKVxuICAgICAgLnJlc3VsdCgpKSBhcyBUeFJlcXVlc3Q7XG5cbiAgICBpZiAodHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnN0YXRlID09PSAncGVuZGluZ0FwcHJvdmFsJykge1xuICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFscyA9IG5ldyBQZW5kaW5nQXBwcm92YWxzKHRoaXMud2FsbGV0LmJpdGdvLCB0aGlzLndhbGxldC5iYXNlQ29pbik7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSBhd2FpdCBwZW5kaW5nQXBwcm92YWxzLmdldCh7IGlkOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUucGVuZGluZ0FwcHJvdmFsSWQgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZW5kaW5nQXBwcm92YWw6IHBlbmRpbmdBcHByb3ZhbC50b0pTT04oKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCxcbiAgICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS5zdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wb3N0KFxuICAgICAgICB0aGlzLndhbGxldC5iaXRnby51cmwoXG4gICAgICAgICAgJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMvJyArIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCArICcvdHJhbnNmZXJzJyxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zZW5kKClcbiAgICAgIC5yZXN1bHQoKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQgPSBhd2FpdCBjb21tb25Uc3NNZXRob2RzLnNlbmRUeFJlcXVlc3QoXG4gICAgICB0aGlzLndhbGxldC5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQsXG4gICAgICBSZXF1ZXN0VHlwZS50eCxcbiAgICAgIHJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGNvaW5TcGVjaWZpYyA9IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQudHJhbnNhY3Rpb25zPy5bMF0/LnVuc2lnbmVkVHg/LmNvaW5TcGVjaWZpYztcblxuICAgIHJldHVybiB7XG4gICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnR4UmVxdWVzdElkLFxuICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQuc3RhdGUsXG4gICAgICBwYXltZW50U3RhdHVzOiBjb2luU3BlY2lmaWNcbiAgICAgICAgPyB0LmV4YWN0KExuZENyZWF0ZVBheW1lbnRSZXNwb25zZSkuZW5jb2RlKGNvaW5TcGVjaWZpYyBhcyBMbmRDcmVhdGVQYXltZW50UmVzcG9uc2UpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyB3aXRoZHJhd09uY2hhaW4ocGFyYW1zOiBMaWdodG5pbmdPbmNoYWluV2l0aGRyYXdQYXJhbXMpOiBQcm9taXNlPExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIHRoaXMud2FsbGV0LmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuXG4gICAgY29uc3QgcGF5bWVudEludGVudDogeyBpbnRlbnQ6IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQgfSA9IHtcbiAgICAgIGludGVudDoge1xuICAgICAgICBjb21tZW50OiBwYXJhbXMuY29tbWVudCxcbiAgICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICAgIG9uY2hhaW5SZXF1ZXN0OiB7XG4gICAgICAgICAgcmVjaXBpZW50czogcGFyYW1zLnJlY2lwaWVudHMsXG4gICAgICAgICAgc2F0c1BlclZieXRlOiBwYXJhbXMuc2F0c1BlclZieXRlLFxuICAgICAgICAgIG51bUJsb2NrczogcGFyYW1zLm51bUJsb2NrcyxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlID0gKGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAucG9zdCh0aGlzLndhbGxldC5iaXRnby51cmwoJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMnLCAyKSlcbiAgICAgIC5zZW5kKHQudHlwZSh7IGludGVudDogTGlnaHRuaW5nUGF5bWVudEludGVudCB9KS5lbmNvZGUocGF5bWVudEludGVudCkpXG4gICAgICAucmVzdWx0KCkpIGFzIFR4UmVxdWVzdDtcblxuICAgIGlmIChcbiAgICAgICF0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zIHx8XG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIXRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXhcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc2VyaWFsaXplZCB0eEhleCBpcyBtaXNzaW5nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHRoaXMud2FsbGV0LnRvSlNPTigpO1xuICAgIGlmICghd2FsbGV0RGF0YS5jb2luU3BlY2lmaWMud2F0Y2hPbmx5QWNjb3VudHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgd2FsbGV0IGlzIG1pc3Npbmcgd2F0Y2ggb25seSBhY2NvdW50c2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHdhdGNoT25seUFjY291bnREZXRhaWxzID0gZGVjb2RlT3JFbHNlKFxuICAgICAgV2F0Y2hPbmx5Lm5hbWUsXG4gICAgICBXYXRjaE9ubHksXG4gICAgICB3YWxsZXREYXRhLmNvaW5TcGVjaWZpYy53YXRjaE9ubHlBY2NvdW50cyxcbiAgICAgIChlcnJvcnMpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHdhdGNoIG9ubHkgYWNjb3VudHMsIGVycm9yOiAke2Vycm9yc31gKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBnZXRVdHhvbGliTmV0d29yayh0aGlzLndhbGxldC5jb2luKCkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlUHNidEZvcldpdGhkcmF3KFxuICAgICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICBuZXR3b3JrLFxuICAgICAgICBwYXJhbXMucmVjaXBpZW50cyxcbiAgICAgICAgd2F0Y2hPbmx5QWNjb3VudERldGFpbHMuYWNjb3VudHNcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXJyb3IgdmFsaWRhdGluZyB3aXRoZHJhdyBwc2J0OiAke2Vycn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHRoaXMud2FsbGV0KTtcbiAgICBjb25zdCB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiA9IHVzZXJBdXRoS2V5LmVuY3J5cHRlZFBydjtcbiAgICBpZiAoIXVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXIgYXV0aCBrZXkgaXMgbWlzc2luZyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICAgIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXgsXG4gICAgICBhd2FpdCB0aGlzLndhbGxldC5iaXRnby5kZWNyeXB0QXN5bmMoeyBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsIGlucHV0OiB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiB9KVxuICAgICk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvblJlcXVlc3RXaXRoU2lnbmF0dXJlID0gKGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLndhbGxldC5iaXRnby51cmwoXG4gICAgICAgICAgJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMvJyArIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCArICcvY29pblNwZWNpZmljJyxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zZW5kKHtcbiAgICAgICAgdW5zaWduZWRDb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICBjb2luOiB0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRDaGFpbigpLFxuICAgICAgICAgIGRhdGE6IHsgc2lnbmF0dXJlIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnJlc3VsdCgpKSBhcyBUeFJlcXVlc3Q7XG5cbiAgICBpZiAodHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZS5zdGF0ZSA9PT0gJ3BlbmRpbmdBcHByb3ZhbCcpIHtcbiAgICAgIGNvbnN0IHBlbmRpbmdBcHByb3ZhbHMgPSBuZXcgUGVuZGluZ0FwcHJvdmFscyh0aGlzLndhbGxldC5iaXRnbywgdGhpcy53YWxsZXQuYmFzZUNvaW4pO1xuICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFsID0gYXdhaXQgcGVuZGluZ0FwcHJvdmFscy5nZXQoeyBpZDogdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZS5wZW5kaW5nQXBwcm92YWxJZCB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBlbmRpbmdBcHByb3ZhbDogcGVuZGluZ0FwcHJvdmFsLnRvSlNPTigpLFxuICAgICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZS50eFJlcXVlc3RJZCxcbiAgICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUuc3RhdGUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAucG9zdChcbiAgICAgICAgdGhpcy53YWxsZXQuYml0Z28udXJsKFxuICAgICAgICAgICcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzLycgKyB0cmFuc2FjdGlvblJlcXVlc3RXaXRoU2lnbmF0dXJlLnR4UmVxdWVzdElkICsgJy90cmFuc2ZlcnMnLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnNlbmQoKVxuICAgICAgLnJlc3VsdCgpO1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0U2VuZCA9IGF3YWl0IGNvbW1vblRzc01ldGhvZHMuc2VuZFR4UmVxdWVzdChcbiAgICAgIHRoaXMud2FsbGV0LmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUudHhSZXF1ZXN0SWQsXG4gICAgICBSZXF1ZXN0VHlwZS50eCxcbiAgICAgIHJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGNvaW5TcGVjaWZpYyA9IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQudHJhbnNhY3Rpb25zPy5bMF0/LnVuc2lnbmVkVHg/LmNvaW5TcGVjaWZpYztcblxuICAgIHJldHVybiB7XG4gICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZS50eFJlcXVlc3RJZCxcbiAgICAgIHR4UmVxdWVzdFN0YXRlOiB0cmFuc2FjdGlvblJlcXVlc3RTZW5kLnN0YXRlLFxuICAgICAgd2l0aGRyYXdTdGF0dXM6XG4gICAgICAgIGNvaW5TcGVjaWZpYyAmJiAnc3RhdHVzJyBpbiBjb2luU3BlY2lmaWNcbiAgICAgICAgICA/IHQuZXhhY3QoTG5kQ3JlYXRlV2l0aGRyYXdSZXNwb25zZSkuZW5jb2RlKGNvaW5TcGVjaWZpYyBhcyBMbmRDcmVhdGVXaXRoZHJhd1Jlc3BvbnNlKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRQYXltZW50KHBheW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50SW5mbz4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3BheW1lbnQvJHtwYXltZW50SWR9YCwgMikpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShQYXltZW50SW5mby5uYW1lLCBQYXltZW50SW5mbywgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBheW1lbnQgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0UGF5bWVudHMocGFyYW1zOiBQYXltZW50UXVlcnkpOiBQcm9taXNlPExpc3RQYXltZW50c1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvcGF5bWVudGAsIDIpKVxuICAgICAgLnF1ZXJ5KFBheW1lbnRRdWVyeS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKExpc3RQYXltZW50c1Jlc3BvbnNlLm5hbWUsIExpc3RQYXltZW50c1Jlc3BvbnNlLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGF5bWVudCBsaXN0IHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0VHJhbnNhY3Rpb24odHhJZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3RyYW5zYWN0aW9uLyR7dHhJZH1gLCAyKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKFRyYW5zYWN0aW9uLm5hbWUsIFRyYW5zYWN0aW9uLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb24gcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0VHJhbnNhY3Rpb25zKHBhcmFtczogVHJhbnNhY3Rpb25RdWVyeSk6IFByb21pc2U8TGlzdFRyYW5zYWN0aW9uc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvdHJhbnNhY3Rpb25gLCAyKSlcbiAgICAgIC5xdWVyeShUcmFuc2FjdGlvblF1ZXJ5LmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UoTGlzdFRyYW5zYWN0aW9uc1Jlc3BvbnNlLm5hbWUsIExpc3RUcmFuc2FjdGlvbnNSZXNwb25zZSwgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRyYW5zYWN0aW9uIGxpc3QgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -40,29 +40,29 @@ const codecs_1 = require("../codecs");
|
|
|
40
40
|
const lightning_1 = require("./lightning");
|
|
41
41
|
const lightning_2 = require("../lightning");
|
|
42
42
|
const t = __importStar(require("io-ts"));
|
|
43
|
-
function encryptWalletUpdateRequest(wallet, params, userAuthKeyEncryptedPrv) {
|
|
43
|
+
async function encryptWalletUpdateRequest(wallet, params, userAuthKeyEncryptedPrv) {
|
|
44
44
|
const coinName = wallet.coin();
|
|
45
45
|
const requestWithEncryption = {
|
|
46
46
|
...params,
|
|
47
47
|
};
|
|
48
|
-
const userAuthXprv = wallet.bitgo.
|
|
48
|
+
const userAuthXprv = await wallet.bitgo.decryptAsync({
|
|
49
49
|
password: params.passphrase,
|
|
50
50
|
input: userAuthKeyEncryptedPrv,
|
|
51
51
|
});
|
|
52
52
|
if (params.signerTlsKey) {
|
|
53
|
-
requestWithEncryption.encryptedSignerTlsKey = wallet.bitgo.
|
|
53
|
+
requestWithEncryption.encryptedSignerTlsKey = await wallet.bitgo.encryptAsync({
|
|
54
54
|
password: params.passphrase,
|
|
55
55
|
input: params.signerTlsKey,
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
if (params.signerAdminMacaroon) {
|
|
59
|
-
requestWithEncryption.encryptedSignerAdminMacaroon = wallet.bitgo.
|
|
59
|
+
requestWithEncryption.encryptedSignerAdminMacaroon = await wallet.bitgo.encryptAsync({
|
|
60
60
|
password: params.passphrase,
|
|
61
61
|
input: params.signerAdminMacaroon,
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
if (params.signerMacaroon) {
|
|
65
|
-
requestWithEncryption.encryptedSignerMacaroon = wallet.bitgo.
|
|
65
|
+
requestWithEncryption.encryptedSignerMacaroon = await wallet.bitgo.encryptAsync({
|
|
66
66
|
password: (0, lightning_2.deriveLightningServiceSharedSecret)(coinName, userAuthXprv).toString('hex'),
|
|
67
67
|
input: params.signerMacaroon,
|
|
68
68
|
});
|
|
@@ -101,8 +101,8 @@ async function updateWalletCoinSpecific(wallet, params) {
|
|
|
101
101
|
if (!userAuthKeyEncryptedPrv) {
|
|
102
102
|
throw new Error(`user auth key is missing encrypted private key`);
|
|
103
103
|
}
|
|
104
|
-
const updateRequestWithEncryption = encryptWalletUpdateRequest(wallet, params, userAuthKeyEncryptedPrv);
|
|
105
|
-
const signature = (0, lightning_2.createMessageSignature)(updateRequestWithEncryption, wallet.bitgo.
|
|
104
|
+
const updateRequestWithEncryption = await encryptWalletUpdateRequest(wallet, params, userAuthKeyEncryptedPrv);
|
|
105
|
+
const signature = (0, lightning_2.createMessageSignature)(updateRequestWithEncryption, await wallet.bitgo.decryptAsync({ password: params.passphrase, input: userAuthKeyEncryptedPrv }));
|
|
106
106
|
const coinSpecific = {
|
|
107
107
|
[wallet.coin()]: {
|
|
108
108
|
signedRequest: updateRequestWithEncryption,
|
|
@@ -128,4 +128,4 @@ class SelfCustodialLightningWallet extends lightning_1.LightningWallet {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
exports.SelfCustodialLightningWallet = SelfCustodialLightningWallet;
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZkN1c3RvZGlhbExpZ2h0bmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93YWxsZXQvc2VsZkN1c3RvZGlhbExpZ2h0bmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4REEsNERBc0NDO0FBcEdELDhEQUFnRDtBQUNoRCxzQ0FBc0g7QUFDdEgsMkNBQTJGO0FBQzNGLDRDQUErRztBQUMvRyx5Q0FBMkI7QUFFM0IsU0FBUywwQkFBMEIsQ0FDakMsTUFBdUIsRUFDdkIsTUFBMEMsRUFDMUMsdUJBQStCO0lBRS9CLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQXdCLENBQUM7SUFFckQsTUFBTSxxQkFBcUIsR0FBd0Y7UUFDakgsR0FBRyxNQUFNO0tBQ1YsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hDLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUMzQixLQUFLLEVBQUUsdUJBQXVCO0tBQy9CLENBQUMsQ0FBQztJQUVILElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLHFCQUFxQixDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2pFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUMzQixLQUFLLEVBQUUsTUFBTSxDQUFDLFlBQVk7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IscUJBQXFCLENBQUMsNEJBQTRCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDeEUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsbUJBQW1CO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixxQkFBcUIsQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNuRSxRQUFRLEVBQUUsSUFBQSw4Q0FBa0MsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNwRixLQUFLLEVBQUUsTUFBTSxDQUFDLGNBQWM7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyw4Q0FBcUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSSxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLE1BQXVCLEVBQ3ZCLE1BQTBDO0lBRTFDLElBQUksQ0FBQyxJQUFBLCtCQUFtQixFQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssc0JBQXNCLEVBQUUsQ0FBQztRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxPQUFPLENBQUMsWUFBWSxDQUNsQiwyQ0FBa0MsQ0FBQyxJQUFJLEVBQ3ZDLDJDQUFrQyxFQUNsQyxNQUFNLEVBQ04sQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNULDZFQUE2RTtRQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUNGLENBQUM7SUFFRixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxJQUFBLHFDQUF5QixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sdUJBQXVCLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztJQUN6RCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE1BQU0sMkJBQTJCLEdBQUcsMEJBQTBCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sU0FBUyxHQUFHLElBQUEsa0NBQXNCLEVBQ3RDLDJCQUEyQixFQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQ3RGLENBQUM7SUFDRixNQUFNLFlBQVksR0FBRztRQUNuQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQ2YsYUFBYSxFQUFFLDJCQUEyQjtZQUMxQyxTQUFTO1NBQ1Y7S0FDRixDQUFDO0lBQ0YsT0FBTyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDOUUsQ0FBQztBQVVELE1BQWEsNEJBQTZCLFNBQVEsMkJBQWU7SUFDL0QsWUFBWSxNQUF1QjtRQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckcsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2FBQzNDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2FBQzdFLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLHVCQUFjLENBQUMsSUFBSSxFQUFFLHVCQUFjLEVBQUUsY0FBYyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekYsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWhCRCxvRUFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZGtjb3JlIGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhY2t1cFJlc3BvbnNlLCBVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0LCBVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0IH0gZnJvbSAnLi4vY29kZWNzJztcbmltcG9ydCB7IGdldExpZ2h0bmluZ0F1dGhLZXljaGFpbnMsIElMaWdodG5pbmdXYWxsZXQsIExpZ2h0bmluZ1dhbGxldCB9IGZyb20gJy4vbGlnaHRuaW5nJztcbmltcG9ydCB7IGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUsIGRlcml2ZUxpZ2h0bmluZ1NlcnZpY2VTaGFyZWRTZWNyZXQsIGlzTGlnaHRuaW5nQ29pbk5hbWUgfSBmcm9tICcuLi9saWdodG5pbmcnO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5cbmZ1bmN0aW9uIGVuY3J5cHRXYWxsZXRVcGRhdGVSZXF1ZXN0KFxuICB3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCxcbiAgcGFyYW1zOiBVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0LFxuICB1c2VyQXV0aEtleUVuY3J5cHRlZFBydjogc3RyaW5nXG4pOiBVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0IHtcbiAgY29uc3QgY29pbk5hbWUgPSB3YWxsZXQuY29pbigpIGFzICd0bG5idGMnIHwgJ2xuYnRjJztcblxuICBjb25zdCByZXF1ZXN0V2l0aEVuY3J5cHRpb246IFBhcnRpYWw8VXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdCAmIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldEVuY3J5cHRlZFJlcXVlc3Q+ID0ge1xuICAgIC4uLnBhcmFtcyxcbiAgfTtcblxuICBjb25zdCB1c2VyQXV0aFhwcnYgPSB3YWxsZXQuYml0Z28uZGVjcnlwdCh7XG4gICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgIGlucHV0OiB1c2VyQXV0aEtleUVuY3J5cHRlZFBydixcbiAgfSk7XG5cbiAgaWYgKHBhcmFtcy5zaWduZXJUbHNLZXkpIHtcbiAgICByZXF1ZXN0V2l0aEVuY3J5cHRpb24uZW5jcnlwdGVkU2lnbmVyVGxzS2V5ID0gd2FsbGV0LmJpdGdvLmVuY3J5cHQoe1xuICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgaW5wdXQ6IHBhcmFtcy5zaWduZXJUbHNLZXksXG4gICAgfSk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNpZ25lckFkbWluTWFjYXJvb24pIHtcbiAgICByZXF1ZXN0V2l0aEVuY3J5cHRpb24uZW5jcnlwdGVkU2lnbmVyQWRtaW5NYWNhcm9vbiA9IHdhbGxldC5iaXRnby5lbmNyeXB0KHtcbiAgICAgIHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIGlucHV0OiBwYXJhbXMuc2lnbmVyQWRtaW5NYWNhcm9vbixcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2lnbmVyTWFjYXJvb24pIHtcbiAgICByZXF1ZXN0V2l0aEVuY3J5cHRpb24uZW5jcnlwdGVkU2lnbmVyTWFjYXJvb24gPSB3YWxsZXQuYml0Z28uZW5jcnlwdCh7XG4gICAgICBwYXNzd29yZDogZGVyaXZlTGlnaHRuaW5nU2VydmljZVNoYXJlZFNlY3JldChjb2luTmFtZSwgdXNlckF1dGhYcHJ2KS50b1N0cmluZygnaGV4JyksXG4gICAgICBpbnB1dDogcGFyYW1zLnNpZ25lck1hY2Fyb29uLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHQuZXhhY3QoVXBkYXRlTGlnaHRuaW5nV2FsbGV0RW5jcnlwdGVkUmVxdWVzdCkuZW5jb2RlKHJlcXVlc3RXaXRoRW5jcnlwdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgY29pbi1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIExpZ2h0bmluZyBXYWxsZXQuXG4gKlxuICogQHBhcmFtIHtXYWxsZXR9IHdhbGxldCAtIFdhbGxldC5cbiAqIEBwYXJhbSB7VXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdH0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgY29udGFpbmluZyB0aGUgdXBkYXRlZCB3YWxsZXQtc3BlY2lmaWMgZGV0YWlscy5cbiAqICAgLSBgZW5jcnlwdGVkU2lnbmVyTWFjYXJvb25gIChvcHRpb25hbCk6IFRoaXMgbWFjYXJvb24gaXMgdXNlZCBieSB0aGUgd2F0Y2gtb25seSBub2RlIHRvIGFzayB0aGUgc2lnbmVyIG5vZGUgdG8gc2lnbiB0cmFuc2FjdGlvbnMuXG4gKiAgICAgRW5jcnlwdGVkIHdpdGggRUNESCBzZWNyZXQga2V5IGZyb20gcHJpdmF0ZSBrZXkgb2Ygd2FsbGV0J3MgdXNlciBhdXRoIGtleSBhbmQgcHVibGljIGtleSBvZiBsaWdodG5pbmcgc2VydmljZS5cbiAqICAgLSBgZW5jcnlwdGVkU2lnbmVyQWRtaW5NYWNhcm9vbmAgKG9wdGlvbmFsKTogR2VuZXJhdGVkIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSB3YWxsZXQgb2YgdGhlIHNpZ25lciBub2RlLlxuICogICAgIEVuY3J5cHRlZCB3aXRoIGNsaWVudCdzIHdhbGxldCBwYXNzcGhyYXNlLlxuICogICAtIGBzaWduZXJIb3N0YCAob3B0aW9uYWwpOiBUaGUgaG9zdCBhZGRyZXNzIG9mIHRoZSBMaWdodG5pbmcgc2lnbmVyIG5vZGUuXG4gKiAgIC0gYGVuY3J5cHRlZFNpZ25lclRsc0tleWAgKG9wdGlvbmFsKTogVGhlIHdhbGxldCBwYXNzcGhyYXNlIGVuY3J5cHRlZCBUTFMga2V5IG9mIHRoZSBzaWduZXIuXG4gKiAgIC0gYHBhc3NwaHJhc2VgIChyZXF1aXJlZCk6IFRoZSB3YWxsZXQgcGFzc3BocmFzZS5cbiAqICAgLSBgc2lnbmVyVGxzQ2VydGAgKG9wdGlvbmFsKTogVGhlIFRMUyBjZXJ0aWZpY2F0ZSBvZiB0aGUgc2lnbmVyLlxuICogICAtIGB3YXRjaE9ubHlBY2NvdW50c2AgKG9wdGlvbmFsKTogVGhlc2UgYXJlIHRoZSBhY2NvdW50cyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHdhdGNoLW9ubHkgd2FsbGV0LlxuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHVwZGF0ZWQgd2FsbGV0IHJlc3BvbnNlIG9yIHRocm93aW5nIGFuIGVycm9yIGlmIHRoZSB1cGRhdGUgZmFpbHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVXYWxsZXRDb2luU3BlY2lmaWMoXG4gIHdhbGxldDogc2RrY29yZS5JV2FsbGV0LFxuICBwYXJhbXM6IFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3Rcbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBpZiAoIWlzTGlnaHRuaW5nQ29pbk5hbWUod2FsbGV0LmNvaW4oKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbnQgdXBkYXRlIGxpZ2h0bmluZyB3YWxsZXQgY29pbiBzcGVjaWZpYyBmb3IgY29pbiAke3dhbGxldC5zdWJUeXBlKCl9YCk7XG4gIH1cbiAgaWYgKHdhbGxldC5zdWJUeXBlKCkgIT09ICdsaWdodG5pbmdTZWxmQ3VzdG9keScpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbnQgdXBkYXRlIGxpZ2h0bmluZyB3YWxsZXQgY29pbiBzcGVjaWZpYyBmb3Igd2FsbGV0IHR5cGUgJHt3YWxsZXQuc3ViVHlwZSgpfWApO1xuICB9XG5cbiAgc2RrY29yZS5kZWNvZGVPckVsc2UoXG4gICAgVXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdC5uYW1lLFxuICAgIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QsXG4gICAgcGFyYW1zLFxuICAgIChlcnJvcnMpID0+IHtcbiAgICAgIC8vIERPTidUIHRocm93IGVycm9ycyBmcm9tIGRlY29kZU9yRWxzZS4gSXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1zIGZvciBsaWdodG5pbmcgc3BlY2lmaWMgdXBkYXRlIHdhbGxldGApO1xuICAgIH1cbiAgKTtcblxuICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHdhbGxldCk7XG4gIGNvbnN0IHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2ID0gdXNlckF1dGhLZXkuZW5jcnlwdGVkUHJ2O1xuICBpZiAoIXVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyIGF1dGgga2V5IGlzIG1pc3NpbmcgZW5jcnlwdGVkIHByaXZhdGUga2V5YCk7XG4gIH1cbiAgY29uc3QgdXBkYXRlUmVxdWVzdFdpdGhFbmNyeXB0aW9uID0gZW5jcnlwdFdhbGxldFVwZGF0ZVJlcXVlc3Qod2FsbGV0LCBwYXJhbXMsIHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KTtcbiAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICB1cGRhdGVSZXF1ZXN0V2l0aEVuY3J5cHRpb24sXG4gICAgd2FsbGV0LmJpdGdvLmRlY3J5cHQoeyBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsIGlucHV0OiB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiB9KVxuICApO1xuICBjb25zdCBjb2luU3BlY2lmaWMgPSB7XG4gICAgW3dhbGxldC5jb2luKCldOiB7XG4gICAgICBzaWduZWRSZXF1ZXN0OiB1cGRhdGVSZXF1ZXN0V2l0aEVuY3J5cHRpb24sXG4gICAgICBzaWduYXR1cmUsXG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHdhbGxldC5iaXRnby5wdXQod2FsbGV0LnVybCgpKS5zZW5kKHsgY29pblNwZWNpZmljIH0pLnJlc3VsdCgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZWxmQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IGV4dGVuZHMgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoYW5uZWwgYmFja3VwIGZvciB0aGUgZ2l2ZW4gd2FsbGV0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCYWNrdXBSZXNwb25zZT59IEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNoYW5uZWwgYmFja3VwXG4gICAqL1xuICBnZXRDaGFubmVsQmFja3VwKCk6IFByb21pc2U8QmFja3VwUmVzcG9uc2U+O1xufVxuXG5leHBvcnQgY2xhc3MgU2VsZkN1c3RvZGlhbExpZ2h0bmluZ1dhbGxldCBleHRlbmRzIExpZ2h0bmluZ1dhbGxldCBpbXBsZW1lbnRzIElTZWxmQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IHtcbiAgY29uc3RydWN0b3Iod2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpIHtcbiAgICBzdXBlcih3YWxsZXQpO1xuICAgIGlmICh3YWxsZXQuc3ViVHlwZSgpICE9PSAnbGlnaHRuaW5nU2VsZkN1c3RvZHknKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGlnaHRuaW5nIHdhbGxldCB0eXBlIGZvciBzZWxmIGN1c3RvZGlhbCBsaWdodG5pbmc6ICR7d2FsbGV0LnN1YlR5cGUoKX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDaGFubmVsQmFja3VwKCk6IFByb21pc2U8QmFja3VwUmVzcG9uc2U+IHtcbiAgICBjb25zdCBiYWNrdXBSZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJhc2VDb2luLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9iYWNrdXBgKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoQmFja3VwUmVzcG9uc2UubmFtZSwgQmFja3VwUmVzcG9uc2UsIGJhY2t1cFJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiYWNrdXAgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZkN1c3RvZGlhbExpZ2h0bmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93YWxsZXQvc2VsZkN1c3RvZGlhbExpZ2h0bmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4REEsNERBc0NDO0FBcEdELDhEQUFnRDtBQUNoRCxzQ0FBc0g7QUFDdEgsMkNBQTJGO0FBQzNGLDRDQUErRztBQUMvRyx5Q0FBMkI7QUFFM0IsS0FBSyxVQUFVLDBCQUEwQixDQUN2QyxNQUF1QixFQUN2QixNQUEwQyxFQUMxQyx1QkFBK0I7SUFFL0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBd0IsQ0FBQztJQUVyRCxNQUFNLHFCQUFxQixHQUF3RjtRQUNqSCxHQUFHLE1BQU07S0FDVixDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUNuRCxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDM0IsS0FBSyxFQUFFLHVCQUF1QjtLQUMvQixDQUFDLENBQUM7SUFFSCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixxQkFBcUIsQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1lBQzVFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUMzQixLQUFLLEVBQUUsTUFBTSxDQUFDLFlBQVk7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IscUJBQXFCLENBQUMsNEJBQTRCLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUNuRixRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDM0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxtQkFBbUI7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLHFCQUFxQixDQUFDLHVCQUF1QixHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDOUUsUUFBUSxFQUFFLElBQUEsOENBQWtDLEVBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDcEYsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsOENBQXFDLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0ksS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxNQUF1QixFQUN2QixNQUEwQztJQUUxQyxJQUFJLENBQUMsSUFBQSwrQkFBbUIsRUFBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLHNCQUFzQixFQUFFLENBQUM7UUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsT0FBTyxDQUFDLFlBQVksQ0FDbEIsMkNBQWtDLENBQUMsSUFBSSxFQUN2QywyQ0FBa0MsRUFDbEMsTUFBTSxFQUNOLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDVCw2RUFBNkU7UUFDN0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FDRixDQUFDO0lBRUYsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sSUFBQSxxQ0FBeUIsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxNQUFNLHVCQUF1QixHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFDekQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxNQUFNLDJCQUEyQixHQUFHLE1BQU0sMEJBQTBCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQzlHLE1BQU0sU0FBUyxHQUFHLElBQUEsa0NBQXNCLEVBQ3RDLDJCQUEyQixFQUMzQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FDakcsQ0FBQztJQUNGLE1BQU0sWUFBWSxHQUFHO1FBQ25CLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDZixhQUFhLEVBQUUsMkJBQTJCO1lBQzFDLFNBQVM7U0FDVjtLQUNGLENBQUM7SUFDRixPQUFPLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM5RSxDQUFDO0FBVUQsTUFBYSw0QkFBNkIsU0FBUSwyQkFBZTtJQUMvRCxZQUFZLE1BQXVCO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNkLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLHNCQUFzQixFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0I7UUFDcEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDM0MsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7YUFDN0UsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsdUJBQWMsQ0FBQyxJQUFJLEVBQUUsdUJBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN6RixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaEJELG9FQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNka2NvcmUgZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFja3VwUmVzcG9uc2UsIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QsIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldEVuY3J5cHRlZFJlcXVlc3QgfSBmcm9tICcuLi9jb2RlY3MnO1xuaW1wb3J0IHsgZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucywgSUxpZ2h0bmluZ1dhbGxldCwgTGlnaHRuaW5nV2FsbGV0IH0gZnJvbSAnLi9saWdodG5pbmcnO1xuaW1wb3J0IHsgY3JlYXRlTWVzc2FnZVNpZ25hdHVyZSwgZGVyaXZlTGlnaHRuaW5nU2VydmljZVNoYXJlZFNlY3JldCwgaXNMaWdodG5pbmdDb2luTmFtZSB9IGZyb20gJy4uL2xpZ2h0bmluZyc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcblxuYXN5bmMgZnVuY3Rpb24gZW5jcnlwdFdhbGxldFVwZGF0ZVJlcXVlc3QoXG4gIHdhbGxldDogc2RrY29yZS5JV2FsbGV0LFxuICBwYXJhbXM6IFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QsXG4gIHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2OiBzdHJpbmdcbik6IFByb21pc2U8VXBkYXRlTGlnaHRuaW5nV2FsbGV0RW5jcnlwdGVkUmVxdWVzdD4ge1xuICBjb25zdCBjb2luTmFtZSA9IHdhbGxldC5jb2luKCkgYXMgJ3RsbmJ0YycgfCAnbG5idGMnO1xuXG4gIGNvbnN0IHJlcXVlc3RXaXRoRW5jcnlwdGlvbjogUGFydGlhbDxVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0ICYgVXBkYXRlTGlnaHRuaW5nV2FsbGV0RW5jcnlwdGVkUmVxdWVzdD4gPSB7XG4gICAgLi4ucGFyYW1zLFxuICB9O1xuXG4gIGNvbnN0IHVzZXJBdXRoWHBydiA9IGF3YWl0IHdhbGxldC5iaXRnby5kZWNyeXB0QXN5bmMoe1xuICAgIHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICBpbnB1dDogdXNlckF1dGhLZXlFbmNyeXB0ZWRQcnYsXG4gIH0pO1xuXG4gIGlmIChwYXJhbXMuc2lnbmVyVGxzS2V5KSB7XG4gICAgcmVxdWVzdFdpdGhFbmNyeXB0aW9uLmVuY3J5cHRlZFNpZ25lclRsc0tleSA9IGF3YWl0IHdhbGxldC5iaXRnby5lbmNyeXB0QXN5bmMoe1xuICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgaW5wdXQ6IHBhcmFtcy5zaWduZXJUbHNLZXksXG4gICAgfSk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNpZ25lckFkbWluTWFjYXJvb24pIHtcbiAgICByZXF1ZXN0V2l0aEVuY3J5cHRpb24uZW5jcnlwdGVkU2lnbmVyQWRtaW5NYWNhcm9vbiA9IGF3YWl0IHdhbGxldC5iaXRnby5lbmNyeXB0QXN5bmMoe1xuICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgaW5wdXQ6IHBhcmFtcy5zaWduZXJBZG1pbk1hY2Fyb29uLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zaWduZXJNYWNhcm9vbikge1xuICAgIHJlcXVlc3RXaXRoRW5jcnlwdGlvbi5lbmNyeXB0ZWRTaWduZXJNYWNhcm9vbiA9IGF3YWl0IHdhbGxldC5iaXRnby5lbmNyeXB0QXN5bmMoe1xuICAgICAgcGFzc3dvcmQ6IGRlcml2ZUxpZ2h0bmluZ1NlcnZpY2VTaGFyZWRTZWNyZXQoY29pbk5hbWUsIHVzZXJBdXRoWHBydikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgaW5wdXQ6IHBhcmFtcy5zaWduZXJNYWNhcm9vbixcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0LmV4YWN0KFVwZGF0ZUxpZ2h0bmluZ1dhbGxldEVuY3J5cHRlZFJlcXVlc3QpLmVuY29kZShyZXF1ZXN0V2l0aEVuY3J5cHRpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNvaW4tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgYSBMaWdodG5pbmcgV2FsbGV0LlxuICpcbiAqIEBwYXJhbSB7V2FsbGV0fSB3YWxsZXQgLSBXYWxsZXQuXG4gKiBAcGFyYW0ge1VwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3R9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgd2FsbGV0LXNwZWNpZmljIGRldGFpbHMuXG4gKiAgIC0gYGVuY3J5cHRlZFNpZ25lck1hY2Fyb29uYCAob3B0aW9uYWwpOiBUaGlzIG1hY2Fyb29uIGlzIHVzZWQgYnkgdGhlIHdhdGNoLW9ubHkgbm9kZSB0byBhc2sgdGhlIHNpZ25lciBub2RlIHRvIHNpZ24gdHJhbnNhY3Rpb25zLlxuICogICAgIEVuY3J5cHRlZCB3aXRoIEVDREggc2VjcmV0IGtleSBmcm9tIHByaXZhdGUga2V5IG9mIHdhbGxldCdzIHVzZXIgYXV0aCBrZXkgYW5kIHB1YmxpYyBrZXkgb2YgbGlnaHRuaW5nIHNlcnZpY2UuXG4gKiAgIC0gYGVuY3J5cHRlZFNpZ25lckFkbWluTWFjYXJvb25gIChvcHRpb25hbCk6IEdlbmVyYXRlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgd2FsbGV0IG9mIHRoZSBzaWduZXIgbm9kZS5cbiAqICAgICBFbmNyeXB0ZWQgd2l0aCBjbGllbnQncyB3YWxsZXQgcGFzc3BocmFzZS5cbiAqICAgLSBgc2lnbmVySG9zdGAgKG9wdGlvbmFsKTogVGhlIGhvc3QgYWRkcmVzcyBvZiB0aGUgTGlnaHRuaW5nIHNpZ25lciBub2RlLlxuICogICAtIGBlbmNyeXB0ZWRTaWduZXJUbHNLZXlgIChvcHRpb25hbCk6IFRoZSB3YWxsZXQgcGFzc3BocmFzZSBlbmNyeXB0ZWQgVExTIGtleSBvZiB0aGUgc2lnbmVyLlxuICogICAtIGBwYXNzcGhyYXNlYCAocmVxdWlyZWQpOiBUaGUgd2FsbGV0IHBhc3NwaHJhc2UuXG4gKiAgIC0gYHNpZ25lclRsc0NlcnRgIChvcHRpb25hbCk6IFRoZSBUTFMgY2VydGlmaWNhdGUgb2YgdGhlIHNpZ25lci5cbiAqICAgLSBgd2F0Y2hPbmx5QWNjb3VudHNgIChvcHRpb25hbCk6IFRoZXNlIGFyZSB0aGUgYWNjb3VudHMgdXNlZCB0byBpbml0aWFsaXplIHRoZSB3YXRjaC1vbmx5IHdhbGxldC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSBBIHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB1cGRhdGVkIHdhbGxldCByZXNwb25zZSBvciB0aHJvd2luZyBhbiBlcnJvciBpZiB0aGUgdXBkYXRlIGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlV2FsbGV0Q29pblNwZWNpZmljKFxuICB3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCxcbiAgcGFyYW1zOiBVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0XG4pOiBQcm9taXNlPHVua25vd24+IHtcbiAgaWYgKCFpc0xpZ2h0bmluZ0NvaW5OYW1lKHdhbGxldC5jb2luKCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW50IHVwZGF0ZSBsaWdodG5pbmcgd2FsbGV0IGNvaW4gc3BlY2lmaWMgZm9yIGNvaW4gJHt3YWxsZXQuc3ViVHlwZSgpfWApO1xuICB9XG4gIGlmICh3YWxsZXQuc3ViVHlwZSgpICE9PSAnbGlnaHRuaW5nU2VsZkN1c3RvZHknKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW50IHVwZGF0ZSBsaWdodG5pbmcgd2FsbGV0IGNvaW4gc3BlY2lmaWMgZm9yIHdhbGxldCB0eXBlICR7d2FsbGV0LnN1YlR5cGUoKX1gKTtcbiAgfVxuXG4gIHNka2NvcmUuZGVjb2RlT3JFbHNlKFxuICAgIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QubmFtZSxcbiAgICBVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0LFxuICAgIHBhcmFtcyxcbiAgICAoZXJyb3JzKSA9PiB7XG4gICAgICAvLyBET04nVCB0aHJvdyBlcnJvcnMgZnJvbSBkZWNvZGVPckVsc2UuIEl0IGNvdWxkIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtcyBmb3IgbGlnaHRuaW5nIHNwZWNpZmljIHVwZGF0ZSB3YWxsZXRgKTtcbiAgICB9XG4gICk7XG5cbiAgY29uc3QgeyB1c2VyQXV0aEtleSB9ID0gYXdhaXQgZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucyh3YWxsZXQpO1xuICBjb25zdCB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiA9IHVzZXJBdXRoS2V5LmVuY3J5cHRlZFBydjtcbiAgaWYgKCF1c2VyQXV0aEtleUVuY3J5cHRlZFBydikge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXNlciBhdXRoIGtleSBpcyBtaXNzaW5nIGVuY3J5cHRlZCBwcml2YXRlIGtleWApO1xuICB9XG4gIGNvbnN0IHVwZGF0ZVJlcXVlc3RXaXRoRW5jcnlwdGlvbiA9IGF3YWl0IGVuY3J5cHRXYWxsZXRVcGRhdGVSZXF1ZXN0KHdhbGxldCwgcGFyYW1zLCB1c2VyQXV0aEtleUVuY3J5cHRlZFBydik7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUoXG4gICAgdXBkYXRlUmVxdWVzdFdpdGhFbmNyeXB0aW9uLFxuICAgIGF3YWl0IHdhbGxldC5iaXRnby5kZWNyeXB0QXN5bmMoeyBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsIGlucHV0OiB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiB9KVxuICApO1xuICBjb25zdCBjb2luU3BlY2lmaWMgPSB7XG4gICAgW3dhbGxldC5jb2luKCldOiB7XG4gICAgICBzaWduZWRSZXF1ZXN0OiB1cGRhdGVSZXF1ZXN0V2l0aEVuY3J5cHRpb24sXG4gICAgICBzaWduYXR1cmUsXG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHdhbGxldC5iaXRnby5wdXQod2FsbGV0LnVybCgpKS5zZW5kKHsgY29pblNwZWNpZmljIH0pLnJlc3VsdCgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZWxmQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IGV4dGVuZHMgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoYW5uZWwgYmFja3VwIGZvciB0aGUgZ2l2ZW4gd2FsbGV0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCYWNrdXBSZXNwb25zZT59IEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNoYW5uZWwgYmFja3VwXG4gICAqL1xuICBnZXRDaGFubmVsQmFja3VwKCk6IFByb21pc2U8QmFja3VwUmVzcG9uc2U+O1xufVxuXG5leHBvcnQgY2xhc3MgU2VsZkN1c3RvZGlhbExpZ2h0bmluZ1dhbGxldCBleHRlbmRzIExpZ2h0bmluZ1dhbGxldCBpbXBsZW1lbnRzIElTZWxmQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IHtcbiAgY29uc3RydWN0b3Iod2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpIHtcbiAgICBzdXBlcih3YWxsZXQpO1xuICAgIGlmICh3YWxsZXQuc3ViVHlwZSgpICE9PSAnbGlnaHRuaW5nU2VsZkN1c3RvZHknKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGlnaHRuaW5nIHdhbGxldCB0eXBlIGZvciBzZWxmIGN1c3RvZGlhbCBsaWdodG5pbmc6ICR7d2FsbGV0LnN1YlR5cGUoKX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDaGFubmVsQmFja3VwKCk6IFByb21pc2U8QmFja3VwUmVzcG9uc2U+IHtcbiAgICBjb25zdCBiYWNrdXBSZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJhc2VDb2luLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9iYWNrdXBgKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoQmFja3VwUmVzcG9uc2UubmFtZSwgQmFja3VwUmVzcG9uc2UsIGJhY2t1cFJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiYWNrdXAgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|