@bitgo-beta/sdk-coin-sol 7.6.4-beta.664 → 7.6.4-beta.666

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.
@@ -1 +1 @@
1
- {"version":3,"file":"explainTransactionWasm.d.ts","sourceRoot":"","sources":["../../../../src/lib/explainTransactionWasm.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0B,sBAAsB,IAAI,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAIzG,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;CAClB;AA6LD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,6BAA6B,GAAG,4BAA4B,CAoJzG"}
1
+ {"version":3,"file":"explainTransactionWasm.d.ts","sourceRoot":"","sources":["../../../../src/lib/explainTransactionWasm.ts"],"names":[],"mappings":"AASA,OAAO,EAA0B,sBAAsB,IAAI,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAIzG,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;CAClB;AA0MD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,6BAA6B,GAAG,4BAA4B,CAoJzG"}
@@ -76,6 +76,17 @@ function isWasmConfidentialTransferInstruction(instr) {
76
76
  }
77
77
  return false;
78
78
  }
79
+ /**
80
+ * Returns true if a WASM-parsed Unknown instruction is a Token ACL permissionless
81
+ * thaw instruction (sRFC-37 Token ACL program).
82
+ *
83
+ * The wasm parser does not know the Token ACL program, so ThawPermissionlessIdempotent
84
+ * instructions parse as Unknown. Mirrors the JS-side `getInstructionType` case for
85
+ * TOKEN_ACL_PROGRAM_ID in lib/utils.ts.
86
+ */
87
+ function isWasmTokenAclThawInstruction(instr) {
88
+ return instr.type === 'Unknown' && instr.programId === constants_1.TOKEN_ACL_PROGRAM_ID;
89
+ }
79
90
  function deriveTransactionType(instructions, combined, memo) {
80
91
  if (combined)
81
92
  return TransactionType[combined.kind];
@@ -87,8 +98,8 @@ function deriveTransactionType(instructions, combined, memo) {
87
98
  return TransactionType.StakingActivate;
88
99
  if (instructions.some((i) => i.type === 'StakePoolWithdrawStake'))
89
100
  return TransactionType.StakingDeactivate;
90
- // ATA-only transactions (ignoring boilerplate)
91
- const meaningful = instructions.filter((i) => !BOILERPLATE_TYPES.has(i.type));
101
+ // ATA-only transactions (ignoring boilerplate and Token ACL permissionless thaw)
102
+ const meaningful = instructions.filter((i) => !BOILERPLATE_TYPES.has(i.type) && !isWasmTokenAclThawInstruction(i));
92
103
  if (meaningful.length > 0 && meaningful.every((i) => i.type === 'CreateAssociatedTokenAccount')) {
93
104
  return TransactionType.AssociatedTokenAccountInitialization;
94
105
  }
@@ -100,7 +111,7 @@ function deriveTransactionType(instructions, combined, memo) {
100
111
  if (instructions.some((i) => i.type === 'Unknown' && isWasmConfidentialTransferInstruction(i))) {
101
112
  return TransactionType.ConfidentialTransfer;
102
113
  }
103
- if (instructions.some((i) => i.type === 'Unknown'))
114
+ if (instructions.some((i) => i.type === 'Unknown' && !isWasmTokenAclThawInstruction(i)))
104
115
  return TransactionType.CustomTx;
105
116
  // Send requires an explicit Transfer or TokenTransfer instruction.
106
117
  // Everything else is a custom/unrecognized transaction.
@@ -294,4 +305,4 @@ function explainSolTransaction(params) {
294
305
  ...(stakingAuthorize ? { stakingAuthorize } : {}),
295
306
  };
296
307
  }
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uV2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZXhwbGFpblRyYW5zYWN0aW9uV2FzbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXdOQSxzREFvSkM7QUEzV0Qsb0RBQW1IO0FBQ25ILDJDQUtxQjtBQUVyQix5RUFBMkQ7QUFDM0QsZ0RBQXdCO0FBU3hCLGdGQUFnRjtBQUNoRiwwRUFBMEU7QUFDMUUsZ0ZBQWdGO0FBRWhGLElBQUssZUFXSjtBQVhELFdBQUssZUFBZTtJQUNsQixnQ0FBYSxDQUFBO0lBQ2Isc0RBQW1DLENBQUE7SUFDbkMsMERBQXVDLENBQUE7SUFDdkMsc0RBQW1DLENBQUE7SUFDbkMsd0RBQXFDLENBQUE7SUFDckMsc0RBQW1DLENBQUE7SUFDbkMsZ0VBQTZDLENBQUE7SUFDN0MsZ0dBQTZFLENBQUE7SUFDN0Usd0NBQXFCLENBQUE7SUFDckIsZ0VBQTZDLENBQUE7QUFDL0MsQ0FBQyxFQVhJLGVBQWUsS0FBZixlQUFlLFFBV25CO0FBMkJELFNBQVMscUJBQXFCLENBQUMsWUFBaUM7SUFDOUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDckUsT0FBTztnQkFDTCxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMs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QUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDbEYsYUFBYSxFQUFFLEVBQUU7UUFDakIsWUFBWSxFQUFFLEdBQUc7UUFDakIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDbEMsT0FBTyxFQUFFLGVBQWU7UUFDeEIsTUFBTSxFQUFFLGNBQWM7UUFDdEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLEdBQUcsRUFBRTtZQUNILEdBQUcsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDdkMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2pFO1FBQ0QsSUFBSTtRQUNKLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSztRQUN2QixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7UUFDakMsZ0JBQWdCO1FBQ2hCLFdBQVc7UUFDWCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2xELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVRva2VuRW5hYmxlbWVudCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uLCBwYXJzZVRyYW5zYWN0aW9uLCB0eXBlIFBhcnNlZFRyYW5zYWN0aW9uLCB0eXBlIEluc3RydWN0aW9uUGFyYW1zIH0gZnJvbSAnQGJpdGdvL3dhc20tc29sYW5hJztcbmltcG9ydCB7XG4gIFVOQVZBSUxBQkxFX1RFWFQsXG4gIFpLX0VMR0FNQUxfUFJPT0ZfUFJPR1JBTV9JRCxcbiAgQ1RfRVhUX0RJU0NSSU1JTkFUT1IsXG4gIENUX1NVQl9ESVNDUklNSU5BVE9SUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3Rha2luZ0F1dGhvcml6ZVBhcmFtcywgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBhcyBTb2xMaWJUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBmaW5kVG9rZW5OYW1lIH0gZnJvbSAnLi9pbnN0cnVjdGlvblBhcmFtc0ZhY3RvcnknO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpblRyYW5zYWN0aW9uV2FzbU9wdGlvbnMge1xuICB0eEJhc2U2NDogc3RyaW5nO1xuICBmZWVJbmZvPzogeyBmZWU6IHN0cmluZyB9O1xuICB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50Pzogc3RyaW5nO1xuICBjb2luTmFtZTogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHJhbnNhY3Rpb24gdHlwZSBkZXJpdmF0aW9uIChwb3J0ZWQgZnJvbSBAYml0Z28vd2FzbS1zb2xhbmEgZXhwbGFpbi50cylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmVudW0gVHJhbnNhY3Rpb25UeXBlIHtcbiAgU2VuZCA9ICdTZW5kJyxcbiAgU3Rha2luZ0FjdGl2YXRlID0gJ1N0YWtpbmdBY3RpdmF0ZScsXG4gIFN0YWtpbmdEZWFjdGl2YXRlID0gJ1N0YWtpbmdEZWFjdGl2YXRlJyxcbiAgU3Rha2luZ1dpdGhkcmF3ID0gJ1N0YWtpbmdXaXRoZHJhdycsXG4gIFN0YWtpbmdBdXRob3JpemUgPSAnU3Rha2luZ0F1dGhvcml6ZScsXG4gIFN0YWtpbmdEZWxlZ2F0ZSA9ICdTdGFraW5nRGVsZWdhdGUnLFxuICBXYWxsZXRJbml0aWFsaXphdGlvbiA9ICdXYWxsZXRJbml0aWFsaXphdGlvbicsXG4gIEFzc29jaWF0ZWRUb2tlbkFjY291bnRJbml0aWFsaXphdGlvbiA9ICdBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb24nLFxuICBDdXN0b21UeCA9ICdDdXN0b21UeCcsXG4gIENvbmZpZGVudGlhbFRyYW5zZmVyID0gJ0NvbmZpZGVudGlhbFRyYW5zZmVyJyxcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbWJpbmVkIGluc3RydWN0aW9uIHBhdHRlcm4gZGV0ZWN0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBTb2xhbmEgbmF0aXZlIHN0YWtpbmcgcmVxdWlyZXMgMyBzZXBhcmF0ZSBpbnN0cnVjdGlvbnM6XG4vLyAgIENyZWF0ZUFjY291bnQgKGZ1bmQpICsgU3Rha2VJbml0aWFsaXplIChzZXQgYXV0aG9yaXRpZXMpICsgRGVsZWdhdGVTdGFrZSAocGljayB2YWxpZGF0b3IpXG4vLyBNYXJpbmFkZSBzdGFraW5nIHVzZXMgb25seSBDcmVhdGVBY2NvdW50ICsgU3Rha2VJbml0aWFsaXplIChubyBEZWxlZ2F0ZSkuXG4vLyBXYWxsZXQgaW5pdCB1c2VzIENyZWF0ZUFjY291bnQgKyBOb25jZUluaXRpYWxpemUuXG5cbmludGVyZmFjZSBDb21iaW5lZFN0YWtlQWN0aXZhdGUge1xuICBraW5kOiAnU3Rha2luZ0FjdGl2YXRlJztcbiAgZnJvbUFkZHJlc3M6IHN0cmluZztcbiAgc3Rha2luZ0FkZHJlc3M6IHN0cmluZztcbiAgYW1vdW50OiBiaWdpbnQ7XG59XG5cbmludGVyZmFjZSBDb21iaW5lZFdhbGxldEluaXQge1xuICBraW5kOiAnV2FsbGV0SW5pdGlhbGl6YXRpb24nO1xuICBmcm9tQWRkcmVzczogc3RyaW5nO1xuICBub25jZUFkZHJlc3M6IHN0cmluZztcbiAgYW1vdW50OiBiaWdpbnQ7XG59XG5cbnR5cGUgQ29tYmluZWRQYXR0ZXJuID0gQ29tYmluZWRTdGFrZUFjdGl2YXRlIHwgQ29tYmluZWRXYWxsZXRJbml0O1xuXG5mdW5jdGlvbiBkZXRlY3RDb21iaW5lZFBhdHRlcm4oaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvblBhcmFtc1tdKTogQ29tYmluZWRQYXR0ZXJuIHwgbnVsbCB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IGN1cnIgPSBpbnN0cnVjdGlvbnNbaV07XG4gICAgY29uc3QgbmV4dCA9IGluc3RydWN0aW9uc1tpICsgMV07XG5cbiAgICBpZiAoY3Vyci50eXBlID09PSAnQ3JlYXRlQWNjb3VudCcgJiYgbmV4dC50eXBlID09PSAnU3Rha2VJbml0aWFsaXplJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ1N0YWtpbmdBY3RpdmF0ZScsXG4gICAgICAgIGZyb21BZGRyZXNzOiBjdXJyLmZyb21BZGRyZXNzLFxuICAgICAgICBzdGFraW5nQWRkcmVzczogY3Vyci5uZXdBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IGN1cnIuYW1vdW50LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY3Vyci50eXBlID09PSAnQ3JlYXRlQWNjb3VudCcgJiYgbmV4dC50eXBlID09PSAnTm9uY2VJbml0aWFsaXplJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ1dhbGxldEluaXRpYWxpemF0aW9uJyxcbiAgICAgICAgZnJvbUFkZHJlc3M6IGN1cnIuZnJvbUFkZHJlc3MsXG4gICAgICAgIG5vbmNlQWRkcmVzczogY3Vyci5uZXdBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IGN1cnIuYW1vdW50LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYW5zYWN0aW9uIHR5cGUgZGVyaXZhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgQk9JTEVSUExBVEVfVFlQRVMgPSBuZXcgU2V0KFsnTm9uY2VBZHZhbmNlJywgJ01lbW8nLCAnU2V0Q29tcHV0ZVVuaXRMaW1pdCcsICdTZXRQcmlvcml0eUZlZSddKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBXQVNNLXBhcnNlZCBVbmtub3duIGluc3RydWN0aW9uIGlzIGEgY29uZmlkZW50aWFsIHRyYW5zZmVyIGluc3RydWN0aW9uXG4gKiAoVG9rZW4tMjAyMiBDVCBleHRlbnNpb24gb3IgemstZWxnYW1hbC1wcm9vZiBwcm9ncmFtKS5cbiAqXG4gKiBDVCBleHRlbnNpb246IGJ5dGUgMCA9IENUX0VYVF9ESVNDUklNSU5BVE9SLCBieXRlIDEg4oiIIENUX1NVQl9ESVNDUklNSU5BVE9SU1xuICogemstZWxnYW1hbC1wcm9vZjogYW55IGluc3RydWN0aW9uIGZyb20gdGhlIHprLWVsZ2FtYWwtcHJvb2YgcHJvZ3JhbVxuICovXG5mdW5jdGlvbiBpc1dhc21Db25maWRlbnRpYWxUcmFuc2Zlckluc3RydWN0aW9uKGluc3RyOiBJbnN0cnVjdGlvblBhcmFtcyk6IGJvb2xlYW4ge1xuICBpZiAoaW5zdHIudHlwZSAhPT0gJ1Vua25vd24nKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb2dyYW1JZCA9IGluc3RyLnByb2dyYW1JZDtcbiAgLy8gemstZWxnYW1hbC1wcm9vZiBwcm9ncmFtIGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIENUIHByb29mIHZlcmlmaWNhdGlvbnNcbiAgaWYgKHByb2dyYW1JZCA9PT0gWktfRUxHQU1BTF9QUk9PRl9QUk9HUkFNX0lEKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gVG9rZW4tMjAyMiBDVCBleHRlbnNpb246IGJ5dGUgMCA9IENUX0VYVF9ESVNDUklNSU5BVE9SLCBieXRlIDEg4oiIIENUX1NVQl9ESVNDUklNSU5BVE9SU1xuICBjb25zdCBUT0tFTl8yMDIyX1BST0dSQU1fSUQgPSAnVG9rZW56UWRCTmJMcVA1VkVoZGtBUzZFUEZMQzFQSG5CcUNYRXBQeHVFYic7XG4gIGlmIChwcm9ncmFtSWQgPT09IFRPS0VOXzIwMjJfUFJPR1JBTV9JRCkge1xuICAgIGNvbnN0IGRhdGFCeXRlcyA9IGJzNTguZGVjb2RlKGluc3RyLmRhdGEpO1xuICAgIGlmIChkYXRhQnl0ZXMubGVuZ3RoID49IDIpIHtcbiAgICAgIHJldHVybiBkYXRhQnl0ZXNbMF0gPT09IENUX0VYVF9ESVNDUklNSU5BVE9SICYmIENUX1NVQl9ESVNDUklNSU5BVE9SUy5oYXMoZGF0YUJ5dGVzWzFdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBkZXJpdmVUcmFuc2FjdGlvblR5cGUoXG4gIGluc3RydWN0aW9uczogSW5zdHJ1Y3Rpb25QYXJhbXNbXSxcbiAgY29tYmluZWQ6IENvbWJpbmVkUGF0dGVybiB8IG51bGwsXG4gIG1lbW86IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgaWYgKGNvbWJpbmVkKSByZXR1cm4gVHJhbnNhY3Rpb25UeXBlW2NvbWJpbmVkLmtpbmRdO1xuXG4gIC8vIE1hcmluYWRlIGRlYWN0aXZhdGU6IFRyYW5zZmVyICsgbWVtbyBjb250YWluaW5nIFwiUHJlcGFyZUZvclJldm9rZVwiXG4gIGlmIChtZW1vPy5pbmNsdWRlcygnUHJlcGFyZUZvclJldm9rZScpKSByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuXG4gIC8vIEppdG8gcG9vbCBvcGVyYXRpb25zXG4gIGlmIChpbnN0cnVjdGlvbnMuc29tZSgoaSkgPT4gaS50eXBlID09PSAnU3Rha2VQb29sRGVwb3NpdFNvbCcpKSByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTtcbiAgaWYgKGluc3RydWN0aW9ucy5zb21lKChpKSA9PiBpLnR5cGUgPT09ICdTdGFrZVBvb2xXaXRoZHJhd1N0YWtlJykpIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU7XG5cbiAgLy8gQVRBLW9ubHkgdHJhbnNhY3Rpb25zIChpZ25vcmluZyBib2lsZXJwbGF0ZSlcbiAgY29uc3QgbWVhbmluZ2Z1bCA9IGluc3RydWN0aW9ucy5maWx0ZXIoKGkpID0+ICFCT0lMRVJQTEFURV9UWVBFUy5oYXMoaS50eXBlKSk7XG4gIGlmIChtZWFuaW5nZnVsLmxlbmd0aCA+IDAgJiYgbWVhbmluZ2Z1bC5ldmVyeSgoaSkgPT4gaS50eXBlID09PSAnQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcpKSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5Bc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb247XG4gIH1cblxuICAvLyBEaXJlY3Qgc3Rha2luZyBpbnN0cnVjdGlvbiBtYXBwaW5nXG4gIGNvbnN0IHN0YWtpbmcgPSBpbnN0cnVjdGlvbnMuZmluZCgoaSkgPT4gaS50eXBlIGluIFRyYW5zYWN0aW9uVHlwZSk7XG4gIGlmIChzdGFraW5nKSByZXR1cm4gVHJhbnNhY3Rpb25UeXBlW3N0YWtpbmcudHlwZSBhcyBrZXlvZiB0eXBlb2YgVHJhbnNhY3Rpb25UeXBlXTtcblxuICAvLyBVbmtub3duIGluc3RydWN0aW9ucyBpbmRpY2F0ZSBhIGN1c3RvbS91bnJlY29nbml6ZWQgdHJhbnNhY3Rpb25cbiAgaWYgKGluc3RydWN0aW9ucy5zb21lKChpKSA9PiBpLnR5cGUgPT09ICdVbmtub3duJyAmJiBpc1dhc21Db25maWRlbnRpYWxUcmFuc2Zlckluc3RydWN0aW9uKGkpKSkge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQ29uZmlkZW50aWFsVHJhbnNmZXI7XG4gIH1cbiAgaWYgKGluc3RydWN0aW9ucy5zb21lKChpKSA9PiBpLnR5cGUgPT09ICdVbmtub3duJykpIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHg7XG5cbiAgLy8gU2VuZCByZXF1aXJlcyBhbiBleHBsaWNpdCBUcmFuc2ZlciBvciBUb2tlblRyYW5zZmVyIGluc3RydWN0aW9uLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgYSBjdXN0b20vdW5yZWNvZ25pemVkIHRyYW5zYWN0aW9uLlxuICBpZiAoaW5zdHJ1Y3Rpb25zLnNvbWUoKGkpID0+IGkudHlwZSA9PT0gJ1RyYW5zZmVyJyB8fCBpLnR5cGUgPT09ICdUb2tlblRyYW5zZmVyJykpIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcblxuICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHJhbnNhY3Rpb24gSUQgZXh0cmFjdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQmFzZTU4IGVuY29kaW5nIG9mIDY0IHplcm8gYnl0ZXMgKHVuc2lnbmVkIHRyYW5zYWN0aW9ucyBoYXZlIGFsbC16ZXJvIHNpZ25hdHVyZXMpXG5jb25zdCBBTExfWkVST1NfQkFTRTU4ID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnO1xuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNhY3Rpb25JZChzaWduYXR1cmVzOiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNpZyA9IHNpZ25hdHVyZXNbMF07XG4gIGlmICghc2lnIHx8IHNpZyA9PT0gQUxMX1pFUk9TX0JBU0U1OCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHNpZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFN0YWtpbmcgYXV0aG9yaXplIG1hcHBpbmdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogTWFwIFdBU00gU3Rha2luZ0F1dGhvcml6ZSBpbnN0cnVjdGlvbiB0byB0aGUgbGVnYWN5IEJpdEdvSlMgc2hhcGUuXG4gKiBCaXRHb0pTIHVzZXMgZGlmZmVyZW50IGZpZWxkIG5hbWVzIGZvciBTdGFrZXIgdnMgV2l0aGRyYXdlciBhdXRob3JpdHkgY2hhbmdlcy5cbiAqL1xuZnVuY3Rpb24gbWFwU3Rha2luZ0F1dGhvcml6ZShpbnN0cjoge1xuICBzdGFraW5nQWRkcmVzczogc3RyaW5nO1xuICBvbGRBdXRob3JpemVBZGRyZXNzOiBzdHJpbmc7XG4gIG5ld0F1dGhvcml6ZUFkZHJlc3M6IHN0cmluZztcbiAgYXV0aG9yaXplVHlwZTogJ1N0YWtlcicgfCAnV2l0aGRyYXdlcic7XG4gIGN1c3RvZGlhbkFkZHJlc3M/OiBzdHJpbmc7XG59KTogU3Rha2luZ0F1dGhvcml6ZVBhcmFtcyB7XG4gIGlmIChpbnN0ci5hdXRob3JpemVUeXBlID09PSAnV2l0aGRyYXdlcicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3Rha2luZ0FkZHJlc3M6IGluc3RyLnN0YWtpbmdBZGRyZXNzLFxuICAgICAgb2xkV2l0aGRyYXdBZGRyZXNzOiBpbnN0ci5vbGRBdXRob3JpemVBZGRyZXNzLFxuICAgICAgbmV3V2l0aGRyYXdBZGRyZXNzOiBpbnN0ci5uZXdBdXRob3JpemVBZGRyZXNzLFxuICAgICAgY3VzdG9kaWFuQWRkcmVzczogaW5zdHIuY3VzdG9kaWFuQWRkcmVzcyxcbiAgICB9O1xuICB9XG4gIC8vIFN0YWtlciBhdXRob3JpdHkgY2hhbmdlXG4gIHJldHVybiB7XG4gICAgc3Rha2luZ0FkZHJlc3M6IGluc3RyLnN0YWtpbmdBZGRyZXNzLFxuICAgIG9sZFdpdGhkcmF3QWRkcmVzczogJycsXG4gICAgbmV3V2l0aGRyYXdBZGRyZXNzOiAnJyxcbiAgICBvbGRTdGFraW5nQXV0aG9yaXR5QWRkcmVzczogaW5zdHIub2xkQXV0aG9yaXplQWRkcmVzcyxcbiAgICBuZXdTdGFraW5nQXV0aG9yaXR5QWRkcmVzczogaW5zdHIubmV3QXV0aG9yaXplQWRkcmVzcyxcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1haW4gZXhwbGFpbiBmdW5jdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBTdGFuZGFsb25lIFdBU00tYmFzZWQgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24uXG4gKlxuICogUGFyc2VzIHRoZSB0cmFuc2FjdGlvbiB2aWEgYHBhcnNlVHJhbnNhY3Rpb24odHgpYCBmcm9tIEBiaXRnby93YXNtLXNvbGFuYSxcbiAqIHRoZW4gZGVyaXZlcyB0aGUgdHJhbnNhY3Rpb24gdHlwZSwgZXh0cmFjdHMgb3V0cHV0cy9pbnB1dHMsIGNvbXB1dGVzIGZlZXMsXG4gKiBhbmQgbWFwcyB0byBCaXRHb0pTIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gZm9ybWF0LlxuICpcbiAqIFRoZSBleHBsYWluIGxvZ2ljIHdhcyBwb3J0ZWQgZnJvbSB3YXNtLXNvbGFuYSBwZXIgdGhlIGNvbnZlbnRpb24gdGhhdFxuICogYGV4cGxhaW5UcmFuc2FjdGlvbmAgYmVsb25ncyBpbiBCaXRHb0pTLCBub3QgaW4gd2FzbS0qIHBhY2thZ2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpblNvbFRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uV2FzbU9wdGlvbnMpOiBTb2xMaWJUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgY29uc3QgdHhCeXRlcyA9IEJ1ZmZlci5mcm9tKHBhcmFtcy50eEJhc2U2NCwgJ2Jhc2U2NCcpO1xuICBjb25zdCB0eCA9IFRyYW5zYWN0aW9uLmZyb21CeXRlcyh0eEJ5dGVzKTtcbiAgY29uc3QgcGFyc2VkOiBQYXJzZWRUcmFuc2FjdGlvbiA9IHBhcnNlVHJhbnNhY3Rpb24odHgpO1xuXG4gIC8vIC0tLSBUcmFuc2FjdGlvbiBJRCAtLS1cbiAgY29uc3QgaWQgPSBleHRyYWN0VHJhbnNhY3Rpb25JZChwYXJzZWQuc2lnbmF0dXJlcyk7XG5cbiAgLy8gLS0tIEZlZSBjYWxjdWxhdGlvbiAtLS1cbiAgY29uc3QgbGFtcG9ydHNQZXJTaWduYXR1cmUgPSBwYXJhbXMuZmVlSW5mbyA/IEJpZ0ludChwYXJhbXMuZmVlSW5mby5mZWUpIDogMG47XG4gIGxldCBmZWUgPSBCaWdJbnQocGFyc2VkLm51bVNpZ25hdHVyZXMpICogbGFtcG9ydHNQZXJTaWduYXR1cmU7XG5cbiAgLy8gRWFjaCBDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50IGNyZWF0ZXMgYSBuZXcgdG9rZW4gYWNjb3VudCByZXF1aXJpbmcgYSByZW50IGRlcG9zaXQuXG4gIGNvbnN0IGF0YUNvdW50ID0gcGFyc2VkLmluc3RydWN0aW9uc0RhdGEuZmlsdGVyKChpKSA9PiBpLnR5cGUgPT09ICdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50JykubGVuZ3RoO1xuICBpZiAoYXRhQ291bnQgPiAwICYmIHBhcmFtcy50b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KSB7XG4gICAgZmVlICs9IEJpZ0ludChhdGFDb3VudCkgKiBCaWdJbnQocGFyYW1zLnRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQpO1xuICB9XG5cbiAgLy8gLS0tIEV4dHJhY3QgbWVtbyAobmVlZGVkIGJlZm9yZSB0eXBlIGRlcml2YXRpb24pIC0tLVxuICBsZXQgbWVtbzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGluc3RyIG9mIHBhcnNlZC5pbnN0cnVjdGlvbnNEYXRhKSB7XG4gICAgaWYgKGluc3RyLnR5cGUgPT09ICdNZW1vJykge1xuICAgICAgbWVtbyA9IGluc3RyLm1lbW87XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIERldGVjdCBjb21iaW5lZCBwYXR0ZXJucyBhbmQgZGVyaXZlIHR5cGUgLS0tXG4gIGNvbnN0IGNvbWJpbmVkID0gZGV0ZWN0Q29tYmluZWRQYXR0ZXJuKHBhcnNlZC5pbnN0cnVjdGlvbnNEYXRhKTtcbiAgY29uc3QgdHhUeXBlID0gZGVyaXZlVHJhbnNhY3Rpb25UeXBlKHBhcnNlZC5pbnN0cnVjdGlvbnNEYXRhLCBjb21iaW5lZCwgbWVtbyk7XG5cbiAgLy8gTWFyaW5hZGUgZGVhY3RpdmF0ZTogVHJhbnNmZXIgKyBQcmVwYXJlRm9yUmV2b2tlIG1lbW8uXG4gIC8vIFRoZSBUcmFuc2ZlciBpcyBhIGNvbnRyYWN0IGludGVyYWN0aW9uLCBub3QgcmVhbCB2YWx1ZSB0cmFuc2ZlciDigJQgc2tpcCBmcm9tIG91dHB1dHMuXG4gIGNvbnN0IGlzTWFyaW5hZGVEZWFjdGl2YXRlID1cbiAgICB0eFR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZSAmJiBtZW1vICE9PSB1bmRlZmluZWQgJiYgbWVtby5pbmNsdWRlcygnUHJlcGFyZUZvclJldm9rZScpO1xuXG4gIC8vIC0tLSBFeHRyYWN0IG91dHB1dHMgYW5kIGlucHV0cyAtLS1cbiAgY29uc3Qgb3V0cHV0czogeyBhZGRyZXNzOiBzdHJpbmc7IGFtb3VudDogYmlnaW50OyB0b2tlbk5hbWU/OiBzdHJpbmcgfVtdID0gW107XG4gIGNvbnN0IGlucHV0czogeyBhZGRyZXNzOiBzdHJpbmc7IHZhbHVlOiBiaWdpbnQgfVtdID0gW107XG5cbiAgaWYgKGNvbWJpbmVkPy5raW5kID09PSAnU3Rha2luZ0FjdGl2YXRlJykge1xuICAgIG91dHB1dHMucHVzaCh7IGFkZHJlc3M6IGNvbWJpbmVkLnN0YWtpbmdBZGRyZXNzLCBhbW91bnQ6IGNvbWJpbmVkLmFtb3VudCB9KTtcbiAgICBpbnB1dHMucHVzaCh7IGFkZHJlc3M6IGNvbWJpbmVkLmZyb21BZGRyZXNzLCB2YWx1ZTogY29tYmluZWQuYW1vdW50IH0pO1xuICB9IGVsc2UgaWYgKGNvbWJpbmVkPy5raW5kID09PSAnV2FsbGV0SW5pdGlhbGl6YXRpb24nKSB7XG4gICAgb3V0cHV0cy5wdXNoKHsgYWRkcmVzczogY29tYmluZWQubm9uY2VBZGRyZXNzLCBhbW91bnQ6IGNvbWJpbmVkLmFtb3VudCB9KTtcbiAgICBpbnB1dHMucHVzaCh7IGFkZHJlc3M6IGNvbWJpbmVkLmZyb21BZGRyZXNzLCB2YWx1ZTogY29tYmluZWQuYW1vdW50IH0pO1xuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgaW5zdHIgb2YgcGFyc2VkLmluc3RydWN0aW9uc0RhdGEpIHtcbiAgICAgIHN3aXRjaCAoaW5zdHIudHlwZSkge1xuICAgICAgICBjYXNlICdUcmFuc2Zlcic6XG4gICAgICAgICAgaWYgKGlzTWFyaW5hZGVEZWFjdGl2YXRlKSBicmVhaztcbiAgICAgICAgICBvdXRwdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci50b0FkZHJlc3MsIGFtb3VudDogaW5zdHIuYW1vdW50IH0pO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIuZnJvbUFkZHJlc3MsIHZhbHVlOiBpbnN0ci5hbW91bnQgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1Rva2VuVHJhbnNmZXInOlxuICAgICAgICAgIG91dHB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLnRvQWRkcmVzcywgYW1vdW50OiBpbnN0ci5hbW91bnQsIHRva2VuTmFtZTogaW5zdHIudG9rZW5BZGRyZXNzIH0pO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIuZnJvbUFkZHJlc3MsIHZhbHVlOiBpbnN0ci5hbW91bnQgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1N0YWtpbmdBY3RpdmF0ZSc6XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIuc3Rha2luZ0FkZHJlc3MsIGFtb3VudDogaW5zdHIuYW1vdW50IH0pO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIuZnJvbUFkZHJlc3MsIHZhbHVlOiBpbnN0ci5hbW91bnQgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1N0YWtpbmdXaXRoZHJhdyc6XG4gICAgICAgICAgLy8gV2l0aGRyYXc6IFNPTCBmbG93cyBGUk9NIHN0YWtpbmcgYWRkcmVzcyBUTyB0aGUgcmVjaXBpZW50IChmcm9tQWRkcmVzcylcbiAgICAgICAgICBvdXRwdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci5mcm9tQWRkcmVzcywgYW1vdW50OiBpbnN0ci5hbW91bnQgfSk7XG4gICAgICAgICAgaW5wdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci5zdGFraW5nQWRkcmVzcywgdmFsdWU6IGluc3RyLmFtb3VudCB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnU3Rha2VQb29sRGVwb3NpdFNvbCc6XG4gICAgICAgICAgLy8gSml0byBsaXF1aWQgc3Rha2luZyBkZXBvc2l0XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIuc3Rha2VQb29sLCBhbW91bnQ6IGluc3RyLmxhbXBvcnRzIH0pO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIuZnVuZGluZ0FjY291bnQsIHZhbHVlOiBpbnN0ci5sYW1wb3J0cyB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAtLS0gT3V0cHV0IGFtb3VudCAobmF0aXZlIFNPTCBvbmx5LCBub3QgdG9rZW4gYW1vdW50cykgLS0tXG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IG91dHB1dHMuZmlsdGVyKChvKSA9PiAhby50b2tlbk5hbWUpLnJlZHVjZSgoc3VtLCBvKSA9PiBzdW0gKyBvLmFtb3VudCwgMG4pO1xuXG4gIC8vIC0tLSBBVEEgb3duZXIgbWFwcGluZyBhbmQgdG9rZW4gZW5hYmxlbWVudHMgLS0tXG4gIGNvbnN0IGF0YU93bmVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0IHRva2VuRW5hYmxlbWVudHM6IElUb2tlbkVuYWJsZW1lbnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGluc3RyIG9mIHBhcnNlZC5pbnN0cnVjdGlvbnNEYXRhKSB7XG4gICAgaWYgKGluc3RyLnR5cGUgPT09ICdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50Jykge1xuICAgICAgYXRhT3duZXJNYXBbaW5zdHIuYXRhQWRkcmVzc10gPSBpbnN0ci5vd25lckFkZHJlc3M7XG4gICAgICB0b2tlbkVuYWJsZW1lbnRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBpbnN0ci5hdGFBZGRyZXNzLFxuICAgICAgICB0b2tlbk5hbWU6IGZpbmRUb2tlbk5hbWUoaW5zdHIubWludEFkZHJlc3MsIHVuZGVmaW5lZCwgdHJ1ZSksXG4gICAgICAgIHRva2VuQWRkcmVzczogaW5zdHIubWludEFkZHJlc3MsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gU3Rha2luZyBhdXRob3JpemUgLS0tXG4gIGxldCBzdGFraW5nQXV0aG9yaXplOiBTdGFraW5nQXV0aG9yaXplUGFyYW1zIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGluc3RyIG9mIHBhcnNlZC5pbnN0cnVjdGlvbnNEYXRhKSB7XG4gICAgaWYgKGluc3RyLnR5cGUgPT09ICdTdGFraW5nQXV0aG9yaXplJykge1xuICAgICAgc3Rha2luZ0F1dGhvcml6ZSA9IG1hcFN0YWtpbmdBdXRob3JpemUoaW5zdHIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFJlc29sdmUgdG9rZW4gbmFtZXMgYW5kIGNvbnZlcnQgYmlnaW50IHRvIHN0cmluZyBhdCBzZXJpYWxpemF0aW9uIGJvdW5kYXJ5IC0tLVxuICBjb25zdCByZXNvbHZlZE91dHB1dHMgPSBvdXRwdXRzLm1hcCgobykgPT4gKHtcbiAgICBhZGRyZXNzOiBvLmFkZHJlc3MsXG4gICAgYW1vdW50OiBTdHJpbmcoby5hbW91bnQpLFxuICAgIC4uLihvLnRva2VuTmFtZSA/IHsgdG9rZW5OYW1lOiBmaW5kVG9rZW5OYW1lKG8udG9rZW5OYW1lLCB1bmRlZmluZWQsIHRydWUpIH0gOiB7fSksXG4gIH0pKTtcblxuICBjb25zdCByZXNvbHZlZElucHV0cyA9IGlucHV0cy5tYXAoKGkpID0+ICh7XG4gICAgYWRkcmVzczogaS5hZGRyZXNzLFxuICAgIHZhbHVlOiBTdHJpbmcoaS52YWx1ZSksXG4gIH0pKTtcblxuICByZXR1cm4ge1xuICAgIGRpc3BsYXlPcmRlcjogW1xuICAgICAgJ2lkJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdibG9ja2hhc2gnLFxuICAgICAgJ2R1cmFibGVOb25jZScsXG4gICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICdjaGFuZ2VBbW91bnQnLFxuICAgICAgJ291dHB1dHMnLFxuICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgJ3Rva2VuRW5hYmxlbWVudHMnLFxuICAgICAgJ2ZlZScsXG4gICAgICAnbWVtbycsXG4gICAgXSxcbiAgICBpZDogaWQgPz8gVU5BVkFJTEFCTEVfVEVYVCxcbiAgICAvLyBXQVNNIHJldHVybnMgXCJTdGFraW5nQXV0aG9yaXplXCIgYnV0IEJpdEdvSlMgdXNlcyBcIlN0YWtpbmdBdXRob3JpemVSYXdcIlxuICAgIC8vIHdoZW4gZGVzZXJpYWxpemluZyBmcm9tIGJ5dGVzICh0aGUgbm9uLXJhdyB0eXBlIG9ubHkgZXhpc3RzIGR1cmluZyBidWlsZGluZykuXG4gICAgdHlwZTogdHhUeXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0F1dGhvcml6ZSA/ICdTdGFraW5nQXV0aG9yaXplUmF3JyA6IHR4VHlwZSxcbiAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICBvdXRwdXRBbW91bnQ6IFN0cmluZyhvdXRwdXRBbW91bnQpLFxuICAgIG91dHB1dHM6IHJlc29sdmVkT3V0cHV0cyxcbiAgICBpbnB1dHM6IHJlc29sdmVkSW5wdXRzLFxuICAgIGZlZVBheWVyOiBwYXJzZWQuZmVlUGF5ZXIsXG4gICAgZmVlOiB7XG4gICAgICBmZWU6IHBhcmFtcy5mZWVJbmZvID8gU3RyaW5nKGZlZSkgOiAnMCcsXG4gICAgICBmZWVSYXRlOiBwYXJhbXMuZmVlSW5mbyA/IE51bWJlcihwYXJhbXMuZmVlSW5mby5mZWUpIDogdW5kZWZpbmVkLFxuICAgIH0sXG4gICAgbWVtbyxcbiAgICBibG9ja2hhc2g6IHBhcnNlZC5ub25jZSxcbiAgICBkdXJhYmxlTm9uY2U6IHBhcnNlZC5kdXJhYmxlTm9uY2UsXG4gICAgdG9rZW5FbmFibGVtZW50cyxcbiAgICBhdGFPd25lck1hcCxcbiAgICAuLi4oc3Rha2luZ0F1dGhvcml6ZSA/IHsgc3Rha2luZ0F1dGhvcml6ZSB9IDoge30pLFxuICB9O1xufVxuIl19
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uV2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZXhwbGFpblRyYW5zYWN0aW9uV2FzbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXNPQSxzREFvSkM7QUF6WEQsb0RBQW1IO0FBQ25ILDJDQU1xQjtBQUVyQix5RUFBMkQ7QUFDM0QsZ0RBQXdCO0FBU3hCLGdGQUFnRjtBQUNoRiwwRUFBMEU7QUFDMUUsZ0ZBQWdGO0FBRWhGLElBQUssZUFXSjtBQVhELFdBQUssZUFBZTtJQUNsQixnQ0FBYSxDQUFBO0lBQ2Isc0RBQW1DLENBQUE7SUFDbkMsMERBQXVDLENBQUE7SUFDdkMsc0RBQW1DLENBQUE7SUFDbkMsd0RBQXFDLENBQUE7SUFDckMsc0RBQW1DLENBQUE7SUFDbkMsZ0VBQTZDLENBQUE7SUFDN0MsZ0dBQTZFLENBQUE7SUFDN0Usd0NBQXFCLENBQUE7SUFDckIsZ0VBQTZDLENBQUE7QUFDL0MsQ0FBQyxFQVhJLGVBQWUsS0FBZixlQUFlLFFBV25CO0FBMkJELFNBQVMscUJBQXFCLENBQUMsWUFBaUM7SUFDOUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDckUsT0FBTztnQkFDTCxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMs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Q1gsY0FBYztZQUNkLGNBQWM7WUFDZCxjQUFjO1lBQ2QsU0FBUztZQUNULGVBQWU7WUFDZixrQkFBa0I7WUFDbEIsS0FBSztZQUNMLE1BQU07U0FDUDtRQUNELEVBQUUsRUFBRSxFQUFFLElBQUksNEJBQWdCO1FBQzFCLHlFQUF5RTtRQUN6RSxnRkFBZ0Y7UUFDaEYsSUFBSSxFQUFFLE1BQU0sS0FBSyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ2xGLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLFlBQVksRUFBRSxHQUFHO1FBQ2pCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ2xDLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixHQUFHLEVBQUU7WUFDSCxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO1lBQ3ZDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNqRTtRQUNELElBQUk7UUFDSixTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDdkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLGdCQUFnQjtRQUNoQixXQUFXO1FBQ1gsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNsRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUb2tlbkVuYWJsZW1lbnQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgcGFyc2VUcmFuc2FjdGlvbiwgdHlwZSBQYXJzZWRUcmFuc2FjdGlvbiwgdHlwZSBJbnN0cnVjdGlvblBhcmFtcyB9IGZyb20gJ0BiaXRnby93YXNtLXNvbGFuYSc7XG5pbXBvcnQge1xuICBVTkFWQUlMQUJMRV9URVhULFxuICBaS19FTEdBTUFMX1BST09GX1BST0dSQU1fSUQsXG4gIENUX0VYVF9ESVNDUklNSU5BVE9SLFxuICBDVF9TVUJfRElTQ1JJTUlOQVRPUlMsXG4gIFRPS0VOX0FDTF9QUk9HUkFNX0lELFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTdGFraW5nQXV0aG9yaXplUGFyYW1zLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIFNvbExpYlRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGZpbmRUb2tlbk5hbWUgfSBmcm9tICcuL2luc3RydWN0aW9uUGFyYW1zRmFjdG9yeSc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25XYXNtT3B0aW9ucyB7XG4gIHR4QmFzZTY0OiBzdHJpbmc7XG4gIGZlZUluZm8/OiB7IGZlZTogc3RyaW5nIH07XG4gIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ/OiBzdHJpbmc7XG4gIGNvaW5OYW1lOiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUcmFuc2FjdGlvbiB0eXBlIGRlcml2YXRpb24gKHBvcnRlZCBmcm9tIEBiaXRnby93YXNtLXNvbGFuYSBleHBsYWluLnRzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZW51bSBUcmFuc2FjdGlvblR5cGUge1xuICBTZW5kID0gJ1NlbmQnLFxuICBTdGFraW5nQWN0aXZhdGUgPSAnU3Rha2luZ0FjdGl2YXRlJyxcbiAgU3Rha2luZ0RlYWN0aXZhdGUgPSAnU3Rha2luZ0RlYWN0aXZhdGUnLFxuICBTdGFraW5nV2l0aGRyYXcgPSAnU3Rha2luZ1dpdGhkcmF3JyxcbiAgU3Rha2luZ0F1dGhvcml6ZSA9ICdTdGFraW5nQXV0aG9yaXplJyxcbiAgU3Rha2luZ0RlbGVnYXRlID0gJ1N0YWtpbmdEZWxlZ2F0ZScsXG4gIFdhbGxldEluaXRpYWxpemF0aW9uID0gJ1dhbGxldEluaXRpYWxpemF0aW9uJyxcbiAgQXNzb2NpYXRlZFRva2VuQWNjb3VudEluaXRpYWxpemF0aW9uID0gJ0Fzc29jaWF0ZWRUb2tlbkFjY291bnRJbml0aWFsaXphdGlvbicsXG4gIEN1c3RvbVR4ID0gJ0N1c3RvbVR4JyxcbiAgQ29uZmlkZW50aWFsVHJhbnNmZXIgPSAnQ29uZmlkZW50aWFsVHJhbnNmZXInLFxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29tYmluZWQgaW5zdHJ1Y3Rpb24gcGF0dGVybiBkZXRlY3Rpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFNvbGFuYSBuYXRpdmUgc3Rha2luZyByZXF1aXJlcyAzIHNlcGFyYXRlIGluc3RydWN0aW9uczpcbi8vICAgQ3JlYXRlQWNjb3VudCAoZnVuZCkgKyBTdGFrZUluaXRpYWxpemUgKHNldCBhdXRob3JpdGllcykgKyBEZWxlZ2F0ZVN0YWtlIChwaWNrIHZhbGlkYXRvcilcbi8vIE1hcmluYWRlIHN0YWtpbmcgdXNlcyBvbmx5IENyZWF0ZUFjY291bnQgKyBTdGFrZUluaXRpYWxpemUgKG5vIERlbGVnYXRlKS5cbi8vIFdhbGxldCBpbml0IHVzZXMgQ3JlYXRlQWNjb3VudCArIE5vbmNlSW5pdGlhbGl6ZS5cblxuaW50ZXJmYWNlIENvbWJpbmVkU3Rha2VBY3RpdmF0ZSB7XG4gIGtpbmQ6ICdTdGFraW5nQWN0aXZhdGUnO1xuICBmcm9tQWRkcmVzczogc3RyaW5nO1xuICBzdGFraW5nQWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IGJpZ2ludDtcbn1cblxuaW50ZXJmYWNlIENvbWJpbmVkV2FsbGV0SW5pdCB7XG4gIGtpbmQ6ICdXYWxsZXRJbml0aWFsaXphdGlvbic7XG4gIGZyb21BZGRyZXNzOiBzdHJpbmc7XG4gIG5vbmNlQWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IGJpZ2ludDtcbn1cblxudHlwZSBDb21iaW5lZFBhdHRlcm4gPSBDb21iaW5lZFN0YWtlQWN0aXZhdGUgfCBDb21iaW5lZFdhbGxldEluaXQ7XG5cbmZ1bmN0aW9uIGRldGVjdENvbWJpbmVkUGF0dGVybihpbnN0cnVjdGlvbnM6IEluc3RydWN0aW9uUGFyYW1zW10pOiBDb21iaW5lZFBhdHRlcm4gfCBudWxsIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgY3VyciA9IGluc3RydWN0aW9uc1tpXTtcbiAgICBjb25zdCBuZXh0ID0gaW5zdHJ1Y3Rpb25zW2kgKyAxXTtcblxuICAgIGlmIChjdXJyLnR5cGUgPT09ICdDcmVhdGVBY2NvdW50JyAmJiBuZXh0LnR5cGUgPT09ICdTdGFrZUluaXRpYWxpemUnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnU3Rha2luZ0FjdGl2YXRlJyxcbiAgICAgICAgZnJvbUFkZHJlc3M6IGN1cnIuZnJvbUFkZHJlc3MsXG4gICAgICAgIHN0YWtpbmdBZGRyZXNzOiBjdXJyLm5ld0FkZHJlc3MsXG4gICAgICAgIGFtb3VudDogY3Vyci5hbW91bnQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjdXJyLnR5cGUgPT09ICdDcmVhdGVBY2NvdW50JyAmJiBuZXh0LnR5cGUgPT09ICdOb25jZUluaXRpYWxpemUnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnV2FsbGV0SW5pdGlhbGl6YXRpb24nLFxuICAgICAgICBmcm9tQWRkcmVzczogY3Vyci5mcm9tQWRkcmVzcyxcbiAgICAgICAgbm9uY2VBZGRyZXNzOiBjdXJyLm5ld0FkZHJlc3MsXG4gICAgICAgIGFtb3VudDogY3Vyci5hbW91bnQsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHJhbnNhY3Rpb24gdHlwZSBkZXJpdmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBCT0lMRVJQTEFURV9UWVBFUyA9IG5ldyBTZXQoWydOb25jZUFkdmFuY2UnLCAnTWVtbycsICdTZXRDb21wdXRlVW5pdExpbWl0JywgJ1NldFByaW9yaXR5RmVlJ10pO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhIFdBU00tcGFyc2VkIFVua25vd24gaW5zdHJ1Y3Rpb24gaXMgYSBjb25maWRlbnRpYWwgdHJhbnNmZXIgaW5zdHJ1Y3Rpb25cbiAqIChUb2tlbi0yMDIyIENUIGV4dGVuc2lvbiBvciB6ay1lbGdhbWFsLXByb29mIHByb2dyYW0pLlxuICpcbiAqIENUIGV4dGVuc2lvbjogYnl0ZSAwID0gQ1RfRVhUX0RJU0NSSU1JTkFUT1IsIGJ5dGUgMSDiiIggQ1RfU1VCX0RJU0NSSU1JTkFUT1JTXG4gKiB6ay1lbGdhbWFsLXByb29mOiBhbnkgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgemstZWxnYW1hbC1wcm9vZiBwcm9ncmFtXG4gKi9cbmZ1bmN0aW9uIGlzV2FzbUNvbmZpZGVudGlhbFRyYW5zZmVySW5zdHJ1Y3Rpb24oaW5zdHI6IEluc3RydWN0aW9uUGFyYW1zKTogYm9vbGVhbiB7XG4gIGlmIChpbnN0ci50eXBlICE9PSAnVW5rbm93bicpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvZ3JhbUlkID0gaW5zdHIucHJvZ3JhbUlkO1xuICAvLyB6ay1lbGdhbWFsLXByb29mIHByb2dyYW0gaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgQ1QgcHJvb2YgdmVyaWZpY2F0aW9uc1xuICBpZiAocHJvZ3JhbUlkID09PSBaS19FTEdBTUFMX1BST09GX1BST0dSQU1fSUQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBUb2tlbi0yMDIyIENUIGV4dGVuc2lvbjogYnl0ZSAwID0gQ1RfRVhUX0RJU0NSSU1JTkFUT1IsIGJ5dGUgMSDiiIggQ1RfU1VCX0RJU0NSSU1JTkFUT1JTXG4gIGNvbnN0IFRPS0VOXzIwMjJfUFJPR1JBTV9JRCA9ICdUb2tlbnpRZEJOYkxxUDVWRWhka0FTNkVQRkxDMVBIbkJxQ1hFcFB4dUViJztcbiAgaWYgKHByb2dyYW1JZCA9PT0gVE9LRU5fMjAyMl9QUk9HUkFNX0lEKSB7XG4gICAgY29uc3QgZGF0YUJ5dGVzID0gYnM1OC5kZWNvZGUoaW5zdHIuZGF0YSk7XG4gICAgaWYgKGRhdGFCeXRlcy5sZW5ndGggPj0gMikge1xuICAgICAgcmV0dXJuIGRhdGFCeXRlc1swXSA9PT0gQ1RfRVhUX0RJU0NSSU1JTkFUT1IgJiYgQ1RfU1VCX0RJU0NSSU1JTkFUT1JTLmhhcyhkYXRhQnl0ZXNbMV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgV0FTTS1wYXJzZWQgVW5rbm93biBpbnN0cnVjdGlvbiBpcyBhIFRva2VuIEFDTCBwZXJtaXNzaW9ubGVzc1xuICogdGhhdyBpbnN0cnVjdGlvbiAoc1JGQy0zNyBUb2tlbiBBQ0wgcHJvZ3JhbSkuXG4gKlxuICogVGhlIHdhc20gcGFyc2VyIGRvZXMgbm90IGtub3cgdGhlIFRva2VuIEFDTCBwcm9ncmFtLCBzbyBUaGF3UGVybWlzc2lvbmxlc3NJZGVtcG90ZW50XG4gKiBpbnN0cnVjdGlvbnMgcGFyc2UgYXMgVW5rbm93bi4gTWlycm9ycyB0aGUgSlMtc2lkZSBgZ2V0SW5zdHJ1Y3Rpb25UeXBlYCBjYXNlIGZvclxuICogVE9LRU5fQUNMX1BST0dSQU1fSUQgaW4gbGliL3V0aWxzLnRzLlxuICovXG5mdW5jdGlvbiBpc1dhc21Ub2tlbkFjbFRoYXdJbnN0cnVjdGlvbihpbnN0cjogSW5zdHJ1Y3Rpb25QYXJhbXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIGluc3RyLnR5cGUgPT09ICdVbmtub3duJyAmJiBpbnN0ci5wcm9ncmFtSWQgPT09IFRPS0VOX0FDTF9QUk9HUkFNX0lEO1xufVxuXG5mdW5jdGlvbiBkZXJpdmVUcmFuc2FjdGlvblR5cGUoXG4gIGluc3RydWN0aW9uczogSW5zdHJ1Y3Rpb25QYXJhbXNbXSxcbiAgY29tYmluZWQ6IENvbWJpbmVkUGF0dGVybiB8IG51bGwsXG4gIG1lbW86IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgaWYgKGNvbWJpbmVkKSByZXR1cm4gVHJhbnNhY3Rpb25UeXBlW2NvbWJpbmVkLmtpbmRdO1xuXG4gIC8vIE1hcmluYWRlIGRlYWN0aXZhdGU6IFRyYW5zZmVyICsgbWVtbyBjb250YWluaW5nIFwiUHJlcGFyZUZvclJldm9rZVwiXG4gIGlmIChtZW1vPy5pbmNsdWRlcygnUHJlcGFyZUZvclJldm9rZScpKSByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuXG4gIC8vIEppdG8gcG9vbCBvcGVyYXRpb25zXG4gIGlmIChpbnN0cnVjdGlvbnMuc29tZSgoaSkgPT4gaS50eXBlID09PSAnU3Rha2VQb29sRGVwb3NpdFNvbCcpKSByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTtcbiAgaWYgKGluc3RydWN0aW9ucy5zb21lKChpKSA9PiBpLnR5cGUgPT09ICdTdGFrZVBvb2xXaXRoZHJhd1N0YWtlJykpIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU7XG5cbiAgLy8gQVRBLW9ubHkgdHJhbnNhY3Rpb25zIChpZ25vcmluZyBib2lsZXJwbGF0ZSBhbmQgVG9rZW4gQUNMIHBlcm1pc3Npb25sZXNzIHRoYXcpXG4gIGNvbnN0IG1lYW5pbmdmdWwgPSBpbnN0cnVjdGlvbnMuZmlsdGVyKChpKSA9PiAhQk9JTEVSUExBVEVfVFlQRVMuaGFzKGkudHlwZSkgJiYgIWlzV2FzbVRva2VuQWNsVGhhd0luc3RydWN0aW9uKGkpKTtcbiAgaWYgKG1lYW5pbmdmdWwubGVuZ3RoID4gMCAmJiBtZWFuaW5nZnVsLmV2ZXJ5KChpKSA9PiBpLnR5cGUgPT09ICdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50JykpIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFzc29jaWF0ZWRUb2tlbkFjY291bnRJbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIC8vIERpcmVjdCBzdGFraW5nIGluc3RydWN0aW9uIG1hcHBpbmdcbiAgY29uc3Qgc3Rha2luZyA9IGluc3RydWN0aW9ucy5maW5kKChpKSA9PiBpLnR5cGUgaW4gVHJhbnNhY3Rpb25UeXBlKTtcbiAgaWYgKHN0YWtpbmcpIHJldHVybiBUcmFuc2FjdGlvblR5cGVbc3Rha2luZy50eXBlIGFzIGtleW9mIHR5cGVvZiBUcmFuc2FjdGlvblR5cGVdO1xuXG4gIC8vIFVua25vd24gaW5zdHJ1Y3Rpb25zIGluZGljYXRlIGEgY3VzdG9tL3VucmVjb2duaXplZCB0cmFuc2FjdGlvblxuICBpZiAoaW5zdHJ1Y3Rpb25zLnNvbWUoKGkpID0+IGkudHlwZSA9PT0gJ1Vua25vd24nICYmIGlzV2FzbUNvbmZpZGVudGlhbFRyYW5zZmVySW5zdHJ1Y3Rpb24oaSkpKSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5Db25maWRlbnRpYWxUcmFuc2ZlcjtcbiAgfVxuICBpZiAoaW5zdHJ1Y3Rpb25zLnNvbWUoKGkpID0+IGkudHlwZSA9PT0gJ1Vua25vd24nICYmICFpc1dhc21Ub2tlbkFjbFRoYXdJbnN0cnVjdGlvbihpKSkpXG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeDtcblxuICAvLyBTZW5kIHJlcXVpcmVzIGFuIGV4cGxpY2l0IFRyYW5zZmVyIG9yIFRva2VuVHJhbnNmZXIgaW5zdHJ1Y3Rpb24uXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBhIGN1c3RvbS91bnJlY29nbml6ZWQgdHJhbnNhY3Rpb24uXG4gIGlmIChpbnN0cnVjdGlvbnMuc29tZSgoaSkgPT4gaS50eXBlID09PSAnVHJhbnNmZXInIHx8IGkudHlwZSA9PT0gJ1Rva2VuVHJhbnNmZXInKSkgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuXG4gIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHg7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUcmFuc2FjdGlvbiBJRCBleHRyYWN0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBCYXNlNTggZW5jb2Rpbmcgb2YgNjQgemVybyBieXRlcyAodW5zaWduZWQgdHJhbnNhY3Rpb25zIGhhdmUgYWxsLXplcm8gc2lnbmF0dXJlcylcbmNvbnN0IEFMTF9aRVJPU19CQVNFNTggPSAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc7XG5cbmZ1bmN0aW9uIGV4dHJhY3RUcmFuc2FjdGlvbklkKHNpZ25hdHVyZXM6IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2lnID0gc2lnbmF0dXJlc1swXTtcbiAgaWYgKCFzaWcgfHwgc2lnID09PSBBTExfWkVST1NfQkFTRTU4KSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gc2lnO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3Rha2luZyBhdXRob3JpemUgbWFwcGluZ1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBNYXAgV0FTTSBTdGFraW5nQXV0aG9yaXplIGluc3RydWN0aW9uIHRvIHRoZSBsZWdhY3kgQml0R29KUyBzaGFwZS5cbiAqIEJpdEdvSlMgdXNlcyBkaWZmZXJlbnQgZmllbGQgbmFtZXMgZm9yIFN0YWtlciB2cyBXaXRoZHJhd2VyIGF1dGhvcml0eSBjaGFuZ2VzLlxuICovXG5mdW5jdGlvbiBtYXBTdGFraW5nQXV0aG9yaXplKGluc3RyOiB7XG4gIHN0YWtpbmdBZGRyZXNzOiBzdHJpbmc7XG4gIG9sZEF1dGhvcml6ZUFkZHJlc3M6IHN0cmluZztcbiAgbmV3QXV0aG9yaXplQWRkcmVzczogc3RyaW5nO1xuICBhdXRob3JpemVUeXBlOiAnU3Rha2VyJyB8ICdXaXRoZHJhd2VyJztcbiAgY3VzdG9kaWFuQWRkcmVzcz86IHN0cmluZztcbn0pOiBTdGFraW5nQXV0aG9yaXplUGFyYW1zIHtcbiAgaWYgKGluc3RyLmF1dGhvcml6ZVR5cGUgPT09ICdXaXRoZHJhd2VyJykge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFraW5nQWRkcmVzczogaW5zdHIuc3Rha2luZ0FkZHJlc3MsXG4gICAgICBvbGRXaXRoZHJhd0FkZHJlc3M6IGluc3RyLm9sZEF1dGhvcml6ZUFkZHJlc3MsXG4gICAgICBuZXdXaXRoZHJhd0FkZHJlc3M6IGluc3RyLm5ld0F1dGhvcml6ZUFkZHJlc3MsXG4gICAgICBjdXN0b2RpYW5BZGRyZXNzOiBpbnN0ci5jdXN0b2RpYW5BZGRyZXNzLFxuICAgIH07XG4gIH1cbiAgLy8gU3Rha2VyIGF1dGhvcml0eSBjaGFuZ2VcbiAgcmV0dXJuIHtcbiAgICBzdGFraW5nQWRkcmVzczogaW5zdHIuc3Rha2luZ0FkZHJlc3MsXG4gICAgb2xkV2l0aGRyYXdBZGRyZXNzOiAnJyxcbiAgICBuZXdXaXRoZHJhd0FkZHJlc3M6ICcnLFxuICAgIG9sZFN0YWtpbmdBdXRob3JpdHlBZGRyZXNzOiBpbnN0ci5vbGRBdXRob3JpemVBZGRyZXNzLFxuICAgIG5ld1N0YWtpbmdBdXRob3JpdHlBZGRyZXNzOiBpbnN0ci5uZXdBdXRob3JpemVBZGRyZXNzLFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWFpbiBleHBsYWluIGZ1bmN0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFN0YW5kYWxvbmUgV0FTTS1iYXNlZCB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbi5cbiAqXG4gKiBQYXJzZXMgdGhlIHRyYW5zYWN0aW9uIHZpYSBgcGFyc2VUcmFuc2FjdGlvbih0eClgIGZyb20gQGJpdGdvL3dhc20tc29sYW5hLFxuICogdGhlbiBkZXJpdmVzIHRoZSB0cmFuc2FjdGlvbiB0eXBlLCBleHRyYWN0cyBvdXRwdXRzL2lucHV0cywgY29tcHV0ZXMgZmVlcyxcbiAqIGFuZCBtYXBzIHRvIEJpdEdvSlMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBmb3JtYXQuXG4gKlxuICogVGhlIGV4cGxhaW4gbG9naWMgd2FzIHBvcnRlZCBmcm9tIHdhc20tc29sYW5hIHBlciB0aGUgY29udmVudGlvbiB0aGF0XG4gKiBgZXhwbGFpblRyYW5zYWN0aW9uYCBiZWxvbmdzIGluIEJpdEdvSlMsIG5vdCBpbiB3YXNtLSogcGFja2FnZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBsYWluU29sVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25XYXNtT3B0aW9ucyk6IFNvbExpYlRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBjb25zdCB0eEJ5dGVzID0gQnVmZmVyLmZyb20ocGFyYW1zLnR4QmFzZTY0LCAnYmFzZTY0Jyk7XG4gIGNvbnN0IHR4ID0gVHJhbnNhY3Rpb24uZnJvbUJ5dGVzKHR4Qnl0ZXMpO1xuICBjb25zdCBwYXJzZWQ6IFBhcnNlZFRyYW5zYWN0aW9uID0gcGFyc2VUcmFuc2FjdGlvbih0eCk7XG5cbiAgLy8gLS0tIFRyYW5zYWN0aW9uIElEIC0tLVxuICBjb25zdCBpZCA9IGV4dHJhY3RUcmFuc2FjdGlvbklkKHBhcnNlZC5zaWduYXR1cmVzKTtcblxuICAvLyAtLS0gRmVlIGNhbGN1bGF0aW9uIC0tLVxuICBjb25zdCBsYW1wb3J0c1BlclNpZ25hdHVyZSA9IHBhcmFtcy5mZWVJbmZvID8gQmlnSW50KHBhcmFtcy5mZWVJbmZvLmZlZSkgOiAwbjtcbiAgbGV0IGZlZSA9IEJpZ0ludChwYXJzZWQubnVtU2lnbmF0dXJlcykgKiBsYW1wb3J0c1BlclNpZ25hdHVyZTtcblxuICAvLyBFYWNoIENyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQgY3JlYXRlcyBhIG5ldyB0b2tlbiBhY2NvdW50IHJlcXVpcmluZyBhIHJlbnQgZGVwb3NpdC5cbiAgY29uc3QgYXRhQ291bnQgPSBwYXJzZWQuaW5zdHJ1Y3Rpb25zRGF0YS5maWx0ZXIoKGkpID0+IGkudHlwZSA9PT0gJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKS5sZW5ndGg7XG4gIGlmIChhdGFDb3VudCA+IDAgJiYgcGFyYW1zLnRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQpIHtcbiAgICBmZWUgKz0gQmlnSW50KGF0YUNvdW50KSAqIEJpZ0ludChwYXJhbXMudG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCk7XG4gIH1cblxuICAvLyAtLS0gRXh0cmFjdCBtZW1vIChuZWVkZWQgYmVmb3JlIHR5cGUgZGVyaXZhdGlvbikgLS0tXG4gIGxldCBtZW1vOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgaW5zdHIgb2YgcGFyc2VkLmluc3RydWN0aW9uc0RhdGEpIHtcbiAgICBpZiAoaW5zdHIudHlwZSA9PT0gJ01lbW8nKSB7XG4gICAgICBtZW1vID0gaW5zdHIubWVtbztcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gRGV0ZWN0IGNvbWJpbmVkIHBhdHRlcm5zIGFuZCBkZXJpdmUgdHlwZSAtLS1cbiAgY29uc3QgY29tYmluZWQgPSBkZXRlY3RDb21iaW5lZFBhdHRlcm4ocGFyc2VkLmluc3RydWN0aW9uc0RhdGEpO1xuICBjb25zdCB0eFR5cGUgPSBkZXJpdmVUcmFuc2FjdGlvblR5cGUocGFyc2VkLmluc3RydWN0aW9uc0RhdGEsIGNvbWJpbmVkLCBtZW1vKTtcblxuICAvLyBNYXJpbmFkZSBkZWFjdGl2YXRlOiBUcmFuc2ZlciArIFByZXBhcmVGb3JSZXZva2UgbWVtby5cbiAgLy8gVGhlIFRyYW5zZmVyIGlzIGEgY29udHJhY3QgaW50ZXJhY3Rpb24sIG5vdCByZWFsIHZhbHVlIHRyYW5zZmVyIOKAlCBza2lwIGZyb20gb3V0cHV0cy5cbiAgY29uc3QgaXNNYXJpbmFkZURlYWN0aXZhdGUgPVxuICAgIHR4VHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlICYmIG1lbW8gIT09IHVuZGVmaW5lZCAmJiBtZW1vLmluY2x1ZGVzKCdQcmVwYXJlRm9yUmV2b2tlJyk7XG5cbiAgLy8gLS0tIEV4dHJhY3Qgb3V0cHV0cyBhbmQgaW5wdXRzIC0tLVxuICBjb25zdCBvdXRwdXRzOiB7IGFkZHJlc3M6IHN0cmluZzsgYW1vdW50OiBiaWdpbnQ7IHRva2VuTmFtZT86IHN0cmluZyB9W10gPSBbXTtcbiAgY29uc3QgaW5wdXRzOiB7IGFkZHJlc3M6IHN0cmluZzsgdmFsdWU6IGJpZ2ludCB9W10gPSBbXTtcblxuICBpZiAoY29tYmluZWQ/LmtpbmQgPT09ICdTdGFraW5nQWN0aXZhdGUnKSB7XG4gICAgb3V0cHV0cy5wdXNoKHsgYWRkcmVzczogY29tYmluZWQuc3Rha2luZ0FkZHJlc3MsIGFtb3VudDogY29tYmluZWQuYW1vdW50IH0pO1xuICAgIGlucHV0cy5wdXNoKHsgYWRkcmVzczogY29tYmluZWQuZnJvbUFkZHJlc3MsIHZhbHVlOiBjb21iaW5lZC5hbW91bnQgfSk7XG4gIH0gZWxzZSBpZiAoY29tYmluZWQ/LmtpbmQgPT09ICdXYWxsZXRJbml0aWFsaXphdGlvbicpIHtcbiAgICBvdXRwdXRzLnB1c2goeyBhZGRyZXNzOiBjb21iaW5lZC5ub25jZUFkZHJlc3MsIGFtb3VudDogY29tYmluZWQuYW1vdW50IH0pO1xuICAgIGlucHV0cy5wdXNoKHsgYWRkcmVzczogY29tYmluZWQuZnJvbUFkZHJlc3MsIHZhbHVlOiBjb21iaW5lZC5hbW91bnQgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBpbnN0ciBvZiBwYXJzZWQuaW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgc3dpdGNoIChpbnN0ci50eXBlKSB7XG4gICAgICAgIGNhc2UgJ1RyYW5zZmVyJzpcbiAgICAgICAgICBpZiAoaXNNYXJpbmFkZURlYWN0aXZhdGUpIGJyZWFrO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLnRvQWRkcmVzcywgYW1vdW50OiBpbnN0ci5hbW91bnQgfSk7XG4gICAgICAgICAgaW5wdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci5mcm9tQWRkcmVzcywgdmFsdWU6IGluc3RyLmFtb3VudCB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVG9rZW5UcmFuc2Zlcic6XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIudG9BZGRyZXNzLCBhbW91bnQ6IGluc3RyLmFtb3VudCwgdG9rZW5OYW1lOiBpbnN0ci50b2tlbkFkZHJlc3MgfSk7XG4gICAgICAgICAgaW5wdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci5mcm9tQWRkcmVzcywgdmFsdWU6IGluc3RyLmFtb3VudCB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnU3Rha2luZ0FjdGl2YXRlJzpcbiAgICAgICAgICBvdXRwdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci5zdGFraW5nQWRkcmVzcywgYW1vdW50OiBpbnN0ci5hbW91bnQgfSk7XG4gICAgICAgICAgaW5wdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci5mcm9tQWRkcmVzcywgdmFsdWU6IGluc3RyLmFtb3VudCB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnU3Rha2luZ1dpdGhkcmF3JzpcbiAgICAgICAgICAvLyBXaXRoZHJhdzogU09MIGZsb3dzIEZST00gc3Rha2luZyBhZGRyZXNzIFRPIHRoZSByZWNpcGllbnQgKGZyb21BZGRyZXNzKVxuICAgICAgICAgIG91dHB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLmZyb21BZGRyZXNzLCBhbW91bnQ6IGluc3RyLmFtb3VudCB9KTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLnN0YWtpbmdBZGRyZXNzLCB2YWx1ZTogaW5zdHIuYW1vdW50IH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTdGFrZVBvb2xEZXBvc2l0U29sJzpcbiAgICAgICAgICAvLyBKaXRvIGxpcXVpZCBzdGFraW5nIGRlcG9zaXRcbiAgICAgICAgICBvdXRwdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci5zdGFrZVBvb2wsIGFtb3VudDogaW5zdHIubGFtcG9ydHMgfSk7XG4gICAgICAgICAgaW5wdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci5mdW5kaW5nQWNjb3VudCwgdmFsdWU6IGluc3RyLmxhbXBvcnRzIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBPdXRwdXQgYW1vdW50IChuYXRpdmUgU09MIG9ubHksIG5vdCB0b2tlbiBhbW91bnRzKSAtLS1cbiAgY29uc3Qgb3V0cHV0QW1vdW50ID0gb3V0cHV0cy5maWx0ZXIoKG8pID0+ICFvLnRva2VuTmFtZSkucmVkdWNlKChzdW0sIG8pID0+IHN1bSArIG8uYW1vdW50LCAwbik7XG5cbiAgLy8gLS0tIEFUQSBvd25lciBtYXBwaW5nIGFuZCB0b2tlbiBlbmFibGVtZW50cyAtLS1cbiAgY29uc3QgYXRhT3duZXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgY29uc3QgdG9rZW5FbmFibGVtZW50czogSVRva2VuRW5hYmxlbWVudFtdID0gW107XG4gIGZvciAoY29uc3QgaW5zdHIgb2YgcGFyc2VkLmluc3RydWN0aW9uc0RhdGEpIHtcbiAgICBpZiAoaW5zdHIudHlwZSA9PT0gJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKSB7XG4gICAgICBhdGFPd25lck1hcFtpbnN0ci5hdGFBZGRyZXNzXSA9IGluc3RyLm93bmVyQWRkcmVzcztcbiAgICAgIHRva2VuRW5hYmxlbWVudHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IGluc3RyLmF0YUFkZHJlc3MsXG4gICAgICAgIHRva2VuTmFtZTogZmluZFRva2VuTmFtZShpbnN0ci5taW50QWRkcmVzcywgdW5kZWZpbmVkLCB0cnVlKSxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiBpbnN0ci5taW50QWRkcmVzcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBTdGFraW5nIGF1dGhvcml6ZSAtLS1cbiAgbGV0IHN0YWtpbmdBdXRob3JpemU6IFN0YWtpbmdBdXRob3JpemVQYXJhbXMgfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgaW5zdHIgb2YgcGFyc2VkLmluc3RydWN0aW9uc0RhdGEpIHtcbiAgICBpZiAoaW5zdHIudHlwZSA9PT0gJ1N0YWtpbmdBdXRob3JpemUnKSB7XG4gICAgICBzdGFraW5nQXV0aG9yaXplID0gbWFwU3Rha2luZ0F1dGhvcml6ZShpbnN0cik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gUmVzb2x2ZSB0b2tlbiBuYW1lcyBhbmQgY29udmVydCBiaWdpbnQgdG8gc3RyaW5nIGF0IHNlcmlhbGl6YXRpb24gYm91bmRhcnkgLS0tXG4gIGNvbnN0IHJlc29sdmVkT3V0cHV0cyA9IG91dHB1dHMubWFwKChvKSA9PiAoe1xuICAgIGFkZHJlc3M6IG8uYWRkcmVzcyxcbiAgICBhbW91bnQ6IFN0cmluZyhvLmFtb3VudCksXG4gICAgLi4uKG8udG9rZW5OYW1lID8geyB0b2tlbk5hbWU6IGZpbmRUb2tlbk5hbWUoby50b2tlbk5hbWUsIHVuZGVmaW5lZCwgdHJ1ZSkgfSA6IHt9KSxcbiAgfSkpO1xuXG4gIGNvbnN0IHJlc29sdmVkSW5wdXRzID0gaW5wdXRzLm1hcCgoaSkgPT4gKHtcbiAgICBhZGRyZXNzOiBpLmFkZHJlc3MsXG4gICAgdmFsdWU6IFN0cmluZyhpLnZhbHVlKSxcbiAgfSkpO1xuXG4gIHJldHVybiB7XG4gICAgZGlzcGxheU9yZGVyOiBbXG4gICAgICAnaWQnLFxuICAgICAgJ3R5cGUnLFxuICAgICAgJ2Jsb2NraGFzaCcsXG4gICAgICAnZHVyYWJsZU5vbmNlJyxcbiAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAnb3V0cHV0cycsXG4gICAgICAnY2hhbmdlT3V0cHV0cycsXG4gICAgICAndG9rZW5FbmFibGVtZW50cycsXG4gICAgICAnZmVlJyxcbiAgICAgICdtZW1vJyxcbiAgICBdLFxuICAgIGlkOiBpZCA/PyBVTkFWQUlMQUJMRV9URVhULFxuICAgIC8vIFdBU00gcmV0dXJucyBcIlN0YWtpbmdBdXRob3JpemVcIiBidXQgQml0R29KUyB1c2VzIFwiU3Rha2luZ0F1dGhvcml6ZVJhd1wiXG4gICAgLy8gd2hlbiBkZXNlcmlhbGl6aW5nIGZyb20gYnl0ZXMgKHRoZSBub24tcmF3IHR5cGUgb25seSBleGlzdHMgZHVyaW5nIGJ1aWxkaW5nKS5cbiAgICB0eXBlOiB0eFR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQXV0aG9yaXplID8gJ1N0YWtpbmdBdXRob3JpemVSYXcnIDogdHhUeXBlLFxuICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgIG91dHB1dEFtb3VudDogU3RyaW5nKG91dHB1dEFtb3VudCksXG4gICAgb3V0cHV0czogcmVzb2x2ZWRPdXRwdXRzLFxuICAgIGlucHV0czogcmVzb2x2ZWRJbnB1dHMsXG4gICAgZmVlUGF5ZXI6IHBhcnNlZC5mZWVQYXllcixcbiAgICBmZWU6IHtcbiAgICAgIGZlZTogcGFyYW1zLmZlZUluZm8gPyBTdHJpbmcoZmVlKSA6ICcwJyxcbiAgICAgIGZlZVJhdGU6IHBhcmFtcy5mZWVJbmZvID8gTnVtYmVyKHBhcmFtcy5mZWVJbmZvLmZlZSkgOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgICBtZW1vLFxuICAgIGJsb2NraGFzaDogcGFyc2VkLm5vbmNlLFxuICAgIGR1cmFibGVOb25jZTogcGFyc2VkLmR1cmFibGVOb25jZSxcbiAgICB0b2tlbkVuYWJsZW1lbnRzLFxuICAgIGF0YU93bmVyTWFwLFxuICAgIC4uLihzdGFraW5nQXV0aG9yaXplID8geyBzdGFraW5nQXV0aG9yaXplIH0gOiB7fSksXG4gIH07XG59XG4iXX0=
@@ -21,6 +21,35 @@ describe('explainTransactionWasm', function () {
21
21
  explained.outputs.length.should.equal(0);
22
22
  (typeof explained.memo).should.equal('string');
23
23
  });
24
+ it('should classify token enablement (ATA init + Token ACL permissionless thaw) as AssociatedTokenAccountInitialization', function () {
25
+ // Token-2022 mint (TransferHook + DefaultAccountState frozen, sRFC-37 Token ACL gating with
26
+ // permissionless thaw enabled). The enablement prebuild appends the Token ACL
27
+ // ThawPermissionlessIdempotent instruction (program TACLkU6..., discriminator 9) after the
28
+ // idempotent ATA-init. The wasm parser does not know the Token ACL program, so it parses as
29
+ // Unknown — this previously misclassified the enablement as CustomTx and failed
30
+ // verifyTxType ("Invalid transaction type on token enablement").
31
+ const ATA_INIT_WITH_TOKEN_ACL_THAW_BASE64 = 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAYJUhCF9LHo7KiG7HDDtCQbbIAJG2uinMlIg5Jby7LiGCUk9dBaCEmT0ePnPYh4E/3Lb7jS7cZGyoPKxxPGdAbPtQZ6KIKRB9he5+4YMC6z6SnI4p2UviExxtQ63M7yyNzKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoxrewX5VA2FlHpnxuxejiSESVZI1yzGOHB4uV5TmCPCTxZ+GHLPVbt3R+ul84ehxVAgqM3rmztfFLW8m/o/41jJclj04kifG7PRApFI4NgwtaE5na/xCEBI572Nvp+FkGs3+acPQG6jbTKfWUpRYFlg/y4TcXWy7aAGbKMjprzgbd9uHudY/eGEJdvORszdq2GvxNg7kNJ/69+SjYoYv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBgYAAgAFAwgBAQcGAAIFAAEEAQk=';
32
+ const explained = (0, explainTransactionWasm_1.explainSolTransaction)({
33
+ txBase64: ATA_INIT_WITH_TOKEN_ACL_THAW_BASE64,
34
+ feeInfo: { fee: '5000' },
35
+ coinName: 'tsol',
36
+ });
37
+ explained.type.should.equal('AssociatedTokenAccountInitialization');
38
+ explained.tokenEnablements?.length.should.equal(1);
39
+ explained.tokenEnablements?.[0].tokenName.should.equal('3VDBJWgzRUscjQzzAp52na1dDquExZmD1PkCvH9svGF6');
40
+ });
41
+ it('should classify token transfer with Token ACL permissionless thaw as Send', function () {
42
+ // TokenTransfer (transferChecked, Token-2022) + Token ACL ThawPermissionlessIdempotent for
43
+ // the destination ATA. The Unknown thaw instruction previously triggered the CustomTx
44
+ // fallback before the Send check.
45
+ const TRANSFER_WITH_TOKEN_ACL_THAW_BASE64 = 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQIUhCF9LHo7KiG7HDDtCQbbIAJG2uinMlIg5Jby7LiGCVlN8xCFuLWWqDUa7zdMscRzHJShFmQ4avYUk5r95qhqrMUSZcan5PQzSooMXH6hoZngse42Tou1uN7aFDVDLStBnoogpEH2F7n7hgwLrPpKcjinZS+ITHG1DrczvLI3MooxrewX5VA2FlHpnxuxejiSESVZI1yzGOHB4uV5TmCPCTxZ+GHLPVbt3R+ul84ehxVAgqM3rmztfFLW8m/o/41BrN/mnD0Buo20yn1lKUWBZYP8uE3F1su2gBmyjI6a84G3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcEAwUBAAoMAQAAAAAAAAAJBgYAAQUAAgQBCQ==';
46
+ const explained = (0, explainTransactionWasm_1.explainSolTransaction)({
47
+ txBase64: TRANSFER_WITH_TOKEN_ACL_THAW_BASE64,
48
+ feeInfo: { fee: '5000' },
49
+ coinName: 'tsol',
50
+ });
51
+ explained.type.should.equal('Send');
52
+ });
24
53
  });
