v26: Wire RL training pipeline UI (phases 1-5)

- Fixed all ML types to match actual backend response shapes:
  MLStatus (logging state + decision files), MLDataStatus (datasets,
  checkpoints, eval results), MLTrainStatus (phases, metrics, result),
  PPOTrainStatus (metrics with win_rate/reward/losses), TournamentStatus
- Updated training API client with full parameter support for all endpoints
- Rewrote TrainingPage with 5 clear pipeline phases:
  Phase 1: Data Collection (toggle logging, view decision files)
  Phase 2: Dataset & Model Artifacts (splits, checkpoints, eval, model info)
  Phase 3: Supervised Training (epochs/lr/batch/patience, live progress,
           phase badges, real-time metrics, final eval results)
  Phase 4: PPO Reinforcement Learning (full config: iterations, episodes,
           clip epsilon, entropy coeff, opponent selection, live win rate)
  Phase 5: Tournament Evaluation (episodes, playstyle, leaderboard table)
- All sections are collapsible with live phase badges and progress bars
- Advanced config toggles for supervised and PPO training
- Proper mutex: can't start PPO while supervised is running, etc.
- Auto-refresh model info and data status when training completes
This commit is contained in:
KoalaTrapLord committed 2026-03-12 02:54:30 +00:00
1 parent e36580203a
commit 384c3adfff
4 files changed
+809 -279

No files matched your search

