@bitgo-beta/utxo-descriptors 0.0.1-beta.31 → 0.0.1-beta.310
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/index.d.ts +1 -0
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +3 -2
- package/dist/cjs/src/pox5/descriptor.d.ts +22 -0
- package/dist/cjs/src/pox5/descriptor.d.ts.map +1 -0
- package/dist/cjs/src/pox5/descriptor.js +79 -0
- package/dist/cjs/src/pox5/index.d.ts +5 -0
- package/dist/cjs/src/pox5/index.d.ts.map +1 -0
- package/dist/cjs/src/pox5/index.js +21 -0
- package/dist/cjs/src/pox5/input.d.ts +28 -0
- package/dist/cjs/src/pox5/input.d.ts.map +1 -0
- package/dist/cjs/src/pox5/input.js +47 -0
- package/dist/cjs/src/pox5/parseDescriptor.d.ts +18 -0
- package/dist/cjs/src/pox5/parseDescriptor.d.ts.map +1 -0
- package/dist/cjs/src/pox5/parseDescriptor.js +95 -0
- package/dist/cjs/src/pox5/validation.d.ts +12 -0
- package/dist/cjs/src/pox5/validation.d.ts.map +1 -0
- package/dist/cjs/src/pox5/validation.js +70 -0
- package/dist/cjs/src/sbtc/parseDescriptor.d.ts +8 -0
- package/dist/cjs/src/sbtc/parseDescriptor.d.ts.map +1 -1
- package/dist/cjs/src/sbtc/parseDescriptor.js +7 -1
- package/dist/cjs/test/unit/pox5/descriptor.d.ts +2 -0
- package/dist/cjs/test/unit/pox5/descriptor.d.ts.map +1 -0
- package/dist/cjs/test/unit/pox5/descriptor.js +157 -0
- package/dist/cjs/test/unit/pox5/input.d.ts +2 -0
- package/dist/cjs/test/unit/pox5/input.d.ts.map +1 -0
- package/dist/cjs/test/unit/pox5/input.js +113 -0
- package/dist/cjs/test/unit/pox5/validation.d.ts +2 -0
- package/dist/cjs/test/unit/pox5/validation.d.ts.map +1 -0
- package/dist/cjs/test/unit/pox5/validation.js +99 -0
- package/dist/cjs/test/unit/sbtc/parseDescriptor.js +14 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/pox5/descriptor.d.ts +22 -0
- package/dist/esm/pox5/descriptor.d.ts.map +1 -0
- package/dist/esm/pox5/descriptor.js +74 -0
- package/dist/esm/pox5/index.d.ts +5 -0
- package/dist/esm/pox5/index.d.ts.map +1 -0
- package/dist/esm/pox5/index.js +5 -0
- package/dist/esm/pox5/input.d.ts +28 -0
- package/dist/esm/pox5/input.d.ts.map +1 -0
- package/dist/esm/pox5/input.js +43 -0
- package/dist/esm/pox5/parseDescriptor.d.ts +18 -0
- package/dist/esm/pox5/parseDescriptor.d.ts.map +1 -0
- package/dist/esm/pox5/parseDescriptor.js +92 -0
- package/dist/esm/pox5/validation.d.ts +12 -0
- package/dist/esm/pox5/validation.d.ts.map +1 -0
- package/dist/esm/pox5/validation.js +65 -0
- package/dist/esm/sbtc/parseDescriptor.d.ts +8 -0
- package/dist/esm/sbtc/parseDescriptor.d.ts.map +1 -1
- package/dist/esm/sbtc/parseDescriptor.js +7 -1
- package/package.json +8 -5
|
@@ -155,6 +155,11 @@ function parseSbtcDepositDescriptor(descriptor) {
|
|
|
155
155
|
let reclaimMiniscriptNode = result.reclaimLeaf;
|
|
156
156
|
const { signersAggregateKey, maxFee, stacksRecipient } = parseDepositLeaf(depositMiniscriptNode, matcher);
|
|
157
157
|
const { lockTime, reclaimKeyStrings } = parseReclaimLeaf(reclaimMiniscriptNode, matcher);
|
|
158
|
+
const reclaimKeyStringsTuple = [
|
|
159
|
+
reclaimKeyStrings[0],
|
|
160
|
+
reclaimKeyStrings[1],
|
|
161
|
+
reclaimKeyStrings[2],
|
|
162
|
+
];
|
|
158
163
|
const reclaimKeys = reclaimKeysFromStrings(reclaimKeyStrings);
|
|
159
164
|
if (reclaimKeys) {
|
|
160
165
|
// Rewrite the reclaim leaf with concrete hex keys when we can resolve
|
|
@@ -172,8 +177,9 @@ function parseSbtcDepositDescriptor(descriptor) {
|
|
|
172
177
|
stacksRecipient,
|
|
173
178
|
lockTime,
|
|
174
179
|
reclaimKeys,
|
|
180
|
+
reclaimKeyStrings: reclaimKeyStringsTuple,
|
|
175
181
|
depositMiniscriptNode,
|
|
176
182
|
reclaimMiniscriptNode,
|
|
177
183
|
};
|
|
178
184
|
}
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VEZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NidGMvcGFyc2VEZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBd01BLGdFQTBDQztBQWxQRCxnREFBMEQ7QUFDMUQsaUVBQTJFO0FBRTNFLDJDQUEwRztBQW1DMUcsU0FBUyxRQUFRLENBQUMsQ0FBVSxFQUFFLEtBQWE7SUFDekMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFVLEVBQUUsS0FBYTtJQUN6QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLG1CQUFtQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQWM7SUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbkMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMs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QUFxQjtRQUNyQixxQkFBcUI7S0FDdEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCSVAzMiwgRGVzY3JpcHRvciwgYXN0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBQYXR0ZXJuTWF0Y2hlciwgUGF0dGVybiB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tY29yZS9kZXNjcmlwdG9yJztcblxuaW1wb3J0IHsgTUFYX0ZFRV9CWVRFX0xFTkdUSCwgU1RBQ0tTX1JFQ0lQSUVOVF9CWVRFX0xFTkdUSCwgVU5TUEVOREFCTEVfSU5URVJOQUxfS0VZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFBhcnNlZCBjb21wb25lbnRzIG9mIGFuIHNCVEMgcGVnLWluIGRlcG9zaXQgZGVzY3JpcHRvci5cbiAqXG4gKiBUaGUgcGFyc2VyIHJldHVybnMgYm90aCB0aGUgaGlnaC1sZXZlbFxuICogZmllbGRzIGNhbGxlcnMgdXN1YWxseSBuZWVkIChrZXlzLCBsb2NrVGltZSwgZmVlLCByZWNpcGllbnQpIGFuZCB0aGUgcmF3XG4gKiBtaW5pc2NyaXB0IEFTVCBub2RlcyBzbyB0aGUgbGVhdmVzIGNhbiBiZSByZS1jb21waWxlZCBpbnRvIGFcbiAqIGBNaW5pc2NyaXB0YCB2aWEgYGFzdC5mb3JtYXROb2RlYCArIGBNaW5pc2NyaXB0LmZyb21TdHJpbmdgLlxuICovXG5leHBvcnQgdHlwZSBQYXJzZWRTYnRjRGVwb3NpdERlc2NyaXB0b3IgPSB7XG4gIC8qKiAzMi1ieXRlIHgtb25seSBzaWduZXJzIGFnZ3JlZ2F0ZSBrZXkgZnJvbSB0aGUgZGVwb3NpdCBsZWFmLiAqL1xuICBzaWduZXJzQWdncmVnYXRlS2V5OiBCdWZmZXI7XG4gIC8qKiBNYXggc2lnbmVyIGZlZSBwYXJzZWQgZnJvbSB0aGUgZmlyc3QgOCBieXRlcyBvZiB0aGUgcGF5bG9hZF9kcm9wIHZhbHVlLiAqL1xuICBtYXhGZWU6IGJpZ2ludDtcbiAgLyoqIDIyLWJ5dGUgU3RhY2tzIHJlY2lwaWVudCBwYXJzZWQgZnJvbSB0aGUgdHJhaWxpbmcgYnl0ZXMgb2YgdGhlIHBheWxvYWQuICovXG4gIHN0YWNrc1JlY2lwaWVudDogQnVmZmVyO1xuICAvKiogUmVjbGFpbS1sZWFmIHJlbGF0aXZlIHRpbWVsb2NrIChudW1iZXIgb2YgQml0Y29pbiBibG9ja3MsIE9QX0NTViBhcmd1bWVudCkuICovXG4gIGxvY2tUaW1lOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgdGhyZWUgY29uY3JldGUgeC1vbmx5IHJlY2xhaW0ga2V5cyBmcm9tIHRoZSByZWNsYWltLWxlYWYgYG11bHRpX2FgLFxuICAgKiBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW5zaWRlIHRoZSBsZWFmIChkZXNjcmlwdG9yIGxpYnJhcnkgc29ydHMgYnkgaGV4KS5cbiAgICogT25seSBwcmVzZW50IHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgaW4gaXRzIGRlcml2ZWQvZGVmaW5pdGUgZm9ybSDigJQgZm9yXG4gICAqIGRlcml2YWJsZSBkZXNjcmlwdG9ycyB0aGUgbXVsdGlfYSBlbnRyaWVzIGFyZSB4cHViIHN0cmluZ3MgKGUuZy5cbiAgICogYHhwdWIuLi4vKmApLCB3aGljaCBjYW4ndCBiZSB0dXJuZWQgaW50byAzMi1ieXRlIGJ1ZmZlcnMgd2l0aG91dCBwaWNraW5nXG4gICAqIGEgZGVyaXZhdGlvbiBpbmRleC4gQ2FsbGVycyB0aGF0IG5lZWQgcmF3IGtleSBieXRlcyBNVVNUIHBhc3MgdGhlXG4gICAqIGRlcml2ZWQgZGVzY3JpcHRvciAoc2VlIGBkZXJpdmVSZWNsYWltS2V5c2AgZm9yIGRlcml2YWJsZSBpbnB1dHMpLlxuICAgKi9cbiAgcmVjbGFpbUtleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXSB8IHVuZGVmaW5lZDtcbiAgLyoqIFJhdyBtaW5pc2NyaXB0IEFTVCBmb3IgdGhlIGRlcG9zaXQgbGVhZiAoZmlyc3QgdGFwLXRyZWUgbGVhZikuICovXG4gIGRlcG9zaXRNaW5pc2NyaXB0Tm9kZTogYXN0Lk1pbmlzY3JpcHROb2RlO1xuICAvKiogUmF3IG1pbmlzY3JpcHQgQVNUIGZvciB0aGUgcmVjbGFpbSBsZWFmIChzZWNvbmQgdGFwLXRyZWUgbGVhZikuICovXG4gIHJlY2xhaW1NaW5pc2NyaXB0Tm9kZTogYXN0Lk1pbmlzY3JpcHROb2RlO1xufTtcblxuZnVuY3Rpb24gYXNTdHJpbmcodjogdW5rbm93biwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZmllbGR9IG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgfVxuICByZXR1cm4gdjtcbn1cblxuZnVuY3Rpb24gYXNOdW1iZXIodjogdW5rbm93biwgZmllbGQ6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgdiAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZmllbGR9IG11c3QgYmUgYSBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gdjtcbn1cblxuLyoqXG4gKiBQdWxsIGBbdGhyZXNob2xkLCAuLi5rZXlzXWAgb3V0IG9mIGEgYG11bHRpX2FgIEFTVCBub2RlIHZhbHVlLCB2YWxpZGF0aW5nXG4gKiBlYWNoIGVsZW1lbnQuIFRoZSBkZXNjcmlwdG9yJ3MgYG11bHRpX2FgIGlzIHJlbmRlcmVkIHdpdGgga2V5cyBlaXRoZXIgYXNcbiAqIGNvbmNyZXRlIGhleCAoZGVmaW5pdGUgZGVzY3JpcHRvcikgb3IgYXMgeHB1YiBzdHJpbmdzIGVuZGluZyBpbiBgLypgXG4gKiAoZGVyaXZhYmxlIGRlc2NyaXB0b3IpIOKAlCBib3RoIGFyZSBzdHJpbmdzIGhlcmUsIHNvIHdlIGRvbid0IHRyeSB0byBjb252ZXJ0XG4gKiB0byBCdWZmZXIgYXQgdGhpcyBsZXZlbC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VNdWx0aShtdWx0aTogdW5rbm93bik6IFtudW1iZXIsIHN0cmluZ1tdXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShtdWx0aSkgfHwgbXVsdGkubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtdWx0aV9hIHN0cnVjdHVyZTogbm90IGFuIGFycmF5IG9yIGVtcHR5Jyk7XG4gIH1cbiAgY29uc3QgW3RocmVzaG9sZCwgLi4ua2V5c10gPSBtdWx0aTtcbiAgaWYgKHR5cGVvZiB0aHJlc2hvbGQgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG11bHRpX2Egc3RydWN0dXJlOiB0aHJlc2hvbGQgaXMgbm90IGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKCFrZXlzLmV2ZXJ5KChrKSA9PiB0eXBlb2YgayA9PT0gJ3N0cmluZycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG11bHRpX2Egc3RydWN0dXJlOiBub3QgYWxsIGtleXMgYXJlIHN0cmluZ3MnKTtcbiAgfVxuICByZXR1cm4gW3RocmVzaG9sZCwga2V5c107XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVwb3NpdExlYWYoXG4gIGRlcG9zaXROb2RlOiBhc3QuTWluaXNjcmlwdE5vZGUsXG4gIG1hdGNoZXI6IFBhdHRlcm5NYXRjaGVyXG4pOiB7IHNpZ25lcnNBZ2dyZWdhdGVLZXk6IEJ1ZmZlcjsgbWF4RmVlOiBiaWdpbnQ7IHN0YWNrc1JlY2lwaWVudDogQnVmZmVyIH0ge1xuICBjb25zdCBkZXBvc2l0UGF0dGVybjogUGF0dGVybiA9IHtcbiAgICBhbmRfdjogW3sgcGF5bG9hZF9kcm9wOiB7ICR2YXI6ICdwYXlsb2FkSGV4JyB9IH0sIHsgcGs6IHsgJHZhcjogJ3NpZ25lcnNLZXknIH0gfV0sXG4gIH07XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hlci5tYXRjaChkZXBvc2l0Tm9kZSwgZGVwb3NpdFBhdHRlcm4pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEZXBvc2l0IGxlYWYgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcGF0dGVybicpO1xuICB9XG5cbiAgY29uc3QgcGF5bG9hZEhleCA9IGFzU3RyaW5nKG1hdGNoLnBheWxvYWRIZXgsICdwYXlsb2FkX2Ryb3AgdmFsdWUnKTtcbiAgY29uc3Qgc2lnbmVyc0tleUhleCA9IGFzU3RyaW5nKG1hdGNoLnNpZ25lcnNLZXksICdwa19rIGtleScpO1xuXG4gIGNvbnN0IGV4cGVjdGVkUGF5bG9hZExlbmd0aCA9IE1BWF9GRUVfQllURV9MRU5HVEggKyBTVEFDS1NfUkVDSVBJRU5UX0JZVEVfTEVOR1RIO1xuICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmZyb20ocGF5bG9hZEhleCwgJ2hleCcpO1xuICBpZiAocGF5bG9hZC5sZW5ndGggIT09IGV4cGVjdGVkUGF5bG9hZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBwYXlsb2FkX2Ryb3AgdmFsdWUgbXVzdCBiZSAke2V4cGVjdGVkUGF5bG9hZExlbmd0aH0gYnl0ZXMgKCR7ZXhwZWN0ZWRQYXlsb2FkTGVuZ3RoICogMn0gaGV4IGNoYXJzKSwgZ290ICR7XG4gICAgICAgIHBheWxvYWQubGVuZ3RoXG4gICAgICB9IGJ5dGVzYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBtYXhGZWUgPSBwYXlsb2FkLnJlYWRCaWdVSW50NjRCRSgwKTtcbiAgY29uc3Qgc3RhY2tzUmVjaXBpZW50ID0gcGF5bG9hZC5zdWJhcnJheShNQVhfRkVFX0JZVEVfTEVOR1RIKTtcblxuICBjb25zdCBzaWduZXJzQWdncmVnYXRlS2V5ID0gQnVmZmVyLmZyb20oc2lnbmVyc0tleUhleCwgJ2hleCcpO1xuICBpZiAoc2lnbmVyc0FnZ3JlZ2F0ZUtleS5sZW5ndGggIT09IDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzaWduZXJzQWdncmVnYXRlS2V5IG11c3QgYmUgMzIgYnl0ZXMgeC1vbmx5LCBnb3QgJHtzaWduZXJzQWdncmVnYXRlS2V5Lmxlbmd0aH1gKTtcbiAgfVxuXG4gIHJldHVybiB7IHNpZ25lcnNBZ2dyZWdhdGVLZXksIG1heEZlZSwgc3RhY2tzUmVjaXBpZW50IH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVjbGFpbUxlYWYoXG4gIHJlY2xhaW1Ob2RlOiBhc3QuTWluaXNjcmlwdE5vZGUsXG4gIG1hdGNoZXI6IFBhdHRlcm5NYXRjaGVyXG4pOiB7IGxvY2tUaW1lOiBudW1iZXI7IHJlY2xhaW1LZXlTdHJpbmdzOiBzdHJpbmdbXSB9IHtcbiAgLy8gYW5kX3YocjpvbGRlcig8bG9ja1RpbWU+KSwgbXVsdGlfYSgyLCBrMSwgazIsIGszKSlcbiAgY29uc3QgcmVjbGFpbVBhdHRlcm46IFBhdHRlcm4gPSB7XG4gICAgYW5kX3Y6IFt7ICdyOm9sZGVyJzogeyAkdmFyOiAnbG9ja1RpbWUnIH0gfSwgeyBtdWx0aV9hOiB7ICR2YXI6ICdyZWNsYWltTXVsdGknIH0gfV0sXG4gIH07XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hlci5tYXRjaChyZWNsYWltTm9kZSwgcmVjbGFpbVBhdHRlcm4pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWNsYWltIGxlYWYgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcGF0dGVybicpO1xuICB9XG5cbiAgY29uc3QgbG9ja1RpbWUgPSBhc051bWJlcihtYXRjaC5sb2NrVGltZSwgJ3I6b2xkZXIgYXJndW1lbnQnKTtcbiAgaWYgKGxvY2tUaW1lIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlY2xhaW0gbG9ja1RpbWUgbXVzdCBiZSA+IDAsIGdvdCAke2xvY2tUaW1lfWApO1xuICB9XG5cbiAgY29uc3QgW3RocmVzaG9sZCwgcmVjbGFpbUtleVN0cmluZ3NdID0gcGFyc2VNdWx0aShtYXRjaC5yZWNsYWltTXVsdGkpO1xuICBpZiAodGhyZXNob2xkICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByZWNsYWltIG11bHRpX2EgdGhyZXNob2xkIG11c3QgYmUgMiwgZ290ICR7dGhyZXNob2xkfWApO1xuICB9XG4gIGlmIChyZWNsYWltS2V5U3RyaW5ncy5sZW5ndGggIT09IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlY2xhaW0gbXVsdGlfYSBtdXN0IGhhdmUgZXhhY3RseSAzIGtleXMsIGdvdCAke3JlY2xhaW1LZXlTdHJpbmdzLmxlbmd0aH1gKTtcbiAgfVxuXG4gIHJldHVybiB7IGxvY2tUaW1lLCByZWNsYWltS2V5U3RyaW5ncyB9O1xufVxuXG5jb25zdCBIRVhfWF9PTkxZX0tFWSA9IC9eWzAtOWEtZkEtRl17NjR9JC87XG5jb25zdCBYUFVCX1dJVEhfSU5ERVggPSAvXihbMS05QS1ISi1OUC1aYS1rbS16XSspXFwvKFxcZCspJC87XG5cbi8qKlxuICogUmVzb2x2ZSBhIHNpbmdsZSBgbXVsdGlfYWAga2V5IGVudHJ5IHRvIGEgMzItYnl0ZSB4LW9ubHkgcHVibGljIGtleS5cbiAqXG4gKiBBY2NlcHRzOlxuICogICAtIDY0LWhleC1jaGFyIHN0cmluZyDihpIgcmV0dXJuZWQgYXMtaXMgKGFscmVhZHkgeC1vbmx5KVxuICogICAtIGB4cHViLi4uLzxpbmRleD5gIOKGkiBCSVAzMi1kZXJpdmUgYXQgdGhhdCBpbmRleCBhbmQgZHJvcCB0aGUgcHJlZml4IGJ5dGVcbiAqXG4gKiBSZXR1cm5zIG51bGwgZm9yIGFueSBvdGhlciBzaGFwZSAoZS5nLiB3aWxkY2FyZCBgeHB1Yi4uLi8qYCwgbWFsZm9ybWVkIGlucHV0KS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlY2xhaW1LZXkoczogc3RyaW5nKTogQnVmZmVyIHwgbnVsbCB7XG4gIGlmIChIRVhfWF9PTkxZX0tFWS50ZXN0KHMpKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHMsICdoZXgnKTtcbiAgfVxuICBjb25zdCBtID0gcy5tYXRjaChYUFVCX1dJVEhfSU5ERVgpO1xuICBpZiAoIW0pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBbLCB4cHViLCBpbmRleFN0cl0gPSBtO1xuICBjb25zdCBpbmRleCA9IE51bWJlci5wYXJzZUludChpbmRleFN0ciwgMTApO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbmRleCkgfHwgaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgbGV0IG5vZGU7XG4gIHRyeSB7XG4gICAgbm9kZSA9IEJJUDMyLmZyb21CYXNlNTgoeHB1Yik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIEJJUDMyIHB1YmxpYyBrZXkgaXMgMzMgYnl0ZXMgKDEgcHJlZml4ICsgMzIgeC1vbmx5KS4gRHJvcCB0aGUgcHJlZml4LlxuICByZXR1cm4gQnVmZmVyLmZyb20obm9kZS5kZXJpdmUoaW5kZXgpLnB1YmxpY0tleS5zdWJhcnJheSgxKSk7XG59XG5cbi8qKlxuICogQ29udmVydCByZWNsYWltLWxlYWYga2V5IHN0cmluZ3MgaW50byAzMi1ieXRlIHgtb25seSBidWZmZXJzLiBBY2NlcHRzIGJvdGhcbiAqIHRoZSBkZWZpbml0ZS9kZXJpdmVkIGZvcm0gKGNvbmNyZXRlIDY0LWhleC1jaGFyIHgtb25seSBrZXlzKSBhbmQgdGhlIGZvcm1cbiAqIHByb2R1Y2VkIGJ5IGBEZXNjcmlwdG9yLmF0RGVyaXZhdGlvbkluZGV4KG4pYCAoYHhwdWIuLi4vPG4+YCkuIFJldHVybnNcbiAqIHVuZGVmaW5lZCBpZiBhbnkgZW50cnkgaXMgc3RpbGwgd2lsZGNhcmQgKGB4cHViLi4uLypgKSBvciBvdGhlcndpc2VcbiAqIHVucmVzb2x2YWJsZS5cbiAqL1xuZnVuY3Rpb24gcmVjbGFpbUtleXNGcm9tU3RyaW5ncyhrZXlTdHJpbmdzOiBzdHJpbmdbXSk6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlc29sdmVkID0ga2V5U3RyaW5ncy5tYXAocmVzb2x2ZVJlY2xhaW1LZXkpO1xuICBpZiAocmVzb2x2ZWQuc29tZSgoYikgPT4gYiA9PT0gbnVsbCkgfHwgcmVzb2x2ZWQubGVuZ3RoICE9PSAzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gW3Jlc29sdmVkWzBdIGFzIEJ1ZmZlciwgcmVzb2x2ZWRbMV0gYXMgQnVmZmVyLCByZXNvbHZlZFsyXSBhcyBCdWZmZXJdO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIHNCVEMgcGVnLWluIGRlcG9zaXQgZGVzY3JpcHRvciBhbmQgcmV0dXJuIGl0cyBjb21wb25lbnRzLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIHRoZSBkZXNjcmlwdG9yIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZFxuICogYHRyKDxVTlNQRU5EQUJMRT4sIHs8ZGVwb3NpdExlYWY+LCA8cmVjbGFpbUxlYWY+fSlgIHNoYXBlIOKAlCBzYW1lIGNvbnZlbnRpb25cbiAqIGFzIGJhYnlsb24ncyBgcGFyc2VTdGFraW5nRGVzY3JpcHRvcmAuIFRocm93cyBpZiB0aGUgc2hhcGUgbWF0Y2hlcyBidXQgYVxuICogc3ViLWZpZWxkIGlzIG1hbGZvcm1lZCAoZS5nLiBzaWduZXJzIGtleSBpc24ndCAzMiBieXRlcywgcGF5bG9hZCBpc24ndCAzMFxuICogYnl0ZXMsIHRocmVzaG9sZCBpc24ndCAyKS5cbiAqXG4gKiBBY2NlcHRzIGJvdGggdGhlIGBEZXNjcmlwdG9yYCBXQVNNIG9iamVjdCAoZGVmaW5pdGUgb3IgZGVyaXZhYmxlKSBhbmQgYVxuICogcHJlLWV4dHJhY3RlZCBgYXN0LkRlc2NyaXB0b3JOb2RlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTYnRjRGVwb3NpdERlc2NyaXB0b3IoXG4gIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IgfCBhc3QuRGVzY3JpcHRvck5vZGVcbik6IFBhcnNlZFNidGNEZXBvc2l0RGVzY3JpcHRvciB8IG51bGwge1xuICBjb25zdCBwYXR0ZXJuOiBQYXR0ZXJuID0ge1xuICAgIHRyOiBbVU5TUEVOREFCTEVfSU5URVJOQUxfS0VZLCBbeyAkdmFyOiAnZGVwb3NpdExlYWYnIH0sIHsgJHZhcjogJ3JlY2xhaW1MZWFmJyB9XV0sXG4gIH07XG5cbiAgY29uc3QgbWF0Y2hlciA9IG5ldyBQYXR0ZXJuTWF0Y2hlcigpO1xuICBjb25zdCBkZXNjcmlwdG9yTm9kZSA9IGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBEZXNjcmlwdG9yID8gYXN0LmZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IpIDogZGVzY3JpcHRvcjtcbiAgY29uc3QgcmVzdWx0ID0gbWF0Y2hlci5tYXRjaChkZXNjcmlwdG9yTm9kZSwgcGF0dGVybik7XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGRlcG9zaXRNaW5pc2NyaXB0Tm9kZSA9IHJlc3VsdC5kZXBvc2l0TGVhZiBhcyBhc3QuTWluaXNjcmlwdE5vZGU7XG4gIGxldCByZWNsYWltTWluaXNjcmlwdE5vZGUgPSByZXN1bHQucmVjbGFpbUxlYWYgYXMgYXN0Lk1pbmlzY3JpcHROb2RlO1xuXG4gIGNvbnN0IHsgc2lnbmVyc0FnZ3JlZ2F0ZUtleSwgbWF4RmVlLCBzdGFja3NSZWNpcGllbnQgfSA9IHBhcnNlRGVwb3NpdExlYWYoZGVwb3NpdE1pbmlzY3JpcHROb2RlLCBtYXRjaGVyKTtcbiAgY29uc3QgeyBsb2NrVGltZSwgcmVjbGFpbUtleVN0cmluZ3MgfSA9IHBhcnNlUmVjbGFpbUxlYWYocmVjbGFpbU1pbmlzY3JpcHROb2RlLCBtYXRjaGVyKTtcblxuICBjb25zdCByZWNsYWltS2V5cyA9IHJlY2xhaW1LZXlzRnJvbVN0cmluZ3MocmVjbGFpbUtleVN0cmluZ3MpO1xuICBpZiAocmVjbGFpbUtleXMpIHtcbiAgICAvLyBSZXdyaXRlIHRoZSByZWNsYWltIGxlYWYgd2l0aCBjb25jcmV0ZSBoZXgga2V5cyB3aGVuIHdlIGNhbiByZXNvbHZlXG4gICAgLy8gdGhlbSDigJQgYE1pbmlzY3JpcHQuZnJvbVN0cmluZyguLi4sICd0YXAnKWAgb25seSBhY2NlcHRzIHgtb25seSBoZXggaW5cbiAgICAvLyBgbXVsdGlfYWAsIG5vdCB4cHViLWZvcm0gc3RyaW5ncy4gV2l0aCB0aGlzIHJld3JpdGUgdGhlIGZvcm1hdHRlZFxuICAgIC8vIGxlYWYgaXMgZGlyZWN0bHkgY29tcGlsYWJsZTsgd2l0aG91dCBpdCBjYWxsZXJzIG11c3QgZG8gdGhlXG4gICAgLy8gcmVzb2x1dGlvbiB0aGVtc2VsdmVzLlxuICAgIHJlY2xhaW1NaW5pc2NyaXB0Tm9kZSA9IHtcbiAgICAgIGFuZF92OiBbeyAncjpvbGRlcic6IGxvY2tUaW1lIH0sIHsgbXVsdGlfYTogWzIsIC4uLnJlY2xhaW1LZXlzLm1hcCgoaykgPT4gay50b1N0cmluZygnaGV4JykpXSB9XSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzaWduZXJzQWdncmVnYXRlS2V5LFxuICAgIG1heEZlZSxcbiAgICBzdGFja3NSZWNpcGllbnQsXG4gICAgbG9ja1RpbWUsXG4gICAgcmVjbGFpbUtleXMsXG4gICAgZGVwb3NpdE1pbmlzY3JpcHROb2RlLFxuICAgIHJlY2xhaW1NaW5pc2NyaXB0Tm9kZSxcbiAgfTtcbn1cbiJdfQ==
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VEZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NidGMvcGFyc2VEZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ05BLGdFQWdEQztBQWhRRCxnREFBMEQ7QUFDMUQsaUVBQTJFO0FBRTNFLDJDQUEwRztBQTJDMUcsU0FBUyxRQUFRLENBQUMsQ0FBVSxFQUFFLEtBQWE7SUFDekMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFVLEVBQUUsS0FBYTtJQUN6QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLG1CQUFtQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQWM7SUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbkMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMs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SyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDakcsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsbUJBQW1CO1FBQ25CLE1BQU07UUFDTixlQUFlO1FBQ2YsUUFBUTtRQUNSLFdBQVc7UUFDWCxpQkFBaUIsRUFBRSxzQkFBc0I7UUFDekMscUJBQXFCO1FBQ3JCLHFCQUFxQjtLQUN0QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJJUDMyLCBEZXNjcmlwdG9yLCBhc3QgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IFBhdHRlcm5NYXRjaGVyLCBQYXR0ZXJuIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1jb3JlL2Rlc2NyaXB0b3InO1xuXG5pbXBvcnQgeyBNQVhfRkVFX0JZVEVfTEVOR1RILCBTVEFDS1NfUkVDSVBJRU5UX0JZVEVfTEVOR1RILCBVTlNQRU5EQUJMRV9JTlRFUk5BTF9LRVkgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogUGFyc2VkIGNvbXBvbmVudHMgb2YgYW4gc0JUQyBwZWctaW4gZGVwb3NpdCBkZXNjcmlwdG9yLlxuICpcbiAqIFRoZSBwYXJzZXIgcmV0dXJucyBib3RoIHRoZSBoaWdoLWxldmVsXG4gKiBmaWVsZHMgY2FsbGVycyB1c3VhbGx5IG5lZWQgKGtleXMsIGxvY2tUaW1lLCBmZWUsIHJlY2lwaWVudCkgYW5kIHRoZSByYXdcbiAqIG1pbmlzY3JpcHQgQVNUIG5vZGVzIHNvIHRoZSBsZWF2ZXMgY2FuIGJlIHJlLWNvbXBpbGVkIGludG8gYVxuICogYE1pbmlzY3JpcHRgIHZpYSBgYXN0LmZvcm1hdE5vZGVgICsgYE1pbmlzY3JpcHQuZnJvbVN0cmluZ2AuXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnNlZFNidGNEZXBvc2l0RGVzY3JpcHRvciA9IHtcbiAgLyoqIDMyLWJ5dGUgeC1vbmx5IHNpZ25lcnMgYWdncmVnYXRlIGtleSBmcm9tIHRoZSBkZXBvc2l0IGxlYWYuICovXG4gIHNpZ25lcnNBZ2dyZWdhdGVLZXk6IEJ1ZmZlcjtcbiAgLyoqIE1heCBzaWduZXIgZmVlIHBhcnNlZCBmcm9tIHRoZSBmaXJzdCA4IGJ5dGVzIG9mIHRoZSBwYXlsb2FkX2Ryb3AgdmFsdWUuICovXG4gIG1heEZlZTogYmlnaW50O1xuICAvKiogMjItYnl0ZSBTdGFja3MgcmVjaXBpZW50IHBhcnNlZCBmcm9tIHRoZSB0cmFpbGluZyBieXRlcyBvZiB0aGUgcGF5bG9hZC4gKi9cbiAgc3RhY2tzUmVjaXBpZW50OiBCdWZmZXI7XG4gIC8qKiBSZWNsYWltLWxlYWYgcmVsYXRpdmUgdGltZWxvY2sgKG51bWJlciBvZiBCaXRjb2luIGJsb2NrcywgT1BfQ1NWIGFyZ3VtZW50KS4gKi9cbiAgbG9ja1RpbWU6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSB0aHJlZSBjb25jcmV0ZSB4LW9ubHkgcmVjbGFpbSBrZXlzIGZyb20gdGhlIHJlY2xhaW0tbGVhZiBgbXVsdGlfYWAsXG4gICAqIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbnNpZGUgdGhlIGxlYWYgKGRlc2NyaXB0b3IgbGlicmFyeSBzb3J0cyBieSBoZXgpLlxuICAgKiBPbmx5IHByZXNlbnQgd2hlbiB0aGUgZGVzY3JpcHRvciBpcyBpbiBpdHMgZGVyaXZlZC9kZWZpbml0ZSBmb3JtIOKAlCBmb3JcbiAgICogZGVyaXZhYmxlIGRlc2NyaXB0b3JzIHRoZSBtdWx0aV9hIGVudHJpZXMgYXJlIHhwdWIgc3RyaW5ncyAoZS5nLlxuICAgKiBgeHB1Yi4uLi8qYCksIHdoaWNoIGNhbid0IGJlIHR1cm5lZCBpbnRvIDMyLWJ5dGUgYnVmZmVycyB3aXRob3V0IHBpY2tpbmdcbiAgICogYSBkZXJpdmF0aW9uIGluZGV4LiBDYWxsZXJzIHRoYXQgbmVlZCByYXcga2V5IGJ5dGVzIE1VU1QgcGFzcyB0aGVcbiAgICogZGVyaXZlZCBkZXNjcmlwdG9yIChzZWUgYGRlcml2ZVJlY2xhaW1LZXlzYCBmb3IgZGVyaXZhYmxlIGlucHV0cykuXG4gICAqL1xuICByZWNsYWltS2V5czogW0J1ZmZlciwgQnVmZmVyLCBCdWZmZXJdIHwgdW5kZWZpbmVkO1xuICAvKiogUmF3IG1pbmlzY3JpcHQgQVNUIGZvciB0aGUgZGVwb3NpdCBsZWFmIChmaXJzdCB0YXAtdHJlZSBsZWFmKS4gKi9cbiAgZGVwb3NpdE1pbmlzY3JpcHROb2RlOiBhc3QuTWluaXNjcmlwdE5vZGU7XG4gIC8qKiBSYXcgbWluaXNjcmlwdCBBU1QgZm9yIHRoZSByZWNsYWltIGxlYWYgKHNlY29uZCB0YXAtdHJlZSBsZWFmKS4gKi9cbiAgcmVjbGFpbU1pbmlzY3JpcHROb2RlOiBhc3QuTWluaXNjcmlwdE5vZGU7XG4gIC8qKlxuICAgKiBUaGUgdGhyZWUgcmF3IGBtdWx0aV9hYCBrZXkgZW50cmllcyBmcm9tIHRoZSByZWNsYWltIGxlYWYsIGV4YWN0bHkgYXNcbiAgICogdGhleSBhcHBlYXIgaW4gdGhlIGRlc2NyaXB0b3Ig4oCUIGB4cHViLi4uLypgIGZvciBkZXJpdmFibGUgZGVzY3JpcHRvcnMgYW5kXG4gICAqIDY0LWhleC1jaGFyIHgtb25seSBrZXlzIGZvciBkZWZpbml0ZSBkZXNjcmlwdG9ycy4gVXNlZnVsIGZvciBjYWxsZXJzIHRoYXRcbiAgICogbmVlZCB0aGUgb3JpZ2luYWwgeHB1YiBmb3JtIChlLmcuIHRvIHJvdW5kLXRyaXAgYmFjayB0byBhIGRlc2NyaXB0b3JcbiAgICogYnVpbGRlcikgYW5kIGRvbid0IHdhbnQgdGhlIHJlc29sdmVkIGByZWNsYWltS2V5c2AgYnVmZmVycy5cbiAgICovXG4gIHJlY2xhaW1LZXlTdHJpbmdzOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ107XG59O1xuXG5mdW5jdGlvbiBhc1N0cmluZyh2OiB1bmtub3duLCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWVsZH0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICB9XG4gIHJldHVybiB2O1xufVxuXG5mdW5jdGlvbiBhc051bWJlcih2OiB1bmtub3duLCBmaWVsZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB2ICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWVsZH0gbXVzdCBiZSBhIG51bWJlcmApO1xuICB9XG4gIHJldHVybiB2O1xufVxuXG4vKipcbiAqIFB1bGwgYFt0aHJlc2hvbGQsIC4uLmtleXNdYCBvdXQgb2YgYSBgbXVsdGlfYWAgQVNUIG5vZGUgdmFsdWUsIHZhbGlkYXRpbmdcbiAqIGVhY2ggZWxlbWVudC4gVGhlIGRlc2NyaXB0b3IncyBgbXVsdGlfYWAgaXMgcmVuZGVyZWQgd2l0aCBrZXlzIGVpdGhlciBhc1xuICogY29uY3JldGUgaGV4IChkZWZpbml0ZSBkZXNjcmlwdG9yKSBvciBhcyB4cHViIHN0cmluZ3MgZW5kaW5nIGluIGAvKmBcbiAqIChkZXJpdmFibGUgZGVzY3JpcHRvcikg4oCUIGJvdGggYXJlIHN0cmluZ3MgaGVyZSwgc28gd2UgZG9uJ3QgdHJ5IHRvIGNvbnZlcnRcbiAqIHRvIEJ1ZmZlciBhdCB0aGlzIGxldmVsLlxuICovXG5mdW5jdGlvbiBwYXJzZU11bHRpKG11bHRpOiB1bmtub3duKTogW251bWJlciwgc3RyaW5nW11dIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG11bHRpKSB8fCBtdWx0aS5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG11bHRpX2Egc3RydWN0dXJlOiBub3QgYW4gYXJyYXkgb3IgZW1wdHknKTtcbiAgfVxuICBjb25zdCBbdGhyZXNob2xkLCAuLi5rZXlzXSA9IG11bHRpO1xuICBpZiAodHlwZW9mIHRocmVzaG9sZCAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbXVsdGlfYSBzdHJ1Y3R1cmU6IHRocmVzaG9sZCBpcyBub3QgYSBudW1iZXInKTtcbiAgfVxuICBpZiAoIWtleXMuZXZlcnkoKGspID0+IHR5cGVvZiBrID09PSAnc3RyaW5nJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbXVsdGlfYSBzdHJ1Y3R1cmU6IG5vdCBhbGwga2V5cyBhcmUgc3RyaW5ncycpO1xuICB9XG4gIHJldHVybiBbdGhyZXNob2xkLCBrZXlzXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEZXBvc2l0TGVhZihcbiAgZGVwb3NpdE5vZGU6IGFzdC5NaW5pc2NyaXB0Tm9kZSxcbiAgbWF0Y2hlcjogUGF0dGVybk1hdGNoZXJcbik6IHsgc2lnbmVyc0FnZ3JlZ2F0ZUtleTogQnVmZmVyOyBtYXhGZWU6IGJpZ2ludDsgc3RhY2tzUmVjaXBpZW50OiBCdWZmZXIgfSB7XG4gIGNvbnN0IGRlcG9zaXRQYXR0ZXJuOiBQYXR0ZXJuID0ge1xuICAgIGFuZF92OiBbeyBwYXlsb2FkX2Ryb3A6IHsgJHZhcjogJ3BheWxvYWRIZXgnIH0gfSwgeyBwazogeyAkdmFyOiAnc2lnbmVyc0tleScgfSB9XSxcbiAgfTtcbiAgY29uc3QgbWF0Y2ggPSBtYXRjaGVyLm1hdGNoKGRlcG9zaXROb2RlLCBkZXBvc2l0UGF0dGVybik7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcG9zaXQgbGVhZiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBwYXR0ZXJuJyk7XG4gIH1cblxuICBjb25zdCBwYXlsb2FkSGV4ID0gYXNTdHJpbmcobWF0Y2gucGF5bG9hZEhleCwgJ3BheWxvYWRfZHJvcCB2YWx1ZScpO1xuICBjb25zdCBzaWduZXJzS2V5SGV4ID0gYXNTdHJpbmcobWF0Y2guc2lnbmVyc0tleSwgJ3BrX2sga2V5Jyk7XG5cbiAgY29uc3QgZXhwZWN0ZWRQYXlsb2FkTGVuZ3RoID0gTUFYX0ZFRV9CWVRFX0xFTkdUSCArIFNUQUNLU19SRUNJUElFTlRfQllURV9MRU5HVEg7XG4gIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuZnJvbShwYXlsb2FkSGV4LCAnaGV4Jyk7XG4gIGlmIChwYXlsb2FkLmxlbmd0aCAhPT0gZXhwZWN0ZWRQYXlsb2FkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHBheWxvYWRfZHJvcCB2YWx1ZSBtdXN0IGJlICR7ZXhwZWN0ZWRQYXlsb2FkTGVuZ3RofSBieXRlcyAoJHtleHBlY3RlZFBheWxvYWRMZW5ndGggKiAyfSBoZXggY2hhcnMpLCBnb3QgJHtcbiAgICAgICAgcGF5bG9hZC5sZW5ndGhcbiAgICAgIH0gYnl0ZXNgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1heEZlZSA9IHBheWxvYWQucmVhZEJpZ1VJbnQ2NEJFKDApO1xuICBjb25zdCBzdGFja3NSZWNpcGllbnQgPSBwYXlsb2FkLnN1YmFycmF5KE1BWF9GRUVfQllURV9MRU5HVEgpO1xuXG4gIGNvbnN0IHNpZ25lcnNBZ2dyZWdhdGVLZXkgPSBCdWZmZXIuZnJvbShzaWduZXJzS2V5SGV4LCAnaGV4Jyk7XG4gIGlmIChzaWduZXJzQWdncmVnYXRlS2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25lcnNBZ2dyZWdhdGVLZXkgbXVzdCBiZSAzMiBieXRlcyB4LW9ubHksIGdvdCAke3NpZ25lcnNBZ2dyZWdhdGVLZXkubGVuZ3RofWApO1xuICB9XG5cbiAgcmV0dXJuIHsgc2lnbmVyc0FnZ3JlZ2F0ZUtleSwgbWF4RmVlLCBzdGFja3NSZWNpcGllbnQgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWNsYWltTGVhZihcbiAgcmVjbGFpbU5vZGU6IGFzdC5NaW5pc2NyaXB0Tm9kZSxcbiAgbWF0Y2hlcjogUGF0dGVybk1hdGNoZXJcbik6IHsgbG9ja1RpbWU6IG51bWJlcjsgcmVjbGFpbUtleVN0cmluZ3M6IHN0cmluZ1tdIH0ge1xuICAvLyBhbmRfdihyOm9sZGVyKDxsb2NrVGltZT4pLCBtdWx0aV9hKDIsIGsxLCBrMiwgazMpKVxuICBjb25zdCByZWNsYWltUGF0dGVybjogUGF0dGVybiA9IHtcbiAgICBhbmRfdjogW3sgJ3I6b2xkZXInOiB7ICR2YXI6ICdsb2NrVGltZScgfSB9LCB7IG11bHRpX2E6IHsgJHZhcjogJ3JlY2xhaW1NdWx0aScgfSB9XSxcbiAgfTtcbiAgY29uc3QgbWF0Y2ggPSBtYXRjaGVyLm1hdGNoKHJlY2xhaW1Ob2RlLCByZWNsYWltUGF0dGVybik7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlY2xhaW0gbGVhZiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBwYXR0ZXJuJyk7XG4gIH1cblxuICBjb25zdCBsb2NrVGltZSA9IGFzTnVtYmVyKG1hdGNoLmxvY2tUaW1lLCAncjpvbGRlciBhcmd1bWVudCcpO1xuICBpZiAobG9ja1RpbWUgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmVjbGFpbSBsb2NrVGltZSBtdXN0IGJlID4gMCwgZ290ICR7bG9ja1RpbWV9YCk7XG4gIH1cblxuICBjb25zdCBbdGhyZXNob2xkLCByZWNsYWltS2V5U3RyaW5nc10gPSBwYXJzZU11bHRpKG1hdGNoLnJlY2xhaW1NdWx0aSk7XG4gIGlmICh0aHJlc2hvbGQgIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlY2xhaW0gbXVsdGlfYSB0aHJlc2hvbGQgbXVzdCBiZSAyLCBnb3QgJHt0aHJlc2hvbGR9YCk7XG4gIH1cbiAgaWYgKHJlY2xhaW1LZXlTdHJpbmdzLmxlbmd0aCAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmVjbGFpbSBtdWx0aV9hIG11c3QgaGF2ZSBleGFjdGx5IDMga2V5cywgZ290ICR7cmVjbGFpbUtleVN0cmluZ3MubGVuZ3RofWApO1xuICB9XG5cbiAgcmV0dXJuIHsgbG9ja1RpbWUsIHJlY2xhaW1LZXlTdHJpbmdzIH07XG59XG5cbmNvbnN0IEhFWF9YX09OTFlfS0VZID0gL15bMC05YS1mQS1GXXs2NH0kLztcbmNvbnN0IFhQVUJfV0lUSF9JTkRFWCA9IC9eKFsxLTlBLUhKLU5QLVphLWttLXpdKylcXC8oXFxkKykkLztcblxuLyoqXG4gKiBSZXNvbHZlIGEgc2luZ2xlIGBtdWx0aV9hYCBrZXkgZW50cnkgdG8gYSAzMi1ieXRlIHgtb25seSBwdWJsaWMga2V5LlxuICpcbiAqIEFjY2VwdHM6XG4gKiAgIC0gNjQtaGV4LWNoYXIgc3RyaW5nIOKGkiByZXR1cm5lZCBhcy1pcyAoYWxyZWFkeSB4LW9ubHkpXG4gKiAgIC0gYHhwdWIuLi4vPGluZGV4PmAg4oaSIEJJUDMyLWRlcml2ZSBhdCB0aGF0IGluZGV4IGFuZCBkcm9wIHRoZSBwcmVmaXggYnl0ZVxuICpcbiAqIFJldHVybnMgbnVsbCBmb3IgYW55IG90aGVyIHNoYXBlIChlLmcuIHdpbGRjYXJkIGB4cHViLi4uLypgLCBtYWxmb3JtZWQgaW5wdXQpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVjbGFpbUtleShzOiBzdHJpbmcpOiBCdWZmZXIgfCBudWxsIHtcbiAgaWYgKEhFWF9YX09OTFlfS0VZLnRlc3QocykpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocywgJ2hleCcpO1xuICB9XG4gIGNvbnN0IG0gPSBzLm1hdGNoKFhQVUJfV0lUSF9JTkRFWCk7XG4gIGlmICghbSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IFssIHhwdWIsIGluZGV4U3RyXSA9IG07XG4gIGNvbnN0IGluZGV4ID0gTnVtYmVyLnBhcnNlSW50KGluZGV4U3RyLCAxMCk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGluZGV4KSB8fCBpbmRleCA8IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBsZXQgbm9kZTtcbiAgdHJ5IHtcbiAgICBub2RlID0gQklQMzIuZnJvbUJhc2U1OCh4cHViKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gQklQMzIgcHVibGljIGtleSBpcyAzMyBieXRlcyAoMSBwcmVmaXggKyAzMiB4LW9ubHkpLiBEcm9wIHRoZSBwcmVmaXguXG4gIHJldHVybiBCdWZmZXIuZnJvbShub2RlLmRlcml2ZShpbmRleCkucHVibGljS2V5LnN1YmFycmF5KDEpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHJlY2xhaW0tbGVhZiBrZXkgc3RyaW5ncyBpbnRvIDMyLWJ5dGUgeC1vbmx5IGJ1ZmZlcnMuIEFjY2VwdHMgYm90aFxuICogdGhlIGRlZmluaXRlL2Rlcml2ZWQgZm9ybSAoY29uY3JldGUgNjQtaGV4LWNoYXIgeC1vbmx5IGtleXMpIGFuZCB0aGUgZm9ybVxuICogcHJvZHVjZWQgYnkgYERlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgobilgIChgeHB1Yi4uLi88bj5gKS4gUmV0dXJuc1xuICogdW5kZWZpbmVkIGlmIGFueSBlbnRyeSBpcyBzdGlsbCB3aWxkY2FyZCAoYHhwdWIuLi4vKmApIG9yIG90aGVyd2lzZVxuICogdW5yZXNvbHZhYmxlLlxuICovXG5mdW5jdGlvbiByZWNsYWltS2V5c0Zyb21TdHJpbmdzKGtleVN0cmluZ3M6IHN0cmluZ1tdKTogW0J1ZmZlciwgQnVmZmVyLCBCdWZmZXJdIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBrZXlTdHJpbmdzLm1hcChyZXNvbHZlUmVjbGFpbUtleSk7XG4gIGlmIChyZXNvbHZlZC5zb21lKChiKSA9PiBiID09PSBudWxsKSB8fCByZXNvbHZlZC5sZW5ndGggIT09IDMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBbcmVzb2x2ZWRbMF0gYXMgQnVmZmVyLCByZXNvbHZlZFsxXSBhcyBCdWZmZXIsIHJlc29sdmVkWzJdIGFzIEJ1ZmZlcl07XG59XG5cbi8qKlxuICogUGFyc2UgYW4gc0JUQyBwZWctaW4gZGVwb3NpdCBkZXNjcmlwdG9yIGFuZCByZXR1cm4gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgdGhlIGRlc2NyaXB0b3IgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkXG4gKiBgdHIoPFVOU1BFTkRBQkxFPiwgezxkZXBvc2l0TGVhZj4sIDxyZWNsYWltTGVhZj59KWAgc2hhcGUg4oCUIHNhbWUgY29udmVudGlvblxuICogYXMgYmFieWxvbidzIGBwYXJzZVN0YWtpbmdEZXNjcmlwdG9yYC4gVGhyb3dzIGlmIHRoZSBzaGFwZSBtYXRjaGVzIGJ1dCBhXG4gKiBzdWItZmllbGQgaXMgbWFsZm9ybWVkIChlLmcuIHNpZ25lcnMga2V5IGlzbid0IDMyIGJ5dGVzLCBwYXlsb2FkIGlzbid0IDMwXG4gKiBieXRlcywgdGhyZXNob2xkIGlzbid0IDIpLlxuICpcbiAqIEFjY2VwdHMgYm90aCB0aGUgYERlc2NyaXB0b3JgIFdBU00gb2JqZWN0IChkZWZpbml0ZSBvciBkZXJpdmFibGUpIGFuZCBhXG4gKiBwcmUtZXh0cmFjdGVkIGBhc3QuRGVzY3JpcHRvck5vZGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcihcbiAgZGVzY3JpcHRvcjogRGVzY3JpcHRvciB8IGFzdC5EZXNjcmlwdG9yTm9kZVxuKTogUGFyc2VkU2J0Y0RlcG9zaXREZXNjcmlwdG9yIHwgbnVsbCB7XG4gIGNvbnN0IHBhdHRlcm46IFBhdHRlcm4gPSB7XG4gICAgdHI6IFtVTlNQRU5EQUJMRV9JTlRFUk5BTF9LRVksIFt7ICR2YXI6ICdkZXBvc2l0TGVhZicgfSwgeyAkdmFyOiAncmVjbGFpbUxlYWYnIH1dXSxcbiAgfTtcblxuICBjb25zdCBtYXRjaGVyID0gbmV3IFBhdHRlcm5NYXRjaGVyKCk7XG4gIGNvbnN0IGRlc2NyaXB0b3JOb2RlID0gZGVzY3JpcHRvciBpbnN0YW5jZW9mIERlc2NyaXB0b3IgPyBhc3QuZnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvcikgOiBkZXNjcmlwdG9yO1xuICBjb25zdCByZXN1bHQgPSBtYXRjaGVyLm1hdGNoKGRlc2NyaXB0b3JOb2RlLCBwYXR0ZXJuKTtcblxuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGVwb3NpdE1pbmlzY3JpcHROb2RlID0gcmVzdWx0LmRlcG9zaXRMZWFmIGFzIGFzdC5NaW5pc2NyaXB0Tm9kZTtcbiAgbGV0IHJlY2xhaW1NaW5pc2NyaXB0Tm9kZSA9IHJlc3VsdC5yZWNsYWltTGVhZiBhcyBhc3QuTWluaXNjcmlwdE5vZGU7XG5cbiAgY29uc3QgeyBzaWduZXJzQWdncmVnYXRlS2V5LCBtYXhGZWUsIHN0YWNrc1JlY2lwaWVudCB9ID0gcGFyc2VEZXBvc2l0TGVhZihkZXBvc2l0TWluaXNjcmlwdE5vZGUsIG1hdGNoZXIpO1xuICBjb25zdCB7IGxvY2tUaW1lLCByZWNsYWltS2V5U3RyaW5ncyB9ID0gcGFyc2VSZWNsYWltTGVhZihyZWNsYWltTWluaXNjcmlwdE5vZGUsIG1hdGNoZXIpO1xuICBjb25zdCByZWNsYWltS2V5U3RyaW5nc1R1cGxlOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10gPSBbXG4gICAgcmVjbGFpbUtleVN0cmluZ3NbMF0sXG4gICAgcmVjbGFpbUtleVN0cmluZ3NbMV0sXG4gICAgcmVjbGFpbUtleVN0cmluZ3NbMl0sXG4gIF07XG5cbiAgY29uc3QgcmVjbGFpbUtleXMgPSByZWNsYWltS2V5c0Zyb21TdHJpbmdzKHJlY2xhaW1LZXlTdHJpbmdzKTtcbiAgaWYgKHJlY2xhaW1LZXlzKSB7XG4gICAgLy8gUmV3cml0ZSB0aGUgcmVjbGFpbSBsZWFmIHdpdGggY29uY3JldGUgaGV4IGtleXMgd2hlbiB3ZSBjYW4gcmVzb2x2ZVxuICAgIC8vIHRoZW0g4oCUIGBNaW5pc2NyaXB0LmZyb21TdHJpbmcoLi4uLCAndGFwJylgIG9ubHkgYWNjZXB0cyB4LW9ubHkgaGV4IGluXG4gICAgLy8gYG11bHRpX2FgLCBub3QgeHB1Yi1mb3JtIHN0cmluZ3MuIFdpdGggdGhpcyByZXdyaXRlIHRoZSBmb3JtYXR0ZWRcbiAgICAvLyBsZWFmIGlzIGRpcmVjdGx5IGNvbXBpbGFibGU7IHdpdGhvdXQgaXQgY2FsbGVycyBtdXN0IGRvIHRoZVxuICAgIC8vIHJlc29sdXRpb24gdGhlbXNlbHZlcy5cbiAgICByZWNsYWltTWluaXNjcmlwdE5vZGUgPSB7XG4gICAgICBhbmRfdjogW3sgJ3I6b2xkZXInOiBsb2NrVGltZSB9LCB7IG11bHRpX2E6IFsyLCAuLi5yZWNsYWltS2V5cy5tYXAoKGspID0+IGsudG9TdHJpbmcoJ2hleCcpKV0gfV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2lnbmVyc0FnZ3JlZ2F0ZUtleSxcbiAgICBtYXhGZWUsXG4gICAgc3RhY2tzUmVjaXBpZW50LFxuICAgIGxvY2tUaW1lLFxuICAgIHJlY2xhaW1LZXlzLFxuICAgIHJlY2xhaW1LZXlTdHJpbmdzOiByZWNsYWltS2V5U3RyaW5nc1R1cGxlLFxuICAgIGRlcG9zaXRNaW5pc2NyaXB0Tm9kZSxcbiAgICByZWNsYWltTWluaXNjcmlwdE5vZGUsXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../../../test/unit/pox5/descriptor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const crypto_1 = require("crypto");
|
|
38
|
+
const bitcoin_staking_1 = require("@stacks/bitcoin-staking");
|
|
39
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
40
|
+
const testutils_1 = require("@bitgo/wasm-utxo/testutils");
|
|
41
|
+
const pox5_1 = require("../../../src/pox5");
|
|
42
|
+
const OPCODES = {
|
|
43
|
+
OP_0: 0x00,
|
|
44
|
+
OP_IF: 0x63,
|
|
45
|
+
OP_ELSE: 0x67,
|
|
46
|
+
OP_ENDIF: 0x68,
|
|
47
|
+
OP_VERIFY: 0x69,
|
|
48
|
+
OP_SIZE: 0x82,
|
|
49
|
+
OP_EQUAL: 0x87,
|
|
50
|
+
OP_EQUALVERIFY: 0x88,
|
|
51
|
+
OP_SHA256: 0xa8,
|
|
52
|
+
OP_CHECKSIG: 0xac,
|
|
53
|
+
OP_CHECKMULTISIG: 0xae,
|
|
54
|
+
OP_CLTV: 0xb1,
|
|
55
|
+
};
|
|
56
|
+
function getBip32Triple() {
|
|
57
|
+
const [user, backup, bitgo] = (0, testutils_1.getKeyTriple)('default');
|
|
58
|
+
return [user, backup, bitgo];
|
|
59
|
+
}
|
|
60
|
+
function sha256(value) {
|
|
61
|
+
return (0, crypto_1.createHash)('sha256').update(value).digest();
|
|
62
|
+
}
|
|
63
|
+
function params(overrides = {}) {
|
|
64
|
+
const stakerKeys = getBip32Triple();
|
|
65
|
+
const earlyExitKey = Buffer.from(stakerKeys[0].derive(9).publicKey);
|
|
66
|
+
return {
|
|
67
|
+
unlockHeight: 840000,
|
|
68
|
+
stakerCommitment: sha256((0, bitcoin_staking_1.computeRegisterPreimage)('SP000000000000000000002Q6VF78')),
|
|
69
|
+
earlyExitKey,
|
|
70
|
+
stakerKeys,
|
|
71
|
+
...overrides,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function asmToScript(asm) {
|
|
75
|
+
const tokens = asm.split(' ');
|
|
76
|
+
const chunks = [];
|
|
77
|
+
for (let index = 0; index < tokens.length; index++) {
|
|
78
|
+
const token = tokens[index];
|
|
79
|
+
const push = token.match(/^OP_PUSHBYTES_(\d+)$/);
|
|
80
|
+
if (push) {
|
|
81
|
+
const bytes = Buffer.from(tokens[++index], 'hex');
|
|
82
|
+
assert.strictEqual(bytes.length, Number(push[1]));
|
|
83
|
+
chunks.push(Buffer.of(bytes.length), bytes);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const number = token.match(/^OP_PUSHNUM_(\d+)$/);
|
|
87
|
+
if (number) {
|
|
88
|
+
chunks.push(Buffer.of(0x50 + Number(number[1])));
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const opcode = OPCODES[token];
|
|
92
|
+
assert.notStrictEqual(opcode, undefined, `unsupported ASM token ${token}`);
|
|
93
|
+
chunks.push(Buffer.of(opcode));
|
|
94
|
+
}
|
|
95
|
+
return Buffer.concat(chunks);
|
|
96
|
+
}
|
|
97
|
+
function encodeTwoOfThreeUnlock(keys) {
|
|
98
|
+
return Buffer.concat([Buffer.of(0x52), ...keys.flatMap((key) => [Buffer.of(33), key]), Buffer.of(0x53, 0xae)]);
|
|
99
|
+
}
|
|
100
|
+
describe('PoX-5 lockup descriptors', function () {
|
|
101
|
+
it('renders the required byte-identical canonical script and P2WSH output', function () {
|
|
102
|
+
const derivable = params();
|
|
103
|
+
const stakerKeys = (0, pox5_1.derivePox5StakerKeys)(derivable.stakerKeys, 0);
|
|
104
|
+
const definite = { ...derivable, stakerKeys };
|
|
105
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(definite);
|
|
106
|
+
const localWitnessScript = asmToScript(descriptor.toAsmString());
|
|
107
|
+
const unlockBytes = encodeTwoOfThreeUnlock(stakerKeys);
|
|
108
|
+
const earlyUnlockBytes = (0, bitcoin_staking_1.buildUnlockScript)(definite.earlyExitKey);
|
|
109
|
+
const sdkWitnessScript = Buffer.from((0, bitcoin_staking_1.buildLockScript)({
|
|
110
|
+
stxAddress: 'SP000000000000000000002Q6VF78',
|
|
111
|
+
unlockHeight: definite.unlockHeight,
|
|
112
|
+
unlockBytes,
|
|
113
|
+
earlyUnlockBytes,
|
|
114
|
+
validateEarlyUnlockBytes: false,
|
|
115
|
+
}));
|
|
116
|
+
assert.deepStrictEqual(localWitnessScript, sdkWitnessScript);
|
|
117
|
+
assert.ok(descriptor.toAsmString().includes('OP_SHA256 OP_PUSHBYTES_32'));
|
|
118
|
+
assert.ok(descriptor.toAsmString().includes('OP_EQUALVERIFY OP_PUSHBYTES_33'));
|
|
119
|
+
const localScriptPubKey = (0, pox5_1.createPox5LockupScriptPubKey)(definite);
|
|
120
|
+
const sdkScriptPubKey = Buffer.from((0, bitcoin_staking_1.buildLockOutputScript)({
|
|
121
|
+
stxAddress: 'SP000000000000000000002Q6VF78',
|
|
122
|
+
unlockHeight: definite.unlockHeight,
|
|
123
|
+
unlockBytes,
|
|
124
|
+
earlyUnlockBytes,
|
|
125
|
+
}));
|
|
126
|
+
assert.deepStrictEqual(localScriptPubKey, sdkScriptPubKey);
|
|
127
|
+
assert.strictEqual(wasm_utxo_1.address.fromOutputScriptWithCoin(localScriptPubKey, 'btc'), (0, bitcoin_staking_1.buildLockAddress)({
|
|
128
|
+
stxAddress: 'SP000000000000000000002Q6VF78',
|
|
129
|
+
unlockHeight: definite.unlockHeight,
|
|
130
|
+
unlockBytes,
|
|
131
|
+
earlyUnlockBytes,
|
|
132
|
+
network: 'mainnet',
|
|
133
|
+
validateEarlyUnlockBytes: false,
|
|
134
|
+
}));
|
|
135
|
+
});
|
|
136
|
+
it('supports derivation and preserves wildcard keys until an index is selected', function () {
|
|
137
|
+
const value = params();
|
|
138
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(value);
|
|
139
|
+
const wildcard = (0, pox5_1.parsePox5LockupDescriptor)(descriptor);
|
|
140
|
+
const derived = (0, pox5_1.parsePox5LockupDescriptor)(descriptor.atDerivationIndex(4));
|
|
141
|
+
assert.ok(wildcard);
|
|
142
|
+
assert.strictEqual(wildcard.stakerKeys, undefined);
|
|
143
|
+
assert.ok(wildcard.stakerKeyStrings.every((key) => key.endsWith('/*')));
|
|
144
|
+
assert.ok(derived?.stakerKeys);
|
|
145
|
+
assert.deepStrictEqual(derived?.stakerKeys, (0, pox5_1.derivePox5StakerKeys)(value.stakerKeys, 4));
|
|
146
|
+
});
|
|
147
|
+
it('rejects noncanonical parameter values and descriptor templates', function () {
|
|
148
|
+
assert.throws(() => (0, pox5_1.createPox5LockupDescriptor)(params({ unlockHeight: 0 })));
|
|
149
|
+
assert.throws(() => (0, pox5_1.createPox5LockupDescriptor)(params({ unlockHeight: 500000000 })));
|
|
150
|
+
assert.throws(() => (0, pox5_1.createPox5LockupDescriptor)(params({ stakerCommitment: Buffer.alloc(31) })));
|
|
151
|
+
assert.throws(() => (0, pox5_1.createPox5LockupDescriptor)(params({ earlyExitKey: Buffer.alloc(32) })));
|
|
152
|
+
assert.throws(() => (0, pox5_1.createPox5LockupDescriptor)(params({ stakerKeys: [getBip32Triple()[0], Buffer.alloc(33, 2), Buffer.alloc(33, 2)] })));
|
|
153
|
+
const validKey = params().earlyExitKey.toString('hex');
|
|
154
|
+
assert.strictEqual((0, pox5_1.parsePox5LockupDescriptor)(wasm_utxo_1.Descriptor.fromString(`wsh(pk(${validKey}))`, 'definite')), undefined);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9wb3g1L2Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbUNBQW9DO0FBRXBDLDZEQU1pQztBQUNqQyxnREFBOEQ7QUFDOUQsMERBQTBEO0FBRTFELDRDQU0yQjtBQUkzQixNQUFNLE9BQU8sR0FBMkI7SUFDdEMsSUFBSSxFQUFFLElBQUk7SUFDVixLQUFLLEVBQUUsSUFBSTtJQUNYLE9BQU8sRUFBRSxJQUFJO0lBQ2IsUUFBUSxFQUFFLElBQUk7SUFDZCxTQUFTLEVBQUUsSUFBSTtJQUNmLE9BQU8sRUFBRSxJQUFJO0lBQ2IsUUFBUSxFQUFFLElBQUk7SUFDZCxjQUFjLEVBQUUsSUFBSTtJQUNwQixTQUFTLEVBQUUsSUFBSTtJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsT0FBTyxFQUFFLElBQUk7Q0FDZCxDQUFDO0FBRUYsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUEsd0JBQVksRUFBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUMsS0FBaUI7SUFDL0IsT0FBTyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxZQUFpRCxFQUFFO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJ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QVUsUUFBUSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0SCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHtcbiAgYnVpbGRMb2NrQWRkcmVzcyxcbiAgYnVpbGRMb2NrT3V0cHV0U2NyaXB0LFxuICBidWlsZExvY2tTY3JpcHQsXG4gIGJ1aWxkVW5sb2NrU2NyaXB0LFxuICBjb21wdXRlUmVnaXN0ZXJQcmVpbWFnZSxcbn0gZnJvbSAnQHN0YWNrcy9iaXRjb2luLXN0YWtpbmcnO1xuaW1wb3J0IHsgYWRkcmVzcywgYmlwMzIsIERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IGdldEtleVRyaXBsZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8vdGVzdHV0aWxzJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3IsXG4gIGNyZWF0ZVBveDVMb2NrdXBTY3JpcHRQdWJLZXksXG4gIGRlcml2ZVBveDVTdGFrZXJLZXlzLFxuICBwYXJzZVBveDVMb2NrdXBEZXNjcmlwdG9yLFxuICBQb3g1TG9ja3VwRGVzY3JpcHRvclBhcmFtcyxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL3BveDUnO1xuXG50eXBlIEJJUDMySW50ZXJmYWNlID0gYmlwMzIuQklQMzJJbnRlcmZhY2U7XG5cbmNvbnN0IE9QQ09ERVM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gIE9QXzA6IDB4MDAsXG4gIE9QX0lGOiAweDYzLFxuICBPUF9FTFNFOiAweDY3LFxuICBPUF9FTkRJRjogMHg2OCxcbiAgT1BfVkVSSUZZOiAweDY5LFxuICBPUF9TSVpFOiAweDgyLFxuICBPUF9FUVVBTDogMHg4NyxcbiAgT1BfRVFVQUxWRVJJRlk6IDB4ODgsXG4gIE9QX1NIQTI1NjogMHhhOCxcbiAgT1BfQ0hFQ0tTSUc6IDB4YWMsXG4gIE9QX0NIRUNLTVVMVElTSUc6IDB4YWUsXG4gIE9QX0NMVFY6IDB4YjEsXG59O1xuXG5mdW5jdGlvbiBnZXRCaXAzMlRyaXBsZSgpOiBbQklQMzJJbnRlcmZhY2UsIEJJUDMySW50ZXJmYWNlLCBCSVAzMkludGVyZmFjZV0ge1xuICBjb25zdCBbdXNlciwgYmFja3VwLCBiaXRnb10gPSBnZXRLZXlUcmlwbGUoJ2RlZmF1bHQnKTtcbiAgcmV0dXJuIFt1c2VyLCBiYWNrdXAsIGJpdGdvXTtcbn1cblxuZnVuY3Rpb24gc2hhMjU2KHZhbHVlOiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCk7XG59XG5cbmZ1bmN0aW9uIHBhcmFtcyhvdmVycmlkZXM6IFBhcnRpYWw8UG94NUxvY2t1cERlc2NyaXB0b3JQYXJhbXM+ID0ge30pOiBQb3g1TG9ja3VwRGVzY3JpcHRvclBhcmFtcyB7XG4gIGNvbnN0IHN0YWtlcktleXMgPSBnZXRCaXAzMlRyaXBsZSgpO1xuICBjb25zdCBlYXJseUV4aXRLZXkgPSBCdWZmZXIuZnJvbShzdGFrZXJLZXlzWzBdLmRlcml2ZSg5KS5wdWJsaWNLZXkpO1xuICByZXR1cm4ge1xuICAgIHVubG9ja0hlaWdodDogODQwXzAwMCxcbiAgICBzdGFrZXJDb21taXRtZW50OiBzaGEyNTYoY29tcHV0ZVJlZ2lzdGVyUHJlaW1hZ2UoJ1NQMDAwMDAwMDAwMDAwMDAwMDAwMDAyUTZWRjc4JykpLFxuICAgIGVhcmx5RXhpdEtleSxcbiAgICBzdGFrZXJLZXlzLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNtVG9TY3JpcHQoYXNtOiBzdHJpbmcpOiBCdWZmZXIge1xuICBjb25zdCB0b2tlbnMgPSBhc20uc3BsaXQoJyAnKTtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9rZW5zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2luZGV4XTtcbiAgICBjb25zdCBwdXNoID0gdG9rZW4ubWF0Y2goL15PUF9QVVNIQllURVNfKFxcZCspJC8pO1xuICAgIGlmIChwdXNoKSB7XG4gICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5mcm9tKHRva2Vuc1srK2luZGV4XSwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVzLmxlbmd0aCwgTnVtYmVyKHB1c2hbMV0pKTtcbiAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5vZihieXRlcy5sZW5ndGgpLCBieXRlcyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbnVtYmVyID0gdG9rZW4ubWF0Y2goL15PUF9QVVNITlVNXyhcXGQrKSQvKTtcbiAgICBpZiAobnVtYmVyKSB7XG4gICAgICBjaHVua3MucHVzaChCdWZmZXIub2YoMHg1MCArIE51bWJlcihudW1iZXJbMV0pKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgb3Bjb2RlID0gT1BDT0RFU1t0b2tlbl07XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKG9wY29kZSwgdW5kZWZpbmVkLCBgdW5zdXBwb3J0ZWQgQVNNIHRva2VuICR7dG9rZW59YCk7XG4gICAgY2h1bmtzLnB1c2goQnVmZmVyLm9mKG9wY29kZSkpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbmZ1bmN0aW9uIGVuY29kZVR3b09mVGhyZWVVbmxvY2soa2V5czogW0J1ZmZlciwgQnVmZmVyLCBCdWZmZXJdKTogQnVmZmVyIHtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5vZigweDUyKSwgLi4ua2V5cy5mbGF0TWFwKChrZXkpID0+IFtCdWZmZXIub2YoMzMpLCBrZXldKSwgQnVmZmVyLm9mKDB4NTMsIDB4YWUpXSk7XG59XG5cbmRlc2NyaWJlKCdQb1gtNSBsb2NrdXAgZGVzY3JpcHRvcnMnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdyZW5kZXJzIHRoZSByZXF1aXJlZCBieXRlLWlkZW50aWNhbCBjYW5vbmljYWwgc2NyaXB0IGFuZCBQMldTSCBvdXRwdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZGVyaXZhYmxlID0gcGFyYW1zKCk7XG4gICAgY29uc3Qgc3Rha2VyS2V5cyA9IGRlcml2ZVBveDVTdGFrZXJLZXlzKFxuICAgICAgZGVyaXZhYmxlLnN0YWtlcktleXMgYXMgW0JJUDMySW50ZXJmYWNlLCBCSVAzMkludGVyZmFjZSwgQklQMzJJbnRlcmZhY2VdLFxuICAgICAgMFxuICAgICk7XG4gICAgY29uc3QgZGVmaW5pdGUgPSB7IC4uLmRlcml2YWJsZSwgc3Rha2VyS2V5cyB9O1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjcmVhdGVQb3g1TG9ja3VwRGVzY3JpcHRvcihkZWZpbml0ZSk7XG4gICAgY29uc3QgbG9jYWxXaXRuZXNzU2NyaXB0ID0gYXNtVG9TY3JpcHQoZGVzY3JpcHRvci50b0FzbVN0cmluZygpKTtcbiAgICBjb25zdCB1bmxvY2tCeXRlcyA9IGVuY29kZVR3b09mVGhyZWVVbmxvY2soc3Rha2VyS2V5cyk7XG4gICAgY29uc3QgZWFybHlVbmxvY2tCeXRlcyA9IGJ1aWxkVW5sb2NrU2NyaXB0KGRlZmluaXRlLmVhcmx5RXhpdEtleSk7XG4gICAgY29uc3Qgc2RrV2l0bmVzc1NjcmlwdCA9IEJ1ZmZlci5mcm9tKFxuICAgICAgYnVpbGRMb2NrU2NyaXB0KHtcbiAgICAgICAgc3R4QWRkcmVzczogJ1NQMDAwMDAwMDAwMDAwMDAwMDAwMDAyUTZWRjc4JyxcbiAgICAgICAgdW5sb2NrSGVpZ2h0OiBkZWZpbml0ZS51bmxvY2tIZWlnaHQsXG4gICAgICAgIHVubG9ja0J5dGVzLFxuICAgICAgICBlYXJseVVubG9ja0J5dGVzLFxuICAgICAgICB2YWxpZGF0ZUVhcmx5VW5sb2NrQnl0ZXM6IGZhbHNlLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChsb2NhbFdpdG5lc3NTY3JpcHQsIHNka1dpdG5lc3NTY3JpcHQpO1xuICAgIGFzc2VydC5vayhkZXNjcmlwdG9yLnRvQXNtU3RyaW5nKCkuaW5jbHVkZXMoJ09QX1NIQTI1NiBPUF9QVVNIQllURVNfMzInKSk7XG4gICAgYXNzZXJ0Lm9rKGRlc2NyaXB0b3IudG9Bc21TdHJpbmcoKS5pbmNsdWRlcygnT1BfRVFVQUxWRVJJRlkgT1BfUFVTSEJZVEVTXzMzJykpO1xuXG4gICAgY29uc3QgbG9jYWxTY3JpcHRQdWJLZXkgPSBjcmVhdGVQb3g1TG9ja3VwU2NyaXB0UHViS2V5KGRlZmluaXRlKTtcbiAgICBjb25zdCBzZGtTY3JpcHRQdWJLZXkgPSBCdWZmZXIuZnJvbShcbiAgICAgIGJ1aWxkTG9ja091dHB1dFNjcmlwdCh7XG4gICAgICAgIHN0eEFkZHJlc3M6ICdTUDAwMDAwMDAwMDAwMDAwMDAwMDAwMlE2VkY3OCcsXG4gICAgICAgIHVubG9ja0hlaWdodDogZGVmaW5pdGUudW5sb2NrSGVpZ2h0LFxuICAgICAgICB1bmxvY2tCeXRlcyxcbiAgICAgICAgZWFybHlVbmxvY2tCeXRlcyxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGxvY2FsU2NyaXB0UHViS2V5LCBzZGtTY3JpcHRQdWJLZXkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKGxvY2FsU2NyaXB0UHViS2V5LCAnYnRjJyksXG4gICAgICBidWlsZExvY2tBZGRyZXNzKHtcbiAgICAgICAgc3R4QWRkcmVzczogJ1NQMDAwMDAwMDAwMDAwMDAwMDAwMDAyUTZWRjc4JyxcbiAgICAgICAgdW5sb2NrSGVpZ2h0OiBkZWZpbml0ZS51bmxvY2tIZWlnaHQsXG4gICAgICAgIHVubG9ja0J5dGVzLFxuICAgICAgICBlYXJseVVubG9ja0J5dGVzLFxuICAgICAgICBuZXR3b3JrOiAnbWFpbm5ldCcsXG4gICAgICAgIHZhbGlkYXRlRWFybHlVbmxvY2tCeXRlczogZmFsc2UsXG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzdXBwb3J0cyBkZXJpdmF0aW9uIGFuZCBwcmVzZXJ2ZXMgd2lsZGNhcmQga2V5cyB1bnRpbCBhbiBpbmRleCBpcyBzZWxlY3RlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtcygpO1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjcmVhdGVQb3g1TG9ja3VwRGVzY3JpcHRvcih2YWx1ZSk7XG4gICAgY29uc3Qgd2lsZGNhcmQgPSBwYXJzZVBveDVMb2NrdXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgIGNvbnN0IGRlcml2ZWQgPSBwYXJzZVBveDVMb2NrdXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgoNCkpO1xuXG4gICAgYXNzZXJ0Lm9rKHdpbGRjYXJkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwod2lsZGNhcmQuc3Rha2VyS2V5cywgdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQub2sod2lsZGNhcmQuc3Rha2VyS2V5U3RyaW5ncy5ldmVyeSgoa2V5KSA9PiBrZXkuZW5kc1dpdGgoJy8qJykpKTtcbiAgICBhc3NlcnQub2soZGVyaXZlZD8uc3Rha2VyS2V5cyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgIGRlcml2ZWQ/LnN0YWtlcktleXMsXG4gICAgICBkZXJpdmVQb3g1U3Rha2VyS2V5cyh2YWx1ZS5zdGFrZXJLZXlzIGFzIFtCSVAzMkludGVyZmFjZSwgQklQMzJJbnRlcmZhY2UsIEJJUDMySW50ZXJmYWNlXSwgNClcbiAgICApO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBub25jYW5vbmljYWwgcGFyYW1ldGVyIHZhbHVlcyBhbmQgZGVzY3JpcHRvciB0ZW1wbGF0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBjcmVhdGVQb3g1TG9ja3VwRGVzY3JpcHRvcihwYXJhbXMoeyB1bmxvY2tIZWlnaHQ6IDAgfSkpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yKHBhcmFtcyh7IHVubG9ja0hlaWdodDogNTAwXzAwMF8wMDAgfSkpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yKHBhcmFtcyh7IHN0YWtlckNvbW1pdG1lbnQ6IEJ1ZmZlci5hbGxvYygzMSkgfSkpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yKHBhcmFtcyh7IGVhcmx5RXhpdEtleTogQnVmZmVyLmFsbG9jKDMyKSB9KSkpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT5cbiAgICAgIGNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yKFxuICAgICAgICBwYXJhbXMoeyBzdGFrZXJLZXlzOiBbZ2V0QmlwMzJUcmlwbGUoKVswXSwgQnVmZmVyLmFsbG9jKDMzLCAyKSwgQnVmZmVyLmFsbG9jKDMzLCAyKV0gfSlcbiAgICAgIClcbiAgICApO1xuICAgIGNvbnN0IHZhbGlkS2V5ID0gcGFyYW1zKCkuZWFybHlFeGl0S2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VQb3g1TG9ja3VwRGVzY3JpcHRvcihEZXNjcmlwdG9yLmZyb21TdHJpbmcoYHdzaChwaygke3ZhbGlkS2V5fSkpYCwgJ2RlZmluaXRlJykpLCB1bmRlZmluZWQpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../../test/unit/pox5/input.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const crypto_1 = require("crypto");
|
|
38
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
39
|
+
const testutils_1 = require("@bitgo/wasm-utxo/testutils");
|
|
40
|
+
const pox5_1 = require("../../../src/pox5");
|
|
41
|
+
const UNLOCK_HEIGHT = 840000;
|
|
42
|
+
function sha256(value) {
|
|
43
|
+
return (0, crypto_1.createHash)('sha256').update(value).digest();
|
|
44
|
+
}
|
|
45
|
+
function getParams() {
|
|
46
|
+
const stakerKeys = (0, testutils_1.getKeyTriple)('utxo-descriptors-pox5');
|
|
47
|
+
return {
|
|
48
|
+
unlockHeight: UNLOCK_HEIGHT,
|
|
49
|
+
stakerCommitment: sha256(Buffer.alloc(32, 0x42)),
|
|
50
|
+
earlyExitKey: Buffer.from(stakerKeys[0].derive(9).publicKey),
|
|
51
|
+
stakerKeys,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function createInputPsbt(descriptor) {
|
|
55
|
+
return wasm_utxo_1.descriptorWallet.createPsbt({ version: 2, locktime: 0 }, [
|
|
56
|
+
{
|
|
57
|
+
hash: '01'.repeat(32),
|
|
58
|
+
index: 0,
|
|
59
|
+
witnessUtxo: { script: descriptor.scriptPubkey(), value: 100000n },
|
|
60
|
+
descriptor,
|
|
61
|
+
},
|
|
62
|
+
], []);
|
|
63
|
+
}
|
|
64
|
+
describe('PoX-5 input resolution', function () {
|
|
65
|
+
it('matches a definite descriptor without derivation metadata', function () {
|
|
66
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)({
|
|
67
|
+
...getParams(),
|
|
68
|
+
stakerKeys: (0, pox5_1.derivePox5StakerKeys)(getParams().stakerKeys, 0),
|
|
69
|
+
});
|
|
70
|
+
const psbt = wasm_utxo_1.Psbt.create(2, 0);
|
|
71
|
+
psbt.addInput('01'.repeat(32), 0, 100000n, descriptor.scriptPubkey());
|
|
72
|
+
const match = (0, pox5_1.matchPox5Input)(psbt, 0, new Map([['lockup', descriptor]]));
|
|
73
|
+
assert.ok(match);
|
|
74
|
+
assert.strictEqual(match.index, undefined);
|
|
75
|
+
assert.strictEqual(match.descriptor.toString(), descriptor.toString());
|
|
76
|
+
assert.deepStrictEqual(match.info.stakerKeys, (0, pox5_1.derivePox5StakerKeys)(getParams().stakerKeys, 0));
|
|
77
|
+
});
|
|
78
|
+
it('matches a derived descriptor while ignoring foreign root derivations', function () {
|
|
79
|
+
const params = getParams();
|
|
80
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(params);
|
|
81
|
+
const concreteDescriptor = descriptor.atDerivationIndex(4);
|
|
82
|
+
const psbt = createInputPsbt(concreteDescriptor);
|
|
83
|
+
const match = (0, pox5_1.matchPox5Input)(psbt, 0, new Map([['lockup', descriptor]]));
|
|
84
|
+
assert.ok(match);
|
|
85
|
+
assert.strictEqual(match.index, 4);
|
|
86
|
+
assert.strictEqual(match.descriptor.toString(), concreteDescriptor.toString());
|
|
87
|
+
assert.deepStrictEqual(match.info.stakerKeys, (0, pox5_1.derivePox5StakerKeys)(params.stakerKeys, 4));
|
|
88
|
+
assert.ok(psbt.getInputs()[0]?.bip32Derivation.some((derivation) => derivation.path === ''));
|
|
89
|
+
});
|
|
90
|
+
it('returns no match when the input has no usable derivation metadata', function () {
|
|
91
|
+
const params = getParams();
|
|
92
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(params);
|
|
93
|
+
const concreteDescriptor = descriptor.atDerivationIndex(4);
|
|
94
|
+
const input = {
|
|
95
|
+
witnessUtxo: { script: concreteDescriptor.scriptPubkey(), value: 100000n },
|
|
96
|
+
bip32Derivation: [],
|
|
97
|
+
tapBip32Derivation: [],
|
|
98
|
+
};
|
|
99
|
+
assert.strictEqual((0, pox5_1.findPox5DescriptorForInput)(input, new Map([['lockup', descriptor]])), undefined);
|
|
100
|
+
});
|
|
101
|
+
it('returns no match for a noncanonical descriptor', function () {
|
|
102
|
+
const params = getParams();
|
|
103
|
+
const pox5Descriptor = (0, pox5_1.createPox5LockupDescriptor)(params);
|
|
104
|
+
const psbt = wasm_utxo_1.Psbt.create(2, 0);
|
|
105
|
+
psbt.addInput('01'.repeat(32), 0, 100000n, pox5Descriptor.atDerivationIndex(0).scriptPubkey());
|
|
106
|
+
const nonPox5Descriptor = (0, pox5_1.createPox5LockupDescriptor)({
|
|
107
|
+
...params,
|
|
108
|
+
unlockHeight: UNLOCK_HEIGHT + 1,
|
|
109
|
+
}).atDerivationIndex(0);
|
|
110
|
+
assert.strictEqual((0, pox5_1.matchPox5Input)(psbt, 0, new Map([['other', nonPox5Descriptor]])), undefined);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcG94NS9pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxtQ0FBb0M7QUFFcEMsZ0RBQWlFO0FBQ2pFLDBEQUEwRDtBQUUxRCw0Q0FNMkI7QUFFM0IsTUFBTSxhQUFhLEdBQUcsTUFBTyxDQUFDO0FBTTlCLFNBQVMsTUFBTSxDQUFDLEtBQWlCO0lBQy9CLE9BQU8sSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxTQUFTO0lBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQUEsd0JBQVksRUFBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3pELE9BQU87UUFDTCxZQUFZLEVBQUUsYUFBYTtRQUMzQixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUQsVUFBVTtLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsVUFBeUQ7SUFDaEYsT0FBTyw0QkFBZ0IsQ0FBQyxVQUFVLENBQ2hDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQzNCO1FBQ0U7WUFDRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckIsS0FBSyxFQUFFLENBQUM7WUFDUixXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLFlBQVks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QUFjLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7IGJpcDMyLCBkZXNjcmlwdG9yV2FsbGV0LCBQc2J0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvL3Rlc3R1dGlscyc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yLFxuICBkZXJpdmVQb3g1U3Rha2VyS2V5cyxcbiAgZmluZFBveDVEZXNjcmlwdG9yRm9ySW5wdXQsXG4gIG1hdGNoUG94NUlucHV0LFxuICBQb3g1TG9ja3VwRGVzY3JpcHRvclBhcmFtcyxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL3BveDUnO1xuXG5jb25zdCBVTkxPQ0tfSEVJR0hUID0gODQwXzAwMDtcbnR5cGUgQklQMzJJbnRlcmZhY2UgPSBiaXAzMi5CSVAzMkludGVyZmFjZTtcbnR5cGUgUG94NUJpcDMyUGFyYW1zID0gT21pdDxQb3g1TG9ja3VwRGVzY3JpcHRvclBhcmFtcywgJ3N0YWtlcktleXMnPiAmIHtcbiAgc3Rha2VyS2V5czogW0JJUDMySW50ZXJmYWNlLCBCSVAzMkludGVyZmFjZSwgQklQMzJJbnRlcmZhY2VdO1xufTtcblxuZnVuY3Rpb24gc2hhMjU2KHZhbHVlOiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtcygpOiBQb3g1QmlwMzJQYXJhbXMge1xuICBjb25zdCBzdGFrZXJLZXlzID0gZ2V0S2V5VHJpcGxlKCd1dHhvLWRlc2NyaXB0b3JzLXBveDUnKTtcbiAgcmV0dXJuIHtcbiAgICB1bmxvY2tIZWlnaHQ6IFVOTE9DS19IRUlHSFQsXG4gICAgc3Rha2VyQ29tbWl0bWVudDogc2hhMjU2KEJ1ZmZlci5hbGxvYygzMiwgMHg0MikpLFxuICAgIGVhcmx5RXhpdEtleTogQnVmZmVyLmZyb20oc3Rha2VyS2V5c1swXS5kZXJpdmUoOSkucHVibGljS2V5KSxcbiAgICBzdGFrZXJLZXlzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzYnQoZGVzY3JpcHRvcjogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3I+KTogUHNidCB7XG4gIHJldHVybiBkZXNjcmlwdG9yV2FsbGV0LmNyZWF0ZVBzYnQoXG4gICAgeyB2ZXJzaW9uOiAyLCBsb2NrdGltZTogMCB9LFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAgaGFzaDogJzAxJy5yZXBlYXQoMzIpLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgd2l0bmVzc1V0eG86IHsgc2NyaXB0OiBkZXNjcmlwdG9yLnNjcmlwdFB1YmtleSgpLCB2YWx1ZTogMTAwXzAwMG4gfSxcbiAgICAgICAgZGVzY3JpcHRvcixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXVxuICApO1xufVxuXG5kZXNjcmliZSgnUG9YLTUgaW5wdXQgcmVzb2x1dGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ21hdGNoZXMgYSBkZWZpbml0ZSBkZXNjcmlwdG9yIHdpdGhvdXQgZGVyaXZhdGlvbiBtZXRhZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3Ioe1xuICAgICAgLi4uZ2V0UGFyYW1zKCksXG4gICAgICBzdGFrZXJLZXlzOiBkZXJpdmVQb3g1U3Rha2VyS2V5cyhnZXRQYXJhbXMoKS5zdGFrZXJLZXlzLCAwKSxcbiAgICB9KTtcbiAgICBjb25zdCBwc2J0ID0gUHNidC5jcmVhdGUoMiwgMCk7XG4gICAgcHNidC5hZGRJbnB1dCgnMDEnLnJlcGVhdCgzMiksIDAsIDEwMF8wMDBuLCBkZXNjcmlwdG9yLnNjcmlwdFB1YmtleSgpKTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUG94NUlucHV0KHBzYnQsIDAsIG5ldyBNYXAoW1snbG9ja3VwJywgZGVzY3JpcHRvcl1dKSk7XG5cbiAgICBhc3NlcnQub2sobWF0Y2gpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtYXRjaC5pbmRleCwgdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobWF0Y2guZGVzY3JpcHRvci50b1N0cmluZygpLCBkZXNjcmlwdG9yLnRvU3RyaW5nKCkpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwobWF0Y2guaW5mby5zdGFrZXJLZXlzLCBkZXJpdmVQb3g1U3Rha2VyS2V5cyhnZXRQYXJhbXMoKS5zdGFrZXJLZXlzLCAwKSk7XG4gIH0pO1xuXG4gIGl0KCdtYXRjaGVzIGEgZGVyaXZlZCBkZXNjcmlwdG9yIHdoaWxlIGlnbm9yaW5nIGZvcmVpZ24gcm9vdCBkZXJpdmF0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBnZXRQYXJhbXMoKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3IocGFyYW1zKTtcbiAgICBjb25zdCBjb25jcmV0ZURlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLmF0RGVyaXZhdGlvbkluZGV4KDQpO1xuICAgIGNvbnN0IHBzYnQgPSBjcmVhdGVJbnB1dFBzYnQoY29uY3JldGVEZXNjcmlwdG9yKTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUG94NUlucHV0KHBzYnQsIDAsIG5ldyBNYXAoW1snbG9ja3VwJywgZGVzY3JpcHRvcl1dKSk7XG5cbiAgICBhc3NlcnQub2sobWF0Y2gpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtYXRjaC5pbmRleCwgNCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1hdGNoLmRlc2NyaXB0b3IudG9TdHJpbmcoKSwgY29uY3JldGVEZXNjcmlwdG9yLnRvU3RyaW5nKCkpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwobWF0Y2guaW5mby5zdGFrZXJLZXlzLCBkZXJpdmVQb3g1U3Rha2VyS2V5cyhwYXJhbXMuc3Rha2VyS2V5cywgNCkpO1xuICAgIGFzc2VydC5vayhwc2J0LmdldElucHV0cygpWzBdPy5iaXAzMkRlcml2YXRpb24uc29tZSgoZGVyaXZhdGlvbikgPT4gZGVyaXZhdGlvbi5wYXRoID09PSAnJykpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBubyBtYXRjaCB3aGVuIHRoZSBpbnB1dCBoYXMgbm8gdXNhYmxlIGRlcml2YXRpb24gbWV0YWRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gZ2V0UGFyYW1zKCk7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yKHBhcmFtcyk7XG4gICAgY29uc3QgY29uY3JldGVEZXNjcmlwdG9yID0gZGVzY3JpcHRvci5hdERlcml2YXRpb25JbmRleCg0KTtcbiAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgIHdpdG5lc3NVdHhvOiB7IHNjcmlwdDogY29uY3JldGVEZXNjcmlwdG9yLnNjcmlwdFB1YmtleSgpLCB2YWx1ZTogMTAwXzAwMG4gfSxcbiAgICAgIGJpcDMyRGVyaXZhdGlvbjogW10sXG4gICAgICB0YXBCaXAzMkRlcml2YXRpb246IFtdLFxuICAgIH07XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZmluZFBveDVEZXNjcmlwdG9yRm9ySW5wdXQoaW5wdXQsIG5ldyBNYXAoW1snbG9ja3VwJywgZGVzY3JpcHRvcl1dKSksIHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIG5vIG1hdGNoIGZvciBhIG5vbmNhbm9uaWNhbCBkZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGdldFBhcmFtcygpO1xuICAgIGNvbnN0IHBveDVEZXNjcmlwdG9yID0gY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3IocGFyYW1zKTtcbiAgICBjb25zdCBwc2J0ID0gUHNidC5jcmVhdGUoMiwgMCk7XG4gICAgcHNidC5hZGRJbnB1dCgnMDEnLnJlcGVhdCgzMiksIDAsIDEwMF8wMDBuLCBwb3g1RGVzY3JpcHRvci5hdERlcml2YXRpb25JbmRleCgwKS5zY3JpcHRQdWJrZXkoKSk7XG4gICAgY29uc3Qgbm9uUG94NURlc2NyaXB0b3IgPSBjcmVhdGVQb3g1TG9ja3VwRGVzY3JpcHRvcih7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICB1bmxvY2tIZWlnaHQ6IFVOTE9DS19IRUlHSFQgKyAxLFxuICAgIH0pLmF0RGVyaXZhdGlvbkluZGV4KDApO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1hdGNoUG94NUlucHV0KHBzYnQsIDAsIG5ldyBNYXAoW1snb3RoZXInLCBub25Qb3g1RGVzY3JpcHRvcl1dKSksIHVuZGVmaW5lZCk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../test/unit/pox5/validation.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const crypto_1 = require("crypto");
|
|
38
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
39
|
+
const testutils_1 = require("@bitgo/wasm-utxo/testutils");
|
|
40
|
+
const pox5_1 = require("../../../src/pox5");
|
|
41
|
+
function sha256(value) {
|
|
42
|
+
return (0, crypto_1.createHash)('sha256').update(value).digest();
|
|
43
|
+
}
|
|
44
|
+
function getParams(stakerCommitment) {
|
|
45
|
+
const stakerKeys = (0, testutils_1.getKeyTriple)('utxo-descriptors-pox5-validation');
|
|
46
|
+
return {
|
|
47
|
+
unlockHeight: 840000,
|
|
48
|
+
stakerCommitment,
|
|
49
|
+
earlyExitKey: Buffer.from(stakerKeys[0].derive(9).publicKey),
|
|
50
|
+
stakerKeys: [
|
|
51
|
+
Buffer.from(stakerKeys[0].publicKey),
|
|
52
|
+
Buffer.from(stakerKeys[1].publicKey),
|
|
53
|
+
Buffer.from(stakerKeys[2].publicKey),
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function createPsbt() {
|
|
58
|
+
const psbt = wasm_utxo_1.Psbt.create(2, 0);
|
|
59
|
+
psbt.addInput('01'.repeat(32), 0, 100000n, new Uint8Array(34));
|
|
60
|
+
psbt.addOutput(new Uint8Array([0x6a]), 0n);
|
|
61
|
+
return psbt;
|
|
62
|
+
}
|
|
63
|
+
describe('PoX-5 principal preimage validation', function () {
|
|
64
|
+
it('extracts and validates the descriptor-committed SHA256 record', function () {
|
|
65
|
+
const preimage = Buffer.alloc(32, 0x42);
|
|
66
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(getParams(sha256(preimage)));
|
|
67
|
+
const psbt = createPsbt();
|
|
68
|
+
psbt.addSha256Preimage(0, preimage);
|
|
69
|
+
assert.deepStrictEqual((0, pox5_1.getPox5PrincipalPreimage)(psbt, 0, descriptor), preimage);
|
|
70
|
+
});
|
|
71
|
+
it('ignores unrelated SHA256 records and rejects a missing committed preimage', function () {
|
|
72
|
+
const preimage = Buffer.alloc(32, 0x42);
|
|
73
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(getParams(sha256(preimage)));
|
|
74
|
+
assert.throws(() => (0, pox5_1.getPox5PrincipalPreimage)(createPsbt(), 0, descriptor), /matching the descriptor commitment/);
|
|
75
|
+
const psbt = createPsbt();
|
|
76
|
+
psbt.addSha256Preimage(0, preimage);
|
|
77
|
+
psbt.addSha256Preimage(0, Buffer.alloc(32, 0x43));
|
|
78
|
+
assert.deepStrictEqual((0, pox5_1.getPox5PrincipalPreimage)(psbt, 0, descriptor), preimage);
|
|
79
|
+
const unmatchedPsbt = createPsbt();
|
|
80
|
+
unmatchedPsbt.addSha256Preimage(0, Buffer.alloc(32, 0x43));
|
|
81
|
+
assert.throws(() => (0, pox5_1.getPox5PrincipalPreimage)(unmatchedPsbt, 0, descriptor), /matching the descriptor commitment/);
|
|
82
|
+
});
|
|
83
|
+
it('rejects malformed SHA256 digest and preimage values', function () {
|
|
84
|
+
const preimage = Buffer.alloc(32, 0x42);
|
|
85
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(getParams(sha256(preimage)));
|
|
86
|
+
const psbt = createPsbt();
|
|
87
|
+
psbt.setInputKV(0, { type: 'unknown', keyType: 0x0b, data: sha256(preimage) }, new Uint8Array(31));
|
|
88
|
+
assert.throws(() => (0, pox5_1.getPox5PrincipalPreimage)(psbt, 0, descriptor), /preimage must be 32 bytes/);
|
|
89
|
+
});
|
|
90
|
+
it('checks the principal preimage against the descriptor commitment', function () {
|
|
91
|
+
const preimage = Buffer.alloc(32, 0x42);
|
|
92
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(getParams(sha256(preimage)));
|
|
93
|
+
const info = (0, pox5_1.parsePox5LockupDescriptor)(descriptor);
|
|
94
|
+
assert.ok(info);
|
|
95
|
+
assert.doesNotThrow(() => (0, pox5_1.assertPox5PrincipalPreimage)(info, preimage));
|
|
96
|
+
assert.throws(() => (0, pox5_1.assertPox5PrincipalPreimage)(info, Buffer.alloc(32, 0x43)), /does not match/);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9wb3g1L3ZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbUNBQW9DO0FBRXBDLGdEQUF3QztBQUN4QywwREFBMEQ7QUFFMUQsNENBTTJCO0FBRTNCLFNBQVMsTUFBTSxDQUFDLEtBQWlCO0lBQy9CLE9BQU8sSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsZ0JBQXdCO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUEsd0JBQVksRUFBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3BFLE9BQU87UUFDTCxZQUFZLEVBQUUsTUFBTztRQUNyQixnQkFBZ0I7UUFDaEIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUQsVUFBVSxFQUFFO1lBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDckM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsVUFBVTtJQUNqQixNQUFNLElBQUksR0FBRyxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLFFBQVEs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Q25HLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUU7UUFDcEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBQSxpQ0FBMEIsRUFBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLElBQUksR0FBRyxJQUFBLGdDQUF5QixFQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLGtDQUEyQixFQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxrQ0FBMkIsRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25HLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBQc2J0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvL3Rlc3R1dGlscyc7XG5cbmltcG9ydCB7XG4gIGFzc2VydFBveDVQcmluY2lwYWxQcmVpbWFnZSxcbiAgY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3IsXG4gIGdldFBveDVQcmluY2lwYWxQcmVpbWFnZSxcbiAgUG94NUxvY2t1cERlc2NyaXB0b3JQYXJhbXMsXG4gIHBhcnNlUG94NUxvY2t1cERlc2NyaXB0b3IsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9wb3g1JztcblxuZnVuY3Rpb24gc2hhMjU2KHZhbHVlOiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtcyhzdGFrZXJDb21taXRtZW50OiBCdWZmZXIpOiBQb3g1TG9ja3VwRGVzY3JpcHRvclBhcmFtcyB7XG4gIGNvbnN0IHN0YWtlcktleXMgPSBnZXRLZXlUcmlwbGUoJ3V0eG8tZGVzY3JpcHRvcnMtcG94NS12YWxpZGF0aW9uJyk7XG4gIHJldHVybiB7XG4gICAgdW5sb2NrSGVpZ2h0OiA4NDBfMDAwLFxuICAgIHN0YWtlckNvbW1pdG1lbnQsXG4gICAgZWFybHlFeGl0S2V5OiBCdWZmZXIuZnJvbShzdGFrZXJLZXlzWzBdLmRlcml2ZSg5KS5wdWJsaWNLZXkpLFxuICAgIHN0YWtlcktleXM6IFtcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtlcktleXNbMF0ucHVibGljS2V5KSxcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtlcktleXNbMV0ucHVibGljS2V5KSxcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtlcktleXNbMl0ucHVibGljS2V5KSxcbiAgICBdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQc2J0KCk6IFBzYnQge1xuICBjb25zdCBwc2J0ID0gUHNidC5jcmVhdGUoMiwgMCk7XG4gIHBzYnQuYWRkSW5wdXQoJzAxJy5yZXBlYXQoMzIpLCAwLCAxMDBfMDAwbiwgbmV3IFVpbnQ4QXJyYXkoMzQpKTtcbiAgcHNidC5hZGRPdXRwdXQobmV3IFVpbnQ4QXJyYXkoWzB4NmFdKSwgMG4pO1xuICByZXR1cm4gcHNidDtcbn1cblxuZGVzY3JpYmUoJ1BvWC01IHByaW5jaXBhbCBwcmVpbWFnZSB2YWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBpdCgnZXh0cmFjdHMgYW5kIHZhbGlkYXRlcyB0aGUgZGVzY3JpcHRvci1jb21taXR0ZWQgU0hBMjU2IHJlY29yZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwcmVpbWFnZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHg0Mik7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yKGdldFBhcmFtcyhzaGEyNTYocHJlaW1hZ2UpKSk7XG4gICAgY29uc3QgcHNidCA9IGNyZWF0ZVBzYnQoKTtcbiAgICBwc2J0LmFkZFNoYTI1NlByZWltYWdlKDAsIHByZWltYWdlKTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZ2V0UG94NVByaW5jaXBhbFByZWltYWdlKHBzYnQsIDAsIGRlc2NyaXB0b3IpLCBwcmVpbWFnZSk7XG4gIH0pO1xuXG4gIGl0KCdpZ25vcmVzIHVucmVsYXRlZCBTSEEyNTYgcmVjb3JkcyBhbmQgcmVqZWN0cyBhIG1pc3NpbmcgY29tbWl0dGVkIHByZWltYWdlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHByZWltYWdlID0gQnVmZmVyLmFsbG9jKDMyLCAweDQyKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3IoZ2V0UGFyYW1zKHNoYTI1NihwcmVpbWFnZSkpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGdldFBveDVQcmluY2lwYWxQcmVpbWFnZShjcmVhdGVQc2J0KCksIDAsIGRlc2NyaXB0b3IpLCAvbWF0Y2hpbmcgdGhlIGRlc2NyaXB0b3IgY29tbWl0bWVudC8pO1xuXG4gICAgY29uc3QgcHNidCA9IGNyZWF0ZVBzYnQoKTtcbiAgICBwc2J0LmFkZFNoYTI1NlByZWltYWdlKDAsIHByZWltYWdlKTtcbiAgICBwc2J0LmFkZFNoYTI1NlByZWltYWdlKDAsIEJ1ZmZlci5hbGxvYygzMiwgMHg0MykpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZ2V0UG94NVByaW5jaXBhbFByZWltYWdlKHBzYnQsIDAsIGRlc2NyaXB0b3IpLCBwcmVpbWFnZSk7XG5cbiAgICBjb25zdCB1bm1hdGNoZWRQc2J0ID0gY3JlYXRlUHNidCgpO1xuICAgIHVubWF0Y2hlZFBzYnQuYWRkU2hhMjU2UHJlaW1hZ2UoMCwgQnVmZmVyLmFsbG9jKDMyLCAweDQzKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBnZXRQb3g1UHJpbmNpcGFsUHJlaW1hZ2UodW5tYXRjaGVkUHNidCwgMCwgZGVzY3JpcHRvciksIC9tYXRjaGluZyB0aGUgZGVzY3JpcHRvciBjb21taXRtZW50Lyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIG1hbGZvcm1lZCBTSEEyNTYgZGlnZXN0IGFuZCBwcmVpbWFnZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcHJlaW1hZ2UgPSBCdWZmZXIuYWxsb2MoMzIsIDB4NDIpO1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjcmVhdGVQb3g1TG9ja3VwRGVzY3JpcHRvcihnZXRQYXJhbXMoc2hhMjU2KHByZWltYWdlKSkpO1xuICAgIGNvbnN0IHBzYnQgPSBjcmVhdGVQc2J0KCk7XG4gICAgcHNidC5zZXRJbnB1dEtWKDAsIHsgdHlwZTogJ3Vua25vd24nLCBrZXlUeXBlOiAweDBiLCBkYXRhOiBzaGEyNTYocHJlaW1hZ2UpIH0sIG5ldyBVaW50OEFycmF5KDMxKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBnZXRQb3g1UHJpbmNpcGFsUHJlaW1hZ2UocHNidCwgMCwgZGVzY3JpcHRvciksIC9wcmVpbWFnZSBtdXN0IGJlIDMyIGJ5dGVzLyk7XG4gIH0pO1xuXG4gIGl0KCdjaGVja3MgdGhlIHByaW5jaXBhbCBwcmVpbWFnZSBhZ2FpbnN0IHRoZSBkZXNjcmlwdG9yIGNvbW1pdG1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcHJlaW1hZ2UgPSBCdWZmZXIuYWxsb2MoMzIsIDB4NDIpO1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjcmVhdGVQb3g1TG9ja3VwRGVzY3JpcHRvcihnZXRQYXJhbXMoc2hhMjU2KHByZWltYWdlKSkpO1xuICAgIGNvbnN0IGluZm8gPSBwYXJzZVBveDVMb2NrdXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgIGFzc2VydC5vayhpbmZvKTtcblxuICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gYXNzZXJ0UG94NVByaW5jaXBhbFByZWltYWdlKGluZm8sIHByZWltYWdlKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhc3NlcnRQb3g1UHJpbmNpcGFsUHJlaW1hZ2UoaW5mbywgQnVmZmVyLmFsbG9jKDMyLCAweDQzKSksIC9kb2VzIG5vdCBtYXRjaC8pO1xuICB9KTtcbn0pO1xuIl19
|