/**
 * Theme: Global styles and design tokens
 * Provides consistent styling foundation for the application
 */

:root {
  /* Color Palette - Living Gradient Theme (Teal → Amber → Pink) */
  --color-primary: #0a9eb1;
  --color-primary-dark: #087d92;
  --color-primary-light: #53d3dc;
  --color-secondary: #f59e0b;
  --color-secondary-dark: #d97706;
  --color-secondary-light: #fbbf24;
  --color-accent: #ec4899;
  --color-accent-dark: #db2777;
  --color-accent-light: #f472b6;

  /* Gradient Definitions */
  --gradient-primary: linear-gradient(
      135deg,
      var(--color-primary) 10%,
      var(--color-secondary) 50%,
      var(--color-accent) 90%
    )
    no-repeat padding-box;
  --gradient-primary-hover: linear-gradient(
      135deg,
      var(--color-primary-dark) 10%,
      var(--color-secondary-dark) 50%,
      var(--color-accent-dark) 90%
    )
    no-repeat padding-box;
  --gradient-horizontal: linear-gradient(
      90deg,
      var(--color-primary) 10%,
      var(--color-secondary) 50%,
      var(--color-accent) 90%
    )
    no-repeat padding-box;
  --gradient-vertical: linear-gradient(
      180deg,
      var(--color-primary) 10%,
      var(--color-secondary) 50%,
      var(--color-accent) 90%
    )
    no-repeat padding-box;
  --gradient-simple: linear-gradient(
      135deg,
      var(--color-primary) 10%,
      var(--color-secondary-dark) 50%,
      var(--color-accent-dark) 90%
    )
    no-repeat padding-box;

  /* Subtle background gradients for decoration */
  --gradient-bg-subtle: linear-gradient(135deg, rgba(20, 184, 166, 0.1), rgba(245, 158, 11, 0.1))
    no-repeat padding-box;

  /* Shadow colors */
  --shadow-primary: rgba(20, 184, 166, 0.3);
  --shadow-primary-lg: rgba(20, 184, 166, 0.4);

  /* Grayscale */
  --color-gray-50: #f9fafb;
  --color-gray-100: #f3f4f6;
  --color-gray-200: #e5e7eb;
  --color-gray-300: #d1d5db;
  --color-gray-400: #9ca3af;
  --color-gray-500: #6b7280;
  --color-gray-600: #4b5563;
  --color-gray-700: #374151;
  --color-gray-800: #1f2937;
  --color-gray-900: #111827;

  /* Semantic Colors */
  --color-background: #ffffff;
  --color-surface: #f9fafb;
  --color-text-primary: #111827;
  --color-text-secondary: #6b7280;
  --color-border: rgba(0, 0, 0, 0.06);

  /* Info Colors */
  --color-danger: #ef4444;
  --color-danger-dark: #dc2626;
  --color-warning: #f59e0b;
  --color-warning-dark: #d97706;
  --color-success: #10b981;
  --color-success-dark: #059669;
  --color-info: #3b82f6;
  --color-info-dark: #2563eb;

  /* Spacing */
  --spacing-xs: 0.25rem;
  --spacing-sm: 0.5rem;
  --spacing-md: 1rem;
  --spacing-lg: 1.5rem;
  --spacing-xl: 2rem;
  --spacing-2xl: 3rem;
  --spacing-3xl: 4rem;

  /* Typography */
  --font-sans:
    -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
  --font-mono:
    'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;

  /* Border Radius */
  --radius-sm: 0.375rem;
  --radius-md: 0.5rem;
  --radius-lg: 0.75rem;
  --radius-xl: 1rem;
  --radius-full: 9999px;

  /* Shadows */
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
  --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
  --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
  --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.15);

  /* Transitions */
  --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
  --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
  --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
  --transition-slower: 500ms cubic-bezier(0.4, 0, 0.2, 1);

  /* Z-Index Scale */
  --z-base: 1;
  --z-dropdown: 100;
  --z-sticky: 200;
  --z-fixed: 300;
  --z-modal-backdrop: 400;
  --z-modal: 500;
  --z-popover: 600;
  --z-tooltip: 700;
}

/* Dark mode color overrides */
@media (prefers-color-scheme: dark) {
  :root {
    --color-background: #0f172a;
    --color-surface: #1e293b;
    --color-text-primary: #f1f5f9;
    --color-text-secondary: #94a3b8;
    --color-border: rgba(255, 255, 255, 0.1);
  }
}

/* Global Reset & Base Styles */
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

body {
  font-family: var(--font-sans);
  font-size: 16px;
  line-height: 1.5;
  color: var(--color-text-primary);
  background-color: var(--color-background);
}

.animated-bg {
  background: var(--gradient-simple);
  background-size: 300% 300%; /* gives it room to move */
  animation: gradientShift 6s ease infinite;
}

/* App Layout */
.app-layout {
  position: fixed;
  inset: 0;
  display: grid;
  grid-template-rows: auto 1fr auto;
}

.app-main {
  overflow-y: visible;
}

.app-main-container {
  flex: 1;
  overflow-y: auto;
}

@media (max-width: 600px) {
  .app-main {
    padding-top: 0;
  }
}

/* Typography Utilities */
h1,
h2,
h3,
h4,
h5,
h6 {
  font-weight: 700;
  line-height: 1.2;
  color: var(--color-text-primary);
}

p {
  line-height: 1.7;
  color: var(--color-text-secondary);
}

a {
  color: var(--color-primary);
  text-decoration: none;
  transition: color var(--transition-fast);
}

/* Selection */
::selection {
  background: var(--gradient-simple);
  color: white;
}

/* Scrollbar Styling (Webkit) */
::-webkit-scrollbar {
  width: 12px;
}

::-webkit-scrollbar-track {
  background: var(--color-surface);
}

::-webkit-scrollbar-thumb {
  background: var(--color-gray-400);
  border-radius: var(--radius-full);
  border: 3px solid var(--color-surface);
}

::-webkit-scrollbar-thumb:hover {
  background: var(--color-gray-500);
}

/* Focus Styles */
:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

@keyframes gradientShift {
  0% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
  100% {
    background-position: 0% 50%;
  }
}

/* Button Reset */
button {
  font-family: inherit;
  cursor: pointer;
}

/* Image Defaults */
img {
  height: auto;
  display: block;
}

/* Smooth Scrolling */
@media (prefers-reduced-motion: no-preference) {
  html {
    scroll-behavior: smooth;
  }
}

/* Reduce motion for accessibility */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* components/Button/Button.css */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--spacing-sm);
  font-weight: 600;
  text-decoration: none;
  border: none;
  border-radius: var(--radius-lg);
  transition: all var(--transition-base);
  cursor: pointer;
  font-family: inherit;
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
  -webkit-user-select: none;
}

.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  pointer-events: none;
}

.btn:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* States */
.btn-active {
  background: var(--gradient-simple);
  color: white;
  border-color: transparent;
}

.btn-full-width {
  width: 100%;
}

.btn-loading {
  position: relative;
  pointer-events: none;
}

.btn-loading .btn-icon {
  animation: spin 1s linear infinite;
}

@keyframes spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

/* Sizes */
.btn-sm {
  padding: 0.5rem 1rem;
  font-size: 0.875rem;
}

.btn-md {
  padding: 0.875rem 1.75rem;
  font-size: 1rem;
}

.btn-lg {
  padding: 1rem 2rem;
  font-size: 1.125rem;
}

/* Variants */
.btn-primary {
  background: var(--gradient-simple);
  color: white;
  box-shadow: 0 4px 12px var(--shadow-primary);
}

.btn-primary:hover:not(:disabled) {
  background: var(--gradient-primary-hover);
  transform: translateY(-2px);
  box-shadow: 0 8px 20px var(--shadow-primary-lg);
}

.btn-primary:active:not(:disabled) {
  transform: translateY(0);
}

.btn-secondary {
  background: white;
  color: var(--color-primary);
  border: 2px solid var(--color-primary);
}

.btn-secondary:hover:not(:disabled) {
  background: var(--gradient-simple);
  color: white;
  border-color: transparent;
  transform: translateY(-2px);
  box-shadow: 0 4px 12px var(--shadow-primary);
}

.btn-outline {
  background: transparent;
  color: var(--color-primary);
  border: 2px solid var(--color-primary);
}

.btn-outline:hover:not(:disabled) {
  background: var(--color-primary);
  color: white;
  transform: translateY(-2px);
}

.btn-ghost {
  background: transparent;
  color: var(--color-primary);
}

.btn-ghost:hover:not(:disabled) {
  background: rgba(20, 184, 166, 0.08);
  transform: translateY(-1px);
}

.btn-danger {
  background: var(--color-danger);
  color: white;
}
  
.btn-danger:hover:not(:disabled) {
  background: var(--color-danger-dark);
}

.btn-success {
  background: var(--color-success);
  color: white;
}

.btn-success:hover:not(:disabled) {
  background: var(--color-success-dark);
}

.btn-warning {
  background: var(--color-warning);
  color: white;
}

.btn-warning:hover:not(:disabled) {
  background: var(--color-warning-dark);
}

.btn-info {
  background: var(--color-info);
  color: white;
}

.btn-info:hover:not(:disabled) {
  background: var(--color-info-dark);
}

.btn-icon {
  display: inline-flex;
  align-items: center;
}

.btn-content {
  display: inline-flex;
  align-items: center;
}

/* Touch device optimizations */
@media (hover: none) {
  .btn-primary:hover:not(:disabled),
  .btn-secondary:hover:not(:disabled),
  .btn-outline:hover:not(:disabled),
  .btn-ghost:hover:not(:disabled) {
    transform: none;
  }

  .btn:active:not(:disabled) {
    transform: scale(0.97);
    transition: transform 100ms ease-out;
  }
}

/* Mobile button sizes for better touch targets */
@media (max-width: 639px) {
  .btn-sm {
    padding: 0.625rem 1.25rem;
    min-height: 44px;
  }

  .btn-md {
    padding: 0.875rem 1.75rem;
    min-height: 48px;
  }

  .btn-lg {
    padding: 1rem 2rem;
    min-height: 52px;
  }
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
  .btn-secondary {
    background: transparent;
  }

  .btn-ghost:hover:not(:disabled) {
    background: rgba(20, 184, 166, 0.15);
  }
}


/* components/Card/Card.css */
.card {
  background: var(--color-background);
  border-radius: var(--radius-xl);
  transition: all var(--transition-base);
}

/* Padding Sizes */
.card-padding-sm {
  padding: var(--spacing-lg);
}

.card-padding-md {
  padding: var(--spacing-xl);
}

.card-padding-lg {
  padding: var(--spacing-2xl);
}

/* Variants */
.card-default {
  box-shadow: var(--shadow-md);
  border: 1px solid var(--color-border);
}

.card-elevated {
  box-shadow: var(--shadow-lg);
  border: 1px solid var(--color-border);
}

.card-outlined {
  border: 2px solid var(--color-border);
  box-shadow: none;
}

.card-gradient {
  background: var(--gradient-primary);
  color: white;
  border: none;
  box-shadow: var(--shadow-lg);
}

/* Hover Effect */
.card-hover {
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}

.card-hover:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 24px rgba(20, 184, 166, 0.15);
}

.card-hover:hover.card-default,
.card-hover:hover.card-elevated {
  border-color: rgba(20, 184, 166, 0.2);
}

.card-hover:hover.card-outlined {
  border-color: var(--color-primary);
}

.card-hover:hover.card-gradient {
  box-shadow: 0 16px 32px var(--shadow-primary-lg);
}

.card-hover:active {
  transform: translateY(-2px);
}

/* Touch device optimizations */
@media (hover: none) {
  .card-hover:hover {
    transform: none;
    box-shadow: var(--shadow-lg);
  }

  .card-hover:active {
    transform: scale(0.98);
    transition: transform 100ms ease-out;
  }
}

/* Focus for accessibility */
.card[role='button']:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* Mobile responsive padding */
@media (max-width: 639px) {
  .card-padding-sm {
    padding: var(--spacing-md);
  }

  .card-padding-md {
    padding: var(--spacing-lg);
  }

  .card-padding-lg {
    padding: var(--spacing-lg);
  }
}

/* Dark Mode */
@media (prefers-color-scheme: dark) {
  .card-default,
  .card-elevated,
  .card-outlined {
    background: var(--color-surface);
    border-color: rgba(255, 255, 255, 0.06);
  }

  .card-hover:hover.card-default,
  .card-hover:hover.card-elevated {
    border-color: rgba(20, 184, 166, 0.4);
  }
}


/* components/D3NetworkPattern/D3NetworkPattern.css */
/**
 * D3 Network Pattern - Advanced Animated Background
 * High-performance force-directed graph visualization
 */

.d3-network-pattern {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100dvh;
  z-index: -1;
  pointer-events: none;
  opacity: 0.25;
  will-change: opacity;
  transition: opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1);
  overflow: hidden;
}

.d3-network-pattern svg {
  display: block;
  width: 100%;
  height: 100%;
}

/* Node Groups */
.d3-node-group {
  will-change: opacity;
  transform-origin: center;
  transition: opacity 1.2s cubic-bezier(0.23, 1, 0.32, 1);
}

/* Node Halos - Radial gradient glow */
.d3-node-halo {
  will-change: opacity;
  animation: halo-pulse 10s ease-in-out infinite;
}

@keyframes halo-pulse {
  0%, 100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.04);
  }
}

/* Node Rings - Decorative outer circles */
.d3-node-ring {
  will-change: opacity;
  filter: drop-shadow(0 0 2px currentColor);
  opacity: 0.2;
}

/* Node Background - For image nodes */
.d3-node-bg {
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Node Images */
.d3-node-image {
  will-change: opacity;
  transition: opacity 1s cubic-bezier(0.23, 1, 0.32, 1);
  image-rendering: -webkit-optimize-contrast;
  image-rendering: crisp-edges;
}

/* Node Core - For non-image nodes */
.d3-node-core {
  will-change: fill-opacity, stroke-opacity;
  transition: all 1s cubic-bezier(0.23, 1, 0.32, 1);
  filter: drop-shadow(0 0 4px currentColor);
  opacity: 0.75;
}

/* Links */
.d3-link {
  will-change: stroke-opacity;
  transition: stroke-opacity 1s cubic-bezier(0.23, 1, 0.32, 1);
  filter: drop-shadow(0 0 2px rgba(20, 184, 166, 0.2));
}

/* Particles */
.d3-particle-group {
  pointer-events: none;
}

.d3-particle {
  will-change: opacity, transform;
  filter: drop-shadow(0 0 3px currentColor);
  mix-blend-mode: screen;
}

/* Dark Mode Enhancements */
@media (prefers-color-scheme: dark) {

  .d3-node-halo {
    filter: brightness(1.3);
  }

  .d3-node-core {
    filter: drop-shadow(0 0 6px currentColor) brightness(1.1);
  }

  .d3-node-ring {
    opacity: 0.3;
    filter: drop-shadow(0 0 3px currentColor);
  }

  .d3-link {
    filter: drop-shadow(0 0 3px rgba(20, 184, 166, 0.3));
  }

  .d3-particle {
    filter: drop-shadow(0 0 4px currentColor);
  }
}

/* Responsive Adjustments */
@media (max-width: 1024px) {
  .d3-network-pattern {
    opacity: 0.25;
  }

  .d3-node-halo {
    animation-duration: 12s;
  }
}

@media (max-width: 768px) {
  .d3-network-pattern {
    opacity: 0.2;
  }

  .d3-node-halo {
    animation: none;
  }

  .d3-node-ring {
    opacity: 0.15;
  }

  .d3-node-core {
    filter: drop-shadow(0 0 3px currentColor);
  }

  .d3-link {
    filter: drop-shadow(0 0 1.5px rgba(20, 184, 166, 0.15));
  }

  .d3-particle {
    filter: drop-shadow(0 0 2px currentColor);
  }
}

@media (max-width: 480px) {
  .d3-network-pattern {
    opacity: 0.18;
  }

  .d3-node-halo {
    animation: none;
  }

  .d3-node-ring {
    opacity: 0.12;
  }

  .d3-node-core {
    filter: drop-shadow(0 0 2px currentColor);
  }

  .d3-link {
    filter: none;
  }
}

/* Performance: Reduce Motion */
@media (prefers-reduced-motion: reduce) {
  .d3-network-pattern,
  .d3-node-group,
  .d3-node-halo,
  .d3-node-ring,
  .d3-node-core,
  .d3-node-image,
  .d3-link,
  .d3-particle {
    animation: none !important;
    transition-duration: 0.01ms !important;
  }

  .d3-network-pattern {
    opacity: 0.25;
  }
}

/* High contrast mode support */
@media (prefers-contrast: high) {
  .d3-network-pattern {
    opacity: 0.1;
  }

  .d3-link {
    filter: none;
  }

  .d3-node-core,
  .d3-particle {
    filter: none;
  }
}

/* Print styles */
@media print {
  .d3-network-pattern {
    display: none;
  }
}


/* components/Footer/Footer.css */
.site-footer {
  background: linear-gradient(180deg, #f9fafb 0%, #f3f4f6 100%);
  border-top: 1px solid rgba(0, 0, 0, 0.06);
  margin-top: auto;
}

.footer-container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 3rem 1.5rem 2rem;
}

.footer-content {
  display: flex;
  flex-direction: column;
  gap: 2rem;
  margin-bottom: 2rem;
}

.footer-brand {
  text-align: center;
}

.footer-title {
  font-size: 1.5rem;
  font-weight: 700;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  margin-bottom: 0.5rem;
}

.footer-tagline {
  color: var(--color-text-secondary);
  font-size: 0.9375rem;
  line-height: 1.5;
}

.footer-social {
  display: flex;
  justify-content: center;
  gap: 1rem;
}

.social-link {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: var(--radius-full);
  background: var(--color-background);
  color: var(--color-text-secondary);
  font-size: 1.125rem;
  text-decoration: none;
  transition: all var(--transition-slow);
  box-shadow: var(--shadow-sm);
}

.social-link:hover {
  background: var(--gradient-simple);
  color: white;
  transform: translateY(-4px) scale(1.05);
  box-shadow: 0 8px 16px var(--shadow-primary);
}

.social-link:active {
  transform: translateY(-2px) scale(1.02);
}

.footer-bottom {
  padding-top: 2rem;
  border-top: 1px solid rgba(0, 0, 0, 0.06);
  text-align: center;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.footer-copyright,
.footer-tech {
  color: var(--color-gray-400);
  font-size: 0.875rem;
}

.footer-tech {
  opacity: 0.8;
}

@media (max-width: 600px) {
  .site-footer {
    display: none;
  }
}

@media (min-width: 768px) {
  .footer-content {
    flex-direction: row;
    justify-content: space-between;
    align-items: center;
  }

  .footer-brand {
    text-align: left;
  }

  .footer-bottom {
    flex-direction: row;
    justify-content: space-between;
  }
}

@media (prefers-color-scheme: dark) {
  .site-footer {
    background: linear-gradient(180deg, #1f2937 0%, #111827 100%);
    border-top-color: rgba(255, 255, 255, 0.06);
  }

  .footer-tagline,
  .social-link {
    color: var(--color-text-secondary);
  }

  .social-link {
    background: var(--color-surface);
  }

  .social-link:hover {
    color: white;
  }

  .footer-bottom {
    border-top-color: rgba(255, 255, 255, 0.06);
  }

  .footer-copyright,
  .footer-tech {
    color: var(--color-gray-500);
  }
}


/* components/Header/Header.css */
.site-header {
  position: relative;
  z-index: 1000;
  background: rgba(255, 255, 255, 0.95);
  backdrop-filter: blur(10px);
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  border-bottom: 1px solid transparent;
}

.site-header.scrolled {
  background: rgba(255, 255, 255, 0.98);
  border-bottom-color: rgba(0, 0, 0, 0.08);
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
}

.header-container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 1rem 1.5rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.logo {
  display: flex;
  align-items: center;
  text-decoration: none;
  color: inherit;
  transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  transform: scale(0.95);
}

.logo:hover {
  transform: scale(1);
}

.logo-image {
  width: 75px;
  border-radius: 50%;
  margin-bottom: -50px;
}

.desktop-nav {
  display: none;
  gap: 2rem;
  align-items: center;
}

.nav-link {
  position: relative;
  color: var(--color-text-primary);
  text-decoration: none;
  font-weight: 500;
  font-size: 0.9375rem;
  padding: 0.5rem 0;
  transition: color var(--transition-fast);
}

.nav-link::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 2px;
  background: var(--gradient-horizontal);
  transform: scaleX(0);
  transform-origin: right;
  transition: transform var(--transition-slow);
}

.nav-link:hover {
  color: var(--color-primary);
}

.nav-link:hover::after {
  transform: scaleX(1);
  transform-origin: left;
}

.nav-link.active {
  color: var(--color-primary);
}

.nav-link.active::after {
  transform: scaleX(1);
}

.clear-cache-button {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border: 2px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-background);
  color: var(--color-text-secondary);
  cursor: pointer;
  transition: all var(--transition-base);
  padding: 0;
}

.clear-cache-button:hover:not(:disabled) {
  background: rgba(20, 184, 166, 0.08);
  border-color: var(--color-primary);
  color: var(--color-primary);
  transform: scale(1.05);
}

.clear-cache-button:active:not(:disabled) {
  transform: scale(0.95);
}

.clear-cache-button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.clear-cache-button:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

@media (max-width: 600px) {
  .site-header {
    display: none;
  }
}

@media (min-width: 600px) {
  .desktop-nav {
    display: flex;
  }
}

@media (prefers-color-scheme: dark) {
  .site-header {
    background: rgba(17, 24, 39, 0.95);
  }

  .site-header.scrolled {
    background: rgba(17, 24, 39, 0.98);
    border-bottom-color: rgba(255, 255, 255, 0.08);
  }

  .nav-link {
    color: #e5e7eb;
  }

  .hamburger span {
    background: var(--color-text-primary);
  }

  .clear-cache-button {
    background: var(--color-surface);
    border-color: var(--color-border);
  }
}


/* components/IconButton/IconButton.css */
.icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: var(--radius-md);
  background: transparent;
  cursor: pointer;
  transition: all var(--transition-base);
  font-family: inherit;
  color: var(--color-text-secondary);
}

.icon-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  pointer-events: none;
}

.icon-btn:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* Sizes */
.icon-btn-sm {
  width: 35px;
  height: 35px;
  font-size: 0.875rem;
}

.icon-btn-md {
  width: 40px;
  height: 40px;
  font-size: 1rem;
}

.icon-btn-lg {
  width: 50px;
  height: 50px;
  font-size: 1.5rem;
}

/* Variants */
.icon-btn-default:hover:not(:disabled) {
  background: rgba(20, 184, 166, 0.08);
  color: var(--color-primary);
}

.icon-btn-default:active:not(:disabled) {
  transform: scale(0.95);
}

.icon-btn-danger {
  color: #ef4444;
}

.icon-btn-danger:hover:not(:disabled) {
  background: rgba(239, 68, 68, 0.1);
  color: #dc2626;
}

.icon-btn-danger:active:not(:disabled) {
  transform: scale(0.95);
}

.icon-btn-primary {
  color: var(--color-primary);
  border: 1px solid var(--color-border);
}

.icon-btn-primary:hover:not(:disabled) {
  background: rgba(20, 184, 166, 0.08);
  border-color: var(--color-primary);
}

.icon-btn-primary:active:not(:disabled) {
  transform: scale(0.95);
}

/* Loading state */
.icon-btn-loading .icon-btn-content {
  animation: spin 1s linear infinite;
}

@keyframes spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

.icon-btn-content {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
  .icon-btn-primary {
    background: var(--color-surface);
    border-color: var(--color-border);
  }
}


/* components/Modal/Modal.css */
/**
 * Modal: Overlay and panel styles
 * Generic reusable modal with backdrop, panel, and animations
 * Portal-rendered at document.body level to escape stacking contexts
 */

.modal-overlay {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal-backdrop);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--spacing-md);
  background-color: rgba(0, 0, 0, 0.6);
  backdrop-filter: blur(8px);
  animation: modalFadeIn var(--transition-base);
  isolation: isolate;
}

.modal-panel {
  position: relative;
  width: 100%;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-xl);
  max-height: 90dvh;
  overflow-y: auto;
  z-index: var(--z-modal);
  animation: modalSlideIn var(--transition-slow);
}

.modal-panel:focus {
  outline: none;
}

/* Size variants */
.modal-panel-sm {
  max-width: 28rem;
}

.modal-panel-md {
  max-width: 32rem;
}

.modal-panel-lg {
  max-width: 42rem;
}

.modal-panel-xl {
  max-width: 56rem;
}

.modal-panel-full {
  max-width: 90vw;
}

/* Animations */
@keyframes modalFadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@keyframes modalSlideIn {
  from {
    opacity: 0;
    transform: scale(0.95) translateY(-20px);
  }
  to {
    opacity: 1;
    transform: scale(1) translateY(0);
  }
}

/* Dark mode adjustments */
@media (prefers-color-scheme: dark) {
  .modal-overlay {
    background-color: rgba(0, 0, 0, 0.7);
  }
}

/* Scrollbar styling for modal content */
.modal-panel::-webkit-scrollbar {
  width: 8px;
}

.modal-panel::-webkit-scrollbar-track {
  background: transparent;
}

.modal-panel::-webkit-scrollbar-thumb {
  background: var(--color-gray-400);
  border-radius: var(--radius-full);
}

.modal-panel::-webkit-scrollbar-thumb:hover {
  background: var(--color-gray-500);
}

/* Mobile adjustments */
@media (max-width: 639px) {
  .modal-overlay {
    padding: var(--spacing-sm);
  }

  .modal-panel {
    max-height: 95dvh;
  }

  .modal-panel-sm,
  .modal-panel-md,
  .modal-panel-lg,
  .modal-panel-xl,
  .modal-panel-full {
    max-width: 100%;
  }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .modal-overlay,
  .modal-panel {
    animation: none;
  }
}


/* components/PromptModal/PromptModal.css */
/**
 * PromptModal: Styled modal for prompt editing
 * Composes Modal with specific layout for prompt fields
 */

.prompt-modal-content {
  padding: var(--spacing-xl);
}

.prompt-modal-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--spacing-xl);
}

.prompt-modal-title {
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin: 0;
}

.prompt-modal-close {
  background: transparent;
  border: none;
  color: var(--color-text-secondary);
  font-size: 1.75rem;
  line-height: 1;
  cursor: pointer;
  padding: 0;
  width: 2rem;
  height: 2rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-md);
  transition: all var(--transition-fast);
}

.prompt-modal-close:hover {
  color: var(--color-text-primary);
  background: rgba(0, 0, 0, 0.05);
}

.prompt-modal-close:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

.prompt-modal-form {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
}

.prompt-modal-field {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

.prompt-modal-label {
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--color-text-primary);
}

.prompt-modal-input,
.prompt-modal-textarea {
  width: 100%;
  padding: 0.75rem var(--spacing-md);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-background);
  color: var(--color-text-primary);
  font-size: 0.9375rem;
  font-family: var(--font-sans);
  transition: all var(--transition-base);
  -webkit-appearance: none;
  appearance: none;
}

.prompt-modal-input::placeholder,
.prompt-modal-textarea::placeholder {
  color: var(--color-text-secondary);
  opacity: 0.6;
}

.prompt-modal-input:focus,
.prompt-modal-textarea:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(20, 184, 166, 0.1);
}

.prompt-modal-textarea {
  resize: vertical;
  min-height: 120px;
}

.prompt-modal-hint {
  font-size: 0.75rem;
  color: var(--color-text-secondary);
  margin-top: calc(-1 * var(--spacing-xs));
}

.prompt-modal-actions {
  display: flex;
  flex-direction: row;
  justify-content: flex-end;
  gap: var(--spacing-md);
  margin-top: var(--spacing-lg);
}

/* Mobile adjustments */
@media (max-width: 639px) {
  .prompt-modal-content {
    padding: var(--spacing-lg);
  }

  .prompt-modal-actions {
    flex-direction: column;
    gap: var(--spacing-sm);
  }

  .prompt-modal-actions .btn {
    width: 100%;
  }
}

/* Dark mode adjustments */
@media (prefers-color-scheme: dark) {
  .prompt-modal-close:hover {
    background: rgba(255, 255, 255, 0.1);
  }

  .prompt-modal-input,
  .prompt-modal-textarea {
    background: var(--color-surface);
  }
}


/* components/SegmentButton/SegmentButton.css */
.segment-button {
  display: inline-flex;
  gap: 4px;
  background: var(--color-surface);
  padding: 4px;
  border-radius: var(--radius-lg);
  border: 1px solid var(--color-border);
  transition: all var(--transition-base);
}

.segment-button-full-width {
  display: flex;
  width: 100%;
}

.segment-button-disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

/* Sizes */
.segment-button-sm {
  padding: 3px;
  gap: 3px;
}

.segment-button-md {
  padding: 4px;
  gap: 4px;
}

.segment-button-lg {
  padding: 5px;
  gap: 5px;
}

/* Options */
.segment-button-option {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--spacing-xs);
  min-width: 80px;
  padding: var(--spacing-sm) var(--spacing-lg);
  background: transparent;
  border: none;
  border-radius: var(--radius-md);
  font-family: inherit;
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--color-text-secondary);
  cursor: pointer;
  transition: all var(--transition-base);
  white-space: nowrap;
  user-select: none;
}

.segment-button-sm .segment-button-option {
  min-width: 60px;
  padding: var(--spacing-xs) var(--spacing-md);
  font-size: 0.8125rem;
}

.segment-button-lg .segment-button-option {
  min-width: 100px;
  padding: var(--spacing-md) var(--spacing-xl);
  font-size: 1rem;
}

.segment-button-option:hover:not(:disabled):not(.segment-button-option-active) {
  color: var(--color-text-primary);
  background: var(--color-background);
}

.segment-button-option:active:not(:disabled) {
  transform: scale(0.98);
}

.segment-button-option:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

.segment-button-option-active {
  background: var(--gradient-primary);
  color: white;
  font-weight: 600;
  box-shadow: var(--shadow-md);
}

.segment-button-option-active:hover {
  background: var(--gradient-primary);
  color: white;
}

/* Icon and Label */
.segment-button-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 1em;
  line-height: 1;
}

.segment-button-label {
  display: inline-block;
  line-height: 1;
}

/* Mobile Responsive */
@media (max-width: 480px) {
  .segment-button-option {
    min-width: 70px;
    padding: var(--spacing-sm) var(--spacing-md);
    font-size: 0.8125rem;
  }

  .segment-button-sm .segment-button-option {
    min-width: 55px;
    padding: var(--spacing-xs) var(--spacing-sm);
    font-size: 0.75rem;
  }

  .segment-button-lg .segment-button-option {
    min-width: 85px;
    padding: var(--spacing-sm) var(--spacing-lg);
    font-size: 0.9375rem;
  }
}

@media (max-width: 360px) {
  .segment-button-option {
    min-width: 60px;
    padding: var(--spacing-xs) var(--spacing-sm);
    font-size: 0.75rem;
    gap: 2px;
  }

  .segment-button-icon {
    font-size: 0.875em;
  }
}


/* components/TabBar/TabBar.css */
.mobile-tabbar {
  display: none;
}

@media (max-width: 600px) {
  .mobile-tabbar {
    display: flex;
    justify-content: space-around;
    align-items: center;
    background: rgba(255, 255, 255, 0.98);
    backdrop-filter: blur(10px);
    border-top: 1px solid var(--color-border);
    padding: 0.5rem 0 0.5rem;
    z-index: var(--z-fixed);
    box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.06);
  }

  .tabbar-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.25rem;
    padding: 0.5rem 1rem;
    color: var(--color-text-secondary);
    text-decoration: none;
    transition: all var(--transition-base);
    flex: 1;
    position: relative;
  }

  .tabbar-item::before {
    content: '';
    position: absolute;
    top: -1px;
    left: 50%;
    transform: translateX(-50%) scaleX(0);
    width: 60%;
    height: 3px;
    background: var(--gradient-horizontal);
    border-radius: 0 0 3px 3px;
    transition: transform var(--transition-slow);
  }

  .tabbar-item.active::before {
    transform: translateX(-50%) scaleX(1);
  }

  .tabbar-icon {
    font-size: 1.25rem;
    transition: all var(--transition-base);
  }

  .tabbar-label {
    font-size: 0.75rem;
    font-weight: 500;
    transition: all var(--transition-base);
  }

  .tabbar-item.active {
    color: var(--color-primary);
  }

  .tabbar-item.active .tabbar-icon {
    transform: scale(1.1);
  }

  .tabbar-item:active {
    transform: scale(0.95);
  }

  @media (prefers-color-scheme: dark) {
    .mobile-tabbar {
      background: rgba(17, 24, 39, 0.98);
      border-top-color: rgba(255, 255, 255, 0.1);
    }

    .tabbar-item {
      color: var(--color-text-secondary);
    }

    .tabbar-item.active {
      color: var(--color-primary);
    }
  }
}


/* components/Tabs/Tabs.css */
.tabs-container {
  width: 100%;
}

.tabs-header {
  display: flex;
  gap: var(--spacing-xs);
  border-bottom: 2px solid var(--color-border);
  margin-bottom: var(--spacing-xl);
  overflow-x: auto;
  scrollbar-width: thin;
  position: relative;
}

.tabs-header::-webkit-scrollbar {
  height: 4px;
}

.tabs-header::-webkit-scrollbar-thumb {
  background: var(--color-gray-300);
  border-radius: var(--radius-full);
}

.tabs-indicator {
  position: absolute;
  bottom: -2px;
  height: 3px;
  background: var(--gradient-horizontal);
  border-radius: var(--radius-full) var(--radius-full) 0 0;
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  z-index: 1;
}

.tab-button {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-md) var(--spacing-lg);
  background: transparent;
  border: none;
  color: var(--color-text-secondary);
  font-size: 0.9375rem;
  font-weight: 500;
  white-space: nowrap;
  transition: all var(--transition-base);
  cursor: pointer;
  position: relative;
  z-index: 2;
}

.tab-button::before {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--gradient-bg-subtle);
  opacity: 0;
  transition: opacity var(--transition-base);
  border-radius: var(--radius-md) var(--radius-md) 0 0;
}

.tab-button:hover::before {
  opacity: 1;
}

.tab-button:hover {
  color: var(--color-text-primary);
}

.tab-button:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}

.tab-button.active {
  color: var(--color-primary);
  font-weight: 600;
}

.tab-icon {
  font-size: 1.125rem;
  line-height: 1;
}

.tab-label {
  line-height: 1;
}

.tabs-content {
  animation: tabFadeIn 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

@keyframes tabFadeIn {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Mobile responsive */
@media (max-width: 768px) {
  .tab-button {
    padding: var(--spacing-sm) var(--spacing-md);
    font-size: 0.875rem;
  }

  .tab-icon {
    font-size: 1rem;
  }

  .tabs-header {
    gap: 0;
    margin-bottom: var(--spacing-lg);
  }
}

@media (max-width: 480px) {
  .tab-label {
    display: none;
  }

  .tab-button {
    justify-content: center;
    min-width: 48px;
    padding: var(--spacing-sm);
  }

  .tab-icon {
    margin: 0;
  }
}


/* components/Toast/Toast.css */
/**
 * Toast: Notification component with variants
 * Supports success, error, info, and warning styles
 */

.toast-container {
  position: fixed;
  top: 5rem;
  right: 1rem;
  z-index: var(--z-tooltip);
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
  pointer-events: none;
}

.toast {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
  padding: var(--spacing-md) var(--spacing-lg);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  min-width: 300px;
  max-width: 400px;
  pointer-events: auto;
  animation: toastSlideIn var(--transition-base);
}

.toast-exiting {
  animation: toastSlideOut var(--transition-base);
}

.toast-icon {
  flex-shrink: 0;
  font-size: 1.25rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

.toast-content {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xs);
}

.toast-title {
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--color-text-primary);
  margin: 0;
}

.toast-message {
  font-size: 0.875rem;
  color: var(--color-text-secondary);
  line-height: 1.4;
  margin: 0;
}

.toast-close {
  flex-shrink: 0;
  background: transparent;
  border: none;
  color: var(--color-text-secondary);
  font-size: 1.25rem;
  line-height: 1;
  cursor: pointer;
  padding: 0;
  width: 1.5rem;
  height: 1.5rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-sm);
  transition: all var(--transition-fast);
}

.toast-close:hover {
  color: var(--color-text-primary);
  background: rgba(0, 0, 0, 0.05);
}

.toast-close:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* Variants */
.toast-success {
  border-left: 4px solid #10b981;
}

.toast-success .toast-icon {
  color: #10b981;
}

.toast-error {
  border-left: 4px solid #ef4444;
}

.toast-error .toast-icon {
  color: #ef4444;
}

.toast-warning {
  border-left: 4px solid var(--color-secondary);
}

.toast-warning .toast-icon {
  color: var(--color-secondary);
}

.toast-info {
  border-left: 4px solid var(--color-primary);
}

.toast-info .toast-icon {
  color: var(--color-primary);
}

/* Animations */
@keyframes toastSlideIn {
  from {
    opacity: 0;
    transform: translateX(100%);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes toastSlideOut {
  from {
    opacity: 1;
    transform: translateX(0);
  }
  to {
    opacity: 0;
    transform: translateX(100%);
  }
}

/* Mobile adjustments */
@media (max-width: 639px) {
  .toast-container {
    top: 4.5rem;
    right: 0.5rem;
    left: 0.5rem;
  }

  .toast {
    min-width: unset;
    max-width: unset;
    width: 100%;
  }
}

/* Dark mode adjustments */
@media (prefers-color-scheme: dark) {
  .toast-close:hover {
    background: rgba(255, 255, 255, 0.1);
  }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .toast,
  .toast-exiting {
    animation: none;
  }
}


/* components/WidgetCarousel/WidgetCarousel.css */
.widget-carousel-section {
  padding: var(--spacing-3xl) var(--spacing-lg);
  max-width: 1200px;
  margin: 0 auto;
}

.carousel-header {
  text-align: center;
  margin-bottom: var(--spacing-2xl);
}

.carousel-title {
  font-size: 2rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-md);
}

.carousel-subtitle {
  font-size: 1.125rem;
  color: var(--color-text-secondary);
}

.search-container {
  display: flex;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-2xl);
  flex-wrap: wrap;
  align-items: center;
}

.search-input-wrapper {
  position: relative;
  flex: 1;
  min-width: 250px;
}

.search-icon {
  position: absolute;
  left: var(--spacing-md);
  top: 50%;
  transform: translateY(-50%);
  color: var(--color-text-secondary);
  pointer-events: none;
}

.search-input {
  width: 100%;
  padding: var(--spacing-md) var(--spacing-md) var(--spacing-md) 3rem;
  border: 2px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-background);
  color: var(--color-text-primary);
  font-size: 1rem;
  transition: all var(--transition-base);
}

.search-input:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(20, 184, 166, 0.1);
}

.view-all-link {
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-md) var(--spacing-lg);
  background: var(--gradient-simple);
  color: white;
  font-weight: 600;
  border-radius: var(--radius-lg);
  text-decoration: none;
  transition: all var(--transition-base);
  white-space: nowrap;
}

.view-all-link:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lg);
}

.widgets-carousel {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: var(--spacing-xl);
}

.widget-card-link {
  text-decoration: none;
  color: inherit;
  display: block;
  animation: fadeInUp 0.6s cubic-bezier(0.4, 0, 0.2, 1) both;
}

.widget-icon-large {
  font-size: 3rem;
  margin-bottom: var(--spacing-md);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 80px;
  height: 80px;
  background: rgba(20, 184, 166, 0.08);
  border-radius: var(--radius-xl);
  transition: transform var(--transition-base);
}

.widget-card-link:hover .widget-icon-large {
  transform: scale(1.1);
}

.widget-card-title {
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-sm);
}

.widget-card-description {
  font-size: 0.9375rem;
  color: var(--color-text-secondary);
  line-height: 1.6;
  margin-bottom: var(--spacing-md);
}

.widget-tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
}

.widget-tag {
  display: inline-block;
  padding: 0.25rem 0.625rem;
  background: rgba(20, 184, 166, 0.08);
  color: var(--color-primary);
  font-size: 0.75rem;
  font-weight: 500;
  border-radius: var(--radius-sm);
}

.no-results {
  grid-column: 1 / -1;
  text-align: center;
  padding: var(--spacing-3xl);
  color: var(--color-text-secondary);
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@media (max-width: 768px) {
  .widgets-carousel {
    grid-template-columns: 1fr;
  }

  .search-container {
    flex-direction: column;
    align-items: stretch;
  }

  .view-all-link {
    justify-content: center;
  }
}

@media (prefers-color-scheme: dark) {
  .search-input {
    background: var(--color-surface);
  }
}


/* pages/AboutPage/AboutPage.css */
.about-page {
  min-height: calc(100dvh - 80px);
  padding: 4rem 1.5rem;
  max-width: 1200px;
  margin: 0 auto;
}

/* Hero Section */
.hero-section {
  text-align: center;
  padding: 3rem 0;
  animation: fadeInDown 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

.hero-content {
  max-width: 800px;
  margin: 0 auto;
}

.hero-avatar {
  margin-bottom: var(--spacing-xl);
  display: flex;
  justify-content: center;
}

.avatar-frame-wrapper {
  position: relative;
  width: 160px;
  height: 160px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.avatar-image {
  width: 120px;
  height: 120px;
  border-radius: var(--radius-full);
  object-fit: cover;
  box-shadow: var(--shadow-lg);
  position: relative;
  z-index: 1;
}

.avatar-frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 160px;
  height: 160px;
  pointer-events: none;
  z-index: 2;
}

.hero-title {
  font-size: 3rem;
  font-weight: 700;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  margin-bottom: var(--spacing-sm);
}

.hero-tagline {
  font-size: 1.375rem;
  font-weight: 600;
  color: var(--color-text-secondary);
  margin-bottom: var(--spacing-xl);
}

.hero-description {
  font-size: 1.125rem;
  color: var(--color-text-secondary);
  line-height: 1.7;
  margin-bottom: var(--spacing-2xl);
  max-width: 700px;
  margin-left: auto;
  margin-right: auto;
}

.hero-links {
  display: flex;
  gap: var(--spacing-md);
  justify-content: center;
  flex-wrap: wrap;
}

/* Mission Section */
.mission-section {
  margin-bottom: 5rem;
  animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1) 0.2s both;
}

.mission-content {
  text-align: center;
}

.mission-icon {
  font-size: 3rem;
  color: var(--color-accent);
  margin-bottom: var(--spacing-lg);
  animation: pulse 2s ease-in-out infinite;
}

.mission-title {
  font-size: 2rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-lg);
}

.mission-text {
  font-size: 1.0625rem;
  color: var(--color-text-secondary);
  line-height: 1.8;
  max-width: 800px;
  margin: 0 auto var(--spacing-xl);
}

.privacy-badge {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
  padding: var(--spacing-lg);
  background: rgba(20, 184, 166, 0.08);
  border: 2px solid rgba(20, 184, 166, 0.2);
  border-radius: var(--radius-lg);
  max-width: 800px;
  margin: 0 auto;
  text-align: left;
}

.privacy-badge-icon {
  font-size: 2rem;
  flex-shrink: 0;
}

.privacy-badge-content {
  font-size: 0.9375rem;
  color: var(--color-text-secondary);
  line-height: 1.6;
}

.privacy-badge-content strong {
  color: var(--color-primary);
  font-weight: 700;
}

/* Stats Section */
.stats-section {
  margin-bottom: 5rem;
  animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1) 0.3s both;
}

.stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: var(--spacing-xl);
}

.stat-card {
  text-align: center;
  transition: all var(--transition-base);
}

.stat-card:hover {
  transform: translateY(-8px);
  box-shadow: var(--shadow-xl);
}

.stat-icon {
  font-size: 2.5rem;
  color: var(--color-primary);
  margin-bottom: var(--spacing-md);
  transition: transform var(--transition-base);
}

.stat-card:hover .stat-icon {
  transform: scale(1.2);
}

.stat-value {
  font-size: 2.5rem;
  font-weight: 700;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  margin-bottom: var(--spacing-xs);
}

.stat-label {
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--color-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

/* Expertise Section */
.expertise-section {
  margin-bottom: 5rem;
  animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1) 0.4s both;
}

.section-title {
  font-size: 2.25rem;
  font-weight: 700;
  text-align: center;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  margin-bottom: var(--spacing-2xl);
}

.expertise-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: var(--spacing-xl);
}

.expertise-card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  text-align: left;
}

.expertise-icon {
  font-size: 2.5rem;
  color: var(--color-primary);
  margin-bottom: var(--spacing-lg);
  transition: all var(--transition-base);
}

.expertise-card:hover .expertise-icon {
  transform: scale(1.1) rotate(5deg);
  color: var(--color-secondary);
}

.expertise-title {
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-md);
}

.expertise-description {
  font-size: 0.9375rem;
  color: var(--color-text-secondary);
  line-height: 1.7;
}

/* Timeline Section */
.timeline-section {
  animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1) 0.5s both;
}

.timeline-page {
  min-height: calc(100dvh - 80px);
  padding: 6rem 1.5rem 4rem;
  max-width: 900px;
  margin: 0 auto;
}

.timeline-header {
  text-align: center;
  margin-bottom: 4rem;
}

.timeline-page-title {
  font-size: 2.5rem;
  font-weight: 700;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  margin-bottom: var(--spacing-md);
}

.timeline-page-subtitle {
  font-size: 1.125rem;
  color: var(--color-text-secondary);
  max-width: 700px;
  margin: 0 auto var(--spacing-2xl);
  line-height: 1.6;
}

.timeline-filters {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xl);
  margin-bottom: var(--spacing-2xl);
  max-width: 1000px;
  margin-left: auto;
  margin-right: auto;
}

.filter-section {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.filter-section-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--spacing-md);
}

.filter-section-title {
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--color-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin: 0;
}

.filter-buttons {
  display: flex;
  gap: var(--spacing-sm);
  justify-content: center;
  flex-wrap: wrap;
}

.tag-filters {
  display: flex;
  gap: var(--spacing-xs);
  flex-wrap: wrap;
  justify-content: center;
}

.timeline-container {
  position: relative;
  padding-left: 14rem;
}

.timeline-line {
  position: absolute;
  left: 11rem;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--gradient-vertical);
  opacity: 0.5;
  border-radius: 2px;
}

.timeline-item {
  position: relative;
  margin-bottom: var(--spacing-3xl);
  opacity: 0;
  transform: translateY(30px);
  transition: all var(--transition-slower);
}

.timeline-item.visible {
  opacity: 1;
  transform: translateY(0);
}

.timeline-date-anchor {
  position: absolute;
  left: -13.5rem;
  top: 0;
  width: 10rem;
  text-align: right;
  padding-right: 1rem;
  opacity: 0;
  transform: translateX(-20px);
  transition: all var(--transition-slower);
}

.timeline-item.visible .timeline-date-anchor {
  opacity: 1;
  transform: translateX(0);
}

.date-anchor-content {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.25rem;
  margin-bottom: 0.5rem;
}

.date-primary,
.date-secondary,
.date-current {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
}

.date-month {
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--color-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.date-year {
  font-size: 1.5rem;
  font-weight: 700;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  line-height: 1.2;
  transition: all var(--transition-base);
}

.timeline-item:hover .date-year {
  transform: scale(1.05);
  filter: brightness(1.2);
}

.date-separator {
  font-size: 1rem;
  color: var(--color-text-secondary);
  margin: 0.125rem 0;
  opacity: 0.6;
}

.date-duration {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  padding: 0.25rem 0.625rem;
  background: rgba(20, 184, 166, 0.1);
  border: 1px solid rgba(20, 184, 166, 0.2);
  border-radius: var(--radius-sm);
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--color-primary);
  white-space: nowrap;
  transition: all var(--transition-base);
}

.date-duration svg {
  font-size: 0.625rem;
}

.timeline-item.current .date-duration {
  background: rgba(20, 184, 166, 0.2);
  border-color: var(--color-primary);
  animation: pulse 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
}

.timeline-item.current .date-anchor-content {
  position: relative;
}

.timeline-item.current .date-anchor-content::before {
  content: '';
  position: absolute;
  top: -0.5rem;
  right: -0.5rem;
  bottom: -0.5rem;
  left: -0.5rem;
  background: linear-gradient(135deg, 
    rgba(20, 184, 166, 0.15), 
    rgba(139, 92, 246, 0.15));
  border-radius: var(--radius-md);
  z-index: -1;
  animation: currentGlow 3s ease-in-out infinite;
}

@keyframes currentGlow {
  0%, 100% {
    opacity: 0.5;
    transform: scale(1);
  }
  50% {
    opacity: 0.8;
    transform: scale(1.05);
  }
}

.timeline-marker {
  position: absolute;
  left: -2.75rem;
  top: 1rem;
  z-index: 2;
}

.timeline-icon {
  width: 3rem;
  height: 3rem;
  border-radius: var(--radius-full);
  background: var(--color-primary);
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.25rem;
  box-shadow:
    0 0 0 4px var(--color-background),
    0 0 0 6px rgba(20, 184, 166, 0.2);
  transition: all var(--transition-slow);
}

.timeline-item.visible .timeline-icon {
  animation: iconPulse 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
}

.timeline-item.current .timeline-icon {
  box-shadow:
    0 0 0 4px var(--color-background),
    0 0 0 6px var(--color-primary),
    0 0 20px var(--color-primary);
  animation: currentPulse 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
}

.timeline-card {
  width: 100%;
}

.timeline-card-header {
  display: flex;
  gap: var(--spacing-lg);
  margin-bottom: var(--spacing-lg);
  align-items: flex-start;
}

.timeline-logo-wrapper {
  flex-shrink: 0;
}

.timeline-logo {
  width: 64px;
  height: 64px;
  border-radius: var(--radius-md);
  object-fit: contain;
  background: var(--color-surface);
  padding: var(--spacing-sm);
}

.timeline-logo-placeholder {
  width: 64px;
  height: 64px;
  border-radius: var(--radius-md);
  background: var(--gradient-simple);
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 1.25rem;
  color: white;
}

.timeline-header-content {
  flex: 1;
  min-width: 0;
}

.timeline-meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-sm);
  font-size: 0.875rem;
  color: var(--color-text-secondary);
}

.timeline-meta span {
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-xs);
}

.timeline-date {
  font-weight: 600;
  color: var(--color-primary);
}

.current-badge {
  display: inline-block;
  padding: 0.125rem 0.5rem;
  background: var(--gradient-simple);
  color: white;
  border-radius: var(--radius-sm);
  font-size: 0.75rem;
  font-weight: 600;
  margin-left: var(--spacing-sm);
  animation: pulse 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
}

.timeline-location {
  color: var(--color-text-secondary);
}

.timeline-title {
  font-size: 1.375rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-sm);
}

.timeline-company {
  font-size: 1rem;
  font-weight: 600;
  color: var(--color-text-secondary);
  margin-bottom: var(--spacing-md);
}

.timeline-description {
  font-size: 0.9375rem;
  color: var(--color-text-secondary);
  line-height: 1.7;
  margin-bottom: var(--spacing-lg);
}

.timeline-achievements {
  margin-bottom: var(--spacing-lg);
}

.achievements-list {
  list-style: none;
  margin-top: var(--spacing-md);
  padding: 0;
}

.achievement-item {
  position: relative;
  padding-left: var(--spacing-lg);
  padding-top: var(--spacing-sm);
  padding-bottom: var(--spacing-sm);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-text-secondary);
}

.achievement-item::before {
  content: '▸';
  position: absolute;
  left: 0;
  color: var(--color-primary);
  font-weight: 700;
}

.timeline-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.timeline-tag {
  display: inline-block;
  padding: 0.375rem 0.75rem;
  background: rgba(20, 184, 166, 0.08);
  color: var(--color-primary);
  font-size: 0.8125rem;
  font-weight: 500;
  border-radius: var(--radius-sm);
  transition: all var(--transition-base);
}

.timeline-tag:hover {
  background: rgba(20, 184, 166, 0.15);
  transform: translateY(-2px);
}

/* Animations */
@keyframes fadeInDown {
  from {
    opacity: 0;
    transform: translateY(-20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes iconPulse {
  0%,
  100% {
    box-shadow:
      0 0 0 4px var(--color-background),
      0 0 0 6px rgba(20, 184, 166, 0.2);
  }
  50% {
    box-shadow:
      0 0 0 4px var(--color-background),
      0 0 0 8px rgba(20, 184, 166, 0.4);
  }
}

@keyframes currentPulse {
  0%,
  100% {
    box-shadow:
      0 0 0 4px var(--color-background),
      0 0 0 6px var(--color-primary),
      0 0 20px var(--color-primary);
  }
  50% {
    box-shadow:
      0 0 0 4px var(--color-background),
      0 0 0 8px var(--color-primary),
      0 0 30px var(--color-primary);
  }
}

@keyframes pulse {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.7;
  }
}

/* Responsive Design */
@media (max-width: 768px) {
  .about-page {
    padding: 3rem 1rem;
  }

  .hero-section {
    padding: 2rem 0;
  }

  .hero-title {
    font-size: 2rem;
  }

  .hero-tagline {
    font-size: 1.125rem;
  }

  .hero-description {
    font-size: 1rem;
  }

  .avatar-frame-wrapper {
    width: 130px;
    height: 130px;
  }

  .avatar-image {
    width: 100px;
    height: 100px;
  }

  .avatar-frame {
    width: 130px;
    height: 130px;
  }

  .stats-grid {
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: var(--spacing-md);
  }

  .stat-value {
    font-size: 2rem;
  }

  .expertise-grid {
    grid-template-columns: 1fr;
    gap: var(--spacing-lg);
  }

  .section-title {
    font-size: 1.75rem;
  }

  .mission-title {
    font-size: 1.5rem;
  }

  .timeline-container {
    padding-left: 0;
    padding-top: 3rem;
  }

  .timeline-line {
    left: 1.25rem;
  }

  .timeline-date-anchor {
    position: absolute;
    left: 0;
    top: -3rem;
    width: 100%;
    text-align: left;
    padding-right: 0;
    padding-left: 3.5rem;
  }

  .date-anchor-content {
    flex-direction: row;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
  }

  .date-primary,
  .date-secondary,
  .date-current {
    flex-direction: row;
    align-items: baseline;
    gap: 0.25rem;
  }

  .date-month {
    font-size: 0.75rem;
  }

  .date-year {
    font-size: 1.125rem;
  }

  .date-separator {
    font-size: 0.875rem;
    margin: 0 0.25rem;
  }

  .date-duration {
    font-size: 0.6875rem;
    padding: 0.1875rem 0.5rem;
  }

  .timeline-marker {
    left: 0;
    top: -2.5rem;
  }

  .timeline-icon {
    width: 2.5rem;
    height: 2.5rem;
    font-size: 1rem;
  }

  .timeline-card-header {
    flex-direction: column;
    gap: var(--spacing-md);
  }

  .timeline-logo,
  .timeline-logo-placeholder {
    width: 56px;
    height: 56px;
  }

  .timeline-meta {
    flex-direction: column;
    gap: var(--spacing-xs);
  }

  .timeline-page-title {
    font-size: 2rem;
  }
}

@media (min-width: 768px) {
  .about-page {
    padding: 6rem 2rem;
  }

  .timeline-section {
    max-width: 1100px;
    margin-left: auto;
    margin-right: auto;
  }

  .timeline-container {
    padding-left: 16rem;
  }

  .timeline-line {
    left: 12.5rem;
  }

  .timeline-date-anchor {
    left: -15rem;
    top: 0;
    width: 11rem;
    text-align: right;
    padding-right: 1.5rem;
    padding-left: 0;
  }

  .date-anchor-content {
    flex-direction: column;
    align-items: flex-end;
    gap: 0.25rem;
  }

  .date-primary,
  .date-secondary,
  .date-current {
    flex-direction: column;
    align-items: flex-end;
    gap: 0;
  }

  .date-month {
    font-size: 0.875rem;
  }

  .date-year {
    font-size: 1.5rem;
  }

  .date-separator {
    font-size: 1rem;
    margin: 0.125rem 0;
  }

  .date-duration {
    font-size: 0.75rem;
    padding: 0.25rem 0.625rem;
  }

  .timeline-marker {
    left: -3rem;
    top: 1rem;
  }

  .timeline-icon {
    width: 3rem;
    height: 3rem;
    font-size: 1.25rem;
  }
}

@media (prefers-color-scheme: dark) {
  .timeline-icon {
    box-shadow:
      0 0 0 4px var(--color-surface),
      0 0 0 6px rgba(20, 184, 166, 0.3);
  }

  .timeline-item.current .timeline-icon {
    box-shadow:
      0 0 0 4px var(--color-surface),
      0 0 0 6px var(--color-primary),
      0 0 20px var(--color-primary);
  }

  .timeline-logo {
    background: var(--color-background);
  }
}


/* pages/MainPage/MainPage.css */
.main-page {
  min-height: calc(100dvh - 80px);
  position: relative;
}

.animated-background {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100dvh;
  z-index: -2;
  overflow: hidden;
}

.gradient-mesh {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 20% 50%, rgba(20, 184, 166, 0.15) 0%, transparent 50%),
    radial-gradient(circle at 80% 80%, rgba(245, 158, 11, 0.15) 0%, transparent 50%),
    radial-gradient(circle at 60% 20%, rgba(236, 72, 153, 0.15) 0%, transparent 50%);
  animation: gradientShift 15s ease-in-out infinite;
}

.gradient-orbs {
  position: absolute;
  inset: 0;
}

.orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(80px);
  opacity: 0.4;
  animation: float-orb 20s ease-in-out infinite;
}

.orb-1 {
  width: 500px;
  height: 500px;
  background: radial-gradient(circle, rgba(20, 184, 166, 0.5) 0%, transparent 70%);
  top: -200px;
  left: -200px;
  animation-delay: 0s;
  animation-duration: 25s;
}

.orb-2 {
  width: 400px;
  height: 400px;
  background: radial-gradient(circle, rgba(245, 158, 11, 0.5) 0%, transparent 70%);
  top: 40%;
  right: -150px;
  animation-delay: -5s;
  animation-duration: 30s;
}

.orb-3 {
  width: 350px;
  height: 350px;
  background: radial-gradient(circle, rgba(236, 72, 153, 0.5) 0%, transparent 70%);
  bottom: -100px;
  left: 30%;
  animation-delay: -10s;
  animation-duration: 28s;
}

.orb-4 {
  width: 450px;
  height: 450px;
  background: radial-gradient(circle, rgba(139, 92, 246, 0.4) 0%, transparent 70%);
  top: 60%;
  left: 50%;
  animation-delay: -15s;
  animation-duration: 35s;
}

.noise-overlay {
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.03'/%3E%3C/svg%3E");
  opacity: 0.5;
  mix-blend-mode: overlay;
  pointer-events: none;
}

.hero-section {
  position: relative;
  min-height: calc(100dvh - 80px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 2rem 1.5rem;
  overflow: hidden;
  backdrop-filter: blur(0px);
  transition: backdrop-filter 0.3s ease;
}

.hero-content {
  max-width: 700px;
  text-align: center;
  position: relative;
  z-index: 10;
  animation: fadeInUp 1s cubic-bezier(0.4, 0, 0.2, 1);
}

.hero-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-sm) var(--spacing-md);
  background: rgba(20, 184, 166, 0.15);
  border-radius: var(--radius-full);
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--color-primary);
  margin-bottom: var(--spacing-lg);
  animation: scaleIn 0.6s cubic-bezier(0.4, 0, 0.2, 1) 0.2s both;
  box-shadow: 0 4px 15px rgba(20, 184, 166, 0.15);
}

.hero-badge span:first-child {
  font-size: 1.25rem;
  animation: wave 2s ease-in-out infinite;
}

.hero-title {
  font-size: 2.5rem;
  font-weight: 800;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-lg);
  line-height: 1.2;
  animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1) 0.3s both;
  text-shadow:
    0 2px 20px rgba(0, 0, 0, 0.2),
    0 4px 40px rgba(0, 0, 0, 0.15);
}

.hero-name {
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.hero-subtitle {
  font-size: 1.125rem;
  color: var(--color-text-secondary);
  line-height: 1.7;
  margin-bottom: var(--spacing-md);
  animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1) 0.4s both;
  text-shadow:
    0 2px 15px rgba(0, 0, 0, 0.15),
    0 1px 3px rgba(0, 0, 0, 0.1);
}

.hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  justify-content: center;
  animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1) 0.5s both;
}

.hero-button {
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: 0.875rem 1.75rem;
  border-radius: var(--radius-lg);
  font-weight: 600;
  font-size: 1rem;
  text-decoration: none;
  transition: all var(--transition-slow);
  box-shadow: var(--shadow-md);
}

.hero-button.primary {
  background: var(--gradient-simple);
  color: white;
}

.hero-button.primary:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 20px var(--shadow-primary-lg);
}

.hero-button.primary:active {
  transform: translateY(0);
}

.hero-button.secondary {
  background: var(--color-background);
  color: var(--color-primary);
  border: 2px solid var(--color-primary);
}

.hero-button.secondary:hover {
  background: var(--gradient-simple);
  color: white;
  border-color: transparent;
  transform: translateY(-2px);
}

.hero-decoration {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
}

.decoration-circle {
  position: absolute;
  border-radius: var(--radius-full);
  background: linear-gradient(
    135deg,
    rgba(20, 184, 166, 0.08) 0%,
    rgba(245, 158, 11, 0.08) 50%,
    rgba(236, 72, 153, 0.08) 100%
  );
  animation: float 20s ease-in-out infinite;
  backdrop-filter: blur(2px);
}

.circle-1 {
  width: 400px;
  height: 400px;
  top: -200px;
  right: -200px;
  animation-delay: 0s;
}

.circle-2 {
  width: 300px;
  height: 300px;
  bottom: -150px;
  left: -150px;
  animation-delay: -7s;
}

.circle-3 {
  width: 200px;
  height: 200px;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  animation-delay: -14s;
}

.floating-shapes {
  position: absolute;
  inset: 0;
}

.shape {
  position: absolute;
  opacity: 0.1;
  animation: float-shapes 25s ease-in-out infinite;
}

.shape-1 {
  width: 100px;
  height: 100px;
  border: 3px solid var(--color-primary);
  border-radius: var(--radius-xl);
  top: 15%;
  left: 10%;
  animation-delay: 0s;
  transform: rotate(45deg);
}

.shape-2 {
  width: 80px;
  height: 80px;
  border: 3px solid var(--color-secondary);
  border-radius: 50%;
  top: 60%;
  right: 15%;
  animation-delay: -8s;
}

.shape-3 {
  width: 120px;
  height: 120px;
  border: 3px solid var(--color-accent);
  top: 75%;
  left: 25%;
  animation-delay: -16s;
  clip-path: polygon(50% 0%, 100% 100%, 0% 100%);
}

.shape-4 {
  width: 90px;
  height: 90px;
  border: 3px solid var(--color-primary-light);
  border-radius: var(--radius-md);
  top: 30%;
  right: 25%;
  animation-delay: -12s;
  transform: rotate(30deg);
}

.scroll-indicator {
  position: absolute;
  bottom: 3rem;
  left: 50%;
  transform: translateX(-50%);
  z-index: 20;
  transition: opacity 0.3s ease;
}

.scroll-line {
  width: 2px;
  height: 40px;
  background: linear-gradient(to bottom, transparent, var(--color-primary) 50%, transparent);
  position: relative;
  animation: scroll-bounce 2s ease-in-out infinite;
}

.scroll-line::before {
  content: '';
  position: absolute;
  top: -10px;
  left: 50%;
  transform: translateX(-50%);
  width: 20px;
  height: 20px;
  border: 2px solid var(--color-primary);
  border-radius: var(--radius-full);
  opacity: 0.6;
}

.scroll-line::after {
  content: '';
  position: absolute;
  bottom: -8px;
  left: 50%;
  transform: translateX(-50%) rotate(45deg);
  width: 10px;
  height: 10px;
  border-right: 2px solid var(--color-primary);
  border-bottom: 2px solid var(--color-primary);
}

.widgets-section {
  padding: 4rem 1.5rem;
  margin: 0 auto;
  position: relative;
  z-index: 1;
  background: var(--color-background);
  box-shadow: 0 -10px 40px rgba(0, 0, 0, 0.05);
}

.widgets-section-container {
  max-width: 1200px;
  margin: 0 auto;
}

.widgets-header {
  text-align: center;
  margin-bottom: 3rem;
  animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

.widgets-title {
  font-size: 2rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-md);
  text-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}

.widgets-subtitle {
  font-size: 1.125rem;
  color: var(--color-text-secondary);
  text-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
}

.widgets-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2rem;
}

.widget-card {
  background: var(--color-background);
  padding: var(--spacing-xl);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-md);
  transition: all var(--transition-slower);
  border: 1px solid var(--color-border);
  opacity: 0;
  transform: translateY(30px);
}

.widget-card.visible {
  opacity: 1;
  transform: translateY(0);
}

.widget-card:hover {
  transform: translateY(-8px);
  box-shadow: var(--shadow-xl);
}

.widget-icon {
  font-size: 2.5rem;
}

.widget-title {
  font-size: 1.5rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: 0.75rem;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
}

.widget-description {
  font-size: 1rem;
  color: var(--color-text-secondary);
  line-height: 1.6;
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.8);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes wave {
  0%,
  100% {
    transform: rotate(0deg);
  }
  10%,
  30% {
    transform: rotate(14deg);
  }
  20%,
  40% {
    transform: rotate(-8deg);
  }
  50% {
    transform: rotate(0deg);
  }
}

@keyframes float {
  0%,
  100% {
    transform: translate(0, 0) scale(1);
  }
  33% {
    transform: translate(30px, -30px) scale(1.1);
  }
  66% {
    transform: translate(-20px, 20px) scale(0.9);
  }
}

@keyframes float-orb {
  0%,
  100% {
    transform: translate(0, 0) scale(1);
  }
  25% {
    transform: translate(50px, -50px) scale(1.15);
  }
  50% {
    transform: translate(-30px, -30px) scale(0.95);
  }
  75% {
    transform: translate(-50px, 50px) scale(1.05);
  }
}

@keyframes float-shapes {
  0%,
  100% {
    transform: translateY(0) rotate(0deg);
    opacity: 0.1;
  }
  25% {
    transform: translateY(-30px) rotate(90deg);
    opacity: 0.15;
  }
  50% {
    transform: translateY(-50px) rotate(180deg);
    opacity: 0.08;
  }
  75% {
    transform: translateY(-30px) rotate(270deg);
    opacity: 0.12;
  }
}

@keyframes gradientShift {
  0%,
  100% {
    opacity: 1;
    transform: scale(1);
  }
  50% {
    opacity: 0.8;
    transform: scale(1.1);
  }
}

@keyframes scroll-bounce {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(10px);
  }
}

@media (min-width: 640px) {
  .hero-title {
    font-size: 3.5rem;
  }

  .widgets-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (min-width: 1024px) {
  .hero-title {
    font-size: 4rem;
  }

  .widgets-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (prefers-color-scheme: dark) {
  .hero-title,
  .widgets-title {
    color: var(--color-text-primary);
  }

  .hero-subtitle,
  .widgets-subtitle,
  .widget-description {
    color: var(--color-text-secondary);
  }

  .widget-card {
    background: var(--color-surface);
    border-color: var(--color-border);
  }

  .widget-title {
    color: var(--color-text-primary);
  }

  .hero-button.secondary {
    background: transparent;
  }

  .gradient-mesh {
    background:
      radial-gradient(circle at 20% 50%, rgba(20, 184, 166, 0.25) 0%, transparent 50%),
      radial-gradient(circle at 80% 80%, rgba(245, 158, 11, 0.25) 0%, transparent 50%),
      radial-gradient(circle at 60% 20%, rgba(236, 72, 153, 0.25) 0%, transparent 50%);
  }

  .orb {
    opacity: 0.3;
  }

  .widgets-section {
    background: var(--color-background);
    box-shadow: 0 -10px 40px rgba(0, 0, 0, 0.3);
  }

  .shape {
    opacity: 0.15;
  }

  .decoration-circle {
    background: linear-gradient(
      135deg,
      rgba(20, 184, 166, 0.12) 0%,
      rgba(245, 158, 11, 0.12) 50%,
      rgba(236, 72, 153, 0.12) 100%
    );
  }
}


/* pages/NotFoundPage/NotFoundPage.css */
.not-found-page {
  min-height: calc(100dvh - 80px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 2rem 1.5rem;
}

.not-found-content {
  text-align: center;
  max-width: 500px;
}

.not-found-title {
  font-size: 8rem;
  font-weight: 900;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  line-height: 1;
  margin-bottom: var(--spacing-md);
  animation: fadeInScale 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}

.not-found-subtitle {
  font-size: 2rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-md);
  animation: fadeInUp 0.6s cubic-bezier(0.4, 0, 0.2, 1) 0.1s both;
}

.not-found-description {
  font-size: 1.125rem;
  color: var(--color-text-secondary);
  margin-bottom: var(--spacing-xl);
  line-height: 1.6;
  animation: fadeInUp 0.6s cubic-bezier(0.4, 0, 0.2, 1) 0.2s both;
}

.not-found-button {
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: 0.875rem 1.75rem;
  background: var(--gradient-simple);
  color: white;
  font-weight: 600;
  font-size: 1rem;
  text-decoration: none;
  border-radius: var(--radius-lg);
  transition: all var(--transition-slow);
  box-shadow: 0 4px 12px var(--shadow-primary);
  animation: fadeInUp 0.6s cubic-bezier(0.4, 0, 0.2, 1) 0.3s both;
}

.not-found-button:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 20px var(--shadow-primary-lg);
}

.not-found-button:active {
  transform: translateY(0);
}

@keyframes fadeInScale {
  from {
    opacity: 0;
    transform: scale(0.8);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@media (prefers-color-scheme: dark) {
  .not-found-subtitle {
    color: var(--color-text-primary);
  }

  .not-found-description {
    color: var(--color-text-secondary);
  }
}


/* pages/WidgetCatalogPage/WidgetCatalogPage.css */
.widget-catalog-page {
  min-height: calc(100dvh - 80px);
  padding: 6rem 2rem 4rem;
  max-width: 1400px;
  margin: 0 auto;
}

.catalog-header {
  text-align: center;
  margin-bottom: var(--spacing-3xl);
  animation: fadeInDown 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

.catalog-title {
  font-size: clamp(1.75rem, 4vw, 2.5rem);
  font-weight: 700;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  margin-bottom: var(--spacing-md);
  line-height: 1.2;
}

.catalog-subtitle {
  font-size: clamp(0.9375rem, 2vw, 1.125rem);
  color: var(--color-text-secondary);
  max-width: 600px;
  margin: 0 auto;
  line-height: 1.6;
}

.catalog-controls {
  margin-bottom: var(--spacing-2xl);
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
  align-items: center;
}

.search-box {
  position: relative;
  max-width: 600px;
  width: 100%;
}

.search-icon {
  position: absolute;
  left: var(--spacing-md);
  top: 50%;
  transform: translateY(-50%);
  color: var(--color-text-secondary);
  pointer-events: none;
}

.catalog-search-input {
  width: 100%;
  padding: 0.875rem var(--spacing-md) 0.875rem 3rem;
  border: 2px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-background);
  color: var(--color-text-primary);
  font-size: 1rem;
  transition: all var(--transition-base);
  -webkit-appearance: none;
  appearance: none;
}

.catalog-search-input::placeholder {
  color: var(--color-text-secondary);
  opacity: 0.7;
}

.catalog-search-input:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(20, 184, 166, 0.1);
}

.category-filters {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
  justify-content: center;
  width: 100%;
  max-width: 100%;
}

.category-button {
  padding: 0.625rem var(--spacing-lg);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-full);
  background: var(--color-background);
  color: var(--color-text-secondary);
  font-weight: 600;
  font-size: clamp(0.8125rem, 1.8vw, 0.875rem);
  cursor: pointer;
  transition: all var(--transition-base);
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
}

.category-button:hover {
  border-color: var(--color-primary);
  color: var(--color-primary);
  transform: translateY(-2px);
}

@media (hover: none) {
  .category-button:hover {
    transform: none;
  }

  .category-button:active {
    transform: scale(0.97);
  }
}

.category-button.active {
  background: var(--gradient-simple);
  color: white;
  border-color: transparent;
  box-shadow: var(--shadow-md);
}

.catalog-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
  gap: var(--spacing-lg);
  width: 100%;
}

.catalog-widget-link {
  text-decoration: none;
  color: inherit;
  display: block;
  animation: fadeInUp 0.6s cubic-bezier(0.4, 0, 0.2, 1) both;
  -webkit-tap-highlight-color: transparent;
  outline-offset: 4px;
}

.widget-card-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: var(--spacing-md);
}

.widget-icon-wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
  width: clamp(56px, 10vw, 64px);
  height: clamp(56px, 10vw, 64px);
  border-radius: var(--radius-lg);
  transition: transform var(--transition-base);
  flex-shrink: 0;
}

.catalog-widget-link:hover .widget-icon-wrapper {
  transform: scale(1.1) rotate(5deg);
}

@media (hover: none) {
  .catalog-widget-link:active .widget-icon-wrapper {
    transform: scale(1.05);
  }
}

.widget-icon {
  font-size: clamp(1.5rem, 4vw, 2rem);
}

.widget-category-badge {
  padding: 0.25rem 0.625rem;
  background: rgba(20, 184, 166, 0.08);
  color: var(--color-primary);
  font-size: clamp(0.6875rem, 1.5vw, 0.75rem);
  font-weight: 600;
  border-radius: var(--radius-sm);
  text-transform: capitalize;
  white-space: nowrap;
}

.catalog-widget-title {
  font-size: clamp(1.125rem, 2.5vw, 1.375rem);
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-sm);
  line-height: 1.3;
}

.catalog-widget-description {
  font-size: clamp(0.875rem, 1.8vw, 0.9375rem);
  color: var(--color-text-secondary);
  line-height: 1.6;
  margin-bottom: var(--spacing-md);
}

.widget-tags-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.375rem;
  align-items: center;
}

.widget-tag-item {
  padding: 0.3125rem 0.625rem;
  background: rgba(20, 184, 166, 0.06);
  color: var(--color-text-secondary);
  font-size: clamp(0.6875rem, 1.5vw, 0.75rem);
  font-weight: 500;
  border-radius: var(--radius-sm);
  white-space: nowrap;
  line-height: 1.4;
}

.no-results-message {
  grid-column: 1 / -1;
  text-align: center;
  padding: clamp(2rem, 8vw, 3rem);
}

.no-results-text {
  font-size: clamp(1.125rem, 2.5vw, 1.25rem);
  font-weight: 600;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-sm);
  line-height: 1.4;
}

.no-results-hint {
  color: var(--color-text-secondary);
  font-size: clamp(0.875rem, 2vw, 1rem);
  line-height: 1.6;
}

@keyframes fadeInDown {
  from {
    opacity: 0;
    transform: translateY(-20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Mobile styles (< 640px) */
@media (max-width: 639px) {
  .widget-catalog-page {
    padding: 5rem 1rem 3rem;
  }

  .catalog-header {
    margin-bottom: var(--spacing-2xl);
  }

  .catalog-controls {
    gap: var(--spacing-md);
  }

  .search-box {
    max-width: 100%;
  }

  .category-filters {
    width: calc(100% + 2rem);
    margin-left: -1rem;
    margin-right: -1rem;
    padding: 0 1rem 0.5rem;
    overflow-x: auto;
    overflow-y: hidden;
    flex-wrap: nowrap;
    justify-content: flex-start;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    scroll-behavior: smooth;
    scroll-snap-type: x proximity;
    position: relative;
  }

  .category-filters::-webkit-scrollbar {
    display: none;
  }

  .category-filters > * {
    flex-shrink: 0;
    scroll-snap-align: start;
  }

  .catalog-grid {
    gap: var(--spacing-md);
  }

  .catalog-widget-link {
    animation-delay: 0ms !important;
  }

  .widget-card-header {
    margin-bottom: var(--spacing-sm);
  }

  .widget-tags-list {
    gap: 0.375rem;
  }
}

/* Tablet styles (640px - 1023px) */
@media (min-width: 640px) and (max-width: 1023px) {
  .widget-catalog-page {
    padding: 5.5rem 1.5rem 3.5rem;
  }

  .catalog-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
    gap: var(--spacing-lg);
  }
}

/* Desktop styles (>= 1024px) */
@media (min-width: 1024px) {
  .catalog-grid {
    grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
    gap: var(--spacing-xl);
  }
}

/* Large desktop styles (>= 1400px) */
@media (min-width: 1400px) {
  .catalog-grid {
    grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
  }
}

/* Very small mobile screens (< 375px) */
@media (max-width: 374px) {
  .widget-catalog-page {
    padding: 4.5rem 0.75rem 2.5rem;
  }

  .catalog-header {
    margin-bottom: var(--spacing-xl);
  }

  .catalog-title {
    font-size: 1.5rem;
  }

  .catalog-subtitle {
    font-size: 0.875rem;
    padding: 0 0.5rem;
  }
}

/* Dark mode adjustments */
@media (prefers-color-scheme: dark) {
  .catalog-search-input,
  .category-button {
    background: var(--color-surface);
  }
}


/* pages/widgets/EncoderDecoderWidget/EncoderDecoderWidget.css */
.encoder-decoder-widget {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 0 var(--spacing-lg) var(--spacing-xl);
}

.encoder-decoder-widget .widget-content {
  width: 100%;
  max-width: 900px;
}

.encoder-section {
  width: 100%;
}

/* Section Header */
.section-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-md);
  flex-wrap: wrap;
}

/* Example Button */
.example-btn {
  padding: var(--spacing-sm) var(--spacing-md);
  background: transparent;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--color-text-secondary);
  cursor: pointer;
  transition: all var(--transition-base);
}

.example-btn:hover {
  background: var(--gradient-bg-subtle);
  color: var(--color-primary);
  border-color: var(--color-primary);
}

/* Input Groups */
.input-group {
  margin-bottom: var(--spacing-md);
}

.input-header,
.output-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--spacing-xs);
}

.input-label {
  display: block;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--color-text-primary);
}

.input-actions,
.output-actions {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

/* Character Count */
.char-count {
  font-size: 0.75rem;
  color: var(--color-text-secondary);
  font-weight: 500;
  font-family: var(--font-mono);
}

/* Clear Button */
.clear-btn {
  padding: 2px 6px;
  background: transparent;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  font-size: 0.75rem;
  color: var(--color-text-secondary);
  cursor: pointer;
  transition: all var(--transition-fast);
  line-height: 1;
}

.clear-btn:hover {
  background: rgba(239, 68, 68, 0.1);
  border-color: #dc2626;
  color: #dc2626;
}

/* Textarea */
.encoder-textarea {
  width: 100%;
  padding: var(--spacing-sm) var(--spacing-md);
  font-family: var(--font-mono);
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--color-text-primary);
  background: var(--color-surface);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-md);
  resize: vertical;
  transition: all var(--transition-base);
}

.encoder-textarea:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(20, 184, 166, 0.1);
  background: var(--color-background);
}

.encoder-textarea.output {
  background: var(--color-gray-50);
  cursor: default;
}

@media (prefers-color-scheme: dark) {
  .encoder-textarea.output {
    background: rgba(0, 0, 0, 0.2);
  }
}

/* Error Message */
.error-message {
  padding: var(--spacing-sm) var(--spacing-md);
  background: rgba(239, 68, 68, 0.1);
  border: 1px solid rgba(239, 68, 68, 0.3);
  border-left: 4px solid #dc2626;
  border-radius: var(--radius-md);
  color: #dc2626;
  font-size: 0.875rem;
  margin-bottom: var(--spacing-md);
  animation: slideInDown 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

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

/* Transform Actions */
.transform-actions {
  position: relative;
  margin: var(--spacing-md) 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.transform-divider {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  position: relative;
}

.transform-divider::before {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 1px;
  background: linear-gradient(
    90deg,
    transparent 0%,
    var(--color-border) 10%,
    var(--color-border) 90%,
    transparent 100%
  );
}

.swap-btn {
  position: relative;
  z-index: 1;
  width: 44px;
  height: 44px;
  background: var(--gradient-primary);
  color: white;
  border: 3px solid var(--color-background);
  border-radius: var(--radius-full);
  font-size: 1.375rem;
  cursor: pointer;
  transition: all var(--transition-base);
  box-shadow: var(--shadow-md);
  display: flex;
  align-items: center;
  justify-content: center;
}

.swap-btn:hover:not(:disabled) {
  transform: rotate(180deg) scale(1.1);
  box-shadow: var(--shadow-lg);
}

.swap-btn:active:not(:disabled) {
  transform: rotate(180deg) scale(1.05);
}

.swap-btn:disabled {
  opacity: 0.3;
  cursor: not-allowed;
  background: var(--color-gray-300);
}

/* Copy Button */
.copy-btn {
  padding: var(--spacing-xs) var(--spacing-sm);
  background: transparent;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  font-size: 0.75rem;
  font-weight: 500;
  color: var(--color-text-secondary);
  cursor: pointer;
  transition: all var(--transition-fast);
}

.copy-btn:hover {
  color: var(--color-primary);
  border-color: var(--color-primary);
  background: rgba(20, 184, 166, 0.08);
  transform: translateY(-1px);
}

.copy-btn:active {
  transform: translateY(0);
}

/* JWT Specific Styles */
.jwt-hint {
  margin-top: var(--spacing-sm);
  padding: var(--spacing-sm) var(--spacing-md);
  background: var(--gradient-bg-subtle);
  border-radius: var(--radius-md);
  font-size: 0.8125rem;
  color: var(--color-text-secondary);
  font-style: italic;
}

.jwt-results {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
  animation: fadeInUp 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.jwt-section {
  width: 100%;
}

.jwt-label {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  color: var(--color-primary);
  font-size: 1rem;
}

.jwt-label-icon {
  font-size: 1.125rem;
}

.jwt-output {
  padding: var(--spacing-md);
  background: var(--color-surface);
  border: 2px solid var(--color-border);
  border-left: 4px solid var(--color-primary);
  border-radius: var(--radius-md);
  font-family: var(--font-mono);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--color-text-primary);
  overflow-x: auto;
  white-space: pre-wrap;
  word-wrap: break-word;
  margin: 0;
}

.jwt-signature {
  padding: var(--spacing-md);
  background: var(--color-surface);
  border: 2px solid var(--color-border);
  border-left: 4px solid var(--color-secondary);
  border-radius: var(--radius-md);
  font-family: var(--font-mono);
  font-size: 0.75rem;
  color: var(--color-text-secondary);
  word-break: break-all;
}

/* Copy Notification */
.copy-notification {
  position: fixed;
  bottom: var(--spacing-xl);
  right: var(--spacing-xl);
  padding: var(--spacing-md) var(--spacing-xl);
  background: var(--gradient-primary);
  color: white;
  border-radius: var(--radius-lg);
  font-weight: 600;
  font-size: 0.9375rem;
  box-shadow: var(--shadow-xl);
  animation: slideInUp 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  z-index: var(--z-tooltip);
}

@keyframes slideInUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Mobile Responsive */
@media (max-width: 768px) {
  .encoder-decoder-widget {
    padding: 0 var(--spacing-md) var(--spacing-lg);
  }

  .section-header {
    flex-direction: column;
    align-items: stretch;
    gap: var(--spacing-sm);
    margin-bottom: var(--spacing-sm);
  }

  .example-btn {
    width: 100%;
  }

  .encoder-textarea {
    font-size: 0.8125rem;
    padding: var(--spacing-xs) var(--spacing-sm);
  }

  .input-group {
    margin-bottom: var(--spacing-sm);
  }

  .jwt-results {
    gap: var(--spacing-md);
  }

  .jwt-output {
    font-size: 0.75rem;
    padding: var(--spacing-sm);
  }

  .jwt-signature {
    padding: var(--spacing-sm);
  }

  .copy-notification {
    bottom: var(--spacing-lg);
    right: var(--spacing-lg);
    left: var(--spacing-lg);
    text-align: center;
  }
}

@media (max-width: 480px) {
  .encoder-decoder-widget {
    padding: 0 var(--spacing-sm) var(--spacing-md);
  }

  .encoder-textarea {
    padding: var(--spacing-xs);
    font-size: 0.75rem;
  }

  .input-group {
    margin-bottom: 10px;
  }

  .transform-actions {
    margin: 10px 0;
  }

  .jwt-output,
  .jwt-signature {
    padding: var(--spacing-xs);
    font-size: 0.6875rem;
  }

  .jwt-results {
    gap: var(--spacing-sm);
  }

  .swap-btn {
    width: 40px;
    height: 40px;
    font-size: 1.25rem;
  }

  .char-count {
    display: none;
  }
}


/* pages/widgets/GitHubContextBuilderWidget/GitHubContextBuilderWidget.css */
/* Layout */
.github-context-builder .context-builder-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--spacing-md);
  animation: fadeInUp 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

@media (min-width: 1024px) {
  .github-context-builder .context-builder-layout {
    grid-template-columns: 1.2fr 1fr;
  }
}

/* Stats Badge Compact */
.github-context-builder .stats-badge-compact {
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.github-context-builder .stats-badge-compact:hover {
  border-color: var(--color-primary);
  box-shadow: 0 4px 12px rgba(99, 102, 241, 0.2);
  transform: translateY(-2px);
}

.github-context-builder .stats-badge-compact:active {
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(99, 102, 241, 0.15);
}

/* Section Headers */
.github-context-builder .section-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--spacing-md);
  padding-bottom: var(--spacing-xs);
  border-bottom: 1px solid var(--color-border);
}

.github-context-builder .section-title {
  font-weight: 600;
  font-size: 1rem;
  color: var(--color-text-primary);
  display: flex;
  align-items: center;
  gap: 8px;
}

.github-context-builder .section-title span[style*="background: var(--color-primary)"] {
  animation: badgePop 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}

@keyframes badgePop {
  0% {
    transform: scale(0);
    opacity: 0;
  }
  50% {
    transform: scale(1.2);
  }
  100% {
    transform: scale(1);
    opacity: 1;
  }
}

.github-context-builder .section-actions {
  display: flex;
  gap: 8px;
  align-items: center;
}

.github-context-builder .tree-panel,
.github-context-builder .preview-panel {
  display: grid;
  gap: var(--spacing-md);
}

/* Tree View */
.github-context-builder .tree-list {
  max-height: 60vh;
  overflow: auto;
  padding: 4px;
  border-radius: var(--radius-md);
}

.github-context-builder .tree-list::-webkit-scrollbar {
  width: 8px;
}

.github-context-builder .tree-list::-webkit-scrollbar-track {
  background: transparent;
}

.github-context-builder .tree-list::-webkit-scrollbar-thumb {
  background: var(--color-border);
  border-radius: var(--radius-full);
  transition: background var(--transition-fast);
}

.github-context-builder .tree-list::-webkit-scrollbar-thumb:hover {
  background: var(--color-primary);
}

.github-context-builder .tree-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: var(--radius-md);
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  cursor: pointer;
  user-select: none;
  position: relative;
  border: 1px solid transparent;
}

.github-context-builder .tree-item::before {
  content: '';
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 3px;
  height: 0;
  background: var(--color-primary);
  border-radius: 0 var(--radius-full) var(--radius-full) 0;
  transition: height 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.github-context-builder .tree-item:hover {
  background: rgba(99, 102, 241, 0.06);
  transform: translateX(2px);
  border-color: rgba(99, 102, 241, 0.1);
}

.github-context-builder .tree-item:hover::before {
  height: 60%;
}

.github-context-builder .tree-item:active {
  transform: translateX(1px) scale(0.99);
}

.github-context-builder .tree-item:focus-within {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

.github-context-builder .tree-item.selected {
  background: rgba(99, 102, 241, 0.08);
  border-color: rgba(99, 102, 241, 0.2);
}

.github-context-builder .tree-item.selected::before {
  height: 80%;
}

.github-context-builder .tree-item.selected .path {
  color: var(--color-primary);
  font-weight: 500;
}

.github-context-builder .tree-item .path {
  font-family: var(--font-mono);
  font-size: 0.875rem;
  color: var(--color-text-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  flex: 1;
}

.github-context-builder .tree-item input[type='checkbox'] {
  width: 18px;
  height: 18px;
  cursor: pointer;
  accent-color: var(--color-primary);
  transition: transform 0.15s ease;
}

.github-context-builder .tree-item input[type='checkbox']:hover {
  transform: scale(1.1);
}

.github-context-builder .tree-item input[type='checkbox']:checked {
  animation: checkBounce 0.3s ease;
}

@keyframes checkBounce {
  0%, 100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.2);
  }
}

.github-context-builder .tree-item .file-icon {
  font-size: 1rem;
  flex-shrink: 0;
}

.github-context-builder .tree-item .file-size {
  font-size: 0.75rem;
  color: var(--color-text-secondary);
  margin-left: auto;
  padding-left: 8px;
  padding: 2px 8px;
  border-radius: var(--radius-sm);
  background: rgba(99, 102, 241, 0.05);
  font-family: var(--font-mono);
  transition: all 0.2s ease;
}

.github-context-builder .tree-item:hover .file-size {
  background: rgba(99, 102, 241, 0.1);
  color: var(--color-primary);
}

/* Preview Area */
.github-context-builder .preview-area {
  font-family: var(--font-mono);
  font-size: 0.875rem;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  max-height: 60vh;
  overflow: auto;
  background: var(--color-surface);
  border-radius: var(--radius-md);
  padding: var(--spacing-md);
  border: 1px solid var(--color-border);
  line-height: 1.6;
}

/* Button Success State */
.github-context-builder .button-success-state button {
  color: var(--color-success) !important;
  border-color: var(--color-success) !important;
  animation: successPulse 0.3s ease;
}

@keyframes successPulse {
  0%, 100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.05);
  }
}

/* Stats Grid */
.github-context-builder .stats-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 12px;
}

@media (min-width: 640px) {
  .github-context-builder .stats-grid {
    grid-template-columns: repeat(4, 1fr);
  }
}

.github-context-builder .stat-item {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 8px;
  border-radius: var(--radius-md);
  transition: background var(--transition-fast);
}

.github-context-builder .stat-item:hover {
  background: rgba(20, 184, 166, 0.04);
}

.github-context-builder .stat-label {
  color: var(--color-text-secondary);
  font-size: 0.8125rem;
  font-weight: 500;
}

.github-context-builder .stat-value {
  font-weight: 700;
  font-size: 1.125rem;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* Loading States */
.github-context-builder .skeleton {
  background: linear-gradient(90deg, var(--color-surface) 25%, var(--color-gray-200) 50%, var(--color-surface) 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s ease-in-out infinite;
  border-radius: var(--radius-md);
}

@keyframes shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

.github-context-builder .skeleton-tree-item {
  height: 36px;
  margin-bottom: 4px;
}

.github-context-builder .skeleton-text {
  height: 20px;
  width: 100%;
  margin-bottom: 8px;
}

/* History Panel */
.github-context-builder .history-panel {
  margin-top: var(--spacing-md);
}

.github-context-builder .history-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--spacing-md);
}

@media (min-width: 640px) {
  .github-context-builder .history-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (min-width: 1024px) {
  .github-context-builder .history-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

.github-context-builder .history-card {
  padding: var(--spacing-md);
  border-radius: var(--radius-lg);
  border: 1px solid var(--color-border);
  background: var(--color-background);
  cursor: pointer;
  transition: all var(--transition-base);
}

.github-context-builder .history-card:hover {
  border-color: var(--color-primary);
  box-shadow: var(--shadow-md);
  transform: translateY(-2px);
}

.github-context-builder .history-card-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: var(--spacing-sm);
}

.github-context-builder .history-card-title {
  font-weight: 600;
  font-size: 0.9375rem;
  color: var(--color-text-primary);
  font-family: var(--font-mono);
}

.github-context-builder .history-card-meta {
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 0.8125rem;
  color: var(--color-text-secondary);
}

.github-context-builder .history-card-actions {
  display: flex;
  gap: 4px;
  margin-top: var(--spacing-sm);
}

/* Empty States */
.github-context-builder .empty-state {
  text-align: center;
  padding: var(--spacing-2xl);
  animation: fadeIn 0.3s ease-in;
}

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

.github-context-builder .empty-state-icon {
  font-size: 3rem;
  margin-bottom: var(--spacing-md);
  opacity: 0.3;
  animation: float 3s ease-in-out infinite;
}

@keyframes float {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-10px);
  }
}

.github-context-builder .empty-state-title {
  font-size: 1.125rem;
  font-weight: 600;
  margin-bottom: var(--spacing-xs);
  color: var(--color-text-primary);
}

.github-context-builder .empty-state-description {
  color: var(--color-text-secondary);
  font-size: 0.9375rem;
  line-height: 1.5;
}

/* Progress Indicator */
.github-context-builder .progress-bar {
  width: 100%;
  height: 6px;
  background: var(--color-border);
  border-radius: var(--radius-full);
  overflow: hidden;
  margin-bottom: var(--spacing-md);
  position: relative;
}

.github-context-builder .progress-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--color-primary), rgba(99, 102, 241, 0.7), var(--color-primary));
  background-size: 200% 100%;
  animation: progressPulse 2s ease-in-out infinite;
  transition: width 0.3s ease;
  border-radius: var(--radius-full);
  box-shadow: 0 0 10px rgba(99, 102, 241, 0.3);
}

@keyframes progressPulse {
  0%, 100% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
}

.github-context-builder .progress-text {
  text-align: center;
  font-size: 0.8125rem;
  color: var(--color-text-secondary);
  margin-bottom: var(--spacing-sm);
  font-weight: 500;
  animation: fadeIn 0.3s ease-in;
}

/* Mobile Optimizations */
@media (max-width: 640px) {
  .github-context-builder .tree-list,
  .github-context-builder .preview-area {
    max-height: 50vh;
  }
  
  .github-context-builder .stat-value {
    font-size: 1rem;
  }
  
  .github-context-builder .tree-item {
    padding: 12px 10px;
    gap: 12px;
  }
  
  .github-context-builder .tree-item input[type='checkbox'] {
    width: 20px;
    height: 20px;
  }
  
  .github-context-builder .section-header {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--spacing-sm);
  }
  
  .github-context-builder .section-title {
    width: 100%;
  }
  
  .github-context-builder .section-actions {
    width: 100%;
    justify-content: flex-start;
  }
  
  .github-context-builder .stats-badge-compact {
    font-size: 0.75rem;
    padding: 6px 10px;
    gap: 8px;
  }
  
  .github-context-builder .empty-state {
    padding: var(--spacing-xl);
  }
  
  .github-context-builder .empty-state-icon {
    font-size: 2.5rem;
  }
  
  /* Better touch targets */
  .github-context-builder .tree-item .path {
    font-size: 0.9375rem;
  }
  
  /* Adjust progress bar for mobile */
  .github-context-builder .progress-bar {
    height: 8px;
  }
}

/* Dark Mode */
@media (prefers-color-scheme: dark) {
  .github-context-builder .preview-area {
    background: var(--color-surface);
  }
  
  .github-context-builder .skeleton {
    background: linear-gradient(90deg, var(--color-surface) 25%, rgba(255, 255, 255, 0.05) 50%, var(--color-surface) 75%);
    background-size: 200% 100%;
  }
}

/* Pulse Animation for Status Indicators */
@keyframes pulse {
  0%, 100% {
    opacity: 1;
    transform: scale(1);
  }
  50% {
    opacity: 0.5;
    transform: scale(1.2);
  }
}

/* Reduced Motion */
@media (prefers-reduced-motion: reduce) {
  .github-context-builder .tree-item:hover,
  .github-context-builder .history-card:hover,
  .github-context-builder .stats-badge-compact:hover {
    transform: none;
  }
  
  .github-context-builder .skeleton,
  .github-context-builder .empty-state-icon,
  .github-context-builder .progress-fill,
  .github-context-builder .tree-item input[type='checkbox']:checked {
    animation: none;
  }
  
  .github-context-builder .tree-item::before {
    height: 60%;
  }
  
  .github-context-builder .skeleton {
    background: var(--color-surface);
  }
}




/* pages/widgets/ImageCompressionWidget/ImageCompressionWidget.css */
/**
 * Image Compression Widget - Clean & Focused UX
 */

.image-compression-widget .widget-title,
.image-compression-widget .widget-description,
.image-compression-widget .widget-content {
  animation: none !important;
}

.image-compression-widget .widget-content {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--spacing-lg);
  align-items: start;
}

/* Two-column layout for larger screens */
@media (min-width: 1024px) {
  .image-compression-widget .widget-content {
    grid-template-columns: 1fr 1fr;
    gap: var(--spacing-xl);
  }
}

@media (min-width: 1440px) {
  .image-compression-widget .widget-content {
    gap: var(--spacing-2xl);
  }
}

/* Column wrappers for proper positioning */
.widget-content > div:first-child {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
}

.widget-content > div:last-child {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
}

/* ========================================
   IMAGE COMPARISON - Hero Section
   ======================================== */

.comparison-card {
  overflow: hidden;
  padding: 0 !important;
  position: sticky;
  top: calc(70px + var(--spacing-lg));
  z-index: 1;
}

@media (max-width: 1023px) {
  .comparison-card {
    position: relative;
    top: 0;
  }
}

.comparison-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--spacing-md) var(--spacing-lg);
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
}

.comparison-title {
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--color-text-primary);
  margin: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  flex: 1;
  padding-right: var(--spacing-md);
}

.comparison-nav {
  display: flex;
  gap: 0.25rem;
}

.image-comparison-wrapper {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: var(--color-surface);
  overflow: hidden;
}

.image-comparison {
  position: relative;
  width: 100%;
  height: 100%;
  user-select: none;
  -webkit-user-select: none;
}

.comparison-image {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  pointer-events: none;
}

.comparison-overlay {
  position: absolute;
  top: 0;
  right: 0;
  height: 100%;
  overflow: hidden;
  z-index: 1;
}

.comparison-slider {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 3px;
  background: white;
  cursor: ew-resize;
  z-index: 2;
  transform: translateX(-50%);
  box-shadow: 0 0 12px rgba(0, 0, 0, 0.3);
}

.comparison-slider:focus {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

.comparison-handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 40px;
  height: 40px;
  background: white;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.25rem;
  box-shadow: var(--shadow-lg);
  transition: all var(--transition-fast);
}

.comparison-slider:hover .comparison-handle,
.comparison-slider:focus .comparison-handle {
  transform: translate(-50%, -50%) scale(1.1);
}

.comparison-labels {
  position: absolute;
  top: var(--spacing-sm);
  left: var(--spacing-sm);
  right: var(--spacing-sm);
  display: flex;
  justify-content: space-between;
  pointer-events: none;
  z-index: 3;
}

.comparison-label {
  padding: 0.25rem 0.625rem;
  background: rgba(0, 0, 0, 0.7);
  color: white;
  font-size: 0.75rem;
  font-weight: 600;
  border-radius: var(--radius-sm);
  backdrop-filter: blur(8px);
}

.comparison-info {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  padding: var(--spacing-md);
  background: var(--color-surface);
  border-top: 1px solid var(--color-border);
}

@media (min-width: 640px) {
  .comparison-info {
    grid-template-columns: repeat(4, 1fr);
  }
}

.comparison-stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.25rem;
  padding: 0 var(--spacing-sm);
}

@media (min-width: 640px) {
  .comparison-stat:not(:last-child) {
    border-right: 1px solid var(--color-border);
  }
}

@media (max-width: 639px) {
  .comparison-stat:nth-child(1),
  .comparison-stat:nth-child(2) {
    border-bottom: 1px solid var(--color-border);
  }

  .comparison-stat:nth-child(odd) {
    border-right: 1px solid var(--color-border);
  }
}

.comparison-stat-label {
  font-size: 0.6875rem;
  color: var(--color-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-weight: 600;
}

.comparison-stat-value {
  font-size: 1.125rem;
  font-weight: 700;
  color: var(--color-text-primary);
}

.comparison-stat.highlight .comparison-stat-value {
  color: var(--color-primary);
  font-size: 1.5rem;
}

/* ========================================
   CONTROLS ROW - Compact & Horizontal
   ======================================== */

.controls-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--spacing-md);
}

@media (min-width: 640px) {
  .controls-row {
    grid-template-columns: auto 1fr;
  }
}

@media (min-width: 1024px) {
  .controls-row {
    grid-template-columns: auto 1fr auto;
  }
}

@media (min-width: 1440px) {
  .controls-row {
    grid-template-columns: 200px 1fr auto;
  }
}

.drop-zone.compact {
  padding: var(--spacing-md);
  border: 2px dashed var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-background);
  cursor: pointer;
  transition: all var(--transition-fast);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.375rem;
  text-align: center;
  min-height: 100px;
}

@media (min-width: 640px) {
  .drop-zone.compact {
    min-width: 160px;
  }
}

@media (min-width: 1440px) {
  .drop-zone.compact {
    min-height: 120px;
  }
}

.drop-zone.compact:hover:not(.disabled) {
  border-color: var(--color-primary);
  background: var(--color-surface);
  transform: translateY(-2px);
}

.drop-zone.compact.dragging {
  border-color: var(--color-primary);
  background: rgba(10, 158, 177, 0.05);
}

.drop-zone.compact .drop-zone-icon {
  font-size: 2rem;
  line-height: 1;
  filter: drop-shadow(0 4px 12px rgba(10, 158, 177, 0.15));
}

.drop-zone.compact .drop-zone-text {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--color-text-primary);
}

.drop-zone.disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.format-controls {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
  min-width: 0;
}

.quality-control.compact {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.quality-label {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 0.6875rem;
  font-weight: 600;
}

.quality-label-text {
  color: var(--color-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.quality-label-value {
  color: var(--color-primary);
  font-weight: 700;
}

.quality-slider {
  width: 100%;
  height: 4px;
  border-radius: var(--radius-full);
  background: var(--color-surface);
  outline: none;
  -webkit-appearance: none;
  appearance: none;
  cursor: pointer;
  border: 1px solid var(--color-border);
}

.quality-slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: var(--gradient-primary);
  cursor: pointer;
  border: 2px solid white;
  box-shadow: var(--shadow-sm);
  transition: all var(--transition-fast);
}

.quality-slider::-webkit-slider-thumb:hover {
  transform: scale(1.15);
}

.quality-slider::-moz-range-thumb {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: var(--gradient-primary);
  cursor: pointer;
  border: 2px solid white;
  box-shadow: var(--shadow-sm);
  transition: all var(--transition-fast);
}

.quality-slider::-moz-range-thumb:hover {
  transform: scale(1.15);
}

.action-controls {
  display: flex;
  gap: var(--spacing-sm);
  flex-wrap: wrap;
}

@media (min-width: 640px) {
  .action-controls {
    justify-content: flex-end;
  }
}

@media (max-width: 639px) {
  .action-controls {
    grid-column: 1 / -1;
  }

  .action-controls button {
    flex: 1 1 auto;
    min-width: 0;
  }
}

/* Stats Bar */
.stats-bar {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--spacing-md);
  padding: var(--spacing-md);
  margin-top: var(--spacing-md);
  background: var(--color-surface);
  border-radius: var(--radius-md);
  border: 1px solid var(--color-border);
}

@media (min-width: 640px) {
  .stats-bar {
    grid-template-columns: repeat(4, 1fr);
  }
}

.stat-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.25rem;
  padding: var(--spacing-sm);
  text-align: center;
}

@media (min-width: 640px) {
  .stat-item:not(:last-child) {
    border-right: 1px solid var(--color-border);
  }
}

@media (max-width: 639px) {
  .stat-item:nth-child(1),
  .stat-item:nth-child(2) {
    border-bottom: 1px solid var(--color-border);
  }

  .stat-item:nth-child(odd) {
    border-right: 1px solid var(--color-border);
  }
}

.stat-label {
  font-size: 0.6875rem;
  color: var(--color-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-weight: 600;
}

.stat-value {
  font-size: 0.9375rem;
  font-weight: 700;
  color: var(--color-primary);
}

/* ========================================
   FILES TABLE - Clean & Scannable
   ======================================== */

.files-table {
  overflow-x: auto;
}

.files-table table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.875rem;
}

.files-table th {
  text-align: left;
  padding: 0.625rem 0.75rem;
  font-size: 0.6875rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--color-text-secondary);
  border-bottom: 2px solid var(--color-border);
  white-space: nowrap;
  user-select: none;
}

.files-table th.sortable {
  cursor: pointer;
  transition: all var(--transition-fast);
}

.files-table th.sortable:hover {
  color: var(--color-primary);
  background: var(--color-surface);
}

.sort-icon {
  font-size: 0.75rem;
  color: var(--color-text-secondary);
  opacity: 0.5;
  margin-left: 0.25rem;
  display: inline-block;
}

.sort-icon.active {
  color: var(--color-primary);
  opacity: 1;
}

.files-table td {
  padding: 0.625rem 0.75rem;
  border-bottom: 1px solid var(--color-border);
  vertical-align: middle;
}

.files-table tbody tr {
  transition: background-color var(--transition-fast);
  cursor: pointer;
}

.files-table tbody tr:hover {
  background: var(--color-surface);
}

.files-table tbody tr.selected {
  background: rgba(10, 158, 177, 0.08);
}

.files-table tbody tr.processing {
  opacity: 0.7;
}

.radio-cell {
  width: 40px;
  text-align: center;
}

.radio-cell input[type='radio'] {
  cursor: pointer;
  width: 16px;
  height: 16px;
}

.file-name-cell {
  max-width: 200px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 500;
}

.format-cell {
  white-space: nowrap;
}

.format-badge {
  display: inline-block;
  padding: 0.125rem 0.375rem;
  background: var(--color-gray-200);
  color: var(--color-gray-700);
  border-radius: var(--radius-sm);
  font-size: 0.625rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.format-badge.output {
  background: var(--gradient-primary);
  color: white;
}

.format-arrow {
  margin: 0 0.25rem;
  color: var(--color-text-secondary);
  font-weight: 700;
}

.size-cell {
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.size-result {
  display: block;
  font-size: 0.75rem;
  color: var(--color-text-secondary);
  margin-top: 0.125rem;
}

.saved-cell {
  text-align: center;
  font-variant-numeric: tabular-nums;
}

.saved-badge {
  display: inline-block;
  padding: 0.25rem 0.5rem;
  background: rgba(10, 158, 177, 0.15);
  color: var(--color-primary);
  border-radius: var(--radius-sm);
  font-size: 0.75rem;
  font-weight: 700;
}

.status-cell {
  white-space: nowrap;
}

.status-badge {
  display: inline-block;
  padding: 0.25rem 0.5rem;
  border-radius: var(--radius-sm);
  font-size: 0.6875rem;
  font-weight: 600;
}

.status-badge.pending {
  background: var(--color-gray-200);
  color: var(--color-gray-700);
}

.status-badge.processing {
  background: rgba(245, 158, 11, 0.15);
  color: var(--color-secondary);
  display: flex;
  align-items: center;
  gap: 0.25rem;
}

.spinner {
  display: inline-block;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

.status-badge.complete {
  background: rgba(16, 185, 129, 0.15);
  color: #10b981;
}

.status-badge.error {
  background: rgba(239, 68, 68, 0.15);
  color: var(--color-danger);
  cursor: help;
}

.actions-cell {
  white-space: nowrap;
  text-align: right;
}

.actions-cell > * {
  margin-left: 0.25rem;
}

/* Column widths */
.col-select {
  width: 40px;
}

.col-name {
  min-width: 180px;
  max-width: 300px;
}

.col-format {
  width: 140px;
}

.col-size {
  width: 120px;
}

.col-saved {
  width: 90px;
}

.col-status {
  width: 120px;
}

.col-actions {
  width: 140px;
}

/* ========================================
   EMPTY STATE
   ======================================== */

.empty-state {
  text-align: center;
  padding: var(--spacing-2xl) var(--spacing-lg);
}

.empty-state-icon {
  font-size: 4rem;
  line-height: 1;
  margin-bottom: var(--spacing-md);
  filter: drop-shadow(0 4px 12px rgba(10, 158, 177, 0.15));
}

.empty-state-title {
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin: 0 0 var(--spacing-sm) 0;
}

.empty-state-description {
  font-size: 0.875rem;
  color: var(--color-text-secondary);
  line-height: 1.6;
  margin: 0;
  max-width: 400px;
  margin-left: auto;
  margin-right: auto;
}

/* ========================================
   RESPONSIVE ADJUSTMENTS
   ======================================== */

/* Mobile optimizations */
@media (max-width: 768px) {
  .files-table {
    font-size: 0.8125rem;
  }

  .files-table th,
  .files-table td {
    padding: 0.5rem 0.375rem;
  }

  .col-name {
    min-width: 100px;
    max-width: 150px;
  }

  .col-format {
    width: 100px;
  }

  .col-size {
    width: 80px;
  }

  .col-saved {
    width: 70px;
  }

  .col-status {
    width: 90px;
  }

  .col-actions {
    width: 100px;
  }

  .size-result {
    display: none;
  }

  .comparison-handle {
    width: 32px;
    height: 32px;
    font-size: 1rem;
  }

  .format-badge {
    font-size: 0.5625rem;
    padding: 0.125rem 0.25rem;
  }

  .status-badge {
    font-size: 0.625rem;
    padding: 0.1875rem 0.375rem;
  }
}

/* Extra small screens */
@media (max-width: 480px) {
  .image-comparison-wrapper {
    aspect-ratio: 4 / 3;
  }

  .comparison-title {
    font-size: 0.8125rem;
  }

  .comparison-stat-label,
  .stat-label {
    font-size: 0.625rem;
  }

  .comparison-stat-value {
    font-size: 0.9375rem;
  }

  .comparison-stat.highlight .comparison-stat-value {
    font-size: 1.25rem;
  }

  .drop-zone.compact .drop-zone-icon {
    font-size: 1.5rem;
  }

  .drop-zone.compact .drop-zone-text {
    font-size: 0.75rem;
  }
}

/* Large screens - optimize space usage */
@media (min-width: 1440px) {
  .comparison-card {
    max-height: calc(100vh - 140px);
  }

  .files-table th,
  .files-table td {
    padding: 0.75rem 0.875rem;
  }
}

@media (prefers-color-scheme: dark) {
  .format-badge {
    background: var(--color-gray-700);
    color: var(--color-gray-200);
  }

  .comparison-label {
    background: rgba(255, 255, 255, 0.15);
  }

  .status-badge.pending {
    background: var(--color-gray-700);
    color: var(--color-gray-300);
  }
}

@media (prefers-reduced-motion: reduce) {
  .drop-zone.compact:hover:not(.disabled) {
    transform: none;
  }

  .quality-slider::-webkit-slider-thumb:hover,
  .quality-slider::-moz-range-thumb:hover {
    transform: none;
  }

  .comparison-slider:hover .comparison-handle,
  .comparison-slider:focus .comparison-handle {
    transform: translate(-50%, -50%);
  }
}


/* pages/widgets/StockHubWidget/StockHubWidget.css */
/**
 * StockHubWidget styles
 */

/* Unified Ticker Controls */
.ticker-controls-unified {
  margin-bottom: var(--spacing-xl);
}

.ticker-input-row {
  display: flex;
  gap: var(--spacing-sm);
  align-items: stretch;
  margin-bottom: var(--spacing-md);
}

/* Research Dashboard */
.research-dashboard {
  margin-top: var(--spacing-2xl);
  padding-top: var(--spacing-2xl);
  border-top: 2px solid var(--color-border);
}

.research-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--spacing-lg);
  margin-bottom: var(--spacing-xl);
}

.research-info {
  flex: 1;
  min-width: 0;
}

.research-title {
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin: 0 0 var(--spacing-xs) 0;
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

.ticker-highlight {
  color: var(--color-primary);
  font-weight: 800;
}

.research-subtitle {
  font-size: 0.8125rem;
  color: var(--color-text-secondary);
  margin: 0;
  line-height: 1.5;
}

.research-actions {
  display: flex;
  gap: var(--spacing-sm);
  align-items: center;
  flex-shrink: 0;
}

.section-filter {
  padding: 0.5rem var(--spacing-md);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-background);
  color: var(--color-text-primary);
  font-size: 0.875rem;
  font-weight: 600;
  font-family: var(--font-sans);
  cursor: pointer;
  transition: all var(--transition-base);
  -webkit-appearance: none;
  appearance: none;
  min-width: 120px;
}

.section-filter:hover {
  border-color: var(--color-primary);
  background: var(--color-surface);
}

.section-filter:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(20, 184, 166, 0.1);
}

/* Quote Display */
.quote-display {
  background: var(--color-surface);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--spacing-lg);
  margin-bottom: var(--spacing-lg);
  transition: all var(--transition-base);
}

.quote-display.loading {
  opacity: 0.6;
}

.quote-skeleton {
  text-align: center;
  color: var(--color-text-secondary);
  font-size: 0.875rem;
  padding: var(--spacing-md) 0;
}

.quote-display.positive {
  border-color: #10b981;
  background: linear-gradient(135deg, rgba(16, 185, 129, 0.05), rgba(16, 185, 129, 0.02));
}

.quote-display.negative {
  border-color: #ef4444;
  background: linear-gradient(135deg, rgba(239, 68, 68, 0.05), rgba(239, 68, 68, 0.02));
}

.quote-main {
  display: flex;
  align-items: baseline;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-sm);
}

.quote-price {
  font-size: 2rem;
  font-weight: 800;
  color: var(--color-text-primary);
  line-height: 1;
}

.quote-change {
  display: flex;
  gap: var(--spacing-xs);
  align-items: baseline;
}

.quote-display.positive .quote-change {
  color: #10b981;
}

.quote-display.negative .quote-change {
  color: #ef4444;
}

.change-value {
  font-size: 1.125rem;
  font-weight: 700;
}

.change-percent {
  font-size: 0.875rem;
  font-weight: 600;
  opacity: 0.8;
}

.quote-meta {
  display: flex;
  gap: var(--spacing-md);
  align-items: center;
  margin-bottom: var(--spacing-md);
  font-size: 0.8125rem;
  color: var(--color-text-secondary);
}

.quote-currency,
.quote-state {
  padding: 0.25rem 0.5rem;
  background: var(--color-background);
  border-radius: var(--radius-md);
  font-weight: 600;
  text-transform: uppercase;
}

.quote-refresh {
  padding: 0.25rem 0.5rem;
  background: var(--color-background);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  cursor: pointer;
  transition: all var(--transition-base);
  font-size: 0.875rem;
}

.quote-refresh:hover {
  background: var(--color-surface);
  border-color: var(--color-primary);
  transform: rotate(90deg);
}

.quote-details {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-sm) var(--spacing-md);
  font-size: 0.8125rem;
  color: var(--color-text-secondary);
  padding-top: var(--spacing-md);
  border-top: 1px solid var(--color-border);
}

.quote-details span {
  white-space: nowrap;
}

/* Sources Grid */
.sources-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr));
  gap: var(--spacing-md);
  margin-top: var(--spacing-lg);
}

.source-card {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
  padding: var(--spacing-md);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-background);
  transition: all var(--transition-base);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
}

.source-card:hover {
  border-color: var(--color-primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}

.source-card:active {
  transform: translateY(0);
}

.source-icon {
  font-size: 2rem;
  line-height: 1;
  flex-shrink: 0;
  width: 2.5rem;
  height: 2.5rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

.source-info {
  flex: 1;
  min-width: 0;
}

.source-name {
  font-size: 0.9375rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin-bottom: 0.125rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.source-desc {
  font-size: 0.75rem;
  color: var(--color-text-secondary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.ticker-input {
  flex: 1;
  padding: 0.75rem var(--spacing-md);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-background);
  color: var(--color-text-primary);
  font-size: 0.9375rem;
  font-family: var(--font-sans);
  font-weight: 600;
  text-transform: uppercase;
  transition: all var(--transition-base);
  -webkit-appearance: none;
  appearance: none;
}

.ticker-input::placeholder {
  color: var(--color-text-secondary);
  opacity: 0.6;
  text-transform: none;
}

.ticker-input:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(20, 184, 166, 0.1);
}

.popular-tickers {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
}

.ticker-chip {
  padding: 0.5rem var(--spacing-md);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-full);
  background: var(--color-background);
  color: var(--color-text-secondary);
  font-size: 0.875rem;
  font-weight: 600;
  cursor: pointer;
  transition: all var(--transition-base);
  -webkit-tap-highlight-color: transparent;
  user-select: none;
}

.ticker-chip:hover {
  border-color: var(--color-primary);
  color: var(--color-primary);
  transform: translateY(-2px);
}

.ticker-chip.active {
  background: var(--gradient-simple);
  color: white;
  border-color: transparent;
}

.prompts-section {
  margin-bottom: var(--spacing-xl);
}

.prompts-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--spacing-lg);
}

.prompts-title {
  font-size: 1.125rem;
  font-weight: 700;
  color: var(--color-text-primary);
  margin: 0;
}

.prompts-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
  gap: var(--spacing-md);
}

.prompt-card {
  padding: var(--spacing-lg);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-background);
  transition: all var(--transition-base);
  cursor: pointer;
}

.prompt-card:hover {
  border-color: var(--color-primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}

.prompt-card-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: var(--spacing-sm);
}

.prompt-card-title {
  font-size: 1rem;
  font-weight: 600;
  color: var(--color-text-primary);
  margin: 0;
}

.prompt-card-actions {
  display: flex;
  gap: var(--spacing-xs);
}

.prompt-card-content {
  font-size: 0.875rem;
  color: var(--color-text-secondary);
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.empty-state {
  text-align: center;
  padding: var(--spacing-3xl) var(--spacing-xl);
  color: var(--color-text-secondary);
}

.empty-state-icon {
  font-size: 3rem;
  margin-bottom: var(--spacing-md);
  opacity: 0.5;
}

.empty-state-title {
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--color-text-primary);
  margin-bottom: var(--spacing-sm);
}

.empty-state-description {
  font-size: 0.9375rem;
  margin-bottom: var(--spacing-lg);
}

/* Mobile adjustments */
@media (max-width: 639px) {
  .ticker-input-row {
    flex-direction: column;
  }

  .research-header {
    flex-direction: column;
    align-items: stretch;
  }

  .research-actions {
    flex-direction: column;
    width: 100%;
  }

  .section-filter {
    width: 100%;
  }

  .sources-grid .source-card {
    padding: var(--spacing-sm);
    border: none;
    border-radius: var(--radius-md);
    background: var(--color-background);
    opacity: 0.5;
    transition: all var(--transition-base);
  }
  .sources-grid .source-card:hover {
    box-shadow: var(--shadow-md);
    opacity: 1;
    background: var(--color-background);
  }
  .sources-grid .source-icon {
    display: none;
  }
  .sources-grid {
    grid-template-columns: 1fr 1fr;
  }

  .popular-tickers {
    width: 100%;
    justify-content: center;
  }

  .prompts-header {
    flex-direction: column;
    gap: var(--spacing-md);
    align-items: flex-start;
  }

  .prompts-grid {
    grid-template-columns: 1fr;
  }
}

/* Dark mode adjustments */
@media (prefers-color-scheme: dark) {
  .ticker-input,
  .section-filter,
  .source-card,
  .ticker-chip,
  .prompt-card {
    background: var(--color-surface);
  }

  .section-filter:hover,
  .ticker-chip:hover {
    background: var(--color-surface);
  }

  .ticker-chip.active {
    background: var(--gradient-simple);
  }

  .source-card:hover,
  .prompt-card:hover {
    background: var(--color-surface);
  }
}

/* Touch device optimizations */
@media (hover: none) {
  .source-card:hover,
  .ticker-chip:hover,
  .prompt-card:hover {
    transform: none;
  }

  .source-card:active {
    transform: scale(0.98);
  }

  .ticker-chip:active {
    transform: scale(0.97);
  }

  .prompt-card:active {
    transform: scale(0.99);
  }
}


/* pages/widgets/widget-shared.css */
/**
 * Shared styles for all widget pages
 * Use these classes consistently across widget implementations
 */

.widget-page {
  min-height: 100dvh;
  padding-top: 70px;
}

.widget-header {
  text-align: center;
  padding: var(--spacing-lg) var(--spacing-lg) var(--spacing-md);
  margin-bottom: var(--spacing-md);
}

.widget-title {
  font-size: clamp(1.5rem, 3.5vw + 0.5rem, 2rem);
  font-weight: 700;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  margin-bottom: var(--spacing-xs);
  animation: fadeInDown 0.5s cubic-bezier(0.4, 0, 0.2, 1);
  line-height: 1.1;
}

.widget-description {
  font-size: clamp(0.875rem, 1.5vw + 0.5rem, 1rem);
  color: var(--color-text-secondary);
  max-width: 550px;
  margin: 0 auto;
  animation: fadeInUp 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s both;
  line-height: 1.5;
}

.widget-content {
  max-width: 100%;
  padding: 0 var(--spacing-md);
  animation: fadeInUp 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.15s both;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-md);
  display: grid;
}

