@bitgo/sdk-coin-starknet 1.6.4 → 1.7.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.
@@ -11,6 +11,8 @@ exports.computeStarknetAddress = computeStarknetAddress;
11
11
  exports.getAddressFromPublicKey = getAddressFromPublicKey;
12
12
  exports.formatEthAccountSignature = formatEthAccountSignature;
13
13
  exports.parseTransferCall = parseTransferCall;
14
+ exports.isUdcDeployCall = isUdcDeployCall;
15
+ exports.parseUdcDeployCall = parseUdcDeployCall;
14
16
  exports.generateKeyPair = generateKeyPair;
15
17
  exports.validateRawTransaction = validateRawTransaction;
16
18
  exports.encodeShortString = encodeShortString;
@@ -173,6 +175,35 @@ function parseTransferCall(call) {
173
175
  tokenContract: call.contractAddress,
174
176
  };
175
177
  }
178
+ /** True if call targets UDC deployContract. */
179
+ function isUdcDeployCall(call) {
180
+ if (!call) {
181
+ return false;
182
+ }
183
+ return (call.entrypoint === constants_1.UDC_DEPLOY_ENTRYPOINT &&
184
+ normalizeAddress(call.contractAddress) === normalizeAddress(constants_1.UDC_ADDRESS) &&
185
+ call.calldata.length >= 4);
186
+ }
187
+ /** Parse UDC deployContract calldata: [classHash, salt, unique, ctor_len, ...ctor]. */
188
+ function parseUdcDeployCall(call) {
189
+ if (!isUdcDeployCall(call)) {
190
+ return undefined;
191
+ }
192
+ const classHash = call.calldata[0];
193
+ const salt = call.calldata[1];
194
+ const uniqueFelt = BigInt(call.calldata[2]);
195
+ const ctorLen = Number(BigInt(call.calldata[3]));
196
+ if (!Number.isFinite(ctorLen) || ctorLen < 0 || call.calldata.length < 4 + ctorLen) {
197
+ return undefined;
198
+ }
199
+ return {
200
+ classHash,
201
+ salt,
202
+ unique: uniqueFelt !== 0n,
203
+ constructorCalldata: call.calldata.slice(4, 4 + ctorLen),
204
+ udcAddress: call.contractAddress,
205
+ };
206
+ }
176
207
  /**
177
208
  * Generate a new secp256k1 key pair.
178
209
  */
