Socket
Socket
Sign inDemoInstall

deso-protocol

Package Overview
Dependencies
52
Maintainers
4
Versions
213
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.6.8-beta.1 to 2.6.8-beta.2

2

package.json
{
"name": "deso-protocol",
"version": "2.6.8-beta.1",
"version": "2.6.8-beta.2",
"license": "MIT",

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

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

export declare const decryptChatMessage: (recipientSeedHex: string, publicDecryptionKey: string, cipherTextHex: string) => Promise<string>;
export declare const decrypt: (privateDecryptionKey: Uint8Array | string, cipherTextHex: string) => Promise<string>;
export declare const decrypt: (privateDecryptionKey: Uint8Array | string, hexString: string, { retrying }?: {
retrying?: boolean | undefined;
}) => Promise<string>;
export declare const getSharedPrivateKey: (privKey: Uint8Array, pubKey: Uint8Array) => Uint8Array;

@@ -42,0 +44,0 @@ export declare const decodePublicKey: (publicKeyBase58Check: string) => Promise<Uint8Array>;

@@ -264,18 +264,27 @@ import { sha256 } from '@noble/hashes/sha256';

};
export const decrypt = async (privateDecryptionKey, cipherTextHex) => {
const cipherBytes = ecUtils.hexToBytes(cipherTextHex);
export const decrypt = async (privateDecryptionKey, hexString, { retrying = false } = {}) => {
const bytes = ecUtils.hexToBytes(hexString);
const metaLength = 113;
if (cipherBytes.length < metaLength) {
if (bytes.length < metaLength) {
throw new Error('invalid cipher text. data too small.');
}
if (!(cipherBytes[0] >= 2 && cipherBytes[0] <= 4)) {
throw new Error('invalid cipher text.');
if (!(bytes[0] >= 2 && bytes[0] <= 4)) {
// this could be a case where the hex string has been double encoded...
// so we try decoding and calling again. If it fails again, we just throw.
if (!retrying) {
return decrypt(privateDecryptionKey, new TextDecoder().decode(bytes), {
retrying: true,
});
}
else {
throw new Error('invalid cipher text.');
}
}
const privateKey = normalizeSeed(privateDecryptionKey);
const ephemPublicKey = cipherBytes.slice(0, 65);
const cipherTextLength = cipherBytes.length - metaLength;
const iv = cipherBytes.slice(65, 65 + 16);
const cipherAndIv = cipherBytes.slice(65, 65 + 16 + cipherTextLength);
const ephemPublicKey = bytes.slice(0, 65);
const cipherTextLength = bytes.length - metaLength;
const counter = bytes.slice(65, 65 + 16);
const cipherAndIv = bytes.slice(65, 65 + 16 + cipherTextLength);
const cipherText = cipherAndIv.slice(16);
const msgMac = cipherBytes.slice(65 + 16 + cipherTextLength);
const msgMac = bytes.slice(65 + 16 + cipherTextLength);
const sharedSecretKey = await getSharedPrivateKey(privateKey, ephemPublicKey);

@@ -289,3 +298,3 @@ const encryptionKey = sharedSecretKey.slice(0, 16);

const cryptoKey = await globalThis.crypto.subtle.importKey('raw', encryptionKey, 'AES-CTR', true, ['decrypt']);
const decryptedBuffer = await globalThis.crypto.subtle.decrypt({ name: 'AES-CTR', counter: iv, length: 128 }, cryptoKey, cipherText);
const decryptedBuffer = await globalThis.crypto.subtle.decrypt({ name: 'AES-CTR', counter, length: 128 }, cryptoKey, cipherText);
return new TextDecoder().decode(decryptedBuffer);

@@ -363,2 +372,2 @@ };

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lkZW50aXR5L2NyeXB0by11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUNMLEtBQUssRUFDTCxJQUFJLElBQUksTUFBTSxFQUNkLEtBQUssSUFBSSxPQUFPLEVBQ2hCLFlBQVksRUFDWixlQUFlLElBQUksb0JBQW9CLEdBQ3hDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc3RCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQW9CLEVBQUUsTUFBZTtJQUNyRSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMvRDtJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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QUMsRUFDcEUsTUFBTSxDQUNQLENBQUM7SUFFRixNQUFNLEdBQUcsVUFBVSxDQUFDO0lBRXBCLEtBQUssTUFBTSxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFO1FBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDcEI7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUNSLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxFQUNwRSxNQUFNLENBQ1AsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQy9CLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQ2hELEVBQUUsQ0FDSCxDQUFDO0lBRUYsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsYUFBcUIsRUFDckIsWUFBb0I7SUFFcEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdFLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGEyNTYgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3NoYTI1Nic7XG5pbXBvcnQge1xuICBQb2ludCxcbiAgc2lnbiBhcyBlY1NpZ24sXG4gIHV0aWxzIGFzIGVjVXRpbHMsXG4gIGdldFB1YmxpY0tleSxcbiAgZ2V0U2hhcmVkU2VjcmV0IGFzIG5vYmxlR2V0U2hhcmVkU2VjcmV0LFxufSBmcm9tICdAbm9ibGUvc2VjcDI1NmsxJztcbmltcG9ydCBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgUFVCTElDX0tFWV9QUkVGSVhFUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVjAgfSBmcm9tICcuL3RyYW5zYWN0aW9uLXRyYW5zY29kZXJzLmpzJztcbmltcG9ydCB7IEtleVBhaXIsIE5ldHdvcmssIGp3dEFsZ29yaXRobSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBCcm93c2VyIGZyaWVuZGx5IHZlcnNpb24gb2Ygbm9kZSdzIEJ1ZmZlci5jb25jYXQuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzOiBVaW50OEFycmF5W10sIGxlbmd0aD86IG51bWJlcikge1xuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSBhcnJheXMucmVkdWNlKChhY2MsIGFycmF5KSA9PiBhY2MgKyBhcnJheS5sZW5ndGgsIDApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvZmZzZXQgKyBhcnJheXNbaV0ubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICByZXN1bHQuc2V0KGFycmF5c1tpXS5zbGljZSgwLCBsZW5ndGggLSBvZmZzZXQpLCBvZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5zZXQoYXJyYXlzW2ldLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBhcnJheXNbaV0ubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCB1dmFyaW50NjRUb0J1ZiA9ICh1aW50OiBudW1iZXIpOiBVaW50OEFycmF5ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICB3aGlsZSAodWludCA+PSAweDgwKSB7XG4gICAgcmVzdWx0LnB1c2goTnVtYmVyKChCaWdJbnQodWludCkgJiBCaWdJbnQoMHhmZikpIHwgQmlnSW50KDB4ODApKSk7XG4gICAgdWludCA9IE51bWJlcihCaWdJbnQodWludCkgPj4gQmlnSW50KDcpKTtcbiAgfVxuICByZXN1bHQucHVzaCh1aW50IHwgMCk7XG5cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlc3VsdCk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVmVG9VdmFyaW50NjQgPSAoYnVmZmVyOiBVaW50OEFycmF5KTogW251bWJlciwgVWludDhBcnJheV0gPT4ge1xuICBsZXQgeCA9IEJpZ0ludCgwKTtcbiAgbGV0IHMgPSBCaWdJbnQoMCk7XG5cbiAgLy8gVE9ETzogZml4IGxpbnRpbmcgZXJyb3JcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICBmb3IgKGxldCBpID0gMDsgdHJ1ZTsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGJ1ZmZlcltpXTtcblxuICAgIGlmIChpID4gOSB8fCAoaSA9PSA5ICYmIGJ5dGUgPiAxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1aW50NjQgb3ZlcmZsb3cnKTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZSA8IDB4ODApIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIE51bWJlcihCaWdJbnQoeCkgfCAoQmlnSW50KGJ5dGUpIDw8IEJpZ0ludChzKSkpLFxuICAgICAgICBidWZmZXIuc2xpY2UoaSArIDEpLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICB4IHw9IEJpZ0ludChieXRlICYgMHg3ZikgPDwgQmlnSW50KHMpO1xuICAgIHMgKz0gQmlnSW50KDcpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdWludDY0VG9CdWZCaWdFbmRpYW4gPSAodWludDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICB3aGlsZSAoQmlnSW50KHVpbnQpID49IEJpZ0ludCgweGZmKSkge1xuICAgIHJlc3VsdC5wdXNoKE51bWJlcihCaWdJbnQodWludCkgJiBCaWdJbnQoMHhmZikpKTtcbiAgICB1aW50ID0gTnVtYmVyKEJpZ0ludCh1aW50KSA+PiBCaWdJbnQoOCkpO1xuICB9XG4gIHJlc3VsdC5wdXNoKE51bWJlcihCaWdJbnQodWludCkgfCBCaWdJbnQoMCkpKTtcbiAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCA4KSB7XG4gICAgcmVzdWx0LnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlc3VsdC5yZXZlcnNlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhcmludDY0VG9CdWYgPSAoaW50OiBudW1iZXIpID0+IHtcbiAgbGV0IHV4ID0gQmlnSW50KGludCkgPDwgQmlnSW50KDEpO1xuICBpZiAoaW50IDwgMCkge1xuICAgIHV4ID0gfnV4O1xuICB9XG4gIHJldHVybiB1dmFyaW50NjRUb0J1ZihOdW1iZXIodXgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBidWZUb1ZhcmludDY0ID0gKGJ1ZmZlcjogVWludDhBcnJheSk6IFtudW1iZXIsIFVpbnQ4QXJyYXldID0+IHtcbiAgY29uc3QgW3V4LCBuXSA9IGJ1ZlRvVXZhcmludDY0KGJ1ZmZlcik7XG4gIGxldCB4ID0gQmlnSW50KHV4KSA+PiBCaWdJbnQoMSk7XG4gIGlmICh1eCAmIDEpIHtcbiAgICB4ID0gfng7XG4gIH1cbiAgcmV0dXJuIFtOdW1iZXIoeCksIG5dO1xufTtcblxuaW50ZXJmYWNlIEJhc2U1OENoZWNrT3B0aW9ucyB7XG4gIG5ldHdvcms6IE5ldHdvcms7XG59XG5cbi8vIFdlIGFyZSBub3QgdXNpbmcgdGhlIG5hdGl2ZSB3ZWIgY3J5cHRvIEFQSSB0byBhY3R1YWxseSBnZW5lcmF0ZSBrZXlzXG4vLyBiZWNhdXNlIGl0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlY3AyNTZrMSBjdXJ2ZS4gSW5zdGVhZCwgd2UgYXJlIHVzaW5nXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL25vYmxlLXNlY3AyNTZrMSB3aGljaCBpcyBhIGJyb3dzZXIgZnJpZW5kbHlcbi8vIGFsdGVybmF0aXZlIHRvIHRoZSBub2RlIGVsbGlwdGljIHBhY2thZ2Ugd2hpY2ggaXMgZmFyIHNtYWxsZXIgYW5kIG9ubHlcbi8vIGZvY3VzZXMgb24gc3VwcG9ydGluZyB0aGUgZWMgYWxnb3JpdGhtIHdlIGFyZSBhY3R1YWxseSBpbnRlcmVzdGVkIGluIGhlcmUuXG4vLyBJZiB0aGUgd2ViIGNyeXB0byBBUEkgZXZlciBhZGRzIHN1cHBvcnQgZm9yIHNlY3AyNTZrMSwgd2Ugc2hvdWxkIGNoYW5nZVxuLy8gdGhpcyB0byB1c2UgaXQuXG4vL1xuLy8gU2VlIHRoZSBmb2xsb3dpbmcgZm9yIG1vcmUgaW5mbzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViY3J5cHRvL2lzc3Vlcy84MlxuLy9cbi8vIElmIHlvdSBkb24ndCBwcm92aWRlIGEgc2VlZCwgYSByYW5kb20gb25lIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB5b3UgYW5kIGFcbi8vIHJhbmRvbSBrZXkgcGFpciB3aWxsIGJlIHJldHVybmVkLiBJZiB5b3UgZG8gcHJvdmlkZSBhIHNlZWQsIGl0IHNob3VsZCBiZSBhXG4vLyByYW5kb21seSBnZW5lcmF0ZWQgMzIgYnl0ZSB2YWx1ZSAoVWludDhBcnJheSBvZiBsZW5ndGggMzIgb3IgaGV4IHN0cmluZyBvZlxuLy8gbGVuZ3RoIDY0KVxuZXhwb3J0IGNvbnN0IGtleWdlbiA9IChzZWVkPzogc3RyaW5nIHwgVWludDhBcnJheSk6IEtleVBhaXIgPT4ge1xuICBjb25zdCBwcml2YXRlS2V5ID0gc2VlZCA/IG5vcm1hbGl6ZVNlZWQoc2VlZCkgOiBlY1V0aWxzLnJhbmRvbUJ5dGVzKDMyKTtcbiAgY29uc3Qgc2VlZEhleCA9IGVjVXRpbHMuYnl0ZXNUb0hleChwcml2YXRlS2V5KTtcblxuICByZXR1cm4ge1xuICAgIHNlZWRIZXgsXG4gICAgcHJpdmF0ZTogcHJpdmF0ZUtleSxcbiAgICBwdWJsaWM6IGdldFB1YmxpY0tleShwcml2YXRlS2V5LCB0cnVlIC8qIGlzQ29tcHJlc3NlZCAqLyksXG4gIH07XG59O1xuXG5jb25zdCBub3JtYWxpemVTZWVkID0gKHNlZWQ6IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5ID0+IHtcbiAgaWYgKHR5cGVvZiBzZWVkID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHNlZWQ7XG4gIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhIGNvdWxkIGJlIGEgaGV4IHN0cmluZyBvciBhIGJ5dGUgYXJyYXkgKFVpbnQ4QXJyYXkpXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3Qgc2hhMjU2WDIgPSAoZGF0YTogVWludDhBcnJheSB8IHN0cmluZyk6IFVpbnQ4QXJyYXkgPT4ge1xuICBjb25zdCBkID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gZWNVdGlscy5oZXhUb0J5dGVzKGRhdGEpIDogZGF0YTtcbiAgcmV0dXJuIHNoYTI1NihzaGEyNTYoZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1YmxpY0tleVRvQmFzZTU4Q2hlY2sgPSAoXG4gIHB1YmxpY0tleUJ5dGVzOiBVaW50OEFycmF5LFxuICBvcHRpb25zPzogQmFzZTU4Q2hlY2tPcHRpb25zXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwcmVmaXggPSBQVUJMSUNfS0VZX1BSRUZJWEVTW29wdGlvbnM/Lm5ldHdvcmsgPz8gJ21haW5uZXQnXS5kZXNvO1xuICAvLyBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYnM1OGNoZWNrIHBhY2thZ2UsIGJ1dCB3ZVxuICAvLyBzbGlnaHRseSBtb2RpZnkgaXQgdG8gdXNlIHRoZSBicm93c2VyIGZyaWVuZGx5IHZlcnNpb24gb2YgQnVmZmVyLmNvbmNhdC5cbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbmpzL2JzNThjaGVjay9ibG9iLzEyYjNlNzAwZjM1NWM1YzQ5ZDBiZTNmOGZjMjliZTZjNjZlNzUzZTkvYmFzZS5qcyNMMVxuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KFsuLi5wcmVmaXgsIC4uLnB1YmxpY0tleUJ5dGVzXSk7XG4gIGNvbnN0IGNoZWNrc3VtID0gc2hhMjU2WDIoYnl0ZXMpO1xuICByZXR1cm4gYnM1OC5lbmNvZGUoY29uY2F0VWludDhBcnJheXMoW2J5dGVzLCBjaGVja3N1bV0sIGJ5dGVzLmxlbmd0aCArIDQpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbk9wdGlvbnMge1xuICBpc0Rlcml2ZWRLZXk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBzaWduID0gKG1zZ0hhc2hIZXg6IHN0cmluZywgcHJpdmF0ZUtleTogVWludDhBcnJheSkgPT4ge1xuICByZXR1cm4gZWNTaWduKG1zZ0hhc2hIZXgsIHByaXZhdGVLZXksIHtcbiAgICAvLyBGb3IgZGV0YWlscyBhYm91dCB0aGUgc2lnbmluZyBvcHRpb25zIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9ub2JsZS1zZWNwMjU2azEjc2lnbm1zZ2hhc2gtcHJpdmF0ZWtleVxuICAgIGNhbm9uaWNhbDogdHJ1ZSxcbiAgICBkZXI6IHRydWUsXG4gICAgZXh0cmFFbnRyb3B5OiB0cnVlLFxuICAgIHJlY292ZXJlZDogdHJ1ZSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnblR4ID0gYXN5bmMgKFxuICB0eEhleDogc3RyaW5nLFxuICBzZWVkSGV4OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBTaWduT3B0aW9uc1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgdHJhbnNhY3Rpb25CeXRlcyA9IGVjVXRpbHMuaGV4VG9CeXRlcyh0eEhleCk7XG4gIGNvbnN0IFtfLCB2MUZpZWxkc0J1ZmZlcl0gPSBUcmFuc2FjdGlvblYwLmZyb21CeXRlcyh0cmFuc2FjdGlvbkJ5dGVzKTtcbiAgY29uc3Qgc2lnbmF0dXJlSW5kZXggPSB0cmFuc2FjdGlvbkJ5dGVzLmxlbmd0aCAtIHYxRmllbGRzQnVmZmVyLmxlbmd0aCAtIDE7XG4gIGNvbnN0IHYwRmllbGRzV2l0aG91dFNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQnl0ZXMuc2xpY2UoMCwgc2lnbmF0dXJlSW5kZXgpO1xuICBjb25zdCBoYXNoZWRUeEJ5dGVzID0gc2hhMjU2WDIodHJhbnNhY3Rpb25CeXRlcyk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uSGFzaEhleCA9IGVjVXRpbHMuYnl0ZXNUb0hleChoYXNoZWRUeEJ5dGVzKTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMuaGV4VG9CeXRlcyhzZWVkSGV4KTtcbiAgY29uc3QgW3NpZ25hdHVyZUJ5dGVzLCByZWNvdmVyeVBhcmFtXSA9IGF3YWl0IHNpZ24oXG4gICAgdHJhbnNhY3Rpb25IYXNoSGV4LFxuICAgIHByaXZhdGVLZXlcbiAgKTtcblxuICBjb25zdCBzaWduYXR1cmVMZW5ndGggPSB1dmFyaW50NjRUb0J1ZihzaWduYXR1cmVCeXRlcy5sZW5ndGgpO1xuXG4gIGlmIChvcHRpb25zPy5pc0Rlcml2ZWRLZXkpIHtcbiAgICBzaWduYXR1cmVCeXRlc1swXSArPSAxICsgcmVjb3ZlcnlQYXJhbTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uQnl0ZXMgPSBlY1V0aWxzLmNvbmNhdEJ5dGVzKFxuICAgIHYwRmllbGRzV2l0aG91dFNpZ25hdHVyZSxcbiAgICBzaWduYXR1cmVMZW5ndGgsXG4gICAgc2lnbmF0dXJlQnl0ZXMsXG4gICAgdjFGaWVsZHNCdWZmZXJcbiAgKTtcblxuICByZXR1cm4gZWNVdGlscy5ieXRlc1RvSGV4KHNpZ25lZFRyYW5zYWN0aW9uQnl0ZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNpZ25lZEpXVCA9IGFzeW5jIChcbiAgc2VlZEhleDogc3RyaW5nLFxuICBhbGc6IGp3dEFsZ29yaXRobSxcbiAge1xuICAgIGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICAvLyBUT0RPOiBhY3R1YWxseSBzdXBwb3J0IHRoaXMuLi4gb3IgcmVtb3ZlIGl0LlxuICAgIGV4cGlyYXRpb24sXG4gIH06IHtcbiAgICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2s/OiBzdHJpbmc7XG4gICAgZXhwaXJhdGlvbj86IG51bWJlcjtcbiAgfVxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgaGVhZGVyID0gSlNPTi5zdHJpbmdpZnkoeyBhbGcsIHR5cDogJ0pXVCcgfSk7XG4gIGNvbnN0IGlzc3VlZEF0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIGNvbnN0IHRoaXJ0eU1pbkZyb21Ob3cgPSBpc3N1ZWRBdCArIDMwICogNjA7XG4gIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgLi4uKGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayA/IHsgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrIH0gOiB7fSksXG4gICAgaWF0OiBpc3N1ZWRBdCxcbiAgICBleHA6IHRoaXJ0eU1pbkZyb21Ob3csXG4gIH0pO1xuXG4gIGNvbnN0IGp3dCA9IGAke3VybFNhZmVCYXNlNjQoaGVhZGVyKX0uJHt1cmxTYWZlQmFzZTY0KHBheWxvYWQpfWA7XG4gIGNvbnN0IFtzaWduYXR1cmVdID0gYXdhaXQgc2lnbihcbiAgICBlY1V0aWxzLmJ5dGVzVG9IZXgoc2hhMjU2KG5ldyBVaW50OEFycmF5KG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShqd3QpKSkpLFxuICAgIGVjVXRpbHMuaGV4VG9CeXRlcyhzZWVkSGV4KVxuICApO1xuICBjb25zdCBlbmNvZGVkU2lnbmF0dXJlID0gZGVyVG9Kb3NlRW5jb2Rpbmcoc2lnbmF0dXJlKTtcblxuICByZXR1cm4gYCR7and0fS4ke2VuY29kZWRTaWduYXR1cmV9YDtcbn07XG5cbmZ1bmN0aW9uIHVybFNhZmVCYXNlNjQoc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHdpbmRvd1xuICAgIC5idG9hKHN0cilcbiAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAucmVwbGFjZSgvPS9nLCAnJyk7XG59XG5cbmV4cG9ydCBjb25zdCBlbmNyeXB0Q2hhdE1lc3NhZ2UgPSAoXG4gIHNlbmRlclNlZWRIZXg6IHN0cmluZyxcbiAgcmVjaXBpZW50UHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nXG4pID0+IHtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMuaGV4VG9CeXRlcyhzZW5kZXJTZWVkSGV4KTtcbiAgY29uc3QgcmVjaXBpZW50UHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQnl0ZXMoXG4gICAgcmVjaXBpZW50UHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgY29uc3Qgc2hhcmVkUHJpdmF0ZUtleSA9IGdldFNoYXJlZFByaXZhdGVLZXkocHJpdmF0ZUtleSwgcmVjaXBpZW50UHVibGljS2V5KTtcbiAgY29uc3Qgc2hhcmVkUHVibGljS2V5ID0gZ2V0UHVibGljS2V5KHNoYXJlZFByaXZhdGVLZXkpO1xuXG4gIHJldHVybiBlbmNyeXB0KHNoYXJlZFB1YmxpY0tleSwgbWVzc2FnZSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSBwdWJsaWNFbmNyeXB0aW9uS2V5IGNvdWxkIGJlIGluIHJhdyBieXRlcyBvciBiYXNlNThjaGVjayBmb3JtYXRcbiAqIEBwYXJhbSBwbGFpbnRleHRcbiAqIEByZXR1cm5zIGNpcGhlciB0ZXh0IGFzIGEgaGV4IHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IGFzeW5jIChcbiAgcHVibGljS2V5OiBVaW50OEFycmF5IHwgc3RyaW5nLFxuICBwbGFpbnRleHQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgZXBoZW1Qcml2YXRlS2V5ID0gZWNVdGlscy5yYW5kb21CeXRlcygzMik7XG4gIGNvbnN0IGVwaGVtUHVibGljS2V5ID0gZ2V0UHVibGljS2V5KGVwaGVtUHJpdmF0ZUtleSk7XG4gIGNvbnN0IHB1YmxpY0tleUJ5dGVzID1cbiAgICB0eXBlb2YgcHVibGljS2V5ID09PSAnc3RyaW5nJyA/IGJzNThQdWJsaWNLZXlUb0J5dGVzKHB1YmxpY0tleSkgOiBwdWJsaWNLZXk7XG4gIGNvbnN0IHByaXZLZXkgPSBnZXRTaGFyZWRQcml2YXRlS2V5KGVwaGVtUHJpdmF0ZUtleSwgcHVibGljS2V5Qnl0ZXMpO1xuICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcHJpdktleS5zbGljZSgwLCAxNik7XG4gIGNvbnN0IGl2ID0gZWNVdGlscy5yYW5kb21CeXRlcygxNik7XG4gIGNvbnN0IG1hY0tleSA9IHNoYTI1Nihwcml2S2V5LnNsaWNlKDE2KSk7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBsYWludGV4dCk7XG4gIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgJ3JhdycsXG4gICAgZW5jcnlwdGlvbktleSxcbiAgICAnQUVTLUNUUicsXG4gICAgdHJ1ZSxcbiAgICBbJ2VuY3J5cHQnXVxuICApO1xuICBjb25zdCBjaXBoZXJCeXRlcyA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgIHtcbiAgICAgIG5hbWU6ICdBRVMtQ1RSJyxcbiAgICAgIGNvdW50ZXI6IGl2LFxuICAgICAgbGVuZ3RoOiAxMjgsXG4gICAgfSxcbiAgICBjcnlwdG9LZXksXG4gICAgYnl0ZXNcbiAgKTtcbiAgY29uc3QgaG1hYyA9IGF3YWl0IGVjVXRpbHMuaG1hY1NoYTI1NihcbiAgICBtYWNLZXksXG4gICAgbmV3IFVpbnQ4QXJyYXkoWy4uLml2LCAuLi5uZXcgVWludDhBcnJheShjaXBoZXJCeXRlcyldKVxuICApO1xuXG4gIHJldHVybiBlY1V0aWxzLmJ5dGVzVG9IZXgoXG4gICAgbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgLi4uZXBoZW1QdWJsaWNLZXksXG4gICAgICAuLi5pdixcbiAgICAgIC4uLm5ldyBVaW50OEFycmF5KGNpcGhlckJ5dGVzKSxcbiAgICAgIC4uLmhtYWMsXG4gICAgXSlcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMzMpO1xuICB9XG4gIGNvbnN0IHB1YktleVVuY29tcHJlc3NlZCA9IGJzNThQdWJsaWNLZXlUb0J5dGVzKHN0cik7XG4gIHJldHVybiBQb2ludC5mcm9tSGV4KGVjVXRpbHMuYnl0ZXNUb0hleChwdWJLZXlVbmNvbXByZXNzZWQpKS50b1Jhd0J5dGVzKHRydWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGJzNThQdWJsaWNLZXlUb0J5dGVzID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGJ5dGVzID0gYnM1OC5kZWNvZGUoc3RyKTtcbiAgY29uc3QgcGF5bG9hZCA9IGJ5dGVzLnNsaWNlKDAsIC00KTtcbiAgY29uc3QgY2hlY2tzdW1BID0gYnl0ZXMuc2xpY2UoLTQpO1xuICBjb25zdCBjaGVja3N1bUIgPSBzaGEyNTZYMihwYXlsb2FkKTtcblxuICBpZiAoXG4gICAgKGNoZWNrc3VtQVswXSBeIGNoZWNrc3VtQlswXSkgfFxuICAgIChjaGVja3N1bUFbMV0gXiBjaGVja3N1bUJbMV0pIHxcbiAgICAoY2hlY2tzdW1BWzJdIF4gY2hlY2tzdW1CWzJdKSB8XG4gICAgKGNoZWNrc3VtQVszXSBeIGNoZWNrc3VtQlszXSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoZWNrc3VtJyk7XG4gIH1cblxuICByZXR1cm4gUG9pbnQuZnJvbUhleChlY1V0aWxzLmJ5dGVzVG9IZXgocGF5bG9hZC5zbGljZSgzKSkpLnRvUmF3Qnl0ZXMoZmFsc2UpO1xufTtcblxuY29uc3QgcmVnZXhNYWlubmV0ID0gL15CQ1sxLTlBLUhKLU5QLVphLWttLXpdezUzfSQvO1xuY29uc3QgcmVnZXhUZXN0bmV0ID0gL150QkNbMS05QS1ISi1OUC1aYS1rbS16XXs1MX0kLztcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRCUzU4UHVibGljS2V5ID0gKHB1YmxpY0tleTogc3RyaW5nLCBpc1Rlc3RuZXQgPSBmYWxzZSkgPT4ge1xuICBjb25zdCByZWdleFBhdHRlcm4gPSBpc1Rlc3RuZXQgPyByZWdleFRlc3RuZXQgOiByZWdleE1haW5uZXQ7XG4gIGlmICghcmVnZXhQYXR0ZXJuLnRlc3QocHVibGljS2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGJzNThQdWJsaWNLZXlUb0J5dGVzKHB1YmxpY0tleSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IGlzVmFsaWRIbWFjID0gKGNhbmRpZGF0ZTogVWludDhBcnJheSwga25vd25Hb29kOiBVaW50OEFycmF5KSA9PiB7XG4gIGlmIChjYW5kaWRhdGUubGVuZ3RoICE9PSBrbm93bkdvb2QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrbm93bkdvb2QubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY2FuZGlkYXRlW2ldICE9PSBrbm93bkdvb2RbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNyeXB0Q2hhdE1lc3NhZ2UgPSBhc3luYyAoXG4gIHJlY2lwaWVudFNlZWRIZXg6IHN0cmluZyxcbiAgcHVibGljRGVjcnlwdGlvbktleTogc3RyaW5nLFxuICBjaXBoZXJUZXh0SGV4OiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBwcml2YXRlS2V5ID0gZWNVdGlscy5oZXhUb0J5dGVzKHJlY2lwaWVudFNlZWRIZXgpO1xuICBjb25zdCBwdWJsaWNLZXkgPSBhd2FpdCBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNEZWNyeXB0aW9uS2V5KTtcbiAgY29uc3Qgc2hhcmVkUHJpdmF0ZUtleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkocHJpdmF0ZUtleSwgcHVibGljS2V5KTtcbiAgcmV0dXJuIGRlY3J5cHQoc2hhcmVkUHJpdmF0ZUtleSwgY2lwaGVyVGV4dEhleCk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IGFzeW5jIChcbiAgcHJpdmF0ZURlY3J5cHRpb25LZXk6IFVpbnQ4QXJyYXkgfCBzdHJpbmcsXG4gIGNpcGhlclRleHRIZXg6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IGNpcGhlckJ5dGVzID0gZWNVdGlscy5oZXhUb0J5dGVzKGNpcGhlclRleHRIZXgpO1xuICBjb25zdCBtZXRhTGVuZ3RoID0gMTEzO1xuXG4gIGlmIChjaXBoZXJCeXRlcy5sZW5ndGggPCBtZXRhTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNpcGhlciB0ZXh0LiBkYXRhIHRvbyBzbWFsbC4nKTtcbiAgfVxuXG4gIGlmICghKGNpcGhlckJ5dGVzWzBdID49IDIgJiYgY2lwaGVyQnl0ZXNbMF0gPD0gNCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lwaGVyIHRleHQuJyk7XG4gIH1cblxuICBjb25zdCBwcml2YXRlS2V5ID0gbm9ybWFsaXplU2VlZChwcml2YXRlRGVjcnlwdGlvbktleSk7XG4gIGNvbnN0IGVwaGVtUHVibGljS2V5ID0gY2lwaGVyQnl0ZXMuc2xpY2UoMCwgNjUpO1xuICBjb25zdCBjaXBoZXJUZXh0TGVuZ3RoID0gY2lwaGVyQnl0ZXMubGVuZ3RoIC0gbWV0YUxlbmd0aDtcbiAgY29uc3QgaXYgPSBjaXBoZXJCeXRlcy5zbGljZSg2NSwgNjUgKyAxNik7XG4gIGNvbnN0IGNpcGhlckFuZEl2ID0gY2lwaGVyQnl0ZXMuc2xpY2UoNjUsIDY1ICsgMTYgKyBjaXBoZXJUZXh0TGVuZ3RoKTtcbiAgY29uc3QgY2lwaGVyVGV4dCA9IGNpcGhlckFuZEl2LnNsaWNlKDE2KTtcbiAgY29uc3QgbXNnTWFjID0gY2lwaGVyQnl0ZXMuc2xpY2UoNjUgKyAxNiArIGNpcGhlclRleHRMZW5ndGgpO1xuICBjb25zdCBzaGFyZWRTZWNyZXRLZXkgPSBhd2FpdCBnZXRTaGFyZWRQcml2YXRlS2V5KHByaXZhdGVLZXksIGVwaGVtUHVibGljS2V5KTtcbiAgY29uc3QgZW5jcnlwdGlvbktleSA9IHNoYXJlZFNlY3JldEtleS5zbGljZSgwLCAxNik7XG4gIGNvbnN0IG1hY0tleSA9IHNoYTI1NihzaGFyZWRTZWNyZXRLZXkuc2xpY2UoMTYpKTtcbiAgY29uc3QgaG1hY0tub3duR29vZCA9IGF3YWl0IGVjVXRpbHMuaG1hY1NoYTI1NihtYWNLZXksIGNpcGhlckFuZEl2KTtcblxuICBpZiAoIWlzVmFsaWRIbWFjKG1zZ01hYywgaG1hY0tub3duR29vZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29ycmVjdCBNQUMnKTtcbiAgfVxuXG4gIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgJ3JhdycsXG4gICAgZW5jcnlwdGlvbktleSxcbiAgICAnQUVTLUNUUicsXG4gICAgdHJ1ZSxcbiAgICBbJ2RlY3J5cHQnXVxuICApO1xuXG4gIGNvbnN0IGRlY3J5cHRlZEJ1ZmZlciA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxuICAgIHsgbmFtZTogJ0FFUy1DVFInLCBjb3VudGVyOiBpdiwgbGVuZ3RoOiAxMjggfSxcbiAgICBjcnlwdG9LZXksXG4gICAgY2lwaGVyVGV4dFxuICApO1xuXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGVjcnlwdGVkQnVmZmVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaGFyZWRQcml2YXRlS2V5ID0gKFxuICBwcml2S2V5OiBVaW50OEFycmF5LFxuICBwdWJLZXk6IFVpbnQ4QXJyYXlcbikgPT4ge1xuICBjb25zdCBzaGFyZWRTZWNyZXQgPSBnZXRTaGFyZWRTZWNyZXQocHJpdktleSwgcHViS2V5KTtcblxuICByZXR1cm4ga2RmKHNoYXJlZFNlY3JldCwgMzIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY29kZVB1YmxpY0tleSA9IGFzeW5jIChwdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRlY29kZWQgPSBhd2FpdCBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNLZXlCYXNlNThDaGVjayk7XG4gIGNvbnN0IHdpdGhQcmVmaXhSZW1vdmVkID0gZGVjb2RlZC5zbGljZSgzKTtcbiAgY29uc3Qgc2VuZGVyUHViS2V5SGV4ID0gZWNVdGlscy5ieXRlc1RvSGV4KHdpdGhQcmVmaXhSZW1vdmVkKTtcblxuICByZXR1cm4gUG9pbnQuZnJvbUhleChzZW5kZXJQdWJLZXlIZXgpLnRvUmF3Qnl0ZXMoZmFsc2UpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXJlZFNlY3JldCA9IChwcml2S2V5OiBVaW50OEFycmF5LCBwdWJLZXk6IFVpbnQ4QXJyYXkpID0+IHtcbiAgLy8gcGFzc2luZyB0cnVlIHRvIGNvbXByZXNzIHRoZSBwdWJsaWMga2V5LCBhbmQgdGhlbiBzbGljaW5nIG9mZiB0aGUgZmlyc3QgYnl0ZVxuICAvLyBtYXRjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBkZXJpdmUgaW4gdGhlIGVsbGlwdGljIHBhY2thZ2UuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxL2lzc3Vlcy8yOCNpc3N1ZWNvbW1lbnQtOTQ2NTM4MDM3XG4gIHJldHVybiBub2JsZUdldFNoYXJlZFNlY3JldChwcml2S2V5LCBwdWJLZXksIHRydWUpLnNsaWNlKDEpO1xufTtcblxuLy8gdGFrZW4gZnJvbSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW4gdGhlIGRlc28gY2hhdCBhcHA6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGVzby1wcm90b2NvbC9hY2Nlc3MtZ3JvdXAtbWVzc2FnaW5nLWFwcC9ibG9iL2NkNWMyMzdmNWU1NzI5MTk2YWFjMGRhMTYxZDA4NTFiZGU3ODA5MmMvc3JjL3NlcnZpY2VzL2NyeXB0by11dGlscy5zZXJ2aWNlLnRzeCNMOTFcbmV4cG9ydCBjb25zdCBrZGYgPSAoc2VjcmV0OiBVaW50OEFycmF5LCBvdXRwdXRMZW5ndGg6IG51bWJlcikgPT4ge1xuICBsZXQgY3RyID0gMTtcbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoKTtcblxuICB3aGlsZSAod3JpdHRlbiA8IG91dHB1dExlbmd0aCkge1xuICAgIGNvbnN0IGhhc2ggPSBzaGEyNTYoXG4gICAgICBuZXcgVWludDhBcnJheShbXG4gICAgICAgIC4uLm5ldyBVaW50OEFycmF5KFtjdHIgPj4gMjQsIGN0ciA+PiAxNiwgY3RyID4+IDgsIGN0cl0pLFxuICAgICAgICAuLi5zZWNyZXQsXG4gICAgICBdKVxuICAgICk7XG4gICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoWy4uLnJlc3VsdCwgLi4uaGFzaF0pO1xuICAgIHdyaXR0ZW4gKz0gMzI7XG4gICAgY3RyICs9IDE7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVGhpcyBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGRlclRvSm9zZSBmdW5jdGlvbiBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vQnJpZ2h0c3BhY2Uvbm9kZS1lY2RzYS1zaWctZm9ybWF0dGVyL2Jsb2IvY2EyNWEyZmQ1YWU5ZGQ4NTAzNjA4MTYzMjkzNmU4MDJhNDdhMTI4OS9zcmMvZWNkc2Etc2lnLWZvcm1hdHRlci5qcyNMMzJcbi8vIFRoZSBvcmlnaW5hbCBwYWNrYWdlIGlzIG5vdCBicm93c2VyIGZyaWVuZGx5IGFuZCByZXF1aXJlcyBub2RlIHBvbHlmaWxscy4gV2Vcbi8vIGFsc28gZG9uJ3QgbmVlZCB0byBiZSBxdWl0ZSBhcyBkZWZlbnNpdmUgYXMgdGhlIG9yaWdpbmFsIHBhY2thZ2Ugc2luY2Ugd2Vcbi8vIGhhdmUgZnVsbCBjb250cm9sIG9mIHRoZSBpbnB1dC5cbmZ1bmN0aW9uIGRlclRvSm9zZUVuY29kaW5nKHNpZ25hdHVyZTogVWludDhBcnJheSkge1xuICBjb25zdCBwYXJhbUJ5dGVzID0gMzI7XG5cbiAgbGV0IG9mZnNldCA9IDM7XG4gIGNvbnN0IHJMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0XTtcbiAgb2Zmc2V0ICs9IDE7XG4gIGNvbnN0IHJPZmZzZXQgPSBvZmZzZXQ7XG4gIG9mZnNldCArPSByTGVuZ3RoICsgMTtcbiAgY29uc3Qgc0xlbmd0aCA9IHNpZ25hdHVyZVtvZmZzZXRdO1xuICBvZmZzZXQgKz0gMTtcbiAgY29uc3Qgc09mZnNldCA9IG9mZnNldDtcbiAgb2Zmc2V0ICs9IHNMZW5ndGg7XG5cbiAgY29uc3QgclBhZGRpbmcgPSBwYXJhbUJ5dGVzIC0gckxlbmd0aDtcbiAgY29uc3Qgc1BhZGRpbmcgPSBwYXJhbUJ5dGVzIC0gc0xlbmd0aDtcblxuICBjb25zdCBvdXRQdXQgPSBuZXcgVWludDhBcnJheShyUGFkZGluZyArIHJMZW5ndGggKyBzUGFkZGluZyArIHNMZW5ndGgpO1xuXG4gIGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgclBhZGRpbmc7ICsrb2Zmc2V0KSB7XG4gICAgb3V0UHV0W29mZnNldF0gPSAwO1xuICB9XG5cbiAgb3V0UHV0LnNldChcbiAgICBzaWduYXR1cmUuc2xpY2Uock9mZnNldCArIE1hdGgubWF4KC1yUGFkZGluZywgMCksIHJPZmZzZXQgKyByTGVuZ3RoKSxcbiAgICBvZmZzZXRcbiAgKTtcblxuICBvZmZzZXQgPSBwYXJhbUJ5dGVzO1xuXG4gIGZvciAoY29uc3QgbyA9IG9mZnNldDsgb2Zmc2V0IDwgbyArIHNQYWRkaW5nOyArK29mZnNldCkge1xuICAgIG91dFB1dFtvZmZzZXRdID0gMDtcbiAgfVxuXG4gIG91dFB1dC5zZXQoXG4gICAgc2lnbmF0dXJlLnNsaWNlKHNPZmZzZXQgKyBNYXRoLm1heCgtc1BhZGRpbmcsIDApLCBzT2Zmc2V0ICsgc0xlbmd0aCksXG4gICAgb2Zmc2V0XG4gICk7XG5cbiAgY29uc3Qgb3V0cHV0Q2hhcnMgPSBvdXRQdXQucmVkdWNlKFxuICAgIChkYXRhLCBieXRlKSA9PiBkYXRhICsgU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKSxcbiAgICAnJ1xuICApO1xuXG4gIHJldHVybiB1cmxTYWZlQmFzZTY0KG91dHB1dENoYXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUFjY2Vzc0dyb3VwS2V5UGFpcihcbiAgcHJpdmF0ZUtleUhleDogc3RyaW5nLFxuICBncm91cEtleU5hbWU6IHN0cmluZ1xuKTogS2V5UGFpciB7XG4gIGNvbnN0IHNlY3JldEhhc2ggPSBzaGEyNTZYMihwcml2YXRlS2V5SGV4KTtcbiAgY29uc3Qga2V5TmFtZUhhc2ggPSBzaGEyNTZYMihuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZ3JvdXBLZXlOYW1lKSk7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBzaGEyNTZYMihuZXcgVWludDhBcnJheShbLi4uc2VjcmV0SGFzaCwgLi4ua2V5TmFtZUhhc2hdKSk7XG5cbiAgcmV0dXJuIGtleWdlbihwcml2YXRlS2V5KTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lkZW50aXR5L2NyeXB0by11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUNMLEtBQUssRUFDTCxJQUFJLElBQUksTUFBTSxFQUNkLEtBQUssSUFBSSxPQUFPLEVBQ2hCLFlBQVksRUFDWixlQUFlLElBQUksb0JBQW9CLEdBQ3hDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc3RCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQW9CLEVBQUUsTUFBZTtJQUNyRSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMvRDtJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUss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LFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3RSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhMjU2IH0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGEyNTYnO1xuaW1wb3J0IHtcbiAgUG9pbnQsXG4gIHNpZ24gYXMgZWNTaWduLFxuICB1dGlscyBhcyBlY1V0aWxzLFxuICBnZXRQdWJsaWNLZXksXG4gIGdldFNoYXJlZFNlY3JldCBhcyBub2JsZUdldFNoYXJlZFNlY3JldCxcbn0gZnJvbSAnQG5vYmxlL3NlY3AyNTZrMSc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IFBVQkxJQ19LRVlfUFJFRklYRVMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblYwIH0gZnJvbSAnLi90cmFuc2FjdGlvbi10cmFuc2NvZGVycy5qcyc7XG5pbXBvcnQgeyBLZXlQYWlyLCBOZXR3b3JrLCBqd3RBbGdvcml0aG0gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gQnJvd3NlciBmcmllbmRseSB2ZXJzaW9uIG9mIG5vZGUncyBCdWZmZXIuY29uY2F0LlxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdFVpbnQ4QXJyYXlzKGFycmF5czogVWludDhBcnJheVtdLCBsZW5ndGg/OiBudW1iZXIpIHtcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gYXJyYXlzLnJlZHVjZSgoYWNjLCBhcnJheSkgPT4gYWNjICsgYXJyYXkubGVuZ3RoLCAwKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob2Zmc2V0ICsgYXJyYXlzW2ldLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnNldChhcnJheXNbaV0uc2xpY2UoMCwgbGVuZ3RoIC0gb2Zmc2V0KSwgb2Zmc2V0KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQuc2V0KGFycmF5c1tpXSwgb2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gYXJyYXlzW2ldLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgdXZhcmludDY0VG9CdWYgPSAodWludDogbnVtYmVyKTogVWludDhBcnJheSA9PiB7XG4gIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgd2hpbGUgKHVpbnQgPj0gMHg4MCkge1xuICAgIHJlc3VsdC5wdXNoKE51bWJlcigoQmlnSW50KHVpbnQpICYgQmlnSW50KDB4ZmYpKSB8IEJpZ0ludCgweDgwKSkpO1xuICAgIHVpbnQgPSBOdW1iZXIoQmlnSW50KHVpbnQpID4+IEJpZ0ludCg3KSk7XG4gIH1cbiAgcmVzdWx0LnB1c2godWludCB8IDApO1xuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1ZlRvVXZhcmludDY0ID0gKGJ1ZmZlcjogVWludDhBcnJheSk6IFtudW1iZXIsIFVpbnQ4QXJyYXldID0+IHtcbiAgbGV0IHggPSBCaWdJbnQoMCk7XG4gIGxldCBzID0gQmlnSW50KDApO1xuXG4gIC8vIFRPRE86IGZpeCBsaW50aW5nIGVycm9yXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgZm9yIChsZXQgaSA9IDA7IHRydWU7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBidWZmZXJbaV07XG5cbiAgICBpZiAoaSA+IDkgfHwgKGkgPT0gOSAmJiBieXRlID4gMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndWludDY0IG92ZXJmbG93Jyk7XG4gICAgfVxuXG4gICAgaWYgKGJ5dGUgPCAweDgwKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBOdW1iZXIoQmlnSW50KHgpIHwgKEJpZ0ludChieXRlKSA8PCBCaWdJbnQocykpKSxcbiAgICAgICAgYnVmZmVyLnNsaWNlKGkgKyAxKSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgeCB8PSBCaWdJbnQoYnl0ZSAmIDB4N2YpIDw8IEJpZ0ludChzKTtcbiAgICBzICs9IEJpZ0ludCg3KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVpbnQ2NFRvQnVmQmlnRW5kaWFuID0gKHVpbnQ6IG51bWJlcikgPT4ge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKEJpZ0ludCh1aW50KSA+PSBCaWdJbnQoMHhmZikpIHtcbiAgICByZXN1bHQucHVzaChOdW1iZXIoQmlnSW50KHVpbnQpICYgQmlnSW50KDB4ZmYpKSk7XG4gICAgdWludCA9IE51bWJlcihCaWdJbnQodWludCkgPj4gQmlnSW50KDgpKTtcbiAgfVxuICByZXN1bHQucHVzaChOdW1iZXIoQmlnSW50KHVpbnQpIHwgQmlnSW50KDApKSk7XG4gIHdoaWxlIChyZXN1bHQubGVuZ3RoIDwgOCkge1xuICAgIHJlc3VsdC5wdXNoKDApO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQucmV2ZXJzZSgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YXJpbnQ2NFRvQnVmID0gKGludDogbnVtYmVyKSA9PiB7XG4gIGxldCB1eCA9IEJpZ0ludChpbnQpIDw8IEJpZ0ludCgxKTtcbiAgaWYgKGludCA8IDApIHtcbiAgICB1eCA9IH51eDtcbiAgfVxuICByZXR1cm4gdXZhcmludDY0VG9CdWYoTnVtYmVyKHV4KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVmVG9WYXJpbnQ2NCA9IChidWZmZXI6IFVpbnQ4QXJyYXkpOiBbbnVtYmVyLCBVaW50OEFycmF5XSA9PiB7XG4gIGNvbnN0IFt1eCwgbl0gPSBidWZUb1V2YXJpbnQ2NChidWZmZXIpO1xuICBsZXQgeCA9IEJpZ0ludCh1eCkgPj4gQmlnSW50KDEpO1xuICBpZiAodXggJiAxKSB7XG4gICAgeCA9IH54O1xuICB9XG4gIHJldHVybiBbTnVtYmVyKHgpLCBuXTtcbn07XG5cbmludGVyZmFjZSBCYXNlNThDaGVja09wdGlvbnMge1xuICBuZXR3b3JrOiBOZXR3b3JrO1xufVxuXG4vLyBXZSBhcmUgbm90IHVzaW5nIHRoZSBuYXRpdmUgd2ViIGNyeXB0byBBUEkgdG8gYWN0dWFsbHkgZ2VuZXJhdGUga2V5c1xuLy8gYmVjYXVzZSBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNwMjU2azEgY3VydmUuIEluc3RlYWQsIHdlIGFyZSB1c2luZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9ub2JsZS1zZWNwMjU2azEgd2hpY2ggaXMgYSBicm93c2VyIGZyaWVuZGx5XG4vLyBhbHRlcm5hdGl2ZSB0byB0aGUgbm9kZSBlbGxpcHRpYyBwYWNrYWdlIHdoaWNoIGlzIGZhciBzbWFsbGVyIGFuZCBvbmx5XG4vLyBmb2N1c2VzIG9uIHN1cHBvcnRpbmcgdGhlIGVjIGFsZ29yaXRobSB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbiBoZXJlLlxuLy8gSWYgdGhlIHdlYiBjcnlwdG8gQVBJIGV2ZXIgYWRkcyBzdXBwb3J0IGZvciBzZWNwMjU2azEsIHdlIHNob3VsZCBjaGFuZ2Vcbi8vIHRoaXMgdG8gdXNlIGl0LlxuLy9cbi8vIFNlZSB0aGUgZm9sbG93aW5nIGZvciBtb3JlIGluZm86XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYmNyeXB0by9pc3N1ZXMvODJcbi8vXG4vLyBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhIHNlZWQsIGEgcmFuZG9tIG9uZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgeW91IGFuZCBhXG4vLyByYW5kb20ga2V5IHBhaXIgd2lsbCBiZSByZXR1cm5lZC4gSWYgeW91IGRvIHByb3ZpZGUgYSBzZWVkLCBpdCBzaG91bGQgYmUgYVxuLy8gcmFuZG9tbHkgZ2VuZXJhdGVkIDMyIGJ5dGUgdmFsdWUgKFVpbnQ4QXJyYXkgb2YgbGVuZ3RoIDMyIG9yIGhleCBzdHJpbmcgb2Zcbi8vIGxlbmd0aCA2NClcbmV4cG9ydCBjb25zdCBrZXlnZW4gPSAoc2VlZD86IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBLZXlQYWlyID0+IHtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IHNlZWQgPyBub3JtYWxpemVTZWVkKHNlZWQpIDogZWNVdGlscy5yYW5kb21CeXRlcygzMik7XG4gIGNvbnN0IHNlZWRIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgocHJpdmF0ZUtleSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzZWVkSGV4LFxuICAgIHByaXZhdGU6IHByaXZhdGVLZXksXG4gICAgcHVibGljOiBnZXRQdWJsaWNLZXkocHJpdmF0ZUtleSwgdHJ1ZSAvKiBpc0NvbXByZXNzZWQgKi8pLFxuICB9O1xufTtcblxuY29uc3Qgbm9ybWFsaXplU2VlZCA9IChzZWVkOiBzdHJpbmcgfCBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gIGlmICh0eXBlb2Ygc2VlZCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZWNVdGlscy5oZXhUb0J5dGVzKHNlZWQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZWVkO1xuICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YSBjb3VsZCBiZSBhIGhleCBzdHJpbmcgb3IgYSBieXRlIGFycmF5IChVaW50OEFycmF5KVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNoYTI1NlgyID0gKGRhdGE6IFVpbnQ4QXJyYXkgfCBzdHJpbmcpOiBVaW50OEFycmF5ID0+IHtcbiAgY29uc3QgZCA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IGVjVXRpbHMuaGV4VG9CeXRlcyhkYXRhKSA6IGRhdGE7XG4gIHJldHVybiBzaGEyNTYoc2hhMjU2KGQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNLZXlUb0Jhc2U1OENoZWNrID0gKFxuICBwdWJsaWNLZXlCeXRlczogVWludDhBcnJheSxcbiAgb3B0aW9ucz86IEJhc2U1OENoZWNrT3B0aW9uc1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcHJlZml4ID0gUFVCTElDX0tFWV9QUkVGSVhFU1tvcHRpb25zPy5uZXR3b3JrID8/ICdtYWlubmV0J10uZGVzbztcbiAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgaW1wbGVtZW50YXRpb24gaW4gdGhlIGJzNThjaGVjayBwYWNrYWdlLCBidXQgd2VcbiAgLy8gc2xpZ2h0bHkgbW9kaWZ5IGl0IHRvIHVzZSB0aGUgYnJvd3NlciBmcmllbmRseSB2ZXJzaW9uIG9mIEJ1ZmZlci5jb25jYXQuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW5qcy9iczU4Y2hlY2svYmxvYi8xMmIzZTcwMGYzNTVjNWM0OWQwYmUzZjhmYzI5YmU2YzY2ZTc1M2U5L2Jhc2UuanMjTDFcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShbLi4ucHJlZml4LCAuLi5wdWJsaWNLZXlCeXRlc10pO1xuICBjb25zdCBjaGVja3N1bSA9IHNoYTI1NlgyKGJ5dGVzKTtcbiAgcmV0dXJuIGJzNTguZW5jb2RlKGNvbmNhdFVpbnQ4QXJyYXlzKFtieXRlcywgY2hlY2tzdW1dLCBieXRlcy5sZW5ndGggKyA0KSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25PcHRpb25zIHtcbiAgaXNEZXJpdmVkS2V5OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3Qgc2lnbiA9IChtc2dIYXNoSGV4OiBzdHJpbmcsIHByaXZhdGVLZXk6IFVpbnQ4QXJyYXkpID0+IHtcbiAgcmV0dXJuIGVjU2lnbihtc2dIYXNoSGV4LCBwcml2YXRlS2V5LCB7XG4gICAgLy8gRm9yIGRldGFpbHMgYWJvdXQgdGhlIHNpZ25pbmcgb3B0aW9ucyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxI3NpZ25tc2doYXNoLXByaXZhdGVrZXlcbiAgICBjYW5vbmljYWw6IHRydWUsXG4gICAgZGVyOiB0cnVlLFxuICAgIGV4dHJhRW50cm9weTogdHJ1ZSxcbiAgICByZWNvdmVyZWQ6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25UeCA9IGFzeW5jIChcbiAgdHhIZXg6IHN0cmluZyxcbiAgc2VlZEhleDogc3RyaW5nLFxuICBvcHRpb25zPzogU2lnbk9wdGlvbnNcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHRyYW5zYWN0aW9uQnl0ZXMgPSBlY1V0aWxzLmhleFRvQnl0ZXModHhIZXgpO1xuICBjb25zdCBbXywgdjFGaWVsZHNCdWZmZXJdID0gVHJhbnNhY3Rpb25WMC5mcm9tQnl0ZXModHJhbnNhY3Rpb25CeXRlcyk7XG4gIGNvbnN0IHNpZ25hdHVyZUluZGV4ID0gdHJhbnNhY3Rpb25CeXRlcy5sZW5ndGggLSB2MUZpZWxkc0J1ZmZlci5sZW5ndGggLSAxO1xuICBjb25zdCB2MEZpZWxkc1dpdGhvdXRTaWduYXR1cmUgPSB0cmFuc2FjdGlvbkJ5dGVzLnNsaWNlKDAsIHNpZ25hdHVyZUluZGV4KTtcbiAgY29uc3QgaGFzaGVkVHhCeXRlcyA9IHNoYTI1NlgyKHRyYW5zYWN0aW9uQnl0ZXMpO1xuICBjb25zdCB0cmFuc2FjdGlvbkhhc2hIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgoaGFzaGVkVHhCeXRlcyk7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleCk7XG4gIGNvbnN0IFtzaWduYXR1cmVCeXRlcywgcmVjb3ZlcnlQYXJhbV0gPSBhd2FpdCBzaWduKFxuICAgIHRyYW5zYWN0aW9uSGFzaEhleCxcbiAgICBwcml2YXRlS2V5XG4gICk7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTGVuZ3RoID0gdXZhcmludDY0VG9CdWYoc2lnbmF0dXJlQnl0ZXMubGVuZ3RoKTtcblxuICBpZiAob3B0aW9ucz8uaXNEZXJpdmVkS2V5KSB7XG4gICAgc2lnbmF0dXJlQnl0ZXNbMF0gKz0gMSArIHJlY292ZXJ5UGFyYW07XG4gIH1cblxuICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbkJ5dGVzID0gZWNVdGlscy5jb25jYXRCeXRlcyhcbiAgICB2MEZpZWxkc1dpdGhvdXRTaWduYXR1cmUsXG4gICAgc2lnbmF0dXJlTGVuZ3RoLFxuICAgIHNpZ25hdHVyZUJ5dGVzLFxuICAgIHYxRmllbGRzQnVmZmVyXG4gICk7XG5cbiAgcmV0dXJuIGVjVXRpbHMuYnl0ZXNUb0hleChzaWduZWRUcmFuc2FjdGlvbkJ5dGVzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaWduZWRKV1QgPSBhc3luYyAoXG4gIHNlZWRIZXg6IHN0cmluZyxcbiAgYWxnOiBqd3RBbGdvcml0aG0sXG4gIHtcbiAgICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgLy8gVE9ETzogYWN0dWFsbHkgc3VwcG9ydCB0aGlzLi4uIG9yIHJlbW92ZSBpdC5cbiAgICBleHBpcmF0aW9uLFxuICB9OiB7XG4gICAgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrPzogc3RyaW5nO1xuICAgIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gIH1cbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGhlYWRlciA9IEpTT04uc3RyaW5naWZ5KHsgYWxnLCB0eXA6ICdKV1QnIH0pO1xuICBjb25zdCBpc3N1ZWRBdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBjb25zdCB0aGlydHlNaW5Gcm9tTm93ID0gaXNzdWVkQXQgKyAzMCAqIDYwO1xuICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIC4uLihkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2sgPyB7IGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayB9IDoge30pLFxuICAgIGlhdDogaXNzdWVkQXQsXG4gICAgZXhwOiB0aGlydHlNaW5Gcm9tTm93LFxuICB9KTtcblxuICBjb25zdCBqd3QgPSBgJHt1cmxTYWZlQmFzZTY0KGhlYWRlcil9LiR7dXJsU2FmZUJhc2U2NChwYXlsb2FkKX1gO1xuICBjb25zdCBbc2lnbmF0dXJlXSA9IGF3YWl0IHNpZ24oXG4gICAgZWNVdGlscy5ieXRlc1RvSGV4KHNoYTI1NihuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoand0KSkpKSxcbiAgICBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleClcbiAgKTtcbiAgY29uc3QgZW5jb2RlZFNpZ25hdHVyZSA9IGRlclRvSm9zZUVuY29kaW5nKHNpZ25hdHVyZSk7XG5cbiAgcmV0dXJuIGAke2p3dH0uJHtlbmNvZGVkU2lnbmF0dXJlfWA7XG59O1xuXG5mdW5jdGlvbiB1cmxTYWZlQmFzZTY0KHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiB3aW5kb3dcbiAgICAuYnRvYShzdHIpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgLnJlcGxhY2UoLz0vZywgJycpO1xufVxuXG5leHBvcnQgY29uc3QgZW5jcnlwdENoYXRNZXNzYWdlID0gKFxuICBzZW5kZXJTZWVkSGV4OiBzdHJpbmcsXG4gIHJlY2lwaWVudFB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMoc2VuZGVyU2VlZEhleCk7XG4gIGNvbnN0IHJlY2lwaWVudFB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0J5dGVzKFxuICAgIHJlY2lwaWVudFB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIGNvbnN0IHNoYXJlZFByaXZhdGVLZXkgPSBnZXRTaGFyZWRQcml2YXRlS2V5KHByaXZhdGVLZXksIHJlY2lwaWVudFB1YmxpY0tleSk7XG4gIGNvbnN0IHNoYXJlZFB1YmxpY0tleSA9IGdldFB1YmxpY0tleShzaGFyZWRQcml2YXRlS2V5KTtcblxuICByZXR1cm4gZW5jcnlwdChzaGFyZWRQdWJsaWNLZXksIG1lc3NhZ2UpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gcHVibGljRW5jcnlwdGlvbktleSBjb3VsZCBiZSBpbiByYXcgYnl0ZXMgb3IgYmFzZTU4Y2hlY2sgZm9ybWF0XG4gKiBAcGFyYW0gcGxhaW50ZXh0XG4gKiBAcmV0dXJucyBjaXBoZXIgdGV4dCBhcyBhIGhleCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSBhc3luYyAoXG4gIHB1YmxpY0tleTogVWludDhBcnJheSB8IHN0cmluZyxcbiAgcGxhaW50ZXh0OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVwaGVtUHJpdmF0ZUtleSA9IGVjVXRpbHMucmFuZG9tQnl0ZXMoMzIpO1xuICBjb25zdCBlcGhlbVB1YmxpY0tleSA9IGdldFB1YmxpY0tleShlcGhlbVByaXZhdGVLZXkpO1xuICBjb25zdCBwdWJsaWNLZXlCeXRlcyA9XG4gICAgdHlwZW9mIHB1YmxpY0tleSA9PT0gJ3N0cmluZycgPyBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNLZXkpIDogcHVibGljS2V5O1xuICBjb25zdCBwcml2S2V5ID0gZ2V0U2hhcmVkUHJpdmF0ZUtleShlcGhlbVByaXZhdGVLZXksIHB1YmxpY0tleUJ5dGVzKTtcbiAgY29uc3QgZW5jcnlwdGlvbktleSA9IHByaXZLZXkuc2xpY2UoMCwgMTYpO1xuICBjb25zdCBpdiA9IGVjVXRpbHMucmFuZG9tQnl0ZXMoMTYpO1xuICBjb25zdCBtYWNLZXkgPSBzaGEyNTYocHJpdktleS5zbGljZSgxNikpO1xuICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwbGFpbnRleHQpO1xuICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIGVuY3J5cHRpb25LZXksXG4gICAgJ0FFUy1DVFInLFxuICAgIHRydWUsXG4gICAgWydlbmNyeXB0J11cbiAgKTtcbiAgY29uc3QgY2lwaGVyQnl0ZXMgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICB7XG4gICAgICBuYW1lOiAnQUVTLUNUUicsXG4gICAgICBjb3VudGVyOiBpdixcbiAgICAgIGxlbmd0aDogMTI4LFxuICAgIH0sXG4gICAgY3J5cHRvS2V5LFxuICAgIGJ5dGVzXG4gICk7XG4gIGNvbnN0IGhtYWMgPSBhd2FpdCBlY1V0aWxzLmhtYWNTaGEyNTYoXG4gICAgbWFjS2V5LFxuICAgIG5ldyBVaW50OEFycmF5KFsuLi5pdiwgLi4ubmV3IFVpbnQ4QXJyYXkoY2lwaGVyQnl0ZXMpXSlcbiAgKTtcblxuICByZXR1cm4gZWNVdGlscy5ieXRlc1RvSGV4KFxuICAgIG5ldyBVaW50OEFycmF5KFtcbiAgICAgIC4uLmVwaGVtUHVibGljS2V5LFxuICAgICAgLi4uaXYsXG4gICAgICAuLi5uZXcgVWludDhBcnJheShjaXBoZXJCeXRlcyksXG4gICAgICAuLi5obWFjLFxuICAgIF0pXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDMzKTtcbiAgfVxuICBjb25zdCBwdWJLZXlVbmNvbXByZXNzZWQgPSBiczU4UHVibGljS2V5VG9CeXRlcyhzdHIpO1xuICByZXR1cm4gUG9pbnQuZnJvbUhleChlY1V0aWxzLmJ5dGVzVG9IZXgocHViS2V5VW5jb21wcmVzc2VkKSkudG9SYXdCeXRlcyh0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBiczU4UHVibGljS2V5VG9CeXRlcyA9IChzdHI6IHN0cmluZykgPT4ge1xuICBjb25zdCBieXRlcyA9IGJzNTguZGVjb2RlKHN0cik7XG4gIGNvbnN0IHBheWxvYWQgPSBieXRlcy5zbGljZSgwLCAtNCk7XG4gIGNvbnN0IGNoZWNrc3VtQSA9IGJ5dGVzLnNsaWNlKC00KTtcbiAgY29uc3QgY2hlY2tzdW1CID0gc2hhMjU2WDIocGF5bG9hZCk7XG5cbiAgaWYgKFxuICAgIChjaGVja3N1bUFbMF0gXiBjaGVja3N1bUJbMF0pIHxcbiAgICAoY2hlY2tzdW1BWzFdIF4gY2hlY2tzdW1CWzFdKSB8XG4gICAgKGNoZWNrc3VtQVsyXSBeIGNoZWNrc3VtQlsyXSkgfFxuICAgIChjaGVja3N1bUFbM10gXiBjaGVja3N1bUJbM10pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGVja3N1bScpO1xuICB9XG5cbiAgcmV0dXJuIFBvaW50LmZyb21IZXgoZWNVdGlscy5ieXRlc1RvSGV4KHBheWxvYWQuc2xpY2UoMykpKS50b1Jhd0J5dGVzKGZhbHNlKTtcbn07XG5cbmNvbnN0IHJlZ2V4TWFpbm5ldCA9IC9eQkNbMS05QS1ISi1OUC1aYS1rbS16XXs1M30kLztcbmNvbnN0IHJlZ2V4VGVzdG5ldCA9IC9edEJDWzEtOUEtSEotTlAtWmEta20tel17NTF9JC87XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQlM1OFB1YmxpY0tleSA9IChwdWJsaWNLZXk6IHN0cmluZywgaXNUZXN0bmV0ID0gZmFsc2UpID0+IHtcbiAgY29uc3QgcmVnZXhQYXR0ZXJuID0gaXNUZXN0bmV0ID8gcmVnZXhUZXN0bmV0IDogcmVnZXhNYWlubmV0O1xuICBpZiAoIXJlZ2V4UGF0dGVybi50ZXN0KHB1YmxpY0tleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNLZXkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBpc1ZhbGlkSG1hYyA9IChjYW5kaWRhdGU6IFVpbnQ4QXJyYXksIGtub3duR29vZDogVWludDhBcnJheSkgPT4ge1xuICBpZiAoY2FuZGlkYXRlLmxlbmd0aCAhPT0ga25vd25Hb29kLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwga25vd25Hb29kLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNhbmRpZGF0ZVtpXSAhPT0ga25vd25Hb29kW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjcnlwdENoYXRNZXNzYWdlID0gYXN5bmMgKFxuICByZWNpcGllbnRTZWVkSGV4OiBzdHJpbmcsXG4gIHB1YmxpY0RlY3J5cHRpb25LZXk6IHN0cmluZyxcbiAgY2lwaGVyVGV4dEhleDogc3RyaW5nXG4pID0+IHtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGVjVXRpbHMuaGV4VG9CeXRlcyhyZWNpcGllbnRTZWVkSGV4KTtcbiAgY29uc3QgcHVibGljS2V5ID0gYXdhaXQgYnM1OFB1YmxpY0tleVRvQnl0ZXMocHVibGljRGVjcnlwdGlvbktleSk7XG4gIGNvbnN0IHNoYXJlZFByaXZhdGVLZXkgPSBhd2FpdCBnZXRTaGFyZWRQcml2YXRlS2V5KHByaXZhdGVLZXksIHB1YmxpY0tleSk7XG4gIHJldHVybiBkZWNyeXB0KHNoYXJlZFByaXZhdGVLZXksIGNpcGhlclRleHRIZXgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSBhc3luYyAoXG4gIHByaXZhdGVEZWNyeXB0aW9uS2V5OiBVaW50OEFycmF5IHwgc3RyaW5nLFxuICBoZXhTdHJpbmc6IHN0cmluZyxcbiAgeyByZXRyeWluZyA9IGZhbHNlIH0gPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYnl0ZXMgPSBlY1V0aWxzLmhleFRvQnl0ZXMoaGV4U3RyaW5nKTtcbiAgY29uc3QgbWV0YUxlbmd0aCA9IDExMztcblxuICBpZiAoYnl0ZXMubGVuZ3RoIDwgbWV0YUxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjaXBoZXIgdGV4dC4gZGF0YSB0b28gc21hbGwuJyk7XG4gIH1cblxuICBpZiAoIShieXRlc1swXSA+PSAyICYmIGJ5dGVzWzBdIDw9IDQpKSB7XG4gICAgLy8gdGhpcyBjb3VsZCBiZSBhIGNhc2Ugd2hlcmUgdGhlIGhleCBzdHJpbmcgaGFzIGJlZW4gZG91YmxlIGVuY29kZWQuLi5cbiAgICAvLyBzbyB3ZSB0cnkgZGVjb2RpbmcgYW5kIGNhbGxpbmcgYWdhaW4uIElmIGl0IGZhaWxzIGFnYWluLCB3ZSBqdXN0IHRocm93LlxuICAgIGlmICghcmV0cnlpbmcpIHtcbiAgICAgIHJldHVybiBkZWNyeXB0KHByaXZhdGVEZWNyeXB0aW9uS2V5LCBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnl0ZXMpLCB7XG4gICAgICAgIHJldHJ5aW5nOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjaXBoZXIgdGV4dC4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcml2YXRlS2V5ID0gbm9ybWFsaXplU2VlZChwcml2YXRlRGVjcnlwdGlvbktleSk7XG4gIGNvbnN0IGVwaGVtUHVibGljS2V5ID0gYnl0ZXMuc2xpY2UoMCwgNjUpO1xuICBjb25zdCBjaXBoZXJUZXh0TGVuZ3RoID0gYnl0ZXMubGVuZ3RoIC0gbWV0YUxlbmd0aDtcbiAgY29uc3QgY291bnRlciA9IGJ5dGVzLnNsaWNlKDY1LCA2NSArIDE2KTtcbiAgY29uc3QgY2lwaGVyQW5kSXYgPSBieXRlcy5zbGljZSg2NSwgNjUgKyAxNiArIGNpcGhlclRleHRMZW5ndGgpO1xuICBjb25zdCBjaXBoZXJUZXh0ID0gY2lwaGVyQW5kSXYuc2xpY2UoMTYpO1xuICBjb25zdCBtc2dNYWMgPSBieXRlcy5zbGljZSg2NSArIDE2ICsgY2lwaGVyVGV4dExlbmd0aCk7XG4gIGNvbnN0IHNoYXJlZFNlY3JldEtleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkocHJpdmF0ZUtleSwgZXBoZW1QdWJsaWNLZXkpO1xuICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gc2hhcmVkU2VjcmV0S2V5LnNsaWNlKDAsIDE2KTtcbiAgY29uc3QgbWFjS2V5ID0gc2hhMjU2KHNoYXJlZFNlY3JldEtleS5zbGljZSgxNikpO1xuICBjb25zdCBobWFjS25vd25Hb29kID0gYXdhaXQgZWNVdGlscy5obWFjU2hhMjU2KG1hY0tleSwgY2lwaGVyQW5kSXYpO1xuXG4gIGlmICghaXNWYWxpZEhtYWMobXNnTWFjLCBobWFjS25vd25Hb29kKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb3JyZWN0IE1BQycpO1xuICB9XG5cbiAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmltcG9ydEtleShcbiAgICAncmF3JyxcbiAgICBlbmNyeXB0aW9uS2V5LFxuICAgICdBRVMtQ1RSJyxcbiAgICB0cnVlLFxuICAgIFsnZGVjcnlwdCddXG4gICk7XG5cbiAgY29uc3QgZGVjcnlwdGVkQnVmZmVyID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAgeyBuYW1lOiAnQUVTLUNUUicsIGNvdW50ZXIsIGxlbmd0aDogMTI4IH0sXG4gICAgY3J5cHRvS2V5LFxuICAgIGNpcGhlclRleHRcbiAgKTtcblxuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRlY3J5cHRlZEJ1ZmZlcik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2hhcmVkUHJpdmF0ZUtleSA9IChcbiAgcHJpdktleTogVWludDhBcnJheSxcbiAgcHViS2V5OiBVaW50OEFycmF5XG4pID0+IHtcbiAgY29uc3Qgc2hhcmVkU2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KHByaXZLZXksIHB1YktleSk7XG5cbiAgcmV0dXJuIGtkZihzaGFyZWRTZWNyZXQsIDMyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNvZGVQdWJsaWNLZXkgPSBhc3luYyAocHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZykgPT4ge1xuICBjb25zdCBkZWNvZGVkID0gYXdhaXQgYnM1OFB1YmxpY0tleVRvQnl0ZXMocHVibGljS2V5QmFzZTU4Q2hlY2spO1xuICBjb25zdCB3aXRoUHJlZml4UmVtb3ZlZCA9IGRlY29kZWQuc2xpY2UoMyk7XG4gIGNvbnN0IHNlbmRlclB1YktleUhleCA9IGVjVXRpbHMuYnl0ZXNUb0hleCh3aXRoUHJlZml4UmVtb3ZlZCk7XG5cbiAgcmV0dXJuIFBvaW50LmZyb21IZXgoc2VuZGVyUHViS2V5SGV4KS50b1Jhd0J5dGVzKGZhbHNlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaGFyZWRTZWNyZXQgPSAocHJpdktleTogVWludDhBcnJheSwgcHViS2V5OiBVaW50OEFycmF5KSA9PiB7XG4gIC8vIHBhc3NpbmcgdHJ1ZSB0byBjb21wcmVzcyB0aGUgcHVibGljIGtleSwgYW5kIHRoZW4gc2xpY2luZyBvZmYgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gbWF0Y2hlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZGVyaXZlIGluIHRoZSBlbGxpcHRpYyBwYWNrYWdlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL25vYmxlLXNlY3AyNTZrMS9pc3N1ZXMvMjgjaXNzdWVjb21tZW50LTk0NjUzODAzN1xuICByZXR1cm4gbm9ibGVHZXRTaGFyZWRTZWNyZXQocHJpdktleSwgcHViS2V5LCB0cnVlKS5zbGljZSgxKTtcbn07XG5cbi8vIHRha2VuIGZyb20gcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGluIHRoZSBkZXNvIGNoYXQgYXBwOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rlc28tcHJvdG9jb2wvYWNjZXNzLWdyb3VwLW1lc3NhZ2luZy1hcHAvYmxvYi9jZDVjMjM3ZjVlNTcyOTE5NmFhYzBkYTE2MWQwODUxYmRlNzgwOTJjL3NyYy9zZXJ2aWNlcy9jcnlwdG8tdXRpbHMuc2VydmljZS50c3gjTDkxXG5leHBvcnQgY29uc3Qga2RmID0gKHNlY3JldDogVWludDhBcnJheSwgb3V0cHV0TGVuZ3RoOiBudW1iZXIpID0+IHtcbiAgbGV0IGN0ciA9IDE7XG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KCk7XG5cbiAgd2hpbGUgKHdyaXR0ZW4gPCBvdXRwdXRMZW5ndGgpIHtcbiAgICBjb25zdCBoYXNoID0gc2hhMjU2KFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAuLi5uZXcgVWludDhBcnJheShbY3RyID4+IDI0LCBjdHIgPj4gMTYsIGN0ciA+PiA4LCBjdHJdKSxcbiAgICAgICAgLi4uc2VjcmV0LFxuICAgICAgXSlcbiAgICApO1xuICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KFsuLi5yZXN1bHQsIC4uLmhhc2hdKTtcbiAgICB3cml0dGVuICs9IDMyO1xuICAgIGN0ciArPSAxO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRoaXMgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBkZXJUb0pvc2UgZnVuY3Rpb24gZnJvbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0JyaWdodHNwYWNlL25vZGUtZWNkc2Etc2lnLWZvcm1hdHRlci9ibG9iL2NhMjVhMmZkNWFlOWRkODUwMzYwODE2MzI5MzZlODAyYTQ3YTEyODkvc3JjL2VjZHNhLXNpZy1mb3JtYXR0ZXIuanMjTDMyXG4vLyBUaGUgb3JpZ2luYWwgcGFja2FnZSBpcyBub3QgYnJvd3NlciBmcmllbmRseSBhbmQgcmVxdWlyZXMgbm9kZSBwb2x5ZmlsbHMuIFdlXG4vLyBhbHNvIGRvbid0IG5lZWQgdG8gYmUgcXVpdGUgYXMgZGVmZW5zaXZlIGFzIHRoZSBvcmlnaW5hbCBwYWNrYWdlIHNpbmNlIHdlXG4vLyBoYXZlIGZ1bGwgY29udHJvbCBvZiB0aGUgaW5wdXQuXG5mdW5jdGlvbiBkZXJUb0pvc2VFbmNvZGluZyhzaWduYXR1cmU6IFVpbnQ4QXJyYXkpIHtcbiAgY29uc3QgcGFyYW1CeXRlcyA9IDMyO1xuXG4gIGxldCBvZmZzZXQgPSAzO1xuICBjb25zdCByTGVuZ3RoID0gc2lnbmF0dXJlW29mZnNldF07XG4gIG9mZnNldCArPSAxO1xuICBjb25zdCByT2Zmc2V0ID0gb2Zmc2V0O1xuICBvZmZzZXQgKz0gckxlbmd0aCArIDE7XG4gIGNvbnN0IHNMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0XTtcbiAgb2Zmc2V0ICs9IDE7XG4gIGNvbnN0IHNPZmZzZXQgPSBvZmZzZXQ7XG4gIG9mZnNldCArPSBzTGVuZ3RoO1xuXG4gIGNvbnN0IHJQYWRkaW5nID0gcGFyYW1CeXRlcyAtIHJMZW5ndGg7XG4gIGNvbnN0IHNQYWRkaW5nID0gcGFyYW1CeXRlcyAtIHNMZW5ndGg7XG5cbiAgY29uc3Qgb3V0UHV0ID0gbmV3IFVpbnQ4QXJyYXkoclBhZGRpbmcgKyByTGVuZ3RoICsgc1BhZGRpbmcgKyBzTGVuZ3RoKTtcblxuICBmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IHJQYWRkaW5nOyArK29mZnNldCkge1xuICAgIG91dFB1dFtvZmZzZXRdID0gMDtcbiAgfVxuXG4gIG91dFB1dC5zZXQoXG4gICAgc2lnbmF0dXJlLnNsaWNlKHJPZmZzZXQgKyBNYXRoLm1heCgtclBhZGRpbmcsIDApLCByT2Zmc2V0ICsgckxlbmd0aCksXG4gICAgb2Zmc2V0XG4gICk7XG5cbiAgb2Zmc2V0ID0gcGFyYW1CeXRlcztcblxuICBmb3IgKGNvbnN0IG8gPSBvZmZzZXQ7IG9mZnNldCA8IG8gKyBzUGFkZGluZzsgKytvZmZzZXQpIHtcbiAgICBvdXRQdXRbb2Zmc2V0XSA9IDA7XG4gIH1cblxuICBvdXRQdXQuc2V0KFxuICAgIHNpZ25hdHVyZS5zbGljZShzT2Zmc2V0ICsgTWF0aC5tYXgoLXNQYWRkaW5nLCAwKSwgc09mZnNldCArIHNMZW5ndGgpLFxuICAgIG9mZnNldFxuICApO1xuXG4gIGNvbnN0IG91dHB1dENoYXJzID0gb3V0UHV0LnJlZHVjZShcbiAgICAoZGF0YSwgYnl0ZSkgPT4gZGF0YSArIFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSksXG4gICAgJydcbiAgKTtcblxuICByZXR1cm4gdXJsU2FmZUJhc2U2NChvdXRwdXRDaGFycyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVBY2Nlc3NHcm91cEtleVBhaXIoXG4gIHByaXZhdGVLZXlIZXg6IHN0cmluZyxcbiAgZ3JvdXBLZXlOYW1lOiBzdHJpbmdcbik6IEtleVBhaXIge1xuICBjb25zdCBzZWNyZXRIYXNoID0gc2hhMjU2WDIocHJpdmF0ZUtleUhleCk7XG4gIGNvbnN0IGtleU5hbWVIYXNoID0gc2hhMjU2WDIobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGdyb3VwS2V5TmFtZSkpO1xuICBjb25zdCBwcml2YXRlS2V5ID0gc2hhMjU2WDIobmV3IFVpbnQ4QXJyYXkoWy4uLnNlY3JldEhhc2gsIC4uLmtleU5hbWVIYXNoXSkpO1xuXG4gIHJldHVybiBrZXlnZW4ocHJpdmF0ZUtleSk7XG59XG4iXX0=

@@ -1,4 +0,4 @@

import { ConstructedTransactionResponse, DAOCoinLimitOrderRequest, DAOCoinOrderResponse, DAOCoinLimitOrderWithCancelOrderIDRequest, DAOCoinRequest, DAOCoinResponse, RequestOptions, TransferDAOCoinRequest, TransferDAOCoinResponse, TxRequestWithOptionalFeesAndExtraData, DAOCoinMarketOrderRequest } from '../backend-types/index.js';
import { ConstructedTransactionResponse, DAOCoinLimitOrderRequest, DAOCoinLimitOrderWithCancelOrderIDRequest, DAOCoinMarketOrderRequest, DAOCoinOrderResponse, DAOCoinRequest, DAOCoinResponse, RequestOptions, TransferDAOCoinRequest, TransferDAOCoinResponse, TxRequestWithOptionalFeesAndExtraData } from '../backend-types/index.js';
import { PartialWithRequiredFields } from '../data/index.js';
import { ConstructedAndSubmittedTx } from '../types.js';
import { ConstructedAndSubmittedTx, TxRequestOptions } from '../types.js';
/**

@@ -28,3 +28,3 @@ * https://docs.deso.org/deso-backend/construct-transactions/dao-transactions-api#create-deso-token-dao-coin

*/
export declare const transferDeSoToken: (params: TxRequestWithOptionalFeesAndExtraData<TransferDAOCoinRequest>, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<TransferDAOCoinResponse>>;
export declare const transferDeSoToken: (params: TxRequestWithOptionalFeesAndExtraData<TransferDAOCoinRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<TransferDAOCoinResponse>>;
export declare const constructTransferDeSoToken: (params: TxRequestWithOptionalFeesAndExtraData<TransferDAOCoinRequest>) => Promise<ConstructedTransactionResponse>;

@@ -31,0 +31,0 @@ /**

import { hexToBytes } from '@noble/hashes/utils';
import { TransactionMetadataDAOCoin, TransactionMetadataTransferDAOCoin, bs58PublicKeyToCompressedBytes, } from '../identity/index.js';
import { constructBalanceModelTx, handleSignAndSubmit, isMaybeDeSoPublicKey, } from '../internal.js';
import { TransactionMetadataDAOCoin, TransactionMetadataTransferDAOCoin, bs58PublicKeyToCompressedBytes, identity, } from '../identity/index.js';
import { constructBalanceModelTx, getTxWithFeeNanos, handleSignAndSubmit, isMaybeDeSoPublicKey, sumTransactionFees, } from '../internal.js';
import { guardTxPermission } from './utils.js';
export const burnDeSoToken = (params, options) => {

@@ -98,4 +99,2 @@ return handleSignAndSubmit('api/v0/dao-coin', {

const metadata = new TransactionMetadataDAOCoin();
// TODO: I know we're passing hex strings representing uint256, but need
// to figure out how they go to bytes.
if (!isMaybeDeSoPublicKey(params.ProfilePublicKeyBase58CheckOrUsername)) {

@@ -115,3 +114,34 @@ return Promise.reject('must provide profile public key, not username for local transaction construction');

*/
export const transferDeSoToken = (params, options) => {
export const transferDeSoToken = async (params, options) => {
if (options?.checkPermissions !== false) {
const txWithFee = getTxWithFeeNanos(params.SenderPublicKeyBase58Check, new TransactionMetadataTransferDAOCoin(), {
// TODO: I'm not sure exactly what outputs are needed here... for the time
// being I'm just adding a static 1500 nanos to make sure the derived key
// transaction can be submitted.
// Outputs: ...,
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if (!isMaybeDeSoPublicKey(params.ProfilePublicKeyBase58CheckOrUsername)) {
return Promise.reject('must provide profile public key, not username for ProfilePublicKeyBase58CheckOrUsername when checking dao coin transfer permissions');
}
await guardTxPermission({
GlobalDESOLimit:
// TODO: when I figure out how to properly calculate the fee for this transaction
// we can remove this static 1500 buffer.
txWithFee.feeNanos + sumTransactionFees(params.TransactionFees) + 1500,
TransactionCountLimitMap: {
DAO_COIN_TRANSFER: options?.txLimitCount ??
identity.transactionSpendingLimitOptions.TransactionCountLimitMap
?.DAO_COIN_TRANSFER ??
1,
},
DAOCoinOperationLimitMap: {
[params.ProfilePublicKeyBase58CheckOrUsername]: {
transfer: 1,
},
},
});
}
return handleSignAndSubmit('api/v0/transfer-dao-coin', params, {

@@ -170,2 +200,2 @@ ...options,

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzby10b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb25zL2Rlc28tdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWdCakQsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixrQ0FBa0MsRUFDbEMsOEJBQThCLEdBQy9CLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsb0JBQW9CLEdBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFjeEIsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQzNCLE1BQTJDLEVBQzNDLE9BQXdCLEVBQzZCLEVBQUU7SUFDdkQsT0FBTyxtQkFBbUIsQ0FDeEIsaUJBQWlCLEVBQ2pCO1FBQ0UsR0FBRyxNQUFNO1FBQ1QsYUFBYSxFQUFFLE1BQU07S0FDdEIsRUFDRCxFQUFFLEdBQUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlDQUFpQyxFQUFFLENBQ3hFLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxDQUMvQyxNQUEyQyxFQUNGLEVBQUU7SUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO0lBQ2xELHdFQUF3RTtJQUN4RSxzQ0FBc0M7SUFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFO1FBQ3ZFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FDbkIsa0ZBQWtGLENBQ25GLENBQUM7S0FDSDtJQUNELFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQ3BDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUMzQyxDQUFDO0lBQ0YsUUFBUSxDQUFDLGdCQUFnQixHQUFHLDhC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Q0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDdkMsTUFBd0YsRUFDeEYsT0FBd0IsRUFDa0MsRUFBRTtJQUM1RCxPQUFPLG1CQUFtQixDQUN4QixvQ0FBb0MsRUFDcEMsTUFBTSxFQUNOLE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaGV4VG9CeXRlcyB9IGZyb20gJ0Bub2JsZS9oYXNoZXMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlLFxuICBEQU9Db2luTGltaXRPcmRlclJlcXVlc3QsXG4gIERBT0NvaW5PcmRlclJlc3BvbnNlLFxuICBEQU9Db2luTGltaXRPcmRlcldpdGhDYW5jZWxPcmRlcklEUmVxdWVzdCxcbiAgREFPQ29pbkxpbWl0T3JkZXJXaXRoRXhjaGFuZ2VSYXRlQW5kUXVhbnRpdHlSZXF1ZXN0LFxuICBEQU9Db2luUmVxdWVzdCxcbiAgREFPQ29pblJlc3BvbnNlLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgVHJhbnNmZXJEQU9Db2luUmVxdWVzdCxcbiAgVHJhbnNmZXJEQU9Db2luUmVzcG9uc2UsXG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGEsXG4gIERBT0NvaW5NYXJrZXRPcmRlclJlcXVlc3QsXG59IGZyb20gJy4uL2JhY2tlbmQtdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkcyB9IGZyb20gJy4uL2RhdGEvaW5kZXguanMnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YURBT0NvaW4sXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFUcmFuc2ZlckRBT0NvaW4sXG4gIGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyxcbn0gZnJvbSAnLi4vaWRlbnRpdHkvaW5kZXguanMnO1xuaW1wb3J0IHtcbiAgY29uc3RydWN0QmFsYW5jZU1vZGVsVHgsXG4gIGhhbmRsZVNpZ25BbmRTdWJtaXQsXG4gIGlzTWF5YmVEZVNvUHVibGljS2V5LFxufSBmcm9tICcuLi9pbnRlcm5hbC5qcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZGFvLXRyYW5zYWN0aW9ucy1hcGkjY3JlYXRlLWRlc28tdG9rZW4tZGFvLWNvaW5cbiAqL1xuZXhwb3J0IHR5cGUgQ29uc3RydWN0QnVybkRlU29Ub2tlblJlcXVlc3RQYXJhbXMgPVxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBPbWl0PERBT0NvaW5SZXF1ZXN0LCAnT3BlcmF0aW9uVHlwZSc+LFxuICAgICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZSdcbiAgICAgIHwgJ0NvaW5zVG9CdXJuTmFub3MnXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IGJ1cm5EZVNvVG9rZW4gPSAoXG4gIHBhcmFtczogQ29uc3RydWN0QnVybkRlU29Ub2tlblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PERBT0NvaW5SZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9kYW8tY29pbicsXG4gICAge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgT3BlcmF0aW9uVHlwZTogJ2J1cm4nLFxuICAgIH0sXG4gICAgeyAuLi5vcHRpb25zLCBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0QnVybkRlU29Ub2tlblRyYW5zYWN0aW9uIH1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RCdXJuRGVTb1Rva2VuVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogQ29uc3RydWN0QnVybkRlU29Ub2tlblJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFEQU9Db2luKCk7XG4gIC8vIFRPRE86IEkga25vdyB3ZSdyZSBwYXNzaW5nIGhleCBzdHJpbmdzIHJlcHJlc2VudGluZyB1aW50MjU2LCBidXQgbmVlZFxuICAvLyB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGdvIHRvIGJ5dGVzLlxuICBpZiAoIWlzTWF5YmVEZVNvUHVibGljS2V5KHBhcmFtcy5Qcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICdtdXN0IHByb3ZpZGUgcHJvZmlsZSBwdWJsaWMga2V5LCBub3QgdXNlcm5hbWUgZm9yIGxvY2FsIHRyYW5zYWN0aW9uIGNvbnN0cnVjdGlvbidcbiAgICApO1xuICB9XG4gIG1ldGFkYXRhLmNvaW5zVG9CdXJuTmFub3MgPSBoZXhUb0J5dGVzKFxuICAgIHBhcmFtcy5Db2luc1RvQnVybk5hbm9zLnJlcGxhY2UoJzB4JywgJ3gnKVxuICApO1xuICBtZXRhZGF0YS5wcm9maWxlUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5Qcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lXG4gICk7XG4gIG1ldGFkYXRhLm9wZXJhdGlvblR5cGUgPSAxO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZGFvLXRyYW5zYWN0aW9ucy1hcGkjY3JlYXRlLWRlc28tdG9rZW4tZGFvLWNvaW5cbiAqL1xuZXhwb3J0IHR5cGUgTWludERlU29Ub2tlblJlcXVlc3RQYXJhbXMgPSBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIE9taXQ8REFPQ29pblJlcXVlc3QsICdPcGVyYXRpb25UeXBlJz4sXG4gICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ1Byb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWUnXG4gICAgfCAnQ29pbnNUb01pbnROYW5vcydcbiAgPlxuPjtcbmV4cG9ydCBjb25zdCBtaW50RGVTb1Rva2VuID0gKFxuICBwYXJhbXM6IE1pbnREZVNvVG9rZW5SZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxEQU9Db2luUmVzcG9uc2U+PiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KFxuICAgICdhcGkvdjAvZGFvLWNvaW4nLFxuICAgIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIE9wZXJhdGlvblR5cGU6ICdtaW50JyxcbiAgICB9LFxuICAgIHsgLi4ub3B0aW9ucywgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdE1pbnREZVNvVG9rZW5UcmFuc2FjdGlvbiB9XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0TWludERlU29Ub2tlblRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IE1pbnREZVNvVG9rZW5SZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhREFPQ29pbigpO1xuICAvLyBUT0RPOiBJIGtub3cgd2UncmUgcGFzc2luZyBoZXggc3RyaW5ncyByZXByZXNlbnRpbmcgdWludDI1NiwgYnV0IG5lZWRcbiAgLy8gdG8gZmlndXJlIG91dCBob3cgdGhleSBnbyB0byBieXRlcy5cbiAgaWYgKCFpc01heWJlRGVTb1B1YmxpY0tleShwYXJhbXMuUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZSkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAnbXVzdCBwcm92aWRlIHByb2ZpbGUgcHVibGljIGtleSwgbm90IHVzZXJuYW1lIGZvciBsb2NhbCB0cmFuc2FjdGlvbiBjb25zdHJ1Y3Rpb24nXG4gICAgKTtcbiAgfVxuICBtZXRhZGF0YS5jb2luc1RvTWludE5hbm9zID0gaGV4VG9CeXRlcyhcbiAgICBwYXJhbXMuQ29pbnNUb01pbnROYW5vcy5yZXBsYWNlKCcweCcsICd4JylcbiAgKTtcbiAgbWV0YWRhdGEucHJvZmlsZVB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZVxuICApO1xuICBtZXRhZGF0YS5vcGVyYXRpb25UeXBlID0gMDtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KHBhcmFtcy5VcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssIG1ldGFkYXRhLCB7XG4gICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICB9KTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2Rhby10cmFuc2FjdGlvbnMtYXBpI2NyZWF0ZS1kZXNvLXRva2VuLWRhby1jb2luXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZURlU29Ub2tlblRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXNSZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgT21pdDxEQU9Db2luUmVxdWVzdCwgJ09wZXJhdGlvblR5cGUnPixcbiAgICAgICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snIHwgJ1Byb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWUnXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZURlU29Ub2tlblRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXMgPSAoXG4gIHBhcmFtczogVXBkYXRlRGVTb1Rva2VuVHJhbnNmZXJSZXN0cmljdGlvblN0YXR1c1JlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PERBT0NvaW5SZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9kYW8tY29pbicsXG4gICAge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgT3BlcmF0aW9uVHlwZTogJ3VwZGF0ZV90cmFuc2Zlcl9yZXN0cmljdGlvbl9zdGF0dXMnLFxuICAgIH0sXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOlxuICAgICAgICBjb25zdHJ1Y3RVcGRhdGVEZVNvVG9rZW5UcmFuc2ZlclJlc3RyaWN0aW9uU3RhdHVzVHJhbnNhY3Rpb24sXG4gICAgfVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFVwZGF0ZURlU29Ub2tlblRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXNUcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBVcGRhdGVEZVNvVG9rZW5UcmFuc2ZlclJlc3RyaWN0aW9uU3RhdHVzUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YURBT0NvaW4oKTtcbiAgLy8gVE9ETzogSSBrbm93IHdlJ3JlIHBhc3NpbmcgaGV4IHN0cmluZ3MgcmVwcmVzZW50aW5nIHVpbnQyNTYsIGJ1dCBuZWVkXG4gIC8vIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgZ28gdG8gYnl0ZXMuXG4gIGlmICghaXNNYXliZURlU29QdWJsaWNLZXkocGFyYW1zLlByb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWUpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgJ211c3QgcHJvdmlkZSBwcm9maWxlIHB1YmxpYyBrZXksIG5vdCB1c2VybmFtZSBmb3IgbG9jYWwgdHJhbnNhY3Rpb24gY29uc3RydWN0aW9uJ1xuICAgICk7XG4gIH1cbiAgbWV0YWRhdGEucHJvZmlsZVB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZVxuICApO1xuICBtZXRhZGF0YS5vcGVyYXRpb25UeXBlID0gMztcbiAgbGV0IHRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXM6IG51bWJlcjtcbiAgc3dpdGNoIChwYXJhbXMuVHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cykge1xuICAgIGNhc2UgJ2Rhb19tZW1iZXJzX29ubHknOlxuICAgICAgdHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cyA9IDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwZXJtYW5lbnRseV91bnJlc3RyaWN0ZWQnOlxuICAgICAgdHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cyA9IDM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwcm9maWxlX293bmVyX29ubHknOlxuICAgICAgdHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cyA9IDE7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1bnJlc3RyaWN0ZWQnOlxuICAgICAgdHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cyA9IDA7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdpbnZhbGlkIHRyYW5zZmVyIHJlc3RyaWN0aW9uIHN0YXR1cyB2YWx1ZScpO1xuICB9XG4gIG1ldGFkYXRhLnRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXMgPSB0cmFuc2ZlclJlc3RyaWN0aW9uU3RhdHVzO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gIH0pO1xufTtcblxuZXhwb3J0IHR5cGUgRGlzYWJsZU1pbnRpbmdEZVNvVG9rZW5SZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgT21pdDxEQU9Db2luUmVxdWVzdCwgJ09wZXJhdGlvblR5cGUnPixcbiAgICAgICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snIHwgJ1Byb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWUnXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IGRpc2FibGVNaW50aW5nRGVTb1Rva2VuID0gKFxuICBwYXJhbXM6IERpc2FibGVNaW50aW5nRGVTb1Rva2VuUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8REFPQ29pblJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2Rhby1jb2luJyxcbiAgICB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBPcGVyYXRpb25UeXBlOiAnZGlzYWJsZV9taW50aW5nJyxcbiAgICB9LFxuICAgIHsgLi4ub3B0aW9ucywgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdERpc2FibGVNaW50aW5nRGVTb1Rva2VuIH1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3REaXNhYmxlTWludGluZ0RlU29Ub2tlbiA9IChcbiAgcGFyYW1zOiBEaXNhYmxlTWludGluZ0RlU29Ub2tlblJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFEQU9Db2luKCk7XG4gIC8vIFRPRE86IEkga25vdyB3ZSdyZSBwYXNzaW5nIGhleCBzdHJpbmdzIHJlcHJlc2VudGluZyB1aW50MjU2LCBidXQgbmVlZFxuICAvLyB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGdvIHRvIGJ5dGVzLlxuICBpZiAoIWlzTWF5YmVEZVNvUHVibGljS2V5KHBhcmFtcy5Qcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICdtdXN0IHByb3ZpZGUgcHJvZmlsZSBwdWJsaWMga2V5LCBub3QgdXNlcm5hbWUgZm9yIGxvY2FsIHRyYW5zYWN0aW9uIGNvbnN0cnVjdGlvbidcbiAgICApO1xuICB9XG4gIG1ldGFkYXRhLnByb2ZpbGVQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLlByb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWVcbiAgKTtcbiAgbWV0YWRhdGEub3BlcmF0aW9uVHlwZSA9IDI7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChwYXJhbXMuVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrLCBtZXRhZGF0YSwge1xuICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9kYW8tdHJhbnNhY3Rpb25zLWFwaSN0cmFuc2Zlci1kZXNvLXRva2VuLWRhby1jb2luXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFuc2ZlckRlU29Ub2tlbiA9IChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFRyYW5zZmVyREFPQ29pblJlcXVlc3Q+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxUcmFuc2ZlckRBT0NvaW5SZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC90cmFuc2Zlci1kYW8tY29pbicsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdFRyYW5zZmVyRGVTb1Rva2VuLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RUcmFuc2ZlckRlU29Ub2tlbiA9IChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFRyYW5zZmVyREFPQ29pblJlcXVlc3Q+XG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBpZiAoIWlzTWF5YmVEZVNvUHVibGljS2V5KHBhcmFtcy5Qcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICdtdXN0IHByb3ZpZGUgcHJvZmlsZSBwdWJsaWMga2V5LCBub3QgdXNlcm5hbWUgZm9yIGxvY2FsIHRyYW5zYWN0aW9uIGNvbnN0cnVjdGlvbidcbiAgICApO1xuICB9XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFUcmFuc2ZlckRBT0NvaW4oKTtcbiAgbWV0YWRhdGEuZGFvQ29pblRvVHJhbnNmZXJOYW5vcyA9IGhleFRvQnl0ZXMoXG4gICAgcGFyYW1zLkRBT0NvaW5Ub1RyYW5zZmVyTmFub3MucmVwbGFjZSgnMHgnLCAneCcpXG4gICk7XG4gIG1ldGFkYXRhLnByb2ZpbGVQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLlByb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWVcbiAgKTtcbiAgbWV0YWRhdGEucmVjZWl2ZXJQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLlJlY2VpdmVyUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lXG4gICk7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChwYXJhbXMuU2VuZGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssIG1ldGFkYXRhLCB7XG4gICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICB9KTtcbn07XG5cbi8vIFRPRE86IEJhbGFuY2UgbW9kZWwgdHJhbnNhY3Rpb24gY29uc3RydWN0aW9uIGZvciBsaW1pdCBvcmRlcnMuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9kYW8tdHJhbnNhY3Rpb25zLWFwaSNjcmVhdGUtZGVzby10b2tlbi1kYW8tY29pbi1saW1pdC1vcmRlclxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRGVTb1Rva2VuTGltaXRPcmRlciA9IChcbiAgcGFyYW1zOiBEQU9Db2luTGltaXRPcmRlclJlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PERBT0NvaW5PcmRlclJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2NyZWF0ZS1kYW8tY29pbi1saW1pdC1vcmRlcicsXG4gICAge1xuICAgICAgLi4ucGFyYW1zLFxuICAgIH0sXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlU29Ub2tlbk1hcmtldE9yZGVyID0gKFxuICBwYXJhbXM6IERBT0NvaW5NYXJrZXRPcmRlclJlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PERBT0NvaW5PcmRlclJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2NyZWF0ZS1kYW8tY29pbi1tYXJrZXQtb3JkZXInLFxuICAgIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBidXlEZVNvVG9rZW5NYXJrZXRPcmRlciA9IChcbiAgcGFyYW1zOiBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIE9taXQ8XG4gICAgICBEQU9Db2luTWFya2V0T3JkZXJSZXF1ZXN0LFxuICAgICAgJ1NlbGxpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJyB8ICdPcGVyYXRpb25UeXBlJ1xuICAgID4sXG4gICAgfCAnVHJhbnNhY3RvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ0J1eWluZ0RBT0NvaW5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgfCAnUXVhbnRpdHknXG4gID4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PERBT0NvaW5PcmRlclJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2NyZWF0ZS1kYW8tY29pbi1tYXJrZXQtb3JkZXInLFxuICAgIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIFNlbGxpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrOiAnJyxcbiAgICAgIE9wZXJhdGlvblR5cGU6ICdCSUQnLFxuICAgIH0sXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGxEZVNvVG9rZW5NYXJrZXRPcmRlciA9IChcbiAgcGFyYW1zOiBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIE9taXQ8XG4gICAgICBEQU9Db2luTWFya2V0T3JkZXJSZXF1ZXN0LFxuICAgICAgJ0J1eWluZ0RBT0NvaW5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snIHwgJ09wZXJhdGlvblR5cGUnXG4gICAgPixcbiAgICB8ICdUcmFuc2FjdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgfCAnU2VsbGluZ0RBT0NvaW5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgfCAnUXVhbnRpdHknXG4gID4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PERBT0NvaW5PcmRlclJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2NyZWF0ZS1kYW8tY29pbi1tYXJrZXQtb3JkZXInLFxuICAgIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIFNlbGxpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrOiAnJyxcbiAgICAgIE9wZXJhdGlvblR5cGU6ICdBU0snLFxuICAgIH0sXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZGFvLXRyYW5zYWN0aW9ucy1hcGkjY2FuY2VsLWRlc28tdG9rZW4tZGFvLWNvaW4tbGltaXQtb3JkZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbmNlbERlU29Ub2tlbkxpbWl0T3JkZXIgPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxEQU9Db2luTGltaXRPcmRlcldpdGhDYW5jZWxPcmRlcklEUmVxdWVzdD4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PERBT0NvaW5PcmRlclJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2NhbmNlbC1kYW8tY29pbi1saW1pdC1vcmRlcicsXG4gICAgcGFyYW1zLFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzby10b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb25zL2Rlc28tdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWVqRCxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLGtDQUFrQyxFQUNsQyw4QkFBOEIsRUFDOUIsUUFBUSxHQUNULE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFjL0MsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQzNCLE1BQTJDLEVBQzNDLE9BQXdCLEVBQzZCLEVBQUU7SUFDdkQsT0FBTyxtQkFBbUIsQ0FDeEIsaUJBQWlCLEVBQ2pCO1FBQ0UsR0FBRyxNQUFNO1FBQ1QsYUFBYSxFQUFFLE1BQU07S0FDdEIsRUFDRCxFQUFFLEdBQUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlDQUFpQyxFQUFFLENBQ3hFLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxDQUMvQyxNQUEyQyxFQUNGLEVBQUU7SUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO0lBQ2xELHdFQUF3RTtJQUN4RSxzQ0FBc0M7SUFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFO1FBQ3ZFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FDbkIsa0ZBQWtGLENBQ25GLENBQUM7S0FDSDtJQUNELFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQ3BDLE1BQU0sQ0FBQyxnQkFB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Q2tDLEVBQUU7SUFDNUQsT0FBTyxtQkFBbUIsQ0FDeEIsb0NBQW9DLEVBQ3BDLE1BQU0sRUFDTixPQUFPLENBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhleFRvQnl0ZXMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7XG4gIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgREFPQ29pbkxpbWl0T3JkZXJSZXF1ZXN0LFxuICBEQU9Db2luTGltaXRPcmRlcldpdGhDYW5jZWxPcmRlcklEUmVxdWVzdCxcbiAgREFPQ29pbk1hcmtldE9yZGVyUmVxdWVzdCxcbiAgREFPQ29pbk9yZGVyUmVzcG9uc2UsXG4gIERBT0NvaW5SZXF1ZXN0LFxuICBEQU9Db2luUmVzcG9uc2UsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBUcmFuc2ZlckRBT0NvaW5SZXF1ZXN0LFxuICBUcmFuc2ZlckRBT0NvaW5SZXNwb25zZSxcbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YSxcbn0gZnJvbSAnLi4vYmFja2VuZC10eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzIH0gZnJvbSAnLi4vZGF0YS9pbmRleC5qcyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbk1ldGFkYXRhREFPQ29pbixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YVRyYW5zZmVyREFPQ29pbixcbiAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzLFxuICBpZGVudGl0eSxcbn0gZnJvbSAnLi4vaWRlbnRpdHkvaW5kZXguanMnO1xuaW1wb3J0IHtcbiAgY29uc3RydWN0QmFsYW5jZU1vZGVsVHgsXG4gIGdldFR4V2l0aEZlZU5hbm9zLFxuICBoYW5kbGVTaWduQW5kU3VibWl0LFxuICBpc01heWJlRGVTb1B1YmxpY0tleSxcbiAgc3VtVHJhbnNhY3Rpb25GZWVzLFxufSBmcm9tICcuLi9pbnRlcm5hbC5qcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4LCBUeFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZ3VhcmRUeFBlcm1pc3Npb24gfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZGFvLXRyYW5zYWN0aW9ucy1hcGkjY3JlYXRlLWRlc28tdG9rZW4tZGFvLWNvaW5cbiAqL1xuZXhwb3J0IHR5cGUgQ29uc3RydWN0QnVybkRlU29Ub2tlblJlcXVlc3RQYXJhbXMgPVxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBPbWl0PERBT0NvaW5SZXF1ZXN0LCAnT3BlcmF0aW9uVHlwZSc+LFxuICAgICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZSdcbiAgICAgIHwgJ0NvaW5zVG9CdXJuTmFub3MnXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IGJ1cm5EZVNvVG9rZW4gPSAoXG4gIHBhcmFtczogQ29uc3RydWN0QnVybkRlU29Ub2tlblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PERBT0NvaW5SZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9kYW8tY29pbicsXG4gICAge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgT3BlcmF0aW9uVHlwZTogJ2J1cm4nLFxuICAgIH0sXG4gICAgeyAuLi5vcHRpb25zLCBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0QnVybkRlU29Ub2tlblRyYW5zYWN0aW9uIH1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RCdXJuRGVTb1Rva2VuVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogQ29uc3RydWN0QnVybkRlU29Ub2tlblJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFEQU9Db2luKCk7XG4gIC8vIFRPRE86IEkga25vdyB3ZSdyZSBwYXNzaW5nIGhleCBzdHJpbmdzIHJlcHJlc2VudGluZyB1aW50MjU2LCBidXQgbmVlZFxuICAvLyB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGdvIHRvIGJ5dGVzLlxuICBpZiAoIWlzTWF5YmVEZVNvUHVibGljS2V5KHBhcmFtcy5Qcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICdtdXN0IHByb3ZpZGUgcHJvZmlsZSBwdWJsaWMga2V5LCBub3QgdXNlcm5hbWUgZm9yIGxvY2FsIHRyYW5zYWN0aW9uIGNvbnN0cnVjdGlvbidcbiAgICApO1xuICB9XG4gIG1ldGFkYXRhLmNvaW5zVG9CdXJuTmFub3MgPSBoZXhUb0J5dGVzKFxuICAgIHBhcmFtcy5Db2luc1RvQnVybk5hbm9zLnJlcGxhY2UoJzB4JywgJ3gnKVxuICApO1xuICBtZXRhZGF0YS5wcm9maWxlUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5Qcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lXG4gICk7XG4gIG1ldGFkYXRhLm9wZXJhdGlvblR5cGUgPSAxO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZGFvLXRyYW5zYWN0aW9ucy1hcGkjY3JlYXRlLWRlc28tdG9rZW4tZGFvLWNvaW5cbiAqL1xuZXhwb3J0IHR5cGUgTWludERlU29Ub2tlblJlcXVlc3RQYXJhbXMgPSBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIE9taXQ8REFPQ29pblJlcXVlc3QsICdPcGVyYXRpb25UeXBlJz4sXG4gICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ1Byb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWUnXG4gICAgfCAnQ29pbnNUb01pbnROYW5vcydcbiAgPlxuPjtcbmV4cG9ydCBjb25zdCBtaW50RGVTb1Rva2VuID0gKFxuICBwYXJhbXM6IE1pbnREZVNvVG9rZW5SZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxEQU9Db2luUmVzcG9uc2U+PiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KFxuICAgICdhcGkvdjAvZGFvLWNvaW4nLFxuICAgIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIE9wZXJhdGlvblR5cGU6ICdtaW50JyxcbiAgICB9LFxuICAgIHsgLi4ub3B0aW9ucywgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdE1pbnREZVNvVG9rZW5UcmFuc2FjdGlvbiB9XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0TWludERlU29Ub2tlblRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IE1pbnREZVNvVG9rZW5SZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhREFPQ29pbigpO1xuICAvLyBUT0RPOiBJIGtub3cgd2UncmUgcGFzc2luZyBoZXggc3RyaW5ncyByZXByZXNlbnRpbmcgdWludDI1NiwgYnV0IG5lZWRcbiAgLy8gdG8gZmlndXJlIG91dCBob3cgdGhleSBnbyB0byBieXRlcy5cbiAgaWYgKCFpc01heWJlRGVTb1B1YmxpY0tleShwYXJhbXMuUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZSkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAnbXVzdCBwcm92aWRlIHByb2ZpbGUgcHVibGljIGtleSwgbm90IHVzZXJuYW1lIGZvciBsb2NhbCB0cmFuc2FjdGlvbiBjb25zdHJ1Y3Rpb24nXG4gICAgKTtcbiAgfVxuICBtZXRhZGF0YS5jb2luc1RvTWludE5hbm9zID0gaGV4VG9CeXRlcyhcbiAgICBwYXJhbXMuQ29pbnNUb01pbnROYW5vcy5yZXBsYWNlKCcweCcsICd4JylcbiAgKTtcbiAgbWV0YWRhdGEucHJvZmlsZVB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZVxuICApO1xuICBtZXRhZGF0YS5vcGVyYXRpb25UeXBlID0gMDtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KHBhcmFtcy5VcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssIG1ldGFkYXRhLCB7XG4gICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICB9KTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2Rhby10cmFuc2FjdGlvbnMtYXBpI2NyZWF0ZS1kZXNvLXRva2VuLWRhby1jb2luXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZURlU29Ub2tlblRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXNSZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgT21pdDxEQU9Db2luUmVxdWVzdCwgJ09wZXJhdGlvblR5cGUnPixcbiAgICAgICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snIHwgJ1Byb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWUnXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZURlU29Ub2tlblRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXMgPSAoXG4gIHBhcmFtczogVXBkYXRlRGVTb1Rva2VuVHJhbnNmZXJSZXN0cmljdGlvblN0YXR1c1JlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PERBT0NvaW5SZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9kYW8tY29pbicsXG4gICAge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgT3BlcmF0aW9uVHlwZTogJ3VwZGF0ZV90cmFuc2Zlcl9yZXN0cmljdGlvbl9zdGF0dXMnLFxuICAgIH0sXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOlxuICAgICAgICBjb25zdHJ1Y3RVcGRhdGVEZVNvVG9rZW5UcmFuc2ZlclJlc3RyaWN0aW9uU3RhdHVzVHJhbnNhY3Rpb24sXG4gICAgfVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFVwZGF0ZURlU29Ub2tlblRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXNUcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBVcGRhdGVEZVNvVG9rZW5UcmFuc2ZlclJlc3RyaWN0aW9uU3RhdHVzUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YURBT0NvaW4oKTtcbiAgLy8gVE9ETzogSSBrbm93IHdlJ3JlIHBhc3NpbmcgaGV4IHN0cmluZ3MgcmVwcmVzZW50aW5nIHVpbnQyNTYsIGJ1dCBuZWVkXG4gIC8vIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgZ28gdG8gYnl0ZXMuXG4gIGlmICghaXNNYXliZURlU29QdWJsaWNLZXkocGFyYW1zLlByb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWUpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgJ211c3QgcHJvdmlkZSBwcm9maWxlIHB1YmxpYyBrZXksIG5vdCB1c2VybmFtZSBmb3IgbG9jYWwgdHJhbnNhY3Rpb24gY29uc3RydWN0aW9uJ1xuICAgICk7XG4gIH1cbiAgbWV0YWRhdGEucHJvZmlsZVB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZVxuICApO1xuICBtZXRhZGF0YS5vcGVyYXRpb25UeXBlID0gMztcbiAgbGV0IHRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXM6IG51bWJlcjtcbiAgc3dpdGNoIChwYXJhbXMuVHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cykge1xuICAgIGNhc2UgJ2Rhb19tZW1iZXJzX29ubHknOlxuICAgICAgdHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cyA9IDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwZXJtYW5lbnRseV91bnJlc3RyaWN0ZWQnOlxuICAgICAgdHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cyA9IDM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwcm9maWxlX293bmVyX29ubHknOlxuICAgICAgdHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cyA9IDE7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1bnJlc3RyaWN0ZWQnOlxuICAgICAgdHJhbnNmZXJSZXN0cmljdGlvblN0YXR1cyA9IDA7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdpbnZhbGlkIHRyYW5zZmVyIHJlc3RyaWN0aW9uIHN0YXR1cyB2YWx1ZScpO1xuICB9XG4gIG1ldGFkYXRhLnRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXMgPSB0cmFuc2ZlclJlc3RyaWN0aW9uU3RhdHVzO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gIH0pO1xufTtcblxuZXhwb3J0IHR5cGUgRGlzYWJsZU1pbnRpbmdEZVNvVG9rZW5SZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgT21pdDxEQU9Db2luUmVxdWVzdCwgJ09wZXJhdGlvblR5cGUnPixcbiAgICAgICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snIHwgJ1Byb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWUnXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IGRpc2FibGVNaW50aW5nRGVTb1Rva2VuID0gKFxuICBwYXJhbXM6IERpc2FibGVNaW50aW5nRGVTb1Rva2VuUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8REFPQ29pblJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2Rhby1jb2luJyxcbiAgICB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBPcGVyYXRpb25UeXBlOiAnZGlzYWJsZV9taW50aW5nJyxcbiAgICB9LFxuICAgIHsgLi4ub3B0aW9ucywgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdERpc2FibGVNaW50aW5nRGVTb1Rva2VuIH1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3REaXNhYmxlTWludGluZ0RlU29Ub2tlbiA9IChcbiAgcGFyYW1zOiBEaXNhYmxlTWludGluZ0RlU29Ub2tlblJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFEQU9Db2luKCk7XG4gIGlmICghaXNNYXliZURlU29QdWJsaWNLZXkocGFyYW1zLlByb2ZpbGVQdWJsaWNLZXlCYXNlNThDaGVja09yVXNlcm5hbWUpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgJ211c3QgcHJvdmlkZSBwcm9maWxlIHB1YmxpYyBrZXksIG5vdCB1c2VybmFtZSBmb3IgbG9jYWwgdHJhbnNhY3Rpb24gY29uc3RydWN0aW9uJ1xuICAgICk7XG4gIH1cbiAgbWV0YWRhdGEucHJvZmlsZVB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZVxuICApO1xuICBtZXRhZGF0YS5vcGVyYXRpb25UeXBlID0gMjtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KHBhcmFtcy5VcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssIG1ldGFkYXRhLCB7XG4gICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICB9KTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2Rhby10cmFuc2FjdGlvbnMtYXBpI3RyYW5zZmVyLWRlc28tdG9rZW4tZGFvLWNvaW5cbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZmVyRGVTb1Rva2VuID0gYXN5bmMgKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8VHJhbnNmZXJEQU9Db2luUmVxdWVzdD4sXG4gIG9wdGlvbnM/OiBUeFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8VHJhbnNmZXJEQU9Db2luUmVzcG9uc2U+PiA9PiB7XG4gIGlmIChvcHRpb25zPy5jaGVja1Blcm1pc3Npb25zICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IHR4V2l0aEZlZSA9IGdldFR4V2l0aEZlZU5hbm9zKFxuICAgICAgcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgICAgbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFUcmFuc2ZlckRBT0NvaW4oKSxcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogSSdtIG5vdCBzdXJlIGV4YWN0bHkgd2hhdCBvdXRwdXRzIGFyZSBuZWVkZWQgaGVyZS4uLiBmb3IgdGhlIHRpbWVcbiAgICAgICAgLy8gYmVpbmcgSSdtIGp1c3QgYWRkaW5nIGEgc3RhdGljIDE1MDAgbmFub3MgdG8gbWFrZSBzdXJlIHRoZSBkZXJpdmVkIGtleVxuICAgICAgICAvLyB0cmFuc2FjdGlvbiBjYW4gYmUgc3VibWl0dGVkLlxuICAgICAgICAvLyBPdXRwdXRzOiAuLi4sXG4gICAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoIWlzTWF5YmVEZVNvUHVibGljS2V5KHBhcmFtcy5Qcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICAnbXVzdCBwcm92aWRlIHByb2ZpbGUgcHVibGljIGtleSwgbm90IHVzZXJuYW1lIGZvciBQcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lIHdoZW4gY2hlY2tpbmcgZGFvIGNvaW4gdHJhbnNmZXIgcGVybWlzc2lvbnMnXG4gICAgICApO1xuICAgIH1cbiAgICBhd2FpdCBndWFyZFR4UGVybWlzc2lvbih7XG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIC8vIFRPRE86IHdoZW4gSSBmaWd1cmUgb3V0IGhvdyB0byBwcm9wZXJseSBjYWxjdWxhdGUgdGhlIGZlZSBmb3IgdGhpcyB0cmFuc2FjdGlvblxuICAgICAgICAvLyB3ZSBjYW4gcmVtb3ZlIHRoaXMgc3RhdGljIDE1MDAgYnVmZmVyLlxuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgKyBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcykgKyAxNTAwLFxuICAgICAgVHJhbnNhY3Rpb25Db3VudExpbWl0TWFwOiB7XG4gICAgICAgIERBT19DT0lOX1RSQU5TRkVSOlxuICAgICAgICAgIG9wdGlvbnM/LnR4TGltaXRDb3VudCA/P1xuICAgICAgICAgIGlkZW50aXR5LnRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdE9wdGlvbnMuVHJhbnNhY3Rpb25Db3VudExpbWl0TWFwXG4gICAgICAgICAgICA/LkRBT19DT0lOX1RSQU5TRkVSID8/XG4gICAgICAgICAgMSxcbiAgICAgIH0sXG4gICAgICBEQU9Db2luT3BlcmF0aW9uTGltaXRNYXA6IHtcbiAgICAgICAgW3BhcmFtcy5Qcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lXToge1xuICAgICAgICAgIHRyYW5zZmVyOiAxLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvdHJhbnNmZXItZGFvLWNvaW4nLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RUcmFuc2ZlckRlU29Ub2tlbixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0VHJhbnNmZXJEZVNvVG9rZW4gPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxUcmFuc2ZlckRBT0NvaW5SZXF1ZXN0PlxuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgaWYgKCFpc01heWJlRGVTb1B1YmxpY0tleShwYXJhbXMuUHJvZmlsZVB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZSkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAnbXVzdCBwcm92aWRlIHByb2ZpbGUgcHVibGljIGtleSwgbm90IHVzZXJuYW1lIGZvciBsb2NhbCB0cmFuc2FjdGlvbiBjb25zdHJ1Y3Rpb24nXG4gICAgKTtcbiAgfVxuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhVHJhbnNmZXJEQU9Db2luKCk7XG4gIG1ldGFkYXRhLmRhb0NvaW5Ub1RyYW5zZmVyTmFub3MgPSBoZXhUb0J5dGVzKFxuICAgIHBhcmFtcy5EQU9Db2luVG9UcmFuc2Zlck5hbm9zLnJlcGxhY2UoJzB4JywgJ3gnKVxuICApO1xuICBtZXRhZGF0YS5wcm9maWxlUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5Qcm9maWxlUHVibGljS2V5QmFzZTU4Q2hlY2tPclVzZXJuYW1lXG4gICk7XG4gIG1ldGFkYXRhLnJlY2VpdmVyUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5SZWNlaXZlclB1YmxpY0tleUJhc2U1OENoZWNrT3JVc2VybmFtZVxuICApO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLCBtZXRhZGF0YSwge1xuICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgfSk7XG59O1xuXG4vLyBUT0RPOiBCYWxhbmNlIG1vZGVsIHRyYW5zYWN0aW9uIGNvbnN0cnVjdGlvbiBmb3IgbGltaXQgb3JkZXJzLlxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZGFvLXRyYW5zYWN0aW9ucy1hcGkjY3JlYXRlLWRlc28tdG9rZW4tZGFvLWNvaW4tbGltaXQtb3JkZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZURlU29Ub2tlbkxpbWl0T3JkZXIgPSAoXG4gIHBhcmFtczogREFPQ29pbkxpbWl0T3JkZXJSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxEQU9Db2luT3JkZXJSZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9jcmVhdGUtZGFvLWNvaW4tbGltaXQtb3JkZXInLFxuICAgIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZVNvVG9rZW5NYXJrZXRPcmRlciA9IChcbiAgcGFyYW1zOiBEQU9Db2luTWFya2V0T3JkZXJSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxEQU9Db2luT3JkZXJSZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9jcmVhdGUtZGFvLWNvaW4tbWFya2V0LW9yZGVyJyxcbiAgICB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgfSxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYnV5RGVTb1Rva2VuTWFya2V0T3JkZXIgPSAoXG4gIHBhcmFtczogUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBPbWl0PFxuICAgICAgREFPQ29pbk1hcmtldE9yZGVyUmVxdWVzdCxcbiAgICAgICdTZWxsaW5nREFPQ29pbkNyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVjaycgfCAnT3BlcmF0aW9uVHlwZSdcbiAgICA+LFxuICAgIHwgJ1RyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICB8ICdCdXlpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ1F1YW50aXR5J1xuICA+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxEQU9Db2luT3JkZXJSZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9jcmVhdGUtZGFvLWNvaW4tbWFya2V0LW9yZGVyJyxcbiAgICB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBTZWxsaW5nREFPQ29pbkNyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVjazogJycsXG4gICAgICBPcGVyYXRpb25UeXBlOiAnQklEJyxcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxsRGVTb1Rva2VuTWFya2V0T3JkZXIgPSAoXG4gIHBhcmFtczogUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBPbWl0PFxuICAgICAgREFPQ29pbk1hcmtldE9yZGVyUmVxdWVzdCxcbiAgICAgICdCdXlpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJyB8ICdPcGVyYXRpb25UeXBlJ1xuICAgID4sXG4gICAgfCAnVHJhbnNhY3RvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ1NlbGxpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ1F1YW50aXR5J1xuICA+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxEQU9Db2luT3JkZXJSZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9jcmVhdGUtZGFvLWNvaW4tbWFya2V0LW9yZGVyJyxcbiAgICB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBTZWxsaW5nREFPQ29pbkNyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVjazogJycsXG4gICAgICBPcGVyYXRpb25UeXBlOiAnQVNLJyxcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2Rhby10cmFuc2FjdGlvbnMtYXBpI2NhbmNlbC1kZXNvLXRva2VuLWRhby1jb2luLWxpbWl0LW9yZGVyXG4gKi9cbmV4cG9ydCBjb25zdCBjYW5jZWxEZVNvVG9rZW5MaW1pdE9yZGVyID0gKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8REFPQ29pbkxpbWl0T3JkZXJXaXRoQ2FuY2VsT3JkZXJJRFJlcXVlc3Q+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxEQU9Db2luT3JkZXJSZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9jYW5jZWwtZGFvLWNvaW4tbGltaXQtb3JkZXInLFxuICAgIHBhcmFtcyxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuIl19

@@ -6,4 +6,10 @@ import { BuyOrSellCreatorCoinRequest, BuyOrSellCreatorCoinResponse, ConstructedTransactionResponse, SendDeSoRequest, SendDeSoResponse, TransferCreatorCoinRequest, TransferCreatorCoinResponse, TxRequestWithOptionalFeesAndExtraData } from '../backend-types/index.js';

* https://docs.deso.org/deso-backend/construct-transactions/financial-transactions-api#send-deso
*
* NOTE: In the case of a max send, the AmountNanos param will be a -1, which
* is not useful for calculating the GlobalDESOLimit. In this case, the caller
* should provide the optional spendingLimitAmountNanos to be used instead.
*/
export declare const sendDeso: (params: TxRequestWithOptionalFeesAndExtraData<SendDeSoRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<SendDeSoResponse | ConstructedTransactionResponse>>;
export declare const sendDeso: (params: TxRequestWithOptionalFeesAndExtraData<SendDeSoRequest>, options?: TxRequestOptions & {
spendingLimitAmountNanos?: number;
}) => Promise<ConstructedAndSubmittedTx<SendDeSoResponse | ConstructedTransactionResponse>>;
export declare const constructSendDeSoTransaction: (params: TxRequestWithOptionalFeesAndExtraData<SendDeSoRequest>) => Promise<ConstructedTransactionResponse>;

@@ -10,0 +16,0 @@ /**

@@ -6,2 +6,6 @@ import { TransactionMetadataBasicTransfer, TransactionMetadataCreatorCoin, TransactionMetadataCreatorCoinTransfer, TransactionOutput, bs58PublicKeyToCompressedBytes, identity, } from '../identity/index.js';

* https://docs.deso.org/deso-backend/construct-transactions/financial-transactions-api#send-deso
*
* NOTE: In the case of a max send, the AmountNanos param will be a -1, which
* is not useful for calculating the GlobalDESOLimit. In this case, the caller
* should provide the optional spendingLimitAmountNanos to be used instead.
*/

@@ -25,4 +29,7 @@ export const sendDeso = async (params, options) => {

if (options?.checkPermissions !== false) {
const amountNanos = typeof options?.spendingLimitAmountNanos === 'number'
? options.spendingLimitAmountNanos
: params.AmountNanos;
await guardTxPermission({
GlobalDESOLimit: params.AmountNanos +
GlobalDESOLimit: amountNanos +
txWithFee.feeNanos +

@@ -172,2 +179,2 @@ sumTransactionFees(params.TransactionFees),

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYW5jaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9ucy9maW5hbmNpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUNMLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIsc0NBQXNDLEVBQ3RDLGlCQUFpQixFQUNqQiw4QkFBOEIsRUFDOUIsUUFBUSxHQUNULE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUMzQixNQUE4RCxFQUM5RCxPQUEwQixFQUcxQixFQUFFO0lBQ0YsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQ2pDLE1BQU0sQ0FBQywwQkFBMEIsRUFDakMsSUFBSSxnQ0FBZ0MsRUFBRSxFQUN0QztRQUNFLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQztZQUM1QixHQUFHLE1BQU07WUFDVCx1RUFBdUU7WUFDdkUsdUVBQXVFO1lBQ3ZFLGtFQUFrRTtZQUNsRSxzRUFBc0U7WUFDdEUscUVBQXFFO1lBQ3JFLHlDQUF5QztZQUN6Qyw0QkFBNEIsRUFBRSxNQUFNLENBQUMsMEJBQTBCO1NBQ2hFLENBQUM7UUFDRixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtRQUNqRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FDRixDQUFDO0lBRUYsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLEtBQUssS0FBSyxFQUFFO1FBQ3ZDLE1BQU0saUJBQWlCLENBQUM7WUFDdEIsZUFBZSxFQUNiLE1BQU0s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ckNvaW5SZXF1ZXN0LFxuICBCdXlPclNlbGxDcmVhdG9yQ29pblJlc3BvbnNlLFxuICBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2UsXG4gIFNlbmREZVNvUmVxdWVzdCxcbiAgU2VuZERlU29SZXNwb25zZSxcbiAgVHJhbnNmZXJDcmVhdG9yQ29pblJlcXVlc3QsXG4gIFRyYW5zZmVyQ3JlYXRvckNvaW5SZXNwb25zZSxcbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YSxcbn0gZnJvbSAnLi4vYmFja2VuZC10eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzIH0gZnJvbSAnLi4vZGF0YS9pbmRleC5qcyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbk1ldGFkYXRhQmFzaWNUcmFuc2ZlcixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0b3JDb2luLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhQ3JlYXRvckNvaW5UcmFuc2ZlcixcbiAgVHJhbnNhY3Rpb25PdXRwdXQsXG4gIGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyxcbiAgaWRlbnRpdHksXG59IGZyb20gJy4uL2lkZW50aXR5L2luZGV4LmpzJztcbmltcG9ydCB7XG4gIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4LFxuICBnZXRUeFdpdGhGZWVOYW5vcyxcbiAgaGFuZGxlU2lnbkFuZFN1Ym1pdCxcbiAgaXNNYXliZURlU29QdWJsaWNLZXksXG4gIHN1bVRyYW5zYWN0aW9uRmVlcyxcbn0gZnJvbSAnLi4vaW50ZXJuYWwuanMnO1xuaW1wb3J0IHsgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeCwgVHhSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGd1YXJkVHhQZXJtaXNzaW9uIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2ZpbmFuY2lhbC10cmFuc2FjdGlvbnMtYXBpI3NlbmQtZGVzb1xuICovXG5leHBvcnQgY29uc3Qgc2VuZERlc28gPSBhc3luYyAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxTZW5kRGVTb1JlcXVlc3Q+LFxuICBvcHRpb25zPzogVHhSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxcbiAgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxTZW5kRGVTb1Jlc3BvbnNlIHwgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPlxuPiA9PiB7XG4gIGNvbnN0IHR4V2l0aEZlZSA9IGdldFR4V2l0aEZlZU5hbm9zKFxuICAgIHBhcmFtcy5TZW5kZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUJhc2ljVHJhbnNmZXIoKSxcbiAgICB7XG4gICAgICBPdXRwdXRzOiBidWlsZFNlbmREZVNvT3V0cHV0cyh7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgLy8gTk9URTogdGhpcyBpcyBhIGJpdCBvZiBhbiBvZGQgaGFjaywgYnV0IGJjIHdlIGFyZSBvbmx5IHVzaW5nIHRoaXMgdG9cbiAgICAgICAgLy8gZXN0aW1hdGUgdGhlIGZlZSwgd2UgY2FuIG92ZXJ3cml0ZSB0aGUgcmVjaXBpZW50IHRvIGJlIHRoZSBzZW5kZXIgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIHB1YmxpYyBrZXkgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvXG4gICAgICAgIC8vIGJ5dGVzLiBUaGUgcmVhc29uIHdlIGNhbm5vdCBtYWtlIGFuIGFwaSBjYWxsIHRvIGdldCB0aGUgdHJ1ZSBwdWJsaWNcbiAgICAgICAgLy8ga2V5IGlzIGJlY2F1c2UgaXQgY291bGQgY2F1c2UgdGhlIGRlcml2ZWQga2V5IHJlLWFwcHJvdmFsIHBvcHVwIHRvXG4gICAgICAgIC8vIGdldCBibG9ja2VkIGJ5IGJyb3dzZXIgcG9wdXAgYmxvY2tlcnMuXG4gICAgICAgIFJlY2lwaWVudFB1YmxpY0tleU9yVXNlcm5hbWU6IHBhcmFtcy5TZW5kZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICAgIH0pLFxuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG5cbiAgaWYgKG9wdGlvbnM/LmNoZWNrUGVybWlzc2lvbnMgIT09IGZhbHNlKSB7XG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICBwYXJhbXMuQW1vdW50TmFub3MgK1xuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgK1xuICAgICAgICBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcyksXG4gICAgICBUcmFuc2FjdGlvbkNvdW50TGltaXRNYXA6IHtcbiAgICAgICAgQkFTSUNfVFJBTlNGRVI6XG4gICAgICAgICAgb3B0aW9ucz8udHhMaW1pdENvdW50ID8/XG4gICAgICAgICAgaWRlbnRpdHkudHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0T3B0aW9ucy5UcmFuc2FjdGlvbkNvdW50TGltaXRNYXBcbiAgICAgICAgICAgID8uQkFTSUNfVFJBTlNGRVIgPz9cbiAgICAgICAgICAxLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvc2VuZC1kZXNvJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0U2VuZERlU29UcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5jb25zdCBidWlsZFNlbmREZVNvT3V0cHV0cyA9IChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFNlbmREZVNvUmVxdWVzdD5cbikgPT4ge1xuICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dCA9IG5ldyBUcmFuc2FjdGlvbk91dHB1dCgpO1xuICB0cmFuc2FjdGlvbk91dHB1dC5hbW91bnROYW5vcyA9IHBhcmFtcy5BbW91bnROYW5vcztcbiAgdHJhbnNhY3Rpb25PdXRwdXQucHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHJlY2lwaWVudCBpcyBhIHVzZXJuYW1lLiBXZSBuZWVkXG4gICAgLy8gdG8gZWl0aGVyIGZldGNoIHRoZSBwdWJsaWMga2V5IGFuZCBvdmVyd3JpdGUgdGhlIHVzZXJuYW1lIHdpdGggaXQgb3JcbiAgICAvLyB0aHJvdyBhIG1vcmUgaGVscGZ1bCBlcnJvciB0byBjb25zdW1lcnMgZXhwbGFpbmluZyB0aGF0IHdlIHJlcXVpcmUgdGhlXG4gICAgLy8gcHVibGljIGtleSBpbnN0ZWFkIG9mIHRoZSB1c2VybmFtZS5cbiAgICBwYXJhbXMuUmVjaXBpZW50UHVibGljS2V5T3JVc2VybmFtZVxuICApO1xuICByZXR1cm4gW3RyYW5zYWN0aW9uT3V0cHV0XTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RTZW5kRGVTb1RyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8U2VuZERlU29SZXF1ZXN0PlxuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgaWYgKCFpc01heWJlRGVTb1B1YmxpY0tleShwYXJhbXMuUmVjaXBpZW50UHVibGljS2V5T3JVc2VybmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnbXVzdCBwcm92aWRlIHB1YmxpYyBrZXksIG5vdCB1c2VyIG5hbWUgZm9yIGxvY2FsIGNvbnN0cnVjdGlvbidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5TZW5kZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUJhc2ljVHJhbnNmZXIoKSxcbiAgICB7XG4gICAgICBPdXRwdXRzOiBidWlsZFNlbmREZVNvT3V0cHV0cyhwYXJhbXMpLFxuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICAgIE5vbmNlOiBwYXJhbXMuTm9uY2UsXG4gICAgfVxuICApO1xufTtcblxuLy8gVE9ETzogQlVZIGNyZWF0b3IgY29pbnMgaXMgaGFyZC4gTmVlZCB0byBtb3ZlIHNvbWVcbi8vIGJpZyBmbG9hdCBtYXRoIGludG8ganMuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9maW5hbmNpYWwtdHJhbnNhY3Rpb25zLWFwaSNidXktb3Itc2VsbC1jcmVhdG9yLWNvaW5cbiAqL1xuZXhwb3J0IHR5cGUgQnV5Q3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zID0gVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBPbWl0PFxuICAgICAgQnV5T3JTZWxsQ3JlYXRvckNvaW5SZXF1ZXN0LFxuICAgICAgJ0NyZWF0b3JDb2luVG9TZWxsTmFub3MnIHwgJ09wZXJhdGlvblR5cGUnXG4gICAgPixcbiAgICB8ICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgfCAnQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ0RlU29Ub1NlbGxOYW5vcydcbiAgPlxuPjtcbmV4cG9ydCBjb25zdCBidXlDcmVhdG9yQ29pbiA9IGFzeW5jIChcbiAgcGFyYW1zOiBCdXlDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBUeFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFxuICAgIEJ1eU9yU2VsbENyZWF0b3JDb2luUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2VcbiAgPlxuPiA9PiB7XG4gIGNvbnN0IHR4V2l0aEZlZSA9IGdldFR4V2l0aEZlZU5hbm9zKFxuICAgIHBhcmFtcy5VcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRCdXlDcmVhdG9yQ29pbk1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG5cbiAgaWYgKG9wdGlvbnM/LmNoZWNrUGVybWlzc2lvbnMgIT09IGZhbHNlKSB7XG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICBwYXJhbXMuRGVTb1RvU2VsbE5hbm9zICtcbiAgICAgICAgdHhXaXRoRmVlLmZlZU5hbm9zICtcbiAgICAgICAgc3VtVHJhbnNhY3Rpb25GZWVzKHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMpLFxuICAgICAgQ3JlYXRvckNvaW5PcGVyYXRpb25MaW1pdE1hcDoge1xuICAgICAgICBbcGFyYW1zLkNyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVja106IHtcbiAgICAgICAgICBidXk6IG9wdGlvbnM/LnR4TGltaXRDb3VudCA/PyAxLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KFxuICAgICdhcGkvdjAvYnV5LW9yLXNlbGwtY3JlYXRvci1jb2luJyxcbiAgICB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBPcGVyYXRpb25UeXBlOiAnYnV5JyxcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG5cbi8vIFRPRE86IFNFTEwgY3JlYXRvciBjb2lucyBpcyBoYXJkLiBOZWVkIHRvIG1vdmUgc29tZVxuLy8gYmlnIGZsb2F0IG1hdGggaW50byBqcy5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2ZpbmFuY2lhbC10cmFuc2FjdGlvbnMtYXBpI2J1eS1vci1zZWxsLWNyZWF0b3ItY29pblxuICovXG5cbmV4cG9ydCB0eXBlIFNlbGxDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMgPVxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBPbWl0PEJ1eU9yU2VsbENyZWF0b3JDb2luUmVxdWVzdCwgJ0Rlc29Ub1NlbGxOYW5vcycgfCAnT3BlcmF0aW9uVHlwZSc+LFxuICAgICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQ3JlYXRvckNvaW5Ub1NlbGxOYW5vcydcbiAgICA+XG4gID47XG5cbmV4cG9ydCBjb25zdCBzZWxsQ3JlYXRvckNvaW4gPSBhc3luYyAoXG4gIHBhcmFtczogU2VsbENyZWF0b3JDb2luUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8XG4gIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8XG4gICAgQnV5T3JTZWxsQ3JlYXRvckNvaW5SZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZVxuICA+XG4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZFNlbGxDcmVhdG9yQ29pbk1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG5cbiAgaWYgKG9wdGlvbnM/LmNoZWNrUGVybWlzc2lvbnMgIT09IGZhbHNlKSB7XG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgKyBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcyksXG4gICAgICBDcmVhdG9yQ29pbk9wZXJhdGlvbkxpbWl0TWFwOiB7XG4gICAgICAgIFtwYXJhbXMuQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrXToge1xuICAgICAgICAgIHNlbGw6IG9wdGlvbnM/LnR4TGltaXRDb3VudCA/PyAxLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KFxuICAgICdhcGkvdjAvYnV5LW9yLXNlbGwtY3JlYXRvci1jb2luJyxcbiAgICB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBPcGVyYXRpb25UeXBlOiAnc2VsbCcsXG4gICAgfSxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9maW5hbmNpYWwtdHJhbnNhY3Rpb25zLWFwaSN0cmFuc2Zlci1jcmVhdG9yLWNvaW5cbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNmZXJDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMgPVxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBUcmFuc2ZlckNyZWF0b3JDb2luUmVxdWVzdCxcbiAgICAgIHwgJ1NlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnUmVjZWl2ZXJVc2VybmFtZU9yUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICB8ICdDcmVhdG9yQ29pblRvVHJhbnNmZXJOYW5vcydcbiAgICA+XG4gID47XG5leHBvcnQgY29uc3QgdHJhbnNmZXJDcmVhdG9yQ29pbiA9IGFzeW5jIChcbiAgcGFyYW1zOiBUcmFuc2ZlckNyZWF0b3JDb2luUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxUcmFuc2ZlckNyZWF0b3JDb2luUmVzcG9uc2U+PiA9PiB7XG4gIGNvbnN0IHR4V2l0aEZlZSA9IGdldFR4V2l0aEZlZU5hbm9zKFxuICAgIHBhcmFtcy5TZW5kZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZFRyYW5zZmVyQ3JlYXRvckNvaW5NZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xuXG4gIGlmIChvcHRpb25zPy5jaGVja1Blcm1pc3Npb25zICE9PSBmYWxzZSkge1xuICAgIGF3YWl0IGd1YXJkVHhQZXJtaXNzaW9uKHtcbiAgICAgIEdsb2JhbERFU09MaW1pdDpcbiAgICAgICAgdHhXaXRoRmVlLmZlZU5hbm9zICsgc3VtVHJhbnNhY3Rpb25GZWVzKHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMpLFxuICAgICAgQ3JlYXRvckNvaW5PcGVyYXRpb25MaW1pdE1hcDoge1xuICAgICAgICBbcGFyYW1zLkNyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVja106IHtcbiAgICAgICAgICB0cmFuc2Zlcjogb3B0aW9ucz8udHhMaW1pdENvdW50ID8/IDEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC90cmFuc2Zlci1jcmVhdG9yLWNvaW4nLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RUcmFuc2ZlckNyZWF0b3JDb2luVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuY29uc3QgYnVpbGRUcmFuc2ZlckNyZWF0b3JDb2luTWV0YWRhdGEgPSAoXG4gIHBhcmFtczogVHJhbnNmZXJDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXNcbikgPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQ3JlYXRvckNvaW5UcmFuc2ZlcigpO1xuICBtZXRhZGF0YS5jcmVhdG9yQ29pblRvVHJhbnNmZXJOYW5vcyA9IHBhcmFtcy5DcmVhdG9yQ29pblRvVHJhbnNmZXJOYW5vcztcbiAgbWV0YWRhdGEucHJvZmlsZVB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIG1ldGFkYXRhLnJlY2VpdmVyUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5SZWNlaXZlclVzZXJuYW1lT3JQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuXG4gIHJldHVybiBtZXRhZGF0YTtcbn07XG5cbmNvbnN0IGNvbnN0cnVjdFRyYW5zZmVyQ3JlYXRvckNvaW5UcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBUcmFuc2ZlckNyZWF0b3JDb2luUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgaWYgKCFpc01heWJlRGVTb1B1YmxpY0tleShwYXJhbXMuUmVjZWl2ZXJVc2VybmFtZU9yUHVibGljS2V5QmFzZTU4Q2hlY2spKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgJ211c3QgcHJvdmlkZSBwdWJsaWMga2V5LCBub3QgdXNlciBuYW1lIGZvciBsb2NhbCBjb25zdHJ1Y3Rpb24nXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkVHJhbnNmZXJDcmVhdG9yQ29pbk1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBidWlsZEJ1eUNyZWF0b3JDb2luTWV0YWRhdGEgPSAocGFyYW1zOiBCdXlDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMpID0+IHtcbiAgLy8gTk9URTogVGhpcyBpcyBub3QgZXhhY3RseSBhY2N1cmF0ZSBhbmQgZ2l2ZXMgYW4gdXBwZXIgYm91bmQgZXN0aW1hdGUgZm9yXG4gIC8vIG1pbkNyZWF0b3JDb2luRXhwZWN0ZWROYW5vcy4gSXQgc2hvdWxkIG5vdCBidXQgdXNlZCBmb3IgYWN0dWFsIHR4XG4gIC8vIGNvbnN0cnVjdGlvbiwgYnV0IGl0IGlzIHVzZWZ1bCBmb3IgZXN0aW1hdGluZyB0eCBmZWVzLlxuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQ3JlYXRvckNvaW4oKTtcbiAgbWV0YWRhdGEucHJvZmlsZVB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIG1ldGFkYXRhLm9wZXJhdGlvblR5cGUgPSAwO1xuICBtZXRhZGF0YS5kZXNvVG9TZWxsTmFub3MgPSBwYXJhbXMuRGVTb1RvU2VsbE5hbm9zO1xuICBtZXRhZGF0YS5taW5DcmVhdG9yQ29pbkV4cGVjdGVkTmFub3MgPVxuICAgIHBhcmFtcy5NaW5DcmVhdG9yQ29pbkV4cGVjdGVkTmFub3MgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cbiAgcmV0dXJuIG1ldGFkYXRhO1xufTtcblxuY29uc3QgYnVpbGRTZWxsQ3JlYXRvckNvaW5NZXRhZGF0YSA9IChwYXJhbXM6IFNlbGxDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMpID0+IHtcbiAgLy8gTk9URTogVGhpcyBpcyBub3QgZXhhY3RseSBhY2N1cmF0ZSBhbmQgZ2l2ZXMgYW4gdXBwZXIgYm91bmQgZXN0aW1hdGUgZm9yXG4gIC8vIG1pbkRlU29FeHBlY3RlZE5hbm9zLiBJdCBzaG91bGQgbm90IGJ1dCB1c2VkIGZvciBhY3R1YWwgdHggY29uc3RydWN0aW9uLFxuICAvLyBidXQgaXQgaXMgdXNlZnVsIGZvciBlc3RpbWF0aW5nIHR4IGZlZXMuXG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFDcmVhdG9yQ29pbigpO1xuICBtZXRhZGF0YS5wcm9maWxlUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEub3BlcmF0aW9uVHlwZSA9IDE7XG4gIG1ldGFkYXRhLmNyZWF0b3JDb2luVG9TZWxsTmFub3MgPSBwYXJhbXMuQ3JlYXRvckNvaW5Ub1NlbGxOYW5vcztcbiAgbWV0YWRhdGEubWluRGVTb0V4cGVjdGVkTmFub3MgPVxuICAgIHBhcmFtcy5NaW5EZVNvRXhwZWN0ZWROYW5vcyA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYW5jaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9ucy9maW5hbmNpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUNMLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIsc0NBQXNDLEVBQ3RDLGlCQUFpQixFQUNqQiw4QkFBOEIsRUFDOUIsUUFBUSxHQUNULE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFL0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFDM0IsTUFBOEQsRUFDOUQsT0FBa0UsRUFHbEUsRUFBRTtJQUNGLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUNqQyxNQUFNLENBQUMsMEJBQTBCLEVBQ2pDLElBQUksZ0NBQWdDLEVBQUUsRUFDdEM7UUFDRSxPQUFPLEVBQUUsb0JBQW9CLENBQUM7WUFDNUIsR0FBRyxNQUFNO1lBQ1QsdUVBQXVFO1lBQ3ZFLHVFQUF1RTtZQUN2RSxrRUFBa0U7WUFDbEUsc0VBQXNFO1lBQ3RFLHFFQUFxRTtZQUNyRSx5Q0FBeUM7WUFDekMsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLDBCQUEwQjtTQUNoRSxDQUFDO1FBQ0YsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztJQUVGLElBQUksT0FBTyxFQUFFLGdCQUFnQixLQUFLLEtBQUssRUFBRTtRQUN2QyxNQUFNLFdBQVcsR0FDZixPQUFPLE9BQU8sRUFBRSx3QkFB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QW9CLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDO0lBRXpELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJ1eU9yU2VsbENyZWF0b3JDb2luUmVxdWVzdCxcbiAgQnV5T3JTZWxsQ3JlYXRvckNvaW5SZXNwb25zZSxcbiAgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlLFxuICBTZW5kRGVTb1JlcXVlc3QsXG4gIFNlbmREZVNvUmVzcG9uc2UsXG4gIFRyYW5zZmVyQ3JlYXRvckNvaW5SZXF1ZXN0LFxuICBUcmFuc2ZlckNyZWF0b3JDb2luUmVzcG9uc2UsXG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGEsXG59IGZyb20gJy4uL2JhY2tlbmQtdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkcyB9IGZyb20gJy4uL2RhdGEvaW5kZXguanMnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUJhc2ljVHJhbnNmZXIsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFDcmVhdG9yQ29pbixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0b3JDb2luVHJhbnNmZXIsXG4gIFRyYW5zYWN0aW9uT3V0cHV0LFxuICBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMsXG4gIGlkZW50aXR5LFxufSBmcm9tICcuLi9pZGVudGl0eS9pbmRleC5qcyc7XG5pbXBvcnQge1xuICBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeCxcbiAgZ2V0VHhXaXRoRmVlTmFub3MsXG4gIGhhbmRsZVNpZ25BbmRTdWJtaXQsXG4gIGlzTWF5YmVEZVNvUHVibGljS2V5LFxuICBzdW1UcmFuc2FjdGlvbkZlZXMsXG59IGZyb20gJy4uL2ludGVybmFsLmpzJztcbmltcG9ydCB7IENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHgsIFR4UmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBndWFyZFR4UGVybWlzc2lvbiB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9maW5hbmNpYWwtdHJhbnNhY3Rpb25zLWFwaSNzZW5kLWRlc29cbiAqXG4gKiBOT1RFOiBJbiB0aGUgY2FzZSBvZiBhIG1heCBzZW5kLCB0aGUgQW1vdW50TmFub3MgcGFyYW0gd2lsbCBiZSBhIC0xLCB3aGljaFxuICogaXMgbm90IHVzZWZ1bCBmb3IgY2FsY3VsYXRpbmcgdGhlIEdsb2JhbERFU09MaW1pdC4gSW4gdGhpcyBjYXNlLCB0aGUgY2FsbGVyXG4gKiBzaG91bGQgcHJvdmlkZSB0aGUgb3B0aW9uYWwgc3BlbmRpbmdMaW1pdEFtb3VudE5hbm9zIHRvIGJlIHVzZWQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlbmREZXNvID0gYXN5bmMgKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8U2VuZERlU29SZXF1ZXN0PixcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnMgJiB7IHNwZW5kaW5nTGltaXRBbW91bnROYW5vcz86IG51bWJlciB9XG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFNlbmREZVNvUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+XG4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQmFzaWNUcmFuc2ZlcigpLFxuICAgIHtcbiAgICAgIE91dHB1dHM6IGJ1aWxkU2VuZERlU29PdXRwdXRzKHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAvLyBOT1RFOiB0aGlzIGlzIGEgYml0IG9mIGFuIG9kZCBoYWNrLCBidXQgYmMgd2UgYXJlIG9ubHkgdXNpbmcgdGhpcyB0b1xuICAgICAgICAvLyBlc3RpbWF0ZSB0aGUgZmVlLCB3ZSBjYW4gb3ZlcndyaXRlIHRoZSByZWNpcGllbnQgdG8gYmUgdGhlIHNlbmRlciB0b1xuICAgICAgICAvLyBlbnN1cmUgdGhlIHZhbHVlIGlzIGEgdmFsaWQgcHVibGljIGtleSB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG9cbiAgICAgICAgLy8gYnl0ZXMuIFRoZSByZWFzb24gd2UgY2Fubm90IG1ha2UgYW4gYXBpIGNhbGwgdG8gZ2V0IHRoZSB0cnVlIHB1YmxpY1xuICAgICAgICAvLyBrZXkgaXMgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0aGUgZGVyaXZlZCBrZXkgcmUtYXBwcm92YWwgcG9wdXAgdG9cbiAgICAgICAgLy8gZ2V0IGJsb2NrZWQgYnkgYnJvd3NlciBwb3B1cCBibG9ja2Vycy5cbiAgICAgICAgUmVjaXBpZW50UHVibGljS2V5T3JVc2VybmFtZTogcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgICAgfSksXG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcblxuICBpZiAob3B0aW9ucz8uY2hlY2tQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICBjb25zdCBhbW91bnROYW5vcyA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucz8uc3BlbmRpbmdMaW1pdEFtb3VudE5hbm9zID09PSAnbnVtYmVyJ1xuICAgICAgICA/IG9wdGlvbnMuc3BlbmRpbmdMaW1pdEFtb3VudE5hbm9zXG4gICAgICAgIDogcGFyYW1zLkFtb3VudE5hbm9zO1xuXG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICBhbW91bnROYW5vcyArXG4gICAgICAgIHR4V2l0aEZlZS5mZWVOYW5vcyArXG4gICAgICAgIHN1bVRyYW5zYWN0aW9uRmVlcyhwYXJhbXMuVHJhbnNhY3Rpb25GZWVzKSxcbiAgICAgIFRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcDoge1xuICAgICAgICBCQVNJQ19UUkFOU0ZFUjpcbiAgICAgICAgICBvcHRpb25zPy50eExpbWl0Q291bnQgPz9cbiAgICAgICAgICBpZGVudGl0eS50cmFuc2FjdGlvblNwZW5kaW5nTGltaXRPcHRpb25zLlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcFxuICAgICAgICAgICAgPy5CQVNJQ19UUkFOU0ZFUiA/P1xuICAgICAgICAgIDEsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC9zZW5kLWRlc28nLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RTZW5kRGVTb1RyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmNvbnN0IGJ1aWxkU2VuZERlU29PdXRwdXRzID0gKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8U2VuZERlU29SZXF1ZXN0PlxuKSA9PiB7XG4gIGNvbnN0IHRyYW5zYWN0aW9uT3V0cHV0ID0gbmV3IFRyYW5zYWN0aW9uT3V0cHV0KCk7XG4gIHRyYW5zYWN0aW9uT3V0cHV0LmFtb3VudE5hbm9zID0gcGFyYW1zLkFtb3VudE5hbm9zO1xuICB0cmFuc2FjdGlvbk91dHB1dC5wdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgLy8gRklYTUU6IHRoaXMgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcmVjaXBpZW50IGlzIGEgdXNlcm5hbWUuIFdlIG5lZWRcbiAgICAvLyB0byBlaXRoZXIgZmV0Y2ggdGhlIHB1YmxpYyBrZXkgYW5kIG92ZXJ3cml0ZSB0aGUgdXNlcm5hbWUgd2l0aCBpdCBvclxuICAgIC8vIHRocm93IGEgbW9yZSBoZWxwZnVsIGVycm9yIHRvIGNvbnN1bWVycyBleHBsYWluaW5nIHRoYXQgd2UgcmVxdWlyZSB0aGVcbiAgICAvLyBwdWJsaWMga2V5IGluc3RlYWQgb2YgdGhlIHVzZXJuYW1lLlxuICAgIHBhcmFtcy5SZWNpcGllbnRQdWJsaWNLZXlPclVzZXJuYW1lXG4gICk7XG4gIHJldHVybiBbdHJhbnNhY3Rpb25PdXRwdXRdO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFNlbmREZVNvVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxTZW5kRGVTb1JlcXVlc3Q+XG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBpZiAoIWlzTWF5YmVEZVNvUHVibGljS2V5KHBhcmFtcy5SZWNpcGllbnRQdWJsaWNLZXlPclVzZXJuYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdtdXN0IHByb3ZpZGUgcHVibGljIGtleSwgbm90IHVzZXIgbmFtZSBmb3IgbG9jYWwgY29uc3RydWN0aW9uJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQmFzaWNUcmFuc2ZlcigpLFxuICAgIHtcbiAgICAgIE91dHB1dHM6IGJ1aWxkU2VuZERlU29PdXRwdXRzKHBhcmFtcyksXG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgICAgTm9uY2U6IHBhcmFtcy5Ob25jZSxcbiAgICB9XG4gICk7XG59O1xuXG4vLyBUT0RPOiBCVVkgY3JlYXRvciBjb2lucyBpcyBoYXJkLiBOZWVkIHRvIG1vdmUgc29tZVxuLy8gYmlnIGZsb2F0IG1hdGggaW50byBqcy5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2ZpbmFuY2lhbC10cmFuc2FjdGlvbnMtYXBpI2J1eS1vci1zZWxsLWNyZWF0b3ItY29pblxuICovXG5leHBvcnQgdHlwZSBCdXlDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMgPSBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIE9taXQ8XG4gICAgICBCdXlPclNlbGxDcmVhdG9yQ29pblJlcXVlc3QsXG4gICAgICAnQ3JlYXRvckNvaW5Ub1NlbGxOYW5vcycgfCAnT3BlcmF0aW9uVHlwZSdcbiAgICA+LFxuICAgIHwgJ1VwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICB8ICdDcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgfCAnRGVTb1RvU2VsbE5hbm9zJ1xuICA+XG4+O1xuZXhwb3J0IGNvbnN0IGJ1eUNyZWF0b3JDb2luID0gYXN5bmMgKFxuICBwYXJhbXM6IEJ1eUNyZWF0b3JDb2luUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8XG4gIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8XG4gICAgQnV5T3JTZWxsQ3JlYXRvckNvaW5SZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZVxuICA+XG4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZEJ1eUNyZWF0b3JDb2luTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcblxuICBpZiAob3B0aW9ucz8uY2hlY2tQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICBhd2FpdCBndWFyZFR4UGVybWlzc2lvbih7XG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIHBhcmFtcy5EZVNvVG9TZWxsTmFub3MgK1xuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgK1xuICAgICAgICBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcyksXG4gICAgICBDcmVhdG9yQ29pbk9wZXJhdGlvbkxpbWl0TWFwOiB7XG4gICAgICAgIFtwYXJhbXMuQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrXToge1xuICAgICAgICAgIGJ1eTogb3B0aW9ucz8udHhMaW1pdENvdW50ID8/IDEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9idXktb3Itc2VsbC1jcmVhdG9yLWNvaW4nLFxuICAgIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIE9wZXJhdGlvblR5cGU6ICdidXknLFxuICAgIH0sXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuLy8gVE9ETzogU0VMTCBjcmVhdG9yIGNvaW5zIGlzIGhhcmQuIE5lZWQgdG8gbW92ZSBzb21lXG4vLyBiaWcgZmxvYXQgbWF0aCBpbnRvIGpzLlxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZmluYW5jaWFsLXRyYW5zYWN0aW9ucy1hcGkjYnV5LW9yLXNlbGwtY3JlYXRvci1jb2luXG4gKi9cblxuZXhwb3J0IHR5cGUgU2VsbENyZWF0b3JDb2luUmVxdWVzdFBhcmFtcyA9XG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gICAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICAgIE9taXQ8QnV5T3JTZWxsQ3JlYXRvckNvaW5SZXF1ZXN0LCAnRGVzb1RvU2VsbE5hbm9zJyB8ICdPcGVyYXRpb25UeXBlJz4sXG4gICAgICB8ICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICB8ICdDcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICB8ICdDcmVhdG9yQ29pblRvU2VsbE5hbm9zJ1xuICAgID5cbiAgPjtcblxuZXhwb3J0IGNvbnN0IHNlbGxDcmVhdG9yQ29pbiA9IGFzeW5jIChcbiAgcGFyYW1zOiBTZWxsQ3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogVHhSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxcbiAgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxcbiAgICBCdXlPclNlbGxDcmVhdG9yQ29pblJlc3BvbnNlIHwgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlXG4gID5cbj4gPT4ge1xuICBjb25zdCB0eFdpdGhGZWUgPSBnZXRUeFdpdGhGZWVOYW5vcyhcbiAgICBwYXJhbXMuVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkU2VsbENyZWF0b3JDb2luTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcblxuICBpZiAob3B0aW9ucz8uY2hlY2tQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICBhd2FpdCBndWFyZFR4UGVybWlzc2lvbih7XG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIHR4V2l0aEZlZS5mZWVOYW5vcyArIHN1bVRyYW5zYWN0aW9uRmVlcyhwYXJhbXMuVHJhbnNhY3Rpb25GZWVzKSxcbiAgICAgIENyZWF0b3JDb2luT3BlcmF0aW9uTGltaXRNYXA6IHtcbiAgICAgICAgW3BhcmFtcy5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2tdOiB7XG4gICAgICAgICAgc2VsbDogb3B0aW9ucz8udHhMaW1pdENvdW50ID8/IDEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoXG4gICAgJ2FwaS92MC9idXktb3Itc2VsbC1jcmVhdG9yLWNvaW4nLFxuICAgIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIE9wZXJhdGlvblR5cGU6ICdzZWxsJyxcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2ZpbmFuY2lhbC10cmFuc2FjdGlvbnMtYXBpI3RyYW5zZmVyLWNyZWF0b3ItY29pblxuICovXG5leHBvcnQgdHlwZSBUcmFuc2ZlckNyZWF0b3JDb2luUmVxdWVzdFBhcmFtcyA9XG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gICAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICAgIFRyYW5zZmVyQ3JlYXRvckNvaW5SZXF1ZXN0LFxuICAgICAgfCAnU2VuZGVyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICB8ICdDcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICB8ICdSZWNlaXZlclVzZXJuYW1lT3JQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ0NyZWF0b3JDb2luVG9UcmFuc2Zlck5hbm9zJ1xuICAgID5cbiAgPjtcbmV4cG9ydCBjb25zdCB0cmFuc2ZlckNyZWF0b3JDb2luID0gYXN5bmMgKFxuICBwYXJhbXM6IFRyYW5zZmVyQ3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogVHhSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFRyYW5zZmVyQ3JlYXRvckNvaW5SZXNwb25zZT4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkVHJhbnNmZXJDcmVhdG9yQ29pbk1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG5cbiAgaWYgKG9wdGlvbnM/LmNoZWNrUGVybWlzc2lvbnMgIT09IGZhbHNlKSB7XG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgKyBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcyksXG4gICAgICBDcmVhdG9yQ29pbk9wZXJhdGlvbkxpbWl0TWFwOiB7XG4gICAgICAgIFtwYXJhbXMuQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrXToge1xuICAgICAgICAgIHRyYW5zZmVyOiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL3RyYW5zZmVyLWNyZWF0b3ItY29pbicsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdFRyYW5zZmVyQ3JlYXRvckNvaW5UcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5jb25zdCBidWlsZFRyYW5zZmVyQ3JlYXRvckNvaW5NZXRhZGF0YSA9IChcbiAgcGFyYW1zOiBUcmFuc2ZlckNyZWF0b3JDb2luUmVxdWVzdFBhcmFtc1xuKSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFDcmVhdG9yQ29pblRyYW5zZmVyKCk7XG4gIG1ldGFkYXRhLmNyZWF0b3JDb2luVG9UcmFuc2Zlck5hbm9zID0gcGFyYW1zLkNyZWF0b3JDb2luVG9UcmFuc2Zlck5hbm9zO1xuICBtZXRhZGF0YS5wcm9maWxlUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEucmVjZWl2ZXJQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLlJlY2VpdmVyVXNlcm5hbWVPclB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG5cbiAgcmV0dXJuIG1ldGFkYXRhO1xufTtcblxuY29uc3QgY29uc3RydWN0VHJhbnNmZXJDcmVhdG9yQ29pblRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IFRyYW5zZmVyQ3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBpZiAoIWlzTWF5YmVEZVNvUHVibGljS2V5KHBhcmFtcy5SZWNlaXZlclVzZXJuYW1lT3JQdWJsaWNLZXlCYXNlNThDaGVjaykpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAnbXVzdCBwcm92aWRlIHB1YmxpYyBrZXksIG5vdCB1c2VyIG5hbWUgZm9yIGxvY2FsIGNvbnN0cnVjdGlvbidcbiAgICApO1xuICB9XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChcbiAgICBwYXJhbXMuU2VuZGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRUcmFuc2ZlckNyZWF0b3JDb2luTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IGJ1aWxkQnV5Q3JlYXRvckNvaW5NZXRhZGF0YSA9IChwYXJhbXM6IEJ1eUNyZWF0b3JDb2luUmVxdWVzdFBhcmFtcykgPT4ge1xuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBleGFjdGx5IGFjY3VyYXRlIGFuZCBnaXZlcyBhbiB1cHBlciBib3VuZCBlc3RpbWF0ZSBmb3JcbiAgLy8gbWluQ3JlYXRvckNvaW5FeHBlY3RlZE5hbm9zLiBJdCBzaG91bGQgbm90IGJ1dCB1c2VkIGZvciBhY3R1YWwgdHhcbiAgLy8gY29uc3RydWN0aW9uLCBidXQgaXQgaXMgdXNlZnVsIGZvciBlc3RpbWF0aW5nIHR4IGZlZXMuXG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFDcmVhdG9yQ29pbigpO1xuICBtZXRhZGF0YS5wcm9maWxlUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEub3BlcmF0aW9uVHlwZSA9IDA7XG4gIG1ldGFkYXRhLmRlc29Ub1NlbGxOYW5vcyA9IHBhcmFtcy5EZVNvVG9TZWxsTmFub3M7XG4gIG1ldGFkYXRhLm1pbkNyZWF0b3JDb2luRXhwZWN0ZWROYW5vcyA9XG4gICAgcGFyYW1zLk1pbkNyZWF0b3JDb2luRXhwZWN0ZWROYW5vcyA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuXG5jb25zdCBidWlsZFNlbGxDcmVhdG9yQ29pbk1ldGFkYXRhID0gKHBhcmFtczogU2VsbENyZWF0b3JDb2luUmVxdWVzdFBhcmFtcykgPT4ge1xuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBleGFjdGx5IGFjY3VyYXRlIGFuZCBnaXZlcyBhbiB1cHBlciBib3VuZCBlc3RpbWF0ZSBmb3JcbiAgLy8gbWluRGVTb0V4cGVjdGVkTmFub3MuIEl0IHNob3VsZCBub3QgYnV0IHVzZWQgZm9yIGFjdHVhbCB0eCBjb25zdHJ1Y3Rpb24sXG4gIC8vIGJ1dCBpdCBpcyB1c2VmdWwgZm9yIGVzdGltYXRpbmcgdHggZmVlcy5cbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0b3JDb2luKCk7XG4gIG1ldGFkYXRhLnByb2ZpbGVQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLkNyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuICBtZXRhZGF0YS5vcGVyYXRpb25UeXBlID0gMTtcbiAgbWV0YWRhdGEuY3JlYXRvckNvaW5Ub1NlbGxOYW5vcyA9IHBhcmFtcy5DcmVhdG9yQ29pblRvU2VsbE5hbm9zO1xuICBtZXRhZGF0YS5taW5EZVNvRXhwZWN0ZWROYW5vcyA9XG4gICAgcGFyYW1zLk1pbkRlU29FeHBlY3RlZE5hbm9zID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXG4gIHJldHVybiBtZXRhZGF0YTtcbn07XG4iXX0=
SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc