@indigo-labs/indigo-sdk 0.3.15 → 0.3.17
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/.github/workflows/ci.yml +2 -4
- package/dist/index.d.mts +40 -8
- package/dist/index.d.ts +40 -8
- package/dist/index.js +125 -69
- package/dist/index.mjs +124 -71
- package/package.json +2 -1
- package/scripts/bench.sh +62 -0
- package/src/contracts/iasset/helpers.ts +1 -1
- package/src/contracts/poll/types-poll-new.ts +10 -5
- package/src/contracts/rob/helpers.ts +122 -43
- package/src/contracts/rob/transactions.ts +12 -3
- package/src/contracts/rob-leverage/helpers.ts +4 -1
- package/src/contracts/stability-pool/types-new.ts +11 -5
- package/src/contracts/stableswap/transactions.ts +1 -5
- package/src/contracts/staking/types-new.ts +5 -3
- package/src/contracts/treasury/transactions.ts +8 -2
- package/src/validators/cdp-creator-validator.ts +1 -1
- package/src/validators/cdp-redeem-validator.ts +1 -1
- package/src/validators/cdp-validator.ts +1 -1
- package/src/validators/collector-validator.ts +1 -1
- package/src/validators/execute-validator.ts +1 -1
- package/src/validators/governance-validator.ts +1 -1
- package/src/validators/iasset-validator.ts +1 -1
- package/src/validators/interest-collection-validator.ts +1 -1
- package/src/validators/interest-oracle-validator.ts +1 -1
- package/src/validators/poll-manager-validator.ts +1 -1
- package/src/validators/poll-shard-validator.ts +1 -1
- package/src/validators/price-oracle-validator.ts +1 -1
- package/src/validators/pyth-feed-validator.ts +1 -1
- package/src/validators/rob-validator.ts +1 -1
- package/src/validators/stability-pool-validator.ts +1 -1
- package/src/validators/stableswap-validator.ts +1 -1
- package/src/validators/staking-validator.ts +1 -1
- package/src/validators/treasury-validator.ts +1 -1
- package/src/validators/version-record-policy.ts +1 -1
- package/tests/cdp/actions.ts +1 -1
- package/tests/cdp/cdp-queries.ts +1 -1
- package/tests/cdp/cdp.test.ts +1 -1
- package/tests/cdp/transactions-mutated.ts +1 -1
- package/tests/gov/gov.test.ts +78 -12
- package/tests/interest-collection/interest-collection.test.ts +5 -5
- package/tests/rob/rob-leverage.test.ts +12 -27
- package/tests/rob/rob.test.ts +56 -52
- package/tests/stability-pool.test.ts +7 -4
- package/tests/stableswap/stableswap.test.ts +1 -1
- package/tests/treasury/actions.ts +67 -0
- package/tests/{queries → treasury}/treasury-queries.ts +11 -2
- package/tests/treasury/treasury.test.ts +342 -0
- package/vitest.config.ts +1 -1
- package/tests/treasury.test.ts +0 -242
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@indigo-labs/indigo-sdk",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.17",
|
|
4
4
|
"description": "Indigo SDK for interacting with Indigo endpoints via lucid-evolution",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
],
|
|
40
40
|
"author": "3rd Eye Labs",
|
|
41
41
|
"license": "MIT",
|
|
42
|
+
"packageManager": "pnpm@10.33.4",
|
|
42
43
|
"dependencies": {
|
|
43
44
|
"@3rd-eye-labs/cardano-offchain-common": "1.2.0",
|
|
44
45
|
"@evolution-sdk/evolution": "^0.3.22",
|
package/scripts/bench.sh
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Runs the testsuite X times and collects the mem spent for each run,
|
|
4
|
+
# at the end, it summarises the results (max, median, avg).
|
|
5
|
+
# It's best to run just a single test using `.only` so it's quick.
|
|
6
|
+
#
|
|
7
|
+
# Usage: ./bench.sh <test-file> <benchmark-name> <runs>
|
|
8
|
+
# Example: ./bench.sh interest-collection.test.ts "Interest Collection - Batch Collect 13 CDPs" 20
|
|
9
|
+
|
|
10
|
+
if [ "$#" -ne 3 ]; then
|
|
11
|
+
echo "Usage: $0 <test-file> <benchmark-name> <runs>"
|
|
12
|
+
echo "Example: $0 interest-collection.test.ts \"Interest Collection - Batch Collect 13 CDPs\" 20"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
test_file="$1"
|
|
17
|
+
benchmark_name="$2"
|
|
18
|
+
runs="$3"
|
|
19
|
+
|
|
20
|
+
if ! [[ "$runs" =~ ^[0-9]+$ ]] || [ "$runs" -lt 1 ]; then
|
|
21
|
+
echo "Error: <runs> must be a positive integer"
|
|
22
|
+
exit 1
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
total=0
|
|
26
|
+
values=()
|
|
27
|
+
|
|
28
|
+
for i in $(seq 1 $runs); do
|
|
29
|
+
echo -n "Run $i/$runs... "
|
|
30
|
+
output=$(pnpm test "$test_file" 2>&1)
|
|
31
|
+
mem=$(echo "$output" | grep "$benchmark_name" | grep -oP "'\d+\.\d+%'" | head -1 | tr -d "'%")
|
|
32
|
+
|
|
33
|
+
if [ -z "$mem" ]; then
|
|
34
|
+
echo "ERROR: benchmark '$benchmark_name' not found in output — aborting"
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
echo "Memory: ${mem}%"
|
|
39
|
+
values+=("$mem")
|
|
40
|
+
total=$(echo "$total + $mem" | bc)
|
|
41
|
+
done
|
|
42
|
+
|
|
43
|
+
sorted=($(printf '%s\n' "${values[@]}" | sort -n))
|
|
44
|
+
|
|
45
|
+
avg=$(echo "scale=3; $total / $runs" | bc)
|
|
46
|
+
min=${sorted[0]}
|
|
47
|
+
max=${sorted[$runs-1]}
|
|
48
|
+
|
|
49
|
+
mid=$(($runs / 2))
|
|
50
|
+
if (( $runs % 2 == 0 )); then
|
|
51
|
+
median=$(echo "scale=3; (${sorted[$mid-1]} + ${sorted[$mid]}) / 2" | bc)
|
|
52
|
+
else
|
|
53
|
+
median=${sorted[$mid]}
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
echo ""
|
|
57
|
+
echo "=== Benchmark: $benchmark_name ==="
|
|
58
|
+
echo "=== Test file: $test_file | Runs: $runs ==="
|
|
59
|
+
echo "Average : ${avg}%"
|
|
60
|
+
echo "Minimum : ${min}%"
|
|
61
|
+
echo "Maximum : ${max}%"
|
|
62
|
+
echo "Median : ${median}%"
|
|
@@ -32,7 +32,7 @@ import { AssetClass } from '@3rd-eye-labs/cardano-offchain-common';
|
|
|
32
32
|
import * as Core from '@evolution-sdk/evolution';
|
|
33
33
|
import { decodePriceUpdate, decodePythMessage } from '../../utils/pyth';
|
|
34
34
|
|
|
35
|
-
export const MAX_COLLATERAL_ASSETS_COUNT_PER_IASSET =
|
|
35
|
+
export const MAX_COLLATERAL_ASSETS_COUNT_PER_IASSET = 9;
|
|
36
36
|
|
|
37
37
|
type Interval = {
|
|
38
38
|
validFrom: number;
|
|
@@ -119,19 +119,24 @@ export function serialisePollShardRedeemer(r: PollShardRedeemer): string {
|
|
|
119
119
|
return Data.withSchema(PollShardRedeemerSchema).toCBORHex(r);
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
export function parsePollShardRedeemer(
|
|
122
|
+
export function parsePollShardRedeemer(
|
|
123
|
+
datum: string,
|
|
124
|
+
): O.Option<PollShardRedeemer> {
|
|
123
125
|
try {
|
|
124
126
|
return O.some(
|
|
125
|
-
Data.withSchema(
|
|
126
|
-
|
|
127
|
-
|
|
127
|
+
Data.withSchema(
|
|
128
|
+
PollShardRedeemerSchema,
|
|
129
|
+
DEFAULT_SCHEMA_OPTIONS,
|
|
130
|
+
).fromCBORHex(datum),
|
|
128
131
|
);
|
|
129
132
|
} catch (_) {
|
|
130
133
|
return O.none;
|
|
131
134
|
}
|
|
132
135
|
}
|
|
133
136
|
|
|
134
|
-
export function parsePollShardRedeemerOrThrow(
|
|
137
|
+
export function parsePollShardRedeemerOrThrow(
|
|
138
|
+
datum: string,
|
|
139
|
+
): PollShardRedeemer {
|
|
135
140
|
return F.pipe(
|
|
136
141
|
parsePollShardRedeemer(datum),
|
|
137
142
|
O.match(() => {
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from '@lucid-evolution/lucid';
|
|
9
9
|
import {
|
|
10
10
|
RobDatum,
|
|
11
|
+
RobOrderType,
|
|
11
12
|
parseRobDatumOrThrow,
|
|
12
13
|
serialiseRobDatum,
|
|
13
14
|
serialiseRobRedeemer,
|
|
@@ -21,7 +22,7 @@ import {
|
|
|
21
22
|
option as O,
|
|
22
23
|
ord as Ord,
|
|
23
24
|
} from 'fp-ts';
|
|
24
|
-
import {
|
|
25
|
+
import { SystemParams } from '../../types/system-params';
|
|
25
26
|
import { match, P } from 'ts-pattern';
|
|
26
27
|
import { getInlineDatumOrThrow } from '../../utils/lucid-utils';
|
|
27
28
|
import {
|
|
@@ -49,16 +50,17 @@ export const MIN_ROB_COLLATERAL_AMT = 3_000_000n;
|
|
|
49
50
|
* The amount of collateral asset available in the ROB when buy order. In case of ADA, take
|
|
50
51
|
* into account the min UTXO collateral.
|
|
51
52
|
*/
|
|
52
|
-
export function robCollateralAmtToSpend(
|
|
53
|
-
|
|
53
|
+
export function robCollateralAmtToSpend(
|
|
54
|
+
robAssets: Assets,
|
|
55
|
+
robOrderType: RobOrderType,
|
|
56
|
+
): bigint {
|
|
57
|
+
return match(robOrderType)
|
|
54
58
|
.returnType<bigint>()
|
|
55
59
|
.with({ BuyIAssetOrder: P.select() }, (content) => {
|
|
56
60
|
if (isSameAssetClass(adaAssetClass, content.collateralAsset)) {
|
|
57
|
-
return zeroNegatives(
|
|
58
|
-
lovelacesAmt(utxo.assets) - MIN_ROB_COLLATERAL_AMT,
|
|
59
|
-
);
|
|
61
|
+
return zeroNegatives(lovelacesAmt(robAssets) - MIN_ROB_COLLATERAL_AMT);
|
|
60
62
|
} else {
|
|
61
|
-
return assetClassValueOf(
|
|
63
|
+
return assetClassValueOf(robAssets, content.collateralAsset);
|
|
62
64
|
}
|
|
63
65
|
})
|
|
64
66
|
.otherwise(() => {
|
|
@@ -70,17 +72,18 @@ export function robCollateralAmtToSpend(utxo: UTxO, datum: RobDatum): bigint {
|
|
|
70
72
|
* The amount if iassets available in ROB when sell order.
|
|
71
73
|
*/
|
|
72
74
|
export function robIAssetAmtToSpend(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
robAssets: Assets,
|
|
76
|
+
robOrderType: RobOrderType,
|
|
77
|
+
/**
|
|
78
|
+
* This has to be assetclass having policyID of Indigo iAssets,
|
|
79
|
+
* and the asset name being the ROB datum iasset.
|
|
80
|
+
*/
|
|
81
|
+
robIasset: AssetClass,
|
|
82
|
+
): bigint {
|
|
83
|
+
return match(robOrderType)
|
|
78
84
|
.returnType<bigint>()
|
|
79
85
|
.with({ SellIAssetOrder: P.any }, (_) => {
|
|
80
|
-
return assetClassValueOf(
|
|
81
|
-
currencySymbol: fromHex(iassetCurrencySymbol.unCurrencySymbol),
|
|
82
|
-
tokenName: datum.iasset,
|
|
83
|
-
});
|
|
86
|
+
return assetClassValueOf(robAssets, robIasset);
|
|
84
87
|
})
|
|
85
88
|
.otherwise(() => {
|
|
86
89
|
throw new Error('IAssets to spend is relevant only for Sell orders.');
|
|
@@ -91,21 +94,80 @@ export function robIAssetAmtToSpend(
|
|
|
91
94
|
* Amount to spend from the ROB universal for Buy and sell orders.
|
|
92
95
|
*/
|
|
93
96
|
export function robAmtToSpend(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
robAssets: Assets,
|
|
98
|
+
robOrderType: RobOrderType,
|
|
99
|
+
/**
|
|
100
|
+
* This has to be assetclass having policyID of Indigo iAssets,
|
|
101
|
+
* and the asset name being the ROB datum iasset.
|
|
102
|
+
*/
|
|
103
|
+
robIasset: AssetClass,
|
|
97
104
|
): bigint {
|
|
98
|
-
return match(
|
|
99
|
-
.with({ BuyIAssetOrder: P.any }, () =>
|
|
105
|
+
return match(robOrderType)
|
|
106
|
+
.with({ BuyIAssetOrder: P.any }, () =>
|
|
107
|
+
robCollateralAmtToSpend(robAssets, robOrderType),
|
|
108
|
+
)
|
|
100
109
|
.with({ SellIAssetOrder: P.any }, () =>
|
|
101
|
-
robIAssetAmtToSpend(
|
|
110
|
+
robIAssetAmtToSpend(robAssets, robOrderType, robIasset),
|
|
102
111
|
)
|
|
103
112
|
.exhaustive();
|
|
104
113
|
}
|
|
105
114
|
|
|
115
|
+
type FilledResult = { asset: AssetClass; filledAmt: bigint };
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* The assets that have filled the order and are able to be claimed.
|
|
119
|
+
*/
|
|
120
|
+
export function robBuyOrderFilledAssets(
|
|
121
|
+
robAssets: Assets,
|
|
122
|
+
robOrderType: RobOrderType,
|
|
123
|
+
/**
|
|
124
|
+
* This has to be assetclass having policyID of Indigo iAssets,
|
|
125
|
+
* and the asset name being the ROB datum iasset.
|
|
126
|
+
*/
|
|
127
|
+
robIasset: AssetClass,
|
|
128
|
+
): FilledResult {
|
|
129
|
+
return match(robOrderType)
|
|
130
|
+
.returnType<FilledResult>()
|
|
131
|
+
.with({ BuyIAssetOrder: P.any }, () => {
|
|
132
|
+
return {
|
|
133
|
+
asset: robIasset,
|
|
134
|
+
filledAmt: assetClassValueOf(robAssets, robIasset),
|
|
135
|
+
};
|
|
136
|
+
})
|
|
137
|
+
.otherwise(() => {
|
|
138
|
+
throw new Error('Expected only buy order.');
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The assets that have filled the order and are able to be claimed.
|
|
144
|
+
*/
|
|
145
|
+
export function robSellOrderFilledAssets(
|
|
146
|
+
robAssets: Assets,
|
|
147
|
+
robOrderType: RobOrderType,
|
|
148
|
+
): FilledResult[] {
|
|
149
|
+
return match(robOrderType)
|
|
150
|
+
.returnType<FilledResult[]>()
|
|
151
|
+
.with({ SellIAssetOrder: P.select() }, (content) => {
|
|
152
|
+
return content.allowedCollateralAssets.map(([asset, _]) => {
|
|
153
|
+
return {
|
|
154
|
+
asset: asset,
|
|
155
|
+
filledAmt:
|
|
156
|
+
assetClassValueOf(robAssets, asset) -
|
|
157
|
+
(isSameAssetClass(asset, adaAssetClass)
|
|
158
|
+
? MIN_ROB_COLLATERAL_AMT
|
|
159
|
+
: 0n),
|
|
160
|
+
} satisfies FilledResult;
|
|
161
|
+
});
|
|
162
|
+
})
|
|
163
|
+
.otherwise(() => {
|
|
164
|
+
throw new Error('Expected only sell order.');
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
106
168
|
export function robBuyOrderSummary(
|
|
107
|
-
|
|
108
|
-
|
|
169
|
+
robAssets: Assets,
|
|
170
|
+
robOrderType: RobOrderType,
|
|
109
171
|
oraclePrice: Rational,
|
|
110
172
|
): {
|
|
111
173
|
/**
|
|
@@ -117,7 +179,7 @@ export function robBuyOrderSummary(
|
|
|
117
179
|
*/
|
|
118
180
|
payoutIAsset: bigint;
|
|
119
181
|
} {
|
|
120
|
-
const redeemable = robCollateralAmtToSpend(
|
|
182
|
+
const redeemable = robCollateralAmtToSpend(robAssets, robOrderType);
|
|
121
183
|
|
|
122
184
|
const payoutAmt = iassetValueOfCollateral(redeemable, oraclePrice);
|
|
123
185
|
|
|
@@ -131,11 +193,11 @@ export function robBuyOrderSummary(
|
|
|
131
193
|
* In case it's applied to a sell order instead, it will throw an error.
|
|
132
194
|
*/
|
|
133
195
|
export function isBuyOrderFullyRedeemed(
|
|
134
|
-
|
|
135
|
-
|
|
196
|
+
robAssets: Assets,
|
|
197
|
+
robOrderType: RobOrderType,
|
|
136
198
|
oraclePrice: Rational,
|
|
137
199
|
): boolean {
|
|
138
|
-
const summary = robBuyOrderSummary(
|
|
200
|
+
const summary = robBuyOrderSummary(robAssets, robOrderType, oraclePrice);
|
|
139
201
|
|
|
140
202
|
return summary.redeemableCollateral <= 0n || summary.payoutIAsset <= 0n;
|
|
141
203
|
}
|
|
@@ -144,21 +206,25 @@ export function isBuyOrderFullyRedeemed(
|
|
|
144
206
|
* Use the limit prices to decide fully redeemed.
|
|
145
207
|
*/
|
|
146
208
|
export function isFullyRedeemed(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
209
|
+
robAssets: Assets,
|
|
210
|
+
robOrderType: RobOrderType,
|
|
211
|
+
/**
|
|
212
|
+
* This has to be assetclass having policyID of Indigo iAssets,
|
|
213
|
+
* and the asset name being the ROB datum iasset.
|
|
214
|
+
*/
|
|
215
|
+
robIasset: AssetClass,
|
|
150
216
|
): boolean {
|
|
151
|
-
return match(
|
|
217
|
+
return match(robOrderType)
|
|
152
218
|
.returnType<boolean>()
|
|
153
219
|
.with({ BuyIAssetOrder: P.select() }, (content) =>
|
|
154
|
-
isBuyOrderFullyRedeemed(
|
|
220
|
+
isBuyOrderFullyRedeemed(robAssets, robOrderType, content.maxPrice),
|
|
155
221
|
)
|
|
156
222
|
|
|
157
223
|
.with({ SellIAssetOrder: P.select() }, (content) => {
|
|
158
224
|
const iassetToSpend = robIAssetAmtToSpend(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
225
|
+
robAssets,
|
|
226
|
+
robOrderType,
|
|
227
|
+
robIasset,
|
|
162
228
|
);
|
|
163
229
|
|
|
164
230
|
const payoutAmts = content.allowedCollateralAssets.map((c) =>
|
|
@@ -353,7 +419,7 @@ export function calculateTotalCollateralForRedemption(
|
|
|
353
419
|
(content) =>
|
|
354
420
|
isSameAssetClass(content.collateralAsset, collateralAsset) &&
|
|
355
421
|
rationalToFloat(content.maxPrice) >= rationalToFloat(iassetPrice) &&
|
|
356
|
-
!isBuyOrderFullyRedeemed(utxo, datum, iassetPrice),
|
|
422
|
+
!isBuyOrderFullyRedeemed(utxo.assets, datum.orderType, iassetPrice),
|
|
357
423
|
)
|
|
358
424
|
.otherwise(() => false);
|
|
359
425
|
|
|
@@ -362,7 +428,10 @@ export function calculateTotalCollateralForRedemption(
|
|
|
362
428
|
}
|
|
363
429
|
|
|
364
430
|
// We constrained in the logic above that the ROB is a buy order and is not yet fully redeemed.
|
|
365
|
-
const collateralToSpend = robCollateralAmtToSpend(
|
|
431
|
+
const collateralToSpend = robCollateralAmtToSpend(
|
|
432
|
+
utxo.assets,
|
|
433
|
+
datum.orderType,
|
|
434
|
+
);
|
|
366
435
|
|
|
367
436
|
return O.some(collateralToSpend);
|
|
368
437
|
}),
|
|
@@ -413,7 +482,7 @@ export function randomRobsSubsetSatisfyingTargetCollateral(
|
|
|
413
482
|
)
|
|
414
483
|
// Only buy order types
|
|
415
484
|
.otherwise(() => false) &&
|
|
416
|
-
!isBuyOrderFullyRedeemed(utxo, datum, iassetPrice),
|
|
485
|
+
!isBuyOrderFullyRedeemed(utxo.assets, datum.orderType, iassetPrice),
|
|
417
486
|
),
|
|
418
487
|
),
|
|
419
488
|
);
|
|
@@ -425,7 +494,10 @@ export function randomRobsSubsetSatisfyingTargetCollateral(
|
|
|
425
494
|
for (let i = 0; i < shuffled.length; i++) {
|
|
426
495
|
const element = shuffled[i];
|
|
427
496
|
|
|
428
|
-
const lovelacesToSpend = robCollateralAmtToSpend(
|
|
497
|
+
const lovelacesToSpend = robCollateralAmtToSpend(
|
|
498
|
+
element[0].assets,
|
|
499
|
+
element[1].orderType,
|
|
500
|
+
);
|
|
429
501
|
|
|
430
502
|
const remainingToRedeem = targetCollateralToSpend - runningSum;
|
|
431
503
|
const remainingToPayout = iassetValueOfCollateral(
|
|
@@ -438,7 +510,11 @@ export function randomRobsSubsetSatisfyingTargetCollateral(
|
|
|
438
510
|
if (result.length > 0 && remainingToPayout <= 0n) {
|
|
439
511
|
const last = result[result.length - 1];
|
|
440
512
|
|
|
441
|
-
const lastSummary = robBuyOrderSummary(
|
|
513
|
+
const lastSummary = robBuyOrderSummary(
|
|
514
|
+
last[0].assets,
|
|
515
|
+
last[1].orderType,
|
|
516
|
+
iassetPrice,
|
|
517
|
+
);
|
|
442
518
|
|
|
443
519
|
// Pop the smallest collected when the current is larger.
|
|
444
520
|
if (lastSummary.redeemableCollateral < lovelacesToSpend) {
|
|
@@ -453,7 +529,7 @@ export function randomRobsSubsetSatisfyingTargetCollateral(
|
|
|
453
529
|
result,
|
|
454
530
|
element,
|
|
455
531
|
Ord.contramap<bigint, [UTxO, RobDatum]>(
|
|
456
|
-
([utxo, dat]) => robCollateralAmtToSpend(utxo, dat),
|
|
532
|
+
([utxo, dat]) => robCollateralAmtToSpend(utxo.assets, dat.orderType),
|
|
457
533
|
// From highest to lowest
|
|
458
534
|
)(Ord.reverse(BigIntOrd)),
|
|
459
535
|
);
|
|
@@ -462,7 +538,10 @@ export function randomRobsSubsetSatisfyingTargetCollateral(
|
|
|
462
538
|
// When more items than max allowed, pop the one with smallest value
|
|
463
539
|
if (result.length > maxLrpsInTx) {
|
|
464
540
|
const popped = result.pop()!;
|
|
465
|
-
runningSum -= robCollateralAmtToSpend(
|
|
541
|
+
runningSum -= robCollateralAmtToSpend(
|
|
542
|
+
popped[0].assets,
|
|
543
|
+
popped[1].orderType,
|
|
544
|
+
);
|
|
466
545
|
}
|
|
467
546
|
|
|
468
547
|
if (runningSum >= targetCollateralToSpend) {
|
|
@@ -276,7 +276,12 @@ export async function adjustRob(
|
|
|
276
276
|
// The claim case
|
|
277
277
|
if (
|
|
278
278
|
adjustmentAmt === 0n &&
|
|
279
|
-
isFullyRedeemed(robUtxo, robDatum,
|
|
279
|
+
isFullyRedeemed(robUtxo.assets, robDatum.orderType, {
|
|
280
|
+
currencySymbol: fromHex(
|
|
281
|
+
sysParams.cdpParams.cdpAssetSymbol.unCurrencySymbol,
|
|
282
|
+
),
|
|
283
|
+
tokenName: robDatum.iasset,
|
|
284
|
+
})
|
|
280
285
|
) {
|
|
281
286
|
throw new Error(
|
|
282
287
|
"When there's no more lovelaces to spend, use close instead of claim.",
|
|
@@ -286,8 +291,12 @@ export async function adjustRob(
|
|
|
286
291
|
// Negative adjust case
|
|
287
292
|
if (
|
|
288
293
|
adjustmentAmt < 0 &&
|
|
289
|
-
robAmtToSpend(robUtxo, robDatum,
|
|
290
|
-
|
|
294
|
+
robAmtToSpend(robUtxo.assets, robDatum.orderType, {
|
|
295
|
+
currencySymbol: fromHex(
|
|
296
|
+
sysParams.cdpParams.cdpAssetSymbol.unCurrencySymbol,
|
|
297
|
+
),
|
|
298
|
+
tokenName: robDatum.iasset,
|
|
299
|
+
}) <= -adjustmentAmt
|
|
291
300
|
) {
|
|
292
301
|
throw new Error(
|
|
293
302
|
"Can't adjust negatively by more than available. Also, for adjusting by exactly the amount deposited, a close action should be used instead.",
|
|
@@ -192,7 +192,10 @@ export function summarizeActualLeverageRedemptions(
|
|
|
192
192
|
return acc;
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
const collateralToSpend = robCollateralAmtToSpend(
|
|
195
|
+
const collateralToSpend = robCollateralAmtToSpend(
|
|
196
|
+
lrp[0].assets,
|
|
197
|
+
lrp[1].orderType,
|
|
198
|
+
);
|
|
196
199
|
|
|
197
200
|
if (collateralToSpend === 0n) {
|
|
198
201
|
return acc;
|
|
@@ -236,18 +236,24 @@ export function serialiseStabilityPoolRedeemer(
|
|
|
236
236
|
).toCBORHex(r);
|
|
237
237
|
}
|
|
238
238
|
|
|
239
|
-
export function parseStabilityPoolRedeemer(
|
|
239
|
+
export function parseStabilityPoolRedeemer(
|
|
240
|
+
datum: string,
|
|
241
|
+
): O.Option<StabilityPoolRedeemer> {
|
|
240
242
|
try {
|
|
241
|
-
return O.some(
|
|
242
|
-
|
|
243
|
-
|
|
243
|
+
return O.some(
|
|
244
|
+
Data.withSchema(
|
|
245
|
+
StabilityPoolRedeemerSchema,
|
|
246
|
+
DEFAULT_SCHEMA_OPTIONS,
|
|
247
|
+
).fromCBORHex(datum),
|
|
244
248
|
);
|
|
245
249
|
} catch (_) {
|
|
246
250
|
return O.none;
|
|
247
251
|
}
|
|
248
252
|
}
|
|
249
253
|
|
|
250
|
-
export function parseStabilityPoolRedeemerOrThrow(
|
|
254
|
+
export function parseStabilityPoolRedeemerOrThrow(
|
|
255
|
+
datum: string,
|
|
256
|
+
): StabilityPoolRedeemer {
|
|
251
257
|
return F.pipe(
|
|
252
258
|
parseStabilityPoolRedeemer(datum),
|
|
253
259
|
O.match(() => {
|
|
@@ -12,13 +12,11 @@ import {
|
|
|
12
12
|
toHex,
|
|
13
13
|
TxBuilder,
|
|
14
14
|
UTxO,
|
|
15
|
-
validatorToScriptHash,
|
|
16
15
|
} from '@lucid-evolution/lucid';
|
|
17
16
|
import {
|
|
18
17
|
fromSystemParamsScriptRef,
|
|
19
18
|
SystemParams,
|
|
20
19
|
} from '../../types/system-params';
|
|
21
|
-
import { mkStableswapValidatorFromSP } from './scripts';
|
|
22
20
|
import { estimateUtxoMinLovelace } from '../../utils/lucid-utils';
|
|
23
21
|
import {
|
|
24
22
|
parseStableswapOrderDatumOrThrow,
|
|
@@ -135,9 +133,7 @@ export async function createStableswapOrder(
|
|
|
135
133
|
|
|
136
134
|
return lucid.newTx().pay.ToContract(
|
|
137
135
|
credentialToAddress(lucid.config().network!, {
|
|
138
|
-
hash:
|
|
139
|
-
mkStableswapValidatorFromSP(params.stableswapParams),
|
|
140
|
-
),
|
|
136
|
+
hash: params.validatorHashes.stableswapHash,
|
|
141
137
|
type: 'Script',
|
|
142
138
|
}),
|
|
143
139
|
{
|
|
@@ -75,9 +75,11 @@ export function serialiseStakingRedeemer(r: StakingRedeemer): string {
|
|
|
75
75
|
|
|
76
76
|
export function parseStakingRedeemer(datum: string): O.Option<StakingRedeemer> {
|
|
77
77
|
try {
|
|
78
|
-
return O.some(
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
return O.some(
|
|
79
|
+
Data.withSchema(
|
|
80
|
+
StakingRedeemerSchema,
|
|
81
|
+
DEFAULT_SCHEMA_OPTIONS,
|
|
82
|
+
).fromCBORHex(datum),
|
|
81
83
|
);
|
|
82
84
|
} catch (_) {
|
|
83
85
|
return O.none;
|
|
@@ -238,14 +238,14 @@ export async function treasurySplit(
|
|
|
238
238
|
(_) => new Error('Expected a single treasury UTXO'),
|
|
239
239
|
);
|
|
240
240
|
|
|
241
|
-
const
|
|
241
|
+
const [adaAsset, ...nonAdaAssets] = Object.keys(treasuryUtxo.assets);
|
|
242
242
|
|
|
243
243
|
const tx = lucid
|
|
244
244
|
.newTx()
|
|
245
245
|
.collectFrom([treasuryUtxo], serialiseTreasuryRedeemer('Split'))
|
|
246
246
|
.readFrom([treasuryScriptRefUtxo]);
|
|
247
247
|
|
|
248
|
-
for (const asset of
|
|
248
|
+
for (const asset of A.reverse(nonAdaAssets.sort())) {
|
|
249
249
|
tx.pay.ToContract(
|
|
250
250
|
mkTreasuryAddr(lucid, sysParams),
|
|
251
251
|
{ kind: 'inline', value: Data.void() },
|
|
@@ -253,6 +253,12 @@ export async function treasurySplit(
|
|
|
253
253
|
);
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
+
tx.pay.ToContract(
|
|
257
|
+
mkTreasuryAddr(lucid, sysParams),
|
|
258
|
+
{ kind: 'inline', value: Data.void() },
|
|
259
|
+
{ [adaAsset]: treasuryUtxo.assets[adaAsset] },
|
|
260
|
+
);
|
|
261
|
+
|
|
256
262
|
return tx;
|
|
257
263
|
}
|
|
258
264
|
|
|
@@ -3,5 +3,5 @@ export const _cdpCreatorValidator = {
|
|
|
3
3
|
type: 'PlutusScriptV3',
|
|
4
4
|
description: 'Generated by Aiken',
|
|
5
5
|
cborHex:
|
|
6
|
-
'59296c592969010100229800aba2aba1aba0aab9faab9eaab9dab9cab9a488888888c96600264653001300a00198051805800cdc3a4005300a0024888966002600460146ea800e33001300b3754007370e90024dc3a4001300a375400891111919912cc004c014012264b300130170018992cc004c01cc04cdd5000c4c8c8c8c8c8c8c8c8c8ca60026eb4c0840066044003375c6042015375a6042013375a6042011375a604200f375a604200d375a604200b375a6042009375a6042007375a6042004911111111112cc004c0b402a26464b3001301e001899192cc004c0c400a03b1640b86eb4c0bc004c0acdd5001456600260440031323259800981880140762c8170dd6981780098159baa0028acc004c07c0062b3001302b375400501b8b20588b205040a08140c0a4dd5000981600545902a0c084004c080004c07c004c078004c074004c070004c06c004c068004c064004c050dd5000c59011180b000c5901418091baa00b8acc004c0240122b3001301237540170028b20268acc004c0180122b3001301237540170028b20268b201e403c80786600246028602a602a602a602a602a602a003374a900048c050c0540064446466446600400400244b3001001801c4c8cc896600266e4401c00a2b30013371e00e0051001803202c899802802980e802202c375c602c0026eb4c05c004c064005017191919800800803112cc00400600713233225980099b910090028acc004cdc78048014400600c80ba26600a00a603c00880b8dd7180b8009bab3018001301a0014060297adef6c6014800244646600200200644b30010018a5eb8226644b3001300500289980c00119802002000c4cc010010005013180b800980c000a02a9b884800246028602a602a602a602a0032232330010010032233003001300200292cc004c014c040dd5000c4c050c044dd5000c5900e48c050c054c054006601e6ea8026444b300130060018a5eb7bdb182264646600200297adef6c602259800800c4cc060cdd81ba9006374c00697adef6c608994c004dd7180b000cdd5980b800cc06c0092225980099b9000a00389980e19bb037520146e9801c0162b30013371e01400713301c337606ea4028dd3003800c4cc070cdd81ba9003374c0046600c00c00280b90170c0640050171919800800a5eb7bdb1808966002003133017337606ea4010dd4001a5eb7bdb1822653001375c602a003375a602c003301a00248896600266e4002000e26603666ec0dd48041ba80070058acc004cdc7804001c4cc06ccdd81ba9008375000e00313301b337606ea400cdd400119803003000a02c40583018001405880824464b30013006001899192cc004c06400a0091640586eb8c05c004c04cdd5001c566002601400315980098099baa0038014590144590102020301137540052259800980298089baa0028991919912cc004c06800e00b16405c6eb4c05c004dd6980b801180b80098091baa0028b201e912cc004c014c044dd500144c8c8cc896600260340070058b202e375c602e0026eb8c05c008c05c004c048dd500145900f48888c8cc0040040148966002003133018337606ea4014dd400225eb7bdb1822653001375c602c003375a602e003301b00248896600266e4002400e26603866ec0dd48049ba80080058acc004cdc7804801c6600201300880148cc074cdd81ba900a37500020051001401d13301c337606ea400cdd400119803003000a02e405c3019001405d222232330010010052259800800c4cc060cdd81ba9005374c00897adef6c608994c004dd7180b000cdd5980b800cc06c0092225980099b9000900389980e19bb037520126e980200162b30013371e01200719800804c02200523301d337606ea4028dd30008014400500744cc070cdd81ba9003374c0046600c00c00280b90170c064005017496600200314a314a0809224444464b3001300900180144c00c00501319b8000400392cc004c010c040dd5000c48c8cdd7980b18099baa301630133754004002602a60246ea800a246466ebcc058c04cdd5001000980a98091baa0024039370290004dc4a4009370e90044dd2a40049111111111111111111111114c00488c8cc00400400c896600200314c0103d87a80008992cc004cdd7981818169baa0010048980e19817800a5eb8226600600660620048150c0bc00502d488c0866002005375c605a60546ea80066eb8c060c0a8dd5000a02e94c004dd7181618149baa0019bae3017302937540034800900e488c966002603c003132598009818000c4cc03cc0bc00400e2c8168c0acdd5001c5660026044003132598009818000c4cc038c0bc00400e2c8168c0acdd5001c566002603e0031323259800981880140122c8170dd7181780098159baa0038b205040a08140c0a4dd50014888c96600200314a31598009818000c4c8ca60026eb8c0c40066eb4c0c4c0c80066eb8c0c40092225980099b8f001489008acc004cdc7801a441008acc004c090c0c0dd5003c56600266e252000002899b89002482026fb80a294102e44cdc4a40000048172294102e4528205c18188009bac302f0018a5040b48168c8cc004004ca60020030059919800800802912cc004006297adef6c608991981919bb0302f001374c64660020026eacc0c4008896600200314bd6f7b63044c8cc0d4cdd818190009ba8300f375a606600266006006606e004606a0028198cc00c00cc0d0008c0c8005030200222259800801440062653001004981a001e6002005375c605e00337566060003222223259800980a800c00a260060028198c8ca6002003006802a00222259800801440062653001004981f001e6002005375c6072003375a6074003005406c8020c0f000903a2809a020401060640048180896600200314bd7044c8cc88cc88cc008008004896600200310038991981a9ba733035375200a6606a60640026606a606600297ae0330030033037002303500140cc6eacc0c000cdd718168009980180198190011818000a05c488888cc8966002604402b198009b804800644b30010018a4d13259800800c5268992cc004cdc81bae30323036003375c60640031330040043303500130370028a99818a49326b65797320696e206173736f63696174697665206c697374206172656e277420696e20617363656e64696e67206f72646572001640c0606a0028198c0d4005032488cc88c088cc0d4dd419b82375a606c0046eb4c0d8004cc0d4dd419b82375a606c606e0046eb4c0d8c0dc0052f5c060626ea8008c0c4dd5000c8966002604800314c0103d87a80008acc004cdc4000a400113020330333020330333750601a004660666ea0c0340052f5c097ae089810198199810198199ba800233033375000297ae04bd70205c40b9230333034303430343034303430343034001911919800800801912cc0040062980103d87a80008992cc004cdd78021819800c4c08ccc0d8c0d00052f5c1133003003303800240c4606c00281a24464b300130250018acc004c094c0c4dd500145300103d87a80008a6103d879800040bd1598009813000c566002604c60626ea800a2980103d87a80008a6103d87b800040bd13322598009815800c4c96600266e2000c0062980103d87980008acc004cdc4000801c530103d87b80008a6103d87a800040c88190dd6981b981a1baa0048acc004c09c006298103d87b80008a6103d879800040c48188dd6981a98191baa00330313754004817902f18181baa0029180f998191ba8001330324c10101004bd70488889660026602200800b15980099baf301b3034375400a007198009bab30223034375400b002800a0108a5040c514a0818a460666068606860680032303330343034303430343034303430343034303400191819981a181a181a181a181a181a181a181a181a181a000c8c0ccc0d0c0d0c0d0c0d0c0d0c0d0c0d0c0d0006605e6ea8c0c8c0bcdd50144c0bcdd5012a4444444444444453001222598008014530103d87a80008acc004c0d00062606066086608800497ae08cc00400e608a0053012001400c81f10424c03803a444b30013371000290004520008acc004c0d00062900144c966002606a66e1800920048cc0040126002007337060049002200889800cc00401260020073370660260049002200840fc6e0800903e207c9192cc004c0ccc0fcdd5000c4c10cc100dd5000c54cc0f9241263c65787065637465643e2044656e6f6d696e61746f722063616e6e6f74206265207a65726f2e001640f46601a6eb4c108c0fcdd50009bad302d303f37540032302e330413259800981b981f9baa0018992cc004c0e0c100dd5181798209baa3044304137540071301a33043375000297ae08980d198219ba833700002900125eb8103e1bad304330403754003100140f46084607e6ea8c108c0fcdd500099820992cc004c0dcc0fcdd5000c4c966002607060806ea8c0bcc104dd5181798209baa0038980d198219ba80014bd7044c068cc10cdd41809000a5eb8103e1bad304330403754003100140f46084607e6ea8c0b4c0fcdd5000a5eb826084005375c608200530420019bac3041001488888888a60026012013300700791112cc004c0f8006200919800802400e6464004601a0026609a66ec0dd48011ba80014bd6f7b630488888c966002606000300289801800a09c329800802402200f222229800802c00e009002800a00c40c8a05c81590484c12c0126eb4c1280126eb0c12800a6eb0c128c12c00922222229800912cc004cdc4000a400114c0103d87a8000899804801000a09a9114c00400e6eb8c150c144dd50014dd7181f98289baa002800a01098290024dd69828802244446464646464653001375a60b6003305b305c0019bad305b008998050091bad305b0069bad305b0049bad305b00248888896600260a260ba6ea800e264b30013375e60c460be6ea80041422b3001330363756609a60be6ea8c134c17cdd50009831182f9baa0658992cc004c14cc17cdd5000c4c9660033001306430613754005303a33063306430613754609e60c26ea800d2f5c130013306330503306330643061375400697ae04bd704c0dcc190c184dd5033d30103d87a800040a913259800982a98309baa0018992cc004cc0e8dd5982898319baa305130633754002605660c66ea81a6264b3001305730633754003132598009834800c4c96600260b260ca6ea80062646464646464646465300130720019bae30720099bad307200898390034c1c801660e40093072003992cc004c1c00062b3001304b306f0018b44c19cc1bc00506d4590711baa30720024888888896600260f601313305a307a00f13305a00513305a00413305a00313305a00213305b008132598009835983b9baa0018992cc004cc140dd59833983c9baa30673079375400260c660f26ea81fe264b300130713079375400313259800983f800c4c8c96600260e060f86ea800a264646464646464646464653001308b010019bae308b0100b9bad308b010099845808044c22c0401e61160200d308b010059845808024dd6984580801cc9660026112020031598009832184400800c5a261000261100200284300a2c845008dd518458080124444444444b300130960100b89983a184a8080a09983380389983a00309983a80289983a80209983a8018992cc004c21804006264b300130980100189983b184b8080080c459095011849809baa00b8acc004c228040062b300130930137540170178b2128028b2120024240046122026ea802a2c849808611602002611402002611202002611002002610e02002610c02002610a0200261080200261060200261040200260fa6ea800a2c83d0566002b30013375e60aa660fc608660f86ea8208052f5c060fe60f86ea8c1fcc1f0dd51835183e1baa01a899baf30553307e3043307c37541040297ae0307f307c375460fe60f86ea8c1a8c1f0dd5002452820f28acc004cdc79bae307f307c375402e6eb8c1fcc1f0dd5000c4c96600260e060f86ea8006264b300133055375660d860fc6ea8c1b0c1f8dd50009834183f1baa0038992cc004c1c8c1f8dd5000c4c8c8c8cc896600261100200713259800983c1842009baa001899192cc004c22c0400a264b300198008214c1bcc22004dd504700d30103d87a8000416d13259800983e1844009baa0018acc00660026118026112026ea800660f0661160260c4661160260ac6112026ea823c052f5c097ae098149984580983c1984580983c1984580983c19845809ba90454bd7019845809846009844809baa0243308b013077308901375401c66116026ea00f8cc22c04c1e0cc22c04dd401799845809ba8337006eb4c23004c22404dd5005acc004cdc41bad3070308901375401605f13370666e0ccdc119b823370205e6eb4c1c0c22404dd50059bad308c01308901375460ee6112026ea802d208080a0f6f4acdbe01b48202c227efa8052080897a8a9984380a49015a001642180497ae04bd7025eb812f5c19800982f98381844809baa08f01983b9844809baa00e81c2074a60103d87a8000414915980099912cc004c96600261000200314a3159800984180800c528c5282112024224046114026ea8cc158c23804c22c04dd50011847009845809baa0018992cc004c1fc00629462b30013083010018a518a50422404844808c22804dd51982b183c9845809baa0023079308b01375400314a0844008c11cc158c22404dd503f9823983c1984580983c1984580983119845809ba83370205e6eb4c13cc22404dd504780a5eb80cc22c06600294698103d87a8000a60103d879800042180497ae03308b0130783308b0130623308b01375066e000bcdd698279844809baa08f014bd701984580cc00528d300103d87a8000a60103d879800042180497ae04bd7044c96600266ebcc1d0c22804dd5040009ba69800983018389845009baa09001800c0fd03b456600264b3001307e308a013754003133223371266e08dd69848008009bad309001309101002337046eb4c24004008dd69848009848808009845809baa308e01308b0137540026116026ea8cc168010c128c1ecc22c04dd5008459088011982c01c81fc56600260ea07f15980099b89375a609e6114026ea803c0e62b300132323298009bad3090010019bad3090013091010019bae3052308d01375412603375660a8611a026ea820c06612002004911112cc004c1f401626464b30010018cc00411e6106026612c0200497ae0981a1984b009841809984b00a6103d87a80003309601085014bd7025eb83300198009bae3097013094013754007375c6104026128026ea800e00e83ca910100a441008032096a6103d87a80004199159800984c00800c4c8cc8966002611402003159800984b809baa003801459098014566002611c02003159800984b809baa003801459098014566002611602003159800984b809baa00380145909801456600266e1d20060018acc004c25c04dd5001c00a2c84c00a2b300130710018991919194c004c278040066eb4c2780400e6eb4c278040092225980098510080244cc20004c2840401c566002612202613a026ea800e264646644b300130a601003806c590a3011bad30a301001375c614602004614602002613c026ea800e2c84d80a2c84f808613c02002613a02002613802002612e026ea800e2b30013370e9005000c566002612e026ea800e005164260051642500484a0090940121280242500484a0084cdd780099ba548020cc25c04010cc25c04dd40041984b809ba80073309701086014bd70184a009baa0013259800984400984a009baa0018984c00984a809baa0018b21240233060004306d33096013097013094013754612e0200297ae08b212a02425404660fe09a466ebcc25c04c25004dd5184b80984a009baa308201309401375400200460d666128026ea400d2f5c114a284780861200200264b30015980099b8900148002294229410890144cc2380530106d8799f4040ff003308e014c10100003308e014c10100004bd7044cc23804c23c04008cc23804dd40009984700a610100004bd70211202375a611c02611e02002661180200266118026ea16600266e240fd20008a4001132337066eb4c23804004dd69847009847808009845009baa33059305403f30493071308a01375404a8438092f5c114a31533088014901243c65787065637465643e204d757374207061792064656274206d696e74696e67206665650016421c05153308801491253c65787065637465643e204d696e20636f6c6c61746572616c20756e7361746973666965640016421c05153308801491213c65787065637465643e204e6f6e706f736974697665206d696e74656420616d740016421c05153308801491203c65787065637465643e20556e646572636f6c6c61746572697a6564204344500016421c05153308801491223c65787065637465643e204d696e7465642076616c756520697320696e76616c69640016421c0460f0661160260ee6112026ea823c04cc22c04c23004c22404dd501225eb822a6610e029201203c65787065637465643e20496e636f72726563742074782076616c69646974790016421805153308701491203c65787065637465643e20434450206f757470757420697320696e76616c69640016421805164218046607407605908401422404646644b3001307d0018801456600260ea00313305900230543304248050006264b3001307e308a0137540031308e01308b0137540031642200464b3001308201308a01375400314c0103d87a80008983d19846809982d0019847009845809baa0014bd702110023233225980099b8800248002260f86611e0260f86611e026ea0c1a4004cc23c04dd4183480125eb812f5c1159800983c00144c1f0cc23c04c1f0cc23c04dd400099847809ba80024bd7025eb82298103d87a8000422804845008dd69847008009bad308e01308f01001308a01375460a866084900a1833000a10e02421c0464b3001307c0018acc006600294294294508601454cc21c05240101570016898241846009844809baa002421805159800984000800c4c96600264b3001308201308a0137540031337126eb4c1e4c22c04dd50011bad308e01308b01375400316422004611a026114026ea8c1e0c22804dd5182b9845009baa080018a9984400a48101580016898249846809845009baa001421c0464b300133061375660f06114026ea8004c23404c22804dd5001c4c96600260fc6114026ea800626464646644b30013094010038998399849808028803459091011848808009bad309101002309101001309001001308b0137540031642200460e460e26114026ea80062c843808c96600260fa00313259800983f1845009baa0018983c9845809baa308e01308b01375400316422004660786eb0c1e0c22804dd5040009bad308d01308a013754063159800984080800c4c96600260fc6114026ea80062611c026116026ea80062c844008cc0f0dd618389845009baa08001375a611a026114026ea80c62a66110029201014f0016421c04843808c22004dd501844c96600260fa6112026ea8006264b3001307e308a01375400313232325980098490080144cc1c4c2440400c4c134c24404c23804dd500245908f011848008009848008009845809baa0018b211002308d01308a01375400316421c04660aa6eacc140c22404dd503f98149984580983119845809846009844809baa0024bd7025eb8108601210c0230870137540026eb4c1bcc22004dd500698279843809baa00c8b211002375a611202002610a026ea80062c841008c21c040122c842808dd69842808009bad308501003308501001308401001307f37540031641f060cc60ca60fc6ea8c1b0c1f8dd5000c5907b184000983e9baa0018b20f43302e0300248a9983d2491b3c65787065637465643e2077726f6e6720636f6c6c206173736574001641e5153307a491193c65787065637465643e204d697865642076657273696f6e73001641e460fc0031641f060f46ea80062c83b8c184c180c1e4dd51833983c9baa0018b20ec307b307837540031641d4660520560351641e0307200130710013070001306f001306e001306d001306c001306b0013066375400316418c60d000316419860c86ea80062c8308c12cc128c18cdd5182898319baa0018b20c030653062375400316417c6602602a6eb4c1900322a660be92012b3c65787065637465643e2043445043726561746f72206f757470757420646f6573206e6f74206d61746368001641786e9520048b20ba33011012375a60c4019153305d4901203c65787065637465643e2043445043726561746f724e4654206d697373696e670016417116417060c260bc6ea800e2c82d860b600260b400260b200260b000260ae00260ac0041159800981300ac4cc88ca6002660140020472232598009814000c4c8c96600260760050048b2070375c6072002606a6ea800e2b3001302c001899192cc004c0ec00a0091640e06eb8c0e4004c0d4dd5001c590322064303337540053758606a606c606c005300300348889660026052606a6ea8012264b30013300e3756604a606e6ea8c094c0dcdd5000981d181b9baa03d8992cc006600200f301f3038375407d4c103d87a8000402d13259800981e800c4c966002605a60726ea80062646464646465300130430019bad30430049bad30430039bad30430024888966002609000b1329800899912cc004c0e8006264b3001304c0018992cc004c0f0c120dd5000c4c8c8c96600260a00051332259800982098269baa00289919192cc004c15400a26603c60a8006264b300130450018992cc004c15c00626464b300130480018992cc004c16800626604660b200201316415c60aa6ea800a2b3001304c00189919194c004dd6982d800cdd6982d801cdd6982d8012444b3001305f00480745905c0c16c004c168004c154dd500145905220a43053375400260ac00316415060a46ea800a2b300130490018acc004c148dd500140162c829a2c827904f18281baa0018b20a430530013053001304e375400516412c609e00626606a00244b3001002804c4c9660026084609c6ea800626464653001375a60aa003375c60aa007375c60aa0049112cc004c1640122601060b201316415830550013054001304f375400316413060a2004827a2c8268dd61827000982700098249baa0018b208c304b0018b20923047375400f159800981f000c566002608e6ea801e0051641211641108220566002b3001301f3044375400314a314a08212264b30010018800c54cc11124012043445043726561746f72206f757470757420646f6573206e6f74206d61746368001001410d3001011980f1982380725eb8298107d87b9fd87980ff00980d982418229baa04ba6103d87a8000405d16410860886ea801660886ea80066eb4c12002d22259800981d80144c966002609a00313259800981e98249baa00189919191919194c004c14c0066eb8c14c01a60a600930530039829801244444b3001305900689981c182c00509981c00189981c00109981c00089981c0028084590560c14c004c148004c144004c140004c13c004c128dd5000c590471826000c5904a18241baa0048acc004c0fc00a264b3001304d0018992cc004c0f4c124dd5000c4c8c8c8c8c8ca600260a6003375c60a600d30530049829801cc14c0092222259800982c80344cc0e0c1600284cc0e000c4cc0e00084cc0e00044cc0e00140422c82b060a600260a400260a200260a0002609e00260946ea80062c8238c1300062c8250c120dd500245660026078005132598009826800c4c966002607a60926ea800626464646464646464653001375a60ac003375c60ac013375a60ac00f3056006982b002cc15801260ac00730560024888888896600260be01313303d305e01013303000513303d00413303e00313303e00213303e0010168b20b8182b000982a800982a0009829800982900098288009828000982780098251baa0018b208e304c0018b20943048375400915980099b874801800a264b3001304d0018992cc004c0f4c124dd5000c4c8c8c8c8c8c8c8c8ca60026eb4c1580066eb8c1580266eb4c15801e60ac00d3056005982b0024c15800e60ac004911111112cc004c17c02626607a60bc02026606000a26607a00826607c00626607c00426607c00202d1641703056001305500130540013053001305200130510013050001304f001304a375400316411c609800316412860906ea80122b300130220028992cc004c134006264b3001303d30493754003132323232323232323298009bae30560019bae3056009982b003cc15801a60ac00b30560049bad30560039bad30560024888888896600260be01313303d305e01013303e00613303e00513303e00413303f0030168b20b8182b000982a800982a0009829800982900098288009828000982780098251baa0018b208e304c0018b20943048375400915980099b874802800a264b3001304d0018992cc004c0f4c124dd5000c4c8c8c8c8c8c8c8c8c8c8ca60026eb8c1600066eb8c16002e60b00133058008982c003cc96600260ac0031598009818982a800c5a2609a60aa002829a2c82b8dd5182c0034c96600260ac0031598009818982a800c5a2609a60aa002829a2c82b8dd5182c002cc1600126eb4c16000e6eb4c1600092222222222598009831805c4cc104c1880504cc1080204cc10801c4cc1080184cc10c00c06a2c830060b000260ae00260ac00260aa00260a800260a600260a400260a200260a0002609e00260946ea80062c8238c1300062c8250c120dd5002456600266e1d200c0028992cc004c134006264b3001303d3049375400313232323232323232323232329800982c800cdd6982c8064dd6982c805cdd6982c8054dd6982c804cdd6982c8044dd6982c803cdd6982c8034dd6982c802cdd6982c8024dd6982c801244444444444b3001306500c899822983200709981600580e4590620c164004c160004c15c004c158004c154004c150004c14c004c148004c144004c140004c13c004c128dd5000c590471826000c5904a18241baa0048acc004cdc3a401c005132598009826800c4c966002607a60926ea80062646644b3001305100189981b1bac30500012259800801402a2646644b300130560018992cc004c118c148dd5000c4c8c96600260b20051300730590088b20ac375c60ae00260a66ea80062c8280c1540062c8298dd71829800982a0009bac305200241411641386eb4c138004c13c004c128dd5000c590471826000c5904a18241baa0048acc004cdc3a40200051323259800982700140162c8258dd7182600098241baa0048b208a41148229045208a41148229045208a1823804c590450c10c004c108004c104004c100004c0fc004c0e8dd5000c5903718109810181c9baa30273039375460780031640e93001007981d981e181e181e181e181e181c1baa03ea60103d8798000402d03440e46074606e6ea8c094c0dcdd5000c54cc0d5241253c65787065637465643e2043445043726561746f72204e46542069732070726573656e742e001640d06072606c6ea80122c81986eb0c0d0004888c966002604c0031323259800981c80140122c81b0dd7181b80098199baa0038acc004c0a80062646644b3001303a00189980f9bac30390012259800801401e33001009981d80144c004c0f000900920728b206e375a606e002607000260666ea800e2c818103018189baa002302f375404b132332259800981298189baa0018992cc004c0a8c0c8dd5000c4cc89660026072003132598009814981a9baa00189919912cc004c0f40062660446eb0c0f00048966002005132598009817981d9baa001899191980080098071bab3028303e375406844b30010018a508acc004cdc79bae30420010038a518998010011821800a07841006eb8c0fcc0f0dd5000c5903919198008009bac302a303c375400e44b30010018a60103d87a80008992cc006600266ebc00530103d87a8000a50a5140ed100189980180198210012076325980099b8f375c60820020171302d33040304130420014bd7045300103d87a800040ec6eb0c10000503e44c8c8cc896600260860071300530430068b2080375c60800026eb8c100008c100004dd6181f00120788b2074375a60740026076002606c6ea80062c8198c074c070c0d4dd51811981a9baa30380018b206c375c606c60666ea800660026eb0c084c0ccdd5014cc08cc0ccdd501cd30103d879800040191640c0606a60646ea8c0d4c0c8dd5181018191baa3035303237540031640bc6002002660106eb0c0ccc0c0dd5013010912cc004006297ae08998199818181a00099801001181a800a06440b08160888c8cc0740108c008c080c0c8dd5000acc004c08cc0bcdd5000c48cc020dd5980f98189baa00100389180e4c004dd5980f98189baa0019bae303430313754007375c603e60626ea800d01e205a222223232330010010072259800800c528456600264b300130040018acc004cdd7980e981b1baa0010078cc004dd59812181b1baa001803401500a452820668a5040cc607000314a3133002002303900140c881b0c03c0103013301400530120044590080c028004c014dd5005452689b2b200415330024911d3c65787065637465643e204e6f204344507320617265207370656e742e001601',
|
|
6
|
+
'592544592541010100229800aba2aba1aba0aab9faab9eaab9dab9cab9a488888888c96600264653001300a00198051805800cdc3a4005300a0024888966002600460146ea800e33001300b3754007370e90024dc3a4001300a375400891111919912cc004c014012264b300130170018992cc004c01cc04cdd5000c4c8c8c8c8c8c8c8c8c8ca60026eb4c0840066044003375c6042015375a6042013375a6042011375a604200f375a604200d375a604200b375a6042009375a6042007375a6042004911111111112cc004c0b402a26464b3001301e001899192cc004c0c400a03b1640b86eb4c0bc004c0acdd5001456600260440031323259800981880140762c8170dd6981780098159baa0028acc004c07c0062b3001302b375400501b8b20588b205040a08140c0a4dd5000981600545902a0c084004c080004c07c004c078004c074004c070004c06c004c068004c064004c050dd5000c59011180b000c5901418091baa00b8acc004c0240122b3001301237540170028b20268acc004c0180122b3001301237540170028b20268b201e403c80786600246028602a602a602a602a602a602a00323014301500191119199119801001000912cc004006007132325980099b910060018acc004cdc7803000c4dd6980c001401501544cc010010c07000d0151bae30160013019001405c64646600200200c44b3001001801c4c8c96600266e440200062b30013371e0100031375660320050054059133004004301d00340586eb8c05c004c0680050180a5eb7bdb18052000911919800800801912cc004006297ae0899912cc004c01400a26603000466008008003133004004001404c602e002603000280aa6e2120009180a180a980a980a980a800c88c8cc00400400c88cc00c004c00800a4b30013005301037540031301430113754003164039230143015301500198079baa009911980a19bb037520046ea00052f5bded8c12232598009803000c4c8c96600260320050048b202c375c602e00260266ea800e2b3001300a0018acc004c04cdd5001c00a2c80a22c808101018089baa002912cc004c014c044dd500144c8c8cc896600260340070058b202e375a602e0026eb4c05c008c05c004c048dd500145900f48966002600a60226ea800a264646644b3001301a003802c590171bae3017001375c602e004602e00260246ea800a2c807a4b300130043010375400312323375e602c60266ea8c058c04cdd5001000980a98091baa002891919baf301630133754004002602a60246ea800900e4dd2a4001371290024dc3a4011374a90012444444444444444444530012232330010010032259800800c5a264b30013375e605660506ea80040122602e60506ea800626600600660580048128c0a8005028488c0726002005375c6050604a6ea80066eb8c050c094dd5000a0269112cc004c064006297adef6c6089981419bb037520066e98cc0300080052f5bded8c0811a4464b300130190018992cc004c0ac00626601660540020071640a0604c6ea800e2b3001301d0018992cc004c0ac00626601460540020071640a0604c6ea800e2b3001301a001899192cc004c0b000a0091640a46eb8c0a8004c098dd5001c590232046408c60486ea800a444664530013259800980e18141baa00189bad3029302c3756605860526ea800629000204c302b0019bab0029baf302b302c001912cc004c084c0a4dd5002c4cdc4800801456600266e2400400a266e24008cdc0000a410137dc0514a0813902724444b30010038acc004c00801a2660020089000452820528992cc004cdd7a61014000302c0018acc004cc008014dd6981698181bab302d001898019ba630310048a5040a915980099801002a4001130030078a5040a88150c0bc00d02d0dd3001194c004006009223302b0023302b374c00297ae04004444b3001002899800a6103d87a80004bd6f7b63044c8cc896600266e452201000028acc004cdc7a441000028998021806998171816001a5eb80006266008980103d87a800000540a5198008034006446600c0046606000a00280310291bae3029001302e003302c00240a8911114c004888c8cc0640108c008c070c0b4dd5000acc004c078c0a8dd5000c48cc020dd5980d98161baa00100389180c4c004dd5980d98161baa0019bae302f302c3754007375c603660586ea800d01a205094c004dd7181618149baa0019bae30183029375400348009004488888c8c8cc00400401c896600200314a1159800992cc004c0100062b30013375e603260626ea800401e330013756604060626ea800600d005402914a08172294102e1819800c528c4cc008008c0d000502d2062300f004488966002603c025198009119911808198189ba8337046eb4c0c8008dd69819000998189ba8337046eb4c0c8c0cc008dd698191819800a5eb80c0b4dd500118169baa0019b80480066e052000918179818181818181818181818181818000c88c8cc00400400c88c96600266ebc010c0bc00626060003133003003303400240b460640032232598009810800c5660026042605a6ea800a298103d87a80008a6103d879800040ad1598009811000c5660026044605a6ea800a2980103d87a80008a6103d87b800040ad13322598009813800c4c96600266e2000c0062980103d87980008acc004cdc4000801c530103d87b80008a6103d87a800040b88170dd6981998181baa0048acc004c08c006298103d87b80008a6103d879800040b48168dd6981898171baa003302d3754004815902b18161baa00291806998171ba80013302e4c10101004bd70488889660026602400800b15980099baf30183030375400a007198009bab301f3030375400b002800a0128a5040b514a0816a4605e6060606060600032302f303030303030303030303030303030303030001918179818181818181818181818181818181818181818000c8c0bcc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c000660566ea8c0b8c0acdd50124c0acdd5010a44444444444445300122259800980e000c660020073040304000299b800014800d003456600266e2520020018cc00400e60800053010001400d1598009817800c4c0fc00a2a66074921146578706563745f61743a206e6f7420666f756e64001640e481c903948966002605c00314c103d87a80008acc004cdc4000a40011301c3303d301c3303d3750601c0046607a6ea0c0380052f5c097ae08980e1981e980e1981e9ba80023303d375000297ae04bd70207040e12225980099b8800148002290004566002605e00314800a264b300130303370c0049002466002009300100399b830024801100444c0066002009300100399b833011002480110042074370400481c90394888966002606000310048991919800800803112cc00400626608466ec0dd48031ba60034bd6f7b63044c8cc896600266e4402400a2b30013371e0120051325980099baf4c101a000374c003100289982319bb037520146e9800400904119198008009bab30440042259800800c4cc11ccdd81ba900a375001297adef6c6089919912cc004cdc8806801456600266e3c03400a264b30013370e002603801b100289982599bb0375201c6ea0cdc0000806801208c375a609000713304a337606ea4034dd4006002208a89982500199802802800a08a375c608a00260940046090002823226608a66ec0dd48049ba600600441011330450033300500500141006eb8c100004c114008c10c00504119811801000a0749180d9981e192cc004c0c8c0e8dd5000c4c966002606660766ea8c0acc0f0dd5181f981e1baa0038980d1981f1ba80014bd7044c068cc0f8dd419b80001480092f5c081c8dd6981f181d9baa0018800a070303d303a3754607a60746ea8004cc0f0c966002606460746ea8006264b30013033303b3754605660786ea8c0acc0f0dd5001c4c068cc0f8dd4000a5eb82260346607c6ea0c0400052f5c081c8dd6981f181d9baa0018800a070303d303a3754605260746ea80052f5c1303d0029bae303c002981e800cdd6181e000a444444445300130090099803803c8c966002606e60866ea80062608e60886ea80062a66084921263c65787065637465643e2044656e6f6d696e61746f722063616e6e6f74206265207a65726f2e00164104660126eb4c118c10cdd50009bad3032304337540032229800801cdd7182418229baa0029bae303430453754005001402530460049bad30450049bac30450029bac30453046002488888888c8c8c8c8c8c8ca60026eb4c15000660a860aa003375a60a8017375a60a800f3300f010375a60a800d375a60a8009375a60a800491111112cc004cdd7982d982c1baa0030498acc004cc0d0dd59823982c1baa30473058375400660b660b06ea817a264b300198009980b8081bad305c00d981b9982d982e182c9baa30483059375400897ae098009982d981d1982d982e182c9baa0044bd7025eb82606060b860b26ea817e980103d87a8000409d132598009981b1bab3049305a3754609260b46ea8004c09cc168dd503044c966002609c60b46ea8006264b300130600018992cc004c140c170dd5000c4c8c8c8c8c8c8c8c8ca600260d2003375c60d2013375a60d201130690069834802cc1a401260d200732598009833800c566002608e60cc003168982f1833000a0c88b20d0375460d2004911111112cc004c1c80262660a460e201e2660a400a2660a40082660a40062660a40042660a6010264b30013304b375660bc60de6ea8c178c1bcdd5000982d18379baa0758992cc004c19cc1bcdd5000c4c96600260ea0031323259800983318391baa002899191919191919191919194c004c204040066eb8c2040402e6eb4c204040266102020113081010079840808034c20404016610202009375a6102020073259800983f800c56600260be60fc003168983b183f000a0f88b210002375461020200491111111112cc004c2300402e2660d66116020282660c400e2660d600c2660d800a2660d80082660d8006264b3001307c0018992cc004c238040062660da611a0200203116422c046112026ea802e2b30013080010018acc004c22404dd5005c05e2c84500a2c843009086011843809baa00a8b211202184080800984000800983f800983f000983e800983e000983d800983d000983c800983c00098399baa0028b20e0159800acc004cdd798281983a181f18391baa0784bd70183a98391baa30753072375460c260e46ea8066266ebcc140cc1d0c0f8c1c8dd503c25eb80c1d4c1c8dd5183a98391baa30613072375400914a0837a2b30013371e6eb8c1d4c1c8dd500b1bae30753072375400313259800998279bab30623073375460c460e66ea8004c178c1ccdd500144c96600260ce60e66ea800626464646644b3001307d0038992cc004c1b4c1e4dd5000c4c8c96600261000200513259800cc0040f260ca60fa6ea820c0698103d87a80004155159800cc004cc0ec0d009e60bc660fe60b6660fe609e60fa6ea820c052f5c097ae098129983f982f1983f982f1983f982f1983f9ba903e4bd701983f984000983e9baa0213307f306c307d3754018660fe6ea00d8cc1fcc178cc1fcdd40149983f9ba8337006eb4c20004c1f4dd50052cc004cdc41bad3065307d375401405313370666e0ccdc119b82337020526eb4c194c1f4dd50051bad308001307d375460d860fa6ea8029208080a0f6f4acdbe01b48202c227efa8052080897a8a9983da481015a001641e897ae04bd7025eb812f5c19800982a1832983e9baa083019836183e9baa00c8152070a60103d87a8000412d15980099912cc004c96600260e800314a3159800983b800c528c52820fa41f460fc6ea8cc13cc20804c1fcdd5001184100983f9baa0018992cc004c1cc00629462b300130770018a518a5041f483e8c1f8dd5198279837183f9baa002306e307f375400314a083e0c100c13cc1f4dd50399820182f1983f982f1983f982d9983f9ba8337020526eb4c120c1f4dd504180a5eb80cc1fe600294698103d87a8000a60103d879800041e897ae03307f305e3307f305b3307f375066e000a4dd69824183e9baa083014bd701983fcc00528d300103d87a8000a60103d879800041e897ae04bd7044c96600266ebcc1a4c1f8dd503a1ba69800982a9833183f1baa08401800c0dd039456600264b30013072307e3754003133223371266e08dd69842008009bad308401308501002337046eb4c21004008dd6984200984280800983f9baa308201307f375400260fe6ea8cc15000cc0ecc1bcc1fcdd500745907c1982201581bc56600260d406f15980099b89375a609060fc6ea80340ae2b300132323298009bad3084010019bad3084013085010019bae304b308101375410e033756609a6102026ea81de610802004911112cc004c1c801626464b30010018cc0040fe60d2661140200497ae09818198450098349984500a6103d87a80003308a010794bd7025eb83300198009bae308b013088013754007375c60ee6110026ea800e00e831a910100a441008032098a6103d87a80004179159800984600800c4c8cc896600260fc0031598009845809baa00380145908c0145660026104020031598009845809baa00380145908c01456600260fe0031598009845809baa00380145908c01456600266e1d20060018acc004c22c04dd5001c00a2c84600a2b3001306a0018991919194c004c248040066eb4c2480400e6eb4c2480400922259800984b0080244cc1d4c2540401c566002610a026122026ea800e264646644b3001309a01003806c59097011bad309701001375c612e02004612e020026124026ea800e2c84780a2c8498086124020026122020026120020026116026ea800e2b30013370e9005000c5660026116026ea800e0051642300516422004844009088012110024220048440084cdd780099ba548020cc22c04010cc22c04dd400419845809ba80073308b0107a4bd701844009baa0013305900430663308a01308b01308801375461160200297ae08b211202422404660e808c466ebcc22c04c22004dd51845809844009baa3077308801375400200460c866110026ea400d2f5c114a284180861080200264b30015980099b89001480022942294107d44cc2080530106d8799f4040ff0033082014c101000033082014c10100004bd7044cc20804c20c04008cc20804dd40009984100a610100004bd7020fa375a610402610602002661000200266100026ea16600266e240dd20008a4001132337066eb4c20804004dd6984100984180800983f1baa33053304d037303a3066307e375404483d92f5c114a3153307c4901243c65787065637465643e204d757374207061792064656274206d696e74696e6720666565001641ed153307c491253c65787065637465643e204d696e20636f6c6c61746572616c20756e736174697366696564001641ed153307c491213c65787065637465643e204e6f6e706f736974697665206d696e74656420616d74001641ed153307c491203c65787065637465643e20556e646572636f6c6c61746572697a656420434450001641ed153307c491223c65787065637465643e204d696e7465642076616c756520697320696e76616c6964001641ec60bc660fe60d860fa6ea820c04cc1fcc20004c1f4dd5010a5eb822a660f69201203c65787065637465643e20496e636f72726563742074782076616c6964697479001641e9153307b491203c65787065637465643e20434450206f757470757420697320696e76616c6964001641e907941f8646644b300130720018801456600260d6003133054002304e3303c48050006264b30013073307f3754003130830130800137540031641f464b30013077307f375400314c103d87a80008983099841009982a8019841809840009baa0014bd7020fa3233225980099b8800248002260c6661080260c666108026ea0c154004cc21004dd4182a80125eb812f5c1159800983700144c18ccc21004c18ccc21004dd400099842009ba80024bd7025eb82298103d87a800041fc83f8dd69841808009bad308301308401001307f3754609c66078900a1829000a0f841f064b300130710018acc006600294294294507b454cc1f12401015700168981d184080983f1baa00241ed159800983a800c4c96600264b30013077307f37540031337126eb4c1bcc20004dd50011bad30830130800137540031641f461040260fe6ea8c1b8c1fcdd51828983f9baa0758a9983ea481015800168981d984100983f9baa00141f064b30013305b375660dc60fe6ea8004c20804c1fcdd5001c4c96600260e660fe6ea800626464646644b30013089010038998349844008028803459086011843008009bad30860100230860100130850100130800137540031641f460d060ce60fe6ea80062c83e0c96600260e40031306e307f37546607a6eb0c1b8c1fcdd503a9bad308201307f375405b159800983b000c4cc0f4dd61833983f9baa075375a61040260fe6ea80b62a660fa9201014f001641f083e0c1f4dd501644c96600260e460fc6ea80062646464b30013086010028998331842808018981f1842809841009baa0048b210602308401001308401001307f37540031641f06609e6eacc128c1f8dd503a18131984000982e1984000984080983f1baa0024bd7025eb8107b20f6307c37540026eb4c194c1f4dd50061824983e1baa00b8b20fa375a60fc00260f46ea80062c83b8c1f00122c83d0dd6983d0009bad307a003307a0013079001307437540031641c460b860b660e66ea8c188c1ccdd5000c5907019818015010c54cc1c12411b3c65787065637465643e2077726f6e6720636f6c6c206173736574001641bd1533070491193c65787065637465643e204d697865642076657273696f6e73001641bc60e80031641c860e06ea80062c8368c160c15cc1bcdd5182f18379baa0018b20d83302c0260178b20de18348009834000983380098330009832800983200098318009831000982e9baa0018b20b4305f0018b20ba305b37540031641606086608460b46ea8c124c168dd5000c590571980b8089bad305c00b8a9982ba4812b3c65787065637465643e2043445043726561746f72206f757470757420646f6573206e6f74206d61746368001641586e9520048a9982b249203c65787065637465643e2043445043726561746f724e4654206d697373696e670016415516415430540013053001305200130510013050001304f001304e0041159800981100944cc88ca60026601600203f2232598009812000c4c8c966002606e0050048b2068375c606a00260626ea800e2b30013028001899192cc004c0dc00a0091640d06eb8c0d4004c0c4dd5001c5902e205c302f37540053758606260646064005300300348889660026601c6eacc084c0c8dd5002181a98191baa0388992cc006600200d301b303337540734c0103d87a8000402d13259800981c000c4c966002605060686ea800626464646464653001303e0019bad303e0049bad303e0039bad303e0024888966002608600b1329800899912cc004c0d4006264b300130470018992cc004c0dcc10cdd5000c4c8c8c96600260960051332259800981e18241baa00289919192cc004c14000a26603a609e006264b300130400018992cc004c14800626464b300130430018992cc004c15400626604460a800201316414860a06ea800a2b3001304700189919194c004dd6982b000cdd6982b001cdd6982b0012444b3001305a0048074590570c158004c154004c140dd500145904d209a304e375400260a200316413c609a6ea800a2b300130440018acc004c134dd500140162c82722c825104a18259baa0018b209a304e001304e00130493754005164118609400626606200244b3001002804c4c966002607a60926ea800626464653001375a60a0003375c60a0007375c60a00049112cc004c1500122601060a80131641443050001304f001304a375400316411c609800482522c8240dd61824800982480098221baa0018b208230460018b20883042375400f159800981c800c56600260846ea801e00516410d1640fc81f8566002603e607e6ea8006264b30010018800c54cc0fd2412043445043726561746f72206f757470757420646f6573206e6f74206d6174636800100140f93001010980f1982100725eb8298107d87b9fd87980ff00980b982198201baa046a6103d87a800040591640f4607e6ea8016607e6ea80066eb4c10c02d22259800981b00144c966002609000313259800981c18221baa00189919191919194c004c1380066eb8c13801a609c009304e0039827001244444b3001305400689981a182980509981a00189981a00109981a00089981a0028084590510c138004c134004c130004c12c004c128004c114dd5000c590421823800c5904518219baa0048acc004c0e800a264b300130480018992cc004c0e0c110dd5000c4c8c8c8c8c8ca6002609c003375c609c00d304e0049827001cc1380092222259800982a00344cc0d0c14c0284cc0d000c4cc0d00084cc0d00044cc0d00140422c8288609c002609a002609800260960026094002608a6ea80062c8210c11c0062c8228c10cdd50024566002606e005132598009824000c4c966002607060886ea800626464646464646464653001375a60a2003375c60a2013375a60a200f30510069828802cc14401260a200730510024888888896600260b4013133039305901013303000513303900413303a00313303a00213303a0010168b20ae1828800982800098278009827000982680098260009825800982500098229baa0018b208430470018b208a3043375400915980099b874801800a264b300130480018992cc004c0e0c110dd5000c4c8c8c8c8c8c8c8c8ca60026eb4c1440066eb8c1440266eb4c14401e60a200d305100598288024c14400e60a2004911111112cc004c16802626607260b202026606000a26607200826607400626607400426607400202d16415c30510013050001304f001304e001304d001304c001304b001304a00130453754003164108608e00316411460866ea80122b300130220028992cc004c120006264b3001303830443754003132323232323232323298009bae30510019bae30510099828803cc14401a60a200b30510049bad30510039bad30510024888888896600260b4013133039305901013303a00613303a00513303a00413303b0030168b20ae1828800982800098278009827000982680098260009825800982500098229baa0018b208430470018b208a3043375400915980099b874802800a264b300130480018992cc004c0e0c110dd5000c4c8c8c8c8c8c8c8c8c8c8ca60026eb8c14c0066eb8c14c02e60a601330530089829803cc96600260a200315980098189828000c5a2609060a000282722c8290dd518298034c96600260a200315980098189828000c5a2609060a000282722c8290dd51829802cc14c0126eb4c14c00e6eb4c14c009222222222259800982f005c4cc0f4c1740504cc0f80204cc0f801c4cc0f80184cc0fc00c06a2c82d860a600260a400260a200260a0002609e002609c002609a002609800260960026094002608a6ea80062c8210c11c0062c8228c10cdd5002456600266e1d200c0028992cc004c120006264b300130383044375400313232323232323232323232329800982a000cdd6982a0064dd6982a005cdd6982a0054dd6982a004cdd6982a0044dd6982a003cdd6982a0034dd6982a002cdd6982a0024dd6982a001244444444444b3001306000c899820982f80709981580580e45905d0c150004c14c004c148004c144004c140004c13c004c138004c134004c130004c12c004c128004c114dd5000c590421823800c5904518219baa0048acc004cdc3a401c005132598009824000c4c966002607060886ea80062646644b3001304c0018998191bac304b0012259800801402a2646644b300130510018992cc004c104c134dd5000c4c8c96600260a80051300730540088b20a2375c60a4002609c6ea80062c8258c1400062c8270dd7182700098278009bac304d002412d1641246eb4c124004c128004c114dd5000c590421823800c5904518219baa0048acc004cdc3a40200051323259800982480140162c8230dd7182380098219baa0048b20804100820104020804100820104020801821004c590400c0f8004c0f4004c0f0004c0ec004c0e8004c0d4dd5000c59032180e980e181a1baa302330343754606e0031640d53001006981b181b981b981b981b981b98199baa039a60103d8798000402d02f40d0606a60646ea80122a66060921253c65787065637465643e2043445043726561746f72204e46542069732070726573656e742e001640bc3758606000244464b30013022001899192cc004c0d400a0091640c86eb8c0cc004c0bcdd5001c566002604c003132332259800981b000c4cc070dd6181a800912cc00400a00f19800804cc0dc00a26002607000480490354590331bad30330013034001302f37540071640b08160c0b4dd500118159baa02189919912cc004c094c0b4dd5000c4cc8966002606800313259800981218181baa00189919912cc004c0e000626603c6eb0c0dc0048966002005132598009815181b1baa0018991925159800991980080098069bab30243039375405e44b30013371e6eb8c0f400400e2946266004004607c00281ba2934590351bae303a303737540031640d064660020026eb0c098c0dcdd5003912cc004006298103d87a80008992cc006600266ebc00530103d87a8000a50a5140d91001899801801981e801206c325980099b8f375c60780020171301a3303b303c303d0014bd7045300103d87a800040d86eb0c0ec00503944c8c8cc8966002607c00713005303e0068b2076375c60760026eb8c0ec008c0ec004dd6181c801206e8b206a375a606a002606c00260626ea80062c8170c064c060c0c0dd5180f98181baa30330018b2062375c6062605c6ea800660026eb0c074c0b8dd50124c078c0b8dd501a530103d879800040191640ac6002002605e60586ea8c0bcc0b0dd5198049bac302f302c375404403a44b30010018a5eb8226605e605860600026600400460620028171028205006026602800a60240088b2010180500098029baa00a8a4d1365640082a6600492011d3c65787065637465643e204e6f204344507320617265207370656e742e001601',
|
|
7
7
|
};
|