@@ -321,6 +352,8 @@ exports.default = {
321
352
  normalizeAddress,
322
353
  formatEthAccountSignature,
323
354
  parseTransferCall,
355
+ isUdcDeployCall,
356
+ parseUdcDeployCall,
324
357
  generateKeyPair,
325
358
  validateRawTransaction,
326
359
  encodeShortString,
@@ -329,4 +362,4 @@ exports.default = {
329
362
  calculateInvokeTransactionHash,
330
363
  calculateDeployAccountTransactionHash,
331
364
  };
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkJBLDRDQUdDO0FBTUQsd0NBU0M7QUFLRCw0Q0FnQkM7QUFLRCw4Q0FHQztBQUtELDREQWFDO0FBTUQsb0ZBVUM7QUFNRCw0RUFlQztBQUtELHdEQWFDO0FBS0QsMERBSUM7QUFNRCw4REFZQztBQU1ELDhDQVlDO0FBS0QsMENBUUM7QUFLRCx3REFrQkM7QUFLRCw4Q0FlQztBQU1ELGtEQUVDO0FBTUQsd0RBVUM7QUFTRCx3RUErQ0M7QUFLRCxzRkE0Q0M7QUF6WEQsOENBQWtGO0FBQ2xGLDJDQVlxQjtBQUNyQixtQ0FPaUI7QUFDakIsZ0RBQXVDO0FBRXZDOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsT0FBZTtJQUM5QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDbEUsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzVDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDMUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsb0JBQVEsQ0FBQztJQUNwQyxDQUFD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QUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztLQUM1QixDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBZ0IsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxrQkFBZTtJQUNiLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixvQ0FBb0M7SUFDcEMsZ0NBQWdDO0lBQ2hDLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsZ0JBQWdCO0lBQ2hCLHlCQUF5QjtJQUN6QixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLHNCQUFzQjtJQUN0Qiw4QkFBOEI7SUFDOUIscUNBQXFDO0NBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlSGFzaE9uRWxlbWVudHMsIHBvc2VpZG9uSGFzaE1hbnksIGtlY2NhayB9IGZyb20gJ0BzY3VyZS9zdGFya25ldCc7XG5pbXBvcnQge1xuICBGRUxUX01BWCxcbiAgTUFTS18xMjgsXG4gIE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsXG4gIEFERFJfQk9VTkQsXG4gIENPTlRSQUNUX0FERFJFU1NfUFJFRklYLFxuICBJTlZPS0VfVFhfUFJFRklYLFxuICBERVBMT1lfQUNDT1VOVF9UWF9QUkVGSVgsXG4gIFRSQU5TQUNUSU9OX1ZFUlNJT05fMyxcbiAgTDFfR0FTX05BTUUsXG4gIEwyX0dBU19OQU1FLFxuICBMMV9EQVRBX0dBU19OQU1FLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBTdGFya25ldFRyYW5zYWN0aW9uRGF0YSxcbiAgU3RhcmtuZXRUcmFuc2FjdGlvblR5cGUsXG4gIFN0YXJrbmV0Q2FsbCxcbiAgUGFyc2VkVHJhbnNmZXJEYXRhLFxuICBJbnZva2VUcmFuc2FjdGlvbkhhc2hQYXJhbXMsXG4gIERlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2hQYXJhbXMsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5cbi8qKlxuICogTm9ybWFsaXplIGEgU3RhcmtuZXQgYWRkcmVzcyB0byBjYW5vbmljYWwgZm9ybTogMHggKyA2NCBoZXggY2hhcnMsIHplcm8tcGFkZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoZXggPSBhZGRyZXNzLnN0YXJ0c1dpdGgoJzB4JykgPyBhZGRyZXNzLnNsaWNlKDIpIDogYWRkcmVzcztcbiAgcmV0dXJuICcweCcgKyBoZXgucGFkU3RhcnQoNjQsICcwJykudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBTdGFya25ldCBhZGRyZXNzZXMgYXJlIGZlbHQyNTIgdmFsdWVzIHJlcHJlc2VudGVkIGFzIDB4LXByZWZpeGVkIGhleC5cbiAqIFZhbGlkIHJhbmdlOiAwIDwgYWRkcmVzcyA8IEZFTFRfTUFYLCB3aXRoIDB4IHByZWZpeCBhbmQgaGV4IGNoYXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgYWRkcmVzcyAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFhZGRyZXNzLm1hdGNoKC9eMHhbMC05YS1mQS1GXXsxLDY0fSQvKSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHZhbCA9IEJpZ0ludChhZGRyZXNzKTtcbiAgICByZXR1cm4gdmFsID4gMG4gJiYgdmFsIDwgRkVMVF9NQVg7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKGNvbXByZXNzZWQgMzMgYnl0ZXMgb3IgdW5jb21wcmVzc2VkIDY1IGJ5dGVzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQdWJsaWNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oa2V5LCAnaGV4Jyk7XG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDMzICYmIChidWZbMF0gPT09IDB4MDIgfHwgYnVmWzBdID09PSAweDAzKSkge1xuICAgICAgZWNjLnBvaW50Q29tcHJlc3MoYnVmLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gNjUgJiYgYnVmWzBdID09PSAweDA0KSB7XG4gICAgICBlY2MucG9pbnRDb21wcmVzcyhidWYsIHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBzZWNwMjU2azEgcHJpdmF0ZSBrZXkgKDMyIGJ5dGVzIGhleCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIC9eWzAtOWEtZkEtRl17NjR9JC8udGVzdChrZXkpO1xufVxuXG4vKipcbiAqIEdldCB1bmNvbXByZXNzZWQgcHVibGljIGtleSAoeCB8fCB5LCAxMjggaGV4IGNoYXJzLCBubyAwNCBwcmVmaXgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KGNvbXByZXNzZWRIZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGNvbXByZXNzZWRIZXgsICdoZXgnKTtcbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDY1ICYmIGJ1ZlswXSA9PT0gMHgwNCkge1xuICAgIHJldHVybiBjb21wcmVzc2VkSGV4LnNsaWNlKDIpO1xuICB9XG4gIGlmIChidWYubGVuZ3RoID09PSAzMyAmJiAoYnVmWzBdID09PSAweDAyIHx8IGJ1ZlswXSA9PT0gMHgwMykpIHtcbiAgICBjb25zdCB1bmNvbXByZXNzZWQgPSBCdWZmZXIuZnJvbShlY2MucG9pbnRDb21wcmVzcyhidWYsIGZhbHNlKSk7XG4gICAgcmV0dXJuIHVuY29tcHJlc3NlZC50b1N0cmluZygnaGV4Jykuc2xpY2UoMik7XG4gIH1cbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDY0KSB7XG4gICAgcmV0dXJuIGNvbXByZXNzZWRIZXg7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHB1YmxpYyBrZXkgZm9ybWF0OiAke2NvbXByZXNzZWRIZXguc3Vic3RyaW5nKDAsIDEwKX0uLi5gKTtcbn1cblxuLyoqXG4gKiBDb21waWxlIEV0aEFjY291bnQgY29uc3RydWN0b3IgY2FsbGRhdGEgZnJvbSBmdWxsIHNlY3AyNTZrMSBwdWJsaWMga2V5LlxuICogUmV0dXJucyBbeF9sb3csIHhfaGlnaCwgeV9sb3csIHlfaGlnaF0gYXMgZmVsdDI1MiBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUV0aEFjY291bnRDb25zdHJ1Y3RvckNhbGxkYXRhKGZ1bGxQdWJsaWNLZXk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcHViWCA9IEJpZ0ludCgnMHgnICsgZnVsbFB1YmxpY0tleS5zbGljZSgwLCA2NCkpO1xuICBjb25zdCBwdWJZID0gQmlnSW50KCcweCcgKyBmdWxsUHVibGljS2V5LnNsaWNlKDY0KSk7XG5cbiAgcmV0dXJuIFtcbiAgICAnMHgnICsgKHB1YlggJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAocHViWCA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChwdWJZICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHB1YlkgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICBdO1xufVxuXG4vKipcbiAqIENvbXB1dGUgU3RhcmtuZXQgY29udHJhY3QgYWRkcmVzcyBmcm9tIGhhc2ggY29tcG9uZW50cy5cbiAqIFJlcGxpY2F0ZXMgc3RhcmtuZXQuanMgY2FsY3VsYXRlQ29udHJhY3RBZGRyZXNzRnJvbUhhc2ggdXNpbmcgQHNjdXJlL3N0YXJrbmV0IHBlZGVyc2VuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udHJhY3RBZGRyZXNzRnJvbUhhc2goXG4gIHNhbHQ6IHN0cmluZyxcbiAgY2xhc3NIYXNoOiBzdHJpbmcsXG4gIGNvbnN0cnVjdG9yQ2FsbGRhdGE6IHN0cmluZ1tdLFxuICBkZXBsb3llckFkZHJlc3M6IG51bWJlciB8IGJpZ2ludFxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2FsbGRhdGFIYXNoID0gY29tcHV0ZUhhc2hPbkVsZW1lbnRzKGNvbnN0cnVjdG9yQ2FsbGRhdGEubWFwKEJpZ0ludCkpIGFzIHN0cmluZztcbiAgY29uc3QgcmF3SGFzaCA9IGNvbXB1dGVIYXNoT25FbGVtZW50cyhbXG4gICAgQ09OVFJBQ1RfQUREUkVTU19QUkVGSVgsXG4gICAgQmlnSW50KGRlcGxveWVyQWRkcmVzcyksXG4gICAgQmlnSW50KHNhbHQpLFxuICAgIEJpZ0ludChjbGFzc0hhc2gpLFxuICAgIEJpZ0ludChjYWxsZGF0YUhhc2gpLFxuICBdKSBhcyBzdHJpbmc7XG4gIHJldHVybiBub3JtYWxpemVBZGRyZXNzKCcweCcgKyAoQmlnSW50KHJhd0hhc2gpICUgQUREUl9CT1VORCkudG9TdHJpbmcoMTYpKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIFN0YXJrbmV0IEV0aEFjY291bnQgY291bnRlcmZhY3R1YWwgYWRkcmVzcyBmcm9tIHB1YmxpYyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3RhcmtuZXRBZGRyZXNzKGZ1bGxQdWJsaWNLZXk6IHN0cmluZyk6IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb25zdHJ1Y3RvckNhbGxkYXRhOiBzdHJpbmdbXTtcbiAgc2FsdDogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yQ2FsbGRhdGEgPSBjb21waWxlRXRoQWNjb3VudENvbnN0cnVjdG9yQ2FsbGRhdGEoZnVsbFB1YmxpY0tleSk7XG5cbiAgY29uc3QgcHViWCA9IEJpZ0ludCgnMHgnICsgZnVsbFB1YmxpY0tleS5zbGljZSgwLCA2NCkpO1xuICBjb25zdCBzYWx0ID0gJzB4JyArIChwdWJYICUgRkVMVF9NQVgpLnRvU3RyaW5nKDE2KTtcblxuICBjb25zdCBhZGRyZXNzID0gY2FsY3VsYXRlQ29udHJhY3RBZGRyZXNzRnJvbUhhc2goc2FsdCwgT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCwgY29uc3RydWN0b3JDYWxsZGF0YSwgMCk7XG5cbiAgcmV0dXJuIHsgYWRkcmVzcywgY29uc3RydWN0b3JDYWxsZGF0YSwgc2FsdCB9O1xufVxuXG4vKipcbiAqIERlcml2ZSBTdGFya25ldCBFdGhBY2NvdW50IGFkZHJlc3MgZnJvbSBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoY29tcHJlc3NlZFB1YmxpY0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZnVsbFB1YmxpY0tleSA9IGdldFVuY29tcHJlc3NlZFB1YmxpY0tleShjb21wcmVzc2VkUHVibGljS2V5KTtcbiAgY29uc3QgeyBhZGRyZXNzIH0gPSBjb21wdXRlU3RhcmtuZXRBZGRyZXNzKGZ1bGxQdWJsaWNLZXkpO1xuICByZXR1cm4gYWRkcmVzcztcbn1cblxuLyoqXG4gKiBGb3JtYXQgRUNEU0Egc2lnbmF0dXJlIGZvciBTdGFya25ldCBFdGhBY2NvdW50LlxuICogUmV0dXJucyBbcl9sb3csIHJfaGlnaCwgc19sb3csIHNfaGlnaCwgdl0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFdGhBY2NvdW50U2lnbmF0dXJlKHI6IHN0cmluZywgczogc3RyaW5nLCByZWNpZDogbnVtYmVyKTogc3RyaW5nW10ge1xuICBjb25zdCByQmlnID0gQmlnSW50KCcweCcgKyByKTtcbiAgY29uc3Qgc0JpZyA9IEJpZ0ludCgnMHgnICsgcyk7XG4gIGNvbnN0IHYgPSBCaWdJbnQocmVjaWQpO1xuXG4gIHJldHVybiBbXG4gICAgJzB4JyArIChyQmlnICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHJCaWcgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAoc0JpZyAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChzQmlnID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgdi50b1N0cmluZygxNiksXG4gIF07XG59XG5cbi8qKlxuICogRXh0cmFjdCByZWNpcGllbnQsIGFtb3VudCwgYW5kIHRva2VuIGNvbnRyYWN0IGZyb20gYSB0cmFuc2ZlciBjYWxsLlxuICogUmV2ZXJzZSBvZiBUcmFuc2ZlckJ1aWxkZXIuY29tcGlsZVRyYW5zZmVyQ2FsbGRhdGE6IGNhbGxkYXRhID0gW3JlY2lwaWVudCwgYW1vdW50X2xvdywgYW1vdW50X2hpZ2hdLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUcmFuc2ZlckNhbGwoY2FsbDogU3RhcmtuZXRDYWxsKTogUGFyc2VkVHJhbnNmZXJEYXRhIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNhbGwuZW50cnlwb2ludCAhPT0gJ3RyYW5zZmVyJyB8fCBjYWxsLmNhbGxkYXRhLmxlbmd0aCA8IDMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGFtb3VudExvdyA9IEJpZ0ludChjYWxsLmNhbGxkYXRhWzFdKTtcbiAgY29uc3QgYW1vdW50SGlnaCA9IEJpZ0ludChjYWxsLmNhbGxkYXRhWzJdKTtcbiAgY29uc3QgYW1vdW50ID0gKChhbW91bnRIaWdoIDw8IDEyOG4pIHwgYW1vdW50TG93KS50b1N0cmluZygpO1xuICByZXR1cm4ge1xuICAgIHJlY2lwaWVudDogY2FsbC5jYWxsZGF0YVswXSxcbiAgICBhbW91bnQsXG4gICAgdG9rZW5Db250cmFjdDogY2FsbC5jb250cmFjdEFkZHJlc3MsXG4gIH07XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBuZXcgc2VjcDI1NmsxIGtleSBwYWlyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiB7IHB1Yjogc3RyaW5nOyBwcnY6IHN0cmluZyB9IHtcbiAgY29uc3QgeyBLZXlQYWlyOiBTdGFya25ldEtleVBhaXIgfSA9IHJlcXVpcmUoJy4va2V5UGFpcicpO1xuICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBTdGFya25ldEtleVBhaXIoeyBzZWVkIH0pIDogbmV3IFN0YXJrbmV0S2V5UGFpcigpO1xuICBjb25zdCB7IHB1YiwgcHJ2IH0gPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgaWYgKCFwcnYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1ByaXZhdGUga2V5IGlzIG1pc3NpbmcgaW4gdGhlIGdlbmVyYXRlZCBrZXkgcGFpci4nKTtcbiAgfVxuICByZXR1cm4geyBwdWIsIHBydiB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHJhdyB0cmFuc2FjdGlvbiBkYXRhIGhhcyByZXF1aXJlZCBmaWVsZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHR4OiBTdGFya25ldFRyYW5zYWN0aW9uRGF0YSk6IHZvaWQge1xuICBpZiAoIXR4LnNlbmRlckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgc2VuZGVyIGFkZHJlc3MnKTtcbiAgfVxuICBpZiAoIWlzVmFsaWRBZGRyZXNzKHR4LnNlbmRlckFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlbmRlciBhZGRyZXNzOiAke3R4LnNlbmRlckFkZHJlc3N9YCk7XG4gIH1cbiAgaWYgKHR4LnRyYW5zYWN0aW9uVHlwZSA9PT0gU3RhcmtuZXRUcmFuc2FjdGlvblR5cGUuREVQTE9ZX0FDQ09VTlQpIHtcbiAgICBpZiAoIXR4LmNsYXNzSGFzaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGNsYXNzIGhhc2ggZm9yIGRlcGxveSBhY2NvdW50IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdHguY29uc3RydWN0b3JDYWxsZGF0YSB8fCB0eC5jb25zdHJ1Y3RvckNhbGxkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGNvbnN0cnVjdG9yIGNhbGxkYXRhIGZvciBkZXBsb3kgYWNjb3VudCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXR4LmNvbnRyYWN0QWRkcmVzc1NhbHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBjb250cmFjdCBhZGRyZXNzIHNhbHQgZm9yIGRlcGxveSBhY2NvdW50IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRW5jb2RlIGFuIEFTQ0lJIHN0cmluZyAobWF4IDMxIGNoYXJzKSBhcyBhIGZlbHQyNTIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVTaG9ydFN0cmluZyhzdHI6IHN0cmluZyk6IGJpZ2ludCB7XG4gIGlmIChzdHIubGVuZ3RoID4gMzEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNob3J0IHN0cmluZyB0b28gbG9uZzogJHtzdHIubGVuZ3RofSA+IDMxYCk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGNvZGUgPiAxMjcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm9uLUFTQ0lJIGNoYXJhY3RlciBhdCBpbmRleCAke2l9OiBjb2RlICR7Y29kZX1gKTtcbiAgICB9XG4gIH1cbiAgbGV0IHJlc3VsdCA9IDBuO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgOG4pIHwgQmlnSW50KHN0ci5jaGFyQ29kZUF0KGkpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIFN0YXJrbmV0IGZ1bmN0aW9uIHNlbGVjdG9yOiBrZWNjYWsyNTYobmFtZSkgbWFza2VkIHRvIDI1MCBiaXRzLlxuICogQHNjdXJlL3N0YXJrbmV0J3Mga2VjY2FrKCkgYWxyZWFkeSBhcHBsaWVzIHRoZSAyNTAtYml0IG1hc2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RvckZyb21OYW1lKG5hbWU6IHN0cmluZyk6IGJpZ2ludCB7XG4gIHJldHVybiBrZWNjYWsoQnVmZmVyLmZyb20obmFtZSwgJ2FzY2lpJykpO1xufVxuXG4vKipcbiAqIENvbXBpbGUgY2FsbHMgaW50byB0aGUgQ2Fpcm8gMSBtdWx0aWNhbGwgX19leGVjdXRlX18gY2FsbGRhdGEgZm9ybWF0LlxuICogRm9ybWF0OiBbbnVtX2NhbGxzLCB0b18wLCBzZWxlY3Rvcl8wLCBkYXRhX2xlbl8wLCAuLi5kYXRhXzAsIHRvXzEsIC4uLl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHM6IFN0YXJrbmV0Q2FsbFtdKTogc3RyaW5nW10ge1xuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gIHJlc3VsdC5wdXNoKCcweCcgKyBCaWdJbnQoY2FsbHMubGVuZ3RoKS50b1N0cmluZygxNikpO1xuICBmb3IgKGNvbnN0IGNhbGwgb2YgY2FsbHMpIHtcbiAgICByZXN1bHQucHVzaChjYWxsLmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgcmVzdWx0LnB1c2goJzB4JyArIGdldFNlbGVjdG9yRnJvbU5hbWUoY2FsbC5lbnRyeXBvaW50KS50b1N0cmluZygxNikpO1xuICAgIHJlc3VsdC5wdXNoKCcweCcgKyBCaWdJbnQoY2FsbC5jYWxsZGF0YS5sZW5ndGgpLnRvU3RyaW5nKDE2KSk7XG4gICAgcmVzdWx0LnB1c2goLi4uY2FsbC5jYWxsZGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlUmVzb3VyY2VCb3VuZCh0eXBlTmFtZTogYmlnaW50LCBtYXhBbW91bnQ6IHN0cmluZywgbWF4UHJpY2VQZXJVbml0OiBzdHJpbmcpOiBiaWdpbnQge1xuICByZXR1cm4gKHR5cGVOYW1lIDw8IDE5Mm4pIHwgKEJpZ0ludChtYXhBbW91bnQpIDw8IDEyOG4pIHwgQmlnSW50KG1heFByaWNlUGVyVW5pdCk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgUG9zZWlkb24gVjMgSU5WT0tFIHRyYW5zYWN0aW9uIGhhc2ggcGVyIFNOSVAtOC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaChwYXJhbXM6IEludm9rZVRyYW5zYWN0aW9uSGFzaFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBzZW5kZXJBZGRyZXNzLFxuICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgY2hhaW5JZCxcbiAgICBub25jZSxcbiAgICByZXNvdXJjZUJvdW5kcyxcbiAgICB0aXAgPSAnMHgwJyxcbiAgICBub25jZURhdGFBdmFpbGFiaWxpdHlNb2RlID0gMCxcbiAgICBmZWVEYXRhQXZhaWxhYmlsaXR5TW9kZSA9IDAsXG4gICAgcGF5bWFzdGVyRGF0YSA9IFtdLFxuICAgIGFjY291bnREZXBsb3ltZW50RGF0YSA9IFtdLFxuICAgIHByb29mRmFjdHMsXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgZmVlRmllbGRIYXNoID0gcG9zZWlkb25IYXNoTWFueShbXG4gICAgQmlnSW50KHRpcCksXG4gICAgZW5jb2RlUmVzb3VyY2VCb3VuZChMMV9HQVNfTkFNRSwgcmVzb3VyY2VCb3VuZHMubDFfZ2FzLm1heF9hbW91bnQsIHJlc291cmNlQm91bmRzLmwxX2dhcy5tYXhfcHJpY2VfcGVyX3VuaXQpLFxuICAgIGVuY29kZVJlc291cmNlQm91bmQoTDJfR0FTX05BTUUsIHJlc291cmNlQm91bmRzLmwyX2dhcy5tYXhfYW1vdW50LCByZXNvdXJjZUJvdW5kcy5sMl9nYXMubWF4X3ByaWNlX3Blcl91bml0KSxcbiAgICBlbmNvZGVSZXNvdXJjZUJvdW5kKFxuICAgICAgTDFfREFUQV9HQVNfTkFNRSxcbiAgICAgIHJlc291cmNlQm91bmRzLmwxX2RhdGFfZ2FzLm1heF9hbW91bnQsXG4gICAgICByZXNvdXJjZUJvdW5kcy5sMV9kYXRhX2dhcy5tYXhfcHJpY2VfcGVyX3VuaXRcbiAgICApLFxuICBdKTtcblxuICBjb25zdCBkYU1vZGUgPSAoQmlnSW50KG5vbmNlRGF0YUF2YWlsYWJpbGl0eU1vZGUpIDw8IDMybikgfCBCaWdJbnQoZmVlRGF0YUF2YWlsYWJpbGl0eU1vZGUpO1xuXG4gIGNvbnN0IGhhc2hGaWVsZHM6IGJpZ2ludFtdID0gW1xuICAgIElOVk9LRV9UWF9QUkVGSVgsXG4gICAgVFJBTlNBQ1RJT05fVkVSU0lPTl8zLFxuICAgIEJpZ0ludChzZW5kZXJBZGRyZXNzKSxcbiAgICBmZWVGaWVsZEhhc2gsXG4gICAgcG9zZWlkb25IYXNoTWFueShwYXltYXN0ZXJEYXRhLm1hcChCaWdJbnQpKSxcbiAgICBCaWdJbnQoY2hhaW5JZCksXG4gICAgQmlnSW50KG5vbmNlKSxcbiAgICBkYU1vZGUsXG4gICAgcG9zZWlkb25IYXNoTWFueShhY2NvdW50RGVwbG95bWVudERhdGEubWFwKEJpZ0ludCkpLFxuICAgIHBvc2VpZG9uSGFzaE1hbnkoY29tcGlsZWRDYWxsZGF0YS5tYXAoQmlnSW50KSksXG4gIF07XG5cbiAgaWYgKHByb29mRmFjdHMgJiYgcHJvb2ZGYWN0cy5sZW5ndGggPiAwKSB7XG4gICAgaGFzaEZpZWxkcy5wdXNoKHBvc2VpZG9uSGFzaE1hbnkocHJvb2ZGYWN0cy5tYXAoQmlnSW50KSkpO1xuICB9XG5cbiAgY29uc3QgaGFzaCA9IHBvc2VpZG9uSGFzaE1hbnkoaGFzaEZpZWxkcyk7XG4gIHJldHVybiAnMHgnICsgaGFzaC50b1N0cmluZygxNik7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgUG9zZWlkb24gVjMgREVQTE9ZX0FDQ09VTlQgdHJhbnNhY3Rpb24gaGFzaCBwZXIgU05JUC04IChzdGFya25ldC5qcyB2MykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoKHBhcmFtczogRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBjb250cmFjdEFkZHJlc3MsXG4gICAgY2xhc3NIYXNoLFxuICAgIGNvbnN0cnVjdG9yQ2FsbGRhdGEsXG4gICAgY29udHJhY3RBZGRyZXNzU2FsdCxcbiAgICBjaGFpbklkLFxuICAgIG5vbmNlLFxuICAgIHJlc291cmNlQm91bmRzLFxuICAgIHRpcCA9ICcweDAnLFxuICAgIG5vbmNlRGF0YUF2YWlsYWJpbGl0eU1vZGUgPSAwLFxuICAgIGZlZURhdGFBdmFpbGFiaWxpdHlNb2RlID0gMCxcbiAgICBwYXltYXN0ZXJEYXRhID0gW10sXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgZmVlRmllbGRIYXNoID0gcG9zZWlkb25IYXNoTWFueShbXG4gICAgQmlnSW50KHRpcCksXG4gICAgZW5jb2RlUmVzb3VyY2VCb3VuZChMMV9HQVNfTkFNRSwgcmVzb3VyY2VCb3VuZHMubDFfZ2FzLm1heF9hbW91bnQsIHJlc291cmNlQm91bmRzLmwxX2dhcy5tYXhfcHJpY2VfcGVyX3VuaXQpLFxuICAgIGVuY29kZVJlc291cmNlQm91bmQoTDJfR0FTX05BTUUsIHJlc291cmNlQm91bmRzLmwyX2dhcy5tYXhfYW1vdW50LCByZXNvdXJjZUJvdW5kcy5sMl9nYXMubWF4X3ByaWNlX3Blcl91bml0KSxcbiAgICBlbmNvZGVSZXNvdXJjZUJvdW5kKFxuICAgICAgTDFfREFUQV9HQVNfTkFNRSxcbiAgICAgIHJlc291cmNlQm91bmRzLmwxX2RhdGFfZ2FzLm1heF9hbW91bnQsXG4gICAgICByZXNvdXJjZUJvdW5kcy5sMV9kYXRhX2dhcy5tYXhfcHJpY2VfcGVyX3VuaXRcbiAgICApLFxuICBdKTtcblxuICBjb25zdCBkYU1vZGUgPSAoQmlnSW50KG5vbmNlRGF0YUF2YWlsYWJpbGl0eU1vZGUpIDw8IDMybikgfCBCaWdJbnQoZmVlRGF0YUF2YWlsYWJpbGl0eU1vZGUpO1xuXG4gIGNvbnN0IGhhc2hGaWVsZHM6IGJpZ2ludFtdID0gW1xuICAgIERFUExPWV9BQ0NPVU5UX1RYX1BSRUZJWCxcbiAgICBUUkFOU0FDVElPTl9WRVJTSU9OXzMsXG4gICAgQmlnSW50KGNvbnRyYWN0QWRkcmVzcyksXG4gICAgZmVlRmllbGRIYXNoLFxuICAgIHBvc2VpZG9uSGFzaE1hbnkocGF5bWFzdGVyRGF0YS5tYXAoQmlnSW50KSksXG4gICAgQmlnSW50KGNoYWluSWQpLFxuICAgIEJpZ0ludChub25jZSksXG4gICAgZGFNb2RlLFxuICAgIHBvc2VpZG9uSGFzaE1hbnkoY29uc3RydWN0b3JDYWxsZGF0YS5tYXAoQmlnSW50KSksXG4gICAgQmlnSW50KGNsYXNzSGFzaCksXG4gICAgQmlnSW50KGNvbnRyYWN0QWRkcmVzc1NhbHQpLFxuICBdO1xuXG4gIGNvbnN0IGhhc2ggPSBwb3NlaWRvbkhhc2hNYW55KGhhc2hGaWVsZHMpO1xuICByZXR1cm4gJzB4JyArIGhhc2gudG9TdHJpbmcoMTYpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzVmFsaWRBZGRyZXNzLFxuICBpc1ZhbGlkUHVibGljS2V5LFxuICBpc1ZhbGlkUHJpdmF0ZUtleSxcbiAgZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5LFxuICBjb21waWxlRXRoQWNjb3VudENvbnN0cnVjdG9yQ2FsbGRhdGEsXG4gIGNhbGN1bGF0ZUNvbnRyYWN0QWRkcmVzc0Zyb21IYXNoLFxuICBjb21wdXRlU3RhcmtuZXRBZGRyZXNzLFxuICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleSxcbiAgbm9ybWFsaXplQWRkcmVzcyxcbiAgZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZSxcbiAgcGFyc2VUcmFuc2ZlckNhbGwsXG4gIGdlbmVyYXRlS2V5UGFpcixcbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbixcbiAgZW5jb2RlU2hvcnRTdHJpbmcsXG4gIGdldFNlbGVjdG9yRnJvbU5hbWUsXG4gIGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEsXG4gIGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCxcbiAgY2FsY3VsYXRlRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaCxcbn07XG4iXX0=
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOEJBLDRDQUdDO0FBTUQsd0NBU0M7QUFLRCw0Q0FnQkM7QUFLRCw4Q0FHQztBQUtELDREQWFDO0FBTUQsb0ZBVUM7QUFNRCw0RUFlQztBQUtELHdEQWFDO0FBS0QsMERBSUM7QUFNRCw4REFZQztBQU1ELDhDQVlDO0FBR0QsMENBU0M7QUFHRCxnREFrQkM7QUFLRCwwQ0FRQztBQUtELHdEQWtCQztBQUtELDhDQWVDO0FBTUQsa0RBRUM7QUFNRCx3REFVQztBQVNELHdFQStDQztBQUtELHNGQTRDQztBQTdaRCw4Q0FBa0Y7QUFDbEYsMkNBY3FCO0FBQ3JCLG1DQVFpQjtBQUNqQixnREFBdUM7QUFFdkM7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxPQUFlO0lBQzlDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNsRSxPQUFPLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLE9BQWU7SUFDNUMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxRCxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsT0FBTyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FB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QUFBLDJCQUFnQixFQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDYixNQUFNO1FBQ04sSUFBQSwyQkFBZ0IsRUFBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNqQixNQUFNLENBQUMsbUJBQW1CLENBQUM7S0FDNUIsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFHLElBQUEsMkJBQWdCLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsa0JBQWU7SUFDYixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsb0NBQW9DO0lBQ3BDLGdDQUFnQztJQUNoQyxzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLGdCQUFnQjtJQUNoQix5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLHNCQUFzQjtJQUN0Qiw4QkFBOEI7SUFDOUIscUNBQXFDO0NBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlSGFzaE9uRWxlbWVudHMsIHBvc2VpZG9uSGFzaE1hbnksIGtlY2NhayB9IGZyb20gJ0BzY3VyZS9zdGFya25ldCc7XG5pbXBvcnQge1xuICBGRUxUX01BWCxcbiAgTUFTS18xMjgsXG4gIE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsXG4gIEFERFJfQk9VTkQsXG4gIENPTlRSQUNUX0FERFJFU1NfUFJFRklYLFxuICBJTlZPS0VfVFhfUFJFRklYLFxuICBERVBMT1lfQUNDT1VOVF9UWF9QUkVGSVgsXG4gIFRSQU5TQUNUSU9OX1ZFUlNJT05fMyxcbiAgTDFfR0FTX05BTUUsXG4gIEwyX0dBU19OQU1FLFxuICBMMV9EQVRBX0dBU19OQU1FLFxuICBVRENfQUREUkVTUyxcbiAgVURDX0RFUExPWV9FTlRSWVBPSU5ULFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBTdGFya25ldFRyYW5zYWN0aW9uRGF0YSxcbiAgU3RhcmtuZXRUcmFuc2FjdGlvblR5cGUsXG4gIFN0YXJrbmV0Q2FsbCxcbiAgUGFyc2VkVHJhbnNmZXJEYXRhLFxuICBQYXJzZWRVZGNEZXBsb3lEYXRhLFxuICBJbnZva2VUcmFuc2FjdGlvbkhhc2hQYXJhbXMsXG4gIERlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2hQYXJhbXMsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5cbi8qKlxuICogTm9ybWFsaXplIGEgU3RhcmtuZXQgYWRkcmVzcyB0byBjYW5vbmljYWwgZm9ybTogMHggKyA2NCBoZXggY2hhcnMsIHplcm8tcGFkZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoZXggPSBhZGRyZXNzLnN0YXJ0c1dpdGgoJzB4JykgPyBhZGRyZXNzLnNsaWNlKDIpIDogYWRkcmVzcztcbiAgcmV0dXJuICcweCcgKyBoZXgucGFkU3RhcnQoNjQsICcwJykudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBTdGFya25ldCBhZGRyZXNzZXMgYXJlIGZlbHQyNTIgdmFsdWVzIHJlcHJlc2VudGVkIGFzIDB4LXByZWZpeGVkIGhleC5cbiAqIFZhbGlkIHJhbmdlOiAwIDwgYWRkcmVzcyA8IEZFTFRfTUFYLCB3aXRoIDB4IHByZWZpeCBhbmQgaGV4IGNoYXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgYWRkcmVzcyAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFhZGRyZXNzLm1hdGNoKC9eMHhbMC05YS1mQS1GXXsxLDY0fSQvKSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHZhbCA9IEJpZ0ludChhZGRyZXNzKTtcbiAgICByZXR1cm4gdmFsID4gMG4gJiYgdmFsIDwgRkVMVF9NQVg7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKGNvbXByZXNzZWQgMzMgYnl0ZXMgb3IgdW5jb21wcmVzc2VkIDY1IGJ5dGVzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQdWJsaWNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oa2V5LCAnaGV4Jyk7XG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDMzICYmIChidWZbMF0gPT09IDB4MDIgfHwgYnVmWzBdID09PSAweDAzKSkge1xuICAgICAgZWNjLnBvaW50Q29tcHJlc3MoYnVmLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gNjUgJiYgYnVmWzBdID09PSAweDA0KSB7XG4gICAgICBlY2MucG9pbnRDb21wcmVzcyhidWYsIHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBzZWNwMjU2azEgcHJpdmF0ZSBrZXkgKDMyIGJ5dGVzIGhleCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIC9eWzAtOWEtZkEtRl17NjR9JC8udGVzdChrZXkpO1xufVxuXG4vKipcbiAqIEdldCB1bmNvbXByZXNzZWQgcHVibGljIGtleSAoeCB8fCB5LCAxMjggaGV4IGNoYXJzLCBubyAwNCBwcmVmaXgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KGNvbXByZXNzZWRIZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGNvbXByZXNzZWRIZXgsICdoZXgnKTtcbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDY1ICYmIGJ1ZlswXSA9PT0gMHgwNCkge1xuICAgIHJldHVybiBjb21wcmVzc2VkSGV4LnNsaWNlKDIpO1xuICB9XG4gIGlmIChidWYubGVuZ3RoID09PSAzMyAmJiAoYnVmWzBdID09PSAweDAyIHx8IGJ1ZlswXSA9PT0gMHgwMykpIHtcbiAgICBjb25zdCB1bmNvbXByZXNzZWQgPSBCdWZmZXIuZnJvbShlY2MucG9pbnRDb21wcmVzcyhidWYsIGZhbHNlKSk7XG4gICAgcmV0dXJuIHVuY29tcHJlc3NlZC50b1N0cmluZygnaGV4Jykuc2xpY2UoMik7XG4gIH1cbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDY0KSB7XG4gICAgcmV0dXJuIGNvbXByZXNzZWRIZXg7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHB1YmxpYyBrZXkgZm9ybWF0OiAke2NvbXByZXNzZWRIZXguc3Vic3RyaW5nKDAsIDEwKX0uLi5gKTtcbn1cblxuLyoqXG4gKiBDb21waWxlIEV0aEFjY291bnQgY29uc3RydWN0b3IgY2FsbGRhdGEgZnJvbSBmdWxsIHNlY3AyNTZrMSBwdWJsaWMga2V5LlxuICogUmV0dXJucyBbeF9sb3csIHhfaGlnaCwgeV9sb3csIHlfaGlnaF0gYXMgZmVsdDI1MiBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUV0aEFjY291bnRDb25zdHJ1Y3RvckNhbGxkYXRhKGZ1bGxQdWJsaWNLZXk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcHViWCA9IEJpZ0ludCgnMHgnICsgZnVsbFB1YmxpY0tleS5zbGljZSgwLCA2NCkpO1xuICBjb25zdCBwdWJZID0gQmlnSW50KCcweCcgKyBmdWxsUHVibGljS2V5LnNsaWNlKDY0KSk7XG5cbiAgcmV0dXJuIFtcbiAgICAnMHgnICsgKHB1YlggJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAocHViWCA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChwdWJZICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHB1YlkgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICBdO1xufVxuXG4vKipcbiAqIENvbXB1dGUgU3RhcmtuZXQgY29udHJhY3QgYWRkcmVzcyBmcm9tIGhhc2ggY29tcG9uZW50cy5cbiAqIFJlcGxpY2F0ZXMgc3RhcmtuZXQuanMgY2FsY3VsYXRlQ29udHJhY3RBZGRyZXNzRnJvbUhhc2ggdXNpbmcgQHNjdXJlL3N0YXJrbmV0IHBlZGVyc2VuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udHJhY3RBZGRyZXNzRnJvbUhhc2goXG4gIHNhbHQ6IHN0cmluZyxcbiAgY2xhc3NIYXNoOiBzdHJpbmcsXG4gIGNvbnN0cnVjdG9yQ2FsbGRhdGE6IHN0cmluZ1tdLFxuICBkZXBsb3llckFkZHJlc3M6IG51bWJlciB8IGJpZ2ludFxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2FsbGRhdGFIYXNoID0gY29tcHV0ZUhhc2hPbkVsZW1lbnRzKGNvbnN0cnVjdG9yQ2FsbGRhdGEubWFwKEJpZ0ludCkpIGFzIHN0cmluZztcbiAgY29uc3QgcmF3SGFzaCA9IGNvbXB1dGVIYXNoT25FbGVtZW50cyhbXG4gICAgQ09OVFJBQ1RfQUREUkVTU19QUkVGSVgsXG4gICAgQmlnSW50KGRlcGxveWVyQWRkcmVzcyksXG4gICAgQmlnSW50KHNhbHQpLFxuICAgIEJpZ0ludChjbGFzc0hhc2gpLFxuICAgIEJpZ0ludChjYWxsZGF0YUhhc2gpLFxuICBdKSBhcyBzdHJpbmc7XG4gIHJldHVybiBub3JtYWxpemVBZGRyZXNzKCcweCcgKyAoQmlnSW50KHJhd0hhc2gpICUgQUREUl9CT1VORCkudG9TdHJpbmcoMTYpKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIFN0YXJrbmV0IEV0aEFjY291bnQgY291bnRlcmZhY3R1YWwgYWRkcmVzcyBmcm9tIHB1YmxpYyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3RhcmtuZXRBZGRyZXNzKGZ1bGxQdWJsaWNLZXk6IHN0cmluZyk6IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb25zdHJ1Y3RvckNhbGxkYXRhOiBzdHJpbmdbXTtcbiAgc2FsdDogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yQ2FsbGRhdGEgPSBjb21waWxlRXRoQWNjb3VudENvbnN0cnVjdG9yQ2FsbGRhdGEoZnVsbFB1YmxpY0tleSk7XG5cbiAgY29uc3QgcHViWCA9IEJpZ0ludCgnMHgnICsgZnVsbFB1YmxpY0tleS5zbGljZSgwLCA2NCkpO1xuICBjb25zdCBzYWx0ID0gJzB4JyArIChwdWJYICUgRkVMVF9NQVgpLnRvU3RyaW5nKDE2KTtcblxuICBjb25zdCBhZGRyZXNzID0gY2FsY3VsYXRlQ29udHJhY3RBZGRyZXNzRnJvbUhhc2goc2FsdCwgT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCwgY29uc3RydWN0b3JDYWxsZGF0YSwgMCk7XG5cbiAgcmV0dXJuIHsgYWRkcmVzcywgY29uc3RydWN0b3JDYWxsZGF0YSwgc2FsdCB9O1xufVxuXG4vKipcbiAqIERlcml2ZSBTdGFya25ldCBFdGhBY2NvdW50IGFkZHJlc3MgZnJvbSBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoY29tcHJlc3NlZFB1YmxpY0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZnVsbFB1YmxpY0tleSA9IGdldFVuY29tcHJlc3NlZFB1YmxpY0tleShjb21wcmVzc2VkUHVibGljS2V5KTtcbiAgY29uc3QgeyBhZGRyZXNzIH0gPSBjb21wdXRlU3RhcmtuZXRBZGRyZXNzKGZ1bGxQdWJsaWNLZXkpO1xuICByZXR1cm4gYWRkcmVzcztcbn1cblxuLyoqXG4gKiBGb3JtYXQgRUNEU0Egc2lnbmF0dXJlIGZvciBTdGFya25ldCBFdGhBY2NvdW50LlxuICogUmV0dXJucyBbcl9sb3csIHJfaGlnaCwgc19sb3csIHNfaGlnaCwgdl0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFdGhBY2NvdW50U2lnbmF0dXJlKHI6IHN0cmluZywgczogc3RyaW5nLCByZWNpZDogbnVtYmVyKTogc3RyaW5nW10ge1xuICBjb25zdCByQmlnID0gQmlnSW50KCcweCcgKyByKTtcbiAgY29uc3Qgc0JpZyA9IEJpZ0ludCgnMHgnICsgcyk7XG4gIGNvbnN0IHYgPSBCaWdJbnQocmVjaWQpO1xuXG4gIHJldHVybiBbXG4gICAgJzB4JyArIChyQmlnICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHJCaWcgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAoc0JpZyAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChzQmlnID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgdi50b1N0cmluZygxNiksXG4gIF07XG59XG5cbi8qKlxuICogRXh0cmFjdCByZWNpcGllbnQsIGFtb3VudCwgYW5kIHRva2VuIGNvbnRyYWN0IGZyb20gYSB0cmFuc2ZlciBjYWxsLlxuICogUmV2ZXJzZSBvZiBUcmFuc2ZlckJ1aWxkZXIuY29tcGlsZVRyYW5zZmVyQ2FsbGRhdGE6IGNhbGxkYXRhID0gW3JlY2lwaWVudCwgYW1vdW50X2xvdywgYW1vdW50X2hpZ2hdLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUcmFuc2ZlckNhbGwoY2FsbDogU3RhcmtuZXRDYWxsKTogUGFyc2VkVHJhbnNmZXJEYXRhIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNhbGwuZW50cnlwb2ludCAhPT0gJ3RyYW5zZmVyJyB8fCBjYWxsLmNhbGxkYXRhLmxlbmd0aCA8IDMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGFtb3VudExvdyA9IEJpZ0ludChjYWxsLmNhbGxkYXRhWzFdKTtcbiAgY29uc3QgYW1vdW50SGlnaCA9IEJpZ0ludChjYWxsLmNhbGxkYXRhWzJdKTtcbiAgY29uc3QgYW1vdW50ID0gKChhbW91bnRIaWdoIDw8IDEyOG4pIHwgYW1vdW50TG93KS50b1N0cmluZygpO1xuICByZXR1cm4ge1xuICAgIHJlY2lwaWVudDogY2FsbC5jYWxsZGF0YVswXSxcbiAgICBhbW91bnQsXG4gICAgdG9rZW5Db250cmFjdDogY2FsbC5jb250cmFjdEFkZHJlc3MsXG4gIH07XG59XG5cbi8qKiBUcnVlIGlmIGNhbGwgdGFyZ2V0cyBVREMgZGVwbG95Q29udHJhY3QuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVZGNEZXBsb3lDYWxsKGNhbGw6IFN0YXJrbmV0Q2FsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBpZiAoIWNhbGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBjYWxsLmVudHJ5cG9pbnQgPT09IFVEQ19ERVBMT1lfRU5UUllQT0lOVCAmJlxuICAgIG5vcm1hbGl6ZUFkZHJlc3MoY2FsbC5jb250cmFjdEFkZHJlc3MpID09PSBub3JtYWxpemVBZGRyZXNzKFVEQ19BRERSRVNTKSAmJlxuICAgIGNhbGwuY2FsbGRhdGEubGVuZ3RoID49IDRcbiAgKTtcbn1cblxuLyoqIFBhcnNlIFVEQyBkZXBsb3lDb250cmFjdCBjYWxsZGF0YTogW2NsYXNzSGFzaCwgc2FsdCwgdW5pcXVlLCBjdG9yX2xlbiwgLi4uY3Rvcl0uICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVZGNEZXBsb3lDYWxsKGNhbGw6IFN0YXJrbmV0Q2FsbCk6IFBhcnNlZFVkY0RlcGxveURhdGEgfCB1bmRlZmluZWQge1xuICBpZiAoIWlzVWRjRGVwbG95Q2FsbChjYWxsKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgY2xhc3NIYXNoID0gY2FsbC5jYWxsZGF0YVswXTtcbiAgY29uc3Qgc2FsdCA9IGNhbGwuY2FsbGRhdGFbMV07XG4gIGNvbnN0IHVuaXF1ZUZlbHQgPSBCaWdJbnQoY2FsbC5jYWxsZGF0YVsyXSk7XG4gIGNvbnN0IGN0b3JMZW4gPSBOdW1iZXIoQmlnSW50KGNhbGwuY2FsbGRhdGFbM10pKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoY3RvckxlbikgfHwgY3RvckxlbiA8IDAgfHwgY2FsbC5jYWxsZGF0YS5sZW5ndGggPCA0ICsgY3Rvckxlbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjbGFzc0hhc2gsXG4gICAgc2FsdCxcbiAgICB1bmlxdWU6IHVuaXF1ZUZlbHQgIT09IDBuLFxuICAgIGNvbnN0cnVjdG9yQ2FsbGRhdGE6IGNhbGwuY2FsbGRhdGEuc2xpY2UoNCwgNCArIGN0b3JMZW4pLFxuICAgIHVkY0FkZHJlc3M6IGNhbGwuY29udHJhY3RBZGRyZXNzLFxuICB9O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV3IHNlY3AyNTZrMSBrZXkgcGFpci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogeyBwdWI6IHN0cmluZzsgcHJ2OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHsgS2V5UGFpcjogU3RhcmtuZXRLZXlQYWlyIH0gPSByZXF1aXJlKCcuL2tleVBhaXInKTtcbiAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgU3RhcmtuZXRLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBTdGFya25ldEtleVBhaXIoKTtcbiAgY29uc3QgeyBwdWIsIHBydiB9ID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gIGlmICghcHJ2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcml2YXRlIGtleSBpcyBtaXNzaW5nIGluIHRoZSBnZW5lcmF0ZWQga2V5IHBhaXIuJyk7XG4gIH1cbiAgcmV0dXJuIHsgcHViLCBwcnYgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSByYXcgdHJhbnNhY3Rpb24gZGF0YSBoYXMgcmVxdWlyZWQgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSYXdUcmFuc2FjdGlvbih0eDogU3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEpOiB2b2lkIHtcbiAgaWYgKCF0eC5zZW5kZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHNlbmRlciBhZGRyZXNzJyk7XG4gIH1cbiAgaWYgKCFpc1ZhbGlkQWRkcmVzcyh0eC5zZW5kZXJBZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZW5kZXIgYWRkcmVzczogJHt0eC5zZW5kZXJBZGRyZXNzfWApO1xuICB9XG4gIGlmICh0eC50cmFuc2FjdGlvblR5cGUgPT09IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLkRFUExPWV9BQ0NPVU5UKSB7XG4gICAgaWYgKCF0eC5jbGFzc0hhc2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBjbGFzcyBoYXNoIGZvciBkZXBsb3kgYWNjb3VudCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXR4LmNvbnN0cnVjdG9yQ2FsbGRhdGEgfHwgdHguY29uc3RydWN0b3JDYWxsZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBjb25zdHJ1Y3RvciBjYWxsZGF0YSBmb3IgZGVwbG95IGFjY291bnQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0eC5jb250cmFjdEFkZHJlc3NTYWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgY29udHJhY3QgYWRkcmVzcyBzYWx0IGZvciBkZXBsb3kgYWNjb3VudCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEVuY29kZSBhbiBBU0NJSSBzdHJpbmcgKG1heCAzMSBjaGFycykgYXMgYSBmZWx0MjUyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU2hvcnRTdHJpbmcoc3RyOiBzdHJpbmcpOiBiaWdpbnQge1xuICBpZiAoc3RyLmxlbmd0aCA+IDMxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTaG9ydCBzdHJpbmcgdG9vIGxvbmc6ICR7c3RyLmxlbmd0aH0gPiAzMWApO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjb2RlID4gMTI3KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vbi1BU0NJSSBjaGFyYWN0ZXIgYXQgaW5kZXggJHtpfTogY29kZSAke2NvZGV9YCk7XG4gICAgfVxuICB9XG4gIGxldCByZXN1bHQgPSAwbjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHQgPSAocmVzdWx0IDw8IDhuKSB8IEJpZ0ludChzdHIuY2hhckNvZGVBdChpKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBTdGFya25ldCBmdW5jdGlvbiBzZWxlY3Rvcjoga2VjY2FrMjU2KG5hbWUpIG1hc2tlZCB0byAyNTAgYml0cy5cbiAqIEBzY3VyZS9zdGFya25ldCdzIGtlY2NhaygpIGFscmVhZHkgYXBwbGllcyB0aGUgMjUwLWJpdCBtYXNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0b3JGcm9tTmFtZShuYW1lOiBzdHJpbmcpOiBiaWdpbnQge1xuICByZXR1cm4ga2VjY2FrKEJ1ZmZlci5mcm9tKG5hbWUsICdhc2NpaScpKTtcbn1cblxuLyoqXG4gKiBDb21waWxlIGNhbGxzIGludG8gdGhlIENhaXJvIDEgbXVsdGljYWxsIF9fZXhlY3V0ZV9fIGNhbGxkYXRhIGZvcm1hdC5cbiAqIEZvcm1hdDogW251bV9jYWxscywgdG9fMCwgc2VsZWN0b3JfMCwgZGF0YV9sZW5fMCwgLi4uZGF0YV8wLCB0b18xLCAuLi5dXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzOiBTdGFya25ldENhbGxbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICByZXN1bHQucHVzaCgnMHgnICsgQmlnSW50KGNhbGxzLmxlbmd0aCkudG9TdHJpbmcoMTYpKTtcbiAgZm9yIChjb25zdCBjYWxsIG9mIGNhbGxzKSB7XG4gICAgcmVzdWx0LnB1c2goY2FsbC5jb250cmFjdEFkZHJlc3MpO1xuICAgIHJlc3VsdC5wdXNoKCcweCcgKyBnZXRTZWxlY3RvckZyb21OYW1lKGNhbGwuZW50cnlwb2ludCkudG9TdHJpbmcoMTYpKTtcbiAgICByZXN1bHQucHVzaCgnMHgnICsgQmlnSW50KGNhbGwuY2FsbGRhdGEubGVuZ3RoKS50b1N0cmluZygxNikpO1xuICAgIHJlc3VsdC5wdXNoKC4uLmNhbGwuY2FsbGRhdGEpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGVuY29kZVJlc291cmNlQm91bmQodHlwZU5hbWU6IGJpZ2ludCwgbWF4QW1vdW50OiBzdHJpbmcsIG1heFByaWNlUGVyVW5pdDogc3RyaW5nKTogYmlnaW50IHtcbiAgcmV0dXJuICh0eXBlTmFtZSA8PCAxOTJuKSB8IChCaWdJbnQobWF4QW1vdW50KSA8PCAxMjhuKSB8IEJpZ0ludChtYXhQcmljZVBlclVuaXQpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIFBvc2VpZG9uIFYzIElOVk9LRSB0cmFuc2FjdGlvbiBoYXNoIHBlciBTTklQLTguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2gocGFyYW1zOiBJbnZva2VUcmFuc2FjdGlvbkhhc2hQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgc2VuZGVyQWRkcmVzcyxcbiAgICBjb21waWxlZENhbGxkYXRhLFxuICAgIGNoYWluSWQsXG4gICAgbm9uY2UsXG4gICAgcmVzb3VyY2VCb3VuZHMsXG4gICAgdGlwID0gJzB4MCcsXG4gICAgbm9uY2VEYXRhQXZhaWxhYmlsaXR5TW9kZSA9IDAsXG4gICAgZmVlRGF0YUF2YWlsYWJpbGl0eU1vZGUgPSAwLFxuICAgIHBheW1hc3RlckRhdGEgPSBbXSxcbiAgICBhY2NvdW50RGVwbG95bWVudERhdGEgPSBbXSxcbiAgICBwcm9vZkZhY3RzLFxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGZlZUZpZWxkSGFzaCA9IHBvc2VpZG9uSGFzaE1hbnkoW1xuICAgIEJpZ0ludCh0aXApLFxuICAgIGVuY29kZVJlc291cmNlQm91bmQoTDFfR0FTX05BTUUsIHJlc291cmNlQm91bmRzLmwxX2dhcy5tYXhfYW1vdW50LCByZXNvdXJjZUJvdW5kcy5sMV9nYXMubWF4X3ByaWNlX3Blcl91bml0KSxcbiAgICBlbmNvZGVSZXNvdXJjZUJvdW5kKEwyX0dBU19OQU1FLCByZXNvdXJjZUJvdW5kcy5sMl9nYXMubWF4X2Ftb3VudCwgcmVzb3VyY2VCb3VuZHMubDJfZ2FzLm1heF9wcmljZV9wZXJfdW5pdCksXG4gICAgZW5jb2RlUmVzb3VyY2VCb3VuZChcbiAgICAgIEwxX0RBVEFfR0FTX05BTUUsXG4gICAgICByZXNvdXJjZUJvdW5kcy5sMV9kYXRhX2dhcy5tYXhfYW1vdW50LFxuICAgICAgcmVzb3VyY2VCb3VuZHMubDFfZGF0YV9nYXMubWF4X3ByaWNlX3Blcl91bml0XG4gICAgKSxcbiAgXSk7XG5cbiAgY29uc3QgZGFNb2RlID0gKEJpZ0ludChub25jZURhdGFBdmFpbGFiaWxpdHlNb2RlKSA8PCAzMm4pIHwgQmlnSW50KGZlZURhdGFBdmFpbGFiaWxpdHlNb2RlKTtcblxuICBjb25zdCBoYXNoRmllbGRzOiBiaWdpbnRbXSA9IFtcbiAgICBJTlZPS0VfVFhfUFJFRklYLFxuICAgIFRSQU5TQUNUSU9OX1ZFUlNJT05fMyxcbiAgICBCaWdJbnQoc2VuZGVyQWRkcmVzcyksXG4gICAgZmVlRmllbGRIYXNoLFxuICAgIHBvc2VpZG9uSGFzaE1hbnkocGF5bWFzdGVyRGF0YS5tYXAoQmlnSW50KSksXG4gICAgQmlnSW50KGNoYWluSWQpLFxuICAgIEJpZ0ludChub25jZSksXG4gICAgZGFNb2RlLFxuICAgIHBvc2VpZG9uSGFzaE1hbnkoYWNjb3VudERlcGxveW1lbnREYXRhLm1hcChCaWdJbnQpKSxcbiAgICBwb3NlaWRvbkhhc2hNYW55KGNvbXBpbGVkQ2FsbGRhdGEubWFwKEJpZ0ludCkpLFxuICBdO1xuXG4gIGlmIChwcm9vZkZhY3RzICYmIHByb29mRmFjdHMubGVuZ3RoID4gMCkge1xuICAgIGhhc2hGaWVsZHMucHVzaChwb3NlaWRvbkhhc2hNYW55KHByb29mRmFjdHMubWFwKEJpZ0ludCkpKTtcbiAgfVxuXG4gIGNvbnN0IGhhc2ggPSBwb3NlaWRvbkhhc2hNYW55KGhhc2hGaWVsZHMpO1xuICByZXR1cm4gJzB4JyArIGhhc2gudG9TdHJpbmcoMTYpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIFBvc2VpZG9uIFYzIERFUExPWV9BQ0NPVU5UIHRyYW5zYWN0aW9uIGhhc2ggcGVyIFNOSVAtOCAoc3RhcmtuZXQuanMgdjMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaChwYXJhbXM6IERlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2hQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgY29udHJhY3RBZGRyZXNzLFxuICAgIGNsYXNzSGFzaCxcbiAgICBjb25zdHJ1Y3RvckNhbGxkYXRhLFxuICAgIGNvbnRyYWN0QWRkcmVzc1NhbHQsXG4gICAgY2hhaW5JZCxcbiAgICBub25jZSxcbiAgICByZXNvdXJjZUJvdW5kcyxcbiAgICB0aXAgPSAnMHgwJyxcbiAgICBub25jZURhdGFBdmFpbGFiaWxpdHlNb2RlID0gMCxcbiAgICBmZWVEYXRhQXZhaWxhYmlsaXR5TW9kZSA9IDAsXG4gICAgcGF5bWFzdGVyRGF0YSA9IFtdLFxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGZlZUZpZWxkSGFzaCA9IHBvc2VpZG9uSGFzaE1hbnkoW1xuICAgIEJpZ0ludCh0aXApLFxuICAgIGVuY29kZVJlc291cmNlQm91bmQoTDFfR0FTX05BTUUsIHJlc291cmNlQm91bmRzLmwxX2dhcy5tYXhfYW1vdW50LCByZXNvdXJjZUJvdW5kcy5sMV9nYXMubWF4X3ByaWNlX3Blcl91bml0KSxcbiAgICBlbmNvZGVSZXNvdXJjZUJvdW5kKEwyX0dBU19OQU1FLCByZXNvdXJjZUJvdW5kcy5sMl9nYXMubWF4X2Ftb3VudCwgcmVzb3VyY2VCb3VuZHMubDJfZ2FzLm1heF9wcmljZV9wZXJfdW5pdCksXG4gICAgZW5jb2RlUmVzb3VyY2VCb3VuZChcbiAgICAgIEwxX0RBVEFfR0FTX05BTUUsXG4gICAgICByZXNvdXJjZUJvdW5kcy5sMV9kYXRhX2dhcy5tYXhfYW1vdW50LFxuICAgICAgcmVzb3VyY2VCb3VuZHMubDFfZGF0YV9nYXMubWF4X3ByaWNlX3Blcl91bml0XG4gICAgKSxcbiAgXSk7XG5cbiAgY29uc3QgZGFNb2RlID0gKEJpZ0ludChub25jZURhdGFBdmFpbGFiaWxpdHlNb2RlKSA8PCAzMm4pIHwgQmlnSW50KGZlZURhdGFBdmFpbGFiaWxpdHlNb2RlKTtcblxuICBjb25zdCBoYXNoRmllbGRzOiBiaWdpbnRbXSA9IFtcbiAgICBERVBMT1lfQUNDT1VOVF9UWF9QUkVGSVgsXG4gICAgVFJBTlNBQ1RJT05fVkVSU0lPTl8zLFxuICAgIEJpZ0ludChjb250cmFjdEFkZHJlc3MpLFxuICAgIGZlZUZpZWxkSGFzaCxcbiAgICBwb3NlaWRvbkhhc2hNYW55KHBheW1hc3RlckRhdGEubWFwKEJpZ0ludCkpLFxuICAgIEJpZ0ludChjaGFpbklkKSxcbiAgICBCaWdJbnQobm9uY2UpLFxuICAgIGRhTW9kZSxcbiAgICBwb3NlaWRvbkhhc2hNYW55KGNvbnN0cnVjdG9yQ2FsbGRhdGEubWFwKEJpZ0ludCkpLFxuICAgIEJpZ0ludChjbGFzc0hhc2gpLFxuICAgIEJpZ0ludChjb250cmFjdEFkZHJlc3NTYWx0KSxcbiAgXTtcblxuICBjb25zdCBoYXNoID0gcG9zZWlkb25IYXNoTWFueShoYXNoRmllbGRzKTtcbiAgcmV0dXJuICcweCcgKyBoYXNoLnRvU3RyaW5nKDE2KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1ZhbGlkQWRkcmVzcyxcbiAgaXNWYWxpZFB1YmxpY0tleSxcbiAgaXNWYWxpZFByaXZhdGVLZXksXG4gIGdldFVuY29tcHJlc3NlZFB1YmxpY0tleSxcbiAgY29tcGlsZUV0aEFjY291bnRDb25zdHJ1Y3RvckNhbGxkYXRhLFxuICBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaCxcbiAgY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyxcbiAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXksXG4gIG5vcm1hbGl6ZUFkZHJlc3MsXG4gIGZvcm1hdEV0aEFjY291bnRTaWduYXR1cmUsXG4gIHBhcnNlVHJhbnNmZXJDYWxsLFxuICBpc1VkY0RlcGxveUNhbGwsXG4gIHBhcnNlVWRjRGVwbG95Q2FsbCxcbiAgZ2VuZXJhdGVLZXlQYWlyLFxuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uLFxuICBlbmNvZGVTaG9ydFN0cmluZyxcbiAgZ2V0U2VsZWN0b3JGcm9tTmFtZSxcbiAgY29tcGlsZUV4ZWN1dGVDYWxsZGF0YSxcbiAgY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoLFxuICBjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoLFxufTtcbiJdfQ==
@@ -15,6 +15,12 @@ describe('Starknet TransactionBuilderFactory', () => {
15
15
  should_1.default.exist(builder);
16
16
  });
17
17
  });
