valtech-components 4.0.477 → 4.0.478

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +18 -9
  2. package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +109 -16
  3. package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +18 -9
  4. package/esm2022/lib/components/organisms/mini-games/christianity-card.component.mjs +268 -0
  5. package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +2253 -0
  6. package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +18 -9
  7. package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +275 -9
  8. package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +18 -9
  9. package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
  10. package/esm2022/lib/directives/light-ripple.directive.mjs +57 -0
  11. package/esm2022/lib/version.mjs +2 -2
  12. package/esm2022/mini-games/public-api.mjs +34 -2
  13. package/esm2022/public-api.mjs +3 -1
  14. package/fesm2022/valtech-components-mini-games.mjs +34 -2
  15. package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
  16. package/fesm2022/valtech-components.mjs +3021 -58
  17. package/fesm2022/valtech-components.mjs.map +1 -1
  18. package/lib/components/organisms/mini-games/bubble-blitz-game.component.d.ts +2 -0
  19. package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +3 -1
  20. package/lib/components/organisms/mini-games/christianity-card.component.d.ts +46 -0
  21. package/lib/components/organisms/mini-games/christianity-game.component.d.ts +177 -0
  22. package/lib/components/organisms/mini-games/memory-game.component.d.ts +2 -0
  23. package/lib/components/organisms/mini-games/simon-game.component.d.ts +2 -0
  24. package/lib/components/organisms/mini-games/types.d.ts +131 -1
  25. package/lib/directives/light-ripple.directive.d.ts +8 -0
  26. package/lib/version.d.ts +1 -1
  27. package/mini-games/public-api.d.ts +4 -0
  28. package/package.json +2 -1
  29. package/public-api.d.ts +2 -0
  30. package/src/lib/assets/games/christianity/card-symbol.svg +51 -0
  31. package/src/lib/assets/games/christianity/card-template-reference/front.html +114 -0
  32. package/src/lib/assets/games/christianity/card-template-reference/front.style.css +352 -0
  33. package/src/lib/assets/games/christianity/data/01-genesis.bible-reference-suggestions.csv +191 -0
  34. package/src/lib/assets/games/christianity/data/01-genesis.bible-verses.nbv-open.csv +170 -0
  35. package/src/lib/assets/games/christianity/data/01-genesis.cards.csv +281 -0
  36. package/src/lib/assets/games/christianity/data/01-genesis.cards.i18n.csv +281 -0
  37. package/src/lib/assets/games/christianity/data/01-genesis.cards.json +16453 -0
  38. package/src/lib/assets/games/christianity/data/01-genesis.unassigned-effects.csv +49 -0
  39. package/src/lib/assets/games/christianity/data/README.md +40 -0
  40. package/src/lib/assets/games/christianity/data/data-con-habilides.csv +273 -0
  41. package/src/lib/assets/games/christianity/data/habilidades-por-tipo.xlsx +0 -0
  42. package/src/lib/assets/games/christianity/data/listado-edicion.csv +281 -0
  43. package/src/lib/assets/games/christianity/editions/1/cards/.gitkeep +1 -0
  44. package/src/lib/assets/games/christianity/editions/1/cards/PLACEHOLDER.png +0 -0
  45. package/src/lib/assets/games/christianity/editions/README.md +34 -0
  46. package/src/lib/assets/games/christianity/icons/1-icon.png +0 -0
  47. package/src/lib/assets/games/christianity/icons/action.png +0 -0
  48. package/src/lib/assets/games/christianity/icons/character.png +0 -0
  49. package/src/lib/assets/games/christianity/icons/event.png +0 -0
  50. package/src/lib/assets/games/christianity/icons/leader.png +0 -0
  51. package/src/lib/assets/games/christianity/icons/offering.png +0 -0
  52. package/src/lib/assets/games/christianity/icons/place.png +0 -0
  53. package/src/lib/assets/games/christianity/icons/tool.png +0 -0
  54. package/src/lib/assets/games/christianity/icons/wisdom.png +0 -0
  55. package/src/lib/assets/games/christianity/sources/README.md +16 -0
  56. package/src/lib/assets/games/christianity/sources/spaonbv_vpl.txt +29102 -0
  57. package/src/lib/assets/games/christianity/sources/spaonbv_vpl.xml +29104 -0
  58. package/src/lib/assets/games/christianity/spaonbv.txt +52 -0
@@ -0,0 +1,2253 @@
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 { ChristianityCardComponent } from './christianity-card.component';
6
+ import { MINI_GAMES_I18N } from './mini-games.i18n';
7
+ import * as i0 from "@angular/core";
8
+ const GENESIS_CATALOG_URL = 'assets/games/christianity/data/01-genesis.cards.json';
9
+ const GENESIS_ICON_URL = 'assets/games/christianity/icons/1-icon.png';
10
+ const TUTORIAL_CHARACTER_LIMIT = 12;
11
+ const TUTORIAL_OFFERING_LIMIT = 6;
12
+ const SPLASH_MIN_DURATION_MS = 720;
13
+ const STARTER_CARDS = {
14
+ o_simple: {
15
+ id: 'o_simple',
16
+ name: 'Ofrenda simple',
17
+ type: 'offering',
18
+ cost: 0,
19
+ attack: 0,
20
+ life: 1,
21
+ verseText: 'Una ofrenda sencilla queda lista para sostener tus siguientes jugadas.',
22
+ scripture: 'Genesis 4:4',
23
+ edition: 'GEN',
24
+ collectorNumber: '001/020',
25
+ year: '2026',
26
+ author: 'MVP',
27
+ rarity: 'normal',
28
+ },
29
+ o_forbidden: {
30
+ id: 'o_forbidden',
31
+ name: 'El fruto prohibido',
32
+ type: 'offering',
33
+ cost: 0,
34
+ attack: 0,
35
+ life: 2,
36
+ abilityName: 'Conocimiento del bien y del mal',
37
+ abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Líder.',
38
+ abilityCost: 0,
39
+ verseText: 'Dios el Señor puso al hombre en el jardín de Edén para que lo labrara y lo cuidara.',
40
+ scripture: 'Genesis 2:17 NBV',
41
+ edition: 'GEN',
42
+ collectorNumber: '012/180',
43
+ year: '2026',
44
+ author: 'MVP',
45
+ rarity: 'uncommon',
46
+ },
47
+ p_scout: {
48
+ id: 'p_scout',
49
+ name: 'Scout',
50
+ type: 'character',
51
+ cost: 1,
52
+ attack: 1,
53
+ life: 1,
54
+ verseText: 'Un explorador humilde abre camino antes de que llegue la batalla.',
55
+ scripture: 'Genesis 13:17',
56
+ edition: 'GEN',
57
+ collectorNumber: '002/020',
58
+ year: '2026',
59
+ author: 'MVP',
60
+ rarity: 'normal',
61
+ },
62
+ 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' },
63
+ 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' },
64
+ 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' },
65
+ 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' },
66
+ };
67
+ const STARTING_SHARED_DECK = [
68
+ 'o_simple',
69
+ 'p_scout',
70
+ 'o_forbidden',
71
+ 'o_simple',
72
+ 'p_guard',
73
+ 'p_warrior',
74
+ 'o_simple',
75
+ 'p_elder',
76
+ 'p_scout',
77
+ 'o_simple',
78
+ 'p_champion',
79
+ 'p_guard',
80
+ 'o_simple',
81
+ 'p_warrior',
82
+ 'p_scout',
83
+ 'o_simple',
84
+ 'p_elder',
85
+ 'p_guard',
86
+ 'o_simple',
87
+ ];
88
+ const STARTING_GAME = {
89
+ gameId: 'mock-christianity',
90
+ status: 'in_progress',
91
+ mode: 'local_pass',
92
+ turnOwner: 'P1',
93
+ revision: 0,
94
+ turnCount: 1,
95
+ matchScore: { P1: 1, P2: 0 },
96
+ sharedDeck: STARTING_SHARED_DECK,
97
+ historyZone: [],
98
+ players: {
99
+ P1: {
100
+ seat: 'P1',
101
+ displayName: 'Jugador',
102
+ avatar: 'J',
103
+ avatarColor: '#2563eb',
104
+ leaderName: 'Adam',
105
+ leaderHp: 15,
106
+ leaderMaxHp: 15,
107
+ offerings: [
108
+ { instanceId: 'p1_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P1', ready: true, value: 1 },
109
+ {
110
+ instanceId: 'p1_offering_002',
111
+ cardId: 'o_forbidden',
112
+ name: 'El fruto prohibido',
113
+ owner: 'P1',
114
+ ready: true,
115
+ value: 2,
116
+ abilityName: 'Conocimiento del bien y del mal',
117
+ abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Lider.',
118
+ abilityCost: 0,
119
+ },
120
+ ],
121
+ offeringPlayedThisTurn: false,
122
+ hand: ['o_simple', 'p_scout', 'p_warrior', 'p_guard'],
123
+ battleZone: [],
124
+ },
125
+ P2: {
126
+ seat: 'P2',
127
+ displayName: 'Rival',
128
+ avatar: 'R',
129
+ avatarColor: '#b45309',
130
+ leaderName: 'Noah',
131
+ leaderHp: 15,
132
+ leaderMaxHp: 15,
133
+ offerings: [{ instanceId: 'p2_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P2', ready: true, value: 1 }],
134
+ offeringPlayedThisTurn: false,
135
+ handCount: 4,
136
+ battleZone: [
137
+ {
138
+ instanceId: 'opp_001',
139
+ cardId: 'p_scout',
140
+ name: 'Scout',
141
+ owner: 'P2',
142
+ controller: 'P2',
143
+ slot: 0,
144
+ attack: 1,
145
+ currentHp: 1,
146
+ maxHp: 1,
147
+ canAttack: false,
148
+ },
149
+ ],
150
+ },
151
+ },
152
+ log: ['Partida iniciada.'],
153
+ };
154
+ export class ChristianityGameComponent {
155
+ constructor() {
156
+ this.i18n = inject(I18nService);
157
+ this.bootStartedAt = performance.now();
158
+ this.game = signal(structuredClone(STARTING_GAME));
159
+ this.screen = signal('splash');
160
+ this.catalogLoadState = signal('loading');
161
+ this.selectedHandCard = signal(null);
162
+ this.selectedAttacker = signal(null);
163
+ this.selectedPreview = signal(null);
164
+ this.selectedInfo = signal(null);
165
+ this.previewTilt = signal({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
166
+ this.hoveredHandIndex = signal(null);
167
+ this.draggingCardId = signal(null);
168
+ this.showHistory = signal(false);
169
+ this.showGallery = signal(false);
170
+ this.offeringsSeat = signal(null);
171
+ this.cardCatalog = signal(STARTER_CARDS);
172
+ this.allCatalogCards = signal(Object.values(STARTER_CARDS));
173
+ this.catalogLoaded = signal(false);
174
+ this.gallerySearch = signal('');
175
+ this.galleryType = signal('all');
176
+ this.canDropOnBattleSlot = (drag) => {
177
+ const card = this.cardDefinition(drag.data);
178
+ return card.type === 'character' && this.canPlay(card);
179
+ };
180
+ this.canDropOnOfferings = (drag) => {
181
+ const card = this.cardDefinition(drag.data);
182
+ return card.type === 'offering' && this.canPlay(card);
183
+ };
184
+ this.player = computed(() => this.game().players.P1);
185
+ this.opponent = computed(() => this.game().players.P2);
186
+ this.currentPlayer = computed(() => this.game().players[this.game().turnOwner]);
187
+ this.isOwnTurn = computed(() => this.game().turnOwner === 'P1');
188
+ this.hasOpponentGuards = computed(() => this.opponent().battleZone.length > 0);
189
+ this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
190
+ this.galleryCards = computed(() => {
191
+ const query = this.gallerySearch().trim().toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
192
+ const type = this.galleryType();
193
+ return this.allCatalogCards()
194
+ .filter(card => type === 'all' || card.type === type)
195
+ .filter(card => {
196
+ if (!query)
197
+ return true;
198
+ const text = this.translatedCardText(card);
199
+ const haystack = [text.name, card.type, text.scripture, text.abilityName, text.abilityText, text.verseText]
200
+ .filter(Boolean)
201
+ .join(' ')
202
+ .toLowerCase()
203
+ .normalize('NFD')
204
+ .replace(/[\u0300-\u036f]/g, '');
205
+ return haystack.includes(query);
206
+ })
207
+ .sort((left, right) => this.cardSortKey(left).localeCompare(this.cardSortKey(right), 'es'));
208
+ });
209
+ this.galleryEditionLabel = computed(() => {
210
+ const count = this.allCatalogCards().length;
211
+ return `${this.t('christianityGenesisEdition')} · ${count} ${this.t('christianityCards')}`;
212
+ });
213
+ this.galleryEditionIcon = computed(() => GENESIS_ICON_URL);
214
+ this.galleryTypeOptions = computed(() => [
215
+ { value: 'all', label: this.t('christianityAllCards') },
216
+ { value: 'leader', label: this.t('christianityLeaderCard') },
217
+ { value: 'offering', label: this.t('christianityOfferingCard') },
218
+ { value: 'character', label: this.t('christianityCharacterCard') },
219
+ { value: 'wisdom', label: this.t('christianityWisdomCard') },
220
+ { value: 'action', label: this.t('christianityActionCard') },
221
+ { value: 'tool', label: this.t('christianityToolCard') },
222
+ { value: 'place', label: this.t('christianityPlaceCard') },
223
+ { value: 'event', label: this.t('christianityEventCard') },
224
+ ]);
225
+ this.splashStatusText = computed(() => {
226
+ const state = this.catalogLoadState();
227
+ if (state === 'ready')
228
+ return this.t('christianitySplashReady');
229
+ if (state === 'fallback')
230
+ return this.t('christianitySplashFallback');
231
+ return this.t('christianitySplashLoading');
232
+ });
233
+ this.startFeaturedCards = computed(() => {
234
+ const cards = this.allCatalogCards();
235
+ const preferred = ['GEN-009', 'GEN-013', 'GEN-032']
236
+ .map(id => this.cardCatalog()[id])
237
+ .filter((card) => !!card);
238
+ return (preferred.length ? preferred : cards.slice(0, 3)).slice(0, 3);
239
+ });
240
+ this.futureModes = computed(() => [
241
+ { title: this.t('christianitySoloBotMode'), body: this.t('christianitySoloBotModeBody') },
242
+ { title: this.t('christianityTwoPlayerMode'), body: this.t('christianityTwoPlayerModeBody') },
243
+ { title: this.t('christianityOneDeviceMode'), body: this.t('christianityOneDeviceModeBody') },
244
+ { title: this.t('christianitySpectatorMode'), body: this.t('christianitySpectatorModeBody') },
245
+ ]);
246
+ this.selectedCardDefinition = computed(() => {
247
+ const selected = this.selectedHandCard();
248
+ return selected ? this.cardDefinition(selected) : null;
249
+ });
250
+ this.selectedPreviewCard = computed(() => {
251
+ const cardId = this.selectedPreview()?.cardId;
252
+ return cardId ? this.cardDefinition(cardId) : null;
253
+ });
254
+ this.selectedPreviewRenderCard = computed(() => {
255
+ const preview = this.selectedPreview();
256
+ if (!preview)
257
+ return null;
258
+ const card = this.selectedPreviewCard();
259
+ if (card) {
260
+ return this.definitionToRenderCard(card, {
261
+ statusText: preview.body,
262
+ });
263
+ }
264
+ if (preview.eyebrow === this.t('christianityLeaderCard')) {
265
+ const [currentHp, maxHp] = preview.meta.split('/').map(value => Number(value));
266
+ return {
267
+ id: `leader-${preview.title.toLowerCase()}`,
268
+ name: preview.title,
269
+ type: 'leader',
270
+ typeLabel: this.t('christianityLeaderCard'),
271
+ currentHp: Number.isFinite(currentHp) ? currentHp : undefined,
272
+ maxHp: Number.isFinite(maxHp) ? maxHp : undefined,
273
+ life: Number.isFinite(currentHp) ? currentHp : undefined,
274
+ abilityName: this.t('christianityLeaderCard'),
275
+ abilityText: preview.body,
276
+ verseText: preview.body,
277
+ edition: 'MVP',
278
+ collectorNumber: 'LIDER',
279
+ year: '2026',
280
+ author: 'MVP',
281
+ rarity: 'legendary',
282
+ };
283
+ }
284
+ return {
285
+ id: `preview-${preview.title.toLowerCase()}`,
286
+ name: preview.title,
287
+ type: this.previewRenderType(preview.eyebrow),
288
+ typeLabel: preview.eyebrow,
289
+ abilityName: preview.eyebrow,
290
+ abilityText: preview.body,
291
+ verseText: preview.body,
292
+ edition: 'MVP',
293
+ collectorNumber: preview.eyebrow,
294
+ year: '2026',
295
+ author: 'MVP',
296
+ rarity: 'normal',
297
+ statusText: preview.meta,
298
+ };
299
+ });
300
+ this.previewRule = computed(() => {
301
+ const preview = this.selectedPreview();
302
+ if (!preview)
303
+ return null;
304
+ const card = this.selectedPreviewCard();
305
+ if (card?.type === 'offering') {
306
+ return { title: this.t('christianityOfferingCard'), body: this.t('christianityOfferingRuleBody') };
307
+ }
308
+ if (card?.type === 'character') {
309
+ return { title: this.t('christianityCharacterCard'), body: this.t('christianityCharacterRuleBody') };
310
+ }
311
+ if (card?.type === 'wisdom') {
312
+ return { title: this.t('christianityWisdomCard'), body: this.t('christianityWisdomRuleBody') };
313
+ }
314
+ if (card?.type === 'action') {
315
+ return { title: this.t('christianityActionCard'), body: this.t('christianityActionRuleBody') };
316
+ }
317
+ if (card?.type === 'tool') {
318
+ return { title: this.t('christianityToolCard'), body: this.t('christianityToolRuleBody') };
319
+ }
320
+ if (card?.type === 'place') {
321
+ return { title: this.t('christianityPlaceCard'), body: this.t('christianityPlaceRuleBody') };
322
+ }
323
+ if (card?.type === 'event') {
324
+ return { title: this.t('christianityEventCard'), body: this.t('christianityEventRuleBody') };
325
+ }
326
+ if (card?.type === 'leader') {
327
+ return { title: this.t('christianityLeaderCard'), body: this.t('christianityLeaderRuleBody') };
328
+ }
329
+ if (preview.eyebrow === this.t('christianityLeaderCard')) {
330
+ return { title: this.t('christianityLeaderCard'), body: this.t('christianityLeaderRuleBody') };
331
+ }
332
+ return null;
333
+ });
334
+ this.statusText = computed(() => {
335
+ const attacker = this.selectedAttacker();
336
+ const handCard = this.selectedCardDefinition();
337
+ if (!this.isOwnTurn()) {
338
+ return this.t('christianityWaitTurn');
339
+ }
340
+ if (attacker) {
341
+ return this.hasOpponentGuards() ? this.t('christianityChooseCharacterTarget') : this.t('christianityChooseTarget');
342
+ }
343
+ if (handCard) {
344
+ if (!this.canPlay(handCard)) {
345
+ return this.t('christianityNeedOfferings');
346
+ }
347
+ return handCard.type === 'offering' ? this.t('christianityPlaceOffering') : this.t('christianityChooseSlot');
348
+ }
349
+ return this.t('christianityChooseCard');
350
+ });
351
+ this.i18n.registerDefaults('MiniGames', MINI_GAMES_I18N);
352
+ void this.loadGenesisCatalog();
353
+ }
354
+ t(key) {
355
+ this.i18n.lang();
356
+ return this.i18n.t(key, 'MiniGames');
357
+ }
358
+ async loadGenesisCatalog() {
359
+ let loaded = false;
360
+ try {
361
+ const response = await fetch(GENESIS_CATALOG_URL);
362
+ if (response.ok) {
363
+ const catalog = await response.json();
364
+ const cards = (catalog.cards ?? []).map(card => this.normalizeCatalogCard(card, catalog));
365
+ if (cards.length) {
366
+ this.cardCatalog.set(Object.fromEntries(cards.map(card => [card.id, card])));
367
+ this.allCatalogCards.set(cards);
368
+ this.catalogLoaded.set(true);
369
+ this.game.set(this.createTutorialGame(cards));
370
+ loaded = true;
371
+ }
372
+ }
373
+ }
374
+ catch (error) {
375
+ console.warn('Christianity catalog could not be loaded. Falling back to starter cards.', error);
376
+ }
377
+ this.catalogLoadState.set(loaded ? 'ready' : 'fallback');
378
+ this.finishSplash();
379
+ }
380
+ finishSplash() {
381
+ const elapsed = performance.now() - this.bootStartedAt;
382
+ const remaining = Math.max(0, SPLASH_MIN_DURATION_MS - elapsed);
383
+ window.setTimeout(() => {
384
+ if (this.screen() === 'splash') {
385
+ this.screen.set('home');
386
+ }
387
+ }, remaining);
388
+ }
389
+ normalizeCatalogCard(card, catalog) {
390
+ const editionIcon = card.editionIcon ?? catalog.edition?.icon ?? GENESIS_ICON_URL;
391
+ const verseText = card.verseText ?? card.bible?.text;
392
+ const scripture = card.scripture ?? this.formatScripture(card.bible);
393
+ const offeringValue = card.type === 'offering' ? card.offeringValue ?? card.life ?? card.cost ?? 1 : card.offeringValue;
394
+ const life = card.type === 'leader'
395
+ ? card.leaderLife ?? card.life ?? 10
396
+ : card.type === 'offering'
397
+ ? offeringValue
398
+ : card.life ?? 0;
399
+ return {
400
+ ...card,
401
+ cost: card.type === 'offering' ? 0 : card.cost ?? 0,
402
+ offeringValue,
403
+ life,
404
+ leaderLife: card.type === 'leader' ? card.leaderLife ?? life : card.leaderLife,
405
+ attack: card.type === 'character' ? card.attack ?? 0 : card.attack,
406
+ abilityName: card.abilityName ?? card.abilities?.[0]?.name,
407
+ abilityText: card.abilityText ?? card.abilities?.[0]?.text,
408
+ verseText,
409
+ scripture,
410
+ edition: card.edition ?? catalog.edition?.id ?? 'GEN',
411
+ editionNumber: card.editionNumber ?? catalog.edition?.number,
412
+ editionIcon,
413
+ imageUrl: card.imageUrl ?? card.art?.imageUrl,
414
+ author: card.author ?? card.art?.artistCredit,
415
+ year: card.year ?? '2026',
416
+ frontTemplate: card.frontTemplate ?? 'genesis-classic',
417
+ };
418
+ }
419
+ formatScripture(bible) {
420
+ if (!bible?.book || !bible.reference)
421
+ return undefined;
422
+ return `${bible.book} ${bible.reference}${bible.version ? ` ${bible.version}` : ''}`;
423
+ }
424
+ createTutorialGame(cards) {
425
+ const leaders = cards.filter(card => card.type === 'leader');
426
+ const playerLeader = this.findCard(leaders, 'Adán') ?? leaders[0];
427
+ const opponentLeader = this.findCard(leaders, 'Noé') ?? leaders[1] ?? leaders[0];
428
+ const offerings = cards.filter(card => card.type === 'offering').slice(0, TUTORIAL_OFFERING_LIMIT);
429
+ const characters = cards
430
+ .filter(card => card.type === 'character' && (card.cost ?? 0) <= 4 && (card.attack ?? 0) >= 0 && (card.life ?? 0) > 0)
431
+ .slice(0, TUTORIAL_CHARACTER_LIMIT);
432
+ const startingOffering = offerings[0] ?? STARTER_CARDS['o_simple'];
433
+ const tutorialDeck = [
434
+ ...offerings.slice(1),
435
+ ...characters,
436
+ ...offerings.slice(0, 1),
437
+ ].slice(0, 20);
438
+ const playerHand = tutorialDeck.slice(0, 4).map(card => card.id);
439
+ const opponentBattleCard = characters[0];
440
+ const sharedDeck = tutorialDeck.slice(4).map(card => card.id);
441
+ return {
442
+ ...structuredClone(STARTING_GAME),
443
+ sharedDeck,
444
+ historyZone: [],
445
+ players: {
446
+ P1: this.createTutorialPlayer('P1', playerLeader, startingOffering, playerHand, []),
447
+ P2: this.createTutorialPlayer('P2', opponentLeader, startingOffering, undefined, opponentBattleCard ? [this.createCharacterInstance(opponentBattleCard, 'P2', 0, 'opp_001')] : []),
448
+ },
449
+ log: [this.t('christianityTutorialLoaded')],
450
+ };
451
+ }
452
+ createTutorialPlayer(seat, leader, startingOffering, hand, battleZone) {
453
+ const base = STARTING_GAME.players[seat];
454
+ const leaderLife = leader?.leaderLife ?? leader?.life ?? base.leaderMaxHp;
455
+ return {
456
+ ...structuredClone(base),
457
+ leaderCardId: leader?.id,
458
+ leaderName: leader ? this.translatedCardText(leader).name : base.leaderName,
459
+ leaderHp: leaderLife,
460
+ leaderMaxHp: leaderLife,
461
+ offerings: [this.createOfferingInstance(startingOffering, seat, `${seat.toLowerCase()}_offering_001`)],
462
+ offeringPlayedThisTurn: false,
463
+ hand,
464
+ handCount: hand ? undefined : 4,
465
+ battleZone,
466
+ };
467
+ }
468
+ createOfferingInstance(card, seat, instanceId) {
469
+ const value = card.offeringValue ?? card.life ?? 1;
470
+ return {
471
+ instanceId,
472
+ cardId: card.id,
473
+ name: this.translatedCardText(card).name,
474
+ owner: seat,
475
+ ready: true,
476
+ value,
477
+ abilityName: card.abilityName,
478
+ abilityText: card.abilityText,
479
+ abilityCost: card.abilityCost,
480
+ };
481
+ }
482
+ createCharacterInstance(card, seat, slot, instanceId) {
483
+ const life = card.life ?? 1;
484
+ return {
485
+ instanceId,
486
+ cardId: card.id,
487
+ name: this.translatedCardText(card).name,
488
+ owner: seat,
489
+ controller: seat,
490
+ slot,
491
+ attack: card.attack ?? 0,
492
+ currentHp: life,
493
+ maxHp: life,
494
+ canAttack: false,
495
+ };
496
+ }
497
+ findCard(cards, namePart) {
498
+ return cards.find(card => this.translatedCardText(card).name.toLowerCase().includes(namePart.toLowerCase()));
499
+ }
500
+ cardSortKey(card) {
501
+ const collector = card.collectorNumber ?? card.id;
502
+ return `${card.edition ?? ''}-${collector.padStart(8, '0')}-${this.translatedCardText(card).name}`;
503
+ }
504
+ cardDefinition(cardId) {
505
+ return this.cardCatalog()[cardId] ?? STARTER_CARDS[cardId] ?? STARTER_CARDS['p_scout'];
506
+ }
507
+ translatedCardText(card) {
508
+ const lang = this.i18n.lang();
509
+ const translation = card.i18n?.[lang] ?? card.i18n?.['es'];
510
+ const primaryAbility = translation?.abilities?.[0] ?? card.abilities?.[0];
511
+ return {
512
+ name: translation?.name ?? card.name,
513
+ fullName: translation?.fullName ?? card.fullName,
514
+ verseText: translation?.verseText ?? card.verseText,
515
+ scripture: translation?.scripture ?? card.scripture,
516
+ abilityName: translation?.abilityName ?? primaryAbility?.name ?? card.abilityName,
517
+ abilityText: translation?.abilityText ?? primaryAbility?.text ?? card.abilityText,
518
+ abilities: translation?.abilities ?? card.abilities,
519
+ };
520
+ }
521
+ cardDisplayName(cardId) {
522
+ return this.translatedCardText(this.cardDefinition(cardId)).name;
523
+ }
524
+ playerLeaderDisplayName(player) {
525
+ return player.leaderCardId ? this.cardDisplayName(player.leaderCardId) : player.leaderName;
526
+ }
527
+ catalogStatusLabel() {
528
+ const state = this.catalogLoadState();
529
+ if (state === 'ready')
530
+ return this.t('christianityCatalogReady');
531
+ if (state === 'fallback')
532
+ return this.t('christianityCatalogFallback');
533
+ return this.t('christianityCatalogLoading');
534
+ }
535
+ startFeaturedCardTransform(index) {
536
+ const transforms = [
537
+ 'translateX(-1.4rem) rotate(-9deg)',
538
+ 'translateY(-0.55rem) rotate(2deg)',
539
+ 'translateX(1.4rem) rotate(10deg)',
540
+ ];
541
+ return transforms[index] ?? 'none';
542
+ }
543
+ cardTypeLabel(card) {
544
+ const labels = {
545
+ action: this.t('christianityActionCard'),
546
+ character: this.t('christianityCharacterCard'),
547
+ event: this.t('christianityEventCard'),
548
+ leader: this.t('christianityLeaderCard'),
549
+ offering: this.t('christianityOfferingCard'),
550
+ place: this.t('christianityPlaceCard'),
551
+ tool: this.t('christianityToolCard'),
552
+ wisdom: this.t('christianityWisdomCard'),
553
+ };
554
+ return labels[card.type];
555
+ }
556
+ definitionToRenderCard(card, overrides = {}) {
557
+ const text = this.translatedCardText(card);
558
+ const base = {
559
+ id: card.id,
560
+ name: text.name,
561
+ type: card.type,
562
+ typeLabel: this.cardTypeLabel(card),
563
+ cost: card.cost,
564
+ offeringValue: card.type === 'offering' ? card.offeringValue ?? card.life : undefined,
565
+ attack: card.type === 'character' ? card.attack : undefined,
566
+ life: card.life,
567
+ currentHp: card.life,
568
+ maxHp: card.life,
569
+ abilityName: text.abilityName,
570
+ abilityText: text.abilityText || this.defaultCardBody(card.type),
571
+ verseText: text.verseText,
572
+ scripture: text.scripture,
573
+ edition: card.edition,
574
+ collectorNumber: card.collectorNumber,
575
+ editionIcon: card.editionIcon ?? (card.edition === 'GEN' ? GENESIS_ICON_URL : undefined),
576
+ year: card.year,
577
+ author: card.author,
578
+ rarity: card.rarity,
579
+ imageUrl: card.imageUrl,
580
+ frontTemplate: card.frontTemplate ?? (card.edition === 'GEN' ? 'genesis-classic' : undefined),
581
+ };
582
+ return { ...base, ...overrides };
583
+ }
584
+ defaultCardBody(type) {
585
+ const bodies = {
586
+ action: this.t('christianityActionRuleBody'),
587
+ character: this.t('christianityCharacterBody'),
588
+ event: this.t('christianityEventRuleBody'),
589
+ leader: this.t('christianityLeaderBody'),
590
+ offering: this.t('christianityOfferingBody'),
591
+ place: this.t('christianityPlaceRuleBody'),
592
+ tool: this.t('christianityToolRuleBody'),
593
+ wisdom: this.t('christianityWisdomRuleBody'),
594
+ };
595
+ return bodies[type];
596
+ }
597
+ characterRenderCard(card) {
598
+ const definition = this.cardDefinition(card.cardId);
599
+ return this.definitionToRenderCard(definition, {
600
+ id: card.instanceId,
601
+ attack: card.attack,
602
+ life: card.maxHp,
603
+ currentHp: card.currentHp,
604
+ maxHp: card.maxHp,
605
+ statusText: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
606
+ });
607
+ }
608
+ leaderRenderCard(player) {
609
+ if (player.leaderCardId) {
610
+ const definition = this.cardDefinition(player.leaderCardId);
611
+ return this.definitionToRenderCard(definition, {
612
+ id: `${player.seat}-leader`,
613
+ name: this.translatedCardText(definition).name,
614
+ type: 'leader',
615
+ typeLabel: this.t('christianityLeaderCard'),
616
+ life: player.leaderHp,
617
+ currentHp: player.leaderHp,
618
+ maxHp: player.leaderMaxHp,
619
+ statusText: this.t('christianityLeaderBody'),
620
+ });
621
+ }
622
+ return {
623
+ id: `${player.seat}-leader`,
624
+ name: player.leaderName,
625
+ type: 'leader',
626
+ typeLabel: this.t('christianityLeaderCard'),
627
+ life: player.leaderHp,
628
+ currentHp: player.leaderHp,
629
+ maxHp: player.leaderMaxHp,
630
+ abilityName: this.t('christianityLeaderCard'),
631
+ abilityText: this.t('christianityLeaderBody'),
632
+ verseText: this.t('christianityLeaderBody'),
633
+ edition: 'MVP',
634
+ collectorNumber: 'LIDER',
635
+ editionIcon: GENESIS_ICON_URL,
636
+ year: '2026',
637
+ author: 'MVP',
638
+ rarity: 'legendary',
639
+ frontTemplate: 'genesis-classic',
640
+ };
641
+ }
642
+ offeringRenderCard(offering) {
643
+ const definition = this.cardDefinition(offering.cardId);
644
+ const text = this.translatedCardText(definition);
645
+ return this.definitionToRenderCard(definition, {
646
+ id: offering.instanceId,
647
+ name: text.name,
648
+ type: 'offering',
649
+ typeLabel: this.t('christianityOfferingCard'),
650
+ offeringValue: offering.value,
651
+ life: offering.value,
652
+ currentHp: offering.value,
653
+ maxHp: offering.value,
654
+ abilityName: text.abilityName ?? offering.abilityName,
655
+ abilityText: text.abilityText ?? offering.abilityText ?? this.t('christianityOfferingNoAbility'),
656
+ statusText: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
657
+ });
658
+ }
659
+ previewRenderType(typeLabel) {
660
+ if (typeLabel === this.t('christianityLeaderCard'))
661
+ return 'leader';
662
+ if (typeLabel === this.t('christianityOfferingCard'))
663
+ return 'offering';
664
+ return 'character';
665
+ }
666
+ cardTypeIconUrl(card) {
667
+ return this.cardTypeIconUrlForType(card.type);
668
+ }
669
+ previewTypeIconUrl() {
670
+ const preview = this.selectedPreview();
671
+ if (preview?.eyebrow === this.t('christianityLeaderCard'))
672
+ return this.cardTypeIconUrlForType('leader');
673
+ if (preview?.eyebrow === this.t('christianityOfferingCard'))
674
+ return this.cardTypeIconUrlForType('offering');
675
+ return this.cardTypeIconUrlForType('character');
676
+ }
677
+ cardTypeIconUrlForType(type) {
678
+ const normalized = type.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
679
+ const icon = normalized === 'lider' ? 'leader' : normalized === 'personaje' ? 'character' : normalized === 'ofrenda' ? 'offering' : normalized;
680
+ return `assets/games/christianity/icons/${icon}.png`;
681
+ }
682
+ offeringPips(value) {
683
+ const count = Number(value);
684
+ if (!Number.isFinite(count) || count <= 0)
685
+ return [];
686
+ return Array.from({ length: Math.min(Math.floor(count), 5) });
687
+ }
688
+ battleSlots(seat) {
689
+ const cards = this.game().players[seat].battleZone;
690
+ const positionedCards = new Map();
691
+ cards.forEach((card, index) => {
692
+ const slot = Number.isInteger(card.slot) ? card.slot ?? index : index;
693
+ if (slot >= 0 && slot < 4 && !positionedCards.has(slot)) {
694
+ positionedCards.set(slot, card);
695
+ }
696
+ });
697
+ return Array.from({ length: 4 }, (_, index) => ({
698
+ trackId: positionedCards.get(index)?.instanceId ?? `${seat}-empty-${index}`,
699
+ card: positionedCards.get(index),
700
+ }));
701
+ }
702
+ battleSlotDropId(index) {
703
+ return `christianity-battle-slot-${index}`;
704
+ }
705
+ dropTargetIds() {
706
+ return ['christianity-offerings-drop', ...this.battleSlots('P1').map((_, index) => this.battleSlotDropId(index))];
707
+ }
708
+ hiddenHandCards(count) {
709
+ return Array.from({ length: count });
710
+ }
711
+ fanTransform(index, total, opponent) {
712
+ if (total <= 1)
713
+ return 'none';
714
+ const center = (total - 1) / 2;
715
+ const offset = index - center;
716
+ const rotate = offset * (opponent ? 6 : 5);
717
+ const lift = Math.abs(offset) * 0.25;
718
+ const hoverLift = opponent ? 0 : this.handWaveLift(index);
719
+ const scale = opponent ? 1 : this.handWaveScale(index);
720
+ const fanLift = opponent ? Math.abs(offset) * 0.22 : lift + hoverLift;
721
+ const fanSpread = opponent ? offset * 0.02 : 0;
722
+ return `translate(${fanSpread}rem, ${fanLift}rem) rotate(${rotate}deg) scale(${scale})`;
723
+ }
724
+ handCardZIndex(index) {
725
+ const hovered = this.hoveredHandIndex();
726
+ if (hovered === null)
727
+ return 2;
728
+ const distance = Math.abs(index - hovered);
729
+ return Math.max(2, 8 - distance);
730
+ }
731
+ setHoveredHandIndex(index) {
732
+ this.hoveredHandIndex.set(index);
733
+ }
734
+ clearHoveredHandIndex() {
735
+ this.hoveredHandIndex.set(null);
736
+ }
737
+ releaseHoveredHand(event) {
738
+ if (event.pointerType !== 'mouse') {
739
+ window.setTimeout(() => this.clearHoveredHandIndex(), 180);
740
+ }
741
+ }
742
+ handWaveLift(index) {
743
+ const hovered = this.hoveredHandIndex();
744
+ if (hovered === null)
745
+ return 0;
746
+ const distance = Math.abs(index - hovered);
747
+ if (distance === 0)
748
+ return -1.15;
749
+ if (distance === 1)
750
+ return -0.58;
751
+ if (distance === 2)
752
+ return -0.22;
753
+ return 0;
754
+ }
755
+ handWaveScale(index) {
756
+ const hovered = this.hoveredHandIndex();
757
+ if (hovered === null)
758
+ return 1;
759
+ const distance = Math.abs(index - hovered);
760
+ if (distance === 0)
761
+ return 1.06;
762
+ if (distance === 1)
763
+ return 1.03;
764
+ return 1;
765
+ }
766
+ readyOfferings(player) {
767
+ return player.offerings.reduce((total, offering) => total + (offering.ready ? offering.value : 0), 0);
768
+ }
769
+ totalOfferings(player) {
770
+ return player.offerings.reduce((total, offering) => total + offering.value, 0);
771
+ }
772
+ canPlay(card) {
773
+ if (!this.isOwnTurn())
774
+ return false;
775
+ if (card.type === 'offering')
776
+ return !this.player().offeringPlayedThisTurn;
777
+ if (card.type === 'character')
778
+ return this.readyOfferings(this.player()) >= (card.cost ?? 0) && this.player().battleZone.length < 4;
779
+ return false;
780
+ }
781
+ canPlaySelected() {
782
+ const selected = this.selectedHandCard();
783
+ return !!selected && this.canPlay(this.cardDefinition(selected));
784
+ }
785
+ selectedActionLabel() {
786
+ const selected = this.selectedCardDefinition();
787
+ if (!selected)
788
+ return this.t('christianityPlayCard');
789
+ return selected.type === 'offering' ? this.t('christianityPlayOffering') : this.t('christianityPlayCard');
790
+ }
791
+ selectedActionDisabled() {
792
+ const selected = this.selectedCardDefinition();
793
+ if (!selected || !this.canPlay(selected))
794
+ return true;
795
+ return selected.type === 'character';
796
+ }
797
+ canPlaceSelectedCharacter() {
798
+ const selected = this.selectedCardDefinition();
799
+ return !!selected && selected.type === 'character' && this.canPlay(selected);
800
+ }
801
+ canPlaceSelectedOffering() {
802
+ const selected = this.selectedCardDefinition();
803
+ return !!selected && selected.type === 'offering' && this.canPlay(selected);
804
+ }
805
+ isDraggingCharacter() {
806
+ const cardId = this.draggingCardId();
807
+ if (!cardId)
808
+ return false;
809
+ const card = this.cardDefinition(cardId);
810
+ return card.type === 'character' && this.canPlay(card);
811
+ }
812
+ isDraggingOffering() {
813
+ const cardId = this.draggingCardId();
814
+ if (!cardId)
815
+ return false;
816
+ const card = this.cardDefinition(cardId);
817
+ return card.type === 'offering' && this.canPlay(card);
818
+ }
819
+ startDraggingCard(cardId) {
820
+ this.selectedAttacker.set(null);
821
+ this.selectedHandCard.set(cardId);
822
+ this.draggingCardId.set(cardId);
823
+ this.closePreview();
824
+ }
825
+ endDraggingCard() {
826
+ this.draggingCardId.set(null);
827
+ }
828
+ dropOnBattleSlot(event, slotIndex) {
829
+ const card = this.cardDefinition(event.item.data);
830
+ if (card.type !== 'character')
831
+ return;
832
+ this.playCardFromHand(event.item.data, slotIndex);
833
+ }
834
+ dropOnOfferings(event) {
835
+ const card = this.cardDefinition(event.item.data);
836
+ if (card.type !== 'offering')
837
+ return;
838
+ this.playCardFromHand(event.item.data);
839
+ }
840
+ selectHandCard(cardId) {
841
+ const wasSelected = this.selectedHandCard() === cardId;
842
+ this.selectedAttacker.set(null);
843
+ this.selectedHandCard.set(wasSelected ? null : cardId);
844
+ this.closePreview();
845
+ }
846
+ playSelectedCard(slotIndex) {
847
+ const cardId = this.selectedHandCard();
848
+ if (!cardId)
849
+ return;
850
+ this.playCardFromHand(cardId, slotIndex);
851
+ }
852
+ playCardFromHand(cardId, slotIndex) {
853
+ const card = this.cardDefinition(cardId);
854
+ if (!this.canPlay(card))
855
+ return;
856
+ this.game.update(game => {
857
+ const next = structuredClone(game);
858
+ const player = next.players.P1;
859
+ const handIndex = player.hand?.indexOf(cardId) ?? -1;
860
+ if (handIndex < 0 || !player.hand)
861
+ return game;
862
+ player.hand.splice(handIndex, 1);
863
+ if (card.type === 'offering') {
864
+ player.offerings.push({
865
+ instanceId: `p1_offering_${next.revision + 1}`,
866
+ cardId: card.id,
867
+ name: card.name,
868
+ owner: 'P1',
869
+ ready: true,
870
+ value: card.offeringValue ?? card.life ?? 1,
871
+ abilityName: card.abilityName,
872
+ abilityText: card.abilityText,
873
+ abilityCost: card.abilityCost,
874
+ });
875
+ player.offeringPlayedThisTurn = true;
876
+ }
877
+ else {
878
+ this.spendOfferings(player, card.cost ?? 0);
879
+ const occupiedSlots = new Set(player.battleZone.map((character, index) => Number.isInteger(character.slot) ? character.slot ?? index : index));
880
+ const targetSlot = slotIndex ?? [0, 1, 2, 3].find(index => !occupiedSlots.has(index));
881
+ if (targetSlot === undefined || occupiedSlots.has(targetSlot))
882
+ return game;
883
+ player.battleZone.push({
884
+ instanceId: `p1_${next.revision + 1}_${player.battleZone.length}`,
885
+ cardId: card.id,
886
+ name: card.name,
887
+ owner: 'P1',
888
+ controller: 'P1',
889
+ slot: targetSlot,
890
+ attack: card.attack ?? 0,
891
+ currentHp: card.life ?? 1,
892
+ maxHp: card.life ?? 1,
893
+ canAttack: false,
894
+ });
895
+ player.battleZone.sort((left, right) => (left.slot ?? 0) - (right.slot ?? 0));
896
+ }
897
+ next.revision++;
898
+ next.log = [
899
+ card.type === 'offering' ? `${card.name} queda lista como ofrenda.` : `${card.name} entra en batalla.`,
900
+ ...next.log,
901
+ ].slice(0, 4);
902
+ return next;
903
+ });
904
+ this.selectedHandCard.set(null);
905
+ this.draggingCardId.set(null);
906
+ this.closePreview();
907
+ }
908
+ handleOfferingPile(seat) {
909
+ this.openOfferings(seat);
910
+ }
911
+ selectAttacker(card) {
912
+ this.selectedHandCard.set(null);
913
+ if (!this.isOwnTurn() || !card.canAttack) {
914
+ this.inspectCharacter(card);
915
+ return;
916
+ }
917
+ this.closePreview();
918
+ this.selectedAttacker.set(this.selectedAttacker()?.instanceId === card.instanceId ? null : card);
919
+ }
920
+ handleOpponentCharacter(card) {
921
+ if (this.selectedAttacker()) {
922
+ this.attackCharacter(card);
923
+ return;
924
+ }
925
+ this.inspectCharacter(card);
926
+ }
927
+ handleOpponentLeader() {
928
+ if (this.selectedAttacker() && !this.hasOpponentGuards()) {
929
+ this.attackLeader();
930
+ return;
931
+ }
932
+ this.inspectLeader('P2');
933
+ }
934
+ attackLeader() {
935
+ const attacker = this.selectedAttacker();
936
+ if (!attacker)
937
+ return;
938
+ if (this.hasOpponentGuards()) {
939
+ this.selectedPreview.set({
940
+ title: this.opponent().leaderName,
941
+ eyebrow: this.t('christianityLeaderCard'),
942
+ meta: `${this.opponent().leaderHp}/${this.opponent().leaderMaxHp}`,
943
+ body: this.t('christianityLeaderProtected'),
944
+ });
945
+ return;
946
+ }
947
+ this.game.update(game => {
948
+ const next = structuredClone(game);
949
+ const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
950
+ if (!liveAttacker || !liveAttacker.canAttack)
951
+ return game;
952
+ next.players.P2.leaderHp = Math.max(0, next.players.P2.leaderHp - liveAttacker.attack);
953
+ liveAttacker.canAttack = false;
954
+ next.revision++;
955
+ next.log = [`${liveAttacker.name} ataca al lider rival.`, ...next.log].slice(0, 4);
956
+ return next;
957
+ });
958
+ this.selectedAttacker.set(null);
959
+ }
960
+ attackCharacter(target) {
961
+ const attacker = this.selectedAttacker();
962
+ if (!attacker)
963
+ return;
964
+ this.game.update(game => {
965
+ const next = structuredClone(game);
966
+ const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
967
+ const liveTarget = next.players.P2.battleZone.find(card => card.instanceId === target.instanceId);
968
+ if (!liveAttacker || !liveTarget || !liveAttacker.canAttack)
969
+ return game;
970
+ liveTarget.currentHp -= liveAttacker.attack;
971
+ liveAttacker.currentHp -= liveTarget.attack;
972
+ liveAttacker.canAttack = false;
973
+ this.cleanupDestroyed(next.players.P1, next);
974
+ this.cleanupDestroyed(next.players.P2, next);
975
+ next.revision++;
976
+ next.log = [`${liveAttacker.name} combate contra ${liveTarget.name}.`, ...next.log].slice(0, 4);
977
+ return next;
978
+ });
979
+ this.selectedAttacker.set(null);
980
+ }
981
+ endTurn() {
982
+ this.selectedHandCard.set(null);
983
+ this.selectedAttacker.set(null);
984
+ this.selectedPreview.set(null);
985
+ this.selectedInfo.set(null);
986
+ this.game.update(game => {
987
+ const next = structuredClone(game);
988
+ next.turnOwner = next.turnOwner === 'P1' ? 'P2' : 'P1';
989
+ next.turnCount++;
990
+ const current = next.players[next.turnOwner];
991
+ current.offeringPlayedThisTurn = false;
992
+ current.offerings = current.offerings.map(offering => ({ ...offering, ready: true }));
993
+ current.battleZone = current.battleZone.map(card => ({ ...card, canAttack: true }));
994
+ const drawnCard = next.sharedDeck.shift();
995
+ if (drawnCard) {
996
+ if (current.hand) {
997
+ current.hand.push(drawnCard);
998
+ }
999
+ else {
1000
+ current.handCount = (current.handCount ?? 0) + 1;
1001
+ }
1002
+ }
1003
+ next.revision++;
1004
+ next.log = [
1005
+ drawnCard ? `${current.displayName} roba una carta.` : `El mazo esta vacio.`,
1006
+ `Turno de ${current.displayName}.`,
1007
+ ...next.log,
1008
+ ].slice(0, 4);
1009
+ return next;
1010
+ });
1011
+ }
1012
+ resetMock() {
1013
+ this.game.set(this.catalogLoaded() ? this.createTutorialGame(this.allCatalogCards()) : structuredClone(STARTING_GAME));
1014
+ this.selectedHandCard.set(null);
1015
+ this.selectedAttacker.set(null);
1016
+ this.selectedPreview.set(null);
1017
+ this.selectedInfo.set(null);
1018
+ this.showHistory.set(false);
1019
+ this.showGallery.set(false);
1020
+ this.offeringsSeat.set(null);
1021
+ }
1022
+ startTutorial() {
1023
+ this.resetMock();
1024
+ this.screen.set('table');
1025
+ }
1026
+ closePreview() {
1027
+ this.selectedPreview.set(null);
1028
+ this.resetPreviewTilt();
1029
+ }
1030
+ closeInfo() {
1031
+ this.selectedInfo.set(null);
1032
+ }
1033
+ openOfferings(seat) {
1034
+ this.selectedPreview.set(null);
1035
+ this.selectedInfo.set(null);
1036
+ this.showHistory.set(false);
1037
+ this.showGallery.set(false);
1038
+ this.offeringsSeat.set(seat);
1039
+ }
1040
+ openHistory() {
1041
+ this.selectedPreview.set(null);
1042
+ this.selectedInfo.set(null);
1043
+ this.offeringsSeat.set(null);
1044
+ this.showGallery.set(false);
1045
+ this.showHistory.set(true);
1046
+ }
1047
+ closeOfferings() {
1048
+ this.offeringsSeat.set(null);
1049
+ }
1050
+ openGallery() {
1051
+ this.selectedPreview.set(null);
1052
+ this.selectedInfo.set(null);
1053
+ this.offeringsSeat.set(null);
1054
+ this.showHistory.set(false);
1055
+ this.showGallery.set(true);
1056
+ }
1057
+ closeGallery() {
1058
+ this.showGallery.set(false);
1059
+ }
1060
+ setGallerySearch(event) {
1061
+ this.gallerySearch.set(event.target.value);
1062
+ }
1063
+ setGalleryType(event) {
1064
+ this.galleryType.set(event.target.value);
1065
+ }
1066
+ tiltPreview(event) {
1067
+ const bounds = event.currentTarget.getBoundingClientRect();
1068
+ const x = (event.clientX - bounds.left) / bounds.width - 0.5;
1069
+ const y = (event.clientY - bounds.top) / bounds.height - 0.5;
1070
+ this.previewTilt.set({
1071
+ rotateX: 5 - y * 18,
1072
+ rotateY: -5 + x * 18,
1073
+ shiftX: x * 10,
1074
+ shiftY: y * 10,
1075
+ });
1076
+ }
1077
+ resetPreviewTilt() {
1078
+ this.previewTilt.set({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
1079
+ }
1080
+ cleanupDestroyed(player, game) {
1081
+ const destroyed = player.battleZone.filter(card => card.currentHp <= 0);
1082
+ if (!destroyed.length)
1083
+ return;
1084
+ game.historyZone.push(...destroyed.map(card => card.cardId));
1085
+ player.battleZone = player.battleZone.filter(card => card.currentHp > 0);
1086
+ }
1087
+ inspectLeader(seat) {
1088
+ this.selectedInfo.set(null);
1089
+ const player = this.game().players[seat];
1090
+ const leader = player.leaderCardId ? this.cardDefinition(player.leaderCardId) : undefined;
1091
+ this.selectedPreview.set({
1092
+ title: leader ? this.translatedCardText(leader).name : player.leaderName,
1093
+ eyebrow: this.t('christianityLeaderCard'),
1094
+ meta: `${player.leaderHp}/${player.leaderMaxHp}`,
1095
+ body: seat === 'P2' && this.hasOpponentGuards() ? this.t('christianityLeaderProtected') : this.t('christianityLeaderBody'),
1096
+ cardId: player.leaderCardId,
1097
+ source: 'board',
1098
+ });
1099
+ }
1100
+ inspectOffering(offering) {
1101
+ this.selectedInfo.set(null);
1102
+ const definition = this.cardDefinition(offering.cardId);
1103
+ const text = this.translatedCardText(definition);
1104
+ this.selectedPreview.set({
1105
+ title: text.name,
1106
+ eyebrow: this.t('christianityOfferingCard'),
1107
+ meta: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
1108
+ body: text.abilityText ?? offering.abilityText ?? this.t('christianityOfferingBody'),
1109
+ cardId: offering.cardId,
1110
+ source: 'pile',
1111
+ });
1112
+ }
1113
+ offeringAbilityText(offering) {
1114
+ const text = this.translatedCardText(this.cardDefinition(offering.cardId));
1115
+ return text.abilityText ?? offering.abilityText ?? this.t('christianityOfferingNoAbility');
1116
+ }
1117
+ canUseOfferingAbility(offering, seat) {
1118
+ if (seat !== 'P1' || !this.isOwnTurn())
1119
+ return false;
1120
+ if (!offering.ready || !offering.abilityName)
1121
+ return false;
1122
+ return this.readyOfferings(this.game().players[seat]) >= (offering.abilityCost ?? 0);
1123
+ }
1124
+ useOfferingAbility(offering, seat) {
1125
+ if (!this.canUseOfferingAbility(offering, seat))
1126
+ return;
1127
+ this.game.update(game => {
1128
+ const next = structuredClone(game);
1129
+ const player = next.players[seat];
1130
+ const liveOffering = player.offerings.find(card => card.instanceId === offering.instanceId);
1131
+ if (!liveOffering || !liveOffering.ready)
1132
+ return game;
1133
+ const offeringId = liveOffering.instanceId;
1134
+ this.spendOfferings(player, liveOffering.abilityCost ?? 0);
1135
+ player.offerings = player.offerings.map(card => (card.instanceId === offeringId ? { ...card, ready: false } : card));
1136
+ player.leaderHp = Math.max(0, player.leaderHp - 1);
1137
+ next.revision++;
1138
+ next.log = [`${liveOffering.name}: ${liveOffering.abilityName}.`, ...next.log].slice(0, 4);
1139
+ return next;
1140
+ });
1141
+ }
1142
+ inspectDeck() {
1143
+ const remainingCards = this.game().sharedDeck.length;
1144
+ this.selectedPreview.set(null);
1145
+ this.selectedInfo.set({
1146
+ title: this.t('christianityDeck'),
1147
+ eyebrow: this.t('christianitySharedZone'),
1148
+ meta: `${remainingCards} ${remainingCards === 1 ? this.t('christianityCardRemaining') : this.t('christianityCardsRemaining')}`,
1149
+ body: this.t('christianityDeckBody'),
1150
+ facts: [
1151
+ this.t('christianityDeckRuleShared'),
1152
+ this.t('christianityDeckRuleDraw'),
1153
+ this.t('christianityDeckRuleEmpty'),
1154
+ ],
1155
+ });
1156
+ }
1157
+ inspectHowToPlay() {
1158
+ this.selectedPreview.set(null);
1159
+ this.selectedInfo.set({
1160
+ title: this.t('christianityHowToPlay'),
1161
+ eyebrow: this.t('christianityGenesisEdition'),
1162
+ meta: this.t('christianityTutorialMode'),
1163
+ body: this.t('christianityHowToPlayIntro'),
1164
+ facts: [
1165
+ this.t('christianityHowToPlayGoal'),
1166
+ this.t('christianityHowToPlayTurn'),
1167
+ this.t('christianityHowToPlayOfferings'),
1168
+ this.t('christianityHowToPlayBattle'),
1169
+ ],
1170
+ });
1171
+ }
1172
+ inspectHandCard(cardId, fromHand = false) {
1173
+ this.selectedInfo.set(null);
1174
+ const card = this.cardDefinition(cardId);
1175
+ const text = this.translatedCardText(card);
1176
+ if (fromHand) {
1177
+ this.selectedAttacker.set(null);
1178
+ this.selectedHandCard.set(cardId);
1179
+ }
1180
+ this.selectedPreview.set({
1181
+ title: text.name,
1182
+ eyebrow: this.cardTypeLabel(card),
1183
+ meta: this.cardPreviewMeta(card),
1184
+ body: this.defaultCardBody(card.type),
1185
+ cardId,
1186
+ source: fromHand ? 'hand' : 'pile',
1187
+ });
1188
+ }
1189
+ inspectGalleryCard(cardId) {
1190
+ this.inspectHandCard(cardId);
1191
+ }
1192
+ inspectHistoryCard(cardId) {
1193
+ this.showHistory.set(false);
1194
+ this.inspectHandCard(cardId);
1195
+ }
1196
+ inspectCharacter(card) {
1197
+ this.selectedInfo.set(null);
1198
+ const definition = this.cardDefinition(card.cardId);
1199
+ this.selectedPreview.set({
1200
+ title: this.translatedCardText(definition).name,
1201
+ eyebrow: this.t('christianityCharacterCard'),
1202
+ meta: `${card.attack}/${card.currentHp}`,
1203
+ body: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
1204
+ cardId: card.cardId,
1205
+ source: 'board',
1206
+ });
1207
+ }
1208
+ cardPreviewMeta(card) {
1209
+ if (card.type === 'offering')
1210
+ return `${card.offeringValue ?? card.life ?? 1}`;
1211
+ if (card.type === 'leader')
1212
+ return `${card.leaderLife ?? card.life ?? 0}`;
1213
+ if (card.type === 'character')
1214
+ return `${this.t('christianityCost')} ${card.cost ?? 0} · ${card.attack ?? 0}/${card.life ?? 0}`;
1215
+ if (card.cost !== undefined)
1216
+ return `${this.t('christianityCost')} ${card.cost}`;
1217
+ return card.collectorNumber ?? card.id;
1218
+ }
1219
+ spendOfferings(player, cost) {
1220
+ let remaining = cost;
1221
+ player.offerings = player.offerings.map(offering => {
1222
+ if (remaining <= 0 || !offering.ready)
1223
+ return offering;
1224
+ remaining -= offering.value;
1225
+ return { ...offering, ready: false };
1226
+ });
1227
+ }
1228
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1229
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChristianityGameComponent, isStandalone: true, selector: "val-christianity-game", ngImport: i0, template: `
1230
+ <main class="christianity-shell">
1231
+ <section class="christianity-header">
1232
+ <div>
1233
+ <p>{{ t('christianityEyebrow') }}</p>
1234
+ <h1>{{ t('christianityTitle') }}</h1>
1235
+ </div>
1236
+ <div class="christianity-header-actions">
1237
+ @if (screen() !== 'splash') {
1238
+ <button type="button" class="christianity-gallery-open" valLightRipple (click)="openGallery()">
1239
+ {{ t('christianityGallery') }}
1240
+ </button>
1241
+ }
1242
+ @if (screen() === 'table') {
1243
+ <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
1244
+ <span>{{ t('christianityTurn') }}</span>
1245
+ <strong>{{ currentPlayer().displayName }}</strong>
1246
+ </div>
1247
+ }
1248
+ </div>
1249
+ </section>
1250
+
1251
+ @if (screen() === 'splash') {
1252
+ <section class="christianity-splash" role="status" aria-live="polite">
1253
+ <div class="christianity-splash__mark">
1254
+ <i aria-hidden="true"></i>
1255
+ <i aria-hidden="true"></i>
1256
+ <i aria-hidden="true"></i>
1257
+ </div>
1258
+ <div>
1259
+ <span>{{ t('christianitySplashEyebrow') }}</span>
1260
+ <h2>{{ t('christianitySplashTitle') }}</h2>
1261
+ <p>{{ splashStatusText() }}</p>
1262
+ </div>
1263
+ </section>
1264
+ } @else if (screen() === 'home') {
1265
+ <section class="christianity-start">
1266
+ <div class="christianity-start__hero">
1267
+ <div class="christianity-start__copy">
1268
+ <span>{{ t('christianityGenesisEdition') }}</span>
1269
+ <h2>{{ t('christianityStartTitle') }}</h2>
1270
+ <p>{{ t('christianityStartBody') }}</p>
1271
+ </div>
1272
+ <div class="christianity-start__fan" aria-hidden="true">
1273
+ @for (card of startFeaturedCards(); track card.id) {
1274
+ <val-christianity-card
1275
+ [card]="definitionToRenderCard(card)"
1276
+ variant="hand"
1277
+ [style.transform]="startFeaturedCardTransform($index)"
1278
+ ></val-christianity-card>
1279
+ }
1280
+ </div>
1281
+ </div>
1282
+ <div class="christianity-start__cards">
1283
+ <article>
1284
+ <strong>{{ t('christianityTutorialMode') }}</strong>
1285
+ <p>{{ t('christianityTutorialModeBody') }}</p>
1286
+ <button type="button" class="christianity-primary-action" valLightRipple (click)="startTutorial()">
1287
+ {{ t('christianityStartTutorial') }}
1288
+ </button>
1289
+ </article>
1290
+ <article>
1291
+ <strong>{{ t('christianityGallery') }}</strong>
1292
+ <p>{{ t('christianityGalleryModeBody') }}</p>
1293
+ <button type="button" class="christianity-secondary-action" valLightRipple (click)="openGallery()">
1294
+ {{ t('christianityOpenGallery') }}
1295
+ </button>
1296
+ </article>
1297
+ <article>
1298
+ <strong>{{ t('christianityHowToPlay') }}</strong>
1299
+ <p>{{ t('christianityHowToPlayBody') }}</p>
1300
+ <button type="button" class="christianity-secondary-action" valLightRipple (click)="inspectHowToPlay()">
1301
+ {{ t('learnMore') }}
1302
+ </button>
1303
+ </article>
1304
+ </div>
1305
+ <div class="christianity-start__status" [attr.aria-label]="t('christianityEditionStatus')">
1306
+ <span>{{ galleryEditionLabel() }}</span>
1307
+ <span>{{ t('christianityTutorialActive') }}</span>
1308
+ <span>{{ catalogStatusLabel() }}</span>
1309
+ </div>
1310
+ <section class="christianity-start__modes" [attr.aria-label]="t('christianityFutureModes')">
1311
+ @for (mode of futureModes(); track mode.title) {
1312
+ <article>
1313
+ <strong>{{ mode.title }}</strong>
1314
+ <p>{{ mode.body }}</p>
1315
+ <span>{{ t('soonTitle') }}</span>
1316
+ </article>
1317
+ }
1318
+ </section>
1319
+ </section>
1320
+ } @else {
1321
+ <section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
1322
+ <article class="christianity-match-player">
1323
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
1324
+ <div>
1325
+ <strong>{{ player().displayName }}</strong>
1326
+ <small>{{ playerLeaderDisplayName(player()) }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
1327
+ </div>
1328
+ </article>
1329
+ <div class="christianity-scoreboard">
1330
+ <span>{{ t('christianityMatch') }}</span>
1331
+ <strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
1332
+ </div>
1333
+ <article class="christianity-match-player christianity-match-player--opponent">
1334
+ <span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
1335
+ <div>
1336
+ <strong>{{ opponent().displayName }}</strong>
1337
+ <small>{{ playerLeaderDisplayName(opponent()) }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
1338
+ </div>
1339
+ </article>
1340
+ </section>
1341
+
1342
+ <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
1343
+ <div class="christianity-hand-meter christianity-hand-meter--opponent">
1344
+ <span>{{ t('christianityHand') }}</span>
1345
+ <strong>{{ opponentHandCount() }}</strong>
1346
+ </div>
1347
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
1348
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
1349
+ <button
1350
+ type="button"
1351
+ class="christianity-card-preview-card christianity-card-frame christianity-card-frame--back"
1352
+ valLightRipple
1353
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
1354
+ [attr.aria-label]="t('christianityHiddenCard')"
1355
+ ></button>
1356
+ }
1357
+ </section>
1358
+ </section>
1359
+
1360
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
1361
+ <section class="christianity-player-side christianity-player-side--opponent">
1362
+ <section class="christianity-player-rack christianity-player-rack--opponent">
1363
+ <div class="christianity-offerings-zone">
1364
+ <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
1365
+ <i aria-hidden="true"></i>
1366
+ <i aria-hidden="true"></i>
1367
+ <i aria-hidden="true"></i>
1368
+ <span>{{ t('christianityOfferings') }}</span>
1369
+ <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
1370
+ </button>
1371
+ </div>
1372
+ <button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
1373
+ <val-christianity-card [card]="leaderRenderCard(opponent())" variant="table"></val-christianity-card>
1374
+ </button>
1375
+ <span class="christianity-rack-spacer" aria-hidden="true"></span>
1376
+ </section>
1377
+
1378
+ <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
1379
+ @for (slot of battleSlots('P2'); track slot.trackId) {
1380
+ @if (slot.card) {
1381
+ <button
1382
+ type="button"
1383
+ class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
1384
+ valLightRipple
1385
+ [class.is-target]="selectedAttacker()"
1386
+ (click)="handleOpponentCharacter(slot.card)"
1387
+ >
1388
+ <val-christianity-card [card]="characterRenderCard(slot.card)" variant="table"></val-christianity-card>
1389
+ </button>
1390
+ } @else {
1391
+ <span class="christianity-slot"></span>
1392
+ }
1393
+ }
1394
+ </section>
1395
+ </section>
1396
+
1397
+ <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
1398
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="openHistory()">
1399
+ <i aria-hidden="true"></i>
1400
+ <i aria-hidden="true"></i>
1401
+ <i aria-hidden="true"></i>
1402
+ <span>{{ t('christianityHistory') }}</span>
1403
+ <strong>{{ game().historyZone.length }}</strong>
1404
+ </button>
1405
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
1406
+ <i aria-hidden="true"></i>
1407
+ <i aria-hidden="true"></i>
1408
+ <i aria-hidden="true"></i>
1409
+ <span>{{ t('christianityDeck') }}</span>
1410
+ <strong>{{ game().sharedDeck.length }}</strong>
1411
+ </button>
1412
+ <div class="christianity-zone-card">
1413
+ <span>{{ t('christianityPlace') }}</span>
1414
+ <strong>{{ t('christianityEmpty') }}</strong>
1415
+ </div>
1416
+ </section>
1417
+
1418
+ <section class="christianity-player-side">
1419
+ <section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
1420
+ @for (slot of battleSlots('P1'); track slot.trackId) {
1421
+ @if (slot.card) {
1422
+ <button
1423
+ type="button"
1424
+ class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
1425
+ valLightRipple
1426
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
1427
+ [class.is-exhausted]="!slot.card.canAttack"
1428
+ [class.is-ready-attacker]="isOwnTurn() && slot.card.canAttack"
1429
+ (click)="selectAttacker(slot.card)"
1430
+ >
1431
+ <val-christianity-card [card]="characterRenderCard(slot.card)" variant="table"></val-christianity-card>
1432
+ </button>
1433
+ } @else {
1434
+ <button
1435
+ type="button"
1436
+ class="christianity-slot"
1437
+ cdkDropList
1438
+ [id]="battleSlotDropId($index)"
1439
+ [cdkDropListData]="$index"
1440
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
1441
+ [cdkDropListEnterPredicate]="canDropOnBattleSlot"
1442
+ [cdkDropListSortingDisabled]="true"
1443
+ [class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
1444
+ valLightRipple
1445
+ (cdkDropListDropped)="dropOnBattleSlot($event, $index)"
1446
+ (click)="playSelectedCard($index)"
1447
+ >
1448
+ @if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
1449
+ <span>{{ t('christianityPlayHere') }}</span>
1450
+ }
1451
+ </button>
1452
+ }
1453
+ }
1454
+ </section>
1455
+
1456
+ <section class="christianity-player-rack">
1457
+ <div class="christianity-offerings-zone">
1458
+ <button
1459
+ type="button"
1460
+ class="christianity-offering-pile"
1461
+ cdkDropList
1462
+ id="christianity-offerings-drop"
1463
+ valLightRipple
1464
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
1465
+ [class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
1466
+ [cdkDropListEnterPredicate]="canDropOnOfferings"
1467
+ [cdkDropListSortingDisabled]="true"
1468
+ (cdkDropListDropped)="dropOnOfferings($event)"
1469
+ (click)="handleOfferingPile('P1')"
1470
+ >
1471
+ <i aria-hidden="true"></i>
1472
+ <i aria-hidden="true"></i>
1473
+ <i aria-hidden="true"></i>
1474
+ <span>{{ t('christianityOfferings') }}</span>
1475
+ <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
1476
+ </button>
1477
+ </div>
1478
+ <button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple (click)="inspectLeader('P1')">
1479
+ <val-christianity-card [card]="leaderRenderCard(player())" variant="table"></val-christianity-card>
1480
+ </button>
1481
+ <div class="christianity-player-command">
1482
+ <div class="christianity-player-badge">
1483
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
1484
+ <strong>{{ player().displayName }}</strong>
1485
+ </div>
1486
+ <button
1487
+ type="button"
1488
+ class="christianity-end-turn"
1489
+ (click)="endTurn()"
1490
+ >
1491
+ {{ t('christianityEndTurn') }}
1492
+ </button>
1493
+ </div>
1494
+ </section>
1495
+ </section>
1496
+ </section>
1497
+
1498
+ <section class="christianity-hand-shelf">
1499
+ <div class="christianity-hand-meter">
1500
+ <span>{{ t('christianityHand') }}</span>
1501
+ <strong>{{ player().hand?.length ?? 0 }}</strong>
1502
+ </div>
1503
+ <section
1504
+ class="christianity-hand-fan"
1505
+ cdkDropList
1506
+ id="christianity-hand-source"
1507
+ [cdkDropListConnectedTo]="dropTargetIds()"
1508
+ [attr.aria-label]="t('christianityYourHand')"
1509
+ (pointerleave)="clearHoveredHandIndex()"
1510
+ >
1511
+ @for (cardId of player().hand ?? []; track cardId + $index) {
1512
+ @let card = cardDefinition(cardId);
1513
+ <div
1514
+ class="christianity-hand-card-wrap"
1515
+ [class.is-selected]="selectedHandCard() === cardId"
1516
+ [class.is-dragging]="draggingCardId() === cardId"
1517
+ [style.z-index]="handCardZIndex($index)"
1518
+ [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
1519
+ (pointerenter)="setHoveredHandIndex($index)"
1520
+ (pointerdown)="setHoveredHandIndex($index)"
1521
+ (pointerup)="releaseHoveredHand($event)"
1522
+ >
1523
+ <button
1524
+ type="button"
1525
+ class="christianity-card-preview-card christianity-card-preview-card--hand christianity-render-card-button"
1526
+ cdkDrag
1527
+ valLightRipple
1528
+ [cdkDragData]="cardId"
1529
+ [cdkDragDisabled]="!canPlay(card)"
1530
+ [class.is-selected]="selectedHandCard() === cardId"
1531
+ [class.is-disabled]="!canPlay(card)"
1532
+ (cdkDragStarted)="startDraggingCard(cardId)"
1533
+ (cdkDragEnded)="endDraggingCard()"
1534
+ (click)="selectHandCard(cardId)"
1535
+ >
1536
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="hand"></val-christianity-card>
1537
+ </button>
1538
+ <button
1539
+ type="button"
1540
+ class="christianity-card-eye"
1541
+ [attr.aria-label]="t('christianityPreviewCard')"
1542
+ (click)="inspectHandCard(cardId, true); $event.stopPropagation()"
1543
+ ></button>
1544
+ </div>
1545
+ }
1546
+ </section>
1547
+ </section>
1548
+ }
1549
+
1550
+ @if (selectedPreview()) {
1551
+ <button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
1552
+ <aside
1553
+ class="christianity-floating-card-shell"
1554
+ aria-live="polite"
1555
+ >
1556
+ <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
1557
+ {{ t('close') }}
1558
+ </button>
1559
+ <div
1560
+ class="christianity-floating-card"
1561
+ [style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
1562
+ [style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
1563
+ [style.--preview-shift-x]="previewTilt().shiftX + 'px'"
1564
+ [style.--preview-shift-y]="previewTilt().shiftY + 'px'"
1565
+ (pointermove)="tiltPreview($event)"
1566
+ (pointerleave)="resetPreviewTilt()"
1567
+ >
1568
+ @if (selectedPreviewRenderCard(); as previewCard) {
1569
+ <val-christianity-card [card]="previewCard" variant="full"></val-christianity-card>
1570
+ }
1571
+ </div>
1572
+ @if (previewRule(); as rule) {
1573
+ <div class="christianity-preview-rule-note">
1574
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1575
+ <div>
1576
+ <small>{{ t('christianityCardRule') }}</small>
1577
+ <strong>{{ rule.title }}</strong>
1578
+ <p>{{ rule.body }}</p>
1579
+ </div>
1580
+ </div>
1581
+ }
1582
+ </aside>
1583
+ }
1584
+
1585
+ @if (selectedInfo(); as info) {
1586
+ <button type="button" class="christianity-info-backdrop" [attr.aria-label]="t('close')" (click)="closeInfo()"></button>
1587
+ <aside class="christianity-info-panel" aria-live="polite">
1588
+ <button type="button" class="christianity-dialog-close christianity-info-close" (click)="closeInfo()">
1589
+ {{ t('close') }}
1590
+ </button>
1591
+ <div class="christianity-rule-note">
1592
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1593
+ <div>
1594
+ <small>{{ info.eyebrow }}</small>
1595
+ <h2>{{ info.title }}</h2>
1596
+ <strong>{{ info.meta }}</strong>
1597
+ <p>{{ info.body }}</p>
1598
+ <ul>
1599
+ @for (fact of info.facts; track fact) {
1600
+ <li>{{ fact }}</li>
1601
+ }
1602
+ </ul>
1603
+ </div>
1604
+ </div>
1605
+ </aside>
1606
+ }
1607
+
1608
+ @if (screen() === 'table') {
1609
+ <section class="christianity-actions" aria-live="polite">
1610
+ <p>{{ statusText() }}</p>
1611
+ <div>
1612
+ <button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
1613
+ {{ selectedActionLabel() }}
1614
+ </button>
1615
+ <button type="button" (click)="resetMock()">
1616
+ {{ t('christianityReset') }}
1617
+ </button>
1618
+ </div>
1619
+ </section>
1620
+ }
1621
+
1622
+ @if (showHistory()) {
1623
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
1624
+ <section class="christianity-history-drawer">
1625
+ <header>
1626
+ <h2>{{ t('christianityHistory') }}</h2>
1627
+ <div class="christianity-dialog-actions">
1628
+ <span>{{ game().historyZone.length }}</span>
1629
+ <button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
1630
+ {{ t('close') }}
1631
+ </button>
1632
+ </div>
1633
+ </header>
1634
+ @if (game().historyZone.length) {
1635
+ <div class="christianity-history-grid">
1636
+ @for (cardId of game().historyZone; track cardId + $index) {
1637
+ @let card = cardDefinition(cardId);
1638
+ <button type="button" class="christianity-gallery-card-button christianity-render-card-button" valLightRipple (click)="inspectHistoryCard(cardId)">
1639
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="list"></val-christianity-card>
1640
+ </button>
1641
+ }
1642
+ </div>
1643
+ } @else {
1644
+ <p>{{ t('christianityHistoryEmpty') }}</p>
1645
+ }
1646
+ </section>
1647
+ }
1648
+
1649
+ @if (showGallery()) {
1650
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseGallery')" (click)="closeGallery()"></button>
1651
+ <section class="christianity-history-drawer christianity-gallery-drawer">
1652
+ <header>
1653
+ <div>
1654
+ <h2>{{ t('christianityGallery') }}</h2>
1655
+ <p>{{ galleryEditionLabel() }}</p>
1656
+ </div>
1657
+ <div class="christianity-dialog-actions">
1658
+ <span>{{ galleryCards().length }}</span>
1659
+ <button type="button" class="christianity-dialog-close" (click)="closeGallery()">
1660
+ {{ t('close') }}
1661
+ </button>
1662
+ </div>
1663
+ </header>
1664
+ <div class="christianity-gallery-controls">
1665
+ <label>
1666
+ <span>{{ t('christianityGallerySearch') }}</span>
1667
+ <input type="search" [value]="gallerySearch()" (input)="setGallerySearch($event)" [placeholder]="t('christianityGallerySearchPlaceholder')" />
1668
+ </label>
1669
+ <label>
1670
+ <span>{{ t('christianityGalleryFilter') }}</span>
1671
+ <select [value]="galleryType()" (change)="setGalleryType($event)">
1672
+ @for (option of galleryTypeOptions(); track option.value) {
1673
+ <option [value]="option.value">{{ option.label }}</option>
1674
+ }
1675
+ </select>
1676
+ </label>
1677
+ </div>
1678
+ <div class="christianity-gallery-edition-strip">
1679
+ <button type="button" class="is-active" valLightRipple>
1680
+ <img [src]="galleryEditionIcon()" alt="" />
1681
+ <span>{{ t('christianityGenesisEdition') }}</span>
1682
+ </button>
1683
+ </div>
1684
+ <div class="christianity-gallery-grid">
1685
+ @for (card of galleryCards(); track card.id) {
1686
+ <button type="button" class="christianity-gallery-card-button christianity-render-card-button" valLightRipple (click)="inspectGalleryCard(card.id)">
1687
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="list"></val-christianity-card>
1688
+ </button>
1689
+ } @empty {
1690
+ <p>{{ t('christianityGalleryEmpty') }}</p>
1691
+ }
1692
+ </div>
1693
+ </section>
1694
+ }
1695
+
1696
+ @if (offeringsSeat()) {
1697
+ @let offeringPlayer = game().players[offeringsSeat()!];
1698
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
1699
+ <section class="christianity-history-drawer christianity-offerings-drawer">
1700
+ <header>
1701
+ <h2>{{ t('christianityOfferings') }}</h2>
1702
+ <div class="christianity-dialog-actions">
1703
+ <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
1704
+ <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
1705
+ {{ t('close') }}
1706
+ </button>
1707
+ </div>
1708
+ </header>
1709
+ <div class="christianity-offerings-note">
1710
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1711
+ <p>{{ t('christianityOfferingsRuleBody') }}</p>
1712
+ </div>
1713
+ <div class="christianity-offering-list">
1714
+ @for (offering of offeringPlayer.offerings; track offering.instanceId) {
1715
+ <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
1716
+ <button type="button" class="christianity-offering-card christianity-render-card-button" valLightRipple (click)="inspectOffering(offering)">
1717
+ <val-christianity-card [card]="offeringRenderCard(offering)" variant="list"></val-christianity-card>
1718
+ </button>
1719
+ <div>
1720
+ <strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
1721
+ <p>{{ offeringAbilityText(offering) }}</p>
1722
+ @if (offering.abilityName) {
1723
+ <button
1724
+ type="button"
1725
+ [disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
1726
+ (click)="useOfferingAbility(offering, offeringsSeat()!)"
1727
+ >
1728
+ {{ t('christianityUseAbility') }}
1729
+ </button>
1730
+ }
1731
+ </div>
1732
+ </article>
1733
+ }
1734
+ </div>
1735
+ </section>
1736
+ }
1737
+ </main>
1738
+ `, isInline: true, styles: [":host{--christianity-theme-ink: var(--val-text-color, #1f2933);--christianity-theme-surface: #ffffff;--christianity-theme-parchment: #eff6ff;--christianity-theme-olive: #1d4ed8;--christianity-theme-gold: #2563eb;--christianity-theme-gold-soft: rgba(37, 99, 235, .16);--christianity-theme-gold-ring: rgba(37, 99, 235, .44);--christianity-theme-glow: rgba(37, 99, 235, .24);--christianity-theme-focus: #2563eb;--christianity-theme-shadow: rgba(37, 99, 235, .15);--christianity-theme-shadow-strong: rgba(37, 99, 235, .26);--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-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;min-width:0}.christianity-gallery-open{min-height:2.2rem;padding:0 .75rem;border:1px solid var(--christianity-theme-gold-ring);border-radius:999px;background:linear-gradient(180deg,#eff6fffa,#fffffffa),radial-gradient(circle at 20% 0%,var(--christianity-theme-gold-soft),transparent 42%);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800;box-shadow:0 .55rem 1.2rem #2563eb1a}.christianity-splash,.christianity-start{min-height:min(34rem,calc(100dvh - 8rem));border:1px solid rgba(37,99,235,.18);border-radius:.9rem;background:radial-gradient(circle at 50% 18%,rgba(37,99,235,.16),transparent 22rem),linear-gradient(180deg,#eff6ffed,#fffffff7),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #2563eb1f}.christianity-splash{display:grid;place-items:center;align-content:center;gap:1.2rem;padding:2.5rem 1.25rem;text-align:center}.christianity-splash__mark{position:relative;width:6.4rem;height:8.9rem;filter:drop-shadow(0 1rem 1.8rem rgba(82,64,28,.18))}.christianity-splash__mark i{position:absolute;inset:0;border:1px solid rgba(36,48,68,.16);border-radius:.7rem;background:radial-gradient(circle at 76% 12%,rgba(250,204,21,.9) 0 .42rem,transparent .45rem),linear-gradient(180deg,#fffffffa,#f8fafcfa)}.christianity-splash__mark i:nth-child(1){transform:translate(-1.1rem) rotate(-9deg)}.christianity-splash__mark i:nth-child(2){transform:translateY(-.32rem)}.christianity-splash__mark i:nth-child(3){transform:translate(1.1rem) rotate(9deg)}.christianity-splash__mark:after{content:\"\";position:absolute;inset:2.1rem 1.05rem 2.5rem;border-radius:.55rem;background:radial-gradient(circle at 50% 44%,rgba(245,199,85,.7),transparent 36%),linear-gradient(135deg,#5f6f2a33,#5f6f2a14)}.christianity-splash span,.christianity-start__copy span{color:var(--christianity-theme-olive);font-size:.76rem;font-weight:900;text-transform:uppercase}.christianity-splash h2,.christianity-start h2,.christianity-start p{margin:0}.christianity-splash h2{margin-top:.2rem;font-size:clamp(1.65rem,7vw,2.7rem);line-height:1}.christianity-splash p{max-width:26rem;margin:.55rem auto 0;color:#1f2933ad;font-size:.96rem}.christianity-start{display:grid;align-content:center;gap:1rem;padding:clamp(.85rem,2vw,1.35rem)}.christianity-start__hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,18rem);gap:1rem;align-items:center}.christianity-start__copy{display:grid;gap:.45rem;max-width:36rem}.christianity-start h2{font-size:clamp(1.6rem,6vw,2.5rem);line-height:1.02}.christianity-start__copy p,.christianity-start__cards p,.christianity-start__modes p{color:#1f2933ad;line-height:1.42}.christianity-start__fan{position:relative;display:grid;place-items:center;min-height:13rem;overflow:visible}.christianity-start__fan val-christianity-card{position:absolute;width:clamp(5.7rem,12vw,7.2rem);transform-origin:50% 92%;filter:drop-shadow(0 1rem 1.5rem rgba(82,64,28,.18))}.christianity-start__cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.christianity-start__cards article,.christianity-start__modes article{display:grid;gap:.65rem;align-content:start;padding:.95rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#ffffffd1;box-shadow:0 .75rem 1.7rem #52401c14}.christianity-start__cards article{min-height:11rem}.christianity-start__cards strong{font-size:1.05rem}.christianity-start__status{display:flex;flex-wrap:wrap;gap:.45rem}.christianity-start__status span,.christianity-start__modes article>span{display:inline-flex;align-items:center;width:fit-content;min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(37,99,235,.22);border-radius:999px;background:#eff6ffe0;color:#1f2933b8;font-size:.75rem;font-weight:850}.christianity-start__modes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.christianity-start__modes article{min-height:8.5rem;background:#f8fafcb8;box-shadow:none;opacity:.82}.christianity-start__modes strong{font-size:.92rem}.christianity-start__modes p{margin:0;font-size:.8rem}.christianity-primary-action,.christianity-secondary-action{justify-self:start;min-height:2.5rem;padding:0 .9rem;border-radius:999px;font:inherit;font-weight:900}.christianity-primary-action{border:1px solid rgba(16,42,67,.16);background:#102a43;color:#fff}.christianity-secondary-action{border:1px solid var(--christianity-theme-gold-ring);background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink)}.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-render-card-button{display:block;padding:0;overflow:visible;border:0;background:transparent;box-shadow:none}.christianity-render-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-gallery-card-button{display:block;width:min(100%,6.8rem);min-width:0;aspect-ratio:var(--christianity-card-aspect);padding:0;overflow:visible;border:0;background:transparent;color:inherit;font:inherit;text-align:left;box-shadow:none}.christianity-gallery-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-card-preview-card--hand.christianity-render-card-button,.christianity-card-preview-card--battle.christianity-render-card-button,.christianity-leader-card.christianity-render-card-button{aspect-ratio:var(--christianity-card-aspect)}.christianity-card-preview-card--hand.christianity-render-card-button:hover val-christianity-card,.christianity-card-preview-card--hand.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-target val-christianity-card,.christianity-leader-card.christianity-render-card-button.is-target val-christianity-card{filter:drop-shadow(0 0 .55rem rgba(214,162,29,.35))}.christianity-card-preview-card--battle.christianity-render-card-button.is-ready-attacker val-christianity-card{filter:drop-shadow(0 .45rem .8rem rgba(95,111,42,.16))}.christianity-card-preview-card--battle.christianity-render-card-button.is-selected{transform:translateY(-.28rem)}.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-header span.is-offering-pips,.christianity-full-card-cost.is-offering-pips,.christianity-offering-card span.is-offering-pips{grid-auto-flow:column;gap:.14rem;min-width:auto;padding:0 .28rem}.christianity-card-frame-header span.is-offering-pips i,.christianity-full-card-cost.is-offering-pips i,.christianity-offering-card span.is-offering-pips i,.christianity-full-card-pips i{display:block;width:.72rem;height:.72rem;border-radius:999px;background:radial-gradient(circle at 34% 28%,rgba(255,255,255,.9) 0 .12rem,transparent .13rem),#ffd91a;box-shadow:inset 0 -.08rem #52401c2e,0 .12rem .24rem #102a431a}.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);height:7.1rem;min-height:0;max-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>.cdk-drag-placeholder,.christianity-slot>.cdk-drag-placeholder{display:none}.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;grid-template-rows:minmax(0,auto) auto;gap:.55rem;width:min(17.5rem,calc(52dvh - 3rem),calc(100vw - 1.25rem));max-height:calc(100dvh - 1rem);padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-floating-card{position:relative;z-index:1;display:block;width:100%;min-height:0;padding:0;border:0;border-radius:.75rem;background:transparent;box-shadow:0 0 2.2rem var(--christianity-theme-glow);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-floating-card val-christianity-card{display:block;width:100%;min-height:0}.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-type-icon img{width:1rem;height:1rem;object-fit:contain}.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-stats .christianity-full-card-pips{display:inline-grid;grid-auto-flow:column;gap:.2rem;justify-self:start;padding:0;background:transparent}.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-preview-rule-note{position:relative;z-index:4;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.75rem .85rem;border:1px solid rgba(36,48,68,.14);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(37,99,235,.08),transparent 44%);box-shadow:0 .75rem 1.6rem #102a431f}.christianity-preview-rule-note small,.christianity-preview-rule-note strong,.christianity-preview-rule-note p{margin:0}.christianity-preview-rule-note small{color:#1f293394;font-size:.68rem;font-weight:800;text-transform:uppercase}.christianity-preview-rule-note strong{display:block;margin-top:.08rem;font-size:.92rem;line-height:1.1}.christianity-preview-rule-note p{margin-top:.22rem;color:#1f2933bd;font-size:.82rem;line-height:1.32}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(22rem,calc(67dvh - 5.85rem),calc(100vw - 3rem))}.christianity-floating-card{min-height:0;padding:0}}@media (max-width: 51.99rem){.christianity-floating-card-shell{top:48%;gap:.45rem;max-height:calc(100dvh - 1.5rem);padding-top:2.15rem}.christianity-floating-card-close{min-height:1.9rem;padding:0 .58rem;font-size:.72rem}.christianity-preview-rule-note{max-height:min(8.25rem,24dvh);padding:.62rem .68rem;overflow-y:auto;scrollbar-color:rgba(36,48,68,.28) transparent;scrollbar-gutter:stable}.christianity-preview-rule-note .christianity-rule-note-icon{width:1.8rem;height:1.8rem;font-size:.9rem}.christianity-preview-rule-note strong{font-size:.86rem}.christianity-preview-rule-note p{font-size:.78rem;line-height:1.28}}.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-gallery-drawer{grid-template-rows:auto auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),50rem);min-height:min(22rem,calc(100dvh - 1rem));max-height:min(36rem,calc(100dvh - 2rem))}.christianity-gallery-drawer header>div:first-child{display:grid;gap:.15rem;min-width:0}.christianity-gallery-drawer header p{color:#1f293394;font-size:.82rem}.christianity-gallery-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(8.5rem,13rem);gap:.65rem}.christianity-gallery-controls label{display:grid;gap:.25rem;min-width:0;color:#1f29339e;font-size:.74rem;font-weight:800}.christianity-gallery-controls input,.christianity-gallery-controls select{width:100%;min-width:0;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(36,48,68,.16);border-radius:.65rem;background:#fff;color:var(--christianity-theme-ink);font:inherit;font-size:.9rem}.christianity-gallery-edition-strip{display:flex;gap:.45rem;overflow-x:auto;padding-bottom:.1rem}.christianity-gallery-edition-strip button{display:inline-flex;align-items:center;gap:.45rem;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(214,162,29,.38);border-radius:999px;background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800}.christianity-gallery-edition-strip img{width:1.2rem;height:1.2rem;object-fit:contain}.christianity-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.8rem,6.8rem));justify-content:center;align-content:start;gap:.65rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .35rem}.christianity-gallery-grid::-webkit-scrollbar{width:.65rem}.christianity-gallery-grid::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-gallery-grid::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.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}.christianity-history-grid .christianity-render-card-button{justify-self:center;width:min(100%,6.4rem)}.christianity-gallery-grid .christianity-render-card-button{justify-self:center;width:min(100%,7rem)}.christianity-offering-card.christianity-render-card-button{width:min(100%,5.8rem);min-height:0;padding:0;border:0;background:transparent;box-shadow:none}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}:host-context(.dark),:host-context(.ion-palette-dark),:host-context(html.ion-palette-dark),:host-context(body.dark),:host-context([data-theme=\"dark\"]){--christianity-theme-ink: var(--ion-text-color, #e5edf8);--christianity-theme-surface: #111827;--christianity-theme-parchment: #13223a;--christianity-theme-olive: #93c5fd;--christianity-theme-gold: #60a5fa;--christianity-theme-gold-soft: rgba(96, 165, 250, .18);--christianity-theme-gold-ring: rgba(147, 197, 253, .42);--christianity-theme-glow: rgba(96, 165, 250, .24);--christianity-theme-focus: #93c5fd;--christianity-theme-shadow: rgba(0, 0, 0, .34);--christianity-theme-shadow-strong: rgba(0, 0, 0, .48);--christianity-card-back: linear-gradient(135deg, rgba(147, 197, 253, .2), rgba(15, 23, 42, .08)), repeating-linear-gradient(45deg, #1e3a5f 0 .33rem, #0f172a .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(147, 197, 253, .15), rgba(15, 23, 42, .06)), repeating-linear-gradient(45deg, #1e3a5f 0 .33rem, #0f172a .33rem .66rem);color-scheme:dark}:host-context(.dark) .christianity-shell,:host-context(.ion-palette-dark) .christianity-shell,:host-context(html.ion-palette-dark) .christianity-shell,:host-context(body.dark) .christianity-shell,:host-context([data-theme=\"dark\"]) .christianity-shell{border-color:#94a3b82e;background:#07111f}:host-context(.dark) .christianity-gallery-open,:host-context(.ion-palette-dark) .christianity-gallery-open,:host-context(html.ion-palette-dark) .christianity-gallery-open,:host-context(body.dark) .christianity-gallery-open,:host-context([data-theme=\"dark\"]) .christianity-gallery-open,:host-context(.dark) .christianity-secondary-action,:host-context(.ion-palette-dark) .christianity-secondary-action,:host-context(html.ion-palette-dark) .christianity-secondary-action,:host-context(body.dark) .christianity-secondary-action,:host-context([data-theme=\"dark\"]) .christianity-secondary-action,:host-context(.dark) .christianity-gallery-edition-strip button,:host-context(.ion-palette-dark) .christianity-gallery-edition-strip button,:host-context(html.ion-palette-dark) .christianity-gallery-edition-strip button,:host-context(body.dark) .christianity-gallery-edition-strip button,:host-context([data-theme=\"dark\"]) .christianity-gallery-edition-strip button{border-color:#93c5fd5c;background:linear-gradient(180deg,#1e3a5fd1,#0f172ae0),radial-gradient(circle at 20% 0%,rgba(96,165,250,.16),transparent 42%);color:var(--christianity-theme-ink);box-shadow:0 .55rem 1.2rem #0000003d}:host-context(.dark) .christianity-splash,:host-context(.ion-palette-dark) .christianity-splash,:host-context(html.ion-palette-dark) .christianity-splash,:host-context(body.dark) .christianity-splash,:host-context([data-theme=\"dark\"]) .christianity-splash,:host-context(.dark) .christianity-start,:host-context(.ion-palette-dark) .christianity-start,:host-context(html.ion-palette-dark) .christianity-start,:host-context(body.dark) .christianity-start,:host-context([data-theme=\"dark\"]) .christianity-start{border-color:#93c5fd38;background:radial-gradient(circle at 50% 18%,rgba(96,165,250,.16),transparent 22rem),linear-gradient(180deg,#0f172ae0,#07111ff7),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #00000047}:host-context(.dark) .christianity-start__cards article,:host-context(.ion-palette-dark) .christianity-start__cards article,:host-context(html.ion-palette-dark) .christianity-start__cards article,:host-context(body.dark) .christianity-start__cards article,:host-context([data-theme=\"dark\"]) .christianity-start__cards article,:host-context(.dark) .christianity-start__modes article,:host-context(.ion-palette-dark) .christianity-start__modes article,:host-context(html.ion-palette-dark) .christianity-start__modes article,:host-context(body.dark) .christianity-start__modes article,:host-context([data-theme=\"dark\"]) .christianity-start__modes article,:host-context(.dark) .christianity-start__status span,:host-context(.ion-palette-dark) .christianity-start__status span,:host-context(html.ion-palette-dark) .christianity-start__status span,:host-context(body.dark) .christianity-start__status span,:host-context([data-theme=\"dark\"]) .christianity-start__status span,:host-context(.dark) .christianity-start__modes article>span,:host-context(.ion-palette-dark) .christianity-start__modes article>span,:host-context(html.ion-palette-dark) .christianity-start__modes article>span,:host-context(body.dark) .christianity-start__modes article>span,:host-context([data-theme=\"dark\"]) .christianity-start__modes article>span{border-color:#94a3b833;background:#0f172aad;box-shadow:0 .75rem 1.7rem #00000038}:host-context(.dark) .christianity-splash p,:host-context(.ion-palette-dark) .christianity-splash p,:host-context(html.ion-palette-dark) .christianity-splash p,:host-context(body.dark) .christianity-splash p,:host-context([data-theme=\"dark\"]) .christianity-splash p,:host-context(.dark) .christianity-start__copy p,:host-context(.ion-palette-dark) .christianity-start__copy p,:host-context(html.ion-palette-dark) .christianity-start__copy p,:host-context(body.dark) .christianity-start__copy p,:host-context([data-theme=\"dark\"]) .christianity-start__copy p,:host-context(.dark) .christianity-start__cards p,:host-context(.ion-palette-dark) .christianity-start__cards p,:host-context(html.ion-palette-dark) .christianity-start__cards p,:host-context(body.dark) .christianity-start__cards p,:host-context([data-theme=\"dark\"]) .christianity-start__cards p,:host-context(.dark) .christianity-start__modes p,:host-context(.ion-palette-dark) .christianity-start__modes p,:host-context(html.ion-palette-dark) .christianity-start__modes p,:host-context(body.dark) .christianity-start__modes p,:host-context([data-theme=\"dark\"]) .christianity-start__modes p,:host-context(.dark) .christianity-header p,:host-context(.ion-palette-dark) .christianity-header p,:host-context(html.ion-palette-dark) .christianity-header p,:host-context(body.dark) .christianity-header p,:host-context([data-theme=\"dark\"]) .christianity-header p,:host-context(.dark) .christianity-match-player small,:host-context(.ion-palette-dark) .christianity-match-player small,:host-context(html.ion-palette-dark) .christianity-match-player small,:host-context(body.dark) .christianity-match-player small,:host-context([data-theme=\"dark\"]) .christianity-match-player small,:host-context(.dark) .christianity-scoreboard span,:host-context(.ion-palette-dark) .christianity-scoreboard span,:host-context(html.ion-palette-dark) .christianity-scoreboard span,:host-context(body.dark) .christianity-scoreboard span,:host-context([data-theme=\"dark\"]) .christianity-scoreboard span{color:#e2e8f0bd}:host-context(.dark) .christianity-turn,:host-context(.ion-palette-dark) .christianity-turn,:host-context(html.ion-palette-dark) .christianity-turn,:host-context(body.dark) .christianity-turn,:host-context([data-theme=\"dark\"]) .christianity-turn,:host-context(.dark) .christianity-leader,:host-context(.ion-palette-dark) .christianity-leader,:host-context(html.ion-palette-dark) .christianity-leader,:host-context(body.dark) .christianity-leader,:host-context([data-theme=\"dark\"]) .christianity-leader,:host-context(.dark) .christianity-offerings,:host-context(.ion-palette-dark) .christianity-offerings,:host-context(html.ion-palette-dark) .christianity-offerings,:host-context(body.dark) .christianity-offerings,:host-context([data-theme=\"dark\"]) .christianity-offerings,:host-context(.dark) .christianity-hidden-hand,:host-context(.ion-palette-dark) .christianity-hidden-hand,:host-context(html.ion-palette-dark) .christianity-hidden-hand,:host-context(body.dark) .christianity-hidden-hand,:host-context([data-theme=\"dark\"]) .christianity-hidden-hand,:host-context(.dark) .christianity-pile,:host-context(.ion-palette-dark) .christianity-pile,:host-context(html.ion-palette-dark) .christianity-pile,:host-context(body.dark) .christianity-pile,:host-context([data-theme=\"dark\"]) .christianity-pile,:host-context(.dark) .christianity-deck,:host-context(.ion-palette-dark) .christianity-deck,:host-context(html.ion-palette-dark) .christianity-deck,:host-context(body.dark) .christianity-deck,:host-context([data-theme=\"dark\"]) .christianity-deck,:host-context(.dark) .christianity-place,:host-context(.ion-palette-dark) .christianity-place,:host-context(html.ion-palette-dark) .christianity-place,:host-context(body.dark) .christianity-place,:host-context([data-theme=\"dark\"]) .christianity-place,:host-context(.dark) .christianity-match-strip,:host-context(.ion-palette-dark) .christianity-match-strip,:host-context(html.ion-palette-dark) .christianity-match-strip,:host-context(body.dark) .christianity-match-strip,:host-context([data-theme=\"dark\"]) .christianity-match-strip,:host-context(.dark) .christianity-actions,:host-context(.ion-palette-dark) .christianity-actions,:host-context(html.ion-palette-dark) .christianity-actions,:host-context(body.dark) .christianity-actions,:host-context([data-theme=\"dark\"]) .christianity-actions,:host-context(.dark) .christianity-history,:host-context(.ion-palette-dark) .christianity-history,:host-context(html.ion-palette-dark) .christianity-history,:host-context(body.dark) .christianity-history,:host-context([data-theme=\"dark\"]) .christianity-history{border-color:#94a3b82e;background:#0f172ad1}:host-context(.dark) .christianity-turn.is-own-turn,:host-context(.ion-palette-dark) .christianity-turn.is-own-turn,:host-context(html.ion-palette-dark) .christianity-turn.is-own-turn,:host-context(body.dark) .christianity-turn.is-own-turn,:host-context([data-theme=\"dark\"]) .christianity-turn.is-own-turn{border-color:#2dd4bf5c;background:#14534c5c}:host-context(.dark) .christianity-table,:host-context(.ion-palette-dark) .christianity-table,:host-context(html.ion-palette-dark) .christianity-table,:host-context(body.dark) .christianity-table,:host-context([data-theme=\"dark\"]) .christianity-table{background:linear-gradient(180deg,#10233d,#0b1728)}:host-context(.dark) .christianity-player-side,:host-context(.ion-palette-dark) .christianity-player-side,:host-context(html.ion-palette-dark) .christianity-player-side,:host-context(body.dark) .christianity-player-side,:host-context([data-theme=\"dark\"]) .christianity-player-side{background:#0f172a57}:host-context(.dark) .christianity-battle-zone,:host-context(.ion-palette-dark) .christianity-battle-zone,:host-context(html.ion-palette-dark) .christianity-battle-zone,:host-context(body.dark) .christianity-battle-zone,:host-context([data-theme=\"dark\"]) .christianity-battle-zone,:host-context(.dark) .christianity-shared-zone,:host-context(.ion-palette-dark) .christianity-shared-zone,:host-context(html.ion-palette-dark) .christianity-shared-zone,:host-context(body.dark) .christianity-shared-zone,:host-context([data-theme=\"dark\"]) .christianity-shared-zone{background:#0f172a94}:host-context(.dark) .christianity-battle-zone.is-placing-card,:host-context(.ion-palette-dark) .christianity-battle-zone.is-placing-card,:host-context(html.ion-palette-dark) .christianity-battle-zone.is-placing-card,:host-context(body.dark) .christianity-battle-zone.is-placing-card,:host-context([data-theme=\"dark\"]) .christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#1e3a5fd1,#0f172ab8),#0f172a94}:host-context(.dark) .christianity-card,:host-context(.ion-palette-dark) .christianity-card,:host-context(html.ion-palette-dark) .christianity-card,:host-context(body.dark) .christianity-card,:host-context([data-theme=\"dark\"]) .christianity-card,:host-context(.dark) .christianity-slot,:host-context(.ion-palette-dark) .christianity-slot,:host-context(html.ion-palette-dark) .christianity-slot,:host-context(body.dark) .christianity-slot,:host-context([data-theme=\"dark\"]) .christianity-slot{border-color:#94a3b83d;background:#0f172a8a}:host-context(.dark) .christianity-slot--play-target,:host-context(.ion-palette-dark) .christianity-slot--play-target,:host-context(html.ion-palette-dark) .christianity-slot--play-target,:host-context(body.dark) .christianity-slot--play-target,:host-context([data-theme=\"dark\"]) .christianity-slot--play-target{color:var(--christianity-theme-ink);background:linear-gradient(180deg,#2563eb3d,#0f172ac7),#0f172abd}:host-context(.dark) .christianity-slot--play-target span,:host-context(.ion-palette-dark) .christianity-slot--play-target span,:host-context(html.ion-palette-dark) .christianity-slot--play-target span,:host-context(body.dark) .christianity-slot--play-target span,:host-context([data-theme=\"dark\"]) .christianity-slot--play-target span,:host-context(.dark) .christianity-card strong,:host-context(.ion-palette-dark) .christianity-card strong,:host-context(html.ion-palette-dark) .christianity-card strong,:host-context(body.dark) .christianity-card strong,:host-context([data-theme=\"dark\"]) .christianity-card strong{background:#1e293beb}:host-context(.dark) .christianity-history-drawer,:host-context(.ion-palette-dark) .christianity-history-drawer,:host-context(html.ion-palette-dark) .christianity-history-drawer,:host-context(body.dark) .christianity-history-drawer,:host-context([data-theme=\"dark\"]) .christianity-history-drawer,:host-context(.dark) .christianity-rule-note,:host-context(.ion-palette-dark) .christianity-rule-note,:host-context(html.ion-palette-dark) .christianity-rule-note,:host-context(body.dark) .christianity-rule-note,:host-context([data-theme=\"dark\"]) .christianity-rule-note,:host-context(.dark) .christianity-preview-rule-note,:host-context(.ion-palette-dark) .christianity-preview-rule-note,:host-context(html.ion-palette-dark) .christianity-preview-rule-note,:host-context(body.dark) .christianity-preview-rule-note,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note{border-color:#94a3b82e;background:linear-gradient(180deg,#0f172af5,#111827f5),radial-gradient(circle at 8% 0%,rgba(96,165,250,.12),transparent 40%);box-shadow:0 1.5rem 4rem #0000006b}:host-context(.dark) .christianity-dialog-close,:host-context(.ion-palette-dark) .christianity-dialog-close,:host-context(html.ion-palette-dark) .christianity-dialog-close,:host-context(body.dark) .christianity-dialog-close,:host-context([data-theme=\"dark\"]) .christianity-dialog-close,:host-context(.dark) .christianity-floating-card-close,:host-context(.ion-palette-dark) .christianity-floating-card-close,:host-context(html.ion-palette-dark) .christianity-floating-card-close,:host-context(body.dark) .christianity-floating-card-close,:host-context([data-theme=\"dark\"]) .christianity-floating-card-close{border-color:#94a3b838;background:#0f172af0;color:var(--christianity-theme-ink);box-shadow:0 .35rem .8rem #0000004d}:host-context(.dark) .christianity-history-drawer header span,:host-context(.ion-palette-dark) .christianity-history-drawer header span,:host-context(html.ion-palette-dark) .christianity-history-drawer header span,:host-context(body.dark) .christianity-history-drawer header span,:host-context([data-theme=\"dark\"]) .christianity-history-drawer header span,:host-context(.dark) .christianity-rule-note strong,:host-context(.ion-palette-dark) .christianity-rule-note strong,:host-context(html.ion-palette-dark) .christianity-rule-note strong,:host-context(body.dark) .christianity-rule-note strong,:host-context([data-theme=\"dark\"]) .christianity-rule-note strong{background:#1e293beb}:host-context(.dark) .christianity-rule-note small,:host-context(.ion-palette-dark) .christianity-rule-note small,:host-context(html.ion-palette-dark) .christianity-rule-note small,:host-context(body.dark) .christianity-rule-note small,:host-context([data-theme=\"dark\"]) .christianity-rule-note small,:host-context(.dark) .christianity-preview-rule-note small,:host-context(.ion-palette-dark) .christianity-preview-rule-note small,:host-context(html.ion-palette-dark) .christianity-preview-rule-note small,:host-context(body.dark) .christianity-preview-rule-note small,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note small,:host-context(.dark) .christianity-gallery-drawer header p,:host-context(.ion-palette-dark) .christianity-gallery-drawer header p,:host-context(html.ion-palette-dark) .christianity-gallery-drawer header p,:host-context(body.dark) .christianity-gallery-drawer header p,:host-context([data-theme=\"dark\"]) .christianity-gallery-drawer header p,:host-context(.dark) .christianity-gallery-controls label,:host-context(.ion-palette-dark) .christianity-gallery-controls label,:host-context(html.ion-palette-dark) .christianity-gallery-controls label,:host-context(body.dark) .christianity-gallery-controls label,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls label{color:#e2e8f0ad}:host-context(.dark) .christianity-rule-note p,:host-context(.ion-palette-dark) .christianity-rule-note p,:host-context(html.ion-palette-dark) .christianity-rule-note p,:host-context(body.dark) .christianity-rule-note p,:host-context([data-theme=\"dark\"]) .christianity-rule-note p,:host-context(.dark) .christianity-rule-note ul,:host-context(.ion-palette-dark) .christianity-rule-note ul,:host-context(html.ion-palette-dark) .christianity-rule-note ul,:host-context(body.dark) .christianity-rule-note ul,:host-context([data-theme=\"dark\"]) .christianity-rule-note ul,:host-context(.dark) .christianity-preview-rule-note p,:host-context(.ion-palette-dark) .christianity-preview-rule-note p,:host-context(html.ion-palette-dark) .christianity-preview-rule-note p,:host-context(body.dark) .christianity-preview-rule-note p,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note p,:host-context(.dark) .christianity-offerings-note p,:host-context(.ion-palette-dark) .christianity-offerings-note p,:host-context(html.ion-palette-dark) .christianity-offerings-note p,:host-context(body.dark) .christianity-offerings-note p,:host-context([data-theme=\"dark\"]) .christianity-offerings-note p{color:#e2e8f0cc}:host-context(.dark) .christianity-gallery-controls input,:host-context(.ion-palette-dark) .christianity-gallery-controls input,:host-context(html.ion-palette-dark) .christianity-gallery-controls input,:host-context(body.dark) .christianity-gallery-controls input,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls input,:host-context(.dark) .christianity-gallery-controls select,:host-context(.ion-palette-dark) .christianity-gallery-controls select,:host-context(html.ion-palette-dark) .christianity-gallery-controls select,:host-context(body.dark) .christianity-gallery-controls select,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls select,:host-context(.dark) .christianity-offering-row,:host-context(.ion-palette-dark) .christianity-offering-row,:host-context(html.ion-palette-dark) .christianity-offering-row,:host-context(body.dark) .christianity-offering-row,:host-context([data-theme=\"dark\"]) .christianity-offering-row,:host-context(.dark) .christianity-offerings-note,:host-context(.ion-palette-dark) .christianity-offerings-note,:host-context(html.ion-palette-dark) .christianity-offerings-note,:host-context(body.dark) .christianity-offerings-note,:host-context([data-theme=\"dark\"]) .christianity-offerings-note{border-color:#94a3b833;background:#0f172ac7;color:var(--christianity-theme-ink)}:host-context(.dark) .christianity-history-grid,:host-context(.ion-palette-dark) .christianity-history-grid,:host-context(html.ion-palette-dark) .christianity-history-grid,:host-context(body.dark) .christianity-history-grid,:host-context([data-theme=\"dark\"]) .christianity-history-grid,:host-context(.dark) .christianity-offering-list,:host-context(.ion-palette-dark) .christianity-offering-list,:host-context(html.ion-palette-dark) .christianity-offering-list,:host-context(body.dark) .christianity-offering-list,:host-context([data-theme=\"dark\"]) .christianity-offering-list,:host-context(.dark) .christianity-gallery-grid,:host-context(.ion-palette-dark) .christianity-gallery-grid,:host-context(html.ion-palette-dark) .christianity-gallery-grid,:host-context(body.dark) .christianity-gallery-grid,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid,:host-context(.dark) .christianity-preview-rule-note,:host-context(.ion-palette-dark) .christianity-preview-rule-note,:host-context(html.ion-palette-dark) .christianity-preview-rule-note,:host-context(body.dark) .christianity-preview-rule-note,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note{scrollbar-color:rgba(148,163,184,.54) rgba(15,23,42,.86)}:host-context(.dark) .christianity-rule-note-icon,:host-context(.ion-palette-dark) .christianity-rule-note-icon,:host-context(html.ion-palette-dark) .christianity-rule-note-icon,:host-context(body.dark) .christianity-rule-note-icon,:host-context([data-theme=\"dark\"]) .christianity-rule-note-icon{background:#60a5fa29;color:#bfdbfe;box-shadow:inset 0 0 0 1px #93c5fd38}:host-context(.dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(body.dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-history-grid::-webkit-scrollbar-track,:host-context(.dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(body.dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-offering-list::-webkit-scrollbar-track,:host-context(.dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(body.dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid::-webkit-scrollbar-track{background:#0f172adb}:host-context(.dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(.dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(.dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid::-webkit-scrollbar-thumb{border-color:#0f172adb;background:#94a3b88a}@media (max-width: 720px){:host{overflow-x:hidden}.christianity-shell{padding:.55rem 0 .65rem;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-match-strip,.christianity-actions{box-sizing:border-box;width:100%;padding-right:max(.5rem,env(safe-area-inset-right));padding-left:max(.5rem,env(safe-area-inset-left))}.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-header-actions{align-items:flex-end;flex-direction:column}.christianity-start__cards,.christianity-start__hero{grid-template-columns:minmax(0,1fr)}.christianity-start__fan{min-height:10.5rem}.christianity-start__fan val-christianity-card{width:clamp(5.2rem,22vw,6.4rem)}.christianity-start__modes{grid-template-columns:repeat(2,minmax(0,1fr))}.christianity-splash,.christianity-start{min-height:min(30rem,calc(100dvh - 7rem));padding-right:max(.65rem,env(safe-area-inset-right));padding-left:max(.65rem,env(safe-area-inset-left));border-right:0;border-left:0;border-radius:0}.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{height:6.85rem;min-height:0;max-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-gallery-controls{grid-template-columns:minmax(0,1fr)}.christianity-gallery-grid{grid-template-columns:repeat(auto-fill,minmax(5.35rem,6.1rem));justify-content:center}.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]" }, { kind: "component", type: ChristianityCardComponent, selector: "val-christianity-card", inputs: ["card", "variant"] }] }); }
1739
+ }
1740
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
1741
+ type: Component,
1742
+ args: [{ selector: 'val-christianity-game', standalone: true, imports: [CdkDrag, CdkDropList, LightRippleDirective, ChristianityCardComponent], template: `
1743
+ <main class="christianity-shell">
1744
+ <section class="christianity-header">
1745
+ <div>
1746
+ <p>{{ t('christianityEyebrow') }}</p>
1747
+ <h1>{{ t('christianityTitle') }}</h1>
1748
+ </div>
1749
+ <div class="christianity-header-actions">
1750
+ @if (screen() !== 'splash') {
1751
+ <button type="button" class="christianity-gallery-open" valLightRipple (click)="openGallery()">
1752
+ {{ t('christianityGallery') }}
1753
+ </button>
1754
+ }
1755
+ @if (screen() === 'table') {
1756
+ <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
1757
+ <span>{{ t('christianityTurn') }}</span>
1758
+ <strong>{{ currentPlayer().displayName }}</strong>
1759
+ </div>
1760
+ }
1761
+ </div>
1762
+ </section>
1763
+
1764
+ @if (screen() === 'splash') {
1765
+ <section class="christianity-splash" role="status" aria-live="polite">
1766
+ <div class="christianity-splash__mark">
1767
+ <i aria-hidden="true"></i>
1768
+ <i aria-hidden="true"></i>
1769
+ <i aria-hidden="true"></i>
1770
+ </div>
1771
+ <div>
1772
+ <span>{{ t('christianitySplashEyebrow') }}</span>
1773
+ <h2>{{ t('christianitySplashTitle') }}</h2>
1774
+ <p>{{ splashStatusText() }}</p>
1775
+ </div>
1776
+ </section>
1777
+ } @else if (screen() === 'home') {
1778
+ <section class="christianity-start">
1779
+ <div class="christianity-start__hero">
1780
+ <div class="christianity-start__copy">
1781
+ <span>{{ t('christianityGenesisEdition') }}</span>
1782
+ <h2>{{ t('christianityStartTitle') }}</h2>
1783
+ <p>{{ t('christianityStartBody') }}</p>
1784
+ </div>
1785
+ <div class="christianity-start__fan" aria-hidden="true">
1786
+ @for (card of startFeaturedCards(); track card.id) {
1787
+ <val-christianity-card
1788
+ [card]="definitionToRenderCard(card)"
1789
+ variant="hand"
1790
+ [style.transform]="startFeaturedCardTransform($index)"
1791
+ ></val-christianity-card>
1792
+ }
1793
+ </div>
1794
+ </div>
1795
+ <div class="christianity-start__cards">
1796
+ <article>
1797
+ <strong>{{ t('christianityTutorialMode') }}</strong>
1798
+ <p>{{ t('christianityTutorialModeBody') }}</p>
1799
+ <button type="button" class="christianity-primary-action" valLightRipple (click)="startTutorial()">
1800
+ {{ t('christianityStartTutorial') }}
1801
+ </button>
1802
+ </article>
1803
+ <article>
1804
+ <strong>{{ t('christianityGallery') }}</strong>
1805
+ <p>{{ t('christianityGalleryModeBody') }}</p>
1806
+ <button type="button" class="christianity-secondary-action" valLightRipple (click)="openGallery()">
1807
+ {{ t('christianityOpenGallery') }}
1808
+ </button>
1809
+ </article>
1810
+ <article>
1811
+ <strong>{{ t('christianityHowToPlay') }}</strong>
1812
+ <p>{{ t('christianityHowToPlayBody') }}</p>
1813
+ <button type="button" class="christianity-secondary-action" valLightRipple (click)="inspectHowToPlay()">
1814
+ {{ t('learnMore') }}
1815
+ </button>
1816
+ </article>
1817
+ </div>
1818
+ <div class="christianity-start__status" [attr.aria-label]="t('christianityEditionStatus')">
1819
+ <span>{{ galleryEditionLabel() }}</span>
1820
+ <span>{{ t('christianityTutorialActive') }}</span>
1821
+ <span>{{ catalogStatusLabel() }}</span>
1822
+ </div>
1823
+ <section class="christianity-start__modes" [attr.aria-label]="t('christianityFutureModes')">
1824
+ @for (mode of futureModes(); track mode.title) {
1825
+ <article>
1826
+ <strong>{{ mode.title }}</strong>
1827
+ <p>{{ mode.body }}</p>
1828
+ <span>{{ t('soonTitle') }}</span>
1829
+ </article>
1830
+ }
1831
+ </section>
1832
+ </section>
1833
+ } @else {
1834
+ <section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
1835
+ <article class="christianity-match-player">
1836
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
1837
+ <div>
1838
+ <strong>{{ player().displayName }}</strong>
1839
+ <small>{{ playerLeaderDisplayName(player()) }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
1840
+ </div>
1841
+ </article>
1842
+ <div class="christianity-scoreboard">
1843
+ <span>{{ t('christianityMatch') }}</span>
1844
+ <strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
1845
+ </div>
1846
+ <article class="christianity-match-player christianity-match-player--opponent">
1847
+ <span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
1848
+ <div>
1849
+ <strong>{{ opponent().displayName }}</strong>
1850
+ <small>{{ playerLeaderDisplayName(opponent()) }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
1851
+ </div>
1852
+ </article>
1853
+ </section>
1854
+
1855
+ <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
1856
+ <div class="christianity-hand-meter christianity-hand-meter--opponent">
1857
+ <span>{{ t('christianityHand') }}</span>
1858
+ <strong>{{ opponentHandCount() }}</strong>
1859
+ </div>
1860
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
1861
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
1862
+ <button
1863
+ type="button"
1864
+ class="christianity-card-preview-card christianity-card-frame christianity-card-frame--back"
1865
+ valLightRipple
1866
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
1867
+ [attr.aria-label]="t('christianityHiddenCard')"
1868
+ ></button>
1869
+ }
1870
+ </section>
1871
+ </section>
1872
+
1873
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
1874
+ <section class="christianity-player-side christianity-player-side--opponent">
1875
+ <section class="christianity-player-rack christianity-player-rack--opponent">
1876
+ <div class="christianity-offerings-zone">
1877
+ <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
1878
+ <i aria-hidden="true"></i>
1879
+ <i aria-hidden="true"></i>
1880
+ <i aria-hidden="true"></i>
1881
+ <span>{{ t('christianityOfferings') }}</span>
1882
+ <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
1883
+ </button>
1884
+ </div>
1885
+ <button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
1886
+ <val-christianity-card [card]="leaderRenderCard(opponent())" variant="table"></val-christianity-card>
1887
+ </button>
1888
+ <span class="christianity-rack-spacer" aria-hidden="true"></span>
1889
+ </section>
1890
+
1891
+ <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
1892
+ @for (slot of battleSlots('P2'); track slot.trackId) {
1893
+ @if (slot.card) {
1894
+ <button
1895
+ type="button"
1896
+ class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
1897
+ valLightRipple
1898
+ [class.is-target]="selectedAttacker()"
1899
+ (click)="handleOpponentCharacter(slot.card)"
1900
+ >
1901
+ <val-christianity-card [card]="characterRenderCard(slot.card)" variant="table"></val-christianity-card>
1902
+ </button>
1903
+ } @else {
1904
+ <span class="christianity-slot"></span>
1905
+ }
1906
+ }
1907
+ </section>
1908
+ </section>
1909
+
1910
+ <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
1911
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="openHistory()">
1912
+ <i aria-hidden="true"></i>
1913
+ <i aria-hidden="true"></i>
1914
+ <i aria-hidden="true"></i>
1915
+ <span>{{ t('christianityHistory') }}</span>
1916
+ <strong>{{ game().historyZone.length }}</strong>
1917
+ </button>
1918
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
1919
+ <i aria-hidden="true"></i>
1920
+ <i aria-hidden="true"></i>
1921
+ <i aria-hidden="true"></i>
1922
+ <span>{{ t('christianityDeck') }}</span>
1923
+ <strong>{{ game().sharedDeck.length }}</strong>
1924
+ </button>
1925
+ <div class="christianity-zone-card">
1926
+ <span>{{ t('christianityPlace') }}</span>
1927
+ <strong>{{ t('christianityEmpty') }}</strong>
1928
+ </div>
1929
+ </section>
1930
+
1931
+ <section class="christianity-player-side">
1932
+ <section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
1933
+ @for (slot of battleSlots('P1'); track slot.trackId) {
1934
+ @if (slot.card) {
1935
+ <button
1936
+ type="button"
1937
+ class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
1938
+ valLightRipple
1939
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
1940
+ [class.is-exhausted]="!slot.card.canAttack"
1941
+ [class.is-ready-attacker]="isOwnTurn() && slot.card.canAttack"
1942
+ (click)="selectAttacker(slot.card)"
1943
+ >
1944
+ <val-christianity-card [card]="characterRenderCard(slot.card)" variant="table"></val-christianity-card>
1945
+ </button>
1946
+ } @else {
1947
+ <button
1948
+ type="button"
1949
+ class="christianity-slot"
1950
+ cdkDropList
1951
+ [id]="battleSlotDropId($index)"
1952
+ [cdkDropListData]="$index"
1953
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
1954
+ [cdkDropListEnterPredicate]="canDropOnBattleSlot"
1955
+ [cdkDropListSortingDisabled]="true"
1956
+ [class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
1957
+ valLightRipple
1958
+ (cdkDropListDropped)="dropOnBattleSlot($event, $index)"
1959
+ (click)="playSelectedCard($index)"
1960
+ >
1961
+ @if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
1962
+ <span>{{ t('christianityPlayHere') }}</span>
1963
+ }
1964
+ </button>
1965
+ }
1966
+ }
1967
+ </section>
1968
+
1969
+ <section class="christianity-player-rack">
1970
+ <div class="christianity-offerings-zone">
1971
+ <button
1972
+ type="button"
1973
+ class="christianity-offering-pile"
1974
+ cdkDropList
1975
+ id="christianity-offerings-drop"
1976
+ valLightRipple
1977
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
1978
+ [class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
1979
+ [cdkDropListEnterPredicate]="canDropOnOfferings"
1980
+ [cdkDropListSortingDisabled]="true"
1981
+ (cdkDropListDropped)="dropOnOfferings($event)"
1982
+ (click)="handleOfferingPile('P1')"
1983
+ >
1984
+ <i aria-hidden="true"></i>
1985
+ <i aria-hidden="true"></i>
1986
+ <i aria-hidden="true"></i>
1987
+ <span>{{ t('christianityOfferings') }}</span>
1988
+ <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
1989
+ </button>
1990
+ </div>
1991
+ <button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple (click)="inspectLeader('P1')">
1992
+ <val-christianity-card [card]="leaderRenderCard(player())" variant="table"></val-christianity-card>
1993
+ </button>
1994
+ <div class="christianity-player-command">
1995
+ <div class="christianity-player-badge">
1996
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
1997
+ <strong>{{ player().displayName }}</strong>
1998
+ </div>
1999
+ <button
2000
+ type="button"
2001
+ class="christianity-end-turn"
2002
+ (click)="endTurn()"
2003
+ >
2004
+ {{ t('christianityEndTurn') }}
2005
+ </button>
2006
+ </div>
2007
+ </section>
2008
+ </section>
2009
+ </section>
2010
+
2011
+ <section class="christianity-hand-shelf">
2012
+ <div class="christianity-hand-meter">
2013
+ <span>{{ t('christianityHand') }}</span>
2014
+ <strong>{{ player().hand?.length ?? 0 }}</strong>
2015
+ </div>
2016
+ <section
2017
+ class="christianity-hand-fan"
2018
+ cdkDropList
2019
+ id="christianity-hand-source"
2020
+ [cdkDropListConnectedTo]="dropTargetIds()"
2021
+ [attr.aria-label]="t('christianityYourHand')"
2022
+ (pointerleave)="clearHoveredHandIndex()"
2023
+ >
2024
+ @for (cardId of player().hand ?? []; track cardId + $index) {
2025
+ @let card = cardDefinition(cardId);
2026
+ <div
2027
+ class="christianity-hand-card-wrap"
2028
+ [class.is-selected]="selectedHandCard() === cardId"
2029
+ [class.is-dragging]="draggingCardId() === cardId"
2030
+ [style.z-index]="handCardZIndex($index)"
2031
+ [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
2032
+ (pointerenter)="setHoveredHandIndex($index)"
2033
+ (pointerdown)="setHoveredHandIndex($index)"
2034
+ (pointerup)="releaseHoveredHand($event)"
2035
+ >
2036
+ <button
2037
+ type="button"
2038
+ class="christianity-card-preview-card christianity-card-preview-card--hand christianity-render-card-button"
2039
+ cdkDrag
2040
+ valLightRipple
2041
+ [cdkDragData]="cardId"
2042
+ [cdkDragDisabled]="!canPlay(card)"
2043
+ [class.is-selected]="selectedHandCard() === cardId"
2044
+ [class.is-disabled]="!canPlay(card)"
2045
+ (cdkDragStarted)="startDraggingCard(cardId)"
2046
+ (cdkDragEnded)="endDraggingCard()"
2047
+ (click)="selectHandCard(cardId)"
2048
+ >
2049
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="hand"></val-christianity-card>
2050
+ </button>
2051
+ <button
2052
+ type="button"
2053
+ class="christianity-card-eye"
2054
+ [attr.aria-label]="t('christianityPreviewCard')"
2055
+ (click)="inspectHandCard(cardId, true); $event.stopPropagation()"
2056
+ ></button>
2057
+ </div>
2058
+ }
2059
+ </section>
2060
+ </section>
2061
+ }
2062
+
2063
+ @if (selectedPreview()) {
2064
+ <button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
2065
+ <aside
2066
+ class="christianity-floating-card-shell"
2067
+ aria-live="polite"
2068
+ >
2069
+ <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
2070
+ {{ t('close') }}
2071
+ </button>
2072
+ <div
2073
+ class="christianity-floating-card"
2074
+ [style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
2075
+ [style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
2076
+ [style.--preview-shift-x]="previewTilt().shiftX + 'px'"
2077
+ [style.--preview-shift-y]="previewTilt().shiftY + 'px'"
2078
+ (pointermove)="tiltPreview($event)"
2079
+ (pointerleave)="resetPreviewTilt()"
2080
+ >
2081
+ @if (selectedPreviewRenderCard(); as previewCard) {
2082
+ <val-christianity-card [card]="previewCard" variant="full"></val-christianity-card>
2083
+ }
2084
+ </div>
2085
+ @if (previewRule(); as rule) {
2086
+ <div class="christianity-preview-rule-note">
2087
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
2088
+ <div>
2089
+ <small>{{ t('christianityCardRule') }}</small>
2090
+ <strong>{{ rule.title }}</strong>
2091
+ <p>{{ rule.body }}</p>
2092
+ </div>
2093
+ </div>
2094
+ }
2095
+ </aside>
2096
+ }
2097
+
2098
+ @if (selectedInfo(); as info) {
2099
+ <button type="button" class="christianity-info-backdrop" [attr.aria-label]="t('close')" (click)="closeInfo()"></button>
2100
+ <aside class="christianity-info-panel" aria-live="polite">
2101
+ <button type="button" class="christianity-dialog-close christianity-info-close" (click)="closeInfo()">
2102
+ {{ t('close') }}
2103
+ </button>
2104
+ <div class="christianity-rule-note">
2105
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
2106
+ <div>
2107
+ <small>{{ info.eyebrow }}</small>
2108
+ <h2>{{ info.title }}</h2>
2109
+ <strong>{{ info.meta }}</strong>
2110
+ <p>{{ info.body }}</p>
2111
+ <ul>
2112
+ @for (fact of info.facts; track fact) {
2113
+ <li>{{ fact }}</li>
2114
+ }
2115
+ </ul>
2116
+ </div>
2117
+ </div>
2118
+ </aside>
2119
+ }
2120
+
2121
+ @if (screen() === 'table') {
2122
+ <section class="christianity-actions" aria-live="polite">
2123
+ <p>{{ statusText() }}</p>
2124
+ <div>
2125
+ <button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
2126
+ {{ selectedActionLabel() }}
2127
+ </button>
2128
+ <button type="button" (click)="resetMock()">
2129
+ {{ t('christianityReset') }}
2130
+ </button>
2131
+ </div>
2132
+ </section>
2133
+ }
2134
+
2135
+ @if (showHistory()) {
2136
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
2137
+ <section class="christianity-history-drawer">
2138
+ <header>
2139
+ <h2>{{ t('christianityHistory') }}</h2>
2140
+ <div class="christianity-dialog-actions">
2141
+ <span>{{ game().historyZone.length }}</span>
2142
+ <button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
2143
+ {{ t('close') }}
2144
+ </button>
2145
+ </div>
2146
+ </header>
2147
+ @if (game().historyZone.length) {
2148
+ <div class="christianity-history-grid">
2149
+ @for (cardId of game().historyZone; track cardId + $index) {
2150
+ @let card = cardDefinition(cardId);
2151
+ <button type="button" class="christianity-gallery-card-button christianity-render-card-button" valLightRipple (click)="inspectHistoryCard(cardId)">
2152
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="list"></val-christianity-card>
2153
+ </button>
2154
+ }
2155
+ </div>
2156
+ } @else {
2157
+ <p>{{ t('christianityHistoryEmpty') }}</p>
2158
+ }
2159
+ </section>
2160
+ }
2161
+
2162
+ @if (showGallery()) {
2163
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseGallery')" (click)="closeGallery()"></button>
2164
+ <section class="christianity-history-drawer christianity-gallery-drawer">
2165
+ <header>
2166
+ <div>
2167
+ <h2>{{ t('christianityGallery') }}</h2>
2168
+ <p>{{ galleryEditionLabel() }}</p>
2169
+ </div>
2170
+ <div class="christianity-dialog-actions">
2171
+ <span>{{ galleryCards().length }}</span>
2172
+ <button type="button" class="christianity-dialog-close" (click)="closeGallery()">
2173
+ {{ t('close') }}
2174
+ </button>
2175
+ </div>
2176
+ </header>
2177
+ <div class="christianity-gallery-controls">
2178
+ <label>
2179
+ <span>{{ t('christianityGallerySearch') }}</span>
2180
+ <input type="search" [value]="gallerySearch()" (input)="setGallerySearch($event)" [placeholder]="t('christianityGallerySearchPlaceholder')" />
2181
+ </label>
2182
+ <label>
2183
+ <span>{{ t('christianityGalleryFilter') }}</span>
2184
+ <select [value]="galleryType()" (change)="setGalleryType($event)">
2185
+ @for (option of galleryTypeOptions(); track option.value) {
2186
+ <option [value]="option.value">{{ option.label }}</option>
2187
+ }
2188
+ </select>
2189
+ </label>
2190
+ </div>
2191
+ <div class="christianity-gallery-edition-strip">
2192
+ <button type="button" class="is-active" valLightRipple>
2193
+ <img [src]="galleryEditionIcon()" alt="" />
2194
+ <span>{{ t('christianityGenesisEdition') }}</span>
2195
+ </button>
2196
+ </div>
2197
+ <div class="christianity-gallery-grid">
2198
+ @for (card of galleryCards(); track card.id) {
2199
+ <button type="button" class="christianity-gallery-card-button christianity-render-card-button" valLightRipple (click)="inspectGalleryCard(card.id)">
2200
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="list"></val-christianity-card>
2201
+ </button>
2202
+ } @empty {
2203
+ <p>{{ t('christianityGalleryEmpty') }}</p>
2204
+ }
2205
+ </div>
2206
+ </section>
2207
+ }
2208
+
2209
+ @if (offeringsSeat()) {
2210
+ @let offeringPlayer = game().players[offeringsSeat()!];
2211
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
2212
+ <section class="christianity-history-drawer christianity-offerings-drawer">
2213
+ <header>
2214
+ <h2>{{ t('christianityOfferings') }}</h2>
2215
+ <div class="christianity-dialog-actions">
2216
+ <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
2217
+ <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
2218
+ {{ t('close') }}
2219
+ </button>
2220
+ </div>
2221
+ </header>
2222
+ <div class="christianity-offerings-note">
2223
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
2224
+ <p>{{ t('christianityOfferingsRuleBody') }}</p>
2225
+ </div>
2226
+ <div class="christianity-offering-list">
2227
+ @for (offering of offeringPlayer.offerings; track offering.instanceId) {
2228
+ <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
2229
+ <button type="button" class="christianity-offering-card christianity-render-card-button" valLightRipple (click)="inspectOffering(offering)">
2230
+ <val-christianity-card [card]="offeringRenderCard(offering)" variant="list"></val-christianity-card>
2231
+ </button>
2232
+ <div>
2233
+ <strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
2234
+ <p>{{ offeringAbilityText(offering) }}</p>
2235
+ @if (offering.abilityName) {
2236
+ <button
2237
+ type="button"
2238
+ [disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
2239
+ (click)="useOfferingAbility(offering, offeringsSeat()!)"
2240
+ >
2241
+ {{ t('christianityUseAbility') }}
2242
+ </button>
2243
+ }
2244
+ </div>
2245
+ </article>
2246
+ }
2247
+ </div>
2248
+ </section>
2249
+ }
2250
+ </main>
2251
+ `, styles: [":host{--christianity-theme-ink: var(--val-text-color, #1f2933);--christianity-theme-surface: #ffffff;--christianity-theme-parchment: #eff6ff;--christianity-theme-olive: #1d4ed8;--christianity-theme-gold: #2563eb;--christianity-theme-gold-soft: rgba(37, 99, 235, .16);--christianity-theme-gold-ring: rgba(37, 99, 235, .44);--christianity-theme-glow: rgba(37, 99, 235, .24);--christianity-theme-focus: #2563eb;--christianity-theme-shadow: rgba(37, 99, 235, .15);--christianity-theme-shadow-strong: rgba(37, 99, 235, .26);--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-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;min-width:0}.christianity-gallery-open{min-height:2.2rem;padding:0 .75rem;border:1px solid var(--christianity-theme-gold-ring);border-radius:999px;background:linear-gradient(180deg,#eff6fffa,#fffffffa),radial-gradient(circle at 20% 0%,var(--christianity-theme-gold-soft),transparent 42%);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800;box-shadow:0 .55rem 1.2rem #2563eb1a}.christianity-splash,.christianity-start{min-height:min(34rem,calc(100dvh - 8rem));border:1px solid rgba(37,99,235,.18);border-radius:.9rem;background:radial-gradient(circle at 50% 18%,rgba(37,99,235,.16),transparent 22rem),linear-gradient(180deg,#eff6ffed,#fffffff7),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #2563eb1f}.christianity-splash{display:grid;place-items:center;align-content:center;gap:1.2rem;padding:2.5rem 1.25rem;text-align:center}.christianity-splash__mark{position:relative;width:6.4rem;height:8.9rem;filter:drop-shadow(0 1rem 1.8rem rgba(82,64,28,.18))}.christianity-splash__mark i{position:absolute;inset:0;border:1px solid rgba(36,48,68,.16);border-radius:.7rem;background:radial-gradient(circle at 76% 12%,rgba(250,204,21,.9) 0 .42rem,transparent .45rem),linear-gradient(180deg,#fffffffa,#f8fafcfa)}.christianity-splash__mark i:nth-child(1){transform:translate(-1.1rem) rotate(-9deg)}.christianity-splash__mark i:nth-child(2){transform:translateY(-.32rem)}.christianity-splash__mark i:nth-child(3){transform:translate(1.1rem) rotate(9deg)}.christianity-splash__mark:after{content:\"\";position:absolute;inset:2.1rem 1.05rem 2.5rem;border-radius:.55rem;background:radial-gradient(circle at 50% 44%,rgba(245,199,85,.7),transparent 36%),linear-gradient(135deg,#5f6f2a33,#5f6f2a14)}.christianity-splash span,.christianity-start__copy span{color:var(--christianity-theme-olive);font-size:.76rem;font-weight:900;text-transform:uppercase}.christianity-splash h2,.christianity-start h2,.christianity-start p{margin:0}.christianity-splash h2{margin-top:.2rem;font-size:clamp(1.65rem,7vw,2.7rem);line-height:1}.christianity-splash p{max-width:26rem;margin:.55rem auto 0;color:#1f2933ad;font-size:.96rem}.christianity-start{display:grid;align-content:center;gap:1rem;padding:clamp(.85rem,2vw,1.35rem)}.christianity-start__hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,18rem);gap:1rem;align-items:center}.christianity-start__copy{display:grid;gap:.45rem;max-width:36rem}.christianity-start h2{font-size:clamp(1.6rem,6vw,2.5rem);line-height:1.02}.christianity-start__copy p,.christianity-start__cards p,.christianity-start__modes p{color:#1f2933ad;line-height:1.42}.christianity-start__fan{position:relative;display:grid;place-items:center;min-height:13rem;overflow:visible}.christianity-start__fan val-christianity-card{position:absolute;width:clamp(5.7rem,12vw,7.2rem);transform-origin:50% 92%;filter:drop-shadow(0 1rem 1.5rem rgba(82,64,28,.18))}.christianity-start__cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.christianity-start__cards article,.christianity-start__modes article{display:grid;gap:.65rem;align-content:start;padding:.95rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#ffffffd1;box-shadow:0 .75rem 1.7rem #52401c14}.christianity-start__cards article{min-height:11rem}.christianity-start__cards strong{font-size:1.05rem}.christianity-start__status{display:flex;flex-wrap:wrap;gap:.45rem}.christianity-start__status span,.christianity-start__modes article>span{display:inline-flex;align-items:center;width:fit-content;min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(37,99,235,.22);border-radius:999px;background:#eff6ffe0;color:#1f2933b8;font-size:.75rem;font-weight:850}.christianity-start__modes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.christianity-start__modes article{min-height:8.5rem;background:#f8fafcb8;box-shadow:none;opacity:.82}.christianity-start__modes strong{font-size:.92rem}.christianity-start__modes p{margin:0;font-size:.8rem}.christianity-primary-action,.christianity-secondary-action{justify-self:start;min-height:2.5rem;padding:0 .9rem;border-radius:999px;font:inherit;font-weight:900}.christianity-primary-action{border:1px solid rgba(16,42,67,.16);background:#102a43;color:#fff}.christianity-secondary-action{border:1px solid var(--christianity-theme-gold-ring);background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink)}.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-render-card-button{display:block;padding:0;overflow:visible;border:0;background:transparent;box-shadow:none}.christianity-render-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-gallery-card-button{display:block;width:min(100%,6.8rem);min-width:0;aspect-ratio:var(--christianity-card-aspect);padding:0;overflow:visible;border:0;background:transparent;color:inherit;font:inherit;text-align:left;box-shadow:none}.christianity-gallery-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-card-preview-card--hand.christianity-render-card-button,.christianity-card-preview-card--battle.christianity-render-card-button,.christianity-leader-card.christianity-render-card-button{aspect-ratio:var(--christianity-card-aspect)}.christianity-card-preview-card--hand.christianity-render-card-button:hover val-christianity-card,.christianity-card-preview-card--hand.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-target val-christianity-card,.christianity-leader-card.christianity-render-card-button.is-target val-christianity-card{filter:drop-shadow(0 0 .55rem rgba(214,162,29,.35))}.christianity-card-preview-card--battle.christianity-render-card-button.is-ready-attacker val-christianity-card{filter:drop-shadow(0 .45rem .8rem rgba(95,111,42,.16))}.christianity-card-preview-card--battle.christianity-render-card-button.is-selected{transform:translateY(-.28rem)}.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-header span.is-offering-pips,.christianity-full-card-cost.is-offering-pips,.christianity-offering-card span.is-offering-pips{grid-auto-flow:column;gap:.14rem;min-width:auto;padding:0 .28rem}.christianity-card-frame-header span.is-offering-pips i,.christianity-full-card-cost.is-offering-pips i,.christianity-offering-card span.is-offering-pips i,.christianity-full-card-pips i{display:block;width:.72rem;height:.72rem;border-radius:999px;background:radial-gradient(circle at 34% 28%,rgba(255,255,255,.9) 0 .12rem,transparent .13rem),#ffd91a;box-shadow:inset 0 -.08rem #52401c2e,0 .12rem .24rem #102a431a}.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);height:7.1rem;min-height:0;max-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>.cdk-drag-placeholder,.christianity-slot>.cdk-drag-placeholder{display:none}.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;grid-template-rows:minmax(0,auto) auto;gap:.55rem;width:min(17.5rem,calc(52dvh - 3rem),calc(100vw - 1.25rem));max-height:calc(100dvh - 1rem);padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-floating-card{position:relative;z-index:1;display:block;width:100%;min-height:0;padding:0;border:0;border-radius:.75rem;background:transparent;box-shadow:0 0 2.2rem var(--christianity-theme-glow);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-floating-card val-christianity-card{display:block;width:100%;min-height:0}.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-type-icon img{width:1rem;height:1rem;object-fit:contain}.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-stats .christianity-full-card-pips{display:inline-grid;grid-auto-flow:column;gap:.2rem;justify-self:start;padding:0;background:transparent}.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-preview-rule-note{position:relative;z-index:4;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.75rem .85rem;border:1px solid rgba(36,48,68,.14);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(37,99,235,.08),transparent 44%);box-shadow:0 .75rem 1.6rem #102a431f}.christianity-preview-rule-note small,.christianity-preview-rule-note strong,.christianity-preview-rule-note p{margin:0}.christianity-preview-rule-note small{color:#1f293394;font-size:.68rem;font-weight:800;text-transform:uppercase}.christianity-preview-rule-note strong{display:block;margin-top:.08rem;font-size:.92rem;line-height:1.1}.christianity-preview-rule-note p{margin-top:.22rem;color:#1f2933bd;font-size:.82rem;line-height:1.32}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(22rem,calc(67dvh - 5.85rem),calc(100vw - 3rem))}.christianity-floating-card{min-height:0;padding:0}}@media (max-width: 51.99rem){.christianity-floating-card-shell{top:48%;gap:.45rem;max-height:calc(100dvh - 1.5rem);padding-top:2.15rem}.christianity-floating-card-close{min-height:1.9rem;padding:0 .58rem;font-size:.72rem}.christianity-preview-rule-note{max-height:min(8.25rem,24dvh);padding:.62rem .68rem;overflow-y:auto;scrollbar-color:rgba(36,48,68,.28) transparent;scrollbar-gutter:stable}.christianity-preview-rule-note .christianity-rule-note-icon{width:1.8rem;height:1.8rem;font-size:.9rem}.christianity-preview-rule-note strong{font-size:.86rem}.christianity-preview-rule-note p{font-size:.78rem;line-height:1.28}}.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-gallery-drawer{grid-template-rows:auto auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),50rem);min-height:min(22rem,calc(100dvh - 1rem));max-height:min(36rem,calc(100dvh - 2rem))}.christianity-gallery-drawer header>div:first-child{display:grid;gap:.15rem;min-width:0}.christianity-gallery-drawer header p{color:#1f293394;font-size:.82rem}.christianity-gallery-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(8.5rem,13rem);gap:.65rem}.christianity-gallery-controls label{display:grid;gap:.25rem;min-width:0;color:#1f29339e;font-size:.74rem;font-weight:800}.christianity-gallery-controls input,.christianity-gallery-controls select{width:100%;min-width:0;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(36,48,68,.16);border-radius:.65rem;background:#fff;color:var(--christianity-theme-ink);font:inherit;font-size:.9rem}.christianity-gallery-edition-strip{display:flex;gap:.45rem;overflow-x:auto;padding-bottom:.1rem}.christianity-gallery-edition-strip button{display:inline-flex;align-items:center;gap:.45rem;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(214,162,29,.38);border-radius:999px;background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800}.christianity-gallery-edition-strip img{width:1.2rem;height:1.2rem;object-fit:contain}.christianity-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.8rem,6.8rem));justify-content:center;align-content:start;gap:.65rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .35rem}.christianity-gallery-grid::-webkit-scrollbar{width:.65rem}.christianity-gallery-grid::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-gallery-grid::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.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}.christianity-history-grid .christianity-render-card-button{justify-self:center;width:min(100%,6.4rem)}.christianity-gallery-grid .christianity-render-card-button{justify-self:center;width:min(100%,7rem)}.christianity-offering-card.christianity-render-card-button{width:min(100%,5.8rem);min-height:0;padding:0;border:0;background:transparent;box-shadow:none}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}:host-context(.dark),:host-context(.ion-palette-dark),:host-context(html.ion-palette-dark),:host-context(body.dark),:host-context([data-theme=\"dark\"]){--christianity-theme-ink: var(--ion-text-color, #e5edf8);--christianity-theme-surface: #111827;--christianity-theme-parchment: #13223a;--christianity-theme-olive: #93c5fd;--christianity-theme-gold: #60a5fa;--christianity-theme-gold-soft: rgba(96, 165, 250, .18);--christianity-theme-gold-ring: rgba(147, 197, 253, .42);--christianity-theme-glow: rgba(96, 165, 250, .24);--christianity-theme-focus: #93c5fd;--christianity-theme-shadow: rgba(0, 0, 0, .34);--christianity-theme-shadow-strong: rgba(0, 0, 0, .48);--christianity-card-back: linear-gradient(135deg, rgba(147, 197, 253, .2), rgba(15, 23, 42, .08)), repeating-linear-gradient(45deg, #1e3a5f 0 .33rem, #0f172a .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(147, 197, 253, .15), rgba(15, 23, 42, .06)), repeating-linear-gradient(45deg, #1e3a5f 0 .33rem, #0f172a .33rem .66rem);color-scheme:dark}:host-context(.dark) .christianity-shell,:host-context(.ion-palette-dark) .christianity-shell,:host-context(html.ion-palette-dark) .christianity-shell,:host-context(body.dark) .christianity-shell,:host-context([data-theme=\"dark\"]) .christianity-shell{border-color:#94a3b82e;background:#07111f}:host-context(.dark) .christianity-gallery-open,:host-context(.ion-palette-dark) .christianity-gallery-open,:host-context(html.ion-palette-dark) .christianity-gallery-open,:host-context(body.dark) .christianity-gallery-open,:host-context([data-theme=\"dark\"]) .christianity-gallery-open,:host-context(.dark) .christianity-secondary-action,:host-context(.ion-palette-dark) .christianity-secondary-action,:host-context(html.ion-palette-dark) .christianity-secondary-action,:host-context(body.dark) .christianity-secondary-action,:host-context([data-theme=\"dark\"]) .christianity-secondary-action,:host-context(.dark) .christianity-gallery-edition-strip button,:host-context(.ion-palette-dark) .christianity-gallery-edition-strip button,:host-context(html.ion-palette-dark) .christianity-gallery-edition-strip button,:host-context(body.dark) .christianity-gallery-edition-strip button,:host-context([data-theme=\"dark\"]) .christianity-gallery-edition-strip button{border-color:#93c5fd5c;background:linear-gradient(180deg,#1e3a5fd1,#0f172ae0),radial-gradient(circle at 20% 0%,rgba(96,165,250,.16),transparent 42%);color:var(--christianity-theme-ink);box-shadow:0 .55rem 1.2rem #0000003d}:host-context(.dark) .christianity-splash,:host-context(.ion-palette-dark) .christianity-splash,:host-context(html.ion-palette-dark) .christianity-splash,:host-context(body.dark) .christianity-splash,:host-context([data-theme=\"dark\"]) .christianity-splash,:host-context(.dark) .christianity-start,:host-context(.ion-palette-dark) .christianity-start,:host-context(html.ion-palette-dark) .christianity-start,:host-context(body.dark) .christianity-start,:host-context([data-theme=\"dark\"]) .christianity-start{border-color:#93c5fd38;background:radial-gradient(circle at 50% 18%,rgba(96,165,250,.16),transparent 22rem),linear-gradient(180deg,#0f172ae0,#07111ff7),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #00000047}:host-context(.dark) .christianity-start__cards article,:host-context(.ion-palette-dark) .christianity-start__cards article,:host-context(html.ion-palette-dark) .christianity-start__cards article,:host-context(body.dark) .christianity-start__cards article,:host-context([data-theme=\"dark\"]) .christianity-start__cards article,:host-context(.dark) .christianity-start__modes article,:host-context(.ion-palette-dark) .christianity-start__modes article,:host-context(html.ion-palette-dark) .christianity-start__modes article,:host-context(body.dark) .christianity-start__modes article,:host-context([data-theme=\"dark\"]) .christianity-start__modes article,:host-context(.dark) .christianity-start__status span,:host-context(.ion-palette-dark) .christianity-start__status span,:host-context(html.ion-palette-dark) .christianity-start__status span,:host-context(body.dark) .christianity-start__status span,:host-context([data-theme=\"dark\"]) .christianity-start__status span,:host-context(.dark) .christianity-start__modes article>span,:host-context(.ion-palette-dark) .christianity-start__modes article>span,:host-context(html.ion-palette-dark) .christianity-start__modes article>span,:host-context(body.dark) .christianity-start__modes article>span,:host-context([data-theme=\"dark\"]) .christianity-start__modes article>span{border-color:#94a3b833;background:#0f172aad;box-shadow:0 .75rem 1.7rem #00000038}:host-context(.dark) .christianity-splash p,:host-context(.ion-palette-dark) .christianity-splash p,:host-context(html.ion-palette-dark) .christianity-splash p,:host-context(body.dark) .christianity-splash p,:host-context([data-theme=\"dark\"]) .christianity-splash p,:host-context(.dark) .christianity-start__copy p,:host-context(.ion-palette-dark) .christianity-start__copy p,:host-context(html.ion-palette-dark) .christianity-start__copy p,:host-context(body.dark) .christianity-start__copy p,:host-context([data-theme=\"dark\"]) .christianity-start__copy p,:host-context(.dark) .christianity-start__cards p,:host-context(.ion-palette-dark) .christianity-start__cards p,:host-context(html.ion-palette-dark) .christianity-start__cards p,:host-context(body.dark) .christianity-start__cards p,:host-context([data-theme=\"dark\"]) .christianity-start__cards p,:host-context(.dark) .christianity-start__modes p,:host-context(.ion-palette-dark) .christianity-start__modes p,:host-context(html.ion-palette-dark) .christianity-start__modes p,:host-context(body.dark) .christianity-start__modes p,:host-context([data-theme=\"dark\"]) .christianity-start__modes p,:host-context(.dark) .christianity-header p,:host-context(.ion-palette-dark) .christianity-header p,:host-context(html.ion-palette-dark) .christianity-header p,:host-context(body.dark) .christianity-header p,:host-context([data-theme=\"dark\"]) .christianity-header p,:host-context(.dark) .christianity-match-player small,:host-context(.ion-palette-dark) .christianity-match-player small,:host-context(html.ion-palette-dark) .christianity-match-player small,:host-context(body.dark) .christianity-match-player small,:host-context([data-theme=\"dark\"]) .christianity-match-player small,:host-context(.dark) .christianity-scoreboard span,:host-context(.ion-palette-dark) .christianity-scoreboard span,:host-context(html.ion-palette-dark) .christianity-scoreboard span,:host-context(body.dark) .christianity-scoreboard span,:host-context([data-theme=\"dark\"]) .christianity-scoreboard span{color:#e2e8f0bd}:host-context(.dark) .christianity-turn,:host-context(.ion-palette-dark) .christianity-turn,:host-context(html.ion-palette-dark) .christianity-turn,:host-context(body.dark) .christianity-turn,:host-context([data-theme=\"dark\"]) .christianity-turn,:host-context(.dark) .christianity-leader,:host-context(.ion-palette-dark) .christianity-leader,:host-context(html.ion-palette-dark) .christianity-leader,:host-context(body.dark) .christianity-leader,:host-context([data-theme=\"dark\"]) .christianity-leader,:host-context(.dark) .christianity-offerings,:host-context(.ion-palette-dark) .christianity-offerings,:host-context(html.ion-palette-dark) .christianity-offerings,:host-context(body.dark) .christianity-offerings,:host-context([data-theme=\"dark\"]) .christianity-offerings,:host-context(.dark) .christianity-hidden-hand,:host-context(.ion-palette-dark) .christianity-hidden-hand,:host-context(html.ion-palette-dark) .christianity-hidden-hand,:host-context(body.dark) .christianity-hidden-hand,:host-context([data-theme=\"dark\"]) .christianity-hidden-hand,:host-context(.dark) .christianity-pile,:host-context(.ion-palette-dark) .christianity-pile,:host-context(html.ion-palette-dark) .christianity-pile,:host-context(body.dark) .christianity-pile,:host-context([data-theme=\"dark\"]) .christianity-pile,:host-context(.dark) .christianity-deck,:host-context(.ion-palette-dark) .christianity-deck,:host-context(html.ion-palette-dark) .christianity-deck,:host-context(body.dark) .christianity-deck,:host-context([data-theme=\"dark\"]) .christianity-deck,:host-context(.dark) .christianity-place,:host-context(.ion-palette-dark) .christianity-place,:host-context(html.ion-palette-dark) .christianity-place,:host-context(body.dark) .christianity-place,:host-context([data-theme=\"dark\"]) .christianity-place,:host-context(.dark) .christianity-match-strip,:host-context(.ion-palette-dark) .christianity-match-strip,:host-context(html.ion-palette-dark) .christianity-match-strip,:host-context(body.dark) .christianity-match-strip,:host-context([data-theme=\"dark\"]) .christianity-match-strip,:host-context(.dark) .christianity-actions,:host-context(.ion-palette-dark) .christianity-actions,:host-context(html.ion-palette-dark) .christianity-actions,:host-context(body.dark) .christianity-actions,:host-context([data-theme=\"dark\"]) .christianity-actions,:host-context(.dark) .christianity-history,:host-context(.ion-palette-dark) .christianity-history,:host-context(html.ion-palette-dark) .christianity-history,:host-context(body.dark) .christianity-history,:host-context([data-theme=\"dark\"]) .christianity-history{border-color:#94a3b82e;background:#0f172ad1}:host-context(.dark) .christianity-turn.is-own-turn,:host-context(.ion-palette-dark) .christianity-turn.is-own-turn,:host-context(html.ion-palette-dark) .christianity-turn.is-own-turn,:host-context(body.dark) .christianity-turn.is-own-turn,:host-context([data-theme=\"dark\"]) .christianity-turn.is-own-turn{border-color:#2dd4bf5c;background:#14534c5c}:host-context(.dark) .christianity-table,:host-context(.ion-palette-dark) .christianity-table,:host-context(html.ion-palette-dark) .christianity-table,:host-context(body.dark) .christianity-table,:host-context([data-theme=\"dark\"]) .christianity-table{background:linear-gradient(180deg,#10233d,#0b1728)}:host-context(.dark) .christianity-player-side,:host-context(.ion-palette-dark) .christianity-player-side,:host-context(html.ion-palette-dark) .christianity-player-side,:host-context(body.dark) .christianity-player-side,:host-context([data-theme=\"dark\"]) .christianity-player-side{background:#0f172a57}:host-context(.dark) .christianity-battle-zone,:host-context(.ion-palette-dark) .christianity-battle-zone,:host-context(html.ion-palette-dark) .christianity-battle-zone,:host-context(body.dark) .christianity-battle-zone,:host-context([data-theme=\"dark\"]) .christianity-battle-zone,:host-context(.dark) .christianity-shared-zone,:host-context(.ion-palette-dark) .christianity-shared-zone,:host-context(html.ion-palette-dark) .christianity-shared-zone,:host-context(body.dark) .christianity-shared-zone,:host-context([data-theme=\"dark\"]) .christianity-shared-zone{background:#0f172a94}:host-context(.dark) .christianity-battle-zone.is-placing-card,:host-context(.ion-palette-dark) .christianity-battle-zone.is-placing-card,:host-context(html.ion-palette-dark) .christianity-battle-zone.is-placing-card,:host-context(body.dark) .christianity-battle-zone.is-placing-card,:host-context([data-theme=\"dark\"]) .christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#1e3a5fd1,#0f172ab8),#0f172a94}:host-context(.dark) .christianity-card,:host-context(.ion-palette-dark) .christianity-card,:host-context(html.ion-palette-dark) .christianity-card,:host-context(body.dark) .christianity-card,:host-context([data-theme=\"dark\"]) .christianity-card,:host-context(.dark) .christianity-slot,:host-context(.ion-palette-dark) .christianity-slot,:host-context(html.ion-palette-dark) .christianity-slot,:host-context(body.dark) .christianity-slot,:host-context([data-theme=\"dark\"]) .christianity-slot{border-color:#94a3b83d;background:#0f172a8a}:host-context(.dark) .christianity-slot--play-target,:host-context(.ion-palette-dark) .christianity-slot--play-target,:host-context(html.ion-palette-dark) .christianity-slot--play-target,:host-context(body.dark) .christianity-slot--play-target,:host-context([data-theme=\"dark\"]) .christianity-slot--play-target{color:var(--christianity-theme-ink);background:linear-gradient(180deg,#2563eb3d,#0f172ac7),#0f172abd}:host-context(.dark) .christianity-slot--play-target span,:host-context(.ion-palette-dark) .christianity-slot--play-target span,:host-context(html.ion-palette-dark) .christianity-slot--play-target span,:host-context(body.dark) .christianity-slot--play-target span,:host-context([data-theme=\"dark\"]) .christianity-slot--play-target span,:host-context(.dark) .christianity-card strong,:host-context(.ion-palette-dark) .christianity-card strong,:host-context(html.ion-palette-dark) .christianity-card strong,:host-context(body.dark) .christianity-card strong,:host-context([data-theme=\"dark\"]) .christianity-card strong{background:#1e293beb}:host-context(.dark) .christianity-history-drawer,:host-context(.ion-palette-dark) .christianity-history-drawer,:host-context(html.ion-palette-dark) .christianity-history-drawer,:host-context(body.dark) .christianity-history-drawer,:host-context([data-theme=\"dark\"]) .christianity-history-drawer,:host-context(.dark) .christianity-rule-note,:host-context(.ion-palette-dark) .christianity-rule-note,:host-context(html.ion-palette-dark) .christianity-rule-note,:host-context(body.dark) .christianity-rule-note,:host-context([data-theme=\"dark\"]) .christianity-rule-note,:host-context(.dark) .christianity-preview-rule-note,:host-context(.ion-palette-dark) .christianity-preview-rule-note,:host-context(html.ion-palette-dark) .christianity-preview-rule-note,:host-context(body.dark) .christianity-preview-rule-note,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note{border-color:#94a3b82e;background:linear-gradient(180deg,#0f172af5,#111827f5),radial-gradient(circle at 8% 0%,rgba(96,165,250,.12),transparent 40%);box-shadow:0 1.5rem 4rem #0000006b}:host-context(.dark) .christianity-dialog-close,:host-context(.ion-palette-dark) .christianity-dialog-close,:host-context(html.ion-palette-dark) .christianity-dialog-close,:host-context(body.dark) .christianity-dialog-close,:host-context([data-theme=\"dark\"]) .christianity-dialog-close,:host-context(.dark) .christianity-floating-card-close,:host-context(.ion-palette-dark) .christianity-floating-card-close,:host-context(html.ion-palette-dark) .christianity-floating-card-close,:host-context(body.dark) .christianity-floating-card-close,:host-context([data-theme=\"dark\"]) .christianity-floating-card-close{border-color:#94a3b838;background:#0f172af0;color:var(--christianity-theme-ink);box-shadow:0 .35rem .8rem #0000004d}:host-context(.dark) .christianity-history-drawer header span,:host-context(.ion-palette-dark) .christianity-history-drawer header span,:host-context(html.ion-palette-dark) .christianity-history-drawer header span,:host-context(body.dark) .christianity-history-drawer header span,:host-context([data-theme=\"dark\"]) .christianity-history-drawer header span,:host-context(.dark) .christianity-rule-note strong,:host-context(.ion-palette-dark) .christianity-rule-note strong,:host-context(html.ion-palette-dark) .christianity-rule-note strong,:host-context(body.dark) .christianity-rule-note strong,:host-context([data-theme=\"dark\"]) .christianity-rule-note strong{background:#1e293beb}:host-context(.dark) .christianity-rule-note small,:host-context(.ion-palette-dark) .christianity-rule-note small,:host-context(html.ion-palette-dark) .christianity-rule-note small,:host-context(body.dark) .christianity-rule-note small,:host-context([data-theme=\"dark\"]) .christianity-rule-note small,:host-context(.dark) .christianity-preview-rule-note small,:host-context(.ion-palette-dark) .christianity-preview-rule-note small,:host-context(html.ion-palette-dark) .christianity-preview-rule-note small,:host-context(body.dark) .christianity-preview-rule-note small,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note small,:host-context(.dark) .christianity-gallery-drawer header p,:host-context(.ion-palette-dark) .christianity-gallery-drawer header p,:host-context(html.ion-palette-dark) .christianity-gallery-drawer header p,:host-context(body.dark) .christianity-gallery-drawer header p,:host-context([data-theme=\"dark\"]) .christianity-gallery-drawer header p,:host-context(.dark) .christianity-gallery-controls label,:host-context(.ion-palette-dark) .christianity-gallery-controls label,:host-context(html.ion-palette-dark) .christianity-gallery-controls label,:host-context(body.dark) .christianity-gallery-controls label,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls label{color:#e2e8f0ad}:host-context(.dark) .christianity-rule-note p,:host-context(.ion-palette-dark) .christianity-rule-note p,:host-context(html.ion-palette-dark) .christianity-rule-note p,:host-context(body.dark) .christianity-rule-note p,:host-context([data-theme=\"dark\"]) .christianity-rule-note p,:host-context(.dark) .christianity-rule-note ul,:host-context(.ion-palette-dark) .christianity-rule-note ul,:host-context(html.ion-palette-dark) .christianity-rule-note ul,:host-context(body.dark) .christianity-rule-note ul,:host-context([data-theme=\"dark\"]) .christianity-rule-note ul,:host-context(.dark) .christianity-preview-rule-note p,:host-context(.ion-palette-dark) .christianity-preview-rule-note p,:host-context(html.ion-palette-dark) .christianity-preview-rule-note p,:host-context(body.dark) .christianity-preview-rule-note p,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note p,:host-context(.dark) .christianity-offerings-note p,:host-context(.ion-palette-dark) .christianity-offerings-note p,:host-context(html.ion-palette-dark) .christianity-offerings-note p,:host-context(body.dark) .christianity-offerings-note p,:host-context([data-theme=\"dark\"]) .christianity-offerings-note p{color:#e2e8f0cc}:host-context(.dark) .christianity-gallery-controls input,:host-context(.ion-palette-dark) .christianity-gallery-controls input,:host-context(html.ion-palette-dark) .christianity-gallery-controls input,:host-context(body.dark) .christianity-gallery-controls input,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls input,:host-context(.dark) .christianity-gallery-controls select,:host-context(.ion-palette-dark) .christianity-gallery-controls select,:host-context(html.ion-palette-dark) .christianity-gallery-controls select,:host-context(body.dark) .christianity-gallery-controls select,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls select,:host-context(.dark) .christianity-offering-row,:host-context(.ion-palette-dark) .christianity-offering-row,:host-context(html.ion-palette-dark) .christianity-offering-row,:host-context(body.dark) .christianity-offering-row,:host-context([data-theme=\"dark\"]) .christianity-offering-row,:host-context(.dark) .christianity-offerings-note,:host-context(.ion-palette-dark) .christianity-offerings-note,:host-context(html.ion-palette-dark) .christianity-offerings-note,:host-context(body.dark) .christianity-offerings-note,:host-context([data-theme=\"dark\"]) .christianity-offerings-note{border-color:#94a3b833;background:#0f172ac7;color:var(--christianity-theme-ink)}:host-context(.dark) .christianity-history-grid,:host-context(.ion-palette-dark) .christianity-history-grid,:host-context(html.ion-palette-dark) .christianity-history-grid,:host-context(body.dark) .christianity-history-grid,:host-context([data-theme=\"dark\"]) .christianity-history-grid,:host-context(.dark) .christianity-offering-list,:host-context(.ion-palette-dark) .christianity-offering-list,:host-context(html.ion-palette-dark) .christianity-offering-list,:host-context(body.dark) .christianity-offering-list,:host-context([data-theme=\"dark\"]) .christianity-offering-list,:host-context(.dark) .christianity-gallery-grid,:host-context(.ion-palette-dark) .christianity-gallery-grid,:host-context(html.ion-palette-dark) .christianity-gallery-grid,:host-context(body.dark) .christianity-gallery-grid,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid,:host-context(.dark) .christianity-preview-rule-note,:host-context(.ion-palette-dark) .christianity-preview-rule-note,:host-context(html.ion-palette-dark) .christianity-preview-rule-note,:host-context(body.dark) .christianity-preview-rule-note,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note{scrollbar-color:rgba(148,163,184,.54) rgba(15,23,42,.86)}:host-context(.dark) .christianity-rule-note-icon,:host-context(.ion-palette-dark) .christianity-rule-note-icon,:host-context(html.ion-palette-dark) .christianity-rule-note-icon,:host-context(body.dark) .christianity-rule-note-icon,:host-context([data-theme=\"dark\"]) .christianity-rule-note-icon{background:#60a5fa29;color:#bfdbfe;box-shadow:inset 0 0 0 1px #93c5fd38}:host-context(.dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(body.dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-history-grid::-webkit-scrollbar-track,:host-context(.dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(body.dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-offering-list::-webkit-scrollbar-track,:host-context(.dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(body.dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid::-webkit-scrollbar-track{background:#0f172adb}:host-context(.dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(.dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(.dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid::-webkit-scrollbar-thumb{border-color:#0f172adb;background:#94a3b88a}@media (max-width: 720px){:host{overflow-x:hidden}.christianity-shell{padding:.55rem 0 .65rem;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-match-strip,.christianity-actions{box-sizing:border-box;width:100%;padding-right:max(.5rem,env(safe-area-inset-right));padding-left:max(.5rem,env(safe-area-inset-left))}.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-header-actions{align-items:flex-end;flex-direction:column}.christianity-start__cards,.christianity-start__hero{grid-template-columns:minmax(0,1fr)}.christianity-start__fan{min-height:10.5rem}.christianity-start__fan val-christianity-card{width:clamp(5.2rem,22vw,6.4rem)}.christianity-start__modes{grid-template-columns:repeat(2,minmax(0,1fr))}.christianity-splash,.christianity-start{min-height:min(30rem,calc(100dvh - 7rem));padding-right:max(.65rem,env(safe-area-inset-right));padding-left:max(.65rem,env(safe-area-inset-left));border-right:0;border-left:0;border-radius:0}.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{height:6.85rem;min-height:0;max-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-gallery-controls{grid-template-columns:minmax(0,1fr)}.christianity-gallery-grid{grid-template-columns:repeat(auto-fill,minmax(5.35rem,6.1rem));justify-content:center}.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"] }]
2252
+ }], ctorParameters: () => [] });
2253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LWdhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1nYW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx5QkFBeUIsRUFBMkQsTUFBTSwrQkFBK0IsQ0FBQztBQUNuSSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBbUVwRCxNQUFNLG1CQUFtQixHQUFHLHNEQUFzRCxDQUFDO0FBQ25GLE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7QUFDdEUsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDcEMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFDbEMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFFbkMsTUFBTSxhQUFhLEdBQStDO0lBQ2hFLFFBQVEsRUFBRTtRQUNSLEVBQUUsRUFBRSxVQUFVO1FBQ2QsSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixJQUFJLEVBQUUsVUFBVTtRQUNoQixJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sRUFBRSxDQUFDO1FBQ1QsSUFBSSxFQUFFLENBQUM7UUFDUCxTQUFTLEVBQUUsd0VBQXdFO1FBQ25GLFNBQVMsRUFBRSxhQUFhO1FBQ3hCLE9BQU8sRUFBRSxLQUFLO1FBQ2Qs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QUUsb0JBQW9CLDZEQUFFLHlCQUF5Qjs7NEZBeThHcEUseUJBQXlCO2tCQTU4R3JDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLENBQUMsWUFDdEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNmZUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcm9wTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuXG5pbXBvcnQgeyBMaWdodFJpcHBsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvbGlnaHQtcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgQ2hyaXN0aWFuaXR5Q2FyZENvbXBvbmVudCwgQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsLCBDaHJpc3RpYW5pdHlDYXJkUmVuZGVyVHlwZSB9IGZyb20gJy4vY2hyaXN0aWFuaXR5LWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IE1JTklfR0FNRVNfSTE4TiB9IGZyb20gJy4vbWluaS1nYW1lcy5pMThuJztcbmltcG9ydCB7XG4gIENocmlzdGlhbml0eUNhcmRCaWJsZVJlZmVyZW5jZSxcbiAgQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gIENocmlzdGlhbml0eUNhcmRUcmFuc2xhdGlvbixcbiAgQ2hyaXN0aWFuaXR5Q2FyZFR5cGUsXG4gIENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlLFxuICBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UsXG4gIENocmlzdGlhbml0eVBsYXllclN0YXRlLFxuICBDaHJpc3RpYW5pdHlTZWF0LFxufSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIENocmlzdGlhbml0eUNhcmRQcmV2aWV3IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZXllYnJvdzogc3RyaW5nO1xuICBtZXRhOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY2FyZElkPzogc3RyaW5nO1xuICBzb3VyY2U/OiAnaGFuZCcgfCAnYm9hcmQnIHwgJ3BpbGUnO1xufVxuXG5pbnRlcmZhY2UgQ2hyaXN0aWFuaXR5SW5mb1BhbmVsIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZXllYnJvdzogc3RyaW5nO1xuICBtZXRhOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgZmFjdHM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgQ2hyaXN0aWFuaXR5UHJldmlld1J1bGUge1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDaHJpc3RpYW5pdHlQcmV2aWV3VGlsdCB7XG4gIHJvdGF0ZVg6IG51bWJlcjtcbiAgcm90YXRlWTogbnVtYmVyO1xuICBzaGlmdFg6IG51bWJlcjtcbiAgc2hpZnRZOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDaHJpc3RpYW5pdHlSZXNvbHZlZENhcmRUZXh0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBmdWxsTmFtZT86IHN0cmluZztcbiAgdmVyc2VUZXh0Pzogc3RyaW5nO1xuICBzY3JpcHR1cmU/OiBzdHJpbmc7XG4gIGFiaWxpdHlOYW1lPzogc3RyaW5nO1xuICBhYmlsaXR5VGV4dD86IHN0cmluZztcbiAgYWJpbGl0aWVzPzogQ2hyaXN0aWFuaXR5Q2FyZFRyYW5zbGF0aW9uWydhYmlsaXRpZXMnXTtcbn1cblxuaW50ZXJmYWNlIENocmlzdGlhbml0eUVkaXRpb25DYXRhbG9nIHtcbiAgZWRpdGlvbj86IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBudW1iZXI/OiBudW1iZXI7XG4gICAgc2x1Zz86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gIH07XG4gIGNhcmRzPzogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb25bXTtcbn1cblxudHlwZSBDaHJpc3RpYW5pdHlHYWxsZXJ5VHlwZUZpbHRlciA9ICdhbGwnIHwgQ2hyaXN0aWFuaXR5Q2FyZFR5cGU7XG50eXBlIENocmlzdGlhbml0eVNjcmVlbiA9ICdzcGxhc2gnIHwgJ2hvbWUnIHwgJ3RhYmxlJztcbnR5cGUgQ2hyaXN0aWFuaXR5Q2F0YWxvZ0xvYWRTdGF0ZSA9ICdsb2FkaW5nJyB8ICdyZWFkeScgfCAnZmFsbGJhY2snO1xuXG5jb25zdCBHRU5FU0lTX0NBVEFMT0dfVVJMID0gJ2Fzc2V0cy9nYW1lcy9jaHJpc3RpYW5pdHkvZGF0YS8wMS1nZW5lc2lzLmNhcmRzLmpzb24nO1xuY29uc3QgR0VORVNJU19JQ09OX1VSTCA9ICdhc3NldHMvZ2FtZXMvY2hyaXN0aWFuaXR5L2ljb25zLzEtaWNvbi5wbmcnO1xuY29uc3QgVFVUT1JJQUxfQ0hBUkFDVEVSX0xJTUlUID0gMTI7XG5jb25zdCBUVVRPUklBTF9PRkZFUklOR19MSU1JVCA9IDY7XG5jb25zdCBTUExBU0hfTUlOX0RVUkFUSU9OX01TID0gNzIwO1xuXG5jb25zdCBTVEFSVEVSX0NBUkRTOiBSZWNvcmQ8c3RyaW5nLCBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbj4gPSB7XG4gIG9fc2ltcGxlOiB7XG4gICAgaWQ6ICdvX3NpbXBsZScsXG4gICAgbmFtZTogJ09mcmVuZGEgc2ltcGxlJyxcbiAgICB0eXBlOiAnb2ZmZXJpbmcnLFxuICAgIGNvc3Q6IDAsXG4gICAgYXR0YWNrOiAwLFxuICAgIGxpZmU6IDEsXG4gICAgdmVyc2VUZXh0OiAnVW5hIG9mcmVuZGEgc2VuY2lsbGEgcXVlZGEgbGlzdGEgcGFyYSBzb3N0ZW5lciB0dXMgc2lndWllbnRlcyBqdWdhZGFzLicsXG4gICAgc2NyaXB0dXJlOiAnR2VuZXNpcyA0OjQnLFxuICAgIGVkaXRpb246ICdHRU4nLFxuICAgIGNvbGxlY3Rvck51bWJlcjogJzAwMS8wMjAnLFxuICAgIHllYXI6ICcyMDI2JyxcbiAgICBhdXRob3I6ICdNVlAnLFxuICAgIHJhcml0eTogJ25vcm1hbCcsXG4gIH0sXG4gIG9fZm9yYmlkZGVuOiB7XG4gICAgaWQ6ICdvX2ZvcmJpZGRlbicsXG4gICAgbmFtZTogJ0VsIGZydXRvIHByb2hpYmlkbycsXG4gICAgdHlwZTogJ29mZmVyaW5nJyxcbiAgICBjb3N0OiAwLFxuICAgIGF0dGFjazogMCxcbiAgICBsaWZlOiAyLFxuICAgIGFiaWxpdHlOYW1lOiAnQ29ub2NpbWllbnRvIGRlbCBiaWVuIHkgZGVsIG1hbCcsXG4gICAgYWJpbGl0eVRleHQ6ICdBbCB1c2FybGEsIGRpc21pbnV5ZSBlbiAxIGxvcyBwdW50b3MgZGUgdmlkYSBkZSB0dSBMw61kZXIuJyxcbiAgICBhYmlsaXR5Q29zdDogMCxcbiAgICB2ZXJzZVRleHQ6ICdEaW9zIGVsIFNlw7FvciBwdXNvIGFsIGhvbWJyZSBlbiBlbCBqYXJkw61uIGRlIEVkw6luIHBhcmEgcXVlIGxvIGxhYnJhcmEgeSBsbyBjdWlkYXJhLicsXG4gICAgc2NyaXB0dXJlOiAnR2VuZXNpcyAyOjE3IE5CVicsXG4gICAgZWRpdGlvbjogJ0dFTicsXG4gICAgY29sbGVjdG9yTnVtYmVyOiAnMDEyLzE4MCcsXG4gICAgeWVhcjogJzIwMjYnLFxuICAgIGF1dGhvcjogJ01WUCcsXG4gICAgcmFyaXR5OiAndW5jb21tb24nLFxuICB9LFxuICBwX3Njb3V0OiB7XG4gICAgaWQ6ICdwX3Njb3V0JyxcbiAgICBuYW1lOiAnU2NvdXQnLFxuICAgIHR5cGU6ICdjaGFyYWN0ZXInLFxuICAgIGNvc3Q6IDEsXG4gICAgYXR0YWNrOiAxLFxuICAgIGxpZmU6IDEsXG4gICAgdmVyc2VUZXh0OiAnVW4gZXhwbG9yYWRvciBodW1pbGRlIGFicmUgY2FtaW5vIGFudGVzIGRlIHF1ZSBsbGVndWUgbGEgYmF0YWxsYS4nLFxuICAgIHNjcmlwdHVyZTogJ0dlbmVzaXMgMTM6MTcnLFxuICAgIGVkaXRpb246ICdHRU4nLFxuICAgIGNvbGxlY3Rvck51bWJlcjogJzAwMi8wMjAnLFxuICAgIHllYXI6ICcyMDI2JyxcbiAgICBhdXRob3I6ICdNVlAnLFxuICAgIHJhcml0eTogJ25vcm1hbCcsXG4gIH0sXG4gIHBfZ3VhcmQ6IHsgaWQ6ICdwX2d1YXJkJywgbmFtZTogJ0d1YXJkJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDIsIGF0dGFjazogMSwgbGlmZTogMywgZWRpdGlvbjogJ0dFTicsIGNvbGxlY3Rvck51bWJlcjogJzAwMy8wMjAnLCB5ZWFyOiAnMjAyNicsIGF1dGhvcjogJ01WUCcsIHJhcml0eTogJ25vcm1hbCcgfSxcbiAgcF93YXJyaW9yOiB7IGlkOiAncF93YXJyaW9yJywgbmFtZTogJ1dhcnJpb3InLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMiwgYXR0YWNrOiAyLCBsaWZlOiAyLCBlZGl0aW9uOiAnR0VOJywgY29sbGVjdG9yTnVtYmVyOiAnMDA0LzAyMCcsIHllYXI6ICcyMDI2JywgYXV0aG9yOiAnTVZQJywgcmFyaXR5OiAnbm9ybWFsJyB9LFxuICBwX2VsZGVyOiB7IGlkOiAncF9lbGRlcicsIG5hbWU6ICdFbGRlcicsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAzLCBhdHRhY2s6IDIsIGxpZmU6IDQsIGVkaXRpb246ICdHRU4nLCBjb2xsZWN0b3JOdW1iZXI6ICcwMDUvMDIwJywgeWVhcjogJzIwMjYnLCBhdXRob3I6ICdNVlAnLCByYXJpdHk6ICd1bmNvbW1vbicgfSxcbiAgcF9jaGFtcGlvbjogeyBpZDogJ3BfY2hhbXBpb24nLCBuYW1lOiAnQ2hhbXBpb24nLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogNCwgYXR0YWNrOiA0LCBsaWZlOiA0LCBlZGl0aW9uOiAnR0VOJywgY29sbGVjdG9yTnVtYmVyOiAnMDA2LzAyMCcsIHllYXI6ICcyMDI2JywgYXV0aG9yOiAnTVZQJywgcmFyaXR5OiAncmFyZScgfSxcbn07XG5cbmNvbnN0IFNUQVJUSU5HX1NIQVJFRF9ERUNLID0gW1xuICAnb19zaW1wbGUnLFxuICAncF9zY291dCcsXG4gICdvX2ZvcmJpZGRlbicsXG4gICdvX3NpbXBsZScsXG4gICdwX2d1YXJkJyxcbiAgJ3Bfd2FycmlvcicsXG4gICdvX3NpbXBsZScsXG4gICdwX2VsZGVyJyxcbiAgJ3Bfc2NvdXQnLFxuICAnb19zaW1wbGUnLFxuICAncF9jaGFtcGlvbicsXG4gICdwX2d1YXJkJyxcbiAgJ29fc2ltcGxlJyxcbiAgJ3Bfd2FycmlvcicsXG4gICdwX3Njb3V0JyxcbiAgJ29fc2ltcGxlJyxcbiAgJ3BfZWxkZXInLFxuICAncF9ndWFyZCcsXG4gICdvX3NpbXBsZScsXG5dO1xuXG5jb25zdCBTVEFSVElOR19HQU1FOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUgPSB7XG4gIGdhbWVJZDogJ21vY2stY2hyaXN0aWFuaXR5JyxcbiAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnLFxuICBtb2RlOiAnbG9jYWxfcGFzcycsXG4gIHR1cm5Pd25lcjogJ1AxJyxcbiAgcmV2aXNpb246IDAsXG4gIHR1cm5Db3VudDogMSxcbiAgbWF0Y2hTY29yZTogeyBQMTogMSwgUDI6IDAgfSxcbiAgc2hhcmVkRGVjazogU1RBUlRJTkdfU0hBUkVEX0RFQ0ssXG4gIGhpc3Rvcnlab25lOiBbXSxcbiAgcGxheWVyczoge1xuICAgIFAxOiB7XG4gICAgICBzZWF0OiAnUDEnLFxuICAgICAgZGlzcGxheU5hbWU6ICdKdWdhZG9yJyxcbiAgICAgIGF2YXRhcjogJ0onLFxuICAgICAgYXZhdGFyQ29sb3I6ICcjMjU2M2ViJyxcbiAgICAgIGxlYWRlck5hbWU6ICdBZGFtJyxcbiAgICAgIGxlYWRlckhwOiAxNSxcbiAgICAgIGxlYWRlck1heEhwOiAxNSxcbiAgICAgIG9mZmVyaW5nczogW1xuICAgICAgICB7IGluc3RhbmNlSWQ6ICdwMV9vZmZlcmluZ18wMDEnLCBjYXJkSWQ6ICdvX3NpbXBsZScsIG5hbWU6ICdPZnJlbmRhIHNpbXBsZScsIG93bmVyOiAnUDEnLCByZWFkeTogdHJ1ZSwgdmFsdWU6IDEgfSxcbiAgICAgICAge1xuICAgICAgICAgIGluc3RhbmNlSWQ6ICdwMV9vZmZlcmluZ18wMDInLFxuICAgICAgICAgIGNhcmRJZDogJ29fZm9yYmlkZGVuJyxcbiAgICAgICAgICBuYW1lOiAnRWwgZnJ1dG8gcHJvaGliaWRvJyxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBhYmlsaXR5TmFtZTogJ0Nvbm9jaW1pZW50byBkZWwgYmllbiB5IGRlbCBtYWwnLFxuICAgICAgICAgIGFiaWxpdHlUZXh0OiAnQWwgdXNhcmxhLCBkaXNtaW51eWUgZW4gMSBsb3MgcHVudG9zIGRlIHZpZGEgZGUgdHUgTGlkZXIuJyxcbiAgICAgICAgICBhYmlsaXR5Q29zdDogMCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvZmZlcmluZ1BsYXllZFRoaXNUdXJuOiBmYWxzZSxcbiAgICAgIGhhbmQ6IFsnb19zaW1wbGUnLCAncF9zY291dCcsICdwX3dhcnJpb3InLCAncF9ndWFyZCddLFxuICAgICAgYmF0dGxlWm9uZTogW10sXG4gICAgfSxcbiAgICBQMjoge1xuICAgICAgc2VhdDogJ1AyJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnUml2YWwnLFxuICAgICAgYXZhdGFyOiAnUicsXG4gICAgICBhdmF0YXJDb2xvcjogJyNiNDUzMDknLFxuICAgICAgbGVhZGVyTmFtZTogJ05vYWgnLFxuICAgICAgbGVhZGVySHA6IDE1LFxuICAgICAgbGVhZGVyTWF4SHA6IDE1LFxuICAgICAgb2ZmZXJpbmdzOiBbeyBpbnN0YW5jZUlkOiAncDJfb2ZmZXJpbmdfMDAxJywgY2FyZElkOiAnb19zaW1wbGUnLCBuYW1lOiAnT2ZyZW5kYSBzaW1wbGUnLCBvd25lcjogJ1AyJywgcmVhZHk6IHRydWUsIHZhbHVlOiAxIH1dLFxuICAgICAgb2ZmZXJpbmdQbGF5ZWRUaGlzVHVybjogZmFsc2UsXG4gICAgICBoYW5kQ291bnQ6IDQsXG4gICAgICBiYXR0bGVab25lOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiAnb3BwXzAwMScsXG4gICAgICAgICAgY2FyZElkOiAncF9zY291dCcsXG4gICAgICAgICAgbmFtZTogJ1Njb3V0JyxcbiAgICAgICAgICBvd25lcjogJ1AyJyxcbiAgICAgICAgICBjb250cm9sbGVyOiAnUDInLFxuICAgICAgICAgIHNsb3Q6IDAsXG4gICAgICAgICAgYXR0YWNrOiAxLFxuICAgICAgICAgIGN1cnJlbnRIcDogMSxcbiAgICAgICAgICBtYXhIcDogMSxcbiAgICAgICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBsb2c6IFsnUGFydGlkYSBpbmljaWFkYS4nXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jaHJpc3RpYW5pdHktZ2FtZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDZGtEcmFnLCBDZGtEcm9wTGlzdCwgTGlnaHRSaXBwbGVEaXJlY3RpdmUsIENocmlzdGlhbml0eUNhcmRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxtYWluIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNoZWxsXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oZWFkZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlFeWVicm93JykgfX08L3A+XG4gICAgICAgICAgPGgxPnt7IHQoJ2NocmlzdGlhbml0eVRpdGxlJykgfX08L2gxPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1oZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgIEBpZiAoc2NyZWVuKCkgIT09ICdzcGxhc2gnKSB7XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW5cIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwib3BlbkdhbGxlcnkoKVwiPlxuICAgICAgICAgICAgICB7eyB0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5JykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNjcmVlbigpID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXR1cm5cIiBbY2xhc3MuaXMtb3duLXR1cm5dPVwiaXNPd25UdXJuKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5VHVybicpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IGN1cnJlbnRQbGF5ZXIoKS5kaXNwbGF5TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgQGlmIChzY3JlZW4oKSA9PT0gJ3NwbGFzaCcpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktc3BsYXNoXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrXCI+XG4gICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVNwbGFzaEV5ZWJyb3cnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxoMj57eyB0KCdjaHJpc3RpYW5pdHlTcGxhc2hUaXRsZScpIH19PC9oMj5cbiAgICAgICAgICAgIDxwPnt7IHNwbGFzaFN0YXR1c1RleHQoKSB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfSBAZWxzZSBpZiAoc2NyZWVuKCkgPT09ICdob21lJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1zdGFydFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3RhcnRfX2hlcm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3RhcnRfX2NvcHlcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5R2VuZXNpc0VkaXRpb24nKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGgyPnt7IHQoJ2NocmlzdGlhbml0eVN0YXJ0VGl0bGUnKSB9fTwvaDI+XG4gICAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eVN0YXJ0Qm9keScpIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXN0YXJ0X19mYW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgQGZvciAoY2FyZCBvZiBzdGFydEZlYXR1cmVkQ2FyZHMoKTsgdHJhY2sgY2FyZC5pZCkge1xuICAgICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmRcbiAgICAgICAgICAgICAgICAgIFtjYXJkXT1cImRlZmluaXRpb25Ub1JlbmRlckNhcmQoY2FyZClcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImhhbmRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJzdGFydEZlYXR1cmVkQ2FyZFRyYW5zZm9ybSgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzXCI+XG4gICAgICAgICAgICA8YXJ0aWNsZT5cbiAgICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjaHJpc3RpYW5pdHlUdXRvcmlhbE1vZGUnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlUdXRvcmlhbE1vZGVCb2R5JykgfX08L3A+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXByaW1hcnktYWN0aW9uXCIgdmFsTGlnaHRSaXBwbGUgKGNsaWNrKT1cInN0YXJ0VHV0b3JpYWwoKVwiPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVN0YXJ0VHV0b3JpYWwnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUdhbGxlcnknKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5TW9kZUJvZHknKSB9fTwvcD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJvcGVuR2FsbGVyeSgpXCI+XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5T3BlbkdhbGxlcnknKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUhvd1RvUGxheScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUhvd1RvUGxheUJvZHknKSB9fTwvcD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0SG93VG9QbGF5KClcIj5cbiAgICAgICAgICAgICAgICB7eyB0KCdsZWFybk1vcmUnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUVkaXRpb25TdGF0dXMnKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgZ2FsbGVyeUVkaXRpb25MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5VHV0b3JpYWxBY3RpdmUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNhdGFsb2dTdGF0dXNMYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2Rlc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5RnV0dXJlTW9kZXMnKVwiPlxuICAgICAgICAgICAgQGZvciAobW9kZSBvZiBmdXR1cmVNb2RlcygpOyB0cmFjayBtb2RlLnRpdGxlKSB7XG4gICAgICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgbW9kZS50aXRsZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxwPnt7IG1vZGUuYm9keSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdzb29uVGl0bGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1tYXRjaC1zdHJpcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5TWF0Y2hTY29yZScpXCI+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInBsYXllcigpLmF2YXRhckNvbG9yXCI+e3sgcGxheWVyKCkuYXZhdGFyIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8c21hbGw+e3sgcGxheWVyTGVhZGVyRGlzcGxheU5hbWUocGxheWVyKCkpIH19IMK3IHt7IHBsYXllcigpLmxlYWRlckhwIH19L3t7IHBsYXllcigpLmxlYWRlck1heEhwIH19PC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmRcIj5cbiAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlNYXRjaCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLm1hdGNoU2NvcmUuUDEgfX0te3sgZ2FtZSgpLm1hdGNoU2NvcmUuUDIgfX08L3N0cm9uZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBjaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyLS1vcHBvbmVudFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIm9wcG9uZW50KCkuYXZhdGFyQ29sb3JcIj57eyBvcHBvbmVudCgpLmF2YXRhciB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudCgpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8c21hbGw+e3sgcGxheWVyTGVhZGVyRGlzcGxheU5hbWUob3Bwb25lbnQoKSkgfX0gwrcge3sgb3Bwb25lbnQoKS5sZWFkZXJIcCB9fS97eyBvcHBvbmVudCgpLmxlYWRlck1heEhwIH19PC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLXNoZWxmIGNocmlzdGlhbml0eS1oYW5kLXNoZWxmLS1vcHBvbmVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXIgY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXItLW9wcG9uZW50XCI+XG4gICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5SGFuZCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgb3Bwb25lbnRIYW5kQ291bnQoKSB9fTwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1mYW4gY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5T3Bwb25lbnRIYW5kJylcIj5cbiAgICAgICAgICBAZm9yIChfIG9mIGhpZGRlbkhhbmRDYXJkcyhvcHBvbmVudEhhbmRDb3VudCgpKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1mcmFtZSBjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFja1wiXG4gICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiZmFuVHJhbnNmb3JtKCRpbmRleCwgb3Bwb25lbnRIYW5kQ291bnQoKSwgdHJ1ZSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUhpZGRlbkNhcmQnKVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXRhYmxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlUYWJsZScpXCI+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlIGNocmlzdGlhbml0eS1wbGF5ZXItc2lkZS0tb3Bwb25lbnRcIj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1wbGF5ZXItcmFjayBjaHJpc3RpYW5pdHktcGxheWVyLXJhY2stLW9wcG9uZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy16b25lXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGVcIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwib3Blbk9mZmVyaW5ncygnUDInKVwiPlxuICAgICAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5ncycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcmVhZHlPZmZlcmluZ3Mob3Bwb25lbnQoKSkgfX0ve3sgdG90YWxPZmZlcmluZ3Mob3Bwb25lbnQoKSkgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIGNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b25cIiB2YWxMaWdodFJpcHBsZSBbY2xhc3MuaXMtdGFyZ2V0XT1cInNlbGVjdGVkQXR0YWNrZXIoKSAmJiAhaGFzT3Bwb25lbnRHdWFyZHMoKVwiIChjbGljayk9XCJoYW5kbGVPcHBvbmVudExlYWRlcigpXCI+XG4gICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwibGVhZGVyUmVuZGVyQ2FyZChvcHBvbmVudCgpKVwiIHZhcmlhbnQ9XCJ0YWJsZVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1yYWNrLXNwYWNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1iYXR0bGUtem9uZSBjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUtLW9wcG9uZW50XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlPcHBvbmVudEJhdHRsZScpXCI+XG4gICAgICAgICAgICBAZm9yIChzbG90IG9mIGJhdHRsZVNsb3RzKCdQMicpOyB0cmFjayBzbG90LnRyYWNrSWQpIHtcbiAgICAgICAgICAgICAgQGlmIChzbG90LmNhcmQpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIGNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlIGNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFsTGlnaHRSaXBwbGVcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy10YXJnZXRdPVwic2VsZWN0ZWRBdHRhY2tlcigpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHBvbmVudENoYXJhY3RlcihzbG90LmNhcmQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImNoYXJhY3RlclJlbmRlckNhcmQoc2xvdC5jYXJkKVwiIHZhcmlhbnQ9XCJ0YWJsZVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1zbG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktc2hhcmVkLXpvbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVNoYXJlZFpvbmUnKVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBjaHJpc3RpYW5pdHktem9uZS1waWxlLS1oaXN0b3J5XCIgdmFsTGlnaHRSaXBwbGUgKGNsaWNrKT1cIm9wZW5IaXN0b3J5KClcIj5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLmhpc3Rvcnlab25lLmxlbmd0aCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBjaHJpc3RpYW5pdHktem9uZS1waWxlLS1kZWNrXCIgdmFsTGlnaHRSaXBwbGUgYXJpYS1saXZlPVwicG9saXRlXCIgKGNsaWNrKT1cImluc3BlY3REZWNrKClcIj5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eURlY2snKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLnNoYXJlZERlY2subGVuZ3RoIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS16b25lLWNhcmRcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVBsYWNlJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUVtcHR5JykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlXCI+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmVcIiBbY2xhc3MuaXMtcGxhY2luZy1jYXJkXT1cImNhblBsYWNlU2VsZWN0ZWRDaGFyYWN0ZXIoKSB8fCBpc0RyYWdnaW5nQ2hhcmFjdGVyKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVlvdXJCYXR0bGUnKVwiPlxuICAgICAgICAgICAgQGZvciAoc2xvdCBvZiBiYXR0bGVTbG90cygnUDEnKTsgdHJhY2sgc2xvdC50cmFja0lkKSB7XG4gICAgICAgICAgICAgIEBpZiAoc2xvdC5jYXJkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZSBjaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRBdHRhY2tlcigpPy5pbnN0YW5jZUlkID09PSBzbG90LmNhcmQuaW5zdGFuY2VJZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZXhoYXVzdGVkXT1cIiFzbG90LmNhcmQuY2FuQXR0YWNrXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1yZWFkeS1hdHRhY2tlcl09XCJpc093blR1cm4oKSAmJiBzbG90LmNhcmQuY2FuQXR0YWNrXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBdHRhY2tlcihzbG90LmNhcmQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImNoYXJhY3RlclJlbmRlckNhcmQoc2xvdC5jYXJkKVwiIHZhcmlhbnQ9XCJ0YWJsZVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNsb3RcIlxuICAgICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJiYXR0bGVTbG90RHJvcElkKCRpbmRleClcIlxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCIkaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiWydjaHJpc3RpYW5pdHktaGFuZC1zb3VyY2UnXVwiXG4gICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJjYW5Ecm9wT25CYXR0bGVTbG90XCJcbiAgICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXRdPVwiY2FuUGxhY2VTZWxlY3RlZENoYXJhY3RlcigpIHx8IGlzRHJhZ2dpbmdDaGFyYWN0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICB2YWxMaWdodFJpcHBsZVxuICAgICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wT25CYXR0bGVTbG90KCRldmVudCwgJGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGxheVNlbGVjdGVkQ2FyZCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAaWYgKGNhblBsYWNlU2VsZWN0ZWRDaGFyYWN0ZXIoKSB8fCBpc0RyYWdnaW5nQ2hhcmFjdGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5UGxheUhlcmUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy16b25lXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlXCJcbiAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgIGlkPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1kcm9wXCJcbiAgICAgICAgICAgICAgICB2YWxMaWdodFJpcHBsZVxuICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlsnY2hyaXN0aWFuaXR5LWhhbmQtc291cmNlJ11cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1wbGF5LXRhcmdldF09XCJjYW5QbGFjZVNlbGVjdGVkT2ZmZXJpbmcoKSB8fCBpc0RyYWdnaW5nT2ZmZXJpbmcoKVwiXG4gICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwiY2FuRHJvcE9uT2ZmZXJpbmdzXCJcbiAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wT25PZmZlcmluZ3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9mZmVyaW5nUGlsZSgnUDEnKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ3MnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJlYWR5T2ZmZXJpbmdzKHBsYXllcigpKSB9fS97eyB0b3RhbE9mZmVyaW5ncyhwbGF5ZXIoKSkgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIGNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b25cIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwiaW5zcGVjdExlYWRlcignUDEnKVwiPlxuICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImxlYWRlclJlbmRlckNhcmQocGxheWVyKCkpXCIgdmFyaWFudD1cInRhYmxlXCI+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLWNvbW1hbmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1hdmF0YXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJwbGF5ZXIoKS5hdmF0YXJDb2xvclwiPnt7IHBsYXllcigpLmF2YXRhciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktZW5kLXR1cm5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJlbmRUdXJuKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5RW5kVHVybicpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLW1ldGVyXCI+XG4gICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5SGFuZCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgcGxheWVyKCkuaGFuZD8ubGVuZ3RoID8/IDAgfX08L3N0cm9uZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1mYW5cIlxuICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgaWQ9XCJjaHJpc3RpYW5pdHktaGFuZC1zb3VyY2VcIlxuICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImRyb3BUYXJnZXRJZHMoKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlZb3VySGFuZCcpXCJcbiAgICAgICAgICAocG9pbnRlcmxlYXZlKT1cImNsZWFySG92ZXJlZEhhbmRJbmRleCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBmb3IgKGNhcmRJZCBvZiBwbGF5ZXIoKS5oYW5kID8/IFtdOyB0cmFjayBjYXJkSWQgKyAkaW5kZXgpIHtcbiAgICAgICAgICAgIEBsZXQgY2FyZCA9IGNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkSGFuZENhcmQoKSA9PT0gY2FyZElkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLWRyYWdnaW5nXT1cImRyYWdnaW5nQ2FyZElkKCkgPT09IGNhcmRJZFwiXG4gICAgICAgICAgICAgIFtzdHlsZS56LWluZGV4XT1cImhhbmRDYXJkWkluZGV4KCRpbmRleClcIlxuICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cImZhblRyYW5zZm9ybSgkaW5kZXgsIHBsYXllcigpLmhhbmQ/Lmxlbmd0aCA/PyAwLCBmYWxzZSlcIlxuICAgICAgICAgICAgICAocG9pbnRlcmVudGVyKT1cInNldEhvdmVyZWRIYW5kSW5kZXgoJGluZGV4KVwiXG4gICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJzZXRIb3ZlcmVkSGFuZEluZGV4KCRpbmRleClcIlxuICAgICAgICAgICAgICAocG9pbnRlcnVwKT1cInJlbGVhc2VIb3ZlcmVkSGFuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIGNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCBjaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgdmFsTGlnaHRSaXBwbGVcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY2FyZElkXCJcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiFjYW5QbGF5KGNhcmQpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRIYW5kQ2FyZCgpID09PSBjYXJkSWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1kaXNhYmxlZF09XCIhY2FuUGxheShjYXJkKVwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cInN0YXJ0RHJhZ2dpbmdDYXJkKGNhcmRJZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwiZW5kRHJhZ2dpbmdDYXJkKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RIYW5kQ2FyZChjYXJkSWQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwiZGVmaW5pdGlvblRvUmVuZGVyQ2FyZChjYXJkKVwiIHZhcmlhbnQ9XCJoYW5kXCI+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1leWVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5UHJldmlld0NhcmQnKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImluc3BlY3RIYW5kQ2FyZChjYXJkSWQsIHRydWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzZWxlY3RlZFByZXZpZXcoKSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1wcmV2aWV3LWJhY2tkcm9wXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlDbG9zZVByZXZpZXcnKVwiIChjbGljayk9XCJjbG9zZVByZXZpZXcoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8YXNpZGVcbiAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLXNoZWxsXCJcbiAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZC1jbG9zZVwiIChjbGljayk9XCJjbG9zZVByZXZpZXcoKVwiPlxuICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmRcIlxuICAgICAgICAgICAgW3N0eWxlLi0tcHJldmlldy1yb3RhdGUteF09XCJwcmV2aWV3VGlsdCgpLnJvdGF0ZVggKyAnZGVnJ1wiXG4gICAgICAgICAgICBbc3R5bGUuLS1wcmV2aWV3LXJvdGF0ZS15XT1cInByZXZpZXdUaWx0KCkucm90YXRlWSArICdkZWcnXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLXByZXZpZXctc2hpZnQteF09XCJwcmV2aWV3VGlsdCgpLnNoaWZ0WCArICdweCdcIlxuICAgICAgICAgICAgW3N0eWxlLi0tcHJldmlldy1zaGlmdC15XT1cInByZXZpZXdUaWx0KCkuc2hpZnRZICsgJ3B4J1wiXG4gICAgICAgICAgICAocG9pbnRlcm1vdmUpPVwidGlsdFByZXZpZXcoJGV2ZW50KVwiXG4gICAgICAgICAgICAocG9pbnRlcmxlYXZlKT1cInJlc2V0UHJldmlld1RpbHQoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RlZFByZXZpZXdSZW5kZXJDYXJkKCk7IGFzIHByZXZpZXdDYXJkKSB7XG4gICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwicHJldmlld0NhcmRcIiB2YXJpYW50PVwiZnVsbFwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAocHJldmlld1J1bGUoKTsgYXMgcnVsZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmk8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNtYWxsPnt7IHQoJ2NocmlzdGlhbml0eUNhcmRSdWxlJykgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcnVsZS50aXRsZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxwPnt7IHJ1bGUuYm9keSB9fTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvYXNpZGU+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2VsZWN0ZWRJbmZvKCk7IGFzIGluZm8pIHtcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktaW5mby1iYWNrZHJvcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2xvc2UnKVwiIChjbGljayk9XCJjbG9zZUluZm8oKVwiPjwvYnV0dG9uPlxuICAgICAgICA8YXNpZGUgY2xhc3M9XCJjaHJpc3RpYW5pdHktaW5mby1wYW5lbFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZSBjaHJpc3RpYW5pdHktaW5mby1jbG9zZVwiIChjbGljayk9XCJjbG9zZUluZm8oKVwiPlxuICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcnVsZS1ub3RlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmk8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c21hbGw+e3sgaW5mby5leWVicm93IH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgPGgyPnt7IGluZm8udGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IGluZm8ubWV0YSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyBpbmZvLmJvZHkgfX08L3A+XG4gICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICBAZm9yIChmYWN0IG9mIGluZm8uZmFjdHM7IHRyYWNrIGZhY3QpIHtcbiAgICAgICAgICAgICAgICAgIDxsaT57eyBmYWN0IH19PC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hc2lkZT5cbiAgICAgIH1cblxuICAgICAgQGlmIChzY3JlZW4oKSA9PT0gJ3RhYmxlJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1hY3Rpb25zXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgPHA+e3sgc3RhdHVzVGV4dCgpIH19PC9wPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwic2VsZWN0ZWRBY3Rpb25EaXNhYmxlZCgpXCIgKGNsaWNrKT1cInBsYXlTZWxlY3RlZENhcmQoKVwiPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZEFjdGlvbkxhYmVsKCkgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0TW9jaygpXCI+XG4gICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVJlc2V0JykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd0hpc3RvcnkoKSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlDbG9zZUhpc3RvcnknKVwiIChjbGljayk9XCJzaG93SGlzdG9yeS5zZXQoZmFsc2UpXCI+PC9idXR0b24+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyXCI+XG4gICAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgIDxoMj57eyB0KCdjaHJpc3RpYW5pdHlIaXN0b3J5JykgfX08L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1kaWFsb2ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBnYW1lKCkuaGlzdG9yeVpvbmUubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2VcIiAoY2xpY2spPVwic2hvd0hpc3Rvcnkuc2V0KGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2Nsb3NlJykgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICBAaWYgKGdhbWUoKS5oaXN0b3J5Wm9uZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGNhcmRJZCBvZiBnYW1lKCkuaGlzdG9yeVpvbmU7IHRyYWNrIGNhcmRJZCArICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBsZXQgY2FyZCA9IGNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktZ2FsbGVyeS1jYXJkLWJ1dHRvbiBjaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uXCIgdmFsTGlnaHRSaXBwbGUgKGNsaWNrKT1cImluc3BlY3RIaXN0b3J5Q2FyZChjYXJkSWQpXCI+XG4gICAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImRlZmluaXRpb25Ub1JlbmRlckNhcmQoY2FyZClcIiB2YXJpYW50PVwibGlzdFwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnlFbXB0eScpIH19PC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHNob3dHYWxsZXJ5KCkpIHtcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGlzdG9yeS1iYWNrZHJvcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5Q2xvc2VHYWxsZXJ5JylcIiAoY2xpY2spPVwiY2xvc2VHYWxsZXJ5KClcIj48L2J1dHRvbj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgY2hyaXN0aWFuaXR5LWdhbGxlcnktZHJhd2VyXCI+XG4gICAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxoMj57eyB0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5JykgfX08L2gyPlxuICAgICAgICAgICAgICA8cD57eyBnYWxsZXJ5RWRpdGlvbkxhYmVsKCkgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktZGlhbG9nLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgZ2FsbGVyeUNhcmRzKCkubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VHYWxsZXJ5KClcIj5cbiAgICAgICAgICAgICAgICB7eyB0KCdjbG9zZScpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzXCI+XG4gICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUdhbGxlcnlTZWFyY2gnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzZWFyY2hcIiBbdmFsdWVdPVwiZ2FsbGVyeVNlYXJjaCgpXCIgKGlucHV0KT1cInNldEdhbGxlcnlTZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCJ0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5U2VhcmNoUGxhY2Vob2xkZXInKVwiIC8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5RmlsdGVyJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzZWxlY3QgW3ZhbHVlXT1cImdhbGxlcnlUeXBlKClcIiAoY2hhbmdlKT1cInNldEdhbGxlcnlUeXBlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZ2FsbGVyeVR5cGVPcHRpb25zKCk7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+e3sgb3B0aW9uLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1nYWxsZXJ5LWVkaXRpb24tc3RyaXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaXMtYWN0aXZlXCIgdmFsTGlnaHRSaXBwbGU+XG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJnYWxsZXJ5RWRpdGlvbkljb24oKVwiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUdlbmVzaXNFZGl0aW9uJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZFwiPlxuICAgICAgICAgICAgQGZvciAoY2FyZCBvZiBnYWxsZXJ5Q2FyZHMoKTsgdHJhY2sgY2FyZC5pZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1nYWxsZXJ5LWNhcmQtYnV0dG9uIGNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b25cIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwiaW5zcGVjdEdhbGxlcnlDYXJkKGNhcmQuaWQpXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1jaHJpc3RpYW5pdHktY2FyZCBbY2FyZF09XCJkZWZpbml0aW9uVG9SZW5kZXJDYXJkKGNhcmQpXCIgdmFyaWFudD1cImxpc3RcIj48L3ZhbC1jaHJpc3RpYW5pdHktY2FyZD5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUdhbGxlcnlFbXB0eScpIH19PC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAob2ZmZXJpbmdzU2VhdCgpKSB7XG4gICAgICAgIEBsZXQgb2ZmZXJpbmdQbGF5ZXIgPSBnYW1lKCkucGxheWVyc1tvZmZlcmluZ3NTZWF0KCkhXTtcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGlzdG9yeS1iYWNrZHJvcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5Q2xvc2VPZmZlcmluZ3MnKVwiIChjbGljayk9XCJjbG9zZU9mZmVyaW5ncygpXCI+PC9idXR0b24+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGNocmlzdGlhbml0eS1vZmZlcmluZ3MtZHJhd2VyXCI+XG4gICAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgIDxoMj57eyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ3MnKSB9fTwvaDI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHJlYWR5T2ZmZXJpbmdzKG9mZmVyaW5nUGxheWVyKSB9fS97eyB0b3RhbE9mZmVyaW5ncyhvZmZlcmluZ1BsYXllcikgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZVwiIChjbGljayk9XCJjbG9zZU9mZmVyaW5ncygpXCI+XG4gICAgICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZS1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+aTwvc3Bhbj5cbiAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5nc1J1bGVCb2R5JykgfX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0XCI+XG4gICAgICAgICAgICBAZm9yIChvZmZlcmluZyBvZiBvZmZlcmluZ1BsYXllci5vZmZlcmluZ3M7IHRyYWNrIG9mZmVyaW5nLmluc3RhbmNlSWQpIHtcbiAgICAgICAgICAgICAgPGFydGljbGUgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93XCIgW2NsYXNzLmlzLWV4aGF1c3RlZF09XCIhb2ZmZXJpbmcucmVhZHlcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIGNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b25cIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwiaW5zcGVjdE9mZmVyaW5nKG9mZmVyaW5nKVwiPlxuICAgICAgICAgICAgICAgICAgPHZhbC1jaHJpc3RpYW5pdHktY2FyZCBbY2FyZF09XCJvZmZlcmluZ1JlbmRlckNhcmQob2ZmZXJpbmcpXCIgdmFyaWFudD1cImxpc3RcIj48L3ZhbC1jaHJpc3RpYW5pdHktY2FyZD5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBvZmZlcmluZy5yZWFkeSA/IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5nUmVhZHknKSA6IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5nRXhoYXVzdGVkJykgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxwPnt7IG9mZmVyaW5nQWJpbGl0eVRleHQob2ZmZXJpbmcpIH19PC9wPlxuICAgICAgICAgICAgICAgICAgQGlmIChvZmZlcmluZy5hYmlsaXR5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5Vc2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmcsIG9mZmVyaW5nc1NlYXQoKSEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXNlT2ZmZXJpbmdBYmlsaXR5KG9mZmVyaW5nLCBvZmZlcmluZ3NTZWF0KCkhKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyB0KCdjaHJpc3RpYW5pdHlVc2VBYmlsaXR5JykgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuICAgIDwvbWFpbj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1pbms6IHZhcigtLXZhbC10ZXh0LWNvbG9yLCAjMWYyOTMzKTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtc3VyZmFjZTogI2ZmZmZmZjtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtcGFyY2htZW50OiAjZWZmNmZmO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1vbGl2ZTogIzFkNGVkODtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZDogIzI1NjNlYjtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1zb2Z0OiByZ2JhKDM3LCA5OSwgMjM1LCAwLjE2KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1yaW5nOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjQ0KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZ2xvdzogcmdiYSgzNywgOTksIDIzNSwgMC4yNCk7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzOiAjMjU2M2ViO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3c6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMTUpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3ctc3Ryb25nOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjI2KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3Q6IDUgLyA3LjQ1O1xuICAgICAgICAtLWNocmlzdGlhbml0eS1jYXJkLWJhY2s6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxNiwgNDIsIDY3LCAwLjE2KSwgcmdiYSgxNiwgNDIsIDY3LCAwLjAzKSksXG4gICAgICAgICAgcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCg0NWRlZywgI2RiZWFmZSAwIDAuMzNyZW0sICNmZmZmZmYgMC4zM3JlbSAwLjY2cmVtKTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktY2FyZC1iYWNrLXNvZnQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxNiwgNDIsIDY3LCAwLjExKSwgcmdiYSgxNiwgNDIsIDY3LCAwLjAyKSksXG4gICAgICAgICAgcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCg0NWRlZywgI2RiZWFmZSAwIDAuMzNyZW0sICNmZmZmZmYgMC4zM3JlbSAwLjY2cmVtKTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBvdmVyZmxvdy14OiBjbGlwO1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluayk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2hlbGwge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSAwLjI1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjZmOGZiO1xuICAgICAgICBvdmVyZmxvdy14OiBjbGlwO1xuICAgICAgICBvdmVyZmxvdy15OiB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtc3RyaXAsXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeSxcbiAgICAgIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogMC43NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXIgaDEsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgc21hbGwsXG4gICAgICAuY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmQgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeSBoMixcbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4zNXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXItYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1vcGVuIHtcbiAgICAgICAgbWluLWhlaWdodDogMi4ycmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNzVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmcpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIzOSwgMjQ2LCAyNTUsIDAuOTgpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAwJSwgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtc29mdCksIHRyYW5zcGFyZW50IDQyJSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtaW5rKTtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgZm9udC1zaXplOiAwLjgycmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNTVyZW0gMS4ycmVtIHJnYmEoMzcsIDk5LCAyMzUsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoLFxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IG1pbigzNHJlbSwgY2FsYygxMDBkdmggLSA4cmVtKSk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTgpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjlyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgMTglLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjE2KSwgdHJhbnNwYXJlbnQgMjJyZW0pLFxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjM5LCAyNDYsIDI1NSwgMC45MyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NykpLFxuICAgICAgICAgIHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWJhY2stc29mdCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMS4ycmVtIDMuMnJlbSByZ2JhKDM3LCA5OSwgMjM1LCAwLjEyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2gge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogMS4ycmVtO1xuICAgICAgICBwYWRkaW5nOiAyLjVyZW0gMS4yNXJlbTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNwbGFzaF9fbWFyayB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDYuNHJlbTtcbiAgICAgICAgaGVpZ2h0OiA4LjlyZW07XG4gICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAxcmVtIDEuOHJlbSByZ2JhKDgyLCA2NCwgMjgsIDAuMTgpKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2hfX21hcmsgaSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuN3JlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDc2JSAxMiUsIHJnYmEoMjUwLCAyMDQsIDIxLCAwLjkpIDAgMC40MnJlbSwgdHJhbnNwYXJlbnQgMC40NXJlbSksXG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk4KSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrIGk6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xLjFyZW0pIHJvdGF0ZSgtOWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrIGk6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0wLjMycmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2hfX21hcmsgaTpudGgtY2hpbGQoMykge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMS4xcmVtKSByb3RhdGUoOWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAyLjFyZW0gMS4wNXJlbSAyLjVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNTVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNDQlLCByZ2JhKDI0NSwgMTk5LCA4NSwgMC43KSwgdHJhbnNwYXJlbnQgMzYlKSxcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDk1LCAxMTEsIDQyLCAwLjIpLCByZ2JhKDk1LCAxMTEsIDQyLCAwLjA4KSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jb3B5IHNwYW4ge1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLW9saXZlKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc2cmVtO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNwbGFzaCBoMixcbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnQgaDIsXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0IHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoIGgyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMC4ycmVtO1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuNjVyZW0sIDd2dywgMi43cmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoIHAge1xuICAgICAgICBtYXgtd2lkdGg6IDI2cmVtO1xuICAgICAgICBtYXJnaW46IDAuNTVyZW0gYXV0byAwO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjk2cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDFyZW07XG4gICAgICAgIHBhZGRpbmc6IGNsYW1wKDAuODVyZW0sIDJ2dywgMS4zNXJlbSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2hlcm8ge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIG1pbm1heCgxMnJlbSwgMThyZW0pO1xuICAgICAgICBnYXA6IDFyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NvcHkge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNDVyZW07XG4gICAgICAgIG1heC13aWR0aDogMzZyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnQgaDIge1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuNnJlbSwgNnZ3LCAyLjVyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wMjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fY29weSBwLFxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIHAge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY4KTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2ZhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLWhlaWdodDogMTNyZW07XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19mYW4gdmFsLWNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB3aWR0aDogY2xhbXAoNS43cmVtLCAxMnZ3LCA3LjJyZW0pO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgOTIlO1xuICAgICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMXJlbSAxLjVyZW0gcmdiYSg4MiwgNjQsIDI4LCAwLjE4KSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgbWlubWF4KDAsIDFmcikpO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIGFydGljbGUsXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjY1cmVtO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdGFydDtcbiAgICAgICAgcGFkZGluZzogMC45NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjEyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjc1cmVtIDEuN3JlbSByZ2JhKDgyLCA2NCwgMjgsIDAuMDgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBhcnRpY2xlIHtcbiAgICAgICAgbWluLWhlaWdodDogMTFyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4wNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fc3RhdHVzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDAuNDVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX3N0YXR1cyBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgYXJ0aWNsZSA+IHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgICAgICBtaW4taGVpZ2h0OiAxLjg1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNjJyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzcsIDk5LCAyMzUsIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDI0NiwgMjU1LCAwLjg4KTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDg1MDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCBtaW5tYXgoMCwgMWZyKSk7XG4gICAgICAgIGdhcDogMC41NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgYXJ0aWNsZSB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDguNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjcyKTtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgb3BhY2l0eTogMC44MjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjkycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmltYXJ5LWFjdGlvbixcbiAgICAgIC5jaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvbiB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIuNXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjlyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXByaW1hcnktYWN0aW9uIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjE2KTtcbiAgICAgICAgYmFja2dyb3VuZDogIzEwMmE0MztcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvbiB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmcpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtcGFyY2htZW50KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgLmNocmlzdGlhbml0eS10dXJuIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncyBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1kZWNrIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYWNlIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBpbGUgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyIHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY0KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZGVjayxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxhY2Uge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMTVyZW07XG4gICAgICAgIG1pbi13aWR0aDogNS4yNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbSAwLjY1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdHVybi5pcy1vd24tdHVybiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOCwgMTI4LCAxMDgsIDAuMzUpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWNmZGY1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXN0cmlwIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBwYWRkaW5nOiAwLjQ1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllci0tb3Bwb25lbnQge1xuICAgICAgICBkaXJlY3Rpb246IHJ0bDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXItLW9wcG9uZW50IGRpdiB7XG4gICAgICAgIGRpcmVjdGlvbjogbHRyO1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgZGl2IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCxcbiAgICAgIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43MnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAganVzdGlmeS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDQuMnJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjU1cmVtO1xuICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmQgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXRhYmxlIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuNDVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2RjZWFmYjtcbiAgICAgICAgb3ZlcmZsb3cteDogY2xpcDtcbiAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItc2lkZSB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4zNXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBwYWRkaW5nOiAwLjM1cmVtIDAuM3JlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbm1heCg3cmVtLCAxZnIpIGF1dG87XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEzLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlLS1vcHBvbmVudCB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoN3JlbSwgMWZyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUge1xuICAgICAgICAtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aDogY2xhbXAoNC44cmVtLCAxNXZ3LCA2LjZyZW0pO1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpKTtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG1pbi1oZWlnaHQ6IGNsYW1wKDkuMXJlbSwgMjl2dywgMTFyZW0pO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuNHJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBiYWNrZ3JvdW5kIDE2MG1zIGVhc2UsXG4gICAgICAgICAgYm94LXNoYWRvdyAxNjBtcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLmlzLXBsYWNpbmctY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1MCwgMjQwLCAwLjk2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg0KSksXG4gICAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjE0cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXNvZnQpLFxuICAgICAgICAgIDAgMC44cmVtIDEuN3JlbSByZ2JhKDk1LCAxMTEsIDQyLCAwLjEyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC40cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgYnV0dG9uLFxuICAgICAgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItLXRhcmdldCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuOHJlbTtcbiAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNXJlbSAxLjI1cmVtIHJnYmEoMzYsIDQ4LCA2OCwgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCBzcGFuIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHN0cm9uZyB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBwYWRkaW5nOiAwLjE1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLXNlbGVjdGVkIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZCk7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgMCAwIDAgMC4xOHJlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1zb2Z0KSxcbiAgICAgICAgICAwIDAuODVyZW0gMS40cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtZGlzYWJsZWQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtZXhoYXVzdGVkIHtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLXRhcmdldCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI2RjMjYyNjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkcyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiAwLjdyZW07XG4gICAgICAgIGdhcDogMC4xNnJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGVuZDtcbiAgICAgICAgbWluLWhlaWdodDogMS4wNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkcyBpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAwLjY1cmVtO1xuICAgICAgICBoZWlnaHQ6IDAuOTVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTYsIDQyLCA2NywgMC4yMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMThyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZHMgaS5pcy11c2VkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2NiZDVlMTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICAgICAgICB3aWR0aDogdmFyKC0tY2hyaXN0aWFuaXR5LWJhdHRsZS1jYXJkLXdpZHRoKTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDM2LCA0OCwgNjgsIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmcpO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTAsIDI0MCwgMC45MiksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC44MikpLFxuICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICAgICAgY29sb3I6ICM1ZDQzMDU7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgaW5zZXQgMCAwIDAgMC4xMnJlbSByZ2JhKDIxNCwgMTYyLCAyOSwgMC4yKSxcbiAgICAgICAgICAwIDAuN3JlbSAxLjI1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgICBhbmltYXRpb246IGNocmlzdGlhbml0eS10YXJnZXQtcHVsc2UgMTQ1MG1zIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0OjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMTQsIDE2MiwgMjksIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjRyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyMTQsIDE2MiwgMjksIDAuMSksIHRyYW5zcGFyZW50IDQ2JSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNDIlLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ2xvdyksIHRyYW5zcGFyZW50IDU4JSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQgc3BhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgcGFkZGluZzogMC4xNnJlbSAwLjQ0cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGNocmlzdGlhbml0eS10YXJnZXQtcHVsc2Uge1xuICAgICAgICAwJSxcbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAgIGluc2V0IDAgMCAwIDAuMTJyZW0gcmdiYSgyMTQsIDE2MiwgMjksIDAuMiksXG4gICAgICAgICAgICAwIDAuN3JlbSAxLjI1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgICAgaW5zZXQgMCAwIDAgMC4xNnJlbSByZ2JhKDIxNCwgMTYyLCAyOSwgMC4zNCksXG4gICAgICAgICAgICAwIDAuOXJlbSAxLjY1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3ctc3Ryb25nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDZyZW0sIDhyZW0pO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgbWluLWhlaWdodDogMi40cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b246bm90KDpkaXNhYmxlZCksXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzEwMmE0MztcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBtaW4taGVpZ2h0OiAxMC44cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuMjVyZW0gMi4xcmVtO1xuICAgICAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGYge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHotaW5kZXg6IDEyO1xuICAgICAgICBtaW4taGVpZ2h0OiAxMnJlbTtcbiAgICAgICAgbWFyZ2luLXRvcDogLTEuMTVyZW07XG4gICAgICAgIHBhZGRpbmc6IDEuNDVyZW0gMC4yNXJlbSAxcmVtO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLXNoZWxmLS1vcHBvbmVudCB7XG4gICAgICAgIHotaW5kZXg6IDg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDYuODVyZW07XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuNDVyZW0gMC4yNXJlbSAwLjg1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuOXJlbTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuNzVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbi0tb3Bwb25lbnQgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYWNrIHtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDMuN3JlbSwgMTJ2dywgNC45cmVtKTtcbiAgICAgICAgbWFyZ2luLWlubGluZTogLTAuOXJlbTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDEyMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFjazpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudCAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWJhY2s6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvIGF1dG87XG4gICAgICAgIGdhcDogMC4yOHJlbTtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RyZXRjaDtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDQuOXJlbSwgMTd2dywgNy4xcmVtKTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIHBhZGRpbmc6IDAuNDhyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxMTUlO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHRyYW5zZm9ybSAxNjBtcyBlYXNlLFxuICAgICAgICAgIGJveC1zaGFkb3cgMTYwbXMgZWFzZSxcbiAgICAgICAgICBib3JkZXItY29sb3IgMTYwbXMgZWFzZTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjVyZW0gMS4yNXJlbSByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbiA+IHZhbC1jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY2FyZC1idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IG1pbigxMDAlLCA2LjhyZW0pO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY2FyZC1idXR0b24gPiB2YWwtY2hyaXN0aWFuaXR5LWNhcmQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24ge1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbjpob3ZlciB2YWwtY2hyaXN0aWFuaXR5LWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24uaXMtc2VsZWN0ZWQgdmFsLWNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24uaXMtc2VsZWN0ZWQgdmFsLWNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24uaXMtdGFyZ2V0IHZhbC1jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbi5pcy10YXJnZXQgdmFsLWNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMC41NXJlbSByZ2JhKDIxNCwgMTYyLCAyOSwgMC4zNSkpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYXR0bGUuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbi5pcy1yZWFkeS1hdHRhY2tlciB2YWwtY2hyaXN0aWFuaXR5LWNhcmQge1xuICAgICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMC40NXJlbSAwLjhyZW0gcmdiYSg5NSwgMTExLCA0MiwgMC4xNikpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYXR0bGUuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbi5pcy1zZWxlY3RlZCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMC4yOHJlbSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG8gYXV0bztcbiAgICAgICAgZ2FwOiAwLjI4cmVtO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBwYWRkaW5nOiAwLjQ4cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45OCksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC45OCkpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTUlIDAlLCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4xMiksIHRyYW5zcGFyZW50IDQ0JSk7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgMCAwLjVyZW0gMS4yNXJlbSByZ2JhKDM2LCA0OCwgNjgsIDAuMSksXG4gICAgICAgICAgaW5zZXQgMCAwIDAgMC4xOHJlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvO1xuICAgICAgICBnYXA6IDAuMTZyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHNtYWxsIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42NCk7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMC41MnJlbSwgMS41dncsIDAuNjhyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3Ryb25nIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDE7XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDAuODJyZW0sIDIuNXZ3LCAxLjA1cmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDI7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHN0cm9uZyB7XG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgICAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc21hbGwge1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgICAgIG1heC13aWR0aDogODglO1xuICAgICAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHNwYW4ge1xuICAgICAgICBncmlkLWNvbHVtbjogMjtcbiAgICAgICAgZ3JpZC1yb3c6IDEgLyBzcGFuIDI7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogMS4zcmVtO1xuICAgICAgICBoZWlnaHQ6IDEuM3JlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjIycmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZDkxYTtcbiAgICAgICAgY29sb3I6ICMyNDMwNDQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMC4wOHJlbSAwIHJnYmEoODIsIDY0LCAyOCwgMC4xOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3Bhbi5pcy1vZmZlcmluZy1waXBzLFxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtY29zdC5pcy1vZmZlcmluZy1waXBzLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHNwYW4uaXMtb2ZmZXJpbmctcGlwcyB7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdhcDogMC4xNHJlbTtcbiAgICAgICAgbWluLXdpZHRoOiBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAwIDAuMjhyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3Bhbi5pcy1vZmZlcmluZy1waXBzIGksXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1jb3N0LmlzLW9mZmVyaW5nLXBpcHMgaSxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBzcGFuLmlzLW9mZmVyaW5nLXBpcHMgaSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXBpcHMgaSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMC43MnJlbTtcbiAgICAgICAgaGVpZ2h0OiAwLjcycmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDM0JSAyOCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KSAwIDAuMTJyZW0sIHRyYW5zcGFyZW50IDAuMTNyZW0pLFxuICAgICAgICAgICNmZmQ5MWE7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgaW5zZXQgMCAtMC4wOHJlbSAwIHJnYmEoODIsIDY0LCAyOCwgMC4xOCksXG4gICAgICAgICAgMCAwLjEycmVtIDAuMjRyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjM2cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoOTUsIDExMSwgNDIsIDAuMTgpLCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4xNCkpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDE4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKSwgdHJhbnNwYXJlbnQgNDglKSxcbiAgICAgICAgICAjZGJlN2VmO1xuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSgzNiwgNDgsIDY4LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWFydCA+IHNwYW4ge1xuICAgICAgICBtYXgtd2lkdGg6IDc4JTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzYsIDQ4LCA2OCwgMC40OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMC44MnJlbSwgMi4ydncsIDEuMDVyZW0pO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wMjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWFydCBzbWFsbCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMC4yOHJlbTtcbiAgICAgICAgbWF4LXdpZHRoOiA3OCU7XG4gICAgICAgIHBhZGRpbmc6IDAuMXJlbSAwLjM0cmVtO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweCAwIDAgOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42Nik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC40OHJlbTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1lZmZlY3Qge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogMC4xcmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAxLjQ1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjI0cmVtO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjM0cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDcwJSwgcmdiYSgzNiwgNDgsIDY4LCAwLjA2KSwgdHJhbnNwYXJlbnQgNDQlKSxcbiAgICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODYpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtZWZmZWN0IHN0cm9uZyB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBhbGlnbi1zZWxmOiBlbmQ7XG4gICAgICAgIHBhZGRpbmc6IDAuMTJyZW0gMC4zMnJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlZGYyZjc7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMC42NnJlbSwgMnZ3LCAwLjgycmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1lZmZlY3QgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC41OHJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1mb290ZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogMC4yMnJlbTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC40NnJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmF0dGxlIHtcbiAgICAgICAgZ2FwOiAwLjIycmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjQycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWJhdHRsZSAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0IHtcbiAgICAgICAgbWluLWhlaWdodDogMi42cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWxlYWRlciAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0IHtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjE0KSwgcmdiYSgyMTQsIDE2MiwgMjksIDAuMTYpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSAxOCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43OCksIHRyYW5zcGFyZW50IDQ4JSksXG4gICAgICAgICAgI2U3ZWVmODtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1saXN0IHtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDQuNHJlbSwgMjJ2dywgNS44cmVtKTtcbiAgICAgICAgcGFkZGluZzogMC4zOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1saXN0IC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQge1xuICAgICAgICBtaW4taGVpZ2h0OiAyLjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXAge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICAgIG1hcmdpbi1pbmxpbmU6IC0wLjQycmVtO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMnJlbTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDExNSU7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgdHJhbnNmb3JtIDE2MG1zIGVhc2UsXG4gICAgICAgICAgZmlsdGVyIDE2MG1zIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXA6aG92ZXIsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwLmlzLXNlbGVjdGVkLFxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcC5pcy1kcmFnZ2luZyB7XG4gICAgICAgIHotaW5kZXg6IDM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXA6aG92ZXIgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXAuaXMtc2VsZWN0ZWQgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXAuaXMtZHJhZ2dpbmcgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQpO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIDAgMCAwIDAuMTJyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtc29mdCksXG4gICAgICAgICAgMCAxcmVtIDJyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQge1xuICAgICAgICB0b3VjaC1hY3Rpb246IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQuY2RrLWRyYWctZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLmNkay1kcmFnLXByZXZpZXcge1xuICAgICAgICB3aWR0aDogY2xhbXAoNC45cmVtLCAxN3Z3LCA3LjFyZW0pO1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtcmluZyk7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgMCAwIDAgMC4xNnJlbSByZ2JhKDI1NSwgMjQ0LCAxOTQsIDAuNjgpLFxuICAgICAgICAgIDAgMS41cmVtIDNyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdy1zdHJvbmcpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyZGVnKSBzY2FsZSgxLjAzKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC5jZGstZHJhZy1wbGFjZWhvbGRlciB7XG4gICAgICAgIHdpZHRoOiBjbGFtcCg0LjlyZW0sIDE3dncsIDcuMXJlbSk7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgICBvcGFjaXR5OiAwLjIyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QuY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZS5jZGstZHJvcC1saXN0LWRyYWdnaW5nIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1yaW5nKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zbG90LmNkay1kcm9wLWxpc3QtcmVjZWl2aW5nLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlLmNkay1kcm9wLWxpc3QtcmVjZWl2aW5nIHtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjE4cmVtIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjM0KSxcbiAgICAgICAgICAwIDFyZW0gMS45cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3ctc3Ryb25nKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWV5ZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDUwJTtcbiAgICAgICAgYm90dG9tOiAwLjM4cmVtO1xuICAgICAgICB3aWR0aDogMi4xNXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjU1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzKSA1MiUsIHRyYW5zcGFyZW50KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC41NXJlbSAxLjFyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjE0KTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCAtMC4ycmVtKSBzY2FsZSgwLjkyKTtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBvcGFjaXR5IDE0MG1zIGVhc2UsXG4gICAgICAgICAgdHJhbnNmb3JtIDE0MG1zIGVhc2UsXG4gICAgICAgICAgYm9yZGVyLWNvbG9yIDE0MG1zIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1leWU6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHdpZHRoOiAxLjFyZW07XG4gICAgICAgIGhlaWdodDogMS4xcmVtO1xuICAgICAgICBib3JkZXI6IDAuMTJyZW0gc29saWQgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogODIlIDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSg0NWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1leWU6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgd2lkdGg6IDAuNDJyZW07XG4gICAgICAgIGhlaWdodDogMC40MnJlbTtcbiAgICAgICAgYm9yZGVyOiAwLjA5cmVtIHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMzUlIDMyJSwgI2ZmZmZmZiAwIDAuMDZyZW0sIHRyYW5zcGFyZW50IDAuMDdyZW0pLFxuICAgICAgICAgIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cyk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwOmhvdmVyIC5jaHJpc3RpYW5pdHktY2FyZC1leWUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwLmlzLXNlbGVjdGVkIC5jaHJpc3RpYW5pdHktY2FyZC1leWUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZXllOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDApIHNjYWxlKDEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUuaXMtcGxheS10YXJnZXQge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmcpO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTAsIDI0MCwgMC45NiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCkpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODIlIDE0JSwgcmdiYSgyNTAsIDIwNCwgMjEsIDAuMjgpIDAgMC43cmVtLCB0cmFuc3BhcmVudCAwLjcycmVtKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjEycmVtIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjI0KSxcbiAgICAgICAgICAwIDAuOHJlbSAxLjU1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgICBhbmltYXRpb246IGNocmlzdGlhbml0eS10YXJnZXQtcHVsc2UgMTQ1MG1zIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWJhY2ssXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYWNrIHtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDRyZW0sIDE0dncsIDUuN3JlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjhyZW0gMS41NXJlbSByZ2JhKDM2LCA0OCwgNjgsIDAuMTQpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgLTE4JTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYmFjayk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFjazo6YmVmb3JlLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmFjazo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDAuNXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjEyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4zOHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSk7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDAuMTJyZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgICBtYXJnaW4taW5saW5lOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSA+IHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgPiBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCA+IHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCA+IHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSA+IHNwYW4ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCA+IHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCA+IHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUgPiBzdHJvbmcge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDM7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBhbGlnbi1zZWxmOiBlbmQ7XG4gICAgICAgIHBhZGRpbmc6IDAuMTVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlZGYyZjc7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNS45cmVtLCA3cmVtKSBtaW5tYXgoNXJlbSwgMWZyKSBtaW5tYXgoNC4ycmVtLCA3cmVtKTtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgICAgICBqdXN0aWZ5LWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLXJhY2stLW9wcG9uZW50IHtcbiAgICAgICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDAuMzVyZW07XG4gICAgICAgIHotaW5kZXg6IDQ7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ncmlkO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBnYXA6IDAuMjVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuN3JlbTtcbiAgICAgICAgcGFkZGluZzogMC4xOHJlbSAwLjQ2cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuMzVyZW0gMC44cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlci0tb3Bwb25lbnQge1xuICAgICAgICB0b3A6IDAuMTVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlciBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42OHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2UsXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1jb21tYW5kIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICBqdXN0aWZ5LWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2Uge1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdGFydDtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43Nik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2UtLW9wcG9uZW50IHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZSBzdHJvbmcge1xuICAgICAgICBtYXgtd2lkdGg6IDYuNXJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYXZhdGFyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDEuODVyZW07XG4gICAgICAgIGhlaWdodDogMS44NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBmb250LXNpemU6IDAuNzZyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjlyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjE2KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtem9uZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiAwLjI1cmVtO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtbWluaSxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgbWluLWhlaWdodDogNC45cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjQ4cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gbWlubWF4KDAsIDFmcikgYXV0byBhdXRvO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUsXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIG1pbm1heCgyLjZyZW0sIDFmcikgYXV0bztcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RyZXRjaDtcbiAgICAgICAgZ2FwOiAwLjMycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtbWluaSB7XG4gICAgICAgIHdpZHRoOiAzLjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgaXNvbGF0aW9uOiBpc29sYXRlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IHN0YXJ0O1xuICAgICAgICB3aWR0aDogbWluKDEwMCUsIDUuOXJlbSk7XG4gICAgICAgIGhlaWdodDogNy4xcmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBtYXgtaGVpZ2h0OiA3LjFyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuOTVyZW0gMC41MnJlbSAwLjZyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2ZmZmZmZiwgI2Y4ZmFmYyksXG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyNTAsIDIwNCwgMjEsIDAuMTgpLCB0cmFuc3BhcmVudCA0MiUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgPiAuY2RrLWRyYWctcGxhY2Vob2xkZXIsXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QgPiAuY2RrLWRyYWctcGxhY2Vob2xkZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgaSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAyLjQ1cmVtO1xuICAgICAgICBsZWZ0OiAwLjcycmVtO1xuICAgICAgICB6LWluZGV4OiAtMTtcbiAgICAgICAgd2lkdGg6IDIuNTVyZW07XG4gICAgICAgIGhlaWdodDogMy41NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjE4KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4zNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpLCByZ2JhKDI0MSwgMjQ1LCAyNDksIDAuOTIpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDc4JSAxOCUsICNmYWNjMTUgMCAwLjM4cmVtLCB0cmFuc3BhcmVudCAwLjRyZW0pO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuMzVyZW0gMC44NXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMSk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC01ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIGk6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMC4yOHJlbSwgMC4wOHJlbSkgcm90YXRlKDNkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgaTpudGgtY2hpbGQoMykge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLjU1cmVtLCAwLjE4cmVtKSByb3RhdGUoLTFkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIHtcbiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDQuNzVyZW0sIDE3dncsIDZyZW0pO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcmFjay1zcGFjZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWluLWhlaWdodDogMXB4O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgdmFyKC0tY2hyaXN0aWFuaXR5LWJhdHRsZS1jYXJkLXdpZHRoKSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoNC4zcmVtLCAxZnIpKTtcbiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS16b25lLWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDYuNDVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuN3JlbSAwLjUycmVtIDAuNTVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDk5OXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIGkge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMi4ycmVtO1xuICAgICAgICByaWdodDogMC43MnJlbTtcbiAgICAgICAgei1pbmRleDogLTE7XG4gICAgICAgIHdpZHRoOiAyLjdyZW07XG4gICAgICAgIGhlaWdodDogMy43cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2LCA0MiwgNjcsIDAuMTgpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjM1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuMzVyZW0gMC44NXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMTEpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUgaTpudGgtY2hpbGQoMikge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMC4yOHJlbSwgMC4xMnJlbSkgcm90YXRlKC0zZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUgaTpudGgtY2hpbGQoMykge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1iYWNrKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTAuNTRyZW0sIDAuMjRyZW0pIHJvdGF0ZSgyZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLXNoZWxsIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB6LWluZGV4OiA4MDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW5tYXgoMCwgYXV0bykgYXV0bztcbiAgICAgICAgZ2FwOiAwLjU1cmVtO1xuICAgICAgICB3aWR0aDogbWluKDE3LjVyZW0sIGNhbGMoNTJkdmggLSAzcmVtKSwgY2FsYygxMDB2dyAtIDEuMjVyZW0pKTtcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDBkdmggLSAxcmVtKTtcbiAgICAgICAgcGFkZGluZy10b3A6IDIuMzVyZW07XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDIuMnJlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ2xvdyk7XG4gICAgICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcbiAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgIHRyYW5zbGF0ZSh2YXIoLS1wcmV2aWV3LXNoaWZ0LXgsIDBweCksIHZhcigtLXByZXZpZXctc2hpZnQteSwgMHB4KSlcbiAgICAgICAgICBwZXJzcGVjdGl2ZSg0OHJlbSlcbiAgICAgICAgICByb3RhdGVYKHZhcigtLXByZXZpZXctcm90YXRlLXgsIDVkZWcpKVxuICAgICAgICAgIHJvdGF0ZVkodmFyKC0tcHJldmlldy1yb3RhdGUteSwgLTVkZWcpKTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDkwbXMgZWFzZS1vdXQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCB2YWwtY2hyaXN0aWFuaXR5LWNhcmQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvO1xuICAgICAgICBnYXA6IDAuNDJyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWhlYWRlciBzdHJvbmcge1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcbiAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuMjVyZW0sIDV2dywgMS44NXJlbSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC10eXBlLWljb24sXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1jb3N0IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXR5cGUtaWNvbiB7XG4gICAgICAgIHdpZHRoOiAxLjZyZW07XG4gICAgICAgIGhlaWdodDogMS42cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDUwJSwgcmdiYSg5NSwgMTExLCA0MiwgMC43MikgMCAwLjIycmVtLCB0cmFuc3BhcmVudCAwLjI0cmVtKSxcbiAgICAgICAgICByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXR5cGUtaWNvbiBpbWcge1xuICAgICAgICB3aWR0aDogMXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxcmVtO1xuICAgICAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1jb3N0IHtcbiAgICAgICAgbWluLXdpZHRoOiAyLjFyZW07XG4gICAgICAgIGhlaWdodDogMi4xcmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuMzZyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmQ5MWE7XG4gICAgICAgIGNvbG9yOiAjMjQzMDQ0O1xuICAgICAgICBmb250LXNpemU6IDEuMXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMC4xMnJlbSAwIHJnYmEoODIsIDY0LCAyOCwgMC4xOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWFydCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLWhlaWdodDogOXJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC40OHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDk1LCAxMTEsIDQyLCAwLjIpLCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4xNikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDI1JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KSwgdHJhbnNwYXJlbnQgNDIlKSxcbiAgICAgICAgICAjZGJlN2VmO1xuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSgzNiwgNDgsIDY4LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtYXJ0IGltZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1hcnQgPiBzcGFuIHtcbiAgICAgICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgICAgIGNvbG9yOiByZ2JhKDM2LCA0OCwgNjgsIDAuNTgpO1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuMXJlbSwgNXZ3LCAxLjhyZW0pO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1hcnQgc21hbGwge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDAuNTVyZW07XG4gICAgICAgIG1pbi13aWR0aDogNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4xNnJlbSAwLjQ4cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweCAwIDAgOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjNyZW0gMC44cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xMik7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzQpO1xuICAgICAgICBmb250LXNpemU6IDAuNjhyZW07XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC12ZXJzZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWVmZmVjdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4zMnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdmVyc2UgcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWVmZmVjdCBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdmVyc2Uge1xuICAgICAgICBjb2xvcjogIzE3MTkyMztcbiAgICAgICAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICdUaW1lcyBOZXcgUm9tYW4nLCBzZXJpZjtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjcycmVtLCAyLjd2dywgMC44NnJlbSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXZlcnNlIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWVmZmVjdCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RhcnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDdyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNnJlbSAwLjdyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNDVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNzIlLCByZ2JhKDM2LCA0OCwgNjgsIDAuMDcpLCB0cmFuc3BhcmVudCAzNCUpLFxuICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXN0YXRzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAxLjM1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1zdGF0cyBzdHJvbmcge1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1zdGF0cyAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1waXBzIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdhcDogMC4ycmVtO1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IHN0YXJ0O1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtZWZmZWN0ID4gZGl2Omxhc3Qtb2YtdHlwZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4xMnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtZWZmZWN0ID4gZGl2Omxhc3Qtb2YtdHlwZSBzdHJvbmcge1xuICAgICAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWVmZmVjdCBwIHtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjc4cmVtLCAyLjl2dywgMC45MnJlbSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXJhcml0eSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwLjYycmVtO1xuICAgICAgICByaWdodDogMC42MnJlbTtcbiAgICAgICAgd2lkdGg6IDAuNDZyZW07XG4gICAgICAgIGhlaWdodDogMC40NnJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4xMnJlbTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1yYXJpdHkuaXMtbm9ybWFsIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2QxZDVkYjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtcmFyaXR5LmlzLXVuY29tbW9uIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzIyYzU1ZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtcmFyaXR5LmlzLXJhcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjM2I4MmY2O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1yYXJpdHkuaXMtbGVnZW5kYXJ5IHtcbiAgICAgICAgYmFja2dyb3VuZDogI2VhYjMwODtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtZm9vdGVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gbWlubWF4KDAsIDFmcikgYXV0bztcbiAgICAgICAgZ2FwOiAwLjM0cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjU4cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtZm9vdGVyIHNwYW4ge1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtY2xvc2Uge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDAuMTVyZW07XG4gICAgICAgIHotaW5kZXg6IDQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDJyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC42cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjc4KTtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgZm9udC1zaXplOiAwLjc2cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNDVyZW0gMXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1iYWNrZHJvcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1iYWNrZHJvcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktaW5mby1iYWNrZHJvcCB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjQ2KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LWJhY2tkcm9wIHtcbiAgICAgICAgei1pbmRleDogNzk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaW5mby1iYWNrZHJvcCB7XG4gICAgICAgIHotaW5kZXg6IDUwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWluZm8tcGFuZWwge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHotaW5kZXg6IDUxO1xuICAgICAgICB3aWR0aDogbWluKDMxcmVtLCBjYWxjKDEwMHZ3IC0gMS4yNXJlbSkpO1xuICAgICAgICBtYXgtaGVpZ2h0OiBtaW4oMzRyZW0sIGNhbGMoMTAwdmggLSAycmVtKSk7XG4gICAgICAgIHBhZGRpbmctdG9wOiAyLjM1cmVtO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1pbmZvLWNsb3NlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwLjE1cmVtO1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgZ2FwOiAwLjg1cmVtO1xuICAgICAgICBtYXgtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjlyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk3KSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk3KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4JSAwJSwgcmdiYSgzNywgOTksIDIzNSwgMC4xKSwgdHJhbnNwYXJlbnQgMzglKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDEuMnJlbSAyLjZyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjI0KSxcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjI1cmVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41Mik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlLWljb24ge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICB3aWR0aDogMi4xcmVtO1xuICAgICAgICBoZWlnaHQ6IDIuMXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpIDEyJSwgI2ZmZmZmZik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpO1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzKSAyNCUsIHRyYW5zcGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc21hbGwsXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBwLFxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgaDIge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHNtYWxsIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgaDIge1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjE4cmVtO1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuNXJlbSwgN3Z3LCAyLjJyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc3Ryb25nIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICAgICAgbWFyZ2luLXRvcDogMC41NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4yMnJlbSAwLjU1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2VkZjJmNztcbiAgICAgICAgZm9udC1zaXplOiAwLjkycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBwIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMC43NXJlbTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43OCk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSB1bCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgbWFyZ2luOiAwLjhyZW0gMCAwO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDEuMDVyZW07XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzgpO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkID4gc21hbGwsXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgPiBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42NCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCA+IHN0cm9uZyB7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS41NXJlbSwgOHZ3LCAyLjM1cmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCA+IHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSAwLjg1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NiksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC45NikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgOCUgMCUsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMDgpLCB0cmFuc3BhcmVudCA0NCUpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNzVyZW0gMS42cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xMik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgc21hbGwsXG4gICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBzbWFsbCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNTgpO1xuICAgICAgICBmb250LXNpemU6IDAuNjhyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgc3Ryb25nIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuMDhyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogMC45MnJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBwIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMC4yMnJlbTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43NCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MnJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzI7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA1MnJlbSkge1xuICAgICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtc2hlbGwge1xuICAgICAgICAgIHdpZHRoOiBtaW4oMjJyZW0sIGNhbGMoNjdkdmggLSA1Ljg1cmVtKSwgY2FsYygxMDB2dyAtIDNyZW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCB7XG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MS45OXJlbSkge1xuICAgICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtc2hlbGwge1xuICAgICAgICAgIHRvcDogNDglO1xuICAgICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMGR2aCAtIDEuNXJlbSk7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDIuMTVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtY2xvc2Uge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDEuOXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwIDAuNThyZW07XG4gICAgICAgICAgZm9udC1zaXplOiAwLjcycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSB7XG4gICAgICAgICAgbWF4LWhlaWdodDogbWluKDguMjVyZW0sIDI0ZHZoKTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjYycmVtIDAuNjhyZW07XG4gICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgICBzY3JvbGxiYXItY29sb3I6IHJnYmEoMzYsIDQ4LCA2OCwgMC4yOCkgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZS1pY29uIHtcbiAgICAgICAgICB3aWR0aDogMS44cmVtO1xuICAgICAgICAgIGhlaWdodDogMS44cmVtO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBzdHJvbmcge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMC44NnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgcCB7XG4gICAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1iYWNrZHJvcCB7XG4gICAgICAgIHotaW5kZXg6IDQwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgYm90dG9tOiBtYXgoMC41cmVtLCBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHotaW5kZXg6IDQxO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIGdhcDogMC43NXJlbTtcbiAgICAgICAgd2lkdGg6IG1pbihjYWxjKDEwMHZ3IC0gMXJlbSksIDQ0cmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogbWluKDE4cmVtLCBjYWxjKDEwMGR2aCAtIDFyZW0pKTtcbiAgICAgICAgbWF4LWhlaWdodDogbWluKDMycmVtLCBjYWxjKDEwMGR2aCAtIDJyZW0pKTtcbiAgICAgICAgcGFkZGluZzogMC44cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTYpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDEuNXJlbSA0cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4yOCk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBoZWFkZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogMC43NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBoMixcbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBoZWFkZXIgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogMS44NXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjg1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2VkZjJmNztcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1kaWFsb2ctYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2Uge1xuICAgICAgICBtaW4taGVpZ2h0OiAxLjg1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNjJyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjc4KTtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgZm9udC1zaXplOiAwLjc2cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuMzVyZW0gMC44cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoNS40cmVtLCAxZnIpKTtcbiAgICAgICAgZ2FwOiAwLjU1cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogcmdiYSgzNiwgNDgsIDY4LCAwLjMyKSByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNzIpO1xuICAgICAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7XG4gICAgICAgIHBhZGRpbmc6IDAuMXJlbSAwLjFyZW0gMC4yNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIHdpZHRoOiAwLjY1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43Mik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBib3JkZXI6IDAuMTRyZW0gc29saWQgcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzYsIDQ4LCA2OCwgMC4zMik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLWRyYXdlciB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICB3aWR0aDogbWluKGNhbGMoMTAwdncgLSAxcmVtKSwgNDhyZW0pO1xuICAgICAgICBtaW4taGVpZ2h0OiBtaW4oMjByZW0sIGNhbGMoMTAwZHZoIC0gMXJlbSkpO1xuICAgICAgICBtYXgtaGVpZ2h0OiBtaW4oMzRyZW0sIGNhbGMoMTAwZHZoIC0gMnJlbSkpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICAgICAgcGFkZGluZzogMC43MnJlbSAwLjhyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuN3JlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpLCByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuOTYpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDglIDAlLCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4xMiksIHRyYW5zcGFyZW50IDQyJSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGUgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43Nik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NnJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC42cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogcmdiYSgzNiwgNDgsIDY4LCAwLjMyKSByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNzIpO1xuICAgICAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7XG4gICAgICAgIHBhZGRpbmc6IDAuMXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg1LjRyZW0sIDYuNXJlbSkgbWlubWF4KDAsIDFmcik7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMC40NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjEyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC42NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cuaXMtZXhoYXVzdGVkIHtcbiAgICAgICAgb3BhY2l0eTogMC42ODtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWRyYXdlciB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBhdXRvIGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIHdpZHRoOiBtaW4oY2FsYygxMDB2dyAtIDFyZW0pLCA1MHJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IG1pbigyMnJlbSwgY2FsYygxMDBkdmggLSAxcmVtKSk7XG4gICAgICAgIG1heC1oZWlnaHQ6IG1pbigzNnJlbSwgY2FsYygxMDBkdmggLSAycmVtKSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1kcmF3ZXIgaGVhZGVyID4gZGl2OmZpcnN0LWNoaWxkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjE1cmVtO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1kcmF3ZXIgaGVhZGVyIHAge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjU4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjgycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIG1pbm1heCg4LjVyZW0sIDEzcmVtKTtcbiAgICAgICAgZ2FwOiAwLjY1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMjVyZW07XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIGlucHV0LFxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIHNlbGVjdCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIuMzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC43NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC42NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWVkaXRpb24tc3RyaXAge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDAuNDVyZW07XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjFyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1lZGl0aW9uLXN0cmlwIGJ1dHRvbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuNDVyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIuMzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC43NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMTQsIDE2MiwgMjksIDAuMzgpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXBhcmNobWVudCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtaW5rKTtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgZm9udC1zaXplOiAwLjgycmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZWRpdGlvbi1zdHJpcCBpbWcge1xuICAgICAgICB3aWR0aDogMS4ycmVtO1xuICAgICAgICBoZWlnaHQ6IDEuMnJlbTtcbiAgICAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCg1LjhyZW0sIDYuOHJlbSkpO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RhcnQ7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICBzY3JvbGxiYXItY29sb3I6IHJnYmEoMzYsIDQ4LCA2OCwgMC4zMikgcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xuICAgICAgICBwYWRkaW5nOiAwLjFyZW0gMC4xcmVtIDAuMzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIHdpZHRoOiAwLjY1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgICAgYm9yZGVyOiAwLjE0cmVtIHNvbGlkIHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43Mik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM2LCA0OCwgNjgsIDAuMzIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICBnYXA6IDAuMjZyZW07XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4taGVpZ2h0OiA3LjdyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNThyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk2KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA3OCUgMTQlLCByZ2JhKDI1MCwgMjA0LCAyMSwgMC43OCkgMCAwLjQycmVtLCB0cmFuc3BhcmVudCAwLjQ0cmVtKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjQ1cmVtIDFyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgc21hbGwge1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNTgpO1xuICAgICAgICBmb250LXNpemU6IDAuNjJyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHN0cm9uZyB7XG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjFyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICAgICAgICBmb250LXNpemU6IDAuODhyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBzcGFuIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMC40MnJlbTtcbiAgICAgICAgYm90dG9tOiAwLjQycmVtO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDEuNTVyZW07XG4gICAgICAgIGhlaWdodDogMS41NXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjI4cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2VkZjJmNztcbiAgICAgICAgZm9udC1zaXplOiAwLjgycmVtO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgZW0ge1xuICAgICAgICBhbGlnbi1zZWxmOiBlbmQ7XG4gICAgICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMS45cmVtKTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBwLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHAge1xuICAgICAgICBhbGlnbi1zZWxmOiBlbmQ7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjQpO1xuICAgICAgICBmb250LXNpemU6IDAuNzJyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93ID4gZGl2IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgPiBkaXYgcCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzIpO1xuICAgICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93ID4gZGl2IGJ1dHRvbiB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIuMnJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjdyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTYsIDQyLCA2NywgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogIzEwMmE0MztcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93ID4gZGl2IGJ1dHRvbjpkaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlMmU4ZjA7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNTgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZCAuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbiB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICAgICAgICB3aWR0aDogbWluKDEwMCUsIDYuNHJlbSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkIC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiBtaW4oMTAwJSwgN3JlbSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IG1pbigxMDAlLCA1LjhyZW0pO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuXG4gICAgICBidXR0b24ge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIGJ1dHRvbjpkaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgIG9wYWNpdHk6IDAuNTU7XG4gICAgICB9XG5cbiAgICAgIGJ1dHRvbjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgb3V0bGluZTogMC4xODc1cmVtIHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpIDI0JSwgdHJhbnNwYXJlbnQpO1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogMC4xMjVyZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyayksXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyayksXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyayksXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIHtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtaW5rOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgI2U1ZWRmOCk7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLXN1cmZhY2U6ICMxMTE4Mjc7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLXBhcmNobWVudDogIzEzMjIzYTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtb2xpdmU6ICM5M2M1ZmQ7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQ6ICM2MGE1ZmE7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtc29mdDogcmdiYSg5NiwgMTY1LCAyNTAsIDAuMTgpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmc6IHJnYmEoMTQ3LCAxOTcsIDI1MywgMC40Mik7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdsb3c6IHJnYmEoOTYsIDE2NSwgMjUwLCAwLjI0KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXM6ICM5M2M1ZmQ7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjM0KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtc2hhZG93LXN0cm9uZzogcmdiYSgwLCAwLCAwLCAwLjQ4KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktY2FyZC1iYWNrOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMTQ3LCAxOTcsIDI1MywgMC4yKSwgcmdiYSgxNSwgMjMsIDQyLCAwLjA4KSksXG4gICAgICAgICAgcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCg0NWRlZywgIzFlM2E1ZiAwIDAuMzNyZW0sICMwZjE3MmEgMC4zM3JlbSAwLjY2cmVtKTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktY2FyZC1iYWNrLXNvZnQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxNDcsIDE5NywgMjUzLCAwLjE1KSwgcmdiYSgxNSwgMjMsIDQyLCAwLjA2KSksXG4gICAgICAgICAgcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCg0NWRlZywgIzFlM2E1ZiAwIDAuMzNyZW0sICMwZjE3MmEgMC4zM3JlbSAwLjY2cmVtKTtcbiAgICAgICAgY29sb3Itc2NoZW1lOiBkYXJrO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXNoZWxsLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zaGVsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNoZWxsLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc2hlbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc2hlbGwge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4xOCk7XG4gICAgICAgIGJhY2tncm91bmQ6ICMwNzExMWY7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1vcGVuLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW4sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1vcGVuLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zZWNvbmRhcnktYWN0aW9uLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zZWNvbmRhcnktYWN0aW9uLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXNlY29uZGFyeS1hY3Rpb24sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1lZGl0aW9uLXN0cmlwIGJ1dHRvbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1lZGl0aW9uLXN0cmlwIGJ1dHRvbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZWRpdGlvbi1zdHJpcCBidXR0b24sXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWVkaXRpb24tc3RyaXAgYnV0dG9uLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZWRpdGlvbi1zdHJpcCBidXR0b24ge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ3LCAxOTcsIDI1MywgMC4zNik7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgzMCwgNTgsIDk1LCAwLjgyKSwgcmdiYSgxNSwgMjMsIDQyLCAwLjg4KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyMCUgMCUsIHJnYmEoOTYsIDE2NSwgMjUwLCAwLjE2KSwgdHJhbnNwYXJlbnQgNDIlKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNTVyZW0gMS4ycmVtIHJnYmEoMCwgMCwgMCwgMC4yNCk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc3BsYXNoLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zcGxhc2gsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zcGxhc2gsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zcGxhc2gsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc3BsYXNoLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zdGFydCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnQsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0LFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXN0YXJ0IHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0NywgMTk3LCAyNTMsIDAuMjIpO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDE4JSwgcmdiYSg5NiwgMTY1LCAyNTAsIDAuMTYpLCB0cmFuc3BhcmVudCAyMnJlbSksXG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxNSwgMjMsIDQyLCAwLjg4KSwgcmdiYSg3LCAxNywgMzEsIDAuOTcpKSxcbiAgICAgICAgICB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1iYWNrLXNvZnQpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDEuMnJlbSAzLjJyZW0gcmdiYSgwLCAwLCAwLCAwLjI4KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgYXJ0aWNsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIGFydGljbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgYXJ0aWNsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBhcnRpY2xlLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBhcnRpY2xlLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgYXJ0aWNsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgYXJ0aWNsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fc3RhdHVzIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXMgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXMgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXMgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zdGFydF9fc3RhdHVzIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlID4gc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUgPiBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUgPiBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUgPiBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlID4gc3BhbiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjIpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuNjgpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNzVyZW0gMS43cmVtIHJnYmEoMCwgMCwgMCwgMC4yMik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc3BsYXNoIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNwbGFzaCBwLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3BsYXNoIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zcGxhc2ggcCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zcGxhc2ggcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NvcHkgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NvcHkgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jb3B5IHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fY29weSBwLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jb3B5IHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBwLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBwLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBwLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBwLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oZWFkZXIgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43NCk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktdHVybixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktdHVybixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXR1cm4sXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS10dXJuLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXR1cm4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWxlYWRlcixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktbGVhZGVyLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktbGVhZGVyLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktbGVhZGVyLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWxlYWRlcixcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGlkZGVuLWhhbmQsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcGlsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXBpbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcGlsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktZGVjayxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZGVjayxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWRlY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1kZWNrLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWRlY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXBsYWNlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1wbGFjZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXBsYWNlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcGxhY2UsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcGxhY2UsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LW1hdGNoLXN0cmlwLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1tYXRjaC1zdHJpcCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW1hdGNoLXN0cmlwLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktbWF0Y2gtc3RyaXAsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktbWF0Y2gtc3RyaXAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWFjdGlvbnMsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWFjdGlvbnMsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1hY3Rpb25zLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktYWN0aW9ucyxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1hY3Rpb25zLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnksXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktaGlzdG9yeSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjE4KTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjgyKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS10dXJuLmlzLW93bi10dXJuLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS10dXJuLmlzLW93bi10dXJuLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktdHVybi5pcy1vd24tdHVybixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXR1cm4uaXMtb3duLXR1cm4sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktdHVybi5pcy1vd24tdHVybiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSg0NSwgMjEyLCAxOTEsIDAuMzYpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwLCA4MywgNzYsIDAuMzYpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXRhYmxlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS10YWJsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXRhYmxlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktdGFibGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktdGFibGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjMTAyMzNkLCAjMGIxNzI4KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1wbGF5ZXItc2lkZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcGxheWVyLXNpZGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1wbGF5ZXItc2lkZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjM0KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjU4KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZS5pcy1wbGFjaW5nLWNhcmQsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLmlzLXBsYWNpbmctY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLmlzLXBsYWNpbmctY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLmlzLXBsYWNpbmctY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZS5pcy1wbGFjaW5nLWNhcmQge1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMzAsIDU4LCA5NSwgMC44MiksIHJnYmEoMTUsIDIzLCA0MiwgMC43MikpLFxuICAgICAgICAgIHJnYmEoMTUsIDIzLCA0MiwgMC41OCk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWNhcmQsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWNhcmQsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXNsb3QsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNsb3QsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zbG90LFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc2xvdCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zbG90IHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTYzLCAxODQsIDAuMjQpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuNTQpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0LFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zbG90LS1wbGF5LXRhcmdldCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0LFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQge1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluayk7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgzNywgOTksIDIzNSwgMC4yNCksIHJnYmEoMTUsIDIzLCA0MiwgMC43OCkpLFxuICAgICAgICAgIHJnYmEoMTUsIDIzLCA0MiwgMC43NCk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zbG90LS1wbGF5LXRhcmdldCBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWNhcmQgc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1jYXJkIHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWNhcmQgc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktY2FyZCBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktY2FyZCBzdHJvbmcge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCA0MSwgNTksIDAuOTIpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlcixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjE4KTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE1LCAyMywgNDIsIDAuOTYpLCByZ2JhKDE3LCAyNCwgMzksIDAuOTYpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDglIDAlLCByZ2JhKDk2LCAxNjUsIDI1MCwgMC4xMiksIHRyYW5zcGFyZW50IDQwJSk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMS41cmVtIDRyZW0gcmdiYSgwLCAwLCAwLCAwLjQyKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2UsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2UsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtY2xvc2UsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtY2xvc2UsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLWNsb3NlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZC1jbG9zZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLWNsb3NlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTYzLCAxODQsIDAuMjIpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuOTQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluayk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjhyZW0gcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGhlYWRlciBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBoZWFkZXIgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGhlYWRlciBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgaGVhZGVyIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgaGVhZGVyIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc3Ryb25nIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgNDEsIDU5LCAwLjkyKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzbWFsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzbWFsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzbWFsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBzbWFsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZHJhd2VyIGhlYWRlciBwLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWRyYXdlciBoZWFkZXIgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZHJhd2VyIGhlYWRlciBwLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1kcmF3ZXIgaGVhZGVyIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1kcmF3ZXIgaGVhZGVyIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgbGFiZWwsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgbGFiZWwsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIGxhYmVsLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBsYWJlbCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIGxhYmVsIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMjI2LCAyMzIsIDI0MCwgMC42OCk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBwLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHVsLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgdWwsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgdWwsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgdWwsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHVsLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBwLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBwLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZSBwLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlIHAge1xuICAgICAgICBjb2xvcjogcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjgpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgaW5wdXQsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgaW5wdXQsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIGlucHV0LFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBpbnB1dCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIGlucHV0LFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIHNlbGVjdCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBzZWxlY3QsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIHNlbGVjdCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgc2VsZWN0LFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgc2VsZWN0LFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3csXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdyxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdyxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdyxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3csXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGUge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4yKTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjc4KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3QsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0LFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3QsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSB7XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjU0KSByZ2JhKDE1LCAyMywgNDIsIDAuODYpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZS1pY29uLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZS1pY29uLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlLWljb24sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlLWljb24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDk2LCAxNjUsIDI1MCwgMC4xNik7XG4gICAgICAgIGNvbG9yOiAjYmZkYmZlO1xuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSgxNDcsIDE5NywgMjUzLCAwLjIyKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuODYpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNSwgMjMsIDQyLCAwLjg2KTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjU0KTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDcyMHB4KSB7XG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXNoZWxsIHtcbiAgICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAgMC42NXJlbTtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXN0cmlwLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogbWF4KDAuNXJlbSwgZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCkpO1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogbWF4KDAuNXJlbSwgZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KSk7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlcixcbiAgICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXJfX3N1bW1hcnksXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUsXG4gICAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyB7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtc3RyaXAge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgICBnYXA6IDAuMzVyZW07XG4gICAgICAgICAgcGFkZGluZzogMC4zNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHtcbiAgICAgICAgICBnYXA6IDAuMzVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLWFjdGlvbnMge1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19oZXJvIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fZmFuIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAxMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fZmFuIHZhbC1jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgICAgd2lkdGg6IGNsYW1wKDUuMnJlbSwgMjJ2dywgNi40cmVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXNwbGFzaCxcbiAgICAgICAgLmNocmlzdGlhbml0eS1zdGFydCB7XG4gICAgICAgICAgbWluLWhlaWdodDogbWluKDMwcmVtLCBjYWxjKDEwMGR2aCAtIDdyZW0pKTtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBtYXgoMC42NXJlbSwgZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCkpO1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogbWF4KDAuNjVyZW0sIGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCkpO1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICBib3JkZXItbGVmdDogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHtcbiAgICAgICAgICBtaW4td2lkdGg6IDMuNjVyZW07XG4gICAgICAgICAgcGFkZGluZzogMCAwLjM1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHN0cm9uZyB7XG4gICAgICAgICAgZm9udC1zaXplOiAxLjA1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS10YWJsZSB7XG4gICAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItc2lkZSB7XG4gICAgICAgICAgcGFkZGluZzogMC4zcmVtIDAuMjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lIHtcbiAgICAgICAgICAtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aDogbWluKDUuMnJlbSwgY2FsYygoMTAwdncgLSA0LjI1cmVtKSAvIDQpKTtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpKTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA4Ljc1cmVtO1xuICAgICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAxMS40NXJlbTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMnJlbTtcbiAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1zaGVsZiB7XG4gICAgICAgICAgbWluLWhlaWdodDogMTIuNjVyZW07XG4gICAgICAgICAgbWFyZ2luLXRvcDogLTFyZW07XG4gICAgICAgICAgcGFkZGluZy10b3A6IDEuMzVyZW07XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDAuOXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1zaGVsZi0tb3Bwb25lbnQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDYuNjVyZW07XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAwLjRyZW07XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDAuODVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg0LjVyZW0sIDUuN3JlbSkgbWlubWF4KDQuNHJlbSwgMWZyKSBtaW5tYXgoMy41cmVtLCA0LjhyZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSB7XG4gICAgICAgICAgbWluLWhlaWdodDogNi4xNXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjU4cmVtIDAuNDZyZW0gMC41cmVtO1xuICAgICAgICAgIGdhcDogMC4yNHJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIGkge1xuICAgICAgICAgIHRvcDogMnJlbTtcbiAgICAgICAgICByaWdodDogMC41MnJlbTtcbiAgICAgICAgICB3aWR0aDogMi4zNXJlbTtcbiAgICAgICAgICBoZWlnaHQ6IDMuMjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUge1xuICAgICAgICAgIGhlaWdodDogNi44NXJlbTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICAgIG1heC1oZWlnaHQ6IDYuODVyZW07XG4gICAgICAgICAgcGFkZGluZzogMC44OHJlbSAwLjQ2cmVtIDAuNTVyZW07XG4gICAgICAgICAgZ2FwOiAwLjI0cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIGkge1xuICAgICAgICAgIHRvcDogMi4yNXJlbTtcbiAgICAgICAgICBsZWZ0OiAwLjU2cmVtO1xuICAgICAgICAgIHdpZHRoOiAyLjM1cmVtO1xuICAgICAgICAgIGhlaWdodDogMy4yNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQge1xuICAgICAgICAgIHdpZHRoOiBjbGFtcCg0LjJyZW0sIDIwdncsIDUuN3JlbSk7XG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIHtcbiAgICAgICAgICB3aWR0aDogY2xhbXAoNC41NXJlbSwgMjB2dywgNS43cmVtKTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDVyZW0sIDUuOHJlbSkgbWlubWF4KDAsIDFmcik7XG4gICAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZCB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoNS4zNXJlbSwgNi4xcmVtKSk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDcuMjVyZW07XG4gICAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbi0tb3Bwb25lbnQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDUuNzVyZW07XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDAuN3JlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFjayB7XG4gICAgICAgICAgd2lkdGg6IGNsYW1wKDMuMzVyZW0sIDE1dncsIDQuMjVyZW0pO1xuICAgICAgICAgIG1hcmdpbi1pbmxpbmU6IC0wLjcycmVtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hyaXN0aWFuaXR5R2FtZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYm9vdFN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBnYW1lID0gc2lnbmFsPENocmlzdGlhbml0eUdhbWVTdGF0ZT4oc3RydWN0dXJlZENsb25lKFNUQVJUSU5HX0dBTUUpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNjcmVlbiA9IHNpZ25hbDxDaHJpc3RpYW5pdHlTY3JlZW4+KCdzcGxhc2gnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhdGFsb2dMb2FkU3RhdGUgPSBzaWduYWw8Q2hyaXN0aWFuaXR5Q2F0YWxvZ0xvYWRTdGF0ZT4oJ2xvYWRpbmcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkSGFuZENhcmQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZEF0dGFja2VyID0gc2lnbmFsPENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFByZXZpZXcgPSBzaWduYWw8Q2hyaXN0aWFuaXR5Q2FyZFByZXZpZXcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkSW5mbyA9IHNpZ25hbDxDaHJpc3RpYW5pdHlJbmZvUGFuZWwgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHByZXZpZXdUaWx0ID0gc2lnbmFsPENocmlzdGlhbml0eVByZXZpZXdUaWx0Pih7IHJvdGF0ZVg6IDUsIHJvdGF0ZVk6IC01LCBzaGlmdFg6IDAsIHNoaWZ0WTogMCB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhvdmVyZWRIYW5kSW5kZXggPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkcmFnZ2luZ0NhcmRJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dIaXN0b3J5ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dHYWxsZXJ5ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9mZmVyaW5nc1NlYXQgPSBzaWduYWw8Q2hyaXN0aWFuaXR5U2VhdCB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FyZENhdGFsb2cgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24+PihTVEFSVEVSX0NBUkRTKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsbENhdGFsb2dDYXJkcyA9IHNpZ25hbDxDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbltdPihPYmplY3QudmFsdWVzKFNUQVJURVJfQ0FSRFMpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhdGFsb2dMb2FkZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2FsbGVyeVNlYXJjaCA9IHNpZ25hbCgnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBnYWxsZXJ5VHlwZSA9IHNpZ25hbDxDaHJpc3RpYW5pdHlHYWxsZXJ5VHlwZUZpbHRlcj4oJ2FsbCcpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW5Ecm9wT25CYXR0bGVTbG90ID0gKGRyYWc6IENka0RyYWc8c3RyaW5nPik6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGRyYWcuZGF0YSk7XG4gICAgcmV0dXJuIGNhcmQudHlwZSA9PT0gJ2NoYXJhY3RlcicgJiYgdGhpcy5jYW5QbGF5KGNhcmQpO1xuICB9O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW5Ecm9wT25PZmZlcmluZ3MgPSAoZHJhZzogQ2RrRHJhZzxzdHJpbmc+KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oZHJhZy5kYXRhKTtcbiAgICByZXR1cm4gY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnICYmIHRoaXMuY2FuUGxheShjYXJkKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGxheWVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkucGxheWVycy5QMSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvcHBvbmVudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnBsYXllcnMuUDIpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3VycmVudFBsYXllciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnBsYXllcnNbdGhpcy5nYW1lKCkudHVybk93bmVyXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc093blR1cm4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS50dXJuT3duZXIgPT09ICdQMScpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFzT3Bwb25lbnRHdWFyZHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wcG9uZW50KCkuYmF0dGxlWm9uZS5sZW5ndGggPiAwKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wcG9uZW50SGFuZENvdW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHBvbmVudCgpLmhhbmRDb3VudCA/PyB0aGlzLm9wcG9uZW50KCkuaGFuZD8ubGVuZ3RoID8/IDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2FsbGVyeUNhcmRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nYWxsZXJ5U2VhcmNoKCkudHJpbSgpLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2FsbGVyeVR5cGUoKTtcbiAgICByZXR1cm4gdGhpcy5hbGxDYXRhbG9nQ2FyZHMoKVxuICAgICAgLmZpbHRlcihjYXJkID0+IHR5cGUgPT09ICdhbGwnIHx8IGNhcmQudHlwZSA9PT0gdHlwZSlcbiAgICAgIC5maWx0ZXIoY2FyZCA9PiB7XG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoY2FyZCk7XG4gICAgICAgIGNvbnN0IGhheXN0YWNrID0gW3RleHQubmFtZSwgY2FyZC50eXBlLCB0ZXh0LnNjcmlwdHVyZSwgdGV4dC5hYmlsaXR5TmFtZSwgdGV4dC5hYmlsaXR5VGV4dCwgdGV4dC52ZXJzZVRleHRdXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgICAgcmV0dXJuIGhheXN0YWNrLmluY2x1ZGVzKHF1ZXJ5KTtcbiAgICAgIH0pXG4gICAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IHRoaXMuY2FyZFNvcnRLZXkobGVmdCkubG9jYWxlQ29tcGFyZSh0aGlzLmNhcmRTb3J0S2V5KHJpZ2h0KSwgJ2VzJykpO1xuICB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdhbGxlcnlFZGl0aW9uTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLmFsbENhdGFsb2dDYXJkcygpLmxlbmd0aDtcbiAgICByZXR1cm4gYCR7dGhpcy50KCdjaHJpc3RpYW5pdHlHZW5lc2lzRWRpdGlvbicpfSDCtyAke2NvdW50fSAke3RoaXMudCgnY2hyaXN0aWFuaXR5Q2FyZHMnKX1gO1xuICB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdhbGxlcnlFZGl0aW9uSWNvbiA9IGNvbXB1dGVkKCgpID0+IEdFTkVTSVNfSUNPTl9VUkwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2FsbGVyeVR5cGVPcHRpb25zID0gY29tcHV0ZWQ8QXJyYXk8eyB2YWx1ZTogQ2hyaXN0aWFuaXR5R2FsbGVyeVR5cGVGaWx0ZXI7IGxhYmVsOiBzdHJpbmcgfT4+KCgpID0+IFtcbiAgICB7IHZhbHVlOiAnYWxsJywgbGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5QWxsQ2FyZHMnKSB9LFxuICAgIHsgdmFsdWU6ICdsZWFkZXInLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJykgfSxcbiAgICB7IHZhbHVlOiAnb2ZmZXJpbmcnLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSB9LFxuICAgIHsgdmFsdWU6ICdjaGFyYWN0ZXInLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJDYXJkJykgfSxcbiAgICB7IHZhbHVlOiAnd2lzZG9tJywgbGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5V2lzZG9tQ2FyZCcpIH0sXG4gICAgeyB2YWx1ZTogJ2FjdGlvbicsIGxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUFjdGlvbkNhcmQnKSB9LFxuICAgIHsgdmFsdWU6ICd0b29sJywgbGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5VG9vbENhcmQnKSB9LFxuICAgIHsgdmFsdWU6ICdwbGFjZScsIGxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYWNlQ2FyZCcpIH0sXG4gICAgeyB2YWx1ZTogJ2V2ZW50JywgbGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5RXZlbnRDYXJkJykgfSxcbiAgXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzcGxhc2hTdGF0dXNUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jYXRhbG9nTG9hZFN0YXRlKCk7XG4gICAgaWYgKHN0YXRlID09PSAncmVhZHknKSByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlTcGxhc2hSZWFkeScpO1xuICAgIGlmIChzdGF0ZSA9PT0gJ2ZhbGxiYWNrJykgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5U3BsYXNoRmFsbGJhY2snKTtcbiAgICByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlTcGxhc2hMb2FkaW5nJyk7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhcnRGZWF0dXJlZENhcmRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNhcmRzID0gdGhpcy5hbGxDYXRhbG9nQ2FyZHMoKTtcbiAgICBjb25zdCBwcmVmZXJyZWQgPSBbJ0dFTi0wMDknLCAnR0VOLTAxMycsICdHRU4tMDMyJ11cbiAgICAgIC5tYXAoaWQgPT4gdGhpcy5jYXJkQ2F0YWxvZygpW2lkXSlcbiAgICAgIC5maWx0ZXIoKGNhcmQpOiBjYXJkIGlzIENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uID0+ICEhY2FyZCk7XG4gICAgcmV0dXJuIChwcmVmZXJyZWQubGVuZ3RoID8gcHJlZmVycmVkIDogY2FyZHMuc2xpY2UoMCwgMykpLnNsaWNlKDAsIDMpO1xuICB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZ1dHVyZU1vZGVzID0gY29tcHV0ZWQoKCkgPT4gW1xuICAgIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5U29sb0JvdE1vZGUnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlTb2xvQm90TW9kZUJvZHknKSB9LFxuICAgIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5VHdvUGxheWVyTW9kZScpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eVR3b1BsYXllck1vZGVCb2R5JykgfSxcbiAgICB7IHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eU9uZURldmljZU1vZGUnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlPbmVEZXZpY2VNb2RlQm9keScpIH0sXG4gICAgeyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlTcGVjdGF0b3JNb2RlJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5U3BlY3RhdG9yTW9kZUJvZHknKSB9LFxuICBdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkQ2FyZERlZmluaXRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQgPyB0aGlzLmNhcmREZWZpbml0aW9uKHNlbGVjdGVkKSA6IG51bGw7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRQcmV2aWV3Q2FyZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjYXJkSWQgPSB0aGlzLnNlbGVjdGVkUHJldmlldygpPy5jYXJkSWQ7XG4gICAgcmV0dXJuIGNhcmRJZCA/IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKSA6IG51bGw7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRQcmV2aWV3UmVuZGVyQ2FyZCA9IGNvbXB1dGVkPENocmlzdGlhbml0eUNhcmRSZW5kZXJNb2RlbCB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5zZWxlY3RlZFByZXZpZXcoKTtcbiAgICBpZiAoIXByZXZpZXcpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLnNlbGVjdGVkUHJldmlld0NhcmQoKTtcbiAgICBpZiAoY2FyZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvblRvUmVuZGVyQ2FyZChjYXJkLCB7XG4gICAgICAgIHN0YXR1c1RleHQ6IHByZXZpZXcuYm9keSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocHJldmlldy5leWVicm93ID09PSB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSkge1xuICAgICAgY29uc3QgW2N1cnJlbnRIcCwgbWF4SHBdID0gcHJldmlldy5tZXRhLnNwbGl0KCcvJykubWFwKHZhbHVlID0+IE51bWJlcih2YWx1ZSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGBsZWFkZXItJHtwcmV2aWV3LnRpdGxlLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgICAgbmFtZTogcHJldmlldy50aXRsZSxcbiAgICAgICAgdHlwZTogJ2xlYWRlcicsXG4gICAgICAgIHR5cGVMYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJyksXG4gICAgICAgIGN1cnJlbnRIcDogTnVtYmVyLmlzRmluaXRlKGN1cnJlbnRIcCkgPyBjdXJyZW50SHAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heEhwOiBOdW1iZXIuaXNGaW5pdGUobWF4SHApID8gbWF4SHAgOiB1bmRlZmluZWQsXG4gICAgICAgIGxpZmU6IE51bWJlci5pc0Zpbml0ZShjdXJyZW50SHApID8gY3VycmVudEhwIDogdW5kZWZpbmVkLFxuICAgICAgICBhYmlsaXR5TmFtZTogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJyksXG4gICAgICAgIGFiaWxpdHlUZXh0OiBwcmV2aWV3LmJvZHksXG4gICAgICAgIHZlcnNlVGV4dDogcHJldmlldy5ib2R5LFxuICAgICAgICBlZGl0aW9uOiAnTVZQJyxcbiAgICAgICAgY29sbGVjdG9yTnVtYmVyOiAnTElERVInLFxuICAgICAgICB5ZWFyOiAnMjAyNicsXG4gICAgICAgIGF1dGhvcjogJ01WUCcsXG4gICAgICAgIHJhcml0eTogJ2xlZ2VuZGFyeScsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGBwcmV2aWV3LSR7cHJldmlldy50aXRsZS50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICBuYW1lOiBwcmV2aWV3LnRpdGxlLFxuICAgICAgdHlwZTogdGhpcy5wcmV2aWV3UmVuZGVyVHlwZShwcmV2aWV3LmV5ZWJyb3cpLFxuICAgICAgdHlwZUxhYmVsOiBwcmV2aWV3LmV5ZWJyb3csXG4gICAgICBhYmlsaXR5TmFtZTogcHJldmlldy5leWVicm93LFxuICAgICAgYWJpbGl0eVRleHQ6IHByZXZpZXcuYm9keSxcbiAgICAgIHZlcnNlVGV4dDogcHJldmlldy5ib2R5LFxuICAgICAgZWRpdGlvbjogJ01WUCcsXG4gICAgICBjb2xsZWN0b3JOdW1iZXI6IHByZXZpZXcuZXllYnJvdyxcbiAgICAgIHllYXI6ICcyMDI2JyxcbiAgICAgIGF1dGhvcjogJ01WUCcsXG4gICAgICByYXJpdHk6ICdub3JtYWwnLFxuICAgICAgc3RhdHVzVGV4dDogcHJldmlldy5tZXRhLFxuICAgIH07XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJldmlld1J1bGUgPSBjb21wdXRlZDxDaHJpc3RpYW5pdHlQcmV2aWV3UnVsZSB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5zZWxlY3RlZFByZXZpZXcoKTtcbiAgICBpZiAoIXByZXZpZXcpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLnNlbGVjdGVkUHJldmlld0NhcmQoKTtcbiAgICBpZiAoY2FyZD8udHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdSdWxlQm9keScpIH07XG4gICAgfVxuICAgIGlmIChjYXJkPy50eXBlID09PSAnY2hhcmFjdGVyJykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQ2FyZCcpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlclJ1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgaWYgKGNhcmQ/LnR5cGUgPT09ICd3aXNkb20nKSB7XG4gICAgICByZXR1cm4geyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlXaXNkb21DYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5V2lzZG9tUnVsZUJvZHknKSB9O1xuICAgIH1cbiAgICBpZiAoY2FyZD8udHlwZSA9PT0gJ2FjdGlvbicpIHtcbiAgICAgIHJldHVybiB7IHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eUFjdGlvbkNhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlBY3Rpb25SdWxlQm9keScpIH07XG4gICAgfVxuICAgIGlmIChjYXJkPy50eXBlID09PSAndG9vbCcpIHtcbiAgICAgIHJldHVybiB7IHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eVRvb2xDYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5VG9vbFJ1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgaWYgKGNhcmQ/LnR5cGUgPT09ICdwbGFjZScpIHtcbiAgICAgIHJldHVybiB7IHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYWNlQ2FyZCcpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYWNlUnVsZUJvZHknKSB9O1xuICAgIH1cbiAgICBpZiAoY2FyZD8udHlwZSA9PT0gJ2V2ZW50Jykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5RXZlbnRDYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5RXZlbnRSdWxlQm9keScpIH07XG4gICAgfVxuICAgIGlmIChjYXJkPy50eXBlID09PSAnbGVhZGVyJykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlclJ1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgaWYgKHByZXZpZXcuZXllYnJvdyA9PT0gdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJykpIHtcbiAgICAgIHJldHVybiB7IHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJSdWxlQm9keScpIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0YXR1c1RleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYXR0YWNrZXIgPSB0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKTtcbiAgICBjb25zdCBoYW5kQ2FyZCA9IHRoaXMuc2VsZWN0ZWRDYXJkRGVmaW5pdGlvbigpO1xuICAgIGlmICghdGhpcy5pc093blR1cm4oKSkge1xuICAgICAgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5V2FpdFR1cm4nKTtcbiAgICB9XG4gICAgaWYgKGF0dGFja2VyKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHBvbmVudEd1YXJkcygpID8gdGhpcy50KCdjaHJpc3RpYW5pdHlDaG9vc2VDaGFyYWN0ZXJUYXJnZXQnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hvb3NlVGFyZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChoYW5kQ2FyZCkge1xuICAgICAgaWYgKCF0aGlzLmNhblBsYXkoaGFuZENhcmQpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eU5lZWRPZmZlcmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYW5kQ2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlQbGFjZU9mZmVyaW5nJykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNob29zZVNsb3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hvb3NlQ2FyZCcpO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnTWluaUdhbWVzJywgTUlOSV9HQU1FU19JMThOKTtcbiAgICB2b2lkIHRoaXMubG9hZEdlbmVzaXNDYXRhbG9nKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnTWluaUdhbWVzJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRHZW5lc2lzQ2F0YWxvZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbG9hZGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goR0VORVNJU19DQVRBTE9HX1VSTCk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgY2F0YWxvZyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDaHJpc3RpYW5pdHlFZGl0aW9uQ2F0YWxvZztcbiAgICAgICAgY29uc3QgY2FyZHMgPSAoY2F0YWxvZy5jYXJkcyA/PyBbXSkubWFwKGNhcmQgPT4gdGhpcy5ub3JtYWxpemVDYXRhbG9nQ2FyZChjYXJkLCBjYXRhbG9nKSk7XG4gICAgICAgIGlmIChjYXJkcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNhcmRDYXRhbG9nLnNldChPYmplY3QuZnJvbUVudHJpZXMoY2FyZHMubWFwKGNhcmQgPT4gW2NhcmQuaWQsIGNhcmRdKSkpO1xuICAgICAgICAgIHRoaXMuYWxsQ2F0YWxvZ0NhcmRzLnNldChjYXJkcyk7XG4gICAgICAgICAgdGhpcy5jYXRhbG9nTG9hZGVkLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmdhbWUuc2V0KHRoaXMuY3JlYXRlVHV0b3JpYWxHYW1lKGNhcmRzKSk7XG4gICAgICAgICAgbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NocmlzdGlhbml0eSBjYXRhbG9nIGNvdWxkIG5vdCBiZSBsb2FkZWQuIEZhbGxpbmcgYmFjayB0byBzdGFydGVyIGNhcmRzLicsIGVycm9yKTtcbiAgICB9XG4gICAgdGhpcy5jYXRhbG9nTG9hZFN0YXRlLnNldChsb2FkZWQgPyAncmVhZHknIDogJ2ZhbGxiYWNrJyk7XG4gICAgdGhpcy5maW5pc2hTcGxhc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluaXNoU3BsYXNoKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMuYm9vdFN0YXJ0ZWRBdDtcbiAgICBjb25zdCByZW1haW5pbmcgPSBNYXRoLm1heCgwLCBTUExBU0hfTUlOX0RVUkFUSU9OX01TIC0gZWxhcHNlZCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2NyZWVuKCkgPT09ICdzcGxhc2gnKSB7XG4gICAgICAgIHRoaXMuc2NyZWVuLnNldCgnaG9tZScpO1xuICAgICAgfVxuICAgIH0sIHJlbWFpbmluZyk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNhdGFsb2dDYXJkKGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLCBjYXRhbG9nOiBDaHJpc3RpYW5pdHlFZGl0aW9uQ2F0YWxvZyk6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uIHtcbiAgICBjb25zdCBlZGl0aW9uSWNvbiA9IGNhcmQuZWRpdGlvbkljb24gPz8gY2F0YWxvZy5lZGl0aW9uPy5pY29uID8/IEdFTkVTSVNfSUNPTl9VUkw7XG4gICAgY29uc3QgdmVyc2VUZXh0ID0gY2FyZC52ZXJzZVRleHQgPz8gY2FyZC5iaWJsZT8udGV4dDtcbiAgICBjb25zdCBzY3JpcHR1cmUgPSBjYXJkLnNjcmlwdHVyZSA/PyB0aGlzLmZvcm1hdFNjcmlwdHVyZShjYXJkLmJpYmxlKTtcbiAgICBjb25zdCBvZmZlcmluZ1ZhbHVlID0gY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gY2FyZC5vZmZlcmluZ1ZhbHVlID8/IGNhcmQubGlmZSA/PyBjYXJkLmNvc3QgPz8gMSA6IGNhcmQub2ZmZXJpbmdWYWx1ZTtcbiAgICBjb25zdCBsaWZlID0gY2FyZC50eXBlID09PSAnbGVhZGVyJ1xuICAgICAgPyBjYXJkLmxlYWRlckxpZmUgPz8gY2FyZC5saWZlID8/IDEwXG4gICAgICA6IGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJ1xuICAgICAgICA/IG9mZmVyaW5nVmFsdWVcbiAgICAgICAgOiBjYXJkLmxpZmUgPz8gMDtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY2FyZCxcbiAgICAgIGNvc3Q6IGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyA/IDAgOiBjYXJkLmNvc3QgPz8gMCxcbiAgICAgIG9mZmVyaW5nVmFsdWUsXG4gICAgICBsaWZlLFxuICAgICAgbGVhZGVyTGlmZTogY2FyZC50eXBlID09PSAnbGVhZGVyJyA/IGNhcmQubGVhZGVyTGlmZSA/PyBsaWZlIDogY2FyZC5sZWFkZXJMaWZlLFxuICAgICAgYXR0YWNrOiBjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInID8gY2FyZC5hdHRhY2sgPz8gMCA6IGNhcmQuYXR0YWNrLFxuICAgICAgYWJpbGl0eU5hbWU6IGNhcmQuYWJpbGl0eU5hbWUgPz8gY2FyZC5hYmlsaXRpZXM/LlswXT8ubmFtZSxcbiAgICAgIGFiaWxpdHlUZXh0OiBjYXJkLmFiaWxpdHlUZXh0ID8/IGNhcmQuYWJpbGl0aWVzPy5bMF0/LnRleHQsXG4gICAgICB2ZXJzZVRleHQsXG4gICAgICBzY3JpcHR1cmUsXG4gICAgICBlZGl0aW9uOiBjYXJkLmVkaXRpb24gPz8gY2F0YWxvZy5lZGl0aW9uPy5pZCA/PyAnR0VOJyxcbiAgICAgIGVkaXRpb25OdW1iZXI6IGNhcmQuZWRpdGlvbk51bWJlciA/PyBjYXRhbG9nLmVkaXRpb24/Lm51bWJlcixcbiAgICAgIGVkaXRpb25JY29uLFxuICAgICAgaW1hZ2VVcmw6IGNhcmQuaW1hZ2VVcmwgPz8gY2FyZC5hcnQ/LmltYWdlVXJsLFxuICAgICAgYXV0aG9yOiBjYXJkLmF1dGhvciA/PyBjYXJkLmFydD8uYXJ0aXN0Q3JlZGl0LFxuICAgICAgeWVhcjogY2FyZC55ZWFyID8/ICcyMDI2JyxcbiAgICAgIGZyb250VGVtcGxhdGU6IGNhcmQuZnJvbnRUZW1wbGF0ZSA/PyAnZ2VuZXNpcy1jbGFzc2ljJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTY3JpcHR1cmUoYmlibGU/OiBDaHJpc3RpYW5pdHlDYXJkQmlibGVSZWZlcmVuY2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghYmlibGU/LmJvb2sgfHwgIWJpYmxlLnJlZmVyZW5jZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYCR7YmlibGUuYm9va30gJHtiaWJsZS5yZWZlcmVuY2V9JHtiaWJsZS52ZXJzaW9uID8gYCAke2JpYmxlLnZlcnNpb259YCA6ICcnfWA7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVR1dG9yaWFsR2FtZShjYXJkczogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb25bXSk6IENocmlzdGlhbml0eUdhbWVTdGF0ZSB7XG4gICAgY29uc3QgbGVhZGVycyA9IGNhcmRzLmZpbHRlcihjYXJkID0+IGNhcmQudHlwZSA9PT0gJ2xlYWRlcicpO1xuICAgIGNvbnN0IHBsYXllckxlYWRlciA9IHRoaXMuZmluZENhcmQobGVhZGVycywgJ0Fkw6FuJykgPz8gbGVhZGVyc1swXTtcbiAgICBjb25zdCBvcHBvbmVudExlYWRlciA9IHRoaXMuZmluZENhcmQobGVhZGVycywgJ05vw6knKSA/PyBsZWFkZXJzWzFdID8/IGxlYWRlcnNbMF07XG4gICAgY29uc3Qgb2ZmZXJpbmdzID0gY2FyZHMuZmlsdGVyKGNhcmQgPT4gY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKS5zbGljZSgwLCBUVVRPUklBTF9PRkZFUklOR19MSU1JVCk7XG4gICAgY29uc3QgY2hhcmFjdGVycyA9IGNhcmRzXG4gICAgICAuZmlsdGVyKGNhcmQgPT4gY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJyAmJiAoY2FyZC5jb3N0ID8/IDApIDw9IDQgJiYgKGNhcmQuYXR0YWNrID8/IDApID49IDAgJiYgKGNhcmQubGlmZSA/PyAwKSA+IDApXG4gICAgICAuc2xpY2UoMCwgVFVUT1JJQUxfQ0hBUkFDVEVSX0xJTUlUKTtcbiAgICBjb25zdCBzdGFydGluZ09mZmVyaW5nID0gb2ZmZXJpbmdzWzBdID8/IFNUQVJURVJfQ0FSRFNbJ29fc2ltcGxlJ107XG4gICAgY29uc3QgdHV0b3JpYWxEZWNrID0gW1xuICAgICAgLi4ub2ZmZXJpbmdzLnNsaWNlKDEpLFxuICAgICAgLi4uY2hhcmFjdGVycyxcbiAgICAgIC4uLm9mZmVyaW5ncy5zbGljZSgwLCAxKSxcbiAgICBdLnNsaWNlKDAsIDIwKTtcbiAgICBjb25zdCBwbGF5ZXJIYW5kID0gdHV0b3JpYWxEZWNrLnNsaWNlKDAsIDQpLm1hcChjYXJkID0+IGNhcmQuaWQpO1xuICAgIGNvbnN0IG9wcG9uZW50QmF0dGxlQ2FyZCA9IGNoYXJhY3RlcnNbMF07XG4gICAgY29uc3Qgc2hhcmVkRGVjayA9IHR1dG9yaWFsRGVjay5zbGljZSg0KS5tYXAoY2FyZCA9PiBjYXJkLmlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdHJ1Y3R1cmVkQ2xvbmUoU1RBUlRJTkdfR0FNRSksXG4gICAgICBzaGFyZWREZWNrLFxuICAgICAgaGlzdG9yeVpvbmU6IFtdLFxuICAgICAgcGxheWVyczoge1xuICAgICAgICBQMTogdGhpcy5jcmVhdGVUdXRvcmlhbFBsYXllcignUDEnLCBwbGF5ZXJMZWFkZXIsIHN0YXJ0aW5nT2ZmZXJpbmcsIHBsYXllckhhbmQsIFtdKSxcbiAgICAgICAgUDI6IHRoaXMuY3JlYXRlVHV0b3JpYWxQbGF5ZXIoXG4gICAgICAgICAgJ1AyJyxcbiAgICAgICAgICBvcHBvbmVudExlYWRlcixcbiAgICAgICAgICBzdGFydGluZ09mZmVyaW5nLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBvcHBvbmVudEJhdHRsZUNhcmQgPyBbdGhpcy5jcmVhdGVDaGFyYWN0ZXJJbnN0YW5jZShvcHBvbmVudEJhdHRsZUNhcmQsICdQMicsIDAsICdvcHBfMDAxJyldIDogW10sXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgbG9nOiBbdGhpcy50KCdjaHJpc3RpYW5pdHlUdXRvcmlhbExvYWRlZCcpXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUdXRvcmlhbFBsYXllcihcbiAgICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICAgIGxlYWRlcjogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24gfCB1bmRlZmluZWQsXG4gICAgc3RhcnRpbmdPZmZlcmluZzogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gICAgaGFuZDogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgYmF0dGxlWm9uZTogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2VbXSxcbiAgKTogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUge1xuICAgIGNvbnN0IGJhc2UgPSBTVEFSVElOR19HQU1FLnBsYXllcnNbc2VhdF07XG4gICAgY29uc3QgbGVhZGVyTGlmZSA9IGxlYWRlcj8ubGVhZGVyTGlmZSA/PyBsZWFkZXI/LmxpZmUgPz8gYmFzZS5sZWFkZXJNYXhIcDtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RydWN0dXJlZENsb25lKGJhc2UpLFxuICAgICAgbGVhZGVyQ2FyZElkOiBsZWFkZXI/LmlkLFxuICAgICAgbGVhZGVyTmFtZTogbGVhZGVyID8gdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQobGVhZGVyKS5uYW1lIDogYmFzZS5sZWFkZXJOYW1lLFxuICAgICAgbGVhZGVySHA6IGxlYWRlckxpZmUsXG4gICAgICBsZWFkZXJNYXhIcDogbGVhZGVyTGlmZSxcbiAgICAgIG9mZmVyaW5nczogW3RoaXMuY3JlYXRlT2ZmZXJpbmdJbnN0YW5jZShzdGFydGluZ09mZmVyaW5nLCBzZWF0LCBgJHtzZWF0LnRvTG93ZXJDYXNlKCl9X29mZmVyaW5nXzAwMWApXSxcbiAgICAgIG9mZmVyaW5nUGxheWVkVGhpc1R1cm46IGZhbHNlLFxuICAgICAgaGFuZCxcbiAgICAgIGhhbmRDb3VudDogaGFuZCA/IHVuZGVmaW5lZCA6IDQsXG4gICAgICBiYXR0bGVab25lLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9mZmVyaW5nSW5zdGFuY2UoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sIHNlYXQ6IENocmlzdGlhbml0eVNlYXQsIGluc3RhbmNlSWQ6IHN0cmluZyk6IENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2Uge1xuICAgIGNvbnN0IHZhbHVlID0gY2FyZC5vZmZlcmluZ1ZhbHVlID8/IGNhcmQubGlmZSA/PyAxO1xuICAgIHJldHVybiB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoY2FyZCkubmFtZSxcbiAgICAgIG93bmVyOiBzZWF0LFxuICAgICAgcmVhZHk6IHRydWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGFiaWxpdHlOYW1lOiBjYXJkLmFiaWxpdHlOYW1lLFxuICAgICAgYWJpbGl0eVRleHQ6IGNhcmQuYWJpbGl0eVRleHQsXG4gICAgICBhYmlsaXR5Q29zdDogY2FyZC5hYmlsaXR5Q29zdCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDaGFyYWN0ZXJJbnN0YW5jZShjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbiwgc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCwgc2xvdDogbnVtYmVyLCBpbnN0YW5jZUlkOiBzdHJpbmcpOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSB7XG4gICAgY29uc3QgbGlmZSA9IGNhcmQubGlmZSA/PyAxO1xuICAgIHJldHVybiB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoY2FyZCkubmFtZSxcbiAgICAgIG93bmVyOiBzZWF0LFxuICAgICAgY29udHJvbGxlcjogc2VhdCxcbiAgICAgIHNsb3QsXG4gICAgICBhdHRhY2s6IGNhcmQuYXR0YWNrID8/IDAsXG4gICAgICBjdXJyZW50SHA6IGxpZmUsXG4gICAgICBtYXhIcDogbGlmZSxcbiAgICAgIGNhbkF0dGFjazogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZENhcmQoY2FyZHM6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uW10sIG5hbWVQYXJ0OiBzdHJpbmcpOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGNhcmRzLmZpbmQoY2FyZCA9PiB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChjYXJkKS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmFtZVBhcnQudG9Mb3dlckNhc2UoKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYXJkU29ydEtleShjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgY29sbGVjdG9yID0gY2FyZC5jb2xsZWN0b3JOdW1iZXIgPz8gY2FyZC5pZDtcbiAgICByZXR1cm4gYCR7Y2FyZC5lZGl0aW9uID8/ICcnfS0ke2NvbGxlY3Rvci5wYWRTdGFydCg4LCAnMCcpfS0ke3RoaXMudHJhbnNsYXRlZENhcmRUZXh0KGNhcmQpLm5hbWV9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkRGVmaW5pdGlvbihjYXJkSWQ6IHN0cmluZyk6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jYXJkQ2F0YWxvZygpW2NhcmRJZF0gPz8gU1RBUlRFUl9DQVJEU1tjYXJkSWRdID8/IFNUQVJURVJfQ0FSRFNbJ3Bfc2NvdXQnXTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsYXRlZENhcmRUZXh0KGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uKTogQ2hyaXN0aWFuaXR5UmVzb2x2ZWRDYXJkVGV4dCB7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSBjYXJkLmkxOG4/LltsYW5nXSA/PyBjYXJkLmkxOG4/LlsnZXMnXTtcbiAgICBjb25zdCBwcmltYXJ5QWJpbGl0eSA9IHRyYW5zbGF0aW9uPy5hYmlsaXRpZXM/LlswXSA/PyBjYXJkLmFiaWxpdGllcz8uWzBdO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0cmFuc2xhdGlvbj8ubmFtZSA/PyBjYXJkLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdHJhbnNsYXRpb24/LmZ1bGxOYW1lID8/IGNhcmQuZnVsbE5hbWUsXG4gICAgICB2ZXJzZVRleHQ6IHRyYW5zbGF0aW9uPy52ZXJzZVRleHQgPz8gY2FyZC52ZXJzZVRleHQsXG4gICAgICBzY3JpcHR1cmU6IHRyYW5zbGF0aW9uPy5zY3JpcHR1cmUgPz8gY2FyZC5zY3JpcHR1cmUsXG4gICAgICBhYmlsaXR5TmFtZTogdHJhbnNsYXRpb24/LmFiaWxpdHlOYW1lID8/IHByaW1hcnlBYmlsaXR5Py5uYW1lID8/IGNhcmQuYWJpbGl0eU5hbWUsXG4gICAgICBhYmlsaXR5VGV4dDogdHJhbnNsYXRpb24/LmFiaWxpdHlUZXh0ID8/IHByaW1hcnlBYmlsaXR5Py50ZXh0ID8/IGNhcmQuYWJpbGl0eVRleHQsXG4gICAgICBhYmlsaXRpZXM6IHRyYW5zbGF0aW9uPy5hYmlsaXRpZXMgPz8gY2FyZC5hYmlsaXRpZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkRGlzcGxheU5hbWUoY2FyZElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dCh0aGlzLmNhcmREZWZpbml0aW9uKGNhcmRJZCkpLm5hbWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGxheWVyTGVhZGVyRGlzcGxheU5hbWUocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBsYXllci5sZWFkZXJDYXJkSWQgPyB0aGlzLmNhcmREaXNwbGF5TmFtZShwbGF5ZXIubGVhZGVyQ2FyZElkKSA6IHBsYXllci5sZWFkZXJOYW1lO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhdGFsb2dTdGF0dXNMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jYXRhbG9nTG9hZFN0YXRlKCk7XG4gICAgaWYgKHN0YXRlID09PSAncmVhZHknKSByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlDYXRhbG9nUmVhZHknKTtcbiAgICBpZiAoc3RhdGUgPT09ICdmYWxsYmFjaycpIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eUNhdGFsb2dGYWxsYmFjaycpO1xuICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eUNhdGFsb2dMb2FkaW5nJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRGZWF0dXJlZENhcmRUcmFuc2Zvcm0oaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgdHJhbnNmb3JtcyA9IFtcbiAgICAgICd0cmFuc2xhdGVYKC0xLjRyZW0pIHJvdGF0ZSgtOWRlZyknLFxuICAgICAgJ3RyYW5zbGF0ZVkoLTAuNTVyZW0pIHJvdGF0ZSgyZGVnKScsXG4gICAgICAndHJhbnNsYXRlWCgxLjRyZW0pIHJvdGF0ZSgxMGRlZyknLFxuICAgIF07XG4gICAgcmV0dXJuIHRyYW5zZm9ybXNbaW5kZXhdID8/ICdub25lJztcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkVHlwZUxhYmVsKGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYWJlbHM6IFJlY29yZDxDaHJpc3RpYW5pdHlDYXJkVHlwZSwgc3RyaW5nPiA9IHtcbiAgICAgIGFjdGlvbjogdGhpcy50KCdjaHJpc3RpYW5pdHlBY3Rpb25DYXJkJyksXG4gICAgICBjaGFyYWN0ZXI6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQ2FyZCcpLFxuICAgICAgZXZlbnQ6IHRoaXMudCgnY2hyaXN0aWFuaXR5RXZlbnRDYXJkJyksXG4gICAgICBsZWFkZXI6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgb2ZmZXJpbmc6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJyksXG4gICAgICBwbGFjZTogdGhpcy50KCdjaHJpc3RpYW5pdHlQbGFjZUNhcmQnKSxcbiAgICAgIHRvb2w6IHRoaXMudCgnY2hyaXN0aWFuaXR5VG9vbENhcmQnKSxcbiAgICAgIHdpc2RvbTogdGhpcy50KCdjaHJpc3RpYW5pdHlXaXNkb21DYXJkJyksXG4gICAgfTtcbiAgICByZXR1cm4gbGFiZWxzW2NhcmQudHlwZV07XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmaW5pdGlvblRvUmVuZGVyQ2FyZChcbiAgICBjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgICBvdmVycmlkZXM6IFBhcnRpYWw8Q2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsPiA9IHt9LFxuICApOiBDaHJpc3RpYW5pdHlDYXJkUmVuZGVyTW9kZWwge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChjYXJkKTtcbiAgICBjb25zdCBiYXNlOiBDaHJpc3RpYW5pdHlDYXJkUmVuZGVyTW9kZWwgPSB7XG4gICAgICBpZDogY2FyZC5pZCxcbiAgICAgIG5hbWU6IHRleHQubmFtZSxcbiAgICAgIHR5cGU6IGNhcmQudHlwZSxcbiAgICAgIHR5cGVMYWJlbDogdGhpcy5jYXJkVHlwZUxhYmVsKGNhcmQpLFxuICAgICAgY29zdDogY2FyZC5jb3N0LFxuICAgICAgb2ZmZXJpbmdWYWx1ZTogY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gY2FyZC5vZmZlcmluZ1ZhbHVlID8/IGNhcmQubGlmZSA6IHVuZGVmaW5lZCxcbiAgICAgIGF0dGFjazogY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJyA/IGNhcmQuYXR0YWNrIDogdW5kZWZpbmVkLFxuICAgICAgbGlmZTogY2FyZC5saWZlLFxuICAgICAgY3VycmVudEhwOiBjYXJkLmxpZmUsXG4gICAgICBtYXhIcDogY2FyZC5saWZlLFxuICAgICAgYWJpbGl0eU5hbWU6IHRleHQuYWJpbGl0eU5hbWUsXG4gICAgICBhYmlsaXR5VGV4dDogdGV4dC5hYmlsaXR5VGV4dCB8fCB0aGlzLmRlZmF1bHRDYXJkQm9keShjYXJkLnR5cGUpLFxuICAgICAgdmVyc2VUZXh0OiB0ZXh0LnZlcnNlVGV4dCxcbiAgICAgIHNjcmlwdHVyZTogdGV4dC5zY3JpcHR1cmUsXG4gICAgICBlZGl0aW9uOiBjYXJkLmVkaXRpb24sXG4gICAgICBjb2xsZWN0b3JOdW1iZXI6IGNhcmQuY29sbGVjdG9yTnVtYmVyLFxuICAgICAgZWRpdGlvbkljb246IGNhcmQuZWRpdGlvbkljb24gPz8gKGNhcmQuZWRpdGlvbiA9PT0gJ0dFTicgPyBHRU5FU0lTX0lDT05fVVJMIDogdW5kZWZpbmVkKSxcbiAgICAgIHllYXI6IGNhcmQueWVhcixcbiAgICAgIGF1dGhvcjogY2FyZC5hdXRob3IsXG4gICAgICByYXJpdHk6IGNhcmQucmFyaXR5LFxuICAgICAgaW1hZ2VVcmw6IGNhcmQuaW1hZ2VVcmwsXG4gICAgICBmcm9udFRlbXBsYXRlOiBjYXJkLmZyb250VGVtcGxhdGUgPz8gKGNhcmQuZWRpdGlvbiA9PT0gJ0dFTicgPyAnZ2VuZXNpcy1jbGFzc2ljJyA6IHVuZGVmaW5lZCksXG4gICAgfTtcbiAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5vdmVycmlkZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdENhcmRCb2R5KHR5cGU6IENocmlzdGlhbml0eUNhcmRUeXBlKTogc3RyaW5nIHtcbiAgICBjb25zdCBib2RpZXM6IFJlY29yZDxDaHJpc3RpYW5pdHlDYXJkVHlwZSwgc3RyaW5nPiA9IHtcbiAgICAgIGFjdGlvbjogdGhpcy50KCdjaHJpc3RpYW5pdHlBY3Rpb25SdWxlQm9keScpLFxuICAgICAgY2hhcmFjdGVyOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlckJvZHknKSxcbiAgICAgIGV2ZW50OiB0aGlzLnQoJ2NocmlzdGlhbml0eUV2ZW50UnVsZUJvZHknKSxcbiAgICAgIGxlYWRlcjogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJCb2R5JyksXG4gICAgICBvZmZlcmluZzogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0JvZHknKSxcbiAgICAgIHBsYWNlOiB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYWNlUnVsZUJvZHknKSxcbiAgICAgIHRvb2w6IHRoaXMudCgnY2hyaXN0aWFuaXR5VG9vbFJ1bGVCb2R5JyksXG4gICAgICB3aXNkb206IHRoaXMudCgnY2hyaXN0aWFuaXR5V2lzZG9tUnVsZUJvZHknKSxcbiAgICB9O1xuICAgIHJldHVybiBib2RpZXNbdHlwZV07XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hhcmFjdGVyUmVuZGVyQ2FyZChjYXJkOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IENocmlzdGlhbml0eUNhcmRSZW5kZXJNb2RlbCB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZC5jYXJkSWQpO1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb25Ub1JlbmRlckNhcmQoZGVmaW5pdGlvbiwge1xuICAgICAgaWQ6IGNhcmQuaW5zdGFuY2VJZCxcbiAgICAgIGF0dGFjazogY2FyZC5hdHRhY2ssXG4gICAgICBsaWZlOiBjYXJkLm1heEhwLFxuICAgICAgY3VycmVudEhwOiBjYXJkLmN1cnJlbnRIcCxcbiAgICAgIG1heEhwOiBjYXJkLm1heEhwLFxuICAgICAgc3RhdHVzVGV4dDogY2FyZC5jYW5BdHRhY2sgPyB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlclJlYWR5JykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlckV4aGF1c3RlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGxlYWRlclJlbmRlckNhcmQocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IENocmlzdGlhbml0eUNhcmRSZW5kZXJNb2RlbCB7XG4gICAgaWYgKHBsYXllci5sZWFkZXJDYXJkSWQpIHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmNhcmREZWZpbml0aW9uKHBsYXllci5sZWFkZXJDYXJkSWQpO1xuICAgICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvblRvUmVuZGVyQ2FyZChkZWZpbml0aW9uLCB7XG4gICAgICAgIGlkOiBgJHtwbGF5ZXIuc2VhdH0tbGVhZGVyYCxcbiAgICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoZGVmaW5pdGlvbikubmFtZSxcbiAgICAgICAgdHlwZTogJ2xlYWRlcicsXG4gICAgICAgIHR5cGVMYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJyksXG4gICAgICAgIGxpZmU6IHBsYXllci5sZWFkZXJIcCxcbiAgICAgICAgY3VycmVudEhwOiBwbGF5ZXIubGVhZGVySHAsXG4gICAgICAgIG1heEhwOiBwbGF5ZXIubGVhZGVyTWF4SHAsXG4gICAgICAgIHN0YXR1c1RleHQ6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQm9keScpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7cGxheWVyLnNlYXR9LWxlYWRlcmAsXG4gICAgICBuYW1lOiBwbGF5ZXIubGVhZGVyTmFtZSxcbiAgICAgIHR5cGU6ICdsZWFkZXInLFxuICAgICAgdHlwZUxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgIGxpZmU6IHBsYXllci5sZWFkZXJIcCxcbiAgICAgIGN1cnJlbnRIcDogcGxheWVyLmxlYWRlckhwLFxuICAgICAgbWF4SHA6IHBsYXllci5sZWFkZXJNYXhIcCxcbiAgICAgIGFiaWxpdHlOYW1lOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgIGFiaWxpdHlUZXh0OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckJvZHknKSxcbiAgICAgIHZlcnNlVGV4dDogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJCb2R5JyksXG4gICAgICBlZGl0aW9uOiAnTVZQJyxcbiAgICAgIGNvbGxlY3Rvck51bWJlcjogJ0xJREVSJyxcbiAgICAgIGVkaXRpb25JY29uOiBHRU5FU0lTX0lDT05fVVJMLFxuICAgICAgeWVhcjogJzIwMjYnLFxuICAgICAgYXV0aG9yOiAnTVZQJyxcbiAgICAgIHJhcml0eTogJ2xlZ2VuZGFyeScsXG4gICAgICBmcm9udFRlbXBsYXRlOiAnZ2VuZXNpcy1jbGFzc2ljJyxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIG9mZmVyaW5nUmVuZGVyQ2FyZChvZmZlcmluZzogQ2hyaXN0aWFuaXR5T2ZmZXJpbmdJbnN0YW5jZSk6IENocmlzdGlhbml0eUNhcmRSZW5kZXJNb2RlbCB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuY2FyZERlZmluaXRpb24ob2ZmZXJpbmcuY2FyZElkKTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoZGVmaW5pdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvblRvUmVuZGVyQ2FyZChkZWZpbml0aW9uLCB7XG4gICAgICBpZDogb2ZmZXJpbmcuaW5zdGFuY2VJZCxcbiAgICAgIG5hbWU6IHRleHQubmFtZSxcbiAgICAgIHR5cGU6ICdvZmZlcmluZycsXG4gICAgICB0eXBlTGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJyksXG4gICAgICBvZmZlcmluZ1ZhbHVlOiBvZmZlcmluZy52YWx1ZSxcbiAgICAgIGxpZmU6IG9mZmVyaW5nLnZhbHVlLFxuICAgICAgY3VycmVudEhwOiBvZmZlcmluZy52YWx1ZSxcbiAgICAgIG1heEhwOiBvZmZlcmluZy52YWx1ZSxcbiAgICAgIGFiaWxpdHlOYW1lOiB0ZXh0LmFiaWxpdHlOYW1lID8/IG9mZmVyaW5nLmFiaWxpdHlOYW1lLFxuICAgICAgYWJpbGl0eVRleHQ6IHRleHQuYWJpbGl0eVRleHQgPz8gb2ZmZXJpbmcuYWJpbGl0eVRleHQgPz8gdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ05vQWJpbGl0eScpLFxuICAgICAgc3RhdHVzVGV4dDogb2ZmZXJpbmcucmVhZHkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nUmVhZHknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdFeGhhdXN0ZWQnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJldmlld1JlbmRlclR5cGUodHlwZUxhYmVsOiBzdHJpbmcpOiBDaHJpc3RpYW5pdHlDYXJkUmVuZGVyVHlwZSB7XG4gICAgaWYgKHR5cGVMYWJlbCA9PT0gdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJykpIHJldHVybiAnbGVhZGVyJztcbiAgICBpZiAodHlwZUxhYmVsID09PSB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpKSByZXR1cm4gJ29mZmVyaW5nJztcbiAgICByZXR1cm4gJ2NoYXJhY3Rlcic7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FyZFR5cGVJY29uVXJsKGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYXJkVHlwZUljb25VcmxGb3JUeXBlKGNhcmQudHlwZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJldmlld1R5cGVJY29uVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJldmlldyA9IHRoaXMuc2VsZWN0ZWRQcmV2aWV3KCk7XG4gICAgaWYgKHByZXZpZXc/LmV5ZWJyb3cgPT09IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpKSByZXR1cm4gdGhpcy5jYXJkVHlwZUljb25VcmxGb3JUeXBlKCdsZWFkZXInKTtcbiAgICBpZiAocHJldmlldz8uZXllYnJvdyA9PT0gdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSkgcmV0dXJuIHRoaXMuY2FyZFR5cGVJY29uVXJsRm9yVHlwZSgnb2ZmZXJpbmcnKTtcbiAgICByZXR1cm4gdGhpcy5jYXJkVHlwZUljb25VcmxGb3JUeXBlKCdjaGFyYWN0ZXInKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkVHlwZUljb25VcmxGb3JUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHR5cGUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICBjb25zdCBpY29uID0gbm9ybWFsaXplZCA9PT0gJ2xpZGVyJyA/ICdsZWFkZXInIDogbm9ybWFsaXplZCA9PT0gJ3BlcnNvbmFqZScgPyAnY2hhcmFjdGVyJyA6IG5vcm1hbGl6ZWQgPT09ICdvZnJlbmRhJyA/ICdvZmZlcmluZycgOiBub3JtYWxpemVkO1xuICAgIHJldHVybiBgYXNzZXRzL2dhbWVzL2NocmlzdGlhbml0eS9pY29ucy8ke2ljb259LnBuZ2A7XG4gIH1cblxuICBwcm90ZWN0ZWQgb2ZmZXJpbmdQaXBzKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQpOiB1bmtub3duW10ge1xuICAgIGNvbnN0IGNvdW50ID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShjb3VudCkgfHwgY291bnQgPD0gMCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBNYXRoLm1pbihNYXRoLmZsb29yKGNvdW50KSwgNSkgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYmF0dGxlU2xvdHMoc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCk6IEFycmF5PHsgdHJhY2tJZDogc3RyaW5nOyBjYXJkPzogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UgfT4ge1xuICAgIGNvbnN0IGNhcmRzID0gdGhpcy5nYW1lKCkucGxheWVyc1tzZWF0XS5iYXR0bGVab25lO1xuICAgIGNvbnN0IHBvc2l0aW9uZWRDYXJkcyA9IG5ldyBNYXA8bnVtYmVyLCBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZT4oKTtcbiAgICBjYXJkcy5mb3JFYWNoKChjYXJkLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc2xvdCA9IE51bWJlci5pc0ludGVnZXIoY2FyZC5zbG90KSA/IGNhcmQuc2xvdCA/PyBpbmRleCA6IGluZGV4O1xuICAgICAgaWYgKHNsb3QgPj0gMCAmJiBzbG90IDwgNCAmJiAhcG9zaXRpb25lZENhcmRzLmhhcyhzbG90KSkge1xuICAgICAgICBwb3NpdGlvbmVkQ2FyZHMuc2V0KHNsb3QsIGNhcmQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA0IH0sIChfLCBpbmRleCkgPT4gKHtcbiAgICAgIHRyYWNrSWQ6IHBvc2l0aW9uZWRDYXJkcy5nZXQoaW5kZXgpPy5pbnN0YW5jZUlkID8/IGAke3NlYXR9LWVtcHR5LSR7aW5kZXh9YCxcbiAgICAgIGNhcmQ6IHBvc2l0aW9uZWRDYXJkcy5nZXQoaW5kZXgpLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBiYXR0bGVTbG90RHJvcElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgY2hyaXN0aWFuaXR5LWJhdHRsZS1zbG90LSR7aW5kZXh9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkcm9wVGFyZ2V0SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydjaHJpc3RpYW5pdHktb2ZmZXJpbmdzLWRyb3AnLCAuLi50aGlzLmJhdHRsZVNsb3RzKCdQMScpLm1hcCgoXywgaW5kZXgpID0+IHRoaXMuYmF0dGxlU2xvdERyb3BJZChpbmRleCkpXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoaWRkZW5IYW5kQ2FyZHMoY291bnQ6IG51bWJlcik6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZhblRyYW5zZm9ybShpbmRleDogbnVtYmVyLCB0b3RhbDogbnVtYmVyLCBvcHBvbmVudDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgaWYgKHRvdGFsIDw9IDEpIHJldHVybiAnbm9uZSc7XG4gICAgY29uc3QgY2VudGVyID0gKHRvdGFsIC0gMSkgLyAyO1xuICAgIGNvbnN0IG9mZnNldCA9IGluZGV4IC0gY2VudGVyO1xuICAgIGNvbnN0IHJvdGF0ZSA9IG9mZnNldCAqIChvcHBvbmVudCA/IDYgOiA1KTtcbiAgICBjb25zdCBsaWZ0ID0gTWF0aC5hYnMob2Zmc2V0KSAqIDAuMjU7XG4gICAgY29uc3QgaG92ZXJMaWZ0ID0gb3Bwb25lbnQgPyAwIDogdGhpcy5oYW5kV2F2ZUxpZnQoaW5kZXgpO1xuICAgIGNvbnN0IHNjYWxlID0gb3Bwb25lbnQgPyAxIDogdGhpcy5oYW5kV2F2ZVNjYWxlKGluZGV4KTtcbiAgICBjb25zdCBmYW5MaWZ0ID0gb3Bwb25lbnQgPyBNYXRoLmFicyhvZmZzZXQpICogMC4yMiA6IGxpZnQgKyBob3ZlckxpZnQ7XG4gICAgY29uc3QgZmFuU3ByZWFkID0gb3Bwb25lbnQgPyBvZmZzZXQgKiAwLjAyIDogMDtcbiAgICByZXR1cm4gYHRyYW5zbGF0ZSgke2ZhblNwcmVhZH1yZW0sICR7ZmFuTGlmdH1yZW0pIHJvdGF0ZSgke3JvdGF0ZX1kZWcpIHNjYWxlKCR7c2NhbGV9KWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZENhcmRaSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgaG92ZXJlZCA9IHRoaXMuaG92ZXJlZEhhbmRJbmRleCgpO1xuICAgIGlmIChob3ZlcmVkID09PSBudWxsKSByZXR1cm4gMjtcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKGluZGV4IC0gaG92ZXJlZCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDIsIDggLSBkaXN0YW5jZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0SG92ZXJlZEhhbmRJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkSGFuZEluZGV4LnNldChpbmRleCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYXJIb3ZlcmVkSGFuZEluZGV4KCk6IHZvaWQge1xuICAgIHRoaXMuaG92ZXJlZEhhbmRJbmRleC5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVsZWFzZUhvdmVyZWRIYW5kKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQucG9pbnRlclR5cGUgIT09ICdtb3VzZScpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuY2xlYXJIb3ZlcmVkSGFuZEluZGV4KCksIDE4MCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kV2F2ZUxpZnQoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgaG92ZXJlZCA9IHRoaXMuaG92ZXJlZEhhbmRJbmRleCgpO1xuICAgIGlmIChob3ZlcmVkID09PSBudWxsKSByZXR1cm4gMDtcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKGluZGV4IC0gaG92ZXJlZCk7XG4gICAgaWYgKGRpc3RhbmNlID09PSAwKSByZXR1cm4gLTEuMTU7XG4gICAgaWYgKGRpc3RhbmNlID09PSAxKSByZXR1cm4gLTAuNTg7XG4gICAgaWYgKGRpc3RhbmNlID09PSAyKSByZXR1cm4gLTAuMjI7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIGhhbmRXYXZlU2NhbGUoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgaG92ZXJlZCA9IHRoaXMuaG92ZXJlZEhhbmRJbmRleCgpO1xuICAgIGlmIChob3ZlcmVkID09PSBudWxsKSByZXR1cm4gMTtcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKGluZGV4IC0gaG92ZXJlZCk7XG4gICAgaWYgKGRpc3RhbmNlID09PSAwKSByZXR1cm4gMS4wNjtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDEpIHJldHVybiAxLjAzO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWR5T2ZmZXJpbmdzKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBwbGF5ZXIub2ZmZXJpbmdzLnJlZHVjZSgodG90YWwsIG9mZmVyaW5nKSA9PiB0b3RhbCArIChvZmZlcmluZy5yZWFkeSA/IG9mZmVyaW5nLnZhbHVlIDogMCksIDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvdGFsT2ZmZXJpbmdzKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBwbGF5ZXIub2ZmZXJpbmdzLnJlZHVjZSgodG90YWwsIG9mZmVyaW5nKSA9PiB0b3RhbCArIG9mZmVyaW5nLnZhbHVlLCAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGF5KGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzT3duVHVybigpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykgcmV0dXJuICF0aGlzLnBsYXllcigpLm9mZmVyaW5nUGxheWVkVGhpc1R1cm47XG4gICAgaWYgKGNhcmQudHlwZSA9PT0gJ2NoYXJhY3RlcicpIHJldHVybiB0aGlzLnJlYWR5T2ZmZXJpbmdzKHRoaXMucGxheWVyKCkpID49IChjYXJkLmNvc3QgPz8gMCkgJiYgdGhpcy5wbGF5ZXIoKS5iYXR0bGVab25lLmxlbmd0aCA8IDQ7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhblBsYXlTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpO1xuICAgIHJldHVybiAhIXNlbGVjdGVkICYmIHRoaXMuY2FuUGxheSh0aGlzLmNhcmREZWZpbml0aW9uKHNlbGVjdGVkKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRBY3Rpb25MYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENhcmREZWZpbml0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3RlZCkgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5UGxheUNhcmQnKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQudHlwZSA9PT0gJ29mZmVyaW5nJyA/IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxheU9mZmVyaW5nJykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYXlDYXJkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRBY3Rpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDYXJkRGVmaW5pdGlvbigpO1xuICAgIGlmICghc2VsZWN0ZWQgfHwgIXRoaXMuY2FuUGxheShzZWxlY3RlZCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBzZWxlY3RlZC50eXBlID09PSAnY2hhcmFjdGVyJztcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGFjZVNlbGVjdGVkQ2hhcmFjdGVyKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENhcmREZWZpbml0aW9uKCk7XG4gICAgcmV0dXJuICEhc2VsZWN0ZWQgJiYgc2VsZWN0ZWQudHlwZSA9PT0gJ2NoYXJhY3RlcicgJiYgdGhpcy5jYW5QbGF5KHNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGFjZVNlbGVjdGVkT2ZmZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ2FyZERlZmluaXRpb24oKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZCAmJiBzZWxlY3RlZC50eXBlID09PSAnb2ZmZXJpbmcnICYmIHRoaXMuY2FuUGxheShzZWxlY3RlZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNEcmFnZ2luZ0NoYXJhY3RlcigpOiBib29sZWFuIHtcbiAgICBjb25zdCBjYXJkSWQgPSB0aGlzLmRyYWdnaW5nQ2FyZElkKCk7XG4gICAgaWYgKCFjYXJkSWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgIHJldHVybiBjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInICYmIHRoaXMuY2FuUGxheShjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0RyYWdnaW5nT2ZmZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2FyZElkID0gdGhpcy5kcmFnZ2luZ0NhcmRJZCgpO1xuICAgIGlmICghY2FyZElkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICByZXR1cm4gY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnICYmIHRoaXMuY2FuUGxheShjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydERyYWdnaW5nQ2FyZChjYXJkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChjYXJkSWQpO1xuICAgIHRoaXMuZHJhZ2dpbmdDYXJkSWQuc2V0KGNhcmRJZCk7XG4gICAgdGhpcy5jbG9zZVByZXZpZXcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmREcmFnZ2luZ0NhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2luZ0NhcmRJZC5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZHJvcE9uQmF0dGxlU2xvdChldmVudDogQ2RrRHJhZ0Ryb3A8bnVtYmVyLCB1bmtub3duLCBzdHJpbmc+LCBzbG90SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGV2ZW50Lml0ZW0uZGF0YSk7XG4gICAgaWYgKGNhcmQudHlwZSAhPT0gJ2NoYXJhY3RlcicpIHJldHVybjtcbiAgICB0aGlzLnBsYXlDYXJkRnJvbUhhbmQoZXZlbnQuaXRlbS5kYXRhLCBzbG90SW5kZXgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRyb3BPbk9mZmVyaW5ncyhldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93biwgdW5rbm93biwgc3RyaW5nPik6IHZvaWQge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGV2ZW50Lml0ZW0uZGF0YSk7XG4gICAgaWYgKGNhcmQudHlwZSAhPT0gJ29mZmVyaW5nJykgcmV0dXJuO1xuICAgIHRoaXMucGxheUNhcmRGcm9tSGFuZChldmVudC5pdGVtLmRhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEhhbmRDYXJkKGNhcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKSA9PT0gY2FyZElkO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldCh3YXNTZWxlY3RlZCA/IG51bGwgOiBjYXJkSWQpO1xuICAgIHRoaXMuY2xvc2VQcmV2aWV3KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGxheVNlbGVjdGVkQ2FyZChzbG90SW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjYXJkSWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKTtcbiAgICBpZiAoIWNhcmRJZCkgcmV0dXJuO1xuICAgIHRoaXMucGxheUNhcmRGcm9tSGFuZChjYXJkSWQsIHNsb3RJbmRleCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGxheUNhcmRGcm9tSGFuZChjYXJkSWQ6IHN0cmluZywgc2xvdEluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICBpZiAoIXRoaXMuY2FuUGxheShjYXJkKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBwbGF5ZXIgPSBuZXh0LnBsYXllcnMuUDE7XG4gICAgICBjb25zdCBoYW5kSW5kZXggPSBwbGF5ZXIuaGFuZD8uaW5kZXhPZihjYXJkSWQpID8/IC0xO1xuICAgICAgaWYgKGhhbmRJbmRleCA8IDAgfHwgIXBsYXllci5oYW5kKSByZXR1cm4gZ2FtZTtcbiAgICAgIHBsYXllci5oYW5kLnNwbGljZShoYW5kSW5kZXgsIDEpO1xuICAgICAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgICAgICBwbGF5ZXIub2ZmZXJpbmdzLnB1c2goe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGBwMV9vZmZlcmluZ18ke25leHQucmV2aXNpb24gKyAxfWAsXG4gICAgICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgICAgIG5hbWU6IGNhcmQubmFtZSxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogY2FyZC5vZmZlcmluZ1ZhbHVlID8/IGNhcmQubGlmZSA/PyAxLFxuICAgICAgICAgIGFiaWxpdHlOYW1lOiBjYXJkLmFiaWxpdHlOYW1lLFxuICAgICAgICAgIGFiaWxpdHlUZXh0OiBjYXJkLmFiaWxpdHlUZXh0LFxuICAgICAgICAgIGFiaWxpdHlDb3N0OiBjYXJkLmFiaWxpdHlDb3N0LFxuICAgICAgICB9KTtcbiAgICAgICAgcGxheWVyLm9mZmVyaW5nUGxheWVkVGhpc1R1cm4gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zcGVuZE9mZmVyaW5ncyhwbGF5ZXIsIGNhcmQuY29zdCA/PyAwKTtcbiAgICAgICAgY29uc3Qgb2NjdXBpZWRTbG90cyA9IG5ldyBTZXQocGxheWVyLmJhdHRsZVpvbmUubWFwKChjaGFyYWN0ZXIsIGluZGV4KSA9PiBOdW1iZXIuaXNJbnRlZ2VyKGNoYXJhY3Rlci5zbG90KSA/IGNoYXJhY3Rlci5zbG90ID8/IGluZGV4IDogaW5kZXgpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2xvdCA9IHNsb3RJbmRleCA/PyBbMCwgMSwgMiwgM10uZmluZChpbmRleCA9PiAhb2NjdXBpZWRTbG90cy5oYXMoaW5kZXgpKTtcbiAgICAgICAgaWYgKHRhcmdldFNsb3QgPT09IHVuZGVmaW5lZCB8fCBvY2N1cGllZFNsb3RzLmhhcyh0YXJnZXRTbG90KSkgcmV0dXJuIGdhbWU7XG4gICAgICAgIHBsYXllci5iYXR0bGVab25lLnB1c2goe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGBwMV8ke25leHQucmV2aXNpb24gKyAxfV8ke3BsYXllci5iYXR0bGVab25lLmxlbmd0aH1gLFxuICAgICAgICAgIGNhcmRJZDogY2FyZC5pZCxcbiAgICAgICAgICBuYW1lOiBjYXJkLm5hbWUsXG4gICAgICAgICAgb3duZXI6ICdQMScsXG4gICAgICAgICAgY29udHJvbGxlcjogJ1AxJyxcbiAgICAgICAgICBzbG90OiB0YXJnZXRTbG90LFxuICAgICAgICAgIGF0dGFjazogY2FyZC5hdHRhY2sgPz8gMCxcbiAgICAgICAgICBjdXJyZW50SHA6IGNhcmQubGlmZSA/PyAxLFxuICAgICAgICAgIG1heEhwOiBjYXJkLmxpZmUgPz8gMSxcbiAgICAgICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcGxheWVyLmJhdHRsZVpvbmUuc29ydCgobGVmdCwgcmlnaHQpID0+IChsZWZ0LnNsb3QgPz8gMCkgLSAocmlnaHQuc2xvdCA/PyAwKSk7XG4gICAgICB9XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtcbiAgICAgICAgY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gYCR7Y2FyZC5uYW1lfSBxdWVkYSBsaXN0YSBjb21vIG9mcmVuZGEuYCA6IGAke2NhcmQubmFtZX0gZW50cmEgZW4gYmF0YWxsYS5gLFxuICAgICAgICAuLi5uZXh0LmxvZyxcbiAgICAgIF0uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIHRoaXMuZHJhZ2dpbmdDYXJkSWQuc2V0KG51bGwpO1xuICAgIHRoaXMuY2xvc2VQcmV2aWV3KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlT2ZmZXJpbmdQaWxlKHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5PZmZlcmluZ3Moc2VhdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0QXR0YWNrZXIoY2FyZDogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIGlmICghdGhpcy5pc093blR1cm4oKSB8fCAhY2FyZC5jYW5BdHRhY2spIHtcbiAgICAgIHRoaXMuaW5zcGVjdENoYXJhY3RlcihjYXJkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbG9zZVByZXZpZXcoKTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpPy5pbnN0YW5jZUlkID09PSBjYXJkLmluc3RhbmNlSWQgPyBudWxsIDogY2FyZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlT3Bwb25lbnRDaGFyYWN0ZXIoY2FyZDogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEF0dGFja2VyKCkpIHtcbiAgICAgIHRoaXMuYXR0YWNrQ2hhcmFjdGVyKGNhcmQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmluc3BlY3RDaGFyYWN0ZXIoY2FyZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlT3Bwb25lbnRMZWFkZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpICYmICF0aGlzLmhhc09wcG9uZW50R3VhcmRzKCkpIHtcbiAgICAgIHRoaXMuYXR0YWNrTGVhZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5zcGVjdExlYWRlcignUDInKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdHRhY2tMZWFkZXIoKTogdm9pZCB7XG4gICAgY29uc3QgYXR0YWNrZXIgPSB0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKTtcbiAgICBpZiAoIWF0dGFja2VyKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaGFzT3Bwb25lbnRHdWFyZHMoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgICAgdGl0bGU6IHRoaXMub3Bwb25lbnQoKS5sZWFkZXJOYW1lLFxuICAgICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgICAgbWV0YTogYCR7dGhpcy5vcHBvbmVudCgpLmxlYWRlckhwfS8ke3RoaXMub3Bwb25lbnQoKS5sZWFkZXJNYXhIcH1gLFxuICAgICAgICBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlclByb3RlY3RlZCcpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgbGl2ZUF0dGFja2VyID0gbmV4dC5wbGF5ZXJzLlAxLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gYXR0YWNrZXIuaW5zdGFuY2VJZCk7XG4gICAgICBpZiAoIWxpdmVBdHRhY2tlciB8fCAhbGl2ZUF0dGFja2VyLmNhbkF0dGFjaykgcmV0dXJuIGdhbWU7XG4gICAgICBuZXh0LnBsYXllcnMuUDIubGVhZGVySHAgPSBNYXRoLm1heCgwLCBuZXh0LnBsYXllcnMuUDIubGVhZGVySHAgLSBsaXZlQXR0YWNrZXIuYXR0YWNrKTtcbiAgICAgIGxpdmVBdHRhY2tlci5jYW5BdHRhY2sgPSBmYWxzZTtcbiAgICAgIG5leHQucmV2aXNpb24rKztcbiAgICAgIG5leHQubG9nID0gW2Ake2xpdmVBdHRhY2tlci5uYW1lfSBhdGFjYSBhbCBsaWRlciByaXZhbC5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF0dGFja0NoYXJhY3Rlcih0YXJnZXQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogdm9pZCB7XG4gICAgY29uc3QgYXR0YWNrZXIgPSB0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKTtcbiAgICBpZiAoIWF0dGFja2VyKSByZXR1cm47XG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBsaXZlQXR0YWNrZXIgPSBuZXh0LnBsYXllcnMuUDEuYmF0dGxlWm9uZS5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSBhdHRhY2tlci5pbnN0YW5jZUlkKTtcbiAgICAgIGNvbnN0IGxpdmVUYXJnZXQgPSBuZXh0LnBsYXllcnMuUDIuYmF0dGxlWm9uZS5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSB0YXJnZXQuaW5zdGFuY2VJZCk7XG4gICAgICBpZiAoIWxpdmVBdHRhY2tlciB8fCAhbGl2ZVRhcmdldCB8fCAhbGl2ZUF0dGFja2VyLmNhbkF0dGFjaykgcmV0dXJuIGdhbWU7XG4gICAgICBsaXZlVGFyZ2V0LmN1cnJlbnRIcCAtPSBsaXZlQXR0YWNrZXIuYXR0YWNrO1xuICAgICAgbGl2ZUF0dGFja2VyLmN1cnJlbnRIcCAtPSBsaXZlVGFyZ2V0LmF0dGFjaztcbiAgICAgIGxpdmVBdHRhY2tlci5jYW5BdHRhY2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2xlYW51cERlc3Ryb3llZChuZXh0LnBsYXllcnMuUDEsIG5leHQpO1xuICAgICAgdGhpcy5jbGVhbnVwRGVzdHJveWVkKG5leHQucGxheWVycy5QMiwgbmV4dCk7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgJHtsaXZlQXR0YWNrZXIubmFtZX0gY29tYmF0ZSBjb250cmEgJHtsaXZlVGFyZ2V0Lm5hbWV9LmAsIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW5kVHVybigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIG5leHQudHVybk93bmVyID0gbmV4dC50dXJuT3duZXIgPT09ICdQMScgPyAnUDInIDogJ1AxJztcbiAgICAgIG5leHQudHVybkNvdW50Kys7XG4gICAgICBjb25zdCBjdXJyZW50ID0gbmV4dC5wbGF5ZXJzW25leHQudHVybk93bmVyXTtcbiAgICAgIGN1cnJlbnQub2ZmZXJpbmdQbGF5ZWRUaGlzVHVybiA9IGZhbHNlO1xuICAgICAgY3VycmVudC5vZmZlcmluZ3MgPSBjdXJyZW50Lm9mZmVyaW5ncy5tYXAob2ZmZXJpbmcgPT4gKHsgLi4ub2ZmZXJpbmcsIHJlYWR5OiB0cnVlIH0pKTtcbiAgICAgIGN1cnJlbnQuYmF0dGxlWm9uZSA9IGN1cnJlbnQuYmF0dGxlWm9uZS5tYXAoY2FyZCA9PiAoeyAuLi5jYXJkLCBjYW5BdHRhY2s6IHRydWUgfSkpO1xuICAgICAgY29uc3QgZHJhd25DYXJkID0gbmV4dC5zaGFyZWREZWNrLnNoaWZ0KCk7XG4gICAgICBpZiAoZHJhd25DYXJkKSB7XG4gICAgICAgIGlmIChjdXJyZW50LmhhbmQpIHtcbiAgICAgICAgICBjdXJyZW50LmhhbmQucHVzaChkcmF3bkNhcmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnQuaGFuZENvdW50ID0gKGN1cnJlbnQuaGFuZENvdW50ID8/IDApICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbXG4gICAgICAgIGRyYXduQ2FyZCA/IGAke2N1cnJlbnQuZGlzcGxheU5hbWV9IHJvYmEgdW5hIGNhcnRhLmAgOiBgRWwgbWF6byBlc3RhIHZhY2lvLmAsXG4gICAgICAgIGBUdXJubyBkZSAke2N1cnJlbnQuZGlzcGxheU5hbWV9LmAsXG4gICAgICAgIC4uLm5leHQubG9nLFxuICAgICAgXS5zbGljZSgwLCA0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0TW9jaygpOiB2b2lkIHtcbiAgICB0aGlzLmdhbWUuc2V0KHRoaXMuY2F0YWxvZ0xvYWRlZCgpID8gdGhpcy5jcmVhdGVUdXRvcmlhbEdhbWUodGhpcy5hbGxDYXRhbG9nQ2FyZHMoKSkgOiBzdHJ1Y3R1cmVkQ2xvbmUoU1RBUlRJTkdfR0FNRSkpO1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd0hpc3Rvcnkuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dHYWxsZXJ5LnNldChmYWxzZSk7XG4gICAgdGhpcy5vZmZlcmluZ3NTZWF0LnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydFR1dG9yaWFsKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRNb2NrKCk7XG4gICAgdGhpcy5zY3JlZW4uc2V0KCd0YWJsZScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5yZXNldFByZXZpZXdUaWx0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VJbmZvKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvcGVuT2ZmZXJpbmdzKHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd0hpc3Rvcnkuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dHYWxsZXJ5LnNldChmYWxzZSk7XG4gICAgdGhpcy5vZmZlcmluZ3NTZWF0LnNldChzZWF0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvcGVuSGlzdG9yeSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMub2ZmZXJpbmdzU2VhdC5zZXQobnVsbCk7XG4gICAgdGhpcy5zaG93R2FsbGVyeS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0hpc3Rvcnkuc2V0KHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlT2ZmZXJpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMub2ZmZXJpbmdzU2VhdC5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3BlbkdhbGxlcnkoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLm9mZmVyaW5nc1NlYXQuc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd0hpc3Rvcnkuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dHYWxsZXJ5LnNldCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZUdhbGxlcnkoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93R2FsbGVyeS5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEdhbGxlcnlTZWFyY2goZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5nYWxsZXJ5U2VhcmNoLnNldCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRHYWxsZXJ5VHlwZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmdhbGxlcnlUeXBlLnNldCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZSBhcyBDaHJpc3RpYW5pdHlHYWxsZXJ5VHlwZUZpbHRlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgdGlsdFByZXZpZXcoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGJvdW5kcyA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB4ID0gKGV2ZW50LmNsaWVudFggLSBib3VuZHMubGVmdCkgLyBib3VuZHMud2lkdGggLSAwLjU7XG4gICAgY29uc3QgeSA9IChldmVudC5jbGllbnRZIC0gYm91bmRzLnRvcCkgLyBib3VuZHMuaGVpZ2h0IC0gMC41O1xuICAgIHRoaXMucHJldmlld1RpbHQuc2V0KHtcbiAgICAgIHJvdGF0ZVg6IDUgLSB5ICogMTgsXG4gICAgICByb3RhdGVZOiAtNSArIHggKiAxOCxcbiAgICAgIHNoaWZ0WDogeCAqIDEwLFxuICAgICAgc2hpZnRZOiB5ICogMTAsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRQcmV2aWV3VGlsdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpZXdUaWx0LnNldCh7IHJvdGF0ZVg6IDUsIHJvdGF0ZVk6IC01LCBzaGlmdFg6IDAsIHNoaWZ0WTogMCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cERlc3Ryb3llZChwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlLCBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBkZXN0cm95ZWQgPSBwbGF5ZXIuYmF0dGxlWm9uZS5maWx0ZXIoY2FyZCA9PiBjYXJkLmN1cnJlbnRIcCA8PSAwKTtcbiAgICBpZiAoIWRlc3Ryb3llZC5sZW5ndGgpIHJldHVybjtcbiAgICBnYW1lLmhpc3Rvcnlab25lLnB1c2goLi4uZGVzdHJveWVkLm1hcChjYXJkID0+IGNhcmQuY2FyZElkKSk7XG4gICAgcGxheWVyLmJhdHRsZVpvbmUgPSBwbGF5ZXIuYmF0dGxlWm9uZS5maWx0ZXIoY2FyZCA9PiBjYXJkLmN1cnJlbnRIcCA+IDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc3BlY3RMZWFkZXIoc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLmdhbWUoKS5wbGF5ZXJzW3NlYXRdO1xuICAgIGNvbnN0IGxlYWRlciA9IHBsYXllci5sZWFkZXJDYXJkSWQgPyB0aGlzLmNhcmREZWZpbml0aW9uKHBsYXllci5sZWFkZXJDYXJkSWQpIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldCh7XG4gICAgICB0aXRsZTogbGVhZGVyID8gdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQobGVhZGVyKS5uYW1lIDogcGxheWVyLmxlYWRlck5hbWUsXG4gICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgIG1ldGE6IGAke3BsYXllci5sZWFkZXJIcH0vJHtwbGF5ZXIubGVhZGVyTWF4SHB9YCxcbiAgICAgIGJvZHk6IHNlYXQgPT09ICdQMicgJiYgdGhpcy5oYXNPcHBvbmVudEd1YXJkcygpID8gdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJQcm90ZWN0ZWQnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQm9keScpLFxuICAgICAgY2FyZElkOiBwbGF5ZXIubGVhZGVyQ2FyZElkLFxuICAgICAgc291cmNlOiAnYm9hcmQnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc3BlY3RPZmZlcmluZyhvZmZlcmluZzogQ2hyaXN0aWFuaXR5T2ZmZXJpbmdJbnN0YW5jZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5jYXJkRGVmaW5pdGlvbihvZmZlcmluZy5jYXJkSWQpO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChkZWZpbml0aW9uKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgdGl0bGU6IHRleHQubmFtZSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJyksXG4gICAgICBtZXRhOiBvZmZlcmluZy5yZWFkeSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdSZWFkeScpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0V4aGF1c3RlZCcpLFxuICAgICAgYm9keTogdGV4dC5hYmlsaXR5VGV4dCA/PyBvZmZlcmluZy5hYmlsaXR5VGV4dCA/PyB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQm9keScpLFxuICAgICAgY2FyZElkOiBvZmZlcmluZy5jYXJkSWQsXG4gICAgICBzb3VyY2U6ICdwaWxlJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvZmZlcmluZ0FiaWxpdHlUZXh0KG9mZmVyaW5nOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQodGhpcy5jYXJkRGVmaW5pdGlvbihvZmZlcmluZy5jYXJkSWQpKTtcbiAgICByZXR1cm4gdGV4dC5hYmlsaXR5VGV4dCA/PyBvZmZlcmluZy5hYmlsaXR5VGV4dCA/PyB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nTm9BYmlsaXR5Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuVXNlT2ZmZXJpbmdBYmlsaXR5KG9mZmVyaW5nOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlLCBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogYm9vbGVhbiB7XG4gICAgaWYgKHNlYXQgIT09ICdQMScgfHwgIXRoaXMuaXNPd25UdXJuKCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIW9mZmVyaW5nLnJlYWR5IHx8ICFvZmZlcmluZy5hYmlsaXR5TmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnJlYWR5T2ZmZXJpbmdzKHRoaXMuZ2FtZSgpLnBsYXllcnNbc2VhdF0pID49IChvZmZlcmluZy5hYmlsaXR5Q29zdCA/PyAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1c2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmc6IENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UsIHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlT2ZmZXJpbmdBYmlsaXR5KG9mZmVyaW5nLCBzZWF0KSkgcmV0dXJuO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgcGxheWVyID0gbmV4dC5wbGF5ZXJzW3NlYXRdO1xuICAgICAgY29uc3QgbGl2ZU9mZmVyaW5nID0gcGxheWVyLm9mZmVyaW5ncy5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSBvZmZlcmluZy5pbnN0YW5jZUlkKTtcbiAgICAgIGlmICghbGl2ZU9mZmVyaW5nIHx8ICFsaXZlT2ZmZXJpbmcucmVhZHkpIHJldHVybiBnYW1lO1xuICAgICAgY29uc3Qgb2ZmZXJpbmdJZCA9IGxpdmVPZmZlcmluZy5pbnN0YW5jZUlkO1xuICAgICAgdGhpcy5zcGVuZE9mZmVyaW5ncyhwbGF5ZXIsIGxpdmVPZmZlcmluZy5hYmlsaXR5Q29zdCA/PyAwKTtcbiAgICAgIHBsYXllci5vZmZlcmluZ3MgPSBwbGF5ZXIub2ZmZXJpbmdzLm1hcChjYXJkID0+IChjYXJkLmluc3RhbmNlSWQgPT09IG9mZmVyaW5nSWQgPyB7IC4uLmNhcmQsIHJlYWR5OiBmYWxzZSB9IDogY2FyZCkpO1xuICAgICAgcGxheWVyLmxlYWRlckhwID0gTWF0aC5tYXgoMCwgcGxheWVyLmxlYWRlckhwIC0gMSk7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgJHtsaXZlT2ZmZXJpbmcubmFtZX06ICR7bGl2ZU9mZmVyaW5nLmFiaWxpdHlOYW1lfS5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0RGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCByZW1haW5pbmdDYXJkcyA9IHRoaXMuZ2FtZSgpLnNoYXJlZERlY2subGVuZ3RoO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQoe1xuICAgICAgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5RGVjaycpLFxuICAgICAgZXllYnJvdzogdGhpcy50KCdjaHJpc3RpYW5pdHlTaGFyZWRab25lJyksXG4gICAgICBtZXRhOiBgJHtyZW1haW5pbmdDYXJkc30gJHtyZW1haW5pbmdDYXJkcyA9PT0gMSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2FyZFJlbWFpbmluZycpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDYXJkc1JlbWFpbmluZycpfWAsXG4gICAgICBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eURlY2tCb2R5JyksXG4gICAgICBmYWN0czogW1xuICAgICAgICB0aGlzLnQoJ2NocmlzdGlhbml0eURlY2tSdWxlU2hhcmVkJyksXG4gICAgICAgIHRoaXMudCgnY2hyaXN0aWFuaXR5RGVja1J1bGVEcmF3JyksXG4gICAgICAgIHRoaXMudCgnY2hyaXN0aWFuaXR5RGVja1J1bGVFbXB0eScpLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0SG93VG9QbGF5KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQoe1xuICAgICAgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5SG93VG9QbGF5JyksXG4gICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eUdlbmVzaXNFZGl0aW9uJyksXG4gICAgICBtZXRhOiB0aGlzLnQoJ2NocmlzdGlhbml0eVR1dG9yaWFsTW9kZScpLFxuICAgICAgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlIb3dUb1BsYXlJbnRybycpLFxuICAgICAgZmFjdHM6IFtcbiAgICAgICAgdGhpcy50KCdjaHJpc3RpYW5pdHlIb3dUb1BsYXlHb2FsJyksXG4gICAgICAgIHRoaXMudCgnY2hyaXN0aWFuaXR5SG93VG9QbGF5VHVybicpLFxuICAgICAgICB0aGlzLnQoJ2NocmlzdGlhbml0eUhvd1RvUGxheU9mZmVyaW5ncycpLFxuICAgICAgICB0aGlzLnQoJ2NocmlzdGlhbml0eUhvd1RvUGxheUJhdHRsZScpLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0SGFuZENhcmQoY2FyZElkOiBzdHJpbmcsIGZyb21IYW5kID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQobnVsbCk7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoY2FyZCk7XG4gICAgaWYgKGZyb21IYW5kKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICAgICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChjYXJkSWQpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgdGl0bGU6IHRleHQubmFtZSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMuY2FyZFR5cGVMYWJlbChjYXJkKSxcbiAgICAgIG1ldGE6IHRoaXMuY2FyZFByZXZpZXdNZXRhKGNhcmQpLFxuICAgICAgYm9keTogdGhpcy5kZWZhdWx0Q2FyZEJvZHkoY2FyZC50eXBlKSxcbiAgICAgIGNhcmRJZCxcbiAgICAgIHNvdXJjZTogZnJvbUhhbmQgPyAnaGFuZCcgOiAncGlsZScsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdEdhbGxlcnlDYXJkKGNhcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbnNwZWN0SGFuZENhcmQoY2FyZElkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0SGlzdG9yeUNhcmQoY2FyZElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dIaXN0b3J5LnNldChmYWxzZSk7XG4gICAgdGhpcy5pbnNwZWN0SGFuZENhcmQoY2FyZElkKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zcGVjdENoYXJhY3RlcihjYXJkOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkLmNhcmRJZCk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChkZWZpbml0aW9uKS5uYW1lLFxuICAgICAgZXllYnJvdzogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJDYXJkJyksXG4gICAgICBtZXRhOiBgJHtjYXJkLmF0dGFja30vJHtjYXJkLmN1cnJlbnRIcH1gLFxuICAgICAgYm9keTogY2FyZC5jYW5BdHRhY2sgPyB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlclJlYWR5JykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlckV4aGF1c3RlZCcpLFxuICAgICAgY2FyZElkOiBjYXJkLmNhcmRJZCxcbiAgICAgIHNvdXJjZTogJ2JvYXJkJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FyZFByZXZpZXdNZXRhKGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSByZXR1cm4gYCR7Y2FyZC5vZmZlcmluZ1ZhbHVlID8/IGNhcmQubGlmZSA/PyAxfWA7XG4gICAgaWYgKGNhcmQudHlwZSA9PT0gJ2xlYWRlcicpIHJldHVybiBgJHtjYXJkLmxlYWRlckxpZmUgPz8gY2FyZC5saWZlID8/IDB9YDtcbiAgICBpZiAoY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJykgcmV0dXJuIGAke3RoaXMudCgnY2hyaXN0aWFuaXR5Q29zdCcpfSAke2NhcmQuY29zdCA/PyAwfSDCtyAke2NhcmQuYXR0YWNrID8/IDB9LyR7Y2FyZC5saWZlID8/IDB9YDtcbiAgICBpZiAoY2FyZC5jb3N0ICE9PSB1bmRlZmluZWQpIHJldHVybiBgJHt0aGlzLnQoJ2NocmlzdGlhbml0eUNvc3QnKX0gJHtjYXJkLmNvc3R9YDtcbiAgICByZXR1cm4gY2FyZC5jb2xsZWN0b3JOdW1iZXIgPz8gY2FyZC5pZDtcbiAgfVxuXG4gIHByaXZhdGUgc3BlbmRPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSwgY29zdDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IHJlbWFpbmluZyA9IGNvc3Q7XG4gICAgcGxheWVyLm9mZmVyaW5ncyA9IHBsYXllci5vZmZlcmluZ3MubWFwKG9mZmVyaW5nID0+IHtcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCAhb2ZmZXJpbmcucmVhZHkpIHJldHVybiBvZmZlcmluZztcbiAgICAgIHJlbWFpbmluZyAtPSBvZmZlcmluZy52YWx1ZTtcbiAgICAgIHJldHVybiB7IC4uLm9mZmVyaW5nLCByZWFkeTogZmFsc2UgfTtcbiAgICB9KTtcbiAgfVxufVxuIl19