@typeberry/lib 0.2.0-5746fdc → 0.2.0-661fe38
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/index.cjs +656 -451
- package/index.d.ts +1339 -1118
- package/index.js +628 -424
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1,51 +1,46 @@
|
|
|
1
1
|
import assert from 'node:assert';
|
|
2
|
-
import fs
|
|
2
|
+
import fs from 'node:fs';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
4
|
|
|
6
5
|
var GpVersion;
|
|
7
6
|
(function (GpVersion) {
|
|
8
7
|
GpVersion["V0_6_7"] = "0.6.7";
|
|
9
8
|
GpVersion["V0_7_0"] = "0.7.0";
|
|
10
9
|
GpVersion["V0_7_1"] = "0.7.1";
|
|
11
|
-
GpVersion["V0_7_2"] = "0.7.2
|
|
10
|
+
GpVersion["V0_7_2"] = "0.7.2";
|
|
12
11
|
})(GpVersion || (GpVersion = {}));
|
|
13
12
|
var TestSuite;
|
|
14
13
|
(function (TestSuite) {
|
|
15
14
|
TestSuite["W3F_DAVXY"] = "w3f-davxy";
|
|
16
15
|
TestSuite["JAMDUNA"] = "jamduna";
|
|
17
16
|
})(TestSuite || (TestSuite = {}));
|
|
17
|
+
const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_6_7, GpVersion.V0_7_0, GpVersion.V0_7_1, GpVersion.V0_7_2];
|
|
18
18
|
const DEFAULT_SUITE = TestSuite.W3F_DAVXY;
|
|
19
|
-
const DEFAULT_VERSION = GpVersion.
|
|
19
|
+
const DEFAULT_VERSION = GpVersion.V0_7_2;
|
|
20
20
|
const env$1 = typeof process === "undefined" ? {} : process.env;
|
|
21
21
|
let CURRENT_VERSION = parseCurrentVersion(env$1.GP_VERSION) ?? DEFAULT_VERSION;
|
|
22
22
|
let CURRENT_SUITE = parseCurrentSuite(env$1.TEST_SUITE) ?? DEFAULT_SUITE;
|
|
23
|
-
const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_6_7, GpVersion.V0_7_0, GpVersion.V0_7_1, GpVersion.V0_7_2];
|
|
24
23
|
function parseCurrentVersion(env) {
|
|
25
24
|
if (env === undefined) {
|
|
26
25
|
return undefined;
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
case GpVersion.V0_7_2:
|
|
33
|
-
return env;
|
|
34
|
-
default:
|
|
35
|
-
throw new Error(`Configured environment variable GP_VERSION is unknown: '${env}'. Use one of: ${ALL_VERSIONS_IN_ORDER}`);
|
|
27
|
+
for (const v of Object.values(GpVersion)) {
|
|
28
|
+
if (env === v) {
|
|
29
|
+
return v;
|
|
30
|
+
}
|
|
36
31
|
}
|
|
32
|
+
throw new Error(`Configured environment variable GP_VERSION is unknown: '${env}'. Use one of: ${ALL_VERSIONS_IN_ORDER}`);
|
|
37
33
|
}
|
|
38
34
|
function parseCurrentSuite(env) {
|
|
39
35
|
if (env === undefined) {
|
|
40
36
|
return undefined;
|
|
41
37
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
default:
|
|
47
|
-
throw new Error(`Configured environment variable TEST_SUITE is unknown: '${env}'. Use one of: ${Object.values(TestSuite)}`);
|
|
38
|
+
for (const s of Object.values(TestSuite)) {
|
|
39
|
+
if (env === s) {
|
|
40
|
+
return s;
|
|
41
|
+
}
|
|
48
42
|
}
|
|
43
|
+
throw new Error(`Configured environment variable TEST_SUITE is unknown: '${env}'. Use one of: ${Object.values(TestSuite)}`);
|
|
49
44
|
}
|
|
50
45
|
class Compatibility {
|
|
51
46
|
static override(version) {
|
|
@@ -205,6 +200,13 @@ class WithDebug {
|
|
|
205
200
|
return inspect(this);
|
|
206
201
|
}
|
|
207
202
|
}
|
|
203
|
+
function lazyInspect(obj) {
|
|
204
|
+
return {
|
|
205
|
+
toString() {
|
|
206
|
+
return inspect(obj);
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
}
|
|
208
210
|
|
|
209
211
|
const env = typeof process === "undefined" ? {} : process.env;
|
|
210
212
|
/**
|
|
@@ -577,7 +579,7 @@ function isResult(x) {
|
|
|
577
579
|
* as an afterthought.
|
|
578
580
|
*/
|
|
579
581
|
|
|
580
|
-
var index$
|
|
582
|
+
var index$v = /*#__PURE__*/Object.freeze({
|
|
581
583
|
__proto__: null,
|
|
582
584
|
get CURRENT_SUITE () { return CURRENT_SUITE; },
|
|
583
585
|
get CURRENT_VERSION () { return CURRENT_VERSION; },
|
|
@@ -599,6 +601,7 @@ var index$u = /*#__PURE__*/Object.freeze({
|
|
|
599
601
|
deepEqual: deepEqual,
|
|
600
602
|
inspect: inspect,
|
|
601
603
|
isBrowser: isBrowser,
|
|
604
|
+
lazyInspect: lazyInspect,
|
|
602
605
|
measure: measure,
|
|
603
606
|
resultToString: resultToString,
|
|
604
607
|
safeAllocUint8Array: safeAllocUint8Array,
|
|
@@ -733,7 +736,7 @@ class Ordering {
|
|
|
733
736
|
}
|
|
734
737
|
}
|
|
735
738
|
|
|
736
|
-
var index$
|
|
739
|
+
var index$u = /*#__PURE__*/Object.freeze({
|
|
737
740
|
__proto__: null,
|
|
738
741
|
Ordering: Ordering
|
|
739
742
|
});
|
|
@@ -984,7 +987,7 @@ function u8ArraySameLengthEqual(self, other) {
|
|
|
984
987
|
}
|
|
985
988
|
const bytesBlobComparator = (a, b) => a.compare(b);
|
|
986
989
|
|
|
987
|
-
var index$
|
|
990
|
+
var index$t = /*#__PURE__*/Object.freeze({
|
|
988
991
|
__proto__: null,
|
|
989
992
|
BitVec: BitVec,
|
|
990
993
|
Bytes: Bytes,
|
|
@@ -1086,7 +1089,7 @@ const minU64 = (a, ...values) => values.reduce((min, value) => (value > min ? mi
|
|
|
1086
1089
|
/** Get the biggest value between U64 a and values given as input parameters. */
|
|
1087
1090
|
const maxU64 = (a, ...values) => values.reduce((max, value) => (value < max ? max : value), a);
|
|
1088
1091
|
|
|
1089
|
-
var index$
|
|
1092
|
+
var index$s = /*#__PURE__*/Object.freeze({
|
|
1090
1093
|
__proto__: null,
|
|
1091
1094
|
isU16: isU16,
|
|
1092
1095
|
isU32: isU32,
|
|
@@ -2525,7 +2528,7 @@ function sequenceViewFixLen(type, { fixedLength }) {
|
|
|
2525
2528
|
}, skipper);
|
|
2526
2529
|
}
|
|
2527
2530
|
|
|
2528
|
-
var index$
|
|
2531
|
+
var index$r = /*#__PURE__*/Object.freeze({
|
|
2529
2532
|
__proto__: null,
|
|
2530
2533
|
Decoder: Decoder,
|
|
2531
2534
|
Descriptor: Descriptor,
|
|
@@ -3726,7 +3729,7 @@ var keyDerivation = /*#__PURE__*/Object.freeze({
|
|
|
3726
3729
|
trivialSeed: trivialSeed
|
|
3727
3730
|
});
|
|
3728
3731
|
|
|
3729
|
-
var index$
|
|
3732
|
+
var index$q = /*#__PURE__*/Object.freeze({
|
|
3730
3733
|
__proto__: null,
|
|
3731
3734
|
BANDERSNATCH_KEY_BYTES: BANDERSNATCH_KEY_BYTES,
|
|
3732
3735
|
BANDERSNATCH_PROOF_BYTES: BANDERSNATCH_PROOF_BYTES,
|
|
@@ -4364,7 +4367,7 @@ var keccak = /*#__PURE__*/Object.freeze({
|
|
|
4364
4367
|
// TODO [ToDr] (#213) this should most likely be moved to a separate
|
|
4365
4368
|
// package to avoid pulling in unnecessary deps.
|
|
4366
4369
|
|
|
4367
|
-
var index$
|
|
4370
|
+
var index$p = /*#__PURE__*/Object.freeze({
|
|
4368
4371
|
__proto__: null,
|
|
4369
4372
|
Blake2b: Blake2b,
|
|
4370
4373
|
HASH_SIZE: HASH_SIZE,
|
|
@@ -5001,7 +5004,7 @@ class TruncatedHashDictionary {
|
|
|
5001
5004
|
}
|
|
5002
5005
|
}
|
|
5003
5006
|
|
|
5004
|
-
var index$
|
|
5007
|
+
var index$o = /*#__PURE__*/Object.freeze({
|
|
5005
5008
|
__proto__: null,
|
|
5006
5009
|
ArrayView: ArrayView,
|
|
5007
5010
|
FixedSizeArray: FixedSizeArray,
|
|
@@ -5050,6 +5053,8 @@ const EC_SEGMENT_SIZE = 4104;
|
|
|
5050
5053
|
* Additional data that has to be passed to the codec to correctly parse incoming bytes.
|
|
5051
5054
|
*/
|
|
5052
5055
|
class ChainSpec extends WithDebug {
|
|
5056
|
+
/** Human-readable name of the chain spec. */
|
|
5057
|
+
name;
|
|
5053
5058
|
/** Number of validators. */
|
|
5054
5059
|
validatorsCount;
|
|
5055
5060
|
/** 1/3 of number of validators */
|
|
@@ -5092,6 +5097,7 @@ class ChainSpec extends WithDebug {
|
|
|
5092
5097
|
maxLookupAnchorAge;
|
|
5093
5098
|
constructor(data) {
|
|
5094
5099
|
super();
|
|
5100
|
+
this.name = data.name;
|
|
5095
5101
|
this.validatorsCount = data.validatorsCount;
|
|
5096
5102
|
this.thirdOfValidators = tryAsU16(Math.floor(data.validatorsCount / 3));
|
|
5097
5103
|
this.validatorsSuperMajority = tryAsU16(Math.floor(data.validatorsCount / 3) * 2 + 1);
|
|
@@ -5112,6 +5118,7 @@ class ChainSpec extends WithDebug {
|
|
|
5112
5118
|
}
|
|
5113
5119
|
/** Set of values for "tiny" chain as defined in JAM test vectors. */
|
|
5114
5120
|
const tinyChainSpec = new ChainSpec({
|
|
5121
|
+
name: "tiny",
|
|
5115
5122
|
validatorsCount: tryAsU16(6),
|
|
5116
5123
|
coresCount: tryAsU16(2),
|
|
5117
5124
|
epochLength: tryAsU32(12),
|
|
@@ -5133,6 +5140,7 @@ const tinyChainSpec = new ChainSpec({
|
|
|
5133
5140
|
* Please note that only validatorsCount and epochLength are "full", the rest is copied from "tiny".
|
|
5134
5141
|
*/
|
|
5135
5142
|
const fullChainSpec = new ChainSpec({
|
|
5143
|
+
name: "full",
|
|
5136
5144
|
validatorsCount: tryAsU16(1023),
|
|
5137
5145
|
coresCount: tryAsU16(341),
|
|
5138
5146
|
epochLength: tryAsU32(600),
|
|
@@ -5183,7 +5191,7 @@ var PvmBackend;
|
|
|
5183
5191
|
PvmBackend[PvmBackend["Ananas"] = 1] = "Ananas";
|
|
5184
5192
|
})(PvmBackend || (PvmBackend = {}));
|
|
5185
5193
|
|
|
5186
|
-
var index$
|
|
5194
|
+
var index$n = /*#__PURE__*/Object.freeze({
|
|
5187
5195
|
__proto__: null,
|
|
5188
5196
|
Bootnode: Bootnode,
|
|
5189
5197
|
ChainSpec: ChainSpec,
|
|
@@ -6690,7 +6698,7 @@ function reencodeAsView(codec, object, chainSpec) {
|
|
|
6690
6698
|
return Decoder.decodeObject(codec.View, encoded, chainSpec);
|
|
6691
6699
|
}
|
|
6692
6700
|
|
|
6693
|
-
var index$
|
|
6701
|
+
var index$m = /*#__PURE__*/Object.freeze({
|
|
6694
6702
|
__proto__: null,
|
|
6695
6703
|
Block: Block,
|
|
6696
6704
|
EpochMarker: EpochMarker,
|
|
@@ -6947,7 +6955,7 @@ var json;
|
|
|
6947
6955
|
json.object = object;
|
|
6948
6956
|
})(json || (json = {}));
|
|
6949
6957
|
|
|
6950
|
-
var index$
|
|
6958
|
+
var index$l = /*#__PURE__*/Object.freeze({
|
|
6951
6959
|
__proto__: null,
|
|
6952
6960
|
get json () { return json; },
|
|
6953
6961
|
parseFromJson: parseFromJson
|
|
@@ -7217,7 +7225,7 @@ const blockFromJson = (spec) => json.object({
|
|
|
7217
7225
|
extrinsic: getExtrinsicFromJson(spec),
|
|
7218
7226
|
}, ({ header, extrinsic }) => Block.create({ header, extrinsic }));
|
|
7219
7227
|
|
|
7220
|
-
var index$
|
|
7228
|
+
var index$k = /*#__PURE__*/Object.freeze({
|
|
7221
7229
|
__proto__: null,
|
|
7222
7230
|
blockFromJson: blockFromJson,
|
|
7223
7231
|
disputesExtrinsicFromJson: disputesExtrinsicFromJson,
|
|
@@ -7711,7 +7719,7 @@ class Logger {
|
|
|
7711
7719
|
}
|
|
7712
7720
|
}
|
|
7713
7721
|
|
|
7714
|
-
var index$
|
|
7722
|
+
var index$j = /*#__PURE__*/Object.freeze({
|
|
7715
7723
|
__proto__: null,
|
|
7716
7724
|
get Level () { return Level; },
|
|
7717
7725
|
Logger: Logger,
|
|
@@ -7741,8 +7749,8 @@ const DEV_CONFIG = "dev";
|
|
|
7741
7749
|
const DEFAULT_CONFIG = "default";
|
|
7742
7750
|
const NODE_DEFAULTS = {
|
|
7743
7751
|
name: isBrowser() ? "browser" : os.hostname(),
|
|
7744
|
-
config: DEFAULT_CONFIG,
|
|
7745
|
-
pvm: PvmBackend.
|
|
7752
|
+
config: [DEFAULT_CONFIG],
|
|
7753
|
+
pvm: PvmBackend.Ananas,
|
|
7746
7754
|
};
|
|
7747
7755
|
/** Chain spec chooser. */
|
|
7748
7756
|
var KnownChainSpec;
|
|
@@ -7794,27 +7802,139 @@ class NodeConfiguration {
|
|
|
7794
7802
|
this.authorship = authorship;
|
|
7795
7803
|
}
|
|
7796
7804
|
}
|
|
7797
|
-
function loadConfig(
|
|
7798
|
-
|
|
7799
|
-
|
|
7800
|
-
|
|
7801
|
-
|
|
7802
|
-
|
|
7803
|
-
|
|
7804
|
-
|
|
7805
|
+
function loadConfig(config, withRelPath) {
|
|
7806
|
+
logger$5.log `🔧 Loading config`;
|
|
7807
|
+
let mergedJson = {};
|
|
7808
|
+
for (const entry of config) {
|
|
7809
|
+
logger$5.log `🔧 Applying '${entry}'`;
|
|
7810
|
+
if (entry === DEV_CONFIG) {
|
|
7811
|
+
mergedJson = structuredClone(configs.dev); // clone to avoid mutating the original config. not doing a merge since dev and default should theoretically replace all properties.
|
|
7812
|
+
continue;
|
|
7813
|
+
}
|
|
7814
|
+
if (entry === DEFAULT_CONFIG) {
|
|
7815
|
+
mergedJson = structuredClone(configs.default);
|
|
7816
|
+
continue;
|
|
7817
|
+
}
|
|
7818
|
+
// try to parse as JSON
|
|
7819
|
+
try {
|
|
7820
|
+
const parsed = JSON.parse(entry);
|
|
7821
|
+
deepMerge(mergedJson, parsed);
|
|
7822
|
+
continue;
|
|
7823
|
+
}
|
|
7824
|
+
catch { }
|
|
7825
|
+
// if not, try to load as file
|
|
7826
|
+
if (entry.indexOf("=") === -1 && entry.endsWith(".json")) {
|
|
7827
|
+
try {
|
|
7828
|
+
const configFile = fs.readFileSync(withRelPath(entry), "utf8");
|
|
7829
|
+
const parsed = JSON.parse(configFile);
|
|
7830
|
+
deepMerge(mergedJson, parsed);
|
|
7831
|
+
}
|
|
7832
|
+
catch (e) {
|
|
7833
|
+
throw new Error(`Unable to load config from ${entry}: ${e}`);
|
|
7834
|
+
}
|
|
7835
|
+
}
|
|
7836
|
+
else {
|
|
7837
|
+
// finally try to process as a pseudo-jq query
|
|
7838
|
+
try {
|
|
7839
|
+
processQuery(mergedJson, entry, withRelPath);
|
|
7840
|
+
}
|
|
7841
|
+
catch (e) {
|
|
7842
|
+
throw new Error(`Error while processing '${entry}': ${e}`);
|
|
7843
|
+
}
|
|
7844
|
+
}
|
|
7805
7845
|
}
|
|
7806
7846
|
try {
|
|
7807
|
-
|
|
7808
|
-
|
|
7809
|
-
|
|
7810
|
-
return parseFromJson(parsed, NodeConfiguration.fromJson);
|
|
7847
|
+
const parsed = parseFromJson(mergedJson, NodeConfiguration.fromJson);
|
|
7848
|
+
logger$5.log `🔧 Config ready`;
|
|
7849
|
+
return parsed;
|
|
7811
7850
|
}
|
|
7812
7851
|
catch (e) {
|
|
7813
|
-
throw new Error(`Unable to
|
|
7852
|
+
throw new Error(`Unable to parse config: ${e}`);
|
|
7853
|
+
}
|
|
7854
|
+
}
|
|
7855
|
+
function deepMerge(target, source) {
|
|
7856
|
+
if (!isJsonObject(source)) {
|
|
7857
|
+
throw new Error(`Expected object, got ${source}`);
|
|
7858
|
+
}
|
|
7859
|
+
for (const key in source) {
|
|
7860
|
+
if (isJsonObject(source[key])) {
|
|
7861
|
+
if (!isJsonObject(target[key])) {
|
|
7862
|
+
target[key] = {};
|
|
7863
|
+
}
|
|
7864
|
+
deepMerge(target[key], source[key]);
|
|
7865
|
+
}
|
|
7866
|
+
else {
|
|
7867
|
+
target[key] = source[key];
|
|
7868
|
+
}
|
|
7869
|
+
}
|
|
7870
|
+
}
|
|
7871
|
+
/**
|
|
7872
|
+
* Caution: updates input directly.
|
|
7873
|
+
* Processes a pseudo-jq query. Syntax:
|
|
7874
|
+
* .path.to.value = { ... } - updates value with the specified object by replacement
|
|
7875
|
+
* .path.to.value += { ... } - updates value with the specified object by merging
|
|
7876
|
+
* .path.to.value = file.json - updates value with the contents of file.json
|
|
7877
|
+
* .path.to.value += file.json - merges the contents of file.json onto value
|
|
7878
|
+
*/
|
|
7879
|
+
function processQuery(input, query, withRelPath) {
|
|
7880
|
+
const queryParts = query.split("=");
|
|
7881
|
+
if (queryParts.length === 2) {
|
|
7882
|
+
let [path, value] = queryParts.map((part) => part.trim());
|
|
7883
|
+
let merge = false;
|
|
7884
|
+
// detect += syntax
|
|
7885
|
+
if (path.endsWith("+")) {
|
|
7886
|
+
merge = true;
|
|
7887
|
+
path = path.slice(0, -1);
|
|
7888
|
+
}
|
|
7889
|
+
let parsedValue;
|
|
7890
|
+
if (value.endsWith(".json")) {
|
|
7891
|
+
try {
|
|
7892
|
+
const configFile = fs.readFileSync(withRelPath(value), "utf8");
|
|
7893
|
+
const parsed = JSON.parse(configFile);
|
|
7894
|
+
parsedValue = parsed;
|
|
7895
|
+
}
|
|
7896
|
+
catch (e) {
|
|
7897
|
+
throw new Error(`Unable to load config from ${value}: ${e}`);
|
|
7898
|
+
}
|
|
7899
|
+
}
|
|
7900
|
+
else {
|
|
7901
|
+
try {
|
|
7902
|
+
parsedValue = JSON.parse(value);
|
|
7903
|
+
}
|
|
7904
|
+
catch (e) {
|
|
7905
|
+
throw new Error(`Unrecognized syntax '${value}': ${e}`);
|
|
7906
|
+
}
|
|
7907
|
+
}
|
|
7908
|
+
let pathParts = path.split(".");
|
|
7909
|
+
// allow leading dot in path
|
|
7910
|
+
if (pathParts[0] === "") {
|
|
7911
|
+
pathParts = pathParts.slice(1);
|
|
7912
|
+
}
|
|
7913
|
+
let target = input;
|
|
7914
|
+
for (let i = 0; i < pathParts.length; i++) {
|
|
7915
|
+
const part = pathParts[i];
|
|
7916
|
+
if (!isJsonObject(target[part])) {
|
|
7917
|
+
target[part] = {};
|
|
7918
|
+
}
|
|
7919
|
+
if (i === pathParts.length - 1) {
|
|
7920
|
+
if (merge) {
|
|
7921
|
+
deepMerge(target[part], parsedValue);
|
|
7922
|
+
}
|
|
7923
|
+
else {
|
|
7924
|
+
target[part] = parsedValue;
|
|
7925
|
+
}
|
|
7926
|
+
return;
|
|
7927
|
+
}
|
|
7928
|
+
target = target[part];
|
|
7929
|
+
}
|
|
7814
7930
|
}
|
|
7931
|
+
throw new Error("Unrecognized syntax.");
|
|
7932
|
+
}
|
|
7933
|
+
function isJsonObject(value) {
|
|
7934
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
7815
7935
|
}
|
|
7816
7936
|
|
|
7817
|
-
var index$
|
|
7937
|
+
var index$i = /*#__PURE__*/Object.freeze({
|
|
7818
7938
|
__proto__: null,
|
|
7819
7939
|
DEFAULT_CONFIG: DEFAULT_CONFIG,
|
|
7820
7940
|
DEV_CONFIG: DEV_CONFIG,
|
|
@@ -8058,7 +8178,7 @@ function accumulationOutputComparator(a, b) {
|
|
|
8058
8178
|
if (result > 0) {
|
|
8059
8179
|
return Ordering.Greater;
|
|
8060
8180
|
}
|
|
8061
|
-
return
|
|
8181
|
+
return a.output.compare(b.output);
|
|
8062
8182
|
}
|
|
8063
8183
|
|
|
8064
8184
|
/** `O`: Maximum number of items in the authorizations pool. */
|
|
@@ -8955,26 +9075,6 @@ class InMemoryStateView {
|
|
|
8955
9075
|
}
|
|
8956
9076
|
}
|
|
8957
9077
|
|
|
8958
|
-
/** Dictionary entry of services that auto-accumulate every block. */
|
|
8959
|
-
class AutoAccumulate {
|
|
8960
|
-
service;
|
|
8961
|
-
gasLimit;
|
|
8962
|
-
static Codec = codec$1.Class(AutoAccumulate, {
|
|
8963
|
-
service: codec$1.u32.asOpaque(),
|
|
8964
|
-
gasLimit: codec$1.u64.asOpaque(),
|
|
8965
|
-
});
|
|
8966
|
-
static create({ service, gasLimit }) {
|
|
8967
|
-
return new AutoAccumulate(service, gasLimit);
|
|
8968
|
-
}
|
|
8969
|
-
constructor(
|
|
8970
|
-
/** Service id that auto-accumulates. */
|
|
8971
|
-
service,
|
|
8972
|
-
/** Gas limit for auto-accumulation. */
|
|
8973
|
-
gasLimit) {
|
|
8974
|
-
this.service = service;
|
|
8975
|
-
this.gasLimit = gasLimit;
|
|
8976
|
-
}
|
|
8977
|
-
}
|
|
8978
9078
|
/**
|
|
8979
9079
|
* https://graypaper.fluffylabs.dev/#/ab2cdbd/114402114402?v=0.7.2
|
|
8980
9080
|
*/
|
|
@@ -8992,7 +9092,9 @@ class PrivilegedServices {
|
|
|
8992
9092
|
registrar: Compatibility.isGreaterOrEqual(GpVersion.V0_7_1)
|
|
8993
9093
|
? codec$1.u32.asOpaque()
|
|
8994
9094
|
: ignoreValueWithDefault(tryAsServiceId(2 ** 32 - 1)),
|
|
8995
|
-
autoAccumulateServices:
|
|
9095
|
+
autoAccumulateServices: codec$1.dictionary(codec$1.u32.asOpaque(), codec$1.u64.asOpaque(), {
|
|
9096
|
+
sortKeys: (a, b) => a - b,
|
|
9097
|
+
}),
|
|
8996
9098
|
});
|
|
8997
9099
|
static create(a) {
|
|
8998
9100
|
return new PrivilegedServices(a.manager, a.delegator, a.registrar, a.assigners, a.autoAccumulateServices);
|
|
@@ -9227,6 +9329,15 @@ class InMemoryService extends WithDebug {
|
|
|
9227
9329
|
}),
|
|
9228
9330
|
};
|
|
9229
9331
|
}
|
|
9332
|
+
/** Return identical `InMemoryService` which does not share any references. */
|
|
9333
|
+
clone() {
|
|
9334
|
+
return new InMemoryService(this.serviceId, {
|
|
9335
|
+
info: ServiceAccountInfo.create(this.data.info),
|
|
9336
|
+
preimages: HashDictionary.fromEntries(Array.from(this.data.preimages.entries())),
|
|
9337
|
+
lookupHistory: HashDictionary.fromEntries(Array.from(this.data.lookupHistory.entries()).map(([k, v]) => [k, v.slice()])),
|
|
9338
|
+
storage: new Map(this.data.storage.entries()),
|
|
9339
|
+
});
|
|
9340
|
+
}
|
|
9230
9341
|
/**
|
|
9231
9342
|
* Create a new in-memory service from another state service
|
|
9232
9343
|
* by copying all given entries.
|
|
@@ -9597,7 +9708,7 @@ class InMemoryState extends WithDebug {
|
|
|
9597
9708
|
assigners: tryAsPerCore(new Array(spec.coresCount).fill(tryAsServiceId(0)), spec),
|
|
9598
9709
|
delegator: tryAsServiceId(0),
|
|
9599
9710
|
registrar: tryAsServiceId(MAX_VALUE),
|
|
9600
|
-
autoAccumulateServices:
|
|
9711
|
+
autoAccumulateServices: new Map(),
|
|
9601
9712
|
}),
|
|
9602
9713
|
accumulationOutputLog: SortedArray.fromArray(accumulationOutputComparator, []),
|
|
9603
9714
|
services: new Map(),
|
|
@@ -9616,11 +9727,10 @@ const serviceDataCodec = codec$1.dictionary(codec$1.u32.asOpaque(), serviceEntri
|
|
|
9616
9727
|
sortKeys: (a, b) => a - b,
|
|
9617
9728
|
});
|
|
9618
9729
|
|
|
9619
|
-
var index$
|
|
9730
|
+
var index$h = /*#__PURE__*/Object.freeze({
|
|
9620
9731
|
__proto__: null,
|
|
9621
9732
|
AUTHORIZATION_QUEUE_SIZE: AUTHORIZATION_QUEUE_SIZE,
|
|
9622
9733
|
AccumulationOutput: AccumulationOutput,
|
|
9623
|
-
AutoAccumulate: AutoAccumulate,
|
|
9624
9734
|
AvailabilityAssignment: AvailabilityAssignment,
|
|
9625
9735
|
BASE_SERVICE_BALANCE: BASE_SERVICE_BALANCE,
|
|
9626
9736
|
BlockState: BlockState,
|
|
@@ -10691,7 +10801,7 @@ const bitLookup = [
|
|
|
10691
10801
|
[0b00000000, 8],
|
|
10692
10802
|
];
|
|
10693
10803
|
|
|
10694
|
-
var index$
|
|
10804
|
+
var index$g = /*#__PURE__*/Object.freeze({
|
|
10695
10805
|
__proto__: null,
|
|
10696
10806
|
BranchNode: BranchNode,
|
|
10697
10807
|
InMemoryTrie: InMemoryTrie,
|
|
@@ -10741,7 +10851,6 @@ function* serializeRemovedServices(servicesRemoved) {
|
|
|
10741
10851
|
return;
|
|
10742
10852
|
}
|
|
10743
10853
|
for (const serviceId of servicesRemoved) {
|
|
10744
|
-
// TODO [ToDr] what about all data associated with a service?
|
|
10745
10854
|
const codec = serialize.serviceData(serviceId);
|
|
10746
10855
|
yield [StateEntryUpdateAction.Remove, codec.key, EMPTY_BLOB];
|
|
10747
10856
|
}
|
|
@@ -11059,7 +11168,7 @@ function loadState(spec, blake2b, entries) {
|
|
|
11059
11168
|
* hashmap of `key -> value` entries.
|
|
11060
11169
|
*/
|
|
11061
11170
|
|
|
11062
|
-
var index$
|
|
11171
|
+
var index$f = /*#__PURE__*/Object.freeze({
|
|
11063
11172
|
__proto__: null,
|
|
11064
11173
|
SerializedService: SerializedService,
|
|
11065
11174
|
SerializedState: SerializedState,
|
|
@@ -11304,7 +11413,7 @@ class InMemoryStates {
|
|
|
11304
11413
|
async close() { }
|
|
11305
11414
|
}
|
|
11306
11415
|
|
|
11307
|
-
var index$
|
|
11416
|
+
var index$e = /*#__PURE__*/Object.freeze({
|
|
11308
11417
|
__proto__: null,
|
|
11309
11418
|
InMemoryBlocks: InMemoryBlocks,
|
|
11310
11419
|
InMemorySerializedStates: InMemorySerializedStates,
|
|
@@ -11668,7 +11777,7 @@ const initEc = async () => {
|
|
|
11668
11777
|
await init.reedSolomon();
|
|
11669
11778
|
};
|
|
11670
11779
|
|
|
11671
|
-
var index$
|
|
11780
|
+
var index$d = /*#__PURE__*/Object.freeze({
|
|
11672
11781
|
__proto__: null,
|
|
11673
11782
|
N_CHUNKS_REDUNDANCY: N_CHUNKS_REDUNDANCY,
|
|
11674
11783
|
N_CHUNKS_REQUIRED: N_CHUNKS_REQUIRED,
|
|
@@ -12102,7 +12211,7 @@ class FuzzTarget {
|
|
|
12102
12211
|
}
|
|
12103
12212
|
}
|
|
12104
12213
|
|
|
12105
|
-
var index$
|
|
12214
|
+
var index$c = /*#__PURE__*/Object.freeze({
|
|
12106
12215
|
__proto__: null,
|
|
12107
12216
|
AncestryItem: AncestryItem,
|
|
12108
12217
|
ErrorMessage: ErrorMessage,
|
|
@@ -12120,9 +12229,9 @@ var index$b = /*#__PURE__*/Object.freeze({
|
|
|
12120
12229
|
stateRootCodec: stateRootCodec
|
|
12121
12230
|
});
|
|
12122
12231
|
|
|
12123
|
-
var index$
|
|
12232
|
+
var index$b = /*#__PURE__*/Object.freeze({
|
|
12124
12233
|
__proto__: null,
|
|
12125
|
-
v1: index$
|
|
12234
|
+
v1: index$c
|
|
12126
12235
|
});
|
|
12127
12236
|
|
|
12128
12237
|
/** Size of the transfer memo. */
|
|
@@ -12193,13 +12302,6 @@ var ForgetPreimageError;
|
|
|
12193
12302
|
})(ForgetPreimageError || (ForgetPreimageError = {}));
|
|
12194
12303
|
/**
|
|
12195
12304
|
* Errors that may occur when the transfer is invoked.
|
|
12196
|
-
*
|
|
12197
|
-
* TODO [ToDr] Since I don't fully understand yet which of these
|
|
12198
|
-
* could be checked directly in the host call (i.e. if we will
|
|
12199
|
-
* have access to the service account state there) for now I keep
|
|
12200
|
-
* them safely in the `AccumulationPartialState` implementation.
|
|
12201
|
-
* However, if possible, these should be moved directly to the
|
|
12202
|
-
* host call implementation.
|
|
12203
12305
|
*/
|
|
12204
12306
|
var TransferError;
|
|
12205
12307
|
(function (TransferError) {
|
|
@@ -12409,7 +12511,7 @@ function deepCloneMapWithArray(map) {
|
|
|
12409
12511
|
class AccumulationStateUpdate {
|
|
12410
12512
|
services;
|
|
12411
12513
|
transfers;
|
|
12412
|
-
|
|
12514
|
+
yieldedRoot;
|
|
12413
12515
|
/** Updated authorization queues for cores. */
|
|
12414
12516
|
authorizationQueues = new Map();
|
|
12415
12517
|
/** New validators data. */
|
|
@@ -12422,10 +12524,10 @@ class AccumulationStateUpdate {
|
|
|
12422
12524
|
/** Pending transfers. */
|
|
12423
12525
|
transfers,
|
|
12424
12526
|
/** Yielded accumulation root. */
|
|
12425
|
-
|
|
12527
|
+
yieldedRoot = null) {
|
|
12426
12528
|
this.services = services;
|
|
12427
12529
|
this.transfers = transfers;
|
|
12428
|
-
this.
|
|
12530
|
+
this.yieldedRoot = yieldedRoot;
|
|
12429
12531
|
}
|
|
12430
12532
|
/** Create new empty state update. */
|
|
12431
12533
|
static empty() {
|
|
@@ -12455,7 +12557,7 @@ class AccumulationStateUpdate {
|
|
|
12455
12557
|
storage: deepCloneMapWithArray(from.services.storage),
|
|
12456
12558
|
};
|
|
12457
12559
|
const transfers = [...from.transfers];
|
|
12458
|
-
const update = new AccumulationStateUpdate(serviceUpdates, transfers,
|
|
12560
|
+
const update = new AccumulationStateUpdate(serviceUpdates, transfers, from.yieldedRoot);
|
|
12459
12561
|
// update entries
|
|
12460
12562
|
for (const [k, v] of from.authorizationQueues) {
|
|
12461
12563
|
update.authorizationQueues.set(k, v);
|
|
@@ -12477,6 +12579,12 @@ class AccumulationStateUpdate {
|
|
|
12477
12579
|
this.transfers = [];
|
|
12478
12580
|
return transfers;
|
|
12479
12581
|
}
|
|
12582
|
+
/** Retrieve and clear yielded root. */
|
|
12583
|
+
takeYieldedRoot() {
|
|
12584
|
+
const yieldedRoot = this.yieldedRoot;
|
|
12585
|
+
this.yieldedRoot = null;
|
|
12586
|
+
return yieldedRoot;
|
|
12587
|
+
}
|
|
12480
12588
|
}
|
|
12481
12589
|
class PartiallyUpdatedState {
|
|
12482
12590
|
state;
|
|
@@ -12554,6 +12662,16 @@ class PartiallyUpdatedState {
|
|
|
12554
12662
|
}
|
|
12555
12663
|
/** Get status of a preimage of current service taking into account any updates. */
|
|
12556
12664
|
getLookupHistory(currentTimeslot, serviceId, hash, length) {
|
|
12665
|
+
const updatedService = this.stateUpdate.services.updated.get(serviceId);
|
|
12666
|
+
/** Return lookup history item for newly created service */
|
|
12667
|
+
if (updatedService !== undefined && updatedService.action.kind === UpdateServiceKind.Create) {
|
|
12668
|
+
const lookupHistoryItem = updatedService.action.lookupHistory;
|
|
12669
|
+
if (lookupHistoryItem !== null &&
|
|
12670
|
+
hash.isEqualTo(lookupHistoryItem.hash) &&
|
|
12671
|
+
length === BigInt(lookupHistoryItem.length)) {
|
|
12672
|
+
return lookupHistoryItem;
|
|
12673
|
+
}
|
|
12674
|
+
}
|
|
12557
12675
|
const preimages = this.stateUpdate.services.preimages.get(serviceId) ?? [];
|
|
12558
12676
|
// TODO [ToDr] This is most likely wrong. We may have `provide` and `remove` within
|
|
12559
12677
|
// the same state update. We should however switch to proper "updated state"
|
|
@@ -12669,304 +12787,87 @@ function preimageLenAsU32(length) {
|
|
|
12669
12787
|
return length >= 2n ** 32n ? null : tryAsU32(Number(length));
|
|
12670
12788
|
}
|
|
12671
12789
|
|
|
12672
|
-
|
|
12673
|
-
|
|
12674
|
-
|
|
12675
|
-
|
|
12676
|
-
*/
|
|
12677
|
-
const HostCallResult = {
|
|
12678
|
-
/** The return value indicating an item does not exist. */
|
|
12679
|
-
NONE: tryAsU64(0xffffffffffffffffn), // 2**64 - 1
|
|
12680
|
-
/** Name unknown. */
|
|
12681
|
-
WHAT: tryAsU64(0xfffffffffffffffen), // 2**64 - 2
|
|
12682
|
-
/** The inner PVM memory index provided for reading/writing is not accessible. */
|
|
12683
|
-
OOB: tryAsU64(0xfffffffffffffffdn), // 2**64 - 3
|
|
12684
|
-
/** Index unknown. */
|
|
12685
|
-
WHO: tryAsU64(0xfffffffffffffffcn), // 2**64 - 4
|
|
12686
|
-
/** Storage full or resource already allocated. */
|
|
12687
|
-
FULL: tryAsU64(0xfffffffffffffffbn), // 2**64 - 5
|
|
12688
|
-
/** Core index unknown. */
|
|
12689
|
-
CORE: tryAsU64(0xfffffffffffffffan), // 2**64 - 6
|
|
12690
|
-
/** Insufficient funds. */
|
|
12691
|
-
CASH: tryAsU64(0xfffffffffffffff9n), // 2**64 - 7
|
|
12692
|
-
/** Gas limit too low. */
|
|
12693
|
-
LOW: tryAsU64(0xfffffffffffffff8n), // 2**64 - 8
|
|
12694
|
-
/** The item is already solicited, cannot be forgotten or the operation is invalid due to privilege level. */
|
|
12695
|
-
HUH: tryAsU64(0xfffffffffffffff7n), // 2**64 - 9
|
|
12696
|
-
/** The return value indicating general success. */
|
|
12697
|
-
OK: tryAsU64(0n),
|
|
12790
|
+
const REGISTER_SIZE_SHIFT = 3; // x << 3 === x * 8
|
|
12791
|
+
const tryAsRegisterIndex = (index) => {
|
|
12792
|
+
check `${index >= 0 && index < NO_OF_REGISTERS$1} Incorrect register index: ${index}!`;
|
|
12793
|
+
return asOpaqueType(index);
|
|
12698
12794
|
};
|
|
12699
|
-
|
|
12700
|
-
|
|
12701
|
-
|
|
12702
|
-
|
|
12703
|
-
|
|
12704
|
-
|
|
12705
|
-
|
|
12706
|
-
|
|
12707
|
-
|
|
12795
|
+
class Registers {
|
|
12796
|
+
bytes;
|
|
12797
|
+
asSigned;
|
|
12798
|
+
asUnsigned;
|
|
12799
|
+
constructor(bytes = safeAllocUint8Array(NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT)) {
|
|
12800
|
+
this.bytes = bytes;
|
|
12801
|
+
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12802
|
+
this.asSigned = new BigInt64Array(bytes.buffer, bytes.byteOffset);
|
|
12803
|
+
this.asUnsigned = new BigUint64Array(bytes.buffer, bytes.byteOffset);
|
|
12708
12804
|
}
|
|
12709
|
-
|
|
12710
|
-
|
|
12711
|
-
|
|
12712
|
-
|
|
12713
|
-
|
|
12714
|
-
|
|
12805
|
+
getAllEncoded() {
|
|
12806
|
+
return this.bytes;
|
|
12807
|
+
}
|
|
12808
|
+
setAllEncoded(bytes) {
|
|
12809
|
+
check `${bytes.length === this.bytes.length} Incorrect size of input registers. Got: ${bytes.length}, need: ${this.bytes.length}`;
|
|
12810
|
+
this.bytes.set(bytes, 0);
|
|
12811
|
+
}
|
|
12812
|
+
static fromBytes(bytes) {
|
|
12813
|
+
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12814
|
+
return new Registers(bytes);
|
|
12815
|
+
}
|
|
12816
|
+
getBytesAsLittleEndian(index, len) {
|
|
12817
|
+
const offset = index << REGISTER_SIZE_SHIFT;
|
|
12818
|
+
return this.bytes.subarray(offset, offset + len);
|
|
12819
|
+
}
|
|
12820
|
+
copyFrom(regs) {
|
|
12821
|
+
const array = regs instanceof BigUint64Array ? regs : regs.asUnsigned;
|
|
12822
|
+
this.asUnsigned.set(array);
|
|
12823
|
+
}
|
|
12824
|
+
reset() {
|
|
12825
|
+
for (let i = 0; i < NO_OF_REGISTERS$1; i++) {
|
|
12826
|
+
this.asUnsigned[i] = 0n;
|
|
12827
|
+
}
|
|
12828
|
+
}
|
|
12829
|
+
getLowerU32(registerIndex) {
|
|
12830
|
+
return Number(this.asUnsigned[registerIndex] & 0xffffffffn);
|
|
12831
|
+
}
|
|
12832
|
+
getLowerI32(registerIndex) {
|
|
12833
|
+
return Number(this.getLowerU32(registerIndex)) >> 0;
|
|
12834
|
+
}
|
|
12835
|
+
setU32(registerIndex, value) {
|
|
12836
|
+
this.asUnsigned[registerIndex] = signExtend32To64(value);
|
|
12837
|
+
}
|
|
12838
|
+
setI32(registerIndex, value) {
|
|
12839
|
+
this.asSigned[registerIndex] = signExtend32To64(value);
|
|
12840
|
+
}
|
|
12841
|
+
getU64(registerIndex) {
|
|
12842
|
+
return this.asUnsigned[registerIndex];
|
|
12843
|
+
}
|
|
12844
|
+
getI64(registerIndex) {
|
|
12845
|
+
return this.asSigned[registerIndex];
|
|
12846
|
+
}
|
|
12847
|
+
setU64(registerIndex, value) {
|
|
12848
|
+
this.asUnsigned[registerIndex] = value;
|
|
12849
|
+
}
|
|
12850
|
+
setI64(registerIndex, value) {
|
|
12851
|
+
this.asSigned[registerIndex] = value;
|
|
12852
|
+
}
|
|
12853
|
+
getAllU64() {
|
|
12854
|
+
return this.asUnsigned;
|
|
12715
12855
|
}
|
|
12716
|
-
return null;
|
|
12717
|
-
}
|
|
12718
|
-
function writeServiceIdAsLeBytes(serviceId, destination) {
|
|
12719
|
-
check `${destination.length >= SERVICE_ID_BYTES} Not enough space in the destination.`;
|
|
12720
|
-
destination.set(u32AsLeBytes(serviceId));
|
|
12721
|
-
}
|
|
12722
|
-
/** Clamp a U64 to the maximum value of a 32-bit unsigned integer. */
|
|
12723
|
-
function clampU64ToU32(value) {
|
|
12724
|
-
return value > MAX_U32_BIG_INT ? MAX_U32 : tryAsU32(Number(value));
|
|
12725
12856
|
}
|
|
12726
|
-
function
|
|
12727
|
-
|
|
12728
|
-
|
|
12729
|
-
|
|
12730
|
-
|
|
12731
|
-
|
|
12732
|
-
|
|
12733
|
-
|
|
12734
|
-
|
|
12735
|
-
|
|
12736
|
-
|
|
12737
|
-
|
|
12738
|
-
|
|
12739
|
-
|
|
12740
|
-
get NewServiceError () { return NewServiceError; },
|
|
12741
|
-
NoMachineError: NoMachineError,
|
|
12742
|
-
get PagesError () { return PagesError; },
|
|
12743
|
-
PartiallyUpdatedState: PartiallyUpdatedState,
|
|
12744
|
-
get PeekPokeError () { return PeekPokeError; },
|
|
12745
|
-
PendingTransfer: PendingTransfer,
|
|
12746
|
-
get PreimageStatusKind () { return PreimageStatusKind; },
|
|
12747
|
-
get ProvidePreimageError () { return ProvidePreimageError; },
|
|
12748
|
-
get RequestPreimageError () { return RequestPreimageError; },
|
|
12749
|
-
SERVICE_ID_BYTES: SERVICE_ID_BYTES,
|
|
12750
|
-
SegmentExportError: SegmentExportError,
|
|
12751
|
-
TRANSFER_MEMO_BYTES: TRANSFER_MEMO_BYTES,
|
|
12752
|
-
get TransferError () { return TransferError; },
|
|
12753
|
-
UnprivilegedError: UnprivilegedError,
|
|
12754
|
-
get UpdatePrivilegesError () { return UpdatePrivilegesError; },
|
|
12755
|
-
get ZeroVoidError () { return ZeroVoidError; },
|
|
12756
|
-
clampU64ToU32: clampU64ToU32,
|
|
12757
|
-
emptyRegistersBuffer: emptyRegistersBuffer,
|
|
12758
|
-
getServiceId: getServiceId,
|
|
12759
|
-
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
12760
|
-
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
12761
|
-
toMemoryOperation: toMemoryOperation,
|
|
12762
|
-
tryAsMachineId: tryAsMachineId,
|
|
12763
|
-
tryAsProgramCounter: tryAsProgramCounter,
|
|
12764
|
-
writeServiceIdAsLeBytes: writeServiceIdAsLeBytes
|
|
12765
|
-
});
|
|
12766
|
-
|
|
12767
|
-
const SUPER_PEAK_STRING = BytesBlob.blobFromString("peak");
|
|
12768
|
-
/**
|
|
12769
|
-
* Merkle Mountain Range.
|
|
12770
|
-
*
|
|
12771
|
-
* https://graypaper.fluffylabs.dev/#/5f542d7/3aa0023aa002?v=0.6.2
|
|
12772
|
-
*/
|
|
12773
|
-
class MerkleMountainRange {
|
|
12774
|
-
hasher;
|
|
12775
|
-
mountains;
|
|
12776
|
-
/** Construct an empty MMR. */
|
|
12777
|
-
static empty(hasher) {
|
|
12778
|
-
return new MerkleMountainRange(hasher);
|
|
12779
|
-
}
|
|
12780
|
-
/** Construct a new MMR from existing peaks. */
|
|
12781
|
-
static fromPeaks(hasher, mmr) {
|
|
12782
|
-
return new MerkleMountainRange(hasher, mmr.peaks
|
|
12783
|
-
.reduce((acc, peak, index) => {
|
|
12784
|
-
if (peak !== null) {
|
|
12785
|
-
acc.push(Mountain.fromPeak(peak, 2 ** index));
|
|
12786
|
-
}
|
|
12787
|
-
return acc;
|
|
12788
|
-
}, [])
|
|
12789
|
-
.reverse());
|
|
12790
|
-
}
|
|
12791
|
-
constructor(hasher,
|
|
12792
|
-
/** Store non-empty merkle tries (mountains) ordered by descending size. */
|
|
12793
|
-
mountains = []) {
|
|
12794
|
-
this.hasher = hasher;
|
|
12795
|
-
this.mountains = mountains;
|
|
12796
|
-
}
|
|
12797
|
-
/**
|
|
12798
|
-
* Append a new hash to the MMR structure.
|
|
12799
|
-
*
|
|
12800
|
-
* https://graypaper.fluffylabs.dev/#/5f542d7/3b11003b1100?v=0.6.2
|
|
12801
|
-
*/
|
|
12802
|
-
append(hash) {
|
|
12803
|
-
let newMountain = Mountain.fromPeak(hash, 1);
|
|
12804
|
-
for (;;) {
|
|
12805
|
-
const last = this.mountains.pop();
|
|
12806
|
-
if (last === undefined) {
|
|
12807
|
-
this.mountains.push(newMountain);
|
|
12808
|
-
return;
|
|
12809
|
-
}
|
|
12810
|
-
if (last.size !== newMountain.size) {
|
|
12811
|
-
this.mountains.push(last);
|
|
12812
|
-
this.mountains.push(newMountain);
|
|
12813
|
-
return;
|
|
12814
|
-
}
|
|
12815
|
-
newMountain = last.mergeWith(this.hasher, newMountain);
|
|
12816
|
-
}
|
|
12817
|
-
}
|
|
12818
|
-
/**
|
|
12819
|
-
* Root of the entire structure.
|
|
12820
|
-
*
|
|
12821
|
-
* https://graypaper.fluffylabs.dev/#/5f542d7/3b20013b2001?v=0.6.2
|
|
12822
|
-
*/
|
|
12823
|
-
getSuperPeakHash() {
|
|
12824
|
-
if (this.mountains.length === 0) {
|
|
12825
|
-
return Bytes.zero(HASH_SIZE).asOpaque();
|
|
12826
|
-
}
|
|
12827
|
-
const revMountains = this.mountains.slice().reverse();
|
|
12828
|
-
const length = revMountains.length;
|
|
12829
|
-
let lastHash = revMountains[0].peak;
|
|
12830
|
-
for (let i = 1; i < length; i++) {
|
|
12831
|
-
const mountain = revMountains[i];
|
|
12832
|
-
lastHash = this.hasher.hashConcatPrepend(SUPER_PEAK_STRING, lastHash, mountain.peak);
|
|
12833
|
-
}
|
|
12834
|
-
return lastHash;
|
|
12835
|
-
}
|
|
12836
|
-
/** Get current peaks. */
|
|
12837
|
-
getPeaks() {
|
|
12838
|
-
const peaks = [];
|
|
12839
|
-
const mountains = this.mountains;
|
|
12840
|
-
// always 2**index
|
|
12841
|
-
let currentSize = 1;
|
|
12842
|
-
let currentIdx = mountains.length - 1;
|
|
12843
|
-
while (currentIdx >= 0) {
|
|
12844
|
-
const currentItem = mountains[currentIdx];
|
|
12845
|
-
if (currentItem.size >= currentSize && currentItem.size < 2 * currentSize) {
|
|
12846
|
-
peaks.push(currentItem.peak);
|
|
12847
|
-
currentIdx -= 1;
|
|
12848
|
-
}
|
|
12849
|
-
else {
|
|
12850
|
-
peaks.push(null);
|
|
12851
|
-
}
|
|
12852
|
-
// move to the next index.
|
|
12853
|
-
currentSize = currentSize << 1;
|
|
12854
|
-
}
|
|
12855
|
-
return { peaks };
|
|
12856
|
-
}
|
|
12857
|
-
}
|
|
12858
|
-
/** An internal helper structure to represent a merkle trie for MMR. */
|
|
12859
|
-
class Mountain {
|
|
12860
|
-
peak;
|
|
12861
|
-
size;
|
|
12862
|
-
constructor(peak, size) {
|
|
12863
|
-
this.peak = peak;
|
|
12864
|
-
this.size = size;
|
|
12865
|
-
}
|
|
12866
|
-
static fromPeak(peak, size) {
|
|
12867
|
-
return new Mountain(peak, size);
|
|
12868
|
-
}
|
|
12869
|
-
static fromChildren(hasher, children) {
|
|
12870
|
-
const [left, right] = children;
|
|
12871
|
-
const peak = hasher.hashConcat(left.peak, right.peak);
|
|
12872
|
-
const size = left.size + right.size;
|
|
12873
|
-
return new Mountain(peak, size);
|
|
12874
|
-
}
|
|
12875
|
-
/** Merge with another montain of the same size. */
|
|
12876
|
-
mergeWith(hasher, other) {
|
|
12877
|
-
return Mountain.fromChildren(hasher, [this, other]);
|
|
12878
|
-
}
|
|
12879
|
-
toString() {
|
|
12880
|
-
return `${this.size} @ ${this.peak}`;
|
|
12881
|
-
}
|
|
12882
|
-
}
|
|
12883
|
-
|
|
12884
|
-
var index$8 = /*#__PURE__*/Object.freeze({
|
|
12885
|
-
__proto__: null,
|
|
12886
|
-
MerkleMountainRange: MerkleMountainRange
|
|
12887
|
-
});
|
|
12888
|
-
|
|
12889
|
-
const REGISTER_SIZE_SHIFT = 3; // x << 3 === x * 8
|
|
12890
|
-
const tryAsRegisterIndex = (index) => {
|
|
12891
|
-
check `${index >= 0 && index < NO_OF_REGISTERS$1} Incorrect register index: ${index}!`;
|
|
12892
|
-
return asOpaqueType(index);
|
|
12893
|
-
};
|
|
12894
|
-
class Registers {
|
|
12895
|
-
bytes;
|
|
12896
|
-
asSigned;
|
|
12897
|
-
asUnsigned;
|
|
12898
|
-
constructor(bytes = safeAllocUint8Array(NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT)) {
|
|
12899
|
-
this.bytes = bytes;
|
|
12900
|
-
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12901
|
-
this.asSigned = new BigInt64Array(bytes.buffer, bytes.byteOffset);
|
|
12902
|
-
this.asUnsigned = new BigUint64Array(bytes.buffer, bytes.byteOffset);
|
|
12903
|
-
}
|
|
12904
|
-
getAllEncoded() {
|
|
12905
|
-
return this.bytes;
|
|
12906
|
-
}
|
|
12907
|
-
setAllEncoded(bytes) {
|
|
12908
|
-
check `${bytes.length === this.bytes.length} Incorrect size of input registers. Got: ${bytes.length}, need: ${this.bytes.length}`;
|
|
12909
|
-
this.bytes.set(bytes, 0);
|
|
12910
|
-
}
|
|
12911
|
-
static fromBytes(bytes) {
|
|
12912
|
-
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12913
|
-
return new Registers(bytes);
|
|
12914
|
-
}
|
|
12915
|
-
getBytesAsLittleEndian(index, len) {
|
|
12916
|
-
const offset = index << REGISTER_SIZE_SHIFT;
|
|
12917
|
-
return this.bytes.subarray(offset, offset + len);
|
|
12918
|
-
}
|
|
12919
|
-
copyFrom(regs) {
|
|
12920
|
-
const array = regs instanceof BigUint64Array ? regs : regs.asUnsigned;
|
|
12921
|
-
this.asUnsigned.set(array);
|
|
12922
|
-
}
|
|
12923
|
-
reset() {
|
|
12924
|
-
for (let i = 0; i < NO_OF_REGISTERS$1; i++) {
|
|
12925
|
-
this.asUnsigned[i] = 0n;
|
|
12926
|
-
}
|
|
12927
|
-
}
|
|
12928
|
-
getLowerU32(registerIndex) {
|
|
12929
|
-
return Number(this.asUnsigned[registerIndex] & 0xffffffffn);
|
|
12930
|
-
}
|
|
12931
|
-
getLowerI32(registerIndex) {
|
|
12932
|
-
return Number(this.getLowerU32(registerIndex)) >> 0;
|
|
12933
|
-
}
|
|
12934
|
-
setU32(registerIndex, value) {
|
|
12935
|
-
this.asUnsigned[registerIndex] = signExtend32To64(value);
|
|
12936
|
-
}
|
|
12937
|
-
setI32(registerIndex, value) {
|
|
12938
|
-
this.asSigned[registerIndex] = signExtend32To64(value);
|
|
12939
|
-
}
|
|
12940
|
-
getU64(registerIndex) {
|
|
12941
|
-
return this.asUnsigned[registerIndex];
|
|
12942
|
-
}
|
|
12943
|
-
getI64(registerIndex) {
|
|
12944
|
-
return this.asSigned[registerIndex];
|
|
12945
|
-
}
|
|
12946
|
-
setU64(registerIndex, value) {
|
|
12947
|
-
this.asUnsigned[registerIndex] = value;
|
|
12948
|
-
}
|
|
12949
|
-
setI64(registerIndex, value) {
|
|
12950
|
-
this.asSigned[registerIndex] = value;
|
|
12951
|
-
}
|
|
12952
|
-
getAllU64() {
|
|
12953
|
-
return this.asUnsigned;
|
|
12954
|
-
}
|
|
12955
|
-
}
|
|
12956
|
-
function signExtend32To64(value) {
|
|
12957
|
-
// Convert to BigInt if the value is a number
|
|
12958
|
-
const bigValue = typeof value === "number" ? BigInt(value) : value;
|
|
12959
|
-
// Ensure the value is treated as a 32-bit integer
|
|
12960
|
-
const mask32 = BigInt(0xffffffff);
|
|
12961
|
-
const signBit = BigInt(0x80000000);
|
|
12962
|
-
const maskedValue = bigValue & mask32;
|
|
12963
|
-
// Check the sign bit and extend the sign if necessary
|
|
12964
|
-
if ((maskedValue & signBit) !== BigInt(0)) {
|
|
12965
|
-
// If the sign bit is set, extend with ones
|
|
12966
|
-
return maskedValue | ~mask32;
|
|
12967
|
-
}
|
|
12968
|
-
// If the sign bit is not set, return as is
|
|
12969
|
-
return maskedValue;
|
|
12857
|
+
function signExtend32To64(value) {
|
|
12858
|
+
// Convert to BigInt if the value is a number
|
|
12859
|
+
const bigValue = typeof value === "number" ? BigInt(value) : value;
|
|
12860
|
+
// Ensure the value is treated as a 32-bit integer
|
|
12861
|
+
const mask32 = BigInt(0xffffffff);
|
|
12862
|
+
const signBit = BigInt(0x80000000);
|
|
12863
|
+
const maskedValue = bigValue & mask32;
|
|
12864
|
+
// Check the sign bit and extend the sign if necessary
|
|
12865
|
+
if ((maskedValue & signBit) !== BigInt(0)) {
|
|
12866
|
+
// If the sign bit is set, extend with ones
|
|
12867
|
+
return maskedValue | ~mask32;
|
|
12868
|
+
}
|
|
12869
|
+
// If the sign bit is not set, return as is
|
|
12870
|
+
return maskedValue;
|
|
12970
12871
|
}
|
|
12971
12872
|
|
|
12972
12873
|
/** Attempt to convert a number into `HostCallIndex`. */
|
|
@@ -13951,7 +13852,7 @@ function getRegisters(argsLength) {
|
|
|
13951
13852
|
return regs;
|
|
13952
13853
|
}
|
|
13953
13854
|
|
|
13954
|
-
var index$
|
|
13855
|
+
var index$a = /*#__PURE__*/Object.freeze({
|
|
13955
13856
|
__proto__: null,
|
|
13956
13857
|
MemorySegment: MemorySegment,
|
|
13957
13858
|
SpiMemory: SpiMemory,
|
|
@@ -14010,7 +13911,7 @@ function extractCodeAndMetadata(blobWithMetadata) {
|
|
|
14010
13911
|
return { metadata, code };
|
|
14011
13912
|
}
|
|
14012
13913
|
|
|
14013
|
-
var index$
|
|
13914
|
+
var index$9 = /*#__PURE__*/Object.freeze({
|
|
14014
13915
|
__proto__: null,
|
|
14015
13916
|
Program: Program,
|
|
14016
13917
|
extractCodeAndMetadata: extractCodeAndMetadata
|
|
@@ -16882,7 +16783,7 @@ class Interpreter {
|
|
|
16882
16783
|
}
|
|
16883
16784
|
}
|
|
16884
16785
|
|
|
16885
|
-
var index$
|
|
16786
|
+
var index$8 = /*#__PURE__*/Object.freeze({
|
|
16886
16787
|
__proto__: null,
|
|
16887
16788
|
Interpreter: Interpreter,
|
|
16888
16789
|
Memory: Memory,
|
|
@@ -16893,7 +16794,7 @@ var index$5 = /*#__PURE__*/Object.freeze({
|
|
|
16893
16794
|
tryAsSbrkIndex: tryAsSbrkIndex
|
|
16894
16795
|
});
|
|
16895
16796
|
|
|
16896
|
-
async function instantiate(module, imports = {}) {
|
|
16797
|
+
async function instantiate$1(module, imports = {}) {
|
|
16897
16798
|
const adaptedImports = {
|
|
16898
16799
|
env: Object.setPrototypeOf({
|
|
16899
16800
|
abort(message, fileName, lineNumber, columnNumber) {
|
|
@@ -17270,9 +17171,28 @@ async function instantiate(module, imports = {}) {
|
|
|
17270
17171
|
return adaptedExports;
|
|
17271
17172
|
}
|
|
17272
17173
|
|
|
17273
|
-
//
|
|
17274
|
-
|
|
17275
|
-
|
|
17174
|
+
// Auto-generated inline WASM module
|
|
17175
|
+
// Target: release-stub
|
|
17176
|
+
// Source: build/release-stub.wasm
|
|
17177
|
+
|
|
17178
|
+
|
|
17179
|
+
const wasmBase64 = "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IAckACAGIAM2AgAFIAMgB0EBdCIGIAMgBksbEA0iAyACIAf8CgAAIAMhAgsFIAgEQCACIANqJAAgBiADNgIACwsgAkEEayABNgIQIAJBEGoiAiAEakEAIAEgBGv8CwAgAiAFRwRAIAAgAjYCACAAIAI2AgQLIAAgATYCCAsLTQEBfyABIAAoAgxPBEAgAUEASARAQfDEAEGwxQBBggFBFhAAAAsgACABQQFqIgNBAkEBEBEgACADNgIMCyAAKAIEIAFBAnRqIAI2AgAL4xcBAX9BjKUBJABBwA5BAEEAEA4kAUHwD0EIQQAQDiQCQecBQQJBCUEAEBAiAEEAQZAQQQBBARAOEBIgAEEBQbAQQQBBARAOEBIgAEECIwEQEiAAQQMjARASIABBBCMBEBIgAEEFIwEQEiAAQQYjARASIABBByMBEBIgAEEIIwEQEiAAQQkjARASIABBCkHgEEEBQQAQDhASIABBCyMBEBIgAEEMIwEQEiAAQQ0jARASIABBDiMBEBIgAEEPIwEQEiAAQRAjARASIABBESMBEBIgAEESIwEQEiAAQRMjARASIABBFEGAEUEFQQAQDhASIABBFSMBEBIgAEEWIwEQEiAAQRcjARASIABBGCMBEBIgAEEZIwEQEiAAQRojARASIABBGyMBEBIgAEEcIwEQEiAAQR0jARASIABBHkGwEUECQQAQDhASIABBH0HgEUECQQAQDhASIABBIEGQEkECQQAQDhASIABBIUHAEkECQQAQDhASIABBIiMBEBIgAEEjIwEQEiAAQSQjARASIABBJSMBEBIgAEEmIwEQEiAAQScjARASIABBKEHwEkEDQQEQDhASIABBKSMBEBIgAEEqIwEQEiAAQSsjARASIABBLCMBEBIgAEEtIwEQEiAAQS4jARASIABBLyMBEBIgAEEwIwEQEiAAQTEjARASIABBMkGQE0EEQQEQDhASIABBM0HAE0EEQQAQDhASIABBNEHwE0EEQQAQDhASIABBNUGgFEEEQQAQDhASIABBNkHQFEEEQQAQDhASIABBN0GAFUEEQQAQDhASIABBOEGwFUEEQQAQDhASIABBOUHgFUEEQQAQDhASIABBOkGQFkEEQQAQDhASIABBO0HAFkEEQQAQDhASIABBPEHwFkEEQQAQDhASIABBPUGgF0EEQQAQDhASIABBPkHQF0EE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QQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnZ603AwAgAEEANgIAIABBADYCCCAAC0cBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAHo3AwAgAEEANgIAIABBADYCCCAAC0kBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKdorTcDACAAQQA2AgAgAEEANgIIIAALSQEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp8CsNwMAIABBADYCACAAQQA2AgggAAtJAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnwaw3AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKdB//8Dca03AwAgAEEANgIAIABBADYCCCAAC4cBAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAiBEIIiEL/gfyH8J/A/wCDIARC/4H8h/CfwP8Ag0IIhoQiBEIQiEL//4OA8P8/gyAEQv//g4Dw/z+DQhCGhEIgijcDACAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFEEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRSBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEVARAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFgEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRaBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEVgRAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFMEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRXBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEWQRAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFUEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAFEEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAFIEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFQEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFMEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikD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QQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgiENwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAgzcDACAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIU3AwAgAEEANgIAIABBADYCCCAAC2ABAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCENwMAIABBADYCACAAQQA2AgggAAtjAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQn+FgzcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAEJ/hYQ3AwAgAEEANgIAIABBADYCCCAAC2MBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCFQn+FNwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCCHzENwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATUCCH7ENwMAIABBADYCACAAQQA2AgggAAtUAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNQIIQoCAgIAQhCACQQwgATUCACIEpyAEQg1aG0EDdGopAwB9xDcDACAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0Agh8NwMAIABBADYCACAAQQA2AgggAAtMAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCCH43AwAgAEEANgIAIABBADYCCCAAC0wBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAfTcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyACQQwgATUCBCIEpyAEQg1aG0EDdGopAwCnaqw3AwAgAEEANgIAIABBADYCCCAAC2oBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDAEKAgICAEHwgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp619xDcDACAAQQA2AgAgAEEANgIIIAALYQEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAH7ENwMAIABBADYCACAAQQA2AgggAAuGAQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIgMEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMApyADbqw3AwAFIAJBDCABNQIIIgSnIARCDVobQQN0akJ/NwMACyAAQQA2AgAgAEEANgIIIAALuAEBA34gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAxCEEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDAMQiBVAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCfzcDAAUgBEKAgICAeFEgBUJ/UXEEQCACQQwgATUCCCIFpyAFQg1aG0EDdGogBDcDAAUgAkEMIAE1AggiBqcgBkINWhtBA3RqIAQgBX83AwALCyAAQQA2AgAgAEEANgIIIAALjQECAX4BfyACQQwgATUCBCIEpyAEQg1aG0EDdGopAwCnIQMgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyIFBEAgAkEMIAE1AggiBKcgBEINWhtBA3RqIAMgBXCsNwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogA6w3AwALIABBADYCACAAQQA2AgggAAu8AQIBfgF/IAJBDCABNQIEIgSnIARCDVobQQN0aikDAKchAyACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIgUEQCADQYCAgIB4RiAFQX9GcQRAIAJBDCABNQIIIgSnIARCDVobQQN0akIANwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogA6wgBayBNwMACwUgAkEMIAE1AggiBKcgBEINWhtBA3RqIAOsNwMACyAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAHw3AwAgAEEANgIAIABBADYCCCAAC2ABAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwB9NwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAfjcDACAAQQA2AgAgAEEANgIIIAALmQEBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAUARAIAJBDCABNQIIIgSnIARCDVobQQN0akJ/NwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIA3AwALIABBADYCACAAQQA2AgggAAu7AQEDfiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAhBCACQQwgATUCACIFpyAFQg1aG0EDdGopAwAiBVAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCfzcDAAUgBEKAgICAgICAgIB/USAFQn9RcQRAIAJBDCABNQIIIgWnIAVCDVobQQN0aiAENwMABSACQQwgATUCCCIGpyAGQg1aG0EDdGogBCAFfzcDAAsLIABBADYCACAAQQA2AgggAAuwAQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwBQBEAgAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDADcDAAUgAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCCNwMACyAAQQA2AgAgAEEANgIIIAALuwEBA34gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIQQgAkEMIAE1AgAiBacgBUINWhtBA3RqKQMAIgVQBEAgAkEMIAE1AggiBacgBUINWhtBA3RqIAQ3AwAFIARCgICAgICAgICAf1EgBUJ/UXEEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCADcDAAUgAkEMIAE1AggiBqcgBkINWhtBA3RqIAQgBYE3AwALCyAAQQA2AgAgAEEANgIIIAAL2wIBCH4gAkEMIAE1AggiBKcgBEINWhtBA3RqAn4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIQQgAkEMIAE1AgQiBacgBUINWhtBA3RqKQMAIgVCAFMEfyAFQn+FQgF8IQVBAQVBAAshASAEQgBTBH8gBEJ/hUIBfCEEIAFFBSABCwRAIARCIIgiCCAFQv////8PgyIJfiEGIAVCIIgiByAEQv////8PgyIKfiELIAQgBX5QrSAHIAh+IAZCIIh8IAtCIIh8IAZC/////w+DIAkgCn5CIIh8IAtC/////w+DfEIgiHxCf4V8DAELIARCIIgiBiAFQv////8PgyIHfiEIIAVCIIgiBSAEQv////8PgyIEfiEJIAUgBn4gCEIgiHwgCUIgiHwgCEL/////D4MgBCAHfkIgiHwgCUL/////D4N8QiCIfAs3AwAgAEEANgIAIABBADYCCCAAC7oBAQZ+IAJBDCABNQIEIgSnIARCDVobQQN0aikDACIFQiCIIQQgBUL/////D4MiBSACQQwgATUCACIGpyAGQg1aG0EDdGopAwAiBkIgiCIHfiEIIAJBDCABNQIIIgmnIAlCDVobQQN0aiAEIAd+IAhCIIh8IAZC/////w+DIgYgBH4iBEIgiHwgCEL/////D4MgBSAGfkIgiHwgBEL/////D4N8QiCIfDcDACAAQQA2AgAgAEEANgIIIAALtwIBCH4gAkEMIAE1AggiBKcgBEINWhtBA3RqAn4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIQYgAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIgRCAFMEQCAEQn+FQgF8IgdC/////w+DIgggBkIgiCIJfiEEIAdCIIgiBSAGQv////8PgyIKfiELIAYgB35QrSAFIAl+IARCIIh8IAtCIIh8IARC/////w+DIAggCn5CIIh8IAtC/////w+DfEIgiHxCf4V8DAELIARC/////w+DIgUgBkIgiCIHfiEIIARCIIgiBCAGQv////8PgyIGfiEJIAQgB34gCEIgiHwgCUIgiHwgCEL/////D4MgBSAGfkIgiHwgCUL/////D4N8QiCIfAs3AwAgAEEANgIAIABBADYCCCAAC2kBAn4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACIEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDACIFIAQgBVUbNwMAIABBADYCACAAQQA2AgggAAtpAQJ+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAiBCACQQwgATUCACIFpyAFQg1aG0EDdGopAwAiBSAEIAVWGzcDACAAQQA2AgAgAEEANgIIIAALaQECfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIgQgAkEMIAE1AgAiBacgBUINWhtBA3RqKQMAIgUgBCAFUxs3AwAgAEEANgIAIABBADYCCCAAC2kBAn4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACIEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDACIFIAQgBVQbNwMAIABBADYCACAAQQA2AgggAAsSACAAQQM2AgAgAEEANgIMIAALEgAgAEEANgIAIABBADYCCCAACyAAIAEoAgAhASAAQQM2AgAgAEEDNgIMIAAgATYCECAAC6IBAQJ/IAAoAgAiASgCDCICQQBKBEAgAkEATARAQYDdAEGwxQBBjwJBEhAAAAsgASgCBCACQQFrIgBBAnRqKAIAIAEgADYCDA8LIAAoAghBDHQiASAAKAIERgRAQbDdABABCyABQYCAgIACSQR/QYAgEBQFQQALIQEgACAAKAIIQQFqNgIIIAAoAgghAEEIQQwQDyICIAA2AgAgAiABNgIEIAILMAEBfyAAQfz///8DSwRAQeDFAEGQxgBBNEErEAAACyAAQQEQDyIBQQAgAPwLACABC5YEAQl/IAAoAgAgASIDQb3cypV8bEG1z9myAWpBEXdBr9bTvgJsIgFBD3YgAXNB95Svr3hsIgFBDXYgAXNBvdzKlXxsIgFBEHYgAXMiCCAAKAIEcUECdGooAgAhAQJAA0AgAQRAIAEoAggiBEEBcQR/QQAFIAEoAgAgA0YLDQIgBEF+cSEBDAELC0EAIQELIAEEQCABIAI2AgQFIAAoAgwiASAAKAIQRgRAIAAoAhQgAUEDbEEEbUgEfyAAKAIEBSAAKAIEQQF0QQFyCyIGQQFqIgFBAnQQdCEHIAFBA3RBA20iCUEMbBB0IQQgACgCCCIFIAAoAhBBDGxqIQogBCEBA0AgBSAKRwRAIAUoAghBAXFFBEAgASAFKAIAIgs2AgAgASAFKAIENgIEIAEgByALQb3cypV8bEG1z9myAWpBEXdBr9bTvgJsIgsgC0EPdnNB95Svr3hsIgsgC0ENdnNBvdzKlXxsIgsgC0EQdnMgBnFBAnRqIgsoAgA2AgggCyABNgIAIAFBDGohAQsgBUEMaiEFDAELCyAAIAc2AgAgACAGNgIEIAAgBDYCCCAAIAk2AgwgACAAKAIUNgIQCyAAKAIIIAAgACgCECIEQQFqNgIQIARBDGxqIgEgAzYCACABIAI2AgQgACAAKAIUQQFqNgIUIAEgACgCACAIIAAoAgRxQQJ0aiIAKAIANgIIIAAgATYCAAsLsAICBn8CfgJ+IwghBCADKAIUIQUgAkEMIAE1AgAiCqcgCkINWhtBA3RqKQMApyIGRQRAIARBADoAACAFrQwBCyADNQIUIAatfCIKQoCAgIAQWgRAIARBAToAACAFrQwBCyADIAo+AhQgBa0gAygCACIEIApCAX1CDIenIghGDQAaIARBAWohBANAIAQgCEwEQCADKAIMEHMhBiADKAIQQQhBCxAPIglBAjYCACAJIAY2AgQgBCAJEHUgBEEBaiEEDAELCyADIAg2AgAgBa0LIQojCC0AAARAIwgiAS0AAARAIABBAzYCACAAQQJBASABLQABGzYCDCAAIAEoAgQ2AhALIAAPCyACQQwgATUCBCILpyALQg1aG0EDdGogCjcDACAAQQA2AgAgAEEANgIIIAALRgEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMANwMAIABBADYCACAAQQA2AgggAAtPAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDAFAEQCACQQwgATUCBCIEpyAEQg1aG0EDdGogATQCCDcDAAsgAEEANgIAIABBADYCCCAAC1EBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQgBSBEAgAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0Agg3AwALIABBADYCACAAQQA2AgggAAtjAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDAFAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMANwMACyAAQQA2AgAgAEEANgIIIAALZQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwBCAFIEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMANwMACyAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgiKNwMAIABBADYCACAAQQA2AgggAAtMAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIo3AwAgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKcgASgCCHisNwMAIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABKAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKd4rDcDACAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIk3AwAgAEEANgIAIABBADYCCCAAC2MBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDAKcgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp3esNwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAijcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMApyACQQwgATUCACIEpyAEQg1aG0EDdGopAwCneKw3AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVK03AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIU603AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVq03AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVa03AwAgAEEANgIAIABBADYCCCAAC2EBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwBUrTcDACAAQQA2AgAgAEEANgIIIAALYQEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFOtNwMAIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIAEoAgh0rDcDACAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyABKAIIdqw3AwAgAEEANgIAIABBADYCCCAAC1EBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAMQgASgCCEEfca2HNwMAIABBADYCACAAQQA2AgggAAtRAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABKAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAEIfg6d0rDcDACAAQQA2AgAgAEEANgIIIAALUQEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogASgCCCACQQwgATUCACIEpyAEQg1aG0EDdGopAwBCH4Ondqw3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQh+Dh8Q3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYY3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYg3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYc3AwAgAEEANgIAIABBADYCCCAAC0wBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAhjcDACAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogATQCCCACQQwgATUCACIEpyAEQg1aG0EDdGopAwCINwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIfENwMAIABBADYCACAAQQA2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IAAgARDBASAAKAIAIAAoAgQiAiABIAJqELkBIAAgACgCBCABajYCBAtdAQN/QQhBKBAPIgEgADYCACABQQA2AgQgASABEMIBEMMBIQIgASgCACABKAIEQQEkBxC6ASEAIAEgASgCBCAAKAIIajYCBEEIQScQDyIBIAA2AgAgASACNgIEIAELSAECfyAAQQMQwQEgACgCBCIBIAAoAgAoAgQiAmotAAAgAUEBaiACai0AAEEIdHIgAUECaiACai0AAEEQdHIgACABQQNqNgIEC1cBAn8gAEEEEMEBIAAoAgQiASAAKAIAKAIEIgJqLQAAIAFBAWogAmotAABBCHRyIAFBAmogAmotAABBEHRyIAFBA2ogAmotAABBGHRyIAAgAUEEajYCBAsoAQJ/IABBARDBASAAKAIEIgEgACgCACgCBGotAAAgACABQQFqNgIECzQBAX8gAEH///8/SwRAQeDFAEHAhgFBM0E8EAAACyAAQQN0IgBBDhAPIgFBACAA/AsAIAELxAYCDH8DfkEIQSgQDyICIAA2AgAgAkEANgIEIAIQwgEhACACEMcBIQYgAhDCASEHIAIgACAGbBDDASEIIAIgBxDDASIAKAIIELUBIQMDQCABIAAoAghIBEAgAyABIAEgACgCBGotAAAQtgEgAUEBaiEBDAELCyACIAdBB2pBA3YQwwEhCkEEQRsQDyIJQQA2AgACQCAHQf////8ASw0AIAdBAnQiAEEcEA8iAUEAIAD8CwAgCSABNgIAIAooAghBAWshAQNAIAFBAE4EQCABIAooAgRqLQAAIQIgAUEDdCELQQchAANAIABBAE4EQCACQYABcSEMIAJBAXQhAiAAIAtqIgUgB0gEQCAJKAIAIAVBAnRqQRlBACAEQQFqIAwbIgQgBEEZTxs2AgALIABBAWshAAwBCwsgAUEBayEBDAELC0EEQR0QDyICQQA2AgAgBkH/AXEiAAR/IAgoAgggAG0FQQALEMgBIQRBACEAA0AgACAIKAIISARAQgAhDSAGQQFrQf8BcSEBA0AgAUEATgRAQn8gDUIIhiIOIAgoAgQgACABamoxAAB8Ig8gDSAPViANIA5WchshDSABQQFrIQEMAQsLIAQgACAGQf8BcSIBbUEDdGogDTcDACAAIAFqIQAMAQsLIAIgBDYCAEEAIQFBBEEeEA8iAEEANgIA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WhtBA3RqKQMANwMIIAAgBUEMIAI1AggiBqcgBkINWhtBA3RqKQMANwMQDAYLQYCHASABELIBEK8BQfCfAUHQAkEHEAAACyAAIAI0AgA3AwAMBAsgACACNAIENwMIDAMLIAAgBUEMIAI1AgAiBqcgBkINWhtBA3RqKQMANwMAIAAgAjQCBDcDCAwBCyAAIAVBDCACNQIAIganIAZCDVobQQN0aikDADcDACAAIAVBDCACNQIEIganIAZCDVobQQN0aikDADcDCAsgACACNAIINwMQCyAAC7UDAQl/QQBBAkExQYCjARAQIQQgACgCECICKAIIIQYgAigCECECQRBBJBAPIgVBADYCACAFQQA2AgQgBUEANgIIIAVBADYCDCACQf////8ASwRAQeDFAEGwxQBBxgBBPBAAAAtBCCACIAJBCE0bQQJ0IgdBARAPIghBACAH/AsAIAUgCDYCACAFIAg2AgQgBSAHNgIIIAUgAjYCDANAIAIgA0oEQCAGIANBDGxqIgcoAghBAXFFBEAgBSABIAcoAgAQEiABQQFqIQELIANBAWohAwwBCwsgBSABQQJBABARIAUgATYCDEEAIQFBACEDA0AgAyAFKAIMSARAIAAoAhAgBSgCBCADQQJ0aigCACIHEDYiCCgCBCgCBARAQQAhAgNAIAIgCCgCBBA4KAIISARAIAIgCCgCBBA4KAIEai0AACIGBEAgAQRAIAEoAgQgBhC7AQUQ1wEiASAHQQx0IAJqNgIAQQFBAEEGQQAQECIJQQAgBhC2ASABIAk2AgQLBSABBEAgBCABENIBQQAhAQsLIAJBAWohAgwBCwsLIANBAWohAwwBCwsgAQRAIAQgARDSAQsgBAvZCAINfwF+QQEhAhCuASEJA0ACQCACRQRAIAEEQEGUnAEgACgCBCICIAJBFGsoAhBBA3YQ7QE2AgBBkJwBQYycASgCAEECdkHw9AAQtAEQAQsgAQRAQbScASAAKAIEQdCcARDvASICKAIEIAIoAgxBgIYBELQBNgIAQbCcAUGsnAEoAgBBAnZB8PQAELQBEAELIAEEQEHwnAEgACgCFBCyARCvARABCyABBEBBsJ0BIAAoAhhBChCzARCvARABCwwBCyABBEBB4J0BIAAoAhBBChCzARCvARABCyABBEACQCAAKAIMIgJBCGsoAgBBLEYEQCACKQMA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LABBmBcLGQIAAAASAAAAUwBUAE8AUgBFAF8AVQAzADIAQbwXCwEsAEHIFwsZAgAAABIAAABTAFQATwBSAEUAXwBVADYANABB7BcLATwAQfgXCycCAAAAIAAAAFMAVABPAFIARQBfAEkATQBNAF8ASQBOAEQAXwBVADgAQawYCwE8AEG4GAspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQAxADYAQewYCwE8AEH4GAspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQAzADIAQawZCwE8AEG4GQspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQA2ADQAQewZCwEsAEH4GQshAgAAABoAAABMAE8AQQBEAF8ASQBNAE0AXwBKAFUATQBQAEGcGgsBLABBqBoLIQIAAAAaAAAAQgBSAEEATgBDAEgAXwBFAFEAXwBJAE0ATQBBzBoLASwAQdgaCyECAAAAGgAAAEIAUgBBAE4AQwBIAF8ATgBFAF8ASQBNAE0AQfwaCwE8AEGIGwslAgAAAB4AAABCAFIAQQBOAEMASABfAEwAVABfAFUAXwBJAE0ATQBBvBsLATwAQcgbCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ATABFAF8AVQBfAEkATQBNAEH8GwsBPABBiBwLJQIAAAAeAAAAQgBSAEEATgBDAEgAXwBHAEUAXwBVAF8ASQBNAE0AQbwcCwE8AEHIHAslAgAAAB4AAABCAFIAQQBOAEMASABfAEcAVABfAFUAXwBJAE0ATQBB/BwLATwAQYgdCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ATABUAF8AUwBfAEkATQBNAEG8HQsBPABByB0LJQIAAAAeAAAAQgBSAEEATgBDAEgAXwBMAEUAXwBTAF8ASQBNAE0AQfwdCwE8AEGIHgslAgAAAB4AAABCAFIAQQBOAEMASABfAEcARQBfAFMAXwBJAE0ATQBBvB4LATwAQcgeCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ARwBUAF8AUwBfAEkATQBNAEH8HgsBLABBiB8LFwIAAAAQAAAATQBPAFYARQBfAFIARQBHAEGsHwsBPABBuB8LKQIAAAAiAAAAQwBPAFUATgBUAF8AUwBFAFQAXwBCAEkAVABTAF8ANgA0AEHsHwsBPABB+B8LKQIAAAAiAAAAQwBPAFUATgBUAF8AUwBFAFQAXwBCAEkAVABTAF8AMwAyAEGsIAsBPABBuCALLwIAAAAoAAAATABFAEEARABJAE4ARwBfAFoARQBSAE8AXwBCAEkAVABTAF8ANgA0AEHsIAsBPABB+CALLwIAAAAoAAAATABFAEEARABJAE4ARwBfAFoARQBSAE8AXwBCAEkAVABTAF8AMwAyAEGsIQsBPABBuCELMQIAAAAqAAAAVABSAEEASQBMAEkATgBHAF8AWgBFAFIATwBfAEIASQBUAFMAXwA2ADQAQewhCwE8AEH4IQsxAgAAACoAAABUAFIAQQBJAEwASQBOAEcAXwBaAEUAUgBPAF8AQgBJAFQAUwBfADMAMgBBrCILASwAQbgiCyECAAAAGgAAAFMASQBHAE4AXwBFAFgAVABFAE4ARABfADgAQdwiCwEsAEHoIgsjAgAAABwAAABTAEkARwBOAF8ARQBYAFQARQBOAEQAXwAxADYAQYwjCwEsAEGYIwsjAgAAABwAAABaAEUAUgBPAF8ARQBYAFQARQBOAEQAXwAxADYAQbwjCwEsAEHIIwshAgAAABoAAABSAEUAVgBFAFIAUwBFAF8AQgBZAFQARQBTAEHsIwsBLABB+CMLHwIAAAAYAAAAUwBUAE8AUgBFAF8ASQBOAEQAXwBVADgAQZwkCwEsAEGoJAshAgAAABoAAABTAFQATwBSAEUAXwBJAE4ARABfAFUAMQA2AEHMJAsBLABB2CQLIQIAAAAaAAAAUwBUAE8AUgBFAF8ASQBOAEQAXwBVADMAMgBB/CQLASwAQYglCyECAAAAGgAAAFMAVABPAFIARQBfAEkATgBEAF8AVQA2ADQAQawlCwEsAEG4JQsdAgAAABYAAABMAE8AQQBEAF8ASQBOAEQAXwBVADgAQdwlCwEsAEHoJQsdAgAAABYAAABMAE8AQQBEAF8ASQBOAEQAXwBJADgAQYwmCwEsAEGYJgsfAgAAABgAAABMAE8AQQBEAF8ASQBOAEQAXwBVADEANgBBvCYLASwAQcgmCx8CAAAAGAAAAEwATwBBAEQAXwBJAE4ARABfAEkAMQA2AEHsJgsBLABB+CYLHwIAAAAYAAAATABPAEEARABfAEkATgBEAF8AVQAzADIAQZwnCwEsAEGoJwsfAgAAABgAAABMAE8AQQBEAF8ASQBOAEQAXwBJADMAMgBBzCcLASwAQdgnCx8CAAAAGAAAAEwATwBBAEQAXwBJAE4ARABfAFUANgA0AEH8JwsBLABBiCgLGwIAAAAUAAAAQQBEAEQAXwBJAE0ATQBfADMAMgBBrCgLASwAQbgoCxUCAAAADgAAAEEATgBEAF8ASQBNAE0AQdwoCwEsAEHoKAsVAgAAAA4AAABYAE8AUgBfAEkATQBNAEGMKQsBHABBmCkLEwIAAAAMAAAATwBSAF8ASQBNAE0AQawpCwEsAEG4KQsbAgAAABQAAABNAFUATABfAEkATQBNAF8AMwAyAEHcKQsBLABB6CkLHwIAAAAYAAAAUwBFAFQAXwBMAFQAXwBVAF8ASQBNAE0AQYwqCwEsAEGYKgsfAgAAABgAAABTAEUAVABfAEwAVABfAFMAXwBJAE0ATQBBvCoLASwAQcgqCyECAAAAGgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwAzADIAQewqCwEsAEH4KgshAgAAABoAAABTAEgATABPAF8AUgBfAEkATQBNAF8AMwAyAEGcKwsBLABBqCsLIQIAAAAaAAAAUwBIAEEAUgBfAFIAXwBJAE0ATQBfADMAMgBBzCsLASwAQdgrCyMCAAAAHAAAAE4ARQBHAF8AQQBEAEQAXwBJAE0ATQBfADMAMgBB/CsLASwAQYgsCx8CAAAAGAAAAFMARQBUAF8ARwBUAF8AVQBfAEkATQBNAEGsLAsBLABBuCwLHwIAAAAYAAAAUwBFAFQAXwBHAFQAXwBTAF8ASQBNAE0AQdwsCwE8AEHoLAspAgAAACIAAABTAEgATABPAF8ATABfAEkATQBNAF8AQQBMAFQAXwAzADIAQZwtCwE8AEGoLQspAgAAACIAAABTAEgATABPAF8AUgBfAEkATQBNAF8AQQBMAFQAXwAzADIAQdwtCwE8AEHoLQspAgAAACIAAABTAEgAQQBSAF8AUgBfAEkATQBNAF8AQQBMAFQAXwAzADIAQZwuCwEsAEGoLgsdAgAAABYAAABDAE0ATwBWAF8ASQBaAF8ASQBNAE0AQcwuCwEsAEHYLgsdAgAAABYAAABDAE0ATwBWAF8ATgBaAF8ASQBNAE0AQfwuCwEsAEGILwsbAgAAABQAAABBAEQARABfAEkATQBNAF8ANgA0AEGsLwsBLABBuC8LGwIAAAAUAAAATQBVAEwAXwBJAE0ATQBfADYANABB3C8LASwAQegvCyECAAAAGgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwA2ADQAQYwwCwEsAEGYMAshAgAAABoAAABTAEgATABPAF8AUgBfAEkATQBNAF8ANgA0AEG8MAsBLABByDALIQIAAAAaAAAAUwBIAEEAUgBfAFIAXwBJAE0ATQBfADYANABB7DALASwAQfgwCyMCAAAAHAAAAE4ARQBHAF8AQQBEAEQAXwBJAE0ATQBfADYANABBnDELATwAQagxCykCAAAAIgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwBBAEwAVABfADYANABB3DELATwAQegxCykCAAAAIgAAAFMASABMAE8AXwBSAF8ASQBNAE0AXwBBAEwAVABfADYANABBnDILATwAQagyCykCAAAAIgAAAFMASABBAFIAXwBSAF8ASQBNAE0AXwBBAEwAVABfADYANABB3DILASwAQegyCx8CAAAAGAAAAFIATwBUAF8AUgBfADYANABfAEkATQBNAEGMMwsBPABBmDMLJwIAAAAgAAAAUgBPAFQAXwBSAF8ANgA0AF8ASQBNAE0AXwBBAEwAVABBzDMLASwAQdgzCx8CAAAAGAAAAFIATwBUAF8AUgBfADMAMgBfAEkATQBNAEH8MwsBPABBiDQLJwIAAAAgAAAAUgBPAFQAXwBSAF8AMwAyAF8ASQBNAE0AXwBBAEwAVABBvDQLASwAQcg0CxkCAAAAEgAAAEIAUgBBAE4AQwBIAF8ARQBRAEHsNAsBLABB+DQLGQIAAAASAAAAQgBSAEEATgBDAEgAXwBOAEUAQZw1CwEsAEGoNQsdAgAAABYAAABCAFIAQQBOAEMASABfAEwAVABfAFUAQcw1CwEsAEHYNQsdAgAAABYAAABCAFIAQQBOAEMASABfAEwAVABfAFMAQfw1CwEsAEGINgsdAgAAABYAAABCAFIAQQBOAEMASABfAEcARQBfAFUAQaw2CwEsAEG4NgsdAgAAABYAAABCAFIAQQBOAEMASABfAEcARQBfAFMAQdw2CwE8AEHoNgspAgAAACIAAABMAE8AQQBEAF8ASQBNAE0AXwBKAFUATQBQAF8ASQBOAEQAQZw3CwEcAEGoNwsTAgAAAAwAAABBAEQARABfADMAMgBBvDcLARwAQcg3CxMCAAAADAAAAFMAVQBCAF8AMwAyAEHcNwsBHABB6DcLEwIAAAAMAAAATQBVAEwAXwAzADIAQfw3CwEsAEGIOAsXAgAAABAAAABEAEkAVgBfAFUAXwAzADIAQaw4CwEsAEG4OAsXAgAAABAAAABEAEkAVgBfAFMAXwAzADIAQdw4CwEsAEHoOAsXAgAAABAAAABSAEUATQBfAFUAXwAzADIAQYw5CwEsAEGYOQsXAgAAABAAAABSAEUATQBfAFMAXwAzADIAQbw5CwEsAEHIOQsZAgAAABIAAABTAEgATABPAF8ATABfADMAMgBB7DkLASwAQfg5CxkCAAAAEgAAAFMASABMAE8AXwBSAF8AMwAyAEGcOgsBLABBqDoLGQIAAAASAAAAUwBIAEEAUgBfAFIAXwAzADIAQcw6CwEcAEHYOgsTAgAAAAwAAABBAEQARABfADYANABB7DoLARwAQfg6CxMCAAAADAAAAFMAVQBCAF8ANgA0AEGMOwsBHABBmDsLEwIAAAAMAAAATQBVAEwAXwA2ADQAQaw7CwEsAEG4OwsXAgAAABAAAABEAEkAVgBfAFUAXwA2ADQAQdw7CwEsAEHoOwsXAgAAABAAAABEAEkAVgBfAFMAXwA2ADQAQYw8CwEsAEGYPAsXAgAAABAAAABSAEUATQBfAFUAXwA2ADQAQbw8CwEsAEHIPAsXAgAAABAAAABSAEUATQBfAFMAXwA2ADQAQew8CwEsAEH4PAsZAgAAABIAAABTAEgATABPAF8ATABfADYANABBnD0LASwAQag9CxkCAAAAEgAAAFMASABMAE8AXwBSAF8ANgA0AEHMPQsBLABB2D0LGQIAAAASAAAAUwBIAEEAUgBfAFIAXwA2ADQAQfw9CwEcAEGIPgsNAgAAAAYAAABBAE4ARABBnD4LARwAQag+Cw0CAAAABgAAAFgATwBSAEG8PgsBHABByD4LCwIAAAAEAAAATwBSAEHcPgsBLABB6D4LIQIAAAAaAAAATQBVAEwAXwBVAFAAUABFAFIAXwBTAF8AUwBBjD8LASwAQZg/CyECAAAAGgAAAE0AVQBMAF8AVQBQAFAARQBSAF8AVQBfAFUAQbw/CwEsAEHIPwshAgAAABoAAABNAFUATABfAFUAUABQAEUAUgBfAFMAXwBVAEHsPwsBLABB+D8LFwIAAAAQAAAAUwBFAFQAXwBMAFQAXwBVAEGcwAALASwAQajAAAsXAgAAABAAAABTAEUAVABfAEwAVABfAFMAQczAAAsBLABB2MAACxUCAAAADgAAAEMATQBPAFYAXwBJAFoAQfzAAAsBLABBiMEACxUCAAAADgAAAEMATQBPAFYAXwBOAFoAQazBAAsBLABBuMEACxcCAAAAEAAAAFIATwBUAF8ATABfADYANABB3MEACwEsAEHowQALFwIAAAAQAAAAUgBPAFQAXwBMAF8AMwAyAEGMwgALASwAQZjCAAsXAgAAABAAAABSAE8AVABfAFIAXwA2ADQAQbzCAAsBLABByMIACxcCAAAAEAAAAFIATwBUAF8AUgBfADMAMgBB7MIACwEsAEH4wgALFQIAAAAOAAAAQQBOAEQAXwBJAE4AVgBBnMMACwEcAEGowwALEwIAAAAMAAAATwBSAF8ASQBOAFYAQbzDAAsBHABByMMACw8CAAAACAAAAFgATgBPAFIAQdzDAAsBHABB6MMACw0CAAAABgAAAE0AQQBYAEH8wwALARwAQYjEAAsRAgAAAAoAAABNAEEAWABfAFUAQZzEAAsBHABBqMQACw0CAAAABgAAAE0ASQBOAEG8xAALARwAQcjEAAsRAgAAAAoAAABNAEkATgBfAFUAQdzEAAsBPABB6MQACysCAAAAJAAAAEkAbgBkAGUAeAAgAG8AdQB0ACAAbwBmACAAcgBhAG4AZwBlAEGcxQALASwAQajFAAshAgAAABoAAAB+AGwAaQBiAC8AYQByAHIAYQB5AC4AdABzAEHMxQALASwAQdjFAAsjAgAAABwAAABJAG4AdgBhAGwAaQBkACAAbABlAG4AZwB0AGgAQfzFAAsBPABBiMYACy0CAAAAJgAAAH4AbABpAGIALwBhAHIAcgBhAHkAYgB1AGYAZgBlAHIALgB0AHMAQbzGAAsBHABByMYACwkVAAAACAAAAA4AQdzGAAsBHABB6MYACwkVAAAACAAAAA8AQfzGAAsBHABBiMcACwkVAAAACAAAABAAQZzHAAsBHABBqMcACwkVAAAACAAAABEAQbzHAAsBHABByMcACwkVAAAACAAAABIAQdzHAAsBHABB6McACwkVAAAACAAAABMAQfzHAAsBHABBiMgACwkVAAAACAAAABQAQZzIAAsBHABBqMgACwkVAAAACAAAABUAQbzIAAsBHABByMgACwkVAAAACAAAABYAQdzIAAsBHABB6MgACwkVAAAACAAAABcAQfzIAAsBHABBiMkACwkVAAAACAAAABgAQZzJAAsBHABBqMkACwkVAAAACAAAABkAQbzJAAsBHABByMkACwkVAAAACAAAABoAQdzJAAsBHABB6MkACwkVAAAACAAAABsAQfzJAAsBHABBiMoACwkVAAAACAAAABwAQZzKAAsBHABBqMoACwkVAAAACAAAAB0AQbzKAAsBHABByMoACwkVAAAACAAAAB4AQdzKAAsBHABB6MoACwkVAAAACAAAAB8AQfzKAAsBHABBiMsACwkVAAAACAAAACAAQZzLAAsBHABBqMsACwkVAAAACAAAACEAQbzLAAsBHABByMsACwkVAAAACAAAACIAQdzLAAsBHABB6MsACwkVAAAACAAAACMAQfzLAAsBHABBiMwACwkVAAAACAAAACQAQZzMAAsBHABBqMwACwkVAAAACAAAACUAQbzMAAsBHABByMwACwkVAAAACAAAACYAQdzMAAsBHABB6MwACwkVAAAACAAAACcAQfzMAAsBHABBiM0ACwkVAAAACAAAACgAQZzNAAsBHABBqM0ACwkVAAAACAAAACkAQbzNAAsBHABByM0ACwkVAAAACAAAACoAQdzNAAsBHABB6M0ACwkVAAAACAAAACsAQfzNAAsBHABBiM4ACwkVAAAACAAAACwAQZzOAAsBHABBqM4ACwkVAAAACAAAAC0AQbzOAAsBPABByM4ACysCAAAAJAAAAEsAZQB5ACAAZABvAGUAcwAgAG4AbwB0ACAAZQB4AGkAcwB0AEH8zgALASwAQYjPAAsdAgAAABYAAAB+AGwAaQBiAC8AbQBhAHAALgB0AHMAQazPAAsBHABBuM8ACwkVAAAACAAAAC4AQczPAAsBHABB2M8ACwkVAAAACAAAAC8AQezPAAsBHABB+M8ACwkVAAAACAAAADAAQYzQAAsBHABBmNAACwkVAAAACAAAADEAQazQAAsBHABBuNAACwkVAAAACAAAADIAQczQAAsBHABB2NAACwkVAAAACAAAADMAQezQAAsBHABB+NAACwkVAAAACAAAADQAQYzRAAsBHABBmNEACwkVAAAACAAAADUAQazRAAsBHABBuNEACwkVAAAACAAAADYAQczRAAsBHABB2NEACwkVAAAACAAAADcAQezRAAsBHABB+NEACwkVAAAACAAAADgAQYzSAAsBHABBmNIACwkVAAAACAAAADkAQazSAAsBHABBuNIACwkVAAAACAAAADoAQczSAAsBHABB2NIACwkVAAAACAAAADsAQezSAAsBHABB+NIACwkVAAAACAAAADwAQYzTAAsBHABBmNMACwkVAAAACAAAAD0AQazTAAsBHABBuNMACwkVAAAACAAAAD4AQczTAAsBHABB2NMACwkVAAAACAAAAD8AQezTAAsBHABB+NMACwkVAAAACAAAAEAAQYzUAAsBHABBmNQACwkVAAAACAAAAEEAQazUAAsBHABBuNQACwkVAAAACAAAAEIAQczUAAsBHABB2NQACwkVAAAACAAAAEMAQezUAAsBHABB+NQACwkVAAAACAAAAEQAQYzVAAsBHABBmNUACwkVAAAACAAAAEUAQazVAAsBHABBuNUACwkVAAAACAAAAEYAQczVAAsBHABB2NUACwkVAAAACAAAAEcAQezVAAsBHABB+NUACwkVAAAACAAAAEgAQYzWAAsBHABBmNYACwkVAAAACAAAAEkAQazWAAsBHABBuNYACwkVAAAACAAAAEoAQczWAAsBHABB2NYACwkVAAAACAAAAEsAQezWAAsBHABB+NYACwkVAAAACAAAAEwAQYzXAAsBHABBmNcACwkVAAAACAAAAE0AQazXAAsBHABBuNcACwkVAAAACAAAAE4AQczXAAsBHABB2NcACwkVAAAACAAAAE8AQezXAAsBHABB+NcACwkVAAAACAAAAFAAQYzYAAsBHABBmNgACwkVAAAACAAAAFEAQazYAAsBHABBuNgACwkVAAAACAAAAFIAQczYAAsBHABB2NgACwkVAAAACAAAAFMAQezYAAsBHABB+NgACwkVAAAACAAAAFQAQYzZAAsBHABBmNkACwkVAAAACAAAAFUAQazZAAsBHABBuNkACwkVAAAACAAAAFYAQczZAAsBHABB2NkACwkVAAAACAAAAFcAQezZAAsBHABB+NkACwkVAAAACAAAAFgAQYzaAAsBHABBmNoACwkVAAAACAAAAFkAQazaAAsBHABBuNoACwkVAAAACAAAAFoAQczaAAsBHABB2NoACwkVAAAACAAAAFsAQezaAAsBHABB+NoACwkVAAAACAAAAFwAQYzbAAsBHABBmNsACwkVAAAACAAAAF0AQazbAAsBHABBuNsACwkVAAAACAAAAF4AQczbAAsBHABB2NsACwkVAAAACAAAAF8AQezbAAsBHABB+NsACwkVAAAACAAAAGAAQYzcAAsBHABBmNwACwkVAAAACAAAAGEAQazcAAsBHABBuNwACwkVAAAACAAAAGIAQczcAAsBHABB2NwACwkVAAAACAAAAGMAQezcAAsBLABB+NwACyMCAAAAHAAAAEEAcgByAGEAeQAgAGkAcwAgAGUAbQBwAHQAeQBBnN0ACwFcAEGo3QALUwIAAABMAAAAVwBhAHIAbgBpAG4AZwA6ACAAUgB1AG4AIABvAHUAdAAgAG8AZgAgAHAAYQBnAGUAcwAhACAAQQBsAGwAbwBjAGEAdABpAG4AZwAuAEH83QALARwAQYjeAAsJFQAAAAgAAABkAEGc3gALARwAQajeAAsJFQAAAAgAAABlAEG83gALARwAQcjeAAsJFQAAAAgAAABmAEHc3gALARwAQejeAAsJFQAAAAgAAABnAEH83gALARwAQYjfAAsJFQAAAAgAAABoAEGc3wALARwAQajfAAsJFQAAAAgAAABpAEG83wALARwAQcjfAAsJFQAAAAgAAABqAEHc3wALARwAQejfAAsJFQAAAAgAAABrAEH83wALARwAQYjgAAsJFQAAAAgAAABsAEGc4AALARwAQajgAAsJFQAAAAgAAABtAEG84AALARwAQcjgAAsJFQAAAAgAAABuAEHc4AALARwAQejgAAsJFQAAAAgAAABvAEH84AALARwAQYjhAAsJFQAAAAgAAABwAEGc4QALARwAQajhAAsJFQAAAAgAAABxAEG84QALARwAQcjhAAsJFQAAAAgAAAByAEHc4QALARwAQejhAAsJFQAAAAgAAABzAEH84QALARwAQYjiAAsJFQAAAAgAAAB0AEGc4gALARwAQajiAAsJFQAAAAgAAAB1AEG84gALARwAQcjiAAsJFQAAAAgAAAB2AEHc4gALARwAQejiAAsJFQAAAAgAAAB3AEH84gALARwAQYjjAAsJFQAAAAgAAAB4AEGc4wALARwAQajjAAsJFQAAAAgAAAB5AEG84wALARwAQcjjAAsJFQAAAAgAAAB6AEHc4wALARwAQejjAAsJFQAAAAgAAAB7AEH84wALARwAQYjkAAsJFQAAAAgAAAB8AEGc5AALARwAQajkAAsJFQAAAAgAAAB9AEG85AALARwAQcjkAAsJFQAAAAgAAAB+AEHc5AALARwAQejkAAsJFQAAAAgAAAB/AEH85AALARwAQYjlAAsJFQAAAAgAAACAAEGc5QALARwAQajlAAsJFQAAAAgAAACBAEG85QALARwAQcjlAAsJFQAAAAgAAACCAEHc5QALARwAQejlAAsJFQAAAAgAAACDAEH85QALARwAQYjmAAsJFQAAAAgAAACEAEGc5gALARwAQajmAAsJFQAAAAgAAACFAEG85gALARwAQcjmAAsJFQAAAAgAAACGAEHc5gALARwAQejmAAsJFQAAAAgAAACHAEH85gALARwAQYjnAAsJFQAAAAgAAACIAEGc5wALARwAQajnAAsJFQAAAAgAAACJAEG85wALARwAQcjnAAsJFQAAAAgAAACKAEHc5wALARwAQejnAAsJFQAAAAgAAACLAEH85wALARwAQYjoAAsJFQAAAAgAAACMAEGc6AALARwAQajoAAsJFQAAAAgAAACNAEG86AALARwAQcjoAAsJFQAAAAgAAACOAEHc6AALARwAQejoAAsJFQAAAAgAAACPAEH86AALARwAQYjpAAsJFQAAAAgAAACQAEGc6QALARwAQajpAAsJFQAAAAgAAACRAEG86QALARwAQcjpAAsJFQAAAAgAAACSAEHc6QALARwAQejpAAsJFQAAAAgAAACTAEH86QALARwAQYjqAAsJFQAAAAgAAACUAEGc6gALARwAQajqAAsJFQAAAAgAAACVAEG86gALARwAQcjqAAsJFQAAAAgAAACWAEHc6gALARwAQejqAAsJFQAAAAgAAACXAEH86gALARwAQYjrAAsJFQAAAAgAAACYAEGc6wALARwAQajrAAsJFQAAAAgAAACZAEG86wALAqwDAEHI6wALogcBAAAAnAMAACAuAABALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAABgLgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAECcAAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4A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MAA5ADEAOQAyADkAMwA5ADQAOQA1ADkANgA5ADcAOQA4ADkAOQBBzPsACwIcBABB2PsAC4cIAgAAAAAEAAAwADAAMAAxADAAMgAwADMAMAA0ADAANQAwADYAMAA3ADAAOAAwADkAMABhADAAYgAwAGMAMABkADAAZQAwAGYAMQAwADEAMQAxADIAMQAzADEANAAxADUAMQA2ADEANwAxADgAMQA5ADEAYQAxAGIAMQBjADEAZAAxAGUAMQBmADIAMAAyADEAMgAyADIAMwAyADQAMgA1ADIANgAyADcAMgA4ADIAOQAyAGEAMgBiADIAYwAyAGQAMgBlADIAZgAzADAAMwAxADMAMgAzADMAMwA0ADMANQAzADYAMwA3ADMAOAAzADkAMwBhADMAYgAzAGMAMwBkADMAZQAzAGYANAAwADQAMQA0ADIANAAzADQANAA0ADUANAA2ADQANwA0ADgANAA5ADQAYQA0AGIANABjADQAZAA0AGUANABmADUAMAA1ADEANQAyADUAMwA1ADQANQA1ADUANgA1ADcANQA4ADUAOQA1AGEANQBiADUAYwA1AGQANQBlADUAZgA2ADAANgAxADYAMgA2ADMANgA0ADYANQA2ADYANgA3ADYAOAA2ADkANgBhADYAYgA2AGMANgBkADYAZQA2AGYANwAwADcAMQA3ADIANwAzADcANAA3ADUANwA2ADcANwA3ADgANwA5ADcAYQA3AGIANwBjADcAZAA3AGUANwBmADgAMAA4ADEAOAAyADgAMwA4ADQAOAA1ADgANgA4ADcAOAA4ADgAOQA4AGEAOABiADgAYwA4AGQAOABlADgAZgA5ADAAOQAxADkAMgA5ADMAOQA0ADkANQA5ADYAOQA3ADkAOAA5ADkAOQBhADkAYgA5AGMAOQBkADkAZQA5AGYAYQAwAGEAMQBhADIAYQAzAGEANABhADUAYQA2AGEANwBhADgAYQA5AGEAYQBhAGIAYQBjAGEAZABhAGUAYQBmAGIAMABiADEAYgAyAGIAMwBiADQAYgA1AGIANgBiADcAYgA4AGIAOQBiAGEAYgBiAGIAYwBiAGQAYgBlAGIAZgBjADAAYwAxAGMAMgBjADMAYwA0AGMANQBjADYAYwA3AGMAOABjADkAYwBhAGMAYgBjAGMAYwBkAGMAZQBjAGYAZAAwAGQA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";
|
|
17180
|
+
let compiledModulePromise = null;
|
|
17181
|
+
|
|
17182
|
+
// Helper function to decode and instantiate the module
|
|
17183
|
+
async function instantiate(imports) {
|
|
17184
|
+
if (compiledModulePromise === null) {
|
|
17185
|
+
compiledModulePromise = WebAssembly.compile(getWasmBytes());
|
|
17186
|
+
}
|
|
17187
|
+
const module = await compiledModulePromise;
|
|
17188
|
+
return instantiate$1(module, imports);
|
|
17189
|
+
}
|
|
17190
|
+
|
|
17191
|
+
// Helper function to just get the bytes
|
|
17192
|
+
function getWasmBytes() {
|
|
17193
|
+
return Uint8Array.from(atob(wasmBase64), c => c.charCodeAt(0));
|
|
17194
|
+
}
|
|
17195
|
+
|
|
17276
17196
|
// Max u32 value
|
|
17277
17197
|
const INF_STEPS = 2 ** 32 - 1;
|
|
17278
17198
|
class AnanasRegisters {
|
|
@@ -17358,8 +17278,7 @@ class AnanasInterpreter {
|
|
|
17358
17278
|
this.gas = new AnanasGasCounter(instance);
|
|
17359
17279
|
}
|
|
17360
17280
|
static async new() {
|
|
17361
|
-
const
|
|
17362
|
-
const instance = await instantiate(wasmModule, {
|
|
17281
|
+
const instance = await instantiate({
|
|
17363
17282
|
env: {
|
|
17364
17283
|
abort: () => {
|
|
17365
17284
|
throw new Error("Abort called from WASM");
|
|
@@ -17455,7 +17374,7 @@ class InterpreterInstanceManager {
|
|
|
17455
17374
|
}
|
|
17456
17375
|
}
|
|
17457
17376
|
|
|
17458
|
-
var index$
|
|
17377
|
+
var index$7 = /*#__PURE__*/Object.freeze({
|
|
17459
17378
|
__proto__: null,
|
|
17460
17379
|
HostCallMemory: HostCallMemory,
|
|
17461
17380
|
HostCallRegisters: HostCallRegisters,
|
|
@@ -17467,15 +17386,252 @@ var index$4 = /*#__PURE__*/Object.freeze({
|
|
|
17467
17386
|
tryAsHostCallIndex: tryAsHostCallIndex
|
|
17468
17387
|
});
|
|
17469
17388
|
|
|
17389
|
+
/**
|
|
17390
|
+
* Host call result constants.
|
|
17391
|
+
*
|
|
17392
|
+
* https://graypaper.fluffylabs.dev/#/85129da/2c7c022c7c02?v=0.6.3
|
|
17393
|
+
*/
|
|
17394
|
+
const HostCallResult = {
|
|
17395
|
+
/** The return value indicating an item does not exist. */
|
|
17396
|
+
NONE: tryAsU64(0xffffffffffffffffn), // 2**64 - 1
|
|
17397
|
+
/** Name unknown. */
|
|
17398
|
+
WHAT: tryAsU64(0xfffffffffffffffen), // 2**64 - 2
|
|
17399
|
+
/** The inner PVM memory index provided for reading/writing is not accessible. */
|
|
17400
|
+
OOB: tryAsU64(0xfffffffffffffffdn), // 2**64 - 3
|
|
17401
|
+
/** Index unknown. */
|
|
17402
|
+
WHO: tryAsU64(0xfffffffffffffffcn), // 2**64 - 4
|
|
17403
|
+
/** Storage full or resource already allocated. */
|
|
17404
|
+
FULL: tryAsU64(0xfffffffffffffffbn), // 2**64 - 5
|
|
17405
|
+
/** Core index unknown. */
|
|
17406
|
+
CORE: tryAsU64(0xfffffffffffffffan), // 2**64 - 6
|
|
17407
|
+
/** Insufficient funds. */
|
|
17408
|
+
CASH: tryAsU64(0xfffffffffffffff9n), // 2**64 - 7
|
|
17409
|
+
/** Gas limit too low. */
|
|
17410
|
+
LOW: tryAsU64(0xfffffffffffffff8n), // 2**64 - 8
|
|
17411
|
+
/** The item is already solicited, cannot be forgotten or the operation is invalid due to privilege level. */
|
|
17412
|
+
HUH: tryAsU64(0xfffffffffffffff7n), // 2**64 - 9
|
|
17413
|
+
/** The return value indicating general success. */
|
|
17414
|
+
OK: tryAsU64(0n),
|
|
17415
|
+
};
|
|
17416
|
+
|
|
17417
|
+
const MAX_U32 = tryAsU32(2 ** 32 - 1);
|
|
17418
|
+
const MAX_U32_BIG_INT = tryAsU64(MAX_U32);
|
|
17419
|
+
const SERVICE_ID_BYTES = 4;
|
|
17420
|
+
const CURRENT_SERVICE_ID = tryAsServiceId(2 ** 32 - 1);
|
|
17421
|
+
function getServiceIdOrCurrent(regNumber, regs, currentServiceId) {
|
|
17422
|
+
const regValue = regs.get(regNumber);
|
|
17423
|
+
if (regValue === 2n ** 64n - 1n) {
|
|
17424
|
+
return currentServiceId;
|
|
17425
|
+
}
|
|
17426
|
+
return getServiceId(regValue);
|
|
17427
|
+
}
|
|
17428
|
+
function getServiceId(serviceId) {
|
|
17429
|
+
const { lower, upper } = u64IntoParts(serviceId);
|
|
17430
|
+
if (upper === 0) {
|
|
17431
|
+
return tryAsServiceId(lower);
|
|
17432
|
+
}
|
|
17433
|
+
return null;
|
|
17434
|
+
}
|
|
17435
|
+
function writeServiceIdAsLeBytes(serviceId, destination) {
|
|
17436
|
+
check `${destination.length >= SERVICE_ID_BYTES} Not enough space in the destination.`;
|
|
17437
|
+
destination.set(u32AsLeBytes(serviceId));
|
|
17438
|
+
}
|
|
17439
|
+
/** Clamp a U64 to the maximum value of a 32-bit unsigned integer. */
|
|
17440
|
+
function clampU64ToU32(value) {
|
|
17441
|
+
return value > MAX_U32_BIG_INT ? MAX_U32 : tryAsU32(Number(value));
|
|
17442
|
+
}
|
|
17443
|
+
function emptyRegistersBuffer() {
|
|
17444
|
+
return safeAllocUint8Array(NO_OF_REGISTERS$1 * REGISTER_BYTE_SIZE);
|
|
17445
|
+
}
|
|
17446
|
+
|
|
17447
|
+
Compatibility.isSuite(TestSuite.W3F_DAVXY) || Compatibility.isGreaterOrEqual(GpVersion.V0_7_2) ? 9 : 11;
|
|
17448
|
+
Compatibility.isSuite(TestSuite.W3F_DAVXY) || Compatibility.isGreaterOrEqual(GpVersion.V0_7_2) ? 10 : 12;
|
|
17449
|
+
/**
|
|
17450
|
+
* Service account details with threshold balance.
|
|
17451
|
+
*
|
|
17452
|
+
* Used exclusively by `info` host call.
|
|
17453
|
+
*
|
|
17454
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/33920033b500?v=0.7.2
|
|
17455
|
+
*/
|
|
17456
|
+
const codecServiceAccountInfoWithThresholdBalance = codec$1.object({
|
|
17457
|
+
codeHash: codec$1.bytes(HASH_SIZE),
|
|
17458
|
+
balance: codec$1.u64,
|
|
17459
|
+
thresholdBalance: codec$1.u64,
|
|
17460
|
+
accumulateMinGas: codec$1.u64.convert((i) => i, tryAsServiceGas),
|
|
17461
|
+
onTransferMinGas: codec$1.u64.convert((i) => i, tryAsServiceGas),
|
|
17462
|
+
storageUtilisationBytes: codec$1.u64,
|
|
17463
|
+
storageUtilisationCount: codec$1.u32,
|
|
17464
|
+
gratisStorage: codec$1.u64,
|
|
17465
|
+
created: codec$1.u32.convert((x) => x, tryAsTimeSlot),
|
|
17466
|
+
lastAccumulation: codec$1.u32.convert((x) => x, tryAsTimeSlot),
|
|
17467
|
+
parentService: codec$1.u32.convert((x) => x, tryAsServiceId),
|
|
17468
|
+
}, "ServiceAccountInfoWithThresholdBalance");
|
|
17469
|
+
|
|
17470
|
+
var index$6 = /*#__PURE__*/Object.freeze({
|
|
17471
|
+
__proto__: null,
|
|
17472
|
+
AccumulationStateUpdate: AccumulationStateUpdate,
|
|
17473
|
+
CURRENT_SERVICE_ID: CURRENT_SERVICE_ID,
|
|
17474
|
+
get EjectError () { return EjectError; },
|
|
17475
|
+
get ForgetPreimageError () { return ForgetPreimageError; },
|
|
17476
|
+
HostCallResult: HostCallResult,
|
|
17477
|
+
InsufficientFundsError: InsufficientFundsError,
|
|
17478
|
+
MachineInstance: MachineInstance,
|
|
17479
|
+
get MemoryOperation () { return MemoryOperation; },
|
|
17480
|
+
get NewServiceError () { return NewServiceError; },
|
|
17481
|
+
NoMachineError: NoMachineError,
|
|
17482
|
+
get PagesError () { return PagesError; },
|
|
17483
|
+
PartiallyUpdatedState: PartiallyUpdatedState,
|
|
17484
|
+
get PeekPokeError () { return PeekPokeError; },
|
|
17485
|
+
PendingTransfer: PendingTransfer,
|
|
17486
|
+
get PreimageStatusKind () { return PreimageStatusKind; },
|
|
17487
|
+
get ProvidePreimageError () { return ProvidePreimageError; },
|
|
17488
|
+
get RequestPreimageError () { return RequestPreimageError; },
|
|
17489
|
+
SERVICE_ID_BYTES: SERVICE_ID_BYTES,
|
|
17490
|
+
SegmentExportError: SegmentExportError,
|
|
17491
|
+
TRANSFER_MEMO_BYTES: TRANSFER_MEMO_BYTES,
|
|
17492
|
+
get TransferError () { return TransferError; },
|
|
17493
|
+
UnprivilegedError: UnprivilegedError,
|
|
17494
|
+
get UpdatePrivilegesError () { return UpdatePrivilegesError; },
|
|
17495
|
+
get ZeroVoidError () { return ZeroVoidError; },
|
|
17496
|
+
clampU64ToU32: clampU64ToU32,
|
|
17497
|
+
emptyRegistersBuffer: emptyRegistersBuffer,
|
|
17498
|
+
getServiceId: getServiceId,
|
|
17499
|
+
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
17500
|
+
hostCallInfoAccount: codecServiceAccountInfoWithThresholdBalance,
|
|
17501
|
+
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
17502
|
+
toMemoryOperation: toMemoryOperation,
|
|
17503
|
+
tryAsMachineId: tryAsMachineId,
|
|
17504
|
+
tryAsProgramCounter: tryAsProgramCounter,
|
|
17505
|
+
writeServiceIdAsLeBytes: writeServiceIdAsLeBytes
|
|
17506
|
+
});
|
|
17507
|
+
|
|
17508
|
+
const SUPER_PEAK_STRING = BytesBlob.blobFromString("peak");
|
|
17509
|
+
/**
|
|
17510
|
+
* Merkle Mountain Range.
|
|
17511
|
+
*
|
|
17512
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3aa0023aa002?v=0.6.2
|
|
17513
|
+
*/
|
|
17514
|
+
class MerkleMountainRange {
|
|
17515
|
+
hasher;
|
|
17516
|
+
mountains;
|
|
17517
|
+
/** Construct an empty MMR. */
|
|
17518
|
+
static empty(hasher) {
|
|
17519
|
+
return new MerkleMountainRange(hasher);
|
|
17520
|
+
}
|
|
17521
|
+
/** Construct a new MMR from existing peaks. */
|
|
17522
|
+
static fromPeaks(hasher, mmr) {
|
|
17523
|
+
return new MerkleMountainRange(hasher, mmr.peaks
|
|
17524
|
+
.reduce((acc, peak, index) => {
|
|
17525
|
+
if (peak !== null) {
|
|
17526
|
+
acc.push(Mountain.fromPeak(peak, 2 ** index));
|
|
17527
|
+
}
|
|
17528
|
+
return acc;
|
|
17529
|
+
}, [])
|
|
17530
|
+
.reverse());
|
|
17531
|
+
}
|
|
17532
|
+
constructor(hasher,
|
|
17533
|
+
/** Store non-empty merkle tries (mountains) ordered by descending size. */
|
|
17534
|
+
mountains = []) {
|
|
17535
|
+
this.hasher = hasher;
|
|
17536
|
+
this.mountains = mountains;
|
|
17537
|
+
}
|
|
17538
|
+
/**
|
|
17539
|
+
* Append a new hash to the MMR structure.
|
|
17540
|
+
*
|
|
17541
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3b11003b1100?v=0.6.2
|
|
17542
|
+
*/
|
|
17543
|
+
append(hash) {
|
|
17544
|
+
let newMountain = Mountain.fromPeak(hash, 1);
|
|
17545
|
+
for (;;) {
|
|
17546
|
+
const last = this.mountains.pop();
|
|
17547
|
+
if (last === undefined) {
|
|
17548
|
+
this.mountains.push(newMountain);
|
|
17549
|
+
return;
|
|
17550
|
+
}
|
|
17551
|
+
if (last.size !== newMountain.size) {
|
|
17552
|
+
this.mountains.push(last);
|
|
17553
|
+
this.mountains.push(newMountain);
|
|
17554
|
+
return;
|
|
17555
|
+
}
|
|
17556
|
+
newMountain = last.mergeWith(this.hasher, newMountain);
|
|
17557
|
+
}
|
|
17558
|
+
}
|
|
17559
|
+
/**
|
|
17560
|
+
* Root of the entire structure.
|
|
17561
|
+
*
|
|
17562
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3b20013b2001?v=0.6.2
|
|
17563
|
+
*/
|
|
17564
|
+
getSuperPeakHash() {
|
|
17565
|
+
if (this.mountains.length === 0) {
|
|
17566
|
+
return Bytes.zero(HASH_SIZE).asOpaque();
|
|
17567
|
+
}
|
|
17568
|
+
const revMountains = this.mountains.slice().reverse();
|
|
17569
|
+
const length = revMountains.length;
|
|
17570
|
+
let lastHash = revMountains[0].peak;
|
|
17571
|
+
for (let i = 1; i < length; i++) {
|
|
17572
|
+
const mountain = revMountains[i];
|
|
17573
|
+
lastHash = this.hasher.hashConcatPrepend(SUPER_PEAK_STRING, lastHash, mountain.peak);
|
|
17574
|
+
}
|
|
17575
|
+
return lastHash;
|
|
17576
|
+
}
|
|
17577
|
+
/** Get current peaks. */
|
|
17578
|
+
getPeaks() {
|
|
17579
|
+
const peaks = [];
|
|
17580
|
+
const mountains = this.mountains;
|
|
17581
|
+
// always 2**index
|
|
17582
|
+
let currentSize = 1;
|
|
17583
|
+
let currentIdx = mountains.length - 1;
|
|
17584
|
+
while (currentIdx >= 0) {
|
|
17585
|
+
const currentItem = mountains[currentIdx];
|
|
17586
|
+
if (currentItem.size >= currentSize && currentItem.size < 2 * currentSize) {
|
|
17587
|
+
peaks.push(currentItem.peak);
|
|
17588
|
+
currentIdx -= 1;
|
|
17589
|
+
}
|
|
17590
|
+
else {
|
|
17591
|
+
peaks.push(null);
|
|
17592
|
+
}
|
|
17593
|
+
// move to the next index.
|
|
17594
|
+
currentSize = currentSize << 1;
|
|
17595
|
+
}
|
|
17596
|
+
return { peaks };
|
|
17597
|
+
}
|
|
17598
|
+
}
|
|
17599
|
+
/** An internal helper structure to represent a merkle trie for MMR. */
|
|
17600
|
+
class Mountain {
|
|
17601
|
+
peak;
|
|
17602
|
+
size;
|
|
17603
|
+
constructor(peak, size) {
|
|
17604
|
+
this.peak = peak;
|
|
17605
|
+
this.size = size;
|
|
17606
|
+
}
|
|
17607
|
+
static fromPeak(peak, size) {
|
|
17608
|
+
return new Mountain(peak, size);
|
|
17609
|
+
}
|
|
17610
|
+
static fromChildren(hasher, children) {
|
|
17611
|
+
const [left, right] = children;
|
|
17612
|
+
const peak = hasher.hashConcat(left.peak, right.peak);
|
|
17613
|
+
const size = left.size + right.size;
|
|
17614
|
+
return new Mountain(peak, size);
|
|
17615
|
+
}
|
|
17616
|
+
/** Merge with another montain of the same size. */
|
|
17617
|
+
mergeWith(hasher, other) {
|
|
17618
|
+
return Mountain.fromChildren(hasher, [this, other]);
|
|
17619
|
+
}
|
|
17620
|
+
toString() {
|
|
17621
|
+
return `${this.size} @ ${this.peak}`;
|
|
17622
|
+
}
|
|
17623
|
+
}
|
|
17624
|
+
|
|
17625
|
+
var index$5 = /*#__PURE__*/Object.freeze({
|
|
17626
|
+
__proto__: null,
|
|
17627
|
+
MerkleMountainRange: MerkleMountainRange
|
|
17628
|
+
});
|
|
17629
|
+
|
|
17470
17630
|
class DebuggerAdapter {
|
|
17471
17631
|
pvm;
|
|
17472
17632
|
constructor(useSbrkGas = false) {
|
|
17473
17633
|
this.pvm = new Interpreter({ useSbrkGas });
|
|
17474
17634
|
}
|
|
17475
|
-
// TODO [MaSi]: a temporary solution that is needed to implement host calls in PVM debugger
|
|
17476
|
-
getInterpreter() {
|
|
17477
|
-
return this.pvm;
|
|
17478
|
-
}
|
|
17479
17635
|
resetGeneric(rawProgram, flatRegisters, initialGas) {
|
|
17480
17636
|
this.pvm.resetGeneric(rawProgram, 0, tryAsGas(initialGas), new Registers(flatRegisters));
|
|
17481
17637
|
}
|
|
@@ -17539,7 +17695,7 @@ class DebuggerAdapter {
|
|
|
17539
17695
|
}
|
|
17540
17696
|
}
|
|
17541
17697
|
|
|
17542
|
-
var index$
|
|
17698
|
+
var index$4 = /*#__PURE__*/Object.freeze({
|
|
17543
17699
|
__proto__: null,
|
|
17544
17700
|
AccumulationStateUpdate: AccumulationStateUpdate,
|
|
17545
17701
|
ArgsDecoder: ArgsDecoder,
|
|
@@ -17588,8 +17744,8 @@ var index$3 = /*#__PURE__*/Object.freeze({
|
|
|
17588
17744
|
asOpaqueType: asOpaqueType,
|
|
17589
17745
|
assertEmpty: assertEmpty,
|
|
17590
17746
|
assertNever: assertNever,
|
|
17591
|
-
block: index$
|
|
17592
|
-
bytes: index$
|
|
17747
|
+
block: index$m,
|
|
17748
|
+
bytes: index$t,
|
|
17593
17749
|
check: check,
|
|
17594
17750
|
clampU64ToU32: clampU64ToU32,
|
|
17595
17751
|
createResults: createResults,
|
|
@@ -17598,13 +17754,15 @@ var index$3 = /*#__PURE__*/Object.freeze({
|
|
|
17598
17754
|
extractCodeAndMetadata: extractCodeAndMetadata,
|
|
17599
17755
|
getServiceId: getServiceId,
|
|
17600
17756
|
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
17601
|
-
hash: index$
|
|
17757
|
+
hash: index$p,
|
|
17758
|
+
hostCallInfoAccount: codecServiceAccountInfoWithThresholdBalance,
|
|
17602
17759
|
inspect: inspect,
|
|
17603
17760
|
instructionArgumentTypeMap: instructionArgumentTypeMap,
|
|
17604
|
-
interpreter: index$
|
|
17761
|
+
interpreter: index$8,
|
|
17605
17762
|
isBrowser: isBrowser,
|
|
17763
|
+
lazyInspect: lazyInspect,
|
|
17606
17764
|
measure: measure,
|
|
17607
|
-
numbers: index$
|
|
17765
|
+
numbers: index$s,
|
|
17608
17766
|
resultToString: resultToString,
|
|
17609
17767
|
seeThrough: seeThrough,
|
|
17610
17768
|
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
@@ -17651,7 +17809,7 @@ function hashToNumberSequence(blake2b, entropy, length) {
|
|
|
17651
17809
|
return result;
|
|
17652
17810
|
}
|
|
17653
17811
|
|
|
17654
|
-
var index$
|
|
17812
|
+
var index$3 = /*#__PURE__*/Object.freeze({
|
|
17655
17813
|
__proto__: null,
|
|
17656
17814
|
fisherYatesShuffle: fisherYatesShuffle
|
|
17657
17815
|
});
|
|
@@ -18009,10 +18167,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18009
18167
|
chi_a: json.array("number"),
|
|
18010
18168
|
chi_v: "number",
|
|
18011
18169
|
chi_r: json.optional("number"),
|
|
18012
|
-
chi_g: json.nullable(json.
|
|
18013
|
-
service: "number",
|
|
18014
|
-
gasLimit: json.fromNumber((v) => tryAsServiceGas(v)),
|
|
18015
|
-
})),
|
|
18170
|
+
chi_g: json.nullable(json.map("number", json.fromNumber((v) => tryAsServiceGas(v)))),
|
|
18016
18171
|
},
|
|
18017
18172
|
pi: JsonStatisticsData.fromJson,
|
|
18018
18173
|
omega: json.array(json.array(notYetAccumulatedFromJson)),
|
|
@@ -18053,7 +18208,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18053
18208
|
assigners: chi.chi_a,
|
|
18054
18209
|
delegator: chi.chi_v,
|
|
18055
18210
|
registrar: chi.chi_r ?? tryAsServiceId(2 ** 32 - 1),
|
|
18056
|
-
autoAccumulateServices: chi.chi_g ??
|
|
18211
|
+
autoAccumulateServices: chi.chi_g ?? new Map(),
|
|
18057
18212
|
}),
|
|
18058
18213
|
statistics: JsonStatisticsData.toStatisticsData(spec, pi),
|
|
18059
18214
|
accumulationQueue: omega,
|
|
@@ -18063,7 +18218,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18063
18218
|
});
|
|
18064
18219
|
});
|
|
18065
18220
|
|
|
18066
|
-
var index$
|
|
18221
|
+
var index$2 = /*#__PURE__*/Object.freeze({
|
|
18067
18222
|
__proto__: null,
|
|
18068
18223
|
JsonCoreStatistics: JsonCoreStatistics,
|
|
18069
18224
|
JsonService: JsonService,
|
|
@@ -18081,6 +18236,65 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
|
18081
18236
|
validatorDataFromJson: validatorDataFromJson
|
|
18082
18237
|
});
|
|
18083
18238
|
|
|
18239
|
+
class StateKeyVal {
|
|
18240
|
+
static fromJson = {
|
|
18241
|
+
key: fromJson.bytesN(TRUNCATED_HASH_SIZE),
|
|
18242
|
+
value: fromJson.bytesBlob,
|
|
18243
|
+
};
|
|
18244
|
+
key;
|
|
18245
|
+
value;
|
|
18246
|
+
}
|
|
18247
|
+
class TestState {
|
|
18248
|
+
static fromJson = {
|
|
18249
|
+
state_root: fromJson.bytes32(),
|
|
18250
|
+
keyvals: json.array(StateKeyVal.fromJson),
|
|
18251
|
+
};
|
|
18252
|
+
static Codec = codec$1.object({
|
|
18253
|
+
state_root: codec$1.bytes(HASH_SIZE).asOpaque(),
|
|
18254
|
+
keyvals: codec$1.sequenceVarLen(codec$1.object({
|
|
18255
|
+
key: codec$1.bytes(TRUNCATED_HASH_SIZE),
|
|
18256
|
+
value: codec$1.blob,
|
|
18257
|
+
})),
|
|
18258
|
+
});
|
|
18259
|
+
state_root;
|
|
18260
|
+
keyvals;
|
|
18261
|
+
}
|
|
18262
|
+
class StateTransitionGenesis {
|
|
18263
|
+
static fromJson = {
|
|
18264
|
+
header: headerFromJson,
|
|
18265
|
+
state: TestState.fromJson,
|
|
18266
|
+
};
|
|
18267
|
+
static Codec = codec$1.object({
|
|
18268
|
+
header: Header.Codec,
|
|
18269
|
+
state: TestState.Codec,
|
|
18270
|
+
});
|
|
18271
|
+
header;
|
|
18272
|
+
state;
|
|
18273
|
+
}
|
|
18274
|
+
class StateTransition {
|
|
18275
|
+
static fromJson = {
|
|
18276
|
+
pre_state: TestState.fromJson,
|
|
18277
|
+
post_state: TestState.fromJson,
|
|
18278
|
+
block: blockFromJson(tinyChainSpec),
|
|
18279
|
+
};
|
|
18280
|
+
static Codec = codec$1.object({
|
|
18281
|
+
pre_state: TestState.Codec,
|
|
18282
|
+
block: Block.Codec,
|
|
18283
|
+
post_state: TestState.Codec,
|
|
18284
|
+
});
|
|
18285
|
+
pre_state;
|
|
18286
|
+
post_state;
|
|
18287
|
+
block;
|
|
18288
|
+
}
|
|
18289
|
+
|
|
18290
|
+
var index$1 = /*#__PURE__*/Object.freeze({
|
|
18291
|
+
__proto__: null,
|
|
18292
|
+
StateKeyVal: StateKeyVal,
|
|
18293
|
+
StateTransition: StateTransition,
|
|
18294
|
+
StateTransitionGenesis: StateTransitionGenesis,
|
|
18295
|
+
TestState: TestState
|
|
18296
|
+
});
|
|
18297
|
+
|
|
18084
18298
|
/** Helper function to create most used hashes in the block */
|
|
18085
18299
|
class TransitionHasher {
|
|
18086
18300
|
context;
|
|
@@ -18129,15 +18343,6 @@ class TransitionHasher {
|
|
|
18129
18343
|
const encoded = BytesBlob.blobFromParts([et.raw, ep.raw, eg.raw, ea.raw, ed.raw]);
|
|
18130
18344
|
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), extrinsicView, encoded);
|
|
18131
18345
|
}
|
|
18132
|
-
/** Creates hash for given WorkPackage */
|
|
18133
|
-
workPackage(workPackage) {
|
|
18134
|
-
return this.encode(WorkPackage.Codec, workPackage);
|
|
18135
|
-
}
|
|
18136
|
-
encode(codec, data) {
|
|
18137
|
-
// TODO [ToDr] Use already allocated encoding destination and hash bytes from some arena.
|
|
18138
|
-
const encoded = Encoder.encodeObject(codec, data, this.context);
|
|
18139
|
-
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), data, encoded);
|
|
18140
|
-
}
|
|
18141
18346
|
}
|
|
18142
18347
|
|
|
18143
18348
|
var PreimagesErrorCode;
|
|
@@ -18146,7 +18351,6 @@ var PreimagesErrorCode;
|
|
|
18146
18351
|
PreimagesErrorCode["PreimagesNotSortedUnique"] = "preimages_not_sorted_unique";
|
|
18147
18352
|
PreimagesErrorCode["AccountNotFound"] = "account_not_found";
|
|
18148
18353
|
})(PreimagesErrorCode || (PreimagesErrorCode = {}));
|
|
18149
|
-
// TODO [SeKo] consider whether this module is the right place to remove expired preimages
|
|
18150
18354
|
class Preimages {
|
|
18151
18355
|
state;
|
|
18152
18356
|
blake2b;
|
|
@@ -18208,4 +18412,4 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
18208
18412
|
TransitionHasher: TransitionHasher
|
|
18209
18413
|
});
|
|
18210
18414
|
|
|
18211
|
-
export { index$
|
|
18415
|
+
export { index$m as block, index$k as block_json, index$t as bytes, index$r as codec, index$o as collections, index$n as config, index$i as config_node, index$q as crypto, index$e as database, index$d as erasure_coding, index$b as fuzz_proto, index$p as hash, index$6 as jam_host_calls, index$l as json_parser, index$j as logger, index$5 as mmr, index$s as numbers, index$u as ordering, index$4 as pvm, index$7 as pvm_host_calls, index$8 as pvm_interpreter, index$9 as pvm_program, index$a as pvm_spi_decoder, index$3 as shuffling, index$h as state, index$2 as state_json, index$f as state_merkleization, index$1 as state_vectors, index as transition, index$g as trie, index$v as utils };
|