18
+ describe('getUdcDeployBuilder', () => {
19
+ it('should return a UDC deploy builder', () => {
20
+ const builder = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).getUdcDeployBuilder();
21
+ should_1.default.exist(builder);
22
+ });
23
+ });
18
24
  describe('from', () => {
19
25
  it('should rebuild unsigned tx from raw hex', async () => {
20
26
  const builder = await new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).from(starknet_1.rawTx.transfer.unsigned);
@@ -71,4 +77,4 @@ describe('Starknet TransferBuilder', () => {
71
77
  });
72
78
  });
73
79
  });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1Qiw0Q0FBdUM7QUFDdkMsMEZBQXVGO0FBQ3ZGLHVEQUF5RTtBQUV6RSxRQUFRLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO0lBQ2xELE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFekMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUkscURBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDcEIsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxxREFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUYsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMs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bEgsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7WUFDOUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDN0IsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzdCLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgQWNjb3VudHMsIHJhd1R4LCBURVNUX0FNT1VOVFMgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc3RhcmtuZXQnO1xuXG5kZXNjcmliZSgnU3RhcmtuZXQgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeScsICgpID0+IHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgnc3RhcmtuZXQnKTtcblxuICBkZXNjcmliZSgnZ2V0VHJhbnNmZXJCdWlsZGVyJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdHJhbnNmZXIgYnVpbGRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZC5leGlzdChidWlsZGVyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Zyb20nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZWJ1aWxkIHVuc2lnbmVkIHR4IGZyb20gcmF3IGhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBhd2FpdCBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKS5mcm9tKHJhd1R4LnRyYW5zZmVyLnVuc2lnbmVkKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGpzb24pO1xuICAgICAganNvbi5zZW5kZXIuc2hvdWxkLmVxdWFsKEFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWJ1aWxkIHNpZ25lZCB0eCBmcm9tIHJhdyBoZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gYXdhaXQgbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZykuZnJvbShyYXdUeC50cmFuc2Zlci5zaWduZWQpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXhpc3QoanNvbik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdTdGFya25ldCBUcmFuc2ZlckJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3N0YXJrbmV0Jyk7XG5cbiAgY29uc3QgZ2V0QnVpbGRlciA9ICgpID0+IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmdldFRyYW5zZmVyQnVpbGRlcigpO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCB1bnNpZ25lZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVuc2lnbmVkIHRyYW5zZmVyIHdpdGggcmVxdWlyZWQgZmllbGRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnNlbmRlcihBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKVxuICAgICAgICAucmVjZWl2ZXJJZChBY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKVxuICAgICAgICAuYW1vdW50KFRFU1RfQU1PVU5UUy5zbWFsbClcbiAgICAgICAgLm5vbmNlKCcwJylcbiAgICAgICAgLmNoYWluSWQoJzB4NTM0ZTVmNTM0NTUwNGY0YzQ5NDEnKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXhpc3QodHgpO1xuXG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXhpc3QoanNvbik7XG4gICAgICBqc29uLnNlbmRlci5zaG91bGQuZXF1YWwoQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVqZWN0IG1pc3Npbmcgc2VuZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIucmVjZWl2ZXJJZChBY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKS5hbW91bnQoVEVTVF9BTU9VTlRTLnNtYWxsKS5jaGFpbklkKCcweDUzNGU1ZjUzNDU1MDRmNGM0OTQxJyk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCBvciBtaXNzaW5nIHNlbmRlciBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBtaXNzaW5nIHJlY2lwaWVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnNlbmRlcihBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKS5hbW91bnQoVEVTVF9BTU9VTlRTLnNtYWxsKS5ub25jZSgnMCcpLmNoYWluSWQoJzB4NTM0ZTVmNTM0NTUwNGY0YzQ5NDEnKTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdSZWNlaXZlciBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgaW52YWxpZCBzZW5kZXIgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCk7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIuc2VuZGVyKCdub3RfYV92YWxpZF9hZGRyZXNzJykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgbmVnYXRpdmUgYW1vdW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gYnVpbGRlci5hbW91bnQoJy0xJykpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1Qiw0Q0FBdUM7QUFDdkMsMEZBQXVGO0FBQ3ZGLHVEQUF5RTtBQUV6RSxRQUFRLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO0lBQ2xELE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFekMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUkscURBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxFQUFFLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO1lBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUkscURBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNoRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDcEIsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxxREFBeUIsQ0FB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SCxFQUFFLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDL0MsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsdUJBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDbEgsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7WUFDOUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDN0IsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzdCLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgQWNjb3VudHMsIHJhd1R4LCBURVNUX0FNT1VOVFMgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc3RhcmtuZXQnO1xuXG5kZXNjcmliZSgnU3RhcmtuZXQgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeScsICgpID0+IHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgnc3RhcmtuZXQnKTtcblxuICBkZXNjcmliZSgnZ2V0VHJhbnNmZXJCdWlsZGVyJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdHJhbnNmZXIgYnVpbGRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZC5leGlzdChidWlsZGVyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFVkY0RlcGxveUJ1aWxkZXInLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVREMgZGVwbG95IGJ1aWxkZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZykuZ2V0VWRjRGVwbG95QnVpbGRlcigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGJ1aWxkZXIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlYnVpbGQgdW5zaWduZWQgdHggZnJvbSByYXcgaGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGF3YWl0IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmZyb20ocmF3VHgudHJhbnNmZXIudW5zaWduZWQpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXhpc3QoanNvbik7XG4gICAgICBqc29uLnNlbmRlci5zaG91bGQuZXF1YWwoQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlYnVpbGQgc2lnbmVkIHR4IGZyb20gcmF3IGhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBhd2FpdCBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKS5mcm9tKHJhd1R4LnRyYW5zZmVyLnNpZ25lZCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5leGlzdChqc29uKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1N0YXJrbmV0IFRyYW5zZmVyQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgnc3RhcmtuZXQnKTtcblxuICBjb25zdCBnZXRCdWlsZGVyID0gKCkgPT4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZykuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG5cbiAgZGVzY3JpYmUoJ0J1aWxkIHVuc2lnbmVkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgdHJhbnNmZXIgd2l0aCByZXF1aXJlZCBmaWVsZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc2VuZGVyKEFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpXG4gICAgICAgIC5yZWNlaXZlcklkKEFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpXG4gICAgICAgIC5hbW91bnQoVEVTVF9BTU9VTlRTLnNtYWxsKVxuICAgICAgICAubm9uY2UoJzAnKVxuICAgICAgICAuY2hhaW5JZCgnMHg1MzRlNWY1MzQ1NTA0ZjRjNDk0MScpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eCk7XG5cbiAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5leGlzdChqc29uKTtcbiAgICAgIGpzb24uc2VuZGVyLnNob3VsZC5lcXVhbChBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZWplY3QgbWlzc2luZyBzZW5kZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5yZWNlaXZlcklkKEFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpLmFtb3VudChURVNUX0FNT1VOVFMuc21hbGwpLmNoYWluSWQoJzB4NTM0ZTVmNTM0NTUwNGY0YzQ5NDEnKTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIG9yIG1pc3Npbmcgc2VuZGVyIGFkZHJlc3MnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG1pc3NpbmcgcmVjaXBpZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKEFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpLmFtb3VudChURVNUX0FNT1VOVFMuc21hbGwpLm5vbmNlKCcwJykuY2hhaW5JZCgnMHg1MzRlNWY1MzQ1NTA0ZjRjNDk0MScpO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1JlY2VpdmVyIGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpbnZhbGlkIHNlbmRlciBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gYnVpbGRlci5zZW5kZXIoJ25vdF9hX3ZhbGlkX2FkZHJlc3MnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBuZWdhdGl2ZSBhbW91bnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLmFtb3VudCgnLTEnKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=udcDeployBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"udcDeployBuilder.d.ts","sourceRoot":"","sources":["../../../test/unit/udcDeployBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const statics_1 = require("@bitgo/statics");
8
+ const sdk_core_1 = require("@bitgo/sdk-core");
9
+ const transactionBuilderFactory_1 = require("../../src/lib/transactionBuilderFactory");
10
+ const udcDeployBuilder_1 = require("../../src/lib/udcDeployBuilder");
11
+ const starknet_1 = require("../resources/starknet");
12
+ const constants_1 = require("../../src/lib/constants");
13
+ const utils_1 = __importDefault(require("../../src/lib/utils"));
14
+ const iface_1 = require("../../src/lib/iface");
15
+ describe('Starknet UdcDeployBuilder', () => {
16
+ const coinConfig = statics_1.coins.get('starknet');
17
+ const master = starknet_1.Accounts.account1;
18
+ const target = starknet_1.Accounts.account2;
19
+ const getBuilder = () => new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).getUdcDeployBuilder();
20
+ function buildUdcRawHex(overrides = {}) {
21
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(target.publicKey));
22
+ const ctor = overrides.constructorCalldata ?? derived.constructorCalldata;
23
+ const calldata = overrides.omitCtor
24
+ ? [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, derived.salt, overrides.unique ?? '0x0', overrides.ctorLen ?? '0x99']
25
+ : [
26
+ constants_1.OZ_ETH_ACCOUNT_CLASS_HASH,
27
+ derived.salt,
28
+ overrides.unique ?? '0x0',
29
+ overrides.ctorLen ?? '0x' + BigInt(ctor.length).toString(16),
30
+ ...ctor,
31
+ ];
32
+ return Buffer.from(JSON.stringify({
33
+ senderAddress: master.address,
34
+ calls: [
35
+ {
36
+ contractAddress: constants_1.UDC_ADDRESS,
37
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
38
+ calldata,
39
+ },
40
+ ],
41
+ nonce: '0x0',
42
+ chainId: starknet_1.SandboxTransferData.chainId,
43
+ transactionType: iface_1.StarknetTransactionType.INVOKE,
44
+ }), 'utf-8').toString('hex');
45
+ }
46
+ describe('Build UDC deploy transaction', () => {
47
+ it('should build from target public key and produce a transactionHash', async () => {
48
+ const builder = getBuilder();
49
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
50
+ const expected = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(target.publicKey));
51
+ builder.getTargetAddress().should.equal(expected.address);
52
+ utils_1.default.normalizeAddress(builder.getTargetAddress()).should.equal(utils_1.default.normalizeAddress(target.address));
53
+ const tx = (await builder.build());
54
+ const data = tx.starknetTransactionData;
55
+ should_1.default.exist(data.transactionHash);
56
+ data.transactionHash.should.startWith('0x');
57
+ data.calls.length.should.equal(1);
58
+ data.calls[0].contractAddress.should.equal(constants_1.UDC_ADDRESS);
59
+ data.calls[0].entrypoint.should.equal(constants_1.UDC_DEPLOY_ENTRYPOINT);
60
+ data.calls[0].calldata[0].should.equal(constants_1.OZ_ETH_ACCOUNT_CLASS_HASH);
61
+ data.calls[0].calldata[2].should.equal('0x0'); // unique=false
62
+ data.calls[0].calldata[3].should.equal('0x4'); // EthAccount ctor len
63
+ data.calls[0].calldata.slice(4).should.deepEqual(expected.constructorCalldata);
64
+ });
65
+ it('should keep derived address consistent with computeStarknetAddress', async () => {
66
+ const builder = getBuilder();
67
+ builder.fromPublicKey(target.publicKey);
68
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(target.publicKey));
69
+ builder.getTargetAddress().should.equal(derived.address);
70
+ derived.salt.should.equal(utils_1.default.parseUdcDeployCall({
71
+ contractAddress: constants_1.UDC_ADDRESS,
72
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
73
+ calldata: [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, derived.salt, '0x0', '0x4', ...derived.constructorCalldata],
74
+ }).salt);
75
+ });
76
+ it('should include compiledCalldata with a single UDC call', async () => {
77
+ const builder = getBuilder();
78
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
79
+ const tx = (await builder.build());
80
+ const compiled = tx.starknetTransactionData.compiledCalldata;
81
+ compiled[0].should.equal('0x1');
82
+ utils_1.default.normalizeAddress(compiled[1]).should.equal(utils_1.default.normalizeAddress(constants_1.UDC_ADDRESS));
83
+ });
84
+ it('should round-trip through toInternalHex and from()', async () => {
85
+ const builder = getBuilder();
86
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
87
+ const tx = (await builder.build());
88
+ const internalHex = tx.toInternalHex();
89
+ const builder2 = await new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).from(internalHex);
90
+ builder2.should.be.instanceof(udcDeployBuilder_1.UdcDeployBuilder);
91
+ const tx2 = (await builder2.build());
92
+ tx2.signableHex.should.equal(tx.signableHex);
93
+ tx2.id.should.equal(tx.id);
94
+ builder2.getTargetAddress().should.equal(target.address);
95
+ const parsed = utils_1.default.parseUdcDeployCall(tx2.starknetTransactionData.calls[0]);
96
+ should_1.default.exist(parsed);
97
+ parsed.unique.should.equal(false);
98
+ utils_1.default
99
+ .normalizeAddress(utils_1.default.calculateContractAddressFromHash(parsed.salt, parsed.classHash, parsed.constructorCalldata, 0))
100
+ .should.equal(utils_1.default.normalizeAddress(target.address));
101
+ });
102
+ it('toBroadcastFormat should return Starknet RPC-ready INVOKE JSON', async () => {
103
+ const builder = getBuilder();
104
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
105
+ const tx = (await builder.build());
106
+ const parsed = JSON.parse(tx.toBroadcastFormat());
107
+ parsed.type.should.equal('INVOKE');
108
+ parsed.version.should.equal('0x3');
109
+ parsed.sender_address.should.equal(master.address);
110
+ parsed.calldata.should.be.Array();
111
+ parsed.calldata[0].should.equal('0x1');
112
+ });
113
+ it('should accept explicit deployParams', async () => {
114
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(target.publicKey));
115
+ const builder = getBuilder();
116
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).deployParams({
117
+ classHash: constants_1.OZ_ETH_ACCOUNT_CLASS_HASH,
118
+ salt: derived.salt,
119
+ constructorCalldata: derived.constructorCalldata,
120
+ });
121
+ builder.getTargetAddress().should.equal(derived.address);
122
+ const tx = (await builder.build());
123
+ should_1.default.exist(tx.starknetTransactionData.transactionHash);
124
+ });
125
+ it('toJson/explainTransaction should expose target address with amount 0', async () => {
126
+ const builder = getBuilder();
127
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
128
+ const tx = (await builder.build());
129
+ const json = tx.toJson();
130
+ json.type.should.equal(sdk_core_1.TransactionType.ContractCall);
131
+ json.sender.should.equal(master.address);
132
+ utils_1.default.normalizeAddress(json.recipient).should.equal(utils_1.default.normalizeAddress(target.address));
133
+ json.amount.should.equal('0');
134
+ const explained = tx.explainTransaction();
135
+ explained.outputs.length.should.equal(1);
136
+ utils_1.default.normalizeAddress(explained.outputs[0].address).should.equal(utils_1.default.normalizeAddress(target.address));
137
+ explained.outputs[0].amount.should.equal('0');
138
+ explained.type.should.equal(sdk_core_1.TransactionType.ContractCall);
139
+ });
140
+ });
141
+ describe('Validation', () => {
142
+ it('should reject build without sender', async () => {
143
+ const builder = getBuilder();
144
+ builder.nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
145
+ await builder.build().should.be.rejectedWith(/[Ss]ender/);
146
+ });
147
+ it('should reject build without deploy params', async () => {
148
+ const builder = getBuilder();
149
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId);
150
+ await builder.build().should.be.rejectedWith(/UDC deploy requires/);
151
+ });
152
+ it('should reject invalid target public key', () => {
153
+ const builder = getBuilder();
154
+ (() => builder.fromPublicKey('invalid')).should.throw(/[Ii]nvalid/);
155
+ });
156
+ it('should reject empty constructor calldata in deployParams', () => {
157
+ const builder = getBuilder();
158
+ (() => builder.deployParams({
159
+ classHash: constants_1.OZ_ETH_ACCOUNT_CLASS_HASH,
160
+ salt: '0x1',
161
+ constructorCalldata: [],
162
+ })).should.throw(/Constructor calldata/);
163
+ });
164
+ it('should reject salt 0x0', () => {
165
+ const builder = getBuilder();
166
+ (() => builder.deployParams({
167
+ classHash: constants_1.OZ_ETH_ACCOUNT_CLASS_HASH,
168
+ salt: '0x0',
169
+ constructorCalldata: ['0x1', '0x2', '0x3', '0x4'],
170
+ })).should.throw(/Invalid salt/);
171
+ });
172
+ it('should reject unique=true on rehydration via from()', async () => {
173
+ const hex = buildUdcRawHex({ unique: '0x1' });
174
+ await new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).from(hex).should.be.rejectedWith(/unique=true/);
175
+ });
176
+ it('should reject malformed UDC calldata (bad ctor_len) on from()', async () => {
177
+ const hex = buildUdcRawHex({ omitCtor: true, ctorLen: '0x99' });
178
+ await new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).from(hex).should.be.rejectedWith(/Invalid UDC deploy calldata/);
179
+ });
180
+ });
181
+ });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWRjRGVwbG95QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC91ZGNEZXBsb3lCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDRDQUF1QztBQUN2Qyw4Q0FBa0Q7QUFDbEQsdUZBQW9GO0FBRXBGLHFFQUFrRTtBQUNsRSxvREFBc0U7QUFDdEUsdURBQXdHO0FBQ3hHLGdFQUF3QztBQUN4QywrQ0FBOEQ7QUFFOUQsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtJQUN6QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLG1CQUFRLENBQUMsUUFBUSxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLG1CQUFRLENBQUMsUUFBUSxDQUFDO0lBRWpDLE1BQU0sVUFBVSxHQUFHLEdBQXFCLEVBQUUsQ0FBQyxJQUFJLHFEQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFFM0csU0FBUyxjQUFjLENBQ3JCLFlBS0ksRUFBRTtRQUVOLE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxlQUFLLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUMxRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUTtZQUNqQyxDQUFDLENBQUMsQ0FBQyxxQ0FBeUIsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDO1lBQ25HLENBQUMsQ0FBQztnQkFDRSxxQ0FBeUI7Z0JBQ3pCLE9BQU8s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Q0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25FLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sSUFBSSxxREFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0UsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNoRSxNQUFNLElBQUkscURBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDbEgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVWRjRGVwbG95QnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYy9saWIvdWRjRGVwbG95QnVpbGRlcic7XG5pbXBvcnQgeyBBY2NvdW50cywgU2FuZGJveFRyYW5zZmVyRGF0YSB9IGZyb20gJy4uL3Jlc291cmNlcy9zdGFya25ldCc7XG5pbXBvcnQgeyBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCBVRENfQUREUkVTUywgVURDX0RFUExPWV9FTlRSWVBPSU5UIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgU3RhcmtuZXRUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9zcmMvbGliL2lmYWNlJztcblxuZGVzY3JpYmUoJ1N0YXJrbmV0IFVkY0RlcGxveUJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3N0YXJrbmV0Jyk7XG4gIGNvbnN0IG1hc3RlciA9IEFjY291bnRzLmFjY291bnQxO1xuICBjb25zdCB0YXJnZXQgPSBBY2NvdW50cy5hY2NvdW50MjtcblxuICBjb25zdCBnZXRCdWlsZGVyID0gKCk6IFVkY0RlcGxveUJ1aWxkZXIgPT4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZykuZ2V0VWRjRGVwbG95QnVpbGRlcigpO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkVWRjUmF3SGV4KFxuICAgIG92ZXJyaWRlczoge1xuICAgICAgdW5pcXVlPzogc3RyaW5nO1xuICAgICAgY3Rvckxlbj86IHN0cmluZztcbiAgICAgIGNvbnN0cnVjdG9yQ2FsbGRhdGE/OiBzdHJpbmdbXTtcbiAgICAgIG9taXRDdG9yPzogYm9vbGVhbjtcbiAgICB9ID0ge31cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXJpdmVkID0gdXRpbHMuY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyh1dGlscy5nZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkodGFyZ2V0LnB1YmxpY0tleSkpO1xuICAgIGNvbnN0IGN0b3IgPSBvdmVycmlkZXMuY29uc3RydWN0b3JDYWxsZGF0YSA/PyBkZXJpdmVkLmNvbnN0cnVjdG9yQ2FsbGRhdGE7XG4gICAgY29uc3QgY2FsbGRhdGEgPSBvdmVycmlkZXMub21pdEN0b3JcbiAgICAgID8gW09aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsIGRlcml2ZWQuc2FsdCwgb3ZlcnJpZGVzLnVuaXF1ZSA/PyAnMHgwJywgb3ZlcnJpZGVzLmN0b3JMZW4gPz8gJzB4OTknXVxuICAgICAgOiBbXG4gICAgICAgICAgT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCxcbiAgICAgICAgICBkZXJpdmVkLnNhbHQsXG4gICAgICAgICAgb3ZlcnJpZGVzLnVuaXF1ZSA/PyAnMHgwJyxcbiAgICAgICAgICBvdmVycmlkZXMuY3RvckxlbiA/PyAnMHgnICsgQmlnSW50KGN0b3IubGVuZ3RoKS50b1N0cmluZygxNiksXG4gICAgICAgICAgLi4uY3RvcixcbiAgICAgICAgXTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IG1hc3Rlci5hZGRyZXNzLFxuICAgICAgICBjYWxsczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogVURDX0FERFJFU1MsXG4gICAgICAgICAgICBlbnRyeXBvaW50OiBVRENfREVQTE9ZX0VOVFJZUE9JTlQsXG4gICAgICAgICAgICBjYWxsZGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgdHJhbnNhY3Rpb25UeXBlOiBTdGFya25ldFRyYW5zYWN0aW9uVHlwZS5JTlZPS0UsXG4gICAgICB9KSxcbiAgICAgICd1dGYtOCdcbiAgICApLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIGRlc2NyaWJlKCdCdWlsZCBVREMgZGVwbG95IHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgZnJvbSB0YXJnZXQgcHVibGljIGtleSBhbmQgcHJvZHVjZSBhIHRyYW5zYWN0aW9uSGFzaCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnNlbmRlcihtYXN0ZXIuYWRkcmVzcykubm9uY2UoJzB4MCcpLmNoYWluSWQoU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkKS5mcm9tUHVibGljS2V5KHRhcmdldC5wdWJsaWNLZXkpO1xuXG4gICAgICBjb25zdCBleHBlY3RlZCA9IHV0aWxzLmNvbXB1dGVTdGFya25ldEFkZHJlc3ModXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KHRhcmdldC5wdWJsaWNLZXkpKTtcbiAgICAgIGJ1aWxkZXIuZ2V0VGFyZ2V0QWRkcmVzcygpIS5zaG91bGQuZXF1YWwoZXhwZWN0ZWQuYWRkcmVzcyk7XG4gICAgICB1dGlscy5ub3JtYWxpemVBZGRyZXNzKGJ1aWxkZXIuZ2V0VGFyZ2V0QWRkcmVzcygpISkuc2hvdWxkLmVxdWFsKHV0aWxzLm5vcm1hbGl6ZUFkZHJlc3ModGFyZ2V0LmFkZHJlc3MpKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGRhdGEgPSB0eC5zdGFya25ldFRyYW5zYWN0aW9uRGF0YTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGRhdGEudHJhbnNhY3Rpb25IYXNoKTtcbiAgICAgIChkYXRhLnRyYW5zYWN0aW9uSGFzaCBhcyBzdHJpbmcpLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgICBkYXRhLmNhbGxzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBkYXRhLmNhbGxzWzBdLmNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoVURDX0FERFJFU1MpO1xuICAgICAgZGF0YS5jYWxsc1swXS5lbnRyeXBvaW50LnNob3VsZC5lcXVhbChVRENfREVQTE9ZX0VOVFJZUE9JTlQpO1xuICAgICAgZGF0YS5jYWxsc1swXS5jYWxsZGF0YVswXS5zaG91bGQuZXF1YWwoT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCk7XG4gICAgICBkYXRhLmNhbGxzWzBdLmNhbGxkYXRhWzJdLnNob3VsZC5lcXVhbCgnMHgwJyk7IC8vIHVuaXF1ZT1mYWxzZVxuICAgICAgZGF0YS5jYWxsc1swXS5jYWxsZGF0YVszXS5zaG91bGQuZXF1YWwoJzB4NCcpOyAvLyBFdGhBY2NvdW50IGN0b3IgbGVuXG4gICAgICBkYXRhLmNhbGxzWzBdLmNhbGxkYXRhLnNsaWNlKDQpLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWQuY29uc3RydWN0b3JDYWxsZGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGtlZXAgZGVyaXZlZCBhZGRyZXNzIGNvbnNpc3RlbnQgd2l0aCBjb21wdXRlU3RhcmtuZXRBZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuZnJvbVB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KTtcbiAgICAgIGNvbnN0IGRlcml2ZWQgPSB1dGlscy5jb21wdXRlU3RhcmtuZXRBZGRyZXNzKHV0aWxzLmdldFVuY29tcHJlc3NlZFB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KSk7XG4gICAgICBidWlsZGVyLmdldFRhcmdldEFkZHJlc3MoKSEuc2hvdWxkLmVxdWFsKGRlcml2ZWQuYWRkcmVzcyk7XG4gICAgICBkZXJpdmVkLnNhbHQuc2hvdWxkLmVxdWFsKFxuICAgICAgICB1dGlscy5wYXJzZVVkY0RlcGxveUNhbGwoe1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogVURDX0FERFJFU1MsXG4gICAgICAgICAgZW50cnlwb2ludDogVURDX0RFUExPWV9FTlRSWVBPSU5ULFxuICAgICAgICAgIGNhbGxkYXRhOiBbT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCwgZGVyaXZlZC5zYWx0LCAnMHgwJywgJzB4NCcsIC4uLmRlcml2ZWQuY29uc3RydWN0b3JDYWxsZGF0YV0sXG4gICAgICAgIH0pIS5zYWx0XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIGNvbXBpbGVkQ2FsbGRhdGEgd2l0aCBhIHNpbmdsZSBVREMgY2FsbCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnNlbmRlcihtYXN0ZXIuYWRkcmVzcykubm9uY2UoJzB4MCcpLmNoYWluSWQoU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkKS5mcm9tUHVibGljS2V5KHRhcmdldC5wdWJsaWNLZXkpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgY29tcGlsZWQgPSB0eC5zdGFya25ldFRyYW5zYWN0aW9uRGF0YS5jb21waWxlZENhbGxkYXRhIGFzIHN0cmluZ1tdO1xuICAgICAgY29tcGlsZWRbMF0uc2hvdWxkLmVxdWFsKCcweDEnKTtcbiAgICAgIHV0aWxzLm5vcm1hbGl6ZUFkZHJlc3MoY29tcGlsZWRbMV0pLnNob3VsZC5lcXVhbCh1dGlscy5ub3JtYWxpemVBZGRyZXNzKFVEQ19BRERSRVNTKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgdGhyb3VnaCB0b0ludGVybmFsSGV4IGFuZCBmcm9tKCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5zZW5kZXIobWFzdGVyLmFkZHJlc3MpLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCkuZnJvbVB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGludGVybmFsSGV4ID0gdHgudG9JbnRlcm5hbEhleCgpO1xuXG4gICAgICBjb25zdCBidWlsZGVyMiA9IGF3YWl0IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmZyb20oaW50ZXJuYWxIZXgpO1xuICAgICAgYnVpbGRlcjIuc2hvdWxkLmJlLmluc3RhbmNlb2YoVWRjRGVwbG95QnVpbGRlcik7XG4gICAgICBjb25zdCB0eDIgPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgIHR4Mi5zaWduYWJsZUhleC5zaG91bGQuZXF1YWwodHguc2lnbmFibGVIZXgpO1xuICAgICAgdHgyLmlkLnNob3VsZC5lcXVhbCh0eC5pZCk7XG4gICAgICAoYnVpbGRlcjIgYXMgVWRjRGVwbG95QnVpbGRlcikuZ2V0VGFyZ2V0QWRkcmVzcygpIS5zaG91bGQuZXF1YWwodGFyZ2V0LmFkZHJlc3MpO1xuICAgICAgY29uc3QgcGFyc2VkID0gdXRpbHMucGFyc2VVZGNEZXBsb3lDYWxsKHR4Mi5zdGFya25ldFRyYW5zYWN0aW9uRGF0YS5jYWxsc1swXSk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkKTtcbiAgICAgIHBhcnNlZCEudW5pcXVlLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICB1dGlsc1xuICAgICAgICAubm9ybWFsaXplQWRkcmVzcyhcbiAgICAgICAgICB1dGlscy5jYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaChwYXJzZWQhLnNhbHQsIHBhcnNlZCEuY2xhc3NIYXNoLCBwYXJzZWQhLmNvbnN0cnVjdG9yQ2FsbGRhdGEsIDApXG4gICAgICAgIClcbiAgICAgICAgLnNob3VsZC5lcXVhbCh1dGlscy5ub3JtYWxpemVBZGRyZXNzKHRhcmdldC5hZGRyZXNzKSk7XG4gICAgfSk7XG5cbiAgICBpdCgndG9Ccm9hZGNhc3RGb3JtYXQgc2hvdWxkIHJldHVybiBTdGFya25ldCBSUEMtcmVhZHkgSU5WT0tFIEpTT04nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5zZW5kZXIobWFzdGVyLmFkZHJlc3MpLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCkuZnJvbVB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG5cbiAgICAgIHBhcnNlZC50eXBlLnNob3VsZC5lcXVhbCgnSU5WT0tFJyk7XG4gICAgICBwYXJzZWQudmVyc2lvbi5zaG91bGQuZXF1YWwoJzB4MycpO1xuICAgICAgcGFyc2VkLnNlbmRlcl9hZGRyZXNzLnNob3VsZC5lcXVhbChtYXN0ZXIuYWRkcmVzcyk7XG4gICAgICBwYXJzZWQuY2FsbGRhdGEuc2hvdWxkLmJlLkFycmF5KCk7XG4gICAgICBwYXJzZWQuY2FsbGRhdGFbMF0uc2hvdWxkLmVxdWFsKCcweDEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IGV4cGxpY2l0IGRlcGxveVBhcmFtcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWQgPSB1dGlscy5jb21wdXRlU3RhcmtuZXRBZGRyZXNzKHV0aWxzLmdldFVuY29tcHJlc3NlZFB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5zZW5kZXIobWFzdGVyLmFkZHJlc3MpLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCkuZGVwbG95UGFyYW1zKHtcbiAgICAgICAgY2xhc3NIYXNoOiBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILFxuICAgICAgICBzYWx0OiBkZXJpdmVkLnNhbHQsXG4gICAgICAgIGNvbnN0cnVjdG9yQ2FsbGRhdGE6IGRlcml2ZWQuY29uc3RydWN0b3JDYWxsZGF0YSxcbiAgICAgIH0pO1xuXG4gICAgICBidWlsZGVyLmdldFRhcmdldEFkZHJlc3MoKSEuc2hvdWxkLmVxdWFsKGRlcml2ZWQuYWRkcmVzcyk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4LnN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhLnRyYW5zYWN0aW9uSGFzaCk7XG4gICAgfSk7XG5cbiAgICBpdCgndG9Kc29uL2V4cGxhaW5UcmFuc2FjdGlvbiBzaG91bGQgZXhwb3NlIHRhcmdldCBhZGRyZXNzIHdpdGggYW1vdW50IDAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5zZW5kZXIobWFzdGVyLmFkZHJlc3MpLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCkuZnJvbVB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGpzb24udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICBqc29uLnNlbmRlci5zaG91bGQuZXF1YWwobWFzdGVyLmFkZHJlc3MpO1xuICAgICAgdXRpbHMubm9ybWFsaXplQWRkcmVzcyhqc29uLnJlY2lwaWVudCEpLnNob3VsZC5lcXVhbCh1dGlscy5ub3JtYWxpemVBZGRyZXNzKHRhcmdldC5hZGRyZXNzKSk7XG4gICAgICBqc29uLmFtb3VudCEuc2hvdWxkLmVxdWFsKCcwJyk7XG5cbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHV0aWxzLm5vcm1hbGl6ZUFkZHJlc3MoZXhwbGFpbmVkLm91dHB1dHNbMF0uYWRkcmVzcykuc2hvdWxkLmVxdWFsKHV0aWxzLm5vcm1hbGl6ZUFkZHJlc3ModGFyZ2V0LmFkZHJlc3MpKTtcbiAgICAgIGV4cGxhaW5lZC5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIGV4cGxhaW5lZC50eXBlIS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVqZWN0IGJ1aWxkIHdpdGhvdXQgc2VuZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UoJzB4MCcpLmNoYWluSWQoU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkKS5mcm9tUHVibGljS2V5KHRhcmdldC5wdWJsaWNLZXkpO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL1tTc11lbmRlci8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYnVpbGQgd2l0aG91dCBkZXBsb3kgcGFyYW1zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKG1hc3Rlci5hZGRyZXNzKS5ub25jZSgnMHgwJykuY2hhaW5JZChTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQpO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL1VEQyBkZXBsb3kgcmVxdWlyZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGludmFsaWQgdGFyZ2V0IHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgKCgpID0+IGJ1aWxkZXIuZnJvbVB1YmxpY0tleSgnaW52YWxpZCcpKS5zaG91bGQudGhyb3coL1tJaV1udmFsaWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGVtcHR5IGNvbnN0cnVjdG9yIGNhbGxkYXRhIGluIGRlcGxveVBhcmFtcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCk7XG4gICAgICAoKCkgPT5cbiAgICAgICAgYnVpbGRlci5kZXBsb3lQYXJhbXMoe1xuICAgICAgICAgIGNsYXNzSGFzaDogT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCxcbiAgICAgICAgICBzYWx0OiAnMHgxJyxcbiAgICAgICAgICBjb25zdHJ1Y3RvckNhbGxkYXRhOiBbXSxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygvQ29uc3RydWN0b3IgY2FsbGRhdGEvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHNhbHQgMHgwJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgICgoKSA9PlxuICAgICAgICBidWlsZGVyLmRlcGxveVBhcmFtcyh7XG4gICAgICAgICAgY2xhc3NIYXNoOiBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILFxuICAgICAgICAgIHNhbHQ6ICcweDAnLFxuICAgICAgICAgIGNvbnN0cnVjdG9yQ2FsbGRhdGE6IFsnMHgxJywgJzB4MicsICcweDMnLCAnMHg0J10sXG4gICAgICAgIH0pKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FsdC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgdW5pcXVlPXRydWUgb24gcmVoeWRyYXRpb24gdmlhIGZyb20oKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhleCA9IGJ1aWxkVWRjUmF3SGV4KHsgdW5pcXVlOiAnMHgxJyB9KTtcbiAgICAgIGF3YWl0IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmZyb20oaGV4KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC91bmlxdWU9dHJ1ZS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgbWFsZm9ybWVkIFVEQyBjYWxsZGF0YSAoYmFkIGN0b3JfbGVuKSBvbiBmcm9tKCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBoZXggPSBidWlsZFVkY1Jhd0hleCh7IG9taXRDdG9yOiB0cnVlLCBjdG9yTGVuOiAnMHg5OScgfSk7XG4gICAgICBhd2FpdCBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKS5mcm9tKGhleCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBVREMgZGVwbG95IGNhbGxkYXRhLyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1,2 +1,2 @@
1
- import 'should';
1
+ export {};
2
2
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":"AAWA,OAAO,QAAQ,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}