@bitgo-beta/sdk-coin-canton 1.0.1-beta.72 → 1.0.1-beta.721
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/src/canton.d.ts +22 -1
- package/dist/src/canton.d.ts.map +1 -1
- package/dist/src/canton.js +269 -10
- package/dist/src/cantonToken.d.ts +19 -0
- package/dist/src/cantonToken.d.ts.map +1 -0
- package/dist/src/cantonToken.js +52 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/allocationAllocateBuilder.d.ts +126 -0
- package/dist/src/lib/allocationAllocateBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationAllocateBuilder.js +250 -0
- package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts +67 -0
- package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationAllocateWithdrawnBuilder.js +130 -0
- package/dist/src/lib/allocationRejectBuilder.d.ts +51 -0
- package/dist/src/lib/allocationRejectBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationRejectBuilder.js +107 -0
- package/dist/src/lib/allocationRequestBuilder.d.ts +116 -0
- package/dist/src/lib/allocationRequestBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationRequestBuilder.js +248 -0
- package/dist/src/lib/cantonCommandBuilder.d.ts +72 -0
- package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -0
- package/dist/src/lib/cantonCommandBuilder.js +173 -0
- package/dist/src/lib/clearSigning.d.ts +58 -0
- package/dist/src/lib/clearSigning.d.ts.map +1 -0
- package/dist/src/lib/clearSigning.js +66 -0
- package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts +56 -0
- package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts.map +1 -0
- package/dist/src/lib/cosignDelegationAcceptBuilder.js +112 -0
- package/dist/src/lib/cosignDelegationProposalBuilder.d.ts +60 -0
- package/dist/src/lib/cosignDelegationProposalBuilder.d.ts.map +1 -0
- package/dist/src/lib/cosignDelegationProposalBuilder.js +111 -0
- package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts +58 -0
- package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
- package/dist/src/lib/endInvestorOnboardingOfferBuilder.js +112 -0
- package/dist/src/lib/iface.d.ts +130 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +3 -1
- package/dist/src/lib/index.d.ts +13 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +29 -2
- package/dist/src/lib/messages/cantonBaseMessage.d.ts +16 -0
- package/dist/src/lib/messages/cantonBaseMessage.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonBaseMessage.js +28 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts +14 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.js +23 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts +17 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.js +25 -0
- package/dist/src/lib/messages/cantonSignTopology/index.d.ts +3 -0
- package/dist/src/lib/messages/cantonSignTopology/index.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTopology/index.js +19 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts +13 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.js +22 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts +14 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.js +22 -0
- package/dist/src/lib/messages/cantonSignTransaction/index.d.ts +3 -0
- package/dist/src/lib/messages/cantonSignTransaction/index.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTransaction/index.js +19 -0
- package/dist/src/lib/messages/index.d.ts +5 -0
- package/dist/src/lib/messages/index.d.ts.map +1 -0
- package/dist/src/lib/messages/index.js +21 -0
- package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
- package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
- package/dist/src/lib/oneStepPreApprovalBuilder.d.ts +8 -0
- package/dist/src/lib/oneStepPreApprovalBuilder.d.ts.map +1 -1
- package/dist/src/lib/oneStepPreApprovalBuilder.js +15 -1
- package/dist/src/lib/resourcesInterface.d.ts +1 -1
- package/dist/src/lib/resourcesInterface.d.ts.map +1 -1
- package/dist/src/lib/resourcesInterface.js +1 -1
- package/dist/src/lib/transaction/transaction.d.ts +17 -1
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +291 -16
- package/dist/src/lib/transactionBuilderFactory.d.ts +22 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +78 -1
- package/dist/src/lib/transferAcceptanceBuilder.d.ts +4 -4
- package/dist/src/lib/transferAcceptanceBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferAcceptanceBuilder.js +6 -6
- package/dist/src/lib/transferBuilder.d.ts +84 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +166 -2
- package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts +67 -0
- package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferOfferWithdrawnBuilder.js +130 -0
- package/dist/src/lib/transferRejectionBuilder.d.ts +59 -0
- package/dist/src/lib/transferRejectionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferRejectionBuilder.js +116 -0
- package/dist/src/lib/utils.d.ts +45 -3
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +742 -66
- package/dist/src/lib/walletInitBuilder.d.ts +2 -1
- package/dist/src/lib/walletInitBuilder.d.ts.map +1 -1
- package/dist/src/lib/walletInitBuilder.js +4 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts +2 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts.map +1 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.js +14 -1
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/test/helper.d.ts +3 -0
- package/dist/test/helper.d.ts.map +1 -0
- package/dist/test/helper.js +9 -0
- package/dist/test/integration/canton.integration.d.ts +2 -0
- package/dist/test/integration/canton.integration.d.ts.map +1 -0
- package/dist/test/integration/canton.integration.js +157 -0
- package/dist/test/integration/canton.token.integration.d.ts +2 -0
- package/dist/test/integration/canton.token.integration.d.ts.map +1 -0
- package/dist/test/integration/canton.token.integration.js +51 -0
- package/dist/test/resources.d.ts +226 -2
- package/dist/test/resources.d.ts.map +1 -1
- package/dist/test/resources.js +231 -7
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.js +360 -0
- package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.js +133 -0
- package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.js +121 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.js +407 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +340 -0
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.js +104 -0
- package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.js +74 -0
- package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts +2 -0
- package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.js +116 -0
- package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.js +20 -1
- package/dist/test/unit/builder/transfer/transferBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transfer/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transfer/transferBuilder.js +84 -0
- package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.js +65 -15
- package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.js +64 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.js +96 -0
- package/dist/test/unit/canton.d.ts +2 -0
- package/dist/test/unit/canton.d.ts.map +1 -0
- package/dist/test/unit/canton.js +705 -0
- package/dist/test/unit/index.d.ts +5 -0
- package/dist/test/unit/index.d.ts.map +1 -1
- package/dist/test/unit/index.js +6 -1
- package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts +2 -0
- package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts.map +1 -0
- package/dist/test/unit/messages/cantonSignTopologyMessage.js +46 -0
- package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts +2 -0
- package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts.map +1 -0
- package/dist/test/unit/messages/cantonSignTransactionMessage.js +48 -0
- package/dist/test/unit/messages/clearSigning.d.ts +2 -0
- package/dist/test/unit/messages/clearSigning.d.ts.map +1 -0
- package/dist/test/unit/messages/clearSigning.js +72 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
- package/dist/test/unit/utils.js +366 -9
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
9
|
+
const src_1 = require("../../../../src");
|
|
10
|
+
const updateId = '12205b0b024b6f72c5484696271e8e87d7c1e0cc7bed5e9c901088b41ebe97a09a43';
|
|
11
|
+
const operatorId = 'treasury-tokenization-1::1220906cb6b369890324880c977a44d10e91b70b4cc9abe62d031bdafcf5dabecf89';
|
|
12
|
+
const contractId = '0020108b7aee0e0215538668a7ebb00e7e811135ff2ebf23137760056e077b9347ca121220dfa25cd905caba01345b515d1002af94b0ba2a9c2e9a6751c07ed28795454a9e';
|
|
13
|
+
const tradeId = 'CASH-TRADE-662AA1BA';
|
|
14
|
+
const transferLegId = 'CASH-TRADE-662AA1BA-security-leg';
|
|
15
|
+
const senderPartyId = 'ravi-2-step-party-new::122092e7d33ac10c0f3d55976342f37555df05da5b742956d56a62ae2367769079d2';
|
|
16
|
+
const receiverPartyId = 'ravi-2-step-party::122092e7d33ac10c0f3d55976342f37555df05da5b742956d56a62ae2367769079d2';
|
|
17
|
+
const amount = 70;
|
|
18
|
+
const token = 'tcanton:testtoken';
|
|
19
|
+
const receiveToken = 'tcanton:testcoin1';
|
|
20
|
+
const receiveAmount = 80;
|
|
21
|
+
const allocateBefore = '2026-05-06T16:46:17.184609Z';
|
|
22
|
+
const settleBefore = '2026-05-07T16:46:17.184609Z';
|
|
23
|
+
const comment = 'security leg allocation';
|
|
24
|
+
// Helper to set all required fields on a builder
|
|
25
|
+
function buildWithAllRequired(txBuilder) {
|
|
26
|
+
return txBuilder
|
|
27
|
+
.updateId(updateId)
|
|
28
|
+
.operatorId(operatorId)
|
|
29
|
+
.contractId(contractId)
|
|
30
|
+
.tradeId(tradeId)
|
|
31
|
+
.transferLegId(transferLegId)
|
|
32
|
+
.senderPartyId(senderPartyId)
|
|
33
|
+
.receiverPartyId(receiverPartyId)
|
|
34
|
+
.amount(amount)
|
|
35
|
+
.token(token)
|
|
36
|
+
.receiveToken(receiveToken)
|
|
37
|
+
.receiveAmount(receiveAmount)
|
|
38
|
+
.allocateBefore(allocateBefore)
|
|
39
|
+
.settleBefore(settleBefore);
|
|
40
|
+
}
|
|
41
|
+
describe('AllocationRequest Builder', () => {
|
|
42
|
+
it('should build the allocation request object with all fields', function () {
|
|
43
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
44
|
+
const tx = new src_1.Transaction(statics_1.coins.get('tcanton'));
|
|
45
|
+
txBuilder.initBuilder(tx);
|
|
46
|
+
buildWithAllRequired(txBuilder).comment(comment);
|
|
47
|
+
const requestObj = txBuilder.toRequestObject();
|
|
48
|
+
should_1.default.exist(requestObj);
|
|
49
|
+
assert_1.default.equal(requestObj.updateId, updateId);
|
|
50
|
+
assert_1.default.equal(requestObj.operatorId, operatorId);
|
|
51
|
+
assert_1.default.equal(requestObj.contractId, contractId);
|
|
52
|
+
assert_1.default.equal(requestObj.tradeId, tradeId);
|
|
53
|
+
assert_1.default.equal(requestObj.transferLegId, transferLegId);
|
|
54
|
+
assert_1.default.equal(requestObj.senderPartyId, senderPartyId);
|
|
55
|
+
assert_1.default.equal(requestObj.receiverPartyId, receiverPartyId);
|
|
56
|
+
assert_1.default.equal(requestObj.amount, amount);
|
|
57
|
+
assert_1.default.equal(requestObj.token, token);
|
|
58
|
+
assert_1.default.equal(requestObj.receiveToken, receiveToken);
|
|
59
|
+
assert_1.default.equal(requestObj.receiveAmount, receiveAmount);
|
|
60
|
+
assert_1.default.equal(requestObj.allocateBefore, allocateBefore);
|
|
61
|
+
assert_1.default.equal(requestObj.settleBefore, settleBefore);
|
|
62
|
+
assert_1.default.equal(requestObj.comment, comment);
|
|
63
|
+
});
|
|
64
|
+
it('should build the allocation request object without optional comment', function () {
|
|
65
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
66
|
+
const tx = new src_1.Transaction(statics_1.coins.get('tcanton'));
|
|
67
|
+
txBuilder.initBuilder(tx);
|
|
68
|
+
buildWithAllRequired(txBuilder);
|
|
69
|
+
const requestObj = txBuilder.toRequestObject();
|
|
70
|
+
should_1.default.exist(requestObj);
|
|
71
|
+
assert_1.default.equal(requestObj.comment, undefined);
|
|
72
|
+
});
|
|
73
|
+
it('should set the transaction id to the updateId', function () {
|
|
74
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
75
|
+
const tx = new src_1.Transaction(statics_1.coins.get('tcanton'));
|
|
76
|
+
txBuilder.initBuilder(tx);
|
|
77
|
+
txBuilder.updateId(updateId);
|
|
78
|
+
assert_1.default.equal(tx.id, updateId);
|
|
79
|
+
});
|
|
80
|
+
// --- missing required field tests ---
|
|
81
|
+
it('should throw if updateId is missing', function () {
|
|
82
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
83
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
84
|
+
txBuilder
|
|
85
|
+
.operatorId(operatorId)
|
|
86
|
+
.contractId(contractId)
|
|
87
|
+
.tradeId(tradeId)
|
|
88
|
+
.transferLegId(transferLegId)
|
|
89
|
+
.senderPartyId(senderPartyId)
|
|
90
|
+
.receiverPartyId(receiverPartyId)
|
|
91
|
+
.amount(amount)
|
|
92
|
+
.token(token)
|
|
93
|
+
.receiveToken(receiveToken)
|
|
94
|
+
.receiveAmount(receiveAmount)
|
|
95
|
+
.allocateBefore(allocateBefore)
|
|
96
|
+
.settleBefore(settleBefore);
|
|
97
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /updateId is missing/);
|
|
98
|
+
});
|
|
99
|
+
it('should throw if operatorId is missing', function () {
|
|
100
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
101
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
102
|
+
txBuilder
|
|
103
|
+
.updateId(updateId)
|
|
104
|
+
.contractId(contractId)
|
|
105
|
+
.tradeId(tradeId)
|
|
106
|
+
.transferLegId(transferLegId)
|
|
107
|
+
.senderPartyId(senderPartyId)
|
|
108
|
+
.receiverPartyId(receiverPartyId)
|
|
109
|
+
.amount(amount)
|
|
110
|
+
.token(token)
|
|
111
|
+
.receiveToken(receiveToken)
|
|
112
|
+
.receiveAmount(receiveAmount)
|
|
113
|
+
.allocateBefore(allocateBefore)
|
|
114
|
+
.settleBefore(settleBefore);
|
|
115
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /operatorId is missing/);
|
|
116
|
+
});
|
|
117
|
+
it('should throw if contractId is missing', function () {
|
|
118
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
119
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
120
|
+
txBuilder
|
|
121
|
+
.updateId(updateId)
|
|
122
|
+
.operatorId(operatorId)
|
|
123
|
+
.tradeId(tradeId)
|
|
124
|
+
.transferLegId(transferLegId)
|
|
125
|
+
.senderPartyId(senderPartyId)
|
|
126
|
+
.receiverPartyId(receiverPartyId)
|
|
127
|
+
.amount(amount)
|
|
128
|
+
.token(token)
|
|
129
|
+
.receiveToken(receiveToken)
|
|
130
|
+
.receiveAmount(receiveAmount)
|
|
131
|
+
.allocateBefore(allocateBefore)
|
|
132
|
+
.settleBefore(settleBefore);
|
|
133
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /contractId is missing/);
|
|
134
|
+
});
|
|
135
|
+
it('should throw if tradeId is missing', function () {
|
|
136
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
137
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
138
|
+
txBuilder
|
|
139
|
+
.updateId(updateId)
|
|
140
|
+
.operatorId(operatorId)
|
|
141
|
+
.contractId(contractId)
|
|
142
|
+
.transferLegId(transferLegId)
|
|
143
|
+
.senderPartyId(senderPartyId)
|
|
144
|
+
.receiverPartyId(receiverPartyId)
|
|
145
|
+
.amount(amount)
|
|
146
|
+
.token(token)
|
|
147
|
+
.receiveToken(receiveToken)
|
|
148
|
+
.receiveAmount(receiveAmount)
|
|
149
|
+
.allocateBefore(allocateBefore)
|
|
150
|
+
.settleBefore(settleBefore);
|
|
151
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /tradeId is missing/);
|
|
152
|
+
});
|
|
153
|
+
it('should throw if transferLegId is missing', function () {
|
|
154
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
155
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
156
|
+
txBuilder
|
|
157
|
+
.updateId(updateId)
|
|
158
|
+
.operatorId(operatorId)
|
|
159
|
+
.contractId(contractId)
|
|
160
|
+
.tradeId(tradeId)
|
|
161
|
+
.senderPartyId(senderPartyId)
|
|
162
|
+
.receiverPartyId(receiverPartyId)
|
|
163
|
+
.amount(amount)
|
|
164
|
+
.token(token)
|
|
165
|
+
.receiveToken(receiveToken)
|
|
166
|
+
.receiveAmount(receiveAmount)
|
|
167
|
+
.allocateBefore(allocateBefore)
|
|
168
|
+
.settleBefore(settleBefore);
|
|
169
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /transferLegId is missing/);
|
|
170
|
+
});
|
|
171
|
+
it('should throw if senderPartyId is missing', function () {
|
|
172
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
173
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
174
|
+
txBuilder
|
|
175
|
+
.updateId(updateId)
|
|
176
|
+
.operatorId(operatorId)
|
|
177
|
+
.contractId(contractId)
|
|
178
|
+
.tradeId(tradeId)
|
|
179
|
+
.transferLegId(transferLegId)
|
|
180
|
+
.receiverPartyId(receiverPartyId)
|
|
181
|
+
.amount(amount)
|
|
182
|
+
.token(token)
|
|
183
|
+
.receiveToken(receiveToken)
|
|
184
|
+
.receiveAmount(receiveAmount)
|
|
185
|
+
.allocateBefore(allocateBefore)
|
|
186
|
+
.settleBefore(settleBefore);
|
|
187
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /senderPartyId is missing/);
|
|
188
|
+
});
|
|
189
|
+
it('should throw if receiverPartyId is missing', function () {
|
|
190
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
191
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
192
|
+
txBuilder
|
|
193
|
+
.updateId(updateId)
|
|
194
|
+
.operatorId(operatorId)
|
|
195
|
+
.contractId(contractId)
|
|
196
|
+
.tradeId(tradeId)
|
|
197
|
+
.transferLegId(transferLegId)
|
|
198
|
+
.senderPartyId(senderPartyId)
|
|
199
|
+
.amount(amount)
|
|
200
|
+
.token(token)
|
|
201
|
+
.receiveToken(receiveToken)
|
|
202
|
+
.receiveAmount(receiveAmount)
|
|
203
|
+
.allocateBefore(allocateBefore)
|
|
204
|
+
.settleBefore(settleBefore);
|
|
205
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /receiverPartyId is missing/);
|
|
206
|
+
});
|
|
207
|
+
it('should throw if token is missing', function () {
|
|
208
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
209
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
210
|
+
txBuilder
|
|
211
|
+
.updateId(updateId)
|
|
212
|
+
.operatorId(operatorId)
|
|
213
|
+
.contractId(contractId)
|
|
214
|
+
.tradeId(tradeId)
|
|
215
|
+
.transferLegId(transferLegId)
|
|
216
|
+
.senderPartyId(senderPartyId)
|
|
217
|
+
.receiverPartyId(receiverPartyId)
|
|
218
|
+
.amount(amount)
|
|
219
|
+
.receiveToken(receiveToken)
|
|
220
|
+
.receiveAmount(receiveAmount)
|
|
221
|
+
.allocateBefore(allocateBefore)
|
|
222
|
+
.settleBefore(settleBefore);
|
|
223
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /token is missing/);
|
|
224
|
+
});
|
|
225
|
+
it('should throw if receiveToken is missing', function () {
|
|
226
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
227
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
228
|
+
txBuilder
|
|
229
|
+
.updateId(updateId)
|
|
230
|
+
.operatorId(operatorId)
|
|
231
|
+
.contractId(contractId)
|
|
232
|
+
.tradeId(tradeId)
|
|
233
|
+
.transferLegId(transferLegId)
|
|
234
|
+
.senderPartyId(senderPartyId)
|
|
235
|
+
.receiverPartyId(receiverPartyId)
|
|
236
|
+
.amount(amount)
|
|
237
|
+
.token(token)
|
|
238
|
+
.receiveAmount(receiveAmount)
|
|
239
|
+
.allocateBefore(allocateBefore)
|
|
240
|
+
.settleBefore(settleBefore);
|
|
241
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /receiveToken is missing/);
|
|
242
|
+
});
|
|
243
|
+
it('should throw if amount was never set', function () {
|
|
244
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
245
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
246
|
+
txBuilder
|
|
247
|
+
.updateId(updateId)
|
|
248
|
+
.operatorId(operatorId)
|
|
249
|
+
.contractId(contractId)
|
|
250
|
+
.tradeId(tradeId)
|
|
251
|
+
.transferLegId(transferLegId)
|
|
252
|
+
.senderPartyId(senderPartyId)
|
|
253
|
+
.receiverPartyId(receiverPartyId)
|
|
254
|
+
.token(token)
|
|
255
|
+
.receiveToken(receiveToken)
|
|
256
|
+
.receiveAmount(receiveAmount)
|
|
257
|
+
.allocateBefore(allocateBefore)
|
|
258
|
+
.settleBefore(settleBefore);
|
|
259
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /amount is missing/);
|
|
260
|
+
});
|
|
261
|
+
it('should throw if receiveAmount was never set', function () {
|
|
262
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
263
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
264
|
+
txBuilder
|
|
265
|
+
.updateId(updateId)
|
|
266
|
+
.operatorId(operatorId)
|
|
267
|
+
.contractId(contractId)
|
|
268
|
+
.tradeId(tradeId)
|
|
269
|
+
.transferLegId(transferLegId)
|
|
270
|
+
.senderPartyId(senderPartyId)
|
|
271
|
+
.receiverPartyId(receiverPartyId)
|
|
272
|
+
.amount(amount)
|
|
273
|
+
.token(token)
|
|
274
|
+
.receiveToken(receiveToken)
|
|
275
|
+
.allocateBefore(allocateBefore)
|
|
276
|
+
.settleBefore(settleBefore);
|
|
277
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /receiveAmount is missing/);
|
|
278
|
+
});
|
|
279
|
+
it('should throw if allocateBefore is missing', function () {
|
|
280
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
281
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
282
|
+
txBuilder
|
|
283
|
+
.updateId(updateId)
|
|
284
|
+
.operatorId(operatorId)
|
|
285
|
+
.contractId(contractId)
|
|
286
|
+
.tradeId(tradeId)
|
|
287
|
+
.transferLegId(transferLegId)
|
|
288
|
+
.senderPartyId(senderPartyId)
|
|
289
|
+
.receiverPartyId(receiverPartyId)
|
|
290
|
+
.amount(amount)
|
|
291
|
+
.token(token)
|
|
292
|
+
.receiveToken(receiveToken)
|
|
293
|
+
.receiveAmount(receiveAmount)
|
|
294
|
+
.settleBefore(settleBefore);
|
|
295
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /allocateBefore is missing/);
|
|
296
|
+
});
|
|
297
|
+
it('should throw if settleBefore is missing', function () {
|
|
298
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
299
|
+
txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
|
|
300
|
+
txBuilder
|
|
301
|
+
.updateId(updateId)
|
|
302
|
+
.operatorId(operatorId)
|
|
303
|
+
.contractId(contractId)
|
|
304
|
+
.tradeId(tradeId)
|
|
305
|
+
.transferLegId(transferLegId)
|
|
306
|
+
.senderPartyId(senderPartyId)
|
|
307
|
+
.receiverPartyId(receiverPartyId)
|
|
308
|
+
.amount(amount)
|
|
309
|
+
.token(token)
|
|
310
|
+
.receiveToken(receiveToken)
|
|
311
|
+
.receiveAmount(receiveAmount)
|
|
312
|
+
.allocateBefore(allocateBefore);
|
|
313
|
+
assert_1.default.throws(() => txBuilder.toRequestObject(), /settleBefore is missing/);
|
|
314
|
+
});
|
|
315
|
+
// --- invalid setter argument tests ---
|
|
316
|
+
it('should throw if updateId is an empty string', function () {
|
|
317
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
318
|
+
assert_1.default.throws(() => txBuilder.updateId(''), /updateId must be a non-empty string/);
|
|
319
|
+
});
|
|
320
|
+
it('should throw if operatorId is an empty string', function () {
|
|
321
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
322
|
+
assert_1.default.throws(() => txBuilder.operatorId(''), /operatorId must be a non-empty string/);
|
|
323
|
+
});
|
|
324
|
+
it('should throw if contractId is an empty string', function () {
|
|
325
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
326
|
+
assert_1.default.throws(() => txBuilder.contractId(''), /contractId must be a non-empty string/);
|
|
327
|
+
});
|
|
328
|
+
it('should accept null contractId and omit it from the request object', function () {
|
|
329
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
330
|
+
const tx = new src_1.Transaction(statics_1.coins.get('tcanton'));
|
|
331
|
+
txBuilder.initBuilder(tx);
|
|
332
|
+
txBuilder
|
|
333
|
+
.updateId(updateId)
|
|
334
|
+
.operatorId(operatorId)
|
|
335
|
+
.contractId(null)
|
|
336
|
+
.tradeId(tradeId)
|
|
337
|
+
.transferLegId(transferLegId)
|
|
338
|
+
.senderPartyId(senderPartyId)
|
|
339
|
+
.receiverPartyId(receiverPartyId)
|
|
340
|
+
.amount(amount)
|
|
341
|
+
.token(token)
|
|
342
|
+
.receiveToken(receiveToken)
|
|
343
|
+
.receiveAmount(receiveAmount)
|
|
344
|
+
.allocateBefore(allocateBefore)
|
|
345
|
+
.settleBefore(settleBefore);
|
|
346
|
+
const requestObj = txBuilder.toRequestObject();
|
|
347
|
+
assert_1.default.equal(requestObj.contractId, undefined, 'contractId should be absent when set to null');
|
|
348
|
+
});
|
|
349
|
+
it('should throw if tradeId is an empty string', function () {
|
|
350
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
351
|
+
assert_1.default.throws(() => txBuilder.tradeId(''), /tradeId must be a non-empty string/);
|
|
352
|
+
});
|
|
353
|
+
it('should throw if transferLegId is an empty string', function () {
|
|
354
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
355
|
+
assert_1.default.throws(() => txBuilder.transferLegId(''), /transferLegId must be a non-empty string/);
|
|
356
|
+
});
|
|
357
|
+
it('should throw if senderPartyId is an empty string', function () {
|
|
358
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
359
|
+
assert_1.default.throws(() => txBuilder.senderPartyId(''), /senderPartyId must be a non-empty string/);
|
|
360
|
+
});
|
|
361
|
+
it('should throw if receiverPartyId is an empty string', function () {
|
|
362
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
363
|
+
assert_1.default.throws(() => txBuilder.receiverPartyId(''), /receiverPartyId must be a non-empty string/);
|
|
364
|
+
});
|
|
365
|
+
it('should throw if amount is zero', function () {
|
|
366
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
367
|
+
assert_1.default.throws(() => txBuilder.amount(0), /amount must be a positive number/);
|
|
368
|
+
});
|
|
369
|
+
it('should throw if amount is negative', function () {
|
|
370
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
371
|
+
assert_1.default.throws(() => txBuilder.amount(-5), /amount must be a positive number/);
|
|
372
|
+
});
|
|
373
|
+
it('should throw if token is an empty string', function () {
|
|
374
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
375
|
+
assert_1.default.throws(() => txBuilder.token(''), /token must be a non-empty string/);
|
|
376
|
+
});
|
|
377
|
+
it('should throw if receiveToken is an empty string', function () {
|
|
378
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
379
|
+
assert_1.default.throws(() => txBuilder.receiveToken(''), /receiveToken must be a non-empty string/);
|
|
380
|
+
});
|
|
381
|
+
it('should throw if receiveAmount is zero', function () {
|
|
382
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
383
|
+
assert_1.default.throws(() => txBuilder.receiveAmount(0), /receiveAmount must be a positive number/);
|
|
384
|
+
});
|
|
385
|
+
it('should throw if receiveAmount is negative', function () {
|
|
386
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
387
|
+
assert_1.default.throws(() => txBuilder.receiveAmount(-1), /receiveAmount must be a positive number/);
|
|
388
|
+
});
|
|
389
|
+
it('should throw if allocateBefore is an empty string', function () {
|
|
390
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
391
|
+
assert_1.default.throws(() => txBuilder.allocateBefore(''), /allocateBefore must be a non-empty string/);
|
|
392
|
+
});
|
|
393
|
+
it('should throw if settleBefore is an empty string', function () {
|
|
394
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
395
|
+
assert_1.default.throws(() => txBuilder.settleBefore(''), /settleBefore must be a non-empty string/);
|
|
396
|
+
});
|
|
397
|
+
// --- not-implemented methods ---
|
|
398
|
+
it('should throw on setTransaction', function () {
|
|
399
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
400
|
+
assert_1.default.throws(() => txBuilder.setTransaction({}), /Not implemented/);
|
|
401
|
+
});
|
|
402
|
+
it('should throw on addSignature', function () {
|
|
403
|
+
const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
|
|
404
|
+
assert_1.default.throws(() => txBuilder.addSignature({}, Buffer.from('')), /Not implemented/);
|
|
405
|
+
});
|
|
406
|
+
});
|
|
407
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2J1aWxkZXIvYWxsb2NhdGlvblJlcXVlc3QvYWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUU1QixpREFBNEM7QUFFNUMseUNBQXdFO0FBR3hFLE1BQU0sUUFBUSxHQUFHLHNFQUFzRSxDQUFDO0FBQ3hGLE1BQU0sVUFBVSxHQUFHLCtGQUErRixDQUFDO0FBQ25ILE1BQU0sVUFBVSxHQUNkLDRJQUE0SSxDQUFDO0FBQy9JLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDO0FBQ3RDLE1BQU0sYUFBYSxHQUFHLGtDQUFrQyxDQUFDO0FBQ3pELE1BQU0sYUFBYSxHQUFHLDZGQUE2RixDQUFDO0FBQ3BILE1BQU0sZUFBZSxHQUFHLHlGQUF5RixDQUFDO0FBQ2xILE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQztBQUN6QyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxjQUFjLEdBQUcsNkJBQTZCLENBQUM7QUFDckQsTUFBTSxZQUFZLEdBQUcsNkJBQTZCLENBQUM7QUFDbkQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUM7QUFFMUMsaURBQWlEO0FBQ2pELFNBQVMsb0JBQW9CLENBQUMsU0FBbUM7SUFDL0QsT0FBTyxTQUFTO1NBQ2IsUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUNsQixVQUFVLENBQUMsVUFBVSxDQUFDO1NBQ3RCLFVBQVUsQ0FBQyxVQUFVLENBQUM7U0FDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUNoQixhQUFhLENBQUMsYUFBYSxDQUFDO1NBQzVCLGFBQWEsQ0FBQyxh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RixDQUFDLENBQUMsQ0FBQztJQUVILGtDQUFrQztJQUVsQyxFQUFFLENBQUMsZ0NBQWdDLEVBQUU7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSw4QkFBd0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDckUsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFTLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUksOEJBQXdCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmltcG9ydCB7IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlciwgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgQWxsb2NhdGlvblJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcblxuY29uc3QgdXBkYXRlSWQgPSAnMTIyMDViMGIwMjRiNmY3MmM1NDg0Njk2MjcxZThlODdkN2MxZTBjYzdiZWQ1ZTljOTAxMDg4YjQxZWJlOTdhMDlhNDMnO1xuY29uc3Qgb3BlcmF0b3JJZCA9ICd0cmVhc3VyeS10b2tlbml6YXRpb24tMTo6MTIyMDkwNmNiNmIzNjk4OTAzMjQ4ODBjOTc3YTQ0ZDEwZTkxYjcwYjRjYzlhYmU2MmQwMzFiZGFmY2Y1ZGFiZWNmODknO1xuY29uc3QgY29udHJhY3RJZCA9XG4gICcwMDIwMTA4YjdhZWUwZTAyMTU1Mzg2NjhhN2ViYjAwZTdlODExMTM1ZmYyZWJmMjMxMzc3NjAwNTZlMDc3YjkzNDdjYTEyMTIyMGRmYTI1Y2Q5MDVjYWJhMDEzNDViNTE1ZDEwMDJhZjk0YjBiYTJhOWMyZTlhNjc1MWMwN2VkMjg3OTU0NTRhOWUnO1xuY29uc3QgdHJhZGVJZCA9ICdDQVNILVRSQURFLTY2MkFBMUJBJztcbmNvbnN0IHRyYW5zZmVyTGVnSWQgPSAnQ0FTSC1UUkFERS02NjJBQTFCQS1zZWN1cml0eS1sZWcnO1xuY29uc3Qgc2VuZGVyUGFydHlJZCA9ICdyYXZpLTItc3RlcC1wYXJ0eS1uZXc6OjEyMjA5MmU3ZDMzYWMxMGMwZjNkNTU5NzYzNDJmMzc1NTVkZjA1ZGE1Yjc0Mjk1NmQ1NmE2MmFlMjM2Nzc2OTA3OWQyJztcbmNvbnN0IHJlY2VpdmVyUGFydHlJZCA9ICdyYXZpLTItc3RlcC1wYXJ0eTo6MTIyMDkyZTdkMzNhYzEwYzBmM2Q1NTk3NjM0MmYzNzU1NWRmMDVkYTViNzQyOTU2ZDU2YTYyYWUyMzY3NzY5MDc5ZDInO1xuY29uc3QgYW1vdW50ID0gNzA7XG5jb25zdCB0b2tlbiA9ICd0Y2FudG9uOnRlc3R0b2tlbic7XG5jb25zdCByZWNlaXZlVG9rZW4gPSAndGNhbnRvbjp0ZXN0Y29pbjEnO1xuY29uc3QgcmVjZWl2ZUFtb3VudCA9IDgwO1xuY29uc3QgYWxsb2NhdGVCZWZvcmUgPSAnMjAyNi0wNS0wNlQxNjo0NjoxNy4xODQ2MDlaJztcbmNvbnN0IHNldHRsZUJlZm9yZSA9ICcyMDI2LTA1LTA3VDE2OjQ2OjE3LjE4NDYwOVonO1xuY29uc3QgY29tbWVudCA9ICdzZWN1cml0eSBsZWcgYWxsb2NhdGlvbic7XG5cbi8vIEhlbHBlciB0byBzZXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBvbiBhIGJ1aWxkZXJcbmZ1bmN0aW9uIGJ1aWxkV2l0aEFsbFJlcXVpcmVkKHR4QnVpbGRlcjogQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKTogQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyIHtcbiAgcmV0dXJuIHR4QnVpbGRlclxuICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgLnJlY2VpdmVyUGFydHlJZChyZWNlaXZlclBhcnR5SWQpXG4gICAgLmFtb3VudChhbW91bnQpXG4gICAgLnRva2VuKHRva2VuKVxuICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcbn1cblxuZGVzY3JpYmUoJ0FsbG9jYXRpb25SZXF1ZXN0IEJ1aWxkZXInLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgYnVpbGQgdGhlIGFsbG9jYXRpb24gcmVxdWVzdCBvYmplY3Qgd2l0aCBhbGwgZmllbGRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGJ1aWxkV2l0aEFsbFJlcXVpcmVkKHR4QnVpbGRlcikuY29tbWVudChjb21tZW50KTtcbiAgICBjb25zdCByZXF1ZXN0T2JqOiBBbGxvY2F0aW9uUmVxdWVzdCA9IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKTtcbiAgICBzaG91bGQuZXhpc3QocmVxdWVzdE9iaik7XG4gICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RPYmoudXBkYXRlSWQsIHVwZGF0ZUlkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5vcGVyYXRvcklkLCBvcGVyYXRvcklkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5jb250cmFjdElkLCBjb250cmFjdElkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai50cmFkZUlkLCB0cmFkZUlkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai50cmFuc2ZlckxlZ0lkLCB0cmFuc2ZlckxlZ0lkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5zZW5kZXJQYXJ0eUlkLCBzZW5kZXJQYXJ0eUlkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5yZWNlaXZlclBhcnR5SWQsIHJlY2VpdmVyUGFydHlJZCk7XG4gICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RPYmouYW1vdW50LCBhbW91bnQpO1xuICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0T2JqLnRva2VuLCB0b2tlbik7XG4gICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RPYmoucmVjZWl2ZVRva2VuLCByZWNlaXZlVG9rZW4pO1xuICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0T2JqLnJlY2VpdmVBbW91bnQsIHJlY2VpdmVBbW91bnQpO1xuICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0T2JqLmFsbG9jYXRlQmVmb3JlLCBhbGxvY2F0ZUJlZm9yZSk7XG4gICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RPYmouc2V0dGxlQmVmb3JlLCBzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0T2JqLmNvbW1lbnQsIGNvbW1lbnQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIHRoZSBhbGxvY2F0aW9uIHJlcXVlc3Qgb2JqZWN0IHdpdGhvdXQgb3B0aW9uYWwgY29tbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICBidWlsZFdpdGhBbGxSZXF1aXJlZCh0eEJ1aWxkZXIpO1xuICAgIGNvbnN0IHJlcXVlc3RPYmo6IEFsbG9jYXRpb25SZXF1ZXN0ID0gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpO1xuICAgIHNob3VsZC5leGlzdChyZXF1ZXN0T2JqKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5jb21tZW50LCB1bmRlZmluZWQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNldCB0aGUgdHJhbnNhY3Rpb24gaWQgdG8gdGhlIHVwZGF0ZUlkJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHR4QnVpbGRlci51cGRhdGVJZCh1cGRhdGVJZCk7XG4gICAgYXNzZXJ0LmVxdWFsKHR4LmlkLCB1cGRhdGVJZCk7XG4gIH0pO1xuXG4gIC8vIC0tLSBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkIHRlc3RzIC0tLVxuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgdXBkYXRlSWQgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIobmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKSk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgICAgLmNvbnRyYWN0SWQoY29udHJhY3RJZClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCksIC91cGRhdGVJZCBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgb3BlcmF0b3JJZCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpKTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgICAudHJhZGVJZCh0cmFkZUlkKVxuICAgICAgLnRyYW5zZmVyTGVnSWQodHJhbnNmZXJMZWdJZClcbiAgICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgICAucmVjZWl2ZXJQYXJ0eUlkKHJlY2VpdmVyUGFydHlJZClcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVUb2tlbihyZWNlaXZlVG9rZW4pXG4gICAgICAucmVjZWl2ZUFtb3VudChyZWNlaXZlQW1vdW50KVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgICAgLnNldHRsZUJlZm9yZShzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvb3BlcmF0b3JJZCBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgY29udHJhY3RJZCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpKTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAudHJhZGVJZCh0cmFkZUlkKVxuICAgICAgLnRyYW5zZmVyTGVnSWQodHJhbnNmZXJMZWdJZClcbiAgICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgICAucmVjZWl2ZXJQYXJ0eUlkKHJlY2VpdmVyUGFydHlJZClcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVUb2tlbihyZWNlaXZlVG9rZW4pXG4gICAgICAucmVjZWl2ZUFtb3VudChyZWNlaXZlQW1vdW50KVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgICAgLnNldHRsZUJlZm9yZShzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvY29udHJhY3RJZCBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgdHJhZGVJZCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpKTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAuY29udHJhY3RJZChjb250cmFjdElkKVxuICAgICAgLnRyYW5zZmVyTGVnSWQodHJhbnNmZXJMZWdJZClcbiAgICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgICAucmVjZWl2ZXJQYXJ0eUlkKHJlY2VpdmVyUGFydHlJZClcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVUb2tlbihyZWNlaXZlVG9rZW4pXG4gICAgICAucmVjZWl2ZUFtb3VudChyZWNlaXZlQW1vdW50KVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgICAgLnNldHRsZUJlZm9yZShzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvdHJhZGVJZCBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgdHJhbnNmZXJMZWdJZCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpKTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAuY29udHJhY3RJZChjb250cmFjdElkKVxuICAgICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgICAucmVjZWl2ZXJQYXJ0eUlkKHJlY2VpdmVyUGFydHlJZClcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVUb2tlbihyZWNlaXZlVG9rZW4pXG4gICAgICAucmVjZWl2ZUFtb3VudChyZWNlaXZlQW1vdW50KVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgICAgLnNldHRsZUJlZm9yZShzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvdHJhbnNmZXJMZWdJZCBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgc2VuZGVyUGFydHlJZCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpKTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAuY29udHJhY3RJZChjb250cmFjdElkKVxuICAgICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAgIC50cmFuc2ZlckxlZ0lkKHRyYW5zZmVyTGVnSWQpXG4gICAgICAucmVjZWl2ZXJQYXJ0eUlkKHJlY2VpdmVyUGFydHlJZClcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVUb2tlbihyZWNlaXZlVG9rZW4pXG4gICAgICAucmVjZWl2ZUFtb3VudChyZWNlaXZlQW1vdW50KVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgICAgLnNldHRsZUJlZm9yZShzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvc2VuZGVyUGFydHlJZCBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgcmVjZWl2ZXJQYXJ0eUlkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLm9wZXJhdG9ySWQob3BlcmF0b3JJZClcbiAgICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgICAudHJhZGVJZCh0cmFkZUlkKVxuICAgICAgLnRyYW5zZmVyTGVnSWQodHJhbnNmZXJMZWdJZClcbiAgICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgIC50b2tlbih0b2tlbilcbiAgICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgICAgLnJlY2VpdmVBbW91bnQocmVjZWl2ZUFtb3VudClcbiAgICAgIC5hbGxvY2F0ZUJlZm9yZShhbGxvY2F0ZUJlZm9yZSlcbiAgICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKSwgL3JlY2VpdmVyUGFydHlJZCBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgdG9rZW4gaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIobmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKSk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAudXBkYXRlSWQodXBkYXRlSWQpXG4gICAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgICAgLmNvbnRyYWN0SWQoY29udHJhY3RJZClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCksIC90b2tlbiBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgcmVjZWl2ZVRva2VuIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLm9wZXJhdG9ySWQob3BlcmF0b3JJZClcbiAgICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgICAudHJhZGVJZCh0cmFkZUlkKVxuICAgICAgLnRyYW5zZmVyTGVnSWQodHJhbnNmZXJMZWdJZClcbiAgICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgICAucmVjZWl2ZXJQYXJ0eUlkKHJlY2VpdmVyUGFydHlJZClcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVBbW91bnQocmVjZWl2ZUFtb3VudClcbiAgICAgIC5hbGxvY2F0ZUJlZm9yZShhbGxvY2F0ZUJlZm9yZSlcbiAgICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKSwgL3JlY2VpdmVUb2tlbiBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgYW1vdW50IHdhcyBuZXZlciBzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLm9wZXJhdG9ySWQob3BlcmF0b3JJZClcbiAgICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgICAudHJhZGVJZCh0cmFkZUlkKVxuICAgICAgLnRyYW5zZmVyTGVnSWQodHJhbnNmZXJMZWdJZClcbiAgICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgICAucmVjZWl2ZXJQYXJ0eUlkKHJlY2VpdmVyUGFydHlJZClcbiAgICAgIC50b2tlbih0b2tlbilcbiAgICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgICAgLnJlY2VpdmVBbW91bnQocmVjZWl2ZUFtb3VudClcbiAgICAgIC5hbGxvY2F0ZUJlZm9yZShhbGxvY2F0ZUJlZm9yZSlcbiAgICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKSwgL2Ftb3VudCBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgcmVjZWl2ZUFtb3VudCB3YXMgbmV2ZXIgc2V0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpKTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAuY29udHJhY3RJZChjb250cmFjdElkKVxuICAgICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAgIC50cmFuc2ZlckxlZ0lkKHRyYW5zZmVyTGVnSWQpXG4gICAgICAuc2VuZGVyUGFydHlJZChzZW5kZXJQYXJ0eUlkKVxuICAgICAgLnJlY2VpdmVyUGFydHlJZChyZWNlaXZlclBhcnR5SWQpXG4gICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgIC50b2tlbih0b2tlbilcbiAgICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgICAgLnNldHRsZUJlZm9yZShzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvcmVjZWl2ZUFtb3VudCBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgYWxsb2NhdGVCZWZvcmUgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIobmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKSk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAudXBkYXRlSWQodXBkYXRlSWQpXG4gICAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgICAgLmNvbnRyYWN0SWQoY29udHJhY3RJZClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCksIC9hbGxvY2F0ZUJlZm9yZSBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgc2V0dGxlQmVmb3JlIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLm9wZXJhdG9ySWQob3BlcmF0b3JJZClcbiAgICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgICAudHJhZGVJZCh0cmFkZUlkKVxuICAgICAgLnRyYW5zZmVyTGVnSWQodHJhbnNmZXJMZWdJZClcbiAgICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgICAucmVjZWl2ZXJQYXJ0eUlkKHJlY2VpdmVyUGFydHlJZClcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVUb2tlbihyZWNlaXZlVG9rZW4pXG4gICAgICAucmVjZWl2ZUFtb3VudChyZWNlaXZlQW1vdW50KVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKSwgL3NldHRsZUJlZm9yZSBpcyBtaXNzaW5nLyk7XG4gIH0pO1xuXG4gIC8vIC0tLSBpbnZhbGlkIHNldHRlciBhcmd1bWVudCB0ZXN0cyAtLS1cblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHVwZGF0ZUlkIGlzIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci51cGRhdGVJZCgnJyksIC91cGRhdGVJZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIG9wZXJhdG9ySWQgaXMgYW4gZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLm9wZXJhdG9ySWQoJycpLCAvb3BlcmF0b3JJZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIGNvbnRyYWN0SWQgaXMgYW4gZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLmNvbnRyYWN0SWQoJycpLCAvY29udHJhY3RJZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFjY2VwdCBudWxsIGNvbnRyYWN0SWQgYW5kIG9taXQgaXQgZnJvbSB0aGUgcmVxdWVzdCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAudXBkYXRlSWQodXBkYXRlSWQpXG4gICAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgICAgLmNvbnRyYWN0SWQobnVsbClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgY29uc3QgcmVxdWVzdE9iajogQWxsb2NhdGlvblJlcXVlc3QgPSB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCk7XG4gICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RPYmouY29udHJhY3RJZCwgdW5kZWZpbmVkLCAnY29udHJhY3RJZCBzaG91bGQgYmUgYWJzZW50IHdoZW4gc2V0IHRvIG51bGwnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0cmFkZUlkIGlzIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50cmFkZUlkKCcnKSwgL3RyYWRlSWQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0cmFuc2ZlckxlZ0lkIGlzIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50cmFuc2ZlckxlZ0lkKCcnKSwgL3RyYW5zZmVyTGVnSWQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBzZW5kZXJQYXJ0eUlkIGlzIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5zZW5kZXJQYXJ0eUlkKCcnKSwgL3NlbmRlclBhcnR5SWQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiByZWNlaXZlclBhcnR5SWQgaXMgYW4gZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnJlY2VpdmVyUGFydHlJZCgnJyksIC9yZWNlaXZlclBhcnR5SWQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBhbW91bnQgaXMgemVybycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5hbW91bnQoMCksIC9hbW91bnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIGFtb3VudCBpcyBuZWdhdGl2ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5hbW91bnQoLTUpLCAvYW1vdW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0b2tlbiBpcyBhbiBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9rZW4oJycpLCAvdG9rZW4gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiByZWNlaXZlVG9rZW4gaXMgYW4gZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnJlY2VpdmVUb2tlbignJyksIC9yZWNlaXZlVG9rZW4gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiByZWNlaXZlQW1vdW50IGlzIHplcm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIucmVjZWl2ZUFtb3VudCgwKSwgL3JlY2VpdmVBbW91bnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHJlY2VpdmVBbW91bnQgaXMgbmVnYXRpdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIucmVjZWl2ZUFtb3VudCgtMSksIC9yZWNlaXZlQW1vdW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBhbGxvY2F0ZUJlZm9yZSBpcyBhbiBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIuYWxsb2NhdGVCZWZvcmUoJycpLCAvYWxsb2NhdGVCZWZvcmUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBzZXR0bGVCZWZvcmUgaXMgYW4gZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnNldHRsZUJlZm9yZSgnJyksIC9zZXR0bGVCZWZvcmUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgLy8gLS0tIG5vdC1pbXBsZW1lbnRlZCBtZXRob2RzIC0tLVxuXG4gIGl0KCdzaG91bGQgdGhyb3cgb24gc2V0VHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIuc2V0VHJhbnNhY3Rpb24oe30gYXMgYW55KSwgL05vdCBpbXBsZW1lbnRlZC8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IG9uIGFkZFNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5hZGRTaWduYXR1cmUoe30gYXMgYW55LCBCdWZmZXIuZnJvbSgnJykpLCAvTm90IGltcGxlbWVudGVkLyk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cantonCommandBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/builder/cantonCommand/cantonCommandBuilder.ts"],"names":[],"mappings":""}
|