@btc-vision/transaction 1.7.2 → 1.7.3
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/browser/index.js +1 -1
- package/browser/src/deterministic/DeterministicMap.d.ts +3 -1
- package/browser/src/deterministic/Map.d.ts +16 -0
- package/browser/src/opnet.d.ts +1 -0
- package/build/deterministic/AddressMap.js +6 -2
- package/build/deterministic/DeterministicMap.d.ts +3 -1
- package/build/deterministic/DeterministicMap.js +23 -22
- package/build/deterministic/Map.d.ts +16 -0
- package/build/deterministic/Map.js +66 -0
- package/build/opnet.d.ts +1 -0
- package/build/opnet.js +1 -0
- package/package.json +1 -1
- package/src/deterministic/AddressMap.ts +7 -3
- package/src/deterministic/DeterministicMap.ts +23 -24
- package/src/deterministic/Map.ts +78 -0
- package/src/opnet.ts +2 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import { Map } from './Map.js';
|
|
1
2
|
export declare class DeterministicMap<K, V> {
|
|
2
3
|
#private;
|
|
4
|
+
private compareFn;
|
|
3
5
|
private map;
|
|
4
|
-
private readonly compareFn;
|
|
5
6
|
constructor(compareFn: (a: K, b: K) => number);
|
|
6
7
|
get size(): number;
|
|
7
8
|
static fromMap<K, V>(map: Map<K, V>, compareFn: (a: K, b: K) => number): DeterministicMap<K, V>;
|
|
8
9
|
set(key: K, value: V): void;
|
|
9
10
|
get(key: K): V | undefined;
|
|
11
|
+
entries(): IterableIterator<[K, V]>;
|
|
10
12
|
keys(): IterableIterator<K>;
|
|
11
13
|
values(): IterableIterator<V>;
|
|
12
14
|
has(key: K): boolean;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { i32 } from '../utils/types.js';
|
|
2
|
+
export declare class Map<K, V> {
|
|
3
|
+
protected _keys: K[];
|
|
4
|
+
protected _values: V[];
|
|
5
|
+
get size(): i32;
|
|
6
|
+
keys(): IterableIterator<K>;
|
|
7
|
+
values(): IterableIterator<V>;
|
|
8
|
+
entries(): IterableIterator<[K, V]>;
|
|
9
|
+
set(key: K, value: V): void;
|
|
10
|
+
indexOf(key: K): i32;
|
|
11
|
+
get(key: K): V | undefined;
|
|
12
|
+
has(key: K): boolean;
|
|
13
|
+
delete(key: K): boolean;
|
|
14
|
+
clear(): void;
|
|
15
|
+
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
16
|
+
}
|
package/browser/src/opnet.d.ts
CHANGED
|
@@ -75,6 +75,7 @@ export * from './metadata/tokens.js';
|
|
|
75
75
|
export * from './transaction/browser/Web3Provider.js';
|
|
76
76
|
export * from './keypair/Secp256k1PointDeriver.js';
|
|
77
77
|
export * from './transaction/ContractAddress.js';
|
|
78
|
+
export * from './deterministic/Map.js';
|
|
78
79
|
declare global {
|
|
79
80
|
interface Window {
|
|
80
81
|
unisat?: Unisat;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Map } from './Map.js';
|
|
1
2
|
export class AddressMap {
|
|
2
3
|
constructor(iterable) {
|
|
3
4
|
this.items = new Map();
|
|
@@ -63,7 +64,10 @@ export class AddressMap {
|
|
|
63
64
|
callback.call(thisArg, this.items.get(key.toBigInt()), key, this);
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
|
-
[Symbol.iterator]() {
|
|
67
|
-
|
|
67
|
+
*[Symbol.iterator]() {
|
|
68
|
+
for (let i = 0; i < this.keyOrder.length; i++) {
|
|
69
|
+
const key = this.keyOrder[i];
|
|
70
|
+
yield [key, this.items.get(key.toBigInt())];
|
|
71
|
+
}
|
|
68
72
|
}
|
|
69
73
|
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import { Map } from './Map.js';
|
|
1
2
|
export declare class DeterministicMap<K, V> {
|
|
2
3
|
#private;
|
|
4
|
+
private compareFn;
|
|
3
5
|
private map;
|
|
4
|
-
private readonly compareFn;
|
|
5
6
|
constructor(compareFn: (a: K, b: K) => number);
|
|
6
7
|
get size(): number;
|
|
7
8
|
static fromMap<K, V>(map: Map<K, V>, compareFn: (a: K, b: K) => number): DeterministicMap<K, V>;
|
|
8
9
|
set(key: K, value: V): void;
|
|
9
10
|
get(key: K): V | undefined;
|
|
11
|
+
entries(): IterableIterator<[K, V]>;
|
|
10
12
|
keys(): IterableIterator<K>;
|
|
11
13
|
values(): IterableIterator<V>;
|
|
12
14
|
has(key: K): boolean;
|
|
@@ -9,13 +9,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var
|
|
12
|
+
var _DeterministicMap_keys;
|
|
13
|
+
import { Map } from './Map.js';
|
|
13
14
|
export class DeterministicMap {
|
|
14
15
|
constructor(compareFn) {
|
|
15
|
-
_DeterministicMap_keyOrder.set(this, void 0);
|
|
16
|
-
this.map = new Map();
|
|
17
|
-
__classPrivateFieldSet(this, _DeterministicMap_keyOrder, [], "f");
|
|
18
16
|
this.compareFn = compareFn;
|
|
17
|
+
_DeterministicMap_keys.set(this, void 0);
|
|
18
|
+
this.map = new Map();
|
|
19
|
+
__classPrivateFieldSet(this, _DeterministicMap_keys, [], "f");
|
|
19
20
|
}
|
|
20
21
|
get size() {
|
|
21
22
|
return this.map.size;
|
|
@@ -29,30 +30,30 @@ export class DeterministicMap {
|
|
|
29
30
|
}
|
|
30
31
|
set(key, value) {
|
|
31
32
|
if (!this.map.has(key)) {
|
|
32
|
-
__classPrivateFieldGet(this,
|
|
33
|
-
__classPrivateFieldGet(this,
|
|
33
|
+
__classPrivateFieldGet(this, _DeterministicMap_keys, "f").push(key);
|
|
34
|
+
__classPrivateFieldGet(this, _DeterministicMap_keys, "f").sort(this.compareFn);
|
|
34
35
|
}
|
|
35
36
|
this.map.set(key, value);
|
|
36
37
|
}
|
|
37
38
|
get(key) {
|
|
38
39
|
return this.map.get(key);
|
|
39
40
|
}
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
*entries() {
|
|
42
|
+
for (const key of __classPrivateFieldGet(this, _DeterministicMap_keys, "f")) {
|
|
43
|
+
yield [key, this.map.get(key)];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
*keys() {
|
|
47
|
+
yield* __classPrivateFieldGet(this, _DeterministicMap_keys, "f");
|
|
42
48
|
}
|
|
43
|
-
values() {
|
|
44
|
-
const
|
|
45
|
-
for (let i = 0; i < __classPrivateFieldGet(this, _DeterministicMap_keyOrder, "f").length; i++) {
|
|
46
|
-
const key = __classPrivateFieldGet(this, _DeterministicMap_keyOrder, "f")[i];
|
|
49
|
+
*values() {
|
|
50
|
+
for (const key of __classPrivateFieldGet(this, _DeterministicMap_keys, "f")) {
|
|
47
51
|
const value = this.map.get(key);
|
|
48
|
-
if (value
|
|
49
|
-
values.push(value);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
+
if (value === undefined && !this.map.has(key)) {
|
|
52
53
|
throw new Error('Value not found');
|
|
53
54
|
}
|
|
55
|
+
yield value;
|
|
54
56
|
}
|
|
55
|
-
return values.values();
|
|
56
57
|
}
|
|
57
58
|
has(key) {
|
|
58
59
|
return this.map.has(key);
|
|
@@ -60,23 +61,23 @@ export class DeterministicMap {
|
|
|
60
61
|
delete(key) {
|
|
61
62
|
if (this.map.has(key)) {
|
|
62
63
|
this.map.delete(key);
|
|
63
|
-
__classPrivateFieldSet(this,
|
|
64
|
+
__classPrivateFieldSet(this, _DeterministicMap_keys, __classPrivateFieldGet(this, _DeterministicMap_keys, "f").filter((k) => k !== key), "f");
|
|
64
65
|
return true;
|
|
65
66
|
}
|
|
66
67
|
return false;
|
|
67
68
|
}
|
|
68
69
|
clear() {
|
|
69
70
|
this.map.clear();
|
|
70
|
-
__classPrivateFieldSet(this,
|
|
71
|
+
__classPrivateFieldSet(this, _DeterministicMap_keys, [], "f");
|
|
71
72
|
}
|
|
72
73
|
forEach(callback) {
|
|
73
|
-
for (const key of __classPrivateFieldGet(this,
|
|
74
|
+
for (const key of __classPrivateFieldGet(this, _DeterministicMap_keys, "f")) {
|
|
74
75
|
const value = this.map.get(key);
|
|
75
76
|
callback(value, key, this);
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
|
-
*[(
|
|
79
|
-
for (const key of __classPrivateFieldGet(this,
|
|
79
|
+
*[(_DeterministicMap_keys = new WeakMap(), Symbol.iterator)]() {
|
|
80
|
+
for (const key of __classPrivateFieldGet(this, _DeterministicMap_keys, "f")) {
|
|
80
81
|
yield [key, this.map.get(key)];
|
|
81
82
|
}
|
|
82
83
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { i32 } from '../utils/types.js';
|
|
2
|
+
export declare class Map<K, V> {
|
|
3
|
+
protected _keys: K[];
|
|
4
|
+
protected _values: V[];
|
|
5
|
+
get size(): i32;
|
|
6
|
+
keys(): IterableIterator<K>;
|
|
7
|
+
values(): IterableIterator<V>;
|
|
8
|
+
entries(): IterableIterator<[K, V]>;
|
|
9
|
+
set(key: K, value: V): void;
|
|
10
|
+
indexOf(key: K): i32;
|
|
11
|
+
get(key: K): V | undefined;
|
|
12
|
+
has(key: K): boolean;
|
|
13
|
+
delete(key: K): boolean;
|
|
14
|
+
clear(): void;
|
|
15
|
+
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export class Map {
|
|
2
|
+
constructor() {
|
|
3
|
+
this._keys = [];
|
|
4
|
+
this._values = [];
|
|
5
|
+
}
|
|
6
|
+
get size() {
|
|
7
|
+
return this._keys.length;
|
|
8
|
+
}
|
|
9
|
+
*keys() {
|
|
10
|
+
yield* this._keys;
|
|
11
|
+
}
|
|
12
|
+
*values() {
|
|
13
|
+
yield* this._values;
|
|
14
|
+
}
|
|
15
|
+
*entries() {
|
|
16
|
+
for (let i = 0; i < this._keys.length; i++) {
|
|
17
|
+
yield [this._keys[i], this._values[i]];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
set(key, value) {
|
|
21
|
+
const index = this.indexOf(key);
|
|
22
|
+
if (index == -1) {
|
|
23
|
+
this._keys.push(key);
|
|
24
|
+
this._values.push(value);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this._values[index] = value;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
indexOf(key) {
|
|
31
|
+
for (let i = 0; i < this._keys.length; i++) {
|
|
32
|
+
if (this._keys[i] == key) {
|
|
33
|
+
return i;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return -1;
|
|
37
|
+
}
|
|
38
|
+
get(key) {
|
|
39
|
+
const index = this.indexOf(key);
|
|
40
|
+
if (index == -1) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
return this._values[index];
|
|
44
|
+
}
|
|
45
|
+
has(key) {
|
|
46
|
+
return this.indexOf(key) != -1;
|
|
47
|
+
}
|
|
48
|
+
delete(key) {
|
|
49
|
+
const index = this.indexOf(key);
|
|
50
|
+
if (index == -1) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
this._keys.splice(index, 1);
|
|
54
|
+
this._values.splice(index, 1);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
clear() {
|
|
58
|
+
this._keys = [];
|
|
59
|
+
this._values = [];
|
|
60
|
+
}
|
|
61
|
+
*[Symbol.iterator]() {
|
|
62
|
+
for (let i = 0; i < this._keys.length; i++) {
|
|
63
|
+
yield [this._keys[i], this._values[i]];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
package/build/opnet.d.ts
CHANGED
|
@@ -75,6 +75,7 @@ export * from './metadata/tokens.js';
|
|
|
75
75
|
export * from './transaction/browser/Web3Provider.js';
|
|
76
76
|
export * from './keypair/Secp256k1PointDeriver.js';
|
|
77
77
|
export * from './transaction/ContractAddress.js';
|
|
78
|
+
export * from './deterministic/Map.js';
|
|
78
79
|
declare global {
|
|
79
80
|
interface Window {
|
|
80
81
|
unisat?: Unisat;
|
package/build/opnet.js
CHANGED
package/package.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Address } from '../keypair/Address.js';
|
|
2
|
+
import { Map } from './Map.js';
|
|
2
3
|
|
|
3
4
|
export class AddressMap<V> {
|
|
4
5
|
private items: Map<bigint, V>;
|
|
@@ -15,7 +16,7 @@ export class AddressMap<V> {
|
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
get size(): number {
|
|
19
|
+
public get size(): number {
|
|
19
20
|
return this.keyOrder.length;
|
|
20
21
|
}
|
|
21
22
|
|
|
@@ -84,7 +85,10 @@ export class AddressMap<V> {
|
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
|
|
87
|
-
[Symbol.iterator](): IterableIterator<[Address, V]> {
|
|
88
|
-
|
|
88
|
+
*[Symbol.iterator](): IterableIterator<[Address, V]> {
|
|
89
|
+
for (let i = 0; i < this.keyOrder.length; i++) {
|
|
90
|
+
const key = this.keyOrder[i];
|
|
91
|
+
yield [key, this.items.get(key.toBigInt()) as V];
|
|
92
|
+
}
|
|
89
93
|
}
|
|
90
94
|
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
+
import { Map } from './Map.js';
|
|
2
|
+
|
|
1
3
|
export class DeterministicMap<K, V> {
|
|
2
4
|
private map: Map<K, V>;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
#keyOrder: K[];
|
|
5
|
+
#keys: K[];
|
|
6
6
|
|
|
7
|
-
constructor(compareFn: (a: K, b: K) => number) {
|
|
7
|
+
constructor(private compareFn: (a: K, b: K) => number) {
|
|
8
8
|
this.map = new Map<K, V>();
|
|
9
|
-
this.#
|
|
10
|
-
this.compareFn = compareFn;
|
|
9
|
+
this.#keys = [];
|
|
11
10
|
}
|
|
12
11
|
|
|
13
12
|
public get size(): number {
|
|
@@ -27,8 +26,8 @@ export class DeterministicMap<K, V> {
|
|
|
27
26
|
|
|
28
27
|
public set(key: K, value: V): void {
|
|
29
28
|
if (!this.map.has(key)) {
|
|
30
|
-
this.#
|
|
31
|
-
this.#
|
|
29
|
+
this.#keys.push(key);
|
|
30
|
+
this.#keys.sort(this.compareFn);
|
|
32
31
|
}
|
|
33
32
|
this.map.set(key, value);
|
|
34
33
|
}
|
|
@@ -37,25 +36,25 @@ export class DeterministicMap<K, V> {
|
|
|
37
36
|
return this.map.get(key);
|
|
38
37
|
}
|
|
39
38
|
|
|
40
|
-
public
|
|
41
|
-
|
|
39
|
+
public *entries(): IterableIterator<[K, V]> {
|
|
40
|
+
for (const key of this.#keys) {
|
|
41
|
+
yield [key, this.map.get(key) as V];
|
|
42
|
+
}
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
public
|
|
45
|
-
|
|
45
|
+
public *keys(): IterableIterator<K> {
|
|
46
|
+
yield* this.#keys;
|
|
47
|
+
}
|
|
46
48
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
public *values(): IterableIterator<V> {
|
|
50
|
+
for (const key of this.#keys) {
|
|
49
51
|
const value = this.map.get(key);
|
|
50
|
-
|
|
51
|
-
if (value !== undefined) {
|
|
52
|
-
values.push(value);
|
|
53
|
-
} else {
|
|
52
|
+
if (value === undefined && !this.map.has(key)) {
|
|
54
53
|
throw new Error('Value not found');
|
|
55
54
|
}
|
|
56
|
-
}
|
|
57
55
|
|
|
58
|
-
|
|
56
|
+
yield value as V;
|
|
57
|
+
}
|
|
59
58
|
}
|
|
60
59
|
|
|
61
60
|
public has(key: K): boolean {
|
|
@@ -65,7 +64,7 @@ export class DeterministicMap<K, V> {
|
|
|
65
64
|
public delete(key: K): boolean {
|
|
66
65
|
if (this.map.has(key)) {
|
|
67
66
|
this.map.delete(key);
|
|
68
|
-
this.#
|
|
67
|
+
this.#keys = this.#keys.filter((k) => k !== key);
|
|
69
68
|
return true;
|
|
70
69
|
}
|
|
71
70
|
return false;
|
|
@@ -73,18 +72,18 @@ export class DeterministicMap<K, V> {
|
|
|
73
72
|
|
|
74
73
|
public clear(): void {
|
|
75
74
|
this.map.clear();
|
|
76
|
-
this.#
|
|
75
|
+
this.#keys = [];
|
|
77
76
|
}
|
|
78
77
|
|
|
79
78
|
public forEach(callback: (value: V, key: K, map: DeterministicMap<K, V>) => void): void {
|
|
80
|
-
for (const key of this.#
|
|
79
|
+
for (const key of this.#keys) {
|
|
81
80
|
const value = this.map.get(key) as V;
|
|
82
81
|
callback(value, key, this);
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
84
|
|
|
86
85
|
*[Symbol.iterator](): IterableIterator<[K, V]> {
|
|
87
|
-
for (const key of this.#
|
|
86
|
+
for (const key of this.#keys) {
|
|
88
87
|
yield [key, this.map.get(key) as V];
|
|
89
88
|
}
|
|
90
89
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { i32 } from '../utils/types.js';
|
|
2
|
+
|
|
3
|
+
export class Map<K, V> {
|
|
4
|
+
protected _keys: K[] = [];
|
|
5
|
+
protected _values: V[] = [];
|
|
6
|
+
|
|
7
|
+
public get size(): i32 {
|
|
8
|
+
return this._keys.length;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public *keys(): IterableIterator<K> {
|
|
12
|
+
yield* this._keys;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public *values(): IterableIterator<V> {
|
|
16
|
+
yield* this._values;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public *entries(): IterableIterator<[K, V]> {
|
|
20
|
+
for (let i: i32 = 0; i < this._keys.length; i++) {
|
|
21
|
+
yield [this._keys[i], this._values[i]];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public set(key: K, value: V): void {
|
|
26
|
+
const index: i32 = this.indexOf(key);
|
|
27
|
+
if (index == -1) {
|
|
28
|
+
this._keys.push(key);
|
|
29
|
+
this._values.push(value);
|
|
30
|
+
} else {
|
|
31
|
+
this._values[index] = value;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public indexOf(key: K): i32 {
|
|
36
|
+
for (let i: i32 = 0; i < this._keys.length; i++) {
|
|
37
|
+
if (this._keys[i] == key) {
|
|
38
|
+
return i;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return -1;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public get(key: K): V | undefined {
|
|
46
|
+
const index: i32 = this.indexOf(key);
|
|
47
|
+
if (index == -1) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return this._values[index];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public has(key: K): boolean {
|
|
54
|
+
return this.indexOf(key) != -1;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public delete(key: K): boolean {
|
|
58
|
+
const index: i32 = this.indexOf(key);
|
|
59
|
+
if (index == -1) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
this._keys.splice(index, 1);
|
|
64
|
+
this._values.splice(index, 1);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public clear(): void {
|
|
69
|
+
this._keys = [];
|
|
70
|
+
this._values = [];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
*[Symbol.iterator](): IterableIterator<[K, V]> {
|
|
74
|
+
for (let i: i32 = 0; i < this._keys.length; i++) {
|
|
75
|
+
yield [this._keys[i], this._values[i]];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
package/src/opnet.ts
CHANGED
|
@@ -125,6 +125,8 @@ export * from './transaction/browser/Web3Provider.js';
|
|
|
125
125
|
export * from './keypair/Secp256k1PointDeriver.js';
|
|
126
126
|
export * from './transaction/ContractAddress.js';
|
|
127
127
|
|
|
128
|
+
export * from './deterministic/Map.js';
|
|
129
|
+
|
|
128
130
|
declare global {
|
|
129
131
|
interface Window {
|
|
130
132
|
unisat?: Unisat;
|