/* Essential Custom Styles - KKU Apps Reserve System */
/* CSS Variables for shadcn/ui compatibility */
:root {
  --background: 0 0% 100%;
  --foreground: 222.2 84% 4.9%;
  --card: 0 0% 100%;
  --card-foreground: 222.2 84% 4.9%;
  --popover: 0 0% 100%;
  --popover-foreground: 222.2 84% 4.9%;
  --primary: 222.2 47.4% 11.2%;
  --primary-foreground: 210 40% 98%;
  --secondary: 210 40% 96%;
  --secondary-foreground: 222.2 84% 4.9%;
  --muted: 210 40% 96%;
  --muted-foreground: 215.4 16.3% 46.9%;
  --accent: 210 40% 96%;
  --accent-foreground: 222.2 84% 4.9%;
  --destructive: 0 84.2% 60.2%;
  --destructive-foreground: 210 40% 98%;
  --success: 142.1 76.2% 36.3%;
  --success-foreground: 210 40% 98%;
  --border: 214.3 31.8% 91.4%;
  --input: 214.3 31.8% 91.4%;
  --ring: 222.2 84% 4.9%;
  --radius: 0.5rem;
}

/* Professional DataTable Empty States */
.datatable-empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 3rem 2rem;
  text-align: center;
  min-height: 200px;
}

.datatable-empty-state .empty-icon {
  margin-bottom: 1rem;
  opacity: 0.6;
}

.datatable-empty-state .empty-title {
  font-size: 1.125rem;
  font-weight: 600;
  color: #374151;
  margin-bottom: 0.5rem;
  margin-top: 0;
}

.datatable-empty-state .empty-description {
  font-size: 0.875rem;
  color: #6b7280;
  line-height: 1.5;
  margin: 0;
}

/* Professional DataTable Loading States */
.datatable-loading {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 2rem;
  text-align: center;
  min-height: 120px;
}

.datatable-loading span {
  margin-top: 0.75rem;
  font-size: 0.875rem;
  color: #6b7280;
  font-weight: 500;
}

/* Loading Spinner Animation */
.loading-spinner {
  width: 2rem;
  height: 2rem;
  border: 2px solid #e5e7eb;
  border-top: 2px solid #3b82f6;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}
/* Enhance DataTable processing indicator */
.dataTables_processing {
  background: rgba(255, 255, 255, 0.95) !important;
  border: 1px solid #e5e7eb !important;
  border-radius: 0.5rem !important;
  box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05) !important;
  color: #374151 !important;
  font-weight: 500 !important;
  padding: 1rem !important;
}

/* Stat Card Loading Animation */
@keyframes blink {
  0%, 50% {
    opacity: 1;
  }
  51%, 100% {
    opacity: 0.3;
  }
}
.stat-loading-indicator {
  animation: blink 1s infinite;
}

.stat-loading .stat-loading-indicator {
  display: inline !important;
}

.stat-loading .stat-actual-value {
  display: none !important;
}

/* Gradient text effect */
.gradient-text {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* Admin account badge component */
.account-badge {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: rgba(255, 255, 255, 0.95);
  backdrop-filter: blur(10px);
  border-radius: 2rem;
  padding: 0.75rem 1.5rem;
  margin-bottom: 2rem;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
}

.account-icon {
  width: 32px;
  height: 32px;
  color: #4a5568;
}

.account-name {
  font-weight: 600;
  color: #2d3748;
  font-size: 1.1rem;
  margin-left: 1rem;
  flex: 1;
}

.btn-logout {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
  padding: 0.75rem 1.5rem;
  border-radius: 10px;
  text-decoration: none;
  font-weight: 500;
  transition: all 0.3s ease;
}

.btn-logout:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
  color: white;
}

/* FullCalendar customizations */
.fc-row .fc-content-skeleton {
  padding-block-end: 0;
}

.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number {
  float: none;
  text-align: center;
  width: 100%;
  display: block;
  padding: 0;
  line-height: 4em;
  font-weight: bold;
}

/* FullCalendar today styling - fix for Tailwind reset */
#calendar .fc-day-today {
  background: rgba(59, 130, 246, 0.1) !important;
  border: 1px solid #3b82f6 !important;
}

#calendar .fc-day-today .fc-daygrid-day-number {
  background: #3b82f6 !important;
  color: white !important;
  border-radius: 50% !important;
  width: 28px !important;
  height: 28px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  margin: auto !important;
  font-weight: bold !important;
}

/* Fix FullCalendar borders that get reset by Tailwind */
.fc-daygrid-day {
  border: 1px solid #e5e7eb !important;
}

.fc-col-header-cell {
  border: 1px solid #e5e7eb !important;
}

.fc-daygrid-day-frame {
  border: none !important;
}

/* Booking form and list styles */
.booking-container {
  display: flex;
  flex-direction: row;
  width: 100%;
  max-width: 960px;
  align-items: stretch;
  justify-content: center;
  margin-bottom: 1rem;
}

.booking-form {
  flex-grow: 0;
  min-width: 256px;
}

.booking-list {
  width: 100%;
  max-width: 512px;
}

.booking-list-items {
  width: 100%;
  list-style: none;
  padding: 0;
  margin-bottom: 0;
  max-height: 372px;
  overflow-y: scroll;
}

.booking-list-items > li {
  padding-top: 0.5em;
  border-top: solid 1px rgba(44, 62, 80, 0.2);
}

.booking-list-items > li:not(:last-child) {
  margin-bottom: 0.5em;
}

.btn-cancel-reserve {
  cursor: pointer;
}

/* Reserve form styling */
#reserve_form {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: flex-start;
  background-color: white;
  padding: 1rem;
}

#reserve_form input[type=datetime-local],
#reserve_form input[type=number],
#reserve_form input[type=text] {
  height: 40px;
}

#reserve_form input[type=datetime-local],
#reserve_form input[type=text] {
  min-width: 224px;
}

#reserve_form > *:not(:last-child) {
  margin-bottom: 1em;
}

#reserve_form .repeat-container {
  display: none;
}

#reserve_form .repeat-container.show {
  display: flex;
}

#reserve_form > #username,
#reserve_form > #faculty_code {
  display: none;
}

#reserve_form .checkbox-label {
  margin-bottom: 0;
  display: flex;
  align-items: center;
  cursor: pointer;
}

#reserve_form .checkbox-label > input[type=checkbox] {
  margin-right: 0.5em;
}

/* shadcn/ui Design System Components */
/* Button Component - Based on shadcn/ui button */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  border-radius: 0.375rem;
  padding: 0.5rem 1rem;
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1.25rem;
  text-decoration: none;
  transition: all 0.15s ease-in-out;
  cursor: pointer;
  border: 1px solid transparent;
  min-height: 2.5rem;
  white-space: nowrap;
  position: relative;
  font-family: inherit;
}
.btn:focus-visible {
  outline: 2px solid transparent;
  outline-offset: 2px;
  box-shadow: 0 0 0 2px hsl(var(--ring));
}
.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  pointer-events: none;
}

/* Button Variants */
.btn-primary {
  background-color: hsl(var(--primary));
  color: hsl(var(--primary-foreground));
}
.btn-primary:hover:not(:disabled) {
  background-color: hsl(var(--primary)/0.9);
}

.btn-secondary {
  background-color: hsl(var(--secondary));
  color: hsl(var(--secondary-foreground));
  border: 1px solid hsl(var(--border));
}
.btn-secondary:hover:not(:disabled) {
  background-color: hsl(var(--secondary)/0.8);
}

.btn-destructive {
  background-color: hsl(var(--destructive));
  color: hsl(var(--destructive-foreground));
}
.btn-destructive:hover:not(:disabled) {
  background-color: hsl(var(--destructive)/0.9);
}

.btn-success {
  background-color: hsl(var(--success));
  color: hsl(var(--success-foreground));
}
.btn-success:hover:not(:disabled) {
  background-color: hsl(var(--success)/0.9);
}

