PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-sui/dist/test/unit/transactionBuilder
Просмотр файла: customTransactionBuilder.js
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const statics_1 = require("@bitgo/statics");
const customTransaction_1 = require("../../../src/lib/customTransaction");
const sui_1 = require("../../resources/sui");
const sdk_core_1 = require("@bitgo/sdk-core");
const should_1 = __importDefault(require("should"));
const getBuilderFactory_1 = require("../getBuilderFactory");
const iface_1 = require("../../../src/lib/iface");
describe('Sui Custom Transaction Builder', () => {
const coinName = 'tsui';
const factory = (0, getBuilderFactory_1.getBuilderFactory)(coinName);
describe('Succeed', () => {
it('should build a custom tx from raw tx hex and explain tx', async function () {
const tx = new customTransaction_1.CustomTransaction(statics_1.coins.get('tsui'));
tx.fromRawTransaction(sui_1.CUSTOM_TX_STAKING_POOL_SPLIT);
should_1.default.equal(tx.type, sdk_core_1.TransactionType.CustomTx);
should_1.default.equal(tx.id, '3HzMxgn3F8WCL1J3Qrk9iLhPpDnGYcSnK36CJ78s7jKg');
should_1.default.equal(tx.inputs.length, 1);
should_1.default.equal(tx.inputs[0].address, '0x6c10d1bf12e4610da1d92ef15e6bc581e1d5e79db33024e8cc1e00c21f0c7ddf');
should_1.default.equal(tx.inputs[0].value, '5000000000');
should_1.default.equal(tx.inputs[0].coin, coinName);
should_1.default.equal(tx.outputs.length, 1);
should_1.default.equal(tx.outputs[0].address, '0x5be5ee85cf5825bd07df7bbe78f19bcaafd42e9e685fda1acf24233cd7b925a6');
should_1.default.equal(tx.outputs[0].value, '5000000000');
should_1.default.equal(tx.outputs[0].coin, coinName);
const txData = tx.getTxData();
should_1.default.equal(txData.sender, '0x6c10d1bf12e4610da1d92ef15e6bc581e1d5e79db33024e8cc1e00c21f0c7ddf');
should_1.default.equal(txData.expiration['None'], null);
should_1.default.equal(txData.gasData.budget, '1000000000');
should_1.default.equal(txData.kind.ProgrammableTransaction.inputs.length, 3);
should_1.default.equal(txData.kind.ProgrammableTransaction.transactions.length, 2);
const txJson = tx.toJson();
should_1.default.equal(txJson.sender, '0x6c10d1bf12e4610da1d92ef15e6bc581e1d5e79db33024e8cc1e00c21f0c7ddf');
should_1.default.equal(txJson.expiration['None'], null);
should_1.default.equal(txJson.gasData.budget, '1000000000');
should_1.default.equal(txJson.kind.ProgrammableTransaction.inputs.length, 3);
should_1.default.equal(txJson.kind.ProgrammableTransaction.transactions.length, 2);
const explainedTx = tx.explainTransaction();
should_1.default.equal(explainedTx.id, '3HzMxgn3F8WCL1J3Qrk9iLhPpDnGYcSnK36CJ78s7jKg');
should_1.default.equal(explainedTx.outputs.length, 1);
should_1.default.equal(explainedTx.outputs[0].address, '0x5be5ee85cf5825bd07df7bbe78f19bcaafd42e9e685fda1acf24233cd7b925a6');
should_1.default.equal(explainedTx.outputs[0].amount, '5000000000');
should_1.default.equal(explainedTx.outputAmount, '5000000000');
should_1.default.equal(explainedTx.fee.fee, '1000000000');
should_1.default.equal(explainedTx.type, sdk_core_1.TransactionType.CustomTx);
const recipients = tx.recipients;
should_1.default.equal(recipients.length, 1);
should_1.default.equal(recipients[0].address, '0x5be5ee85cf5825bd07df7bbe78f19bcaafd42e9e685fda1acf24233cd7b925a6');
});
it('should init builder from a custom tx', async function () {
const tx = new customTransaction_1.CustomTransaction(statics_1.coins.get('tsui'));
tx.fromRawTransaction(sui_1.CUSTOM_TX_STAKING_POOL_SPLIT);
const txBuilder = factory.getCustomTransactionBuilder();
txBuilder.initBuilder(tx);
const rebuiltTx = (await txBuilder.build());
should_1.default.equal(rebuiltTx.type, sdk_core_1.TransactionType.CustomTx);
should_1.default.equal(rebuiltTx.id, '3HzMxgn3F8WCL1J3Qrk9iLhPpDnGYcSnK36CJ78s7jKg');
should_1.default.equal(rebuiltTx.inputs.length, 1);
should_1.default.equal(rebuiltTx.inputs[0].address, '0x6c10d1bf12e4610da1d92ef15e6bc581e1d5e79db33024e8cc1e00c21f0c7ddf');
should_1.default.equal(rebuiltTx.inputs[0].value, '5000000000');
should_1.default.equal(rebuiltTx.inputs[0].coin, coinName);
should_1.default.equal(rebuiltTx.outputs.length, 1);
should_1.default.equal(rebuiltTx.outputs[0].address, '0x5be5ee85cf5825bd07df7bbe78f19bcaafd42e9e685fda1acf24233cd7b925a6');
should_1.default.equal(rebuiltTx.outputs[0].value, '5000000000');
should_1.default.equal(rebuiltTx.outputs[0].coin, coinName);
});
it('should build a tx with public_transfer function', async function () {
const tx = new customTransaction_1.CustomTransaction(statics_1.coins.get('tsui'));
tx.fromRawTransaction(sui_1.CUSTOM_TX_PUBLIC_TRANSFER);
should_1.default.equal(tx.suiTransaction.type, iface_1.SuiTransactionType.CustomTx);
const rawTx = tx.toBroadcastFormat();
should_1.default.equal(rawTx, sui_1.CUSTOM_TX_PUBLIC_TRANSFER);
should_1.default.equal(tx.id, 'FmsE5YgfTU2kiCfYmVE6Zmrow3JaXcA243tBjjNUmLex');
should_1.default.equal(tx.inputs[0].address, '0xce724b63fdfe875a7eeb425e42785c7c05be95bc4f00fbc5c6c75e0dc264abe2');
should_1.default.equal(tx.inputs[0].value, '20000000000');
should_1.default.equal(tx.inputs.length, 1);
should_1.default.equal(tx.outputs.length, 17);
should_1.default.equal(tx.recipients.length, 17);
should_1.default.equal(tx.recipients[0].address, '0x0f220421254dae4355a96b2ffb87ef46566c0918f8dd0e89a53c2ced4355cf12');
should_1.default.equal(tx.recipients[0].amount, '0');
should_1.default.equal(tx.recipients[0].data, 'unknown amount');
should_1.default.equal(tx.recipients[8].address, '0x8d3f38a4a4dfc6bd7bcfda4c9bff36ff89c4d5564672d85c533d86a2201b8158');
should_1.default.equal(tx.recipients[8].amount, '10000000000');
should_1.default.equal(tx.recipients[14].address, '0xe60d6acf56b10033f2e770807028978ef6896a5bb1da38b12ea68ebe20d11704');
should_1.default.equal(tx.recipients[14].amount, '10000000000');
});
it('should build a custom tx and serialize it and deserialize it', async function () {
const tx = new customTransaction_1.CustomTransaction(statics_1.coins.get('tsui'));
tx.fromRawTransaction(sui_1.CUSTOM_TX_STAKING_POOL_SPLIT);
should_1.default.equal(tx.suiTransaction.type, iface_1.SuiTransactionType.CustomTx);
const rawTx = tx.toBroadcastFormat();
should_1.default.equal(rawTx, sui_1.CUSTOM_TX_STAKING_POOL_SPLIT);
const deserialized = (await factory.from(rawTx).build());
should_1.default.deepEqual(deserialized, tx);
deserialized.toBroadcastFormat().should.equal(rawTx);
});
it('should reject a custom tx with unsupported txn type', async function () {
(0, should_1.default)(() => factory.from(sui_1.UNSUPPORTED_TX)).throwError('unsupported target method 0000000000000000000000000000000000000000000000000000000000000003::staking_pool::split_staked_sui');
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9jdXN0b21UcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBdUM7QUFDdkMsMEVBQXVFO0FBQ3ZFLDZDQUE4RztBQUM5Ryw4Q0FBa0Q7QUFDbEQsb0RBQTRCO0FBQzVCLDREQUF5RDtBQUV6RCxrREFBNEQ7QUFFNUQsUUFBUSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtJQUM5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUU1QyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtRQUN2QixFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSztZQUNqRSxNQUFNLEVBQUUsR0FBRyxJQUFJLHFDQUFpQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNwRCxFQUFFLENBQUMsa0JBQWtCLENBQUMsa0NBQTRCLENBQUMsQ0FBQztZQUNwRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ3BFLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLG9FQUFvRSxDQUFDLENBQUM7WUFDekcsZ0JBQU0sQ0FBQyxLQUFL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LFVBQVUsQ0FDbkQsNEhBQTRILENBQzdILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEN1c3RvbVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9jdXN0b21UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBDVVNUT01fVFhfUFVCTElDX1RSQU5TRkVSLCBDVVNUT01fVFhfU1RBS0lOR19QT09MX1NQTElULCBVTlNVUFBPUlRFRF9UWCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9zdWknO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gYXMgU3VpVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgU3VpVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5cbmRlc2NyaWJlKCdTdWkgQ3VzdG9tIFRyYW5zYWN0aW9uIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGNvaW5OYW1lID0gJ3RzdWknO1xuICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoY29pbk5hbWUpO1xuXG4gIGRlc2NyaWJlKCdTdWNjZWVkJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gdHggZnJvbSByYXcgdHggaGV4IGFuZCBleHBsYWluIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgQ3VzdG9tVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0c3VpJykpO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKENVU1RPTV9UWF9TVEFLSU5HX1BPT0xfU1BMSVQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeCk7XG4gICAgICBzaG91bGQuZXF1YWwodHguaWQsICczSHpNeGduM0Y4V0NMMUozUXJrOWlMaFBwRG5HWWNTbkszNkNKNzhzN2pLZycpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0c1swXS5hZGRyZXNzLCAnMHg2YzEwZDFiZjEyZTQ2MTBkYTFkOTJlZjE1ZTZiYzU4MWUxZDVlNzlkYjMzMDI0ZThjYzFlMDBjMjFmMGM3ZGRmJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHguaW5wdXRzWzBdLnZhbHVlLCAnNTAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0c1swXS5jb2luLCBjb2luTmFtZSk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0uYWRkcmVzcywgJzB4NWJlNWVlODVjZjU4MjViZDA3ZGY3YmJlNzhmMTliY2FhZmQ0MmU5ZTY4NWZkYTFhY2YyNDIzM2NkN2I5MjVhNicpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0udmFsdWUsICc1MDAwMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS5jb2luLCBjb2luTmFtZSk7XG5cbiAgICAgIGNvbnN0IHR4RGF0YSA9IHR4LmdldFR4RGF0YSgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4RGF0YS5zZW5kZXIsICcweDZjMTBkMWJmMTJlNDYxMGRhMWQ5MmVmMTVlNmJjNTgxZTFkNWU3OWRiMzMwMjRlOGNjMWUwMGMyMWYwYzdkZGYnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eERhdGEuZXhwaXJhdGlvblsnTm9uZSddLCBudWxsKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eERhdGEuZ2FzRGF0YS5idWRnZXQsICcxMDAwMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhEYXRhLmtpbmQuUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24uaW5wdXRzLmxlbmd0aCwgMyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhEYXRhLmtpbmQuUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25zLmxlbmd0aCwgMik7XG5cbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5zZW5kZXIsICcweDZjMTBkMWJmMTJlNDYxMGRhMWQ5MmVmMTVlNmJjNTgxZTFkNWU3OWRiMzMwMjRlOGNjMWUwMGMyMWYwYzdkZGYnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZXhwaXJhdGlvblsnTm9uZSddLCBudWxsKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZ2FzRGF0YS5idWRnZXQsICcxMDAwMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmtpbmQuUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24uaW5wdXRzLmxlbmd0aCwgMyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmtpbmQuUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25zLmxlbmd0aCwgMik7XG5cbiAgICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICBzaG91bGQuZXF1YWwoZXhwbGFpbmVkVHguaWQsICczSHpNeGduM0Y4V0NMMUozUXJrOWlMaFBwRG5HWWNTbkszNkNKNzhzN2pLZycpO1xuICAgICAgc2hvdWxkLmVxdWFsKGV4cGxhaW5lZFR4Lm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgZXhwbGFpbmVkVHgub3V0cHV0c1swXS5hZGRyZXNzLFxuICAgICAgICAnMHg1YmU1ZWU4NWNmNTgyNWJkMDdkZjdiYmU3OGYxOWJjYWFmZDQyZTllNjg1ZmRhMWFjZjI0MjMzY2Q3YjkyNWE2J1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChleHBsYWluZWRUeC5vdXRwdXRzWzBdLmFtb3VudCwgJzUwMDAwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5lcXVhbChleHBsYWluZWRUeC5vdXRwdXRBbW91bnQsICc1MDAwMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZXF1YWwoZXhwbGFpbmVkVHguZmVlLmZlZSwgJzEwMDAwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5lcXVhbChleHBsYWluZWRUeC50eXBlLCBUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHgpO1xuXG4gICAgICBjb25zdCByZWNpcGllbnRzID0gdHgucmVjaXBpZW50cztcbiAgICAgIHNob3VsZC5lcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgICBzaG91bGQuZXF1YWwocmVjaXBpZW50c1swXS5hZGRyZXNzLCAnMHg1YmU1ZWU4NWNmNTgyNWJkMDdkZjdiYmU3OGYxOWJjYWFmZDQyZTllNjg1ZmRhMWFjZjI0MjMzY2Q3YjkyNWE2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXQgYnVpbGRlciBmcm9tIGEgY3VzdG9tIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgQ3VzdG9tVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0c3VpJykpO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKENVU1RPTV9UWF9TVEFLSU5HX1BPT0xfU1BMSVQpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRDdXN0b21UcmFuc2FjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgICBjb25zdCByZWJ1aWx0VHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFN1aVRyYW5zYWN0aW9uPEN1c3RvbVRyYW5zYWN0aW9uPjtcbiAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4KTtcbiAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHguaWQsICczSHpNeGduM0Y4V0NMMUozUXJrOWlMaFBwRG5HWWNTbkszNkNKNzhzN2pLZycpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5pbnB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHguaW5wdXRzWzBdLmFkZHJlc3MsICcweDZjMTBkMWJmMTJlNDYxMGRhMWQ5MmVmMTVlNmJjNTgxZTFkNWU3OWRiMzMwMjRlOGNjMWUwMGMyMWYwYzdkZGYnKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHguaW5wdXRzWzBdLnZhbHVlLCAnNTAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5pbnB1dHNbMF0uY29pbiwgY29pbk5hbWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBzaG91bGQuZXF1YWwocmVidWlsdFR4Lm91dHB1dHNbMF0uYWRkcmVzcywgJzB4NWJlNWVlODVjZjU4MjViZDA3ZGY3YmJlNzhmMTliY2FhZmQ0MmU5ZTY4NWZkYTFhY2YyNDIzM2NkN2I5MjVhNicpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5vdXRwdXRzWzBdLnZhbHVlLCAnNTAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5vdXRwdXRzWzBdLmNvaW4sIGNvaW5OYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB0eCB3aXRoIHB1YmxpY190cmFuc2ZlciBmdW5jdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IEN1c3RvbVRyYW5zYWN0aW9uKGNvaW5zLmdldCgndHN1aScpKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihDVVNUT01fVFhfUFVCTElDX1RSQU5TRkVSKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5zdWlUcmFuc2FjdGlvbi50eXBlLCBTdWlUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCBDVVNUT01fVFhfUFVCTElDX1RSQU5TRkVSKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pZCwgJ0Ztc0U1WWdmVFUya2lDZlltVkU2Wm1yb3czSmFYY0EyNDN0QmpqTlVtTGV4Jyk7XG4gICAgICBzaG91bGQuZXF1YWwodHguaW5wdXRzWzBdLmFkZHJlc3MsICcweGNlNzI0YjYzZmRmZTg3NWE3ZWViNDI1ZTQyNzg1YzdjMDViZTk1YmM0ZjAwZmJjNWM2Yzc1ZTBkYzI2NGFiZTInKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0udmFsdWUsICcyMDAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHMubGVuZ3RoLCAxNyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgucmVjaXBpZW50cy5sZW5ndGgsIDE3KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5yZWNpcGllbnRzWzBdLmFkZHJlc3MsICcweDBmMjIwNDIxMjU0ZGFlNDM1NWE5NmIyZmZiODdlZjQ2NTY2YzA5MThmOGRkMGU4OWE1M2MyY2VkNDM1NWNmMTInKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5yZWNpcGllbnRzWzBdLmFtb3VudCwgJzAnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5yZWNpcGllbnRzWzBdLmRhdGEsICd1bmtub3duIGFtb3VudCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnJlY2lwaWVudHNbOF0uYWRkcmVzcywgJzB4OGQzZjM4YTRhNGRmYzZiZDdiY2ZkYTRjOWJmZjM2ZmY4OWM0ZDU1NjQ2NzJkODVjNTMzZDg2YTIyMDFiODE1OCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnJlY2lwaWVudHNbOF0uYW1vdW50LCAnMTAwMDAwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5yZWNpcGllbnRzWzE0XS5hZGRyZXNzLCAnMHhlNjBkNmFjZjU2YjEwMDMzZjJlNzcwODA3MDI4OTc4ZWY2ODk2YTViYjFkYTM4YjEyZWE2OGViZTIwZDExNzA0Jyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgucmVjaXBpZW50c1sxNF0uYW1vdW50LCAnMTAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gdHggYW5kIHNlcmlhbGl6ZSBpdCBhbmQgZGVzZXJpYWxpemUgaXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBDdXN0b21UcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RzdWknKSk7XG4gICAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24oQ1VTVE9NX1RYX1NUQUtJTkdfUE9PTF9TUExJVCk7XG4gICAgICBzaG91bGQuZXF1YWwodHguc3VpVHJhbnNhY3Rpb24udHlwZSwgU3VpVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4KTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgQ1VTVE9NX1RYX1NUQUtJTkdfUE9PTF9TUExJVCk7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSAoYXdhaXQgZmFjdG9yeS5mcm9tKHJhd1R4KS5idWlsZCgpKSBhcyBDdXN0b21UcmFuc2FjdGlvbjtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoZGVzZXJpYWxpemVkLCB0eCk7XG4gICAgICBkZXNlcmlhbGl6ZWQudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3VHgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYSBjdXN0b20gdHggd2l0aCB1bnN1cHBvcnRlZCB0eG4gdHlwZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZCgoKSA9PiBmYWN0b3J5LmZyb20oVU5TVVBQT1JURURfVFgpKS50aHJvd0Vycm9yKFxuICAgICAgICAndW5zdXBwb3J0ZWQgdGFyZ2V0IG1ldGhvZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOjpzdGFraW5nX3Bvb2w6OnNwbGl0X3N0YWtlZF9zdWknXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!