@rosen-bridge/minimum-fee 1.0.0-1ad09374 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/MinimumFeeBox.d.ts +11 -8
- package/dist/lib/MinimumFeeBox.d.ts.map +1 -1
- package/dist/lib/MinimumFeeBox.js +76 -46
- package/dist/lib/MinimumFeeBoxBuilder.d.ts +42 -42
- package/dist/lib/MinimumFeeBoxBuilder.d.ts.map +1 -1
- package/dist/lib/MinimumFeeBoxBuilder.js +173 -144
- package/dist/lib/MinimumFeeConfig.d.ts +23 -19
- package/dist/lib/MinimumFeeConfig.d.ts.map +1 -1
- package/dist/lib/MinimumFeeConfig.js +34 -34
- package/dist/lib/constants.d.ts +2 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +2 -0
- package/dist/lib/errors.d.ts +6 -6
- package/dist/lib/errors.js +16 -16
- package/dist/lib/handleApiError.d.ts +26 -7
- package/dist/lib/handleApiError.js +25 -23
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/types.d.ts +21 -21
- package/dist/lib/types.js +16 -16
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +5 -5
|
@@ -2,39 +2,41 @@ import { ErgoBox } from 'ergo-lib-wasm-nodejs';
|
|
|
2
2
|
import { ChainMinimumFee, ErgoNetworkType, Fee } from './types';
|
|
3
3
|
import ergoExplorerClientFactory from '@rosen-clients/ergo-explorer';
|
|
4
4
|
import ergoNodeClientFactory from '@rosen-clients/ergo-node';
|
|
5
|
-
import { AbstractLogger } from '@rosen-bridge/logger
|
|
5
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
6
6
|
import { MinimumFeeBoxBuilder } from './MinimumFeeBoxBuilder';
|
|
7
7
|
export declare class MinimumFeeBox {
|
|
8
8
|
protected readonly BOX_FETCHING_PAGE_SIZE = 50;
|
|
9
9
|
protected logger: AbstractLogger;
|
|
10
|
-
protected box: ErgoBox;
|
|
10
|
+
protected box: ErgoBox | undefined;
|
|
11
11
|
protected tokenId: string;
|
|
12
12
|
protected minimumFeeNFT: string;
|
|
13
13
|
protected address: string;
|
|
14
|
+
protected ergoTree: string;
|
|
14
15
|
protected explorerClient: ReturnType<typeof ergoExplorerClientFactory>;
|
|
15
16
|
protected nodeClient: ReturnType<typeof ergoNodeClientFactory>;
|
|
16
17
|
constructor(tokenId: string, minimumFeeNFT: string, address: string, networkType: ErgoNetworkType, networkUrl: string, logger?: AbstractLogger);
|
|
17
18
|
/**
|
|
18
19
|
* fetches the box from the blockchain
|
|
20
|
+
* @returns true if action was successful, otherwise false
|
|
19
21
|
*/
|
|
20
|
-
fetchBox: () => Promise<
|
|
22
|
+
fetchBox: () => Promise<boolean>;
|
|
21
23
|
/**
|
|
22
|
-
* returns fetched box or throws
|
|
24
|
+
* returns fetched box or throws appropriate error if found more or none
|
|
23
25
|
* @param eligibleBoxes
|
|
24
26
|
*/
|
|
25
27
|
protected selectEligibleBox: (eligibleBoxes: Array<ErgoBox>) => ErgoBox;
|
|
26
28
|
/**
|
|
27
29
|
* fetches box from the blockchain using explorer client
|
|
28
30
|
*/
|
|
29
|
-
protected
|
|
31
|
+
protected fetchBoxesUsingExplorer: () => Promise<Array<ErgoBox>>;
|
|
30
32
|
/**
|
|
31
33
|
* fetches the box from the blockchain using node client
|
|
32
34
|
*/
|
|
33
|
-
protected
|
|
35
|
+
protected fetchBoxesUsingNode: () => Promise<Array<ErgoBox>>;
|
|
34
36
|
/**
|
|
35
37
|
* returns fetched config box
|
|
36
38
|
*/
|
|
37
|
-
getBox: () => ErgoBox;
|
|
39
|
+
getBox: () => ErgoBox | undefined;
|
|
38
40
|
/**
|
|
39
41
|
* gets corresponding config for two chains and height
|
|
40
42
|
* @param fromChain
|
|
@@ -44,8 +46,9 @@ export declare class MinimumFeeBox {
|
|
|
44
46
|
getFee: (fromChain: string, height: number, toChain: string) => ChainMinimumFee;
|
|
45
47
|
/**
|
|
46
48
|
* extracts Fee config from box registers
|
|
49
|
+
* @param box
|
|
47
50
|
*/
|
|
48
|
-
protected extractFeeFromBox: () => Array<Fee>;
|
|
51
|
+
protected extractFeeFromBox: (box: ErgoBox) => Array<Fee>;
|
|
49
52
|
/**
|
|
50
53
|
* generates a MinimumFeeBoxBuilder using current box
|
|
51
54
|
* note that 'height' parameter of builder won't be set
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinimumFeeBox.d.ts","sourceRoot":"","sources":["../../lib/MinimumFeeBox.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MinimumFeeBox.d.ts","sourceRoot":"","sources":["../../lib/MinimumFeeBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAEhE,OAAO,yBAAyB,MAAM,8BAA8B,CAAC;AACrE,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI9D,qBAAa,aAAa;IACxB,SAAS,CAAC,QAAQ,CAAC,sBAAsB,MAAM;IAC/C,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;IACjC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACvE,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;gBAG7D,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,cAAc;IAczB;;;OAGG;IACH,QAAQ,QAAa,QAAQ,OAAO,CAAC,CAyCnC;IAEF;;;OAGG;IACH,SAAS,CAAC,iBAAiB,kBAAmB,MAAM,OAAO,CAAC,KAAG,OAAO,CAyBpE;IAEF;;OAEG;IACH,SAAS,CAAC,uBAAuB,QAAa,QAAQ,MAAM,OAAO,CAAC,CAAC,CA8CnE;IAEF;;OAEG;IACH,SAAS,CAAC,mBAAmB,QAAa,QAAQ,MAAM,OAAO,CAAC,CAAC,CAiD/D;IAEF;;OAEG;IACH,MAAM,QAAO,OAAO,GAAG,SAAS,CAAa;IAE7C;;;;;OAKG;IACH,MAAM,cACO,MAAM,UACT,MAAM,WACL,MAAM,KACd,eAAe,CA4BhB;IAEF;;;OAGG;IACH,SAAS,CAAC,iBAAiB,QAAS,OAAO,KAAG,MAAM,GAAG,CAAC,CAuDtD;IAEF;;;OAGG;IACH,SAAS,QAAO,oBAAoB,CAqBlC;CACH"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { ErgoBox } from 'ergo-lib-wasm-nodejs';
|
|
1
|
+
import { Address, ErgoBox } from 'ergo-lib-wasm-nodejs';
|
|
2
2
|
import { ChainMinimumFee, ErgoNetworkType } from './types';
|
|
3
3
|
import { FailedError, NotFoundError } from './errors';
|
|
4
4
|
import ergoExplorerClientFactory from '@rosen-clients/ergo-explorer';
|
|
5
5
|
import ergoNodeClientFactory from '@rosen-clients/ergo-node';
|
|
6
6
|
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
7
7
|
import handleApiError from './handleApiError';
|
|
8
|
-
import { DummyLogger } from '@rosen-bridge/logger
|
|
8
|
+
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
9
9
|
import { MinimumFeeBoxBuilder } from './MinimumFeeBoxBuilder';
|
|
10
10
|
import { MinimumFeeConfig } from './MinimumFeeConfig';
|
|
11
|
-
|
|
11
|
+
import { ERGO_NATIVE_TOKEN } from './constants';
|
|
12
12
|
export class MinimumFeeBox {
|
|
13
13
|
BOX_FETCHING_PAGE_SIZE = 50;
|
|
14
14
|
logger;
|
|
@@ -16,12 +16,16 @@ export class MinimumFeeBox {
|
|
|
16
16
|
tokenId;
|
|
17
17
|
minimumFeeNFT;
|
|
18
18
|
address;
|
|
19
|
+
ergoTree;
|
|
19
20
|
explorerClient;
|
|
20
21
|
nodeClient;
|
|
21
22
|
constructor(tokenId, minimumFeeNFT, address, networkType, networkUrl, logger) {
|
|
22
23
|
this.tokenId = tokenId;
|
|
23
24
|
this.minimumFeeNFT = minimumFeeNFT;
|
|
24
25
|
this.address = address;
|
|
26
|
+
this.ergoTree = Address.from_base58(this.address)
|
|
27
|
+
.to_ergo_tree()
|
|
28
|
+
.to_base16_bytes();
|
|
25
29
|
if (networkType === ErgoNetworkType.explorer)
|
|
26
30
|
this.explorerClient = ergoExplorerClientFactory(networkUrl);
|
|
27
31
|
else
|
|
@@ -30,23 +34,56 @@ export class MinimumFeeBox {
|
|
|
30
34
|
}
|
|
31
35
|
/**
|
|
32
36
|
* fetches the box from the blockchain
|
|
37
|
+
* @returns true if action was successful, otherwise false
|
|
33
38
|
*/
|
|
34
39
|
fetchBox = async () => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
const boxHasCorrectAddress = (box) => box.ergo_tree().to_base16_bytes() === this.ergoTree;
|
|
41
|
+
const boxHasAppropriateTokens = (box) => {
|
|
42
|
+
const tokenLen = box.tokens().len();
|
|
43
|
+
let hasMinimumFeeNFT = false;
|
|
44
|
+
let hasTargetToken = this.tokenId === ERGO_NATIVE_TOKEN ? true : false;
|
|
45
|
+
const hasCorrectTokens = this.tokenId === ERGO_NATIVE_TOKEN ? tokenLen === 1 : tokenLen === 2;
|
|
46
|
+
for (let i = 0; i < tokenLen; i++) {
|
|
47
|
+
const id = box.tokens().get(i).id().to_str();
|
|
48
|
+
if (id === this.minimumFeeNFT)
|
|
49
|
+
hasMinimumFeeNFT = true;
|
|
50
|
+
else if (id === this.tokenId)
|
|
51
|
+
hasTargetToken = true;
|
|
52
|
+
}
|
|
53
|
+
return hasCorrectTokens && hasMinimumFeeNFT && hasTargetToken;
|
|
54
|
+
};
|
|
55
|
+
try {
|
|
56
|
+
const boxes = this.explorerClient
|
|
57
|
+
? await this.fetchBoxesUsingExplorer()
|
|
58
|
+
: await this.fetchBoxesUsingNode();
|
|
59
|
+
this.box = this.selectEligibleBox(boxes.filter((box) => boxHasCorrectAddress(box) && boxHasAppropriateTokens(box)));
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
if (e instanceof NotFoundError || e instanceof FailedError) {
|
|
64
|
+
this.logger.warn(`No valid minimum-fee box. reason: ${e}`);
|
|
65
|
+
this.box = undefined;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.logger.warn(`An error occurred while updating minimum-fee box: ${e}`);
|
|
69
|
+
if (e instanceof Error && e.stack)
|
|
70
|
+
this.logger.warn(e.stack);
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
39
74
|
};
|
|
40
75
|
/**
|
|
41
|
-
* returns fetched box or throws
|
|
76
|
+
* returns fetched box or throws appropriate error if found more or none
|
|
42
77
|
* @param eligibleBoxes
|
|
43
78
|
*/
|
|
44
79
|
selectEligibleBox = (eligibleBoxes) => {
|
|
45
80
|
this.logger.debug(`Found [${eligibleBoxes.length}] minimum-fee boxes: ${JsonBigInt.stringify(eligibleBoxes.map((box) => box.to_json()))}`);
|
|
46
|
-
if (eligibleBoxes.length === 0)
|
|
81
|
+
if (eligibleBoxes.length === 0) {
|
|
47
82
|
throw new NotFoundError(`Found no minimum-fee box for token [${this.tokenId}] and address [${this.address}]`);
|
|
48
|
-
|
|
83
|
+
}
|
|
84
|
+
else if (eligibleBoxes.length > 1) {
|
|
49
85
|
throw new FailedError(`Found [${eligibleBoxes.length}] minimum-fee boxes for token [${this.tokenId}] and address [${this.address}]`);
|
|
86
|
+
}
|
|
50
87
|
else {
|
|
51
88
|
this.logger.debug(`Found minimum-fee box [${eligibleBoxes[0]
|
|
52
89
|
.box_id()
|
|
@@ -57,61 +94,51 @@ export class MinimumFeeBox {
|
|
|
57
94
|
/**
|
|
58
95
|
* fetches box from the blockchain using explorer client
|
|
59
96
|
*/
|
|
60
|
-
|
|
61
|
-
const
|
|
97
|
+
fetchBoxesUsingExplorer = async () => {
|
|
98
|
+
const boxes = [];
|
|
62
99
|
try {
|
|
63
100
|
let currentPage = 0;
|
|
64
|
-
let boxesPage = await this.explorerClient.v1.
|
|
101
|
+
let boxesPage = await this.explorerClient.v1.getApiV1BoxesUnspentByaddressP1(this.address, {
|
|
65
102
|
offset: currentPage * this.BOX_FETCHING_PAGE_SIZE,
|
|
66
103
|
limit: this.BOX_FETCHING_PAGE_SIZE,
|
|
67
104
|
});
|
|
105
|
+
this.logger.debug(`requested 'explorerClient.getApiV1BoxesUnspentByaddressP1' for address [${this.address}]. res: ${JsonBigInt.stringify(boxesPage)}`);
|
|
68
106
|
while (boxesPage.items?.length) {
|
|
69
|
-
|
|
70
|
-
eligibleBoxes.push(...boxesPage.items
|
|
71
|
-
.filter((box) => box.address === this.address && this.tokenId === ERGO_NATIVE_TOKEN
|
|
72
|
-
? box.assets?.length === 1
|
|
73
|
-
: box.assets?.length === 2 &&
|
|
74
|
-
box.assets?.some((asset) => asset.tokenId === this.tokenId))
|
|
75
|
-
.map((box) => ErgoBox.from_json(JsonBigInt.stringify(box))));
|
|
107
|
+
boxes.push(...boxesPage.items.map((box) => ErgoBox.from_json(JsonBigInt.stringify(box))));
|
|
76
108
|
currentPage++;
|
|
77
109
|
boxesPage =
|
|
78
|
-
await this.explorerClient.v1.
|
|
110
|
+
await this.explorerClient.v1.getApiV1BoxesUnspentByaddressP1(this.address, {
|
|
79
111
|
offset: currentPage * this.BOX_FETCHING_PAGE_SIZE,
|
|
80
112
|
limit: this.BOX_FETCHING_PAGE_SIZE,
|
|
81
113
|
});
|
|
114
|
+
this.logger.debug(`requested 'explorerClient.getApiV1BoxesUnspentByaddressP1' for address [${this.address}]. res: ${JsonBigInt.stringify(boxesPage)}`);
|
|
82
115
|
}
|
|
83
116
|
}
|
|
84
117
|
catch (error) {
|
|
85
118
|
return handleApiError(error, 'Failed to get boxes by token id from Ergo Explorer:');
|
|
86
119
|
}
|
|
87
|
-
return
|
|
120
|
+
return boxes;
|
|
88
121
|
};
|
|
89
122
|
/**
|
|
90
123
|
* fetches the box from the blockchain using node client
|
|
91
124
|
*/
|
|
92
|
-
|
|
93
|
-
const
|
|
125
|
+
fetchBoxesUsingNode = async () => {
|
|
126
|
+
const boxes = [];
|
|
94
127
|
try {
|
|
95
|
-
const boxHasConfigToken = (box) => box.assets?.some((asset) => asset.tokenId === this.minimumFeeNFT);
|
|
96
|
-
const boxHasAppropriateToken = (box) => this.tokenId === ERGO_NATIVE_TOKEN
|
|
97
|
-
? box.assets?.length === 1
|
|
98
|
-
: box.assets?.length === 2 &&
|
|
99
|
-
box.assets?.some((asset) => asset.tokenId === this.tokenId);
|
|
100
128
|
let currentPage = 0;
|
|
101
129
|
let boxesPage = await this.nodeClient.getBoxesByAddressUnspent(this.address, {
|
|
102
130
|
offset: currentPage * this.BOX_FETCHING_PAGE_SIZE,
|
|
103
131
|
limit: this.BOX_FETCHING_PAGE_SIZE,
|
|
104
132
|
});
|
|
133
|
+
this.logger.debug(`requested 'nodeClient.getBoxesByAddressUnspent' for address [${this.address}]. res: ${JsonBigInt.stringify(boxesPage)}`);
|
|
105
134
|
while (boxesPage.length !== 0) {
|
|
106
|
-
|
|
107
|
-
eligibleBoxes.push(...boxesPage
|
|
108
|
-
.filter((box) => boxHasConfigToken(box) && boxHasAppropriateToken(box))
|
|
109
|
-
.map((box) => ErgoBox.from_json(JsonBigInt.stringify(box))));
|
|
135
|
+
boxes.push(...boxesPage.map((box) => ErgoBox.from_json(JsonBigInt.stringify(box))));
|
|
110
136
|
currentPage++;
|
|
111
137
|
boxesPage = await this.nodeClient.getBoxesByAddressUnspent(this.address, {
|
|
112
138
|
offset: currentPage * this.BOX_FETCHING_PAGE_SIZE,
|
|
113
139
|
limit: this.BOX_FETCHING_PAGE_SIZE,
|
|
114
140
|
});
|
|
141
|
+
this.logger.debug(`requested 'nodeClient.getBoxesByAddressUnspent' for address [${this.address}]. res: ${JsonBigInt.stringify(boxesPage)}`);
|
|
115
142
|
}
|
|
116
143
|
}
|
|
117
144
|
catch (error) {
|
|
@@ -124,7 +151,7 @@ export class MinimumFeeBox {
|
|
|
124
151
|
},
|
|
125
152
|
});
|
|
126
153
|
}
|
|
127
|
-
return
|
|
154
|
+
return boxes;
|
|
128
155
|
};
|
|
129
156
|
/**
|
|
130
157
|
* returns fetched config box
|
|
@@ -139,7 +166,7 @@ export class MinimumFeeBox {
|
|
|
139
166
|
getFee = (fromChain, height, toChain) => {
|
|
140
167
|
if (!this.box)
|
|
141
168
|
throw Error(`Box is not fetched yet`);
|
|
142
|
-
const fees = this.extractFeeFromBox().reverse();
|
|
169
|
+
const fees = this.extractFeeFromBox(this.box).reverse();
|
|
143
170
|
for (const fee of fees) {
|
|
144
171
|
if (!Object.hasOwn(fee.heights, fromChain))
|
|
145
172
|
throw new NotFoundError(`No fee found for chain [${fromChain}] in box [${this.box
|
|
@@ -161,16 +188,17 @@ export class MinimumFeeBox {
|
|
|
161
188
|
};
|
|
162
189
|
/**
|
|
163
190
|
* extracts Fee config from box registers
|
|
191
|
+
* @param box
|
|
164
192
|
*/
|
|
165
|
-
extractFeeFromBox = () => {
|
|
166
|
-
const R4 =
|
|
167
|
-
const R5 =
|
|
168
|
-
const R6 =
|
|
169
|
-
const R7 =
|
|
170
|
-
const R8 =
|
|
171
|
-
const R9 =
|
|
193
|
+
extractFeeFromBox = (box) => {
|
|
194
|
+
const R4 = box.register_value(4);
|
|
195
|
+
const R5 = box.register_value(5);
|
|
196
|
+
const R6 = box.register_value(6);
|
|
197
|
+
const R7 = box.register_value(7);
|
|
198
|
+
const R8 = box.register_value(8);
|
|
199
|
+
const R9 = box.register_value(9);
|
|
172
200
|
if (!R4 || !R5 || !R6 || !R7 || !R8 || !R9)
|
|
173
|
-
throw Error(`Incomplete register data for minimum-fee config box [${
|
|
201
|
+
throw Error(`Incomplete register data for minimum-fee config box [${box
|
|
174
202
|
.box_id()
|
|
175
203
|
.to_str()}]`);
|
|
176
204
|
const fees = [];
|
|
@@ -202,7 +230,7 @@ export class MinimumFeeBox {
|
|
|
202
230
|
}
|
|
203
231
|
fees.push(fee);
|
|
204
232
|
}
|
|
205
|
-
this.logger.debug(`Extracted fee config from box [${
|
|
233
|
+
this.logger.debug(`Extracted fee config from box [${box
|
|
206
234
|
.box_id()
|
|
207
235
|
.to_str()}]: ${JsonBigInt.stringify(fees)}`);
|
|
208
236
|
return fees;
|
|
@@ -212,10 +240,12 @@ export class MinimumFeeBox {
|
|
|
212
240
|
* note that 'height' parameter of builder won't be set
|
|
213
241
|
*/
|
|
214
242
|
toBuilder = () => {
|
|
243
|
+
if (!this.box)
|
|
244
|
+
throw Error(`Box is not fetched yet`);
|
|
215
245
|
const builder = new MinimumFeeBoxBuilder(this.minimumFeeNFT, this.address)
|
|
216
246
|
.setValue(BigInt(this.box.value().as_i64().to_str()))
|
|
217
247
|
.setToken(this.tokenId);
|
|
218
|
-
this.extractFeeFromBox().forEach((fee) => {
|
|
248
|
+
this.extractFeeFromBox(this.box).forEach((fee) => {
|
|
219
249
|
const chainFee = new MinimumFeeConfig();
|
|
220
250
|
Object.keys(fee.heights).forEach((chain) => {
|
|
221
251
|
if (Object.hasOwn(fee.configs, chain))
|
|
@@ -228,4 +258,4 @@ export class MinimumFeeBox {
|
|
|
228
258
|
return builder;
|
|
229
259
|
};
|
|
230
260
|
}
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluaW11bUZlZUJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9NaW5pbXVtRmVlQm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBTyxNQUFNLFNBQVMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RCxPQUFPLHlCQUF5QixNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8scUJBRU4sTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBRWhDLE1BQU0sT0FBTyxhQUFhO0lBQ0wsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sQ0FBaUI7SUFDdkIsR0FBRyxDQUFVO0lBQ2IsT0FBTyxDQUFTO0lBQ2hCLGFBQWEsQ0FBUztJQUN0QixPQUFPLENBQVM7SUFDaEIsY0FBYyxDQUErQztJQUM3RCxVQUFVLENBQTJDO0lBRS9ELFlBQ0UsT0FBZSxFQUNmLGFBQXFCLEVBQ3JCLE9BQWUsRUFDZixXQUE0QixFQUM1QixVQUFrQixFQUNsQixNQUF1QjtRQUV2QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9B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b0JveCB9IGZyb20gJ2VyZ28tbGliLXdhc20tbm9kZWpzJztcbmltcG9ydCB7IENoYWluTWluaW11bUZlZSwgRXJnb05ldHdvcmtUeXBlLCBGZWUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEZhaWxlZEVycm9yLCBOb3RGb3VuZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IGVyZ29FeHBsb3JlckNsaWVudEZhY3RvcnkgZnJvbSAnQHJvc2VuLWNsaWVudHMvZXJnby1leHBsb3Jlcic7XG5pbXBvcnQgZXJnb05vZGVDbGllbnRGYWN0b3J5LCB7XG4gIEluZGV4ZWRFcmdvQm94LFxufSBmcm9tICdAcm9zZW4tY2xpZW50cy9lcmdvLW5vZGUnO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5pbXBvcnQgaGFuZGxlQXBpRXJyb3IgZnJvbSAnLi9oYW5kbGVBcGlFcnJvcic7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciwgRHVtbXlMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2xvZ2dlci1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWluaW11bUZlZUJveEJ1aWxkZXIgfSBmcm9tICcuL01pbmltdW1GZWVCb3hCdWlsZGVyJztcbmltcG9ydCB7IE1pbmltdW1GZWVDb25maWcgfSBmcm9tICcuL01pbmltdW1GZWVDb25maWcnO1xuXG5jb25zdCBFUkdPX05BVElWRV9UT0tFTiA9ICdlcmcnO1xuXG5leHBvcnQgY2xhc3MgTWluaW11bUZlZUJveCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBCT1hfRkVUQ0hJTkdfUEFHRV9TSVpFID0gNTA7XG4gIHByb3RlY3RlZCBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcm90ZWN0ZWQgYm94OiBFcmdvQm94O1xuICBwcm90ZWN0ZWQgdG9rZW5JZDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgbWluaW11bUZlZU5GVDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZXhwbG9yZXJDbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIGVyZ29FeHBsb3JlckNsaWVudEZhY3Rvcnk+O1xuICBwcm90ZWN0ZWQgbm9kZUNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgZXJnb05vZGVDbGllbnRGYWN0b3J5PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0b2tlbklkOiBzdHJpbmcsXG4gICAgbWluaW11bUZlZU5GVDogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBuZXR3b3JrVHlwZTogRXJnb05ldHdvcmtUeXBlLFxuICAgIG5ldHdvcmtVcmw6IHN0cmluZyxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlclxuICApIHtcbiAgICB0aGlzLnRva2VuSWQgPSB0b2tlbklkO1xuICAgIHRoaXMubWluaW11bUZlZU5GVCA9IG1pbmltdW1GZWVORlQ7XG4gICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcztcbiAgICBpZiAobmV0d29ya1R5cGUgPT09IEVyZ29OZXR3b3JrVHlwZS5leHBsb3JlcilcbiAgICAgIHRoaXMuZXhwbG9yZXJDbGllbnQgPSBlcmdvRXhwbG9yZXJDbGllbnRGYWN0b3J5KG5ldHdvcmtVcmwpO1xuICAgIGVsc2UgdGhpcy5ub2RlQ2xpZW50ID0gZXJnb05vZGVDbGllbnRGYWN0b3J5KG5ldHdvcmtVcmwpO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyID8gbG9nZ2VyIDogbmV3IER1bW15TG9nZ2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogZmV0Y2hlcyB0aGUgYm94IGZyb20gdGhlIGJsb2NrY2hhaW5cbiAgICovXG4gIGZldGNoQm94ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICh0aGlzLmV4cGxvcmVyQ2xpZW50KSB0aGlzLmJveCA9IGF3YWl0IHRoaXMuZmV0Y2hCb3hVc2luZ0V4cGxvcmVyKCk7XG4gICAgZWxzZSB0aGlzLmJveCA9IGF3YWl0IHRoaXMuZmV0Y2hCb3hVc2luZ05vZGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBmZXRjaGVkIGJveCBvciB0aHJvd3MgYXBwcm9wcml0ZSBlcnJvciBpZiBmb3VuZCBtb3JlIG9yIG5vbmVcbiAgICogQHBhcmFtIGVsaWdpYmxlQm94ZXNcbiAgICovXG4gIHByb3RlY3RlZCBzZWxlY3RFbGlnaWJsZUJveCA9IChlbGlnaWJsZUJveGVzOiBBcnJheTxFcmdvQm94Pik6IEVyZ29Cb3ggPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgYEZvdW5kIFske1xuICAgICAgICBlbGlnaWJsZUJveGVzLmxlbmd0aFxuICAgICAgfV0gbWluaW11bS1mZWUgYm94ZXM6ICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkoXG4gICAgICAgIGVsaWdpYmxlQm94ZXMubWFwKChib3gpID0+IGJveC50b19qc29uKCkpXG4gICAgICApfWBcbiAgICApO1xuXG4gICAgaWYgKGVsaWdpYmxlQm94ZXMubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXG4gICAgICAgIGBGb3VuZCBubyBtaW5pbXVtLWZlZSBib3ggZm9yIHRva2VuIFske3RoaXMudG9rZW5JZH1dIGFuZCBhZGRyZXNzIFske3RoaXMuYWRkcmVzc31dYFxuICAgICAgKTtcbiAgICBlbHNlIGlmIChlbGlnaWJsZUJveGVzLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRmFpbGVkRXJyb3IoXG4gICAgICAgIGBGb3VuZCBbJHtlbGlnaWJsZUJveGVzLmxlbmd0aH1dIG1pbmltdW0tZmVlIGJveGVzIGZvciB0b2tlbiBbJHt0aGlzLnRva2VuSWR9XSBhbmQgYWRkcmVzcyBbJHt0aGlzLmFkZHJlc3N9XWBcbiAgICAgICk7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEZvdW5kIG1pbmltdW0tZmVlIGJveCBbJHtlbGlnaWJsZUJveGVzWzBdXG4gICAgICAgICAgLmJveF9pZCgpXG4gICAgICAgICAgLnRvX3N0cigpfV0gZm9yIHRva2VuIFske3RoaXMudG9rZW5JZH1dIGFuZCBhZGRyZXNzIFske3RoaXMuYWRkcmVzc31dYFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbGlnaWJsZUJveGVzWzBdO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogZmV0Y2hlcyBib3ggZnJvbSB0aGUgYmxvY2tjaGFpbiB1c2luZyBleHBsb3JlciBjbGllbnRcbiAgICovXG4gIHByb3RlY3RlZCBmZXRjaEJveFVzaW5nRXhwbG9yZXIgPSBhc3luYyAoKTogUHJvbWlzZTxFcmdvQm94PiA9PiB7XG4gICAgY29uc3QgZWxpZ2libGVCb3hlczogQXJyYXk8RXJnb0JveD4gPSBbXTtcbiAgICB0cnkge1xuICAgICAgbGV0IGN1cnJlbnRQYWdlID0gMDtcbiAgICAgIGxldCBib3hlc1BhZ2UgPVxuICAgICAgICBhd2FpdCB0aGlzLmV4cGxvcmVyQ2xpZW50LnYxLmdldEFwaVYxQm94ZXNVbnNwZW50Qnl0b2tlbmlkUDEoXG4gICAgICAgICAgdGhpcy5taW5pbXVtRmVlTkZULFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9mZnNldDogY3VycmVudFBhZ2UgKiB0aGlzLkJPWF9GRVRDSElOR19QQUdFX1NJWkUsXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5CT1hfRkVUQ0hJTkdfUEFHRV9TSVpFLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIHdoaWxlIChib3hlc1BhZ2UuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgcmVxdWVzdGVkICdleHBsb3JlckNsaWVudC5nZXRBcGlWMUJveGVzVW5zcGVudEJ5dG9rZW5pZFAxJyBmb3IgdG9rZW4gWyR7XG4gICAgICAgICAgICB0aGlzLm1pbmltdW1GZWVORlRcbiAgICAgICAgICB9XS4gcmVzOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KGJveGVzUGFnZSl9YFxuICAgICAgICApO1xuXG4gICAgICAgIGVsaWdpYmxlQm94ZXMucHVzaChcbiAgICAgICAgICAuLi5ib3hlc1BhZ2UuaXRlbXNcbiAgICAgICAgICAgIC5maWx0ZXIoKGJveCkgPT5cbiAgICAgICAgICAgICAgYm94LmFkZHJlc3MgPT09IHRoaXMuYWRkcmVzcyAmJiB0aGlzLnRva2VuSWQgPT09IEVSR09fTkFUSVZFX1RPS0VOXG4gICAgICAgICAgICAgICAgPyBib3guYXNzZXRzPy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICA6IGJveC5hc3NldHM/Lmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgICAgICAgYm94LmFzc2V0cz8uc29tZSgoYXNzZXQpID0+IGFzc2V0LnRva2VuSWQgPT09IHRoaXMudG9rZW5JZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5tYXAoKGJveDogYW55KSA9PiBFcmdvQm94LmZyb21fanNvbihKc29uQmlnSW50LnN0cmluZ2lmeShib3gpKSlcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudFBhZ2UrKztcbiAgICAgICAgYm94ZXNQYWdlID1cbiAgICAgICAgICBhd2FpdCB0aGlzLmV4cGxvcmVyQ2xpZW50LnYxLmdldEFwaVYxQm94ZXNVbnNwZW50Qnl0b2tlbmlkUDEoXG4gICAgICAgICAgICB0aGlzLm1pbmltdW1GZWVORlQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9mZnNldDogY3VycmVudFBhZ2UgKiB0aGlzLkJPWF9GRVRDSElOR19QQUdFX1NJWkUsXG4gICAgICAgICAgICAgIGxpbWl0OiB0aGlzLkJPWF9GRVRDSElOR19QQUdFX1NJWkUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGhhbmRsZUFwaUVycm9yKFxuICAgICAgICBlcnJvcixcbiAgICAgICAgJ0ZhaWxlZCB0byBnZXQgYm94ZXMgYnkgdG9rZW4gaWQgZnJvbSBFcmdvIEV4cGxvcmVyOidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RWxpZ2libGVCb3goZWxpZ2libGVCb3hlcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGZldGNoZXMgdGhlIGJveCBmcm9tIHRoZSBibG9ja2NoYWluIHVzaW5nIG5vZGUgY2xpZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgZmV0Y2hCb3hVc2luZ05vZGUgPSBhc3luYyAoKTogUHJvbWlzZTxFcmdvQm94PiA9PiB7XG4gICAgY29uc3QgZWxpZ2libGVCb3hlczogQXJyYXk8RXJnb0JveD4gPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYm94SGFzQ29uZmlnVG9rZW4gPSAoYm94OiBJbmRleGVkRXJnb0JveCkgPT5cbiAgICAgICAgYm94LmFzc2V0cz8uc29tZSgoYXNzZXQpID0+IGFzc2V0LnRva2VuSWQgPT09IHRoaXMubWluaW11bUZlZU5GVCk7XG4gICAgICBjb25zdCBib3hIYXNBcHByb3ByaWF0ZVRva2VuID0gKGJveDogSW5kZXhlZEVyZ29Cb3gpID0+XG4gICAgICAgIHRoaXMudG9rZW5JZCA9PT0gRVJHT19OQVRJVkVfVE9LRU5cbiAgICAgICAgICA/IGJveC5hc3NldHM/Lmxlbmd0aCA9PT0gMVxuICAgICAgICAgIDogYm94LmFzc2V0cz8ubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICBib3guYXNzZXRzPy5zb21lKChhc3NldCkgPT4gYXNzZXQudG9rZW5JZCA9PT0gdGhpcy50b2tlbklkKTtcblxuICAgICAgbGV0IGN1cnJlbnRQYWdlID0gMDtcbiAgICAgIGxldCBib3hlc1BhZ2UgPSBhd2FpdCB0aGlzLm5vZGVDbGllbnQuZ2V0Qm94ZXNCeUFkZHJlc3NVbnNwZW50KFxuICAgICAgICB0aGlzLmFkZHJlc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBvZmZzZXQ6IGN1cnJlbnRQYWdlICogdGhpcy5CT1hfRkVUQ0hJTkdfUEFHRV9TSVpFLFxuICAgICAgICAgIGxpbWl0OiB0aGlzLkJPWF9GRVRDSElOR19QQUdFX1NJWkUsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB3aGlsZSAoYm94ZXNQYWdlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgcmVxdWVzdGVkICdub2RlQ2xpZW50LmdldEJveGVzQnlBZGRyZXNzVW5zcGVudCcgZm9yIHRva2VuIFske1xuICAgICAgICAgICAgdGhpcy5taW5pbXVtRmVlTkZUXG4gICAgICAgICAgfV0uIHJlczogJHtKc29uQmlnSW50LnN0cmluZ2lmeShib3hlc1BhZ2UpfWBcbiAgICAgICAgKTtcblxuICAgICAgICBlbGlnaWJsZUJveGVzLnB1c2goXG4gICAgICAgICAgLi4uYm94ZXNQYWdlXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAoYm94KSA9PiBib3hIYXNDb25maWdUb2tlbihib3gpICYmIGJveEhhc0FwcHJvcHJpYXRlVG9rZW4oYm94KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm1hcCgoYm94OiBJbmRleGVkRXJnb0JveCkgPT5cbiAgICAgICAgICAgICAgRXJnb0JveC5mcm9tX2pzb24oSnNvbkJpZ0ludC5zdHJpbmdpZnkoYm94KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudFBhZ2UrKztcbiAgICAgICAgYm94ZXNQYWdlID0gYXdhaXQgdGhpcy5ub2RlQ2xpZW50LmdldEJveGVzQnlBZGRyZXNzVW5zcGVudChcbiAgICAgICAgICB0aGlzLmFkZHJlc3MsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2Zmc2V0OiBjdXJyZW50UGFnZSAqIHRoaXMuQk9YX0ZFVENISU5HX1BBR0VfU0laRSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLkJPWF9GRVRDSElOR19QQUdFX1NJWkUsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBiYXNlRXJyb3IgPSAnRmFpbGVkIHRvIGdldCBib3hlcyBieSB0b2tlbiBpZCBmcm9tIEVyZ28gTm9kZTonO1xuICAgICAgaGFuZGxlQXBpRXJyb3IoZXJyb3IsIGJhc2VFcnJvciwge1xuICAgICAgICBoYW5kbGVSZXNwb25kZWRTdGF0ZTogKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSByZXR1cm47XG4gICAgICAgICAgdGhyb3cgbmV3IEZhaWxlZEVycm9yKFxuICAgICAgICAgICAgYCR7YmFzZUVycm9yfSBbJHtlcnJvci5yZXNwb25zZS5zdGF0dXN9XSAke2Vycm9yLnJlc3BvbnNlLmRhdGEucmVhc29ufWBcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RWxpZ2libGVCb3goZWxpZ2libGVCb3hlcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgZmV0Y2hlZCBjb25maWcgYm94XG4gICAqL1xuICBnZXRCb3ggPSAoKTogRXJnb0JveCA9PiB0aGlzLmJveDtcblxuICAvKipcbiAgICogZ2V0cyBjb3JyZXNwb25kaW5nIGNvbmZpZyBmb3IgdHdvIGNoYWlucyBhbmQgaGVpZ2h0XG4gICAqIEBwYXJhbSBmcm9tQ2hhaW5cbiAgICogQHBhcmFtIGhlaWdodCBibG9ja2NoYWluIGhlaWdodCBmb3IgZnJvbUNoYWluXG4gICAqIEBwYXJhbSB0b0NoYWluXG4gICAqL1xuICBnZXRGZWUgPSAoXG4gICAgZnJvbUNoYWluOiBzdHJpbmcsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgdG9DaGFpbjogc3RyaW5nXG4gICk6IENoYWluTWluaW11bUZlZSA9PiB7XG4gICAgaWYgKCF0aGlzLmJveCkgdGhyb3cgRXJyb3IoYEJveCBpcyBub3QgZmV0Y2hlZCB5ZXRgKTtcblxuICAgIGNvbnN0IGZlZXMgPSB0aGlzLmV4dHJhY3RGZWVGcm9tQm94KCkucmV2ZXJzZSgpO1xuICAgIGZvciAoY29uc3QgZmVlIG9mIGZlZXMpIHtcbiAgICAgIGlmICghT2JqZWN0Lmhhc093bihmZWUuaGVpZ2h0cywgZnJvbUNoYWluKSlcbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXG4gICAgICAgICAgYE5vIGZlZSBmb3VuZCBmb3IgY2hhaW4gWyR7ZnJvbUNoYWlufV0gaW4gYm94IFske3RoaXMuYm94XG4gICAgICAgICAgICAuYm94X2lkKClcbiAgICAgICAgICAgIC50b19zdHIoKX1dYFxuICAgICAgICApO1xuICAgICAgaWYgKGZlZS5oZWlnaHRzW2Zyb21DaGFpbl0gPCBoZWlnaHQpIHtcbiAgICAgICAgY29uc3QgY2hhaW5GZWUgPSBmZWUuY29uZmlnc1t0b0NoYWluXTtcbiAgICAgICAgaWYgKGNoYWluRmVlKSByZXR1cm4gbmV3IENoYWluTWluaW11bUZlZShjaGFpbkZlZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2hhaW4gWyR7dG9DaGFpbn1dIGlzIG5vdCBzdXBwb3J0ZWQgYXQgZ2l2ZW4gaGVpZ2h0IG9mIGZyb21DaGFpbiBbJHtoZWlnaHR9IG9mICR7ZnJvbUNoYWlufV0gaW4gYm94IFske3RoaXMuYm94XG4gICAgICAgICAgICAgIC5ib3hfaWQoKVxuICAgICAgICAgICAgICAudG9fc3RyKCl9XWBcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgYENvbmZpZyBkb2VzIG5vdCBzdXBwb3J0IGhlaWdodCBbJHtoZWlnaHR9XSBmb3IgY2hhaW4gWyR7ZnJvbUNoYWlufV0gaW4gYm94IFske3RoaXMuYm94XG4gICAgICAgIC5ib3hfaWQoKVxuICAgICAgICAudG9fc3RyKCl9XWBcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBGZWUgY29uZmlnIGZyb20gYm94IHJlZ2lzdGVyc1xuICAgKi9cbiAgcHJvdGVjdGVkIGV4dHJhY3RGZWVGcm9tQm94ID0gKCk6IEFycmF5PEZlZT4gPT4ge1xuICAgIGNvbnN0IFI0ID0gdGhpcy5ib3gucmVnaXN0ZXJfdmFsdWUoNCk7XG4gICAgY29uc3QgUjUgPSB0aGlzLmJveC5yZWdpc3Rlcl92YWx1ZSg1KTtcbiAgICBjb25zdCBSNiA9IHRoaXMuYm94LnJlZ2lzdGVyX3ZhbHVlKDYpO1xuICAgIGNvbnN0IFI3ID0gdGhpcy5ib3gucmVnaXN0ZXJfdmFsdWUoNyk7XG4gICAgY29uc3QgUjggPSB0aGlzLmJveC5yZWdpc3Rlcl92YWx1ZSg4KTtcbiAgICBjb25zdCBSOSA9IHRoaXMuYm94LnJlZ2lzdGVyX3ZhbHVlKDkpO1xuXG4gICAgaWYgKCFSNCB8fCAhUjUgfHwgIVI2IHx8ICFSNyB8fCAhUjggfHwgIVI5KVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBJbmNvbXBsZXRlIHJlZ2lzdGVyIGRhdGEgZm9yIG1pbmltdW0tZmVlIGNvbmZpZyBib3ggWyR7dGhpcy5ib3hcbiAgICAgICAgICAuYm94X2lkKClcbiAgICAgICAgICAudG9fc3RyKCl9XWBcbiAgICAgICk7XG5cbiAgICBjb25zdCBmZWVzOiBBcnJheTxGZWU+ID0gW107XG4gICAgY29uc3QgY2hhaW5zID0gUjQudG9fY29sbF9jb2xsX2J5dGUoKS5tYXAoKGVsZW1lbnQpID0+XG4gICAgICBCdWZmZXIuZnJvbShlbGVtZW50KS50b1N0cmluZygpXG4gICAgKTtcbiAgICBjb25zdCBoZWlnaHRzID0gUjUudG9fanMoKSBhcyBBcnJheTxBcnJheTxudW1iZXI+PjtcbiAgICBjb25zdCBicmlkZ2VGZWVzID0gUjYudG9fanMoKSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcbiAgICBjb25zdCBuZXR3b3JrRmVlcyA9IFI3LnRvX2pzKCkgYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj47XG4gICAgY29uc3QgcnNuUmF0aW9zID0gUjgudG9fanMoKSBhcyBBcnJheTxBcnJheTxBcnJheTxzdHJpbmc+Pj47XG4gICAgY29uc3QgZmVlUmF0aW9zID0gUjkudG9fanMoKSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcblxuICAgIGZvciAobGV0IGZlZUlkeCA9IDA7IGZlZUlkeCA8IGhlaWdodHMubGVuZ3RoOyBmZWVJZHgrKykge1xuICAgICAgY29uc3QgZmVlOiBGZWUgPSB7XG4gICAgICAgIGhlaWdodHM6IHt9LFxuICAgICAgICBjb25maWdzOiB7fSxcbiAgICAgIH07XG4gICAgICBmb3IgKGxldCBjaGFpbklkeCA9IDA7IGNoYWluSWR4IDwgY2hhaW5zLmxlbmd0aDsgY2hhaW5JZHgrKykge1xuICAgICAgICBjb25zdCBjaGFpbiA9IGNoYWluc1tjaGFpbklkeF07XG5cbiAgICAgICAgaWYgKGhlaWdodHNbZmVlSWR4XVtjaGFpbklkeF0gPT09IC0xKSBjb250aW51ZTtcbiAgICAgICAgZmVlLmhlaWdodHNbY2hhaW5dID0gaGVpZ2h0c1tmZWVJZHhdW2NoYWluSWR4XTtcblxuICAgICAgICBpZiAoYnJpZGdlRmVlc1tmZWVJZHhdW2NoYWluSWR4XSA9PT0gJy0xJykgY29udGludWU7XG4gICAgICAgIGZlZS5jb25maWdzW2NoYWluXSA9IHtcbiAgICAgICAgICBicmlkZ2VGZWU6IEJpZ0ludChicmlkZ2VGZWVzW2ZlZUlkeF1bY2hhaW5JZHhdKSxcbiAgICAgICAgICBuZXR3b3JrRmVlOiBCaWdJbnQobmV0d29ya0ZlZXNbZmVlSWR4XVtjaGFpbklkeF0pLFxuICAgICAgICAgIHJzblJhdGlvOiBCaWdJbnQocnNuUmF0aW9zW2ZlZUlkeF1bY2hhaW5JZHhdWzBdKSxcbiAgICAgICAgICByc25SYXRpb0Rpdmlzb3I6IEJpZ0ludChyc25SYXRpb3NbZmVlSWR4XVtjaGFpbklkeF1bMV0pLFxuICAgICAgICAgIGZlZVJhdGlvOiBCaWdJbnQoZmVlUmF0aW9zW2ZlZUlkeF1bY2hhaW5JZHhdKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgYEV4dHJhY3RlZCBmZWUgY29uZmlnIGZyb20gYm94IFske3RoaXMuYm94XG4gICAgICAgIC5ib3hfaWQoKVxuICAgICAgICAudG9fc3RyKCl9XTogJHtKc29uQmlnSW50LnN0cmluZ2lmeShmZWVzKX1gXG4gICAgKTtcblxuICAgIHJldHVybiBmZWVzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZXMgYSBNaW5pbXVtRmVlQm94QnVpbGRlciB1c2luZyBjdXJyZW50IGJveFxuICAgKiAgbm90ZSB0aGF0ICdoZWlnaHQnIHBhcmFtZXRlciBvZiBidWlsZGVyIHdvbid0IGJlIHNldFxuICAgKi9cbiAgdG9CdWlsZGVyID0gKCk6IE1pbmltdW1GZWVCb3hCdWlsZGVyID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IE1pbmltdW1GZWVCb3hCdWlsZGVyKHRoaXMubWluaW11bUZlZU5GVCwgdGhpcy5hZGRyZXNzKVxuICAgICAgLnNldFZhbHVlKEJpZ0ludCh0aGlzLmJveC52YWx1ZSgpLmFzX2k2NCgpLnRvX3N0cigpKSlcbiAgICAgIC5zZXRUb2tlbih0aGlzLnRva2VuSWQpO1xuXG4gICAgdGhpcy5leHRyYWN0RmVlRnJvbUJveCgpLmZvckVhY2goKGZlZSkgPT4ge1xuICAgICAgY29uc3QgY2hhaW5GZWUgPSBuZXcgTWluaW11bUZlZUNvbmZpZygpO1xuICAgICAgT2JqZWN0LmtleXMoZmVlLmhlaWdodHMpLmZvckVhY2goKGNoYWluKSA9PiB7XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGZlZS5jb25maWdzLCBjaGFpbikpXG4gICAgICAgICAgY2hhaW5GZWUuc2V0Q2hhaW5Db25maWcoXG4gICAgICAgICAgICBjaGFpbixcbiAgICAgICAgICAgIGZlZS5oZWlnaHRzW2NoYWluXSxcbiAgICAgICAgICAgIGZlZS5jb25maWdzW2NoYWluXVxuICAgICAgICAgICk7XG4gICAgICAgIGVsc2UgY2hhaW5GZWUuc2V0Q2hhaW5Db25maWcoY2hhaW4sIGZlZS5oZWlnaHRzW2NoYWluXSwgdW5kZWZpbmVkKTtcbiAgICAgIH0pO1xuICAgICAgYnVpbGRlci5hZGRDb25maWcoY2hhaW5GZWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9O1xufVxuIl19
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluaW11bUZlZUJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9NaW5pbXVtRmVlQm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQU8sTUFBTSxTQUFTLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEQsT0FBTyx5QkFBeUIsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLHFCQUFxQixNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sVUFBVSxNQUFNLDJCQUEyQixDQUFDO0FBQ25ELE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE1BQU0sT0FBTyxhQUFhO0lBQ0wsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sQ0FBaUI7SUFDdkIsR0FBRyxDQUFzQjtJQUN6QixPQUFPLENBQVM7SUFDaEIsYUFBYSxDQUFTO0lBQ3RCLE9BQU8sQ0FBUztJQUNoQixRQUFRLENBQVM7SUFDakIsY0FBYyxDQUErQztJQUM3RCxVQUFVLENBQTJDO0lBRS9ELFlBQ0UsT0FBZSxFQUNmLGFBQXFCLEVBQ3JCLE9BQWUsRUFDZixXQUE0QixFQUM1QixVQUFrQixFQUNsQixNQUF1QjtRQUV2QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFH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fSBmcm9tICdlcmdvLWxpYi13YXNtLW5vZGVqcyc7XG5pbXBvcnQgeyBDaGFpbk1pbmltdW1GZWUsIEVyZ29OZXR3b3JrVHlwZSwgRmVlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBGYWlsZWRFcnJvciwgTm90Rm91bmRFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCBlcmdvRXhwbG9yZXJDbGllbnRGYWN0b3J5IGZyb20gJ0Byb3Nlbi1jbGllbnRzL2VyZ28tZXhwbG9yZXInO1xuaW1wb3J0IGVyZ29Ob2RlQ2xpZW50RmFjdG9yeSBmcm9tICdAcm9zZW4tY2xpZW50cy9lcmdvLW5vZGUnO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5pbXBvcnQgaGFuZGxlQXBpRXJyb3IgZnJvbSAnLi9oYW5kbGVBcGlFcnJvcic7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciwgRHVtbXlMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBNaW5pbXVtRmVlQm94QnVpbGRlciB9IGZyb20gJy4vTWluaW11bUZlZUJveEJ1aWxkZXInO1xuaW1wb3J0IHsgTWluaW11bUZlZUNvbmZpZyB9IGZyb20gJy4vTWluaW11bUZlZUNvbmZpZyc7XG5pbXBvcnQgeyBFUkdPX05BVElWRV9UT0tFTiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNsYXNzIE1pbmltdW1GZWVCb3gge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgQk9YX0ZFVENISU5HX1BBR0VfU0laRSA9IDUwO1xuICBwcm90ZWN0ZWQgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcjtcbiAgcHJvdGVjdGVkIGJveDogRXJnb0JveCB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHRva2VuSWQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIG1pbmltdW1GZWVORlQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIGVyZ29UcmVlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBleHBsb3JlckNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgZXJnb0V4cGxvcmVyQ2xpZW50RmFjdG9yeT47XG4gIHByb3RlY3RlZCBub2RlQ2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBlcmdvTm9kZUNsaWVudEZhY3Rvcnk+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRva2VuSWQ6IHN0cmluZyxcbiAgICBtaW5pbXVtRmVlTkZUOiBzdHJpbmcsXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIG5ldHdvcmtUeXBlOiBFcmdvTmV0d29ya1R5cGUsXG4gICAgbmV0d29ya1VybDogc3RyaW5nLFxuICAgIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyXG4gICkge1xuICAgIHRoaXMudG9rZW5JZCA9IHRva2VuSWQ7XG4gICAgdGhpcy5taW5pbXVtRmVlTkZUID0gbWluaW11bUZlZU5GVDtcbiAgICB0aGlzLmFkZHJlc3MgPSBhZGRyZXNzO1xuICAgIHRoaXMuZXJnb1RyZWUgPSBBZGRyZXNzLmZyb21fYmFzZTU4KHRoaXMuYWRkcmVzcylcbiAgICAgIC50b19lcmdvX3RyZWUoKVxuICAgICAgLnRvX2Jhc2UxNl9ieXRlcygpO1xuICAgIGlmIChuZXR3b3JrVHlwZSA9PT0gRXJnb05ldHdvcmtUeXBlLmV4cGxvcmVyKVxuICAgICAgdGhpcy5leHBsb3JlckNsaWVudCA9IGVyZ29FeHBsb3JlckNsaWVudEZhY3RvcnkobmV0d29ya1VybCk7XG4gICAgZWxzZSB0aGlzLm5vZGVDbGllbnQgPSBlcmdvTm9kZUNsaWVudEZhY3RvcnkobmV0d29ya1VybCk7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXIgPyBsb2dnZXIgOiBuZXcgRHVtbXlMb2dnZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmZXRjaGVzIHRoZSBib3ggZnJvbSB0aGUgYmxvY2tjaGFpblxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIGZhbHNlXG4gICAqL1xuICBmZXRjaEJveCA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBib3hIYXNDb3JyZWN0QWRkcmVzcyA9IChib3g6IEVyZ29Cb3gpID0+XG4gICAgICBib3guZXJnb190cmVlKCkudG9fYmFzZTE2X2J5dGVzKCkgPT09IHRoaXMuZXJnb1RyZWU7XG4gICAgY29uc3QgYm94SGFzQXBwcm9wcmlhdGVUb2tlbnMgPSAoYm94OiBFcmdvQm94KSA9PiB7XG4gICAgICBjb25zdCB0b2tlbkxlbiA9IGJveC50b2tlbnMoKS5sZW4oKTtcbiAgICAgIGxldCBoYXNNaW5pbXVtRmVlTkZUID0gZmFsc2U7XG4gICAgICBsZXQgaGFzVGFyZ2V0VG9rZW4gPSB0aGlzLnRva2VuSWQgPT09IEVSR09fTkFUSVZFX1RPS0VOID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgaGFzQ29ycmVjdFRva2VucyA9XG4gICAgICAgIHRoaXMudG9rZW5JZCA9PT0gRVJHT19OQVRJVkVfVE9LRU4gPyB0b2tlbkxlbiA9PT0gMSA6IHRva2VuTGVuID09PSAyO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gYm94LnRva2VucygpLmdldChpKS5pZCgpLnRvX3N0cigpO1xuICAgICAgICBpZiAoaWQgPT09IHRoaXMubWluaW11bUZlZU5GVCkgaGFzTWluaW11bUZlZU5GVCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGlkID09PSB0aGlzLnRva2VuSWQpIGhhc1RhcmdldFRva2VuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNDb3JyZWN0VG9rZW5zICYmIGhhc01pbmltdW1GZWVORlQgJiYgaGFzVGFyZ2V0VG9rZW47XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBib3hlcyA9IHRoaXMuZXhwbG9yZXJDbGllbnRcbiAgICAgICAgPyBhd2FpdCB0aGlzLmZldGNoQm94ZXNVc2luZ0V4cGxvcmVyKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmZldGNoQm94ZXNVc2luZ05vZGUoKTtcblxuICAgICAgdGhpcy5ib3ggPSB0aGlzLnNlbGVjdEVsaWdpYmxlQm94KFxuICAgICAgICBib3hlcy5maWx0ZXIoXG4gICAgICAgICAgKGJveDogRXJnb0JveCkgPT5cbiAgICAgICAgICAgIGJveEhhc0NvcnJlY3RBZGRyZXNzKGJveCkgJiYgYm94SGFzQXBwcm9wcmlhdGVUb2tlbnMoYm94KVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yIHx8IGUgaW5zdGFuY2VvZiBGYWlsZWRFcnJvcikge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBObyB2YWxpZCBtaW5pbXVtLWZlZSBib3guIHJlYXNvbjogJHtlfWApO1xuICAgICAgICB0aGlzLmJveCA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHVwZGF0aW5nIG1pbmltdW0tZmVlIGJveDogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB0aGlzLmxvZ2dlci53YXJuKGUuc3RhY2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBmZXRjaGVkIGJveCBvciB0aHJvd3MgYXBwcm9wcmlhdGUgZXJyb3IgaWYgZm91bmQgbW9yZSBvciBub25lXG4gICAqIEBwYXJhbSBlbGlnaWJsZUJveGVzXG4gICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0RWxpZ2libGVCb3ggPSAoZWxpZ2libGVCb3hlczogQXJyYXk8RXJnb0JveD4pOiBFcmdvQm94ID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBGb3VuZCBbJHtcbiAgICAgICAgZWxpZ2libGVCb3hlcy5sZW5ndGhcbiAgICAgIH1dIG1pbmltdW0tZmVlIGJveGVzOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KFxuICAgICAgICBlbGlnaWJsZUJveGVzLm1hcCgoYm94KSA9PiBib3gudG9fanNvbigpKVxuICAgICAgKX1gXG4gICAgKTtcblxuICAgIGlmIChlbGlnaWJsZUJveGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXG4gICAgICAgIGBGb3VuZCBubyBtaW5pbXVtLWZlZSBib3ggZm9yIHRva2VuIFske3RoaXMudG9rZW5JZH1dIGFuZCBhZGRyZXNzIFske3RoaXMuYWRkcmVzc31dYFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVsaWdpYmxlQm94ZXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEZhaWxlZEVycm9yKFxuICAgICAgICBgRm91bmQgWyR7ZWxpZ2libGVCb3hlcy5sZW5ndGh9XSBtaW5pbXVtLWZlZSBib3hlcyBmb3IgdG9rZW4gWyR7dGhpcy50b2tlbklkfV0gYW5kIGFkZHJlc3MgWyR7dGhpcy5hZGRyZXNzfV1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEZvdW5kIG1pbmltdW0tZmVlIGJveCBbJHtlbGlnaWJsZUJveGVzWzBdXG4gICAgICAgICAgLmJveF9pZCgpXG4gICAgICAgICAgLnRvX3N0cigpfV0gZm9yIHRva2VuIFske3RoaXMudG9rZW5JZH1dIGFuZCBhZGRyZXNzIFske3RoaXMuYWRkcmVzc31dYFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbGlnaWJsZUJveGVzWzBdO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogZmV0Y2hlcyBib3ggZnJvbSB0aGUgYmxvY2tjaGFpbiB1c2luZyBleHBsb3JlciBjbGllbnRcbiAgICovXG4gIHByb3RlY3RlZCBmZXRjaEJveGVzVXNpbmdFeHBsb3JlciA9IGFzeW5jICgpOiBQcm9taXNlPEFycmF5PEVyZ29Cb3g+PiA9PiB7XG4gICAgY29uc3QgYm94ZXM6IEFycmF5PEVyZ29Cb3g+ID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGxldCBjdXJyZW50UGFnZSA9IDA7XG4gICAgICBsZXQgYm94ZXNQYWdlID1cbiAgICAgICAgYXdhaXQgdGhpcy5leHBsb3JlckNsaWVudC52MS5nZXRBcGlWMUJveGVzVW5zcGVudEJ5YWRkcmVzc1AxKFxuICAgICAgICAgIHRoaXMuYWRkcmVzcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvZmZzZXQ6IGN1cnJlbnRQYWdlICogdGhpcy5CT1hfRkVUQ0hJTkdfUEFHRV9TSVpFLFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMuQk9YX0ZFVENISU5HX1BBR0VfU0laRSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYHJlcXVlc3RlZCAnZXhwbG9yZXJDbGllbnQuZ2V0QXBpVjFCb3hlc1Vuc3BlbnRCeWFkZHJlc3NQMScgZm9yIGFkZHJlc3MgWyR7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzXG4gICAgICAgIH1dLiByZXM6ICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkoYm94ZXNQYWdlKX1gXG4gICAgICApO1xuICAgICAgd2hpbGUgKGJveGVzUGFnZS5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIGJveGVzLnB1c2goXG4gICAgICAgICAgLi4uYm94ZXNQYWdlLml0ZW1zLm1hcCgoYm94KSA9PlxuICAgICAgICAgICAgRXJnb0JveC5mcm9tX2pzb24oSnNvbkJpZ0ludC5zdHJpbmdpZnkoYm94KSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGN1cnJlbnRQYWdlKys7XG4gICAgICAgIGJveGVzUGFnZSA9XG4gICAgICAgICAgYXdhaXQgdGhpcy5leHBsb3JlckNsaWVudC52MS5nZXRBcGlWMUJveGVzVW5zcGVudEJ5YWRkcmVzc1AxKFxuICAgICAgICAgICAgdGhpcy5hZGRyZXNzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvZmZzZXQ6IGN1cnJlbnRQYWdlICogdGhpcy5CT1hfRkVUQ0hJTkdfUEFHRV9TSVpFLFxuICAgICAgICAgICAgICBsaW1pdDogdGhpcy5CT1hfRkVUQ0hJTkdfUEFHRV9TSVpFLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGByZXF1ZXN0ZWQgJ2V4cGxvcmVyQ2xpZW50LmdldEFwaVYxQm94ZXNVbnNwZW50QnlhZGRyZXNzUDEnIGZvciBhZGRyZXNzIFske1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzXG4gICAgICAgICAgfV0uIHJlczogJHtKc29uQmlnSW50LnN0cmluZ2lmeShib3hlc1BhZ2UpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGhhbmRsZUFwaUVycm9yKFxuICAgICAgICBlcnJvcixcbiAgICAgICAgJ0ZhaWxlZCB0byBnZXQgYm94ZXMgYnkgdG9rZW4gaWQgZnJvbSBFcmdvIEV4cGxvcmVyOidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJveGVzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBmZXRjaGVzIHRoZSBib3ggZnJvbSB0aGUgYmxvY2tjaGFpbiB1c2luZyBub2RlIGNsaWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIGZldGNoQm94ZXNVc2luZ05vZGUgPSBhc3luYyAoKTogUHJvbWlzZTxBcnJheTxFcmdvQm94Pj4gPT4ge1xuICAgIGNvbnN0IGJveGVzOiBBcnJheTxFcmdvQm94PiA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBsZXQgY3VycmVudFBhZ2UgPSAwO1xuICAgICAgbGV0IGJveGVzUGFnZSA9IGF3YWl0IHRoaXMubm9kZUNsaWVudC5nZXRCb3hlc0J5QWRkcmVzc1Vuc3BlbnQoXG4gICAgICAgIHRoaXMuYWRkcmVzcyxcbiAgICAgICAge1xuICAgICAgICAgIG9mZnNldDogY3VycmVudFBhZ2UgKiB0aGlzLkJPWF9GRVRDSElOR19QQUdFX1NJWkUsXG4gICAgICAgICAgbGltaXQ6IHRoaXMuQk9YX0ZFVENISU5HX1BBR0VfU0laRSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgcmVxdWVzdGVkICdub2RlQ2xpZW50LmdldEJveGVzQnlBZGRyZXNzVW5zcGVudCcgZm9yIGFkZHJlc3MgWyR7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzXG4gICAgICAgIH1dLiByZXM6ICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkoYm94ZXNQYWdlKX1gXG4gICAgICApO1xuICAgICAgd2hpbGUgKGJveGVzUGFnZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgYm94ZXMucHVzaChcbiAgICAgICAgICAuLi5ib3hlc1BhZ2UubWFwKChib3gpID0+XG4gICAgICAgICAgICBFcmdvQm94LmZyb21fanNvbihKc29uQmlnSW50LnN0cmluZ2lmeShib3gpKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudFBhZ2UrKztcbiAgICAgICAgYm94ZXNQYWdlID0gYXdhaXQgdGhpcy5ub2RlQ2xpZW50LmdldEJveGVzQnlBZGRyZXNzVW5zcGVudChcbiAgICAgICAgICB0aGlzLmFkZHJlc3MsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2Zmc2V0OiBjdXJyZW50UGFnZSAqIHRoaXMuQk9YX0ZFVENISU5HX1BBR0VfU0laRSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLkJPWF9GRVRDSElOR19QQUdFX1NJWkUsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgcmVxdWVzdGVkICdub2RlQ2xpZW50LmdldEJveGVzQnlBZGRyZXNzVW5zcGVudCcgZm9yIGFkZHJlc3MgWyR7XG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NcbiAgICAgICAgICB9XS4gcmVzOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KGJveGVzUGFnZSl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBiYXNlRXJyb3IgPSAnRmFpbGVkIHRvIGdldCBib3hlcyBieSB0b2tlbiBpZCBmcm9tIEVyZ28gTm9kZTonO1xuICAgICAgaGFuZGxlQXBpRXJyb3IoZXJyb3IsIGJhc2VFcnJvciwge1xuICAgICAgICBoYW5kbGVSZXNwb25kZWRTdGF0ZTogKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSByZXR1cm47XG4gICAgICAgICAgdGhyb3cgbmV3IEZhaWxlZEVycm9yKFxuICAgICAgICAgICAgYCR7YmFzZUVycm9yfSBbJHtlcnJvci5yZXNwb25zZS5zdGF0dXN9XSAke2Vycm9yLnJlc3BvbnNlLmRhdGEucmVhc29ufWBcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJveGVzO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIGZldGNoZWQgY29uZmlnIGJveFxuICAgKi9cbiAgZ2V0Qm94ID0gKCk6IEVyZ29Cb3ggfCB1bmRlZmluZWQgPT4gdGhpcy5ib3g7XG5cbiAgLyoqXG4gICAqIGdldHMgY29ycmVzcG9uZGluZyBjb25maWcgZm9yIHR3byBjaGFpbnMgYW5kIGhlaWdodFxuICAgKiBAcGFyYW0gZnJvbUNoYWluXG4gICAqIEBwYXJhbSBoZWlnaHQgYmxvY2tjaGFpbiBoZWlnaHQgZm9yIGZyb21DaGFpblxuICAgKiBAcGFyYW0gdG9DaGFpblxuICAgKi9cbiAgZ2V0RmVlID0gKFxuICAgIGZyb21DaGFpbjogc3RyaW5nLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHRvQ2hhaW46IHN0cmluZ1xuICApOiBDaGFpbk1pbmltdW1GZWUgPT4ge1xuICAgIGlmICghdGhpcy5ib3gpIHRocm93IEVycm9yKGBCb3ggaXMgbm90IGZldGNoZWQgeWV0YCk7XG5cbiAgICBjb25zdCBmZWVzID0gdGhpcy5leHRyYWN0RmVlRnJvbUJveCh0aGlzLmJveCkucmV2ZXJzZSgpO1xuICAgIGZvciAoY29uc3QgZmVlIG9mIGZlZXMpIHtcbiAgICAgIGlmICghT2JqZWN0Lmhhc093bihmZWUuaGVpZ2h0cywgZnJvbUNoYWluKSlcbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXG4gICAgICAgICAgYE5vIGZlZSBmb3VuZCBmb3IgY2hhaW4gWyR7ZnJvbUNoYWlufV0gaW4gYm94IFske3RoaXMuYm94XG4gICAgICAgICAgICAuYm94X2lkKClcbiAgICAgICAgICAgIC50b19zdHIoKX1dYFxuICAgICAgICApO1xuICAgICAgaWYgKGZlZS5oZWlnaHRzW2Zyb21DaGFpbl0gPCBoZWlnaHQpIHtcbiAgICAgICAgY29uc3QgY2hhaW5GZWUgPSBmZWUuY29uZmlnc1t0b0NoYWluXTtcbiAgICAgICAgaWYgKGNoYWluRmVlKSByZXR1cm4gbmV3IENoYWluTWluaW11bUZlZShjaGFpbkZlZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2hhaW4gWyR7dG9DaGFpbn1dIGlzIG5vdCBzdXBwb3J0ZWQgYXQgZ2l2ZW4gaGVpZ2h0IG9mIGZyb21DaGFpbiBbJHtoZWlnaHR9IG9mICR7ZnJvbUNoYWlufV0gaW4gYm94IFske3RoaXMuYm94XG4gICAgICAgICAgICAgIC5ib3hfaWQoKVxuICAgICAgICAgICAgICAudG9fc3RyKCl9XWBcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgYENvbmZpZyBkb2VzIG5vdCBzdXBwb3J0IGhlaWdodCBbJHtoZWlnaHR9XSBmb3IgY2hhaW4gWyR7ZnJvbUNoYWlufV0gaW4gYm94IFske3RoaXMuYm94XG4gICAgICAgIC5ib3hfaWQoKVxuICAgICAgICAudG9fc3RyKCl9XWBcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBGZWUgY29uZmlnIGZyb20gYm94IHJlZ2lzdGVyc1xuICAgKiBAcGFyYW0gYm94XG4gICAqL1xuICBwcm90ZWN0ZWQgZXh0cmFjdEZlZUZyb21Cb3ggPSAoYm94OiBFcmdvQm94KTogQXJyYXk8RmVlPiA9PiB7XG4gICAgY29uc3QgUjQgPSBib3gucmVnaXN0ZXJfdmFsdWUoNCk7XG4gICAgY29uc3QgUjUgPSBib3gucmVnaXN0ZXJfdmFsdWUoNSk7XG4gICAgY29uc3QgUjYgPSBib3gucmVnaXN0ZXJfdmFsdWUoNik7XG4gICAgY29uc3QgUjcgPSBib3gucmVnaXN0ZXJfdmFsdWUoNyk7XG4gICAgY29uc3QgUjggPSBib3gucmVnaXN0ZXJfdmFsdWUoOCk7XG4gICAgY29uc3QgUjkgPSBib3gucmVnaXN0ZXJfdmFsdWUoOSk7XG5cbiAgICBpZiAoIVI0IHx8ICFSNSB8fCAhUjYgfHwgIVI3IHx8ICFSOCB8fCAhUjkpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEluY29tcGxldGUgcmVnaXN0ZXIgZGF0YSBmb3IgbWluaW11bS1mZWUgY29uZmlnIGJveCBbJHtib3hcbiAgICAgICAgICAuYm94X2lkKClcbiAgICAgICAgICAudG9fc3RyKCl9XWBcbiAgICAgICk7XG5cbiAgICBjb25zdCBmZWVzOiBBcnJheTxGZWU+ID0gW107XG4gICAgY29uc3QgY2hhaW5zID0gUjQudG9fY29sbF9jb2xsX2J5dGUoKS5tYXAoKGVsZW1lbnQpID0+XG4gICAgICBCdWZmZXIuZnJvbShlbGVtZW50KS50b1N0cmluZygpXG4gICAgKTtcbiAgICBjb25zdCBoZWlnaHRzID0gUjUudG9fanMoKSBhcyBBcnJheTxBcnJheTxudW1iZXI+PjtcbiAgICBjb25zdCBicmlkZ2VGZWVzID0gUjYudG9fanMoKSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcbiAgICBjb25zdCBuZXR3b3JrRmVlcyA9IFI3LnRvX2pzKCkgYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj47XG4gICAgY29uc3QgcnNuUmF0aW9zID0gUjgudG9fanMoKSBhcyBBcnJheTxBcnJheTxBcnJheTxzdHJpbmc+Pj47XG4gICAgY29uc3QgZmVlUmF0aW9zID0gUjkudG9fanMoKSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcblxuICAgIGZvciAobGV0IGZlZUlkeCA9IDA7IGZlZUlkeCA8IGhlaWdodHMubGVuZ3RoOyBmZWVJZHgrKykge1xuICAgICAgY29uc3QgZmVlOiBGZWUgPSB7XG4gICAgICAgIGhlaWdodHM6IHt9LFxuICAgICAgICBjb25maWdzOiB7fSxcbiAgICAgIH07XG4gICAgICBmb3IgKGxldCBjaGFpbklkeCA9IDA7IGNoYWluSWR4IDwgY2hhaW5zLmxlbmd0aDsgY2hhaW5JZHgrKykge1xuICAgICAgICBjb25zdCBjaGFpbiA9IGNoYWluc1tjaGFpbklkeF07XG5cbiAgICAgICAgaWYgKGhlaWdodHNbZmVlSWR4XVtjaGFpbklkeF0gPT09IC0xKSBjb250aW51ZTtcbiAgICAgICAgZmVlLmhlaWdodHNbY2hhaW5dID0gaGVpZ2h0c1tmZWVJZHhdW2NoYWluSWR4XTtcblxuICAgICAgICBpZiAoYnJpZGdlRmVlc1tmZWVJZHhdW2NoYWluSWR4XSA9PT0gJy0xJykgY29udGludWU7XG4gICAgICAgIGZlZS5jb25maWdzW2NoYWluXSA9IHtcbiAgICAgICAgICBicmlkZ2VGZWU6IEJpZ0ludChicmlkZ2VGZWVzW2ZlZUlkeF1bY2hhaW5JZHhdKSxcbiAgICAgICAgICBuZXR3b3JrRmVlOiBCaWdJbnQobmV0d29ya0ZlZXNbZmVlSWR4XVtjaGFpbklkeF0pLFxuICAgICAgICAgIHJzblJhdGlvOiBCaWdJbnQocnNuUmF0aW9zW2ZlZUlkeF1bY2hhaW5JZHhdWzBdKSxcbiAgICAgICAgICByc25SYXRpb0Rpdmlzb3I6IEJpZ0ludChyc25SYXRpb3NbZmVlSWR4XVtjaGFpbklkeF1bMV0pLFxuICAgICAgICAgIGZlZVJhdGlvOiBCaWdJbnQoZmVlUmF0aW9zW2ZlZUlkeF1bY2hhaW5JZHhdKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgYEV4dHJhY3RlZCBmZWUgY29uZmlnIGZyb20gYm94IFske2JveFxuICAgICAgICAuYm94X2lkKClcbiAgICAgICAgLnRvX3N0cigpfV06ICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkoZmVlcyl9YFxuICAgICk7XG5cbiAgICByZXR1cm4gZmVlcztcbiAgfTtcblxuICAvKipcbiAgICogZ2VuZXJhdGVzIGEgTWluaW11bUZlZUJveEJ1aWxkZXIgdXNpbmcgY3VycmVudCBib3hcbiAgICogIG5vdGUgdGhhdCAnaGVpZ2h0JyBwYXJhbWV0ZXIgb2YgYnVpbGRlciB3b24ndCBiZSBzZXRcbiAgICovXG4gIHRvQnVpbGRlciA9ICgpOiBNaW5pbXVtRmVlQm94QnVpbGRlciA9PiB7XG4gICAgaWYgKCF0aGlzLmJveCkgdGhyb3cgRXJyb3IoYEJveCBpcyBub3QgZmV0Y2hlZCB5ZXRgKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgTWluaW11bUZlZUJveEJ1aWxkZXIodGhpcy5taW5pbXVtRmVlTkZULCB0aGlzLmFkZHJlc3MpXG4gICAgICAuc2V0VmFsdWUoQmlnSW50KHRoaXMuYm94LnZhbHVlKCkuYXNfaTY0KCkudG9fc3RyKCkpKVxuICAgICAgLnNldFRva2VuKHRoaXMudG9rZW5JZCk7XG5cbiAgICB0aGlzLmV4dHJhY3RGZWVGcm9tQm94KHRoaXMuYm94KS5mb3JFYWNoKChmZWUpID0+IHtcbiAgICAgIGNvbnN0IGNoYWluRmVlID0gbmV3IE1pbmltdW1GZWVDb25maWcoKTtcbiAgICAgIE9iamVjdC5rZXlzKGZlZS5oZWlnaHRzKS5mb3JFYWNoKChjaGFpbikgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihmZWUuY29uZmlncywgY2hhaW4pKVxuICAgICAgICAgIGNoYWluRmVlLnNldENoYWluQ29uZmlnKFxuICAgICAgICAgICAgY2hhaW4sXG4gICAgICAgICAgICBmZWUuaGVpZ2h0c1tjaGFpbl0sXG4gICAgICAgICAgICBmZWUuY29uZmlnc1tjaGFpbl1cbiAgICAgICAgICApO1xuICAgICAgICBlbHNlIGNoYWluRmVlLnNldENoYWluQ29uZmlnKGNoYWluLCBmZWUuaGVpZ2h0c1tjaGFpbl0sIHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICAgIGJ1aWxkZXIuYWRkQ29uZmlnKGNoYWluRmVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -2,46 +2,46 @@ import { BoxValue, ErgoBoxCandidate } from 'ergo-lib-wasm-nodejs';
|
|
|
2
2
|
import { MinimumFeeConfig } from './MinimumFeeConfig';
|
|
3
3
|
import { Fee } from './types';
|
|
4
4
|
export declare class MinimumFeeBoxBuilder {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
5
|
+
protected fees: Array<Fee>;
|
|
6
|
+
protected boxValue: BoxValue;
|
|
7
|
+
protected boxheight: number;
|
|
8
|
+
protected tokenId: string;
|
|
9
|
+
protected minimumFeeNFT: string;
|
|
10
|
+
protected address: string;
|
|
11
|
+
constructor(minimumFeeNFT: string, address: string);
|
|
12
|
+
/**
|
|
13
|
+
* adds a feeConfig
|
|
14
|
+
* @param feeConfig
|
|
15
|
+
*/
|
|
16
|
+
addConfig: (feeConfig: MinimumFeeConfig) => MinimumFeeBoxBuilder;
|
|
17
|
+
/**
|
|
18
|
+
* removes a config by index
|
|
19
|
+
* @param index
|
|
20
|
+
*/
|
|
21
|
+
removeConfig: (index: number) => MinimumFeeBoxBuilder;
|
|
22
|
+
/**
|
|
23
|
+
* sets ErgoBox Erg value
|
|
24
|
+
* @param nanoErg
|
|
25
|
+
* @returns
|
|
26
|
+
*/
|
|
27
|
+
setValue: (nanoErg: bigint) => MinimumFeeBoxBuilder;
|
|
28
|
+
/**
|
|
29
|
+
* sets ErgoBox creationheight
|
|
30
|
+
* @param currentHeight
|
|
31
|
+
*/
|
|
32
|
+
setHeight: (currentHeight: number) => MinimumFeeBoxBuilder;
|
|
33
|
+
/**
|
|
34
|
+
* sets config token id
|
|
35
|
+
* @param tokenId
|
|
36
|
+
*/
|
|
37
|
+
setToken: (tokenId: string) => MinimumFeeBoxBuilder;
|
|
38
|
+
/**
|
|
39
|
+
* validates some of specified configs
|
|
40
|
+
*/
|
|
41
|
+
protected validate: () => void;
|
|
42
|
+
/**
|
|
43
|
+
* validates specified configs and builds ErgoBoxCandidate of config box using them
|
|
44
|
+
*/
|
|
45
|
+
build: () => ErgoBoxCandidate;
|
|
46
46
|
}
|
|
47
|
-
//# sourceMappingURL=MinimumFeeBoxBuilder.d.ts.map
|
|
47
|
+
//# sourceMappingURL=MinimumFeeBoxBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinimumFeeBoxBuilder.d.ts","sourceRoot":"","sources":["../../lib/MinimumFeeBoxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAOR,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MinimumFeeBoxBuilder.d.ts","sourceRoot":"","sources":["../../lib/MinimumFeeBoxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAOR,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAI9B,qBAAa,oBAAoB;IAC/B,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEd,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAMlD;;;OAGG;IACH,SAAS,cAAe,gBAAgB,KAAG,oBAAoB,CAG7D;IAEF;;;OAGG;IACH,YAAY,UAAW,MAAM,KAAG,oBAAoB,CAGlD;IAEF;;;;OAIG;IACH,QAAQ,YAAa,MAAM,KAAG,oBAAoB,CAGhD;IAEF;;;OAGG;IACH,SAAS,kBAAmB,MAAM,KAAG,oBAAoB,CAGvD;IAEF;;;OAGG;IACH,QAAQ,YAAa,MAAM,KAAG,oBAAoB,CAGhD;IAEF;;OAEG;IACH,SAAS,CAAC,QAAQ,QAAO,IAAI,CA6B3B;IAEF;;OAEG;IACH,KAAK,QAAO,gBAAgB,CAmF1B;CACH"}
|