@bitgo/abstract-eth 1.6.0 → 3.0.0
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/CHANGELOG.md +86 -0
- package/dist/src/abstractEthLikeCoin.d.ts +7 -5
- package/dist/src/abstractEthLikeCoin.d.ts.map +1 -1
- package/dist/src/abstractEthLikeCoin.js +10 -10
- package/dist/src/abstractEthLikeNewCoins.d.ts +630 -0
- package/dist/src/abstractEthLikeNewCoins.d.ts.map +1 -0
- package/dist/src/abstractEthLikeNewCoins.js +1798 -0
- package/dist/src/ethLikeToken.d.ts +15 -4
- package/dist/src/ethLikeToken.d.ts.map +1 -1
- package/dist/src/ethLikeToken.js +61 -7
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -3
- package/dist/src/lib/contractCall.d.ts +8 -0
- package/dist/src/lib/contractCall.d.ts.map +1 -0
- package/dist/src/lib/contractCall.js +17 -0
- package/dist/src/lib/iface.d.ts +130 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +8 -0
- package/dist/src/lib/index.d.ts +15 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +42 -0
- package/dist/src/lib/keyPair.d.ts +26 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +66 -0
- package/dist/src/lib/transaction.d.ts +64 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +137 -0
- package/dist/src/lib/transactionBuilder.d.ts +231 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +674 -0
- package/dist/src/lib/transferBuilder.d.ts +65 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +221 -0
- package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts +47 -0
- package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.js +113 -0
- package/dist/src/lib/transferBuilders/index.d.ts +4 -0
- package/dist/src/lib/transferBuilders/index.d.ts.map +1 -0
- package/dist/src/lib/transferBuilders/index.js +16 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts +14 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts.map +1 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC1155.js +83 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts +13 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts.map +1 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC721.js +68 -0
- package/dist/src/lib/types.d.ts +39 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +137 -0
- package/dist/src/lib/utils.d.ts +228 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +577 -0
- package/dist/src/lib/walletUtil.d.ts +26 -0
- package/dist/src/lib/walletUtil.d.ts.map +1 -0
- package/dist/src/lib/walletUtil.js +29 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +19 -8
- package/dist/src/abstractEthLikeMPCCoin.d.ts +0 -12
- package/dist/src/abstractEthLikeMPCCoin.d.ts.map +0 -1
- package/dist/src/abstractEthLikeMPCCoin.js +0 -16
- package/dist/src/ethLikeMPCToken.d.ts +0 -12
- package/dist/src/ethLikeMPCToken.d.ts.map +0 -1
- package/dist/src/ethLikeMPCToken.js +0 -16
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/** ETH transfer builder */
|
|
3
|
+
export declare class TransferBuilder {
|
|
4
|
+
private readonly _EMPTY_HEX_VALUE;
|
|
5
|
+
protected _amount: string;
|
|
6
|
+
protected _toAddress: string;
|
|
7
|
+
protected _sequenceId: number;
|
|
8
|
+
protected _signKey: string;
|
|
9
|
+
protected _expirationTime: number;
|
|
10
|
+
protected _signature: string;
|
|
11
|
+
private _data;
|
|
12
|
+
private _tokenContractAddress?;
|
|
13
|
+
private _coin;
|
|
14
|
+
constructor(serializedData?: string);
|
|
15
|
+
/**
|
|
16
|
+
* A method to set the ERC20 token to be transferred.
|
|
17
|
+
* This ERC20 token may not be compatible with the network.
|
|
18
|
+
*
|
|
19
|
+
* @param {string} coin the ERC20 coin to be set
|
|
20
|
+
* @returns {TransferBuilder} the transfer builder instance modified
|
|
21
|
+
*/
|
|
22
|
+
coin(coin: string): TransferBuilder;
|
|
23
|
+
data(additionalData: string): TransferBuilder;
|
|
24
|
+
amount(amount: string): this;
|
|
25
|
+
to(address: string): TransferBuilder;
|
|
26
|
+
contractSequenceId(counter: number): TransferBuilder;
|
|
27
|
+
key(signKey: string): TransferBuilder;
|
|
28
|
+
expirationTime(date: number): TransferBuilder;
|
|
29
|
+
signAndBuild(): string;
|
|
30
|
+
private hasMandatoryFields;
|
|
31
|
+
/**
|
|
32
|
+
* Obtains the proper operation hash to sign either a sendMultiSig data
|
|
33
|
+
* or a sendMultiSigToken data
|
|
34
|
+
*
|
|
35
|
+
* @returns {string} the operation hash
|
|
36
|
+
*/
|
|
37
|
+
private getOperationHash;
|
|
38
|
+
protected getOperationData(): (string | Buffer)[][];
|
|
39
|
+
/**
|
|
40
|
+
* Get the prefix used in generating an operation hash for sending tokens
|
|
41
|
+
*
|
|
42
|
+
* @returns the string prefix
|
|
43
|
+
*/
|
|
44
|
+
protected getTokenOperationHashPrefix(): string;
|
|
45
|
+
/**
|
|
46
|
+
* Get the prefix used in generating an operation hash for sending native coins
|
|
47
|
+
*
|
|
48
|
+
* @returns the string prefix
|
|
49
|
+
*/
|
|
50
|
+
protected getNativeOperationHashPrefix(): string;
|
|
51
|
+
/** Return an expiration time, in seconds, set to one hour from now
|
|
52
|
+
*
|
|
53
|
+
* @returns {number} expiration time
|
|
54
|
+
*/
|
|
55
|
+
private getExpirationTime;
|
|
56
|
+
/**
|
|
57
|
+
* If a signing key is set for this builder, recalculates the signature
|
|
58
|
+
*
|
|
59
|
+
* @returns {string} the signature value
|
|
60
|
+
*/
|
|
61
|
+
protected getSignature(): string;
|
|
62
|
+
protected ethSignMsgHash(): string;
|
|
63
|
+
private decodeTransferData;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=transferBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":";AAOA,2BAA2B;AAC3B,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,KAAK,CAAqB;gBAEtB,cAAc,CAAC,EAAE,MAAM;IAWnC;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAUnC,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,eAAe;IAM7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS5B,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IASpC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IASpD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IAKrC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAS7C,YAAY,IAAI,MAAM;IA2BtB,OAAO,CAAC,kBAAkB;IAI1B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAKxB,SAAS,CAAC,gBAAgB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE;IA8BnD;;;;OAIG;IACH,SAAS,CAAC,2BAA2B,IAAI,MAAM;IAI/C;;;;OAIG;IACH,SAAS,CAAC,4BAA4B,IAAI,MAAM;IAIhD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;;OAIG;IACH,SAAS,CAAC,YAAY,IAAI,MAAM;IAOhC,SAAS,CAAC,cAAc,IAAI,MAAM;IAoBlC,OAAO,CAAC,kBAAkB;CAiB3B"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.TransferBuilder = void 0;
|
|
26
|
+
const ethUtil = __importStar(require("ethereumjs-util"));
|
|
27
|
+
const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
28
|
+
const bn_js_1 = __importDefault(require("bn.js"));
|
|
29
|
+
const statics_1 = require("@bitgo/statics");
|
|
30
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
31
|
+
const utils_1 = require("./utils");
|
|
32
|
+
/** ETH transfer builder */
|
|
33
|
+
class TransferBuilder {
|
|
34
|
+
constructor(serializedData) {
|
|
35
|
+
this._EMPTY_HEX_VALUE = '0x';
|
|
36
|
+
if (serializedData) {
|
|
37
|
+
this.decodeTransferData(serializedData);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// initialize with default values for non mandatory fields
|
|
41
|
+
this._expirationTime = this.getExpirationTime();
|
|
42
|
+
this._data = this._EMPTY_HEX_VALUE;
|
|
43
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A method to set the ERC20 token to be transferred.
|
|
48
|
+
* This ERC20 token may not be compatible with the network.
|
|
49
|
+
*
|
|
50
|
+
* @param {string} coin the ERC20 coin to be set
|
|
51
|
+
* @returns {TransferBuilder} the transfer builder instance modified
|
|
52
|
+
*/
|
|
53
|
+
coin(coin) {
|
|
54
|
+
this._coin = statics_1.coins.get(coin);
|
|
55
|
+
if (this._coin instanceof statics_1.ContractAddressDefinedToken) {
|
|
56
|
+
this._tokenContractAddress = this._coin.contractAddress.toString();
|
|
57
|
+
}
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
data(additionalData) {
|
|
61
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
62
|
+
this._data = additionalData;
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
amount(amount) {
|
|
66
|
+
if (!utils_1.isValidAmount(amount)) {
|
|
67
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid amount');
|
|
68
|
+
}
|
|
69
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
70
|
+
this._amount = amount;
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
to(address) {
|
|
74
|
+
if (utils_1.isValidEthAddress(address)) {
|
|
75
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
76
|
+
this._toAddress = address;
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid address');
|
|
80
|
+
}
|
|
81
|
+
contractSequenceId(counter) {
|
|
82
|
+
if (counter >= 0) {
|
|
83
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
84
|
+
this._sequenceId = counter;
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid contract sequence id');
|
|
88
|
+
}
|
|
89
|
+
key(signKey) {
|
|
90
|
+
this._signKey = signKey;
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
expirationTime(date) {
|
|
94
|
+
if (date > 0) {
|
|
95
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
96
|
+
this._expirationTime = date;
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid expiration time');
|
|
100
|
+
}
|
|
101
|
+
signAndBuild() {
|
|
102
|
+
if (this.hasMandatoryFields()) {
|
|
103
|
+
if (this._tokenContractAddress !== undefined) {
|
|
104
|
+
return utils_1.sendMultiSigTokenData(this._toAddress, this._amount, this._tokenContractAddress, this._expirationTime, this._sequenceId, this.getSignature());
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
return utils_1.sendMultiSigData(this._toAddress, this._amount, this._data, this._expirationTime, this._sequenceId, this.getSignature());
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
throw new sdk_core_1.BuildTransactionError('Missing transfer mandatory fields. Amount, destination (to) address and sequenceID are mandatory');
|
|
111
|
+
}
|
|
112
|
+
hasMandatoryFields() {
|
|
113
|
+
return this._amount !== undefined && this._toAddress !== undefined && this._sequenceId !== undefined;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Obtains the proper operation hash to sign either a sendMultiSig data
|
|
117
|
+
* or a sendMultiSigToken data
|
|
118
|
+
*
|
|
119
|
+
* @returns {string} the operation hash
|
|
120
|
+
*/
|
|
121
|
+
getOperationHash() {
|
|
122
|
+
const operationData = this.getOperationData();
|
|
123
|
+
return ethUtil.bufferToHex(ethereumjs_abi_1.default.soliditySHA3(...operationData));
|
|
124
|
+
}
|
|
125
|
+
getOperationData() {
|
|
126
|
+
let operationData;
|
|
127
|
+
if (this._tokenContractAddress !== undefined) {
|
|
128
|
+
operationData = [
|
|
129
|
+
['string', 'address', 'uint', 'address', 'uint', 'uint'],
|
|
130
|
+
[
|
|
131
|
+
this.getTokenOperationHashPrefix(),
|
|
132
|
+
new bn_js_1.default(ethUtil.stripHexPrefix(this._toAddress), 16),
|
|
133
|
+
this._amount,
|
|
134
|
+
new bn_js_1.default(ethUtil.stripHexPrefix(this._tokenContractAddress), 16),
|
|
135
|
+
this._expirationTime,
|
|
136
|
+
this._sequenceId,
|
|
137
|
+
],
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
operationData = [
|
|
142
|
+
['string', 'address', 'uint', 'bytes', 'uint', 'uint'],
|
|
143
|
+
[
|
|
144
|
+
this.getNativeOperationHashPrefix(),
|
|
145
|
+
new bn_js_1.default(ethUtil.stripHexPrefix(this._toAddress), 16),
|
|
146
|
+
this._amount,
|
|
147
|
+
Buffer.from(ethUtil.padToEven(ethUtil.stripHexPrefix(this._data)) || '', 'hex'),
|
|
148
|
+
this._expirationTime,
|
|
149
|
+
this._sequenceId,
|
|
150
|
+
],
|
|
151
|
+
];
|
|
152
|
+
}
|
|
153
|
+
return operationData;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get the prefix used in generating an operation hash for sending tokens
|
|
157
|
+
*
|
|
158
|
+
* @returns the string prefix
|
|
159
|
+
*/
|
|
160
|
+
getTokenOperationHashPrefix() {
|
|
161
|
+
return 'ERC20';
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get the prefix used in generating an operation hash for sending native coins
|
|
165
|
+
*
|
|
166
|
+
* @returns the string prefix
|
|
167
|
+
*/
|
|
168
|
+
getNativeOperationHashPrefix() {
|
|
169
|
+
return 'ETHER';
|
|
170
|
+
}
|
|
171
|
+
/** Return an expiration time, in seconds, set to one hour from now
|
|
172
|
+
*
|
|
173
|
+
* @returns {number} expiration time
|
|
174
|
+
*/
|
|
175
|
+
getExpirationTime() {
|
|
176
|
+
const currentDate = new Date();
|
|
177
|
+
currentDate.setHours(currentDate.getHours() + 1);
|
|
178
|
+
return currentDate.getTime() / 1000;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* If a signing key is set for this builder, recalculates the signature
|
|
182
|
+
*
|
|
183
|
+
* @returns {string} the signature value
|
|
184
|
+
*/
|
|
185
|
+
getSignature() {
|
|
186
|
+
if (this._signKey) {
|
|
187
|
+
this._signature = this.ethSignMsgHash();
|
|
188
|
+
}
|
|
189
|
+
return this._signature;
|
|
190
|
+
}
|
|
191
|
+
ethSignMsgHash() {
|
|
192
|
+
const data = this.getOperationHash();
|
|
193
|
+
const keyBuffer = Buffer.from(ethUtil.padToEven(this._signKey), 'hex');
|
|
194
|
+
if (keyBuffer.length != 32) {
|
|
195
|
+
throw new Error('private key length is invalid');
|
|
196
|
+
}
|
|
197
|
+
const signatureInParts = ethUtil.ecsign(Buffer.from(ethUtil.padToEven(ethUtil.stripHexPrefix(data)), 'hex'), keyBuffer);
|
|
198
|
+
// Assemble strings from r, s and v
|
|
199
|
+
const r = ethUtil.setLengthLeft(signatureInParts.r, 32).toString('hex');
|
|
200
|
+
const s = ethUtil.setLengthLeft(signatureInParts.s, 32).toString('hex');
|
|
201
|
+
const v = ethUtil.stripHexPrefix(ethUtil.intToHex(signatureInParts.v));
|
|
202
|
+
// Concatenate the r, s and v parts to make the signature string
|
|
203
|
+
return ethUtil.addHexPrefix(r.concat(s, v));
|
|
204
|
+
}
|
|
205
|
+
decodeTransferData(data) {
|
|
206
|
+
const transferData = utils_1.decodeTransferData(data);
|
|
207
|
+
this._toAddress = transferData.to;
|
|
208
|
+
this._amount = transferData.amount;
|
|
209
|
+
this._expirationTime = transferData.expireTime;
|
|
210
|
+
this._sequenceId = transferData.sequenceId;
|
|
211
|
+
this._signature = transferData.signature;
|
|
212
|
+
if (transferData.data) {
|
|
213
|
+
this._data = transferData.data;
|
|
214
|
+
}
|
|
215
|
+
if (transferData.tokenContractAddress) {
|
|
216
|
+
this._tokenContractAddress = transferData.tokenContractAddress;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
exports.TransferBuilder = TransferBuilder;
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUEyQztBQUMzQyxvRUFBeUM7QUFDekMsa0RBQXVCO0FBQ3ZCLDRDQUE4RTtBQUM5RSw4Q0FBb0Y7QUFDcEYsbUNBQXdIO0FBRXhILDJCQUEyQjtBQUMzQixNQUFhLGVBQWU7SUFZMUIsWUFBWSxjQUF1QjtRQVhsQixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFZdkMsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3pDO2FBQU07WUFDTCwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFJLENBQUMsSUFBWTtRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixJQUFJLElBQUksQ0FBQyxLQUFLLFlBQVkscUNBQTJCLEVBQUU7WUFDckQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3BFO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLGNBQXNCO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcs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QUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZFLGdFQUFnRTtRQUNoRSxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBWTtRQUNyQyxNQUFNLFlBQVksR0FBRywwQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBRXpDLElBQUksWUFBWSxDQUFDLElBQUksRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7U0FDaEM7UUFFRCxJQUFJLFlBQVksQ0FBQyxvQkFBb0IsRUFBRTtZQUNyQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDO1NBQ2hFO0lBQ0gsQ0FBQztDQUNGO0FBNU9ELDBDQTRPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGV0aFV0aWwgZnJvbSAnZXRoZXJldW1qcy11dGlsJztcbmltcG9ydCBFdGhlcmV1bUFiaSBmcm9tICdldGhlcmV1bWpzLWFiaSc7XG5pbXBvcnQgQk4gZnJvbSAnYm4uanMnO1xuaW1wb3J0IHsgY29pbnMsIEJhc2VDb2luLCBDb250cmFjdEFkZHJlc3NEZWZpbmVkVG9rZW4gfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGRlY29kZVRyYW5zZmVyRGF0YSwgc2VuZE11bHRpU2lnRGF0YSwgc2VuZE11bHRpU2lnVG9rZW5EYXRhLCBpc1ZhbGlkRXRoQWRkcmVzcywgaXNWYWxpZEFtb3VudCB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKiogRVRIIHRyYW5zZmVyIGJ1aWxkZXIgKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlckJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9FTVBUWV9IRVhfVkFMVUUgPSAnMHgnO1xuICBwcm90ZWN0ZWQgX2Ftb3VudDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3RvQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3NlcXVlbmNlSWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9zaWduS2V5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZXhwaXJhdGlvblRpbWU6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9zaWduYXR1cmU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGF0YTogc3RyaW5nO1xuICBwcml2YXRlIF90b2tlbkNvbnRyYWN0QWRkcmVzcz86IHN0cmluZztcbiAgcHJpdmF0ZSBfY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+O1xuXG4gIGNvbnN0cnVjdG9yKHNlcmlhbGl6ZWREYXRhPzogc3RyaW5nKSB7XG4gICAgaWYgKHNlcmlhbGl6ZWREYXRhKSB7XG4gICAgICB0aGlzLmRlY29kZVRyYW5zZmVyRGF0YShzZXJpYWxpemVkRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIG1hbmRhdG9yeSBmaWVsZHNcbiAgICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lID0gdGhpcy5nZXRFeHBpcmF0aW9uVGltZSgpO1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSBtZXRob2QgdG8gc2V0IHRoZSBFUkMyMCB0b2tlbiB0byBiZSB0cmFuc2ZlcnJlZC5cbiAgICogVGhpcyBFUkMyMCB0b2tlbiBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgbmV0d29yay5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvaW4gdGhlIEVSQzIwIGNvaW4gdG8gYmUgc2V0XG4gICAqIEByZXR1cm5zIHtUcmFuc2ZlckJ1aWxkZXJ9IHRoZSB0cmFuc2ZlciBidWlsZGVyIGluc3RhbmNlIG1vZGlmaWVkXG4gICAqL1xuICBjb2luKGNvaW46IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fY29pbiA9IGNvaW5zLmdldChjb2luKTtcblxuICAgIGlmICh0aGlzLl9jb2luIGluc3RhbmNlb2YgQ29udHJhY3RBZGRyZXNzRGVmaW5lZFRva2VuKSB7XG4gICAgICB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcyA9IHRoaXMuX2NvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkYXRhKGFkZGl0aW9uYWxEYXRhOiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICB0aGlzLl9kYXRhID0gYWRkaXRpb25hbERhdGE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhbW91bnQoYW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRBbW91bnQoYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFtb3VudCcpO1xuICAgIH1cbiAgICB0aGlzLl9zaWduYXR1cmUgPSB0aGlzLl9FTVBUWV9IRVhfVkFMVUU7XG4gICAgdGhpcy5fYW1vdW50ID0gYW1vdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG8oYWRkcmVzczogc3RyaW5nKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICBpZiAoaXNWYWxpZEV0aEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX3RvQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgfVxuXG4gIGNvbnRyYWN0U2VxdWVuY2VJZChjb3VudGVyOiBudW1iZXIpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmIChjb3VudGVyID49IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX3NlcXVlbmNlSWQgPSBjb3VudGVyO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBjb250cmFjdCBzZXF1ZW5jZSBpZCcpO1xuICB9XG5cbiAga2V5KHNpZ25LZXk6IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fc2lnbktleSA9IHNpZ25LZXk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBleHBpcmF0aW9uVGltZShkYXRlOiBudW1iZXIpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmIChkYXRlID4gMCkge1xuICAgICAgdGhpcy5fc2lnbmF0dXJlID0gdGhpcy5fRU1QVFlfSEVYX1ZBTFVFO1xuICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSBkYXRlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBleHBpcmF0aW9uIHRpbWUnKTtcbiAgfVxuXG4gIHNpZ25BbmRCdWlsZCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmhhc01hbmRhdG9yeUZpZWxkcygpKSB7XG4gICAgICBpZiAodGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2VuZE11bHRpU2lnVG9rZW5EYXRhKFxuICAgICAgICAgIHRoaXMuX3RvQWRkcmVzcyxcbiAgICAgICAgICB0aGlzLl9hbW91bnQsXG4gICAgICAgICAgdGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MsXG4gICAgICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUsXG4gICAgICAgICAgdGhpcy5fc2VxdWVuY2VJZCxcbiAgICAgICAgICB0aGlzLmdldFNpZ25hdHVyZSgpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VuZE11bHRpU2lnRGF0YShcbiAgICAgICAgICB0aGlzLl90b0FkZHJlc3MsXG4gICAgICAgICAgdGhpcy5fYW1vdW50LFxuICAgICAgICAgIHRoaXMuX2RhdGEsXG4gICAgICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUsXG4gICAgICAgICAgdGhpcy5fc2VxdWVuY2VJZCxcbiAgICAgICAgICB0aGlzLmdldFNpZ25hdHVyZSgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAnTWlzc2luZyB0cmFuc2ZlciBtYW5kYXRvcnkgZmllbGRzLiBBbW91bnQsIGRlc3RpbmF0aW9uICh0bykgYWRkcmVzcyBhbmQgc2VxdWVuY2VJRCBhcmUgbWFuZGF0b3J5J1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhc01hbmRhdG9yeUZpZWxkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYW1vdW50ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fdG9BZGRyZXNzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2VxdWVuY2VJZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGFpbnMgdGhlIHByb3BlciBvcGVyYXRpb24gaGFzaCB0byBzaWduIGVpdGhlciBhIHNlbmRNdWx0aVNpZyBkYXRhXG4gICAqIG9yIGEgc2VuZE11bHRpU2lnVG9rZW4gZGF0YVxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgb3BlcmF0aW9uIGhhc2hcbiAgICovXG4gIHByaXZhdGUgZ2V0T3BlcmF0aW9uSGFzaCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9wZXJhdGlvbkRhdGEgPSB0aGlzLmdldE9wZXJhdGlvbkRhdGEoKTtcbiAgICByZXR1cm4gZXRoVXRpbC5idWZmZXJUb0hleChFdGhlcmV1bUFiaS5zb2xpZGl0eVNIQTMoLi4ub3BlcmF0aW9uRGF0YSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE9wZXJhdGlvbkRhdGEoKTogKHN0cmluZyB8IEJ1ZmZlcilbXVtdIHtcbiAgICBsZXQgb3BlcmF0aW9uRGF0YTtcbiAgICBpZiAodGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3BlcmF0aW9uRGF0YSA9IFtcbiAgICAgICAgWydzdHJpbmcnLCAnYWRkcmVzcycsICd1aW50JywgJ2FkZHJlc3MnLCAndWludCcsICd1aW50J10sXG4gICAgICAgIFtcbiAgICAgICAgICB0aGlzLmdldFRva2VuT3BlcmF0aW9uSGFzaFByZWZpeCgpLFxuICAgICAgICAgIG5ldyBCTihldGhVdGlsLnN0cmlwSGV4UHJlZml4KHRoaXMuX3RvQWRkcmVzcyksIDE2KSxcbiAgICAgICAgICB0aGlzLl9hbW91bnQsXG4gICAgICAgICAgbmV3IEJOKGV0aFV0aWwuc3RyaXBIZXhQcmVmaXgodGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MpLCAxNiksXG4gICAgICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUsXG4gICAgICAgICAgdGhpcy5fc2VxdWVuY2VJZCxcbiAgICAgICAgXSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZXJhdGlvbkRhdGEgPSBbXG4gICAgICAgIFsnc3RyaW5nJywgJ2FkZHJlc3MnLCAndWludCcsICdieXRlcycsICd1aW50JywgJ3VpbnQnXSxcbiAgICAgICAgW1xuICAgICAgICAgIHRoaXMuZ2V0TmF0aXZlT3BlcmF0aW9uSGFzaFByZWZpeCgpLFxuICAgICAgICAgIG5ldyBCTihldGhVdGlsLnN0cmlwSGV4UHJlZml4KHRoaXMuX3RvQWRkcmVzcyksIDE2KSxcbiAgICAgICAgICB0aGlzLl9hbW91bnQsXG4gICAgICAgICAgQnVmZmVyLmZyb20oZXRoVXRpbC5wYWRUb0V2ZW4oZXRoVXRpbC5zdHJpcEhleFByZWZpeCh0aGlzLl9kYXRhKSkgfHwgJycsICdoZXgnKSxcbiAgICAgICAgICB0aGlzLl9leHBpcmF0aW9uVGltZSxcbiAgICAgICAgICB0aGlzLl9zZXF1ZW5jZUlkLFxuICAgICAgICBdLFxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGlvbkRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcmVmaXggdXNlZCBpbiBnZW5lcmF0aW5nIGFuIG9wZXJhdGlvbiBoYXNoIGZvciBzZW5kaW5nIHRva2Vuc1xuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgc3RyaW5nIHByZWZpeFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFRva2VuT3BlcmF0aW9uSGFzaFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnRVJDMjAnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJlZml4IHVzZWQgaW4gZ2VuZXJhdGluZyBhbiBvcGVyYXRpb24gaGFzaCBmb3Igc2VuZGluZyBuYXRpdmUgY29pbnNcbiAgICpcbiAgICogQHJldHVybnMgdGhlIHN0cmluZyBwcmVmaXhcbiAgICovXG4gIHByb3RlY3RlZCBnZXROYXRpdmVPcGVyYXRpb25IYXNoUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdFVEhFUic7XG4gIH1cblxuICAvKiogUmV0dXJuIGFuIGV4cGlyYXRpb24gdGltZSwgaW4gc2Vjb25kcywgc2V0IHRvIG9uZSBob3VyIGZyb20gbm93XG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGV4cGlyYXRpb24gdGltZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFeHBpcmF0aW9uVGltZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBjdXJyZW50RGF0ZS5zZXRIb3VycyhjdXJyZW50RGF0ZS5nZXRIb3VycygpICsgMSk7XG4gICAgcmV0dXJuIGN1cnJlbnREYXRlLmdldFRpbWUoKSAvIDEwMDA7XG4gIH1cblxuICAvKipcbiAgICogSWYgYSBzaWduaW5nIGtleSBpcyBzZXQgZm9yIHRoaXMgYnVpbGRlciwgcmVjYWxjdWxhdGVzIHRoZSBzaWduYXR1cmVcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHNpZ25hdHVyZSB2YWx1ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFNpZ25hdHVyZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9zaWduS2V5KSB7XG4gICAgICB0aGlzLl9zaWduYXR1cmUgPSB0aGlzLmV0aFNpZ25Nc2dIYXNoKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmUhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGV0aFNpZ25Nc2dIYXNoKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0T3BlcmF0aW9uSGFzaCgpO1xuICAgIGNvbnN0IGtleUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGV0aFV0aWwucGFkVG9FdmVuKHRoaXMuX3NpZ25LZXkpLCAnaGV4Jyk7XG4gICAgaWYgKGtleUJ1ZmZlci5sZW5ndGggIT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJpdmF0ZSBrZXkgbGVuZ3RoIGlzIGludmFsaWQnKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlSW5QYXJ0cyA9IGV0aFV0aWwuZWNzaWduKFxuICAgICAgQnVmZmVyLmZyb20oZXRoVXRpbC5wYWRUb0V2ZW4oZXRoVXRpbC5zdHJpcEhleFByZWZpeChkYXRhKSksICdoZXgnKSxcbiAgICAgIGtleUJ1ZmZlclxuICAgICk7XG5cbiAgICAvLyBBc3NlbWJsZSBzdHJpbmdzIGZyb20gciwgcyBhbmQgdlxuICAgIGNvbnN0IHIgPSBldGhVdGlsLnNldExlbmd0aExlZnQoc2lnbmF0dXJlSW5QYXJ0cy5yLCAzMikudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHMgPSBldGhVdGlsLnNldExlbmd0aExlZnQoc2lnbmF0dXJlSW5QYXJ0cy5zLCAzMikudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHYgPSBldGhVdGlsLnN0cmlwSGV4UHJlZml4KGV0aFV0aWwuaW50VG9IZXgoc2lnbmF0dXJlSW5QYXJ0cy52KSk7XG5cbiAgICAvLyBDb25jYXRlbmF0ZSB0aGUgciwgcyBhbmQgdiBwYXJ0cyB0byBtYWtlIHRoZSBzaWduYXR1cmUgc3RyaW5nXG4gICAgcmV0dXJuIGV0aFV0aWwuYWRkSGV4UHJlZml4KHIuY29uY2F0KHMsIHYpKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjb2RlVHJhbnNmZXJEYXRhKGRhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRyYW5zZmVyRGF0YSA9IGRlY29kZVRyYW5zZmVyRGF0YShkYXRhKTtcblxuICAgIHRoaXMuX3RvQWRkcmVzcyA9IHRyYW5zZmVyRGF0YS50bztcbiAgICB0aGlzLl9hbW91bnQgPSB0cmFuc2ZlckRhdGEuYW1vdW50O1xuICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lID0gdHJhbnNmZXJEYXRhLmV4cGlyZVRpbWU7XG4gICAgdGhpcy5fc2VxdWVuY2VJZCA9IHRyYW5zZmVyRGF0YS5zZXF1ZW5jZUlkO1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRyYW5zZmVyRGF0YS5zaWduYXR1cmU7XG5cbiAgICBpZiAodHJhbnNmZXJEYXRhLmRhdGEpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0cmFuc2ZlckRhdGEuZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3RBZGRyZXNzKSB7XG4gICAgICB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcyA9IHRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0QWRkcmVzcztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export declare abstract class BaseNFTTransferBuilder {
|
|
2
|
+
protected readonly _EMPTY_HEX_VALUE = "0x";
|
|
3
|
+
protected _fromAddress: string;
|
|
4
|
+
protected _toAddress: string;
|
|
5
|
+
protected _sequenceId: number;
|
|
6
|
+
protected _signKey: string;
|
|
7
|
+
protected _expirationTime: number;
|
|
8
|
+
protected _signature: string;
|
|
9
|
+
protected _data: string;
|
|
10
|
+
protected _tokenContractAddress: string;
|
|
11
|
+
protected constructor(serializedData?: string);
|
|
12
|
+
expirationTime(date: number): this;
|
|
13
|
+
key(signKey: string): this;
|
|
14
|
+
contractSequenceId(counter: number): this;
|
|
15
|
+
to(address: string): this;
|
|
16
|
+
from(address: string): this;
|
|
17
|
+
/** Return an expiration time, in seconds, set to one hour from now
|
|
18
|
+
*
|
|
19
|
+
* @returns {number} expiration time
|
|
20
|
+
*/
|
|
21
|
+
private static getExpirationTime;
|
|
22
|
+
/**
|
|
23
|
+
* If a signing key is set for this builder, recalculates the signature
|
|
24
|
+
*
|
|
25
|
+
* @returns {string} the signature value
|
|
26
|
+
*/
|
|
27
|
+
protected getSignature(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Get the prefix used in generating an operation hash for sending native coins
|
|
30
|
+
*
|
|
31
|
+
* @returns the string prefix
|
|
32
|
+
*/
|
|
33
|
+
protected getNativeOperationHashPrefix(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Obtains the proper operation hash to sign either a sendMultiSig data
|
|
36
|
+
* or a sendMultiSigToken data
|
|
37
|
+
*
|
|
38
|
+
* @returns {string} the operation hash
|
|
39
|
+
*/
|
|
40
|
+
private getOperationHash;
|
|
41
|
+
/**
|
|
42
|
+
* Signs the Message with the given private key
|
|
43
|
+
* @returns {string} 65 byte long raw signature
|
|
44
|
+
*/
|
|
45
|
+
protected ethSignMsgHash(): string;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=baseNFTTransferBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseNFTTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/transferBuilders/baseNFTTransferBuilder.ts"],"names":[],"mappings":"AAIA,8BAAsB,sBAAsB;IAC1C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,QAAQ;IAE3C,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAExC,SAAS,aAAa,cAAc,CAAC,EAAE,MAAM;IAS7C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASlC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK1B,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASzC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAMhC;;;;OAIG;IACH,SAAS,CAAC,YAAY,IAAI,MAAM;IAUhC;;;;OAIG;IACH,SAAS,CAAC,4BAA4B,IAAI,MAAM;IAIhD;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;OAGG;IACH,SAAS,CAAC,cAAc,IAAI,MAAM;CAOnC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseNFTTransferBuilder = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const utils_2 = require("ethers/lib/utils");
|
|
7
|
+
class BaseNFTTransferBuilder {
|
|
8
|
+
constructor(serializedData) {
|
|
9
|
+
this._EMPTY_HEX_VALUE = '0x';
|
|
10
|
+
if (serializedData === undefined) {
|
|
11
|
+
// initialize with default values for non mandatory fields
|
|
12
|
+
this._expirationTime = BaseNFTTransferBuilder.getExpirationTime();
|
|
13
|
+
this._data = this._EMPTY_HEX_VALUE;
|
|
14
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
expirationTime(date) {
|
|
18
|
+
if (date > 0) {
|
|
19
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
20
|
+
this._expirationTime = date;
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid expiration time');
|
|
24
|
+
}
|
|
25
|
+
key(signKey) {
|
|
26
|
+
this._signKey = signKey;
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
contractSequenceId(counter) {
|
|
30
|
+
if (counter >= 0) {
|
|
31
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
32
|
+
this._sequenceId = counter;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid contract sequence id');
|
|
36
|
+
}
|
|
37
|
+
to(address) {
|
|
38
|
+
if (utils_1.isValidEthAddress(address)) {
|
|
39
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
40
|
+
this._toAddress = address;
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid address');
|
|
44
|
+
}
|
|
45
|
+
from(address) {
|
|
46
|
+
if (utils_1.isValidEthAddress(address)) {
|
|
47
|
+
this._signature = this._EMPTY_HEX_VALUE;
|
|
48
|
+
this._fromAddress = address;
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid address');
|
|
52
|
+
}
|
|
53
|
+
/** Return an expiration time, in seconds, set to one hour from now
|
|
54
|
+
*
|
|
55
|
+
* @returns {number} expiration time
|
|
56
|
+
*/
|
|
57
|
+
static getExpirationTime() {
|
|
58
|
+
const currentDate = new Date();
|
|
59
|
+
currentDate.setHours(currentDate.getHours() + 1);
|
|
60
|
+
return currentDate.getTime() / 1000;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* If a signing key is set for this builder, recalculates the signature
|
|
64
|
+
*
|
|
65
|
+
* @returns {string} the signature value
|
|
66
|
+
*/
|
|
67
|
+
getSignature() {
|
|
68
|
+
if (this._signKey) {
|
|
69
|
+
this._signature = this.ethSignMsgHash();
|
|
70
|
+
}
|
|
71
|
+
if (this._signature == null) {
|
|
72
|
+
throw new sdk_core_1.InvalidSignatureError('Null signature value');
|
|
73
|
+
}
|
|
74
|
+
return this._signature;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the prefix used in generating an operation hash for sending native coins
|
|
78
|
+
*
|
|
79
|
+
* @returns the string prefix
|
|
80
|
+
*/
|
|
81
|
+
getNativeOperationHashPrefix() {
|
|
82
|
+
return 'ETHER';
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Obtains the proper operation hash to sign either a sendMultiSig data
|
|
86
|
+
* or a sendMultiSigToken data
|
|
87
|
+
*
|
|
88
|
+
* @returns {string} the operation hash
|
|
89
|
+
*/
|
|
90
|
+
getOperationHash() {
|
|
91
|
+
const hash = utils_2.solidityKeccak256(['string', 'address', 'uint', 'bytes', 'uint', 'uint'], [
|
|
92
|
+
this.getNativeOperationHashPrefix(),
|
|
93
|
+
this._toAddress,
|
|
94
|
+
'0',
|
|
95
|
+
this._data,
|
|
96
|
+
this._expirationTime,
|
|
97
|
+
this._sequenceId,
|
|
98
|
+
]);
|
|
99
|
+
return hash;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Signs the Message with the given private key
|
|
103
|
+
* @returns {string} 65 byte long raw signature
|
|
104
|
+
*/
|
|
105
|
+
ethSignMsgHash() {
|
|
106
|
+
const signKey = new utils_2.SigningKey('0x'.concat(this._signKey));
|
|
107
|
+
const digest = signKey.signDigest(this.getOperationHash());
|
|
108
|
+
const rawSignature = utils_2.joinSignature(digest);
|
|
109
|
+
return rawSignature;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.BaseNFTTransferBuilder = BaseNFTTransferBuilder;
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZU5GVFRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJhbnNmZXJCdWlsZGVycy9iYXNlTkZUVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhDQUFvRjtBQUNwRixvQ0FBNkM7QUFDN0MsNENBQWdGO0FBRWhGLE1BQXNCLHNCQUFzQjtJQVkxQyxZQUFzQixjQUF1QjtRQVgxQixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFZekMsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQ2hDLDBEQUEwRDtZQUMxRCxJQUFJLENBQUMsZUFBZSxHQUFHLHNCQUFzQixDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVk7UUFDekIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sSUFBSSxxQ0FBMEIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBZTtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFlO1FBQ2hDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxJQUFJLHFDQUEwQixDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELEVBQUUsQ0FBQyxPQUFlO1FBQ2hCLElBQUkseUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sSUFBSSxxQ0FBMEIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxJQUFJLENBQUMsT0FBZTtRQUNsQixJQUFJLHlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUkscUNBQTBCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLGlCQUFpQjtRQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLFlBQVk7UUFDcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRTtZQUMzQixNQUFNLElBQUksZ0NBQXFCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUN6RDtRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLDRCQUE0QjtRQUNwQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxnQkFBZ0I7UUFDdEIsTUFBTSxJQUFJLEdBQUcseUJBQWlCLENBQzVCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFDdEQ7WUFDRSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFVBQVU7WUFDZixHQUFHO1lBQ0gsSUFBSSxDQUFDLEtBQUs7WUFDVixJQUFJLENBQUMsZUFBZTtZQUNwQixJQUFJLENBQUMsV0FBVztTQUNqQixDQUNGLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDTyxjQUFjO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksa0JBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMzRCxNQUFNLFlBQVksR0FBRyxxQkFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNDLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQWhJRCx3REFnSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvciwgSW52YWxpZFNpZ25hdHVyZUVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGlzVmFsaWRFdGhBZGRyZXNzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgam9pblNpZ25hdHVyZSwgc29saWRpdHlLZWNjYWsyNTYsIFNpZ25pbmdLZXkgfSBmcm9tICdldGhlcnMvbGliL3V0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VORlRUcmFuc2ZlckJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX0VNUFRZX0hFWF9WQUxVRSA9ICcweCc7XG4gIC8vIGR1bW15IGFjY291bnQgdmFsdWUsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggU2VuZE11bHRpU2lnXG4gIHByb3RlY3RlZCBfZnJvbUFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIF90b0FkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9zZXF1ZW5jZUlkOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfc2lnbktleTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2V4cGlyYXRpb25UaW1lOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfc2lnbmF0dXJlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZGF0YTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3Rva2VuQ29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNlcmlhbGl6ZWREYXRhPzogc3RyaW5nKSB7XG4gICAgaWYgKHNlcmlhbGl6ZWREYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIG1hbmRhdG9yeSBmaWVsZHNcbiAgICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lID0gQmFzZU5GVFRyYW5zZmVyQnVpbGRlci5nZXRFeHBpcmF0aW9uVGltZSgpO1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICB9XG4gIH1cblxuICBleHBpcmF0aW9uVGltZShkYXRlOiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAoZGF0ZSA+IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lID0gZGF0ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0ludmFsaWQgZXhwaXJhdGlvbiB0aW1lJyk7XG4gIH1cblxuICBrZXkoc2lnbktleTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fc2lnbktleSA9IHNpZ25LZXk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb250cmFjdFNlcXVlbmNlSWQoY291bnRlcjogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKGNvdW50ZXIgPj0gMCkge1xuICAgICAgdGhpcy5fc2lnbmF0dXJlID0gdGhpcy5fRU1QVFlfSEVYX1ZBTFVFO1xuICAgICAgdGhpcy5fc2VxdWVuY2VJZCA9IGNvdW50ZXI7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGNvbnRyYWN0IHNlcXVlbmNlIGlkJyk7XG4gIH1cblxuICB0byhhZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoaXNWYWxpZEV0aEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX3RvQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgfVxuXG4gIGZyb20oYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKGlzVmFsaWRFdGhBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aGlzLl9zaWduYXR1cmUgPSB0aGlzLl9FTVBUWV9IRVhfVkFMVUU7XG4gICAgICB0aGlzLl9mcm9tQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gYW4gZXhwaXJhdGlvbiB0aW1lLCBpbiBzZWNvbmRzLCBzZXQgdG8gb25lIGhvdXIgZnJvbSBub3dcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gZXhwaXJhdGlvbiB0aW1lXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRFeHBpcmF0aW9uVGltZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBjdXJyZW50RGF0ZS5zZXRIb3VycyhjdXJyZW50RGF0ZS5nZXRIb3VycygpICsgMSk7XG4gICAgcmV0dXJuIGN1cnJlbnREYXRlLmdldFRpbWUoKSAvIDEwMDA7XG4gIH1cblxuICAvKipcbiAgICogSWYgYSBzaWduaW5nIGtleSBpcyBzZXQgZm9yIHRoaXMgYnVpbGRlciwgcmVjYWxjdWxhdGVzIHRoZSBzaWduYXR1cmVcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHNpZ25hdHVyZSB2YWx1ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFNpZ25hdHVyZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9zaWduS2V5KSB7XG4gICAgICB0aGlzLl9zaWduYXR1cmUgPSB0aGlzLmV0aFNpZ25Nc2dIYXNoKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zaWduYXR1cmUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcignTnVsbCBzaWduYXR1cmUgdmFsdWUnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByZWZpeCB1c2VkIGluIGdlbmVyYXRpbmcgYW4gb3BlcmF0aW9uIGhhc2ggZm9yIHNlbmRpbmcgbmF0aXZlIGNvaW5zXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSBzdHJpbmcgcHJlZml4XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0TmF0aXZlT3BlcmF0aW9uSGFzaFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnRVRIRVInO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGFpbnMgdGhlIHByb3BlciBvcGVyYXRpb24gaGFzaCB0byBzaWduIGVpdGhlciBhIHNlbmRNdWx0aVNpZyBkYXRhXG4gICAqIG9yIGEgc2VuZE11bHRpU2lnVG9rZW4gZGF0YVxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgb3BlcmF0aW9uIGhhc2hcbiAgICovXG4gIHByaXZhdGUgZ2V0T3BlcmF0aW9uSGFzaCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhc2ggPSBzb2xpZGl0eUtlY2NhazI1NihcbiAgICAgIFsnc3RyaW5nJywgJ2FkZHJlc3MnLCAndWludCcsICdieXRlcycsICd1aW50JywgJ3VpbnQnXSxcbiAgICAgIFtcbiAgICAgICAgdGhpcy5nZXROYXRpdmVPcGVyYXRpb25IYXNoUHJlZml4KCksXG4gICAgICAgIHRoaXMuX3RvQWRkcmVzcyxcbiAgICAgICAgJzAnLCAvLyBkdW1teSBhbW91bnQgdmFsdWVcbiAgICAgICAgdGhpcy5fZGF0YSxcbiAgICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUsXG4gICAgICAgIHRoaXMuX3NlcXVlbmNlSWQsXG4gICAgICBdXG4gICAgKTtcbiAgICByZXR1cm4gaGFzaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyB0aGUgTWVzc2FnZSB3aXRoIHRoZSBnaXZlbiBwcml2YXRlIGtleVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSA2NSBieXRlIGxvbmcgcmF3IHNpZ25hdHVyZVxuICAgKi9cbiAgcHJvdGVjdGVkIGV0aFNpZ25Nc2dIYXNoKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2lnbktleSA9IG5ldyBTaWduaW5nS2V5KCcweCcuY29uY2F0KHRoaXMuX3NpZ25LZXkpKTtcbiAgICBjb25zdCBkaWdlc3QgPSBzaWduS2V5LnNpZ25EaWdlc3QodGhpcy5nZXRPcGVyYXRpb25IYXNoKCkpO1xuICAgIGNvbnN0IHJhd1NpZ25hdHVyZSA9IGpvaW5TaWduYXR1cmUoZGlnZXN0KTtcblxuICAgIHJldHVybiByYXdTaWduYXR1cmU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/transferBuilders/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./baseNFTTransferBuilder"), exports);
|
|
14
|
+
__exportStar(require("./transferBuilderERC1155"), exports);
|
|
15
|
+
__exportStar(require("./transferBuilderERC721"), exports);
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zZmVyQnVpbGRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkRBQXlDO0FBQ3pDLDJEQUF5QztBQUN6QywwREFBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Jhc2VORlRUcmFuc2ZlckJ1aWxkZXInO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXJFUkMxMTU1JztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyRVJDNzIxJztcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseNFTTransferBuilder } from './baseNFTTransferBuilder';
|
|
2
|
+
export declare class ERC1155TransferBuilder extends BaseNFTTransferBuilder {
|
|
3
|
+
private _tokenIds;
|
|
4
|
+
private _values;
|
|
5
|
+
private _bytes;
|
|
6
|
+
constructor(serializedData?: string);
|
|
7
|
+
tokenContractAddress(address: string): ERC1155TransferBuilder;
|
|
8
|
+
entry(tokenId: number, value: number): ERC1155TransferBuilder;
|
|
9
|
+
bytes(bytesInNumber: number): ERC1155TransferBuilder;
|
|
10
|
+
signAndBuild(): string;
|
|
11
|
+
private hasMandatoryFields;
|
|
12
|
+
private decodeTransferData;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=transferBuilderERC1155.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilderERC1155.d.ts","sourceRoot":"","sources":["../../../../src/lib/transferBuilders/transferBuilderERC1155.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,qBAAa,sBAAuB,SAAQ,sBAAsB;IAChE,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,MAAM,CAAS;gBAEX,cAAc,CAAC,EAAE,MAAM;IAWnC,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB;IAQ7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,sBAAsB;IAM7D,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,sBAAsB;IAKpD,YAAY,IAAI,MAAM;IA4BtB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,kBAAkB;CAc3B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ERC1155TransferBuilder = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
5
|
+
const utils_1 = require("ethers/lib/utils");
|
|
6
|
+
const contractCall_1 = require("../contractCall");
|
|
7
|
+
const utils_2 = require("../utils");
|
|
8
|
+
const walletUtil_1 = require("../walletUtil");
|
|
9
|
+
const baseNFTTransferBuilder_1 = require("./baseNFTTransferBuilder");
|
|
10
|
+
class ERC1155TransferBuilder extends baseNFTTransferBuilder_1.BaseNFTTransferBuilder {
|
|
11
|
+
constructor(serializedData) {
|
|
12
|
+
super(serializedData);
|
|
13
|
+
this.bytes(0);
|
|
14
|
+
if (serializedData) {
|
|
15
|
+
this.decodeTransferData(serializedData);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
this._tokenIds = [];
|
|
19
|
+
this._values = [];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
tokenContractAddress(address) {
|
|
23
|
+
if (utils_2.isValidEthAddress(address)) {
|
|
24
|
+
this._tokenContractAddress = address;
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid address');
|
|
28
|
+
}
|
|
29
|
+
entry(tokenId, value) {
|
|
30
|
+
this._tokenIds.push(tokenId.toString());
|
|
31
|
+
this._values.push(value.toString());
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
bytes(bytesInNumber) {
|
|
35
|
+
this._bytes = utils_1.hexZeroPad(utils_1.hexlify(bytesInNumber), 32);
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
signAndBuild() {
|
|
39
|
+
const hasMandatoryFields = this.hasMandatoryFields();
|
|
40
|
+
if (hasMandatoryFields) {
|
|
41
|
+
if (this._tokenIds.length === 1) {
|
|
42
|
+
const values = [this._fromAddress, this._toAddress, this._tokenIds[0], this._values[0], this._bytes];
|
|
43
|
+
const contractCall = new contractCall_1.ContractCall(walletUtil_1.ERC1155SafeTransferTypeMethodId, walletUtil_1.ERC1155SafeTransferTypes, values);
|
|
44
|
+
this._data = contractCall.serialize();
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const values = [this._fromAddress, this._toAddress, this._tokenIds, this._values, this._bytes];
|
|
48
|
+
const contractCall = new contractCall_1.ContractCall(walletUtil_1.ERC1155BatchTransferTypeMethodId, walletUtil_1.ERC1155BatchTransferTypes, values);
|
|
49
|
+
this._data = contractCall.serialize();
|
|
50
|
+
}
|
|
51
|
+
return utils_2.sendMultiSigData(this._tokenContractAddress, '0', // dummy amount value
|
|
52
|
+
this._data, this._expirationTime, this._sequenceId, this.getSignature());
|
|
53
|
+
}
|
|
54
|
+
throw new sdk_core_1.BuildTransactionError(`Missing transfer mandatory fields.
|
|
55
|
+
Destination (to) address, source (from) address, sequenceID, the token contract address, tokenIDs and their values are mandatory`);
|
|
56
|
+
}
|
|
57
|
+
hasMandatoryFields() {
|
|
58
|
+
return (this._tokenIds !== undefined &&
|
|
59
|
+
this._tokenIds.length !== 0 &&
|
|
60
|
+
this._values.length !== 0 &&
|
|
61
|
+
this._tokenIds.length === this._values.length &&
|
|
62
|
+
this._toAddress !== undefined &&
|
|
63
|
+
this._fromAddress !== undefined &&
|
|
64
|
+
this._tokenContractAddress !== undefined &&
|
|
65
|
+
this._sequenceId !== undefined);
|
|
66
|
+
}
|
|
67
|
+
decodeTransferData(data) {
|
|
68
|
+
const transferData = utils_2.decodeERC1155TransferData(data);
|
|
69
|
+
this._toAddress = transferData.to;
|
|
70
|
+
this._fromAddress = transferData.from;
|
|
71
|
+
this._expirationTime = transferData.expireTime;
|
|
72
|
+
this._sequenceId = transferData.sequenceId;
|
|
73
|
+
this._signature = transferData.signature;
|
|
74
|
+
this._tokenContractAddress = transferData.tokenContractAddress;
|
|
75
|
+
this._tokenIds = transferData.tokenIds;
|
|
76
|
+
this._values = transferData.values;
|
|
77
|
+
if (transferData.data) {
|
|
78
|
+
this._data = transferData.data;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.ERC1155TransferBuilder = ERC1155TransferBuilder;
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyRVJDMTE1NS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJhbnNmZXJCdWlsZGVycy90cmFuc2ZlckJ1aWxkZXJFUkMxMTU1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhDQUFvRjtBQUNwRiw0Q0FBdUQ7QUFFdkQsa0RBQStDO0FBQy9DLG9DQUEwRjtBQUMxRiw4Q0FLdUI7QUFDdkIscUVBQWtFO0FBRWxFLE1BQWEsc0JBQXVCLFNBQVEsK0NBQXNCO0lBS2hFLFlBQVksY0FBdUI7UUFDakMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLGNBQWMsRUFBRTtZQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLE9BQWU7UUFDbEMsSUFBSSx5QkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUkscUNBQTBCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFhO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVE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Q0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUU7WUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztDQUNGO0FBekZELHdEQXlGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgaGV4bGlmeSwgaGV4WmVyb1BhZCB9IGZyb20gJ2V0aGVycy9saWIvdXRpbHMnO1xuXG5pbXBvcnQgeyBDb250cmFjdENhbGwgfSBmcm9tICcuLi9jb250cmFjdENhbGwnO1xuaW1wb3J0IHsgZGVjb2RlRVJDMTE1NVRyYW5zZmVyRGF0YSwgaXNWYWxpZEV0aEFkZHJlc3MsIHNlbmRNdWx0aVNpZ0RhdGEgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBFUkMxMTU1QmF0Y2hUcmFuc2ZlclR5cGVzLFxuICBFUkMxMTU1U2FmZVRyYW5zZmVyVHlwZXMsXG4gIEVSQzExNTVCYXRjaFRyYW5zZmVyVHlwZU1ldGhvZElkLFxuICBFUkMxMTU1U2FmZVRyYW5zZmVyVHlwZU1ldGhvZElkLFxufSBmcm9tICcuLi93YWxsZXRVdGlsJztcbmltcG9ydCB7IEJhc2VORlRUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL2Jhc2VORlRUcmFuc2ZlckJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgRVJDMTE1NVRyYW5zZmVyQnVpbGRlciBleHRlbmRzIEJhc2VORlRUcmFuc2ZlckJ1aWxkZXIge1xuICBwcml2YXRlIF90b2tlbklkczogc3RyaW5nW107XG4gIHByaXZhdGUgX3ZhbHVlczogc3RyaW5nW107XG4gIHByaXZhdGUgX2J5dGVzOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2VyaWFsaXplZERhdGE/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihzZXJpYWxpemVkRGF0YSk7XG4gICAgdGhpcy5ieXRlcygwKTtcbiAgICBpZiAoc2VyaWFsaXplZERhdGEpIHtcbiAgICAgIHRoaXMuZGVjb2RlVHJhbnNmZXJEYXRhKHNlcmlhbGl6ZWREYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdG9rZW5JZHMgPSBbXTtcbiAgICAgIHRoaXMuX3ZhbHVlcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHRva2VuQ29udHJhY3RBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IEVSQzExNTVUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmIChpc1ZhbGlkRXRoQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gIH1cblxuICBlbnRyeSh0b2tlbklkOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiBFUkMxMTU1VHJhbnNmZXJCdWlsZGVyIHtcbiAgICB0aGlzLl90b2tlbklkcy5wdXNoKHRva2VuSWQudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5fdmFsdWVzLnB1c2godmFsdWUudG9TdHJpbmcoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBieXRlcyhieXRlc0luTnVtYmVyOiBudW1iZXIpOiBFUkMxMTU1VHJhbnNmZXJCdWlsZGVyIHtcbiAgICB0aGlzLl9ieXRlcyA9IGhleFplcm9QYWQoaGV4bGlmeShieXRlc0luTnVtYmVyKSwgMzIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2lnbkFuZEJ1aWxkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzTWFuZGF0b3J5RmllbGRzID0gdGhpcy5oYXNNYW5kYXRvcnlGaWVsZHMoKTtcbiAgICBpZiAoaGFzTWFuZGF0b3J5RmllbGRzKSB7XG4gICAgICBpZiAodGhpcy5fdG9rZW5JZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFt0aGlzLl9mcm9tQWRkcmVzcywgdGhpcy5fdG9BZGRyZXNzLCB0aGlzLl90b2tlbklkc1swXSwgdGhpcy5fdmFsdWVzWzBdLCB0aGlzLl9ieXRlc107XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0Q2FsbCA9IG5ldyBDb250cmFjdENhbGwoRVJDMTE1NVNhZmVUcmFuc2ZlclR5cGVNZXRob2RJZCwgRVJDMTE1NVNhZmVUcmFuc2ZlclR5cGVzLCB2YWx1ZXMpO1xuICAgICAgICB0aGlzLl9kYXRhID0gY29udHJhY3RDYWxsLnNlcmlhbGl6ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW3RoaXMuX2Zyb21BZGRyZXNzLCB0aGlzLl90b0FkZHJlc3MsIHRoaXMuX3Rva2VuSWRzLCB0aGlzLl92YWx1ZXMsIHRoaXMuX2J5dGVzXTtcbiAgICAgICAgY29uc3QgY29udHJhY3RDYWxsID0gbmV3IENvbnRyYWN0Q2FsbChFUkMxMTU1QmF0Y2hUcmFuc2ZlclR5cGVNZXRob2RJZCwgRVJDMTE1NUJhdGNoVHJhbnNmZXJUeXBlcywgdmFsdWVzKTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGNvbnRyYWN0Q2FsbC5zZXJpYWxpemUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlbmRNdWx0aVNpZ0RhdGEoXG4gICAgICAgIHRoaXMuX3Rva2VuQ29udHJhY3RBZGRyZXNzLFxuICAgICAgICAnMCcsIC8vIGR1bW15IGFtb3VudCB2YWx1ZVxuICAgICAgICB0aGlzLl9kYXRhLFxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uVGltZSxcbiAgICAgICAgdGhpcy5fc2VxdWVuY2VJZCxcbiAgICAgICAgdGhpcy5nZXRTaWduYXR1cmUoKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgIGBNaXNzaW5nIHRyYW5zZmVyIG1hbmRhdG9yeSBmaWVsZHMuIFxuICAgICAgIERlc3RpbmF0aW9uICh0bykgYWRkcmVzcywgc291cmNlIChmcm9tKSBhZGRyZXNzLCBzZXF1ZW5jZUlELCB0aGUgdG9rZW4gY29udHJhY3QgYWRkcmVzcywgdG9rZW5JRHMgYW5kIHRoZWlyIHZhbHVlcyBhcmUgbWFuZGF0b3J5YFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhc01hbmRhdG9yeUZpZWxkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fdG9rZW5JZHMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fdG9rZW5JZHMubGVuZ3RoICE9PSAwICYmXG4gICAgICB0aGlzLl92YWx1ZXMubGVuZ3RoICE9PSAwICYmXG4gICAgICB0aGlzLl90b2tlbklkcy5sZW5ndGggPT09IHRoaXMuX3ZhbHVlcy5sZW5ndGggJiZcbiAgICAgIHRoaXMuX3RvQWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLl9mcm9tQWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLl9zZXF1ZW5jZUlkICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZGVjb2RlVHJhbnNmZXJEYXRhKGRhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRyYW5zZmVyRGF0YSA9IGRlY29kZUVSQzExNTVUcmFuc2ZlckRhdGEoZGF0YSk7XG4gICAgdGhpcy5fdG9BZGRyZXNzID0gdHJhbnNmZXJEYXRhLnRvO1xuICAgIHRoaXMuX2Zyb21BZGRyZXNzID0gdHJhbnNmZXJEYXRhLmZyb207XG4gICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB0cmFuc2ZlckRhdGEuZXhwaXJlVGltZTtcbiAgICB0aGlzLl9zZXF1ZW5jZUlkID0gdHJhbnNmZXJEYXRhLnNlcXVlbmNlSWQ7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0gdHJhbnNmZXJEYXRhLnNpZ25hdHVyZTtcbiAgICB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcyA9IHRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0QWRkcmVzcztcbiAgICB0aGlzLl90b2tlbklkcyA9IHRyYW5zZmVyRGF0YS50b2tlbklkcztcbiAgICB0aGlzLl92YWx1ZXMgPSB0cmFuc2ZlckRhdGEudmFsdWVzO1xuICAgIGlmICh0cmFuc2ZlckRhdGEuZGF0YSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHRyYW5zZmVyRGF0YS5kYXRhO1xuICAgIH1cbiAgfVxufVxuIl19
|