@@ -1,52 +1,72 @@
import { get, post } from './client'
import type { MLStatus, MLDataStatus, MLTrainStatus, PPOTrainStatus, TournamentStatus, TournamentResults } from '../types'
import type {
MLStatus, MLDataStatus, MLTrainStatus, PPOTrainStatus,
TournamentStatus, TournamentResults, MLModelInfo
} from '../types'
// ── ML Status & Toggle ──────────────────────────────────────
export async function getMLStatus() {
return get<MLStatus>('/api/ml/status')
}
export async function toggleML() {
return post<{ enabled: boolean }>('/api/ml/toggle')
export async function toggleML(enable = true) {
return post<{ ml_logging_enabled: boolean; message: string }>(`/api/ml/toggle?enable=${enable}`)
}
export async function getDecisionFile(filename: string) {
return get<Record<string, unknown>>(`/api/ml/decisions/${filename}`)
}
export async function predict(state: Record<string, unknown>) {
return post<{ action: string; confidence: number }>('/api/ml/predict', state)
}
export async function reloadModel() {
return post<{ loaded: boolean }>('/api/ml/reload')
// ── Data & Model Info ───────────────────────────────────────
export async function getDataStatus() {
return get<MLDataStatus>('/api/ml/data/status')
}
export async function getModelInfo() {
return get<Record<string, unknown>>('/api/ml/model')
return get<MLModelInfo>('/api/ml/model')
}
export async function startTraining(config?: { epochs?: number; lr?: number }) {
return post<{ started: boolean }>('/api/ml/train', config)
export async function reloadModel(checkpoint?: string) {
return post<{ success: boolean; status: MLModelInfo }>('/api/ml/reload', checkpoint ? { checkpoint } : undefined)
}
// ── Supervised Training ─────────────────────────────────────
export async function startTraining(config: {
epochs?: number
lr?: number
batchSize?: number
patience?: number
rebuildDataset?: boolean
}) {
return post<{ status: string; config: Record<string, unknown> }>('/api/ml/train', config)
}
export async function getTrainStatus() {
return get<MLTrainStatus>('/api/ml/train/status')
}
export async function getDataStatus() {
return get<MLDataStatus>('/api/ml/data/status')
}
export async function startPPOTraining(config?: { iterations?: number }) {
return post<{ started: boolean }>('/api/ml/train/ppo', config)
// ── PPO Training ────────────────────────────────────────────
export async function startPPOTraining(config: {
iterations?: number
episodesPerIter?: number
ppoEpochs?: number
batchSize?: number
lr?: number
clipEpsilon?: number
entropyCoeff?: number
opponent?: string
playstyle?: string
loadSupervised?: string
}) {
return post<{ status: string; iterations: number }>('/api/ml/train/ppo', config)
}
export async function getPPOStatus() {
return get<PPOTrainStatus>('/api/ml/train/ppo/status')
}
export async function startTournament(config?: { games?: number }) {
return post<{ started: boolean }>('/api/ml/tournament', config)
// ── Tournament ──────────────────────────────────────────────
export async function startTournament(config: {
episodes?: number
playstyle?: string
}) {
return post<{ status: string; episodes: number }>('/api/ml/tournament', config)
}
export async function getTournamentStatus() {
@@ -56,3 +76,17 @@ export async function getTournamentStatus() {
export async function getTournamentResults() {
return get<TournamentResults>('/api/ml/tournament/results')
}
// ── Decision Files ──────────────────────────────────────────
export async function getDecisionFile(filename: string, limit = 100, offset = 0) {
return get<{ file: string; offset: number; limit: number; count: number; decisions: Record<string, unknown>[] }>(
`/api/ml/decisions/${filename}?limit=${limit}&offset=${offset}`
)
}
// ── Prediction ──────────────────────────────────────────────
export async function predict(state: Record<string, unknown>) {
return post<{ action: string; action_index: number; confidence: number; probabilities: Record<string, number>; inference_ms: number }>(
'/api/ml/predict', state
)
}
File diff suppressed because it is too large. Load diff
+57 -18
View File
@@ -374,47 +374,75 @@ export interface CoachMessage {
// ── ML Training ──────────────────────────────────────────────
/** GET /api/ml/status */
export interface MLStatus {
enabled: boolean
model_loaded: boolean
model_path: string | null
decisions_count: number
decision_files: string[]
ml_logging_enabled: boolean
training_files: { file: string; decisions: number; size_kb: number }[]
total_decisions: number
total_files: number
}
/** GET /api/ml/data/status */
export interface MLDataStatus {
dataset_exists: boolean
samples: number
features: number
last_built: string | null
decisionFiles: { name: string; size: number; decisions: number }[]
totalDecisions: number
datasets: Record<string, { samples: number; features: number; size: number }>
checkpoints: { name: string; size: number; modified: string }[]
evalResults: Record<string, unknown> | null
policyLoaded: boolean
}
/** GET /api/ml/train/status */
export interface MLTrainStatus {
running: boolean
epoch: number
progress: number
total_epochs: number
loss: number | null
accuracy: number | null
best_accuracy: number | null
current_epoch: number
phase: 'idle' | 'starting' | 'building' | 'training' | 'evaluating' | 'done' | 'error'
message: string
metrics: Record<string, unknown> | null
result: {
training: Record<string, unknown>
evaluation: Record<string, unknown> | null
checkpoint: string
device: string
} | null
error: string | null
started_at: string | null
}
/** GET /api/ml/train/ppo/status */
export interface PPOTrainStatus {
running: boolean
iteration: number
total_iterations: number
avg_reward: number | null
win_rate: number | null
phase: 'idle' | 'starting' | 'training' | 'done' | 'error'
message: string
metrics: {
avg_reward?: number
win_rate?: number
policy_loss?: number
value_loss?: number
entropy?: number
[key: string]: unknown
} | null
result: Record<string, unknown> | null
error: string | null
}
/** GET /api/ml/tournament/status */
export interface TournamentStatus {
running: boolean
games_completed: number
total_games: number
phase: 'idle' | 'starting' | 'running' | 'done' | 'error'
message: string
result: TournamentResults | null
error: string | null
}
export interface TournamentResults {
players: TournamentPlayer[]
total_games: number
total_matches: number
matchups?: Record<string, unknown>
}
export interface TournamentPlayer {
@@ -424,6 +452,17 @@ export interface TournamentPlayer {
win_rate: number
}
/** GET /api/ml/model */
export interface MLModelInfo {
loaded: boolean
device?: string
input_dim?: number
num_actions?: number
checkpoint_path?: string
error?: string
torch_available?: boolean
}
// ── DeepSeek ─────────────────────────────────────────────────
export interface DeepSeekStatus {
+27 -14
View File
@@ -343,8 +343,9 @@ Install-B64 -R 'frontend\commander-ai-lab-ui\src\api\lab.ts' -B $b
$b = 'aW1wb3J0IHsgZ2V0LCBwb3N0IH0gZnJvbSAnLi9jbGllbnQnCmltcG9ydCB0eXBlIHsgU2ltU3RhdHVzLCBTaW1SZXN1bHQsIERlZXBTZWVrU3RhdHVzIH0gZnJvbSAnLi4vdHlwZXMnCgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2ltKGNvbmZpZzogeyBkZWNrX2E6IHN0cmluZzsgZGVja19iOiBzdHJpbmc7IGdhbWVzOiBudW1iZXIgfSkgewogIHJldHVybiBwb3N0PHsgc2ltX2lkOiBzdHJpbmcgfT4oJy9hcGkvc2ltL3J1bicsIGNvbmZpZykKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNpbUZyb21EZWNrKGRlY2tJZDogbnVtYmVyLCBjb25maWc6IHsgb3Bwb25lbnQ/OiBzdHJpbmc7IGdhbWVzPzogbnVtYmVyIH0pIHsKICByZXR1cm4gcG9zdDx7IHNpbV9pZDogc3RyaW5nIH0+KCcvYXBpL3NpbS9ydW4tZnJvbS1kZWNrJywgeyBkZWNrX2lkOiBkZWNrSWQsIC4uLmNvbmZpZyB9KQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRGVlcFNlZWtTaW0oY29uZmlnOiB7IGRlY2tfYTogc3RyaW5nOyBkZWNrX2I6IHN0cmluZzsgZ2FtZXM6IG51bWJlcjsgZGVlcHNlZWtfZGVjazogc3RyaW5nIH0pIHsKICByZXR1cm4gcG9zdDx7IHNpbV9pZDogc3RyaW5nIH0+KCcvYXBpL3NpbS9ydW4tZGVlcHNlZWsnLCBjb25maWcpCn0KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTaW1TdGF0dXMoc2ltSWQ6IHN0cmluZykgewogIHJldHVybiBnZXQ8U2ltU3RhdHVzPignL2FwaS9zaW0vc3RhdHVzJywgeyBzaW1JZCB9KQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2ltUmVzdWx0KHNpbUlkOiBzdHJpbmcpIHsKICByZXR1cm4gZ2V0PFNpbVJlc3VsdD4oJy9hcGkvc2ltL3Jlc3VsdCcsIHsgc2ltSWQgfSkKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbm5lY3REZWVwU2VlaygpIHsKICByZXR1cm4gcG9zdDxEZWVwU2Vla1N0YXR1cz4oJy9hcGkvZGVlcHNlZWsvY29ubmVjdCcpCn0KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREZWVwU2Vla1N0YXR1cygpIHsKICByZXR1cm4gZ2V0PERlZXBTZWVrU3RhdHVzPignL2FwaS9kZWVwc2Vlay9zdGF0dXMnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlRGVlcFNlZWsoY29uZmlnOiB7IG1vZGVsPzogc3RyaW5nOyBiYXNlX3VybD86IHN0cmluZyB9KSB7CiAgcmV0dXJuIHBvc3Q8RGVlcFNlZWtTdGF0dXM+KCcvYXBpL2RlZXBzZWVrL2NvbmZpZ3VyZScsIGNvbmZpZykKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERlZXBTZWVrTG9ncygpIHsKICByZXR1cm4gZ2V0PEFycmF5PHsgZmlsZW5hbWU6IHN0cmluZzsgc2l6ZTogbnVtYmVyOyBtb2RpZmllZDogc3RyaW5nIH0+PignL2FwaS9kZWVwc2Vlay9sb2dzJykKfQo='
Install-B64 -R 'frontend\commander-ai-lab-ui\src\api\sim.ts' -B $b
# frontend/commander-ai-lab-ui/src/api/training.ts (1,739 bytes)
$b = 'aW1wb3J0IHsgZ2V0LCBwb3N0IH0gZnJvbSAnLi9jbGllbnQnCmltcG9ydCB0eXBlIHsgTUxTdGF0dXMsIE1MRGF0YVN0YXR1cywgTUxUcmFpblN0YXR1cywgUFBPVHJhaW5TdGF0dXMsIFRvdXJuYW1lbnRTdGF0dXMsIFRvdXJuYW1lbnRSZXN1bHRzIH0gZnJvbSAnLi4vdHlwZXMnCgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TUxTdGF0dXMoKSB7CiAgcmV0dXJuIGdldDxNTFN0YXR1cz4oJy9hcGkvbWwvc3RhdHVzJykKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZU1MKCkgewogIHJldHVybiBwb3N0PHsgZW5hYmxlZDogYm9vbGVhbiB9PignL2FwaS9tbC90b2dnbGUnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVjaXNpb25GaWxlKGZpbGVuYW1lOiBzdHJpbmcpIHsKICByZXR1cm4gZ2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PihgL2FwaS9tbC9kZWNpc2lvbnMvJHtmaWxlbmFtZX1gKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlZGljdChzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHsKICByZXR1cm4gcG9zdDx7IGFjdGlvbjogc3RyaW5nOyBjb25maWRlbmNlOiBudW1iZXIgfT4oJy9hcGkvbWwvcHJlZGljdCcsIHN0YXRlKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkTW9kZWwoKSB7CiAgcmV0dXJuIHBvc3Q8eyBsb2FkZWQ6IGJvb2xlYW4gfT4oJy9hcGkvbWwvcmVsb2FkJykKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE1vZGVsSW5mbygpIHsKICByZXR1cm4gZ2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PignL2FwaS9tbC9tb2RlbCcpCn0KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFRyYWluaW5nKGNvbmZpZz86IHsgZXBvY2hzPzogbnVtYmVyOyBscj86IG51bWJlciB9KSB7CiAgcmV0dXJuIHBvc3Q8eyBzdGFydGVkOiBib29sZWFuIH0+KCcvYXBpL21sL3RyYWluJywgY29uZmlnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhaW5TdGF0dXMoKSB7CiAgcmV0dXJuIGdldDxNTFRyYWluU3RhdHVzPignL2FwaS9tbC90cmFpbi9zdGF0dXMnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGF0YVN0YXR1cygpIHsKICByZXR1cm4gZ2V0PE1MRGF0YVN0YXR1cz4oJy9hcGkvbWwvZGF0YS9zdGF0dXMnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRQUE9UcmFpbmluZyhjb25maWc/OiB7IGl0ZXJhdGlvbnM/OiBudW1iZXIgfSkgewogIHJldHVybiBwb3N0PHsgc3RhcnRlZDogYm9vbGVhbiB9PignL2FwaS9tbC90cmFpbi9wcG8nLCBjb25maWcpCn0KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQUE9TdGF0dXMoKSB7CiAgcmV0dXJuIGdldDxQUE9UcmFpblN0YXR1cz4oJy9hcGkvbWwvdHJhaW4vcHBvL3N0YXR1cycpCn0KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFRvdXJuYW1lbnQoY29uZmlnPzogeyBnYW1lcz86IG51bWJlciB9KSB7CiAgcmV0dXJuIHBvc3Q8eyBzdGFydGVkOiBib29sZWFuIH0+KCcvYXBpL21sL3RvdXJuYW1lbnQnLCBjb25maWcpCn0KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRUb3VybmFtZW50U3RhdHVzKCkgewogIHJldHVybiBnZXQ8VG91cm5hbWVudFN0YXR1cz4oJy9hcGkvbWwvdG91cm5hbWVudC9zdGF0dXMnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VG91cm5hbWVudFJlc3VsdHMoKSB7CiAgcmV0dXJuIGdldDxUb3VybmFtZW50UmVzdWx0cz4oJy9hcGkvbWwvdG91cm5hbWVudC9yZXN1bHRzJykKfQo='
# frontend/commander-ai-lab-ui/src/api/training.ts (3,535 bytes)
$b = 'aW1wb3J0IHsgZ2V0LCBwb3N0IH0gZnJvbSAnLi9jbGllbnQnCmltcG9ydCB0eXBlIHsKICBNTFN0YXR1cywgTUxEYXRhU3RhdHVzLCBNTFRyYWluU3RhdHVzLCBQUE9UcmFpblN0YXR1cywKICBUb3VybmFtZW50U3RhdHVzLCBUb3VybmFtZW50UmVzdWx0cywgTUxNb2RlbEluZm8KfSBmcm9tICcuLi90eXBlcycKCi8vIOKUgOKUgCBNTCBTdGF0dXMgJiBUb2dnbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNTFN0YXR1cygpIHsKICByZXR1cm4gZ2V0PE1MU3RhdHVzPignL2FwaS9tbC9zdGF0dXMnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlTUwoZW5hYmxlID0gdHJ1ZSkgewogIHJldHVybiBwb3N0PHsgbWxfbG9nZ2luZ19lbmFibGVkOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfT4oYC9hcGkvbWwvdG9nZ2xlP2VuYWJsZT0ke2VuYWJsZX1gKQp9CgovLyDilIDilIAgRGF0YSAmIE1vZGVsIEluZm8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREYXRhU3RhdHVzKCkgewogIHJldHVybiBnZXQ8TUxEYXRhU3RhdHVzPignL2FwaS9tbC9kYXRhL3N0YXR1cycpCn0KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNb2RlbEluZm8oKSB7CiAgcmV0dXJuIGdldDxNTE1vZGVsSW5mbz4oJy9hcGkvbWwvbW9kZWwnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkTW9kZWwoY2hlY2twb2ludD86IHN0cmluZykgewogIHJldHVybiBwb3N0PHsgc3VjY2VzczogYm9vbGVhbjsgc3RhdHVzOiBNTE1vZGVsSW5mbyB9PignL2FwaS9tbC9yZWxvYWQnLCBjaGVja3BvaW50ID8geyBjaGVja3BvaW50IH0gOiB1bmRlZmluZWQpCn0KCi8vIOKUgOKUgCBTdXBlcnZpc2VkIFRyYWluaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApleHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRUcmFpbmluZyhjb25maWc6IHsKICBlcG9jaHM/OiBudW1iZXIKICBscj86IG51bWJlcgogIGJhdGNoU2l6ZT86IG51bWJlcgogIHBhdGllbmNlPzogbnVtYmVyCiAgcmVidWlsZERhdGFzZXQ/OiBib29sZWFuCn0pIHsKICByZXR1cm4gcG9zdDx7IHN0YXR1czogc3RyaW5nOyBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+KCcvYXBpL21sL3RyYWluJywgY29uZmlnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhaW5TdGF0dXMoKSB7CiAgcmV0dXJuIGdldDxNTFRyYWluU3RhdHVzPignL2FwaS9tbC90cmFpbi9zdGF0dXMnKQp9CgovLyDilIDilIAgUFBPIFRyYWluaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApleHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRQUE9UcmFpbmluZyhjb25maWc6IHsKICBpdGVyYXRpb25zPzogbnVtYmVyCiAgZXBpc29kZXNQZXJJdGVyPzogbnVtYmVyCiAgcHBvRXBvY2hzPzogbnVtYmVyCiAgYmF0Y2hTaXplPzogbnVtYmVyCiAgbHI/OiBudW1iZXIKICBjbGlwRXBzaWxvbj86IG51bWJlcgogIGVudHJvcHlDb2VmZj86IG51bWJlcgogIG9wcG9uZW50Pzogc3RyaW5nCiAgcGxheXN0eWxlPzogc3RyaW5nCiAgbG9hZFN1cGVydmlzZWQ/OiBzdHJpbmcKfSkgewogIHJldHVybiBwb3N0PHsgc3RhdHVzOiBzdHJpbmc7IGl0ZXJhdGlvbnM6IG51bWJlciB9PignL2FwaS9tbC90cmFpbi9wcG8nLCBjb25maWcpCn0KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQUE9TdGF0dXMoKSB7CiAgcmV0dXJuIGdldDxQUE9UcmFpblN0YXR1cz4oJy9hcGkvbWwvdHJhaW4vcHBvL3N0YXR1cycpCn0KCi8vIOKUgOKUgCBUb3VybmFtZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU' +
'gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApleHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRUb3VybmFtZW50KGNvbmZpZzogewogIGVwaXNvZGVzPzogbnVtYmVyCiAgcGxheXN0eWxlPzogc3RyaW5nCn0pIHsKICByZXR1cm4gcG9zdDx7IHN0YXR1czogc3RyaW5nOyBlcGlzb2RlczogbnVtYmVyIH0+KCcvYXBpL21sL3RvdXJuYW1lbnQnLCBjb25maWcpCn0KCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRUb3VybmFtZW50U3RhdHVzKCkgewogIHJldHVybiBnZXQ8VG91cm5hbWVudFN0YXR1cz4oJy9hcGkvbWwvdG91cm5hbWVudC9zdGF0dXMnKQp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VG91cm5hbWVudFJlc3VsdHMoKSB7CiAgcmV0dXJuIGdldDxUb3VybmFtZW50UmVzdWx0cz4oJy9hcGkvbWwvdG91cm5hbWVudC9yZXN1bHRzJykKfQoKLy8g4pSA4pSAIERlY2lzaW9uIEZpbGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVjaXNpb25GaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGxpbWl0ID0gMTAwLCBvZmZzZXQgPSAwKSB7CiAgcmV0dXJuIGdldDx7IGZpbGU6IHN0cmluZzsgb2Zmc2V0OiBudW1iZXI7IGxpbWl0OiBudW1iZXI7IGNvdW50OiBudW1iZXI7IGRlY2lzaW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSB9PigKICAgIGAvYXBpL21sL2RlY2lzaW9ucy8ke2ZpbGVuYW1lfT9saW1pdD0ke2xpbWl0fSZvZmZzZXQ9JHtvZmZzZXR9YAogICkKfQoKLy8g4pSA4pSAIFByZWRpY3Rpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVkaWN0KHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgewogIHJldHVybiBwb3N0PHsgYWN0aW9uOiBzdHJpbmc7IGFjdGlvbl9pbmRleDogbnVtYmVyOyBjb25maWRlbmNlOiBudW1iZXI7IHByb2JhYmlsaXRpZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47IGluZmVyZW5jZV9tczogbnVtYmVyIH0+KAogICAgJy9hcGkvbWwvcHJlZGljdCcsIHN0YXRlCiAgKQp9Cg=='
Install-B64 -R 'frontend\commander-ai-lab-ui\src\api\training.ts' -B $b
# frontend/commander-ai-lab-ui/src/components/common/CardImage.tsx (1,500 bytes)
@@ -470,23 +471,35 @@ $b = 'aW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JwppbXBvcnQgewogIE
'ICAgICAgICAgICAgICAgPENlbGwga2V5PXtpfSBmaWxsPXtkLndpbl9yYXRlID09PSBNYXRoLm1heCguLi5yZXN1bHQuZGVja3MubWFwKHggPT4geC53aW5fcmF0ZSkpID8gJyM0YWRlODAnIDogJyM0ZjZlZjcnfSAvPgogICAgICAgICAgICAgICAgICApKX0KICAgICAgICAgICAgICAgIDwvQmFyPgogICAgICAgICAgICAgIDwvQmFyQ2hhcnQ+CiAgICAgICAgICAgIDwvUmVzcG9uc2l2ZUNvbnRhaW5lcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQiPgogICAgICAgICAgICB7cmVzdWx0LmRlY2tzLm1hcChkID0+ICgKICAgICAgICAgICAgICA8ZGl2IGtleT17ZC5uYW1lfSBjbGFzc05hbWU9InB4LTQgcHktMyByb3VuZGVkLWxnIGJnLWJnLXRlcnRpYXJ5Ij4KICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtdGV4dC1wcmltYXJ5Ij57ZC5uYW1lfTwvcD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJncmlkIGdyaWQtY29scy0zIGdhcC0yIG10LTIiPgogICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1bMTBweF0gdGV4dC10ZXh0LXRlcnRpYXJ5IHVwcGVyY2FzZSI+V2luczwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtbGcgZm9udC1ib2xkIHRleHQtYWNjZW50LWdyZWVuIj57ZC53aW5zfTwvcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LVsxMHB4XSB0ZXh0LXRleHQtdGVydGlhcnkgdXBwZXJjYXNlIj5XaW4gUmF0ZTwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtbGcgZm9udC1ib2xkIHRleHQtYWNjZW50LWJsdWUiPnsoZC53aW5fcmF0ZSAqIDEwMCkudG9GaXhlZCgxKX0lPC9wPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtWzEwcHhdIHRleHQtdGV4dC10ZXJ0aWFyeSB1cHBlcmNhc2UiPkF2ZyBUdXJuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1sZyBmb250LWJvbGQgdGV4dC10ZXh0LXByaW1hcnkiPntkLmF2Z190dXJuLnRvRml4ZWQoMSl9PC9wPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICApKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICApfQogICAgPC9kaXY+CiAgKQp9Cg=='
Install-B64 -R 'frontend\commander-ai-lab-ui\src\pages\SimulatorPage.tsx' -B $b
# frontend/commander-ai-lab-ui/src/pages/TrainingPage.tsx (17,676 bytes)
$b = 'aW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JwppbXBvcnQgewogIEJyYWluLCBQbGF5LCBSb3RhdGVDdywgRGF0YWJhc2UsIFRyb3BoeSwgQWxlcnRDaXJjbGUsCiAgVG9nZ2xlTGVmdCwgVG9nZ2xlUmlnaHQsIEFjdGl2aXR5LCBaYXAsIFN3b3Jkcwp9IGZyb20gJ2x1Y2lkZS1yZWFjdCcKaW1wb3J0IHsgU3Bpbm5lciwgU3RhdHVzQmFkZ2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbW1vbicKaW1wb3J0IHsgdHJhaW5pbmdBcGkgfSBmcm9tICcuLi9hcGknCmltcG9ydCB7IHVzZVBvbGxpbmcgfSBmcm9tICcuLi9ob29rcy91c2VQb2xsaW5nJwppbXBvcnQgdHlwZSB7CiAgTUxTdGF0dXMsIE1MRGF0YVN0YXR1cywgTUxUcmFpblN0YXR1cywgUFBPVHJhaW5TdGF0dXMsCiAgVG91cm5hbWVudFN0YXR1cywgVG91cm5hbWVudFJlc3VsdHMKfSBmcm9tICcuLi90eXBlcycKCi8vIOKUgOKUgCBQcm9ncmVzcyBCYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIFByb2dyZXNzQmFyKHsgdmFsdWUsIG1heCwgbGFiZWwgfTogeyB2YWx1ZTogbnVtYmVyOyBtYXg6IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9KSB7CiAgY29uc3QgcGN0ID0gbWF4ID4gMCA/ICh2YWx1ZSAvIG1heCkgKiAxMDAgOiAwCiAgcmV0dXJuICgKICAgIDxkaXY+CiAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdGV4dC14cyBtYi0xIj4KICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQtdGV4dC1zZWNvbmRhcnkiPntsYWJlbH08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LXRleHQtdGVydGlhcnkiPnt2YWx1ZX0gLyB7bWF4fTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3NOYW1lPSJ3LWZ1bGwgaC0yIGJnLWJnLXRlcnRpYXJ5IHJvdW5kZWQtZnVsbCBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgIDxkaXYgY2xhc3NOYW1lPSJoLWZ1bGwgYmctYWNjZW50LWJsdWUgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsIiBzdHlsZT17eyB3aWR0aDogYCR7cGN0fSVgIH19IC8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgKQp9CgovLyDilIDilIAgTWFpbiBUcmFpbmluZyBQYWdlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApleHBvcnQgZnVuY3Rpb24gVHJhaW5pbmdQYWdlKCkgewogIGNvbnN0IFttbFN0YXR1cywgc2V0TWxTdGF0dXNdID0gdXNlU3RhdGU8TUxTdGF0dXMgfCBudWxsPihudWxsKQogIGNvbnN0IFtkYXRhU3RhdHVzLCBzZXREYXRhU3RhdHVzXSA9IHVzZVN0YXRlPE1MRGF0YVN0YXR1cyB8IG51bGw+KG51bGwpCiAgY29uc3QgW3RyYWluU3RhdHVzLCBzZXRUcmFpblN0YXR1c10gPSB1c2VTdGF0ZTxNTFRyYWluU3RhdHVzIHwgbnVsbD4obnVsbCkKICBjb25zdCBbcHBvU3RhdHVzLCBzZXRQcG9TdGF0dXNdID0gdXNlU3RhdGU8UFBPVHJhaW5TdGF0dXMgfCBudWxsPihudWxsKQogIGNvbnN0IFt0b3VyblN0YXR1cywgc2V0VG91cm5TdGF0dXNdID0gdXNlU3RhdGU8VG91cm5hbWVudFN0YXR1cyB8IG51bGw+KG51bGwpCiAgY29uc3QgW3RvdXJuUmVzdWx0cywgc2V0VG91cm5SZXN1bHRzXSA9IHVzZVN0YXRlPFRvdXJuYW1lbnRSZXN1bHRzIHwgbnVsbD4obnVsbCkKICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKQogIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCkKCiAgLy8gVHJhaW5pbmcgY29uZmlnCiAgY29uc3QgW2Vwb2Nocywgc2V0RXBvY2hzXSA9IHVzZVN0YXRlKDEwMCkKICBjb25zdCBbbHIsIHNldExyXSA9IHVzZVN0YXRlKDAuMDAxKQogIGNvbnN0IFtwcG9JdGVyYXRpb25zLCBzZXRQcG9JdGVyYXRpb25zXSA9IHVzZVN0YXRlKDUwKQogIGNvbnN0IFt0b3VybkdhbWVzLCBzZXRUb3VybkdhbWVzXSA9IHVzZVN0YXRlKDEwMCkKCiAgLy8gQWN0aW9uIHN0YXRlcwogIGNvbnN0IFtzdGFydGluZ1RyYWluLCBzZXRTdGFydGluZ1RyYWluXSA9IHVzZVN0YXRlKGZhbHNlKQogIGNvbnN0' +
'IFtzdGFydGluZ1Bwbywgc2V0U3RhcnRpbmdQcG9dID0gdXNlU3RhdGUoZmFsc2UpCiAgY29uc3QgW3N0YXJ0aW5nVG91cm4sIHNldFN0YXJ0aW5nVG91cm5dID0gdXNlU3RhdGUoZmFsc2UpCiAgY29uc3QgW3RvZ2dsaW5nLCBzZXRUb2dnbGluZ10gPSB1c2VTdGF0ZShmYWxzZSkKCiAgdXNlRWZmZWN0KCgpID0+IHsKICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWQoKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgW21sLCBkYXRhXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICAgIHRyYWluaW5nQXBpLmdldE1MU3RhdHVzKCksCiAgICAgICAgICB0cmFpbmluZ0FwaS5nZXREYXRhU3RhdHVzKCksCiAgICAgICAgXSkKICAgICAgICBzZXRNbFN0YXR1cyhtbCkKICAgICAgICBzZXREYXRhU3RhdHVzKGRhdGEpCiAgICAgIH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfQogICAgICBzZXRMb2FkaW5nKGZhbHNlKQogICAgfQogICAgbG9hZCgpCiAgfSwgW10pCgogIC8vIFBvbGwgdHJhaW5pbmcgc3RhdHVzCiAgY29uc3QgaXNUcmFpbmluZyA9IHRyYWluU3RhdHVzPy5ydW5uaW5nIHx8IGZhbHNlCiAgY29uc3QgaXNQcG8gPSBwcG9TdGF0dXM/LnJ1bm5pbmcgfHwgZmFsc2UKICBjb25zdCBpc1RvdXJuID0gdG91cm5TdGF0dXM/LnJ1bm5pbmcgfHwgZmFsc2UKCiAgdXNlUG9sbGluZyhhc3luYyAoKSA9PiB7CiAgICB0cnkgewogICAgICBjb25zdCBzID0gYXdhaXQgdHJhaW5pbmdBcGkuZ2V0VHJhaW5TdGF0dXMoKQogICAgICBzZXRUcmFpblN0YXR1cyhzKQogICAgICBpZiAoIXMucnVubmluZykgewogICAgICAgIGNvbnN0IG1sID0gYXdhaXQgdHJhaW5pbmdBcGkuZ2V0TUxTdGF0dXMoKQogICAgICAgIHNldE1sU3RhdHVzKG1sKQogICAgICB9CiAgICB9IGNhdGNoIHsgLyogaWdub3JlICovIH0KICB9LCAyMDAwLCBpc1RyYWluaW5nKQoKICB1c2VQb2xsaW5nKGFzeW5jICgpID0+IHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHMgPSBhd2FpdCB0cmFpbmluZ0FwaS5nZXRQUE9TdGF0dXMoKQogICAgICBzZXRQcG9TdGF0dXMocykKICAgIH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfQogIH0sIDIwMDAsIGlzUHBvKQoKICB1c2VQb2xsaW5nKGFzeW5jICgpID0+IHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHMgPSBhd2FpdCB0cmFpbmluZ0FwaS5nZXRUb3VybmFtZW50U3RhdHVzKCkKICAgICAgc2V0VG91cm5TdGF0dXMocykKICAgICAgaWYgKCFzLnJ1bm5pbmcpIHsKICAgICAgICBjb25zdCByID0gYXdhaXQgdHJhaW5pbmdBcGkuZ2V0VG91cm5hbWVudFJlc3VsdHMoKQogICAgICAgIHNldFRvdXJuUmVzdWx0cyhyKQogICAgICB9CiAgICB9IGNhdGNoIHsgLyogaWdub3JlICovIH0KICB9LCAyMDAwLCBpc1RvdXJuKQoKICBhc3luYyBmdW5jdGlvbiBoYW5kbGVUb2dnbGUoKSB7CiAgICBzZXRUb2dnbGluZyh0cnVlKQogICAgdHJ5IHsKICAgICAgYXdhaXQgdHJhaW5pbmdBcGkudG9nZ2xlTUwoKQogICAgICBjb25zdCBtbCA9IGF3YWl0IHRyYWluaW5nQXBpLmdldE1MU3RhdHVzKCkKICAgICAgc2V0TWxTdGF0dXMobWwpCiAgICB9IGNhdGNoIHsgLyogaWdub3JlICovIH0KICAgIHNldFRvZ2dsaW5nKGZhbHNlKQogIH0KCiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlU3RhcnRUcmFpbigpIHsKICAgIHNldFN0YXJ0aW5nVHJhaW4odHJ1ZSkKICAgIHNldEVycm9yKG51bGwpCiAgICB0cnkgewogICAgICBhd2FpdCB0cmFpbmluZ0FwaS5zdGFydFRyYWluaW5nKHsgZXBvY2hzLCBsciB9KQogICAgICBjb25zdCBzID0gYXdhaXQgdHJhaW5pbmdBcGkuZ2V0VHJhaW5TdGF0dXMoKQogICAgICBzZXRUcmFpblN0YXR1cyhzKQogICAgfSBjYXRjaCAoZSkgewogICAgICBzZXRFcnJvcihlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIHN0YXJ0IHRyYWluaW5nJykKICAgIH0KICAgIHNldFN0YXJ0aW5nVHJhaW4oZmFsc2UpCiAgfQoKICBhc3luYyBmdW5jdGlvbiBoYW5kbGVTdGFydFBwbygpIHsKICAgIHNldFN0YXJ0aW5nUHBvKHRydWUpCiAgICBzZXRFcnJvcihudWxsKQogICAgdHJ5IHsKICAgICAgYXdhaXQgdHJhaW5pbmdBcGkuc3RhcnRQUE9UcmFpbmluZyh7IGl0ZXJhdGlvbnM6IHBwb0l0ZXJhdGlvbnMgfSkKICAgICAgY29uc3QgcyA9IGF3YWl0IHRyYWluaW5nQXBpLmdldFBQT1N0YXR1cygpCiAgICAgIHNldFBwb1N0YXR1cyhzKQogICAgfSBjYXRjaCAoZSkgewogICAgICBzZXRFcnJvcihlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3Nh' +
'Z2UgOiAnRmFpbGVkIHRvIHN0YXJ0IFBQTyB0cmFpbmluZycpCiAgICB9CiAgICBzZXRTdGFydGluZ1BwbyhmYWxzZSkKICB9CgogIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0VG91cm5hbWVudCgpIHsKICAgIHNldFN0YXJ0aW5nVG91cm4odHJ1ZSkKICAgIHNldEVycm9yKG51bGwpCiAgICB0cnkgewogICAgICBhd2FpdCB0cmFpbmluZ0FwaS5zdGFydFRvdXJuYW1lbnQoeyBnYW1lczogdG91cm5HYW1lcyB9KQogICAgICBjb25zdCBzID0gYXdhaXQgdHJhaW5pbmdBcGkuZ2V0VG91cm5hbWVudFN0YXR1cygpCiAgICAgIHNldFRvdXJuU3RhdHVzKHMpCiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHNldEVycm9yKGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6ICdGYWlsZWQgdG8gc3RhcnQgdG91cm5hbWVudCcpCiAgICB9CiAgICBzZXRTdGFydGluZ1RvdXJuKGZhbHNlKQogIH0KCiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVsb2FkTW9kZWwoKSB7CiAgICB0cnkgewogICAgICBhd2FpdCB0cmFpbmluZ0FwaS5yZWxvYWRNb2RlbCgpCiAgICAgIGNvbnN0IG1sID0gYXdhaXQgdHJhaW5pbmdBcGkuZ2V0TUxTdGF0dXMoKQogICAgICBzZXRNbFN0YXR1cyhtbCkKICAgIH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfQogIH0KCiAgaWYgKGxvYWRpbmcpIHsKICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT0icC02IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtNjQiPjxTcGlubmVyIHNpemU9ImxnIiBjbGFzc05hbWU9InRleHQtYWNjZW50LWJsdWUiIC8+PC9kaXY+CiAgfQoKICByZXR1cm4gKAogICAgPGRpdiBjbGFzc05hbWU9InAtNiBzcGFjZS15LTUiPgogICAgICA8ZGl2PgogICAgICAgIDxoMSBjbGFzc05hbWU9InRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LXRleHQtcHJpbWFyeSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyI+CiAgICAgICAgICA8QnJhaW4gY2xhc3NOYW1lPSJ3LTYgaC02IHRleHQtYWNjZW50LWdyZWVuIiAvPgogICAgICAgICAgTUwgVHJhaW5pbmcKICAgICAgICA8L2gxPgogICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1zbSB0ZXh0LXRleHQtc2Vjb25kYXJ5IG10LTAuNSI+VHJhaW4gYW5kIGV2YWx1YXRlIHRoZSBkZWNpc2lvbi1tYWtpbmcgbW9kZWw8L3A+CiAgICAgIDwvZGl2PgoKICAgICAge2Vycm9yICYmICgKICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNCBweS0yIGJnLXN0YXR1cy1lcnJvci8xMCBib3JkZXIgYm9yZGVyLXN0YXR1cy1lcnJvci8zMCByb3VuZGVkLWxnIHRleHQtc20gdGV4dC1zdGF0dXMtZXJyb3IiPgogICAgICAgICAgPEFsZXJ0Q2lyY2xlIGNsYXNzTmFtZT0idy00IGgtNCIgLz57ZXJyb3J9CiAgICAgICAgPC9kaXY+CiAgICAgICl9CgogICAgICB7LyogU3RhdHVzIGJhciAqL30KICAgICAgPGRpdiBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGZsZXgtd3JhcCI+CiAgICAgICAgPFN0YXR1c0JhZGdlCiAgICAgICAgICB2YXJpYW50PXttbFN0YXR1cz8uZW5hYmxlZCA/ICdzdWNjZXNzJyA6ICduZXV0cmFsJ30KICAgICAgICAgIGxhYmVsPXttbFN0YXR1cz8uZW5hYmxlZCA/ICdNTCBFbmFibGVkJyA6ICdNTCBEaXNhYmxlZCd9CiAgICAgICAgLz4KICAgICAgICA8U3RhdHVzQmFkZ2UKICAgICAgICAgIHZhcmlhbnQ9e21sU3RhdHVzPy5tb2RlbF9sb2FkZWQgPyAnc3VjY2VzcycgOiAnd2FybmluZyd9CiAgICAgICAgICBsYWJlbD17bWxTdGF0dXM/Lm1vZGVsX2xvYWRlZCA/ICdNb2RlbCBMb2FkZWQnIDogJ05vIE1vZGVsJ30KICAgICAgICAvPgogICAgICAgIDxTdGF0dXNCYWRnZQogICAgICAgICAgdmFyaWFudD17ZGF0YVN0YXR1cz8uZGF0YXNldF9leGlzdHMgPyAnaW5mbycgOiAnbmV1dHJhbCd9CiAgICAgICAgICBsYWJlbD17ZGF0YVN0YXR1cz8uZGF0YXNldF9leGlzdHMgPyBgJHtkYXRhU3RhdHVzLnNhbXBsZXN9IHNhbXBsZXNgIDogJ05vIERhdGFzZXQnfQogICAgICAgIC8+CiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSI+e21sU3RhdHVzPy5kZWNpc2lvbnNfY291bnQgPz8gMH0gZGVjaXNpb24gZmlsZXM8L3NwYW4+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzc05hbWU9ImdyaWQgZ3JpZC1jb2xzLTEgbGc6Z3JpZC1jb2xzLTIgZ2FwLTUiPgogICAgICAgIHsvKiBNTCBUb2dnbGUgKyBNb2RlbCAqL30KICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iYmctYmct' +
'c2Vjb25kYXJ5IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ib3JkZXItcHJpbWFyeSBwLTUgc3BhY2UteS00Ij4KICAgICAgICAgIDxoMyBjbGFzc05hbWU9InRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXRleHQtcHJpbWFyeSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+CiAgICAgICAgICAgIDxBY3Rpdml0eSBjbGFzc05hbWU9InctNCBoLTQgdGV4dC1hY2NlbnQtYmx1ZSIgLz4KICAgICAgICAgICAgTW9kZWwgU3RhdHVzCiAgICAgICAgICA8L2gzPgogICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idGV4dC1zbSB0ZXh0LXRleHQtc2Vjb25kYXJ5Ij5NTCBFbmdpbmU8L3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlVG9nZ2xlfSBkaXNhYmxlZD17dG9nZ2xpbmd9CiAgICAgICAgICAgICAgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIj4KICAgICAgICAgICAgICB7dG9nZ2xpbmcgPyA8U3Bpbm5lciBzaXplPSJzbSIgLz4gOiBtbFN0YXR1cz8uZW5hYmxlZAogICAgICAgICAgICAgICAgPyA8VG9nZ2xlUmlnaHQgY2xhc3NOYW1lPSJ3LTYgaC02IHRleHQtYWNjZW50LWdyZWVuIiAvPgogICAgICAgICAgICAgICAgOiA8VG9nZ2xlTGVmdCBjbGFzc05hbWU9InctNiBoLTYgdGV4dC10ZXh0LXRlcnRpYXJ5IiAvPgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e21sU3RhdHVzPy5lbmFibGVkID8gJ3RleHQtYWNjZW50LWdyZWVuJyA6ICd0ZXh0LXRleHQtdGVydGlhcnknfT4KICAgICAgICAgICAgICAgIHttbFN0YXR1cz8uZW5hYmxlZCA/ICdPbicgOiAnT2ZmJ30KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICB7bWxTdGF0dXM/Lm1vZGVsX3BhdGggJiYgKAogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkiPk1vZGVsOiB7bWxTdGF0dXMubW9kZWxfcGF0aH08L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgKX0KICAgICAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlUmVsb2FkTW9kZWx9CiAgICAgICAgICAgIGNsYXNzTmFtZT0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQteHMgZm9udC1tZWRpdW0gYmctYmctdGVydGlhcnkgdGV4dC10ZXh0LXNlY29uZGFyeSByb3VuZGVkLWxnIGhvdmVyOmJnLWJnLWhvdmVyIGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgdHJhbnNpdGlvbi1jb2xvcnMiPgogICAgICAgICAgICA8Um90YXRlQ3cgY2xhc3NOYW1lPSJ3LTMuNSBoLTMuNSIgLz4KICAgICAgICAgICAgUmVsb2FkIE1vZGVsCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIHtkYXRhU3RhdHVzICYmICgKICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9InNwYWNlLXktMiI+CiAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT0idGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtdGV4dC10ZXJ0aWFyeSB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIiPkRhdGFzZXQ8L2g0PgogICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJncmlkIGdyaWQtY29scy0yIGdhcC0yIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJweC0zIHB5LTIgYmctYmctdGVydGlhcnkgcm91bmRlZC1sZyI+CiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1bMTBweF0gdGV4dC10ZXh0LXRlcnRpYXJ5Ij5TYW1wbGVzPC9wPgogICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtc20gZm9udC1ib2xkIHRleHQtdGV4dC1wcmltYXJ5Ij57ZGF0YVN0YXR1cy5zYW1wbGVzLnRvTG9jYWxlU3RyaW5nKCl9PC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0icHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IHJvdW5kZWQtbGciPgogICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtWzEwcHhdIHRleHQtdGV4dC10ZXJ0aWFyeSI+RmVhdHVyZXM8L3A+CiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1zbSBmb250LWJvbGQgdGV4dC10ZXh0LXByaW1hcnkiPntkYXRhU3RhdHVzLmZlYXR1cmVzfTwvcD4KICAgICAgICAgICAgICAgIDwv' +
'ZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIHtkYXRhU3RhdHVzLmxhc3RfYnVpbHQgJiYgKAogICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LVsxMHB4XSB0ZXh0LXRleHQtdGVydGlhcnkiPkJ1aWx0OiB7bmV3IERhdGUoZGF0YVN0YXR1cy5sYXN0X2J1aWx0KS50b0xvY2FsZVN0cmluZygpfTwvcD4KICAgICAgICAgICAgICApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICl9CiAgICAgICAgPC9kaXY+CgogICAgICAgIHsvKiBTdXBlcnZpc2VkIFRyYWluaW5nICovfQogICAgICAgIDxkaXYgY2xhc3NOYW1lPSJiZy1iZy1zZWNvbmRhcnkgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHAtNSBzcGFjZS15LTQiPgogICAgICAgICAgPGgzIGNsYXNzTmFtZT0idGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtdGV4dC1wcmltYXJ5IGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIj4KICAgICAgICAgICAgPERhdGFiYXNlIGNsYXNzTmFtZT0idy00IGgtNCB0ZXh0LWFjY2VudC1ibHVlIiAvPgogICAgICAgICAgICBTdXBlcnZpc2VkIFRyYWluaW5nCiAgICAgICAgICA8L2gzPgogICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTMiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5Ij5FcG9jaHM8L2xhYmVsPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj17MX0gbWF4PXsxMDAwfSB2YWx1ZT17ZXBvY2hzfSBvbkNoYW5nZT17ZSA9PiBzZXRFcG9jaHMoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSl9CiAgICAgICAgICAgICAgICBjbGFzc05hbWU9Im10LTEgdy1mdWxsIHB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbGcgdGV4dC1zbSB0ZXh0LXRleHQtcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLWFjY2VudC1ibHVlLzUwIHRyYW5zaXRpb24tYWxsIiAvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSI+TGVhcm5pbmcgUmF0ZTwvbGFiZWw+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbWluPXswLjAwMDAxfSBtYXg9ezF9IHN0ZXA9ezAuMDAwMX0gdmFsdWU9e2xyfSBvbkNoYW5nZT17ZSA9PiBzZXRMcihOdW1iZXIoZS50YXJnZXQudmFsdWUpKX0KICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0ibXQtMSB3LWZ1bGwgcHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtdGV4dC1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpib3JkZXItYWNjZW50LWJsdWUvNTAgdHJhbnNpdGlvbi1hbGwiIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICB7dHJhaW5TdGF0dXM/LnJ1bm5pbmcgPyAoCiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJzcGFjZS15LTMiPgogICAgICAgICAgICAgIDxQcm9ncmVzc0JhciB2YWx1ZT17dHJhaW5TdGF0dXMuZXBvY2h9IG1heD17dHJhaW5TdGF0dXMudG90YWxfZXBvY2hzfSBsYWJlbD0iVHJhaW5pbmcgcHJvZ3Jlc3MiIC8+CiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImdyaWQgZ3JpZC1jb2xzLTMgZ2FwLTIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9InB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSByb3VuZGVkLWxnIj4KICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LVsxMHB4XSB0ZXh0LXRleHQtdGVydGlhcnkiPkVwb2NoPC9wPgogICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtc20gZm9udC1ib2xkIHRleHQtdGV4dC1wcmltYXJ5Ij57dHJhaW5TdGF0dXMuZXBvY2h9L3t0cmFpblN0YXR1cy50b3RhbF9lcG9jaHN9PC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0icHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IHJvdW5kZWQtbGciPgogICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtWzEwcHhdIHRleHQtdGV4dC10ZXJ0aWFyeSI+TG9zczwvcD4KICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LXNtIGZvbnQtYm9s' +
'ZCB0ZXh0LWFjY2VudC1hbWJlciI+e3RyYWluU3RhdHVzLmxvc3M/LnRvRml4ZWQoNCkgPz8gJ+KAlCd9PC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0icHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IHJvdW5kZWQtbGciPgogICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtWzEwcHhdIHRleHQtdGV4dC10ZXJ0aWFyeSI+QWNjdXJhY3k8L3A+CiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1zbSBmb250LWJvbGQgdGV4dC1hY2NlbnQtZ3JlZW4iPnt0cmFpblN0YXR1cy5hY2N1cmFjeSAhPSBudWxsID8gYCR7KHRyYWluU3RhdHVzLmFjY3VyYWN5ICogMTAwKS50b0ZpeGVkKDEpfSVgIDogJ+KAlCd9PC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgKSA6ICgKICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVTdGFydFRyYWlufSBkaXNhYmxlZD17c3RhcnRpbmdUcmFpbn0KICAgICAgICAgICAgICBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTQgcHktMi41IGJnLWFjY2VudC1ibHVlLzE1IHRleHQtYWNjZW50LWJsdWUgdGV4dC1zbSBmb250LW1lZGl1bSByb3VuZGVkLWxnIGhvdmVyOmJnLWFjY2VudC1ibHVlLzI1IGJvcmRlciBib3JkZXItYWNjZW50LWJsdWUvMzAgdHJhbnNpdGlvbi1jb2xvcnMgZGlzYWJsZWQ6b3BhY2l0eS01MCI+CiAgICAgICAgICAgICAge3N0YXJ0aW5nVHJhaW4gPyA8U3Bpbm5lciBzaXplPSJzbSIgLz4gOiA8UGxheSBjbGFzc05hbWU9InctNCBoLTQiIC8+fQogICAgICAgICAgICAgIFN0YXJ0IFRyYWluaW5nCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgKX0KICAgICAgICAgIHt0cmFpblN0YXR1cyAmJiAhdHJhaW5TdGF0dXMucnVubmluZyAmJiB0cmFpblN0YXR1cy5iZXN0X2FjY3VyYWN5ICE9IG51bGwgJiYgKAogICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXNlY29uZGFyeSI+QmVzdCBhY2N1cmFjeTogPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LWFjY2VudC1ncmVlbiBmb250LW1lZGl1bSI+eyh0cmFpblN0YXR1cy5iZXN0X2FjY3VyYWN5ICogMTAwKS50b0ZpeGVkKDEpfSU8L3NwYW4+PC9wPgogICAgICAgICAgKX0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgey8qIFBQTyBUcmFpbmluZyAqL30KICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iYmctYmctc2Vjb25kYXJ5IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ib3JkZXItcHJpbWFyeSBwLTUgc3BhY2UteS00Ij4KICAgICAgICAgIDxoMyBjbGFzc05hbWU9InRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXRleHQtcHJpbWFyeSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+CiAgICAgICAgICAgIDxaYXAgY2xhc3NOYW1lPSJ3LTQgaC00IHRleHQtYWNjZW50LXB1cnBsZSIgLz4KICAgICAgICAgICAgUFBPIFJlaW5mb3JjZW1lbnQgTGVhcm5pbmcKICAgICAgICAgIDwvaDM+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSI+SXRlcmF0aW9uczwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj17MX0gbWF4PXs1MDB9IHZhbHVlPXtwcG9JdGVyYXRpb25zfSBvbkNoYW5nZT17ZSA9PiBzZXRQcG9JdGVyYXRpb25zKE51bWJlcihlLnRhcmdldC52YWx1ZSkpfQogICAgICAgICAgICAgIGNsYXNzTmFtZT0ibXQtMSB3LTMyIHB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbGcgdGV4dC1zbSB0ZXh0LXRleHQtcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLWFjY2VudC1ibHVlLzUwIHRyYW5zaXRpb24tYWxsIiAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICB7cHBvU3RhdHVzPy5ydW5uaW5nID8gKAogICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ic3BhY2UteS0zIj4KICAgICAgICAgICAgICA8UHJvZ3Jlc3NCYXIgdmFsdWU9e3Bwb1N0YXR1cy5pdGVyYXRpb259IG1heD17cHBvU3RhdHVzLnRvdGFsX2l0ZXJhdGlvbnN9IGxhYmVsPSJQUE8gdHJhaW5pbmcgcHJvZ3Jlc3MiIC8+CiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzc05h' +
'bWU9InB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSByb3VuZGVkLWxnIj4KICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LVsxMHB4XSB0ZXh0LXRleHQtdGVydGlhcnkiPkF2ZyBSZXdhcmQ8L3A+CiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1zbSBmb250LWJvbGQgdGV4dC1hY2NlbnQtYW1iZXIiPntwcG9TdGF0dXMuYXZnX3Jld2FyZD8udG9GaXhlZCgzKSA/PyAn4oCUJ308L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJweC0zIHB5LTIgYmctYmctdGVydGlhcnkgcm91bmRlZC1sZyI+CiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1bMTBweF0gdGV4dC10ZXh0LXRlcnRpYXJ5Ij5XaW4gUmF0ZTwvcD4KICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LWFjY2VudC1ncmVlbiI+e3Bwb1N0YXR1cy53aW5fcmF0ZSAhPSBudWxsID8gYCR7KHBwb1N0YXR1cy53aW5fcmF0ZSAqIDEwMCkudG9GaXhlZCgxKX0lYCA6ICfigJQnfTwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICkgOiAoCiAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlU3RhcnRQcG99IGRpc2FibGVkPXtzdGFydGluZ1Bwb30KICAgICAgICAgICAgICBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTQgcHktMi41IGJnLWFjY2VudC1wdXJwbGUvMTUgdGV4dC1hY2NlbnQtcHVycGxlIHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1sZyBob3ZlcjpiZy1hY2NlbnQtcHVycGxlLzI1IGJvcmRlciBib3JkZXItYWNjZW50LXB1cnBsZS8zMCB0cmFuc2l0aW9uLWNvbG9ycyBkaXNhYmxlZDpvcGFjaXR5LTUwIj4KICAgICAgICAgICAgICB7c3RhcnRpbmdQcG8gPyA8U3Bpbm5lciBzaXplPSJzbSIgLz4gOiA8UGxheSBjbGFzc05hbWU9InctNCBoLTQiIC8+fQogICAgICAgICAgICAgIFN0YXJ0IFBQTyBUcmFpbmluZwogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICl9CiAgICAgICAgPC9kaXY+CgogICAgICAgIHsvKiBUb3VybmFtZW50ICovfQogICAgICAgIDxkaXYgY2xhc3NOYW1lPSJiZy1iZy1zZWNvbmRhcnkgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHAtNSBzcGFjZS15LTQiPgogICAgICAgICAgPGgzIGNsYXNzTmFtZT0idGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtdGV4dC1wcmltYXJ5IGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIj4KICAgICAgICAgICAgPFN3b3JkcyBjbGFzc05hbWU9InctNCBoLTQgdGV4dC1hY2NlbnQtYW1iZXIiIC8+CiAgICAgICAgICAgIFRvdXJuYW1lbnQgRXZhbHVhdGlvbgogICAgICAgICAgPC9oMz4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5Ij5HYW1lcyBwZXIgbWF0Y2h1cDwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj17MTB9IG1heD17MTAwMH0gdmFsdWU9e3RvdXJuR2FtZXN9IG9uQ2hhbmdlPXtlID0+IHNldFRvdXJuR2FtZXMoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSl9CiAgICAgICAgICAgICAgY2xhc3NOYW1lPSJtdC0xIHctMzIgcHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtdGV4dC1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpib3JkZXItYWNjZW50LWJsdWUvNTAgdHJhbnNpdGlvbi1hbGwiIC8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIHt0b3VyblN0YXR1cz8ucnVubmluZyA/ICgKICAgICAgICAgICAgPFByb2dyZXNzQmFyIHZhbHVlPXt0b3VyblN0YXR1cy5nYW1lc19jb21wbGV0ZWR9IG1heD17dG91cm5TdGF0dXMudG90YWxfZ2FtZXN9IGxhYmVsPSJUb3VybmFtZW50IHByb2dyZXNzIiAvPgogICAgICAgICAgKSA6ICgKICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVTdGFydFRvdXJuYW1lbnR9IGRpc2FibGVkPXtzdGFydGluZ1RvdXJufQogICAgICAgICAgICAgIGNsYXNzTmFtZT0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNCBweS0yLjUgYmctYWNjZW50LWFtYmVyLzE1IHRleHQtYWNjZW50LWFtYmVyIHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1sZyBob3Zl' +
'cjpiZy1hY2NlbnQtYW1iZXIvMjUgYm9yZGVyIGJvcmRlci1hY2NlbnQtYW1iZXIvMzAgdHJhbnNpdGlvbi1jb2xvcnMgZGlzYWJsZWQ6b3BhY2l0eS01MCI+CiAgICAgICAgICAgICAge3N0YXJ0aW5nVG91cm4gPyA8U3Bpbm5lciBzaXplPSJzbSIgLz4gOiA8VHJvcGh5IGNsYXNzTmFtZT0idy00IGgtNCIgLz59CiAgICAgICAgICAgICAgU3RhcnQgVG91cm5hbWVudAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICl9CiAgICAgICAgICB7dG91cm5SZXN1bHRzICYmICgKICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9Im10LTMiPgogICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9InctZnVsbCB0ZXh0LXNtIj4KICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT0iYm9yZGVyLWIgYm9yZGVyLWJvcmRlci1wcmltYXJ5Ij4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPSJweC0zIHB5LTIgdGV4dC1sZWZ0IHRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGZvbnQtbWVkaXVtIj5QbGF5ZXI8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9InB4LTMgcHktMiB0ZXh0LXJpZ2h0IHRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGZvbnQtbWVkaXVtIj5XaW5zPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPSJweC0zIHB5LTIgdGV4dC1yaWdodCB0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSBmb250LW1lZGl1bSI+R2FtZXM8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9InB4LTMgcHktMiB0ZXh0LXJpZ2h0IHRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGZvbnQtbWVkaXVtIj5XaW4gUmF0ZTwvdGg+CiAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzTmFtZT0iZGl2aWRlLXkgZGl2aWRlLWJvcmRlci1wcmltYXJ5Ij4KICAgICAgICAgICAgICAgICAge3RvdXJuUmVzdWx0cy5wbGF5ZXJzLnNvcnQoKGEsIGIpID0+IGIud2luX3JhdGUgLSBhLndpbl9yYXRlKS5tYXAoKHAsIGkpID0+ICgKICAgICAgICAgICAgICAgICAgICA8dHIga2V5PXtwLm5hbWV9IGNsYXNzTmFtZT0iaG92ZXI6YmctYmctaG92ZXIgdHJhbnNpdGlvbi1jb2xvcnMiPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT0icHgtMyBweS0yIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAge2kgPT09IDAgJiYgPFRyb3BoeSBjbGFzc05hbWU9InctMyBoLTMgdGV4dC1hY2NlbnQtYW1iZXIiIC8+fQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQtdGV4dC1wcmltYXJ5Ij57cC5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPSJweC0zIHB5LTIgdGV4dC1yaWdodCB0ZXh0LXRleHQtc2Vjb25kYXJ5Ij57cC53aW5zfTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPSJweC0zIHB5LTIgdGV4dC1yaWdodCB0ZXh0LXRleHQtc2Vjb25kYXJ5Ij57cC5nYW1lc308L3RkPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT0icHgtMyBweS0yIHRleHQtcmlnaHQgZm9udC1zZW1pYm9sZCB0ZXh0LWFjY2VudC1ibHVlIj57KHAud2luX3JhdGUgKiAxMDApLnRvRml4ZWQoMSl9JTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgKSl9CiAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICApCn0K'
# frontend/commander-ai-lab-ui/src/pages/TrainingPage.tsx (42,191 bytes)
$b = 'aW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCcKaW1wb3J0IHsKICBCcmFpbiwgUGxheSwgU3F1YXJlLCBSb3RhdGVDdywgRGF0YWJhc2UsIFRyb3BoeSwgQWxlcnRDaXJjbGUsCiAgQWN0aXZpdHksIFphcCwgU3dvcmRzLCBGaWxlVGV4dCwgQ3B1LCBDaGVja0NpcmNsZSwKICBDaGV2cm9uRG93biwgQ2hldnJvblVwLCBEb3dubG9hZCwgSGFyZERyaXZlLCBMYXllcnMsIFNldHRpbmdzCn0gZnJvbSAnbHVjaWRlLXJlYWN0JwppbXBvcnQgeyBTcGlubmVyLCBTdGF0dXNCYWRnZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tbW9uJwppbXBvcnQgeyB0cmFpbmluZ0FwaSB9IGZyb20gJy4uL2FwaScKaW1wb3J0IHsgdXNlUG9sbGluZyB9IGZyb20gJy4uL2hvb2tzL3VzZVBvbGxpbmcnCmltcG9ydCB0eXBlIHsKICBNTFN0YXR1cywgTUxEYXRhU3RhdHVzLCBNTFRyYWluU3RhdHVzLCBQUE9UcmFpblN0YXR1cywKICBUb3VybmFtZW50U3RhdHVzLCBUb3VybmFtZW50UmVzdWx0cywgTUxNb2RlbEluZm8KfSBmcm9tICcuLi90eXBlcycKCi8vIOKUgOKUgCBQcm9ncmVzcyBCYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIFByb2dyZXNzQmFyKHsgdmFsdWUsIG1heCwgbGFiZWwsIGNvbG9yID0gJ2JnLWFjY2VudC1ibHVlJyB9OiB7IHZhbHVlOiBudW1iZXI7IG1heDogbnVtYmVyOyBsYWJlbDogc3RyaW5nOyBjb2xvcj86IHN0cmluZyB9KSB7CiAgY29uc3QgcGN0ID0gbWF4ID4gMCA/IE1hdGgubWluKCh2YWx1ZSAvIG1heCkgKiAxMDAsIDEwMCkgOiAwCiAgcmV0dXJuICgKICAgIDxkaXY+CiAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdGV4dC14cyBtYi0xIj4KICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQtdGV4dC1zZWNvbmRhcnkiPntsYWJlbH08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LXRleHQtdGVydGlhcnkiPnt2YWx1ZX0gLyB7bWF4fSAoe3BjdC50b0ZpeGVkKDApfSUpPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzc05hbWU9InctZnVsbCBoLTIgYmctYmctdGVydGlhcnkgcm91bmRlZC1mdWxsIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgPGRpdiBjbGFzc05hbWU9eydoLWZ1bGwgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMCAnICsgY29sb3J9IHN0eWxlPXt7IHdpZHRoOiBgJHtwY3R9JWAgfX0gLz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICApCn0KCi8vIOKUgOKUgCBQaGFzZSBCYWRnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKY29uc3QgUEhBU0VfU1RZTEVTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gewogIGlkbGU6ICdiZy1iZy10ZXJ0aWFyeSB0ZXh0LXRleHQtdGVydGlhcnknLAogIHN0YXJ0aW5nOiAnYmctYWNjZW50LWJsdWUvMTUgdGV4dC1hY2NlbnQtYmx1ZSBhbmltYXRlLXB1bHNlJywKICBidWlsZGluZzogJ2JnLWFjY2VudC1wdXJwbGUvMTUgdGV4dC1hY2NlbnQtcHVycGxlIGFuaW1hdGUtcHVsc2UnLAogIHRyYWluaW5nOiAnYmctYWNjZW50LWJsdWUvMTUgdGV4dC1hY2NlbnQtYmx1ZSBhbmltYXRlLXB1bHNlJywKICBldmFsdWF0aW5nOiAnYmctYWNjZW50LXRlYWwvMTUgdGV4dC1hY2NlbnQtdGVhbCBhbmltYXRlLXB1bHNlJywKICBydW5uaW5nOiAnYmctYWNjZW50LWFtYmVyLzE1IHRleHQtYWNjZW50LWFtYmVyIGFuaW1hdGUtcHVsc2UnLAogIGRvbmU6ICdiZy1hY2NlbnQtZ3JlZW4vMTUgdGV4dC1hY2NlbnQtZ3JlZW4nLAogIGVycm9yOiAnYmctYWNjZW50LXJlZC8xNSB0ZXh0LWFjY2VudC1yZWQnLAp9CgpmdW5jdGlvbiBQaGFzZUJhZGdlKHsgcGhhc2UgfTogeyBwaGFzZTogc3RyaW5nIH0pIHsKICBjb25zdCBjbHMgPSBQSEFTRV9TVFlMRVNbcGhhc2VdIHx8IFBIQVNFX1NUWUxFUy5pZGxlCiAgcmV0dXJuICgKICAgIDxzcGFuIGNsYXNzTmFtZT17J3RleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRy' +
'YWNraW5nLXdpZGVyIHB4LTIgcHktMC41IHJvdW5kZWQgJyArIGNsc30+CiAgICAgIHtwaGFzZX0KICAgIDwvc3Bhbj4KICApCn0KCi8vIOKUgOKUgCBNZXRyaWMgQ2FyZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gTWV0cmljQ2FyZCh7IGxhYmVsLCB2YWx1ZSwgYWNjZW50IH06IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IG51bWJlcjsgYWNjZW50Pzogc3RyaW5nIH0pIHsKICByZXR1cm4gKAogICAgPGRpdiBjbGFzc05hbWU9InB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSByb3VuZGVkLWxnIj4KICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LVsxMHB4XSB0ZXh0LXRleHQtdGVydGlhcnkiPntsYWJlbH08L3A+CiAgICAgIDxwIGNsYXNzTmFtZT17J3RleHQtc20gZm9udC1ib2xkICcgKyAoYWNjZW50IHx8ICd0ZXh0LXRleHQtcHJpbWFyeScpfT57dmFsdWV9PC9wPgogICAgPC9kaXY+CiAgKQp9CgovLyDilIDilIAgQ29sbGFwc2libGUgU2VjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gU2VjdGlvbih7IHRpdGxlLCBpY29uLCBjaGlsZHJlbiwgZGVmYXVsdE9wZW4gPSB0cnVlLCBjb2xvciA9ICd0ZXh0LWFjY2VudC1ibHVlJyB9OiB7CiAgdGl0bGU6IHN0cmluZzsgaWNvbjogUmVhY3QuUmVhY3ROb2RlOyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOyBkZWZhdWx0T3Blbj86IGJvb2xlYW47IGNvbG9yPzogc3RyaW5nCn0pIHsKICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShkZWZhdWx0T3BlbikKICByZXR1cm4gKAogICAgPGRpdiBjbGFzc05hbWU9ImJnLWJnLXNlY29uZGFyeSByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgb3ZlcmZsb3ctaGlkZGVuIj4KICAgICAgPGJ1dHRvbgogICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE9wZW4oIW9wZW4pfQogICAgICAgIGNsYXNzTmFtZT0idy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC01IHB5LTQgaG92ZXI6YmctYmctaG92ZXIgdHJhbnNpdGlvbi1jb2xvcnMiCiAgICAgID4KICAgICAgICA8aDMgY2xhc3NOYW1lPSJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC10ZXh0LXByaW1hcnkgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiPgogICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjb2xvcn0+e2ljb259PC9zcGFuPgogICAgICAgICAge3RpdGxlfQogICAgICAgIDwvaDM+CiAgICAgICAge29wZW4gPyA8Q2hldnJvblVwIGNsYXNzTmFtZT0idy00IGgtNCB0ZXh0LXRleHQtdGVydGlhcnkiIC8+IDogPENoZXZyb25Eb3duIGNsYXNzTmFtZT0idy00IGgtNCB0ZXh0LXRleHQtdGVydGlhcnkiIC8+fQogICAgICA8L2J1dHRvbj4KICAgICAge29wZW4gJiYgPGRpdiBjbGFzc05hbWU9InB4LTUgcGItNSBzcGFjZS15LTQgYm9yZGVyLXQgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHB0LTQiPntjaGlsZHJlbn08L2Rpdj59CiAgICA8L2Rpdj4KICApCn0KCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyBNYWluIFRyYWluaW5nIFBhZ2UKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCmV4cG9ydCBmdW5jdGlvbiBUcmFpbmluZ1BhZ2UoKSB7CiAgLy8gU3RhdHVzIHN0YXRlcwogIGNvbnN0IFttbFN0YXR1cywgc2V0TWxTdGF0dXNdID0gdXNlU3RhdGU8TUxTdGF0dXMgfCBudWxsPihudWxsKQogIGNvbnN0IFtkYXRhU3RhdHVzLCBzZXREYXRhU3RhdHVzXSA9IHVzZVN0' +
'YXRlPE1MRGF0YVN0YXR1cyB8IG51bGw+KG51bGwpCiAgY29uc3QgW21vZGVsSW5mbywgc2V0TW9kZWxJbmZvXSA9IHVzZVN0YXRlPE1MTW9kZWxJbmZvIHwgbnVsbD4obnVsbCkKICBjb25zdCBbdHJhaW5TdGF0dXMsIHNldFRyYWluU3RhdHVzXSA9IHVzZVN0YXRlPE1MVHJhaW5TdGF0dXMgfCBudWxsPihudWxsKQogIGNvbnN0IFtwcG9TdGF0dXMsIHNldFBwb1N0YXR1c10gPSB1c2VTdGF0ZTxQUE9UcmFpblN0YXR1cyB8IG51bGw+KG51bGwpCiAgY29uc3QgW3RvdXJuU3RhdHVzLCBzZXRUb3VyblN0YXR1c10gPSB1c2VTdGF0ZTxUb3VybmFtZW50U3RhdHVzIHwgbnVsbD4obnVsbCkKICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKQogIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCkKCiAgLy8gU3VwZXJ2aXNlZCB0cmFpbmluZyBjb25maWcKICBjb25zdCBbZXBvY2hzLCBzZXRFcG9jaHNdID0gdXNlU3RhdGUoNTApCiAgY29uc3QgW2xyLCBzZXRMcl0gPSB1c2VTdGF0ZSgwLjAwMSkKICBjb25zdCBbYmF0Y2hTaXplLCBzZXRCYXRjaFNpemVdID0gdXNlU3RhdGUoMjU2KQogIGNvbnN0IFtwYXRpZW5jZSwgc2V0UGF0aWVuY2VdID0gdXNlU3RhdGUoMTApCiAgY29uc3QgW3JlYnVpbGREYXRhc2V0LCBzZXRSZWJ1aWxkRGF0YXNldF0gPSB1c2VTdGF0ZSh0cnVlKQoKICAvLyBQUE8gY29uZmlnCiAgY29uc3QgW3Bwb0l0ZXJhdGlvbnMsIHNldFBwb0l0ZXJhdGlvbnNdID0gdXNlU3RhdGUoMTAwKQogIGNvbnN0IFtwcG9FcGlzb2Rlcywgc2V0UHBvRXBpc29kZXNdID0gdXNlU3RhdGUoNjQpCiAgY29uc3QgW3Bwb0Vwb2Nocywgc2V0UHBvRXBvY2hzXSA9IHVzZVN0YXRlKDQpCiAgY29uc3QgW3Bwb0JhdGNoU2l6ZSwgc2V0UHBvQmF0Y2hTaXplXSA9IHVzZVN0YXRlKDI1NikKICBjb25zdCBbcHBvTHIsIHNldFBwb0xyXSA9IHVzZVN0YXRlKDAuMDAwMykKICBjb25zdCBbcHBvQ2xpcEVwcywgc2V0UHBvQ2xpcEVwc10gPSB1c2VTdGF0ZSgwLjIpCiAgY29uc3QgW3Bwb0VudHJvcHksIHNldFBwb0VudHJvcHldID0gdXNlU3RhdGUoMC4wMSkKICBjb25zdCBbcHBvT3Bwb25lbnQsIHNldFBwb09wcG9uZW50XSA9IHVzZVN0YXRlKCdoZXVyaXN0aWMnKQogIGNvbnN0IFtwcG9QbGF5c3R5bGUsIHNldFBwb1BsYXlzdHlsZV0gPSB1c2VTdGF0ZSgnbWlkcmFuZ2UnKQoKICAvLyBUb3VybmFtZW50IGNvbmZpZwogIGNvbnN0IFt0b3VybkVwaXNvZGVzLCBzZXRUb3VybkVwaXNvZGVzXSA9IHVzZVN0YXRlKDUwKQogIGNvbnN0IFt0b3VyblBsYXlzdHlsZSwgc2V0VG91cm5QbGF5c3R5bGVdID0gdXNlU3RhdGUoJ21pZHJhbmdlJykKCiAgLy8gQWN0aW9uIHN0YXRlcwogIGNvbnN0IFtzdGFydGluZ1RyYWluLCBzZXRTdGFydGluZ1RyYWluXSA9IHVzZVN0YXRlKGZhbHNlKQogIGNvbnN0IFtzdGFydGluZ1Bwbywgc2V0U3RhcnRpbmdQcG9dID0gdXNlU3RhdGUoZmFsc2UpCiAgY29uc3QgW3N0YXJ0aW5nVG91cm4sIHNldFN0YXJ0aW5nVG91cm5dID0gdXNlU3RhdGUoZmFsc2UpCiAgY29uc3QgW3JlbG9hZGluZywgc2V0UmVsb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKQogIGNvbnN0IFtzaG93U3VwQWR2YW5jZWQsIHNldFNob3dTdXBBZHZhbmNlZF0gPSB1c2VTdGF0ZShmYWxzZSkKICBjb25zdCBbc2hvd1Bwb0FkdmFuY2VkLCBzZXRTaG93UHBvQWR2YW5jZWRdID0gdXNlU3RhdGUoZmFsc2UpCgogIC8vIOKUgOKUgCBJbml0aWFsIExvYWQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgY29uc3QgbG9hZEFsbCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IFttbCwgZGF0YSwgbW9kZWwsIHRyYWluLCBwcG8sIHRvdXJuXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICB0cmFpbmluZ0FwaS5nZXRNTFN0YXR1cygpLmNhdGNoKCgpID0+IG51bGwpLAogICAgICAgIHRyYWluaW5nQXBpLmdldERhdGFTdGF0dXMoKS5jYXRjaCgoKSA9PiBudWxsKSwKICAgICAgICB0cmFpbmluZ0FwaS5nZXRNb2RlbEluZm8oKS5jYXRjaCgoKSA9PiBudWxsKSwKICAgICAgICB0cmFpbmluZ0FwaS5nZXRUcmFpblN0YXR1cygpLmNhdGNoKCgpID0+IG51bGwpLAogICAgICAgIHRyYWlu' +
'aW5nQXBpLmdldFBQT1N0YXR1cygpLmNhdGNoKCgpID0+IG51bGwpLAogICAgICAgIHRyYWluaW5nQXBpLmdldFRvdXJuYW1lbnRTdGF0dXMoKS5jYXRjaCgoKSA9PiBudWxsKSwKICAgICAgXSkKICAgICAgaWYgKG1sKSBzZXRNbFN0YXR1cyhtbCkKICAgICAgaWYgKGRhdGEpIHNldERhdGFTdGF0dXMoZGF0YSkKICAgICAgaWYgKG1vZGVsKSBzZXRNb2RlbEluZm8obW9kZWwpCiAgICAgIGlmICh0cmFpbikgc2V0VHJhaW5TdGF0dXModHJhaW4pCiAgICAgIGlmIChwcG8pIHNldFBwb1N0YXR1cyhwcG8pCiAgICAgIGlmICh0b3Vybikgc2V0VG91cm5TdGF0dXModG91cm4pCiAgICB9IGNhdGNoIHsgLyogaWdub3JlICovIH0KICAgIHNldExvYWRpbmcoZmFsc2UpCiAgfSwgW10pCgogIHVzZUVmZmVjdCgoKSA9PiB7IGxvYWRBbGwoKSB9LCBbbG9hZEFsbF0pCgogIC8vIOKUgOKUgCBQb2xsaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogIGNvbnN0IGlzVHJhaW5pbmcgPSB0cmFpblN0YXR1cz8ucnVubmluZyB8fCBmYWxzZQogIGNvbnN0IGlzUHBvID0gcHBvU3RhdHVzPy5ydW5uaW5nIHx8IGZhbHNlCiAgY29uc3QgaXNUb3VybiA9IHRvdXJuU3RhdHVzPy5ydW5uaW5nIHx8IGZhbHNlCiAgY29uc3QgYW55UnVubmluZyA9IGlzVHJhaW5pbmcgfHwgaXNQcG8gfHwgaXNUb3VybgoKICB1c2VQb2xsaW5nKGFzeW5jICgpID0+IHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHMgPSBhd2FpdCB0cmFpbmluZ0FwaS5nZXRUcmFpblN0YXR1cygpCiAgICAgIHNldFRyYWluU3RhdHVzKHMpCiAgICAgIGlmICghcy5ydW5uaW5nICYmIHMucGhhc2UgPT09ICdkb25lJykgewogICAgICAgIC8vIFJlZnJlc2ggbW9kZWwgaW5mbyArIGRhdGEgd2hlbiB0cmFpbmluZyBjb21wbGV0ZXMKICAgICAgICBjb25zdCBbbW9kZWwsIGRhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgdHJhaW5pbmdBcGkuZ2V0TW9kZWxJbmZvKCkuY2F0Y2goKCkgPT4gbnVsbCksCiAgICAgICAgICB0cmFpbmluZ0FwaS5nZXREYXRhU3RhdHVzKCkuY2F0Y2goKCkgPT4gbnVsbCksCiAgICAgICAgXSkKICAgICAgICBpZiAobW9kZWwpIHNldE1vZGVsSW5mbyhtb2RlbCkKICAgICAgICBpZiAoZGF0YSkgc2V0RGF0YVN0YXR1cyhkYXRhKQogICAgICB9CiAgICB9IGNhdGNoIHsgLyogaWdub3JlICovIH0KICB9LCAyMDAwLCBpc1RyYWluaW5nKQoKICB1c2VQb2xsaW5nKGFzeW5jICgpID0+IHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHMgPSBhd2FpdCB0cmFpbmluZ0FwaS5nZXRQUE9TdGF0dXMoKQogICAgICBzZXRQcG9TdGF0dXMocykKICAgICAgaWYgKCFzLnJ1bm5pbmcgJiYgcy5waGFzZSA9PT0gJ2RvbmUnKSB7CiAgICAgICAgY29uc3QgW21vZGVsLCBkYXRhXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICAgIHRyYWluaW5nQXBpLmdldE1vZGVsSW5mbygpLmNhdGNoKCgpID0+IG51bGwpLAogICAgICAgICAgdHJhaW5pbmdBcGkuZ2V0RGF0YVN0YXR1cygpLmNhdGNoKCgpID0+IG51bGwpLAogICAgICAgIF0pCiAgICAgICAgaWYgKG1vZGVsKSBzZXRNb2RlbEluZm8obW9kZWwpCiAgICAgICAgaWYgKGRhdGEpIHNldERhdGFTdGF0dXMoZGF0YSkKICAgICAgfQogICAgfSBjYXRjaCB7IC8qIGlnbm9yZSAqLyB9CiAgfSwgMjAwMCwgaXNQcG8pCgogIHVzZVBvbGxpbmcoYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgY29uc3QgcyA9IGF3YWl0IHRyYWluaW5nQXBpLmdldFRvdXJuYW1lbnRTdGF0dXMoKQogICAgICBzZXRUb3VyblN0YXR1cyhzKQogICAgfSBjYXRjaCB7IC8qIGlnbm9yZSAqLyB9CiAgfSwgMjAwMCwgaXNUb3VybikKCiAgLy8g4pSA4pSAIEFjdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlVG9nZ2xlTG9nZ2luZygpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IG5ld1N0YXRlID0gIShtbFN0YXR1cz8ubWxfbG9nZ2luZ19lbmFibGVkID8/IGZhbHNlKQogICAgICBhd2FpdCB0cmFpbmluZ0FwaS50' +
'b2dnbGVNTChuZXdTdGF0ZSkKICAgICAgY29uc3QgbWwgPSBhd2FpdCB0cmFpbmluZ0FwaS5nZXRNTFN0YXR1cygpCiAgICAgIHNldE1sU3RhdHVzKG1sKQogICAgfSBjYXRjaCB7IC8qIGlnbm9yZSAqLyB9CiAgfQoKICBhc3luYyBmdW5jdGlvbiBoYW5kbGVSZWxvYWRNb2RlbCgpIHsKICAgIHNldFJlbG9hZGluZyh0cnVlKQogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzID0gYXdhaXQgdHJhaW5pbmdBcGkucmVsb2FkTW9kZWwoKQogICAgICBzZXRNb2RlbEluZm8ocmVzLnN0YXR1cykKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgc2V0RXJyb3IoZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogJ0ZhaWxlZCB0byByZWxvYWQgbW9kZWwnKQogICAgfQogICAgc2V0UmVsb2FkaW5nKGZhbHNlKQogIH0KCiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlU3RhcnRUcmFpbigpIHsKICAgIHNldFN0YXJ0aW5nVHJhaW4odHJ1ZSkKICAgIHNldEVycm9yKG51bGwpCiAgICB0cnkgewogICAgICBhd2FpdCB0cmFpbmluZ0FwaS5zdGFydFRyYWluaW5nKHsgZXBvY2hzLCBsciwgYmF0Y2hTaXplLCBwYXRpZW5jZSwgcmVidWlsZERhdGFzZXQgfSkKICAgICAgY29uc3QgcyA9IGF3YWl0IHRyYWluaW5nQXBpLmdldFRyYWluU3RhdHVzKCkKICAgICAgc2V0VHJhaW5TdGF0dXMocykKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgc2V0RXJyb3IoZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogJ0ZhaWxlZCB0byBzdGFydCB0cmFpbmluZycpCiAgICB9CiAgICBzZXRTdGFydGluZ1RyYWluKGZhbHNlKQogIH0KCiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlU3RhcnRQcG8oKSB7CiAgICBzZXRTdGFydGluZ1Bwbyh0cnVlKQogICAgc2V0RXJyb3IobnVsbCkKICAgIHRyeSB7CiAgICAgIGF3YWl0IHRyYWluaW5nQXBpLnN0YXJ0UFBPVHJhaW5pbmcoewogICAgICAgIGl0ZXJhdGlvbnM6IHBwb0l0ZXJhdGlvbnMsCiAgICAgICAgZXBpc29kZXNQZXJJdGVyOiBwcG9FcGlzb2RlcywKICAgICAgICBwcG9FcG9jaHMsCiAgICAgICAgYmF0Y2hTaXplOiBwcG9CYXRjaFNpemUsCiAgICAgICAgbHI6IHBwb0xyLAogICAgICAgIGNsaXBFcHNpbG9uOiBwcG9DbGlwRXBzLAogICAgICAgIGVudHJvcHlDb2VmZjogcHBvRW50cm9weSwKICAgICAgICBvcHBvbmVudDogcHBvT3Bwb25lbnQsCiAgICAgICAgcGxheXN0eWxlOiBwcG9QbGF5c3R5bGUsCiAgICAgIH0pCiAgICAgIGNvbnN0IHMgPSBhd2FpdCB0cmFpbmluZ0FwaS5nZXRQUE9TdGF0dXMoKQogICAgICBzZXRQcG9TdGF0dXMocykKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgc2V0RXJyb3IoZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogJ0ZhaWxlZCB0byBzdGFydCBQUE8gdHJhaW5pbmcnKQogICAgfQogICAgc2V0U3RhcnRpbmdQcG8oZmFsc2UpCiAgfQoKICBhc3luYyBmdW5jdGlvbiBoYW5kbGVTdGFydFRvdXJuYW1lbnQoKSB7CiAgICBzZXRTdGFydGluZ1RvdXJuKHRydWUpCiAgICBzZXRFcnJvcihudWxsKQogICAgdHJ5IHsKICAgICAgYXdhaXQgdHJhaW5pbmdBcGkuc3RhcnRUb3VybmFtZW50KHsgZXBpc29kZXM6IHRvdXJuRXBpc29kZXMsIHBsYXlzdHlsZTogdG91cm5QbGF5c3R5bGUgfSkKICAgICAgY29uc3QgcyA9IGF3YWl0IHRyYWluaW5nQXBpLmdldFRvdXJuYW1lbnRTdGF0dXMoKQogICAgICBzZXRUb3VyblN0YXR1cyhzKQogICAgfSBjYXRjaCAoZSkgewogICAgICBzZXRFcnJvcihlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIHN0YXJ0IHRvdXJuYW1lbnQnKQogICAgfQogICAgc2V0U3RhcnRpbmdUb3VybihmYWxzZSkKICB9CgogIC8vIOKUgOKUgCBSZW5kZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgaWYgKGxvYWRpbmcpIHsKICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT0icC02IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtNjQiPjxTcGlubmVyIHNpemU9ImxnIiBjbGFzc05hbWU9InRleHQtYWNjZW50LWJsdWUiIC8+PC9kaXY+CiAgfQoKICBjb25zdCB0cmFpbkRhdGFzZXQgPSBkYXRhU3RhdHVzPy5kYXRhc2V0cz8uWyd0cmFpbiddCiAgY29uc3QgaGFzRGVjaXNpb25zID0gKG1sU3RhdHVzPy50b3RhbF9kZWNpc2lvbnMgPz8g' +
'MCkgPiAwCiAgY29uc3QgaGFzRGF0YXNldCA9ICEhdHJhaW5EYXRhc2V0CiAgY29uc3QgaGFzTW9kZWwgPSBtb2RlbEluZm8/LmxvYWRlZCA9PT0gdHJ1ZQoKICByZXR1cm4gKAogICAgPGRpdiBjbGFzc05hbWU9InAtNiBzcGFjZS15LTUiPgogICAgICB7LyogUGFnZSBIZWFkZXIgKi99CiAgICAgIDxkaXY+CiAgICAgICAgPGgxIGNsYXNzTmFtZT0idGV4dC0yeGwgZm9udC1ib2xkIHRleHQtdGV4dC1wcmltYXJ5IGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIj4KICAgICAgICAgIDxCcmFpbiBjbGFzc05hbWU9InctNiBoLTYgdGV4dC1hY2NlbnQtZ3JlZW4iIC8+CiAgICAgICAgICBNTCBUcmFpbmluZyBQaXBlbGluZQogICAgICAgIDwvaDE+CiAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LXNtIHRleHQtdGV4dC1zZWNvbmRhcnkgbXQtMC41Ij5Db2xsZWN0IGRhdGEsIHRyYWluIG1vZGVscywgYW5kIGV2YWx1YXRlIHBlcmZvcm1hbmNlPC9wPgogICAgICA8L2Rpdj4KCiAgICAgIHsvKiBFcnJvciBiYW5uZXIgKi99CiAgICAgIHtlcnJvciAmJiAoCiAgICAgICAgPGRpdiBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTQgcHktMiBiZy1hY2NlbnQtcmVkLzEwIGJvcmRlciBib3JkZXItYWNjZW50LXJlZC8zMCByb3VuZGVkLWxnIHRleHQtc20gdGV4dC1hY2NlbnQtcmVkIj4KICAgICAgICAgIDxBbGVydENpcmNsZSBjbGFzc05hbWU9InctNCBoLTQgZmxleC1zaHJpbmstMCIgLz4KICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0iZmxleC0xIj57ZXJyb3J9PC9zcGFuPgogICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRFcnJvcihudWxsKX0gY2xhc3NOYW1lPSJ0ZXh0LWFjY2VudC1yZWQvNjAgaG92ZXI6dGV4dC1hY2NlbnQtcmVkIHRleHQteHMiPmRpc21pc3M8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgKX0KCiAgICAgIHsvKiBQaXBlbGluZSBvdmVydmlldyBiYXIgKi99CiAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTMgYmctYmctc2Vjb25kYXJ5IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ib3JkZXItcHJpbWFyeSBweC01IHB5LTMiPgogICAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+CiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3ctMiBoLTIgcm91bmRlZC1mdWxsICcgKyAobWxTdGF0dXM/Lm1sX2xvZ2dpbmdfZW5hYmxlZCA/ICdiZy1hY2NlbnQtZ3JlZW4nIDogJ2JnLXRleHQtdGVydGlhcnknKX0gLz4KICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtc2Vjb25kYXJ5Ij5Mb2dnaW5nIHttbFN0YXR1cz8ubWxfbG9nZ2luZ19lbmFibGVkID8gJ09uJyA6ICdPZmYnfTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQtYm9yZGVyLXByaW1hcnkiPnw8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC1zZWNvbmRhcnkiPnttbFN0YXR1cz8udG90YWxfZGVjaXNpb25zID8/IDB9IGRlY2lzaW9uczwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQtYm9yZGVyLXByaW1hcnkiPnw8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC1zZWNvbmRhcnkiPnt0cmFpbkRhdGFzZXQgPyBgJHt0cmFpbkRhdGFzZXQuc2FtcGxlcy50b0xvY2FsZVN0cmluZygpfSB0cmFpbmluZyBzYW1wbGVzYCA6ICdObyBkYXRhc2V0J308L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LWJvcmRlci1wcmltYXJ5Ij58PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtc2Vjb25kYXJ5Ij57KGRhdGFTdGF0dXM/LmNoZWNrcG9pbnRzPy5sZW5ndGggPz8gMCl9IGNoZWNrcG9pbnRzPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idGV4dC1ib3JkZXItcHJpbWFyeSI+fDwvc3Bhbj4KICAgICAgICA8U3RhdHVzQmFkZ2UKICAgICAgICAgIHZhcmlhbnQ9e2hhc01vZGVsID8gJ3N1Y2Nlc3MnIDogJ25ldXRyYWwnfQogICAgICAgICAgbGFiZWw9e2hhc01vZGVsID8gYE1vZGVsIG9uICR7bW9kZWxJbmZvPy5kZXZpY2UgPz8gJz8nfWAgOiAnTm8gbW9kZWwnfQogICAgICAgIC8+CiAgICAgICAge2FueVJ1bm5pbmcgJiYgKAogICAgICAgICAgPD4KICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LWJvcmRlci1wcmlt' +
'YXJ5Ij58PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1hY2NlbnQtYmx1ZSBhbmltYXRlLXB1bHNlIj5QaXBlbGluZSBydW5uaW5nLi4uPC9zcGFuPgogICAgICAgICAgPC8+CiAgICAgICAgKX0KICAgICAgPC9kaXY+CgogICAgICB7Lyog4pWQ4pWQ4pWQIFBoYXNlIDE6IERhdGEgQ29sbGVjdGlvbiDilZDilZDilZAgKi99CiAgICAgIDxTZWN0aW9uIHRpdGxlPSJQaGFzZSAxIOKAlCBEYXRhIENvbGxlY3Rpb24iIGljb249ezxGaWxlVGV4dCBjbGFzc05hbWU9InctNCBoLTQiIC8+fSBjb2xvcj0idGV4dC1hY2NlbnQtdGVhbCI+CiAgICAgICAgPGRpdiBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiI+CiAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXNlY29uZGFyeSI+CiAgICAgICAgICAgIFJ1biBiYXRjaCBzaW11bGF0aW9ucyB3aXRoIE1MIGxvZ2dpbmcgZW5hYmxlZCB0byBjb2xsZWN0IGRlY2lzaW9uIGRhdGEuCiAgICAgICAgICA8L3A+CiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUxvZ2dpbmd9CiAgICAgICAgICAgIGNsYXNzTmFtZT17J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZC1sZyBib3JkZXIgdHJhbnNpdGlvbi1jb2xvcnMgJyArCiAgICAgICAgICAgICAgKG1sU3RhdHVzPy5tbF9sb2dnaW5nX2VuYWJsZWQKICAgICAgICAgICAgICAgID8gJ2JnLWFjY2VudC1ncmVlbi8xNSB0ZXh0LWFjY2VudC1ncmVlbiBib3JkZXItYWNjZW50LWdyZWVuLzMwIGhvdmVyOmJnLWFjY2VudC1ncmVlbi8yNScKICAgICAgICAgICAgICAgIDogJ2JnLWJnLXRlcnRpYXJ5IHRleHQtdGV4dC1zZWNvbmRhcnkgYm9yZGVyLWJvcmRlci1wcmltYXJ5IGhvdmVyOmJnLWJnLWhvdmVyJwogICAgICAgICAgICAgICl9CiAgICAgICAgICA+CiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsndy0yIGgtMiByb3VuZGVkLWZ1bGwgJyArIChtbFN0YXR1cz8ubWxfbG9nZ2luZ19lbmFibGVkID8gJ2JnLWFjY2VudC1ncmVlbicgOiAnYmctdGV4dC10ZXJ0aWFyeScpfSAvPgogICAgICAgICAgICB7bWxTdGF0dXM/Lm1sX2xvZ2dpbmdfZW5hYmxlZCA/ICdMb2dnaW5nIEVuYWJsZWQnIDogJ0VuYWJsZSBMb2dnaW5nJ30KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICB7LyogRGVjaXNpb24gZmlsZXMgKi99CiAgICAgICAgeyhkYXRhU3RhdHVzPy5kZWNpc2lvbkZpbGVzPy5sZW5ndGggPz8gMCkgPiAwID8gKAogICAgICAgICAgPGRpdiBjbGFzc05hbWU9InNwYWNlLXktMSI+CiAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9InRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXRleHQtdGVydGlhcnkgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIj5EZWNpc2lvbiBGaWxlczwvaDQ+CiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJtYXgtaC0zNiBvdmVyZmxvdy15LWF1dG8gc3BhY2UteS0xIj4KICAgICAgICAgICAgICB7ZGF0YVN0YXR1cyEuZGVjaXNpb25GaWxlcy5tYXAoZiA9PiAoCiAgICAgICAgICAgICAgICA8ZGl2IGtleT17Zi5uYW1lfSBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC0zIHB5LTEuNSBiZy1iZy10ZXJ0aWFyeSByb3VuZGVkLWxnIHRleHQteHMiPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQtdGV4dC1zZWNvbmRhcnkgZm9udC1tb25vIHRydW5jYXRlIj57Zi5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtdGV4dC10ZXJ0aWFyeSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2YuZGVjaXNpb25zLnRvTG9jYWxlU3RyaW5nKCl9IGRlY2lzaW9uczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj57KGYuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMCl9IEtCPC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICkpfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICkgOiAoCiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgaXRhbGljIj5ObyBkZWNpc2lvbiBmaWxlcyB5ZXQuIFJ1biBi' +
'YXRjaCBzaW1zIHdpdGggbG9nZ2luZyBlbmFibGVkLjwvZGl2PgogICAgICAgICl9CiAgICAgIDwvU2VjdGlvbj4KCiAgICAgIHsvKiDilZDilZDilZAgUGhhc2UgMjogRGF0YXNldCAmIENoZWNrcG9pbnRzIOKVkOKVkOKVkCAqL30KICAgICAgPFNlY3Rpb24gdGl0bGU9IlBoYXNlIDIg4oCUIERhdGFzZXQgJiBNb2RlbCBBcnRpZmFjdHMiIGljb249ezxEYXRhYmFzZSBjbGFzc05hbWU9InctNCBoLTQiIC8+fSBjb2xvcj0idGV4dC1hY2NlbnQtcHVycGxlIj4KICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNCI+CiAgICAgICAgICB7LyogRGF0YXNldCBzcGxpdHMgKi99CiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ic3BhY2UteS0yIj4KICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT0idGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtdGV4dC10ZXJ0aWFyeSB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIiPkRhdGFzZXQgU3BsaXRzPC9oND4KICAgICAgICAgICAge09iamVjdC5rZXlzKGRhdGFTdGF0dXM/LmRhdGFzZXRzID8/IHt9KS5sZW5ndGggPiAwID8gKAogICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJncmlkIGdyaWQtY29scy0zIGdhcC0yIj4KICAgICAgICAgICAgICAgIHsoWyd0cmFpbicsICd2YWwnLCAndGVzdCddIGFzIGNvbnN0KS5tYXAoc3BsaXQgPT4gewogICAgICAgICAgICAgICAgICBjb25zdCBkcyA9IGRhdGFTdGF0dXM/LmRhdGFzZXRzPy5bc3BsaXRdCiAgICAgICAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3NwbGl0fSBjbGFzc05hbWU9InB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSByb3VuZGVkLWxnIj4KICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1bMTBweF0gdGV4dC10ZXh0LXRlcnRpYXJ5IHVwcGVyY2FzZSI+e3NwbGl0fTwvcD4KICAgICAgICAgICAgICAgICAgICAgIHtkcyA/ICgKICAgICAgICAgICAgICAgICAgICAgICAgPD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtc20gZm9udC1ib2xkIHRleHQtdGV4dC1wcmltYXJ5Ij57ZHMuc2FtcGxlcy50b0xvY2FsZVN0cmluZygpfTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQtWzEwcHhdIHRleHQtdGV4dC10ZXJ0aWFyeSI+e2RzLmZlYXR1cmVzfSBmZWF0dXJlczwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC8+CiAgICAgICAgICAgICAgICAgICAgICApIDogKAogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGl0YWxpYyI+Tm90IGJ1aWx0PC9wPgogICAgICAgICAgICAgICAgICAgICAgKX0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgfSl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICkgOiAoCiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSBpdGFsaWMiPk5vIGRhdGFzZXQgYnVpbHQgeWV0LiBUcmFpbmluZyB3aWxsIGJ1aWxkIGl0IGF1dG9tYXRpY2FsbHkuPC9wPgogICAgICAgICAgICApfQogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgey8qIENoZWNrcG9pbnRzICovfQogICAgICAgICAgPGRpdiBjbGFzc05hbWU9InNwYWNlLXktMiI+CiAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9InRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXRleHQtdGVydGlhcnkgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIj5DaGVja3BvaW50czwvaDQ+CiAgICAgICAgICAgIHsoZGF0YVN0YXR1cz8uY2hlY2twb2ludHM/Lmxlbmd0aCA/PyAwKSA+IDAgPyAoCiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9Im1heC1oLTI4IG92ZXJmbG93LXktYXV0byBzcGFjZS15LTEiPgogICAgICAgICAgICAgICAge2RhdGFTdGF0dXMhLmNoZWNrcG9pbnRzLm1hcChja3B0ID0+ICgKICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2NrcHQubmFtZX0gY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMyBweS0xLjUgYmctYmctdGVydGlhcnkgcm91bmRlZC1sZyB0ZXh0LXhzIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQtdGV4dC1zZWNvbmRhcnkgZm9udC1tb25vIHRydW5jYXRlIj57Y2twdC5uYW1lfTwvc3Bh' +
'bj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQtdGV4dC10ZXJ0aWFyeSI+eyhja3B0LnNpemUgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgxKX0gTUI8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgKSl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICkgOiAoCiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSBpdGFsaWMiPk5vIGNoZWNrcG9pbnRzIHlldC4gVHJhaW4gYSBtb2RlbCB0byBnZW5lcmF0ZSB0aGVtLjwvcD4KICAgICAgICAgICAgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICB7LyogTW9kZWwgaW5mbyArIHJlbG9hZCAqL30KICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB0LTIgYm9yZGVyLXQgYm9yZGVyLWJvcmRlci1wcmltYXJ5Ij4KICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyI+CiAgICAgICAgICAgIDxDcHUgY2xhc3NOYW1lPSJ3LTQgaC00IHRleHQtdGV4dC10ZXJ0aWFyeSIgLz4KICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9InRleHQteHMiPgogICAgICAgICAgICAgIHtoYXNNb2RlbCA/ICgKICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idGV4dC1hY2NlbnQtZ3JlZW4gZm9udC1tZWRpdW0iPgogICAgICAgICAgICAgICAgICBNb2RlbCBsb2FkZWQgb24ge21vZGVsSW5mbz8uZGV2aWNlfSB8IHttb2RlbEluZm8/LmlucHV0X2RpbX0gZmVhdHVyZXMgfCB7bW9kZWxJbmZvPy5udW1fYWN0aW9uc30gYWN0aW9ucwogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICkgOiAoCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQtdGV4dC10ZXJ0aWFyeSI+Tm8gbW9kZWwgbG9hZGVke21vZGVsSW5mbz8uZXJyb3IgPyBgIOKAlCAke21vZGVsSW5mby5lcnJvcn1gIDogJyd9PC9zcGFuPgogICAgICAgICAgICAgICl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVJlbG9hZE1vZGVsfQogICAgICAgICAgICBkaXNhYmxlZD17cmVsb2FkaW5nfQogICAgICAgICAgICBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSBiZy1iZy10ZXJ0aWFyeSB0ZXh0LXRleHQtc2Vjb25kYXJ5IHJvdW5kZWQtbGcgaG92ZXI6YmctYmctaG92ZXIgYm9yZGVyIGJvcmRlci1ib3JkZXItcHJpbWFyeSB0cmFuc2l0aW9uLWNvbG9ycyBkaXNhYmxlZDpvcGFjaXR5LTUwIgogICAgICAgICAgPgogICAgICAgICAgICB7cmVsb2FkaW5nID8gPFNwaW5uZXIgc2l6ZT0ic20iIC8+IDogPFJvdGF0ZUN3IGNsYXNzTmFtZT0idy0zIGgtMyIgLz59CiAgICAgICAgICAgIFJlbG9hZCBNb2RlbAogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIHsvKiBFdmFsIHJlc3VsdHMgKi99CiAgICAgICAge2RhdGFTdGF0dXM/LmV2YWxSZXN1bHRzICYmICgKICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJwdC0yIGJvcmRlci10IGJvcmRlci1ib3JkZXItcHJpbWFyeSBzcGFjZS15LTIiPgogICAgICAgICAgICA8aDQgY2xhc3NOYW1lPSJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC10ZXh0LXRlcnRpYXJ5IHVwcGVyY2FzZSB0cmFja2luZy13aWRlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+CiAgICAgICAgICAgICAgPENoZWNrQ2lyY2xlIGNsYXNzTmFtZT0idy0zLjUgaC0zLjUgdGV4dC1hY2NlbnQtZ3JlZW4iIC8+CiAgICAgICAgICAgICAgTGF0ZXN0IEV2YWx1YXRpb24KICAgICAgICAgICAgPC9oND4KICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImdyaWQgZ3JpZC1jb2xzLTIgbWQ6Z3JpZC1jb2xzLTQgZ2FwLTIiPgogICAgICAgICAgICAgIHtPYmplY3QuZW50cmllcyhkYXRhU3RhdHVzLmV2YWxSZXN1bHRzKS5tYXAoKFtrLCB2XSkgPT4gKAogICAgICAgICAgICAgICAgPE1ldHJpY0NhcmQKICAgICAgICAgICAgICAgICAga2V5PXtrfQogICAgICAgICAgICAgICAgICBsYWJlbD17ay5yZXBsYWNlKC9fL2csICcgJyl9CiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0eXBlb2YgdiA9PT0gJ251bWJlcicgPyAoay5pbmNsdWRlcygnYWNjdXJhY3knKSB8fCBrLmluY2x1ZGVz' +
'KCdyYXRlJykgPyBgJHsodiAqIDEwMCkudG9GaXhlZCgxKX0lYCA6IHYudG9GaXhlZCg0KSkgOiBTdHJpbmcodil9CiAgICAgICAgICAgICAgICAgIGFjY2VudD17ay5pbmNsdWRlcygnYWNjdXJhY3knKSA/ICd0ZXh0LWFjY2VudC1ncmVlbicgOiB1bmRlZmluZWR9CiAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICkpfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICl9CiAgICAgIDwvU2VjdGlvbj4KCiAgICAgIHsvKiDilZDilZDilZAgUGhhc2UgMzogU3VwZXJ2aXNlZCBUcmFpbmluZyDilZDilZDilZAgKi99CiAgICAgIDxTZWN0aW9uIHRpdGxlPSJQaGFzZSAzIOKAlCBTdXBlcnZpc2VkIFRyYWluaW5nIiBpY29uPXs8QWN0aXZpdHkgY2xhc3NOYW1lPSJ3LTQgaC00IiAvPn0+CiAgICAgICAgey8qIENvbmZpZyAqL30KICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ic3BhY2UteS0zIj4KICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJncmlkIGdyaWQtY29scy0yIGdhcC0zIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSBibG9jayBtYi0xIj5FcG9jaHM8L2xhYmVsPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj17MX0gbWF4PXsxMDAwfSB2YWx1ZT17ZXBvY2hzfSBvbkNoYW5nZT17ZSA9PiBzZXRFcG9jaHMoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSl9CiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNUcmFpbmluZ30KICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0idy1mdWxsIHB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbGcgdGV4dC1zbSB0ZXh0LXRleHQtcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLWFjY2VudC1ibHVlLzUwIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOm9wYWNpdHktNTAiIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGJsb2NrIG1iLTEiPkxlYXJuaW5nIFJhdGU8L2xhYmVsPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj17MC4wMDAwMX0gbWF4PXsxfSBzdGVwPXswLjAwMDF9IHZhbHVlPXtscn0gb25DaGFuZ2U9e2UgPT4gc2V0THIoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSl9CiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNUcmFpbmluZ30KICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0idy1mdWxsIHB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbGcgdGV4dC1zbSB0ZXh0LXRleHQtcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLWFjY2VudC1ibHVlLzUwIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOm9wYWNpdHktNTAiIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgey8qIEFkdmFuY2VkIHRvZ2dsZSAqL30KICAgICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0U2hvd1N1cEFkdmFuY2VkKCFzaG93U3VwQWR2YW5jZWQpfSBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGhvdmVyOnRleHQtdGV4dC1zZWNvbmRhcnkgdHJhbnNpdGlvbi1jb2xvcnMiPgogICAgICAgICAgICA8U2V0dGluZ3MgY2xhc3NOYW1lPSJ3LTMgaC0zIiAvPgogICAgICAgICAgICB7c2hvd1N1cEFkdmFuY2VkID8gJ0hpZGUnIDogJ1Nob3cnfSBhZHZhbmNlZCBvcHRpb25zCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIHtzaG93U3VwQWR2YW5jZWQgJiYgKAogICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iZ3JpZCBncmlkLWNvbHMtMyBnYXAtMyBhbmltYXRlLWZhZGUtaW4iPgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSBibG9jayBtYi0xIj5CYXRjaCBTaXplPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj17MTZ9IG1heD17MjA0OH0gdmFsdWU9e2JhdGNoU2l6ZX0gb25DaGFuZ2U9e2UgPT4gc2V0QmF0Y2hTaXplKE51bWJlcihlLnRhcmdldC52YWx1ZSkpfQogICAgICAgICAgICAgICAgICBkaXNhYmxlZD17' +
'aXNUcmFpbmluZ30KICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSJ3LWZ1bGwgcHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtdGV4dC1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpib3JkZXItYWNjZW50LWJsdWUvNTAgdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6b3BhY2l0eS01MCIgLz4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgYmxvY2sgbWItMSI+RWFybHkgU3RvcCBQYXRpZW5jZTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49ezF9IG1heD17MTAwfSB2YWx1ZT17cGF0aWVuY2V9IG9uQ2hhbmdlPXtlID0+IHNldFBhdGllbmNlKE51bWJlcihlLnRhcmdldC52YWx1ZSkpfQogICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNUcmFpbmluZ30KICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSJ3LWZ1bGwgcHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtdGV4dC1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpib3JkZXItYWNjZW50LWJsdWUvNTAgdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6b3BhY2l0eS01MCIgLz4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iZmxleCBpdGVtcy1lbmQgcGItMSI+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXhzIHRleHQtdGV4dC1zZWNvbmRhcnkgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUiPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQ9e3JlYnVpbGREYXRhc2V0fSBvbkNoYW5nZT17ZSA9PiBzZXRSZWJ1aWxkRGF0YXNldChlLnRhcmdldC5jaGVja2VkKX0KICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNUcmFpbmluZ30KICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9InJvdW5kZWQgYm9yZGVyLWJvcmRlci1wcmltYXJ5IGJnLWJnLXRlcnRpYXJ5IHRleHQtYWNjZW50LWJsdWUgZm9jdXM6cmluZy1hY2NlbnQtYmx1ZS8zMCB3LTMuNSBoLTMuNSIgLz4KICAgICAgICAgICAgICAgICAgUmVidWlsZCBkYXRhc2V0CiAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICl9CiAgICAgICAgPC9kaXY+CgogICAgICAgIHsvKiBUcmFpbmluZyBzdGF0dXMgLyBzdGFydCBidXR0b24gKi99CiAgICAgICAge2lzVHJhaW5pbmcgfHwgKHRyYWluU3RhdHVzPy5waGFzZSAmJiB0cmFpblN0YXR1cy5waGFzZSAhPT0gJ2lkbGUnKSA/ICgKICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJzcGFjZS15LTMgYmctYmctdGVydGlhcnkvNTAgcm91bmRlZC14bCBwLTQgYm9yZGVyIGJvcmRlci1ib3JkZXItcHJpbWFyeSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+CiAgICAgICAgICAgICAgICA8UGhhc2VCYWRnZSBwaGFzZT17dHJhaW5TdGF0dXMhLnBoYXNlfSAvPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC1zZWNvbmRhcnkiPnt0cmFpblN0YXR1cyEubWVzc2FnZX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAge3RyYWluU3RhdHVzIS5zdGFydGVkX2F0ICYmICgKICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idGV4dC1bMTBweF0gdGV4dC10ZXh0LXRlcnRpYXJ5Ij5TdGFydGVkOiB7bmV3IERhdGUodHJhaW5TdGF0dXMhLnN0YXJ0ZWRfYXQpLnRvTG9jYWxlVGltZVN0cmluZygpfTwvc3Bhbj4KICAgICAgICAgICAgICApfQogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIHsvKiBQcm9ncmVzcyBiYXIg4oCUIG9ubHkgaW4gdHJhaW5pbmcgcGhhc2UgKi99CiAgICAgICAgICAgIHsodHJhaW5TdGF0dXMhLnBoYXNlID09PSAndHJhaW5pbmcnIHx8IHRyYWluU3RhdHVzIS5waGFzZSA9PT0gJ2RvbmUnKSAmJiB0cmFpblN0YXR1cyEu' +
'dG90YWxfZXBvY2hzID4gMCAmJiAoCiAgICAgICAgICAgICAgPFByb2dyZXNzQmFyCiAgICAgICAgICAgICAgICB2YWx1ZT17dHJhaW5TdGF0dXMhLmN1cnJlbnRfZXBvY2h9CiAgICAgICAgICAgICAgICBtYXg9e3RyYWluU3RhdHVzIS50b3RhbF9lcG9jaHN9CiAgICAgICAgICAgICAgICBsYWJlbD0iRXBvY2ggcHJvZ3Jlc3MiCiAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgKX0KCiAgICAgICAgICAgIHsvKiBMaXZlIG1ldHJpY3MgZHVyaW5nIHRyYWluaW5nICovfQogICAgICAgICAgICB7dHJhaW5TdGF0dXMhLm1ldHJpY3MgJiYgKAogICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJncmlkIGdyaWQtY29scy0yIG1kOmdyaWQtY29scy00IGdhcC0yIj4KICAgICAgICAgICAgICAgIHtPYmplY3QuZW50cmllcyh0cmFpblN0YXR1cyEubWV0cmljcykubWFwKChbaywgdl0pID0+IHsKICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGwKICAgICAgICAgICAgICAgICAgY29uc3QgaXNBY2MgPSBrLmluY2x1ZGVzKCdhY2N1cmFjeScpIHx8IGsuaW5jbHVkZXMoJ2FjYycpCiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTG9zcyA9IGsuaW5jbHVkZXMoJ2xvc3MnKQogICAgICAgICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgICAgIDxNZXRyaWNDYXJkCiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2t9CiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17ay5yZXBsYWNlKC9fL2csICcgJyl9CiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aXNBY2MgPyBgJHsodiAqIDEwMCkudG9GaXhlZCgxKX0lYCA6IHYudG9GaXhlZCg0KX0KICAgICAgICAgICAgICAgICAgICAgIGFjY2VudD17aXNBY2MgPyAndGV4dC1hY2NlbnQtZ3JlZW4nIDogaXNMb3NzID8gJ3RleHQtYWNjZW50LWFtYmVyJyA6IHVuZGVmaW5lZH0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB9KX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgKX0KCiAgICAgICAgICAgIHsvKiBGaW5hbCByZXN1bHQgKi99CiAgICAgICAgICAgIHt0cmFpblN0YXR1cyEucGhhc2UgPT09ICdkb25lJyAmJiB0cmFpblN0YXR1cyEucmVzdWx0ICYmICgKICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0icHQtMiBib3JkZXItdCBib3JkZXItYm9yZGVyLXByaW1hcnkgc3BhY2UteS0yIj4KICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9InRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWFjY2VudC1ncmVlbiBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41Ij4KICAgICAgICAgICAgICAgICAgPENoZWNrQ2lyY2xlIGNsYXNzTmFtZT0idy0zLjUgaC0zLjUiIC8+IFRyYWluaW5nIENvbXBsZXRlCiAgICAgICAgICAgICAgICA8L2g0PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImdyaWQgZ3JpZC1jb2xzLTIgbWQ6Z3JpZC1jb2xzLTQgZ2FwLTIiPgogICAgICAgICAgICAgICAgICA8TWV0cmljQ2FyZCBsYWJlbD0iRGV2aWNlIiB2YWx1ZT17dHJhaW5TdGF0dXMhLnJlc3VsdC5kZXZpY2V9IC8+CiAgICAgICAgICAgICAgICAgIDxNZXRyaWNDYXJkIGxhYmVsPSJDaGVja3BvaW50IiB2YWx1ZT17dHJhaW5TdGF0dXMhLnJlc3VsdC5jaGVja3BvaW50LnNwbGl0KCcvJykucG9wKCkgfHwgJ+KAlCd9IC8+CiAgICAgICAgICAgICAgICAgIHt0cmFpblN0YXR1cyEucmVzdWx0LmV2YWx1YXRpb24gJiYgT2JqZWN0LmVudHJpZXModHJhaW5TdGF0dXMhLnJlc3VsdC5ldmFsdWF0aW9uKS5tYXAoKFtrLCB2XSkgPT4gKAogICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2ID09PSAnbnVtYmVyJyA/ICgKICAgICAgICAgICAgICAgICAgICAgIDxNZXRyaWNDYXJkIGtleT17a30gbGFiZWw9e2sucmVwbGFjZSgvXy9nLCAnICcpfQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ay5pbmNsdWRlcygnYWNjdXJhY3knKSA/IGAkeyh2ICogMTAwKS50b0ZpeGVkKDEpfSVgIDogdi50b0ZpeGVkKDQpfQogICAgICAgICAgICAgICAgICAgICAgICBhY2NlbnQ9e2suaW5jbHVkZXMoJ2FjY3VyYWN5JykgPyAndGV4dC1hY2NlbnQtZ3JlZW4nIDogdW5kZWZpbmVkfSAvPgogICAgICAgICAgICAgICAgICAgICkgOiBudWxsCiAgICAgICAgICAgICAgICAgICkpfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICl9CgogICAg' +
'ICAgICAgICB7LyogRXJyb3Igc3RhdGUgKi99CiAgICAgICAgICAgIHt0cmFpblN0YXR1cyEucGhhc2UgPT09ICdlcnJvcicgJiYgdHJhaW5TdGF0dXMhLmVycm9yICYmICgKICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iZmxleCBpdGVtcy1zdGFydCBnYXAtMiBiZy1hY2NlbnQtcmVkLzEwIGJvcmRlciBib3JkZXItYWNjZW50LXJlZC8yMCByb3VuZGVkLWxnIHB4LTMgcHktMiI+CiAgICAgICAgICAgICAgICA8QWxlcnRDaXJjbGUgY2xhc3NOYW1lPSJ3LTQgaC00IHRleHQtYWNjZW50LXJlZCBtdC0wLjUgZmxleC1zaHJpbmstMCIgLz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LWFjY2VudC1yZWQiPnt0cmFpblN0YXR1cyEuZXJyb3J9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgKSA6ICgKICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyI+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdGFydFRyYWlufQogICAgICAgICAgICAgIGRpc2FibGVkPXtzdGFydGluZ1RyYWluIHx8ICFoYXNEZWNpc2lvbnMgfHwgaXNQcG99CiAgICAgICAgICAgICAgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC00IHB5LTIuNSBiZy1hY2NlbnQtYmx1ZS8xNSB0ZXh0LWFjY2VudC1ibHVlIHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1sZyBob3ZlcjpiZy1hY2NlbnQtYmx1ZS8yNSBib3JkZXIgYm9yZGVyLWFjY2VudC1ibHVlLzMwIHRyYW5zaXRpb24tY29sb3JzIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAge3N0YXJ0aW5nVHJhaW4gPyA8U3Bpbm5lciBzaXplPSJzbSIgLz4gOiA8UGxheSBjbGFzc05hbWU9InctNCBoLTQiIC8+fQogICAgICAgICAgICAgIFN0YXJ0IFRyYWluaW5nCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICB7IWhhc0RlY2lzaW9ucyAmJiAoCiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSBpdGFsaWMiPkVuYWJsZSBsb2dnaW5nIGFuZCBydW4gYmF0Y2ggc2ltcyBmaXJzdCB0byBnZW5lcmF0ZSBkZWNpc2lvbiBkYXRhLjwvc3Bhbj4KICAgICAgICAgICAgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICl9CiAgICAgIDwvU2VjdGlvbj4KCiAgICAgIHsvKiDilZDilZDilZAgUGhhc2UgNDogUFBPIFJlaW5mb3JjZW1lbnQgTGVhcm5pbmcg4pWQ4pWQ4pWQICovfQogICAgICA8U2VjdGlvbiB0aXRsZT0iUGhhc2UgNCDigJQgUFBPIFJlaW5mb3JjZW1lbnQgTGVhcm5pbmciIGljb249ezxaYXAgY2xhc3NOYW1lPSJ3LTQgaC00IiAvPn0gY29sb3I9InRleHQtYWNjZW50LXB1cnBsZSIgZGVmYXVsdE9wZW49e2ZhbHNlfT4KICAgICAgICA8cCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXNlY29uZGFyeSI+CiAgICAgICAgICBGaW5lLXR1bmUgdGhlIHN1cGVydmlzZWQgbW9kZWwgdXNpbmcgUFBPIHNlbGYtcGxheSBhZ2FpbnN0IGFuIG9wcG9uZW50IHBvbGljeS4KICAgICAgICA8L3A+CgogICAgICAgIHsvKiBDb25maWcgKi99CiAgICAgICAgPGRpdiBjbGFzc05hbWU9ImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTMiPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgYmxvY2sgbWItMSI+SXRlcmF0aW9uczwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj17MX0gbWF4PXsxMDAwfSB2YWx1ZT17cHBvSXRlcmF0aW9uc30gb25DaGFuZ2U9e2UgPT4gc2V0UHBvSXRlcmF0aW9ucyhOdW1iZXIoZS50YXJnZXQudmFsdWUpKX0KICAgICAgICAgICAgICBkaXNhYmxlZD17aXNQcG99CiAgICAgICAgICAgICAgY2xhc3NOYW1lPSJ3LWZ1bGwgcHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtdGV4dC1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpib3JkZXItYWNjZW50LWJsdWUvNTAgdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6b3BhY2l0eS01MCIgLz4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0i' +
'dGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgYmxvY2sgbWItMSI+T3Bwb25lbnQ8L2xhYmVsPgogICAgICAgICAgICA8c2VsZWN0IHZhbHVlPXtwcG9PcHBvbmVudH0gb25DaGFuZ2U9e2UgPT4gc2V0UHBvT3Bwb25lbnQoZS50YXJnZXQudmFsdWUpfQogICAgICAgICAgICAgIGRpc2FibGVkPXtpc1Bwb30KICAgICAgICAgICAgICBjbGFzc05hbWU9InctZnVsbCBweC0zIHB5LTIgYmctYmctdGVydGlhcnkgYm9yZGVyIGJvcmRlci1ib3JkZXItcHJpbWFyeSByb3VuZGVkLWxnIHRleHQtc20gdGV4dC10ZXh0LXByaW1hcnkgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOmJvcmRlci1hY2NlbnQtYmx1ZS81MCB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpvcGFjaXR5LTUwIj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJoZXVyaXN0aWMiPkhldXJpc3RpYzwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InJhbmRvbSI+UmFuZG9tPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ic2VsZiI+U2VsZi1QbGF5PC9vcHRpb24+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0U2hvd1Bwb0FkdmFuY2VkKCFzaG93UHBvQWR2YW5jZWQpfSBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGhvdmVyOnRleHQtdGV4dC1zZWNvbmRhcnkgdHJhbnNpdGlvbi1jb2xvcnMiPgogICAgICAgICAgPFNldHRpbmdzIGNsYXNzTmFtZT0idy0zIGgtMyIgLz4KICAgICAgICAgIHtzaG93UHBvQWR2YW5jZWQgPyAnSGlkZScgOiAnU2hvdyd9IGFkdmFuY2VkIG9wdGlvbnMKICAgICAgICA8L2J1dHRvbj4KICAgICAgICB7c2hvd1Bwb0FkdmFuY2VkICYmICgKICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJncmlkIGdyaWQtY29scy0zIGdhcC0zIGFuaW1hdGUtZmFkZS1pbiI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgYmxvY2sgbWItMSI+RXBpc29kZXMgLyBJdGVyPC9sYWJlbD4KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49ezF9IG1heD17NTEyfSB2YWx1ZT17cHBvRXBpc29kZXN9IG9uQ2hhbmdlPXtlID0+IHNldFBwb0VwaXNvZGVzKE51bWJlcihlLnRhcmdldC52YWx1ZSkpfQogICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzUHBvfQogICAgICAgICAgICAgICAgY2xhc3NOYW1lPSJ3LWZ1bGwgcHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtdGV4dC1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpib3JkZXItYWNjZW50LWJsdWUvNTAgdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6b3BhY2l0eS01MCIgLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgYmxvY2sgbWItMSI+UFBPIEVwb2NoczwvbGFiZWw+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbWluPXsxfSBtYXg9ezIwfSB2YWx1ZT17cHBvRXBvY2hzfSBvbkNoYW5nZT17ZSA9PiBzZXRQcG9FcG9jaHMoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSl9CiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNQcG99CiAgICAgICAgICAgICAgICBjbGFzc05hbWU9InctZnVsbCBweC0zIHB5LTIgYmctYmctdGVydGlhcnkgYm9yZGVyIGJvcmRlci1ib3JkZXItcHJpbWFyeSByb3VuZGVkLWxnIHRleHQtc20gdGV4dC10ZXh0LXByaW1hcnkgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOmJvcmRlci1hY2NlbnQtYmx1ZS81MCB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpvcGFjaXR5LTUwIiAvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSBibG9jayBtYi0xIj5CYXRjaCBTaXplPC9sYWJlbD4KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49ezE2fSBtYXg9ezIwNDh9IHZhbHVlPXtwcG9CYXRjaFNpemV9IG9uQ2hhbmdlPXtlID0+IHNldFBwb0JhdGNoU2l6ZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKX0KICAgICAgICAgICAg' +
'ICAgIGRpc2FibGVkPXtpc1Bwb30KICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0idy1mdWxsIHB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbGcgdGV4dC1zbSB0ZXh0LXRleHQtcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLWFjY2VudC1ibHVlLzUwIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOm9wYWNpdHktNTAiIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGJsb2NrIG1iLTEiPkxlYXJuaW5nIFJhdGU8L2xhYmVsPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj17MC4wMDAwMDF9IG1heD17MC4wMX0gc3RlcD17MC4wMDAxfSB2YWx1ZT17cHBvTHJ9IG9uQ2hhbmdlPXtlID0+IHNldFBwb0xyKE51bWJlcihlLnRhcmdldC52YWx1ZSkpfQogICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzUHBvfQogICAgICAgICAgICAgICAgY2xhc3NOYW1lPSJ3LWZ1bGwgcHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtdGV4dC1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpib3JkZXItYWNjZW50LWJsdWUvNTAgdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6b3BhY2l0eS01MCIgLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgYmxvY2sgbWItMSI+Q2xpcCBFcHNpbG9uPC9sYWJlbD4KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49ezAuMDV9IG1heD17MC41fSBzdGVwPXswLjA1fSB2YWx1ZT17cHBvQ2xpcEVwc30gb25DaGFuZ2U9e2UgPT4gc2V0UHBvQ2xpcEVwcyhOdW1iZXIoZS50YXJnZXQudmFsdWUpKX0KICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1Bwb30KICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0idy1mdWxsIHB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbGcgdGV4dC1zbSB0ZXh0LXRleHQtcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLWFjY2VudC1ibHVlLzUwIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOm9wYWNpdHktNTAiIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGJsb2NrIG1iLTEiPkVudHJvcHkgQ29lZmY8L2xhYmVsPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj17MH0gbWF4PXswLjF9IHN0ZXA9ezAuMDA1fSB2YWx1ZT17cHBvRW50cm9weX0gb25DaGFuZ2U9e2UgPT4gc2V0UHBvRW50cm9weShOdW1iZXIoZS50YXJnZXQudmFsdWUpKX0KICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1Bwb30KICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0idy1mdWxsIHB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbGcgdGV4dC1zbSB0ZXh0LXRleHQtcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLWFjY2VudC1ibHVlLzUwIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOm9wYWNpdHktNTAiIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgKX0KCiAgICAgICAgey8qIFBQTyBydW5uaW5nIHN0YXR1cyAqL30KICAgICAgICB7aXNQcG8gfHwgKHBwb1N0YXR1cz8ucGhhc2UgJiYgcHBvU3RhdHVzLnBoYXNlICE9PSAnaWRsZScpID8gKAogICAgICAgICAgPGRpdiBjbGFzc05hbWU9InNwYWNlLXktMyBiZy1iZy10ZXJ0aWFyeS81MCByb3VuZGVkLXhsIHAtNCBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIj4KICAgICAgICAgICAgICA8UGhhc2VCYWRnZSBwaGFzZT17cHBvU3RhdHVzIS5waGFzZX0gLz4KICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXNlY29uZGFyeSI+e3Bwb1N0YXR1cyEubWVzc2FnZX08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAg' +
'ICAgeyhwcG9TdGF0dXMhLnBoYXNlID09PSAndHJhaW5pbmcnIHx8IHBwb1N0YXR1cyEucGhhc2UgPT09ICdkb25lJykgJiYgcHBvU3RhdHVzIS50b3RhbF9pdGVyYXRpb25zID4gMCAmJiAoCiAgICAgICAgICAgICAgPFByb2dyZXNzQmFyCiAgICAgICAgICAgICAgICB2YWx1ZT17cHBvU3RhdHVzIS5pdGVyYXRpb259CiAgICAgICAgICAgICAgICBtYXg9e3Bwb1N0YXR1cyEudG90YWxfaXRlcmF0aW9uc30KICAgICAgICAgICAgICAgIGxhYmVsPSJQUE8gaXRlcmF0aW9uIgogICAgICAgICAgICAgICAgY29sb3I9ImJnLWFjY2VudC1wdXJwbGUiCiAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgKX0KCiAgICAgICAgICAgIHtwcG9TdGF0dXMhLm1ldHJpY3MgJiYgKAogICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJncmlkIGdyaWQtY29scy0yIG1kOmdyaWQtY29scy00IGdhcC0yIj4KICAgICAgICAgICAgICAgIHtwcG9TdGF0dXMhLm1ldHJpY3Mud2luX3JhdGUgIT0gbnVsbCAmJiAoCiAgICAgICAgICAgICAgICAgIDxNZXRyaWNDYXJkIGxhYmVsPSJXaW4gUmF0ZSIgdmFsdWU9e2AkeyhwcG9TdGF0dXMhLm1ldHJpY3Mud2luX3JhdGUgKiAxMDApLnRvRml4ZWQoMSl9JWB9IGFjY2VudD0idGV4dC1hY2NlbnQtZ3JlZW4iIC8+CiAgICAgICAgICAgICAgICApfQogICAgICAgICAgICAgICAge3Bwb1N0YXR1cyEubWV0cmljcy5hdmdfcmV3YXJkICE9IG51bGwgJiYgKAogICAgICAgICAgICAgICAgICA8TWV0cmljQ2FyZCBsYWJlbD0iQXZnIFJld2FyZCIgdmFsdWU9e3Bwb1N0YXR1cyEubWV0cmljcy5hdmdfcmV3YXJkLnRvRml4ZWQoMyl9IGFjY2VudD0idGV4dC1hY2NlbnQtYW1iZXIiIC8+CiAgICAgICAgICAgICAgICApfQogICAgICAgICAgICAgICAge3Bwb1N0YXR1cyEubWV0cmljcy5wb2xpY3lfbG9zcyAhPSBudWxsICYmICgKICAgICAgICAgICAgICAgICAgPE1ldHJpY0NhcmQgbGFiZWw9IlBvbGljeSBMb3NzIiB2YWx1ZT17cHBvU3RhdHVzIS5tZXRyaWNzLnBvbGljeV9sb3NzLnRvRml4ZWQoNCl9IC8+CiAgICAgICAgICAgICAgICApfQogICAgICAgICAgICAgICAge3Bwb1N0YXR1cyEubWV0cmljcy5lbnRyb3B5ICE9IG51bGwgJiYgKAogICAgICAgICAgICAgICAgICA8TWV0cmljQ2FyZCBsYWJlbD0iRW50cm9weSIgdmFsdWU9e3Bwb1N0YXR1cyEubWV0cmljcy5lbnRyb3B5LnRvRml4ZWQoNCl9IC8+CiAgICAgICAgICAgICAgICApfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICApfQoKICAgICAgICAgICAge3Bwb1N0YXR1cyEucGhhc2UgPT09ICdkb25lJyAmJiBwcG9TdGF0dXMhLnJlc3VsdCAmJiAoCiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB0LTIgYm9yZGVyLXQgYm9yZGVyLWJvcmRlci1wcmltYXJ5Ij4KICAgICAgICAgICAgICAgIDxDaGVja0NpcmNsZSBjbGFzc05hbWU9InctMy41IGgtMy41IHRleHQtYWNjZW50LWdyZWVuIiAvPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtYWNjZW50LWdyZWVuIGZvbnQtbWVkaXVtIj4KICAgICAgICAgICAgICAgICAgUFBPIFRyYWluaW5nIENvbXBsZXRlIOKAlCBCZXN0IFdpbiBSYXRlOiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBwb1N0YXR1cyEucmVzdWx0LmJlc3Rfd2luX3JhdGUgPT09ICdudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICA/IGAkeyhwcG9TdGF0dXMhLnJlc3VsdC5iZXN0X3dpbl9yYXRlIGFzIG51bWJlciAqIDEwMCkudG9GaXhlZCgxKX0lYAogICAgICAgICAgICAgICAgICAgICAgOiAn4oCUJwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICl9CgogICAgICAgICAgICB7cHBvU3RhdHVzIS5waGFzZSA9PT0gJ2Vycm9yJyAmJiBwcG9TdGF0dXMhLmVycm9yICYmICgKICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iZmxleCBpdGVtcy1zdGFydCBnYXAtMiBiZy1hY2NlbnQtcmVkLzEwIGJvcmRlciBib3JkZXItYWNjZW50LXJlZC8yMCByb3VuZGVkLWxnIHB4LTMgcHktMiI+CiAgICAgICAgICAgICAgICA8QWxlcnRDaXJjbGUgY2xhc3NOYW1lPSJ3LTQgaC00IHRleHQtYWNjZW50LXJlZCBtdC0wLjUgZmxleC1zaHJpbmstMCIgLz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LWFjY2VudC1yZWQiPntwcG9TdGF0dXMh' +
'LmVycm9yfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICkgOiAoCiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN0YXJ0UHBvfQogICAgICAgICAgICBkaXNhYmxlZD17c3RhcnRpbmdQcG8gfHwgaXNUcmFpbmluZyB8fCAhaGFzTW9kZWx9CiAgICAgICAgICAgIGNsYXNzTmFtZT0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNCBweS0yLjUgYmctYWNjZW50LXB1cnBsZS8xNSB0ZXh0LWFjY2VudC1wdXJwbGUgdGV4dC1zbSBmb250LW1lZGl1bSByb3VuZGVkLWxnIGhvdmVyOmJnLWFjY2VudC1wdXJwbGUvMjUgYm9yZGVyIGJvcmRlci1hY2NlbnQtcHVycGxlLzMwIHRyYW5zaXRpb24tY29sb3JzIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIgogICAgICAgICAgPgogICAgICAgICAgICB7c3RhcnRpbmdQcG8gPyA8U3Bpbm5lciBzaXplPSJzbSIgLz4gOiA8UGxheSBjbGFzc05hbWU9InctNCBoLTQiIC8+fQogICAgICAgICAgICBTdGFydCBQUE8gVHJhaW5pbmcKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICl9CiAgICAgICAgeyFoYXNNb2RlbCAmJiAhKGlzUHBvIHx8IChwcG9TdGF0dXM/LnBoYXNlICYmIHBwb1N0YXR1cy5waGFzZSAhPT0gJ2lkbGUnKSkgJiYgKAogICAgICAgICAgPHAgY2xhc3NOYW1lPSJ0ZXh0LXhzIHRleHQtdGV4dC10ZXJ0aWFyeSBpdGFsaWMiPlRyYWluIGEgc3VwZXJ2aXNlZCBtb2RlbCBmaXJzdCAoUGhhc2UgMykgYmVmb3JlIHJ1bm5pbmcgUFBPLjwvcD4KICAgICAgICApfQogICAgICA8L1NlY3Rpb24+CgogICAgICB7Lyog4pWQ4pWQ4pWQIFBoYXNlIDU6IFRvdXJuYW1lbnQgRXZhbHVhdGlvbiDilZDilZDilZAgKi99CiAgICAgIDxTZWN0aW9uIHRpdGxlPSJQaGFzZSA1IOKAlCBUb3VybmFtZW50IEV2YWx1YXRpb24iIGljb249ezxTd29yZHMgY2xhc3NOYW1lPSJ3LTQgaC00IiAvPn0gY29sb3I9InRleHQtYWNjZW50LWFtYmVyIiBkZWZhdWx0T3Blbj17ZmFsc2V9PgogICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtc2Vjb25kYXJ5Ij4KICAgICAgICAgIFBpdCB0aGUgdHJhaW5lZCBtb2RlbCBhZ2FpbnN0IGhldXJpc3RpYywgcmFuZG9tLCBhbmQgb3RoZXIgcG9saWN5IHZhcmlhbnRzLgogICAgICAgIDwvcD4KCiAgICAgICAgPGRpdiBjbGFzc05hbWU9ImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTMiPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0idGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgYmxvY2sgbWItMSI+RXBpc29kZXMgcGVyIE1hdGNodXA8L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49ezEwfSBtYXg9ezEwMDB9IHZhbHVlPXt0b3VybkVwaXNvZGVzfSBvbkNoYW5nZT17ZSA9PiBzZXRUb3VybkVwaXNvZGVzKE51bWJlcihlLnRhcmdldC52YWx1ZSkpfQogICAgICAgICAgICAgIGRpc2FibGVkPXtpc1RvdXJufQogICAgICAgICAgICAgIGNsYXNzTmFtZT0idy1mdWxsIHB4LTMgcHktMiBiZy1iZy10ZXJ0aWFyeSBib3JkZXIgYm9yZGVyLWJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbGcgdGV4dC1zbSB0ZXh0LXRleHQtcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLWFjY2VudC1ibHVlLzUwIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOm9wYWNpdHktNTAiIC8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGJsb2NrIG1iLTEiPlBsYXlzdHlsZTwvbGFiZWw+CiAgICAgICAgICAgIDxzZWxlY3QgdmFsdWU9e3RvdXJuUGxheXN0eWxlfSBvbkNoYW5nZT17ZSA9PiBzZXRUb3VyblBsYXlzdHlsZShlLnRhcmdldC52YWx1ZSl9CiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzVG91cm59CiAgICAgICAgICAgICAgY2xhc3NOYW1lPSJ3LWZ1bGwgcHgtMyBweS0yIGJnLWJnLXRlcnRpYXJ5IGJvcmRlciBib3JkZXItYm9yZGVyLXByaW1hcnkgcm91bmRlZC1sZyB0ZXh0LXNtIHRleHQtdGV4dC1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpib3JkZXItYWNjZW50LWJsdWUvNTAgdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6b3BhY2l0eS01MCI+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibWlkcmFuZ2UiPk1pZHJhbmdlPC9vcHRp' +
'b24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWdncm8iPkFnZ3JvPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY29udHJvbCI+Q29udHJvbDwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImNvbWJvIj5Db21ibzwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICB7LyogVG91cm5hbWVudCBzdGF0dXMgKi99CiAgICAgICAge2lzVG91cm4gfHwgKHRvdXJuU3RhdHVzPy5waGFzZSAmJiB0b3VyblN0YXR1cy5waGFzZSAhPT0gJ2lkbGUnKSA/ICgKICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJzcGFjZS15LTMgYmctYmctdGVydGlhcnkvNTAgcm91bmRlZC14bCBwLTQgYm9yZGVyIGJvcmRlci1ib3JkZXItcHJpbWFyeSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+CiAgICAgICAgICAgICAgPFBoYXNlQmFkZ2UgcGhhc2U9e3RvdXJuU3RhdHVzIS5waGFzZX0gLz4KICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQteHMgdGV4dC10ZXh0LXNlY29uZGFyeSI+e3RvdXJuU3RhdHVzIS5tZXNzYWdlfTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICB7dG91cm5TdGF0dXMhLnBoYXNlID09PSAnZXJyb3InICYmIHRvdXJuU3RhdHVzIS5lcnJvciAmJiAoCiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImZsZXggaXRlbXMtc3RhcnQgZ2FwLTIgYmctYWNjZW50LXJlZC8xMCBib3JkZXIgYm9yZGVyLWFjY2VudC1yZWQvMjAgcm91bmRlZC1sZyBweC0zIHB5LTIiPgogICAgICAgICAgICAgICAgPEFsZXJ0Q2lyY2xlIGNsYXNzTmFtZT0idy00IGgtNCB0ZXh0LWFjY2VudC1yZWQgbXQtMC41IGZsZXgtc2hyaW5rLTAiIC8+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRleHQteHMgdGV4dC1hY2NlbnQtcmVkIj57dG91cm5TdGF0dXMhLmVycm9yfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICkgOiAoCiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN0YXJ0VG91cm5hbWVudH0KICAgICAgICAgICAgZGlzYWJsZWQ9e3N0YXJ0aW5nVG91cm4gfHwgaXNUcmFpbmluZyB8fCBpc1Bwb30KICAgICAgICAgICAgY2xhc3NOYW1lPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC00IHB5LTIuNSBiZy1hY2NlbnQtYW1iZXIvMTUgdGV4dC1hY2NlbnQtYW1iZXIgdGV4dC1zbSBmb250LW1lZGl1bSByb3VuZGVkLWxnIGhvdmVyOmJnLWFjY2VudC1hbWJlci8yNSBib3JkZXIgYm9yZGVyLWFjY2VudC1hbWJlci8zMCB0cmFuc2l0aW9uLWNvbG9ycyBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIKICAgICAgICAgID4KICAgICAgICAgICAge3N0YXJ0aW5nVG91cm4gPyA8U3Bpbm5lciBzaXplPSJzbSIgLz4gOiA8VHJvcGh5IGNsYXNzTmFtZT0idy00IGgtNCIgLz59CiAgICAgICAgICAgIFN0YXJ0IFRvdXJuYW1lbnQKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICl9CgogICAgICAgIHsvKiBUb3VybmFtZW50IHJlc3VsdHMgKi99CiAgICAgICAgeyh0b3VyblN0YXR1cz8ucmVzdWx0Py5wbGF5ZXJzPy5sZW5ndGggPz8gMCkgPiAwICYmICgKICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJwdC0yIGJvcmRlci10IGJvcmRlci1ib3JkZXItcHJpbWFyeSBzcGFjZS15LTIiPgogICAgICAgICAgICA8aDQgY2xhc3NOYW1lPSJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC10ZXh0LXRlcnRpYXJ5IHVwcGVyY2FzZSB0cmFja2luZy13aWRlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+CiAgICAgICAgICAgICAgPFRyb3BoeSBjbGFzc05hbWU9InctMy41IGgtMy41IHRleHQtYWNjZW50LWFtYmVyIiAvPgogICAgICAgICAgICAgIExlYWRlcmJvYXJkCiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9InctZnVsbCB0ZXh0LXNtIj4KICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICA8dHIgY2xhc3NOYW1lPSJib3JkZXItYiBib3JkZXItYm9yZGVyLXByaW1hcnkiPgogICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPSJweC0zIHB5LTIgdGV4dC1sZWZ0IHRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGZvbnQtbWVkaXVtIHctOCI+IzwvdGg+CiAg' +
'ICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9InB4LTMgcHktMiB0ZXh0LWxlZnQgdGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgZm9udC1tZWRpdW0iPlBvbGljeTwvdGg+CiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9InB4LTMgcHktMiB0ZXh0LXJpZ2h0IHRleHQteHMgdGV4dC10ZXh0LXRlcnRpYXJ5IGZvbnQtbWVkaXVtIj5XaW5zPC90aD4KICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT0icHgtMyBweS0yIHRleHQtcmlnaHQgdGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgZm9udC1tZWRpdW0iPkdhbWVzPC90aD4KICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT0icHgtMyBweS0yIHRleHQtcmlnaHQgdGV4dC14cyB0ZXh0LXRleHQtdGVydGlhcnkgZm9udC1tZWRpdW0iPldpbiBSYXRlPC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICA8dGJvZHkgY2xhc3NOYW1lPSJkaXZpZGUteSBkaXZpZGUtYm9yZGVyLXByaW1hcnkiPgogICAgICAgICAgICAgICAge3RvdXJuU3RhdHVzIS5yZXN1bHQhLnBsYXllcnMKICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIud2luX3JhdGUgLSBhLndpbl9yYXRlKQogICAgICAgICAgICAgICAgICAubWFwKChwLCBpKSA9PiAoCiAgICAgICAgICAgICAgICAgICAgPHRyIGtleT17cC5uYW1lfSBjbGFzc05hbWU9ImhvdmVyOmJnLWJnLWhvdmVyIHRyYW5zaXRpb24tY29sb3JzIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9InB4LTMgcHktMiB0ZXh0LXRleHQtdGVydGlhcnkgdGV4dC14cyI+CiAgICAgICAgICAgICAgICAgICAgICAgIHtpID09PSAwID8gPFRyb3BoeSBjbGFzc05hbWU9InctMy41IGgtMy41IHRleHQtYWNjZW50LWFtYmVyIiAvPiA6IGkgKyAxfQogICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9InB4LTMgcHktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idGV4dC10ZXh0LXByaW1hcnkgZm9udC1tZWRpdW0gY2FwaXRhbGl6ZSI+e3AubmFtZX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT0icHgtMyBweS0yIHRleHQtcmlnaHQgdGV4dC10ZXh0LXNlY29uZGFyeSI+e3Aud2luc308L3RkPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT0icHgtMyBweS0yIHRleHQtcmlnaHQgdGV4dC10ZXh0LXNlY29uZGFyeSI+e3AuZ2FtZXN9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9eydweC0zIHB5LTIgdGV4dC1yaWdodCBmb250LXNlbWlib2xkICcgKyAoaSA9PT0gMCA/ICd0ZXh0LWFjY2VudC1ncmVlbicgOiAndGV4dC1hY2NlbnQtYmx1ZScpfT4KICAgICAgICAgICAgICAgICAgICAgICAgeyhwLndpbl9yYXRlICogMTAwKS50b0ZpeGVkKDEpfSUKICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgKSl9CiAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICl9CiAgICAgIDwvU2VjdGlvbj4KICAgIDwvZGl2PgogICkKfQo='
Install-B64 -R 'frontend\commander-ai-lab-ui\src\pages\TrainingPage.tsx' -B $b
# frontend/commander-ai-lab-ui/src/types/index.ts (10,371 bytes)
# frontend/commander-ai-lab-ui/src/types/index.ts (11,671 bytes)
$b = 'Ly8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIENvbW1hbmRlciBBSSBMYWIg4oCUIFR5cGVTY3JpcHQgVHlwZSBEZWZpbml0aW9ucwovLyBEZXJpdmVkIGZyb20gdGhlIEZhc3RBUEkgYmFja2VuZCdzIFB5ZGFudGljIG1vZGVscyArIFNRTGl0ZSBzY2hlbWEKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgovLyDilIDilIAgQ2FyZHMgJiBDb2xsZWN0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uQ2FyZCB7CiAgaWQ6IG51bWJlcgogIG5hbWU6IHN0cmluZwogIHNjcnlmYWxsX2lkOiBzdHJpbmcKICBzZXRfY29kZTogc3RyaW5nCiAgc2V0X25hbWU6IHN0cmluZwogIGNvbGxlY3Rvcl9udW1iZXI6IHN0cmluZwogIHJhcml0eTogc3RyaW5nCiAgdHlwZV9saW5lOiBzdHJpbmcKICBtYW5hX2Nvc3Q6IHN0cmluZwogIGNtYzogbnVtYmVyCiAgb3JhY2xlX3RleHQ6IHN0cmluZwogIGNvbG9yX2lkZW50aXR5OiBzdHJpbmdbXQogIHF1YW50aXR5OiBudW1iZXIKICBmb2lsX3F1YW50aXR5OiBudW1iZXIKICBjb25kaXRpb246IHN0cmluZwogIHRjZ19wcmljZTogbnVtYmVyIHwgbnVsbAogIGZvaWxfcHJpY2U6IG51bWJlciB8IG51bGwKICBpbWFnZV91cmw6IHN0cmluZwogIGVkaHJlY19yYW5rOiBudW1iZXIgfCBudWxsCiAga2V5d29yZHM6IHN0cmluZwogIGFkZGVkX2RhdGU6IHN0cmluZwogIHVwZGF0ZWRfZGF0ZTogc3RyaW5nCn0KCmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkZpbHRlcnMgewogIHE/OiBzdHJpbmcKICB0eXBlX2xpbmU/OiBzdHJpbmcKICBjb2xvcj86IHN0cmluZwogIHJhcml0eT86IHN0cmluZwogIHNldF9jb2RlPzogc3RyaW5nCiAgY21jX21pbj86IG51bWJlcgogIGNtY19tYXg/OiBudW1iZXIKICBwcmljZV9taW4/OiBudW1iZXIKICBwcmljZV9tYXg/OiBudW1iZXIKICBvd25lZF9vbmx5PzogYm9vbGVhbgogIHNvcnRfYnk/OiBzdHJpbmcKICBzb3J0X2Rpcj86ICdhc2MnIHwgJ2Rlc2MnCiAgcGFnZT86IG51bWJlcgogIHBhZ2Vfc2l6ZT86IG51bWJlcgp9CgpleHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25TdGF0cyB7CiAgdG90YWxfY2FyZHM6IG51bWJlcgogIHRvdGFsX3VuaXF1ZTogbnVtYmVyCiAgdG90YWxfdmFsdWU6IG51bWJlcgogIHNldHNfY291bnQ6IG51bWJlcgp9CgpleHBvcnQgaW50ZXJmYWNlIFNldEluZm8gewogIGNvZGU6IHN0cmluZwogIG5hbWU6IHN0cmluZwogIGNhcmRfY291bnQ6IG51bWJlcgp9CgovLyDilIDilIAgU2NhbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmV4cG9ydCBpbnRlcmZhY2UgU2NhblJlc3VsdCB7CiAgbWF0Y2hlczogU2Nhbk1hdGNoW10KICBpbWFnZV91cmw/OiBzdHJpbmcKfQoKZXhwb3J0IGludGVyZmFjZSBTY2FuTWF0Y2ggewogIG5hbWU6IHN0cmluZwogIHNldF9jb2RlOiBzdHJpbmcKICBzZXRfbmFtZTogc3RyaW5nCiAgY29sbGVjdG9yX251bWJlcjogc3RyaW5nCiAgc2NyeWZhbGxfaWQ6IHN0cmluZwogIGNvbmZpZGVuY2U6IG51bWJlcgogIGltYWdlX3VybDogc3RyaW5nCiAgdHlwZV9saW5lOiBzdHJpbmcKICBvcmFjbGVfdGV4dDogc3RyaW5nCiAgbWFuYV9jb3N0OiBzdHJpbmcKICB0Y2dfcHJpY2U6IG51bWJlciB8IG51bGwKfQoKLy8g4pSA4pSAIERlY2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU' +
'gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZXhwb3J0IGludGVyZmFjZSBEZWNrIHsKICBpZDogbnVtYmVyCiAgbmFtZTogc3RyaW5nCiAgY29tbWFuZGVyOiBzdHJpbmcKICBjb21tYW5kZXJfc2NyeWZhbGxfaWQ/OiBzdHJpbmcKICBjb21tYW5kZXJfaW1hZ2VfdXJsPzogc3RyaW5nCiAgY29sb3JfaWRlbnRpdHk6IHN0cmluZ1tdCiAgZm9ybWF0OiBzdHJpbmcKICBjYXJkX2NvdW50OiBudW1iZXIKICB0b3RhbF9wcmljZTogbnVtYmVyCiAgY3JlYXRlZF9kYXRlOiBzdHJpbmcKICB1cGRhdGVkX2RhdGU6IHN0cmluZwp9CgpleHBvcnQgaW50ZXJmYWNlIERlY2tDYXJkIHsKICBpZDogbnVtYmVyCiAgZGVja19pZDogbnVtYmVyCiAgbmFtZTogc3RyaW5nCiAgc2NyeWZhbGxfaWQ6IHN0cmluZwogIHF1YW50aXR5OiBudW1iZXIKICBpc19jb21tYW5kZXI6IGJvb2xlYW4KICBjYXRlZ29yeTogc3RyaW5nCiAgdHlwZV9saW5lOiBzdHJpbmcKICBtYW5hX2Nvc3Q6IHN0cmluZwogIGNtYzogbnVtYmVyCiAgb3JhY2xlX3RleHQ6IHN0cmluZwogIHRjZ19wcmljZTogbnVtYmVyIHwgbnVsbAogIGltYWdlX3VybDogc3RyaW5nCiAgb3duZWRfcXR5OiBudW1iZXIKICBzZXRfY29kZTogc3RyaW5nCn0KCmV4cG9ydCBpbnRlcmZhY2UgRGVja0FuYWx5c2lzIHsKICBjYXJkX2NvdW50OiBudW1iZXIKICBsYW5kX2NvdW50OiBudW1iZXIKICBjcmVhdHVyZV9jb3VudDogbnVtYmVyCiAgbm9uY3JlYXR1cmVfY291bnQ6IG51bWJlcgogIGF2Z19jbWM6IG51bWJlcgogIG1hbmFfY3VydmU6IFJlY29yZDxudW1iZXIsIG51bWJlcj4KICBjb2xvcl9kaXN0cmlidXRpb246IFJlY29yZDxzdHJpbmcsIG51bWJlcj4KICB0eXBlX2Rpc3RyaWJ1dGlvbjogUmVjb3JkPHN0cmluZywgbnVtYmVyPgogIHRvdGFsX3ByaWNlOiBudW1iZXIKICBvd25lZF9jb3VudDogbnVtYmVyCiAgbWlzc2luZ19jb3VudDogbnVtYmVyCn0KCmV4cG9ydCBpbnRlcmZhY2UgRGVja1JlY29tbWVuZGF0aW9uIHsKICBuYW1lOiBzdHJpbmcKICBzY3J5ZmFsbF9pZDogc3RyaW5nCiAgdHlwZV9saW5lOiBzdHJpbmcKICBtYW5hX2Nvc3Q6IHN0cmluZwogIG9yYWNsZV90ZXh0OiBzdHJpbmcKICBpbWFnZV91cmw6IHN0cmluZwogIHRjZ19wcmljZTogbnVtYmVyIHwgbnVsbAogIHJlYXNvbjogc3RyaW5nCiAgc2NvcmU6IG51bWJlcgogIG93bmVkOiBib29sZWFuCn0KCi8vIOKUgOKUgCBFREhSRUMgUmVjb21tZW5kYXRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZXhwb3J0IGludGVyZmFjZSBFZGhSZWNDYXJkIHsKICBuYW1lOiBzdHJpbmcKICB0eXBlX2xpbmU6IHN0cmluZwogIHJvbGU6IHN0cmluZwogIHJvbGVzOiBzdHJpbmdbXQogIGluY2x1c2lvbl9wY3Q6IG51bWJlciB8IG51bGwKICBzeW5lcmd5X3Njb3JlOiBudW1iZXIgfCBudWxsCiAgb3duZWQ6IGJvb2xlYW4KICBvd25lZF9xdHk6IG51bWJlcgogIHNjcnlmYWxsX2lkOiBzdHJpbmcKICBpbWFnZV91cmw6IHN0cmluZyB8IG51bGwKfQoKZXhwb3J0IGludGVyZmFjZSBFZGhSZWNzUmVzcG9uc2UgewogIGNvbW1hbmRlcjogc3RyaW5nCiAgc291cmNlOiBzdHJpbmcKICB0b3RhbDogbnVtYmVyCiAgcmVjb21tZW5kYXRpb25zOiBFZGhSZWNDYXJkW10KfQoKLy8g4pSA4pSAIENvbGxlY3Rpb24gUmVjb21tZW5kYXRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uUmVjQ2FyZCB7CiAgaWQ6IG51bWJlcgogIHNjcnlmYWxsX2lkOiBzdHJpbmcKICBuYW1lOiBzdHJpbmcKICB0eXBlX2xpbmU6IHN0cmluZwogIGNhcmRfdHlwZTogc3RyaW5nCiAgY21jOiBudW1iZXIKICBjb2xvcl9pZGVudGl0eTogc3RyaW5nW10KICBvd25lZF9xdHk6IG51bWJlcgogIHJvbGVzOiBzdHJpbmdbXQogIHNjb3JlOiBudW1iZXIKICBpbWFnZV91cmw6IHN0cmluZyB8IG51bGwKfQoKZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uUmVjc1Jlc3BvbnNlIHsKICBzaG9ydGZhbGxfdHlwZXM6IHN0cmluZ1tdCiAgcm9sZV9maWx0ZXI6IHN0cmlu' +
'Z1tdCiAgZ3JvdXBlZDogUmVjb3JkPHN0cmluZywgQ29sbGVjdGlvblJlY0NhcmRbXT4KICB0b3RhbDogbnVtYmVyCn0KCi8vIOKUgOKUgCBWMyBEZWNrIEdlbmVyYXRvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmV4cG9ydCBpbnRlcmZhY2UgRGVja0dlblYzUmVxdWVzdCB7CiAgY29tbWFuZGVyX25hbWU6IHN0cmluZwogIHN0cmF0ZWd5Pzogc3RyaW5nCiAgdGFyZ2V0X2JyYWNrZXQ6IG51bWJlcgogIGJ1ZGdldF91c2Q/OiBudW1iZXIKICBidWRnZXRfbW9kZT86ICd0b3RhbCcgfCAncGVyX2NhcmQnCiAgb21pdF9jYXJkcz86IHN0cmluZ1tdCiAgdXNlX2NvbGxlY3Rpb24/OiBib29sZWFuCiAgcnVuX3N1YnN0aXR1dGlvbj86IGJvb2xlYW4KICBtb2RlbD86IHN0cmluZwogIGRlY2tfbmFtZT86IHN0cmluZwp9CgpleHBvcnQgaW50ZXJmYWNlIERlY2tHZW5WM1N0YXR1cyB7CiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4KICBwcGx4X2NvbmZpZ3VyZWQ6IGJvb2xlYW4KICBtb2RlbDogc3RyaW5nIHwgbnVsbAogIGVtYmVkZGluZ3NfbG9hZGVkOiBib29sZWFuCiAgZW1iZWRkaW5nX2NhcmRzOiBudW1iZXIKICBlcnJvcjogc3RyaW5nIHwgbnVsbAp9CgpleHBvcnQgaW50ZXJmYWNlIERlY2tHZW5WM0NhcmQgewogIG5hbWU6IHN0cmluZwogIHF1YW50aXR5OiBudW1iZXIKICBjYXRlZ29yeTogc3RyaW5nCiAgdHlwZV9saW5lOiBzdHJpbmcKICBtYW5hX2Nvc3Q6IHN0cmluZwogIGNtYzogbnVtYmVyCiAgcm9sZTogc3RyaW5nCiAgcmVhc29uOiBzdHJpbmcKICB0Y2dfcHJpY2U6IG51bWJlciB8IG51bGwKICBpbWFnZV91cmw6IHN0cmluZwogIG93bmVkOiBib29sZWFuCiAgb3duZWRfcXR5OiBudW1iZXIKICBzY3J5ZmFsbF9pZDogc3RyaW5nCiAgaXNfc3Vic3RpdHV0ZTogYm9vbGVhbgogIG9yaWdpbmFsX25hbWU6IHN0cmluZyB8IG51bGwKICBzdWJzdGl0dXRpb25fcmVhc29uOiBzdHJpbmcgfCBudWxsCiAgc2ltaWxhcml0eV9zY29yZTogbnVtYmVyIHwgbnVsbAp9CgpleHBvcnQgaW50ZXJmYWNlIERlY2tHZW5WM1Jlc3VsdCB7CiAgY29tbWFuZGVyOiB7CiAgICBuYW1lOiBzdHJpbmcKICAgIGltYWdlX3VybDogc3RyaW5nCiAgICB0eXBlX2xpbmU6IHN0cmluZwogICAgY29sb3JfaWRlbnRpdHk6IHN0cmluZ1tdCiAgICBtYW5hX2Nvc3Q6IHN0cmluZwogICAgb3JhY2xlX3RleHQ6IHN0cmluZwogIH0KICBjYXJkczogRGVja0dlblYzQ2FyZFtdCiAgc3RhdHM6IERlY2tBbmFseXNpcwogIHN0cmF0ZWd5OiBzdHJpbmcKICBicmFja2V0OiBudW1iZXIKICBtb2RlbDogc3RyaW5nCiAgc3Vic3RpdHV0aW9uPzogewogICAgb3duZWQ6IG51bWJlcgogICAgc3Vic3RpdHV0ZWQ6IG51bWJlcgogICAgbWlzc2luZzogbnVtYmVyCiAgfQp9CgovLyDilIDilIAgU2ltdWxhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmV4cG9ydCBpbnRlcmZhY2UgU2ltQ29uZmlnIHsKICBkZWNrX25hbWVzOiBzdHJpbmdbXQogIG51bV9nYW1lczogbnVtYmVyCiAgdGhyZWFkczogbnVtYmVyCiAgdXNlX2RlZXBzZWVrPzogYm9vbGVhbgp9CgpleHBvcnQgaW50ZXJmYWNlIFNpbVN0YXR1cyB7CiAgcnVubmluZzogYm9vbGVhbgogIHNpbV9pZDogc3RyaW5nCiAgcHJvZ3Jlc3M/OiBudW1iZXIKICBnYW1lc19jb21wbGV0ZWQ/OiBudW1iZXIKICB0b3RhbF9nYW1lcz86IG51bWJlcgp9CgpleHBvcnQgaW50ZXJmYWNlIFNpbVJlc3VsdCB7CiAgc2ltX2lkOiBzdHJpbmcKICBkZWNrczogU2ltRGVja1Jlc3VsdFtdCiAgdG90YWxfZ2FtZXM6IG51bWJlcgogIGR1cmF0aW9uX21zOiBudW1iZXIKICB0aW1lc3RhbXA6IHN0cmluZwp9CgpleHBvcnQgaW50ZXJmYWNlIFNpbURlY2tSZXN1bHQgewogIG5hbWU6IHN0cmluZwogIHdpbnM6IG51bWJlcgogIGxvc3NlczogbnVtYmVyCiAgd2luX3JhdGU6IG51bWJlcgogIGF2Z190dXJuOiBudW1iZXIKfQoKLy8g4pSA4pSAIEJhdGNoIFNpbSAoTGFiKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi' +
'lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmV4cG9ydCBpbnRlcmZhY2UgTGFiRGVjayB7CiAgbmFtZTogc3RyaW5nCiAgc291cmNlOiBzdHJpbmcKICBwYXRoOiBzdHJpbmcKICBjYXJkX2NvdW50OiBudW1iZXIKfQoKZXhwb3J0IGludGVyZmFjZSBMYWJTdGFydFJlcXVlc3QgewogIGRlY2tzOiBzdHJpbmdbXQogIGdhbWVzOiBudW1iZXIKICB0aHJlYWRzPzogbnVtYmVyCiAgdXNlX2RlZXBzZWVrPzogYm9vbGVhbgogIGRlZXBzZWVrX2RlY2s/OiBzdHJpbmcKfQoKZXhwb3J0IGludGVyZmFjZSBMYWJTdGF0dXMgewogIHJ1bm5pbmc6IGJvb2xlYW4KICBydW5faWQ6IHN0cmluZwogIGdhbWVzX2NvbXBsZXRlZDogbnVtYmVyCiAgdG90YWxfZ2FtZXM6IG51bWJlcgogIGN1cnJlbnRfZGVja3M6IHN0cmluZ1tdCiAgZXJyb3I6IHN0cmluZyB8IG51bGwKfQoKZXhwb3J0IGludGVyZmFjZSBMYWJSZXN1bHQgewogIHJ1bl9pZDogc3RyaW5nCiAgZGVja3M6IExhYkRlY2tSZXN1bHRbXQogIHRvdGFsX2dhbWVzOiBudW1iZXIKICB0aW1lc3RhbXA6IHN0cmluZwp9CgpleHBvcnQgaW50ZXJmYWNlIExhYkRlY2tSZXN1bHQgewogIG5hbWU6IHN0cmluZwogIHdpbnM6IG51bWJlcgogIGdhbWVzOiBudW1iZXIKICB3aW5fcmF0ZTogbnVtYmVyCiAgYXZnX3R1cm5zOiBudW1iZXIKICBhdmdfbGlmZV9yZW1haW5pbmc6IG51bWJlcgp9CgpleHBvcnQgaW50ZXJmYWNlIExhYkhpc3RvcnlFbnRyeSB7CiAgcnVuX2lkOiBzdHJpbmcKICB0aW1lc3RhbXA6IHN0cmluZwogIGRlY2tzOiBzdHJpbmdbXQogIHRvdGFsX2dhbWVzOiBudW1iZXIKfQoKZXhwb3J0IGludGVyZmFjZSBQcmVjb25EZWNrIHsKICBuYW1lOiBzdHJpbmcKICBmaWxlbmFtZTogc3RyaW5nCiAgcmVsZWFzZV9kYXRlPzogc3RyaW5nCiAgc2V0X25hbWU/OiBzdHJpbmcKICBpbnN0YWxsZWQ6IGJvb2xlYW4KfQoKLy8g4pSA4pSAIENvYWNoIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZXhwb3J0IGludGVyZmFjZSBDb2FjaFN0YXR1cyB7CiAgbGxtX2Nvbm5lY3RlZDogYm9vbGVhbgogIGFjdGl2ZV9tb2RlbDogc3RyaW5nIHwgbnVsbAogIGVtYmVkZGluZ3NfbG9hZGVkOiBib29sZWFuCiAgZW1iZWRkaW5nX2NhcmRzOiBudW1iZXIKfQoKZXhwb3J0IGludGVyZmFjZSBDb2FjaERlY2sgewogIGRlY2tfaWQ6IG51bWJlcgogIGRlY2tfbmFtZTogc3RyaW5nCiAgY29tbWFuZGVyOiBzdHJpbmcKICByZXBvcnRfY291bnQ6IG51bWJlcgogIGxhc3RfcmVwb3J0X2RhdGU6IHN0cmluZyB8IG51bGwKfQoKZXhwb3J0IGludGVyZmFjZSBDb2FjaFNlc3Npb24gewogIHNlc3Npb25faWQ6IHN0cmluZwogIGRlY2tfbmFtZTogc3RyaW5nCiAgY3JlYXRlZF9hdDogc3RyaW5nCiAgbWVzc2FnZXM6IENvYWNoTWVzc2FnZVtdCn0KCmV4cG9ydCBpbnRlcmZhY2UgQ29hY2hNZXNzYWdlIHsKICByb2xlOiAndXNlcicgfCAnYXNzaXN0YW50JwogIGNvbnRlbnQ6IHN0cmluZwogIHRpbWVzdGFtcDogc3RyaW5nCn0KCi8vIOKUgOKUgCBNTCBUcmFpbmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmV4cG9ydCBpbnRlcmZhY2UgTUxTdGF0dXMgewogIGVuYWJsZWQ6IGJvb2xlYW4KICBtb2RlbF9sb2FkZWQ6IGJvb2xlYW4KICBtb2RlbF9wYXRoOiBzdHJpbmcgfCBudWxsCiAgZGVjaXNpb25zX2NvdW50OiBudW1iZXIKICBkZWNpc2lvbl9maWxlczogc3RyaW5nW10KfQoKZXhwb3J0IGludGVyZmFjZSBNTERhdGFTdGF0dXMgewogIGRhdGFzZXRfZXhpc3RzOiBib29sZWFuCiAgc2FtcGxlczogbnVtYmVyCiAgZmVhdHVyZXM6IG51bWJlcgogIGxhc3RfYnVpbHQ6IHN0cmluZyB8IG51bGwKfQoKZXhwb3J0IGludGVyZmFjZSBNTFRyYWluU3RhdHVzIHsKICBydW5uaW5nOiBib29sZWFuCiAgZXBvY2g6IG51bWJlcgogIHRvdGFsX2Vwb2NoczogbnVtYmVyCiAgbG9zczogbnVtYmVyIHwgbnVsbAogIGFjY3VyYWN5OiBudW1iZXIgfCBu' +
'dWxsCiAgYmVzdF9hY2N1cmFjeTogbnVtYmVyIHwgbnVsbAp9CgpleHBvcnQgaW50ZXJmYWNlIFBQT1RyYWluU3RhdHVzIHsKICBydW5uaW5nOiBib29sZWFuCiAgaXRlcmF0aW9uOiBudW1iZXIKICB0b3RhbF9pdGVyYXRpb25zOiBudW1iZXIKICBhdmdfcmV3YXJkOiBudW1iZXIgfCBudWxsCiAgd2luX3JhdGU6IG51bWJlciB8IG51bGwKfQoKZXhwb3J0IGludGVyZmFjZSBUb3VybmFtZW50U3RhdHVzIHsKICBydW5uaW5nOiBib29sZWFuCiAgZ2FtZXNfY29tcGxldGVkOiBudW1iZXIKICB0b3RhbF9nYW1lczogbnVtYmVyCn0KCmV4cG9ydCBpbnRlcmZhY2UgVG91cm5hbWVudFJlc3VsdHMgewogIHBsYXllcnM6IFRvdXJuYW1lbnRQbGF5ZXJbXQogIHRvdGFsX2dhbWVzOiBudW1iZXIKfQoKZXhwb3J0IGludGVyZmFjZSBUb3VybmFtZW50UGxheWVyIHsKICBuYW1lOiBzdHJpbmcKICB3aW5zOiBudW1iZXIKICBnYW1lczogbnVtYmVyCiAgd2luX3JhdGU6IG51bWJlcgp9CgovLyDilIDilIAgRGVlcFNlZWsg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpleHBvcnQgaW50ZXJmYWNlIERlZXBTZWVrU3RhdHVzIHsKICBjb25uZWN0ZWQ6IGJvb2xlYW4KICBtb2RlbDogc3RyaW5nIHwgbnVsbAogIGJhc2VfdXJsOiBzdHJpbmcKfQoKLy8g4pSA4pSAIENvbW1hbmRlciBTZWFyY2gg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpleHBvcnQgaW50ZXJmYWNlIENvbW1hbmRlclNlYXJjaFJlc3VsdCB7CiAgbmFtZTogc3RyaW5nCiAgdHlwZV9saW5lOiBzdHJpbmcKICBjb2xvcl9pZGVudGl0eTogc3RyaW5nW10KICBtYW5hX2Nvc3Q6IHN0cmluZwogIGltYWdlX3VybDogc3RyaW5nCiAgb3JhY2xlX3RleHQ6IHN0cmluZwogIHNjcnlmYWxsX2lkOiBzdHJpbmcKICBpbl9jb2xsZWN0aW9uOiBib29sZWFuCn0KCi8vIOKUgOKUgCBQZXJwbGV4aXR5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZXhwb3J0IGludGVyZmFjZSBQcGx4U3RhdHVzIHsKICBjb25maWd1cmVkOiBib29sZWFuCiAga2V5X3ByZWZpeDogc3RyaW5nCn0K'
'lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmV4cG9ydCBpbnRlcmZhY2UgTGFiRGVjayB7CiAgbmFtZTogc3RyaW5nCiAgc291cmNlOiBzdHJpbmcKICBwYXRoOiBzdHJpbmcKICBjYXJkX2NvdW50OiBudW1iZXIKfQoKZXhwb3J0IGludGVyZmFjZSBMYWJTdGFydFJlcXVlc3QgewogIGRlY2tzOiBzdHJpbmdbXQogIGdhbWVzOiBudW1iZXIKICB0aHJlYWRzPzogbnVtYmVyCiAgdXNlX2RlZXBzZWVrPzogYm9vbGVhbgogIGRlZXBzZWVrX2RlY2s/OiBzdHJpbmcKfQoKZXhwb3J0IGludGVyZmFjZSBMYWJTdGF0dXMgewogIHJ1bm5pbmc6IGJvb2xlYW4KICBydW5faWQ6IHN0cmluZwogIGdhbWVzX2NvbXBsZXRlZDogbnVtYmVyCiAgdG90YWxfZ2FtZXM6IG51bWJlcgogIGN1cnJlbnRfZGVja3M6IHN0cmluZ1tdCiAgZXJyb3I6IHN0cmluZyB8IG51bGwKfQoKZXhwb3J0IGludGVyZmFjZSBMYWJSZXN1bHQgewogIHJ1bl9pZDogc3RyaW5nCiAgZGVja3M6IExhYkRlY2tSZXN1bHRbXQogIHRvdGFsX2dhbWVzOiBudW1iZXIKICB0aW1lc3RhbXA6IHN0cmluZwp9CgpleHBvcnQgaW50ZXJmYWNlIExhYkRlY2tSZXN1bHQgewogIG5hbWU6IHN0cmluZwogIHdpbnM6IG51bWJlcgogIGdhbWVzOiBudW1iZXIKICB3aW5fcmF0ZTogbnVtYmVyCiAgYXZnX3R1cm5zOiBudW1iZXIKICBhdmdfbGlmZV9yZW1haW5pbmc6IG51bWJlcgp9CgpleHBvcnQgaW50ZXJmYWNlIExhYkhpc3RvcnlFbnRyeSB7CiAgcnVuX2lkOiBzdHJpbmcKICB0aW1lc3RhbXA6IHN0cmluZwogIGRlY2tzOiBzdHJpbmdbXQogIHRvdGFsX2dhbWVzOiBudW1iZXIKfQoKZXhwb3J0IGludGVyZmFjZSBQcmVjb25EZWNrIHsKICBuYW1lOiBzdHJpbmcKICBmaWxlbmFtZTogc3RyaW5nCiAgcmVsZWFzZV9kYXRlPzogc3RyaW5nCiAgc2V0X25hbWU/OiBzdHJpbmcKICBpbnN0YWxsZWQ6IGJvb2xlYW4KfQoKLy8g4pSA4pSAIENvYWNoIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZXhwb3J0IGludGVyZmFjZSBDb2FjaFN0YXR1cyB7CiAgbGxtX2Nvbm5lY3RlZDogYm9vbGVhbgogIGFjdGl2ZV9tb2RlbDogc3RyaW5nIHwgbnVsbAogIGVtYmVkZGluZ3NfbG9hZGVkOiBib29sZWFuCiAgZW1iZWRkaW5nX2NhcmRzOiBudW1iZXIKfQoKZXhwb3J0IGludGVyZmFjZSBDb2FjaERlY2sgewogIGRlY2tfaWQ6IG51bWJlcgogIGRlY2tfbmFtZTogc3RyaW5nCiAgY29tbWFuZGVyOiBzdHJpbmcKICByZXBvcnRfY291bnQ6IG51bWJlcgogIGxhc3RfcmVwb3J0X2RhdGU6IHN0cmluZyB8IG51bGwKfQoKZXhwb3J0IGludGVyZmFjZSBDb2FjaFNlc3Npb24gewogIHNlc3Npb25faWQ6IHN0cmluZwogIGRlY2tfbmFtZTogc3RyaW5nCiAgY3JlYXRlZF9hdDogc3RyaW5nCiAgbWVzc2FnZXM6IENvYWNoTWVzc2FnZVtdCn0KCmV4cG9ydCBpbnRlcmZhY2UgQ29hY2hNZXNzYWdlIHsKICByb2xlOiAndXNlcicgfCAnYXNzaXN0YW50JwogIGNvbnRlbnQ6IHN0cmluZwogIHRpbWVzdGFtcDogc3RyaW5nCn0KCi8vIOKUgOKUgCBNTCBUcmFpbmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCi8qKiBHRVQgL2FwaS9tbC9zdGF0dXMgKi8KZXhwb3J0IGludGVyZmFjZSBNTFN0YXR1cyB7CiAgbWxfbG9nZ2luZ19lbmFibGVkOiBib29sZWFuCiAgdHJhaW5pbmdfZmlsZXM6IHsgZmlsZTogc3RyaW5nOyBkZWNpc2lvbnM6IG51bWJlcjsgc2l6ZV9rYjogbnVtYmVyIH1bXQogIHRvdGFsX2RlY2lzaW9uczogbnVtYmVyCiAgdG90YWxfZmlsZXM6IG51bWJlcgp9CgovKiogR0VUIC9hcGkvbWwvZGF0YS9zdGF0dXMgKi8KZXhwb3J0IGludGVyZmFjZSBNTERhdGFTdGF0dXMgewogIGRlY2lzaW9uRmlsZXM6IHsgbmFtZTogc3RyaW5nOyBzaXplOiBudW1iZXI7IGRlY2lzaW9uczogbnVtYmVyIH1bXQogIHRvdGFsRGVjaXNpb25zOiBudW1iZXIKICBkYXRhc2V0czogUmVjb3JkPHN0cmluZywgeyBzYW1wbGVzOiBudW1iZXI7IGZlYXR1' +
'cmVzOiBudW1iZXI7IHNpemU6IG51bWJlciB9PgogIGNoZWNrcG9pbnRzOiB7IG5hbWU6IHN0cmluZzsgc2l6ZTogbnVtYmVyOyBtb2RpZmllZDogc3RyaW5nIH1bXQogIGV2YWxSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwKICBwb2xpY3lMb2FkZWQ6IGJvb2xlYW4KfQoKLyoqIEdFVCAvYXBpL21sL3RyYWluL3N0YXR1cyAqLwpleHBvcnQgaW50ZXJmYWNlIE1MVHJhaW5TdGF0dXMgewogIHJ1bm5pbmc6IGJvb2xlYW4KICBwcm9ncmVzczogbnVtYmVyCiAgdG90YWxfZXBvY2hzOiBudW1iZXIKICBjdXJyZW50X2Vwb2NoOiBudW1iZXIKICBwaGFzZTogJ2lkbGUnIHwgJ3N0YXJ0aW5nJyB8ICdidWlsZGluZycgfCAndHJhaW5pbmcnIHwgJ2V2YWx1YXRpbmcnIHwgJ2RvbmUnIHwgJ2Vycm9yJwogIG1lc3NhZ2U6IHN0cmluZwogIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbAogIHJlc3VsdDogewogICAgdHJhaW5pbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+CiAgICBldmFsdWF0aW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwKICAgIGNoZWNrcG9pbnQ6IHN0cmluZwogICAgZGV2aWNlOiBzdHJpbmcKICB9IHwgbnVsbAogIGVycm9yOiBzdHJpbmcgfCBudWxsCiAgc3RhcnRlZF9hdDogc3RyaW5nIHwgbnVsbAp9CgovKiogR0VUIC9hcGkvbWwvdHJhaW4vcHBvL3N0YXR1cyAqLwpleHBvcnQgaW50ZXJmYWNlIFBQT1RyYWluU3RhdHVzIHsKICBydW5uaW5nOiBib29sZWFuCiAgaXRlcmF0aW9uOiBudW1iZXIKICB0b3RhbF9pdGVyYXRpb25zOiBudW1iZXIKICBwaGFzZTogJ2lkbGUnIHwgJ3N0YXJ0aW5nJyB8ICd0cmFpbmluZycgfCAnZG9uZScgfCAnZXJyb3InCiAgbWVzc2FnZTogc3RyaW5nCiAgbWV0cmljczogewogICAgYXZnX3Jld2FyZD86IG51bWJlcgogICAgd2luX3JhdGU/OiBudW1iZXIKICAgIHBvbGljeV9sb3NzPzogbnVtYmVyCiAgICB2YWx1ZV9sb3NzPzogbnVtYmVyCiAgICBlbnRyb3B5PzogbnVtYmVyCiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duCiAgfSB8IG51bGwKICByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbAogIGVycm9yOiBzdHJpbmcgfCBudWxsCn0KCi8qKiBHRVQgL2FwaS9tbC90b3VybmFtZW50L3N0YXR1cyAqLwpleHBvcnQgaW50ZXJmYWNlIFRvdXJuYW1lbnRTdGF0dXMgewogIHJ1bm5pbmc6IGJvb2xlYW4KICBwaGFzZTogJ2lkbGUnIHwgJ3N0YXJ0aW5nJyB8ICdydW5uaW5nJyB8ICdkb25lJyB8ICdlcnJvcicKICBtZXNzYWdlOiBzdHJpbmcKICByZXN1bHQ6IFRvdXJuYW1lbnRSZXN1bHRzIHwgbnVsbAogIGVycm9yOiBzdHJpbmcgfCBudWxsCn0KCmV4cG9ydCBpbnRlcmZhY2UgVG91cm5hbWVudFJlc3VsdHMgewogIHBsYXllcnM6IFRvdXJuYW1lbnRQbGF5ZXJbXQogIHRvdGFsX21hdGNoZXM6IG51bWJlcgogIG1hdGNodXBzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4KfQoKZXhwb3J0IGludGVyZmFjZSBUb3VybmFtZW50UGxheWVyIHsKICBuYW1lOiBzdHJpbmcKICB3aW5zOiBudW1iZXIKICBnYW1lczogbnVtYmVyCiAgd2luX3JhdGU6IG51bWJlcgp9CgovKiogR0VUIC9hcGkvbWwvbW9kZWwgKi8KZXhwb3J0IGludGVyZmFjZSBNTE1vZGVsSW5mbyB7CiAgbG9hZGVkOiBib29sZWFuCiAgZGV2aWNlPzogc3RyaW5nCiAgaW5wdXRfZGltPzogbnVtYmVyCiAgbnVtX2FjdGlvbnM/OiBudW1iZXIKICBjaGVja3BvaW50X3BhdGg/OiBzdHJpbmcKICBlcnJvcj86IHN0cmluZwogIHRvcmNoX2F2YWlsYWJsZT86IGJvb2xlYW4KfQoKLy8g4pSA4pSAIERlZXBTZWVrIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZXhwb3J0IGludGVyZmFjZSBEZWVwU2Vla1N0YXR1cyB7CiAgY29ubmVjdGVkOiBib29sZWFuCiAgbW9kZWw6IHN0cmluZyB8IG51bGwKICBiYXNlX3VybDogc3RyaW5nCn0KCi8vIOKUgOKUgCBDb21tYW5kZXIgU2VhcmNoIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZXhwb3J0IGludGVyZmFjZSBDb21tYW5kZXJTZWFyY2hS' +
'ZXN1bHQgewogIG5hbWU6IHN0cmluZwogIHR5cGVfbGluZTogc3RyaW5nCiAgY29sb3JfaWRlbnRpdHk6IHN0cmluZ1tdCiAgbWFuYV9jb3N0OiBzdHJpbmcKICBpbWFnZV91cmw6IHN0cmluZwogIG9yYWNsZV90ZXh0OiBzdHJpbmcKICBzY3J5ZmFsbF9pZDogc3RyaW5nCiAgaW5fY29sbGVjdGlvbjogYm9vbGVhbgp9CgovLyDilIDilIAgUGVycGxleGl0eSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmV4cG9ydCBpbnRlcmZhY2UgUHBseFN0YXR1cyB7CiAgY29uZmlndXJlZDogYm9vbGVhbgogIGtleV9wcmVmaXg6IHN0cmluZwp9Cg=='
Install-B64 -R 'frontend\commander-ai-lab-ui\src\types\index.ts' -B $b
# frontend/commander-ai-lab-ui/tsconfig.app.json (732 bytes)