@keyframes fadeInDown {
  from {
    opacity: 0;
    transform: translateY(-20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Mobile: Small devices (portrait phones) */
@media (max-width: 480px) {
  .widget-page {
    padding-top: calc(10px + env(safe-area-inset-top));
  }

  .widget-header {
    padding: var(--spacing-md) var(--spacing-md) var(--spacing-sm);
    margin-bottom: var(--spacing-sm);
  }

  .widget-title {
    margin-bottom: 4px;
  }

  .widget-content {
    padding: 0 var(--spacing-sm);
  }
}

/* Mobile: Medium devices (landscape phones) */
@media (min-width: 481px) and (max-width: 767px) {
  .widget-page {
    padding-top: calc(20px + env(safe-area-inset-top));
  }

  .widget-header {
    padding: var(--spacing-md) var(--spacing-md) var(--spacing-sm);
    margin-bottom: var(--spacing-md);
  }

  .widget-content {
    padding: 0 var(--spacing-md);
  }
}

/* Tablet: Small to medium tablets */
@media (min-width: 768px) and (max-width: 1024px) {
  .widget-page {
    padding-top: calc(50px + env(safe-area-inset-top));
  }

  .widget-header {
    padding: var(--spacing-lg) var(--spacing-lg) var(--spacing-md);
    margin-bottom: var(--spacing-md);
  }

  .widget-description {
    max-width: 600px;
  }

  .widget-content {
    padding: 0 var(--spacing-lg);
  }
}

/* Desktop: Large tablets and desktops */
@media (min-width: 1025px) and (max-width: 1440px) {
  .widget-header {
    padding: var(--spacing-xl) var(--spacing-xl) var(--spacing-md);
  }

  .widget-description {
    max-width: 600px;
  }

  .widget-content {
    padding: 0 var(--spacing-xl);
  }
}

/* Desktop: Large screens */
@media (min-width: 1441px) {
  .widget-header {
    padding: var(--spacing-xl) var(--spacing-2xl) var(--spacing-md);
  }

  .widget-description {
    max-width: 650px;
  }

  .widget-content {
    padding: 0 var(--spacing-2xl);
    max-width: 1400px;
    margin: 0 auto;
  }
}


/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlbXAuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6ImJ1bmRsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZW1lOiBHbG9iYWwgc3R5bGVzIGFuZCBkZXNpZ24gdG9rZW5zXG4gKiBQcm92aWRlcyBjb25zaXN0ZW50IHN0eWxpbmcgZm91bmRhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uXG4gKi9cblxuOnJvb3Qge1xuICAvKiBDb2xvciBQYWxldHRlIC0gTGl2aW5nIEdyYWRpZW50IFRoZW1lIChUZWFsIOKGkiBBbWJlciDihpIgUGluaykgKi9cbiAgLS1jb2xvci1wcmltYXJ5OiAjMGE5ZWIxO1xuICAtLWNvbG9yLXByaW1hcnktZGFyazogIzA4N2Q5MjtcbiAgLS1jb2xvci1wcmltYXJ5LWxpZ2h0OiAjNTNkM2RjO1xuICAtLWNvbG9yLXNlY29uZGFyeTogI2Y1OWUwYjtcbiAgLS1jb2xvci1zZWNvbmRhcnktZGFyazogI2Q5NzcwNjtcbiAgLS1jb2xvci1zZWNvbmRhcnktbGlnaHQ6ICNmYmJmMjQ7XG4gIC0tY29sb3ItYWNjZW50OiAjZWM0ODk5O1xuICAtLWNvbG9yLWFjY2VudC1kYXJrOiAjZGIyNzc3O1xuICAtLWNvbG9yLWFjY2VudC1saWdodDogI2Y0NzJiNjtcblxuICAvKiBHcmFkaWVudCBEZWZpbml0aW9ucyAqL1xuICAtLWdyYWRpZW50LXByaW1hcnk6IGxpbmVhci1ncmFkaWVudChcbiAgICAgIDEzNWRlZyxcbiAgICAgIHZhcigtLWNvbG9yLXByaW1hcnkpIDEwJSxcbiAgICAgIHZhcigtLWNvbG9yLXNlY29uZGFyeSkgNTAlLFxuICAgICAgdmFyKC0tY29sb3ItYWNjZW50KSA5MCVcbiAgICApXG4gICAgbm8tcmVwZWF0IHBhZGRpbmctYm94O1xuICAtLWdyYWRpZW50LXByaW1hcnktaG92ZXI6IGxpbmVhci1ncmFkaWVudChcbiAgICAgIDEzNWRlZyxcbiAgICAgIHZhcigtLWNvbG9yLXByaW1hcnktZGFyaykgMTAlLFxuICAgICAgdmFyKC0tY29sb3Itc2Vjb25kYXJ5LWRhcmspIDUwJSxcbiAgICAgIHZhcigtLWNvbG9yLWFjY2VudC1kYXJrKSA5MCVcbiAgICApXG4gICAgbm8tcmVwZWF0IHBhZGRpbmctYm94O1xuICAtLWdyYWRpZW50LWhvcml6b250YWw6IGxpbmVhci1ncmFkaWVudChcbiAgICAgIDkwZGVnLFxuICAgICAgdmFyKC0tY29sb3ItcHJpbWFyeSkgMTAlLFxuICAgICAgdmFyKC0tY29sb3Itc2Vjb25kYXJ5KSA1MCUsXG4gICAgICB2YXIoLS1jb2xvci1hY2NlbnQpIDkwJVxuICAgIClcbiAgICBuby1yZXBlYXQgcGFkZGluZy1ib3g7XG4gIC0tZ3JhZGllbnQtdmVydGljYWw6IGxpbmVhci1ncmFkaWVudChcbiAgICAgIDE4MGRlZyxcbiAgICAgIHZhcigtLWNvbG9yLXByaW1hcnkpIDEwJSxcbiAgICAgIHZhcigtLWNvbG9yLXNlY29uZGFyeSkgNTAlLFxuICAgICAgdmFyKC0tY29sb3ItYWNjZW50KSA5MCVcbiAgICApXG4gICAgbm8tcmVwZWF0IHBhZGRpbmctYm94O1xuICAtLWdyYWRpZW50LXNpbXBsZTogbGluZWFyLWdyYWRpZW50KFxuICAgICAgMTM1ZGVnLFxuICAgICAgdmFyKC0tY29sb3ItcHJpbWFyeSkgMTAlLFxuICAgICAgdmFyKC0tY29sb3Itc2Vjb25kYXJ5LWRhcmspIDUwJSxcbiAgICAgIHZhcigtLWNvbG9yLWFjY2VudC1kYXJrKSA5MCVcbiAgICApXG4gICAgbm8tcmVwZWF0IHBhZGRpbmctYm94O1xuXG4gIC8qIFN1YnRsZSBiYWNrZ3JvdW5kIGdyYWRpZW50cyBmb3IgZGVjb3JhdGlvbiAqL1xuICAtLWdyYWRpZW50LWJnLXN1YnRsZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyMCwgMTg0LCAxNjYsIDAuMSksIHJnYmEoMjQ1LCAxNTgsIDExLCAwLjEpKVxuICAgIG5vLXJlcGVhdCBwYWRkaW5nLWJveDtcblxuICAvKiBTaGFkb3cgY29sb3JzICovXG4gIC0tc2hhZG93LXByaW1hcnk6IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjMpO1xuICAtLXNoYWRvdy1wcmltYXJ5LWxnOiByZ2JhKDIwLCAxODQsIDE2NiwgMC40KTtcblxuICAvKiBHcmF5c2NhbGUgKi9cbiAgLS1jb2xvci1ncmF5LTUwOiAjZjlmYWZiO1xuICAtLWNvbG9yLWdyYXktMTAwOiAjZjNmNGY2O1xuICAtLWNvbG9yLWdyYXktMjAwOiAjZTVlN2ViO1xuICAtLWNvbG9yLWdyYXktMzAwOiAjZDFkNWRiO1xuICAtLWNvbG9yLWdyYXktNDAwOiAjOWNhM2FmO1xuICAtLWNvbG9yLWdyYXktNTAwOiAjNmI3MjgwO1xuICAtLWNvbG9yLWdyYXktNjAwOiAjNGI1NTYzO1xuICAtLWNvbG9yLWdyYXktNzAwOiAjMzc0MTUxO1xuICAtLWNvbG9yLWdyYXktODAwOiAjMWYyOTM3O1xuICAtLWNvbG9yLWdyYXktOTAwOiAjMTExODI3O1xuXG4gIC8qIFNlbWFudGljIENvbG9ycyAqL1xuICAtLWNvbG9yLWJhY2tncm91bmQ6ICNmZmZmZmY7XG4gIC0tY29sb3Itc3VyZmFjZTogI2Y5ZmFmYjtcbiAgLS1jb2xvci10ZXh0LXByaW1hcnk6ICMxMTE4Mjc7XG4gIC0tY29sb3ItdGV4dC1zZWNvbmRhcnk6ICM2YjcyODA7XG4gIC0tY29sb3ItYm9yZGVyOiByZ2JhKDAsIDAsIDAsIDAuMDYpO1xuXG4gIC8qIEluZm8gQ29sb3JzICovXG4gIC0tY29sb3ItZGFuZ2VyOiAjZWY0NDQ0O1xuICAtLWNvbG9yLWRhbmdlci1kYXJrOiAjZGMyNjI2O1xuICAtLWNvbG9yLXdhcm5pbmc6ICNmNTllMGI7XG4gIC0tY29sb3Itd2FybmluZy1kYXJrOiAjZDk3NzA2O1xuICAtLWNvbG9yLXN1Y2Nlc3M6ICMxMGI5ODE7XG4gIC0tY29sb3Itc3VjY2Vzcy1kYXJrOiAjMDU5NjY5O1xuICAtLWNvbG9yLWluZm86ICMzYjgyZjY7XG4gIC0tY29sb3ItaW5mby1kYXJrOiAjMjU2M2ViO1xuXG4gIC8qIFNwYWNpbmcgKi9cbiAgLS1zcGFjaW5nLXhzOiAwLjI1cmVtO1xuICAtLXNwYWNpbmctc206IDAuNXJlbTtcbiAgLS1zcGFjaW5nLW1kOiAxcmVtO1xuICAtLXNwYWNpbmctbGc6IDEuNXJlbTtcbiAgLS1zcGFjaW5nLXhsOiAycmVtO1xuICAtLXNwYWNpbmctMnhsOiAzcmVtO1xuICAtLXNwYWNpbmctM3hsOiA0cmVtO1xuXG4gIC8qIFR5cG9ncmFwaHkgKi9cbiAgLS1mb250LXNhbnM6XG4gICAgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgJ0hlbHZldGljYSBOZXVlJywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIC0tZm9udC1tb25vOlxuICAgICdTRiBNb25vJywgTW9uYWNvLCAnQ2FzY2FkaWEgQ29kZScsICdSb2JvdG8gTW9ubycsIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XG5cbiAgLyogQm9yZGVyIFJhZGl1cyAqL1xuICAtLXJhZGl1cy1zbTogMC4zNzVyZW07XG4gIC0tcmFkaXVzLW1kOiAwLjVyZW07XG4gIC0tcmFkaXVzLWxnOiAwLjc1cmVtO1xuICAtLXJhZGl1cy14bDogMXJlbTtcbiAgLS1yYWRpdXMtZnVsbDogOTk5OXB4O1xuXG4gIC8qIFNoYWRvd3MgKi9cbiAgLS1zaGFkb3ctc206IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAtLXNoYWRvdy1tZDogMCA0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4wNyk7XG4gIC0tc2hhZG93LWxnOiAwIDEwcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIC0tc2hhZG93LXhsOiAwIDIwcHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuXG4gIC8qIFRyYW5zaXRpb25zICovXG4gIC0tdHJhbnNpdGlvbi1mYXN0OiAxNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xuICAtLXRyYW5zaXRpb24tYmFzZTogMjAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbiAgLS10cmFuc2l0aW9uLXNsb3c6IDMwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG4gIC0tdHJhbnNpdGlvbi1zbG93ZXI6IDUwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG5cbiAgLyogWi1JbmRleCBTY2FsZSAqL1xuICAtLXotYmFzZTogMTtcbiAgLS16LWRyb3Bkb3duOiAxMDA7XG4gIC0tei1zdGlja3k6IDIwMDtcbiAgLS16LWZpeGVkOiAzMDA7XG4gIC0tei1tb2RhbC1iYWNrZHJvcDogNDAwO1xuICAtLXotbW9kYWw6IDUwMDtcbiAgLS16LXBvcG92ZXI6IDYwMDtcbiAgLS16LXRvb2x0aXA6IDcwMDtcbn1cblxuLyogRGFyayBtb2RlIGNvbG9yIG92ZXJyaWRlcyAqL1xuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICA6cm9vdCB7XG4gICAgLS1jb2xvci1iYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgIC0tY29sb3Itc3VyZmFjZTogIzFlMjkzYjtcbiAgICAtLWNvbG9yLXRleHQtcHJpbWFyeTogI2YxZjVmOTtcbiAgICAtLWNvbG9yLXRleHQtc2Vjb25kYXJ5OiAjOTRhM2I4O1xuICAgIC0tY29sb3ItYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIH1cbn1cblxuLyogR2xvYmFsIFJlc2V0ICYgQmFzZSBTdHlsZXMgKi9cbiosXG4qOjpiZWZvcmUsXG4qOjphZnRlciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuaHRtbCB7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xufVxuXG5ib2R5IHtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc2Fucyk7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xufVxuXG4uYW5pbWF0ZWQtYmcge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1zaW1wbGUpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDMwMCUgMzAwJTsgLyogZ2l2ZXMgaXQgcm9vbSB0byBtb3ZlICovXG4gIGFuaW1hdGlvbjogZ3JhZGllbnRTaGlmdCA2cyBlYXNlIGluZmluaXRlO1xufVxuXG4vKiBBcHAgTGF5b3V0ICovXG4uYXBwLWxheW91dCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnIgYXV0bztcbn1cblxuLmFwcC1tYWluIHtcbiAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbn1cblxuLmFwcC1tYWluLWNvbnRhaW5lciB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAuYXBwLW1haW4ge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICB9XG59XG5cbi8qIFR5cG9ncmFwaHkgVXRpbGl0aWVzICovXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBmb250LXdlaWdodDogNzAwO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbn1cblxucCB7XG4gIGxpbmUtaGVpZ2h0OiAxLjc7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG59XG5cbmEge1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogY29sb3IgdmFyKC0tdHJhbnNpdGlvbi1mYXN0KTtcbn1cblxuLyogU2VsZWN0aW9uICovXG46OnNlbGVjdGlvbiB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LXNpbXBsZSk7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cblxuLyogU2Nyb2xsYmFyIFN0eWxpbmcgKFdlYmtpdCkgKi9cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMTJweDtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS00MDApO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG4gIGJvcmRlcjogM3B4IHNvbGlkIHZhcigtLWNvbG9yLXN1cmZhY2UpO1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS01MDApO1xufVxuXG4vKiBGb2N1cyBTdHlsZXMgKi9cbjpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG5Aa2V5ZnJhbWVzIGdyYWRpZW50U2hpZnQge1xuICAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgNTAlO1xuICB9XG4gIDUwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSA1MCU7XG4gIH1cbiAgMTAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgNTAlO1xuICB9XG59XG5cbi8qIEJ1dHRvbiBSZXNldCAqL1xuYnV0dG9uIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLyogSW1hZ2UgRGVmYXVsdHMgKi9cbmltZyB7XG4gIGhlaWdodDogYXV0bztcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIFNtb290aCBTY3JvbGxpbmcgKi9cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkge1xuICBodG1sIHtcbiAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDtcbiAgfVxufVxuXG4vKiBSZWR1Y2UgbW90aW9uIGZvciBhY2Nlc3NpYmlsaXR5ICovXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAqLFxuICAqOjpiZWZvcmUsXG4gICo6OmFmdGVyIHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50O1xuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDEgIWltcG9ydGFudDtcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vKiBjb21wb25lbnRzL0J1dHRvbi9CdXR0b24uY3NzICovXG4uYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IHZhcigtLXNwYWNpbmctc20pO1xuICBmb250LXdlaWdodDogNjAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xufVxuXG4uYnRuOmRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC41O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmJ0bjpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG4vKiBTdGF0ZXMgKi9cbi5idG4tYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtc2ltcGxlKTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uYnRuLWZ1bGwtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmJ0bi1sb2FkaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmJ0bi1sb2FkaW5nIC5idG4taWNvbiB7XG4gIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbi8qIFNpemVzICovXG4uYnRuLXNtIHtcbiAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG59XG5cbi5idG4tbWQge1xuICBwYWRkaW5nOiAwLjg3NXJlbSAxLjc1cmVtO1xuICBmb250LXNpemU6IDFyZW07XG59XG5cbi5idG4tbGcge1xuICBwYWRkaW5nOiAxcmVtIDJyZW07XG4gIGZvbnQtc2l6ZTogMS4xMjVyZW07XG59XG5cbi8qIFZhcmlhbnRzICovXG4uYnRuLXByaW1hcnkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1zaW1wbGUpO1xuICBjb2xvcjogd2hpdGU7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDEycHggdmFyKC0tc2hhZG93LXByaW1hcnkpO1xufVxuXG4uYnRuLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1wcmltYXJ5LWhvdmVyKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICBib3gtc2hhZG93OiAwIDhweCAyMHB4IHZhcigtLXNoYWRvdy1wcmltYXJ5LWxnKTtcbn1cblxuLmJ0bi1wcmltYXJ5OmFjdGl2ZTpub3QoOmRpc2FibGVkKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLmJ0bi1zZWNvbmRhcnkge1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cblxuLmJ0bi1zZWNvbmRhcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1zaW1wbGUpO1xuICBjb2xvcjogd2hpdGU7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCB2YXIoLS1zaGFkb3ctcHJpbWFyeSk7XG59XG5cbi5idG4tb3V0bGluZSB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4uYnRuLW91dGxpbmU6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgY29sb3I6IHdoaXRlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5idG4tZ2hvc3Qge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4uYnRuLWdob3N0OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyMCwgMTg0LCAxNjYsIDAuMDgpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG59XG5cbi5idG4tZGFuZ2VyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbiAgY29sb3I6IHdoaXRlO1xufVxuICBcbi5idG4tZGFuZ2VyOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZGFuZ2VyLWRhcmspO1xufVxuXG4uYnRuLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdWNjZXNzKTtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4uYnRuLXN1Y2Nlc3M6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdWNjZXNzLWRhcmspO1xufVxuXG4uYnRuLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci13YXJuaW5nKTtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4uYnRuLXdhcm5pbmc6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci13YXJuaW5nLWRhcmspO1xufVxuXG4uYnRuLWluZm8ge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1pbmZvKTtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4uYnRuLWluZm86aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1pbmZvLWRhcmspO1xufVxuXG4uYnRuLWljb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmJ0bi1jb250ZW50IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi8qIFRvdWNoIGRldmljZSBvcHRpbWl6YXRpb25zICovXG5AbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gIC5idG4tcHJpbWFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSxcbiAgLmJ0bi1zZWNvbmRhcnk6aG92ZXI6bm90KDpkaXNhYmxlZCksXG4gIC5idG4tb3V0bGluZTpob3Zlcjpub3QoOmRpc2FibGVkKSxcbiAgLmJ0bi1naG9zdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLmJ0bjphY3RpdmU6bm90KDpkaXNhYmxlZCkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Nyk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDEwMG1zIGVhc2Utb3V0O1xuICB9XG59XG5cbi8qIE1vYmlsZSBidXR0b24gc2l6ZXMgZm9yIGJldHRlciB0b3VjaCB0YXJnZXRzICovXG5AbWVkaWEgKG1heC13aWR0aDogNjM5cHgpIHtcbiAgLmJ0bi1zbSB7XG4gICAgcGFkZGluZzogMC42MjVyZW0gMS4yNXJlbTtcbiAgICBtaW4taGVpZ2h0OiA0NHB4O1xuICB9XG5cbiAgLmJ0bi1tZCB7XG4gICAgcGFkZGluZzogMC44NzVyZW0gMS43NXJlbTtcbiAgICBtaW4taGVpZ2h0OiA0OHB4O1xuICB9XG5cbiAgLmJ0bi1sZyB7XG4gICAgcGFkZGluZzogMXJlbSAycmVtO1xuICAgIG1pbi1oZWlnaHQ6IDUycHg7XG4gIH1cbn1cblxuLyogRGFyayBtb2RlICovXG5AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gIC5idG4tc2Vjb25kYXJ5IHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5idG4tZ2hvc3Q6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjE1KTtcbiAgfVxufVxuXG5cbi8qIGNvbXBvbmVudHMvQ2FyZC9DYXJkLmNzcyAqL1xuLmNhcmQge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXhsKTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG59XG5cbi8qIFBhZGRpbmcgU2l6ZXMgKi9cbi5jYXJkLXBhZGRpbmctc20ge1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLWxnKTtcbn1cblxuLmNhcmQtcGFkZGluZy1tZCB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteGwpO1xufVxuXG4uY2FyZC1wYWRkaW5nLWxnIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy0yeGwpO1xufVxuXG4vKiBWYXJpYW50cyAqL1xuLmNhcmQtZGVmYXVsdCB7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG59XG5cbi5jYXJkLWVsZXZhdGVkIHtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbn1cblxuLmNhcmQtb3V0bGluZWQge1xuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uY2FyZC1ncmFkaWVudCB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LXByaW1hcnkpO1xuICBjb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbn1cblxuLyogSG92ZXIgRWZmZWN0ICovXG4uY2FyZC1ob3ZlciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLmNhcmQtaG92ZXI6aG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7XG4gIGJveC1zaGFkb3c6IDAgMTJweCAyNHB4IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjE1KTtcbn1cblxuLmNhcmQtaG92ZXI6aG92ZXIuY2FyZC1kZWZhdWx0LFxuLmNhcmQtaG92ZXI6aG92ZXIuY2FyZC1lbGV2YXRlZCB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgyMCwgMTg0LCAxNjYsIDAuMik7XG59XG5cbi5jYXJkLWhvdmVyOmhvdmVyLmNhcmQtb3V0bGluZWQge1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4uY2FyZC1ob3Zlcjpob3Zlci5jYXJkLWdyYWRpZW50IHtcbiAgYm94LXNoYWRvdzogMCAxNnB4IDMycHggdmFyKC0tc2hhZG93LXByaW1hcnktbGcpO1xufVxuXG4uY2FyZC1ob3ZlcjphY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi8qIFRvdWNoIGRldmljZSBvcHRpbWl6YXRpb25zICovXG5AbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gIC5jYXJkLWhvdmVyOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbiAgfVxuXG4gIC5jYXJkLWhvdmVyOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTAwbXMgZWFzZS1vdXQ7XG4gIH1cbn1cblxuLyogRm9jdXMgZm9yIGFjY2Vzc2liaWxpdHkgKi9cbi5jYXJkW3JvbGU9J2J1dHRvbiddOmZvY3VzLXZpc2libGUge1xuICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi8qIE1vYmlsZSByZXNwb25zaXZlIHBhZGRpbmcgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2MzlweCkge1xuICAuY2FyZC1wYWRkaW5nLXNtIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgfVxuXG4gIC5jYXJkLXBhZGRpbmctbWQge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGcpO1xuICB9XG5cbiAgLmNhcmQtcGFkZGluZy1sZyB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG4gIH1cbn1cblxuLyogRGFyayBNb2RlICovXG5AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gIC5jYXJkLWRlZmF1bHQsXG4gIC5jYXJkLWVsZXZhdGVkLFxuICAuY2FyZC1vdXRsaW5lZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpO1xuICB9XG5cbiAgLmNhcmQtaG92ZXI6aG92ZXIuY2FyZC1kZWZhdWx0LFxuICAuY2FyZC1ob3Zlcjpob3Zlci5jYXJkLWVsZXZhdGVkIHtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjQpO1xuICB9XG59XG5cblxuLyogY29tcG9uZW50cy9EM05ldHdvcmtQYXR0ZXJuL0QzTmV0d29ya1BhdHRlcm4uY3NzICovXG4vKipcbiAqIEQzIE5ldHdvcmsgUGF0dGVybiAtIEFkdmFuY2VkIEFuaW1hdGVkIEJhY2tncm91bmRcbiAqIEhpZ2gtcGVyZm9ybWFuY2UgZm9yY2UtZGlyZWN0ZWQgZ3JhcGggdmlzdWFsaXphdGlvblxuICovXG5cbi5kMy1uZXR3b3JrLXBhdHRlcm4ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDBkdmg7XG4gIHotaW5kZXg6IC0xO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgb3BhY2l0eTogMC4yNTtcbiAgd2lsbC1jaGFuZ2U6IG9wYWNpdHk7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC44cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZDMtbmV0d29yay1wYXR0ZXJuIHN2ZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4vKiBOb2RlIEdyb3VwcyAqL1xuLmQzLW5vZGUtZ3JvdXAge1xuICB3aWxsLWNoYW5nZTogb3BhY2l0eTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEuMnMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xufVxuXG4vKiBOb2RlIEhhbG9zIC0gUmFkaWFsIGdyYWRpZW50IGdsb3cgKi9cbi5kMy1ub2RlLWhhbG8ge1xuICB3aWxsLWNoYW5nZTogb3BhY2l0eTtcbiAgYW5pbWF0aW9uOiBoYWxvLXB1bHNlIDEwcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBoYWxvLXB1bHNlIHtcbiAgMCUsIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDQpO1xuICB9XG59XG5cbi8qIE5vZGUgUmluZ3MgLSBEZWNvcmF0aXZlIG91dGVyIGNpcmNsZXMgKi9cbi5kMy1ub2RlLXJpbmcge1xuICB3aWxsLWNoYW5nZTogb3BhY2l0eTtcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMnB4IGN1cnJlbnRDb2xvcik7XG4gIG9wYWNpdHk6IDAuMjtcbn1cblxuLyogTm9kZSBCYWNrZ3JvdW5kIC0gRm9yIGltYWdlIG5vZGVzICovXG4uZDMtbm9kZS1iZyB7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG59XG5cbi8qIE5vZGUgSW1hZ2VzICovXG4uZDMtbm9kZS1pbWFnZSB7XG4gIHdpbGwtY2hhbmdlOiBvcGFjaXR5O1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDFzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcbiAgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0O1xuICBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzO1xufVxuXG4vKiBOb2RlIENvcmUgLSBGb3Igbm9uLWltYWdlIG5vZGVzICovXG4uZDMtbm9kZS1jb3JlIHtcbiAgd2lsbC1jaGFuZ2U6IGZpbGwtb3BhY2l0eSwgc3Ryb2tlLW9wYWNpdHk7XG4gIHRyYW5zaXRpb246IGFsbCAxcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDRweCBjdXJyZW50Q29sb3IpO1xuICBvcGFjaXR5OiAwLjc1O1xufVxuXG4vKiBMaW5rcyAqL1xuLmQzLWxpbmsge1xuICB3aWxsLWNoYW5nZTogc3Ryb2tlLW9wYWNpdHk7XG4gIHRyYW5zaXRpb246IHN0cm9rZS1vcGFjaXR5IDFzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjIpKTtcbn1cblxuLyogUGFydGljbGVzICovXG4uZDMtcGFydGljbGUtZ3JvdXAge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmQzLXBhcnRpY2xlIHtcbiAgd2lsbC1jaGFuZ2U6IG9wYWNpdHksIHRyYW5zZm9ybTtcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgM3B4IGN1cnJlbnRDb2xvcik7XG4gIG1peC1ibGVuZC1tb2RlOiBzY3JlZW47XG59XG5cbi8qIERhcmsgTW9kZSBFbmhhbmNlbWVudHMgKi9cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcblxuICAuZDMtbm9kZS1oYWxvIHtcbiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4zKTtcbiAgfVxuXG4gIC5kMy1ub2RlLWNvcmUge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDZweCBjdXJyZW50Q29sb3IpIGJyaWdodG5lc3MoMS4xKTtcbiAgfVxuXG4gIC5kMy1ub2RlLXJpbmcge1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAzcHggY3VycmVudENvbG9yKTtcbiAgfVxuXG4gIC5kMy1saW5rIHtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAzcHggcmdiYSgyMCwgMTg0LCAxNjYsIDAuMykpO1xuICB9XG5cbiAgLmQzLXBhcnRpY2xlIHtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCA0cHggY3VycmVudENvbG9yKTtcbiAgfVxufVxuXG4vKiBSZXNwb25zaXZlIEFkanVzdG1lbnRzICovXG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5kMy1uZXR3b3JrLXBhdHRlcm4ge1xuICAgIG9wYWNpdHk6IDAuMjU7XG4gIH1cblxuICAuZDMtbm9kZS1oYWxvIHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDEycztcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmQzLW5ldHdvcmstcGF0dGVybiB7XG4gICAgb3BhY2l0eTogMC4yO1xuICB9XG5cbiAgLmQzLW5vZGUtaGFsbyB7XG4gICAgYW5pbWF0aW9uOiBub25lO1xuICB9XG5cbiAgLmQzLW5vZGUtcmluZyB7XG4gICAgb3BhY2l0eTogMC4xNTtcbiAgfVxuXG4gIC5kMy1ub2RlLWNvcmUge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDNweCBjdXJyZW50Q29sb3IpO1xuICB9XG5cbiAgLmQzLWxpbmsge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDEuNXB4IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjE1KSk7XG4gIH1cblxuICAuZDMtcGFydGljbGUge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDJweCBjdXJyZW50Q29sb3IpO1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAuZDMtbmV0d29yay1wYXR0ZXJuIHtcbiAgICBvcGFjaXR5OiAwLjE4O1xuICB9XG5cbiAgLmQzLW5vZGUtaGFsbyB7XG4gICAgYW5pbWF0aW9uOiBub25lO1xuICB9XG5cbiAgLmQzLW5vZGUtcmluZyB7XG4gICAgb3BhY2l0eTogMC4xMjtcbiAgfVxuXG4gIC5kMy1ub2RlLWNvcmUge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDJweCBjdXJyZW50Q29sb3IpO1xuICB9XG5cbiAgLmQzLWxpbmsge1xuICAgIGZpbHRlcjogbm9uZTtcbiAgfVxufVxuXG4vKiBQZXJmb3JtYW5jZTogUmVkdWNlIE1vdGlvbiAqL1xuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgLmQzLW5ldHdvcmstcGF0dGVybixcbiAgLmQzLW5vZGUtZ3JvdXAsXG4gIC5kMy1ub2RlLWhhbG8sXG4gIC5kMy1ub2RlLXJpbmcsXG4gIC5kMy1ub2RlLWNvcmUsXG4gIC5kMy1ub2RlLWltYWdlLFxuICAuZDMtbGluayxcbiAgLmQzLXBhcnRpY2xlIHtcbiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5kMy1uZXR3b3JrLXBhdHRlcm4ge1xuICAgIG9wYWNpdHk6IDAuMjU7XG4gIH1cbn1cblxuLyogSGlnaCBjb250cmFzdCBtb2RlIHN1cHBvcnQgKi9cbkBtZWRpYSAocHJlZmVycy1jb250cmFzdDogaGlnaCkge1xuICAuZDMtbmV0d29yay1wYXR0ZXJuIHtcbiAgICBvcGFjaXR5OiAwLjE7XG4gIH1cblxuICAuZDMtbGluayB7XG4gICAgZmlsdGVyOiBub25lO1xuICB9XG5cbiAgLmQzLW5vZGUtY29yZSxcbiAgLmQzLXBhcnRpY2xlIHtcbiAgICBmaWx0ZXI6IG5vbmU7XG4gIH1cbn1cblxuLyogUHJpbnQgc3R5bGVzICovXG5AbWVkaWEgcHJpbnQge1xuICAuZDMtbmV0d29yay1wYXR0ZXJuIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuLyogY29tcG9uZW50cy9Gb290ZXIvRm9vdGVyLmNzcyAqL1xuLnNpdGUtZm9vdGVyIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2Y5ZmFmYiAwJSwgI2YzZjRmNiAxMDAlKTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wNik7XG4gIG1hcmdpbi10b3A6IGF1dG87XG59XG5cbi5mb290ZXItY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAzcmVtIDEuNXJlbSAycmVtO1xufVxuXG4uZm9vdGVyLWNvbnRlbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDJyZW07XG4gIG1hcmdpbi1ib3R0b206IDJyZW07XG59XG5cbi5mb290ZXItYnJhbmQge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5mb290ZXItdGl0bGUge1xuICBmb250LXNpemU6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xufVxuXG4uZm9vdGVyLXRhZ2xpbmUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn1cblxuLmZvb3Rlci1zb2NpYWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiAxcmVtO1xufVxuXG4uc29jaWFsLWxpbmsge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDQ0cHg7XG4gIGhlaWdodDogNDRweDtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1zbG93KTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtKTtcbn1cblxuLnNvY2lhbC1saW5rOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtc2ltcGxlKTtcbiAgY29sb3I6IHdoaXRlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCkgc2NhbGUoMS4wNSk7XG4gIGJveC1zaGFkb3c6IDAgOHB4IDE2cHggdmFyKC0tc2hhZG93LXByaW1hcnkpO1xufVxuXG4uc29jaWFsLWxpbms6YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpIHNjYWxlKDEuMDIpO1xufVxuXG4uZm9vdGVyLWJvdHRvbSB7XG4gIHBhZGRpbmctdG9wOiAycmVtO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA2KTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDAuNXJlbTtcbn1cblxuLmZvb3Rlci1jb3B5cmlnaHQsXG4uZm9vdGVyLXRlY2gge1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS00MDApO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xufVxuXG4uZm9vdGVyLXRlY2gge1xuICBvcGFjaXR5OiAwLjg7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAuc2l0ZS1mb290ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5mb290ZXItY29udGVudCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuXG4gIC5mb290ZXItYnJhbmQge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gIH1cblxuICAuZm9vdGVyLWJvdHRvbSB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cbn1cblxuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAuc2l0ZS1mb290ZXIge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMxZjI5MzcgMCUsICMxMTE4MjcgMTAwJSk7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTtcbiAgfVxuXG4gIC5mb290ZXItdGFnbGluZSxcbiAgLnNvY2lhbC1saW5rIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICB9XG5cbiAgLnNvY2lhbC1saW5rIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC5zb2NpYWwtbGluazpob3ZlciB7XG4gICAgY29sb3I6IHdoaXRlO1xuICB9XG5cbiAgLmZvb3Rlci1ib3R0b20ge1xuICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7XG4gIH1cblxuICAuZm9vdGVyLWNvcHlyaWdodCxcbiAgLmZvb3Rlci10ZWNoIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS01MDApO1xuICB9XG59XG5cblxuLyogY29tcG9uZW50cy9IZWFkZXIvSGVhZGVyLmNzcyAqL1xuLnNpdGUtaGVhZGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxMDAwO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpO1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLnNpdGUtaGVhZGVyLnNjcm9sbGVkIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KTtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgYm94LXNoYWRvdzogMCAycHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xufVxuXG4uaGVhZGVyLWNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogMTIwMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMXJlbSAxLjVyZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLmxvZ28ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBpbmhlcml0O1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpO1xufVxuXG4ubG9nbzpob3ZlciB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XG59XG5cbi5sb2dvLWltYWdlIHtcbiAgd2lkdGg6IDc1cHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgbWFyZ2luLWJvdHRvbTogLTUwcHg7XG59XG5cbi5kZXNrdG9wLW5hdiB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGdhcDogMnJlbTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLm5hdi1saW5rIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgcGFkZGluZzogMC41cmVtIDA7XG4gIHRyYW5zaXRpb246IGNvbG9yIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG59XG5cbi5uYXYtbGluazo6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBoZWlnaHQ6IDJweDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtaG9yaXpvbnRhbCk7XG4gIHRyYW5zZm9ybTogc2NhbGVYKDApO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiByaWdodDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXRyYW5zaXRpb24tc2xvdyk7XG59XG5cbi5uYXYtbGluazpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cblxuLm5hdi1saW5rOmhvdmVyOjphZnRlciB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0O1xufVxuXG4ubmF2LWxpbmsuYWN0aXZlIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4ubmF2LWxpbmsuYWN0aXZlOjphZnRlciB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xufVxuXG4uY2xlYXItY2FjaGUtYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAzNnB4O1xuICBoZWlnaHQ6IDM2cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xuICBwYWRkaW5nOiAwO1xufVxuXG4uY2xlYXItY2FjaGUtYnV0dG9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyMCwgMTg0LCAxNjYsIDAuMDgpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG59XG5cbi5jbGVhci1jYWNoZS1idXR0b246YWN0aXZlOm5vdCg6ZGlzYWJsZWQpIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTtcbn1cblxuLmNsZWFyLWNhY2hlLWJ1dHRvbjpkaXNhYmxlZCB7XG4gIG9wYWNpdHk6IDAuNTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLmNsZWFyLWNhY2hlLWJ1dHRvbjpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgLnNpdGUtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2MDBweCkge1xuICAuZGVza3RvcC1uYXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbn1cblxuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAuc2l0ZS1oZWFkZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTcsIDI0LCAzOSwgMC45NSk7XG4gIH1cblxuICAuc2l0ZS1oZWFkZXIuc2Nyb2xsZWQge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTcsIDI0LCAzOSwgMC45OCk7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcbiAgfVxuXG4gIC5uYXYtbGluayB7XG4gICAgY29sb3I6ICNlNWU3ZWI7XG4gIH1cblxuICAuaGFtYnVyZ2VyIHNwYW4ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIH1cblxuICAuY2xlYXItY2FjaGUtYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIH1cbn1cblxuXG4vKiBjb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi5jc3MgKi9cbi5pY29uLWJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG59XG5cbi5pY29uLWJ0bjpkaXNhYmxlZCB7XG4gIG9wYWNpdHk6IDAuNTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5pY29uLWJ0bjpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG4vKiBTaXplcyAqL1xuLmljb24tYnRuLXNtIHtcbiAgd2lkdGg6IDM1cHg7XG4gIGhlaWdodDogMzVweDtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbn1cblxuLmljb24tYnRuLW1kIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuXG4uaWNvbi1idG4tbGcge1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBmb250LXNpemU6IDEuNXJlbTtcbn1cblxuLyogVmFyaWFudHMgKi9cbi5pY29uLWJ0bi1kZWZhdWx0OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyMCwgMTg0LCAxNjYsIDAuMDgpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG59XG5cbi5pY29uLWJ0bi1kZWZhdWx0OmFjdGl2ZTpub3QoOmRpc2FibGVkKSB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7XG59XG5cbi5pY29uLWJ0bi1kYW5nZXIge1xuICBjb2xvcjogI2VmNDQ0NDtcbn1cblxuLmljb24tYnRuLWRhbmdlcjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMSk7XG4gIGNvbG9yOiAjZGMyNjI2O1xufVxuXG4uaWNvbi1idG4tZGFuZ2VyOmFjdGl2ZTpub3QoOmRpc2FibGVkKSB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7XG59XG5cbi5pY29uLWJ0bi1wcmltYXJ5IHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xufVxuXG4uaWNvbi1idG4tcHJpbWFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjA4KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cblxuLmljb24tYnRuLXByaW1hcnk6YWN0aXZlOm5vdCg6ZGlzYWJsZWQpIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTtcbn1cblxuLyogTG9hZGluZyBzdGF0ZSAqL1xuLmljb24tYnRuLWxvYWRpbmcgLmljb24tYnRuLWNvbnRlbnQge1xuICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIHNwaW4ge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuXG4uaWNvbi1idG4tY29udGVudCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLyogRGFyayBtb2RlICovXG5AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gIC5pY29uLWJ0bi1wcmltYXJ5IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIH1cbn1cblxuXG4vKiBjb21wb25lbnRzL01vZGFsL01vZGFsLmNzcyAqL1xuLyoqXG4gKiBNb2RhbDogT3ZlcmxheSBhbmQgcGFuZWwgc3R5bGVzXG4gKiBHZW5lcmljIHJldXNhYmxlIG1vZGFsIHdpdGggYmFja2Ryb3AsIHBhbmVsLCBhbmQgYW5pbWF0aW9uc1xuICogUG9ydGFsLXJlbmRlcmVkIGF0IGRvY3VtZW50LmJvZHkgbGV2ZWwgdG8gZXNjYXBlIHN0YWNraW5nIGNvbnRleHRzXG4gKi9cblxuLm1vZGFsLW92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiB2YXIoLS16LW1vZGFsLWJhY2tkcm9wKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xuICBhbmltYXRpb246IG1vZGFsRmFkZUluIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIGlzb2xhdGlvbjogaXNvbGF0ZTtcbn1cblxuLm1vZGFsLXBhbmVsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy14bCk7XG4gIG1heC1oZWlnaHQ6IDkwZHZoO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICB6LWluZGV4OiB2YXIoLS16LW1vZGFsKTtcbiAgYW5pbWF0aW9uOiBtb2RhbFNsaWRlSW4gdmFyKC0tdHJhbnNpdGlvbi1zbG93KTtcbn1cblxuLm1vZGFsLXBhbmVsOmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuLyogU2l6ZSB2YXJpYW50cyAqL1xuLm1vZGFsLXBhbmVsLXNtIHtcbiAgbWF4LXdpZHRoOiAyOHJlbTtcbn1cblxuLm1vZGFsLXBhbmVsLW1kIHtcbiAgbWF4LXdpZHRoOiAzMnJlbTtcbn1cblxuLm1vZGFsLXBhbmVsLWxnIHtcbiAgbWF4LXdpZHRoOiA0MnJlbTtcbn1cblxuLm1vZGFsLXBhbmVsLXhsIHtcbiAgbWF4LXdpZHRoOiA1NnJlbTtcbn1cblxuLm1vZGFsLXBhbmVsLWZ1bGwge1xuICBtYXgtd2lkdGg6IDkwdnc7XG59XG5cbi8qIEFuaW1hdGlvbnMgKi9cbkBrZXlmcmFtZXMgbW9kYWxGYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgbW9kYWxTbGlkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuXG4vKiBEYXJrIG1vZGUgYWRqdXN0bWVudHMgKi9cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgLm1vZGFsLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTtcbiAgfVxufVxuXG4vKiBTY3JvbGxiYXIgc3R5bGluZyBmb3IgbW9kYWwgY29udGVudCAqL1xuLm1vZGFsLXBhbmVsOjotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiA4cHg7XG59XG5cbi5tb2RhbC1wYW5lbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLm1vZGFsLXBhbmVsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xufVxuXG4ubW9kYWwtcGFuZWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS01MDApO1xufVxuXG4vKiBNb2JpbGUgYWRqdXN0bWVudHMgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2MzlweCkge1xuICAubW9kYWwtb3ZlcmxheSB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbSk7XG4gIH1cblxuICAubW9kYWwtcGFuZWwge1xuICAgIG1heC1oZWlnaHQ6IDk1ZHZoO1xuICB9XG5cbiAgLm1vZGFsLXBhbmVsLXNtLFxuICAubW9kYWwtcGFuZWwtbWQsXG4gIC5tb2RhbC1wYW5lbC1sZyxcbiAgLm1vZGFsLXBhbmVsLXhsLFxuICAubW9kYWwtcGFuZWwtZnVsbCB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi8qIFJlZHVjZWQgbW90aW9uICovXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAubW9kYWwtb3ZlcmxheSxcbiAgLm1vZGFsLXBhbmVsIHtcbiAgICBhbmltYXRpb246IG5vbmU7XG4gIH1cbn1cblxuXG4vKiBjb21wb25lbnRzL1Byb21wdE1vZGFsL1Byb21wdE1vZGFsLmNzcyAqL1xuLyoqXG4gKiBQcm9tcHRNb2RhbDogU3R5bGVkIG1vZGFsIGZvciBwcm9tcHQgZWRpdGluZ1xuICogQ29tcG9zZXMgTW9kYWwgd2l0aCBzcGVjaWZpYyBsYXlvdXQgZm9yIHByb21wdCBmaWVsZHNcbiAqL1xuXG4ucHJvbXB0LW1vZGFsLWNvbnRlbnQge1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhsKTtcbn1cblxuLnByb21wdC1tb2RhbC1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmcteGwpO1xufVxuXG4ucHJvbXB0LW1vZGFsLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgbWFyZ2luOiAwO1xufVxuXG4ucHJvbXB0LW1vZGFsLWNsb3NlIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAwO1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAycmVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG59XG5cbi5wcm9tcHQtbW9kYWwtY2xvc2U6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnByb21wdC1tb2RhbC1jbG9zZTpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG4ucHJvbXB0LW1vZGFsLWZvcm0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IHZhcigtLXNwYWNpbmctbGcpO1xufVxuXG4ucHJvbXB0LW1vZGFsLWZpZWxkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTtcbn1cblxuLnByb21wdC1tb2RhbC1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xufVxuXG4ucHJvbXB0LW1vZGFsLWlucHV0LFxuLnByb21wdC1tb2RhbC10ZXh0YXJlYSB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjc1cmVtIHZhcigtLXNwYWNpbmctbWQpO1xuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zYW5zKTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLnByb21wdC1tb2RhbC1pbnB1dDo6cGxhY2Vob2xkZXIsXG4ucHJvbXB0LW1vZGFsLXRleHRhcmVhOjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIG9wYWNpdHk6IDAuNjtcbn1cblxuLnByb21wdC1tb2RhbC1pbnB1dDpmb2N1cyxcbi5wcm9tcHQtbW9kYWwtdGV4dGFyZWE6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgyMCwgMTg0LCAxNjYsIDAuMSk7XG59XG5cbi5wcm9tcHQtbW9kYWwtdGV4dGFyZWEge1xuICByZXNpemU6IHZlcnRpY2FsO1xuICBtaW4taGVpZ2h0OiAxMjBweDtcbn1cblxuLnByb21wdC1tb2RhbC1oaW50IHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBtYXJnaW4tdG9wOiBjYWxjKC0xICogdmFyKC0tc3BhY2luZy14cykpO1xufVxuXG4ucHJvbXB0LW1vZGFsLWFjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICBnYXA6IHZhcigtLXNwYWNpbmctbWQpO1xuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLWxnKTtcbn1cblxuLyogTW9iaWxlIGFkanVzdG1lbnRzICovXG5AbWVkaWEgKG1heC13aWR0aDogNjM5cHgpIHtcbiAgLnByb21wdC1tb2RhbC1jb250ZW50IHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgfVxuXG4gIC5wcm9tcHQtbW9kYWwtYWN0aW9ucyB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctc20pO1xuICB9XG5cbiAgLnByb21wdC1tb2RhbC1hY3Rpb25zIC5idG4ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi8qIERhcmsgbW9kZSBhZGp1c3RtZW50cyAqL1xuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAucHJvbXB0LW1vZGFsLWNsb3NlOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIH1cblxuICAucHJvbXB0LW1vZGFsLWlucHV0LFxuICAucHJvbXB0LW1vZGFsLXRleHRhcmVhIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgfVxufVxuXG5cbi8qIGNvbXBvbmVudHMvU2VnbWVudEJ1dHRvbi9TZWdtZW50QnV0dG9uLmNzcyAqL1xuLnNlZ21lbnQtYnV0dG9uIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGdhcDogNHB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgcGFkZGluZzogNHB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbn1cblxuLnNlZ21lbnQtYnV0dG9uLWZ1bGwtd2lkdGgge1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnNlZ21lbnQtYnV0dG9uLWRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC42O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4vKiBTaXplcyAqL1xuLnNlZ21lbnQtYnV0dG9uLXNtIHtcbiAgcGFkZGluZzogM3B4O1xuICBnYXA6IDNweDtcbn1cblxuLnNlZ21lbnQtYnV0dG9uLW1kIHtcbiAgcGFkZGluZzogNHB4O1xuICBnYXA6IDRweDtcbn1cblxuLnNlZ21lbnQtYnV0dG9uLWxnIHtcbiAgcGFkZGluZzogNXB4O1xuICBnYXA6IDVweDtcbn1cblxuLyogT3B0aW9ucyAqL1xuLnNlZ21lbnQtYnV0dG9uLW9wdGlvbiB7XG4gIGZsZXg6IDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IHZhcigtLXNwYWNpbmcteHMpO1xuICBtaW4td2lkdGg6IDgwcHg7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pIHZhcigtLXNwYWNpbmctbGcpO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5zZWdtZW50LWJ1dHRvbi1zbSAuc2VnbWVudC1idXR0b24tb3B0aW9uIHtcbiAgbWluLXdpZHRoOiA2MHB4O1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzKSB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgZm9udC1zaXplOiAwLjgxMjVyZW07XG59XG5cbi5zZWdtZW50LWJ1dHRvbi1sZyAuc2VnbWVudC1idXR0b24tb3B0aW9uIHtcbiAgbWluLXdpZHRoOiAxMDBweDtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZCkgdmFyKC0tc3BhY2luZy14bCk7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbn1cblxuLnNlZ21lbnQtYnV0dG9uLW9wdGlvbjpob3Zlcjpub3QoOmRpc2FibGVkKTpub3QoLnNlZ21lbnQtYnV0dG9uLW9wdGlvbi1hY3RpdmUpIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xufVxuXG4uc2VnbWVudC1idXR0b24tb3B0aW9uOmFjdGl2ZTpub3QoOmRpc2FibGVkKSB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7XG59XG5cbi5zZWdtZW50LWJ1dHRvbi1vcHRpb246ZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5zZWdtZW50LWJ1dHRvbi1vcHRpb24tYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcbn1cblxuLnNlZ21lbnQtYnV0dG9uLW9wdGlvbi1hY3RpdmU6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1wcmltYXJ5KTtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4vKiBJY29uIGFuZCBMYWJlbCAqL1xuLnNlZ21lbnQtYnV0dG9uLWljb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMWVtO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLnNlZ21lbnQtYnV0dG9uLWxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLyogTW9iaWxlIFJlc3BvbnNpdmUgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAuc2VnbWVudC1idXR0b24tb3B0aW9uIHtcbiAgICBtaW4td2lkdGg6IDcwcHg7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbSkgdmFyKC0tc3BhY2luZy1tZCk7XG4gICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gIH1cblxuICAuc2VnbWVudC1idXR0b24tc20gLnNlZ21lbnQtYnV0dG9uLW9wdGlvbiB7XG4gICAgbWluLXdpZHRoOiA1NXB4O1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHMpIHZhcigtLXNwYWNpbmctc20pO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgfVxuXG4gIC5zZWdtZW50LWJ1dHRvbi1sZyAuc2VnbWVudC1idXR0b24tb3B0aW9uIHtcbiAgICBtaW4td2lkdGg6IDg1cHg7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbSkgdmFyKC0tc3BhY2luZy1sZyk7XG4gICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDM2MHB4KSB7XG4gIC5zZWdtZW50LWJ1dHRvbi1vcHRpb24ge1xuICAgIG1pbi13aWR0aDogNjBweDtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzKSB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgZ2FwOiAycHg7XG4gIH1cblxuICAuc2VnbWVudC1idXR0b24taWNvbiB7XG4gICAgZm9udC1zaXplOiAwLjg3NWVtO1xuICB9XG59XG5cblxuLyogY29tcG9uZW50cy9UYWJCYXIvVGFiQmFyLmNzcyAqL1xuLm1vYmlsZS10YWJiYXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgLm1vYmlsZS10YWJiYXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMCAwLjVyZW07XG4gICAgei1pbmRleDogdmFyKC0tei1maXhlZCk7XG4gICAgYm94LXNoYWRvdzogMCAtMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcbiAgfVxuXG4gIC50YWJiYXItaXRlbSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZ2FwOiAwLjI1cmVtO1xuICAgIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnRhYmJhci1pdGVtOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC0xcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSBzY2FsZVgoMCk7XG4gICAgd2lkdGg6IDYwJTtcbiAgICBoZWlnaHQ6IDNweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1ob3Jpem9udGFsKTtcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgM3B4IDNweDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tdHJhbnNpdGlvbi1zbG93KTtcbiAgfVxuXG4gIC50YWJiYXItaXRlbS5hY3RpdmU6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHNjYWxlWCgxKTtcbiAgfVxuXG4gIC50YWJiYXItaWNvbiB7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xuICB9XG5cbiAgLnRhYmJhci1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIH1cblxuICAudGFiYmFyLWl0ZW0uYWN0aXZlIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIH1cblxuICAudGFiYmFyLWl0ZW0uYWN0aXZlIC50YWJiYXItaWNvbiB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICB9XG5cbiAgLnRhYmJhci1pdGVtOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTtcbiAgfVxuXG4gIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAubW9iaWxlLXRhYmJhciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE3LCAyNCwgMzksIDAuOTgpO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAgIH1cblxuICAgIC50YWJiYXItaXRlbSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICAgIH1cblxuICAgIC50YWJiYXItaXRlbS5hY3RpdmUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qIGNvbXBvbmVudHMvVGFicy9UYWJzLmNzcyAqL1xuLnRhYnMtY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi50YWJzLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc3BhY2luZy14cyk7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXhsKTtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi50YWJzLWhlYWRlcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICBoZWlnaHQ6IDRweDtcbn1cblxuLnRhYnMtaGVhZGVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xufVxuXG4udGFicy1pbmRpY2F0b3Ige1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLTJweDtcbiAgaGVpZ2h0OiAzcHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LWhvcml6b250YWwpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCkgdmFyKC0tcmFkaXVzLWZ1bGwpIDAgMDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbiAgei1pbmRleDogMTtcbn1cblxuLnRhYi1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNwYWNpbmctc20pO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1kKSB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjtcbn1cblxuLnRhYi1idXR0b246OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1iZy1zdWJ0bGUpO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCkgdmFyKC0tcmFkaXVzLW1kKSAwIDA7XG59XG5cbi50YWItYnV0dG9uOmhvdmVyOjpiZWZvcmUge1xuICBvcGFjaXR5OiAxO1xufVxuXG4udGFiLWJ1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xufVxuXG4udGFiLWJ1dHRvbjpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBvdXRsaW5lLW9mZnNldDogMnB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xufVxuXG4udGFiLWJ1dHRvbi5hY3RpdmUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi50YWItaWNvbiB7XG4gIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4udGFiLWxhYmVsIHtcbiAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbi50YWJzLWNvbnRlbnQge1xuICBhbmltYXRpb246IHRhYkZhZGVJbiAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG59XG5cbkBrZXlmcmFtZXMgdGFiRmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cblxuLyogTW9iaWxlIHJlc3BvbnNpdmUgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAudGFiLWJ1dHRvbiB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbSkgdmFyKC0tc3BhY2luZy1tZCk7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxuXG4gIC50YWItaWNvbiB7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICB9XG5cbiAgLnRhYnMtaGVhZGVyIHtcbiAgICBnYXA6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sZyk7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gIC50YWItbGFiZWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAudGFiLWJ1dHRvbiB7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLXdpZHRoOiA0OHB4O1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pO1xuICB9XG5cbiAgLnRhYi1pY29uIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cblxuXG4vKiBjb21wb25lbnRzL1RvYXN0L1RvYXN0LmNzcyAqL1xuLyoqXG4gKiBUb2FzdDogTm90aWZpY2F0aW9uIGNvbXBvbmVudCB3aXRoIHZhcmlhbnRzXG4gKiBTdXBwb3J0cyBzdWNjZXNzLCBlcnJvciwgaW5mbywgYW5kIHdhcm5pbmcgc3R5bGVzXG4gKi9cblxuLnRvYXN0LWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiA1cmVtO1xuICByaWdodDogMXJlbTtcbiAgei1pbmRleDogdmFyKC0tei10b29sdGlwKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi50b2FzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpIHZhcigtLXNwYWNpbmctbGcpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbiAgbWluLXdpZHRoOiAzMDBweDtcbiAgbWF4LXdpZHRoOiA0MDBweDtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIGFuaW1hdGlvbjogdG9hc3RTbGlkZUluIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG59XG5cbi50b2FzdC1leGl0aW5nIHtcbiAgYW5pbWF0aW9uOiB0b2FzdFNsaWRlT3V0IHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG59XG5cbi50b2FzdC1pY29uIHtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi50b2FzdC1jb250ZW50IHtcbiAgZmxleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXhzKTtcbn1cblxuLnRvYXN0LXRpdGxlIHtcbiAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICBtYXJnaW46IDA7XG59XG5cbi50b2FzdC1tZXNzYWdlIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgbWFyZ2luOiAwO1xufVxuXG4udG9hc3QtY2xvc2Uge1xuICBmbGV4LXNocmluazogMDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAwO1xuICB3aWR0aDogMS41cmVtO1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWZhc3QpO1xufVxuXG4udG9hc3QtY2xvc2U6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnRvYXN0LWNsb3NlOmZvY3VzLXZpc2libGUge1xuICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi8qIFZhcmlhbnRzICovXG4udG9hc3Qtc3VjY2VzcyB7XG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzEwYjk4MTtcbn1cblxuLnRvYXN0LXN1Y2Nlc3MgLnRvYXN0LWljb24ge1xuICBjb2xvcjogIzEwYjk4MTtcbn1cblxuLnRvYXN0LWVycm9yIHtcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjZWY0NDQ0O1xufVxuXG4udG9hc3QtZXJyb3IgLnRvYXN0LWljb24ge1xuICBjb2xvcjogI2VmNDQ0NDtcbn1cblxuLnRvYXN0LXdhcm5pbmcge1xuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XG59XG5cbi50b2FzdC13YXJuaW5nIC50b2FzdC1pY29uIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XG59XG5cbi50b2FzdC1pbmZvIHtcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cblxuLnRvYXN0LWluZm8gLnRvYXN0LWljb24ge1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG59XG5cbi8qIEFuaW1hdGlvbnMgKi9cbkBrZXlmcmFtZXMgdG9hc3RTbGlkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdG9hc3RTbGlkZU91dCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgfVxufVxuXG4vKiBNb2JpbGUgYWRqdXN0bWVudHMgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2MzlweCkge1xuICAudG9hc3QtY29udGFpbmVyIHtcbiAgICB0b3A6IDQuNXJlbTtcbiAgICByaWdodDogMC41cmVtO1xuICAgIGxlZnQ6IDAuNXJlbTtcbiAgfVxuXG4gIC50b2FzdCB7XG4gICAgbWluLXdpZHRoOiB1bnNldDtcbiAgICBtYXgtd2lkdGg6IHVuc2V0O1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi8qIERhcmsgbW9kZSBhZGp1c3RtZW50cyAqL1xuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAudG9hc3QtY2xvc2U6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgfVxufVxuXG4vKiBSZWR1Y2VkIG1vdGlvbiAqL1xuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgLnRvYXN0LFxuICAudG9hc3QtZXhpdGluZyB7XG4gICAgYW5pbWF0aW9uOiBub25lO1xuICB9XG59XG5cblxuLyogY29tcG9uZW50cy9XaWRnZXRDYXJvdXNlbC9XaWRnZXRDYXJvdXNlbC5jc3MgKi9cbi53aWRnZXQtY2Fyb3VzZWwtc2VjdGlvbiB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctM3hsKSB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uY2Fyb3VzZWwtaGVhZGVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLTJ4bCk7XG59XG5cbi5jYXJvdXNlbC10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xufVxuXG4uY2Fyb3VzZWwtc3VidGl0bGUge1xuICBmb250LXNpemU6IDEuMTI1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4uc2VhcmNoLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctMnhsKTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc2VhcmNoLWlucHV0LXdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogMjUwcHg7XG59XG5cbi5zZWFyY2gtaWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uc2VhcmNoLWlucHV0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpIHZhcigtLXNwYWNpbmctbWQpIHZhcigtLXNwYWNpbmctbWQpIDNyZW07XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbn1cblxuLnNlYXJjaC1pbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDIwLCAxODQsIDE2NiwgMC4xKTtcbn1cblxuLnZpZXctYWxsLWxpbmsge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZCkgdmFyKC0tc3BhY2luZy1sZyk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LXNpbXBsZSk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnZpZXctYWxsLWxpbms6aG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7XG59XG5cbi53aWRnZXRzLWNhcm91c2VsIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMzAwcHgsIDFmcikpO1xuICBnYXA6IHZhcigtLXNwYWNpbmcteGwpO1xufVxuXG4ud2lkZ2V0LWNhcmQtbGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBhbmltYXRpb246IGZhZGVJblVwIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBib3RoO1xufVxuXG4ud2lkZ2V0LWljb24tbGFyZ2Uge1xuICBmb250LXNpemU6IDNyZW07XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDgwcHg7XG4gIGhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgyMCwgMTg0LCAxNjYsIDAuMDgpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteGwpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbn1cblxuLndpZGdldC1jYXJkLWxpbms6aG92ZXIgLndpZGdldC1pY29uLWxhcmdlIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xufVxuXG4ud2lkZ2V0LWNhcmQtdGl0bGUge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXNtKTtcbn1cblxuLndpZGdldC1jYXJkLWRlc2NyaXB0aW9uIHtcbiAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xufVxuXG4ud2lkZ2V0LXRhZ3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7XG59XG5cbi53aWRnZXQtdGFnIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwLjI1cmVtIDAuNjI1cmVtO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDIwLCAxODQsIDE2NiwgMC4wOCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xufVxuXG4ubm8tcmVzdWx0cyB7XG4gIGdyaWQtY29sdW1uOiAxIC8gLTE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy0zeGwpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG5Aa2V5ZnJhbWVzIGZhZGVJblVwIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAud2lkZ2V0cy1jYXJvdXNlbCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gIH1cblxuICAuc2VhcmNoLWNvbnRhaW5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgfVxuXG4gIC52aWV3LWFsbC1saW5rIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gIC5zZWFyY2gtaW5wdXQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICB9XG59XG5cblxuLyogcGFnZXMvQWJvdXRQYWdlL0Fib3V0UGFnZS5jc3MgKi9cbi5hYm91dC1wYWdlIHtcbiAgbWluLWhlaWdodDogY2FsYygxMDBkdmggLSA4MHB4KTtcbiAgcGFkZGluZzogNHJlbSAxLjVyZW07XG4gIG1heC13aWR0aDogMTIwMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cblxuLyogSGVybyBTZWN0aW9uICovXG4uaGVyby1zZWN0aW9uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwYWRkaW5nOiAzcmVtIDA7XG4gIGFuaW1hdGlvbjogZmFkZUluRG93biAwLjhzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG59XG5cbi5oZXJvLWNvbnRlbnQge1xuICBtYXgtd2lkdGg6IDgwMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cblxuLmhlcm8tYXZhdGFyIHtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy14bCk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uYXZhdGFyLWZyYW1lLXdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxNjBweDtcbiAgaGVpZ2h0OiAxNjBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5hdmF0YXItaW1hZ2Uge1xuICB3aWR0aDogMTIwcHg7XG4gIGhlaWdodDogMTIwcHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbn1cblxuLmF2YXRhci1mcmFtZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTYwcHg7XG4gIGhlaWdodDogMTYwcHg7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAyO1xufVxuXG4uaGVyby10aXRsZSB7XG4gIGZvbnQtc2l6ZTogM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbSk7XG59XG5cbi5oZXJvLXRhZ2xpbmUge1xuICBmb250LXNpemU6IDEuMzc1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXhsKTtcbn1cblxuLmhlcm8tZGVzY3JpcHRpb24ge1xuICBmb250LXNpemU6IDEuMTI1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBsaW5lLWhlaWdodDogMS43O1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLTJ4bCk7XG4gIG1heC13aWR0aDogNzAwcHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG5cbi5oZXJvLWxpbmtzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLyogTWlzc2lvbiBTZWN0aW9uICovXG4ubWlzc2lvbi1zZWN0aW9uIHtcbiAgbWFyZ2luLWJvdHRvbTogNXJlbTtcbiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjhzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgMC4ycyBib3RoO1xufVxuXG4ubWlzc2lvbi1jb250ZW50IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ubWlzc2lvbi1pY29uIHtcbiAgZm9udC1zaXplOiAzcmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sZyk7XG4gIGFuaW1hdGlvbjogcHVsc2UgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbi5taXNzaW9uLXRpdGxlIHtcbiAgZm9udC1zaXplOiAycmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sZyk7XG59XG5cbi5taXNzaW9uLXRleHQge1xuICBmb250LXNpemU6IDEuMDYyNXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgbGluZS1oZWlnaHQ6IDEuODtcbiAgbWF4LXdpZHRoOiA4MDBweDtcbiAgbWFyZ2luOiAwIGF1dG8gdmFyKC0tc3BhY2luZy14bCk7XG59XG5cbi5wcml2YWN5LWJhZGdlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjA4KTtcbiAgYm9yZGVyOiAycHggc29saWQgcmdiYSgyMCwgMTg0LCAxNjYsIDAuMik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gIG1heC13aWR0aDogODAwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4ucHJpdmFjeS1iYWRnZS1pY29uIHtcbiAgZm9udC1zaXplOiAycmVtO1xuICBmbGV4LXNocmluazogMDtcbn1cblxuLnByaXZhY3ktYmFkZ2UtY29udGVudCB7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBsaW5lLWhlaWdodDogMS42O1xufVxuXG4ucHJpdmFjeS1iYWRnZS1jb250ZW50IHN0cm9uZyB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLyogU3RhdHMgU2VjdGlvbiAqL1xuLnN0YXRzLXNlY3Rpb24ge1xuICBtYXJnaW4tYm90dG9tOiA1cmVtO1xuICBhbmltYXRpb246IGZhZGVJblVwIDAuOHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAwLjNzIGJvdGg7XG59XG5cbi5zdGF0cy1ncmlkIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMDBweCwgMWZyKSk7XG4gIGdhcDogdmFyKC0tc3BhY2luZy14bCk7XG59XG5cbi5zdGF0LWNhcmQge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xufVxuXG4uc3RhdC1jYXJkOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC04cHgpO1xuICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cteGwpO1xufVxuXG4uc3RhdC1pY29uIHtcbiAgZm9udC1zaXplOiAyLjVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xufVxuXG4uc3RhdC1jYXJkOmhvdmVyIC5zdGF0LWljb24ge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7XG59XG5cbi5zdGF0LXZhbHVlIHtcbiAgZm9udC1zaXplOiAyLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LXByaW1hcnkpO1xuICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmcteHMpO1xufVxuXG4uc3RhdC1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xufVxuXG4vKiBFeHBlcnRpc2UgU2VjdGlvbiAqL1xuLmV4cGVydGlzZS1zZWN0aW9uIHtcbiAgbWFyZ2luLWJvdHRvbTogNXJlbTtcbiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjhzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgMC40cyBib3RoO1xufVxuXG4uc2VjdGlvbi10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMi4yNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1wcmltYXJ5KTtcbiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XG4gIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLTJ4bCk7XG59XG5cbi5leHBlcnRpc2UtZ3JpZCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjgwcHgsIDFmcikpO1xuICBnYXA6IHZhcigtLXNwYWNpbmcteGwpO1xufVxuXG4uZXhwZXJ0aXNlLWNhcmQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmV4cGVydGlzZS1pY29uIHtcbiAgZm9udC1zaXplOiAyLjVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sZyk7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xufVxuXG4uZXhwZXJ0aXNlLWNhcmQ6aG92ZXIgLmV4cGVydGlzZS1pY29uIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpIHJvdGF0ZSg1ZGVnKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XG59XG5cbi5leHBlcnRpc2UtdGl0bGUge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLmV4cGVydGlzZS1kZXNjcmlwdGlvbiB7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBsaW5lLWhlaWdodDogMS43O1xufVxuXG4vKiBUaW1lbGluZSBTZWN0aW9uICovXG4udGltZWxpbmUtc2VjdGlvbiB7XG4gIGFuaW1hdGlvbjogZmFkZUluVXAgMC44cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIDAuNXMgYm90aDtcbn1cblxuLnRpbWVsaW5lLXBhZ2Uge1xuICBtaW4taGVpZ2h0OiBjYWxjKDEwMGR2aCAtIDgwcHgpO1xuICBwYWRkaW5nOiA2cmVtIDEuNXJlbSA0cmVtO1xuICBtYXgtd2lkdGg6IDkwMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cblxuLnRpbWVsaW5lLWhlYWRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogNHJlbTtcbn1cblxuLnRpbWVsaW5lLXBhZ2UtdGl0bGUge1xuICBmb250LXNpemU6IDIuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZCk7XG59XG5cbi50aW1lbGluZS1wYWdlLXN1YnRpdGxlIHtcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgbWF4LXdpZHRoOiA3MDBweDtcbiAgbWFyZ2luOiAwIGF1dG8gdmFyKC0tc3BhY2luZy0yeGwpO1xuICBsaW5lLWhlaWdodDogMS42O1xufVxuXG4udGltZWxpbmUtZmlsdGVycyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogdmFyKC0tc3BhY2luZy14bCk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctMnhsKTtcbiAgbWF4LXdpZHRoOiAxMDAwcHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG5cbi5maWx0ZXItc2VjdGlvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG59XG5cbi5maWx0ZXItc2VjdGlvbi1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG59XG5cbi5maWx0ZXItc2VjdGlvbi10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gIG1hcmdpbjogMDtcbn1cblxuLmZpbHRlci1idXR0b25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLnRhZy1maWx0ZXJzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXhzKTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnRpbWVsaW5lLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy1sZWZ0OiAxNHJlbTtcbn1cblxuLnRpbWVsaW5lLWxpbmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDExcmVtO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDNweDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtdmVydGljYWwpO1xuICBvcGFjaXR5OiAwLjU7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbn1cblxuLnRpbWVsaW5lLWl0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctM3hsKTtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMwcHgpO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1zbG93ZXIpO1xufVxuXG4udGltZWxpbmUtaXRlbS52aXNpYmxlIHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuXG4udGltZWxpbmUtZGF0ZS1hbmNob3Ige1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC0xMy41cmVtO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMHJlbTtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjBweCk7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLXNsb3dlcik7XG59XG5cbi50aW1lbGluZS1pdGVtLnZpc2libGUgLnRpbWVsaW5lLWRhdGUtYW5jaG9yIHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xufVxuXG4uZGF0ZS1hbmNob3ItY29udGVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgZ2FwOiAwLjI1cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5cbi5kYXRlLXByaW1hcnksXG4uZGF0ZS1zZWNvbmRhcnksXG4uZGF0ZS1jdXJyZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xufVxuXG4uZGF0ZS1tb250aCB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG59XG5cbi5kYXRlLXllYXIge1xuICBmb250LXNpemU6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG59XG5cbi50aW1lbGluZS1pdGVtOmhvdmVyIC5kYXRlLXllYXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4yKTtcbn1cblxuLmRhdGUtc2VwYXJhdG9yIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBtYXJnaW46IDAuMTI1cmVtIDA7XG4gIG9wYWNpdHk6IDAuNjtcbn1cblxuLmRhdGUtZHVyYXRpb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjM3NXJlbTtcbiAgcGFkZGluZzogMC4yNXJlbSAwLjYyNXJlbTtcbiAgYmFja2dyb3VuZDogcmdiYSgyMCwgMTg0LCAxNjYsIDAuMSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjAsIDE4NCwgMTY2LCAwLjIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG59XG5cbi5kYXRlLWR1cmF0aW9uIHN2ZyB7XG4gIGZvbnQtc2l6ZTogMC42MjVyZW07XG59XG5cbi50aW1lbGluZS1pdGVtLmN1cnJlbnQgLmRhdGUtZHVyYXRpb24ge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDIwLCAxODQsIDE2NiwgMC4yKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYW5pbWF0aW9uOiBwdWxzZSAycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlO1xufVxuXG4udGltZWxpbmUtaXRlbS5jdXJyZW50IC5kYXRlLWFuY2hvci1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udGltZWxpbmUtaXRlbS5jdXJyZW50IC5kYXRlLWFuY2hvci1jb250ZW50OjpiZWZvcmUge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0wLjVyZW07XG4gIHJpZ2h0OiAtMC41cmVtO1xuICBib3R0b206IC0wLjVyZW07XG4gIGxlZnQ6IC0wLjVyZW07XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIFxuICAgIHJnYmEoMjAsIDE4NCwgMTY2LCAwLjE1KSwgXG4gICAgcmdiYSgxMzksIDkyLCAyNDYsIDAuMTUpKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgei1pbmRleDogLTE7XG4gIGFuaW1hdGlvbjogY3VycmVudEdsb3cgM3MgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgY3VycmVudEdsb3cge1xuICAwJSwgMTAwJSB7XG4gICAgb3BhY2l0eTogMC41O1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwLjg7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTtcbiAgfVxufVxuXG4udGltZWxpbmUtbWFya2VyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtMi43NXJlbTtcbiAgdG9wOiAxcmVtO1xuICB6LWluZGV4OiAyO1xufVxuXG4udGltZWxpbmUtaWNvbiB7XG4gIHdpZHRoOiAzcmVtO1xuICBoZWlnaHQ6IDNyZW07XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgYm94LXNoYWRvdzpcbiAgICAwIDAgMCA0cHggdmFyKC0tY29sb3ItYmFja2dyb3VuZCksXG4gICAgMCAwIDAgNnB4IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjIpO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1zbG93KTtcbn1cblxuLnRpbWVsaW5lLWl0ZW0udmlzaWJsZSAudGltZWxpbmUtaWNvbiB7XG4gIGFuaW1hdGlvbjogaWNvblB1bHNlIDJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGU7XG59XG5cbi50aW1lbGluZS1pdGVtLmN1cnJlbnQgLnRpbWVsaW5lLWljb24ge1xuICBib3gtc2hhZG93OlxuICAgIDAgMCAwIDRweCB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKSxcbiAgICAwIDAgMCA2cHggdmFyKC0tY29sb3ItcHJpbWFyeSksXG4gICAgMCAwIDIwcHggdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGFuaW1hdGlvbjogY3VycmVudFB1bHNlIDJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGU7XG59XG5cbi50aW1lbGluZS1jYXJkIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi50aW1lbGluZS1jYXJkLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1sZyk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbGcpO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cblxuLnRpbWVsaW5lLWxvZ28td3JhcHBlciB7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4udGltZWxpbmUtbG9nbyB7XG4gIHdpZHRoOiA2NHB4O1xuICBoZWlnaHQ6IDY0cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtKTtcbn1cblxuLnRpbWVsaW5lLWxvZ28tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogNjRweDtcbiAgaGVpZ2h0OiA2NHB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1zaW1wbGUpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBjb2xvcjogd2hpdGU7XG59XG5cbi50aW1lbGluZS1oZWFkZXItY29udGVudCB7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLnRpbWVsaW5lLW1ldGEge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc20pO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4udGltZWxpbmUtbWV0YSBzcGFuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc3BhY2luZy14cyk7XG59XG5cbi50aW1lbGluZS1kYXRlIHtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4uY3VycmVudC1iYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMC4xMjVyZW0gMC41cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1zaW1wbGUpO1xuICBjb2xvcjogd2hpdGU7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmctc20pO1xuICBhbmltYXRpb246IHB1bHNlIDJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGU7XG59XG5cbi50aW1lbGluZS1sb2NhdGlvbiB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG59XG5cbi50aW1lbGluZS10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMS4zNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXNtKTtcbn1cblxuLnRpbWVsaW5lLWNvbXBhbnkge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xufVxuXG4udGltZWxpbmUtZGVzY3JpcHRpb24ge1xuICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgbGluZS1oZWlnaHQ6IDEuNztcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sZyk7XG59XG5cbi50aW1lbGluZS1hY2hpZXZlbWVudHMge1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLWxnKTtcbn1cblxuLmFjaGlldmVtZW50cy1saXN0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5hY2hpZXZlbWVudC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNpbmctbGcpO1xuICBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2luZy1zbSk7XG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG59XG5cbi5hY2hpZXZlbWVudC1pdGVtOjpiZWZvcmUge1xuICBjb250ZW50OiAn4pa4JztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi50aW1lbGluZS10YWdzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6IDAuNXJlbTtcbn1cblxuLnRpbWVsaW5lLXRhZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcbiAgYmFja2dyb3VuZDogcmdiYSgyMCwgMTg0LCAxNjYsIDAuMDgpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbn1cblxuLnRpbWVsaW5lLXRhZzpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjE1KTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG4vKiBBbmltYXRpb25zICovXG5Aa2V5ZnJhbWVzIGZhZGVJbkRvd24ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluVXAge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBpY29uUHVsc2Uge1xuICAwJSxcbiAgMTAwJSB7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgMCAwIDRweCB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKSxcbiAgICAgIDAgMCAwIDZweCByZ2JhKDIwLCAxODQsIDE2NiwgMC4yKTtcbiAgfVxuICA1MCUge1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAwIDAgMCA0cHggdmFyKC0tY29sb3ItYmFja2dyb3VuZCksXG4gICAgICAwIDAgMCA4cHggcmdiYSgyMCwgMTg0LCAxNjYsIDAuNCk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBjdXJyZW50UHVsc2Uge1xuICAwJSxcbiAgMTAwJSB7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgMCAwIDRweCB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKSxcbiAgICAgIDAgMCAwIDZweCB2YXIoLS1jb2xvci1wcmltYXJ5KSxcbiAgICAgIDAgMCAyMHB4IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICB9XG4gIDUwJSB7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgMCAwIDRweCB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKSxcbiAgICAgIDAgMCAwIDhweCB2YXIoLS1jb2xvci1wcmltYXJ5KSxcbiAgICAgIDAgMCAzMHB4IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgcHVsc2Uge1xuICAwJSxcbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG4vKiBSZXNwb25zaXZlIERlc2lnbiAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5hYm91dC1wYWdlIHtcbiAgICBwYWRkaW5nOiAzcmVtIDFyZW07XG4gIH1cblxuICAuaGVyby1zZWN0aW9uIHtcbiAgICBwYWRkaW5nOiAycmVtIDA7XG4gIH1cblxuICAuaGVyby10aXRsZSB7XG4gICAgZm9udC1zaXplOiAycmVtO1xuICB9XG5cbiAgLmhlcm8tdGFnbGluZSB7XG4gICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgfVxuXG4gIC5oZXJvLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gIH1cblxuICAuYXZhdGFyLWZyYW1lLXdyYXBwZXIge1xuICAgIHdpZHRoOiAxMzBweDtcbiAgICBoZWlnaHQ6IDEzMHB4O1xuICB9XG5cbiAgLmF2YXRhci1pbWFnZSB7XG4gICAgd2lkdGg6IDEwMHB4O1xuICAgIGhlaWdodDogMTAwcHg7XG4gIH1cblxuICAuYXZhdGFyLWZyYW1lIHtcbiAgICB3aWR0aDogMTMwcHg7XG4gICAgaGVpZ2h0OiAxMzBweDtcbiAgfVxuXG4gIC5zdGF0cy1ncmlkIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE1MHB4LCAxZnIpKTtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctbWQpO1xuICB9XG5cbiAgLnN0YXQtdmFsdWUge1xuICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgfVxuXG4gIC5leHBlcnRpc2UtZ3JpZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgZ2FwOiB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgfVxuXG4gIC5zZWN0aW9uLXRpdGxlIHtcbiAgICBmb250LXNpemU6IDEuNzVyZW07XG4gIH1cblxuICAubWlzc2lvbi10aXRsZSB7XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG4gIH1cblxuICAudGltZWxpbmUtY29udGFpbmVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy10b3A6IDNyZW07XG4gIH1cblxuICAudGltZWxpbmUtbGluZSB7XG4gICAgbGVmdDogMS4yNXJlbTtcbiAgfVxuXG4gIC50aW1lbGluZS1kYXRlLWFuY2hvciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAtM3JlbTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAzLjVyZW07XG4gIH1cblxuICAuZGF0ZS1hbmNob3ItY29udGVudCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMC41cmVtO1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgfVxuXG4gIC5kYXRlLXByaW1hcnksXG4gIC5kYXRlLXNlY29uZGFyeSxcbiAgLmRhdGUtY3VycmVudCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZ2FwOiAwLjI1cmVtO1xuICB9XG5cbiAgLmRhdGUtbW9udGgge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgfVxuXG4gIC5kYXRlLXllYXIge1xuICAgIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gIH1cblxuICAuZGF0ZS1zZXBhcmF0b3Ige1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgbWFyZ2luOiAwIDAuMjVyZW07XG4gIH1cblxuICAuZGF0ZS1kdXJhdGlvbiB7XG4gICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgcGFkZGluZzogMC4xODc1cmVtIDAuNXJlbTtcbiAgfVxuXG4gIC50aW1lbGluZS1tYXJrZXIge1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAtMi41cmVtO1xuICB9XG5cbiAgLnRpbWVsaW5lLWljb24ge1xuICAgIHdpZHRoOiAyLjVyZW07XG4gICAgaGVpZ2h0OiAyLjVyZW07XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICB9XG5cbiAgLnRpbWVsaW5lLWNhcmQtaGVhZGVyIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIH1cblxuICAudGltZWxpbmUtbG9nbyxcbiAgLnRpbWVsaW5lLWxvZ28tcGxhY2Vob2xkZXIge1xuICAgIHdpZHRoOiA1NnB4O1xuICAgIGhlaWdodDogNTZweDtcbiAgfVxuXG4gIC50aW1lbGluZS1tZXRhIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy14cyk7XG4gIH1cblxuICAudGltZWxpbmUtcGFnZS10aXRsZSB7XG4gICAgZm9udC1zaXplOiAycmVtO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYWJvdXQtcGFnZSB7XG4gICAgcGFkZGluZzogNnJlbSAycmVtO1xuICB9XG5cbiAgLnRpbWVsaW5lLXNlY3Rpb24ge1xuICAgIG1heC13aWR0aDogMTEwMHB4O1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgfVxuXG4gIC50aW1lbGluZS1jb250YWluZXIge1xuICAgIHBhZGRpbmctbGVmdDogMTZyZW07XG4gIH1cblxuICAudGltZWxpbmUtbGluZSB7XG4gICAgbGVmdDogMTIuNXJlbTtcbiAgfVxuXG4gIC50aW1lbGluZS1kYXRlLWFuY2hvciB7XG4gICAgbGVmdDogLTE1cmVtO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTFyZW07XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgcGFkZGluZy1yaWdodDogMS41cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgfVxuXG4gIC5kYXRlLWFuY2hvci1jb250ZW50IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBnYXA6IDAuMjVyZW07XG4gIH1cblxuICAuZGF0ZS1wcmltYXJ5LFxuICAuZGF0ZS1zZWNvbmRhcnksXG4gIC5kYXRlLWN1cnJlbnQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIGdhcDogMDtcbiAgfVxuXG4gIC5kYXRlLW1vbnRoIHtcbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICB9XG5cbiAgLmRhdGUteWVhciB7XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG4gIH1cblxuICAuZGF0ZS1zZXBhcmF0b3Ige1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBtYXJnaW46IDAuMTI1cmVtIDA7XG4gIH1cblxuICAuZGF0ZS1kdXJhdGlvbiB7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIHBhZGRpbmc6IDAuMjVyZW0gMC42MjVyZW07XG4gIH1cblxuICAudGltZWxpbmUtbWFya2VyIHtcbiAgICBsZWZ0OiAtM3JlbTtcbiAgICB0b3A6IDFyZW07XG4gIH1cblxuICAudGltZWxpbmUtaWNvbiB7XG4gICAgd2lkdGg6IDNyZW07XG4gICAgaGVpZ2h0OiAzcmVtO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gIC50aW1lbGluZS1pY29uIHtcbiAgICBib3gtc2hhZG93OlxuICAgICAgMCAwIDAgNHB4IHZhcigtLWNvbG9yLXN1cmZhY2UpLFxuICAgICAgMCAwIDAgNnB4IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjMpO1xuICB9XG5cbiAgLnRpbWVsaW5lLWl0ZW0uY3VycmVudCAudGltZWxpbmUtaWNvbiB7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgMCAwIDRweCB2YXIoLS1jb2xvci1zdXJmYWNlKSxcbiAgICAgIDAgMCAwIDZweCB2YXIoLS1jb2xvci1wcmltYXJ5KSxcbiAgICAgIDAgMCAyMHB4IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICB9XG5cbiAgLnRpbWVsaW5lLWxvZ28ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xuICB9XG59XG5cblxuLyogcGFnZXMvTWFpblBhZ2UvTWFpblBhZ2UuY3NzICovXG4ubWFpbi1wYWdlIHtcbiAgbWluLWhlaWdodDogY2FsYygxMDBkdmggLSA4MHB4KTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uYW5pbWF0ZWQtYmFja2dyb3VuZCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDBkdmg7XG4gIHotaW5kZXg6IC0yO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZ3JhZGllbnQtbWVzaCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDA7XG4gIGJhY2tncm91bmQ6XG4gICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyMCUgNTAlLCByZ2JhKDIwLCAxODQsIDE2NiwgMC4xNSkgMCUsIHRyYW5zcGFyZW50IDUwJSksXG4gICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgODAlLCByZ2JhKDI0NSwgMTU4LCAxMSwgMC4xNSkgMCUsIHRyYW5zcGFyZW50IDUwJSksXG4gICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA2MCUgMjAlLCByZ2JhKDIzNiwgNzIsIDE1MywgMC4xNSkgMCUsIHRyYW5zcGFyZW50IDUwJSk7XG4gIGFuaW1hdGlvbjogZ3JhZGllbnRTaGlmdCAxNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbi5ncmFkaWVudC1vcmJzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbn1cblxuLm9yYiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBmaWx0ZXI6IGJsdXIoODBweCk7XG4gIG9wYWNpdHk6IDAuNDtcbiAgYW5pbWF0aW9uOiBmbG9hdC1vcmIgMjBzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuXG4ub3JiLTEge1xuICB3aWR0aDogNTAwcHg7XG4gIGhlaWdodDogNTAwcHg7XG4gIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHJnYmEoMjAsIDE4NCwgMTY2LCAwLjUpIDAlLCB0cmFuc3BhcmVudCA3MCUpO1xuICB0b3A6IC0yMDBweDtcbiAgbGVmdDogLTIwMHB4O1xuICBhbmltYXRpb24tZGVsYXk6IDBzO1xuICBhbmltYXRpb24tZHVyYXRpb246IDI1cztcbn1cblxuLm9yYi0yIHtcbiAgd2lkdGg6IDQwMHB4O1xuICBoZWlnaHQ6IDQwMHB4O1xuICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCByZ2JhKDI0NSwgMTU4LCAxMSwgMC41KSAwJSwgdHJhbnNwYXJlbnQgNzAlKTtcbiAgdG9wOiA0MCU7XG4gIHJpZ2h0OiAtMTUwcHg7XG4gIGFuaW1hdGlvbi1kZWxheTogLTVzO1xuICBhbmltYXRpb24tZHVyYXRpb246IDMwcztcbn1cblxuLm9yYi0zIHtcbiAgd2lkdGg6IDM1MHB4O1xuICBoZWlnaHQ6IDM1MHB4O1xuICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCByZ2JhKDIzNiwgNzIsIDE1MywgMC41KSAwJSwgdHJhbnNwYXJlbnQgNzAlKTtcbiAgYm90dG9tOiAtMTAwcHg7XG4gIGxlZnQ6IDMwJTtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMTBzO1xuICBhbmltYXRpb24tZHVyYXRpb246IDI4cztcbn1cblxuLm9yYi00IHtcbiAgd2lkdGg6IDQ1MHB4O1xuICBoZWlnaHQ6IDQ1MHB4O1xuICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCByZ2JhKDEzOSwgOTIsIDI0NiwgMC40KSAwJSwgdHJhbnNwYXJlbnQgNzAlKTtcbiAgdG9wOiA2MCU7XG4gIGxlZnQ6IDUwJTtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMTVzO1xuICBhbmltYXRpb24tZHVyYXRpb246IDM1cztcbn1cblxuLm5vaXNlLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZpZXdCb3g9JzAgMCA0MDAgNDAwJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZmlsdGVyIGlkPSdub2lzZUZpbHRlciclM0UlM0NmZVR1cmJ1bGVuY2UgdHlwZT0nZnJhY3RhbE5vaXNlJyBiYXNlRnJlcXVlbmN5PScwLjknIG51bU9jdGF2ZXM9JzQnIHN0aXRjaFRpbGVzPSdzdGl0Y2gnLyUzRSUzQy9maWx0ZXIlM0UlM0NyZWN0IHdpZHRoPScxMDAlMjUnIGhlaWdodD0nMTAwJTI1JyBmaWx0ZXI9J3VybCglMjNub2lzZUZpbHRlciknIG9wYWNpdHk9JzAuMDMnLyUzRSUzQy9zdmclM0VcIik7XG4gIG9wYWNpdHk6IDAuNTtcbiAgbWl4LWJsZW5kLW1vZGU6IG92ZXJsYXk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uaGVyby1zZWN0aW9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiBjYWxjKDEwMGR2aCAtIDgwcHgpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMnJlbSAxLjVyZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpO1xuICB0cmFuc2l0aW9uOiBiYWNrZHJvcC1maWx0ZXIgMC4zcyBlYXNlO1xufVxuXG4uaGVyby1jb250ZW50IHtcbiAgbWF4LXdpZHRoOiA3MDBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDEwO1xuICBhbmltYXRpb246IGZhZGVJblVwIDFzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG59XG5cbi5oZXJvLWJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pIHZhcigtLXNwYWNpbmctbWQpO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDIwLCAxODQsIDE2NiwgMC4xNSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgYW5pbWF0aW9uOiBzY2FsZUluIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAwLjJzIGJvdGg7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgyMCwgMTg0LCAxNjYsIDAuMTUpO1xufVxuXG4uaGVyby1iYWRnZSBzcGFuOmZpcnN0LWNoaWxkIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBhbmltYXRpb246IHdhdmUgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbi5oZXJvLXRpdGxlIHtcbiAgZm9udC1zaXplOiAyLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA4MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjhzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgMC4zcyBib3RoO1xuICB0ZXh0LXNoYWRvdzpcbiAgICAwIDJweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSxcbiAgICAwIDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG59XG5cbi5oZXJvLW5hbWUge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1wcmltYXJ5KTtcbiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XG4gIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xufVxuXG4uaGVyby1zdWJ0aXRsZSB7XG4gIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjc7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xuICBhbmltYXRpb246IGZhZGVJblVwIDAuOHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAwLjRzIGJvdGg7XG4gIHRleHQtc2hhZG93OlxuICAgIDAgMnB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjE1KSxcbiAgICAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4uaGVyby1hY3Rpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6IDFyZW07XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbmltYXRpb246IGZhZGVJblVwIDAuOHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAwLjVzIGJvdGg7XG59XG5cbi5oZXJvLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNwYWNpbmctc20pO1xuICBwYWRkaW5nOiAwLjg3NXJlbSAxLjc1cmVtO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6IDFyZW07XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tc2xvdyk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG59XG5cbi5oZXJvLWJ1dHRvbi5wcmltYXJ5IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtc2ltcGxlKTtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4uaGVyby1idXR0b24ucHJpbWFyeTpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgYm94LXNoYWRvdzogMCA4cHggMjBweCB2YXIoLS1zaGFkb3ctcHJpbWFyeS1sZyk7XG59XG5cbi5oZXJvLWJ1dHRvbi5wcmltYXJ5OmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLmhlcm8tYnV0dG9uLnNlY29uZGFyeSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4uaGVyby1idXR0b24uc2Vjb25kYXJ5OmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtc2ltcGxlKTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5oZXJvLWRlY29yYXRpb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRlY29yYXRpb24tY2lyY2xlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcbiAgICAxMzVkZWcsXG4gICAgcmdiYSgyMCwgMTg0LCAxNjYsIDAuMDgpIDAlLFxuICAgIHJnYmEoMjQ1LCAxNTgsIDExLCAwLjA4KSA1MCUsXG4gICAgcmdiYSgyMzYsIDcyLCAxNTMsIDAuMDgpIDEwMCVcbiAgKTtcbiAgYW5pbWF0aW9uOiBmbG9hdCAyMHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpO1xufVxuXG4uY2lyY2xlLTEge1xuICB3aWR0aDogNDAwcHg7XG4gIGhlaWdodDogNDAwcHg7XG4gIHRvcDogLTIwMHB4O1xuICByaWdodDogLTIwMHB4O1xuICBhbmltYXRpb24tZGVsYXk6IDBzO1xufVxuXG4uY2lyY2xlLTIge1xuICB3aWR0aDogMzAwcHg7XG4gIGhlaWdodDogMzAwcHg7XG4gIGJvdHRvbTogLTE1MHB4O1xuICBsZWZ0OiAtMTUwcHg7XG4gIGFuaW1hdGlvbi1kZWxheTogLTdzO1xufVxuXG4uY2lyY2xlLTMge1xuICB3aWR0aDogMjAwcHg7XG4gIGhlaWdodDogMjAwcHg7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBhbmltYXRpb24tZGVsYXk6IC0xNHM7XG59XG5cbi5mbG9hdGluZy1zaGFwZXMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xufVxuXG4uc2hhcGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG9wYWNpdHk6IDAuMTtcbiAgYW5pbWF0aW9uOiBmbG9hdC1zaGFwZXMgMjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuXG4uc2hhcGUtMSB7XG4gIHdpZHRoOiAxMDBweDtcbiAgaGVpZ2h0OiAxMDBweDtcbiAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCk7XG4gIHRvcDogMTUlO1xuICBsZWZ0OiAxMCU7XG4gIGFuaW1hdGlvbi1kZWxheTogMHM7XG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbn1cblxuLnNoYXBlLTIge1xuICB3aWR0aDogODBweDtcbiAgaGVpZ2h0OiA4MHB4O1xuICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1jb2xvci1zZWNvbmRhcnkpO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHRvcDogNjAlO1xuICByaWdodDogMTUlO1xuICBhbmltYXRpb24tZGVsYXk6IC04cztcbn1cblxuLnNoYXBlLTMge1xuICB3aWR0aDogMTIwcHg7XG4gIGhlaWdodDogMTIwcHg7XG4gIGJvcmRlcjogM3B4IHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudCk7XG4gIHRvcDogNzUlO1xuICBsZWZ0OiAyNSU7XG4gIGFuaW1hdGlvbi1kZWxheTogLTE2cztcbiAgY2xpcC1wYXRoOiBwb2x5Z29uKDUwJSAwJSwgMTAwJSAxMDAlLCAwJSAxMDAlKTtcbn1cblxuLnNoYXBlLTQge1xuICB3aWR0aDogOTBweDtcbiAgaGVpZ2h0OiA5MHB4O1xuICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5LWxpZ2h0KTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgdG9wOiAzMCU7XG4gIHJpZ2h0OiAyNSU7XG4gIGFuaW1hdGlvbi1kZWxheTogLTEycztcbiAgdHJhbnNmb3JtOiByb3RhdGUoMzBkZWcpO1xufVxuXG4uc2Nyb2xsLWluZGljYXRvciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAzcmVtO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgei1pbmRleDogMjA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlO1xufVxuXG4uc2Nyb2xsLWxpbmUge1xuICB3aWR0aDogMnB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50LCB2YXIoLS1jb2xvci1wcmltYXJ5KSA1MCUsIHRyYW5zcGFyZW50KTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IHNjcm9sbC1ib3VuY2UgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbi5zY3JvbGwtbGluZTo6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMTBweDtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG4gIG9wYWNpdHk6IDAuNjtcbn1cblxuLnNjcm9sbC1saW5lOjphZnRlciB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLThweDtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgcm90YXRlKDQ1ZGVnKTtcbiAgd2lkdGg6IDEwcHg7XG4gIGhlaWdodDogMTBweDtcbiAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cblxuLndpZGdldHMtc2VjdGlvbiB7XG4gIHBhZGRpbmc6IDRyZW0gMS41cmVtO1xuICBtYXJnaW46IDAgYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgYm94LXNoYWRvdzogMCAtMTBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi53aWRnZXRzLXNlY3Rpb24tY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4ud2lkZ2V0cy1oZWFkZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDNyZW07XG4gIGFuaW1hdGlvbjogZmFkZUluVXAgMC44cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xufVxuXG4ud2lkZ2V0cy10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xuICB0ZXh0LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG5cbi53aWRnZXRzLXN1YnRpdGxlIHtcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG5cbi53aWRnZXRzLWdyaWQge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgZ2FwOiAycmVtO1xufVxuXG4ud2lkZ2V0LWNhcmQge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14bCk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLXNsb3dlcik7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzMHB4KTtcbn1cblxuLndpZGdldC1jYXJkLnZpc2libGUge1xuICBvcGFjaXR5OiAxO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi53aWRnZXQtY2FyZDpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXhsKTtcbn1cblxuLndpZGdldC1pY29uIHtcbiAgZm9udC1zaXplOiAyLjVyZW07XG59XG5cbi53aWRnZXQtdGl0bGUge1xuICBmb250LXNpemU6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XG4gIHRleHQtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLndpZGdldC1kZXNjcmlwdGlvbiB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW5VcCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHNjYWxlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgd2F2ZSB7XG4gIDAlLFxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMCUsXG4gIDMwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpO1xuICB9XG4gIDIwJSxcbiAgNDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOGRlZyk7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGZsb2F0IHtcbiAgMCUsXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApIHNjYWxlKDEpO1xuICB9XG4gIDMzJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMzBweCwgLTMwcHgpIHNjYWxlKDEuMSk7XG4gIH1cbiAgNjYlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjBweCwgMjBweCkgc2NhbGUoMC45KTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGZsb2F0LW9yYiB7XG4gIDAlLFxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKSBzY2FsZSgxKTtcbiAgfVxuICAyNSUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwcHgsIC01MHB4KSBzY2FsZSgxLjE1KTtcbiAgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0zMHB4LCAtMzBweCkgc2NhbGUoMC45NSk7XG4gIH1cbiAgNzUlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTBweCwgNTBweCkgc2NhbGUoMS4wNSk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmbG9hdC1zaGFwZXMge1xuICAwJSxcbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHJvdGF0ZSgwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjE7XG4gIH1cbiAgMjUlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTMwcHgpIHJvdGF0ZSg5MGRlZyk7XG4gICAgb3BhY2l0eTogMC4xNTtcbiAgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTBweCkgcm90YXRlKDE4MGRlZyk7XG4gICAgb3BhY2l0eTogMC4wODtcbiAgfVxuICA3NSUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMzBweCkgcm90YXRlKDI3MGRlZyk7XG4gICAgb3BhY2l0eTogMC4xMjtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGdyYWRpZW50U2hpZnQge1xuICAwJSxcbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMC44O1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHNjcm9sbC1ib3VuY2Uge1xuICAwJSxcbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuaGVyby10aXRsZSB7XG4gICAgZm9udC1zaXplOiAzLjVyZW07XG4gIH1cblxuICAud2lkZ2V0cy1ncmlkIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmhlcm8tdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogNHJlbTtcbiAgfVxuXG4gIC53aWRnZXRzLWdyaWQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7XG4gIH1cbn1cblxuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAuaGVyby10aXRsZSxcbiAgLndpZGdldHMtdGl0bGUge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICB9XG5cbiAgLmhlcm8tc3VidGl0bGUsXG4gIC53aWRnZXRzLXN1YnRpdGxlLFxuICAud2lkZ2V0LWRlc2NyaXB0aW9uIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICB9XG5cbiAgLndpZGdldC1jYXJkIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIH1cblxuICAud2lkZ2V0LXRpdGxlIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgfVxuXG4gIC5oZXJvLWJ1dHRvbi5zZWNvbmRhcnkge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLmdyYWRpZW50LW1lc2gge1xuICAgIGJhY2tncm91bmQ6XG4gICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSA1MCUsIHJnYmEoMjAsIDE4NCwgMTY2LCAwLjI1KSAwJSwgdHJhbnNwYXJlbnQgNTAlKSxcbiAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDgwJSwgcmdiYSgyNDUsIDE1OCwgMTEsIDAuMjUpIDAlLCB0cmFuc3BhcmVudCA1MCUpLFxuICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA2MCUgMjAlLCByZ2JhKDIzNiwgNzIsIDE1MywgMC4yNSkgMCUsIHRyYW5zcGFyZW50IDUwJSk7XG4gIH1cblxuICAub3JiIHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cblxuICAud2lkZ2V0cy1zZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgICBib3gtc2hhZG93OiAwIC0xMHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICB9XG5cbiAgLnNoYXBlIHtcbiAgICBvcGFjaXR5OiAwLjE1O1xuICB9XG5cbiAgLmRlY29yYXRpb24tY2lyY2xlIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAxMzVkZWcsXG4gICAgICByZ2JhKDIwLCAxODQsIDE2NiwgMC4xMikgMCUsXG4gICAgICByZ2JhKDI0NSwgMTU4LCAxMSwgMC4xMikgNTAlLFxuICAgICAgcmdiYSgyMzYsIDcyLCAxNTMsIDAuMTIpIDEwMCVcbiAgICApO1xuICB9XG59XG5cblxuLyogcGFnZXMvTm90Rm91bmRQYWdlL05vdEZvdW5kUGFnZS5jc3MgKi9cbi5ub3QtZm91bmQtcGFnZSB7XG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwZHZoIC0gODBweCk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAycmVtIDEuNXJlbTtcbn1cblxuLm5vdC1mb3VuZC1jb250ZW50IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXgtd2lkdGg6IDUwMHB4O1xufVxuXG4ubm90LWZvdW5kLXRpdGxlIHtcbiAgZm9udC1zaXplOiA4cmVtO1xuICBmb250LXdlaWdodDogOTAwO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1wcmltYXJ5KTtcbiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XG4gIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICBsaW5lLWhlaWdodDogMTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZCk7XG4gIGFuaW1hdGlvbjogZmFkZUluU2NhbGUgMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xufVxuXG4ubm90LWZvdW5kLXN1YnRpdGxlIHtcbiAgZm9udC1zaXplOiAycmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZCk7XG4gIGFuaW1hdGlvbjogZmFkZUluVXAgMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIDAuMXMgYm90aDtcbn1cblxuLm5vdC1mb3VuZC1kZXNjcmlwdGlvbiB7XG4gIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmcteGwpO1xuICBsaW5lLWhlaWdodDogMS42O1xuICBhbmltYXRpb246IGZhZGVJblVwIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAwLjJzIGJvdGg7XG59XG5cbi5ub3QtZm91bmQtYnV0dG9uIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7XG4gIHBhZGRpbmc6IDAuODc1cmVtIDEuNzVyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LXNpbXBsZSk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLXNsb3cpO1xuICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHZhcigtLXNoYWRvdy1wcmltYXJ5KTtcbiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgMC4zcyBib3RoO1xufVxuXG4ubm90LWZvdW5kLWJ1dHRvbjpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgYm94LXNoYWRvdzogMCA4cHggMjBweCB2YXIoLS1zaGFkb3ctcHJpbWFyeS1sZyk7XG59XG5cbi5ub3QtZm91bmQtYnV0dG9uOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW5TY2FsZSB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmYWRlSW5VcCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gIC5ub3QtZm91bmQtc3VidGl0bGUge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICB9XG5cbiAgLm5vdC1mb3VuZC1kZXNjcmlwdGlvbiB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgfVxufVxuXG5cbi8qIHBhZ2VzL1dpZGdldENhdGFsb2dQYWdlL1dpZGdldENhdGFsb2dQYWdlLmNzcyAqL1xuLndpZGdldC1jYXRhbG9nLXBhZ2Uge1xuICBtaW4taGVpZ2h0OiBjYWxjKDEwMGR2aCAtIDgwcHgpO1xuICBwYWRkaW5nOiA2cmVtIDJyZW0gNHJlbTtcbiAgbWF4LXdpZHRoOiAxNDAwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uY2F0YWxvZy1oZWFkZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctM3hsKTtcbiAgYW5pbWF0aW9uOiBmYWRlSW5Eb3duIDAuOHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbn1cblxuLmNhdGFsb2ctdGl0bGUge1xuICBmb250LXNpemU6IGNsYW1wKDEuNzVyZW0sIDR2dywgMi41cmVtKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZCk7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG59XG5cbi5jYXRhbG9nLXN1YnRpdGxlIHtcbiAgZm9udC1zaXplOiBjbGFtcCgwLjkzNzVyZW0sIDJ2dywgMS4xMjVyZW0pO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBtYXgtd2lkdGg6IDYwMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbn1cblxuLmNhdGFsb2ctY29udHJvbHMge1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLTJ4bCk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogdmFyKC0tc3BhY2luZy1sZyk7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5zZWFyY2gtYm94IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXgtd2lkdGg6IDYwMHB4O1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnNlYXJjaC1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5jYXRhbG9nLXNlYXJjaC1pbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjg3NXJlbSB2YXIoLS1zcGFjaW5nLW1kKSAwLjg3NXJlbSAzcmVtO1xuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLmNhdGFsb2ctc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIG9wYWNpdHk6IDAuNztcbn1cblxuLmNhdGFsb2ctc2VhcmNoLWlucHV0OmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjEpO1xufVxuXG4uY2F0ZWdvcnktZmlsdGVycyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5jYXRlZ29yeS1idXR0b24ge1xuICBwYWRkaW5nOiAwLjYyNXJlbSB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiBjbGFtcCgwLjgxMjVyZW0sIDEuOHZ3LCAwLjg3NXJlbSk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIG1pbi1oZWlnaHQ6IDQ0cHg7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLmNhdGVnb3J5LWJ1dHRvbjpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG5AbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gIC5jYXRlZ29yeS1idXR0b246aG92ZXIge1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC5jYXRlZ29yeS1idXR0b246YWN0aXZlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTcpO1xuICB9XG59XG5cbi5jYXRlZ29yeS1idXR0b24uYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtc2ltcGxlKTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQpO1xufVxuXG4uY2F0YWxvZy1ncmlkIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDI4MHB4KSwgMWZyKSk7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1sZyk7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uY2F0YWxvZy13aWRnZXQtbGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBhbmltYXRpb246IGZhZGVJblVwIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBib3RoO1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBvdXRsaW5lLW9mZnNldDogNHB4O1xufVxuXG4ud2lkZ2V0LWNhcmQtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZCk7XG59XG5cbi53aWRnZXQtaWNvbi13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiBjbGFtcCg1NnB4LCAxMHZ3LCA2NHB4KTtcbiAgaGVpZ2h0OiBjbGFtcCg1NnB4LCAxMHZ3LCA2NHB4KTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uY2F0YWxvZy13aWRnZXQtbGluazpob3ZlciAud2lkZ2V0LWljb24td3JhcHBlciB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4xKSByb3RhdGUoNWRlZyk7XG59XG5cbkBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgLmNhdGFsb2ctd2lkZ2V0LWxpbms6YWN0aXZlIC53aWRnZXQtaWNvbi13cmFwcGVyIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICB9XG59XG5cbi53aWRnZXQtaWNvbiB7XG4gIGZvbnQtc2l6ZTogY2xhbXAoMS41cmVtLCA0dncsIDJyZW0pO1xufVxuXG4ud2lkZ2V0LWNhdGVnb3J5LWJhZGdlIHtcbiAgcGFkZGluZzogMC4yNXJlbSAwLjYyNXJlbTtcbiAgYmFja2dyb3VuZDogcmdiYSgyMCwgMTg0LCAxNjYsIDAuMDgpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogY2xhbXAoMC42ODc1cmVtLCAxLjV2dywgMC43NXJlbSk7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uY2F0YWxvZy13aWRnZXQtdGl0bGUge1xuICBmb250LXNpemU6IGNsYW1wKDEuMTI1cmVtLCAyLjV2dywgMS4zNzVyZW0pO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG5cbi5jYXRhbG9nLXdpZGdldC1kZXNjcmlwdGlvbiB7XG4gIGZvbnQtc2l6ZTogY2xhbXAoMC44NzVyZW0sIDEuOHZ3LCAwLjkzNzVyZW0pO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBsaW5lLWhlaWdodDogMS42O1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLndpZGdldC10YWdzLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogMC4zNzVyZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi53aWRnZXQtdGFnLWl0ZW0ge1xuICBwYWRkaW5nOiAwLjMxMjVyZW0gMC42MjVyZW07XG4gIGJhY2tncm91bmQ6IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjA2KTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgZm9udC1zaXplOiBjbGFtcCgwLjY4NzVyZW0sIDEuNXZ3LCAwLjc1cmVtKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLm5vLXJlc3VsdHMtbWVzc2FnZSB7XG4gIGdyaWQtY29sdW1uOiAxIC8gLTE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogY2xhbXAoMnJlbSwgOHZ3LCAzcmVtKTtcbn1cblxuLm5vLXJlc3VsdHMtdGV4dCB7XG4gIGZvbnQtc2l6ZTogY2xhbXAoMS4xMjVyZW0sIDIuNXZ3LCAxLjI1cmVtKTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc20pO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4ubm8tcmVzdWx0cy1oaW50IHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgZm9udC1zaXplOiBjbGFtcCgwLjg3NXJlbSwgMnZ3LCAxcmVtKTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW5Eb3duIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGZhZGVJblVwIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5cbi8qIE1vYmlsZSBzdHlsZXMgKDwgNjQwcHgpICovXG5AbWVkaWEgKG1heC13aWR0aDogNjM5cHgpIHtcbiAgLndpZGdldC1jYXRhbG9nLXBhZ2Uge1xuICAgIHBhZGRpbmc6IDVyZW0gMXJlbSAzcmVtO1xuICB9XG5cbiAgLmNhdGFsb2ctaGVhZGVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLTJ4bCk7XG4gIH1cblxuICAuY2F0YWxvZy1jb250cm9scyB7XG4gICAgZ2FwOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgfVxuXG4gIC5zZWFyY2gtYm94IHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cblxuICAuY2F0ZWdvcnktZmlsdGVycyB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSArIDJyZW0pO1xuICAgIG1hcmdpbi1sZWZ0OiAtMXJlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcmVtO1xuICAgIHBhZGRpbmc6IDAgMXJlbSAwLjVyZW07XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XG4gICAgc2Nyb2xsLXNuYXAtdHlwZTogeCBwcm94aW1pdHk7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmNhdGVnb3J5LWZpbHRlcnM6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmNhdGVnb3J5LWZpbHRlcnMgPiAqIHtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cblxuICAuY2F0YWxvZy1ncmlkIHtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctbWQpO1xuICB9XG5cbiAgLmNhdGFsb2ctd2lkZ2V0LWxpbmsge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMG1zICFpbXBvcnRhbnQ7XG4gIH1cblxuICAud2lkZ2V0LWNhcmQtaGVhZGVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgfVxuXG4gIC53aWRnZXQtdGFncy1saXN0IHtcbiAgICBnYXA6IDAuMzc1cmVtO1xuICB9XG59XG5cbi8qIFRhYmxldCBzdHlsZXMgKDY0MHB4IC0gMTAyM3B4KSAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7XG4gIC53aWRnZXQtY2F0YWxvZy1wYWdlIHtcbiAgICBwYWRkaW5nOiA1LjVyZW0gMS41cmVtIDMuNXJlbTtcbiAgfVxuXG4gIC5jYXRhbG9nLWdyaWQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KG1pbigxMDAlLCAyODBweCksIDFmcikpO1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy1sZyk7XG4gIH1cbn1cblxuLyogRGVza3RvcCBzdHlsZXMgKD49IDEwMjRweCkgKi9cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmNhdGFsb2ctZ3JpZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMzIwcHgsIDFmcikpO1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy14bCk7XG4gIH1cbn1cblxuLyogTGFyZ2UgZGVza3RvcCBzdHlsZXMgKD49IDE0MDBweCkgKi9cbkBtZWRpYSAobWluLXdpZHRoOiAxNDAwcHgpIHtcbiAgLmNhdGFsb2ctZ3JpZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMzQwcHgsIDFmcikpO1xuICB9XG59XG5cbi8qIFZlcnkgc21hbGwgbW9iaWxlIHNjcmVlbnMgKDwgMzc1cHgpICovXG5AbWVkaWEgKG1heC13aWR0aDogMzc0cHgpIHtcbiAgLndpZGdldC1jYXRhbG9nLXBhZ2Uge1xuICAgIHBhZGRpbmc6IDQuNXJlbSAwLjc1cmVtIDIuNXJlbTtcbiAgfVxuXG4gIC5jYXRhbG9nLWhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy14bCk7XG4gIH1cblxuICAuY2F0YWxvZy10aXRsZSB7XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG4gIH1cblxuICAuY2F0YWxvZy1zdWJ0aXRsZSB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgfVxufVxuXG4vKiBEYXJrIG1vZGUgYWRqdXN0bWVudHMgKi9cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgLmNhdGFsb2ctc2VhcmNoLWlucHV0LFxuICAuY2F0ZWdvcnktYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgfVxufVxuXG5cbi8qIHBhZ2VzL3dpZGdldHMvRW5jb2RlckRlY29kZXJXaWRnZXQvRW5jb2RlckRlY29kZXJXaWRnZXQuY3NzICovXG4uZW5jb2Rlci1kZWNvZGVyLXdpZGdldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2luZy1sZykgdmFyKC0tc3BhY2luZy14bCk7XG59XG5cbi5lbmNvZGVyLWRlY29kZXItd2lkZ2V0IC53aWRnZXQtY29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDkwMHB4O1xufVxuXG4uZW5jb2Rlci1zZWN0aW9uIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi8qIFNlY3Rpb24gSGVhZGVyICovXG4uc2VjdGlvbi1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi8qIEV4YW1wbGUgQnV0dG9uICovXG4uZXhhbXBsZS1idG4ge1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtKSB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG59XG5cbi5leGFtcGxlLWJ0bjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LWJnLXN1YnRsZSk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cblxuLyogSW5wdXQgR3JvdXBzICovXG4uaW5wdXQtZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLmlucHV0LWhlYWRlcixcbi5vdXRwdXQtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXhzKTtcbn1cblxuLmlucHV0LWxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xufVxuXG4uaW5wdXQtYWN0aW9ucyxcbi5vdXRwdXQtYWN0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7XG59XG5cbi8qIENoYXJhY3RlciBDb3VudCAqL1xuLmNoYXItY291bnQge1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xufVxuXG4vKiBDbGVhciBCdXR0b24gKi9cbi5jbGVhci1idG4ge1xuICBwYWRkaW5nOiAycHggNnB4O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWZhc3QpO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLmNsZWFyLWJ0bjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMSk7XG4gIGJvcmRlci1jb2xvcjogI2RjMjYyNjtcbiAgY29sb3I6ICNkYzI2MjY7XG59XG5cbi8qIFRleHRhcmVhICovXG4uZW5jb2Rlci10ZXh0YXJlYSB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtKSB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG59XG5cbi5lbmNvZGVyLXRleHRhcmVhOmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjEpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbn1cblxuLmVuY29kZXItdGV4dGFyZWEub3V0cHV0IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS01MCk7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAuZW5jb2Rlci10ZXh0YXJlYS5vdXRwdXQge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgfVxufVxuXG4vKiBFcnJvciBNZXNzYWdlICovXG4uZXJyb3ItbWVzc2FnZSB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pIHZhcigtLXNwYWNpbmctbWQpO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjEpO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpO1xuICBib3JkZXItbGVmdDogNHB4IHNvbGlkICNkYzI2MjY7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIGNvbG9yOiAjZGMyNjI2O1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYW5pbWF0aW9uOiBzbGlkZUluRG93biAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG59XG5cbkBrZXlmcmFtZXMgc2xpZGVJbkRvd24ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5cbi8qIFRyYW5zZm9ybSBBY3Rpb25zICovXG4udHJhbnNmb3JtLWFjdGlvbnMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy1tZCkgMDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi50cmFuc2Zvcm0tZGl2aWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udHJhbnNmb3JtLWRpdmlkZXI6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDUwJTtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcbiAgICA5MGRlZyxcbiAgICB0cmFuc3BhcmVudCAwJSxcbiAgICB2YXIoLS1jb2xvci1ib3JkZXIpIDEwJSxcbiAgICB2YXIoLS1jb2xvci1ib3JkZXIpIDkwJSxcbiAgICB0cmFuc3BhcmVudCAxMDAlXG4gICk7XG59XG5cbi5zd2FwLWJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgd2lkdGg6IDQ0cHg7XG4gIGhlaWdodDogNDRweDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbiAgZm9udC1zaXplOiAxLjM3NXJlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5zd2FwLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZykgc2NhbGUoMS4xKTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbn1cblxuLnN3YXAtYnRuOmFjdGl2ZTpub3QoOmRpc2FibGVkKSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZykgc2NhbGUoMS4wNSk7XG59XG5cbi5zd2FwLWJ0bjpkaXNhYmxlZCB7XG4gIG9wYWNpdHk6IDAuMztcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0zMDApO1xufVxuXG4vKiBDb3B5IEJ1dHRvbiAqL1xuLmNvcHktYnRuIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14cykgdmFyKC0tc3BhY2luZy1zbSk7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG59XG5cbi5jb3B5LWJ0bjpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYmFja2dyb3VuZDogcmdiYSgyMCwgMTg0LCAxNjYsIDAuMDgpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG59XG5cbi5jb3B5LWJ0bjphY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi8qIEpXVCBTcGVjaWZpYyBTdHlsZXMgKi9cbi5qd3QtaGludCB7XG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctc20pO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtKSB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtYmctc3VidGxlKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmp3dC1yZXN1bHRzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjRzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluVXAge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cblxuLmp3dC1zZWN0aW9uIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5qd3QtbGFiZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNwYWNpbmctc20pO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbn1cblxuLmp3dC1sYWJlbC1pY29uIHtcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcbn1cblxuLmp3dC1vdXRwdXQge1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBtYXJnaW46IDA7XG59XG5cbi5qd3Qtc2lnbmF0dXJlIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZCk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbn1cblxuLyogQ29weSBOb3RpZmljYXRpb24gKi9cbi5jb3B5LW5vdGlmaWNhdGlvbiB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiB2YXIoLS1zcGFjaW5nLXhsKTtcbiAgcmlnaHQ6IHZhcigtLXNwYWNpbmcteGwpO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1kKSB2YXIoLS1zcGFjaW5nLXhsKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy14bCk7XG4gIGFuaW1hdGlvbjogc2xpZGVJblVwIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbiAgei1pbmRleDogdmFyKC0tei10b29sdGlwKTtcbn1cblxuQGtleWZyYW1lcyBzbGlkZUluVXAge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cblxuLyogTW9iaWxlIFJlc3BvbnNpdmUgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuZW5jb2Rlci1kZWNvZGVyLXdpZGdldCB7XG4gICAgcGFkZGluZzogMCB2YXIoLS1zcGFjaW5nLW1kKSB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgfVxuXG4gIC5zZWN0aW9uLWhlYWRlciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctc20pO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc20pO1xuICB9XG5cbiAgLmV4YW1wbGUtYnRuIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5lbmNvZGVyLXRleHRhcmVhIHtcbiAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhzKSB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgfVxuXG4gIC5pbnB1dC1ncm91cCB7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbSk7XG4gIH1cblxuICAuand0LXJlc3VsdHMge1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIH1cblxuICAuand0LW91dHB1dCB7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pO1xuICB9XG5cbiAgLmp3dC1zaWduYXR1cmUge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pO1xuICB9XG5cbiAgLmNvcHktbm90aWZpY2F0aW9uIHtcbiAgICBib3R0b206IHZhcigtLXNwYWNpbmctbGcpO1xuICAgIHJpZ2h0OiB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgICBsZWZ0OiB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gIC5lbmNvZGVyLWRlY29kZXItd2lkZ2V0IHtcbiAgICBwYWRkaW5nOiAwIHZhcigtLXNwYWNpbmctc20pIHZhcigtLXNwYWNpbmctbWQpO1xuICB9XG5cbiAgLmVuY29kZXItdGV4dGFyZWEge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHMpO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgfVxuXG4gIC5pbnB1dC1ncm91cCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgfVxuXG4gIC50cmFuc2Zvcm0tYWN0aW9ucyB7XG4gICAgbWFyZ2luOiAxMHB4IDA7XG4gIH1cblxuICAuand0LW91dHB1dCxcbiAgLmp3dC1zaWduYXR1cmUge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHMpO1xuICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICB9XG5cbiAgLmp3dC1yZXN1bHRzIHtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctc20pO1xuICB9XG5cbiAgLnN3YXAtYnRuIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICB9XG5cbiAgLmNoYXItY291bnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuXG4vKiBwYWdlcy93aWRnZXRzL0dpdEh1YkNvbnRleHRCdWlsZGVyV2lkZ2V0L0dpdEh1YkNvbnRleHRCdWlsZGVyV2lkZ2V0LmNzcyAqL1xuLyogTGF5b3V0ICovXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuY29udGV4dC1idWlsZGVyLWxheW91dCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICBnYXA6IHZhcigtLXNwYWNpbmctbWQpO1xuICBhbmltYXRpb246IGZhZGVJblVwIDAuNHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuY29udGV4dC1idWlsZGVyLWxheW91dCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxLjJmciAxZnI7XG4gIH1cbn1cblxuLyogU3RhdHMgQmFkZ2UgQ29tcGFjdCAqL1xuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnN0YXRzLWJhZGdlLWNvbXBhY3Qge1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuc3RhdHMtYmFkZ2UtY29tcGFjdDpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSg5OSwgMTAyLCAyNDEsIDAuMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnN0YXRzLWJhZGdlLWNvbXBhY3Q6YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICBib3gtc2hhZG93OiAwIDJweCA2cHggcmdiYSg5OSwgMTAyLCAyNDEsIDAuMTUpO1xufVxuXG4vKiBTZWN0aW9uIEhlYWRlcnMgKi9cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5zZWN0aW9uLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZCk7XG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjaW5nLXhzKTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5zZWN0aW9uLXRpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5zZWN0aW9uLXRpdGxlIHNwYW5bc3R5bGUqPVwiYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeSlcIl0ge1xuICBhbmltYXRpb246IGJhZGdlUG9wIDAuM3MgY3ViaWMtYmV6aWVyKDAuNjgsIC0wLjU1LCAwLjI2NSwgMS41NSk7XG59XG5cbkBrZXlmcmFtZXMgYmFkZ2VQb3Age1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuc2VjdGlvbi1hY3Rpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA4cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLXBhbmVsLFxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnByZXZpZXctcGFuZWwge1xuICBkaXNwbGF5OiBncmlkO1xuICBnYXA6IHZhcigtLXNwYWNpbmctbWQpO1xufVxuXG4vKiBUcmVlIFZpZXcgKi9cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWxpc3Qge1xuICBtYXgtaGVpZ2h0OiA2MHZoO1xuICBvdmVyZmxvdzogYXV0bztcbiAgcGFkZGluZzogNHB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAudHJlZS1saXN0Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiA4cHg7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDEwcHg7XG4gIHBhZGRpbmc6IDhweCAxMHB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAudHJlZS1pdGVtOjpiZWZvcmUge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB3aWR0aDogM3B4O1xuICBoZWlnaHQ6IDA7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXJhZGl1cy1mdWxsKSB2YXIoLS1yYWRpdXMtZnVsbCkgMDtcbiAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnRyZWUtaXRlbTpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoOTksIDEwMiwgMjQxLCAwLjA2KTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDJweCk7XG4gIGJvcmRlci1jb2xvcjogcmdiYSg5OSwgMTAyLCAyNDEsIDAuMSk7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWl0ZW06aG92ZXI6OmJlZm9yZSB7XG4gIGhlaWdodDogNjAlO1xufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAudHJlZS1pdGVtOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxcHgpIHNjYWxlKDAuOTkpO1xufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAudHJlZS1pdGVtOmZvY3VzLXdpdGhpbiB7XG4gIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnRyZWUtaXRlbS5zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQ6IHJnYmEoOTksIDEwMiwgMjQxLCAwLjA4KTtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnRyZWUtaXRlbS5zZWxlY3RlZDo6YmVmb3JlIHtcbiAgaGVpZ2h0OiA4MCU7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWl0ZW0uc2VsZWN0ZWQgLnBhdGgge1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWl0ZW0gLnBhdGgge1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGZsZXg6IDE7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWl0ZW0gaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYWNjZW50LWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGVhc2U7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWl0ZW0gaW5wdXRbdHlwZT0nY2hlY2tib3gnXTpob3ZlciB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnRyZWUtaXRlbSBpbnB1dFt0eXBlPSdjaGVja2JveCddOmNoZWNrZWQge1xuICBhbmltYXRpb246IGNoZWNrQm91bmNlIDAuM3MgZWFzZTtcbn1cblxuQGtleWZyYW1lcyBjaGVja0JvdW5jZSB7XG4gIDAlLCAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICB9XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWl0ZW0gLmZpbGUtaWNvbiB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC50cmVlLWl0ZW0gLmZpbGUtc2l6ZSB7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogOHB4O1xuICBwYWRkaW5nOiAycHggOHB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDk5LCAxMDIsIDI0MSwgMC4wNSk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAudHJlZS1pdGVtOmhvdmVyIC5maWxlLXNpemUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDk5LCAxMDIsIDI0MSwgMC4xKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4vKiBQcmV2aWV3IEFyZWEgKi9cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5wcmV2aWV3LWFyZWEge1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbiAgbWF4LWhlaWdodDogNjB2aDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbn1cblxuLyogQnV0dG9uIFN1Y2Nlc3MgU3RhdGUgKi9cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5idXR0b24tc3VjY2Vzcy1zdGF0ZSBidXR0b24ge1xuICBjb2xvcjogdmFyKC0tY29sb3Itc3VjY2VzcykgIWltcG9ydGFudDtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1zdWNjZXNzKSAhaW1wb3J0YW50O1xuICBhbmltYXRpb246IHN1Y2Nlc3NQdWxzZSAwLjNzIGVhc2U7XG59XG5cbkBrZXlmcmFtZXMgc3VjY2Vzc1B1bHNlIHtcbiAgMCUsIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICB9XG59XG5cbi8qIFN0YXRzIEdyaWQgKi9cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5zdGF0cy1ncmlkIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgZ2FwOiAxMnB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnN0YXRzLWdyaWQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIDFmcik7XG4gIH1cbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnN0YXQtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogNHB4O1xuICBwYWRkaW5nOiA4cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tdHJhbnNpdGlvbi1mYXN0KTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnN0YXQtaXRlbTpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjA0KTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnN0YXQtbGFiZWwge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnN0YXQtdmFsdWUge1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDEuMTI1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1wcmltYXJ5KTtcbiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XG4gIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xufVxuXG4vKiBMb2FkaW5nIFN0YXRlcyAqL1xuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnNrZWxldG9uIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1jb2xvci1zdXJmYWNlKSAyNSUsIHZhcigtLWNvbG9yLWdyYXktMjAwKSA1MCUsIHZhcigtLWNvbG9yLXN1cmZhY2UpIDc1JSk7XG4gIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlO1xuICBhbmltYXRpb246IHNoaW1tZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbn1cblxuQGtleWZyYW1lcyBzaGltbWVyIHtcbiAgMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAyMDAlIDA7IH1cbiAgMTAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDAlIDA7IH1cbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnNrZWxldG9uLXRyZWUtaXRlbSB7XG4gIGhlaWdodDogMzZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuc2tlbGV0b24tdGV4dCB7XG4gIGhlaWdodDogMjBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLyogSGlzdG9yeSBQYW5lbCAqL1xuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmhpc3RvcnktcGFuZWwge1xuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmhpc3RvcnktZ3JpZCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICBnYXA6IHZhcigtLXNwYWNpbmctbWQpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmhpc3RvcnktZ3JpZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5naXRodWItY29udGV4dC1idWlsZGVyIC5oaXN0b3J5LWdyaWQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7XG4gIH1cbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmhpc3RvcnktY2FyZCB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmhpc3RvcnktY2FyZDpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmhpc3RvcnktY2FyZC1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXNtKTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmhpc3RvcnktY2FyZC10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5oaXN0b3J5LWNhcmQtbWV0YSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogNHB4O1xuICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmhpc3RvcnktY2FyZC1hY3Rpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA0cHg7XG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctc20pO1xufVxuXG4vKiBFbXB0eSBTdGF0ZXMgKi9cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5lbXB0eS1zdGF0ZSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy0yeGwpO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2UtaW47XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5lbXB0eS1zdGF0ZS1pY29uIHtcbiAgZm9udC1zaXplOiAzcmVtO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgb3BhY2l0eTogMC4zO1xuICBhbmltYXRpb246IGZsb2F0IDNzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIGZsb2F0IHtcbiAgMCUsIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gIH1cbn1cblxuLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmVtcHR5LXN0YXRlLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy14cyk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuZW1wdHktc3RhdGUtZGVzY3JpcHRpb24ge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn1cblxuLyogUHJvZ3Jlc3MgSW5kaWNhdG9yICovXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAucHJvZ3Jlc3MtYmFyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNnB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5naXRodWItY29udGV4dC1idWlsZGVyIC5wcm9ncmVzcy1maWxsIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWNvbG9yLXByaW1hcnkpLCByZ2JhKDk5LCAxMDIsIDI0MSwgMC43KSwgdmFyKC0tY29sb3ItcHJpbWFyeSkpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgMTAwJTtcbiAgYW5pbWF0aW9uOiBwcm9ncmVzc1B1bHNlIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICB0cmFuc2l0aW9uOiB3aWR0aCAwLjNzIGVhc2U7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbiAgYm94LXNoYWRvdzogMCAwIDEwcHggcmdiYSg5OSwgMTAyLCAyNDEsIDAuMyk7XG59XG5cbkBrZXlmcmFtZXMgcHJvZ3Jlc3NQdWxzZSB7XG4gIDAlLCAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7XG4gIH1cbiAgNTAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDUwJTtcbiAgfVxufVxuXG4uZ2l0aHViLWNvbnRleHQtYnVpbGRlciAucHJvZ3Jlc3MtdGV4dCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc20pO1xuICBmb250LXdlaWdodDogNTAwO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2UtaW47XG59XG5cbi8qIE1vYmlsZSBPcHRpbWl6YXRpb25zICovXG5AbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHtcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnRyZWUtbGlzdCxcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnByZXZpZXctYXJlYSB7XG4gICAgbWF4LWhlaWdodDogNTB2aDtcbiAgfVxuICBcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnN0YXQtdmFsdWUge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgfVxuICBcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnRyZWUtaXRlbSB7XG4gICAgcGFkZGluZzogMTJweCAxMHB4O1xuICAgIGdhcDogMTJweDtcbiAgfVxuICBcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnRyZWUtaXRlbSBpbnB1dFt0eXBlPSdjaGVja2JveCddIHtcbiAgICB3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gIH1cbiAgXG4gIC5naXRodWItY29udGV4dC1idWlsZGVyIC5zZWN0aW9uLWhlYWRlciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctc20pO1xuICB9XG4gIFxuICAuZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuc2VjdGlvbi10aXRsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgXG4gIC5naXRodWItY29udGV4dC1idWlsZGVyIC5zZWN0aW9uLWFjdGlvbnMge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgfVxuICBcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnN0YXRzLWJhZGdlLWNvbXBhY3Qge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBwYWRkaW5nOiA2cHggMTBweDtcbiAgICBnYXA6IDhweDtcbiAgfVxuICBcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmVtcHR5LXN0YXRlIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXhsKTtcbiAgfVxuICBcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLmVtcHR5LXN0YXRlLWljb24ge1xuICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICB9XG4gIFxuICAvKiBCZXR0ZXIgdG91Y2ggdGFyZ2V0cyAqL1xuICAuZ2l0aHViLWNvbnRleHQtYnVpbGRlciAudHJlZS1pdGVtIC5wYXRoIHtcbiAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgfVxuICBcbiAgLyogQWRqdXN0IHByb2dyZXNzIGJhciBmb3IgbW9iaWxlICovXG4gIC5naXRodWItY29udGV4dC1idWlsZGVyIC5wcm9ncmVzcy1iYXIge1xuICAgIGhlaWdodDogOHB4O1xuICB9XG59XG5cbi8qIERhcmsgTW9kZSAqL1xuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAuZ2l0aHViLWNvbnRleHQtYnVpbGRlciAucHJldmlldy1hcmVhIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgfVxuICBcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnNrZWxldG9uIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWNvbG9yLXN1cmZhY2UpIDI1JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSA1MCUsIHZhcigtLWNvbG9yLXN1cmZhY2UpIDc1JSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7XG4gIH1cbn1cblxuLyogUHVsc2UgQW5pbWF0aW9uIGZvciBTdGF0dXMgSW5kaWNhdG9ycyAqL1xuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlLCAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICB9XG59XG5cbi8qIFJlZHVjZWQgTW90aW9uICovXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAuZ2l0aHViLWNvbnRleHQtYnVpbGRlciAudHJlZS1pdGVtOmhvdmVyLFxuICAuZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuaGlzdG9yeS1jYXJkOmhvdmVyLFxuICAuZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuc3RhdHMtYmFkZ2UtY29tcGFjdDpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG4gIFxuICAuZ2l0aHViLWNvbnRleHQtYnVpbGRlciAuc2tlbGV0b24sXG4gIC5naXRodWItY29udGV4dC1idWlsZGVyIC5lbXB0eS1zdGF0ZS1pY29uLFxuICAuZ2l0aHViLWNvbnRleHQtYnVpbGRlciAucHJvZ3Jlc3MtZmlsbCxcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnRyZWUtaXRlbSBpbnB1dFt0eXBlPSdjaGVja2JveCddOmNoZWNrZWQge1xuICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgfVxuICBcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnRyZWUtaXRlbTo6YmVmb3JlIHtcbiAgICBoZWlnaHQ6IDYwJTtcbiAgfVxuICBcbiAgLmdpdGh1Yi1jb250ZXh0LWJ1aWxkZXIgLnNrZWxldG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgfVxufVxuXG5cblxuXG4vKiBwYWdlcy93aWRnZXRzL0ltYWdlQ29tcHJlc3Npb25XaWRnZXQvSW1hZ2VDb21wcmVzc2lvbldpZGdldC5jc3MgKi9cbi8qKlxuICogSW1hZ2UgQ29tcHJlc3Npb24gV2lkZ2V0IC0gQ2xlYW4gJiBGb2N1c2VkIFVYXG4gKi9cblxuLmltYWdlLWNvbXByZXNzaW9uLXdpZGdldCAud2lkZ2V0LXRpdGxlLFxuLmltYWdlLWNvbXByZXNzaW9uLXdpZGdldCAud2lkZ2V0LWRlc2NyaXB0aW9uLFxuLmltYWdlLWNvbXByZXNzaW9uLXdpZGdldCAud2lkZ2V0LWNvbnRlbnQge1xuICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLmltYWdlLWNvbXByZXNzaW9uLXdpZGdldCAud2lkZ2V0LWNvbnRlbnQge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgYWxpZ24taXRlbXM6IHN0YXJ0O1xufVxuXG4vKiBUd28tY29sdW1uIGxheW91dCBmb3IgbGFyZ2VyIHNjcmVlbnMgKi9cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLWNvbXByZXNzaW9uLXdpZGdldCAud2lkZ2V0LWNvbnRlbnQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmcteGwpO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxNDQwcHgpIHtcbiAgLmltYWdlLWNvbXByZXNzaW9uLXdpZGdldCAud2lkZ2V0LWNvbnRlbnQge1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy0yeGwpO1xuICB9XG59XG5cbi8qIENvbHVtbiB3cmFwcGVycyBmb3IgcHJvcGVyIHBvc2l0aW9uaW5nICovXG4ud2lkZ2V0LWNvbnRlbnQgPiBkaXY6Zmlyc3QtY2hpbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IHZhcigtLXNwYWNpbmctbGcpO1xufVxuXG4ud2lkZ2V0LWNvbnRlbnQgPiBkaXY6bGFzdC1jaGlsZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogdmFyKC0tc3BhY2luZy1sZyk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIElNQUdFIENPTVBBUklTT04gLSBIZXJvIFNlY3Rpb25cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNvbXBhcmlzb24tY2FyZCB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiBjYWxjKDcwcHggKyB2YXIoLS1zcGFjaW5nLWxnKSk7XG4gIHotaW5kZXg6IDE7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDIzcHgpIHtcbiAgLmNvbXBhcmlzb24tY2FyZCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogMDtcbiAgfVxufVxuXG4uY29tcGFyaXNvbi1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpIHZhcigtLXNwYWNpbmctbGcpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG59XG5cbi5jb21wYXJpc29uLXRpdGxlIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGZsZXg6IDE7XG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNwYWNpbmctbWQpO1xufVxuXG4uY29tcGFyaXNvbi1uYXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDAuMjVyZW07XG59XG5cbi5pbWFnZS1jb21wYXJpc29uLXdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBhc3BlY3QtcmF0aW86IDE2IC8gOTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5pbWFnZS1jb21wYXJpc29uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLmNvbXBhcmlzb24taW1hZ2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5jb21wYXJpc29uLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgei1pbmRleDogMTtcbn1cblxuLmNvbXBhcmlzb24tc2xpZGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDNweDtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGN1cnNvcjogZXctcmVzaXplO1xuICB6LWluZGV4OiAyO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIGJveC1zaGFkb3c6IDAgMCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbn1cblxuLmNvbXBhcmlzb24tc2xpZGVyOmZvY3VzIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG4uY29tcGFyaXNvbi1oYW5kbGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbGcpO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1mYXN0KTtcbn1cblxuLmNvbXBhcmlzb24tc2xpZGVyOmhvdmVyIC5jb21wYXJpc29uLWhhbmRsZSxcbi5jb21wYXJpc29uLXNsaWRlcjpmb2N1cyAuY29tcGFyaXNvbi1oYW5kbGUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxLjEpO1xufVxuXG4uY29tcGFyaXNvbi1sYWJlbHMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogdmFyKC0tc3BhY2luZy1zbSk7XG4gIGxlZnQ6IHZhcigtLXNwYWNpbmctc20pO1xuICByaWdodDogdmFyKC0tc3BhY2luZy1zbSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDM7XG59XG5cbi5jb21wYXJpc29uLWxhYmVsIHtcbiAgcGFkZGluZzogMC4yNXJlbSAwLjYyNXJlbTtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjcpO1xuICBjb2xvcjogd2hpdGU7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG59XG5cbi5jb21wYXJpc29uLWluZm8ge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmNvbXBhcmlzb24taW5mbyB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgMWZyKTtcbiAgfVxufVxuXG4uY29tcGFyaXNvbi1zdGF0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjI1cmVtO1xuICBwYWRkaW5nOiAwIHZhcigtLXNwYWNpbmctc20pO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmNvbXBhcmlzb24tc3RhdDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MzlweCkge1xuICAuY29tcGFyaXNvbi1zdGF0Om50aC1jaGlsZCgxKSxcbiAgLmNvbXBhcmlzb24tc3RhdDpudGgtY2hpbGQoMikge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICB9XG5cbiAgLmNvbXBhcmlzb24tc3RhdDpudGgtY2hpbGQob2RkKSB7XG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgfVxufVxuXG4uY29tcGFyaXNvbi1zdGF0LWxhYmVsIHtcbiAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5jb21wYXJpc29uLXN0YXQtdmFsdWUge1xuICBmb250LXNpemU6IDEuMTI1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbn1cblxuLmNvbXBhcmlzb24tc3RhdC5oaWdobGlnaHQgLmNvbXBhcmlzb24tc3RhdC12YWx1ZSB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgZm9udC1zaXplOiAxLjVyZW07XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENPTlRST0xTIFJPVyAtIENvbXBhY3QgJiBIb3Jpem9udGFsXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5jb250cm9scy1yb3cge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5jb250cm9scy1yb3cge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnI7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY29udHJvbHMtcm93IHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG87XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE0NDBweCkge1xuICAuY29udHJvbHMtcm93IHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDIwMHB4IDFmciBhdXRvO1xuICB9XG59XG5cbi5kcm9wLXpvbmUuY29tcGFjdCB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpO1xuICBib3JkZXI6IDJweCBkYXNoZWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IDAuMzc1cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IDEwMHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmRyb3Atem9uZS5jb21wYWN0IHtcbiAgICBtaW4td2lkdGg6IDE2MHB4O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxNDQwcHgpIHtcbiAgLmRyb3Atem9uZS5jb21wYWN0IHtcbiAgICBtaW4taGVpZ2h0OiAxMjBweDtcbiAgfVxufVxuXG4uZHJvcC16b25lLmNvbXBhY3Q6aG92ZXI6bm90KC5kaXNhYmxlZCkge1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG4uZHJvcC16b25lLmNvbXBhY3QuZHJhZ2dpbmcge1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxNTgsIDE3NywgMC4wNSk7XG59XG5cbi5kcm9wLXpvbmUuY29tcGFjdCAuZHJvcC16b25lLWljb24ge1xuICBmb250LXNpemU6IDJyZW07XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNHB4IDEycHggcmdiYSgxMCwgMTU4LCAxNzcsIDAuMTUpKTtcbn1cblxuLmRyb3Atem9uZS5jb21wYWN0IC5kcm9wLXpvbmUtdGV4dCB7XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbn1cblxuLmRyb3Atem9uZS5kaXNhYmxlZCB7XG4gIG9wYWNpdHk6IDAuNTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLmZvcm1hdC1jb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLnF1YWxpdHktY29udHJvbC5jb21wYWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAwLjI1cmVtO1xufVxuXG4ucXVhbGl0eS1sYWJlbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5xdWFsaXR5LWxhYmVsLXRleHQge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xufVxuXG4ucXVhbGl0eS1sYWJlbC12YWx1ZSB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLnF1YWxpdHktc2xpZGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNHB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICBvdXRsaW5lOiBub25lO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbn1cblxuLnF1YWxpdHktc2xpZGVyOjotd2Via2l0LXNsaWRlci10aHVtYiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgd2lkdGg6IDE0cHg7XG4gIGhlaWdodDogMTRweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1wcmltYXJ5KTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtKTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG59XG5cbi5xdWFsaXR5LXNsaWRlcjo6LXdlYmtpdC1zbGlkZXItdGh1bWI6aG92ZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMTUpO1xufVxuXG4ucXVhbGl0eS1zbGlkZXI6Oi1tb3otcmFuZ2UtdGh1bWIge1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LXByaW1hcnkpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHdoaXRlO1xuICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc20pO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1mYXN0KTtcbn1cblxuLnF1YWxpdHktc2xpZGVyOjotbW96LXJhbmdlLXRodW1iOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjE1KTtcbn1cblxuLmFjdGlvbi1jb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5hY3Rpb24tY29udHJvbHMge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYzOXB4KSB7XG4gIC5hY3Rpb24tY29udHJvbHMge1xuICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7XG4gIH1cblxuICAuYWN0aW9uLWNvbnRyb2xzIGJ1dHRvbiB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgbWluLXdpZHRoOiAwO1xuICB9XG59XG5cbi8qIFN0YXRzIEJhciAqL1xuLnN0YXRzLWJhciB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpO1xuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuc3RhdHMtYmFyIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpO1xuICB9XG59XG5cbi5zdGF0LWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiAwLjI1cmVtO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnN0YXQtaXRlbTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MzlweCkge1xuICAuc3RhdC1pdGVtOm50aC1jaGlsZCgxKSxcbiAgLnN0YXQtaXRlbTpudGgtY2hpbGQoMikge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICB9XG5cbiAgLnN0YXQtaXRlbTpudGgtY2hpbGQob2RkKSB7XG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgfVxufVxuXG4uc3RhdC1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICBmb250LXdlaWdodDogNjAwO1xufVxuXG4uc3RhdC12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEZJTEVTIFRBQkxFIC0gQ2xlYW4gJiBTY2FubmFibGVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmZpbGVzLXRhYmxlIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbn1cblxuLmZpbGVzLXRhYmxlIHRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG59XG5cbi5maWxlcy10YWJsZSB0aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHBhZGRpbmc6IDAuNjI1cmVtIDAuNzVyZW07XG4gIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5maWxlcy10YWJsZSB0aC5zb3J0YWJsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG59XG5cbi5maWxlcy10YWJsZSB0aC5zb3J0YWJsZTpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG59XG5cbi5zb3J0LWljb24ge1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIG9wYWNpdHk6IDAuNTtcbiAgbWFyZ2luLWxlZnQ6IDAuMjVyZW07XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLnNvcnQtaWNvbi5hY3RpdmUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5maWxlcy10YWJsZSB0ZCB7XG4gIHBhZGRpbmc6IDAuNjI1cmVtIDAuNzVyZW07XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uZmlsZXMtdGFibGUgdGJvZHkgdHIge1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmZpbGVzLXRhYmxlIHRib2R5IHRyOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG59XG5cbi5maWxlcy10YWJsZSB0Ym9keSB0ci5zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE1OCwgMTc3LCAwLjA4KTtcbn1cblxuLmZpbGVzLXRhYmxlIHRib2R5IHRyLnByb2Nlc3Npbmcge1xuICBvcGFjaXR5OiAwLjc7XG59XG5cbi5yYWRpby1jZWxsIHtcbiAgd2lkdGg6IDQwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnJhZGlvLWNlbGwgaW5wdXRbdHlwZT0ncmFkaW8nXSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbn1cblxuLmZpbGUtbmFtZS1jZWxsIHtcbiAgbWF4LXdpZHRoOiAyMDBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5mb3JtYXQtY2VsbCB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5mb3JtYXQtYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuMTI1cmVtIDAuMzc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTcwMCk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG4gIGZvbnQtc2l6ZTogMC42MjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG59XG5cbi5mb3JtYXQtYmFkZ2Uub3V0cHV0IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cblxuLmZvcm1hdC1hcnJvdyB7XG4gIG1hcmdpbjogMCAwLjI1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuXG4uc2l6ZS1jZWxsIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbn1cblxuLnNpemUtcmVzdWx0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgbWFyZ2luLXRvcDogMC4xMjVyZW07XG59XG5cbi5zYXZlZC1jZWxsIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xufVxuXG4uc2F2ZWQtYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxNTgsIDE3NywgMC4xNSk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuXG4uc3RhdHVzLWNlbGwge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uc3RhdHVzLWJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbiAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5zdGF0dXMtYmFkZ2UucGVuZGluZyB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNzAwKTtcbn1cblxuLnN0YXR1cy1iYWRnZS5wcm9jZXNzaW5nIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNDUsIDE1OCwgMTEsIDAuMTUpO1xuICBjb2xvcjogdmFyKC0tY29sb3Itc2Vjb25kYXJ5KTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjI1cmVtO1xufVxuXG4uc3Bpbm5lciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBzcGluIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cblxuLnN0YXR1cy1iYWRnZS5jb21wbGV0ZSB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMTYsIDE4NSwgMTI5LCAwLjE1KTtcbiAgY29sb3I6ICMxMGI5ODE7XG59XG5cbi5zdGF0dXMtYmFkZ2UuZXJyb3Ige1xuICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjE1KTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlcik7XG4gIGN1cnNvcjogaGVscDtcbn1cblxuLmFjdGlvbnMtY2VsbCB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uYWN0aW9ucy1jZWxsID4gKiB7XG4gIG1hcmdpbi1sZWZ0OiAwLjI1cmVtO1xufVxuXG4vKiBDb2x1bW4gd2lkdGhzICovXG4uY29sLXNlbGVjdCB7XG4gIHdpZHRoOiA0MHB4O1xufVxuXG4uY29sLW5hbWUge1xuICBtaW4td2lkdGg6IDE4MHB4O1xuICBtYXgtd2lkdGg6IDMwMHB4O1xufVxuXG4uY29sLWZvcm1hdCB7XG4gIHdpZHRoOiAxNDBweDtcbn1cblxuLmNvbC1zaXplIHtcbiAgd2lkdGg6IDEyMHB4O1xufVxuXG4uY29sLXNhdmVkIHtcbiAgd2lkdGg6IDkwcHg7XG59XG5cbi5jb2wtc3RhdHVzIHtcbiAgd2lkdGg6IDEyMHB4O1xufVxuXG4uY29sLWFjdGlvbnMge1xuICB3aWR0aDogMTQwcHg7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEVNUFRZIFNUQVRFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5lbXB0eS1zdGF0ZSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy0yeGwpIHZhcigtLXNwYWNpbmctbGcpO1xufVxuXG4uZW1wdHktc3RhdGUtaWNvbiB7XG4gIGZvbnQtc2l6ZTogNHJlbTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNHB4IDEycHggcmdiYSgxMCwgMTU4LCAxNzcsIDAuMTUpKTtcbn1cblxuLmVtcHR5LXN0YXRlLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgbWFyZ2luOiAwIDAgdmFyKC0tc3BhY2luZy1zbSkgMDtcbn1cblxuLmVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgbWFyZ2luOiAwO1xuICBtYXgtd2lkdGg6IDQwMHB4O1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBSRVNQT05TSVZFIEFESlVTVE1FTlRTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIE1vYmlsZSBvcHRpbWl6YXRpb25zICovXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmZpbGVzLXRhYmxlIHtcbiAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgfVxuXG4gIC5maWxlcy10YWJsZSB0aCxcbiAgLmZpbGVzLXRhYmxlIHRkIHtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC4zNzVyZW07XG4gIH1cblxuICAuY29sLW5hbWUge1xuICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgbWF4LXdpZHRoOiAxNTBweDtcbiAgfVxuXG4gIC5jb2wtZm9ybWF0IHtcbiAgICB3aWR0aDogMTAwcHg7XG4gIH1cblxuICAuY29sLXNpemUge1xuICAgIHdpZHRoOiA4MHB4O1xuICB9XG5cbiAgLmNvbC1zYXZlZCB7XG4gICAgd2lkdGg6IDcwcHg7XG4gIH1cblxuICAuY29sLXN0YXR1cyB7XG4gICAgd2lkdGg6IDkwcHg7XG4gIH1cblxuICAuY29sLWFjdGlvbnMge1xuICAgIHdpZHRoOiAxMDBweDtcbiAgfVxuXG4gIC5zaXplLXJlc3VsdCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC5jb21wYXJpc29uLWhhbmRsZSB7XG4gICAgd2lkdGg6IDMycHg7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgfVxuXG4gIC5mb3JtYXQtYmFkZ2Uge1xuICAgIGZvbnQtc2l6ZTogMC41NjI1cmVtO1xuICAgIHBhZGRpbmc6IDAuMTI1cmVtIDAuMjVyZW07XG4gIH1cblxuICAuc3RhdHVzLWJhZGdlIHtcbiAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICAgIHBhZGRpbmc6IDAuMTg3NXJlbSAwLjM3NXJlbTtcbiAgfVxufVxuXG4vKiBFeHRyYSBzbWFsbCBzY3JlZW5zICovXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgLmltYWdlLWNvbXBhcmlzb24td3JhcHBlciB7XG4gICAgYXNwZWN0LXJhdGlvOiA0IC8gMztcbiAgfVxuXG4gIC5jb21wYXJpc29uLXRpdGxlIHtcbiAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgfVxuXG4gIC5jb21wYXJpc29uLXN0YXQtbGFiZWwsXG4gIC5zdGF0LWxhYmVsIHtcbiAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICB9XG5cbiAgLmNvbXBhcmlzb24tc3RhdC12YWx1ZSB7XG4gICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gIH1cblxuICAuY29tcGFyaXNvbi1zdGF0LmhpZ2hsaWdodCAuY29tcGFyaXNvbi1zdGF0LXZhbHVlIHtcbiAgICBmb250LXNpemU6IDEuMjVyZW07XG4gIH1cblxuICAuZHJvcC16b25lLmNvbXBhY3QgLmRyb3Atem9uZS1pY29uIHtcbiAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgfVxuXG4gIC5kcm9wLXpvbmUuY29tcGFjdCAuZHJvcC16b25lLXRleHQge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgfVxufVxuXG4vKiBMYXJnZSBzY3JlZW5zIC0gb3B0aW1pemUgc3BhY2UgdXNhZ2UgKi9cbkBtZWRpYSAobWluLXdpZHRoOiAxNDQwcHgpIHtcbiAgLmNvbXBhcmlzb24tY2FyZCB7XG4gICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDE0MHB4KTtcbiAgfVxuXG4gIC5maWxlcy10YWJsZSB0aCxcbiAgLmZpbGVzLXRhYmxlIHRkIHtcbiAgICBwYWRkaW5nOiAwLjc1cmVtIDAuODc1cmVtO1xuICB9XG59XG5cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgLmZvcm1hdC1iYWRnZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS03MDApO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XG4gIH1cblxuICAuY29tcGFyaXNvbi1sYWJlbCB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTtcbiAgfVxuXG4gIC5zdGF0dXMtYmFkZ2UucGVuZGluZyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS03MDApO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XG4gIH1cbn1cblxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgLmRyb3Atem9uZS5jb21wYWN0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gIH1cblxuICAucXVhbGl0eS1zbGlkZXI6Oi13ZWJraXQtc2xpZGVyLXRodW1iOmhvdmVyLFxuICAucXVhbGl0eS1zbGlkZXI6Oi1tb3otcmFuZ2UtdGh1bWI6aG92ZXIge1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC5jb21wYXJpc29uLXNsaWRlcjpob3ZlciAuY29tcGFyaXNvbi1oYW5kbGUsXG4gIC5jb21wYXJpc29uLXNsaWRlcjpmb2N1cyAuY29tcGFyaXNvbi1oYW5kbGUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB9XG59XG5cblxuLyogcGFnZXMvd2lkZ2V0cy9TdG9ja0h1YldpZGdldC9TdG9ja0h1YldpZGdldC5jc3MgKi9cbi8qKlxuICogU3RvY2tIdWJXaWRnZXQgc3R5bGVzXG4gKi9cblxuLyogVW5pZmllZCBUaWNrZXIgQ29udHJvbHMgKi9cbi50aWNrZXItY29udHJvbHMtdW5pZmllZCB7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmcteGwpO1xufVxuXG4udGlja2VyLWlucHV0LXJvdyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLyogUmVzZWFyY2ggRGFzaGJvYXJkICovXG4ucmVzZWFyY2gtZGFzaGJvYXJkIHtcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy0yeGwpO1xuICBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2luZy0yeGwpO1xuICBib3JkZXItdG9wOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbn1cblxuLnJlc2VhcmNoLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1sZyk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmcteGwpO1xufVxuXG4ucmVzZWFyY2gtaW5mbyB7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLnJlc2VhcmNoLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgbWFyZ2luOiAwIDAgdmFyKC0tc3BhY2luZy14cykgMDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTtcbn1cblxuLnRpY2tlci1oaWdobGlnaHQge1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGZvbnQtd2VpZ2h0OiA4MDA7XG59XG5cbi5yZXNlYXJjaC1zdWJ0aXRsZSB7XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5yZXNlYXJjaC1hY3Rpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5zZWN0aW9uLWZpbHRlciB7XG4gIHBhZGRpbmc6IDAuNXJlbSB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zYW5zKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBtaW4td2lkdGg6IDEyMHB4O1xufVxuXG4uc2VjdGlvbi1maWx0ZXI6aG92ZXIge1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbn1cblxuLnNlY3Rpb24tZmlsdGVyOmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjEpO1xufVxuXG4vKiBRdW90ZSBEaXNwbGF5ICovXG4ucXVvdGUtZGlzcGxheSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1sZyk7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xufVxuXG4ucXVvdGUtZGlzcGxheS5sb2FkaW5nIHtcbiAgb3BhY2l0eTogMC42O1xufVxuXG4ucXVvdGUtc2tlbGV0b24ge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpIDA7XG59XG5cbi5xdW90ZS1kaXNwbGF5LnBvc2l0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjMTBiOTgxO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE2LCAxODUsIDEyOSwgMC4wNSksIHJnYmEoMTYsIDE4NSwgMTI5LCAwLjAyKSk7XG59XG5cbi5xdW90ZS1kaXNwbGF5Lm5lZ2F0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZWY0NDQ0O1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDIzOSwgNjgsIDY4LCAwLjA1KSwgcmdiYSgyMzksIDY4LCA2OCwgMC4wMikpO1xufVxuXG4ucXVvdGUtbWFpbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbSk7XG59XG5cbi5xdW90ZS1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4ucXVvdGUtY2hhbmdlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXhzKTtcbiAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xufVxuXG4ucXVvdGUtZGlzcGxheS5wb3NpdGl2ZSAucXVvdGUtY2hhbmdlIHtcbiAgY29sb3I6ICMxMGI5ODE7XG59XG5cbi5xdW90ZS1kaXNwbGF5Lm5lZ2F0aXZlIC5xdW90ZS1jaGFuZ2Uge1xuICBjb2xvcjogI2VmNDQ0NDtcbn1cblxuLmNoYW5nZS12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi5jaGFuZ2UtcGVyY2VudCB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG9wYWNpdHk6IDAuODtcbn1cblxuLnF1b3RlLW1ldGEge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IHZhcigtLXNwYWNpbmctbWQpO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG59XG5cbi5xdW90ZS1jdXJyZW5jeSxcbi5xdW90ZS1zdGF0ZSB7XG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLnF1b3RlLXJlZnJlc2gge1xuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG59XG5cbi5xdW90ZS1yZWZyZXNoOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbn1cblxuLnF1b3RlLWRldGFpbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSkgdmFyKC0tc3BhY2luZy1tZCk7XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xufVxuXG4ucXVvdGUtZGV0YWlscyBzcGFuIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLyogU291cmNlcyBHcmlkICovXG4uc291cmNlcy1ncmlkIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDI0MHB4KSwgMWZyKSk7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctbGcpO1xufVxuXG4uc291cmNlLWNhcmQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNwYWNpbmctbWQpO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4uc291cmNlLWNhcmQ6aG92ZXIge1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG59XG5cbi5zb3VyY2UtY2FyZDphY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi5zb3VyY2UtaWNvbiB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICB3aWR0aDogMi41cmVtO1xuICBoZWlnaHQ6IDIuNXJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5zb3VyY2UtaW5mbyB7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLnNvdXJjZS1uYW1lIHtcbiAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICBtYXJnaW4tYm90dG9tOiAwLjEyNXJlbTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi5zb3VyY2UtZGVzYyB7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi50aWNrZXItaW5wdXQge1xuICBmbGV4OiAxO1xuICBwYWRkaW5nOiAwLjc1cmVtIHZhcigtLXNwYWNpbmctbWQpO1xuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zYW5zKTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLnRpY2tlci1pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBvcGFjaXR5OiAwLjY7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4udGlja2VyLWlucHV0OmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoMjAsIDE4NCwgMTY2LCAwLjEpO1xufVxuXG4ucG9wdWxhci10aWNrZXJzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6IHZhcigtLXNwYWNpbmctc20pO1xufVxuXG4udGlja2VyLWNoaXAge1xuICBwYWRkaW5nOiAwLjVyZW0gdmFyKC0tc3BhY2luZy1tZCk7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4udGlja2VyLWNoaXA6aG92ZXIge1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLnRpY2tlci1jaGlwLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LXNpbXBsZSk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLnByb21wdHMtc2VjdGlvbiB7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmcteGwpO1xufVxuXG4ucHJvbXB0cy1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbGcpO1xufVxuXG4ucHJvbXB0cy10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpO1xuICBtYXJnaW46IDA7XG59XG5cbi5wcm9tcHRzLWdyaWQge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMjgwcHgpLCAxZnIpKTtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLnByb21wdC1jYXJkIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucHJvbXB0LWNhcmQ6aG92ZXIge1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG59XG5cbi5wcm9tcHQtY2FyZC1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLXNtKTtcbn1cblxuLnByb21wdC1jYXJkLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgbWFyZ2luOiAwO1xufVxuXG4ucHJvbXB0LWNhcmQtYWN0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc3BhY2luZy14cyk7XG59XG5cbi5wcm9tcHQtY2FyZC1jb250ZW50IHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMztcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmVtcHR5LXN0YXRlIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLTN4bCkgdmFyKC0tc3BhY2luZy14bCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG59XG5cbi5lbXB0eS1zdGF0ZS1pY29uIHtcbiAgZm9udC1zaXplOiAzcmVtO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uZW1wdHktc3RhdGUtdGl0bGUge1xuICBmb250LXNpemU6IDEuMTI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5KTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1zbSk7XG59XG5cbi5lbXB0eS1zdGF0ZS1kZXNjcmlwdGlvbiB7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjaW5nLWxnKTtcbn1cblxuLyogTW9iaWxlIGFkanVzdG1lbnRzICovXG5AbWVkaWEgKG1heC13aWR0aDogNjM5cHgpIHtcbiAgLnRpY2tlci1pbnB1dC1yb3cge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIH1cblxuICAucmVzZWFyY2gtaGVhZGVyIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICB9XG5cbiAgLnJlc2VhcmNoLWFjdGlvbnMge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAuc2VjdGlvbi1maWx0ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLnNvdXJjZXMtZ3JpZCAuc291cmNlLWNhcmQge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbiAgfVxuICAuc291cmNlcy1ncmlkIC5zb3VyY2UtY2FyZDpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xuICB9XG4gIC5zb3VyY2VzLWdyaWQgLnNvdXJjZS1pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5zb3VyY2VzLWdyaWQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcbiAgfVxuXG4gIC5wb3B1bGFyLXRpY2tlcnMge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB9XG5cbiAgLnByb21wdHMtaGVhZGVyIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy1tZCk7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIH1cblxuICAucHJvbXB0cy1ncmlkIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgfVxufVxuXG4vKiBEYXJrIG1vZGUgYWRqdXN0bWVudHMgKi9cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgLnRpY2tlci1pbnB1dCxcbiAgLnNlY3Rpb24tZmlsdGVyLFxuICAuc291cmNlLWNhcmQsXG4gIC50aWNrZXItY2hpcCxcbiAgLnByb21wdC1jYXJkIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC5zZWN0aW9uLWZpbHRlcjpob3ZlcixcbiAgLnRpY2tlci1jaGlwOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC50aWNrZXItY2hpcC5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LXNpbXBsZSk7XG4gIH1cblxuICAuc291cmNlLWNhcmQ6aG92ZXIsXG4gIC5wcm9tcHQtY2FyZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gIH1cbn1cblxuLyogVG91Y2ggZGV2aWNlIG9wdGltaXphdGlvbnMgKi9cbkBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgLnNvdXJjZS1jYXJkOmhvdmVyLFxuICAudGlja2VyLWNoaXA6aG92ZXIsXG4gIC5wcm9tcHQtY2FyZDpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLnNvdXJjZS1jYXJkOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTtcbiAgfVxuXG4gIC50aWNrZXItY2hpcDphY3RpdmUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Nyk7XG4gIH1cblxuICAucHJvbXB0LWNhcmQ6YWN0aXZlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTkpO1xuICB9XG59XG5cblxuLyogcGFnZXMvd2lkZ2V0cy93aWRnZXQtc2hhcmVkLmNzcyAqL1xuLyoqXG4gKiBTaGFyZWQgc3R5bGVzIGZvciBhbGwgd2lkZ2V0IHBhZ2VzXG4gKiBVc2UgdGhlc2UgY2xhc3NlcyBjb25zaXN0ZW50bHkgYWNyb3NzIHdpZGdldCBpbXBsZW1lbnRhdGlvbnNcbiAqL1xuXG4ud2lkZ2V0LXBhZ2Uge1xuICBtaW4taGVpZ2h0OiAxMDBkdmg7XG4gIHBhZGRpbmctdG9wOiA3MHB4O1xufVxuXG4ud2lkZ2V0LWhlYWRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZykgdmFyKC0tc3BhY2luZy1sZykgdmFyKC0tc3BhY2luZy1tZCk7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xufVxuXG4ud2lkZ2V0LXRpdGxlIHtcbiAgZm9udC1zaXplOiBjbGFtcCgxLjVyZW0sIDMuNXZ3ICsgMC41cmVtLCAycmVtKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy14cyk7XG4gIGFuaW1hdGlvbjogZmFkZUluRG93biAwLjVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG59XG5cbi53aWRnZXQtZGVzY3JpcHRpb24ge1xuICBmb250LXNpemU6IGNsYW1wKDAuODc1cmVtLCAxLjV2dyArIDAuNXJlbSwgMXJlbSk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIG1heC13aWR0aDogNTUwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBhbmltYXRpb246IGZhZGVJblVwIDAuNXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAwLjFzIGJvdGg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi53aWRnZXQtY29udGVudCB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMCB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgMC4xNXMgYm90aDtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2luZy1tZCk7XG4gIGRpc3BsYXk6IGdyaWQ7XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluRG93biB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmYWRlSW5VcCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuXG4vKiBNb2JpbGU6IFNtYWxsIGRldmljZXMgKHBvcnRyYWl0IHBob25lcykgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAud2lkZ2V0LXBhZ2Uge1xuICAgIHBhZGRpbmctdG9wOiBjYWxjKDEwcHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCkpO1xuICB9XG5cbiAgLndpZGdldC1oZWFkZXIge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpIHZhcigtLXNwYWNpbmctbWQpIHZhcigtLXNwYWNpbmctc20pO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctc20pO1xuICB9XG5cbiAgLndpZGdldC10aXRsZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICB9XG5cbiAgLndpZGdldC1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIHZhcigtLXNwYWNpbmctc20pO1xuICB9XG59XG5cbi8qIE1vYmlsZTogTWVkaXVtIGRldmljZXMgKGxhbmRzY2FwZSBwaG9uZXMpICovXG5AbWVkaWEgKG1pbi13aWR0aDogNDgxcHgpIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAud2lkZ2V0LXBhZ2Uge1xuICAgIHBhZGRpbmctdG9wOiBjYWxjKDIwcHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCkpO1xuICB9XG5cbiAgLndpZGdldC1oZWFkZXIge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbWQpIHZhcigtLXNwYWNpbmctbWQpIHZhcigtLXNwYWNpbmctc20pO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xuICB9XG5cbiAgLndpZGdldC1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIHZhcigtLXNwYWNpbmctbWQpO1xuICB9XG59XG5cbi8qIFRhYmxldDogU21hbGwgdG8gbWVkaXVtIHRhYmxldHMgKi9cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAud2lkZ2V0LXBhZ2Uge1xuICAgIHBhZGRpbmctdG9wOiBjYWxjKDUwcHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCkpO1xuICB9XG5cbiAgLndpZGdldC1oZWFkZXIge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGcpIHZhcigtLXNwYWNpbmctbGcpIHZhcigtLXNwYWNpbmctbWQpO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctbWQpO1xuICB9XG5cbiAgLndpZGdldC1kZXNjcmlwdGlvbiB7XG4gICAgbWF4LXdpZHRoOiA2MDBweDtcbiAgfVxuXG4gIC53aWRnZXQtY29udGVudCB7XG4gICAgcGFkZGluZzogMCB2YXIoLS1zcGFjaW5nLWxnKTtcbiAgfVxufVxuXG4vKiBEZXNrdG9wOiBMYXJnZSB0YWJsZXRzIGFuZCBkZXNrdG9wcyAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDEwMjVweCkgYW5kIChtYXgtd2lkdGg6IDE0NDBweCkge1xuICAud2lkZ2V0LWhlYWRlciB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14bCkgdmFyKC0tc3BhY2luZy14bCkgdmFyKC0tc3BhY2luZy1tZCk7XG4gIH1cblxuICAud2lkZ2V0LWRlc2NyaXB0aW9uIHtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICB9XG5cbiAgLndpZGdldC1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIHZhcigtLXNwYWNpbmcteGwpO1xuICB9XG59XG5cbi8qIERlc2t0b3A6IExhcmdlIHNjcmVlbnMgKi9cbkBtZWRpYSAobWluLXdpZHRoOiAxNDQxcHgpIHtcbiAgLndpZGdldC1oZWFkZXIge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteGwpIHZhcigtLXNwYWNpbmctMnhsKSB2YXIoLS1zcGFjaW5nLW1kKTtcbiAgfVxuXG4gIC53aWRnZXQtZGVzY3JpcHRpb24ge1xuICAgIG1heC13aWR0aDogNjUwcHg7XG4gIH1cblxuICAud2lkZ2V0LWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2luZy0yeGwpO1xuICAgIG1heC13aWR0aDogMTQwMHB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICB9XG59XG5cbiJdfQ== */