@bitgo-beta/sdk-coin-dot 2.2.8-beta.132 → 2.2.8-beta.1321

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.
Files changed (112) hide show
  1. package/dist/src/dot.d.ts +8 -12
  2. package/dist/src/dot.d.ts.map +1 -1
  3. package/dist/src/dot.js +55 -41
  4. package/dist/src/index.js +6 -2
  5. package/dist/src/lib/addressInitializationBuilder.js +8 -10
  6. package/dist/src/lib/batchTransactionBuilder.d.ts +1 -0
  7. package/dist/src/lib/batchTransactionBuilder.d.ts.map +1 -1
  8. package/dist/src/lib/batchTransactionBuilder.js +21 -12
  9. package/dist/src/lib/claimBuilder.js +4 -6
  10. package/dist/src/lib/iface.d.ts +16 -13
  11. package/dist/src/lib/iface.d.ts.map +1 -1
  12. package/dist/src/lib/iface.js +5 -5
  13. package/dist/src/lib/iface_utils.js +8 -9
  14. package/dist/src/lib/index.js +23 -9
  15. package/dist/src/lib/keyPair.d.ts +7 -0
  16. package/dist/src/lib/keyPair.d.ts.map +1 -1
  17. package/dist/src/lib/keyPair.js +51 -4
  18. package/dist/src/lib/nativeTransferBuilder.js +10 -12
  19. package/dist/src/lib/proxyBuilder.js +6 -8
  20. package/dist/src/lib/singletonRegistry.js +2 -2
  21. package/dist/src/lib/stakingBuilder.js +6 -8
  22. package/dist/src/lib/transaction.d.ts +0 -1
  23. package/dist/src/lib/transaction.d.ts.map +1 -1
  24. package/dist/src/lib/transaction.js +72 -52
  25. package/dist/src/lib/transactionBuilder.d.ts +0 -1
  26. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  27. package/dist/src/lib/transactionBuilder.js +30 -16
  28. package/dist/src/lib/transactionBuilderFactory.js +3 -4
  29. package/dist/src/lib/txnSchema.js +3 -3
  30. package/dist/src/lib/unnominateBuilder.js +4 -6
  31. package/dist/src/lib/unstakeBuilder.js +4 -6
  32. package/dist/src/lib/utils.d.ts +10 -2
  33. package/dist/src/lib/utils.d.ts.map +1 -1
  34. package/dist/src/lib/utils.js +67 -34
  35. package/dist/src/lib/withdrawUnstakedBuilder.js +4 -6
  36. package/dist/src/resources/index.d.ts +2 -0
  37. package/dist/src/resources/index.d.ts.map +1 -1
  38. package/dist/src/resources/index.js +8 -2
  39. package/dist/src/resources/polkadotAssetHub.d.ts +2 -0
  40. package/dist/src/resources/polkadotAssetHub.d.ts.map +1 -0
  41. package/dist/src/resources/polkadotAssetHub.js +5 -0
  42. package/dist/src/resources/westendAssetHub.d.ts +2 -0
  43. package/dist/src/resources/westendAssetHub.d.ts.map +1 -0
  44. package/dist/src/resources/westendAssetHub.js +5 -0
  45. package/dist/src/tdot.js +1 -1
  46. package/dist/test/fixtures.d.ts +283 -0
  47. package/dist/test/fixtures.d.ts.map +1 -0
  48. package/dist/test/fixtures.js +439 -0
  49. package/dist/test/resources/index.d.ts +141 -0
  50. package/dist/test/resources/index.d.ts.map +1 -0
  51. package/dist/test/resources/index.js +157 -0
  52. package/dist/test/resources/materialData.json +8 -0
  53. package/dist/test/resources/materialDataModified.json +8 -0
  54. package/dist/test/resources/testnet.d.ts +2 -0
  55. package/dist/test/resources/testnet.d.ts.map +1 -0
  56. package/dist/test/resources/testnet.js +5 -0
  57. package/dist/test/unit/address.d.ts +2 -0
  58. package/dist/test/unit/address.d.ts.map +1 -0
  59. package/dist/test/unit/address.js +45 -0
  60. package/dist/test/unit/dot.d.ts +2 -0
  61. package/dist/test/unit/dot.d.ts.map +1 -0
  62. package/dist/test/unit/dot.js +690 -0
  63. package/dist/test/unit/keypair.d.ts +2 -0
  64. package/dist/test/unit/keypair.d.ts.map +1 -0
  65. package/dist/test/unit/keypair.js +111 -0
  66. package/dist/test/unit/transaction.d.ts +2 -0
  67. package/dist/test/unit/transaction.d.ts.map +1 -0
  68. package/dist/test/unit/transaction.js +269 -0
  69. package/dist/test/unit/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
  70. package/dist/test/unit/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  71. package/dist/test/unit/transactionBuilder/addressInitializationBuilder.js +265 -0
  72. package/dist/test/unit/transactionBuilder/base.d.ts +8 -0
  73. package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
  74. package/dist/test/unit/transactionBuilder/base.js +233 -0
  75. package/dist/test/unit/transactionBuilder/batchTransactionBuilder.d.ts +2 -0
  76. package/dist/test/unit/transactionBuilder/batchTransactionBuilder.d.ts.map +1 -0
  77. package/dist/test/unit/transactionBuilder/batchTransactionBuilder.js +521 -0
  78. package/dist/test/unit/transactionBuilder/claimBuilder.d.ts +2 -0
  79. package/dist/test/unit/transactionBuilder/claimBuilder.d.ts.map +1 -0
  80. package/dist/test/unit/transactionBuilder/claimBuilder.js +129 -0
  81. package/dist/test/unit/transactionBuilder/proxyBuilder.d.ts +2 -0
  82. package/dist/test/unit/transactionBuilder/proxyBuilder.d.ts.map +1 -0
  83. package/dist/test/unit/transactionBuilder/proxyBuilder.js +88 -0
  84. package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts +2 -0
  85. package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +1 -0
  86. package/dist/test/unit/transactionBuilder/singeltonRegistry.js +59 -0
  87. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
  88. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  89. package/dist/test/unit/transactionBuilder/stakingBuilder.js +235 -0
  90. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  91. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  92. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +107 -0
  93. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  94. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  95. package/dist/test/unit/transactionBuilder/transferBuilder.js +437 -0
  96. package/dist/test/unit/transactionBuilder/unnominateBuilder.d.ts +2 -0
  97. package/dist/test/unit/transactionBuilder/unnominateBuilder.d.ts.map +1 -0
  98. package/dist/test/unit/transactionBuilder/unnominateBuilder.js +97 -0
  99. package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts +2 -0
  100. package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +1 -0
  101. package/dist/test/unit/transactionBuilder/unstakeBuilder.js +116 -0
  102. package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts +2 -0
  103. package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts.map +1 -0
  104. package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.js +115 -0
  105. package/dist/test/unit/utils.d.ts +2 -0
  106. package/dist/test/unit/utils.d.ts.map +1 -0
  107. package/dist/test/unit/utils.js +117 -0
  108. package/dist/tsconfig.tsbuildinfo +1 -0
  109. package/package.json +20 -16
  110. package/.eslintignore +0 -5
  111. package/.mocharc.yml +0 -8
  112. package/CHANGELOG.md +0 -400
