@1upmonster/duel 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +110 -59
  2. package/dist/admin.d.ts +8 -1
  3. package/dist/admin.js +21 -7
  4. package/dist/generated/duel/errors/duel.d.ts +1 -3
  5. package/dist/generated/duel/errors/duel.js +2 -4
  6. package/dist/generated/duel/instructions/delegateQueue.js +3 -3
  7. package/dist/generated/duel/instructions/delegateTicket.js +3 -3
  8. package/dist/generated/duel/instructions/index.d.ts +1 -0
  9. package/dist/generated/duel/instructions/index.js +2 -1
  10. package/dist/generated/duel/instructions/joinQueue.d.ts +1 -1
  11. package/dist/generated/duel/instructions/joinQueue.js +3 -3
  12. package/dist/generated/duel/instructions/setupTicketPermission.d.ts +54 -0
  13. package/dist/generated/duel/instructions/setupTicketPermission.js +63 -0
  14. package/dist/generated/duel/programs/duel.d.ts +7 -3
  15. package/dist/generated/duel/programs/duel.js +11 -3
  16. package/dist/player.d.ts +7 -1
  17. package/dist/player.js +23 -3
  18. package/package.json +1 -1
  19. package/src/admin.ts +31 -7
  20. package/src/duel.json +0 -5
  21. package/src/generated/duel/errors/duel.ts +2 -4
  22. package/src/generated/duel/instructions/delegateQueue.ts +2 -2
  23. package/src/generated/duel/instructions/delegateTicket.ts +2 -2
  24. package/src/generated/duel/instructions/index.ts +2 -1
  25. package/src/generated/duel/instructions/joinQueue.ts +3 -3
  26. package/src/generated/duel/instructions/setupTicketPermission.ts +115 -0
  27. package/src/generated/duel/programs/duel.ts +8 -4
  28. package/src/player.ts +34 -1
  29. package/src/idl/private_matchmaking.json +0 -1027
  30. package/src/idl/private_matchmaking.ts +0 -1033
package/README.md CHANGED
@@ -1,13 +1,8 @@
1
1
  # @1upmonster/duel
2
2
 
3
- TypeScript SDK for **Duel** - a privacy-focused matchmaking protocol on Solana using MagicBlock's Ephemeral Rollups (TEE).
3
+ TypeScript SDK for **Duel** a privacy-preserving matchmaking protocol on Solana using MagicBlock Ephemeral Rollups (TEE).
4
4
 
