@ch20026103/anysis 0.0.16-beta → 0.0.16-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/analyze/SwingExtremes/index.d.ts +4 -1
- package/dist/cjs/analyze/SwingExtremes/index.js +17 -40
- package/dist/cjs/analyze/SwingExtremes/index.test.js +18 -4
- package/dist/cjs/stockSkills/utils/dateFormat.d.ts +3 -6
- package/dist/cjs/stockSkills/utils/dateFormat.js +9 -14
- package/dist/esm/analyze/SwingExtremes/index.d.ts +4 -1
- package/dist/esm/analyze/SwingExtremes/index.js +17 -40
- package/dist/esm/analyze/SwingExtremes/index.test.js +18 -4
- package/dist/esm/stockSkills/utils/dateFormat.d.ts +3 -6
- package/dist/esm/stockSkills/utils/dateFormat.js +9 -14
- package/dist/umd/index.js +26 -54
- package/package.json +1 -1
|
@@ -5,5 +5,8 @@ export declare enum SwingExtremesType {
|
|
|
5
5
|
type Index = number;
|
|
6
6
|
export declare function findPeaksByGradient(prices: number[], level?: number): Index[];
|
|
7
7
|
export declare function findTroughByGradient(prices: number[], level?: number): Index[];
|
|
8
|
-
export declare function SwingExtremes(y: number[],
|
|
8
|
+
export declare function SwingExtremes(y: number[], level?: number): {
|
|
9
|
+
index: Index;
|
|
10
|
+
type: SwingExtremesType;
|
|
11
|
+
}[];
|
|
9
12
|
export {};
|
|
@@ -60,48 +60,25 @@ function findTroughByGradient(prices, level) {
|
|
|
60
60
|
return troughs;
|
|
61
61
|
}
|
|
62
62
|
exports.findTroughByGradient = findTroughByGradient;
|
|
63
|
-
function SwingExtremes(y,
|
|
63
|
+
function SwingExtremes(y, level) {
|
|
64
64
|
if (level === void 0) { level = 1; }
|
|
65
|
-
|
|
66
|
-
var
|
|
67
|
-
var
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
else
|
|
80
|
-
result.push(indexs[i]);
|
|
81
|
-
}
|
|
82
|
-
return result;
|
|
83
|
-
}
|
|
84
|
-
if (type === SwingExtremesType.Trough) {
|
|
85
|
-
var result = [];
|
|
86
|
-
var indexs = findTroughByGradient(y, level);
|
|
87
|
-
result.push(indexs[0]);
|
|
88
|
-
for (var i = 1; i < indexs.length; i++) {
|
|
89
|
-
if (y[indexs[i]] < y[result[result.length - 1]] &&
|
|
90
|
-
y[indexs[i]] < y[result[result.length - 2]]) {
|
|
91
|
-
result[result.length - 1] = indexs[i];
|
|
92
|
-
}
|
|
93
|
-
else if (y[indexs[i + 1]] > y[i] &&
|
|
94
|
-
y[indexs[i]] < y[result[result.length - 1]]) {
|
|
95
|
-
result.pop();
|
|
96
|
-
result.push(indexs[i]);
|
|
97
|
-
}
|
|
98
|
-
else
|
|
99
|
-
result.push(indexs[i]);
|
|
100
|
-
}
|
|
101
|
-
return result;
|
|
65
|
+
try {
|
|
66
|
+
var peaks = findPeaksByGradient(y, level);
|
|
67
|
+
var peakObjs = peaks.map(function (index) { return ({
|
|
68
|
+
index: index,
|
|
69
|
+
type: SwingExtremesType.Peak,
|
|
70
|
+
}); });
|
|
71
|
+
var troughs = findTroughByGradient(y, level);
|
|
72
|
+
var troughObjs = troughs.map(function (index) { return ({
|
|
73
|
+
index: index,
|
|
74
|
+
type: SwingExtremesType.Trough,
|
|
75
|
+
}); });
|
|
76
|
+
var merge = peakObjs.concat(troughObjs);
|
|
77
|
+
return merge.sort(function (a, b) { return a.index - b.index; });
|
|
102
78
|
}
|
|
103
|
-
|
|
104
|
-
|
|
79
|
+
catch (err) {
|
|
80
|
+
console.error(err);
|
|
81
|
+
return [];
|
|
105
82
|
}
|
|
106
83
|
}
|
|
107
84
|
exports.SwingExtremes = SwingExtremes;
|
|
@@ -16,11 +16,25 @@ describe("test SwingExtremes", function () {
|
|
|
16
16
|
expect(res).toEqual([2, 5, 8, 12, 14]);
|
|
17
17
|
});
|
|
18
18
|
it("test SwingExtremes Peak", function () {
|
|
19
|
-
var
|
|
20
|
-
|
|
19
|
+
var arr = (0, index_1.SwingExtremes)(prices);
|
|
20
|
+
var res = arr.filter(function (x) { return x.type === index_1.SwingExtremesType.Peak; });
|
|
21
|
+
expect(res).toEqual([
|
|
22
|
+
{ index: 1, type: "Peak" },
|
|
23
|
+
{ index: 4, type: "Peak" },
|
|
24
|
+
{ index: 6, type: "Peak" },
|
|
25
|
+
{ index: 10, type: "Peak" },
|
|
26
|
+
{ index: 13, type: "Peak" },
|
|
27
|
+
]);
|
|
21
28
|
});
|
|
22
29
|
it("test SwingExtremes Trough", function () {
|
|
23
|
-
var
|
|
24
|
-
|
|
30
|
+
var arr = (0, index_1.SwingExtremes)(prices);
|
|
31
|
+
var res = arr.filter(function (x) { return x.type === index_1.SwingExtremesType.Trough; });
|
|
32
|
+
expect(res).toEqual([
|
|
33
|
+
{ index: 2, type: "Trough" },
|
|
34
|
+
{ index: 5, type: "Trough" },
|
|
35
|
+
{ index: 8, type: "Trough" },
|
|
36
|
+
{ index: 12, type: "Trough" },
|
|
37
|
+
{ index: 14, type: "Trough" },
|
|
38
|
+
]);
|
|
25
39
|
});
|
|
26
40
|
});
|
|
@@ -6,10 +6,7 @@ export declare enum Mode {
|
|
|
6
6
|
TimeStampToNumber = 5,
|
|
7
7
|
StringToNumber = 6
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
declare function dateFormat(date:
|
|
12
|
-
declare function dateFormat(date: number, mode: Mode.TimeStampToString): string;
|
|
13
|
-
declare function dateFormat(date: number, mode: Mode.TimeStampToNumber): number;
|
|
14
|
-
declare function dateFormat(date: string, mode: Mode.StringToNumber): number;
|
|
9
|
+
type DateFormatInput<M extends Mode> = M extends Mode.NumberToString | Mode.NumberToTimeStamp | Mode.TimeStampToString | Mode.TimeStampToNumber ? number : M extends Mode.StringToTimeStamp | Mode.StringToNumber ? string : never;
|
|
10
|
+
type DateFormatOutput<M extends Mode> = M extends Mode.NumberToString | Mode.TimeStampToString ? string : M extends Mode.NumberToTimeStamp | Mode.StringToTimeStamp | Mode.TimeStampToNumber | Mode.StringToNumber ? number : never;
|
|
11
|
+
declare function dateFormat<M extends Mode>(date: DateFormatInput<M>, mode: M): DateFormatOutput<M>;
|
|
15
12
|
export default dateFormat;
|
|
@@ -13,15 +13,13 @@ var Mode;
|
|
|
13
13
|
function dateFormat(date, mode) {
|
|
14
14
|
switch (mode) {
|
|
15
15
|
case Mode.NumberToString: {
|
|
16
|
-
var input = date.
|
|
17
|
-
|
|
18
|
-
return res;
|
|
16
|
+
var input = String(date).padStart(8, "0");
|
|
17
|
+
return "".concat(input.slice(0, 4), "-").concat(input.slice(4, 6), "-").concat(input.slice(6, 8));
|
|
19
18
|
}
|
|
20
19
|
case Mode.NumberToTimeStamp: {
|
|
21
|
-
var input = date.
|
|
22
|
-
var stringDate = input.slice(0, 4)
|
|
23
|
-
|
|
24
|
-
return res;
|
|
20
|
+
var input = String(date).padStart(8, "0");
|
|
21
|
+
var stringDate = "".concat(input.slice(0, 4), "-").concat(input.slice(4, 6), "-").concat(input.slice(6, 8));
|
|
22
|
+
return new Date(stringDate).getTime();
|
|
25
23
|
}
|
|
26
24
|
case Mode.StringToTimeStamp: {
|
|
27
25
|
var res = Date.parse(date);
|
|
@@ -40,15 +38,12 @@ function dateFormat(date, mode) {
|
|
|
40
38
|
case Mode.TimeStampToNumber: {
|
|
41
39
|
var newDate = new Date(date);
|
|
42
40
|
var yy = newDate.getFullYear();
|
|
43
|
-
var mm = newDate.getMonth() + 1
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var dd = newDate.getDate() < 10 ? "0" + newDate.getDate() : newDate.getDate();
|
|
47
|
-
var res = "".concat(yy).concat(mm).concat(dd);
|
|
48
|
-
return parseInt(res);
|
|
41
|
+
var mm = String(newDate.getMonth() + 1).padStart(2, "0");
|
|
42
|
+
var dd = String(newDate.getDate()).padStart(2, "0");
|
|
43
|
+
return parseInt("".concat(yy).concat(mm).concat(dd), 10);
|
|
49
44
|
}
|
|
50
45
|
case Mode.StringToNumber: {
|
|
51
|
-
var res = date.replace(/-/g,
|
|
46
|
+
var res = date.replace(/-/g, "");
|
|
52
47
|
return parseInt(res);
|
|
53
48
|
}
|
|
54
49
|
default:
|
|
@@ -5,5 +5,8 @@ export declare enum SwingExtremesType {
|
|
|
5
5
|
type Index = number;
|
|
6
6
|
export declare function findPeaksByGradient(prices: number[], level?: number): Index[];
|
|
7
7
|
export declare function findTroughByGradient(prices: number[], level?: number): Index[];
|
|
8
|
-
export declare function SwingExtremes(y: number[],
|
|
8
|
+
export declare function SwingExtremes(y: number[], level?: number): {
|
|
9
|
+
index: Index;
|
|
10
|
+
type: SwingExtremesType;
|
|
11
|
+
}[];
|
|
9
12
|
export {};
|
|
@@ -55,47 +55,24 @@ export function findTroughByGradient(prices, level) {
|
|
|
55
55
|
}
|
|
56
56
|
return troughs;
|
|
57
57
|
}
|
|
58
|
-
export function SwingExtremes(y,
|
|
58
|
+
export function SwingExtremes(y, level) {
|
|
59
59
|
if (level === void 0) { level = 1; }
|
|
60
|
-
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
else
|
|
75
|
-
result.push(indexs[i]);
|
|
76
|
-
}
|
|
77
|
-
return result;
|
|
78
|
-
}
|
|
79
|
-
if (type === SwingExtremesType.Trough) {
|
|
80
|
-
var result = [];
|
|
81
|
-
var indexs = findTroughByGradient(y, level);
|
|
82
|
-
result.push(indexs[0]);
|
|
83
|
-
for (var i = 1; i < indexs.length; i++) {
|
|
84
|
-
if (y[indexs[i]] < y[result[result.length - 1]] &&
|
|
85
|
-
y[indexs[i]] < y[result[result.length - 2]]) {
|
|
86
|
-
result[result.length - 1] = indexs[i];
|
|
87
|
-
}
|
|
88
|
-
else if (y[indexs[i + 1]] > y[i] &&
|
|
89
|
-
y[indexs[i]] < y[result[result.length - 1]]) {
|
|
90
|
-
result.pop();
|
|
91
|
-
result.push(indexs[i]);
|
|
92
|
-
}
|
|
93
|
-
else
|
|
94
|
-
result.push(indexs[i]);
|
|
95
|
-
}
|
|
96
|
-
return result;
|
|
60
|
+
try {
|
|
61
|
+
var peaks = findPeaksByGradient(y, level);
|
|
62
|
+
var peakObjs = peaks.map(function (index) { return ({
|
|
63
|
+
index: index,
|
|
64
|
+
type: SwingExtremesType.Peak,
|
|
65
|
+
}); });
|
|
66
|
+
var troughs = findTroughByGradient(y, level);
|
|
67
|
+
var troughObjs = troughs.map(function (index) { return ({
|
|
68
|
+
index: index,
|
|
69
|
+
type: SwingExtremesType.Trough,
|
|
70
|
+
}); });
|
|
71
|
+
var merge = peakObjs.concat(troughObjs);
|
|
72
|
+
return merge.sort(function (a, b) { return a.index - b.index; });
|
|
97
73
|
}
|
|
98
|
-
|
|
99
|
-
|
|
74
|
+
catch (err) {
|
|
75
|
+
console.error(err);
|
|
76
|
+
return [];
|
|
100
77
|
}
|
|
101
78
|
}
|
|
@@ -14,11 +14,25 @@ describe("test SwingExtremes", function () {
|
|
|
14
14
|
expect(res).toEqual([2, 5, 8, 12, 14]);
|
|
15
15
|
});
|
|
16
16
|
it("test SwingExtremes Peak", function () {
|
|
17
|
-
var
|
|
18
|
-
|
|
17
|
+
var arr = SwingExtremes(prices);
|
|
18
|
+
var res = arr.filter(function (x) { return x.type === SwingExtremesType.Peak; });
|
|
19
|
+
expect(res).toEqual([
|
|
20
|
+
{ index: 1, type: "Peak" },
|
|
21
|
+
{ index: 4, type: "Peak" },
|
|
22
|
+
{ index: 6, type: "Peak" },
|
|
23
|
+
{ index: 10, type: "Peak" },
|
|
24
|
+
{ index: 13, type: "Peak" },
|
|
25
|
+
]);
|
|
19
26
|
});
|
|
20
27
|
it("test SwingExtremes Trough", function () {
|
|
21
|
-
var
|
|
22
|
-
|
|
28
|
+
var arr = SwingExtremes(prices);
|
|
29
|
+
var res = arr.filter(function (x) { return x.type === SwingExtremesType.Trough; });
|
|
30
|
+
expect(res).toEqual([
|
|
31
|
+
{ index: 2, type: "Trough" },
|
|
32
|
+
{ index: 5, type: "Trough" },
|
|
33
|
+
{ index: 8, type: "Trough" },
|
|
34
|
+
{ index: 12, type: "Trough" },
|
|
35
|
+
{ index: 14, type: "Trough" },
|
|
36
|
+
]);
|
|
23
37
|
});
|
|
24
38
|
});
|
|
@@ -6,10 +6,7 @@ export declare enum Mode {
|
|
|
6
6
|
TimeStampToNumber = 5,
|
|
7
7
|
StringToNumber = 6
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
declare function dateFormat(date:
|
|
12
|
-
declare function dateFormat(date: number, mode: Mode.TimeStampToString): string;
|
|
13
|
-
declare function dateFormat(date: number, mode: Mode.TimeStampToNumber): number;
|
|
14
|
-
declare function dateFormat(date: string, mode: Mode.StringToNumber): number;
|
|
9
|
+
type DateFormatInput<M extends Mode> = M extends Mode.NumberToString | Mode.NumberToTimeStamp | Mode.TimeStampToString | Mode.TimeStampToNumber ? number : M extends Mode.StringToTimeStamp | Mode.StringToNumber ? string : never;
|
|
10
|
+
type DateFormatOutput<M extends Mode> = M extends Mode.NumberToString | Mode.TimeStampToString ? string : M extends Mode.NumberToTimeStamp | Mode.StringToTimeStamp | Mode.TimeStampToNumber | Mode.StringToNumber ? number : never;
|
|
11
|
+
declare function dateFormat<M extends Mode>(date: DateFormatInput<M>, mode: M): DateFormatOutput<M>;
|
|
15
12
|
export default dateFormat;
|
|
@@ -10,15 +10,13 @@ export var Mode;
|
|
|
10
10
|
function dateFormat(date, mode) {
|
|
11
11
|
switch (mode) {
|
|
12
12
|
case Mode.NumberToString: {
|
|
13
|
-
var input = date.
|
|
14
|
-
|
|
15
|
-
return res;
|
|
13
|
+
var input = String(date).padStart(8, "0");
|
|
14
|
+
return "".concat(input.slice(0, 4), "-").concat(input.slice(4, 6), "-").concat(input.slice(6, 8));
|
|
16
15
|
}
|
|
17
16
|
case Mode.NumberToTimeStamp: {
|
|
18
|
-
var input = date.
|
|
19
|
-
var stringDate = input.slice(0, 4)
|
|
20
|
-
|
|
21
|
-
return res;
|
|
17
|
+
var input = String(date).padStart(8, "0");
|
|
18
|
+
var stringDate = "".concat(input.slice(0, 4), "-").concat(input.slice(4, 6), "-").concat(input.slice(6, 8));
|
|
19
|
+
return new Date(stringDate).getTime();
|
|
22
20
|
}
|
|
23
21
|
case Mode.StringToTimeStamp: {
|
|
24
22
|
var res = Date.parse(date);
|
|
@@ -37,15 +35,12 @@ function dateFormat(date, mode) {
|
|
|
37
35
|
case Mode.TimeStampToNumber: {
|
|
38
36
|
var newDate = new Date(date);
|
|
39
37
|
var yy = newDate.getFullYear();
|
|
40
|
-
var mm = newDate.getMonth() + 1
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
var dd = newDate.getDate() < 10 ? "0" + newDate.getDate() : newDate.getDate();
|
|
44
|
-
var res = "".concat(yy).concat(mm).concat(dd);
|
|
45
|
-
return parseInt(res);
|
|
38
|
+
var mm = String(newDate.getMonth() + 1).padStart(2, "0");
|
|
39
|
+
var dd = String(newDate.getDate()).padStart(2, "0");
|
|
40
|
+
return parseInt("".concat(yy).concat(mm).concat(dd), 10);
|
|
46
41
|
}
|
|
47
42
|
case Mode.StringToNumber: {
|
|
48
|
-
var res = date.replace(/-/g,
|
|
43
|
+
var res = date.replace(/-/g, "");
|
|
49
44
|
return parseInt(res);
|
|
50
45
|
}
|
|
51
46
|
default:
|
package/dist/umd/index.js
CHANGED
|
@@ -178,48 +178,25 @@
|
|
|
178
178
|
}
|
|
179
179
|
return troughs;
|
|
180
180
|
}
|
|
181
|
-
function SwingExtremes(y,
|
|
181
|
+
function SwingExtremes(y, level) {
|
|
182
182
|
if (level === void 0) { level = 1; }
|
|
183
|
-
|
|
184
|
-
var
|
|
185
|
-
var
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
else
|
|
198
|
-
result.push(indexs[i]);
|
|
199
|
-
}
|
|
200
|
-
return result;
|
|
201
|
-
}
|
|
202
|
-
if (type === exports.SwingExtremesType.Trough) {
|
|
203
|
-
var result = [];
|
|
204
|
-
var indexs = findTroughByGradient(y, level);
|
|
205
|
-
result.push(indexs[0]);
|
|
206
|
-
for (var i = 1; i < indexs.length; i++) {
|
|
207
|
-
if (y[indexs[i]] < y[result[result.length - 1]] &&
|
|
208
|
-
y[indexs[i]] < y[result[result.length - 2]]) {
|
|
209
|
-
result[result.length - 1] = indexs[i];
|
|
210
|
-
}
|
|
211
|
-
else if (y[indexs[i + 1]] > y[i] &&
|
|
212
|
-
y[indexs[i]] < y[result[result.length - 1]]) {
|
|
213
|
-
result.pop();
|
|
214
|
-
result.push(indexs[i]);
|
|
215
|
-
}
|
|
216
|
-
else
|
|
217
|
-
result.push(indexs[i]);
|
|
218
|
-
}
|
|
219
|
-
return result;
|
|
183
|
+
try {
|
|
184
|
+
var peaks = findPeaksByGradient(y, level);
|
|
185
|
+
var peakObjs = peaks.map(function (index) { return ({
|
|
186
|
+
index: index,
|
|
187
|
+
type: exports.SwingExtremesType.Peak,
|
|
188
|
+
}); });
|
|
189
|
+
var troughs = findTroughByGradient(y, level);
|
|
190
|
+
var troughObjs = troughs.map(function (index) { return ({
|
|
191
|
+
index: index,
|
|
192
|
+
type: exports.SwingExtremesType.Trough,
|
|
193
|
+
}); });
|
|
194
|
+
var merge = peakObjs.concat(troughObjs);
|
|
195
|
+
return merge.sort(function (a, b) { return a.index - b.index; });
|
|
220
196
|
}
|
|
221
|
-
|
|
222
|
-
|
|
197
|
+
catch (err) {
|
|
198
|
+
console.error(err);
|
|
199
|
+
return [];
|
|
223
200
|
}
|
|
224
201
|
}
|
|
225
202
|
|
|
@@ -1517,15 +1494,13 @@
|
|
|
1517
1494
|
function dateFormat(date, mode) {
|
|
1518
1495
|
switch (mode) {
|
|
1519
1496
|
case Mode.NumberToString: {
|
|
1520
|
-
var input = date.
|
|
1521
|
-
|
|
1522
|
-
return res;
|
|
1497
|
+
var input = String(date).padStart(8, "0");
|
|
1498
|
+
return "".concat(input.slice(0, 4), "-").concat(input.slice(4, 6), "-").concat(input.slice(6, 8));
|
|
1523
1499
|
}
|
|
1524
1500
|
case Mode.NumberToTimeStamp: {
|
|
1525
|
-
var input = date.
|
|
1526
|
-
var stringDate = input.slice(0, 4)
|
|
1527
|
-
|
|
1528
|
-
return res;
|
|
1501
|
+
var input = String(date).padStart(8, "0");
|
|
1502
|
+
var stringDate = "".concat(input.slice(0, 4), "-").concat(input.slice(4, 6), "-").concat(input.slice(6, 8));
|
|
1503
|
+
return new Date(stringDate).getTime();
|
|
1529
1504
|
}
|
|
1530
1505
|
case Mode.StringToTimeStamp: {
|
|
1531
1506
|
var res = Date.parse(date);
|
|
@@ -1544,15 +1519,12 @@
|
|
|
1544
1519
|
case Mode.TimeStampToNumber: {
|
|
1545
1520
|
var newDate = new Date(date);
|
|
1546
1521
|
var yy = newDate.getFullYear();
|
|
1547
|
-
var mm = newDate.getMonth() + 1
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
var dd = newDate.getDate() < 10 ? "0" + newDate.getDate() : newDate.getDate();
|
|
1551
|
-
var res = "".concat(yy).concat(mm).concat(dd);
|
|
1552
|
-
return parseInt(res);
|
|
1522
|
+
var mm = String(newDate.getMonth() + 1).padStart(2, "0");
|
|
1523
|
+
var dd = String(newDate.getDate()).padStart(2, "0");
|
|
1524
|
+
return parseInt("".concat(yy).concat(mm).concat(dd), 10);
|
|
1553
1525
|
}
|
|
1554
1526
|
case Mode.StringToNumber: {
|
|
1555
|
-
var res = date.replace(/-/g,
|
|
1527
|
+
var res = date.replace(/-/g, "");
|
|
1556
1528
|
return parseInt(res);
|
|
1557
1529
|
}
|
|
1558
1530
|
default:
|