drama-pm-client 0.4.7 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +9 -6
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -456,8 +456,8 @@ export class DramaPmClient {
456
456
  const marketInfo = await this.getMarketInfo(marketPda);
457
457
  // fee recipient address
458
458
  const feeRecipientAddress = feeRecipient || (await this.getGlobalConfigAccount()).feeRecipient;
459
- // fee recipient token account
460
- const feeRecipientToken = getAssociatedTokenAddressSync(marketInfo.bettingToken, feeRecipientAddress);
459
+ // fee recipient token account (allowOwnerOffCurve for multisig/PDA)
460
+ const feeRecipientToken = getAssociatedTokenAddressSync(marketInfo.bettingToken, feeRecipientAddress, true);
461
461
  // Derive vault PDA
462
462
  const vault = PublicKey.findProgramAddressSync([Buffer.from(VAULT_SEED), marketPda.toBuffer()], this.program.programId)[0];
463
463
  return await this.program.methods
@@ -481,7 +481,8 @@ export class DramaPmClient {
481
481
  const marketInfo = await this.getMarketInfo(marketPda);
482
482
  const globalConfigAccount = await this.getGlobalConfigAccount();
483
483
  const feeRecipientAddress = feeRecipient || globalConfigAccount.feeRecipient;
484
- const feeRecipientToken = getAssociatedTokenAddressSync(marketInfo.bettingToken, feeRecipientAddress);
484
+ // allowOwnerOffCurve for multisig/PDA fee recipients
485
+ const feeRecipientToken = getAssociatedTokenAddressSync(marketInfo.bettingToken, feeRecipientAddress, true);
485
486
  const tx = new Transaction();
486
487
  // Check if fee recipient token account exists and create if needed
487
488
  const feeRecipientAtaExists = await this.ataExists(feeRecipientToken);
@@ -509,7 +510,8 @@ export class DramaPmClient {
509
510
  // Get market info to determine betting token
510
511
  const marketInfo = await this.getMarketInfo(market);
511
512
  const feeRecipientAddress = feeRecipient || (await this.getGlobalConfigAccount()).feeRecipient;
512
- const feeRecipientToken = getAssociatedTokenAddressSync(marketInfo.bettingToken, feeRecipientAddress);
513
+ // allowOwnerOffCurve for multisig/PDA fee recipients
514
+ const feeRecipientToken = getAssociatedTokenAddressSync(marketInfo.bettingToken, feeRecipientAddress, true);
513
515
  // Derive vault PDA
514
516
  const vault = PublicKey.findProgramAddressSync([Buffer.from(VAULT_SEED), market.toBuffer()], this.program.programId)[0];
515
517
  return await this.program.methods
@@ -531,7 +533,8 @@ export class DramaPmClient {
531
533
  const marketInfo = await this.getMarketInfo(market);
532
534
  const globalConfigAccount = await this.getGlobalConfigAccount();
533
535
  const feeRecipientAddress = feeRecipient || globalConfigAccount.feeRecipient;
534
- const feeRecipientToken = getAssociatedTokenAddressSync(marketInfo.bettingToken, feeRecipientAddress);
536
+ // allowOwnerOffCurve for multisig/PDA fee recipients
537
+ const feeRecipientToken = getAssociatedTokenAddressSync(marketInfo.bettingToken, feeRecipientAddress, true);
535
538
  const tx = new Transaction();
536
539
  // Check if fee recipient token account exists and create if needed
537
540
  const feeRecipientAtaExists = await this.ataExists(feeRecipientToken);
@@ -680,4 +683,4 @@ export class DramaPmClient {
680
683
  return await getAccount(this.connection, vaultPda);
681
684
  }
682
685
  }
683
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixVQUFVLEVBQ1YsNkJBQTZCLEVBQzdCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDakIsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQUUsT0FBTyxJQUFJLGFBQWEsRUFBRSxjQUFjLEVBQXdCLE1BQU0sbUJBQW1CLENBQUM7QUFFbkcsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRXZCLE9BQU8sRUFFTCxPQUFPLEVBQ1AsU0FBUyxFQUNULGFBQWEsRUFDYixXQUFXLEVBQ1gsc0JBQXNCLEVBQ3ZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsYUFBYSxFQUNkLE1BQU0sWUFBWSxDQUFDO0FBRXBCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLE9BQU8sRUFBVyxHQUFHLEVBQUUsQ0FBQztBQTZEeEIsTUFBTSxPQUFPLGFBQWE7SUFLeEIsWUFBWSxVQUFzQixFQUFFLE1BQWUsRUFBRSxTQUFxQjtRQUN4RSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUU3QiwyQ0FBMkM7UUFDM0MsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFXO1lBQzVCLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxlQUFlLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNqQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHO1lBQ3ZDLEtBQUssRUFBRSxj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QUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQW9CO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQW9CO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVNTT0NJQVRFRF9UT0tFTl9QUk9HUkFNX0lELFxuICBnZXRBY2NvdW50LFxuICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyxcbiAgVE9LRU5fMjAyMl9QUk9HUkFNX0lELFxuICBUT0tFTl9QUk9HUkFNX0lEXG59IGZyb20gXCJAc29sYW5hL3NwbC10b2tlblwiO1xuXG5pbXBvcnQgeyBQcm9ncmFtIGFzIEFuY2hvclByb2dyYW0sIEFuY2hvclByb3ZpZGVyLCBJZGwsIFByb2dyYW0sIFdhbGxldCB9IGZyb20gXCJAY29yYWwteHl6L2FuY2hvclwiO1xuXG5pbXBvcnQgQk4gZnJvbSBcImJuLmpzXCI7XG5cbmltcG9ydCB7XG4gIENvbm5lY3Rpb24sXG4gIEtleXBhaXIsXG4gIFB1YmxpY0tleSxcbiAgU3lzdGVtUHJvZ3JhbSxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25cbn0gZnJvbSBcIkBzb2xhbmEvd2ViMy5qc1wiO1xuaW1wb3J0IHsgSURMIH0gZnJvbSBcIi4vaWRsLmpzXCI7XG5pbXBvcnQgeyBEcmFtYVBtIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7XG4gIGdldEdsb2JhbENvbmZpZ1BkYSxcbiAgZ2V0TWFya2V0UGRhLFxuICBnZXRNYXJrZXRQZGFzLFxuICBnZXRWYXVsdFBkYSxcbiAgTk9fTUlOVF9TRUVELFxuICBWQVVMVF9TRUVELFxuICBZRVNfTUlOVF9TRUVEXG59IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzLmpzXCI7XG5leHBvcnQgeyBEcmFtYVBtLCBJREwgfTtcblxuZXhwb3J0IHR5cGUgT3V0Y29tZSA9IFwiWWVzXCIgfCBcIk5vXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTWFya2V0UGFyYW1zIHtcbiAgYWRtaW46IFB1YmxpY0tleTtcbiAgbWFya2V0SWQ6IG51bWJlciB8IEJOO1xuICB5ZXNQcmljZTogbnVtYmVyIHwgQk47XG4gIG5vUHJpY2U6IG51bWJlciB8IEJOO1xuICBlbmRUaW1lOiBudW1iZXIgfCBCTjtcbiAgYmV0dGluZ1Rva2VuOiBQdWJsaWNLZXk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VCZXRQYXJhbXMge1xuICB1c2VyOiBQdWJsaWNLZXk7XG4gIG1hcmtldDogUHVibGljS2V5OyAvLyBNYXJrZXQgUERBIGFkZHJlc3NcbiAgYW1vdW50OiBudW1iZXIgfCBCTjtcbiAgb3V0Y29tZTogT3V0Y29tZTtcbiAgYmV0dGluZ1Rva2VuOiBQdWJsaWNLZXk7XG4gIGZlZVJlY2lwaWVudD86IFB1YmxpY0tleTsgLy8gRmVlIHJlY2lwaWVudCBhZGRyZXNzIChvcHRpb25hbCwgd2lsbCBmZXRjaCBmcm9tIGNvbmZpZyBpZiBub3QgcHJvdmlkZWQpXG4gIGZlZVJlY2lwaWVudFRva2VuPzogUHVibGljS2V5IHwgbnVsbDsgLy8gRmVlIHJlY2lwaWVudCB0b2tlbiBhY2NvdW50IChvcHRpb25hbCwgdXNlZCBpbnRlcm5hbGx5IGJ5IGJ1aWxkUGxhY2VCZXRUeClcbiAgY3JlYXRlQXRhPzogYm9vbGVhbjsgLy8gV2hldGhlciB0byBjcmVhdGUgQVRBIGluc3RydWN0aW9uIGF1dG9tYXRpY2FsbHlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVGZWVDb25maWdQYXJhbXMge1xuICBhdXRob3JpdHk6IFB1YmxpY0tleTsgLy8gQ2FuIGJlIGF1dGhvcml0eSBvciBhdXRob3JpemVkIGFkbWluXG4gIG5ld0ZlZUJwczogbnVtYmVyOyAvLyBGZWUgaW4gYmFzaXMgcG9pbnRzICgxIGJwcyA9IDAuMDElLCBtYXggMjAwMCA9IDIwJSlcbiAgbmV3RmVlUmVjaXBpZW50OiBQdWJsaWNLZXk7XG4gIG5ld0ZlZUNsYWltQnBzOiBudW1iZXI7IC8vIEZlZSBmb3IgY2xhaW1pbmcgcmV3YXJkcyBpbiBiYXNpcyBwb2ludHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGFpbVJld2FyZHNQYXJhbXMge1xuICB1c2VyOiBQdWJsaWNLZXk7XG4gIG1hcmtldDogUHVibGljS2V5OyAvLyBNYXJrZXQgUERBIGFkZHJlc3NcbiAgYmV0dGluZ1Rva2VuOiBQdWJsaWNLZXk7XG4gIHdpbm5pbmdPdXRjb21lOiBPdXRjb21lO1xuICBzaGFyZXNUb0NsYWltOiBudW1iZXIgfCBCTjsgLy8gQW1vdW50IG9mIHNoYXJlcyB0byBjbGFpbSAoMCA9IGNsYWltIGFsbClcbiAgY2xvc2VBY2NvdW50PzogYm9vbGVhbjsgLy8gV2hldGhlciB0byBjbG9zZSB0aGUgb3V0Y29tZSB0b2tlbiBhY2NvdW50IGFmdGVyIGNsYWltaW5nIGFsbCBzaGFyZXMgKGRlZmF1bHQ6IGZhbHNlKVxuICBmZWVSZWNpcGllbnQ/OiBQdWJsaWNLZXk7IC8vIEZlZSByZWNpcGllbnQgYWRkcmVzcyAob3B0aW9uYWwsIHdpbGwgZmV0Y2ggZnJvbSBjb25maWcgaWYgbm90IHByb3ZpZGVkKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhdGNoQ2xhaW1QYXJhbXMge1xuICB1c2VyOiBQdWJsaWNLZXk7XG4gIGNsYWltczogQXJyYXk8e1xuICAgIG1hcmtldDogUHVibGljS2V5O1xuICAgIGJldHRpbmdUb2tlbjogUHVibGljS2V5O1xuICAgIHdpbm5pbmdPdXRjb21lOiBPdXRjb21lO1xuICAgIHNoYXJlc1RvQ2xhaW0/OiBudW1iZXIgfCBCTjsgLy8gQW1vdW50IG9mIHNoYXJlcyB0byBjbGFpbSAoMCBvciB1bmRlZmluZWQgPSBjbGFpbSBhbGwpXG4gICAgY2xvc2VBY2NvdW50PzogYm9vbGVhbjsgLy8gV2hldGhlciB0byBjbG9zZSB0aGUgb3V0Y29tZSB0b2tlbiBhY2NvdW50IGFmdGVyIGNsYWltaW5nIGFsbCBzaGFyZXNcbiAgfT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmdW5kUGFyYW1zIHtcbiAgdXNlcjogUHVibGljS2V5O1xuICBtYXJrZXQ6IFB1YmxpY0tleTsgLy8gTWFya2V0IFBEQSBhZGRyZXNzXG4gIGJldHRpbmdUb2tlbjogUHVibGljS2V5O1xuICBvdXRjb21lOiBPdXRjb21lO1xuICB0b2tlbkFtb3VudD86IG51bWJlciB8IEJOOyAvLyBBbW91bnQgb2Ygc2hhcmVzIHRvIHJlZnVuZC4gMCBvciB1bmRlZmluZWQgbWVhbnMgcmVmdW5kIGFsbCBzaGFyZXMuXG4gIGNsb3NlQWNjb3VudD86IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gY2xvc2UgdGhlIG91dGNvbWUgdG9rZW4gYWNjb3VudCBhZnRlciByZWZ1bmRpbmcgYWxsIHNoYXJlcyAoZGVmYXVsdDogZmFsc2UpXG59XG5cbmV4cG9ydCBjbGFzcyBEcmFtYVBtQ2xpZW50IHtcbiAgcHJvZ3JhbTogUHJvZ3JhbTxEcmFtYVBtPjtcbiAgcHJvdmlkZXI6IEFuY2hvclByb3ZpZGVyO1xuICBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24sIHdhbGxldD86IFdhbGxldCwgcHJvZ3JhbUlkPzogUHVibGljS2V5KSB7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgICBcbiAgICAvLyBDcmVhdGUgYSBkZWZhdWx0IHdhbGxldCBpZiBub25lIHByb3ZpZGVkXG4gICAgY29uc3QgZGVmYXVsdEtleXBhaXIgPSBLZXlwYWlyLmdlbmVyYXRlKCk7XG4gICAgY29uc3QgZGVmYXVsdFdhbGxldDogV2FsbGV0ID0ge1xuICAgICAgcHVibGljS2V5OiBkZWZhdWx0S2V5cGFpci5wdWJsaWNLZXksXG4gICAgICBzaWduVHJhbnNhY3Rpb246IGFzeW5jICh0eCkgPT4gdHgsXG4gICAgICBzaWduQWxsVHJhbnNhY3Rpb25zOiBhc3luYyAodHhzKSA9PiB0eHMsXG4gICAgICBwYXllcjogZGVmYXVsdEtleXBhaXIsXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnByb3ZpZGVyID0gbmV3IEFuY2hvclByb3ZpZGVyKFxuICAgICAgY29ubmVjdGlvbixcbiAgICAgIHdhbGxldCB8fCBkZWZhdWx0V2FsbGV0LFxuICAgICAgeyBjb21taXRtZW50OiBcImNvbmZpcm1lZFwiIH1cbiAgICApO1xuICAgIFxuICAgIC8vIFVzZSBjdXN0b20gcHJvZ3JhbUlkIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgdXNlIHRoZSBkZWZhdWx0IGZyb20gSURMXG4gICAgY29uc3QgZmluYWxQcm9ncmFtSWQgPSBwcm9ncmFtSWQgfHwgbmV3IFB1YmxpY0tleShJREwuYWRkcmVzcyk7XG4gICAgXG4gICAgLy8gQ3JlYXRlIGEgbmV3IElETCB3aXRoIHRoZSBjdXN0b20gcHJvZ3JhbUlkXG4gICAgY29uc3QgY3VzdG9tSWRsID0geyAuLi5JREwsIGFkZHJlc3M6IGZpbmFsUHJvZ3JhbUlkLnRvQmFzZTU4KCkgfTtcbiAgICBcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgQW5jaG9yUHJvZ3JhbShjdXN0b21JZGwgYXMgSWRsLCB0aGlzLnByb3ZpZGVyKSBhcyB1bmtub3duIGFzIFByb2dyYW08RHJhbWFQbT47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHByb2dyYW0gSURcbiAgICovXG4gIGdldFByb2dyYW1JZCgpOiBQdWJsaWNLZXkge1xuICAgIHJldHVybiB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5ldyBwcm9ncmFtIElEIGFuZCByZWluaXRpYWxpemUgdGhlIHByb2dyYW0gaW5zdGFuY2VcbiAgICogVXNlZnVsIHdoZW4gcmVkZXBsb3lpbmcgdGhlIHByb2dyYW0gdG8gYSBuZXcgYWRkcmVzc1xuICAgKi9cbiAgc2V0UHJvZ3JhbUlkKHByb2dyYW1JZDogUHVibGljS2V5KTogdm9pZCB7XG4gICAgY29uc3QgY3VzdG9tSWRsID0geyAuLi5JREwsIGFkZHJlc3M6IHByb2dyYW1JZC50b0Jhc2U1OCgpIH07XG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IEFuY2hvclByb2dyYW0oY3VzdG9tSWRsIGFzIElkbCwgdGhpcy5wcm92aWRlcikgYXMgdW5rbm93biBhcyBQcm9ncmFtPERyYW1hUG0+O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudCBleGlzdHNcbiAgICovXG4gIGFzeW5jIGF0YUV4aXN0cyhhdGE6IFB1YmxpY0tleSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBnZXRBY2NvdW50KHRoaXMuY29ubmVjdGlvbiwgYXRhKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdHJ1Y3Rpb24gdG8gaW5pdGlhbGl6ZSBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnRcbiAgICogQHBhcmFtIHRva2VuUHJvZ3JhbSAtIFRva2VuIHByb2dyYW0gSUQgKFRPS0VOX1BST0dSQU1fSUQgZm9yIGJldHRpbmcgdG9rZW4sIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCBmb3Igb3V0Y29tZSB0b2tlbnMpXG4gICAqL1xuICBjcmVhdGVBdGFJbnN0cnVjdGlvbihcbiAgICBwYXllcjogUHVibGljS2V5LFxuICAgIG93bmVyOiBQdWJsaWNLZXksXG4gICAgbWludDogUHVibGljS2V5LFxuICAgIHRva2VuUHJvZ3JhbTogUHVibGljS2V5ID0gVE9LRU5fUFJPR1JBTV9JRFxuICApOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uIHtcbiAgICBjb25zdCBhdGEgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtaW50LCBvd25lciwgdHJ1ZSwgdG9rZW5Qcm9ncmFtKTtcbiAgICBcbiAgICAvLyBVc2UgQ3JlYXRlSWRlbXBvdGVudCBpbnN0cnVjdGlvbiAob3Bjb2RlIDEpIHRvIHN1cHBvcnQgUERBcyBhbmQgaWRlbXBvdGVuY3lcbiAgICBjb25zdCBrZXlzID0gW1xuICAgICAgeyBwdWJrZXk6IHBheWVyLCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IGF0YSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICB7IHB1YmtleTogb3duZXIsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICAgIHsgcHVia2V5OiBtaW50LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICB7IHB1YmtleTogU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICAgIHsgcHVia2V5OiB0b2tlblByb2dyYW0sIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICAgIGtleXMsXG4gICAgICBwcm9ncmFtSWQ6IEFTU09DSUFURURfVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKFsxXSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBnbG9iYWwgY29uZmlndXJhdGlvbiAoQXV0aG9yaXR5IG9ubHkpXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplQ29uZmlnKGF1dGhvcml0eTogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmluaXRpYWxpemVDb25maWcoKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIGdsb2JhbENvbmZpZyxcbiAgICAgICAgYXV0aG9yaXR5OiBhdXRob3JpdHksXG4gICAgICAgIHN5c3RlbVByb2dyYW06IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gaW5pdGlhbGl6ZSBjb25maWdcbiAgICovXG4gIGFzeW5jIGJ1aWxkSW5pdGlhbGl6ZUNvbmZpZ1R4KGF1dGhvcml0eTogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5pbml0aWFsaXplQ29uZmlnKGF1dGhvcml0eSk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogTWlncmF0ZSBHbG9iYWxDb25maWcgdG8gbmV3IHZlcnNpb24gd2l0aCBmZWVfY2xhaW1fYnBzIGZpZWxkIChBdXRob3JpdHkgb25seSlcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBvbmNlIGFmdGVyIHByb2dyYW0gdXBncmFkZVxuICAgKi9cbiAgYXN5bmMgbWlncmF0ZUNvbmZpZyhhdXRob3JpdHk6IFB1YmxpY0tleSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5taWdyYXRlQ29uZmlnKClcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgIGF1dGhvcml0eTogYXV0aG9yaXR5LFxuICAgICAgICBzeXN0ZW1Qcm9ncmFtOiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIG1pZ3JhdGUgY29uZmlnXG4gICAqL1xuICBhc3luYyBidWlsZE1pZ3JhdGVDb25maWdUeChhdXRob3JpdHk6IFB1YmxpY0tleSk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMubWlncmF0ZUNvbmZpZyhhdXRob3JpdHkpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhdXRob3JpemVkIGFkbWluIChBdXRob3JpdHkgb25seSlcbiAgICovXG4gIGFzeW5jIGFkZEFkbWluKG5ld0FkbWluOiBQdWJsaWNLZXkpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5hZGRBZG1pbihuZXdBZG1pbilcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byB1cGRhdGUgYWRtaW5cbiAgICovXG4gIGFzeW5jIGJ1aWxkQWRkQWRtaW5UeChuZXdBZG1pbjogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5hZGRBZG1pbihuZXdBZG1pbik7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGF1dGhvcml6ZWQgYWRtaW4gKEF1dGhvcml0eSBvbmx5KVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlQWRtaW4oYWRtaW5Ub1JlbW92ZTogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAucmVtb3ZlQWRtaW4oYWRtaW5Ub1JlbW92ZSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byByZW1vdmUgYWRtaW5cbiAgICovXG4gIGFzeW5jIGJ1aWxkUmVtb3ZlQWRtaW5UeChhZG1pblRvUmVtb3ZlOiBQdWJsaWNLZXkpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLnJlbW92ZUFkbWluKGFkbWluVG9SZW1vdmUpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBmZWUgY29uZmlndXJhdGlvbiAoQXV0aG9yaXR5IG9yIGF1dGhvcml6ZWQgYWRtaW4pXG4gICAqL1xuICBhc3luYyB1cGRhdGVGZWVDb25maWcocGFyYW1zOiBVcGRhdGVGZWVDb25maWdQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC51cGRhdGVGZWVDb25maWcocGFyYW1zLm5ld0ZlZUJwcywgcGFyYW1zLm5ld0ZlZVJlY2lwaWVudCwgcGFyYW1zLm5ld0ZlZUNsYWltQnBzKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIGdsb2JhbENvbmZpZzogZ2xvYmFsQ29uZmlnLFxuICAgICAgICBhdXRob3JpdHk6IHBhcmFtcy5hdXRob3JpdHksXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byB1cGRhdGUgZmVlIGNvbmZpZ1xuICAgKi9cbiAgYXN5bmMgYnVpbGRVcGRhdGVGZWVDb25maWdUeChwYXJhbXM6IFVwZGF0ZUZlZUNvbmZpZ1BhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMudXBkYXRlRmVlQ29uZmlnKHBhcmFtcyk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHByZWRpY3Rpb24gbWFya2V0IGluc3RydWN0aW9uXG4gICAqL1xuICBhc3luYyBjcmVhdGVNYXJrZXQocGFyYW1zOiBDcmVhdGVNYXJrZXRQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCB7IGFkbWluLCBtYXJrZXRJZCwgeWVzUHJpY2UsIG5vUHJpY2UsIGVuZFRpbWUsIGJldHRpbmdUb2tlbiB9ID0gcGFyYW1zO1xuICAgIFxuICAgIGNvbnN0IG1hcmtldElkQm4gPSBuZXcgQk4obWFya2V0SWQpO1xuICAgIGNvbnN0IHllc1ByaWNlQm4gPSBuZXcgQk4oeWVzUHJpY2UpO1xuICAgIGNvbnN0IG5vUHJpY2VCbiA9IG5ldyBCTihub1ByaWNlKTtcbiAgICBjb25zdCBlbmRUaW1lQm4gPSBuZXcgQk4oZW5kVGltZSk7XG5cbiAgICBjb25zdCBwZGFzID0gZ2V0TWFya2V0UGRhcyh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkLCBhZG1pbiwgbWFya2V0SWRCbik7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuY3JlYXRlTWFya2V0KHtcbiAgICAgICAgICBtYXJrZXRJZDogbWFya2V0SWRCbixcbiAgICAgICAgICB5ZXNQcmljZTogeWVzUHJpY2VCbixcbiAgICAgICAgICBub1ByaWNlOiBub1ByaWNlQm4sXG4gICAgICAgICAgZW5kVGltZTogZW5kVGltZUJuLFxuICAgICAgICB9KVxuICAgICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgICAgbWFya2V0OiBwZGFzLm1hcmtldCxcbiAgICAgICAgICB5ZXNNaW50OiBwZGFzLnllc01pbnQsXG4gICAgICAgICAgbm9NaW50OiBwZGFzLm5vTWludCxcbiAgICAgICAgICBiZXR0aW5nVG9rZW46IGJldHRpbmdUb2tlbixcbiAgICAgICAgICB2YXVsdDogcGRhcy52YXVsdCxcbiAgICAgICAgICBhZG1pbjogYWRtaW4sXG4gICAgICAgICAgdG9rZW5Qcm9ncmFtOiBUT0tFTl9QUk9HUkFNX0lELFxuICAgICAgICAgIHN5c3RlbVByb2dyYW06IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLFxuICAgICAgICB9KVxuICAgICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIGNyZWF0ZSBhIG1hcmtldFxuICAgKi9cbiAgYXN5bmMgYnVpbGRDcmVhdGVNYXJrZXRUeChwYXJhbXM6IENyZWF0ZU1hcmtldFBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMuY3JlYXRlTWFya2V0KHBhcmFtcyk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogUGxhY2UgYSBiZXQgaW5zdHJ1Y3Rpb24gKHdpdGhvdXQgQVRBIGNyZWF0aW9uKVxuICAgKi9cbiAgYXN5bmMgcGxhY2VCZXQocGFyYW1zOiBQbGFjZUJldFBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IHsgdXNlciwgbWFya2V0LCBhbW91bnQsIG91dGNvbWUsIGJldHRpbmdUb2tlbiwgZmVlUmVjaXBpZW50VG9rZW4gfSA9IHBhcmFtcztcbiAgICBcbiAgICBjb25zdCBhbW91bnRCbiA9IG5ldyBCTihhbW91bnQpO1xuICAgIGNvbnN0IG91dGNvbWVFbnVtID0gb3V0Y29tZSA9PT0gXCJZZXNcIiA/IHsgeWVzOiB7fSB9IDogeyBubzoge30gfTtcblxuICAgIC8vIEdldCBnbG9iYWwgY29uZmlnIGZvciBmZWUgaW5mb1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcblxuICAgIC8vIERlcml2ZSBQREFzIGZyb20gbWFya2V0IGFkZHJlc3NcbiAgICBjb25zdCB5ZXNNaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oWUVTX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuICAgIGNvbnN0IG5vTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKE5PX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuICAgIGNvbnN0IHZhdWx0ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oVkFVTFRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgY29uc3QgdXNlckJldHRpbmdUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGJldHRpbmdUb2tlbiwgdXNlcik7XG4gICAgXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIG91dGNvbWUgdG9rZW4gdGhlIHVzZXIgd2lsbCByZWNlaXZlXG4gICAgLy8gT3V0Y29tZSB0b2tlbnMgKFllcy9ObykgdXNlIFRva2VuLTIwMjIgcHJvZ3JhbVxuICAgIGNvbnN0IHRhcmdldE1pbnQgPSBvdXRjb21lID09PSBcIlllc1wiID8geWVzTWludCA6IG5vTWludDtcbiAgICBjb25zdCB1c2VyT3V0Y29tZVRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModGFyZ2V0TWludCwgdXNlciwgZmFsc2UsIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5wbGFjZUJldCh7XG4gICAgICAgIGJ1eU91dGNvbWU6IG91dGNvbWVFbnVtLFxuICAgICAgICBhbW91bnQ6IGFtb3VudEJuLFxuICAgICAgfSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgIG1hcmtldCxcbiAgICAgICAgeWVzTWludCxcbiAgICAgICAgbm9NaW50LFxuICAgICAgICB2YXVsdCxcbiAgICAgICAgZmVlUmVjaXBpZW50VG9rZW46IGZlZVJlY2lwaWVudFRva2VuIHx8IG51bGwsXG4gICAgICAgIHVzZXJPdXRjb21lVG9rZW4sXG4gICAgICAgIHVzZXJCZXR0aW5nVG9rZW4sXG4gICAgICAgIHVzZXIsXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byBwbGFjZSBhIGJldCAod2l0aCBvcHRpb25hbCBBVEEgY3JlYXRpb24gZm9yIGJvdGggb3V0Y29tZSB0b2tlbiBhbmQgZmVlIHJlY2lwaWVudClcbiAgICovXG4gIGFzeW5jIGJ1aWxkUGxhY2VCZXRUeChwYXJhbXM6IFBsYWNlQmV0UGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHsgdXNlciwgbWFya2V0LCBvdXRjb21lLCBiZXR0aW5nVG9rZW4sIGNyZWF0ZUF0YSA9IHRydWUgfSA9IHBhcmFtcztcbiAgICBcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICAgIFxuICAgIC8vIEZldGNoIGNvbmZpZyB0byBjaGVjayBmZWVfYnBzXG4gICAgY29uc3QgY29uZmlnQWNjb3VudCA9IGF3YWl0IHRoaXMuZ2V0R2xvYmFsQ29uZmlnQWNjb3VudCgpO1xuICAgIFxuICAgIC8vIERlcml2ZSBtaW50IFBEQXMgZnJvbSBtYXJrZXQgYWRkcmVzc1xuICAgIGNvbnN0IHllc01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShZRVNfTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3Qgbm9NaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oTk9fTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgXG4gICAgLy8gT3V0Y29tZSB0b2tlbnMgKFllcy9ObykgdXNlIFRva2VuLTIwMjIgcHJvZ3JhbVxuICAgIGNvbnN0IHRhcmdldE1pbnQgPSBvdXRjb21lID09PSBcIlllc1wiID8geWVzTWludCA6IG5vTWludDtcbiAgICBjb25zdCB1c2VyT3V0Y29tZVRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModGFyZ2V0TWludCwgdXNlciwgZmFsc2UsIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG5cbiAgICAvLyBDaGVjayBpZiB1c2VyIG91dGNvbWUgQVRBIGV4aXN0cyBhbmQgY3JlYXRlIGlmIG5lZWRlZFxuICAgIGlmIChjcmVhdGVBdGEpIHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMuYXRhRXhpc3RzKHVzZXJPdXRjb21lVG9rZW4pO1xuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlQXRhSXggPSB0aGlzLmNyZWF0ZUF0YUluc3RydWN0aW9uKHVzZXIsIHVzZXIsIHRhcmdldE1pbnQsIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gICAgICAgIHR4LmFkZChjcmVhdGVBdGFJeCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGZlZSByZWNpcGllbnQgdG9rZW4gYWNjb3VudCBpZiBmZWVfYnBzID4gMFxuICAgIGxldCBmZWVSZWNpcGllbnRUb2tlbjogUHVibGljS2V5IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGNvbmZpZ0FjY291bnQuZmVlQnBzID4gMCkge1xuICAgICAgY29uc3QgZmVlUmVjaXBpZW50QWRkcmVzcyA9IHBhcmFtcy5mZWVSZWNpcGllbnQgfHwgY29uZmlnQWNjb3VudC5mZWVSZWNpcGllbnQ7XG4gICAgICBmZWVSZWNpcGllbnRUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGJldHRpbmdUb2tlbiwgZmVlUmVjaXBpZW50QWRkcmVzcyk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGZlZSByZWNpcGllbnQgQVRBIGV4aXN0cyBhbmQgY3JlYXRlIGlmIG5lZWRlZFxuICAgICAgY29uc3QgZmVlQXRhRXhpc3RzID0gYXdhaXQgdGhpcy5hdGFFeGlzdHMoZmVlUmVjaXBpZW50VG9rZW4pO1xuICAgICAgaWYgKCFmZWVBdGFFeGlzdHMpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlRmVlQXRhSXggPSB0aGlzLmNyZWF0ZUF0YUluc3RydWN0aW9uKHVzZXIsIGZlZVJlY2lwaWVudEFkZHJlc3MsIGJldHRpbmdUb2tlbik7XG4gICAgICAgIHR4LmFkZChjcmVhdGVGZWVBdGFJeCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGxhY2VCZXRJeCA9IGF3YWl0IHRoaXMucGxhY2VCZXQoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgZmVlUmVjaXBpZW50VG9rZW4sXG4gICAgfSk7XG4gICAgdHguYWRkKHBsYWNlQmV0SXgpO1xuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIENsYWltIHJld2FyZHMgYWZ0ZXIgbWFya2V0IHJlc29sdXRpb25cbiAgICovXG4gIGFzeW5jIGNsYWltUmV3YXJkcyhwYXJhbXM6IENsYWltUmV3YXJkc1BhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IHsgdXNlciwgbWFya2V0LCBiZXR0aW5nVG9rZW4sIHdpbm5pbmdPdXRjb21lIH0gPSBwYXJhbXM7XG5cbiAgICAvLyBEZXJpdmUgbWludCBQREFzIGZyb20gbWFya2V0IGFkZHJlc3NcbiAgICBjb25zdCB5ZXNNaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oWUVTX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuICAgIGNvbnN0IG5vTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKE5PX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgLy8gRGVyaXZlIHZhdWx0IFBEQVxuICAgIGNvbnN0IHZhdWx0ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oVkFVTFRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgY29uc3QgdXNlckJldHRpbmdUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGJldHRpbmdUb2tlbiwgdXNlcik7XG4gICAgLy8gT3V0Y29tZSB0b2tlbnMgKFllcy9ObykgdXNlIFRva2VuLTIwMjIgcHJvZ3JhbVxuICAgIGNvbnN0IHRhcmdldE1pbnQgPSB3aW5uaW5nT3V0Y29tZSA9PT0gXCJZZXNcIiA/IHllc01pbnQgOiBub01pbnQ7XG4gICAgY29uc3QgdXNlck91dGNvbWVUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHRhcmdldE1pbnQsIHVzZXIsIGZhbHNlLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuICAgIGNvbnN0IHNoYXJlc1RvQ2xhaW1CbiA9IG5ldyBCTihwYXJhbXMuc2hhcmVzVG9DbGFpbSk7XG4gICAgY29uc3QgY2xvc2VBY2NvdW50ID0gcGFyYW1zLmNsb3NlQWNjb3VudCA/PyB0cnVlO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmNsYWltUmV3YXJkcyh7XG4gICAgICAgIHRva2VuQW1vdW50OiBzaGFyZXNUb0NsYWltQm4sXG4gICAgICAgIGNsb3NlQWNjb3VudCxcbiAgICAgIH0pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgbWFya2V0LFxuICAgICAgICB5ZXNNaW50LFxuICAgICAgICBub01pbnQsXG4gICAgICAgIHZhdWx0LFxuICAgICAgICB1c2VyT3V0Y29tZVRva2VuLFxuICAgICAgICB1c2VyQmV0dGluZ1Rva2VuLFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gY2xhaW0gcmV3YXJkc1xuICAgKi9cbiAgYXN5bmMgYnVpbGRDbGFpbVJld2FyZHNUeChwYXJhbXM6IENsYWltUmV3YXJkc1BhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB7IHVzZXIsIG1hcmtldCwgYmV0dGluZ1Rva2VuLCB3aW5uaW5nT3V0Y29tZSB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG5cbiAgICAvLyBEZXJpdmUgbWludCBQREFzIGZyb20gbWFya2V0IGFkZHJlc3NcbiAgICBjb25zdCB5ZXNNaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oWUVTX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgY29uc3Qgbm9NaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oTk9fTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG5cbiAgICAvLyBEZXJpdmUgdmF1bHQgUERBXG4gICAgY29uc3QgdmF1bHQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShWQVVMVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG5cbiAgICBjb25zdCB1c2VyQmV0dGluZ1Rva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMoYmV0dGluZ1Rva2VuLCB1c2VyKTtcbiAgICAvLyBPdXRjb21lIHRva2VucyAoWWVzL05vKSB1c2UgVG9rZW4tMjAyMiBwcm9ncmFtXG4gICAgY29uc3QgdGFyZ2V0TWludCA9IHdpbm5pbmdPdXRjb21lID09PSBcIlllc1wiID8geWVzTWludCA6IG5vTWludDtcbiAgICBjb25zdCB1c2VyT3V0Y29tZVRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmModGFyZ2V0TWludCwgdXNlciwgZmFsc2UsIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gICAgY29uc3Qgc2hhcmVzVG9DbGFpbUJuID0gbmV3IEJOKHBhcmFtcy5zaGFyZXNUb0NsYWltKTtcbiAgICBjb25zdCBjbG9zZUFjY291bnQgPSBwYXJhbXMuY2xvc2VBY2NvdW50ID8/IHRydWU7XG5cbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuY2xhaW1SZXdhcmRzKHtcbiAgICAgICAgdG9rZW5BbW91bnQ6IHNoYXJlc1RvQ2xhaW1CbixcbiAgICAgICAgY2xvc2VBY2NvdW50LFxuICAgICAgfSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBtYXJrZXQsXG4gICAgICAgIHllc01pbnQsXG4gICAgICAgIG5vTWludCxcbiAgICAgICAgdmF1bHQsXG4gICAgICAgIHVzZXJPdXRjb21lVG9rZW4sXG4gICAgICAgIHVzZXJCZXR0aW5nVG9rZW4sXG4gICAgICAgIHVzZXIsXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gICAgXG4gICAgdHguYWRkKGl4KTtcbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgaW5zdHJ1Y3Rpb25zIHRvIGNsYWltIHJld2FyZHMgZnJvbSBtdWx0aXBsZSBtYXJrZXRzXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgY2FuIGJlIGJhdGNoZWQgaW50byB0cmFuc2FjdGlvbnNcbiAgICovXG4gIGFzeW5jIGJhdGNoQ2xhaW1SZXdhcmRzKHBhcmFtczogQmF0Y2hDbGFpbVBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdPiB7XG4gICAgY29uc3QgeyB1c2VyLCBjbGFpbXMgfSA9IHBhcmFtcztcbiAgICBjb25zdCBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjbGFpbSBvZiBjbGFpbXMpIHtcbiAgICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5jbGFpbVJld2FyZHMoe1xuICAgICAgICB1c2VyLFxuICAgICAgICBtYXJrZXQ6IGNsYWltLm1hcmtldCxcbiAgICAgICAgYmV0dGluZ1Rva2VuOiBjbGFpbS5iZXR0aW5nVG9rZW4sXG4gICAgICAgIHdpbm5pbmdPdXRjb21lOiBjbGFpbS53aW5uaW5nT3V0Y29tZSxcbiAgICAgICAgc2hhcmVzVG9DbGFpbTogY2xhaW0uc2hhcmVzVG9DbGFpbSA/PyAwLFxuICAgICAgICBjbG9zZUFjY291bnQ6IGNsYWltLmNsb3NlQWNjb3VudCA/PyB0cnVlLFxuICAgICAgfSk7XG4gICAgICBpbnN0cnVjdGlvbnMucHVzaChpeCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0cmFuc2FjdGlvbnMgdG8gY2xhaW0gcmV3YXJkcyBmcm9tIG11bHRpcGxlIG1hcmtldHNcbiAgICogQXV0b21hdGljYWxseSBzcGxpdHMgaW50byBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgaWYgbmVlZGVkIChtYXggNSBjbGFpbXMgcGVyIHR4IHRvIGF2b2lkIHNpemUgbGltaXRzKVxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQmF0Y2ggY2xhaW0gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gbWF4Q2xhaW1zUGVyVHggLSBNYXhpbXVtIGNsYWltcyBwZXIgdHJhbnNhY3Rpb24gKGRlZmF1bHQ6IDUpXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHRyYW5zYWN0aW9uc1xuICAgKi9cbiAgYXN5bmMgYnVpbGRCYXRjaENsYWltUmV3YXJkc1R4KFxuICAgIHBhcmFtczogQmF0Y2hDbGFpbVBhcmFtcyxcbiAgICBtYXhDbGFpbXNQZXJUeDogbnVtYmVyID0gNVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uW10+IHtcbiAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBhd2FpdCB0aGlzLmJhdGNoQ2xhaW1SZXdhcmRzKHBhcmFtcyk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbltdID0gW107XG5cbiAgICAvLyBTcGxpdCBpbnN0cnVjdGlvbnMgaW50byBjaHVua3NcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkgKz0gbWF4Q2xhaW1zUGVyVHgpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gaW5zdHJ1Y3Rpb25zLnNsaWNlKGksIGkgKyBtYXhDbGFpbXNQZXJUeCk7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuICAgICAgY2h1bmsuZm9yRWFjaChpeCA9PiB0eC5hZGQoaXgpKTtcbiAgICAgIHRyYW5zYWN0aW9ucy5wdXNoKHR4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnVuZCBiZXRzIGlmIG1hcmtldCBpcyByZWZ1bmRlZFxuICAgKiBAcGFyYW0gcGFyYW1zLnRva2VuQW1vdW50IC0gQW1vdW50IG9mIHNoYXJlcyB0byByZWZ1bmQuIDAgb3IgdW5kZWZpbmVkIG1lYW5zIHJlZnVuZCBhbGwgc2hhcmVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gcGFydGlhbGx5IHJlZnVuZCB0aGVpciBwb3NpdGlvbiBhY3Jvc3MgbXVsdGlwbGUgdHJhbnNhY3Rpb25zLlxuICAgKi9cbiAgYXN5bmMgcmVmdW5kKHBhcmFtczogUmVmdW5kUGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgeyB1c2VyLCBtYXJrZXQsIGJldHRpbmdUb2tlbiwgb3V0Y29tZSwgdG9rZW5BbW91bnQsIGNsb3NlQWNjb3VudCA9IHRydWUgfSA9IHBhcmFtcztcbiAgICBcbiAgICBjb25zdCBvdXRjb21lRW51bSA9IG91dGNvbWUgPT09IFwiWWVzXCIgPyB7IHllczoge30gfSA6IHsgbm86IHt9IH07XG4gICAgXG4gICAgLy8gQ29udmVydCB0b2tlbkFtb3VudCB0byBCTiAoMCBtZWFucyByZWZ1bmQgYWxsKVxuICAgIGNvbnN0IHRva2VuQW1vdW50Qm4gPSBuZXcgQk4odG9rZW5BbW91bnQgPz8gMCk7XG4gICAgXG4gICAgLy8gRGVyaXZlIG1pbnQgUERBcyBmcm9tIG1hcmtldCBhZGRyZXNzXG4gICAgY29uc3QgeWVzTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFlFU19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCBub01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShOT19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIC8vIERlcml2ZSB2YXVsdCBQREFcbiAgICBjb25zdCB2YXVsdCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFZBVUxUX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIGNvbnN0IHVzZXJCZXR0aW5nVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhiZXR0aW5nVG9rZW4sIHVzZXIpO1xuICAgIC8vIE91dGNvbWUgdG9rZW5zIChZZXMvTm8pIHVzZSBUb2tlbi0yMDIyIHByb2dyYW1cbiAgICBjb25zdCB0YXJnZXRNaW50ID0gb3V0Y29tZSA9PT0gXCJZZXNcIiA/IHllc01pbnQgOiBub01pbnQ7XG4gICAgY29uc3QgdXNlck91dGNvbWVUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHRhcmdldE1pbnQsIHVzZXIsIGZhbHNlLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAucmVmdW5kKHtcbiAgICAgICAgb3V0Y29tZTogb3V0Y29tZUVudW0sXG4gICAgICAgIHRva2VuQW1vdW50OiB0b2tlbkFtb3VudEJuLFxuICAgICAgICBjbG9zZUFjY291bnQsXG4gICAgICB9KVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldDogbWFya2V0LFxuICAgICAgICB5ZXNNaW50OiB5ZXNNaW50LFxuICAgICAgICBub01pbnQ6IG5vTWludCxcbiAgICAgICAgdmF1bHQ6IHZhdWx0LFxuICAgICAgICB1c2VyT3V0Y29tZVRva2VuOiB1c2VyT3V0Y29tZVRva2VuLFxuICAgICAgICB1c2VyQmV0dGluZ1Rva2VuOiB1c2VyQmV0dGluZ1Rva2VuLFxuICAgICAgICB0b2tlblByb2dyYW06IFRPS0VOX1BST0dSQU1fSUQsXG4gICAgICAgIHRva2VuMjAyMlByb2dyYW06IFRPS0VOXzIwMjJfUFJPR1JBTV9JRCxcbiAgICAgICAgdXNlcjogdXNlcixcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHJlZnVuZFxuICAgKi9cbiAgYXN5bmMgYnVpbGRSZWZ1bmRUeChwYXJhbXM6IFJlZnVuZFBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMucmVmdW5kKHBhcmFtcyk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIG1hcmtldCAoQWRtaW4gb25seSlcbiAgICovXG4gIGFzeW5jIHJlc29sdmVNYXJrZXRCeUlEKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0SWQ6IG51bWJlciB8IEJOLFxuICAgIHdpbm5pbmdPdXRjb21lOiBcIlllc1wiIHwgXCJOb1wiIHwgbnVsbCxcbiAgICBmZWVSZWNpcGllbnQ/OiBQdWJsaWNLZXlcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgbWFya2V0SWRCbiA9IG5ldyBCTihtYXJrZXRJZCk7XG4gICAgY29uc3QgbWFya2V0UGRhID0gZ2V0TWFya2V0UGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQsIGFkbWluLCBtYXJrZXRJZEJuKTtcbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgICBsZXQgb3V0Y29tZUVudW06IGFueSA9IG51bGw7XG4gICAgaWYgKHdpbm5pbmdPdXRjb21lID09PSBcIlllc1wiKSB7XG4gICAgICBvdXRjb21lRW51bSA9IHsgeWVzOiB7fSB9O1xuICAgIH0gZWxzZSBpZiAod2lubmluZ091dGNvbWUgPT09IFwiTm9cIikge1xuICAgICAgb3V0Y29tZUVudW0gPSB7IG5vOiB7fSB9O1xuICAgIH1cblxuICAgIC8vIEdldCBtYXJrZXQgaW5mbyB0byBkZXRlcm1pbmUgYmV0dGluZyB0b2tlblxuICAgIGNvbnN0IG1hcmtldEluZm8gPSBhd2FpdCB0aGlzLmdldE1hcmtldEluZm8obWFya2V0UGRhKTtcbiAgICAvLyBmZWUgcmVjaXBpZW50IGFkZHJlc3NcbiAgICBjb25zdCBmZWVSZWNpcGllbnRBZGRyZXNzID0gZmVlUmVjaXBpZW50IHx8IChhd2FpdCB0aGlzLmdldEdsb2JhbENvbmZpZ0FjY291bnQoKSkuZmVlUmVjaXBpZW50O1xuICAgIC8vIGZlZSByZWNpcGllbnQgdG9rZW4gYWNjb3VudFxuICAgIGNvbnN0IGZlZVJlY2lwaWVudFRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobWFya2V0SW5mby5iZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudEFkZHJlc3MpO1xuXG4gICAgLy8gRGVyaXZlIHZhdWx0IFBEQVxuICAgIGNvbnN0IHZhdWx0ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oVkFVTFRfU0VFRCksIG1hcmtldFBkYS50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAucmVzb2x2ZU1hcmtldChvdXRjb21lRW51bSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgIG1hcmtldDogbWFya2V0UGRhLFxuICAgICAgICB2YXVsdCxcbiAgICAgICAgZmVlUmVjaXBpZW50OiBmZWVSZWNpcGllbnRUb2tlbixcbiAgICAgICAgYWRtaW4sXG4gICAgICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHJlc29sdmUgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkUmVzb2x2ZU1hcmtldFR4QnlJRChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldElkOiBudW1iZXIgfCBCTixcbiAgICB3aW5uaW5nT3V0Y29tZTogXCJZZXNcIiB8IFwiTm9cIiB8IG51bGwsXG4gICAgZmVlUmVjaXBpZW50PzogUHVibGljS2V5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBtYXJrZXRJZEJuID0gbmV3IEJOKG1hcmtldElkKTtcbiAgICBjb25zdCBtYXJrZXRQZGEgPSBnZXRNYXJrZXRQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCwgYWRtaW4sIG1hcmtldElkQm4pO1xuICAgIGNvbnN0IG1hcmtldEluZm8gPSBhd2FpdCB0aGlzLmdldE1hcmtldEluZm8obWFya2V0UGRhKTtcbiAgICBjb25zdCBnbG9iYWxDb25maWdBY2NvdW50ID0gYXdhaXQgdGhpcy5nZXRHbG9iYWxDb25maWdBY2NvdW50KCk7XG4gICAgY29uc3QgZmVlUmVjaXBpZW50QWRkcmVzcyA9IGZlZVJlY2lwaWVudCB8fCBnbG9iYWxDb25maWdBY2NvdW50LmZlZVJlY2lwaWVudDtcbiAgICBjb25zdCBmZWVSZWNpcGllbnRUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKG1hcmtldEluZm8uYmV0dGluZ1Rva2VuLCBmZWVSZWNpcGllbnRBZGRyZXNzKTtcblxuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG5cbiAgICAvLyBDaGVjayBpZiBmZWUgcmVjaXBpZW50IHRva2VuIGFjY291bnQgZXhpc3RzIGFuZCBjcmVhdGUgaWYgbmVlZGVkXG4gICAgY29uc3QgZmVlUmVjaXBpZW50QXRhRXhpc3RzID0gYXdhaXQgdGhpcy5hdGFFeGlzdHMoZmVlUmVjaXBpZW50VG9rZW4pO1xuICAgIGlmICghZmVlUmVjaXBpZW50QXRhRXhpc3RzKSB7XG4gICAgICBjb25zdCBjcmVhdGVGZWVSZWNpcGllbnRBdGFJeCA9IHRoaXMuY3JlYXRlQXRhSW5zdHJ1Y3Rpb24oYWRtaW4sIGZlZVJlY2lwaWVudEFkZHJlc3MsIG1hcmtldEluZm8uYmV0dGluZ1Rva2VuKTtcbiAgICAgIHR4LmFkZChjcmVhdGVGZWVSZWNpcGllbnRBdGFJeCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc29sdmUgbWFya2V0IGluc3RydWN0aW9uXG4gICAgY29uc3QgcmVzb2x2ZU1hcmtldEl4ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWFya2V0QnlJRChhZG1pbiwgbWFya2V0SWQsIHdpbm5pbmdPdXRjb21lLCBmZWVSZWNpcGllbnQpO1xuICAgIHR4LmFkZChyZXNvbHZlTWFya2V0SXgpO1xuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBtYXJrZXQgKEFkbWluIG9ubHkpXG4gICAqL1xuICBhc3luYyByZXNvbHZlTWFya2V0KFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0OiBQdWJsaWNLZXksXG4gICAgd2lubmluZ091dGNvbWU6IFwiWWVzXCIgfCBcIk5vXCIgfCBudWxsLFxuICAgIGZlZVJlY2lwaWVudD86IFB1YmxpY0tleVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgICBsZXQgb3V0Y29tZUVudW06IGFueSA9IG51bGw7XG4gICAgaWYgKHdpbm5pbmdPdXRjb21lID09PSBcIlllc1wiKSB7XG4gICAgICBvdXRjb21lRW51bSA9IHsgeWVzOiB7fSB9O1xuICAgIH0gZWxzZSBpZiAod2lubmluZ091dGNvbWUgPT09IFwiTm9cIikge1xuICAgICAgb3V0Y29tZUVudW0gPSB7IG5vOiB7fSB9O1xuICAgIH1cblxuICAgIC8vIEdldCBtYXJrZXQgaW5mbyB0byBkZXRlcm1pbmUgYmV0dGluZyB0b2tlblxuICAgIGNvbnN0IG1hcmtldEluZm8gPSBhd2FpdCB0aGlzLmdldE1hcmtldEluZm8obWFya2V0KTtcbiAgICBjb25zdCBmZWVSZWNpcGllbnRBZGRyZXNzID0gZmVlUmVjaXBpZW50IHx8IChhd2FpdCB0aGlzLmdldEdsb2JhbENvbmZpZ0FjY291bnQoKSkuZmVlUmVjaXBpZW50O1xuICAgIGNvbnN0IGZlZVJlY2lwaWVudFRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobWFya2V0SW5mby5iZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudEFkZHJlc3MpO1xuXG4gICAgLy8gRGVyaXZlIHZhdWx0IFBEQVxuICAgIGNvbnN0IHZhdWx0ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oVkFVTFRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAucmVzb2x2ZU1hcmtldChvdXRjb21lRW51bSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgIG1hcmtldDogbWFya2V0LFxuICAgICAgICB2YXVsdCxcbiAgICAgICAgZmVlUmVjaXBpZW50OiBmZWVSZWNpcGllbnRUb2tlbixcbiAgICAgICAgYWRtaW4sXG4gICAgICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHJlc29sdmUgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkUmVzb2x2ZU1hcmtldFR4KFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgbWFya2V0OiBQdWJsaWNLZXksXG4gICAgd2lubmluZ091dGNvbWU6IFwiWWVzXCIgfCBcIk5vXCIgfCBudWxsLFxuICAgIGZlZVJlY2lwaWVudD86IFB1YmxpY0tleVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgbWFya2V0SW5mbyA9IGF3YWl0IHRoaXMuZ2V0TWFya2V0SW5mbyhtYXJrZXQpO1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZ0FjY291bnQgPSBhd2FpdCB0aGlzLmdldEdsb2JhbENvbmZpZ0FjY291bnQoKTtcbiAgICBjb25zdCBmZWVSZWNpcGllbnRBZGRyZXNzID0gZmVlUmVjaXBpZW50IHx8IGdsb2JhbENvbmZpZ0FjY291bnQuZmVlUmVjaXBpZW50O1xuICAgIGNvbnN0IGZlZVJlY2lwaWVudFRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobWFya2V0SW5mby5iZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudEFkZHJlc3MpO1xuXG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcblxuICAgIC8vIENoZWNrIGlmIGZlZSByZWNpcGllbnQgdG9rZW4gYWNjb3VudCBleGlzdHMgYW5kIGNyZWF0ZSBpZiBuZWVkZWRcbiAgICBjb25zdCBmZWVSZWNpcGllbnRBdGFFeGlzdHMgPSBhd2FpdCB0aGlzLmF0YUV4aXN0cyhmZWVSZWNpcGllbnRUb2tlbik7XG4gICAgaWYgKCFmZWVSZWNpcGllbnRBdGFFeGlzdHMpIHtcbiAgICAgIGNvbnN0IGNyZWF0ZUZlZVJlY2lwaWVudEF0YUl4ID0gdGhpcy5jcmVhdGVBdGFJbnN0cnVjdGlvbihhZG1pbiwgZmVlUmVjaXBpZW50QWRkcmVzcywgbWFya2V0SW5mby5iZXR0aW5nVG9rZW4pO1xuICAgICAgdHguYWRkKGNyZWF0ZUZlZVJlY2lwaWVudEF0YUl4KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzb2x2ZSBtYXJrZXQgaW5zdHJ1Y3Rpb25cbiAgICBjb25zdCByZXNvbHZlTWFya2V0SXggPSBhd2FpdCB0aGlzLnJlc29sdmVNYXJrZXQoYWRtaW4sIG1hcmtldCwgd2lubmluZ091dGNvbWUsIGZlZVJlY2lwaWVudCk7XG4gICAgdHguYWRkKHJlc29sdmVNYXJrZXRJeCk7XG5cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYSBtYXJrZXQgKEFkbWluIG9ubHkpXG4gICAqL1xuICBhc3luYyBjbG9zZU1hcmtldChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldDogUHVibGljS2V5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmNsb3NlTWFya2V0KClcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBtYXJrZXQ6IG1hcmtldCxcbiAgICAgICAgYWRtaW46IGFkbWluLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gY2xvc2UgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ2xvc2VNYXJrZXRUeChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldDogUHVibGljS2V5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMuY2xvc2VNYXJrZXQoYWRtaW4sIG1hcmtldCk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYSBtYXJrZXQgKEFkbWluIG9ubHkpXG4gICAqL1xuICBhc3luYyBjbG9zZU1hcmtldEJ5SUQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXRJZDogbnVtYmVyIHwgQk5cbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgbWFya2V0SWRCbiA9IG5ldyBCTihtYXJrZXRJZCk7XG4gICAgY29uc3QgbWFya2V0UGRhID0gZ2V0TWFya2V0UGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQsIGFkbWluLCBtYXJrZXRJZEJuKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmNsb3NlTWFya2V0KClcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBtYXJrZXQ6IG1hcmtldFBkYSxcbiAgICAgICAgYWRtaW46IGFkbWluLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gY2xvc2UgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ2xvc2VNYXJrZXRUeEJ5SUQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXRJZDogbnVtYmVyIHwgQk5cbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5jbG9zZU1hcmtldEJ5SUQoYWRtaW4sIG1hcmtldElkKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBtYXJrZXQgYWNjb3VudCBhbmQgcmVjbGFpbSByZW50IChBZG1pbiBvbmx5KVxuICAgKiBDYW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgbWFya2V0IGlzIHJlc29sdmVkIGFuZCBhbGwgcmV3YXJkcyBjbGFpbWVkXG4gICAqL1xuICBhc3luYyBjbG9zZU1hcmtldEFjY291bnQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICAvLyBEZXJpdmUgUERBc1xuICAgIGNvbnN0IHllc01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShZRVNfTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3Qgbm9NaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oTk9fTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3QgdmF1bHQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShWQVVMVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5jbG9zZU1hcmtldEFjY291bnQoKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldCxcbiAgICAgICAgeWVzTWludCxcbiAgICAgICAgbm9NaW50LFxuICAgICAgICB2YXVsdCxcbiAgICAgICAgYWRtaW4sXG4gICAgICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgICAgdG9rZW4yMDIyUHJvZ3JhbTogVE9LRU5fMjAyMl9QUk9HUkFNX0lELFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gY2xvc2UgbWFya2V0IGFjY291bnRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ2xvc2VNYXJrZXRBY2NvdW50VHgoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmNsb3NlTWFya2V0QWNjb3VudChhZG1pbiwgbWFya2V0KTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdXJuIHdvcnRobGVzcyB0b2tlbnMgZnJvbSB0aGUgbG9zaW5nIHNpZGUgb2YgYSByZXNvbHZlZCBtYXJrZXQuXG4gICAqIFRoaXMgYWxsb3dzIHVzZXJzIHRvIGNsZWFuIHVwIHRoZWlyIGxvc2luZyB0b2tlbnMgc28gdGhlIG1hcmtldCBhY2NvdW50IGNhbiBiZSBjbG9zZWQuXG4gICAqIEBwYXJhbSB1c2VyIC0gVGhlIHVzZXIgd2hvIGhvbGRzIGxvc2luZyB0b2tlbnNcbiAgICogQHBhcmFtIG1hcmtldCAtIFRoZSBtYXJrZXQgUERBXG4gICAqIEBwYXJhbSBsb3NpbmdPdXRjb21lIC0gVGhlIG91dGNvbWUgdGhhdCBsb3N0ICh0aGUgc2lkZSB0byBidXJuKVxuICAgKiBAcGFyYW0gdG9rZW5BbW91bnQgLSBBbW91bnQgdG8gYnVybiAoMCA9IGJ1cm4gYWxsKVxuICAgKiBAcGFyYW0gY2xvc2VBY2NvdW50IC0gV2hldGhlciB0byBjbG9zZSB0aGUgbG9zaW5nIHRva2VuIGFjY291bnQgYWZ0ZXIgYnVybmluZyBhbGwgdG9rZW5zIChkZWZhdWx0OiBmYWxzZSlcbiAgICovXG4gIGFzeW5jIGJ1cm5NYXJrZXRUb2tlbnMoXG4gICAgdXNlcjogUHVibGljS2V5LFxuICAgIG1hcmtldDogUHVibGljS2V5LFxuICAgIGxvc2luZ091dGNvbWU6IE91dGNvbWUsXG4gICAgdG9rZW5BbW91bnQ6IG51bWJlciB8IEJOID0gMCxcbiAgICBjbG9zZUFjY291bnQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICAvLyBEZXJpdmUgUERBc1xuICAgIGNvbnN0IHllc01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShZRVNfTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3Qgbm9NaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oTk9fTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG5cbiAgICAvLyBUaGUgbG9zaW5nIG1pbnQgaXMgdGhlIHNpZGUgdGhhdCBsb3N0XG4gICAgY29uc3QgbG9zaW5nTWludCA9IGxvc2luZ091dGNvbWUgPT09IFwiWWVzXCIgPyB5ZXNNaW50IDogbm9NaW50O1xuICAgIGNvbnN0IHVzZXJMb3NpbmdUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGxvc2luZ01pbnQsIHVzZXIsIGZhbHNlLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuYnVybk1hcmtldFRva2Vucyh7XG4gICAgICAgIHRva2VuQW1vdW50OiBuZXcgQk4odG9rZW5BbW91bnQpLFxuICAgICAgICBjbG9zZUFjY291bnQsXG4gICAgICB9KVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldCxcbiAgICAgICAgeWVzTWludCxcbiAgICAgICAgbm9NaW50LFxuICAgICAgICBsb3NpbmdNaW50LFxuICAgICAgICB1c2VyTG9zaW5nVG9rZW4sXG4gICAgICAgIHVzZXIsXG4gICAgICAgIHRva2VuMjAyMlByb2dyYW06IFRPS0VOXzIwMjJfUFJPR1JBTV9JRCxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIGJ1cm4gbWFya2V0IHRva2Vuc1xuICAgKiBAcGFyYW0gY2xvc2VBY2NvdW50IC0gV2hldGhlciB0byBjbG9zZSB0aGUgbG9zaW5nIHRva2VuIGFjY291bnQgYWZ0ZXIgYnVybmluZyBhbGwgdG9rZW5zIChkZWZhdWx0OiBmYWxzZSlcbiAgICovXG4gIGFzeW5jIGJ1aWxkQnVybk1hcmtldFRva2Vuc1R4KFxuICAgIHVzZXI6IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleSxcbiAgICBsb3NpbmdPdXRjb21lOiBPdXRjb21lLFxuICAgIHRva2VuQW1vdW50OiBudW1iZXIgfCBCTiA9IDAsXG4gICAgY2xvc2VBY2NvdW50OiBib29sZWFuID0gdHJ1ZVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmJ1cm5NYXJrZXRUb2tlbnModXNlciwgbWFya2V0LCBsb3NpbmdPdXRjb21lLCB0b2tlbkFtb3VudCwgY2xvc2VBY2NvdW50KTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGdsb2JhbCBjb25maWcgYWNjb3VudCBkYXRhXG4gICAqL1xuICBhc3luYyBnZXRHbG9iYWxDb25maWdBY2NvdW50KCkge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLmFjY291bnQuZ2xvYmFsQ29uZmlnLmZldGNoKGdsb2JhbENvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggbWFya2V0IGFjY291bnQgZGF0YVxuICAgKi9cbiAgYXN5bmMgZ2V0TWFya2V0QWNjb3VudChhZG1pbjogUHVibGljS2V5LCBtYXJrZXRJZDogbnVtYmVyIHwgQk4pIHtcbiAgICBjb25zdCBtYXJrZXRJZEJuID0gbmV3IEJOKG1hcmtldElkKTtcbiAgICBjb25zdCBtYXJrZXRQZGEgPSBnZXRNYXJrZXRQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCwgYWRtaW4sIG1hcmtldElkQm4pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0uYWNjb3VudC5tYXJrZXQuZmV0Y2gobWFya2V0UGRhKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1hcmtldEluZm8obWFya2V0UGRhOiBQdWJsaWNLZXkpIHtcbiAgICBjb25zdCBtYXJrZXRBY2NvdW50ID0gYXdhaXQgdGhpcy5wcm9ncmFtLmFjY291bnQubWFya2V0LmZldGNoKG1hcmtldFBkYSk7XG4gICAgcmV0dXJuIG1hcmtldEFjY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdmF1bHQgYWNjb3VudCBkYXRhXG4gICAqL1xuICBhc3luYyBnZXRWYXVsdEFjY291bnQobWFya2V0UGRhOiBQdWJsaWNLZXkpIHtcbiAgICBjb25zdCB2YXVsdFBkYSA9IGdldFZhdWx0UGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQsIG1hcmtldFBkYSk7XG4gICAgcmV0dXJuIGF3YWl0IGdldEFjY291bnQodGhpcy5jb25uZWN0aW9uLCB2YXVsdFBkYSk7XG4gIH1cbn1cbiJdfQ==
686
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixVQUFVLEVBQ1YsNkJBQTZCLEVBQzdCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDakIsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQUUsT0FBTyxJQUFJLGFBQWEsRUFBRSxjQUFjLEVBQXdCLE1BQU0sbUJBQW1CLENBQUM7QUFFbkcsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRXZCLE9BQU8sRUFFTCxPQUFPLEVBQ1AsU0FBUyxFQUNULGFBQWEsRUFDYixXQUFXLEVBQ1gsc0JBQXNCLEVBQ3ZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsYUFBYSxFQUNkLE1BQU0sWUFBWSxDQUFDO0FBRXBCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLE9BQU8sRUFBVyxHQUFHLEVBQUUsQ0FBQztBQTZEeEIsTUFBTSxPQUFPLGFBQWE7SUFLeEIsWUFBWSxVQUFzQixFQUFFLE1BQWUsRUFBRSxTQUFxQjtRQUN4RSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUU3QiwyQ0FBMkM7UUFDM0MsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFXO1lBQzVCLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxlQUFlLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNqQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHO1lBQ3ZDLEtBQUssRUFBRSxj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QyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRSxPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFvQjtRQUN0QyxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekUsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxTQUFvQjtRQUN4QyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEUsT0FBTyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFTU09DSUFURURfVE9LRU5fUFJPR1JBTV9JRCxcbiAgZ2V0QWNjb3VudCxcbiAgZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMsXG4gIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCxcbiAgVE9LRU5fUFJPR1JBTV9JRFxufSBmcm9tIFwiQHNvbGFuYS9zcGwtdG9rZW5cIjtcblxuaW1wb3J0IHsgUHJvZ3JhbSBhcyBBbmNob3JQcm9ncmFtLCBBbmNob3JQcm92aWRlciwgSWRsLCBQcm9ncmFtLCBXYWxsZXQgfSBmcm9tIFwiQGNvcmFsLXh5ei9hbmNob3JcIjtcblxuaW1wb3J0IEJOIGZyb20gXCJibi5qc1wiO1xuXG5pbXBvcnQge1xuICBDb25uZWN0aW9uLFxuICBLZXlwYWlyLFxuICBQdWJsaWNLZXksXG4gIFN5c3RlbVByb2dyYW0sXG4gIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkluc3RydWN0aW9uXG59IGZyb20gXCJAc29sYW5hL3dlYjMuanNcIjtcbmltcG9ydCB7IElETCB9IGZyb20gXCIuL2lkbC5qc1wiO1xuaW1wb3J0IHsgRHJhbWFQbSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQge1xuICBnZXRHbG9iYWxDb25maWdQZGEsXG4gIGdldE1hcmtldFBkYSxcbiAgZ2V0TWFya2V0UGRhcyxcbiAgZ2V0VmF1bHRQZGEsXG4gIE5PX01JTlRfU0VFRCxcbiAgVkFVTFRfU0VFRCxcbiAgWUVTX01JTlRfU0VFRFxufSBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy5qc1wiO1xuZXhwb3J0IHsgRHJhbWFQbSwgSURMIH07XG5cbmV4cG9ydCB0eXBlIE91dGNvbWUgPSBcIlllc1wiIHwgXCJOb1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU1hcmtldFBhcmFtcyB7XG4gIGFkbWluOiBQdWJsaWNLZXk7XG4gIG1hcmtldElkOiBudW1iZXIgfCBCTjtcbiAgeWVzUHJpY2U6IG51bWJlciB8IEJOO1xuICBub1ByaWNlOiBudW1iZXIgfCBCTjtcbiAgZW5kVGltZTogbnVtYmVyIHwgQk47XG4gIGJldHRpbmdUb2tlbjogUHVibGljS2V5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlQmV0UGFyYW1zIHtcbiAgdXNlcjogUHVibGljS2V5O1xuICBtYXJrZXQ6IFB1YmxpY0tleTsgLy8gTWFya2V0IFBEQSBhZGRyZXNzXG4gIGFtb3VudDogbnVtYmVyIHwgQk47XG4gIG91dGNvbWU6IE91dGNvbWU7XG4gIGJldHRpbmdUb2tlbjogUHVibGljS2V5O1xuICBmZWVSZWNpcGllbnQ/OiBQdWJsaWNLZXk7IC8vIEZlZSByZWNpcGllbnQgYWRkcmVzcyAob3B0aW9uYWwsIHdpbGwgZmV0Y2ggZnJvbSBjb25maWcgaWYgbm90IHByb3ZpZGVkKVxuICBmZWVSZWNpcGllbnRUb2tlbj86IFB1YmxpY0tleSB8IG51bGw7IC8vIEZlZSByZWNpcGllbnQgdG9rZW4gYWNjb3VudCAob3B0aW9uYWwsIHVzZWQgaW50ZXJuYWxseSBieSBidWlsZFBsYWNlQmV0VHgpXG4gIGNyZWF0ZUF0YT86IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gY3JlYXRlIEFUQSBpbnN0cnVjdGlvbiBhdXRvbWF0aWNhbGx5XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRmVlQ29uZmlnUGFyYW1zIHtcbiAgYXV0aG9yaXR5OiBQdWJsaWNLZXk7IC8vIENhbiBiZSBhdXRob3JpdHkgb3IgYXV0aG9yaXplZCBhZG1pblxuICBuZXdGZWVCcHM6IG51bWJlcjsgLy8gRmVlIGluIGJhc2lzIHBvaW50cyAoMSBicHMgPSAwLjAxJSwgbWF4IDIwMDAgPSAyMCUpXG4gIG5ld0ZlZVJlY2lwaWVudDogUHVibGljS2V5O1xuICBuZXdGZWVDbGFpbUJwczogbnVtYmVyOyAvLyBGZWUgZm9yIGNsYWltaW5nIHJld2FyZHMgaW4gYmFzaXMgcG9pbnRzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhaW1SZXdhcmRzUGFyYW1zIHtcbiAgdXNlcjogUHVibGljS2V5O1xuICBtYXJrZXQ6IFB1YmxpY0tleTsgLy8gTWFya2V0IFBEQSBhZGRyZXNzXG4gIGJldHRpbmdUb2tlbjogUHVibGljS2V5O1xuICB3aW5uaW5nT3V0Y29tZTogT3V0Y29tZTtcbiAgc2hhcmVzVG9DbGFpbTogbnVtYmVyIHwgQk47IC8vIEFtb3VudCBvZiBzaGFyZXMgdG8gY2xhaW0gKDAgPSBjbGFpbSBhbGwpXG4gIGNsb3NlQWNjb3VudD86IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gY2xvc2UgdGhlIG91dGNvbWUgdG9rZW4gYWNjb3VudCBhZnRlciBjbGFpbWluZyBhbGwgc2hhcmVzIChkZWZhdWx0OiBmYWxzZSlcbiAgZmVlUmVjaXBpZW50PzogUHVibGljS2V5OyAvLyBGZWUgcmVjaXBpZW50IGFkZHJlc3MgKG9wdGlvbmFsLCB3aWxsIGZldGNoIGZyb20gY29uZmlnIGlmIG5vdCBwcm92aWRlZClcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXRjaENsYWltUGFyYW1zIHtcbiAgdXNlcjogUHVibGljS2V5O1xuICBjbGFpbXM6IEFycmF5PHtcbiAgICBtYXJrZXQ6IFB1YmxpY0tleTtcbiAgICBiZXR0aW5nVG9rZW46IFB1YmxpY0tleTtcbiAgICB3aW5uaW5nT3V0Y29tZTogT3V0Y29tZTtcbiAgICBzaGFyZXNUb0NsYWltPzogbnVtYmVyIHwgQk47IC8vIEFtb3VudCBvZiBzaGFyZXMgdG8gY2xhaW0gKDAgb3IgdW5kZWZpbmVkID0gY2xhaW0gYWxsKVxuICAgIGNsb3NlQWNjb3VudD86IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gY2xvc2UgdGhlIG91dGNvbWUgdG9rZW4gYWNjb3VudCBhZnRlciBjbGFpbWluZyBhbGwgc2hhcmVzXG4gIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZnVuZFBhcmFtcyB7XG4gIHVzZXI6IFB1YmxpY0tleTtcbiAgbWFya2V0OiBQdWJsaWNLZXk7IC8vIE1hcmtldCBQREEgYWRkcmVzc1xuICBiZXR0aW5nVG9rZW46IFB1YmxpY0tleTtcbiAgb3V0Y29tZTogT3V0Y29tZTtcbiAgdG9rZW5BbW91bnQ/OiBudW1iZXIgfCBCTjsgLy8gQW1vdW50IG9mIHNoYXJlcyB0byByZWZ1bmQuIDAgb3IgdW5kZWZpbmVkIG1lYW5zIHJlZnVuZCBhbGwgc2hhcmVzLlxuICBjbG9zZUFjY291bnQ/OiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGNsb3NlIHRoZSBvdXRjb21lIHRva2VuIGFjY291bnQgYWZ0ZXIgcmVmdW5kaW5nIGFsbCBzaGFyZXMgKGRlZmF1bHQ6IGZhbHNlKVxufVxuXG5leHBvcnQgY2xhc3MgRHJhbWFQbUNsaWVudCB7XG4gIHByb2dyYW06IFByb2dyYW08RHJhbWFQbT47XG4gIHByb3ZpZGVyOiBBbmNob3JQcm92aWRlcjtcbiAgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uLCB3YWxsZXQ/OiBXYWxsZXQsIHByb2dyYW1JZD86IFB1YmxpY0tleSkge1xuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgXG4gICAgLy8gQ3JlYXRlIGEgZGVmYXVsdCB3YWxsZXQgaWYgbm9uZSBwcm92aWRlZFxuICAgIGNvbnN0IGRlZmF1bHRLZXlwYWlyID0gS2V5cGFpci5nZW5lcmF0ZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRXYWxsZXQ6IFdhbGxldCA9IHtcbiAgICAgIHB1YmxpY0tleTogZGVmYXVsdEtleXBhaXIucHVibGljS2V5LFxuICAgICAgc2lnblRyYW5zYWN0aW9uOiBhc3luYyAodHgpID0+IHR4LFxuICAgICAgc2lnbkFsbFRyYW5zYWN0aW9uczogYXN5bmMgKHR4cykgPT4gdHhzLFxuICAgICAgcGF5ZXI6IGRlZmF1bHRLZXlwYWlyLFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5wcm92aWRlciA9IG5ldyBBbmNob3JQcm92aWRlcihcbiAgICAgIGNvbm5lY3Rpb24sXG4gICAgICB3YWxsZXQgfHwgZGVmYXVsdFdhbGxldCxcbiAgICAgIHsgY29tbWl0bWVudDogXCJjb25maXJtZWRcIiB9XG4gICAgKTtcbiAgICBcbiAgICAvLyBVc2UgY3VzdG9tIHByb2dyYW1JZCBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIHVzZSB0aGUgZGVmYXVsdCBmcm9tIElETFxuICAgIGNvbnN0IGZpbmFsUHJvZ3JhbUlkID0gcHJvZ3JhbUlkIHx8IG5ldyBQdWJsaWNLZXkoSURMLmFkZHJlc3MpO1xuICAgIFxuICAgIC8vIENyZWF0ZSBhIG5ldyBJREwgd2l0aCB0aGUgY3VzdG9tIHByb2dyYW1JZFxuICAgIGNvbnN0IGN1c3RvbUlkbCA9IHsgLi4uSURMLCBhZGRyZXNzOiBmaW5hbFByb2dyYW1JZC50b0Jhc2U1OCgpIH07XG4gICAgXG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IEFuY2hvclByb2dyYW0oY3VzdG9tSWRsIGFzIElkbCwgdGhpcy5wcm92aWRlcikgYXMgdW5rbm93biBhcyBQcm9ncmFtPERyYW1hUG0+O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBwcm9ncmFtIElEXG4gICAqL1xuICBnZXRQcm9ncmFtSWQoKTogUHVibGljS2V5IHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtLnByb2dyYW1JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgcHJvZ3JhbSBJRCBhbmQgcmVpbml0aWFsaXplIHRoZSBwcm9ncmFtIGluc3RhbmNlXG4gICAqIFVzZWZ1bCB3aGVuIHJlZGVwbG95aW5nIHRoZSBwcm9ncmFtIHRvIGEgbmV3IGFkZHJlc3NcbiAgICovXG4gIHNldFByb2dyYW1JZChwcm9ncmFtSWQ6IFB1YmxpY0tleSk6IHZvaWQge1xuICAgIGNvbnN0IGN1c3RvbUlkbCA9IHsgLi4uSURMLCBhZGRyZXNzOiBwcm9ncmFtSWQudG9CYXNlNTgoKSB9O1xuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBBbmNob3JQcm9ncmFtKGN1c3RvbUlkbCBhcyBJZGwsIHRoaXMucHJvdmlkZXIpIGFzIHVua25vd24gYXMgUHJvZ3JhbTxEcmFtYVBtPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhc3NvY2lhdGVkIHRva2VuIGFjY291bnQgZXhpc3RzXG4gICAqL1xuICBhc3luYyBhdGFFeGlzdHMoYXRhOiBQdWJsaWNLZXkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZ2V0QWNjb3VudCh0aGlzLmNvbm5lY3Rpb24sIGF0YSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RydWN0aW9uIHRvIGluaXRpYWxpemUgYW4gYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50XG4gICAqIEBwYXJhbSB0b2tlblByb2dyYW0gLSBUb2tlbiBwcm9ncmFtIElEIChUT0tFTl9QUk9HUkFNX0lEIGZvciBiZXR0aW5nIHRva2VuLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQgZm9yIG91dGNvbWUgdG9rZW5zKVxuICAgKi9cbiAgY3JlYXRlQXRhSW5zdHJ1Y3Rpb24oXG4gICAgcGF5ZXI6IFB1YmxpY0tleSxcbiAgICBvd25lcjogUHVibGljS2V5LFxuICAgIG1pbnQ6IFB1YmxpY0tleSxcbiAgICB0b2tlblByb2dyYW06IFB1YmxpY0tleSA9IFRPS0VOX1BST0dSQU1fSURcbiAgKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiB7XG4gICAgY29uc3QgYXRhID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobWludCwgb3duZXIsIHRydWUsIHRva2VuUHJvZ3JhbSk7XG4gICAgXG4gICAgLy8gVXNlIENyZWF0ZUlkZW1wb3RlbnQgaW5zdHJ1Y3Rpb24gKG9wY29kZSAxKSB0byBzdXBwb3J0IFBEQXMgYW5kIGlkZW1wb3RlbmN5XG4gICAgY29uc3Qga2V5cyA9IFtcbiAgICAgIHsgcHVia2V5OiBwYXllciwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICAgIHsgcHVia2V5OiBhdGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IG93bmVyLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICB7IHB1YmtleTogbWludCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgeyBwdWJrZXk6IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICB7IHB1YmtleTogdG9rZW5Qcm9ncmFtLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgXTtcblxuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgICBrZXlzLFxuICAgICAgcHJvZ3JhbUlkOiBBU1NPQ0lBVEVEX1RPS0VOX1BST0dSQU1fSUQsXG4gICAgICBkYXRhOiBCdWZmZXIuZnJvbShbMV0pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gKEF1dGhvcml0eSBvbmx5KVxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZUNvbmZpZyhhdXRob3JpdHk6IFB1YmxpY0tleSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5pbml0aWFsaXplQ29uZmlnKClcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgIGF1dGhvcml0eTogYXV0aG9yaXR5LFxuICAgICAgICBzeXN0ZW1Qcm9ncmFtOiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgY29uZmlnXG4gICAqL1xuICBhc3luYyBidWlsZEluaXRpYWxpemVDb25maWdUeChhdXRob3JpdHk6IFB1YmxpY0tleSk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUNvbmZpZyhhdXRob3JpdHkpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pZ3JhdGUgR2xvYmFsQ29uZmlnIHRvIG5ldyB2ZXJzaW9uIHdpdGggZmVlX2NsYWltX2JwcyBmaWVsZCAoQXV0aG9yaXR5IG9ubHkpXG4gICAqIFNob3VsZCBiZSBjYWxsZWQgb25jZSBhZnRlciBwcm9ncmFtIHVwZ3JhZGVcbiAgICovXG4gIGFzeW5jIG1pZ3JhdGVDb25maWcoYXV0aG9yaXR5OiBQdWJsaWNLZXkpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAubWlncmF0ZUNvbmZpZygpXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAgICBhdXRob3JpdHk6IGF1dGhvcml0eSxcbiAgICAgICAgc3lzdGVtUHJvZ3JhbTogU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQsXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byBtaWdyYXRlIGNvbmZpZ1xuICAgKi9cbiAgYXN5bmMgYnVpbGRNaWdyYXRlQ29uZmlnVHgoYXV0aG9yaXR5OiBQdWJsaWNLZXkpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLm1pZ3JhdGVDb25maWcoYXV0aG9yaXR5KTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYXV0aG9yaXplZCBhZG1pbiAoQXV0aG9yaXR5IG9ubHkpXG4gICAqL1xuICBhc3luYyBhZGRBZG1pbihuZXdBZG1pbjogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuYWRkQWRtaW4obmV3QWRtaW4pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gdXBkYXRlIGFkbWluXG4gICAqL1xuICBhc3luYyBidWlsZEFkZEFkbWluVHgobmV3QWRtaW46IFB1YmxpY0tleSk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMuYWRkQWRtaW4obmV3QWRtaW4pO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhdXRob3JpemVkIGFkbWluIChBdXRob3JpdHkgb25seSlcbiAgICovXG4gIGFzeW5jIHJlbW92ZUFkbWluKGFkbWluVG9SZW1vdmU6IFB1YmxpY0tleSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLnJlbW92ZUFkbWluKGFkbWluVG9SZW1vdmUpXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gcmVtb3ZlIGFkbWluXG4gICAqL1xuICBhc3luYyBidWlsZFJlbW92ZUFkbWluVHgoYWRtaW5Ub1JlbW92ZTogUHVibGljS2V5KTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5yZW1vdmVBZG1pbihhZG1pblRvUmVtb3ZlKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZmVlIGNvbmZpZ3VyYXRpb24gKEF1dGhvcml0eSBvciBhdXRob3JpemVkIGFkbWluKVxuICAgKi9cbiAgYXN5bmMgdXBkYXRlRmVlQ29uZmlnKHBhcmFtczogVXBkYXRlRmVlQ29uZmlnUGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAudXBkYXRlRmVlQ29uZmlnKHBhcmFtcy5uZXdGZWVCcHMsIHBhcmFtcy5uZXdGZWVSZWNpcGllbnQsIHBhcmFtcy5uZXdGZWVDbGFpbUJwcylcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWc6IGdsb2JhbENvbmZpZyxcbiAgICAgICAgYXV0aG9yaXR5OiBwYXJhbXMuYXV0aG9yaXR5LFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gdXBkYXRlIGZlZSBjb25maWdcbiAgICovXG4gIGFzeW5jIGJ1aWxkVXBkYXRlRmVlQ29uZmlnVHgocGFyYW1zOiBVcGRhdGVGZWVDb25maWdQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLnVwZGF0ZUZlZUNvbmZpZyhwYXJhbXMpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBwcmVkaWN0aW9uIG1hcmtldCBpbnN0cnVjdGlvblxuICAgKi9cbiAgYXN5bmMgY3JlYXRlTWFya2V0KHBhcmFtczogQ3JlYXRlTWFya2V0UGFyYW1zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgeyBhZG1pbiwgbWFya2V0SWQsIHllc1ByaWNlLCBub1ByaWNlLCBlbmRUaW1lLCBiZXR0aW5nVG9rZW4gfSA9IHBhcmFtcztcbiAgICBcbiAgICBjb25zdCBtYXJrZXRJZEJuID0gbmV3IEJOKG1hcmtldElkKTtcbiAgICBjb25zdCB5ZXNQcmljZUJuID0gbmV3IEJOKHllc1ByaWNlKTtcbiAgICBjb25zdCBub1ByaWNlQm4gPSBuZXcgQk4obm9QcmljZSk7XG4gICAgY29uc3QgZW5kVGltZUJuID0gbmV3IEJOKGVuZFRpbWUpO1xuXG4gICAgY29uc3QgcGRhcyA9IGdldE1hcmtldFBkYXModGhpcy5wcm9ncmFtLnByb2dyYW1JZCwgYWRtaW4sIG1hcmtldElkQm4pO1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmNyZWF0ZU1hcmtldCh7XG4gICAgICAgICAgbWFya2V0SWQ6IG1hcmtldElkQm4sXG4gICAgICAgICAgeWVzUHJpY2U6IHllc1ByaWNlQm4sXG4gICAgICAgICAgbm9QcmljZTogbm9QcmljZUJuLFxuICAgICAgICAgIGVuZFRpbWU6IGVuZFRpbWVCbixcbiAgICAgICAgfSlcbiAgICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAgICAgIG1hcmtldDogcGRhcy5tYXJrZXQsXG4gICAgICAgICAgeWVzTWludDogcGRhcy55ZXNNaW50LFxuICAgICAgICAgIG5vTWludDogcGRhcy5ub01pbnQsXG4gICAgICAgICAgYmV0dGluZ1Rva2VuOiBiZXR0aW5nVG9rZW4sXG4gICAgICAgICAgdmF1bHQ6IHBkYXMudmF1bHQsXG4gICAgICAgICAgYWRtaW46IGFkbWluLFxuICAgICAgICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgICAgICBzeXN0ZW1Qcm9ncmFtOiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCxcbiAgICAgICAgfSlcbiAgICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byBjcmVhdGUgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ3JlYXRlTWFya2V0VHgocGFyYW1zOiBDcmVhdGVNYXJrZXRQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmNyZWF0ZU1hcmtldChwYXJhbXMpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsYWNlIGEgYmV0IGluc3RydWN0aW9uICh3aXRob3V0IEFUQSBjcmVhdGlvbilcbiAgICovXG4gIGFzeW5jIHBsYWNlQmV0KHBhcmFtczogUGxhY2VCZXRQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCB7IHVzZXIsIG1hcmtldCwgYW1vdW50LCBvdXRjb21lLCBiZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudFRva2VuIH0gPSBwYXJhbXM7XG4gICAgXG4gICAgY29uc3QgYW1vdW50Qm4gPSBuZXcgQk4oYW1vdW50KTtcbiAgICBjb25zdCBvdXRjb21lRW51bSA9IG91dGNvbWUgPT09IFwiWWVzXCIgPyB7IHllczoge30gfSA6IHsgbm86IHt9IH07XG5cbiAgICAvLyBHZXQgZ2xvYmFsIGNvbmZpZyBmb3IgZmVlIGluZm9cbiAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRHbG9iYWxDb25maWdQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgICAvLyBEZXJpdmUgUERBcyBmcm9tIG1hcmtldCBhZGRyZXNzXG4gICAgY29uc3QgeWVzTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFlFU19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCBub01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShOT19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCB2YXVsdCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFZBVUxUX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIGNvbnN0IHVzZXJCZXR0aW5nVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhiZXR0aW5nVG9rZW4sIHVzZXIpO1xuICAgIFxuICAgIC8vIERldGVybWluZSB3aGljaCBvdXRjb21lIHRva2VuIHRoZSB1c2VyIHdpbGwgcmVjZWl2ZVxuICAgIC8vIE91dGNvbWUgdG9rZW5zIChZZXMvTm8pIHVzZSBUb2tlbi0yMDIyIHByb2dyYW1cbiAgICBjb25zdCB0YXJnZXRNaW50ID0gb3V0Y29tZSA9PT0gXCJZZXNcIiA/IHllc01pbnQgOiBub01pbnQ7XG4gICAgY29uc3QgdXNlck91dGNvbWVUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHRhcmdldE1pbnQsIHVzZXIsIGZhbHNlLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAucGxhY2VCZXQoe1xuICAgICAgICBidXlPdXRjb21lOiBvdXRjb21lRW51bSxcbiAgICAgICAgYW1vdW50OiBhbW91bnRCbixcbiAgICAgIH0pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAgICBtYXJrZXQsXG4gICAgICAgIHllc01pbnQsXG4gICAgICAgIG5vTWludCxcbiAgICAgICAgdmF1bHQsXG4gICAgICAgIGZlZVJlY2lwaWVudFRva2VuOiBmZWVSZWNpcGllbnRUb2tlbiB8fCBudWxsLFxuICAgICAgICB1c2VyT3V0Y29tZVRva2VuLFxuICAgICAgICB1c2VyQmV0dGluZ1Rva2VuLFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gcGxhY2UgYSBiZXQgKHdpdGggb3B0aW9uYWwgQVRBIGNyZWF0aW9uIGZvciBib3RoIG91dGNvbWUgdG9rZW4gYW5kIGZlZSByZWNpcGllbnQpXG4gICAqL1xuICBhc3luYyBidWlsZFBsYWNlQmV0VHgocGFyYW1zOiBQbGFjZUJldFBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB7IHVzZXIsIG1hcmtldCwgb3V0Y29tZSwgYmV0dGluZ1Rva2VuLCBjcmVhdGVBdGEgPSB0cnVlIH0gPSBwYXJhbXM7XG4gICAgXG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcbiAgICBcbiAgICAvLyBGZXRjaCBjb25maWcgdG8gY2hlY2sgZmVlX2Jwc1xuICAgIGNvbnN0IGNvbmZpZ0FjY291bnQgPSBhd2FpdCB0aGlzLmdldEdsb2JhbENvbmZpZ0FjY291bnQoKTtcbiAgICBcbiAgICAvLyBEZXJpdmUgbWludCBQREFzIGZyb20gbWFya2V0IGFkZHJlc3NcbiAgICBjb25zdCB5ZXNNaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oWUVTX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuICAgIGNvbnN0IG5vTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKE5PX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuICAgIFxuICAgIC8vIE91dGNvbWUgdG9rZW5zIChZZXMvTm8pIHVzZSBUb2tlbi0yMDIyIHByb2dyYW1cbiAgICBjb25zdCB0YXJnZXRNaW50ID0gb3V0Y29tZSA9PT0gXCJZZXNcIiA/IHllc01pbnQgOiBub01pbnQ7XG4gICAgY29uc3QgdXNlck91dGNvbWVUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHRhcmdldE1pbnQsIHVzZXIsIGZhbHNlLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdXNlciBvdXRjb21lIEFUQSBleGlzdHMgYW5kIGNyZWF0ZSBpZiBuZWVkZWRcbiAgICBpZiAoY3JlYXRlQXRhKSB7XG4gICAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmF0YUV4aXN0cyh1c2VyT3V0Y29tZVRva2VuKTtcbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUF0YUl4ID0gdGhpcy5jcmVhdGVBdGFJbnN0cnVjdGlvbih1c2VyLCB1c2VyLCB0YXJnZXRNaW50LCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuICAgICAgICB0eC5hZGQoY3JlYXRlQXRhSXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBmZWUgcmVjaXBpZW50IHRva2VuIGFjY291bnQgaWYgZmVlX2JwcyA+IDBcbiAgICBsZXQgZmVlUmVjaXBpZW50VG9rZW46IFB1YmxpY0tleSB8IG51bGwgPSBudWxsO1xuICAgIGlmIChjb25maWdBY2NvdW50LmZlZUJwcyA+IDApIHtcbiAgICAgIGNvbnN0IGZlZVJlY2lwaWVudEFkZHJlc3MgPSBwYXJhbXMuZmVlUmVjaXBpZW50IHx8IGNvbmZpZ0FjY291bnQuZmVlUmVjaXBpZW50O1xuICAgICAgZmVlUmVjaXBpZW50VG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhiZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudEFkZHJlc3MpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBmZWUgcmVjaXBpZW50IEFUQSBleGlzdHMgYW5kIGNyZWF0ZSBpZiBuZWVkZWRcbiAgICAgIGNvbnN0IGZlZUF0YUV4aXN0cyA9IGF3YWl0IHRoaXMuYXRhRXhpc3RzKGZlZVJlY2lwaWVudFRva2VuKTtcbiAgICAgIGlmICghZmVlQXRhRXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUZlZUF0YUl4ID0gdGhpcy5jcmVhdGVBdGFJbnN0cnVjdGlvbih1c2VyLCBmZWVSZWNpcGllbnRBZGRyZXNzLCBiZXR0aW5nVG9rZW4pO1xuICAgICAgICB0eC5hZGQoY3JlYXRlRmVlQXRhSXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBsYWNlQmV0SXggPSBhd2FpdCB0aGlzLnBsYWNlQmV0KHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIGZlZVJlY2lwaWVudFRva2VuLFxuICAgIH0pO1xuICAgIHR4LmFkZChwbGFjZUJldEl4KTtcblxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGFpbSByZXdhcmRzIGFmdGVyIG1hcmtldCByZXNvbHV0aW9uXG4gICAqL1xuICBhc3luYyBjbGFpbVJld2FyZHMocGFyYW1zOiBDbGFpbVJld2FyZHNQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICBjb25zdCB7IHVzZXIsIG1hcmtldCwgYmV0dGluZ1Rva2VuLCB3aW5uaW5nT3V0Y29tZSB9ID0gcGFyYW1zO1xuXG4gICAgLy8gRGVyaXZlIG1pbnQgUERBcyBmcm9tIG1hcmtldCBhZGRyZXNzXG4gICAgY29uc3QgeWVzTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFlFU19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcbiAgICBjb25zdCBub01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShOT19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIC8vIERlcml2ZSB2YXVsdCBQREFcbiAgICBjb25zdCB2YXVsdCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFZBVUxUX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIGNvbnN0IHVzZXJCZXR0aW5nVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhiZXR0aW5nVG9rZW4sIHVzZXIpO1xuICAgIC8vIE91dGNvbWUgdG9rZW5zIChZZXMvTm8pIHVzZSBUb2tlbi0yMDIyIHByb2dyYW1cbiAgICBjb25zdCB0YXJnZXRNaW50ID0gd2lubmluZ091dGNvbWUgPT09IFwiWWVzXCIgPyB5ZXNNaW50IDogbm9NaW50O1xuICAgIGNvbnN0IHVzZXJPdXRjb21lVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh0YXJnZXRNaW50LCB1c2VyLCBmYWxzZSwgVE9LRU5fMjAyMl9QUk9HUkFNX0lEKTtcbiAgICBjb25zdCBzaGFyZXNUb0NsYWltQm4gPSBuZXcgQk4ocGFyYW1zLnNoYXJlc1RvQ2xhaW0pO1xuICAgIGNvbnN0IGNsb3NlQWNjb3VudCA9IHBhcmFtcy5jbG9zZUFjY291bnQgPz8gdHJ1ZTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5jbGFpbVJld2FyZHMoe1xuICAgICAgICB0b2tlbkFtb3VudDogc2hhcmVzVG9DbGFpbUJuLFxuICAgICAgICBjbG9zZUFjY291bnQsXG4gICAgICB9KVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldCxcbiAgICAgICAgeWVzTWludCxcbiAgICAgICAgbm9NaW50LFxuICAgICAgICB2YXVsdCxcbiAgICAgICAgdXNlck91dGNvbWVUb2tlbixcbiAgICAgICAgdXNlckJldHRpbmdUb2tlbixcbiAgICAgICAgdXNlcixcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIGNsYWltIHJld2FyZHNcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ2xhaW1SZXdhcmRzVHgocGFyYW1zOiBDbGFpbVJld2FyZHNQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgeyB1c2VyLCBtYXJrZXQsIGJldHRpbmdUb2tlbiwgd2lubmluZ091dGNvbWUgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbigpO1xuXG4gICAgLy8gRGVyaXZlIG1pbnQgUERBcyBmcm9tIG1hcmtldCBhZGRyZXNzXG4gICAgY29uc3QgeWVzTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFlFU19NSU5UX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIGNvbnN0IG5vTWludCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKE5PX01JTlRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgLy8gRGVyaXZlIHZhdWx0IFBEQVxuICAgIGNvbnN0IHZhdWx0ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oVkFVTFRfU0VFRCksIG1hcmtldC50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgY29uc3QgdXNlckJldHRpbmdUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGJldHRpbmdUb2tlbiwgdXNlcik7XG4gICAgLy8gT3V0Y29tZSB0b2tlbnMgKFllcy9ObykgdXNlIFRva2VuLTIwMjIgcHJvZ3JhbVxuICAgIGNvbnN0IHRhcmdldE1pbnQgPSB3aW5uaW5nT3V0Y29tZSA9PT0gXCJZZXNcIiA/IHllc01pbnQgOiBub01pbnQ7XG4gICAgY29uc3QgdXNlck91dGNvbWVUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHRhcmdldE1pbnQsIHVzZXIsIGZhbHNlLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuICAgIGNvbnN0IHNoYXJlc1RvQ2xhaW1CbiA9IG5ldyBCTihwYXJhbXMuc2hhcmVzVG9DbGFpbSk7XG4gICAgY29uc3QgY2xvc2VBY2NvdW50ID0gcGFyYW1zLmNsb3NlQWNjb3VudCA/PyB0cnVlO1xuXG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmNsYWltUmV3YXJkcyh7XG4gICAgICAgIHRva2VuQW1vdW50OiBzaGFyZXNUb0NsYWltQm4sXG4gICAgICAgIGNsb3NlQWNjb3VudCxcbiAgICAgIH0pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgbWFya2V0LFxuICAgICAgICB5ZXNNaW50LFxuICAgICAgICBub01pbnQsXG4gICAgICAgIHZhdWx0LFxuICAgICAgICB1c2VyT3V0Y29tZVRva2VuLFxuICAgICAgICB1c2VyQmV0dGluZ1Rva2VuLFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICAgIFxuICAgIHR4LmFkZChpeCk7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGluc3RydWN0aW9ucyB0byBjbGFpbSByZXdhcmRzIGZyb20gbXVsdGlwbGUgbWFya2V0c1xuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGluc3RydWN0aW9ucyB0aGF0IGNhbiBiZSBiYXRjaGVkIGludG8gdHJhbnNhY3Rpb25zXG4gICAqL1xuICBhc3luYyBiYXRjaENsYWltUmV3YXJkcyhwYXJhbXM6IEJhdGNoQ2xhaW1QYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXT4ge1xuICAgIGNvbnN0IHsgdXNlciwgY2xhaW1zIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2xhaW0gb2YgY2xhaW1zKSB7XG4gICAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMuY2xhaW1SZXdhcmRzKHtcbiAgICAgICAgdXNlcixcbiAgICAgICAgbWFya2V0OiBjbGFpbS5tYXJrZXQsXG4gICAgICAgIGJldHRpbmdUb2tlbjogY2xhaW0uYmV0dGluZ1Rva2VuLFxuICAgICAgICB3aW5uaW5nT3V0Y29tZTogY2xhaW0ud2lubmluZ091dGNvbWUsXG4gICAgICAgIHNoYXJlc1RvQ2xhaW06IGNsYWltLnNoYXJlc1RvQ2xhaW0gPz8gMCxcbiAgICAgICAgY2xvc2VBY2NvdW50OiBjbGFpbS5jbG9zZUFjY291bnQgPz8gdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2goaXgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdHJhbnNhY3Rpb25zIHRvIGNsYWltIHJld2FyZHMgZnJvbSBtdWx0aXBsZSBtYXJrZXRzXG4gICAqIEF1dG9tYXRpY2FsbHkgc3BsaXRzIGludG8gbXVsdGlwbGUgdHJhbnNhY3Rpb25zIGlmIG5lZWRlZCAobWF4IDUgY2xhaW1zIHBlciB0eCB0byBhdm9pZCBzaXplIGxpbWl0cylcbiAgICogQHBhcmFtIHBhcmFtcyAtIEJhdGNoIGNsYWltIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG1heENsYWltc1BlclR4IC0gTWF4aW11bSBjbGFpbXMgcGVyIHRyYW5zYWN0aW9uIChkZWZhdWx0OiA1KVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB0cmFuc2FjdGlvbnNcbiAgICovXG4gIGFzeW5jIGJ1aWxkQmF0Y2hDbGFpbVJld2FyZHNUeChcbiAgICBwYXJhbXM6IEJhdGNoQ2xhaW1QYXJhbXMsXG4gICAgbWF4Q2xhaW1zUGVyVHg6IG51bWJlciA9IDVcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbltdPiB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gYXdhaXQgdGhpcy5iYXRjaENsYWltUmV3YXJkcyhwYXJhbXMpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25bXSA9IFtdO1xuXG4gICAgLy8gU3BsaXQgaW5zdHJ1Y3Rpb25zIGludG8gY2h1bmtzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpICs9IG1heENsYWltc1BlclR4KSB7XG4gICAgICBjb25zdCBjaHVuayA9IGluc3RydWN0aW9ucy5zbGljZShpLCBpICsgbWF4Q2xhaW1zUGVyVHgpO1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNodW5rLmZvckVhY2goaXggPT4gdHguYWRkKGl4KSk7XG4gICAgICB0cmFuc2FjdGlvbnMucHVzaCh0eCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZ1bmQgYmV0cyBpZiBtYXJrZXQgaXMgcmVmdW5kZWRcbiAgICogQHBhcmFtIHBhcmFtcy50b2tlbkFtb3VudCAtIEFtb3VudCBvZiBzaGFyZXMgdG8gcmVmdW5kLiAwIG9yIHVuZGVmaW5lZCBtZWFucyByZWZ1bmQgYWxsIHNoYXJlcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHBhcnRpYWxseSByZWZ1bmQgdGhlaXIgcG9zaXRpb24gYWNyb3NzIG11bHRpcGxlIHRyYW5zYWN0aW9ucy5cbiAgICovXG4gIGFzeW5jIHJlZnVuZChwYXJhbXM6IFJlZnVuZFBhcmFtcyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IHsgdXNlciwgbWFya2V0LCBiZXR0aW5nVG9rZW4sIG91dGNvbWUsIHRva2VuQW1vdW50LCBjbG9zZUFjY291bnQgPSB0cnVlIH0gPSBwYXJhbXM7XG4gICAgXG4gICAgY29uc3Qgb3V0Y29tZUVudW0gPSBvdXRjb21lID09PSBcIlllc1wiID8geyB5ZXM6IHt9IH0gOiB7IG5vOiB7fSB9O1xuICAgIFxuICAgIC8vIENvbnZlcnQgdG9rZW5BbW91bnQgdG8gQk4gKDAgbWVhbnMgcmVmdW5kIGFsbClcbiAgICBjb25zdCB0b2tlbkFtb3VudEJuID0gbmV3IEJOKHRva2VuQW1vdW50ID8/IDApO1xuICAgIFxuICAgIC8vIERlcml2ZSBtaW50IFBEQXMgZnJvbSBtYXJrZXQgYWRkcmVzc1xuICAgIGNvbnN0IHllc01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShZRVNfTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3Qgbm9NaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oTk9fTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG5cbiAgICAvLyBEZXJpdmUgdmF1bHQgUERBXG4gICAgY29uc3QgdmF1bHQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShWQVVMVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG5cbiAgICBjb25zdCB1c2VyQmV0dGluZ1Rva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMoYmV0dGluZ1Rva2VuLCB1c2VyKTtcbiAgICAvLyBPdXRjb21lIHRva2VucyAoWWVzL05vKSB1c2UgVG9rZW4tMjAyMiBwcm9ncmFtXG4gICAgY29uc3QgdGFyZ2V0TWludCA9IG91dGNvbWUgPT09IFwiWWVzXCIgPyB5ZXNNaW50IDogbm9NaW50O1xuICAgIGNvbnN0IHVzZXJPdXRjb21lVG9rZW4gPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh0YXJnZXRNaW50LCB1c2VyLCBmYWxzZSwgVE9LRU5fMjAyMl9QUk9HUkFNX0lEKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLnJlZnVuZCh7XG4gICAgICAgIG91dGNvbWU6IG91dGNvbWVFbnVtLFxuICAgICAgICB0b2tlbkFtb3VudDogdG9rZW5BbW91bnRCbixcbiAgICAgICAgY2xvc2VBY2NvdW50LFxuICAgICAgfSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBtYXJrZXQ6IG1hcmtldCxcbiAgICAgICAgeWVzTWludDogeWVzTWludCxcbiAgICAgICAgbm9NaW50OiBub01pbnQsXG4gICAgICAgIHZhdWx0OiB2YXVsdCxcbiAgICAgICAgdXNlck91dGNvbWVUb2tlbjogdXNlck91dGNvbWVUb2tlbixcbiAgICAgICAgdXNlckJldHRpbmdUb2tlbjogdXNlckJldHRpbmdUb2tlbixcbiAgICAgICAgdG9rZW5Qcm9ncmFtOiBUT0tFTl9QUk9HUkFNX0lELFxuICAgICAgICB0b2tlbjIwMjJQcm9ncmFtOiBUT0tFTl8yMDIyX1BST0dSQU1fSUQsXG4gICAgICAgIHVzZXI6IHVzZXIsXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byByZWZ1bmRcbiAgICovXG4gIGFzeW5jIGJ1aWxkUmVmdW5kVHgocGFyYW1zOiBSZWZ1bmRQYXJhbXMpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLnJlZnVuZChwYXJhbXMpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBtYXJrZXQgKEFkbWluIG9ubHkpXG4gICAqL1xuICBhc3luYyByZXNvbHZlTWFya2V0QnlJRChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldElkOiBudW1iZXIgfCBCTixcbiAgICB3aW5uaW5nT3V0Y29tZTogXCJZZXNcIiB8IFwiTm9cIiB8IG51bGwsXG4gICAgZmVlUmVjaXBpZW50PzogUHVibGljS2V5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IG1hcmtldElkQm4gPSBuZXcgQk4obWFya2V0SWQpO1xuICAgIGNvbnN0IG1hcmtldFBkYSA9IGdldE1hcmtldFBkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkLCBhZG1pbiwgbWFya2V0SWRCbik7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnUGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQpO1xuXG4gICAgbGV0IG91dGNvbWVFbnVtOiBhbnkgPSBudWxsO1xuICAgIGlmICh3aW5uaW5nT3V0Y29tZSA9PT0gXCJZZXNcIikge1xuICAgICAgb3V0Y29tZUVudW0gPSB7IHllczoge30gfTtcbiAgICB9IGVsc2UgaWYgKHdpbm5pbmdPdXRjb21lID09PSBcIk5vXCIpIHtcbiAgICAgIG91dGNvbWVFbnVtID0geyBubzoge30gfTtcbiAgICB9XG5cbiAgICAvLyBHZXQgbWFya2V0IGluZm8gdG8gZGV0ZXJtaW5lIGJldHRpbmcgdG9rZW5cbiAgICBjb25zdCBtYXJrZXRJbmZvID0gYXdhaXQgdGhpcy5nZXRNYXJrZXRJbmZvKG1hcmtldFBkYSk7XG4gICAgLy8gZmVlIHJlY2lwaWVudCBhZGRyZXNzXG4gICAgY29uc3QgZmVlUmVjaXBpZW50QWRkcmVzcyA9IGZlZVJlY2lwaWVudCB8fCAoYXdhaXQgdGhpcy5nZXRHbG9iYWxDb25maWdBY2NvdW50KCkpLmZlZVJlY2lwaWVudDtcbiAgICAvLyBmZWUgcmVjaXBpZW50IHRva2VuIGFjY291bnQgKGFsbG93T3duZXJPZmZDdXJ2ZSBmb3IgbXVsdGlzaWcvUERBKVxuICAgIGNvbnN0IGZlZVJlY2lwaWVudFRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobWFya2V0SW5mby5iZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudEFkZHJlc3MsIHRydWUpO1xuXG4gICAgLy8gRGVyaXZlIHZhdWx0IFBEQVxuICAgIGNvbnN0IHZhdWx0ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oVkFVTFRfU0VFRCksIG1hcmtldFBkYS50b0J1ZmZlcigpXSxcbiAgICAgIHRoaXMucHJvZ3JhbS5wcm9ncmFtSWRcbiAgICApWzBdO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAucmVzb2x2ZU1hcmtldChvdXRjb21lRW51bSlcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgIG1hcmtldDogbWFya2V0UGRhLFxuICAgICAgICB2YXVsdCxcbiAgICAgICAgZmVlUmVjaXBpZW50OiBmZWVSZWNpcGllbnRUb2tlbixcbiAgICAgICAgYWRtaW4sXG4gICAgICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIHJlc29sdmUgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkUmVzb2x2ZU1hcmtldFR4QnlJRChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldElkOiBudW1iZXIgfCBCTixcbiAgICB3aW5uaW5nT3V0Y29tZTogXCJZZXNcIiB8IFwiTm9cIiB8IG51bGwsXG4gICAgZmVlUmVjaXBpZW50PzogUHVibGljS2V5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBtYXJrZXRJZEJuID0gbmV3IEJOKG1hcmtldElkKTtcbiAgICBjb25zdCBtYXJrZXRQZGEgPSBnZXRNYXJrZXRQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCwgYWRtaW4sIG1hcmtldElkQm4pO1xuICAgIGNvbnN0IG1hcmtldEluZm8gPSBhd2FpdCB0aGlzLmdldE1hcmtldEluZm8obWFya2V0UGRhKTtcbiAgICBjb25zdCBnbG9iYWxDb25maWdBY2NvdW50ID0gYXdhaXQgdGhpcy5nZXRHbG9iYWxDb25maWdBY2NvdW50KCk7XG4gICAgY29uc3QgZmVlUmVjaXBpZW50QWRkcmVzcyA9IGZlZVJlY2lwaWVudCB8fCBnbG9iYWxDb25maWdBY2NvdW50LmZlZVJlY2lwaWVudDtcbiAgICAvLyBhbGxvd093bmVyT2ZmQ3VydmUgZm9yIG11bHRpc2lnL1BEQSBmZWUgcmVjaXBpZW50c1xuICAgIGNvbnN0IGZlZVJlY2lwaWVudFRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobWFya2V0SW5mby5iZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudEFkZHJlc3MsIHRydWUpO1xuXG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcblxuICAgIC8vIENoZWNrIGlmIGZlZSByZWNpcGllbnQgdG9rZW4gYWNjb3VudCBleGlzdHMgYW5kIGNyZWF0ZSBpZiBuZWVkZWRcbiAgICBjb25zdCBmZWVSZWNpcGllbnRBdGFFeGlzdHMgPSBhd2FpdCB0aGlzLmF0YUV4aXN0cyhmZWVSZWNpcGllbnRUb2tlbik7XG4gICAgaWYgKCFmZWVSZWNpcGllbnRBdGFFeGlzdHMpIHtcbiAgICAgIGNvbnN0IGNyZWF0ZUZlZVJlY2lwaWVudEF0YUl4ID0gdGhpcy5jcmVhdGVBdGFJbnN0cnVjdGlvbihhZG1pbiwgZmVlUmVjaXBpZW50QWRkcmVzcywgbWFya2V0SW5mby5iZXR0aW5nVG9rZW4pO1xuICAgICAgdHguYWRkKGNyZWF0ZUZlZVJlY2lwaWVudEF0YUl4KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzb2x2ZSBtYXJrZXQgaW5zdHJ1Y3Rpb25cbiAgICBjb25zdCByZXNvbHZlTWFya2V0SXggPSBhd2FpdCB0aGlzLnJlc29sdmVNYXJrZXRCeUlEKGFkbWluLCBtYXJrZXRJZCwgd2lubmluZ091dGNvbWUsIGZlZVJlY2lwaWVudCk7XG4gICAgdHguYWRkKHJlc29sdmVNYXJrZXRJeCk7XG5cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIG1hcmtldCAoQWRtaW4gb25seSlcbiAgICovXG4gIGFzeW5jIHJlc29sdmVNYXJrZXQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleSxcbiAgICB3aW5uaW5nT3V0Y29tZTogXCJZZXNcIiB8IFwiTm9cIiB8IG51bGwsXG4gICAgZmVlUmVjaXBpZW50PzogUHVibGljS2V5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcblxuICAgIGxldCBvdXRjb21lRW51bTogYW55ID0gbnVsbDtcbiAgICBpZiAod2lubmluZ091dGNvbWUgPT09IFwiWWVzXCIpIHtcbiAgICAgIG91dGNvbWVFbnVtID0geyB5ZXM6IHt9IH07XG4gICAgfSBlbHNlIGlmICh3aW5uaW5nT3V0Y29tZSA9PT0gXCJOb1wiKSB7XG4gICAgICBvdXRjb21lRW51bSA9IHsgbm86IHt9IH07XG4gICAgfVxuXG4gICAgLy8gR2V0IG1hcmtldCBpbmZvIHRvIGRldGVybWluZSBiZXR0aW5nIHRva2VuXG4gICAgY29uc3QgbWFya2V0SW5mbyA9IGF3YWl0IHRoaXMuZ2V0TWFya2V0SW5mbyhtYXJrZXQpO1xuICAgIGNvbnN0IGZlZVJlY2lwaWVudEFkZHJlc3MgPSBmZWVSZWNpcGllbnQgfHwgKGF3YWl0IHRoaXMuZ2V0R2xvYmFsQ29uZmlnQWNjb3VudCgpKS5mZWVSZWNpcGllbnQ7XG4gICAgLy8gYWxsb3dPd25lck9mZkN1cnZlIGZvciBtdWx0aXNpZy9QREEgZmVlIHJlY2lwaWVudHNcbiAgICBjb25zdCBmZWVSZWNpcGllbnRUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKG1hcmtldEluZm8uYmV0dGluZ1Rva2VuLCBmZWVSZWNpcGllbnRBZGRyZXNzLCB0cnVlKTtcblxuICAgIC8vIERlcml2ZSB2YXVsdCBQREFcbiAgICBjb25zdCB2YXVsdCA9IFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgICAgW0J1ZmZlci5mcm9tKFZBVUxUX1NFRUQpLCBtYXJrZXQudG9CdWZmZXIoKV0sXG4gICAgICB0aGlzLnByb2dyYW0ucHJvZ3JhbUlkXG4gICAgKVswXTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLnJlc29sdmVNYXJrZXQob3V0Y29tZUVudW0pXG4gICAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAgICBtYXJrZXQ6IG1hcmtldCxcbiAgICAgICAgdmF1bHQsXG4gICAgICAgIGZlZVJlY2lwaWVudDogZmVlUmVjaXBpZW50VG9rZW4sXG4gICAgICAgIGFkbWluLFxuICAgICAgICB0b2tlblByb2dyYW06IFRPS0VOX1BST0dSQU1fSUQsXG4gICAgICB9KVxuICAgICAgLmluc3RydWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbiB0byByZXNvbHZlIGEgbWFya2V0XG4gICAqL1xuICBhc3luYyBidWlsZFJlc29sdmVNYXJrZXRUeChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldDogUHVibGljS2V5LFxuICAgIHdpbm5pbmdPdXRjb21lOiBcIlllc1wiIHwgXCJOb1wiIHwgbnVsbCxcbiAgICBmZWVSZWNpcGllbnQ/OiBQdWJsaWNLZXlcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IG1hcmtldEluZm8gPSBhd2FpdCB0aGlzLmdldE1hcmtldEluZm8obWFya2V0KTtcbiAgICBjb25zdCBnbG9iYWxDb25maWdBY2NvdW50ID0gYXdhaXQgdGhpcy5nZXRHbG9iYWxDb25maWdBY2NvdW50KCk7XG4gICAgY29uc3QgZmVlUmVjaXBpZW50QWRkcmVzcyA9IGZlZVJlY2lwaWVudCB8fCBnbG9iYWxDb25maWdBY2NvdW50LmZlZVJlY2lwaWVudDtcbiAgICAvLyBhbGxvd093bmVyT2ZmQ3VydmUgZm9yIG11bHRpc2lnL1BEQSBmZWUgcmVjaXBpZW50c1xuICAgIGNvbnN0IGZlZVJlY2lwaWVudFRva2VuID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobWFya2V0SW5mby5iZXR0aW5nVG9rZW4sIGZlZVJlY2lwaWVudEFkZHJlc3MsIHRydWUpO1xuXG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcblxuICAgIC8vIENoZWNrIGlmIGZlZSByZWNpcGllbnQgdG9rZW4gYWNjb3VudCBleGlzdHMgYW5kIGNyZWF0ZSBpZiBuZWVkZWRcbiAgICBjb25zdCBmZWVSZWNpcGllbnRBdGFFeGlzdHMgPSBhd2FpdCB0aGlzLmF0YUV4aXN0cyhmZWVSZWNpcGllbnRUb2tlbik7XG4gICAgaWYgKCFmZWVSZWNpcGllbnRBdGFFeGlzdHMpIHtcbiAgICAgIGNvbnN0IGNyZWF0ZUZlZVJlY2lwaWVudEF0YUl4ID0gdGhpcy5jcmVhdGVBdGFJbnN0cnVjdGlvbihhZG1pbiwgZmVlUmVjaXBpZW50QWRkcmVzcywgbWFya2V0SW5mby5iZXR0aW5nVG9rZW4pO1xuICAgICAgdHguYWRkKGNyZWF0ZUZlZVJlY2lwaWVudEF0YUl4KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzb2x2ZSBtYXJrZXQgaW5zdHJ1Y3Rpb25cbiAgICBjb25zdCByZXNvbHZlTWFya2V0SXggPSBhd2FpdCB0aGlzLnJlc29sdmVNYXJrZXQoYWRtaW4sIG1hcmtldCwgd2lubmluZ091dGNvbWUsIGZlZVJlY2lwaWVudCk7XG4gICAgdHguYWRkKHJlc29sdmVNYXJrZXRJeCk7XG5cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYSBtYXJrZXQgKEFkbWluIG9ubHkpXG4gICAqL1xuICBhc3luYyBjbG9zZU1hcmtldChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldDogUHVibGljS2V5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25JbnN0cnVjdGlvbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmNsb3NlTWFya2V0KClcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBtYXJrZXQ6IG1hcmtldCxcbiAgICAgICAgYWRtaW46IGFkbWluLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gY2xvc2UgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ2xvc2VNYXJrZXRUeChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1hcmtldDogUHVibGljS2V5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IHRoaXMuY2xvc2VNYXJrZXQoYWRtaW4sIG1hcmtldCk7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbigpLmFkZChpeCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYSBtYXJrZXQgKEFkbWluIG9ubHkpXG4gICAqL1xuICBhc3luYyBjbG9zZU1hcmtldEJ5SUQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXRJZDogbnVtYmVyIHwgQk5cbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluc3RydWN0aW9uPiB7XG4gICAgY29uc3QgbWFya2V0SWRCbiA9IG5ldyBCTihtYXJrZXRJZCk7XG4gICAgY29uc3QgbWFya2V0UGRhID0gZ2V0TWFya2V0UGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQsIGFkbWluLCBtYXJrZXRJZEJuKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmNsb3NlTWFya2V0KClcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBtYXJrZXQ6IG1hcmtldFBkYSxcbiAgICAgICAgYWRtaW46IGFkbWluLFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gY2xvc2UgYSBtYXJrZXRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ2xvc2VNYXJrZXRUeEJ5SUQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXRJZDogbnVtYmVyIHwgQk5cbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgdGhpcy5jbG9zZU1hcmtldEJ5SUQoYWRtaW4sIG1hcmtldElkKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBtYXJrZXQgYWNjb3VudCBhbmQgcmVjbGFpbSByZW50IChBZG1pbiBvbmx5KVxuICAgKiBDYW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgbWFya2V0IGlzIHJlc29sdmVkIGFuZCBhbGwgcmV3YXJkcyBjbGFpbWVkXG4gICAqL1xuICBhc3luYyBjbG9zZU1hcmtldEFjY291bnQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICAvLyBEZXJpdmUgUERBc1xuICAgIGNvbnN0IHllc01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShZRVNfTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3Qgbm9NaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oTk9fTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3QgdmF1bHQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShWQVVMVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5jbG9zZU1hcmtldEFjY291bnQoKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldCxcbiAgICAgICAgeWVzTWludCxcbiAgICAgICAgbm9NaW50LFxuICAgICAgICB2YXVsdCxcbiAgICAgICAgYWRtaW4sXG4gICAgICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fUFJPR1JBTV9JRCxcbiAgICAgICAgdG9rZW4yMDIyUHJvZ3JhbTogVE9LRU5fMjAyMl9QUk9HUkFNX0lELFxuICAgICAgfSlcbiAgICAgIC5pbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgdHJhbnNhY3Rpb24gdG8gY2xvc2UgbWFya2V0IGFjY291bnRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ2xvc2VNYXJrZXRBY2NvdW50VHgoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmNsb3NlTWFya2V0QWNjb3VudChhZG1pbiwgbWFya2V0KTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdXJuIHdvcnRobGVzcyB0b2tlbnMgZnJvbSB0aGUgbG9zaW5nIHNpZGUgb2YgYSByZXNvbHZlZCBtYXJrZXQuXG4gICAqIFRoaXMgYWxsb3dzIHVzZXJzIHRvIGNsZWFuIHVwIHRoZWlyIGxvc2luZyB0b2tlbnMgc28gdGhlIG1hcmtldCBhY2NvdW50IGNhbiBiZSBjbG9zZWQuXG4gICAqIEBwYXJhbSB1c2VyIC0gVGhlIHVzZXIgd2hvIGhvbGRzIGxvc2luZyB0b2tlbnNcbiAgICogQHBhcmFtIG1hcmtldCAtIFRoZSBtYXJrZXQgUERBXG4gICAqIEBwYXJhbSBsb3NpbmdPdXRjb21lIC0gVGhlIG91dGNvbWUgdGhhdCBsb3N0ICh0aGUgc2lkZSB0byBidXJuKVxuICAgKiBAcGFyYW0gdG9rZW5BbW91bnQgLSBBbW91bnQgdG8gYnVybiAoMCA9IGJ1cm4gYWxsKVxuICAgKiBAcGFyYW0gY2xvc2VBY2NvdW50IC0gV2hldGhlciB0byBjbG9zZSB0aGUgbG9zaW5nIHRva2VuIGFjY291bnQgYWZ0ZXIgYnVybmluZyBhbGwgdG9rZW5zIChkZWZhdWx0OiBmYWxzZSlcbiAgICovXG4gIGFzeW5jIGJ1cm5NYXJrZXRUb2tlbnMoXG4gICAgdXNlcjogUHVibGljS2V5LFxuICAgIG1hcmtldDogUHVibGljS2V5LFxuICAgIGxvc2luZ091dGNvbWU6IE91dGNvbWUsXG4gICAgdG9rZW5BbW91bnQ6IG51bWJlciB8IEJOID0gMCxcbiAgICBjbG9zZUFjY291bnQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24+IHtcbiAgICAvLyBEZXJpdmUgUERBc1xuICAgIGNvbnN0IHllc01pbnQgPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICAgIFtCdWZmZXIuZnJvbShZRVNfTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG4gICAgY29uc3Qgbm9NaW50ID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgICBbQnVmZmVyLmZyb20oTk9fTUlOVF9TRUVEKSwgbWFya2V0LnRvQnVmZmVyKCldLFxuICAgICAgdGhpcy5wcm9ncmFtLnByb2dyYW1JZFxuICAgIClbMF07XG5cbiAgICAvLyBUaGUgbG9zaW5nIG1pbnQgaXMgdGhlIHNpZGUgdGhhdCBsb3N0XG4gICAgY29uc3QgbG9zaW5nTWludCA9IGxvc2luZ091dGNvbWUgPT09IFwiWWVzXCIgPyB5ZXNNaW50IDogbm9NaW50O1xuICAgIGNvbnN0IHVzZXJMb3NpbmdUb2tlbiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKGxvc2luZ01pbnQsIHVzZXIsIGZhbHNlLCBUT0tFTl8yMDIyX1BST0dSQU1fSUQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuYnVybk1hcmtldFRva2Vucyh7XG4gICAgICAgIHRva2VuQW1vdW50OiBuZXcgQk4odG9rZW5BbW91bnQpLFxuICAgICAgICBjbG9zZUFjY291bnQsXG4gICAgICB9KVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIG1hcmtldCxcbiAgICAgICAgeWVzTWludCxcbiAgICAgICAgbm9NaW50LFxuICAgICAgICBsb3NpbmdNaW50LFxuICAgICAgICB1c2VyTG9zaW5nVG9rZW4sXG4gICAgICAgIHVzZXIsXG4gICAgICAgIHRva2VuMjAyMlByb2dyYW06IFRPS0VOXzIwMjJfUFJPR1JBTV9JRCxcbiAgICAgIH0pXG4gICAgICAuaW5zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHRvIGJ1cm4gbWFya2V0IHRva2Vuc1xuICAgKiBAcGFyYW0gY2xvc2VBY2NvdW50IC0gV2hldGhlciB0byBjbG9zZSB0aGUgbG9zaW5nIHRva2VuIGFjY291bnQgYWZ0ZXIgYnVybmluZyBhbGwgdG9rZW5zIChkZWZhdWx0OiBmYWxzZSlcbiAgICovXG4gIGFzeW5jIGJ1aWxkQnVybk1hcmtldFRva2Vuc1R4KFxuICAgIHVzZXI6IFB1YmxpY0tleSxcbiAgICBtYXJrZXQ6IFB1YmxpY0tleSxcbiAgICBsb3NpbmdPdXRjb21lOiBPdXRjb21lLFxuICAgIHRva2VuQW1vdW50OiBudW1iZXIgfCBCTiA9IDAsXG4gICAgY2xvc2VBY2NvdW50OiBib29sZWFuID0gdHJ1ZVxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCB0aGlzLmJ1cm5NYXJrZXRUb2tlbnModXNlciwgbWFya2V0LCBsb3NpbmdPdXRjb21lLCB0b2tlbkFtb3VudCwgY2xvc2VBY2NvdW50KTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGl4KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGdsb2JhbCBjb25maWcgYWNjb3VudCBkYXRhXG4gICAqL1xuICBhc3luYyBnZXRHbG9iYWxDb25maWdBY2NvdW50KCkge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldEdsb2JhbENvbmZpZ1BkYSh0aGlzLnByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLmFjY291bnQuZ2xvYmFsQ29uZmlnLmZldGNoKGdsb2JhbENvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggbWFya2V0IGFjY291bnQgZGF0YVxuICAgKi9cbiAgYXN5bmMgZ2V0TWFya2V0QWNjb3VudChhZG1pbjogUHVibGljS2V5LCBtYXJrZXRJZDogbnVtYmVyIHwgQk4pIHtcbiAgICBjb25zdCBtYXJrZXRJZEJuID0gbmV3IEJOKG1hcmtldElkKTtcbiAgICBjb25zdCBtYXJrZXRQZGEgPSBnZXRNYXJrZXRQZGEodGhpcy5wcm9ncmFtLnByb2dyYW1JZCwgYWRtaW4sIG1hcmtldElkQm4pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0uYWNjb3VudC5tYXJrZXQuZmV0Y2gobWFya2V0UGRhKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1hcmtldEluZm8obWFya2V0UGRhOiBQdWJsaWNLZXkpIHtcbiAgICBjb25zdCBtYXJrZXRBY2NvdW50ID0gYXdhaXQgdGhpcy5wcm9ncmFtLmFjY291bnQubWFya2V0LmZldGNoKG1hcmtldFBkYSk7XG4gICAgcmV0dXJuIG1hcmtldEFjY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdmF1bHQgYWNjb3VudCBkYXRhXG4gICAqL1xuICBhc3luYyBnZXRWYXVsdEFjY291bnQobWFya2V0UGRhOiBQdWJsaWNLZXkpIHtcbiAgICBjb25zdCB2YXVsdFBkYSA9IGdldFZhdWx0UGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQsIG1hcmtldFBkYSk7XG4gICAgcmV0dXJuIGF3YWl0IGdldEFjY291bnQodGhpcy5jb25uZWN0aW9uLCB2YXVsdFBkYSk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drama-pm-client",
3
- "version": "0.4.7",
3
+ "version": "0.4.8",
4
4
  "type": "module",
5
5
  "description": "TypeScript client for Drama Prediction Market",
6
6
  "main": "dist/index.js",