@taquito/taquito 20.1.2 → 21.0.0-RC.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/lib/constants.js +4 -1
- package/dist/lib/read-provider/rpc-read-adapter.js +13 -2
- package/dist/lib/subscribe/filters.js +0 -2
- package/dist/lib/subscribe/polling-subcribe-provider.js +1 -3
- package/dist/lib/tz/rpc-tz-provider.js +9 -0
- package/dist/lib/version.js +2 -2
- package/dist/taquito.es6.js +29 -10
- package/dist/taquito.es6.js.map +1 -1
- package/dist/taquito.min.js +2 -0
- package/dist/taquito.min.js.LICENSE.txt +12 -0
- package/dist/taquito.umd.js +29 -10
- package/dist/taquito.umd.js.map +1 -1
- package/dist/types/constants.d.ts +4 -1
- package/dist/types/read-provider/interface.d.ts +9 -2
- package/dist/types/read-provider/rpc-read-adapter.d.ts +9 -2
- package/dist/types/signer/interface.d.ts +1 -1
- package/dist/types/tz/interface.d.ts +5 -0
- package/dist/types/tz/rpc-tz-provider.d.ts +1 -0
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ The `@taquito/taquito` package contains higher-level functionality that builds u
|
|
|
7
7
|
## CDN Bundle
|
|
8
8
|
|
|
9
9
|
```html
|
|
10
|
-
<script src="https://unpkg.com/@taquito/taquito@
|
|
10
|
+
<script src="https://unpkg.com/@taquito/taquito@21.0.0-RC.0/dist/taquito.min.js"
|
|
11
11
|
crossorigin="anonymous" integrity="sha384-IxvP0ECHi5oqLyz94wF85pU9+ktcsL1HHtA42MITxZsGbsUMEu/g+0Vkjj5vqiMR"></script>
|
|
12
12
|
```
|
|
13
13
|
|
package/dist/lib/constants.js
CHANGED
|
@@ -73,6 +73,7 @@ var Protocols;
|
|
|
73
73
|
Protocols["ProxfordY"] = "ProxfordYmVfjWnRcgjWH36fW6PArwqykTFzotUxRs6gmTcZDuH";
|
|
74
74
|
Protocols["PtParisBx"] = "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ";
|
|
75
75
|
Protocols["PsParisCZ"] = "PsParisCZo7KAh1Z1smVd9ZMZ1HHn5gkzbM94V3PLCpknFWhUAi";
|
|
76
|
+
Protocols["PsQuebecn"] = "PsQuebecnLByd3JwTiGadoG4nGWi3HYiLXUjkibeFV8dCFeVMUg";
|
|
76
77
|
Protocols["ProtoALpha"] = "ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK";
|
|
77
78
|
})(Protocols || (exports.Protocols = Protocols = {}));
|
|
78
79
|
exports.protocols = {
|
|
@@ -92,7 +93,8 @@ exports.protocols = {
|
|
|
92
93
|
'017': [Protocols.PtNairobi],
|
|
93
94
|
'019': [Protocols.ProxfordY],
|
|
94
95
|
'020': [Protocols.PtParisBx, Protocols.PsParisCZ],
|
|
95
|
-
'021': [Protocols.
|
|
96
|
+
'021': [Protocols.PsQuebecn],
|
|
97
|
+
'022': [Protocols.ProtoALpha],
|
|
96
98
|
};
|
|
97
99
|
var ChainIds;
|
|
98
100
|
(function (ChainIds) {
|
|
@@ -114,6 +116,7 @@ var ChainIds;
|
|
|
114
116
|
ChainIds["OXFORDNET2"] = "NetXxWsskGahzQB";
|
|
115
117
|
ChainIds["PARISBNET"] = "NetXo8SqH1c38SS";
|
|
116
118
|
ChainIds["PARISCNET"] = "NetXXWAHLEvre9b";
|
|
119
|
+
ChainIds["PsQuebecn"] = "NetXuTeGinLEqxp";
|
|
117
120
|
})(ChainIds || (exports.ChainIds = ChainIds = {}));
|
|
118
121
|
// A fixed fee reveal operation gasLimit accepted by both simulate and injection endpoint is between 1.2-5 times of actual gas consumption (3.5 fails occasionally with gas exhausted; 4 fails occasionally with fee too low)
|
|
119
122
|
const getRevealGasLimit = (address) => Math.round((getRevealGasLimitInternal(address) * 37) / 10);
|
|
@@ -18,8 +18,8 @@ class RpcReadAdapter {
|
|
|
18
18
|
this.rpc = rpc;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* @description
|
|
22
|
-
* @param address address from which we want to retrieve the balance
|
|
21
|
+
* @description The spendable balance of a contract (in mutez), also known as liquid balance. Corresponds to tez owned by the contract that are neither staked, nor in unstaked requests, nor in frozen bonds. Identical to the 'spendable' RPC.
|
|
22
|
+
* @param address address from which we want to retrieve the spendable balance
|
|
23
23
|
* @param block from which we want to retrieve the balance
|
|
24
24
|
* @returns the balance in mutez
|
|
25
25
|
*/
|
|
@@ -28,6 +28,17 @@ class RpcReadAdapter {
|
|
|
28
28
|
return this.rpc.getBalance(address, { block: String(block) });
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* @description The spendable balance of a contract (in mutez), also known as liquid balance. Corresponds to tez owned by the contract that are neither staked, nor in unstaked requests, nor in frozen bonds. Identical to the 'balance' RPC.
|
|
33
|
+
* @param address address from which we want to retrieve the spendable balance
|
|
34
|
+
* @param block from which we want to retrieve the balance
|
|
35
|
+
* @returns the balance in mutez
|
|
36
|
+
*/
|
|
37
|
+
getSpendable(address, block) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
return this.rpc.getSpendable(address, { block: String(block) });
|
|
40
|
+
});
|
|
41
|
+
}
|
|
31
42
|
/**
|
|
32
43
|
* @description Access the delegate of a contract, if any.
|
|
33
44
|
* @param address contract address from which we want to retrieve the delegate (baker)
|
|
@@ -7,8 +7,6 @@ const sourceFilter = (x, filter) => {
|
|
|
7
7
|
switch (x.kind) {
|
|
8
8
|
case 'attestation':
|
|
9
9
|
return 'metadata' in x && x.metadata.delegate === filter.source;
|
|
10
|
-
case 'endorsement':
|
|
11
|
-
return 'metadata' in x && x.metadata.delegate === filter.source;
|
|
12
10
|
case 'activate_account':
|
|
13
11
|
return 'metadata' in x && x.pkh === filter.source;
|
|
14
12
|
default:
|
|
@@ -84,9 +84,7 @@ class PollingSubscribeProvider {
|
|
|
84
84
|
const constants = yield this.context.readProvider.getProtocolConstants('head');
|
|
85
85
|
const blockTime = constants.minimal_block_delay
|
|
86
86
|
? constants.minimal_block_delay.multipliedBy(1000)
|
|
87
|
-
:
|
|
88
|
-
? constants.time_between_blocks[0].multipliedBy(1000)
|
|
89
|
-
: new bignumber_js_1.default(defaultIntervalTestnetsMainnet);
|
|
87
|
+
: new bignumber_js_1.default(defaultIntervalTestnetsMainnet);
|
|
90
88
|
const confirmationPollingInterval = blockTime.dividedBy(3);
|
|
91
89
|
this.config.pollingIntervalMilliseconds =
|
|
92
90
|
confirmationPollingInterval.toNumber() === 0
|
|
@@ -29,6 +29,15 @@ class RpcTzProvider extends provider_1.Provider {
|
|
|
29
29
|
return this.context.readProvider.getBalance(address, 'head');
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
+
getSpendable(address) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const addressValidation = (0, utils_1.validateAddress)(address);
|
|
35
|
+
if (addressValidation !== utils_1.ValidationResult.VALID) {
|
|
36
|
+
throw new core_1.InvalidAddressError(address, (0, utils_1.invalidDetail)(addressValidation));
|
|
37
|
+
}
|
|
38
|
+
return this.context.readProvider.getSpendable(address, 'head');
|
|
39
|
+
});
|
|
40
|
+
}
|
|
32
41
|
getDelegate(address) {
|
|
33
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
34
43
|
const addressValidation = (0, utils_1.validateAddress)(address);
|
package/dist/lib/version.js
CHANGED
|
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
4
|
// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
|
|
5
5
|
exports.VERSION = {
|
|
6
|
-
"commitHash": "
|
|
7
|
-
"version": "
|
|
6
|
+
"commitHash": "721b5ae690b0a3df4a0148901f1529da553bb5da",
|
|
7
|
+
"version": "21.0.0-RC.0"
|
|
8
8
|
};
|
package/dist/taquito.es6.js
CHANGED
|
@@ -236,6 +236,7 @@ var Protocols;
|
|
|
236
236
|
Protocols["ProxfordY"] = "ProxfordYmVfjWnRcgjWH36fW6PArwqykTFzotUxRs6gmTcZDuH";
|
|
237
237
|
Protocols["PtParisBx"] = "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ";
|
|
238
238
|
Protocols["PsParisCZ"] = "PsParisCZo7KAh1Z1smVd9ZMZ1HHn5gkzbM94V3PLCpknFWhUAi";
|
|
239
|
+
Protocols["PsQuebecn"] = "PsQuebecnLByd3JwTiGadoG4nGWi3HYiLXUjkibeFV8dCFeVMUg";
|
|
239
240
|
Protocols["ProtoALpha"] = "ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK";
|
|
240
241
|
})(Protocols || (Protocols = {}));
|
|
241
242
|
const protocols = {
|
|
@@ -255,7 +256,8 @@ const protocols = {
|
|
|
255
256
|
'017': [Protocols.PtNairobi],
|
|
256
257
|
'019': [Protocols.ProxfordY],
|
|
257
258
|
'020': [Protocols.PtParisBx, Protocols.PsParisCZ],
|
|
258
|
-
'021': [Protocols.
|
|
259
|
+
'021': [Protocols.PsQuebecn],
|
|
260
|
+
'022': [Protocols.ProtoALpha],
|
|
259
261
|
};
|
|
260
262
|
var ChainIds;
|
|
261
263
|
(function (ChainIds) {
|
|
@@ -277,6 +279,7 @@ var ChainIds;
|
|
|
277
279
|
ChainIds["OXFORDNET2"] = "NetXxWsskGahzQB";
|
|
278
280
|
ChainIds["PARISBNET"] = "NetXo8SqH1c38SS";
|
|
279
281
|
ChainIds["PARISCNET"] = "NetXXWAHLEvre9b";
|
|
282
|
+
ChainIds["PsQuebecn"] = "NetXuTeGinLEqxp";
|
|
280
283
|
})(ChainIds || (ChainIds = {}));
|
|
281
284
|
// A fixed fee reveal operation gasLimit accepted by both simulate and injection endpoint is between 1.2-5 times of actual gas consumption (3.5 fails occasionally with gas exhausted; 4 fails occasionally with fee too low)
|
|
282
285
|
const getRevealGasLimit = (address) => Math.round((getRevealGasLimitInternal(address) * 37) / 10);
|
|
@@ -4017,6 +4020,15 @@ class RpcTzProvider extends Provider {
|
|
|
4017
4020
|
return this.context.readProvider.getBalance(address, 'head');
|
|
4018
4021
|
});
|
|
4019
4022
|
}
|
|
4023
|
+
getSpendable(address) {
|
|
4024
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
4025
|
+
const addressValidation = validateAddress(address);
|
|
4026
|
+
if (addressValidation !== ValidationResult.VALID) {
|
|
4027
|
+
throw new InvalidAddressError(address, invalidDetail(addressValidation));
|
|
4028
|
+
}
|
|
4029
|
+
return this.context.readProvider.getSpendable(address, 'head');
|
|
4030
|
+
});
|
|
4031
|
+
}
|
|
4020
4032
|
getDelegate(address) {
|
|
4021
4033
|
return __awaiter(this, void 0, void 0, function* () {
|
|
4022
4034
|
const addressValidation = validateAddress(address);
|
|
@@ -6220,8 +6232,8 @@ class RpcReadAdapter {
|
|
|
6220
6232
|
this.rpc = rpc;
|
|
6221
6233
|
}
|
|
6222
6234
|
/**
|
|
6223
|
-
* @description
|
|
6224
|
-
* @param address address from which we want to retrieve the balance
|
|
6235
|
+
* @description The spendable balance of a contract (in mutez), also known as liquid balance. Corresponds to tez owned by the contract that are neither staked, nor in unstaked requests, nor in frozen bonds. Identical to the 'spendable' RPC.
|
|
6236
|
+
* @param address address from which we want to retrieve the spendable balance
|
|
6225
6237
|
* @param block from which we want to retrieve the balance
|
|
6226
6238
|
* @returns the balance in mutez
|
|
6227
6239
|
*/
|
|
@@ -6230,6 +6242,17 @@ class RpcReadAdapter {
|
|
|
6230
6242
|
return this.rpc.getBalance(address, { block: String(block) });
|
|
6231
6243
|
});
|
|
6232
6244
|
}
|
|
6245
|
+
/**
|
|
6246
|
+
* @description The spendable balance of a contract (in mutez), also known as liquid balance. Corresponds to tez owned by the contract that are neither staked, nor in unstaked requests, nor in frozen bonds. Identical to the 'balance' RPC.
|
|
6247
|
+
* @param address address from which we want to retrieve the spendable balance
|
|
6248
|
+
* @param block from which we want to retrieve the balance
|
|
6249
|
+
* @returns the balance in mutez
|
|
6250
|
+
*/
|
|
6251
|
+
getSpendable(address, block) {
|
|
6252
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
6253
|
+
return this.rpc.getSpendable(address, { block: String(block) });
|
|
6254
|
+
});
|
|
6255
|
+
}
|
|
6233
6256
|
/**
|
|
6234
6257
|
* @description Access the delegate of a contract, if any.
|
|
6235
6258
|
* @param address contract address from which we want to retrieve the delegate (baker)
|
|
@@ -6447,8 +6470,6 @@ const sourceFilter = (x, filter) => {
|
|
|
6447
6470
|
switch (x.kind) {
|
|
6448
6471
|
case 'attestation':
|
|
6449
6472
|
return 'metadata' in x && x.metadata.delegate === filter.source;
|
|
6450
|
-
case 'endorsement':
|
|
6451
|
-
return 'metadata' in x && x.metadata.delegate === filter.source;
|
|
6452
6473
|
case 'activate_account':
|
|
6453
6474
|
return 'metadata' in x && x.pkh === filter.source;
|
|
6454
6475
|
default:
|
|
@@ -6673,9 +6694,7 @@ class PollingSubscribeProvider {
|
|
|
6673
6694
|
const constants = yield this.context.readProvider.getProtocolConstants('head');
|
|
6674
6695
|
const blockTime = constants.minimal_block_delay
|
|
6675
6696
|
? constants.minimal_block_delay.multipliedBy(1000)
|
|
6676
|
-
:
|
|
6677
|
-
? constants.time_between_blocks[0].multipliedBy(1000)
|
|
6678
|
-
: new BigNumber(defaultIntervalTestnetsMainnet);
|
|
6697
|
+
: new BigNumber(defaultIntervalTestnetsMainnet);
|
|
6679
6698
|
const confirmationPollingInterval = blockTime.dividedBy(3);
|
|
6680
6699
|
this.config.pollingIntervalMilliseconds =
|
|
6681
6700
|
confirmationPollingInterval.toNumber() === 0
|
|
@@ -6879,8 +6898,8 @@ class Context {
|
|
|
6879
6898
|
|
|
6880
6899
|
// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
|
|
6881
6900
|
const VERSION = {
|
|
6882
|
-
"commitHash": "
|
|
6883
|
-
"version": "
|
|
6901
|
+
"commitHash": "721b5ae690b0a3df4a0148901f1529da553bb5da",
|
|
6902
|
+
"version": "21.0.0-RC.0"
|
|
6884
6903
|
};
|
|
6885
6904
|
|
|
6886
6905
|
/**
|
package/dist/taquito.es6.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taquito.es6.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"taquito.es6.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|