.btn-outline {
  border: 1px solid hsl(var(--border));
  background-color: hsl(var(--background));
  color: hsl(var(--foreground));
}
.btn-outline:hover:not(:disabled) {
  background-color: hsl(var(--accent));
  color: hsl(var(--accent-foreground));
}

.btn-ghost {
  background-color: transparent;
  color: hsl(var(--foreground));
}
.btn-ghost:hover:not(:disabled) {
  background-color: hsl(var(--accent));
  color: hsl(var(--accent-foreground));
}

.btn-link {
  background-color: transparent;
  color: hsl(var(--primary));
  text-decoration: underline;
  text-underline-offset: 4px;
}
.btn-link:hover:not(:disabled) {
  text-decoration: none;
}

/* Button Sizes */
.btn-sm {
  padding: 0.375rem 0.75rem;
  font-size: 0.8125rem;
  min-height: 2.25rem;
}

.btn-lg {
  padding: 0.75rem 2rem;
  font-size: 1rem;
  min-height: 2.75rem;
}

.btn-icon {
  height: 2.5rem;
  width: 2.5rem;
  padding: 0;
}

/* Card Component - Based on shadcn/ui card */
.card {
  border-radius: 0.5rem;
  border: 1px solid hsl(214.3, 31.8%, 91.4%);
  background-color: hsl(0, 0%, 100%);
  color: hsl(222.2, 84%, 4.9%);
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
}

.card-header {
  display: flex;
  flex-direction: column;
  gap: 0.375rem;
  padding: 1.5rem;
}

.card-title {
  font-size: 1.125rem;
  font-weight: 600;
  line-height: 1;
  letter-spacing: -0.025em;
}

.card-description {
  font-size: 0.875rem;
  color: hsl(215.4, 16.3%, 46.9%);
}

.card-content {
  padding: 1.5rem;
  padding-top: 0;
}

.card-footer {
  display: flex;
  align-items: center;
  padding: 1.5rem;
  padding-top: 0;
}

/* Input Component - Based on shadcn/ui input */
.input {
  display: flex;
  height: 2.5rem;
  width: 100%;
  border-radius: 0.375rem;
  border: 1px solid hsl(214.3, 31.8%, 91.4%);
  background-color: hsl(0, 0%, 100%);
  padding: 0.5rem 0.75rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  color: hsl(222.2, 84%, 4.9%);
  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.input:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  border-color: hsl(221.2, 83.2%, 53.3%);
  box-shadow: 0 0 0 2px hsla(221.2, 83.2%, 53.3%, 0.2);
}
.input::placeholder {
  color: hsl(215.4, 16.3%, 46.9%);
}
.input:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

/* Select Component - Based on shadcn/ui select */
.select {
  display: flex;
  height: 2.5rem;
  width: 100%;
  align-items: center;
  justify-content: between;
  border-radius: 0.375rem;
  border: 1px solid hsl(214.3, 31.8%, 91.4%);
  background-color: hsl(0, 0%, 100%);
  padding: 0.5rem 0.75rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  color: hsl(222.2, 84%, 4.9%);
}
.select:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  border-color: hsl(221.2, 83.2%, 53.3%);
  box-shadow: 0 0 0 2px hsla(221.2, 83.2%, 53.3%, 0.2);
}
.select:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

/* Badge Component - Based on shadcn/ui badge */
.badge {
  display: inline-flex;
  align-items: center;
  border-radius: 9999px;
  padding: 0.25rem 0.625rem;
  font-size: 0.75rem;
  font-weight: 600;
  line-height: 1;
  letter-spacing: 0.025em;
  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out;
}

.badge-default {
  border: 1px solid transparent;
  background-color: hsl(222.2, 84%, 4.9%);
  color: hsl(210, 40%, 98%);
}

.badge-secondary {
  border: 1px solid transparent;
  background-color: hsl(210, 40%, 96%);
  color: hsl(222.2, 84%, 4.9%);
}

.badge-destructive {
  border: 1px solid transparent;
  background-color: hsl(0, 84.2%, 60.2%);
  color: hsl(210, 40%, 98%);
}

.badge-outline {
  border: 1px solid hsl(214.3, 31.8%, 91.4%);
  color: hsl(222.2, 84%, 4.9%);
}

/* Table Component - Based on shadcn/ui table */
.table {
  width: 100%;
  caption-side: bottom;
  font-size: 0.875rem;
}

.table-header {
  border-bottom: 1px solid hsl(214.3, 31.8%, 91.4%);
}

.table-row {
  border-bottom: 1px solid hsl(214.3, 31.8%, 91.4%);
  transition: background-color 0.15s ease-in-out;
}
.table-row:hover {
  background-color: hsl(210, 40%, 98%);
}
.table-row:last-child {
  border-bottom: 0;
}

.table-head {
  height: 3rem;
  padding: 0.75rem;
  text-align: left;
  font-weight: 500;
  color: hsl(215.4, 16.3%, 46.9%);
}

.table-cell {
  padding: 0.75rem;
  align-items: center;
}

/* Alert Component - Based on shadcn/ui alert */
.alert {
  position: relative;
  width: 100%;
  border-radius: 0.5rem;
  border: 1px solid hsl(214.3, 31.8%, 91.4%);
  padding: 1rem;
  color: hsl(222.2, 84%, 4.9%);
}

.alert-destructive {
  border-color: hsla(0, 84.2%, 60.2%, 0.5);
  color: hsl(0, 84.2%, 60.2%);
  background-color: hsla(0, 84.2%, 60.2%, 0.1);
}

.alert-warning {
  border-color: hsla(38, 92%, 50%, 0.5);
  color: hsl(38, 92%, 50%);
  background-color: hsla(38, 92%, 50%, 0.1);
}

.alert-success {
  border-color: hsla(142.1, 76.2%, 36.3%, 0.5);
  color: hsl(142.1, 76.2%, 36.3%);
  background-color: hsla(142.1, 76.2%, 36.3%, 0.1);
}

/* Label Component - Based on shadcn/ui label */
.label {
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1.25rem;
  color: hsl(222.2, 84%, 4.9%);
}

/* Separator Component - Based on shadcn/ui separator */
.separator {
  flex-shrink: 0;
  background-color: hsl(214.3, 31.8%, 91.4%);
  height: 1px;
  width: 100%;
}

/* SweetAlert2 Modal Component - shadcn/ui styling */
.swal-modal {
  border-radius: calc(var(--radius) + 2px);
  border: 1px solid hsl(var(--border));
  background-color: hsl(var(--background));
  color: hsl(var(--foreground));
  font-family: inherit;
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
}

.swal-modal-title {
  color: hsl(var(--foreground));
  font-size: 1.125rem;
  font-weight: 600;
  line-height: 1.75rem;
}

.swal-modal-content {
  color: hsl(var(--muted-foreground));
  font-size: 0.875rem;
  line-height: 1.5;
  text-align: center;
}

/* Form modal specific styling */
.swal-form-modal {
  max-width: 500px;
  text-align: left;
}

.swal-form-title {
  text-align: left !important;
  margin-bottom: 1rem;
}

.swal-form-content {
  text-align: left !important;
  margin-bottom: 1.5rem;
}

.swal-form-actions {
  justify-content: flex-end !important;
  gap: 0.5rem !important;
  margin-top: 1.5rem !important;
}

/* Force SweetAlert2 buttons to use our button styles */
.swal2-actions button {
  margin: 0 0.25rem !important;
  min-width: 80px !important;
}

/* Button ordering for forms - Cancel left, Confirm right */
.swal-form-modal .swal2-cancel {
  order: 1 !important;
}

.swal-form-modal .swal2-confirm {
  order: 2 !important;
}

/* Hide deny button completely - all possible selectors */
.swal2-deny,
.swal2-styled.swal2-deny,
button.swal2-deny {
  display: none !important;
  visibility: hidden !important;
}

/* For non-form modals, keep normal order */
.swal2-confirm:not(.swal-form-modal .swal2-confirm) {
  order: 2 !important;
}

.swal2-cancel:not(.swal-form-modal .swal2-cancel) {
  order: 1 !important;
}

