PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-avaxp/dist/test/unit/lib

Просмотр файла: importP2CTxBuilder.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;
    };
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = __importDefault(require("assert"));
require("should");
const testData = __importStar(require("../../resources/avaxp"));
const errorMessage = __importStar(require("../../resources/errors"));
const lib_1 = require("../../../src/lib");
const statics_1 = require("@bitgo/statics");
const signFlowTestSuit_1 = __importDefault(require("./signFlowTestSuit"));
const importP_1 = require("../../resources/tx/importP");
describe('AvaxP Import P2C Tx Builder', () => {
    const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp'));
    describe('validate txBuilder fields', () => {
        const txBuilder = factory.getImportBuilder();
        it('should fail target chain id length incorrect', () => {
            assert_1.default.throws(() => {
                txBuilder.externalChainId(Buffer.from(testData.INVALID_CHAIN_ID));
            }, (e) => e.message === errorMessage.ERROR_CHAIN_ID_LENGTH);
        });
        it('should fail target chain id not a vaild base58 string', () => {
            assert_1.default.throws(() => {
                txBuilder.externalChainId(testData.INVALID_CHAIN_ID);
            }, (e) => e.message === errorMessage.ERROR_CHAIN_ID_NOT_BASE58);
        });
        it('should fail target chain id cb58 invalid checksum', () => {
            assert_1.default.throws(() => {
                txBuilder.externalChainId(testData.VALID_C_CHAIN_ID.slice(2));
            }, (e) => e.message === errorMessage.ERROR_CHAIN_ID_INVALID_CHECKSUM);
        });
        it('should fail validate Utxos empty string', () => {
            assert_1.default.throws(() => {
                txBuilder.validateUtxos([]);
            }, (e) => e.message === errorMessage.ERROR_UTXOS_EMPTY);
        });
        it('should fail validate Utxos without amount field', () => {
            assert_1.default.throws(() => {
                txBuilder.validateUtxos([{ outputID: '' }]);
            }, (e) => e.message === errorMessage.ERROR_UTXOS_AMOUNT);
        });
    });
    (0, signFlowTestSuit_1.default)({
        transactionType: 'Import P2C',
        newTxFactory: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')),
        newTxBuilder: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
            .getImportBuilder()
            .threshold(importP_1.IMPORT_P.threshold)
            .locktime(importP_1.IMPORT_P.locktime)
            .fromPubKey(importP_1.IMPORT_P.pAddresses)
            .externalChainId(importP_1.IMPORT_P.targetChainId)
            .utxos(importP_1.IMPORT_P.outputs),
        unsignedTxHex: importP_1.IMPORT_P.unsignedTxHex,
        halfsigntxHex: importP_1.IMPORT_P.halfsigntxHex,
        fullsigntxHex: importP_1.IMPORT_P.fullsigntxHex,
        privKey: {
            prv1: importP_1.IMPORT_P.privKey.prv1,
            prv2: importP_1.IMPORT_P.privKey.prv2,
        },
    });
    (0, signFlowTestSuit_1.default)({
        transactionType: 'Import P2C recovery',
        newTxFactory: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')),
        newTxBuilder: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
            .getImportBuilder()
            .threshold(importP_1.IMPORT_P.threshold)
            .locktime(importP_1.IMPORT_P.locktime)
            .fromPubKey(importP_1.IMPORT_P.pAddresses)
            .externalChainId(importP_1.IMPORT_P.targetChainId)
            .utxos(importP_1.IMPORT_P.outputs)
            .recoverMode(),
        unsignedTxHex: importP_1.IMPORT_P.rUnsignedTxHex,
        halfsigntxHex: importP_1.IMPORT_P.rHalfsigntxHex,
        fullsigntxHex: importP_1.IMPORT_P.rFullsigntxHex,
        privKey: {
            prv1: importP_1.IMPORT_P.privKey.prv3,
            prv2: importP_1.IMPORT_P.privKey.prv2,
        },
    });
    describe('Key cannot sign the transaction ', () => {
        it('Should full sign a import tx from unsigned raw tx', () => {
            const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(importP_1.IMPORT_P.unsignedTxHex);
            txBuilder.sign({ key: importP_1.IMPORT_P.privKey.prv2 });
            txBuilder
                .build()
                .then(() => assert_1.default.fail('it can sign'))
                .catch((err) => {
                err.message.should.be.equal(errorMessage.ERROR_KEY_CANNOT_SIGN);
            });
        });
        it('Should 2 full sign a import tx from unsigned raw tx', () => {
            const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(importP_1.IMPORT_P.rUnsignedTxHex);
            txBuilder.sign({ key: importP_1.IMPORT_P.privKey.prv1 });
            txBuilder
                .build()
                .then(() => assert_1.default.fail('it can sign'))
                .catch((err) => {
                err.message.should.be.equal(errorMessage.ERROR_KEY_CANNOT_SIGN);
            });
        });
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0UDJDVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9pbXBvcnRQMkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsa0JBQWdCO0FBQ2hCLGdFQUFrRDtBQUNsRCxxRUFBdUQ7QUFDdkQsMENBQTZFO0FBQzdFLDRDQUF1QztBQUN2QywwRUFBOEM7QUFDOUMsd0RBQXNEO0FBRXRELFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7SUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUN6QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU3QyxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDLEVBQ0QsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLHFCQUFxQixDQUM3RCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQy9ELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxTQUFTLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsRUFDRCxDQUFDLENB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RyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuRyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLGtCQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDL0MsU0FBUztpQkFDTixLQUFLLEVBQUU7aUJBQ1AsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUN0QyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2F2YXhwJztcbmltcG9ydCAqIGFzIGVycm9yTWVzc2FnZSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXJyb3JzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIERlY29kZWRVdHhvT2JqIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBzaWduRmxvd1Rlc3QgZnJvbSAnLi9zaWduRmxvd1Rlc3RTdWl0JztcbmltcG9ydCB7IElNUE9SVF9QIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3R4L2ltcG9ydFAnO1xuXG5kZXNjcmliZSgnQXZheFAgSW1wb3J0IFAyQyBUeCBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSk7XG4gIGRlc2NyaWJlKCd2YWxpZGF0ZSB0eEJ1aWxkZXIgZmllbGRzJywgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0SW1wb3J0QnVpbGRlcigpO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRhcmdldCBjaGFpbiBpZCBsZW5ndGggaW5jb3JyZWN0JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5leHRlcm5hbENoYWluSWQoQnVmZmVyLmZyb20odGVzdERhdGEuSU5WQUxJRF9DSEFJTl9JRCkpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IGVycm9yTWVzc2FnZS5FUlJPUl9DSEFJTl9JRF9MRU5HVEhcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdGFyZ2V0IGNoYWluIGlkIG5vdCBhIHZhaWxkIGJhc2U1OCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5JTlZBTElEX0NIQUlOX0lEKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSBlcnJvck1lc3NhZ2UuRVJST1JfQ0hBSU5fSURfTk9UX0JBU0U1OFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0YXJnZXQgY2hhaW4gaWQgY2I1OCBpbnZhbGlkIGNoZWNrc3VtJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5leHRlcm5hbENoYWluSWQodGVzdERhdGEuVkFMSURfQ19DSEFJTl9JRC5zbGljZSgyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gZXJyb3JNZXNzYWdlLkVSUk9SX0NIQUlOX0lEX0lOVkFMSURfQ0hFQ0tTVU1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmFsaWRhdGUgVXR4b3MgZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci52YWxpZGF0ZVV0eG9zKFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSBlcnJvck1lc3NhZ2UuRVJST1JfVVRYT1NfRU1QVFlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmFsaWRhdGUgVXR4b3Mgd2l0aG91dCBhbW91bnQgZmllbGQnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLnZhbGlkYXRlVXR4b3MoW3sgb3V0cHV0SUQ6ICcnIH0gYXMgYW55IGFzIERlY29kZWRVdHhvT2JqXSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gZXJyb3JNZXNzYWdlLkVSUk9SX1VUWE9TX0FNT1VOVFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgc2lnbkZsb3dUZXN0KHtcbiAgICB0cmFuc2FjdGlvblR5cGU6ICdJbXBvcnQgUDJDJyxcbiAgICBuZXdUeEZhY3Rvcnk6ICgpID0+IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLFxuICAgIG5ld1R4QnVpbGRlcjogKCkgPT5cbiAgICAgIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5nZXRJbXBvcnRCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZChJTVBPUlRfUC50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZShJTVBPUlRfUC5sb2NrdGltZSlcbiAgICAgICAgLmZyb21QdWJLZXkoSU1QT1JUX1AucEFkZHJlc3NlcylcbiAgICAgICAgLmV4dGVybmFsQ2hhaW5JZChJTVBPUlRfUC50YXJnZXRDaGFpbklkKVxuICAgICAgICAudXR4b3MoSU1QT1JUX1Aub3V0cHV0cyksXG4gICAgdW5zaWduZWRUeEhleDogSU1QT1JUX1AudW5zaWduZWRUeEhleCxcbiAgICBoYWxmc2lnbnR4SGV4OiBJTVBPUlRfUC5oYWxmc2lnbnR4SGV4LFxuICAgIGZ1bGxzaWdudHhIZXg6IElNUE9SVF9QLmZ1bGxzaWdudHhIZXgsXG4gICAgcHJpdktleToge1xuICAgICAgcHJ2MTogSU1QT1JUX1AucHJpdktleS5wcnYxLFxuICAgICAgcHJ2MjogSU1QT1JUX1AucHJpdktleS5wcnYyLFxuICAgIH0sXG4gIH0pO1xuXG4gIHNpZ25GbG93VGVzdCh7XG4gICAgdHJhbnNhY3Rpb25UeXBlOiAnSW1wb3J0IFAyQyByZWNvdmVyeScsXG4gICAgbmV3VHhGYWN0b3J5OiAoKSA9PiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKSxcbiAgICBuZXdUeEJ1aWxkZXI6ICgpID0+XG4gICAgICBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKVxuICAgICAgICAuZ2V0SW1wb3J0QnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQoSU1QT1JUX1AudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUoSU1QT1JUX1AubG9ja3RpbWUpXG4gICAgICAgIC5mcm9tUHViS2V5KElNUE9SVF9QLnBBZGRyZXNzZXMpXG4gICAgICAgIC5leHRlcm5hbENoYWluSWQoSU1QT1JUX1AudGFyZ2V0Q2hhaW5JZClcbiAgICAgICAgLnV0eG9zKElNUE9SVF9QLm91dHB1dHMpXG4gICAgICAgIC5yZWNvdmVyTW9kZSgpLFxuICAgIHVuc2lnbmVkVHhIZXg6IElNUE9SVF9QLnJVbnNpZ25lZFR4SGV4LFxuICAgIGhhbGZzaWdudHhIZXg6IElNUE9SVF9QLnJIYWxmc2lnbnR4SGV4LFxuICAgIGZ1bGxzaWdudHhIZXg6IElNUE9SVF9QLnJGdWxsc2lnbnR4SGV4LFxuICAgIHByaXZLZXk6IHtcbiAgICAgIHBydjE6IElNUE9SVF9QLnByaXZLZXkucHJ2MyxcbiAgICAgIHBydjI6IElNUE9SVF9QLnByaXZLZXkucHJ2MixcbiAgICB9LFxuICB9KTtcblxuICBkZXNjcmliZSgnS2V5IGNhbm5vdCBzaWduIHRoZSB0cmFuc2FjdGlvbiAnLCAoKSA9PiB7XG4gICAgaXQoJ1Nob3VsZCBmdWxsIHNpZ24gYSBpbXBvcnQgdHggZnJvbSB1bnNpZ25lZCByYXcgdHgnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKElNUE9SVF9QLnVuc2lnbmVkVHhIZXgpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IElNUE9SVF9QLnByaXZLZXkucHJ2MiB9KTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAuYnVpbGQoKVxuICAgICAgICAudGhlbigoKSA9PiBhc3NlcnQuZmFpbCgnaXQgY2FuIHNpZ24nKSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBlcnIubWVzc2FnZS5zaG91bGQuYmUuZXF1YWwoZXJyb3JNZXNzYWdlLkVSUk9SX0tFWV9DQU5OT1RfU0lHTik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCAyIGZ1bGwgc2lnbiBhIGltcG9ydCB0eCBmcm9tIHVuc2lnbmVkIHJhdyB0eCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oSU1QT1JUX1AuclVuc2lnbmVkVHhIZXgpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IElNUE9SVF9QLnByaXZLZXkucHJ2MSB9KTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAuYnVpbGQoKVxuICAgICAgICAudGhlbigoKSA9PiBhc3NlcnQuZmFpbCgnaXQgY2FuIHNpZ24nKSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBlcnIubWVzc2FnZS5zaG91bGQuYmUuZXF1YWwoZXJyb3JNZXNzYWdlLkVSUk9SX0tFWV9DQU5OT1RfU0lHTik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19

Выполнить команду


Для локальной разработки. Не используйте в интернете!