valtech-components 4.0.456 → 4.0.457

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 (28) hide show
  1. package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +9 -18
  2. package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +29 -107
  3. package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +9 -18
  4. package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +9 -18
  5. package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +9 -161
  6. package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +9 -18
  7. package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
  8. package/esm2022/lib/version.mjs +2 -2
  9. package/esm2022/mini-games/public-api.mjs +2 -34
  10. package/esm2022/public-api.mjs +1 -3
  11. package/fesm2022/valtech-components-mini-games.mjs +2 -34
  12. package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
  13. package/fesm2022/valtech-components.mjs +71 -2167
  14. package/fesm2022/valtech-components.mjs.map +1 -1
  15. package/lib/components/organisms/mini-games/bubble-blitz-game.component.d.ts +0 -2
  16. package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +1 -3
  17. package/lib/components/organisms/mini-games/memory-game.component.d.ts +0 -2
  18. package/lib/components/organisms/mini-games/simon-game.component.d.ts +0 -2
  19. package/lib/components/organisms/mini-games/types.d.ts +1 -75
  20. package/lib/version.d.ts +1 -1
  21. package/mini-games/public-api.d.ts +0 -4
  22. package/package.json +1 -2
  23. package/public-api.d.ts +0 -2
  24. package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +0 -1780
  25. package/esm2022/lib/directives/light-ripple.directive.mjs +0 -57
  26. package/lib/components/organisms/mini-games/christianity-game.component.d.ts +0 -113
  27. package/lib/directives/light-ripple.directive.d.ts +0 -8
  28. package/src/lib/assets/games/christianity/card-symbol.svg +0 -51