25
54
  });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uV2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9leHBsYWluVHJhbnNhY3Rpb25XYXNtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7O0dBRUc7QUFDSCxrQkFBZ0I7QUFDaEIsaUZBQTZFO0FBRTdFLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtJQUNqQyxRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1lBQzdELHlGQUF5RjtZQUN6Riw0REFBNEQ7WUFDNUQsTUFBTSwwQkFBMEIsR0FDOUIsa21CQUFrbUIsQ0FBQztZQUVybUIsTUFBTSxTQUFTLEdBQUcsSUFBQSw4Q0FBcUIsRUFBQztnQkFDdEMsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtnQkFDeEIsUUFBUSxFQUFFLE1BQU07YUFDakIsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RzIGZvciBleHBsYWluVHJhbnNhY3Rpb25XYXNtIChXQVNNLWJhc2VkIFNvbGFuYSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbikuXG4gKi9cbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IGV4cGxhaW5Tb2xUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvZXhwbGFpblRyYW5zYWN0aW9uV2FzbSc7XG5cbmRlc2NyaWJlKCdleHBsYWluVHJhbnNhY3Rpb25XYXNtJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnZGVyaXZlVHJhbnNhY3Rpb25UeXBlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY2xhc3NpZnkgYm9pbGVycGxhdGUtb25seSB0cmFuc2FjdGlvbiBhcyBDdXN0b21UeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRyYW5zYWN0aW9uIHdpdGggb25seSBOb25jZUFkdmFuY2UgKyBNZW1vIGluc3RydWN0aW9ucyAobm8gVHJhbnNmZXIgb3IgVG9rZW5UcmFuc2ZlcikuXG4gICAgICAvLyBQcmV2aW91c2x5IHRoaXMgd291bGQgaW5jb3JyZWN0bHkgZmFsbCB0aHJvdWdoIHRvICdTZW5kJy5cbiAgICAgIGNvbnN0IEJPSUxFUlBMQVRFX09OTFlfVFhfQkFTRTY0ID1cbiAgICAgICAgJ0FnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBREUzYURLOW5tRWNjT21RSjRjclp6UHVUblJWYTN3b0ZTakt6RTJoY3NGYk5rcHZBOExuajdDVmVKKy9VZlh3TEk1ZzIyM0QwMm00K1JFVWZQYzUwUUNBZ0VFQjhPcG9YK1licS9qOHhpODBEaEZ0ajhBVVZIUHJqaEsxRTNEblQ1Qm14MzQ2aVV0WVFLTU1Cb2xJQU82UG1mSmgzdzdodUZjWWNHTk9COHNnWE4zOFdnNlpyV0FOTkpmYjY0cThCMjQycWZSaVQ3ZGZmYjgwSDJPb1hHUTBhcTBsQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJVcFRXcGtwSVFaTkpPaHhZTm80Zkh3MXRkMjhrcnVCNUIrb1FFRUZSSTBHcDlVWEdNZDB5U2hXWTVocEhWNjJpMTY0bzV0TGJWeHpWVnNoQUFBQUFBYW4xUmNaTEZhTzRJcUVYM1BTbDRqUEExd3hSYklhczBUWUJpNnBRQUFBRUhQcXRHWU9qanFWZkhnZzFTMzJNNHFNZTJBUU8va0R5MStDRVlRd2tpc0RBd01DQmdFRUJBQUFBQVFDQUFVSlNHVnNiRzhnUVZCSkJBQW5RVkJKSUVsdWRHVm5jbUYwYVc5dUlIUmxjM1FnWTNWemRHOXRJSFJ5WVc1ellXTjBhVzl1JztcblxuICAgICAgY29uc3QgZXhwbGFpbmVkID0gZXhwbGFpblNvbFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhCYXNlNjQ6IEJPSUxFUlBMQVRFX09OTFlfVFhfQkFTRTY0LFxuICAgICAgICBmZWVJbmZvOiB7IGZlZTogJzUwMDAnIH0sXG4gICAgICAgIGNvaW5OYW1lOiAndHNvbCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwbGFpbmVkLnR5cGUuc2hvdWxkLmVxdWFsKCdDdXN0b21UeCcpO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIGV4cGxhaW5lZC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAodHlwZW9mIGV4cGxhaW5lZC5tZW1vKS5zaG91bGQuZXF1YWwoJ3N0cmluZycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uV2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9leHBsYWluVHJhbnNhY3Rpb25XYXNtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7O0dBRUc7QUFDSCxrQkFBZ0I7QUFDaEIsaUZBQTZFO0FBRTdFLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtJQUNqQyxRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1lBQzdELHlGQUF5RjtZQUN6Riw0REFBNEQ7WUFDNUQsTUFBTSwwQkFBMEIsR0FDOUIsa21CQUFrbUIsQ0FBQztZQUVybUIsTUFBTSxTQUFTLEdBQUcsSUFBQSw4Q0FBcUIsRUFBQztnQkFDdEMsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtnQkFDeEIsUUFBUSxFQUFFLE1BQU07YUFDakIsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxSEFBcUgsRUFBRTtZQUN4SCw0RkFBNEY7WUFDNUYsOEVBQThFO1lBQzlFLDJGQUEyRjtZQUMzRiw0RkFBNEY7WUFDNUYsZ0ZBQWdGO1lBQ2hGLGlFQUFpRTtZQUNqRSxNQUFNLG1DQUFtQyxHQUN2QyxzaUJBQXNpQixDQUFDO1lBRXppQixNQUFNLFNBQVMsR0FBRyxJQUFBLDhDQUFxQixFQUFDO2dCQUN0QyxRQUFRLEVBQUUsbUNBQW1DO2dCQUM3QyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUNwRSxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkQsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUN6RyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRTtZQUM5RSwyRkFBMkY7WUFDM0Ysc0ZBQXNGO1lBQ3RGLGtDQUFrQztZQUNsQyxNQUFNLG1DQUFtQyxHQUN2QyxzZ0JBQXNnQixDQUFDO1lBRXpnQixNQUFNLFNBQVMsR0FBRyxJQUFBLDhDQUFxQixFQUFDO2dCQUN0QyxRQUFRLEVBQUUsbUNBQW1DO2dCQUM3QyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUZXN0cyBmb3IgZXhwbGFpblRyYW5zYWN0aW9uV2FzbSAoV0FTTS1iYXNlZCBTb2xhbmEgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24pLlxuICovXG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBleHBsYWluU29sVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL2V4cGxhaW5UcmFuc2FjdGlvbldhc20nO1xuXG5kZXNjcmliZSgnZXhwbGFpblRyYW5zYWN0aW9uV2FzbScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2Rlcml2ZVRyYW5zYWN0aW9uVHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNsYXNzaWZ5IGJvaWxlcnBsYXRlLW9ubHkgdHJhbnNhY3Rpb24gYXMgQ3VzdG9tVHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUcmFuc2FjdGlvbiB3aXRoIG9ubHkgTm9uY2VBZHZhbmNlICsgTWVtbyBpbnN0cnVjdGlvbnMgKG5vIFRyYW5zZmVyIG9yIFRva2VuVHJhbnNmZXIpLlxuICAgICAgLy8gUHJldmlvdXNseSB0aGlzIHdvdWxkIGluY29ycmVjdGx5IGZhbGwgdGhyb3VnaCB0byAnU2VuZCcuXG4gICAgICBjb25zdCBCT0lMRVJQTEFURV9PTkxZX1RYX0JBU0U2NCA9XG4gICAgICAgICdBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURFM2FESzlubUVjY09tUUo0Y3JaelB1VG5SVmEzd29GU2pLekUyaGNzRmJOa3B2QThMbmo3Q1ZlSisvVWZYd0xJNWcyMjNEMDJtNCtSRVVmUGM1MFFDQWdFRUI4T3BvWCtZYnEvajh4aTgwRGhGdGo4QVVWSFByamhLMUUzRG5UNUJteDM0NmlVdFlRS01NQm9sSUFPNlBtZkpoM3c3aHVGY1ljR05PQjhzZ1hOMzhXZzZacldBTk5KZmI2NHE4QjI0MnFmUmlUN2RmZmI4MEgyT29YR1EwYXEwbEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCVXBUV3BrcElRWk5KT2h4WU5vNGZIdzF0ZDI4a3J1QjVCK29RRUVGUkkwR3A5VVhHTWQweVNoV1k1aHBIVjYyaTE2NG81dExiVnh6VlZzaEFBQUFBQWFuMVJjWkxGYU80SXFFWDNQU2w0alBBMXd4UmJJYXMwVFlCaTZwUUFBQUVIUHF0R1lPampxVmZIZ2cxUzMyTTRxTWUyQVFPL2tEeTErQ0VZUXdraXNEQXdNQ0JnRUVCQUFBQUFRQ0FBVUpTR1ZzYkc4Z1FWQkpCQUFuUVZCSklFbHVkR1ZuY21GMGFXOXVJSFJsYzNRZ1kzVnpkRzl0SUhSeVlXNXpZV04wYVc5dSc7XG5cbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGV4cGxhaW5Tb2xUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4QmFzZTY0OiBCT0lMRVJQTEFURV9PTkxZX1RYX0JBU0U2NCxcbiAgICAgICAgZmVlSW5mbzogeyBmZWU6ICc1MDAwJyB9LFxuICAgICAgICBjb2luTmFtZTogJ3Rzb2wnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGxhaW5lZC50eXBlLnNob3VsZC5lcXVhbCgnQ3VzdG9tVHgnKTtcbiAgICAgIGV4cGxhaW5lZC5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICBleHBsYWluZWQub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgICAgKHR5cGVvZiBleHBsYWluZWQubWVtbykuc2hvdWxkLmVxdWFsKCdzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2xhc3NpZnkgdG9rZW4gZW5hYmxlbWVudCAoQVRBIGluaXQgKyBUb2tlbiBBQ0wgcGVybWlzc2lvbmxlc3MgdGhhdykgYXMgQXNzb2NpYXRlZFRva2VuQWNjb3VudEluaXRpYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVG9rZW4tMjAyMiBtaW50IChUcmFuc2Zlckhvb2sgKyBEZWZhdWx0QWNjb3VudFN0YXRlIGZyb3plbiwgc1JGQy0zNyBUb2tlbiBBQ0wgZ2F0aW5nIHdpdGhcbiAgICAgIC8vIHBlcm1pc3Npb25sZXNzIHRoYXcgZW5hYmxlZCkuIFRoZSBlbmFibGVtZW50IHByZWJ1aWxkIGFwcGVuZHMgdGhlIFRva2VuIEFDTFxuICAgICAgLy8gVGhhd1Blcm1pc3Npb25sZXNzSWRlbXBvdGVudCBpbnN0cnVjdGlvbiAocHJvZ3JhbSBUQUNMa1U2Li4uLCBkaXNjcmltaW5hdG9yIDkpIGFmdGVyIHRoZVxuICAgICAgLy8gaWRlbXBvdGVudCBBVEEtaW5pdC4gVGhlIHdhc20gcGFyc2VyIGRvZXMgbm90IGtub3cgdGhlIFRva2VuIEFDTCBwcm9ncmFtLCBzbyBpdCBwYXJzZXMgYXNcbiAgICAgIC8vIFVua25vd24g4oCUIHRoaXMgcHJldmlvdXNseSBtaXNjbGFzc2lmaWVkIHRoZSBlbmFibGVtZW50IGFzIEN1c3RvbVR4IGFuZCBmYWlsZWRcbiAgICAgIC8vIHZlcmlmeVR4VHlwZSAoXCJJbnZhbGlkIHRyYW5zYWN0aW9uIHR5cGUgb24gdG9rZW4gZW5hYmxlbWVudFwiKS5cbiAgICAgIGNvbnN0IEFUQV9JTklUX1dJVEhfVE9LRU5fQUNMX1RIQVdfQkFTRTY0ID1cbiAgICAgICAgJ0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQVlKVWhDRjlMSG83S2lHN0hERHRDUWJiSUFKRzJ1aW5NbElnNUpieTdMaUdDVWs5ZEJhQ0VtVDBlUG5QWWg0RS8zTGI3alM3Y1pHeW9QS3h4UEdkQWJQdFFaNktJS1JCOWhlNSs0WU1DNno2U25JNHAyVXZpRXh4dFE2M003eXlOektBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBb3hyZXdYNVZBMkZsSHBueHV4ZWppU0VTVlpJMXl6R09IQjR1VjVUbUNQQ1R4WitHSExQVmJ0M1IrdWw4NGVoeFZBZ3FNM3JtenRmRkxXOG0vby80MWpKY2xqMDRraWZHN1BSQXBGSTROZ3d0YUU1bmEveENFQkk1NzJOdnArRmtHczMrYWNQUUc2amJUS2ZXVXBSWUZsZy95NFRjWFd5N2FBR2JLTWpwcnpnYmQ5dUh1ZFkvZUdFSmR2T1JzemRxMkd2eE5nN2tOSi82OStTallvWXY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNCZ1lBQWdBRkF3Z0JBUWNHQUFJRkFBRUVBUWs9JztcblxuICAgICAgY29uc3QgZXhwbGFpbmVkID0gZXhwbGFpblNvbFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhCYXNlNjQ6IEFUQV9JTklUX1dJVEhfVE9LRU5fQUNMX1RIQVdfQkFTRTY0LFxuICAgICAgICBmZWVJbmZvOiB7IGZlZTogJzUwMDAnIH0sXG4gICAgICAgIGNvaW5OYW1lOiAndHNvbCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwbGFpbmVkLnR5cGUuc2hvdWxkLmVxdWFsKCdBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb24nKTtcbiAgICAgIGV4cGxhaW5lZC50b2tlbkVuYWJsZW1lbnRzPy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgZXhwbGFpbmVkLnRva2VuRW5hYmxlbWVudHM/LlswXS50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKCczVkRCSldnelJVc2NqUXp6QXA1Mm5hMWREcXVFeFptRDFQa0N2SDlzdkdGNicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjbGFzc2lmeSB0b2tlbiB0cmFuc2ZlciB3aXRoIFRva2VuIEFDTCBwZXJtaXNzaW9ubGVzcyB0aGF3IGFzIFNlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUb2tlblRyYW5zZmVyICh0cmFuc2ZlckNoZWNrZWQsIFRva2VuLTIwMjIpICsgVG9rZW4gQUNMIFRoYXdQZXJtaXNzaW9ubGVzc0lkZW1wb3RlbnQgZm9yXG4gICAgICAvLyB0aGUgZGVzdGluYXRpb24gQVRBLiBUaGUgVW5rbm93biB0aGF3IGluc3RydWN0aW9uIHByZXZpb3VzbHkgdHJpZ2dlcmVkIHRoZSBDdXN0b21UeFxuICAgICAgLy8gZmFsbGJhY2sgYmVmb3JlIHRoZSBTZW5kIGNoZWNrLlxuICAgICAgY29uc3QgVFJBTlNGRVJfV0lUSF9UT0tFTl9BQ0xfVEhBV19CQVNFNjQgPVxuICAgICAgICAnQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBUUlVaENGOUxIbzdLaUc3SEREdENRYmJJQUpHMnVpbk1sSWc1SmJ5N0xpR0NWbE44eENGdUxXV3FEVWE3emRNc2NSekhKU2hGbVE0YXZZVWs1cjk1cWhxck1VU1pjYW41UFF6U29vTVhINmhvWm5nc2U0MlRvdTF1TjdhRkRWRExTdEJub29ncEVIMkY3bjdoZ3dMclBwS2NqaW5aUytJVEhHMURyY3p2TEkzTW9veHJld1g1VkEyRmxIcG54dXhlamlTRVNWWkkxeXpHT0hCNHVWNVRtQ1BDVHhaK0dITFBWYnQzUit1bDg0ZWh4VkFncU0zcm16dGZGTFc4bS9vLzQxQnJOL21uRDBCdW8yMHluMWxLVVdCWllQOHVFM0Yxc3UyZ0JteWpJNmE4NEczZmJoN25XUDNoaENYYnprYk0zYXRocjhUWU81RFNmK3Zma28yS0dML0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ2NFQXdVQkFBb01BUUFBQUFBQUFBQUpCZ1lBQVFVQUFnUUJDUT09JztcblxuICAgICAgY29uc3QgZXhwbGFpbmVkID0gZXhwbGFpblNvbFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhCYXNlNjQ6IFRSQU5TRkVSX1dJVEhfVE9LRU5fQUNMX1RIQVdfQkFTRTY0LFxuICAgICAgICBmZWVJbmZvOiB7IGZlZTogJzUwMDAnIH0sXG4gICAgICAgIGNvaW5OYW1lOiAndHNvbCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwbGFpbmVkLnR5cGUuc2hvdWxkLmVxdWFsKCdTZW5kJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=