valtech-components 4.0.452 â 4.0.454
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +109 -16
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +1735 -0
- package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +159 -9
- package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/directives/light-ripple.directive.mjs +57 -0
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/mini-games/public-api.mjs +34 -2
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/valtech-components-mini-games.mjs +34 -2
- package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
- package/fesm2022/valtech-components.mjs +2122 -58
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/bubble-blitz-game.component.d.ts +2 -0
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +3 -1
- package/lib/components/organisms/mini-games/christianity-game.component.d.ts +113 -0
- package/lib/components/organisms/mini-games/memory-game.component.d.ts +2 -0
- package/lib/components/organisms/mini-games/simon-game.component.d.ts +2 -0
- package/lib/components/organisms/mini-games/types.d.ts +74 -1
- package/lib/directives/light-ripple.directive.d.ts +8 -0
- package/lib/version.d.ts +1 -1
- package/mini-games/public-api.d.ts +4 -0
- package/package.json +2 -1
- package/public-api.d.ts +2 -0
- package/src/lib/assets/games/christianity/card-symbol.svg +51 -0
|
@@ -70,18 +70,66 @@ export const CHESSIMALS_BOT_PROFILES = [
|
|
|
70
70
|
labelKey: 'chessimalsBotSentinel',
|
|
71
71
|
descriptionKey: 'chessimalsBotSentinelBody',
|
|
72
72
|
},
|
|
73
|
+
{
|
|
74
|
+
id: 'oracle',
|
|
75
|
+
difficulty: 'hard',
|
|
76
|
+
avatar: 'ðŪ',
|
|
77
|
+
labelKey: 'chessimalsBotOracle',
|
|
78
|
+
descriptionKey: 'chessimalsBotOracleBody',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'ambusher',
|
|
82
|
+
difficulty: 'hard',
|
|
83
|
+
avatar: 'ðŠĪ',
|
|
84
|
+
labelKey: 'chessimalsBotAmbusher',
|
|
85
|
+
descriptionKey: 'chessimalsBotAmbusherBody',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: 'locksmith',
|
|
89
|
+
difficulty: 'hard',
|
|
90
|
+
avatar: 'ð',
|
|
91
|
+
labelKey: 'chessimalsBotLocksmith',
|
|
92
|
+
descriptionKey: 'chessimalsBotLocksmithBody',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: 'storm',
|
|
96
|
+
difficulty: 'hard',
|
|
97
|
+
avatar: 'ðĐïļ',
|
|
98
|
+
labelKey: 'chessimalsBotStorm',
|
|
99
|
+
descriptionKey: 'chessimalsBotStormBody',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: 'matriarch',
|
|
103
|
+
difficulty: 'hard',
|
|
104
|
+
avatar: 'ð',
|
|
105
|
+
labelKey: 'chessimalsBotMatriarch',
|
|
106
|
+
descriptionKey: 'chessimalsBotMatriarchBody',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: 'endgame',
|
|
110
|
+
difficulty: 'hard',
|
|
111
|
+
avatar: 'â',
|
|
112
|
+
labelKey: 'chessimalsBotEndgame',
|
|
113
|
+
descriptionKey: 'chessimalsBotEndgameBody',
|
|
114
|
+
},
|
|
73
115
|
];
|
|
74
116
|
const BOT_STYLES = {
|
|
75
|
-
explorer: { advancement: 1.05, capture: 0.82, safety: 0.62, power: 0.8, center: 1.15, unlock: 1.05, reply: 0.7, randomness: 260, spread: 0.68 },
|
|
76
|
-
impulsive: { advancement: 0.9, capture: 1.45, safety: 0.48, power: 1.15, center: 0.8, unlock: 0.9, reply: 0.55, randomness: 290, spread: 0.62 },
|
|
77
|
-
runner: { advancement: 1.55, capture: 0.78, safety: 0.5, power: 0.95, center: 0.7, unlock: 1.1, reply: 0.55, randomness: 250, spread: 0.6 },
|
|
78
|
-
hunter: { advancement: 0.95, capture: 1.45, safety: 0.9, power: 1.05, center: 0.95, unlock: 0.95, reply: 1, randomness: 90, spread: 0.3 },
|
|
79
|
-
guardian: { advancement: 0.88, capture: 1, safety: 1.45, power: 0.85, center: 1.05, unlock: 1, reply: 1.15, randomness: 70, spread: 0.26 },
|
|
80
|
-
jumper: { advancement: 1.12, capture: 1, safety: 0.92, power: 1.42, center: 1.18, unlock: 1.08, reply: 0.95, randomness: 95, spread: 0.32 },
|
|
81
|
-
strategist: { advancement: 1.05, capture: 1.08, safety: 1.22, power: 1.08, center: 1.16, unlock: 1.1, reply: 1.25, randomness: 22, spread: 0.14 },
|
|
82
|
-
predator: { advancement: 0.98, capture: 1.68, safety: 1.02, power: 1.34, center: 1, unlock: 1, reply: 1.12, randomness: 28, spread: 0.16 },
|
|
83
|
-
sprinter: { advancement: 1.72, capture: 0.9, safety: 0.95, power: 1.08, center: 0.86, unlock: 1.18, reply: 1, randomness: 26, spread: 0.15 },
|
|
84
|
-
sentinel: { advancement: 0.9, capture: 1.12, safety: 1.72, power: 0.95, center: 1.28, unlock: 1.05, reply: 1.38, randomness: 18, spread: 0.12 },
|
|
117
|
+
explorer: { advancement: 1.05, capture: 0.82, safety: 0.62, power: 0.8, center: 1.15, unlock: 1.05, reply: 0.7, randomness: 260, spread: 0.68, mobility: 0.75, trap: 0.5, endgame: 0.55 },
|
|
118
|
+
impulsive: { advancement: 0.9, capture: 1.45, safety: 0.48, power: 1.15, center: 0.8, unlock: 0.9, reply: 0.55, randomness: 290, spread: 0.62, mobility: 0.85, trap: 0.62, endgame: 0.5 },
|
|
119
|
+
runner: { advancement: 1.55, capture: 0.78, safety: 0.5, power: 0.95, center: 0.7, unlock: 1.1, reply: 0.55, randomness: 250, spread: 0.6, mobility: 0.72, trap: 0.45, endgame: 1.1 },
|
|
120
|
+
hunter: { advancement: 0.95, capture: 1.45, safety: 0.9, power: 1.05, center: 0.95, unlock: 0.95, reply: 1, randomness: 90, spread: 0.3, mobility: 0.95, trap: 0.82, endgame: 0.76 },
|
|
121
|
+
guardian: { advancement: 0.88, capture: 1, safety: 1.45, power: 0.85, center: 1.05, unlock: 1, reply: 1.15, randomness: 70, spread: 0.26, mobility: 0.82, trap: 0.72, endgame: 0.72 },
|
|
122
|
+
jumper: { advancement: 1.12, capture: 1, safety: 0.92, power: 1.42, center: 1.18, unlock: 1.08, reply: 0.95, randomness: 95, spread: 0.32, mobility: 1.15, trap: 0.9, endgame: 0.82 },
|
|
123
|
+
strategist: { advancement: 1.05, capture: 1.08, safety: 1.22, power: 1.08, center: 1.16, unlock: 1.1, reply: 1.25, randomness: 22, spread: 0.14, mobility: 1.08, trap: 1.06, endgame: 1 },
|
|
124
|
+
predator: { advancement: 0.98, capture: 1.68, safety: 1.02, power: 1.34, center: 1, unlock: 1, reply: 1.12, randomness: 28, spread: 0.16, mobility: 1.02, trap: 1.18, endgame: 0.82 },
|
|
125
|
+
sprinter: { advancement: 1.72, capture: 0.9, safety: 0.95, power: 1.08, center: 0.86, unlock: 1.18, reply: 1, randomness: 26, spread: 0.15, mobility: 0.95, trap: 0.78, endgame: 1.42 },
|
|
126
|
+
sentinel: { advancement: 0.9, capture: 1.12, safety: 1.72, power: 0.95, center: 1.28, unlock: 1.05, reply: 1.38, randomness: 18, spread: 0.12, mobility: 0.86, trap: 1.04, endgame: 0.84 },
|
|
127
|
+
oracle: { advancement: 1, capture: 1.12, safety: 1.42, power: 1.1, center: 1.18, unlock: 1.08, reply: 1.8, randomness: 8, spread: 0.08, mobility: 1.06, trap: 1.22, endgame: 1.08 },
|
|
128
|
+
ambusher: { advancement: 0.9, capture: 1.48, safety: 1.08, power: 1.46, center: 1.05, unlock: 1.02, reply: 1.32, randomness: 14, spread: 0.1, mobility: 1.12, trap: 1.72, endgame: 0.92 },
|
|
129
|
+
locksmith: { advancement: 0.88, capture: 1.04, safety: 1.55, power: 1.02, center: 1.48, unlock: 1.12, reply: 1.52, randomness: 12, spread: 0.1, mobility: 1.58, trap: 1.24, endgame: 0.86 },
|
|
130
|
+
storm: { advancement: 1.18, capture: 1.38, safety: 0.98, power: 1.62, center: 1.08, unlock: 1.18, reply: 1.22, randomness: 18, spread: 0.13, mobility: 1.36, trap: 1.28, endgame: 1.02 },
|
|
131
|
+
matriarch: { advancement: 0.96, capture: 1.18, safety: 1.64, power: 1.18, center: 1.22, unlock: 1.08, reply: 1.66, randomness: 10, spread: 0.08, mobility: 1.02, trap: 1.36, endgame: 1 },
|
|
132
|
+
endgame: { advancement: 1.46, capture: 1, safety: 1.28, power: 1.04, center: 0.94, unlock: 1.08, reply: 1.44, randomness: 10, spread: 0.09, mobility: 0.98, trap: 1.02, endgame: 1.86 },
|
|
85
133
|
};
|
|
86
134
|
const DEFAULT_BOT_PROFILE_BY_DIFFICULTY = {
|
|
87
135
|
easy: 'explorer',
|
|
@@ -167,8 +215,17 @@ export function chooseChessimalsBotMove(state, difficulty = 'normal', profileId
|
|
|
167
215
|
if (moves.length === 0)
|
|
168
216
|
return undefined;
|
|
169
217
|
const style = BOT_STYLES[profileId] ?? BOT_STYLES[DEFAULT_BOT_PROFILE_BY_DIFFICULTY[difficulty]];
|
|
170
|
-
const
|
|
171
|
-
.map((move) => ({ move, score:
|
|
218
|
+
const quickScored = moves
|
|
219
|
+
.map((move) => ({ move, score: scoreBotMove(state, move, difficulty, style) }))
|
|
220
|
+
.sort((a, b) => b.score - a.score);
|
|
221
|
+
const lookaheadLimit = difficulty === 'hard' ? 32 : difficulty === 'normal' ? 24 : 0;
|
|
222
|
+
const scored = quickScored
|
|
223
|
+
.map((item, index) => ({
|
|
224
|
+
move: item.move,
|
|
225
|
+
score: index < lookaheadLimit
|
|
226
|
+
? scoreBotMoveWithLookahead(state, item.move, difficulty, style)
|
|
227
|
+
: item.score,
|
|
228
|
+
}))
|
|
172
229
|
.sort((a, b) => b.score - a.score);
|
|
173
230
|
if (difficulty === 'easy') {
|
|
174
231
|
const playable = scored.filter((item) => item.score > -3000);
|
|
@@ -366,7 +423,7 @@ function getPowerMoves(state, piece, animal) {
|
|
|
366
423
|
const directions = getPowerDirections(animal);
|
|
367
424
|
const moves = [];
|
|
368
425
|
for (const direction of directions) {
|
|
369
|
-
for (let distance = 1; distance
|
|
426
|
+
for (let distance = 1; distance < state.boardSize; distance += 1) {
|
|
370
427
|
const target = {
|
|
371
428
|
row: piece.position.row + direction.row * distance,
|
|
372
429
|
col: piece.position.col + direction.col * distance,
|
|
@@ -427,7 +484,7 @@ function getKangarooMoves(state, piece) {
|
|
|
427
484
|
}
|
|
428
485
|
return moves;
|
|
429
486
|
}
|
|
430
|
-
function scoreBotMove(state, move, difficulty, style) {
|
|
487
|
+
function scoreBotMove(state, move, difficulty, style, includeTacticalPressure = true) {
|
|
431
488
|
const color = state.currentTurn;
|
|
432
489
|
const targetPiece = move.capturesPieceId
|
|
433
490
|
? activePieces(state).find((piece) => piece.id === move.capturesPieceId)
|
|
@@ -453,6 +510,14 @@ function scoreBotMove(state, move, difficulty, style) {
|
|
|
453
510
|
score += 14 * style.power;
|
|
454
511
|
if (wouldUnlockPower(state, color, move.to))
|
|
455
512
|
score += 90 * style.unlock;
|
|
513
|
+
if (includeTacticalPressure && state.boardSize <= 6) {
|
|
514
|
+
score += countPowerReachAfterMove(state, move, color) * (difficulty === 'hard' ? 8 : 4) * style.mobility;
|
|
515
|
+
score += countProtectedThreatsAfterMove(state, move, color) * (difficulty === 'hard' ? 36 : 18) * style.trap;
|
|
516
|
+
score += scoreEndgamePressure(state, move, color) * style.endgame;
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
score += scoreEndgamePressure(state, move, color) * style.endgame;
|
|
520
|
+
}
|
|
456
521
|
if (difficulty === 'hard' && isSquareVulnerableAfterMove(state, move)) {
|
|
457
522
|
score -= (targetPiece ? 80 : 140) * style.safety;
|
|
458
523
|
}
|
|
@@ -483,7 +548,7 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style) {
|
|
|
483
548
|
score += centerControl * (difficulty === 'hard' ? 18 : 10) * style.center;
|
|
484
549
|
}
|
|
485
550
|
const opponentBestReply = opponentMoves
|
|
486
|
-
.map((opponentMove) => scoreBotMove(afterMove, opponentMove, difficulty, style))
|
|
551
|
+
.map((opponentMove) => scoreBotMove(afterMove, opponentMove, difficulty, style, false))
|
|
487
552
|
.sort((a, b) => b - a)[0];
|
|
488
553
|
if (opponentBestReply) {
|
|
489
554
|
const replyWeight = difficulty === 'easy' ? 0.12 : difficulty === 'normal' ? 0.32 : 0.48;
|
|
@@ -495,6 +560,34 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style) {
|
|
|
495
560
|
}
|
|
496
561
|
return score;
|
|
497
562
|
}
|
|
563
|
+
function countPowerReachAfterMove(state, move, color) {
|
|
564
|
+
try {
|
|
565
|
+
const afterMove = applyChessimalsMove(state, move);
|
|
566
|
+
const evaluationState = { ...afterMove, currentTurn: color };
|
|
567
|
+
return getChessimalsAllLegalMoves(evaluationState, color).filter((nextMove) => nextMove.kind === 'power').length;
|
|
568
|
+
}
|
|
569
|
+
catch {
|
|
570
|
+
return 0;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
function countProtectedThreatsAfterMove(state, move, color) {
|
|
574
|
+
try {
|
|
575
|
+
const afterMove = applyChessimalsMove(state, move);
|
|
576
|
+
const evaluationState = { ...afterMove, currentTurn: color };
|
|
577
|
+
const ourMoves = getChessimalsAllLegalMoves(evaluationState, color);
|
|
578
|
+
const enemyPieces = activePieces(afterMove).filter((piece) => piece.color !== color && !piece.captured);
|
|
579
|
+
return enemyPieces.filter((piece) => ourMoves.some((nextMove) => nextMove.capturesPieceId === piece.id)).length;
|
|
580
|
+
}
|
|
581
|
+
catch {
|
|
582
|
+
return 0;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
function scoreEndgamePressure(state, move, color) {
|
|
586
|
+
const remainingEnemyPieces = activePieces(state).filter((piece) => piece.color !== color && !piece.captured).length;
|
|
587
|
+
const urgency = remainingEnemyPieces <= Math.max(2, Math.floor(state.boardSize / 2)) ? 1.6 : 1;
|
|
588
|
+
const distanceToPromotion = color === 'white' ? move.to.row : state.boardSize - 1 - move.to.row;
|
|
589
|
+
return Math.max(0, state.boardSize - distanceToPromotion) * 14 * urgency;
|
|
590
|
+
}
|
|
498
591
|
function pickNoisyBotMove(scored, spread) {
|
|
499
592
|
if (scored.length === 0)
|
|
500
593
|
return undefined;
|
|
@@ -617,4 +710,4 @@ function otherColor(color) {
|
|
|
617
710
|
function createLocalId() {
|
|
618
711
|
return `local-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
619
712
|
}
|
|
620
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvY2hlc3NpbWFscy1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE1BQU0sT0FBTyxHQUEyQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBYzlFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUEyQjtJQUM3RDtRQUNFLEVBQUUsRUFBRSxVQUFVO1FBQ2QsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLGNBQWMsRUFBRSwyQkFBMkI7S0FDNUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxXQUFXO1FBQ2YsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLEdBQUc7UUFDWCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLGNBQWMsRUFBRSw0QkFBNEI7S0FDN0M7SUFDRDtRQUNFLEVBQUUsRUFBRSxRQUFRO1FBQ1osVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLGNBQWMsRUFBRSx5QkFBeUI7S0FDMUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxRQUFRO1FBQ1osVUFBVSxFQUFFLFFBQVE7UUFDcEIsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLGNBQWMsRUFBRSx5QkFBeUI7S0FDMUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxVQUFVO1FBQ2QsVUFBVSxFQUFFLFFBQVE7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLGNBQWMsRUFBRSwyQkFBMkI7S0FDNUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxRQUFRO1FBQ1osVUFBVSxFQUFFLFFBQVE7UUFDcEIsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLGNBQWMsRUFBRSx5QkFBeUI7S0FDMUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxZQUFZO1FBQ2hCLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHlCQUF5QjtRQUNuQyxjQUFjLEVBQUUsNkJBQTZCO0tBQzlDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUF1RDtJQUNyRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMvSSxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMvSSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUMzSSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUN6SSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMxSSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMzSSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNqSixRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMxSSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUM1SSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUNoSixDQUFDO0FBRUYsTUFBTSxpQ0FBaUMsR0FBNEQ7SUFDakcsSUFBSSxFQUFFLFVBQVU7SUFDaEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsSUFBSSxFQUFFLFlBQVk7Q0FDbkIs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LFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoZXNzaW1hbHNBbmltYWxUeXBlLFxuICBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSxcbiAgQ2hlc3NpbWFsc0JvdFByb2ZpbGUsXG4gIENoZXNzaW1hbHNCb3RQcm9maWxlSWQsXG4gIENoZXNzaW1hbHNCb2FyZFNpemUsXG4gIENoZXNzaW1hbHNHYW1lTW9kZSxcbiAgQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgQ2hlc3NpbWFsc0dhbWVTdGF0dXMsXG4gIENoZXNzaW1hbHNNb3ZlLFxuICBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeSxcbiAgQ2hlc3NpbWFsc09ubGluZVN0YXRlLFxuICBDaGVzc2ltYWxzUGllY2UsXG4gIENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbiAgQ2hlc3NpbWFsc1Bvc2l0aW9uLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQU5JTUFMUzogQ2hlc3NpbWFsc0FuaW1hbFR5cGVbXSA9IFsnZWFnbGUnLCAnYnVsbCcsICdrYW5nYXJvbycsICdsaW9uJ107XG5cbmludGVyZmFjZSBDaGVzc2ltYWxzQm90U3R5bGUge1xuICBhZHZhbmNlbWVudDogbnVtYmVyO1xuICBjYXB0dXJlOiBudW1iZXI7XG4gIHNhZmV0eTogbnVtYmVyO1xuICBwb3dlcjogbnVtYmVyO1xuICBjZW50ZXI6IG51bWJlcjtcbiAgdW5sb2NrOiBudW1iZXI7XG4gIHJlcGx5OiBudW1iZXI7XG4gIHJhbmRvbW5lc3M6IG51bWJlcjtcbiAgc3ByZWFkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBDSEVTU0lNQUxTX0JPVF9QUk9GSUxFUzogQ2hlc3NpbWFsc0JvdFByb2ZpbGVbXSA9IFtcbiAge1xuICAgIGlkOiAnZXhwbG9yZXInLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfwn6etJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RFeHBsb3JlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90RXhwbG9yZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnaW1wdWxzaXZlJyxcbiAgICBkaWZmaWN1bHR5OiAnZWFzeScsXG4gICAgYXZhdGFyOiAn4pqhJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RJbXB1bHNpdmUnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEltcHVsc2l2ZUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdydW5uZXInLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfwn4+BJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RSdW5uZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFJ1bm5lckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdodW50ZXInLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/Cfjq8nLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEh1bnRlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SHVudGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2d1YXJkaWFuJyxcbiAgICBkaWZmaWN1bHR5OiAnbm9ybWFsJyxcbiAgICBhdmF0YXI6ICfwn5uh77iPJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RHdWFyZGlhbicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90R3VhcmRpYW5Cb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnanVtcGVyJyxcbiAgICBkaWZmaWN1bHR5OiAnbm9ybWFsJyxcbiAgICBhdmF0YXI6ICfwn6aYJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RKdW1wZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEp1bXBlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzdHJhdGVnaXN0JyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn4pmf77iPJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RTdHJhdGVnaXN0JyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTdHJhdGVnaXN0Qm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3ByZWRhdG9yJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+mgScsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90UHJlZGF0b3InLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFByZWRhdG9yQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NwcmludGVyJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+agCcsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U3ByaW50ZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFNwcmludGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NlbnRpbmVsJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+PsCcsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U2VudGluZWwnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFNlbnRpbmVsQm9keScsXG4gIH0sXG5dO1xuXG5jb25zdCBCT1RfU1RZTEVTOiBSZWNvcmQ8Q2hlc3NpbWFsc0JvdFByb2ZpbGVJZCwgQ2hlc3NpbWFsc0JvdFN0eWxlPiA9IHtcbiAgZXhwbG9yZXI6IHsgYWR2YW5jZW1lbnQ6IDEuMDUsIGNhcHR1cmU6IDAuODIsIHNhZmV0eTogMC42MiwgcG93ZXI6IDAuOCwgY2VudGVyOiAxLjE1LCB1bmxvY2s6IDEuMDUsIHJlcGx5OiAwLjcsIHJhbmRvbW5lc3M6IDI2MCwgc3ByZWFkOiAwLjY4IH0sXG4gIGltcHVsc2l2ZTogeyBhZHZhbmNlbWVudDogMC45LCBjYXB0dXJlOiAxLjQ1LCBzYWZldHk6IDAuNDgsIHBvd2VyOiAxLjE1LCBjZW50ZXI6IDAuOCwgdW5sb2NrOiAwLjksIHJlcGx5OiAwLjU1LCByYW5kb21uZXNzOiAyOTAsIHNwcmVhZDogMC42MiB9LFxuICBydW5uZXI6IHsgYWR2YW5jZW1lbnQ6IDEuNTUsIGNhcHR1cmU6IDAuNzgsIHNhZmV0eTogMC41LCBwb3dlcjogMC45NSwgY2VudGVyOiAwLjcsIHVubG9jazogMS4xLCByZXBseTogMC41NSwgcmFuZG9tbmVzczogMjUwLCBzcHJlYWQ6IDAuNiB9LFxuICBodW50ZXI6IHsgYWR2YW5jZW1lbnQ6IDAuOTUsIGNhcHR1cmU6IDEuNDUsIHNhZmV0eTogMC45LCBwb3dlcjogMS4wNSwgY2VudGVyOiAwLjk1LCB1bmxvY2s6IDAuOTUsIHJlcGx5OiAxLCByYW5kb21uZXNzOiA5MCwgc3ByZWFkOiAwLjMgfSxcbiAgZ3VhcmRpYW46IHsgYWR2YW5jZW1lbnQ6IDAuODgsIGNhcHR1cmU6IDEsIHNhZmV0eTogMS40NSwgcG93ZXI6IDAuODUsIGNlbnRlcjogMS4wNSwgdW5sb2NrOiAxLCByZXBseTogMS4xNSwgcmFuZG9tbmVzczogNzAsIHNwcmVhZDogMC4yNiB9LFxuICBqdW1wZXI6IHsgYWR2YW5jZW1lbnQ6IDEuMTIsIGNhcHR1cmU6IDEsIHNhZmV0eTogMC45MiwgcG93ZXI6IDEuNDIsIGNlbnRlcjogMS4xOCwgdW5sb2NrOiAxLjA4LCByZXBseTogMC45NSwgcmFuZG9tbmVzczogOTUsIHNwcmVhZDogMC4zMiB9LFxuICBzdHJhdGVnaXN0OiB7IGFkdmFuY2VtZW50OiAxLjA1LCBjYXB0dXJlOiAxLjA4LCBzYWZldHk6IDEuMjIsIHBvd2VyOiAxLjA4LCBjZW50ZXI6IDEuMTYsIHVubG9jazogMS4xLCByZXBseTogMS4yNSwgcmFuZG9tbmVzczogMjIsIHNwcmVhZDogMC4xNCB9LFxuICBwcmVkYXRvcjogeyBhZHZhbmNlbWVudDogMC45OCwgY2FwdHVyZTogMS42OCwgc2FmZXR5OiAxLjAyLCBwb3dlcjogMS4zNCwgY2VudGVyOiAxLCB1bmxvY2s6IDEsIHJlcGx5OiAxLjEyLCByYW5kb21uZXNzOiAyOCwgc3ByZWFkOiAwLjE2IH0sXG4gIHNwcmludGVyOiB7IGFkdmFuY2VtZW50OiAxLjcyLCBjYXB0dXJlOiAwLjksIHNhZmV0eTogMC45NSwgcG93ZXI6IDEuMDgsIGNlbnRlcjogMC44NiwgdW5sb2NrOiAxLjE4LCByZXBseTogMSwgcmFuZG9tbmVzczogMjYsIHNwcmVhZDogMC4xNSB9LFxuICBzZW50aW5lbDogeyBhZHZhbmNlbWVudDogMC45LCBjYXB0dXJlOiAxLjEyLCBzYWZldHk6IDEuNzIsIHBvd2VyOiAwLjk1LCBjZW50ZXI6IDEuMjgsIHVubG9jazogMS4wNSwgcmVwbHk6IDEuMzgsIHJhbmRvbW5lc3M6IDE4LCBzcHJlYWQ6IDAuMTIgfSxcbn07XG5cbmNvbnN0IERFRkFVTFRfQk9UX1BST0ZJTEVfQllfRElGRklDVUxUWTogUmVjb3JkPENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LCBDaGVzc2ltYWxzQm90UHJvZmlsZUlkPiA9IHtcbiAgZWFzeTogJ2V4cGxvcmVyJyxcbiAgbm9ybWFsOiAnaHVudGVyJyxcbiAgaGFyZDogJ3N0cmF0ZWdpc3QnLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVDaGVzc2ltYWxzR2FtZU9wdGlvbnMge1xuICBpZD86IHN0cmluZztcbiAgbW9kZT86IENoZXNzaW1hbHNHYW1lTW9kZTtcbiAgc3RhdHVzPzogQ2hlc3NpbWFsc0dhbWVTdGF0dXM7XG4gIG9ubGluZT86IENoZXNzaW1hbHNPbmxpbmVTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoZXNzaW1hbHNHYW1lKFxuICBib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUgPSA2LFxuICBvcHRpb25zOiBDcmVhdGVDaGVzc2ltYWxzR2FtZU9wdGlvbnMgPSB7fSxcbik6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBjb25zdCBwaWVjZXM6IENoZXNzaW1hbHNQaWVjZVtdID0gW107XG4gIGNvbnN0IHdoaXRlUm93ID0gYm9hcmRTaXplIC0gMjtcbiAgY29uc3QgYmxhY2tSb3cgPSAxO1xuXG4gIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGJvYXJkU2l6ZTsgY29sICs9IDEpIHtcbiAgICBwaWVjZXMucHVzaCh7XG4gICAgICBpZDogYFcke2NvbCArIDF9YCxcbiAgICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgICAgcG9zaXRpb246IHsgcm93OiB3aGl0ZVJvdywgY29sIH0sXG4gICAgICBjYXB0dXJlZDogZmFsc2UsXG4gICAgfSk7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgaWQ6IGBCJHtjb2wgKyAxfWAsXG4gICAgICBjb2xvcjogJ2JsYWNrJyxcbiAgICAgIHBvc2l0aW9uOiB7IHJvdzogYmxhY2tSb3csIGNvbCB9LFxuICAgICAgY2FwdHVyZWQ6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGUgPSByZWZyZXNoQ2hlc3NpbWFsc1Bvd2VyVW5sb2Nrcyh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gY3JlYXRlTG9jYWxJZCgpLFxuICAgIG1vZGU6IG9wdGlvbnMubW9kZSA/PyAnbG9jYWwnLFxuICAgIGJvYXJkU2l6ZSxcbiAgICBzdGF0dXM6IG9wdGlvbnMuc3RhdHVzID8/ICdpbl9wcm9ncmVzcycsXG4gICAgY3VycmVudFR1cm46ICd3aGl0ZScsXG4gICAgcGllY2VzLFxuICAgIHBsYXllcnM6IHtcbiAgICAgIHdoaXRlOiB7IGNvbG9yOiAnd2hpdGUnLCBwb3dlclVubG9ja2VkOiBmYWxzZSwgY2FyZHM6IGNyZWF0ZUNhcmRzKCkgfSxcbiAgICAgIGJsYWNrOiB7IGNvbG9yOiAnYmxhY2snLCBwb3dlclVubG9ja2VkOiBmYWxzZSwgY2FyZHM6IGNyZWF0ZUNhcmRzKCkgfSxcbiAgICB9LFxuICAgIG1vdmVDb3VudDogMCxcbiAgICBvbmxpbmU6IG9wdGlvbnMub25saW5lLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1vdmVIaXN0b3J5OiBbY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShzdGF0ZSldLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uLFxuKTogQ2hlc3NpbWFsc1BpZWNlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZChcbiAgICAocGllY2UpID0+XG4gICAgICAhcGllY2UuY2FwdHVyZWQgJiYgcGllY2UucG9zaXRpb24ucm93ID09PSBwb3NpdGlvbi5yb3cgJiYgcGllY2UucG9zaXRpb24uY29sID09PSBwb3NpdGlvbi5jb2wsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVzc2ltYWxzTGVnYWxNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBpZWNlSWQ6IHN0cmluZyxcbiAgYW5pbWFsPzogQ2hlc3NpbWFsc0FuaW1hbFR5cGUsXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgaWYgKHN0YXRlLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJykgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IHBpZWNlID0gYWN0aXZlUGllY2VzKHN0YXRlKS5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBwaWVjZUlkICYmICFpdGVtLmNhcHR1cmVkKTtcbiAgaWYgKCFwaWVjZSB8fCBwaWVjZS5jb2xvciAhPT0gc3RhdGUuY3VycmVudFR1cm4pIHJldHVybiBbXTtcblxuICBpZiAoYW5pbWFsKSB7XG4gICAgY29uc3QgcGxheWVyID0gc3RhdGUucGxheWVyc1twaWVjZS5jb2xvcl07XG4gICAgaWYgKCFwbGF5ZXIucG93ZXJVbmxvY2tlZCB8fCBwbGF5ZXIuY2FyZHNbYW5pbWFsXS51c2VkKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGdldFBvd2VyTW92ZXMoc3RhdGUsIHBpZWNlLCBhbmltYWwpO1xuICB9XG5cbiAgcmV0dXJuIGdldEJhc2ljTW92ZXMoc3RhdGUsIHBpZWNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvciA9IHN0YXRlLmN1cnJlbnRUdXJuLFxuKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgIT09ICdpbl9wcm9ncmVzcycpIHJldHVybiBbXTtcblxuICBjb25zdCB0dXJuU3RhdGUgPSBjb2xvciA9PT0gc3RhdGUuY3VycmVudFR1cm4gPyBzdGF0ZSA6IHsgLi4uc3RhdGUsIGN1cnJlbnRUdXJuOiBjb2xvciB9O1xuICBjb25zdCBwbGF5ZXIgPSB0dXJuU3RhdGUucGxheWVyc1tjb2xvcl07XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBhY3RpdmVQaWVjZXModHVyblN0YXRlKSkge1xuICAgIGlmIChwaWVjZS5jYXB0dXJlZCB8fCBwaWVjZS5jb2xvciAhPT0gY29sb3IpIGNvbnRpbnVlO1xuXG4gICAgbW92ZXMucHVzaCguLi5nZXRDaGVzc2ltYWxzTGVnYWxNb3Zlcyh0dXJuU3RhdGUsIHBpZWNlLmlkKSk7XG4gICAgaWYgKCFwbGF5ZXIucG93ZXJVbmxvY2tlZCkgY29udGludWU7XG5cbiAgICBmb3IgKGNvbnN0IGFuaW1hbCBvZiBBTklNQUxTKSB7XG4gICAgICBpZiAocGxheWVyLmNhcmRzW2FuaW1hbF0udXNlZCkgY29udGludWU7XG4gICAgICBtb3Zlcy5wdXNoKC4uLmdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHR1cm5TdGF0ZSwgcGllY2UuaWQsIGFuaW1hbCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNob29zZUNoZXNzaW1hbHNCb3RNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHkgPSAnbm9ybWFsJyxcbiAgcHJvZmlsZUlkOiBDaGVzc2ltYWxzQm90UHJvZmlsZUlkID0gREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZW2RpZmZpY3VsdHldLFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBjb25zdCBtb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlKTtcbiAgaWYgKG1vdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgc3R5bGUgPSBCT1RfU1RZTEVTW3Byb2ZpbGVJZF0gPz8gQk9UX1NUWUxFU1tERUZBVUxUX0JPVF9QUk9GSUxFX0JZX0RJRkZJQ1VMVFlbZGlmZmljdWx0eV1dO1xuXG4gIGNvbnN0IHNjb3JlZCA9IG1vdmVzXG4gICAgLm1hcCgobW92ZSkgPT4gKHsgbW92ZSwgc2NvcmU6IHNjb3JlQm90TW92ZVdpdGhMb29rYWhlYWQoc3RhdGUsIG1vdmUsIGRpZmZpY3VsdHksIHN0eWxlKSB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuXG4gIGlmIChkaWZmaWN1bHR5ID09PSAnZWFzeScpIHtcbiAgICBjb25zdCBwbGF5YWJsZSA9IHNjb3JlZC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc2NvcmUgPiAtMzAwMCk7XG4gICAgcmV0dXJuIHBpY2tOb2lzeUJvdE1vdmUocGxheWFibGUubGVuZ3RoID8gcGxheWFibGUgOiBzY29yZWQsIDAuNTUpO1xuICB9XG5cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdub3JtYWwnKSB7XG4gICAgcmV0dXJuIHNjb3JlZFswXT8ubW92ZTtcbiAgfVxuXG4gIGNvbnN0IHdpbm5pbmdNb3ZlID0gc2NvcmVkLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc2NvcmUgPj0gMTAwMDApO1xuICBpZiAod2lubmluZ01vdmUpIHJldHVybiB3aW5uaW5nTW92ZS5tb3ZlO1xuXG4gIGNvbnN0IG9wcG9uZW50V2lubmluZ1RhcmdldHMgPSBuZXcgU2V0KFxuICAgIGdldEltbWVkaWF0ZVdpbm5pbmdNb3ZlcyhzdGF0ZSwgb3RoZXJDb2xvcihzdGF0ZS5jdXJyZW50VHVybikpLm1hcCgobW92ZSkgPT4gcG9zaXRpb25LZXkobW92ZS50bykpLFxuICApO1xuICBpZiAob3Bwb25lbnRXaW5uaW5nVGFyZ2V0cy5zaXplID4gMCkge1xuICAgIGNvbnN0IGJsb2NraW5nTW92ZSA9IHNjb3JlZC5maW5kKFxuICAgICAgKGl0ZW0pID0+IGl0ZW0ubW92ZS5jYXB0dXJlc1BpZWNlSWQgfHwgb3Bwb25lbnRXaW5uaW5nVGFyZ2V0cy5oYXMocG9zaXRpb25LZXkoaXRlbS5tb3ZlLnRvKSksXG4gICAgKTtcbiAgICBpZiAoYmxvY2tpbmdNb3ZlKSByZXR1cm4gYmxvY2tpbmdNb3ZlLm1vdmU7XG4gIH1cblxuICByZXR1cm4gc2NvcmVkWzBdPy5tb3ZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlDaGVzc2ltYWxzTW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNhbmRpZGF0ZTogQ2hlc3NpbWFsc01vdmUsXG4pOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgY29uc3QgbGVnYWxNb3ZlID0gZ2V0Q2hlc3NpbWFsc0xlZ2FsTW92ZXMoc3RhdGUsIGNhbmRpZGF0ZS5waWVjZUlkLCBjYW5kaWRhdGUuYW5pbWFsKS5maW5kKChtb3ZlKSA9PlxuICAgIHNhbWVQb3NpdGlvbihtb3ZlLmZyb20sIGNhbmRpZGF0ZS5mcm9tKSAmJiBzYW1lUG9zaXRpb24obW92ZS50bywgY2FuZGlkYXRlLnRvKSxcbiAgKTtcblxuICBpZiAoIWxlZ2FsTW92ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19JTExFR0FMX01PVkUnKTtcbiAgfVxuXG4gIGNvbnN0IG1vdmVkUGllY2UgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoKHBpZWNlKSA9PiBwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLnBpZWNlSWQpO1xuICBpZiAoIW1vdmVkUGllY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfUElFQ0VfTk9UX0ZPVU5EJyk7XG4gIH1cblxuICBjb25zdCBwaWVjZXMgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLm1hcCgocGllY2UpID0+IHtcbiAgICBpZiAocGllY2UuaWQgPT09IGxlZ2FsTW92ZS5waWVjZUlkKSB7XG4gICAgICByZXR1cm4geyAuLi5waWVjZSwgcG9zaXRpb246IHsgLi4ubGVnYWxNb3ZlLnRvIH0gfTtcbiAgICB9XG4gICAgaWYgKHBpZWNlLmlkID09PSBsZWdhbE1vdmUuY2FwdHVyZXNQaWVjZUlkKSB7XG4gICAgICByZXR1cm4geyAuLi5waWVjZSwgY2FwdHVyZWQ6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBpZWNlO1xuICB9KTtcblxuICBjb25zdCBwbGF5ZXJzID0ge1xuICAgIC4uLnN0YXRlLnBsYXllcnMsXG4gICAgW21vdmVkUGllY2UuY29sb3JdOiB7XG4gICAgICAuLi5zdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLFxuICAgICAgY2FyZHM6XG4gICAgICAgIGxlZ2FsTW92ZS5raW5kID09PSAncG93ZXInICYmIGxlZ2FsTW92ZS5hbmltYWxcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXS5jYXJkcyxcbiAgICAgICAgICAgICAgW2xlZ2FsTW92ZS5hbmltYWxdOiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXS5jYXJkc1tsZWdhbE1vdmUuYW5pbWFsXSxcbiAgICAgICAgICAgICAgICB1c2VkOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXS5jYXJkcyxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlZnJlc2hDaGVzc2ltYWxzUG93ZXJVbmxvY2tzKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBwaWVjZXMsXG4gICAgcGxheWVycyxcbiAgICBjdXJyZW50VHVybjogb3RoZXJDb2xvcihtb3ZlZFBpZWNlLmNvbG9yKSxcbiAgICBtb3ZlQ291bnQ6IHN0YXRlLm1vdmVDb3VudCArIDEsXG4gICAgbGFzdE1vdmU6IGxlZ2FsTW92ZSxcbiAgfSk7XG5cbiAgY29uc3QgcHJvbW90ZWQgPSBpc1Byb21vdGlvblJvdyhuZXh0U3RhdGUuYm9hcmRTaXplLCBtb3ZlZFBpZWNlLmNvbG9yLCBsZWdhbE1vdmUudG8pO1xuICBjb25zdCBlbmVteVBpZWNlcyA9IGFjdGl2ZVBpZWNlcyhuZXh0U3RhdGUpLmZpbHRlcihcbiAgICAocGllY2UpID0+IHBpZWNlLmNvbG9yICE9PSBtb3ZlZFBpZWNlLmNvbG9yICYmICFwaWVjZS5jYXB0dXJlZCxcbiAgKTtcblxuICBjb25zdCByZXNvbHZlZFN0YXRlID1cbiAgICBwcm9tb3RlZCB8fCBlbmVteVBpZWNlcy5sZW5ndGggPT09IDBcbiAgICAgID8ge1xuICAgICAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgICAgICBzdGF0dXM6ICdmaW5pc2hlZCcgYXMgY29uc3QsXG4gICAgICAgICAgd2lubmVyOiBtb3ZlZFBpZWNlLmNvbG9yLFxuICAgICAgICAgIHdpbm5lclJlYXNvbjogcHJvbW90ZWQgPyAoJ3Byb21vdGlvbicgYXMgY29uc3QpIDogKCdlbGltaW5hdGlvbicgYXMgY29uc3QpLFxuICAgICAgICB9XG4gICAgICA6IG5leHRTdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc29sdmVkU3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtcbiAgICAgIC4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSxcbiAgICAgIGNyZWF0ZU1vdmVIaXN0b3J5RW50cnkocmVzb2x2ZWRTdGF0ZSwgbGVnYWxNb3ZlKSxcbiAgICBdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hlc3NpbWFsc1Jldmlld1N0YXRlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgZW50cnk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5LFxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IGJhc2VTdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS5sYXN0TW92ZTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS53aW5uZXI7XG4gIGRlbGV0ZSBiYXNlU3RhdGUud2lubmVyUmVhc29uO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VTdGF0ZSxcbiAgICBzdGF0dXM6IGVudHJ5LnN0YXR1cyxcbiAgICBjdXJyZW50VHVybjogZW50cnkuY3VycmVudFR1cm4sXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhlbnRyeS5waWVjZXMpLFxuICAgIG1vdmVDb3VudDogZW50cnkubW92ZU51bWJlcixcbiAgICAuLi4oZW50cnkud2lubmVyID8geyB3aW5uZXI6IGVudHJ5Lndpbm5lciB9IDoge30pLFxuICAgIC4uLihlbnRyeS53aW5uZXJSZWFzb24gPyB7IHdpbm5lclJlYXNvbjogZW50cnkud2lubmVyUmVhc29uIH0gOiB7fSksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IGxhc3RNb3ZlOiBzYW5pdGl6ZU1vdmUoZW50cnkubW92ZSkgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU/OiBDaGVzc2ltYWxzTW92ZSxcbik6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICBtb3ZlTnVtYmVyOiBzdGF0ZS5tb3ZlQ291bnQsXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhzdGF0ZS5waWVjZXMpLFxuICAgIGN1cnJlbnRUdXJuOiBzdGF0ZS5jdXJyZW50VHVybixcbiAgICBzdGF0dXM6IHN0YXRlLnN0YXR1cyxcbiAgICAuLi4obW92ZSA/IHsgbW92ZTogc2FuaXRpemVNb3ZlKG1vdmUpIH0gOiB7fSksXG4gICAgLi4uKHN0YXRlLndpbm5lciA/IHsgd2lubmVyOiBzdGF0ZS53aW5uZXIgfSA6IHt9KSxcbiAgICAuLi4oc3RhdGUud2lubmVyUmVhc29uID8geyB3aW5uZXJSZWFzb246IHN0YXRlLndpbm5lclJlYXNvbiB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVNb3ZlSGlzdG9yeShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5W10ge1xuICBpZiAoc3RhdGUubW92ZUhpc3Rvcnk/Lmxlbmd0aCkgcmV0dXJuIHN0YXRlLm1vdmVIaXN0b3J5Lm1hcChjbG9uZU1vdmVIaXN0b3J5RW50cnkpO1xuICByZXR1cm4gW2NyZWF0ZU1vdmVIaXN0b3J5RW50cnkoc3RhdGUpXTtcbn1cblxuZnVuY3Rpb24gY2xvbmVNb3ZlSGlzdG9yeUVudHJ5KGVudHJ5OiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeSk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5lbnRyeSxcbiAgICBwaWVjZXM6IGNsb25lUGllY2VzKGVudHJ5LnBpZWNlcyksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IG1vdmU6IHNhbml0aXplTW92ZShlbnRyeS5tb3ZlKSB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZVBpZWNlcyhwaWVjZXM6IENoZXNzaW1hbHNQaWVjZVtdKTogQ2hlc3NpbWFsc1BpZWNlW10ge1xuICByZXR1cm4gcGllY2VzLm1hcCgocGllY2UpID0+ICh7XG4gICAgLi4ucGllY2UsXG4gICAgcG9zaXRpb246IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZU1vdmUobW92ZTogQ2hlc3NpbWFsc01vdmUpOiBDaGVzc2ltYWxzTW92ZSB7XG4gIHJldHVybiB7XG4gICAgcGllY2VJZDogbW92ZS5waWVjZUlkLFxuICAgIGZyb206IHsgLi4ubW92ZS5mcm9tIH0sXG4gICAgdG86IHsgLi4ubW92ZS50byB9LFxuICAgIGtpbmQ6IG1vdmUua2luZCxcbiAgICAuLi4obW92ZS5hbmltYWwgPyB7IGFuaW1hbDogbW92ZS5hbmltYWwgfSA6IHt9KSxcbiAgICAuLi4obW92ZS5jYXB0dXJlc1BpZWNlSWQgPyB7IGNhcHR1cmVzUGllY2VJZDogbW92ZS5jYXB0dXJlc1BpZWNlSWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2lnbkNoZXNzaW1hbHNHYW1lKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBjb25zdCByZXNpZ25lZFN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHN0YXR1czogJ2ZpbmlzaGVkJyxcbiAgICB3aW5uZXI6IG90aGVyQ29sb3IoY29sb3IpLFxuICAgIHdpbm5lclJlYXNvbjogJ3Jlc2lnbmF0aW9uJyxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc2lnbmVkU3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtcbiAgICAgIC4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSxcbiAgICAgIGNyZWF0ZU1vdmVIaXN0b3J5RW50cnkocmVzaWduZWRTdGF0ZSksXG4gICAgXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aW9uS2V5KHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cG9zaXRpb24ucm93fToke3Bvc2l0aW9uLmNvbH1gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDYXJkcygpIHtcbiAgcmV0dXJuIEFOSU1BTFMucmVkdWNlKFxuICAgIChjYXJkcywgdHlwZSkgPT4gKHtcbiAgICAgIC4uLmNhcmRzLFxuICAgICAgW3R5cGVdOiB7IHR5cGUsIHVzZWQ6IGZhbHNlIH0sXG4gICAgfSksXG4gICAge30gYXMgUmVjb3JkPENoZXNzaW1hbHNBbmltYWxUeXBlLCB7IHR5cGU6IENoZXNzaW1hbHNBbmltYWxUeXBlOyB1c2VkOiBib29sZWFuIH0+LFxuICApO1xufVxuXG5mdW5jdGlvbiBhY3RpdmVQaWVjZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBDaGVzc2ltYWxzUGllY2VbXSB7XG4gIHJldHVybiBzdGF0ZS5waWVjZXMuZmlsdGVyKChwaWVjZSk6IHBpZWNlIGlzIENoZXNzaW1hbHNQaWVjZSA9PiAhIXBpZWNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFzaWNNb3ZlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgcGllY2U6IENoZXNzaW1hbHNQaWVjZSk6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBjb25zdCBkaXJlY3Rpb24gPSBwaWVjZS5jb2xvciA9PT0gJ3doaXRlJyA/IC0xIDogMTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcbiAgY29uc3QgZm9yd2FyZCA9IHsgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24sIGNvbDogcGllY2UucG9zaXRpb24uY29sIH07XG5cbiAgaWYgKGlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCBmb3J3YXJkKSAmJiAhZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIGZvcndhcmQpKSB7XG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgIHRvOiBmb3J3YXJkLFxuICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY29sT2Zmc2V0IG9mIFstMSwgMV0pIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7IHJvdzogcGllY2UucG9zaXRpb24ucm93ICsgZGlyZWN0aW9uLCBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGNvbE9mZnNldCB9O1xuICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgaWYgKFxuICAgICAgaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkgJiZcbiAgICAgIHRhcmdldFBpZWNlICYmXG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciAhPT0gcGllY2UuY29sb3IgJiZcbiAgICAgICFpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpXG4gICAgKSB7XG4gICAgICBtb3Zlcy5wdXNoKHtcbiAgICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICAgICAgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gZ2V0UG93ZXJNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBpZWNlOiBDaGVzc2ltYWxzUGllY2UsXG4gIGFuaW1hbDogQ2hlc3NpbWFsc0FuaW1hbFR5cGUsXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2thbmdhcm9vJykge1xuICAgIHJldHVybiBnZXRLYW5nYXJvb01vdmVzKHN0YXRlLCBwaWVjZSk7XG4gIH1cblxuICBjb25zdCBkaXJlY3Rpb25zID0gZ2V0UG93ZXJEaXJlY3Rpb25zKGFuaW1hbCk7XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBkaXJlY3Rpb24gb2YgZGlyZWN0aW9ucykge1xuICAgIGZvciAobGV0IGRpc3RhbmNlID0gMTsgZGlzdGFuY2UgPD0gMzsgZGlzdGFuY2UgKz0gMSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgICByb3c6IHBpZWNlLnBvc2l0aW9uLnJvdyArIGRpcmVjdGlvbi5yb3cgKiBkaXN0YW5jZSxcbiAgICAgICAgY29sOiBwaWVjZS5wb3NpdGlvbi5jb2wgKyBkaXJlY3Rpb24uY29sICogZGlzdGFuY2UsXG4gICAgICB9O1xuICAgICAgaWYgKCFpc0luc2lkZUJvYXJkKHN0YXRlLmJvYXJkU2l6ZSwgdGFyZ2V0KSkgYnJlYWs7XG4gICAgICBpZiAoaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBwaWVjZS5jb2xvciwgdGFyZ2V0KSkgYnJlYWs7XG5cbiAgICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgICBpZiAodGFyZ2V0UGllY2U/LmNvbG9yID09PSBwaWVjZS5jb2xvcikgYnJlYWs7XG5cbiAgICAgIG1vdmVzLnB1c2goe1xuICAgICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgICAgZnJvbTogeyAuLi5waWVjZS5wb3NpdGlvbiB9LFxuICAgICAgICB0bzogdGFyZ2V0LFxuICAgICAgICBraW5kOiAncG93ZXInLFxuICAgICAgICBhbmltYWwsXG4gICAgICAgIC4uLih0YXJnZXRQaWVjZSA/IHsgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCB9IDoge30pLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0YXJnZXRQaWVjZSkgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG5mdW5jdGlvbiBnZXRLYW5nYXJvb01vdmVzKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBwaWVjZTogQ2hlc3NpbWFsc1BpZWNlKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG4gIGNvbnN0IGp1bXBzID0gW1xuICAgIHsgcm93OiAtMiwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAtMiwgY29sOiAxIH0sXG4gICAgeyByb3c6IC0xLCBjb2w6IC0yIH0sXG4gICAgeyByb3c6IC0xLCBjb2w6IDIgfSxcbiAgICB7IHJvdzogMSwgY29sOiAtMiB9LFxuICAgIHsgcm93OiAxLCBjb2w6IDIgfSxcbiAgICB7IHJvdzogMiwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAyLCBjb2w6IDEgfSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IGp1bXAgb2YganVtcHMpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7XG4gICAgICByb3c6IHBpZWNlLnBvc2l0aW9uLnJvdyArIGp1bXAucm93LFxuICAgICAgY29sOiBwaWVjZS5wb3NpdGlvbi5jb2wgKyBqdW1wLmNvbCxcbiAgICB9O1xuICAgIGlmICghaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkpIGNvbnRpbnVlO1xuICAgIGlmIChpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgaWYgKHRhcmdldFBpZWNlPy5jb2xvciA9PT0gcGllY2UuY29sb3IpIGNvbnRpbnVlO1xuXG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgIHRvOiB0YXJnZXQsXG4gICAgICBraW5kOiAncG93ZXInLFxuICAgICAgYW5pbWFsOiAna2FuZ2Fyb28nLFxuICAgICAgLi4uKHRhcmdldFBpZWNlID8geyBjYXB0dXJlc1BpZWNlSWQ6IHRhcmdldFBpZWNlLmlkIH0gOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbmZ1bmN0aW9uIHNjb3JlQm90TW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlLFxuICBkaWZmaWN1bHR5OiBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSxcbiAgc3R5bGU6IENoZXNzaW1hbHNCb3RTdHlsZSxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvbG9yID0gc3RhdGUuY3VycmVudFR1cm47XG4gIGNvbnN0IHRhcmdldFBpZWNlID0gbW92ZS5jYXB0dXJlc1BpZWNlSWRcbiAgICA/IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgocGllY2UpID0+IHBpZWNlLmlkID09PSBtb3ZlLmNhcHR1cmVzUGllY2VJZClcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYWR2YW5jZW1lbnQgPVxuICAgIGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93IDogbW92ZS50by5yb3c7XG4gIGxldCBzY29yZSA9IGFkdmFuY2VtZW50ICogMjQgKiBzdHlsZS5hZHZhbmNlbWVudDtcblxuICBpZiAobW92ZS5raW5kID09PSAnYmFzaWMnICYmIGlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgY29sb3IsIG1vdmUudG8pKSB7XG4gICAgc2NvcmUgKz0gMTAwMDA7XG4gIH1cbiAgaWYgKHRhcmdldFBpZWNlKSB7XG4gICAgc2NvcmUgKz0gNTIwICogc3R5bGUuY2FwdHVyZTtcbiAgICBjb25zdCB0YXJnZXRBZHZhbmNlbWVudCA9XG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciA9PT0gJ3doaXRlJ1xuICAgICAgICA/IHN0YXRlLmJvYXJkU2l6ZSAtIDEgLSB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3dcbiAgICAgICAgOiB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3c7XG4gICAgc2NvcmUgKz0gdGFyZ2V0QWR2YW5jZW1lbnQgKiAxNiAqIHN0eWxlLmNhcHR1cmU7XG4gIH1cbiAgaWYgKG1vdmUua2luZCA9PT0gJ3Bvd2VyJykge1xuICAgIHNjb3JlICs9ICh0YXJnZXRQaWVjZSA/IDEyMCA6IGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IC02MCA6IC0zMCkgKiBzdHlsZS5wb3dlcjtcbiAgfVxuICBpZiAobW92ZS5hbmltYWwgPT09ICdsaW9uJykgc2NvcmUgLT0gMjAgKiBzdHlsZS5wb3dlcjtcbiAgaWYgKG1vdmUuYW5pbWFsID09PSAna2FuZ2Fyb28nKSBzY29yZSArPSAxNCAqIHN0eWxlLnBvd2VyO1xuICBpZiAod291bGRVbmxvY2tQb3dlcihzdGF0ZSwgY29sb3IsIG1vdmUudG8pKSBzY29yZSArPSA5MCAqIHN0eWxlLnVubG9jaztcbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdoYXJkJyAmJiBpc1NxdWFyZVZ1bG5lcmFibGVBZnRlck1vdmUoc3RhdGUsIG1vdmUpKSB7XG4gICAgc2NvcmUgLT0gKHRhcmdldFBpZWNlID8gODAgOiAxNDApICogc3R5bGUuc2FmZXR5O1xuICB9XG4gIHNjb3JlICs9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIHN0eWxlLnJhbmRvbW5lc3M7XG5cbiAgcmV0dXJuIHNjb3JlO1xufVxuXG5mdW5jdGlvbiBzY29yZUJvdE1vdmVXaXRoTG9va2FoZWFkKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBzdHlsZTogQ2hlc3NpbWFsc0JvdFN0eWxlLFxuKTogbnVtYmVyIHtcbiAgbGV0IHNjb3JlID0gc2NvcmVCb3RNb3ZlKHN0YXRlLCBtb3ZlLCBkaWZmaWN1bHR5LCBzdHlsZSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZnRlck1vdmUgPSBhcHBseUNoZXNzaW1hbHNNb3ZlKHN0YXRlLCBtb3ZlKTtcbiAgICBpZiAoYWZ0ZXJNb3ZlLnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJykgcmV0dXJuIHNjb3JlICsgNTAwMDtcblxuICAgIGNvbnN0IG9wcG9uZW50TW92ZXMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhhZnRlck1vdmUpO1xuICAgIGNvbnN0IG9wcG9uZW50SW1tZWRpYXRlV2luID0gb3Bwb25lbnRNb3Zlcy5zb21lKFxuICAgICAgKG9wcG9uZW50TW92ZSkgPT5cbiAgICAgICAgb3Bwb25lbnRNb3ZlLmtpbmQgPT09ICdiYXNpYycgJiZcbiAgICAgICAgaXNQcm9tb3Rpb25Sb3coYWZ0ZXJNb3ZlLmJvYXJkU2l6ZSwgYWZ0ZXJNb3ZlLmN1cnJlbnRUdXJuLCBvcHBvbmVudE1vdmUudG8pLFxuICAgICk7XG4gICAgaWYgKG9wcG9uZW50SW1tZWRpYXRlV2luKSB7XG4gICAgICBzY29yZSAtPSAoZGlmZmljdWx0eSA9PT0gJ2Vhc3knID8gMTgwMCA6IGRpZmZpY3VsdHkgPT09ICdub3JtYWwnID8gNTIwMCA6IDgwMDApICogc3R5bGUuc2FmZXR5O1xuICAgIH1cblxuICAgIGNvbnN0IG1vdmVkUGllY2UgPSBhZnRlck1vdmUucGllY2VzLmZpbmQoKHBpZWNlKSA9PiBwaWVjZS5pZCA9PT0gbW92ZS5waWVjZUlkICYmICFwaWVjZS5jYXB0dXJlZCk7XG4gICAgaWYgKG1vdmVkUGllY2UpIHtcbiAgICAgIGNvbnN0IGNhbkNhcHR1cmVNb3ZlZFBpZWNlID0gb3Bwb25lbnRNb3Zlcy5zb21lKChvcHBvbmVudE1vdmUpID0+IG9wcG9uZW50TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IG1vdmUucGllY2VJZCk7XG4gICAgICBpZiAoY2FuQ2FwdHVyZU1vdmVkUGllY2UpIHtcbiAgICAgICAgc2NvcmUgLT0gKG1vdmUuY2FwdHVyZXNQaWVjZUlkID8gMTgwIDogZGlmZmljdWx0eSA9PT0gJ2Vhc3knID8gMTIwIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAzNjAgOiA1NjApXG4gICAgICAgICAgKiBzdHlsZS5zYWZldHk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbnRlciA9IChhZnRlck1vdmUuYm9hcmRTaXplIC0gMSkgLyAyO1xuICAgICAgY29uc3QgY2VudGVyQ29udHJvbCA9IE1hdGgubWF4KDAsIGFmdGVyTW92ZS5ib2FyZFNpemUgLyAyIC0gTWF0aC5hYnMobW92ZWRQaWVjZS5wb3NpdGlvbi5jb2wgLSBjZW50ZXIpKTtcbiAgICAgIHNjb3JlICs9IGNlbnRlckNvbnRyb2wgKiAoZGlmZmljdWx0eSA9PT0gJ2hhcmQnID8gMTggOiAxMCkgKiBzdHlsZS5jZW50ZXI7XG4gICAgfVxuXG4gICAgY29uc3Qgb3Bwb25lbnRCZXN0UmVwbHkgPSBvcHBvbmVudE1vdmVzXG4gICAgICAubWFwKChvcHBvbmVudE1vdmUpID0+IHNjb3JlQm90TW92ZShhZnRlck1vdmUsIG9wcG9uZW50TW92ZSwgZGlmZmljdWx0eSwgc3R5bGUpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKVswXTtcblxuICAgIGlmIChvcHBvbmVudEJlc3RSZXBseSkge1xuICAgICAgY29uc3QgcmVwbHlXZWlnaHQgPSBkaWZmaWN1bHR5ID09PSAnZWFzeScgPyAwLjEyIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAwLjMyIDogMC40ODtcbiAgICAgIHNjb3JlIC09IG9wcG9uZW50QmVzdFJlcGx5ICogcmVwbHlXZWlnaHQgKiBzdHlsZS5yZXBseTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHNjb3JlIC09IDEwMDA7XG4gIH1cblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIHBpY2tOb2lzeUJvdE1vdmUoXG4gIHNjb3JlZDogQXJyYXk8eyBtb3ZlOiBDaGVzc2ltYWxzTW92ZTsgc2NvcmU6IG51bWJlciB9PixcbiAgc3ByZWFkOiBudW1iZXIsXG4pOiBDaGVzc2ltYWxzTW92ZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChzY29yZWQubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBwb29sU2l6ZSA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChzY29yZWQubGVuZ3RoICogc3ByZWFkKSk7XG4gIGNvbnN0IHBvb2wgPSBzY29yZWQuc2xpY2UoMCwgcG9vbFNpemUpO1xuICBjb25zdCB0b3BTY29yZSA9IHBvb2xbMF0/LnNjb3JlID8/IDA7XG4gIGNvbnN0IHdlaWdodGVkID0gcG9vbC5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcmVsYXRpdmUgPSBNYXRoLm1heCgwLCBpdGVtLnNjb3JlIC0gdG9wU2NvcmUgKyAxMjAwKTtcbiAgICBjb25zdCB3ZWlnaHQgPSBNYXRoLm1heCgxLCByZWxhdGl2ZSAvIDEyMCArIChwb29sLmxlbmd0aCAtIGluZGV4KSAqIDIpO1xuICAgIHJldHVybiB7IC4uLml0ZW0sIHdlaWdodCB9O1xuICB9KTtcbiAgY29uc3QgdG90YWxXZWlnaHQgPSB3ZWlnaHRlZC5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB0b3RhbCArIGl0ZW0ud2VpZ2h0LCAwKTtcbiAgbGV0IGN1cnNvciA9IE1hdGgucmFuZG9tKCkgKiB0b3RhbFdlaWdodDtcbiAgZm9yIChjb25zdCBpdGVtIG9mIHdlaWdodGVkKSB7XG4gICAgY3Vyc29yIC09IGl0ZW0ud2VpZ2h0O1xuICAgIGlmIChjdXJzb3IgPD0gMCkgcmV0dXJuIGl0ZW0ubW92ZTtcbiAgfVxuICByZXR1cm4gcG9vbFswXT8ubW92ZTtcbn1cblxuZnVuY3Rpb24gZ2V0SW1tZWRpYXRlV2lubmluZ01vdmVzKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICByZXR1cm4gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoc3RhdGUsIGNvbG9yKS5maWx0ZXIoXG4gICAgKG1vdmUpID0+IG1vdmUua2luZCA9PT0gJ2Jhc2ljJyAmJiBpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIGNvbG9yLCBtb3ZlLnRvKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gd291bGRVbmxvY2tQb3dlcihcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4gIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24sXG4pOiBib29sZWFuIHtcbiAgaWYgKHN0YXRlLnBsYXllcnNbY29sb3JdLnBvd2VyVW5sb2NrZWQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3AgOiBwb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tO1xufVxuXG5mdW5jdGlvbiBpc1NxdWFyZVZ1bG5lcmFibGVBZnRlck1vdmUoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIG1vdmU6IENoZXNzaW1hbHNNb3ZlKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgaWYgKGFmdGVyTW92ZS5zdGF0dXMgPT09ICdmaW5pc2hlZCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoYWZ0ZXJNb3ZlKS5zb21lKChlbmVteU1vdmUpID0+XG4gICAgICBzYW1lUG9zaXRpb24oZW5lbXlNb3ZlLnRvLCBtb3ZlLnRvKSAmJiAhIWVuZW15TW92ZS5jYXB0dXJlc1BpZWNlSWQsXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvd2VyRGlyZWN0aW9ucyhhbmltYWw6IENoZXNzaW1hbHNBbmltYWxUeXBlKTogQ2hlc3NpbWFsc1Bvc2l0aW9uW10ge1xuICBpZiAoYW5pbWFsID09PSAnZWFnbGUnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcm93OiAtMSwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IC0xLCBjb2w6IDEgfSxcbiAgICAgIHsgcm93OiAxLCBjb2w6IC0xIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAxIH0sXG4gICAgXTtcbiAgfVxuICBpZiAoYW5pbWFsID09PSAnYnVsbCcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyByb3c6IC0xLCBjb2w6IDAgfSxcbiAgICAgIHsgcm93OiAxLCBjb2w6IDAgfSxcbiAgICAgIHsgcm93OiAwLCBjb2w6IC0xIH0sXG4gICAgICB7IHJvdzogMCwgY29sOiAxIH0sXG4gICAgXTtcbiAgfVxuICByZXR1cm4gW1xuICAgIHsgcm93OiAtMSwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAwIH0sXG4gICAgeyByb3c6IC0xLCBjb2w6IDEgfSxcbiAgICB7IHJvdzogMCwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAwLCBjb2w6IDEgfSxcbiAgICB7IHJvdzogMSwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAxLCBjb2w6IDAgfSxcbiAgICB7IHJvdzogMSwgY29sOiAxIH0sXG4gIF07XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hDaGVzc2ltYWxzUG93ZXJVbmxvY2tzKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgcGxheWVyczoge1xuICAgICAgd2hpdGU6IHtcbiAgICAgICAgLi4uc3RhdGUucGxheWVycy53aGl0ZSxcbiAgICAgICAgcG93ZXJVbmxvY2tlZDpcbiAgICAgICAgICBzdGF0ZS5wbGF5ZXJzLndoaXRlLnBvd2VyVW5sb2NrZWQgfHxcbiAgICAgICAgICBoYXNDcm9zc2VkQ2VudGVyKHN0YXRlLCAnd2hpdGUnKSB8fFxuICAgICAgICAgIGhhc0VuZW15RW50ZXJlZEhvbWUoc3RhdGUsICd3aGl0ZScpLFxuICAgICAgfSxcbiAgICAgIGJsYWNrOiB7XG4gICAgICAgIC4uLnN0YXRlLnBsYXllcnMuYmxhY2ssXG4gICAgICAgIHBvd2VyVW5sb2NrZWQ6XG4gICAgICAgICAgc3RhdGUucGxheWVycy5ibGFjay5wb3dlclVubG9ja2VkIHx8XG4gICAgICAgICAgaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZSwgJ2JsYWNrJykgfHxcbiAgICAgICAgICBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlLCAnYmxhY2snKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcik6IGJvb2xlYW4ge1xuICBjb25zdCBjZW50ZXJUb3AgPSBzdGF0ZS5ib2FyZFNpemUgLyAyIC0gMTtcbiAgY29uc3QgY2VudGVyQm90dG9tID0gc3RhdGUuYm9hcmRTaXplIC8gMjtcbiAgcmV0dXJuIGFjdGl2ZVBpZWNlcyhzdGF0ZSkuc29tZSgocGllY2UpID0+IHtcbiAgICBpZiAocGllY2UuY29sb3IgIT09IGNvbG9yIHx8IHBpZWNlLmNhcHR1cmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gcGllY2UucG9zaXRpb24ucm93IDw9IGNlbnRlclRvcCA6IHBpZWNlLnBvc2l0aW9uLnJvdyA+PSBjZW50ZXJCb3R0b207XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNlbnRlclRvcCA9IHN0YXRlLmJvYXJkU2l6ZSAvIDIgLSAxO1xuICBjb25zdCBjZW50ZXJCb3R0b20gPSBzdGF0ZS5ib2FyZFNpemUgLyAyO1xuICBjb25zdCBlbmVteSA9IG90aGVyQ29sb3IoY29sb3IpO1xuICByZXR1cm4gYWN0aXZlUGllY2VzKHN0YXRlKS5zb21lKChwaWVjZSkgPT4ge1xuICAgIGlmIChwaWVjZS5jb2xvciAhPT0gZW5lbXkgfHwgcGllY2UuY2FwdHVyZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwaWVjZS5wb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tIDogcGllY2UucG9zaXRpb24ucm93IDw9IGNlbnRlclRvcDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzUHJvbW90aW9uUm93KFxuICBib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4gIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24sXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gcG9zaXRpb24ucm93ID09PSAwIDogcG9zaXRpb24ucm93ID09PSBib2FyZFNpemUgLSAxO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUJvYXJkKGJvYXJkU2l6ZTogQ2hlc3NpbWFsc0JvYXJkU2l6ZSwgcG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHBvc2l0aW9uLnJvdyA+PSAwICYmIHBvc2l0aW9uLnJvdyA8IGJvYXJkU2l6ZSAmJiBwb3NpdGlvbi5jb2wgPj0gMCAmJiBwb3NpdGlvbi5jb2wgPCBib2FyZFNpemVcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2FtZVBvc2l0aW9uKGE6IENoZXNzaW1hbHNQb3NpdGlvbiwgYjogQ2hlc3NpbWFsc1Bvc2l0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBhLnJvdyA9PT0gYi5yb3cgJiYgYS5jb2wgPT09IGIuY29sO1xufVxuXG5mdW5jdGlvbiBvdGhlckNvbG9yKGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBDaGVzc2ltYWxzUGxheWVyQ29sb3Ige1xuICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyAnYmxhY2snIDogJ3doaXRlJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9jYWxJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gYGxvY2FsLSR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOCl9YDtcbn1cbiJdfQ==
|
|
713
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvY2hlc3NpbWFscy1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE1BQU0sT0FBTyxHQUEyQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBaUI5RSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBMkI7SUFDN0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsV0FBVztRQUNmLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxHQUFHO1FBQ1gsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxjQUFjLEVBQUUsNEJBQTRCO0tBQzdDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsUUFBUTtRQUNaLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHFCQUFxQjtRQUMvQixjQUFjLEVBQUUseUJBQXlCO0tBQzFDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsUUFBUTtRQUNaLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHFCQUFxQjtRQUMvQixjQUFjLEVBQUUseUJBQXlCO0tBQzFDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsUUFBUTtRQUNa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RSxHQUFHLEVBQUU7SUFDekwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDckwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDcEwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDekwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDdkwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDMUwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDbkwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDekwsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDM0wsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDeEwsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDekwsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJ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QVUsQ0FBQyxLQUE0QjtJQUM5QyxPQUFPLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFTLGFBQWE7SUFDcEIsT0FBTyxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoZXNzaW1hbHNBbmltYWxUeXBlLFxuICBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSxcbiAgQ2hlc3NpbWFsc0JvdFByb2ZpbGUsXG4gIENoZXNzaW1hbHNCb3RQcm9maWxlSWQsXG4gIENoZXNzaW1hbHNCb2FyZFNpemUsXG4gIENoZXNzaW1hbHNHYW1lTW9kZSxcbiAgQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgQ2hlc3NpbWFsc0dhbWVTdGF0dXMsXG4gIENoZXNzaW1hbHNNb3ZlLFxuICBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeSxcbiAgQ2hlc3NpbWFsc09ubGluZVN0YXRlLFxuICBDaGVzc2ltYWxzUGllY2UsXG4gIENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbiAgQ2hlc3NpbWFsc1Bvc2l0aW9uLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQU5JTUFMUzogQ2hlc3NpbWFsc0FuaW1hbFR5cGVbXSA9IFsnZWFnbGUnLCAnYnVsbCcsICdrYW5nYXJvbycsICdsaW9uJ107XG5cbmludGVyZmFjZSBDaGVzc2ltYWxzQm90U3R5bGUge1xuICBhZHZhbmNlbWVudDogbnVtYmVyO1xuICBjYXB0dXJlOiBudW1iZXI7XG4gIHNhZmV0eTogbnVtYmVyO1xuICBwb3dlcjogbnVtYmVyO1xuICBjZW50ZXI6IG51bWJlcjtcbiAgdW5sb2NrOiBudW1iZXI7XG4gIHJlcGx5OiBudW1iZXI7XG4gIHJhbmRvbW5lc3M6IG51bWJlcjtcbiAgc3ByZWFkOiBudW1iZXI7XG4gIG1vYmlsaXR5OiBudW1iZXI7XG4gIHRyYXA6IG51bWJlcjtcbiAgZW5kZ2FtZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgQ0hFU1NJTUFMU19CT1RfUFJPRklMRVM6IENoZXNzaW1hbHNCb3RQcm9maWxlW10gPSBbXG4gIHtcbiAgICBpZDogJ2V4cGxvcmVyJyxcbiAgICBkaWZmaWN1bHR5OiAnZWFzeScsXG4gICAgYXZhdGFyOiAn8J+nrScsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90RXhwbG9yZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEV4cGxvcmVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2ltcHVsc2l2ZScsXG4gICAgZGlmZmljdWx0eTogJ2Vhc3knLFxuICAgIGF2YXRhcjogJ+KaoScsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90SW1wdWxzaXZlJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RJbXB1bHNpdmVCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAncnVubmVyJyxcbiAgICBkaWZmaWN1bHR5OiAnZWFzeScsXG4gICAgYXZhdGFyOiAn8J+PgScsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90UnVubmVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RSdW5uZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnaHVudGVyJyxcbiAgICBkaWZmaWN1bHR5OiAnbm9ybWFsJyxcbiAgICBhdmF0YXI6ICfwn46vJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RIdW50ZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEh1bnRlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdndWFyZGlhbicsXG4gICAgZGlmZmljdWx0eTogJ25vcm1hbCcsXG4gICAgYXZhdGFyOiAn8J+boe+4jycsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90R3VhcmRpYW4nLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEd1YXJkaWFuQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2p1bXBlcicsXG4gICAgZGlmZmljdWx0eTogJ25vcm1hbCcsXG4gICAgYXZhdGFyOiAn8J+mmCcsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90SnVtcGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RKdW1wZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc3RyYXRlZ2lzdCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ+KZn++4jycsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U3RyYXRlZ2lzdCcsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90U3RyYXRlZ2lzdEJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdwcmVkYXRvcicsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfpoEnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFByZWRhdG9yJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RQcmVkYXRvckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzcHJpbnRlcicsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfmoAnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFNwcmludGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTcHJpbnRlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzZW50aW5lbCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/Cfj7AnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFNlbnRpbmVsJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTZW50aW5lbEJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdvcmFjbGUnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5SuJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RPcmFjbGUnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdE9yYWNsZUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdhbWJ1c2hlcicsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfqqQnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEFtYnVzaGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RBbWJ1c2hlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdsb2Nrc21pdGgnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5SQJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RMb2Nrc21pdGgnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdExvY2tzbWl0aEJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzdG9ybScsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfjKnvuI8nLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFN0b3JtJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTdG9ybUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdtYXRyaWFyY2gnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5GRJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RNYXRyaWFyY2gnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdE1hdHJpYXJjaEJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdlbmRnYW1lJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn4oybJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RFbmRnYW1lJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RFbmRnYW1lQm9keScsXG4gIH0sXG5dO1xuXG5jb25zdCBCT1RfU1RZTEVTOiBSZWNvcmQ8Q2hlc3NpbWFsc0JvdFByb2ZpbGVJZCwgQ2hlc3NpbWFsc0JvdFN0eWxlPiA9IHtcbiAgZXhwbG9yZXI6IHsgYWR2YW5jZW1lbnQ6IDEuMDUsIGNhcHR1cmU6IDAuODIsIHNhZmV0eTogMC42MiwgcG93ZXI6IDAuOCwgY2VudGVyOiAxLjE1LCB1bmxvY2s6IDEuMDUsIHJlcGx5OiAwLjcsIHJhbmRvbW5lc3M6IDI2MCwgc3ByZWFkOiAwLjY4LCBtb2JpbGl0eTogMC43NSwgdHJhcDogMC41LCBlbmRnYW1lOiAwLjU1IH0sXG4gIGltcHVsc2l2ZTogeyBhZHZhbmNlbWVudDogMC45LCBjYXB0dXJlOiAxLjQ1LCBzYWZldHk6IDAuNDgsIHBvd2VyOiAxLjE1LCBjZW50ZXI6IDAuOCwgdW5sb2NrOiAwLjksIHJlcGx5OiAwLjU1LCByYW5kb21uZXNzOiAyOTAsIHNwcmVhZDogMC42MiwgbW9iaWxpdHk6IDAuODUsIHRyYXA6IDAuNjIsIGVuZGdhbWU6IDAuNSB9LFxuICBydW5uZXI6IHsgYWR2YW5jZW1lbnQ6IDEuNTUsIGNhcHR1cmU6IDAuNzgsIHNhZmV0eTogMC41LCBwb3dlcjogMC45NSwgY2VudGVyOiAwLjcsIHVubG9jazogMS4xLCByZXBseTogMC41NSwgcmFuZG9tbmVzczogMjUwLCBzcHJlYWQ6IDAuNiwgbW9iaWxpdHk6IDAuNzIsIHRyYXA6IDAuNDUsIGVuZGdhbWU6IDEuMSB9LFxuICBodW50ZXI6IHsgYWR2YW5jZW1lbnQ6IDAuOTUsIGNhcHR1cmU6IDEuNDUsIHNhZmV0eTogMC45LCBwb3dlcjogMS4wNSwgY2VudGVyOiAwLjk1LCB1bmxvY2s6IDAuOTUsIHJlcGx5OiAxLCByYW5kb21uZXNzOiA5MCwgc3ByZWFkOiAwLjMsIG1vYmlsaXR5OiAwLjk1LCB0cmFwOiAwLjgyLCBlbmRnYW1lOiAwLjc2IH0sXG4gIGd1YXJkaWFuOiB7IGFkdmFuY2VtZW50OiAwLjg4LCBjYXB0dXJlOiAxLCBzYWZldHk6IDEuNDUsIHBvd2VyOiAwLjg1LCBjZW50ZXI6IDEuMDUsIHVubG9jazogMSwgcmVwbHk6IDEuMTUsIHJhbmRvbW5lc3M6IDcwLCBzcHJlYWQ6IDAuMjYsIG1vYmlsaXR5OiAwLjgyLCB0cmFwOiAwLjcyLCBlbmRnYW1lOiAwLjcyIH0sXG4gIGp1bXBlcjogeyBhZHZhbmNlbWVudDogMS4xMiwgY2FwdHVyZTogMSwgc2FmZXR5OiAwLjkyLCBwb3dlcjogMS40MiwgY2VudGVyOiAxLjE4LCB1bmxvY2s6IDEuMDgsIHJlcGx5OiAwLjk1LCByYW5kb21uZXNzOiA5NSwgc3ByZWFkOiAwLjMyLCBtb2JpbGl0eTogMS4xNSwgdHJhcDogMC45LCBlbmRnYW1lOiAwLjgyIH0sXG4gIHN0cmF0ZWdpc3Q6IHsgYWR2YW5jZW1lbnQ6IDEuMDUsIGNhcHR1cmU6IDEuMDgsIHNhZmV0eTogMS4yMiwgcG93ZXI6IDEuMDgsIGNlbnRlcjogMS4xNiwgdW5sb2NrOiAxLjEsIHJlcGx5OiAxLjI1LCByYW5kb21uZXNzOiAyMiwgc3ByZWFkOiAwLjE0LCBtb2JpbGl0eTogMS4wOCwgdHJhcDogMS4wNiwgZW5kZ2FtZTogMSB9LFxuICBwcmVkYXRvcjogeyBhZHZhbmNlbWVudDogMC45OCwgY2FwdHVyZTogMS42OCwgc2FmZXR5OiAxLjAyLCBwb3dlcjogMS4zNCwgY2VudGVyOiAxLCB1bmxvY2s6IDEsIHJlcGx5OiAxLjEyLCByYW5kb21uZXNzOiAyOCwgc3ByZWFkOiAwLjE2LCBtb2JpbGl0eTogMS4wMiwgdHJhcDogMS4xOCwgZW5kZ2FtZTogMC44MiB9LFxuICBzcHJpbnRlcjogeyBhZHZhbmNlbWVudDogMS43MiwgY2FwdHVyZTogMC45LCBzYWZldHk6IDAuOTUsIHBvd2VyOiAxLjA4LCBjZW50ZXI6IDAuODYsIHVubG9jazogMS4xOCwgcmVwbHk6IDEsIHJhbmRvbW5lc3M6IDI2LCBzcHJlYWQ6IDAuMTUsIG1vYmlsaXR5OiAwLjk1LCB0cmFwOiAwLjc4LCBlbmRnYW1lOiAxLjQyIH0sXG4gIHNlbnRpbmVsOiB7IGFkdmFuY2VtZW50OiAwLjksIGNhcHR1cmU6IDEuMTIsIHNhZmV0eTogMS43MiwgcG93ZXI6IDAuOTUsIGNlbnRlcjogMS4yOCwgdW5sb2NrOiAxLjA1LCByZXBseTogMS4zOCwgcmFuZG9tbmVzczogMTgsIHNwcmVhZDogMC4xMiwgbW9iaWxpdHk6IDAuODYsIHRyYXA6IDEuMDQsIGVuZGdhbWU6IDAuODQgfSxcbiAgb3JhY2xlOiB7IGFkdmFuY2VtZW50OiAxLCBjYXB0dXJlOiAxLjEyLCBzYWZldHk6IDEuNDIsIHBvd2VyOiAxLjEsIGNlbnRlcjogMS4xOCwgdW5sb2NrOiAxLjA4LCByZXBseTogMS44LCByYW5kb21uZXNzOiA4LCBzcHJlYWQ6IDAuMDgsIG1vYmlsaXR5OiAxLjA2LCB0cmFwOiAxLjIyLCBlbmRnYW1lOiAxLjA4IH0sXG4gIGFtYnVzaGVyOiB7IGFkdmFuY2VtZW50OiAwLjksIGNhcHR1cmU6IDEuNDgsIHNhZmV0eTogMS4wOCwgcG93ZXI6IDEuNDYsIGNlbnRlcjogMS4wNSwgdW5sb2NrOiAxLjAyLCByZXBseTogMS4zMiwgcmFuZG9tbmVzczogMTQsIHNwcmVhZDogMC4xLCBtb2JpbGl0eTogMS4xMiwgdHJhcDogMS43MiwgZW5kZ2FtZTogMC45MiB9LFxuICBsb2Nrc21pdGg6IHsgYWR2YW5jZW1lbnQ6IDAuODgsIGNhcHR1cmU6IDEuMDQsIHNhZmV0eTogMS41NSwgcG93ZXI6IDEuMDIsIGNlbnRlcjogMS40OCwgdW5sb2NrOiAxLjEyLCByZXBseTogMS41MiwgcmFuZG9tbmVzczogMTIsIHNwcmVhZDogMC4xLCBtb2JpbGl0eTogMS41OCwgdHJhcDogMS4yNCwgZW5kZ2FtZTogMC44NiB9LFxuICBzdG9ybTogeyBhZHZhbmNlbWVudDogMS4xOCwgY2FwdHVyZTogMS4zOCwgc2FmZXR5OiAwLjk4LCBwb3dlcjogMS42MiwgY2VudGVyOiAxLjA4LCB1bmxvY2s6IDEuMTgsIHJlcGx5OiAxLjIyLCByYW5kb21uZXNzOiAxOCwgc3ByZWFkOiAwLjEzLCBtb2JpbGl0eTogMS4zNiwgdHJhcDogMS4yOCwgZW5kZ2FtZTogMS4wMiB9LFxuICBtYXRyaWFyY2g6IHsgYWR2YW5jZW1lbnQ6IDAuOTYsIGNhcHR1cmU6IDEuMTgsIHNhZmV0eTogMS42NCwgcG93ZXI6IDEuMTgsIGNlbnRlcjogMS4yMiwgdW5sb2NrOiAxLjA4LCByZXBseTogMS42NiwgcmFuZG9tbmVzczogMTAsIHNwcmVhZDogMC4wOCwgbW9iaWxpdHk6IDEuMDIsIHRyYXA6IDEuMzYsIGVuZGdhbWU6IDEgfSxcbiAgZW5kZ2FtZTogeyBhZHZhbmNlbWVudDogMS40NiwgY2FwdHVyZTogMSwgc2FmZXR5OiAxLjI4LCBwb3dlcjogMS4wNCwgY2VudGVyOiAwLjk0LCB1bmxvY2s6IDEuMDgsIHJlcGx5OiAxLjQ0LCByYW5kb21uZXNzOiAxMCwgc3ByZWFkOiAwLjA5LCBtb2JpbGl0eTogMC45OCwgdHJhcDogMS4wMiwgZW5kZ2FtZTogMS44NiB9LFxufTtcblxuY29uc3QgREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZOiBSZWNvcmQ8Q2hlc3NpbWFsc0JvdERpZmZpY3VsdHksIENoZXNzaW1hbHNCb3RQcm9maWxlSWQ+ID0ge1xuICBlYXN5OiAnZXhwbG9yZXInLFxuICBub3JtYWw6ICdodW50ZXInLFxuICBoYXJkOiAnc3RyYXRlZ2lzdCcsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNoZXNzaW1hbHNHYW1lT3B0aW9ucyB7XG4gIGlkPzogc3RyaW5nO1xuICBtb2RlPzogQ2hlc3NpbWFsc0dhbWVNb2RlO1xuICBzdGF0dXM/OiBDaGVzc2ltYWxzR2FtZVN0YXR1cztcbiAgb25saW5lPzogQ2hlc3NpbWFsc09ubGluZVN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hlc3NpbWFsc0dhbWUoXG4gIGJvYXJkU2l6ZTogQ2hlc3NpbWFsc0JvYXJkU2l6ZSA9IDYsXG4gIG9wdGlvbnM6IENyZWF0ZUNoZXNzaW1hbHNHYW1lT3B0aW9ucyA9IHt9LFxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IHBpZWNlczogQ2hlc3NpbWFsc1BpZWNlW10gPSBbXTtcbiAgY29uc3Qgd2hpdGVSb3cgPSBib2FyZFNpemUgLSAyO1xuICBjb25zdCBibGFja1JvdyA9IDE7XG5cbiAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgYm9hcmRTaXplOyBjb2wgKz0gMSkge1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIGlkOiBgVyR7Y29sICsgMX1gLFxuICAgICAgY29sb3I6ICd3aGl0ZScsXG4gICAgICBwb3NpdGlvbjogeyByb3c6IHdoaXRlUm93LCBjb2wgfSxcbiAgICAgIGNhcHR1cmVkOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwaWVjZXMucHVzaCh7XG4gICAgICBpZDogYEIke2NvbCArIDF9YCxcbiAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgICAgcG9zaXRpb246IHsgcm93OiBibGFja1JvdywgY29sIH0sXG4gICAgICBjYXB0dXJlZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IHJlZnJlc2hDaGVzc2ltYWxzUG93ZXJVbmxvY2tzKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBjcmVhdGVMb2NhbElkKCksXG4gICAgbW9kZTogb3B0aW9ucy5tb2RlID8/ICdsb2NhbCcsXG4gICAgYm9hcmRTaXplLFxuICAgIHN0YXR1czogb3B0aW9ucy5zdGF0dXMgPz8gJ2luX3Byb2dyZXNzJyxcbiAgICBjdXJyZW50VHVybjogJ3doaXRlJyxcbiAgICBwaWVjZXMsXG4gICAgcGxheWVyczoge1xuICAgICAgd2hpdGU6IHsgY29sb3I6ICd3aGl0ZScsIHBvd2VyVW5sb2NrZWQ6IGZhbHNlLCBjYXJkczogY3JlYXRlQ2FyZHMoKSB9LFxuICAgICAgYmxhY2s6IHsgY29sb3I6ICdibGFjaycsIHBvd2VyVW5sb2NrZWQ6IGZhbHNlLCBjYXJkczogY3JlYXRlQ2FyZHMoKSB9LFxuICAgIH0sXG4gICAgbW92ZUNvdW50OiAwLFxuICAgIG9ubGluZTogb3B0aW9ucy5vbmxpbmUsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtjcmVhdGVNb3ZlSGlzdG9yeUVudHJ5KHN0YXRlKV0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVzc2ltYWxzUGllY2VBdChcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24sXG4pOiBDaGVzc2ltYWxzUGllY2UgfCB1bmRlZmluZWQge1xuICByZXR1cm4gYWN0aXZlUGllY2VzKHN0YXRlKS5maW5kKFxuICAgIChwaWVjZSkgPT5cbiAgICAgICFwaWVjZS5jYXB0dXJlZCAmJiBwaWVjZS5wb3NpdGlvbi5yb3cgPT09IHBvc2l0aW9uLnJvdyAmJiBwaWVjZS5wb3NpdGlvbi5jb2wgPT09IHBvc2l0aW9uLmNvbCxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoZXNzaW1hbHNMZWdhbE1vdmVzKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgcGllY2VJZDogc3RyaW5nLFxuICBhbmltYWw/OiBDaGVzc2ltYWxzQW5pbWFsVHlwZSxcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBpZiAoc3RhdGUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4gW107XG5cbiAgY29uc3QgcGllY2UgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHBpZWNlSWQgJiYgIWl0ZW0uY2FwdHVyZWQpO1xuICBpZiAoIXBpZWNlIHx8IHBpZWNlLmNvbG9yICE9PSBzdGF0ZS5jdXJyZW50VHVybikgcmV0dXJuIFtdO1xuXG4gIGlmIChhbmltYWwpIHtcbiAgICBjb25zdCBwbGF5ZXIgPSBzdGF0ZS5wbGF5ZXJzW3BpZWNlLmNvbG9yXTtcbiAgICBpZiAoIXBsYXllci5wb3dlclVubG9ja2VkIHx8IHBsYXllci5jYXJkc1thbmltYWxdLnVzZWQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gZ2V0UG93ZXJNb3ZlcyhzdGF0ZSwgcGllY2UsIGFuaW1hbCk7XG4gIH1cblxuICByZXR1cm4gZ2V0QmFzaWNNb3ZlcyhzdGF0ZSwgcGllY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yID0gc3RhdGUuY3VycmVudFR1cm4sXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgaWYgKHN0YXRlLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJykgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IHR1cm5TdGF0ZSA9IGNvbG9yID09PSBzdGF0ZS5jdXJyZW50VHVybiA/IHN0YXRlIDogeyAuLi5zdGF0ZSwgY3VycmVudFR1cm46IGNvbG9yIH07XG4gIGNvbnN0IHBsYXllciA9IHR1cm5TdGF0ZS5wbGF5ZXJzW2NvbG9yXTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGFjdGl2ZVBpZWNlcyh0dXJuU3RhdGUpKSB7XG4gICAgaWYgKHBpZWNlLmNhcHR1cmVkIHx8IHBpZWNlLmNvbG9yICE9PSBjb2xvcikgY29udGludWU7XG5cbiAgICBtb3Zlcy5wdXNoKC4uLmdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHR1cm5TdGF0ZSwgcGllY2UuaWQpKTtcbiAgICBpZiAoIXBsYXllci5wb3dlclVubG9ja2VkKSBjb250aW51ZTtcblxuICAgIGZvciAoY29uc3QgYW5pbWFsIG9mIEFOSU1BTFMpIHtcbiAgICAgIGlmIChwbGF5ZXIuY2FyZHNbYW5pbWFsXS51c2VkKSBjb250aW51ZTtcbiAgICAgIG1vdmVzLnB1c2goLi4uZ2V0Q2hlc3NpbWFsc0xlZ2FsTW92ZXModHVyblN0YXRlLCBwaWVjZS5pZCwgYW5pbWFsKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hvb3NlQ2hlc3NpbWFsc0JvdE1vdmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBkaWZmaWN1bHR5OiBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSA9ICdub3JtYWwnLFxuICBwcm9maWxlSWQ6IENoZXNzaW1hbHNCb3RQcm9maWxlSWQgPSBERUZBVUxUX0JPVF9QUk9GSUxFX0JZX0RJRkZJQ1VMVFlbZGlmZmljdWx0eV0sXG4pOiBDaGVzc2ltYWxzTW92ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1vdmVzID0gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoc3RhdGUpO1xuICBpZiAobW92ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBzdHlsZSA9IEJPVF9TVFlMRVNbcHJvZmlsZUlkXSA/PyBCT1RfU1RZTEVTW0RFRkFVTFRfQk9UX1BST0ZJTEVfQllfRElGRklDVUxUWVtkaWZmaWN1bHR5XV07XG5cbiAgY29uc3QgcXVpY2tTY29yZWQgPSBtb3Zlc1xuICAgIC5tYXAoKG1vdmUpID0+ICh7IG1vdmUsIHNjb3JlOiBzY29yZUJvdE1vdmUoc3RhdGUsIG1vdmUsIGRpZmZpY3VsdHksIHN0eWxlKSB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICBjb25zdCBsb29rYWhlYWRMaW1pdCA9IGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDMyIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAyNCA6IDA7XG4gIGNvbnN0IHNjb3JlZCA9IHF1aWNrU2NvcmVkXG4gICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICBtb3ZlOiBpdGVtLm1vdmUsXG4gICAgICBzY29yZTpcbiAgICAgICAgaW5kZXggPCBsb29rYWhlYWRMaW1pdFxuICAgICAgICAgID8gc2NvcmVCb3RNb3ZlV2l0aExvb2thaGVhZChzdGF0ZSwgaXRlbS5tb3ZlLCBkaWZmaWN1bHR5LCBzdHlsZSlcbiAgICAgICAgICA6IGl0ZW0uc2NvcmUsXG4gICAgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcblxuICBpZiAoZGlmZmljdWx0eSA9PT0gJ2Vhc3knKSB7XG4gICAgY29uc3QgcGxheWFibGUgPSBzY29yZWQuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNjb3JlID4gLTMwMDApO1xuICAgIHJldHVybiBwaWNrTm9pc3lCb3RNb3ZlKHBsYXlhYmxlLmxlbmd0aCA/IHBsYXlhYmxlIDogc2NvcmVkLCAwLjU1KTtcbiAgfVxuXG4gIGlmIChkaWZmaWN1bHR5ID09PSAnbm9ybWFsJykge1xuICAgIHJldHVybiBzY29yZWRbMF0/Lm1vdmU7XG4gIH1cblxuICBjb25zdCB3aW5uaW5nTW92ZSA9IHNjb3JlZC5maW5kKChpdGVtKSA9PiBpdGVtLnNjb3JlID49IDEwMDAwKTtcbiAgaWYgKHdpbm5pbmdNb3ZlKSByZXR1cm4gd2lubmluZ01vdmUubW92ZTtcblxuICBjb25zdCBvcHBvbmVudFdpbm5pbmdUYXJnZXRzID0gbmV3IFNldChcbiAgICBnZXRJbW1lZGlhdGVXaW5uaW5nTW92ZXMoc3RhdGUsIG90aGVyQ29sb3Ioc3RhdGUuY3VycmVudFR1cm4pKS5tYXAoKG1vdmUpID0+IHBvc2l0aW9uS2V5KG1vdmUudG8pKSxcbiAgKTtcbiAgaWYgKG9wcG9uZW50V2lubmluZ1RhcmdldHMuc2l6ZSA+IDApIHtcbiAgICBjb25zdCBibG9ja2luZ01vdmUgPSBzY29yZWQuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLm1vdmUuY2FwdHVyZXNQaWVjZUlkIHx8IG9wcG9uZW50V2lubmluZ1RhcmdldHMuaGFzKHBvc2l0aW9uS2V5KGl0ZW0ubW92ZS50bykpLFxuICAgICk7XG4gICAgaWYgKGJsb2NraW5nTW92ZSkgcmV0dXJuIGJsb2NraW5nTW92ZS5tb3ZlO1xuICB9XG5cbiAgcmV0dXJuIHNjb3JlZFswXT8ubW92ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q2hlc3NpbWFsc01vdmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjYW5kaWRhdGU6IENoZXNzaW1hbHNNb3ZlLFxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IGxlZ2FsTW92ZSA9IGdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHN0YXRlLCBjYW5kaWRhdGUucGllY2VJZCwgY2FuZGlkYXRlLmFuaW1hbCkuZmluZCgobW92ZSkgPT5cbiAgICBzYW1lUG9zaXRpb24obW92ZS5mcm9tLCBjYW5kaWRhdGUuZnJvbSkgJiYgc2FtZVBvc2l0aW9uKG1vdmUudG8sIGNhbmRpZGF0ZS50byksXG4gICk7XG5cbiAgaWYgKCFsZWdhbE1vdmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfSUxMRUdBTF9NT1ZFJyk7XG4gIH1cblxuICBjb25zdCBtb3ZlZFBpZWNlID0gYWN0aXZlUGllY2VzKHN0YXRlKS5maW5kKChwaWVjZSkgPT4gcGllY2UuaWQgPT09IGxlZ2FsTW92ZS5waWVjZUlkKTtcbiAgaWYgKCFtb3ZlZFBpZWNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX1BJRUNFX05PVF9GT1VORCcpO1xuICB9XG5cbiAgY29uc3QgcGllY2VzID0gYWN0aXZlUGllY2VzKHN0YXRlKS5tYXAoKHBpZWNlKSA9PiB7XG4gICAgaWYgKHBpZWNlLmlkID09PSBsZWdhbE1vdmUucGllY2VJZCkge1xuICAgICAgcmV0dXJuIHsgLi4ucGllY2UsIHBvc2l0aW9uOiB7IC4uLmxlZ2FsTW92ZS50byB9IH07XG4gICAgfVxuICAgIGlmIChwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLmNhcHR1cmVzUGllY2VJZCkge1xuICAgICAgcmV0dXJuIHsgLi4ucGllY2UsIGNhcHR1cmVkOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBwaWVjZTtcbiAgfSk7XG5cbiAgY29uc3QgcGxheWVycyA9IHtcbiAgICAuLi5zdGF0ZS5wbGF5ZXJzLFxuICAgIFttb3ZlZFBpZWNlLmNvbG9yXToge1xuICAgICAgLi4uc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXSxcbiAgICAgIGNhcmRzOlxuICAgICAgICBsZWdhbE1vdmUua2luZCA9PT0gJ3Bvd2VyJyAmJiBsZWdhbE1vdmUuYW5pbWFsXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnBsYXllcnNbbW92ZWRQaWVjZS5jb2xvcl0uY2FyZHMsXG4gICAgICAgICAgICAgIFtsZWdhbE1vdmUuYW5pbWFsXToge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnBsYXllcnNbbW92ZWRQaWVjZS5jb2xvcl0uY2FyZHNbbGVnYWxNb3ZlLmFuaW1hbF0sXG4gICAgICAgICAgICAgICAgdXNlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHN0YXRlLnBsYXllcnNbbW92ZWRQaWVjZS5jb2xvcl0uY2FyZHMsXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSByZWZyZXNoQ2hlc3NpbWFsc1Bvd2VyVW5sb2Nrcyh7XG4gICAgLi4uc3RhdGUsXG4gICAgcGllY2VzLFxuICAgIHBsYXllcnMsXG4gICAgY3VycmVudFR1cm46IG90aGVyQ29sb3IobW92ZWRQaWVjZS5jb2xvciksXG4gICAgbW92ZUNvdW50OiBzdGF0ZS5tb3ZlQ291bnQgKyAxLFxuICAgIGxhc3RNb3ZlOiBsZWdhbE1vdmUsXG4gIH0pO1xuXG4gIGNvbnN0IHByb21vdGVkID0gaXNQcm9tb3Rpb25Sb3cobmV4dFN0YXRlLmJvYXJkU2l6ZSwgbW92ZWRQaWVjZS5jb2xvciwgbGVnYWxNb3ZlLnRvKTtcbiAgY29uc3QgZW5lbXlQaWVjZXMgPSBhY3RpdmVQaWVjZXMobmV4dFN0YXRlKS5maWx0ZXIoXG4gICAgKHBpZWNlKSA9PiBwaWVjZS5jb2xvciAhPT0gbW92ZWRQaWVjZS5jb2xvciAmJiAhcGllY2UuY2FwdHVyZWQsXG4gICk7XG5cbiAgY29uc3QgcmVzb2x2ZWRTdGF0ZSA9XG4gICAgcHJvbW90ZWQgfHwgZW5lbXlQaWVjZXMubGVuZ3RoID09PSAwXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICAgICAgc3RhdHVzOiAnZmluaXNoZWQnIGFzIGNvbnN0LFxuICAgICAgICAgIHdpbm5lcjogbW92ZWRQaWVjZS5jb2xvcixcbiAgICAgICAgICB3aW5uZXJSZWFzb246IHByb21vdGVkID8gKCdwcm9tb3Rpb24nIGFzIGNvbnN0KSA6ICgnZWxpbWluYXRpb24nIGFzIGNvbnN0KSxcbiAgICAgICAgfVxuICAgICAgOiBuZXh0U3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNvbHZlZFN0YXRlLFxuICAgIG1vdmVIaXN0b3J5OiBbXG4gICAgICAuLi5lbnN1cmVNb3ZlSGlzdG9yeShzdGF0ZSksXG4gICAgICBjcmVhdGVNb3ZlSGlzdG9yeUVudHJ5KHJlc29sdmVkU3RhdGUsIGxlZ2FsTW92ZSksXG4gICAgXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoZXNzaW1hbHNSZXZpZXdTdGF0ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGVudHJ5OiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeSxcbik6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBjb25zdCBiYXNlU3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gIGRlbGV0ZSBiYXNlU3RhdGUubGFzdE1vdmU7XG4gIGRlbGV0ZSBiYXNlU3RhdGUud2lubmVyO1xuICBkZWxldGUgYmFzZVN0YXRlLndpbm5lclJlYXNvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlU3RhdGUsXG4gICAgc3RhdHVzOiBlbnRyeS5zdGF0dXMsXG4gICAgY3VycmVudFR1cm46IGVudHJ5LmN1cnJlbnRUdXJuLFxuICAgIHBpZWNlczogY2xvbmVQaWVjZXMoZW50cnkucGllY2VzKSxcbiAgICBtb3ZlQ291bnQ6IGVudHJ5Lm1vdmVOdW1iZXIsXG4gICAgLi4uKGVudHJ5Lndpbm5lciA/IHsgd2lubmVyOiBlbnRyeS53aW5uZXIgfSA6IHt9KSxcbiAgICAuLi4oZW50cnkud2lubmVyUmVhc29uID8geyB3aW5uZXJSZWFzb246IGVudHJ5Lndpbm5lclJlYXNvbiB9IDoge30pLFxuICAgIC4uLihlbnRyeS5tb3ZlID8geyBsYXN0TW92ZTogc2FuaXRpemVNb3ZlKGVudHJ5Lm1vdmUpIH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vdmVIaXN0b3J5RW50cnkoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlPzogQ2hlc3NpbWFsc01vdmUsXG4pOiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeSB7XG4gIHJldHVybiB7XG4gICAgbW92ZU51bWJlcjogc3RhdGUubW92ZUNvdW50LFxuICAgIHBpZWNlczogY2xvbmVQaWVjZXMoc3RhdGUucGllY2VzKSxcbiAgICBjdXJyZW50VHVybjogc3RhdGUuY3VycmVudFR1cm4sXG4gICAgc3RhdHVzOiBzdGF0ZS5zdGF0dXMsXG4gICAgLi4uKG1vdmUgPyB7IG1vdmU6IHNhbml0aXplTW92ZShtb3ZlKSB9IDoge30pLFxuICAgIC4uLihzdGF0ZS53aW5uZXIgPyB7IHdpbm5lcjogc3RhdGUud2lubmVyIH0gOiB7fSksXG4gICAgLi4uKHN0YXRlLndpbm5lclJlYXNvbiA/IHsgd2lubmVyUmVhc29uOiBzdGF0ZS53aW5uZXJSZWFzb24gfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlTW92ZUhpc3Rvcnkoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeVtdIHtcbiAgaWYgKHN0YXRlLm1vdmVIaXN0b3J5Py5sZW5ndGgpIHJldHVybiBzdGF0ZS5tb3ZlSGlzdG9yeS5tYXAoY2xvbmVNb3ZlSGlzdG9yeUVudHJ5KTtcbiAgcmV0dXJuIFtjcmVhdGVNb3ZlSGlzdG9yeUVudHJ5KHN0YXRlKV07XG59XG5cbmZ1bmN0aW9uIGNsb25lTW92ZUhpc3RvcnlFbnRyeShlbnRyeTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnkpOiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeSB7XG4gIHJldHVybiB7XG4gICAgLi4uZW50cnksXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhlbnRyeS5waWVjZXMpLFxuICAgIC4uLihlbnRyeS5tb3ZlID8geyBtb3ZlOiBzYW5pdGl6ZU1vdmUoZW50cnkubW92ZSkgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xvbmVQaWVjZXMocGllY2VzOiBDaGVzc2ltYWxzUGllY2VbXSk6IENoZXNzaW1hbHNQaWVjZVtdIHtcbiAgcmV0dXJuIHBpZWNlcy5tYXAoKHBpZWNlKSA9PiAoe1xuICAgIC4uLnBpZWNlLFxuICAgIHBvc2l0aW9uOiB7IC4uLnBpZWNlLnBvc2l0aW9uIH0sXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVNb3ZlKG1vdmU6IENoZXNzaW1hbHNNb3ZlKTogQ2hlc3NpbWFsc01vdmUge1xuICByZXR1cm4ge1xuICAgIHBpZWNlSWQ6IG1vdmUucGllY2VJZCxcbiAgICBmcm9tOiB7IC4uLm1vdmUuZnJvbSB9LFxuICAgIHRvOiB7IC4uLm1vdmUudG8gfSxcbiAgICBraW5kOiBtb3ZlLmtpbmQsXG4gICAgLi4uKG1vdmUuYW5pbWFsID8geyBhbmltYWw6IG1vdmUuYW5pbWFsIH0gOiB7fSksXG4gICAgLi4uKG1vdmUuY2FwdHVyZXNQaWVjZUlkID8geyBjYXB0dXJlc1BpZWNlSWQ6IG1vdmUuY2FwdHVyZXNQaWVjZUlkIH0gOiB7fSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNpZ25DaGVzc2ltYWxzR2FtZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgY29uc3QgcmVzaWduZWRTdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzdGF0dXM6ICdmaW5pc2hlZCcsXG4gICAgd2lubmVyOiBvdGhlckNvbG9yKGNvbG9yKSxcbiAgICB3aW5uZXJSZWFzb246ICdyZXNpZ25hdGlvbicsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNpZ25lZFN0YXRlLFxuICAgIG1vdmVIaXN0b3J5OiBbXG4gICAgICAuLi5lbnN1cmVNb3ZlSGlzdG9yeShzdGF0ZSksXG4gICAgICBjcmVhdGVNb3ZlSGlzdG9yeUVudHJ5KHJlc2lnbmVkU3RhdGUpLFxuICAgIF0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbktleShwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3Bvc2l0aW9uLnJvd306JHtwb3NpdGlvbi5jb2x9YDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FyZHMoKSB7XG4gIHJldHVybiBBTklNQUxTLnJlZHVjZShcbiAgICAoY2FyZHMsIHR5cGUpID0+ICh7XG4gICAgICAuLi5jYXJkcyxcbiAgICAgIFt0eXBlXTogeyB0eXBlLCB1c2VkOiBmYWxzZSB9LFxuICAgIH0pLFxuICAgIHt9IGFzIFJlY29yZDxDaGVzc2ltYWxzQW5pbWFsVHlwZSwgeyB0eXBlOiBDaGVzc2ltYWxzQW5pbWFsVHlwZTsgdXNlZDogYm9vbGVhbiB9PixcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWN0aXZlUGllY2VzKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogQ2hlc3NpbWFsc1BpZWNlW10ge1xuICByZXR1cm4gc3RhdGUucGllY2VzLmZpbHRlcigocGllY2UpOiBwaWVjZSBpcyBDaGVzc2ltYWxzUGllY2UgPT4gISFwaWVjZSk7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2ljTW92ZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHBpZWNlOiBDaGVzc2ltYWxzUGllY2UpOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgY29uc3QgZGlyZWN0aW9uID0gcGllY2UuY29sb3IgPT09ICd3aGl0ZScgPyAtMSA6IDE7XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG4gIGNvbnN0IGZvcndhcmQgPSB7IHJvdzogcGllY2UucG9zaXRpb24ucm93ICsgZGlyZWN0aW9uLCBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCB9O1xuXG4gIGlmIChpc0luc2lkZUJvYXJkKHN0YXRlLmJvYXJkU2l6ZSwgZm9yd2FyZCkgJiYgIWdldENoZXNzaW1hbHNQaWVjZUF0KHN0YXRlLCBmb3J3YXJkKSkge1xuICAgIG1vdmVzLnB1c2goe1xuICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICBmcm9tOiB7IC4uLnBpZWNlLnBvc2l0aW9uIH0sXG4gICAgICB0bzogZm9yd2FyZCxcbiAgICAgIGtpbmQ6ICdiYXNpYycsXG4gICAgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNvbE9mZnNldCBvZiBbLTEsIDFdKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0geyByb3c6IHBpZWNlLnBvc2l0aW9uLnJvdyArIGRpcmVjdGlvbiwgY29sOiBwaWVjZS5wb3NpdGlvbi5jb2wgKyBjb2xPZmZzZXQgfTtcbiAgICBjb25zdCB0YXJnZXRQaWVjZSA9IGdldENoZXNzaW1hbHNQaWVjZUF0KHN0YXRlLCB0YXJnZXQpO1xuICAgIGlmIChcbiAgICAgIGlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCB0YXJnZXQpICYmXG4gICAgICB0YXJnZXRQaWVjZSAmJlxuICAgICAgdGFyZ2V0UGllY2UuY29sb3IgIT09IHBpZWNlLmNvbG9yICYmXG4gICAgICAhaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBwaWVjZS5jb2xvciwgdGFyZ2V0KVxuICAgICkge1xuICAgICAgbW92ZXMucHVzaCh7XG4gICAgICAgIHBpZWNlSWQ6IHBpZWNlLmlkLFxuICAgICAgICBmcm9tOiB7IC4uLnBpZWNlLnBvc2l0aW9uIH0sXG4gICAgICAgIHRvOiB0YXJnZXQsXG4gICAgICAgIGtpbmQ6ICdiYXNpYycsXG4gICAgICAgIGNhcHR1cmVzUGllY2VJZDogdGFyZ2V0UGllY2UuaWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbmZ1bmN0aW9uIGdldFBvd2VyTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBwaWVjZTogQ2hlc3NpbWFsc1BpZWNlLFxuICBhbmltYWw6IENoZXNzaW1hbHNBbmltYWxUeXBlLFxuKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGlmIChhbmltYWwgPT09ICdrYW5nYXJvbycpIHtcbiAgICByZXR1cm4gZ2V0S2FuZ2Fyb29Nb3ZlcyhzdGF0ZSwgcGllY2UpO1xuICB9XG5cbiAgY29uc3QgZGlyZWN0aW9ucyA9IGdldFBvd2VyRGlyZWN0aW9ucyhhbmltYWwpO1xuICBjb25zdCBtb3ZlczogQ2hlc3NpbWFsc01vdmVbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZGlyZWN0aW9uIG9mIGRpcmVjdGlvbnMpIHtcbiAgICBmb3IgKGxldCBkaXN0YW5jZSA9IDE7IGRpc3RhbmNlIDwgc3RhdGUuYm9hcmRTaXplOyBkaXN0YW5jZSArPSAxKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB7XG4gICAgICAgIHJvdzogcGllY2UucG9zaXRpb24ucm93ICsgZGlyZWN0aW9uLnJvdyAqIGRpc3RhbmNlLFxuICAgICAgICBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGRpcmVjdGlvbi5jb2wgKiBkaXN0YW5jZSxcbiAgICAgIH07XG4gICAgICBpZiAoIWlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCB0YXJnZXQpKSBicmVhaztcbiAgICAgIGlmIChpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpKSBicmVhaztcblxuICAgICAgY29uc3QgdGFyZ2V0UGllY2UgPSBnZXRDaGVzc2ltYWxzUGllY2VBdChzdGF0ZSwgdGFyZ2V0KTtcbiAgICAgIGlmICh0YXJnZXRQaWVjZT8uY29sb3IgPT09IHBpZWNlLmNvbG9yKSBicmVhaztcblxuICAgICAgbW92ZXMucHVzaCh7XG4gICAgICAgIHBpZWNlSWQ6IHBpZWNlLmlkLFxuICAgICAgICBmcm9tOiB7IC4uLnBpZWNlLnBvc2l0aW9uIH0sXG4gICAgICAgIHRvOiB0YXJnZXQsXG4gICAgICAgIGtpbmQ6ICdwb3dlcicsXG4gICAgICAgIGFuaW1hbCxcbiAgICAgICAgLi4uKHRhcmdldFBpZWNlID8geyBjYXB0dXJlc1BpZWNlSWQ6IHRhcmdldFBpZWNlLmlkIH0gOiB7fSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRhcmdldFBpZWNlKSBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbmZ1bmN0aW9uIGdldEthbmdhcm9vTW92ZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHBpZWNlOiBDaGVzc2ltYWxzUGllY2UpOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcbiAgY29uc3QganVtcHMgPSBbXG4gICAgeyByb3c6IC0yLCBjb2w6IC0xIH0sXG4gICAgeyByb3c6IC0yLCBjb2w6IDEgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogLTIgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogMiB9LFxuICAgIHsgcm93OiAxLCBjb2w6IC0yIH0sXG4gICAgeyByb3c6IDEsIGNvbDogMiB9LFxuICAgIHsgcm93OiAyLCBjb2w6IC0xIH0sXG4gICAgeyByb3c6IDIsIGNvbDogMSB9LFxuICBdO1xuXG4gIGZvciAoY29uc3QganVtcCBvZiBqdW1wcykge1xuICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgIHJvdzogcGllY2UucG9zaXRpb24ucm93ICsganVtcC5yb3csXG4gICAgICBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGp1bXAuY29sLFxuICAgIH07XG4gICAgaWYgKCFpc0luc2lkZUJvYXJkKHN0YXRlLmJvYXJkU2l6ZSwgdGFyZ2V0KSkgY29udGludWU7XG4gICAgaWYgKGlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgcGllY2UuY29sb3IsIHRhcmdldCkpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgdGFyZ2V0UGllY2UgPSBnZXRDaGVzc2ltYWxzUGllY2VBdChzdGF0ZSwgdGFyZ2V0KTtcbiAgICBpZiAodGFyZ2V0UGllY2U/LmNvbG9yID09PSBwaWVjZS5jb2xvcikgY29udGludWU7XG5cbiAgICBtb3Zlcy5wdXNoKHtcbiAgICAgIHBpZWNlSWQ6IHBpZWNlLmlkLFxuICAgICAgZnJvbTogeyAuLi5waWVjZS5wb3NpdGlvbiB9LFxuICAgICAgdG86IHRhcmdldCxcbiAgICAgIGtpbmQ6ICdwb3dlcicsXG4gICAgICBhbmltYWw6ICdrYW5nYXJvbycsXG4gICAgICAuLi4odGFyZ2V0UGllY2UgPyB7IGNhcHR1cmVzUGllY2VJZDogdGFyZ2V0UGllY2UuaWQgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gc2NvcmVCb3RNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBzdHlsZTogQ2hlc3NpbWFsc0JvdFN0eWxlLFxuICBpbmNsdWRlVGFjdGljYWxQcmVzc3VyZSA9IHRydWUsXG4pOiBudW1iZXIge1xuICBjb25zdCBjb2xvciA9IHN0YXRlLmN1cnJlbnRUdXJuO1xuICBjb25zdCB0YXJnZXRQaWVjZSA9IG1vdmUuY2FwdHVyZXNQaWVjZUlkXG4gICAgPyBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoKHBpZWNlKSA9PiBwaWVjZS5pZCA9PT0gbW92ZS5jYXB0dXJlc1BpZWNlSWQpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFkdmFuY2VtZW50ID1cbiAgICBjb2xvciA9PT0gJ3doaXRlJyA/IHN0YXRlLmJvYXJkU2l6ZSAtIDEgLSBtb3ZlLnRvLnJvdyA6IG1vdmUudG8ucm93O1xuICBsZXQgc2NvcmUgPSBhZHZhbmNlbWVudCAqIDI0ICogc3R5bGUuYWR2YW5jZW1lbnQ7XG5cbiAgaWYgKG1vdmUua2luZCA9PT0gJ2Jhc2ljJyAmJiBpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIGNvbG9yLCBtb3ZlLnRvKSkge1xuICAgIHNjb3JlICs9IDEwMDAwO1xuICB9XG4gIGlmICh0YXJnZXRQaWVjZSkge1xuICAgIHNjb3JlICs9IDUyMCAqIHN0eWxlLmNhcHR1cmU7XG4gICAgY29uc3QgdGFyZ2V0QWR2YW5jZW1lbnQgPVxuICAgICAgdGFyZ2V0UGllY2UuY29sb3IgPT09ICd3aGl0ZSdcbiAgICAgICAgPyBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gdGFyZ2V0UGllY2UucG9zaXRpb24ucm93XG4gICAgICAgIDogdGFyZ2V0UGllY2UucG9zaXRpb24ucm93O1xuICAgIHNjb3JlICs9IHRhcmdldEFkdmFuY2VtZW50ICogMTYgKiBzdHlsZS5jYXB0dXJlO1xuICB9XG4gIGlmIChtb3ZlLmtpbmQgPT09ICdwb3dlcicpIHtcbiAgICBzY29yZSArPSAodGFyZ2V0UGllY2UgPyAxMjAgOiBkaWZmaWN1bHR5ID09PSAnaGFyZCcgPyAtNjAgOiAtMzApICogc3R5bGUucG93ZXI7XG4gIH1cbiAgaWYgKG1vdmUuYW5pbWFsID09PSAnbGlvbicpIHNjb3JlIC09IDIwICogc3R5bGUucG93ZXI7XG4gIGlmIChtb3ZlLmFuaW1hbCA9PT0gJ2thbmdhcm9vJykgc2NvcmUgKz0gMTQgKiBzdHlsZS5wb3dlcjtcbiAgaWYgKHdvdWxkVW5sb2NrUG93ZXIoc3RhdGUsIGNvbG9yLCBtb3ZlLnRvKSkgc2NvcmUgKz0gOTAgKiBzdHlsZS51bmxvY2s7XG4gIGlmIChpbmNsdWRlVGFjdGljYWxQcmVzc3VyZSAmJiBzdGF0ZS5ib2FyZFNpemUgPD0gNikge1xuICAgIHNjb3JlICs9IGNvdW50UG93ZXJSZWFjaEFmdGVyTW92ZShzdGF0ZSwgbW92ZSwgY29sb3IpICogKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDggOiA0KSAqIHN0eWxlLm1vYmlsaXR5O1xuICAgIHNjb3JlICs9IGNvdW50UHJvdGVjdGVkVGhyZWF0c0FmdGVyTW92ZShzdGF0ZSwgbW92ZSwgY29sb3IpICogKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDM2IDogMTgpICogc3R5bGUudHJhcDtcbiAgICBzY29yZSArPSBzY29yZUVuZGdhbWVQcmVzc3VyZShzdGF0ZSwgbW92ZSwgY29sb3IpICogc3R5bGUuZW5kZ2FtZTtcbiAgfSBlbHNlIHtcbiAgICBzY29yZSArPSBzY29yZUVuZGdhbWVQcmVzc3VyZShzdGF0ZSwgbW92ZSwgY29sb3IpICogc3R5bGUuZW5kZ2FtZTtcbiAgfVxuICBpZiAoZGlmZmljdWx0eSA9PT0gJ2hhcmQnICYmIGlzU3F1YXJlVnVsbmVyYWJsZUFmdGVyTW92ZShzdGF0ZSwgbW92ZSkpIHtcbiAgICBzY29yZSAtPSAodGFyZ2V0UGllY2UgPyA4MCA6IDE0MCkgKiBzdHlsZS5zYWZldHk7XG4gIH1cbiAgc2NvcmUgKz0gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogc3R5bGUucmFuZG9tbmVzcztcblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIHNjb3JlQm90TW92ZVdpdGhMb29rYWhlYWQoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHksXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGUsXG4pOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSBzY29yZUJvdE1vdmUoc3RhdGUsIG1vdmUsIGRpZmZpY3VsdHksIHN0eWxlKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGlmIChhZnRlck1vdmUuc3RhdHVzID09PSAnZmluaXNoZWQnKSByZXR1cm4gc2NvcmUgKyA1MDAwO1xuXG4gICAgY29uc3Qgb3Bwb25lbnRNb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGFmdGVyTW92ZSk7XG4gICAgY29uc3Qgb3Bwb25lbnRJbW1lZGlhdGVXaW4gPSBvcHBvbmVudE1vdmVzLnNvbWUoXG4gICAgICAob3Bwb25lbnRNb3ZlKSA9PlxuICAgICAgICBvcHBvbmVudE1vdmUua2luZCA9PT0gJ2Jhc2ljJyAmJlxuICAgICAgICBpc1Byb21vdGlvblJvdyhhZnRlck1vdmUuYm9hcmRTaXplLCBhZnRlck1vdmUuY3VycmVudFR1cm4sIG9wcG9uZW50TW92ZS50byksXG4gICAgKTtcbiAgICBpZiAob3Bwb25lbnRJbW1lZGlhdGVXaW4pIHtcbiAgICAgIHNjb3JlIC09IChkaWZmaWN1bHR5ID09PSAnZWFzeScgPyAxODAwIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyA1MjAwIDogODAwMCkgKiBzdHlsZS5zYWZldHk7XG4gICAgfVxuXG4gICAgY29uc3QgbW92ZWRQaWVjZSA9IGFmdGVyTW92ZS5waWVjZXMuZmluZCgocGllY2UpID0+IHBpZWNlLmlkID09PSBtb3ZlLnBpZWNlSWQgJiYgIXBpZWNlLmNhcHR1cmVkKTtcbiAgICBpZiAobW92ZWRQaWVjZSkge1xuICAgICAgY29uc3QgY2FuQ2FwdHVyZU1vdmVkUGllY2UgPSBvcHBvbmVudE1vdmVzLnNvbWUoKG9wcG9uZW50TW92ZSkgPT4gb3Bwb25lbnRNb3ZlLmNhcHR1cmVzUGllY2VJZCA9PT0gbW92ZS5waWVjZUlkKTtcbiAgICAgIGlmIChjYW5DYXB0dXJlTW92ZWRQaWVjZSkge1xuICAgICAgICBzY29yZSAtPSAobW92ZS5jYXB0dXJlc1BpZWNlSWQgPyAxODAgOiBkaWZmaWN1bHR5ID09PSAnZWFzeScgPyAxMjAgOiBkaWZmaWN1bHR5ID09PSAnbm9ybWFsJyA/IDM2MCA6IDU2MClcbiAgICAgICAgICAqIHN0eWxlLnNhZmV0eTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VudGVyID0gKGFmdGVyTW92ZS5ib2FyZFNpemUgLSAxKSAvIDI7XG4gICAgICBjb25zdCBjZW50ZXJDb250cm9sID0gTWF0aC5tYXgoMCwgYWZ0ZXJNb3ZlLmJvYXJkU2l6ZSAvIDIgLSBNYXRoLmFicyhtb3ZlZFBpZWNlLnBvc2l0aW9uLmNvbCAtIGNlbnRlcikpO1xuICAgICAgc2NvcmUgKz0gY2VudGVyQ29udHJvbCAqIChkaWZmaWN1bHR5ID09PSAnaGFyZCcgPyAxOCA6IDEwKSAqIHN0eWxlLmNlbnRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHBvbmVudEJlc3RSZXBseSA9IG9wcG9uZW50TW92ZXNcbiAgICAgIC5tYXAoKG9wcG9uZW50TW92ZSkgPT4gc2NvcmVCb3RNb3ZlKGFmdGVyTW92ZSwgb3Bwb25lbnRNb3ZlLCBkaWZmaWN1bHR5LCBzdHlsZSwgZmFsc2UpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKVswXTtcblxuICAgIGlmIChvcHBvbmVudEJlc3RSZXBseSkge1xuICAgICAgY29uc3QgcmVwbHlXZWlnaHQgPSBkaWZmaWN1bHR5ID09PSAnZWFzeScgPyAwLjEyIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAwLjMyIDogMC40ODtcbiAgICAgIHNjb3JlIC09IG9wcG9uZW50QmVzdFJlcGx5ICogcmVwbHlXZWlnaHQgKiBzdHlsZS5yZXBseTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHNjb3JlIC09IDEwMDA7XG4gIH1cblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIGNvdW50UG93ZXJSZWFjaEFmdGVyTW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuKTogbnVtYmVyIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhZnRlck1vdmUgPSBhcHBseUNoZXNzaW1hbHNNb3ZlKHN0YXRlLCBtb3ZlKTtcbiAgICBjb25zdCBldmFsdWF0aW9uU3RhdGUgPSB7IC4uLmFmdGVyTW92ZSwgY3VycmVudFR1cm46IGNvbG9yIH07XG4gICAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGV2YWx1YXRpb25TdGF0ZSwgY29sb3IpLmZpbHRlcigobmV4dE1vdmUpID0+IG5leHRNb3ZlLmtpbmQgPT09ICdwb3dlcicpLmxlbmd0aDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gY291bnRQcm90ZWN0ZWRUaHJlYXRzQWZ0ZXJNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBudW1iZXIge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGNvbnN0IGV2YWx1YXRpb25TdGF0ZSA9IHsgLi4uYWZ0ZXJNb3ZlLCBjdXJyZW50VHVybjogY29sb3IgfTtcbiAgICBjb25zdCBvdXJNb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGV2YWx1YXRpb25TdGF0ZSwgY29sb3IpO1xuICAgIGNvbnN0IGVuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKGFmdGVyTW92ZSkuZmlsdGVyKChwaWVjZSkgPT4gcGllY2UuY29sb3IgIT09IGNvbG9yICYmICFwaWVjZS5jYXB0dXJlZCk7XG4gICAgcmV0dXJuIGVuZW15UGllY2VzLmZpbHRlcigocGllY2UpID0+XG4gICAgICBvdXJNb3Zlcy5zb21lKChuZXh0TW92ZSkgPT4gbmV4dE1vdmUuY2FwdHVyZXNQaWVjZUlkID09PSBwaWVjZS5pZCksXG4gICAgKS5sZW5ndGg7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjb3JlRW5kZ2FtZVByZXNzdXJlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBudW1iZXIge1xuICBjb25zdCByZW1haW5pbmdFbmVteVBpZWNlcyA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmlsdGVyKChwaWVjZSkgPT4gcGllY2UuY29sb3IgIT09IGNvbG9yICYmICFwaWVjZS5jYXB0dXJlZCkubGVuZ3RoO1xuICBjb25zdCB1cmdlbmN5ID0gcmVtYWluaW5nRW5lbXlQaWVjZXMgPD0gTWF0aC5tYXgoMiwgTWF0aC5mbG9vcihzdGF0ZS5ib2FyZFNpemUgLyAyKSkgPyAxLjYgOiAxO1xuICBjb25zdCBkaXN0YW5jZVRvUHJvbW90aW9uID1cbiAgICBjb2xvciA9PT0gJ3doaXRlJyA/IG1vdmUudG8ucm93IDogc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93O1xuICByZXR1cm4gTWF0aC5tYXgoMCwgc3RhdGUuYm9hcmRTaXplIC0gZGlzdGFuY2VUb1Byb21vdGlvbikgKiAxNCAqIHVyZ2VuY3k7XG59XG5cbmZ1bmN0aW9uIHBpY2tOb2lzeUJvdE1vdmUoXG4gIHNjb3JlZDogQXJyYXk8eyBtb3ZlOiBDaGVzc2ltYWxzTW92ZTsgc2NvcmU6IG51bWJlciB9PixcbiAgc3ByZWFkOiBudW1iZXIsXG4pOiBDaGVzc2ltYWxzTW92ZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChzY29yZWQubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBwb29sU2l6ZSA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChzY29yZWQubGVuZ3RoICogc3ByZWFkKSk7XG4gIGNvbnN0IHBvb2wgPSBzY29yZWQuc2xpY2UoMCwgcG9vbFNpemUpO1xuICBjb25zdCB0b3BTY29yZSA9IHBvb2xbMF0/LnNjb3JlID8/IDA7XG4gIGNvbnN0IHdlaWdodGVkID0gcG9vbC5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcmVsYXRpdmUgPSBNYXRoLm1heCgwLCBpdGVtLnNjb3JlIC0gdG9wU2NvcmUgKyAxMjAwKTtcbiAgICBjb25zdCB3ZWlnaHQgPSBNYXRoLm1heCgxLCByZWxhdGl2ZSAvIDEyMCArIChwb29sLmxlbmd0aCAtIGluZGV4KSAqIDIpO1xuICAgIHJldHVybiB7IC4uLml0ZW0sIHdlaWdodCB9O1xuICB9KTtcbiAgY29uc3QgdG90YWxXZWlnaHQgPSB3ZWlnaHRlZC5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB0b3RhbCArIGl0ZW0ud2VpZ2h0LCAwKTtcbiAgbGV0IGN1cnNvciA9IE1hdGgucmFuZG9tKCkgKiB0b3RhbFdlaWdodDtcbiAgZm9yIChjb25zdCBpdGVtIG9mIHdlaWdodGVkKSB7XG4gICAgY3Vyc29yIC09IGl0ZW0ud2VpZ2h0O1xuICAgIGlmIChjdXJzb3IgPD0gMCkgcmV0dXJuIGl0ZW0ubW92ZTtcbiAgfVxuICByZXR1cm4gcG9vbFswXT8ubW92ZTtcbn1cblxuZnVuY3Rpb24gZ2V0SW1tZWRpYXRlV2lubmluZ01vdmVzKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICByZXR1cm4gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoc3RhdGUsIGNvbG9yKS5maWx0ZXIoXG4gICAgKG1vdmUpID0+IG1vdmUua2luZCA9PT0gJ2Jhc2ljJyAmJiBpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIGNvbG9yLCBtb3ZlLnRvKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gd291bGRVbmxvY2tQb3dlcihcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4gIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24sXG4pOiBib29sZWFuIHtcbiAgaWYgKHN0YXRlLnBsYXllcnNbY29sb3JdLnBvd2VyVW5sb2NrZWQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3AgOiBwb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tO1xufVxuXG5mdW5jdGlvbiBpc1NxdWFyZVZ1bG5lcmFibGVBZnRlck1vdmUoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIG1vdmU6IENoZXNzaW1hbHNNb3ZlKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgaWYgKGFmdGVyTW92ZS5zdGF0dXMgPT09ICdmaW5pc2hlZCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoYWZ0ZXJNb3ZlKS5zb21lKChlbmVteU1vdmUpID0+XG4gICAgICBzYW1lUG9zaXRpb24oZW5lbXlNb3ZlLnRvLCBtb3ZlLnRvKSAmJiAhIWVuZW15TW92ZS5jYXB0dXJlc1BpZWNlSWQsXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvd2VyRGlyZWN0aW9ucyhhbmltYWw6IENoZXNzaW1hbHNBbmltYWxUeXBlKTogQ2hlc3NpbWFsc1Bvc2l0aW9uW10ge1xuICBpZiAoYW5pbWFsID09PSAnZWFnbGUnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcm93OiAtMSwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IC0xLCBjb2w6IDEgfSxcbiAgICAgIHsgcm93OiAxLCBjb2w6IC0xIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAxIH0sXG4gICAgXTtcbiAgfVxuICBpZiAoYW5pbWFsID09PSAnYnVsbCcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyByb3c6IC0xLCBjb2w6IDAgfSxcbiAgICAgIHsgcm93OiAxLCBjb2w6IDAgfSxcbiAgICAgIHsgcm93OiAwLCBjb2w6IC0xIH0sXG4gICAgICB7IHJvdzogMCwgY29sOiAxIH0sXG4gICAgXTtcbiAgfVxuICByZXR1cm4gW1xuICAgIHsgcm93OiAtMSwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAwIH0sXG4gICAgeyByb3c6IC0xLCBjb2w6IDEgfSxcbiAgICB7IHJvdzogMCwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAwLCBjb2w6IDEgfSxcbiAgICB7IHJvdzogMSwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAxLCBjb2w6IDAgfSxcbiAgICB7IHJvdzogMSwgY29sOiAxIH0sXG4gIF07XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hDaGVzc2ltYWxzUG93ZXJVbmxvY2tzKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgcGxheWVyczoge1xuICAgICAgd2hpdGU6IHtcbiAgICAgICAgLi4uc3RhdGUucGxheWVycy53aGl0ZSxcbiAgICAgICAgcG93ZXJVbmxvY2tlZDpcbiAgICAgICAgICBzdGF0ZS5wbGF5ZXJzLndoaXRlLnBvd2VyVW5sb2NrZWQgfHxcbiAgICAgICAgICBoYXNDcm9zc2VkQ2VudGVyKHN0YXRlLCAnd2hpdGUnKSB8fFxuICAgICAgICAgIGhhc0VuZW15RW50ZXJlZEhvbWUoc3RhdGUsICd3aGl0ZScpLFxuICAgICAgfSxcbiAgICAgIGJsYWNrOiB7XG4gICAgICAgIC4uLnN0YXRlLnBsYXllcnMuYmxhY2ssXG4gICAgICAgIHBvd2VyVW5sb2NrZWQ6XG4gICAgICAgICAgc3RhdGUucGxheWVycy5ibGFjay5wb3dlclVubG9ja2VkIHx8XG4gICAgICAgICAgaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZSwgJ2JsYWNrJykgfHxcbiAgICAgICAgICBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlLCAnYmxhY2snKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcik6IGJvb2xlYW4ge1xuICBjb25zdCBjZW50ZXJUb3AgPSBzdGF0ZS5ib2FyZFNpemUgLyAyIC0gMTtcbiAgY29uc3QgY2VudGVyQm90dG9tID0gc3RhdGUuYm9hcmRTaXplIC8gMjtcbiAgcmV0dXJuIGFjdGl2ZVBpZWNlcyhzdGF0ZSkuc29tZSgocGllY2UpID0+IHtcbiAgICBpZiAocGllY2UuY29sb3IgIT09IGNvbG9yIHx8IHBpZWNlLmNhcHR1cmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gcGllY2UucG9zaXRpb24ucm93IDw9IGNlbnRlclRvcCA6IHBpZWNlLnBvc2l0aW9uLnJvdyA+PSBjZW50ZXJCb3R0b207XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNlbnRlclRvcCA9IHN0YXRlLmJvYXJkU2l6ZSAvIDIgLSAxO1xuICBjb25zdCBjZW50ZXJCb3R0b20gPSBzdGF0ZS5ib2FyZFNpemUgLyAyO1xuICBjb25zdCBlbmVteSA9IG90aGVyQ29sb3IoY29sb3IpO1xuICByZXR1cm4gYWN0aXZlUGllY2VzKHN0YXRlKS5zb21lKChwaWVjZSkgPT4ge1xuICAgIGlmIChwaWVjZS5jb2xvciAhPT0gZW5lbXkgfHwgcGllY2UuY2FwdHVyZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwaWVjZS5wb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tIDogcGllY2UucG9zaXRpb24ucm93IDw9IGNlbnRlclRvcDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzUHJvbW90aW9uUm93KFxuICBib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4gIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24sXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gcG9zaXRpb24ucm93ID09PSAwIDogcG9zaXRpb24ucm93ID09PSBib2FyZFNpemUgLSAxO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUJvYXJkKGJvYXJkU2l6ZTogQ2hlc3NpbWFsc0JvYXJkU2l6ZSwgcG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHBvc2l0aW9uLnJvdyA+PSAwICYmIHBvc2l0aW9uLnJvdyA8IGJvYXJkU2l6ZSAmJiBwb3NpdGlvbi5jb2wgPj0gMCAmJiBwb3NpdGlvbi5jb2wgPCBib2FyZFNpemVcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2FtZVBvc2l0aW9uKGE6IENoZXNzaW1hbHNQb3NpdGlvbiwgYjogQ2hlc3NpbWFsc1Bvc2l0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBhLnJvdyA9PT0gYi5yb3cgJiYgYS5jb2wgPT09IGIuY29sO1xufVxuXG5mdW5jdGlvbiBvdGhlckNvbG9yKGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBDaGVzc2ltYWxzUGxheWVyQ29sb3Ige1xuICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyAnYmxhY2snIDogJ3doaXRlJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9jYWxJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gYGxvY2FsLSR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOCl9YDtcbn1cbiJdfQ==
|