@gamepark/odin 0.0.3 → 0.0.5
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/ChangePlayerRule.d.ts +6 -0
- package/dist/ChangePlayerRule.js +62 -0
- package/dist/OdinRules.d.ts +2 -0
- package/dist/OdinRules.js +2 -0
- package/dist/rules/CustomMoveType.d.ts +2 -1
- package/dist/rules/CustomMoveType.js +1 -0
- package/dist/rules/EndOfRoundRule.js +4 -2
- package/dist/rules/PickCardRule.d.ts +3 -3
- package/dist/rules/PickCardRule.js +2 -23
- package/dist/rules/PlayCardsRule.d.ts +2 -2
- package/dist/rules/PlayCardsRule.js +14 -10
- package/dist/rules/RuleId.d.ts +2 -1
- package/dist/rules/RuleId.js +1 -0
- package/dist/rules/helper/SortHelper.d.ts +4 -0
- package/dist/rules/helper/SortHelper.js +35 -0
- package/package.json +3 -3
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MaterialMove, PlayerTurnRule } from '@gamepark/rules-api';
|
|
2
|
+
export declare class ChangePlayerRule extends PlayerTurnRule {
|
|
3
|
+
onRuleStart(): MaterialMove<number, number, number, number>[];
|
|
4
|
+
get currentTable(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
5
|
+
get nextTable(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ChangePlayerRule = void 0;
|
|
19
|
+
var rules_api_1 = require("@gamepark/rules-api");
|
|
20
|
+
var LocationType_1 = require("./material/LocationType");
|
|
21
|
+
var MaterialType_1 = require("./material/MaterialType");
|
|
22
|
+
var RuleId_1 = require("./rules/RuleId");
|
|
23
|
+
var ChangePlayerRule = (function (_super) {
|
|
24
|
+
__extends(ChangePlayerRule, _super);
|
|
25
|
+
function ChangePlayerRule() {
|
|
26
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
27
|
+
}
|
|
28
|
+
ChangePlayerRule.prototype.onRuleStart = function () {
|
|
29
|
+
var moves = [];
|
|
30
|
+
var currentTable = this.currentTable;
|
|
31
|
+
if (currentTable.length) {
|
|
32
|
+
moves.push(this.currentTable.moveItemsAtOnce({
|
|
33
|
+
type: LocationType_1.LocationType.Discard
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
var nextTable = this.nextTable;
|
|
37
|
+
if (nextTable.length) {
|
|
38
|
+
moves.push(nextTable.moveItemsAtOnce({
|
|
39
|
+
type: LocationType_1.LocationType.MiddleOfTable,
|
|
40
|
+
id: LocationType_1.MiddleOfTable.Current
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
moves.push(this.startPlayerTurn(RuleId_1.RuleId.PlayCards, this.nextPlayer));
|
|
44
|
+
return moves;
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(ChangePlayerRule.prototype, "currentTable", {
|
|
47
|
+
get: function () {
|
|
48
|
+
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.MiddleOfTable).locationId(LocationType_1.MiddleOfTable.Current);
|
|
49
|
+
},
|
|
50
|
+
enumerable: false,
|
|
51
|
+
configurable: true
|
|
52
|
+
});
|
|
53
|
+
Object.defineProperty(ChangePlayerRule.prototype, "nextTable", {
|
|
54
|
+
get: function () {
|
|
55
|
+
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.MiddleOfTable).locationId(LocationType_1.MiddleOfTable.Next);
|
|
56
|
+
},
|
|
57
|
+
enumerable: false,
|
|
58
|
+
configurable: true
|
|
59
|
+
});
|
|
60
|
+
return ChangePlayerRule;
|
|
61
|
+
}(rules_api_1.PlayerTurnRule));
|
|
62
|
+
exports.ChangePlayerRule = ChangePlayerRule;
|
package/dist/OdinRules.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CompetitiveScore, CustomMove, FillGapStrategy, MaterialGame, MaterialMove, PlayMoveContext, PositiveSequenceStrategy, SecretMaterialRules, TimeLimit } from '@gamepark/rules-api';
|
|
2
|
+
import { ChangePlayerRule } from './ChangePlayerRule';
|
|
2
3
|
import { LocationType } from './material/LocationType';
|
|
3
4
|
import { MaterialType } from './material/MaterialType';
|
|
4
5
|
import { PlayerId } from './PlayerId';
|
|
@@ -11,6 +12,7 @@ export declare class OdinRules extends SecretMaterialRules<PlayerId, MaterialTyp
|
|
|
11
12
|
1: typeof PlayCardsRule;
|
|
12
13
|
4: typeof DealCardsRule;
|
|
13
14
|
2: typeof PickCardRule;
|
|
15
|
+
5: typeof ChangePlayerRule;
|
|
14
16
|
3: typeof EndOfRoundRule;
|
|
15
17
|
};
|
|
16
18
|
hidingStrategies: {
|
package/dist/OdinRules.js
CHANGED
|
@@ -17,6 +17,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.OdinRules = void 0;
|
|
19
19
|
var rules_api_1 = require("@gamepark/rules-api");
|
|
20
|
+
var ChangePlayerRule_1 = require("./ChangePlayerRule");
|
|
20
21
|
var LocationType_1 = require("./material/LocationType");
|
|
21
22
|
var MaterialType_1 = require("./material/MaterialType");
|
|
22
23
|
var CustomMoveType_1 = require("./rules/CustomMoveType");
|
|
@@ -36,6 +37,7 @@ var OdinRules = (function (_super) {
|
|
|
36
37
|
_a[RuleId_1.RuleId.PlayCards] = PlayCardsRule_1.PlayCardsRule,
|
|
37
38
|
_a[RuleId_1.RuleId.DealCards] = DealCardsRule_1.DealCardsRule,
|
|
38
39
|
_a[RuleId_1.RuleId.PickCard] = PickCardRule_1.PickCardRule,
|
|
40
|
+
_a[RuleId_1.RuleId.ChangePlayer] = ChangePlayerRule_1.ChangePlayerRule,
|
|
39
41
|
_a[RuleId_1.RuleId.EndOfRound] = EndOfRoundRule_1.EndOfRoundRule,
|
|
40
42
|
_a);
|
|
41
43
|
_this.hidingStrategies = (_b = {},
|
|
@@ -6,4 +6,5 @@ var CustomMoveType;
|
|
|
6
6
|
CustomMoveType[CustomMoveType["Pass"] = 1] = "Pass";
|
|
7
7
|
CustomMoveType[CustomMoveType["TurnTempo"] = 2] = "TurnTempo";
|
|
8
8
|
CustomMoveType[CustomMoveType["SortHand"] = 3] = "SortHand";
|
|
9
|
+
CustomMoveType[CustomMoveType["PlaceAllCards"] = 4] = "PlaceAllCards";
|
|
9
10
|
})(CustomMoveType = exports.CustomMoveType || (exports.CustomMoveType = {}));
|
|
@@ -59,6 +59,7 @@ var rules_api_1 = require("@gamepark/rules-api");
|
|
|
59
59
|
var sum_1 = __importDefault(require("lodash/sum"));
|
|
60
60
|
var LocationType_1 = require("../material/LocationType");
|
|
61
61
|
var MaterialType_1 = require("../material/MaterialType");
|
|
62
|
+
var CustomMoveType_1 = require("./CustomMoveType");
|
|
62
63
|
var Memory_1 = require("./Memory");
|
|
63
64
|
var RuleId_1 = require("./RuleId");
|
|
64
65
|
var EndOfRoundRule = (function (_super) {
|
|
@@ -67,8 +68,9 @@ var EndOfRoundRule = (function (_super) {
|
|
|
67
68
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
68
69
|
}
|
|
69
70
|
EndOfRoundRule.prototype.onRuleStart = function () {
|
|
70
|
-
var moves = this.
|
|
71
|
-
|
|
71
|
+
var moves = [this.customMove(CustomMoveType_1.CustomMoveType.TurnTempo, true)];
|
|
72
|
+
moves.push.apply(moves, __spreadArray([], __read(this.onRoundEnd()), false));
|
|
73
|
+
if (moves.length === 1) {
|
|
72
74
|
moves.push.apply(moves, __spreadArray([], __read(this.groupToDeckMove), false));
|
|
73
75
|
}
|
|
74
76
|
return moves;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { MaterialMove, MoveItem } from '@gamepark/rules-api';
|
|
2
2
|
import { BasePlayerTurn } from './BasePlayerTurn';
|
|
3
|
+
import { RuleId } from './RuleId';
|
|
3
4
|
export declare class PickCardRule extends BasePlayerTurn {
|
|
4
5
|
onRuleStart(): MaterialMove<number, number, number, number>[];
|
|
5
6
|
get isEndOfRound(): boolean;
|
|
6
7
|
getPlayerMoves(): MaterialMove[];
|
|
7
|
-
afterItemMove(move: MoveItem):
|
|
8
|
-
goToNextRule():
|
|
8
|
+
afterItemMove(move: MoveItem): import("@gamepark/rules-api").StartRule<RuleId.ChangePlayer>[];
|
|
9
|
+
goToNextRule(): import("@gamepark/rules-api").StartRule<RuleId.ChangePlayer>[];
|
|
9
10
|
get currentTable(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
10
|
-
get nextTable(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
11
11
|
}
|
|
@@ -54,7 +54,7 @@ var PickCardRule = (function (_super) {
|
|
|
54
54
|
}
|
|
55
55
|
PickCardRule.prototype.onRuleStart = function () {
|
|
56
56
|
if (this.isEndOfRound) {
|
|
57
|
-
return [this.
|
|
57
|
+
return [this.startRule(RuleId_1.RuleId.EndOfRound)];
|
|
58
58
|
}
|
|
59
59
|
var moves = [this.customMove(CustomMoveType_1.CustomMoveType.TurnTempo)];
|
|
60
60
|
if (this.getPlayerMoves().length)
|
|
@@ -81,21 +81,7 @@ var PickCardRule = (function (_super) {
|
|
|
81
81
|
return this.goToNextRule();
|
|
82
82
|
};
|
|
83
83
|
PickCardRule.prototype.goToNextRule = function () {
|
|
84
|
-
|
|
85
|
-
var currentTable = this.currentTable;
|
|
86
|
-
if (currentTable.length) {
|
|
87
|
-
moves.push(this.currentTable.moveItemsAtOnce({
|
|
88
|
-
type: LocationType_1.LocationType.Discard
|
|
89
|
-
}));
|
|
90
|
-
}
|
|
91
|
-
var nextTable = this.nextTable;
|
|
92
|
-
if (nextTable.length) {
|
|
93
|
-
moves.push(this.nextTable.moveItemsAtOnce({
|
|
94
|
-
id: LocationType_1.MiddleOfTable.Current
|
|
95
|
-
}));
|
|
96
|
-
}
|
|
97
|
-
moves.push(this.startPlayerTurn(RuleId_1.RuleId.PlayCards, this.nextPlayer));
|
|
98
|
-
return moves;
|
|
84
|
+
return [this.startRule(RuleId_1.RuleId.ChangePlayer)];
|
|
99
85
|
};
|
|
100
86
|
Object.defineProperty(PickCardRule.prototype, "currentTable", {
|
|
101
87
|
get: function () {
|
|
@@ -104,13 +90,6 @@ var PickCardRule = (function (_super) {
|
|
|
104
90
|
enumerable: false,
|
|
105
91
|
configurable: true
|
|
106
92
|
});
|
|
107
|
-
Object.defineProperty(PickCardRule.prototype, "nextTable", {
|
|
108
|
-
get: function () {
|
|
109
|
-
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.MiddleOfTable).locationId(LocationType_1.MiddleOfTable.Next);
|
|
110
|
-
},
|
|
111
|
-
enumerable: false,
|
|
112
|
-
configurable: true
|
|
113
|
-
});
|
|
114
93
|
return PickCardRule;
|
|
115
94
|
}(BasePlayerTurn_1.BasePlayerTurn));
|
|
116
95
|
exports.PickCardRule = PickCardRule;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { CustomMove, ItemMove,
|
|
1
|
+
import { CustomMove, ItemMove, MaterialMove } from '@gamepark/rules-api';
|
|
2
2
|
import { Card } from '../material/Card';
|
|
3
3
|
import { BasePlayerTurn } from './BasePlayerTurn';
|
|
4
4
|
export declare class PlayCardsRule extends BasePlayerTurn {
|
|
5
5
|
getPlayerMoves(): MaterialMove<number, number, number, number>[];
|
|
6
|
-
get sort(): ((item: MaterialItem) => number)[];
|
|
7
6
|
get tableValue(): number;
|
|
8
7
|
onCustomMove(move: CustomMove): MaterialMove<number, number, number, number>[];
|
|
9
8
|
afterItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
|
|
10
9
|
goToNextPlayer(): MaterialMove<number, number, number, number>[];
|
|
11
10
|
get firstPlayer(): number;
|
|
12
11
|
get table(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
12
|
+
get nextTable(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
13
13
|
get playableCards(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
14
14
|
get hand(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
15
15
|
kCombinations<T>(arr: T[], k: number): T[][];
|
|
@@ -65,6 +65,7 @@ var LocationType_1 = require("../material/LocationType");
|
|
|
65
65
|
var MaterialType_1 = require("../material/MaterialType");
|
|
66
66
|
var BasePlayerTurn_1 = require("./BasePlayerTurn");
|
|
67
67
|
var CustomMoveType_1 = require("./CustomMoveType");
|
|
68
|
+
var SortHelper_1 = require("./helper/SortHelper");
|
|
68
69
|
var Memory_1 = require("./Memory");
|
|
69
70
|
var RuleId_1 = require("./RuleId");
|
|
70
71
|
var PlayCardsRule = (function (_super) {
|
|
@@ -73,19 +74,19 @@ var PlayCardsRule = (function (_super) {
|
|
|
73
74
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
74
75
|
}
|
|
75
76
|
PlayCardsRule.prototype.getPlayerMoves = function () {
|
|
76
|
-
var _this = this;
|
|
77
77
|
var playableCards = this.playableCards;
|
|
78
78
|
var table = this.table;
|
|
79
79
|
var tableSize = table.length;
|
|
80
80
|
var moves = [];
|
|
81
81
|
var combinations = this.getPlayableCombinations(playableCards.getItems().map(function (item) { return item.id; }), tableSize, this.tableValue);
|
|
82
82
|
var allHandCombination = this.getPlayableCombinations(playableCards.getItems().map(function (item) { return item.id; }), playableCards.length, this.tableValue);
|
|
83
|
+
var sortHelper = new SortHelper_1.SortHelper(this.game);
|
|
83
84
|
if (allHandCombination.length) {
|
|
84
85
|
moves.push.apply(moves, __spreadArray([], __read(allHandCombination.map(function (c) {
|
|
85
86
|
var _a;
|
|
86
87
|
return (_a = playableCards
|
|
87
88
|
.id(function (id) { return c.includes(id); }))
|
|
88
|
-
.sort.apply(_a, __spreadArray([], __read(
|
|
89
|
+
.sort.apply(_a, __spreadArray([], __read(sortHelper.sortByValue), false)).moveItemsAtOnce({
|
|
89
90
|
type: LocationType_1.LocationType.MiddleOfTable,
|
|
90
91
|
id: LocationType_1.MiddleOfTable.Next
|
|
91
92
|
});
|
|
@@ -95,7 +96,7 @@ var PlayCardsRule = (function (_super) {
|
|
|
95
96
|
var _a;
|
|
96
97
|
return (_a = playableCards
|
|
97
98
|
.id(function (id) { return c.includes(id); }))
|
|
98
|
-
.sort.apply(_a, __spreadArray([], __read(
|
|
99
|
+
.sort.apply(_a, __spreadArray([], __read(sortHelper.sortByValue), false)).moveItemsAtOnce({
|
|
99
100
|
type: LocationType_1.LocationType.MiddleOfTable,
|
|
100
101
|
id: LocationType_1.MiddleOfTable.Next
|
|
101
102
|
});
|
|
@@ -105,13 +106,6 @@ var PlayCardsRule = (function (_super) {
|
|
|
105
106
|
}
|
|
106
107
|
return moves;
|
|
107
108
|
};
|
|
108
|
-
Object.defineProperty(PlayCardsRule.prototype, "sort", {
|
|
109
|
-
get: function () {
|
|
110
|
-
return [function (item) { return -(0, Card_1.getCardValue)(item.id); }, function (item) { return (0, Card_1.getCardColor)(item.id); }];
|
|
111
|
-
},
|
|
112
|
-
enumerable: false,
|
|
113
|
-
configurable: true
|
|
114
|
-
});
|
|
115
109
|
Object.defineProperty(PlayCardsRule.prototype, "tableValue", {
|
|
116
110
|
get: function () {
|
|
117
111
|
var table = this.table;
|
|
@@ -132,6 +126,9 @@ var PlayCardsRule = (function (_super) {
|
|
|
132
126
|
return [];
|
|
133
127
|
var moves = [];
|
|
134
128
|
this.memorize(Memory_1.Memory.LastPlayerThatPlay, this.player);
|
|
129
|
+
if (this.hand.length > 0) {
|
|
130
|
+
moves.push(this.customMove(CustomMoveType_1.CustomMoveType.TurnTempo));
|
|
131
|
+
}
|
|
135
132
|
moves.push(this.startRule(RuleId_1.RuleId.PickCard));
|
|
136
133
|
return moves;
|
|
137
134
|
};
|
|
@@ -169,6 +166,13 @@ var PlayCardsRule = (function (_super) {
|
|
|
169
166
|
enumerable: false,
|
|
170
167
|
configurable: true
|
|
171
168
|
});
|
|
169
|
+
Object.defineProperty(PlayCardsRule.prototype, "nextTable", {
|
|
170
|
+
get: function () {
|
|
171
|
+
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.MiddleOfTable).locationId(LocationType_1.MiddleOfTable.Next);
|
|
172
|
+
},
|
|
173
|
+
enumerable: false,
|
|
174
|
+
configurable: true
|
|
175
|
+
});
|
|
172
176
|
Object.defineProperty(PlayCardsRule.prototype, "playableCards", {
|
|
173
177
|
get: function () {
|
|
174
178
|
var _this = this;
|
package/dist/rules/RuleId.d.ts
CHANGED
package/dist/rules/RuleId.js
CHANGED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.SortHelper = void 0;
|
|
19
|
+
var rules_api_1 = require("@gamepark/rules-api");
|
|
20
|
+
var Card_1 = require("../../material/Card");
|
|
21
|
+
var SortHelper = (function (_super) {
|
|
22
|
+
__extends(SortHelper, _super);
|
|
23
|
+
function SortHelper() {
|
|
24
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
25
|
+
}
|
|
26
|
+
Object.defineProperty(SortHelper.prototype, "sortByValue", {
|
|
27
|
+
get: function () {
|
|
28
|
+
return [function (item) { return -(0, Card_1.getCardValue)(item.id); }, function (item) { return (0, Card_1.getCardColor)(item.id); }];
|
|
29
|
+
},
|
|
30
|
+
enumerable: false,
|
|
31
|
+
configurable: true
|
|
32
|
+
});
|
|
33
|
+
return SortHelper;
|
|
34
|
+
}(rules_api_1.MaterialRulesPart));
|
|
35
|
+
exports.SortHelper = SortHelper;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gamepark/odin",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "The rules of Odin adapted for Game Park",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"lodash": ">=4.17"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@gamepark/rules-api": "~6.37.
|
|
27
|
+
"@gamepark/rules-api": "~6.37.8",
|
|
28
28
|
"@types/lodash": "^4.17.7",
|
|
29
29
|
"i18next": "^22.0.3",
|
|
30
30
|
"lodash": "^4.17.21"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "511bef61747cf286673e33a1b5d89db59b2c9795"
|
|
33
33
|
}
|