Socket
Socket
Sign inDemoInstall

deso-protocol

Package Overview
Dependencies
Maintainers
3
Versions
225
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

deso-protocol - npm Package Compare versions

Comparing version 2.1.1 to 2.1.2

2

package.json
{
"name": "deso-protocol",
"version": "2.1.1",
"version": "2.1.2",
"license": "MIT",

@@ -5,0 +5,0 @@ "description": "Client side typescript/javascript SDK for building web3 applications for the DeSo blockchain.",

@@ -33,2 +33,3 @@ import { KeyPair, Network, jwtAlgorithm } from './types.js';

export declare const bs58PublicKeyToBytes: (str: string) => Uint8Array;
export declare const isValidBS58PublicKey: (publicKey: string, isTestnet?: boolean) => boolean;
export declare const decryptChatMessage: (recipientSeedHex: string, publicDecryptionKey: string, cipherTextHex: string) => Promise<string>;

@@ -35,0 +36,0 @@ export declare const decrypt: (privateDecryptionKey: Uint8Array | string, cipherTextHex: string) => Promise<string>;

@@ -205,2 +205,17 @@ import { sha256 } from '@noble/hashes/sha256';

};
const regexMainnet = /^BC[1-9A-HJ-NP-Za-km-z]{53}$/;
const regexTestnet = /^tBC[1-9A-HJ-NP-Za-km-z]{51}$/;
export const isValidBS58PublicKey = (publicKey, isTestnet = false) => {
const regexPattern = isTestnet ? regexTestnet : regexMainnet;
if (!regexPattern.test(publicKey)) {
return false;
}
try {
bs58PublicKeyToBytes(publicKey);
return true;
}
catch (e) {
return false;
}
};
const isValidHmac = (candidate, knownGood) => {

@@ -320,2 +335,2 @@ if (candidate.length !== knownGood.length) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lkZW50aXR5L2NyeXB0by11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUNMLEtBQUssRUFDTCxJQUFJLElBQUksTUFBTSxFQUNkLEtBQUssSUFBSSxPQUFPLEVBQ2hCLFlBQVksRUFDWixlQUFlLElBQUksb0JBQW9CLEdBQ3hDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc3RCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQW9CLEVBQUUsTUFBZTtJQUNyRSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMvRDtJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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TUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0UsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ0Bub2JsZS9oYXNoZXMvc2hhMjU2JztcbmltcG9ydCB7XG4gIFBvaW50LFxuICBzaWduIGFzIGVjU2lnbixcbiAgdXRpbHMgYXMgZWNVdGlscyxcbiAgZ2V0UHVibGljS2V5LFxuICBnZXRTaGFyZWRTZWNyZXQgYXMgbm9ibGVHZXRTaGFyZWRTZWNyZXQsXG59IGZyb20gJ0Bub2JsZS9zZWNwMjU2azEnO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBQVUJMSUNfS0VZX1BSRUZJWEVTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25WMCB9IGZyb20gJy4vdHJhbnNhY3Rpb24tdHJhbnNjb2RlcnMuanMnO1xuaW1wb3J0IHsgS2V5UGFpciwgTmV0d29yaywgand0QWxnb3JpdGhtIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIEJyb3dzZXIgZnJpZW5kbHkgdmVyc2lvbiBvZiBub2RlJ3MgQnVmZmVyLmNvbmNhdC5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRVaW50OEFycmF5cyhhcnJheXM6IFVpbnQ4QXJyYXlbXSwgbGVuZ3RoPzogbnVtYmVyKSB7XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IGFycmF5cy5yZWR1Y2UoKGFjYywgYXJyYXkpID0+IGFjYyArIGFycmF5Lmxlbmd0aCwgMCk7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9mZnNldCArIGFycmF5c1tpXS5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5zZXQoYXJyYXlzW2ldLnNsaWNlKDAsIGxlbmd0aCAtIG9mZnNldCksIG9mZnNldCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0LnNldChhcnJheXNbaV0sIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IGFycmF5c1tpXS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHV2YXJpbnQ2NFRvQnVmID0gKHVpbnQ6IG51bWJlcik6IFVpbnQ4QXJyYXkgPT4ge1xuICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG4gIHdoaWxlICh1aW50ID49IDB4ODApIHtcbiAgICByZXN1bHQucHVzaChOdW1iZXIoKEJpZ0ludCh1aW50KSAmIEJpZ0ludCgweGZmKSkgfCBCaWdJbnQoMHg4MCkpKTtcbiAgICB1aW50ID0gTnVtYmVyKEJpZ0ludCh1aW50KSA+PiBCaWdJbnQoNykpO1xuICB9XG4gIHJlc3VsdC5wdXNoKHVpbnQgfCAwKTtcblxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBidWZUb1V2YXJpbnQ2NCA9IChidWZmZXI6IFVpbnQ4QXJyYXkpOiBbbnVtYmVyLCBVaW50OEFycmF5XSA9PiB7XG4gIGxldCB4ID0gQmlnSW50KDApO1xuICBsZXQgcyA9IEJpZ0ludCgwKTtcblxuICAvLyBUT0RPOiBmaXggbGludGluZyBlcnJvclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gIGZvciAobGV0IGkgPSAwOyB0cnVlOyBpKyspIHtcbiAgICBjb25zdCBieXRlID0gYnVmZmVyW2ldO1xuXG4gICAgaWYgKGkgPiA5IHx8IChpID09IDkgJiYgYnl0ZSA+IDEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VpbnQ2NCBvdmVyZmxvdycpO1xuICAgIH1cblxuICAgIGlmIChieXRlIDwgMHg4MCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTnVtYmVyKEJpZ0ludCh4KSB8IChCaWdJbnQoYnl0ZSkgPDwgQmlnSW50KHMpKSksXG4gICAgICAgIGJ1ZmZlci5zbGljZShpICsgMSksXG4gICAgICBdO1xuICAgIH1cblxuICAgIHggfD0gQmlnSW50KGJ5dGUgJiAweDdmKSA8PCBCaWdJbnQocyk7XG4gICAgcyArPSBCaWdJbnQoNyk7XG4gIH1cbn07XG5cbmludGVyZmFjZSBCYXNlNThDaGVja09wdGlvbnMge1xuICBuZXR3b3JrOiBOZXR3b3JrO1xufVxuXG4vLyBXZSBhcmUgbm90IHVzaW5nIHRoZSBuYXRpdmUgd2ViIGNyeXB0byBBUEkgdG8gYWN0dWFsbHkgZ2VuZXJhdGUga2V5c1xuLy8gYmVjYXVzZSBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNwMjU2azEgY3VydmUuIEluc3RlYWQsIHdlIGFyZSB1c2luZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9ub2JsZS1zZWNwMjU2azEgd2hpY2ggaXMgYSBicm93c2VyIGZyaWVuZGx5XG4vLyBhbHRlcm5hdGl2ZSB0byB0aGUgbm9kZSBlbGxpcHRpYyBwYWNrYWdlIHdoaWNoIGlzIGZhciBzbWFsbGVyIGFuZCBvbmx5XG4vLyBmb2N1c2VzIG9uIHN1cHBvcnRpbmcgdGhlIGVjIGFsZ29yaXRobSB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbiBoZXJlLlxuLy8gSWYgdGhlIHdlYiBjcnlwdG8gQVBJIGV2ZXIgYWRkcyBzdXBwb3J0IGZvciBzZWNwMjU2azEsIHdlIHNob3VsZCBjaGFuZ2Vcbi8vIHRoaXMgdG8gdXNlIGl0LlxuLy9cbi8vIFNlZSB0aGUgZm9sbG93aW5nIGZvciBtb3JlIGluZm86XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYmNyeXB0by9pc3N1ZXMvODJcbi8vXG4vLyBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhIHNlZWQsIGEgcmFuZG9tIG9uZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgeW91IGFuZCBhXG4vLyByYW5kb20ga2V5IHBhaXIgd2lsbCBiZSByZXR1cm5lZC4gSWYgeW91IGRvIHByb3ZpZGUgYSBzZWVkLCBpdCBzaG91bGQgYmUgYVxuLy8gcmFuZG9tbHkgZ2VuZXJhdGVkIDMyIGJ5dGUgdmFsdWUgKFVpbnQ4QXJyYXkgb2YgbGVuZ3RoIDMyIG9yIGhleCBzdHJpbmcgb2Zcbi8vIGxlbmd0aCA2NClcbmV4cG9ydCBjb25zdCBrZXlnZW4gPSAoc2VlZD86IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBLZXlQYWlyID0+IHtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IHNlZWQgPyBub3JtYWxpemVTZWVkKHNlZWQpIDogZWNVdGlscy5yYW5kb21CeXRlcygzMik7XG4gIGNvbnN0IHNlZWRIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgocHJpdmF0ZUtleSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzZWVkSGV4LFxuICAgIHByaXZhdGU6IHByaXZhdGVLZXksXG4gICAgcHVibGljOiBnZXRQdWJsaWNLZXkocHJpdmF0ZUtleSwgdHJ1ZSAvKiBpc0NvbXByZXNzZWQgKi8pLFxuICB9O1xufTtcblxuY29uc3Qgbm9ybWFsaXplU2VlZCA9IChzZWVkOiBzdHJpbmcgfCBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gIGlmICh0eXBlb2Ygc2VlZCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZWNVdGlscy5oZXhUb0J5dGVzKHNlZWQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZWVkO1xuICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YSBjb3VsZCBiZSBhIGhleCBzdHJpbmcgb3IgYSBieXRlIGFycmF5IChVaW50OEFycmF5KVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNoYTI1NlgyID0gKGRhdGE6IFVpbnQ4QXJyYXkgfCBzdHJpbmcpOiBVaW50OEFycmF5ID0+IHtcbiAgY29uc3QgZCA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IGVjVXRpbHMuaGV4VG9CeXRlcyhkYXRhKSA6IGRhdGE7XG4gIHJldHVybiBzaGEyNTYoc2hhMjU2KGQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNLZXlUb0Jhc2U1OENoZWNrID0gKFxuICBwdWJsaWNLZXlCeXRlczogVWludDhBcnJheSxcbiAgb3B0aW9ucz86IEJhc2U1OENoZWNrT3B0aW9uc1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcHJlZml4ID0gUFVCTElDX0tFWV9QUkVGSVhFU1tvcHRpb25zPy5uZXR3b3JrID8/ICdtYWlubmV0J10uZGVzbztcbiAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgaW1wbGVtZW50YXRpb24gaW4gdGhlIGJzNThjaGVjayBwYWNrYWdlLCBidXQgd2VcbiAgLy8gc2xpZ2h0bHkgbW9kaWZ5IGl0IHRvIHVzZSB0aGUgYnJvd3NlciBmcmllbmRseSB2ZXJzaW9uIG9mIEJ1ZmZlci5jb25jYXQuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW5qcy9iczU4Y2hlY2svYmxvYi8xMmIzZTcwMGYzNTVjNWM0OWQwYmUzZjhmYzI5YmU2YzY2ZTc1M2U5L2Jhc2UuanMjTDFcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShbLi4ucHJlZml4LCAuLi5wdWJsaWNLZXlCeXRlc10pO1xuICBjb25zdCBjaGVja3N1bSA9IHNoYTI1NlgyKGJ5dGVzKTtcbiAgcmV0dXJuIGJzNTguZW5jb2RlKGNvbmNhdFVpbnQ4QXJyYXlzKFtieXRlcywgY2hlY2tzdW1dLCBieXRlcy5sZW5ndGggKyA0KSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25PcHRpb25zIHtcbiAgaXNEZXJpdmVkS2V5OiBib29sZWFuO1xufVxuXG5jb25zdCBzaWduID0gKG1zZ0hhc2hIZXg6IHN0cmluZywgcHJpdmF0ZUtleTogVWludDhBcnJheSkgPT4ge1xuICByZXR1cm4gZWNTaWduKG1zZ0hhc2hIZXgsIHByaXZhdGVLZXksIHtcbiAgICAvLyBGb3IgZGV0YWlscyBhYm91dCB0aGUgc2lnbmluZyBvcHRpb25zIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9ub2JsZS1zZWNwMjU2azEjc2lnbm1zZ2hhc2gtcHJpdmF0ZWtleVxuICAgIGNhbm9uaWNhbDogdHJ1ZSxcbiAgICBkZXI6IHRydWUsXG4gICAgZXh0cmFFbnRyb3B5OiB0cnVlLFxuICAgIHJlY292ZXJlZDogdHJ1ZSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnblR4ID0gYXN5bmMgKFxuICB0eEhleDogc3RyaW5nLFxuICBzZWVkSGV4OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBTaWduT3B0aW9uc1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgdHJhbnNhY3Rpb25CeXRlcyA9IGVjVXRpbHMuaGV4VG9CeXRlcyh0eEhleCk7XG4gIGNvbnN0IFtfLCB2MUZpZWxkc0J1ZmZlcl0gPSBUcmFuc2FjdGlvblYwLmZyb21CeXRlcyh0cmFuc2FjdGlvbkJ5dGVzKTtcbiAgY29uc3Qgc2lnbmF0dXJlSW5kZXggPSB0cmFuc2FjdGlvbkJ5dGVzLmxlbmd0aCAtIHYxRmllbGRzQnVmZmVyLmxlbmd0aCAtIDE7XG4gIGNvbnN0IHYwRmllbGRzV2l0aG91dFNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQnl0ZXMuc2xpY2UoMCwgc2lnbmF0dXJlSW5kZXgpO1xuICBjb25zdCBoYXNoZWRUeEJ5dGVzID0gc2hhMjU2WDIodHJhbnNhY3Rpb25CeXRlcyk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uSGFzaEhleCA9IGVjVXRpbHMuYnl0ZXNUb0hleChoYXNoZWRUeEJ5dGVzKTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMuaGV4VG9CeXRlcyhzZWVkSGV4KTtcbiAgY29uc3QgW3NpZ25hdHVyZUJ5dGVzLCByZWNvdmVyeVBhcmFtXSA9IGF3YWl0IHNpZ24oXG4gICAgdHJhbnNhY3Rpb25IYXNoSGV4LFxuICAgIHByaXZhdGVLZXlcbiAgKTtcblxuICBjb25zdCBzaWduYXR1cmVMZW5ndGggPSB1dmFyaW50NjRUb0J1ZihzaWduYXR1cmVCeXRlcy5sZW5ndGgpO1xuXG4gIGlmIChvcHRpb25zPy5pc0Rlcml2ZWRLZXkpIHtcbiAgICBzaWduYXR1cmVCeXRlc1swXSArPSAxICsgcmVjb3ZlcnlQYXJhbTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uQnl0ZXMgPSBlY1V0aWxzLmNvbmNhdEJ5dGVzKFxuICAgIHYwRmllbGRzV2l0aG91dFNpZ25hdHVyZSxcbiAgICBzaWduYXR1cmVMZW5ndGgsXG4gICAgc2lnbmF0dXJlQnl0ZXMsXG4gICAgdjFGaWVsZHNCdWZmZXJcbiAgKTtcblxuICByZXR1cm4gZWNVdGlscy5ieXRlc1RvSGV4KHNpZ25lZFRyYW5zYWN0aW9uQnl0ZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNpZ25lZEpXVCA9IGFzeW5jIChcbiAgc2VlZEhleDogc3RyaW5nLFxuICBhbGc6IGp3dEFsZ29yaXRobSxcbiAge1xuICAgIGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICAvLyBUT0RPOiBhY3R1YWxseSBzdXBwb3J0IHRoaXMuLi4gb3IgcmVtb3ZlIGl0LlxuICAgIGV4cGlyYXRpb24sXG4gIH06IHtcbiAgICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2s/OiBzdHJpbmc7XG4gICAgZXhwaXJhdGlvbj86IG51bWJlcjtcbiAgfVxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgaGVhZGVyID0gSlNPTi5zdHJpbmdpZnkoeyBhbGcsIHR5cDogJ0pXVCcgfSk7XG4gIGNvbnN0IGlzc3VlZEF0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIGNvbnN0IHRoaXJ0eU1pbkZyb21Ob3cgPSBpc3N1ZWRBdCArIDMwICogNjA7XG4gIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgLi4uKGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayA/IHsgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrIH0gOiB7fSksXG4gICAgaWF0OiBpc3N1ZWRBdCxcbiAgICBleHA6IHRoaXJ0eU1pbkZyb21Ob3csXG4gIH0pO1xuXG4gIGNvbnN0IGp3dCA9IGAke3VybFNhZmVCYXNlNjQoaGVhZGVyKX0uJHt1cmxTYWZlQmFzZTY0KHBheWxvYWQpfWA7XG4gIGNvbnN0IFtzaWduYXR1cmVdID0gYXdhaXQgc2lnbihcbiAgICBlY1V0aWxzLmJ5dGVzVG9IZXgoc2hhMjU2KG5ldyBVaW50OEFycmF5KG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShqd3QpKSkpLFxuICAgIGVjVXRpbHMuaGV4VG9CeXRlcyhzZWVkSGV4KVxuICApO1xuICBjb25zdCBlbmNvZGVkU2lnbmF0dXJlID0gZGVyVG9Kb3NlRW5jb2Rpbmcoc2lnbmF0dXJlKTtcblxuICByZXR1cm4gYCR7and0fS4ke2VuY29kZWRTaWduYXR1cmV9YDtcbn07XG5cbmZ1bmN0aW9uIHVybFNhZmVCYXNlNjQoc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHdpbmRvd1xuICAgIC5idG9hKHN0cilcbiAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAucmVwbGFjZSgvPS9nLCAnJyk7XG59XG5cbmV4cG9ydCBjb25zdCBlbmNyeXB0Q2hhdE1lc3NhZ2UgPSAoXG4gIHNlbmRlclNlZWRIZXg6IHN0cmluZyxcbiAgcmVjaXBpZW50UHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nXG4pID0+IHtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMuaGV4VG9CeXRlcyhzZW5kZXJTZWVkSGV4KTtcbiAgY29uc3QgcmVjaXBpZW50UHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQnl0ZXMoXG4gICAgcmVjaXBpZW50UHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgY29uc3Qgc2hhcmVkUHJpdmF0ZUtleSA9IGdldFNoYXJlZFByaXZhdGVLZXkocHJpdmF0ZUtleSwgcmVjaXBpZW50UHVibGljS2V5KTtcbiAgY29uc3Qgc2hhcmVkUHVibGljS2V5ID0gZ2V0UHVibGljS2V5KHNoYXJlZFByaXZhdGVLZXkpO1xuXG4gIHJldHVybiBlbmNyeXB0KHNoYXJlZFB1YmxpY0tleSwgbWVzc2FnZSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSBwdWJsaWNFbmNyeXB0aW9uS2V5IGNvdWxkIGJlIGluIHJhdyBieXRlcyBvciBiYXNlNThjaGVjayBmb3JtYXRcbiAqIEBwYXJhbSBwbGFpbnRleHRcbiAqIEByZXR1cm5zIGNpcGhlciB0ZXh0IGFzIGEgaGV4IHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IGFzeW5jIChcbiAgcHVibGljS2V5OiBVaW50OEFycmF5IHwgc3RyaW5nLFxuICBwbGFpbnRleHQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgZXBoZW1Qcml2YXRlS2V5ID0gZWNVdGlscy5yYW5kb21CeXRlcygzMik7XG4gIGNvbnN0IGVwaGVtUHVibGljS2V5ID0gZ2V0UHVibGljS2V5KGVwaGVtUHJpdmF0ZUtleSk7XG4gIGNvbnN0IHB1YmxpY0tleUJ5dGVzID1cbiAgICB0eXBlb2YgcHVibGljS2V5ID09PSAnc3RyaW5nJyA/IGJzNThQdWJsaWNLZXlUb0J5dGVzKHB1YmxpY0tleSkgOiBwdWJsaWNLZXk7XG4gIGNvbnN0IHByaXZLZXkgPSBnZXRTaGFyZWRQcml2YXRlS2V5KGVwaGVtUHJpdmF0ZUtleSwgcHVibGljS2V5Qnl0ZXMpO1xuICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcHJpdktleS5zbGljZSgwLCAxNik7XG4gIGNvbnN0IGl2ID0gZWNVdGlscy5yYW5kb21CeXRlcygxNik7XG4gIGNvbnN0IG1hY0tleSA9IHNoYTI1Nihwcml2S2V5LnNsaWNlKDE2KSk7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBsYWludGV4dCk7XG4gIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgJ3JhdycsXG4gICAgZW5jcnlwdGlvbktleSxcbiAgICAnQUVTLUNUUicsXG4gICAgdHJ1ZSxcbiAgICBbJ2VuY3J5cHQnXVxuICApO1xuICBjb25zdCBjaXBoZXJCeXRlcyA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgIHtcbiAgICAgIG5hbWU6ICdBRVMtQ1RSJyxcbiAgICAgIGNvdW50ZXI6IGl2LFxuICAgICAgbGVuZ3RoOiAxMjgsXG4gICAgfSxcbiAgICBjcnlwdG9LZXksXG4gICAgYnl0ZXNcbiAgKTtcbiAgY29uc3QgaG1hYyA9IGF3YWl0IGVjVXRpbHMuaG1hY1NoYTI1NihcbiAgICBtYWNLZXksXG4gICAgbmV3IFVpbnQ4QXJyYXkoWy4uLml2LCAuLi5uZXcgVWludDhBcnJheShjaXBoZXJCeXRlcyldKVxuICApO1xuXG4gIHJldHVybiBlY1V0aWxzLmJ5dGVzVG9IZXgoXG4gICAgbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgLi4uZXBoZW1QdWJsaWNLZXksXG4gICAgICAuLi5pdixcbiAgICAgIC4uLm5ldyBVaW50OEFycmF5KGNpcGhlckJ5dGVzKSxcbiAgICAgIC4uLmhtYWMsXG4gICAgXSlcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMzMpO1xuICB9XG4gIGNvbnN0IHB1YktleVVuY29tcHJlc3NlZCA9IGJzNThQdWJsaWNLZXlUb0J5dGVzKHN0cik7XG4gIHJldHVybiBQb2ludC5mcm9tSGV4KGVjVXRpbHMuYnl0ZXNUb0hleChwdWJLZXlVbmNvbXByZXNzZWQpKS50b1Jhd0J5dGVzKHRydWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGJzNThQdWJsaWNLZXlUb0J5dGVzID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGJ5dGVzID0gYnM1OC5kZWNvZGUoc3RyKTtcbiAgY29uc3QgcGF5bG9hZCA9IGJ5dGVzLnNsaWNlKDAsIC00KTtcbiAgY29uc3QgY2hlY2tzdW1BID0gYnl0ZXMuc2xpY2UoLTQpO1xuICBjb25zdCBjaGVja3N1bUIgPSBzaGEyNTZYMihwYXlsb2FkKTtcblxuICBpZiAoXG4gICAgKGNoZWNrc3VtQVswXSBeIGNoZWNrc3VtQlswXSkgfFxuICAgIChjaGVja3N1bUFbMV0gXiBjaGVja3N1bUJbMV0pIHxcbiAgICAoY2hlY2tzdW1BWzJdIF4gY2hlY2tzdW1CWzJdKSB8XG4gICAgKGNoZWNrc3VtQVszXSBeIGNoZWNrc3VtQlszXSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoZWNrc3VtJyk7XG4gIH1cblxuICByZXR1cm4gUG9pbnQuZnJvbUhleChlY1V0aWxzLmJ5dGVzVG9IZXgocGF5bG9hZC5zbGljZSgzKSkpLnRvUmF3Qnl0ZXMoZmFsc2UpO1xufTtcblxuY29uc3QgaXNWYWxpZEhtYWMgPSAoY2FuZGlkYXRlOiBVaW50OEFycmF5LCBrbm93bkdvb2Q6IFVpbnQ4QXJyYXkpID0+IHtcbiAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggIT09IGtub3duR29vZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtub3duR29vZC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjYW5kaWRhdGVbaV0gIT09IGtub3duR29vZFtpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY3J5cHRDaGF0TWVzc2FnZSA9IGFzeW5jIChcbiAgcmVjaXBpZW50U2VlZEhleDogc3RyaW5nLFxuICBwdWJsaWNEZWNyeXB0aW9uS2V5OiBzdHJpbmcsXG4gIGNpcGhlclRleHRIZXg6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMocmVjaXBpZW50U2VlZEhleCk7XG4gIGNvbnN0IHB1YmxpY0tleSA9IGF3YWl0IGJzNThQdWJsaWNLZXlUb0J5dGVzKHB1YmxpY0RlY3J5cHRpb25LZXkpO1xuICBjb25zdCBzaGFyZWRQcml2YXRlS2V5ID0gYXdhaXQgZ2V0U2hhcmVkUHJpdmF0ZUtleShwcml2YXRlS2V5LCBwdWJsaWNLZXkpO1xuICByZXR1cm4gZGVjcnlwdChzaGFyZWRQcml2YXRlS2V5LCBjaXBoZXJUZXh0SGV4KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gYXN5bmMgKFxuICBwcml2YXRlRGVjcnlwdGlvbktleTogVWludDhBcnJheSB8IHN0cmluZyxcbiAgY2lwaGVyVGV4dEhleDogc3RyaW5nXG4pID0+IHtcbiAgY29uc3QgY2lwaGVyQnl0ZXMgPSBlY1V0aWxzLmhleFRvQnl0ZXMoY2lwaGVyVGV4dEhleCk7XG4gIGNvbnN0IG1ldGFMZW5ndGggPSAxMTM7XG5cbiAgaWYgKGNpcGhlckJ5dGVzLmxlbmd0aCA8IG1ldGFMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lwaGVyIHRleHQuIGRhdGEgdG9vIHNtYWxsLicpO1xuICB9XG5cbiAgaWYgKCEoY2lwaGVyQnl0ZXNbMF0gPj0gMiAmJiBjaXBoZXJCeXRlc1swXSA8PSA0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjaXBoZXIgdGV4dC4nKTtcbiAgfVxuXG4gIGNvbnN0IHByaXZhdGVLZXkgPSBub3JtYWxpemVTZWVkKHByaXZhdGVEZWNyeXB0aW9uS2V5KTtcbiAgY29uc3QgZXBoZW1QdWJsaWNLZXkgPSBjaXBoZXJCeXRlcy5zbGljZSgwLCA2NSk7XG4gIGNvbnN0IGNpcGhlclRleHRMZW5ndGggPSBjaXBoZXJCeXRlcy5sZW5ndGggLSBtZXRhTGVuZ3RoO1xuICBjb25zdCBpdiA9IGNpcGhlckJ5dGVzLnNsaWNlKDY1LCA2NSArIDE2KTtcbiAgY29uc3QgY2lwaGVyQW5kSXYgPSBjaXBoZXJCeXRlcy5zbGljZSg2NSwgNjUgKyAxNiArIGNpcGhlclRleHRMZW5ndGgpO1xuICBjb25zdCBjaXBoZXJUZXh0ID0gY2lwaGVyQW5kSXYuc2xpY2UoMTYpO1xuICBjb25zdCBtc2dNYWMgPSBjaXBoZXJCeXRlcy5zbGljZSg2NSArIDE2ICsgY2lwaGVyVGV4dExlbmd0aCk7XG4gIGNvbnN0IHNoYXJlZFNlY3JldEtleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkocHJpdmF0ZUtleSwgZXBoZW1QdWJsaWNLZXkpO1xuICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gc2hhcmVkU2VjcmV0S2V5LnNsaWNlKDAsIDE2KTtcbiAgY29uc3QgbWFjS2V5ID0gc2hhMjU2KHNoYXJlZFNlY3JldEtleS5zbGljZSgxNikpO1xuICBjb25zdCBobWFjS25vd25Hb29kID0gYXdhaXQgZWNVdGlscy5obWFjU2hhMjU2KG1hY0tleSwgY2lwaGVyQW5kSXYpO1xuXG4gIGlmICghaXNWYWxpZEhtYWMobXNnTWFjLCBobWFjS25vd25Hb29kKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb3JyZWN0IE1BQycpO1xuICB9XG5cbiAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmltcG9ydEtleShcbiAgICAncmF3JyxcbiAgICBlbmNyeXB0aW9uS2V5LFxuICAgICdBRVMtQ1RSJyxcbiAgICB0cnVlLFxuICAgIFsnZGVjcnlwdCddXG4gICk7XG5cbiAgY29uc3QgZGVjcnlwdGVkQnVmZmVyID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAgeyBuYW1lOiAnQUVTLUNUUicsIGNvdW50ZXI6IGl2LCBsZW5ndGg6IDEyOCB9LFxuICAgIGNyeXB0b0tleSxcbiAgICBjaXBoZXJUZXh0XG4gICk7XG5cbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkZWNyeXB0ZWRCdWZmZXIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXJlZFByaXZhdGVLZXkgPSAoXG4gIHByaXZLZXk6IFVpbnQ4QXJyYXksXG4gIHB1YktleTogVWludDhBcnJheVxuKSA9PiB7XG4gIGNvbnN0IHNoYXJlZFNlY3JldCA9IGdldFNoYXJlZFNlY3JldChwcml2S2V5LCBwdWJLZXkpO1xuXG4gIHJldHVybiBrZGYoc2hhcmVkU2VjcmV0LCAzMik7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb2RlUHVibGljS2V5ID0gYXN5bmMgKHB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZGVjb2RlZCA9IGF3YWl0IGJzNThQdWJsaWNLZXlUb0J5dGVzKHB1YmxpY0tleUJhc2U1OENoZWNrKTtcbiAgY29uc3Qgd2l0aFByZWZpeFJlbW92ZWQgPSBkZWNvZGVkLnNsaWNlKDMpO1xuICBjb25zdCBzZW5kZXJQdWJLZXlIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgod2l0aFByZWZpeFJlbW92ZWQpO1xuXG4gIHJldHVybiBQb2ludC5mcm9tSGV4KHNlbmRlclB1YktleUhleCkudG9SYXdCeXRlcyhmYWxzZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2hhcmVkU2VjcmV0ID0gKHByaXZLZXk6IFVpbnQ4QXJyYXksIHB1YktleTogVWludDhBcnJheSkgPT4ge1xuICAvLyBwYXNzaW5nIHRydWUgdG8gY29tcHJlc3MgdGhlIHB1YmxpYyBrZXksIGFuZCB0aGVuIHNsaWNpbmcgb2ZmIHRoZSBmaXJzdCBieXRlXG4gIC8vIG1hdGNoZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGRlcml2ZSBpbiB0aGUgZWxsaXB0aWMgcGFja2FnZS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9ub2JsZS1zZWNwMjU2azEvaXNzdWVzLzI4I2lzc3VlY29tbWVudC05NDY1MzgwMzdcbiAgcmV0dXJuIG5vYmxlR2V0U2hhcmVkU2VjcmV0KHByaXZLZXksIHB1YktleSwgdHJ1ZSkuc2xpY2UoMSk7XG59O1xuXG4vLyB0YWtlbiBmcm9tIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgZGVzbyBjaGF0IGFwcDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXNvLXByb3RvY29sL2FjY2Vzcy1ncm91cC1tZXNzYWdpbmctYXBwL2Jsb2IvY2Q1YzIzN2Y1ZTU3MjkxOTZhYWMwZGExNjFkMDg1MWJkZTc4MDkyYy9zcmMvc2VydmljZXMvY3J5cHRvLXV0aWxzLnNlcnZpY2UudHN4I0w5MVxuZXhwb3J0IGNvbnN0IGtkZiA9IChzZWNyZXQ6IFVpbnQ4QXJyYXksIG91dHB1dExlbmd0aDogbnVtYmVyKSA9PiB7XG4gIGxldCBjdHIgPSAxO1xuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgpO1xuXG4gIHdoaWxlICh3cml0dGVuIDwgb3V0cHV0TGVuZ3RoKSB7XG4gICAgY29uc3QgaGFzaCA9IHNoYTI1NihcbiAgICAgIG5ldyBVaW50OEFycmF5KFtcbiAgICAgICAgLi4ubmV3IFVpbnQ4QXJyYXkoW2N0ciA+PiAyNCwgY3RyID4+IDE2LCBjdHIgPj4gOCwgY3RyXSksXG4gICAgICAgIC4uLnNlY3JldCxcbiAgICAgIF0pXG4gICAgKTtcbiAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShbLi4ucmVzdWx0LCAuLi5oYXNoXSk7XG4gICAgd3JpdHRlbiArPSAzMjtcbiAgICBjdHIgKz0gMTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBUaGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZGVyVG9Kb3NlIGZ1bmN0aW9uIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9CcmlnaHRzcGFjZS9ub2RlLWVjZHNhLXNpZy1mb3JtYXR0ZXIvYmxvYi9jYTI1YTJmZDVhZTlkZDg1MDM2MDgxNjMyOTM2ZTgwMmE0N2ExMjg5L3NyYy9lY2RzYS1zaWctZm9ybWF0dGVyLmpzI0wzMlxuLy8gVGhlIG9yaWdpbmFsIHBhY2thZ2UgaXMgbm90IGJyb3dzZXIgZnJpZW5kbHkgYW5kIHJlcXVpcmVzIG5vZGUgcG9seWZpbGxzLiBXZVxuLy8gYWxzbyBkb24ndCBuZWVkIHRvIGJlIHF1aXRlIGFzIGRlZmVuc2l2ZSBhcyB0aGUgb3JpZ2luYWwgcGFja2FnZSBzaW5jZSB3ZVxuLy8gaGF2ZSBmdWxsIGNvbnRyb2wgb2YgdGhlIGlucHV0LlxuZnVuY3Rpb24gZGVyVG9Kb3NlRW5jb2Rpbmcoc2lnbmF0dXJlOiBVaW50OEFycmF5KSB7XG4gIGNvbnN0IHBhcmFtQnl0ZXMgPSAzMjtcblxuICBsZXQgb2Zmc2V0ID0gMztcbiAgY29uc3Qgckxlbmd0aCA9IHNpZ25hdHVyZVtvZmZzZXRdO1xuICBvZmZzZXQgKz0gMTtcbiAgY29uc3Qgck9mZnNldCA9IG9mZnNldDtcbiAgb2Zmc2V0ICs9IHJMZW5ndGggKyAxO1xuICBjb25zdCBzTGVuZ3RoID0gc2lnbmF0dXJlW29mZnNldF07XG4gIG9mZnNldCArPSAxO1xuICBjb25zdCBzT2Zmc2V0ID0gb2Zmc2V0O1xuICBvZmZzZXQgKz0gc0xlbmd0aDtcblxuICBjb25zdCByUGFkZGluZyA9IHBhcmFtQnl0ZXMgLSByTGVuZ3RoO1xuICBjb25zdCBzUGFkZGluZyA9IHBhcmFtQnl0ZXMgLSBzTGVuZ3RoO1xuXG4gIGNvbnN0IG91dFB1dCA9IG5ldyBVaW50OEFycmF5KHJQYWRkaW5nICsgckxlbmd0aCArIHNQYWRkaW5nICsgc0xlbmd0aCk7XG5cbiAgZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCByUGFkZGluZzsgKytvZmZzZXQpIHtcbiAgICBvdXRQdXRbb2Zmc2V0XSA9IDA7XG4gIH1cblxuICBvdXRQdXQuc2V0KFxuICAgIHNpZ25hdHVyZS5zbGljZShyT2Zmc2V0ICsgTWF0aC5tYXgoLXJQYWRkaW5nLCAwKSwgck9mZnNldCArIHJMZW5ndGgpLFxuICAgIG9mZnNldFxuICApO1xuXG4gIG9mZnNldCA9IHBhcmFtQnl0ZXM7XG5cbiAgZm9yIChjb25zdCBvID0gb2Zmc2V0OyBvZmZzZXQgPCBvICsgc1BhZGRpbmc7ICsrb2Zmc2V0KSB7XG4gICAgb3V0UHV0W29mZnNldF0gPSAwO1xuICB9XG5cbiAgb3V0UHV0LnNldChcbiAgICBzaWduYXR1cmUuc2xpY2Uoc09mZnNldCArIE1hdGgubWF4KC1zUGFkZGluZywgMCksIHNPZmZzZXQgKyBzTGVuZ3RoKSxcbiAgICBvZmZzZXRcbiAgKTtcblxuICBjb25zdCBvdXRwdXRDaGFycyA9IG91dFB1dC5yZWR1Y2UoXG4gICAgKGRhdGEsIGJ5dGUpID0+IGRhdGEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGUpLFxuICAgICcnXG4gICk7XG5cbiAgcmV0dXJuIHVybFNhZmVCYXNlNjQob3V0cHV0Q2hhcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlQWNjZXNzR3JvdXBLZXlQYWlyKFxuICBwcml2YXRlS2V5SGV4OiBzdHJpbmcsXG4gIGdyb3VwS2V5TmFtZTogc3RyaW5nXG4pOiBLZXlQYWlyIHtcbiAgY29uc3Qgc2VjcmV0SGFzaCA9IHNoYTI1NlgyKHByaXZhdGVLZXlIZXgpO1xuICBjb25zdCBrZXlOYW1lSGFzaCA9IHNoYTI1NlgyKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShncm91cEtleU5hbWUpKTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IHNoYTI1NlgyKG5ldyBVaW50OEFycmF5KFsuLi5zZWNyZXRIYXNoLCAuLi5rZXlOYW1lSGFzaF0pKTtcblxuICByZXR1cm4ga2V5Z2VuKHByaXZhdGVLZXkpO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lkZW50aXR5L2NyeXB0by11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUNMLEtBQUssRUFDTCxJQUFJLElBQUksTUFBTSxFQUNkLEtBQUssSUFBSSxPQUFPLEVBQ2hCLFlBQVksRUFDWixlQUFlLElBQUksb0JBQW9CLEdBQ3hDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc3RCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQW9CLEVBQUUsTUFBZTtJQUNyRSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMvRDtJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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QyxDQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxFQUNwRSxNQUFNLENBQ1AsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQy9CLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQ2hELEVBQUUsQ0FDSCxDQUFDO0lBRUYsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsYUFBcUIsRUFDckIsWUFBb0I7SUFFcEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdFLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGEyNTYgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3NoYTI1Nic7XG5pbXBvcnQge1xuICBQb2ludCxcbiAgc2lnbiBhcyBlY1NpZ24sXG4gIHV0aWxzIGFzIGVjVXRpbHMsXG4gIGdldFB1YmxpY0tleSxcbiAgZ2V0U2hhcmVkU2VjcmV0IGFzIG5vYmxlR2V0U2hhcmVkU2VjcmV0LFxufSBmcm9tICdAbm9ibGUvc2VjcDI1NmsxJztcbmltcG9ydCBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgUFVCTElDX0tFWV9QUkVGSVhFUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVjAgfSBmcm9tICcuL3RyYW5zYWN0aW9uLXRyYW5zY29kZXJzLmpzJztcbmltcG9ydCB7IEtleVBhaXIsIE5ldHdvcmssIGp3dEFsZ29yaXRobSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBCcm93c2VyIGZyaWVuZGx5IHZlcnNpb24gb2Ygbm9kZSdzIEJ1ZmZlci5jb25jYXQuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzOiBVaW50OEFycmF5W10sIGxlbmd0aD86IG51bWJlcikge1xuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSBhcnJheXMucmVkdWNlKChhY2MsIGFycmF5KSA9PiBhY2MgKyBhcnJheS5sZW5ndGgsIDApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvZmZzZXQgKyBhcnJheXNbaV0ubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICByZXN1bHQuc2V0KGFycmF5c1tpXS5zbGljZSgwLCBsZW5ndGggLSBvZmZzZXQpLCBvZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5zZXQoYXJyYXlzW2ldLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBhcnJheXNbaV0ubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCB1dmFyaW50NjRUb0J1ZiA9ICh1aW50OiBudW1iZXIpOiBVaW50OEFycmF5ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICB3aGlsZSAodWludCA+PSAweDgwKSB7XG4gICAgcmVzdWx0LnB1c2goTnVtYmVyKChCaWdJbnQodWludCkgJiBCaWdJbnQoMHhmZikpIHwgQmlnSW50KDB4ODApKSk7XG4gICAgdWludCA9IE51bWJlcihCaWdJbnQodWludCkgPj4gQmlnSW50KDcpKTtcbiAgfVxuICByZXN1bHQucHVzaCh1aW50IHwgMCk7XG5cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlc3VsdCk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVmVG9VdmFyaW50NjQgPSAoYnVmZmVyOiBVaW50OEFycmF5KTogW251bWJlciwgVWludDhBcnJheV0gPT4ge1xuICBsZXQgeCA9IEJpZ0ludCgwKTtcbiAgbGV0IHMgPSBCaWdJbnQoMCk7XG5cbiAgLy8gVE9ETzogZml4IGxpbnRpbmcgZXJyb3JcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICBmb3IgKGxldCBpID0gMDsgdHJ1ZTsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGJ1ZmZlcltpXTtcblxuICAgIGlmIChpID4gOSB8fCAoaSA9PSA5ICYmIGJ5dGUgPiAxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1aW50NjQgb3ZlcmZsb3cnKTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZSA8IDB4ODApIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIE51bWJlcihCaWdJbnQoeCkgfCAoQmlnSW50KGJ5dGUpIDw8IEJpZ0ludChzKSkpLFxuICAgICAgICBidWZmZXIuc2xpY2UoaSArIDEpLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICB4IHw9IEJpZ0ludChieXRlICYgMHg3ZikgPDwgQmlnSW50KHMpO1xuICAgIHMgKz0gQmlnSW50KDcpO1xuICB9XG59O1xuXG5pbnRlcmZhY2UgQmFzZTU4Q2hlY2tPcHRpb25zIHtcbiAgbmV0d29yazogTmV0d29yaztcbn1cblxuLy8gV2UgYXJlIG5vdCB1c2luZyB0aGUgbmF0aXZlIHdlYiBjcnlwdG8gQVBJIHRvIGFjdHVhbGx5IGdlbmVyYXRlIGtleXNcbi8vIGJlY2F1c2UgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VjcDI1NmsxIGN1cnZlLiBJbnN0ZWFkLCB3ZSBhcmUgdXNpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxIHdoaWNoIGlzIGEgYnJvd3NlciBmcmllbmRseVxuLy8gYWx0ZXJuYXRpdmUgdG8gdGhlIG5vZGUgZWxsaXB0aWMgcGFja2FnZSB3aGljaCBpcyBmYXIgc21hbGxlciBhbmQgb25seVxuLy8gZm9jdXNlcyBvbiBzdXBwb3J0aW5nIHRoZSBlYyBhbGdvcml0aG0gd2UgYXJlIGFjdHVhbGx5IGludGVyZXN0ZWQgaW4gaGVyZS5cbi8vIElmIHRoZSB3ZWIgY3J5cHRvIEFQSSBldmVyIGFkZHMgc3VwcG9ydCBmb3Igc2VjcDI1NmsxLCB3ZSBzaG91bGQgY2hhbmdlXG4vLyB0aGlzIHRvIHVzZSBpdC5cbi8vXG4vLyBTZWUgdGhlIGZvbGxvd2luZyBmb3IgbW9yZSBpbmZvOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWJjcnlwdG8vaXNzdWVzLzgyXG4vL1xuLy8gSWYgeW91IGRvbid0IHByb3ZpZGUgYSBzZWVkLCBhIHJhbmRvbSBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHlvdSBhbmQgYVxuLy8gcmFuZG9tIGtleSBwYWlyIHdpbGwgYmUgcmV0dXJuZWQuIElmIHlvdSBkbyBwcm92aWRlIGEgc2VlZCwgaXQgc2hvdWxkIGJlIGFcbi8vIHJhbmRvbWx5IGdlbmVyYXRlZCAzMiBieXRlIHZhbHVlIChVaW50OEFycmF5IG9mIGxlbmd0aCAzMiBvciBoZXggc3RyaW5nIG9mXG4vLyBsZW5ndGggNjQpXG5leHBvcnQgY29uc3Qga2V5Z2VuID0gKHNlZWQ/OiBzdHJpbmcgfCBVaW50OEFycmF5KTogS2V5UGFpciA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBzZWVkID8gbm9ybWFsaXplU2VlZChzZWVkKSA6IGVjVXRpbHMucmFuZG9tQnl0ZXMoMzIpO1xuICBjb25zdCBzZWVkSGV4ID0gZWNVdGlscy5ieXRlc1RvSGV4KHByaXZhdGVLZXkpO1xuXG4gIHJldHVybiB7XG4gICAgc2VlZEhleCxcbiAgICBwcml2YXRlOiBwcml2YXRlS2V5LFxuICAgIHB1YmxpYzogZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIHRydWUgLyogaXNDb21wcmVzc2VkICovKSxcbiAgfTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVNlZWQgPSAoc2VlZDogc3RyaW5nIHwgVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICBpZiAodHlwZW9mIHNlZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVjVXRpbHMuaGV4VG9CeXRlcyhzZWVkKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2VlZDtcbiAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGEgY291bGQgYmUgYSBoZXggc3RyaW5nIG9yIGEgYnl0ZSBhcnJheSAoVWludDhBcnJheSlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBzaGEyNTZYMiA9IChkYXRhOiBVaW50OEFycmF5IHwgc3RyaW5nKTogVWludDhBcnJheSA9PiB7XG4gIGNvbnN0IGQgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgPyBlY1V0aWxzLmhleFRvQnl0ZXMoZGF0YSkgOiBkYXRhO1xuICByZXR1cm4gc2hhMjU2KHNoYTI1NihkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHVibGljS2V5VG9CYXNlNThDaGVjayA9IChcbiAgcHVibGljS2V5Qnl0ZXM6IFVpbnQ4QXJyYXksXG4gIG9wdGlvbnM/OiBCYXNlNThDaGVja09wdGlvbnNcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHByZWZpeCA9IFBVQkxJQ19LRVlfUFJFRklYRVNbb3B0aW9ucz8ubmV0d29yayA/PyAnbWFpbm5ldCddLmRlc287XG4gIC8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGltcGxlbWVudGF0aW9uIGluIHRoZSBiczU4Y2hlY2sgcGFja2FnZSwgYnV0IHdlXG4gIC8vIHNsaWdodGx5IG1vZGlmeSBpdCB0byB1c2UgdGhlIGJyb3dzZXIgZnJpZW5kbHkgdmVyc2lvbiBvZiBCdWZmZXIuY29uY2F0LlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYnM1OGNoZWNrL2Jsb2IvMTJiM2U3MDBmMzU1YzVjNDlkMGJlM2Y4ZmMyOWJlNmM2NmU3NTNlOS9iYXNlLmpzI0wxXG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWy4uLnByZWZpeCwgLi4ucHVibGljS2V5Qnl0ZXNdKTtcbiAgY29uc3QgY2hlY2tzdW0gPSBzaGEyNTZYMihieXRlcyk7XG4gIHJldHVybiBiczU4LmVuY29kZShjb25jYXRVaW50OEFycmF5cyhbYnl0ZXMsIGNoZWNrc3VtXSwgYnl0ZXMubGVuZ3RoICsgNCkpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTaWduT3B0aW9ucyB7XG4gIGlzRGVyaXZlZEtleTogYm9vbGVhbjtcbn1cblxuY29uc3Qgc2lnbiA9IChtc2dIYXNoSGV4OiBzdHJpbmcsIHByaXZhdGVLZXk6IFVpbnQ4QXJyYXkpID0+IHtcbiAgcmV0dXJuIGVjU2lnbihtc2dIYXNoSGV4LCBwcml2YXRlS2V5LCB7XG4gICAgLy8gRm9yIGRldGFpbHMgYWJvdXQgdGhlIHNpZ25pbmcgb3B0aW9ucyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxI3NpZ25tc2doYXNoLXByaXZhdGVrZXlcbiAgICBjYW5vbmljYWw6IHRydWUsXG4gICAgZGVyOiB0cnVlLFxuICAgIGV4dHJhRW50cm9weTogdHJ1ZSxcbiAgICByZWNvdmVyZWQ6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25UeCA9IGFzeW5jIChcbiAgdHhIZXg6IHN0cmluZyxcbiAgc2VlZEhleDogc3RyaW5nLFxuICBvcHRpb25zPzogU2lnbk9wdGlvbnNcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHRyYW5zYWN0aW9uQnl0ZXMgPSBlY1V0aWxzLmhleFRvQnl0ZXModHhIZXgpO1xuICBjb25zdCBbXywgdjFGaWVsZHNCdWZmZXJdID0gVHJhbnNhY3Rpb25WMC5mcm9tQnl0ZXModHJhbnNhY3Rpb25CeXRlcyk7XG4gIGNvbnN0IHNpZ25hdHVyZUluZGV4ID0gdHJhbnNhY3Rpb25CeXRlcy5sZW5ndGggLSB2MUZpZWxkc0J1ZmZlci5sZW5ndGggLSAxO1xuICBjb25zdCB2MEZpZWxkc1dpdGhvdXRTaWduYXR1cmUgPSB0cmFuc2FjdGlvbkJ5dGVzLnNsaWNlKDAsIHNpZ25hdHVyZUluZGV4KTtcbiAgY29uc3QgaGFzaGVkVHhCeXRlcyA9IHNoYTI1NlgyKHRyYW5zYWN0aW9uQnl0ZXMpO1xuICBjb25zdCB0cmFuc2FjdGlvbkhhc2hIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgoaGFzaGVkVHhCeXRlcyk7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleCk7XG4gIGNvbnN0IFtzaWduYXR1cmVCeXRlcywgcmVjb3ZlcnlQYXJhbV0gPSBhd2FpdCBzaWduKFxuICAgIHRyYW5zYWN0aW9uSGFzaEhleCxcbiAgICBwcml2YXRlS2V5XG4gICk7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTGVuZ3RoID0gdXZhcmludDY0VG9CdWYoc2lnbmF0dXJlQnl0ZXMubGVuZ3RoKTtcblxuICBpZiAob3B0aW9ucz8uaXNEZXJpdmVkS2V5KSB7XG4gICAgc2lnbmF0dXJlQnl0ZXNbMF0gKz0gMSArIHJlY292ZXJ5UGFyYW07XG4gIH1cblxuICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbkJ5dGVzID0gZWNVdGlscy5jb25jYXRCeXRlcyhcbiAgICB2MEZpZWxkc1dpdGhvdXRTaWduYXR1cmUsXG4gICAgc2lnbmF0dXJlTGVuZ3RoLFxuICAgIHNpZ25hdHVyZUJ5dGVzLFxuICAgIHYxRmllbGRzQnVmZmVyXG4gICk7XG5cbiAgcmV0dXJuIGVjVXRpbHMuYnl0ZXNUb0hleChzaWduZWRUcmFuc2FjdGlvbkJ5dGVzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaWduZWRKV1QgPSBhc3luYyAoXG4gIHNlZWRIZXg6IHN0cmluZyxcbiAgYWxnOiBqd3RBbGdvcml0aG0sXG4gIHtcbiAgICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgLy8gVE9ETzogYWN0dWFsbHkgc3VwcG9ydCB0aGlzLi4uIG9yIHJlbW92ZSBpdC5cbiAgICBleHBpcmF0aW9uLFxuICB9OiB7XG4gICAgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrPzogc3RyaW5nO1xuICAgIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gIH1cbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGhlYWRlciA9IEpTT04uc3RyaW5naWZ5KHsgYWxnLCB0eXA6ICdKV1QnIH0pO1xuICBjb25zdCBpc3N1ZWRBdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBjb25zdCB0aGlydHlNaW5Gcm9tTm93ID0gaXNzdWVkQXQgKyAzMCAqIDYwO1xuICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIC4uLihkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2sgPyB7IGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayB9IDoge30pLFxuICAgIGlhdDogaXNzdWVkQXQsXG4gICAgZXhwOiB0aGlydHlNaW5Gcm9tTm93LFxuICB9KTtcblxuICBjb25zdCBqd3QgPSBgJHt1cmxTYWZlQmFzZTY0KGhlYWRlcil9LiR7dXJsU2FmZUJhc2U2NChwYXlsb2FkKX1gO1xuICBjb25zdCBbc2lnbmF0dXJlXSA9IGF3YWl0IHNpZ24oXG4gICAgZWNVdGlscy5ieXRlc1RvSGV4KHNoYTI1NihuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoand0KSkpKSxcbiAgICBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleClcbiAgKTtcbiAgY29uc3QgZW5jb2RlZFNpZ25hdHVyZSA9IGRlclRvSm9zZUVuY29kaW5nKHNpZ25hdHVyZSk7XG5cbiAgcmV0dXJuIGAke2p3dH0uJHtlbmNvZGVkU2lnbmF0dXJlfWA7XG59O1xuXG5mdW5jdGlvbiB1cmxTYWZlQmFzZTY0KHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiB3aW5kb3dcbiAgICAuYnRvYShzdHIpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgLnJlcGxhY2UoLz0vZywgJycpO1xufVxuXG5leHBvcnQgY29uc3QgZW5jcnlwdENoYXRNZXNzYWdlID0gKFxuICBzZW5kZXJTZWVkSGV4OiBzdHJpbmcsXG4gIHJlY2lwaWVudFB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMoc2VuZGVyU2VlZEhleCk7XG4gIGNvbnN0IHJlY2lwaWVudFB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0J5dGVzKFxuICAgIHJlY2lwaWVudFB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIGNvbnN0IHNoYXJlZFByaXZhdGVLZXkgPSBnZXRTaGFyZWRQcml2YXRlS2V5KHByaXZhdGVLZXksIHJlY2lwaWVudFB1YmxpY0tleSk7XG4gIGNvbnN0IHNoYXJlZFB1YmxpY0tleSA9IGdldFB1YmxpY0tleShzaGFyZWRQcml2YXRlS2V5KTtcblxuICByZXR1cm4gZW5jcnlwdChzaGFyZWRQdWJsaWNLZXksIG1lc3NhZ2UpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gcHVibGljRW5jcnlwdGlvbktleSBjb3VsZCBiZSBpbiByYXcgYnl0ZXMgb3IgYmFzZTU4Y2hlY2sgZm9ybWF0XG4gKiBAcGFyYW0gcGxhaW50ZXh0XG4gKiBAcmV0dXJucyBjaXBoZXIgdGV4dCBhcyBhIGhleCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSBhc3luYyAoXG4gIHB1YmxpY0tleTogVWludDhBcnJheSB8IHN0cmluZyxcbiAgcGxhaW50ZXh0OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVwaGVtUHJpdmF0ZUtleSA9IGVjVXRpbHMucmFuZG9tQnl0ZXMoMzIpO1xuICBjb25zdCBlcGhlbVB1YmxpY0tleSA9IGdldFB1YmxpY0tleShlcGhlbVByaXZhdGVLZXkpO1xuICBjb25zdCBwdWJsaWNLZXlCeXRlcyA9XG4gICAgdHlwZW9mIHB1YmxpY0tleSA9PT0gJ3N0cmluZycgPyBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNLZXkpIDogcHVibGljS2V5O1xuICBjb25zdCBwcml2S2V5ID0gZ2V0U2hhcmVkUHJpdmF0ZUtleShlcGhlbVByaXZhdGVLZXksIHB1YmxpY0tleUJ5dGVzKTtcbiAgY29uc3QgZW5jcnlwdGlvbktleSA9IHByaXZLZXkuc2xpY2UoMCwgMTYpO1xuICBjb25zdCBpdiA9IGVjVXRpbHMucmFuZG9tQnl0ZXMoMTYpO1xuICBjb25zdCBtYWNLZXkgPSBzaGEyNTYocHJpdktleS5zbGljZSgxNikpO1xuICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwbGFpbnRleHQpO1xuICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIGVuY3J5cHRpb25LZXksXG4gICAgJ0FFUy1DVFInLFxuICAgIHRydWUsXG4gICAgWydlbmNyeXB0J11cbiAgKTtcbiAgY29uc3QgY2lwaGVyQnl0ZXMgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICB7XG4gICAgICBuYW1lOiAnQUVTLUNUUicsXG4gICAgICBjb3VudGVyOiBpdixcbiAgICAgIGxlbmd0aDogMTI4LFxuICAgIH0sXG4gICAgY3J5cHRvS2V5LFxuICAgIGJ5dGVzXG4gICk7XG4gIGNvbnN0IGhtYWMgPSBhd2FpdCBlY1V0aWxzLmhtYWNTaGEyNTYoXG4gICAgbWFjS2V5LFxuICAgIG5ldyBVaW50OEFycmF5KFsuLi5pdiwgLi4ubmV3IFVpbnQ4QXJyYXkoY2lwaGVyQnl0ZXMpXSlcbiAgKTtcblxuICByZXR1cm4gZWNVdGlscy5ieXRlc1RvSGV4KFxuICAgIG5ldyBVaW50OEFycmF5KFtcbiAgICAgIC4uLmVwaGVtUHVibGljS2V5LFxuICAgICAgLi4uaXYsXG4gICAgICAuLi5uZXcgVWludDhBcnJheShjaXBoZXJCeXRlcyksXG4gICAgICAuLi5obWFjLFxuICAgIF0pXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDMzKTtcbiAgfVxuICBjb25zdCBwdWJLZXlVbmNvbXByZXNzZWQgPSBiczU4UHVibGljS2V5VG9CeXRlcyhzdHIpO1xuICByZXR1cm4gUG9pbnQuZnJvbUhleChlY1V0aWxzLmJ5dGVzVG9IZXgocHViS2V5VW5jb21wcmVzc2VkKSkudG9SYXdCeXRlcyh0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBiczU4UHVibGljS2V5VG9CeXRlcyA9IChzdHI6IHN0cmluZykgPT4ge1xuICBjb25zdCBieXRlcyA9IGJzNTguZGVjb2RlKHN0cik7XG4gIGNvbnN0IHBheWxvYWQgPSBieXRlcy5zbGljZSgwLCAtNCk7XG4gIGNvbnN0IGNoZWNrc3VtQSA9IGJ5dGVzLnNsaWNlKC00KTtcbiAgY29uc3QgY2hlY2tzdW1CID0gc2hhMjU2WDIocGF5bG9hZCk7XG5cbiAgaWYgKFxuICAgIChjaGVja3N1bUFbMF0gXiBjaGVja3N1bUJbMF0pIHxcbiAgICAoY2hlY2tzdW1BWzFdIF4gY2hlY2tzdW1CWzFdKSB8XG4gICAgKGNoZWNrc3VtQVsyXSBeIGNoZWNrc3VtQlsyXSkgfFxuICAgIChjaGVja3N1bUFbM10gXiBjaGVja3N1bUJbM10pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGVja3N1bScpO1xuICB9XG5cbiAgcmV0dXJuIFBvaW50LmZyb21IZXgoZWNVdGlscy5ieXRlc1RvSGV4KHBheWxvYWQuc2xpY2UoMykpKS50b1Jhd0J5dGVzKGZhbHNlKTtcbn07XG5cbmNvbnN0IHJlZ2V4TWFpbm5ldCA9IC9eQkNbMS05QS1ISi1OUC1aYS1rbS16XXs1M30kLztcbmNvbnN0IHJlZ2V4VGVzdG5ldCA9IC9edEJDWzEtOUEtSEotTlAtWmEta20tel17NTF9JC87XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQlM1OFB1YmxpY0tleSA9IChwdWJsaWNLZXk6IHN0cmluZywgaXNUZXN0bmV0ID0gZmFsc2UpID0+IHtcbiAgY29uc3QgcmVnZXhQYXR0ZXJuID0gaXNUZXN0bmV0ID8gcmVnZXhUZXN0bmV0IDogcmVnZXhNYWlubmV0O1xuICBpZiAoIXJlZ2V4UGF0dGVybi50ZXN0KHB1YmxpY0tleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNLZXkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBpc1ZhbGlkSG1hYyA9IChjYW5kaWRhdGU6IFVpbnQ4QXJyYXksIGtub3duR29vZDogVWludDhBcnJheSkgPT4ge1xuICBpZiAoY2FuZGlkYXRlLmxlbmd0aCAhPT0ga25vd25Hb29kLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwga25vd25Hb29kLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNhbmRpZGF0ZVtpXSAhPT0ga25vd25Hb29kW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjcnlwdENoYXRNZXNzYWdlID0gYXN5bmMgKFxuICByZWNpcGllbnRTZWVkSGV4OiBzdHJpbmcsXG4gIHB1YmxpY0RlY3J5cHRpb25LZXk6IHN0cmluZyxcbiAgY2lwaGVyVGV4dEhleDogc3RyaW5nXG4pID0+IHtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMuaGV4VG9CeXRlcyhyZWNpcGllbnRTZWVkSGV4KTtcbiAgY29uc3QgcHVibGljS2V5ID0gYXdhaXQgYnM1OFB1YmxpY0tleVRvQnl0ZXMocHVibGljRGVjcnlwdGlvbktleSk7XG4gIGNvbnN0IHNoYXJlZFByaXZhdGVLZXkgPSBhd2FpdCBnZXRTaGFyZWRQcml2YXRlS2V5KHByaXZhdGVLZXksIHB1YmxpY0tleSk7XG4gIHJldHVybiBkZWNyeXB0KHNoYXJlZFByaXZhdGVLZXksIGNpcGhlclRleHRIZXgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSBhc3luYyAoXG4gIHByaXZhdGVEZWNyeXB0aW9uS2V5OiBVaW50OEFycmF5IHwgc3RyaW5nLFxuICBjaXBoZXJUZXh0SGV4OiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBjaXBoZXJCeXRlcyA9IGVjVXRpbHMuaGV4VG9CeXRlcyhjaXBoZXJUZXh0SGV4KTtcbiAgY29uc3QgbWV0YUxlbmd0aCA9IDExMztcblxuICBpZiAoY2lwaGVyQnl0ZXMubGVuZ3RoIDwgbWV0YUxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjaXBoZXIgdGV4dC4gZGF0YSB0b28gc21hbGwuJyk7XG4gIH1cblxuICBpZiAoIShjaXBoZXJCeXRlc1swXSA+PSAyICYmIGNpcGhlckJ5dGVzWzBdIDw9IDQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNpcGhlciB0ZXh0LicpO1xuICB9XG5cbiAgY29uc3QgcHJpdmF0ZUtleSA9IG5vcm1hbGl6ZVNlZWQocHJpdmF0ZURlY3J5cHRpb25LZXkpO1xuICBjb25zdCBlcGhlbVB1YmxpY0tleSA9IGNpcGhlckJ5dGVzLnNsaWNlKDAsIDY1KTtcbiAgY29uc3QgY2lwaGVyVGV4dExlbmd0aCA9IGNpcGhlckJ5dGVzLmxlbmd0aCAtIG1ldGFMZW5ndGg7XG4gIGNvbnN0IGl2ID0gY2lwaGVyQnl0ZXMuc2xpY2UoNjUsIDY1ICsgMTYpO1xuICBjb25zdCBjaXBoZXJBbmRJdiA9IGNpcGhlckJ5dGVzLnNsaWNlKDY1LCA2NSArIDE2ICsgY2lwaGVyVGV4dExlbmd0aCk7XG4gIGNvbnN0IGNpcGhlclRleHQgPSBjaXBoZXJBbmRJdi5zbGljZSgxNik7XG4gIGNvbnN0IG1zZ01hYyA9IGNpcGhlckJ5dGVzLnNsaWNlKDY1ICsgMTYgKyBjaXBoZXJUZXh0TGVuZ3RoKTtcbiAgY29uc3Qgc2hhcmVkU2VjcmV0S2V5ID0gYXdhaXQgZ2V0U2hhcmVkUHJpdmF0ZUtleShwcml2YXRlS2V5LCBlcGhlbVB1YmxpY0tleSk7XG4gIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBzaGFyZWRTZWNyZXRLZXkuc2xpY2UoMCwgMTYpO1xuICBjb25zdCBtYWNLZXkgPSBzaGEyNTYoc2hhcmVkU2VjcmV0S2V5LnNsaWNlKDE2KSk7XG4gIGNvbnN0IGhtYWNLbm93bkdvb2QgPSBhd2FpdCBlY1V0aWxzLmhtYWNTaGEyNTYobWFjS2V5LCBjaXBoZXJBbmRJdik7XG5cbiAgaWYgKCFpc1ZhbGlkSG1hYyhtc2dNYWMsIGhtYWNLbm93bkdvb2QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvcnJlY3QgTUFDJyk7XG4gIH1cblxuICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIGVuY3J5cHRpb25LZXksXG4gICAgJ0FFUy1DVFInLFxuICAgIHRydWUsXG4gICAgWydkZWNyeXB0J11cbiAgKTtcblxuICBjb25zdCBkZWNyeXB0ZWRCdWZmZXIgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICB7IG5hbWU6ICdBRVMtQ1RSJywgY291bnRlcjogaXYsIGxlbmd0aDogMTI4IH0sXG4gICAgY3J5cHRvS2V5LFxuICAgIGNpcGhlclRleHRcbiAgKTtcblxuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRlY3J5cHRlZEJ1ZmZlcik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2hhcmVkUHJpdmF0ZUtleSA9IChcbiAgcHJpdktleTogVWludDhBcnJheSxcbiAgcHViS2V5OiBVaW50OEFycmF5XG4pID0+IHtcbiAgY29uc3Qgc2hhcmVkU2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KHByaXZLZXksIHB1YktleSk7XG5cbiAgcmV0dXJuIGtkZihzaGFyZWRTZWNyZXQsIDMyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNvZGVQdWJsaWNLZXkgPSBhc3luYyAocHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZykgPT4ge1xuICBjb25zdCBkZWNvZGVkID0gYXdhaXQgYnM1OFB1YmxpY0tleVRvQnl0ZXMocHVibGljS2V5QmFzZTU4Q2hlY2spO1xuICBjb25zdCB3aXRoUHJlZml4UmVtb3ZlZCA9IGRlY29kZWQuc2xpY2UoMyk7XG4gIGNvbnN0IHNlbmRlclB1YktleUhleCA9IGVjVXRpbHMuYnl0ZXNUb0hleCh3aXRoUHJlZml4UmVtb3ZlZCk7XG5cbiAgcmV0dXJuIFBvaW50LmZyb21IZXgoc2VuZGVyUHViS2V5SGV4KS50b1Jhd0J5dGVzKGZhbHNlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaGFyZWRTZWNyZXQgPSAocHJpdktleTogVWludDhBcnJheSwgcHViS2V5OiBVaW50OEFycmF5KSA9PiB7XG4gIC8vIHBhc3NpbmcgdHJ1ZSB0byBjb21wcmVzcyB0aGUgcHVibGljIGtleSwgYW5kIHRoZW4gc2xpY2luZyBvZmYgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gbWF0Y2hlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZGVyaXZlIGluIHRoZSBlbGxpcHRpYyBwYWNrYWdlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL25vYmxlLXNlY3AyNTZrMS9pc3N1ZXMvMjgjaXNzdWVjb21tZW50LTk0NjUzODAzN1xuICByZXR1cm4gbm9ibGVHZXRTaGFyZWRTZWNyZXQocHJpdktleSwgcHViS2V5LCB0cnVlKS5zbGljZSgxKTtcbn07XG5cbi8vIHRha2VuIGZyb20gcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGluIHRoZSBkZXNvIGNoYXQgYXBwOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rlc28tcHJvdG9jb2wvYWNjZXNzLWdyb3VwLW1lc3NhZ2luZy1hcHAvYmxvYi9jZDVjMjM3ZjVlNTcyOTE5NmFhYzBkYTE2MWQwODUxYmRlNzgwOTJjL3NyYy9zZXJ2aWNlcy9jcnlwdG8tdXRpbHMuc2VydmljZS50c3gjTDkxXG5leHBvcnQgY29uc3Qga2RmID0gKHNlY3JldDogVWludDhBcnJheSwgb3V0cHV0TGVuZ3RoOiBudW1iZXIpID0+IHtcbiAgbGV0IGN0ciA9IDE7XG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KCk7XG5cbiAgd2hpbGUgKHdyaXR0ZW4gPCBvdXRwdXRMZW5ndGgpIHtcbiAgICBjb25zdCBoYXNoID0gc2hhMjU2KFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAuLi5uZXcgVWludDhBcnJheShbY3RyID4+IDI0LCBjdHIgPj4gMTYsIGN0ciA+PiA4LCBjdHJdKSxcbiAgICAgICAgLi4uc2VjcmV0LFxuICAgICAgXSlcbiAgICApO1xuICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KFsuLi5yZXN1bHQsIC4uLmhhc2hdKTtcbiAgICB3cml0dGVuICs9IDMyO1xuICAgIGN0ciArPSAxO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRoaXMgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBkZXJUb0pvc2UgZnVuY3Rpb24gZnJvbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0JyaWdodHNwYWNlL25vZGUtZWNkc2Etc2lnLWZvcm1hdHRlci9ibG9iL2NhMjVhMmZkNWFlOWRkODUwMzYwODE2MzI5MzZlODAyYTQ3YTEyODkvc3JjL2VjZHNhLXNpZy1mb3JtYXR0ZXIuanMjTDMyXG4vLyBUaGUgb3JpZ2luYWwgcGFja2FnZSBpcyBub3QgYnJvd3NlciBmcmllbmRseSBhbmQgcmVxdWlyZXMgbm9kZSBwb2x5ZmlsbHMuIFdlXG4vLyBhbHNvIGRvbid0IG5lZWQgdG8gYmUgcXVpdGUgYXMgZGVmZW5zaXZlIGFzIHRoZSBvcmlnaW5hbCBwYWNrYWdlIHNpbmNlIHdlXG4vLyBoYXZlIGZ1bGwgY29udHJvbCBvZiB0aGUgaW5wdXQuXG5mdW5jdGlvbiBkZXJUb0pvc2VFbmNvZGluZyhzaWduYXR1cmU6IFVpbnQ4QXJyYXkpIHtcbiAgY29uc3QgcGFyYW1CeXRlcyA9IDMyO1xuXG4gIGxldCBvZmZzZXQgPSAzO1xuICBjb25zdCByTGVuZ3RoID0gc2lnbmF0dXJlW29mZnNldF07XG4gIG9mZnNldCArPSAxO1xuICBjb25zdCByT2Zmc2V0ID0gb2Zmc2V0O1xuICBvZmZzZXQgKz0gckxlbmd0aCArIDE7XG4gIGNvbnN0IHNMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0XTtcbiAgb2Zmc2V0ICs9IDE7XG4gIGNvbnN0IHNPZmZzZXQgPSBvZmZzZXQ7XG4gIG9mZnNldCArPSBzTGVuZ3RoO1xuXG4gIGNvbnN0IHJQYWRkaW5nID0gcGFyYW1CeXRlcyAtIHJMZW5ndGg7XG4gIGNvbnN0IHNQYWRkaW5nID0gcGFyYW1CeXRlcyAtIHNMZW5ndGg7XG5cbiAgY29uc3Qgb3V0UHV0ID0gbmV3IFVpbnQ4QXJyYXkoclBhZGRpbmcgKyByTGVuZ3RoICsgc1BhZGRpbmcgKyBzTGVuZ3RoKTtcblxuICBmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IHJQYWRkaW5nOyArK29mZnNldCkge1xuICAgIG91dFB1dFtvZmZzZXRdID0gMDtcbiAgfVxuXG4gIG91dFB1dC5zZXQoXG4gICAgc2lnbmF0dXJlLnNsaWNlKHJPZmZzZXQgKyBNYXRoLm1heCgtclBhZGRpbmcsIDApLCByT2Zmc2V0ICsgckxlbmd0aCksXG4gICAgb2Zmc2V0XG4gICk7XG5cbiAgb2Zmc2V0ID0gcGFyYW1CeXRlcztcblxuICBmb3IgKGNvbnN0IG8gPSBvZmZzZXQ7IG9mZnNldCA8IG8gKyBzUGFkZGluZzsgKytvZmZzZXQpIHtcbiAgICBvdXRQdXRbb2Zmc2V0XSA9IDA7XG4gIH1cblxuICBvdXRQdXQuc2V0KFxuICAgIHNpZ25hdHVyZS5zbGljZShzT2Zmc2V0ICsgTWF0aC5tYXgoLXNQYWRkaW5nLCAwKSwgc09mZnNldCArIHNMZW5ndGgpLFxuICAgIG9mZnNldFxuICApO1xuXG4gIGNvbnN0IG91dHB1dENoYXJzID0gb3V0UHV0LnJlZHVjZShcbiAgICAoZGF0YSwgYnl0ZSkgPT4gZGF0YSArIFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSksXG4gICAgJydcbiAgKTtcblxuICByZXR1cm4gdXJsU2FmZUJhc2U2NChvdXRwdXRDaGFycyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVBY2Nlc3NHcm91cEtleVBhaXIoXG4gIHByaXZhdGVLZXlIZXg6IHN0cmluZyxcbiAgZ3JvdXBLZXlOYW1lOiBzdHJpbmdcbik6IEtleVBhaXIge1xuICBjb25zdCBzZWNyZXRIYXNoID0gc2hhMjU2WDIocHJpdmF0ZUtleUhleCk7XG4gIGNvbnN0IGtleU5hbWVIYXNoID0gc2hhMjU2WDIobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGdyb3VwS2V5TmFtZSkpO1xuICBjb25zdCBwcml2YXRlS2V5ID0gc2hhMjU2WDIobmV3IFVpbnQ4QXJyYXkoWy4uLnNlY3JldEhhc2gsIC4uLmtleU5hbWVIYXNoXSkpO1xuXG4gIHJldHVybiBrZXlnZW4ocHJpdmF0ZUtleSk7XG59XG4iXX0=
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc