/* Site bundle: imports core + site parts (to be filled during migration) */
/* Core bundle: variables, reset, base */
/* @layer base: variables */
@layer base {
  :root {
    /* Color Palette */
    --primary-gold: #e9c46a;
    --text-secondary: #a8dadc;
    --text-light: #f0f0f0;
    --accent-orange: #f4a261;
    --dark-bg: #1e1f26;
    --light-bg: #283c63;
    --bg-transparent: transparent;
    --border-accent: #e9c56a5b;

    /* Typography Scale */
    --font-size-3xs: clamp(0.45rem, 0.5em, 0.55rem);
    --font-size-2xs: clamp(0.5rem, 0.6em, 0.65rem);
    --font-size-xs: clamp(0.6rem, 0.7em, 0.75rem);
    --font-size-sm: clamp(0.7rem, 0.8em, 0.85rem);
    --font-size-base: 1em;
    --font-size-md: clamp(1rem, 1.1em, 1.15rem);
    --font-size-lg: clamp(1.1rem, 1.2em, 1.3rem);
    --font-size-xl: clamp(1.25rem, 1.5em, 1.75rem);
    --font-size-2xl: clamp(1.5rem, 2em, 2.5rem);
    --font-size-3xl: clamp(2rem, 3em, 3.5rem);

    /* Spacing Scale */
    --spacing-3xs: 2px;
    --spacing-2xs: 4px;
    --spacing-xs: 6px;
    --spacing-sm: 8px;
    --spacing-md: 12px;
    --spacing-lg: 16px;
    --spacing-xl: 24px;
    --spacing-2xl: 32px;
    --spacing-3xl: 48px;

    /* Layout */
    --header-height: clamp(100px, 120px, 150px);
    --footer-height: clamp(70px, 80px, 90px);
    --mobile-footer-height: clamp(60px, 65px, 70px);
    --mobile-breakpoint: 768px;

    /* Radius */
    --radius-xs: 2px;
    --radius-sm: 3px;
    --radius-md: 4px;
    --radius-lg: 10px;
    --radius-xl: 15px;
    --radius-circle: 50%;

    /* Z-index */
    --z-base: 1;
    --z-dropdown: 100;
    --z-header: 999;
    --z-player: 1000;

    /* Animation & Transitions */
    --transition-fast: 0.2s ease;
    --transition-normal: 0.3s ease;
    --transition-slow: 0.5s ease;
    --transition-smooth: 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    /* Effective value in original file was the latter duplicate; keep that */
    --easing-smooth: cubic-bezier(0.25, 0.46, 0.45, 0.94);

    /* Shadows */
    --shadow-light: 0 4px 10px #0000001a;
    --shadow-medium: 0 8px 32px #0000004d;
    --shadow-heavy: 0 12px 50px #00000080;

    /* Components */
    --slider-track-bg: #a8dadc4d;
    --slider-thumb-color: var(--primary-gold);
    --slider-track-radius: var(--radius-xs);

    --button-bg: var(--border-accent);
    --button-border: 1px solid var(--primary-gold);
    --button-color: var(--primary-gold);
    --button-hover-bg: var(--primary-gold);
    --button-hover-color: var(--dark-bg);
    --button-radius: var(--radius-circle);

    --card-bg: var(--border-accent);
    --card-border: 1px solid var(--primary-gold);
    --card-hover-bg: var(--primary-gold);
    --card-hover-color: var(--dark-bg);
    --card-transform: translateY(-2px);
    --card-shadow: var(--shadow-medium);

    /* Layout helpers */
    --spacing-inline: var(--spacing-md);
    --spacing-block: var(--spacing-lg);
    --content-max-width: min(1200px, calc(100vw - var(--spacing-2xl)));
    --content-padding: clamp(var(--spacing-sm), 3vw, var(--spacing-lg));
  }

  /* Minimalist scrollbar styling (matches button styling) */
  /* Firefox */
  :root {
    scrollbar-width: thin;
    scrollbar-color: var(--border-accent) transparent;
  }

  /* Webkit browsers (Chrome, Safari, Edge) */
  ::-webkit-scrollbar {
    width: 8px;
    height: 8px;
  }

  ::-webkit-scrollbar-track {
    background: transparent;
  }

  ::-webkit-scrollbar-thumb {
    background: var(--border-accent);
    border-radius: var(--radius-sm);
    -webkit-transition: background var(--transition-normal);
    transition: background var(--transition-normal);
  }

  ::-webkit-scrollbar-thumb:hover {
    background: var(--primary-gold);
  }

  /* Hide scrollbar buttons (up/down arrows) */
  ::-webkit-scrollbar-button {
    display: none;
    width: 0;
    height: 0;
  }

  ::-webkit-scrollbar-corner {
    background: transparent;
  }
}
/* @layer base: reset */
@layer base {
  /* Box sizing reset */
  *, *::before, *::after { box-sizing: border-box; }
  * { margin: 0; padding: 0; }
}
/* @layer base: base elements */
@layer base {
  html, body { height: 100%; }

  body {
    font-family: 'Lato', sans-serif;
    color: var(--text-light);
    background: linear-gradient(135deg, #1e1f26, #283c63);
  }

  a { color: var(--text-secondary); text-decoration: none; transition: color 0.3s ease, -webkit-text-decoration 0.3s ease; transition: color 0.3s ease, text-decoration 0.3s ease; transition: color 0.3s ease, text-decoration 0.3s ease, -webkit-text-decoration 0.3s ease; }
  a:hover { color: var(--text-light); text-decoration: underline; }

  /* Utility */
  .visually-hidden {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 1px, 1px); white-space: nowrap; border: 0;
  }
}
/* @layer layout: site structure */
@layer layout {
  /* Body layout grid (structure only) */
  body {
    display: grid;
    grid-template-rows: auto 1fr auto;
    grid-template-areas:
      "header"
      "main"
      "footer";
    min-height: 100vh;
    overflow: hidden;
  }

  /* Header */
  .header {
    grid-area: header;
    inline-size: 100%;
    background: var(--dark-bg);
    backdrop-filter: blur(var(--spacing-md));
    padding-block-start: calc(env(safe-area-inset-top) + clamp(var(--spacing-sm), 2vw, var(--spacing-xl)));
    padding-block-end: clamp(var(--spacing-sm), 2vw, var(--spacing-xl));
    padding-inline: 0;
    text-align: center;
    color: var(--primary-gold);
    z-index: var(--z-header);
    border-bottom: 2px solid var(--border-accent);
  }
  .header h1 { font-size: clamp(1.6em, 4vw, var(--font-size-2xl)); margin-block-end: var(--spacing-xs); }
  .header h2 { font-size: clamp(var(--font-size-base), 2vw, var(--font-size-lg)); color: var(--text-secondary); margin-block-end: clamp(var(--spacing-md), 3vw, var(--spacing-lg)); }

  /* Main content area */
  .main-content {
    grid-area: main;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    min-height: 0; /* for proper scrolling in grid */
  }

  .content {
    inline-size: min(90%, var(--content-max-width));
    max-inline-size: var(--content-max-width);
    padding: var(--content-padding);
    margin-inline: auto;
    margin-block: var(--spacing-sm);
    background: transparent;
    border-radius: var(--radius-lg);
    text-align: start;
    color: var(--text-light);
  }

  /* Footer - minimal wrapper for player */
  .footer {
    grid-area: footer;
    inline-size: 100%;
    padding: 0;
    margin: 0;
    background: var(--dark-bg);
    backdrop-filter: blur(var(--spacing-md));
    z-index: var(--z-player);
    border-top: 2px solid var(--border-accent);
  }

  /* Nav buttons container */
  .nav-buttons {
    container-type: inline-size;
    container-name: nav-buttons;
    display: flex;
    justify-content: center;
    gap: clamp(var(--spacing-xs), 2vw, var(--spacing-xl));
    padding-inline: clamp(var(--spacing-xs), 2vw, var(--spacing-xl));
  }

  .nav-buttons button.active { background: var(--button-hover-bg); color: var(--button-hover-color); }

  /* Mobile adjustments */
  @media (max-width: 768px) {
    body {
      height: 100dvh; /* dynamic viewport height */
      min-height: 100vh;
      padding-top: env(safe-area-inset-top);
      padding-bottom: env(safe-area-inset-bottom);
    }
    .header {
      position: sticky;
      top: env(safe-area-inset-top, 0);
      height: auto;
      padding: calc(var(--spacing-lg) + env(safe-area-inset-top)) 0 var(--spacing-sm);
    }
    .header h1 { font-size: 1.6em; }
    .header h2 { font-size: var(--font-size-base); }
    .content { inline-size: 95%; padding: var(--spacing-xs); }
    
    /* Mobile footer - fixed to stay above browser toolbar */
    .footer {
      position: fixed;
      left: 0;
      right: 0;
      bottom: 0;
      padding-bottom: env(safe-area-inset-bottom, 0);
    }
    
    /* Add padding to main-content so it doesn't get hidden behind fixed footer */
    .main-content {
      padding-bottom: calc(200px + env(safe-area-inset-bottom, 0)); /* Reserve space for player */
    }

    /* Example container query for button wrapping */
    @container nav-buttons (width < 400px) {
      .nav-buttons button { flex: 1; width: auto; min-inline-size: 0; }
    }
  }

  /* Fallbacks for unsupported features */
  @supports not (container-type: inline-size) {
    /* Allow buttons to wrap naturally when container queries unavailable */
    .nav-buttons { flex-wrap: wrap; }
    .nav-buttons button { flex: 1 1 auto; width: auto; }
  }
}
/* @layer components: buttons */
@layer components {
  .btn-unified {
    background: var(--button-bg);
    color: var(--button-color);
    border: var(--button-border);
    border-radius: var(--button-radius, var(--radius-lg));
    cursor: pointer;
    transition: all var(--transition-normal);
  }
  .btn-unified:hover { background: var(--button-hover-bg); color: var(--button-hover-color); }
  .btn-unified:active { opacity: 0.9; }
  /* Persist hover look when active/current page */
  .btn-unified.active,
  .btn-unified[aria-current="page"] {
    background: var(--button-hover-bg);
    color: var(--button-hover-color);
  }

  /* Navigation button modifier - responsive sizing for nav buttons */
  .nav-buttons .btn-unified {
    padding-block: clamp(var(--spacing-sm), 1.5vw, var(--spacing-md));
    padding-inline: clamp(var(--spacing-md), 2vw, var(--spacing-xl));
    font-size: clamp(var(--font-size-sm), 1.5vw, var(--font-size-base));
    border-radius: var(--radius-md);
    width: 120px;
    min-width: 80px;
  }
}
/* @layer components: cards */
@layer components {
  .section-card {
    background: var(--bg-transparent);
    border-radius: var(--radius-md);
    padding: var(--spacing-sm);
    text-align: start;
    animation: fadeIn 1s var(--easing-smooth);
  }
  .section-card h3 { font-size: var(--font-size-2xl); color: var(--primary-gold); margin-block-end: var(--spacing-sm); }
  .section-card p, .section-card ul { font-size: var(--font-size-md); line-height: 1.6; color: var(--text-secondary); }
  .section-card ul { list-style: none; padding-inline-start: 0; }
  .section-card ul li { margin-block: var(--spacing-sm) 0; }
  .section-card ul li a { color: var(--text-secondary); text-decoration: none; transition: color var(--transition-normal), -webkit-text-decoration var(--transition-normal); transition: color var(--transition-normal), text-decoration var(--transition-normal); transition: color var(--transition-normal), text-decoration var(--transition-normal), -webkit-text-decoration var(--transition-normal); }
  .section-card ul li a:hover { color: var(--text-light); }

  .section-hero {
    position: relative; background: var(--bg-transparent);
    padding: var(--spacing-lg) var(--spacing-xl);
    border-radius: var(--radius-lg);
    color: var(--text-light);
    margin-bottom: var(--spacing-lg);
    overflow: hidden; animation: fadeIn 1.5s ease-in-out;
  }
}
/* @layer components: forms */
@layer components {
  #contact-form-card form { display: grid; gap: var(--spacing-md); margin-top: var(--spacing-sm); }
  .form-row { display: grid; gap: var(--spacing-xs); }
  .form-row label { color: var(--primary-gold); font-size: var(--font-size-sm); }
  .form-row input, .form-row textarea {
    inline-size: 100%; padding: var(--spacing-sm) var(--spacing-md);
    background: rgba(255, 255, 255, 0.04);
    border: 1px solid var(--border-accent);
    color: var(--text-light);
    border-radius: var(--radius-md);
    outline: none; transition: border-color var(--transition-normal), box-shadow var(--transition-normal);
  }
  .form-row input:focus, .form-row textarea:focus { border-color: var(--primary-gold); box-shadow: 0 0 0 2px rgba(233, 196, 106, 0.2); }
  .form-actions { display: flex; align-items: center; gap: var(--spacing-md); }
  .cf-status { font-size: var(--font-size-sm); }
  .cf-status[data-type="error"] { color: #ffb4b4; }
  .cf-status[data-type="success"] { color: var(--primary-gold); }
}
/* @layer components: audio player */
@layer components {
  /* Audio player wrapper (legacy, may be unused) */
  .audio-player { background: var(--dark-bg); backdrop-filter: blur(var(--spacing-md)); border: none; border-radius: var(--radius-md); padding: var(--spacing-xs); padding-top: calc(var(--spacing-xs) + var(--spacing-md)); max-width: 100%; overflow: hidden; position: relative; }

  /* Footer Player container - SINGLE SOURCE OF TRUTH */
  .footer-player { 
    inline-size: 100%; 
    max-inline-size: 800px; 
    margin-inline: auto; 
    display: flex; 
    flex-direction: column; 
    padding: var(--spacing-sm) var(--spacing-sm) var(--spacing-xs); /* Compact: 8px top, 8px sides, 6px bottom */
    background: transparent; /* Let footer handle background */
    position: relative; 
  }

  /* Toggle - centered horizontally, positioned at top above title */
  .player-toggle-btn { 
    background: transparent; 
    color: var(--text-secondary); 
    border: none; 
    cursor: pointer; 
    font-size: var(--font-size-sm); 
    inline-size: var(--spacing-lg); 
    block-size: var(--spacing-lg); 
    display: flex; 
    align-items: center; 
    justify-content: center; 
    border-radius: var(--radius-circle); 
    position: absolute; 
    top: var(--spacing-2xs); /* At top, above title */
    left: 50%; /* Center horizontally */
    transform: translateX(-50%); /* Adjust for horizontal centering only */
    z-index: 2; 
  }
  .player-toggle-btn:hover { background: rgba(233, 196, 106, 0.2); color: var(--primary-gold); }
  .player-toggle-btn i { 
    /* Remove transition for instant arrow direction change */
    transition: none; 
  }
  
  /* When expanded, arrow points UP (rotate 180 degrees) */
  /* When collapsed, arrow points DOWN (default, no rotation) */
  .footer-player:not(.collapsed) .player-toggle-btn i {
    /* Rotate arrow 180° when expanded to point up */
    transform: rotate(180deg);
  }

  /* Header - reduced spacing for compactness */
  .player-header { 
    margin-bottom: var(--spacing-3xs); /* Reduced from 2xs */
    display: flex; 
    align-items: center; 
    justify-content: center; 
    padding-top: var(--spacing-xs); /* Reduced from md (12px) to xs (6px) */
    position: relative; 
  }
  .track-info { text-align: center; flex-grow: 1; }
  .track-title { 
    font-size: var(--font-size-md); 
    color: var(--primary-gold); 
    margin-bottom: var(--spacing-3xs); /* Reduced from 2xs */
    white-space: nowrap; 
    overflow: hidden; 
    text-overflow: ellipsis; 
    font-weight: 600; 
  }
  .track-details { 
    font-size: var(--font-size-xs); 
    color: var(--text-secondary); 
    margin-bottom: var(--spacing-3xs); /* Reduced from 2xs */
  }

  /* Collapsed - taller height with equal spacing around arrow */
  .footer-player.collapsed { 
    max-height: calc(var(--spacing-lg) + var(--spacing-lg) + var(--spacing-lg)); /* 16px top + 16px arrow + 16px bottom = 48px */
    min-height: calc(var(--spacing-lg) + var(--spacing-lg) + var(--spacing-lg));
    overflow: hidden; 
    padding: var(--spacing-lg) var(--spacing-sm); /* Equal padding top/bottom for centered arrow */
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .footer-player.collapsed .player-toggle-btn {
    /* Keep button centered horizontally and vertically when collapsed */
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }
  .footer-player.collapsed .player-toggle-btn i { 
    /* No rotation when collapsed - arrow points down */
    transform: rotate(0deg); 
  }
  .footer-player.collapsed .track-info,
  .footer-player.collapsed .player-controls,
  .footer-player.collapsed .progress-container,
  .footer-player.collapsed .volume-control { opacity: 0; visibility: hidden; height: 0; margin: 0; }
  .footer-player:not(.collapsed) .player-controls,
  .footer-player:not(.collapsed) .progress-container,
  .footer-player:not(.collapsed) .volume-control { opacity: 1; visibility: visible; height: auto; }

  /* Controls - compact spacing */
  .player-controls { 
    display: flex; 
    justify-content: center; 
    gap: var(--spacing-sm); 
    margin-bottom: var(--spacing-3xs); /* Reduced from 2xs */
  }
  .control-btn { width: 1.8rem; height: 1.8rem; border-radius: var(--button-radius); font-size: 0.8rem; display: flex; align-items: center; justify-content: center; }
  .play-pause-btn { inline-size: 2.2rem; block-size: 2.2rem; font-size: 1rem; }

  /* Progress - compact spacing */
  .progress-container { 
    display: flex; 
    align-items: center; 
    gap: var(--spacing-2xs); 
    margin-bottom: var(--spacing-3xs); /* Added to separate from volume */
  }
  .time-display.current-time, .time-display.duration { text-align: center; font-size: var(--font-size-xs); }
  .progress-bar-container { flex: 1; position: relative; }
  .progress-bar { -moz-appearance: none; appearance: none; -webkit-appearance: none; inline-size: 100%; block-size: 4px; border-radius: var(--slider-track-radius); background: var(--slider-track-bg); outline: none; cursor: pointer; transition: background var(--transition-normal); }
  .progress-bar:hover { background: rgba(168, 218, 220, 0.4); }
  .progress-bar::-webkit-slider-thumb { appearance: none; -webkit-appearance: none; inline-size: 8px; block-size: 8px; border-radius: var(--radius-circle); background: var(--slider-thumb-color); cursor: pointer; -webkit-transition: all var(--transition-normal); transition: all var(--transition-normal); }
  .progress-bar::-moz-range-thumb { inline-size: 8px; block-size: 8px; border-radius: var(--radius-circle); background: var(--slider-thumb-color); cursor: pointer; -moz-transition: all var(--transition-normal); transition: all var(--transition-normal); border: none; }
  .progress-bar::-webkit-slider-thumb:hover, .progress-bar::-moz-range-thumb:hover { transform: scale(1.2); }
  .progress-bar::-webkit-slider-runnable-track, .progress-bar::-moz-range-track { block-size: 4px; border-radius: var(--slider-track-radius); background: var(--slider-track-bg); }

  /* Volume - no extra margin-top needed */
  .volume-control { 
    display: flex; 
    align-items: center; 
    gap: var(--spacing-sm); 
    pointer-events: auto; 
    margin-bottom: var(--spacing-3xs); /* Space before copyright */
  }
  .volume-icon { font-size: var(--font-size-xs); color: var(--text-secondary); -webkit-user-select: none; -moz-user-select: none; user-select: none; inline-size: var(--spacing-lg); block-size: var(--spacing-lg); display: flex; align-items: center; justify-content: center; }
  .volume-slider-container { flex: 1; max-inline-size: 650px; }
  .volume-slider { inline-size: 100%; block-size: var(--spacing-2xs); -webkit-appearance: none; -moz-appearance: none; appearance: none; background: var(--slider-track-bg); border-radius: var(--slider-track-radius); outline: none; cursor: pointer; }
  .volume-slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; inline-size: 6px; block-size: 6px; border-radius: 50%; background: var(--slider-thumb-color); cursor: pointer; -webkit-transition: all var(--transition-normal); transition: all var(--transition-normal); }
  .volume-slider::-moz-range-thumb { inline-size: 6px; block-size: 6px; border-radius: 50%; background: var(--slider-thumb-color); cursor: pointer; -moz-transition: all var(--transition-normal); transition: all var(--transition-normal); border: none; }
  .volume-slider::-webkit-slider-thumb:hover, .volume-slider::-webkit-slider-thumb:active { transform: scale(1.2); background: var(--accent-orange); }
  .volume-slider::-webkit-slider-runnable-track { block-size: var(--spacing-2xs); border-radius: var(--slider-track-radius); background: var(--slider-track-bg); }
  .volume-slider:active { outline: none; }

  /* Copyright - minimal spacing */
  .footer-player .copyright {
    margin-top: var(--spacing-3xs); /* Minimal top margin */
    font-size: var(--font-size-3xs);
    color: var(--text-secondary);
    text-align: center;
  }
  .footer-player .copyright p {
    margin: 0;
  }

  /* Responsive */
  @media (pointer: coarse) {
    .control-btn { min-inline-size: 2rem; min-block-size: 2rem; }
    .play-pause-btn { min-inline-size: 2.2rem; min-block-size: 2.2rem; }
    .progress-bar { block-size: 6px; }
    .progress-bar::-webkit-slider-thumb, .progress-bar::-moz-range-thumb { inline-size: 12px; block-size: 12px; }
  }
  @media (max-width: 768px) {
    .footer-player.collapsed { 
      max-height: calc(var(--spacing-md) + var(--spacing-md) + var(--spacing-md)); /* 12px top + 12px arrow + 12px bottom = 36px */
      min-height: calc(var(--spacing-md) + var(--spacing-md) + var(--spacing-md)); 
      padding: var(--spacing-md) var(--spacing-sm); /* Equal padding for centered arrow */
    }
    .player-toggle-btn { 
      inline-size: var(--spacing-md); /* 12px button */
      block-size: var(--spacing-md); 
      font-size: var(--font-size-xs); 
      top: var(--spacing-3xs); /* At top on mobile */
      left: 50%; /* Centered horizontally */
      transform: translateX(-50%);
    }
    .footer-player.collapsed .player-toggle-btn {
      /* Ensure centered both ways on mobile when collapsed */
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
    .player-header { 
      margin-bottom: var(--spacing-3xs); 
      padding-top: var(--spacing-2xs); /* Reduced further on mobile */
    }
    .footer-player .control-btn { inline-size: 1.6rem; block-size: 1.6rem; font-size: 0.75rem; }
    .footer-player .play-pause-btn { inline-size: 2rem; block-size: 2rem; font-size: 0.9rem; }
    
    /* Ensure footer-player has minimal padding on mobile */
    .footer-player {
      padding: var(--spacing-xs) var(--spacing-sm) var(--spacing-2xs);
    }
  }
}
/* @layer components: social icons */
@layer components {
  .social-icons { display: grid; grid-template-columns: repeat(auto-fit, minmax(44px, max-content)); gap: var(--spacing-md); align-items: center; }
  .social-link { display: inline-flex; align-items: center; justify-content: center; inline-size: 44px; block-size: 44px; border-radius: var(--radius-circle); border: 1px solid var(--border-accent); background: rgba(255, 255, 255, 0.03); transition: transform var(--transition-normal), background var(--transition-normal), box-shadow var(--transition-normal); }
  .social-link:hover { background: rgba(233, 196, 106, 0.15); box-shadow: 0 4px 14px rgba(0,0,0,0.25); transform: translateY(-2px); }
  .social-link img { inline-size: 24px; block-size: 24px; -o-object-fit: contain; object-fit: contain; filter: none; }
}
/* @layer pages: music */
@layer pages {
  .now-playing-section { margin: var(--spacing-lg) 0; padding: var(--spacing-md); background: rgba(168, 218, 220, 0.1); border-radius: var(--radius-lg); border: 1px solid var(--border-accent); }
  .now-playing-section h4 { color: var(--primary-gold); margin-bottom: var(--spacing-lg); font-size: var(--font-size-lg); }
  .current-track-display { display: flex; gap: var(--spacing-lg); align-items: flex-start; }
  .track-details h5 { color: var(--text-light); font-size: var(--font-size-xl); margin: 0 0 var(--spacing-sm) 0; font-weight: 600; }
  .track-details p { color: var(--text-secondary); margin: var(--spacing-xs) 0; font-size: var(--font-size-md); }
  .track-metadata { color: var(--text-secondary); font-size: var(--font-size-sm); margin: var(--spacing-sm) 0; opacity: 0.8; }
  .track-tags { margin-top: var(--spacing-md); font-size: var(--font-size-sm); }
  .track-tags span:first-child { color: var(--text-secondary); opacity: 0.8; }
  .track-tags span:last-child { color: var(--accent-orange); }
  .collection-stats { margin-top: var(--spacing-md); padding: var(--spacing-md); background: rgba(30, 31, 38, 0.3); border-radius: var(--radius-md); }
  .collection-stats p { margin: var(--spacing-xs) 0; color: var(--text-secondary); font-size: var(--font-size-sm); }
  .collection-stats strong { color: var(--primary-gold); }
  .collection-stats span { color: var(--text-light); }

  /* Music info section */
  .music-info { 
    margin-top: var(--spacing-lg); 
    padding: var(--spacing-md); 
    background: rgba(168, 218, 220, 0.05); 
    border-radius: var(--radius-md); 
    border-left: 3px solid var(--border-accent); 
  }
  .music-info p { 
    color: var(--text-secondary); 
    line-height: 1.6; 
    font-size: var(--font-size-md); 
  }

  /* Music list layout tweaks */
  .music-list .all-tracks-list { list-style: none; padding-left: 0; margin: 0; }
  .music-list .track-row-inner { display: flex; align-items: center; gap: var(--spacing-sm); }
  /* Nudge the inline play button slightly left to align with desired visual edge */
  .music-list .play-icon {
    background: none;
    border: none;
    color: var(--primary-gold);
    padding: 0;
    line-height: 1;
    transform: translateX(-8px);
  }
}
/* @layer utilities */
@layer utilities {
  .fade-in { animation: fadeIn 0.5s ease-in-out forwards; }
  .fade-out { animation: fadeOut 0.5s ease-in-out forwards; }

  @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
  @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } }
}

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2FwcC5jc3MiLCIuLi9jb3JlL2luZGV4LmNzcyIsIi4uL2NvcmUvX3ZhcmlhYmxlcy5jc3MiLCIuLi9jb3JlL19yZXNldC5jc3MiLCIuLi9jb3JlL19iYXNlLmNzcyIsIi4uL2xheW91dC9fbGF5b3V0LmNzcyIsIi4uL2NvbXBvbmVudHMvYnV0dG9ucy5jc3MiLCIuLi9jb21wb25lbnRzL2NhcmRzLmNzcyIsIi4uL2NvbXBvbmVudHMvZm9ybXMuY3NzIiwiLi4vY29tcG9uZW50cy9wbGF5ZXIuY3NzIiwiLi4vY29tcG9uZW50cy9zb2NpYWwuY3NzIiwiLi4vcGFnZXMvbXVzaWMuY3NzIiwiLi4vdXRpbGl0aWVzL3V0aWxpdGllcy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkVBQTJFO0FDQTNFLHdDQUF3QztBQ0F4QywyQkFBMkI7QUFDM0I7RUFDRTtJQUNFLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIseUJBQXlCO0lBQ3pCLHFCQUFxQjtJQUNyQix3QkFBd0I7SUFDeEIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQiw2QkFBNkI7SUFDN0IsMEJBQTBCOztJQUUxQixxQkFBcUI7SUFDckIsK0NBQStDO0lBQy9DLDhDQUE4QztJQUM5Qyw2Q0FBNkM7SUFDN0MsNkNBQTZDO0lBQzdDLHFCQUFxQjtJQUNyQiwyQ0FBMkM7SUFDM0MsNENBQTRDO0lBQzVDLDhDQUE4QztJQUM5QywyQ0FBMkM7SUFDM0MseUNBQXlDOztJQUV6QyxrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixtQkFBbUI7O0lBRW5CLFdBQVc7SUFDWCwyQ0FBMkM7SUFDM0Msd0NBQXdDO0lBQ3hDLCtDQUErQztJQUMvQywwQkFBMEI7O0lBRTFCLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hC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LDhCQUE4QixFQUFFO0VBQzdFLCtCQUErQiw0QkFBNEIsRUFBRSxZQUFZLEVBQUU7RUFDM0UsOEJBQThCLDJCQUEyQixFQUFFO0VBQzNELG9CQUFvQiw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSxpQ0FBaUMsRUFBRSwrQkFBK0IsRUFBRTtFQUNuSixzQkFBc0IsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsOEJBQThCLEVBQUU7RUFDakgsMkJBQTJCLDBCQUEwQixFQUFFO0VBQ3ZELHlCQUF5Qix3QkFBd0IsRUFBRTs7RUFFbkQsdUJBQXVCO0VBQ3ZCO0lBQ0UsNkJBQTZCO0lBQzdCLDBCQUEwQjtJQUMxQixxQ0FBcUM7SUFDckMsK0JBQStCO0lBQy9CLDJDQUEyQztFQUM3QztFQUNBO0lBQ0UsNEJBQTRCO0lBQzVCLGdCQUFnQjtJQUNoQiw4QkFBOEI7RUFDaEM7O0VBRUEsNkJBQTZCO0VBQzdCLCtCQUErQixnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFO0VBQzdFLCtCQUErQixhQUFhLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUU7RUFDM0YsaUZBQWlGO0VBQ2pGO0lBQ0UsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWiwwQkFBMEI7SUFDMUIsVUFBVTtJQUNWLGNBQWM7SUFDZCwyQkFBMkI7RUFDN0I7QUFDRjtBQzFDQSxxQkFBcUI7QUFDckI7RUFDRSxXQUFXLDJDQUEyQyxFQUFFO0VBQ3hELFlBQVksNENBQTRDLEVBQUU7O0VBRTFELG9CQUFvQixPQUFPLFVBQVUsRUFBRSwyQkFBMkIsRUFBRSxFQUFFLEtBQUssVUFBVSxFQUFFLHdCQUF3QixFQUFFLEVBQUU7RUFDbkgscUJBQXFCLE9BQU8sVUFBVSxFQUFFLEVBQUUsS0FBSyxVQUFVLEVBQUUsRUFBRTtBQUMvRCIsImZpbGUiOiJhcHAubWluLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIFNpdGUgYnVuZGxlOiBpbXBvcnRzIGNvcmUgKyBzaXRlIHBhcnRzICh0byBiZSBmaWxsZWQgZHVyaW5nIG1pZ3JhdGlvbikgKi9cclxuQGltcG9ydCB1cmwoJy4vY29yZS9pbmRleC5jc3MnKTtcclxuQGltcG9ydCB1cmwoJy4vbGF5b3V0L19sYXlvdXQuY3NzJyk7XHJcbkBpbXBvcnQgdXJsKCcuL2NvbXBvbmVudHMvYnV0dG9ucy5jc3MnKTtcclxuQGltcG9ydCB1cmwoJy4vY29tcG9uZW50cy9jYXJkcy5jc3MnKTtcclxuQGltcG9ydCB1cmwoJy4vY29tcG9uZW50cy9mb3Jtcy5jc3MnKTtcclxuQGltcG9ydCB1cmwoJy4vY29tcG9uZW50cy9wbGF5ZXIuY3NzJyk7XHJcbkBpbXBvcnQgdXJsKCcuL2NvbXBvbmVudHMvc29jaWFsLmNzcycpO1xyXG5AaW1wb3J0IHVybCgnLi9wYWdlcy9tdXNpYy5jc3MnKTtcclxuQGltcG9ydCB1cmwoJy4vdXRpbGl0aWVzL3V0aWxpdGllcy5jc3MnKTtcclxuIiwiLyogQ29yZSBidW5kbGU6IHZhcmlhYmxlcywgcmVzZXQsIGJhc2UgKi9cclxuQGltcG9ydCB1cmwoJy4vX3ZhcmlhYmxlcy5jc3MnKTtcclxuQGltcG9ydCB1cmwoJy4vX3Jlc2V0LmNzcycpO1xyXG5AaW1wb3J0IHVybCgnLi9fYmFzZS5jc3MnKTtcclxuIiwiLyogQGxheWVyIGJhc2U6IHZhcmlhYmxlcyAqL1xyXG5AbGF5ZXIgYmFzZSB7XHJcbiAgOnJvb3Qge1xyXG4gICAgLyogQ29sb3IgUGFsZXR0ZSAqL1xyXG4gICAgLS1wcmltYXJ5LWdvbGQ6ICNlOWM0NmE7XHJcbiAgICAtLXRleHQtc2Vjb25kYXJ5OiAjYThkYWRjO1xyXG4gICAgLS10ZXh0LWxpZ2h0OiAjZjBmMGYwO1xyXG4gICAgLS1hY2NlbnQtb3JhbmdlOiAjZjRhMjYxO1xyXG4gICAgLS1kYXJrLWJnOiAjMWUxZjI2O1xyXG4gICAgLS1saWdodC1iZzogIzI4M2M2MztcclxuICAgIC0tYmctdHJhbnNwYXJlbnQ6IHRyYW5zcGFyZW50O1xyXG4gICAgLS1ib3JkZXItYWNjZW50OiAjZTljNTZhNWI7XHJcblxyXG4gICAgLyogVHlwb2dyYXBoeSBTY2FsZSAqL1xyXG4gICAgLS1mb250LXNpemUtM3hzOiBjbGFtcCgwLjQ1cmVtLCAwLjVlbSwgMC41NXJlbSk7XHJcbiAgICAtLWZvbnQtc2l6ZS0yeHM6IGNsYW1wKDAuNXJlbSwgMC42ZW0sIDAuNjVyZW0pO1xyXG4gICAgLS1mb250LXNpemUteHM6IGNsYW1wKDAuNnJlbSwgMC43ZW0sIDAuNzVyZW0pO1xyXG4gICAgLS1mb250LXNpemUtc206IGNsYW1wKDAuN3JlbSwgMC44ZW0sIDAuODVyZW0pO1xyXG4gICAgLS1mb250LXNpemUtYmFzZTogMWVtO1xyXG4gICAgLS1mb250LXNpemUtbWQ6IGNsYW1wKDFyZW0sIDEuMWVtLCAxLjE1cmVtKTtcclxuICAgIC0tZm9udC1zaXplLWxnOiBjbGFtcCgxLjFyZW0sIDEuMmVtLCAxLjNyZW0pO1xyXG4gICAgLS1mb250LXNpemUteGw6IGNsYW1wKDEuMjVyZW0sIDEuNWVtLCAxLjc1cmVtKTtcclxuICAgIC0tZm9udC1zaXplLTJ4bDogY2xhbXAoMS41cmVtLCAyZW0sIDIuNXJlbSk7XHJcbiAgICAtLWZvbnQtc2l6ZS0zeGw6IGNsYW1wKDJyZW0sIDNlbSwgMy41cmVtKTtcclxuXHJcbiAgICAvKiBTcGFjaW5nIFNjYWxlICovXHJcbiAgICAtLXNwYWNpbmctM3hzOiAycHg7XHJcbiAgICAtLXNwYWNpbmctMnhzOiA0cHg7XHJcbiAgICAtLXNwYWNpbmcteHM6IDZweDtcclxuICAgIC0tc3BhY2luZy1zbTogOHB4O1xyXG4gICAgLS1zcGFjaW5nLW1kOiAxMnB4O1xyXG4gICAgLS1zcGFjaW5nLWxnOiAxNnB4O1xyXG4gICAgLS1zcGFjaW5nLXhsOiAyNHB4O1xyXG4gICAgLS1zcGFjaW5nLTJ4bDogMzJweDtcclxuICAgIC0tc3BhY2luZy0zeGw6IDQ4cHg7XHJcblxyXG4gICAgLyogTGF5b3V0ICovXHJcbiAgICAtLWhlYWRlci1oZWlnaHQ6IGNsYW1wKDEwMHB4LCAxMjBweCwgMTUwcHgpO1xyXG4gICAgLS1mb290ZXItaGVpZ2h0OiBjbGFtcCg3MHB4LCA4MHB4LCA5MHB4KTtcclxuICAgIC0tbW9iaWxlLWZvb3Rlci1oZWlnaHQ6IGNsYW1wKDYwcHgsIDY1cHgsIDcwcHgpO1xyXG4gICAgLS1tb2JpbGUtYnJlYWtwb2ludDogNzY4cHg7XHJcblxyXG4gICAgLyogUmFkaXVzICovXHJcbiAgICAtLXJhZGl1cy14czogMnB4O1xyXG4gICAgLS1yYWRpdXMtc206IDNweDtcclxuICAgIC0tcmFkaXVzLW1kOiA0cHg7XHJcbiAgICAtLXJhZGl1cy1sZzogMTBweDtcclxuICAgIC0tcmFkaXVzLXhsOiAxNXB4O1xyXG4gICAgLS1yYWRpdXMtY2lyY2xlOiA1MCU7XHJcblxyXG4gICAgLyogWi1pbmRleCAqL1xyXG4gICAgLS16LWJhc2U6IDE7XHJcbiAgICAtLXotZHJvcGRvd246IDEwMDtcclxuICAgIC0tei1oZWFkZXI6IDk5OTtcclxuICAgIC0tei1wbGF5ZXI6IDEwMDA7XHJcblxyXG4gICAgLyogQW5pbWF0aW9uICYgVHJhbnNpdGlvbnMgKi9cclxuICAgIC0tdHJhbnNpdGlvbi1mYXN0OiAwLjJzIGVhc2U7XHJcbiAgICAtLXRyYW5zaXRpb24tbm9ybWFsOiAwLjNzIGVhc2U7XHJcbiAgICAtLXRyYW5zaXRpb24tc2xvdzogMC41cyBlYXNlO1xyXG4gICAgLS10cmFuc2l0aW9uLXNtb290aDogMC40cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xyXG4gICAgLyogRWZmZWN0aXZlIHZhbHVlIGluIG9yaWdpbmFsIGZpbGUgd2FzIHRoZSBsYXR0ZXIgZHVwbGljYXRlOyBrZWVwIHRoYXQgKi9cclxuICAgIC0tZWFzaW5nLXNtb290aDogY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpO1xyXG5cclxuICAgIC8qIFNoYWRvd3MgKi9cclxuICAgIC0tc2hhZG93LWxpZ2h0OiAwIDRweCAxMHB4ICMwMDAwMDAxYTtcclxuICAgIC0tc2hhZG93LW1lZGl1bTogMCA4cHggMzJweCAjMDAwMDAwNGQ7XHJcbiAgICAtLXNoYWRvdy1oZWF2eTogMCAxMnB4IDUwcHggIzAwMDAwMDgwO1xyXG5cclxuICAgIC8qIENvbXBvbmVudHMgKi9cclxuICAgIC0tc2xpZGVyLXRyYWNrLWJnOiAjYThkYWRjNGQ7XHJcbiAgICAtLXNsaWRlci10aHVtYi1jb2xvcjogdmFyKC0tcHJpbWFyeS1nb2xkKTtcclxuICAgIC0tc2xpZGVyLXRyYWNrLXJhZGl1czogdmFyKC0tcmFkaXVzLXhzKTtcclxuXHJcbiAgICAtLWJ1dHRvbi1iZzogdmFyKC0tYm9yZGVyLWFjY2VudCk7XHJcbiAgICAtLWJ1dHRvbi1ib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1wcmltYXJ5LWdvbGQpO1xyXG4gICAgLS1idXR0b24tY29sb3I6IHZhcigtLXByaW1hcnktZ29sZCk7XHJcbiAgICAtLWJ1dHRvbi1ob3Zlci1iZzogdmFyKC0tcHJpbWFyeS1nb2xkKTtcclxuICAgIC0tYnV0dG9uLWhvdmVyLWNvbG9yOiB2YXIoLS1kYXJrLWJnKTtcclxuICAgIC0tYnV0dG9uLXJhZGl1czogdmFyKC0tcmFkaXVzLWNpcmNsZSk7XHJcblxyXG4gICAgLS1jYXJkLWJnOiB2YXIoLS1ib3JkZXItYWNjZW50KTtcclxuICAgIC0tY2FyZC1ib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1wcmltYXJ5LWdvbGQpO1xyXG4gICAgLS1jYXJkLWhvdmVyLWJnOiB2YXIoLS1wcmltYXJ5LWdvbGQpO1xyXG4gICAgLS1jYXJkLWhvdmVyLWNvbG9yOiB2YXIoLS1kYXJrLWJnKTtcclxuICAgIC0tY2FyZC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XHJcbiAgICAtLWNhcmQtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWVkaXVtKTtcclxuXHJcbiAgICAvKiBMYXlvdXQgaGVscGVycyAqL1xyXG4gICAgLS1zcGFjaW5nLWlubGluZTogdmFyKC0tc3BhY2luZy1tZCk7XHJcbiAgICAtLXNwYWNpbmctYmxvY2s6IHZhcigtLXNwYWNpbmctbGcpO1xyXG4gICAgLS1jb250ZW50LW1heC13aWR0aDogbWluKDEyMDBweCwgY2FsYygxMDB2dyAtIHZhcigtLXNwYWNpbmctMnhsKSkpO1xyXG4gICAgLS1jb250ZW50LXBhZGRpbmc6IGNsYW1wKHZhcigtLXNwYWNpbmctc20pLCAzdncsIHZhcigtLXNwYWNpbmctbGcpKTtcclxuICB9XHJcblxyXG4gIC8qIE1pbmltYWxpc3Qgc2Nyb2xsYmFyIHN0eWxpbmcgKG1hdGNoZXMgYnV0dG9uIHN0eWxpbmcpICovXHJcbiAgLyogRmlyZWZveCAqL1xyXG4gIDpyb290IHtcclxuICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcclxuICAgIHNjcm9sbGJhci1jb2xvcjogdmFyKC0tYm9yZGVyLWFjY2VudCkgdHJhbnNwYXJlbnQ7XHJcbiAgfVxyXG5cclxuICAvKiBXZWJraXQgYnJvd3NlcnMgKENocm9tZSwgU2FmYXJpLCBFZGdlKSAqL1xyXG4gIDo6LXdlYmtpdC1zY3JvbGxiYXIge1xyXG4gICAgd2lkdGg6IDhweDtcclxuICAgIGhlaWdodDogOHB4O1xyXG4gIH1cclxuXHJcbiAgOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICB9XHJcblxyXG4gIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xyXG4gICAgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWFjY2VudCk7XHJcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xyXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS10cmFuc2l0aW9uLW5vcm1hbCk7XHJcbiAgfVxyXG5cclxuICA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcclxuICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktZ29sZCk7XHJcbiAgfVxyXG5cclxuICAvKiBIaWRlIHNjcm9sbGJhciBidXR0b25zICh1cC9kb3duIGFycm93cykgKi9cclxuICA6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgICBoZWlnaHQ6IDA7XHJcbiAgfVxyXG5cclxuICA6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICB9XHJcbn1cclxuIiwiLyogQGxheWVyIGJhc2U6IHJlc2V0ICovXHJcbkBsYXllciBiYXNlIHtcclxuICAvKiBCb3ggc2l6aW5nIHJlc2V0ICovXHJcbiAgKiwgKjo6YmVmb3JlLCAqOjphZnRlciB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cclxuICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9XHJcbn1cclxuIiwiLyogQGxheWVyIGJhc2U6IGJhc2UgZWxlbWVudHMgKi9cclxuQGxheWVyIGJhc2Uge1xyXG4gIGh0bWwsIGJvZHkgeyBoZWlnaHQ6IDEwMCU7IH1cclxuXHJcbiAgYm9keSB7XHJcbiAgICBmb250LWZhbWlseTogJ0xhdG8nLCBzYW5zLXNlcmlmO1xyXG4gICAgY29sb3I6IHZhcigtLXRleHQtbGlnaHQpO1xyXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzFlMWYyNiwgIzI4M2M2Myk7XHJcbiAgfVxyXG5cclxuICBhIHsgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB0cmFuc2l0aW9uOiBjb2xvciAwLjNzIGVhc2UsIHRleHQtZGVjb3JhdGlvbiAwLjNzIGVhc2U7IH1cclxuICBhOmhvdmVyIHsgY29sb3I6IHZhcigtLXRleHQtbGlnaHQpOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfVxyXG5cclxuICAvKiBVdGlsaXR5ICovXHJcbiAgLnZpc3VhbGx5LWhpZGRlbiB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxcHg7IGhlaWdodDogMXB4OyBwYWRkaW5nOiAwOyBtYXJnaW46IC0xcHg7IG92ZXJmbG93OiBoaWRkZW47IGNsaXA6IHJlY3QoMCwgMCwgMXB4LCAxcHgpOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBib3JkZXI6IDA7XHJcbiAgfVxyXG59XHJcbiIsIi8qIEBsYXllciBsYXlvdXQ6IHNpdGUgc3RydWN0dXJlICovXHJcbkBsYXllciBsYXlvdXQge1xyXG4gIC8qIEJvZHkgbGF5b3V0IGdyaWQgKHN0cnVjdHVyZSBvbmx5KSAqL1xyXG4gIGJvZHkge1xyXG4gICAgZGlzcGxheTogZ3JpZDtcclxuICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnIgYXV0bztcclxuICAgIGdyaWQtdGVtcGxhdGUtYXJlYXM6XHJcbiAgICAgIFwiaGVhZGVyXCJcclxuICAgICAgXCJtYWluXCJcclxuICAgICAgXCJmb290ZXJcIjtcclxuICAgIG1pbi1oZWlnaHQ6IDEwMHZoO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gIC8qIEhlYWRlciAqL1xyXG4gIC5oZWFkZXIge1xyXG4gICAgZ3JpZC1hcmVhOiBoZWFkZXI7XHJcbiAgICBpbmxpbmUtc2l6ZTogMTAwJTtcclxuICAgIGJhY2tncm91bmQ6IHZhcigtLWRhcmstYmcpO1xyXG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKHZhcigtLXNwYWNpbmctbWQpKTtcclxuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6IGNhbGMoZW52KHNhZmUtYXJlYS1pbnNldC10b3ApICsgY2xhbXAodmFyKC0tc3BhY2luZy1zbSksIDJ2dywgdmFyKC0tc3BhY2luZy14bCkpKTtcclxuICAgIHBhZGRpbmctYmxvY2stZW5kOiBjbGFtcCh2YXIoLS1zcGFjaW5nLXNtKSwgMnZ3LCB2YXIoLS1zcGFjaW5nLXhsKSk7XHJcbiAgICBwYWRkaW5nLWlubGluZTogMDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LWdvbGQpO1xyXG4gICAgei1pbmRleDogdmFyKC0tei1oZWFkZXIpO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWJvcmRlci1hY2NlbnQpO1xyXG4gIH1cclxuICAuaGVhZGVyIGgxIHsgZm9udC1zaXplOiBjbGFtcCgxLjZlbSwgNHZ3LCB2YXIoLS1mb250LXNpemUtMnhsKSk7IG1hcmdpbi1ibG9jay1lbmQ6IHZhcigtLXNwYWNpbmcteHMpOyB9XHJcbiAgLmhlYWRlciBoMiB7IGZvbnQtc2l6ZTogY2xhbXAodmFyKC0tZm9udC1zaXplLWJhc2UpLCAydncsIHZhcigtLWZvbnQtc2l6ZS1sZykpOyBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyBtYXJnaW4tYmxvY2stZW5kOiBjbGFtcCh2YXIoLS1zcGFjaW5nLW1kKSwgM3Z3LCB2YXIoLS1zcGFjaW5nLWxnKSk7IH1cclxuXHJcbiAgLyogTWFpbiBjb250ZW50IGFyZWEgKi9cclxuICAubWFpbi1jb250ZW50IHtcclxuICAgIGdyaWQtYXJlYTogbWFpbjtcclxuICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBtaW4taGVpZ2h0OiAwOyAvKiBmb3IgcHJvcGVyIHNjcm9sbGluZyBpbiBncmlkICovXHJcbiAgfVxyXG5cclxuICAuY29udGVudCB7XHJcbiAgICBpbmxpbmUtc2l6ZTogbWluKDkwJSwgdmFyKC0tY29udGVudC1tYXgtd2lkdGgpKTtcclxuICAgIG1heC1pbmxpbmUtc2l6ZTogdmFyKC0tY29udGVudC1tYXgtd2lkdGgpO1xyXG4gICAgcGFkZGluZzogdmFyKC0tY29udGVudC1wYWRkaW5nKTtcclxuICAgIG1hcmdpbi1pbmxpbmU6IGF1dG87XHJcbiAgICBtYXJnaW4tYmxvY2s6IHZhcigtLXNwYWNpbmctc20pO1xyXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xyXG4gICAgdGV4dC1hbGlnbjogc3RhcnQ7XHJcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1saWdodCk7XHJcbiAgfVxyXG5cclxuICAvKiBGb290ZXIgLSBtaW5pbWFsIHdyYXBwZXIgZm9yIHBsYXllciAqL1xyXG4gIC5mb290ZXIge1xyXG4gICAgZ3JpZC1hcmVhOiBmb290ZXI7XHJcbiAgICBpbmxpbmUtc2l6ZTogMTAwJTtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kYXJrLWJnKTtcclxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cih2YXIoLS1zcGFjaW5nLW1kKSk7XHJcbiAgICB6LWluZGV4OiB2YXIoLS16LXBsYXllcik7XHJcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgdmFyKC0tYm9yZGVyLWFjY2VudCk7XHJcbiAgfVxyXG5cclxuICAvKiBOYXYgYnV0dG9ucyBjb250YWluZXIgKi9cclxuICAubmF2LWJ1dHRvbnMge1xyXG4gICAgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplO1xyXG4gICAgY29udGFpbmVyLW5hbWU6IG5hdi1idXR0b25zO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgZ2FwOiBjbGFtcCh2YXIoLS1zcGFjaW5nLXhzKSwgMnZ3LCB2YXIoLS1zcGFjaW5nLXhsKSk7XHJcbiAgICBwYWRkaW5nLWlubGluZTogY2xhbXAodmFyKC0tc3BhY2luZy14cyksIDJ2dywgdmFyKC0tc3BhY2luZy14bCkpO1xyXG4gIH1cclxuXHJcbiAgLm5hdi1idXR0b25zIGJ1dHRvbi5hY3RpdmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24taG92ZXItYmcpOyBjb2xvcjogdmFyKC0tYnV0dG9uLWhvdmVyLWNvbG9yKTsgfVxyXG5cclxuICAvKiBNb2JpbGUgYWRqdXN0bWVudHMgKi9cclxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcclxuICAgIGJvZHkge1xyXG4gICAgICBoZWlnaHQ6IDEwMGR2aDsgLyogZHluYW1pYyB2aWV3cG9ydCBoZWlnaHQgKi9cclxuICAgICAgbWluLWhlaWdodDogMTAwdmg7XHJcbiAgICAgIHBhZGRpbmctdG9wOiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7XHJcbiAgICAgIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XHJcbiAgICB9XHJcbiAgICAuaGVhZGVyIHtcclxuICAgICAgcG9zaXRpb246IHN0aWNreTtcclxuICAgICAgdG9wOiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCwgMCk7XHJcbiAgICAgIGhlaWdodDogYXV0bztcclxuICAgICAgcGFkZGluZzogY2FsYyh2YXIoLS1zcGFjaW5nLWxnKSArIGVudihzYWZlLWFyZWEtaW5zZXQtdG9wKSkgMCB2YXIoLS1zcGFjaW5nLXNtKTtcclxuICAgIH1cclxuICAgIC5oZWFkZXIgaDEgeyBmb250LXNpemU6IDEuNmVtOyB9XHJcbiAgICAuaGVhZGVyIGgyIHsgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYmFzZSk7IH1cclxuICAgIC5jb250ZW50IHsgaW5saW5lLXNpemU6IDk1JTsgcGFkZGluZzogdmFyKC0tc3BhY2luZy14cyk7IH1cclxuICAgIFxyXG4gICAgLyogTW9iaWxlIGZvb3RlciAtIGZpeGVkIHRvIHN0YXkgYWJvdmUgYnJvd3NlciB0b29sYmFyICovXHJcbiAgICAuZm9vdGVyIHtcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgICByaWdodDogMDtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICBwYWRkaW5nLWJvdHRvbTogZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvKiBBZGQgcGFkZGluZyB0byBtYWluLWNvbnRlbnQgc28gaXQgZG9lc24ndCBnZXQgaGlkZGVuIGJlaGluZCBmaXhlZCBmb290ZXIgKi9cclxuICAgIC5tYWluLWNvbnRlbnQge1xyXG4gICAgICBwYWRkaW5nLWJvdHRvbTogY2FsYygyMDBweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwKSk7IC8qIFJlc2VydmUgc3BhY2UgZm9yIHBsYXllciAqL1xyXG4gICAgfVxyXG5cclxuICAgIC8qIEV4YW1wbGUgY29udGFpbmVyIHF1ZXJ5IGZvciBidXR0b24gd3JhcHBpbmcgKi9cclxuICAgIEBjb250YWluZXIgbmF2LWJ1dHRvbnMgKHdpZHRoIDwgNDAwcHgpIHtcclxuICAgICAgLm5hdi1idXR0b25zIGJ1dHRvbiB7IGZsZXg6IDE7IHdpZHRoOiBhdXRvOyBtaW4taW5saW5lLXNpemU6IDA7IH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIEZhbGxiYWNrcyBmb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZXMgKi9cclxuICBAc3VwcG9ydHMgbm90IChjb250YWluZXItdHlwZTogaW5saW5lLXNpemUpIHtcclxuICAgIC8qIEFsbG93IGJ1dHRvbnMgdG8gd3JhcCBuYXR1cmFsbHkgd2hlbiBjb250YWluZXIgcXVlcmllcyB1bmF2YWlsYWJsZSAqL1xyXG4gICAgLm5hdi1idXR0b25zIHsgZmxleC13cmFwOiB3cmFwOyB9XHJcbiAgICAubmF2LWJ1dHRvbnMgYnV0dG9uIHsgZmxleDogMSAxIGF1dG87IHdpZHRoOiBhdXRvOyB9XHJcbiAgfVxyXG59XHJcbiIsIi8qIEBsYXllciBjb21wb25lbnRzOiBidXR0b25zICovXHJcbkBsYXllciBjb21wb25lbnRzIHtcclxuICAuYnRuLXVuaWZpZWQge1xyXG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnV0dG9uLWJnKTtcclxuICAgIGNvbG9yOiB2YXIoLS1idXR0b24tY29sb3IpO1xyXG4gICAgYm9yZGVyOiB2YXIoLS1idXR0b24tYm9yZGVyKTtcclxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJ1dHRvbi1yYWRpdXMsIHZhcigtLXJhZGl1cy1sZykpO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tbm9ybWFsKTtcclxuICB9XHJcbiAgLmJ0bi11bmlmaWVkOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYnV0dG9uLWhvdmVyLWJnKTsgY29sb3I6IHZhcigtLWJ1dHRvbi1ob3Zlci1jb2xvcik7IH1cclxuICAuYnRuLXVuaWZpZWQ6YWN0aXZlIHsgb3BhY2l0eTogMC45OyB9XHJcbiAgLyogUGVyc2lzdCBob3ZlciBsb29rIHdoZW4gYWN0aXZlL2N1cnJlbnQgcGFnZSAqL1xyXG4gIC5idG4tdW5pZmllZC5hY3RpdmUsXHJcbiAgLmJ0bi11bmlmaWVkW2FyaWEtY3VycmVudD1cInBhZ2VcIl0ge1xyXG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnV0dG9uLWhvdmVyLWJnKTtcclxuICAgIGNvbG9yOiB2YXIoLS1idXR0b24taG92ZXItY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgLyogTmF2aWdhdGlvbiBidXR0b24gbW9kaWZpZXIgLSByZXNwb25zaXZlIHNpemluZyBmb3IgbmF2IGJ1dHRvbnMgKi9cclxuICAubmF2LWJ1dHRvbnMgLmJ0bi11bmlmaWVkIHtcclxuICAgIHBhZGRpbmctYmxvY2s6IGNsYW1wKHZhcigtLXNwYWNpbmctc20pLCAxLjV2dywgdmFyKC0tc3BhY2luZy1tZCkpO1xyXG4gICAgcGFkZGluZy1pbmxpbmU6IGNsYW1wKHZhcigtLXNwYWNpbmctbWQpLCAydncsIHZhcigtLXNwYWNpbmcteGwpKTtcclxuICAgIGZvbnQtc2l6ZTogY2xhbXAodmFyKC0tZm9udC1zaXplLXNtKSwgMS41dncsIHZhcigtLWZvbnQtc2l6ZS1iYXNlKSk7XHJcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xyXG4gICAgd2lkdGg6IDEyMHB4O1xyXG4gICAgbWluLXdpZHRoOiA4MHB4O1xyXG4gIH1cclxufVxyXG4iLCIvKiBAbGF5ZXIgY29tcG9uZW50czogY2FyZHMgKi9cclxuQGxheWVyIGNvbXBvbmVudHMge1xyXG4gIC5zZWN0aW9uLWNhcmQge1xyXG4gICAgYmFja2dyb3VuZDogdmFyKC0tYmctdHJhbnNwYXJlbnQpO1xyXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcclxuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pO1xyXG4gICAgdGV4dC1hbGlnbjogc3RhcnQ7XHJcbiAgICBhbmltYXRpb246IGZhZGVJbiAxcyB2YXIoLS1lYXNpbmctc21vb3RoKTtcclxuICB9XHJcbiAgLnNlY3Rpb24tY2FyZCBoMyB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTJ4bCk7IGNvbG9yOiB2YXIoLS1wcmltYXJ5LWdvbGQpOyBtYXJnaW4tYmxvY2stZW5kOiB2YXIoLS1zcGFjaW5nLXNtKTsgfVxyXG4gIC5zZWN0aW9uLWNhcmQgcCwgLnNlY3Rpb24tY2FyZCB1bCB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLW1kKTsgbGluZS1oZWlnaHQ6IDEuNjsgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsgfVxyXG4gIC5zZWN0aW9uLWNhcmQgdWwgeyBsaXN0LXN0eWxlOiBub25lOyBwYWRkaW5nLWlubGluZS1zdGFydDogMDsgfVxyXG4gIC5zZWN0aW9uLWNhcmQgdWwgbGkgeyBtYXJnaW4tYmxvY2s6IHZhcigtLXNwYWNpbmctc20pIDA7IH1cclxuICAuc2VjdGlvbi1jYXJkIHVsIGxpIGEgeyBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHRyYW5zaXRpb246IGNvbG9yIHZhcigtLXRyYW5zaXRpb24tbm9ybWFsKSwgdGV4dC1kZWNvcmF0aW9uIHZhcigtLXRyYW5zaXRpb24tbm9ybWFsKTsgfVxyXG4gIC5zZWN0aW9uLWNhcmQgdWwgbGkgYTpob3ZlciB7IGNvbG9yOiB2YXIoLS10ZXh0LWxpZ2h0KTsgfVxyXG5cclxuICAuc2VjdGlvbi1oZXJvIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgYmFja2dyb3VuZDogdmFyKC0tYmctdHJhbnNwYXJlbnQpO1xyXG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZykgdmFyKC0tc3BhY2luZy14bCk7XHJcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xyXG4gICAgY29sb3I6IHZhcigtLXRleHQtbGlnaHQpO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sZyk7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuOyBhbmltYXRpb246IGZhZGVJbiAxLjVzIGVhc2UtaW4tb3V0O1xyXG4gIH1cclxufVxyXG4iLCIvKiBAbGF5ZXIgY29tcG9uZW50czogZm9ybXMgKi9cclxuQGxheWVyIGNvbXBvbmVudHMge1xyXG4gICNjb250YWN0LWZvcm0tY2FyZCBmb3JtIHsgZGlzcGxheTogZ3JpZDsgZ2FwOiB2YXIoLS1zcGFjaW5nLW1kKTsgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1zbSk7IH1cclxuICAuZm9ybS1yb3cgeyBkaXNwbGF5OiBncmlkOyBnYXA6IHZhcigtLXNwYWNpbmcteHMpOyB9XHJcbiAgLmZvcm0tcm93IGxhYmVsIHsgY29sb3I6IHZhcigtLXByaW1hcnktZ29sZCk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTsgfVxyXG4gIC5mb3JtLXJvdyBpbnB1dCwgLmZvcm0tcm93IHRleHRhcmVhIHtcclxuICAgIGlubGluZS1zaXplOiAxMDAlOyBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtKSB2YXIoLS1zcGFjaW5nLW1kKTtcclxuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItYWNjZW50KTtcclxuICAgIGNvbG9yOiB2YXIoLS10ZXh0LWxpZ2h0KTtcclxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XHJcbiAgICBvdXRsaW5lOiBub25lOyB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tdHJhbnNpdGlvbi1ub3JtYWwpLCBib3gtc2hhZG93IHZhcigtLXRyYW5zaXRpb24tbm9ybWFsKTtcclxuICB9XHJcbiAgLmZvcm0tcm93IGlucHV0OmZvY3VzLCAuZm9ybS1yb3cgdGV4dGFyZWE6Zm9jdXMgeyBib3JkZXItY29sb3I6IHZhcigtLXByaW1hcnktZ29sZCk7IGJveC1zaGFkb3c6IDAgMCAwIDJweCByZ2JhKDIzMywgMTk2LCAxMDYsIDAuMik7IH1cclxuICAuZm9ybS1hY3Rpb25zIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiB2YXIoLS1zcGFjaW5nLW1kKTsgfVxyXG4gIC5jZi1zdGF0dXMgeyBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7IH1cclxuICAuY2Ytc3RhdHVzW2RhdGEtdHlwZT1cImVycm9yXCJdIHsgY29sb3I6ICNmZmI0YjQ7IH1cclxuICAuY2Ytc3RhdHVzW2RhdGEtdHlwZT1cInN1Y2Nlc3NcIl0geyBjb2xvcjogdmFyKC0tcHJpbWFyeS1nb2xkKTsgfVxyXG59XHJcbiIsIi8qIEBsYXllciBjb21wb25lbnRzOiBhdWRpbyBwbGF5ZXIgKi9cclxuQGxheWVyIGNvbXBvbmVudHMge1xyXG4gIC8qIEF1ZGlvIHBsYXllciB3cmFwcGVyIChsZWdhY3ksIG1heSBiZSB1bnVzZWQpICovXHJcbiAgLmF1ZGlvLXBsYXllciB7IGJhY2tncm91bmQ6IHZhcigtLWRhcmstYmcpOyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIodmFyKC0tc3BhY2luZy1tZCkpOyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHMpOyBwYWRkaW5nLXRvcDogY2FsYyh2YXIoLS1zcGFjaW5nLXhzKSArIHZhcigtLXNwYWNpbmctbWQpKTsgbWF4LXdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cclxuXHJcbiAgLyogRm9vdGVyIFBsYXllciBjb250YWluZXIgLSBTSU5HTEUgU09VUkNFIE9GIFRSVVRIICovXHJcbiAgLmZvb3Rlci1wbGF5ZXIgeyBcclxuICAgIGlubGluZS1zaXplOiAxMDAlOyBcclxuICAgIG1heC1pbmxpbmUtc2l6ZTogODAwcHg7IFxyXG4gICAgbWFyZ2luLWlubGluZTogYXV0bzsgXHJcbiAgICBkaXNwbGF5OiBmbGV4OyBcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IFxyXG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbSkgdmFyKC0tc3BhY2luZy1zbSkgdmFyKC0tc3BhY2luZy14cyk7IC8qIENvbXBhY3Q6IDhweCB0b3AsIDhweCBzaWRlcywgNnB4IGJvdHRvbSAqL1xyXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IC8qIExldCBmb290ZXIgaGFuZGxlIGJhY2tncm91bmQgKi9cclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgXHJcbiAgfVxyXG5cclxuICAvKiBUb2dnbGUgLSBjZW50ZXJlZCBob3Jpem9udGFsbHksIHBvc2l0aW9uZWQgYXQgdG9wIGFib3ZlIHRpdGxlICovXHJcbiAgLnBsYXllci10b2dnbGUtYnRuIHsgXHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgXHJcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyBcclxuICAgIGJvcmRlcjogbm9uZTsgXHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7IFxyXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pOyBcclxuICAgIGlubGluZS1zaXplOiB2YXIoLS1zcGFjaW5nLWxnKTsgXHJcbiAgICBibG9jay1zaXplOiB2YXIoLS1zcGFjaW5nLWxnKTsgXHJcbiAgICBkaXNwbGF5OiBmbGV4OyBcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IFxyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IFxyXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWNpcmNsZSk7IFxyXG4gICAgcG9zaXRpb246IGFic29sdXRlOyBcclxuICAgIHRvcDogdmFyKC0tc3BhY2luZy0yeHMpOyAvKiBBdCB0b3AsIGFib3ZlIHRpdGxlICovXHJcbiAgICBsZWZ0OiA1MCU7IC8qIENlbnRlciBob3Jpem9udGFsbHkgKi9cclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsgLyogQWRqdXN0IGZvciBob3Jpem9udGFsIGNlbnRlcmluZyBvbmx5ICovXHJcbiAgICB6LWluZGV4OiAyOyBcclxuICB9XHJcbiAgLnBsYXllci10b2dnbGUtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgyMzMsIDE5NiwgMTA2LCAwLjIpOyBjb2xvcjogdmFyKC0tcHJpbWFyeS1nb2xkKTsgfVxyXG4gIC5wbGF5ZXItdG9nZ2xlLWJ0biBpIHsgXHJcbiAgICAvKiBSZW1vdmUgdHJhbnNpdGlvbiBmb3IgaW5zdGFudCBhcnJvdyBkaXJlY3Rpb24gY2hhbmdlICovXHJcbiAgICB0cmFuc2l0aW9uOiBub25lOyBcclxuICB9XHJcbiAgXHJcbiAgLyogV2hlbiBleHBhbmRlZCwgYXJyb3cgcG9pbnRzIFVQIChyb3RhdGUgMTgwIGRlZ3JlZXMpICovXHJcbiAgLyogV2hlbiBjb2xsYXBzZWQsIGFycm93IHBvaW50cyBET1dOIChkZWZhdWx0LCBubyByb3RhdGlvbikgKi9cclxuICAuZm9vdGVyLXBsYXllcjpub3QoLmNvbGxhcHNlZCkgLnBsYXllci10b2dnbGUtYnRuIGkge1xyXG4gICAgLyogUm90YXRlIGFycm93IDE4MMKwIHdoZW4gZXhwYW5kZWQgdG8gcG9pbnQgdXAgKi9cclxuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XHJcbiAgfVxyXG5cclxuICAvKiBIZWFkZXIgLSByZWR1Y2VkIHNwYWNpbmcgZm9yIGNvbXBhY3RuZXNzICovXHJcbiAgLnBsYXllci1oZWFkZXIgeyBcclxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctM3hzKTsgLyogUmVkdWNlZCBmcm9tIDJ4cyAqL1xyXG4gICAgZGlzcGxheTogZmxleDsgXHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyBcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyBcclxuICAgIHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjaW5nLXhzKTsgLyogUmVkdWNlZCBmcm9tIG1kICgxMnB4KSB0byB4cyAoNnB4KSAqL1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyBcclxuICB9XHJcbiAgLnRyYWNrLWluZm8geyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZsZXgtZ3JvdzogMTsgfVxyXG4gIC50cmFjay10aXRsZSB7IFxyXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbWQpOyBcclxuICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LWdvbGQpOyBcclxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctM3hzKTsgLyogUmVkdWNlZCBmcm9tIDJ4cyAqL1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgXHJcbiAgICBvdmVyZmxvdzogaGlkZGVuOyBcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyBcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IFxyXG4gIH1cclxuICAudHJhY2stZGV0YWlscyB7IFxyXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHMpOyBcclxuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7IFxyXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy0zeHMpOyAvKiBSZWR1Y2VkIGZyb20gMnhzICovXHJcbiAgfVxyXG5cclxuICAvKiBDb2xsYXBzZWQgLSB0YWxsZXIgaGVpZ2h0IHdpdGggZXF1YWwgc3BhY2luZyBhcm91bmQgYXJyb3cgKi9cclxuICAuZm9vdGVyLXBsYXllci5jb2xsYXBzZWQgeyBcclxuICAgIG1heC1oZWlnaHQ6IGNhbGModmFyKC0tc3BhY2luZy1sZykgKyB2YXIoLS1zcGFjaW5nLWxnKSArIHZhcigtLXNwYWNpbmctbGcpKTsgLyogMTZweCB0b3AgKyAxNnB4IGFycm93ICsgMTZweCBib3R0b20gPSA0OHB4ICovXHJcbiAgICBtaW4taGVpZ2h0OiBjYWxjKHZhcigtLXNwYWNpbmctbGcpICsgdmFyKC0tc3BhY2luZy1sZykgKyB2YXIoLS1zcGFjaW5nLWxnKSk7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuOyBcclxuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGcpIHZhcigtLXNwYWNpbmctc20pOyAvKiBFcXVhbCBwYWRkaW5nIHRvcC9ib3R0b20gZm9yIGNlbnRlcmVkIGFycm93ICovXHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIH1cclxuICAuZm9vdGVyLXBsYXllci5jb2xsYXBzZWQgLnBsYXllci10b2dnbGUtYnRuIHtcclxuICAgIC8qIEtlZXAgYnV0dG9uIGNlbnRlcmVkIGhvcml6b250YWxseSBhbmQgdmVydGljYWxseSB3aGVuIGNvbGxhcHNlZCAqL1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxuICB9XHJcbiAgLmZvb3Rlci1wbGF5ZXIuY29sbGFwc2VkIC5wbGF5ZXItdG9nZ2xlLWJ0biBpIHsgXHJcbiAgICAvKiBObyByb3RhdGlvbiB3aGVuIGNvbGxhcHNlZCAtIGFycm93IHBvaW50cyBkb3duICovXHJcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgXHJcbiAgfVxyXG4gIC5mb290ZXItcGxheWVyLmNvbGxhcHNlZCAudHJhY2staW5mbyxcclxuICAuZm9vdGVyLXBsYXllci5jb2xsYXBzZWQgLnBsYXllci1jb250cm9scyxcclxuICAuZm9vdGVyLXBsYXllci5jb2xsYXBzZWQgLnByb2dyZXNzLWNvbnRhaW5lcixcclxuICAuZm9vdGVyLXBsYXllci5jb2xsYXBzZWQgLnZvbHVtZS1jb250cm9sIHsgb3BhY2l0eTogMDsgdmlzaWJpbGl0eTogaGlkZGVuOyBoZWlnaHQ6IDA7IG1hcmdpbjogMDsgfVxyXG4gIC5mb290ZXItcGxheWVyOm5vdCguY29sbGFwc2VkKSAucGxheWVyLWNvbnRyb2xzLFxyXG4gIC5mb290ZXItcGxheWVyOm5vdCguY29sbGFwc2VkKSAucHJvZ3Jlc3MtY29udGFpbmVyLFxyXG4gIC5mb290ZXItcGxheWVyOm5vdCguY29sbGFwc2VkKSAudm9sdW1lLWNvbnRyb2wgeyBvcGFjaXR5OiAxOyB2aXNpYmlsaXR5OiB2aXNpYmxlOyBoZWlnaHQ6IGF1dG87IH1cclxuXHJcbiAgLyogQ29udHJvbHMgLSBjb21wYWN0IHNwYWNpbmcgKi9cclxuICAucGxheWVyLWNvbnRyb2xzIHsgXHJcbiAgICBkaXNwbGF5OiBmbGV4OyBcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyBcclxuICAgIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7IFxyXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy0zeHMpOyAvKiBSZWR1Y2VkIGZyb20gMnhzICovXHJcbiAgfVxyXG4gIC5jb250cm9sLWJ0biB7IHdpZHRoOiAxLjhyZW07IGhlaWdodDogMS44cmVtOyBib3JkZXItcmFkaXVzOiB2YXIoLS1idXR0b24tcmFkaXVzKTsgZm9udC1zaXplOiAwLjhyZW07IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XHJcbiAgLnBsYXktcGF1c2UtYnRuIHsgaW5saW5lLXNpemU6IDIuMnJlbTsgYmxvY2stc2l6ZTogMi4ycmVtOyBmb250LXNpemU6IDFyZW07IH1cclxuXHJcbiAgLyogUHJvZ3Jlc3MgLSBjb21wYWN0IHNwYWNpbmcgKi9cclxuICAucHJvZ3Jlc3MtY29udGFpbmVyIHsgXHJcbiAgICBkaXNwbGF5OiBmbGV4OyBcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IFxyXG4gICAgZ2FwOiB2YXIoLS1zcGFjaW5nLTJ4cyk7IFxyXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy0zeHMpOyAvKiBBZGRlZCB0byBzZXBhcmF0ZSBmcm9tIHZvbHVtZSAqL1xyXG4gIH1cclxuICAudGltZS1kaXNwbGF5LmN1cnJlbnQtdGltZSwgLnRpbWUtZGlzcGxheS5kdXJhdGlvbiB7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHMpOyB9XHJcbiAgLnByb2dyZXNzLWJhci1jb250YWluZXIgeyBmbGV4OiAxOyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cclxuICAucHJvZ3Jlc3MtYmFyIHsgYXBwZWFyYW5jZTogbm9uZTsgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyBpbmxpbmUtc2l6ZTogMTAwJTsgYmxvY2stc2l6ZTogNHB4OyBib3JkZXItcmFkaXVzOiB2YXIoLS1zbGlkZXItdHJhY2stcmFkaXVzKTsgYmFja2dyb3VuZDogdmFyKC0tc2xpZGVyLXRyYWNrLWJnKTsgb3V0bGluZTogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLXRyYW5zaXRpb24tbm9ybWFsKTsgfVxyXG4gIC5wcm9ncmVzcy1iYXI6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDE2OCwgMjE4LCAyMjAsIDAuNCk7IH1cclxuICAucHJvZ3Jlc3MtYmFyOjotd2Via2l0LXNsaWRlci10aHVtYiB7IGFwcGVhcmFuY2U6IG5vbmU7IC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgaW5saW5lLXNpemU6IDhweDsgYmxvY2stc2l6ZTogOHB4OyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtY2lyY2xlKTsgYmFja2dyb3VuZDogdmFyKC0tc2xpZGVyLXRodW1iLWNvbG9yKTsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1ub3JtYWwpOyB9XHJcbiAgLnByb2dyZXNzLWJhcjo6LW1vei1yYW5nZS10aHVtYiB7IGlubGluZS1zaXplOiA4cHg7IGJsb2NrLXNpemU6IDhweDsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWNpcmNsZSk7IGJhY2tncm91bmQ6IHZhcigtLXNsaWRlci10aHVtYi1jb2xvcik7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tbm9ybWFsKTsgYm9yZGVyOiBub25lOyB9XHJcbiAgLnByb2dyZXNzLWJhcjo6LXdlYmtpdC1zbGlkZXItdGh1bWI6aG92ZXIsIC5wcm9ncmVzcy1iYXI6Oi1tb3otcmFuZ2UtdGh1bWI6aG92ZXIgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMik7IH1cclxuICAucHJvZ3Jlc3MtYmFyOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjaywgLnByb2dyZXNzLWJhcjo6LW1vei1yYW5nZS10cmFjayB7IGJsb2NrLXNpemU6IDRweDsgYm9yZGVyLXJhZGl1czogdmFyKC0tc2xpZGVyLXRyYWNrLXJhZGl1cyk7IGJhY2tncm91bmQ6IHZhcigtLXNsaWRlci10cmFjay1iZyk7IH1cclxuXHJcbiAgLyogVm9sdW1lIC0gbm8gZXh0cmEgbWFyZ2luLXRvcCBuZWVkZWQgKi9cclxuICAudm9sdW1lLWNvbnRyb2wgeyBcclxuICAgIGRpc3BsYXk6IGZsZXg7IFxyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgXHJcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctc20pOyBcclxuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOyBcclxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctM3hzKTsgLyogU3BhY2UgYmVmb3JlIGNvcHlyaWdodCAqL1xyXG4gIH1cclxuICAudm9sdW1lLWljb24geyBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14cyk7IGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7IHVzZXItc2VsZWN0OiBub25lOyBpbmxpbmUtc2l6ZTogdmFyKC0tc3BhY2luZy1sZyk7IGJsb2NrLXNpemU6IHZhcigtLXNwYWNpbmctbGcpOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxyXG4gIC52b2x1bWUtc2xpZGVyLWNvbnRhaW5lciB7IGZsZXg6IDE7IG1heC1pbmxpbmUtc2l6ZTogNjUwcHg7IH1cclxuICAudm9sdW1lLXNsaWRlciB7IGlubGluZS1zaXplOiAxMDAlOyBibG9jay1zaXplOiB2YXIoLS1zcGFjaW5nLTJ4cyk7IC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgYXBwZWFyYW5jZTogbm9uZTsgYmFja2dyb3VuZDogdmFyKC0tc2xpZGVyLXRyYWNrLWJnKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tc2xpZGVyLXRyYWNrLXJhZGl1cyk7IG91dGxpbmU6IG5vbmU7IGN1cnNvcjogcG9pbnRlcjsgfVxyXG4gIC52b2x1bWUtc2xpZGVyOjotd2Via2l0LXNsaWRlci10aHVtYiB7IC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgYXBwZWFyYW5jZTogbm9uZTsgaW5saW5lLXNpemU6IDZweDsgYmxvY2stc2l6ZTogNnB4OyBib3JkZXItcmFkaXVzOiA1MCU7IGJhY2tncm91bmQ6IHZhcigtLXNsaWRlci10aHVtYi1jb2xvcik7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tbm9ybWFsKTsgfVxyXG4gIC52b2x1bWUtc2xpZGVyOjotbW96LXJhbmdlLXRodW1iIHsgaW5saW5lLXNpemU6IDZweDsgYmxvY2stc2l6ZTogNnB4OyBib3JkZXItcmFkaXVzOiA1MCU7IGJhY2tncm91bmQ6IHZhcigtLXNsaWRlci10aHVtYi1jb2xvcik7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tbm9ybWFsKTsgYm9yZGVyOiBub25lOyB9XHJcbiAgLnZvbHVtZS1zbGlkZXI6Oi13ZWJraXQtc2xpZGVyLXRodW1iOmhvdmVyLCAudm9sdW1lLXNsaWRlcjo6LXdlYmtpdC1zbGlkZXItdGh1bWI6YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjIpOyBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtb3JhbmdlKTsgfVxyXG4gIC52b2x1bWUtc2xpZGVyOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayB7IGJsb2NrLXNpemU6IHZhcigtLXNwYWNpbmctMnhzKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tc2xpZGVyLXRyYWNrLXJhZGl1cyk7IGJhY2tncm91bmQ6IHZhcigtLXNsaWRlci10cmFjay1iZyk7IH1cclxuICAudm9sdW1lLXNsaWRlcjphY3RpdmUgeyBvdXRsaW5lOiBub25lOyB9XHJcblxyXG4gIC8qIENvcHlyaWdodCAtIG1pbmltYWwgc3BhY2luZyAqL1xyXG4gIC5mb290ZXItcGxheWVyIC5jb3B5cmlnaHQge1xyXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy0zeHMpOyAvKiBNaW5pbWFsIHRvcCBtYXJnaW4gKi9cclxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTN4cyk7XHJcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuICAuZm9vdGVyLXBsYXllciAuY29weXJpZ2h0IHAge1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gIH1cclxuXHJcbiAgLyogUmVzcG9uc2l2ZSAqL1xyXG4gIEBtZWRpYSAocG9pbnRlcjogY29hcnNlKSB7XHJcbiAgICAuY29udHJvbC1idG4geyBtaW4taW5saW5lLXNpemU6IDJyZW07IG1pbi1ibG9jay1zaXplOiAycmVtOyB9XHJcbiAgICAucGxheS1wYXVzZS1idG4geyBtaW4taW5saW5lLXNpemU6IDIuMnJlbTsgbWluLWJsb2NrLXNpemU6IDIuMnJlbTsgfVxyXG4gICAgLnByb2dyZXNzLWJhciB7IGJsb2NrLXNpemU6IDZweDsgfVxyXG4gICAgLnByb2dyZXNzLWJhcjo6LXdlYmtpdC1zbGlkZXItdGh1bWIsIC5wcm9ncmVzcy1iYXI6Oi1tb3otcmFuZ2UtdGh1bWIgeyBpbmxpbmUtc2l6ZTogMTJweDsgYmxvY2stc2l6ZTogMTJweDsgfVxyXG4gIH1cclxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcclxuICAgIC5mb290ZXItcGxheWVyLmNvbGxhcHNlZCB7IFxyXG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKHZhcigtLXNwYWNpbmctbWQpICsgdmFyKC0tc3BhY2luZy1tZCkgKyB2YXIoLS1zcGFjaW5nLW1kKSk7IC8qIDEycHggdG9wICsgMTJweCBhcnJvdyArIDEycHggYm90dG9tID0gMzZweCAqL1xyXG4gICAgICBtaW4taGVpZ2h0OiBjYWxjKHZhcigtLXNwYWNpbmctbWQpICsgdmFyKC0tc3BhY2luZy1tZCkgKyB2YXIoLS1zcGFjaW5nLW1kKSk7IFxyXG4gICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1kKSB2YXIoLS1zcGFjaW5nLXNtKTsgLyogRXF1YWwgcGFkZGluZyBmb3IgY2VudGVyZWQgYXJyb3cgKi9cclxuICAgIH1cclxuICAgIC5wbGF5ZXItdG9nZ2xlLWJ0biB7IFxyXG4gICAgICBpbmxpbmUtc2l6ZTogdmFyKC0tc3BhY2luZy1tZCk7IC8qIDEycHggYnV0dG9uICovXHJcbiAgICAgIGJsb2NrLXNpemU6IHZhcigtLXNwYWNpbmctbWQpOyBcclxuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHMpOyBcclxuICAgICAgdG9wOiB2YXIoLS1zcGFjaW5nLTN4cyk7IC8qIEF0IHRvcCBvbiBtb2JpbGUgKi9cclxuICAgICAgbGVmdDogNTAlOyAvKiBDZW50ZXJlZCBob3Jpem9udGFsbHkgKi9cclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xyXG4gICAgfVxyXG4gICAgLmZvb3Rlci1wbGF5ZXIuY29sbGFwc2VkIC5wbGF5ZXItdG9nZ2xlLWJ0biB7XHJcbiAgICAgIC8qIEVuc3VyZSBjZW50ZXJlZCBib3RoIHdheXMgb24gbW9iaWxlIHdoZW4gY29sbGFwc2VkICovXHJcbiAgICAgIHRvcDogNTAlO1xyXG4gICAgICBsZWZ0OiA1MCU7XHJcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgfVxyXG4gICAgLnBsYXllci1oZWFkZXIgeyBcclxuICAgICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy0zeHMpOyBcclxuICAgICAgcGFkZGluZy10b3A6IHZhcigtLXNwYWNpbmctMnhzKTsgLyogUmVkdWNlZCBmdXJ0aGVyIG9uIG1vYmlsZSAqL1xyXG4gICAgfVxyXG4gICAgLmZvb3Rlci1wbGF5ZXIgLmNvbnRyb2wtYnRuIHsgaW5saW5lLXNpemU6IDEuNnJlbTsgYmxvY2stc2l6ZTogMS42cmVtOyBmb250LXNpemU6IDAuNzVyZW07IH1cclxuICAgIC5mb290ZXItcGxheWVyIC5wbGF5LXBhdXNlLWJ0biB7IGlubGluZS1zaXplOiAycmVtOyBibG9jay1zaXplOiAycmVtOyBmb250LXNpemU6IDAuOXJlbTsgfVxyXG4gICAgXHJcbiAgICAvKiBFbnN1cmUgZm9vdGVyLXBsYXllciBoYXMgbWluaW1hbCBwYWRkaW5nIG9uIG1vYmlsZSAqL1xyXG4gICAgLmZvb3Rlci1wbGF5ZXIge1xyXG4gICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzKSB2YXIoLS1zcGFjaW5nLXNtKSB2YXIoLS1zcGFjaW5nLTJ4cyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8qIEBsYXllciBjb21wb25lbnRzOiBzb2NpYWwgaWNvbnMgKi9cclxuQGxheWVyIGNvbXBvbmVudHMge1xyXG4gIC5zb2NpYWwtaWNvbnMgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDQ0cHgsIG1heC1jb250ZW50KSk7IGdhcDogdmFyKC0tc3BhY2luZy1tZCk7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cclxuICAuc29jaWFsLWxpbmsgeyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGlubGluZS1zaXplOiA0NHB4OyBibG9jay1zaXplOiA0NHB4OyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtY2lyY2xlKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWFjY2VudCk7IGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyk7IHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS10cmFuc2l0aW9uLW5vcm1hbCksIGJhY2tncm91bmQgdmFyKC0tdHJhbnNpdGlvbi1ub3JtYWwpLCBib3gtc2hhZG93IHZhcigtLXRyYW5zaXRpb24tbm9ybWFsKTsgfVxyXG4gIC5zb2NpYWwtbGluazpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjMzLCAxOTYsIDEwNiwgMC4xNSk7IGJveC1zaGFkb3c6IDAgNHB4IDE0cHggcmdiYSgwLDAsMCwwLjI1KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOyB9XHJcbiAgLnNvY2lhbC1saW5rIGltZyB7IGlubGluZS1zaXplOiAyNHB4OyBibG9jay1zaXplOiAyNHB4OyBvYmplY3QtZml0OiBjb250YWluOyBmaWx0ZXI6IG5vbmU7IH1cclxufVxyXG4iLCIvKiBAbGF5ZXIgcGFnZXM6IG11c2ljICovXHJcbkBsYXllciBwYWdlcyB7XHJcbiAgLm5vdy1wbGF5aW5nLXNlY3Rpb24geyBtYXJnaW46IHZhcigtLXNwYWNpbmctbGcpIDA7IHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpOyBiYWNrZ3JvdW5kOiByZ2JhKDE2OCwgMjE4LCAyMjAsIDAuMSk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1hY2NlbnQpOyB9XHJcbiAgLm5vdy1wbGF5aW5nLXNlY3Rpb24gaDQgeyBjb2xvcjogdmFyKC0tcHJpbWFyeS1nb2xkKTsgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sZyk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTsgfVxyXG4gIC5jdXJyZW50LXRyYWNrLWRpc3BsYXkgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IHZhcigtLXNwYWNpbmctbGcpOyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgfVxyXG4gIC50cmFjay1kZXRhaWxzIGg1IHsgY29sb3I6IHZhcigtLXRleHQtbGlnaHQpOyBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14bCk7IG1hcmdpbjogMCAwIHZhcigtLXNwYWNpbmctc20pIDA7IGZvbnQtd2VpZ2h0OiA2MDA7IH1cclxuICAudHJhY2stZGV0YWlscyBwIHsgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsgbWFyZ2luOiB2YXIoLS1zcGFjaW5nLXhzKSAwOyBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1tZCk7IH1cclxuICAudHJhY2stbWV0YWRhdGEgeyBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7IG1hcmdpbjogdmFyKC0tc3BhY2luZy1zbSkgMDsgb3BhY2l0eTogMC44OyB9XHJcbiAgLnRyYWNrLXRhZ3MgeyBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLW1kKTsgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pOyB9XHJcbiAgLnRyYWNrLXRhZ3Mgc3BhbjpmaXJzdC1jaGlsZCB7IGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7IG9wYWNpdHk6IDAuODsgfVxyXG4gIC50cmFjay10YWdzIHNwYW46bGFzdC1jaGlsZCB7IGNvbG9yOiB2YXIoLS1hY2NlbnQtb3JhbmdlKTsgfVxyXG4gIC5jb2xsZWN0aW9uLXN0YXRzIHsgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1tZCk7IHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpOyBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMSwgMzgsIDAuMyk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IH1cclxuICAuY29sbGVjdGlvbi1zdGF0cyBwIHsgbWFyZ2luOiB2YXIoLS1zcGFjaW5nLXhzKSAwOyBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7IH1cclxuICAuY29sbGVjdGlvbi1zdGF0cyBzdHJvbmcgeyBjb2xvcjogdmFyKC0tcHJpbWFyeS1nb2xkKTsgfVxyXG4gIC5jb2xsZWN0aW9uLXN0YXRzIHNwYW4geyBjb2xvcjogdmFyKC0tdGV4dC1saWdodCk7IH1cclxuXHJcbiAgLyogTXVzaWMgaW5mbyBzZWN0aW9uICovXHJcbiAgLm11c2ljLWluZm8geyBcclxuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctbGcpOyBcclxuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpOyBcclxuICAgIGJhY2tncm91bmQ6IHJnYmEoMTY4LCAyMTgsIDIyMCwgMC4wNSk7IFxyXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgXHJcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWJvcmRlci1hY2NlbnQpOyBcclxuICB9XHJcbiAgLm11c2ljLWluZm8gcCB7IFxyXG4gICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsgXHJcbiAgICBsaW5lLWhlaWdodDogMS42OyBcclxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLW1kKTsgXHJcbiAgfVxyXG5cclxuICAvKiBNdXNpYyBsaXN0IGxheW91dCB0d2Vha3MgKi9cclxuICAubXVzaWMtbGlzdCAuYWxsLXRyYWNrcy1saXN0IHsgbGlzdC1zdHlsZTogbm9uZTsgcGFkZGluZy1sZWZ0OiAwOyBtYXJnaW46IDA7IH1cclxuICAubXVzaWMtbGlzdCAudHJhY2stcm93LWlubmVyIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTsgfVxyXG4gIC8qIE51ZGdlIHRoZSBpbmxpbmUgcGxheSBidXR0b24gc2xpZ2h0bHkgbGVmdCB0byBhbGlnbiB3aXRoIGRlc2lyZWQgdmlzdWFsIGVkZ2UgKi9cclxuICAubXVzaWMtbGlzdCAucGxheS1pY29uIHtcclxuICAgIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS1nb2xkKTtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBsaW5lLWhlaWdodDogMTtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtOHB4KTtcclxuICB9XHJcbn1cclxuIiwiLyogQGxheWVyIHV0aWxpdGllcyAqL1xyXG5AbGF5ZXIgdXRpbGl0aWVzIHtcclxuICAuZmFkZS1pbiB7IGFuaW1hdGlvbjogZmFkZUluIDAuNXMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7IH1cclxuICAuZmFkZS1vdXQgeyBhbmltYXRpb246IGZhZGVPdXQgMC41cyBlYXNlLWluLW91dCBmb3J3YXJkczsgfVxyXG5cclxuICBAa2V5ZnJhbWVzIGZhZGVJbiB7IGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7IH0gdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0gfVxyXG4gIEBrZXlmcmFtZXMgZmFkZU91dCB7IGZyb20geyBvcGFjaXR5OiAxOyB9IHRvIHsgb3BhY2l0eTogMDsgfSB9XHJcbn1cclxuIl19 */