@@ -1,1780 +0,0 @@
1
- import { Component, computed, inject, signal } from '@angular/core';
2
- import { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop';
3
- import { LightRippleDirective } from '../../../directives/light-ripple.directive';
4
- import { I18nService } from '../../../services/i18n';
5
- import { MINI_GAMES_I18N } from './mini-games.i18n';
6
- import * as i0 from "@angular/core";
7
- const STARTER_CARDS = {
8
- o_simple: {
9
- id: 'o_simple',
10
- name: 'Ofrenda simple',
11
- type: 'offering',
12
- cost: 0,
13
- attack: 0,
14
- life: 1,
15
- verseText: 'Una ofrenda sencilla queda lista para sostener tus siguientes jugadas.',
16
- scripture: 'Genesis 4:4',
17
- edition: 'GEN',
18
- collectorNumber: '001/020',
19
- year: '2026',
20
- author: 'MVP',
21
- rarity: 'normal',
22
- },
23
- o_forbidden: {
24
- id: 'o_forbidden',
25
- name: 'El fruto prohibido',
26
- type: 'offering',
27
- cost: 0,
28
- attack: 0,
29
- life: 2,
30
- abilityName: 'Conocimiento del bien y del mal',
31
- abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Líder.',
32
- abilityCost: 0,
33
- verseText: 'Dios el Señor puso al hombre en el jardín de Edén para que lo labrara y lo cuidara.',
34
- scripture: 'Genesis 2:17 NBV',
35
- edition: 'GEN',
36
- collectorNumber: '012/180',
37
- year: '2026',
38
- author: 'MVP',
39
- rarity: 'uncommon',
40
- },
41
- p_scout: {
42
- id: 'p_scout',
43
- name: 'Scout',
44
- type: 'character',
45
- cost: 1,
46
- attack: 1,
47
- life: 1,
48
- verseText: 'Un explorador humilde abre camino antes de que llegue la batalla.',
49
- scripture: 'Genesis 13:17',
50
- edition: 'GEN',
51
- collectorNumber: '002/020',
52
- year: '2026',
53
- author: 'MVP',
54
- rarity: 'normal',
55
- },
56
- p_guard: { id: 'p_guard', name: 'Guard', type: 'character', cost: 2, attack: 1, life: 3, edition: 'GEN', collectorNumber: '003/020', year: '2026', author: 'MVP', rarity: 'normal' },
57
- p_warrior: { id: 'p_warrior', name: 'Warrior', type: 'character', cost: 2, attack: 2, life: 2, edition: 'GEN', collectorNumber: '004/020', year: '2026', author: 'MVP', rarity: 'normal' },
58
- p_elder: { id: 'p_elder', name: 'Elder', type: 'character', cost: 3, attack: 2, life: 4, edition: 'GEN', collectorNumber: '005/020', year: '2026', author: 'MVP', rarity: 'uncommon' },
59
- p_champion: { id: 'p_champion', name: 'Champion', type: 'character', cost: 4, attack: 4, life: 4, edition: 'GEN', collectorNumber: '006/020', year: '2026', author: 'MVP', rarity: 'rare' },
60
- };
61
- const STARTING_SHARED_DECK = [
62
- 'o_simple',
63
- 'p_scout',
64
- 'o_forbidden',
65
- 'o_simple',
66
- 'p_guard',
67
- 'p_warrior',
68
- 'o_simple',
69
- 'p_elder',
70
- 'p_scout',
71
- 'o_simple',
72
- 'p_champion',
73
- 'p_guard',
74
- 'o_simple',
75
- 'p_warrior',
76
- 'p_scout',
77
- 'o_simple',
78
- 'p_elder',
79
- 'p_guard',
80
- 'o_simple',
81
- ];
82
- const STARTING_GAME = {
83
- gameId: 'mock-christianity',
84
- status: 'in_progress',
85
- mode: 'local_pass',
86
- turnOwner: 'P1',
87
- revision: 0,
88
- turnCount: 1,
89
- matchScore: { P1: 1, P2: 0 },
90
- sharedDeck: STARTING_SHARED_DECK,
91
- historyZone: [],
92
- players: {
93
- P1: {
94
- seat: 'P1',
95
- displayName: 'Jugador',
96
- avatar: 'J',
97
- avatarColor: '#2563eb',
98
- leaderName: 'Adam',
99
- leaderHp: 15,
100
- leaderMaxHp: 15,
101
- offerings: [
102
- { instanceId: 'p1_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P1', ready: true, value: 1 },
103
- {
104
- instanceId: 'p1_offering_002',
105
- cardId: 'o_forbidden',
106
- name: 'El fruto prohibido',
107
- owner: 'P1',
108
- ready: true,
109
- value: 2,
110
- abilityName: 'Conocimiento del bien y del mal',
111
- abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Lider.',
112
- abilityCost: 0,
113
- },
114
- ],
115
- offeringPlayedThisTurn: false,
116
- hand: ['o_simple', 'p_scout', 'p_warrior', 'p_guard'],
117
- battleZone: [],
118
- },
119
- P2: {
120
- seat: 'P2',
121
- displayName: 'Rival',
122
- avatar: 'R',
123
- avatarColor: '#b45309',
124
- leaderName: 'Noah',
125
- leaderHp: 15,
126
- leaderMaxHp: 15,
127
- offerings: [{ instanceId: 'p2_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P2', ready: true, value: 1 }],
128
- offeringPlayedThisTurn: false,
129
- handCount: 4,
130
- battleZone: [
131
- {
132
- instanceId: 'opp_001',
133
- cardId: 'p_scout',
134
- name: 'Scout',
135
- owner: 'P2',
136
- controller: 'P2',
137
- slot: 0,
138
- attack: 1,
139
- currentHp: 1,
140
- maxHp: 1,
141
- canAttack: false,
142
- },
143
- ],
144
- },
145
- },
146
- log: ['Partida iniciada.'],
147
- };
148
- export class ChristianityGameComponent {
149
- constructor() {
150
- this.i18n = inject(I18nService);
151
- this.game = signal(structuredClone(STARTING_GAME));
152
- this.selectedHandCard = signal(null);
153
- this.selectedAttacker = signal(null);
154
- this.selectedPreview = signal(null);
155
- this.selectedInfo = signal(null);
156
- this.previewTilt = signal({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
157
- this.hoveredHandIndex = signal(null);
158
- this.draggingCardId = signal(null);
159
- this.showHistory = signal(false);
160
- this.offeringsSeat = signal(null);
161
- this.canDropOnBattleSlot = (drag) => {
162
- const card = this.cardDefinition(drag.data);
163
- return card.type === 'character' && this.canPlay(card);
164
- };
165
- this.canDropOnOfferings = (drag) => {
166
- const card = this.cardDefinition(drag.data);
167
- return card.type === 'offering' && this.canPlay(card);
168
- };
169
- this.player = computed(() => this.game().players.P1);
170
- this.opponent = computed(() => this.game().players.P2);
171
- this.currentPlayer = computed(() => this.game().players[this.game().turnOwner]);
172
- this.isOwnTurn = computed(() => this.game().turnOwner === 'P1');
173
- this.hasOpponentGuards = computed(() => this.opponent().battleZone.length > 0);
174
- this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
175
- this.selectedCardDefinition = computed(() => {
176
- const selected = this.selectedHandCard();
177
- return selected ? this.cardDefinition(selected) : null;
178
- });
179
- this.selectedPreviewCard = computed(() => {
180
- const cardId = this.selectedPreview()?.cardId;
181
- return cardId ? this.cardDefinition(cardId) : null;
182
- });
183
- this.statusText = computed(() => {
184
- const attacker = this.selectedAttacker();
185
- const handCard = this.selectedCardDefinition();
186
- if (!this.isOwnTurn()) {
187
- return this.t('christianityWaitTurn');
188
- }
189
- if (attacker) {
190
- return this.hasOpponentGuards() ? this.t('christianityChooseCharacterTarget') : this.t('christianityChooseTarget');
191
- }
192
- if (handCard) {
193
- if (!this.canPlay(handCard)) {
194
- return this.t('christianityNeedOfferings');
195
- }
196
- return handCard.type === 'offering' ? this.t('christianityPlaceOffering') : this.t('christianityChooseSlot');
197
- }
198
- return this.t('christianityChooseCard');
199
- });
200
- this.i18n.registerDefaults('MiniGames', MINI_GAMES_I18N);
201
- }
202
- t(key) {
203
- this.i18n.lang();
204
- return this.i18n.t(key, 'MiniGames');
205
- }
206
- cardDefinition(cardId) {
207
- return STARTER_CARDS[cardId] ?? STARTER_CARDS['p_scout'];
208
- }
209
- cardTypeLabel(card) {
210
- return card.type === 'offering' ? this.t('christianityOfferingCard') : this.t('christianityCharacterCard');
211
- }
212
- battleSlots(seat) {
213
- const cards = this.game().players[seat].battleZone;
214
- const positionedCards = new Map();
215
- cards.forEach((card, index) => {
216
- const slot = Number.isInteger(card.slot) ? card.slot ?? index : index;
217
- if (slot >= 0 && slot < 4 && !positionedCards.has(slot)) {
218
- positionedCards.set(slot, card);
219
- }
220
- });
221
- return Array.from({ length: 4 }, (_, index) => ({
222
- trackId: positionedCards.get(index)?.instanceId ?? `${seat}-empty-${index}`,
223
- card: positionedCards.get(index),
224
- }));
225
- }
226
- battleSlotDropId(index) {
227
- return `christianity-battle-slot-${index}`;
228
- }
229
- dropTargetIds() {
230
- return ['christianity-offerings-drop', ...this.battleSlots('P1').map((_, index) => this.battleSlotDropId(index))];
231
- }
232
- hiddenHandCards(count) {
233
- return Array.from({ length: count });
234
- }
235
- fanTransform(index, total, opponent) {
236
- if (total <= 1)
237
- return 'none';
238
- const center = (total - 1) / 2;
239
- const offset = index - center;
240
- const rotate = offset * (opponent ? 6 : 5);
241
- const lift = Math.abs(offset) * 0.25;
242
- const hoverLift = opponent ? 0 : this.handWaveLift(index);
243
- const scale = opponent ? 1 : this.handWaveScale(index);
244
- const fanLift = opponent ? Math.abs(offset) * 0.22 : lift + hoverLift;
245
- const fanSpread = opponent ? offset * 0.02 : 0;
246
- return `translate(${fanSpread}rem, ${fanLift}rem) rotate(${rotate}deg) scale(${scale})`;
247
- }
248
- handCardZIndex(index) {
249
- const hovered = this.hoveredHandIndex();
250
- if (hovered === null)
251
- return 2;
252
- const distance = Math.abs(index - hovered);
253
- return Math.max(2, 8 - distance);
254
- }
255
- setHoveredHandIndex(index) {
256
- this.hoveredHandIndex.set(index);
257
- }
258
- clearHoveredHandIndex() {
259
- this.hoveredHandIndex.set(null);
260
- }
261
- releaseHoveredHand(event) {
262
- if (event.pointerType !== 'mouse') {
263
- window.setTimeout(() => this.clearHoveredHandIndex(), 180);
264
- }
265
- }
266
- handWaveLift(index) {
267
- const hovered = this.hoveredHandIndex();
268
- if (hovered === null)
269
- return 0;
270
- const distance = Math.abs(index - hovered);
271
- if (distance === 0)
272
- return -1.15;
273
- if (distance === 1)
274
- return -0.58;
275
- if (distance === 2)
276
- return -0.22;
277
- return 0;
278
- }
279
- handWaveScale(index) {
280
- const hovered = this.hoveredHandIndex();
281
- if (hovered === null)
282
- return 1;
283
- const distance = Math.abs(index - hovered);
284
- if (distance === 0)
285
- return 1.06;
286
- if (distance === 1)
287
- return 1.03;
288
- return 1;
289
- }
290
- readyOfferings(player) {
291
- return player.offerings.reduce((total, offering) => total + (offering.ready ? offering.value : 0), 0);
292
- }
293
- totalOfferings(player) {
294
- return player.offerings.reduce((total, offering) => total + offering.value, 0);
295
- }
296
- canPlay(card) {
297
- if (!this.isOwnTurn())
298
- return false;
299
- if (card.type === 'offering')
300
- return !this.player().offeringPlayedThisTurn;
301
- return this.readyOfferings(this.player()) >= card.cost && this.player().battleZone.length < 4;
302
- }
303
- canPlaySelected() {
304
- const selected = this.selectedHandCard();
305
- return !!selected && this.canPlay(this.cardDefinition(selected));
306
- }
307
- selectedActionLabel() {
308
- const selected = this.selectedCardDefinition();
309
- if (!selected)
310
- return this.t('christianityPlayCard');
311
- return selected.type === 'offering' ? this.t('christianityPlayOffering') : this.t('christianityPlayCard');
312
- }
313
- selectedActionDisabled() {
314
- const selected = this.selectedCardDefinition();
315
- if (!selected || !this.canPlay(selected))
316
- return true;
317
- return selected.type === 'character';
318
- }
319
- previewActionDisabled() {
320
- const preview = this.selectedPreview();
321
- if (preview?.source !== 'hand' || !preview.cardId)
322
- return true;
323
- return !this.canPlay(this.cardDefinition(preview.cardId));
324
- }
325
- canPlaceSelectedCharacter() {
326
- const selected = this.selectedCardDefinition();
327
- return !!selected && selected.type === 'character' && this.canPlay(selected);
328
- }
329
- canPlaceSelectedOffering() {
330
- const selected = this.selectedCardDefinition();
331
- return !!selected && selected.type === 'offering' && this.canPlay(selected);
332
- }
333
- isDraggingCharacter() {
334
- const cardId = this.draggingCardId();
335
- if (!cardId)
336
- return false;
337
- const card = this.cardDefinition(cardId);
338
- return card.type === 'character' && this.canPlay(card);
339
- }
340
- isDraggingOffering() {
341
- const cardId = this.draggingCardId();
342
- if (!cardId)
343
- return false;
344
- const card = this.cardDefinition(cardId);
345
- return card.type === 'offering' && this.canPlay(card);
346
- }
347
- startDraggingCard(cardId) {
348
- this.selectedAttacker.set(null);
349
- this.selectedHandCard.set(cardId);
350
- this.draggingCardId.set(cardId);
351
- this.closePreview();
352
- }
353
- endDraggingCard() {
354
- this.draggingCardId.set(null);
355
- }
356
- dropOnBattleSlot(event, slotIndex) {
357
- const card = this.cardDefinition(event.item.data);
358
- if (card.type !== 'character')
359
- return;
360
- this.playCardFromHand(event.item.data, slotIndex);
361
- }
362
- dropOnOfferings(event) {
363
- const card = this.cardDefinition(event.item.data);
364
- if (card.type !== 'offering')
365
- return;
366
- this.playCardFromHand(event.item.data);
367
- }
368
- selectHandCard(cardId) {
369
- const wasSelected = this.selectedHandCard() === cardId;
370
- this.selectedAttacker.set(null);
371
- this.selectedHandCard.set(wasSelected ? null : cardId);
372
- this.closePreview();
373
- }
374
- playSelectedCard(slotIndex) {
375
- const cardId = this.selectedHandCard();
376
- if (!cardId)
377
- return;
378
- this.playCardFromHand(cardId, slotIndex);
379
- }
380
- playCardFromHand(cardId, slotIndex) {
381
- const card = this.cardDefinition(cardId);
382
- if (!this.canPlay(card))
383
- return;
384
- this.game.update(game => {
385
- const next = structuredClone(game);
386
- const player = next.players.P1;
387
- const handIndex = player.hand?.indexOf(cardId) ?? -1;
388
- if (handIndex < 0 || !player.hand)
389
- return game;
390
- player.hand.splice(handIndex, 1);
391
- if (card.type === 'offering') {
392
- player.offerings.push({
393
- instanceId: `p1_offering_${next.revision + 1}`,
394
- cardId: card.id,
395
- name: card.name,
396
- owner: 'P1',
397
- ready: true,
398
- value: card.life,
399
- abilityName: card.abilityName,
400
- abilityText: card.abilityText,
401
- abilityCost: card.abilityCost,
402
- });
403
- player.offeringPlayedThisTurn = true;
404
- }
405
- else {
406
- this.spendOfferings(player, card.cost);
407
- const occupiedSlots = new Set(player.battleZone.map((character, index) => Number.isInteger(character.slot) ? character.slot ?? index : index));
408
- const targetSlot = slotIndex ?? [0, 1, 2, 3].find(index => !occupiedSlots.has(index));
409
- if (targetSlot === undefined || occupiedSlots.has(targetSlot))
410
- return game;
411
- player.battleZone.push({
412
- instanceId: `p1_${next.revision + 1}_${player.battleZone.length}`,
413
- cardId: card.id,
414
- name: card.name,
415
- owner: 'P1',
416
- controller: 'P1',
417
- slot: targetSlot,
418
- attack: card.attack,
419
- currentHp: card.life,
420
- maxHp: card.life,
421
- canAttack: false,
422
- });
423
- player.battleZone.sort((left, right) => (left.slot ?? 0) - (right.slot ?? 0));
424
- }
425
- next.revision++;
426
- next.log = [
427
- card.type === 'offering' ? `${card.name} queda lista como ofrenda.` : `${card.name} entra en batalla.`,
428
- ...next.log,
429
- ].slice(0, 4);
430
- return next;
431
- });
432
- this.selectedHandCard.set(null);
433
- this.draggingCardId.set(null);
434
- this.closePreview();
435
- }
436
- playPreviewCard() {
437
- const preview = this.selectedPreview();
438
- if (preview?.source !== 'hand' || !preview.cardId)
439
- return;
440
- const card = this.cardDefinition(preview.cardId);
441
- if (!this.canPlay(card))
442
- return;
443
- this.selectedHandCard.set(preview.cardId);
444
- if (card.type === 'character') {
445
- this.closePreview();
446
- return;
447
- }
448
- this.playSelectedCard();
449
- }
450
- handleOfferingPile(seat) {
451
- this.openOfferings(seat);
452
- }
453
- selectAttacker(card) {
454
- this.selectedHandCard.set(null);
455
- this.inspectCharacter(card);
456
- if (!this.isOwnTurn() || !card.canAttack)
457
- return;
458
- this.selectedAttacker.set(this.selectedAttacker()?.instanceId === card.instanceId ? null : card);
459
- }
460
- handleOpponentCharacter(card) {
461
- this.inspectCharacter(card);
462
- if (this.selectedAttacker()) {
463
- this.attackCharacter(card);
464
- }
465
- }
466
- handleOpponentLeader() {
467
- this.inspectLeader('P2');
468
- if (this.selectedAttacker() && !this.hasOpponentGuards()) {
469
- this.attackLeader();
470
- }
471
- }
472
- attackLeader() {
473
- const attacker = this.selectedAttacker();
474
- if (!attacker)
475
- return;
476
- if (this.hasOpponentGuards()) {
477
- this.selectedPreview.set({
478
- title: this.opponent().leaderName,
479
- eyebrow: this.t('christianityLeaderCard'),
480
- meta: `${this.opponent().leaderHp}/${this.opponent().leaderMaxHp}`,
481
- body: this.t('christianityLeaderProtected'),
482
- });
483
- return;
484
- }
485
- this.game.update(game => {
486
- const next = structuredClone(game);
487
- const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
488
- if (!liveAttacker || !liveAttacker.canAttack)
489
- return game;
490
- next.players.P2.leaderHp = Math.max(0, next.players.P2.leaderHp - liveAttacker.attack);
491
- liveAttacker.canAttack = false;
492
- next.revision++;
493
- next.log = [`${liveAttacker.name} ataca al lider rival.`, ...next.log].slice(0, 4);
494
- return next;
495
- });
496
- this.selectedAttacker.set(null);
497
- }
498
- attackCharacter(target) {
499
- const attacker = this.selectedAttacker();
500
- if (!attacker)
501
- return;
502
- this.game.update(game => {
503
- const next = structuredClone(game);
504
- const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
505
- const liveTarget = next.players.P2.battleZone.find(card => card.instanceId === target.instanceId);
506
- if (!liveAttacker || !liveTarget || !liveAttacker.canAttack)
507
- return game;
508
- liveTarget.currentHp -= liveAttacker.attack;
509
- liveAttacker.currentHp -= liveTarget.attack;
510
- liveAttacker.canAttack = false;
511
- this.cleanupDestroyed(next.players.P1, next);
512
- this.cleanupDestroyed(next.players.P2, next);
513
- next.revision++;
514
- next.log = [`${liveAttacker.name} combate contra ${liveTarget.name}.`, ...next.log].slice(0, 4);
515
- return next;
516
- });
517
- this.selectedAttacker.set(null);
518
- }
519
- endTurn() {
520
- this.selectedHandCard.set(null);
521
- this.selectedAttacker.set(null);
522
- this.selectedPreview.set(null);
523
- this.selectedInfo.set(null);
524
- this.game.update(game => {
525
- const next = structuredClone(game);
526
- next.turnOwner = next.turnOwner === 'P1' ? 'P2' : 'P1';
527
- next.turnCount++;
528
- const current = next.players[next.turnOwner];
529
- current.offeringPlayedThisTurn = false;
530
- current.offerings = current.offerings.map(offering => ({ ...offering, ready: true }));
531
- current.battleZone = current.battleZone.map(card => ({ ...card, canAttack: true }));
532
- const drawnCard = next.sharedDeck.shift();
533
- if (drawnCard) {
534
- if (current.hand) {
535
- current.hand.push(drawnCard);
536
- }
537
- else {
538
- current.handCount = (current.handCount ?? 0) + 1;
539
- }
540
- }
541
- next.revision++;
542
- next.log = [
543
- drawnCard ? `${current.displayName} roba una carta.` : `El mazo esta vacio.`,
544
- `Turno de ${current.displayName}.`,
545
- ...next.log,
546
- ].slice(0, 4);
547
- return next;
548
- });
549
- }
550
- resetMock() {
551
- this.game.set(structuredClone(STARTING_GAME));
552
- this.selectedHandCard.set(null);
553
- this.selectedAttacker.set(null);
554
- this.selectedPreview.set(null);
555
- this.selectedInfo.set(null);
556
- this.showHistory.set(false);
557
- this.offeringsSeat.set(null);
558
- }
559
- closePreview() {
560
- this.selectedPreview.set(null);
561
- this.resetPreviewTilt();
562
- }
563
- closeInfo() {
564
- this.selectedInfo.set(null);
565
- }
566
- openOfferings(seat) {
567
- this.selectedPreview.set(null);
568
- this.selectedInfo.set(null);
569
- this.showHistory.set(false);
570
- this.offeringsSeat.set(seat);
571
- }
572
- openHistory() {
573
- this.selectedPreview.set(null);
574
- this.selectedInfo.set(null);
575
- this.offeringsSeat.set(null);
576
- this.showHistory.set(true);
577
- }
578
- closeOfferings() {
579
- this.offeringsSeat.set(null);
580
- }
581
- tiltPreview(event) {
582
- const bounds = event.currentTarget.getBoundingClientRect();
583
- const x = (event.clientX - bounds.left) / bounds.width - 0.5;
584
- const y = (event.clientY - bounds.top) / bounds.height - 0.5;
585
- this.previewTilt.set({
586
- rotateX: 5 - y * 18,
587
- rotateY: -5 + x * 18,
588
- shiftX: x * 10,
589
- shiftY: y * 10,
590
- });
591
- }
592
- resetPreviewTilt() {
593
- this.previewTilt.set({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
594
- }
595
- cleanupDestroyed(player, game) {
596
- const destroyed = player.battleZone.filter(card => card.currentHp <= 0);
597
- if (!destroyed.length)
598
- return;
599
- game.historyZone.push(...destroyed.map(card => card.cardId));
600
- player.battleZone = player.battleZone.filter(card => card.currentHp > 0);
601
- }
602
- inspectLeader(seat) {
603
- this.selectedInfo.set(null);
604
- const player = this.game().players[seat];
605
- this.selectedPreview.set({
606
- title: player.leaderName,
607
- eyebrow: this.t('christianityLeaderCard'),
608
- meta: `${player.leaderHp}/${player.leaderMaxHp}`,
609
- body: seat === 'P2' && this.hasOpponentGuards() ? this.t('christianityLeaderProtected') : this.t('christianityLeaderBody'),
610
- });
611
- }
612
- inspectOffering(offering) {
613
- this.selectedInfo.set(null);
614
- this.selectedPreview.set({
615
- title: offering.name,
616
- eyebrow: this.t('christianityOfferingCard'),
617
- meta: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
618
- body: offering.abilityText || this.t('christianityOfferingBody'),
619
- cardId: offering.cardId,
620
- source: 'pile',
621
- });
622
- }
623
- canUseOfferingAbility(offering, seat) {
624
- if (seat !== 'P1' || !this.isOwnTurn())
625
- return false;
626
- if (!offering.ready || !offering.abilityName)
627
- return false;
628
- return this.readyOfferings(this.game().players[seat]) >= (offering.abilityCost ?? 0);
629
- }
630
- useOfferingAbility(offering, seat) {
631
- if (!this.canUseOfferingAbility(offering, seat))
632
- return;
633
- this.game.update(game => {
634
- const next = structuredClone(game);
635
- const player = next.players[seat];
636
- const liveOffering = player.offerings.find(card => card.instanceId === offering.instanceId);
637
- if (!liveOffering || !liveOffering.ready)
638
- return game;
639
- const offeringId = liveOffering.instanceId;
640
- this.spendOfferings(player, liveOffering.abilityCost ?? 0);
641
- player.offerings = player.offerings.map(card => (card.instanceId === offeringId ? { ...card, ready: false } : card));
642
- player.leaderHp = Math.max(0, player.leaderHp - 1);
643
- next.revision++;
644
- next.log = [`${liveOffering.name}: ${liveOffering.abilityName}.`, ...next.log].slice(0, 4);
645
- return next;
646
- });
647
- }
648
- inspectDeck() {
649
- const remainingCards = this.game().sharedDeck.length;
650
- this.selectedPreview.set(null);
651
- this.selectedInfo.set({
652
- title: this.t('christianityDeck'),
653
- eyebrow: this.t('christianitySharedZone'),
654
- meta: `${remainingCards} ${remainingCards === 1 ? this.t('christianityCardRemaining') : this.t('christianityCardsRemaining')}`,
655
- body: this.t('christianityDeckBody'),
656
- facts: [
657
- this.t('christianityDeckRuleShared'),
658
- this.t('christianityDeckRuleDraw'),
659
- this.t('christianityDeckRuleEmpty'),
660
- ],
661
- });
662
- }
663
- inspectHandCard(cardId, fromHand = false) {
664
- this.selectedInfo.set(null);
665
- const card = this.cardDefinition(cardId);
666
- if (fromHand) {
667
- this.selectedAttacker.set(null);
668
- this.selectedHandCard.set(cardId);
669
- }
670
- this.selectedPreview.set({
671
- title: card.name,
672
- eyebrow: card.type === 'offering' ? this.t('christianityOfferingCard') : this.t('christianityCharacterCard'),
673
- meta: card.type === 'offering' ? `+${card.life}` : `${this.t('christianityCost')} ${card.cost} · ${card.attack}/${card.life}`,
674
- body: card.type === 'offering' ? this.t('christianityOfferingBody') : this.t('christianityCharacterBody'),
675
- cardId,
676
- source: fromHand ? 'hand' : 'pile',
677
- });
678
- }
679
- inspectHistoryCard(cardId) {
680
- this.showHistory.set(false);
681
- this.inspectHandCard(cardId);
682
- }
683
- inspectCharacter(card) {
684
- this.selectedInfo.set(null);
685
- this.selectedPreview.set({
686
- title: card.name,
687
- eyebrow: this.t('christianityCharacterCard'),
688
- meta: `${card.attack}/${card.currentHp}`,
689
- body: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
690
- });
691
- }
692
- spendOfferings(player, cost) {
693
- let remaining = cost;
694
- player.offerings = player.offerings.map(offering => {
695
- if (remaining <= 0 || !offering.ready)
696
- return offering;
697
- remaining -= offering.value;
698
- return { ...offering, ready: false };
699
- });
700
- }
701
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
702
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChristianityGameComponent, isStandalone: true, selector: "val-christianity-game", ngImport: i0, template: `
703
- <main class="christianity-shell">
704
- <section class="christianity-header">
705
- <div>
706
- <p>{{ t('christianityEyebrow') }}</p>
707
- <h1>{{ t('christianityTitle') }}</h1>
708
- </div>
709
- <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
710
- <span>{{ t('christianityTurn') }}</span>
711
- <strong>{{ currentPlayer().displayName }}</strong>
712
- </div>
713
- </section>
714
-
715
- <section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
716
- <article class="christianity-match-player">
717
- <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
718
- <div>
719
- <strong>{{ player().displayName }}</strong>
720
- <small>{{ player().leaderName }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
721
- </div>
722
- </article>
723
- <div class="christianity-scoreboard">
724
- <span>{{ t('christianityMatch') }}</span>
725
- <strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
726
- </div>
727
- <article class="christianity-match-player christianity-match-player--opponent">
728
- <span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
729
- <div>
730
- <strong>{{ opponent().displayName }}</strong>
731
- <small>{{ opponent().leaderName }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
732
- </div>
733
- </article>
734
- </section>
735
-
736
- <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
737
- <div class="christianity-hand-meter christianity-hand-meter--opponent">
738
- <span>{{ t('christianityHand') }}</span>
739
- <strong>{{ opponentHandCount() }}</strong>
740
- </div>
741
- <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
742
- @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
743
- <button
744
- type="button"
745
- class="christianity-card-preview-card christianity-card-frame christianity-card-frame--back"
746
- valLightRipple
747
- [style.transform]="fanTransform($index, opponentHandCount(), true)"
748
- [attr.aria-label]="t('christianityHiddenCard')"
749
- ></button>
750
- }
751
- </section>
752
- </section>
753
-
754
- <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
755
- <section class="christianity-player-side christianity-player-side--opponent">
756
- <section class="christianity-player-rack christianity-player-rack--opponent">
757
- <div class="christianity-offerings-zone">
758
- <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
759
- <i aria-hidden="true"></i>
760
- <i aria-hidden="true"></i>
761
- <i aria-hidden="true"></i>
762
- <span>{{ t('christianityOfferings') }}</span>
763
- <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
764
- </button>
765
- </div>
766
- <button type="button" class="christianity-leader-card christianity-card-frame christianity-card-frame--leader" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
767
- <header class="christianity-card-frame-header">
768
- <small>{{ t('christianityLeaderCard') }}</small>
769
- <strong>{{ opponent().leaderName }}</strong>
770
- <span>{{ opponent().leaderHp }}</span>
771
- </header>
772
- <section class="christianity-card-frame-art">
773
- <span>{{ opponent().leaderName }}</span>
774
- <small>{{ t('christianityLeaderCard') }}</small>
775
- </section>
776
- <section class="christianity-card-frame-effect">
777
- <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
778
- </section>
779
- </button>
780
- <span class="christianity-rack-spacer" aria-hidden="true"></span>
781
- </section>
782
-
783
- <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
784
- @for (slot of battleSlots('P2'); track slot.trackId) {
785
- @if (slot.card) {
786
- <button
787
- type="button"
788
- class="christianity-card-preview-card christianity-card-preview-card--battle christianity-card-frame christianity-card-frame--battle"
789
- valLightRipple
790
- [class.is-target]="selectedAttacker()"
791
- (click)="handleOpponentCharacter(slot.card)"
792
- >
793
- <header class="christianity-card-frame-header">
794
- <small>{{ t('christianityCost') }} {{ cardDefinition(slot.card.cardId).cost }}</small>
795
- <strong>{{ slot.card.name }}</strong>
796
- <span>{{ cardDefinition(slot.card.cardId).cost }}</span>
797
- </header>
798
- <section class="christianity-card-frame-art">
799
- <span>{{ slot.card.name }}</span>
800
- <small>{{ t('christianityCharacterCard') }}</small>
801
- </section>
802
- <section class="christianity-card-frame-effect">
803
- <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
804
- </section>
805
- </button>
806
- } @else {
807
- <span class="christianity-slot"></span>
808
- }
809
- }
810
- </section>
811
- </section>
812
-
813
- <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
814
- <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="openHistory()">
815
- <i aria-hidden="true"></i>
816
- <i aria-hidden="true"></i>
817
- <i aria-hidden="true"></i>
818
- <span>{{ t('christianityHistory') }}</span>
819
- <strong>{{ game().historyZone.length }}</strong>
820
- </button>
821
- <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
822
- <i aria-hidden="true"></i>
823
- <i aria-hidden="true"></i>
824
- <i aria-hidden="true"></i>
825
- <span>{{ t('christianityDeck') }}</span>
826
- <strong>{{ game().sharedDeck.length }}</strong>
827
- </button>
828
- <div class="christianity-zone-card">
829
- <span>{{ t('christianityPlace') }}</span>
830
- <strong>{{ t('christianityEmpty') }}</strong>
831
- </div>
832
- </section>
833
-
834
- <section class="christianity-player-side">
835
- <section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
836
- @for (slot of battleSlots('P1'); track slot.trackId) {
837
- @if (slot.card) {
838
- <button
839
- type="button"
840
- class="christianity-card-preview-card christianity-card-preview-card--battle christianity-card-frame christianity-card-frame--battle"
841
- valLightRipple
842
- [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
843
- [class.is-exhausted]="!slot.card.canAttack"
844
- (click)="selectAttacker(slot.card)"
845
- >
846
- <header class="christianity-card-frame-header">
847
- <small>{{ t('christianityCost') }} {{ cardDefinition(slot.card.cardId).cost }}</small>
848
- <strong>{{ slot.card.name }}</strong>
849
- <span>{{ cardDefinition(slot.card.cardId).cost }}</span>
850
- </header>
851
- <section class="christianity-card-frame-art">
852
- <span>{{ slot.card.name }}</span>
853
- <small>{{ t('christianityCharacterCard') }}</small>
854
- </section>
855
- <section class="christianity-card-frame-effect">
856
- <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
857
- </section>
858
- </button>
859
- } @else {
860
- <button
861
- type="button"
862
- class="christianity-slot"
863
- cdkDropList
864
- [id]="battleSlotDropId($index)"
865
- [cdkDropListData]="$index"
866
- [cdkDropListConnectedTo]="['christianity-hand-source']"
867
- [cdkDropListEnterPredicate]="canDropOnBattleSlot"
868
- [class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
869
- valLightRipple
870
- (cdkDropListDropped)="dropOnBattleSlot($event, $index)"
871
- (click)="playSelectedCard($index)"
872
- >
873
- @if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
874
- <span>{{ t('christianityPlayHere') }}</span>
875
- }
876
- </button>
877
- }
878
- }
879
- </section>
880
-
881
- <section class="christianity-player-rack">
882
- <div class="christianity-offerings-zone">
883
- <button
884
- type="button"
885
- class="christianity-offering-pile"
886
- cdkDropList
887
- id="christianity-offerings-drop"
888
- valLightRipple
889
- [cdkDropListConnectedTo]="['christianity-hand-source']"
890
- [class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
891
- [cdkDropListEnterPredicate]="canDropOnOfferings"
892
- (cdkDropListDropped)="dropOnOfferings($event)"
893
- (click)="handleOfferingPile('P1')"
894
- >
895
- <i aria-hidden="true"></i>
896
- <i aria-hidden="true"></i>
897
- <i aria-hidden="true"></i>
898
- <span>{{ t('christianityOfferings') }}</span>
899
- <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
900
- </button>
901
- </div>
902
- <button type="button" class="christianity-leader-card christianity-card-frame christianity-card-frame--leader" valLightRipple (click)="inspectLeader('P1')">
903
- <header class="christianity-card-frame-header">
904
- <small>{{ t('christianityLeaderCard') }}</small>
905
- <strong>{{ player().leaderName }}</strong>
906
- <span>{{ player().leaderHp }}</span>
907
- </header>
908
- <section class="christianity-card-frame-art">
909
- <span>{{ player().leaderName }}</span>
910
- <small>{{ t('christianityLeaderCard') }}</small>
911
- </section>
912
- <section class="christianity-card-frame-effect">
913
- <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
914
- </section>
915
- </button>
916
- <div class="christianity-player-command">
917
- <div class="christianity-player-badge">
918
- <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
919
- <strong>{{ player().displayName }}</strong>
920
- </div>
921
- <button
922
- type="button"
923
- class="christianity-end-turn"
924
- (click)="endTurn()"
925
- >
926
- {{ t('christianityEndTurn') }}
927
- </button>
928
- </div>
929
- </section>
930
- </section>
931
- </section>
932
-
933
- <section class="christianity-hand-shelf">
934
- <div class="christianity-hand-meter">
935
- <span>{{ t('christianityHand') }}</span>
936
- <strong>{{ player().hand?.length ?? 0 }}</strong>
937
- </div>
938
- <section
939
- class="christianity-hand-fan"
940
- cdkDropList
941
- id="christianity-hand-source"
942
- [cdkDropListConnectedTo]="dropTargetIds()"
943
- [attr.aria-label]="t('christianityYourHand')"
944
- (pointerleave)="clearHoveredHandIndex()"
945
- >
946
- @for (cardId of player().hand ?? []; track cardId + $index) {
947
- @let card = cardDefinition(cardId);
948
- <div
949
- class="christianity-hand-card-wrap"
950
- [class.is-selected]="selectedHandCard() === cardId"
951
- [class.is-dragging]="draggingCardId() === cardId"
952
- [style.z-index]="handCardZIndex($index)"
953
- [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
954
- (pointerenter)="setHoveredHandIndex($index)"
955
- (pointerdown)="setHoveredHandIndex($index)"
956
- (pointerup)="releaseHoveredHand($event)"
957
- >
958
- <button
959
- type="button"
960
- class="christianity-card-preview-card christianity-card-preview-card--hand christianity-card-frame"
961
- cdkDrag
962
- valLightRipple
963
- [cdkDragData]="cardId"
964
- [cdkDragDisabled]="!canPlay(card)"
965
- [class.is-selected]="selectedHandCard() === cardId"
966
- [class.is-disabled]="!canPlay(card)"
967
- (cdkDragStarted)="startDraggingCard(cardId)"
968
- (cdkDragEnded)="endDraggingCard()"
969
- (click)="selectHandCard(cardId)"
970
- >
971
- <header class="christianity-card-frame-header">
972
- <small>{{ cardTypeLabel(card) }}</small>
973
- <strong>{{ card.name }}</strong>
974
- <span>{{ card.type === 'offering' ? '+' + card.life : card.cost }}</span>
975
- </header>
976
- <section class="christianity-card-frame-art">
977
- <span>{{ card.name }}</span>
978
- <small>{{ cardTypeLabel(card) }}</small>
979
- </section>
980
- <section class="christianity-card-frame-effect">
981
- <strong>
982
- @if (card.type === 'offering') {
983
- +{{ card.life }}
984
- } @else {
985
- {{ card.attack }} / {{ card.life }}
986
- }
987
- </strong>
988
- </section>
989
- <footer class="christianity-card-frame-footer">
990
- <span>{{ card.edition ?? 'MVP' }}</span>
991
- <span>{{ card.collectorNumber ?? card.id }}</span>
992
- </footer>
993
- </button>
994
- <button
995
- type="button"
996
- class="christianity-card-eye"
997
- [attr.aria-label]="t('christianityPreviewCard')"
998
- (click)="inspectHandCard(cardId, true); $event.stopPropagation()"
999
- ></button>
1000
- </div>
1001
- }
1002
- </section>
1003
- </section>
1004
-
1005
- @if (selectedPreview()) {
1006
- <button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
1007
- <aside
1008
- class="christianity-floating-card-shell"
1009
- aria-live="polite"
1010
- >
1011
- <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
1012
- {{ t('close') }}
1013
- </button>
1014
- <div
1015
- class="christianity-floating-card"
1016
- [style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
1017
- [style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
1018
- [style.--preview-shift-x]="previewTilt().shiftX + 'px'"
1019
- [style.--preview-shift-y]="previewTilt().shiftY + 'px'"
1020
- (pointermove)="tiltPreview($event)"
1021
- (pointerleave)="resetPreviewTilt()"
1022
- >
1023
- @if (selectedPreviewCard(); as previewCard) {
1024
- <header class="christianity-full-card-header">
1025
- <span class="christianity-full-card-type-icon" aria-hidden="true"></span>
1026
- <strong>{{ previewCard.name }}</strong>
1027
- <span class="christianity-full-card-cost">{{ previewCard.type === 'offering' ? '+' + previewCard.life : previewCard.cost }}</span>
1028
- </header>
1029
- <section class="christianity-full-card-art" [class.has-image]="previewCard.imageUrl">
1030
- @if (previewCard.imageUrl) {
1031
- <img [src]="previewCard.imageUrl" [alt]="previewCard.name" />
1032
- } @else {
1033
- <span>{{ previewCard.name }}</span>
1034
- }
1035
- <small>{{ cardTypeLabel(previewCard) }}</small>
1036
- </section>
1037
- <section class="christianity-full-card-verse">
1038
- <p>{{ previewCard.verseText ?? selectedPreview()?.body }}</p>
1039
- @if (previewCard.scripture) {
1040
- <strong>{{ previewCard.scripture }}</strong>
1041
- }
1042
- </section>
1043
- <section class="christianity-full-card-effect">
1044
- <div class="christianity-full-card-stats">
1045
- @if (previewCard.type === 'character') {
1046
- <strong>{{ previewCard.attack }}</strong>
1047
- <strong>{{ previewCard.life }}</strong>
1048
- } @else {
1049
- <strong>+{{ previewCard.life }}</strong>
1050
- }
1051
- </div>
1052
- <div>
1053
- @if (previewCard.abilityName) {
1054
- <strong>{{ previewCard.abilityName }}</strong>
1055
- }
1056
- <p>{{ previewCard.abilityText ?? selectedPreview()?.body }}</p>
1057
- </div>
1058
- <span
1059
- class="christianity-full-card-rarity"
1060
- [class.is-normal]="!previewCard.rarity || previewCard.rarity === 'normal'"
1061
- [class.is-uncommon]="previewCard.rarity === 'uncommon'"
1062
- [class.is-rare]="previewCard.rarity === 'rare'"
1063
- [class.is-legendary]="previewCard.rarity === 'legendary'"
1064
- aria-hidden="true"
1065
- ></span>
1066
- </section>
1067
- <footer class="christianity-full-card-footer">
1068
- <span>{{ previewCard.edition ?? 'MVP' }}</span>
1069
- <span>{{ previewCard.collectorNumber ?? previewCard.id }}</span>
1070
- <span>{{ previewCard.year ?? '2026' }} CHRISTIANITY</span>
1071
- <span>{{ previewCard.author ?? 'MVP' }}</span>
1072
- </footer>
1073
- } @else {
1074
- <header class="christianity-full-card-header">
1075
- <span class="christianity-full-card-type-icon" aria-hidden="true"></span>
1076
- <strong>{{ selectedPreview()?.title }}</strong>
1077
- <span class="christianity-full-card-cost">{{ selectedPreview()?.meta }}</span>
1078
- </header>
1079
- <section class="christianity-full-card-art">
1080
- <span>{{ selectedPreview()?.title }}</span>
1081
- <small>{{ selectedPreview()?.eyebrow }}</small>
1082
- </section>
1083
- <section class="christianity-full-card-verse">
1084
- <p>{{ selectedPreview()?.body }}</p>
1085
- </section>
1086
- <section class="christianity-full-card-effect">
1087
- <div class="christianity-full-card-stats">
1088
- <strong>{{ selectedPreview()?.meta }}</strong>
1089
- </div>
1090
- <div>
1091
- <strong>{{ selectedPreview()?.eyebrow }}</strong>
1092
- <p>{{ selectedPreview()?.body }}</p>
1093
- </div>
1094
- <span class="christianity-full-card-rarity is-legendary" aria-hidden="true"></span>
1095
- </section>
1096
- <footer class="christianity-full-card-footer">
1097
- <span>MVP</span>
1098
- <span>{{ selectedPreview()?.eyebrow }}</span>
1099
- <span>2026 CHRISTIANITY</span>
1100
- <span>{{ selectedPreview()?.meta }}</span>
1101
- </footer>
1102
- }
1103
- </div>
1104
- @if (selectedPreview()?.source === 'hand') {
1105
- <div class="christianity-floating-card-actions">
1106
- <button type="button" [disabled]="previewActionDisabled()" (click)="playPreviewCard()">
1107
- {{ selectedActionLabel() }}
1108
- </button>
1109
- </div>
1110
- }
1111
- </aside>
1112
- }
1113
-
1114
- @if (selectedInfo(); as info) {
1115
- <button type="button" class="christianity-info-backdrop" [attr.aria-label]="t('close')" (click)="closeInfo()"></button>
1116
- <aside class="christianity-info-panel" aria-live="polite">
1117
- <button type="button" class="christianity-dialog-close christianity-info-close" (click)="closeInfo()">
1118
- {{ t('close') }}
1119
- </button>
1120
- <div class="christianity-rule-note">
1121
- <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1122
- <div>
1123
- <small>{{ info.eyebrow }}</small>
1124
- <h2>{{ info.title }}</h2>
1125
- <strong>{{ info.meta }}</strong>
1126
- <p>{{ info.body }}</p>
1127
- <ul>
1128
- @for (fact of info.facts; track fact) {
1129
- <li>{{ fact }}</li>
1130
- }
1131
- </ul>
1132
- </div>
1133
- </div>
1134
- </aside>
1135
- }
1136
-
1137
- <section class="christianity-actions" aria-live="polite">
1138
- <p>{{ statusText() }}</p>
1139
- <div>
1140
- <button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
1141
- {{ selectedActionLabel() }}
1142
- </button>
1143
- <button type="button" (click)="resetMock()">
1144
- {{ t('christianityReset') }}
1145
- </button>
1146
- </div>
1147
- </section>
1148
-
1149
- @if (showHistory()) {
1150
- <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
1151
- <section class="christianity-history-drawer">
1152
- <header>
1153
- <h2>{{ t('christianityHistory') }}</h2>
1154
- <div class="christianity-dialog-actions">
1155
- <span>{{ game().historyZone.length }}</span>
1156
- <button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
1157
- {{ t('close') }}
1158
- </button>
1159
- </div>
1160
- </header>
1161
- @if (game().historyZone.length) {
1162
- <div class="christianity-history-grid">
1163
- @for (cardId of game().historyZone; track cardId + $index) {
1164
- @let card = cardDefinition(cardId);
1165
- <button type="button" class="christianity-card-preview-card christianity-card-frame christianity-card-frame--list" valLightRipple (click)="inspectHistoryCard(cardId)">
1166
- <header class="christianity-card-frame-header">
1167
- <small>{{ card.type === 'offering' ? t('christianityOfferingCard') : t('christianityCost') + ' ' + card.cost }}</small>
1168
- <strong>{{ card.name }}</strong>
1169
- <span>{{ card.type === 'offering' ? '+' + card.life : card.cost }}</span>
1170
- </header>
1171
- <section class="christianity-card-frame-art">
1172
- <span>{{ card.name }}</span>
1173
- <small>{{ cardTypeLabel(card) }}</small>
1174
- </section>
1175
- <section class="christianity-card-frame-effect">
1176
- <strong>
1177
- @if (card.type === 'offering') {
1178
- +{{ card.life }}
1179
- } @else {
1180
- {{ card.attack }} / {{ card.life }}
1181
- }
1182
- </strong>
1183
- </section>
1184
- </button>
1185
- }
1186
- </div>
1187
- } @else {
1188
- <p>{{ t('christianityHistoryEmpty') }}</p>
1189
- }
1190
- </section>
1191
- }
1192
-
1193
- @if (offeringsSeat()) {
1194
- @let offeringPlayer = game().players[offeringsSeat()!];
1195
- <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
1196
- <section class="christianity-history-drawer christianity-offerings-drawer">
1197
- <header>
1198
- <h2>{{ t('christianityOfferings') }}</h2>
1199
- <div class="christianity-dialog-actions">
1200
- <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
1201
- <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
1202
- {{ t('close') }}
1203
- </button>
1204
- </div>
1205
- </header>
1206
- <div class="christianity-offerings-note">
1207
- <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1208
- <p>{{ t('christianityOfferingsRuleBody') }}</p>
1209
- </div>
1210
- <div class="christianity-offering-list">
1211
- @for (offering of offeringPlayer.offerings; track offering.instanceId) {
1212
- <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
1213
- <button type="button" class="christianity-offering-card" valLightRipple (click)="inspectOffering(offering)">
1214
- <small>{{ t('christianityOfferingCard') }}</small>
1215
- <strong>{{ offering.name }}</strong>
1216
- <span>+{{ offering.value }}</span>
1217
- <em>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</em>
1218
- </button>
1219
- <div>
1220
- <strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
1221
- <p>{{ offering.abilityText || t('christianityOfferingNoAbility') }}</p>
1222
- @if (offering.abilityName) {
1223
- <button
1224
- type="button"
1225
- [disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
1226
- (click)="useOfferingAbility(offering, offeringsSeat()!)"
1227
- >
1228
- {{ t('christianityUseAbility') }}
1229
- </button>
1230
- }
1231
- </div>
1232
- </article>
1233
- }
1234
- </div>
1235
- </section>
1236
- }
1237
- </main>
1238
- `, isInline: true, styles: [":host{--christianity-theme-ink: var(--val-text-color, #1f2933);--christianity-theme-surface: #ffffff;--christianity-theme-parchment: #fffaf0;--christianity-theme-olive: #5f6f2a;--christianity-theme-gold: #d6a21d;--christianity-theme-gold-soft: rgba(214, 162, 29, .18);--christianity-theme-gold-ring: rgba(214, 162, 29, .48);--christianity-theme-glow: rgba(245, 199, 85, .32);--christianity-theme-focus: #2563eb;--christianity-theme-shadow: rgba(82, 64, 28, .18);--christianity-theme-shadow-strong: rgba(82, 64, 28, .3);--christianity-card-aspect: 5 / 7.45;--christianity-card-back: linear-gradient(135deg, rgba(16, 42, 67, .16), rgba(16, 42, 67, .03)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(16, 42, 67, .11), rgba(16, 42, 67, .02)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);display:block;max-width:100%;min-width:0;overflow-x:clip;color:var(--christianity-theme-ink)}.christianity-shell{box-sizing:border-box;display:grid;gap:.65rem;width:100%;max-width:100%;min-width:0;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb;overflow-x:clip;overflow-y:visible}.christianity-header,.christianity-match-strip,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-match-player strong,.christianity-match-player small,.christianity-scoreboard span,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-match-strip{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);padding:.45rem;border:1px solid rgba(36,48,68,.1);border-radius:.75rem;background:#fff}.christianity-match-player{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.5rem;align-items:center;min-width:0}.christianity-match-player--opponent{direction:rtl}.christianity-match-player--opponent div{direction:ltr;text-align:right}.christianity-match-player div{display:grid;min-width:0}.christianity-match-player strong,.christianity-match-player small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-match-player small,.christianity-scoreboard span{color:#1f293394;font-size:.72rem}.christianity-scoreboard{display:grid;justify-items:center;min-width:4.2rem;padding:0 .55rem;border-right:1px solid rgba(36,48,68,.1);border-left:1px solid rgba(36,48,68,.1)}.christianity-scoreboard strong{font-size:1.2rem;line-height:1}.christianity-table{box-sizing:border-box;display:grid;gap:.45rem;width:100%;max-width:100%;min-width:0;padding:.45rem .35rem;border-radius:.75rem;background:#dceafb;overflow-x:clip;overflow-y:visible}.christianity-player-side{box-sizing:border-box;display:grid;gap:.35rem;width:100%;max-width:100%;min-width:0;padding:.35rem .3rem;border-radius:.7rem;background:#ffffff57;grid-template-rows:minmax(7rem,1fr) auto;min-height:13.75rem}.christianity-player-side--opponent{grid-template-rows:auto minmax(7rem,1fr)}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{--christianity-battle-card-width: clamp(4.8rem, 15vw, 6.6rem);box-sizing:border-box;display:grid;grid-template-columns:repeat(4,var(--christianity-battle-card-width));gap:.5rem;align-items:center;justify-content:center;width:100%;max-width:100%;min-width:0;min-height:clamp(9.1rem,29vw,11rem);padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2;transition:background .16s ease,box-shadow .16s ease}.christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#fffaf0f5,#ffffffd6),#ffffffc2;box-shadow:inset 0 0 0 .14rem var(--christianity-theme-gold-soft),0 .8rem 1.7rem #5f6f2a1f}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .18rem var(--christianity-theme-gold-soft),0 .85rem 1.4rem var(--christianity-theme-shadow)}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{display:grid;place-items:center;justify-self:center;width:var(--christianity-battle-card-width);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73;color:inherit;font:inherit}.christianity-slot--play-target{position:relative;border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0eb,#f8fafcd1),#ffffffb3;color:#5d4305;font-weight:800;overflow:hidden;box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-slot--play-target:before{content:\"\";position:absolute;inset:.35rem;border:1px solid rgba(214,162,29,.22);border-radius:.4rem;background:linear-gradient(135deg,rgba(214,162,29,.1),transparent 46%),radial-gradient(circle at 50% 42%,var(--christianity-theme-glow),transparent 58%)}.christianity-slot--play-target span{position:relative;z-index:2;padding:.16rem .44rem;border-radius:999px;background:#ffffffc7;font-size:.78rem}@keyframes christianity-target-pulse{0%,to{box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow)}50%{box-shadow:inset 0 0 0 .16rem #d6a21d57,0 .9rem 1.65rem var(--christianity-theme-shadow-strong)}}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:10.8rem;padding:.25rem .25rem 2.1rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:12;min-height:12rem;margin-top:-1.15rem;padding:1.45rem .25rem 1rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:8;min-height:6.85rem;margin-top:0;margin-bottom:0;padding:.45rem .25rem .85rem}.christianity-hand-fan--opponent{min-height:5.9rem;padding-bottom:.75rem;align-items:start}.christianity-hand-fan--opponent .christianity-card-frame--back{width:clamp(3.7rem,12vw,4.9rem);margin-inline:-.9rem;transform-origin:50% 120%}.christianity-hand-fan--opponent .christianity-card-frame--back:first-child{margin-left:0}.christianity-hand-fan--opponent .christianity-card-frame--back:last-child{margin-right:0}.christianity-card-preview-card,.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-card-frame{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;overflow:hidden;padding:.48rem;text-align:left;background:linear-gradient(180deg,#fffffffa,#f8fafcfa),radial-gradient(circle at 15% 0%,rgba(214,162,29,.12),transparent 44%);box-shadow:0 .5rem 1.25rem #2430441a,inset 0 0 0 .18rem #ffffff9e}.christianity-card-frame-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.16rem;align-items:start;min-width:0}.christianity-card-frame-header small{grid-column:1;min-width:0;overflow:hidden;color:#1f2933a3;font-size:clamp(.52rem,1.5vw,.68rem);line-height:1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-header strong{grid-column:1;justify-self:start;align-self:start;min-width:0;padding:0;overflow:hidden;border-radius:0;background:transparent;font-size:clamp(.82rem,2.5vw,1.05rem);line-height:1.02;text-overflow:ellipsis;white-space:nowrap}.christianity-card-preview-card--hand .christianity-card-frame-header strong,.christianity-card-preview-card--battle .christianity-card-frame-header strong,.christianity-leader-card .christianity-card-frame-header strong{display:-webkit-box;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-preview-card--hand .christianity-card-frame-header small{text-transform:uppercase}.christianity-card-preview-card--hand .christianity-card-frame-art>span{display:-webkit-box;max-width:88%;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-frame-header span{grid-column:2;grid-row:1 / span 2;display:grid;place-items:center;min-width:1.3rem;height:1.3rem;padding:0 .22rem;border-radius:999px;background:#ffd91a;color:#243044;font-size:.8rem;font-weight:900;line-height:1;box-shadow:inset 0 -.08rem #52401c2e}.christianity-card-frame-art{position:relative;display:grid;place-items:center;min-height:0;overflow:hidden;border-radius:.36rem;background:linear-gradient(135deg,#5f6f2a2e,#d6a21d24),radial-gradient(circle at 50% 18%,rgba(255,255,255,.72),transparent 48%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-card-frame-art>span{max-width:78%;overflow:hidden;color:#2430447a;font-size:clamp(.82rem,2.2vw,1.05rem);font-weight:900;line-height:1.02;text-align:center;text-overflow:ellipsis}.christianity-card-frame-art small{position:absolute;right:0;bottom:.28rem;max-width:78%;padding:.1rem .34rem;overflow:hidden;border-radius:999px 0 0 999px;background:#ffffffe6;color:#1f2933a8;font-size:.48rem;font-style:italic;font-weight:900;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-card-frame-effect{display:grid;align-content:center;gap:.1rem;min-height:1.45rem;padding:.24rem;overflow:hidden;border-radius:.34rem;background:radial-gradient(circle at 50% 70%,rgba(36,48,68,.06),transparent 44%),#ffffffdb}.christianity-card-frame-effect strong{justify-self:end;align-self:end;padding:.12rem .32rem;border-radius:999px;background:#edf2f7;font-size:clamp(.66rem,2vw,.82rem);line-height:1.05}.christianity-card-frame-effect p{margin:0;overflow:hidden;color:#1f2933b8;font-size:.58rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-footer{display:flex;justify-content:space-between;gap:.22rem;color:#1f293385;font-size:.46rem;font-weight:800;line-height:1}.christianity-card-frame--battle{gap:.22rem;padding:.42rem}.christianity-card-frame--battle .christianity-card-frame-art{min-height:2.6rem}.christianity-card-frame--leader .christianity-card-frame-art{background:linear-gradient(135deg,#2563eb24,#d6a21d29),radial-gradient(circle at 50% 18%,rgba(255,255,255,.78),transparent 48%),#e7eef8}.christianity-card-frame--list{width:clamp(4.4rem,22vw,5.8rem);padding:.38rem}.christianity-card-frame--list .christianity-card-frame-art{min-height:2.5rem}.christianity-hand-card-wrap{position:relative;display:grid;justify-items:center;flex:0 0 auto;margin-inline:-.42rem;padding-bottom:2rem;transform-origin:50% 115%;transition:transform .16s ease,filter .16s ease}.christianity-hand-card-wrap:hover,.christianity-hand-card-wrap.is-selected,.christianity-hand-card-wrap.is-dragging{z-index:3}.christianity-hand-card-wrap:hover .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-selected .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-dragging .christianity-card-preview-card--hand{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .12rem var(--christianity-theme-gold-soft),0 1rem 2rem var(--christianity-theme-shadow)}.christianity-card-preview-card--hand{touch-action:none}.christianity-card-preview-card--hand.cdk-drag-disabled{cursor:not-allowed}.christianity-card-preview-card.cdk-drag-preview{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px solid var(--christianity-theme-gold-ring);box-shadow:0 0 0 .16rem #fff4c2ad,0 1.5rem 3rem var(--christianity-theme-shadow-strong);transform:rotate(2deg) scale(1.03)}.christianity-card-preview-card.cdk-drag-placeholder{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);opacity:.22}.christianity-slot.cdk-drop-list-dragging,.christianity-offering-pile.cdk-drop-list-dragging{border-color:var(--christianity-theme-gold-ring)}.christianity-slot.cdk-drop-list-receiving,.christianity-offering-pile.cdk-drop-list-receiving{box-shadow:inset 0 0 0 .18rem #d6a21d57,0 1rem 1.9rem var(--christianity-theme-shadow-strong)}.christianity-card-eye{position:absolute;right:50%;bottom:.38rem;width:2.15rem;height:1.55rem;border:1px solid color-mix(in srgb,var(--christianity-theme-focus) 52%,transparent);border-radius:999px;background:#fffffff0;box-shadow:0 .55rem 1.1rem #102a4324;opacity:0;transform:translate(50%,-.2rem) scale(.92);transition:opacity .14s ease,transform .14s ease,border-color .14s ease}.christianity-card-eye:before{content:\"\";position:absolute;top:50%;left:50%;width:1.1rem;height:1.1rem;border:.12rem solid var(--christianity-theme-focus);border-radius:82% 0;background:#fffffff0;transform:translate(-50%,-50%) rotate(45deg)}.christianity-card-eye:after{content:\"\";position:absolute;top:50%;left:50%;width:.42rem;height:.42rem;border:.09rem solid rgba(255,255,255,.95);border-radius:999px;background:radial-gradient(circle at 35% 32%,#ffffff 0 .06rem,transparent .07rem),var(--christianity-theme-focus);transform:translate(-50%,-50%)}.christianity-hand-card-wrap:hover .christianity-card-eye,.christianity-hand-card-wrap.is-selected .christianity-card-eye,.christianity-card-eye:focus-visible{opacity:1;transform:translate(50%) scale(1)}.christianity-offering-pile.is-play-target{border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0f5,#fffffff0),radial-gradient(circle at 82% 14%,rgba(250,204,21,.28) 0 .7rem,transparent .72rem);box-shadow:inset 0 0 0 .12rem #d6a21d3d,0 .8rem 1.55rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-card-frame--back,.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:0;aspect-ratio:var(--christianity-card-aspect);place-items:center;padding:.55rem;overflow:hidden;box-shadow:0 .8rem 1.55rem #24304424;transform-origin:50% -18%;background:var(--christianity-card-back)}.christianity-card-frame--back:before,.christianity-card-preview-card--back:before{content:\"\";position:absolute;inset:.5rem;border:1px solid rgba(16,42,67,.12);border-radius:.38rem;background:linear-gradient(180deg,#ffffff2e,#ffffff0a);box-shadow:inset 0 0 0 .12rem #ffffff1f}.christianity-card-preview-card--battle{justify-self:center;width:var(--christianity-battle-card-width);min-width:0;height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);margin-inline:0}.christianity-card-preview-card>span,.christianity-card-mini>span,.christianity-offering-pile>span,.christianity-offering-card>span,.christianity-leader-card>span,.christianity-zone-card>span,.christianity-zone-pile>span{position:relative;z-index:2;align-self:start;font-weight:700;line-height:1.05}.christianity-card-preview-card>strong,.christianity-card-mini>strong,.christianity-offering-pile>strong,.christianity-offering-card>strong,.christianity-leader-card>strong,.christianity-zone-card>strong,.christianity-zone-pile>strong{position:relative;z-index:3;justify-self:end;align-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{box-sizing:border-box;display:grid;grid-template-columns:minmax(5.9rem,7rem) minmax(5rem,1fr) minmax(4.2rem,7rem);gap:.45rem;align-items:end;justify-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-player-rack--opponent{align-items:start}.christianity-hand-meter{position:absolute;top:0;right:.35rem;z-index:4;display:inline-grid;grid-auto-flow:column;gap:.25rem;align-items:center;min-height:1.7rem;padding:.18rem .46rem;border:1px solid rgba(36,48,68,.12);border-radius:999px;background:#ffffffe6;box-shadow:0 .35rem .8rem #102a4314}.christianity-hand-meter--opponent{top:.15rem}.christianity-hand-meter span{color:#1f293394;font-size:.68rem}.christianity-hand-meter strong{font-size:.86rem}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-start;justify-self:start;width:100%}.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-frame{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;align-content:stretch}.christianity-offering-pile,.christianity-zone-card,.christianity-zone-pile{grid-template-rows:auto minmax(2.6rem,1fr) auto;align-content:stretch;gap:.32rem}.christianity-card-mini{width:3.5rem}.christianity-offering-pile{position:relative;isolation:isolate;overflow:hidden;justify-self:start;width:min(100%,5.9rem);min-height:7.1rem;padding:.95rem .52rem .6rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-pile i{position:absolute;top:2.45rem;left:.72rem;z-index:-1;width:2.55rem;height:3.55rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:linear-gradient(180deg,#ffffffeb,#f1f5f9eb),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem);box-shadow:0 .35rem .85rem #102a431a;transform:rotate(-5deg)}.christianity-offering-pile i:nth-child(2){transform:translate(.28rem,.08rem) rotate(3deg)}.christianity-offering-pile i:nth-child(3){transform:translate(.55rem,.18rem) rotate(-1deg)}.christianity-leader-card{align-self:center;justify-self:center;width:clamp(4.75rem,17vw,6rem);min-height:0;aspect-ratio:var(--christianity-card-aspect)}.christianity-rack-spacer{display:block;min-height:1px}.christianity-battle-zone{grid-template-columns:repeat(4,var(--christianity-battle-card-width))}.christianity-shared-zone{box-sizing:border-box;display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-zone-card,.christianity-zone-pile{min-height:6.45rem;padding:.7rem .52rem .55rem}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;top:2.2rem;right:.72rem;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:var(--christianity-card-back);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card-shell{position:fixed;top:50%;left:50%;z-index:80;display:grid;gap:.55rem;width:min(26rem,calc(100vw - 1.25rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-floating-card{position:relative;z-index:1;display:grid;grid-template-rows:auto minmax(9rem,1.25fr) auto minmax(7rem,.9fr) auto;gap:.58rem;width:100%;min-height:min(29rem,calc(100vh - 3.5rem));padding:.72rem;border:1px solid rgba(36,48,68,.18);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 20% 0%,var(--christianity-theme-gold-soft),transparent 45%);box-shadow:0 0 0 .18rem #fff4c294,0 0 2.2rem var(--christianity-theme-glow),0 2.4rem 5rem #102a4357,inset 0 0 0 .35rem #ffffff8c;touch-action:none;transform:translate(var(--preview-shift-x, 0px),var(--preview-shift-y, 0px)) perspective(48rem) rotateX(var(--preview-rotate-x, 5deg)) rotateY(var(--preview-rotate-y, -5deg));transition:transform 90ms ease-out}.christianity-full-card-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.42rem;align-items:center}.christianity-full-card-header strong{min-width:0;display:-webkit-box;overflow:hidden;overflow-wrap:anywhere;text-overflow:clip;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:clamp(1.25rem,5vw,1.85rem);line-height:1.04}.christianity-full-card-type-icon,.christianity-full-card-cost{display:grid;place-items:center;border-radius:999px}.christianity-full-card-type-icon{width:1.6rem;height:1.6rem;background:radial-gradient(circle at 50% 50%,rgba(95,111,42,.72) 0 .22rem,transparent .24rem),#2430441a}.christianity-full-card-cost{min-width:2.1rem;height:2.1rem;padding:0 .36rem;background:#ffd91a;color:#243044;font-size:1.1rem;font-weight:900;box-shadow:inset 0 -.12rem #52401c2e}.christianity-full-card-art{position:relative;display:grid;place-items:center;min-height:9rem;overflow:hidden;border-radius:.48rem;background:linear-gradient(135deg,#5f6f2a33,#d6a21d29),radial-gradient(circle at 50% 25%,rgba(255,255,255,.76),transparent 42%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-full-card-art img{width:100%;height:100%;object-fit:cover}.christianity-full-card-art>span{max-width:80%;color:#24304494;font-size:clamp(1.1rem,5vw,1.8rem);font-weight:900;line-height:1.05;text-align:center}.christianity-full-card-art small{position:absolute;right:0;bottom:.55rem;min-width:5rem;padding:.16rem .48rem;border-radius:999px 0 0 999px;background:#ffffffe6;box-shadow:0 .3rem .8rem #102a431f;color:#1f2933bd;font-size:.68rem;font-style:italic;font-weight:900;text-align:center;text-transform:uppercase}.christianity-full-card-verse,.christianity-full-card-effect{display:grid;gap:.32rem}.christianity-full-card-verse p,.christianity-full-card-effect p{margin:0;line-height:1.25}.christianity-full-card-verse{color:#171923;font-family:Georgia,Times New Roman,serif;font-size:clamp(.72rem,2.7vw,.86rem)}.christianity-full-card-verse strong{font-family:inherit;font-size:.78rem;font-weight:900}.christianity-full-card-effect{position:relative;align-content:start;min-height:7rem;padding:.6rem .7rem;overflow:hidden;border-radius:.45rem;background:radial-gradient(circle at 50% 72%,rgba(36,48,68,.07),transparent 34%),#ffffffdb}.christianity-full-card-stats{display:flex;gap:1rem;min-height:1.35rem}.christianity-full-card-stats strong{font-size:1rem;line-height:1}.christianity-full-card-effect>div:last-of-type{display:grid;gap:.12rem}.christianity-full-card-effect>div:last-of-type strong{font-size:.82rem}.christianity-full-card-effect p{font-size:clamp(.78rem,2.9vw,.92rem)}.christianity-full-card-rarity{position:absolute;top:.62rem;right:.62rem;width:.46rem;height:.46rem;border-radius:.12rem;transform:rotate(45deg)}.christianity-full-card-rarity.is-normal{background:#d1d5db}.christianity-full-card-rarity.is-uncommon{background:#22c55e}.christianity-full-card-rarity.is-rare{background:#3b82f6}.christianity-full-card-rarity.is-legendary{background:#eab308}.christianity-full-card-footer{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:.34rem;align-items:center;color:#1f2933ad;font-size:.58rem;line-height:1;text-transform:uppercase}.christianity-full-card-footer span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-floating-card-close{position:absolute;top:0;right:.15rem;z-index:4;min-height:2rem;padding:0 .6rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#ffffffe6;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .45rem 1rem #102a431a}.christianity-preview-backdrop,.christianity-history-backdrop,.christianity-info-backdrop{position:fixed;inset:0;border:0;border-radius:0;background:#0f172a75}.christianity-preview-backdrop{z-index:79}.christianity-info-backdrop{z-index:50}.christianity-info-panel{position:fixed;top:50%;left:50%;z-index:51;width:min(31rem,calc(100vw - 1.25rem));max-height:min(34rem,calc(100vh - 2rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-info-close{position:absolute;top:0;right:.15rem;z-index:2}.christianity-rule-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.85rem;max-height:inherit;padding:1rem;overflow-y:auto;border:1px solid rgba(36,48,68,.14);border-radius:.9rem;background:linear-gradient(180deg,#fffffff7,#f8fafcf7),radial-gradient(circle at 8% 0%,rgba(37,99,235,.1),transparent 38%);box-shadow:0 1.2rem 2.6rem #102a433d,inset 0 0 0 .25rem #ffffff85}.christianity-rule-note-icon{display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:999px;background:color-mix(in srgb,var(--christianity-theme-focus) 12%,#ffffff);color:var(--christianity-theme-focus);font-size:1rem;font-weight:900;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent)}.christianity-rule-note small,.christianity-rule-note strong,.christianity-rule-note p,.christianity-rule-note h2{margin:0}.christianity-rule-note small{color:#1f29339e;font-size:.78rem;font-weight:800;text-transform:uppercase}.christianity-rule-note h2{margin-top:.18rem;font-size:clamp(1.5rem,7vw,2.2rem);line-height:1.05}.christianity-rule-note strong{display:inline-flex;width:fit-content;margin-top:.55rem;padding:.22rem .55rem;border-radius:999px;background:#edf2f7;font-size:.92rem}.christianity-rule-note p{margin-top:.75rem;color:#1f2933c7;line-height:1.45}.christianity-rule-note ul{display:grid;gap:.45rem;margin:.8rem 0 0;padding-left:1.05rem;color:#1f2933c7;line-height:1.35}.christianity-floating-card>small,.christianity-floating-card>span{color:#1f2933a3}.christianity-floating-card>strong{font-size:clamp(1.55rem,8vw,2.35rem);line-height:1.05}.christianity-floating-card>p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-floating-card-actions{position:relative;z-index:4;display:flex;justify-content:center;padding:0 .35rem;transform:translateZ(0)}.christianity-floating-card-actions button{min-height:2.35rem;padding:0 1rem;border:0;border-radius:999px;background:#102a43;color:#fff;font:inherit;font-size:.9rem;font-weight:800;box-shadow:0 .65rem 1.3rem #102a432e}.christianity-floating-card-actions button:disabled{cursor:not-allowed;opacity:.45}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(29rem,calc(100vw - 3rem))}.christianity-floating-card{min-height:min(35rem,calc(100vh - 4rem));padding:1.35rem}}.christianity-history-backdrop{z-index:40}.christianity-history-drawer{position:fixed;right:auto;bottom:max(.5rem,env(safe-area-inset-bottom));left:50%;z-index:41;display:grid;grid-template-rows:auto minmax(0,1fr);gap:.75rem;width:min(calc(100vw - 1rem),44rem);min-height:min(18rem,calc(100dvh - 1rem));max-height:min(32rem,calc(100dvh - 2rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347;transform:translate(-50%)}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-dialog-actions{display:flex;align-items:center;gap:.45rem}.christianity-dialog-close{min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#fff;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .8rem #102a4314}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .25rem}.christianity-history-grid::-webkit-scrollbar,.christianity-offering-list::-webkit-scrollbar{width:.65rem}.christianity-history-grid::-webkit-scrollbar-track,.christianity-offering-list::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-history-grid::-webkit-scrollbar-thumb,.christianity-offering-list::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offerings-drawer{grid-template-rows:auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),48rem);min-height:min(20rem,calc(100dvh - 1rem));max-height:min(34rem,calc(100dvh - 2rem))}.christianity-offerings-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.72rem .8rem;border:1px solid rgba(36,48,68,.12);border-radius:.7rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(214,162,29,.12),transparent 42%)}.christianity-offerings-note p{margin:0;color:#1f2933c2;font-size:.86rem;line-height:1.35}.christianity-offering-list{display:grid;gap:.6rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem}.christianity-offering-row{display:grid;grid-template-columns:minmax(5.4rem,6.5rem) minmax(0,1fr);gap:.65rem;align-items:center;padding:.45rem;border:1px solid rgba(36,48,68,.12);border-radius:.65rem;background:#fff}.christianity-offering-row.is-exhausted{opacity:.68}.christianity-offering-card{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;align-content:stretch;gap:.26rem;width:100%;min-height:7.7rem;padding:.58rem;overflow:hidden;text-align:left;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 78% 14%,rgba(250,204,21,.78) 0 .42rem,transparent .44rem);box-shadow:0 .45rem 1rem #102a431a}.christianity-offering-card small{min-width:0;overflow:hidden;color:#1f293394;font-size:.62rem;font-weight:800;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-offering-card strong{display:-webkit-box;align-self:start;min-width:0;margin-top:.1rem;overflow:hidden;overflow-wrap:anywhere;font-size:.88rem;line-height:1.05;-webkit-box-orient:vertical;-webkit-line-clamp:3}.christianity-offering-card span{position:absolute;right:.42rem;bottom:.42rem;display:grid;place-items:center;min-width:1.55rem;height:1.55rem;padding:0 .28rem;border-radius:999px;background:#edf2f7;font-size:.82rem;font-weight:900}.christianity-offering-card em{align-self:end;max-width:calc(100% - 1.9rem);overflow:hidden;color:#1f29339e;font-size:.64rem;font-style:normal;font-weight:800;line-height:1.05;text-overflow:ellipsis;white-space:nowrap}.christianity-offering-card p,.christianity-offering-row p{margin:0}.christianity-offering-card p{align-self:end;color:#1f2933a3;font-size:.72rem;line-height:1.2}.christianity-offering-row>div{display:grid;gap:.35rem;align-content:center;min-width:0}.christianity-offering-row>div p{color:#1f2933b8;font-size:.85rem;line-height:1.3}.christianity-offering-row>div button{justify-self:start;min-height:2.2rem;padding:0 .7rem;border:1px solid rgba(16,42,67,.16);border-radius:.5rem;background:#102a43;color:#fff;font:inherit;font-weight:800}.christianity-offering-row>div button:disabled{background:#e2e8f0;color:#1f293394}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-match-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:.35rem;padding:.35rem}.christianity-match-player{gap:.35rem}.christianity-match-player small{display:none}.christianity-scoreboard{min-width:3.65rem;padding:0 .35rem}.christianity-scoreboard strong{font-size:1.05rem}.christianity-table{gap:.35rem;padding-right:.25rem;padding-left:.25rem}.christianity-player-side{padding:.3rem .25rem}.christianity-battle-zone{--christianity-battle-card-width: min(5.2rem, calc((100vw - 4.25rem)/4) );grid-template-columns:repeat(4,var(--christianity-battle-card-width));justify-content:center;min-height:8.75rem;overflow-x:clip}.christianity-hand-fan{min-height:11.45rem;padding-bottom:2rem;overflow:visible}.christianity-hand-shelf{min-height:12.65rem;margin-top:-1rem;padding-top:1.35rem;padding-bottom:.9rem}.christianity-hand-shelf--opponent{min-height:6.65rem;margin-top:0;margin-bottom:0;padding-top:.4rem;padding-bottom:.85rem}.christianity-player-rack{grid-template-columns:minmax(4.5rem,5.7rem) minmax(4.4rem,1fr) minmax(3.5rem,4.8rem)}.christianity-shared-zone{gap:.45rem;grid-template-columns:repeat(3,minmax(0,1fr))}.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem;gap:.24rem}.christianity-zone-pile i{top:2rem;right:.52rem;width:2.35rem;height:3.25rem}.christianity-offering-pile{min-height:6.85rem;padding:.88rem .46rem .55rem;gap:.24rem}.christianity-offering-pile i{top:2.25rem;left:.56rem;width:2.35rem;height:3.25rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);height:auto;min-height:0}.christianity-leader-card{width:clamp(4.55rem,20vw,5.7rem);min-height:0}.christianity-offering-row{grid-template-columns:minmax(5rem,5.8rem) minmax(0,1fr);gap:.5rem}.christianity-offering-card{min-height:7.25rem;padding:.5rem}.christianity-hand-fan--opponent{min-height:5.75rem;padding-bottom:.7rem}.christianity-hand-fan--opponent .christianity-card-frame--back{width:clamp(3.35rem,15vw,4.25rem);margin-inline:-.72rem}}\n"], dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: LightRippleDirective, selector: "[valLightRipple]" }] }); }
1239
- }
1240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
1241
- type: Component,
1242
- args: [{ selector: 'val-christianity-game', standalone: true, imports: [CdkDrag, CdkDropList, LightRippleDirective], template: `
1243
- <main class="christianity-shell">
1244
- <section class="christianity-header">
1245
- <div>
1246
- <p>{{ t('christianityEyebrow') }}</p>
1247
- <h1>{{ t('christianityTitle') }}</h1>
1248
- </div>
1249
- <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
1250
- <span>{{ t('christianityTurn') }}</span>
1251
- <strong>{{ currentPlayer().displayName }}</strong>
1252
- </div>
1253
- </section>
1254
-
1255
- <section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
1256
- <article class="christianity-match-player">
1257
- <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
1258
- <div>
1259
- <strong>{{ player().displayName }}</strong>
1260
- <small>{{ player().leaderName }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
1261
- </div>
1262
- </article>
1263
- <div class="christianity-scoreboard">
1264
- <span>{{ t('christianityMatch') }}</span>
1265
- <strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
1266
- </div>
1267
- <article class="christianity-match-player christianity-match-player--opponent">
1268
- <span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
1269
- <div>
1270
- <strong>{{ opponent().displayName }}</strong>
1271
- <small>{{ opponent().leaderName }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
1272
- </div>
1273
- </article>
1274
- </section>
1275
-
1276
- <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
1277
- <div class="christianity-hand-meter christianity-hand-meter--opponent">
1278
- <span>{{ t('christianityHand') }}</span>
1279
- <strong>{{ opponentHandCount() }}</strong>
1280
- </div>
1281
- <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
1282
- @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
1283
- <button
1284
- type="button"
1285
- class="christianity-card-preview-card christianity-card-frame christianity-card-frame--back"
1286
- valLightRipple
1287
- [style.transform]="fanTransform($index, opponentHandCount(), true)"
1288
- [attr.aria-label]="t('christianityHiddenCard')"
1289
- ></button>
1290
- }
1291
- </section>
1292
- </section>
1293
-
1294
- <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
1295
- <section class="christianity-player-side christianity-player-side--opponent">
1296
- <section class="christianity-player-rack christianity-player-rack--opponent">
1297
- <div class="christianity-offerings-zone">
1298
- <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
1299
- <i aria-hidden="true"></i>
1300
- <i aria-hidden="true"></i>
1301
- <i aria-hidden="true"></i>
1302
- <span>{{ t('christianityOfferings') }}</span>
1303
- <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
1304
- </button>
1305
- </div>
1306
- <button type="button" class="christianity-leader-card christianity-card-frame christianity-card-frame--leader" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
1307
- <header class="christianity-card-frame-header">
1308
- <small>{{ t('christianityLeaderCard') }}</small>
1309
- <strong>{{ opponent().leaderName }}</strong>
1310
- <span>{{ opponent().leaderHp }}</span>
1311
- </header>
1312
- <section class="christianity-card-frame-art">
1313
- <span>{{ opponent().leaderName }}</span>
1314
- <small>{{ t('christianityLeaderCard') }}</small>
1315
- </section>
1316
- <section class="christianity-card-frame-effect">
1317
- <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
1318
- </section>
1319
- </button>
1320
- <span class="christianity-rack-spacer" aria-hidden="true"></span>
1321
- </section>
1322
-
1323
- <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
1324
- @for (slot of battleSlots('P2'); track slot.trackId) {
1325
- @if (slot.card) {
1326
- <button
1327
- type="button"
1328
- class="christianity-card-preview-card christianity-card-preview-card--battle christianity-card-frame christianity-card-frame--battle"
1329
- valLightRipple
1330
- [class.is-target]="selectedAttacker()"
1331
- (click)="handleOpponentCharacter(slot.card)"
1332
- >
1333
- <header class="christianity-card-frame-header">
1334
- <small>{{ t('christianityCost') }} {{ cardDefinition(slot.card.cardId).cost }}</small>
1335
- <strong>{{ slot.card.name }}</strong>
1336
- <span>{{ cardDefinition(slot.card.cardId).cost }}</span>
1337
- </header>
1338
- <section class="christianity-card-frame-art">
1339
- <span>{{ slot.card.name }}</span>
1340
- <small>{{ t('christianityCharacterCard') }}</small>
1341
- </section>
1342
- <section class="christianity-card-frame-effect">
1343
- <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
1344
- </section>
1345
- </button>
1346
- } @else {
1347
- <span class="christianity-slot"></span>
1348
- }
1349
- }
1350
- </section>
1351
- </section>
1352
-
1353
- <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
1354
- <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="openHistory()">
1355
- <i aria-hidden="true"></i>
1356
- <i aria-hidden="true"></i>
1357
- <i aria-hidden="true"></i>
1358
- <span>{{ t('christianityHistory') }}</span>
1359
- <strong>{{ game().historyZone.length }}</strong>
1360
- </button>
1361
- <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
1362
- <i aria-hidden="true"></i>
1363
- <i aria-hidden="true"></i>
1364
- <i aria-hidden="true"></i>
1365
- <span>{{ t('christianityDeck') }}</span>
1366
- <strong>{{ game().sharedDeck.length }}</strong>
1367
- </button>
1368
- <div class="christianity-zone-card">
1369
- <span>{{ t('christianityPlace') }}</span>
1370
- <strong>{{ t('christianityEmpty') }}</strong>
1371
- </div>
1372
- </section>
1373
-
1374
- <section class="christianity-player-side">
1375
- <section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
1376
- @for (slot of battleSlots('P1'); track slot.trackId) {
1377
- @if (slot.card) {
1378
- <button
1379
- type="button"
1380
- class="christianity-card-preview-card christianity-card-preview-card--battle christianity-card-frame christianity-card-frame--battle"
1381
- valLightRipple
1382
- [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
1383
- [class.is-exhausted]="!slot.card.canAttack"
1384
- (click)="selectAttacker(slot.card)"
1385
- >
1386
- <header class="christianity-card-frame-header">
1387
- <small>{{ t('christianityCost') }} {{ cardDefinition(slot.card.cardId).cost }}</small>
1388
- <strong>{{ slot.card.name }}</strong>
1389
- <span>{{ cardDefinition(slot.card.cardId).cost }}</span>
1390
- </header>
1391
- <section class="christianity-card-frame-art">
1392
- <span>{{ slot.card.name }}</span>
1393
- <small>{{ t('christianityCharacterCard') }}</small>
1394
- </section>
1395
- <section class="christianity-card-frame-effect">
1396
- <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
1397
- </section>
1398
- </button>
1399
- } @else {
1400
- <button
1401
- type="button"
1402
- class="christianity-slot"
1403
- cdkDropList
1404
- [id]="battleSlotDropId($index)"
1405
- [cdkDropListData]="$index"
1406
- [cdkDropListConnectedTo]="['christianity-hand-source']"
1407
- [cdkDropListEnterPredicate]="canDropOnBattleSlot"
1408
- [class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
1409
- valLightRipple
1410
- (cdkDropListDropped)="dropOnBattleSlot($event, $index)"
1411
- (click)="playSelectedCard($index)"
1412
- >
1413
- @if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
1414
- <span>{{ t('christianityPlayHere') }}</span>
1415
- }
1416
- </button>
1417
- }
1418
- }
1419
- </section>
1420
-
1421
- <section class="christianity-player-rack">
1422
- <div class="christianity-offerings-zone">
1423
- <button
1424
- type="button"
1425
- class="christianity-offering-pile"
1426
- cdkDropList
1427
- id="christianity-offerings-drop"
1428
- valLightRipple
1429
- [cdkDropListConnectedTo]="['christianity-hand-source']"
1430
- [class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
1431
- [cdkDropListEnterPredicate]="canDropOnOfferings"
1432
- (cdkDropListDropped)="dropOnOfferings($event)"
1433
- (click)="handleOfferingPile('P1')"
1434
- >
1435
- <i aria-hidden="true"></i>
1436
- <i aria-hidden="true"></i>
1437
- <i aria-hidden="true"></i>
1438
- <span>{{ t('christianityOfferings') }}</span>
1439
- <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
1440
- </button>
1441
- </div>
1442
- <button type="button" class="christianity-leader-card christianity-card-frame christianity-card-frame--leader" valLightRipple (click)="inspectLeader('P1')">
1443
- <header class="christianity-card-frame-header">
1444
- <small>{{ t('christianityLeaderCard') }}</small>
1445
- <strong>{{ player().leaderName }}</strong>
1446
- <span>{{ player().leaderHp }}</span>
1447
- </header>
1448
- <section class="christianity-card-frame-art">
1449
- <span>{{ player().leaderName }}</span>
1450
- <small>{{ t('christianityLeaderCard') }}</small>
1451
- </section>
1452
- <section class="christianity-card-frame-effect">
1453
- <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
1454
- </section>
1455
- </button>
1456
- <div class="christianity-player-command">
1457
- <div class="christianity-player-badge">
1458
- <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
1459
- <strong>{{ player().displayName }}</strong>
1460
- </div>
1461
- <button
1462
- type="button"
1463
- class="christianity-end-turn"
1464
- (click)="endTurn()"
1465
- >
1466
- {{ t('christianityEndTurn') }}
1467
- </button>
1468
- </div>
1469
- </section>
1470
- </section>
1471
- </section>
1472
-
1473
- <section class="christianity-hand-shelf">
1474
- <div class="christianity-hand-meter">
1475
- <span>{{ t('christianityHand') }}</span>
1476
- <strong>{{ player().hand?.length ?? 0 }}</strong>
1477
- </div>
1478
- <section
1479
- class="christianity-hand-fan"
1480
- cdkDropList
1481
- id="christianity-hand-source"
1482
- [cdkDropListConnectedTo]="dropTargetIds()"
1483
- [attr.aria-label]="t('christianityYourHand')"
1484
- (pointerleave)="clearHoveredHandIndex()"
1485
- >
1486
- @for (cardId of player().hand ?? []; track cardId + $index) {
1487
- @let card = cardDefinition(cardId);
1488
- <div
1489
- class="christianity-hand-card-wrap"
1490
- [class.is-selected]="selectedHandCard() === cardId"
1491
- [class.is-dragging]="draggingCardId() === cardId"
1492
- [style.z-index]="handCardZIndex($index)"
1493
- [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
1494
- (pointerenter)="setHoveredHandIndex($index)"
1495
- (pointerdown)="setHoveredHandIndex($index)"
1496
- (pointerup)="releaseHoveredHand($event)"
1497
- >
1498
- <button
1499
- type="button"
1500
- class="christianity-card-preview-card christianity-card-preview-card--hand christianity-card-frame"
1501
- cdkDrag
1502
- valLightRipple
1503
- [cdkDragData]="cardId"
1504
- [cdkDragDisabled]="!canPlay(card)"
1505
- [class.is-selected]="selectedHandCard() === cardId"
1506
- [class.is-disabled]="!canPlay(card)"
1507
- (cdkDragStarted)="startDraggingCard(cardId)"
1508
- (cdkDragEnded)="endDraggingCard()"
1509
- (click)="selectHandCard(cardId)"
1510
- >
1511
- <header class="christianity-card-frame-header">
1512
- <small>{{ cardTypeLabel(card) }}</small>
1513
- <strong>{{ card.name }}</strong>
1514
- <span>{{ card.type === 'offering' ? '+' + card.life : card.cost }}</span>
1515
- </header>
1516
- <section class="christianity-card-frame-art">
1517
- <span>{{ card.name }}</span>
1518
- <small>{{ cardTypeLabel(card) }}</small>
1519
- </section>
1520
- <section class="christianity-card-frame-effect">
1521
- <strong>
1522
- @if (card.type === 'offering') {
1523
- +{{ card.life }}
1524
- } @else {
1525
- {{ card.attack }} / {{ card.life }}
1526
- }
1527
- </strong>
1528
- </section>
1529
- <footer class="christianity-card-frame-footer">
1530
- <span>{{ card.edition ?? 'MVP' }}</span>
1531
- <span>{{ card.collectorNumber ?? card.id }}</span>
1532
- </footer>
1533
- </button>
1534
- <button
1535
- type="button"
1536
- class="christianity-card-eye"
1537
- [attr.aria-label]="t('christianityPreviewCard')"
1538
- (click)="inspectHandCard(cardId, true); $event.stopPropagation()"
1539
- ></button>
1540
- </div>
1541
- }
1542
- </section>
1543
- </section>
1544
-
1545
- @if (selectedPreview()) {
1546
- <button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
1547
- <aside
1548
- class="christianity-floating-card-shell"
1549
- aria-live="polite"
1550
- >
1551
- <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
1552
- {{ t('close') }}
1553
- </button>
1554
- <div
1555
- class="christianity-floating-card"
1556
- [style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
1557
- [style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
1558
- [style.--preview-shift-x]="previewTilt().shiftX + 'px'"
1559
- [style.--preview-shift-y]="previewTilt().shiftY + 'px'"
1560
- (pointermove)="tiltPreview($event)"
1561
- (pointerleave)="resetPreviewTilt()"
1562
- >
1563
- @if (selectedPreviewCard(); as previewCard) {
1564
- <header class="christianity-full-card-header">
1565
- <span class="christianity-full-card-type-icon" aria-hidden="true"></span>
1566
- <strong>{{ previewCard.name }}</strong>
1567
- <span class="christianity-full-card-cost">{{ previewCard.type === 'offering' ? '+' + previewCard.life : previewCard.cost }}</span>
1568
- </header>
1569
- <section class="christianity-full-card-art" [class.has-image]="previewCard.imageUrl">
1570
- @if (previewCard.imageUrl) {
1571
- <img [src]="previewCard.imageUrl" [alt]="previewCard.name" />
1572
- } @else {
1573
- <span>{{ previewCard.name }}</span>
1574
- }
1575
- <small>{{ cardTypeLabel(previewCard) }}</small>
1576
- </section>
1577
- <section class="christianity-full-card-verse">
1578
- <p>{{ previewCard.verseText ?? selectedPreview()?.body }}</p>
1579
- @if (previewCard.scripture) {
1580
- <strong>{{ previewCard.scripture }}</strong>
1581
- }
1582
- </section>
1583
- <section class="christianity-full-card-effect">
1584
- <div class="christianity-full-card-stats">
1585
- @if (previewCard.type === 'character') {
1586
- <strong>{{ previewCard.attack }}</strong>
1587
- <strong>{{ previewCard.life }}</strong>
1588
- } @else {
1589
- <strong>+{{ previewCard.life }}</strong>
1590
- }
1591
- </div>
1592
- <div>
1593
- @if (previewCard.abilityName) {
1594
- <strong>{{ previewCard.abilityName }}</strong>
1595
- }
1596
- <p>{{ previewCard.abilityText ?? selectedPreview()?.body }}</p>
1597
- </div>
1598
- <span
1599
- class="christianity-full-card-rarity"
1600
- [class.is-normal]="!previewCard.rarity || previewCard.rarity === 'normal'"
1601
- [class.is-uncommon]="previewCard.rarity === 'uncommon'"
1602
- [class.is-rare]="previewCard.rarity === 'rare'"
1603
- [class.is-legendary]="previewCard.rarity === 'legendary'"
1604
- aria-hidden="true"
1605
- ></span>
1606
- </section>
1607
- <footer class="christianity-full-card-footer">
1608
- <span>{{ previewCard.edition ?? 'MVP' }}</span>
1609
- <span>{{ previewCard.collectorNumber ?? previewCard.id }}</span>
1610
- <span>{{ previewCard.year ?? '2026' }} CHRISTIANITY</span>
1611
- <span>{{ previewCard.author ?? 'MVP' }}</span>
1612
- </footer>
1613
- } @else {
1614
- <header class="christianity-full-card-header">
1615
- <span class="christianity-full-card-type-icon" aria-hidden="true"></span>
1616
- <strong>{{ selectedPreview()?.title }}</strong>
1617
- <span class="christianity-full-card-cost">{{ selectedPreview()?.meta }}</span>
1618
- </header>
1619
- <section class="christianity-full-card-art">
1620
- <span>{{ selectedPreview()?.title }}</span>
1621
- <small>{{ selectedPreview()?.eyebrow }}</small>
1622
- </section>
1623
- <section class="christianity-full-card-verse">
1624
- <p>{{ selectedPreview()?.body }}</p>
1625
- </section>
1626
- <section class="christianity-full-card-effect">
1627
- <div class="christianity-full-card-stats">
1628
- <strong>{{ selectedPreview()?.meta }}</strong>
1629
- </div>
1630
- <div>
1631
- <strong>{{ selectedPreview()?.eyebrow }}</strong>
1632
- <p>{{ selectedPreview()?.body }}</p>
1633
- </div>
1634
- <span class="christianity-full-card-rarity is-legendary" aria-hidden="true"></span>
1635
- </section>
1636
- <footer class="christianity-full-card-footer">
1637
- <span>MVP</span>
1638
- <span>{{ selectedPreview()?.eyebrow }}</span>
1639
- <span>2026 CHRISTIANITY</span>
1640
- <span>{{ selectedPreview()?.meta }}</span>
1641
- </footer>
1642
- }
1643
- </div>
1644
- @if (selectedPreview()?.source === 'hand') {
1645
- <div class="christianity-floating-card-actions">
1646
- <button type="button" [disabled]="previewActionDisabled()" (click)="playPreviewCard()">
1647
- {{ selectedActionLabel() }}
1648
- </button>
1649
- </div>
1650
- }
1651
- </aside>
1652
- }
1653
-
1654
- @if (selectedInfo(); as info) {
1655
- <button type="button" class="christianity-info-backdrop" [attr.aria-label]="t('close')" (click)="closeInfo()"></button>
1656
- <aside class="christianity-info-panel" aria-live="polite">
1657
- <button type="button" class="christianity-dialog-close christianity-info-close" (click)="closeInfo()">
1658
- {{ t('close') }}
1659
- </button>
1660
- <div class="christianity-rule-note">
1661
- <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1662
- <div>
1663
- <small>{{ info.eyebrow }}</small>
1664
- <h2>{{ info.title }}</h2>
1665
- <strong>{{ info.meta }}</strong>
1666
- <p>{{ info.body }}</p>
1667
- <ul>
1668
- @for (fact of info.facts; track fact) {
1669
- <li>{{ fact }}</li>
1670
- }
1671
- </ul>
1672
- </div>
1673
- </div>
1674
- </aside>
1675
- }
1676
-
1677
- <section class="christianity-actions" aria-live="polite">
1678
- <p>{{ statusText() }}</p>
1679
- <div>
1680
- <button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
1681
- {{ selectedActionLabel() }}
1682
- </button>
1683
- <button type="button" (click)="resetMock()">
1684
- {{ t('christianityReset') }}
1685
- </button>
1686
- </div>
1687
- </section>
1688
-
1689
- @if (showHistory()) {
1690
- <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
1691
- <section class="christianity-history-drawer">
1692
- <header>
1693
- <h2>{{ t('christianityHistory') }}</h2>
1694
- <div class="christianity-dialog-actions">
1695
- <span>{{ game().historyZone.length }}</span>
1696
- <button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
1697
- {{ t('close') }}
1698
- </button>
1699
- </div>
1700
- </header>
1701
- @if (game().historyZone.length) {
1702
- <div class="christianity-history-grid">
1703
- @for (cardId of game().historyZone; track cardId + $index) {
1704
- @let card = cardDefinition(cardId);
1705
- <button type="button" class="christianity-card-preview-card christianity-card-frame christianity-card-frame--list" valLightRipple (click)="inspectHistoryCard(cardId)">
1706
- <header class="christianity-card-frame-header">
1707
- <small>{{ card.type === 'offering' ? t('christianityOfferingCard') : t('christianityCost') + ' ' + card.cost }}</small>
1708
- <strong>{{ card.name }}</strong>
1709
- <span>{{ card.type === 'offering' ? '+' + card.life : card.cost }}</span>
1710
- </header>
1711
- <section class="christianity-card-frame-art">
1712
- <span>{{ card.name }}</span>
1713
- <small>{{ cardTypeLabel(card) }}</small>
1714
- </section>
1715
- <section class="christianity-card-frame-effect">
1716
- <strong>
1717
- @if (card.type === 'offering') {
1718
- +{{ card.life }}
1719
- } @else {
1720
- {{ card.attack }} / {{ card.life }}
1721
- }
1722
- </strong>
1723
- </section>
1724
- </button>
1725
- }
1726
- </div>
1727
- } @else {
1728
- <p>{{ t('christianityHistoryEmpty') }}</p>
1729
- }
1730
- </section>
1731
- }
1732
-
1733
- @if (offeringsSeat()) {
1734
- @let offeringPlayer = game().players[offeringsSeat()!];
1735
- <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
1736
- <section class="christianity-history-drawer christianity-offerings-drawer">
1737
- <header>
1738
- <h2>{{ t('christianityOfferings') }}</h2>
1739
- <div class="christianity-dialog-actions">
1740
- <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
1741
- <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
1742
- {{ t('close') }}
1743
- </button>
1744
- </div>
1745
- </header>
1746
- <div class="christianity-offerings-note">
1747
- <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1748
- <p>{{ t('christianityOfferingsRuleBody') }}</p>
1749
- </div>
1750
- <div class="christianity-offering-list">
1751
- @for (offering of offeringPlayer.offerings; track offering.instanceId) {
1752
- <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
1753
- <button type="button" class="christianity-offering-card" valLightRipple (click)="inspectOffering(offering)">
1754
- <small>{{ t('christianityOfferingCard') }}</small>
1755
- <strong>{{ offering.name }}</strong>
1756
- <span>+{{ offering.value }}</span>
1757
- <em>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</em>
1758
- </button>
1759
- <div>
1760
- <strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
1761
- <p>{{ offering.abilityText || t('christianityOfferingNoAbility') }}</p>
1762
- @if (offering.abilityName) {
1763
- <button
1764
- type="button"
1765
- [disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
1766
- (click)="useOfferingAbility(offering, offeringsSeat()!)"
1767
- >
1768
- {{ t('christianityUseAbility') }}
1769
- </button>
1770
- }
1771
- </div>
1772
- </article>
1773
- }
1774
- </div>
1775
- </section>
1776
- }
1777
- </main>
1778
- `, styles: [":host{--christianity-theme-ink: var(--val-text-color, #1f2933);--christianity-theme-surface: #ffffff;--christianity-theme-parchment: #fffaf0;--christianity-theme-olive: #5f6f2a;--christianity-theme-gold: #d6a21d;--christianity-theme-gold-soft: rgba(214, 162, 29, .18);--christianity-theme-gold-ring: rgba(214, 162, 29, .48);--christianity-theme-glow: rgba(245, 199, 85, .32);--christianity-theme-focus: #2563eb;--christianity-theme-shadow: rgba(82, 64, 28, .18);--christianity-theme-shadow-strong: rgba(82, 64, 28, .3);--christianity-card-aspect: 5 / 7.45;--christianity-card-back: linear-gradient(135deg, rgba(16, 42, 67, .16), rgba(16, 42, 67, .03)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(16, 42, 67, .11), rgba(16, 42, 67, .02)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);display:block;max-width:100%;min-width:0;overflow-x:clip;color:var(--christianity-theme-ink)}.christianity-shell{box-sizing:border-box;display:grid;gap:.65rem;width:100%;max-width:100%;min-width:0;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb;overflow-x:clip;overflow-y:visible}.christianity-header,.christianity-match-strip,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-match-player strong,.christianity-match-player small,.christianity-scoreboard span,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-match-strip{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);padding:.45rem;border:1px solid rgba(36,48,68,.1);border-radius:.75rem;background:#fff}.christianity-match-player{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.5rem;align-items:center;min-width:0}.christianity-match-player--opponent{direction:rtl}.christianity-match-player--opponent div{direction:ltr;text-align:right}.christianity-match-player div{display:grid;min-width:0}.christianity-match-player strong,.christianity-match-player small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-match-player small,.christianity-scoreboard span{color:#1f293394;font-size:.72rem}.christianity-scoreboard{display:grid;justify-items:center;min-width:4.2rem;padding:0 .55rem;border-right:1px solid rgba(36,48,68,.1);border-left:1px solid rgba(36,48,68,.1)}.christianity-scoreboard strong{font-size:1.2rem;line-height:1}.christianity-table{box-sizing:border-box;display:grid;gap:.45rem;width:100%;max-width:100%;min-width:0;padding:.45rem .35rem;border-radius:.75rem;background:#dceafb;overflow-x:clip;overflow-y:visible}.christianity-player-side{box-sizing:border-box;display:grid;gap:.35rem;width:100%;max-width:100%;min-width:0;padding:.35rem .3rem;border-radius:.7rem;background:#ffffff57;grid-template-rows:minmax(7rem,1fr) auto;min-height:13.75rem}.christianity-player-side--opponent{grid-template-rows:auto minmax(7rem,1fr)}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{--christianity-battle-card-width: clamp(4.8rem, 15vw, 6.6rem);box-sizing:border-box;display:grid;grid-template-columns:repeat(4,var(--christianity-battle-card-width));gap:.5rem;align-items:center;justify-content:center;width:100%;max-width:100%;min-width:0;min-height:clamp(9.1rem,29vw,11rem);padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2;transition:background .16s ease,box-shadow .16s ease}.christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#fffaf0f5,#ffffffd6),#ffffffc2;box-shadow:inset 0 0 0 .14rem var(--christianity-theme-gold-soft),0 .8rem 1.7rem #5f6f2a1f}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .18rem var(--christianity-theme-gold-soft),0 .85rem 1.4rem var(--christianity-theme-shadow)}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{display:grid;place-items:center;justify-self:center;width:var(--christianity-battle-card-width);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73;color:inherit;font:inherit}.christianity-slot--play-target{position:relative;border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0eb,#f8fafcd1),#ffffffb3;color:#5d4305;font-weight:800;overflow:hidden;box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-slot--play-target:before{content:\"\";position:absolute;inset:.35rem;border:1px solid rgba(214,162,29,.22);border-radius:.4rem;background:linear-gradient(135deg,rgba(214,162,29,.1),transparent 46%),radial-gradient(circle at 50% 42%,var(--christianity-theme-glow),transparent 58%)}.christianity-slot--play-target span{position:relative;z-index:2;padding:.16rem .44rem;border-radius:999px;background:#ffffffc7;font-size:.78rem}@keyframes christianity-target-pulse{0%,to{box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow)}50%{box-shadow:inset 0 0 0 .16rem #d6a21d57,0 .9rem 1.65rem var(--christianity-theme-shadow-strong)}}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:10.8rem;padding:.25rem .25rem 2.1rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:12;min-height:12rem;margin-top:-1.15rem;padding:1.45rem .25rem 1rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:8;min-height:6.85rem;margin-top:0;margin-bottom:0;padding:.45rem .25rem .85rem}.christianity-hand-fan--opponent{min-height:5.9rem;padding-bottom:.75rem;align-items:start}.christianity-hand-fan--opponent .christianity-card-frame--back{width:clamp(3.7rem,12vw,4.9rem);margin-inline:-.9rem;transform-origin:50% 120%}.christianity-hand-fan--opponent .christianity-card-frame--back:first-child{margin-left:0}.christianity-hand-fan--opponent .christianity-card-frame--back:last-child{margin-right:0}.christianity-card-preview-card,.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-card-frame{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;overflow:hidden;padding:.48rem;text-align:left;background:linear-gradient(180deg,#fffffffa,#f8fafcfa),radial-gradient(circle at 15% 0%,rgba(214,162,29,.12),transparent 44%);box-shadow:0 .5rem 1.25rem #2430441a,inset 0 0 0 .18rem #ffffff9e}.christianity-card-frame-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.16rem;align-items:start;min-width:0}.christianity-card-frame-header small{grid-column:1;min-width:0;overflow:hidden;color:#1f2933a3;font-size:clamp(.52rem,1.5vw,.68rem);line-height:1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-header strong{grid-column:1;justify-self:start;align-self:start;min-width:0;padding:0;overflow:hidden;border-radius:0;background:transparent;font-size:clamp(.82rem,2.5vw,1.05rem);line-height:1.02;text-overflow:ellipsis;white-space:nowrap}.christianity-card-preview-card--hand .christianity-card-frame-header strong,.christianity-card-preview-card--battle .christianity-card-frame-header strong,.christianity-leader-card .christianity-card-frame-header strong{display:-webkit-box;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-preview-card--hand .christianity-card-frame-header small{text-transform:uppercase}.christianity-card-preview-card--hand .christianity-card-frame-art>span{display:-webkit-box;max-width:88%;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-frame-header span{grid-column:2;grid-row:1 / span 2;display:grid;place-items:center;min-width:1.3rem;height:1.3rem;padding:0 .22rem;border-radius:999px;background:#ffd91a;color:#243044;font-size:.8rem;font-weight:900;line-height:1;box-shadow:inset 0 -.08rem #52401c2e}.christianity-card-frame-art{position:relative;display:grid;place-items:center;min-height:0;overflow:hidden;border-radius:.36rem;background:linear-gradient(135deg,#5f6f2a2e,#d6a21d24),radial-gradient(circle at 50% 18%,rgba(255,255,255,.72),transparent 48%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-card-frame-art>span{max-width:78%;overflow:hidden;color:#2430447a;font-size:clamp(.82rem,2.2vw,1.05rem);font-weight:900;line-height:1.02;text-align:center;text-overflow:ellipsis}.christianity-card-frame-art small{position:absolute;right:0;bottom:.28rem;max-width:78%;padding:.1rem .34rem;overflow:hidden;border-radius:999px 0 0 999px;background:#ffffffe6;color:#1f2933a8;font-size:.48rem;font-style:italic;font-weight:900;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-card-frame-effect{display:grid;align-content:center;gap:.1rem;min-height:1.45rem;padding:.24rem;overflow:hidden;border-radius:.34rem;background:radial-gradient(circle at 50% 70%,rgba(36,48,68,.06),transparent 44%),#ffffffdb}.christianity-card-frame-effect strong{justify-self:end;align-self:end;padding:.12rem .32rem;border-radius:999px;background:#edf2f7;font-size:clamp(.66rem,2vw,.82rem);line-height:1.05}.christianity-card-frame-effect p{margin:0;overflow:hidden;color:#1f2933b8;font-size:.58rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-footer{display:flex;justify-content:space-between;gap:.22rem;color:#1f293385;font-size:.46rem;font-weight:800;line-height:1}.christianity-card-frame--battle{gap:.22rem;padding:.42rem}.christianity-card-frame--battle .christianity-card-frame-art{min-height:2.6rem}.christianity-card-frame--leader .christianity-card-frame-art{background:linear-gradient(135deg,#2563eb24,#d6a21d29),radial-gradient(circle at 50% 18%,rgba(255,255,255,.78),transparent 48%),#e7eef8}.christianity-card-frame--list{width:clamp(4.4rem,22vw,5.8rem);padding:.38rem}.christianity-card-frame--list .christianity-card-frame-art{min-height:2.5rem}.christianity-hand-card-wrap{position:relative;display:grid;justify-items:center;flex:0 0 auto;margin-inline:-.42rem;padding-bottom:2rem;transform-origin:50% 115%;transition:transform .16s ease,filter .16s ease}.christianity-hand-card-wrap:hover,.christianity-hand-card-wrap.is-selected,.christianity-hand-card-wrap.is-dragging{z-index:3}.christianity-hand-card-wrap:hover .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-selected .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-dragging .christianity-card-preview-card--hand{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .12rem var(--christianity-theme-gold-soft),0 1rem 2rem var(--christianity-theme-shadow)}.christianity-card-preview-card--hand{touch-action:none}.christianity-card-preview-card--hand.cdk-drag-disabled{cursor:not-allowed}.christianity-card-preview-card.cdk-drag-preview{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px solid var(--christianity-theme-gold-ring);box-shadow:0 0 0 .16rem #fff4c2ad,0 1.5rem 3rem var(--christianity-theme-shadow-strong);transform:rotate(2deg) scale(1.03)}.christianity-card-preview-card.cdk-drag-placeholder{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);opacity:.22}.christianity-slot.cdk-drop-list-dragging,.christianity-offering-pile.cdk-drop-list-dragging{border-color:var(--christianity-theme-gold-ring)}.christianity-slot.cdk-drop-list-receiving,.christianity-offering-pile.cdk-drop-list-receiving{box-shadow:inset 0 0 0 .18rem #d6a21d57,0 1rem 1.9rem var(--christianity-theme-shadow-strong)}.christianity-card-eye{position:absolute;right:50%;bottom:.38rem;width:2.15rem;height:1.55rem;border:1px solid color-mix(in srgb,var(--christianity-theme-focus) 52%,transparent);border-radius:999px;background:#fffffff0;box-shadow:0 .55rem 1.1rem #102a4324;opacity:0;transform:translate(50%,-.2rem) scale(.92);transition:opacity .14s ease,transform .14s ease,border-color .14s ease}.christianity-card-eye:before{content:\"\";position:absolute;top:50%;left:50%;width:1.1rem;height:1.1rem;border:.12rem solid var(--christianity-theme-focus);border-radius:82% 0;background:#fffffff0;transform:translate(-50%,-50%) rotate(45deg)}.christianity-card-eye:after{content:\"\";position:absolute;top:50%;left:50%;width:.42rem;height:.42rem;border:.09rem solid rgba(255,255,255,.95);border-radius:999px;background:radial-gradient(circle at 35% 32%,#ffffff 0 .06rem,transparent .07rem),var(--christianity-theme-focus);transform:translate(-50%,-50%)}.christianity-hand-card-wrap:hover .christianity-card-eye,.christianity-hand-card-wrap.is-selected .christianity-card-eye,.christianity-card-eye:focus-visible{opacity:1;transform:translate(50%) scale(1)}.christianity-offering-pile.is-play-target{border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0f5,#fffffff0),radial-gradient(circle at 82% 14%,rgba(250,204,21,.28) 0 .7rem,transparent .72rem);box-shadow:inset 0 0 0 .12rem #d6a21d3d,0 .8rem 1.55rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-card-frame--back,.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:0;aspect-ratio:var(--christianity-card-aspect);place-items:center;padding:.55rem;overflow:hidden;box-shadow:0 .8rem 1.55rem #24304424;transform-origin:50% -18%;background:var(--christianity-card-back)}.christianity-card-frame--back:before,.christianity-card-preview-card--back:before{content:\"\";position:absolute;inset:.5rem;border:1px solid rgba(16,42,67,.12);border-radius:.38rem;background:linear-gradient(180deg,#ffffff2e,#ffffff0a);box-shadow:inset 0 0 0 .12rem #ffffff1f}.christianity-card-preview-card--battle{justify-self:center;width:var(--christianity-battle-card-width);min-width:0;height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);margin-inline:0}.christianity-card-preview-card>span,.christianity-card-mini>span,.christianity-offering-pile>span,.christianity-offering-card>span,.christianity-leader-card>span,.christianity-zone-card>span,.christianity-zone-pile>span{position:relative;z-index:2;align-self:start;font-weight:700;line-height:1.05}.christianity-card-preview-card>strong,.christianity-card-mini>strong,.christianity-offering-pile>strong,.christianity-offering-card>strong,.christianity-leader-card>strong,.christianity-zone-card>strong,.christianity-zone-pile>strong{position:relative;z-index:3;justify-self:end;align-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{box-sizing:border-box;display:grid;grid-template-columns:minmax(5.9rem,7rem) minmax(5rem,1fr) minmax(4.2rem,7rem);gap:.45rem;align-items:end;justify-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-player-rack--opponent{align-items:start}.christianity-hand-meter{position:absolute;top:0;right:.35rem;z-index:4;display:inline-grid;grid-auto-flow:column;gap:.25rem;align-items:center;min-height:1.7rem;padding:.18rem .46rem;border:1px solid rgba(36,48,68,.12);border-radius:999px;background:#ffffffe6;box-shadow:0 .35rem .8rem #102a4314}.christianity-hand-meter--opponent{top:.15rem}.christianity-hand-meter span{color:#1f293394;font-size:.68rem}.christianity-hand-meter strong{font-size:.86rem}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-start;justify-self:start;width:100%}.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-frame{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;align-content:stretch}.christianity-offering-pile,.christianity-zone-card,.christianity-zone-pile{grid-template-rows:auto minmax(2.6rem,1fr) auto;align-content:stretch;gap:.32rem}.christianity-card-mini{width:3.5rem}.christianity-offering-pile{position:relative;isolation:isolate;overflow:hidden;justify-self:start;width:min(100%,5.9rem);min-height:7.1rem;padding:.95rem .52rem .6rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-pile i{position:absolute;top:2.45rem;left:.72rem;z-index:-1;width:2.55rem;height:3.55rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:linear-gradient(180deg,#ffffffeb,#f1f5f9eb),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem);box-shadow:0 .35rem .85rem #102a431a;transform:rotate(-5deg)}.christianity-offering-pile i:nth-child(2){transform:translate(.28rem,.08rem) rotate(3deg)}.christianity-offering-pile i:nth-child(3){transform:translate(.55rem,.18rem) rotate(-1deg)}.christianity-leader-card{align-self:center;justify-self:center;width:clamp(4.75rem,17vw,6rem);min-height:0;aspect-ratio:var(--christianity-card-aspect)}.christianity-rack-spacer{display:block;min-height:1px}.christianity-battle-zone{grid-template-columns:repeat(4,var(--christianity-battle-card-width))}.christianity-shared-zone{box-sizing:border-box;display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-zone-card,.christianity-zone-pile{min-height:6.45rem;padding:.7rem .52rem .55rem}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;top:2.2rem;right:.72rem;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:var(--christianity-card-back);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card-shell{position:fixed;top:50%;left:50%;z-index:80;display:grid;gap:.55rem;width:min(26rem,calc(100vw - 1.25rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-floating-card{position:relative;z-index:1;display:grid;grid-template-rows:auto minmax(9rem,1.25fr) auto minmax(7rem,.9fr) auto;gap:.58rem;width:100%;min-height:min(29rem,calc(100vh - 3.5rem));padding:.72rem;border:1px solid rgba(36,48,68,.18);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 20% 0%,var(--christianity-theme-gold-soft),transparent 45%);box-shadow:0 0 0 .18rem #fff4c294,0 0 2.2rem var(--christianity-theme-glow),0 2.4rem 5rem #102a4357,inset 0 0 0 .35rem #ffffff8c;touch-action:none;transform:translate(var(--preview-shift-x, 0px),var(--preview-shift-y, 0px)) perspective(48rem) rotateX(var(--preview-rotate-x, 5deg)) rotateY(var(--preview-rotate-y, -5deg));transition:transform 90ms ease-out}.christianity-full-card-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.42rem;align-items:center}.christianity-full-card-header strong{min-width:0;display:-webkit-box;overflow:hidden;overflow-wrap:anywhere;text-overflow:clip;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:clamp(1.25rem,5vw,1.85rem);line-height:1.04}.christianity-full-card-type-icon,.christianity-full-card-cost{display:grid;place-items:center;border-radius:999px}.christianity-full-card-type-icon{width:1.6rem;height:1.6rem;background:radial-gradient(circle at 50% 50%,rgba(95,111,42,.72) 0 .22rem,transparent .24rem),#2430441a}.christianity-full-card-cost{min-width:2.1rem;height:2.1rem;padding:0 .36rem;background:#ffd91a;color:#243044;font-size:1.1rem;font-weight:900;box-shadow:inset 0 -.12rem #52401c2e}.christianity-full-card-art{position:relative;display:grid;place-items:center;min-height:9rem;overflow:hidden;border-radius:.48rem;background:linear-gradient(135deg,#5f6f2a33,#d6a21d29),radial-gradient(circle at 50% 25%,rgba(255,255,255,.76),transparent 42%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-full-card-art img{width:100%;height:100%;object-fit:cover}.christianity-full-card-art>span{max-width:80%;color:#24304494;font-size:clamp(1.1rem,5vw,1.8rem);font-weight:900;line-height:1.05;text-align:center}.christianity-full-card-art small{position:absolute;right:0;bottom:.55rem;min-width:5rem;padding:.16rem .48rem;border-radius:999px 0 0 999px;background:#ffffffe6;box-shadow:0 .3rem .8rem #102a431f;color:#1f2933bd;font-size:.68rem;font-style:italic;font-weight:900;text-align:center;text-transform:uppercase}.christianity-full-card-verse,.christianity-full-card-effect{display:grid;gap:.32rem}.christianity-full-card-verse p,.christianity-full-card-effect p{margin:0;line-height:1.25}.christianity-full-card-verse{color:#171923;font-family:Georgia,Times New Roman,serif;font-size:clamp(.72rem,2.7vw,.86rem)}.christianity-full-card-verse strong{font-family:inherit;font-size:.78rem;font-weight:900}.christianity-full-card-effect{position:relative;align-content:start;min-height:7rem;padding:.6rem .7rem;overflow:hidden;border-radius:.45rem;background:radial-gradient(circle at 50% 72%,rgba(36,48,68,.07),transparent 34%),#ffffffdb}.christianity-full-card-stats{display:flex;gap:1rem;min-height:1.35rem}.christianity-full-card-stats strong{font-size:1rem;line-height:1}.christianity-full-card-effect>div:last-of-type{display:grid;gap:.12rem}.christianity-full-card-effect>div:last-of-type strong{font-size:.82rem}.christianity-full-card-effect p{font-size:clamp(.78rem,2.9vw,.92rem)}.christianity-full-card-rarity{position:absolute;top:.62rem;right:.62rem;width:.46rem;height:.46rem;border-radius:.12rem;transform:rotate(45deg)}.christianity-full-card-rarity.is-normal{background:#d1d5db}.christianity-full-card-rarity.is-uncommon{background:#22c55e}.christianity-full-card-rarity.is-rare{background:#3b82f6}.christianity-full-card-rarity.is-legendary{background:#eab308}.christianity-full-card-footer{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:.34rem;align-items:center;color:#1f2933ad;font-size:.58rem;line-height:1;text-transform:uppercase}.christianity-full-card-footer span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-floating-card-close{position:absolute;top:0;right:.15rem;z-index:4;min-height:2rem;padding:0 .6rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#ffffffe6;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .45rem 1rem #102a431a}.christianity-preview-backdrop,.christianity-history-backdrop,.christianity-info-backdrop{position:fixed;inset:0;border:0;border-radius:0;background:#0f172a75}.christianity-preview-backdrop{z-index:79}.christianity-info-backdrop{z-index:50}.christianity-info-panel{position:fixed;top:50%;left:50%;z-index:51;width:min(31rem,calc(100vw - 1.25rem));max-height:min(34rem,calc(100vh - 2rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-info-close{position:absolute;top:0;right:.15rem;z-index:2}.christianity-rule-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.85rem;max-height:inherit;padding:1rem;overflow-y:auto;border:1px solid rgba(36,48,68,.14);border-radius:.9rem;background:linear-gradient(180deg,#fffffff7,#f8fafcf7),radial-gradient(circle at 8% 0%,rgba(37,99,235,.1),transparent 38%);box-shadow:0 1.2rem 2.6rem #102a433d,inset 0 0 0 .25rem #ffffff85}.christianity-rule-note-icon{display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:999px;background:color-mix(in srgb,var(--christianity-theme-focus) 12%,#ffffff);color:var(--christianity-theme-focus);font-size:1rem;font-weight:900;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent)}.christianity-rule-note small,.christianity-rule-note strong,.christianity-rule-note p,.christianity-rule-note h2{margin:0}.christianity-rule-note small{color:#1f29339e;font-size:.78rem;font-weight:800;text-transform:uppercase}.christianity-rule-note h2{margin-top:.18rem;font-size:clamp(1.5rem,7vw,2.2rem);line-height:1.05}.christianity-rule-note strong{display:inline-flex;width:fit-content;margin-top:.55rem;padding:.22rem .55rem;border-radius:999px;background:#edf2f7;font-size:.92rem}.christianity-rule-note p{margin-top:.75rem;color:#1f2933c7;line-height:1.45}.christianity-rule-note ul{display:grid;gap:.45rem;margin:.8rem 0 0;padding-left:1.05rem;color:#1f2933c7;line-height:1.35}.christianity-floating-card>small,.christianity-floating-card>span{color:#1f2933a3}.christianity-floating-card>strong{font-size:clamp(1.55rem,8vw,2.35rem);line-height:1.05}.christianity-floating-card>p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-floating-card-actions{position:relative;z-index:4;display:flex;justify-content:center;padding:0 .35rem;transform:translateZ(0)}.christianity-floating-card-actions button{min-height:2.35rem;padding:0 1rem;border:0;border-radius:999px;background:#102a43;color:#fff;font:inherit;font-size:.9rem;font-weight:800;box-shadow:0 .65rem 1.3rem #102a432e}.christianity-floating-card-actions button:disabled{cursor:not-allowed;opacity:.45}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(29rem,calc(100vw - 3rem))}.christianity-floating-card{min-height:min(35rem,calc(100vh - 4rem));padding:1.35rem}}.christianity-history-backdrop{z-index:40}.christianity-history-drawer{position:fixed;right:auto;bottom:max(.5rem,env(safe-area-inset-bottom));left:50%;z-index:41;display:grid;grid-template-rows:auto minmax(0,1fr);gap:.75rem;width:min(calc(100vw - 1rem),44rem);min-height:min(18rem,calc(100dvh - 1rem));max-height:min(32rem,calc(100dvh - 2rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347;transform:translate(-50%)}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-dialog-actions{display:flex;align-items:center;gap:.45rem}.christianity-dialog-close{min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#fff;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .8rem #102a4314}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .25rem}.christianity-history-grid::-webkit-scrollbar,.christianity-offering-list::-webkit-scrollbar{width:.65rem}.christianity-history-grid::-webkit-scrollbar-track,.christianity-offering-list::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-history-grid::-webkit-scrollbar-thumb,.christianity-offering-list::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offerings-drawer{grid-template-rows:auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),48rem);min-height:min(20rem,calc(100dvh - 1rem));max-height:min(34rem,calc(100dvh - 2rem))}.christianity-offerings-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.72rem .8rem;border:1px solid rgba(36,48,68,.12);border-radius:.7rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(214,162,29,.12),transparent 42%)}.christianity-offerings-note p{margin:0;color:#1f2933c2;font-size:.86rem;line-height:1.35}.christianity-offering-list{display:grid;gap:.6rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem}.christianity-offering-row{display:grid;grid-template-columns:minmax(5.4rem,6.5rem) minmax(0,1fr);gap:.65rem;align-items:center;padding:.45rem;border:1px solid rgba(36,48,68,.12);border-radius:.65rem;background:#fff}.christianity-offering-row.is-exhausted{opacity:.68}.christianity-offering-card{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;align-content:stretch;gap:.26rem;width:100%;min-height:7.7rem;padding:.58rem;overflow:hidden;text-align:left;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 78% 14%,rgba(250,204,21,.78) 0 .42rem,transparent .44rem);box-shadow:0 .45rem 1rem #102a431a}.christianity-offering-card small{min-width:0;overflow:hidden;color:#1f293394;font-size:.62rem;font-weight:800;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-offering-card strong{display:-webkit-box;align-self:start;min-width:0;margin-top:.1rem;overflow:hidden;overflow-wrap:anywhere;font-size:.88rem;line-height:1.05;-webkit-box-orient:vertical;-webkit-line-clamp:3}.christianity-offering-card span{position:absolute;right:.42rem;bottom:.42rem;display:grid;place-items:center;min-width:1.55rem;height:1.55rem;padding:0 .28rem;border-radius:999px;background:#edf2f7;font-size:.82rem;font-weight:900}.christianity-offering-card em{align-self:end;max-width:calc(100% - 1.9rem);overflow:hidden;color:#1f29339e;font-size:.64rem;font-style:normal;font-weight:800;line-height:1.05;text-overflow:ellipsis;white-space:nowrap}.christianity-offering-card p,.christianity-offering-row p{margin:0}.christianity-offering-card p{align-self:end;color:#1f2933a3;font-size:.72rem;line-height:1.2}.christianity-offering-row>div{display:grid;gap:.35rem;align-content:center;min-width:0}.christianity-offering-row>div p{color:#1f2933b8;font-size:.85rem;line-height:1.3}.christianity-offering-row>div button{justify-self:start;min-height:2.2rem;padding:0 .7rem;border:1px solid rgba(16,42,67,.16);border-radius:.5rem;background:#102a43;color:#fff;font:inherit;font-weight:800}.christianity-offering-row>div button:disabled{background:#e2e8f0;color:#1f293394}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-match-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:.35rem;padding:.35rem}.christianity-match-player{gap:.35rem}.christianity-match-player small{display:none}.christianity-scoreboard{min-width:3.65rem;padding:0 .35rem}.christianity-scoreboard strong{font-size:1.05rem}.christianity-table{gap:.35rem;padding-right:.25rem;padding-left:.25rem}.christianity-player-side{padding:.3rem .25rem}.christianity-battle-zone{--christianity-battle-card-width: min(5.2rem, calc((100vw - 4.25rem)/4) );grid-template-columns:repeat(4,var(--christianity-battle-card-width));justify-content:center;min-height:8.75rem;overflow-x:clip}.christianity-hand-fan{min-height:11.45rem;padding-bottom:2rem;overflow:visible}.christianity-hand-shelf{min-height:12.65rem;margin-top:-1rem;padding-top:1.35rem;padding-bottom:.9rem}.christianity-hand-shelf--opponent{min-height:6.65rem;margin-top:0;margin-bottom:0;padding-top:.4rem;padding-bottom:.85rem}.christianity-player-rack{grid-template-columns:minmax(4.5rem,5.7rem) minmax(4.4rem,1fr) minmax(3.5rem,4.8rem)}.christianity-shared-zone{gap:.45rem;grid-template-columns:repeat(3,minmax(0,1fr))}.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem;gap:.24rem}.christianity-zone-pile i{top:2rem;right:.52rem;width:2.35rem;height:3.25rem}.christianity-offering-pile{min-height:6.85rem;padding:.88rem .46rem .55rem;gap:.24rem}.christianity-offering-pile i{top:2.25rem;left:.56rem;width:2.35rem;height:3.25rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);height:auto;min-height:0}.christianity-leader-card{width:clamp(4.55rem,20vw,5.7rem);min-height:0}.christianity-offering-row{grid-template-columns:minmax(5rem,5.8rem) minmax(0,1fr);gap:.5rem}.christianity-offering-card{min-height:7.25rem;padding:.5rem}.christianity-hand-fan--opponent{min-height:5.75rem;padding-bottom:.7rem}.christianity-hand-fan--opponent .christianity-card-frame--back{width:clamp(3.35rem,15vw,4.25rem);margin-inline:-.72rem}}\n"] }]
1779
- }], ctorParameters: () => [] });
1780
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LWdhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1nYW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFrQ3BELE1BQU0sYUFBYSxHQUErQztJQUNoRSxRQUFRLEVBQUU7UUFDUixFQUFFLEVBQUUsVUFBVTtRQUNkLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLEVBQUUsQ0FBQztRQUNULElBQUksRUFBRSxDQUFDO1FBQ1AsU0FBUyxFQUFFLHdFQUF3RTtRQUNuRixTQUFTLEVBQUUsYUFBYTtRQUN4QixPQUFPLEVBQUUsS0FBSztRQUNkLGVBQWUsRUFBRSxTQUFTO1FBQzFCLElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTSxFQUFFLEtBQUs7UUFDYixNQUFNLEVBQUUsUUFBUTtLQUNqQjtJQUNELFdBQVcsRUFBRTtRQUNYLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLEVBQUUsQ0FBQztRQUNULElBQUksRUFB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3aEJULHdrbkNBemhCUyxPQUFPLHdjQUFFLFdBQVcsOGZBQUUsb0JBQW9COzs0RkFrOEV6Qyx5QkFBeUI7a0JBcjhFckMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxZQUMzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3aEJUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcm9wTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuXG5pbXBvcnQgeyBMaWdodFJpcHBsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvbGlnaHQtcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgTUlOSV9HQU1FU19JMThOIH0gZnJvbSAnLi9taW5pLWdhbWVzLmkxOG4nO1xuaW1wb3J0IHtcbiAgQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gIENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlLFxuICBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UsXG4gIENocmlzdGlhbml0eVBsYXllclN0YXRlLFxuICBDaHJpc3RpYW5pdHlTZWF0LFxufSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIENocmlzdGlhbml0eUNhcmRQcmV2aWV3IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZXllYnJvdzogc3RyaW5nO1xuICBtZXRhOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY2FyZElkPzogc3RyaW5nO1xuICBzb3VyY2U/OiAnaGFuZCcgfCAnYm9hcmQnIHwgJ3BpbGUnO1xufVxuXG5pbnRlcmZhY2UgQ2hyaXN0aWFuaXR5SW5mb1BhbmVsIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZXllYnJvdzogc3RyaW5nO1xuICBtZXRhOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgZmFjdHM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgQ2hyaXN0aWFuaXR5UHJldmlld1RpbHQge1xuICByb3RhdGVYOiBudW1iZXI7XG4gIHJvdGF0ZVk6IG51bWJlcjtcbiAgc2hpZnRYOiBudW1iZXI7XG4gIHNoaWZ0WTogbnVtYmVyO1xufVxuXG5jb25zdCBTVEFSVEVSX0NBUkRTOiBSZWNvcmQ8c3RyaW5nLCBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbj4gPSB7XG4gIG9fc2ltcGxlOiB7XG4gICAgaWQ6ICdvX3NpbXBsZScsXG4gICAgbmFtZTogJ09mcmVuZGEgc2ltcGxlJyxcbiAgICB0eXBlOiAnb2ZmZXJpbmcnLFxuICAgIGNvc3Q6IDAsXG4gICAgYXR0YWNrOiAwLFxuICAgIGxpZmU6IDEsXG4gICAgdmVyc2VUZXh0OiAnVW5hIG9mcmVuZGEgc2VuY2lsbGEgcXVlZGEgbGlzdGEgcGFyYSBzb3N0ZW5lciB0dXMgc2lndWllbnRlcyBqdWdhZGFzLicsXG4gICAgc2NyaXB0dXJlOiAnR2VuZXNpcyA0OjQnLFxuICAgIGVkaXRpb246ICdHRU4nLFxuICAgIGNvbGxlY3Rvck51bWJlcjogJzAwMS8wMjAnLFxuICAgIHllYXI6ICcyMDI2JyxcbiAgICBhdXRob3I6ICdNVlAnLFxuICAgIHJhcml0eTogJ25vcm1hbCcsXG4gIH0sXG4gIG9fZm9yYmlkZGVuOiB7XG4gICAgaWQ6ICdvX2ZvcmJpZGRlbicsXG4gICAgbmFtZTogJ0VsIGZydXRvIHByb2hpYmlkbycsXG4gICAgdHlwZTogJ29mZmVyaW5nJyxcbiAgICBjb3N0OiAwLFxuICAgIGF0dGFjazogMCxcbiAgICBsaWZlOiAyLFxuICAgIGFiaWxpdHlOYW1lOiAnQ29ub2NpbWllbnRvIGRlbCBiaWVuIHkgZGVsIG1hbCcsXG4gICAgYWJpbGl0eVRleHQ6ICdBbCB1c2FybGEsIGRpc21pbnV5ZSBlbiAxIGxvcyBwdW50b3MgZGUgdmlkYSBkZSB0dSBMw61kZXIuJyxcbiAgICBhYmlsaXR5Q29zdDogMCxcbiAgICB2ZXJzZVRleHQ6ICdEaW9zIGVsIFNlw7FvciBwdXNvIGFsIGhvbWJyZSBlbiBlbCBqYXJkw61uIGRlIEVkw6luIHBhcmEgcXVlIGxvIGxhYnJhcmEgeSBsbyBjdWlkYXJhLicsXG4gICAgc2NyaXB0dXJlOiAnR2VuZXNpcyAyOjE3IE5CVicsXG4gICAgZWRpdGlvbjogJ0dFTicsXG4gICAgY29sbGVjdG9yTnVtYmVyOiAnMDEyLzE4MCcsXG4gICAgeWVhcjogJzIwMjYnLFxuICAgIGF1dGhvcjogJ01WUCcsXG4gICAgcmFyaXR5OiAndW5jb21tb24nLFxuICB9LFxuICBwX3Njb3V0OiB7XG4gICAgaWQ6ICdwX3Njb3V0JyxcbiAgICBuYW1lOiAnU2NvdXQnLFxuICAgIHR5cGU6ICdjaGFyYWN0ZXInLFxuICAgIGNvc3Q6IDEsXG4gICAgYXR0YWNrOiAxLFxuICAgIGxpZmU6IDEsXG4gICAgdmVyc2VUZXh0OiAnVW4gZXhwbG9yYWRvciBodW1pbGRlIGFicmUgY2FtaW5vIGFudGVzIGRlIHF1ZSBsbGVndWUgbGEgYmF0YWxsYS4nLFxuICAgIHNjcmlwdHVyZTogJ0dlbmVzaXMgMTM6MTcnLFxuICAgIGVkaXRpb246ICdHRU4nLFxuICAgIGNvbGxlY3Rvck51bWJlcjogJzAwMi8wMjAnLFxuICAgIHllYXI6ICcyMDI2JyxcbiAgICBhdXRob3I6ICdNVlAnLFxuICAgIHJhcml0eTogJ25vcm1hbCcsXG4gIH0sXG4gIHBfZ3VhcmQ6IHsgaWQ6ICdwX2d1YXJkJywgbmFtZTogJ0d1YXJkJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDIsIGF0dGFjazogMSwgbGlmZTogMywgZWRpdGlvbjogJ0dFTicsIGNvbGxlY3Rvck51bWJlcjogJzAwMy8wMjAnLCB5ZWFyOiAnMjAyNicsIGF1dGhvcjogJ01WUCcsIHJhcml0eTogJ25vcm1hbCcgfSxcbiAgcF93YXJyaW9yOiB7IGlkOiAncF93YXJyaW9yJywgbmFtZTogJ1dhcnJpb3InLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMiwgYXR0YWNrOiAyLCBsaWZlOiAyLCBlZGl0aW9uOiAnR0VOJywgY29sbGVjdG9yTnVtYmVyOiAnMDA0LzAyMCcsIHllYXI6ICcyMDI2JywgYXV0aG9yOiAnTVZQJywgcmFyaXR5OiAnbm9ybWFsJyB9LFxuICBwX2VsZGVyOiB7IGlkOiAncF9lbGRlcicsIG5hbWU6ICdFbGRlcicsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAzLCBhdHRhY2s6IDIsIGxpZmU6IDQsIGVkaXRpb246ICdHRU4nLCBjb2xsZWN0b3JOdW1iZXI6ICcwMDUvMDIwJywgeWVhcjogJzIwMjYnLCBhdXRob3I6ICdNVlAnLCByYXJpdHk6ICd1bmNvbW1vbicgfSxcbiAgcF9jaGFtcGlvbjogeyBpZDogJ3BfY2hhbXBpb24nLCBuYW1lOiAnQ2hhbXBpb24nLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogNCwgYXR0YWNrOiA0LCBsaWZlOiA0LCBlZGl0aW9uOiAnR0VOJywgY29sbGVjdG9yTnVtYmVyOiAnMDA2LzAyMCcsIHllYXI6ICcyMDI2JywgYXV0aG9yOiAnTVZQJywgcmFyaXR5OiAncmFyZScgfSxcbn07XG5cbmNvbnN0IFNUQVJUSU5HX1NIQVJFRF9ERUNLID0gW1xuICAnb19zaW1wbGUnLFxuICAncF9zY291dCcsXG4gICdvX2ZvcmJpZGRlbicsXG4gICdvX3NpbXBsZScsXG4gICdwX2d1YXJkJyxcbiAgJ3Bfd2FycmlvcicsXG4gICdvX3NpbXBsZScsXG4gICdwX2VsZGVyJyxcbiAgJ3Bfc2NvdXQnLFxuICAnb19zaW1wbGUnLFxuICAncF9jaGFtcGlvbicsXG4gICdwX2d1YXJkJyxcbiAgJ29fc2ltcGxlJyxcbiAgJ3Bfd2FycmlvcicsXG4gICdwX3Njb3V0JyxcbiAgJ29fc2ltcGxlJyxcbiAgJ3BfZWxkZXInLFxuICAncF9ndWFyZCcsXG4gICdvX3NpbXBsZScsXG5dO1xuXG5jb25zdCBTVEFSVElOR19HQU1FOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUgPSB7XG4gIGdhbWVJZDogJ21vY2stY2hyaXN0aWFuaXR5JyxcbiAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnLFxuICBtb2RlOiAnbG9jYWxfcGFzcycsXG4gIHR1cm5Pd25lcjogJ1AxJyxcbiAgcmV2aXNpb246IDAsXG4gIHR1cm5Db3VudDogMSxcbiAgbWF0Y2hTY29yZTogeyBQMTogMSwgUDI6IDAgfSxcbiAgc2hhcmVkRGVjazogU1RBUlRJTkdfU0hBUkVEX0RFQ0ssXG4gIGhpc3Rvcnlab25lOiBbXSxcbiAgcGxheWVyczoge1xuICAgIFAxOiB7XG4gICAgICBzZWF0OiAnUDEnLFxuICAgICAgZGlzcGxheU5hbWU6ICdKdWdhZG9yJyxcbiAgICAgIGF2YXRhcjogJ0onLFxuICAgICAgYXZhdGFyQ29sb3I6ICcjMjU2M2ViJyxcbiAgICAgIGxlYWRlck5hbWU6ICdBZGFtJyxcbiAgICAgIGxlYWRlckhwOiAxNSxcbiAgICAgIGxlYWRlck1heEhwOiAxNSxcbiAgICAgIG9mZmVyaW5nczogW1xuICAgICAgICB7IGluc3RhbmNlSWQ6ICdwMV9vZmZlcmluZ18wMDEnLCBjYXJkSWQ6ICdvX3NpbXBsZScsIG5hbWU6ICdPZnJlbmRhIHNpbXBsZScsIG93bmVyOiAnUDEnLCByZWFkeTogdHJ1ZSwgdmFsdWU6IDEgfSxcbiAgICAgICAge1xuICAgICAgICAgIGluc3RhbmNlSWQ6ICdwMV9vZmZlcmluZ18wMDInLFxuICAgICAgICAgIGNhcmRJZDogJ29fZm9yYmlkZGVuJyxcbiAgICAgICAgICBuYW1lOiAnRWwgZnJ1dG8gcHJvaGliaWRvJyxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBhYmlsaXR5TmFtZTogJ0Nvbm9jaW1pZW50byBkZWwgYmllbiB5IGRlbCBtYWwnLFxuICAgICAgICAgIGFiaWxpdHlUZXh0OiAnQWwgdXNhcmxhLCBkaXNtaW51eWUgZW4gMSBsb3MgcHVudG9zIGRlIHZpZGEgZGUgdHUgTGlkZXIuJyxcbiAgICAgICAgICBhYmlsaXR5Q29zdDogMCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvZmZlcmluZ1BsYXllZFRoaXNUdXJuOiBmYWxzZSxcbiAgICAgIGhhbmQ6IFsnb19zaW1wbGUnLCAncF9zY291dCcsICdwX3dhcnJpb3InLCAncF9ndWFyZCddLFxuICAgICAgYmF0dGxlWm9uZTogW10sXG4gICAgfSxcbiAgICBQMjoge1xuICAgICAgc2VhdDogJ1AyJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnUml2YWwnLFxuICAgICAgYXZhdGFyOiAnUicsXG4gICAgICBhdmF0YXJDb2xvcjogJyNiNDUzMDknLFxuICAgICAgbGVhZGVyTmFtZTogJ05vYWgnLFxuICAgICAgbGVhZGVySHA6IDE1LFxuICAgICAgbGVhZGVyTWF4SHA6IDE1LFxuICAgICAgb2ZmZXJpbmdzOiBbeyBpbnN0YW5jZUlkOiAncDJfb2ZmZXJpbmdfMDAxJywgY2FyZElkOiAnb19zaW1wbGUnLCBuYW1lOiAnT2ZyZW5kYSBzaW1wbGUnLCBvd25lcjogJ1AyJywgcmVhZHk6IHRydWUsIHZhbHVlOiAxIH1dLFxuICAgICAgb2ZmZXJpbmdQbGF5ZWRUaGlzVHVybjogZmFsc2UsXG4gICAgICBoYW5kQ291bnQ6IDQsXG4gICAgICBiYXR0bGVab25lOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiAnb3BwXzAwMScsXG4gICAgICAgICAgY2FyZElkOiAncF9zY291dCcsXG4gICAgICAgICAgbmFtZTogJ1Njb3V0JyxcbiAgICAgICAgICBvd25lcjogJ1AyJyxcbiAgICAgICAgICBjb250cm9sbGVyOiAnUDInLFxuICAgICAgICAgIHNsb3Q6IDAsXG4gICAgICAgICAgYXR0YWNrOiAxLFxuICAgICAgICAgIGN1cnJlbnRIcDogMSxcbiAgICAgICAgICBtYXhIcDogMSxcbiAgICAgICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBsb2c6IFsnUGFydGlkYSBpbmljaWFkYS4nXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jaHJpc3RpYW5pdHktZ2FtZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDZGtEcmFnLCBDZGtEcm9wTGlzdCwgTGlnaHRSaXBwbGVEaXJlY3RpdmVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxtYWluIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNoZWxsXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oZWFkZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlFeWVicm93JykgfX08L3A+XG4gICAgICAgICAgPGgxPnt7IHQoJ2NocmlzdGlhbml0eVRpdGxlJykgfX08L2gxPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS10dXJuXCIgW2NsYXNzLmlzLW93bi10dXJuXT1cImlzT3duVHVybigpXCI+XG4gICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5VHVybicpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgY3VycmVudFBsYXllcigpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1tYXRjaC1zdHJpcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5TWF0Y2hTY29yZScpXCI+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInBsYXllcigpLmF2YXRhckNvbG9yXCI+e3sgcGxheWVyKCkuYXZhdGFyIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8c21hbGw+e3sgcGxheWVyKCkubGVhZGVyTmFtZSB9fSDCtyB7eyBwbGF5ZXIoKS5sZWFkZXJIcCB9fS97eyBwbGF5ZXIoKS5sZWFkZXJNYXhIcCB9fTwvc21hbGw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1zY29yZWJvYXJkXCI+XG4gICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5TWF0Y2gnKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3Ryb25nPnt7IGdhbWUoKS5tYXRjaFNjb3JlLlAxIH19LXt7IGdhbWUoKS5tYXRjaFNjb3JlLlAyIH19PC9zdHJvbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cImNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllci0tb3Bwb25lbnRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1hdmF0YXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJvcHBvbmVudCgpLmF2YXRhckNvbG9yXCI+e3sgb3Bwb25lbnQoKS5hdmF0YXIgfX08L3NwYW4+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgb3Bwb25lbnQoKS5kaXNwbGF5TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPHNtYWxsPnt7IG9wcG9uZW50KCkubGVhZGVyTmFtZSB9fSDCtyB7eyBvcHBvbmVudCgpLmxlYWRlckhwIH19L3t7IG9wcG9uZW50KCkubGVhZGVyTWF4SHAgfX08L3NtYWxsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FydGljbGU+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGYgY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGYtLW9wcG9uZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1tZXRlciBjaHJpc3RpYW5pdHktaGFuZC1tZXRlci0tb3Bwb25lbnRcIj5cbiAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlIYW5kJykgfX08L3NwYW4+XG4gICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudEhhbmRDb3VudCgpIH19PC9zdHJvbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLWZhbiBjaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlPcHBvbmVudEhhbmQnKVwiPlxuICAgICAgICAgIEBmb3IgKF8gb2YgaGlkZGVuSGFuZENhcmRzKG9wcG9uZW50SGFuZENvdW50KCkpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIGNocmlzdGlhbml0eS1jYXJkLWZyYW1lIGNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYWNrXCJcbiAgICAgICAgICAgICAgdmFsTGlnaHRSaXBwbGVcbiAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJmYW5UcmFuc2Zvcm0oJGluZGV4LCBvcHBvbmVudEhhbmRDb3VudCgpLCB0cnVlKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5SGlkZGVuQ2FyZCcpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktdGFibGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVRhYmxlJylcIj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLXNpZGUgY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlLS1vcHBvbmVudFwiPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrIGNocmlzdGlhbml0eS1wbGF5ZXItcmFjay0tb3Bwb25lbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmdzLXpvbmVcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZVwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJvcGVuT2ZmZXJpbmdzKCdQMicpXCI+XG4gICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdzJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57eyByZWFkeU9mZmVyaW5ncyhvcHBvbmVudCgpKSB9fS97eyB0b3RhbE9mZmVyaW5ncyhvcHBvbmVudCgpKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQgY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUgY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWxlYWRlclwiIHZhbExpZ2h0UmlwcGxlIFtjbGFzcy5pcy10YXJnZXRdPVwic2VsZWN0ZWRBdHRhY2tlcigpICYmICFoYXNPcHBvbmVudEd1YXJkcygpXCIgKGNsaWNrKT1cImhhbmRsZU9wcG9uZW50TGVhZGVyKClcIj5cbiAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxzbWFsbD57eyB0KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJykgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgb3Bwb25lbnQoKS5sZWFkZXJOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgb3Bwb25lbnQoKS5sZWFkZXJIcCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgb3Bwb25lbnQoKS5sZWFkZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzbWFsbD57eyB0KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJykgfX08L3NtYWxsPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtZWZmZWN0XCI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudCgpLmxlYWRlckhwIH19L3t7IG9wcG9uZW50KCkubGVhZGVyTWF4SHAgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1yYWNrLXNwYWNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1iYXR0bGUtem9uZSBjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUtLW9wcG9uZW50XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlPcHBvbmVudEJhdHRsZScpXCI+XG4gICAgICAgICAgICBAZm9yIChzbG90IG9mIGJhdHRsZVNsb3RzKCdQMicpOyB0cmFjayBzbG90LnRyYWNrSWQpIHtcbiAgICAgICAgICAgICAgQGlmIChzbG90LmNhcmQpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIGNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlIGNocmlzdGlhbml0eS1jYXJkLWZyYW1lIGNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYXR0bGVcIlxuICAgICAgICAgICAgICAgICAgdmFsTGlnaHRSaXBwbGVcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy10YXJnZXRdPVwic2VsZWN0ZWRBdHRhY2tlcigpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHBvbmVudENoYXJhY3RlcihzbG90LmNhcmQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyB0KCdjaHJpc3RpYW5pdHlDb3N0JykgfX0ge3sgY2FyZERlZmluaXRpb24oc2xvdC5jYXJkLmNhcmRJZCkuY29zdCB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgc2xvdC5jYXJkLm5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY2FyZERlZmluaXRpb24oc2xvdC5jYXJkLmNhcmRJZCkuY29zdCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgc2xvdC5jYXJkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyB0KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJDYXJkJykgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1lZmZlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzbG90LmNhcmQuYXR0YWNrIH19IC8ge3sgc2xvdC5jYXJkLmN1cnJlbnRIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1zbG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktc2hhcmVkLXpvbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVNoYXJlZFpvbmUnKVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBjaHJpc3RpYW5pdHktem9uZS1waWxlLS1oaXN0b3J5XCIgdmFsTGlnaHRSaXBwbGUgKGNsaWNrKT1cIm9wZW5IaXN0b3J5KClcIj5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLmhpc3Rvcnlab25lLmxlbmd0aCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBjaHJpc3RpYW5pdHktem9uZS1waWxlLS1kZWNrXCIgdmFsTGlnaHRSaXBwbGUgYXJpYS1saXZlPVwicG9saXRlXCIgKGNsaWNrKT1cImluc3BlY3REZWNrKClcIj5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eURlY2snKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLnNoYXJlZERlY2subGVuZ3RoIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS16b25lLWNhcmRcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVBsYWNlJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUVtcHR5JykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlXCI+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmVcIiBbY2xhc3MuaXMtcGxhY2luZy1jYXJkXT1cImNhblBsYWNlU2VsZWN0ZWRDaGFyYWN0ZXIoKSB8fCBpc0RyYWdnaW5nQ2hhcmFjdGVyKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVlvdXJCYXR0bGUnKVwiPlxuICAgICAgICAgICAgQGZvciAoc2xvdCBvZiBiYXR0bGVTbG90cygnUDEnKTsgdHJhY2sgc2xvdC50cmFja0lkKSB7XG4gICAgICAgICAgICAgIEBpZiAoc2xvdC5jYXJkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZSBjaHJpc3RpYW5pdHktY2FyZC1mcmFtZSBjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmF0dGxlXCJcbiAgICAgICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRBdHRhY2tlcigpPy5pbnN0YW5jZUlkID09PSBzbG90LmNhcmQuaW5zdGFuY2VJZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZXhoYXVzdGVkXT1cIiFzbG90LmNhcmQuY2FuQXR0YWNrXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBdHRhY2tlcihzbG90LmNhcmQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyB0KCdjaHJpc3RpYW5pdHlDb3N0JykgfX0ge3sgY2FyZERlZmluaXRpb24oc2xvdC5jYXJkLmNhcmRJZCkuY29zdCB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgc2xvdC5jYXJkLm5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY2FyZERlZmluaXRpb24oc2xvdC5jYXJkLmNhcmRJZCkuY29zdCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgc2xvdC5jYXJkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyB0KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJDYXJkJykgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1lZmZlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzbG90LmNhcmQuYXR0YWNrIH19IC8ge3sgc2xvdC5jYXJkLmN1cnJlbnRIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNsb3RcIlxuICAgICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJiYXR0bGVTbG90RHJvcElkKCRpbmRleClcIlxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCIkaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiWydjaHJpc3RpYW5pdHktaGFuZC1zb3VyY2UnXVwiXG4gICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJjYW5Ecm9wT25CYXR0bGVTbG90XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXRdPVwiY2FuUGxhY2VTZWxlY3RlZENoYXJhY3RlcigpIHx8IGlzRHJhZ2dpbmdDaGFyYWN0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICB2YWxMaWdodFJpcHBsZVxuICAgICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wT25CYXR0bGVTbG90KCRldmVudCwgJGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGxheVNlbGVjdGVkQ2FyZCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAaWYgKGNhblBsYWNlU2VsZWN0ZWRDaGFyYWN0ZXIoKSB8fCBpc0RyYWdnaW5nQ2hhcmFjdGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5UGxheUhlcmUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy16b25lXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlXCJcbiAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgIGlkPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1kcm9wXCJcbiAgICAgICAgICAgICAgICB2YWxMaWdodFJpcHBsZVxuICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlsnY2hyaXN0aWFuaXR5LWhhbmQtc291cmNlJ11cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1wbGF5LXRhcmdldF09XCJjYW5QbGFjZVNlbGVjdGVkT2ZmZXJpbmcoKSB8fCBpc0RyYWdnaW5nT2ZmZXJpbmcoKVwiXG4gICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwiY2FuRHJvcE9uT2ZmZXJpbmdzXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BPbk9mZmVyaW5ncygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT2ZmZXJpbmdQaWxlKCdQMScpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5ncycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcmVhZHlPZmZlcmluZ3MocGxheWVyKCkpIH19L3t7IHRvdGFsT2ZmZXJpbmdzKHBsYXllcigpKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQgY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUgY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWxlYWRlclwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0TGVhZGVyKCdQMScpXCI+XG4gICAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c21hbGw+e3sgdCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpIH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmxlYWRlck5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBwbGF5ZXIoKS5sZWFkZXJIcCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgcGxheWVyKCkubGVhZGVyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c21hbGw+e3sgdCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpIH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWVmZmVjdFwiPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcGxheWVyKCkubGVhZGVySHAgfX0ve3sgcGxheWVyKCkubGVhZGVyTWF4SHAgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1jb21tYW5kXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktYXZhdGFyXCIgW3N0eWxlLmJhY2tncm91bmRdPVwicGxheWVyKCkuYXZhdGFyQ29sb3JcIj57eyBwbGF5ZXIoKS5hdmF0YXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57eyBwbGF5ZXIoKS5kaXNwbGF5TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWVuZC10dXJuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5kVHVybigpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eUVuZFR1cm4nKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLXNoZWxmXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1tZXRlclwiPlxuICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUhhbmQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmhhbmQ/Lmxlbmd0aCA/PyAwIH19PC9zdHJvbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2VjdGlvblxuICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtZmFuXCJcbiAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgIGlkPVwiY2hyaXN0aWFuaXR5LWhhbmQtc291cmNlXCJcbiAgICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJkcm9wVGFyZ2V0SWRzKClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5WW91ckhhbmQnKVwiXG4gICAgICAgICAgKHBvaW50ZXJsZWF2ZSk9XCJjbGVhckhvdmVyZWRIYW5kSW5kZXgoKVwiXG4gICAgICAgID5cbiAgICAgICAgICBAZm9yIChjYXJkSWQgb2YgcGxheWVyKCkuaGFuZCA/PyBbXTsgdHJhY2sgY2FyZElkICsgJGluZGV4KSB7XG4gICAgICAgICAgICBAbGV0IGNhcmQgPSBjYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZEhhbmRDYXJkKCkgPT09IGNhcmRJZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1kcmFnZ2luZ109XCJkcmFnZ2luZ0NhcmRJZCgpID09PSBjYXJkSWRcIlxuICAgICAgICAgICAgICBbc3R5bGUuei1pbmRleF09XCJoYW5kQ2FyZFpJbmRleCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJmYW5UcmFuc2Zvcm0oJGluZGV4LCBwbGF5ZXIoKS5oYW5kPy5sZW5ndGggPz8gMCwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgKHBvaW50ZXJlbnRlcik9XCJzZXRIb3ZlcmVkSGFuZEluZGV4KCRpbmRleClcIlxuICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwic2V0SG92ZXJlZEhhbmRJbmRleCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgKHBvaW50ZXJ1cCk9XCJyZWxlYXNlSG92ZXJlZEhhbmQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQgY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWVcIlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICB2YWxMaWdodFJpcHBsZVxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjYXJkSWRcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIWNhblBsYXkoY2FyZClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZEhhbmRDYXJkKCkgPT09IGNhcmRJZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLWRpc2FibGVkXT1cIiFjYW5QbGF5KGNhcmQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwic3RhcnREcmFnZ2luZ0NhcmQoY2FyZElkKVwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJlbmREcmFnZ2luZ0NhcmQoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEhhbmRDYXJkKGNhcmRJZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IGNhcmRUeXBlTGFiZWwoY2FyZCkgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBjYXJkLm5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyA/ICcrJyArIGNhcmQubGlmZSA6IGNhcmQuY29zdCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWFydFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY2FyZC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IGNhcmRUeXBlTGFiZWwoY2FyZCkgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWVmZmVjdFwiPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAre3sgY2FyZC5saWZlIH19XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHt7IGNhcmQuYXR0YWNrIH19IC8ge3sgY2FyZC5saWZlIH19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgICAgICA8Zm9vdGVyIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjYXJkLmVkaXRpb24gPz8gJ01WUCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjYXJkLmNvbGxlY3Rvck51bWJlciA/PyBjYXJkLmlkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtZXllXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVByZXZpZXdDYXJkJylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnNwZWN0SGFuZENhcmQoY2FyZElkLCB0cnVlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAoc2VsZWN0ZWRQcmV2aWV3KCkpIHtcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktcHJldmlldy1iYWNrZHJvcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5Q2xvc2VQcmV2aWV3JylcIiAoY2xpY2spPVwiY2xvc2VQcmV2aWV3KClcIj48L2J1dHRvbj5cbiAgICAgICAgPGFzaWRlXG4gICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZC1zaGVsbFwiXG4gICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VQcmV2aWV3KClcIj5cbiAgICAgICAgICAgIHt7IHQoJ2Nsb3NlJykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLXByZXZpZXctcm90YXRlLXhdPVwicHJldmlld1RpbHQoKS5yb3RhdGVYICsgJ2RlZydcIlxuICAgICAgICAgICAgW3N0eWxlLi0tcHJldmlldy1yb3RhdGUteV09XCJwcmV2aWV3VGlsdCgpLnJvdGF0ZVkgKyAnZGVnJ1wiXG4gICAgICAgICAgICBbc3R5bGUuLS1wcmV2aWV3LXNoaWZ0LXhdPVwicHJldmlld1RpbHQoKS5zaGlmdFggKyAncHgnXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLXByZXZpZXctc2hpZnQteV09XCJwcmV2aWV3VGlsdCgpLnNoaWZ0WSArICdweCdcIlxuICAgICAgICAgICAgKHBvaW50ZXJtb3ZlKT1cInRpbHRQcmV2aWV3KCRldmVudClcIlxuICAgICAgICAgICAgKHBvaW50ZXJsZWF2ZSk9XCJyZXNldFByZXZpZXdUaWx0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRQcmV2aWV3Q2FyZCgpOyBhcyBwcmV2aWV3Q2FyZCkge1xuICAgICAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1mdWxsLWNhcmQtdHlwZS1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcHJldmlld0NhcmQubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1jb3N0XCI+e3sgcHJldmlld0NhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyA/ICcrJyArIHByZXZpZXdDYXJkLmxpZmUgOiBwcmV2aWV3Q2FyZC5jb3N0IH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktZnVsbC1jYXJkLWFydFwiIFtjbGFzcy5oYXMtaW1hZ2VdPVwicHJldmlld0NhcmQuaW1hZ2VVcmxcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHByZXZpZXdDYXJkLmltYWdlVXJsKSB7XG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicHJldmlld0NhcmQuaW1hZ2VVcmxcIiBbYWx0XT1cInByZXZpZXdDYXJkLm5hbWVcIiAvPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcHJldmlld0NhcmQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNtYWxsPnt7IGNhcmRUeXBlTGFiZWwocHJldmlld0NhcmQpIH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1mdWxsLWNhcmQtdmVyc2VcIj5cbiAgICAgICAgICAgICAgICA8cD57eyBwcmV2aWV3Q2FyZC52ZXJzZVRleHQgPz8gc2VsZWN0ZWRQcmV2aWV3KCk/LmJvZHkgfX08L3A+XG4gICAgICAgICAgICAgICAgQGlmIChwcmV2aWV3Q2FyZC5zY3JpcHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcHJldmlld0NhcmQuc2NyaXB0dXJlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1zdGF0c1wiPlxuICAgICAgICAgICAgICAgICAgQGlmIChwcmV2aWV3Q2FyZC50eXBlID09PSAnY2hhcmFjdGVyJykge1xuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHByZXZpZXdDYXJkLmF0dGFjayB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHByZXZpZXdDYXJkLmxpZmUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPit7eyBwcmV2aWV3Q2FyZC5saWZlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIEBpZiAocHJldmlld0NhcmQuYWJpbGl0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBwcmV2aWV3Q2FyZC5hYmlsaXR5TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPHA+e3sgcHJldmlld0NhcmQuYWJpbGl0eVRleHQgPz8gc2VsZWN0ZWRQcmV2aWV3KCk/LmJvZHkgfX08L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1yYXJpdHlcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLW5vcm1hbF09XCIhcHJldmlld0NhcmQucmFyaXR5IHx8IHByZXZpZXdDYXJkLnJhcml0eSA9PT0gJ25vcm1hbCdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLXVuY29tbW9uXT1cInByZXZpZXdDYXJkLnJhcml0eSA9PT0gJ3VuY29tbW9uJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtcmFyZV09XCJwcmV2aWV3Q2FyZC5yYXJpdHkgPT09ICdyYXJlJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtbGVnZW5kYXJ5XT1cInByZXZpZXdDYXJkLnJhcml0eSA9PT0gJ2xlZ2VuZGFyeSdcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxmb290ZXIgY2xhc3M9XCJjaHJpc3RpYW5pdHktZnVsbC1jYXJkLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHByZXZpZXdDYXJkLmVkaXRpb24gPz8gJ01WUCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgcHJldmlld0NhcmQuY29sbGVjdG9yTnVtYmVyID8/IHByZXZpZXdDYXJkLmlkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHByZXZpZXdDYXJkLnllYXIgPz8gJzIwMjYnIH19IENIUklTVElBTklUWTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBwcmV2aWV3Q2FyZC5hdXRob3IgPz8gJ01WUCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJjaHJpc3RpYW5pdHktZnVsbC1jYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC10eXBlLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzZWxlY3RlZFByZXZpZXcoKT8udGl0bGUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1mdWxsLWNhcmQtY29zdFwiPnt7IHNlbGVjdGVkUHJldmlldygpPy5tZXRhIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktZnVsbC1jYXJkLWFydFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkUHJldmlldygpPy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c21hbGw+e3sgc2VsZWN0ZWRQcmV2aWV3KCk/LmV5ZWJyb3cgfX08L3NtYWxsPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC12ZXJzZVwiPlxuICAgICAgICAgICAgICAgIDxwPnt7IHNlbGVjdGVkUHJldmlldygpPy5ib2R5IH19PC9wPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1zdGF0c1wiPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzZWxlY3RlZFByZXZpZXcoKT8ubWV0YSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHNlbGVjdGVkUHJldmlldygpPy5leWVicm93IH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8cD57eyBzZWxlY3RlZFByZXZpZXcoKT8uYm9keSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1mdWxsLWNhcmQtcmFyaXR5IGlzLWxlZ2VuZGFyeVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8Zm9vdGVyIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5NVlA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWRQcmV2aWV3KCk/LmV5ZWJyb3cgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+MjAyNiBDSFJJU1RJQU5JVFk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWRQcmV2aWV3KCk/Lm1ldGEgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoc2VsZWN0ZWRQcmV2aWV3KCk/LnNvdXJjZSA9PT0gJ2hhbmQnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwicHJldmlld0FjdGlvbkRpc2FibGVkKClcIiAoY2xpY2spPVwicGxheVByZXZpZXdDYXJkKClcIj5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZEFjdGlvbkxhYmVsKCkgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvYXNpZGU+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2VsZWN0ZWRJbmZvKCk7IGFzIGluZm8pIHtcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktaW5mby1iYWNrZHJvcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2xvc2UnKVwiIChjbGljayk9XCJjbG9zZUluZm8oKVwiPjwvYnV0dG9uPlxuICAgICAgICA8YXNpZGUgY2xhc3M9XCJjaHJpc3RpYW5pdHktaW5mby1wYW5lbFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZSBjaHJpc3RpYW5pdHktaW5mby1jbG9zZVwiIChjbGljayk9XCJjbG9zZUluZm8oKVwiPlxuICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcnVsZS1ub3RlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmk8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c21hbGw+e3sgaW5mby5leWVicm93IH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgPGgyPnt7IGluZm8udGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IGluZm8ubWV0YSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyBpbmZvLmJvZHkgfX08L3A+XG4gICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICBAZm9yIChmYWN0IG9mIGluZm8uZmFjdHM7IHRyYWNrIGZhY3QpIHtcbiAgICAgICAgICAgICAgICAgIDxsaT57eyBmYWN0IH19PC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hc2lkZT5cbiAgICAgIH1cblxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktYWN0aW9uc1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICA8cD57eyBzdGF0dXNUZXh0KCkgfX08L3A+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cInNlbGVjdGVkQWN0aW9uRGlzYWJsZWQoKVwiIChjbGljayk9XCJwbGF5U2VsZWN0ZWRDYXJkKClcIj5cbiAgICAgICAgICAgIHt7IHNlbGVjdGVkQWN0aW9uTGFiZWwoKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZXNldE1vY2soKVwiPlxuICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5UmVzZXQnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgQGlmIChzaG93SGlzdG9yeSgpKSB7XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpc3RvcnktYmFja2Ryb3BcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUNsb3NlSGlzdG9yeScpXCIgKGNsaWNrKT1cInNob3dIaXN0b3J5LnNldChmYWxzZSlcIj48L2J1dHRvbj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXJcIj5cbiAgICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPGgyPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnknKSB9fTwvaDI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGdhbWUoKS5oaXN0b3J5Wm9uZS5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZVwiIChjbGljayk9XCJzaG93SGlzdG9yeS5zZXQoZmFsc2UpXCI+XG4gICAgICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgIEBpZiAoZ2FtZSgpLmhpc3Rvcnlab25lLmxlbmd0aCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWRcIj5cbiAgICAgICAgICAgICAgQGZvciAoY2FyZElkIG9mIGdhbWUoKS5oaXN0b3J5Wm9uZTsgdHJhY2sgY2FyZElkICsgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgQGxldCBjYXJkID0gY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1mcmFtZSBjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tbGlzdFwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0SGlzdG9yeUNhcmQoY2FyZElkKVwiPlxuICAgICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGw+e3sgY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJykgOiB0KCdjaHJpc3RpYW5pdHlDb3N0JykgKyAnICcgKyBjYXJkLmNvc3QgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGNhcmQubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyAnKycgKyBjYXJkLmxpZmUgOiBjYXJkLmNvc3QgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNhcmQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IGNhcmRUeXBlTGFiZWwoY2FyZCkgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1lZmZlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgK3t7IGNhcmQubGlmZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAge3sgY2FyZC5hdHRhY2sgfX0gLyB7eyBjYXJkLmxpZmUgfX1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnlFbXB0eScpIH19PC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKG9mZmVyaW5nc1NlYXQoKSkge1xuICAgICAgICBAbGV0IG9mZmVyaW5nUGxheWVyID0gZ2FtZSgpLnBsYXllcnNbb2ZmZXJpbmdzU2VhdCgpIV07XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpc3RvcnktYmFja2Ryb3BcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUNsb3NlT2ZmZXJpbmdzJylcIiAoY2xpY2spPVwiY2xvc2VPZmZlcmluZ3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBjaHJpc3RpYW5pdHktb2ZmZXJpbmdzLWRyYXdlclwiPlxuICAgICAgICAgIDxoZWFkZXI+XG4gICAgICAgICAgICA8aDI+e3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdzJykgfX08L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1kaWFsb2ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyByZWFkeU9mZmVyaW5ncyhvZmZlcmluZ1BsYXllcikgfX0ve3sgdG90YWxPZmZlcmluZ3Mob2ZmZXJpbmdQbGF5ZXIpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VPZmZlcmluZ3MoKVwiPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2Nsb3NlJykgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmk8L3NwYW4+XG4gICAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ3NSdWxlQm9keScpIH19PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdFwiPlxuICAgICAgICAgICAgQGZvciAob2ZmZXJpbmcgb2Ygb2ZmZXJpbmdQbGF5ZXIub2ZmZXJpbmdzOyB0cmFjayBvZmZlcmluZy5pbnN0YW5jZUlkKSB7XG4gICAgICAgICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvd1wiIFtjbGFzcy5pcy1leGhhdXN0ZWRdPVwiIW9mZmVyaW5nLnJlYWR5XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZFwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0T2ZmZXJpbmcob2ZmZXJpbmcpXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+e3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJykgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBvZmZlcmluZy5uYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4re3sgb2ZmZXJpbmcudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8ZW0+e3sgb2ZmZXJpbmcucmVhZHkgPyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ1JlYWR5JykgOiB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0V4aGF1c3RlZCcpIH19PC9lbT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBvZmZlcmluZy5yZWFkeSA/IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5nUmVhZHknKSA6IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5nRXhoYXVzdGVkJykgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxwPnt7IG9mZmVyaW5nLmFiaWxpdHlUZXh0IHx8IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5nTm9BYmlsaXR5JykgfX08L3A+XG4gICAgICAgICAgICAgICAgICBAaWYgKG9mZmVyaW5nLmFiaWxpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblVzZU9mZmVyaW5nQWJpbGl0eShvZmZlcmluZywgb2ZmZXJpbmdzU2VhdCgpISlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmcsIG9mZmVyaW5nc1NlYXQoKSEpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVVzZUFiaWxpdHknKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG4gICAgPC9tYWluPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluazogdmFyKC0tdmFsLXRleHQtY29sb3IsICMxZjI5MzMpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1zdXJmYWNlOiAjZmZmZmZmO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1wYXJjaG1lbnQ6ICNmZmZhZjA7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLW9saXZlOiAjNWY2ZjJhO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkOiAjZDZhMjFkO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXNvZnQ6IHJnYmEoMjE0LCAxNjIsIDI5LCAwLjE4KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1yaW5nOiByZ2JhKDIxNCwgMTYyLCAyOSwgMC40OCk7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdsb3c6IHJnYmEoMjQ1LCAxOTksIDg1LCAwLjMyKTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXM6ICMyNTYzZWI7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdzogcmdiYSg4MiwgNjQsIDI4LCAwLjE4KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtc2hhZG93LXN0cm9uZzogcmdiYSg4MiwgNjQsIDI4LCAwLjMpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdDogNSAvIDcuNDU7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LWNhcmQtYmFjazpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE2LCA0MiwgNjcsIDAuMTYpLCByZ2JhKDE2LCA0MiwgNjcsIDAuMDMpKSxcbiAgICAgICAgICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZGJlYWZlIDAgMC4zM3JlbSwgI2ZmZmZmZiAwLjMzcmVtIDAuNjZyZW0pO1xuICAgICAgICAtLWNocmlzdGlhbml0eS1jYXJkLWJhY2stc29mdDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE2LCA0MiwgNjcsIDAuMTEpLCByZ2JhKDE2LCA0MiwgNjcsIDAuMDIpKSxcbiAgICAgICAgICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZGJlYWZlIDAgMC4zM3JlbSwgI2ZmZmZmZiAwLjMzcmVtIDAuNjZyZW0pO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtaW5rKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGVsbCB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDAuMjVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmNmY4ZmI7XG4gICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLFxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1zdHJpcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyX19zdW1tYXJ5LFxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBoMSxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCxcbiAgICAgIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5IGgyLFxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjM1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgLmNocmlzdGlhbml0eS10dXJuIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncyBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1kZWNrIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYWNlIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBpbGUgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyIHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY0KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZGVjayxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxhY2Uge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMTVyZW07XG4gICAgICAgIG1pbi13aWR0aDogNS4yNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbSAwLjY1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdHVybi5pcy1vd24tdHVybiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOCwgMTI4LCAxMDgsIDAuMzUpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWNmZGY1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXN0cmlwIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBwYWRkaW5nOiAwLjQ1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllci0tb3Bwb25lbnQge1xuICAgICAgICBkaXJlY3Rpb246IHJ0bDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXItLW9wcG9uZW50IGRpdiB7XG4gICAgICAgIGRpcmVjdGlvbjogbHRyO1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgZGl2IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCxcbiAgICAgIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43MnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAganVzdGlmeS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDQuMnJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjU1cmVtO1xuICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmQgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXRhYmxlIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuNDVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2RjZWFmYjtcbiAgICAgICAgb3ZlcmZsb3cteDogY2xpcDtcbiAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItc2lkZSB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4zNXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBwYWRkaW5nOiAwLjM1cmVtIDAuM3JlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbm1heCg3cmVtLCAxZnIpIGF1dG87XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEzLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlLS1vcHBvbmVudCB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoN3JlbSwgMWZyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUge1xuICAgICAgICAtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aDogY2xhbXAoNC44cmVtLCAxNXZ3LCA2LjZyZW0pO1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpKTtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG1pbi1oZWlnaHQ6IGNsYW1wKDkuMXJlbSwgMjl2dywgMTFyZW0pO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuNHJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBiYWNrZ3JvdW5kIDE2MG1zIGVhc2UsXG4gICAgICAgICAgYm94LXNoYWRvdyAxNjBtcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLmlzLXBsYWNpbmctY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1MCwgMjQwLCAwLjk2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg0KSksXG4gICAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjE0cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXNvZnQpLFxuICAgICAgICAgIDAgMC44cmVtIDEuN3JlbSByZ2JhKDk1LCAxMTEsIDQyLCAwLjEyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC40cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgYnV0dG9uLFxuICAgICAgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItLXRhcmdldCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuOHJlbTtcbiAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNXJlbSAxLjI1cmVtIHJnYmEoMzYsIDQ4LCA2OCwgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCBzcGFuIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHN0cm9uZyB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBwYWRkaW5nOiAwLjE1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLXNlbGVjdGVkIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZCk7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgMCAwIDAgMC4xOHJlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1zb2Z0KSxcbiAgICAgICAgICAwIDAuODVyZW0gMS40cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtZGlzYWJsZWQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtZXhoYXVzdGVkIHtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLXRhcmdldCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI2RjMjYyNjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkcyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiAwLjdyZW07XG4gICAgICAgIGdhcDogMC4xNnJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGVuZDtcbiAgICAgICAgbWluLWhlaWdodDogMS4wNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkcyBpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAwLjY1cmVtO1xuICAgICAgICBoZWlnaHQ6IDAuOTVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTYsIDQyLCA2NywgMC4yMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMThyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZHMgaS5pcy11c2VkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2NiZDVlMTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICAgICAgICB3aWR0aDogdmFyKC0tY2hyaXN0aWFuaXR5LWJhdHRsZS1jYXJkLXdpZHRoKTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDM2LCA0OCwgNjgsIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmcpO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTAsIDI0MCwgMC45MiksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC44MikpLFxuICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICAgICAgY29sb3I6ICM1ZDQzMDU7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgaW5zZXQgMCAwIDAgMC4xMnJlbSByZ2JhKDIxNCwgMTYyLCAyOSwgMC4yKSxcbiAgICAgICAgICAwIDAuN3JlbSAxLjI1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgICBhbmltYXRpb246IGNocmlzdGlhbml0eS10YXJnZXQtcHVsc2UgMTQ1MG1zIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0OjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMTQsIDE2MiwgMjksIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjRyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyMTQsIDE2MiwgMjksIDAuMSksIHRyYW5zcGFyZW50IDQ2JSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNDIlLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ2xvdyksIHRyYW5zcGFyZW50IDU4JSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQgc3BhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgcGFkZGluZzogMC4xNnJlbSAwLjQ0cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGNocmlzdGlhbml0eS10YXJnZXQtcHVsc2Uge1xuICAgICAgICAwJSxcbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAgIGluc2V0IDAgMCAwIDAuMTJyZW0gcmdiYSgyMTQsIDE2MiwgMjksIDAuMiksXG4gICAgICAgICAgICAwIDAuN3JlbSAxLjI1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgICAgaW5zZXQgMCAwIDAgMC4xNnJlbSByZ2JhKDIxNCwgMTYyLCAyOSwgMC4zNCksXG4gICAgICAgICAgICAwIDAuOXJlbSAxLjY1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3ctc3Ryb25nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDZyZW0sIDhyZW0pO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgbWluLWhlaWdodDogMi40cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b246bm90KDpkaXNhYmxlZCksXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzEwMmE0MztcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBtaW4taGVpZ2h0OiAxMC44cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuMjVyZW0gMi4xcmVtO1xuICAgICAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGYge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHotaW5kZXg6IDEyO1xuICAgICAgICBtaW4taGVpZ2h0OiAxMnJlbTtcbiAgICAgICAgbWFyZ2luLXRvcDogLTEuMTVyZW07XG4gICAgICAgIHBhZGRpbmc6IDEuNDVyZW0gMC4yNXJlbSAxcmVtO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLXNoZWxmLS1vcHBvbmVudCB7XG4gICAgICAgIHotaW5kZXg6IDg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDYuODVyZW07XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuNDVyZW0gMC4yNXJlbSAwLjg1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuOXJlbTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuNzVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbi0tb3Bwb25lbnQgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYWNrIHtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDMuN3JlbSwgMTJ2dywgNC45cmVtKTtcbiAgICAgICAgbWFyZ2luLWlubGluZTogLTAuOXJlbTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDEyMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFjazpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudCAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWJhY2s6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvIGF1dG87XG4gICAgICAgIGdhcDogMC4yOHJlbTtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RyZXRjaDtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDQuOXJlbSwgMTd2dywgNy4xcmVtKTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIHBhZGRpbmc6IDAuNDhyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxMTUlO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHRyYW5zZm9ybSAxNjBtcyBlYXNlLFxuICAgICAgICAgIGJveC1zaGFkb3cgMTYwbXMgZWFzZSxcbiAgICAgICAgICBib3JkZXItY29sb3IgMTYwbXMgZWFzZTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjVyZW0gMS4yNXJlbSByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG8gYXV0bztcbiAgICAgICAgZ2FwOiAwLjI4cmVtO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBwYWRkaW5nOiAwLjQ4cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45OCksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC45OCkpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTUlIDAlLCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4xMiksIHRyYW5zcGFyZW50IDQ0JSk7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgMCAwLjVyZW0gMS4yNXJlbSByZ2JhKDM2LCA0OCwgNjgsIDAuMSksXG4gICAgICAgICAgaW5zZXQgMCAwIDAgMC4xOHJlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvO1xuICAgICAgICBnYXA6IDAuMTZyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHNtYWxsIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42NCk7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMC41MnJlbSwgMS41dncsIDAuNjhyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3Ryb25nIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDE7XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDAuODJyZW0sIDIuNXZ3LCAxLjA1cmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDI7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHN0cm9uZyB7XG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgICAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc21hbGwge1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgICAgIG1heC13aWR0aDogODglO1xuICAgICAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHNwYW4ge1xuICAgICAgICBncmlkLWNvbHVtbjogMjtcbiAgICAgICAgZ3JpZC1yb3c6IDEgLyBzcGFuIDI7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogMS4zcmVtO1xuICAgICAgICBoZWlnaHQ6IDEuM3JlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjIycmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZDkxYTtcbiAgICAgICAgY29sb3I6ICMyNDMwNDQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMC4wOHJlbSAwIHJnYmEoODIsIDY0LCAyOCwgMC4xOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMzZyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSg5NSwgMTExLCA0MiwgMC4xOCksIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjE0KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgMTglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpLCB0cmFuc3BhcmVudCA0OCUpLFxuICAgICAgICAgICNkYmU3ZWY7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2JhKDM2LCA0OCwgNjgsIDAuMDgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0ID4gc3BhbiB7XG4gICAgICAgIG1heC13aWR0aDogNzglO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBjb2xvcjogcmdiYSgzNiwgNDgsIDY4LCAwLjQ4KTtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjgycmVtLCAyLjJ2dywgMS4wNXJlbSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjAyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0IHNtYWxsIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwLjI4cmVtO1xuICAgICAgICBtYXgtd2lkdGg6IDc4JTtcbiAgICAgICAgcGFkZGluZzogMC4xcmVtIDAuMzRyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4IDAgMCA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY2KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjQ4cmVtO1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWVmZmVjdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjFyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuNDVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuMjRyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMzRyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNzAlLCByZ2JhKDM2LCA0OCwgNjgsIDAuMDYpLCB0cmFuc3BhcmVudCA0NCUpLFxuICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1lZmZlY3Qgc3Ryb25nIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBlbmQ7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgcGFkZGluZzogMC4xMnJlbSAwLjMycmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2VkZjJmNztcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjY2cmVtLCAydncsIDAuODJyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWVmZmVjdCBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjcyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjU4cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWZvb3RlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAwLjIycmVtO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjUyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjQ2cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYXR0bGUge1xuICAgICAgICBnYXA6IDAuMjJyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNDJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmF0dGxlIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQge1xuICAgICAgICBtaW4taGVpZ2h0OiAyLjZyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tbGVhZGVyIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQge1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTQpLCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4xNikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDE4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KSwgdHJhbnNwYXJlbnQgNDglKSxcbiAgICAgICAgICAjZTdlZWY4O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWxpc3Qge1xuICAgICAgICB3aWR0aDogY2xhbXAoNC40cmVtLCAyMnZ3LCA1LjhyZW0pO1xuICAgICAgICBwYWRkaW5nOiAwLjM4cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWxpc3QgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWFydCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAganVzdGlmeS1pdGVtczogY2VudGVyO1xuICAgICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgICAgbWFyZ2luLWlubGluZTogLTAuNDJyZW07XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAycmVtO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTE1JTtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICB0cmFuc2Zvcm0gMTYwbXMgZWFzZSxcbiAgICAgICAgICBmaWx0ZXIgMTYwbXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcDpob3ZlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXAuaXMtc2VsZWN0ZWQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwLmlzLWRyYWdnaW5nIHtcbiAgICAgICAgei1pbmRleDogMztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcDpob3ZlciAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kLFxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcC5pcy1zZWxlY3RlZCAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kLFxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcC5pcy1kcmFnZ2luZyAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZCk7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgMCAwIDAgMC4xMnJlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1zb2Z0KSxcbiAgICAgICAgICAwIDFyZW0gMnJlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtc2hhZG93KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCB7XG4gICAgICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZC5jZGstZHJhZy1kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQuY2RrLWRyYWctcHJldmlldyB7XG4gICAgICAgIHdpZHRoOiBjbGFtcCg0LjlyZW0sIDE3dncsIDcuMXJlbSk7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1yaW5nKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAgMCAwLjE2cmVtIHJnYmEoMjU1LCAyNDQsIDE5NCwgMC42OCksXG4gICAgICAgICAgMCAxLjVyZW0gM3JlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtc2hhZG93LXN0cm9uZyk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDJkZWcpIHNjYWxlKDEuMDMpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLmNkay1kcmFnLXBsYWNlaG9sZGVyIHtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDQuOXJlbSwgMTd2dywgNy4xcmVtKTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIG9wYWNpdHk6IDAuMjI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlLmNkay1kcm9wLWxpc3QtZHJhZ2dpbmcge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QuY2RrLWRyb3AtbGlzdC1yZWNlaXZpbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUuY2RrLWRyb3AtbGlzdC1yZWNlaXZpbmcge1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuMThyZW0gcmdiYSgyMTQsIDE2MiwgMjksIDAuMzQpLFxuICAgICAgICAgIDAgMXJlbSAxLjlyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdy1zdHJvbmcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZXllIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogNTAlO1xuICAgICAgICBib3R0b206IDAuMzhyZW07XG4gICAgICAgIHdpZHRoOiAyLjE1cmVtO1xuICAgICAgICBoZWlnaHQ6IDEuNTVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpIDUyJSwgdHJhbnNwYXJlbnQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjU1cmVtIDEuMXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMTQpO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIC0wLjJyZW0pIHNjYWxlKDAuOTIpO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIG9wYWNpdHkgMTQwbXMgZWFzZSxcbiAgICAgICAgICB0cmFuc2Zvcm0gMTQwbXMgZWFzZSxcbiAgICAgICAgICBib3JkZXItY29sb3IgMTQwbXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWV5ZTo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgd2lkdGg6IDEuMXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjFyZW07XG4gICAgICAgIGJvcmRlcjogMC4xMnJlbSBzb2xpZCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4MiUgMDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWV5ZTo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB3aWR0aDogMC40MnJlbTtcbiAgICAgICAgaGVpZ2h0OiAwLjQycmVtO1xuICAgICAgICBib3JkZXI6IDAuMDlyZW0gc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAzNSUgMzIlLCAjZmZmZmZmIDAgMC4wNnJlbSwgdHJhbnNwYXJlbnQgMC4wN3JlbSksXG4gICAgICAgICAgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXA6aG92ZXIgLmNocmlzdGlhbml0eS1jYXJkLWV5ZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXAuaXMtc2VsZWN0ZWQgLmNocmlzdGlhbml0eS1jYXJkLWV5ZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1leWU6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgMCkgc2NhbGUoMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZS5pcy1wbGF5LXRhcmdldCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtcmluZyk7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1MCwgMjQwLCAwLjk2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MiUgMTQlLCByZ2JhKDI1MCwgMjA0LCAyMSwgMC4yOCkgMCAwLjdyZW0sIHRyYW5zcGFyZW50IDAuNzJyZW0pO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuMTJyZW0gcmdiYSgyMTQsIDE2MiwgMjksIDAuMjQpLFxuICAgICAgICAgIDAgMC44cmVtIDEuNTVyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdyk7XG4gICAgICAgIGFuaW1hdGlvbjogY2hyaXN0aWFuaXR5LXRhcmdldC1wdWxzZSAxNDUwbXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFjayxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhY2sge1xuICAgICAgICB3aWR0aDogY2xhbXAoNHJlbSwgMTR2dywgNS43cmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuOHJlbSAxLjU1cmVtIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNCk7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAtMTglO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1iYWNrKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYWNrOjpiZWZvcmUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYWNrOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMC41cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2LCA0MiwgNjcsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjM4cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpKTtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMC4xMnJlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYXR0bGUge1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IHZhcigtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aCk7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIG1hcmdpbi1pbmxpbmU6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQgPiBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLW1pbmkgPiBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCA+IHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlID4gc3BhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgYWxpZ24tc2VsZjogc3RhcnQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLW1pbmkgPiBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgPiBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgPiBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLWNhcmQgPiBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSA+IHN0cm9uZyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMztcbiAgICAgICAganVzdGlmeS1zZWxmOiBlbmQ7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgcGFkZGluZzogMC4xNXJlbSAwLjM1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2VkZjJmNztcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLXJhY2sge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg1LjlyZW0sIDdyZW0pIG1pbm1heCg1cmVtLCAxZnIpIG1pbm1heCg0LjJyZW0sIDdyZW0pO1xuICAgICAgICBnYXA6IDAuNDVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBlbmQ7XG4gICAgICAgIGp1c3RpZnktaXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItcmFjay0tb3Bwb25lbnQge1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMC4zNXJlbTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdhcDogMC4yNXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLWhlaWdodDogMS43cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjE4cmVtIDAuNDZyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjhyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyLS1vcHBvbmVudCB7XG4gICAgICAgIHRvcDogMC4xNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyIHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjU4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXIgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjg2cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLWNvbW1hbmQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMzVyZW07XG4gICAgICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZSB7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0O1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjc2KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc0cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZS0tb3Bwb25lbnQge1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlIHN0cm9uZyB7XG4gICAgICAgIG1heC13aWR0aDogNi41cmVtO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hdmF0YXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICB3aWR0aDogMS44NXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjg1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NnJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjM1cmVtIDAuOXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMTYpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy16b25lIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDAuMjVyZW07XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAganVzdGlmeS1zZWxmOiBzdGFydDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBtaW4taGVpZ2h0OiA0LjlyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNDhyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvIGF1dG87XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUge1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gbWlubWF4KDIuNnJlbSwgMWZyKSBhdXRvO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICBnYXA6IDAuMzJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pIHtcbiAgICAgICAgd2lkdGg6IDMuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIHdpZHRoOiBtaW4oMTAwJSwgNS45cmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogNy4xcmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjk1cmVtIDAuNTJyZW0gMC42cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNmZmZmZmYsICNmOGZhZmMpLFxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjUwLCAyMDQsIDIxLCAwLjE4KSwgdHJhbnNwYXJlbnQgNDIlKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIGkge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMi40NXJlbTtcbiAgICAgICAgbGVmdDogMC43MnJlbTtcbiAgICAgICAgei1pbmRleDogLTE7XG4gICAgICAgIHdpZHRoOiAyLjU1cmVtO1xuICAgICAgICBoZWlnaHQ6IDMuNTVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTYsIDQyLCA2NywgMC4xOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKSwgcmdiYSgyNDEsIDI0NSwgMjQ5LCAwLjkyKSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA3OCUgMTglLCAjZmFjYzE1IDAgMC4zOHJlbSwgdHJhbnNwYXJlbnQgMC40cmVtKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjM1cmVtIDAuODVyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjEpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSBpOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAuMjhyZW0sIDAuMDhyZW0pIHJvdGF0ZSgzZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIGk6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMC41NXJlbSwgMC4xOHJlbSkgcm90YXRlKC0xZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCB7XG4gICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiBjbGFtcCg0Ljc1cmVtLCAxN3Z3LCA2cmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJhY2stc3BhY2VyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIHZhcigtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aCkpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgbWlubWF4KDQuM3JlbSwgMWZyKSk7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUge1xuICAgICAgICBtaW4taGVpZ2h0OiA2LjQ1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjdyZW0gMC41MnJlbSAwLjU1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgaXNvbGF0aW9uOiBpc29sYXRlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCA5OTlweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDIuMnJlbTtcbiAgICAgICAgcmlnaHQ6IDAuNzJyZW07XG4gICAgICAgIHotaW5kZXg6IC0xO1xuICAgICAgICB3aWR0aDogMi43cmVtO1xuICAgICAgICBoZWlnaHQ6IDMuN3JlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjE4KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4zNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjM1cmVtIDAuODVyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjExKTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNGRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIGk6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTAuMjhyZW0sIDAuMTJyZW0pIHJvdGF0ZSgtM2RlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIGk6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYmFjayk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0wLjU0cmVtLCAwLjI0cmVtKSByb3RhdGUoMmRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZC1zaGVsbCB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgei1pbmRleDogODA7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC41NXJlbTtcbiAgICAgICAgd2lkdGg6IG1pbigyNnJlbSwgY2FsYygxMDB2dyAtIDEuMjVyZW0pKTtcbiAgICAgICAgcGFkZGluZy10b3A6IDIuMzVyZW07XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoOXJlbSwgMS4yNWZyKSBhdXRvIG1pbm1heCg3cmVtLCAwLjlmcikgYXV0bztcbiAgICAgICAgZ2FwOiAwLjU4cmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWluLWhlaWdodDogbWluKDI5cmVtLCBjYWxjKDEwMHZoIC0gMy41cmVtKSk7XG4gICAgICAgIHBhZGRpbmc6IDAuNzJyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk2KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyMCUgMCUsIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXNvZnQpLCB0cmFuc3BhcmVudCA0NSUpO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIDAgMCAwIDAuMThyZW0gcmdiYSgyNTUsIDI0NCwgMTk0LCAwLjU4KSxcbiAgICAgICAgICAwIDAgMi4ycmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nbG93KSxcbiAgICAgICAgICAwIDIuNHJlbSA1cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4zNCksXG4gICAgICAgICAgaW5zZXQgMCAwIDAgMC4zNXJlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTUpO1xuICAgICAgICB0b3VjaC1hY3Rpb246IG5vbmU7XG4gICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICB0cmFuc2xhdGUodmFyKC0tcHJldmlldy1zaGlmdC14LCAwcHgpLCB2YXIoLS1wcmV2aWV3LXNoaWZ0LXksIDBweCkpXG4gICAgICAgICAgcGVyc3BlY3RpdmUoNDhyZW0pXG4gICAgICAgICAgcm90YXRlWCh2YXIoLS1wcmV2aWV3LXJvdGF0ZS14LCA1ZGVnKSlcbiAgICAgICAgICByb3RhdGVZKHZhcigtLXByZXZpZXctcm90YXRlLXksIC01ZGVnKSk7XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSA5MG1zIGVhc2Utb3V0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1oZWFkZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gbWlubWF4KDAsIDFmcikgYXV0bztcbiAgICAgICAgZ2FwOiAwLjQycmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1oZWFkZXIgc3Ryb25nIHtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXA7XG4gICAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjI1cmVtLCA1dncsIDEuODVyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdHlwZS1pY29uLFxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtY29zdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC10eXBlLWljb24ge1xuICAgICAgICB3aWR0aDogMS42cmVtO1xuICAgICAgICBoZWlnaHQ6IDEuNnJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA1MCUsIHJnYmEoOTUsIDExMSwgNDIsIDAuNzIpIDAgMC4yMnJlbSwgdHJhbnNwYXJlbnQgMC4yNHJlbSksXG4gICAgICAgICAgcmdiYSgzNiwgNDgsIDY4LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1jb3N0IHtcbiAgICAgICAgbWluLXdpZHRoOiAyLjFyZW07XG4gICAgICAgIGhlaWdodDogMi4xcmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuMzZyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmQ5MWE7XG4gICAgICAgIGNvbG9yOiAjMjQzMDQ0O1xuICAgICAgICBmb250LXNpemU6IDEuMXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMC4xMnJlbSAwIHJnYmEoODIsIDY0LCAyOCwgMC4xOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWFydCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLWhlaWdodDogOXJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC40OHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDk1LCAxMTEsIDQyLCAwLjIpLCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4xNikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDI1JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KSwgdHJhbnNwYXJlbnQgNDIlKSxcbiAgICAgICAgICAjZGJlN2VmO1xuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSgzNiwgNDgsIDY4LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtYXJ0IGltZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1hcnQgPiBzcGFuIHtcbiAgICAgICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgICAgIGNvbG9yOiByZ2JhKDM2LCA0OCwgNjgsIDAuNTgpO1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuMXJlbSwgNXZ3LCAxLjhyZW0pO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1hcnQgc21hbGwge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDAuNTVyZW07XG4gICAgICAgIG1pbi13aWR0aDogNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4xNnJlbSAwLjQ4cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweCAwIDAgOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjNyZW0gMC44cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xMik7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzQpO1xuICAgICAgICBmb250LXNpemU6IDAuNjhyZW07XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC12ZXJzZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWVmZmVjdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4zMnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdmVyc2UgcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWVmZmVjdCBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdmVyc2Uge1xuICAgICAgICBjb2xvcjogIzE3MTkyMztcbiAgICAgICAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICdUaW1lcyBOZXcgUm9tYW4nLCBzZXJpZjtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjcycmVtLCAyLjd2dywgMC44NnJlbSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXZlcnNlIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWVmZmVjdCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RhcnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDdyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNnJlbSAwLjdyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNDVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNzIlLCByZ2JhKDM2LCA0OCwgNjgsIDAuMDcpLCB0cmFuc3BhcmVudCAzNCUpLFxuICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXN0YXRzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAxLjM1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1zdGF0cyBzdHJvbmcge1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3QgPiBkaXY6bGFzdC1vZi10eXBlIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjEycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3QgPiBkaXY6bGFzdC1vZi10eXBlIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtZWZmZWN0IHAge1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDAuNzhyZW0sIDIuOXZ3LCAwLjkycmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtcmFyaXR5IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDAuNjJyZW07XG4gICAgICAgIHJpZ2h0OiAwLjYycmVtO1xuICAgICAgICB3aWR0aDogMC40NnJlbTtcbiAgICAgICAgaGVpZ2h0OiAwLjQ2cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjEycmVtO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXJhcml0eS5pcy1ub3JtYWwge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZDFkNWRiO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1yYXJpdHkuaXMtdW5jb21tb24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMjJjNTVlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1yYXJpdHkuaXMtcmFyZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMzYjgyZjY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXJhcml0eS5pcy1sZWdlbmRhcnkge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWFiMzA4O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1mb290ZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvO1xuICAgICAgICBnYXA6IDAuMzRyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjgpO1xuICAgICAgICBmb250LXNpemU6IDAuNThyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1mb290ZXIgc3BhbiB7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZC1jbG9zZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMC4xNXJlbTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgbWluLWhlaWdodDogMnJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjZyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzgpO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuNzZyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC40NXJlbSAxcmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LWJhY2tkcm9wLFxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wLFxuICAgICAgLmNocmlzdGlhbml0eS1pbmZvLWJhY2tkcm9wIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuNDYpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctYmFja2Ryb3Age1xuICAgICAgICB6LWluZGV4OiA3OTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1pbmZvLWJhY2tkcm9wIHtcbiAgICAgICAgei1pbmRleDogNTA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaW5mby1wYW5lbCB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgei1pbmRleDogNTE7XG4gICAgICAgIHdpZHRoOiBtaW4oMzFyZW0sIGNhbGMoMTAwdncgLSAxLjI1cmVtKSk7XG4gICAgICAgIG1heC1oZWlnaHQ6IG1pbigzNHJlbSwgY2FsYygxMDB2aCAtIDJyZW0pKTtcbiAgICAgICAgcGFkZGluZy10b3A6IDIuMzVyZW07XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWluZm8tY2xvc2Uge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDAuMTVyZW07XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBnYXA6IDAuODVyZW07XG4gICAgICAgIG1heC1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICAgIHBhZGRpbmc6IDFyZW07XG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuOXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTcpLCByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuOTcpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDglIDAlLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjEpLCB0cmFuc3BhcmVudCAzOCUpO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIDAgMS4ycmVtIDIuNnJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMjQpLFxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuMjVyZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAyLjFyZW07XG4gICAgICAgIGhlaWdodDogMi4xcmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cykgMTIlLCAjZmZmZmZmKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpIDI0JSwgdHJhbnNwYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzbWFsbCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBoMiB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc21hbGwge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjYyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBoMiB7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuMThyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS41cmVtLCA3dncsIDIuMnJlbSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzdHJvbmcge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjU1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjIycmVtIDAuNTVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuOTJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHAge1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjc1cmVtO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjc4KTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHVsIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICBtYXJnaW46IDAuOHJlbSAwIDA7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMS4wNXJlbTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43OCk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgPiBzbWFsbCxcbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCA+IHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY0KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkID4gc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjU1cmVtLCA4dncsIDIuMzVyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkID4gcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgYWxpZ24tc2VsZjogZW5kO1xuICAgICAgICBmb250LXNpemU6IDAuOTVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtYWN0aW9ucyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDAgMC4zNXJlbTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtYWN0aW9ucyBidXR0b24ge1xuICAgICAgICBtaW4taGVpZ2h0OiAyLjM1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDFyZW07XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICMxMDJhNDM7XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjY1cmVtIDEuM3JlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMTgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtYWN0aW9ucyBidXR0b246ZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICBvcGFjaXR5OiAwLjQ1O1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogNTJyZW0pIHtcbiAgICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLXNoZWxsIHtcbiAgICAgICAgICB3aWR0aDogbWluKDI5cmVtLCBjYWxjKDEwMHZ3IC0gM3JlbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiBtaW4oMzVyZW0sIGNhbGMoMTAwdmggLSA0cmVtKSk7XG4gICAgICAgICAgcGFkZGluZzogMS4zNXJlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktYmFja2Ryb3Age1xuICAgICAgICB6LWluZGV4OiA0MDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICAgIGJvdHRvbTogbWF4KDAuNXJlbSwgZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pKTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB6LWluZGV4OiA0MTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICAgIHdpZHRoOiBtaW4oY2FsYygxMDB2dyAtIDFyZW0pLCA0NHJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IG1pbigxOHJlbSwgY2FsYygxMDBkdmggLSAxcmVtKSk7XG4gICAgICAgIG1heC1oZWlnaHQ6IG1pbigzMnJlbSwgY2FsYygxMDBkdmggLSAycmVtKSk7XG4gICAgICAgIHBhZGRpbmc6IDAuOHJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxLjVyZW0gNHJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMjgpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgaGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgaDIsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgaGVhZGVyIHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDEuODVyZW07XG4gICAgICAgIGhlaWdodDogMS44NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlZGYyZjc7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZGlhbG9nLWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuNDVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZGlhbG9nLWNsb3NlIHtcbiAgICAgICAgbWluLWhlaWdodDogMS44NXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjYycmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43OCk7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NnJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjM1cmVtIDAuOHJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMDgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDUuNHJlbSwgMWZyKSk7XG4gICAgICAgIGdhcDogMC41NXJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICBzY3JvbGxiYXItY29sb3I6IHJnYmEoMzYsIDQ4LCA2OCwgMC4zMikgcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xuICAgICAgICBwYWRkaW5nOiAwLjFyZW0gMC4xcmVtIDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhcixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICB3aWR0aDogMC42NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNzIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgICAgYm9yZGVyOiAwLjE0cmVtIHNvbGlkIHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43Mik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM2LCA0OCwgNjgsIDAuMzIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1kcmF3ZXIge1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgd2lkdGg6IG1pbihjYWxjKDEwMHZ3IC0gMXJlbSksIDQ4cmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogbWluKDIwcmVtLCBjYWxjKDEwMGR2aCAtIDFyZW0pKTtcbiAgICAgICAgbWF4LWhlaWdodDogbWluKDM0cmVtLCBjYWxjKDEwMGR2aCAtIDJyZW0pKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgZ2FwOiAwLjY1cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICAgIHBhZGRpbmc6IDAuNzJyZW0gMC44cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjdyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk2KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4JSAwJSwgcmdiYSgyMTQsIDE2MiwgMjksIDAuMTIpLCB0cmFuc3BhcmVudCA0MiUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzYpO1xuICAgICAgICBmb250LXNpemU6IDAuODZyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Qge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNnJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICBzY3JvbGxiYXItY29sb3I6IHJnYmEoMzYsIDQ4LCA2OCwgMC4zMikgcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xuICAgICAgICBwYWRkaW5nOiAwLjFyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNS40cmVtLCA2LjVyZW0pIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDAuNDVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93LmlzLWV4aGF1c3RlZCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNjg7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG87XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XG4gICAgICAgIGdhcDogMC4yNnJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDcuN3JlbTtcbiAgICAgICAgcGFkZGluZzogMC41OHJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpLCByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuOTYpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDc4JSAxNCUsIHJnYmEoMjUwLCAyMDQsIDIxLCAwLjc4KSAwIDAuNDJyZW0sIHRyYW5zcGFyZW50IDAuNDRyZW0pO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNDVyZW0gMXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBzbWFsbCB7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42MnJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgc3Ryb25nIHtcbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuMXJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44OHJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDU7XG4gICAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHNwYW4ge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAwLjQycmVtO1xuICAgICAgICBib3R0b206IDAuNDJyZW07XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogMS41NXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjU1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuMjhyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBlbSB7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxLjlyZW0pO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjYyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjY0cmVtO1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdyBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgcCB7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42NCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43MnJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgPiBkaXYge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMzVyZW07XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdyA+IGRpdiBwIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgPiBkaXYgYnV0dG9uIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBzdGFydDtcbiAgICAgICAgbWluLWhlaWdodDogMi4ycmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuN3JlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTAyYTQzO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgPiBkaXYgYnV0dG9uOmRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2UyZThmMDtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41OCk7XG4gICAgICB9XG5cbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvdXRsaW5lOiAwLjE4NzVyZW0gc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cykgMjQlLCB0cmFuc3BhcmVudCk7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwLjEyNXJlbTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDcyMHB4KSB7XG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2hlbGwge1xuICAgICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMDtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHtcbiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1zdHJpcCB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICAgIGdhcDogMC4zNXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjM1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIge1xuICAgICAgICAgIGdhcDogMC4zNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHNtYWxsIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHtcbiAgICAgICAgICBtaW4td2lkdGg6IDMuNjVyZW07XG4gICAgICAgICAgcGFkZGluZzogMCAwLjM1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHN0cm9uZyB7XG4gICAgICAgICAgZm9udC1zaXplOiAxLjA1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS10YWJsZSB7XG4gICAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItc2lkZSB7XG4gICAgICAgICAgcGFkZGluZzogMC4zcmVtIDAuMjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lIHtcbiAgICAgICAgICAtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aDogbWluKDUuMnJlbSwgY2FsYygoMTAwdncgLSA0LjI1cmVtKSAvIDQpKTtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpKTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA4Ljc1cmVtO1xuICAgICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAxMS40NXJlbTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMnJlbTtcbiAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1zaGVsZiB7XG4gICAgICAgICAgbWluLWhlaWdodDogMTIuNjVyZW07XG4gICAgICAgICAgbWFyZ2luLXRvcDogLTFyZW07XG4gICAgICAgICAgcGFkZGluZy10b3A6IDEuMzVyZW07XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDAuOXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1zaGVsZi0tb3Bwb25lbnQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDYuNjVyZW07XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAwLjRyZW07XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDAuODVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg0LjVyZW0sIDUuN3JlbSkgbWlubWF4KDQuNHJlbSwgMWZyKSBtaW5tYXgoMy41cmVtLCA0LjhyZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSB7XG4gICAgICAgICAgbWluLWhlaWdodDogNi4xNXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjU4cmVtIDAuNDZyZW0gMC41cmVtO1xuICAgICAgICAgIGdhcDogMC4yNHJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIGkge1xuICAgICAgICAgIHRvcDogMnJlbTtcbiAgICAgICAgICByaWdodDogMC41MnJlbTtcbiAgICAgICAgICB3aWR0aDogMi4zNXJlbTtcbiAgICAgICAgICBoZWlnaHQ6IDMuMjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDYuODVyZW07XG4gICAgICAgICAgcGFkZGluZzogMC44OHJlbSAwLjQ2cmVtIDAuNTVyZW07XG4gICAgICAgICAgZ2FwOiAwLjI0cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIGkge1xuICAgICAgICAgIHRvcDogMi4yNXJlbTtcbiAgICAgICAgICBsZWZ0OiAwLjU2cmVtO1xuICAgICAgICAgIHdpZHRoOiAyLjM1cmVtO1xuICAgICAgICAgIGhlaWdodDogMy4yNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQge1xuICAgICAgICAgIHdpZHRoOiBjbGFtcCg0LjJyZW0sIDIwdncsIDUuN3JlbSk7XG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIHtcbiAgICAgICAgICB3aWR0aDogY2xhbXAoNC41NXJlbSwgMjB2dywgNS43cmVtKTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDVyZW0sIDUuOHJlbSkgbWlubWF4KDAsIDFmcik7XG4gICAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDcuMjVyZW07XG4gICAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbi0tb3Bwb25lbnQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDUuNzVyZW07XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDAuN3JlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFjayB7XG4gICAgICAgICAgd2lkdGg6IGNsYW1wKDMuMzVyZW0sIDE1dncsIDQuMjVyZW0pO1xuICAgICAgICAgIG1hcmdpbi1pbmxpbmU6IC0wLjcycmVtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hyaXN0aWFuaXR5R2FtZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdhbWUgPSBzaWduYWw8Q2hyaXN0aWFuaXR5R2FtZVN0YXRlPihzdHJ1Y3R1cmVkQ2xvbmUoU1RBUlRJTkdfR0FNRSkpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRIYW5kQ2FyZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkQXR0YWNrZXIgPSBzaWduYWw8Q2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUHJldmlldyA9IHNpZ25hbDxDaHJpc3RpYW5pdHlDYXJkUHJldmlldyB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRJbmZvID0gc2lnbmFsPENocmlzdGlhbml0eUluZm9QYW5lbCB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJldmlld1RpbHQgPSBzaWduYWw8Q2hyaXN0aWFuaXR5UHJldmlld1RpbHQ+KHsgcm90YXRlWDogNSwgcm90YXRlWTogLTUsIHNoaWZ0WDogMCwgc2hpZnRZOiAwIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaG92ZXJlZEhhbmRJbmRleCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyYWdnaW5nQ2FyZElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd0hpc3RvcnkgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb2ZmZXJpbmdzU2VhdCA9IHNpZ25hbDxDaHJpc3RpYW5pdHlTZWF0IHwgbnVsbD4obnVsbCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkRyb3BPbkJhdHRsZVNsb3QgPSAoZHJhZzogQ2RrRHJhZzxzdHJpbmc+KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oZHJhZy5kYXRhKTtcbiAgICByZXR1cm4gY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJyAmJiB0aGlzLmNhblBsYXkoY2FyZCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkRyb3BPbk9mZmVyaW5ncyA9IChkcmFnOiBDZGtEcmFnPHN0cmluZz4pOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihkcmFnLmRhdGEpO1xuICAgIHJldHVybiBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgJiYgdGhpcy5jYW5QbGF5KGNhcmQpO1xuICB9O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwbGF5ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzLlAxKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wcG9uZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkucGxheWVycy5QMik7XG4gIHByb3RlY3RlZCByZWFkb25seSBjdXJyZW50UGxheWVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkucGxheWVyc1t0aGlzLmdhbWUoKS50dXJuT3duZXJdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzT3duVHVybiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnR1cm5Pd25lciA9PT0gJ1AxJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBoYXNPcHBvbmVudEd1YXJkcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3Bwb25lbnQoKS5iYXR0bGVab25lLmxlbmd0aCA+IDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3Bwb25lbnRIYW5kQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wcG9uZW50KCkuaGFuZENvdW50ID8/IHRoaXMub3Bwb25lbnQoKS5oYW5kPy5sZW5ndGggPz8gMCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZENhcmREZWZpbml0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEhhbmRDYXJkKCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkID8gdGhpcy5jYXJkRGVmaW5pdGlvbihzZWxlY3RlZCkgOiBudWxsO1xuICB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUHJldmlld0NhcmQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY2FyZElkID0gdGhpcy5zZWxlY3RlZFByZXZpZXcoKT8uY2FyZElkO1xuICAgIHJldHVybiBjYXJkSWQgPyB0aGlzLmNhcmREZWZpbml0aW9uKGNhcmRJZCkgOiBudWxsO1xuICB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0YXR1c1RleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYXR0YWNrZXIgPSB0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKTtcbiAgICBjb25zdCBoYW5kQ2FyZCA9IHRoaXMuc2VsZWN0ZWRDYXJkRGVmaW5pdGlvbigpO1xuICAgIGlmICghdGhpcy5pc093blR1cm4oKSkge1xuICAgICAgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5V2FpdFR1cm4nKTtcbiAgICB9XG4gICAgaWYgKGF0dGFja2VyKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHBvbmVudEd1YXJkcygpID8gdGhpcy50KCdjaHJpc3RpYW5pdHlDaG9vc2VDaGFyYWN0ZXJUYXJnZXQnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hvb3NlVGFyZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChoYW5kQ2FyZCkge1xuICAgICAgaWYgKCF0aGlzLmNhblBsYXkoaGFuZENhcmQpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eU5lZWRPZmZlcmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYW5kQ2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlQbGFjZU9mZmVyaW5nJykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNob29zZVNsb3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hvb3NlQ2FyZCcpO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnTWluaUdhbWVzJywgTUlOSV9HQU1FU19JMThOKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdNaW5pR2FtZXMnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkRGVmaW5pdGlvbihjYXJkSWQ6IHN0cmluZyk6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uIHtcbiAgICByZXR1cm4gU1RBUlRFUl9DQVJEU1tjYXJkSWRdID8/IFNUQVJURVJfQ0FSRFNbJ3Bfc2NvdXQnXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkVHlwZUxhYmVsKGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQ2FyZCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJhdHRsZVNsb3RzKHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiBBcnJheTx7IHRyYWNrSWQ6IHN0cmluZzsgY2FyZD86IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlIH0+IHtcbiAgICBjb25zdCBjYXJkcyA9IHRoaXMuZ2FtZSgpLnBsYXllcnNbc2VhdF0uYmF0dGxlWm9uZTtcbiAgICBjb25zdCBwb3NpdGlvbmVkQ2FyZHMgPSBuZXcgTWFwPG51bWJlciwgQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2U+KCk7XG4gICAgY2FyZHMuZm9yRWFjaCgoY2FyZCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNsb3QgPSBOdW1iZXIuaXNJbnRlZ2VyKGNhcmQuc2xvdCkgPyBjYXJkLnNsb3QgPz8gaW5kZXggOiBpbmRleDtcbiAgICAgIGlmIChzbG90ID49IDAgJiYgc2xvdCA8IDQgJiYgIXBvc2l0aW9uZWRDYXJkcy5oYXMoc2xvdCkpIHtcbiAgICAgICAgcG9zaXRpb25lZENhcmRzLnNldChzbG90LCBjYXJkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNCB9LCAoXywgaW5kZXgpID0+ICh7XG4gICAgICB0cmFja0lkOiBwb3NpdGlvbmVkQ2FyZHMuZ2V0KGluZGV4KT8uaW5zdGFuY2VJZCA/PyBgJHtzZWF0fS1lbXB0eS0ke2luZGV4fWAsXG4gICAgICBjYXJkOiBwb3NpdGlvbmVkQ2FyZHMuZ2V0KGluZGV4KSxcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYmF0dGxlU2xvdERyb3BJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGNocmlzdGlhbml0eS1iYXR0bGUtc2xvdC0ke2luZGV4fWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZHJvcFRhcmdldElkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1kcm9wJywgLi4udGhpcy5iYXR0bGVTbG90cygnUDEnKS5tYXAoKF8sIGluZGV4KSA9PiB0aGlzLmJhdHRsZVNsb3REcm9wSWQoaW5kZXgpKV07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGlkZGVuSGFuZENhcmRzKGNvdW50OiBudW1iZXIpOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmYW5UcmFuc2Zvcm0oaW5kZXg6IG51bWJlciwgdG90YWw6IG51bWJlciwgb3Bwb25lbnQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGlmICh0b3RhbCA8PSAxKSByZXR1cm4gJ25vbmUnO1xuICAgIGNvbnN0IGNlbnRlciA9ICh0b3RhbCAtIDEpIC8gMjtcbiAgICBjb25zdCBvZmZzZXQgPSBpbmRleCAtIGNlbnRlcjtcbiAgICBjb25zdCByb3RhdGUgPSBvZmZzZXQgKiAob3Bwb25lbnQgPyA2IDogNSk7XG4gICAgY29uc3QgbGlmdCA9IE1hdGguYWJzKG9mZnNldCkgKiAwLjI1O1xuICAgIGNvbnN0IGhvdmVyTGlmdCA9IG9wcG9uZW50ID8gMCA6IHRoaXMuaGFuZFdhdmVMaWZ0KGluZGV4KTtcbiAgICBjb25zdCBzY2FsZSA9IG9wcG9uZW50ID8gMSA6IHRoaXMuaGFuZFdhdmVTY2FsZShpbmRleCk7XG4gICAgY29uc3QgZmFuTGlmdCA9IG9wcG9uZW50ID8gTWF0aC5hYnMob2Zmc2V0KSAqIDAuMjIgOiBsaWZ0ICsgaG92ZXJMaWZ0O1xuICAgIGNvbnN0IGZhblNwcmVhZCA9IG9wcG9uZW50ID8gb2Zmc2V0ICogMC4wMiA6IDA7XG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtmYW5TcHJlYWR9cmVtLCAke2ZhbkxpZnR9cmVtKSByb3RhdGUoJHtyb3RhdGV9ZGVnKSBzY2FsZSgke3NjYWxlfSlgO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRDYXJkWkluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGhvdmVyZWQgPSB0aGlzLmhvdmVyZWRIYW5kSW5kZXgoKTtcbiAgICBpZiAoaG92ZXJlZCA9PT0gbnVsbCkgcmV0dXJuIDI7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmFicyhpbmRleCAtIGhvdmVyZWQpO1xuICAgIHJldHVybiBNYXRoLm1heCgyLCA4IC0gZGlzdGFuY2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEhvdmVyZWRIYW5kSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaG92ZXJlZEhhbmRJbmRleC5zZXQoaW5kZXgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFySG92ZXJlZEhhbmRJbmRleCgpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyZWRIYW5kSW5kZXguc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbGVhc2VIb3ZlcmVkSGFuZChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnBvaW50ZXJUeXBlICE9PSAnbW91c2UnKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsZWFySG92ZXJlZEhhbmRJbmRleCgpLCAxODApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZFdhdmVMaWZ0KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGhvdmVyZWQgPSB0aGlzLmhvdmVyZWRIYW5kSW5kZXgoKTtcbiAgICBpZiAoaG92ZXJlZCA9PT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmFicyhpbmRleCAtIGhvdmVyZWQpO1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkgcmV0dXJuIC0xLjE1O1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMSkgcmV0dXJuIC0wLjU4O1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMikgcmV0dXJuIC0wLjIyO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kV2F2ZVNjYWxlKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGhvdmVyZWQgPSB0aGlzLmhvdmVyZWRIYW5kSW5kZXgoKTtcbiAgICBpZiAoaG92ZXJlZCA9PT0gbnVsbCkgcmV0dXJuIDE7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmFicyhpbmRleCAtIGhvdmVyZWQpO1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkgcmV0dXJuIDEuMDY7XG4gICAgaWYgKGRpc3RhbmNlID09PSAxKSByZXR1cm4gMS4wMztcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkeU9mZmVyaW5ncyhwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGxheWVyLm9mZmVyaW5ncy5yZWR1Y2UoKHRvdGFsLCBvZmZlcmluZykgPT4gdG90YWwgKyAob2ZmZXJpbmcucmVhZHkgPyBvZmZlcmluZy52YWx1ZSA6IDApLCAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b3RhbE9mZmVyaW5ncyhwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGxheWVyLm9mZmVyaW5ncy5yZWR1Y2UoKHRvdGFsLCBvZmZlcmluZykgPT4gdG90YWwgKyBvZmZlcmluZy52YWx1ZSwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuUGxheShjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc093blR1cm4oKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHJldHVybiAhdGhpcy5wbGF5ZXIoKS5vZmZlcmluZ1BsYXllZFRoaXNUdXJuO1xuICAgIHJldHVybiB0aGlzLnJlYWR5T2ZmZXJpbmdzKHRoaXMucGxheWVyKCkpID49IGNhcmQuY29zdCAmJiB0aGlzLnBsYXllcigpLmJhdHRsZVpvbmUubGVuZ3RoIDwgNDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGF5U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZCAmJiB0aGlzLmNhblBsYXkodGhpcy5jYXJkRGVmaW5pdGlvbihzZWxlY3RlZCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkQWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDYXJkRGVmaW5pdGlvbigpO1xuICAgIGlmICghc2VsZWN0ZWQpIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYXlDYXJkJyk7XG4gICAgcmV0dXJuIHNlbGVjdGVkLnR5cGUgPT09ICdvZmZlcmluZycgPyB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYXlPZmZlcmluZycpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlQbGF5Q2FyZCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkQWN0aW9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ2FyZERlZmluaXRpb24oKTtcbiAgICBpZiAoIXNlbGVjdGVkIHx8ICF0aGlzLmNhblBsYXkoc2VsZWN0ZWQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gc2VsZWN0ZWQudHlwZSA9PT0gJ2NoYXJhY3Rlcic7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJldmlld0FjdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLnNlbGVjdGVkUHJldmlldygpO1xuICAgIGlmIChwcmV2aWV3Py5zb3VyY2UgIT09ICdoYW5kJyB8fCAhcHJldmlldy5jYXJkSWQpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAhdGhpcy5jYW5QbGF5KHRoaXMuY2FyZERlZmluaXRpb24ocHJldmlldy5jYXJkSWQpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGFjZVNlbGVjdGVkQ2hhcmFjdGVyKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENhcmREZWZpbml0aW9uKCk7XG4gICAgcmV0dXJuICEhc2VsZWN0ZWQgJiYgc2VsZWN0ZWQudHlwZSA9PT0gJ2NoYXJhY3RlcicgJiYgdGhpcy5jYW5QbGF5KHNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGFjZVNlbGVjdGVkT2ZmZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ2FyZERlZmluaXRpb24oKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZCAmJiBzZWxlY3RlZC50eXBlID09PSAnb2ZmZXJpbmcnICYmIHRoaXMuY2FuUGxheShzZWxlY3RlZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNEcmFnZ2luZ0NoYXJhY3RlcigpOiBib29sZWFuIHtcbiAgICBjb25zdCBjYXJkSWQgPSB0aGlzLmRyYWdnaW5nQ2FyZElkKCk7XG4gICAgaWYgKCFjYXJkSWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgIHJldHVybiBjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInICYmIHRoaXMuY2FuUGxheShjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0RyYWdnaW5nT2ZmZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2FyZElkID0gdGhpcy5kcmFnZ2luZ0NhcmRJZCgpO1xuICAgIGlmICghY2FyZElkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICByZXR1cm4gY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnICYmIHRoaXMuY2FuUGxheShjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydERyYWdnaW5nQ2FyZChjYXJkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChjYXJkSWQpO1xuICAgIHRoaXMuZHJhZ2dpbmdDYXJkSWQuc2V0KGNhcmRJZCk7XG4gICAgdGhpcy5jbG9zZVByZXZpZXcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmREcmFnZ2luZ0NhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2luZ0NhcmRJZC5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZHJvcE9uQmF0dGxlU2xvdChldmVudDogQ2RrRHJhZ0Ryb3A8bnVtYmVyLCB1bmtub3duLCBzdHJpbmc+LCBzbG90SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGV2ZW50Lml0ZW0uZGF0YSk7XG4gICAgaWYgKGNhcmQudHlwZSAhPT0gJ2NoYXJhY3RlcicpIHJldHVybjtcbiAgICB0aGlzLnBsYXlDYXJkRnJvbUhhbmQoZXZlbnQuaXRlbS5kYXRhLCBzbG90SW5kZXgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRyb3BPbk9mZmVyaW5ncyhldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93biwgdW5rbm93biwgc3RyaW5nPik6IHZvaWQge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGV2ZW50Lml0ZW0uZGF0YSk7XG4gICAgaWYgKGNhcmQudHlwZSAhPT0gJ29mZmVyaW5nJykgcmV0dXJuO1xuICAgIHRoaXMucGxheUNhcmRGcm9tSGFuZChldmVudC5pdGVtLmRhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEhhbmRDYXJkKGNhcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKSA9PT0gY2FyZElkO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldCh3YXNTZWxlY3RlZCA/IG51bGwgOiBjYXJkSWQpO1xuICAgIHRoaXMuY2xvc2VQcmV2aWV3KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGxheVNlbGVjdGVkQ2FyZChzbG90SW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjYXJkSWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKTtcbiAgICBpZiAoIWNhcmRJZCkgcmV0dXJuO1xuICAgIHRoaXMucGxheUNhcmRGcm9tSGFuZChjYXJkSWQsIHNsb3RJbmRleCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGxheUNhcmRGcm9tSGFuZChjYXJkSWQ6IHN0cmluZywgc2xvdEluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICBpZiAoIXRoaXMuY2FuUGxheShjYXJkKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBwbGF5ZXIgPSBuZXh0LnBsYXllcnMuUDE7XG4gICAgICBjb25zdCBoYW5kSW5kZXggPSBwbGF5ZXIuaGFuZD8uaW5kZXhPZihjYXJkSWQpID8/IC0xO1xuICAgICAgaWYgKGhhbmRJbmRleCA8IDAgfHwgIXBsYXllci5oYW5kKSByZXR1cm4gZ2FtZTtcbiAgICAgIHBsYXllci5oYW5kLnNwbGljZShoYW5kSW5kZXgsIDEpO1xuICAgICAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgICAgICBwbGF5ZXIub2ZmZXJpbmdzLnB1c2goe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGBwMV9vZmZlcmluZ18ke25leHQucmV2aXNpb24gKyAxfWAsXG4gICAgICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgICAgIG5hbWU6IGNhcmQubmFtZSxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogY2FyZC5saWZlLFxuICAgICAgICAgIGFiaWxpdHlOYW1lOiBjYXJkLmFiaWxpdHlOYW1lLFxuICAgICAgICAgIGFiaWxpdHlUZXh0OiBjYXJkLmFiaWxpdHlUZXh0LFxuICAgICAgICAgIGFiaWxpdHlDb3N0OiBjYXJkLmFiaWxpdHlDb3N0LFxuICAgICAgICB9KTtcbiAgICAgICAgcGxheWVyLm9mZmVyaW5nUGxheWVkVGhpc1R1cm4gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zcGVuZE9mZmVyaW5ncyhwbGF5ZXIsIGNhcmQuY29zdCk7XG4gICAgICAgIGNvbnN0IG9jY3VwaWVkU2xvdHMgPSBuZXcgU2V0KHBsYXllci5iYXR0bGVab25lLm1hcCgoY2hhcmFjdGVyLCBpbmRleCkgPT4gTnVtYmVyLmlzSW50ZWdlcihjaGFyYWN0ZXIuc2xvdCkgPyBjaGFyYWN0ZXIuc2xvdCA/PyBpbmRleCA6IGluZGV4KSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFNsb3QgPSBzbG90SW5kZXggPz8gWzAsIDEsIDIsIDNdLmZpbmQoaW5kZXggPT4gIW9jY3VwaWVkU2xvdHMuaGFzKGluZGV4KSk7XG4gICAgICAgIGlmICh0YXJnZXRTbG90ID09PSB1bmRlZmluZWQgfHwgb2NjdXBpZWRTbG90cy5oYXModGFyZ2V0U2xvdCkpIHJldHVybiBnYW1lO1xuICAgICAgICBwbGF5ZXIuYmF0dGxlWm9uZS5wdXNoKHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiBgcDFfJHtuZXh0LnJldmlzaW9uICsgMX1fJHtwbGF5ZXIuYmF0dGxlWm9uZS5sZW5ndGh9YCxcbiAgICAgICAgICBjYXJkSWQ6IGNhcmQuaWQsXG4gICAgICAgICAgbmFtZTogY2FyZC5uYW1lLFxuICAgICAgICAgIG93bmVyOiAnUDEnLFxuICAgICAgICAgIGNvbnRyb2xsZXI6ICdQMScsXG4gICAgICAgICAgc2xvdDogdGFyZ2V0U2xvdCxcbiAgICAgICAgICBhdHRhY2s6IGNhcmQuYXR0YWNrLFxuICAgICAgICAgIGN1cnJlbnRIcDogY2FyZC5saWZlLFxuICAgICAgICAgIG1heEhwOiBjYXJkLmxpZmUsXG4gICAgICAgICAgY2FuQXR0YWNrOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHBsYXllci5iYXR0bGVab25lLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiAobGVmdC5zbG90ID8/IDApIC0gKHJpZ2h0LnNsb3QgPz8gMCkpO1xuICAgICAgfVxuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbXG4gICAgICAgIGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyA/IGAke2NhcmQubmFtZX0gcXVlZGEgbGlzdGEgY29tbyBvZnJlbmRhLmAgOiBgJHtjYXJkLm5hbWV9IGVudHJhIGVuIGJhdGFsbGEuYCxcbiAgICAgICAgLi4ubmV4dC5sb2csXG4gICAgICBdLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgICB0aGlzLmRyYWdnaW5nQ2FyZElkLnNldChudWxsKTtcbiAgICB0aGlzLmNsb3NlUHJldmlldygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBsYXlQcmV2aWV3Q2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5zZWxlY3RlZFByZXZpZXcoKTtcbiAgICBpZiAocHJldmlldz8uc291cmNlICE9PSAnaGFuZCcgfHwgIXByZXZpZXcuY2FyZElkKSByZXR1cm47XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24ocHJldmlldy5jYXJkSWQpO1xuICAgIGlmICghdGhpcy5jYW5QbGF5KGNhcmQpKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChwcmV2aWV3LmNhcmRJZCk7XG4gICAgaWYgKGNhcmQudHlwZSA9PT0gJ2NoYXJhY3RlcicpIHtcbiAgICAgIHRoaXMuY2xvc2VQcmV2aWV3KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGxheVNlbGVjdGVkQ2FyZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZU9mZmVyaW5nUGlsZShzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogdm9pZCB7XG4gICAgdGhpcy5vcGVuT2ZmZXJpbmdzKHNlYXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEF0dGFja2VyKGNhcmQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgICB0aGlzLmluc3BlY3RDaGFyYWN0ZXIoY2FyZCk7XG4gICAgaWYgKCF0aGlzLmlzT3duVHVybigpIHx8ICFjYXJkLmNhbkF0dGFjaykgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQodGhpcy5zZWxlY3RlZEF0dGFja2VyKCk/Lmluc3RhbmNlSWQgPT09IGNhcmQuaW5zdGFuY2VJZCA/IG51bGwgOiBjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVPcHBvbmVudENoYXJhY3RlcihjYXJkOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIHRoaXMuaW5zcGVjdENoYXJhY3RlcihjYXJkKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEF0dGFja2VyKCkpIHtcbiAgICAgIHRoaXMuYXR0YWNrQ2hhcmFjdGVyKGNhcmQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVPcHBvbmVudExlYWRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmluc3BlY3RMZWFkZXIoJ1AyJyk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpICYmICF0aGlzLmhhc09wcG9uZW50R3VhcmRzKCkpIHtcbiAgICAgIHRoaXMuYXR0YWNrTGVhZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGF0dGFja0xlYWRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGlmICghYXR0YWNrZXIpIHJldHVybjtcbiAgICBpZiAodGhpcy5oYXNPcHBvbmVudEd1YXJkcygpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgICB0aXRsZTogdGhpcy5vcHBvbmVudCgpLmxlYWRlck5hbWUsXG4gICAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgICBtZXRhOiBgJHt0aGlzLm9wcG9uZW50KCkubGVhZGVySHB9LyR7dGhpcy5vcHBvbmVudCgpLmxlYWRlck1heEhwfWAsXG4gICAgICAgIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyUHJvdGVjdGVkJyksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBsaXZlQXR0YWNrZXIgPSBuZXh0LnBsYXllcnMuUDEuYmF0dGxlWm9uZS5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSBhdHRhY2tlci5pbnN0YW5jZUlkKTtcbiAgICAgIGlmICghbGl2ZUF0dGFja2VyIHx8ICFsaXZlQXR0YWNrZXIuY2FuQXR0YWNrKSByZXR1cm4gZ2FtZTtcbiAgICAgIG5leHQucGxheWVycy5QMi5sZWFkZXJIcCA9IE1hdGgubWF4KDAsIG5leHQucGxheWVycy5QMi5sZWFkZXJIcCAtIGxpdmVBdHRhY2tlci5hdHRhY2spO1xuICAgICAgbGl2ZUF0dGFja2VyLmNhbkF0dGFjayA9IGZhbHNlO1xuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbYCR7bGl2ZUF0dGFja2VyLm5hbWV9IGF0YWNhIGFsIGxpZGVyIHJpdmFsLmAsIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXR0YWNrQ2hhcmFjdGVyKHRhcmdldDogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGlmICghYXR0YWNrZXIpIHJldHVybjtcbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIGNvbnN0IGxpdmVBdHRhY2tlciA9IG5leHQucGxheWVycy5QMS5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VyLmluc3RhbmNlSWQpO1xuICAgICAgY29uc3QgbGl2ZVRhcmdldCA9IG5leHQucGxheWVycy5QMi5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IHRhcmdldC5pbnN0YW5jZUlkKTtcbiAgICAgIGlmICghbGl2ZUF0dGFja2VyIHx8ICFsaXZlVGFyZ2V0IHx8ICFsaXZlQXR0YWNrZXIuY2FuQXR0YWNrKSByZXR1cm4gZ2FtZTtcbiAgICAgIGxpdmVUYXJnZXQuY3VycmVudEhwIC09IGxpdmVBdHRhY2tlci5hdHRhY2s7XG4gICAgICBsaXZlQXR0YWNrZXIuY3VycmVudEhwIC09IGxpdmVUYXJnZXQuYXR0YWNrO1xuICAgICAgbGl2ZUF0dGFja2VyLmNhbkF0dGFjayA9IGZhbHNlO1xuICAgICAgdGhpcy5jbGVhbnVwRGVzdHJveWVkKG5leHQucGxheWVycy5QMSwgbmV4dCk7XG4gICAgICB0aGlzLmNsZWFudXBEZXN0cm95ZWQobmV4dC5wbGF5ZXJzLlAyLCBuZXh0KTtcbiAgICAgIG5leHQucmV2aXNpb24rKztcbiAgICAgIG5leHQubG9nID0gW2Ake2xpdmVBdHRhY2tlci5uYW1lfSBjb21iYXRlIGNvbnRyYSAke2xpdmVUYXJnZXQubmFtZX0uYCwgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmRUdXJuKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgbmV4dC50dXJuT3duZXIgPSBuZXh0LnR1cm5Pd25lciA9PT0gJ1AxJyA/ICdQMicgOiAnUDEnO1xuICAgICAgbmV4dC50dXJuQ291bnQrKztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBuZXh0LnBsYXllcnNbbmV4dC50dXJuT3duZXJdO1xuICAgICAgY3VycmVudC5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gZmFsc2U7XG4gICAgICBjdXJyZW50Lm9mZmVyaW5ncyA9IGN1cnJlbnQub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiAoeyAuLi5vZmZlcmluZywgcmVhZHk6IHRydWUgfSkpO1xuICAgICAgY3VycmVudC5iYXR0bGVab25lID0gY3VycmVudC5iYXR0bGVab25lLm1hcChjYXJkID0+ICh7IC4uLmNhcmQsIGNhbkF0dGFjazogdHJ1ZSB9KSk7XG4gICAgICBjb25zdCBkcmF3bkNhcmQgPSBuZXh0LnNoYXJlZERlY2suc2hpZnQoKTtcbiAgICAgIGlmIChkcmF3bkNhcmQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQuaGFuZCkge1xuICAgICAgICAgIGN1cnJlbnQuaGFuZC5wdXNoKGRyYXduQ2FyZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudC5oYW5kQ291bnQgPSAoY3VycmVudC5oYW5kQ291bnQgPz8gMCkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtcbiAgICAgICAgZHJhd25DYXJkID8gYCR7Y3VycmVudC5kaXNwbGF5TmFtZX0gcm9iYSB1bmEgY2FydGEuYCA6IGBFbCBtYXpvIGVzdGEgdmFjaW8uYCxcbiAgICAgICAgYFR1cm5vIGRlICR7Y3VycmVudC5kaXNwbGF5TmFtZX0uYCxcbiAgICAgICAgLi4ubmV4dC5sb2csXG4gICAgICBdLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRNb2NrKCk6IHZvaWQge1xuICAgIHRoaXMuZ2FtZS5zZXQoc3RydWN0dXJlZENsb25lKFNUQVJUSU5HX0dBTUUpKTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLnNob3dIaXN0b3J5LnNldChmYWxzZSk7XG4gICAgdGhpcy5vZmZlcmluZ3NTZWF0LnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZVByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMucmVzZXRQcmV2aWV3VGlsdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlSW5mbygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3Blbk9mZmVyaW5ncyhzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLnNob3dIaXN0b3J5LnNldChmYWxzZSk7XG4gICAgdGhpcy5vZmZlcmluZ3NTZWF0LnNldChzZWF0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvcGVuSGlzdG9yeSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMub2ZmZXJpbmdzU2VhdC5zZXQobnVsbCk7XG4gICAgdGhpcy5zaG93SGlzdG9yeS5zZXQodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VPZmZlcmluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5vZmZlcmluZ3NTZWF0LnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0aWx0UHJldmlldyhldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYm91bmRzID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHggPSAoZXZlbnQuY2xpZW50WCAtIGJvdW5kcy5sZWZ0KSAvIGJvdW5kcy53aWR0aCAtIDAuNTtcbiAgICBjb25zdCB5ID0gKGV2ZW50LmNsaWVudFkgLSBib3VuZHMudG9wKSAvIGJvdW5kcy5oZWlnaHQgLSAwLjU7XG4gICAgdGhpcy5wcmV2aWV3VGlsdC5zZXQoe1xuICAgICAgcm90YXRlWDogNSAtIHkgKiAxOCxcbiAgICAgIHJvdGF0ZVk6IC01ICsgeCAqIDE4LFxuICAgICAgc2hpZnRYOiB4ICogMTAsXG4gICAgICBzaGlmdFk6IHkgKiAxMCxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFByZXZpZXdUaWx0KCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1RpbHQuc2V0KHsgcm90YXRlWDogNSwgcm90YXRlWTogLTUsIHNoaWZ0WDogMCwgc2hpZnRZOiAwIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwRGVzdHJveWVkKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlc3Ryb3llZCA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwIDw9IDApO1xuICAgIGlmICghZGVzdHJveWVkLmxlbmd0aCkgcmV0dXJuO1xuICAgIGdhbWUuaGlzdG9yeVpvbmUucHVzaCguLi5kZXN0cm95ZWQubWFwKGNhcmQgPT4gY2FyZC5jYXJkSWQpKTtcbiAgICBwbGF5ZXIuYmF0dGxlWm9uZSA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwID4gMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdExlYWRlcihzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuZ2FtZSgpLnBsYXllcnNbc2VhdF07XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgIHRpdGxlOiBwbGF5ZXIubGVhZGVyTmFtZSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgbWV0YTogYCR7cGxheWVyLmxlYWRlckhwfS8ke3BsYXllci5sZWFkZXJNYXhIcH1gLFxuICAgICAgYm9keTogc2VhdCA9PT0gJ1AyJyAmJiB0aGlzLmhhc09wcG9uZW50R3VhcmRzKCkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlclByb3RlY3RlZCcpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJCb2R5JyksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdE9mZmVyaW5nKG9mZmVyaW5nOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldCh7XG4gICAgICB0aXRsZTogb2ZmZXJpbmcubmFtZSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJyksXG4gICAgICBtZXRhOiBvZmZlcmluZy5yZWFkeSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdSZWFkeScpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0V4aGF1c3RlZCcpLFxuICAgICAgYm9keTogb2ZmZXJpbmcuYWJpbGl0eVRleHQgfHwgdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0JvZHknKSxcbiAgICAgIGNhcmRJZDogb2ZmZXJpbmcuY2FyZElkLFxuICAgICAgc291cmNlOiAncGlsZScsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuVXNlT2ZmZXJpbmdBYmlsaXR5KG9mZmVyaW5nOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlLCBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogYm9vbGVhbiB7XG4gICAgaWYgKHNlYXQgIT09ICdQMScgfHwgIXRoaXMuaXNPd25UdXJuKCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIW9mZmVyaW5nLnJlYWR5IHx8ICFvZmZlcmluZy5hYmlsaXR5TmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnJlYWR5T2ZmZXJpbmdzKHRoaXMuZ2FtZSgpLnBsYXllcnNbc2VhdF0pID49IChvZmZlcmluZy5hYmlsaXR5Q29zdCA/PyAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1c2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmc6IENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UsIHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlT2ZmZXJpbmdBYmlsaXR5KG9mZmVyaW5nLCBzZWF0KSkgcmV0dXJuO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgcGxheWVyID0gbmV4dC5wbGF5ZXJzW3NlYXRdO1xuICAgICAgY29uc3QgbGl2ZU9mZmVyaW5nID0gcGxheWVyLm9mZmVyaW5ncy5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSBvZmZlcmluZy5pbnN0YW5jZUlkKTtcbiAgICAgIGlmICghbGl2ZU9mZmVyaW5nIHx8ICFsaXZlT2ZmZXJpbmcucmVhZHkpIHJldHVybiBnYW1lO1xuICAgICAgY29uc3Qgb2ZmZXJpbmdJZCA9IGxpdmVPZmZlcmluZy5pbnN0YW5jZUlkO1xuICAgICAgdGhpcy5zcGVuZE9mZmVyaW5ncyhwbGF5ZXIsIGxpdmVPZmZlcmluZy5hYmlsaXR5Q29zdCA/PyAwKTtcbiAgICAgIHBsYXllci5vZmZlcmluZ3MgPSBwbGF5ZXIub2ZmZXJpbmdzLm1hcChjYXJkID0+IChjYXJkLmluc3RhbmNlSWQgPT09IG9mZmVyaW5nSWQgPyB7IC4uLmNhcmQsIHJlYWR5OiBmYWxzZSB9IDogY2FyZCkpO1xuICAgICAgcGxheWVyLmxlYWRlckhwID0gTWF0aC5tYXgoMCwgcGxheWVyLmxlYWRlckhwIC0gMSk7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgJHtsaXZlT2ZmZXJpbmcubmFtZX06ICR7bGl2ZU9mZmVyaW5nLmFiaWxpdHlOYW1lfS5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0RGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCByZW1haW5pbmdDYXJkcyA9IHRoaXMuZ2FtZSgpLnNoYXJlZERlY2subGVuZ3RoO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQoe1xuICAgICAgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5RGVjaycpLFxuICAgICAgZXllYnJvdzogdGhpcy50KCdjaHJpc3RpYW5pdHlTaGFyZWRab25lJyksXG4gICAgICBtZXRhOiBgJHtyZW1haW5pbmdDYXJkc30gJHtyZW1haW5pbmdDYXJkcyA9PT0gMSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2FyZFJlbWFpbmluZycpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDYXJkc1JlbWFpbmluZycpfWAsXG4gICAgICBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eURlY2tCb2R5JyksXG4gICAgICBmYWN0czogW1xuICAgICAgICB0aGlzLnQoJ2NocmlzdGlhbml0eURlY2tSdWxlU2hhcmVkJyksXG4gICAgICAgIHRoaXMudCgnY2hyaXN0aWFuaXR5RGVja1J1bGVEcmF3JyksXG4gICAgICAgIHRoaXMudCgnY2hyaXN0aWFuaXR5RGVja1J1bGVFbXB0eScpLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0SGFuZENhcmQoY2FyZElkOiBzdHJpbmcsIGZyb21IYW5kID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQobnVsbCk7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICBpZiAoZnJvbUhhbmQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KGNhcmRJZCk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldCh7XG4gICAgICB0aXRsZTogY2FyZC5uYW1lLFxuICAgICAgZXllYnJvdzogY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQ2FyZCcpLFxuICAgICAgbWV0YTogY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gYCske2NhcmQubGlmZX1gIDogYCR7dGhpcy50KCdjaHJpc3RpYW5pdHlDb3N0Jyl9ICR7Y2FyZC5jb3N0fSDCtyAke2NhcmQuYXR0YWNrfS8ke2NhcmQubGlmZX1gLFxuICAgICAgYm9keTogY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0JvZHknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQm9keScpLFxuICAgICAgY2FyZElkLFxuICAgICAgc291cmNlOiBmcm9tSGFuZCA/ICdoYW5kJyA6ICdwaWxlJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0SGlzdG9yeUNhcmQoY2FyZElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dIaXN0b3J5LnNldChmYWxzZSk7XG4gICAgdGhpcy5pbnNwZWN0SGFuZENhcmQoY2FyZElkKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zcGVjdENoYXJhY3RlcihjYXJkOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgdGl0bGU6IGNhcmQubmFtZSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQ2FyZCcpLFxuICAgICAgbWV0YTogYCR7Y2FyZC5hdHRhY2t9LyR7Y2FyZC5jdXJyZW50SHB9YCxcbiAgICAgIGJvZHk6IGNhcmQuY2FuQXR0YWNrID8gdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJSZWFkeScpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJFeGhhdXN0ZWQnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3BlbmRPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSwgY29zdDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IHJlbWFpbmluZyA9IGNvc3Q7XG4gICAgcGxheWVyLm9mZmVyaW5ncyA9IHBsYXllci5vZmZlcmluZ3MubWFwKG9mZmVyaW5nID0+IHtcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCAhb2ZmZXJpbmcucmVhZHkpIHJldHVybiBvZmZlcmluZztcbiAgICAgIHJlbWFpbmluZyAtPSBvZmZlcmluZy52YWx1ZTtcbiAgICAgIHJldHVybiB7IC4uLm9mZmVyaW5nLCByZWFkeTogZmFsc2UgfTtcbiAgICB9KTtcbiAgfVxufVxuIl19