@@ -0,0 +1,521 @@
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 sinon_1 = require("sinon");
9
+ const src_1 = require("../../../src");
10
+ const iface_1 = require("../../../src/lib/iface");
11
+ const utils_1 = __importDefault(require("../../../src/lib/utils"));
12
+ const resources_1 = require("../../resources");
13
+ const base_1 = require("./base");
14
+ describe('Dot Batch Transaction Builder', () => {
15
+ let builder;
16
+ describe('setter validation', () => {
17
+ before(function () {
18
+ builder = new src_1.BatchTransactionBuilder((0, base_1.buildTestConfig)());
19
+ });
20
+ it('should validate list of calls', () => {
21
+ const call = 'invalidUnsignedTransaction';
22
+ const spyValidateCalls = (0, sinon_1.spy)(builder, 'validateCalls');
23
+ assert_1.default.throws(() => builder.calls([call]), (e) => e.message === `call in string format must be hex format of a method and its arguments`);
24
+ should_1.default.doesNotThrow(() => builder.calls(resources_1.rawTx.pureProxy.batch));
25
+ sinon_1.assert.calledTwice(spyValidateCalls);
26
+ });
27
+ });
28
+ describe('build batch transaction', function () {
29
+ const sender = resources_1.accounts.account1;
30
+ const referenceBlock = '0x462ab5246361febb9294ffa41dd099edddec30a205ea15fbd247abb0ddbabd51';
31
+ const genesisHash = '0x67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9';
32
+ beforeEach(() => {
33
+ const config = (0, base_1.buildTestConfig)();
34
+ builder = new src_1.BatchTransactionBuilder(config).material(utils_1.default.getMaterial(config));
35
+ });
36
+ describe('signed', function () {
37
+ it('should build a signed batch transaction', async () => {
38
+ builder
39
+ .calls(resources_1.rawTx.pureProxy.batch)
40
+ .sender({ address: sender.address })
41
+ .validity({ firstValid: 9279281, maxDuration: 64 })
42
+ .referenceBlock(referenceBlock)
43
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
44
+ .fee({ amount: 0, type: 'tip' })
45
+ .addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
46
+ const tx = await builder.build();
47
+ const txJson = tx.toJson();
48
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.pureProxy.batch.length);
49
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
50
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
51
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
52
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
53
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
54
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
55
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
56
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
57
+ should_1.default.deepEqual(txJson.sender, sender.address);
58
+ should_1.default.deepEqual(txJson.blockNumber, 9279281);
59
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
60
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
61
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
62
+ should_1.default.deepEqual(txJson.nonce, 0);
63
+ should_1.default.deepEqual(txJson.tip, 0);
64
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
65
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
66
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
67
+ const txHex = tx.toBroadcastFormat();
68
+ should_1.default.deepEqual(resources_1.rawTx.batch.twoAddPureProxies.signed, txHex);
69
+ });
70
+ it('should build a signed batch all transaction', async () => {
71
+ builder
72
+ .atomic(true)
73
+ .calls(resources_1.rawTx.pureProxy.batch)
74
+ .sender({ address: sender.address })
75
+ .validity({ firstValid: 9279281, maxDuration: 64 })
76
+ .referenceBlock(referenceBlock)
77
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
78
+ .fee({ amount: 0, type: 'tip' })
79
+ .addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
80
+ const tx = await builder.build();
81
+ const txJson = tx.toJson();
82
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.pureProxy.batch.length);
83
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
84
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
85
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
86
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
87
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
88
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
89
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
90
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
91
+ should_1.default.deepEqual(txJson.sender, sender.address);
92
+ should_1.default.deepEqual(txJson.blockNumber, 9279281);
93
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
94
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
95
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
96
+ should_1.default.deepEqual(txJson.nonce, 0);
97
+ should_1.default.deepEqual(txJson.tip, 0);
98
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
99
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
100
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
101
+ const txHex = tx.toBroadcastFormat();
102
+ should_1.default.deepEqual(resources_1.rawTx.batchAll.twoAddPureProxies.signed, txHex);
103
+ });
104
+ it('should build a signed staking batch all transaction', async () => {
105
+ builder
106
+ .atomic(true)
107
+ .calls(resources_1.rawTx.stake.batchAll.batch)
108
+ .sender({ address: sender.address })
109
+ .validity({ firstValid: 9266787, maxDuration: 64 })
110
+ .referenceBlock(referenceBlock)
111
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
112
+ .fee({ amount: 0, type: 'tip' })
113
+ .addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
114
+ const tx = await builder.build();
115
+ const txJson = tx.toJson();
116
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stake.batchAll.batch.length);
117
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stake.batchAll.batch[0].slice(0, 6));
118
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.value, 500000000000);
119
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.payee, { staked: null });
120
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stake.batchAll.batch[1].slice(0, 6));
121
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
122
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.STAKING);
123
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
124
+ should_1.default.deepEqual(txJson.sender, sender.address);
125
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
126
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
127
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
128
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
129
+ should_1.default.deepEqual(txJson.nonce, 0);
130
+ should_1.default.deepEqual(txJson.tip, 0);
131
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
132
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
133
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
134
+ const txHex = tx.toBroadcastFormat();
135
+ should_1.default.deepEqual(resources_1.rawTx.stake.batchAll.signed, txHex);
136
+ });
137
+ it('should build a signed unstaking batch all transaction', async () => {
138
+ builder
139
+ .atomic(true)
140
+ .calls(resources_1.rawTx.unstake.batchAll.batch)
141
+ .sender({ address: sender.address })
142
+ .validity({ firstValid: 9266787, maxDuration: 64 })
143
+ .referenceBlock(referenceBlock)
144
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
145
+ .fee({ amount: 0, type: 'tip' })
146
+ .addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
147
+ const tx = await builder.build();
148
+ const txJson = tx.toJson();
149
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.unstake.batchAll.batch.length);
150
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.unstake.batchAll.batch[0].slice(0, 6));
151
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
152
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.STAKING);
153
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
154
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.unstake.batchAll.batch[1].slice(0, 6));
155
+ should_1.default.deepEqual(txJson.batchCalls[1].args, {});
156
+ should_1.default.deepEqual(txJson.batchCalls[2].callIndex, resources_1.rawTx.unstake.batchAll.batch[2].slice(0, 6));
157
+ should_1.default.deepEqual(txJson.batchCalls[2].args?.value, 500000000000);
158
+ should_1.default.deepEqual(txJson.sender, sender.address);
159
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
160
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
161
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
162
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
163
+ should_1.default.deepEqual(txJson.nonce, 0);
164
+ should_1.default.deepEqual(txJson.tip, 0);
165
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
166
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
167
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
168
+ const txHex = tx.toBroadcastFormat();
169
+ should_1.default.deepEqual(resources_1.rawTx.unstake.batchAll.signed, txHex);
170
+ });
171
+ describe('from raw', () => {
172
+ it('should build a batch all from a raw signed tx', async () => {
173
+ builder.from(resources_1.rawTx.batchAll.twoAddPureProxies.signed);
174
+ builder.validity({ firstValid: 9279281, maxDuration: 64 }).referenceBlock(referenceBlock);
175
+ const tx = await builder.build();
176
+ const txJson = tx.toJson();
177
+ // test the call items
178
+ should_1.default.deepEqual(txJson.sender, sender.address);
179
+ should_1.default.deepEqual(txJson.batchCalls.length, 2);
180
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
181
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
182
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
183
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
184
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
185
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
186
+ should_1.default.deepEqual(txJson.blockNumber, 9279281);
187
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
188
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
189
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
190
+ should_1.default.deepEqual(txJson.nonce, 0);
191
+ should_1.default.deepEqual(txJson.tip, 0);
192
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
193
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
194
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
195
+ const txHex = tx.toBroadcastFormat();
196
+ should_1.default.deepEqual(resources_1.rawTx.batchAll.twoAddPureProxies.signed, txHex);
197
+ });
198
+ it('should build a batch all from a raw signed staking tx', async () => {
199
+ builder.from(resources_1.rawTx.stake.batchAll.signed);
200
+ builder.validity({ firstValid: 9266787, maxDuration: 64 }).referenceBlock(referenceBlock);
201
+ const tx = await builder.build();
202
+ const txJson = tx.toJson();
203
+ // test the call items
204
+ should_1.default.deepEqual(txJson.sender, sender.address);
205
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stake.batchAll.batch.length);
206
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stake.batchAll.batch[0].slice(0, 6));
207
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.value, 500000000000);
208
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.payee, { staked: null });
209
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stake.batchAll.batch[1].slice(0, 6));
210
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
211
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.STAKING);
212
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
213
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
214
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
215
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
216
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
217
+ should_1.default.deepEqual(txJson.nonce, 0);
218
+ should_1.default.deepEqual(txJson.tip, 0);
219
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
220
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
221
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
222
+ const txHex = tx.toBroadcastFormat();
223
+ should_1.default.deepEqual(resources_1.rawTx.stake.batchAll.signed, txHex);
224
+ });
225
+ it('should build a batch all from a raw signed unstaking tx', async () => {
226
+ builder.from(resources_1.rawTx.unstake.batchAll.signed);
227
+ builder.validity({ firstValid: 9266787, maxDuration: 64 }).referenceBlock(referenceBlock);
228
+ const tx = await builder.build();
229
+ const txJson = tx.toJson();
230
+ // test the call items
231
+ should_1.default.deepEqual(txJson.sender, sender.address);
232
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.unstake.batchAll.batch.length);
233
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.unstake.batchAll.batch[0].slice(0, 6));
234
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
235
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.STAKING);
236
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
237
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.unstake.batchAll.batch[1].slice(0, 6));
238
+ should_1.default.deepEqual(txJson.batchCalls[1].args, {});
239
+ should_1.default.deepEqual(txJson.batchCalls[2].callIndex, resources_1.rawTx.unstake.batchAll.batch[2].slice(0, 6));
240
+ should_1.default.deepEqual(txJson.batchCalls[2].args?.value, 500000000000);
241
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
242
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
243
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
244
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
245
+ should_1.default.deepEqual(txJson.nonce, 0);
246
+ should_1.default.deepEqual(txJson.tip, 0);
247
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
248
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
249
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
250
+ const txHex = tx.toBroadcastFormat();
251
+ should_1.default.deepEqual(resources_1.rawTx.unstake.batchAll.signed, txHex);
252
+ });
253
+ });
254
+ });
255
+ describe('unsigned', function () {
256
+ it('should build an unsigned batch transaction', async () => {
257
+ builder
258
+ .calls(resources_1.rawTx.pureProxy.batch)
259
+ .sender({ address: sender.address })
260
+ .validity({ firstValid: 9266787, maxDuration: 64 })
261
+ .referenceBlock(referenceBlock)
262
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
263
+ .fee({ amount: 0, type: 'tip' });
264
+ const tx = await builder.build();
265
+ const txJson = tx.toJson();
266
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.pureProxy.batch.length);
267
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
268
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
269
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
270
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
271
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
272
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
273
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
274
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
275
+ should_1.default.deepEqual(txJson.sender, sender.address);
276
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
277
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
278
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
279
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
280
+ should_1.default.deepEqual(txJson.nonce, 200);
281
+ should_1.default.deepEqual(txJson.tip, 0);
282
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
283
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
284
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
285
+ const txHex = tx.toBroadcastFormat();
286
+ should_1.default.deepEqual(resources_1.rawTx.batch.twoAddPureProxies.unsigned, txHex);
287
+ });
288
+ it('should build an unsigned batch all transaction', async () => {
289
+ builder
290
+ .atomic(true)
291
+ .calls(resources_1.rawTx.pureProxy.batch)
292
+ .sender({ address: sender.address })
293
+ .validity({ firstValid: 9266787, maxDuration: 64 })
294
+ .referenceBlock(referenceBlock)
295
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
296
+ .fee({ amount: 0, type: 'tip' });
297
+ const tx = await builder.build();
298
+ const txJson = tx.toJson();
299
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.pureProxy.batch.length);
300
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
301
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
302
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
303
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
304
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
305
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
306
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
307
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
308
+ should_1.default.deepEqual(txJson.sender, sender.address);
309
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
310
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
311
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
312
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
313
+ should_1.default.deepEqual(txJson.nonce, 200);
314
+ should_1.default.deepEqual(txJson.tip, 0);
315
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
316
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
317
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
318
+ const txHex = tx.toBroadcastFormat();
319
+ should_1.default.deepEqual(resources_1.rawTx.batchAll.twoAddPureProxies.unsigned, txHex);
320
+ });
321
+ it('should build an unsigned staking batch all transaction', async () => {
322
+ builder
323
+ .atomic(true)
324
+ .calls(resources_1.rawTx.stake.batchAll.batch)
325
+ .sender({ address: sender.address })
326
+ .validity({ firstValid: 9266787, maxDuration: 64 })
327
+ .referenceBlock(referenceBlock)
328
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
329
+ .fee({ amount: 0, type: 'tip' });
330
+ const tx = await builder.build();
331
+ const txJson = tx.toJson();
332
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stake.batchAll.batch.length);
333
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stake.batchAll.batch[0].slice(0, 6));
334
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.value, 500000000000);
335
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.payee, { staked: null });
336
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stake.batchAll.batch[1].slice(0, 6));
337
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
338
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.STAKING);
339
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
340
+ should_1.default.deepEqual(txJson.sender, sender.address);
341
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
342
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
343
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
344
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
345
+ should_1.default.deepEqual(txJson.nonce, 0);
346
+ should_1.default.deepEqual(txJson.tip, 0);
347
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
348
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
349
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
350
+ const txHex = tx.toBroadcastFormat();
351
+ should_1.default.deepEqual(resources_1.rawTx.stake.batchAll.unsigned, txHex);
352
+ });
353
+ it('should build an add proxy + stake more transaction', async () => {
354
+ builder
355
+ .atomic(true)
356
+ .calls(resources_1.rawTx.stakeMore.batchAll.batch)
357
+ .sender({ address: sender.address })
358
+ .validity({ firstValid: 9266787, maxDuration: 64 })
359
+ .referenceBlock(referenceBlock)
360
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
361
+ .fee({ amount: 0, type: 'tip' });
362
+ const tx = await builder.build();
363
+ should_1.default.deepEqual(tx.inputs[0].value, '90034235235322');
364
+ const txJson = tx.toJson();
365
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stakeMore.batchAll.batch.length);
366
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stakeMore.batchAll.batch[0].slice(0, 6));
367
+ should_1.default.deepEqual(txJson.batchCalls[0].args.max_additional, 90034235235322);
368
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stakeMore.batchAll.batch[1].slice(0, 6));
369
+ should_1.default.deepEqual(txJson.batchCalls[1].args.delegate, { id: resources_1.accounts.stakingProxy.address });
370
+ should_1.default.deepEqual(txJson.batchCalls[1].args.proxy_type, iface_1.ProxyType.STAKING);
371
+ should_1.default.deepEqual(txJson.batchCalls[1].args.delay, 0);
372
+ should_1.default.deepEqual(txJson.sender, sender.address);
373
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
374
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
375
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
376
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
377
+ should_1.default.deepEqual(txJson.nonce, 0);
378
+ should_1.default.deepEqual(txJson.tip, 0);
379
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
380
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
381
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
382
+ const txHex = tx.toBroadcastFormat();
383
+ should_1.default.deepEqual(resources_1.rawTx.stakeMore.batchAll.unsigned, txHex);
384
+ const factory = new src_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
385
+ const builder2 = factory.from(resources_1.rawTx.stakeMore.batchAll.unsigned);
386
+ const tx2 = await builder2
387
+ .sender({ address: sender.address })
388
+ .validity({ firstValid: 9266787, maxDuration: 64 })
389
+ .build();
390
+ should_1.default.deepEqual(tx2.inputs[0].value, '90034235235322');
391
+ const txJson2 = tx2.toJson();
392
+ should_1.default.deepEqual(txJson, txJson2);
393
+ });
394
+ it('should build an unsigned unstaking batch all transaction', async () => {
395
+ builder
396
+ .atomic(true)
397
+ .calls(resources_1.rawTx.unstake.batchAll.batch)
398
+ .sender({ address: sender.address })
399
+ .validity({ firstValid: 9266787, maxDuration: 64 })
400
+ .referenceBlock(referenceBlock)
401
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
402
+ .fee({ amount: 0, type: 'tip' });
403
+ const tx = await builder.build();
404
+ const txJson = tx.toJson();
405
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.unstake.batchAll.batch.length);
406
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.unstake.batchAll.batch[0].slice(0, 6));
407
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
408
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.STAKING);
409
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
410
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.unstake.batchAll.batch[1].slice(0, 6));
411
+ should_1.default.deepEqual(txJson.batchCalls[1].args, {});
412
+ should_1.default.deepEqual(txJson.batchCalls[2].callIndex, resources_1.rawTx.unstake.batchAll.batch[2].slice(0, 6));
413
+ should_1.default.deepEqual(txJson.batchCalls[2].args?.value, 500000000000);
414
+ should_1.default.deepEqual(txJson.sender, sender.address);
415
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
416
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
417
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
418
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
419
+ should_1.default.deepEqual(txJson.nonce, 0);
420
+ should_1.default.deepEqual(txJson.tip, 0);
421
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
422
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
423
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
424
+ const txHex = tx.toBroadcastFormat();
425
+ should_1.default.deepEqual(resources_1.rawTx.unstake.batchAll.unsigned, txHex);
426
+ });
427
+ describe('from raw', () => {
428
+ it('should build a batch all from a raw unsigned tx', async () => {
429
+ builder.from(resources_1.rawTx.batchAll.twoAddPureProxies.unsigned);
430
+ builder
431
+ .validity({ firstValid: 9266787, maxDuration: 64 })
432
+ .referenceBlock(referenceBlock)
433
+ .sender({ address: sender.address });
434
+ const tx = await builder.build();
435
+ const txJson = tx.toJson();
436
+ should_1.default.deepEqual(txJson.sender, sender.address);
437
+ should_1.default.deepEqual(txJson.batchCalls.length, 2);
438
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
439
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
440
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
441
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
442
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
443
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
444
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
445
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
446
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
447
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
448
+ should_1.default.deepEqual(txJson.nonce, 200);
449
+ should_1.default.deepEqual(txJson.tip, 0);
450
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
451
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
452
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
453
+ const txHex = tx.toBroadcastFormat();
454
+ should_1.default.deepEqual(resources_1.rawTx.batchAll.twoAddPureProxies.unsigned, txHex);
455
+ });
456
+ it('should build a batch all from a raw unsigned staking tx', async () => {
457
+ builder.from(resources_1.rawTx.stake.batchAll.unsigned);
458
+ builder
459
+ .validity({ firstValid: 9266787, maxDuration: 64 })
460
+ .referenceBlock(referenceBlock)
461
+ .sender({ address: sender.address });
462
+ const tx = await builder.build();
463
+ const txJson = tx.toJson();
464
+ // test the call items
465
+ should_1.default.deepEqual(txJson.sender, sender.address);
466
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stake.batchAll.batch.length);
467
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stake.batchAll.batch[0].slice(0, 6));
468
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.value, 500000000000);
469
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.payee, { staked: null });
470
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stake.batchAll.batch[1].slice(0, 6));
471
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
472
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.STAKING);
473
+ should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
474
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
475
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
476
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
477
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
478
+ should_1.default.deepEqual(txJson.nonce, 0);
479
+ should_1.default.deepEqual(txJson.tip, 0);
480
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
481
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
482
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
483
+ const txHex = tx.toBroadcastFormat();
484
+ should_1.default.deepEqual(resources_1.rawTx.stake.batchAll.unsigned, txHex);
485
+ });
486
+ it('should build a batch all from a raw unsigned unstaking tx', async () => {
487
+ builder.from(resources_1.rawTx.unstake.batchAll.unsigned);
488
+ builder
489
+ .validity({ firstValid: 9266787, maxDuration: 64 })
490
+ .referenceBlock(referenceBlock)
491
+ .sender({ address: sender.address });
492
+ const tx = await builder.build();
493
+ const txJson = tx.toJson();
494
+ // test the call items
495
+ should_1.default.deepEqual(txJson.sender, sender.address);
496
+ should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.unstake.batchAll.batch.length);
497
+ should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.unstake.batchAll.batch[0].slice(0, 6));
498
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
499
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.STAKING);
500
+ should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
501
+ should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.unstake.batchAll.batch[1].slice(0, 6));
502
+ should_1.default.deepEqual(txJson.batchCalls[1].args, {});
503
+ should_1.default.deepEqual(txJson.batchCalls[2].callIndex, resources_1.rawTx.unstake.batchAll.batch[2].slice(0, 6));
504
+ should_1.default.deepEqual(txJson.batchCalls[2].args?.value, 500000000000);
505
+ should_1.default.deepEqual(txJson.blockNumber, 9266787);
506
+ should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
507
+ should_1.default.deepEqual(txJson.genesisHash, genesisHash);
508
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
509
+ should_1.default.deepEqual(txJson.nonce, 0);
510
+ should_1.default.deepEqual(txJson.tip, 0);
511
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
512
+ should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
513
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
514
+ const txHex = tx.toBroadcastFormat();
515
+ should_1.default.deepEqual(resources_1.rawTx.unstake.batchAll.unsigned, txHex);
516
+ });
517
+ });
518
+ });
519
+ });
520
+ });
521
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2JhdGNoVHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixpQ0FBbUQ7QUFDbkQsc0NBQWtGO0FBQ2xGLGtEQUFtRDtBQUNuRCxtRUFBMkM7QUFDM0MsK0NBQTRGO0FBQzVGLGlDQUF5QztBQUV6QyxRQUFRLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO0lBQzdDLElBQUksT0FBZ0MsQ0FBQztJQUVyQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLE1BQU0sQ0FBQztZQUNMLE9BQU8sR0FBRyxJQUFJLDZCQUF1QixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxHQUFHLDRCQUE0QixDQUFDO1lBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxXQUFHLEVBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMzQixDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyx3RUFBd0UsQ0FDckcsQ0FBQztZQUNGLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRSxjQUFXLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7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QVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsaUJBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZGLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENB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LENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDakUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsb0JBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDN0YsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3hELGdCQUFNLENBQUMsU0FBUyxDQUFD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LGlCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZGLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkYsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxF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QUM7Z0JBQ3JFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsb0JBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDN0YsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2xELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsdUJBQVcsQ0FBQyxDQUFDO2dCQUNsRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUscUJBQVMsQ0FBQyxDQUFDO2dCQUN2RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRXZDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNsRSxPQUFPO3FCQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUM7cUJBQ1osS0FBSyxDQUFDLGlCQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7cUJBQ3JDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQ25DLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO3FCQUNsRCxjQUFjLENBQUMsY0FBYyxDQUFDO3FCQUM5QixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO3FCQUN6RCxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUVuQyxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxpQkFBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUMzRSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLG9CQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzVGLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFD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QUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDaEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDOUUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVGLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztvQkFDakUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3JFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1RixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsb0JBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDN0YsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxD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Q2xELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsdUJBQVcsQ0FBQyxDQUFDO29CQUNsRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUscUJBQVMsQ0FBQyxDQUFDO29CQUN2RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7b0JBQ3hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBRXZDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUNyQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgc3B5LCBhc3NlcnQgYXMgU2lub25Bc3NlcnQgfSBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBCYXRjaFRyYW5zYWN0aW9uQnVpbGRlciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBQcm94eVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IGFjY291bnRzLCBtb2NrVHNzU2lnbmF0dXJlLCByYXdUeCwgc3BlY1ZlcnNpb24sIHR4VmVyc2lvbiB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuXG5kZXNjcmliZSgnRG90IEJhdGNoIFRyYW5zYWN0aW9uIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGxldCBidWlsZGVyOiBCYXRjaFRyYW5zYWN0aW9uQnVpbGRlcjtcblxuICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXIgPSBuZXcgQmF0Y2hUcmFuc2FjdGlvbkJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBsaXN0IG9mIGNhbGxzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbCA9ICdpbnZhbGlkVW5zaWduZWRUcmFuc2FjdGlvbic7XG4gICAgICBjb25zdCBzcHlWYWxpZGF0ZUNhbGxzID0gc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZUNhbGxzJyk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBidWlsZGVyLmNhbGxzKFtjYWxsXSksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSBgY2FsbCBpbiBzdHJpbmcgZm9ybWF0IG11c3QgYmUgaGV4IGZvcm1hdCBvZiBhIG1ldGhvZCBhbmQgaXRzIGFyZ3VtZW50c2BcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIuY2FsbHMocmF3VHgucHVyZVByb3h5LmJhdGNoKSk7XG4gICAgICBTaW5vbkFzc2VydC5jYWxsZWRUd2ljZShzcHlWYWxpZGF0ZUNhbGxzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIGJhdGNoIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlbmRlciA9IGFjY291bnRzLmFjY291bnQxO1xuICAgIGNvbnN0IHJlZmVyZW5jZUJsb2NrID0gJzB4NDYyYWI1MjQ2MzYxZmViYjkyOTRmZmE0MWRkMDk5ZWRkZGVjMzBhMjA1ZWExNWZiZDI0N2FiYjBkZGJhYmQ1MSc7XG4gICAgY29uc3QgZ2VuZXNpc0hhc2ggPSAnMHg2N2Y5NzIzMzkzZWY3NjIxNGRmMDExOGMzNGJiYmQzZGJlYmM4ZWQ0NmExMDk3M2E4Yzk2OWQ0OGZlNzU5OGM5JztcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRUZXN0Q29uZmlnKCk7XG4gICAgICBidWlsZGVyID0gbmV3IEJhdGNoVHJhbnNhY3Rpb25CdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnKSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2lnbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCBiYXRjaCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5jYWxscyhyYXdUeC5wdXJlUHJveHkuYmF0Y2gpXG4gICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogOTI3OTI4MSwgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDAgfSlcbiAgICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAgIC5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC5wdXJlUHJveHkuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnB1cmVQcm94eS5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLkFOWSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmluZGV4LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnB1cmVQcm94eS5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLkFOWSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmluZGV4LCAxKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5Mjc5MjgxKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssIHJlZmVyZW5jZUJsb2NrKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgJ1dlc3RlbmQgQXNzZXQgSHViJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChyYXdUeC5iYXRjaC50d29BZGRQdXJlUHJveGllcy5zaWduZWQsIHR4SGV4KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIGJhdGNoIGFsbCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5hdG9taWModHJ1ZSlcbiAgICAgICAgICAuY2FsbHMocmF3VHgucHVyZVByb3h5LmJhdGNoKVxuICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNzkyODEsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAwIH0pXG4gICAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSlcbiAgICAgICAgICAuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHgucHVyZVByb3h5LmJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC5wdXJlUHJveHkuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5pbmRleCwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uY2FsbEluZGV4LCByYXdUeC5wdXJlUHJveHkuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5pbmRleCwgMSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI3OTI4MSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguYmF0Y2hBbGwudHdvQWRkUHVyZVByb3hpZXMuc2lnbmVkLCB0eEhleCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCBzdGFraW5nIGJhdGNoIGFsbCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5hdG9taWModHJ1ZSlcbiAgICAgICAgICAuY2FsbHMocmF3VHguc3Rha2UuYmF0Y2hBbGwuYmF0Y2gpXG4gICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogOTI2Njc4NywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDAgfSlcbiAgICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAgIC5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaC5sZW5ndGgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmNhbGxJbmRleCwgcmF3VHguc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnZhbHVlLCA1MDAwMDAwMDAwMDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnBheWVlLCB7IHN0YWtlZDogbnVsbCB9KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoWzFdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLlNUQUtJTkcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssIHJlZmVyZW5jZUJsb2NrKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgJ1dlc3RlbmQgQXNzZXQgSHViJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChyYXdUeC5zdGFrZS5iYXRjaEFsbC5zaWduZWQsIHR4SGV4KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIHVuc3Rha2luZyBiYXRjaCBhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuYXRvbWljKHRydWUpXG4gICAgICAgICAgLmNhbGxzKHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2gpXG4gICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogOTI2Njc4NywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDAgfSlcbiAgICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAgIC5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC51bnN0YWtlLmJhdGNoQWxsLmJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC51bnN0YWtlLmJhdGNoQWxsLmJhdGNoWzBdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLlNUQUtJTkcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMV0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3MsIHt9KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1syXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMl0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzJdLmFyZ3M/LnZhbHVlLCA1MDAwMDAwMDAwMDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDkyNjY3ODcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG5cbiAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuc2lnbmVkLCB0eEhleCk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2Zyb20gcmF3JywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgYmF0Y2ggYWxsIGZyb20gYSByYXcgc2lnbmVkIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC5iYXRjaEFsbC50d29BZGRQdXJlUHJveGllcy5zaWduZWQpO1xuICAgICAgICAgIGJ1aWxkZXIudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5Mjc5MjgxLCBtYXhEdXJhdGlvbjogNjQgfSkucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICAgIC8vIHRlc3QgdGhlIGNhbGwgaXRlbXNcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgMik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuQU5ZKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmluZGV4LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uaW5kZXgsIDEpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5Mjc5MjgxKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LmJhdGNoQWxsLnR3b0FkZFB1cmVQcm94aWVzLnNpZ25lZCwgdHhIZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgYmF0Y2ggYWxsIGZyb20gYSByYXcgc2lnbmVkIHN0YWtpbmcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnN0YWtlLmJhdGNoQWxsLnNpZ25lZCk7XG4gICAgICAgICAgYnVpbGRlci52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KS5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jayk7XG4gICAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgICAgICAvLyB0ZXN0IHRoZSBjYWxsIGl0ZW1zXG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxscy5sZW5ndGgsIHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoLmxlbmd0aCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoWzBdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnZhbHVlLCA1MDAwMDAwMDAwMDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8ucGF5ZWUsIHsgc3Rha2VkOiBudWxsIH0pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uY2FsbEluZGV4LCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuU1RBS0lORyk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5kZWxheSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDkyNjY3ODcpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguc3Rha2UuYmF0Y2hBbGwuc2lnbmVkLCB0eEhleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBiYXRjaCBhbGwgZnJvbSBhIHJhdyBzaWduZWQgdW5zdGFraW5nIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC51bnN0YWtlLmJhdGNoQWxsLnNpZ25lZCk7XG4gICAgICAgICAgYnVpbGRlci52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KS5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jayk7XG5cbiAgICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICAgIC8vIHRlc3QgdGhlIGNhbGwgaXRlbXNcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaC5sZW5ndGgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC51bnN0YWtlLmJhdGNoQWxsLmJhdGNoWzBdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGVnYXRlLCB7IGlkOiBhY2NvdW50cy5zdGFraW5nUHJveHkuYWRkcmVzcyB9KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5TVEFLSU5HKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmNhbGxJbmRleCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzLCB7fSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1syXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMl0uc2xpY2UoMCwgNikpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMl0uYXJncz8udmFsdWUsIDUwMDAwMDAwMDAwMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDkyNjY3ODcpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHgudW5zdGFrZS5iYXRjaEFsbC5zaWduZWQsIHR4SGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd1bnNpZ25lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgYmF0Y2ggdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuY2FsbHMocmF3VHgucHVyZVByb3h5LmJhdGNoKVxuICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSlcbiAgICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC5wdXJlUHJveHkuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnB1cmVQcm94eS5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLkFOWSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmluZGV4LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnB1cmVQcm94eS5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLkFOWSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmluZGV4LCAxKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssIHJlZmVyZW5jZUJsb2NrKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDIwMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG5cbiAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LmJhdGNoLnR3b0FkZFB1cmVQcm94aWVzLnVuc2lnbmVkLCB0eEhleCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhbiB1bnNpZ25lZCBiYXRjaCBhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuYXRvbWljKHRydWUpXG4gICAgICAgICAgLmNhbGxzKHJhd1R4LnB1cmVQcm94eS5iYXRjaClcbiAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMjAwIH0pXG4gICAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHgucHVyZVByb3h5LmJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC5wdXJlUHJveHkuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5pbmRleCwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uY2FsbEluZGV4LCByYXdUeC5wdXJlUHJveHkuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5pbmRleCwgMSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI2Njc4Nyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgJ1dlc3RlbmQgQXNzZXQgSHViJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChyYXdUeC5iYXRjaEFsbC50d29BZGRQdXJlUHJveGllcy51bnNpZ25lZCwgdHhIZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgc3Rha2luZyBiYXRjaCBhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuYXRvbWljKHRydWUpXG4gICAgICAgICAgLmNhbGxzKHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoKVxuICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAwIH0pXG4gICAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHguc3Rha2UuYmF0Y2hBbGwuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoWzBdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy52YWx1ZSwgNTAwMDAwMDAwMDAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wYXllZSwgeyBzdGFrZWQ6IG51bGwgfSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uY2FsbEluZGV4LCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsZWdhdGUsIHsgaWQ6IGFjY291bnRzLnN0YWtpbmdQcm94eS5hZGRyZXNzIH0pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5TVEFLSU5HKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5kZWxheSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI2Njc4Nyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguc3Rha2UuYmF0Y2hBbGwudW5zaWduZWQsIHR4SGV4KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIGFkZCBwcm94eSArIHN0YWtlIG1vcmUgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuYXRvbWljKHRydWUpXG4gICAgICAgICAgLmNhbGxzKHJhd1R4LnN0YWtlTW9yZS5iYXRjaEFsbC5iYXRjaClcbiAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMCB9KVxuICAgICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmlucHV0c1swXS52YWx1ZSwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHguc3Rha2VNb3JlLmJhdGNoQWxsLmJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC5zdGFrZU1vcmUuYmF0Y2hBbGwuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3MubWF4X2FkZGl0aW9uYWwsIDkwMDM0MjM1MjM1MzIyKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnN0YWtlTW9yZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncy5wcm94eV90eXBlLCBQcm94eVR5cGUuU1RBS0lORyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncy5kZWxheSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI2Njc4Nyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguc3Rha2VNb3JlLmJhdGNoQWxsLnVuc2lnbmVkLCB0eEhleCk7XG5cbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgICAgY29uc3QgYnVpbGRlcjIgPSBmYWN0b3J5LmZyb20ocmF3VHguc3Rha2VNb3JlLmJhdGNoQWxsLnVuc2lnbmVkKTtcbiAgICAgICAgY29uc3QgdHgyID0gYXdhaXQgYnVpbGRlcjJcbiAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAuYnVpbGQoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eDIuaW5wdXRzWzBdLnZhbHVlLCAnOTAwMzQyMzUyMzUzMjInKTtcbiAgICAgICAgY29uc3QgdHhKc29uMiA9IHR4Mi50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24sIHR4SnNvbjIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgdW5zdGFraW5nIGJhdGNoIGFsbCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5hdG9taWModHJ1ZSlcbiAgICAgICAgICAuY2FsbHMocmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaClcbiAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMCB9KVxuICAgICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxscy5sZW5ndGgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGVnYXRlLCB7IGlkOiBhY2NvdW50cy5zdGFraW5nUHJveHkuYWRkcmVzcyB9KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuU1RBS0lORyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmNhbGxJbmRleCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncywge30pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzJdLmNhbGxJbmRleCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaFsyXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMl0uYXJncz8udmFsdWUsIDUwMDAwMDAwMDAwMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI2Njc4Nyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHgudW5zdGFrZS5iYXRjaEFsbC51bnNpZ25lZCwgdHhIZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdmcm9tIHJhdycsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGJhdGNoIGFsbCBmcm9tIGEgcmF3IHVuc2lnbmVkIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC5iYXRjaEFsbC50d29BZGRQdXJlUHJveGllcy51bnNpZ25lZCk7XG4gICAgICAgICAgYnVpbGRlclxuICAgICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogOTI2Njc4NywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSk7XG5cbiAgICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgMik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuQU5ZKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmluZGV4LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uaW5kZXgsIDEpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguYmF0Y2hBbGwudHdvQWRkUHVyZVByb3hpZXMudW5zaWduZWQsIHR4SGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGJhdGNoIGFsbCBmcm9tIGEgcmF3IHVuc2lnbmVkIHN0YWtpbmcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnN0YWtlLmJhdGNoQWxsLnVuc2lnbmVkKTtcbiAgICAgICAgICBidWlsZGVyXG4gICAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KTtcblxuICAgICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgICAgLy8gdGVzdCB0aGUgY2FsbCBpdGVtc1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaC5sZW5ndGgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy52YWx1ZSwgNTAwMDAwMDAwMDAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnBheWVlLCB7IHN0YWtlZDogbnVsbCB9KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmNhbGxJbmRleCwgcmF3VHguc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMV0uc2xpY2UoMCwgNikpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsZWdhdGUsIHsgaWQ6IGFjY291bnRzLnN0YWtpbmdQcm94eS5hZGRyZXNzIH0pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLlNUQUtJTkcpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LnN0YWtlLmJhdGNoQWxsLnVuc2lnbmVkLCB0eEhleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBiYXRjaCBhbGwgZnJvbSBhIHJhdyB1bnNpZ25lZCB1bnN0YWtpbmcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwudW5zaWduZWQpO1xuICAgICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pO1xuXG4gICAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgICAgICAvLyB0ZXN0IHRoZSBjYWxsIGl0ZW1zXG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxscy5sZW5ndGgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmNhbGxJbmRleCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuU1RBS0lORyk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5kZWxheSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMV0uc2xpY2UoMCwgNikpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncywge30pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMl0uY2FsbEluZGV4LCByYXdUeC51bnN0YWtlLmJhdGNoQWxsLmJhdGNoWzJdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzJdLmFyZ3M/LnZhbHVlLCA1MDAwMDAwMDAwMDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwudW5zaWduZWQsIHR4SGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==