5
- ## Features
6
-
7
- - **Privacy-First**: Player ELO and queue status hidden in TEE
8
- - **Client-Side**: Players join queues directly from their wallets (no CPI required)
9
- - **Automatic Matching**: TEE processes matches based on ELO windows
10
- - **Easy Integration**: Simple SDK for both game owners and players
5
+ Built on [`@solana/kit`](https://github.com/anza-xyz/kit). No `@coral-xyz/anchor` or legacy `web3.js` dependency.
11
6
 
12
7
  ## Installation
13
8
 
@@ -17,85 +12,141 @@ npm install @1upmonster/duel
17
12
 
18
13
  ## Quick Start
19
14
 
20
- ### For Game Owners
21
-
22
- Initialize matchmaking infrastructure for your game:
15
+ ### For Game Owners (`MatchmakingAdmin`)
23
16
 
24
17
  ```typescript
25
18
  import { MatchmakingAdmin } from "@1upmonster/duel";
26
- import { AnchorProvider } from "@coral-xyz/anchor";
27
-
28
- const admin = new MatchmakingAdmin(provider);
29
-
30
- // 1. Initialize Tenant for your Game Program
31
- await admin.initializeTenant(gameProgramId, {
32
- authority, // optional, defaults to gameProgramId
33
- eloWindow: 200, // optional, default 100
34
- eloOffset: 40, // optional, default 40
35
- eloDataType: 'u16' // optional, default 'u16' (u8/u16/u32/u64)
19
+ import { createSolanaRpc, createKeyPairSignerFromBytes } from "@solana/kit";
20
+ import * as crypto from "crypto";
21
+
22
+ const rpc = createSolanaRpc("https://api.devnet.solana.com");
23
+ const signer = await createKeyPairSignerFromBytes(/* your keypair bytes */);
24
+ const admin = new MatchmakingAdmin(rpc, signer);
25
+
26
+ // 1. Initialize Tenant stores callback config on L1
27
+ const callbackDiscriminator = Array.from(
28
+ crypto.createHash("sha256").update("global:on_match_found").digest().slice(0, 8)
29
+ );
30
+ await admin.initializeTenant(YOUR_GAME_PROGRAM_ID, {
31
+ eloWindow: 100n, // max ELO diff for a match
32
+ eloOffset: 40, // byte offset of ELO in player account
33
+ eloDataType: "u64", // u8 | u16 | u32 | u64
34
+ callbackProgramId: YOUR_GAME_PROGRAM_ID,
35
+ callbackDiscriminator,
36
36
  });
37
37
 
38
- // 2. Initialize a Matchmaking Queue
39
- const tenantPda = admin.getTenantPda(authority);
38
+ // 2. Create and delegate queue to TEE
39
+ const authority = signer.address;
40
40
  await admin.initializeQueue(authority, tenantPda);
41
-
42
- // 3. Delegate to TEE Validator
43
41
  await admin.delegateQueue(authority, validatorPubkey);
44
- ```
45
-
46
- ### ELO Data Types
47
-
48
- The SDK supports different ELO data types to optimize storage:
49
- - `'u8'`: 0-255 (1 byte)
50
- - `'u16'`: 0-65,535 (2 bytes) **[DEFAULT]**
51
- - `'u32'`: 0-4,294,967,295 (4 bytes)
52
- - `'u64'`: 0-18,446,744,073,709,551,615 (8 bytes)
53
42
 
54
- ### For Players
43
+ // 3. After players have matched, flush opponent tickets + commit all to L1
44
+ await admin.resolveMatches(queuePda, tenantPda, [p1TicketPda, p2TicketPda]);
45
+ ```
55
46
 
56
- Join the private matchmaking queue:
47
+ ### For Players (`MatchmakingPlayer`)
57
48
 
58
49
  ```typescript
59
50
  import { MatchmakingPlayer } from "@1upmonster/duel";
60
-
61
- const player = new MatchmakingPlayer(provider);
62
-
63
- // Join queue (matching happens automatically in TEE)
64
- await player.joinQueue(queuePda, tenantPda, playerProfilePda);
51
+ import { getAuthToken } from "@1upmonster/duel";
52
+ import { createSolanaRpc } from "@solana/kit";
53
+
54
+ const l1Rpc = createSolanaRpc("https://api.devnet.solana.com");
55
+ const player = new MatchmakingPlayer(l1Rpc, signer);
56
+
57
+ // High-level: creates ticket on L1, delegates to TEE, joins queue in one call
58
+ const { token } = await getAuthToken("https://tee.magicblock.app", signer);
59
+ const teeRpc = createSolanaRpc(`https://tee.magicblock.app?token=${token}`);
60
+
61
+ const ticketPda = await player.enterQueue(
62
+ tenantPda,
63
+ queuePda,
64
+ playerProfilePda,
65
+ teeRpc,
66
+ `https://tee.magicblock.app?token=${token}`,
67
+ validatorPubkey, // optional TEE validator
68
+ YOUR_GAME_PROGRAM_ID, // optional: callback fires via Tenant PDA when matched
69
+ );
70
+
71
+ // Poll L1 until the ticket shows Matched status
72
+ const match = await player.pollForMatch(ticketPda);
73
+ // match = { opponent: Address, matchId: bigint }
65
74
  ```
66
75
 
67
76
  ## API Reference
68
77
 
69
78
  ### `MatchmakingAdmin`
70
79
 
71
- **Constructor**
72
- - `new MatchmakingAdmin(provider: AnchorProvider, programId?: PublicKey)`
80
+ **Constructor:** `new MatchmakingAdmin(rpc, signer, programId?)`
73
81
 
74
- **Methods**
75
- - `initializeTenant(authority, tenantProgramId, eloWindow?, eloOffset?)` - Set up game tenant
76
- - `initializeQueue(authority, tenant)` - Create matchmaking queue
77
- - `delegateQueue(authority, validator?)` - Delegate to TEE validator
78
- - `getTenantPda(authority)` - Derive tenant PDA
79
- - `getQueuePda(authority)` - Derive queue PDA
82
+ | Method | Description |
83
+ |---|---|
84
+ | `initializeTenant(tenantProgramId, options?)` | Create Tenant PDA with ELO config and optional callback |
85
+ | `initializeQueue(authority, tenant)` | Create Queue PDA linked to tenant |
86
+ | `delegateQueue(authority, validator?)` | Delegate queue to TEE (makes it private) |
87
+ | `flushMatches(queue, tenant, ticketPdas)` | Update opponent tickets from pending matches |
88
+ | `commitTickets(tenant, ticketPdas)` | Push matched ticket state back to L1 |
89
+ | `resolveMatches(queue, tenant, ticketPdas, settlementDelayMs?)` | High-level: flush + wait + commit |
90
+ | `getQueue(queuePda)` | Fetch queue account |
91
+ | `getQueuePda(authority)` | Derive queue PDA |
92
+ | `getTenantPda(authority)` | Derive tenant PDA |
80
93
 
81
94
  ### `MatchmakingPlayer`
82
95
 
83
- **Constructor**
84
- - `new MatchmakingPlayer(provider: AnchorProvider, programId?: PublicKey)`
96
+ **Constructor:** `new MatchmakingPlayer(rpc, signer, programId?)`
97
+
98
+ | Method | Description |
99
+ |---|---|
100
+ | `enterQueue(tenant, queue, playerData, teeRpc, teeUrlWithToken, validator?, callbackProgram?)` | High-level: create ticket → delegate → join queue |
101
+ | `createTicket(tenant)` | Create MatchTicket PDA on L1 |
102
+ | `delegateTicket(player, tenant, validator?)` | Delegate ticket to TEE |
103
+ | `joinQueue(queue, tenant, playerData, callbackProgram?)` | Join queue in TEE; callback fires via Tenant PDA on match |
104
+ | `cancelTicket(tenant)` | Cancel search (sets ticket to Cancelled) |
105
+ | `closeTicket(tenant)` | Reclaim rent after match or cancel |
106
+ | `pollForMatch(ticketPda, maxAttempts?, pollInterval?)` | Poll L1 until ticket is Matched |
107
+ | `getTicket(ticketPda)` | Fetch ticket account |
108
+ | `withRpc(teeUrl)` | Return a new client pointing at a different RPC |
109
+
110
+ ### `getAuthToken(rpcUrl, signer)`
111
+
112
+ Authenticate with the MagicBlock TEE. Returns `{ token, expiresAt }`. The token is passed as `?token=<jwt>` in the TEE RPC URL.
113
+
114
+ ### `waitUntilPermissionActive(teeUrlWithToken, pda)`
85
115
 
86
- **Methods**
87
- - `joinQueue(queue, tenant, playerData)` - Join matchmaking queue
116
+ Poll the TEE until a delegated PDA is active (authorized users list is non-empty).
88
117
 
89
- ## How It Works
118
+ ## How the Callback Works
119
+
120
+ When a match is found during `join_queue`, the duel program fires a CPI callback **signed by the Tenant PDA** via `invoke_signed`. This is cryptographically unforgeable — game programs can verify the signer is the Tenant PDA without any additional access control:
121
+
122
+ ```rust
123
+ pub fn on_match_found(
124
+ ctx: Context<OnMatchFound>,
125
+ player1: Pubkey,
126
+ player2: Pubkey,
127
+ match_id: u64,
128
+ ) -> Result<()> {
129
+ // ctx.accounts.signer.key() == Tenant PDA — verified by the runtime
130
+ // Only the duel program can produce this signer
131
+ Ok(())
132
+ }
133
+
134
+ #[derive(Accounts)]
135
+ pub struct OnMatchFound<'info> {
136
+ pub signer: Signer<'info>, // will be the Tenant PDA
137
+ }
138
+ ```
90
139
 
91
- 1. **Queue Joining**: Players call `joinQueue` directly via SDK
92
- 2. **Matching**: TEE automatically processes matches based on ELO windows
93
- 3. **Privacy**: Queue state is only visible within the TEE, not on L1
140
+ Pass the callback program as `remaining_accounts` in `joinQueue` (or via `callbackProgram` param in the SDK) for the callback to fire.
94
141
 
95
- ## Links
142
+ ## ELO Data Types
96
143
 
97
- - [GitHub Repository](https://github.com/val-samonte/private-matchmaking)
98
- - [Full Documentation](https://github.com/val-samonte/private-matchmaking#readme)
144
+ | Type | Bytes | Range |
145
+ |---|---|---|
146
+ | `"u8"` | 1 | 0–255 |
147
+ | `"u16"` | 2 | 0–65,535 |
148
+ | `"u32"` | 4 | 0–4,294,967,295 |
149
+ | `"u64"` | 8 | 0–18,446,744,073,709,551,615 |
99
150
 
100
151
  ## License
101
152
 
package/dist/admin.d.ts CHANGED
@@ -20,8 +20,15 @@ export declare class MatchmakingAdmin {
20
20
  initializeTenant(tenantProgramId: Address, options?: InitializeTenantOptions): Promise<string>;
21
21
  initializeQueue(_authority: Address, tenant: Address): Promise<string>;
22
22
  delegateQueue(authority: Address, validator?: Address): Promise<string>;
23
- flushMatches(queue: Address, tenant: Address, ticketPdas: Address[], callbackProgram?: Address): Promise<string>;
23
+ flushMatches(queue: Address, tenant: Address, ticketPdas: Address[]): Promise<string>;
24
24
  commitTickets(tenant: Address, ticketPdas: Address[]): Promise<string>;
25
+ /**
26
+ * High-level: full match resolution flow (runs on TEE).
27
+ * Reads the queue's pending matches, flushes them (updating opponent tickets),
28
+ * waits for TEE settlement, then commits all tickets back to L1.
29
+ * Use individual methods (flushMatches, commitTickets) as escape hatches if needed.
30
+ */
31
+ resolveMatches(queue: Address, tenant: Address, ticketPdas: Address[], settlementDelayMs?: number): Promise<void>;
25
32
  /** Create a new MatchmakingAdmin pointing at a TEE RPC endpoint. */
26
33
  withRpc(teeUrl: string): MatchmakingAdmin;
27
34
  }
package/dist/admin.js CHANGED
@@ -62,19 +62,18 @@ export class MatchmakingAdmin {
62
62
  }, { programAddress: this.programId });
63
63
  return sendInstruction(this.rpc, ix, this.signer);
64
64
  }
65
- async flushMatches(queue, tenant, ticketPdas, callbackProgram) {
65
+ async flushMatches(queue, tenant, ticketPdas) {
66
66
  const ix = getFlushMatchesInstruction({
67
67
  queue,
68
68
  tenant,
69
69
  signer: this.signer,
70
70
  }, { programAddress: this.programId });
71
- const remainingAccounts = [
72
- ...ticketPdas.map((address) => ({ address, role: 1 })),
73
- ...(callbackProgram ? [{ address: callbackProgram, role: 0 }] : []),
74
- ];
75
71
  const ixWithRemaining = {
76
72
  ...ix,
77
- accounts: [...ix.accounts, ...remainingAccounts],
73
+ accounts: [
74
+ ...ix.accounts,
75
+ ...ticketPdas.map((address) => ({ address, role: 1 })),
76
+ ],
78
77
  };
79
78
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
79
  return sendInstruction(this.rpc, ixWithRemaining, this.signer);
@@ -94,9 +93,24 @@ export class MatchmakingAdmin {
94
93
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
94
  return sendInstruction(this.rpc, ixWithRemaining, this.signer);
96
95
  }
96
+ /**
97
+ * High-level: full match resolution flow (runs on TEE).
98
+ * Reads the queue's pending matches, flushes them (updating opponent tickets),
99
+ * waits for TEE settlement, then commits all tickets back to L1.
100
+ * Use individual methods (flushMatches, commitTickets) as escape hatches if needed.
101
+ */
102
+ async resolveMatches(queue, tenant, ticketPdas, settlementDelayMs = 3000) {
103
+ const queueData = await this.getQueue(queue);
104
+ const pendingTicketPdas = await Promise.all(queueData.data.pendingMatches.map((pm) => utils.deriveTicketPda(this.programId, pm.player, tenant)));
105
+ if (pendingTicketPdas.length > 0) {
106
+ await this.flushMatches(queue, tenant, pendingTicketPdas);
107
+ await new Promise((r) => setTimeout(r, settlementDelayMs));
108
+ }
109
+ await this.commitTickets(tenant, ticketPdas);
110
+ }
97
111
  /** Create a new MatchmakingAdmin pointing at a TEE RPC endpoint. */
98
112
  withRpc(teeUrl) {
99
113
  return new MatchmakingAdmin(createSolanaRpc(teeUrl), this.signer, this.programId);
100
114
  }
101
115
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsR0FLaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsVUFBVSxFQUNWLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQWFwQyxTQUFTLFVBQVUsQ0FBQyxRQUFxQjtJQUN2QyxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEIsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQWtCO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENB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QUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQVUsRUFBRSxDQUFDLENBQUM7YUFDaEU7U0FDRixDQUFDO1FBRUYsOERBQThEO1FBQzlELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBc0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsXG4gIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmMsXG4gIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbixcbiAgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLFxuICBmZXRjaFF1ZXVlLFxuICBhY2NvdW50VHlwZSxcbn0gZnJvbSBcIi4vZ2VuZXJhdGVkL2R1ZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IHNlbmRJbnN0cnVjdGlvbiB9IGZyb20gXCIuL3RyYW5zYWN0aW9uLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5leHBvcnQgdHlwZSBFbG9EYXRhVHlwZSA9IFwidThcIiB8IFwidTE2XCIgfCBcInUzMlwiIHwgXCJ1NjRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplVGVuYW50T3B0aW9ucyB7XG4gIGF1dGhvcml0eT86IEFkZHJlc3M7XG4gIGVsb1dpbmRvdz86IGJpZ2ludDtcbiAgZWxvT2Zmc2V0PzogbnVtYmVyO1xuICBlbG9EYXRhVHlwZT86IEVsb0RhdGFUeXBlO1xuICBjYWxsYmFja1Byb2dyYW1JZD86IEFkZHJlc3MgfCBudWxsO1xuICBjYWxsYmFja0Rpc2NyaW1pbmF0b3I/OiBudW1iZXJbXSB8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEVsb1NpemUoZGF0YVR5cGU6IEVsb0RhdGFUeXBlKTogbnVtYmVyIHtcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgXCJ1OFwiOiByZXR1cm4gMTtcbiAgICBjYXNlIFwidTE2XCI6IHJldHVybiAyO1xuICAgIGNhc2UgXCJ1MzJcIjogcmV0dXJuIDQ7XG4gICAgY2FzZSBcInU2NFwiOiByZXR1cm4gODtcbiAgfVxufVxuXG5jb25zdCBEVUVMX1BST0dSQU1fSUQgPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIgYXMgQWRkcmVzcztcblxuZXhwb3J0IGNsYXNzIE1hdGNobWFraW5nQWRtaW4ge1xuICBwdWJsaWMgcnBjOiBScGM8U29sYW5hUnBjQXBpPjtcbiAgcHVibGljIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXI7XG4gIHB1YmxpYyBwcm9ncmFtSWQ6IEFkZHJlc3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICBzaWduZXI6IFRyYW5zYWN0aW9uU2lnbmVyLFxuICAgIHByb2dyYW1JZDogQWRkcmVzcyA9IERVRUxfUFJPR1JBTV9JRCxcbiAgKSB7XG4gICAgdGhpcy5ycGMgPSBycGM7XG4gICAgdGhpcy5zaWduZXIgPSBzaWduZXI7XG4gICAgdGhpcy5wcm9ncmFtSWQgPSBwcm9ncmFtSWQ7XG4gIH1cblxuICBhc3luYyBnZXRRdWV1ZVBkYShhdXRob3JpdHk6IEFkZHJlc3MpOiBQcm9taXNlPEFkZHJlc3M+IHtcbiAgICByZXR1cm4gdXRpbHMuZGVyaXZlUXVldWVQZGEodGhpcy5wcm9ncmFtSWQsIGF1dGhvcml0eSk7XG4gIH1cblxuICBhc3luYyBnZXRUZW5hbnRQZGEoYXV0aG9yaXR5OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHV0aWxzLmRlcml2ZVRlbmFudFBkYSh0aGlzLnByb2dyYW1JZCwgYXV0aG9yaXR5KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXVlKHF1ZXVlUGRhOiBBZGRyZXNzKSB7XG4gICAgcmV0dXJuIGZldGNoUXVldWUodGhpcy5ycGMsIHF1ZXVlUGRhKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemVUZW5hbnQoXG4gICAgdGVuYW50UHJvZ3JhbUlkOiBBZGRyZXNzLFxuICAgIG9wdGlvbnM/OiBJbml0aWFsaXplVGVuYW50T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbG9XaW5kb3cgPSAxMDBuLFxuICAgICAgZWxvT2Zmc2V0ID0gNDAsXG4gICAgICBlbG9EYXRhVHlwZSA9IFwidTE2XCIsXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZCA9IG51bGwsXG4gICAgICBjYWxsYmFja0Rpc2NyaW1pbmF0b3IgPSBudWxsLFxuICAgIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgZWxvU2l6ZSA9IGdldEVsb1NpemUoZWxvRGF0YVR5cGUpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgYXV0aG9yaXR5OiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudFByb2dyYW1JZCxcbiAgICAgIGVsb09mZnNldCxcbiAgICAgIGVsb1NpemUsXG4gICAgICBlbG9XaW5kb3csXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZDogY2FsbGJhY2tQcm9ncmFtSWQgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IGNhbGxiYWNrUHJvZ3JhbUlkIH0gOiB7IF9fb3B0aW9uOiBcIk5vbmVcIiB9LFxuICAgICAgY2FsbGJhY2tEaXNjcmltaW5hdG9yOiBjYWxsYmFja0Rpc2NyaW1pbmF0b3JcbiAgICAgICAgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IG5ldyBVaW50OEFycmF5KGNhbGxiYWNrRGlzY3JpbWluYXRvcikgfVxuICAgICAgICA6IHsgX19vcHRpb246IFwiTm9uZVwiIH0sXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG5cbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVF1ZXVlKFxuICAgIF9hdXRob3JpdHk6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBhdXRob3JpdHk6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBkZWxlZ2F0ZVF1ZXVlKFxuICAgIGF1dGhvcml0eTogQWRkcmVzcyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHF1ZXVlUGRhID0gYXdhaXQgdGhpcy5nZXRRdWV1ZVBkYShhdXRob3JpdHkpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiBxdWV1ZVBkYSxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHZhbGlkYXRvcixcbiAgICAgIGFjY291bnRUeXBlOiBhY2NvdW50VHlwZShcIlF1ZXVlXCIsIHsgYXV0aG9yaXR5IH0pLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBmbHVzaE1hdGNoZXMoXG4gICAgcXVldWU6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHRpY2tldFBkYXM6IEFkZHJlc3NbXSxcbiAgICBjYWxsYmFja1Byb2dyYW0/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gZ2V0Rmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb24oe1xuICAgICAgcXVldWUsXG4gICAgICB0ZW5hbnQsXG4gICAgICBzaWduZXI6IHRoaXMuc2lnbmVyLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuXG4gICAgY29uc3QgcmVtYWluaW5nQWNjb3VudHMgPSBbXG4gICAgICAuLi50aWNrZXRQZGFzLm1hcCgoYWRkcmVzcykgPT4gKHsgYWRkcmVzcywgcm9sZTogMSBhcyBjb25zdCB9KSksXG4gICAgICAuLi4oY2FsbGJhY2tQcm9ncmFtID8gW3sgYWRkcmVzczogY2FsbGJhY2tQcm9ncmFtLCByb2xlOiAwIGFzIGNvbnN0IH1dIDogW10pLFxuICAgIF07XG5cbiAgICBjb25zdCBpeFdpdGhSZW1haW5pbmcgPSB7XG4gICAgICAuLi5peCxcbiAgICAgIGFjY291bnRzOiBbLi4uaXguYWNjb3VudHMsIC4uLnJlbWFpbmluZ0FjY291bnRzXSxcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeFdpdGhSZW1haW5pbmcgYXMgYW55LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBjb21taXRUaWNrZXRzKFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICB0aWNrZXRQZGFzOiBBZGRyZXNzW10sXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBnZXRDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb24oe1xuICAgICAgdGVuYW50LFxuICAgICAgcGF5ZXI6IHRoaXMuc2lnbmVyLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuXG4gICAgY29uc3QgaXhXaXRoUmVtYWluaW5nID0ge1xuICAgICAgLi4uaXgsXG4gICAgICBhY2NvdW50czogW1xuICAgICAgICAuLi5peC5hY2NvdW50cyxcbiAgICAgICAgLi4udGlja2V0UGRhcy5tYXAoKGFkZHJlc3MpID0+ICh7IGFkZHJlc3MsIHJvbGU6IDEgYXMgY29uc3QgfSkpLFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeFdpdGhSZW1haW5pbmcgYXMgYW55LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nQWRtaW4gcG9pbnRpbmcgYXQgYSBURUUgUlBDIGVuZHBvaW50LiAqL1xuICB3aXRoUnBjKHRlZVVybDogc3RyaW5nKTogTWF0Y2htYWtpbmdBZG1pbiB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaG1ha2luZ0FkbWluKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsR0FLaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsVUFBVSxFQUNWLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQWFwQyxTQUFTLFVBQVUsQ0FBQyxRQUFxQjtJQUN2QyxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEIsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQWtCO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENB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RSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FDbEIsS0FBYyxFQUNkLE1BQWUsRUFDZixVQUFxQixFQUNyQixpQkFBaUIsR0FBRyxJQUFJO1FBRXhCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDekMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDdkMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQ3pELENBQ0YsQ0FBQztRQUVGLElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDMUQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsXG4gIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmMsXG4gIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbixcbiAgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLFxuICBmZXRjaFF1ZXVlLFxuICBhY2NvdW50VHlwZSxcbn0gZnJvbSBcIi4vZ2VuZXJhdGVkL2R1ZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IHNlbmRJbnN0cnVjdGlvbiB9IGZyb20gXCIuL3RyYW5zYWN0aW9uLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5leHBvcnQgdHlwZSBFbG9EYXRhVHlwZSA9IFwidThcIiB8IFwidTE2XCIgfCBcInUzMlwiIHwgXCJ1NjRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplVGVuYW50T3B0aW9ucyB7XG4gIGF1dGhvcml0eT86IEFkZHJlc3M7XG4gIGVsb1dpbmRvdz86IGJpZ2ludDtcbiAgZWxvT2Zmc2V0PzogbnVtYmVyO1xuICBlbG9EYXRhVHlwZT86IEVsb0RhdGFUeXBlO1xuICBjYWxsYmFja1Byb2dyYW1JZD86IEFkZHJlc3MgfCBudWxsO1xuICBjYWxsYmFja0Rpc2NyaW1pbmF0b3I/OiBudW1iZXJbXSB8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEVsb1NpemUoZGF0YVR5cGU6IEVsb0RhdGFUeXBlKTogbnVtYmVyIHtcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgXCJ1OFwiOiByZXR1cm4gMTtcbiAgICBjYXNlIFwidTE2XCI6IHJldHVybiAyO1xuICAgIGNhc2UgXCJ1MzJcIjogcmV0dXJuIDQ7XG4gICAgY2FzZSBcInU2NFwiOiByZXR1cm4gODtcbiAgfVxufVxuXG5jb25zdCBEVUVMX1BST0dSQU1fSUQgPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIgYXMgQWRkcmVzcztcblxuZXhwb3J0IGNsYXNzIE1hdGNobWFraW5nQWRtaW4ge1xuICBwdWJsaWMgcnBjOiBScGM8U29sYW5hUnBjQXBpPjtcbiAgcHVibGljIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXI7XG4gIHB1YmxpYyBwcm9ncmFtSWQ6IEFkZHJlc3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICBzaWduZXI6IFRyYW5zYWN0aW9uU2lnbmVyLFxuICAgIHByb2dyYW1JZDogQWRkcmVzcyA9IERVRUxfUFJPR1JBTV9JRCxcbiAgKSB7XG4gICAgdGhpcy5ycGMgPSBycGM7XG4gICAgdGhpcy5zaWduZXIgPSBzaWduZXI7XG4gICAgdGhpcy5wcm9ncmFtSWQgPSBwcm9ncmFtSWQ7XG4gIH1cblxuICBhc3luYyBnZXRRdWV1ZVBkYShhdXRob3JpdHk6IEFkZHJlc3MpOiBQcm9taXNlPEFkZHJlc3M+IHtcbiAgICByZXR1cm4gdXRpbHMuZGVyaXZlUXVldWVQZGEodGhpcy5wcm9ncmFtSWQsIGF1dGhvcml0eSk7XG4gIH1cblxuICBhc3luYyBnZXRUZW5hbnRQZGEoYXV0aG9yaXR5OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHV0aWxzLmRlcml2ZVRlbmFudFBkYSh0aGlzLnByb2dyYW1JZCwgYXV0aG9yaXR5KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXVlKHF1ZXVlUGRhOiBBZGRyZXNzKSB7XG4gICAgcmV0dXJuIGZldGNoUXVldWUodGhpcy5ycGMsIHF1ZXVlUGRhKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemVUZW5hbnQoXG4gICAgdGVuYW50UHJvZ3JhbUlkOiBBZGRyZXNzLFxuICAgIG9wdGlvbnM/OiBJbml0aWFsaXplVGVuYW50T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbG9XaW5kb3cgPSAxMDBuLFxuICAgICAgZWxvT2Zmc2V0ID0gNDAsXG4gICAgICBlbG9EYXRhVHlwZSA9IFwidTE2XCIsXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZCA9IG51bGwsXG4gICAgICBjYWxsYmFja0Rpc2NyaW1pbmF0b3IgPSBudWxsLFxuICAgIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgZWxvU2l6ZSA9IGdldEVsb1NpemUoZWxvRGF0YVR5cGUpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgYXV0aG9yaXR5OiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudFByb2dyYW1JZCxcbiAgICAgIGVsb09mZnNldCxcbiAgICAgIGVsb1NpemUsXG4gICAgICBlbG9XaW5kb3csXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZDogY2FsbGJhY2tQcm9ncmFtSWQgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IGNhbGxiYWNrUHJvZ3JhbUlkIH0gOiB7IF9fb3B0aW9uOiBcIk5vbmVcIiB9LFxuICAgICAgY2FsbGJhY2tEaXNjcmltaW5hdG9yOiBjYWxsYmFja0Rpc2NyaW1pbmF0b3JcbiAgICAgICAgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IG5ldyBVaW50OEFycmF5KGNhbGxiYWNrRGlzY3JpbWluYXRvcikgfVxuICAgICAgICA6IHsgX19vcHRpb246IFwiTm9uZVwiIH0sXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG5cbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVF1ZXVlKFxuICAgIF9hdXRob3JpdHk6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBhdXRob3JpdHk6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBkZWxlZ2F0ZVF1ZXVlKFxuICAgIGF1dGhvcml0eTogQWRkcmVzcyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHF1ZXVlUGRhID0gYXdhaXQgdGhpcy5nZXRRdWV1ZVBkYShhdXRob3JpdHkpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiBxdWV1ZVBkYSxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHZhbGlkYXRvcixcbiAgICAgIGFjY291bnRUeXBlOiBhY2NvdW50VHlwZShcIlF1ZXVlXCIsIHsgYXV0aG9yaXR5IH0pLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBmbHVzaE1hdGNoZXMoXG4gICAgcXVldWU6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHRpY2tldFBkYXM6IEFkZHJlc3NbXSxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKHtcbiAgICAgIHF1ZXVlLFxuICAgICAgdGVuYW50LFxuICAgICAgc2lnbmVyOiB0aGlzLnNpZ25lcixcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcblxuICAgIGNvbnN0IGl4V2l0aFJlbWFpbmluZyA9IHtcbiAgICAgIC4uLml4LFxuICAgICAgYWNjb3VudHM6IFtcbiAgICAgICAgLi4uaXguYWNjb3VudHMsXG4gICAgICAgIC4uLnRpY2tldFBkYXMubWFwKChhZGRyZXNzKSA9PiAoeyBhZGRyZXNzLCByb2xlOiAxIGFzIGNvbnN0IH0pKSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXhXaXRoUmVtYWluaW5nIGFzIGFueSwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgY29tbWl0VGlja2V0cyhcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdGlja2V0UGRhczogQWRkcmVzc1tdLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uKHtcbiAgICAgIHRlbmFudCxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcblxuICAgIGNvbnN0IGl4V2l0aFJlbWFpbmluZyA9IHtcbiAgICAgIC4uLml4LFxuICAgICAgYWNjb3VudHM6IFtcbiAgICAgICAgLi4uaXguYWNjb3VudHMsXG4gICAgICAgIC4uLnRpY2tldFBkYXMubWFwKChhZGRyZXNzKSA9PiAoeyBhZGRyZXNzLCByb2xlOiAxIGFzIGNvbnN0IH0pKSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXhXaXRoUmVtYWluaW5nIGFzIGFueSwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZ2gtbGV2ZWw6IGZ1bGwgbWF0Y2ggcmVzb2x1dGlvbiBmbG93IChydW5zIG9uIFRFRSkuXG4gICAqIFJlYWRzIHRoZSBxdWV1ZSdzIHBlbmRpbmcgbWF0Y2hlcywgZmx1c2hlcyB0aGVtICh1cGRhdGluZyBvcHBvbmVudCB0aWNrZXRzKSxcbiAgICogd2FpdHMgZm9yIFRFRSBzZXR0bGVtZW50LCB0aGVuIGNvbW1pdHMgYWxsIHRpY2tldHMgYmFjayB0byBMMS5cbiAgICogVXNlIGluZGl2aWR1YWwgbWV0aG9kcyAoZmx1c2hNYXRjaGVzLCBjb21taXRUaWNrZXRzKSBhcyBlc2NhcGUgaGF0Y2hlcyBpZiBuZWVkZWQuXG4gICAqL1xuICBhc3luYyByZXNvbHZlTWF0Y2hlcyhcbiAgICBxdWV1ZTogQWRkcmVzcyxcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdGlja2V0UGRhczogQWRkcmVzc1tdLFxuICAgIHNldHRsZW1lbnREZWxheU1zID0gMzAwMCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcXVldWVEYXRhID0gYXdhaXQgdGhpcy5nZXRRdWV1ZShxdWV1ZSk7XG4gICAgY29uc3QgcGVuZGluZ1RpY2tldFBkYXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHF1ZXVlRGF0YS5kYXRhLnBlbmRpbmdNYXRjaGVzLm1hcCgocG0pID0+XG4gICAgICAgIHV0aWxzLmRlcml2ZVRpY2tldFBkYSh0aGlzLnByb2dyYW1JZCwgcG0ucGxheWVyLCB0ZW5hbnQpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgaWYgKHBlbmRpbmdUaWNrZXRQZGFzLmxlbmd0aCA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuZmx1c2hNYXRjaGVzKHF1ZXVlLCB0ZW5hbnQsIHBlbmRpbmdUaWNrZXRQZGFzKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIHNldHRsZW1lbnREZWxheU1zKSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jb21taXRUaWNrZXRzKHRlbmFudCwgdGlja2V0UGRhcyk7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nQWRtaW4gcG9pbnRpbmcgYXQgYSBURUUgUlBDIGVuZHBvaW50LiAqL1xuICB3aXRoUnBjKHRlZVVybDogc3RyaW5nKTogTWF0Y2htYWtpbmdBZG1pbiB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaG1ha2luZ0FkbWluKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
@@ -18,9 +18,7 @@ export declare const DUEL_ERROR__INVALID_ELO_SIZE = 6003;
18
18
  export declare const DUEL_ERROR__INVALID_TICKET_STATUS = 6004;
19
19
  /** InvalidTicketAccount: Invalid ticket account */
20
20
  export declare const DUEL_ERROR__INVALID_TICKET_ACCOUNT = 6005;
21
- /** MissingCallbackProgram: Missing or invalid callback program in remaining accounts */
22
- export declare const DUEL_ERROR__MISSING_CALLBACK_PROGRAM = 6006;
23
- export type DuelError = typeof DUEL_ERROR__DATA_TOO_SMALL | typeof DUEL_ERROR__INVALID_ELO_SIZE | typeof DUEL_ERROR__INVALID_TENANT | typeof DUEL_ERROR__INVALID_TICKET_ACCOUNT | typeof DUEL_ERROR__INVALID_TICKET_STATUS | typeof DUEL_ERROR__MISSING_CALLBACK_PROGRAM | typeof DUEL_ERROR__UNAUTHORIZED;
21
+ export type DuelError = typeof DUEL_ERROR__DATA_TOO_SMALL | typeof DUEL_ERROR__INVALID_ELO_SIZE | typeof DUEL_ERROR__INVALID_TENANT | typeof DUEL_ERROR__INVALID_TICKET_ACCOUNT | typeof DUEL_ERROR__INVALID_TICKET_STATUS | typeof DUEL_ERROR__UNAUTHORIZED;
24
22
  export declare function getDuelErrorMessage(code: DuelError): string;
25
23
  export declare function isDuelError<TProgramErrorCode extends DuelError>(error: unknown, transactionMessage: {
26
24
  instructions: Record<number, {
@@ -19,11 +19,9 @@ export const DUEL_ERROR__INVALID_ELO_SIZE = 0x1773; // 6003
19
19
  export const DUEL_ERROR__INVALID_TICKET_STATUS = 0x1774; // 6004
20
20
  /** InvalidTicketAccount: Invalid ticket account */
21
21
  export const DUEL_ERROR__INVALID_TICKET_ACCOUNT = 0x1775; // 6005
22
- /** MissingCallbackProgram: Missing or invalid callback program in remaining accounts */
23
- export const DUEL_ERROR__MISSING_CALLBACK_PROGRAM = 0x1776; // 6006
24
22
  let duelErrorMessages;
25
23
  if (process.env.NODE_ENV !== 'production') {
26
- duelErrorMessages = { [DUEL_ERROR__DATA_TOO_SMALL]: `Account data too small for ELO read`, [DUEL_ERROR__INVALID_ELO_SIZE]: `Invalid ELO size (must be 1, 2, 4, or 8 bytes)`, [DUEL_ERROR__INVALID_TENANT]: `Account does not belong to the specified Tenant Program`, [DUEL_ERROR__INVALID_TICKET_ACCOUNT]: `Invalid ticket account`, [DUEL_ERROR__INVALID_TICKET_STATUS]: `Invalid ticket status for this operation`, [DUEL_ERROR__MISSING_CALLBACK_PROGRAM]: `Missing or invalid callback program in remaining accounts`, [DUEL_ERROR__UNAUTHORIZED]: `Unauthorized access` };
24
+ duelErrorMessages = { [DUEL_ERROR__DATA_TOO_SMALL]: `Account data too small for ELO read`, [DUEL_ERROR__INVALID_ELO_SIZE]: `Invalid ELO size (must be 1, 2, 4, or 8 bytes)`, [DUEL_ERROR__INVALID_TENANT]: `Account does not belong to the specified Tenant Program`, [DUEL_ERROR__INVALID_TICKET_ACCOUNT]: `Invalid ticket account`, [DUEL_ERROR__INVALID_TICKET_STATUS]: `Invalid ticket status for this operation`, [DUEL_ERROR__UNAUTHORIZED]: `Unauthorized access` };
27
25
  }
28
26
  export function getDuelErrorMessage(code) {
29
27
  if (process.env.NODE_ENV !== 'production') {
@@ -34,4 +32,4 @@ export function getDuelErrorMessage(code) {
34
32
  export function isDuelError(error, transactionMessage, code) {
35
33
  return isProgramError(error, transactionMessage, DUEL_PROGRAM_ADDRESS, code);
36
34
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9lcnJvcnMvZHVlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFnRixNQUFNLGFBQWEsQ0FBQztBQUMzSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDekQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDekQsd0NBQXdDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDdkQscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDM0Qsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDaEUsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDakUsd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFJbkUsSUFBSSxpQkFBd0QsQ0FBQztBQUM3RCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDO0lBQzFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLHFDQUFxQyxFQUFFLENBQUMsNEJBQTRCLENBQUMsRUFBRSxnREFBZ0QsRUFBRSxDQUFDLDBCQUEwQixDQUFDLEVBQUUseURBQXlELEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLHdCQUF3QixFQUFFLENBQUMsaUNBQWlDLENBQUMsRUFBRSwwQ0FBMEMsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLEVBQUUsMkRBQTJELEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLENBQUM7QUFDbGpCLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBZTtJQUNqRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQzFDLE9BQVEsaUJBQStDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE9BQU8sb0RBQW9ELENBQUM7QUFDOUQsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQ3ZCLEtBQWMsRUFDZCxrQkFBaUYsRUFDakYsSUFBd0I7SUFFMUIsT0FBTyxjQUFjLENBQW9CLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuaW1wb3J0IHsgaXNQcm9ncmFtRXJyb3IsIHR5cGUgQWRkcmVzcywgdHlwZSBTT0xBTkFfRVJST1JfX0lOU1RSVUNUSU9OX0VSUk9SX19DVVNUT00sIHR5cGUgU29sYW5hRXJyb3IgfSBmcm9tICdAc29sYW5hL2tpdCc7XG5pbXBvcnQgeyBEVUVMX1BST0dSQU1fQUREUkVTUyB9IGZyb20gJy4uL3Byb2dyYW1zJztcblxuLyoqIEludmFsaWRUZW5hbnQ6IEFjY291bnQgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBzcGVjaWZpZWQgVGVuYW50IFByb2dyYW0gKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19JTlZBTElEX1RFTkFOVCA9IDB4MTc3MDsgLy8gNjAwMFxuLyoqIERhdGFUb29TbWFsbDogQWNjb3VudCBkYXRhIHRvbyBzbWFsbCBmb3IgRUxPIHJlYWQgKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19EQVRBX1RPT19TTUFMTCA9IDB4MTc3MTsgLy8gNjAwMVxuLyoqIFVuYXV0aG9yaXplZDogVW5hdXRob3JpemVkIGFjY2VzcyAqL1xuZXhwb3J0IGNvbnN0IERVRUxfRVJST1JfX1VOQVVUSE9SSVpFRCA9IDB4MTc3MjsgLy8gNjAwMlxuLyoqIEludmFsaWRFbG9TaXplOiBJbnZhbGlkIEVMTyBzaXplIChtdXN0IGJlIDEsIDIsIDQsIG9yIDggYnl0ZXMpICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fSU5WQUxJRF9FTE9fU0laRSA9IDB4MTc3MzsgLy8gNjAwM1xuLyoqIEludmFsaWRUaWNrZXRTdGF0dXM6IEludmFsaWQgdGlja2V0IHN0YXR1cyBmb3IgdGhpcyBvcGVyYXRpb24gKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19JTlZBTElEX1RJQ0tFVF9TVEFUVVMgPSAweDE3NzQ7IC8vIDYwMDRcbi8qKiBJbnZhbGlkVGlja2V0QWNjb3VudDogSW52YWxpZCB0aWNrZXQgYWNjb3VudCAqL1xuZXhwb3J0IGNvbnN0IERVRUxfRVJST1JfX0lOVkFMSURfVElDS0VUX0FDQ09VTlQgPSAweDE3NzU7IC8vIDYwMDVcbi8qKiBNaXNzaW5nQ2FsbGJhY2tQcm9ncmFtOiBNaXNzaW5nIG9yIGludmFsaWQgY2FsbGJhY2sgcHJvZ3JhbSBpbiByZW1haW5pbmcgYWNjb3VudHMgKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19NSVNTSU5HX0NBTExCQUNLX1BST0dSQU0gPSAweDE3NzY7IC8vIDYwMDZcblxuZXhwb3J0IHR5cGUgRHVlbEVycm9yID0gdHlwZW9mIERVRUxfRVJST1JfX0RBVEFfVE9PX1NNQUxMIHwgdHlwZW9mIERVRUxfRVJST1JfX0lOVkFMSURfRUxPX1NJWkUgfCB0eXBlb2YgRFVFTF9FUlJPUl9fSU5WQUxJRF9URU5BTlQgfCB0eXBlb2YgRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfQUNDT1VOVCB8IHR5cGVvZiBEVUVMX0VSUk9SX19JTlZBTElEX1RJQ0tFVF9TVEFUVVMgfCB0eXBlb2YgRFVFTF9FUlJPUl9fTUlTU0lOR19DQUxMQkFDS19QUk9HUkFNIHwgdHlwZW9mIERVRUxfRVJST1JfX1VOQVVUSE9SSVpFRDtcblxubGV0IGR1ZWxFcnJvck1lc3NhZ2VzOiBSZWNvcmQ8RHVlbEVycm9yLCBzdHJpbmc+IHwgdW5kZWZpbmVkO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZHVlbEVycm9yTWVzc2FnZXMgPSB7IFtEVUVMX0VSUk9SX19EQVRBX1RPT19TTUFMTF06IGBBY2NvdW50IGRhdGEgdG9vIHNtYWxsIGZvciBFTE8gcmVhZGAsIFtEVUVMX0VSUk9SX19JTlZBTElEX0VMT19TSVpFXTogYEludmFsaWQgRUxPIHNpemUgKG11c3QgYmUgMSwgMiwgNCwgb3IgOCBieXRlcylgLCBbRFVFTF9FUlJPUl9fSU5WQUxJRF9URU5BTlRdOiBgQWNjb3VudCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHNwZWNpZmllZCBUZW5hbnQgUHJvZ3JhbWAsIFtEVUVMX0VSUk9SX19JTlZBTElEX1RJQ0tFVF9BQ0NPVU5UXTogYEludmFsaWQgdGlja2V0IGFjY291bnRgLCBbRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTXTogYEludmFsaWQgdGlja2V0IHN0YXR1cyBmb3IgdGhpcyBvcGVyYXRpb25gLCBbRFVFTF9FUlJPUl9fTUlTU0lOR19DQUxMQkFDS19QUk9HUkFNXTogYE1pc3Npbmcgb3IgaW52YWxpZCBjYWxsYmFjayBwcm9ncmFtIGluIHJlbWFpbmluZyBhY2NvdW50c2AsIFtEVUVMX0VSUk9SX19VTkFVVEhPUklaRURdOiBgVW5hdXRob3JpemVkIGFjY2Vzc2AgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldER1ZWxFcnJvck1lc3NhZ2UoY29kZTogRHVlbEVycm9yKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKGR1ZWxFcnJvck1lc3NhZ2VzIGFzIFJlY29yZDxEdWVsRXJyb3IsIHN0cmluZz4pW2NvZGVdO1xuICB9XG5cbiAgcmV0dXJuICdFcnJvciBtZXNzYWdlIG5vdCBhdmFpbGFibGUgaW4gcHJvZHVjdGlvbiBidW5kbGVzLic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0R1ZWxFcnJvcjxUUHJvZ3JhbUVycm9yQ29kZSBleHRlbmRzIER1ZWxFcnJvcj4oXG4gICAgZXJyb3I6IHVua25vd24sXG4gICAgdHJhbnNhY3Rpb25NZXNzYWdlOiB7IGluc3RydWN0aW9uczogUmVjb3JkPG51bWJlciwgeyBwcm9ncmFtQWRkcmVzczogQWRkcmVzcyB9PiB9LFxuICAgIGNvZGU/OiBUUHJvZ3JhbUVycm9yQ29kZSxcbik6IGVycm9yIGlzIFNvbGFuYUVycm9yPHR5cGVvZiBTT0xBTkFfRVJST1JfX0lOU1RSVUNUSU9OX0VSUk9SX19DVVNUT00+ICYgUmVhZG9ubHk8eyBjb250ZXh0OiBSZWFkb25seTx7IGNvZGU6IFRQcm9ncmFtRXJyb3JDb2RlIH0+IH0+IHtcbiAgcmV0dXJuIGlzUHJvZ3JhbUVycm9yPFRQcm9ncmFtRXJyb3JDb2RlPihlcnJvciwgdHJhbnNhY3Rpb25NZXNzYWdlLCBEVUVMX1BST0dSQU1fQUREUkVTUywgY29kZSk7XG59Il19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9lcnJvcnMvZHVlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFnRixNQUFNLGFBQWEsQ0FBQztBQUMzSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDekQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDekQsd0NBQXdDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDdkQscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDM0Qsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDaEUsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFJakUsSUFBSSxpQkFBd0QsQ0FBQztBQUM3RCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDO0lBQzFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLHFDQUFxQyxFQUFFLENBQUMsNEJBQTRCLENBQUMsRUFBRSxnREFBZ0QsRUFBRSxDQUFDLDBCQUEwQixDQUFDLEVBQUUseURBQXlELEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLHdCQUF3QixFQUFFLENBQUMsaUNBQWlDLENBQUMsRUFBRSwwQ0FBMEMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztBQUM3YyxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQWU7SUFDakQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUMxQyxPQUFRLGlCQUErQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxPQUFPLG9EQUFvRCxDQUFDO0FBQzlELENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUN2QixLQUFjLEVBQ2Qsa0JBQWlGLEVBQ2pGLElBQXdCO0lBRTFCLE9BQU8sY0FBYyxDQUFvQixLQUFLLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGlzUHJvZ3JhbUVycm9yLCB0eXBlIEFkZHJlc3MsIHR5cGUgU09MQU5BX0VSUk9SX19JTlNUUlVDVElPTl9FUlJPUl9fQ1VTVE9NLCB0eXBlIFNvbGFuYUVycm9yIH0gZnJvbSAnQHNvbGFuYS9raXQnO1xuaW1wb3J0IHsgRFVFTF9QUk9HUkFNX0FERFJFU1MgfSBmcm9tICcuLi9wcm9ncmFtcyc7XG5cbi8qKiBJbnZhbGlkVGVuYW50OiBBY2NvdW50IGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIFRlbmFudCBQcm9ncmFtICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fSU5WQUxJRF9URU5BTlQgPSAweDE3NzA7IC8vIDYwMDBcbi8qKiBEYXRhVG9vU21hbGw6IEFjY291bnQgZGF0YSB0b28gc21hbGwgZm9yIEVMTyByZWFkICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fREFUQV9UT09fU01BTEwgPSAweDE3NzE7IC8vIDYwMDFcbi8qKiBVbmF1dGhvcml6ZWQ6IFVuYXV0aG9yaXplZCBhY2Nlc3MgKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19VTkFVVEhPUklaRUQgPSAweDE3NzI7IC8vIDYwMDJcbi8qKiBJbnZhbGlkRWxvU2l6ZTogSW52YWxpZCBFTE8gc2l6ZSAobXVzdCBiZSAxLCAyLCA0LCBvciA4IGJ5dGVzKSAqL1xuZXhwb3J0IGNvbnN0IERVRUxfRVJST1JfX0lOVkFMSURfRUxPX1NJWkUgPSAweDE3NzM7IC8vIDYwMDNcbi8qKiBJbnZhbGlkVGlja2V0U3RhdHVzOiBJbnZhbGlkIHRpY2tldCBzdGF0dXMgZm9yIHRoaXMgb3BlcmF0aW9uICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTID0gMHgxNzc0OyAvLyA2MDA0XG4vKiogSW52YWxpZFRpY2tldEFjY291bnQ6IEludmFsaWQgdGlja2V0IGFjY291bnQgKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19JTlZBTElEX1RJQ0tFVF9BQ0NPVU5UID0gMHgxNzc1OyAvLyA2MDA1XG5cbmV4cG9ydCB0eXBlIER1ZWxFcnJvciA9IHR5cGVvZiBEVUVMX0VSUk9SX19EQVRBX1RPT19TTUFMTCB8IHR5cGVvZiBEVUVMX0VSUk9SX19JTlZBTElEX0VMT19TSVpFIHwgdHlwZW9mIERVRUxfRVJST1JfX0lOVkFMSURfVEVOQU5UIHwgdHlwZW9mIERVRUxfRVJST1JfX0lOVkFMSURfVElDS0VUX0FDQ09VTlQgfCB0eXBlb2YgRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTIHwgdHlwZW9mIERVRUxfRVJST1JfX1VOQVVUSE9SSVpFRDtcblxubGV0IGR1ZWxFcnJvck1lc3NhZ2VzOiBSZWNvcmQ8RHVlbEVycm9yLCBzdHJpbmc+IHwgdW5kZWZpbmVkO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZHVlbEVycm9yTWVzc2FnZXMgPSB7IFtEVUVMX0VSUk9SX19EQVRBX1RPT19TTUFMTF06IGBBY2NvdW50IGRhdGEgdG9vIHNtYWxsIGZvciBFTE8gcmVhZGAsIFtEVUVMX0VSUk9SX19JTlZBTElEX0VMT19TSVpFXTogYEludmFsaWQgRUxPIHNpemUgKG11c3QgYmUgMSwgMiwgNCwgb3IgOCBieXRlcylgLCBbRFVFTF9FUlJPUl9fSU5WQUxJRF9URU5BTlRdOiBgQWNjb3VudCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHNwZWNpZmllZCBUZW5hbnQgUHJvZ3JhbWAsIFtEVUVMX0VSUk9SX19JTlZBTElEX1RJQ0tFVF9BQ0NPVU5UXTogYEludmFsaWQgdGlja2V0IGFjY291bnRgLCBbRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTXTogYEludmFsaWQgdGlja2V0IHN0YXR1cyBmb3IgdGhpcyBvcGVyYXRpb25gLCBbRFVFTF9FUlJPUl9fVU5BVVRIT1JJWkVEXTogYFVuYXV0aG9yaXplZCBhY2Nlc3NgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREdWVsRXJyb3JNZXNzYWdlKGNvZGU6IER1ZWxFcnJvcik6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuIChkdWVsRXJyb3JNZXNzYWdlcyBhcyBSZWNvcmQ8RHVlbEVycm9yLCBzdHJpbmc+KVtjb2RlXTtcbiAgfVxuXG4gIHJldHVybiAnRXJyb3IgbWVzc2FnZSBub3QgYXZhaWxhYmxlIGluIHByb2R1Y3Rpb24gYnVuZGxlcy4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEdWVsRXJyb3I8VFByb2dyYW1FcnJvckNvZGUgZXh0ZW5kcyBEdWVsRXJyb3I+KFxuICAgIGVycm9yOiB1bmtub3duLFxuICAgIHRyYW5zYWN0aW9uTWVzc2FnZTogeyBpbnN0cnVjdGlvbnM6IFJlY29yZDxudW1iZXIsIHsgcHJvZ3JhbUFkZHJlc3M6IEFkZHJlc3MgfT4gfSxcbiAgICBjb2RlPzogVFByb2dyYW1FcnJvckNvZGUsXG4pOiBlcnJvciBpcyBTb2xhbmFFcnJvcjx0eXBlb2YgU09MQU5BX0VSUk9SX19JTlNUUlVDVElPTl9FUlJPUl9fQ1VTVE9NPiAmIFJlYWRvbmx5PHsgY29udGV4dDogUmVhZG9ubHk8eyBjb2RlOiBUUHJvZ3JhbUVycm9yQ29kZSB9PiB9PiB7XG4gIHJldHVybiBpc1Byb2dyYW1FcnJvcjxUUHJvZ3JhbUVycm9yQ29kZT4oZXJyb3IsIHRyYW5zYWN0aW9uTWVzc2FnZSwgRFVFTF9QUk9HUkFNX0FERFJFU1MsIGNvZGUpO1xufSJdfQ==
@@ -33,10 +33,10 @@ export async function getDelegateQueueInstructionAsync(input, config) {
33
33
  accounts.bufferPda.value = await getProgramDerivedAddress({ programAddress: 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X', seeds: [getBytesEncoder().encode(new Uint8Array([98, 117, 102, 102, 101, 114])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
34
34
  }
35
35
  if (!accounts.delegationRecordPda.value) {
36
- accounts.delegationRecordPda.value = await getProgramDerivedAddress({ programAddress: 'DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh', seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
36
+ accounts.delegationRecordPda.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
37
37
  }
38
38
  if (!accounts.delegationMetadataPda.value) {
39
- accounts.delegationMetadataPda.value = await getProgramDerivedAddress({ programAddress: 'DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh', seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110, 45, 109, 101, 116, 97, 100, 97, 116, 97])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
39
+ accounts.delegationMetadataPda.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([100, 101, 108, 101, 103, 97, 116, 105, 111, 110, 45, 109, 101, 116, 97, 100, 97, 116, 97])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("pda", accounts.pda.value))] });
40
40
  }
41
41
  if (!accounts.ownerProgram.value) {
42
42
  accounts.ownerProgram.value = 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X';
@@ -87,4 +87,4 @@ export function parseDelegateQueueInstruction(instruction) {
87
87
  };
88
88
  return { programAddress: instruction.programAddress, accounts: { bufferPda: getNextAccount(), delegationRecordPda: getNextAccount(), delegationMetadataPda: getNextAccount(), pda: getNextAccount(), payer: getNextAccount(), validator: getNextOptionalAccount(), ownerProgram: getNextAccount(), delegationProgram: getNextAccount(), systemProgram: getNextAccount() }, data: getDelegateQueueInstructionDataDecoder().decode(instruction.data) };
89
89
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVRdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9pbnN0cnVjdGlvbnMvZGVsZWdhdGVRdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx5REFBeUQsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQXFTLE1BQU0sYUFBYSxDQUFDO0FBQzNqQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0NBQXdDLEVBQW1DLE1BQU0sNkJBQTZCLENBQUM7QUFDL0ksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBMEMsTUFBTSxVQUFVLENBQUM7QUFFaEgsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVqRyxNQUFNLFVBQVUsa0NBQWtDLEtBQUssT0FBTyxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBUzFJLE1BQU0sVUFBVSxzQ0FBc0M7SUFDbEQsT0FBTyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FB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QUUsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdmIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGNvbWJpbmVDb2RlYywgZml4RGVjb2RlclNpemUsIGZpeEVuY29kZXJTaXplLCBnZXRBZGRyZXNzRW5jb2RlciwgZ2V0Qnl0ZXNEZWNvZGVyLCBnZXRCeXRlc0VuY29kZXIsIGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcywgZ2V0U3RydWN0RGVjb2RlciwgZ2V0U3RydWN0RW5jb2RlciwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCBTb2xhbmFFcnJvciwgdHJhbnNmb3JtRW5jb2RlciwgdHlwZSBBY2NvdW50TWV0YSwgdHlwZSBBY2NvdW50U2lnbmVyTWV0YSwgdHlwZSBBZGRyZXNzLCB0eXBlIENvZGVjLCB0eXBlIERlY29kZXIsIHR5cGUgRW5jb2RlciwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhBY2NvdW50cywgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5QWNjb3VudCwgdHlwZSBSZWFkb25seVVpbnQ4QXJyYXksIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsIHR5cGUgV3JpdGFibGVBY2NvdW50LCB0eXBlIFdyaXRhYmxlU2lnbmVyQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGdldEFjY291bnRNZXRhRmFjdG9yeSwgZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCwgdHlwZSBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEvcHJvZ3JhbS1jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBEVUVMX1BST0dSQU1fQUREUkVTUyB9IGZyb20gJy4uL3Byb2dyYW1zJztcbmltcG9ydCB7IGdldEFjY291bnRUeXBlRGVjb2RlciwgZ2V0QWNjb3VudFR5cGVFbmNvZGVyLCB0eXBlIEFjY291bnRUeXBlLCB0eXBlIEFjY291bnRUeXBlQXJncyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IERFTEVHQVRFX1FVRVVFX0RJU0NSSU1JTkFUT1IgPSBuZXcgVWludDhBcnJheShbMzEsIDIwMCwgMTM5LCAxMjUsIDkzLCAyMzksIDgzLCA4N10pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZURpc2NyaW1pbmF0b3JCeXRlcygpIHsgcmV0dXJuIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUoREVMRUdBVEVfUVVFVUVfRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gdHlwZW9mIERVRUxfUFJPR1JBTV9BRERSRVNTLCBUQWNjb3VudEJ1ZmZlclBkYSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRQZGEgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRWYWxpZGF0b3IgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudE93bmVyUHJvZ3JhbSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCJERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaFwiLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVwiLCBUUmVtYWluaW5nQWNjb3VudHMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YTxzdHJpbmc+W10gPSBbXT4gPVxuSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8W1RBY2NvdW50QnVmZmVyUGRhIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50QnVmZmVyUGRhPiA6IFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhPiA6IFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGE+IDogVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50UGRhPiA6IFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVTaWduZXJBY2NvdW50PFRBY2NvdW50UGF5ZXI+ICYgQWNjb3VudFNpZ25lck1ldGE8VEFjY291bnRQYXllcj4gOiBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFZhbGlkYXRvcj4gOiBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRPd25lclByb2dyYW0+IDogVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbT4gOiBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPiA6IFRBY2NvdW50U3lzdGVtUHJvZ3JhbSwgLi4uVFJlbWFpbmluZ0FjY291bnRzXT47XG5cbmV4cG9ydCB0eXBlIERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgYWNjb3VudFR5cGU6IEFjY291bnRUeXBlOyAgfTtcblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUFyZ3MgPSB7IGFjY291bnRUeXBlOiBBY2NvdW50VHlwZUFyZ3M7ICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKTogRW5jb2RlcjxEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncz4ge1xuICAgIHJldHVybiB0cmFuc2Zvcm1FbmNvZGVyKGdldFN0cnVjdEVuY29kZXIoW1snZGlzY3JpbWluYXRvcicsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KV0sIFsnYWNjb3VudFR5cGUnLCBnZXRBY2NvdW50VHlwZUVuY29kZXIoKV1dKSwgKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgZGlzY3JpbWluYXRvcjogREVMRUdBVEVfUVVFVUVfRElTQ1JJTUlOQVRPUiB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpOiBEZWNvZGVyPERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gZ2V0U3RydWN0RGVjb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RGVjb2RlclNpemUoZ2V0Qnl0ZXNEZWNvZGVyKCksIDgpXSwgWydhY2NvdW50VHlwZScsIGdldEFjY291bnRUeXBlRGVjb2RlcigpXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUNvZGVjKCk6IENvZGVjPERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzLCBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLCBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpKTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUFzeW5jSW5wdXQ8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBidWZmZXJQZGE/OiBBZGRyZXNzPFRBY2NvdW50QnVmZmVyUGRhPjtcbmRlbGVnYXRpb25SZWNvcmRQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYT47XG5kZWxlZ2F0aW9uTWV0YWRhdGFQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhPjtcbnBkYTogQWRkcmVzczxUQWNjb3VudFBkYT47XG5wYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQYXllcj47XG52YWxpZGF0b3I/OiBBZGRyZXNzPFRBY2NvdW50VmFsaWRhdG9yPjtcbm93bmVyUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRPd25lclByb2dyYW0+O1xuZGVsZWdhdGlvblByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbmFjY291bnRUeXBlOiBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJnc1tcImFjY291bnRUeXBlXCJdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmM8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IERlbGVnYXRlUXVldWVBc3luY0lucHV0PFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhLCBUQWNjb3VudFBkYSwgVEFjY291bnRQYXllciwgVEFjY291bnRWYWxpZGF0b3IsIFRBY2NvdW50T3duZXJQcm9ncmFtLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogUHJvbWlzZTxEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPj4ge1xuICAvLyBQcm9ncmFtIGFkZHJlc3MuXG5jb25zdCBwcm9ncmFtQWRkcmVzcyA9IGNvbmZpZz8ucHJvZ3JhbUFkZHJlc3MgPz8gRFVFTF9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IGJ1ZmZlclBkYTogeyB2YWx1ZTogaW5wdXQuYnVmZmVyUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgZGVsZWdhdGlvblJlY29yZFBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblJlY29yZFBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIGRlbGVnYXRpb25NZXRhZGF0YVBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvbk1ldGFkYXRhUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGRhOiB7IHZhbHVlOiBpbnB1dC5wZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwYXllcjogeyB2YWx1ZTogaW5wdXQucGF5ZXIgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCB2YWxpZGF0b3I6IHsgdmFsdWU6IGlucHV0LnZhbGlkYXRvciA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBvd25lclByb2dyYW06IHsgdmFsdWU6IGlucHV0Lm93bmVyUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBkZWxlZ2F0aW9uUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBPcmlnaW5hbCBhcmdzLlxuY29uc3QgYXJncyA9IHsgLi4uaW5wdXQsICB9O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLmJ1ZmZlclBkYS52YWx1ZSkge1xuYWNjb3VudHMuYnVmZmVyUGRhLnZhbHVlID0gYXdhaXQgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzKHsgcHJvZ3JhbUFkZHJlc3M6ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPiwgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzk4LCAxMTcsIDEwMiwgMTAyLCAxMDEsIDExNF0pKSwgZ2V0QWRkcmVzc0VuY29kZXIoKS5lbmNvZGUoZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudChcInBkYVwiLCBhY2NvdW50cy5wZGEudmFsdWUpKV0gfSk7XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUgPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MoeyBwcm9ncmFtQWRkcmVzczogJ0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJyBhcyBBZGRyZXNzPCdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCc+LCBzZWVkczogW2dldEJ5dGVzRW5jb2RlcigpLmVuY29kZShuZXcgVWludDhBcnJheShbMTAwLCAxMDEsIDEwOCwgMTAxLCAxMDMsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTBdKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJwZGFcIiwgYWNjb3VudHMucGRhLnZhbHVlKSldIH0pO1xufVxuaWYgKCFhY2NvdW50cy5kZWxlZ2F0aW9uTWV0YWRhdGFQZGEudmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25NZXRhZGF0YVBkYS52YWx1ZSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7IHByb2dyYW1BZGRyZXNzOiAnREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2gnIGFzIEFkZHJlc3M8J0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJz4sIHNlZWRzOiBbZ2V0Qnl0ZXNFbmNvZGVyKCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxMDAsIDEwMSwgMTA4LCAxMDEsIDEwMywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNDUsIDEwOSwgMTAxLCAxMTYsIDk3LCAxMDAsIDk3LCAxMTYsIDk3XSkpLCBnZXRBZGRyZXNzRW5jb2RlcigpLmVuY29kZShnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50KFwicGRhXCIsIGFjY291bnRzLnBkYS52YWx1ZSkpXSB9KTtcbn1cbmlmICghYWNjb3VudHMub3duZXJQcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5vd25lclByb2dyYW0udmFsdWUgPSAnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnIGFzIEFkZHJlc3M8J0VkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYJz47XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5kZWxlZ2F0aW9uUHJvZ3JhbS52YWx1ZSA9ICdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCcgYXMgQWRkcmVzczwnREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2gnPjtcbn1cbmlmICghYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSA9ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgYXMgQWRkcmVzczwnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnPjtcbn1cblxuY29uc3QgZ2V0QWNjb3VudE1ldGEgPSBnZXRBY2NvdW50TWV0YUZhY3RvcnkocHJvZ3JhbUFkZHJlc3MsICdwcm9ncmFtSWQnKTtcbnJldHVybiBPYmplY3QuZnJlZXplKHsgYWNjb3VudHM6IFtnZXRBY2NvdW50TWV0YShcImJ1ZmZlclBkYVwiLCBhY2NvdW50cy5idWZmZXJQZGEpLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25SZWNvcmRQZGFcIiwgYWNjb3VudHMuZGVsZWdhdGlvblJlY29yZFBkYSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvbk1ldGFkYXRhUGRhXCIsIGFjY291bnRzLmRlbGVnYXRpb25NZXRhZGF0YVBkYSksIGdldEFjY291bnRNZXRhKFwicGRhXCIsIGFjY291bnRzLnBkYSksIGdldEFjY291bnRNZXRhKFwicGF5ZXJcIiwgYWNjb3VudHMucGF5ZXIpLCBnZXRBY2NvdW50TWV0YShcInZhbGlkYXRvclwiLCBhY2NvdW50cy52YWxpZGF0b3IpLCBnZXRBY2NvdW50TWV0YShcIm93bmVyUHJvZ3JhbVwiLCBhY2NvdW50cy5vd25lclByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25Qcm9ncmFtXCIsIGFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtKSwgZ2V0QWNjb3VudE1ldGEoXCJzeXN0ZW1Qcm9ncmFtXCIsIGFjY291bnRzLnN5c3RlbVByb2dyYW0pXSwgZGF0YTogZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoYXJncyBhcyBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncyksIHByb2dyYW1BZGRyZXNzIH0gYXMgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRCdWZmZXJQZGEsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4pO1xufVxuXG5leHBvcnQgdHlwZSBEZWxlZ2F0ZVF1ZXVlSW5wdXQ8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBidWZmZXJQZGE6IEFkZHJlc3M8VEFjY291bnRCdWZmZXJQZGE+O1xuZGVsZWdhdGlvblJlY29yZFBkYTogQWRkcmVzczxUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGE+O1xuZGVsZWdhdGlvbk1ldGFkYXRhUGRhOiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhPjtcbnBkYTogQWRkcmVzczxUQWNjb3VudFBkYT47XG5wYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQYXllcj47XG52YWxpZGF0b3I/OiBBZGRyZXNzPFRBY2NvdW50VmFsaWRhdG9yPjtcbm93bmVyUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRPd25lclByb2dyYW0+O1xuZGVsZWdhdGlvblByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbmFjY291bnRUeXBlOiBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJnc1tcImFjY291bnRUeXBlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRBY2NvdW50QnVmZmVyUGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnRQYXllciBleHRlbmRzIHN0cmluZywgVEFjY291bnRWYWxpZGF0b3IgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50T3duZXJQcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRQcm9ncmFtQWRkcmVzcyBleHRlbmRzIEFkZHJlc3MgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1M+KGlucHV0OiBEZWxlZ2F0ZVF1ZXVlSW5wdXQ8VEFjY291bnRCdWZmZXJQZGEsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4sIGNvbmZpZz86IHsgcHJvZ3JhbUFkZHJlc3M/OiBUUHJvZ3JhbUFkZHJlc3MgfSApOiBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBEVUVMX1BST0dSQU1fQUREUkVTUztcblxuIC8vIE9yaWdpbmFsIGFjY291bnRzLlxuY29uc3Qgb3JpZ2luYWxBY2NvdW50cyA9IHsgYnVmZmVyUGRhOiB7IHZhbHVlOiBpbnB1dC5idWZmZXJQZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBkZWxlZ2F0aW9uUmVjb3JkUGRhOiB7IHZhbHVlOiBpbnB1dC5kZWxlZ2F0aW9uUmVjb3JkUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgZGVsZWdhdGlvbk1ldGFkYXRhUGRhOiB7IHZhbHVlOiBpbnB1dC5kZWxlZ2F0aW9uTWV0YWRhdGFQZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwZGE6IHsgdmFsdWU6IGlucHV0LnBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBheWVyOiB7IHZhbHVlOiBpbnB1dC5wYXllciA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHZhbGlkYXRvcjogeyB2YWx1ZTogaW5wdXQudmFsaWRhdG9yID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0sIG93bmVyUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQub3duZXJQcm9ncmFtID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0sIGRlbGVnYXRpb25Qcm9ncmFtOiB7IHZhbHVlOiBpbnB1dC5kZWxlZ2F0aW9uUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBzeXN0ZW1Qcm9ncmFtOiB7IHZhbHVlOiBpbnB1dC5zeXN0ZW1Qcm9ncmFtID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0gfVxuY29uc3QgYWNjb3VudHMgPSBvcmlnaW5hbEFjY291bnRzIGFzIFJlY29yZDxrZXlvZiB0eXBlb2Ygb3JpZ2luYWxBY2NvdW50cywgUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQ+O1xuXG5cbi8vIE9yaWdpbmFsIGFyZ3MuXG5jb25zdCBhcmdzID0geyAuLi5pbnB1dCwgIH07XG5cblxuLy8gUmVzb2x2ZSBkZWZhdWx0IHZhbHVlcy5cbmlmICghYWNjb3VudHMub3duZXJQcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5vd25lclByb2dyYW0udmFsdWUgPSAnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnIGFzIEFkZHJlc3M8J0VkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYJz47XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5kZWxlZ2F0aW9uUHJvZ3JhbS52YWx1ZSA9ICdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCcgYXMgQWRkcmVzczwnREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2gnPjtcbn1cbmlmICghYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSkge1xuYWNjb3VudHMuc3lzdGVtUHJvZ3JhbS52YWx1ZSA9ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgYXMgQWRkcmVzczwnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnPjtcbn1cblxuY29uc3QgZ2V0QWNjb3VudE1ldGEgPSBnZXRBY2NvdW50TWV0YUZhY3RvcnkocHJvZ3JhbUFkZHJlc3MsICdwcm9ncmFtSWQnKTtcbnJldHVybiBPYmplY3QuZnJlZXplKHsgYWNjb3VudHM6IFtnZXRBY2NvdW50TWV0YShcImJ1ZmZlclBkYVwiLCBhY2NvdW50cy5idWZmZXJQZGEpLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25SZWNvcmRQZGFcIiwgYWNjb3VudHMuZGVsZWdhdGlvblJlY29yZFBkYSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvbk1ldGFkYXRhUGRhXCIsIGFjY291bnRzLmRlbGVnYXRpb25NZXRhZGF0YVBkYSksIGdldEFjY291bnRNZXRhKFwicGRhXCIsIGFjY291bnRzLnBkYSksIGdldEFjY291bnRNZXRhKFwicGF5ZXJcIiwgYWNjb3VudHMucGF5ZXIpLCBnZXRBY2NvdW50TWV0YShcInZhbGlkYXRvclwiLCBhY2NvdW50cy52YWxpZGF0b3IpLCBnZXRBY2NvdW50TWV0YShcIm93bmVyUHJvZ3JhbVwiLCBhY2NvdW50cy5vd25lclByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcImRlbGVnYXRpb25Qcm9ncmFtXCIsIGFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtKSwgZ2V0QWNjb3VudE1ldGEoXCJzeXN0ZW1Qcm9ncmFtXCIsIGFjY291bnRzLnN5c3RlbVByb2dyYW0pXSwgZGF0YTogZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoYXJncyBhcyBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncyksIHByb2dyYW1BZGRyZXNzIH0gYXMgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRCdWZmZXJQZGEsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4pO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdID0gcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4gPSB7IHByb2dyYW1BZGRyZXNzOiBBZGRyZXNzPFRQcm9ncmFtPjtcbmFjY291bnRzOiB7XG5idWZmZXJQZGE6IFRBY2NvdW50TWV0YXNbMF07XG5kZWxlZ2F0aW9uUmVjb3JkUGRhOiBUQWNjb3VudE1ldGFzWzFdO1xuZGVsZWdhdGlvbk1ldGFkYXRhUGRhOiBUQWNjb3VudE1ldGFzWzJdO1xucGRhOiBUQWNjb3VudE1ldGFzWzNdO1xucGF5ZXI6IFRBY2NvdW50TWV0YXNbNF07XG52YWxpZGF0b3I/OiBUQWNjb3VudE1ldGFzWzVdIHwgdW5kZWZpbmVkO1xub3duZXJQcm9ncmFtOiBUQWNjb3VudE1ldGFzWzZdO1xuZGVsZWdhdGlvblByb2dyYW06IFRBY2NvdW50TWV0YXNbN107XG5zeXN0ZW1Qcm9ncmFtOiBUQWNjb3VudE1ldGFzWzhdO1xufTtcbmRhdGE6IERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGE7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUUHJvZ3JhbT4gJiBJbnN0cnVjdGlvbldpdGhBY2NvdW50czxUQWNjb3VudE1ldGFzPiAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5Pik6IFBhcnNlZERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSwgVEFjY291bnRNZXRhcz4ge1xuICBpZiAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoIDwgOSkge1xuICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCB7IGFjdHVhbEFjY291bnRNZXRhczogaW5zdHJ1Y3Rpb24uYWNjb3VudHMubGVuZ3RoLCBleHBlY3RlZEFjY291bnRNZXRhczogOSB9KTtcbn1cbmxldCBhY2NvdW50SW5kZXggPSAwO1xuY29uc3QgZ2V0TmV4dEFjY291bnQgPSAoKSA9PiB7XG4gIGNvbnN0IGFjY291bnRNZXRhID0gKGluc3RydWN0aW9uLmFjY291bnRzIGFzIFRBY2NvdW50TWV0YXMpW2FjY291bnRJbmRleF0hO1xuICBhY2NvdW50SW5kZXggKz0gMTtcbiAgcmV0dXJuIGFjY291bnRNZXRhO1xufVxuY29uc3QgZ2V0TmV4dE9wdGlvbmFsQWNjb3VudCA9ICgpID0+IHtcbiAgY29uc3QgYWNjb3VudE1ldGEgPSBnZXROZXh0QWNjb3VudCgpO1xuICByZXR1cm4gYWNjb3VudE1ldGEuYWRkcmVzcyA9PT0gRFVFTF9QUk9HUkFNX0FERFJFU1MgPyB1bmRlZmluZWQgOiBhY2NvdW50TWV0YTtcbn07XG4gIHJldHVybiB7IHByb2dyYW1BZGRyZXNzOiBpbnN0cnVjdGlvbi5wcm9ncmFtQWRkcmVzcywgYWNjb3VudHM6IHsgYnVmZmVyUGRhOiBnZXROZXh0QWNjb3VudCgpLCBkZWxlZ2F0aW9uUmVjb3JkUGRhOiBnZXROZXh0QWNjb3VudCgpLCBkZWxlZ2F0aW9uTWV0YWRhdGFQZGE6IGdldE5leHRBY2NvdW50KCksIHBkYTogZ2V0TmV4dEFjY291bnQoKSwgcGF5ZXI6IGdldE5leHRBY2NvdW50KCksIHZhbGlkYXRvcjogZ2V0TmV4dE9wdGlvbmFsQWNjb3VudCgpLCBvd25lclByb2dyYW06IGdldE5leHRBY2NvdW50KCksIGRlbGVnYXRpb25Qcm9ncmFtOiBnZXROZXh0QWNjb3VudCgpLCBzeXN0ZW1Qcm9ncmFtOiBnZXROZXh0QWNjb3VudCgpIH0sIGRhdGE6IGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCkuZGVjb2RlKGluc3RydWN0aW9uLmRhdGEpIH07XG59Il19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVRdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9pbnN0cnVjdGlvbnMvZGVsZWdhdGVRdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx5REFBeUQsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQXFTLE1BQU0sYUFBYSxDQUFDO0FBQzNqQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0NBQXdDLEVBQW1DLE1BQU0sNkJBQTZCLENBQUM7QUFDL0ksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBMEMsTUFBTSxVQUFVLENBQUM7QUFFaEgsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVqRyxNQUFNLFVBQVUsa0NBQWtDLEtBQUssT0FBTyxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBUzFJLE1BQU0sVUFBVSxzQ0FBc0M7SUFDbEQsT0FBTyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FB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QUFFLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdmIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGNvbWJpbmVDb2RlYywgZml4RGVjb2RlclNpemUsIGZpeEVuY29kZXJTaXplLCBnZXRBZGRyZXNzRW5jb2RlciwgZ2V0Qnl0ZXNEZWNvZGVyLCBnZXRCeXRlc0VuY29kZXIsIGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcywgZ2V0U3RydWN0RGVjb2RlciwgZ2V0U3RydWN0RW5jb2RlciwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0lOU1VGRklDSUVOVF9BQ0NPVU5UX01FVEFTLCBTb2xhbmFFcnJvciwgdHJhbnNmb3JtRW5jb2RlciwgdHlwZSBBY2NvdW50TWV0YSwgdHlwZSBBY2NvdW50U2lnbmVyTWV0YSwgdHlwZSBBZGRyZXNzLCB0eXBlIENvZGVjLCB0eXBlIERlY29kZXIsIHR5cGUgRW5jb2RlciwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhBY2NvdW50cywgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5QWNjb3VudCwgdHlwZSBSZWFkb25seVVpbnQ4QXJyYXksIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsIHR5cGUgV3JpdGFibGVBY2NvdW50LCB0eXBlIFdyaXRhYmxlU2lnbmVyQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGdldEFjY291bnRNZXRhRmFjdG9yeSwgZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCwgdHlwZSBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudCB9IGZyb20gJ0Bzb2xhbmEvcHJvZ3JhbS1jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBEVUVMX1BST0dSQU1fQUREUkVTUyB9IGZyb20gJy4uL3Byb2dyYW1zJztcbmltcG9ydCB7IGdldEFjY291bnRUeXBlRGVjb2RlciwgZ2V0QWNjb3VudFR5cGVFbmNvZGVyLCB0eXBlIEFjY291bnRUeXBlLCB0eXBlIEFjY291bnRUeXBlQXJncyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IERFTEVHQVRFX1FVRVVFX0RJU0NSSU1JTkFUT1IgPSBuZXcgVWludDhBcnJheShbMzEsIDIwMCwgMTM5LCAxMjUsIDkzLCAyMzksIDgzLCA4N10pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZURpc2NyaW1pbmF0b3JCeXRlcygpIHsgcmV0dXJuIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUoREVMRUdBVEVfUVVFVUVfRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gdHlwZW9mIERVRUxfUFJPR1JBTV9BRERSRVNTLCBUQWNjb3VudEJ1ZmZlclBkYSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRQZGEgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRWYWxpZGF0b3IgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudE93bmVyUHJvZ3JhbSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCJERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaFwiLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gXCIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVwiLCBUUmVtYWluaW5nQWNjb3VudHMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YTxzdHJpbmc+W10gPSBbXT4gPVxuSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8W1RBY2NvdW50QnVmZmVyUGRhIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50QnVmZmVyUGRhPiA6IFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhPiA6IFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSwgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGE+IDogVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50UGRhPiA6IFRBY2NvdW50UGRhLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVTaWduZXJBY2NvdW50PFRBY2NvdW50UGF5ZXI+ICYgQWNjb3VudFNpZ25lck1ldGE8VEFjY291bnRQYXllcj4gOiBUQWNjb3VudFBheWVyLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFZhbGlkYXRvcj4gOiBUQWNjb3VudFZhbGlkYXRvciwgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRPd25lclByb2dyYW0+IDogVEFjY291bnRPd25lclByb2dyYW0sIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbT4gOiBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPyBSZWFkb25seUFjY291bnQ8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPiA6IFRBY2NvdW50U3lzdGVtUHJvZ3JhbSwgLi4uVFJlbWFpbmluZ0FjY291bnRzXT47XG5cbmV4cG9ydCB0eXBlIERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgYWNjb3VudFR5cGU6IEFjY291bnRUeXBlOyAgfTtcblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUFyZ3MgPSB7IGFjY291bnRUeXBlOiBBY2NvdW50VHlwZUFyZ3M7ICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKTogRW5jb2RlcjxEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncz4ge1xuICAgIHJldHVybiB0cmFuc2Zvcm1FbmNvZGVyKGdldFN0cnVjdEVuY29kZXIoW1snZGlzY3JpbWluYXRvcicsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KV0sIFsnYWNjb3VudFR5cGUnLCBnZXRBY2NvdW50VHlwZUVuY29kZXIoKV1dKSwgKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgZGlzY3JpbWluYXRvcjogREVMRUdBVEVfUVVFVUVfRElTQ1JJTUlOQVRPUiB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpOiBEZWNvZGVyPERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gZ2V0U3RydWN0RGVjb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RGVjb2RlclNpemUoZ2V0Qnl0ZXNEZWNvZGVyKCksIDgpXSwgWydhY2NvdW50VHlwZScsIGdldEFjY291bnRUeXBlRGVjb2RlcigpXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YUNvZGVjKCk6IENvZGVjPERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzLCBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLCBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpKTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVRdWV1ZUFzeW5jSW5wdXQ8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBidWZmZXJQZGE/OiBBZGRyZXNzPFRBY2NvdW50QnVmZmVyUGRhPjtcbmRlbGVnYXRpb25SZWNvcmRQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYT47XG5kZWxlZ2F0aW9uTWV0YWRhdGFQZGE/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhPjtcbnBkYTogQWRkcmVzczxUQWNjb3VudFBkYT47XG5wYXllcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRQYXllcj47XG52YWxpZGF0b3I/OiBBZGRyZXNzPFRBY2NvdW50VmFsaWRhdG9yPjtcbm93bmVyUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRPd25lclByb2dyYW0+O1xuZGVsZWdhdGlvblByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbmFjY291bnRUeXBlOiBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJnc1tcImFjY291bnRUeXBlXCJdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmM8VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IERlbGVnYXRlUXVldWVBc3luY0lucHV0PFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhLCBUQWNjb3VudFBkYSwgVEFjY291bnRQYXllciwgVEFjY291bnRWYWxpZGF0b3IsIFRBY2NvdW50T3duZXJQcm9ncmFtLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogUHJvbWlzZTxEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPj4ge1xuICAvLyBQcm9ncmFtIGFkZHJlc3MuXG5jb25zdCBwcm9ncmFtQWRkcmVzcyA9IGNvbmZpZz8ucHJvZ3JhbUFkZHJlc3MgPz8gRFVFTF9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IGJ1ZmZlclBkYTogeyB2YWx1ZTogaW5wdXQuYnVmZmVyUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgZGVsZWdhdGlvblJlY29yZFBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblJlY29yZFBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIGRlbGVnYXRpb25NZXRhZGF0YVBkYTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvbk1ldGFkYXRhUGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGRhOiB7IHZhbHVlOiBpbnB1dC5wZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwYXllcjogeyB2YWx1ZTogaW5wdXQucGF5ZXIgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCB2YWxpZGF0b3I6IHsgdmFsdWU6IGlucHV0LnZhbGlkYXRvciA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBvd25lclByb2dyYW06IHsgdmFsdWU6IGlucHV0Lm93bmVyUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBkZWxlZ2F0aW9uUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuZGVsZWdhdGlvblByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBPcmlnaW5hbCBhcmdzLlxuY29uc3QgYXJncyA9IHsgLi4uaW5wdXQsICB9O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLmJ1ZmZlclBkYS52YWx1ZSkge1xuYWNjb3VudHMuYnVmZmVyUGRhLnZhbHVlID0gYXdhaXQgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzKHsgcHJvZ3JhbUFkZHJlc3M6ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPiwgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzk4LCAxMTcsIDEwMiwgMTAyLCAxMDEsIDExNF0pKSwgZ2V0QWRkcmVzc0VuY29kZXIoKS5lbmNvZGUoZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudChcInBkYVwiLCBhY2NvdW50cy5wZGEudmFsdWUpKV0gfSk7XG59XG5pZiAoIWFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25SZWNvcmRQZGEudmFsdWUgPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MoeyBwcm9ncmFtQWRkcmVzcywgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzEwMCwgMTAxLCAxMDgsIDEwMSwgMTAzLCA5NywgMTE2LCAxMDUsIDExMSwgMTEwXSkpLCBnZXRBZGRyZXNzRW5jb2RlcigpLmVuY29kZShnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50KFwicGRhXCIsIGFjY291bnRzLnBkYS52YWx1ZSkpXSB9KTtcbn1cbmlmICghYWNjb3VudHMuZGVsZWdhdGlvbk1ldGFkYXRhUGRhLnZhbHVlKSB7XG5hY2NvdW50cy5kZWxlZ2F0aW9uTWV0YWRhdGFQZGEudmFsdWUgPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MoeyBwcm9ncmFtQWRkcmVzcywgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzEwMCwgMTAxLCAxMDgsIDEwMSwgMTAzLCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA0NSwgMTA5LCAxMDEsIDExNiwgOTcsIDEwMCwgOTcsIDExNiwgOTddKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJwZGFcIiwgYWNjb3VudHMucGRhLnZhbHVlKSldIH0pO1xufVxuaWYgKCFhY2NvdW50cy5vd25lclByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLm93bmVyUHJvZ3JhbS52YWx1ZSA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPjtcbn1cbmlmICghYWNjb3VudHMuZGVsZWdhdGlvblByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtLnZhbHVlID0gJ0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJyBhcyBBZGRyZXNzPCdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCc+O1xufVxuaWYgKCFhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyBhcyBBZGRyZXNzPCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc+O1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwiYnVmZmVyUGRhXCIsIGFjY291bnRzLmJ1ZmZlclBkYSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvblJlY29yZFBkYVwiLCBhY2NvdW50cy5kZWxlZ2F0aW9uUmVjb3JkUGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJkZWxlZ2F0aW9uTWV0YWRhdGFQZGFcIiwgYWNjb3VudHMuZGVsZWdhdGlvbk1ldGFkYXRhUGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJwZGFcIiwgYWNjb3VudHMucGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJwYXllclwiLCBhY2NvdW50cy5wYXllciksIGdldEFjY291bnRNZXRhKFwidmFsaWRhdG9yXCIsIGFjY291bnRzLnZhbGlkYXRvciksIGdldEFjY291bnRNZXRhKFwib3duZXJQcm9ncmFtXCIsIGFjY291bnRzLm93bmVyUHJvZ3JhbSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvblByb2dyYW1cIiwgYWNjb3VudHMuZGVsZWdhdGlvblByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcInN5c3RlbVByb2dyYW1cIiwgYWNjb3VudHMuc3lzdGVtUHJvZ3JhbSldLCBkYXRhOiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLmVuY29kZShhcmdzIGFzIERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzKSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPik7XG59XG5cbmV4cG9ydCB0eXBlIERlbGVnYXRlUXVldWVJbnB1dDxUQWNjb3VudEJ1ZmZlclBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQZGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGF5ZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50VmFsaWRhdG9yIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudE93bmVyUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9ICB7XG4gIGJ1ZmZlclBkYTogQWRkcmVzczxUQWNjb3VudEJ1ZmZlclBkYT47XG5kZWxlZ2F0aW9uUmVjb3JkUGRhOiBBZGRyZXNzPFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYT47XG5kZWxlZ2F0aW9uTWV0YWRhdGFQZGE6IEFkZHJlc3M8VEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGE+O1xucGRhOiBBZGRyZXNzPFRBY2NvdW50UGRhPjtcbnBheWVyOiBUcmFuc2FjdGlvblNpZ25lcjxUQWNjb3VudFBheWVyPjtcbnZhbGlkYXRvcj86IEFkZHJlc3M8VEFjY291bnRWYWxpZGF0b3I+O1xub3duZXJQcm9ncmFtPzogQWRkcmVzczxUQWNjb3VudE93bmVyUHJvZ3JhbT47XG5kZWxlZ2F0aW9uUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbT47XG5zeXN0ZW1Qcm9ncmFtPzogQWRkcmVzczxUQWNjb3VudFN5c3RlbVByb2dyYW0+O1xuYWNjb3VudFR5cGU6IERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzW1wiYWNjb3VudFR5cGVcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VEFjY291bnRCdWZmZXJQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblJlY29yZFBkYSBleHRlbmRzIHN0cmluZywgVEFjY291bnREZWxlZ2F0aW9uTWV0YWRhdGFQZGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBheWVyIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFZhbGlkYXRvciBleHRlbmRzIHN0cmluZywgVEFjY291bnRPd25lclByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50RGVsZWdhdGlvblByb2dyYW0gZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IERlbGVnYXRlUXVldWVJbnB1dDxUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPiwgY29uZmlnPzogeyBwcm9ncmFtQWRkcmVzcz86IFRQcm9ncmFtQWRkcmVzcyB9ICk6IERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50QnVmZmVyUGRhLCBUQWNjb3VudERlbGVnYXRpb25SZWNvcmRQZGEsIFRBY2NvdW50RGVsZWdhdGlvbk1ldGFkYXRhUGRhLCBUQWNjb3VudFBkYSwgVEFjY291bnRQYXllciwgVEFjY291bnRWYWxpZGF0b3IsIFRBY2NvdW50T3duZXJQcm9ncmFtLCBUQWNjb3VudERlbGVnYXRpb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+IHtcbiAgLy8gUHJvZ3JhbSBhZGRyZXNzLlxuY29uc3QgcHJvZ3JhbUFkZHJlc3MgPSBjb25maWc/LnByb2dyYW1BZGRyZXNzID8/IERVRUxfUFJPR1JBTV9BRERSRVNTO1xuXG4gLy8gT3JpZ2luYWwgYWNjb3VudHMuXG5jb25zdCBvcmlnaW5hbEFjY291bnRzID0geyBidWZmZXJQZGE6IHsgdmFsdWU6IGlucHV0LmJ1ZmZlclBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIGRlbGVnYXRpb25SZWNvcmRQZGE6IHsgdmFsdWU6IGlucHV0LmRlbGVnYXRpb25SZWNvcmRQZGEgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBkZWxlZ2F0aW9uTWV0YWRhdGFQZGE6IHsgdmFsdWU6IGlucHV0LmRlbGVnYXRpb25NZXRhZGF0YVBkYSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBkYTogeyB2YWx1ZTogaW5wdXQucGRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGF5ZXI6IHsgdmFsdWU6IGlucHV0LnBheWVyID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgdmFsaWRhdG9yOiB7IHZhbHVlOiBpbnB1dC52YWxpZGF0b3IgPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgb3duZXJQcm9ncmFtOiB7IHZhbHVlOiBpbnB1dC5vd25lclByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgZGVsZWdhdGlvblByb2dyYW06IHsgdmFsdWU6IGlucHV0LmRlbGVnYXRpb25Qcm9ncmFtID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0sIHN5c3RlbVByb2dyYW06IHsgdmFsdWU6IGlucHV0LnN5c3RlbVByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSB9XG5jb25zdCBhY2NvdW50cyA9IG9yaWdpbmFsQWNjb3VudHMgYXMgUmVjb3JkPGtleW9mIHR5cGVvZiBvcmlnaW5hbEFjY291bnRzLCBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudD47XG5cblxuLy8gT3JpZ2luYWwgYXJncy5cbmNvbnN0IGFyZ3MgPSB7IC4uLmlucHV0LCAgfTtcblxuXG4vLyBSZXNvbHZlIGRlZmF1bHQgdmFsdWVzLlxuaWYgKCFhY2NvdW50cy5vd25lclByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLm93bmVyUHJvZ3JhbS52YWx1ZSA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPjtcbn1cbmlmICghYWNjb3VudHMuZGVsZWdhdGlvblByb2dyYW0udmFsdWUpIHtcbmFjY291bnRzLmRlbGVnYXRpb25Qcm9ncmFtLnZhbHVlID0gJ0RFTGVHR3ZYcFdWMmZxSlVocWNGNVpTWU1TNEpUTGp0ZWFBTUFSUlNhZVNoJyBhcyBBZGRyZXNzPCdERUxlR0d2WHBXVjJmcUpVaHFjRjVaU1lNUzRKVExqdGVhQU1BUlJTYWVTaCc+O1xufVxuaWYgKCFhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyBhcyBBZGRyZXNzPCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc+O1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwiYnVmZmVyUGRhXCIsIGFjY291bnRzLmJ1ZmZlclBkYSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvblJlY29yZFBkYVwiLCBhY2NvdW50cy5kZWxlZ2F0aW9uUmVjb3JkUGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJkZWxlZ2F0aW9uTWV0YWRhdGFQZGFcIiwgYWNjb3VudHMuZGVsZWdhdGlvbk1ldGFkYXRhUGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJwZGFcIiwgYWNjb3VudHMucGRhKSwgZ2V0QWNjb3VudE1ldGEoXCJwYXllclwiLCBhY2NvdW50cy5wYXllciksIGdldEFjY291bnRNZXRhKFwidmFsaWRhdG9yXCIsIGFjY291bnRzLnZhbGlkYXRvciksIGdldEFjY291bnRNZXRhKFwib3duZXJQcm9ncmFtXCIsIGFjY291bnRzLm93bmVyUHJvZ3JhbSksIGdldEFjY291bnRNZXRhKFwiZGVsZWdhdGlvblByb2dyYW1cIiwgYWNjb3VudHMuZGVsZWdhdGlvblByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcInN5c3RlbVByb2dyYW1cIiwgYWNjb3VudHMuc3lzdGVtUHJvZ3JhbSldLCBkYXRhOiBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLmVuY29kZShhcmdzIGFzIERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkRhdGFBcmdzKSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudEJ1ZmZlclBkYSwgVEFjY291bnREZWxlZ2F0aW9uUmVjb3JkUGRhLCBUQWNjb3VudERlbGVnYXRpb25NZXRhZGF0YVBkYSwgVEFjY291bnRQZGEsIFRBY2NvdW50UGF5ZXIsIFRBY2NvdW50VmFsaWRhdG9yLCBUQWNjb3VudE93bmVyUHJvZ3JhbSwgVEFjY291bnREZWxlZ2F0aW9uUHJvZ3JhbSwgVEFjY291bnRTeXN0ZW1Qcm9ncmFtPik7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10gPSByZWFkb25seSBBY2NvdW50TWV0YVtdPiA9IHsgcHJvZ3JhbUFkZHJlc3M6IEFkZHJlc3M8VFByb2dyYW0+O1xuYWNjb3VudHM6IHtcbmJ1ZmZlclBkYTogVEFjY291bnRNZXRhc1swXTtcbmRlbGVnYXRpb25SZWNvcmRQZGE6IFRBY2NvdW50TWV0YXNbMV07XG5kZWxlZ2F0aW9uTWV0YWRhdGFQZGE6IFRBY2NvdW50TWV0YXNbMl07XG5wZGE6IFRBY2NvdW50TWV0YXNbM107XG5wYXllcjogVEFjY291bnRNZXRhc1s0XTtcbnZhbGlkYXRvcj86IFRBY2NvdW50TWV0YXNbNV0gfCB1bmRlZmluZWQ7XG5vd25lclByb2dyYW06IFRBY2NvdW50TWV0YXNbNl07XG5kZWxlZ2F0aW9uUHJvZ3JhbTogVEFjY291bnRNZXRhc1s3XTtcbnN5c3RlbVByb2dyYW06IFRBY2NvdW50TWV0YXNbOF07XG59O1xuZGF0YTogRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudE1ldGFzIGV4dGVuZHMgcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4oaW5zdHJ1Y3Rpb246IEluc3RydWN0aW9uPFRQcm9ncmFtPiAmIEluc3RydWN0aW9uV2l0aEFjY291bnRzPFRBY2NvdW50TWV0YXM+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+KTogUGFyc2VkRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtLCBUQWNjb3VudE1ldGFzPiB7XG4gIGlmIChpbnN0cnVjdGlvbi5hY2NvdW50cy5sZW5ndGggPCA5KSB7XG4gIHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fSU5TVUZGSUNJRU5UX0FDQ09VTlRfTUVUQVMsIHsgYWN0dWFsQWNjb3VudE1ldGFzOiBpbnN0cnVjdGlvbi5hY2NvdW50cy5sZW5ndGgsIGV4cGVjdGVkQWNjb3VudE1ldGFzOiA5IH0pO1xufVxubGV0IGFjY291bnRJbmRleCA9IDA7XG5jb25zdCBnZXROZXh0QWNjb3VudCA9ICgpID0+IHtcbiAgY29uc3QgYWNjb3VudE1ldGEgPSAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMgYXMgVEFjY291bnRNZXRhcylbYWNjb3VudEluZGV4XSE7XG4gIGFjY291bnRJbmRleCArPSAxO1xuICByZXR1cm4gYWNjb3VudE1ldGE7XG59XG5jb25zdCBnZXROZXh0T3B0aW9uYWxBY2NvdW50ID0gKCkgPT4ge1xuICBjb25zdCBhY2NvdW50TWV0YSA9IGdldE5leHRBY2NvdW50KCk7XG4gIHJldHVybiBhY2NvdW50TWV0YS5hZGRyZXNzID09PSBEVUVMX1BST0dSQU1fQUREUkVTUyA/IHVuZGVmaW5lZCA6IGFjY291bnRNZXRhO1xufTtcbiAgcmV0dXJuIHsgcHJvZ3JhbUFkZHJlc3M6IGluc3RydWN0aW9uLnByb2dyYW1BZGRyZXNzLCBhY2NvdW50czogeyBidWZmZXJQZGE6IGdldE5leHRBY2NvdW50KCksIGRlbGVnYXRpb25SZWNvcmRQZGE6IGdldE5leHRBY2NvdW50KCksIGRlbGVnYXRpb25NZXRhZGF0YVBkYTogZ2V0TmV4dEFjY291bnQoKSwgcGRhOiBnZXROZXh0QWNjb3VudCgpLCBwYXllcjogZ2V0TmV4dEFjY291bnQoKSwgdmFsaWRhdG9yOiBnZXROZXh0T3B0aW9uYWxBY2NvdW50KCksIG93bmVyUHJvZ3JhbTogZ2V0TmV4dEFjY291bnQoKSwgZGVsZWdhdGlvblByb2dyYW06IGdldE5leHRBY2NvdW50KCksIHN5c3RlbVByb2dyYW06IGdldE5leHRBY2NvdW50KCkgfSwgZGF0YTogZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uRGF0YURlY29kZXIoKS5kZWNvZGUoaW5zdHJ1Y3Rpb24uZGF0YSkgfTtcbn0iXX0=