PHP WebShell
Текущая директория: /opt/BitGoJS/modules/abstract-utxo/dist/src
Просмотр файла: names.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.utxoCoinsTestnet = exports.utxoCoinsMainnet = void 0;
exports.isUtxoCoinNameMainnet = isUtxoCoinNameMainnet;
exports.isUtxoCoinNameTestnet = isUtxoCoinNameTestnet;
exports.isUtxoCoinName = isUtxoCoinName;
exports.getFamilyFromNetwork = getFamilyFromNetwork;
exports.getChainFromNetwork = getChainFromNetwork;
exports.getNetworkFromChain = getNetworkFromChain;
exports.getFullNameFromNetwork = getFullNameFromNetwork;
const utxolib = __importStar(require("@bitgo/utxo-lib"));
exports.utxoCoinsMainnet = ['btc', 'bch', 'bcha', 'bsv', 'btg', 'dash', 'doge', 'ltc', 'zec'];
exports.utxoCoinsTestnet = [
'tbtc',
'tbch',
'tbsv',
'tdash',
'tdoge',
'tltc',
'tzec',
'tbtcsig',
'tbtc4',
'tbtcbgsig',
];
function isUtxoCoinNameMainnet(coinName) {
return exports.utxoCoinsMainnet.includes(coinName);
}
function isUtxoCoinNameTestnet(coinName) {
return exports.utxoCoinsTestnet.includes(coinName);
}
function isUtxoCoinName(coinName) {
return isUtxoCoinNameMainnet(coinName) || isUtxoCoinNameTestnet(coinName);
}
function getNetworkName(n) {
const name = utxolib.getNetworkName(n);
if (!name) {
throw new Error('Unknown network');
}
return name;
}
/**
* @param n
* @returns the family name for a network. Testnets and mainnets of the same coin share the same family name.
*/
function getFamilyFromNetwork(n) {
switch (getNetworkName(n)) {
case 'bitcoin':
case 'testnet':
case 'bitcoinPublicSignet':
case 'bitcoinTestnet4':
case 'bitcoinBitGoSignet':
return 'btc';
case 'bitcoincash':
case 'bitcoincashTestnet':
return 'bch';
case 'ecash':
case 'ecashTest':
return 'bcha';
case 'bitcoingold':
case 'bitcoingoldTestnet':
return 'btg';
case 'bitcoinsv':
case 'bitcoinsvTestnet':
return 'bsv';
case 'dash':
case 'dashTest':
return 'dash';
case 'dogecoin':
case 'dogecoinTest':
return 'doge';
case 'litecoin':
case 'litecoinTest':
return 'ltc';
case 'zcash':
case 'zcashTest':
return 'zec';
}
}
/**
* Get the chain name for a network.
* The chain is different for every network.
*/
function getChainFromNetwork(n) {
switch (getNetworkName(n)) {
case 'bitcoinPublicSignet':
return 'tbtcsig';
case 'bitcoinTestnet4':
return 'tbtc4';
case 'bitcoinBitGoSignet':
return 'tbtcbgsig';
case 'bitcoin':
case 'testnet':
case 'bitcoincash':
case 'bitcoincashTestnet':
case 'ecash':
case 'ecashTest':
case 'bitcoingold':
case 'bitcoingoldTestnet':
case 'bitcoinsv':
case 'bitcoinsvTestnet':
case 'dash':
case 'dashTest':
case 'dogecoin':
case 'dogecoinTest':
case 'litecoin':
case 'litecoinTest':
case 'zcash':
case 'zcashTest':
const mainnetName = getFamilyFromNetwork(n);
return utxolib.isTestnet(n) ? `t${mainnetName}` : mainnetName;
}
}
/**
* @param coinName - the name of the coin (e.g. 'btc', 'bch', 'ltc'). Also called 'chain' in some contexts.
* @returns the network for a coin. This is the mainnet network for the coin.
*/
function getNetworkFromChain(coinName) {
for (const network of utxolib.getNetworkList()) {
if (getChainFromNetwork(network) === coinName) {
return network;
}
}
throw new Error(`Unknown chain ${coinName}`);
}
function getFullNameFromNetwork(n) {
const name = getNetworkName(n);
let prefix;
switch (name) {
case 'bitcoinTestnet4':
prefix = 'Testnet4 ';
break;
case 'bitcoinPublicSignet':
prefix = 'Public Signet ';
break;
case 'bitcoinBitGoSignet':
prefix = 'BitGo Signet ';
break;
default:
if (utxolib.isTestnet(n)) {
prefix = 'Testnet ';
}
else {
prefix = '';
}
}
switch (name) {
case 'bitcoin':
case 'testnet':
case 'bitcoinTestnet4':
case 'bitcoinPublicSignet':
case 'bitcoinBitGoSignet':
return prefix + 'Bitcoin';
case 'bitcoincash':
case 'bitcoincashTestnet':
return prefix + 'Bitcoin Cash';
case 'ecash':
case 'ecashTest':
return prefix + 'Bitcoin ABC';
case 'bitcoingold':
case 'bitcoingoldTestnet':
return prefix + 'Bitcoin Gold';
case 'bitcoinsv':
case 'bitcoinsvTestnet':
return prefix + 'Bitcoin SV';
case 'dash':
case 'dashTest':
return prefix + 'Dash';
case 'dogecoin':
case 'dogecoinTest':
return prefix + 'Dogecoin';
case 'litecoin':
case 'litecoinTest':
return prefix + 'Litecoin';
case 'zcash':
case 'zcashTest':
return prefix + 'ZCash';
default:
throw new Error('Unknown network');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLHNEQUVDO0FBRUQsc0RBRUM7QUFFRCx3Q0FFQztBQWNELG9EQWlDQztBQU1ELGtEQTZCQztBQU1ELGtEQU9DO0FBRUQsd0RBd0RDO0FBdkxELHlEQUEyQztBQUU5QixRQUFBLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQVUsQ0FBQztBQUMvRixRQUFBLGdCQUFnQixHQUFHO0lBQzlCLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07SUFDTixTQUFTO0lBQ1QsT0FBTztJQUNQLFdBQVc7Q0FDSCxDQUFDO0FBTVgsU0FBZ0IscUJBQXFCLENBQUMsUUFBZ0I7SUFDcEQsT0FBTyx3QkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBK0IsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLHdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUErQixDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxRQUFnQjtJQUM3QyxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFrQjtJQUN4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxL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QUFDO1FBQ2hCLEtBQUssY0FBYztZQUNqQixPQUFPLE1BQU0sR0FBRyxVQUFVLENBQUM7UUFDN0IsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxjQUFjO1lBQ2pCLE9BQU8sTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUM3QixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssV0FBVztZQUNkLE9BQU8sTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUMxQjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuZXhwb3J0IGNvbnN0IHV0eG9Db2luc01haW5uZXQgPSBbJ2J0YycsICdiY2gnLCAnYmNoYScsICdic3YnLCAnYnRnJywgJ2Rhc2gnLCAnZG9nZScsICdsdGMnLCAnemVjJ10gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgdXR4b0NvaW5zVGVzdG5ldCA9IFtcbiAgJ3RidGMnLFxuICAndGJjaCcsXG4gICd0YnN2JyxcbiAgJ3RkYXNoJyxcbiAgJ3Rkb2dlJyxcbiAgJ3RsdGMnLFxuICAndHplYycsXG4gICd0YnRjc2lnJyxcbiAgJ3RidGM0JyxcbiAgJ3RidGNiZ3NpZycsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBVdHhvQ29pbk5hbWVNYWlubmV0ID0gKHR5cGVvZiB1dHhvQ29pbnNNYWlubmV0KVtudW1iZXJdO1xuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lVGVzdG5ldCA9ICh0eXBlb2YgdXR4b0NvaW5zVGVzdG5ldClbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZSA9IFV0eG9Db2luTmFtZU1haW5uZXQgfCBVdHhvQ29pbk5hbWVUZXN0bmV0O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNVdHhvQ29pbk5hbWVNYWlubmV0KGNvaW5OYW1lOiBzdHJpbmcpOiBjb2luTmFtZSBpcyBVdHhvQ29pbk5hbWVNYWlubmV0IHtcbiAgcmV0dXJuIHV0eG9Db2luc01haW5uZXQuaW5jbHVkZXMoY29pbk5hbWUgYXMgVXR4b0NvaW5OYW1lTWFpbm5ldCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9Db2luTmFtZVRlc3RuZXQoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZVRlc3RuZXQge1xuICByZXR1cm4gdXR4b0NvaW5zVGVzdG5ldC5pbmNsdWRlcyhjb2luTmFtZSBhcyBVdHhvQ29pbk5hbWVUZXN0bmV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXR4b0NvaW5OYW1lKGNvaW5OYW1lOiBzdHJpbmcpOiBjb2luTmFtZSBpcyBVdHhvQ29pbk5hbWUge1xuICByZXR1cm4gaXNVdHhvQ29pbk5hbWVNYWlubmV0KGNvaW5OYW1lKSB8fCBpc1V0eG9Db2luTmFtZVRlc3RuZXQoY29pbk5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrTmFtZShuOiB1dHhvbGliLk5ldHdvcmspOiB1dHhvbGliLk5ldHdvcmtOYW1lIHtcbiAgY29uc3QgbmFtZSA9IHV0eG9saWIuZ2V0TmV0d29ya05hbWUobik7XG4gIGlmICghbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBuZXR3b3JrJyk7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIG5cbiAqIEByZXR1cm5zIHRoZSBmYW1pbHkgbmFtZSBmb3IgYSBuZXR3b3JrLiBUZXN0bmV0cyBhbmQgbWFpbm5ldHMgb2YgdGhlIHNhbWUgY29pbiBzaGFyZSB0aGUgc2FtZSBmYW1pbHkgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZhbWlseUZyb21OZXR3b3JrKG46IHV0eG9saWIuTmV0d29yayk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICBzd2l0Y2ggKGdldE5ldHdvcmtOYW1lKG4pKSB7XG4gICAgY2FzZSAnYml0Y29pbic6XG4gICAgY2FzZSAndGVzdG5ldCc6XG4gICAgY2FzZSAnYml0Y29pblB1YmxpY1NpZ25ldCc6XG4gICAgY2FzZSAnYml0Y29pblRlc3RuZXQ0JzpcbiAgICBjYXNlICdiaXRjb2luQml0R29TaWduZXQnOlxuICAgICAgcmV0dXJuICdidGMnO1xuICAgIGNhc2UgJ2JpdGNvaW5jYXNoJzpcbiAgICBjYXNlICdiaXRjb2luY2FzaFRlc3RuZXQnOlxuICAgICAgcmV0dXJuICdiY2gnO1xuICAgIGNhc2UgJ2VjYXNoJzpcbiAgICBjYXNlICdlY2FzaFRlc3QnOlxuICAgICAgcmV0dXJuICdiY2hhJztcbiAgICBjYXNlICdiaXRjb2luZ29sZCc6XG4gICAgY2FzZSAnYml0Y29pbmdvbGRUZXN0bmV0JzpcbiAgICAgIHJldHVybiAnYnRnJztcbiAgICBjYXNlICdiaXRjb2luc3YnOlxuICAgIGNhc2UgJ2JpdGNvaW5zdlRlc3RuZXQnOlxuICAgICAgcmV0dXJuICdic3YnO1xuICAgIGNhc2UgJ2Rhc2gnOlxuICAgIGNhc2UgJ2Rhc2hUZXN0JzpcbiAgICAgIHJldHVybiAnZGFzaCc7XG4gICAgY2FzZSAnZG9nZWNvaW4nOlxuICAgIGNhc2UgJ2RvZ2Vjb2luVGVzdCc6XG4gICAgICByZXR1cm4gJ2RvZ2UnO1xuICAgIGNhc2UgJ2xpdGVjb2luJzpcbiAgICBjYXNlICdsaXRlY29pblRlc3QnOlxuICAgICAgcmV0dXJuICdsdGMnO1xuICAgIGNhc2UgJ3pjYXNoJzpcbiAgICBjYXNlICd6Y2FzaFRlc3QnOlxuICAgICAgcmV0dXJuICd6ZWMnO1xuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBjaGFpbiBuYW1lIGZvciBhIG5ldHdvcmsuXG4gKiBUaGUgY2hhaW4gaXMgZGlmZmVyZW50IGZvciBldmVyeSBuZXR3b3JrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhaW5Gcm9tTmV0d29yayhuOiB1dHhvbGliLk5ldHdvcmspOiBzdHJpbmcge1xuICBzd2l0Y2ggKGdldE5ldHdvcmtOYW1lKG4pKSB7XG4gICAgY2FzZSAnYml0Y29pblB1YmxpY1NpZ25ldCc6XG4gICAgICByZXR1cm4gJ3RidGNzaWcnO1xuICAgIGNhc2UgJ2JpdGNvaW5UZXN0bmV0NCc6XG4gICAgICByZXR1cm4gJ3RidGM0JztcbiAgICBjYXNlICdiaXRjb2luQml0R29TaWduZXQnOlxuICAgICAgcmV0dXJuICd0YnRjYmdzaWcnO1xuICAgIGNhc2UgJ2JpdGNvaW4nOlxuICAgIGNhc2UgJ3Rlc3RuZXQnOlxuICAgIGNhc2UgJ2JpdGNvaW5jYXNoJzpcbiAgICBjYXNlICdiaXRjb2luY2FzaFRlc3RuZXQnOlxuICAgIGNhc2UgJ2VjYXNoJzpcbiAgICBjYXNlICdlY2FzaFRlc3QnOlxuICAgIGNhc2UgJ2JpdGNvaW5nb2xkJzpcbiAgICBjYXNlICdiaXRjb2luZ29sZFRlc3RuZXQnOlxuICAgIGNhc2UgJ2JpdGNvaW5zdic6XG4gICAgY2FzZSAnYml0Y29pbnN2VGVzdG5ldCc6XG4gICAgY2FzZSAnZGFzaCc6XG4gICAgY2FzZSAnZGFzaFRlc3QnOlxuICAgIGNhc2UgJ2RvZ2Vjb2luJzpcbiAgICBjYXNlICdkb2dlY29pblRlc3QnOlxuICAgIGNhc2UgJ2xpdGVjb2luJzpcbiAgICBjYXNlICdsaXRlY29pblRlc3QnOlxuICAgIGNhc2UgJ3pjYXNoJzpcbiAgICBjYXNlICd6Y2FzaFRlc3QnOlxuICAgICAgY29uc3QgbWFpbm5ldE5hbWUgPSBnZXRGYW1pbHlGcm9tTmV0d29yayhuKTtcbiAgICAgIHJldHVybiB1dHhvbGliLmlzVGVzdG5ldChuKSA/IGB0JHttYWlubmV0TmFtZX1gIDogbWFpbm5ldE5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gY29pbk5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgY29pbiAoZS5nLiAnYnRjJywgJ2JjaCcsICdsdGMnKS4gQWxzbyBjYWxsZWQgJ2NoYWluJyBpbiBzb21lIGNvbnRleHRzLlxuICogQHJldHVybnMgdGhlIG5ldHdvcmsgZm9yIGEgY29pbi4gVGhpcyBpcyB0aGUgbWFpbm5ldCBuZXR3b3JrIGZvciB0aGUgY29pbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ldHdvcmtGcm9tQ2hhaW4oY29pbk5hbWU6IHN0cmluZyk6IHV0eG9saWIuTmV0d29yayB7XG4gIGZvciAoY29uc3QgbmV0d29yayBvZiB1dHhvbGliLmdldE5ldHdvcmtMaXN0KCkpIHtcbiAgICBpZiAoZ2V0Q2hhaW5Gcm9tTmV0d29yayhuZXR3b3JrKSA9PT0gY29pbk5hbWUpIHtcbiAgICAgIHJldHVybiBuZXR3b3JrO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY2hhaW4gJHtjb2luTmFtZX1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bGxOYW1lRnJvbU5ldHdvcmsobjogdXR4b2xpYi5OZXR3b3JrKTogc3RyaW5nIHtcbiAgY29uc3QgbmFtZSA9IGdldE5ldHdvcmtOYW1lKG4pO1xuXG4gIGxldCBwcmVmaXg6IHN0cmluZztcbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnYml0Y29pblRlc3RuZXQ0JzpcbiAgICAgIHByZWZpeCA9ICdUZXN0bmV0NCAnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYml0Y29pblB1YmxpY1NpZ25ldCc6XG4gICAgICBwcmVmaXggPSAnUHVibGljIFNpZ25ldCAnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYml0Y29pbkJpdEdvU2lnbmV0JzpcbiAgICAgIHByZWZpeCA9ICdCaXRHbyBTaWduZXQgJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodXR4b2xpYi5pc1Rlc3RuZXQobikpIHtcbiAgICAgICAgcHJlZml4ID0gJ1Rlc3RuZXQgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9ICcnO1xuICAgICAgfVxuICB9XG5cbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnYml0Y29pbic6XG4gICAgY2FzZSAndGVzdG5ldCc6XG4gICAgY2FzZSAnYml0Y29pblRlc3RuZXQ0JzpcbiAgICBjYXNlICdiaXRjb2luUHVibGljU2lnbmV0JzpcbiAgICBjYXNlICdiaXRjb2luQml0R29TaWduZXQnOlxuICAgICAgcmV0dXJuIHByZWZpeCArICdCaXRjb2luJztcbiAgICBjYXNlICdiaXRjb2luY2FzaCc6XG4gICAgY2FzZSAnYml0Y29pbmNhc2hUZXN0bmV0JzpcbiAgICAgIHJldHVybiBwcmVmaXggKyAnQml0Y29pbiBDYXNoJztcbiAgICBjYXNlICdlY2FzaCc6XG4gICAgY2FzZSAnZWNhc2hUZXN0JzpcbiAgICAgIHJldHVybiBwcmVmaXggKyAnQml0Y29pbiBBQkMnO1xuICAgIGNhc2UgJ2JpdGNvaW5nb2xkJzpcbiAgICBjYXNlICdiaXRjb2luZ29sZFRlc3RuZXQnOlxuICAgICAgcmV0dXJuIHByZWZpeCArICdCaXRjb2luIEdvbGQnO1xuICAgIGNhc2UgJ2JpdGNvaW5zdic6XG4gICAgY2FzZSAnYml0Y29pbnN2VGVzdG5ldCc6XG4gICAgICByZXR1cm4gcHJlZml4ICsgJ0JpdGNvaW4gU1YnO1xuICAgIGNhc2UgJ2Rhc2gnOlxuICAgIGNhc2UgJ2Rhc2hUZXN0JzpcbiAgICAgIHJldHVybiBwcmVmaXggKyAnRGFzaCc7XG4gICAgY2FzZSAnZG9nZWNvaW4nOlxuICAgIGNhc2UgJ2RvZ2Vjb2luVGVzdCc6XG4gICAgICByZXR1cm4gcHJlZml4ICsgJ0RvZ2Vjb2luJztcbiAgICBjYXNlICdsaXRlY29pbic6XG4gICAgY2FzZSAnbGl0ZWNvaW5UZXN0JzpcbiAgICAgIHJldHVybiBwcmVmaXggKyAnTGl0ZWNvaW4nO1xuICAgIGNhc2UgJ3pjYXNoJzpcbiAgICBjYXNlICd6Y2FzaFRlc3QnOlxuICAgICAgcmV0dXJuIHByZWZpeCArICdaQ2FzaCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBuZXR3b3JrJyk7XG4gIH1cbn1cbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!