@zcomb/programs-sdk 1.5.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/idls/index.d.ts +1 -0
- package/dist/generated/idls/index.js +4 -2
- package/dist/generated/idls/svault.json +2228 -0
- package/dist/generated/types/index.d.ts +1 -0
- package/dist/generated/types/index.js +1 -1
- package/dist/generated/types/svault.d.ts +2234 -0
- package/dist/generated/types/svault.js +3 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +28 -3
- package/dist/svault/client.d.ts +1231 -0
- package/dist/svault/client.js +190 -0
- package/dist/svault/constants.d.ts +7 -0
- package/dist/svault/constants.js +20 -0
- package/dist/svault/index.d.ts +5 -0
- package/dist/svault/index.js +22 -0
- package/dist/svault/instructions.d.ts +1204 -0
- package/dist/svault/instructions.js +172 -0
- package/dist/svault/types.d.ts +46 -0
- package/dist/svault/types.js +7 -0
- package/dist/svault/utils.d.ts +32 -0
- package/dist/svault/utils.js +86 -0
- package/package.json +1 -1
- package/src/generated/idls/index.ts +1 -0
- package/src/generated/idls/svault.json +2228 -0
- package/src/generated/types/index.ts +1 -0
- package/src/generated/types/svault.ts +2234 -0
- package/src/index.ts +43 -1
- package/src/svault/client.ts +401 -0
- package/src/svault/constants.ts +23 -0
- package/src/svault/index.ts +5 -0
- package/src/svault/instructions.ts +258 -0
- package/src/svault/types.ts +45 -0
- package/src/svault/utils.ts +145 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* High-level client for the SVault program.
|
|
4
|
+
* Provides ergonomic methods for staking operations with automatic PDA derivation
|
|
5
|
+
* and compute budget management.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.SVaultClient = void 0;
|
|
9
|
+
const anchor_1 = require("@coral-xyz/anchor");
|
|
10
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
11
|
+
const constants_1 = require("./constants");
|
|
12
|
+
const utils_1 = require("./utils");
|
|
13
|
+
const instructions_1 = require("./instructions");
|
|
14
|
+
const idls_1 = require("../generated/idls");
|
|
15
|
+
const DEFAULT_COMPUTE_UNITS = 200000;
|
|
16
|
+
class SVaultClient {
|
|
17
|
+
constructor(provider, programId, computeUnits) {
|
|
18
|
+
this.programId = programId ?? constants_1.PROGRAM_ID;
|
|
19
|
+
this.computeUnits = computeUnits ?? DEFAULT_COMPUTE_UNITS;
|
|
20
|
+
this.program = new anchor_1.Program(idls_1.SvaultIDL, provider);
|
|
21
|
+
}
|
|
22
|
+
/* PDA Helpers */
|
|
23
|
+
deriveStakingConfigPDA(tokenMint, nonce) {
|
|
24
|
+
return (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, this.programId);
|
|
25
|
+
}
|
|
26
|
+
deriveUserStakePDA(stakingConfig, user) {
|
|
27
|
+
return (0, utils_1.deriveUserStakePDA)(stakingConfig, user, this.programId);
|
|
28
|
+
}
|
|
29
|
+
deriveDelegatePDA(stakingConfig, delegate) {
|
|
30
|
+
return (0, utils_1.deriveDelegatePDA)(stakingConfig, delegate, this.programId);
|
|
31
|
+
}
|
|
32
|
+
deriveStakeVaultPDA(stakingConfig) {
|
|
33
|
+
return (0, utils_1.deriveStakeVaultPDA)(stakingConfig, this.programId);
|
|
34
|
+
}
|
|
35
|
+
deriveRewardVaultPDA(stakingConfig) {
|
|
36
|
+
return (0, utils_1.deriveRewardVaultPDA)(stakingConfig, this.programId);
|
|
37
|
+
}
|
|
38
|
+
/* State Fetching */
|
|
39
|
+
async fetchStakingConfig(pda) {
|
|
40
|
+
return (0, utils_1.fetchStakingConfigAccount)(this.program, pda);
|
|
41
|
+
}
|
|
42
|
+
async fetchUserStake(pda) {
|
|
43
|
+
return (0, utils_1.fetchUserStakeAccount)(this.program, pda);
|
|
44
|
+
}
|
|
45
|
+
async fetchDelegate(pda) {
|
|
46
|
+
return (0, utils_1.fetchDelegateAccount)(this.program, pda);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Convenience method: Derive staking config PDA from mint + nonce, then fetch user stake.
|
|
50
|
+
*/
|
|
51
|
+
async fetchUserStakeByMint(tokenMint, nonce, user) {
|
|
52
|
+
const [configPda] = this.deriveStakingConfigPDA(tokenMint, nonce);
|
|
53
|
+
const [userStakePda] = this.deriveUserStakePDA(configPda, user);
|
|
54
|
+
return this.fetchUserStake(userStakePda);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Convenience method: Derive staking config PDA from mint + nonce, then fetch config.
|
|
58
|
+
*/
|
|
59
|
+
async fetchStakingConfigByMint(tokenMint, nonce) {
|
|
60
|
+
const [configPda] = this.deriveStakingConfigPDA(tokenMint, nonce);
|
|
61
|
+
return this.fetchStakingConfig(configPda);
|
|
62
|
+
}
|
|
63
|
+
/* Instruction Builders */
|
|
64
|
+
initializeStakingVault(admin, tokenMint, unstakingPeriod, volumeWindow, nonce, options) {
|
|
65
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
66
|
+
let builder = (0, instructions_1.initializeStakingVault)(this.program, admin, tokenMint, unstakingPeriod, volumeWindow, nonce);
|
|
67
|
+
if (includeCuBudget) {
|
|
68
|
+
builder = builder.preInstructions([
|
|
69
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
70
|
+
units: computeUnits ?? this.computeUnits,
|
|
71
|
+
}),
|
|
72
|
+
]);
|
|
73
|
+
}
|
|
74
|
+
const [configPda] = this.deriveStakingConfigPDA(tokenMint, nonce);
|
|
75
|
+
return { builder, configPda };
|
|
76
|
+
}
|
|
77
|
+
stake(user, tokenMint, nonce, amount, options) {
|
|
78
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
79
|
+
let builder = (0, instructions_1.stake)(this.program, user, tokenMint, nonce, amount);
|
|
80
|
+
if (includeCuBudget) {
|
|
81
|
+
builder = builder.preInstructions([
|
|
82
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
83
|
+
units: computeUnits ?? this.computeUnits,
|
|
84
|
+
}),
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
return builder;
|
|
88
|
+
}
|
|
89
|
+
initiateUnstake(user, tokenMint, nonce, amount, options) {
|
|
90
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
91
|
+
let builder = (0, instructions_1.initiateUnstake)(this.program, user, tokenMint, nonce, amount);
|
|
92
|
+
if (includeCuBudget) {
|
|
93
|
+
builder = builder.preInstructions([
|
|
94
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
95
|
+
units: computeUnits ?? this.computeUnits,
|
|
96
|
+
}),
|
|
97
|
+
]);
|
|
98
|
+
}
|
|
99
|
+
return builder;
|
|
100
|
+
}
|
|
101
|
+
withdraw(user, tokenMint, nonce, options) {
|
|
102
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
103
|
+
let builder = (0, instructions_1.withdraw)(this.program, user, tokenMint, nonce);
|
|
104
|
+
if (includeCuBudget) {
|
|
105
|
+
builder = builder.preInstructions([
|
|
106
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
107
|
+
units: computeUnits ?? this.computeUnits,
|
|
108
|
+
}),
|
|
109
|
+
]);
|
|
110
|
+
}
|
|
111
|
+
return builder;
|
|
112
|
+
}
|
|
113
|
+
postRewards(admin, tokenMint, nonce, merkleRoot, totalAmount, options) {
|
|
114
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
115
|
+
let builder = (0, instructions_1.postRewards)(this.program, admin, tokenMint, nonce, merkleRoot, totalAmount);
|
|
116
|
+
if (includeCuBudget) {
|
|
117
|
+
builder = builder.preInstructions([
|
|
118
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
119
|
+
units: computeUnits ?? this.computeUnits,
|
|
120
|
+
}),
|
|
121
|
+
]);
|
|
122
|
+
}
|
|
123
|
+
return builder;
|
|
124
|
+
}
|
|
125
|
+
claimRewards(user, tokenMint, nonce, cumulativeAmount, proof, options) {
|
|
126
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
127
|
+
let builder = (0, instructions_1.claimRewards)(this.program, user, tokenMint, nonce, cumulativeAmount, proof);
|
|
128
|
+
if (includeCuBudget) {
|
|
129
|
+
builder = builder.preInstructions([
|
|
130
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
131
|
+
units: computeUnits ?? this.computeUnits,
|
|
132
|
+
}),
|
|
133
|
+
]);
|
|
134
|
+
}
|
|
135
|
+
return builder;
|
|
136
|
+
}
|
|
137
|
+
setConfig(admin, tokenMint, nonce, params, options) {
|
|
138
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
139
|
+
let builder = (0, instructions_1.setConfig)(this.program, admin, tokenMint, nonce, params.unstakingPeriod ?? null, params.volumeWindow ?? null);
|
|
140
|
+
if (includeCuBudget) {
|
|
141
|
+
builder = builder.preInstructions([
|
|
142
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
143
|
+
units: computeUnits ?? this.computeUnits,
|
|
144
|
+
}),
|
|
145
|
+
]);
|
|
146
|
+
}
|
|
147
|
+
return builder;
|
|
148
|
+
}
|
|
149
|
+
slash(admin, tokenMint, nonce, userToSlash, basisPoints, options) {
|
|
150
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
151
|
+
// Derive user stake PDA from user pubkey
|
|
152
|
+
const [configPda] = this.deriveStakingConfigPDA(tokenMint, nonce);
|
|
153
|
+
const [userStakePda] = this.deriveUserStakePDA(configPda, userToSlash);
|
|
154
|
+
let builder = (0, instructions_1.slash)(this.program, admin, tokenMint, nonce, userStakePda, basisPoints);
|
|
155
|
+
if (includeCuBudget) {
|
|
156
|
+
builder = builder.preInstructions([
|
|
157
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
158
|
+
units: computeUnits ?? this.computeUnits,
|
|
159
|
+
}),
|
|
160
|
+
]);
|
|
161
|
+
}
|
|
162
|
+
return builder;
|
|
163
|
+
}
|
|
164
|
+
addDelegate(staker, delegateWallet, tokenMint, nonce, options) {
|
|
165
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
166
|
+
let builder = (0, instructions_1.addDelegate)(this.program, staker, delegateWallet, tokenMint, nonce);
|
|
167
|
+
if (includeCuBudget) {
|
|
168
|
+
builder = builder.preInstructions([
|
|
169
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
170
|
+
units: computeUnits ?? this.computeUnits,
|
|
171
|
+
}),
|
|
172
|
+
]);
|
|
173
|
+
}
|
|
174
|
+
return builder;
|
|
175
|
+
}
|
|
176
|
+
removeDelegate(staker, delegateWallet, tokenMint, nonce, options) {
|
|
177
|
+
const { includeCuBudget = true, computeUnits } = options ?? {};
|
|
178
|
+
let builder = (0, instructions_1.removeDelegate)(this.program, staker, delegateWallet, tokenMint, nonce);
|
|
179
|
+
if (includeCuBudget) {
|
|
180
|
+
builder = builder.preInstructions([
|
|
181
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
182
|
+
units: computeUnits ?? this.computeUnits,
|
|
183
|
+
}),
|
|
184
|
+
]);
|
|
185
|
+
}
|
|
186
|
+
return builder;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
exports.SVaultClient = SVaultClient;
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N2YXVsdC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUVILDhDQUFnRTtBQUNoRSw2Q0FBa0U7QUFDbEUsMkNBQXlDO0FBUXpDLG1DQVNpQjtBQUNqQixpREFXd0I7QUFFeEIsNENBQThDO0FBRTlDLE1BQU0scUJBQXFCLEdBQUcsTUFBTyxDQUFDO0FBRXRDLE1BQWEsWUFBWTtJQUt2QixZQUNFLFFBQXdCLEVBQ3hCLFNBQXFCLEVBQ3JCLFlBQXFCO1FBRXJCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLHNCQUFVLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLElBQUkscUJBQXFCLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFPLENBQUMsZ0JBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGlCQUFpQjtJQUVqQixzQkFBc0IsQ0FBQyxTQUFvQixFQUFFLEtBQWE7UUFDeEQsT0FBTyxJQUFBLDhCQUFzQixFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxrQkFBa0IsQ0FDaEIsYUFBd0IsRUFDeEIsSUFBZTtRQUVmLE9BQU8sSUFBQSwwQkFBa0IsRUFBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsYUFBd0IsRUFDeEIsUUFBbUI7UUFFbkIsT0FBTyxJQUFBLHlCQUFpQixFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxhQUF3QjtRQUMxQyxPQUFPLElBQUEsMkJBQW1CLEVBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsYUFBd0I7UUFDM0MsT0FBTyxJQUFBLDRCQUFvQixFQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELG9CQUFvQjtJQUVwQixLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBYztRQUNyQyxPQUFPLElBQUEsaUNBQXlCLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFjO1FBQ2pDLE9BQU8sSUFBQSw2QkFBcUIsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQWM7UUFDaEMsT0FBTyxJQUFBLDRCQUFvQixFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUN4QixTQUFvQixFQUNwQixLQUFhLEVBQ2IsSUFBZTtRQUVmLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsd0JBQXdCLENBQzVCLFNBQW9CLEVBQ3BCLEtBQWE7UUFFYixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsMEJBQTBCO0lBRTFCLHNCQUFzQixDQUNwQixLQUFnQixFQUNoQixTQUFvQixFQUNwQixlQUE0QixFQUM1QixZQUF5QixFQUN6QixLQUFhLEVBQ2IsT0FBeUI7UUFFekIsTUFBTSxFQUFFLGVBQWUsR0FBRyxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUUvRCxJQUFJLE9BQU8sR0FBRyxJQUFBLHFDQUFzQixFQUNsQyxJQUFJLENBQUMsT0FBTyxFQUNaLEtBQUssRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLENBQ04sQ0FBQztRQUVGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7Z0JBQ2hDLDhCQUFvQixDQUFDLG1CQUFtQixDQUFDO29CQUN2QyxLQUFLLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZO2lCQUN6QyxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUssQ0FDSCxJQUFlLEVBQ2YsU0FBb0IsRUFDcEIsS0FBYSxFQUNiLE1BQW1CLEVBQ25CLE9BQXlCO1FBRXpCLE1BQU0sRUFBRSxlQUFlLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFL0QsSUFBSSxPQUFPLEdBQUcsSUFBQSxvQkFBSyxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEUsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztnQkFDaEMsOEJBQW9CLENBQUMsbUJBQW1CLENBQUM7b0JBQ3ZDLEtBQUssRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVk7aUJBQ3pDLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGVBQWUsQ0FDYixJQUFlLEVBQ2YsU0FBb0IsRUFDcEIsS0FBYSxFQUNiLE1BQW1CLEVBQ25CLE9BQXlCO1FBRXpCLE1BQU0sRUFBRSxlQUFlLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFL0QsSUFBSSxPQUFPLEdBQUcsSUFBQSw4QkFBZSxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFNUUsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztnQkFDaEMsOEJBQW9CLENBQUMsbUJBQW1CLENBQUM7b0JBQ3ZDLEtBQUssRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVk7aUJBQ3pDLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFFBQVEsQ0FDTixJQUFlLEVBQ2YsU0FBb0IsRUFDcEIsS0FBYSxFQUNiLE9BQXlCO1FBRXpCLE1BQU0sRUFBRSxlQUFlLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFL0QsSUFBSSxPQUFPLEdBQUcsSUFBQSx1QkFBUSxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU3RCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO2dCQUNoQyw4QkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDdkMsS0FBSyxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWTtpQkFDekMsQ0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVyxDQUNULEtBQWdCLEVBQ2hCLFNBQW9CLEVBQ3BCLEtBQWEsRUFDYixVQUFvQixFQUNwQixXQUF3QixFQUN4QixPQUF5QjtRQUV6QixNQUFNLEVBQUUsZUFBZSxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRS9ELElBQUksT0FBTyxHQUFHLElBQUEsMEJBQVcsRUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxVQUFVLEVBQ1YsV0FBVyxDQUNaLENBQUM7UUFFRixJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO2dCQUNoQyw4QkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDdkMsS0FBSyxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWTtpQkFDekMsQ0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsWUFBWSxDQUNWLElBQWUsRUFDZixTQUFvQixFQUNwQixLQUFhLEVBQ2IsZ0JBQTZCLEVBQzdCLEtBQWlCLEVBQ2pCLE9BQXlCO1FBRXpCLE1BQU0sRUFBRSxlQUFlLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFL0QsSUFBSSxPQUFPLEdBQUcsSUFBQSwyQkFBWSxFQUN4QixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksRUFDSixTQUFTLEVBQ1QsS0FBSyxFQUNMLGdCQUFnQixFQUNoQixLQUFLLENBQ04sQ0FBQztRQUVGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7Z0JBQ2hDLDhCQUFvQixDQUFDLG1CQUFtQixDQUFDO29CQUN2QyxLQUFLLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZO2lCQUN6QyxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLENBQ1AsS0FBZ0IsRUFDaEIsU0FBb0IsRUFDcEIsS0FBYSxFQUNiLE1BQXFFLEVBQ3JFLE9BQXlCO1FBRXpCLE1BQU0sRUFBRSxlQUFlLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFL0QsSUFBSSxPQUFPLEdBQUcsSUFBQSx3QkFBUyxFQUNyQixJQUFJLENBQUMsT0FBTyxFQUNaLEtBQUssRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sQ0FBQyxlQUFlLElBQUksSUFBSSxFQUM5QixNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FDNUIsQ0FBQztRQUVGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7Z0JBQ2hDLDhCQUFvQixDQUFDLG1CQUFtQixDQUFDO29CQUN2QyxLQUFLLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZO2lCQUN6QyxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLLENBQ0gsS0FBZ0IsRUFDaEIsU0FBb0IsRUFDcEIsS0FBYSxFQUNiLFdBQXNCLEVBQ3RCLFdBQW1CLEVBQ25CLE9BQXlCO1FBRXpCLE1BQU0sRUFBRSxlQUFlLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFL0QseUNBQXlDO1FBQ3pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXZFLElBQUksT0FBTyxHQUFHLElBQUEsb0JBQUssRUFDakIsSUFBSSxDQUFDLE9BQU8sRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxZQUFZLEVBQ1osV0FBVyxDQUNaLENBQUM7UUFFRixJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO2dCQUNoQyw4QkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDdkMsS0FBSyxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWTtpQkFDekMsQ0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVyxDQUNULE1BQWlCLEVBQ2pCLGNBQXlCLEVBQ3pCLFNBQW9CLEVBQ3BCLEtBQWEsRUFDYixPQUF5QjtRQUV6QixNQUFNLEVBQUUsZUFBZSxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRS9ELElBQUksT0FBTyxHQUFHLElBQUEsMEJBQVcsRUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLFNBQVMsRUFDVCxLQUFLLENBQ04sQ0FBQztRQUVGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7Z0JBQ2hDLDhCQUFvQixDQUFDLG1CQUFtQixDQUFDO29CQUN2QyxLQUFLLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZO2lCQUN6QyxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxjQUFjLENBQ1osTUFBaUIsRUFDakIsY0FBeUIsRUFDekIsU0FBb0IsRUFDcEIsS0FBYSxFQUNiLE9BQXlCO1FBRXpCLE1BQU0sRUFBRSxlQUFlLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFL0QsSUFBSSxPQUFPLEdBQUcsSUFBQSw2QkFBYyxFQUMxQixJQUFJLENBQUMsT0FBTyxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsU0FBUyxFQUNULEtBQUssQ0FDTixDQUFDO1FBRUYsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztnQkFDaEMsOEJBQW9CLENBQUMsbUJBQW1CLENBQUM7b0JBQ3ZDLEtBQUssRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVk7aUJBQ3pDLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBcldELG9DQXFXQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBIaWdoLWxldmVsIGNsaWVudCBmb3IgdGhlIFNWYXVsdCBwcm9ncmFtLlxuICogUHJvdmlkZXMgZXJnb25vbWljIG1ldGhvZHMgZm9yIHN0YWtpbmcgb3BlcmF0aW9ucyB3aXRoIGF1dG9tYXRpYyBQREEgZGVyaXZhdGlvblxuICogYW5kIGNvbXB1dGUgYnVkZ2V0IG1hbmFnZW1lbnQuXG4gKi9cblxuaW1wb3J0IHsgUHJvZ3JhbSwgQW5jaG9yUHJvdmlkZXIsIEJOIH0gZnJvbSBcIkBjb3JhbC14eXovYW5jaG9yXCI7XG5pbXBvcnQgeyBQdWJsaWNLZXksIENvbXB1dGVCdWRnZXRQcm9ncmFtIH0gZnJvbSBcIkBzb2xhbmEvd2ViMy5qc1wiO1xuaW1wb3J0IHsgUFJPR1JBTV9JRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgU3ZhdWx0LFxuICBTVmF1bHRUeE9wdGlvbnMsXG4gIFN0YWtpbmdDb25maWdBY2NvdW50LFxuICBVc2VyU3Rha2VBY2NvdW50LFxuICBEZWxlZ2F0ZUFjY291bnQsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQge1xuICBkZXJpdmVTdGFraW5nQ29uZmlnUERBLFxuICBkZXJpdmVVc2VyU3Rha2VQREEsXG4gIGRlcml2ZURlbGVnYXRlUERBLFxuICBkZXJpdmVTdGFrZVZhdWx0UERBLFxuICBkZXJpdmVSZXdhcmRWYXVsdFBEQSxcbiAgZmV0Y2hTdGFraW5nQ29uZmlnQWNjb3VudCxcbiAgZmV0Y2hVc2VyU3Rha2VBY2NvdW50LFxuICBmZXRjaERlbGVnYXRlQWNjb3VudCxcbn0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIGluaXRpYWxpemVTdGFraW5nVmF1bHQsXG4gIHN0YWtlLFxuICBpbml0aWF0ZVVuc3Rha2UsXG4gIHdpdGhkcmF3LFxuICBwb3N0UmV3YXJkcyxcbiAgY2xhaW1SZXdhcmRzLFxuICBzZXRDb25maWcsXG4gIHNsYXNoLFxuICBhZGREZWxlZ2F0ZSxcbiAgcmVtb3ZlRGVsZWdhdGUsXG59IGZyb20gXCIuL2luc3RydWN0aW9uc1wiO1xuXG5pbXBvcnQgeyBTdmF1bHRJREwgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkL2lkbHNcIjtcblxuY29uc3QgREVGQVVMVF9DT01QVVRFX1VOSVRTID0gMjAwXzAwMDtcblxuZXhwb3J0IGNsYXNzIFNWYXVsdENsaWVudCB7XG4gIHB1YmxpYyBwcm9ncmFtOiBQcm9ncmFtPFN2YXVsdD47XG4gIHB1YmxpYyBwcm9ncmFtSWQ6IFB1YmxpY0tleTtcbiAgcHVibGljIGNvbXB1dGVVbml0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3ZpZGVyOiBBbmNob3JQcm92aWRlcixcbiAgICBwcm9ncmFtSWQ/OiBQdWJsaWNLZXksXG4gICAgY29tcHV0ZVVuaXRzPzogbnVtYmVyXG4gICkge1xuICAgIHRoaXMucHJvZ3JhbUlkID0gcHJvZ3JhbUlkID8/IFBST0dSQU1fSUQ7XG4gICAgdGhpcy5jb21wdXRlVW5pdHMgPSBjb21wdXRlVW5pdHMgPz8gREVGQVVMVF9DT01QVVRFX1VOSVRTO1xuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBQcm9ncmFtKFN2YXVsdElETCBhcyBTdmF1bHQsIHByb3ZpZGVyKTtcbiAgfVxuXG4gIC8qIFBEQSBIZWxwZXJzICovXG5cbiAgZGVyaXZlU3Rha2luZ0NvbmZpZ1BEQSh0b2tlbk1pbnQ6IFB1YmxpY0tleSwgbm9uY2U6IG51bWJlcik6IFtQdWJsaWNLZXksIG51bWJlcl0ge1xuICAgIHJldHVybiBkZXJpdmVTdGFraW5nQ29uZmlnUERBKHRva2VuTWludCwgbm9uY2UsIHRoaXMucHJvZ3JhbUlkKTtcbiAgfVxuXG4gIGRlcml2ZVVzZXJTdGFrZVBEQShcbiAgICBzdGFraW5nQ29uZmlnOiBQdWJsaWNLZXksXG4gICAgdXNlcjogUHVibGljS2V5XG4gICk6IFtQdWJsaWNLZXksIG51bWJlcl0ge1xuICAgIHJldHVybiBkZXJpdmVVc2VyU3Rha2VQREEoc3Rha2luZ0NvbmZpZywgdXNlciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG5cbiAgZGVyaXZlRGVsZWdhdGVQREEoXG4gICAgc3Rha2luZ0NvbmZpZzogUHVibGljS2V5LFxuICAgIGRlbGVnYXRlOiBQdWJsaWNLZXlcbiAgKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIGRlcml2ZURlbGVnYXRlUERBKHN0YWtpbmdDb25maWcsIGRlbGVnYXRlLCB0aGlzLnByb2dyYW1JZCk7XG4gIH1cblxuICBkZXJpdmVTdGFrZVZhdWx0UERBKHN0YWtpbmdDb25maWc6IFB1YmxpY0tleSk6IFtQdWJsaWNLZXksIG51bWJlcl0ge1xuICAgIHJldHVybiBkZXJpdmVTdGFrZVZhdWx0UERBKHN0YWtpbmdDb25maWcsIHRoaXMucHJvZ3JhbUlkKTtcbiAgfVxuXG4gIGRlcml2ZVJld2FyZFZhdWx0UERBKHN0YWtpbmdDb25maWc6IFB1YmxpY0tleSk6IFtQdWJsaWNLZXksIG51bWJlcl0ge1xuICAgIHJldHVybiBkZXJpdmVSZXdhcmRWYXVsdFBEQShzdGFraW5nQ29uZmlnLCB0aGlzLnByb2dyYW1JZCk7XG4gIH1cblxuICAvKiBTdGF0ZSBGZXRjaGluZyAqL1xuXG4gIGFzeW5jIGZldGNoU3Rha2luZ0NvbmZpZyhwZGE6IFB1YmxpY0tleSk6IFByb21pc2U8U3Rha2luZ0NvbmZpZ0FjY291bnQ+IHtcbiAgICByZXR1cm4gZmV0Y2hTdGFraW5nQ29uZmlnQWNjb3VudCh0aGlzLnByb2dyYW0sIHBkYSk7XG4gIH1cblxuICBhc3luYyBmZXRjaFVzZXJTdGFrZShwZGE6IFB1YmxpY0tleSk6IFByb21pc2U8VXNlclN0YWtlQWNjb3VudD4ge1xuICAgIHJldHVybiBmZXRjaFVzZXJTdGFrZUFjY291bnQodGhpcy5wcm9ncmFtLCBwZGEpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEZWxlZ2F0ZShwZGE6IFB1YmxpY0tleSk6IFByb21pc2U8RGVsZWdhdGVBY2NvdW50PiB7XG4gICAgcmV0dXJuIGZldGNoRGVsZWdhdGVBY2NvdW50KHRoaXMucHJvZ3JhbSwgcGRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2Q6IERlcml2ZSBzdGFraW5nIGNvbmZpZyBQREEgZnJvbSBtaW50ICsgbm9uY2UsIHRoZW4gZmV0Y2ggdXNlciBzdGFrZS5cbiAgICovXG4gIGFzeW5jIGZldGNoVXNlclN0YWtlQnlNaW50KFxuICAgIHRva2VuTWludDogUHVibGljS2V5LFxuICAgIG5vbmNlOiBudW1iZXIsXG4gICAgdXNlcjogUHVibGljS2V5XG4gICk6IFByb21pc2U8VXNlclN0YWtlQWNjb3VudD4ge1xuICAgIGNvbnN0IFtjb25maWdQZGFdID0gdGhpcy5kZXJpdmVTdGFraW5nQ29uZmlnUERBKHRva2VuTWludCwgbm9uY2UpO1xuICAgIGNvbnN0IFt1c2VyU3Rha2VQZGFdID0gdGhpcy5kZXJpdmVVc2VyU3Rha2VQREEoY29uZmlnUGRhLCB1c2VyKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFVzZXJTdGFrZSh1c2VyU3Rha2VQZGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZDogRGVyaXZlIHN0YWtpbmcgY29uZmlnIFBEQSBmcm9tIG1pbnQgKyBub25jZSwgdGhlbiBmZXRjaCBjb25maWcuXG4gICAqL1xuICBhc3luYyBmZXRjaFN0YWtpbmdDb25maWdCeU1pbnQoXG4gICAgdG9rZW5NaW50OiBQdWJsaWNLZXksXG4gICAgbm9uY2U6IG51bWJlclxuICApOiBQcm9taXNlPFN0YWtpbmdDb25maWdBY2NvdW50PiB7XG4gICAgY29uc3QgW2NvbmZpZ1BkYV0gPSB0aGlzLmRlcml2ZVN0YWtpbmdDb25maWdQREEodG9rZW5NaW50LCBub25jZSk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hTdGFraW5nQ29uZmlnKGNvbmZpZ1BkYSk7XG4gIH1cblxuICAvKiBJbnN0cnVjdGlvbiBCdWlsZGVycyAqL1xuXG4gIGluaXRpYWxpemVTdGFraW5nVmF1bHQoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgICB1bnN0YWtpbmdQZXJpb2Q6IEJOIHwgbnVtYmVyLFxuICAgIHZvbHVtZVdpbmRvdzogQk4gfCBudW1iZXIsXG4gICAgbm9uY2U6IG51bWJlcixcbiAgICBvcHRpb25zPzogU1ZhdWx0VHhPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHsgaW5jbHVkZUN1QnVkZ2V0ID0gdHJ1ZSwgY29tcHV0ZVVuaXRzIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgbGV0IGJ1aWxkZXIgPSBpbml0aWFsaXplU3Rha2luZ1ZhdWx0KFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgYWRtaW4sXG4gICAgICB0b2tlbk1pbnQsXG4gICAgICB1bnN0YWtpbmdQZXJpb2QsXG4gICAgICB2b2x1bWVXaW5kb3csXG4gICAgICBub25jZVxuICAgICk7XG5cbiAgICBpZiAoaW5jbHVkZUN1QnVkZ2V0KSB7XG4gICAgICBidWlsZGVyID0gYnVpbGRlci5wcmVJbnN0cnVjdGlvbnMoW1xuICAgICAgICBDb21wdXRlQnVkZ2V0UHJvZ3JhbS5zZXRDb21wdXRlVW5pdExpbWl0KHtcbiAgICAgICAgICB1bml0czogY29tcHV0ZVVuaXRzID8/IHRoaXMuY29tcHV0ZVVuaXRzLFxuICAgICAgICB9KSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGNvbnN0IFtjb25maWdQZGFdID0gdGhpcy5kZXJpdmVTdGFraW5nQ29uZmlnUERBKHRva2VuTWludCwgbm9uY2UpO1xuICAgIHJldHVybiB7IGJ1aWxkZXIsIGNvbmZpZ1BkYSB9O1xuICB9XG5cbiAgc3Rha2UoXG4gICAgdXNlcjogUHVibGljS2V5LFxuICAgIHRva2VuTWludDogUHVibGljS2V5LFxuICAgIG5vbmNlOiBudW1iZXIsXG4gICAgYW1vdW50OiBCTiB8IG51bWJlcixcbiAgICBvcHRpb25zPzogU1ZhdWx0VHhPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHsgaW5jbHVkZUN1QnVkZ2V0ID0gdHJ1ZSwgY29tcHV0ZVVuaXRzIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgbGV0IGJ1aWxkZXIgPSBzdGFrZSh0aGlzLnByb2dyYW0sIHVzZXIsIHRva2VuTWludCwgbm9uY2UsIGFtb3VudCk7XG5cbiAgICBpZiAoaW5jbHVkZUN1QnVkZ2V0KSB7XG4gICAgICBidWlsZGVyID0gYnVpbGRlci5wcmVJbnN0cnVjdGlvbnMoW1xuICAgICAgICBDb21wdXRlQnVkZ2V0UHJvZ3JhbS5zZXRDb21wdXRlVW5pdExpbWl0KHtcbiAgICAgICAgICB1bml0czogY29tcHV0ZVVuaXRzID8/IHRoaXMuY29tcHV0ZVVuaXRzLFxuICAgICAgICB9KSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgaW5pdGlhdGVVbnN0YWtlKFxuICAgIHVzZXI6IFB1YmxpY0tleSxcbiAgICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgICBub25jZTogbnVtYmVyLFxuICAgIGFtb3VudDogQk4gfCBudW1iZXIsXG4gICAgb3B0aW9ucz86IFNWYXVsdFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IGluY2x1ZGVDdUJ1ZGdldCA9IHRydWUsIGNvbXB1dGVVbml0cyB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGxldCBidWlsZGVyID0gaW5pdGlhdGVVbnN0YWtlKHRoaXMucHJvZ3JhbSwgdXNlciwgdG9rZW5NaW50LCBub25jZSwgYW1vdW50KTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLnByZUluc3RydWN0aW9ucyhbXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICB3aXRoZHJhdyhcbiAgICB1c2VyOiBQdWJsaWNLZXksXG4gICAgdG9rZW5NaW50OiBQdWJsaWNLZXksXG4gICAgbm9uY2U6IG51bWJlcixcbiAgICBvcHRpb25zPzogU1ZhdWx0VHhPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHsgaW5jbHVkZUN1QnVkZ2V0ID0gdHJ1ZSwgY29tcHV0ZVVuaXRzIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgbGV0IGJ1aWxkZXIgPSB3aXRoZHJhdyh0aGlzLnByb2dyYW0sIHVzZXIsIHRva2VuTWludCwgbm9uY2UpO1xuXG4gICAgaWYgKGluY2x1ZGVDdUJ1ZGdldCkge1xuICAgICAgYnVpbGRlciA9IGJ1aWxkZXIucHJlSW5zdHJ1Y3Rpb25zKFtcbiAgICAgICAgQ29tcHV0ZUJ1ZGdldFByb2dyYW0uc2V0Q29tcHV0ZVVuaXRMaW1pdCh7XG4gICAgICAgICAgdW5pdHM6IGNvbXB1dGVVbml0cyA/PyB0aGlzLmNvbXB1dGVVbml0cyxcbiAgICAgICAgfSksXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIHBvc3RSZXdhcmRzKFxuICAgIGFkbWluOiBQdWJsaWNLZXksXG4gICAgdG9rZW5NaW50OiBQdWJsaWNLZXksXG4gICAgbm9uY2U6IG51bWJlcixcbiAgICBtZXJrbGVSb290OiBudW1iZXJbXSxcbiAgICB0b3RhbEFtb3VudDogQk4gfCBudW1iZXIsXG4gICAgb3B0aW9ucz86IFNWYXVsdFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IGluY2x1ZGVDdUJ1ZGdldCA9IHRydWUsIGNvbXB1dGVVbml0cyB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGxldCBidWlsZGVyID0gcG9zdFJld2FyZHMoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBhZG1pbixcbiAgICAgIHRva2VuTWludCxcbiAgICAgIG5vbmNlLFxuICAgICAgbWVya2xlUm9vdCxcbiAgICAgIHRvdGFsQW1vdW50XG4gICAgKTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLnByZUluc3RydWN0aW9ucyhbXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICBjbGFpbVJld2FyZHMoXG4gICAgdXNlcjogUHVibGljS2V5LFxuICAgIHRva2VuTWludDogUHVibGljS2V5LFxuICAgIG5vbmNlOiBudW1iZXIsXG4gICAgY3VtdWxhdGl2ZUFtb3VudDogQk4gfCBudW1iZXIsXG4gICAgcHJvb2Y6IG51bWJlcltdW10sXG4gICAgb3B0aW9ucz86IFNWYXVsdFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IGluY2x1ZGVDdUJ1ZGdldCA9IHRydWUsIGNvbXB1dGVVbml0cyB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGxldCBidWlsZGVyID0gY2xhaW1SZXdhcmRzKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgdXNlcixcbiAgICAgIHRva2VuTWludCxcbiAgICAgIG5vbmNlLFxuICAgICAgY3VtdWxhdGl2ZUFtb3VudCxcbiAgICAgIHByb29mXG4gICAgKTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLnByZUluc3RydWN0aW9ucyhbXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICBzZXRDb25maWcoXG4gICAgYWRtaW46IFB1YmxpY0tleSxcbiAgICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgICBub25jZTogbnVtYmVyLFxuICAgIHBhcmFtczogeyB1bnN0YWtpbmdQZXJpb2Q/OiBCTiB8IG51bWJlcjsgdm9sdW1lV2luZG93PzogQk4gfCBudW1iZXIgfSxcbiAgICBvcHRpb25zPzogU1ZhdWx0VHhPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHsgaW5jbHVkZUN1QnVkZ2V0ID0gdHJ1ZSwgY29tcHV0ZVVuaXRzIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgbGV0IGJ1aWxkZXIgPSBzZXRDb25maWcoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBhZG1pbixcbiAgICAgIHRva2VuTWludCxcbiAgICAgIG5vbmNlLFxuICAgICAgcGFyYW1zLnVuc3Rha2luZ1BlcmlvZCA/PyBudWxsLFxuICAgICAgcGFyYW1zLnZvbHVtZVdpbmRvdyA/PyBudWxsXG4gICAgKTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLnByZUluc3RydWN0aW9ucyhbXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICBzbGFzaChcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIHRva2VuTWludDogUHVibGljS2V5LFxuICAgIG5vbmNlOiBudW1iZXIsXG4gICAgdXNlclRvU2xhc2g6IFB1YmxpY0tleSxcbiAgICBiYXNpc1BvaW50czogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBTVmF1bHRUeE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgeyBpbmNsdWRlQ3VCdWRnZXQgPSB0cnVlLCBjb21wdXRlVW5pdHMgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICAvLyBEZXJpdmUgdXNlciBzdGFrZSBQREEgZnJvbSB1c2VyIHB1YmtleVxuICAgIGNvbnN0IFtjb25maWdQZGFdID0gdGhpcy5kZXJpdmVTdGFraW5nQ29uZmlnUERBKHRva2VuTWludCwgbm9uY2UpO1xuICAgIGNvbnN0IFt1c2VyU3Rha2VQZGFdID0gdGhpcy5kZXJpdmVVc2VyU3Rha2VQREEoY29uZmlnUGRhLCB1c2VyVG9TbGFzaCk7XG5cbiAgICBsZXQgYnVpbGRlciA9IHNsYXNoKFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgYWRtaW4sXG4gICAgICB0b2tlbk1pbnQsXG4gICAgICBub25jZSxcbiAgICAgIHVzZXJTdGFrZVBkYSxcbiAgICAgIGJhc2lzUG9pbnRzXG4gICAgKTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLnByZUluc3RydWN0aW9ucyhbXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICBhZGREZWxlZ2F0ZShcbiAgICBzdGFrZXI6IFB1YmxpY0tleSxcbiAgICBkZWxlZ2F0ZVdhbGxldDogUHVibGljS2V5LFxuICAgIHRva2VuTWludDogUHVibGljS2V5LFxuICAgIG5vbmNlOiBudW1iZXIsXG4gICAgb3B0aW9ucz86IFNWYXVsdFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IGluY2x1ZGVDdUJ1ZGdldCA9IHRydWUsIGNvbXB1dGVVbml0cyB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGxldCBidWlsZGVyID0gYWRkRGVsZWdhdGUoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBzdGFrZXIsXG4gICAgICBkZWxlZ2F0ZVdhbGxldCxcbiAgICAgIHRva2VuTWludCxcbiAgICAgIG5vbmNlXG4gICAgKTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLnByZUluc3RydWN0aW9ucyhbXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICByZW1vdmVEZWxlZ2F0ZShcbiAgICBzdGFrZXI6IFB1YmxpY0tleSxcbiAgICBkZWxlZ2F0ZVdhbGxldDogUHVibGljS2V5LFxuICAgIHRva2VuTWludDogUHVibGljS2V5LFxuICAgIG5vbmNlOiBudW1iZXIsXG4gICAgb3B0aW9ucz86IFNWYXVsdFR4T3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IGluY2x1ZGVDdUJ1ZGdldCA9IHRydWUsIGNvbXB1dGVVbml0cyB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGxldCBidWlsZGVyID0gcmVtb3ZlRGVsZWdhdGUoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBzdGFrZXIsXG4gICAgICBkZWxlZ2F0ZVdhbGxldCxcbiAgICAgIHRva2VuTWludCxcbiAgICAgIG5vbmNlXG4gICAgKTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLnByZUluc3RydWN0aW9ucyhbXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
|
2
|
+
export declare const PROGRAM_ID: PublicKey;
|
|
3
|
+
export declare const STAKING_CONFIG_SEED: Buffer;
|
|
4
|
+
export declare const USER_STAKE_SEED: Buffer;
|
|
5
|
+
export declare const STAKE_VAULT_SEED: Buffer;
|
|
6
|
+
export declare const REWARD_VAULT_SEED: Buffer;
|
|
7
|
+
export declare const SECONDS_PER_DAY = 86400;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Constants for the SVault program.
|
|
4
|
+
* Parsed from the generated IDL to stay in sync with the Rust program.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SECONDS_PER_DAY = exports.REWARD_VAULT_SEED = exports.STAKE_VAULT_SEED = exports.USER_STAKE_SEED = exports.STAKING_CONFIG_SEED = exports.PROGRAM_ID = void 0;
|
|
8
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
9
|
+
const idls_1 = require("../generated/idls");
|
|
10
|
+
const utils_1 = require("../utils");
|
|
11
|
+
/* Program ID */
|
|
12
|
+
exports.PROGRAM_ID = new web3_js_1.PublicKey(idls_1.SvaultIDL.address);
|
|
13
|
+
/* PDA Seeds */
|
|
14
|
+
exports.STAKING_CONFIG_SEED = (0, utils_1.parseIdlBytes)((0, utils_1.getIdlConstant)(idls_1.SvaultIDL, "STAKING_CONFIG_SEED"));
|
|
15
|
+
exports.USER_STAKE_SEED = (0, utils_1.parseIdlBytes)((0, utils_1.getIdlConstant)(idls_1.SvaultIDL, "USER_STAKE_SEED"));
|
|
16
|
+
exports.STAKE_VAULT_SEED = (0, utils_1.parseIdlBytes)((0, utils_1.getIdlConstant)(idls_1.SvaultIDL, "STAKE_VAULT_SEED"));
|
|
17
|
+
exports.REWARD_VAULT_SEED = (0, utils_1.parseIdlBytes)((0, utils_1.getIdlConstant)(idls_1.SvaultIDL, "REWARD_VAULT_SEED"));
|
|
18
|
+
/* Time Constants */
|
|
19
|
+
exports.SECONDS_PER_DAY = 86400;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N2YXVsdC9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBRUgsNkNBQTRDO0FBQzVDLDRDQUE4QztBQUM5QyxvQ0FBeUQ7QUFFekQsZ0JBQWdCO0FBRUgsUUFBQSxVQUFVLEdBQUcsSUFBSSxtQkFBUyxDQUFDLGdCQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFM0QsZUFBZTtBQUVGLFFBQUEsbUJBQW1CLEdBQUcsSUFBQSxxQkFBYSxFQUFDLElBQUEsc0JBQWMsRUFBQyxnQkFBUyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztBQUN0RixRQUFBLGVBQWUsR0FBRyxJQUFBLHFCQUFhLEVBQUMsSUFBQSxzQkFBYyxFQUFDLGdCQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFFBQUEsZ0JBQWdCLEdBQUcsSUFBQSxxQkFBYSxFQUFDLElBQUEsc0JBQWMsRUFBQyxnQkFBUyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztBQUNoRixRQUFBLGlCQUFpQixHQUFHLElBQUEscUJBQWEsRUFBQyxJQUFBLHNCQUFjLEVBQUMsZ0JBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7QUFFL0Ysb0JBQW9CO0FBRVAsUUFBQSxlQUFlLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvbnN0YW50cyBmb3IgdGhlIFNWYXVsdCBwcm9ncmFtLlxuICogUGFyc2VkIGZyb20gdGhlIGdlbmVyYXRlZCBJREwgdG8gc3RheSBpbiBzeW5jIHdpdGggdGhlIFJ1c3QgcHJvZ3JhbS5cbiAqL1xuXG5pbXBvcnQgeyBQdWJsaWNLZXkgfSBmcm9tIFwiQHNvbGFuYS93ZWIzLmpzXCI7XG5pbXBvcnQgeyBTdmF1bHRJREwgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkL2lkbHNcIjtcbmltcG9ydCB7IHBhcnNlSWRsQnl0ZXMsIGdldElkbENvbnN0YW50IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbi8qIFByb2dyYW0gSUQgKi9cblxuZXhwb3J0IGNvbnN0IFBST0dSQU1fSUQgPSBuZXcgUHVibGljS2V5KFN2YXVsdElETC5hZGRyZXNzKTtcblxuLyogUERBIFNlZWRzICovXG5cbmV4cG9ydCBjb25zdCBTVEFLSU5HX0NPTkZJR19TRUVEID0gcGFyc2VJZGxCeXRlcyhnZXRJZGxDb25zdGFudChTdmF1bHRJREwsIFwiU1RBS0lOR19DT05GSUdfU0VFRFwiKSk7XG5leHBvcnQgY29uc3QgVVNFUl9TVEFLRV9TRUVEID0gcGFyc2VJZGxCeXRlcyhnZXRJZGxDb25zdGFudChTdmF1bHRJREwsIFwiVVNFUl9TVEFLRV9TRUVEXCIpKTtcbmV4cG9ydCBjb25zdCBTVEFLRV9WQVVMVF9TRUVEID0gcGFyc2VJZGxCeXRlcyhnZXRJZGxDb25zdGFudChTdmF1bHRJREwsIFwiU1RBS0VfVkFVTFRfU0VFRFwiKSk7XG5leHBvcnQgY29uc3QgUkVXQVJEX1ZBVUxUX1NFRUQgPSBwYXJzZUlkbEJ5dGVzKGdldElkbENvbnN0YW50KFN2YXVsdElETCwgXCJSRVdBUkRfVkFVTFRfU0VFRFwiKSk7XG5cbi8qIFRpbWUgQ29uc3RhbnRzICovXG5cbmV4cG9ydCBjb25zdCBTRUNPTkRTX1BFUl9EQVkgPSA4NjQwMDtcbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./constants"), exports);
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
__exportStar(require("./utils"), exports);
|
|
20
|
+
__exportStar(require("./instructions"), exports);
|
|
21
|
+
__exportStar(require("./client"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3ZhdWx0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEI7QUFDNUIsMENBQXdCO0FBQ3hCLDBDQUF3QjtBQUN4QixpREFBK0I7QUFDL0IsMkNBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luc3RydWN0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xpZW50XCI7XG4iXX0=
|