@dreadwood-types/types 0.1.367 → 0.1.369

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.
Files changed (58) hide show
  1. package/dist/animation.js +1 -1
  2. package/dist/animation.js.map +1 -1
  3. package/dist/attackableNpcs.d.ts.map +1 -1
  4. package/dist/attackableNpcs.js +4 -0
  5. package/dist/attackableNpcs.js.map +1 -1
  6. package/dist/bossSignatures.d.ts +1 -1
  7. package/dist/bossSignatures.d.ts.map +1 -1
  8. package/dist/bossSignatures.js +12 -0
  9. package/dist/bossSignatures.js.map +1 -1
  10. package/dist/campKitchens.d.ts.map +1 -1
  11. package/dist/campKitchens.js +5 -0
  12. package/dist/campKitchens.js.map +1 -1
  13. package/dist/campTraders.d.ts.map +1 -1
  14. package/dist/campTraders.js +14 -0
  15. package/dist/campTraders.js.map +1 -1
  16. package/dist/constants.d.ts +6 -0
  17. package/dist/constants.d.ts.map +1 -1
  18. package/dist/constants.js.map +1 -1
  19. package/dist/expandedContracts.d.ts.map +1 -1
  20. package/dist/expandedContracts.js +2 -1
  21. package/dist/expandedContracts.js.map +1 -1
  22. package/dist/groundItems.d.ts.map +1 -1
  23. package/dist/groundItems.js +2 -0
  24. package/dist/groundItems.js.map +1 -1
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +4 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/ironjawRound.d.ts +313 -0
  30. package/dist/ironjawRound.d.ts.map +1 -0
  31. package/dist/ironjawRound.js +397 -0
  32. package/dist/ironjawRound.js.map +1 -0
  33. package/dist/lamplightCommon.d.ts +350 -0
  34. package/dist/lamplightCommon.d.ts.map +1 -0
  35. package/dist/lamplightCommon.js +350 -0
  36. package/dist/lamplightCommon.js.map +1 -0
  37. package/dist/lamplightQuestDef.d.ts +33 -0
  38. package/dist/lamplightQuestDef.d.ts.map +1 -0
  39. package/dist/lamplightQuestDef.js +165 -0
  40. package/dist/lamplightQuestDef.js.map +1 -0
  41. package/dist/leanRules.d.ts.map +1 -1
  42. package/dist/leanRules.js +3 -0
  43. package/dist/leanRules.js.map +1 -1
  44. package/dist/legacy.d.ts +2 -0
  45. package/dist/legacy.d.ts.map +1 -1
  46. package/dist/legacy.js +2 -0
  47. package/dist/legacy.js.map +1 -1
  48. package/dist/messages.d.ts +6 -0
  49. package/dist/messages.d.ts.map +1 -1
  50. package/dist/messages.js.map +1 -1
  51. package/dist/quests.d.ts.map +1 -1
  52. package/dist/quests.js +31 -0
  53. package/dist/quests.js.map +1 -1
  54. package/dist/storyQuests.d.ts +1 -1
  55. package/dist/storyQuests.d.ts.map +1 -1
  56. package/dist/storyQuests.js +22 -0
  57. package/dist/storyQuests.js.map +1 -1
  58. package/package.json +43 -43