/* Override ALL SweetAlert2 button styles */
.swal2-styled,
.swal2-confirm,
.swal2-cancel,
.swal2-deny {
  /* Reset all SweetAlert2 styles */
  border: 1px solid transparent !important;
  border-radius: 0.375rem !important;
  box-shadow: none !important;
  font-size: 0.875rem !important;
  font-weight: 500 !important;
  margin: 0 0.25rem !important;
  padding: 0.5rem 1rem !important;
  text-decoration: none !important;
  transition: all 0.15s ease-in-out !important;
  cursor: pointer !important;
  min-height: 2.5rem !important;
  white-space: nowrap !important;
  position: relative !important;
  font-family: inherit !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 0.5rem !important;
  line-height: 1.25rem !important;
}

/* Primary button styling for confirm */
.swal2-confirm {
  background-color: hsl(var(--primary)) !important;
  color: hsl(var(--primary-foreground)) !important;
}

.swal2-confirm:hover {
  background-color: hsl(var(--primary)/0.9) !important;
}

/* Secondary button styling for cancel */
.swal2-cancel {
  background-color: hsl(var(--secondary)) !important;
  color: hsl(var(--secondary-foreground)) !important;
  border: 1px solid hsl(var(--border)) !important;
}

.swal2-cancel:hover {
  background-color: hsl(var(--secondary)/0.8) !important;
}

/* Destructive button styling for deny/delete */
.swal2-deny {
  background-color: hsl(var(--destructive)) !important;
  color: hsl(var(--destructive-foreground)) !important;
}

.swal2-deny:hover {
  background-color: hsl(var(--destructive)/0.9) !important;
}

/* SweetAlert2 Icon Styling */
.swal2-icon {
  border: none !important;
}

.swal2-icon.swal2-success {
  color: hsl(var(--success)) !important;
  border-color: hsl(var(--success)) !important;
}

.swal2-icon.swal2-error {
  color: hsl(var(--destructive)) !important;
  border-color: hsl(var(--destructive)) !important;
}

.swal2-icon.swal2-warning {
  color: hsl(38, 92%, 50%) !important;
  border-color: hsl(38, 92%, 50%) !important;
}

.swal2-icon.swal2-question {
  color: hsl(var(--primary)) !important;
  border-color: hsl(var(--primary)) !important;
}

/* Ensure focus states work properly */
.swal2-confirm:focus,
.swal2-cancel:focus,
.swal2-deny:focus {
  outline: 2px solid transparent !important;
  outline-offset: 2px !important;
  box-shadow: 0 0 0 2px hsl(var(--ring)) !important;
}

/* Remove SweetAlert2 default focus outline */
.swal2-popup:focus {
  outline: none !important;
}

.swal2-actions {
  gap: 0.5rem !important;
  margin: 1rem 0 0 0 !important;
  justify-content: center !important;
}

/* Form modal button alignment */
.swal-form-modal .swal2-actions {
  justify-content: flex-end !important;
  flex-direction: row !important;
  padding-right: 1.5rem !important;
  margin-right: 0 !important;
}

/* Fix SweetAlert2 title and content alignment for forms */
.swal-form-modal .swal2-title {
  text-align: left !important;
}

.swal-form-modal .swal2-html-container {
  text-align: left !important;
  margin: 0 !important;
}

/* Loading modal - ensure no buttons appear */
.swal-loading-modal .swal2-actions {
  display: none !important;
}

.swal-loading-modal .swal2-confirm,
.swal-loading-modal .swal2-cancel,
.swal-loading-modal .swal2-deny {
  display: none !important;
  visibility: hidden !important;
}

/* Dialog Component - Based on shadcn/ui dialog */
.dialog {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: rgba(0, 0, 0, 0.8);
}

.dialog-content {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 1rem;
  border: 1px solid hsl(var(--border));
  background-color: hsl(var(--background));
  padding: 1.5rem;
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
  border-radius: var(--radius);
  width: 100%;
  max-width: 32rem;
  max-height: 90vh;
  overflow-y: auto;
}

.dialog-header {
  display: flex;
  flex-direction: column;
  gap: 0.375rem;
  text-align: center;
  padding-bottom: 1rem;
}

.dialog-title {
  font-size: 1.125rem;
  font-weight: 600;
  line-height: 1;
  letter-spacing: -0.025em;
  color: hsl(var(--foreground));
}

.dialog-description {
  font-size: 0.875rem;
  color: hsl(var(--muted-foreground));
}

.dialog-footer {
  display: flex;
  flex-direction: column-reverse;
  gap: 0.5rem;
  padding-top: 1rem;
}

@media (min-width: 640px) {
  .dialog-footer {
    flex-direction: row;
    justify-content: flex-end;
  }
}
/* Toast/Notification Component - Based on shadcn/ui toast */
.toast-notification {
  position: relative;
  pointer-events: auto;
  display: flex;
  width: fit-content;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  overflow: hidden;
  border-radius: calc(var(--radius) - 2px);
  border: 1px solid hsl(var(--border));
  background-color: hsl(var(--background));
  padding: 1rem;
  color: hsl(var(--foreground));
  box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
  transition: all 0.2s ease-in-out;
  font-family: inherit;
}

.toast-notification:hover {
  box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}

/* Form Components Enhancement */
.form-group {
  display: flex;
  flex-direction: column;
  gap: 0.375rem;
}

.form-label {
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1.25rem;
  color: hsl(var(--foreground));
  margin-bottom: 0.25rem;
}

.form-input, .form-textarea, .form-select {
  display: flex;
  height: 2.5rem;
  width: 100%;
  border-radius: calc(var(--radius) - 2px);
  border: 1px solid hsl(var(--border));
  background-color: hsl(var(--background));
  padding: 0.5rem 0.75rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  color: hsl(var(--foreground));
  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.form-input:focus, .form-textarea:focus, .form-select:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  border-color: hsl(var(--ring));
  box-shadow: 0 0 0 2px hsl(var(--ring)/0.2);
}
.form-input::placeholder, .form-textarea::placeholder, .form-select::placeholder {
  color: hsl(var(--muted-foreground));
}
.form-input:disabled, .form-textarea:disabled, .form-select:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

.form-select {
  cursor: pointer;
}
.form-select:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  border-color: hsl(var(--ring));
  box-shadow: 0 0 0 2px hsl(var(--ring)/0.2);
}

.form-textarea {
  min-height: 5rem;
  resize: vertical;
}

.form-checkbox {
  height: 1rem;
  width: 1rem;
  border-radius: calc(var(--radius) - 4px);
  border: 1px solid hsl(var(--border));
  background-color: hsl(var(--background));
  accent-color: hsl(var(--primary));
}
.form-checkbox:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  box-shadow: 0 0 0 2px hsl(var(--ring)/0.2);
}

/* Responsive design */
@media screen and (max-width: 599.99px) {
  .account-badge {
    flex-direction: column;
    text-align: center;
    gap: 1rem;
  }
  .booking-container {
    flex-direction: column;
    align-items: stretch;
  }
  .booking-container > * {
    margin-right: 0 !important;
    margin-bottom: 1rem;
  }
  #reserve_form {
    flex-direction: column;
  }
  #reserve_form > *:not(:last-child) {
    margin-right: 0;
    margin-bottom: 1em;
  }
  /* Responsive button adjustments */
  .btn-shadcn {
    width: 100%;
    justify-content: center;
  }
}
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImN1c3RvbS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0FBQ0E7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7SUFDSTs7RUFFSjtJQUNJOzs7QUFJUjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0EsWUFDSTtFQUVKO0VBQ0E7RUFDQTs7O0FBR0o7QUFDQTtFQUNJO0lBRUk7O0VBRUo7SUFFSTs7O0FBSVI7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7QUFDQTtFQUNJO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7QUFDQTtFQUNJOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7QUFDQTtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtBQUFBO0FBQUE7RUFHSTs7O0FBR0o7QUFBQTtFQUVJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtBQUFBO0VBRUk7OztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7OztBQUdKO0FBRUE7QUFDQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTtFQUNBO0VBQ0E7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7OztBQUlSO0FBQ0E7RUFDSTtFQUNBOztBQUVBO0VBQ0k7OztBQUlSO0VBQ0k7RUFDQTtFQUNBOztBQUVBO0VBQ0k7OztBQUlSO0VBQ0k7RUFDQTs7QUFFQTtFQUNJOzs7QUFJUjtFQUNJO0VBQ0E7O0FBRUE7RUFDSTs7O0FBSVI7RUFDSTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTtFQUNBOzs7QUFJUjtFQUNJO0VBQ0E7O0FBRUE7RUFDSTtFQUNBOzs7QUFJUjtFQUNJO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0k7OztBQUlSO0FBQ0E7RUFDSTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7QUFDQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsWUFDSTs7O0FBSVI7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0FBQ0E7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFlBQ0k7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7QUFHSjtFQUNJOztBQUdKO0VBQ0k7RUFDQTs7O0FBSVI7QUFDQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJO0VBQ0E7RUFDQTtFQUNBOztBQUdKO0VBQ0k7RUFDQTs7O0FBSVI7QUFDQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxZQUNJOzs7QUFJUjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7OztBQUdKO0FBQ0E7RUFDSTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7OztBQUdKO0VBQ0k7RUFDQTs7QUFFQTtFQUNJOztBQUdKO0VBQ0k7OztBQUlSO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0FBQ0E7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7QUFDQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7QUFDQTtFQUNJO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7QUFDQTtFQUNJO0VBQ0E7OztBQUdKO0FBQ0E7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7QUFDQTtBQUFBO0FBQUE7RUFHSTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7OztBQUdKO0VBQ0k7OztBQUdKO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFJSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTs7O0FBR0o7RUFDSTs7O0FBR0o7QUFDQTtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTs7O0FBR0o7QUFDQTtFQUNJO0VBQ0E7OztBQUdKO0VBQ0k7OztBQUdKO0FBQ0E7RUFDSTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtBQUNBO0FBQUE7QUFBQTtFQUdJO0VBQ0E7RUFDQTs7O0FBR0o7QUFDQTtFQUNJOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7QUFDQTtFQUNJO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7OztBQUdKO0VBQ0k7RUFDQTs7O0FBR0o7QUFDQTtFQUNJOzs7QUFHSjtBQUFBO0FBQUE7RUFHSTtFQUNBOzs7QUFHSjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7SUFDSTtJQUNBOzs7QUFJUjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxZQUNJO0VBRUo7RUFDQTs7O0FBR0o7RUFDSSxZQUNJOzs7QUFJUjtBQUNBO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxZQUNJOztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7O0FBR0o7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7OztBQUlSO0VBRUk7O0FBRUE7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBSVI7RUFFSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJO0VBQ0E7RUFDQTs7O0FBSVI7QUFDQTtFQUNJO0lBQ0k7SUFDQTtJQUNBOztFQUdKO0lBQ0k7SUFDQTs7RUFHSjtJQUNJO0lBQ0E7O0VBR0o7SUFDSTs7RUFHSjtJQUNJO0lBQ0E7O0FBR0o7RUFDQTtJQUNJO0lBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBFc3NlbnRpYWwgQ3VzdG9tIFN0eWxlcyAtIEtLVSBBcHBzIFJlc2VydmUgU3lzdGVtICovXG5cbi8qIENTUyBWYXJpYWJsZXMgZm9yIHNoYWRjbi91aSBjb21wYXRpYmlsaXR5ICovXG46cm9vdCB7XG4gICAgLS1iYWNrZ3JvdW5kOiAwIDAlIDEwMCU7XG4gICAgLS1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTtcbiAgICAtLWNhcmQ6IDAgMCUgMTAwJTtcbiAgICAtLWNhcmQtZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7XG4gICAgLS1wb3BvdmVyOiAwIDAlIDEwMCU7XG4gICAgLS1wb3BvdmVyLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklO1xuICAgIC0tcHJpbWFyeTogMjIyLjIgNDcuNCUgMTEuMiU7XG4gICAgLS1wcmltYXJ5LWZvcmVncm91bmQ6IDIxMCA0MCUgOTglO1xuICAgIC0tc2Vjb25kYXJ5OiAyMTAgNDAlIDk2JTtcbiAgICAtLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTtcbiAgICAtLW11dGVkOiAyMTAgNDAlIDk2JTtcbiAgICAtLW11dGVkLWZvcmVncm91bmQ6IDIxNS40IDE2LjMlIDQ2LjklO1xuICAgIC0tYWNjZW50OiAyMTAgNDAlIDk2JTtcbiAgICAtLWFjY2VudC1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTtcbiAgICAtLWRlc3RydWN0aXZlOiAwIDg0LjIlIDYwLjIlO1xuICAgIC0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7XG4gICAgLS1zdWNjZXNzOiAxNDIuMSA3Ni4yJSAzNi4zJTtcbiAgICAtLXN1Y2Nlc3MtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7XG4gICAgLS1ib3JkZXI6IDIxNC4zIDMxLjglIDkxLjQlO1xuICAgIC0taW5wdXQ6IDIxNC4zIDMxLjglIDkxLjQlO1xuICAgIC0tcmluZzogMjIyLjIgODQlIDQuOSU7XG4gICAgLS1yYWRpdXM6IDAuNXJlbTtcbn1cblxuLyogUHJvZmVzc2lvbmFsIERhdGFUYWJsZSBFbXB0eSBTdGF0ZXMgKi9cbi5kYXRhdGFibGUtZW1wdHktc3RhdGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBhZGRpbmc6IDNyZW0gMnJlbTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWluLWhlaWdodDogMjAwcHg7XG59XG5cbi5kYXRhdGFibGUtZW1wdHktc3RhdGUgLmVtcHR5LWljb24ge1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gICAgb3BhY2l0eTogMC42O1xufVxuXG4uZGF0YXRhYmxlLWVtcHR5LXN0YXRlIC5lbXB0eS10aXRsZSB7XG4gICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMzc0MTUxO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG4uZGF0YXRhYmxlLWVtcHR5LXN0YXRlIC5lbXB0eS1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBjb2xvcjogIzZiNzI4MDtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIG1hcmdpbjogMDtcbn1cblxuLyogUHJvZmVzc2lvbmFsIERhdGFUYWJsZSBMb2FkaW5nIFN0YXRlcyAqL1xuLmRhdGF0YWJsZS1sb2FkaW5nIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAycmVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtaW4taGVpZ2h0OiAxMjBweDtcbn1cblxuLmRhdGF0YWJsZS1sb2FkaW5nIHNwYW4ge1xuICAgIG1hcmdpbi10b3A6IDAuNzVyZW07XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBjb2xvcjogIzZiNzI4MDtcbiAgICBmb250LXdlaWdodDogNTAwO1xufVxuXG4vKiBMb2FkaW5nIFNwaW5uZXIgQW5pbWF0aW9uICovXG4ubG9hZGluZy1zcGlubmVyIHtcbiAgICB3aWR0aDogMnJlbTtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgYm9yZGVyOiAycHggc29saWQgI2U1ZTdlYjtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgIzNiODJmNjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBzcGluIHtcbiAgICAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICB9XG59XG5cbi8qIEVuaGFuY2UgRGF0YVRhYmxlIHByb2Nlc3NpbmcgaW5kaWNhdG9yICovXG4uZGF0YVRhYmxlc19wcm9jZXNzaW5nIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTdlYiAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgMTBweCAxNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjEpLFxuICAgICAgICAwIDRweCA2cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMDUpICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICMzNzQxNTEgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogNTAwICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xufVxuXG4vKiBTdGF0IENhcmQgTG9hZGluZyBBbmltYXRpb24gKi9cbkBrZXlmcmFtZXMgYmxpbmsge1xuICAgIDAlLFxuICAgIDUwJSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDUxJSxcbiAgICAxMDAlIHtcbiAgICAgICAgb3BhY2l0eTogMC4zO1xuICAgIH1cbn1cblxuLnN0YXQtbG9hZGluZy1pbmRpY2F0b3Ige1xuICAgIGFuaW1hdGlvbjogYmxpbmsgMXMgaW5maW5pdGU7XG59XG5cbi5zdGF0LWxvYWRpbmcgLnN0YXQtbG9hZGluZy1pbmRpY2F0b3Ige1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xufVxuXG4uc3RhdC1sb2FkaW5nIC5zdGF0LWFjdHVhbC12YWx1ZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4vKiBHcmFkaWVudCB0ZXh0IGVmZmVjdCAqL1xuLmdyYWRpZW50LXRleHQge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM2NjdlZWEgMCUsICM3NjRiYTIgMTAwJSk7XG4gICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XG4gICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJhY2tncm91bmQtY2xpcDogdGV4dDtcbn1cblxuLyogQWRtaW4gYWNjb3VudCBiYWRnZSBjb21wb25lbnQgKi9cbi5hY2NvdW50LWJhZGdlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDJyZW07XG4gICAgcGFkZGluZzogMC43NXJlbSAxLjVyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLmFjY291bnQtaWNvbiB7XG4gICAgd2lkdGg6IDMycHg7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIGNvbG9yOiAjNGE1NTY4O1xufVxuXG4uYWNjb3VudC1uYW1lIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMmQzNzQ4O1xuICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIGZsZXg6IDE7XG59XG5cbi5idG4tbG9nb3V0IHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNjY3ZWVhIDAlLCAjNzY0YmEyIDEwMCUpO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG5cbi5idG4tbG9nb3V0OmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gICAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDEwMiwgMTI2LCAyMzQsIDAuNCk7XG4gICAgY29sb3I6IHdoaXRlO1xufVxuXG4vKiBGdWxsQ2FsZW5kYXIgY3VzdG9taXphdGlvbnMgKi9cbi5mYy1yb3cgLmZjLWNvbnRlbnQtc2tlbGV0b24ge1xuICAgIHBhZGRpbmctYmxvY2stZW5kOiAwO1xufVxuXG4uZmMtbHRyIC5mYy1kYXlHcmlkLXZpZXcgLmZjLWRheS10b3AgLmZjLWRheS1udW1iZXIge1xuICAgIGZsb2F0OiBub25lO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpbmUtaGVpZ2h0OiA0ZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi8qIEZ1bGxDYWxlbmRhciB0b2RheSBzdHlsaW5nIC0gZml4IGZvciBUYWlsd2luZCByZXNldCAqL1xuI2NhbGVuZGFyIC5mYy1kYXktdG9kYXkge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIzNiODJmNiAhaW1wb3J0YW50O1xufVxuXG4jY2FsZW5kYXIgLmZjLWRheS10b2RheSAuZmMtZGF5Z3JpZC1kYXktbnVtYmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjM2I4MmY2ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDI4cHggIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDI4cHggIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcbn1cblxuLyogRml4IEZ1bGxDYWxlbmRhciBib3JkZXJzIHRoYXQgZ2V0IHJlc2V0IGJ5IFRhaWx3aW5kICovXG4uZmMtZGF5Z3JpZC1kYXkge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNWU3ZWIgIWltcG9ydGFudDtcbn1cblxuLmZjLWNvbC1oZWFkZXItY2VsbCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTdlYiAhaW1wb3J0YW50O1xufVxuXG4uZmMtZGF5Z3JpZC1kYXktZnJhbWUge1xuICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4vKiBCb29raW5nIGZvcm0gYW5kIGxpc3Qgc3R5bGVzICovXG4uYm9va2luZy1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDk2MHB4O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG5cbi5ib29raW5nLWZvcm0ge1xuICAgIGZsZXgtZ3JvdzogMDtcbiAgICBtaW4td2lkdGg6IDI1NnB4O1xufVxuXG4uYm9va2luZy1saXN0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDUxMnB4O1xufVxuXG4uYm9va2luZy1saXN0LWl0ZW1zIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBtYXgtaGVpZ2h0OiAzNzJweDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG5cbi5ib29raW5nLWxpc3QtaXRlbXMgPiBsaSB7XG4gICAgcGFkZGluZy10b3A6IDAuNWVtO1xuICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCByZ2JhKDQ0LCA2MiwgODAsIDAuMik7XG59XG5cbi5ib29raW5nLWxpc3QtaXRlbXMgPiBsaTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbn1cblxuLmJ0bi1jYW5jZWwtcmVzZXJ2ZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiBSZXNlcnZlIGZvcm0gc3R5bGluZyAqL1xuI3Jlc2VydmVfZm9ybSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAxcmVtO1xufVxuXG4jcmVzZXJ2ZV9mb3JtIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiNyZXNlcnZlX2Zvcm0gaW5wdXRbdHlwZT1cIm51bWJlclwiXSxcbiNyZXNlcnZlX2Zvcm0gaW5wdXRbdHlwZT1cInRleHRcIl0ge1xuICAgIGhlaWdodDogNDBweDtcbn1cblxuI3Jlc2VydmVfZm9ybSBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4jcmVzZXJ2ZV9mb3JtIGlucHV0W3R5cGU9XCJ0ZXh0XCJdIHtcbiAgICBtaW4td2lkdGg6IDIyNHB4O1xufVxuXG4jcmVzZXJ2ZV9mb3JtID4gKjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cbiNyZXNlcnZlX2Zvcm0gLnJlcGVhdC1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNyZXNlcnZlX2Zvcm0gLnJlcGVhdC1jb250YWluZXIuc2hvdyB7XG4gICAgZGlzcGxheTogZmxleDtcbn1cblxuI3Jlc2VydmVfZm9ybSA+ICN1c2VybmFtZSxcbiNyZXNlcnZlX2Zvcm0gPiAjZmFjdWx0eV9jb2RlIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4jcmVzZXJ2ZV9mb3JtIC5jaGVja2JveC1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4jcmVzZXJ2ZV9mb3JtIC5jaGVja2JveC1sYWJlbCA+IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjVlbTtcbn1cblxuLyogc2hhZGNuL3VpIERlc2lnbiBTeXN0ZW0gQ29tcG9uZW50cyAqL1xuXG4vKiBCdXR0b24gQ29tcG9uZW50IC0gQmFzZWQgb24gc2hhZGNuL3VpIGJ1dHRvbiAqL1xuLmJ0biB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBnYXA6IDAuNXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjM3NXJlbTtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlLWluLW91dDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgbWluLWhlaWdodDogMi41cmVtO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuXG4gICAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogMnB4O1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggaHNsKHZhcigtLXJpbmcpKTtcbiAgICB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG59XG5cbi8qIEJ1dHRvbiBWYXJpYW50cyAqL1xuLmJ0bi1wcmltYXJ5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tcHJpbWFyeSkpO1xuICAgIGNvbG9yOiBoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSk7XG5cbiAgICAmOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKHZhcigtLXByaW1hcnkpIC8gMC45KTtcbiAgICB9XG59XG5cbi5idG4tc2Vjb25kYXJ5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tc2Vjb25kYXJ5KSk7XG4gICAgY29sb3I6IGhzbCh2YXIoLS1zZWNvbmRhcnktZm9yZWdyb3VuZCkpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGhzbCh2YXIoLS1ib3JkZXIpKTtcblxuICAgICY6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tc2Vjb25kYXJ5KSAvIDAuOCk7XG4gICAgfVxufVxuXG4uYnRuLWRlc3RydWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpKTtcbiAgICBjb2xvcjogaHNsKHZhcigtLWRlc3RydWN0aXZlLWZvcmVncm91bmQpKTtcblxuICAgICY6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpIC8gMC45KTtcbiAgICB9XG59XG5cbi5idG4tc3VjY2VzcyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKHZhcigtLXN1Y2Nlc3MpKTtcbiAgICBjb2xvcjogaHNsKHZhcigtLXN1Y2Nlc3MtZm9yZWdyb3VuZCkpO1xuXG4gICAgJjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCh2YXIoLS1zdWNjZXNzKSAvIDAuOSk7XG4gICAgfVxufVxuXG4uYnRuLW91dGxpbmUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGhzbCh2YXIoLS1ib3JkZXIpKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tYmFja2dyb3VuZCkpO1xuICAgIGNvbG9yOiBoc2wodmFyKC0tZm9yZWdyb3VuZCkpO1xuXG4gICAgJjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCh2YXIoLS1hY2NlbnQpKTtcbiAgICAgICAgY29sb3I6IGhzbCh2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpO1xuICAgIH1cbn1cblxuLmJ0bi1naG9zdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IGhzbCh2YXIoLS1mb3JlZ3JvdW5kKSk7XG5cbiAgICAmOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKHZhcigtLWFjY2VudCkpO1xuICAgICAgICBjb2xvcjogaHNsKHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSk7XG4gICAgfVxufVxuXG4uYnRuLWxpbmsge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiBoc2wodmFyKC0tcHJpbWFyeSkpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIHRleHQtdW5kZXJsaW5lLW9mZnNldDogNHB4O1xuXG4gICAgJjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG59XG5cbi8qIEJ1dHRvbiBTaXplcyAqL1xuLmJ0bi1zbSB7XG4gICAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcbiAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICBtaW4taGVpZ2h0OiAyLjI1cmVtO1xufVxuXG4uYnRuLWxnIHtcbiAgICBwYWRkaW5nOiAwLjc1cmVtIDJyZW07XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIG1pbi1oZWlnaHQ6IDIuNzVyZW07XG59XG5cbi5idG4taWNvbiB7XG4gICAgaGVpZ2h0OiAyLjVyZW07XG4gICAgd2lkdGg6IDIuNXJlbTtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4vKiBDYXJkIENvbXBvbmVudCAtIEJhc2VkIG9uIHNoYWRjbi91aSBjYXJkICovXG4uY2FyZCB7XG4gICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGhzbCgyMTQuMyAzMS44JSA5MS40JSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDAgMCUgMTAwJSk7XG4gICAgY29sb3I6IGhzbCgyMjIuMiA4NCUgNC45JSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjEpLFxuICAgICAgICAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xufVxuXG4uY2FyZC1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDAuMzc1cmVtO1xuICAgIHBhZGRpbmc6IDEuNXJlbTtcbn1cblxuLmNhcmQtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07XG59XG5cbi5jYXJkLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgIGNvbG9yOiBoc2woMjE1LjQgMTYuMyUgNDYuOSUpO1xufVxuXG4uY2FyZC1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAxLjVyZW07XG4gICAgcGFkZGluZy10b3A6IDA7XG59XG5cbi5jYXJkLWZvb3RlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEuNXJlbTtcbiAgICBwYWRkaW5nLXRvcDogMDtcbn1cblxuLyogSW5wdXQgQ29tcG9uZW50IC0gQmFzZWQgb24gc2hhZGNuL3VpIGlucHV0ICovXG4uaW5wdXQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiAyLjVyZW07XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogMC4zNzVyZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgaHNsKDIxNC4zIDMxLjglIDkxLjQlKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMCAwJSAxMDAlKTtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xuICAgIGNvbG9yOiBoc2woMjIyLjIgODQlIDQuOSUpO1xuICAgIHRyYW5zaXRpb246XG4gICAgICAgIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCxcbiAgICAgICAgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcblxuICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG4gICAgICAgIGJvcmRlci1jb2xvcjogaHNsKDIyMS4yIDgzLjIlIDUzLjMlKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGhzbCgyMjEuMiA4My4yJSA1My4zJSAvIDAuMik7XG4gICAgfVxuXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICBjb2xvcjogaHNsKDIxNS40IDE2LjMlIDQ2LjklKTtcbiAgICB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbn1cblxuLyogU2VsZWN0IENvbXBvbmVudCAtIEJhc2VkIG9uIHNoYWRjbi91aSBzZWxlY3QgKi9cbi5zZWxlY3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiAyLjVyZW07XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGJldHdlZW47XG4gICAgYm9yZGVyLXJhZGl1czogMC4zNzVyZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgaHNsKDIxNC4zIDMxLjglIDkxLjQlKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMCAwJSAxMDAlKTtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xuICAgIGNvbG9yOiBoc2woMjIyLjIgODQlIDQuOSUpO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBoc2woMjIxLjIgODMuMiUgNTMuMyUpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggaHNsKDIyMS4yIDgzLjIlIDUzLjMlIC8gMC4yKTtcbiAgICB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbn1cblxuLyogQmFkZ2UgQ29tcG9uZW50IC0gQmFzZWQgb24gc2hhZGNuL3VpIGJhZGdlICovXG4uYmFkZ2Uge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICAgIHBhZGRpbmc6IDAuMjVyZW0gMC42MjVyZW07XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDI1ZW07XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgICAgY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsXG4gICAgICAgIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQ7XG59XG5cbi5iYWRnZS1kZWZhdWx0IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjIyLjIgODQlIDQuOSUpO1xuICAgIGNvbG9yOiBoc2woMjEwIDQwJSA5OCUpO1xufVxuXG4uYmFkZ2Utc2Vjb25kYXJ5IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjEwIDQwJSA5NiUpO1xuICAgIGNvbG9yOiBoc2woMjIyLjIgODQlIDQuOSUpO1xufVxuXG4uYmFkZ2UtZGVzdHJ1Y3RpdmUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCgwIDg0LjIlIDYwLjIlKTtcbiAgICBjb2xvcjogaHNsKDIxMCA0MCUgOTglKTtcbn1cblxuLmJhZGdlLW91dGxpbmUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGhzbCgyMTQuMyAzMS44JSA5MS40JSk7XG4gICAgY29sb3I6IGhzbCgyMjIuMiA4NCUgNC45JSk7XG59XG5cbi8qIFRhYmxlIENvbXBvbmVudCAtIEJhc2VkIG9uIHNoYWRjbi91aSB0YWJsZSAqL1xuLnRhYmxlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBjYXB0aW9uLXNpZGU6IGJvdHRvbTtcbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xufVxuXG4udGFibGUtaGVhZGVyIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgaHNsKDIxNC4zIDMxLjglIDkxLjQlKTtcbn1cblxuLnRhYmxlLXJvdyB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGhzbCgyMTQuMyAzMS44JSA5MS40JSk7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlLWluLW91dDtcblxuICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjEwIDQwJSA5OCUpO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgfVxufVxuXG4udGFibGUtaGVhZCB7XG4gICAgaGVpZ2h0OiAzcmVtO1xuICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGNvbG9yOiBoc2woMjE1LjQgMTYuMyUgNDYuOSUpO1xufVxuXG4udGFibGUtY2VsbCB7XG4gICAgcGFkZGluZzogMC43NXJlbTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4vKiBBbGVydCBDb21wb25lbnQgLSBCYXNlZCBvbiBzaGFkY24vdWkgYWxlcnQgKi9cbi5hbGVydCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBoc2woMjE0LjMgMzEuOCUgOTEuNCUpO1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgY29sb3I6IGhzbCgyMjIuMiA4NCUgNC45JSk7XG59XG5cbi5hbGVydC1kZXN0cnVjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBoc2woMCA4NC4yJSA2MC4yJSAvIDAuNSk7XG4gICAgY29sb3I6IGhzbCgwIDg0LjIlIDYwLjIlKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMCA4NC4yJSA2MC4yJSAvIDAuMSk7XG59XG5cbi5hbGVydC13YXJuaW5nIHtcbiAgICBib3JkZXItY29sb3I6IGhzbCgzOCA5MiUgNTAlIC8gMC41KTtcbiAgICBjb2xvcjogaHNsKDM4IDkyJSA1MCUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCgzOCA5MiUgNTAlIC8gMC4xKTtcbn1cblxuLmFsZXJ0LXN1Y2Nlc3Mge1xuICAgIGJvcmRlci1jb2xvcjogaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC41KTtcbiAgICBjb2xvcjogaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjEpO1xufVxuXG4vKiBMYWJlbCBDb21wb25lbnQgLSBCYXNlZCBvbiBzaGFkY24vdWkgbGFiZWwgKi9cbi5sYWJlbCB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xuICAgIGNvbG9yOiBoc2woMjIyLjIgODQlIDQuOSUpO1xufVxuXG4vKiBTZXBhcmF0b3IgQ29tcG9uZW50IC0gQmFzZWQgb24gc2hhZGNuL3VpIHNlcGFyYXRvciAqL1xuLnNlcGFyYXRvciB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDIxNC4zIDMxLjglIDkxLjQlKTtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLyogU3dlZXRBbGVydDIgTW9kYWwgQ29tcG9uZW50IC0gc2hhZGNuL3VpIHN0eWxpbmcgKi9cbi5zd2FsLW1vZGFsIHtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXJhZGl1cykgKyAycHgpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGhzbCh2YXIoLS1ib3JkZXIpKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tYmFja2dyb3VuZCkpO1xuICAgIGNvbG9yOiBoc2wodmFyKC0tZm9yZWdyb3VuZCkpO1xuICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgIGJveC1zaGFkb3c6IDAgMjVweCA1MHB4IC0xMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG59XG5cbi5zd2FsLW1vZGFsLXRpdGxlIHtcbiAgICBjb2xvcjogaHNsKHZhcigtLWZvcmVncm91bmQpKTtcbiAgICBmb250LXNpemU6IDEuMTI1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuNzVyZW07XG59XG5cbi5zd2FsLW1vZGFsLWNvbnRlbnQge1xuICAgIGNvbG9yOiBoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpO1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qIEZvcm0gbW9kYWwgc3BlY2lmaWMgc3R5bGluZyAqL1xuLnN3YWwtZm9ybS1tb2RhbCB7XG4gICAgbWF4LXdpZHRoOiA1MDBweDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4uc3dhbC1mb3JtLXRpdGxlIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cblxuLnN3YWwtZm9ybS1jb250ZW50IHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuXG4uc3dhbC1mb3JtLWFjdGlvbnMge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcbiAgICBnYXA6IDAuNXJlbSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xufVxuXG4vKiBGb3JjZSBTd2VldEFsZXJ0MiBidXR0b25zIHRvIHVzZSBvdXIgYnV0dG9uIHN0eWxlcyAqL1xuLnN3YWwyLWFjdGlvbnMgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgMC4yNXJlbSAhaW1wb3J0YW50O1xuICAgIG1pbi13aWR0aDogODBweCAhaW1wb3J0YW50O1xufVxuXG4vKiBCdXR0b24gb3JkZXJpbmcgZm9yIGZvcm1zIC0gQ2FuY2VsIGxlZnQsIENvbmZpcm0gcmlnaHQgKi9cbi5zd2FsLWZvcm0tbW9kYWwgLnN3YWwyLWNhbmNlbCB7XG4gICAgb3JkZXI6IDEgIWltcG9ydGFudDtcbn1cblxuLnN3YWwtZm9ybS1tb2RhbCAuc3dhbDItY29uZmlybSB7XG4gICAgb3JkZXI6IDIgIWltcG9ydGFudDtcbn1cblxuLyogSGlkZSBkZW55IGJ1dHRvbiBjb21wbGV0ZWx5IC0gYWxsIHBvc3NpYmxlIHNlbGVjdG9ycyAqL1xuLnN3YWwyLWRlbnksXG4uc3dhbDItc3R5bGVkLnN3YWwyLWRlbnksXG5idXR0b24uc3dhbDItZGVueSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4vKiBGb3Igbm9uLWZvcm0gbW9kYWxzLCBrZWVwIG5vcm1hbCBvcmRlciAqL1xuLnN3YWwyLWNvbmZpcm06bm90KC5zd2FsLWZvcm0tbW9kYWwgLnN3YWwyLWNvbmZpcm0pIHtcbiAgICBvcmRlcjogMiAhaW1wb3J0YW50O1xufVxuXG4uc3dhbDItY2FuY2VsOm5vdCguc3dhbC1mb3JtLW1vZGFsIC5zd2FsMi1jYW5jZWwpIHtcbiAgICBvcmRlcjogMSAhaW1wb3J0YW50O1xufVxuXG4vKiBPdmVycmlkZSBBTEwgU3dlZXRBbGVydDIgYnV0dG9uIHN0eWxlcyAqL1xuLnN3YWwyLXN0eWxlZCxcbi5zd2FsMi1jb25maXJtLFxuLnN3YWwyLWNhbmNlbCxcbi5zd2FsMi1kZW55IHtcbiAgICAvKiBSZXNldCBhbGwgU3dlZXRBbGVydDIgc3R5bGVzICovXG4gICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAwLjM3NXJlbSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICBmb250LXNpemU6IDAuODc1cmVtICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IDUwMCAhaW1wb3J0YW50O1xuICAgIG1hcmdpbjogMCAwLjI1cmVtICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMC41cmVtIDFyZW0gIWltcG9ydGFudDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZS1pbi1vdXQgIWltcG9ydGFudDtcbiAgICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDtcbiAgICBtaW4taGVpZ2h0OiAyLjVyZW0gIWltcG9ydGFudDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xuICAgIGdhcDogMC41cmVtICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjVyZW0gIWltcG9ydGFudDtcbn1cblxuLyogUHJpbWFyeSBidXR0b24gc3R5bGluZyBmb3IgY29uZmlybSAqL1xuLnN3YWwyLWNvbmZpcm0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCh2YXIoLS1wcmltYXJ5KSkgIWltcG9ydGFudDtcbiAgICBjb2xvcjogaHNsKHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCkpICFpbXBvcnRhbnQ7XG59XG5cbi5zd2FsMi1jb25maXJtOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tcHJpbWFyeSkgLyAwLjkpICFpbXBvcnRhbnQ7XG59XG5cbi8qIFNlY29uZGFyeSBidXR0b24gc3R5bGluZyBmb3IgY2FuY2VsICovXG4uc3dhbDItY2FuY2VsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tc2Vjb25kYXJ5KSkgIWltcG9ydGFudDtcbiAgICBjb2xvcjogaHNsKHZhcigtLXNlY29uZGFyeS1mb3JlZ3JvdW5kKSkgIWltcG9ydGFudDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBoc2wodmFyKC0tYm9yZGVyKSkgIWltcG9ydGFudDtcbn1cblxuLnN3YWwyLWNhbmNlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKHZhcigtLXNlY29uZGFyeSkgLyAwLjgpICFpbXBvcnRhbnQ7XG59XG5cbi8qIERlc3RydWN0aXZlIGJ1dHRvbiBzdHlsaW5nIGZvciBkZW55L2RlbGV0ZSAqL1xuLnN3YWwyLWRlbnkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCh2YXIoLS1kZXN0cnVjdGl2ZSkpICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6IGhzbCh2YXIoLS1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kKSkgIWltcG9ydGFudDtcbn1cblxuLnN3YWwyLWRlbnk6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCh2YXIoLS1kZXN0cnVjdGl2ZSkgLyAwLjkpICFpbXBvcnRhbnQ7XG59XG5cbi8qIFN3ZWV0QWxlcnQyIEljb24gU3R5bGluZyAqL1xuLnN3YWwyLWljb24ge1xuICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uc3dhbDItaWNvbi5zd2FsMi1zdWNjZXNzIHtcbiAgICBjb2xvcjogaHNsKHZhcigtLXN1Y2Nlc3MpKSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1jb2xvcjogaHNsKHZhcigtLXN1Y2Nlc3MpKSAhaW1wb3J0YW50O1xufVxuXG4uc3dhbDItaWNvbi5zd2FsMi1lcnJvciB7XG4gICAgY29sb3I6IGhzbCh2YXIoLS1kZXN0cnVjdGl2ZSkpICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyLWNvbG9yOiBoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpKSAhaW1wb3J0YW50O1xufVxuXG4uc3dhbDItaWNvbi5zd2FsMi13YXJuaW5nIHtcbiAgICBjb2xvcjogaHNsKDM4IDkyJSA1MCUpICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyLWNvbG9yOiBoc2woMzggOTIlIDUwJSkgIWltcG9ydGFudDtcbn1cblxuLnN3YWwyLWljb24uc3dhbDItcXVlc3Rpb24ge1xuICAgIGNvbG9yOiBoc2wodmFyKC0tcHJpbWFyeSkpICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyLWNvbG9yOiBoc2wodmFyKC0tcHJpbWFyeSkpICFpbXBvcnRhbnQ7XG59XG5cbi8qIEVuc3VyZSBmb2N1cyBzdGF0ZXMgd29yayBwcm9wZXJseSAqL1xuLnN3YWwyLWNvbmZpcm06Zm9jdXMsXG4uc3dhbDItY2FuY2VsOmZvY3VzLFxuLnN3YWwyLWRlbnk6Zm9jdXMge1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHggIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggaHNsKHZhcigtLXJpbmcpKSAhaW1wb3J0YW50O1xufVxuXG4vKiBSZW1vdmUgU3dlZXRBbGVydDIgZGVmYXVsdCBmb2N1cyBvdXRsaW5lICovXG4uc3dhbDItcG9wdXA6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnN3YWwyLWFjdGlvbnMge1xuICAgIGdhcDogMC41cmVtICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiAxcmVtIDAgMCAwICFpbXBvcnRhbnQ7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcbn1cblxuLyogRm9ybSBtb2RhbCBidXR0b24gYWxpZ25tZW50ICovXG4uc3dhbC1mb3JtLW1vZGFsIC5zd2FsMi1hY3Rpb25zIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xufVxuXG4vKiBGaXggU3dlZXRBbGVydDIgdGl0bGUgYW5kIGNvbnRlbnQgYWxpZ25tZW50IGZvciBmb3JtcyAqL1xuLnN3YWwtZm9ybS1tb2RhbCAuc3dhbDItdGl0bGUge1xuICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcbn1cblxuLnN3YWwtZm9ybS1tb2RhbCAuc3dhbDItaHRtbC1jb250YWluZXIge1xuICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbn1cblxuLyogTG9hZGluZyBtb2RhbCAtIGVuc3VyZSBubyBidXR0b25zIGFwcGVhciAqL1xuLnN3YWwtbG9hZGluZy1tb2RhbCAuc3dhbDItYWN0aW9ucyB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uc3dhbC1sb2FkaW5nLW1vZGFsIC5zd2FsMi1jb25maXJtLFxuLnN3YWwtbG9hZGluZy1tb2RhbCAuc3dhbDItY2FuY2VsLFxuLnN3YWwtbG9hZGluZy1tb2RhbCAuc3dhbDItZGVueSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4vKiBEaWFsb2cgQ29tcG9uZW50IC0gQmFzZWQgb24gc2hhZGNuL3VpIGRpYWxvZyAqL1xuLmRpYWxvZyB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGluc2V0OiAwO1xuICAgIHotaW5kZXg6IDUwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG59XG5cbi5kaWFsb2ctY29udGVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDFyZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgaHNsKHZhcigtLWJvcmRlcikpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSk7XG4gICAgcGFkZGluZzogMS41cmVtO1xuICAgIGJveC1zaGFkb3c6IDAgMjVweCA1MHB4IC0xMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzKTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDMycmVtO1xuICAgIG1heC1oZWlnaHQ6IDkwdmg7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLmRpYWxvZy1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDAuMzc1cmVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbn1cblxuLmRpYWxvZy10aXRsZSB7XG4gICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTtcbiAgICBjb2xvcjogaHNsKHZhcigtLWZvcmVncm91bmQpKTtcbn1cblxuLmRpYWxvZy1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBjb2xvcjogaHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKTtcbn1cblxuLmRpYWxvZy1mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgIGdhcDogMC41cmVtO1xuICAgIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgICAuZGlhbG9nLWZvb3RlciB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgfVxufVxuXG4vKiBUb2FzdC9Ob3RpZmljYXRpb24gQ29tcG9uZW50IC0gQmFzZWQgb24gc2hhZGNuL3VpIHRvYXN0ICovXG4udG9hc3Qtbm90aWZpY2F0aW9uIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZ2FwOiAwLjc1cmVtO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYm9yZGVyLXJhZGl1czogY2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBoc2wodmFyKC0tYm9yZGVyKSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKHZhcigtLWJhY2tncm91bmQpKTtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICAgIGNvbG9yOiBoc2wodmFyKC0tZm9yZWdyb3VuZCkpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgMTBweCAxNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjEpLFxuICAgICAgICAwIDRweCA2cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xufVxuXG4udG9hc3Qtbm90aWZpY2F0aW9uOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OlxuICAgICAgICAwIDIwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xKSxcbiAgICAgICAgMCAxMHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xufVxuXG4vKiBGb3JtIENvbXBvbmVudHMgRW5oYW5jZW1lbnQgKi9cbi5mb3JtLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAwLjM3NXJlbTtcbn1cblxuLmZvcm0tbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBsaW5lLWhlaWdodDogMS4yNXJlbTtcbiAgICBjb2xvcjogaHNsKHZhcigtLWZvcmVncm91bmQpKTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtO1xufVxuXG4uZm9ybS1pbnB1dCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBoZWlnaHQ6IDIuNXJlbTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGhzbCh2YXIoLS1ib3JkZXIpKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tYmFja2dyb3VuZCkpO1xuICAgIHBhZGRpbmc6IDAuNXJlbSAwLjc1cmVtO1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XG4gICAgY29sb3I6IGhzbCh2YXIoLS1mb3JlZ3JvdW5kKSk7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LFxuICAgICAgICBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBoc2wodmFyKC0tcmluZykpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggaHNsKHZhcigtLXJpbmcpIC8gMC4yKTtcbiAgICB9XG5cbiAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIGNvbG9yOiBoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpO1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxufVxuXG4uZm9ybS1zZWxlY3Qge1xuICAgIEBleHRlbmQgLmZvcm0taW5wdXQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBoc2wodmFyKC0tcmluZykpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggaHNsKHZhcigtLXJpbmcpIC8gMC4yKTtcbiAgICB9XG59XG5cbi5mb3JtLXRleHRhcmVhIHtcbiAgICBAZXh0ZW5kIC5mb3JtLWlucHV0O1xuICAgIG1pbi1oZWlnaHQ6IDVyZW07XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbn1cblxuLmZvcm0tY2hlY2tib3gge1xuICAgIGhlaWdodDogMXJlbTtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXJhZGl1cykgLSA0cHgpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGhzbCh2YXIoLS1ib3JkZXIpKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tYmFja2dyb3VuZCkpO1xuICAgIGFjY2VudC1jb2xvcjogaHNsKHZhcigtLXByaW1hcnkpKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCBoc2wodmFyKC0tcmluZykgLyAwLjIpO1xuICAgIH1cbn1cblxuLyogUmVzcG9uc2l2ZSBkZXNpZ24gKi9cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OS45OXB4KSB7XG4gICAgLmFjY291bnQtYmFkZ2Uge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMXJlbTtcbiAgICB9XG5cbiAgICAuYm9va2luZy1jb250YWluZXIge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICB9XG5cbiAgICAuYm9va2luZy1jb250YWluZXIgPiAqIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gICAgfVxuXG4gICAgI3Jlc2VydmVfZm9ybSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgI3Jlc2VydmVfZm9ybSA+ICo6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICAgIH1cblxuICAgIC8qIFJlc3BvbnNpdmUgYnV0dG9uIGFkanVzdG1lbnRzICovXG4gICAgLmJ0bi1zaGFkY24ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgfVxufVxuIl0sImZpbGUiOiJjdXN0b20uY3NzIn0= */