@@ -0,0 +1,397 @@
1
+ /**
2
+ * THE IRONJAW ROUND (wave 3, 2026-10-19; coverage "Held back for wave 3"; design sheets ironjaw-round-1..10; plan
3
+ * `.cursor/task-plans/2026-10-19-ironjaw-round-build.md`; levels 34-38): an outing round the BUILT Ironjaw Watch (ironjawWatch.ts, the safe camp stays exactly as it
4
+ * is) in the PvP Dreadwoods, where other players can attack you outside the lanterns and nobody can eat mid-fight.
5
+ *
6
+ * Tally-Keeper Joss Harrow keeps the Round board at the camp's north edge, OUTSIDE the lanterns. Joss hands out a Round card; you walk a marked loop of about six
7
+ * minutes and stamp THREE TALLY STAKES (the west lookout mound, the east lookout mound, and a new stake on a south-east knoll). Each stamp rings the stake's iron
8
+ * clapper, which CALLS the Round hunters of that quarter (ogres, levels 32-35). A Round counts only if all three are stamped on one CLEAN card (no food that heals
9
+ * eaten since the card was taken: the Lean Rules, leanRules.ts) and the card is handed back within twelve minutes. A counted Round pays coins, a Lean Rules credit
10
+ * in the Explorer's Ledger and a cosmetic Round pennant, and goes on the week's board (the five fastest), read at Joss and at the board itself.
11
+ *
12
+ * Between the stakes the scavenger camp holds COOKPOT GRUMM, an ogre cook with an iron ladle (level 38, a boss's hide, Ladle Sweep every fourth blow), not behind any
13
+ * gate. The Fortress's gate stays sealed; nothing here opens it. Out of the Dragon ring (x 420-507, z 436-523) and Spider Hollow's ellipse.
14
+ *
15
+ * Not built, on James's rules: no bank, no safe post, no shop of any kind and no food on any counter, nothing that heals in a fight, nothing 41+. Every number is a
16
+ * WORLD tile (x east, z south) or a PLACEHOLDER for the balance pass (James, 2026-10-12: balance last). Pure data with no value import beyond the Watch's mounds.
17
+ */
18
+ import { IRONJAW_WATCH, IW_LOOKOUT_EAST, IW_LOOKOUT_WEST } from './ironjawWatch.js';
19
+ import { marksmenWeekKey } from './marksmenRange.js';
20
+ export const IRONJAW_ROUND_NAME = 'The Ironjaw Round';
21
+ export const IRONJAW_ROUND_ID = 'ironjaw-round';
22
+ /** The Round's slice of the world: the Dragon ring (x 420-507, z 436-523) and the Ogre camp (z < 384) are outside it. */
23
+ export const IRONJAW_ROUND_BOX = { minX: 496, maxX: 639, minZ: 384, maxZ: 505 };
24
+ const inBox = (b, x, z) => x >= b.minX && x <= b.maxX && z >= b.minZ && z <= b.maxZ;
25
+ export function inIronjawRoundBox(x, z) {
26
+ return inBox(IRONJAW_ROUND_BOX, Math.floor(x), Math.floor(z));
27
+ }
28
+ // ---- The card, the clock, the prize ------------------------------------------------------------------------------------------------------------
29
+ /** The Round's rules: all numbers are placeholders. */
30
+ export const IR_MIN_COMBAT = 30;
31
+ /** Hand the card back within this long of taking it. */
32
+ export const IR_LIMIT_MS = 12 * 60_000;
33
+ /** A Round can never be walked faster than this (a teleport or a shortcut cannot be a counted Round): the loop is about 350 tiles. */
34
+ export const IR_MIN_ROUND_MS = 90_000;
35
+ /** A card nobody touched for this long is forgotten (a running card is judged at its limit, not this). */
36
+ export const IR_SESSION_GRACE_MS = 2 * 60_000;
37
+ /** How close you must be to Joss to take or hand in a card, and to a stake to stamp it (tiles, Chebyshev). */
38
+ export const IR_JOSS_REACH = 5;
39
+ export const IR_STAKE_REACH = 4;
40
+ /** A counted Round pays once a window per name (a Round is always free to walk again, and always counts for the board and the Ledger). */
41
+ export const IR_PRIZE_WINDOW_MS = 30 * 60_000;
42
+ export const IR_PRIZE = { coins: 360, explorerXp: 120 };
43
+ /** The Ledger mark of a counted Round (the Lean page, leanRules.ts). */
44
+ export const IR_LEAN_MARK = 'lean:ironjaw-round';
45
+ /** The cosmetic pennant (a plain bag item; one held at a time). */
46
+ export const IR_PENNANT_KIND = 'ironjawpennant';
47
+ export const IR_PENNANT_NAME = 'Ironjaw Round Pennant';
48
+ export const IR_PENNANT_DESC = 'A small red and iron pennant on a stick, given to anyone who has walked the Ironjaw Round on a clean card. Cosmetic: it does nothing but say so.';
49
+ // ---- The stakes ----------------------------------------------------------------------------------------------------------------------------------
50
+ export const IR_PROP = { stake: 'irstake', board: 'irboard' };
51
+ /** Stake 1 and 2 stand on the Watch's own lookout mounds, one tile north of the mound's centre so the centre stays standable (ironjawWatch.ts IW_LOOKOUT_WEST / EAST); stake 3 on the new south-east knoll. */
52
+ export const IR_STAKES = [
53
+ { n: 1, id: 'ir-stake-1', label: IW_LOOKOUT_WEST.label, x: IW_LOOKOUT_WEST.x, z: IW_LOOKOUT_WEST.z - 1, quarter: { minX: 470, maxX: 525, minZ: 386, maxZ: 424 }, style: `${IR_PROP.stake}:1` },
54
+ { n: 2, id: 'ir-stake-2', label: IW_LOOKOUT_EAST.label, x: IW_LOOKOUT_EAST.x, z: IW_LOOKOUT_EAST.z - 1, quarter: { minX: 560, maxX: 625, minZ: 386, maxZ: 424 }, style: `${IR_PROP.stake}:2` },
55
+ { n: 3, id: 'ir-stake-3', label: 'the south-east knoll', x: 598, z: 484, quarter: { minX: 575, maxX: 639, minZ: 440, maxZ: 505 }, style: `${IR_PROP.stake}:3` },
56
+ ];
57
+ export function irStakeByStyle(style) {
58
+ return typeof style === 'string' ? IR_STAKES.find((s) => s.style === style) : undefined;
59
+ }
60
+ export function irStakeById(id) {
61
+ return typeof id === 'string' ? IR_STAKES.find((s) => s.id === id) : undefined;
62
+ }
63
+ export const IR_STAKE_NAMES = {
64
+ [IR_STAKES[0].style]: 'Tally Stake (west lookout)',
65
+ [IR_STAKES[1].style]: 'Tally Stake (east lookout)',
66
+ [IR_STAKES[2].style]: 'Tally Stake (south-east knoll)',
67
+ };
68
+ // ---- The board, the rack and the trail ----------------------------------------------------------------------------------------------------------
69
+ /** The Round board and the tally rack stand at the Watch's north edge, OUTSIDE the lanterns (the safe pocket's north row is z 428). */
70
+ export const IR_BOARD = { id: 'ir-board', x: 545, z: 424, style: `${IR_PROP.board}:1`, name: 'The Round Board' };
71
+ export const IR_RACK = { id: 'ir-rack', x: 537, z: 424, model: 'toolrack-s' };
72
+ export const IR_QUEST_PROP_NAMES = { ...IR_STAKE_NAMES, [IR_BOARD.style]: IR_BOARD.name };
73
+ export const IR_PROP_VERBS = { [IR_PROP.stake]: 'Stamp', [IR_PROP.board]: 'Read' };
74
+ /** The model a Round prop is drawn with (storyQuests.ts questPropModel): the tally post, and the Watch's starter board. */
75
+ export function ironjawRoundPropModel(prop) {
76
+ if (prop === IR_PROP.stake)
77
+ return 'landingpost';
78
+ if (prop === IR_PROP.board)
79
+ return 'starterboard';
80
+ return null;
81
+ }
82
+ export function isIronjawRoundProp(style) {
83
+ const p = (style ?? '').split(':')[0];
84
+ return p === IR_PROP.stake || p === IR_PROP.board;
85
+ }
86
+ /**
87
+ * The loop, as the corners of the trail that is trodden to dirt two tiles wide (the Ironjaw track's east and west arms, z 396-398, are the north run and stay
88
+ * as they are). Clockwise from the board: west to stake 1, east to stake 2, down the east side to stake 3 and back by the Watch's north-east corner.
89
+ */
90
+ export const IR_TRAIL = [
91
+ [{ x: 538, z: 423 }, { x: 522, z: 419 }, { x: 508, z: 409 }, { x: 498, z: 398 }, { x: 496, z: 395 }],
92
+ [{ x: 507, z: 397 }, { x: 509, z: 399 }],
93
+ [{ x: 584, z: 396 }, { x: 592, z: 410 }, { x: 597, z: 430 }, { x: 601, z: 450 }, { x: 601, z: 470 }, { x: 598, z: 483 }],
94
+ [{ x: 598, z: 483 }, { x: 588, z: 474 }, { x: 574, z: 457 }, { x: 560, z: 440 }, { x: 556, z: 430 }, { x: 548, z: 424 }],
95
+ ];
96
+ /** The painted waymark stones with the red band, as signs along the trail: where to go next. */
97
+ export const IR_WAYMARKS = [
98
+ { id: 'ir-way-1', x: 528, z: 421, text: 'Round waymark 1 of 12: the Round runs west first, to the west lookout mound. Out here anyone can attack you.' },
99
+ { id: 'ir-way-2', x: 514, z: 412, text: 'Round waymark 2 of 12: keep to the red band. Dead-tree thickets on both sides are good cover for whoever is waiting.' },
100
+ { id: 'ir-way-3', x: 501, z: 402, text: 'Round waymark 3 of 12: the west lookout mound, stake 1, is just ahead. Ironjaw hunters walk this ground.' },
101
+ { id: 'ir-way-4', x: 524, z: 395, text: 'Round waymark 4 of 12: east along the old track toward the east lookout mound. The Fortress to the north is sealed; keep clear of its outposts.' },
102
+ { id: 'ir-way-5', x: 556, z: 395, text: 'Round waymark 5 of 12: the ogre scavengers keep a camp south of this track, with a cook. Do not wander in unless you mean to fight.' },
103
+ { id: 'ir-way-6', x: 574, z: 395, text: 'Round waymark 6 of 12: the east lookout mound, stake 2, is ahead. Ring its clapper and the hunters in this quarter will hear it.' },
104
+ { id: 'ir-way-7', x: 594, z: 414, text: 'Round waymark 7 of 12: south along the east side. Keep your pace: the card is good for twelve minutes.' },
105
+ { id: 'ir-way-8', x: 600, z: 444, text: 'Round waymark 8 of 12: a dip with dead trees lies west of the trail. Look before you walk past it.' },
106
+ { id: 'ir-way-9', x: 603, z: 466, text: 'Round waymark 9 of 12: the south-east knoll, stake 3, is ahead. Lookout Perrin Staves watches it.' },
107
+ { id: 'ir-way-10', x: 588, z: 477, text: 'Round waymark 10 of 12: back toward the lanterns by the north-east corner. Stamp all three stakes before you hand in the card.' },
108
+ { id: 'ir-way-11', x: 572, z: 455, text: 'Round waymark 11 of 12: Spider Hollow lies to the south-west. This trail stays clear of it.' },
109
+ { id: 'ir-way-12', x: 558, z: 434, text: 'Round waymark 12 of 12: the Round board and Joss Harrow wait at the Watch\'s north edge. Hand in the card there, and do not eat first.' },
110
+ ];
111
+ /** Five ambush dips: a cleared pocket (radius 2) ringed with dead trees and rock piles with a gap or two, beside the trail. */
112
+ export const IR_DIPS = [
113
+ { id: 'ir-dip-1', name: 'the Ash Hollow', x: 519, z: 431 },
114
+ { id: 'ir-dip-2', name: 'the Charred Dip', x: 509, z: 389 },
115
+ { id: 'ir-dip-3', name: 'the Cut', x: 587, z: 434 },
116
+ { id: 'ir-dip-4', name: 'the East Thicket', x: 611, z: 460 },
117
+ { id: 'ir-dip-5', name: 'the Knoll Foot', x: 580, z: 489 },
118
+ ];
119
+ export const IR_DIP_POCKET = 2;
120
+ export const IR_DIP_RING = 4;
121
+ // ---- The scavenger camp --------------------------------------------------------------------------------------------------------------------------
122
+ export const IR_CAMP_NAME = "Grumm's Camp";
123
+ export const IR_CAMP_CENTRE = { x: 570, z: 414 };
124
+ /** The camp's ground (cleared of wild props; the scavengers lock on only to a player inside it). */
125
+ export const IR_CAMP_BOX = { minX: 558, maxX: 582, minZ: 402, maxZ: 426 };
126
+ export function inIronjawRoundCamp(x, z) {
127
+ return inBox(IR_CAMP_BOX, Math.floor(x), Math.floor(z));
128
+ }
129
+ const model = (id, name, x, z, scale) => ({ id, kind: 'dreadmodel', style: `${name}-s`, x, z, ...(scale ? { scale } : {}) });
130
+ /** Stand-ins from the Dreadwoods kit (logged on the upgrades list as `ironjaw-round-*`): the pot, spits, sacks, bone piles, the wrecked wagon and the ogre banners. */
131
+ export const IR_CAMP_PIECES = [
132
+ { id: 'ir-camp-fire', kind: 'campfire', style: 'beach-pit', x: 570, z: 416, scale: 1.3 },
133
+ model('ir-camp-pot', 'potioncauldron', 570, 415, 2.2),
134
+ model('ir-camp-spit-w', 'meatrack', 565, 413),
135
+ model('ir-camp-spit-e', 'meatrack', 575, 413),
136
+ model('ir-camp-sack-1', 'hubsack', 563, 418),
137
+ model('ir-camp-sack-2', 'hubsack', 577, 418),
138
+ model('ir-camp-sack-3', 'hubsack', 566, 420),
139
+ model('ir-camp-stack', 'evcratestack', 574, 421),
140
+ model('ir-camp-bones-w', 'bonetusks', 563, 408),
141
+ model('ir-camp-bones-e', 'bonetusks', 578, 408),
142
+ { id: 'ir-camp-bones-1', kind: 'dreadprop', style: 'bones', x: 572, z: 421 },
143
+ { id: 'ir-camp-bones-2', kind: 'dreadprop', style: 'bones', x: 562, z: 412 },
144
+ model('ir-camp-wagon', 'hbtinkerwagon', 579, 422, 1.2),
145
+ model('ir-camp-banner-w', 'ogrebanner', 562, 405),
146
+ model('ir-camp-banner-e', 'ogrebanner', 579, 405),
147
+ model('ir-camp-skull-1', 'skullstake', 560, 417),
148
+ model('ir-camp-skull-2', 'skullstake', 581, 413),
149
+ { id: 'ir-camp-barrel', kind: 'barrel', style: 'barrel', x: 568, z: 419, scale: 1 },
150
+ { id: 'ir-camp-sign', kind: 'signpost', style: `placard-${IR_CAMP_NAME}: an Ironjaw scavengers' camp. The cook keeps the pot. Level 34 to 38. No lanterns here: players can attack you.`, x: 568, z: 400, scale: 1.1 },
151
+ ];
152
+ export const IR_JOSS_NAME = 'Tally-Keeper Joss Harrow';
153
+ export const IR_EDDA_NAME = 'Wagon-Wright Edda Kirk';
154
+ export const IR_PERRIN_NAME = 'Lookout Perrin Staves';
155
+ export const IR_TILDA_NAME = 'Camp Cook Tilda Brant';
156
+ /** Scout-Captain Maren Voss already lives at the Watch (ironjawWatch.ts IRONJAW_CAPTAIN_NAME): her Round-day coat is art, on the upgrades list. */
157
+ export const IR_MAREN_NAME = 'Scout-Captain Maren Voss';
158
+ /** The Round's rules in words (Joss reads them, the board repeats them, the guide quotes them). */
159
+ export const IR_RULES_TEXT = `A Round is one card and three stamps: the west lookout mound, the east lookout mound and the south-east knoll. Take a card from me (Combat ${IR_MIN_COMBAT} and over), walk the loop and touch each stake; the clapper rings and the Ironjaw hunters in that quarter hear it. Walk back to me within ${IR_LIMIT_MS / 60_000} minutes with all three stamps and no food eaten since you took the card. Nobody can eat in a fight out there, so eat before you take the card, not after. Eating, being beaten, leaving the Dreadwoods or logging out spoils the card. A clean Round pays coins, a Lean Rules credit and a pennant, and the week's five fastest go on the board.`;
160
+ export const IR_FOLK = [
161
+ {
162
+ id: 'ir-joss',
163
+ name: IR_JOSS_NAME,
164
+ place: "the Round board at the Ironjaw Watch's north edge",
165
+ x: 541, z: 425, faceX: 541, faceZ: 420, leash: 1,
166
+ speak: "Joss Harrow, tally-keeper. I keep the Round: a card, three stakes and a clock. I stand out here at the board because a card handed in at the lanterns is a card that never left them. Count your stamps; I will.",
167
+ extras: [
168
+ { id: 'rules', label: 'The rules', say: IR_RULES_TEXT },
169
+ { id: 'stakes', label: 'The stakes', say: 'Three stakes: the west lookout mound, the east lookout mound and the knoll south-east of the Watch. Each has an iron clapper that rings when stamped and calls the hunters in that quarter. Red-banded waymark stones show the trail.' },
170
+ ],
171
+ },
172
+ {
173
+ id: 'ir-edda',
174
+ name: IR_EDDA_NAME,
175
+ place: "the wagon at the Round board, the Ironjaw Watch's north edge",
176
+ x: 548, z: 425, faceX: 551, faceZ: 424, leash: 1,
177
+ speak: "Edda Kirk, wagon-wright. I keep the Watch's wagons rolling and I cut the stakes out on the mounds, which is how I know every one of them is bolted down. The scavengers' wrecked wagon in the middle of the loop was mine once. Do not ask.",
178
+ extras: [
179
+ { id: 'wagon', label: 'The wrecked wagon', say: "The scavengers dragged my supply wagon into Grumm's camp and have been picking it apart for the iron. The axle is the only part worth having. Nobody is paying me to fetch it, so I stay here and mend what I still own." },
180
+ ],
181
+ },
182
+ {
183
+ id: 'ir-perrin',
184
+ name: IR_PERRIN_NAME,
185
+ place: 'the south-east knoll, stake 3',
186
+ x: 596, z: 481, faceX: 598, faceZ: 484, leash: 1,
187
+ speak: "Perrin Staves, lookout. I watch the knoll and I watch the loop from it, and I will tell you for nothing that the quiet stretches are the dangerous ones. Anybody waiting in a dip is waiting for somebody carrying a card.",
188
+ extras: [
189
+ { id: 'dips', label: 'About the dips', say: 'Five dips along the trail, each a hollow ringed with dead trees. They are good for hiding and no good for fighting out of: only two ways in, and the trees do not move. Whoever is in one has to wait, and you do not.' },
190
+ ],
191
+ },
192
+ {
193
+ id: 'ir-tilda',
194
+ name: IR_TILDA_NAME,
195
+ place: 'the Ironjaw Watch, by the cook fire',
196
+ x: 544, z: 441, faceX: 541, faceZ: 438, leash: 1,
197
+ speak: "Tilda Brant. Hettie has the pot and the counter; I do the lean cooking, which is mostly telling people to eat BEFORE they walk. A full belly at the lanterns, an empty bag of tricks on the trail. Nobody eats mid-fight in the Dreadwoods, and a Round card that has seen a mouthful is a card for the fire.",
198
+ extras: [
199
+ { id: 'lean', label: 'The Lean Rules', say: "Eat and drink all you want inside the lanterns, take the card, then leave it alone: food that heals spoils the card, the same as it spoils a lean kill. Regeneration is not a heal. A clean Round goes in the Explorer's Ledger on the Lean page." },
200
+ ],
201
+ },
202
+ ];
203
+ export function irFolkByName(name) {
204
+ return name ? IR_FOLK.find((p) => p.name === name) ?? null : null;
205
+ }
206
+ export function irFolkById(id) {
207
+ return id ? IR_FOLK.find((p) => p.id === id) ?? null : null;
208
+ }
209
+ // ---- Joss's menu -------------------------------------------------------------------------------------------------------------------------------
210
+ /** npc_action ids Joss answers (the client sends them on untouched). */
211
+ export const IR_ACTION_PREFIX = 'iround:';
212
+ export const IR_ACTIONS = {
213
+ begin: 'iround:begin',
214
+ handin: 'iround:handin',
215
+ status: 'iround:status',
216
+ board: 'iround:board',
217
+ stop: 'iround:stop',
218
+ };
219
+ export const IR_OPTION_LABELS = {
220
+ [IR_ACTIONS.begin]: 'Take a Round card',
221
+ [IR_ACTIONS.handin]: 'Hand in my card',
222
+ [IR_ACTIONS.status]: 'How is my card?',
223
+ [IR_ACTIONS.board]: "This week's board",
224
+ [IR_ACTIONS.stop]: 'Give back my card',
225
+ };
226
+ /** What the Round says (the customer's words, not the code's). */
227
+ export const IR_LINES = {
228
+ tooEarly: `The Round is for hunters of Combat ${IR_MIN_COMBAT} and over. The ground out there has ogres and other players on it. Come back when you are ready.`,
229
+ inFight: 'Finish your fight first.',
230
+ taken: `Card taken. Three stakes to stamp and ${IR_LIMIT_MS / 60_000} minutes to hand it back, with no food eaten since this moment. Eat first next time, not now.`,
231
+ alreadyRunning: 'You already carry a card, and its clock is running. Finish that one, or give it back first.',
232
+ noCard: 'You carry no Round card. Take one from Joss Harrow at the board.',
233
+ stopped: 'Card given back. Nothing is scored and nothing is paid.',
234
+ spoiled: 'That card is spoiled. Give it back and take a fresh one.',
235
+ late: 'That card is past its twelve minutes. Give it back and take a fresh one.',
236
+ incomplete: 'The card does not have all three stamps yet.',
237
+ tooFast: 'Those stamps are fresher than any boots could make them. The card is not counted.',
238
+ tooFar: 'Come closer to the stake to stamp it.',
239
+ stampedAlready: 'This stake is already stamped on your card.',
240
+ stampNoCard: 'The stake takes no stamp: you carry no Round card. Joss Harrow hands them out at the board.',
241
+ stampSpoiled: 'The stake takes no stamp: your card is spoiled. Give it back and take a fresh one.',
242
+ stampLate: 'The stake takes no stamp: your card is past its twelve minutes.',
243
+ called: 'The clapper rings out over the burnt ground. Somewhere an ogre lifts its head.',
244
+ noRound: 'You carry no card.',
245
+ };
246
+ export const IR_SPOIL_REASONS = {
247
+ ate: 'you ate food that healed',
248
+ defeated: 'you were beaten',
249
+ left: 'you left the Dreadwoods',
250
+ gone: 'you logged out',
251
+ };
252
+ export function irSpoiledLine(reason) {
253
+ return `Your Round card is spoiled: ${IR_SPOIL_REASONS[reason]}. Give it back to Joss Harrow and take a fresh one.`;
254
+ }
255
+ /** Minutes and seconds of a span, "4m 07s". */
256
+ export function irClockText(ms) {
257
+ const s = Math.max(0, Math.round(ms / 1000));
258
+ return `${Math.floor(s / 60)}m ${String(s % 60).padStart(2, '0')}s`;
259
+ }
260
+ // ---- The clapper calls the hunters --------------------------------------------------------------------------------------------------------------
261
+ /** How long a stamp's clapper keeps the quarter's Round hunters called, how far they will chase while called, and their notice when it is quiet. */
262
+ export const IR_CALL_MS = 40_000;
263
+ export const IR_CALLED_AGGRO = 30;
264
+ export const IR_CALLED_LEASH = 46;
265
+ export const IR_QUIET_AGGRO = 6;
266
+ export const IR_QUIET_LEASH = 14;
267
+ export const IR_HUNTER_ID_PREFIX = 'ijr-h';
268
+ export const IR_HUNTER_LEVEL = { min: 32, max: 35 };
269
+ export const IR_HUNTER_MAX_HIT = 18;
270
+ export const IR_HUNTER_SCALE = 0.92;
271
+ /** Two Round hunters rest in each quarter, a dozen tiles from the stake: they stand still and unaware until the clapper rings. */
272
+ export const IR_HUNTERS = [
273
+ { stake: 1, x: 484, z: 406 }, { stake: 1, x: 489, z: 410 },
274
+ { stake: 2, x: 596, z: 408 }, { stake: 2, x: 591, z: 412 },
275
+ { stake: 3, x: 612, z: 472 }, { stake: 3, x: 607, z: 477 },
276
+ ];
277
+ export function irHunterId(i) {
278
+ return `${IR_HUNTER_ID_PREFIX}${i + 1}`;
279
+ }
280
+ export function isIrHunterId(id) {
281
+ return typeof id === 'string' && id.startsWith(IR_HUNTER_ID_PREFIX);
282
+ }
283
+ /** The stake (1-3) whose quarter a Round hunter belongs to, from its id; undefined otherwise. */
284
+ export function irHunterStake(id) {
285
+ if (!isIrHunterId(id))
286
+ return undefined;
287
+ const i = Number(id.slice(IR_HUNTER_ID_PREFIX.length)) - 1;
288
+ return IR_HUNTERS[i]?.stake;
289
+ }
290
+ /** The scavengers (smaller ogres with a sack and a hooked pole): they lock on only to a player inside the camp. */
291
+ export const IR_SCAVENGER_ID_PREFIX = 'ijr-s';
292
+ export const IR_SCAVENGER_LEVEL = { min: 33, max: 36 };
293
+ export const IR_SCAVENGER_MAX_HIT = 17;
294
+ export const IR_SCAVENGER_SCALE = 0.8;
295
+ export const IR_SCAVENGERS = [
296
+ { x: 565, z: 410 }, { x: 576, z: 410 }, { x: 564, z: 417 }, { x: 577, z: 417 },
297
+ ];
298
+ export function isIrScavengerId(id) {
299
+ return typeof id === 'string' && id.startsWith(IR_SCAVENGER_ID_PREFIX);
300
+ }
301
+ export function isIronjawRoundNpcId(id) {
302
+ return isIrHunterId(id) || isIrScavengerId(id) || id === COOKPOT_GRUMM.id;
303
+ }
304
+ export const IR_HUNT_NOTICE_CALLED = 'The clapper has called the hunters: an Ironjaw hunter comes for you!';
305
+ export const IR_HUNT_NOTICE_QUIET = 'An Ironjaw hunter hefts its club and comes for you!';
306
+ export const IR_SCAVENGER_NOTICE = 'An Ironjaw scavenger swings its hooked pole and comes for you!';
307
+ // ---- Cookpot Grumm ---------------------------------------------------------------------------------------------------------------------------
308
+ export const COOKPOT_GRUMM_KIND = 'cookpotgrumm';
309
+ export const COOKPOT_GRUMM_NAME = 'Cookpot Grumm';
310
+ export const COOKPOT_GRUMM = {
311
+ id: 'ijr-grumm',
312
+ x: 570,
313
+ z: 412,
314
+ leash: 6,
315
+ level: [38, 38],
316
+ maxHit: 30,
317
+ /** A mini-boss's hide: much thicker than the level's ordinary health. */
318
+ healthScale: 2.6,
319
+ /** Drawn bigger than a hunter (the sheet: a huge ogre, about 3.5 tiles). */
320
+ scale: 1.5,
321
+ note: "An ogre camp cook with a great iron ladle and a stained apron, who guards the pot in the middle of the Ironjaw Round. Passive until struck. Every fourth blow he swings the Ladle Sweep, a wide arc announced a turn ahead: step out of the arc and it misses. The cook will not leave his pot. Back eight to ten minutes after he falls.",
322
+ };
323
+ export const COOKPOT_GRUMM_RESPAWN_MS = { minMs: 480_000, maxMs: 600_000 };
324
+ export const COOKPOT_GRUMM_PACE = { speed: 0.7, idleChance: 0.7, pause: [4, 10] };
325
+ /** Placeholders for the balance pass: coins, iron and coal, and a raw larder find (an ingredient a player cooks themselves; never shop stock). Nothing heals. */
326
+ export const COOKPOT_GRUMM_DROPS = [
327
+ { itemKind: 'coins', chance: 1, minQty: 520, maxQty: 950 },
328
+ { itemKind: 'ironbar', chance: 1, minQty: 2, maxQty: 4 },
329
+ { itemKind: 'coal', chance: 1, minQty: 4, maxQty: 9 },
330
+ { itemKind: 'rawmammoth', chance: 0.4, minQty: 1, maxQty: 2 },
331
+ { itemKind: 'silverbar', chance: 0.25, minQty: 1, maxQty: 1 },
332
+ ];
333
+ /** The client draws it with the Ironjaw ogre's model until it has a cook of its own. */
334
+ export const COOKPOT_GRUMM_STAND_IN = 'ironjawogre';
335
+ export const COOKPOT_GRUMM_LADLE_NOTICE = 'Cookpot Grumm swings his iron ladle round in a wide arc. Brace for the Ladle Sweep, or step clear.';
336
+ // ---- The week's board -----------------------------------------------------------------------------------------------------------------------------
337
+ export const IR_BOARD_SIZE = 5;
338
+ export const IR_BOARD_TIMER_KEY = 'ironjaw-round';
339
+ export function emptyIrSave(nowMs) {
340
+ return { week: marksmenWeekKey(nowMs), rows: [] };
341
+ }
342
+ /** The board as the world saved it, or a fresh one: nothing unreadable is trusted, and last week's is dropped. */
343
+ export function parseIrSave(raw, nowMs) {
344
+ const fresh = emptyIrSave(nowMs);
345
+ if (!raw || typeof raw !== 'object')
346
+ return fresh;
347
+ const r = raw;
348
+ if (r.week !== fresh.week || !Array.isArray(r.rows))
349
+ return fresh;
350
+ const rows = [];
351
+ for (const row of r.rows.slice(0, 50)) {
352
+ const q = row;
353
+ if (!q || typeof q.name !== 'string' || !q.name || typeof q.ms !== 'number' || !Number.isFinite(q.ms) || q.ms < IR_MIN_ROUND_MS || q.ms > IR_LIMIT_MS || typeof q.at !== 'number')
354
+ continue;
355
+ rows.push({ name: q.name.slice(0, 40), ms: Math.floor(q.ms), at: q.at });
356
+ }
357
+ return { week: fresh.week, rows: rankIrRows(rows) };
358
+ }
359
+ /** Fastest first; a tie goes to whoever walked it first. */
360
+ export function rankIrRows(rows) {
361
+ return [...rows].sort((a, b) => a.ms - b.ms || a.at - b.at).slice(0, IR_BOARD_SIZE);
362
+ }
363
+ /** 1-based place on a board, or 0 when not on it. */
364
+ export function irPlaceOf(rows, name) {
365
+ const i = rows.findIndex((r) => r.name === name);
366
+ return i < 0 ? 0 : i + 1;
367
+ }
368
+ /** A counted Round goes on the board: one place per name (only a faster Round replaces a slower one), a new week starts a fresh board. */
369
+ export function recordIrTime(save, name, ms, nowMs) {
370
+ const base = save.week === marksmenWeekKey(nowMs) ? save : emptyIrSave(nowMs);
371
+ if (!Number.isFinite(ms) || ms < IR_MIN_ROUND_MS || ms > IR_LIMIT_MS)
372
+ return { save: base, changed: base !== save, place: irPlaceOf(base.rows, name) };
373
+ const mine = base.rows.find((r) => r.name === name);
374
+ if (mine && mine.ms <= ms)
375
+ return { save: base, changed: base !== save, place: irPlaceOf(base.rows, name) };
376
+ const rows = rankIrRows([...base.rows.filter((r) => r.name !== name), { name, ms: Math.floor(ms), at: nowMs }]);
377
+ return { save: { week: base.week, rows }, changed: true, place: irPlaceOf(rows, name) };
378
+ }
379
+ export function irBoardText(save) {
380
+ if (!save.rows.length)
381
+ return "Nobody has put a Round on this week's board yet. Three stakes and twelve minutes will do it.";
382
+ return `This week's fastest Rounds: ${save.rows.map((r, i) => `${i + 1}. ${r.name} ${irClockText(r.ms)}`).join(', ')}. The board starts again each Monday.`;
383
+ }
384
+ // ---- Guide text -----------------------------------------------------------------------------------------------------------------------------------
385
+ export const IR_GUIDE_TEXT = `${IRONJAW_ROUND_NAME} is an outing from the Ironjaw Watch for levels 34 to 38, in the Dreadwoods where other players can attack you outside the lanterns. ${IR_RULES_TEXT} ` +
386
+ `Cookpot Grumm, an ogre cook with an iron ladle (level ${COOKPOT_GRUMM.level[0]}), keeps the scavenger camp in the middle of the loop; the Fortress gate to the north stays sealed. There is no bank and no shop on the Round.`;
387
+ /** Where the Round's pieces are, for the teleports, the smoke and the helper. */
388
+ export const IR_STANDS = {
389
+ board: { x: 541, z: 423 },
390
+ stake1: { x: IR_STAKES[0].x, z: IR_STAKES[0].z + 2 },
391
+ stake2: { x: IR_STAKES[1].x, z: IR_STAKES[1].z + 2 },
392
+ stake3: { x: IR_STAKES[2].x - 1, z: IR_STAKES[2].z - 1 },
393
+ camp: { x: 570, z: 408 },
394
+ };
395
+ /** The safe camp's own north row, for tests: the board and Joss must stay outside it. */
396
+ export const IR_WATCH_NORTH_ROW = IRONJAW_WATCH.minZ;
397
+ //# sourceMappingURL=ironjawRound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ironjawRound.js","sourceRoot":"","sources":["../src/ironjawRound.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAChD,yHAAyH;AACzH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAW,CAAC;AAGzF,MAAM,KAAK,GAAG,CAAC,CAAM,EAAE,CAAS,EAAE,CAAS,EAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAClH,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,OAAO,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,mJAAmJ;AAEnJ,uDAAuD;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,wDAAwD;AACxD,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,GAAG,MAAM,CAAC;AACvC,sIAAsI;AACtI,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,0GAA0G;AAC1G,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,MAAM,CAAC;AAC9C,8GAA8G;AAC9G,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAChC,0IAA0I;AAC1I,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,MAAM,CAAC;AAC9C,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAW,CAAC;AACjE,wEAAwE;AACxE,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AACjD,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAC;AACvD,MAAM,CAAC,MAAM,eAAe,GAAG,kJAAkJ,CAAC;AAElL,qJAAqJ;AAErJ,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAW,CAAC;AAWvE,+MAA+M;AAC/M,MAAM,CAAC,MAAM,SAAS,GAAuB;IAC3C,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;IAC9L,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;IAC9L,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;CAChK,CAAC;AACF,MAAM,UAAU,cAAc,CAAC,KAAgC;IAC7D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1F,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,EAA6B;IACvD,OAAO,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AACD,MAAM,CAAC,MAAM,cAAc,GAAqC;IAC9D,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,4BAA4B;IACnD,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,4BAA4B;IACnD,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,gCAAgC;CACxD,CAAC;AAEF,oJAAoJ;AAEpJ,uIAAuI;AACvI,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAW,CAAC;AAC1H,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAW,CAAC;AACvF,MAAM,CAAC,MAAM,mBAAmB,GAAqC,EAAE,GAAG,cAAc,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC5H,MAAM,CAAC,MAAM,aAAa,GAAqC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAErH,2HAA2H;AAC3H,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,IAAI,KAAK,OAAO,CAAC,KAAK;QAAE,OAAO,aAAa,CAAC;IACjD,IAAI,IAAI,KAAK,OAAO,CAAC,KAAK;QAAE,OAAO,cAAc,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,KAAgC;IACjE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAqD;IACxE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IACpG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IACxC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IACxH,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;CACzH,CAAC;AAEF,gGAAgG;AAChG,MAAM,CAAC,MAAM,WAAW,GAAsG;IAC5H,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,8GAA8G,EAAE;IACxJ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,sHAAsH,EAAE;IAChK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,0GAA0G,EAAE;IACpJ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,iJAAiJ,EAAE;IAC3L,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,qIAAqI,EAAE;IAC/K,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,kIAAkI,EAAE;IAC5K,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,wGAAwG,EAAE;IAClJ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,oGAAoG,EAAE;IAC9I,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,mGAAmG,EAAE;IAC7I,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,gIAAgI,EAAE;IAC3K,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,6FAA6F,EAAE;IACxI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,wIAAwI,EAAE;CACpL,CAAC;AAEF,+HAA+H;AAC/H,MAAM,CAAC,MAAM,OAAO,GAAsG;IACxH,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC1D,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC3D,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACnD,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5D,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CAC3D,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B,qJAAqJ;AAErJ,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAW,CAAC;AAC1D,oGAAoG;AACpG,MAAM,CAAC,MAAM,WAAW,GAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC/E,MAAM,UAAU,kBAAkB,CAAC,CAAS,EAAE,CAAS;IACrD,OAAO,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAGD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,IAAY,EAAE,CAAS,EAAE,CAAS,EAAE,KAAc,EAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE/K,uKAAuK;AACvK,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACxF,KAAK,CAAC,aAAa,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACrD,KAAK,CAAC,gBAAgB,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC;IAC7C,KAAK,CAAC,gBAAgB,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC;IAC7C,KAAK,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5C,KAAK,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5C,KAAK,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5C,KAAK,CAAC,eAAe,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,CAAC;IAChD,KAAK,CAAC,iBAAiB,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/C,KAAK,CAAC,iBAAiB,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/C,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5E,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC5E,KAAK,CAAC,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACtD,KAAK,CAAC,kBAAkB,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC;IACjD,KAAK,CAAC,kBAAkB,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC;IACjD,KAAK,CAAC,iBAAiB,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC;IAChD,KAAK,CAAC,iBAAiB,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC;IAChD,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;IACnF,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,YAAY,kHAAkH,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;CACvN,CAAC;AAiBF,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AACvD,MAAM,CAAC,MAAM,YAAY,GAAG,wBAAwB,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,uBAAuB,CAAC;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAAC;AACrD,mJAAmJ;AACnJ,MAAM,CAAC,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAExD,mGAAmG;AACnG,MAAM,CAAC,MAAM,aAAa,GACxB,8IAA8I,aAAa,6IAA6I,WAAW,GAAG,MAAM,mVAAmV,CAAC;AAElpB,MAAM,CAAC,MAAM,OAAO,GAA0B;IAC5C;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,mDAAmD;QAC1D,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAChD,KAAK,EAAE,kNAAkN;QACzN,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE;YACvD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,uOAAuO,EAAE;SACpR;KACF;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,8DAA8D;QACrE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAChD,KAAK,EAAE,6OAA6O;QACpP,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,0NAA0N,EAAE;SAC7Q;KACF;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,+BAA+B;QACtC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAChD,KAAK,EAAE,4NAA4N;QACnO,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,wNAAwN,EAAE;SACvQ;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,qCAAqC;QAC5C,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAChD,KAAK,EAAE,+SAA+S;QACtT,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,mPAAmP,EAAE;SAClS;KACF;CACF,CAAC;AACF,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,EAAsB;IAC/C,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,mJAAmJ;AAEnJ,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAC1C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,eAAe;IACvB,KAAK,EAAE,cAAc;IACrB,IAAI,EAAE,aAAa;CACX,CAAC;AACX,MAAM,CAAC,MAAM,gBAAgB,GAAqC;IAChE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,mBAAmB;IACvC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,iBAAiB;IACtC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,iBAAiB;IACtC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,mBAAmB;IACvC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,mBAAmB;CACvC,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,sCAAsC,aAAa,kGAAkG;IAC/J,OAAO,EAAE,0BAA0B;IACnC,KAAK,EAAE,yCAAyC,WAAW,GAAG,MAAM,+FAA+F;IACnK,cAAc,EAAE,6FAA6F;IAC7G,MAAM,EAAE,kEAAkE;IAC1E,OAAO,EAAE,yDAAyD;IAClE,OAAO,EAAE,0DAA0D;IACnE,IAAI,EAAE,0EAA0E;IAChF,UAAU,EAAE,8CAA8C;IAC1D,OAAO,EAAE,mFAAmF;IAC5F,MAAM,EAAE,uCAAuC;IAC/C,cAAc,EAAE,6CAA6C;IAC7D,WAAW,EAAE,6FAA6F;IAC1G,YAAY,EAAE,oFAAoF;IAClG,SAAS,EAAE,iEAAiE;IAC5E,MAAM,EAAE,gFAAgF;IACxF,OAAO,EAAE,oBAAoB;CACrB,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG,EAAE,0BAA0B;IAC/B,QAAQ,EAAE,iBAAiB;IAC3B,IAAI,EAAE,yBAAyB;IAC/B,IAAI,EAAE,gBAAgB;CACd,CAAC;AAEX,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,OAAO,+BAA+B,gBAAgB,CAAC,MAAM,CAAC,qDAAqD,CAAC;AACtH,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AACtE,CAAC;AAED,oJAAoJ;AAEpJ,oJAAoJ;AACpJ,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAW,CAAC;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,kIAAkI;AAClI,MAAM,CAAC,MAAM,UAAU,GAAqF;IAC1G,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC1D,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC1D,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CAC3D,CAAC;AACF,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,GAAG,mBAAmB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1C,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,EAA6B;IACxD,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AACtE,CAAC;AACD,iGAAiG;AACjG,MAAM,UAAU,aAAa,CAAC,EAA6B;IACzD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,CAAC,GAAG,MAAM,CAAE,EAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACvE,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAC9B,CAAC;AAED,mHAAmH;AACnH,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAW,CAAC;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,aAAa,GAA0D;IAClF,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CAC/E,CAAC;AACF,MAAM,UAAU,eAAe,CAAC,EAA6B;IAC3D,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;AACzE,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,EAA6B;IAC/D,OAAO,YAAY,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC;AAC5E,CAAC;AACD,MAAM,CAAC,MAAM,qBAAqB,GAAG,sEAAsE,CAAC;AAC5G,MAAM,CAAC,MAAM,oBAAoB,GAAG,qDAAqD,CAAC;AAC1F,MAAM,CAAC,MAAM,mBAAmB,GAAG,gEAAgE,CAAC;AAEpG,iJAAiJ;AAEjJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAClD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,EAAE,EAAE,WAAW;IACf,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAA8B;IAC5C,MAAM,EAAE,EAAE;IACV,yEAAyE;IACzE,WAAW,EAAE,GAAG;IAChB,4EAA4E;IAC5E,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,2UAA2U;CACzU,CAAC;AACX,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAW,CAAC;AACpF,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAA8B,EAAW,CAAC;AACxH,iKAAiK;AACjK,MAAM,CAAC,MAAM,mBAAmB,GAAoF;IAClH,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAC1D,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IACxD,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IACrD,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IAC7D,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;CAC9D,CAAC;AACF,wFAAwF;AACxF,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AACpD,MAAM,CAAC,MAAM,0BAA0B,GAAG,oGAAoG,CAAC;AAE/I,sJAAsJ;AAEtJ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAIlD,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACpD,CAAC;AACD,kHAAkH;AAClH,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,KAAa;IACrD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,IAAI,GAAY,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,GAA4B,CAAC;QACvC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,eAAe,IAAI,CAAC,CAAC,EAAE,GAAG,WAAW,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;YAAE,SAAS;QAC5L,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AACtD,CAAC;AACD,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,IAAsB;IAC/C,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AACtF,CAAC;AACD,qDAAqD;AACrD,MAAM,UAAU,SAAS,CAAC,IAAsB,EAAE,IAAY;IAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AACD,0IAA0I;AAC1I,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAY,EAAE,EAAU,EAAE,KAAa;IAChF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,eAAe,IAAI,EAAE,GAAG,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACvJ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACpD,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IAC5G,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAChH,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;AAC1F,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,8FAA8F,CAAC;IAC7H,OAAO,+BAA+B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC;AAC9J,CAAC;AAED,sJAAsJ;AAEtJ,MAAM,CAAC,MAAM,aAAa,GACxB,GAAG,kBAAkB,wIAAwI,aAAa,GAAG;IAC7K,yDAAyD,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,gJAAgJ,CAAC;AAElO,iFAAiF;AACjF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACzB,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,EAAE;IACtD,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,EAAE;IACtD,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,EAAE;IAC1D,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CAChB,CAAC;AACX,yFAAyF;AACzF,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC,IAAI,CAAC"}