/*!**********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/00_reset.css ***!
  \**********************************************************************************************************************/
*, ::after, ::before {
    box-sizing: border-box;
}

body {
    margin: 0;
}

ul {
    list-style-type: none;
    padding-inline-start: 0;
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/10_font.css ***!
  \*********************************************************************************************************************/
html {
    /* Il est interdit de rajouter des couleurs sans demander l'accord du PO */
    --cBlanc1: var(--cBlanc);
    /* inutilisé 2026-06-13  --cBlanc1p: #E0E0E0; */
    --cBlanc02: #F5F5F5;
    --cBlanc2: #F0F0F0;
    --cBlanc03: #dce1ea;
    --cBlanc3: #CCCFCC;
    /* inutilisé 2026-06-13  --cBlanc4: #AAAFAA; */
    --cBlanc5: #999C99;


    /* ============================================
       COULEURS TEXTE NOIR - UTILISATION OBLIGATOIRE
       ============================================ */

    /* --cNoir1 : ÉLÉMENTS D'EMPHASE
       - Titres : h1, h2, h3
       - Texte des boutons (quand pas de couleur définie)
       - Labels obligatoires (required)
       - Menus de navigation
       - Checkbox et radio boutons
       - Valeur principale dans les compteurs (ex: "3" dans "3 / 5")
    */
    --cNoir1: #181818;
    /* inutilisé 2026-06-13  --cNoir1o: #18181855; */

    /* --cNoir2 : CORPS DE TEXTE
       - Paragraphes <p>
       - Listes <li>, énumérations
       - Labels facultatifs
       - Texte saisi dans les inputs
       - Titres h4, h5, h6
       - Valeur secondaire dans les compteurs (ex: "/ 5" dans "3 / 5")
    */
    --cNoir2: #282828;

    /* --cNoir3 : TEXTE TERTIAIRE
       - Placeholders
       - Messages d'aide discrets
       - Texte désactivé
    */
    --cNoir3: #555;

    /* --cNoir4-5 : TEXTE TRÈS ATTÉNUÉ
       - Éléments désactivés
       - Texte décoratif
    */
    --cNoir4: #999;
    --cNoir5: #BBB;
    --cBlanc: #FFF;
    --cNoir: #000;
    --cTexte1: #222;
    /* inutilisé 2026-06-13  --cTexte2: #444; */
    --cForm: #000;
    /* inutilisé 2026-06-13  --cForm_b: #555; */

    /* ============================================
       PALETTES DE RÔLE — une seule forme, 8 paliers, toujours nommés pareil
       0 fond très pâle · 1 fond pâle · 2 bordure / moyen · 3 couleur pleine (bouton, lien,
       onglet actif, indicateur) · 4 foncé / survol · _a dégradé · _ah dégradé au survol ·
       t texte posé sur la couleur pleine.
       Accent est la couleur de l'espace où l'on est : elle change par une classe sur <body>
       (voir le bloc après html{}). Or, Rouge et Succes ne changent jamais.
       Décision PO 2026-09-05. Aucune autre couleur de rôle n'est admise.
       ============================================ */

    /* Accent : voir le bloc body { } après html { }. Elle vit sur body, pas ici — une
       variable dérivée (dégradé, halo) se calcule là où elle est déclarée, et doit donc
       être déclarée sur le même élément que la classe qui change la couleur. */

    /* Or — s'inscrire, connexion, tarif, mise en avant */
    --cOr0: #fefce8;
    --cOr1: #fef3c7;
    --cOr2: #f5d96b;
    --cOr3: #FFD814; /* l'or d'Amazon, texte foncé dessus (décision chef de projet 2026-10-07) */
    --cOr4: #FFCE12; /* son survol */
    --cOr_a: linear-gradient(to bottom, var(--cOr3), var(--cOr4) 100%);
    --cOr_ah: linear-gradient(to bottom, var(--cOr3), var(--cOr3) 100%);
    --cOrt: #181818; /* foncé : le blanc sur --cOr3 ne faisait que 2,0:1 de contraste, 8,8:1 ainsi (décision chef de projet 2026-10-07) */

    /* Rouge — erreur, alerte, suppression, geste dangereux */
    --cRouge0: #fdf3f2;
    --cRouge1: #fbe2df;
    --cRouge2: #f5aaa3;
    --cRouge3: #f15b4e;
    --cRouge4: #930000;
    --cRouge_a: linear-gradient(to bottom, var(--cRouge3), var(--cRouge4) 100%);
    --cRouge_ah: linear-gradient(to bottom, var(--cRouge3), var(--cRouge3) 100%);
    --cRouget: #FFF;

    /* Cœur « J'aime » — un rouge à lui, sang, bordeaux foncé : le rouge de la famille dit
       l'alerte et le danger, pas l'affection (décision chef de projet 2026-09-16).
       Deux crans, comme les autres familles : le pâle du survol, la couleur du cœur. */
    --cCoeur0: #f6e4e7;
    --cCoeur3: #c1192f;

    /* Succes — validation, confirmation */
    --cSucces0: #f0fbff;
    --cSucces1: #ddf1fa;
    --cSucces2: #93d3ea;
    --cSucces3: #0e9dc9;
    --cSucces4: #0b5f7a;
    --cSucces_a: linear-gradient(to bottom, var(--cSucces3), var(--cSucces4) 100%);
    --cSucces_ah: linear-gradient(to bottom, var(--cSucces3), var(--cSucces3) 100%);
    --cSuccest: #FFF;

    --cBackground: var(--cBlanc);

    /* Le bandeau des aperçus (pageRubrique.css, ≥ 1600px). UN PLATEAU UNI AU CENTRE, le dégradé
       sur les bords seulement (décision chef de projet 2026-09-24) : l'ancien dégradé allait
       du gris des bords au blanc du centre, et des cartes blanches identiques paraissaient
       blanches sur le gris et ternes sur le blanc. Sur le plateau, toutes se détachent
       pareil. Deux halos de couleur, tenus dans les bords, donnent un peu de vie : le bleu
       du site en haut à gauche, l'orange des illustrations en bas à droite. */
    --cBackgroundGrand:
        radial-gradient(14% 40% at 0% 25%, #436bc11f, transparent),
        radial-gradient(14% 40% at 100% 75%, #f39c341f, transparent),
        linear-gradient(90deg, #E8EBF0 0%, #F4F5F7 12%, #F4F5F7 88%, #E8EBF0 100%);

    /* Layout */
    --largeur: 1360px;
    /* inutilisé 2026-06-13  --maxWidth: 760px; */
    --cBg: var(--cBlanc);
    /* inutilisé 2026-06-13  --cBg_b: #CCC; */

    /* Noir transparent — ombres */
    --cOmbre: #0002;            /* environ 15% */
    --cOmbreForte: #0004;       /* environ 30% */

    /* transparent — overlays */
    --cOverlay: #0008;          /* environ 50% */
    --cBlancOverlay: #FFFC;     /* environ 80% */
    --cBlancVerre: #FFFFFF8C;   /* environ 55% — verre dépoli, toujours avec un flou (barre et bulle de l'aperçu) */

    /* Ombres composées */
    --ombrePortee: 0 4px 12px var(--cOmbre);
    --ombrePortee2: 0 0px 25px #000;
    --ombreModale: 0 10px 40px var(--cOmbreForte);
    --ombreInterne: 0 0 10px 10px inset var(--cBlanc02);

    /* Couleurs Noir gradients */
    /* inutilisé 2026-06-13  --cNoir3_a: linear-gradient(to bottom, #505858, #303838 100%); */
    /* inutilisé 2026-06-13  --cNoir3_ah: linear-gradient(to bottom, #505858, #505858 100%); */
    /* inutilisé 2026-06-13  --cNoir3_ahLight: linear-gradient(to bottom, #707878, #707878 100%); */
    /* inutilisé 2026-06-13  --cNoir3_at: #FFF; */


    /* inutilisé 2026-06-13  --sAlerte_s: #DEC4C4; */
    /* inutilisé 2026-06-13  --cTuto: #C6F; */
    /* inutilisé 2026-06-13  --cTuto_t: #000; */
    /* inutilisé 2026-06-13  --cTuto_ah: #d79af2; */
    /* inutilisé 2026-06-13  --cBlanc1_t: #181818; */
    /* inutilisé 2026-06-13  --cPlacehoder: #888; */
    /* inutilisé 2026-06-13  --cForm_s: #FFF; */
    /* inutilisé 2026-06-13  --bsCta: 0 7px 14px #3352, 0 3px 6px #0001; */

    /* Formulaires utilisateur */
    /* inutilisé 2026-06-13  --cFormUsr: #EEFAFF; */
    /* inutilisé 2026-06-13  --cFormUsr_b: #334; */
    /* inutilisé 2026-06-13  --cFormUsr_h: #FFF; */
    /* inutilisé 2026-06-13  --cFormUsr_bf: #0AF; */
    /* inutilisé 2026-06-13  --cFormUsr_cb: #059; */
    /* inutilisé 2026-06-13  --cForm_bf: #3C0; */
    /* inutilisé 2026-06-13  --cForm_cb: #590; */
    /* inutilisé 2026-06-13  --cKo_b: #F88; */

    /* Logo */
    /* inutilisé 2026-06-13  --cLogo1: #EBF7E4; */
    /* inutilisé 2026-06-13  --cLogo2: #C6E9AF; */

    --ffBase: 'Noto Sans', Arial, sans-serif;
    --ffMono: 'JetBrainsMono', 'Verdana', monospace;
    /* Police standard de l'écran public (tout ce qui est projeté) — seule source, lue aussi
       par les canvas via policeEcran() (kitPlugin/shared/police.ts). Décision 2026-08-29 :
       Noto Sans seule, pas de Scada ni Montserrat sur ce que voit le public. */
    --ffEcran: 'Noto Sans', sans-serif;
    /* Police des chiffres de l'écran public (tirages, compte à rebours, panneaux à volets) —
       chiffres monolarges garantis aux deux familles, lue par les canvas via policeChiffres().
       Décision 2026-08-29 : remplace 'Courier New' (police machine, absente d'Android/Linux). */
    --ffChiffres: 'Ubuntu Sans', 'Noto Sans', sans-serif;

    /* Il est interdit de rajouter des styles typo sans demander l'accord du PO */
    /* inutilisé 2026-06-13  --fTitre: normal normal 700 32px 'Scada', sans-serif; */
    --fH1: normal normal 700 32px 'Scada', sans-serif;
    --fH2: normal normal 700 24px 'Scada', sans-serif;
    --fH3: normal normal 400 22px 'Scada', sans-serif;
    --fH4: normal normal 400 18px 'Scada', sans-serif;
    /* Titre de l'événement sur l'écran public (.zoneTitreTexte) : police de l'écran, pas Scada.
       La taille est recalée à l'affichage par GestionnaireFondEnTete. Décision chef de projet 2026-09-14. */
    --fTitreEcran: normal normal 700 32px var(--ffEcran);
    --fMenu14: normal normal 400 14px 'Montserrat', sans-serif;
    /* Cran compact de la barre de pilotage (AdaptationBarre.ts) : la barre redéfinit --fMenu14 avec
       celle-ci pour son seul périmètre. Décision du chef de projet 2026-09-03. */
    --fMenu13: normal normal 400 13px 'Montserrat', sans-serif;
    --fCta16: normal normal 700 18px 'Montserrat', sans-serif;
    /* Remise en service le 2026-09-16 (décision chef de projet) : le mono d'un LIBELLÉ, par
       opposition à --fMono24b qui est le mono d'un GROS CHIFFRE (codes d'accès, compteurs).
       Première usagère : l'étiquette d'une scène sur la Vitrine (composants/etiquetteJaime.css).
       Le repli 'Courier New' est une vraie chasse fixe — celui de --ffMono (Verdana) n'en est
       pas une. */
    --fMono16: normal normal 400 16px 'JetBrainsMono', 'Courier New', Courier, monospace;
    /* inutilisé 2026-06-13  --fMono24: normal normal 400 24px 'JetBrainsMono', 'Courier New', Courier, monospace; */
    --fMono24b: normal normal 700 24px 'JetBrainsMono', 'Courier New', Courier, monospace;
    --fCta20: normal normal 700 20px 'Montserrat', sans-serif;
    /* inutilisé 2026-06-13  --fLegend16: normal normal 400 20px 'Scada', sans-serif; */
    --fLight14: italic normal 200 14px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fMini11: italic normal 200 11px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fText16: normal normal 400 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fText16Strong: normal normal 700 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fItalic16: italic normal 400 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fAlerte16: italic small-caps 700 20px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fLabel: normal normal 400 14px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;

    --border: 1px solid #dce1ea;
    --borderR0: 3px;
    --borderR1: 5px;
    --borderR2: 7px;
    --borderCarte: 1px solid var(--cNoir4);
    --borderForm: 1px solid var(--cNoir5);
    --borderInput: 1px solid var(--cNoir5);

    /* Espacements — nommés par rôle (comme les bordures), accord PO 2026-07-03.
       Migration progressive : ne remplacer une valeur en dur que si le rôle ET la valeur
       correspondent (no-op visuel) ; aligner une dérive de valeur = décision à part. */
    --gapListe: 32px;   /* entre les éléments d'une liste. La colonne qui borde la liste (ex. panneau de filtres) prend le MÊME gap : deux rythmes différents côte à côte, c'est moche */
    --paddingCorps: 20px;   /* intérieur d'un corps de bloc / panneau / modale */
    --gapDefaut: 8px;       /* espace standard entre éléments frères (flex/grid) */
    --gapReduit: 4px;       /* variante volontairement plus serrée : listes compactes, groupes de boutons */
    --gapMoyen: 12px;    /* espacement intermédiaire entre éléments frères */
    --gapLarge: 20px;    /* espacement généreux entre groupes d'éléments */
    --gapColonnes: 4rem; /* entre deux colonnes de page de nature différente : le texte et son image, le menu et son contenu (décision chef de projet 2026-09-17) */
    --gapBlocs: 10rem;   /* le blanc entre deux blocs empilés d'une même colonne de lecture : l'article, ses questions, ses scénarios ; deux chapitres (décision chef de projet 2026-09-17) */
    --paddingMiniDiv: 8px 16px; /* padding de tout les blocs avec fond colorées */
    --paddingEtiquette: 3px 6px; /* padding des span et autres etiquette */
    --paddingCarte: 16px 20px;   /* intérieur d'une CARTE — son corps comme sa barre d'actions. La carte existe en trois exemplaires jumeaux (blocs.css, ilotScenarios.css, 55_scenariosCompatibles.css) : chacun recopiait le chiffre, ils lisent maintenant la même variable (décision chef de projet 2026-09-07) */
    --paddingCarteEtroit: 12px 20px; /* la même carte en fenêtre étroite, quand la barre d'actions passe sous le corps */
    --paddingCta: 15px 20px;     /* LE grand bouton : pleine largeur, min-width 180px, fonte --fCta16. La silhouette compacte, elle, prend --paddingCta14 (décision chef de projet 2026-09-07) */
    --paddingBadge: 4px 16px;    /* un badge en pilule, posé sur un bloc — pas la petite étiquette inline d'un récap, qui garde --paddingEtiquette */
    --paddingPastille: 6px 14px; /* une pastille NON cliquable : une étape, un état, un filtre posé */
    --paddingInput: 10px 12px;   /* l'intérieur d'un champ de saisie (--borderInput dit sa bordure) */
    --paddingCellule: 8px 16px 8px 0; /* une cellule de tableau : rien à gauche, la colonne commence au texte */
    --paddingCode: 12px 16px;    /* un bloc de code à recopier */
    --paddingLigneListe: 16px 0; /* une ligne LARGE d'une liste — une question qu'on déplie, un état vide. Les lignes ordinaires prennent --gapDefaut 0 */
    --paddingRecap: 10px 14px;   /* le rythme intérieur du récapitulatif de composition (blocs, actions, encadrés) */
    --paddingPage: 30px 40px;    /* l'enveloppe d'une page : .contenu, et les colonnes du bas de page */
    --paddingCarteLarge: 30px 25px; /* une carte qui doit respirer : une offre, une catégorie d'aperçu */
    --paddingRappel: 20px 40px 25px; /* une carte de rappel du compte (.divRappel), et tout bloc posé à côté d'elles sur la même page (.aide, .enAttente) : les titres et les textes tombent à l'aplomb */
    --paddingBandeau: 4rem;      /* le bandeau des aperçus, qui traverse la fenêtre sur grand écran */
    --retraitListeCourt: 20px;   /* le retrait d'un ul de liste courte — récap, progression, ul générique. Le retrait FRANC du rédactionnel est --retraitListe */
    --retraitListe: 40px;        /* le retrait d'un ul rédactionnel — article, chapitre, réponse de FAQ. Ce retrait franc dit que ces lignes sont un bloc à part, et non la suite du paragraphe */

    /* Boutons : un bouton ne choisit NI son padding, NI sa bordure, NI sa couleur
       (décision PO 2026-07-18). Il prend ces variables — ou pas de bordure, ou la
       couleur d'un rôle (primaire, danger, aperçu) — jamais une valeur à lui. */
    --paddingCta14V: 8px;                 /* l'air vertical d'un bouton compact, seul : la barre de pilotage en déduit sa hauteur (_studioIntegree.css) */
    --paddingCta14: var(--paddingCta14V) 16px; /* padding de tout bouton compact (.cta14, .ctaDiscret, toggles) */
    --borderCta: 1px solid var(--cNoir4); /* LA bordure d'un bouton : celle-ci ou aucune */
    --cCtaTexte: var(--cNoir2);         /* LE texte d'un bouton neutre : ce noir ou une couleur de rôle */
}

/* ============================================
   ACCENT — la couleur de l'espace où l'on est. Déclarée sur body, JAMAIS sur html
   ou :root : une variable dérivée (--cAccent_a, --cFormFocusHalo…) se calcule sur
   l'élément où elle est déclarée ; sur html elle figerait le bleu par défaut et la
   classe du body ne changerait plus que les valeurs directes.
   La classe du <body> choisit la teinte ; sans classe : bleu administration.
   Vitrine : baseVitrinePublic.twig pose bodyPageVitrine.
   Studio : studio/base.twig pose modeTester ou modeDiffuser selon l'onglet principal
   (la page se recharge à chaque changement de mode, pas de Turbo).
   Une règle qui a besoin d'Accent au niveau :root doit lire var(--cAccent…) sur
   l'élément concerné, pas déclarer une variable dérivée à la racine.
   ============================================ */

/* Bleu administration : compte, tarifs, données, Studio hors mode, onglet Préparer */
body {
    --cAccent0: #f1f4f8;
    --cAccent1: #e3eef8;
    --cAccent2: #accee8;
    --cAccent3: #436bc1;
    --cAccent4: #335bb1;
    --cAccent_a: linear-gradient(to bottom, var(--cAccent3), var(--cAccent4) 100%);
    --cAccent_ah: linear-gradient(to bottom, var(--cAccent3), var(--cAccent3) 100%);
    --cAccentt: #FFF;

    /* Focus des champs : l'accent, et son halo à 15 % */
    --cFormFocus: var(--cAccent3);
    --cFormFocusHalo: color-mix(in srgb, var(--cAccent3) 15%, transparent);
}

/* Vitrine, pages publiques : vert */
.bodyPageVitrine {
    --cAccent0: #f0f9f4;
    --cAccent1: #dcf2e5;
    --cAccent2: #9fd9b8;
    --cAccent3: #08914c;
    --cAccent4: #075524;
}

/* Studio, onglet Tester : violet */
.modeTester {
    --cAccent0: #f7f1f9;
    --cAccent1: #ecdcf3;
    --cAccent2: #d2a8e0;
    --cAccent3: #9b59b6;
    --cAccent4: #783b92;
}

/* Studio, onglet Diffuser : bleu diffusion */
.modeDiffuser {
    --cAccent0: #f0f6fb;
    --cAccent1: #e0eef8;
    --cAccent2: #a6cdea;
    --cAccent3: #308ed1;
    --cAccent4: #2572a9;
}

/* Bleu administration POSÉ SUR UN ÉLÉMENT, dans un autre espace (décision chef de projet
   2026-09-06) : un geste d'administration au milieu d'une page publique — créer un événement
   depuis la page d'une scène ou la page Configurer d'un scénario — se dit en bleu, pas dans
   la couleur de la page. Mêmes cinq valeurs que le body sans classe : c'est le même espace,
   ramené sur l'élément qui le porte (le bouton lui-même, pas sa barre : les voisins gardent
   la couleur de la page). Une règle qui lit var(--cAccent…) sur cet élément voit le bleu. */
.accentAdministration {
    --cAccent0: #f1f4f8;
    --cAccent1: #e3eef8;
    --cAccent2: #accee8;
    --cAccent3: #436bc1;
    --cAccent4: #335bb1;
}

/* ============================================
   TITRES ET TYPOGRAPHIE
   ============================================ */

h1, h2, h3 {
    color: var(--cNoir1);
}

h4 {
    color: var(--cNoir2);
}

h5, h6 {
    color: var(--cNoir3);
}

p, li {
    color: var(--cNoir2);
}

h1, h2, h3, h4, h5, h6 {
    font: var(--fH1);
}

button {
    font: var(--fCta16);
}

h1 {
    font: var(--fH1);
    margin: 10px 15px 5px 0;
    padding: 0;
}

h2 {
    font: var(--fH2);
    margin: 15px 10px 5px 0;
    padding: 0;
}

h3 {
    font: var(--fH3);
    padding: 0;
    margin: 25px 0 15px;
}

h4, h5 {
    font: var(--fH4);
}

h4, h5, h6 {
    margin: 25px 0 7px;
}

/* <i> est utilisée comme balise de suffixe (#2, #3…) sur les noms d'éléments.
   La balise <em> remplace <i> pour l'italique sémantique. */
i {
    display: inline-block;
    font-size: 75%;
    font-weight: 700;
    font-style: italic;
    font-family: var(--ffMono);
}
/*!********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/31_cta.css ***!
  \********************************************************************************************************************/
button {
    user-select: none;
    -webkit-user-select: none;
    display: inline-block;
    cursor: pointer;
    margin: 0;
    color: var(--cAccent3);
    font: var(--fCta16);
    text-decoration: none;
}

button.ctaAnnuler {
    font: var(--fText16);
    color: var(--cAccent3);
    background: transparent;
    border: transparent;
    text-decoration: none;
}

/* button.lienBouton : un <button> qui a le visuel d'un lien (templates/CLAUDE.md, « Bouton
   ou lien ? ») — il prend exactement le style de a (décision chef de projet 2026-09-14) */
a,
button.lienBouton {
    color: var(--cAccent3);
    display: inline-block;
    text-decoration: none;
    padding: var(--gapReduit) 0;
}

button.lienBouton {
    font: var(--fText16);
    background: none;
    border: none;
}

a:focus,
button.lienBouton:focus {
    outline: none;
}

a:focus-visible,
button.lienBouton:focus-visible {
    box-shadow: 0 0 0 3px var(--cFormFocus);
}


button.ctaAnnuler,
a.ctaAnnuler {
    text-decoration: none;
    display: block;
    margin: 20px 0;
    padding: 0;
    color: var(--cNoir3);
}

button.btn, a.btn {
    min-width: 180px;
    cursor: pointer;
    border: 0;
    color: var(--cAccentt);
    background-color: var(--cAccent3);
    font: var(--fCta16);
    text-align: center;
    transition: all 0.3s;
    position: relative;
    padding: var(--paddingCta);
    margin: 10px 0;
    border-radius: var(--borderR1);
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    text-decoration: none;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

a.btn:hover, button.btn:hover {
    color: var(--cAccentt);
    background-color: var(--cAccent4);

}

/* inutilisé 2026-06-13
button.btn2, a.btn2 {
    min-width: 100px;
    display: block;
    cursor: pointer;
    border: 0;
    font: var(--fCta20);
    padding: 20px 40px;
    margin: 20px auto;
    text-align: center;
    transition: all 0.3s;
    color: var(--cTexte1);
    position: relative;
    background-repeat: round;
    width: fit-content;
    border-radius: 12px;
}

button#redirection.btn2 {
    background-color: transparent;
}

button#redirection.btn2:hover,
a.btn2:hover, button.btn2:hover {
    color: var(--cAccentt);
    background-color: var(--cAccent4);
}
*/

/* ============================================
   CTA COMPACT — socle .cta14

   LA silhouette des boutons d'action compacts (barres d'action, cartes) :
   forme, police, dimensions définies ici et nulle part ailleurs. Modèle :
   le bouton de la barre de contrôle aperçu (décision PO 2026-07-18).
   Se pose à côté du rôle qui apporte sa couleur : class="cta14 ctaPreviewControle".
   14 = la taille de police (--fMenu14). Silhouette formulaire à venir : .cta18.
   ============================================ */

.cta14 {
    display: inline-block; /* un <a> hors barre flex reste un bouton (padding vertical réel) */
    padding: var(--paddingCta14);
    font: var(--fMenu14);
    border: none;
    border-radius: var(--borderR1);
    cursor: pointer;
    /* Un bouton n'est jamais souligné, quelle que soit sa balise : la Vitrine souligne tous
       ses liens (vitrine.css, décision PO 2026-08-25), un <a class="cta14"> y était souligné
       comme un lien de paragraphe (décision chef de projet 2026-09-06). */
    text-decoration: none;
    transition: background 0.2s, color 0.2s, border-color 0.2s;
}

/* La silhouette compacte GAGNE sur un rôle qui porte aussi une silhouette : la page des
   tarifs de la Vitrine redéfinit .ctaOr en grand bouton de carte (offres.css : display block,
   grand padding, police 16), ce qui écrasait « cta14 ctaOr » — le petit bouton doré qui mène
   à l'offre du dessus (page « Mon studio », scènes réservées à une offre : décision chef de
   projet 2026-10-07). Même composition que « cta14 ctaPrimaire », même taille. */
.cta14.ctaOr {
    display: inline-block;
    width: auto;
    margin: 0;
    padding: var(--paddingCta14);
    font: var(--fMenu14);
    text-align: left;
    /* LE JAUNE PÂLE DU PETIT BOUTON (décision chef de projet 2026-10-08) : le jaune plein
       d'Amazon (--cOr3) est fait pour les gros boutons et l'onglet « Tarifs » ; sur un petit
       bouton posé dans une page aux tons neutres et pastel, il prenait le dessus sur tout le
       reste. Fond pâle (--cOr1), et une bordure jaune pour qu'on le voie comme un bouton et
       comme du jaune : c'est elle, plus que le fond, qui le détache de la page. Même épaisseur
       que les autres boutons (--borderCta), seule la couleur change. */
    background: var(--cOr1);
    border: var(--borderCta);
    border-color: var(--cOr3);
}

.cta14.ctaOr:hover {
    background: var(--cOr2);
    border-color: var(--cOr4);
}

/* LE PETIT BOUTON EN JAUNE PLEIN (décision chef de projet 2026-10-14) : la même silhouette
   compacte, les couleurs du gros bouton des tarifs (.ctaOr). Pour le bouton qui est SEUL et
   doit se voir : « Mon studio », la limite d'événements atteinte du Studio. Là où il revient
   souvent (vignettes, listes de scénarios, page d'une scène), le jaune pâle reste. */
.cta14.ctaOr.ctaOrPlein {
    background: var(--cOr3);
    border-color: var(--cOr3);
    color: var(--cOrt);
}

.cta14.ctaOr.ctaOrPlein:hover {
    background: var(--cOr4);
    border-color: var(--cOr4);
}

.cta14:disabled {
    opacity: 0.4;
    cursor: auto;
}

/* Rôle action principale : LE bouton qui fait la chose pour laquelle la page existe
   (créer un événement…), en Accent — la couleur de l'espace, ou celle qu'un
   .accentAdministration pose sur lui. Un seul rôle, défini ici et nulle part ailleurs
   (décision chef de projet 2026-09-06) : pas de CSS par bouton. */
.ctaPrimaire {
    background: var(--cAccent3);
    color: var(--cAccentt);
}

.ctaPrimaire:hover {
    background: var(--cAccent4);
    color: var(--cAccentt);
}

/* Rôle offre : LE bouton qui mène aux offres et aux tarifs — Or, la couleur du prix et de
   l'inscription (couleurs.md). L'encadré « limite d'événements » du Studio. */
.ctaOr {
    background: var(--cOr3);
    color: var(--cOrt);
}

.ctaOr:hover {
    background: var(--cOr4);
    color: var(--cOrt);
}

/* Rôle aperçu : LE bouton qui lance un aperçu — violet aperçu, partout
   (catalogue, page Modifier, fiches d'animation). Un aperçu = violet,
   décision PO 2026-07-18. */
.ctaPreview {
    background: var(--cAccent_a);
    color: var(--cBlanc);
}

.ctaPreview:hover {
    background: var(--cAccent_ah);
}

/* ============================================
   BADGE MODE TEST - Réutilisable partout
   ============================================ */

.badgeModeTest {
    display: inline-block;
    padding: var(--paddingBadge);
    font: var(--fLabel);
    color: var(--cBlanc);
    background: var(--cAccent3);
    border-radius: 10px;
    margin: 10px 0;
}
/*!*****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_studioIntegree.css ***!
  \*****************************************************************************************************************************************/
/* ============================================
   BARRE DE PILOTAGE - En bas de l'écran
   ============================================ */

#barrePilotage {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    display: flex;
    align-items: center;
    /* UN SEUL écart entre deux voisins qui ne sont pas du même groupe : les 16px du trait
       des groupes (.divActionScene, _sceneBoutons.css). Entre deux blocs de la barre, le
       même — plus de 20px à part (décision du chef de projet, 2026-09-16). */
    gap: 16px;
    /* LA MARGE DE LA BARRE : le même air sur ses quatre côtés (décision du chef de projet,
       2026-09-16 — avant, 16px à gauche et à droite contre 8 en haut et en bas). Un bouton
       est toujours à 8px du bord, où que ce soit ; aucun enfant ne pose sa propre marge.
       Une boîte dessinée DANS la barre (cadre « Passer à : X », boîte de fin, zone de test)
       ne déplace jamais un bouton : elle prend son air sur celui de la barre, air négatif
       du même montant — le bouton reste à 8px du bord, la boîte se dessine 4px en dedans. */
    padding: var(--gapDefaut);
    /* La hauteur de la barre ne bouge JAMAIS (décision du chef de projet, 2026-09-16) : ni
       quand « Passer à : X » apparaît, ni entre deux scènes quand elle est vide, ni sur une
       scène sans bouton. La barre la déclare elle-même : la hauteur d'un de ses boutons
       (une ligne de leur police — 1lh, d'où la police posée ici —, l'air vertical du bouton
       --paddingCta14V, sa bordure --borderCta de 1px) plus son propre air. Mêmes variables
       que les boutons, donc elle suit le cran compact ; seul le cran « deux lignes »
       (.barreDeuxLignes) la fait grandir. Aucun enfant fantôme dans la rangée : la marge
       droite reste celle de gauche, 16px. Tout texte de la barre pose sa propre police. */
    font: var(--fMenu14);
    min-height: calc(1lh + 2 * var(--paddingCta14V) + 2px + 2 * var(--gapDefaut));
    background: var(--cBlanc02);
    /* Aucune ombre sur la scène : la barre est un outil, la scène passe avant (décision du
       chef de projet, 2026-09-16). */
    z-index: 999900;
}

/* ============================================
   Crans d'adaptation à la largeur (AdaptationBarre.ts) — cumulés, dans cet ordre :
   .barreCompacte, puis .barreMenuZoom, puis .barreDeuxLignes (celui-ci vit dans
   _sceneBoutons.css). Le script mesure et pose les classes ; le CSS ne fait que dire à
   quoi ressemble chaque cran.
   ============================================ */

/* Compact : la barre redéfinit, pour son seul périmètre, les deux variables que suivent
   tous ses boutons (.cta14, toggles, réglages) — un bouton ne choisit toujours ni sa
   police ni ses marges, c'est la barre qui les fixe. */
#barrePilotage.barreCompacte {
    --paddingCta14V: 6px;
    --paddingCta14: var(--paddingCta14V) 12px;
    --fMenu14: var(--fMenu13);
}

/* ============================================
   Zone Barre de progression (gauche)
   ============================================ */

/* Vide au repos : l'icône de la scène en cours a été retirée (2026-09-03, la frise reste
   cachée — _progressBar.css). Le cadre n'apparaît qu'avec « Passer à : X » dedans ; la
   barre de fin, elle, flotte à sa droite (_barreFin.css). */
#zoneProgressBar {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    border-radius: var(--borderR2);
    /* Au-dessus du voile de la barre (_barreFin.css, levé par la barre de fin ou par la
       boîte de passage de l'aperçu) : la zone reste vivante et éclairée quand le reste
       de la barre est voilé ; son fond change avec la prise de pouvoir. */
    position: relative;
    z-index: 2;
    transition: background 0.2s ease;
}

/* Le cadre prend son air SUR la marge de la barre, pas en plus (règle de la barre,
   #barrePilotage ci-dessus) : le bouton ne bouge pas, la barre ne grandit pas d'un pixel,
   le cadre se dessine à 4px du bord — comme la boîte de fin (_barreFin.css). */
#zoneProgressBar:has(#progressBarSuivant.visible) {
    padding: var(--gapReduit);
    margin: calc(-1 * var(--gapReduit));
    background: var(--cBlanc);
    box-shadow: 0 1px 3px var(--cOmbre);
}

/* Vide — ni « Passer à », ni barre de fin déployée — elle sort de la rangée : restée
   dedans, même sans largeur, elle prenait l'écart de la barre et creusait un trou entre
   la marge et le premier bouton. */
#zoneProgressBar:not(:has(#progressBarSuivant.visible)):not(:has(#barreFinScene.visible)) {
    display: none;
}

/* Seule la boîte de fin, sans « Passer à » : la zone n'a rien à montrer en flux, mais elle
   porte la boîte (hors flux, _barreFin.css). Elle sort de la rangée, comme vide — sinon,
   sans largeur, elle prendrait l'écart de la barre et décalerait de 16px les boutons du
   dessous au moment où la boîte paraît. Sa position statique reste le début de la rangée,
   centrée comme un enfant de la rangée : la boîte se pose là où sont les boutons. */
#zoneProgressBar:not(:has(#progressBarSuivant.visible)):has(#barreFinScene.visible) {
    position: absolute;
}

/* ============================================
   Mini-widgets au-dessus de la barre
   ============================================ */

#miniWidgets {
    position: absolute;
    bottom: 100%;
    left: var(--gapDefaut); /* au bord de la marge de la barre */
    display: flex;
    gap: var(--gapMoyen);
    padding-bottom: 4px;
    align-items: center;
}

/* ============================================
   Îlot de test (IlotTest.ts)
   ============================================ */

/* Même matière et même entrée que la bulle des onglets de l'aperçu (#previewBulle, _preview.css) :
   en haut au centre, verre dépoli, il sort du haut de l'écran en s'étirant dès l'ouverture de
   l'écran — en test, pas de délai (chef de projet, 2026-09-22). Plan du chrome « îlot de
   test » (échelle de salleEcran.css) : une boîte de dialogue ouverte le recouvre. */
#ilotTest {
    position: fixed;
    top: 12px;
    left: 50%;
    z-index: 999900;
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    max-width: calc(100vw - 32px);
    padding: var(--paddingCorps);
    background: var(--cBlancOverlay);
    border-radius: var(--borderR2);
    box-shadow: var(--ombrePortee2);
    transform: translateX(-50%);
    animation: previewBulleApparition 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
}

@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) {
    #ilotTest {
        background: var(--cBlancVerre);
        -webkit-backdrop-filter: blur(10px) saturate(1.4);
        backdrop-filter: blur(10px) saturate(1.4);
    }
}

/* Fermé par sa croix (IlotTest.ts) : `display: flex` ci-dessus l'emporterait sur l'attribut. */
#ilotTest[hidden] {
    display: none;
}

/* La croix (silhouette : composants/boutonFermeture.css, importée via _preview.css) ferme la
   rangée, à droite des deux boutons, dans le flux — comme celle de la barre de l'aperçu. */
#ilotTest .ctaPreviewControle,
#ilotTest .modaleClose {
    flex-shrink: 0;
}

/* ============================================
   Contenu des boîtes « Test en cours » et « Progression » (IlotTest.ts) — la carte, le
   titre, le corps qui défile et la croix sont ceux du cadre commun (_boiteDialogue.css)
   ============================================ */

.boiteTestIntro,
.boiteTestScene {
    font: var(--fText16);
    margin: 0;
}

.boiteTestScene {
    margin-top: var(--gapMoyen);
}

/* Un bouton et, dessous, la phrase qui dit ce qu'il fait. */
.boiteTestAction {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--gapDefaut);
    margin-top: var(--gapLarge);
}

.boiteTestAide {
    font: var(--fLabel);
    color: var(--cNoir3);
    margin: 0;
}

/* L'arrêt du test, dans le pied de la boîte — hors du corps qui défile : la bulle de
   confirmation s'ancre sur le bouton par ses coordonnées, il ne doit pas bouger. Le trait
   le sépare des boutons de test. */
.boiteTestPied {
    border-top: var(--border);
    padding-top: var(--gapLarge);
}

.boiteTestPied .boiteTestAction {
    margin-top: 0;
}

/* « Êtes-vous sûr ? » : noir, comme la confirmation d'un passage (.ctaEcranConfirmation, _sceneBoutons.css). */
.boiteTestConfirmer {
    background: var(--cNoir);
    border: var(--borderCta);
    border-color: var(--cNoir);
    color: var(--cBlanc);
}

/* Écran de fin (le navigateur a refusé window.close) : message centré, lien de relance. Même
   écran pour une fenêtre fermée parce qu'une autre dirige (DirectionEcran.ts). */
#ecranFinTest,
#ecranDirigeAilleurs {
    position: fixed;
    inset: 0;
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen);
    align-items: center;
    justify-content: center;
    background: var(--cBlanc);
    font: var(--fText16);
    color: var(--cNoir);
    text-align: center;
    padding: 20px;
}

#ecranFinTest a {
    color: var(--cAccent3);
    text-decoration: underline;
}

/* ============================================
   Boîte « Qui dirige ? » (DirectionEcran.ts)
   ============================================ */

.directionCorps p {
    margin: 0;
}

.directionCorps .directionListeTitre {
    font: var(--fH4);
    color: var(--cNoir3);
    margin: var(--gapLarge) 0 var(--gapDefaut);
}

/* Une information, pas un choix : l'heure d'ouverture de chaque fenêtre. */
.directionListe {
    margin: 0;
    padding-left: var(--retraitListeCourt);
    font: var(--fText16);
}

.directionCetteFenetre {
    margin-left: var(--gapDefaut);
    font: var(--fLabel);
    color: var(--cNoir3);
}

/* « Êtes-vous sûr ? » : noir, comme la confirmation d'un passage (.ctaEcranConfirmation, _sceneBoutons.css). */
.directionConfirmer {
    background: var(--cNoir);
    border: var(--borderCta);
    border-color: var(--cNoir);
    color: var(--cBlanc);
}

/* ============================================
   Mode masquage automatique (?m)
   ============================================ */

#barrePilotage.masquable {
    transform: translateY(100%);
    transition: transform 0.3s ease;
}

#barrePilotage.masquable.visible {
    transform: translateY(0);
}

/* ============================================
   Pagination + Zoom VueKit
   ============================================ */

#zoneZoomVueKit {
    position: relative;
    margin-left: auto;
}

#zoomVueKit {
    display: flex;
    gap: var(--gapMoyen);
    align-items: center;
}

/* Le bouton trois points n'existe qu'au cran « menu » : hors de ce cran, zoom et
   pagination sont dans la barre, à leur place. Carré des boutons de zoom (ci-dessous). */
#ctaMenuZoom {
    display: none;
    padding: 0;
}

#barrePilotage.barreMenuZoom #ctaMenuZoom {
    display: inline-block;
}

/* Cran « menu » : zoom et pagination quittent la ligne — panneau au-dessus du bouton,
   calé à droite, ouvert au clic sur le bouton (.ouvert sur la zone), fermé au clic
   ailleurs (AdaptationBarre.ts). */
#barrePilotage.barreMenuZoom #zoomVueKit {
    display: none;
    position: absolute;
    right: 0;
    bottom: 100%;
    margin-bottom: var(--gapReduit);
    padding: 6px 12px;
    background: var(--cBlanc);
    border-radius: var(--borderR2);
    box-shadow: var(--ombrePortee2);
}

#barrePilotage.barreMenuZoom #zoneZoomVueKit.ouvert #zoomVueKit {
    display: flex;
}

#paginationVueKit[data-pag-active="1"] {
    display: flex;
    gap: var(--gapReduit);
    align-items: center;
}

/* Paires de zoom : une par zoom nommé de l'animation (data-zoom), DOM créé par le
   Dimensionneur au premier kit abonné, retiré au changement de cue (une animation sans
   zoom n'a aucun espace réservé). Une paire n'est jamais masquée en cours d'animation :
   quand son zoom n'est pas affiché, ses deux boutons sont grisés (disabled) — le grisage
   dit à l'opérateur quel zoom est utilisable, et rien ne bouge dans la barre. */
.divActionZoom {
    display: flex;
    gap: var(--gapReduit);
    align-items: center;
}

.actionZoomMoins,
.actionZoomPlus,
/* même carré pour le bouton trois points (cran « menu », ci-dessus) */
#ctaMenuZoom,
/* même carré pour les boutons ± du groupe de réglage de la barre (_reglageScene.css) */
.reglageSceneGroupe .ctaEcranSecondaire {
    width: 28px;
    height: 28px;
    border: 1px solid var(--cBlanc03);
    border-radius: var(--borderR1);
    background: var(--cBlanc);
    color: var(--cNoir2);
    font-size: 16px;
    cursor: pointer;
}

.actionZoomMoins:disabled,
.actionZoomPlus:disabled {
    opacity: 0.3;
    cursor: default;
}

#paginationVueKit .pagBtn {
    width: 28px;
    height: 28px;
    border: 1px solid var(--cBlanc03);
    border-radius: var(--borderR1);
    background: var(--cBlanc);
    color: var(--cNoir2);
    font-size: 16px;
    opacity: 1;
    padding: 0;
}

#paginationVueKit .pagBtn:disabled {
    opacity: 0.3;
    cursor: default;
}

#paginationVueKit .pagInfo {
    font: var(--fLabel);
    color: var(--cNoir3);
    min-width: 32px;
    text-align: center;
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 1;
}

/* ============================================
   Bandeau session arrêtée
   ============================================ */

.bandeauSessionArretee {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    background: var(--cRouge3);
    color: var(--cBlanc);
    font: var(--fH2);
    text-transform: uppercase;
    padding: 10px 20px;
    text-align: center;
    min-width: 50%;
    z-index: 999901;
}

/* Une scène qui ne peut pas démarrer (contrat non respecté, source changée après coup) :
   son message, à la place d'une exception silencieuse (MoteurEcran.afficherErreurScene). */
.bandeauErreurScene {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    background: var(--cRouge3);
    color: var(--cBlanc);
    font: var(--fH2);
    text-transform: uppercase;
    padding: 10px 20px;
    text-align: center;
    min-width: 50%;
    z-index: 999901;
}

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_progressBar.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   BARRE DE PROGRESSION — la frise des cues, cachée
   ============================================

   Décision du chef de projet, 2026-09-03 : plus d'icône dans la barre de pilotage — pendant
   une scène, la zone n'affichait que l'icône de la scène en cours, pour rien. La frise
   reste dans la page (gabarit _progressBar.twig et ses jumeaux d'aperçu), mais cachée :
   quatre lecteurs y prennent la liste des cues (reprise après coupure dans entreeEcran.js,
   « Scène suivante : X » ci-dessous, cueSuivante et allerCue dans MoteurEcran.ts). Elle ne
   se voit jamais. Les classes .passe / .actif / .futur, toujours posées par ProgressBar.ts,
   ne dessinent plus rien.
   ============================================ */

#progressBar {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    /* Aucun air vertical : la frise est cachée, il ne reste que le bouton « Scène suivante : X »,
       qui a la hauteur de tous les boutons de la barre — et la barre ne grandit pas. */
    padding: 0;
}

#progressBarBande {
    display: none;
}

/* ============================================
   Bouton « Scène suivante : X » — géré par le système (ProgressBar.ts)
   ============================================ */

/* Un EMPLACEMENT de confirmation (.ctaEmplacement, _sceneBoutons.css), le même que « Terminer »
   dans la barre de fin, dont il prend la place dès qu'une cue suit : ProgressBar.ts y écrit le
   bouton de repos (.cta14.ctaEcranPrimaire — LA silhouette des boutons de la barre, même hauteur
   garantie, barreActions.md) et le bouton « Êtes-vous sûr ? » (.ctaEcranConfirmation). Ici
   seulement l'apparition en fondu ; l'isolation pendant la confirmation est celle de tout
   emplacement armé (body.confirmationBarre, _sceneBoutons.css). */
#progressBarSuivant {
    opacity: 0;
    transition: opacity 0.3s ease;
    white-space: nowrap;
}

#progressBarSuivant.visible {
    opacity: 1;
}

/*!***********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_barreFin.css ***!
  \***********************************************************************************************************************************/
/* ============================================
   BARRE DE FIN DE SCÈNE (#barreFinScene, BarreFin.ts)
   ============================================

   Vit DANS la zone de progression (brique _zoneProgressBar.twig), mais HORS DE SON FLUX :
   #barreFinScene est une boîte flottante (position absolue) ancrée à la suite de la zone,
   posée PAR-DESSUS le reste de la barre de pilotage. Elle ne pousse rien : les boutons du
   dessous — voilés et injouables — gardent leur place, et la barre ne passe jamais sur
   deux lignes faute de largeur. Elle est transparente et hors d'atteinte au repos ; quand la
   scène déclare une fin, BarreFin.ts déploie ses boutons dans #barreFinContenu et la boîte
   paraît en fondu, portée par un court glissement — sans prendre la largeur à personne.

   Prise de pouvoir sur la barre — états posés sur #barrePilotage par BarreFin.ts, simple
   miroir de ce que la scène a déclaré :
   - .barreFinAvecRetour : fin annulable (« Annuler » présent). Le reste de la barre passe
     sous le voile — grisé, désaturé, mais PRÉSENT : rien n'est perdu. L'attribut inert
     (posé par BarreFin.ts) rend ces zones injouables ; le CSS ne fait que le montrer.
   - .barreFinSansRetour : fin sans retour. Les boutons du dessous se rangent
     (visibility, jamais display : les emplacements restent réservés).
   Fin sans retour et sans bouton déclaré : aucun état, rien ne bouge — la scène garde tous
   ses boutons (Show*, paginations, « Annuler » des scènes de tirage). C'est le cas de toutes
   les scènes sauf les quatre bingos : ces règles ne les concernent pas.
   ============================================ */

/* La boîte se pose à la suite de la zone de progression (left: 100%) et déborde par-dessus
   le reste de la barre. Son air est pris sur celui de la barre (règle #barrePilotage,
   _studioIntegree.css) : ses boutons sont à 8px du bord comme tous les autres, la boîte se
   dessine 4px en dedans — d'où la marge négative de son air. Quand « Passer à : X » est
   là, la zone est en flux avec son cadre (même air) : entre le cadre et la boîte, les
   16px de tout voisin, mesurés de bouton à bouton.

   width: max-content est OBLIGATOIRE, pas un confort : pour un élément hors flux, la largeur
   automatique est un shrink-to-fit calculé sur l'espace restant dans le bloc conteneur, et
   left: 100% ne laisse par définition AUCUN espace — la boîte se réduirait à son padding,
   quel que soit le nombre de boutons. On demande donc la largeur du contenu, plafonnée par
   max-width.

   L'ouverture est une ANIMATION (keyframes), pas une transition, et c'est délibéré :
   BarreFin.afficher() insère les boutons puis pose .visible dans le même tour de boucle,
   sans reflow entre les deux. Une transition n'aurait alors aucun état de départ affiché
   d'où partir — elle saute à l'arrivée (le symptôme « image de départ, image de fin »).
   Une animation, elle, rejoue toujours ses keyframes depuis le début, quel que soit ce qui
   a été rendu avant.

   Elle ne bouge QUE opacity et transform — les deux seules propriétés que le compositeur
   anime sans repeindre. Au moment de l'ouverture, la même frame porte déjà l'insertion des
   boutons, le voile et le grayscale du reste de la barre : tout ce qui demanderait un
   repaint par image (largeur, clip-path) y perd ses images intermédiaires. */
#barreFinScene {
    position: absolute;
    top: 50%;
    left: 100%;
    margin-left: calc(-1 * var(--gapReduit));
    width: max-content;
    /* Jamais plus large que ce qui reste d'écran à sa droite (le % se lit sur la zone de
       progression, son bloc conteneur) : le contenu se coupe plutôt que de sortir. */
    max-width: calc(100vw - 100% - 4 * var(--gapDefaut));
    /* Le centrage vertical est porté par transform, donc rejoué par chaque keyframe. */
    transform: translate(0, -50%);
    opacity: 0;
    visibility: hidden;
}

/* Fermeture : masquer() vide le contenu dans la foulée, il n'y a rien à faire disparaître
   en fondu — la boîte s'efface d'un coup, et c'est honnête. */
#zoneProgressBar:has(#progressBarSuivant.visible) #barreFinScene {
    margin-left: calc(16px - 2 * var(--gapReduit));
}

#barreFinScene.visible {
    opacity: 1;
    visibility: visible;
    animation: barreFinOuverture 0.25s ease-out;
}

@keyframes barreFinOuverture {
    from {
        opacity: 0;
        transform: translate(-10px, -50%);
    }
    to {
        opacity: 1;
        transform: translate(0, -50%);
    }
}

/* Le contenu porte le fond de la boîte : hors flux, il ne profite plus de celui de la zone
   de progression, et doit rester lisible au-dessus du voile. Même fond que la zone en fin :
   les deux boîtes se lisent comme une seule barre qui a changé. */
#barreFinContenu {
    display: flex;
    align-items: center;
    /* Même modèle que #divActionContextuelles (_sceneBoutons.css) : BarreFin.ts range ses
       boutons en groupes .divActionScene — « Terminer », les rattrapages (annuler, ajouter),
       le retour —, chacun séparé du suivant par le trait du groupe. Entre deux groupes, 16px
       de part et d'autre du trait ; dans un groupe, le gap commun des boutons ; dans un
       cadre de réglage, les cases serrées. Aucun autre écart (décision du chef de projet,
       2026-09-02). */
    gap: 16px;
    min-width: 0;
    overflow: hidden;
    padding: var(--gapReduit); /* l'air de toute boîte dans la barre */
    border-radius: var(--borderR2);
    background: var(--cAccent1);
}

/* Boutons de la barre de pilotage remontés dans la barre de fin (BarreFin.ts,
   rendreRemontes) : BoutonsActions.ts les range dans ses propres groupes .divActionScene.
   Le conteneur s'efface pour que ces groupes soient des enfants directs du rail — même
   gap, même trait, même :last-child sans trait — comme ceux que BarreFin écrit elle-même. */
#barreFinContenu .barreFinRemontes {
    display: contents;
}

/* La zone de progression en fin : fond légèrement différent — le « tiens, j'ai changé
   de barre » (transition et fond de repos dans _studioIntegree.css). */
#barrePilotage.barreFinAvecRetour #zoneProgressBar,
#barrePilotage.barreFinSansRetour #zoneProgressBar {
    background: var(--cAccent1);
}

/* Le voile — le geste d'une popup qui assombrit l'écran, confiné à la barre. La zone de
   progression passe au-dessus (z-index, _studioIntegree.css). Purement visuel
   (pointer-events none) : c'est inert qui rend le dessous injouable. Deux usagers : la
   barre de fin (ci-dessous) et la boîte de passage de l'aperçu (_preview.css), qui le lève
   dans l'ombre de l'écran pour ne laisser éclairé que le bouton « Passer à : X ». */
#barrePilotage::before {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--cOmbreForte);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s ease;
    z-index: 1;
}

#barrePilotage.barreFinAvecRetour::before,
#barrePilotage.barreFinSansRetour::before {
    opacity: 1;
}

#divActionContextuelles,
#zoneZoomVueKit {
    transition: filter 0.2s ease, opacity 0.2s ease;
}

/* Fin annulable : le dessous reste sous les yeux, grisé et désaturé — « Annuler »
   promet un retour, on montre que tout est encore là. */
#barrePilotage.barreFinAvecRetour #divActionContextuelles,
#barrePilotage.barreFinAvecRetour #zoneZoomVueKit {
    filter: grayscale(1);
    opacity: 0.5;
}

/* Fin sans retour : plus rien à faire dessous, les boutons se rangent. */
#barrePilotage.barreFinSansRetour #divActionContextuelles,
#barrePilotage.barreFinSansRetour #zoneZoomVueKit {
    visibility: hidden;
}

/* Silhouette : .cta14 (31_cta.css), posée par BarreFin.ts — même padding, même police,
   même rayon que les boutons de la barre de pilotage : hauteur identique garantie. Ici
   uniquement le rôle : même style que .ctaEcranSecondaire (blanc, contour et texte noirs). */
.barreFinBouton {
    border: var(--borderCta);
    background: var(--cBlanc);
    color: var(--cCtaTexte);
    white-space: nowrap;
}

.barreFinBouton:disabled {
    opacity: 0.4;
    cursor: default;
}

/* Le bouton principal du contexte (« Lot suivant », « Terminer ») : CTA plein, mêmes couleurs que
   .ctaEcranPrimaire — le chemin normal se voit du premier coup d'œil, les rattrapages
   (annuler, ajouter du stock) restent en contour. Le bouton « Êtes-vous sûr ? » qui se pose
   sur un bouton de fin armé est celui de tout emplacement (.ctaEcranConfirmation,
   _sceneBoutons.css). */
/* Plein = aucun contour visible : transparent garde l'épaisseur, la hauteur ne bouge pas. */
.barreFinBouton.barreFinPrincipal {
    background: var(--couleurCta, var(--cAccent3));
    border-color: transparent;
    color: var(--couleurCtaTexte, var(--cAccentt));
}

/* « Annuler » — bouton système, discret, toujours en dernier, dans son propre groupe.
   Silhouette .cta14 (posée par BarreFin.ts), ici uniquement le rôle. */
.barreFinRetour {
    border: var(--borderCta);
    background: var(--cBlanc);
    color: var(--cCtaTexte);
    white-space: nowrap;
}

/* L'isolation d'un bouton de fin armé (seul lui reste visible) est celle de tout emplacement
   de confirmation : body.confirmationBarre, _sceneBoutons.css. */

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_zoneActions.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   COMPTEURS PARTICIPANTS — bas gauche de l'écran
   Empilés verticalement, icône à gauche, compteur à droite aligné
   ============================================ */

#compteursParticipants {
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
    padding: 6px 12px;
    background: var(--cBlancOverlay);
    border-radius: var(--borderR1);
}

.compteurSource,
#compteurTotalFormulaire {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
}

/* Le total des inscriptions en direct, sous les compteurs des formulaires. */
#compteurTotalFormulaire {
    padding-top: var(--gapReduit);
    border-top: var(--border);
}

#compteurTotalFormulaire .compteurLibelle {
    font: var(--fLabel);
    color: var(--cNoir4);
}

.compteurSource img {
    width: 20px;
    height: 20px;
    opacity: 0.7;
}

.compteurSource .compteurNombre,
#compteurTotalFormulaire .compteurNombre {
    font: var(--fLabel);
    color: var(--cNoir2);
    min-width: 3ch;
    text-align: right;
}

/* « / 500 » : la limite de l'offre, en retrait du total. */
#compteurTotalFormulaire .compteurLimite {
    font: var(--fLabel);
    color: var(--cNoir4);
}

/* Dès 90 % de la limite, et au-delà : l'organisateur est prévenu (ParticipantService::etatLimiteInscriptionsFormulaire). */
.compteurAlerte .compteurNombre {
    color: var(--cOr4);
}

.compteurOffert .compteurNombre {
    color: var(--cRouge3);
}

.compteurPlacesOffertes {
    display: none;
    font: var(--fLabel);
    color: var(--cRouge3);
}

.compteurOffert .compteurPlacesOffertes {
    display: inline;
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_sceneBoutons.css ***!
  \***************************************************************************************************************************************/
/* ============================================
   Boutons d'animation + zone d'animation
   ============================================ */

/* Zone d'animation dans #zoneAffichage */
#zoneScene {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
}

/* Boutons de la barre d'actions de l'écran (BoutonsActions.ts) :
   silhouette commune .cta14 (31_cta.css) — ici uniquement les couleurs par rôle.
   bouton / secondaire / info = LE bouton neutre commun : fond blanc, LA bordure,
   LE noir (décision PO 2026-07-18 : un bouton ne choisit ni son padding, ni sa
   bordure, ni sa couleur — variables --paddingCta14 / --borderCta / --cCtaTexte). */
.ctaEcranBouton,
.ctaEcranSecondaire,
.ctaEcranInfo {
    background: var(--cBlanc);
    border: var(--borderCta);
    color: var(--cCtaTexte);
}

/* Plein = aucun contour visible, mais LA bordure est là, transparente : elle garde son
   épaisseur, et un bouton plein fait exactement la hauteur d'un bouton à contour (34 contre
   36 px avant — défaut vu par le chef de projet, 2026-09-16). Même parti que
   .barreFinPrincipal (_barreFin.css). */
.ctaEcranPrimaire,
.ctaEcranDanger {
    border: var(--borderCta);
    border-color: transparent;
}

.ctaEcranPrimaire {
    background: var(--couleurCta, var(--cAccent3));
    color: var(--couleurCtaTexte, var(--cAccentt));
}

.ctaEcranDanger {
    background: var(--cRouge3);
    color: var(--cBlanc);
}

/* Emplacement partagé par deux boutons qui s'excluent (Annuler / Êtes-vous sûr ?) :
   une seule cellule, jamais côte à côte. Au repos, le bouton de confirmation est hors du
   flux (display, posé par BoutonsActions ou EmplacementConfirmation.ts) et l'emplacement
   suit le bouton de repos. Armé, les deux sont dans la cellule, à la même taille — le bouton
   de repos tient la place, la confirmation se pose dessus — et la bulle de confirmation
   (_bulleConfirmation.css) se pose sur eux depuis le body. Jamais de place vide à côté. */
.ctaEmplacement {
    display: grid;
}

.ctaEmplacement > * {
    grid-area: 1 / 1;
}

/* Le bouton « Êtes-vous sûr ? » d'un emplacement système (EmplacementConfirmation.ts :
   « Terminer », « Scène suivante : X », les gestes de fin d'une scène) : noir pour un passage,
   rouge pour un geste dangereux (`danger`). Un seul rendu, quelle que soit la barre. */
.ctaEcranConfirmation {
    border: var(--borderCta);
    border-color: var(--cNoir);
    background: var(--cNoir);
    color: var(--cBlanc);
    white-space: nowrap;
}

.ctaEcranConfirmation.danger {
    border-color: var(--cRouge3);
    background: var(--cRouge3);
}

/* Isolation pendant la confirmation (body.confirmationBarre, posé par EmplacementConfirmation.ts
   tant qu'un emplacement est armé — un seul à la fois, toutes barres confondues) : le dessous
   de la barre s'efface, et dans la zone de progression seul l'emplacement armé reste — lui,
   ce qu'il contient, et ce qui le contient (son groupe, son cadre, la boîte de fin). Tout le
   reste (« Scène suivante » si c'est un bouton de fin, la boîte de fin entière si c'est
   « Scène suivante », les autres groupes et leur trait, le retour) disparaît. visibility,
   jamais display : les emplacements restent réservés, la barre ne se recompose pas à
   l'entrée/sortie de l'étape de confirmation.
   Exception : les cases du cadre de réglage où vit l'emplacement armé ([−] n [+] à côté
   d'« Ajouter des tirages ») restent visibles. Elles disent CE QUE l'on confirme : cacher le
   nombre au moment de dire « oui » surprend (décision du chef de projet, 2026-10-01). */
body.confirmationBarre #divActionContextuelles,
body.confirmationBarre #zoneZoomVueKit,
body.confirmationBarre #zoneProgressBar :not(.ctaEmplacementArme, .ctaEmplacementArme *, :has(.ctaEmplacementArme), .reglageSceneGroupe:has(.ctaEmplacementArme) *) {
    visibility: hidden;
}

/* L'emplacement ne porte aucune marge : dans un groupe, l'écart entre deux boutons est
   TOUJOURS le gap du groupe (décision du chef de projet, 2026-09-02). Ce qui doit se lire
   à part passe par un séparateur (trait) ou par un cadre (.reglageSceneGroupe,
   .toggleSceneGroupe), jamais par une marge posée sur un bouton. */

/* Ancien design des boutons d'animation — encore utilisé par la télécommande (#tcActions),
   les stations tournoi (StationTournoi.ts, animations Trn*) et le kit pur saisie
   (Formulaire.ts). À migrer vers .cta14 dans un lot ultérieur (décision PO 2026-07-18 :
   strictement les 4 barres pour ce lot). */
.btnScene {
    padding: 6px 16px;
    border: var(--borderCta);
    border-radius: var(--borderR1);
    background: var(--cBlanc);
    font: var(--fMenu14);
    color: var(--cCtaTexte);
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.2s, color 0.2s, border-color 0.2s;
}

.btnScene:disabled {
    opacity: 0.4;
    cursor: auto;
}

.btnScenePrimaire {
    background: var(--couleurCta, var(--cAccent3));
    border-color: var(--couleurCta, var(--cAccent3));
    color: var(--couleurCtaTexte, var(--cAccentt));
}

/* Le fond suit le thème et non un blanc en dur : sur un thème sombre, la couleur d'action
   est claire, et un bouton blanc lui donnerait 3,1:1 — sous le seuil AA. */
.btnSceneSecondaire {
    background: var(--couleurFond, var(--cBlanc));
    border-color: var(--couleurCta, var(--cAccent3));
    color: var(--couleurCta, var(--cAccent3));
}

.btnSceneDanger {
    background: var(--cRouge3);
    border-color: var(--cRouge3);
    color: var(--cBlanc);
}

.btnSceneInfo {
    background: var(--cBlanc);
    border-color: var(--cAccent3);
    color: var(--cAccent3);
}

/* Un libellé ne se plie JAMAIS dans son bouton : faute de largeur, c'est la barre qui se
   plie, par crans. AdaptationBarre.ts mesure un débordement — un texte replié sur deux
   lignes n'en fait aucun, et aucun cran ne se déclencherait. */
#barrePilotage .cta14,
#barrePilotage .toggleSceneBtn {
    white-space: nowrap;
}

/* Conteneur des groupes — horizontal, sur une ligne : c'est ce débordement que mesure
   AdaptationBarre.ts pour poser ses crans. Le retour à la ligne est le dernier d'entre eux. */
#divActionContextuelles {
    display: flex;
    align-items: center;
    flex-wrap: nowrap;
    gap: 16px; /* symétrique du padding-right des groupes : la bordure respire des deux côtés */
}

/* Cran « deux lignes » : les groupes passent à la ligne. Entre deux lignes, l'écart moyen —
   de quoi loger le titre d'un cadre (.toggleSceneTitre, hors flux au-dessus de son
   groupe) sans le trou des 16px prévus pour la largeur. */
#barrePilotage.barreDeuxLignes #divActionContextuelles {
    flex-wrap: wrap;
    row-gap: var(--gapMoyen);
}

/* Groupes de boutons (séparés par bordure droite) */
.divActionScene {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    padding-right: 16px;
    /* LE trait : le même dans la barre de pilotage et la barre d'aperçu, et de ce gris-là —
       le clair d'avant ne se voyait pas (décision du chef de projet, 2026-09-16). */
    border-right: 1px solid var(--cNoir4);
}

.divActionScene:last-child {
    padding-right: 0;
    border-right: none;
}

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_toggleScene.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   Toggle animation (choix exclusif)
   ============================================ */

.toggleSceneGroupe {
    display: flex;
    position: relative;
    /* Les plans internes du toggle (indicateur 0, boutons 1) restent confinés au groupe :
       sans cela, les boutons montaient dans l'échelle de la barre de pilotage et passaient
       au-dessus de son voile (#barrePilotage::before, z 1 — _barreFin.css). */
    isolation: isolate;
    background: var(--cBlanc03);
    border-radius: var(--borderR1);
}

/* Hors flux : le titre ne réserve aucune hauteur, il ne doit pas gêner la lecture de la barre */
.toggleSceneTitre {
    position: absolute;
    top: 2px;
    left: 3px;
    transform: translateY(-100%);
    font: var(--fMini11);
    color: var(--cNoir4);
    white-space: nowrap;
    pointer-events: none;
}

.toggleSceneIndicateur {
    position: absolute;
    top: 0;
    bottom: 0;
    background: var(--cBlanc1);
    transition: left 0.35s cubic-bezier(0.4, 0, 0.2, 1),
                width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
                border-radius 0.35s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 0;
    border: 1px solid  var(--cNoir1);
    pointer-events: none;
}

.toggleSceneBtn {
    position: relative;
    z-index: 1;
    padding: var(--paddingCta14); /* même hauteur que les cta de la barre d'actions */
    border: none;
    font: var(--fMenu14);
    cursor: pointer;
    background: transparent;
    color: var(--cNoir3);
    border-radius: var(--borderR1);
}

.toggleSceneBtn:hover:not(.selectionne):not(:disabled) {
    color: var(--cNoir1);
}

.toggleSceneBtn.selectionne {
    color: var(--cNoir1);
    cursor: default;
}

.toggleSceneBtn:disabled {
    opacity: 0.4;
    cursor: auto;
}

/* Groupe qui n'offre plus de choix (au plus un bouton actif, ou figé par verrouillerChoix) */
.toggleSceneGroupe.sansChoix .toggleSceneBtn,
.toggleSceneGroupe.sansChoix .toggleSceneIndicateur {
    opacity: 0.4;
}

.toggleSceneGroupe.sansChoix .toggleSceneBtn {
    cursor: auto;
    pointer-events: none;
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_reglageScene.css ***!
  \***************************************************************************************************************************************/
/* ============================================
   Groupe de réglage ([−][−][valeur][+][+])
   ============================================ */

/* Cadre : même fond que les groupes de toggles — c'est lui qui fait lire les cinq cases
   comme UN groupe, détaché de ses voisins (loi de proximité). Ancre du titre absolu
   (.toggleSceneTitre, hors flux — même principe que les toggles). */
.reglageSceneGroupe {
    display: flex;
    position: relative;
    align-items: center;
    gap: var(--gapReduit);
    padding: 2px var(--gapReduit);
    background: var(--cBlanc03);
    border-radius: var(--borderR1);
}

/* Boutons ± : carrés — la recette des boutons de zoom (sélecteur élargi dans
   _studioIntegree.css). On neutralise le padding de la silhouette .cta14, sinon le
   carré 28×28 n'a plus de place pour son glyphe. */
.reglageSceneGroupe .ctaEcranSecondaire {
    padding: 0;
}

/* La case de la valeur : PAS un bouton — aucun entourage, la valeur nue posée sur le
   fond du groupe. Plus large que les carrés, jamais carrée. L'unité vit dans le titre.
   Chiffres de même chasse et largeur de quatre chiffres (3600 est le plafond du délai) :
   la valeur change à chaque appui, la case ne doit jamais bouger ni pousser ses voisins. */
.reglageSceneGroupe .ctaEcranInfo {
    background: transparent;
    border: none;
    padding: 0;
    min-width: 4ch;
    text-align: center;
    font-variant-numeric: tabular-nums;
}

.reglageSceneGroupe .ctaEcranInfo:disabled {
    opacity: 1;
    cursor: default;
}

/*!********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_bulleConfirmation.css ***!
  \********************************************************************************************************************************************/
/* ============================================
   BULLE DE CONFIRMATION (BulleConfirmation.ts)
   Le geste « Êtes-vous sûr ? » des barres du bas — décision du chef de projet,
   2026-09-02, sur maquette. Tout est LINÉAIRE : aucune accélération.
   ============================================

   L'emplacement (.ctaEmplacement, _sceneBoutons.css) est une cellule de grille où le bouton
   de repos et le bouton de confirmation se superposent, à la même taille. La bulle, elle,
   vit dans le BODY, en position fixe, dans son propre plan du chrome (échelle de
   salleEcran.css) : dans la barre, elle resterait sous la barre de l'aperçu. Elle est
   posée sur le bouton par ses coordonnées (BulleConfirmation.ts) et ne coûte pas un pixel
   de largeur ni de hauteur à la barre. La barre étant en bas de l'écran, la bulle s'ouvre
   vers le haut, par-dessus la scène — la largeur manque toujours dans ces barres, la
   hauteur non. */

/* Le bouton de repos, armé : il ne fait plus que tenir sa place et sa largeur dans la
   barre, sous le verre. Son texte s'efface — le libellé est monté dans la bulle. */
.ctaEmplacement > .ctaRepos {
    color: transparent;
    pointer-events: none;
}

/* Le bouton de confirmation : même cellule, donc exactement l'empreinte du bouton de repos.
   Il apparaît après l'ouverture de la bulle (0,1 s), en 0,1 s. Il est sous la souris dès
   l'armement (la main ne redevient pas une flèche) ; le clic trop tôt est ignoré par le
   script (anti-double-clic), pas par le CSS. */
.ctaEmplacement > .ctaConfirmation {
    z-index: 2;
    animation: bulleConfirmationApparition .1s linear .1s both;
}

@keyframes bulleConfirmationApparition {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Le double en verre du bouton. Naît EXACTEMENT sur lui (coordonnées posées par le script),
   puis s'ouvre (.etendue : nouvelles coordonnées, mêmes transitions). --h : la hauteur du
   bouton, posée par le script. */
.bulleConfirmation {
    --bulleFond: rgba(255, 255, 255, .65);
    --bulleFlou: 2px;
    --cConfirmation: var(--cNoir);          /* passage (Terminer) : noir */
    position: fixed;
    z-index: 999925;                        /* au-dessus de la barre de l'aperçu (999922) */
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    box-sizing: border-box;
    padding: 0;
    font: var(--fMenu14);
    color: var(--cNoir1);
    white-space: nowrap;
    border-radius: var(--borderR1);
    background: var(--bulleFond);
    -webkit-backdrop-filter: blur(var(--bulleFlou)) saturate(1.4);
    backdrop-filter: blur(var(--bulleFlou)) saturate(1.4);
    border: 1px solid var(--cOmbre);
    box-shadow: var(--ombrePortee);
    pointer-events: none;
    transition: top .1s linear, left .1s linear, width .1s linear, height .1s linear,
                padding .1s linear;
}

.bulleConfirmation.danger {
    --cConfirmation: var(--cRouge3);         /* geste dangereux (annuler, ajouter) : rouge */
}

/* La ligne du libellé : la hauteur du bouton, le texte centré dedans. Au départ elle remplit
   la bulle ; à l'arrivée elle est en haut. */
.bulleConfirmationLibelle {
    height: var(--h);
    display: flex;
    align-items: center;
}

/* Ouverte : 5px de tour en bas et sur les côtés. De bas en haut : le bouton, 2px, la mèche
   (2px), 5px, la ligne du libellé, 5px. À l'endroit du bouton, la bulle est DÉCOUPÉE : le
   bouton de confirmation, resté dans la barre (un plan plus bas), se voit net à travers le
   trou. Le masque : toute la bulle, moins le rectangle du bouton (5px des bords, 5px du
   bas, haut de --h). */
.bulleConfirmation.etendue {
    padding-top: 5px;
    -webkit-mask-image: linear-gradient(#000, #000), linear-gradient(#000, #000);
    -webkit-mask-size: 100% 100%, calc(100% - 10px) var(--h);
    -webkit-mask-position: 0 0, 5px calc(100% - 5px);
    -webkit-mask-repeat: no-repeat;
    -webkit-mask-composite: xor;
    mask-image: linear-gradient(#000, #000), linear-gradient(#000, #000);
    mask-size: 100% 100%, calc(100% - 10px) var(--h);
    mask-position: 0 0, 5px calc(100% - 5px);
    mask-repeat: no-repeat;
    mask-composite: exclude;
}

/* La mèche : juste au-dessus du bouton, à 2px, d'un bord à l'autre, de la couleur de la
   confirmation. Elle se consume de droite à gauche, linéaire, le temps du délai
   d'armement moins l'ouverture (--dureeMeche, posée par le script). */
.bulleConfirmation::before {
    content: '';
    position: absolute;
    bottom: calc(var(--h) + 7px);
    left: 5px; right: 5px;
    height: 2px;
    border-radius: 1px;
    background: var(--cConfirmation);
    transform-origin: left center;
    transform: scaleX(1);
    opacity: 0;
}

.bulleConfirmation.etendue::before {
    opacity: 1;
    animation: bulleConfirmationMeche var(--dureeMeche) linear .2s forwards;
}

@keyframes bulleConfirmationMeche {
    from { transform: scaleX(1); }
    to   { transform: scaleX(0); }
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/boutonFermeture.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   BOUTON DE FERMETURE (.modaleClose) — source unique (docs/designSystem/boutonFermeture.md)

   La croix est dessinée par ::before (mask SVG ci-dessous) : en HTML le bouton reste VIDE —
   ne JAMAIS y mettre × / &times; / texte. Réutilisable : VIDE = croix centrée ; avec un
   enfant .modaleCloseTexte = la même boîte s'élargit et un libellé s'ajoute à GAUCHE de la
   croix (ex. « Prendre la main ✕ »). Pas de padding horizontal : la croix a déjà ~6px de
   marge interne à droite (mask 6→18 sur viewBox 24), c'est .modaleCloseTexte qui redonne
   le même air à gauche → équilibré.

   Ici la silhouette GÉNÉRALE (boîte souple, croix 20px — barre d'aperçu écran). Les
   contextes n'écrivent que leurs écarts, APRÈS leur @import de ce fichier :
   - modales Studio (56_scenario/_modale.css) : boîte fixe 44×44, croix 24 ;
   - surcouche aperçu (composants/surcouchePreview.css) : idem + masque « plein écran ».
   ============================================ */

.modaleClose {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 25px;
    padding: var(--gapDefaut) var(--gapReduit); /* vertical aligné sur .cta14 (même rythme dans la barre aperçu) */
    gap: var(--gapDefaut);
    border: none;
    border-radius: var(--borderR1);
    background: transparent;
    cursor: pointer;
    transition: background 0.2s;
}

.modaleClose::before {
    content: '';
    order: 1; /* croix à droite d'un éventuel .modaleCloseTexte (seule = centrée, inchangé) */
    width: 20px;
    height: 20px;
    background-color: var(--cNoir1);
    mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
}

.modaleClose:hover {
    background: var(--cBlanc02);
}

/* Libellé optionnel à gauche de la croix (cf. en-tête). Le padding gauche donne au texte
   le même air (~6px) que la marge interne de la croix à droite → visuellement équilibré. */
.modaleCloseTexte {
    padding-left: var(--gapReduit);
    font: var(--fMenu14);
    color: var(--cNoir1); /* même teinte que la croix */
}

/*!******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/jaime.css ***!
  \******************************************************************************************************************************/
/* ============================================
   LE CŒUR « J'AIME » ET SON COMPTEUR — brique noyau _jaime.twig, Vitrine comme Studio
   (décision chef de projet 2026-09-12)

   Quatre états, façon X, tous ici et nulle part ailleurs :
     1. éteint            — contour gris, chiffre gris ;
     2. survol (actif)    — cœur et chiffre en rouge, un disque pâle derrière le cœur ;
     3. allumé            — cœur PLEIN, rouge, un peu plus grand — un peu seulement, ça se
                            joue à très peu (chef de projet) ;
     4. allumé au survol  — le même, avec le disque pâle.
   Plus l'inactif (`disabled`) : le visiteur non connecté voit le cœur et le nombre, il ne
   peut pas y toucher. Ni survol, ni curseur, et À MOITIÉ ESTOMPÉ (décision chef de projet
   2026-09-16, qui défait le « pas grisé » du 2026-09-12) : un cœur plein et net se lit comme
   une commande, et le visiteur déconnecté cliquait dessus sans comprendre pourquoi rien ne
   se passait.

   Le rouge est celui du cœur (--cCoeur3, --cCoeur0 pour le survol, 10_font.css) : un rouge
   sang, bordeaux foncé, à lui — le rouge de la famille --cRouge dit l'alerte et le danger,
   pas l'affection (décision chef de projet 2026-09-16, qui remplace le --cRouge3 du 12).
   Aucune couleur en dur (docs/designSystem/couleurs.md).

   Le bouton ne pose ni bordure ni fond : c'est une icône et un chiffre posés à même la page,
   comme le lien « En savoir plus » d'une tuile (.lienScenePlus). Padding : --gapReduit, la
   même variable que ce lien — une valeur nommée, jamais un chiffre (assets/vitrine/css/CLAUDE.md).
   ============================================ */
.toggleJaime {
    display: inline-flex;
    align-items: center;
    gap: var(--gapReduit);
    padding: var(--gapReduit) 0;
    border: none;
    background: none;
    font: var(--fMenu14);
    color: var(--cNoir3);
    cursor: pointer;
    user-select: none;
    /* `opacity` : le passage de 25 % à 50 % ou à 100 %, quand la réponse de fin de page
       arrive, se fait en fondu et non d'un coup — le cœur ne clignote plus (décision chef de
       projet 2026-09-16). `color` : le survol, comme avant. */
    transition: color 0.2s, opacity 0.4s;
}

/* Le disque pâle du survol est un pseudo-élément derrière le cœur : le cœur reste à sa
   place, seul le fond apparaît. `isolation` + `z-index` pour qu'il passe DERRIÈRE le tracé
   du cœur sans sortir du bouton. */
.toggleJaimeCoeur {
    position: relative;
    isolation: isolate;
    flex: none;
    width: 20px;
    height: 20px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linejoin: round;
    overflow: visible;
    transition: transform 0.2s, fill 0.2s, stroke 0.2s;
}

.toggleJaimeCoeur::before {
    content: '';
    position: absolute;
    z-index: -1;
    inset: -8px;
    border-radius: 50%;
    background: var(--cCoeur0);
    opacity: 0;
    transition: opacity 0.2s;
}

/* Le chiffre ne réserve aucune largeur : à zéro il est vide, le cœur est seul. */
.toggleJaimeNombre {
    font-variant-numeric: tabular-nums;
}

/* 2 — survol, bouton ACTIF seulement */
.toggleJaime:not(:disabled):hover {
    color: var(--cCoeur3);
}

.toggleJaime:not(:disabled):hover .toggleJaimeCoeur::before {
    opacity: 1;
}

/* 3 — allumé : cœur plein, à peine plus grand */
.toggleJaime[aria-pressed="true"] {
    color: var(--cCoeur3);
}

.toggleJaime[aria-pressed="true"] .toggleJaimeCoeur {
    fill: currentColor;
    transform: scale(1.08);
}

/* Le petit rebond quand on clique : le cœur grossit puis revient. Posé par le JavaScript
   au moment du geste, retiré à la fin de l'animation — jamais au chargement, sinon trente
   cœurs rebondiraient en chœur à l'ouverture de la page. */
.toggleJaimeAnime .toggleJaimeCoeur {
    animation: toggleJaimeRebond 0.35s ease-out;
}

@keyframes toggleJaimeRebond {
    0%   { transform: scale(1); }
    40%  { transform: scale(1.35); }
    100% { transform: scale(1.08); }
}

/* Inactif : pas de survol, pas de curseur, et ESTOMPÉ À 50 % (décision chef de projet
   2026-09-16). Le visiteur doit VOIR qu'il ne peut pas cliquer : sans l'estompe, un cœur
   inactif ressemblait trait pour trait à un cœur actif au repos.
   Le 2026-09-12 avait tranché l'inverse (« pas grisé, c'est une information ») : le chiffre
   reste lisible à 50 %, l'information est toujours là.
   Sur le Studio, l'utilisateur est toujours connecté : cet état n'y apparaît pas. */
.toggleJaime:disabled {
    cursor: default;
    opacity: 0.5;
}

/* EN ATTENTE : 25 % (décision chef de projet 2026-09-16). Le cœur tel que le serveur
   l'écrit, avant que la requête de fin de page ait répondu. Le JavaScript retire la classe
   dès la réponse : le cœur passe alors à 50 % (déconnecté, `disabled` ci-dessus) ou à 100 %
   (connecté). Trois paliers, pour qu'aucun ne se confonde avec un autre.
   ⚠️ Même poids que `.toggleJaime:disabled` (une classe + une classe, une classe + une
   pseudo-classe) : c'est l'ORDRE qui tranche. Cette règle doit rester APRÈS celle-là. */
.toggleJaime.toggleJaimeAttente {
    opacity: 0.25;
}

/* Le même halo de focus que les liens et boutons du site (31_cta.css). */
.toggleJaime:focus {
    outline: none;
}

.toggleJaime:focus-visible {
    box-shadow: 0 0 0 3px var(--cFormFocus);
    border-radius: 999px;
}

@media (prefers-reduced-motion: reduce) {
    .toggleJaime,
    .toggleJaimeCoeur,
    .toggleJaimeCoeur::before {
        transition: none;
    }

    .toggleJaimeAnime .toggleJaimeCoeur {
        animation: none;
    }
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/etiquetteJaime.css ***!
  \***************************************************************************************************************************************/
/* ============================================
   L'ÉTIQUETTE ET SON CŒUR « J'AIME » — brique noyau _etiquetteJaime.twig
   (décision chef de projet 2026-09-16)

   Une boîte, deux pièces, une largeur qui ne change JAMAIS. C'est tout le travail de ce
   fichier : rendre le bloc immobile, pour qu'on puisse le poser n'importe où sur la Vitrine
   sans qu'il bouge au clic.

   CE FICHIER NE PLACE RIEN. Pas de marge, pas d'alignement, pas de largeur imposée : la
   brique dit comment le bloc est construit, la page qui l'accueille dit où il se pose.
   C'est ce partage qui la rend placardable partout.

   ⚠️ Il ne touche pas à composants/jaime.css : le cœur garde sa seule et unique source. Tout
   ce qui est écrit ici est porté par `.etiquetteJaime`, donc n'atteint QUE ce bloc — les
   sept autres endroits où le cœur vit sont inchangés.
   ============================================ */

/* `inline-flex` : la boîte prend exactement la largeur de son contenu, ni plus ni moins.
   C'est ce qui permet à l'appelant de la centrer (align-self, text-align, justify-content…)
   sans qu'elle s'étire à toute la colonne.
   --gapLarge (20px) : à 8px (--gapDefaut) puis à 12px (--gapMoyen), le mot et le cœur se
   lisaient comme un seul bloc serré (décision chef de projet 2026-09-16). Une valeur nommée,
   jamais un chiffre (assets/vitrine/css/CLAUDE.md). */
.etiquetteJaime {
    display: inline-flex;
    align-items: center;
    gap: var(--gapLarge);
}

/* L'ÉTIQUETTE EN CHASSE FIXE (décision chef de projet 2026-09-16). C'est le nom du dossier
   de la scène — `RafflePluck` —, pas une phrase : du PascalCase que personne ne traduit. Le
   mono dit « ceci est un identifiant » sans qu'on ait à l'écrire.
   C'est le geste que le Studio fait déjà sur les étiquettes de l'organisateur (.etiquetteMono,
   studio/56_scenario/_etiquettes.css, décision PO 2026-06-10) — là-bas la chasse fixe
   distingue le mot de l'utilisateur des libellés du système ; ici elle distingue
   l'identifiant du texte rédigé. Même outil, intention voisine.

   --fMono16 et pas --fMono24b : le mono d'un LIBELLÉ, pas celui d'un gros chiffre. La
   variable dormait, commentée « inutilisé » depuis le 2026-06-13 ; elle est remise en
   service pour ce bloc (10_font.css), aucune valeur nouvelle n'entre dans le système.
   Sur la page d'une scène, l'étiquette était jusqu'ici au corps d'un H2 : 24px gras, plus
   lourde que le vrai titre de la page juste au-dessus. */
.etiquetteJaimeTexte {
    font: var(--fMono16);
    color: var(--cNoir2);
}

/* LA CASE DU CHIFFRE — le cœur de l'affaire (décision chef de projet 2026-09-16).
   Dans sa brique, le compteur « ne réserve aucune largeur » : à zéro il est vide, le cœur est
   seul. C'est juste là où le cœur finit la ligne. Ça ne l'est plus dès qu'il a un voisin : le
   premier « J'aime » élargissait le bouton, et tout ce qui l'entourait glissait.
   Ici le chiffre a sa case, et il ne la quitte pas. Deux caractères — de 0 à 99, la case
   suffit ; au-delà elle s'élargit, et c'est assumé.
   `ch` : la largeur d'un chiffre dans la fonte du bouton. Ce n'est pas une mesure inventée en
   pixels, c'est la case que le texte occupe — et `font-variant-numeric: tabular-nums`, déjà
   posé sur ce span, garantit que tous les chiffres ont la même.
   Porté par `.etiquetteJaime` : les cœurs des autres pages ne réservent toujours rien. */
.etiquetteJaime .toggleJaimeNombre {
    min-width: 2ch;
}

/*!**********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPur/preview/pointeurPreview.css ***!
  \**********************************************************************************************************************************************/
/* Le pointeur fictif des aperçus (PointeurPreview.ts) : tout ce que la flèche de la souris
   (.curseurPreview) et le doigt du téléphone (.doigtParcours) ont en commun — le trait, le
   glissement qui grossit, le recul du clic, le rond du clic.

   Une variante ne déclare que sa position, et sa pointe dans le dessin de 48 px :
   --pointeurPointeX, --pointeurPointeY.

   --pointeurEchelle, posée sur le conteneur quand il est lui-même réduit (le cadre du
   téléphone) : le pointeur et son rond grossissent d'autant, pour garder à l'écran la taille et
   l'épaisseur de trait de la flèche. */

.pointeurPreview {
    pointer-events: none;
    /* La pointe est posée sur le point visé, et tout grossissement ou recul part d'elle : elle ne
       quitte jamais ce point. */
    margin: calc(-1 * var(--pointeurPointeY)) 0 0 calc(-1 * var(--pointeurPointeX));
    transform-origin: var(--pointeurPointeX) var(--pointeurPointeY);
    transform: scale(var(--pointeurEchelle, 1));
    transition: left 0.5s ease-out, top 0.5s ease-out, transform 0.2s ease-out, opacity 0.2s;
    filter: drop-shadow(2px 2px 2px var(--cOmbreForte)) drop-shadow(2px 2px 2px var(--cOmbreForte));
}

.pointeurPreview svg {
    display: block;
    width: 48px;
    height: 48px;
}

/* Blanc cerné de noir : un contour blanc disparaît sur les boutons blancs, le noir tranche sur
   tous. */
.pointeurPreview path {
    fill: var(--cBlanc);
    stroke: var(--cNoir);
    stroke-width: 1.5;
    stroke-linejoin: round;
}

/* Grossi pendant le glissement : on voit le pointeur partir et où il va. Il reprend sa taille à
   l'arrivée, pour ne rien cacher au moment du clic. */
.pointeurPreviewDeplacement {
    transform: scale(calc(var(--pointeurEchelle, 1) * 1.6));
}

/* La transition redonne left/top : sans eux, un déplacement lancé pendant le recul sauterait. */
.pointeurPreviewClic {
    transform: scale(calc(var(--pointeurEchelle, 1) * 0.75));
    transition: left 0.5s ease-out, top 0.5s ease-out, transform 0.1s ease-in, opacity 0.2s;
}

/* Le rond du clic (PointeurPreview.appuyerSur). Il s'OUVRE par animation (transform) et
   s'EFFACE par transition (opacity), à part : l'extinction rapide reprend l'opacité là où
   elle en est, sans saut — une animation relancée repartirait de zéro. */
.pointeurPreviewFlash {
    pointer-events: none;
    width: 60px;
    height: 60px;
    margin-left: -30px;
    margin-top: -30px;
    border-radius: 50%;
    /* Le même rond pour la souris et le doigt (décision chef de projet, 2026-10-06) : un disque
       sombre translucide cerclé de blanc se voit sur une page claire comme sur un fond foncé,
       aucune variante n'a à le recolorer. */
    background: var(--cOmbreForte);
    border: 3px solid var(--cBlanc);
    opacity: 1;
    transition: opacity 0.45s ease-out 0.15s;
    animation: pointeurPreviewFlashAnim 0.6s ease-out forwards;
}

/* Posée à la frame suivant la naissance du rond : l'effacement normal, sur la durée de l'ouverture. */
.pointeurPreviewFlashFondu {
    opacity: 0;
}

/* La cible a disparu sous le clic (bouton rangé, changement de cue) : le rond s'éteint tout
   de suite plutôt que de finir de s'ouvrir sur du vide. */
.pointeurPreviewFlashEteint {
    transition-duration: 0.15s;
    transition-delay: 0s;
}

@keyframes pointeurPreviewFlashAnim {
    0%   { transform: scale(0); }
    100% { transform: scale(calc(var(--pointeurEchelle, 1) * 2.5)); }
}

/*!****************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/previewParticipant/css/doigtParcours.css ***!
  \****************************************************************************************************************************************************/
/* Le doigt des aperçus (DoigtParcours.ts) : celui de l'aperçu participant, et celui du
   téléphone posé à côté du grand écran de l'aperçu (TelephoneApercu.ts, entrée salleEcran).
   Une variante du pointeur commun (kitPur/preview/pointeurPreview.css), que l'hôte importe
   avant cette feuille : le trait, le glissement et le clic sont ceux de la flèche de souris. */

/* Dans l'écran du cadre, par-dessus l'iframe. Le bout de l'index est à (11,25 ; 2) de la grille
   de 28, soit (19,29 ; 3,43) px dans le dessin de 48 px. */
.doigtParcours {
    position: absolute;
    left: 50%;
    top: 70%;
    z-index: 2;
    opacity: 0;
    --pointeurPointeX: 19.29px;
    --pointeurPointeY: 3.43px;
}

.doigtParcoursVisible {
    opacity: 1;
}

/* Le rond du clic est celui du pointeur commun, même couleur que pour la souris : seule sa place
   dans le cadre est à lui. */
.doigtParcoursFlash {
    position: absolute;
    z-index: 1;
}

/*!**********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_preview.css ***!
  \**********************************************************************************************************************************/
/* ============================================
   Aperçu — Overlay, curseur, bouton prise en main
   ============================================ */

/* Bouton de fermeture (.modaleClose + .modaleCloseTexte) : source unique du composant —
   la barre d'aperçu utilise sa silhouette générale telle quelle, aucun écart ici. */
/* POC (chef de projet, 2026-09-16) : l'étiquette et le cœur « J'aime » du site, reflétés dans
   la barre de l'aperçu quand elle joue dans la fenêtre du site (MoteurPreview.dessinerGestesSite). */
/* Le pointeur fictif : ce que la flèche de souris (plus bas, « Curseur ») et le doigt ont en commun. */
/* Le doigt de l'aperçu participant, qui touche aussi le téléphone posé à côté de la scène (TelephoneApercu.ts). */

/* Overlay assombrissant brièvement au démarrage puis s'estompe — relancé au clic
   sur une zone non cliquable pour guider l'utilisateur vers la barre de contrôle. */
#previewOverlay {
    position: fixed;
    inset: 0;
    z-index: 999921;
    background: var(--cOverlay);
    animation: previewOverlayFade 2s ease-out forwards;
}

@keyframes previewOverlayFade {
    0%   { opacity: 1; }
    60%  { opacity: 1; }
    100% { opacity: 0; }
}

/* Barre de contrôle de l'aperçu — fixée, indépendante du stacking de #barrePilotage.
   Le `bottom` est appliqué dynamiquement en JS selon la hauteur de #barrePilotage. */
#divActionPreview {
    position: fixed;
    left: 16px;
    right: 16px;
    z-index: 999999;
    display: flex;
    align-items: center;
    /* Le même écart que dans la barre de pilotage entre deux voisins qui ne sont pas du même
       groupe : 16px, avec le trait du groupe de gauche (.divActionScene) — 16, trait, 16. */
    gap: 16px;
    padding: var(--paddingCorps);
    background: var(--cBlancOverlay);
    border-radius: var(--borderR2);
    box-shadow: var(--ombrePortee2);
    animation: divActionPreviewAppear 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}

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

/* Bulle du haut (chef de projet, 2026-09-17) : dans la fenêtre du site, les onglets quittent la
   barre de titre au bout de dix secondes et se posent ici, au centre, par-dessus le logo
   (MoteurPreview.poserBulle). Même matière que la barre du bas ; elle sort du haut de l'écran en
   s'étirant, et s'élargit quand les boutons de fin la rejoignent. */
#previewBulle {
    position: fixed;
    top: 12px;
    left: 50%;
    z-index: 999999;
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    max-width: calc(100vw - 32px);
    padding: var(--paddingCorps);
    background: var(--cBlancOverlay);
    border-radius: var(--borderR2);
    box-shadow: var(--ombrePortee2);
    transform: translateX(-50%);
    animation: previewBulleApparition 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
}

@keyframes previewBulleApparition {
    from { transform: translateX(-50%) translateY(-120%) scaleX(0.3); opacity: 0; }
    to   { transform: translateX(-50%) translateY(0) scaleX(1); opacity: 1; }
}

/* Verre dépoli (chef de projet, 2026-09-17) : la barre du bas et la bulle laissent voir la scène,
   floutée. Le flou reste modéré et la surface petite : la scène peut bouger derrière (roue qui
   tourne) sans charger le navigateur. Un seul repli : le navigateur qui ne sait pas flouter
   garde le blanc à 80 %.
   Le réglage « Réduire la transparence » du visiteur n'est PAS suivi (décision chef de projet
   2026-09-23) : le flou est ce qui rend la barre lisible par-dessus la scène — sans lui, on
   lirait ce qui passe derrière. */
@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) {
    #divActionPreview,
    #previewBulle {
        background: var(--cBlancVerre);
        -webkit-backdrop-filter: blur(10px) saturate(1.4);
        backdrop-filter: blur(10px) saturate(1.4);
    }
}


#previewBulle .ctaPreviewControle {
    flex-shrink: 0;
}

/* La bulle et la barre du bas sont au-dessus de tout, curseur compris : le curseur glisse
   dessous. Quand un voile assombrit l'écran pour n'éclairer qu'un geste — le passage,
   « Quelques instants plus tard », une boîte de dialogue qui fige l'aperçu —, elles passent
   SOUS ce voile : on les voit toujours, assombries comme la scène, et elles ne répondent plus.
   Elles ne s'effacent jamais : ce qui disparaît puis revient n'a pas de sens pour le visiteur
   (chef de projet, 2026-09-18). Le panneau existe du premier au dernier instant de son fondu
   (créé à opacité 0, retiré après la remise) : elles restent sous lui tout ce temps, sans saut.
   La boîte de saisie, elle, fait partie du film (le curseur la remplit) : elle ne fige pas
   l'aperçu, et la barre reste au-dessus d'elle, comme avant. */
body:has(#previewQuelquesInstantsOverlay) :is(#previewBulle, #divActionPreview),
body:has(#boitesDialogue.boitesDialogueFigeApercu) :is(#previewBulle, #divActionPreview) {
    z-index: 999925;
    pointer-events: none;
}

/* Une bulle de confirmation s'ouvre vers le haut, par-dessus la barre du bas, et le curseur
   doit s'y voir cliquer : le temps du geste, la barre redescend sous les deux (_bulleConfirmation.css). */
body:has(.bulleConfirmation) #divActionPreview {
    z-index: 999922;
}

/* Bulle posée : la popup à vues s'ouvre sous elle, les onglets restent visibles et cliquables. */
body:has(#previewBulle) #previewPopupCorps {
    top: calc(12px + var(--hauteurBullePreview) + 12px);
}

#previewSousTitreTexte {
    margin-left: auto;
    display: block;
}

#previewSousTitreTexte span {
    display: block;
    color: var(--cNoir1);
}

/* Trois blocs, rien que des boutons. À gauche, les boutons de la scène : un groupe de la barre
   de pilotage (.divActionScene, _sceneBoutons.css), avec son trait — LE trait, le même partout.
   Au centre, les boutons de fin à la fin de l'aperçu. À droite, « Prendre la main ». Tous
   centrés verticalement dans la barre. */
#previewBlocApercu {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
}

/* Le bloc central porte le nom et la description de l'aperçu (deux lignes de --fText16 séparées
   de 2px) tant que les boutons de fin ne sont pas là, puis les boutons (MoteurPreview,
   afficherBoutonsFin). Sa hauteur est celle des deux lignes, toujours : la barre ne bouge pas
   quand le texte cède la place aux boutons (décision PO 2026-09-15) — `lh` est la hauteur de
   ligne de cette police. Les boutons portent leur propre police (.cta14). */
#previewBlocApercu {
    flex: 1 1 auto;
    align-self: stretch;
    min-width: 0;
    font: var(--fText16);
    min-height: calc(2lh + 2px);
}

/* Les onglets ne sont jamais dans la barre du bas : barre de titre de la fenêtre du site, puis
   bulle (chef de projet, 2026-09-17). Ceux du bas se rangent, groupe de gauche et trait compris,
   boutons de fin compris, en attendant la bulle. Posé par MoteurPreview à la construction. */
body.previewOngletsEnHaut #previewBlocScene,
body.previewOngletsEnHaut #previewBlocApercu .ctaPreviewControle {
    display: none;
}

/* POC : l'étiquette et le cœur du site dans la barre du bas, à GAUCHE, en groupe de la barre
   (.divActionScene : trait et 16px après le trait), avant le nom et la description
   (MoteurPreview.dessinerGestesSite). */
#previewBlocSite {
    flex-shrink: 0;
}

/* Nom et description : deux lignes, chacune sur une seule ligne — faute de largeur, le texte se
   coupe en points de suspension, il ne pousse jamais « Prendre la main » hors de la barre. */
.previewBlocTexte {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.previewBlocTexteNom,
.previewBlocTexteDescription {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.previewBlocTexteNom {
    font: var(--fText16Strong);
    color: var(--cNoir1);
}

.previewBlocTexteDescription {
    color: var(--cNoir3);
}

/* Barre réduite, à la demande du script (étape `barreApercu`, MoteurPreview) : pour la scène qui
   affiche quelque chose en bas de l'écran. Rangée à gauche ou à droite, à la largeur de son
   contenu — ne restent que l'étiquette, le cœur et « Prendre la main ». Sans cette étape, rien
   ne change. */
#divActionPreview.previewBarreGauche {
    right: auto;
}

#divActionPreview.previewBarreDroite {
    left: auto;
}

:is(#divActionPreview.previewBarreGauche, #divActionPreview.previewBarreDroite) #previewBlocApercu {
    display: none;
}

/* Le bouton de sortie "Prendre la main ✕" est poussé tout à droite de la barre, dans le flux.
   (Silhouette et croix : composants/boutonFermeture.css, importé en tête de ce fichier.) */
#divActionPreview .modaleClose {
    margin-left: auto;
}

/* Les boutons portent une action : ils restent entiers et lisibles, jamais rétrécis. */
#divActionPreview .ctaPreviewControle,
#divActionPreview .ctaPreviewAction,
#divActionPreview .modaleClose {
    flex-shrink: 0;
}

/* « Aller à la fin » se range à droite avec la sortie : c'est lui qui prend la marge qui pousse. */
#divActionPreview .ctaPreviewAction:not([hidden]) {
    margin-left: auto;
}

#divActionPreview .ctaPreviewAction:not([hidden]) + .modaleClose {
    margin-left: 0;
}

.ctaPreviewAction[hidden] {
    display: none;
}

/* Clic sur une zone non activable : l'écran s'assombrit et la barre reste seule éclairée.
   Le temps de cet assombrissement, la sortie se met en fond blanc plein — c'est le moment où
   l'utilisateur cherche comment débloquer, la réponse doit sauter aux yeux. Au repos, le
   bouton n'a aucun fond : le blanc ne dit quelque chose que parce qu'il est exceptionnel. */
#divActionPreview.previewAssombri .modaleClose {
    background: var(--cBlanc);
}

/* Pas d'animation sur le sous-titre : le texte change en direct, comme un sous-titre de film.
   Animer l'entrée ou la sortie attire l'œil sur le changement au lieu du contenu à lire. */

/* Silhouette : .cta14 (31_cta.css) — ici uniquement la couleur du rôle.
   C'est LE modèle du socle .cta14 (décision PO 2026-07-18). L'ombre portée est
   une exception propre à cette barre : son fond est transparent, l'ombre décolle
   les boutons — ne pas la généraliser aux autres cta14 (décision PO 2026-07-18). */
.ctaPreviewControle,
.ctaPreviewAction {
    color: var(--cBlanc);
    background: var(--cAccent_a);
    box-shadow: var(--ombrePortee);
    /* Plein : LA bordure, transparente — même hauteur que tout bouton de l'écran
       (.ctaEcranPrimaire, _sceneBoutons.css). */
    border: var(--borderCta);
    border-color: transparent;
}


/* Sous-titre flottant (style "sous-titre vidéo") : au-dessus de la barre, hors animation.
   Position bottom calculée en JS. Affiché via .previewSousTitreVisible, auto-effacé par timer. */
#previewSousTitre {
    position: fixed;
    left: 50%;
    transform: translateX(-50%);
    z-index: 999920;
    max-width: 80vw;
    padding: 10px 22px;
    border-radius: var(--borderR1);
    background: #f6e2fa;
    color: var(--cNoir1);
    font: var(--fH2);
    text-align: center;
    box-shadow: var(--ombrePortee2);
    display: none;
}

#previewSousTitre.previewSousTitreVisible {
    display: block;
}

/* Onglets de la popup : l'actif garde le bouton normal de la barre (intouché, couleur de
   l'espace) ; les autres se grisent (aspect toggle menu). On ne change QUE la couleur — forme
   et position inchangées. */
.ctaPreviewControleInactif { background: var(--cBlanc03); color: var(--cNoir3); box-shadow: none; }

/* Bouton Résultat : à sa première apparition (fin d'aperçu), un pulse d'attention de ~3 s signale
   « un nouveau bouton vient d'apparaître ». Purement visuel (transform), ne décale pas la barre. */
@keyframes ctaPreviewResultatNouveau {
    0%   { transform: scale(1); }
    30%  { transform: scale(1.14); }
    60%  { transform: scale(1); }
    100% { transform: scale(1); }
}

.ctaPreviewResultatNouveau {
    animation: ctaPreviewResultatNouveau 0.9s ease-in-out 3;
}

/* ── Popup à vues (présentation / config, réutilisable pour la fin d'aperçu) ──
   POC version « bas » : la barre reste bloquée en bas (pied + onglets), le corps
   grandit au-dessus. Le fond passe SOUS la barre (z 9990 < 9991) pour la garder
   visible et cliquable. Le `bottom` du corps est calculé en JS (ancré sur la barre). */
#previewPopupFond {
    position: fixed;
    inset: 0;
    z-index: 999921;
    background: var(--cOverlay);
    opacity: 0;
    transition: opacity 0.4s ease;
    display: none;
}

#previewPopupFond.previewPopupVisible {
    opacity: 1;
}

#previewPopupCorps {
    position: fixed;
    left: 16px;
    right: 16px;
    top: 6vh;
    /* bottom : appliqué en JS pour se poser juste au-dessus de la barre */
    /* Largeur bornée puis centrée entre left et right (la barre, elle, reste pleine largeur). */
    max-width: 1280px;
    margin-inline: auto;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: var(--cBlanc);
    border-radius: var(--borderR2);
    box-shadow: var(--ombreModale);
    opacity: 0;
    transform: translateY(24px);
    transition: opacity 0.4s ease, transform 0.4s ease;
}

#previewPopupFond.previewPopupVisible #previewPopupCorps {
    opacity: 1;
    transform: translateY(0);
}

/* En-tête fixe : barre blanche titre + croix, avec fin trait de délimitation dessous.
   flex-shrink:0 → reste en haut pendant que le corps scrolle (la croix ne part jamais). */
.previewPopupEntete {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
    flex-shrink: 0;
    padding: var(--paddingCorps);
    background: var(--cBlanc);
    border-bottom: 1px solid var(--cBlanc03);
}

.previewPopupTitre {
    font: var(--fH3);
    color: var(--cNoir1);
}

/* Un conteneur par vue ; seul l'actif est affiché (les autres restent montés, cachés).
   Scrolle SOUS l'en-tête — le corps varie (iframe, config, constat…). */
.previewPopupVue {
    flex: 1;
    min-height: 0;
    overflow: auto;
}

.previewPopupIframe {
    display: block;
    width: 100%;
    height: 100%;
    border: none;
}

/* Vue en JS (liste « Autres aperçus »…) : le corps n'a pas de padding (l'iframe le gère en
   interne), donc le contenu JS apporte le sien. */
.previewPopupListe {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
    padding: 24px;
}

/* Vue « Résultat » (fin d'aperçu) : corps JS → apporte son padding (cf. .previewPopupVue sans padding).
   Sans page de résultats affichable, le message neutre se style via .previewResultatVideTexte. */
.previewResultatCorps {
    padding: var(--paddingCorps);
}

.previewResultatVideTexte {
    font: var(--fText16);
    color: var(--cNoir3);
    padding: 24px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
    text-align: center;
}

/* ── Vue « Résultat » (téléchargements) : blocs rendus par les resultat.js des scènes ── */

.previewResultatCorps .blocResultatScene {
    max-width: 600px;
    margin-bottom: 16px;
    padding: 16px 20px;
    background: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR1);
}

.previewResultatCorps .blocResultatTitre {
    font: var(--fH4);
    color: var(--cNoir1);
    margin: 0 0 12px 0;
}

.previewResultatCorps .blocResultatBoutons {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
}

.previewResultatCorps .ctaSecondaire {
    font: var(--fLabel);
    color: var(--cNoir1);
    padding: 8px 14px;
    background: var(--cBlanc);
    border: var(--borderCta);
    border-radius: var(--borderR1);
    cursor: pointer;
}

.previewResultatCorps .ctaSecondaire:hover {
    background: var(--cBlanc02);
}

/* ── Vue « Constat » : blocs rendus par les constat.js des scènes ── */

.blocConstatScene {
    margin-bottom: 24px;
}

.constatSceneTitre {
    font: var(--fH2);
    color: var(--cNoir1);
    margin: 0 0 8px;
}

.constatRouletteListe {
    font: var(--fText16);
    color: var(--cNoir1);
    margin: 0 0 16px;
    padding-left: 28px;
}

.constatRouletteListe li {
    padding: 2px 0;
}

.constatRouletteVide,
.constatPrizeVide {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 8px 0 16px;
}

/* ── Sous-sections du constat (commun) ── */

.constatSousTitre {
    font: var(--fH3);
    margin: 16px 0 8px;
    color: var(--cNoir1);
}

.constatSousTitreAnnules {
    color: var(--cRouge3);
}

/* inutilisé 2026-06-13
.constatNoteAnnules {
    font: var(--fItalic16);
    color: var(--cNoir3);
    margin: 0 0 8px;
}
*/

.constatTable {
    width: 100%;
    border-collapse: collapse;
    margin: 8px 0 16px;
    font: var(--fText16);
}

.constatTable th {
    text-align: left;
    padding: 8px 12px;
    border-bottom: 2px solid var(--cNoir5);
    font: var(--fLabel);
    color: var(--cNoir3);
    background: var(--cBlanc02);
}

.constatTable td {
    padding: 8px 12px;
    border-bottom: var(--border);
    color: var(--cNoir1);
}

.constatTable tr:last-child td {
    border-bottom: none;
}

.constatTable th:first-child,
.constatTable td:first-child {
    width: 40px;
    color: var(--cNoir3);
}

/* Carte variante : titre + description + lien.
   Utilisée aussi pour l'aperçu courant (avec la classe modificatrice .previewFinVarianteCourante). */
.previewFinVariante {
    width: 100%;
    padding: 16px;
    background: var(--cBlanc02);
    border-radius: var(--borderR2);
    text-align: left;
}

.previewFinVariante h3 {
    font: var(--fH4);
    color: var(--cNoir1);
    margin: 0 0 6px;
}

.previewFinVariante p {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 0 0 10px;
}

.previewFinVarianteLien {
    font: var(--fMenu14);
    color: var(--cAccent3);
    cursor: pointer;
    transition: color 0.2s;
}

.previewFinVarianteLien:hover {
    color: var(--cNoir1);
}

/* Carte de l'aperçu en cours : liseré accent + libellé « Aperçu en cours » (sans lien). */
.previewFinVarianteCourante {
    box-shadow: inset 0 0 0 2px var(--cAccent_a);
}

.previewFinVarianteEtat {
    font: var(--fMenu14);
    color: var(--cAccent_a);
}

/* ── Curseur ── */

/* La flèche de souris, variante du pointeur commun (kitPur/preview/pointeurPreview.css) : sur le
   document entier. Sa pointe est à (2, 2) de la grille de 28, soit 3,43 px dans le dessin de 48 px.
   La forme trapue, sans queue, empêche de la confondre avec la souris du spectateur. */
.curseurPreview {
    position: fixed;
    z-index: 999998;
    left: 50%;
    top: 50%;
    --pointeurPointeX: 3.43px;
    --pointeurPointeY: 3.43px;
}

.curseurPreviewFlash {
    position: fixed;
    z-index: 999997;
}

/* « Écran trop petit » migré → _boiteDialogue.css (boîtes de dialogue génériques), 2026-06-21. */

/* ── Panneau « Quelques instants plus tard » (scène de rupture) ──
   Écourte une animation trop longue pour montrer sa fin. Même ADN que la modale de fin,
   mais plein écran et en fondu (jamais brutal) : le fondu dit « du temps passe ». */
#previewQuelquesInstantsOverlay {
    position: fixed;
    inset: 0;
    z-index: 999926;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--cOverlay);
    opacity: 0;
    transition: opacity 0.4s ease-out; /* même courbe que l'assombrissement d'ouverture (#previewOverlay), deux fois plus rapide */
}

#previewQuelquesInstantsOverlay.previewQuelquesInstantsVisible {
    opacity: 1;
}

#previewQuelquesInstantsContenu {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--gapLarge);
    max-width: 560px;
    width: 90%;
    padding: 48px;
    background: var(--cBlanc);
    border-radius: var(--borderR2);
    box-shadow: var(--ombreModale);
    color: var(--cNoir1);
    text-align: center;
    opacity: 0;
    transition: opacity 0.2s ease;
}

/* Le panneau apparaît APRÈS l'assombrissement, et part AVANT que l'assombrissement se lève. */
#previewQuelquesInstantsContenu.previewQuelquesInstantsContenuVisible {
    opacity: 1;
}

#previewQuelquesInstantsContenu h2 {
    font: var(--fH2);
    margin: 0;
}

#previewQuelquesInstantsContenu p {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 0;
}

/* ── Le passage (MoteurPreview.ouvrirPassage : classe previewPassageEnCours sur le body) ──
   Le bouton « Passer à : X » vit DANS la barre de pilotage (#zoneProgressBar), et la barre,
   fixée, est un contexte d'empilement : aucun de ses enfants ne peut passer seul au-dessus
   du voile de la boîte (999926). Pour que le geste se voie, c'est donc la barre entière qui
   monte (999927) — et pour qu'on ne voie QUE le geste, elle se voile elle-même en même temps,
   de la même ombre que l'écran : son propre voile (#barrePilotage::before, _barreFin.css),
   levé ici quel que soit l'état de la barre de fin. Seule #zoneProgressBar (z 2, au-dessus
   du voile, _studioIntegree.css) reste éclairée : le curseur (999999) y va et clique sous les
   yeux du visiteur. Même rendu pour toutes les scènes, barre de fin déployée ou non. */
body.previewPassageEnCours #barrePilotage {
    z-index: 999927;
}

body.previewPassageEnCours #barrePilotage::before {
    opacity: 1;
    background: var(--cOverlay);
}

/* Dans la zone éclairée, rien d'autre que le bouton « Passer à : X » : la barre de fin de
   la scène (hors flux, dans la zone — _barreFin.css) se range le temps du passage, et le
   fond de la zone reste blanc même quand la barre de fin l'avait teinté. Les mini-widgets
   (compteurs) flottent au-dessus de la barre, hors de son voile : ils se rangent aussi. */
body.previewPassageEnCours #barreFinScene,
body.previewPassageEnCours #miniWidgets {
    visibility: hidden;
}

body.previewPassageEnCours #zoneProgressBar {
    background: var(--cBlanc);
}

/* La boîte de passage entre deux scènes (MoteurPreview.ouvrirPassage) : deux tuiles de même
   taille, l'icône et quelques mots. Un cadre à part, posé sur la première, glisse jusqu'à la
   seconde ; en dessous, une flèche de l'une à l'autre rappelle la frise du scénario. */
/* La boîte de passage se serre sur ses tuiles (pas la largeur du panneau « Quelques
   instants », qui partage le même contenu) : elle ne dispute rien à l'écran voilé. */
#previewQuelquesInstantsContenu.previewPassageBoite {
    width: auto;
    padding: 32px 40px;
}

.previewPassageTuiles {
    --tuileLargeur: 160px;
    --tuileEcart: 40px;
    position: relative;
    display: flex;
    align-items: stretch;
    gap: var(--tuileEcart);
    padding-bottom: 28px; /* la place de la flèche */
}

.previewPassageTuile {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    gap: var(--gapMoyen);
    width: var(--tuileLargeur);
    padding: 20px 12px;
    border: 3px solid var(--cBlanc03);
    border-radius: var(--borderR2);
    background: var(--cBlanc02);
    opacity: .5;
    transition: opacity .9s ease-in-out, background .9s ease-in-out;
}

.previewPassageTuile.previewPassageTuileActive {
    background: var(--cAccent0);
    opacity: 1;
}

/* 64px de dessin, la grande des deux tailles d'icône de scène du projet
   (assets/noyau/css/studio/54_icones.css) ; la tuile met l'air autour. */
.previewPassageTuile img {
    width: 64px;
    height: 64px;
}

/* L'étiquette de la cue, celle du bouton « Passer à : X » : un mot en PascalCase sans espace
   (« PrizeNameWheel », « WinsReelGrid#2 ») — la tuile fait la largeur du plus long, et un
   nom plus long encore se coupe plutôt que de sortir. */
.previewPassageTuile span {
    font: var(--fH4);
    color: var(--cNoir1);
    text-align: center;
    overflow-wrap: anywhere;
}

/* Le cadre qui glisse : même taille que la tuile, posé sur la première, translaté sur la seconde. */
.previewPassageCadre {
    position: absolute;
    top: 0;
    left: 0;
    width: var(--tuileLargeur);
    height: calc(100% - 28px);
    box-sizing: border-box;
    border: 4px solid var(--cAccent3);
    border-radius: var(--borderR2);
    pointer-events: none;
    transition: transform .9s ease-in-out;
}

.previewPassageCadre.previewPassageCadreArrive {
    transform: translateX(calc(var(--tuileLargeur) + var(--tuileEcart)));
}

/* La flèche sous les tuiles, du centre de la première au centre de la seconde. */
.previewPassageFleche {
    position: absolute;
    left: calc(var(--tuileLargeur) / 2);
    right: calc(var(--tuileLargeur) / 2);
    bottom: 8px;
    height: 0;
    border-top: 3px solid var(--cNoir3);
}

.previewPassageFleche::after {
    content: '';
    position: absolute;
    right: -2px;
    top: -8px;
    border: 7px solid transparent;
    border-left: 12px solid var(--cNoir3);
    border-right: 0;
}

/* Icône d'attente (iconeAttente.ts) : rotation lente = « le temps tourne ». Couleur = `color`. */
#previewQuelquesInstantsSablier {
    width: 48px;
    height: 48px;
    color: var(--cNoir1);
    animation: previewSablierRotation 3s linear infinite;
}

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

/* ── Le téléphone du joueur, à côté de la scène (TelephoneApercu.ts) ──
   À droite, entre la bulle et la barre de l'aperçu (top, largeur et hauteur posés en JS). Au-dessus
   du voile d'ouverture, sous « Quelques instants plus tard » et la boîte de passage, qui l'assombrissent
   comme la scène. Une vue, pas une commande : le doigt de l'aperçu y joue, le visiteur n'y touche pas.
   Même silhouette que le téléphone de l'aperçu participant (.apercuParticipantAppareilTelephone). */
#previewTelephone {
    position: fixed;
    right: 16px;
    z-index: 999922;
    pointer-events: none;
}

#previewTelephone[hidden] {
    display: none;
}

/* Une vue de la popup ouverte passe par-dessus le téléphone : il reste à sa place, sous le voile,
   assombri comme la scène — jamais effacé, le bouton qui le masque dit toujours vrai (chef de projet, 2026-09-25). */
body:has(#previewPopupFond.previewPopupVisible) #previewTelephone {
    z-index: 999920;
}

.previewTelephoneAppareil {
    width: max-content;
    padding: 14px;
    border-radius: 52px;
    background: var(--cNoir1);
    box-shadow: var(--ombreModale);
    transform-origin: top left;
}

.previewTelephoneEcran {
    position: relative;
    overflow: hidden;
    border-radius: 38px;
    background: var(--cBlanc);
}

.previewTelephoneEcran iframe {
    display: block;
    width: 100%;
    height: 100%;
    border: 0;
}

/* ── Le tour : qui joue, la scène ou le téléphone (TelephoneApercu.marquerTour) ──
   Téléphone affiché, le côté qui ne joue pas passe sous un voile de popup, pointeur compris.
   Au téléphone : le voile couvre toute la scène, flèche de souris dessous (999997, au-dessus des
   boîtes de dialogue), et le téléphone passe par-dessus ; la barre et la bulle restent au-dessus de
   tout. À la scène : le voile couvre l'écran du téléphone, doigt compris (doigt z 2). Une vue de
   la popup ouverte garde son propre voile : celui de la scène s'efface. */
#previewVoileScene {
    position: fixed;
    inset: 0;
    z-index: 999998;
    background: var(--cOverlay);
    opacity: 0;
    transition: opacity 0.3s ease-out;
    pointer-events: none;
}

body.previewTourTelephone #previewVoileScene {
    opacity: 1;
}

body:has(#previewPopupFond.previewPopupVisible) #previewVoileScene {
    opacity: 0;
}

body.previewTourTelephone .curseurPreview {
    z-index: 999997;
}

body.previewTourTelephone .curseurPreviewFlash {
    z-index: 999996;
}

body.previewTourTelephone #previewTelephone {
    z-index: 999999;
}

.previewTelephoneVoile {
    position: absolute;
    inset: 0;
    z-index: 3;
    background: var(--cOverlay);
    opacity: 0;
    transition: opacity 0.3s ease-out;
    pointer-events: none;
}

body.previewTourScene .previewTelephoneVoile {
    opacity: 1;
}

/* Au tour de la scène, le téléphone se range : moitié visible, le reste hors de l'écran (sa
   marge de droite comprise). Le trajet dure 3 s, aller comme retour : le retour part 3 s avant
   l'ouverture des réponses (RETOUR_AVANT_T0_MS, TelephoneApercu.ts). Affiché pendant le tour
   de la scène, il paraît déjà rangé, sans trajet (il sort de display: none). */
#previewTelephone {
    transition: transform 3s ease-in-out;
}

body.previewTelephoneRange #previewTelephone {
    transform: translateX(calc(50% + 16px));
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_boiteDialogue.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   BOÎTES DE DIALOGUE — le cadre commun de toutes les boîtes de l'écran
   (GestionnaireBoitesDialogue.ts ; décision du chef de projet, 2026-09-22)
   ============================================

   Une seule boîte visible à la fois. La racine capte tous les clics (blocage local) dès le
   niveau « partiel » (.boitesDialogueBloquant) et porte .boitesDialogueFigeApercu tant qu'une
   boîte fige l'aperçu (_preview.css). Le rendu est celui de la boîte de saisie : grande carte
   sur voile flouté, titre centré, croix en haut à droite, UNE seule barre de défilement. */

#boitesDialogue {
    position: fixed;
    inset: 0;
    z-index: 999990;
    display: flex;
    align-items: center;
    justify-content: center;
    pointer-events: none;          /* niveau « aucun » : l'écran reste pilotable */
}

#boitesDialogue.boitesDialogueBloquant {
    pointer-events: auto;          /* « partiel » / « total » : capte tous les clics locaux */
    background: var(--cOverlay);
    backdrop-filter: blur(12px);
}

/* Verrou de défilement : une boîte bloquante réserve la molette à la boîte — l'écran
   dessous ne défile JAMAIS (même quand la barre de debug Symfony rend la page
   défilable en dev). */
html:has(#boitesDialogue.boitesDialogueBloquant) {
    overflow: hidden;
}

/* La carte. UNE SEULE BARRE DE DÉFILEMENT PAR BOÎTE — décision du chef de projet,
   2026-09-07 : deux ascenseurs imbriqués (celui de la boîte + celui de la liste)
   apparaissaient dès que la fenêtre manquait de hauteur, et la boîte emportait ses boutons
   hors de vue. La carte et tout ce qu'il y a entre elle et le corps ne font qu'empiler en
   colonne sans jamais défiler (ils se laissent comprimer : min-height 0) : SEUL le corps
   défile, et le titre comme le pied restent visibles quelle que soit la hauteur de la
   fenêtre. Une seule largeur pour toutes les boîtes (chef de projet, 2026-09-22). */
.boiteDialogueCarte {
    position: relative;
    display: flex;
    flex-direction: column;
    min-height: 0;
    width: 90%;
    max-width: 700px;
    max-height: 85vh;
    padding: 24px;
    box-sizing: border-box;
    background: var(--cBlanc1);
    border-radius: var(--borderR1);
    box-shadow: 0 0 30px var(--cNoir);
    color: var(--cNoir1);
    text-align: left;
    overflow: hidden;
}

/* La croix (silhouette : composants/boutonFermeture.css, importée via _preview.css) est
   ancrée sur la carte : elle ne défile pas avec le corps. */
.boiteDialogueCroix {
    position: absolute;
    top: 8px;
    right: 8px;
    z-index: 1;
}

.boiteDialogueTitre {
    font: var(--fH3);
    margin: 0 0 16px;
    text-align: center;
}

.boiteDialogueCorps {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
}

.boiteDialoguePied {
    flex-shrink: 0;
    margin-top: var(--gapLarge);
}

/* Un ou deux boutons alignés au centre : le pied des alertes. */
.boiteDialogueCtas {
    display: flex;
    justify-content: center;
    gap: var(--gapMoyen);
}

/* Le corps des trois alertes (écran trop petit, reconnexion, tiers de confiance) : une
   icône et un texte court, centrés. */
.boiteDialogueAlerte {
    text-align: center;
}

.boiteDialogueAlerte svg {
    color: var(--cNoir3);
    margin-bottom: 16px;
}

.boiteDialogueAlerte p {
    font: var(--fText16);
    margin: 0 0 8px;
}

/* Fenêtre basse (petit écran, fenêtre réduite, barre de debug en dev) : la carte se
   resserre — moins de marges, moins de rembourrage — pour laisser au corps de quoi
   montrer des lignes. */
@media (max-height: 700px) {
    .boiteDialogueCarte {
        max-height: 94vh;
        padding: 12px 16px;
    }

    .boiteDialogueTitre {
        margin-bottom: 8px;
    }
}

/* ── Écart « boîte de saisie » (SaisieEcran.ts) ──
   Le corps est le conteneur remis à la scène ; le kit de saisie y pose lui-même le titre
   (.saisieTitre), la liste (.saisieChamps) et le pied (.saisieBoutons), la consigne et le
   vivier entre le titre et la liste. Le cadre ne crée donc ni titre ni pied : les blocs du
   kit jouent ces rôles, et c'est la LISTE qui défile — titre, consigne et boutons restent
   visibles. La marge intérieure est celle du formulaire (kitSingleton/saisie/css/saisie.css). */
.boiteSaisie {
    padding: 0;
}

.boiteSaisie .boiteDialogueCorps,
.boiteSaisie .saisieConteneur {
    display: flex;
    flex-direction: column;
    min-height: 0;
    overflow: hidden;
}

.boiteSaisie .saisieFormulaire {
    display: flex;
    flex-direction: column;
    min-height: 0;
}

/* La liste prend toute la place qui reste, et pas un pixel de plus : le plafond en vh
   de la feuille de saisie (utile aux boîtes hors cadre) est levé ici, c'est lui qui
   faisait déborder la boîte. La molette qui bute en fin de liste ne se propage pas :
   overscroll-behavior est déjà posé sur .saisieChamps par la feuille de saisie. */
.boiteSaisie .saisieChamps {
    flex: 1 1 auto;
    min-height: 0;
    max-height: none;
}

@media (max-height: 700px) {
    .boiteSaisie {
        padding: 0;
    }

    .boiteSaisie .saisieFormulaire {
        padding: 12px 16px;
    }

    .boiteSaisie .saisieTitre {
        margin-bottom: 8px;
    }

    .boiteSaisie .saisieChamps {
        margin-bottom: 12px;
    }

    /* L'air posé entre les textes du haut et le tableau : réduit, jamais supprimé. */
    .boiteSaisie .saisieTableauBoite .saisieChamps {
        margin-top: 0.5em;
    }
}

/* La bulle « Êtes-vous sûr ? » vit dans le body, sous les boîtes (échelle de
   salleEcran.css) : armée depuis une boîte (arrêt du test, pointage, stock), elle passe
   au-dessus — et reste sous le curseur de l'aperçu, qui doit la voir cliquer. */
body:has(#boitesDialogue) .bulleConfirmation {
    z-index: 999995;
}

/* ── Coquille des aperçus (previewCadre.twig) ──
   « La fenêtre a changé de taille » vit dans la page qui contient l'iframe, hors du
   moteur : elle garde son ancienne carte, conservée pour elle seule (décision du chef
   de projet, 2026-09-22). Rien d'autre ne l'utilise. */
.boiteDialogueContenu {
    position: relative;
    max-width: 400px;
    padding: 32px;
    background: var(--cBlanc);
    border-radius: var(--borderR2);
    box-shadow: var(--ombreModale);
    text-align: center;
    color: var(--cNoir1);
}

.boiteDialogueContenu svg {
    color: var(--cNoir3);
    margin-bottom: 16px;
}

.boiteDialogueContenu p {
    font: var(--fText16);
    margin: 0 0 8px;
}

.boiteDialogueContenu .boiteDialogueCtas {
    margin-top: 16px;
}

.boiteDialogueContenu button {
    padding: 10px 24px;
    font: var(--fCta16);
    color: var(--cBlanc);
    background: var(--cAccent_a);
    border: none;
    border-radius: var(--borderR1);
    cursor: pointer;
}

.boiteDialogueContenu button:hover {
    background: var(--cAccent_ah);
}

/*!******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_aucuneAnimation.css ***!
  \******************************************************************************************************************************************/
/* ============================================
   .aucuneAnimation — Classe utilitaire globale

   Désactive TOUTES les animations CSS et transitions sur un élément
   et tous ses descendants. À ajouter temporairement (via JS) sur un
   conteneur avant un changement visuel pour figer les éléments en
   place sans cascade d'animations.

   Utilisation JS : window.figerAnimations(element, dureeMs)
   ============================================ */

.aucuneAnimation,
.aucuneAnimation *,
.aucuneAnimation *::before,
.aucuneAnimation *::after {
    animation: none !important;
    transition: none !important;
}

/*!******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_transitionBlocs.css ***!
  \******************************************************************************************************************************************/
/* ============================================
   Blocs d'une Vue d'animation — animations de bascule

   Classes posées puis retirées par affichageBlocs.ts (jamais à la main dans une
   animation). La durée vient de --blocDuree, poussée par le TS : source unique.

   Vocabulaire FERMÉ : 'aucune' (pas de classe), 'fondu', 'glisse'. En ajouter une
   suppose de toucher au noyau + ce fichier + la doc — c'est le garde-fou qui évite
   que chaque animation invente son effet.

   La VITESSE est un axe séparé, sans effet sur ce fichier : elle ne change que la valeur
   de --blocDuree poussée par le TS ('normale' 400 ms, 'rapide' 350 ms).

   Utilisation TS : this.afficherBloc(el, { anime: 'fondu', vitesse: 'rapide' })
   ============================================ */

.blocFonduEntree,
.blocFonduSortie,
.blocGlisseEntree,
.blocGlisseSortie {
    animation-duration: var(--blocDuree, 400ms);
    animation-timing-function: ease;
    animation-fill-mode: both;
}

.blocFonduEntree {
    animation-name: blocFonduEntree;
}

.blocFonduSortie {
    animation-name: blocFonduSortie;
}

.blocGlisseEntree {
    animation-name: blocGlisseEntree;
}

.blocGlisseSortie {
    animation-name: blocGlisseSortie;
}

@keyframes blocFonduEntree {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@keyframes blocFonduSortie {
    from { opacity: 1; }
    to   { opacity: 0; }
}

@keyframes blocGlisseEntree {
    from { opacity: 0; transform: translateY(4%); }
    to   { opacity: 1; transform: none; }
}

@keyframes blocGlisseSortie {
    from { opacity: 1; transform: none; }
    to   { opacity: 0; transform: translateY(-4%); }
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_tirageEcarte.css ***!
  \***************************************************************************************************************************************/
/* ============================================
   TIRAGE ÉCARTÉ — la case d'un tirage retiré sur une grille qui garde tout sous les yeux
   (Wins*Grid, Raffle*Grid ; décision du chef de projet, 2026-09-04).
   ============================================

   La case s'estompe en une seconde, puis devient invisible — mais elle garde sa PLACE :
   rien autour ne bouge, l'organisateur retrouve ses repères. Posée par la vue de la
   scène sur l'élément de la case (slot FluxKit, slot SplitFlapKit, case d'une grille
   CSS). Retirée quand le tirage suivant reprend la case (rendue en bout de grille) :
   la case revient d'un coup, ou selon sa propre transition.

   Les !important : les kits posent leurs propres opacités et transitions sur leurs slots
   (sfKitSlot, sfKitSlotTire…), et une case écartée l'est quoi qu'il arrive. */
.tirageEcarte {
    opacity: 0 !important;
    visibility: hidden !important;
    transition: opacity 1s linear, visibility 0s linear 1s !important;
}

/*!********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_etiquettes.css ***!
  \********************************************************************************************************************************************/
/* ============================================
   ÉTIQUETTES - Marquage typographique
   ============================================

   Les étiquettes données par l'organisateur (animations, sorties, groupes)
   sont enveloppées dans .etiquetteMono par le filtre Twig `etiquetteHtml`.
   La chasse fixe les distingue des libellés du système (décision PO 2026-06-10).
*/

.etiquetteMono {
    font-family: var(--ffMono);
}

/* Marqueur d'une source provisoire, accolé à l'étiquette par le même filtre */
.etiquetteAConfigurer {
    font: var(--fLight14);
    color: var(--cRouge4);
}

.recapBlocDetail .etiquetteAConfigurer {
    color: unset;
}

/*!***********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_recapitulatif.css ***!
  \***********************************************************************************************************************************************/
/* ============================================
   RÉCAPITULATIF SCÉNARIO (stepper vertical)
   ============================================ */

/* Container du stepper */
.recapStepper {
    display: flex;
    flex-direction: column;
    gap: 0;
}
#scenarioPanneau .recapStepper > .recapActions + .recapBloc {
    margin-top: 32px;
}

/* Connecteur vertical entre les blocs */
.recapConnecteur {
    width: 3px;
    height: 24px;
    background: var(--cBlanc03);
    margin-left: 20px;
}

/* Bloc individuel du stepper */
.recapBloc {
    position: relative;
    border-radius: var(--borderR1);
    border: var(--borderCarte);
    min-height: 66px;
    overflow: hidden;
}

/* Titre du bloc (h3) */
.recapBloc h3 {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: var(--paddingRecap);
    padding-bottom: 0;
    font: var(--fH4);
    margin: 0;
}

/* Étiquettes du récap : un SEUL style, qu'elles soient cliquables (<a>/<button> en mode
   Préparer / progression) ou statiques. Fond clair de catégorie, texte noir, bordure légère
   (choix PO 2026-07-20 : plus de pastille foncée à texte blanc — l'onglet Diffuser fait foi).
   .recapTagSortie = blanc, la couleur du « produit d'une scène » (conservée en entrée).
   .recapTagSortieSecondaire = sortie déclarée `secondaire` par le contrat d'une scène, en
   retrait — page d'une scène seulement (Vitrine) : un scénario n'affiche pas ses sorties
   inutilisées (décision chef de projet 2026-09-16). */
.recapTagGroupes,
.recapTagDistributions,
.recapTagSortie,
.recapTagSortieSecondaire,
.recapLienGroupes,
.recapLienDistributions {
    display: inline-block;
    margin: 2px 0;
    padding: var(--paddingEtiquette);
    border-radius: var(--borderR0);
    border: 1px solid currentColor;
    color: var(--cNoir3);
}

.recapTagSortieSecondaire {
    color: var(--cNoir4);
}

.recapTagGroupes,
.recapLienGroupes { background: var(--cAccent1); }

.recapTagDistributions,
.recapLienDistributions { background: var(--cAccent1); }

/* Titre d'animation/affichage cliquable (mode Préparer) : lien sobre, sans pastille colorée,
   pour ne pas perturber la lecture — même sobriété que le titre non cliquable de la progression. */
.recapLienScenes,
.recapLienAffichages {
    color: inherit;
}

/* Affordance « cliquable » : soulignement au survol (étiquettes d'entrée + titres) */
.recapLienGroupes:hover,
.recapLienDistributions:hover,
.recapLienScenes:hover,
.recapLienAffichages:hover {
    text-decoration: underline;
}

/* Sous-titre dans le bloc (h4) — élargi à la colonne récap de composition
   (55_scenarioModifier.css), qui reprend la grammaire du récap hors panneau. */
.recapBloc h4,
.recapComposition h4 {
    font: var(--fH4);
    margin: 0;
    color: var(--cNoir3);
}

/* Listes à puces dans le bloc */
.recapBloc ul,
.recapComposition ul {
    margin: 4px 0;
    padding-left: var(--retraitListeCourt);
}

/* Colonne récap de composition (largeur fixe étroite) : pas de puces — chaque ligne
   est déjà un tag — et un « Étiquette : Label » ne se plie JAMAIS sur deux lignes
   (décision PO 2026-08-11) ; au-delà de la colonne, ellipse. */
.recapComposition ul {
    list-style: none;
    padding-left: 0;
}

.recapComposition .recapTagGroupes,
.recapComposition .recapTagSortie,
.recapComposition .recapTagSortieSecondaire {
    white-space: nowrap;
    max-width: 100%;
    box-sizing: border-box;
    overflow: hidden;
    text-overflow: ellipsis;
}

.recapBloc li,
.recapComposition li {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Détails du bloc */
.recapBlocDetail {
    padding: var(--paddingRecap);
    padding-top: var(--gapReduit);
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapBlocDetail p {
    margin: 2px 0;
}

.recapBlocDetail hr {
    border: none;
    border-top: var(--borderCarte);
    margin: 20px 0;
}

/* Icône de l'animation en rappel dans le coin haut-droit du bloc.
   Case 80 et 8px d'air : dessin 64, la grande des deux tailles du projet (54_icones.css).
   Hors flux (absolute) pour ne pas gonfler la hauteur du titre — calée sur le padding du h3. */
.recapTitreIcone {
    position: absolute;
    top: 0;
    right: 0;
    width: 80px;
    height: 80px;
    padding: var(--gapDefaut);
    border-radius: var(--borderR1);
}

/* Colonne de l'icône (chef de projet, 2026-09-22) : l'icône tient toute la hauteur du bloc, à
   droite, séparée du contenu par un filet ; le contenu s'arrête avant elle, rien ne passe
   dessous. Le dessin reste en haut de la colonne (object-fit). Ne vaut que pour le bloc du
   récapitulatif (.recapBloc) : la composition de scénario porte aussi .recapBlocScene. */
.recapBloc.recapBlocScene {
    min-height: 80px; /* la colonne ne descend jamais sous la case de l'icône */
    padding-right: 80px;
}

.recapBloc.recapBlocScene .recapTitreIcone {
    bottom: 0;
    height: auto;
    object-fit: contain;
    object-position: top;
    border-radius: 0;
    border-left: var(--borderCarte);
}

/* Variantes couleur par type */
.recapBlocGroupes /* .recapBlocDistributions (inutilisé 2026-06-13) */ {
    background: var(--cBlanc1);
}

.recapBlocScene .recapTitreIcone {
    background: var(--cAccent1);
}

.recapBlocScene.recapBlocAffichage .recapTitreIcone {
    background: var(--cAccent1);
}

.recapBlocConfigurations {
    background: var(--cAccent1);
}

/* inutilisé 2026-06-13
.recapBlocFinal {
    background: var(--cBlanc02);
}
*/

/* Lien "Modifier" sous le récap */
.recapActions {
    padding: var(--paddingRecap);
}

/* Même couleur qu'Annuler des formulaires (noyau 31_cta.css) : les actions neutres sont
   noires, les couleurs restent réservées aux actions marquées (Supprimer). */
.recapActions a {
    color: var(--cNoir3);
}

.recapActions a:hover {
    text-decoration: underline;
}

/* Image dans un bloc récap */
.recapImage {
    max-width: 100%;
    border-radius: var(--borderR1);
}

/* Pastilles couleurs dans le récap */
.recapCouleurs {
    display: flex;
    gap: var(--gapDefaut);
    margin-top: 6px;
}

.recapCouleurPastille {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    border: var(--border);
}

/* Message vide */
.recapVide {
    font: var(--fItalic16);
    color: var(--cNoir3);
    padding: var(--paddingLigneListe);
}

/* Source list dans les détails */
/* inutilisé 2026-06-13
.recapSources {
    display: flex;
    flex-direction: column;
    gap: 2px;
}
*/

/* Alerte insuffisance */
.recapAlerte {
    color: var(--cRouge3);
    font: var(--fAlerte16);
}

/* Brique récapitulatif dans la grille du scénario */
/* inutilisé 2026-06-13
.brique.briqueRecap {
    background: var(--cBlanc02);
    border-color: var(--cBlanc03);
}
*/

/* inutilisé 2026-06-15 - concept recap.js retiré
.recapAnimConfig:empty {
    display: none;
}
*/

.recapEncadre {
    margin: 10px 0;
    padding: var(--paddingRecap);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    background: #FFF8;
}

/* inutilisé 2026-06-15 - concept recap.js retiré
.recapAnimConfig h4 {
    font: var(--fH4);
    margin: 20px 0 4px;
}

.recapAnimConfig h4:first-child {
    margin-top: 0;
}

.recapAnimConfig p {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 2px 0;
}

.recapAnimConfig ul,
.recapAnimConfig ol {
    margin: 4px 0;
    padding-left: 20px;
}

.recapAnimConfig li {
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapAnimConfig table {
    width: 100%;
    border-collapse: collapse;
    margin: 6px 0;
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapAnimConfig th,
.recapAnimConfig td {
    padding: 4px 8px;
    text-align: left;
    border-bottom: var(--borderCarte);
}

.recapAnimConfig th {
    font-weight: 600;
}

.recapAnimConfig hr {
    border: none;
    border-top: var(--borderCarte);
    margin: 8px 0;
}
*/

/* Boutons participants cliquables dans la progression : même étiquette que les autres
   (contour compris, cf. bloc du haut), on n'ajuste que l'interactivité. */
button.recapTagGroupes {
    cursor: pointer;
    font: inherit;
}

button.recapTagGroupes:hover {
    text-decoration: underline;
}

/* ============================================
   PROGRESSION — États des blocs
   ============================================ */

/* Seules les cues à venir sont atténuées : celles déjà jouées restent pleines, elles ont été
   actives (chef de projet, 2026-09-22). */
#progression .recapBlocScene {
    transition: opacity 0.3s;
}

#progression .recapBlocScene.recapBlocFutur {
    opacity: .5;
}

/* Nombre d'éléments d'une pastille d'entrée ou de sortie (peintureProgression.ts), séparé du
   libellé par un filet de la couleur de la pastille. Absent tant que le nombre n'est pas connu. */
.recapCompte {
    margin-left: 6px;
    padding-left: 6px;
    border-left: 1px solid currentColor;
    font: var(--fText16Strong);
}

/* Section « Progression » de la cue active : une section du bloc comme Entrées et Sorties
   (.recapBlocDetail, même titre, même marge), servie cachée par le template. */
.progressionEtat[hidden] {
    display: none;
}

/* La barre et son compte au retrait des listes d'Entrées et de Sorties. */
.progressionEtatBlocs {
    margin: 4px 0;
    padding-left: var(--retraitListeCourt);
}

/* Cue à venir (après la cue active) : son titre et son icône seulement — ses entrées et ses
   sorties ne disent rien tant qu'elle n'a pas commencé (chef de projet, 2026-09-22). */
#progression .recapBlocFutur .progressionContenu {
    display: none;
}

/* Aération de secours quand le bloc n'a aucune section visible */
.progressionContenu:not(:has(> :not([hidden]))) {
    padding-bottom: var(--gapMoyen);
}

/* Blocs de progression émis par l'animation (obtenirProgression → rendu unique peintureProgression.ts) */
.progressionBlocTitre {
    font: var(--fH4);
    color: var(--cNoir3);
    margin: 6px 0 2px;
}

.progressionBlocTexte {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 2px 0;
}

.progressionBlocListe {
    margin: 4px 0;
    padding-left: var(--retraitListeCourt);
}

.progressionBlocListe li {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Barre sobre (chef de projet, 2026-09-22) : la cue active se voit déjà à l'opacité, la barre
   n'a pas à crier. Fine, bouts droits comme la police, noire sans couleur d'accent, la moitié
   du bloc ; le compte en petit gris à côté. */
.progressionBlocBarre {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    margin: 4px 0;
}

.progressionBlocBarrePiste {
    flex: 0 1 50%;
    height: 4px;
    background: var(--cBlanc03);
    overflow: hidden;
}

.progressionBlocBarreJauge {
    height: 100%;
    background: var(--cNoir);
    transition: width 0.3s;
}

.progressionBlocBarreLabel {
    font: var(--fLabel);
    color: var(--cNoir3);
}

/*!************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/salleEcran.css ***!
  \************************************************************************************************************************************/
/* ============================================
   PLANS DE SUPERPOSITION (z-index) — l'échelle de l'écran

   Une scène affiche ce qu'elle veut au premier plan : un clone qui s'envole, une popup de lot,
   un feu d'artifice. Le chrome — barre de pilotage, aperçu, saisie, boîtes de dialogue — doit
   passer AU-DESSUS quoi qu'elle fasse. Deux bandes franchement séparées, jamais mitoyennes :
   une scène qui monte d'un cran ne peut pas mordre sur le chrome.

       Scène et kits            0 →   9 999   (fond, zones, kits, clones en vol, overlays de kit)
       Chrome              999 900 → 999 999

   Dans la bande du chrome, l'ordre :

       999 900  barre de pilotage, îlot de test (_studioIntegree.css)
       999 920  sous-titre, overlay et fond de popup de l'aperçu
       999 925  bulle de confirmation (_bulleConfirmation.css) — au-dessus de la barre de
                l'aperçu, qui la recouvrirait sinon
       999 926  panneau « Quelques instants plus tard » et boîte de passage de l'aperçu
                (_preview.css)
       999 927  barre de pilotage PENDANT la boîte de passage — elle monte au-dessus de la
                boîte parce que le bouton « Passer à : X » vit dedans, et se voile elle-même
                pour ne laisser éclairée que la zone de ce bouton (_preview.css)
       999 990  boîtes de dialogue, saisie comprise (_boiteDialogue.css) — au-dessus de tout
                ce qui précède
       999 995  bulle de confirmation armée depuis une boîte de dialogue (_boiteDialogue.css)
       999 997  rond du clic du curseur d'aperçu
       999 998  curseur d'aperçu — au-dessus des boîtes de dialogue :
                l'aperçu doit MONTRER le curseur cliquer une confirmation
       999 999  bulle des onglets et barre de l'aperçu — le curseur glisse dessous ; elles
                s'effacent quand l'écran s'assombrit (passage, boîte qui fige l'aperçu — pas
                la saisie, que le curseur remplit), et la barre redescend à 999 922 le temps
                d'une bulle de confirmation (_preview.css)

   Un nouveau plan se pose dans sa bande, jamais entre les deux.
   ============================================ */

/* ============================================
   SALLE ECRAN - Styles principaux
   ============================================ */
/* Vue Progression de la boîte de l'îlot de test : les styles de l'onglet Progression du
   studio, pour un seul design (IlotTest.ts, peintureProgression.ts). */

/* Boutons de l'écran : deux styles seulement. Plein = aucun contour ; non plein = fond blanc,
   contour de la couleur de son texte. Posé ici et non dans 10_font.css : ne vaut que pour
   l'écran de jeu (aperçu comme réel), jamais pour les boutons du site. */
:root {
    --borderCta: 1px solid currentColor;
    /* UNE hauteur de bouton sur l'écran : 34px, pleins et à contour (décision du chef de
       projet, 2026-09-16). Tous portent la bordure de 1px (transparente sur un plein) :
       l'air vertical passe de 8 à 7 pour que la bordure tienne dans les 34. */
    --paddingCta14V: 7px;
    --paddingCta14: var(--paddingCta14V) 16px;
}

/* ============================================
   Structure principale
   ============================================ */

#salleEcran {
    position: relative;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    color: var(--couleurSecondaire);
}

/* Plan fond : couleur + image de fond (en dessous) */
#zoneFond {
    position: absolute;
    inset: 0;
    z-index: 0;
    background-color: var(--couleurFond);
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
}

/* Plan logo : positionné par GrilleKit (au-dessus du fond) */
#zoneLogo {
    position: absolute;
    z-index: 10;
    pointer-events: none;
    display: none;
}
#zoneLogo img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

/* Plan titre d'en-tête : positionné par GrilleKit (au-dessus du fond) */
#zoneTitre {
    position: absolute;
    z-index: 10;
    pointer-events: none;
    display: none;
}
.zoneTitreTexte {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
    font: var(--fTitreEcran); /* la taille est recalée sur la hauteur de rangée par GestionnaireFondEnTete */
    /* Seul texte de l'écran posé à même l'image de fond : sa couleur est réglée avec le fond, pas
       avec la palette de la carte. Repli sur couleurPrimaire = comportement d'avant la clé, pour
       les configurations de fond qui ne la portent pas. */
    color: var(--couleurTexteSurFond, var(--couleurPrimaire));
}
/* Le titre occupe au plus 70 % de la largeur, se replie sur deux lignes maximum,
   et au-delà se termine en points de suspension. La longueur du texte reste libre. */
.zoneTitreClamp {
    max-width: 70%;
    text-align: center;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    overflow: hidden;
    line-height: 1.05; /* deux lignes tiennent dans la rangée avec un peu d'air (2 × 1.05 × 45 %) */
}
/* Disposition « titre à gauche, logo à droite » : le titre colle au bord gauche de sa zone */
#zoneTitre.titreAligneGauche .zoneTitreTexte {
    justify-content: flex-start;
}
#zoneTitre.titreAligneGauche .zoneTitreClamp {
    text-align: left;
    max-width: 100%;
}

/* Zone d'affichage principale (animations, au-dessus du fond) */
#zoneAffichage {
    position: relative;
    z-index: 1;
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    /* Espace pour la barre de pilotage : sa hauteur réelle, posée sur :root par
       AdaptationBarre.ts — elle grandit quand la barre passe sur deux lignes. */
    padding-bottom: var(--hauteurBarrePilotage, 60px);
}

/*!**********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitSingleton/saisie/css/saisie.css ***!
  \**********************************************************************************************************************************************/
/**
 * SaisieKit — Styles de base des composants de saisie.
 *
 * Tout scopé sous .saisieFormulaire.
 * L'overlay/popup est géré par la Salle (pas ici).
 */

/* ══════════════════════════════════════
   FORMULAIRE
   ══════════════════════════════════════ */

.saisieFormulaire {
    max-width: 640px;
    margin: 0 auto;
    padding: 24px;
}

.saisieTitre {
    font: var(--fH3);
    color: var(--cNoir1);
    margin-bottom: 20px;
    text-align: center;
}

.saisieChamps {
    max-height: 60vh;
    overflow-y: auto;
    /* En butée de liste, la molette s'arrête là : jamais d'enchaînement vers le dessous. */
    overscroll-behavior: contain;
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen);
    margin-bottom: 24px;
}

/* Barre de scroll native stylée (non-overlay). Pas de scrollbar-color : sur
   Chrome ≥121 il désactiverait ces règles ::-webkit-scrollbar et réactiverait
   la barre overlay auto-masquée. */
.saisieChamps::-webkit-scrollbar {
    width: 12px;
}

.saisieChamps::-webkit-scrollbar-track {
    background: var(--cBlanc2);
    border-radius: var(--borderR1);
}

.saisieChamps::-webkit-scrollbar-thumb {
    background: var(--cNoir4);
    border-radius: var(--borderR1);
}

.saisieBoutons {
    display: flex;
    justify-content: center;
    gap: var(--gapMoyen);
}

/* Boutons saisie : même taille que les boutons barre d'actions (.btnScene) */

/* ══════════════════════════════════════
   INPUT SCORE
   ══════════════════════════════════════ */

.saisieInputScore {
    display: flex;
    align-items: center;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
    padding: 12px 16px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
    transition: background 0.2s;
}

.saisieJoueur {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
    transition: color 0.3s;
}

.saisieJoueurNom {
    font: var(--fText16);
    color: var(--cNoir1);
    text-align: center;
}

.saisieScore {
    width: 60px;
    text-align: center;
    font: var(--fCta16);
    padding: 6px 8px;
    border: var(--border);
    border-radius: var(--borderR1);
    background: var(--cBlanc1);
    color: var(--cNoir1);
}

.saisieScore:focus {
    outline: 2px solid var(--couleurCta, var(--cAccent3));
    border-color: var(--couleurCta, var(--cAccent3));
}

/* Chrome/Edge : masquer les flèches des inputs number */
.saisieScore::-webkit-inner-spin-button,
.saisieScore::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
.saisieScore {
    -moz-appearance: textfield;
}

.saisieResultat {
    font: var(--fLabel);
    min-height: 18px;
    font-weight: 600;
    transition: color 0.3s, opacity 0.3s;
}

.saisieSeparateur {
    font-size: 24px;
    color: var(--cNoir4);
    flex-shrink: 0;
}

/* ══════════════════════════════════════
   FEEDBACK VICTOIRE / DÉFAITE / NUL
   ══════════════════════════════════════ */

.saisieVictoire .saisieResultat {
    color: var(--cSucces3);
}

.saisieVictoire .saisieScore {
    border-color: var(--cSucces3);
}

.saisieDefaite .saisieResultat {
    color: var(--cRouge3);
}

.saisieDefaite .saisieScore {
    border-color: var(--cRouge3);
}

.saisieNul .saisieResultat {
    color: var(--cNoir3);
}

.saisieNul .saisieScore {
    border-color: var(--cNoir3);
}

/* ══════════════════════════════════════
   INPUT RESULTAT
   ══════════════════════════════════════ */

.saisieInputResultat {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 12px 16px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
    transition: background 0.2s;
    flex-wrap: wrap;
    justify-content: center;
}

/* Toggle 3 positions */
.saisieToggleResultat {
    display: flex;
    border-radius: var(--borderR1);
    overflow: hidden;
    border: var(--border);
    flex-shrink: 0;
}

.saisieToggleBtn {
    padding: 8px 18px;
    border: none;
    background: var(--cBlanc1);
    color: var(--cNoir2);
    font: var(--fCta16);
    cursor: pointer;
    transition: background 0.2s, color 0.2s;
    white-space: nowrap;
}

.saisieToggleBtn:not(:last-child) {
    border-right: var(--border);
}

.saisieToggleBtn:hover:not(.saisieToggleActif) {
    background: var(--cBlanc03);
}

.saisieToggleBtn.saisieToggleActif {
    background: var(--couleurCta, var(--cAccent3));
    color: var(--couleurCtaTexte, var(--cAccentt));
    display: flex;
    align-items: center;
}

/* Alerte incohérence */
.saisieAlerte {
    width: 100%;
    text-align: center;
    font: var(--fLabel);
    color: var(--cRouge3);
    padding-top: 4px;
}

/* ══════════════════════════════════════
   INPUT RESULTAT PERSO (points personnalisés)
   ══════════════════════════════════════ */

/* ── Pointage : un VRAI tableau compact (rang / noms / curseur d'état) ──
   Filets fins, pas de cartes empilées ; largeurs fixes = alignement parfait des colonnes.
   Le rang est en retrait visuel : l'ordre de tirage n'est pas l'information importante.
   Le curseur est le toggle STANDARD (toggleScene*, feuille _toggleScene.css du bundle
   écran) : indicateur glissant et tailles de bouton existants, aucun design nouveau. */
.saisieTableauBoite .saisieChamps {
    gap: 0;
    /* De l'air franc entre les textes du haut (titre, consigne, vivier) et la liste :
       au moins une hauteur de caractère (décision du chef de projet, 2026-09-01). */
    margin-top: 1.5em;
}

/* Le compteur vivant, à côté du bouton : l'état de la saisie en un chiffre
   (écartés du pointage, ajoutés du stock). Largeur figée par le TS (au maximum
   possible) + chiffres tabulaires : le passage de 9 à 10 ne déplace rien. */
.saisieCompteurBoite {
    font: var(--fLabel);
    color: var(--cNoir3);
    align-self: center;
    margin-right: var(--gapMoyen);
    font-variant-numeric: tabular-nums;
}

/* Rangées de tableau des boîtes en mode tableau (pointage, stock) : filets, zébrage,
   compacité. Le sélecteur scoped est plus spécifique que la carte de saisie, quelle
   que soit leur position dans la feuille — la ligne de tableau gagne toujours. */
.saisieTableauBoite .saisieChamps > .saisieInputPerso {
    /* Marge droite plus ample : la colonne de gauche réserve du large (grands
       nombres), la colonne de droite ne doit pas paraître collée au bord en face. */
    padding: 4px 16px 4px 8px;
    background: none;
    border-radius: 0;
    border-bottom: var(--border);
}

.saisieTableauBoite .saisieChamps > .saisieInputPerso:first-child {
    border-top: var(--border);
}

/* Une ligne sur deux en léger gris : on ne se trompe pas de ligne (décision du
   chef de projet, 2026-09-01 — le surlignage au survol a été essayé puis retiré).
   Compté parmi les rangées seules : la légende du tableau ne décale pas le zébrage. */
.saisieTableauBoite .saisieChamps > .saisieInputPerso:nth-child(even of .saisieInputPerso) {
    background: var(--cBlanc02);
}

/* Colonnes du pointage : rang / noms / curseur. */
.saisieInputPerso.saisieInputPointage {
    display: grid;
    grid-template-columns: 3em minmax(0, 1fr) max-content;
    gap: 0 12px;
    align-items: center;
}

/* Tableau du stock, à légende : lot / stock / distribués / compteur standard [−] n [+].
   Les colonnes s'alignent sur toute la hauteur : c'est le conteneur qui porte la
   grille, chaque rangée (légende comprise) s'y inscrit en sous-grille. */
.saisieTableauBoite .saisieChamps:has(> .saisieTableauEntete) {
    display: grid;
    grid-template-columns: minmax(0, 1fr) repeat(3, max-content);
    column-gap: 12px;
}

.saisieTableauBoite .saisieChamps > .saisieTableauEntete,
.saisieTableauBoite .saisieChamps > .saisieInputPerso.saisieInputNombre {
    grid-column: 1 / -1;
    display: grid;
    grid-template-columns: subgrid;
    /* La carte de base pose un gap qui, sur une sous-grille, écraserait l'écart hérité. */
    gap: 0 12px;
    align-items: center;
}

/* La légende : les mots des colonnes, une fois pour toutes, en retrait visuel. */
.saisieTableauBoite .saisieChamps > .saisieTableauEntete {
    padding: 4px 16px 4px 8px;
    font: var(--fLabel);
    color: var(--cNoir3);
    border-bottom: var(--border);
}

.saisieTableauEntete > div,
.saisieTableauCellule {
    text-align: center;
    font-variant-numeric: tabular-nums;
}

.saisieTableauEntete > div:first-child {
    text-align: left;
}

.saisieTableauCellule {
    color: var(--cNoir3);
}

/* Tableau : les textes s'alignent à gauche (la carte de saisie, elle, centre). */
.saisieTableauBoite .saisieJoueurNom,
.saisieTableauBoite .saisiePersoCaption {
    text-align: left;
}

/* Sauf sous le titre (consigne, vivier) : centrés, comme sur toutes les boîtes. */
.saisieTableauBoite .saisieFormulaire > .saisiePersoCaption {
    text-align: center;
}

.saisiePointageRang {
    font: var(--fLabel);
    color: var(--cNoir4);
    font-variant-numeric: tabular-nums;
    text-align: right;
}


/* Le seul écart sémantique : « Écarter » sélectionné se lit en rouge. */
.saisiePointageEcarte .toggleSceneBtn.selectionne {
    color: var(--cRouge3);
}

/* La ligne écartée (décision du chef de projet, 2026-09-04) : le nom s'estompe, et c'est
   tout — il RESTE LISIBLE, c'est quelqu'un qu'on retire, on doit voir qui. Jamais de
   rayé : trente et une langues, autant de polices, un trait barré tombe n'importe où
   sur certaines écritures. */
.saisiePointageLigneEcartee .saisieJoueurNom {
    opacity: .5;
}

.saisieInputPerso {
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
    padding: 12px 16px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
}

.saisiePersoNoms {
    display: flex;
    gap: var(--gapMoyen);
    margin-bottom: 2px;
}

.saisiePersoNoms .saisieJoueurNom {
    flex: 1;
    text-align: center;
}

.saisiePersoCaption {
    font: var(--fLabel);
    color: var(--cNoir3);
    text-align: center;
}

/* Ligne à 3 colonnes : score/points sur les extérieurs, flèches (ou espace) au centre. */
.saisiePersoLigne {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
}

.saisiePersoLigne .saisieScore {
    flex: 0 0 60px;
}

.saisiePersoLigne .saisieToggleResultat,
.saisiePersoLigne .saisiePersoGap {
    flex: 1;
    display: flex;
    justify-content: center;
}

/* Flèches en lecture seule : reflètent les points, non cliquables. */
.saisieToggleLectureSeule .saisieToggleBtn {
    cursor: default;
    display: flex;
    align-items: center;
}

.saisieToggleLectureSeule .saisieToggleBtn.saisieToggleActif {
    background: var(--couleurCta, var(--cAccent3));
    color: var(--couleurCtaTexte, var(--cAccentt));
}

/* ══════════════════════════════════════
   POPUP INLINE (positionnement seul)
   ══════════════════════════════════════ */

.saisiePopup {
    position: fixed;
    z-index: 1000;
    display: flex;
    align-items: center;
    gap: var(--gapReduit);
    padding: 6px 8px;
    background: var(--cBlanc1);
    border-radius: var(--borderR1);
    border: var(--border);
    box-shadow: 0 4px 16px var(--cOmbreForte);
}

/* Popup ancrée (au clic sur un élément) : panneau complet + pied liens. */
.saisiePopupAncree {
    display: block;
    padding: 0;
    max-width: 360px;
}

.saisiePopupAncree .saisieFormulaire {
    max-width: none;
    padding: 12px 16px;
    margin: 0;
}

.saisiePopupAncree .saisieChamps {
    max-height: 50vh;
    margin-bottom: 10px;
}

/* Pied liens (popup au clic) : petits liens « Annuler » / « Valider », pas de gros bouton. */
.saisieLien {
    font: var(--fLabel);
    cursor: pointer;
    text-decoration: underline;
    padding: 2px 6px;
}

.saisieLienAnnuler {
    color: var(--cNoir3);
}

.saisieLienValider {
    color: var(--couleurCta, var(--cAccent3));
    font-weight: 600;
}

/* « Valider » grisé tant que la saisie n'est pas complète : visible mais pas cliquable (même
   concept que la barre d'actions, grisé jamais masqué). */
.saisieLien.saisieLienDesactive {
    color: var(--cNoir4);
    cursor: default;
}

/*!*************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitSingleton/css/variablesRuntime.css ***!
  \*************************************************************************************************************************************************/
/*
 * Variables CSS recréées en TypeScript au runtime : le JS les pose par élément via setProperty
 * (valeur = base x ratio d'échelle), dans Dimensionneur / VueComposant / Tableau / Matchs / Sondage.
 * Déclarées ici en `initial` (= guaranteed-invalid : aucun effet sur le rendu, le var() se comporte
 * comme si rien n'était déclaré) uniquement pour que l'IDE les résolve et garde l'inspection
 * « unresolved custom property » active contre les vrais typos.
 */
:root {
    /* partagées (Dimensionneur, VueComposant) */
    --ilotPadding: initial; /* l'espace des cartes : une seule valeur, posée sur la racine (Dimensionneur.espaceCarte) */
    --ilotRayon: initial;
    --ilotRayonInterne: initial;
    --police1: initial;
    --police2: initial;
    --police3: initial;

    /* tableau / classement (Tableau.ts) */
    --largeurTableau: initial;
    --paddingTableauV: initial;
    --paddingTableauH: initial;

    /* matchs (Matchs.ts) */
    --mGap: initial;
    --mNom: initial;
    --mCentre: initial;
    --paddingLigneV: initial;
    --paddingLigneH: initial;

    /* sondage (Sondage.ts) */
    --pct: initial;
    --sondQuestionMb: initial;
    --sondLigneGap: initial;
    --sondBarreH: initial;
}

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitSingleton/css/carte.css ***!
  \**************************************************************************************************************************************/
/**
 * Kit CSS — Effets visuels (carte)
 *
 * Applique via data-effet sur #salleEcran.
 * Ajouter .vueCarte sur tout bloc a styliser.
 */

/* ── Variable bordure dérivée (une seule source) ── */
#salleEcran {
    --ilotBordure: 1px solid color-mix(in srgb, var(--couleurPrimaire) 30%, transparent);
}

/* ── Classes partagées ── */

.vueTitreCentre {
    font-size: var(--police1);
    font-family: var(--ffEcran);
    font-weight: 700;
    text-align: center;
    color: var(--couleurPrimaire);
}

/* Scene d'entree commune */
@keyframes vueApparition {
    from {
        opacity: 0;
        transform: translateY(0.75em);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.vueAnimer {
    animation: vueApparition 150ms ease-out forwards;
}

/* Carte de base. Son cadre est l'espace des cartes de tout l'écran (Dimensionneur.espaceCarte) :
   le même sur toutes les cartes, qui ne suit ni la police ni le zoom. */
.vueCarte {
    border-radius: var(--ilotRayon);
    padding: var(--ilotPadding);
}

/* L'îlot fait main d'une carte (un bloc, pas un tableau du kit) la remplit : aucun vide ne
   s'ajoute au cadre d'un côté. Les tableaux du kit, eux, ont la largeur que le kit calcule, et la
   carte les enveloppe. */
.vueCarte div.vueTableau {
    width: auto;
    margin-left: 0;
    margin-right: 0;
    align-self: stretch;
    flex-grow: 1;
}

/* Glacis */
[data-effet="1"] .vueCarte {
    background-color: color-mix(in srgb, var(--couleurFond) 30%, transparent);
    backdrop-filter: blur(12px);
    border: 1px solid var(--couleurFond);
    box-shadow: 0 4px 20px var(--cNoir);
}

/* Transparent */
[data-effet="2"] .vueCarte {
    background-color: color-mix(in srgb, var(--couleurFond) 70%, transparent);
}

/* Voile */
[data-effet="3"] .vueCarte {
    background: linear-gradient(165deg,
        color-mix(in srgb, var(--couleurFond) 95%, transparent),
        color-mix(in srgb, var(--couleurFond) 40%, transparent));
}

/* Encadre */
[data-effet="4"] .vueCarte {
    background-color: var(--couleurFond);
    border: 2px solid var(--couleurPrimaire);
}

/* Ombre */
[data-effet="5"] .vueCarte {
    background-color: var(--couleurFond);
    box-shadow: 0 4px 20px var(--cOmbreForte);
}

/* Popup : ombre portee pour detacher du fond */
.vuePopup {
    box-shadow: 0 0 20px 10px var(--cNoir);box-shadow: 0 0 50px 50px var(--cNoir);
}

/* Ilots internes : bordure subtile dans la carte */
[data-effet] .vueCarte .vueTableau,
[data-effet] .vueCarte .vueMatchLigne {
    background: var(--couleurFond);
    border-radius: var(--ilotRayonInterne);
    border: var(--ilotBordure);
}

/* Carte « bande » : la carte sans son cadre, pour une boîte trop basse où le cadre prendrait plus
   de place que le contenu (décision chef de projet 2026-09-26). Il ne reste que l'îlot, qui prend
   la forme de la carte et garde sa silhouette selon l'effet — l'ombre du glacis et de l'ombré, le
   liseré de l'encadré ; le transparent et le voile n'ont que leur cadre, qui disparaît. C'est la
   scène qui la choisit (`vueCarte vueBande`), jamais un calcul. */
.vueCarte.vueBande,
[data-effet] .vueCarte.vueBande {
    padding: 0;
    background: none;
    backdrop-filter: none;
    border: none;
    box-shadow: none;
}

[data-effet] .vueCarte.vueBande .vueTableau {
    border-radius: var(--ilotRayon);
}

[data-effet="1"] .vueCarte.vueBande .vueTableau {
    box-shadow: 0 4px 20px var(--cNoir);
}

[data-effet="4"] .vueCarte.vueBande .vueTableau {
    border: 2px solid var(--couleurPrimaire);
}

[data-effet="5"] .vueCarte.vueBande .vueTableau {
    box-shadow: 0 4px 20px var(--cOmbreForte);
}

/* Carte sans ombre : seule l'ombre disparaît, le fond et le cadre de l'effet restent. C'est la
   scène (ou le kit) qui la demande, pour un affichage de base qui ne doit pas dominer
   (`vueCarte vueSansOmbre`). */
[data-effet] .vueCarte.vueSansOmbre {
    box-shadow: none;
}

/* Carte « pastille » : le dessin de la carte à la taille d'une mention (un rang à côté d'un
   résultat). Son cadre suit son propre texte, pas l'espace de l'écran, qui la rendrait plus
   grosse que ce qu'elle accompagne. C'est le kit qui la demande (`vueCarte vuePastille`). */
.vueCarte.vuePastille {
    padding: 0.3em 0.5em;
}

/* Gagnant / Perdant (generique) */
.vueGagnant {
    color: var(--couleurPrimaire);
}

.vuePerdant {
    font-weight: 200;
    opacity: 0.4;
}

/* Pagination */
.vuePagination {
    text-align: center;
}

/* Lot display */
.vueLot {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.vueLotImageWrap {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 0;
    width: 100%;
}

.vueLotImage {
    max-width: min(80%, calc(100vw * 12 / 48));
    max-height: min(90%, calc(100vh * 8 / 24));
    object-fit: contain;
    display: block;
}

/* Badge résultat — participant nommé ou numéro tombola */

@keyframes vueBadgeResultatPop {
    0%   { opacity: 0; transform: scale(0.2) rotate(-6deg); }
    60%  { opacity: 1; transform: scale(1.1) rotate(1deg); }
    80%  { transform: scale(0.96); }
    100% { opacity: 1; transform: scale(1) rotate(0deg); }
}

@keyframes vueBadgeResultatFlash {
    0%   {
        box-shadow:
            inset  6px  6px 18px 18px #FFB3C188,
            inset -6px  6px 18px 18px #B3D9FF88,
            inset  6px -6px 18px 18px #B3FFB388,
            inset -6px -6px 18px 18px #FFF3B388;
    }
    100% { box-shadow: inset 0 0 0 0 transparent; }
}

.vueBadgeResultat.vueAnimer {
    /* Le pop garde `forwards` (il fige l'échelle et l'opacité d'arrivée), le flash NON — et
       c'est volontaire. Le flash pilote `box-shadow` ; avec `forwards`, sa dernière image
       restait figée tant que `.vueAnimer` était posée, et la classe reste sur le dernier
       résultat sorti (les kits ne la retirent qu'à l'arrivée du suivant, parfois jamais).
       Le flash ne doit donc rien laisser derrière lui : il rend `box-shadow` au badge à la
       fin des 700 ms, la synchronisation est portée par l'animation et non par le
       JavaScript, et un oubli de retrait de classe n'a plus aucun effet visible. */
    animation: vueBadgeResultatPop 550ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards,
               vueBadgeResultatFlash 700ms ease-out;
}

.vueBadgeResultat {
    font-size: var(--police1);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    /* Accroches d'habillage (docs/architecture/habillage.md) : chaque fallback est le
       défaut historique ; --habCouleurResultat est publiée en inline par VueKit. */
    padding: var(--habPadding, 0.5em 1em);
    border: var(--habBordure, 1px solid transparent);
    border-radius: var(--habForme, var(--ilotRayonInterne));
    /* PAS d'ombre : le badge résultat n'endosse pas --habOmbre (décision chef de projet
       2026-09-04). L'ombre ne venait que d'un habillage, le flap, où elle sertissait le
       panneau ; elle coûtait plus qu'elle ne rendait — le flash d'apparition pilote lui
       aussi `box-shadow`, et toute ombre de fond devenait une valeur à restituer à la fin
       de l'animation, donc une synchronisation de plus à tenir. Le badge est plat, posé sur
       le fond : sa silhouette tient à la bordure, à la forme et à l'outline. */
    font-family: var(--habPolice, inherit);
    background: var(--habCouleurResultat, var(--habFond, var(--couleurFond)));
    outline: 1px solid var(--cNoir);
    outline-offset: -1px;
    /* PAS de `overflow: hidden` : un résultat amputé est pire qu'un résultat qui dépasse
       (décision chef de projet 2026-08-28). Le calibrage de police est là pour que le texte
       tienne ; s'il se trompe de quelques pour cent, on veut le voir déborder, pas
       disparaître. Le trait et le label de l'animation « Annulé » sont posés en inset: 0,
       ils n'ont jamais eu besoin du clipping. */
    width: 100%;
    max-width: 100%;
    min-height: 2.2em;
    flex-shrink: 0;
    /* Ancre des états posés DANS le badge (rang, tampon — kitPlugin/CLAUDE.md, « Kits d'affichage »).
       Sans décalage, donc sans effet sur la mise en page ; un kit qui positionne ses badges
       en absolu (GagnantKit) continue de le faire en inline, qui prime. */
    position: relative;
}

.vueBadgeResultatVide {
    /* Futur résultat : l'habillage ne s'applique qu'au tiré. Un badge vide ne porte ni fond ni
       bordure d'habillage, seule la forme reste pour annoncer la silhouette — et son contour est
       CELUI des badges pleins, pas un trait pâle : une place à prendre se voit comme une place
       prise (décision PO 2026-09-11, qui remplace le trait discret du 2026-08-25). La bordure
       garde sa largeur en transparent pour que le badge ne change pas de taille en se
       remplissant. Rien à annuler côté ombre : le badge résultat n'en porte plus du tout. */
    background: #00000005;
    border-color: transparent;
}

/* Place ouverte : ce qui vient PEUT arriver ici. Le badge vide s'allume, sous tout habillage —
   c'est une information de jeu, pas un décor : la question « où puis-je aller ? » se lit sur les
   cartes (décision PO 2026-09-10, répartition en équipes). Dans la couleur de la carte quand
   elle en a une (celle de l'équipe : la place a déjà la couleur que le nom prendra), en blanc uni
   sinon. Posé par le kit à liste sur sa première place libre, option `ouvert` de `mettreAJour`. */
.vueBadgeResultatVide.vueBadgeResultatOuvert {
    background: var(--habCouleurResultat, var(--cBlanc));
}

.vueBadgeResultatNom {
    position: relative;
    z-index: 1;
    /* Sans effet à largeur naturelle ; un texte ajusté dans sa hauteur (au-delà du plafond de
       signes, kitPlugin/CLAUDE.md, « Kits d'affichage ») prend toute la largeur et doit rester centré. */
    text-align: center;
    /* Ni `max-width: 100%`, ni `overflow: hidden`, ni `text-overflow: ellipsis`.
       L'ellipsis coûtait BEAUCOUP plus que le débordement qu'elle prétendait masquer :
       pour cacher 5 % de trop-plein, le navigateur doit retirer assez de caractères pour
       loger le « … » lui-même — sur un numéro monospacé espacé (0.3em), cela faisait
       « AF-082 » → « AF-0… », un tiers du résultat perdu. Le texte garde donc sa largeur
       naturelle et reste centré par le flex parent : s'il déborde, il déborde des deux
       côtés, lisiblement (décision chef de projet 2026-08-28). */
    font-weight: 700;
    color: var(--habCouleurResultatTexte, var(--habTexte, var(--cNoir)));
    text-align: center;
    white-space: nowrap;
}

@keyframes vueBadgeResultatEcarter {
    0%   { letter-spacing: 0; text-indent: 0; }
    100% { letter-spacing: var(--habInterlettrageChiffres, 0.2em); text-indent: var(--habInterlettrageChiffres, 0.2em); }
}

.vueBadgeResultatNomChiffres {
    /* text-indent = letter-spacing : l'espacement s'applique aussi APRÈS le dernier
       chiffre et décale le centrage vers la gauche ; l'indent rajoute l'équivalent
       devant pour rééquilibrer (même parade que les volets du flap).
       text-indent et NON padding-left : un habillage peut poser la même compensation sur
       le badge (`.habFlap .habElement { text-indent: 0.3em }`), et le span en hérite. Avec
       deux propriétés différentes les deux s'additionnaient — 0.6em de décalage pour 0.3em
       d'espacement en trop, le texte poussé à droite et coupé. Avec la même propriété, la
       déclaration du span REMPLACE la valeur héritée : la compensation vaut l'espacement, une
       seule fois, avec ou sans habillage.
       L'espacement lui-même est un axe du contrat d'habillage (--habInterlettrageChiffres,
       docs/architecture/habillage.md) : 0.2em sans habillage, la roue et la roulette le
       resserrent, le flap l'aligne sur ses volets. Décision chef de projet 2026-09-06 :
       les chiffres s'écartent partout, chaque habillage règle de combien. */
    letter-spacing: var(--habInterlettrageChiffres, 0.2em);
    text-indent: var(--habInterlettrageChiffres, 0.2em);
}

.vueBadgeResultat.vueAnimer .vueBadgeResultatNomChiffres {
    animation: vueBadgeResultatEcarter 500ms cubic-bezier(0.34, 1.56, 0.64, 1) 100ms both;
}

.vueBadgeResultatNumero {
    position: relative;
    z-index: 1;
    font-size: 0.75em;
    font-weight: 400;
    color: var(--habCouleurResultatTexte, var(--habTexte, var(--cNoir)));
    opacity: 0.7;
    text-align: center;
}

/* ── États du badge posés par les kits (décision chef de projet 2026-09-10,
   kitPlugin/CLAUDE.md, « Kits d'affichage »). Le rang et le tampon sont des états du badge, dans le
   socle, à côté de lui : plus de copie par kit. Posés par VueKit.poserRangBadgeResultat et
   VueKit.tamponnerBadgeResultat. Le socle porte le comportement par défaut ; un kit qui en
   veut un autre pose sa propre classe par-dessus. ── */

/* Rang du tirage (#N), coin haut-gauche du badge. La moitié de la police du badge, sans plancher
   en pixels — le rang suit la police, comme le nom, et rien d'autre —, et une pastille qui suit la
   police aussi (décision PO 2026-09-11 — à 25 % et 11 px de plancher, il ne se lisait pas). */
.vueBadgeResultatRang {
    position: absolute;
    z-index: 2;
    top: 0;
    left: 0;
    font-size: 50%;
    line-height: 1;
    letter-spacing: 0;
    text-indent: 0;
    padding: 0.15em 0.35em;
    border-radius: 0 0 0.4em;
    background: var(--cNoir);
    color: var(--cBlanc);
    pointer-events: none;
}
.vueBadgeResultatRang > span {
    color: var(--cNoir4);
}

/* Tampon (annulation) — 8 s au total, durée reprise par VueKit.tamponnerBadgeResultat.
   PRINCIPE : le résultat reste 100 % lisible, aucun overlay ne le couvre. Un trait oblique se
   dessine sur le badge, une étiquette paraît dans le coin, le badge sort en glissant.
   Timeline : 0 → 0.2 s délai ; 0.2 → 1 s le trait se dessine de gauche à droite ;
   1 → 1.4 s l'étiquette paraît (ressort) ; 1.4 → 6.5 s tenue ; 6.5 → 8 s sortie glissée + fondu.
   Le texte de l'étiquette vient de --vueBadgeTamponTexte (rendu via `content:`) : autre chose
   qu'« Annulé » est possible. Trait (inset: 0) et étiquette (top/right) sont posés DANS le
   badge : ils n'ont jamais eu besoin d'un overflow: hidden, qui aurait recoupé le résultat.
   Sélecteur à une classe, comme les anciens .gaKitBadgeAnnule / .lgKitBadgeAnnule : un badge
   qui porte encore .vueAnimer garde l'animation d'apparition (plus spécifique) et ne joue pas
   la sortie — comportement constant, signalé au chef de projet à l'étape 0. */
.vueBadgeResultatTampon {
    animation: vueBadgeResultatTamponSortie 1.5s cubic-bezier(0.55, 0, 0.45, 1) 6.5s forwards;
}
/* Trait oblique d'un coin à l'autre, quel que soit le ratio : SVG inline étiré par
   preserveAspectRatio="none", trait gardé à 4px par vector-effect="non-scaling-stroke",
   « dessiné » par un clip-path qui s'ouvre de gauche à droite. */
.vueBadgeResultatTampon::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image: url("data:image/svg+xml;charset=UTF-8,<svg xmlns=%27http://www.w3.org/2000/svg%27 preserveAspectRatio=%27none%27 viewBox=%270 0 1 1%27><line x1=%270%27 y1=%271%27 x2=%271%27 y2=%270%27 stroke=%27black%27 stroke-width=%274%27 stroke-opacity=%270.5%27 vector-effect=%27non-scaling-stroke%27/></svg>");
    background-size: 100% 100%;
    background-repeat: no-repeat;
    clip-path: inset(0 100% 0 0);
    animation: vueBadgeResultatTamponRayer 0.8s cubic-bezier(0.65, 0, 0.35, 1) 0.2s forwards;
    pointer-events: none;
    z-index: 5;
}
.vueBadgeResultatTampon::after {
    content: var(--vueBadgeTamponTexte);
    position: absolute;
    top: 4px;
    right: 4px;
    max-width: 50%;
    font: 700 max(11px, 25%) var(--ffEcran);
    color: var(--cBlanc);
    background: var(--cNoir);
    padding: 2px 6px;
    border-radius: 3px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    pointer-events: none;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    box-shadow: 0 1px 3px var(--cOmbre);
    transform: scale(0) rotate(8deg);
    transform-origin: top right;
    animation: vueBadgeResultatTamponEtiquette 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 1s forwards;
    z-index: 6;
}
@keyframes vueBadgeResultatTamponRayer {
    to { clip-path: inset(0 0 0 0); }
}
@keyframes vueBadgeResultatTamponEtiquette {
    0%   { transform: scale(0)    rotate(8deg);  opacity: 0; }
    60%  { transform: scale(1.15) rotate(-3deg); opacity: 1; }
    100% { transform: scale(1)    rotate(0deg);  opacity: 1; }
}
@keyframes vueBadgeResultatTamponSortie {
    0%   { opacity: 1; transform: translateY(0)    scale(1); }
    100% { opacity: 0; transform: translateY(40px) scale(0.95); filter: blur(1px); }
}

/* Séparateurs directionnels */
.vueSeparateurH,
.vueSeparateurV {
    flex-shrink: 0;
    background: color-mix(in srgb, var(--couleurSecondaire) 15%, transparent);
}

.vueSeparateurH { width: 100%; height: 1px; }
.vueSeparateurV { height: 100%; width: 1px; }

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitSingleton/css/tableau.css ***!
  \****************************************************************************************************************************************/
/**
 * Kit CSS — Tableau generique + Classement
 */

.vueTableauVue,
.vueClassement {
    font: var(--fText16);
    line-height: 1;
    margin: 0 auto;
}

.vueTableauBloc,
.vueClassementBloc {
    width: fit-content;
    max-width: 100%;
    margin: 0 auto;
}

.vueTableau {
    table-layout: fixed;
    width: var(--largeurTableau, auto);
    border-collapse: separate;
    border-spacing: 0;
    font-variant-numeric: tabular-nums;
    margin: 0 auto;
}

/* Largeurs colonnes tableau via CSS vars (posees par JS) */
.vueTableau col {
    width: var(--largeur);
}

/* Les textes du tableau prennent les couleurs du thème, jamais un noir du système : l'îlot a la
   couleur de fond de l'événement, sombre sur deux fonds de la galerie. Nom en primaire, texte
   courant en secondaire, ce qui s'efface (en-têtes, capacités, page) en secondaire estompé. */

/* En-tete */
.vueTableau thead th {
    font-size: var(--police2);
    font-weight: 400;
    color: color-mix(in srgb, var(--couleurSecondaire) 50%, transparent);
    text-align: center;
    padding: var(--paddingTableauV) var(--paddingTableauH);
    /* Filet dérivé du thème, jamais de la palette système : mélange du fond de carte et du
       texte, il reste donc visible que le thème soit clair ou sombre. Rien à configurer. */
    border-bottom: 2px solid color-mix(in srgb, var(--couleurSecondaire) 25%, var(--couleurFond));
}

/* Cellules */
.vueTableau tbody td {
    color: var(--couleurSecondaire);
    text-align: center;
    padding: var(--paddingTableauV) var(--paddingTableauH);
    border-bottom: 1px solid color-mix(in srgb, var(--couleurSecondaire) 15%, var(--couleurFond));
    overflow: hidden;
}

.vueTableau tbody tr:last-child td {
    border-bottom-color: transparent;
}

/* Colonne rang */
.vueColRang {
    text-align: center;
}

.vueTableau tbody td.vueColRang {
    color: var(--couleurSecondaire);
}

/* Colonne nom */
.vueColNom {
    text-align: left;
    font-weight: 600;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.vueTableau thead th.vueColNom {
    text-align: left;
}

.vueTableau tbody td.vueColNom {
    color: var(--couleurPrimaire);
    text-align: left;
}

/* Colonne capacité (club, niveau...) — affichage enrichi : secondaire, graisse light + italique
   pour se distinguer du nom. Tronquée en « … » (table-layout: fixed impose --largeur). */
.vueColCapacite {
    text-align: left;
    font-weight: 100;
    font-style: italic;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.vueTableau tbody td.vueColCapacite {
    color: color-mix(in srgb, var(--couleurSecondaire) 50%, transparent);
    text-align: left;
}

/* Colonne surbrillance */
.vueColSurbrillance {
    color: var(--couleurCta, var(--cAccent3));
    font-weight: 700;
}

/* Alignements — scopés sous .vueTableau (spécificité 0,2,0) pour PRIMER sur le text-align: center
   par défaut des cellules du corps (.vueTableau tbody td = 0,1,2). Sans ce scope, une classe
   d'alignement seule (0,1,0) ne battait pas la base → l'alignement déclaré (gauche/droite) était
   ignoré dans le corps et tout finissait centré. */
.vueTableau .vueColGauche { text-align: left; }
.vueTableau .vueColCentre { text-align: center; }
.vueTableau .vueColDroite { text-align: right; }

/* Titre + Page (partage classement + matchs) */
.vueTitre {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    flex-wrap: wrap;
    /* L'espace de la carte, comme son cadre : il ne suit pas la police. */
    margin-bottom: var(--ilotPadding);
}

.vueTitreTexte {
    font-family: var(--ffEcran);
    font-size: var(--police1);
    font-weight: 700;
    /* Couleur du thème, jamais un noir du système : le titre est écrit sur la carte, qui prend la
       couleur de fond de l'événement — sombre sur deux fonds de la galerie. */
    color: var(--couleurPrimaire);
}

.vueTitrePage {
    font-size: var(--police3);
    font-weight: 200;
    font-style: italic;
    color: color-mix(in srgb, var(--couleurSecondaire) 50%, transparent);
}

/* Multi-colonnes (partage classement + matchs). Les colonnes serrent leurs îlots, séparées par
   l'espace de la carte — le même que son cadre : la carte les enveloppe, aucun vide ne s'ajoute
   entre deux îlots ni au bord. Une colonne de moins sur la dernière page : pas de piste vide. */
.vueMultiCol {
    max-width: none;
    width: 100%;
    margin: 0;
    align-items: stretch;
}

.vueMultiColonnes {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: max-content;
    column-gap: var(--ilotPadding);
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitSingleton/css/matchs.css ***!
  \***************************************************************************************************************************************/
/**
 * Kit CSS — Matchs (grille)
 */

.vueMatchs {
    font: var(--fText16);
    line-height: 1;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    align-items: center;
}

.vueMatchsBloc {
    display: flex;
    flex-direction: column;
    gap: var(--mGap);
    max-width: 100%;
}

.vueMatchColonne {
    display: flex;
    flex-direction: column;
    gap: var(--mGap);
}

.vueMatchLigne {
    display: grid;
    grid-template-columns: var(--mNom, 1fr) var(--mCentre) var(--mNom, 1fr);
    align-items: center;
    padding: var(--paddingLigneV) var(--paddingLigneH);
    /* Fond et textes du thème, jamais la palette système : mêmes rôles que le tableau (tableau.css). */
    background: var(--couleurFond);
    border-radius: var(--borderR1);
    position: relative;
}

/* Numéro de table/emplacement : petit, en haut à gauche du rectangle. */
.vueMatchNumero {
    position: absolute;
    top: 2px;
    left: 5px;
    font-size: var(--police2);
    color: color-mix(in srgb, var(--couleurSecondaire) 40%, transparent);
    line-height: 1;
}

.vueMatchNomDroite {
    font-weight: 600;
    color: var(--couleurPrimaire);
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.vueMatchNomGauche {
    font-weight: 600;
    color: var(--couleurPrimaire);
    text-align: left;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Affichage enrichi : le nom reste sur 1 ligne, les capacités du joueur passent en 2e ligne,
   du côté du joueur (droite pour joueur1, gauche pour joueur2). Appliqué seulement quand des
   capacités sont fournies → le mode « sobre » garde le rendu mono-ligne actuel à l'identique. */
.vueMatchNomDroite.vueMatchNomEnrichi,
.vueMatchNomGauche.vueMatchNomEnrichi {
    display: flex;
    flex-direction: column;
    white-space: normal;
    overflow: visible;
}

.vueMatchNomDroite.vueMatchNomEnrichi { align-items: flex-end; }
.vueMatchNomGauche.vueMatchNomEnrichi { align-items: flex-start; }

.vueMatchNomTexte {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.vueMatchCapacites {
    max-width: 100%;
    font-weight: 100;
    font-style: italic;
    font-size: var(--police2);
    color: color-mix(in srgb, var(--couleurSecondaire) 50%, transparent);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.vueMatchScore {
    font-weight: 700;
    color: var(--couleurCta, var(--cAccent3));
    text-align: center;
}

.vueMatchScore svg {
    vertical-align: middle;
}

.vueMatchVs {
    font-size: var(--police2);
    color: color-mix(in srgb, var(--couleurSecondaire) 40%, transparent);
    text-align: center;
}

/* Lignes cliquables */
.vueMatchCliquable {
    cursor: pointer;
    transition: outline 0.15s;
}

.vueMatchCliquable:hover {
    outline: 2px solid var(--couleurPrimaire);
    outline-offset: -2px;
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitSingleton/css/sondage.css ***!
  \****************************************************************************************************************************************/
/**
 * Kit CSS — Sondage (barres de résultats)
 */

.vueSondageVue {
    max-width: 60%;
    width: 100%;
    margin: 0 auto;
}

.vueSondageBloc {
    display: flex;
    flex-direction: column;
}

.vueSondageBarreInfo {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 0.3em;
}

.vueSondageTotal {
    font-size: var(--police3);
    opacity: 0.5;
}

.vueSondageProgression {
    font-size: var(--police3);
    opacity: 0.5;
}

.vueSondageBloc .vueTitreCentre {
    margin-bottom: var(--sondQuestionMb);
}

.vueSondageReponses {
    display: flex;
    flex-direction: column;
    gap: var(--sondLigneGap);
    width: 100%;
    background: var(--couleurFond);
    padding: var(--ilotPadding);
    border-radius: var(--ilotRayonInterne);
    border: var(--ilotBordure);
}

.vueSondageLigne {
    display: flex;
    flex-direction: column;
    gap: 0.2em;
}

.vueSondageEntete {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
}

.vueSondageTexte {
    font-size: var(--police2);
    color: var(--couleurSecondaire);
}

.vueSondagePct {
    font-size: var(--police3);
    font-weight: 700;
    color: var(--couleurSecondaire);
    opacity: 0.7;
}

.vueSondageBarre {
    position: relative;
    height: var(--sondBarreH);
    background: var(--couleurFond);
    border: var(--ilotBordure);
    border-radius: calc(var(--sondBarreH) / 2);
    overflow: hidden;
}

.vueSondageBarreValeur {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: var(--pct, 0%);
    background: var(--couleurSecondaire);
    border-radius: calc(var(--sondBarreH) / 2);
    transition: width 0.8s ease-out;
}

/* Meilleure réponse */
.vueSondageMeilleur .vueSondageBarreValeur {
    background: var(--couleurPrimaire);
}

.vueSondageMeilleur .vueSondageTexte {
    color: var(--couleurPrimaire);
}

.vueSondageMeilleur .vueSondagePct {
    color: var(--couleurPrimaire);
    opacity: 1;
}

/*!***********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPlugin/pluckRevele/habillage.css ***!
  \***********************************************************************************************************************************************/
/* Habillage « effeuillage » — contrat : docs/architecture/habillage.md */
.habPluck {
    /* Pilule : une valeur énorme est plafonnée à 50 % de la hauteur et donne des bouts
       en vrai demi-cercle. `50%` donnerait des coins elliptiques (ovale) — interdit ici. */
    --habForme: 999em;
    --habFond: var(--cBlanc);
    --habTexte: var(--cNoir);
    --habPolice: var(--ffChiffres);
    --habAssignerCouleurs: non;
}
/* Rang : la pilule laisse son coin vide, aucune pastille n'y tient sans dépasser de la courbe.
   Le chiffre seul, sans fond ni dièse, collé au coin — il se pose donc sur le fond de la scène,
   dans la couleur d'écriture réglée avec ce fond (celle du titre, même repli). */
.habPluck .vueBadgeResultatRang {
    padding: 0;
    background: none;
    color: var(--couleurTexteSurFond, var(--couleurPrimaire));
}
.habPluck .vueBadgeResultatRang > span {
    display: none;
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPlugin/roue/habillage.css ***!
  \****************************************************************************************************************************************/
/* Habillage « roue de la chance » (RoueKit, RoueLotKit) — contrat : docs/architecture/habillage.md */
.habRoue {
    --habTexte: var(--cNoir);
    /* Les numéros s'écartent moins que sur les autres habillages : ils s'affichent au centre
       de la roue comme au récapitulatif, sur un fond coloré qui n'a pas besoin de ce souffle. */
    --habInterlettrageChiffres: 0.1em;
    --habAssignerCouleurs: oui;
}
/* La couleur individuelle du participant fait le fond de son élément. */
.habRoue .habElement {
    background: var(--habCouleurResultat, var(--couleurFond));
}

/*!*********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPlugin/splitFlap/habillage.css ***!
  \*********************************************************************************************************************************************/
/* Habillage « split-flap » — contrat : docs/architecture/habillage.md */
.habFlap {
    --habForme: 0.1em;
    --habFond: var(--couleurPrimaire);
    --habTexte: var(--couleurFond);
    --habPolice: var(--ffChiffres);
    /* Le panneau flap est serti dans un cadre blanc épais, détaché du fond par un fin
       liseré sombre et une ombre portée — c'est le cadre qui dessine le panneau. */
    --habBordure: 0.22em solid #FFF9;
    --habOmbre: 0 0 0 0.05em var(--cOmbre), 0 0.12em 0.4em var(--cOmbreForte);
    /* Le panneau réel est plat et allongé : quasi pas de marge verticale. */
    --habPadding: 0.25em 0.9em;
    /* Jamais de couleur individuelle : un panneau d'aéroport est monochrome — fond primaire,
       écriture claire — même quand des couleurs existent au registre (flapCouleursPerso).
       Ces couleurs restent l'affaire du flap lui-même (ses volets), pas des scènes d'affichage. */
    --habAssignerCouleurs: non;
    /* Un numéro s'écarte au rythme des volets, comme tout ce qui passe sous ce panneau. */
    --habInterlettrageChiffres: 0.3em;
}
/* Les volets du flap n'affichent que des capitales, au rythme espacé des cases.
   text-indent = letter-spacing : l'espacement s'applique aussi APRÈS le dernier caractère
   et fausserait le centrage ; l'indent rajoute l'équivalent devant pour rééquilibrer. */
.habFlap .habElement {
    text-transform: uppercase;
    letter-spacing: 0.3em;
    text-indent: 0.3em;
}

/*!********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPlugin/roulette/habillage.css ***!
  \********************************************************************************************************************************************/
/* Habillage « roulette » — contrat : docs/architecture/habillage.md */
.habRoulette {
    /* 0 est une valeur imposée : les angles vifs sont l'identité de la roulette. */
    --habForme: 0;
    --habTexte: var(--cNoir);
    --habAssignerCouleurs: oui;
    /* Même resserrement des numéros que la roue : fond coloré, pas besoin de souffle. */
    --habInterlettrageChiffres: 0.1em;
}
/* La couleur individuelle du participant fait le fond de son élément. */
.habRoulette .habElement {
    background: var(--habCouleurResultat, var(--couleurFond));
}

/*!******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPlugin/cursor/habillage.css ***!
  \******************************************************************************************************************************************/
/* Habillage « sélecteur » (CursorKit) — contrat : docs/architecture/habillage.md */
.habScope {
    /* Le miroir de la case ARRÊTÉE du curseur (fond primaire, écriture claire) — pas de
       son rail au repos : un récap montre des résultats sortis, jamais des candidats. */
    /* Rayon FIXE, comme la case du kit (.cuKitSlot { border-radius: 6px }) : elle ne
       l'agrandit pas avec sa taille, le badge ne doit pas l'agrandir avec sa police. */
    --habForme: 6px;
    --habFond: var(--couleurPrimaire);
    --habTexte: var(--couleurFond);
    --habPolice: var(--ffChiffres);
    --habAssignerCouleurs: non;
}

/*!***********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPlugin/cursorBingo/habillage.css ***!
  \***********************************************************************************************************************************************/
/* Habillage « bingo » (CursorBingoKit, GrilleBingoKit) — contrat : docs/architecture/habillage.md
   Un seul habillage pour la famille bingo ; les couleurs par lettre restent internes aux kits. */
.habBingo {
    --habForme: 0.5em;
    --habFond: var(--cBlanc);
    --habTexte: var(--cNoir);
    --habBordure: 0.15em solid var(--cNoir);
    --habPolice: var(--ffChiffres);
    --habAssignerCouleurs: non;
}

/*!***********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPlugin/slotMachine/habillage.css ***!
  \***********************************************************************************************************************************************/
/* Habillage « machine à sous » — contrat : docs/architecture/habillage.md */
.habSlot {
    --habFond: var(--cBlanc);
    /* Texte noir, comme les autres habillages à fond blanc (pluck, bingo) : laissé « libre »,
       un kit dont l'écriture par défaut est claire écrivait blanc sur blanc (décision chef de
       projet 2026-09-13). */
    --habTexte: var(--cNoir);
    --habBordure: 0.1em solid var(--couleurPrimaire);
    --habAssignerCouleurs: non;
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPlugin/pop/habillage.css ***!
  \***************************************************************************************************************************************/
/* Habillage « pop » — contrat : docs/architecture/habillage.md */
.habPop {
    --habFond: var(--couleurPrimaire);
    --habTexte: var(--couleurFond);
    /* Ni cadre, ni police, ni forme imposés : ce kit n'a pas d'objet à faire reconnaître.
       Son identité est l'apparition elle-même, pas une silhouette — un récap sous habPop
       reprend donc simplement les couleurs du résultat, avec les formes du socle. */
    --habAssignerCouleurs: non;
}

/*!*************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitPlugin/nappageRevele/habillage.css ***!
  \*************************************************************************************************************************************************/
/* Habillage « nappage » — contrat : docs/architecture/habillage.md */
.habNappage {
    --habFond: var(--couleurPrimaire);
    --habTexte: var(--couleurFond);
    /* Ni cadre, ni police, ni forme imposés : ce kit n'a pas d'objet à faire reconnaître.
       Son identité est la couleur qui se répand, pas une silhouette — un récap sous
       habNappage reprend donc simplement les couleurs du résultat, avec les formes du socle.
       Même carte d'identité que habPop, et c'est voulu (chef de projet, 2026-09-12) : les
       deux visuels se distinguent par la découverte, pas par le résultat découvert. */
    --habAssignerCouleurs: non;
}

/*!**************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitSingleton/pagination/pagination.css ***!
  \**************************************************************************************************************************************************/
/**
 * ControleurPagination — Styles du bloc inline ◀ 1/8 ▶
 * Utilisé par tous les kits qui intègrent ControleurPagination.
 */

/* Police FIXE, jamais celle du kit (décision chef de projet 2026-09-13) : la pagination parle
   à l'organisateur, pas à la salle — elle n'a rien à grossir avec le zoom, et n'a pas à se
   mettre en avant. Même taille que la pagination de la barre du bas (_studioIntegree.css). */
.pagBloc {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5em;
    font-size: 16px;
    flex: 0 0 auto;
    padding-top: 0.2em;
}

.pagBtn {
    background: none;
    border: none;
    color: inherit;
    cursor: pointer;
    font-size: 1em;
    padding: 0 0.3em;
    opacity: 0.7;
    line-height: 1;
}

.pagBtn:disabled {
    opacity: 0.2;
    cursor: default;
}

.pagBtn:not(:disabled):hover {
    opacity: 1;
}

.pagInfo {
    opacity: 0.6;
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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LDhCQUE4QjtJQUM5Qjs7OztzRkFJa0Y7SUFDbEYsMEJBQTBCO0FBQzlCOzs7OztBQ1ZBOzs7RUFHRTs7QUFFRjs7NkZBRTZGO0FBQzdGO0lBQ0ksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsVUFBVTtJQUNWLGVBQWU7SUFDZixjQUFjO0lBQ2Qsa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixjQUFjO0lBQ2QsZUFBZTtJQUNmLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxZQUFZO0lBQ1osZUFBZTtBQUNuQjs7QUFFQTtJQUNJLFVBQVU7QUFDZDs7QUFFQTtJQUNJLFlBQVk7QUFDaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzLzAwX3Jlc2V0LmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzLzEwX2ZvbnQuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvMzFfY3RhLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUvZWNyYW4vY3NzL19zdHVkaW9JbnRlZ3JlZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2VjcmFuL2Nzcy9fcHJvZ3Jlc3NCYXIuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9zYWxsZS9lY3Jhbi9jc3MvX2JhcnJlRmluLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUvZWNyYW4vY3NzL196b25lQWN0aW9ucy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2VjcmFuL2Nzcy9fc2NlbmVCb3V0b25zLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUvZWNyYW4vY3NzL190b2dnbGVTY2VuZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2VjcmFuL2Nzcy9fcmVnbGFnZVNjZW5lLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUvZWNyYW4vY3NzL19idWxsZUNvbmZpcm1hdGlvbi5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9jb21wb3NhbnRzL2JvdXRvbkZlcm1ldHVyZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9jb21wb3NhbnRzL2phaW1lLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL2NvbXBvc2FudHMvZXRpcXVldHRlSmFpbWUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9zYWxsZS9raXRQdXIvcHJldmlldy9wb2ludGV1clByZXZpZXcuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9zYWxsZS9wcmV2aWV3UGFydGljaXBhbnQvY3NzL2RvaWd0UGFyY291cnMuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9zYWxsZS9lY3Jhbi9jc3MvX3ByZXZpZXcuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9zYWxsZS9lY3Jhbi9jc3MvX2JvaXRlRGlhbG9ndWUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9zYWxsZS9lY3Jhbi9jc3MvX2F1Y3VuZUFuaW1hdGlvbi5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2VjcmFuL2Nzcy9fdHJhbnNpdGlvbkJsb2NzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUvZWNyYW4vY3NzL190aXJhZ2VFY2FydGUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3Mvc3R1ZGlvLzU2X3NjZW5hcmlvL19ldGlxdWV0dGVzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby9fcmVjYXBpdHVsYXRpZi5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2VjcmFuL2Nzcy9zYWxsZUVjcmFuLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUva2l0U2luZ2xldG9uL3NhaXNpZS9jc3Mvc2Fpc2llLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUva2l0U2luZ2xldG9uL2Nzcy92YXJpYWJsZXNSdW50aW1lLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUva2l0U2luZ2xldG9uL2Nzcy9jYXJ0ZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2tpdFNpbmdsZXRvbi9jc3MvdGFibGVhdS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2tpdFNpbmdsZXRvbi9jc3MvbWF0Y2hzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUva2l0U2luZ2xldG9uL2Nzcy9zb25kYWdlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUva2l0UGx1Z2luL3BsdWNrUmV2ZWxlL2hhYmlsbGFnZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2tpdFBsdWdpbi9yb3VlL2hhYmlsbGFnZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2tpdFBsdWdpbi9zcGxpdEZsYXAvaGFiaWxsYWdlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUva2l0UGx1Z2luL3JvdWxldHRlL2hhYmlsbGFnZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2tpdFBsdWdpbi9jdXJzb3IvaGFiaWxsYWdlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUva2l0UGx1Z2luL2N1cnNvckJpbmdvL2hhYmlsbGFnZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2tpdFBsdWdpbi9zbG90TWFjaGluZS9oYWJpbGxhZ2UuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9zYWxsZS9raXRQbHVnaW4vcG9wL2hhYmlsbGFnZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2tpdFBsdWdpbi9uYXBwYWdlUmV2ZWxlL2hhYmlsbGFnZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L3NhbGxlL2tpdFNpbmdsZXRvbi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIiosIDo6YWZ0ZXIsIDo6YmVmb3JlIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG5ib2R5IHtcbiAgICBtYXJnaW46IDA7XG59XG5cbnVsIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7XG59IiwiaHRtbCB7XG4gICAgLyogSWwgZXN0IGludGVyZGl0IGRlIHJham91dGVyIGRlcyBjb3VsZXVycyBzYW5zIGRlbWFuZGVyIGwnYWNjb3JkIGR1IFBPICovXG4gICAgLS1jQmxhbmMxOiB2YXIoLS1jQmxhbmMpO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxhbmMxcDogI0UwRTBFMDsgKi9cbiAgICAtLWNCbGFuYzAyOiAjRjVGNUY1O1xuICAgIC0tY0JsYW5jMjogI0YwRjBGMDtcbiAgICAtLWNCbGFuYzAzOiAjZGNlMWVhO1xuICAgIC0tY0JsYW5jMzogI0NDQ0ZDQztcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsYW5jNDogI0FBQUZBQTsgKi9cbiAgICAtLWNCbGFuYzU6ICM5OTlDOTk7XG5cblxuICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgQ09VTEVVUlMgVEVYVEUgTk9JUiAtIFVUSUxJU0FUSU9OIE9CTElHQVRPSVJFXG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICAgIC8qIC0tY05vaXIxIDogw4lMw4lNRU5UUyBEJ0VNUEhBU0VcbiAgICAgICAtIFRpdHJlcyA6IGgxLCBoMiwgaDNcbiAgICAgICAtIFRleHRlIGRlcyBib3V0b25zIChxdWFuZCBwYXMgZGUgY291bGV1ciBkw6lmaW5pZSlcbiAgICAgICAtIExhYmVscyBvYmxpZ2F0b2lyZXMgKHJlcXVpcmVkKVxuICAgICAgIC0gTWVudXMgZGUgbmF2aWdhdGlvblxuICAgICAgIC0gQ2hlY2tib3ggZXQgcmFkaW8gYm91dG9uc1xuICAgICAgIC0gVmFsZXVyIHByaW5jaXBhbGUgZGFucyBsZXMgY29tcHRldXJzIChleDogXCIzXCIgZGFucyBcIjMgLyA1XCIpXG4gICAgKi9cbiAgICAtLWNOb2lyMTogIzE4MTgxODtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY05vaXIxbzogIzE4MTgxODU1OyAqL1xuXG4gICAgLyogLS1jTm9pcjIgOiBDT1JQUyBERSBURVhURVxuICAgICAgIC0gUGFyYWdyYXBoZXMgPHA+XG4gICAgICAgLSBMaXN0ZXMgPGxpPiwgw6ludW3DqXJhdGlvbnNcbiAgICAgICAtIExhYmVscyBmYWN1bHRhdGlmc1xuICAgICAgIC0gVGV4dGUgc2Fpc2kgZGFucyBsZXMgaW5wdXRzXG4gICAgICAgLSBUaXRyZXMgaDQsIGg1LCBoNlxuICAgICAgIC0gVmFsZXVyIHNlY29uZGFpcmUgZGFucyBsZXMgY29tcHRldXJzIChleDogXCIvIDVcIiBkYW5zIFwiMyAvIDVcIilcbiAgICAqL1xuICAgIC0tY05vaXIyOiAjMjgyODI4O1xuXG4gICAgLyogLS1jTm9pcjMgOiBURVhURSBURVJUSUFJUkVcbiAgICAgICAtIFBsYWNlaG9sZGVyc1xuICAgICAgIC0gTWVzc2FnZXMgZCdhaWRlIGRpc2NyZXRzXG4gICAgICAgLSBUZXh0ZSBkw6lzYWN0aXbDqVxuICAgICovXG4gICAgLS1jTm9pcjM6ICM1NTU7XG5cbiAgICAvKiAtLWNOb2lyNC01IDogVEVYVEUgVFLDiFMgQVRUw4lOVcOJXG4gICAgICAgLSDDiWzDqW1lbnRzIGTDqXNhY3RpdsOpc1xuICAgICAgIC0gVGV4dGUgZMOpY29yYXRpZlxuICAgICovXG4gICAgLS1jTm9pcjQ6ICM5OTk7XG4gICAgLS1jTm9pcjU6ICNCQkI7XG4gICAgLS1jQmxhbmM6ICNGRkY7XG4gICAgLS1jTm9pcjogIzAwMDtcbiAgICAtLWNUZXh0ZTE6ICMyMjI7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUZXh0ZTI6ICM0NDQ7ICovXG4gICAgLS1jRm9ybTogIzAwMDtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1fYjogIzU1NTsgKi9cblxuICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgUEFMRVRURVMgREUgUsOUTEUg4oCUIHVuZSBzZXVsZSBmb3JtZSwgOCBwYWxpZXJzLCB0b3Vqb3VycyBub21tw6lzIHBhcmVpbFxuICAgICAgIDAgZm9uZCB0csOocyBww6JsZSDCtyAxIGZvbmQgcMOibGUgwrcgMiBib3JkdXJlIC8gbW95ZW4gwrcgMyBjb3VsZXVyIHBsZWluZSAoYm91dG9uLCBsaWVuLFxuICAgICAgIG9uZ2xldCBhY3RpZiwgaW5kaWNhdGV1cikgwrcgNCBmb25jw6kgLyBzdXJ2b2wgwrcgX2EgZMOpZ3JhZMOpIMK3IF9haCBkw6lncmFkw6kgYXUgc3Vydm9sIMK3XG4gICAgICAgdCB0ZXh0ZSBwb3PDqSBzdXIgbGEgY291bGV1ciBwbGVpbmUuXG4gICAgICAgQWNjZW50IGVzdCBsYSBjb3VsZXVyIGRlIGwnZXNwYWNlIG/DuSBsJ29uIGVzdCA6IGVsbGUgY2hhbmdlIHBhciB1bmUgY2xhc3NlIHN1ciA8Ym9keT5cbiAgICAgICAodm9pciBsZSBibG9jIGFwcsOocyBodG1se30pLiBPciwgUm91Z2UgZXQgU3VjY2VzIG5lIGNoYW5nZW50IGphbWFpcy5cbiAgICAgICBEw6ljaXNpb24gUE8gMjAyNi0wOS0wNS4gQXVjdW5lIGF1dHJlIGNvdWxldXIgZGUgcsO0bGUgbidlc3QgYWRtaXNlLlxuICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgICAvKiBBY2NlbnQgOiB2b2lyIGxlIGJsb2MgYm9keSB7IH0gYXByw6hzIGh0bWwgeyB9LiBFbGxlIHZpdCBzdXIgYm9keSwgcGFzIGljaSDigJQgdW5lXG4gICAgICAgdmFyaWFibGUgZMOpcml2w6llIChkw6lncmFkw6ksIGhhbG8pIHNlIGNhbGN1bGUgbMOgIG/DuSBlbGxlIGVzdCBkw6ljbGFyw6llLCBldCBkb2l0IGRvbmNcbiAgICAgICDDqnRyZSBkw6ljbGFyw6llIHN1ciBsZSBtw6ptZSDDqWzDqW1lbnQgcXVlIGxhIGNsYXNzZSBxdWkgY2hhbmdlIGxhIGNvdWxldXIuICovXG5cbiAgICAvKiBPciDigJQgcydpbnNjcmlyZSwgY29ubmV4aW9uLCB0YXJpZiwgbWlzZSBlbiBhdmFudCAqL1xuICAgIC0tY09yMDogI2ZlZmNlODtcbiAgICAtLWNPcjE6ICNmZWYzYzc7XG4gICAgLS1jT3IyOiAjZjVkOTZiO1xuICAgIC0tY09yMzogI0ZGRDgxNDsgLyogbCdvciBkJ0FtYXpvbiwgdGV4dGUgZm9uY8OpIGRlc3N1cyAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMTAtMDcpICovXG4gICAgLS1jT3I0OiAjRkZDRTEyOyAvKiBzb24gc3Vydm9sICovXG4gICAgLS1jT3JfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY09yMyksIHZhcigtLWNPcjQpIDEwMCUpO1xuICAgIC0tY09yX2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jT3IzKSwgdmFyKC0tY09yMykgMTAwJSk7XG4gICAgLS1jT3J0OiAjMTgxODE4OyAvKiBmb25jw6kgOiBsZSBibGFuYyBzdXIgLS1jT3IzIG5lIGZhaXNhaXQgcXVlIDIsMDoxIGRlIGNvbnRyYXN0ZSwgOCw4OjEgYWluc2kgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTEwLTA3KSAqL1xuXG4gICAgLyogUm91Z2Ug4oCUIGVycmV1ciwgYWxlcnRlLCBzdXBwcmVzc2lvbiwgZ2VzdGUgZGFuZ2VyZXV4ICovXG4gICAgLS1jUm91Z2UwOiAjZmRmM2YyO1xuICAgIC0tY1JvdWdlMTogI2ZiZTJkZjtcbiAgICAtLWNSb3VnZTI6ICNmNWFhYTM7XG4gICAgLS1jUm91Z2UzOiAjZjE1YjRlO1xuICAgIC0tY1JvdWdlNDogIzkzMDAwMDtcbiAgICAtLWNSb3VnZV9hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jUm91Z2UzKSwgdmFyKC0tY1JvdWdlNCkgMTAwJSk7XG4gICAgLS1jUm91Z2VfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNSb3VnZTMpLCB2YXIoLS1jUm91Z2UzKSAxMDAlKTtcbiAgICAtLWNSb3VnZXQ6ICNGRkY7XG5cbiAgICAvKiBDxZN1ciDCqyBKJ2FpbWUgwrsg4oCUIHVuIHJvdWdlIMOgIGx1aSwgc2FuZywgYm9yZGVhdXggZm9uY8OpIDogbGUgcm91Z2UgZGUgbGEgZmFtaWxsZSBkaXRcbiAgICAgICBsJ2FsZXJ0ZSBldCBsZSBkYW5nZXIsIHBhcyBsJ2FmZmVjdGlvbiAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTYpLlxuICAgICAgIERldXggY3JhbnMsIGNvbW1lIGxlcyBhdXRyZXMgZmFtaWxsZXMgOiBsZSBww6JsZSBkdSBzdXJ2b2wsIGxhIGNvdWxldXIgZHUgY8WTdXIuICovXG4gICAgLS1jQ29ldXIwOiAjZjZlNGU3O1xuICAgIC0tY0NvZXVyMzogI2MxMTkyZjtcblxuICAgIC8qIFN1Y2NlcyDigJQgdmFsaWRhdGlvbiwgY29uZmlybWF0aW9uICovXG4gICAgLS1jU3VjY2VzMDogI2YwZmJmZjtcbiAgICAtLWNTdWNjZXMxOiAjZGRmMWZhO1xuICAgIC0tY1N1Y2NlczI6ICM5M2QzZWE7XG4gICAgLS1jU3VjY2VzMzogIzBlOWRjOTtcbiAgICAtLWNTdWNjZXM0OiAjMGI1ZjdhO1xuICAgIC0tY1N1Y2Nlc19hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jU3VjY2VzMyksIHZhcigtLWNTdWNjZXM0KSAxMDAlKTtcbiAgICAtLWNTdWNjZXNfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNTdWNjZXMzKSwgdmFyKC0tY1N1Y2NlczMpIDEwMCUpO1xuICAgIC0tY1N1Y2Nlc3Q6ICNGRkY7XG5cbiAgICAtLWNCYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuXG4gICAgLyogTGUgYmFuZGVhdSBkZXMgYXBlcsOndXMgKHBhZ2VSdWJyaXF1ZS5jc3MsIOKJpSAxNjAwcHgpLiBVTiBQTEFURUFVIFVOSSBBVSBDRU5UUkUsIGxlIGTDqWdyYWTDqVxuICAgICAgIHN1ciBsZXMgYm9yZHMgc2V1bGVtZW50IChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0yNCkgOiBsJ2FuY2llbiBkw6lncmFkw6kgYWxsYWl0XG4gICAgICAgZHUgZ3JpcyBkZXMgYm9yZHMgYXUgYmxhbmMgZHUgY2VudHJlLCBldCBkZXMgY2FydGVzIGJsYW5jaGVzIGlkZW50aXF1ZXMgcGFyYWlzc2FpZW50XG4gICAgICAgYmxhbmNoZXMgc3VyIGxlIGdyaXMgZXQgdGVybmVzIHN1ciBsZSBibGFuYy4gU3VyIGxlIHBsYXRlYXUsIHRvdXRlcyBzZSBkw6l0YWNoZW50XG4gICAgICAgcGFyZWlsLiBEZXV4IGhhbG9zIGRlIGNvdWxldXIsIHRlbnVzIGRhbnMgbGVzIGJvcmRzLCBkb25uZW50IHVuIHBldSBkZSB2aWUgOiBsZSBibGV1XG4gICAgICAgZHUgc2l0ZSBlbiBoYXV0IMOgIGdhdWNoZSwgbCdvcmFuZ2UgZGVzIGlsbHVzdHJhdGlvbnMgZW4gYmFzIMOgIGRyb2l0ZS4gKi9cbiAgICAtLWNCYWNrZ3JvdW5kR3JhbmQ6XG4gICAgICAgIHJhZGlhbC1ncmFkaWVudCgxNCUgNDAlIGF0IDAlIDI1JSwgIzQzNmJjMTFmLCB0cmFuc3BhcmVudCksXG4gICAgICAgIHJhZGlhbC1ncmFkaWVudCgxNCUgNDAlIGF0IDEwMCUgNzUlLCAjZjM5YzM0MWYsIHRyYW5zcGFyZW50KSxcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjRThFQkYwIDAlLCAjRjRGNUY3IDEyJSwgI0Y0RjVGNyA4OCUsICNFOEVCRjAgMTAwJSk7XG5cbiAgICAvKiBMYXlvdXQgKi9cbiAgICAtLWxhcmdldXI6IDEzNjBweDtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tbWF4V2lkdGg6IDc2MHB4OyAqL1xuICAgIC0tY0JnOiB2YXIoLS1jQmxhbmMpO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmdfYjogI0NDQzsgKi9cblxuICAgIC8qIE5vaXIgdHJhbnNwYXJlbnQg4oCUIG9tYnJlcyAqL1xuICAgIC0tY09tYnJlOiAjMDAwMjsgICAgICAgICAgICAvKiBlbnZpcm9uIDE1JSAqL1xuICAgIC0tY09tYnJlRm9ydGU6ICMwMDA0OyAgICAgICAvKiBlbnZpcm9uIDMwJSAqL1xuXG4gICAgLyogdHJhbnNwYXJlbnQg4oCUIG92ZXJsYXlzICovXG4gICAgLS1jT3ZlcmxheTogIzAwMDg7ICAgICAgICAgIC8qIGVudmlyb24gNTAlICovXG4gICAgLS1jQmxhbmNPdmVybGF5OiAjRkZGQzsgICAgIC8qIGVudmlyb24gODAlICovXG4gICAgLS1jQmxhbmNWZXJyZTogI0ZGRkZGRjhDOyAgIC8qIGVudmlyb24gNTUlIOKAlCB2ZXJyZSBkw6lwb2xpLCB0b3Vqb3VycyBhdmVjIHVuIGZsb3UgKGJhcnJlIGV0IGJ1bGxlIGRlIGwnYXBlcsOndSkgKi9cblxuICAgIC8qIE9tYnJlcyBjb21wb3PDqWVzICovXG4gICAgLS1vbWJyZVBvcnRlZTogMCA0cHggMTJweCB2YXIoLS1jT21icmUpO1xuICAgIC0tb21icmVQb3J0ZWUyOiAwIDBweCAyNXB4ICMwMDA7XG4gICAgLS1vbWJyZU1vZGFsZTogMCAxMHB4IDQwcHggdmFyKC0tY09tYnJlRm9ydGUpO1xuICAgIC0tb21icmVJbnRlcm5lOiAwIDAgMTBweCAxMHB4IGluc2V0IHZhcigtLWNCbGFuYzAyKTtcblxuICAgIC8qIENvdWxldXJzIE5vaXIgZ3JhZGllbnRzICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNOb2lyM19hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNTA1ODU4LCAjMzAzODM4IDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTm9pcjNfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM1MDU4NTgsICM1MDU4NTggMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNOb2lyM19haExpZ2h0OiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNzA3ODc4LCAjNzA3ODc4IDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTm9pcjNfYXQ6ICNGRkY7ICovXG5cblxuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1zQWxlcnRlX3M6ICNERUM0QzQ7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUdXRvOiAjQzZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVHV0b190OiAjMDAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVHV0b19haDogI2Q3OWFmMjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsYW5jMV90OiAjMTgxODE4OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUGxhY2Vob2RlcjogIzg4ODsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1fczogI0ZGRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tYnNDdGE6IDAgN3B4IDE0cHggIzMzNTIsIDAgM3B4IDZweCAjMDAwMTsgKi9cblxuICAgIC8qIEZvcm11bGFpcmVzIHV0aWxpc2F0ZXVyICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb3JtVXNyOiAjRUVGQUZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9iOiAjMzM0OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9oOiAjRkZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9iZjogIzBBRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1Vc3JfY2I6ICMwNTk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb3JtX2JmOiAjM0MwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybV9jYjogIzU5MDsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0tvX2I6ICNGODg7ICovXG5cbiAgICAvKiBMb2dvICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNMb2dvMTogI0VCRjdFNDsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0xvZ28yOiAjQzZFOUFGOyAqL1xuXG4gICAgLS1mZkJhc2U6ICdOb3RvIFNhbnMnLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZmTW9ubzogJ0pldEJyYWluc01vbm8nLCAnVmVyZGFuYScsIG1vbm9zcGFjZTtcbiAgICAvKiBQb2xpY2Ugc3RhbmRhcmQgZGUgbCfDqWNyYW4gcHVibGljICh0b3V0IGNlIHF1aSBlc3QgcHJvamV0w6kpIOKAlCBzZXVsZSBzb3VyY2UsIGx1ZSBhdXNzaVxuICAgICAgIHBhciBsZXMgY2FudmFzIHZpYSBwb2xpY2VFY3JhbigpIChraXRQbHVnaW4vc2hhcmVkL3BvbGljZS50cykuIETDqWNpc2lvbiAyMDI2LTA4LTI5IDpcbiAgICAgICBOb3RvIFNhbnMgc2V1bGUsIHBhcyBkZSBTY2FkYSBuaSBNb250c2VycmF0IHN1ciBjZSBxdWUgdm9pdCBsZSBwdWJsaWMuICovXG4gICAgLS1mZkVjcmFuOiAnTm90byBTYW5zJywgc2Fucy1zZXJpZjtcbiAgICAvKiBQb2xpY2UgZGVzIGNoaWZmcmVzIGRlIGwnw6ljcmFuIHB1YmxpYyAodGlyYWdlcywgY29tcHRlIMOgIHJlYm91cnMsIHBhbm5lYXV4IMOgIHZvbGV0cykg4oCUXG4gICAgICAgY2hpZmZyZXMgbW9ub2xhcmdlcyBnYXJhbnRpcyBhdXggZGV1eCBmYW1pbGxlcywgbHVlIHBhciBsZXMgY2FudmFzIHZpYSBwb2xpY2VDaGlmZnJlcygpLlxuICAgICAgIETDqWNpc2lvbiAyMDI2LTA4LTI5IDogcmVtcGxhY2UgJ0NvdXJpZXIgTmV3JyAocG9saWNlIG1hY2hpbmUsIGFic2VudGUgZCdBbmRyb2lkL0xpbnV4KS4gKi9cbiAgICAtLWZmQ2hpZmZyZXM6ICdVYnVudHUgU2FucycsICdOb3RvIFNhbnMnLCBzYW5zLXNlcmlmO1xuXG4gICAgLyogSWwgZXN0IGludGVyZGl0IGRlIHJham91dGVyIGRlcyBzdHlsZXMgdHlwbyBzYW5zIGRlbWFuZGVyIGwnYWNjb3JkIGR1IFBPICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWZUaXRyZTogbm9ybWFsIG5vcm1hbCA3MDAgMzJweCAnU2NhZGEnLCBzYW5zLXNlcmlmOyAqL1xuICAgIC0tZkgxOiBub3JtYWwgbm9ybWFsIDcwMCAzMnB4ICdTY2FkYScsIHNhbnMtc2VyaWY7XG4gICAgLS1mSDI6IG5vcm1hbCBub3JtYWwgNzAwIDI0cHggJ1NjYWRhJywgc2Fucy1zZXJpZjtcbiAgICAtLWZIMzogbm9ybWFsIG5vcm1hbCA0MDAgMjJweCAnU2NhZGEnLCBzYW5zLXNlcmlmO1xuICAgIC0tZkg0OiBub3JtYWwgbm9ybWFsIDQwMCAxOHB4ICdTY2FkYScsIHNhbnMtc2VyaWY7XG4gICAgLyogVGl0cmUgZGUgbCfDqXbDqW5lbWVudCBzdXIgbCfDqWNyYW4gcHVibGljICguem9uZVRpdHJlVGV4dGUpIDogcG9saWNlIGRlIGwnw6ljcmFuLCBwYXMgU2NhZGEuXG4gICAgICAgTGEgdGFpbGxlIGVzdCByZWNhbMOpZSDDoCBsJ2FmZmljaGFnZSBwYXIgR2VzdGlvbm5haXJlRm9uZEVuVGV0ZS4gRMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTQuICovXG4gICAgLS1mVGl0cmVFY3Jhbjogbm9ybWFsIG5vcm1hbCA3MDAgMzJweCB2YXIoLS1mZkVjcmFuKTtcbiAgICAtLWZNZW51MTQ6IG5vcm1hbCBub3JtYWwgNDAwIDE0cHggJ01vbnRzZXJyYXQnLCBzYW5zLXNlcmlmO1xuICAgIC8qIENyYW4gY29tcGFjdCBkZSBsYSBiYXJyZSBkZSBwaWxvdGFnZSAoQWRhcHRhdGlvbkJhcnJlLnRzKSA6IGxhIGJhcnJlIHJlZMOpZmluaXQgLS1mTWVudTE0IGF2ZWNcbiAgICAgICBjZWxsZS1jaSBwb3VyIHNvbiBzZXVsIHDDqXJpbcOodHJlLiBEw6ljaXNpb24gZHUgY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0wMy4gKi9cbiAgICAtLWZNZW51MTM6IG5vcm1hbCBub3JtYWwgNDAwIDEzcHggJ01vbnRzZXJyYXQnLCBzYW5zLXNlcmlmO1xuICAgIC0tZkN0YTE2OiBub3JtYWwgbm9ybWFsIDcwMCAxOHB4ICdNb250c2VycmF0Jywgc2Fucy1zZXJpZjtcbiAgICAvKiBSZW1pc2UgZW4gc2VydmljZSBsZSAyMDI2LTA5LTE2IChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQpIDogbGUgbW9ubyBkJ3VuIExJQkVMTMOJLCBwYXJcbiAgICAgICBvcHBvc2l0aW9uIMOgIC0tZk1vbm8yNGIgcXVpIGVzdCBsZSBtb25vIGQndW4gR1JPUyBDSElGRlJFIChjb2RlcyBkJ2FjY8OocywgY29tcHRldXJzKS5cbiAgICAgICBQcmVtacOocmUgdXNhZ8OocmUgOiBsJ8OpdGlxdWV0dGUgZCd1bmUgc2PDqG5lIHN1ciBsYSBWaXRyaW5lIChjb21wb3NhbnRzL2V0aXF1ZXR0ZUphaW1lLmNzcykuXG4gICAgICAgTGUgcmVwbGkgJ0NvdXJpZXIgTmV3JyBlc3QgdW5lIHZyYWllIGNoYXNzZSBmaXhlIOKAlCBjZWx1aSBkZSAtLWZmTW9ubyAoVmVyZGFuYSkgbidlbiBlc3RcbiAgICAgICBwYXMgdW5lLiAqL1xuICAgIC0tZk1vbm8xNjogbm9ybWFsIG5vcm1hbCA0MDAgMTZweCAnSmV0QnJhaW5zTW9ubycsICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tZk1vbm8yNDogbm9ybWFsIG5vcm1hbCA0MDAgMjRweCAnSmV0QnJhaW5zTW9ubycsICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTsgKi9cbiAgICAtLWZNb25vMjRiOiBub3JtYWwgbm9ybWFsIDcwMCAyNHB4ICdKZXRCcmFpbnNNb25vJywgJ0NvdXJpZXIgTmV3JywgQ291cmllciwgbW9ub3NwYWNlO1xuICAgIC0tZkN0YTIwOiBub3JtYWwgbm9ybWFsIDcwMCAyMHB4ICdNb250c2VycmF0Jywgc2Fucy1zZXJpZjtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tZkxlZ2VuZDE2OiBub3JtYWwgbm9ybWFsIDQwMCAyMHB4ICdTY2FkYScsIHNhbnMtc2VyaWY7ICovXG4gICAgLS1mTGlnaHQxNDogaXRhbGljIG5vcm1hbCAyMDAgMTRweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZNaW5pMTE6IGl0YWxpYyBub3JtYWwgMjAwIDExcHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mVGV4dDE2OiBub3JtYWwgbm9ybWFsIDQwMCAxNnB4ICdOb3RvIFNhbnMnLCBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIC0tZlRleHQxNlN0cm9uZzogbm9ybWFsIG5vcm1hbCA3MDAgMTZweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZJdGFsaWMxNjogaXRhbGljIG5vcm1hbCA0MDAgMTZweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZBbGVydGUxNjogaXRhbGljIHNtYWxsLWNhcHMgNzAwIDIwcHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mTGFiZWw6IG5vcm1hbCBub3JtYWwgNDAwIDE0cHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiAgICAtLWJvcmRlcjogMXB4IHNvbGlkICNkY2UxZWE7XG4gICAgLS1ib3JkZXJSMDogM3B4O1xuICAgIC0tYm9yZGVyUjE6IDVweDtcbiAgICAtLWJvcmRlclIyOiA3cHg7XG4gICAgLS1ib3JkZXJDYXJ0ZTogMXB4IHNvbGlkIHZhcigtLWNOb2lyNCk7XG4gICAgLS1ib3JkZXJGb3JtOiAxcHggc29saWQgdmFyKC0tY05vaXI1KTtcbiAgICAtLWJvcmRlcklucHV0OiAxcHggc29saWQgdmFyKC0tY05vaXI1KTtcblxuICAgIC8qIEVzcGFjZW1lbnRzIOKAlCBub21tw6lzIHBhciByw7RsZSAoY29tbWUgbGVzIGJvcmR1cmVzKSwgYWNjb3JkIFBPIDIwMjYtMDctMDMuXG4gICAgICAgTWlncmF0aW9uIHByb2dyZXNzaXZlIDogbmUgcmVtcGxhY2VyIHVuZSB2YWxldXIgZW4gZHVyIHF1ZSBzaSBsZSByw7RsZSBFVCBsYSB2YWxldXJcbiAgICAgICBjb3JyZXNwb25kZW50IChuby1vcCB2aXN1ZWwpIDsgYWxpZ25lciB1bmUgZMOpcml2ZSBkZSB2YWxldXIgPSBkw6ljaXNpb24gw6AgcGFydC4gKi9cbiAgICAtLWdhcExpc3RlOiAzMnB4OyAgIC8qIGVudHJlIGxlcyDDqWzDqW1lbnRzIGQndW5lIGxpc3RlLiBMYSBjb2xvbm5lIHF1aSBib3JkZSBsYSBsaXN0ZSAoZXguIHBhbm5lYXUgZGUgZmlsdHJlcykgcHJlbmQgbGUgTcOKTUUgZ2FwIDogZGV1eCByeXRobWVzIGRpZmbDqXJlbnRzIGPDtHRlIMOgIGPDtHRlLCBjJ2VzdCBtb2NoZSAqL1xuICAgIC0tcGFkZGluZ0NvcnBzOiAyMHB4OyAgIC8qIGludMOpcmlldXIgZCd1biBjb3JwcyBkZSBibG9jIC8gcGFubmVhdSAvIG1vZGFsZSAqL1xuICAgIC0tZ2FwRGVmYXV0OiA4cHg7ICAgICAgIC8qIGVzcGFjZSBzdGFuZGFyZCBlbnRyZSDDqWzDqW1lbnRzIGZyw6hyZXMgKGZsZXgvZ3JpZCkgKi9cbiAgICAtLWdhcFJlZHVpdDogNHB4OyAgICAgICAvKiB2YXJpYW50ZSB2b2xvbnRhaXJlbWVudCBwbHVzIHNlcnLDqWUgOiBsaXN0ZXMgY29tcGFjdGVzLCBncm91cGVzIGRlIGJvdXRvbnMgKi9cbiAgICAtLWdhcE1veWVuOiAxMnB4OyAgICAvKiBlc3BhY2VtZW50IGludGVybcOpZGlhaXJlIGVudHJlIMOpbMOpbWVudHMgZnLDqHJlcyAqL1xuICAgIC0tZ2FwTGFyZ2U6IDIwcHg7ICAgIC8qIGVzcGFjZW1lbnQgZ8OpbsOpcmV1eCBlbnRyZSBncm91cGVzIGQnw6lsw6ltZW50cyAqL1xuICAgIC0tZ2FwQ29sb25uZXM6IDRyZW07IC8qIGVudHJlIGRldXggY29sb25uZXMgZGUgcGFnZSBkZSBuYXR1cmUgZGlmZsOpcmVudGUgOiBsZSB0ZXh0ZSBldCBzb24gaW1hZ2UsIGxlIG1lbnUgZXQgc29uIGNvbnRlbnUgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE3KSAqL1xuICAgIC0tZ2FwQmxvY3M6IDEwcmVtOyAgIC8qIGxlIGJsYW5jIGVudHJlIGRldXggYmxvY3MgZW1waWzDqXMgZCd1bmUgbcOqbWUgY29sb25uZSBkZSBsZWN0dXJlIDogbCdhcnRpY2xlLCBzZXMgcXVlc3Rpb25zLCBzZXMgc2PDqW5hcmlvcyA7IGRldXggY2hhcGl0cmVzIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xNykgKi9cbiAgICAtLXBhZGRpbmdNaW5pRGl2OiA4cHggMTZweDsgLyogcGFkZGluZyBkZSB0b3V0IGxlcyBibG9jcyBhdmVjIGZvbmQgY29sb3LDqWVzICovXG4gICAgLS1wYWRkaW5nRXRpcXVldHRlOiAzcHggNnB4OyAvKiBwYWRkaW5nIGRlcyBzcGFuIGV0IGF1dHJlcyBldGlxdWV0dGUgKi9cbiAgICAtLXBhZGRpbmdDYXJ0ZTogMTZweCAyMHB4OyAgIC8qIGludMOpcmlldXIgZCd1bmUgQ0FSVEUg4oCUIHNvbiBjb3JwcyBjb21tZSBzYSBiYXJyZSBkJ2FjdGlvbnMuIExhIGNhcnRlIGV4aXN0ZSBlbiB0cm9pcyBleGVtcGxhaXJlcyBqdW1lYXV4IChibG9jcy5jc3MsIGlsb3RTY2VuYXJpb3MuY3NzLCA1NV9zY2VuYXJpb3NDb21wYXRpYmxlcy5jc3MpIDogY2hhY3VuIHJlY29waWFpdCBsZSBjaGlmZnJlLCBpbHMgbGlzZW50IG1haW50ZW5hbnQgbGEgbcOqbWUgdmFyaWFibGUgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTA3KSAqL1xuICAgIC0tcGFkZGluZ0NhcnRlRXRyb2l0OiAxMnB4IDIwcHg7IC8qIGxhIG3Dqm1lIGNhcnRlIGVuIGZlbsOqdHJlIMOpdHJvaXRlLCBxdWFuZCBsYSBiYXJyZSBkJ2FjdGlvbnMgcGFzc2Ugc291cyBsZSBjb3JwcyAqL1xuICAgIC0tcGFkZGluZ0N0YTogMTVweCAyMHB4OyAgICAgLyogTEUgZ3JhbmQgYm91dG9uIDogcGxlaW5lIGxhcmdldXIsIG1pbi13aWR0aCAxODBweCwgZm9udGUgLS1mQ3RhMTYuIExhIHNpbGhvdWV0dGUgY29tcGFjdGUsIGVsbGUsIHByZW5kIC0tcGFkZGluZ0N0YTE0IChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0wNykgKi9cbiAgICAtLXBhZGRpbmdCYWRnZTogNHB4IDE2cHg7ICAgIC8qIHVuIGJhZGdlIGVuIHBpbHVsZSwgcG9zw6kgc3VyIHVuIGJsb2Mg4oCUIHBhcyBsYSBwZXRpdGUgw6l0aXF1ZXR0ZSBpbmxpbmUgZCd1biByw6ljYXAsIHF1aSBnYXJkZSAtLXBhZGRpbmdFdGlxdWV0dGUgKi9cbiAgICAtLXBhZGRpbmdQYXN0aWxsZTogNnB4IDE0cHg7IC8qIHVuZSBwYXN0aWxsZSBOT04gY2xpcXVhYmxlIDogdW5lIMOpdGFwZSwgdW4gw6l0YXQsIHVuIGZpbHRyZSBwb3PDqSAqL1xuICAgIC0tcGFkZGluZ0lucHV0OiAxMHB4IDEycHg7ICAgLyogbCdpbnTDqXJpZXVyIGQndW4gY2hhbXAgZGUgc2Fpc2llICgtLWJvcmRlcklucHV0IGRpdCBzYSBib3JkdXJlKSAqL1xuICAgIC0tcGFkZGluZ0NlbGx1bGU6IDhweCAxNnB4IDhweCAwOyAvKiB1bmUgY2VsbHVsZSBkZSB0YWJsZWF1IDogcmllbiDDoCBnYXVjaGUsIGxhIGNvbG9ubmUgY29tbWVuY2UgYXUgdGV4dGUgKi9cbiAgICAtLXBhZGRpbmdDb2RlOiAxMnB4IDE2cHg7ICAgIC8qIHVuIGJsb2MgZGUgY29kZSDDoCByZWNvcGllciAqL1xuICAgIC0tcGFkZGluZ0xpZ25lTGlzdGU6IDE2cHggMDsgLyogdW5lIGxpZ25lIExBUkdFIGQndW5lIGxpc3RlIOKAlCB1bmUgcXVlc3Rpb24gcXUnb24gZMOpcGxpZSwgdW4gw6l0YXQgdmlkZS4gTGVzIGxpZ25lcyBvcmRpbmFpcmVzIHByZW5uZW50IC0tZ2FwRGVmYXV0IDAgKi9cbiAgICAtLXBhZGRpbmdSZWNhcDogMTBweCAxNHB4OyAgIC8qIGxlIHJ5dGhtZSBpbnTDqXJpZXVyIGR1IHLDqWNhcGl0dWxhdGlmIGRlIGNvbXBvc2l0aW9uIChibG9jcywgYWN0aW9ucywgZW5jYWRyw6lzKSAqL1xuICAgIC0tcGFkZGluZ1BhZ2U6IDMwcHggNDBweDsgICAgLyogbCdlbnZlbG9wcGUgZCd1bmUgcGFnZSA6IC5jb250ZW51LCBldCBsZXMgY29sb25uZXMgZHUgYmFzIGRlIHBhZ2UgKi9cbiAgICAtLXBhZGRpbmdDYXJ0ZUxhcmdlOiAzMHB4IDI1cHg7IC8qIHVuZSBjYXJ0ZSBxdWkgZG9pdCByZXNwaXJlciA6IHVuZSBvZmZyZSwgdW5lIGNhdMOpZ29yaWUgZCdhcGVyw6d1ICovXG4gICAgLS1wYWRkaW5nUmFwcGVsOiAyMHB4IDQwcHggMjVweDsgLyogdW5lIGNhcnRlIGRlIHJhcHBlbCBkdSBjb21wdGUgKC5kaXZSYXBwZWwpLCBldCB0b3V0IGJsb2MgcG9zw6kgw6AgY8O0dMOpIGQnZWxsZXMgc3VyIGxhIG3Dqm1lIHBhZ2UgKC5haWRlLCAuZW5BdHRlbnRlKSA6IGxlcyB0aXRyZXMgZXQgbGVzIHRleHRlcyB0b21iZW50IMOgIGwnYXBsb21iICovXG4gICAgLS1wYWRkaW5nQmFuZGVhdTogNHJlbTsgICAgICAvKiBsZSBiYW5kZWF1IGRlcyBhcGVyw6d1cywgcXVpIHRyYXZlcnNlIGxhIGZlbsOqdHJlIHN1ciBncmFuZCDDqWNyYW4gKi9cbiAgICAtLXJldHJhaXRMaXN0ZUNvdXJ0OiAyMHB4OyAgIC8qIGxlIHJldHJhaXQgZCd1biB1bCBkZSBsaXN0ZSBjb3VydGUg4oCUIHLDqWNhcCwgcHJvZ3Jlc3Npb24sIHVsIGfDqW7DqXJpcXVlLiBMZSByZXRyYWl0IEZSQU5DIGR1IHLDqWRhY3Rpb25uZWwgZXN0IC0tcmV0cmFpdExpc3RlICovXG4gICAgLS1yZXRyYWl0TGlzdGU6IDQwcHg7ICAgICAgICAvKiBsZSByZXRyYWl0IGQndW4gdWwgcsOpZGFjdGlvbm5lbCDigJQgYXJ0aWNsZSwgY2hhcGl0cmUsIHLDqXBvbnNlIGRlIEZBUS4gQ2UgcmV0cmFpdCBmcmFuYyBkaXQgcXVlIGNlcyBsaWduZXMgc29udCB1biBibG9jIMOgIHBhcnQsIGV0IG5vbiBsYSBzdWl0ZSBkdSBwYXJhZ3JhcGhlICovXG5cbiAgICAvKiBCb3V0b25zIDogdW4gYm91dG9uIG5lIGNob2lzaXQgTkkgc29uIHBhZGRpbmcsIE5JIHNhIGJvcmR1cmUsIE5JIHNhIGNvdWxldXJcbiAgICAgICAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLiBJbCBwcmVuZCBjZXMgdmFyaWFibGVzIOKAlCBvdSBwYXMgZGUgYm9yZHVyZSwgb3UgbGFcbiAgICAgICBjb3VsZXVyIGQndW4gcsO0bGUgKHByaW1haXJlLCBkYW5nZXIsIGFwZXLDp3UpIOKAlCBqYW1haXMgdW5lIHZhbGV1ciDDoCBsdWkuICovXG4gICAgLS1wYWRkaW5nQ3RhMTRWOiA4cHg7ICAgICAgICAgICAgICAgICAvKiBsJ2FpciB2ZXJ0aWNhbCBkJ3VuIGJvdXRvbiBjb21wYWN0LCBzZXVsIDogbGEgYmFycmUgZGUgcGlsb3RhZ2UgZW4gZMOpZHVpdCBzYSBoYXV0ZXVyIChfc3R1ZGlvSW50ZWdyZWUuY3NzKSAqL1xuICAgIC0tcGFkZGluZ0N0YTE0OiB2YXIoLS1wYWRkaW5nQ3RhMTRWKSAxNnB4OyAvKiBwYWRkaW5nIGRlIHRvdXQgYm91dG9uIGNvbXBhY3QgKC5jdGExNCwgLmN0YURpc2NyZXQsIHRvZ2dsZXMpICovXG4gICAgLS1ib3JkZXJDdGE6IDFweCBzb2xpZCB2YXIoLS1jTm9pcjQpOyAvKiBMQSBib3JkdXJlIGQndW4gYm91dG9uIDogY2VsbGUtY2kgb3UgYXVjdW5lICovXG4gICAgLS1jQ3RhVGV4dGU6IHZhcigtLWNOb2lyMik7ICAgICAgICAgLyogTEUgdGV4dGUgZCd1biBib3V0b24gbmV1dHJlIDogY2Ugbm9pciBvdSB1bmUgY291bGV1ciBkZSByw7RsZSAqL1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQUNDRU5UIOKAlCBsYSBjb3VsZXVyIGRlIGwnZXNwYWNlIG/DuSBsJ29uIGVzdC4gRMOpY2xhcsOpZSBzdXIgYm9keSwgSkFNQUlTIHN1ciBodG1sXG4gICBvdSA6cm9vdCA6IHVuZSB2YXJpYWJsZSBkw6lyaXbDqWUgKC0tY0FjY2VudF9hLCAtLWNGb3JtRm9jdXNIYWxv4oCmKSBzZSBjYWxjdWxlIHN1clxuICAgbCfDqWzDqW1lbnQgb8O5IGVsbGUgZXN0IGTDqWNsYXLDqWUgOyBzdXIgaHRtbCBlbGxlIGZpZ2VyYWl0IGxlIGJsZXUgcGFyIGTDqWZhdXQgZXQgbGFcbiAgIGNsYXNzZSBkdSBib2R5IG5lIGNoYW5nZXJhaXQgcGx1cyBxdWUgbGVzIHZhbGV1cnMgZGlyZWN0ZXMuXG4gICBMYSBjbGFzc2UgZHUgPGJvZHk+IGNob2lzaXQgbGEgdGVpbnRlIDsgc2FucyBjbGFzc2UgOiBibGV1IGFkbWluaXN0cmF0aW9uLlxuICAgVml0cmluZSA6IGJhc2VWaXRyaW5lUHVibGljLnR3aWcgcG9zZSBib2R5UGFnZVZpdHJpbmUuXG4gICBTdHVkaW8gOiBzdHVkaW8vYmFzZS50d2lnIHBvc2UgbW9kZVRlc3RlciBvdSBtb2RlRGlmZnVzZXIgc2Vsb24gbCdvbmdsZXQgcHJpbmNpcGFsXG4gICAobGEgcGFnZSBzZSByZWNoYXJnZSDDoCBjaGFxdWUgY2hhbmdlbWVudCBkZSBtb2RlLCBwYXMgZGUgVHVyYm8pLlxuICAgVW5lIHLDqGdsZSBxdWkgYSBiZXNvaW4gZCdBY2NlbnQgYXUgbml2ZWF1IDpyb290IGRvaXQgbGlyZSB2YXIoLS1jQWNjZW504oCmKSBzdXJcbiAgIGwnw6lsw6ltZW50IGNvbmNlcm7DqSwgcGFzIGTDqWNsYXJlciB1bmUgdmFyaWFibGUgZMOpcml2w6llIMOgIGxhIHJhY2luZS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIEJsZXUgYWRtaW5pc3RyYXRpb24gOiBjb21wdGUsIHRhcmlmcywgZG9ubsOpZXMsIFN0dWRpbyBob3JzIG1vZGUsIG9uZ2xldCBQcsOpcGFyZXIgKi9cbmJvZHkge1xuICAgIC0tY0FjY2VudDA6ICNmMWY0Zjg7XG4gICAgLS1jQWNjZW50MTogI2UzZWVmODtcbiAgICAtLWNBY2NlbnQyOiAjYWNjZWU4O1xuICAgIC0tY0FjY2VudDM6ICM0MzZiYzE7XG4gICAgLS1jQWNjZW50NDogIzMzNWJiMTtcbiAgICAtLWNBY2NlbnRfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY0FjY2VudDMpLCB2YXIoLS1jQWNjZW50NCkgMTAwJSk7XG4gICAgLS1jQWNjZW50X2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jQWNjZW50MyksIHZhcigtLWNBY2NlbnQzKSAxMDAlKTtcbiAgICAtLWNBY2NlbnR0OiAjRkZGO1xuXG4gICAgLyogRm9jdXMgZGVzIGNoYW1wcyA6IGwnYWNjZW50LCBldCBzb24gaGFsbyDDoCAxNSAlICovXG4gICAgLS1jRm9ybUZvY3VzOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgLS1jRm9ybUZvY3VzSGFsbzogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNBY2NlbnQzKSAxNSUsIHRyYW5zcGFyZW50KTtcbn1cblxuLyogVml0cmluZSwgcGFnZXMgcHVibGlxdWVzIDogdmVydCAqL1xuLmJvZHlQYWdlVml0cmluZSB7XG4gICAgLS1jQWNjZW50MDogI2YwZjlmNDtcbiAgICAtLWNBY2NlbnQxOiAjZGNmMmU1O1xuICAgIC0tY0FjY2VudDI6ICM5ZmQ5Yjg7XG4gICAgLS1jQWNjZW50MzogIzA4OTE0YztcbiAgICAtLWNBY2NlbnQ0OiAjMDc1NTI0O1xufVxuXG4vKiBTdHVkaW8sIG9uZ2xldCBUZXN0ZXIgOiB2aW9sZXQgKi9cbi5tb2RlVGVzdGVyIHtcbiAgICAtLWNBY2NlbnQwOiAjZjdmMWY5O1xuICAgIC0tY0FjY2VudDE6ICNlY2RjZjM7XG4gICAgLS1jQWNjZW50MjogI2QyYThlMDtcbiAgICAtLWNBY2NlbnQzOiAjOWI1OWI2O1xuICAgIC0tY0FjY2VudDQ6ICM3ODNiOTI7XG59XG5cbi8qIFN0dWRpbywgb25nbGV0IERpZmZ1c2VyIDogYmxldSBkaWZmdXNpb24gKi9cbi5tb2RlRGlmZnVzZXIge1xuICAgIC0tY0FjY2VudDA6ICNmMGY2ZmI7XG4gICAgLS1jQWNjZW50MTogI2UwZWVmODtcbiAgICAtLWNBY2NlbnQyOiAjYTZjZGVhO1xuICAgIC0tY0FjY2VudDM6ICMzMDhlZDE7XG4gICAgLS1jQWNjZW50NDogIzI1NzJhOTtcbn1cblxuLyogQmxldSBhZG1pbmlzdHJhdGlvbiBQT1PDiSBTVVIgVU4gw4lMw4lNRU5ULCBkYW5zIHVuIGF1dHJlIGVzcGFjZSAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0XG4gICAyMDI2LTA5LTA2KSA6IHVuIGdlc3RlIGQnYWRtaW5pc3RyYXRpb24gYXUgbWlsaWV1IGQndW5lIHBhZ2UgcHVibGlxdWUg4oCUIGNyw6llciB1biDDqXbDqW5lbWVudFxuICAgZGVwdWlzIGxhIHBhZ2UgZCd1bmUgc2PDqG5lIG91IGxhIHBhZ2UgQ29uZmlndXJlciBkJ3VuIHNjw6luYXJpbyDigJQgc2UgZGl0IGVuIGJsZXUsIHBhcyBkYW5zXG4gICBsYSBjb3VsZXVyIGRlIGxhIHBhZ2UuIE3Dqm1lcyBjaW5xIHZhbGV1cnMgcXVlIGxlIGJvZHkgc2FucyBjbGFzc2UgOiBjJ2VzdCBsZSBtw6ptZSBlc3BhY2UsXG4gICByYW1lbsOpIHN1ciBsJ8OpbMOpbWVudCBxdWkgbGUgcG9ydGUgKGxlIGJvdXRvbiBsdWktbcOqbWUsIHBhcyBzYSBiYXJyZSA6IGxlcyB2b2lzaW5zIGdhcmRlbnRcbiAgIGxhIGNvdWxldXIgZGUgbGEgcGFnZSkuIFVuZSByw6hnbGUgcXVpIGxpdCB2YXIoLS1jQWNjZW504oCmKSBzdXIgY2V0IMOpbMOpbWVudCB2b2l0IGxlIGJsZXUuICovXG4uYWNjZW50QWRtaW5pc3RyYXRpb24ge1xuICAgIC0tY0FjY2VudDA6ICNmMWY0Zjg7XG4gICAgLS1jQWNjZW50MTogI2UzZWVmODtcbiAgICAtLWNBY2NlbnQyOiAjYWNjZWU4O1xuICAgIC0tY0FjY2VudDM6ICM0MzZiYzE7XG4gICAgLS1jQWNjZW50NDogIzMzNWJiMTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRJVFJFUyBFVCBUWVBPR1JBUEhJRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuaDEsIGgyLCBoMyB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbmg0IHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuaDUsIGg2IHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxucCwgbGkge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgICBmb250OiB2YXIoLS1mSDEpO1xufVxuXG5idXR0b24ge1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG59XG5cbmgxIHtcbiAgICBmb250OiB2YXIoLS1mSDEpO1xuICAgIG1hcmdpbjogMTBweCAxNXB4IDVweCAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbmgyIHtcbiAgICBmb250OiB2YXIoLS1mSDIpO1xuICAgIG1hcmdpbjogMTVweCAxMHB4IDVweCAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbmgzIHtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAyNXB4IDAgMTVweDtcbn1cblxuaDQsIGg1IHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xufVxuXG5oNCwgaDUsIGg2IHtcbiAgICBtYXJnaW46IDI1cHggMCA3cHg7XG59XG5cbi8qIDxpPiBlc3QgdXRpbGlzw6llIGNvbW1lIGJhbGlzZSBkZSBzdWZmaXhlICgjMiwgIzPigKYpIHN1ciBsZXMgbm9tcyBkJ8OpbMOpbWVudHMuXG4gICBMYSBiYWxpc2UgPGVtPiByZW1wbGFjZSA8aT4gcG91ciBsJ2l0YWxpcXVlIHPDqW1hbnRpcXVlLiAqL1xuaSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtc2l6ZTogNzUlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mZk1vbm8pO1xufSIsImJ1dHRvbiB7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG5idXR0b24uY3RhQW5udWxlciB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IHRyYW5zcGFyZW50O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLyogYnV0dG9uLmxpZW5Cb3V0b24gOiB1biA8YnV0dG9uPiBxdWkgYSBsZSB2aXN1ZWwgZCd1biBsaWVuICh0ZW1wbGF0ZXMvQ0xBVURFLm1kLCDCqyBCb3V0b25cbiAgIG91IGxpZW4gPyDCuykg4oCUIGlsIHByZW5kIGV4YWN0ZW1lbnQgbGUgc3R5bGUgZGUgYSAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTQpICovXG5hLFxuYnV0dG9uLmxpZW5Cb3V0b24ge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBwYWRkaW5nOiB2YXIoLS1nYXBSZWR1aXQpIDA7XG59XG5cbmJ1dHRvbi5saWVuQm91dG9uIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbn1cblxuYTpmb2N1cyxcbmJ1dHRvbi5saWVuQm91dG9uOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG5hOmZvY3VzLXZpc2libGUsXG5idXR0b24ubGllbkJvdXRvbjpmb2N1cy12aXNpYmxlIHtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tY0Zvcm1Gb2N1cyk7XG59XG5cblxuYnV0dG9uLmN0YUFubnVsZXIsXG5hLmN0YUFubnVsZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDIwcHggMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG5idXR0b24uYnRuLCBhLmJ0biB7XG4gICAgbWluLXdpZHRoOiAxODBweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm9yZGVyOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50dCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ3RhKTtcbiAgICBtYXJnaW46IDEwcHggMDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTsgLyogYWxpZ27DqSAxMCAtPiAxMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG5hLmJ0bjpob3ZlciwgYnV0dG9uLmJ0bjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnR0KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG5cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG5idXR0b24uYnRuMiwgYS5idG4yIHtcbiAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3JkZXI6IDA7XG4gICAgZm9udDogdmFyKC0tZkN0YTIwKTtcbiAgICBwYWRkaW5nOiAyMHB4IDQwcHg7XG4gICAgbWFyZ2luOiAyMHB4IGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xuICAgIGNvbG9yOiB2YXIoLS1jVGV4dGUxKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJvdW5kO1xuICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xufVxuXG5idXR0b24jcmVkaXJlY3Rpb24uYnRuMiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbmJ1dHRvbiNyZWRpcmVjdGlvbi5idG4yOmhvdmVyLFxuYS5idG4yOmhvdmVyLCBidXR0b24uYnRuMjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnR0KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG59XG4qL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ1RBIENPTVBBQ1Qg4oCUIHNvY2xlIC5jdGExNFxuXG4gICBMQSBzaWxob3VldHRlIGRlcyBib3V0b25zIGQnYWN0aW9uIGNvbXBhY3RzIChiYXJyZXMgZCdhY3Rpb24sIGNhcnRlcykgOlxuICAgZm9ybWUsIHBvbGljZSwgZGltZW5zaW9ucyBkw6lmaW5pZXMgaWNpIGV0IG51bGxlIHBhcnQgYWlsbGV1cnMuIE1vZMOobGUgOlxuICAgbGUgYm91dG9uIGRlIGxhIGJhcnJlIGRlIGNvbnRyw7RsZSBhcGVyw6d1IChkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkuXG4gICBTZSBwb3NlIMOgIGPDtHTDqSBkdSByw7RsZSBxdWkgYXBwb3J0ZSBzYSBjb3VsZXVyIDogY2xhc3M9XCJjdGExNCBjdGFQcmV2aWV3Q29udHJvbGVcIi5cbiAgIDE0ID0gbGEgdGFpbGxlIGRlIHBvbGljZSAoLS1mTWVudTE0KS4gU2lsaG91ZXR0ZSBmb3JtdWxhaXJlIMOgIHZlbmlyIDogLmN0YTE4LlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmN0YTE0IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIHVuIDxhPiBob3JzIGJhcnJlIGZsZXggcmVzdGUgdW4gYm91dG9uIChwYWRkaW5nIHZlcnRpY2FsIHLDqWVsKSAqL1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdDdGExNCk7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgLyogVW4gYm91dG9uIG4nZXN0IGphbWFpcyBzb3VsaWduw6ksIHF1ZWxsZSBxdWUgc29pdCBzYSBiYWxpc2UgOiBsYSBWaXRyaW5lIHNvdWxpZ25lIHRvdXNcbiAgICAgICBzZXMgbGllbnMgKHZpdHJpbmUuY3NzLCBkw6ljaXNpb24gUE8gMjAyNi0wOC0yNSksIHVuIDxhIGNsYXNzPVwiY3RhMTRcIj4geSDDqXRhaXQgc291bGlnbsOpXG4gICAgICAgY29tbWUgdW4gbGllbiBkZSBwYXJhZ3JhcGhlIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0wNikuICovXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycywgY29sb3IgMC4ycywgYm9yZGVyLWNvbG9yIDAuMnM7XG59XG5cbi8qIExhIHNpbGhvdWV0dGUgY29tcGFjdGUgR0FHTkUgc3VyIHVuIHLDtGxlIHF1aSBwb3J0ZSBhdXNzaSB1bmUgc2lsaG91ZXR0ZSA6IGxhIHBhZ2UgZGVzXG4gICB0YXJpZnMgZGUgbGEgVml0cmluZSByZWTDqWZpbml0IC5jdGFPciBlbiBncmFuZCBib3V0b24gZGUgY2FydGUgKG9mZnJlcy5jc3MgOiBkaXNwbGF5IGJsb2NrLFxuICAgZ3JhbmQgcGFkZGluZywgcG9saWNlIDE2KSwgY2UgcXVpIMOpY3Jhc2FpdCDCqyBjdGExNCBjdGFPciDCuyDigJQgbGUgcGV0aXQgYm91dG9uIGRvcsOpIHF1aSBtw6huZVxuICAgw6AgbCdvZmZyZSBkdSBkZXNzdXMgKHBhZ2UgwqsgTW9uIHN0dWRpbyDCuywgc2PDqG5lcyByw6lzZXJ2w6llcyDDoCB1bmUgb2ZmcmUgOiBkw6ljaXNpb24gY2hlZiBkZVxuICAgcHJvamV0IDIwMjYtMTAtMDcpLiBNw6ptZSBjb21wb3NpdGlvbiBxdWUgwqsgY3RhMTQgY3RhUHJpbWFpcmUgwrssIG3Dqm1lIHRhaWxsZS4gKi9cbi5jdGExNC5jdGFPciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ3RhMTQpO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgLyogTEUgSkFVTkUgUMOCTEUgRFUgUEVUSVQgQk9VVE9OIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0xMC0wOCkgOiBsZSBqYXVuZSBwbGVpblxuICAgICAgIGQnQW1hem9uICgtLWNPcjMpIGVzdCBmYWl0IHBvdXIgbGVzIGdyb3MgYm91dG9ucyBldCBsJ29uZ2xldCDCqyBUYXJpZnMgwrsgOyBzdXIgdW4gcGV0aXRcbiAgICAgICBib3V0b24gcG9zw6kgZGFucyB1bmUgcGFnZSBhdXggdG9ucyBuZXV0cmVzIGV0IHBhc3RlbCwgaWwgcHJlbmFpdCBsZSBkZXNzdXMgc3VyIHRvdXQgbGVcbiAgICAgICByZXN0ZS4gRm9uZCBww6JsZSAoLS1jT3IxKSwgZXQgdW5lIGJvcmR1cmUgamF1bmUgcG91ciBxdSdvbiBsZSB2b2llIGNvbW1lIHVuIGJvdXRvbiBldFxuICAgICAgIGNvbW1lIGR1IGphdW5lIDogYydlc3QgZWxsZSwgcGx1cyBxdWUgbGUgZm9uZCwgcXVpIGxlIGTDqXRhY2hlIGRlIGxhIHBhZ2UuIE3Dqm1lIMOpcGFpc3NldXJcbiAgICAgICBxdWUgbGVzIGF1dHJlcyBib3V0b25zICgtLWJvcmRlckN0YSksIHNldWxlIGxhIGNvdWxldXIgY2hhbmdlLiAqL1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPcjEpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ3RhKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNPcjMpO1xufVxuXG4uY3RhMTQuY3RhT3I6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPcjIpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY09yNCk7XG59XG5cbi8qIExFIFBFVElUIEJPVVRPTiBFTiBKQVVORSBQTEVJTiAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMTAtMTQpIDogbGEgbcOqbWUgc2lsaG91ZXR0ZVxuICAgY29tcGFjdGUsIGxlcyBjb3VsZXVycyBkdSBncm9zIGJvdXRvbiBkZXMgdGFyaWZzICguY3RhT3IpLiBQb3VyIGxlIGJvdXRvbiBxdWkgZXN0IFNFVUwgZXRcbiAgIGRvaXQgc2Ugdm9pciA6IMKrIE1vbiBzdHVkaW8gwrssIGxhIGxpbWl0ZSBkJ8OpdsOpbmVtZW50cyBhdHRlaW50ZSBkdSBTdHVkaW8uIEzDoCBvw7kgaWwgcmV2aWVudFxuICAgc291dmVudCAodmlnbmV0dGVzLCBsaXN0ZXMgZGUgc2PDqW5hcmlvcywgcGFnZSBkJ3VuZSBzY8OobmUpLCBsZSBqYXVuZSBww6JsZSByZXN0ZS4gKi9cbi5jdGExNC5jdGFPci5jdGFPclBsZWluIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3IzKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNPcjMpO1xuICAgIGNvbG9yOiB2YXIoLS1jT3J0KTtcbn1cblxuLmN0YTE0LmN0YU9yLmN0YU9yUGxlaW46aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPcjQpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY09yNCk7XG59XG5cbi5jdGExNDpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuLyogUsO0bGUgYWN0aW9uIHByaW5jaXBhbGUgOiBMRSBib3V0b24gcXVpIGZhaXQgbGEgY2hvc2UgcG91ciBsYXF1ZWxsZSBsYSBwYWdlIGV4aXN0ZVxuICAgKGNyw6llciB1biDDqXbDqW5lbWVudOKApiksIGVuIEFjY2VudCDigJQgbGEgY291bGV1ciBkZSBsJ2VzcGFjZSwgb3UgY2VsbGUgcXUndW5cbiAgIC5hY2NlbnRBZG1pbmlzdHJhdGlvbiBwb3NlIHN1ciBsdWkuIFVuIHNldWwgcsO0bGUsIGTDqWZpbmkgaWNpIGV0IG51bGxlIHBhcnQgYWlsbGV1cnNcbiAgIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0wNikgOiBwYXMgZGUgQ1NTIHBhciBib3V0b24uICovXG4uY3RhUHJpbWFpcmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQzKTtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudHQpO1xufVxuXG4uY3RhUHJpbWFpcmU6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQ0KTtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudHQpO1xufVxuXG4vKiBSw7RsZSBvZmZyZSA6IExFIGJvdXRvbiBxdWkgbcOobmUgYXV4IG9mZnJlcyBldCBhdXggdGFyaWZzIOKAlCBPciwgbGEgY291bGV1ciBkdSBwcml4IGV0IGRlXG4gICBsJ2luc2NyaXB0aW9uIChjb3VsZXVycy5tZCkuIEwnZW5jYWRyw6kgwqsgbGltaXRlIGQnw6l2w6luZW1lbnRzIMK7IGR1IFN0dWRpby4gKi9cbi5jdGFPciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY09yMyk7XG4gICAgY29sb3I6IHZhcigtLWNPcnQpO1xufVxuXG4uY3RhT3I6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPcjQpO1xuICAgIGNvbG9yOiB2YXIoLS1jT3J0KTtcbn1cblxuLyogUsO0bGUgYXBlcsOndSA6IExFIGJvdXRvbiBxdWkgbGFuY2UgdW4gYXBlcsOndSDigJQgdmlvbGV0IGFwZXLDp3UsIHBhcnRvdXRcbiAgIChjYXRhbG9ndWUsIHBhZ2UgTW9kaWZpZXIsIGZpY2hlcyBkJ2FuaW1hdGlvbikuIFVuIGFwZXLDp3UgPSB2aW9sZXQsXG4gICBkw6ljaXNpb24gUE8gMjAyNi0wNy0xOC4gKi9cbi5jdGFQcmV2aWV3IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xufVxuXG4uY3RhUHJldmlldzpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudF9haCk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCQURHRSBNT0RFIFRFU1QgLSBSw6l1dGlsaXNhYmxlIHBhcnRvdXRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5iYWRnZU1vZGVUZXN0IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0JhZGdlKTtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQzKTtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIG1hcmdpbjogMTBweCAwO1xufSIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCQVJSRSBERSBQSUxPVEFHRSAtIEVuIGJhcyBkZSBsJ8OpY3JhblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI2JhcnJlUGlsb3RhZ2Uge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgLyogVU4gU0VVTCDDqWNhcnQgZW50cmUgZGV1eCB2b2lzaW5zIHF1aSBuZSBzb250IHBhcyBkdSBtw6ptZSBncm91cGUgOiBsZXMgMTZweCBkdSB0cmFpdFxuICAgICAgIGRlcyBncm91cGVzICguZGl2QWN0aW9uU2NlbmUsIF9zY2VuZUJvdXRvbnMuY3NzKS4gRW50cmUgZGV1eCBibG9jcyBkZSBsYSBiYXJyZSwgbGVcbiAgICAgICBtw6ptZSDigJQgcGx1cyBkZSAyMHB4IMOgIHBhcnQgKGTDqWNpc2lvbiBkdSBjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0xNikuICovXG4gICAgZ2FwOiAxNnB4O1xuICAgIC8qIExBIE1BUkdFIERFIExBIEJBUlJFIDogbGUgbcOqbWUgYWlyIHN1ciBzZXMgcXVhdHJlIGPDtHTDqXMgKGTDqWNpc2lvbiBkdSBjaGVmIGRlIHByb2pldCxcbiAgICAgICAyMDI2LTA5LTE2IOKAlCBhdmFudCwgMTZweCDDoCBnYXVjaGUgZXQgw6AgZHJvaXRlIGNvbnRyZSA4IGVuIGhhdXQgZXQgZW4gYmFzKS4gVW4gYm91dG9uXG4gICAgICAgZXN0IHRvdWpvdXJzIMOgIDhweCBkdSBib3JkLCBvw7kgcXVlIGNlIHNvaXQgOyBhdWN1biBlbmZhbnQgbmUgcG9zZSBzYSBwcm9wcmUgbWFyZ2UuXG4gICAgICAgVW5lIGJvw650ZSBkZXNzaW7DqWUgREFOUyBsYSBiYXJyZSAoY2FkcmUgwqsgUGFzc2VyIMOgIDogWCDCuywgYm/DrnRlIGRlIGZpbiwgem9uZSBkZSB0ZXN0KVxuICAgICAgIG5lIGTDqXBsYWNlIGphbWFpcyB1biBib3V0b24gOiBlbGxlIHByZW5kIHNvbiBhaXIgc3VyIGNlbHVpIGRlIGxhIGJhcnJlLCBhaXIgbsOpZ2F0aWZcbiAgICAgICBkdSBtw6ptZSBtb250YW50IOKAlCBsZSBib3V0b24gcmVzdGUgw6AgOHB4IGR1IGJvcmQsIGxhIGJvw650ZSBzZSBkZXNzaW5lIDRweCBlbiBkZWRhbnMuICovXG4gICAgcGFkZGluZzogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICAvKiBMYSBoYXV0ZXVyIGRlIGxhIGJhcnJlIG5lIGJvdWdlIEpBTUFJUyAoZMOpY2lzaW9uIGR1IGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTE2KSA6IG5pXG4gICAgICAgcXVhbmQgwqsgUGFzc2VyIMOgIDogWCDCuyBhcHBhcmHDrnQsIG5pIGVudHJlIGRldXggc2PDqG5lcyBxdWFuZCBlbGxlIGVzdCB2aWRlLCBuaSBzdXIgdW5lXG4gICAgICAgc2PDqG5lIHNhbnMgYm91dG9uLiBMYSBiYXJyZSBsYSBkw6ljbGFyZSBlbGxlLW3Dqm1lIDogbGEgaGF1dGV1ciBkJ3VuIGRlIHNlcyBib3V0b25zXG4gICAgICAgKHVuZSBsaWduZSBkZSBsZXVyIHBvbGljZSDigJQgMWxoLCBkJ2/DuSBsYSBwb2xpY2UgcG9zw6llIGljaSDigJQsIGwnYWlyIHZlcnRpY2FsIGR1IGJvdXRvblxuICAgICAgIC0tcGFkZGluZ0N0YTE0Viwgc2EgYm9yZHVyZSAtLWJvcmRlckN0YSBkZSAxcHgpIHBsdXMgc29uIHByb3ByZSBhaXIuIE3Dqm1lcyB2YXJpYWJsZXNcbiAgICAgICBxdWUgbGVzIGJvdXRvbnMsIGRvbmMgZWxsZSBzdWl0IGxlIGNyYW4gY29tcGFjdCA7IHNldWwgbGUgY3JhbiDCqyBkZXV4IGxpZ25lcyDCu1xuICAgICAgICguYmFycmVEZXV4TGlnbmVzKSBsYSBmYWl0IGdyYW5kaXIuIEF1Y3VuIGVuZmFudCBmYW50w7RtZSBkYW5zIGxhIHJhbmfDqWUgOiBsYSBtYXJnZVxuICAgICAgIGRyb2l0ZSByZXN0ZSBjZWxsZSBkZSBnYXVjaGUsIDE2cHguIFRvdXQgdGV4dGUgZGUgbGEgYmFycmUgcG9zZSBzYSBwcm9wcmUgcG9saWNlLiAqL1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMWxoICsgMiAqIHZhcigtLXBhZGRpbmdDdGExNFYpICsgMnB4ICsgMiAqIHZhcigtLWdhcERlZmF1dCkpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICAvKiBBdWN1bmUgb21icmUgc3VyIGxhIHNjw6huZSA6IGxhIGJhcnJlIGVzdCB1biBvdXRpbCwgbGEgc2PDqG5lIHBhc3NlIGF2YW50IChkw6ljaXNpb24gZHVcbiAgICAgICBjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0xNikuICovXG4gICAgei1pbmRleDogOTk5OTAwO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ3JhbnMgZCdhZGFwdGF0aW9uIMOgIGxhIGxhcmdldXIgKEFkYXB0YXRpb25CYXJyZS50cykg4oCUIGN1bXVsw6lzLCBkYW5zIGNldCBvcmRyZSA6XG4gICAuYmFycmVDb21wYWN0ZSwgcHVpcyAuYmFycmVNZW51Wm9vbSwgcHVpcyAuYmFycmVEZXV4TGlnbmVzIChjZWx1aS1jaSB2aXQgZGFuc1xuICAgX3NjZW5lQm91dG9ucy5jc3MpLiBMZSBzY3JpcHQgbWVzdXJlIGV0IHBvc2UgbGVzIGNsYXNzZXMgOyBsZSBDU1MgbmUgZmFpdCBxdWUgZGlyZSDDoFxuICAgcXVvaSByZXNzZW1ibGUgY2hhcXVlIGNyYW4uXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBDb21wYWN0IDogbGEgYmFycmUgcmVkw6lmaW5pdCwgcG91ciBzb24gc2V1bCBww6lyaW3DqHRyZSwgbGVzIGRldXggdmFyaWFibGVzIHF1ZSBzdWl2ZW50XG4gICB0b3VzIHNlcyBib3V0b25zICguY3RhMTQsIHRvZ2dsZXMsIHLDqWdsYWdlcykg4oCUIHVuIGJvdXRvbiBuZSBjaG9pc2l0IHRvdWpvdXJzIG5pIHNhXG4gICBwb2xpY2Ugbmkgc2VzIG1hcmdlcywgYydlc3QgbGEgYmFycmUgcXVpIGxlcyBmaXhlLiAqL1xuI2JhcnJlUGlsb3RhZ2UuYmFycmVDb21wYWN0ZSB7XG4gICAgLS1wYWRkaW5nQ3RhMTRWOiA2cHg7XG4gICAgLS1wYWRkaW5nQ3RhMTQ6IHZhcigtLXBhZGRpbmdDdGExNFYpIDEycHg7XG4gICAgLS1mTWVudTE0OiB2YXIoLS1mTWVudTEzKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFpvbmUgQmFycmUgZGUgcHJvZ3Jlc3Npb24gKGdhdWNoZSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIFZpZGUgYXUgcmVwb3MgOiBsJ2ljw7RuZSBkZSBsYSBzY8OobmUgZW4gY291cnMgYSDDqXTDqSByZXRpcsOpZSAoMjAyNi0wOS0wMywgbGEgZnJpc2UgcmVzdGVcbiAgIGNhY2jDqWUg4oCUIF9wcm9ncmVzc0Jhci5jc3MpLiBMZSBjYWRyZSBuJ2FwcGFyYcOudCBxdSdhdmVjIMKrIFBhc3NlciDDoCA6IFggwrsgZGVkYW5zIDsgbGFcbiAgIGJhcnJlIGRlIGZpbiwgZWxsZSwgZmxvdHRlIMOgIHNhIGRyb2l0ZSAoX2JhcnJlRmluLmNzcykuICovXG4jem9uZVByb2dyZXNzQmFyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIyKTtcbiAgICAvKiBBdS1kZXNzdXMgZHUgdm9pbGUgZGUgbGEgYmFycmUgKF9iYXJyZUZpbi5jc3MsIGxldsOpIHBhciBsYSBiYXJyZSBkZSBmaW4gb3UgcGFyIGxhXG4gICAgICAgYm/DrnRlIGRlIHBhc3NhZ2UgZGUgbCdhcGVyw6d1KSA6IGxhIHpvbmUgcmVzdGUgdml2YW50ZSBldCDDqWNsYWlyw6llIHF1YW5kIGxlIHJlc3RlXG4gICAgICAgZGUgbGEgYmFycmUgZXN0IHZvaWzDqSA7IHNvbiBmb25kIGNoYW5nZSBhdmVjIGxhIHByaXNlIGRlIHBvdXZvaXIuICovXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzIGVhc2U7XG59XG5cbi8qIExlIGNhZHJlIHByZW5kIHNvbiBhaXIgU1VSIGxhIG1hcmdlIGRlIGxhIGJhcnJlLCBwYXMgZW4gcGx1cyAocsOoZ2xlIGRlIGxhIGJhcnJlLFxuICAgI2JhcnJlUGlsb3RhZ2UgY2ktZGVzc3VzKSA6IGxlIGJvdXRvbiBuZSBib3VnZSBwYXMsIGxhIGJhcnJlIG5lIGdyYW5kaXQgcGFzIGQndW4gcGl4ZWwsXG4gICBsZSBjYWRyZSBzZSBkZXNzaW5lIMOgIDRweCBkdSBib3JkIOKAlCBjb21tZSBsYSBib8OudGUgZGUgZmluIChfYmFycmVGaW4uY3NzKS4gKi9cbiN6b25lUHJvZ3Jlc3NCYXI6aGFzKCNwcm9ncmVzc0JhclN1aXZhbnQudmlzaWJsZSkge1xuICAgIHBhZGRpbmc6IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tZ2FwUmVkdWl0KSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggdmFyKC0tY09tYnJlKTtcbn1cblxuLyogVmlkZSDigJQgbmkgwqsgUGFzc2VyIMOgIMK7LCBuaSBiYXJyZSBkZSBmaW4gZMOpcGxvecOpZSDigJQgZWxsZSBzb3J0IGRlIGxhIHJhbmfDqWUgOiByZXN0w6llXG4gICBkZWRhbnMsIG3Dqm1lIHNhbnMgbGFyZ2V1ciwgZWxsZSBwcmVuYWl0IGwnw6ljYXJ0IGRlIGxhIGJhcnJlIGV0IGNyZXVzYWl0IHVuIHRyb3UgZW50cmVcbiAgIGxhIG1hcmdlIGV0IGxlIHByZW1pZXIgYm91dG9uLiAqL1xuI3pvbmVQcm9ncmVzc0Jhcjpub3QoOmhhcygjcHJvZ3Jlc3NCYXJTdWl2YW50LnZpc2libGUpKTpub3QoOmhhcygjYmFycmVGaW5TY2VuZS52aXNpYmxlKSkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIFNldWxlIGxhIGJvw650ZSBkZSBmaW4sIHNhbnMgwqsgUGFzc2VyIMOgIMK7IDogbGEgem9uZSBuJ2EgcmllbiDDoCBtb250cmVyIGVuIGZsdXgsIG1haXMgZWxsZVxuICAgcG9ydGUgbGEgYm/DrnRlIChob3JzIGZsdXgsIF9iYXJyZUZpbi5jc3MpLiBFbGxlIHNvcnQgZGUgbGEgcmFuZ8OpZSwgY29tbWUgdmlkZSDigJQgc2lub24sXG4gICBzYW5zIGxhcmdldXIsIGVsbGUgcHJlbmRyYWl0IGwnw6ljYXJ0IGRlIGxhIGJhcnJlIGV0IGTDqWNhbGVyYWl0IGRlIDE2cHggbGVzIGJvdXRvbnMgZHVcbiAgIGRlc3NvdXMgYXUgbW9tZW50IG/DuSBsYSBib8OudGUgcGFyYcOudC4gU2EgcG9zaXRpb24gc3RhdGlxdWUgcmVzdGUgbGUgZMOpYnV0IGRlIGxhIHJhbmfDqWUsXG4gICBjZW50csOpZSBjb21tZSB1biBlbmZhbnQgZGUgbGEgcmFuZ8OpZSA6IGxhIGJvw650ZSBzZSBwb3NlIGzDoCBvw7kgc29udCBsZXMgYm91dG9ucy4gKi9cbiN6b25lUHJvZ3Jlc3NCYXI6bm90KDpoYXMoI3Byb2dyZXNzQmFyU3VpdmFudC52aXNpYmxlKSk6aGFzKCNiYXJyZUZpblNjZW5lLnZpc2libGUpIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNaW5pLXdpZGdldHMgYXUtZGVzc3VzIGRlIGxhIGJhcnJlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4jbWluaVdpZGdldHMge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDEwMCU7XG4gICAgbGVmdDogdmFyKC0tZ2FwRGVmYXV0KTsgLyogYXUgYm9yZCBkZSBsYSBtYXJnZSBkZSBsYSBiYXJyZSAqL1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgw45sb3QgZGUgdGVzdCAoSWxvdFRlc3QudHMpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBNw6ptZSBtYXRpw6hyZSBldCBtw6ptZSBlbnRyw6llIHF1ZSBsYSBidWxsZSBkZXMgb25nbGV0cyBkZSBsJ2FwZXLDp3UgKCNwcmV2aWV3QnVsbGUsIF9wcmV2aWV3LmNzcykgOlxuICAgZW4gaGF1dCBhdSBjZW50cmUsIHZlcnJlIGTDqXBvbGksIGlsIHNvcnQgZHUgaGF1dCBkZSBsJ8OpY3JhbiBlbiBzJ8OpdGlyYW50IGTDqHMgbCdvdXZlcnR1cmUgZGVcbiAgIGwnw6ljcmFuIOKAlCBlbiB0ZXN0LCBwYXMgZGUgZMOpbGFpIChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0yMikuIFBsYW4gZHUgY2hyb21lIMKrIMOubG90IGRlXG4gICB0ZXN0IMK7ICjDqWNoZWxsZSBkZSBzYWxsZUVjcmFuLmNzcykgOiB1bmUgYm/DrnRlIGRlIGRpYWxvZ3VlIG91dmVydGUgbGUgcmVjb3V2cmUuICovXG4jaWxvdFRlc3Qge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDEycHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDk5OTkwMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDMycHgpO1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdDb3Jwcyk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jT3ZlcmxheSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlUG9ydGVlMik7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogcHJldmlld0J1bGxlQXBwYXJpdGlvbiAwLjZzIGN1YmljLWJlemllcigwLjM0LCAxLjU2LCAwLjY0LCAxKTtcbn1cblxuQHN1cHBvcnRzIChiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KSkgb3IgKC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCkpIHtcbiAgICAjaWxvdFRlc3Qge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmNWZXJyZSk7XG4gICAgICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpIHNhdHVyYXRlKDEuNCk7XG4gICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KSBzYXR1cmF0ZSgxLjQpO1xuICAgIH1cbn1cblxuLyogRmVybcOpIHBhciBzYSBjcm9peCAoSWxvdFRlc3QudHMpIDogYGRpc3BsYXk6IGZsZXhgIGNpLWRlc3N1cyBsJ2VtcG9ydGVyYWl0IHN1ciBsJ2F0dHJpYnV0LiAqL1xuI2lsb3RUZXN0W2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIExhIGNyb2l4IChzaWxob3VldHRlIDogY29tcG9zYW50cy9ib3V0b25GZXJtZXR1cmUuY3NzLCBpbXBvcnTDqWUgdmlhIF9wcmV2aWV3LmNzcykgZmVybWUgbGFcbiAgIHJhbmfDqWUsIMOgIGRyb2l0ZSBkZXMgZGV1eCBib3V0b25zLCBkYW5zIGxlIGZsdXgg4oCUIGNvbW1lIGNlbGxlIGRlIGxhIGJhcnJlIGRlIGwnYXBlcsOndS4gKi9cbiNpbG90VGVzdCAuY3RhUHJldmlld0NvbnRyb2xlLFxuI2lsb3RUZXN0IC5tb2RhbGVDbG9zZSB7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDb250ZW51IGRlcyBib8OudGVzIMKrIFRlc3QgZW4gY291cnMgwrsgZXQgwqsgUHJvZ3Jlc3Npb24gwrsgKElsb3RUZXN0LnRzKSDigJQgbGEgY2FydGUsIGxlXG4gICB0aXRyZSwgbGUgY29ycHMgcXVpIGTDqWZpbGUgZXQgbGEgY3JvaXggc29udCBjZXV4IGR1IGNhZHJlIGNvbW11biAoX2JvaXRlRGlhbG9ndWUuY3NzKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmJvaXRlVGVzdEludHJvLFxuLmJvaXRlVGVzdFNjZW5lIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5ib2l0ZVRlc3RTY2VuZSB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tZ2FwTW95ZW4pO1xufVxuXG4vKiBVbiBib3V0b24gZXQsIGRlc3NvdXMsIGxhIHBocmFzZSBxdWkgZGl0IGNlIHF1J2lsIGZhaXQuICovXG4uYm9pdGVUZXN0QWN0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLWdhcExhcmdlKTtcbn1cblxuLmJvaXRlVGVzdEFpZGUge1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiBMJ2FycsOqdCBkdSB0ZXN0LCBkYW5zIGxlIHBpZWQgZGUgbGEgYm/DrnRlIOKAlCBob3JzIGR1IGNvcnBzIHF1aSBkw6lmaWxlIDogbGEgYnVsbGUgZGVcbiAgIGNvbmZpcm1hdGlvbiBzJ2FuY3JlIHN1ciBsZSBib3V0b24gcGFyIHNlcyBjb29yZG9ubsOpZXMsIGlsIG5lIGRvaXQgcGFzIGJvdWdlci4gTGUgdHJhaXRcbiAgIGxlIHPDqXBhcmUgZGVzIGJvdXRvbnMgZGUgdGVzdC4gKi9cbi5ib2l0ZVRlc3RQaWVkIHtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xuICAgIHBhZGRpbmctdG9wOiB2YXIoLS1nYXBMYXJnZSk7XG59XG5cbi5ib2l0ZVRlc3RQaWVkIC5ib2l0ZVRlc3RBY3Rpb24ge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi8qIMKrIMOKdGVzLXZvdXMgc8O7ciA/IMK7IDogbm9pciwgY29tbWUgbGEgY29uZmlybWF0aW9uIGQndW4gcGFzc2FnZSAoLmN0YUVjcmFuQ29uZmlybWF0aW9uLCBfc2NlbmVCb3V0b25zLmNzcykuICovXG4uYm9pdGVUZXN0Q29uZmlybWVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jTm9pcik7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDdGEpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY05vaXIpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xufVxuXG4vKiDDiWNyYW4gZGUgZmluIChsZSBuYXZpZ2F0ZXVyIGEgcmVmdXPDqSB3aW5kb3cuY2xvc2UpIDogbWVzc2FnZSBjZW50csOpLCBsaWVuIGRlIHJlbGFuY2UuIE3Dqm1lXG4gICDDqWNyYW4gcG91ciB1bmUgZmVuw6p0cmUgZmVybcOpZSBwYXJjZSBxdSd1bmUgYXV0cmUgZGlyaWdlIChEaXJlY3Rpb25FY3Jhbi50cykuICovXG4jZWNyYW5GaW5UZXN0LFxuI2VjcmFuRGlyaWdlQWlsbGV1cnMge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBpbnNldDogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcik7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IDIwcHg7XG59XG5cbiNlY3JhbkZpblRlc3QgYSB7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJvw650ZSDCqyBRdWkgZGlyaWdlID8gwrsgKERpcmVjdGlvbkVjcmFuLnRzKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmRpcmVjdGlvbkNvcnBzIHAge1xuICAgIG1hcmdpbjogMDtcbn1cblxuLmRpcmVjdGlvbkNvcnBzIC5kaXJlY3Rpb25MaXN0ZVRpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogdmFyKC0tZ2FwTGFyZ2UpIDAgdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogVW5lIGluZm9ybWF0aW9uLCBwYXMgdW4gY2hvaXggOiBsJ2hldXJlIGQnb3V2ZXJ0dXJlIGRlIGNoYXF1ZSBmZW7DqnRyZS4gKi9cbi5kaXJlY3Rpb25MaXN0ZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcmV0cmFpdExpc3RlQ291cnQpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4uZGlyZWN0aW9uQ2V0dGVGZW5ldHJlIHtcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiDCqyDDinRlcy12b3VzIHPDu3IgPyDCuyA6IG5vaXIsIGNvbW1lIGxhIGNvbmZpcm1hdGlvbiBkJ3VuIHBhc3NhZ2UgKC5jdGFFY3JhbkNvbmZpcm1hdGlvbiwgX3NjZW5lQm91dG9ucy5jc3MpLiAqL1xuLmRpcmVjdGlvbkNvbmZpcm1lciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXIpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ3RhKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNOb2lyKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1vZGUgbWFzcXVhZ2UgYXV0b21hdGlxdWUgKD9tKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI2JhcnJlUGlsb3RhZ2UubWFzcXVhYmxlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZTtcbn1cblxuI2JhcnJlUGlsb3RhZ2UubWFzcXVhYmxlLnZpc2libGUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFBhZ2luYXRpb24gKyBab29tIFZ1ZUtpdFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI3pvbmVab29tVnVlS2l0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbiN6b29tVnVlS2l0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi8qIExlIGJvdXRvbiB0cm9pcyBwb2ludHMgbidleGlzdGUgcXUnYXUgY3JhbiDCqyBtZW51IMK7IDogaG9ycyBkZSBjZSBjcmFuLCB6b29tIGV0XG4gICBwYWdpbmF0aW9uIHNvbnQgZGFucyBsYSBiYXJyZSwgw6AgbGV1ciBwbGFjZS4gQ2FycsOpIGRlcyBib3V0b25zIGRlIHpvb20gKGNpLWRlc3NvdXMpLiAqL1xuI2N0YU1lbnVab29tIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbiNiYXJyZVBpbG90YWdlLmJhcnJlTWVudVpvb20gI2N0YU1lbnVab29tIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi8qIENyYW4gwqsgbWVudSDCuyA6IHpvb20gZXQgcGFnaW5hdGlvbiBxdWl0dGVudCBsYSBsaWduZSDigJQgcGFubmVhdSBhdS1kZXNzdXMgZHUgYm91dG9uLFxuICAgY2Fsw6kgw6AgZHJvaXRlLCBvdXZlcnQgYXUgY2xpYyBzdXIgbGUgYm91dG9uICgub3V2ZXJ0IHN1ciBsYSB6b25lKSwgZmVybcOpIGF1IGNsaWNcbiAgIGFpbGxldXJzIChBZGFwdGF0aW9uQmFycmUudHMpLiAqL1xuI2JhcnJlUGlsb3RhZ2UuYmFycmVNZW51Wm9vbSAjem9vbVZ1ZUtpdCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUyKTtcbn1cblxuI2JhcnJlUGlsb3RhZ2UuYmFycmVNZW51Wm9vbSAjem9uZVpvb21WdWVLaXQub3V2ZXJ0ICN6b29tVnVlS2l0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xufVxuXG4jcGFnaW5hdGlvblZ1ZUtpdFtkYXRhLXBhZy1hY3RpdmU9XCIxXCJdIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4vKiBQYWlyZXMgZGUgem9vbSA6IHVuZSBwYXIgem9vbSBub21tw6kgZGUgbCdhbmltYXRpb24gKGRhdGEtem9vbSksIERPTSBjcsOpw6kgcGFyIGxlXG4gICBEaW1lbnNpb25uZXVyIGF1IHByZW1pZXIga2l0IGFib25uw6ksIHJldGlyw6kgYXUgY2hhbmdlbWVudCBkZSBjdWUgKHVuZSBhbmltYXRpb24gc2Fuc1xuICAgem9vbSBuJ2EgYXVjdW4gZXNwYWNlIHLDqXNlcnbDqSkuIFVuZSBwYWlyZSBuJ2VzdCBqYW1haXMgbWFzcXXDqWUgZW4gY291cnMgZCdhbmltYXRpb24gOlxuICAgcXVhbmQgc29uIHpvb20gbidlc3QgcGFzIGFmZmljaMOpLCBzZXMgZGV1eCBib3V0b25zIHNvbnQgZ3Jpc8OpcyAoZGlzYWJsZWQpIOKAlCBsZSBncmlzYWdlXG4gICBkaXQgw6AgbCdvcMOpcmF0ZXVyIHF1ZWwgem9vbSBlc3QgdXRpbGlzYWJsZSwgZXQgcmllbiBuZSBib3VnZSBkYW5zIGxhIGJhcnJlLiAqL1xuLmRpdkFjdGlvblpvb20ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5hY3Rpb25ab29tTW9pbnMsXG4uYWN0aW9uWm9vbVBsdXMsXG4vKiBtw6ptZSBjYXJyw6kgcG91ciBsZSBib3V0b24gdHJvaXMgcG9pbnRzIChjcmFuIMKrIG1lbnUgwrssIGNpLWRlc3N1cykgKi9cbiNjdGFNZW51Wm9vbSxcbi8qIG3Dqm1lIGNhcnLDqSBwb3VyIGxlcyBib3V0b25zIMKxIGR1IGdyb3VwZSBkZSByw6lnbGFnZSBkZSBsYSBiYXJyZSAoX3JlZ2xhZ2VTY2VuZS5jc3MpICovXG4ucmVnbGFnZVNjZW5lR3JvdXBlIC5jdGFFY3JhblNlY29uZGFpcmUge1xuICAgIHdpZHRoOiAyOHB4O1xuICAgIGhlaWdodDogMjhweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jQmxhbmMwMyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmFjdGlvblpvb21Nb2luczpkaXNhYmxlZCxcbi5hY3Rpb25ab29tUGx1czpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuI3BhZ2luYXRpb25WdWVLaXQgLnBhZ0J0biB7XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNCbGFuYzAzKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgb3BhY2l0eTogMTtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4jcGFnaW5hdGlvblZ1ZUtpdCAucGFnQnRuOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4jcGFnaW5hdGlvblZ1ZUtpdCAucGFnSW5mbyB7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBtaW4td2lkdGg6IDMycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGhlaWdodDogMjhweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgb3BhY2l0eTogMTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJhbmRlYXUgc2Vzc2lvbiBhcnLDqnTDqWVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5iYW5kZWF1U2Vzc2lvbkFycmV0ZWUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNSb3VnZTMpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGZvbnQ6IHZhcigtLWZIMik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1pbi13aWR0aDogNTAlO1xuICAgIHotaW5kZXg6IDk5OTkwMTtcbn1cblxuLyogVW5lIHNjw6huZSBxdWkgbmUgcGV1dCBwYXMgZMOpbWFycmVyIChjb250cmF0IG5vbiByZXNwZWN0w6ksIHNvdXJjZSBjaGFuZ8OpZSBhcHLDqHMgY291cCkgOlxuICAgc29uIG1lc3NhZ2UsIMOgIGxhIHBsYWNlIGQndW5lIGV4Y2VwdGlvbiBzaWxlbmNpZXVzZSAoTW90ZXVyRWNyYW4uYWZmaWNoZXJFcnJldXJTY2VuZSkuICovXG4uYmFuZGVhdUVycmV1clNjZW5lIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jUm91Z2UzKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBmb250OiB2YXIoLS1mSDIpO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IDUwJTtcbiAgICB6LWluZGV4OiA5OTk5MDE7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQkFSUkUgREUgUFJPR1JFU1NJT04g4oCUIGxhIGZyaXNlIGRlcyBjdWVzLCBjYWNow6llXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBEw6ljaXNpb24gZHUgY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMDMgOiBwbHVzIGQnaWPDtG5lIGRhbnMgbGEgYmFycmUgZGUgcGlsb3RhZ2Ug4oCUIHBlbmRhbnRcbiAgIHVuZSBzY8OobmUsIGxhIHpvbmUgbidhZmZpY2hhaXQgcXVlIGwnaWPDtG5lIGRlIGxhIHNjw6huZSBlbiBjb3VycywgcG91ciByaWVuLiBMYSBmcmlzZVxuICAgcmVzdGUgZGFucyBsYSBwYWdlIChnYWJhcml0IF9wcm9ncmVzc0Jhci50d2lnIGV0IHNlcyBqdW1lYXV4IGQnYXBlcsOndSksIG1haXMgY2FjaMOpZSA6XG4gICBxdWF0cmUgbGVjdGV1cnMgeSBwcmVubmVudCBsYSBsaXN0ZSBkZXMgY3VlcyAocmVwcmlzZSBhcHLDqHMgY291cHVyZSBkYW5zIGVudHJlZUVjcmFuLmpzLFxuICAgwqsgU2PDqG5lIHN1aXZhbnRlIDogWCDCuyBjaS1kZXNzb3VzLCBjdWVTdWl2YW50ZSBldCBhbGxlckN1ZSBkYW5zIE1vdGV1ckVjcmFuLnRzKS4gRWxsZSBuZVxuICAgc2Ugdm9pdCBqYW1haXMuIExlcyBjbGFzc2VzIC5wYXNzZSAvIC5hY3RpZiAvIC5mdXR1ciwgdG91am91cnMgcG9zw6llcyBwYXIgUHJvZ3Jlc3NCYXIudHMsXG4gICBuZSBkZXNzaW5lbnQgcGx1cyByaWVuLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI3Byb2dyZXNzQmFyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIC8qIEF1Y3VuIGFpciB2ZXJ0aWNhbCA6IGxhIGZyaXNlIGVzdCBjYWNow6llLCBpbCBuZSByZXN0ZSBxdWUgbGUgYm91dG9uIMKrIFNjw6huZSBzdWl2YW50ZSA6IFggwrssXG4gICAgICAgcXVpIGEgbGEgaGF1dGV1ciBkZSB0b3VzIGxlcyBib3V0b25zIGRlIGxhIGJhcnJlIOKAlCBldCBsYSBiYXJyZSBuZSBncmFuZGl0IHBhcy4gKi9cbiAgICBwYWRkaW5nOiAwO1xufVxuXG4jcHJvZ3Jlc3NCYXJCYW5kZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJvdXRvbiDCqyBTY8OobmUgc3VpdmFudGUgOiBYIMK7IOKAlCBnw6lyw6kgcGFyIGxlIHN5c3TDqG1lIChQcm9ncmVzc0Jhci50cylcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIFVuIEVNUExBQ0VNRU5UIGRlIGNvbmZpcm1hdGlvbiAoLmN0YUVtcGxhY2VtZW50LCBfc2NlbmVCb3V0b25zLmNzcyksIGxlIG3Dqm1lIHF1ZSDCqyBUZXJtaW5lciDCu1xuICAgZGFucyBsYSBiYXJyZSBkZSBmaW4sIGRvbnQgaWwgcHJlbmQgbGEgcGxhY2UgZMOocyBxdSd1bmUgY3VlIHN1aXQgOiBQcm9ncmVzc0Jhci50cyB5IMOpY3JpdCBsZVxuICAgYm91dG9uIGRlIHJlcG9zICguY3RhMTQuY3RhRWNyYW5QcmltYWlyZSDigJQgTEEgc2lsaG91ZXR0ZSBkZXMgYm91dG9ucyBkZSBsYSBiYXJyZSwgbcOqbWUgaGF1dGV1clxuICAgZ2FyYW50aWUsIGJhcnJlQWN0aW9ucy5tZCkgZXQgbGUgYm91dG9uIMKrIMOKdGVzLXZvdXMgc8O7ciA/IMK7ICguY3RhRWNyYW5Db25maXJtYXRpb24pLiBJY2lcbiAgIHNldWxlbWVudCBsJ2FwcGFyaXRpb24gZW4gZm9uZHUgOyBsJ2lzb2xhdGlvbiBwZW5kYW50IGxhIGNvbmZpcm1hdGlvbiBlc3QgY2VsbGUgZGUgdG91dFxuICAgZW1wbGFjZW1lbnQgYXJtw6kgKGJvZHkuY29uZmlybWF0aW9uQmFycmUsIF9zY2VuZUJvdXRvbnMuY3NzKS4gKi9cbiNwcm9ncmVzc0JhclN1aXZhbnQge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuI3Byb2dyZXNzQmFyU3VpdmFudC52aXNpYmxlIHtcbiAgICBvcGFjaXR5OiAxO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJBUlJFIERFIEZJTiBERSBTQ8OITkUgKCNiYXJyZUZpblNjZW5lLCBCYXJyZUZpbi50cylcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIFZpdCBEQU5TIGxhIHpvbmUgZGUgcHJvZ3Jlc3Npb24gKGJyaXF1ZSBfem9uZVByb2dyZXNzQmFyLnR3aWcpLCBtYWlzIEhPUlMgREUgU09OIEZMVVggOlxuICAgI2JhcnJlRmluU2NlbmUgZXN0IHVuZSBib8OudGUgZmxvdHRhbnRlIChwb3NpdGlvbiBhYnNvbHVlKSBhbmNyw6llIMOgIGxhIHN1aXRlIGRlIGxhIHpvbmUsXG4gICBwb3PDqWUgUEFSLURFU1NVUyBsZSByZXN0ZSBkZSBsYSBiYXJyZSBkZSBwaWxvdGFnZS4gRWxsZSBuZSBwb3Vzc2UgcmllbiA6IGxlcyBib3V0b25zIGR1XG4gICBkZXNzb3VzIOKAlCB2b2lsw6lzIGV0IGluam91YWJsZXMg4oCUIGdhcmRlbnQgbGV1ciBwbGFjZSwgZXQgbGEgYmFycmUgbmUgcGFzc2UgamFtYWlzIHN1clxuICAgZGV1eCBsaWduZXMgZmF1dGUgZGUgbGFyZ2V1ci4gRWxsZSBlc3QgdHJhbnNwYXJlbnRlIGV0IGhvcnMgZCdhdHRlaW50ZSBhdSByZXBvcyA7IHF1YW5kIGxhXG4gICBzY8OobmUgZMOpY2xhcmUgdW5lIGZpbiwgQmFycmVGaW4udHMgZMOpcGxvaWUgc2VzIGJvdXRvbnMgZGFucyAjYmFycmVGaW5Db250ZW51IGV0IGxhIGJvw650ZVxuICAgcGFyYcOudCBlbiBmb25kdSwgcG9ydMOpZSBwYXIgdW4gY291cnQgZ2xpc3NlbWVudCDigJQgc2FucyBwcmVuZHJlIGxhIGxhcmdldXIgw6AgcGVyc29ubmUuXG5cbiAgIFByaXNlIGRlIHBvdXZvaXIgc3VyIGxhIGJhcnJlIOKAlCDDqXRhdHMgcG9zw6lzIHN1ciAjYmFycmVQaWxvdGFnZSBwYXIgQmFycmVGaW4udHMsIHNpbXBsZVxuICAgbWlyb2lyIGRlIGNlIHF1ZSBsYSBzY8OobmUgYSBkw6ljbGFyw6kgOlxuICAgLSAuYmFycmVGaW5BdmVjUmV0b3VyIDogZmluIGFubnVsYWJsZSAowqsgQW5udWxlciDCuyBwcsOpc2VudCkuIExlIHJlc3RlIGRlIGxhIGJhcnJlIHBhc3NlXG4gICAgIHNvdXMgbGUgdm9pbGUg4oCUIGdyaXPDqSwgZMOpc2F0dXLDqSwgbWFpcyBQUsOJU0VOVCA6IHJpZW4gbidlc3QgcGVyZHUuIEwnYXR0cmlidXQgaW5lcnRcbiAgICAgKHBvc8OpIHBhciBCYXJyZUZpbi50cykgcmVuZCBjZXMgem9uZXMgaW5qb3VhYmxlcyA7IGxlIENTUyBuZSBmYWl0IHF1ZSBsZSBtb250cmVyLlxuICAgLSAuYmFycmVGaW5TYW5zUmV0b3VyIDogZmluIHNhbnMgcmV0b3VyLiBMZXMgYm91dG9ucyBkdSBkZXNzb3VzIHNlIHJhbmdlbnRcbiAgICAgKHZpc2liaWxpdHksIGphbWFpcyBkaXNwbGF5IDogbGVzIGVtcGxhY2VtZW50cyByZXN0ZW50IHLDqXNlcnbDqXMpLlxuICAgRmluIHNhbnMgcmV0b3VyIGV0IHNhbnMgYm91dG9uIGTDqWNsYXLDqSA6IGF1Y3VuIMOpdGF0LCByaWVuIG5lIGJvdWdlIOKAlCBsYSBzY8OobmUgZ2FyZGUgdG91c1xuICAgc2VzIGJvdXRvbnMgKFNob3cqLCBwYWdpbmF0aW9ucywgwqsgQW5udWxlciDCuyBkZXMgc2PDqG5lcyBkZSB0aXJhZ2UpLiBDJ2VzdCBsZSBjYXMgZGUgdG91dGVzXG4gICBsZXMgc2PDqG5lcyBzYXVmIGxlcyBxdWF0cmUgYmluZ29zIDogY2VzIHLDqGdsZXMgbmUgbGVzIGNvbmNlcm5lbnQgcGFzLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogTGEgYm/DrnRlIHNlIHBvc2Ugw6AgbGEgc3VpdGUgZGUgbGEgem9uZSBkZSBwcm9ncmVzc2lvbiAobGVmdDogMTAwJSkgZXQgZMOpYm9yZGUgcGFyLWRlc3N1c1xuICAgbGUgcmVzdGUgZGUgbGEgYmFycmUuIFNvbiBhaXIgZXN0IHByaXMgc3VyIGNlbHVpIGRlIGxhIGJhcnJlIChyw6hnbGUgI2JhcnJlUGlsb3RhZ2UsXG4gICBfc3R1ZGlvSW50ZWdyZWUuY3NzKSA6IHNlcyBib3V0b25zIHNvbnQgw6AgOHB4IGR1IGJvcmQgY29tbWUgdG91cyBsZXMgYXV0cmVzLCBsYSBib8OudGUgc2VcbiAgIGRlc3NpbmUgNHB4IGVuIGRlZGFucyDigJQgZCdvw7kgbGEgbWFyZ2UgbsOpZ2F0aXZlIGRlIHNvbiBhaXIuIFF1YW5kIMKrIFBhc3NlciDDoCA6IFggwrsgZXN0XG4gICBsw6AsIGxhIHpvbmUgZXN0IGVuIGZsdXggYXZlYyBzb24gY2FkcmUgKG3Dqm1lIGFpcikgOiBlbnRyZSBsZSBjYWRyZSBldCBsYSBib8OudGUsIGxlc1xuICAgMTZweCBkZSB0b3V0IHZvaXNpbiwgbWVzdXLDqXMgZGUgYm91dG9uIMOgIGJvdXRvbi5cblxuICAgd2lkdGg6IG1heC1jb250ZW50IGVzdCBPQkxJR0FUT0lSRSwgcGFzIHVuIGNvbmZvcnQgOiBwb3VyIHVuIMOpbMOpbWVudCBob3JzIGZsdXgsIGxhIGxhcmdldXJcbiAgIGF1dG9tYXRpcXVlIGVzdCB1biBzaHJpbmstdG8tZml0IGNhbGN1bMOpIHN1ciBsJ2VzcGFjZSByZXN0YW50IGRhbnMgbGUgYmxvYyBjb250ZW5ldXIsIGV0XG4gICBsZWZ0OiAxMDAlIG5lIGxhaXNzZSBwYXIgZMOpZmluaXRpb24gQVVDVU4gZXNwYWNlIOKAlCBsYSBib8OudGUgc2UgcsOpZHVpcmFpdCDDoCBzb24gcGFkZGluZyxcbiAgIHF1ZWwgcXVlIHNvaXQgbGUgbm9tYnJlIGRlIGJvdXRvbnMuIE9uIGRlbWFuZGUgZG9uYyBsYSBsYXJnZXVyIGR1IGNvbnRlbnUsIHBsYWZvbm7DqWUgcGFyXG4gICBtYXgtd2lkdGguXG5cbiAgIEwnb3V2ZXJ0dXJlIGVzdCB1bmUgQU5JTUFUSU9OIChrZXlmcmFtZXMpLCBwYXMgdW5lIHRyYW5zaXRpb24sIGV0IGMnZXN0IGTDqWxpYsOpcsOpIDpcbiAgIEJhcnJlRmluLmFmZmljaGVyKCkgaW5zw6hyZSBsZXMgYm91dG9ucyBwdWlzIHBvc2UgLnZpc2libGUgZGFucyBsZSBtw6ptZSB0b3VyIGRlIGJvdWNsZSxcbiAgIHNhbnMgcmVmbG93IGVudHJlIGxlcyBkZXV4LiBVbmUgdHJhbnNpdGlvbiBuJ2F1cmFpdCBhbG9ycyBhdWN1biDDqXRhdCBkZSBkw6lwYXJ0IGFmZmljaMOpXG4gICBkJ2/DuSBwYXJ0aXIg4oCUIGVsbGUgc2F1dGUgw6AgbCdhcnJpdsOpZSAobGUgc3ltcHTDtG1lIMKrIGltYWdlIGRlIGTDqXBhcnQsIGltYWdlIGRlIGZpbiDCuykuXG4gICBVbmUgYW5pbWF0aW9uLCBlbGxlLCByZWpvdWUgdG91am91cnMgc2VzIGtleWZyYW1lcyBkZXB1aXMgbGUgZMOpYnV0LCBxdWVsIHF1ZSBzb2l0IGNlIHF1aVxuICAgYSDDqXTDqSByZW5kdSBhdmFudC5cblxuICAgRWxsZSBuZSBib3VnZSBRVUUgb3BhY2l0eSBldCB0cmFuc2Zvcm0g4oCUIGxlcyBkZXV4IHNldWxlcyBwcm9wcmnDqXTDqXMgcXVlIGxlIGNvbXBvc2l0ZXVyXG4gICBhbmltZSBzYW5zIHJlcGVpbmRyZS4gQXUgbW9tZW50IGRlIGwnb3V2ZXJ0dXJlLCBsYSBtw6ptZSBmcmFtZSBwb3J0ZSBkw6lqw6AgbCdpbnNlcnRpb24gZGVzXG4gICBib3V0b25zLCBsZSB2b2lsZSBldCBsZSBncmF5c2NhbGUgZHUgcmVzdGUgZGUgbGEgYmFycmUgOiB0b3V0IGNlIHF1aSBkZW1hbmRlcmFpdCB1blxuICAgcmVwYWludCBwYXIgaW1hZ2UgKGxhcmdldXIsIGNsaXAtcGF0aCkgeSBwZXJkIHNlcyBpbWFnZXMgaW50ZXJtw6lkaWFpcmVzLiAqL1xuI2JhcnJlRmluU2NlbmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiAxMDAlO1xuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xICogdmFyKC0tZ2FwUmVkdWl0KSk7XG4gICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgIC8qIEphbWFpcyBwbHVzIGxhcmdlIHF1ZSBjZSBxdWkgcmVzdGUgZCfDqWNyYW4gw6Agc2EgZHJvaXRlIChsZSAlIHNlIGxpdCBzdXIgbGEgem9uZSBkZVxuICAgICAgIHByb2dyZXNzaW9uLCBzb24gYmxvYyBjb250ZW5ldXIpIDogbGUgY29udGVudSBzZSBjb3VwZSBwbHV0w7R0IHF1ZSBkZSBzb3J0aXIuICovXG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMTAwJSAtIDQgKiB2YXIoLS1nYXBEZWZhdXQpKTtcbiAgICAvKiBMZSBjZW50cmFnZSB2ZXJ0aWNhbCBlc3QgcG9ydMOpIHBhciB0cmFuc2Zvcm0sIGRvbmMgcmVqb3XDqSBwYXIgY2hhcXVlIGtleWZyYW1lLiAqL1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC01MCUpO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4vKiBGZXJtZXR1cmUgOiBtYXNxdWVyKCkgdmlkZSBsZSBjb250ZW51IGRhbnMgbGEgZm91bMOpZSwgaWwgbid5IGEgcmllbiDDoCBmYWlyZSBkaXNwYXJhw650cmVcbiAgIGVuIGZvbmR1IOKAlCBsYSBib8OudGUgcydlZmZhY2UgZCd1biBjb3VwLCBldCBjJ2VzdCBob25uw6p0ZS4gKi9cbiN6b25lUHJvZ3Jlc3NCYXI6aGFzKCNwcm9ncmVzc0JhclN1aXZhbnQudmlzaWJsZSkgI2JhcnJlRmluU2NlbmUge1xuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDE2cHggLSAyICogdmFyKC0tZ2FwUmVkdWl0KSk7XG59XG5cbiNiYXJyZUZpblNjZW5lLnZpc2libGUge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBhbmltYXRpb246IGJhcnJlRmluT3V2ZXJ0dXJlIDAuMjVzIGVhc2Utb3V0O1xufVxuXG5Aa2V5ZnJhbWVzIGJhcnJlRmluT3V2ZXJ0dXJlIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwcHgsIC01MCUpO1xuICAgIH1cbiAgICB0byB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC01MCUpO1xuICAgIH1cbn1cblxuLyogTGUgY29udGVudSBwb3J0ZSBsZSBmb25kIGRlIGxhIGJvw650ZSA6IGhvcnMgZmx1eCwgaWwgbmUgcHJvZml0ZSBwbHVzIGRlIGNlbHVpIGRlIGxhIHpvbmVcbiAgIGRlIHByb2dyZXNzaW9uLCBldCBkb2l0IHJlc3RlciBsaXNpYmxlIGF1LWRlc3N1cyBkdSB2b2lsZS4gTcOqbWUgZm9uZCBxdWUgbGEgem9uZSBlbiBmaW4gOlxuICAgbGVzIGRldXggYm/DrnRlcyBzZSBsaXNlbnQgY29tbWUgdW5lIHNldWxlIGJhcnJlIHF1aSBhIGNoYW5nw6kuICovXG4jYmFycmVGaW5Db250ZW51IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgLyogTcOqbWUgbW9kw6hsZSBxdWUgI2RpdkFjdGlvbkNvbnRleHR1ZWxsZXMgKF9zY2VuZUJvdXRvbnMuY3NzKSA6IEJhcnJlRmluLnRzIHJhbmdlIHNlc1xuICAgICAgIGJvdXRvbnMgZW4gZ3JvdXBlcyAuZGl2QWN0aW9uU2NlbmUg4oCUIMKrIFRlcm1pbmVyIMK7LCBsZXMgcmF0dHJhcGFnZXMgKGFubnVsZXIsIGFqb3V0ZXIpLFxuICAgICAgIGxlIHJldG91ciDigJQsIGNoYWN1biBzw6lwYXLDqSBkdSBzdWl2YW50IHBhciBsZSB0cmFpdCBkdSBncm91cGUuIEVudHJlIGRldXggZ3JvdXBlcywgMTZweFxuICAgICAgIGRlIHBhcnQgZXQgZCdhdXRyZSBkdSB0cmFpdCA7IGRhbnMgdW4gZ3JvdXBlLCBsZSBnYXAgY29tbXVuIGRlcyBib3V0b25zIDsgZGFucyB1blxuICAgICAgIGNhZHJlIGRlIHLDqWdsYWdlLCBsZXMgY2FzZXMgc2VycsOpZXMuIEF1Y3VuIGF1dHJlIMOpY2FydCAoZMOpY2lzaW9uIGR1IGNoZWYgZGUgcHJvamV0LFxuICAgICAgIDIwMjYtMDktMDIpLiAqL1xuICAgIGdhcDogMTZweDtcbiAgICBtaW4td2lkdGg6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiB2YXIoLS1nYXBSZWR1aXQpOyAvKiBsJ2FpciBkZSB0b3V0ZSBib8OudGUgZGFucyBsYSBiYXJyZSAqL1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIyKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbi8qIEJvdXRvbnMgZGUgbGEgYmFycmUgZGUgcGlsb3RhZ2UgcmVtb250w6lzIGRhbnMgbGEgYmFycmUgZGUgZmluIChCYXJyZUZpbi50cyxcbiAgIHJlbmRyZVJlbW9udGVzKSA6IEJvdXRvbnNBY3Rpb25zLnRzIGxlcyByYW5nZSBkYW5zIHNlcyBwcm9wcmVzIGdyb3VwZXMgLmRpdkFjdGlvblNjZW5lLlxuICAgTGUgY29udGVuZXVyIHMnZWZmYWNlIHBvdXIgcXVlIGNlcyBncm91cGVzIHNvaWVudCBkZXMgZW5mYW50cyBkaXJlY3RzIGR1IHJhaWwg4oCUIG3Dqm1lXG4gICBnYXAsIG3Dqm1lIHRyYWl0LCBtw6ptZSA6bGFzdC1jaGlsZCBzYW5zIHRyYWl0IOKAlCBjb21tZSBjZXV4IHF1ZSBCYXJyZUZpbiDDqWNyaXQgZWxsZS1tw6ptZS4gKi9cbiNiYXJyZUZpbkNvbnRlbnUgLmJhcnJlRmluUmVtb250ZXMge1xuICAgIGRpc3BsYXk6IGNvbnRlbnRzO1xufVxuXG4vKiBMYSB6b25lIGRlIHByb2dyZXNzaW9uIGVuIGZpbiA6IGZvbmQgbMOpZ8OocmVtZW50IGRpZmbDqXJlbnQg4oCUIGxlIMKrIHRpZW5zLCBqJ2FpIGNoYW5nw6lcbiAgIGRlIGJhcnJlIMK7ICh0cmFuc2l0aW9uIGV0IGZvbmQgZGUgcmVwb3MgZGFucyBfc3R1ZGlvSW50ZWdyZWUuY3NzKS4gKi9cbiNiYXJyZVBpbG90YWdlLmJhcnJlRmluQXZlY1JldG91ciAjem9uZVByb2dyZXNzQmFyLFxuI2JhcnJlUGlsb3RhZ2UuYmFycmVGaW5TYW5zUmV0b3VyICN6b25lUHJvZ3Jlc3NCYXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLyogTGUgdm9pbGUg4oCUIGxlIGdlc3RlIGQndW5lIHBvcHVwIHF1aSBhc3NvbWJyaXQgbCfDqWNyYW4sIGNvbmZpbsOpIMOgIGxhIGJhcnJlLiBMYSB6b25lIGRlXG4gICBwcm9ncmVzc2lvbiBwYXNzZSBhdS1kZXNzdXMgKHotaW5kZXgsIF9zdHVkaW9JbnRlZ3JlZS5jc3MpLiBQdXJlbWVudCB2aXN1ZWxcbiAgIChwb2ludGVyLWV2ZW50cyBub25lKSA6IGMnZXN0IGluZXJ0IHF1aSByZW5kIGxlIGRlc3NvdXMgaW5qb3VhYmxlLiBEZXV4IHVzYWdlcnMgOiBsYVxuICAgYmFycmUgZGUgZmluIChjaS1kZXNzb3VzKSBldCBsYSBib8OudGUgZGUgcGFzc2FnZSBkZSBsJ2FwZXLDp3UgKF9wcmV2aWV3LmNzcyksIHF1aSBsZSBsw6h2ZVxuICAgZGFucyBsJ29tYnJlIGRlIGwnw6ljcmFuIHBvdXIgbmUgbGFpc3NlciDDqWNsYWlyw6kgcXVlIGxlIGJvdXRvbiDCqyBQYXNzZXIgw6AgOiBYIMK7LiAqL1xuI2JhcnJlUGlsb3RhZ2U6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPbWJyZUZvcnRlKTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlO1xuICAgIHotaW5kZXg6IDE7XG59XG5cbiNiYXJyZVBpbG90YWdlLmJhcnJlRmluQXZlY1JldG91cjo6YmVmb3JlLFxuI2JhcnJlUGlsb3RhZ2UuYmFycmVGaW5TYW5zUmV0b3VyOjpiZWZvcmUge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbiNkaXZBY3Rpb25Db250ZXh0dWVsbGVzLFxuI3pvbmVab29tVnVlS2l0IHtcbiAgICB0cmFuc2l0aW9uOiBmaWx0ZXIgMC4ycyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTtcbn1cblxuLyogRmluIGFubnVsYWJsZSA6IGxlIGRlc3NvdXMgcmVzdGUgc291cyBsZXMgeWV1eCwgZ3Jpc8OpIGV0IGTDqXNhdHVyw6kg4oCUIMKrIEFubnVsZXIgwrtcbiAgIHByb21ldCB1biByZXRvdXIsIG9uIG1vbnRyZSBxdWUgdG91dCBlc3QgZW5jb3JlIGzDoC4gKi9cbiNiYXJyZVBpbG90YWdlLmJhcnJlRmluQXZlY1JldG91ciAjZGl2QWN0aW9uQ29udGV4dHVlbGxlcyxcbiNiYXJyZVBpbG90YWdlLmJhcnJlRmluQXZlY1JldG91ciAjem9uZVpvb21WdWVLaXQge1xuICAgIGZpbHRlcjogZ3JheXNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLyogRmluIHNhbnMgcmV0b3VyIDogcGx1cyByaWVuIMOgIGZhaXJlIGRlc3NvdXMsIGxlcyBib3V0b25zIHNlIHJhbmdlbnQuICovXG4jYmFycmVQaWxvdGFnZS5iYXJyZUZpblNhbnNSZXRvdXIgI2RpdkFjdGlvbkNvbnRleHR1ZWxsZXMsXG4jYmFycmVQaWxvdGFnZS5iYXJyZUZpblNhbnNSZXRvdXIgI3pvbmVab29tVnVlS2l0IHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cbi8qIFNpbGhvdWV0dGUgOiAuY3RhMTQgKDMxX2N0YS5jc3MpLCBwb3PDqWUgcGFyIEJhcnJlRmluLnRzIOKAlCBtw6ptZSBwYWRkaW5nLCBtw6ptZSBwb2xpY2UsXG4gICBtw6ptZSByYXlvbiBxdWUgbGVzIGJvdXRvbnMgZGUgbGEgYmFycmUgZGUgcGlsb3RhZ2UgOiBoYXV0ZXVyIGlkZW50aXF1ZSBnYXJhbnRpZS4gSWNpXG4gICB1bmlxdWVtZW50IGxlIHLDtGxlIDogbcOqbWUgc3R5bGUgcXVlIC5jdGFFY3JhblNlY29uZGFpcmUgKGJsYW5jLCBjb250b3VyIGV0IHRleHRlIG5vaXJzKS4gKi9cbi5iYXJyZUZpbkJvdXRvbiB7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDdGEpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgY29sb3I6IHZhcigtLWNDdGFUZXh0ZSk7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmJhcnJlRmluQm91dG9uOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vKiBMZSBib3V0b24gcHJpbmNpcGFsIGR1IGNvbnRleHRlICjCqyBMb3Qgc3VpdmFudCDCuywgwqsgVGVybWluZXIgwrspIDogQ1RBIHBsZWluLCBtw6ptZXMgY291bGV1cnMgcXVlXG4gICAuY3RhRWNyYW5QcmltYWlyZSDigJQgbGUgY2hlbWluIG5vcm1hbCBzZSB2b2l0IGR1IHByZW1pZXIgY291cCBkJ8WTaWwsIGxlcyByYXR0cmFwYWdlc1xuICAgKGFubnVsZXIsIGFqb3V0ZXIgZHUgc3RvY2spIHJlc3RlbnQgZW4gY29udG91ci4gTGUgYm91dG9uIMKrIMOKdGVzLXZvdXMgc8O7ciA/IMK7IHF1aSBzZSBwb3NlXG4gICBzdXIgdW4gYm91dG9uIGRlIGZpbiBhcm3DqSBlc3QgY2VsdWkgZGUgdG91dCBlbXBsYWNlbWVudCAoLmN0YUVjcmFuQ29uZmlybWF0aW9uLFxuICAgX3NjZW5lQm91dG9ucy5jc3MpLiAqL1xuLyogUGxlaW4gPSBhdWN1biBjb250b3VyIHZpc2libGUgOiB0cmFuc3BhcmVudCBnYXJkZSBsJ8OpcGFpc3NldXIsIGxhIGhhdXRldXIgbmUgYm91Z2UgcGFzLiAqL1xuLmJhcnJlRmluQm91dG9uLmJhcnJlRmluUHJpbmNpcGFsIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb3VsZXVyQ3RhLCB2YXIoLS1jQWNjZW50MykpO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IHZhcigtLWNvdWxldXJDdGFUZXh0ZSwgdmFyKC0tY0FjY2VudHQpKTtcbn1cblxuLyogwqsgQW5udWxlciDCuyDigJQgYm91dG9uIHN5c3TDqG1lLCBkaXNjcmV0LCB0b3Vqb3VycyBlbiBkZXJuaWVyLCBkYW5zIHNvbiBwcm9wcmUgZ3JvdXBlLlxuICAgU2lsaG91ZXR0ZSAuY3RhMTQgKHBvc8OpZSBwYXIgQmFycmVGaW4udHMpLCBpY2kgdW5pcXVlbWVudCBsZSByw7RsZS4gKi9cbi5iYXJyZUZpblJldG91ciB7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDdGEpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgY29sb3I6IHZhcigtLWNDdGFUZXh0ZSk7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLyogTCdpc29sYXRpb24gZCd1biBib3V0b24gZGUgZmluIGFybcOpIChzZXVsIGx1aSByZXN0ZSB2aXNpYmxlKSBlc3QgY2VsbGUgZGUgdG91dCBlbXBsYWNlbWVudFxuICAgZGUgY29uZmlybWF0aW9uIDogYm9keS5jb25maXJtYXRpb25CYXJyZSwgX3NjZW5lQm91dG9ucy5jc3MuICovXG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09NUFRFVVJTIFBBUlRJQ0lQQU5UUyDigJQgYmFzIGdhdWNoZSBkZSBsJ8OpY3JhblxuICAgRW1waWzDqXMgdmVydGljYWxlbWVudCwgaWPDtG5lIMOgIGdhdWNoZSwgY29tcHRldXIgw6AgZHJvaXRlIGFsaWduw6lcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNjb21wdGV1cnNQYXJ0aWNpcGFudHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jT3ZlcmxheSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uY29tcHRldXJTb3VyY2UsXG4jY29tcHRldXJUb3RhbEZvcm11bGFpcmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi8qIExlIHRvdGFsIGRlcyBpbnNjcmlwdGlvbnMgZW4gZGlyZWN0LCBzb3VzIGxlcyBjb21wdGV1cnMgZGVzIGZvcm11bGFpcmVzLiAqL1xuI2NvbXB0ZXVyVG90YWxGb3JtdWxhaXJlIHtcbiAgICBwYWRkaW5nLXRvcDogdmFyKC0tZ2FwUmVkdWl0KTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4jY29tcHRldXJUb3RhbEZvcm11bGFpcmUgLmNvbXB0ZXVyTGliZWxsZSB7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLmNvbXB0ZXVyU291cmNlIGltZyB7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIG9wYWNpdHk6IDAuNztcbn1cblxuLmNvbXB0ZXVyU291cmNlIC5jb21wdGV1ck5vbWJyZSxcbiNjb21wdGV1clRvdGFsRm9ybXVsYWlyZSAuY29tcHRldXJOb21icmUge1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgbWluLXdpZHRoOiAzY2g7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi8qIMKrIC8gNTAwIMK7IDogbGEgbGltaXRlIGRlIGwnb2ZmcmUsIGVuIHJldHJhaXQgZHUgdG90YWwuICovXG4jY29tcHRldXJUb3RhbEZvcm11bGFpcmUgLmNvbXB0ZXVyTGltaXRlIHtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4vKiBEw6hzIDkwICUgZGUgbGEgbGltaXRlLCBldCBhdS1kZWzDoCA6IGwnb3JnYW5pc2F0ZXVyIGVzdCBwcsOpdmVudSAoUGFydGljaXBhbnRTZXJ2aWNlOjpldGF0TGltaXRlSW5zY3JpcHRpb25zRm9ybXVsYWlyZSkuICovXG4uY29tcHRldXJBbGVydGUgLmNvbXB0ZXVyTm9tYnJlIHtcbiAgICBjb2xvcjogdmFyKC0tY09yNCk7XG59XG5cbi5jb21wdGV1ck9mZmVydCAuY29tcHRldXJOb21icmUge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UzKTtcbn1cblxuLmNvbXB0ZXVyUGxhY2VzT2ZmZXJ0ZXMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlMyk7XG59XG5cbi5jb21wdGV1ck9mZmVydCAuY29tcHRldXJQbGFjZXNPZmZlcnRlcyB7XG4gICAgZGlzcGxheTogaW5saW5lO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJvdXRvbnMgZCdhbmltYXRpb24gKyB6b25lIGQnYW5pbWF0aW9uXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBab25lIGQnYW5pbWF0aW9uIGRhbnMgI3pvbmVBZmZpY2hhZ2UgKi9cbiN6b25lU2NlbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbn1cblxuLyogQm91dG9ucyBkZSBsYSBiYXJyZSBkJ2FjdGlvbnMgZGUgbCfDqWNyYW4gKEJvdXRvbnNBY3Rpb25zLnRzKSA6XG4gICBzaWxob3VldHRlIGNvbW11bmUgLmN0YTE0ICgzMV9jdGEuY3NzKSDigJQgaWNpIHVuaXF1ZW1lbnQgbGVzIGNvdWxldXJzIHBhciByw7RsZS5cbiAgIGJvdXRvbiAvIHNlY29uZGFpcmUgLyBpbmZvID0gTEUgYm91dG9uIG5ldXRyZSBjb21tdW4gOiBmb25kIGJsYW5jLCBMQSBib3JkdXJlLFxuICAgTEUgbm9pciAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTggOiB1biBib3V0b24gbmUgY2hvaXNpdCBuaSBzb24gcGFkZGluZywgbmkgc2FcbiAgIGJvcmR1cmUsIG5pIHNhIGNvdWxldXIg4oCUIHZhcmlhYmxlcyAtLXBhZGRpbmdDdGExNCAvIC0tYm9yZGVyQ3RhIC8gLS1jQ3RhVGV4dGUpLiAqL1xuLmN0YUVjcmFuQm91dG9uLFxuLmN0YUVjcmFuU2Vjb25kYWlyZSxcbi5jdGFFY3JhbkluZm8ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhVGV4dGUpO1xufVxuXG4vKiBQbGVpbiA9IGF1Y3VuIGNvbnRvdXIgdmlzaWJsZSwgbWFpcyBMQSBib3JkdXJlIGVzdCBsw6AsIHRyYW5zcGFyZW50ZSA6IGVsbGUgZ2FyZGUgc29uXG4gICDDqXBhaXNzZXVyLCBldCB1biBib3V0b24gcGxlaW4gZmFpdCBleGFjdGVtZW50IGxhIGhhdXRldXIgZCd1biBib3V0b24gw6AgY29udG91ciAoMzQgY29udHJlXG4gICAzNiBweCBhdmFudCDigJQgZMOpZmF1dCB2dSBwYXIgbGUgY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMTYpLiBNw6ptZSBwYXJ0aSBxdWVcbiAgIC5iYXJyZUZpblByaW5jaXBhbCAoX2JhcnJlRmluLmNzcykuICovXG4uY3RhRWNyYW5QcmltYWlyZSxcbi5jdGFFY3JhbkRhbmdlciB7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDdGEpO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5jdGFFY3JhblByaW1haXJlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb3VsZXVyQ3RhLCB2YXIoLS1jQWNjZW50MykpO1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyQ3RhVGV4dGUsIHZhcigtLWNBY2NlbnR0KSk7XG59XG5cbi5jdGFFY3JhbkRhbmdlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1JvdWdlMyk7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG59XG5cbi8qIEVtcGxhY2VtZW50IHBhcnRhZ8OpIHBhciBkZXV4IGJvdXRvbnMgcXVpIHMnZXhjbHVlbnQgKEFubnVsZXIgLyDDinRlcy12b3VzIHPDu3IgPykgOlxuICAgdW5lIHNldWxlIGNlbGx1bGUsIGphbWFpcyBjw7R0ZSDDoCBjw7R0ZS4gQXUgcmVwb3MsIGxlIGJvdXRvbiBkZSBjb25maXJtYXRpb24gZXN0IGhvcnMgZHVcbiAgIGZsdXggKGRpc3BsYXksIHBvc8OpIHBhciBCb3V0b25zQWN0aW9ucyBvdSBFbXBsYWNlbWVudENvbmZpcm1hdGlvbi50cykgZXQgbCdlbXBsYWNlbWVudFxuICAgc3VpdCBsZSBib3V0b24gZGUgcmVwb3MuIEFybcOpLCBsZXMgZGV1eCBzb250IGRhbnMgbGEgY2VsbHVsZSwgw6AgbGEgbcOqbWUgdGFpbGxlIOKAlCBsZSBib3V0b25cbiAgIGRlIHJlcG9zIHRpZW50IGxhIHBsYWNlLCBsYSBjb25maXJtYXRpb24gc2UgcG9zZSBkZXNzdXMg4oCUIGV0IGxhIGJ1bGxlIGRlIGNvbmZpcm1hdGlvblxuICAgKF9idWxsZUNvbmZpcm1hdGlvbi5jc3MpIHNlIHBvc2Ugc3VyIGV1eCBkZXB1aXMgbGUgYm9keS4gSmFtYWlzIGRlIHBsYWNlIHZpZGUgw6AgY8O0dMOpLiAqL1xuLmN0YUVtcGxhY2VtZW50IHtcbiAgICBkaXNwbGF5OiBncmlkO1xufVxuXG4uY3RhRW1wbGFjZW1lbnQgPiAqIHtcbiAgICBncmlkLWFyZWE6IDEgLyAxO1xufVxuXG4vKiBMZSBib3V0b24gwqsgw4p0ZXMtdm91cyBzw7tyID8gwrsgZCd1biBlbXBsYWNlbWVudCBzeXN0w6htZSAoRW1wbGFjZW1lbnRDb25maXJtYXRpb24udHMgOlxuICAgwqsgVGVybWluZXIgwrssIMKrIFNjw6huZSBzdWl2YW50ZSA6IFggwrssIGxlcyBnZXN0ZXMgZGUgZmluIGQndW5lIHNjw6huZSkgOiBub2lyIHBvdXIgdW4gcGFzc2FnZSxcbiAgIHJvdWdlIHBvdXIgdW4gZ2VzdGUgZGFuZ2VyZXV4IChgZGFuZ2VyYCkuIFVuIHNldWwgcmVuZHUsIHF1ZWxsZSBxdWUgc29pdCBsYSBiYXJyZS4gKi9cbi5jdGFFY3JhbkNvbmZpcm1hdGlvbiB7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDdGEpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY05vaXIpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uY3RhRWNyYW5Db25maXJtYXRpb24uZGFuZ2VyIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNSb3VnZTMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNSb3VnZTMpO1xufVxuXG4vKiBJc29sYXRpb24gcGVuZGFudCBsYSBjb25maXJtYXRpb24gKGJvZHkuY29uZmlybWF0aW9uQmFycmUsIHBvc8OpIHBhciBFbXBsYWNlbWVudENvbmZpcm1hdGlvbi50c1xuICAgdGFudCBxdSd1biBlbXBsYWNlbWVudCBlc3QgYXJtw6kg4oCUIHVuIHNldWwgw6AgbGEgZm9pcywgdG91dGVzIGJhcnJlcyBjb25mb25kdWVzKSA6IGxlIGRlc3NvdXNcbiAgIGRlIGxhIGJhcnJlIHMnZWZmYWNlLCBldCBkYW5zIGxhIHpvbmUgZGUgcHJvZ3Jlc3Npb24gc2V1bCBsJ2VtcGxhY2VtZW50IGFybcOpIHJlc3RlIOKAlCBsdWksXG4gICBjZSBxdSdpbCBjb250aWVudCwgZXQgY2UgcXVpIGxlIGNvbnRpZW50IChzb24gZ3JvdXBlLCBzb24gY2FkcmUsIGxhIGJvw650ZSBkZSBmaW4pLiBUb3V0IGxlXG4gICByZXN0ZSAowqsgU2PDqG5lIHN1aXZhbnRlIMK7IHNpIGMnZXN0IHVuIGJvdXRvbiBkZSBmaW4sIGxhIGJvw650ZSBkZSBmaW4gZW50acOocmUgc2kgYydlc3RcbiAgIMKrIFNjw6huZSBzdWl2YW50ZSDCuywgbGVzIGF1dHJlcyBncm91cGVzIGV0IGxldXIgdHJhaXQsIGxlIHJldG91cikgZGlzcGFyYcOudC4gdmlzaWJpbGl0eSxcbiAgIGphbWFpcyBkaXNwbGF5IDogbGVzIGVtcGxhY2VtZW50cyByZXN0ZW50IHLDqXNlcnbDqXMsIGxhIGJhcnJlIG5lIHNlIHJlY29tcG9zZSBwYXMgw6BcbiAgIGwnZW50csOpZS9zb3J0aWUgZGUgbCfDqXRhcGUgZGUgY29uZmlybWF0aW9uLlxuICAgRXhjZXB0aW9uIDogbGVzIGNhc2VzIGR1IGNhZHJlIGRlIHLDqWdsYWdlIG/DuSB2aXQgbCdlbXBsYWNlbWVudCBhcm3DqSAoW+KIkl0gbiBbK10gw6AgY8O0dMOpXG4gICBkJ8KrIEFqb3V0ZXIgZGVzIHRpcmFnZXMgwrspIHJlc3RlbnQgdmlzaWJsZXMuIEVsbGVzIGRpc2VudCBDRSBRVUUgbCdvbiBjb25maXJtZSA6IGNhY2hlciBsZVxuICAgbm9tYnJlIGF1IG1vbWVudCBkZSBkaXJlIMKrIG91aSDCuyBzdXJwcmVuZCAoZMOpY2lzaW9uIGR1IGNoZWYgZGUgcHJvamV0LCAyMDI2LTEwLTAxKS4gKi9cbmJvZHkuY29uZmlybWF0aW9uQmFycmUgI2RpdkFjdGlvbkNvbnRleHR1ZWxsZXMsXG5ib2R5LmNvbmZpcm1hdGlvbkJhcnJlICN6b25lWm9vbVZ1ZUtpdCxcbmJvZHkuY29uZmlybWF0aW9uQmFycmUgI3pvbmVQcm9ncmVzc0JhciA6bm90KC5jdGFFbXBsYWNlbWVudEFybWUsIC5jdGFFbXBsYWNlbWVudEFybWUgKiwgOmhhcyguY3RhRW1wbGFjZW1lbnRBcm1lKSwgLnJlZ2xhZ2VTY2VuZUdyb3VwZTpoYXMoLmN0YUVtcGxhY2VtZW50QXJtZSkgKikge1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLyogTCdlbXBsYWNlbWVudCBuZSBwb3J0ZSBhdWN1bmUgbWFyZ2UgOiBkYW5zIHVuIGdyb3VwZSwgbCfDqWNhcnQgZW50cmUgZGV1eCBib3V0b25zIGVzdFxuICAgVE9VSk9VUlMgbGUgZ2FwIGR1IGdyb3VwZSAoZMOpY2lzaW9uIGR1IGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTAyKS4gQ2UgcXVpIGRvaXQgc2UgbGlyZVxuICAgw6AgcGFydCBwYXNzZSBwYXIgdW4gc8OpcGFyYXRldXIgKHRyYWl0KSBvdSBwYXIgdW4gY2FkcmUgKC5yZWdsYWdlU2NlbmVHcm91cGUsXG4gICAudG9nZ2xlU2NlbmVHcm91cGUpLCBqYW1haXMgcGFyIHVuZSBtYXJnZSBwb3PDqWUgc3VyIHVuIGJvdXRvbi4gKi9cblxuLyogQW5jaWVuIGRlc2lnbiBkZXMgYm91dG9ucyBkJ2FuaW1hdGlvbiDigJQgZW5jb3JlIHV0aWxpc8OpIHBhciBsYSB0w6lsw6ljb21tYW5kZSAoI3RjQWN0aW9ucyksXG4gICBsZXMgc3RhdGlvbnMgdG91cm5vaSAoU3RhdGlvblRvdXJub2kudHMsIGFuaW1hdGlvbnMgVHJuKikgZXQgbGUga2l0IHB1ciBzYWlzaWVcbiAgIChGb3JtdWxhaXJlLnRzKS4gw4AgbWlncmVyIHZlcnMgLmN0YTE0IGRhbnMgdW4gbG90IHVsdMOpcmlldXIgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4IDpcbiAgIHN0cmljdGVtZW50IGxlcyA0IGJhcnJlcyBwb3VyIGNlIGxvdCkuICovXG4uYnRuU2NlbmUge1xuICAgIHBhZGRpbmc6IDZweCAxNnB4O1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ3RhKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY0N0YVRleHRlKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMsIGNvbG9yIDAuMnMsIGJvcmRlci1jb2xvciAwLjJzO1xufVxuXG4uYnRuU2NlbmU6ZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgICBjdXJzb3I6IGF1dG87XG59XG5cbi5idG5TY2VuZVByaW1haXJlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb3VsZXVyQ3RhLCB2YXIoLS1jQWNjZW50MykpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY291bGV1ckN0YSwgdmFyKC0tY0FjY2VudDMpKTtcbiAgICBjb2xvcjogdmFyKC0tY291bGV1ckN0YVRleHRlLCB2YXIoLS1jQWNjZW50dCkpO1xufVxuXG4vKiBMZSBmb25kIHN1aXQgbGUgdGjDqG1lIGV0IG5vbiB1biBibGFuYyBlbiBkdXIgOiBzdXIgdW4gdGjDqG1lIHNvbWJyZSwgbGEgY291bGV1ciBkJ2FjdGlvblxuICAgZXN0IGNsYWlyZSwgZXQgdW4gYm91dG9uIGJsYW5jIGx1aSBkb25uZXJhaXQgMywxOjEg4oCUIHNvdXMgbGUgc2V1aWwgQUEuICovXG4uYnRuU2NlbmVTZWNvbmRhaXJlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb3VsZXVyRm9uZCwgdmFyKC0tY0JsYW5jKSk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb3VsZXVyQ3RhLCB2YXIoLS1jQWNjZW50MykpO1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyQ3RhLCB2YXIoLS1jQWNjZW50MykpO1xufVxuXG4uYnRuU2NlbmVEYW5nZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNSb3VnZTMpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY1JvdWdlMyk7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG59XG5cbi5idG5TY2VuZUluZm8ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbn1cblxuLyogVW4gbGliZWxsw6kgbmUgc2UgcGxpZSBKQU1BSVMgZGFucyBzb24gYm91dG9uIDogZmF1dGUgZGUgbGFyZ2V1ciwgYydlc3QgbGEgYmFycmUgcXVpIHNlXG4gICBwbGllLCBwYXIgY3JhbnMuIEFkYXB0YXRpb25CYXJyZS50cyBtZXN1cmUgdW4gZMOpYm9yZGVtZW50IOKAlCB1biB0ZXh0ZSByZXBsacOpIHN1ciBkZXV4XG4gICBsaWduZXMgbidlbiBmYWl0IGF1Y3VuLCBldCBhdWN1biBjcmFuIG5lIHNlIGTDqWNsZW5jaGVyYWl0LiAqL1xuI2JhcnJlUGlsb3RhZ2UgLmN0YTE0LFxuI2JhcnJlUGlsb3RhZ2UgLnRvZ2dsZVNjZW5lQnRuIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4vKiBDb250ZW5ldXIgZGVzIGdyb3VwZXMg4oCUIGhvcml6b250YWwsIHN1ciB1bmUgbGlnbmUgOiBjJ2VzdCBjZSBkw6lib3JkZW1lbnQgcXVlIG1lc3VyZVxuICAgQWRhcHRhdGlvbkJhcnJlLnRzIHBvdXIgcG9zZXIgc2VzIGNyYW5zLiBMZSByZXRvdXIgw6AgbGEgbGlnbmUgZXN0IGxlIGRlcm5pZXIgZCdlbnRyZSBldXguICovXG4jZGl2QWN0aW9uQ29udGV4dHVlbGxlcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgIGdhcDogMTZweDsgLyogc3ltw6l0cmlxdWUgZHUgcGFkZGluZy1yaWdodCBkZXMgZ3JvdXBlcyA6IGxhIGJvcmR1cmUgcmVzcGlyZSBkZXMgZGV1eCBjw7R0w6lzICovXG59XG5cbi8qIENyYW4gwqsgZGV1eCBsaWduZXMgwrsgOiBsZXMgZ3JvdXBlcyBwYXNzZW50IMOgIGxhIGxpZ25lLiBFbnRyZSBkZXV4IGxpZ25lcywgbCfDqWNhcnQgbW95ZW4g4oCUXG4gICBkZSBxdW9pIGxvZ2VyIGxlIHRpdHJlIGQndW4gY2FkcmUgKC50b2dnbGVTY2VuZVRpdHJlLCBob3JzIGZsdXggYXUtZGVzc3VzIGRlIHNvblxuICAgZ3JvdXBlKSBzYW5zIGxlIHRyb3UgZGVzIDE2cHggcHLDqXZ1cyBwb3VyIGxhIGxhcmdldXIuICovXG4jYmFycmVQaWxvdGFnZS5iYXJyZURldXhMaWduZXMgI2RpdkFjdGlvbkNvbnRleHR1ZWxsZXMge1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICByb3ctZ2FwOiB2YXIoLS1nYXBNb3llbik7XG59XG5cbi8qIEdyb3VwZXMgZGUgYm91dG9ucyAoc8OpcGFyw6lzIHBhciBib3JkdXJlIGRyb2l0ZSkgKi9cbi5kaXZBY3Rpb25TY2VuZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xuICAgIC8qIExFIHRyYWl0IDogbGUgbcOqbWUgZGFucyBsYSBiYXJyZSBkZSBwaWxvdGFnZSBldCBsYSBiYXJyZSBkJ2FwZXLDp3UsIGV0IGRlIGNlIGdyaXMtbMOgIOKAlFxuICAgICAgIGxlIGNsYWlyIGQnYXZhbnQgbmUgc2Ugdm95YWl0IHBhcyAoZMOpY2lzaW9uIGR1IGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTE2KS4gKi9cbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jTm9pcjQpO1xufVxuXG4uZGl2QWN0aW9uU2NlbmU6bGFzdC1jaGlsZCB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgVG9nZ2xlIGFuaW1hdGlvbiAoY2hvaXggZXhjbHVzaWYpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4udG9nZ2xlU2NlbmVHcm91cGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC8qIExlcyBwbGFucyBpbnRlcm5lcyBkdSB0b2dnbGUgKGluZGljYXRldXIgMCwgYm91dG9ucyAxKSByZXN0ZW50IGNvbmZpbsOpcyBhdSBncm91cGUgOlxuICAgICAgIHNhbnMgY2VsYSwgbGVzIGJvdXRvbnMgbW9udGFpZW50IGRhbnMgbCfDqWNoZWxsZSBkZSBsYSBiYXJyZSBkZSBwaWxvdGFnZSBldCBwYXNzYWllbnRcbiAgICAgICBhdS1kZXNzdXMgZGUgc29uIHZvaWxlICgjYmFycmVQaWxvdGFnZTo6YmVmb3JlLCB6IDEg4oCUIF9iYXJyZUZpbi5jc3MpLiAqL1xuICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4vKiBIb3JzIGZsdXggOiBsZSB0aXRyZSBuZSByw6lzZXJ2ZSBhdWN1bmUgaGF1dGV1ciwgaWwgbmUgZG9pdCBwYXMgZ8OqbmVyIGxhIGxlY3R1cmUgZGUgbGEgYmFycmUgKi9cbi50b2dnbGVTY2VuZVRpdHJlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAycHg7XG4gICAgbGVmdDogM3B4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG4gICAgZm9udDogdmFyKC0tZk1pbmkxMSk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnRvZ2dsZVNjZW5lSW5kaWNhdGV1ciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMSk7XG4gICAgdHJhbnNpdGlvbjogbGVmdCAwLjM1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgICAgICAgICAgICAgIHdpZHRoIDAuMzVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1cyAwLjM1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xuICAgIHotaW5kZXg6IDA7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIHZhcigtLWNOb2lyMSk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi50b2dnbGVTY2VuZUJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0N0YTE0KTsgLyogbcOqbWUgaGF1dGV1ciBxdWUgbGVzIGN0YSBkZSBsYSBiYXJyZSBkJ2FjdGlvbnMgKi9cbiAgICBib3JkZXI6IG5vbmU7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLnRvZ2dsZVNjZW5lQnRuOmhvdmVyOm5vdCguc2VsZWN0aW9ubmUpOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLnRvZ2dsZVNjZW5lQnRuLnNlbGVjdGlvbm5lIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi50b2dnbGVTY2VuZUJ0bjpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuLyogR3JvdXBlIHF1aSBuJ29mZnJlIHBsdXMgZGUgY2hvaXggKGF1IHBsdXMgdW4gYm91dG9uIGFjdGlmLCBvdSBmaWfDqSBwYXIgdmVycm91aWxsZXJDaG9peCkgKi9cbi50b2dnbGVTY2VuZUdyb3VwZS5zYW5zQ2hvaXggLnRvZ2dsZVNjZW5lQnRuLFxuLnRvZ2dsZVNjZW5lR3JvdXBlLnNhbnNDaG9peCAudG9nZ2xlU2NlbmVJbmRpY2F0ZXVyIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG59XG5cbi50b2dnbGVTY2VuZUdyb3VwZS5zYW5zQ2hvaXggLnRvZ2dsZVNjZW5lQnRuIHtcbiAgICBjdXJzb3I6IGF1dG87XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgR3JvdXBlIGRlIHLDqWdsYWdlIChb4oiSXVviiJJdW3ZhbGV1cl1bK11bK10pXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBDYWRyZSA6IG3Dqm1lIGZvbmQgcXVlIGxlcyBncm91cGVzIGRlIHRvZ2dsZXMg4oCUIGMnZXN0IGx1aSBxdWkgZmFpdCBsaXJlIGxlcyBjaW5xIGNhc2VzXG4gICBjb21tZSBVTiBncm91cGUsIGTDqXRhY2jDqSBkZSBzZXMgdm9pc2lucyAobG9pIGRlIHByb3hpbWl0w6kpLiBBbmNyZSBkdSB0aXRyZSBhYnNvbHVcbiAgICgudG9nZ2xlU2NlbmVUaXRyZSwgaG9ycyBmbHV4IOKAlCBtw6ptZSBwcmluY2lwZSBxdWUgbGVzIHRvZ2dsZXMpLiAqL1xuLnJlZ2xhZ2VTY2VuZUdyb3VwZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgcGFkZGluZzogMnB4IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLyogQm91dG9ucyDCsSA6IGNhcnLDqXMg4oCUIGxhIHJlY2V0dGUgZGVzIGJvdXRvbnMgZGUgem9vbSAoc8OpbGVjdGV1ciDDqWxhcmdpIGRhbnNcbiAgIF9zdHVkaW9JbnRlZ3JlZS5jc3MpLiBPbiBuZXV0cmFsaXNlIGxlIHBhZGRpbmcgZGUgbGEgc2lsaG91ZXR0ZSAuY3RhMTQsIHNpbm9uIGxlXG4gICBjYXJyw6kgMjjDlzI4IG4nYSBwbHVzIGRlIHBsYWNlIHBvdXIgc29uIGdseXBoZS4gKi9cbi5yZWdsYWdlU2NlbmVHcm91cGUgLmN0YUVjcmFuU2Vjb25kYWlyZSB7XG4gICAgcGFkZGluZzogMDtcbn1cblxuLyogTGEgY2FzZSBkZSBsYSB2YWxldXIgOiBQQVMgdW4gYm91dG9uIOKAlCBhdWN1biBlbnRvdXJhZ2UsIGxhIHZhbGV1ciBudWUgcG9zw6llIHN1ciBsZVxuICAgZm9uZCBkdSBncm91cGUuIFBsdXMgbGFyZ2UgcXVlIGxlcyBjYXJyw6lzLCBqYW1haXMgY2FycsOpZS4gTCd1bml0w6kgdml0IGRhbnMgbGUgdGl0cmUuXG4gICBDaGlmZnJlcyBkZSBtw6ptZSBjaGFzc2UgZXQgbGFyZ2V1ciBkZSBxdWF0cmUgY2hpZmZyZXMgKDM2MDAgZXN0IGxlIHBsYWZvbmQgZHUgZMOpbGFpKSA6XG4gICBsYSB2YWxldXIgY2hhbmdlIMOgIGNoYXF1ZSBhcHB1aSwgbGEgY2FzZSBuZSBkb2l0IGphbWFpcyBib3VnZXIgbmkgcG91c3NlciBzZXMgdm9pc2lucy4gKi9cbi5yZWdsYWdlU2NlbmVHcm91cGUgLmN0YUVjcmFuSW5mbyB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWluLXdpZHRoOiA0Y2g7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG59XG5cbi5yZWdsYWdlU2NlbmVHcm91cGUgLmN0YUVjcmFuSW5mbzpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQlVMTEUgREUgQ09ORklSTUFUSU9OIChCdWxsZUNvbmZpcm1hdGlvbi50cylcbiAgIExlIGdlc3RlIMKrIMOKdGVzLXZvdXMgc8O7ciA/IMK7IGRlcyBiYXJyZXMgZHUgYmFzIOKAlCBkw6ljaXNpb24gZHUgY2hlZiBkZSBwcm9qZXQsXG4gICAyMDI2LTA5LTAyLCBzdXIgbWFxdWV0dGUuIFRvdXQgZXN0IExJTsOJQUlSRSA6IGF1Y3VuZSBhY2PDqWzDqXJhdGlvbi5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIEwnZW1wbGFjZW1lbnQgKC5jdGFFbXBsYWNlbWVudCwgX3NjZW5lQm91dG9ucy5jc3MpIGVzdCB1bmUgY2VsbHVsZSBkZSBncmlsbGUgb8O5IGxlIGJvdXRvblxuICAgZGUgcmVwb3MgZXQgbGUgYm91dG9uIGRlIGNvbmZpcm1hdGlvbiBzZSBzdXBlcnBvc2VudCwgw6AgbGEgbcOqbWUgdGFpbGxlLiBMYSBidWxsZSwgZWxsZSxcbiAgIHZpdCBkYW5zIGxlIEJPRFksIGVuIHBvc2l0aW9uIGZpeGUsIGRhbnMgc29uIHByb3ByZSBwbGFuIGR1IGNocm9tZSAow6ljaGVsbGUgZGVcbiAgIHNhbGxlRWNyYW4uY3NzKSA6IGRhbnMgbGEgYmFycmUsIGVsbGUgcmVzdGVyYWl0IHNvdXMgbGEgYmFycmUgZGUgbCdhcGVyw6d1LiBFbGxlIGVzdFxuICAgcG9zw6llIHN1ciBsZSBib3V0b24gcGFyIHNlcyBjb29yZG9ubsOpZXMgKEJ1bGxlQ29uZmlybWF0aW9uLnRzKSBldCBuZSBjb8O7dGUgcGFzIHVuIHBpeGVsXG4gICBkZSBsYXJnZXVyIG5pIGRlIGhhdXRldXIgw6AgbGEgYmFycmUuIExhIGJhcnJlIMOpdGFudCBlbiBiYXMgZGUgbCfDqWNyYW4sIGxhIGJ1bGxlIHMnb3V2cmVcbiAgIHZlcnMgbGUgaGF1dCwgcGFyLWRlc3N1cyBsYSBzY8OobmUg4oCUIGxhIGxhcmdldXIgbWFucXVlIHRvdWpvdXJzIGRhbnMgY2VzIGJhcnJlcywgbGFcbiAgIGhhdXRldXIgbm9uLiAqL1xuXG4vKiBMZSBib3V0b24gZGUgcmVwb3MsIGFybcOpIDogaWwgbmUgZmFpdCBwbHVzIHF1ZSB0ZW5pciBzYSBwbGFjZSBldCBzYSBsYXJnZXVyIGRhbnMgbGFcbiAgIGJhcnJlLCBzb3VzIGxlIHZlcnJlLiBTb24gdGV4dGUgcydlZmZhY2Ug4oCUIGxlIGxpYmVsbMOpIGVzdCBtb250w6kgZGFucyBsYSBidWxsZS4gKi9cbi5jdGFFbXBsYWNlbWVudCA+IC5jdGFSZXBvcyB7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiBMZSBib3V0b24gZGUgY29uZmlybWF0aW9uIDogbcOqbWUgY2VsbHVsZSwgZG9uYyBleGFjdGVtZW50IGwnZW1wcmVpbnRlIGR1IGJvdXRvbiBkZSByZXBvcy5cbiAgIElsIGFwcGFyYcOudCBhcHLDqHMgbCdvdXZlcnR1cmUgZGUgbGEgYnVsbGUgKDAsMSBzKSwgZW4gMCwxIHMuIElsIGVzdCBzb3VzIGxhIHNvdXJpcyBkw6hzXG4gICBsJ2FybWVtZW50IChsYSBtYWluIG5lIHJlZGV2aWVudCBwYXMgdW5lIGZsw6hjaGUpIDsgbGUgY2xpYyB0cm9wIHTDtHQgZXN0IGlnbm9yw6kgcGFyIGxlXG4gICBzY3JpcHQgKGFudGktZG91YmxlLWNsaWMpLCBwYXMgcGFyIGxlIENTUy4gKi9cbi5jdGFFbXBsYWNlbWVudCA+IC5jdGFDb25maXJtYXRpb24ge1xuICAgIHotaW5kZXg6IDI7XG4gICAgYW5pbWF0aW9uOiBidWxsZUNvbmZpcm1hdGlvbkFwcGFyaXRpb24gLjFzIGxpbmVhciAuMXMgYm90aDtcbn1cblxuQGtleWZyYW1lcyBidWxsZUNvbmZpcm1hdGlvbkFwcGFyaXRpb24ge1xuICAgIGZyb20geyBvcGFjaXR5OiAwOyB9XG4gICAgdG8gICB7IG9wYWNpdHk6IDE7IH1cbn1cblxuLyogTGUgZG91YmxlIGVuIHZlcnJlIGR1IGJvdXRvbi4gTmHDrnQgRVhBQ1RFTUVOVCBzdXIgbHVpIChjb29yZG9ubsOpZXMgcG9zw6llcyBwYXIgbGUgc2NyaXB0KSxcbiAgIHB1aXMgcydvdXZyZSAoLmV0ZW5kdWUgOiBub3V2ZWxsZXMgY29vcmRvbm7DqWVzLCBtw6ptZXMgdHJhbnNpdGlvbnMpLiAtLWggOiBsYSBoYXV0ZXVyIGR1XG4gICBib3V0b24sIHBvc8OpZSBwYXIgbGUgc2NyaXB0LiAqL1xuLmJ1bGxlQ29uZmlybWF0aW9uIHtcbiAgICAtLWJ1bGxlRm9uZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNjUpO1xuICAgIC0tYnVsbGVGbG91OiAycHg7XG4gICAgLS1jQ29uZmlybWF0aW9uOiB2YXIoLS1jTm9pcik7ICAgICAgICAgIC8qIHBhc3NhZ2UgKFRlcm1pbmVyKSA6IG5vaXIgKi9cbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogOTk5OTI1OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1LWRlc3N1cyBkZSBsYSBiYXJyZSBkZSBsJ2FwZXLDp3UgKDk5OTkyMikgKi9cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJ1bGxlRm9uZCk7XG4gICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIodmFyKC0tYnVsbGVGbG91KSkgc2F0dXJhdGUoMS40KTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIodmFyKC0tYnVsbGVGbG91KSkgc2F0dXJhdGUoMS40KTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jT21icmUpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlUG9ydGVlKTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiB0b3AgLjFzIGxpbmVhciwgbGVmdCAuMXMgbGluZWFyLCB3aWR0aCAuMXMgbGluZWFyLCBoZWlnaHQgLjFzIGxpbmVhcixcbiAgICAgICAgICAgICAgICBwYWRkaW5nIC4xcyBsaW5lYXI7XG59XG5cbi5idWxsZUNvbmZpcm1hdGlvbi5kYW5nZXIge1xuICAgIC0tY0NvbmZpcm1hdGlvbjogdmFyKC0tY1JvdWdlMyk7ICAgICAgICAgLyogZ2VzdGUgZGFuZ2VyZXV4IChhbm51bGVyLCBham91dGVyKSA6IHJvdWdlICovXG59XG5cbi8qIExhIGxpZ25lIGR1IGxpYmVsbMOpIDogbGEgaGF1dGV1ciBkdSBib3V0b24sIGxlIHRleHRlIGNlbnRyw6kgZGVkYW5zLiBBdSBkw6lwYXJ0IGVsbGUgcmVtcGxpdFxuICAgbGEgYnVsbGUgOyDDoCBsJ2Fycml2w6llIGVsbGUgZXN0IGVuIGhhdXQuICovXG4uYnVsbGVDb25maXJtYXRpb25MaWJlbGxlIHtcbiAgICBoZWlnaHQ6IHZhcigtLWgpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLyogT3V2ZXJ0ZSA6IDVweCBkZSB0b3VyIGVuIGJhcyBldCBzdXIgbGVzIGPDtHTDqXMuIERlIGJhcyBlbiBoYXV0IDogbGUgYm91dG9uLCAycHgsIGxhIG3DqGNoZVxuICAgKDJweCksIDVweCwgbGEgbGlnbmUgZHUgbGliZWxsw6ksIDVweC4gw4AgbCdlbmRyb2l0IGR1IGJvdXRvbiwgbGEgYnVsbGUgZXN0IETDiUNPVVDDiUUgOiBsZVxuICAgYm91dG9uIGRlIGNvbmZpcm1hdGlvbiwgcmVzdMOpIGRhbnMgbGEgYmFycmUgKHVuIHBsYW4gcGx1cyBiYXMpLCBzZSB2b2l0IG5ldCDDoCB0cmF2ZXJzIGxlXG4gICB0cm91LiBMZSBtYXNxdWUgOiB0b3V0ZSBsYSBidWxsZSwgbW9pbnMgbGUgcmVjdGFuZ2xlIGR1IGJvdXRvbiAoNXB4IGRlcyBib3JkcywgNXB4IGR1XG4gICBiYXMsIGhhdXQgZGUgLS1oKS4gKi9cbi5idWxsZUNvbmZpcm1hdGlvbi5ldGVuZHVlIHtcbiAgICBwYWRkaW5nLXRvcDogNXB4O1xuICAgIC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KCMwMDAsICMwMDApLCBsaW5lYXItZ3JhZGllbnQoIzAwMCwgIzAwMCk7XG4gICAgLXdlYmtpdC1tYXNrLXNpemU6IDEwMCUgMTAwJSwgY2FsYygxMDAlIC0gMTBweCkgdmFyKC0taCk7XG4gICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAwIDAsIDVweCBjYWxjKDEwMCUgLSA1cHgpO1xuICAgIC13ZWJraXQtbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAtd2Via2l0LW1hc2stY29tcG9zaXRlOiB4b3I7XG4gICAgbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KCMwMDAsICMwMDApLCBsaW5lYXItZ3JhZGllbnQoIzAwMCwgIzAwMCk7XG4gICAgbWFzay1zaXplOiAxMDAlIDEwMCUsIGNhbGMoMTAwJSAtIDEwcHgpIHZhcigtLWgpO1xuICAgIG1hc2stcG9zaXRpb246IDAgMCwgNXB4IGNhbGMoMTAwJSAtIDVweCk7XG4gICAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBtYXNrLWNvbXBvc2l0ZTogZXhjbHVkZTtcbn1cblxuLyogTGEgbcOoY2hlIDoganVzdGUgYXUtZGVzc3VzIGR1IGJvdXRvbiwgw6AgMnB4LCBkJ3VuIGJvcmQgw6AgbCdhdXRyZSwgZGUgbGEgY291bGV1ciBkZSBsYVxuICAgY29uZmlybWF0aW9uLiBFbGxlIHNlIGNvbnN1bWUgZGUgZHJvaXRlIMOgIGdhdWNoZSwgbGluw6lhaXJlLCBsZSB0ZW1wcyBkdSBkw6lsYWlcbiAgIGQnYXJtZW1lbnQgbW9pbnMgbCdvdXZlcnR1cmUgKC0tZHVyZWVNZWNoZSwgcG9zw6llIHBhciBsZSBzY3JpcHQpLiAqL1xuLmJ1bGxlQ29uZmlybWF0aW9uOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IGNhbGModmFyKC0taCkgKyA3cHgpO1xuICAgIGxlZnQ6IDVweDsgcmlnaHQ6IDVweDtcbiAgICBoZWlnaHQ6IDJweDtcbiAgICBib3JkZXItcmFkaXVzOiAxcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0NvbmZpcm1hdGlvbik7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBjZW50ZXI7XG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMSk7XG4gICAgb3BhY2l0eTogMDtcbn1cblxuLmJ1bGxlQ29uZmlybWF0aW9uLmV0ZW5kdWU6OmJlZm9yZSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBhbmltYXRpb246IGJ1bGxlQ29uZmlybWF0aW9uTWVjaGUgdmFyKC0tZHVyZWVNZWNoZSkgbGluZWFyIC4ycyBmb3J3YXJkcztcbn1cblxuQGtleWZyYW1lcyBidWxsZUNvbmZpcm1hdGlvbk1lY2hlIHtcbiAgICBmcm9tIHsgdHJhbnNmb3JtOiBzY2FsZVgoMSk7IH1cbiAgICB0byAgIHsgdHJhbnNmb3JtOiBzY2FsZVgoMCk7IH1cbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCT1VUT04gREUgRkVSTUVUVVJFICgubW9kYWxlQ2xvc2UpIOKAlCBzb3VyY2UgdW5pcXVlIChkb2NzL2Rlc2lnblN5c3RlbS9ib3V0b25GZXJtZXR1cmUubWQpXG5cbiAgIExhIGNyb2l4IGVzdCBkZXNzaW7DqWUgcGFyIDo6YmVmb3JlIChtYXNrIFNWRyBjaS1kZXNzb3VzKSA6IGVuIEhUTUwgbGUgYm91dG9uIHJlc3RlIFZJREUg4oCUXG4gICBuZSBKQU1BSVMgeSBtZXR0cmUgw5cgLyAmdGltZXM7IC8gdGV4dGUuIFLDqXV0aWxpc2FibGUgOiBWSURFID0gY3JvaXggY2VudHLDqWUgOyBhdmVjIHVuXG4gICBlbmZhbnQgLm1vZGFsZUNsb3NlVGV4dGUgPSBsYSBtw6ptZSBib8OudGUgcyfDqWxhcmdpdCBldCB1biBsaWJlbGzDqSBzJ2Fqb3V0ZSDDoCBHQVVDSEUgZGUgbGFcbiAgIGNyb2l4IChleC4gwqsgUHJlbmRyZSBsYSBtYWluIOKclSDCuykuIFBhcyBkZSBwYWRkaW5nIGhvcml6b250YWwgOiBsYSBjcm9peCBhIGTDqWrDoCB+NnB4IGRlXG4gICBtYXJnZSBpbnRlcm5lIMOgIGRyb2l0ZSAobWFzayA24oaSMTggc3VyIHZpZXdCb3ggMjQpLCBjJ2VzdCAubW9kYWxlQ2xvc2VUZXh0ZSBxdWkgcmVkb25uZVxuICAgbGUgbcOqbWUgYWlyIMOgIGdhdWNoZSDihpIgw6lxdWlsaWJyw6kuXG5cbiAgIEljaSBsYSBzaWxob3VldHRlIEfDiU7DiVJBTEUgKGJvw650ZSBzb3VwbGUsIGNyb2l4IDIwcHgg4oCUIGJhcnJlIGQnYXBlcsOndSDDqWNyYW4pLiBMZXNcbiAgIGNvbnRleHRlcyBuJ8OpY3JpdmVudCBxdWUgbGV1cnMgw6ljYXJ0cywgQVBSw4hTIGxldXIgQGltcG9ydCBkZSBjZSBmaWNoaWVyIDpcbiAgIC0gbW9kYWxlcyBTdHVkaW8gKDU2X3NjZW5hcmlvL19tb2RhbGUuY3NzKSA6IGJvw650ZSBmaXhlIDQ0w5c0NCwgY3JvaXggMjQgO1xuICAgLSBzdXJjb3VjaGUgYXBlcsOndSAoY29tcG9zYW50cy9zdXJjb3VjaGVQcmV2aWV3LmNzcykgOiBpZGVtICsgbWFzcXVlIMKrIHBsZWluIMOpY3JhbiDCuy5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5tb2RhbGVDbG9zZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1pbi13aWR0aDogMjVweDtcbiAgICBwYWRkaW5nOiB2YXIoLS1nYXBEZWZhdXQpIHZhcigtLWdhcFJlZHVpdCk7IC8qIHZlcnRpY2FsIGFsaWduw6kgc3VyIC5jdGExNCAobcOqbWUgcnl0aG1lIGRhbnMgbGEgYmFycmUgYXBlcsOndSkgKi9cbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xufVxuXG4ubW9kYWxlQ2xvc2U6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgb3JkZXI6IDE7IC8qIGNyb2l4IMOgIGRyb2l0ZSBkJ3VuIMOpdmVudHVlbCAubW9kYWxlQ2xvc2VUZXh0ZSAoc2V1bGUgPSBjZW50csOpZSwgaW5jaGFuZ8OpKSAqL1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hc2s6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NsaW5lIHgxPScxOCcgeTE9JzYnIHgyPSc2JyB5Mj0nMTgnLyUzRSUzQ2xpbmUgeDE9JzYnIHkxPSc2JyB4Mj0nMTgnIHkyPScxOCcvJTNFJTNDL3N2ZyUzRVwiKSBjZW50ZXIgLyBjb250YWluIG5vLXJlcGVhdDtcbiAgICAtd2Via2l0LW1hc2s6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NsaW5lIHgxPScxOCcgeTE9JzYnIHgyPSc2JyB5Mj0nMTgnLyUzRSUzQ2xpbmUgeDE9JzYnIHkxPSc2JyB4Mj0nMTgnIHkyPScxOCcvJTNFJTNDL3N2ZyUzRVwiKSBjZW50ZXIgLyBjb250YWluIG5vLXJlcGVhdDtcbn1cblxuLm1vZGFsZUNsb3NlOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi8qIExpYmVsbMOpIG9wdGlvbm5lbCDDoCBnYXVjaGUgZGUgbGEgY3JvaXggKGNmLiBlbi10w6p0ZSkuIExlIHBhZGRpbmcgZ2F1Y2hlIGRvbm5lIGF1IHRleHRlXG4gICBsZSBtw6ptZSBhaXIgKH42cHgpIHF1ZSBsYSBtYXJnZSBpbnRlcm5lIGRlIGxhIGNyb2l4IMOgIGRyb2l0ZSDihpIgdmlzdWVsbGVtZW50IMOpcXVpbGlicsOpLiAqL1xuLm1vZGFsZUNsb3NlVGV4dGUge1xuICAgIHBhZGRpbmctbGVmdDogdmFyKC0tZ2FwUmVkdWl0KTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTsgLyogbcOqbWUgdGVpbnRlIHF1ZSBsYSBjcm9peCAqL1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIExFIEPFklVSIMKrIEonQUlNRSDCuyBFVCBTT04gQ09NUFRFVVIg4oCUIGJyaXF1ZSBub3lhdSBfamFpbWUudHdpZywgVml0cmluZSBjb21tZSBTdHVkaW9cbiAgIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xMilcblxuICAgUXVhdHJlIMOpdGF0cywgZmHDp29uIFgsIHRvdXMgaWNpIGV0IG51bGxlIHBhcnQgYWlsbGV1cnMgOlxuICAgICAxLiDDqXRlaW50ICAgICAgICAgICAg4oCUIGNvbnRvdXIgZ3JpcywgY2hpZmZyZSBncmlzIDtcbiAgICAgMi4gc3Vydm9sIChhY3RpZikgICAg4oCUIGPFk3VyIGV0IGNoaWZmcmUgZW4gcm91Z2UsIHVuIGRpc3F1ZSBww6JsZSBkZXJyacOocmUgbGUgY8WTdXIgO1xuICAgICAzLiBhbGx1bcOpICAgICAgICAgICAg4oCUIGPFk3VyIFBMRUlOLCByb3VnZSwgdW4gcGV1IHBsdXMgZ3JhbmQg4oCUIHVuIHBldSBzZXVsZW1lbnQsIMOnYSBzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvdWUgw6AgdHLDqHMgcGV1IChjaGVmIGRlIHByb2pldCkgO1xuICAgICA0LiBhbGx1bcOpIGF1IHN1cnZvbCAg4oCUIGxlIG3Dqm1lLCBhdmVjIGxlIGRpc3F1ZSBww6JsZS5cbiAgIFBsdXMgbCdpbmFjdGlmIChgZGlzYWJsZWRgKSA6IGxlIHZpc2l0ZXVyIG5vbiBjb25uZWN0w6kgdm9pdCBsZSBjxZN1ciBldCBsZSBub21icmUsIGlsIG5lXG4gICBwZXV0IHBhcyB5IHRvdWNoZXIuIE5pIHN1cnZvbCwgbmkgY3Vyc2V1ciwgZXQgw4AgTU9JVEnDiSBFU1RPTVDDiSAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0XG4gICAyMDI2LTA5LTE2LCBxdWkgZMOpZmFpdCBsZSDCqyBwYXMgZ3Jpc8OpIMK7IGR1IDIwMjYtMDktMTIpIDogdW4gY8WTdXIgcGxlaW4gZXQgbmV0IHNlIGxpdCBjb21tZVxuICAgdW5lIGNvbW1hbmRlLCBldCBsZSB2aXNpdGV1ciBkw6ljb25uZWN0w6kgY2xpcXVhaXQgZGVzc3VzIHNhbnMgY29tcHJlbmRyZSBwb3VycXVvaSByaWVuIG5lXG4gICBzZSBwYXNzYWl0LlxuXG4gICBMZSByb3VnZSBlc3QgY2VsdWkgZHUgY8WTdXIgKC0tY0NvZXVyMywgLS1jQ29ldXIwIHBvdXIgbGUgc3Vydm9sLCAxMF9mb250LmNzcykgOiB1biByb3VnZVxuICAgc2FuZywgYm9yZGVhdXggZm9uY8OpLCDDoCBsdWkg4oCUIGxlIHJvdWdlIGRlIGxhIGZhbWlsbGUgLS1jUm91Z2UgZGl0IGwnYWxlcnRlIGV0IGxlIGRhbmdlcixcbiAgIHBhcyBsJ2FmZmVjdGlvbiAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTYsIHF1aSByZW1wbGFjZSBsZSAtLWNSb3VnZTMgZHUgMTIpLlxuICAgQXVjdW5lIGNvdWxldXIgZW4gZHVyIChkb2NzL2Rlc2lnblN5c3RlbS9jb3VsZXVycy5tZCkuXG5cbiAgIExlIGJvdXRvbiBuZSBwb3NlIG5pIGJvcmR1cmUgbmkgZm9uZCA6IGMnZXN0IHVuZSBpY8O0bmUgZXQgdW4gY2hpZmZyZSBwb3PDqXMgw6AgbcOqbWUgbGEgcGFnZSxcbiAgIGNvbW1lIGxlIGxpZW4gwqsgRW4gc2F2b2lyIHBsdXMgwrsgZCd1bmUgdHVpbGUgKC5saWVuU2NlbmVQbHVzKS4gUGFkZGluZyA6IC0tZ2FwUmVkdWl0LCBsYVxuICAgbcOqbWUgdmFyaWFibGUgcXVlIGNlIGxpZW4g4oCUIHVuZSB2YWxldXIgbm9tbcOpZSwgamFtYWlzIHVuIGNoaWZmcmUgKGFzc2V0cy92aXRyaW5lL2Nzcy9DTEFVREUubWQpLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi50b2dnbGVKYWltZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgcGFkZGluZzogdmFyKC0tZ2FwUmVkdWl0KSAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAvKiBgb3BhY2l0eWAgOiBsZSBwYXNzYWdlIGRlIDI1ICUgw6AgNTAgJSBvdSDDoCAxMDAgJSwgcXVhbmQgbGEgcsOpcG9uc2UgZGUgZmluIGRlIHBhZ2VcbiAgICAgICBhcnJpdmUsIHNlIGZhaXQgZW4gZm9uZHUgZXQgbm9uIGQndW4gY291cCDigJQgbGUgY8WTdXIgbmUgY2xpZ25vdGUgcGx1cyAoZMOpY2lzaW9uIGNoZWYgZGVcbiAgICAgICBwcm9qZXQgMjAyNi0wOS0xNikuIGBjb2xvcmAgOiBsZSBzdXJ2b2wsIGNvbW1lIGF2YW50LiAqL1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMsIG9wYWNpdHkgMC40cztcbn1cblxuLyogTGUgZGlzcXVlIHDDomxlIGR1IHN1cnZvbCBlc3QgdW4gcHNldWRvLcOpbMOpbWVudCBkZXJyacOocmUgbGUgY8WTdXIgOiBsZSBjxZN1ciByZXN0ZSDDoCBzYVxuICAgcGxhY2UsIHNldWwgbGUgZm9uZCBhcHBhcmHDrnQuIGBpc29sYXRpb25gICsgYHotaW5kZXhgIHBvdXIgcXUnaWwgcGFzc2UgREVSUknDiFJFIGxlIHRyYWPDqVxuICAgZHUgY8WTdXIgc2FucyBzb3J0aXIgZHUgYm91dG9uLiAqL1xuLnRvZ2dsZUphaW1lQ29ldXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgZmxleDogbm9uZTtcbiAgICB3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgZmlsbDogbm9uZTtcbiAgICBzdHJva2U6IGN1cnJlbnRDb2xvcjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gICAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycywgZmlsbCAwLjJzLCBzdHJva2UgMC4ycztcbn1cblxuLnRvZ2dsZUphaW1lQ29ldXI6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IC0xO1xuICAgIGluc2V0OiAtOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ29ldXIwKTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycztcbn1cblxuLyogTGUgY2hpZmZyZSBuZSByw6lzZXJ2ZSBhdWN1bmUgbGFyZ2V1ciA6IMOgIHrDqXJvIGlsIGVzdCB2aWRlLCBsZSBjxZN1ciBlc3Qgc2V1bC4gKi9cbi50b2dnbGVKYWltZU5vbWJyZSB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbn1cblxuLyogMiDigJQgc3Vydm9sLCBib3V0b24gQUNUSUYgc2V1bGVtZW50ICovXG4udG9nZ2xlSmFpbWU6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jQ29ldXIzKTtcbn1cblxuLnRvZ2dsZUphaW1lOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIC50b2dnbGVKYWltZUNvZXVyOjpiZWZvcmUge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi8qIDMg4oCUIGFsbHVtw6kgOiBjxZN1ciBwbGVpbiwgw6AgcGVpbmUgcGx1cyBncmFuZCAqL1xuLnRvZ2dsZUphaW1lW2FyaWEtcHJlc3NlZD1cInRydWVcIl0ge1xuICAgIGNvbG9yOiB2YXIoLS1jQ29ldXIzKTtcbn1cblxuLnRvZ2dsZUphaW1lW2FyaWEtcHJlc3NlZD1cInRydWVcIl0gLnRvZ2dsZUphaW1lQ29ldXIge1xuICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpO1xufVxuXG4vKiBMZSBwZXRpdCByZWJvbmQgcXVhbmQgb24gY2xpcXVlIDogbGUgY8WTdXIgZ3Jvc3NpdCBwdWlzIHJldmllbnQuIFBvc8OpIHBhciBsZSBKYXZhU2NyaXB0XG4gICBhdSBtb21lbnQgZHUgZ2VzdGUsIHJldGlyw6kgw6AgbGEgZmluIGRlIGwnYW5pbWF0aW9uIOKAlCBqYW1haXMgYXUgY2hhcmdlbWVudCwgc2lub24gdHJlbnRlXG4gICBjxZN1cnMgcmVib25kaXJhaWVudCBlbiBjaMWTdXIgw6AgbCdvdXZlcnR1cmUgZGUgbGEgcGFnZS4gKi9cbi50b2dnbGVKYWltZUFuaW1lIC50b2dnbGVKYWltZUNvZXVyIHtcbiAgICBhbmltYXRpb246IHRvZ2dsZUphaW1lUmVib25kIDAuMzVzIGVhc2Utb3V0O1xufVxuXG5Aa2V5ZnJhbWVzIHRvZ2dsZUphaW1lUmVib25kIHtcbiAgICAwJSAgIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuICAgIDQwJSAgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMzUpOyB9XG4gICAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wOCk7IH1cbn1cblxuLyogSW5hY3RpZiA6IHBhcyBkZSBzdXJ2b2wsIHBhcyBkZSBjdXJzZXVyLCBldCBFU1RPTVDDiSDDgCA1MCAlIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXRcbiAgIDIwMjYtMDktMTYpLiBMZSB2aXNpdGV1ciBkb2l0IFZPSVIgcXUnaWwgbmUgcGV1dCBwYXMgY2xpcXVlciA6IHNhbnMgbCdlc3RvbXBlLCB1biBjxZN1clxuICAgaW5hY3RpZiByZXNzZW1ibGFpdCB0cmFpdCBwb3VyIHRyYWl0IMOgIHVuIGPFk3VyIGFjdGlmIGF1IHJlcG9zLlxuICAgTGUgMjAyNi0wOS0xMiBhdmFpdCB0cmFuY2jDqSBsJ2ludmVyc2UgKMKrIHBhcyBncmlzw6ksIGMnZXN0IHVuZSBpbmZvcm1hdGlvbiDCuykgOiBsZSBjaGlmZnJlXG4gICByZXN0ZSBsaXNpYmxlIMOgIDUwICUsIGwnaW5mb3JtYXRpb24gZXN0IHRvdWpvdXJzIGzDoC5cbiAgIFN1ciBsZSBTdHVkaW8sIGwndXRpbGlzYXRldXIgZXN0IHRvdWpvdXJzIGNvbm5lY3TDqSA6IGNldCDDqXRhdCBuJ3kgYXBwYXJhw650IHBhcy4gKi9cbi50b2dnbGVKYWltZTpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLyogRU4gQVRURU5URSA6IDI1ICUgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE2KS4gTGUgY8WTdXIgdGVsIHF1ZSBsZSBzZXJ2ZXVyXG4gICBsJ8OpY3JpdCwgYXZhbnQgcXVlIGxhIHJlcXXDqnRlIGRlIGZpbiBkZSBwYWdlIGFpdCByw6lwb25kdS4gTGUgSmF2YVNjcmlwdCByZXRpcmUgbGEgY2xhc3NlXG4gICBkw6hzIGxhIHLDqXBvbnNlIDogbGUgY8WTdXIgcGFzc2UgYWxvcnMgw6AgNTAgJSAoZMOpY29ubmVjdMOpLCBgZGlzYWJsZWRgIGNpLWRlc3N1cykgb3Ugw6AgMTAwICVcbiAgIChjb25uZWN0w6kpLiBUcm9pcyBwYWxpZXJzLCBwb3VyIHF1J2F1Y3VuIG5lIHNlIGNvbmZvbmRlIGF2ZWMgdW4gYXV0cmUuXG4gICDimqDvuI8gTcOqbWUgcG9pZHMgcXVlIGAudG9nZ2xlSmFpbWU6ZGlzYWJsZWRgICh1bmUgY2xhc3NlICsgdW5lIGNsYXNzZSwgdW5lIGNsYXNzZSArIHVuZVxuICAgcHNldWRvLWNsYXNzZSkgOiBjJ2VzdCBsJ09SRFJFIHF1aSB0cmFuY2hlLiBDZXR0ZSByw6hnbGUgZG9pdCByZXN0ZXIgQVBSw4hTIGNlbGxlLWzDoC4gKi9cbi50b2dnbGVKYWltZS50b2dnbGVKYWltZUF0dGVudGUge1xuICAgIG9wYWNpdHk6IDAuMjU7XG59XG5cbi8qIExlIG3Dqm1lIGhhbG8gZGUgZm9jdXMgcXVlIGxlcyBsaWVucyBldCBib3V0b25zIGR1IHNpdGUgKDMxX2N0YS5jc3MpLiAqL1xuLnRvZ2dsZUphaW1lOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG4udG9nZ2xlSmFpbWU6Zm9jdXMtdmlzaWJsZSB7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWNGb3JtRm9jdXMpO1xuICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC50b2dnbGVKYWltZSxcbiAgICAudG9nZ2xlSmFpbWVDb2V1cixcbiAgICAudG9nZ2xlSmFpbWVDb2V1cjo6YmVmb3JlIHtcbiAgICAgICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICB9XG5cbiAgICAudG9nZ2xlSmFpbWVBbmltZSAudG9nZ2xlSmFpbWVDb2V1ciB7XG4gICAgICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTCfDiVRJUVVFVFRFIEVUIFNPTiBDxZJVUiDCqyBKJ0FJTUUgwrsg4oCUIGJyaXF1ZSBub3lhdSBfZXRpcXVldHRlSmFpbWUudHdpZ1xuICAgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE2KVxuXG4gICBVbmUgYm/DrnRlLCBkZXV4IHBpw6hjZXMsIHVuZSBsYXJnZXVyIHF1aSBuZSBjaGFuZ2UgSkFNQUlTLiBDJ2VzdCB0b3V0IGxlIHRyYXZhaWwgZGUgY2VcbiAgIGZpY2hpZXIgOiByZW5kcmUgbGUgYmxvYyBpbW1vYmlsZSwgcG91ciBxdSdvbiBwdWlzc2UgbGUgcG9zZXIgbidpbXBvcnRlIG/DuSBzdXIgbGEgVml0cmluZVxuICAgc2FucyBxdSdpbCBib3VnZSBhdSBjbGljLlxuXG4gICBDRSBGSUNISUVSIE5FIFBMQUNFIFJJRU4uIFBhcyBkZSBtYXJnZSwgcGFzIGQnYWxpZ25lbWVudCwgcGFzIGRlIGxhcmdldXIgaW1wb3PDqWUgOiBsYVxuICAgYnJpcXVlIGRpdCBjb21tZW50IGxlIGJsb2MgZXN0IGNvbnN0cnVpdCwgbGEgcGFnZSBxdWkgbCdhY2N1ZWlsbGUgZGl0IG/DuSBpbCBzZSBwb3NlLlxuICAgQydlc3QgY2UgcGFydGFnZSBxdWkgbGEgcmVuZCBwbGFjYXJkYWJsZSBwYXJ0b3V0LlxuXG4gICDimqDvuI8gSWwgbmUgdG91Y2hlIHBhcyDDoCBjb21wb3NhbnRzL2phaW1lLmNzcyA6IGxlIGPFk3VyIGdhcmRlIHNhIHNldWxlIGV0IHVuaXF1ZSBzb3VyY2UuIFRvdXRcbiAgIGNlIHF1aSBlc3Qgw6ljcml0IGljaSBlc3QgcG9ydMOpIHBhciBgLmV0aXF1ZXR0ZUphaW1lYCwgZG9uYyBuJ2F0dGVpbnQgUVVFIGNlIGJsb2Mg4oCUIGxlc1xuICAgc2VwdCBhdXRyZXMgZW5kcm9pdHMgb8O5IGxlIGPFk3VyIHZpdCBzb250IGluY2hhbmfDqXMuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBgaW5saW5lLWZsZXhgIDogbGEgYm/DrnRlIHByZW5kIGV4YWN0ZW1lbnQgbGEgbGFyZ2V1ciBkZSBzb24gY29udGVudSwgbmkgcGx1cyBuaSBtb2lucy5cbiAgIEMnZXN0IGNlIHF1aSBwZXJtZXQgw6AgbCdhcHBlbGFudCBkZSBsYSBjZW50cmVyIChhbGlnbi1zZWxmLCB0ZXh0LWFsaWduLCBqdXN0aWZ5LWNvbnRlbnTigKYpXG4gICBzYW5zIHF1J2VsbGUgcyfDqXRpcmUgw6AgdG91dGUgbGEgY29sb25uZS5cbiAgIC0tZ2FwTGFyZ2UgKDIwcHgpIDogw6AgOHB4ICgtLWdhcERlZmF1dCkgcHVpcyDDoCAxMnB4ICgtLWdhcE1veWVuKSwgbGUgbW90IGV0IGxlIGPFk3VyIHNlXG4gICBsaXNhaWVudCBjb21tZSB1biBzZXVsIGJsb2Mgc2VycsOpIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xNikuIFVuZSB2YWxldXIgbm9tbcOpZSxcbiAgIGphbWFpcyB1biBjaGlmZnJlIChhc3NldHMvdml0cmluZS9jc3MvQ0xBVURFLm1kKS4gKi9cbi5ldGlxdWV0dGVKYWltZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTtcbn1cblxuLyogTCfDiVRJUVVFVFRFIEVOIENIQVNTRSBGSVhFIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xNikuIEMnZXN0IGxlIG5vbSBkdSBkb3NzaWVyXG4gICBkZSBsYSBzY8OobmUg4oCUIGBSYWZmbGVQbHVja2Ag4oCULCBwYXMgdW5lIHBocmFzZSA6IGR1IFBhc2NhbENhc2UgcXVlIHBlcnNvbm5lIG5lIHRyYWR1aXQuIExlXG4gICBtb25vIGRpdCDCqyBjZWNpIGVzdCB1biBpZGVudGlmaWFudCDCuyBzYW5zIHF1J29uIGFpdCDDoCBsJ8OpY3JpcmUuXG4gICBDJ2VzdCBsZSBnZXN0ZSBxdWUgbGUgU3R1ZGlvIGZhaXQgZMOpasOgIHN1ciBsZXMgw6l0aXF1ZXR0ZXMgZGUgbCdvcmdhbmlzYXRldXIgKC5ldGlxdWV0dGVNb25vLFxuICAgc3R1ZGlvLzU2X3NjZW5hcmlvL19ldGlxdWV0dGVzLmNzcywgZMOpY2lzaW9uIFBPIDIwMjYtMDYtMTApIOKAlCBsw6AtYmFzIGxhIGNoYXNzZSBmaXhlXG4gICBkaXN0aW5ndWUgbGUgbW90IGRlIGwndXRpbGlzYXRldXIgZGVzIGxpYmVsbMOpcyBkdSBzeXN0w6htZSA7IGljaSBlbGxlIGRpc3Rpbmd1ZVxuICAgbCdpZGVudGlmaWFudCBkdSB0ZXh0ZSByw6lkaWfDqS4gTcOqbWUgb3V0aWwsIGludGVudGlvbiB2b2lzaW5lLlxuXG4gICAtLWZNb25vMTYgZXQgcGFzIC0tZk1vbm8yNGIgOiBsZSBtb25vIGQndW4gTElCRUxMw4ksIHBhcyBjZWx1aSBkJ3VuIGdyb3MgY2hpZmZyZS4gTGFcbiAgIHZhcmlhYmxlIGRvcm1haXQsIGNvbW1lbnTDqWUgwqsgaW51dGlsaXPDqSDCuyBkZXB1aXMgbGUgMjAyNi0wNi0xMyA7IGVsbGUgZXN0IHJlbWlzZSBlblxuICAgc2VydmljZSBwb3VyIGNlIGJsb2MgKDEwX2ZvbnQuY3NzKSwgYXVjdW5lIHZhbGV1ciBub3V2ZWxsZSBuJ2VudHJlIGRhbnMgbGUgc3lzdMOobWUuXG4gICBTdXIgbGEgcGFnZSBkJ3VuZSBzY8OobmUsIGwnw6l0aXF1ZXR0ZSDDqXRhaXQganVzcXUnaWNpIGF1IGNvcnBzIGQndW4gSDIgOiAyNHB4IGdyYXMsIHBsdXNcbiAgIGxvdXJkZSBxdWUgbGUgdnJhaSB0aXRyZSBkZSBsYSBwYWdlIGp1c3RlIGF1LWRlc3N1cy4gKi9cbi5ldGlxdWV0dGVKYWltZVRleHRlIHtcbiAgICBmb250OiB2YXIoLS1mTW9ubzE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLyogTEEgQ0FTRSBEVSBDSElGRlJFIOKAlCBsZSBjxZN1ciBkZSBsJ2FmZmFpcmUgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE2KS5cbiAgIERhbnMgc2EgYnJpcXVlLCBsZSBjb21wdGV1ciDCqyBuZSByw6lzZXJ2ZSBhdWN1bmUgbGFyZ2V1ciDCuyA6IMOgIHrDqXJvIGlsIGVzdCB2aWRlLCBsZSBjxZN1ciBlc3RcbiAgIHNldWwuIEMnZXN0IGp1c3RlIGzDoCBvw7kgbGUgY8WTdXIgZmluaXQgbGEgbGlnbmUuIMOHYSBuZSBsJ2VzdCBwbHVzIGTDqHMgcXUnaWwgYSB1biB2b2lzaW4gOiBsZVxuICAgcHJlbWllciDCqyBKJ2FpbWUgwrsgw6lsYXJnaXNzYWl0IGxlIGJvdXRvbiwgZXQgdG91dCBjZSBxdWkgbCdlbnRvdXJhaXQgZ2xpc3NhaXQuXG4gICBJY2kgbGUgY2hpZmZyZSBhIHNhIGNhc2UsIGV0IGlsIG5lIGxhIHF1aXR0ZSBwYXMuIERldXggY2FyYWN0w6hyZXMg4oCUIGRlIDAgw6AgOTksIGxhIGNhc2VcbiAgIHN1ZmZpdCA7IGF1LWRlbMOgIGVsbGUgcyfDqWxhcmdpdCwgZXQgYydlc3QgYXNzdW3DqS5cbiAgIGBjaGAgOiBsYSBsYXJnZXVyIGQndW4gY2hpZmZyZSBkYW5zIGxhIGZvbnRlIGR1IGJvdXRvbi4gQ2Ugbidlc3QgcGFzIHVuZSBtZXN1cmUgaW52ZW50w6llIGVuXG4gICBwaXhlbHMsIGMnZXN0IGxhIGNhc2UgcXVlIGxlIHRleHRlIG9jY3VwZSDigJQgZXQgYGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNgLCBkw6lqw6BcbiAgIHBvc8OpIHN1ciBjZSBzcGFuLCBnYXJhbnRpdCBxdWUgdG91cyBsZXMgY2hpZmZyZXMgb250IGxhIG3Dqm1lLlxuICAgUG9ydMOpIHBhciBgLmV0aXF1ZXR0ZUphaW1lYCA6IGxlcyBjxZN1cnMgZGVzIGF1dHJlcyBwYWdlcyBuZSByw6lzZXJ2ZW50IHRvdWpvdXJzIHJpZW4uICovXG4uZXRpcXVldHRlSmFpbWUgLnRvZ2dsZUphaW1lTm9tYnJlIHtcbiAgICBtaW4td2lkdGg6IDJjaDtcbn1cbiIsIi8qIExlIHBvaW50ZXVyIGZpY3RpZiBkZXMgYXBlcsOndXMgKFBvaW50ZXVyUHJldmlldy50cykgOiB0b3V0IGNlIHF1ZSBsYSBmbMOoY2hlIGRlIGxhIHNvdXJpc1xuICAgKC5jdXJzZXVyUHJldmlldykgZXQgbGUgZG9pZ3QgZHUgdMOpbMOpcGhvbmUgKC5kb2lndFBhcmNvdXJzKSBvbnQgZW4gY29tbXVuIOKAlCBsZSB0cmFpdCwgbGVcbiAgIGdsaXNzZW1lbnQgcXVpIGdyb3NzaXQsIGxlIHJlY3VsIGR1IGNsaWMsIGxlIHJvbmQgZHUgY2xpYy5cblxuICAgVW5lIHZhcmlhbnRlIG5lIGTDqWNsYXJlIHF1ZSBzYSBwb3NpdGlvbiwgZXQgc2EgcG9pbnRlIGRhbnMgbGUgZGVzc2luIGRlIDQ4IHB4IDpcbiAgIC0tcG9pbnRldXJQb2ludGVYLCAtLXBvaW50ZXVyUG9pbnRlWS5cblxuICAgLS1wb2ludGV1ckVjaGVsbGUsIHBvc8OpZSBzdXIgbGUgY29udGVuZXVyIHF1YW5kIGlsIGVzdCBsdWktbcOqbWUgcsOpZHVpdCAobGUgY2FkcmUgZHVcbiAgIHTDqWzDqXBob25lKSA6IGxlIHBvaW50ZXVyIGV0IHNvbiByb25kIGdyb3NzaXNzZW50IGQnYXV0YW50LCBwb3VyIGdhcmRlciDDoCBsJ8OpY3JhbiBsYSB0YWlsbGUgZXRcbiAgIGwnw6lwYWlzc2V1ciBkZSB0cmFpdCBkZSBsYSBmbMOoY2hlLiAqL1xuXG4ucG9pbnRldXJQcmV2aWV3IHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAvKiBMYSBwb2ludGUgZXN0IHBvc8OpZSBzdXIgbGUgcG9pbnQgdmlzw6ksIGV0IHRvdXQgZ3Jvc3Npc3NlbWVudCBvdSByZWN1bCBwYXJ0IGQnZWxsZSA6IGVsbGUgbmVcbiAgICAgICBxdWl0dGUgamFtYWlzIGNlIHBvaW50LiAqL1xuICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLXBvaW50ZXVyUG9pbnRlWSkpIDAgMCBjYWxjKC0xICogdmFyKC0tcG9pbnRldXJQb2ludGVYKSk7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogdmFyKC0tcG9pbnRldXJQb2ludGVYKSB2YXIoLS1wb2ludGV1clBvaW50ZVkpO1xuICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tcG9pbnRldXJFY2hlbGxlLCAxKSk7XG4gICAgdHJhbnNpdGlvbjogbGVmdCAwLjVzIGVhc2Utb3V0LCB0b3AgMC41cyBlYXNlLW91dCwgdHJhbnNmb3JtIDAuMnMgZWFzZS1vdXQsIG9wYWNpdHkgMC4ycztcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDJweCAycHggMnB4IHZhcigtLWNPbWJyZUZvcnRlKSkgZHJvcC1zaGFkb3coMnB4IDJweCAycHggdmFyKC0tY09tYnJlRm9ydGUpKTtcbn1cblxuLnBvaW50ZXVyUHJldmlldyBzdmcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbn1cblxuLyogQmxhbmMgY2VybsOpIGRlIG5vaXIgOiB1biBjb250b3VyIGJsYW5jIGRpc3BhcmHDrnQgc3VyIGxlcyBib3V0b25zIGJsYW5jcywgbGUgbm9pciB0cmFuY2hlIHN1clxuICAgdG91cy4gKi9cbi5wb2ludGV1clByZXZpZXcgcGF0aCB7XG4gICAgZmlsbDogdmFyKC0tY0JsYW5jKTtcbiAgICBzdHJva2U6IHZhcigtLWNOb2lyKTtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kO1xufVxuXG4vKiBHcm9zc2kgcGVuZGFudCBsZSBnbGlzc2VtZW50IDogb24gdm9pdCBsZSBwb2ludGV1ciBwYXJ0aXIgZXQgb8O5IGlsIHZhLiBJbCByZXByZW5kIHNhIHRhaWxsZSDDoFxuICAgbCdhcnJpdsOpZSwgcG91ciBuZSByaWVuIGNhY2hlciBhdSBtb21lbnQgZHUgY2xpYy4gKi9cbi5wb2ludGV1clByZXZpZXdEZXBsYWNlbWVudCB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKHZhcigtLXBvaW50ZXVyRWNoZWxsZSwgMSkgKiAxLjYpKTtcbn1cblxuLyogTGEgdHJhbnNpdGlvbiByZWRvbm5lIGxlZnQvdG9wIDogc2FucyBldXgsIHVuIGTDqXBsYWNlbWVudCBsYW5jw6kgcGVuZGFudCBsZSByZWN1bCBzYXV0ZXJhaXQuICovXG4ucG9pbnRldXJQcmV2aWV3Q2xpYyB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKHZhcigtLXBvaW50ZXVyRWNoZWxsZSwgMSkgKiAwLjc1KSk7XG4gICAgdHJhbnNpdGlvbjogbGVmdCAwLjVzIGVhc2Utb3V0LCB0b3AgMC41cyBlYXNlLW91dCwgdHJhbnNmb3JtIDAuMXMgZWFzZS1pbiwgb3BhY2l0eSAwLjJzO1xufVxuXG4vKiBMZSByb25kIGR1IGNsaWMgKFBvaW50ZXVyUHJldmlldy5hcHB1eWVyU3VyKS4gSWwgcydPVVZSRSBwYXIgYW5pbWF0aW9uICh0cmFuc2Zvcm0pIGV0XG4gICBzJ0VGRkFDRSBwYXIgdHJhbnNpdGlvbiAob3BhY2l0eSksIMOgIHBhcnQgOiBsJ2V4dGluY3Rpb24gcmFwaWRlIHJlcHJlbmQgbCdvcGFjaXTDqSBsw6Agb8O5XG4gICBlbGxlIGVuIGVzdCwgc2FucyBzYXV0IOKAlCB1bmUgYW5pbWF0aW9uIHJlbGFuY8OpZSByZXBhcnRpcmFpdCBkZSB6w6lyby4gKi9cbi5wb2ludGV1clByZXZpZXdGbGFzaCB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgd2lkdGg6IDYwcHg7XG4gICAgaGVpZ2h0OiA2MHB4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMzBweDtcbiAgICBtYXJnaW4tdG9wOiAtMzBweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgLyogTGUgbcOqbWUgcm9uZCBwb3VyIGxhIHNvdXJpcyBldCBsZSBkb2lndCAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0LCAyMDI2LTEwLTA2KSA6IHVuIGRpc3F1ZVxuICAgICAgIHNvbWJyZSB0cmFuc2x1Y2lkZSBjZXJjbMOpIGRlIGJsYW5jIHNlIHZvaXQgc3VyIHVuZSBwYWdlIGNsYWlyZSBjb21tZSBzdXIgdW4gZm9uZCBmb25jw6ksXG4gICAgICAgYXVjdW5lIHZhcmlhbnRlIG4nYSDDoCBsZSByZWNvbG9yZXIuICovXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY09tYnJlRm9ydGUpO1xuICAgIGJvcmRlcjogM3B4IHNvbGlkIHZhcigtLWNCbGFuYyk7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNDVzIGVhc2Utb3V0IDAuMTVzO1xuICAgIGFuaW1hdGlvbjogcG9pbnRldXJQcmV2aWV3Rmxhc2hBbmltIDAuNnMgZWFzZS1vdXQgZm9yd2FyZHM7XG59XG5cbi8qIFBvc8OpZSDDoCBsYSBmcmFtZSBzdWl2YW50IGxhIG5haXNzYW5jZSBkdSByb25kIDogbCdlZmZhY2VtZW50IG5vcm1hbCwgc3VyIGxhIGR1csOpZSBkZSBsJ291dmVydHVyZS4gKi9cbi5wb2ludGV1clByZXZpZXdGbGFzaEZvbmR1IHtcbiAgICBvcGFjaXR5OiAwO1xufVxuXG4vKiBMYSBjaWJsZSBhIGRpc3BhcnUgc291cyBsZSBjbGljIChib3V0b24gcmFuZ8OpLCBjaGFuZ2VtZW50IGRlIGN1ZSkgOiBsZSByb25kIHMnw6l0ZWludCB0b3V0XG4gICBkZSBzdWl0ZSBwbHV0w7R0IHF1ZSBkZSBmaW5pciBkZSBzJ291dnJpciBzdXIgZHUgdmlkZS4gKi9cbi5wb2ludGV1clByZXZpZXdGbGFzaEV0ZWludCB7XG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xNXM7XG4gICAgdHJhbnNpdGlvbi1kZWxheTogMHM7XG59XG5cbkBrZXlmcmFtZXMgcG9pbnRldXJQcmV2aWV3Rmxhc2hBbmltIHtcbiAgICAwJSAgIHsgdHJhbnNmb3JtOiBzY2FsZSgwKTsgfVxuICAgIDEwMCUgeyB0cmFuc2Zvcm06IHNjYWxlKGNhbGModmFyKC0tcG9pbnRldXJFY2hlbGxlLCAxKSAqIDIuNSkpOyB9XG59XG4iLCIvKiBMZSBkb2lndCBkZXMgYXBlcsOndXMgKERvaWd0UGFyY291cnMudHMpIDogY2VsdWkgZGUgbCdhcGVyw6d1IHBhcnRpY2lwYW50LCBldCBjZWx1aSBkdVxuICAgdMOpbMOpcGhvbmUgcG9zw6kgw6AgY8O0dMOpIGR1IGdyYW5kIMOpY3JhbiBkZSBsJ2FwZXLDp3UgKFRlbGVwaG9uZUFwZXJjdS50cywgZW50csOpZSBzYWxsZUVjcmFuKS5cbiAgIFVuZSB2YXJpYW50ZSBkdSBwb2ludGV1ciBjb21tdW4gKGtpdFB1ci9wcmV2aWV3L3BvaW50ZXVyUHJldmlldy5jc3MpLCBxdWUgbCdow7R0ZSBpbXBvcnRlXG4gICBhdmFudCBjZXR0ZSBmZXVpbGxlIDogbGUgdHJhaXQsIGxlIGdsaXNzZW1lbnQgZXQgbGUgY2xpYyBzb250IGNldXggZGUgbGEgZmzDqGNoZSBkZSBzb3VyaXMuICovXG5cbi8qIERhbnMgbCfDqWNyYW4gZHUgY2FkcmUsIHBhci1kZXNzdXMgbCdpZnJhbWUuIExlIGJvdXQgZGUgbCdpbmRleCBlc3Qgw6AgKDExLDI1IDsgMikgZGUgbGEgZ3JpbGxlXG4gICBkZSAyOCwgc29pdCAoMTksMjkgOyAzLDQzKSBweCBkYW5zIGxlIGRlc3NpbiBkZSA0OCBweC4gKi9cbi5kb2lndFBhcmNvdXJzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRvcDogNzAlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgb3BhY2l0eTogMDtcbiAgICAtLXBvaW50ZXVyUG9pbnRlWDogMTkuMjlweDtcbiAgICAtLXBvaW50ZXVyUG9pbnRlWTogMy40M3B4O1xufVxuXG4uZG9pZ3RQYXJjb3Vyc1Zpc2libGUge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi8qIExlIHJvbmQgZHUgY2xpYyBlc3QgY2VsdWkgZHUgcG9pbnRldXIgY29tbXVuLCBtw6ptZSBjb3VsZXVyIHF1ZSBwb3VyIGxhIHNvdXJpcyA6IHNldWxlIHNhIHBsYWNlXG4gICBkYW5zIGxlIGNhZHJlIGVzdCDDoCBsdWkuICovXG4uZG9pZ3RQYXJjb3Vyc0ZsYXNoIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBBcGVyw6d1IOKAlCBPdmVybGF5LCBjdXJzZXVyLCBib3V0b24gcHJpc2UgZW4gbWFpblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQm91dG9uIGRlIGZlcm1ldHVyZSAoLm1vZGFsZUNsb3NlICsgLm1vZGFsZUNsb3NlVGV4dGUpIDogc291cmNlIHVuaXF1ZSBkdSBjb21wb3NhbnQg4oCUXG4gICBsYSBiYXJyZSBkJ2FwZXLDp3UgdXRpbGlzZSBzYSBzaWxob3VldHRlIGfDqW7DqXJhbGUgdGVsbGUgcXVlbGxlLCBhdWN1biDDqWNhcnQgaWNpLiAqL1xuQGltcG9ydCAnLi4vLi4vLi4vY3NzL2NvbXBvc2FudHMvYm91dG9uRmVybWV0dXJlLmNzcyc7XG4vKiBQT0MgKGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTE2KSA6IGwnw6l0aXF1ZXR0ZSBldCBsZSBjxZN1ciDCqyBKJ2FpbWUgwrsgZHUgc2l0ZSwgcmVmbMOpdMOpcyBkYW5zXG4gICBsYSBiYXJyZSBkZSBsJ2FwZXLDp3UgcXVhbmQgZWxsZSBqb3VlIGRhbnMgbGEgZmVuw6p0cmUgZHUgc2l0ZSAoTW90ZXVyUHJldmlldy5kZXNzaW5lckdlc3Rlc1NpdGUpLiAqL1xuQGltcG9ydCAnLi4vLi4vLi4vY3NzL2NvbXBvc2FudHMvamFpbWUuY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uL2Nzcy9jb21wb3NhbnRzL2V0aXF1ZXR0ZUphaW1lLmNzcyc7XG4vKiBMZSBwb2ludGV1ciBmaWN0aWYgOiBjZSBxdWUgbGEgZmzDqGNoZSBkZSBzb3VyaXMgKHBsdXMgYmFzLCDCqyBDdXJzZXVyIMK7KSBldCBsZSBkb2lndCBvbnQgZW4gY29tbXVuLiAqL1xuQGltcG9ydCAnLi4vLi4va2l0UHVyL3ByZXZpZXcvcG9pbnRldXJQcmV2aWV3LmNzcyc7XG4vKiBMZSBkb2lndCBkZSBsJ2FwZXLDp3UgcGFydGljaXBhbnQsIHF1aSB0b3VjaGUgYXVzc2kgbGUgdMOpbMOpcGhvbmUgcG9zw6kgw6AgY8O0dMOpIGRlIGxhIHNjw6huZSAoVGVsZXBob25lQXBlcmN1LnRzKS4gKi9cbkBpbXBvcnQgJy4uLy4uL3ByZXZpZXdQYXJ0aWNpcGFudC9jc3MvZG9pZ3RQYXJjb3Vycy5jc3MnO1xuXG4vKiBPdmVybGF5IGFzc29tYnJpc3NhbnQgYnJpw6h2ZW1lbnQgYXUgZMOpbWFycmFnZSBwdWlzIHMnZXN0b21wZSDigJQgcmVsYW5jw6kgYXUgY2xpY1xuICAgc3VyIHVuZSB6b25lIG5vbiBjbGlxdWFibGUgcG91ciBndWlkZXIgbCd1dGlsaXNhdGV1ciB2ZXJzIGxhIGJhcnJlIGRlIGNvbnRyw7RsZS4gKi9cbiNwcmV2aWV3T3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGluc2V0OiAwO1xuICAgIHotaW5kZXg6IDk5OTkyMTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3ZlcmxheSk7XG4gICAgYW5pbWF0aW9uOiBwcmV2aWV3T3ZlcmxheUZhZGUgMnMgZWFzZS1vdXQgZm9yd2FyZHM7XG59XG5cbkBrZXlmcmFtZXMgcHJldmlld092ZXJsYXlGYWRlIHtcbiAgICAwJSAgIHsgb3BhY2l0eTogMTsgfVxuICAgIDYwJSAgeyBvcGFjaXR5OiAxOyB9XG4gICAgMTAwJSB7IG9wYWNpdHk6IDA7IH1cbn1cblxuLyogQmFycmUgZGUgY29udHLDtGxlIGRlIGwnYXBlcsOndSDigJQgZml4w6llLCBpbmTDqXBlbmRhbnRlIGR1IHN0YWNraW5nIGRlICNiYXJyZVBpbG90YWdlLlxuICAgTGUgYGJvdHRvbWAgZXN0IGFwcGxpcXXDqSBkeW5hbWlxdWVtZW50IGVuIEpTIHNlbG9uIGxhIGhhdXRldXIgZGUgI2JhcnJlUGlsb3RhZ2UuICovXG4jZGl2QWN0aW9uUHJldmlldyB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGxlZnQ6IDE2cHg7XG4gICAgcmlnaHQ6IDE2cHg7XG4gICAgei1pbmRleDogOTk5OTk5O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAvKiBMZSBtw6ptZSDDqWNhcnQgcXVlIGRhbnMgbGEgYmFycmUgZGUgcGlsb3RhZ2UgZW50cmUgZGV1eCB2b2lzaW5zIHF1aSBuZSBzb250IHBhcyBkdSBtw6ptZVxuICAgICAgIGdyb3VwZSA6IDE2cHgsIGF2ZWMgbGUgdHJhaXQgZHUgZ3JvdXBlIGRlIGdhdWNoZSAoLmRpdkFjdGlvblNjZW5lKSDigJQgMTYsIHRyYWl0LCAxNi4gKi9cbiAgICBnYXA6IDE2cHg7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmNPdmVybGF5KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUyKTtcbiAgICBhbmltYXRpb246IGRpdkFjdGlvblByZXZpZXdBcHBlYXIgMC40cyBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSk7XG59XG5cbkBrZXlmcmFtZXMgZGl2QWN0aW9uUHJldmlld0FwcGVhciB7XG4gICAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsgb3BhY2l0eTogMDsgfVxuICAgIHRvICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IG9wYWNpdHk6IDE7IH1cbn1cblxuLyogQnVsbGUgZHUgaGF1dCAoY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMTcpIDogZGFucyBsYSBmZW7DqnRyZSBkdSBzaXRlLCBsZXMgb25nbGV0cyBxdWl0dGVudCBsYVxuICAgYmFycmUgZGUgdGl0cmUgYXUgYm91dCBkZSBkaXggc2Vjb25kZXMgZXQgc2UgcG9zZW50IGljaSwgYXUgY2VudHJlLCBwYXItZGVzc3VzIGxlIGxvZ29cbiAgIChNb3RldXJQcmV2aWV3LnBvc2VyQnVsbGUpLiBNw6ptZSBtYXRpw6hyZSBxdWUgbGEgYmFycmUgZHUgYmFzIDsgZWxsZSBzb3J0IGR1IGhhdXQgZGUgbCfDqWNyYW4gZW5cbiAgIHMnw6l0aXJhbnQsIGV0IHMnw6lsYXJnaXQgcXVhbmQgbGVzIGJvdXRvbnMgZGUgZmluIGxhIHJlam9pZ25lbnQuICovXG4jcHJldmlld0J1bGxlIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAxMnB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB6LWluZGV4OiA5OTk5OTk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuY092ZXJsYXkpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIyKTtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZVBvcnRlZTIpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHByZXZpZXdCdWxsZUFwcGFyaXRpb24gMC42cyBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSk7XG59XG5cbkBrZXlmcmFtZXMgcHJldmlld0J1bGxlQXBwYXJpdGlvbiB7XG4gICAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC0xMjAlKSBzY2FsZVgoMC4zKTsgb3BhY2l0eTogMDsgfVxuICAgIHRvICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKSBzY2FsZVgoMSk7IG9wYWNpdHk6IDE7IH1cbn1cblxuLyogVmVycmUgZMOpcG9saSAoY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMTcpIDogbGEgYmFycmUgZHUgYmFzIGV0IGxhIGJ1bGxlIGxhaXNzZW50IHZvaXIgbGEgc2PDqG5lLFxuICAgZmxvdXTDqWUuIExlIGZsb3UgcmVzdGUgbW9kw6lyw6kgZXQgbGEgc3VyZmFjZSBwZXRpdGUgOiBsYSBzY8OobmUgcGV1dCBib3VnZXIgZGVycmnDqHJlIChyb3VlIHF1aVxuICAgdG91cm5lKSBzYW5zIGNoYXJnZXIgbGUgbmF2aWdhdGV1ci4gVW4gc2V1bCByZXBsaSA6IGxlIG5hdmlnYXRldXIgcXVpIG5lIHNhaXQgcGFzIGZsb3V0ZXJcbiAgIGdhcmRlIGxlIGJsYW5jIMOgIDgwICUuXG4gICBMZSByw6lnbGFnZSDCqyBSw6lkdWlyZSBsYSB0cmFuc3BhcmVuY2UgwrsgZHUgdmlzaXRldXIgbidlc3QgUEFTIHN1aXZpIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXRcbiAgIDIwMjYtMDktMjMpIDogbGUgZmxvdSBlc3QgY2UgcXVpIHJlbmQgbGEgYmFycmUgbGlzaWJsZSBwYXItZGVzc3VzIGxhIHNjw6huZSDigJQgc2FucyBsdWksIG9uXG4gICBsaXJhaXQgY2UgcXVpIHBhc3NlIGRlcnJpw6hyZS4gKi9cbkBzdXBwb3J0cyAoYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCkpIG9yICgtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxcHgpKSB7XG4gICAgI2RpdkFjdGlvblByZXZpZXcsXG4gICAgI3ByZXZpZXdCdWxsZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuY1ZlcnJlKTtcbiAgICAgICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCkgc2F0dXJhdGUoMS40KTtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpIHNhdHVyYXRlKDEuNCk7XG4gICAgfVxufVxuXG5cbiNwcmV2aWV3QnVsbGUgLmN0YVByZXZpZXdDb250cm9sZSB7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIExhIGJ1bGxlIGV0IGxhIGJhcnJlIGR1IGJhcyBzb250IGF1LWRlc3N1cyBkZSB0b3V0LCBjdXJzZXVyIGNvbXByaXMgOiBsZSBjdXJzZXVyIGdsaXNzZVxuICAgZGVzc291cy4gUXVhbmQgdW4gdm9pbGUgYXNzb21icml0IGwnw6ljcmFuIHBvdXIgbifDqWNsYWlyZXIgcXUndW4gZ2VzdGUg4oCUIGxlIHBhc3NhZ2UsXG4gICDCqyBRdWVscXVlcyBpbnN0YW50cyBwbHVzIHRhcmQgwrssIHVuZSBib8OudGUgZGUgZGlhbG9ndWUgcXVpIGZpZ2UgbCdhcGVyw6d1IOKAlCwgZWxsZXMgcGFzc2VudFxuICAgU09VUyBjZSB2b2lsZSA6IG9uIGxlcyB2b2l0IHRvdWpvdXJzLCBhc3NvbWJyaWVzIGNvbW1lIGxhIHNjw6huZSwgZXQgZWxsZXMgbmUgcsOpcG9uZGVudCBwbHVzLlxuICAgRWxsZXMgbmUgcydlZmZhY2VudCBqYW1haXMgOiBjZSBxdWkgZGlzcGFyYcOudCBwdWlzIHJldmllbnQgbidhIHBhcyBkZSBzZW5zIHBvdXIgbGUgdmlzaXRldXJcbiAgIChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0xOCkuIExlIHBhbm5lYXUgZXhpc3RlIGR1IHByZW1pZXIgYXUgZGVybmllciBpbnN0YW50IGRlIHNvbiBmb25kdVxuICAgKGNyw6nDqSDDoCBvcGFjaXTDqSAwLCByZXRpcsOpIGFwcsOocyBsYSByZW1pc2UpIDogZWxsZXMgcmVzdGVudCBzb3VzIGx1aSB0b3V0IGNlIHRlbXBzLCBzYW5zIHNhdXQuXG4gICBMYSBib8OudGUgZGUgc2Fpc2llLCBlbGxlLCBmYWl0IHBhcnRpZSBkdSBmaWxtIChsZSBjdXJzZXVyIGxhIHJlbXBsaXQpIDogZWxsZSBuZSBmaWdlIHBhc1xuICAgbCdhcGVyw6d1LCBldCBsYSBiYXJyZSByZXN0ZSBhdS1kZXNzdXMgZCdlbGxlLCBjb21tZSBhdmFudC4gKi9cbmJvZHk6aGFzKCNwcmV2aWV3UXVlbHF1ZXNJbnN0YW50c092ZXJsYXkpIDppcygjcHJldmlld0J1bGxlLCAjZGl2QWN0aW9uUHJldmlldyksXG5ib2R5OmhhcygjYm9pdGVzRGlhbG9ndWUuYm9pdGVzRGlhbG9ndWVGaWdlQXBlcmN1KSA6aXMoI3ByZXZpZXdCdWxsZSwgI2RpdkFjdGlvblByZXZpZXcpIHtcbiAgICB6LWluZGV4OiA5OTk5MjU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi8qIFVuZSBidWxsZSBkZSBjb25maXJtYXRpb24gcydvdXZyZSB2ZXJzIGxlIGhhdXQsIHBhci1kZXNzdXMgbGEgYmFycmUgZHUgYmFzLCBldCBsZSBjdXJzZXVyXG4gICBkb2l0IHMneSB2b2lyIGNsaXF1ZXIgOiBsZSB0ZW1wcyBkdSBnZXN0ZSwgbGEgYmFycmUgcmVkZXNjZW5kIHNvdXMgbGVzIGRldXggKF9idWxsZUNvbmZpcm1hdGlvbi5jc3MpLiAqL1xuYm9keTpoYXMoLmJ1bGxlQ29uZmlybWF0aW9uKSAjZGl2QWN0aW9uUHJldmlldyB7XG4gICAgei1pbmRleDogOTk5OTIyO1xufVxuXG4vKiBCdWxsZSBwb3PDqWUgOiBsYSBwb3B1cCDDoCB2dWVzIHMnb3V2cmUgc291cyBlbGxlLCBsZXMgb25nbGV0cyByZXN0ZW50IHZpc2libGVzIGV0IGNsaXF1YWJsZXMuICovXG5ib2R5OmhhcygjcHJldmlld0J1bGxlKSAjcHJldmlld1BvcHVwQ29ycHMge1xuICAgIHRvcDogY2FsYygxMnB4ICsgdmFyKC0taGF1dGV1ckJ1bGxlUHJldmlldykgKyAxMnB4KTtcbn1cblxuI3ByZXZpZXdTb3VzVGl0cmVUZXh0ZSB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbiNwcmV2aWV3U291c1RpdHJlVGV4dGUgc3BhbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi8qIFRyb2lzIGJsb2NzLCByaWVuIHF1ZSBkZXMgYm91dG9ucy4gw4AgZ2F1Y2hlLCBsZXMgYm91dG9ucyBkZSBsYSBzY8OobmUgOiB1biBncm91cGUgZGUgbGEgYmFycmVcbiAgIGRlIHBpbG90YWdlICguZGl2QWN0aW9uU2NlbmUsIF9zY2VuZUJvdXRvbnMuY3NzKSwgYXZlYyBzb24gdHJhaXQg4oCUIExFIHRyYWl0LCBsZSBtw6ptZSBwYXJ0b3V0LlxuICAgQXUgY2VudHJlLCBsZXMgYm91dG9ucyBkZSBmaW4gw6AgbGEgZmluIGRlIGwnYXBlcsOndS4gw4AgZHJvaXRlLCDCqyBQcmVuZHJlIGxhIG1haW4gwrsuIFRvdXNcbiAgIGNlbnRyw6lzIHZlcnRpY2FsZW1lbnQgZGFucyBsYSBiYXJyZS4gKi9cbiNwcmV2aWV3QmxvY0FwZXJjdSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogTGUgYmxvYyBjZW50cmFsIHBvcnRlIGxlIG5vbSBldCBsYSBkZXNjcmlwdGlvbiBkZSBsJ2FwZXLDp3UgKGRldXggbGlnbmVzIGRlIC0tZlRleHQxNiBzw6lwYXLDqWVzXG4gICBkZSAycHgpIHRhbnQgcXVlIGxlcyBib3V0b25zIGRlIGZpbiBuZSBzb250IHBhcyBsw6AsIHB1aXMgbGVzIGJvdXRvbnMgKE1vdGV1clByZXZpZXcsXG4gICBhZmZpY2hlckJvdXRvbnNGaW4pLiBTYSBoYXV0ZXVyIGVzdCBjZWxsZSBkZXMgZGV1eCBsaWduZXMsIHRvdWpvdXJzIDogbGEgYmFycmUgbmUgYm91Z2UgcGFzXG4gICBxdWFuZCBsZSB0ZXh0ZSBjw6hkZSBsYSBwbGFjZSBhdXggYm91dG9ucyAoZMOpY2lzaW9uIFBPIDIwMjYtMDktMTUpIOKAlCBgbGhgIGVzdCBsYSBoYXV0ZXVyIGRlXG4gICBsaWduZSBkZSBjZXR0ZSBwb2xpY2UuIExlcyBib3V0b25zIHBvcnRlbnQgbGV1ciBwcm9wcmUgcG9saWNlICguY3RhMTQpLiAqL1xuI3ByZXZpZXdCbG9jQXBlcmN1IHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgIG1pbi13aWR0aDogMDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDJsaCArIDJweCk7XG59XG5cbi8qIExlcyBvbmdsZXRzIG5lIHNvbnQgamFtYWlzIGRhbnMgbGEgYmFycmUgZHUgYmFzIDogYmFycmUgZGUgdGl0cmUgZGUgbGEgZmVuw6p0cmUgZHUgc2l0ZSwgcHVpc1xuICAgYnVsbGUgKGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTE3KS4gQ2V1eCBkdSBiYXMgc2UgcmFuZ2VudCwgZ3JvdXBlIGRlIGdhdWNoZSBldCB0cmFpdCBjb21wcmlzLFxuICAgYm91dG9ucyBkZSBmaW4gY29tcHJpcywgZW4gYXR0ZW5kYW50IGxhIGJ1bGxlLiBQb3PDqSBwYXIgTW90ZXVyUHJldmlldyDDoCBsYSBjb25zdHJ1Y3Rpb24uICovXG5ib2R5LnByZXZpZXdPbmdsZXRzRW5IYXV0ICNwcmV2aWV3QmxvY1NjZW5lLFxuYm9keS5wcmV2aWV3T25nbGV0c0VuSGF1dCAjcHJldmlld0Jsb2NBcGVyY3UgLmN0YVByZXZpZXdDb250cm9sZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogUE9DIDogbCfDqXRpcXVldHRlIGV0IGxlIGPFk3VyIGR1IHNpdGUgZGFucyBsYSBiYXJyZSBkdSBiYXMsIMOgIEdBVUNIRSwgZW4gZ3JvdXBlIGRlIGxhIGJhcnJlXG4gICAoLmRpdkFjdGlvblNjZW5lIDogdHJhaXQgZXQgMTZweCBhcHLDqHMgbGUgdHJhaXQpLCBhdmFudCBsZSBub20gZXQgbGEgZGVzY3JpcHRpb25cbiAgIChNb3RldXJQcmV2aWV3LmRlc3NpbmVyR2VzdGVzU2l0ZSkuICovXG4jcHJldmlld0Jsb2NTaXRlIHtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLyogTm9tIGV0IGRlc2NyaXB0aW9uIDogZGV1eCBsaWduZXMsIGNoYWN1bmUgc3VyIHVuZSBzZXVsZSBsaWduZSDigJQgZmF1dGUgZGUgbGFyZ2V1ciwgbGUgdGV4dGUgc2VcbiAgIGNvdXBlIGVuIHBvaW50cyBkZSBzdXNwZW5zaW9uLCBpbCBuZSBwb3Vzc2UgamFtYWlzIMKrIFByZW5kcmUgbGEgbWFpbiDCuyBob3JzIGRlIGxhIGJhcnJlLiAqL1xuLnByZXZpZXdCbG9jVGV4dGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDJweDtcbiAgICBtaW4td2lkdGg6IDA7XG59XG5cbi5wcmV2aWV3QmxvY1RleHRlTm9tLFxuLnByZXZpZXdCbG9jVGV4dGVEZXNjcmlwdGlvbiB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4ucHJldmlld0Jsb2NUZXh0ZU5vbSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNlN0cm9uZyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5wcmV2aWV3QmxvY1RleHRlRGVzY3JpcHRpb24ge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiBCYXJyZSByw6lkdWl0ZSwgw6AgbGEgZGVtYW5kZSBkdSBzY3JpcHQgKMOpdGFwZSBgYmFycmVBcGVyY3VgLCBNb3RldXJQcmV2aWV3KSA6IHBvdXIgbGEgc2PDqG5lIHF1aVxuICAgYWZmaWNoZSBxdWVscXVlIGNob3NlIGVuIGJhcyBkZSBsJ8OpY3Jhbi4gUmFuZ8OpZSDDoCBnYXVjaGUgb3Ugw6AgZHJvaXRlLCDDoCBsYSBsYXJnZXVyIGRlIHNvblxuICAgY29udGVudSDigJQgbmUgcmVzdGVudCBxdWUgbCfDqXRpcXVldHRlLCBsZSBjxZN1ciBldCDCqyBQcmVuZHJlIGxhIG1haW4gwrsuIFNhbnMgY2V0dGUgw6l0YXBlLCByaWVuXG4gICBuZSBjaGFuZ2UuICovXG4jZGl2QWN0aW9uUHJldmlldy5wcmV2aWV3QmFycmVHYXVjaGUge1xuICAgIHJpZ2h0OiBhdXRvO1xufVxuXG4jZGl2QWN0aW9uUHJldmlldy5wcmV2aWV3QmFycmVEcm9pdGUge1xuICAgIGxlZnQ6IGF1dG87XG59XG5cbjppcygjZGl2QWN0aW9uUHJldmlldy5wcmV2aWV3QmFycmVHYXVjaGUsICNkaXZBY3Rpb25QcmV2aWV3LnByZXZpZXdCYXJyZURyb2l0ZSkgI3ByZXZpZXdCbG9jQXBlcmN1IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBMZSBib3V0b24gZGUgc29ydGllIFwiUHJlbmRyZSBsYSBtYWluIOKclVwiIGVzdCBwb3Vzc8OpIHRvdXQgw6AgZHJvaXRlIGRlIGxhIGJhcnJlLCBkYW5zIGxlIGZsdXguXG4gICAoU2lsaG91ZXR0ZSBldCBjcm9peCA6IGNvbXBvc2FudHMvYm91dG9uRmVybWV0dXJlLmNzcywgaW1wb3J0w6kgZW4gdMOqdGUgZGUgY2UgZmljaGllci4pICovXG4jZGl2QWN0aW9uUHJldmlldyAubW9kYWxlQ2xvc2Uge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4vKiBMZXMgYm91dG9ucyBwb3J0ZW50IHVuZSBhY3Rpb24gOiBpbHMgcmVzdGVudCBlbnRpZXJzIGV0IGxpc2libGVzLCBqYW1haXMgcsOpdHLDqWNpcy4gKi9cbiNkaXZBY3Rpb25QcmV2aWV3IC5jdGFQcmV2aWV3Q29udHJvbGUsXG4jZGl2QWN0aW9uUHJldmlldyAuY3RhUHJldmlld0FjdGlvbixcbiNkaXZBY3Rpb25QcmV2aWV3IC5tb2RhbGVDbG9zZSB7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIMKrIEFsbGVyIMOgIGxhIGZpbiDCuyBzZSByYW5nZSDDoCBkcm9pdGUgYXZlYyBsYSBzb3J0aWUgOiBjJ2VzdCBsdWkgcXVpIHByZW5kIGxhIG1hcmdlIHF1aSBwb3Vzc2UuICovXG4jZGl2QWN0aW9uUHJldmlldyAuY3RhUHJldmlld0FjdGlvbjpub3QoW2hpZGRlbl0pIHtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbn1cblxuI2RpdkFjdGlvblByZXZpZXcgLmN0YVByZXZpZXdBY3Rpb246bm90KFtoaWRkZW5dKSArIC5tb2RhbGVDbG9zZSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi5jdGFQcmV2aWV3QWN0aW9uW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIENsaWMgc3VyIHVuZSB6b25lIG5vbiBhY3RpdmFibGUgOiBsJ8OpY3JhbiBzJ2Fzc29tYnJpdCBldCBsYSBiYXJyZSByZXN0ZSBzZXVsZSDDqWNsYWlyw6llLlxuICAgTGUgdGVtcHMgZGUgY2V0IGFzc29tYnJpc3NlbWVudCwgbGEgc29ydGllIHNlIG1ldCBlbiBmb25kIGJsYW5jIHBsZWluIOKAlCBjJ2VzdCBsZSBtb21lbnQgb8O5XG4gICBsJ3V0aWxpc2F0ZXVyIGNoZXJjaGUgY29tbWVudCBkw6libG9xdWVyLCBsYSByw6lwb25zZSBkb2l0IHNhdXRlciBhdXggeWV1eC4gQXUgcmVwb3MsIGxlXG4gICBib3V0b24gbidhIGF1Y3VuIGZvbmQgOiBsZSBibGFuYyBuZSBkaXQgcXVlbHF1ZSBjaG9zZSBxdWUgcGFyY2UgcXUnaWwgZXN0IGV4Y2VwdGlvbm5lbC4gKi9cbiNkaXZBY3Rpb25QcmV2aWV3LnByZXZpZXdBc3NvbWJyaSAubW9kYWxlQ2xvc2Uge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG59XG5cbi8qIFBhcyBkJ2FuaW1hdGlvbiBzdXIgbGUgc291cy10aXRyZSA6IGxlIHRleHRlIGNoYW5nZSBlbiBkaXJlY3QsIGNvbW1lIHVuIHNvdXMtdGl0cmUgZGUgZmlsbS5cbiAgIEFuaW1lciBsJ2VudHLDqWUgb3UgbGEgc29ydGllIGF0dGlyZSBsJ8WTaWwgc3VyIGxlIGNoYW5nZW1lbnQgYXUgbGlldSBkdSBjb250ZW51IMOgIGxpcmUuICovXG5cbi8qIFNpbGhvdWV0dGUgOiAuY3RhMTQgKDMxX2N0YS5jc3MpIOKAlCBpY2kgdW5pcXVlbWVudCBsYSBjb3VsZXVyIGR1IHLDtGxlLlxuICAgQydlc3QgTEUgbW9kw6hsZSBkdSBzb2NsZSAuY3RhMTQgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KS4gTCdvbWJyZSBwb3J0w6llIGVzdFxuICAgdW5lIGV4Y2VwdGlvbiBwcm9wcmUgw6AgY2V0dGUgYmFycmUgOiBzb24gZm9uZCBlc3QgdHJhbnNwYXJlbnQsIGwnb21icmUgZMOpY29sbGVcbiAgIGxlcyBib3V0b25zIOKAlCBuZSBwYXMgbGEgZ8OpbsOpcmFsaXNlciBhdXggYXV0cmVzIGN0YTE0IChkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkuICovXG4uY3RhUHJldmlld0NvbnRyb2xlLFxuLmN0YVByZXZpZXdBY3Rpb24ge1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYSk7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xuICAgIC8qIFBsZWluIDogTEEgYm9yZHVyZSwgdHJhbnNwYXJlbnRlIOKAlCBtw6ptZSBoYXV0ZXVyIHF1ZSB0b3V0IGJvdXRvbiBkZSBsJ8OpY3JhblxuICAgICAgICguY3RhRWNyYW5QcmltYWlyZSwgX3NjZW5lQm91dG9ucy5jc3MpLiAqL1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ3RhKTtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5cbi8qIFNvdXMtdGl0cmUgZmxvdHRhbnQgKHN0eWxlIFwic291cy10aXRyZSB2aWTDqW9cIikgOiBhdS1kZXNzdXMgZGUgbGEgYmFycmUsIGhvcnMgYW5pbWF0aW9uLlxuICAgUG9zaXRpb24gYm90dG9tIGNhbGN1bMOpZSBlbiBKUy4gQWZmaWNow6kgdmlhIC5wcmV2aWV3U291c1RpdHJlVmlzaWJsZSwgYXV0by1lZmZhY8OpIHBhciB0aW1lci4gKi9cbiNwcmV2aWV3U291c1RpdHJlIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICB6LWluZGV4OiA5OTk5MjA7XG4gICAgbWF4LXdpZHRoOiA4MHZ3O1xuICAgIHBhZGRpbmc6IDEwcHggMjJweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogI2Y2ZTJmYTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBmb250OiB2YXIoLS1mSDIpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZVBvcnRlZTIpO1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNwcmV2aWV3U291c1RpdHJlLnByZXZpZXdTb3VzVGl0cmVWaXNpYmxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyogT25nbGV0cyBkZSBsYSBwb3B1cCA6IGwnYWN0aWYgZ2FyZGUgbGUgYm91dG9uIG5vcm1hbCBkZSBsYSBiYXJyZSAoaW50b3VjaMOpLCBjb3VsZXVyIGRlXG4gICBsJ2VzcGFjZSkgOyBsZXMgYXV0cmVzIHNlIGdyaXNlbnQgKGFzcGVjdCB0b2dnbGUgbWVudSkuIE9uIG5lIGNoYW5nZSBRVUUgbGEgY291bGV1ciDigJQgZm9ybWVcbiAgIGV0IHBvc2l0aW9uIGluY2hhbmfDqWVzLiAqL1xuLmN0YVByZXZpZXdDb250cm9sZUluYWN0aWYgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7IGNvbG9yOiB2YXIoLS1jTm9pcjMpOyBib3gtc2hhZG93OiBub25lOyB9XG5cbi8qIEJvdXRvbiBSw6lzdWx0YXQgOiDDoCBzYSBwcmVtacOocmUgYXBwYXJpdGlvbiAoZmluIGQnYXBlcsOndSksIHVuIHB1bHNlIGQnYXR0ZW50aW9uIGRlIH4zIHMgc2lnbmFsZVxuICAgwqsgdW4gbm91dmVhdSBib3V0b24gdmllbnQgZCdhcHBhcmHDrnRyZSDCuy4gUHVyZW1lbnQgdmlzdWVsICh0cmFuc2Zvcm0pLCBuZSBkw6ljYWxlIHBhcyBsYSBiYXJyZS4gKi9cbkBrZXlmcmFtZXMgY3RhUHJldmlld1Jlc3VsdGF0Tm91dmVhdSB7XG4gICAgMCUgICB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cbiAgICAzMCUgIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjE0KTsgfVxuICAgIDYwJSAgeyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9XG4gICAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cbn1cblxuLmN0YVByZXZpZXdSZXN1bHRhdE5vdXZlYXUge1xuICAgIGFuaW1hdGlvbjogY3RhUHJldmlld1Jlc3VsdGF0Tm91dmVhdSAwLjlzIGVhc2UtaW4tb3V0IDM7XG59XG5cbi8qIOKUgOKUgCBQb3B1cCDDoCB2dWVzIChwcsOpc2VudGF0aW9uIC8gY29uZmlnLCByw6l1dGlsaXNhYmxlIHBvdXIgbGEgZmluIGQnYXBlcsOndSkg4pSA4pSAXG4gICBQT0MgdmVyc2lvbiDCqyBiYXMgwrsgOiBsYSBiYXJyZSByZXN0ZSBibG9xdcOpZSBlbiBiYXMgKHBpZWQgKyBvbmdsZXRzKSwgbGUgY29ycHNcbiAgIGdyYW5kaXQgYXUtZGVzc3VzLiBMZSBmb25kIHBhc3NlIFNPVVMgbGEgYmFycmUgKHogOTk5MCA8IDk5OTEpIHBvdXIgbGEgZ2FyZGVyXG4gICB2aXNpYmxlIGV0IGNsaXF1YWJsZS4gTGUgYGJvdHRvbWAgZHUgY29ycHMgZXN0IGNhbGN1bMOpIGVuIEpTIChhbmNyw6kgc3VyIGxhIGJhcnJlKS4gKi9cbiNwcmV2aWV3UG9wdXBGb25kIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgaW5zZXQ6IDA7XG4gICAgei1pbmRleDogOTk5OTIxO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPdmVybGF5KTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlO1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNwcmV2aWV3UG9wdXBGb25kLnByZXZpZXdQb3B1cFZpc2libGUge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbiNwcmV2aWV3UG9wdXBDb3JwcyB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGxlZnQ6IDE2cHg7XG4gICAgcmlnaHQ6IDE2cHg7XG4gICAgdG9wOiA2dmg7XG4gICAgLyogYm90dG9tIDogYXBwbGlxdcOpIGVuIEpTIHBvdXIgc2UgcG9zZXIganVzdGUgYXUtZGVzc3VzIGRlIGxhIGJhcnJlICovXG4gICAgLyogTGFyZ2V1ciBib3Juw6llIHB1aXMgY2VudHLDqWUgZW50cmUgbGVmdCBldCByaWdodCAobGEgYmFycmUsIGVsbGUsIHJlc3RlIHBsZWluZSBsYXJnZXVyKS4gKi9cbiAgICBtYXgtd2lkdGg6IDEyODBweDtcbiAgICBtYXJnaW4taW5saW5lOiBhdXRvO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlTW9kYWxlKTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyNHB4KTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSwgdHJhbnNmb3JtIDAuNHMgZWFzZTtcbn1cblxuI3ByZXZpZXdQb3B1cEZvbmQucHJldmlld1BvcHVwVmlzaWJsZSAjcHJldmlld1BvcHVwQ29ycHMge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuXG4vKiBFbi10w6p0ZSBmaXhlIDogYmFycmUgYmxhbmNoZSB0aXRyZSArIGNyb2l4LCBhdmVjIGZpbiB0cmFpdCBkZSBkw6lsaW1pdGF0aW9uIGRlc3NvdXMuXG4gICBmbGV4LXNocmluazowIOKGkiByZXN0ZSBlbiBoYXV0IHBlbmRhbnQgcXVlIGxlIGNvcnBzIHNjcm9sbGUgKGxhIGNyb2l4IG5lIHBhcnQgamFtYWlzKS4gKi9cbi5wcmV2aWV3UG9wdXBFbnRldGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgMTYgLT4gMjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBmbGV4LXNocmluazogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNCbGFuYzAzKTtcbn1cblxuLnByZXZpZXdQb3B1cFRpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4vKiBVbiBjb250ZW5ldXIgcGFyIHZ1ZSA7IHNldWwgbCdhY3RpZiBlc3QgYWZmaWNow6kgKGxlcyBhdXRyZXMgcmVzdGVudCBtb250w6lzLCBjYWNow6lzKS5cbiAgIFNjcm9sbGUgU09VUyBsJ2VuLXTDqnRlIOKAlCBsZSBjb3JwcyB2YXJpZSAoaWZyYW1lLCBjb25maWcsIGNvbnN0YXTigKYpLiAqL1xuLnByZXZpZXdQb3B1cFZ1ZSB7XG4gICAgZmxleDogMTtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICAgIG92ZXJmbG93OiBhdXRvO1xufVxuXG4ucHJldmlld1BvcHVwSWZyYW1lIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyOiBub25lO1xufVxuXG4vKiBWdWUgZW4gSlMgKGxpc3RlIMKrIEF1dHJlcyBhcGVyw6d1cyDCu+KApikgOiBsZSBjb3JwcyBuJ2EgcGFzIGRlIHBhZGRpbmcgKGwnaWZyYW1lIGxlIGfDqHJlIGVuXG4gICBpbnRlcm5lKSwgZG9uYyBsZSBjb250ZW51IEpTIGFwcG9ydGUgbGUgc2llbi4gKi9cbi5wcmV2aWV3UG9wdXBMaXN0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpOyAvKiBhbGlnbsOpIDE2IC0+IDIwcHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogMjRweDtcbn1cblxuLyogVnVlIMKrIFLDqXN1bHRhdCDCuyAoZmluIGQnYXBlcsOndSkgOiBjb3JwcyBKUyDihpIgYXBwb3J0ZSBzb24gcGFkZGluZyAoY2YuIC5wcmV2aWV3UG9wdXBWdWUgc2FucyBwYWRkaW5nKS5cbiAgIFNhbnMgcGFnZSBkZSByw6lzdWx0YXRzIGFmZmljaGFibGUsIGxlIG1lc3NhZ2UgbmV1dHJlIHNlIHN0eWxlIHZpYSAucHJldmlld1Jlc3VsdGF0VmlkZVRleHRlLiAqL1xuLnByZXZpZXdSZXN1bHRhdENvcnBzIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xufVxuXG4ucHJldmlld1Jlc3VsdGF0VmlkZVRleHRlIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBwYWRkaW5nOiAyNHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiDilIDilIAgVnVlIMKrIFLDqXN1bHRhdCDCuyAodMOpbMOpY2hhcmdlbWVudHMpIDogYmxvY3MgcmVuZHVzIHBhciBsZXMgcmVzdWx0YXQuanMgZGVzIHNjw6huZXMg4pSA4pSAICovXG5cbi5wcmV2aWV3UmVzdWx0YXRDb3JwcyAuYmxvY1Jlc3VsdGF0U2NlbmUge1xuICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4ucHJldmlld1Jlc3VsdGF0Q29ycHMgLmJsb2NSZXN1bHRhdFRpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hcmdpbjogMCAwIDEycHggMDtcbn1cblxuLnByZXZpZXdSZXN1bHRhdENvcnBzIC5ibG9jUmVzdWx0YXRCb3V0b25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IDEycHg7XG59XG5cbi5wcmV2aWV3UmVzdWx0YXRDb3JwcyAuY3RhU2Vjb25kYWlyZSB7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBwYWRkaW5nOiA4cHggMTRweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ3RhKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucHJldmlld1Jlc3VsdGF0Q29ycHMgLmN0YVNlY29uZGFpcmU6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLyog4pSA4pSAIFZ1ZSDCqyBDb25zdGF0IMK7IDogYmxvY3MgcmVuZHVzIHBhciBsZXMgY29uc3RhdC5qcyBkZXMgc2PDqG5lcyDilIDilIAgKi9cblxuLmJsb2NDb25zdGF0U2NlbmUge1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG59XG5cbi5jb25zdGF0U2NlbmVUaXRyZSB7XG4gICAgZm9udDogdmFyKC0tZkgyKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBtYXJnaW46IDAgMCA4cHg7XG59XG5cbi5jb25zdGF0Um91bGV0dGVMaXN0ZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDI4cHg7XG59XG5cbi5jb25zdGF0Um91bGV0dGVMaXN0ZSBsaSB7XG4gICAgcGFkZGluZzogMnB4IDA7XG59XG5cbi5jb25zdGF0Um91bGV0dGVWaWRlLFxuLmNvbnN0YXRQcml6ZVZpZGUge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogOHB4IDAgMTZweDtcbn1cblxuLyog4pSA4pSAIFNvdXMtc2VjdGlvbnMgZHUgY29uc3RhdCAoY29tbXVuKSDilIDilIAgKi9cblxuLmNvbnN0YXRTb3VzVGl0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG4gICAgbWFyZ2luOiAxNnB4IDAgOHB4O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uY29uc3RhdFNvdXNUaXRyZUFubnVsZXMge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UzKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uY29uc3RhdE5vdGVBbm51bGVzIHtcbiAgICBmb250OiB2YXIoLS1mSXRhbGljMTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogMCAwIDhweDtcbn1cbiovXG5cbi5jb25zdGF0VGFibGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgbWFyZ2luOiA4cHggMCAxNnB4O1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4uY29uc3RhdFRhYmxlIHRoIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1jTm9pcjUpO1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuXG4uY29uc3RhdFRhYmxlIHRkIHtcbiAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uY29uc3RhdFRhYmxlIHRyOmxhc3QtY2hpbGQgdGQge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi5jb25zdGF0VGFibGUgdGg6Zmlyc3QtY2hpbGQsXG4uY29uc3RhdFRhYmxlIHRkOmZpcnN0LWNoaWxkIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogQ2FydGUgdmFyaWFudGUgOiB0aXRyZSArIGRlc2NyaXB0aW9uICsgbGllbi5cbiAgIFV0aWxpc8OpZSBhdXNzaSBwb3VyIGwnYXBlcsOndSBjb3VyYW50IChhdmVjIGxhIGNsYXNzZSBtb2RpZmljYXRyaWNlIC5wcmV2aWV3RmluVmFyaWFudGVDb3VyYW50ZSkuICovXG4ucHJldmlld0ZpblZhcmlhbnRlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAxNnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnByZXZpZXdGaW5WYXJpYW50ZSBoMyB7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBtYXJnaW46IDAgMCA2cHg7XG59XG5cbi5wcmV2aWV3RmluVmFyaWFudGUgcCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAwIDAgMTBweDtcbn1cblxuLnByZXZpZXdGaW5WYXJpYW50ZUxpZW4ge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XG59XG5cbi5wcmV2aWV3RmluVmFyaWFudGVMaWVuOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLyogQ2FydGUgZGUgbCdhcGVyw6d1IGVuIGNvdXJzIDogbGlzZXLDqSBhY2NlbnQgKyBsaWJlbGzDqSDCqyBBcGVyw6d1IGVuIGNvdXJzIMK7IChzYW5zIGxpZW4pLiAqL1xuLnByZXZpZXdGaW5WYXJpYW50ZUNvdXJhbnRlIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggdmFyKC0tY0FjY2VudF9hKTtcbn1cblxuLnByZXZpZXdGaW5WYXJpYW50ZUV0YXQge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50X2EpO1xufVxuXG4vKiDilIDilIAgQ3Vyc2V1ciDilIDilIAgKi9cblxuLyogTGEgZmzDqGNoZSBkZSBzb3VyaXMsIHZhcmlhbnRlIGR1IHBvaW50ZXVyIGNvbW11biAoa2l0UHVyL3ByZXZpZXcvcG9pbnRldXJQcmV2aWV3LmNzcykgOiBzdXIgbGVcbiAgIGRvY3VtZW50IGVudGllci4gU2EgcG9pbnRlIGVzdCDDoCAoMiwgMikgZGUgbGEgZ3JpbGxlIGRlIDI4LCBzb2l0IDMsNDMgcHggZGFucyBsZSBkZXNzaW4gZGUgNDggcHguXG4gICBMYSBmb3JtZSB0cmFwdWUsIHNhbnMgcXVldWUsIGVtcMOqY2hlIGRlIGxhIGNvbmZvbmRyZSBhdmVjIGxhIHNvdXJpcyBkdSBzcGVjdGF0ZXVyLiAqL1xuLmN1cnNldXJQcmV2aWV3IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogOTk5OTk4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0b3A6IDUwJTtcbiAgICAtLXBvaW50ZXVyUG9pbnRlWDogMy40M3B4O1xuICAgIC0tcG9pbnRldXJQb2ludGVZOiAzLjQzcHg7XG59XG5cbi5jdXJzZXVyUHJldmlld0ZsYXNoIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogOTk5OTk3O1xufVxuXG4vKiDCqyDDiWNyYW4gdHJvcCBwZXRpdCDCuyBtaWdyw6kg4oaSIF9ib2l0ZURpYWxvZ3VlLmNzcyAoYm/DrnRlcyBkZSBkaWFsb2d1ZSBnw6luw6lyaXF1ZXMpLCAyMDI2LTA2LTIxLiAqL1xuXG4vKiDilIDilIAgUGFubmVhdSDCqyBRdWVscXVlcyBpbnN0YW50cyBwbHVzIHRhcmQgwrsgKHNjw6huZSBkZSBydXB0dXJlKSDilIDilIBcbiAgIMOJY291cnRlIHVuZSBhbmltYXRpb24gdHJvcCBsb25ndWUgcG91ciBtb250cmVyIHNhIGZpbi4gTcOqbWUgQUROIHF1ZSBsYSBtb2RhbGUgZGUgZmluLFxuICAgbWFpcyBwbGVpbiDDqWNyYW4gZXQgZW4gZm9uZHUgKGphbWFpcyBicnV0YWwpIDogbGUgZm9uZHUgZGl0IMKrIGR1IHRlbXBzIHBhc3NlIMK7LiAqL1xuI3ByZXZpZXdRdWVscXVlc0luc3RhbnRzT3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGluc2V0OiAwO1xuICAgIHotaW5kZXg6IDk5OTkyNjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY092ZXJsYXkpO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2Utb3V0OyAvKiBtw6ptZSBjb3VyYmUgcXVlIGwnYXNzb21icmlzc2VtZW50IGQnb3V2ZXJ0dXJlICgjcHJldmlld092ZXJsYXkpLCBkZXV4IGZvaXMgcGx1cyByYXBpZGUgKi9cbn1cblxuI3ByZXZpZXdRdWVscXVlc0luc3RhbnRzT3ZlcmxheS5wcmV2aWV3UXVlbHF1ZXNJbnN0YW50c1Zpc2libGUge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbiNwcmV2aWV3UXVlbHF1ZXNJbnN0YW50c0NvbnRlbnUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xuICAgIG1heC13aWR0aDogNTYwcHg7XG4gICAgd2lkdGg6IDkwJTtcbiAgICBwYWRkaW5nOiA0OHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlTW9kYWxlKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTtcbn1cblxuLyogTGUgcGFubmVhdSBhcHBhcmHDrnQgQVBSw4hTIGwnYXNzb21icmlzc2VtZW50LCBldCBwYXJ0IEFWQU5UIHF1ZSBsJ2Fzc29tYnJpc3NlbWVudCBzZSBsw6h2ZS4gKi9cbiNwcmV2aWV3UXVlbHF1ZXNJbnN0YW50c0NvbnRlbnUucHJldmlld1F1ZWxxdWVzSW5zdGFudHNDb250ZW51VmlzaWJsZSB7XG4gICAgb3BhY2l0eTogMTtcbn1cblxuI3ByZXZpZXdRdWVscXVlc0luc3RhbnRzQ29udGVudSBoMiB7XG4gICAgZm9udDogdmFyKC0tZkgyKTtcbiAgICBtYXJnaW46IDA7XG59XG5cbiNwcmV2aWV3UXVlbHF1ZXNJbnN0YW50c0NvbnRlbnUgcCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiDilIDilIAgTGUgcGFzc2FnZSAoTW90ZXVyUHJldmlldy5vdXZyaXJQYXNzYWdlIDogY2xhc3NlIHByZXZpZXdQYXNzYWdlRW5Db3VycyBzdXIgbGUgYm9keSkg4pSA4pSAXG4gICBMZSBib3V0b24gwqsgUGFzc2VyIMOgIDogWCDCuyB2aXQgREFOUyBsYSBiYXJyZSBkZSBwaWxvdGFnZSAoI3pvbmVQcm9ncmVzc0JhciksIGV0IGxhIGJhcnJlLFxuICAgZml4w6llLCBlc3QgdW4gY29udGV4dGUgZCdlbXBpbGVtZW50IDogYXVjdW4gZGUgc2VzIGVuZmFudHMgbmUgcGV1dCBwYXNzZXIgc2V1bCBhdS1kZXNzdXNcbiAgIGR1IHZvaWxlIGRlIGxhIGJvw650ZSAoOTk5OTI2KS4gUG91ciBxdWUgbGUgZ2VzdGUgc2Ugdm9pZSwgYydlc3QgZG9uYyBsYSBiYXJyZSBlbnRpw6hyZSBxdWlcbiAgIG1vbnRlICg5OTk5MjcpIOKAlCBldCBwb3VyIHF1J29uIG5lIHZvaWUgUVVFIGxlIGdlc3RlLCBlbGxlIHNlIHZvaWxlIGVsbGUtbcOqbWUgZW4gbcOqbWUgdGVtcHMsXG4gICBkZSBsYSBtw6ptZSBvbWJyZSBxdWUgbCfDqWNyYW4gOiBzb24gcHJvcHJlIHZvaWxlICgjYmFycmVQaWxvdGFnZTo6YmVmb3JlLCBfYmFycmVGaW4uY3NzKSxcbiAgIGxldsOpIGljaSBxdWVsIHF1ZSBzb2l0IGwnw6l0YXQgZGUgbGEgYmFycmUgZGUgZmluLiBTZXVsZSAjem9uZVByb2dyZXNzQmFyICh6IDIsIGF1LWRlc3N1c1xuICAgZHUgdm9pbGUsIF9zdHVkaW9JbnRlZ3JlZS5jc3MpIHJlc3RlIMOpY2xhaXLDqWUgOiBsZSBjdXJzZXVyICg5OTk5OTkpIHkgdmEgZXQgY2xpcXVlIHNvdXMgbGVzXG4gICB5ZXV4IGR1IHZpc2l0ZXVyLiBNw6ptZSByZW5kdSBwb3VyIHRvdXRlcyBsZXMgc2PDqG5lcywgYmFycmUgZGUgZmluIGTDqXBsb3nDqWUgb3Ugbm9uLiAqL1xuYm9keS5wcmV2aWV3UGFzc2FnZUVuQ291cnMgI2JhcnJlUGlsb3RhZ2Uge1xuICAgIHotaW5kZXg6IDk5OTkyNztcbn1cblxuYm9keS5wcmV2aWV3UGFzc2FnZUVuQ291cnMgI2JhcnJlUGlsb3RhZ2U6OmJlZm9yZSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3ZlcmxheSk7XG59XG5cbi8qIERhbnMgbGEgem9uZSDDqWNsYWlyw6llLCByaWVuIGQnYXV0cmUgcXVlIGxlIGJvdXRvbiDCqyBQYXNzZXIgw6AgOiBYIMK7IDogbGEgYmFycmUgZGUgZmluIGRlXG4gICBsYSBzY8OobmUgKGhvcnMgZmx1eCwgZGFucyBsYSB6b25lIOKAlCBfYmFycmVGaW4uY3NzKSBzZSByYW5nZSBsZSB0ZW1wcyBkdSBwYXNzYWdlLCBldCBsZVxuICAgZm9uZCBkZSBsYSB6b25lIHJlc3RlIGJsYW5jIG3Dqm1lIHF1YW5kIGxhIGJhcnJlIGRlIGZpbiBsJ2F2YWl0IHRlaW50w6kuIExlcyBtaW5pLXdpZGdldHNcbiAgIChjb21wdGV1cnMpIGZsb3R0ZW50IGF1LWRlc3N1cyBkZSBsYSBiYXJyZSwgaG9ycyBkZSBzb24gdm9pbGUgOiBpbHMgc2UgcmFuZ2VudCBhdXNzaS4gKi9cbmJvZHkucHJldmlld1Bhc3NhZ2VFbkNvdXJzICNiYXJyZUZpblNjZW5lLFxuYm9keS5wcmV2aWV3UGFzc2FnZUVuQ291cnMgI21pbmlXaWRnZXRzIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cbmJvZHkucHJldmlld1Bhc3NhZ2VFbkNvdXJzICN6b25lUHJvZ3Jlc3NCYXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG59XG5cbi8qIExhIGJvw650ZSBkZSBwYXNzYWdlIGVudHJlIGRldXggc2PDqG5lcyAoTW90ZXVyUHJldmlldy5vdXZyaXJQYXNzYWdlKSA6IGRldXggdHVpbGVzIGRlIG3Dqm1lXG4gICB0YWlsbGUsIGwnaWPDtG5lIGV0IHF1ZWxxdWVzIG1vdHMuIFVuIGNhZHJlIMOgIHBhcnQsIHBvc8OpIHN1ciBsYSBwcmVtacOocmUsIGdsaXNzZSBqdXNxdSfDoCBsYVxuICAgc2Vjb25kZSA7IGVuIGRlc3NvdXMsIHVuZSBmbMOoY2hlIGRlIGwndW5lIMOgIGwnYXV0cmUgcmFwcGVsbGUgbGEgZnJpc2UgZHUgc2PDqW5hcmlvLiAqL1xuLyogTGEgYm/DrnRlIGRlIHBhc3NhZ2Ugc2Ugc2VycmUgc3VyIHNlcyB0dWlsZXMgKHBhcyBsYSBsYXJnZXVyIGR1IHBhbm5lYXUgwqsgUXVlbHF1ZXNcbiAgIGluc3RhbnRzIMK7LCBxdWkgcGFydGFnZSBsZSBtw6ptZSBjb250ZW51KSA6IGVsbGUgbmUgZGlzcHV0ZSByaWVuIMOgIGwnw6ljcmFuIHZvaWzDqS4gKi9cbiNwcmV2aWV3UXVlbHF1ZXNJbnN0YW50c0NvbnRlbnUucHJldmlld1Bhc3NhZ2VCb2l0ZSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgcGFkZGluZzogMzJweCA0MHB4O1xufVxuXG4ucHJldmlld1Bhc3NhZ2VUdWlsZXMge1xuICAgIC0tdHVpbGVMYXJnZXVyOiAxNjBweDtcbiAgICAtLXR1aWxlRWNhcnQ6IDQwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgZ2FwOiB2YXIoLS10dWlsZUVjYXJ0KTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjhweDsgLyogbGEgcGxhY2UgZGUgbGEgZmzDqGNoZSAqL1xufVxuXG4ucHJldmlld1Bhc3NhZ2VUdWlsZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHdpZHRoOiB2YXIoLS10dWlsZUxhcmdldXIpO1xuICAgIHBhZGRpbmc6IDIwcHggMTJweDtcbiAgICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1jQmxhbmMwMyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBvcGFjaXR5OiAuNTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC45cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZCAuOXMgZWFzZS1pbi1vdXQ7XG59XG5cbi5wcmV2aWV3UGFzc2FnZVR1aWxlLnByZXZpZXdQYXNzYWdlVHVpbGVBY3RpdmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQwKTtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4vKiA2NHB4IGRlIGRlc3NpbiwgbGEgZ3JhbmRlIGRlcyBkZXV4IHRhaWxsZXMgZCdpY8O0bmUgZGUgc2PDqG5lIGR1IHByb2pldFxuICAgKGFzc2V0cy9ub3lhdS9jc3Mvc3R1ZGlvLzU0X2ljb25lcy5jc3MpIDsgbGEgdHVpbGUgbWV0IGwnYWlyIGF1dG91ci4gKi9cbi5wcmV2aWV3UGFzc2FnZVR1aWxlIGltZyB7XG4gICAgd2lkdGg6IDY0cHg7XG4gICAgaGVpZ2h0OiA2NHB4O1xufVxuXG4vKiBMJ8OpdGlxdWV0dGUgZGUgbGEgY3VlLCBjZWxsZSBkdSBib3V0b24gwqsgUGFzc2VyIMOgIDogWCDCuyA6IHVuIG1vdCBlbiBQYXNjYWxDYXNlIHNhbnMgZXNwYWNlXG4gICAowqsgUHJpemVOYW1lV2hlZWwgwrssIMKrIFdpbnNSZWVsR3JpZCMyIMK7KSDigJQgbGEgdHVpbGUgZmFpdCBsYSBsYXJnZXVyIGR1IHBsdXMgbG9uZywgZXQgdW5cbiAgIG5vbSBwbHVzIGxvbmcgZW5jb3JlIHNlIGNvdXBlIHBsdXTDtHQgcXVlIGRlIHNvcnRpci4gKi9cbi5wcmV2aWV3UGFzc2FnZVR1aWxlIHNwYW4ge1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xufVxuXG4vKiBMZSBjYWRyZSBxdWkgZ2xpc3NlIDogbcOqbWUgdGFpbGxlIHF1ZSBsYSB0dWlsZSwgcG9zw6kgc3VyIGxhIHByZW1pw6hyZSwgdHJhbnNsYXTDqSBzdXIgbGEgc2Vjb25kZS4gKi9cbi5wcmV2aWV3UGFzc2FnZUNhZHJlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IHZhcigtLXR1aWxlTGFyZ2V1cik7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyOHB4KTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlcjogNHB4IHNvbGlkIHZhcigtLWNBY2NlbnQzKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC45cyBlYXNlLWluLW91dDtcbn1cblxuLnByZXZpZXdQYXNzYWdlQ2FkcmUucHJldmlld1Bhc3NhZ2VDYWRyZUFycml2ZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0tdHVpbGVMYXJnZXVyKSArIHZhcigtLXR1aWxlRWNhcnQpKSk7XG59XG5cbi8qIExhIGZsw6hjaGUgc291cyBsZXMgdHVpbGVzLCBkdSBjZW50cmUgZGUgbGEgcHJlbWnDqHJlIGF1IGNlbnRyZSBkZSBsYSBzZWNvbmRlLiAqL1xuLnByZXZpZXdQYXNzYWdlRmxlY2hlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogY2FsYyh2YXIoLS10dWlsZUxhcmdldXIpIC8gMik7XG4gICAgcmlnaHQ6IGNhbGModmFyKC0tdHVpbGVMYXJnZXVyKSAvIDIpO1xuICAgIGJvdHRvbTogOHB4O1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXItdG9wOiAzcHggc29saWQgdmFyKC0tY05vaXIzKTtcbn1cblxuLnByZXZpZXdQYXNzYWdlRmxlY2hlOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAtMnB4O1xuICAgIHRvcDogLThweDtcbiAgICBib3JkZXI6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItbGVmdDogMTJweCBzb2xpZCB2YXIoLS1jTm9pcjMpO1xuICAgIGJvcmRlci1yaWdodDogMDtcbn1cblxuLyogSWPDtG5lIGQnYXR0ZW50ZSAoaWNvbmVBdHRlbnRlLnRzKSA6IHJvdGF0aW9uIGxlbnRlID0gwqsgbGUgdGVtcHMgdG91cm5lIMK7LiBDb3VsZXVyID0gYGNvbG9yYC4gKi9cbiNwcmV2aWV3UXVlbHF1ZXNJbnN0YW50c1NhYmxpZXIge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBhbmltYXRpb246IHByZXZpZXdTYWJsaWVyUm90YXRpb24gM3MgbGluZWFyIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIHByZXZpZXdTYWJsaWVyUm90YXRpb24ge1xuICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICAgIHRvICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XG59XG5cbi8qIOKUgOKUgCBMZSB0w6lsw6lwaG9uZSBkdSBqb3VldXIsIMOgIGPDtHTDqSBkZSBsYSBzY8OobmUgKFRlbGVwaG9uZUFwZXJjdS50cykg4pSA4pSAXG4gICDDgCBkcm9pdGUsIGVudHJlIGxhIGJ1bGxlIGV0IGxhIGJhcnJlIGRlIGwnYXBlcsOndSAodG9wLCBsYXJnZXVyIGV0IGhhdXRldXIgcG9zw6lzIGVuIEpTKS4gQXUtZGVzc3VzXG4gICBkdSB2b2lsZSBkJ291dmVydHVyZSwgc291cyDCqyBRdWVscXVlcyBpbnN0YW50cyBwbHVzIHRhcmQgwrsgZXQgbGEgYm/DrnRlIGRlIHBhc3NhZ2UsIHF1aSBsJ2Fzc29tYnJpc3NlbnRcbiAgIGNvbW1lIGxhIHNjw6huZS4gVW5lIHZ1ZSwgcGFzIHVuZSBjb21tYW5kZSA6IGxlIGRvaWd0IGRlIGwnYXBlcsOndSB5IGpvdWUsIGxlIHZpc2l0ZXVyIG4neSB0b3VjaGUgcGFzLlxuICAgTcOqbWUgc2lsaG91ZXR0ZSBxdWUgbGUgdMOpbMOpcGhvbmUgZGUgbCdhcGVyw6d1IHBhcnRpY2lwYW50ICguYXBlcmN1UGFydGljaXBhbnRBcHBhcmVpbFRlbGVwaG9uZSkuICovXG4jcHJldmlld1RlbGVwaG9uZSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHJpZ2h0OiAxNnB4O1xuICAgIHotaW5kZXg6IDk5OTkyMjtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuI3ByZXZpZXdUZWxlcGhvbmVbaGlkZGVuXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogVW5lIHZ1ZSBkZSBsYSBwb3B1cCBvdXZlcnRlIHBhc3NlIHBhci1kZXNzdXMgbGUgdMOpbMOpcGhvbmUgOiBpbCByZXN0ZSDDoCBzYSBwbGFjZSwgc291cyBsZSB2b2lsZSxcbiAgIGFzc29tYnJpIGNvbW1lIGxhIHNjw6huZSDigJQgamFtYWlzIGVmZmFjw6ksIGxlIGJvdXRvbiBxdWkgbGUgbWFzcXVlIGRpdCB0b3Vqb3VycyB2cmFpIChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0yNSkuICovXG5ib2R5OmhhcygjcHJldmlld1BvcHVwRm9uZC5wcmV2aWV3UG9wdXBWaXNpYmxlKSAjcHJldmlld1RlbGVwaG9uZSB7XG4gICAgei1pbmRleDogOTk5OTIwO1xufVxuXG4ucHJldmlld1RlbGVwaG9uZUFwcGFyZWlsIHtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgcGFkZGluZzogMTRweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyMSk7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVNb2RhbGUpO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xufVxuXG4ucHJldmlld1RlbGVwaG9uZUVjcmFuIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXItcmFkaXVzOiAzOHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG59XG5cbi5wcmV2aWV3VGVsZXBob25lRWNyYW4gaWZyYW1lIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xufVxuXG4vKiDilIDilIAgTGUgdG91ciA6IHF1aSBqb3VlLCBsYSBzY8OobmUgb3UgbGUgdMOpbMOpcGhvbmUgKFRlbGVwaG9uZUFwZXJjdS5tYXJxdWVyVG91cikg4pSA4pSAXG4gICBUw6lsw6lwaG9uZSBhZmZpY2jDqSwgbGUgY8O0dMOpIHF1aSBuZSBqb3VlIHBhcyBwYXNzZSBzb3VzIHVuIHZvaWxlIGRlIHBvcHVwLCBwb2ludGV1ciBjb21wcmlzLlxuICAgQXUgdMOpbMOpcGhvbmUgOiBsZSB2b2lsZSBjb3V2cmUgdG91dGUgbGEgc2PDqG5lLCBmbMOoY2hlIGRlIHNvdXJpcyBkZXNzb3VzICg5OTk5OTcsIGF1LWRlc3N1cyBkZXNcbiAgIGJvw650ZXMgZGUgZGlhbG9ndWUpLCBldCBsZSB0w6lsw6lwaG9uZSBwYXNzZSBwYXItZGVzc3VzIDsgbGEgYmFycmUgZXQgbGEgYnVsbGUgcmVzdGVudCBhdS1kZXNzdXMgZGVcbiAgIHRvdXQuIMOAIGxhIHNjw6huZSA6IGxlIHZvaWxlIGNvdXZyZSBsJ8OpY3JhbiBkdSB0w6lsw6lwaG9uZSwgZG9pZ3QgY29tcHJpcyAoZG9pZ3QgeiAyKS4gVW5lIHZ1ZSBkZVxuICAgbGEgcG9wdXAgb3V2ZXJ0ZSBnYXJkZSBzb24gcHJvcHJlIHZvaWxlIDogY2VsdWkgZGUgbGEgc2PDqG5lIHMnZWZmYWNlLiAqL1xuI3ByZXZpZXdWb2lsZVNjZW5lIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgaW5zZXQ6IDA7XG4gICAgei1pbmRleDogOTk5OTk4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPdmVybGF5KTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLW91dDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuYm9keS5wcmV2aWV3VG91clRlbGVwaG9uZSAjcHJldmlld1ZvaWxlU2NlbmUge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbmJvZHk6aGFzKCNwcmV2aWV3UG9wdXBGb25kLnByZXZpZXdQb3B1cFZpc2libGUpICNwcmV2aWV3Vm9pbGVTY2VuZSB7XG4gICAgb3BhY2l0eTogMDtcbn1cblxuYm9keS5wcmV2aWV3VG91clRlbGVwaG9uZSAuY3Vyc2V1clByZXZpZXcge1xuICAgIHotaW5kZXg6IDk5OTk5Nztcbn1cblxuYm9keS5wcmV2aWV3VG91clRlbGVwaG9uZSAuY3Vyc2V1clByZXZpZXdGbGFzaCB7XG4gICAgei1pbmRleDogOTk5OTk2O1xufVxuXG5ib2R5LnByZXZpZXdUb3VyVGVsZXBob25lICNwcmV2aWV3VGVsZXBob25lIHtcbiAgICB6LWluZGV4OiA5OTk5OTk7XG59XG5cbi5wcmV2aWV3VGVsZXBob25lVm9pbGUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICB6LWluZGV4OiAzO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPdmVybGF5KTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLW91dDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuYm9keS5wcmV2aWV3VG91clNjZW5lIC5wcmV2aWV3VGVsZXBob25lVm9pbGUge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi8qIEF1IHRvdXIgZGUgbGEgc2PDqG5lLCBsZSB0w6lsw6lwaG9uZSBzZSByYW5nZSA6IG1vaXRpw6kgdmlzaWJsZSwgbGUgcmVzdGUgaG9ycyBkZSBsJ8OpY3JhbiAoc2FcbiAgIG1hcmdlIGRlIGRyb2l0ZSBjb21wcmlzZSkuIExlIHRyYWpldCBkdXJlIDMgcywgYWxsZXIgY29tbWUgcmV0b3VyIDogbGUgcmV0b3VyIHBhcnQgMyBzIGF2YW50XG4gICBsJ291dmVydHVyZSBkZXMgcsOpcG9uc2VzIChSRVRPVVJfQVZBTlRfVDBfTVMsIFRlbGVwaG9uZUFwZXJjdS50cykuIEFmZmljaMOpIHBlbmRhbnQgbGUgdG91clxuICAgZGUgbGEgc2PDqG5lLCBpbCBwYXJhw650IGTDqWrDoCByYW5nw6ksIHNhbnMgdHJhamV0IChpbCBzb3J0IGRlIGRpc3BsYXk6IG5vbmUpLiAqL1xuI3ByZXZpZXdUZWxlcGhvbmUge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzcyBlYXNlLWluLW91dDtcbn1cblxuYm9keS5wcmV2aWV3VGVsZXBob25lUmFuZ2UgI3ByZXZpZXdUZWxlcGhvbmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKDUwJSArIDE2cHgpKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCT8OOVEVTIERFIERJQUxPR1VFIOKAlCBsZSBjYWRyZSBjb21tdW4gZGUgdG91dGVzIGxlcyBib8OudGVzIGRlIGwnw6ljcmFuXG4gICAoR2VzdGlvbm5haXJlQm9pdGVzRGlhbG9ndWUudHMgOyBkw6ljaXNpb24gZHUgY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMjIpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBVbmUgc2V1bGUgYm/DrnRlIHZpc2libGUgw6AgbGEgZm9pcy4gTGEgcmFjaW5lIGNhcHRlIHRvdXMgbGVzIGNsaWNzIChibG9jYWdlIGxvY2FsKSBkw6hzIGxlXG4gICBuaXZlYXUgwqsgcGFydGllbCDCuyAoLmJvaXRlc0RpYWxvZ3VlQmxvcXVhbnQpIGV0IHBvcnRlIC5ib2l0ZXNEaWFsb2d1ZUZpZ2VBcGVyY3UgdGFudCBxdSd1bmVcbiAgIGJvw650ZSBmaWdlIGwnYXBlcsOndSAoX3ByZXZpZXcuY3NzKS4gTGUgcmVuZHUgZXN0IGNlbHVpIGRlIGxhIGJvw650ZSBkZSBzYWlzaWUgOiBncmFuZGUgY2FydGVcbiAgIHN1ciB2b2lsZSBmbG91dMOpLCB0aXRyZSBjZW50csOpLCBjcm9peCBlbiBoYXV0IMOgIGRyb2l0ZSwgVU5FIHNldWxlIGJhcnJlIGRlIGTDqWZpbGVtZW50LiAqL1xuXG4jYm9pdGVzRGlhbG9ndWUge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBpbnNldDogMDtcbiAgICB6LWluZGV4OiA5OTk5OTA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyAgICAgICAgICAvKiBuaXZlYXUgwqsgYXVjdW4gwrsgOiBsJ8OpY3JhbiByZXN0ZSBwaWxvdGFibGUgKi9cbn1cblxuI2JvaXRlc0RpYWxvZ3VlLmJvaXRlc0RpYWxvZ3VlQmxvcXVhbnQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOyAgICAgICAgICAvKiDCqyBwYXJ0aWVsIMK7IC8gwqsgdG90YWwgwrsgOiBjYXB0ZSB0b3VzIGxlcyBjbGljcyBsb2NhdXggKi9cbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3ZlcmxheSk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpO1xufVxuXG4vKiBWZXJyb3UgZGUgZMOpZmlsZW1lbnQgOiB1bmUgYm/DrnRlIGJsb3F1YW50ZSByw6lzZXJ2ZSBsYSBtb2xldHRlIMOgIGxhIGJvw650ZSDigJQgbCfDqWNyYW5cbiAgIGRlc3NvdXMgbmUgZMOpZmlsZSBKQU1BSVMgKG3Dqm1lIHF1YW5kIGxhIGJhcnJlIGRlIGRlYnVnIFN5bWZvbnkgcmVuZCBsYSBwYWdlXG4gICBkw6lmaWxhYmxlIGVuIGRldikuICovXG5odG1sOmhhcygjYm9pdGVzRGlhbG9ndWUuYm9pdGVzRGlhbG9ndWVCbG9xdWFudCkge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8qIExhIGNhcnRlLiBVTkUgU0VVTEUgQkFSUkUgREUgRMOJRklMRU1FTlQgUEFSIEJPw45URSDigJQgZMOpY2lzaW9uIGR1IGNoZWYgZGUgcHJvamV0LFxuICAgMjAyNi0wOS0wNyA6IGRldXggYXNjZW5zZXVycyBpbWJyaXF1w6lzIChjZWx1aSBkZSBsYSBib8OudGUgKyBjZWx1aSBkZSBsYSBsaXN0ZSlcbiAgIGFwcGFyYWlzc2FpZW50IGTDqHMgcXVlIGxhIGZlbsOqdHJlIG1hbnF1YWl0IGRlIGhhdXRldXIsIGV0IGxhIGJvw650ZSBlbXBvcnRhaXQgc2VzIGJvdXRvbnNcbiAgIGhvcnMgZGUgdnVlLiBMYSBjYXJ0ZSBldCB0b3V0IGNlIHF1J2lsIHkgYSBlbnRyZSBlbGxlIGV0IGxlIGNvcnBzIG5lIGZvbnQgcXUnZW1waWxlciBlblxuICAgY29sb25uZSBzYW5zIGphbWFpcyBkw6lmaWxlciAoaWxzIHNlIGxhaXNzZW50IGNvbXByaW1lciA6IG1pbi1oZWlnaHQgMCkgOiBTRVVMIGxlIGNvcnBzXG4gICBkw6lmaWxlLCBldCBsZSB0aXRyZSBjb21tZSBsZSBwaWVkIHJlc3RlbnQgdmlzaWJsZXMgcXVlbGxlIHF1ZSBzb2l0IGxhIGhhdXRldXIgZGUgbGFcbiAgIGZlbsOqdHJlLiBVbmUgc2V1bGUgbGFyZ2V1ciBwb3VyIHRvdXRlcyBsZXMgYm/DrnRlcyAoY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMjIpLiAqL1xuLmJvaXRlRGlhbG9ndWVDYXJ0ZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICAgIHdpZHRoOiA5MCU7XG4gICAgbWF4LXdpZHRoOiA3MDBweDtcbiAgICBtYXgtaGVpZ2h0OiA4NXZoO1xuICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm94LXNoYWRvdzogMCAwIDMwcHggdmFyKC0tY05vaXIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLyogTGEgY3JvaXggKHNpbGhvdWV0dGUgOiBjb21wb3NhbnRzL2JvdXRvbkZlcm1ldHVyZS5jc3MsIGltcG9ydMOpZSB2aWEgX3ByZXZpZXcuY3NzKSBlc3RcbiAgIGFuY3LDqWUgc3VyIGxhIGNhcnRlIDogZWxsZSBuZSBkw6lmaWxlIHBhcyBhdmVjIGxlIGNvcnBzLiAqL1xuLmJvaXRlRGlhbG9ndWVDcm9peCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogOHB4O1xuICAgIHJpZ2h0OiA4cHg7XG4gICAgei1pbmRleDogMTtcbn1cblxuLmJvaXRlRGlhbG9ndWVUaXRyZSB7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmJvaXRlRGlhbG9ndWVDb3JwcyB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgbWluLWhlaWdodDogMDtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG59XG5cbi5ib2l0ZURpYWxvZ3VlUGllZCB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tZ2FwTGFyZ2UpO1xufVxuXG4vKiBVbiBvdSBkZXV4IGJvdXRvbnMgYWxpZ27DqXMgYXUgY2VudHJlIDogbGUgcGllZCBkZXMgYWxlcnRlcy4gKi9cbi5ib2l0ZURpYWxvZ3VlQ3RhcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbn1cblxuLyogTGUgY29ycHMgZGVzIHRyb2lzIGFsZXJ0ZXMgKMOpY3JhbiB0cm9wIHBldGl0LCByZWNvbm5leGlvbiwgdGllcnMgZGUgY29uZmlhbmNlKSA6IHVuZVxuICAgaWPDtG5lIGV0IHVuIHRleHRlIGNvdXJ0LCBjZW50csOpcy4gKi9cbi5ib2l0ZURpYWxvZ3VlQWxlcnRlIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5ib2l0ZURpYWxvZ3VlQWxlcnRlIHN2ZyB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cblxuLmJvaXRlRGlhbG9ndWVBbGVydGUgcCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgbWFyZ2luOiAwIDAgOHB4O1xufVxuXG4vKiBGZW7DqnRyZSBiYXNzZSAocGV0aXQgw6ljcmFuLCBmZW7DqnRyZSByw6lkdWl0ZSwgYmFycmUgZGUgZGVidWcgZW4gZGV2KSA6IGxhIGNhcnRlIHNlXG4gICByZXNzZXJyZSDigJQgbW9pbnMgZGUgbWFyZ2VzLCBtb2lucyBkZSByZW1ib3VycmFnZSDigJQgcG91ciBsYWlzc2VyIGF1IGNvcnBzIGRlIHF1b2lcbiAgIG1vbnRyZXIgZGVzIGxpZ25lcy4gKi9cbkBtZWRpYSAobWF4LWhlaWdodDogNzAwcHgpIHtcbiAgICAuYm9pdGVEaWFsb2d1ZUNhcnRlIHtcbiAgICAgICAgbWF4LWhlaWdodDogOTR2aDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgIH1cblxuICAgIC5ib2l0ZURpYWxvZ3VlVGl0cmUge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgfVxufVxuXG4vKiDilIDilIAgw4ljYXJ0IMKrIGJvw650ZSBkZSBzYWlzaWUgwrsgKFNhaXNpZUVjcmFuLnRzKSDilIDilIBcbiAgIExlIGNvcnBzIGVzdCBsZSBjb250ZW5ldXIgcmVtaXMgw6AgbGEgc2PDqG5lIDsgbGUga2l0IGRlIHNhaXNpZSB5IHBvc2UgbHVpLW3Dqm1lIGxlIHRpdHJlXG4gICAoLnNhaXNpZVRpdHJlKSwgbGEgbGlzdGUgKC5zYWlzaWVDaGFtcHMpIGV0IGxlIHBpZWQgKC5zYWlzaWVCb3V0b25zKSwgbGEgY29uc2lnbmUgZXQgbGVcbiAgIHZpdmllciBlbnRyZSBsZSB0aXRyZSBldCBsYSBsaXN0ZS4gTGUgY2FkcmUgbmUgY3LDqWUgZG9uYyBuaSB0aXRyZSBuaSBwaWVkIDogbGVzIGJsb2NzIGR1XG4gICBraXQgam91ZW50IGNlcyByw7RsZXMsIGV0IGMnZXN0IGxhIExJU1RFIHF1aSBkw6lmaWxlIOKAlCB0aXRyZSwgY29uc2lnbmUgZXQgYm91dG9ucyByZXN0ZW50XG4gICB2aXNpYmxlcy4gTGEgbWFyZ2UgaW50w6lyaWV1cmUgZXN0IGNlbGxlIGR1IGZvcm11bGFpcmUgKGtpdFNpbmdsZXRvbi9zYWlzaWUvY3NzL3NhaXNpZS5jc3MpLiAqL1xuLmJvaXRlU2Fpc2llIHtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4uYm9pdGVTYWlzaWUgLmJvaXRlRGlhbG9ndWVDb3Jwcyxcbi5ib2l0ZVNhaXNpZSAuc2Fpc2llQ29udGVuZXVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWluLWhlaWdodDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uYm9pdGVTYWlzaWUgLnNhaXNpZUZvcm11bGFpcmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBtaW4taGVpZ2h0OiAwO1xufVxuXG4vKiBMYSBsaXN0ZSBwcmVuZCB0b3V0ZSBsYSBwbGFjZSBxdWkgcmVzdGUsIGV0IHBhcyB1biBwaXhlbCBkZSBwbHVzIDogbGUgcGxhZm9uZCBlbiB2aFxuICAgZGUgbGEgZmV1aWxsZSBkZSBzYWlzaWUgKHV0aWxlIGF1eCBib8OudGVzIGhvcnMgY2FkcmUpIGVzdCBsZXbDqSBpY2ksIGMnZXN0IGx1aSBxdWlcbiAgIGZhaXNhaXQgZMOpYm9yZGVyIGxhIGJvw650ZS4gTGEgbW9sZXR0ZSBxdWkgYnV0ZSBlbiBmaW4gZGUgbGlzdGUgbmUgc2UgcHJvcGFnZSBwYXMgOlxuICAgb3ZlcnNjcm9sbC1iZWhhdmlvciBlc3QgZMOpasOgIHBvc8OpIHN1ciAuc2Fpc2llQ2hhbXBzIHBhciBsYSBmZXVpbGxlIGRlIHNhaXNpZS4gKi9cbi5ib2l0ZVNhaXNpZSAuc2Fpc2llQ2hhbXBzIHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgICBtaW4taGVpZ2h0OiAwO1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG59XG5cbkBtZWRpYSAobWF4LWhlaWdodDogNzAwcHgpIHtcbiAgICAuYm9pdGVTYWlzaWUge1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC5ib2l0ZVNhaXNpZSAuc2Fpc2llRm9ybXVsYWlyZSB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICB9XG5cbiAgICAuYm9pdGVTYWlzaWUgLnNhaXNpZVRpdHJlIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgIH1cblxuICAgIC5ib2l0ZVNhaXNpZSAuc2Fpc2llQ2hhbXBzIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICB9XG5cbiAgICAvKiBMJ2FpciBwb3PDqSBlbnRyZSBsZXMgdGV4dGVzIGR1IGhhdXQgZXQgbGUgdGFibGVhdSA6IHLDqWR1aXQsIGphbWFpcyBzdXBwcmltw6kuICovXG4gICAgLmJvaXRlU2Fpc2llIC5zYWlzaWVUYWJsZWF1Qm9pdGUgLnNhaXNpZUNoYW1wcyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuNWVtO1xuICAgIH1cbn1cblxuLyogTGEgYnVsbGUgwqsgw4p0ZXMtdm91cyBzw7tyID8gwrsgdml0IGRhbnMgbGUgYm9keSwgc291cyBsZXMgYm/DrnRlcyAow6ljaGVsbGUgZGVcbiAgIHNhbGxlRWNyYW4uY3NzKSA6IGFybcOpZSBkZXB1aXMgdW5lIGJvw650ZSAoYXJyw6p0IGR1IHRlc3QsIHBvaW50YWdlLCBzdG9jayksIGVsbGUgcGFzc2VcbiAgIGF1LWRlc3N1cyDigJQgZXQgcmVzdGUgc291cyBsZSBjdXJzZXVyIGRlIGwnYXBlcsOndSwgcXVpIGRvaXQgbGEgdm9pciBjbGlxdWVyLiAqL1xuYm9keTpoYXMoI2JvaXRlc0RpYWxvZ3VlKSAuYnVsbGVDb25maXJtYXRpb24ge1xuICAgIHotaW5kZXg6IDk5OTk5NTtcbn1cblxuLyog4pSA4pSAIENvcXVpbGxlIGRlcyBhcGVyw6d1cyAocHJldmlld0NhZHJlLnR3aWcpIOKUgOKUgFxuICAgwqsgTGEgZmVuw6p0cmUgYSBjaGFuZ8OpIGRlIHRhaWxsZSDCuyB2aXQgZGFucyBsYSBwYWdlIHF1aSBjb250aWVudCBsJ2lmcmFtZSwgaG9ycyBkdVxuICAgbW90ZXVyIDogZWxsZSBnYXJkZSBzb24gYW5jaWVubmUgY2FydGUsIGNvbnNlcnbDqWUgcG91ciBlbGxlIHNldWxlIChkw6ljaXNpb24gZHUgY2hlZlxuICAgZGUgcHJvamV0LCAyMDI2LTA5LTIyKS4gUmllbiBkJ2F1dHJlIG5lIGwndXRpbGlzZS4gKi9cbi5ib2l0ZURpYWxvZ3VlQ29udGVudSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgcGFkZGluZzogMzJweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIyKTtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZU1vZGFsZSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uYm9pdGVEaWFsb2d1ZUNvbnRlbnUgc3ZnIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufVxuXG4uYm9pdGVEaWFsb2d1ZUNvbnRlbnUgcCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgbWFyZ2luOiAwIDAgOHB4O1xufVxuXG4uYm9pdGVEaWFsb2d1ZUNvbnRlbnUgLmJvaXRlRGlhbG9ndWVDdGFzIHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xufVxuXG4uYm9pdGVEaWFsb2d1ZUNvbnRlbnUgYnV0dG9uIHtcbiAgICBwYWRkaW5nOiAxMHB4IDI0cHg7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uYm9pdGVEaWFsb2d1ZUNvbnRlbnUgYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2FoKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAuYXVjdW5lQW5pbWF0aW9uIOKAlCBDbGFzc2UgdXRpbGl0YWlyZSBnbG9iYWxlXG5cbiAgIETDqXNhY3RpdmUgVE9VVEVTIGxlcyBhbmltYXRpb25zIENTUyBldCB0cmFuc2l0aW9ucyBzdXIgdW4gw6lsw6ltZW50XG4gICBldCB0b3VzIHNlcyBkZXNjZW5kYW50cy4gw4AgYWpvdXRlciB0ZW1wb3JhaXJlbWVudCAodmlhIEpTKSBzdXIgdW5cbiAgIGNvbnRlbmV1ciBhdmFudCB1biBjaGFuZ2VtZW50IHZpc3VlbCBwb3VyIGZpZ2VyIGxlcyDDqWzDqW1lbnRzIGVuXG4gICBwbGFjZSBzYW5zIGNhc2NhZGUgZCdhbmltYXRpb25zLlxuXG4gICBVdGlsaXNhdGlvbiBKUyA6IHdpbmRvdy5maWdlckFuaW1hdGlvbnMoZWxlbWVudCwgZHVyZWVNcylcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5hdWN1bmVBbmltYXRpb24sXG4uYXVjdW5lQW5pbWF0aW9uICosXG4uYXVjdW5lQW5pbWF0aW9uICo6OmJlZm9yZSxcbi5hdWN1bmVBbmltYXRpb24gKjo6YWZ0ZXIge1xuICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCbG9jcyBkJ3VuZSBWdWUgZCdhbmltYXRpb24g4oCUIGFuaW1hdGlvbnMgZGUgYmFzY3VsZVxuXG4gICBDbGFzc2VzIHBvc8OpZXMgcHVpcyByZXRpcsOpZXMgcGFyIGFmZmljaGFnZUJsb2NzLnRzIChqYW1haXMgw6AgbGEgbWFpbiBkYW5zIHVuZVxuICAgYW5pbWF0aW9uKS4gTGEgZHVyw6llIHZpZW50IGRlIC0tYmxvY0R1cmVlLCBwb3Vzc8OpZSBwYXIgbGUgVFMgOiBzb3VyY2UgdW5pcXVlLlxuXG4gICBWb2NhYnVsYWlyZSBGRVJNw4kgOiAnYXVjdW5lJyAocGFzIGRlIGNsYXNzZSksICdmb25kdScsICdnbGlzc2UnLiBFbiBham91dGVyIHVuZVxuICAgc3VwcG9zZSBkZSB0b3VjaGVyIGF1IG5veWF1ICsgY2UgZmljaGllciArIGxhIGRvYyDigJQgYydlc3QgbGUgZ2FyZGUtZm91IHF1aSDDqXZpdGVcbiAgIHF1ZSBjaGFxdWUgYW5pbWF0aW9uIGludmVudGUgc29uIGVmZmV0LlxuXG4gICBMYSBWSVRFU1NFIGVzdCB1biBheGUgc8OpcGFyw6ksIHNhbnMgZWZmZXQgc3VyIGNlIGZpY2hpZXIgOiBlbGxlIG5lIGNoYW5nZSBxdWUgbGEgdmFsZXVyXG4gICBkZSAtLWJsb2NEdXJlZSBwb3Vzc8OpZSBwYXIgbGUgVFMgKCdub3JtYWxlJyA0MDAgbXMsICdyYXBpZGUnIDM1MCBtcykuXG5cbiAgIFV0aWxpc2F0aW9uIFRTIDogdGhpcy5hZmZpY2hlckJsb2MoZWwsIHsgYW5pbWU6ICdmb25kdScsIHZpdGVzc2U6ICdyYXBpZGUnIH0pXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYmxvY0ZvbmR1RW50cmVlLFxuLmJsb2NGb25kdVNvcnRpZSxcbi5ibG9jR2xpc3NlRW50cmVlLFxuLmJsb2NHbGlzc2VTb3J0aWUge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tYmxvY0R1cmVlLCA0MDBtcyk7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xufVxuXG4uYmxvY0ZvbmR1RW50cmVlIHtcbiAgICBhbmltYXRpb24tbmFtZTogYmxvY0ZvbmR1RW50cmVlO1xufVxuXG4uYmxvY0ZvbmR1U29ydGllIHtcbiAgICBhbmltYXRpb24tbmFtZTogYmxvY0ZvbmR1U29ydGllO1xufVxuXG4uYmxvY0dsaXNzZUVudHJlZSB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IGJsb2NHbGlzc2VFbnRyZWU7XG59XG5cbi5ibG9jR2xpc3NlU29ydGllIHtcbiAgICBhbmltYXRpb24tbmFtZTogYmxvY0dsaXNzZVNvcnRpZTtcbn1cblxuQGtleWZyYW1lcyBibG9jRm9uZHVFbnRyZWUge1xuICAgIGZyb20geyBvcGFjaXR5OiAwOyB9XG4gICAgdG8gICB7IG9wYWNpdHk6IDE7IH1cbn1cblxuQGtleWZyYW1lcyBibG9jRm9uZHVTb3J0aWUge1xuICAgIGZyb20geyBvcGFjaXR5OiAxOyB9XG4gICAgdG8gICB7IG9wYWNpdHk6IDA7IH1cbn1cblxuQGtleWZyYW1lcyBibG9jR2xpc3NlRW50cmVlIHtcbiAgICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQlKTsgfVxuICAgIHRvICAgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7IH1cbn1cblxuQGtleWZyYW1lcyBibG9jR2xpc3NlU29ydGllIHtcbiAgICBmcm9tIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lOyB9XG4gICAgdG8gICB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNCUpOyB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgVElSQUdFIMOJQ0FSVMOJIOKAlCBsYSBjYXNlIGQndW4gdGlyYWdlIHJldGlyw6kgc3VyIHVuZSBncmlsbGUgcXVpIGdhcmRlIHRvdXQgc291cyBsZXMgeWV1eFxuICAgKFdpbnMqR3JpZCwgUmFmZmxlKkdyaWQgOyBkw6ljaXNpb24gZHUgY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMDQpLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgTGEgY2FzZSBzJ2VzdG9tcGUgZW4gdW5lIHNlY29uZGUsIHB1aXMgZGV2aWVudCBpbnZpc2libGUg4oCUIG1haXMgZWxsZSBnYXJkZSBzYSBQTEFDRSA6XG4gICByaWVuIGF1dG91ciBuZSBib3VnZSwgbCdvcmdhbmlzYXRldXIgcmV0cm91dmUgc2VzIHJlcMOocmVzLiBQb3PDqWUgcGFyIGxhIHZ1ZSBkZSBsYVxuICAgc2PDqG5lIHN1ciBsJ8OpbMOpbWVudCBkZSBsYSBjYXNlIChzbG90IEZsdXhLaXQsIHNsb3QgU3BsaXRGbGFwS2l0LCBjYXNlIGQndW5lIGdyaWxsZVxuICAgQ1NTKS4gUmV0aXLDqWUgcXVhbmQgbGUgdGlyYWdlIHN1aXZhbnQgcmVwcmVuZCBsYSBjYXNlIChyZW5kdWUgZW4gYm91dCBkZSBncmlsbGUpIDpcbiAgIGxhIGNhc2UgcmV2aWVudCBkJ3VuIGNvdXAsIG91IHNlbG9uIHNhIHByb3ByZSB0cmFuc2l0aW9uLlxuXG4gICBMZXMgIWltcG9ydGFudCA6IGxlcyBraXRzIHBvc2VudCBsZXVycyBwcm9wcmVzIG9wYWNpdMOpcyBldCB0cmFuc2l0aW9ucyBzdXIgbGV1cnMgc2xvdHNcbiAgIChzZktpdFNsb3QsIHNmS2l0U2xvdFRpcmXigKYpLCBldCB1bmUgY2FzZSDDqWNhcnTDqWUgbCdlc3QgcXVvaSBxdSdpbCBhcnJpdmUuICovXG4udGlyYWdlRWNhcnRlIHtcbiAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAxcyBsaW5lYXIsIHZpc2liaWxpdHkgMHMgbGluZWFyIDFzICFpbXBvcnRhbnQ7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgw4lUSVFVRVRURVMgLSBNYXJxdWFnZSB0eXBvZ3JhcGhpcXVlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBMZXMgw6l0aXF1ZXR0ZXMgZG9ubsOpZXMgcGFyIGwnb3JnYW5pc2F0ZXVyIChhbmltYXRpb25zLCBzb3J0aWVzLCBncm91cGVzKVxuICAgc29udCBlbnZlbG9wcMOpZXMgZGFucyAuZXRpcXVldHRlTW9ubyBwYXIgbGUgZmlsdHJlIFR3aWcgYGV0aXF1ZXR0ZUh0bWxgLlxuICAgTGEgY2hhc3NlIGZpeGUgbGVzIGRpc3Rpbmd1ZSBkZXMgbGliZWxsw6lzIGR1IHN5c3TDqG1lIChkw6ljaXNpb24gUE8gMjAyNi0wNi0xMCkuXG4qL1xuXG4uZXRpcXVldHRlTW9ubyB7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZmTW9ubyk7XG59XG5cbi8qIE1hcnF1ZXVyIGQndW5lIHNvdXJjZSBwcm92aXNvaXJlLCBhY2NvbMOpIMOgIGwnw6l0aXF1ZXR0ZSBwYXIgbGUgbcOqbWUgZmlsdHJlICovXG4uZXRpcXVldHRlQUNvbmZpZ3VyZXIge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlNCk7XG59XG5cbi5yZWNhcEJsb2NEZXRhaWwgLmV0aXF1ZXR0ZUFDb25maWd1cmVyIHtcbiAgICBjb2xvcjogdW5zZXQ7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUsOJQ0FQSVRVTEFUSUYgU0PDiU5BUklPIChzdGVwcGVyIHZlcnRpY2FsKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQ29udGFpbmVyIGR1IHN0ZXBwZXIgKi9cbi5yZWNhcFN0ZXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDA7XG59XG4jc2NlbmFyaW9QYW5uZWF1IC5yZWNhcFN0ZXBwZXIgPiAucmVjYXBBY3Rpb25zICsgLnJlY2FwQmxvYyB7XG4gICAgbWFyZ2luLXRvcDogMzJweDtcbn1cblxuLyogQ29ubmVjdGV1ciB2ZXJ0aWNhbCBlbnRyZSBsZXMgYmxvY3MgKi9cbi5yZWNhcENvbm5lY3RldXIge1xuICAgIHdpZHRoOiAzcHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbiAgICBtYXJnaW4tbGVmdDogMjBweDtcbn1cblxuLyogQmxvYyBpbmRpdmlkdWVsIGR1IHN0ZXBwZXIgKi9cbi5yZWNhcEJsb2Mge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgbWluLWhlaWdodDogNjZweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBUaXRyZSBkdSBibG9jIChoMykgKi9cbi5yZWNhcEJsb2MgaDMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTsgLyogYWxpZ27DqSAxMCAtPiAxMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdSZWNhcCk7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbiAgICBtYXJnaW46IDA7XG59XG5cbi8qIMOJdGlxdWV0dGVzIGR1IHLDqWNhcCA6IHVuIFNFVUwgc3R5bGUsIHF1J2VsbGVzIHNvaWVudCBjbGlxdWFibGVzICg8YT4vPGJ1dHRvbj4gZW4gbW9kZVxuICAgUHLDqXBhcmVyIC8gcHJvZ3Jlc3Npb24pIG91IHN0YXRpcXVlcy4gRm9uZCBjbGFpciBkZSBjYXTDqWdvcmllLCB0ZXh0ZSBub2lyLCBib3JkdXJlIGzDqWfDqHJlXG4gICAoY2hvaXggUE8gMjAyNi0wNy0yMCA6IHBsdXMgZGUgcGFzdGlsbGUgZm9uY8OpZSDDoCB0ZXh0ZSBibGFuYyDigJQgbCdvbmdsZXQgRGlmZnVzZXIgZmFpdCBmb2kpLlxuICAgLnJlY2FwVGFnU29ydGllID0gYmxhbmMsIGxhIGNvdWxldXIgZHUgwqsgcHJvZHVpdCBkJ3VuZSBzY8OobmUgwrsgKGNvbnNlcnbDqWUgZW4gZW50csOpZSkuXG4gICAucmVjYXBUYWdTb3J0aWVTZWNvbmRhaXJlID0gc29ydGllIGTDqWNsYXLDqWUgYHNlY29uZGFpcmVgIHBhciBsZSBjb250cmF0IGQndW5lIHNjw6huZSwgZW5cbiAgIHJldHJhaXQg4oCUIHBhZ2UgZCd1bmUgc2PDqG5lIHNldWxlbWVudCAoVml0cmluZSkgOiB1biBzY8OpbmFyaW8gbidhZmZpY2hlIHBhcyBzZXMgc29ydGllc1xuICAgaW51dGlsaXPDqWVzIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xNikuICovXG4ucmVjYXBUYWdHcm91cGVzLFxuLnJlY2FwVGFnRGlzdHJpYnV0aW9ucyxcbi5yZWNhcFRhZ1NvcnRpZSxcbi5yZWNhcFRhZ1NvcnRpZVNlY29uZGFpcmUsXG4ucmVjYXBMaWVuR3JvdXBlcyxcbi5yZWNhcExpZW5EaXN0cmlidXRpb25zIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luOiAycHggMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nRXRpcXVldHRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgY3VycmVudENvbG9yO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ucmVjYXBUYWdTb3J0aWVTZWNvbmRhaXJlIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLnJlY2FwVGFnR3JvdXBlcyxcbi5yZWNhcExpZW5Hcm91cGVzIHsgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpOyB9XG5cbi5yZWNhcFRhZ0Rpc3RyaWJ1dGlvbnMsXG4ucmVjYXBMaWVuRGlzdHJpYnV0aW9ucyB7IGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTsgfVxuXG4vKiBUaXRyZSBkJ2FuaW1hdGlvbi9hZmZpY2hhZ2UgY2xpcXVhYmxlIChtb2RlIFByw6lwYXJlcikgOiBsaWVuIHNvYnJlLCBzYW5zIHBhc3RpbGxlIGNvbG9yw6llLFxuICAgcG91ciBuZSBwYXMgcGVydHVyYmVyIGxhIGxlY3R1cmUg4oCUIG3Dqm1lIHNvYnJpw6l0w6kgcXVlIGxlIHRpdHJlIG5vbiBjbGlxdWFibGUgZGUgbGEgcHJvZ3Jlc3Npb24uICovXG4ucmVjYXBMaWVuU2NlbmVzLFxuLnJlY2FwTGllbkFmZmljaGFnZXMge1xuICAgIGNvbG9yOiBpbmhlcml0O1xufVxuXG4vKiBBZmZvcmRhbmNlIMKrIGNsaXF1YWJsZSDCuyA6IHNvdWxpZ25lbWVudCBhdSBzdXJ2b2wgKMOpdGlxdWV0dGVzIGQnZW50csOpZSArIHRpdHJlcykgKi9cbi5yZWNhcExpZW5Hcm91cGVzOmhvdmVyLFxuLnJlY2FwTGllbkRpc3RyaWJ1dGlvbnM6aG92ZXIsXG4ucmVjYXBMaWVuU2NlbmVzOmhvdmVyLFxuLnJlY2FwTGllbkFmZmljaGFnZXM6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiBTb3VzLXRpdHJlIGRhbnMgbGUgYmxvYyAoaDQpIOKAlCDDqWxhcmdpIMOgIGxhIGNvbG9ubmUgcsOpY2FwIGRlIGNvbXBvc2l0aW9uXG4gICAoNTVfc2NlbmFyaW9Nb2RpZmllci5jc3MpLCBxdWkgcmVwcmVuZCBsYSBncmFtbWFpcmUgZHUgcsOpY2FwIGhvcnMgcGFubmVhdS4gKi9cbi5yZWNhcEJsb2MgaDQsXG4ucmVjYXBDb21wb3NpdGlvbiBoNCB7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbiAgICBtYXJnaW46IDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIExpc3RlcyDDoCBwdWNlcyBkYW5zIGxlIGJsb2MgKi9cbi5yZWNhcEJsb2MgdWwsXG4ucmVjYXBDb21wb3NpdGlvbiB1bCB7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXJldHJhaXRMaXN0ZUNvdXJ0KTtcbn1cblxuLyogQ29sb25uZSByw6ljYXAgZGUgY29tcG9zaXRpb24gKGxhcmdldXIgZml4ZSDDqXRyb2l0ZSkgOiBwYXMgZGUgcHVjZXMg4oCUIGNoYXF1ZSBsaWduZVxuICAgZXN0IGTDqWrDoCB1biB0YWcg4oCUIGV0IHVuIMKrIMOJdGlxdWV0dGUgOiBMYWJlbCDCuyBuZSBzZSBwbGllIEpBTUFJUyBzdXIgZGV1eCBsaWduZXNcbiAgIChkw6ljaXNpb24gUE8gMjAyNi0wOC0xMSkgOyBhdS1kZWzDoCBkZSBsYSBjb2xvbm5lLCBlbGxpcHNlLiAqL1xuLnJlY2FwQ29tcG9zaXRpb24gdWwge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xufVxuXG4ucmVjYXBDb21wb3NpdGlvbiAucmVjYXBUYWdHcm91cGVzLFxuLnJlY2FwQ29tcG9zaXRpb24gLnJlY2FwVGFnU29ydGllLFxuLnJlY2FwQ29tcG9zaXRpb24gLnJlY2FwVGFnU29ydGllU2Vjb25kYWlyZSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4ucmVjYXBCbG9jIGxpLFxuLnJlY2FwQ29tcG9zaXRpb24gbGkge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiBEw6l0YWlscyBkdSBibG9jICovXG4ucmVjYXBCbG9jRGV0YWlsIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nUmVjYXApO1xuICAgIHBhZGRpbmctdG9wOiB2YXIoLS1nYXBSZWR1aXQpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ucmVjYXBCbG9jRGV0YWlsIHAge1xuICAgIG1hcmdpbjogMnB4IDA7XG59XG5cbi5yZWNhcEJsb2NEZXRhaWwgaHIge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgbWFyZ2luOiAyMHB4IDA7XG59XG5cbi8qIEljw7RuZSBkZSBsJ2FuaW1hdGlvbiBlbiByYXBwZWwgZGFucyBsZSBjb2luIGhhdXQtZHJvaXQgZHUgYmxvYy5cbiAgIENhc2UgODAgZXQgOHB4IGQnYWlyIDogZGVzc2luIDY0LCBsYSBncmFuZGUgZGVzIGRldXggdGFpbGxlcyBkdSBwcm9qZXQgKDU0X2ljb25lcy5jc3MpLlxuICAgSG9ycyBmbHV4IChhYnNvbHV0ZSkgcG91ciBuZSBwYXMgZ29uZmxlciBsYSBoYXV0ZXVyIGR1IHRpdHJlIOKAlCBjYWzDqWUgc3VyIGxlIHBhZGRpbmcgZHUgaDMuICovXG4ucmVjYXBUaXRyZUljb25lIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiA4MHB4O1xuICAgIGhlaWdodDogODBweDtcbiAgICBwYWRkaW5nOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLyogQ29sb25uZSBkZSBsJ2ljw7RuZSAoY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMjIpIDogbCdpY8O0bmUgdGllbnQgdG91dGUgbGEgaGF1dGV1ciBkdSBibG9jLCDDoFxuICAgZHJvaXRlLCBzw6lwYXLDqWUgZHUgY29udGVudSBwYXIgdW4gZmlsZXQgOyBsZSBjb250ZW51IHMnYXJyw6p0ZSBhdmFudCBlbGxlLCByaWVuIG5lIHBhc3NlXG4gICBkZXNzb3VzLiBMZSBkZXNzaW4gcmVzdGUgZW4gaGF1dCBkZSBsYSBjb2xvbm5lIChvYmplY3QtZml0KS4gTmUgdmF1dCBxdWUgcG91ciBsZSBibG9jIGR1XG4gICByw6ljYXBpdHVsYXRpZiAoLnJlY2FwQmxvYykgOiBsYSBjb21wb3NpdGlvbiBkZSBzY8OpbmFyaW8gcG9ydGUgYXVzc2kgLnJlY2FwQmxvY1NjZW5lLiAqL1xuLnJlY2FwQmxvYy5yZWNhcEJsb2NTY2VuZSB7XG4gICAgbWluLWhlaWdodDogODBweDsgLyogbGEgY29sb25uZSBuZSBkZXNjZW5kIGphbWFpcyBzb3VzIGxhIGNhc2UgZGUgbCdpY8O0bmUgKi9cbiAgICBwYWRkaW5nLXJpZ2h0OiA4MHB4O1xufVxuXG4ucmVjYXBCbG9jLnJlY2FwQmxvY1NjZW5lIC5yZWNhcFRpdHJlSWNvbmUge1xuICAgIGJvdHRvbTogMDtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICBvYmplY3QtcG9zaXRpb246IHRvcDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG59XG5cbi8qIFZhcmlhbnRlcyBjb3VsZXVyIHBhciB0eXBlICovXG4ucmVjYXBCbG9jR3JvdXBlcyAvKiAucmVjYXBCbG9jRGlzdHJpYnV0aW9ucyAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMSk7XG59XG5cbi5yZWNhcEJsb2NTY2VuZSAucmVjYXBUaXRyZUljb25lIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbi5yZWNhcEJsb2NTY2VuZS5yZWNhcEJsb2NBZmZpY2hhZ2UgLnJlY2FwVGl0cmVJY29uZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4ucmVjYXBCbG9jQ29uZmlndXJhdGlvbnMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucmVjYXBCbG9jRmluYWwge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cbiovXG5cbi8qIExpZW4gXCJNb2RpZmllclwiIHNvdXMgbGUgcsOpY2FwICovXG4ucmVjYXBBY3Rpb25zIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nUmVjYXApO1xufVxuXG4vKiBNw6ptZSBjb3VsZXVyIHF1J0FubnVsZXIgZGVzIGZvcm11bGFpcmVzIChub3lhdSAzMV9jdGEuY3NzKSA6IGxlcyBhY3Rpb25zIG5ldXRyZXMgc29udFxuICAgbm9pcmVzLCBsZXMgY291bGV1cnMgcmVzdGVudCByw6lzZXJ2w6llcyBhdXggYWN0aW9ucyBtYXJxdcOpZXMgKFN1cHByaW1lcikuICovXG4ucmVjYXBBY3Rpb25zIGEge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ucmVjYXBBY3Rpb25zIGE6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiBJbWFnZSBkYW5zIHVuIGJsb2MgcsOpY2FwICovXG4ucmVjYXBJbWFnZSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLyogUGFzdGlsbGVzIGNvdWxldXJzIGRhbnMgbGUgcsOpY2FwICovXG4ucmVjYXBDb3VsZXVycyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgbWFyZ2luLXRvcDogNnB4O1xufVxuXG4ucmVjYXBDb3VsZXVyUGFzdGlsbGUge1xuICAgIHdpZHRoOiAyOHB4O1xuICAgIGhlaWdodDogMjhweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4vKiBNZXNzYWdlIHZpZGUgKi9cbi5yZWNhcFZpZGUge1xuICAgIGZvbnQ6IHZhcigtLWZJdGFsaWMxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0xpZ25lTGlzdGUpO1xufVxuXG4vKiBTb3VyY2UgbGlzdCBkYW5zIGxlcyBkw6l0YWlscyAqL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucmVjYXBTb3VyY2VzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAycHg7XG59XG4qL1xuXG4vKiBBbGVydGUgaW5zdWZmaXNhbmNlICovXG4ucmVjYXBBbGVydGUge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UzKTtcbiAgICBmb250OiB2YXIoLS1mQWxlcnRlMTYpO1xufVxuXG4vKiBCcmlxdWUgcsOpY2FwaXR1bGF0aWYgZGFucyBsYSBncmlsbGUgZHUgc2PDqW5hcmlvICovXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5icmlxdWUuYnJpcXVlUmVjYXAge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNCbGFuYzAzKTtcbn1cbiovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xNSAtIGNvbmNlcHQgcmVjYXAuanMgcmV0aXLDqVxuLnJlY2FwQW5pbUNvbmZpZzplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbiovXG5cbi5yZWNhcEVuY2FkcmUge1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdSZWNhcCk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJhY2tncm91bmQ6ICNGRkY4O1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTUgLSBjb25jZXB0IHJlY2FwLmpzIHJldGlyw6lcbi5yZWNhcEFuaW1Db25maWcgaDQge1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG4gICAgbWFyZ2luOiAyMHB4IDAgNHB4O1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIGg0OmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIHAge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogMnB4IDA7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgdWwsXG4ucmVjYXBBbmltQ29uZmlnIG9sIHtcbiAgICBtYXJnaW46IDRweCAwO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyBsaSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgdGFibGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgbWFyZ2luOiA2cHggMDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyB0aCxcbi5yZWNhcEFuaW1Db25maWcgdGQge1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgdGgge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgaHIge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgbWFyZ2luOiA4cHggMDtcbn1cbiovXG5cbi8qIEJvdXRvbnMgcGFydGljaXBhbnRzIGNsaXF1YWJsZXMgZGFucyBsYSBwcm9ncmVzc2lvbiA6IG3Dqm1lIMOpdGlxdWV0dGUgcXVlIGxlcyBhdXRyZXNcbiAgIChjb250b3VyIGNvbXByaXMsIGNmLiBibG9jIGR1IGhhdXQpLCBvbiBuJ2FqdXN0ZSBxdWUgbCdpbnRlcmFjdGl2aXTDqS4gKi9cbmJ1dHRvbi5yZWNhcFRhZ0dyb3VwZXMge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250OiBpbmhlcml0O1xufVxuXG5idXR0b24ucmVjYXBUYWdHcm91cGVzOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFBST0dSRVNTSU9OIOKAlCDDiXRhdHMgZGVzIGJsb2NzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBTZXVsZXMgbGVzIGN1ZXMgw6AgdmVuaXIgc29udCBhdHTDqW51w6llcyA6IGNlbGxlcyBkw6lqw6Agam91w6llcyByZXN0ZW50IHBsZWluZXMsIGVsbGVzIG9udCDDqXTDqVxuICAgYWN0aXZlcyAoY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMjIpLiAqL1xuI3Byb2dyZXNzaW9uIC5yZWNhcEJsb2NTY2VuZSB7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xufVxuXG4jcHJvZ3Jlc3Npb24gLnJlY2FwQmxvY1NjZW5lLnJlY2FwQmxvY0Z1dHVyIHtcbiAgICBvcGFjaXR5OiAuNTtcbn1cblxuLyogTm9tYnJlIGQnw6lsw6ltZW50cyBkJ3VuZSBwYXN0aWxsZSBkJ2VudHLDqWUgb3UgZGUgc29ydGllIChwZWludHVyZVByb2dyZXNzaW9uLnRzKSwgc8OpcGFyw6kgZHVcbiAgIGxpYmVsbMOpIHBhciB1biBmaWxldCBkZSBsYSBjb3VsZXVyIGRlIGxhIHBhc3RpbGxlLiBBYnNlbnQgdGFudCBxdWUgbGUgbm9tYnJlIG4nZXN0IHBhcyBjb25udS4gKi9cbi5yZWNhcENvbXB0ZSB7XG4gICAgbWFyZ2luLWxlZnQ6IDZweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDZweDtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2U3Ryb25nKTtcbn1cblxuLyogU2VjdGlvbiDCqyBQcm9ncmVzc2lvbiDCuyBkZSBsYSBjdWUgYWN0aXZlIDogdW5lIHNlY3Rpb24gZHUgYmxvYyBjb21tZSBFbnRyw6llcyBldCBTb3J0aWVzXG4gICAoLnJlY2FwQmxvY0RldGFpbCwgbcOqbWUgdGl0cmUsIG3Dqm1lIG1hcmdlKSwgc2VydmllIGNhY2jDqWUgcGFyIGxlIHRlbXBsYXRlLiAqL1xuLnByb2dyZXNzaW9uRXRhdFtoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBMYSBiYXJyZSBldCBzb24gY29tcHRlIGF1IHJldHJhaXQgZGVzIGxpc3RlcyBkJ0VudHLDqWVzIGV0IGRlIFNvcnRpZXMuICovXG4ucHJvZ3Jlc3Npb25FdGF0QmxvY3Mge1xuICAgIG1hcmdpbjogNHB4IDA7XG4gICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1yZXRyYWl0TGlzdGVDb3VydCk7XG59XG5cbi8qIEN1ZSDDoCB2ZW5pciAoYXByw6hzIGxhIGN1ZSBhY3RpdmUpIDogc29uIHRpdHJlIGV0IHNvbiBpY8O0bmUgc2V1bGVtZW50IOKAlCBzZXMgZW50csOpZXMgZXQgc2VzXG4gICBzb3J0aWVzIG5lIGRpc2VudCByaWVuIHRhbnQgcXUnZWxsZSBuJ2EgcGFzIGNvbW1lbmPDqSAoY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMjIpLiAqL1xuI3Byb2dyZXNzaW9uIC5yZWNhcEJsb2NGdXR1ciAucHJvZ3Jlc3Npb25Db250ZW51IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBBw6lyYXRpb24gZGUgc2Vjb3VycyBxdWFuZCBsZSBibG9jIG4nYSBhdWN1bmUgc2VjdGlvbiB2aXNpYmxlICovXG4ucHJvZ3Jlc3Npb25Db250ZW51Om5vdCg6aGFzKD4gOm5vdChbaGlkZGVuXSkpKSB7XG4gICAgcGFkZGluZy1ib3R0b206IHZhcigtLWdhcE1veWVuKTtcbn1cblxuLyogQmxvY3MgZGUgcHJvZ3Jlc3Npb24gw6ltaXMgcGFyIGwnYW5pbWF0aW9uIChvYnRlbmlyUHJvZ3Jlc3Npb24g4oaSIHJlbmR1IHVuaXF1ZSBwZWludHVyZVByb2dyZXNzaW9uLnRzKSAqL1xuLnByb2dyZXNzaW9uQmxvY1RpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogNnB4IDAgMnB4O1xufVxuXG4ucHJvZ3Jlc3Npb25CbG9jVGV4dGUge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogMnB4IDA7XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NMaXN0ZSB7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXJldHJhaXRMaXN0ZUNvdXJ0KTtcbn1cblxuLnByb2dyZXNzaW9uQmxvY0xpc3RlIGxpIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogQmFycmUgc29icmUgKGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTIyKSA6IGxhIGN1ZSBhY3RpdmUgc2Ugdm9pdCBkw6lqw6Agw6AgbCdvcGFjaXTDqSwgbGEgYmFycmVcbiAgIG4nYSBwYXMgw6AgY3JpZXIuIEZpbmUsIGJvdXRzIGRyb2l0cyBjb21tZSBsYSBwb2xpY2UsIG5vaXJlIHNhbnMgY291bGV1ciBkJ2FjY2VudCwgbGEgbW9pdGnDqVxuICAgZHUgYmxvYyA7IGxlIGNvbXB0ZSBlbiBwZXRpdCBncmlzIMOgIGPDtHTDqS4gKi9cbi5wcm9ncmVzc2lvbkJsb2NCYXJyZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIG1hcmdpbjogNHB4IDA7XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NCYXJyZVBpc3RlIHtcbiAgICBmbGV4OiAwIDEgNTAlO1xuICAgIGhlaWdodDogNHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucHJvZ3Jlc3Npb25CbG9jQmFycmVKYXVnZSB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyKTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjNzO1xufVxuXG4ucHJvZ3Jlc3Npb25CbG9jQmFycmVMYWJlbCB7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBQTEFOUyBERSBTVVBFUlBPU0lUSU9OICh6LWluZGV4KSDigJQgbCfDqWNoZWxsZSBkZSBsJ8OpY3JhblxuXG4gICBVbmUgc2PDqG5lIGFmZmljaGUgY2UgcXUnZWxsZSB2ZXV0IGF1IHByZW1pZXIgcGxhbiA6IHVuIGNsb25lIHF1aSBzJ2Vudm9sZSwgdW5lIHBvcHVwIGRlIGxvdCxcbiAgIHVuIGZldSBkJ2FydGlmaWNlLiBMZSBjaHJvbWUg4oCUIGJhcnJlIGRlIHBpbG90YWdlLCBhcGVyw6d1LCBzYWlzaWUsIGJvw650ZXMgZGUgZGlhbG9ndWUg4oCUIGRvaXRcbiAgIHBhc3NlciBBVS1ERVNTVVMgcXVvaSBxdSdlbGxlIGZhc3NlLiBEZXV4IGJhbmRlcyBmcmFuY2hlbWVudCBzw6lwYXLDqWVzLCBqYW1haXMgbWl0b3llbm5lcyA6XG4gICB1bmUgc2PDqG5lIHF1aSBtb250ZSBkJ3VuIGNyYW4gbmUgcGV1dCBwYXMgbW9yZHJlIHN1ciBsZSBjaHJvbWUuXG5cbiAgICAgICBTY8OobmUgZXQga2l0cyAgICAgICAgICAgIDAg4oaSICAgOSA5OTkgICAoZm9uZCwgem9uZXMsIGtpdHMsIGNsb25lcyBlbiB2b2wsIG92ZXJsYXlzIGRlIGtpdClcbiAgICAgICBDaHJvbWUgICAgICAgICAgICAgIDk5OSA5MDAg4oaSIDk5OSA5OTlcblxuICAgRGFucyBsYSBiYW5kZSBkdSBjaHJvbWUsIGwnb3JkcmUgOlxuXG4gICAgICAgOTk5IDkwMCAgYmFycmUgZGUgcGlsb3RhZ2UsIMOubG90IGRlIHRlc3QgKF9zdHVkaW9JbnRlZ3JlZS5jc3MpXG4gICAgICAgOTk5IDkyMCAgc291cy10aXRyZSwgb3ZlcmxheSBldCBmb25kIGRlIHBvcHVwIGRlIGwnYXBlcsOndVxuICAgICAgIDk5OSA5MjUgIGJ1bGxlIGRlIGNvbmZpcm1hdGlvbiAoX2J1bGxlQ29uZmlybWF0aW9uLmNzcykg4oCUIGF1LWRlc3N1cyBkZSBsYSBiYXJyZSBkZVxuICAgICAgICAgICAgICAgIGwnYXBlcsOndSwgcXVpIGxhIHJlY291dnJpcmFpdCBzaW5vblxuICAgICAgIDk5OSA5MjYgIHBhbm5lYXUgwqsgUXVlbHF1ZXMgaW5zdGFudHMgcGx1cyB0YXJkIMK7IGV0IGJvw650ZSBkZSBwYXNzYWdlIGRlIGwnYXBlcsOndVxuICAgICAgICAgICAgICAgIChfcHJldmlldy5jc3MpXG4gICAgICAgOTk5IDkyNyAgYmFycmUgZGUgcGlsb3RhZ2UgUEVOREFOVCBsYSBib8OudGUgZGUgcGFzc2FnZSDigJQgZWxsZSBtb250ZSBhdS1kZXNzdXMgZGUgbGFcbiAgICAgICAgICAgICAgICBib8OudGUgcGFyY2UgcXVlIGxlIGJvdXRvbiDCqyBQYXNzZXIgw6AgOiBYIMK7IHZpdCBkZWRhbnMsIGV0IHNlIHZvaWxlIGVsbGUtbcOqbWVcbiAgICAgICAgICAgICAgICBwb3VyIG5lIGxhaXNzZXIgw6ljbGFpcsOpZSBxdWUgbGEgem9uZSBkZSBjZSBib3V0b24gKF9wcmV2aWV3LmNzcylcbiAgICAgICA5OTkgOTkwICBib8OudGVzIGRlIGRpYWxvZ3VlLCBzYWlzaWUgY29tcHJpc2UgKF9ib2l0ZURpYWxvZ3VlLmNzcykg4oCUIGF1LWRlc3N1cyBkZSB0b3V0XG4gICAgICAgICAgICAgICAgY2UgcXVpIHByw6ljw6hkZVxuICAgICAgIDk5OSA5OTUgIGJ1bGxlIGRlIGNvbmZpcm1hdGlvbiBhcm3DqWUgZGVwdWlzIHVuZSBib8OudGUgZGUgZGlhbG9ndWUgKF9ib2l0ZURpYWxvZ3VlLmNzcylcbiAgICAgICA5OTkgOTk3ICByb25kIGR1IGNsaWMgZHUgY3Vyc2V1ciBkJ2FwZXLDp3VcbiAgICAgICA5OTkgOTk4ICBjdXJzZXVyIGQnYXBlcsOndSDigJQgYXUtZGVzc3VzIGRlcyBib8OudGVzIGRlIGRpYWxvZ3VlIDpcbiAgICAgICAgICAgICAgICBsJ2FwZXLDp3UgZG9pdCBNT05UUkVSIGxlIGN1cnNldXIgY2xpcXVlciB1bmUgY29uZmlybWF0aW9uXG4gICAgICAgOTk5IDk5OSAgYnVsbGUgZGVzIG9uZ2xldHMgZXQgYmFycmUgZGUgbCdhcGVyw6d1IOKAlCBsZSBjdXJzZXVyIGdsaXNzZSBkZXNzb3VzIDsgZWxsZXNcbiAgICAgICAgICAgICAgICBzJ2VmZmFjZW50IHF1YW5kIGwnw6ljcmFuIHMnYXNzb21icml0IChwYXNzYWdlLCBib8OudGUgcXVpIGZpZ2UgbCdhcGVyw6d1IOKAlCBwYXNcbiAgICAgICAgICAgICAgICBsYSBzYWlzaWUsIHF1ZSBsZSBjdXJzZXVyIHJlbXBsaXQpLCBldCBsYSBiYXJyZSByZWRlc2NlbmQgw6AgOTk5IDkyMiBsZSB0ZW1wc1xuICAgICAgICAgICAgICAgIGQndW5lIGJ1bGxlIGRlIGNvbmZpcm1hdGlvbiAoX3ByZXZpZXcuY3NzKVxuXG4gICBVbiBub3V2ZWF1IHBsYW4gc2UgcG9zZSBkYW5zIHNhIGJhbmRlLCBqYW1haXMgZW50cmUgbGVzIGRldXguXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU0FMTEUgRUNSQU4gLSBTdHlsZXMgcHJpbmNpcGF1eFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuQGltcG9ydCAnLi9fc3R1ZGlvSW50ZWdyZWUuY3NzJztcbkBpbXBvcnQgJy4vX3Byb2dyZXNzQmFyLmNzcyc7XG5AaW1wb3J0ICcuL19iYXJyZUZpbi5jc3MnO1xuQGltcG9ydCAnLi9fem9uZUFjdGlvbnMuY3NzJztcbkBpbXBvcnQgJy4vX3NjZW5lQm91dG9ucy5jc3MnO1xuQGltcG9ydCAnLi9fdG9nZ2xlU2NlbmUuY3NzJztcbkBpbXBvcnQgJy4vX3JlZ2xhZ2VTY2VuZS5jc3MnO1xuQGltcG9ydCAnLi9fYnVsbGVDb25maXJtYXRpb24uY3NzJztcbkBpbXBvcnQgJy4vX3ByZXZpZXcuY3NzJztcbkBpbXBvcnQgJy4vX2JvaXRlRGlhbG9ndWUuY3NzJztcbkBpbXBvcnQgJy4vX2F1Y3VuZUFuaW1hdGlvbi5jc3MnO1xuQGltcG9ydCAnLi9fdHJhbnNpdGlvbkJsb2NzLmNzcyc7XG5AaW1wb3J0ICcuL190aXJhZ2VFY2FydGUuY3NzJztcbi8qIFZ1ZSBQcm9ncmVzc2lvbiBkZSBsYSBib8OudGUgZGUgbCfDrmxvdCBkZSB0ZXN0IDogbGVzIHN0eWxlcyBkZSBsJ29uZ2xldCBQcm9ncmVzc2lvbiBkdVxuICAgc3R1ZGlvLCBwb3VyIHVuIHNldWwgZGVzaWduIChJbG90VGVzdC50cywgcGVpbnR1cmVQcm9ncmVzc2lvbi50cykuICovXG5AaW1wb3J0ICcuLi8uLi8uLi9jc3Mvc3R1ZGlvLzU2X3NjZW5hcmlvL19ldGlxdWV0dGVzLmNzcyc7XG5AaW1wb3J0ICcuLi8uLi8uLi9jc3Mvc3R1ZGlvLzU2X3NjZW5hcmlvL19yZWNhcGl0dWxhdGlmLmNzcyc7XG5cbi8qIEJvdXRvbnMgZGUgbCfDqWNyYW4gOiBkZXV4IHN0eWxlcyBzZXVsZW1lbnQuIFBsZWluID0gYXVjdW4gY29udG91ciA7IG5vbiBwbGVpbiA9IGZvbmQgYmxhbmMsXG4gICBjb250b3VyIGRlIGxhIGNvdWxldXIgZGUgc29uIHRleHRlLiBQb3PDqSBpY2kgZXQgbm9uIGRhbnMgMTBfZm9udC5jc3MgOiBuZSB2YXV0IHF1ZSBwb3VyXG4gICBsJ8OpY3JhbiBkZSBqZXUgKGFwZXLDp3UgY29tbWUgcsOpZWwpLCBqYW1haXMgcG91ciBsZXMgYm91dG9ucyBkdSBzaXRlLiAqL1xuOnJvb3Qge1xuICAgIC0tYm9yZGVyQ3RhOiAxcHggc29saWQgY3VycmVudENvbG9yO1xuICAgIC8qIFVORSBoYXV0ZXVyIGRlIGJvdXRvbiBzdXIgbCfDqWNyYW4gOiAzNHB4LCBwbGVpbnMgZXQgw6AgY29udG91ciAoZMOpY2lzaW9uIGR1IGNoZWYgZGVcbiAgICAgICBwcm9qZXQsIDIwMjYtMDktMTYpLiBUb3VzIHBvcnRlbnQgbGEgYm9yZHVyZSBkZSAxcHggKHRyYW5zcGFyZW50ZSBzdXIgdW4gcGxlaW4pIDpcbiAgICAgICBsJ2FpciB2ZXJ0aWNhbCBwYXNzZSBkZSA4IMOgIDcgcG91ciBxdWUgbGEgYm9yZHVyZSB0aWVubmUgZGFucyBsZXMgMzQuICovXG4gICAgLS1wYWRkaW5nQ3RhMTRWOiA3cHg7XG4gICAgLS1wYWRkaW5nQ3RhMTQ6IHZhcigtLXBhZGRpbmdDdGExNFYpIDE2cHg7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTdHJ1Y3R1cmUgcHJpbmNpcGFsZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI3NhbGxlRWNyYW4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgY29sb3I6IHZhcigtLWNvdWxldXJTZWNvbmRhaXJlKTtcbn1cblxuLyogUGxhbiBmb25kIDogY291bGV1ciArIGltYWdlIGRlIGZvbmQgKGVuIGRlc3NvdXMpICovXG4jem9uZUZvbmQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICB6LWluZGV4OiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvdWxldXJGb25kKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuXG4vKiBQbGFuIGxvZ28gOiBwb3NpdGlvbm7DqSBwYXIgR3JpbGxlS2l0IChhdS1kZXNzdXMgZHUgZm9uZCkgKi9cbiN6b25lTG9nbyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG4jem9uZUxvZ28gaW1nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbn1cblxuLyogUGxhbiB0aXRyZSBkJ2VuLXTDqnRlIDogcG9zaXRpb25uw6kgcGFyIEdyaWxsZUtpdCAoYXUtZGVzc3VzIGR1IGZvbmQpICovXG4jem9uZVRpdHJlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbi56b25lVGl0cmVUZXh0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBmb250OiB2YXIoLS1mVGl0cmVFY3Jhbik7IC8qIGxhIHRhaWxsZSBlc3QgcmVjYWzDqWUgc3VyIGxhIGhhdXRldXIgZGUgcmFuZ8OpZSBwYXIgR2VzdGlvbm5haXJlRm9uZEVuVGV0ZSAqL1xuICAgIC8qIFNldWwgdGV4dGUgZGUgbCfDqWNyYW4gcG9zw6kgw6AgbcOqbWUgbCdpbWFnZSBkZSBmb25kIDogc2EgY291bGV1ciBlc3QgcsOpZ2zDqWUgYXZlYyBsZSBmb25kLCBwYXNcbiAgICAgICBhdmVjIGxhIHBhbGV0dGUgZGUgbGEgY2FydGUuIFJlcGxpIHN1ciBjb3VsZXVyUHJpbWFpcmUgPSBjb21wb3J0ZW1lbnQgZCdhdmFudCBsYSBjbMOpLCBwb3VyXG4gICAgICAgbGVzIGNvbmZpZ3VyYXRpb25zIGRlIGZvbmQgcXVpIG5lIGxhIHBvcnRlbnQgcGFzLiAqL1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyVGV4dGVTdXJGb25kLCB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpKTtcbn1cbi8qIExlIHRpdHJlIG9jY3VwZSBhdSBwbHVzIDcwICUgZGUgbGEgbGFyZ2V1ciwgc2UgcmVwbGllIHN1ciBkZXV4IGxpZ25lcyBtYXhpbXVtLFxuICAgZXQgYXUtZGVsw6Agc2UgdGVybWluZSBlbiBwb2ludHMgZGUgc3VzcGVuc2lvbi4gTGEgbG9uZ3VldXIgZHUgdGV4dGUgcmVzdGUgbGlicmUuICovXG4uem9uZVRpdHJlQ2xhbXAge1xuICAgIG1heC13aWR0aDogNzAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgICBsaW5lLWNsYW1wOiAyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbGluZS1oZWlnaHQ6IDEuMDU7IC8qIGRldXggbGlnbmVzIHRpZW5uZW50IGRhbnMgbGEgcmFuZ8OpZSBhdmVjIHVuIHBldSBkJ2FpciAoMiDDlyAxLjA1IMOXIDQ1ICUpICovXG59XG4vKiBEaXNwb3NpdGlvbiDCqyB0aXRyZSDDoCBnYXVjaGUsIGxvZ28gw6AgZHJvaXRlIMK7IDogbGUgdGl0cmUgY29sbGUgYXUgYm9yZCBnYXVjaGUgZGUgc2Egem9uZSAqL1xuI3pvbmVUaXRyZS50aXRyZUFsaWduZUdhdWNoZSAuem9uZVRpdHJlVGV4dGUge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbiN6b25lVGl0cmUudGl0cmVBbGlnbmVHYXVjaGUgLnpvbmVUaXRyZUNsYW1wIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIG1heC13aWR0aDogMTAwJTtcbn1cblxuLyogWm9uZSBkJ2FmZmljaGFnZSBwcmluY2lwYWxlIChhbmltYXRpb25zLCBhdS1kZXNzdXMgZHUgZm9uZCkgKi9cbiN6b25lQWZmaWNoYWdlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBmbGV4OiAxO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC8qIEVzcGFjZSBwb3VyIGxhIGJhcnJlIGRlIHBpbG90YWdlIDogc2EgaGF1dGV1ciByw6llbGxlLCBwb3PDqWUgc3VyIDpyb290IHBhclxuICAgICAgIEFkYXB0YXRpb25CYXJyZS50cyDigJQgZWxsZSBncmFuZGl0IHF1YW5kIGxhIGJhcnJlIHBhc3NlIHN1ciBkZXV4IGxpZ25lcy4gKi9cbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0taGF1dGV1ckJhcnJlUGlsb3RhZ2UsIDYwcHgpO1xufVxuIiwiLyoqXG4gKiBTYWlzaWVLaXQg4oCUIFN0eWxlcyBkZSBiYXNlIGRlcyBjb21wb3NhbnRzIGRlIHNhaXNpZS5cbiAqXG4gKiBUb3V0IHNjb3DDqSBzb3VzIC5zYWlzaWVGb3JtdWxhaXJlLlxuICogTCdvdmVybGF5L3BvcHVwIGVzdCBnw6lyw6kgcGFyIGxhIFNhbGxlIChwYXMgaWNpKS5cbiAqL1xuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIEZPUk1VTEFJUkVcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uc2Fpc2llRm9ybXVsYWlyZSB7XG4gICAgbWF4LXdpZHRoOiA2NDBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nOiAyNHB4O1xufVxuXG4uc2Fpc2llVGl0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zYWlzaWVDaGFtcHMge1xuICAgIG1heC1oZWlnaHQ6IDYwdmg7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAvKiBFbiBidXTDqWUgZGUgbGlzdGUsIGxhIG1vbGV0dGUgcydhcnLDqnRlIGzDoCA6IGphbWFpcyBkJ2VuY2hhw65uZW1lbnQgdmVycyBsZSBkZXNzb3VzLiAqL1xuICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG59XG5cbi8qIEJhcnJlIGRlIHNjcm9sbCBuYXRpdmUgc3R5bMOpZSAobm9uLW92ZXJsYXkpLiBQYXMgZGUgc2Nyb2xsYmFyLWNvbG9yIDogc3VyXG4gICBDaHJvbWUg4omlMTIxIGlsIGTDqXNhY3RpdmVyYWl0IGNlcyByw6hnbGVzIDo6LXdlYmtpdC1zY3JvbGxiYXIgZXQgcsOpYWN0aXZlcmFpdFxuICAgbGEgYmFycmUgb3ZlcmxheSBhdXRvLW1hc3F1w6llLiAqL1xuLnNhaXNpZUNoYW1wczo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiAxMnB4O1xufVxuXG4uc2Fpc2llQ2hhbXBzOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uc2Fpc2llQ2hhbXBzOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXI0KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5zYWlzaWVCb3V0b25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xufVxuXG4vKiBCb3V0b25zIHNhaXNpZSA6IG3Dqm1lIHRhaWxsZSBxdWUgbGVzIGJvdXRvbnMgYmFycmUgZCdhY3Rpb25zICguYnRuU2NlbmUpICovXG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgSU5QVVQgU0NPUkVcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uc2Fpc2llSW5wdXRTY29yZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpOyAvKiBhbGlnbsOpIDE2IC0+IDIwcHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xufVxuXG4uc2Fpc2llSm91ZXVyIHtcbiAgICBmbGV4OiAxO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTsgLyogYWxpZ27DqSA2IC0+IDhweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzO1xufVxuXG4uc2Fpc2llSm91ZXVyTm9tIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zYWlzaWVTY29yZSB7XG4gICAgd2lkdGg6IDYwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgcGFkZGluZzogNnB4IDhweDtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzEpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uc2Fpc2llU2NvcmU6Zm9jdXMge1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1jb3VsZXVyQ3RhLCB2YXIoLS1jQWNjZW50MykpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY291bGV1ckN0YSwgdmFyKC0tY0FjY2VudDMpKTtcbn1cblxuLyogQ2hyb21lL0VkZ2UgOiBtYXNxdWVyIGxlcyBmbMOoY2hlcyBkZXMgaW5wdXRzIG51bWJlciAqL1xuLnNhaXNpZVNjb3JlOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuLnNhaXNpZVNjb3JlOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xufVxuLnNhaXNpZVNjb3JlIHtcbiAgICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbn1cblxuLnNhaXNpZVJlc3VsdGF0IHtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIG1pbi1oZWlnaHQ6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzLCBvcGFjaXR5IDAuM3M7XG59XG5cbi5zYWlzaWVTZXBhcmF0ZXVyIHtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgRkVFREJBQ0sgVklDVE9JUkUgLyBEw4lGQUlURSAvIE5VTFxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi5zYWlzaWVWaWN0b2lyZSAuc2Fpc2llUmVzdWx0YXQge1xuICAgIGNvbG9yOiB2YXIoLS1jU3VjY2VzMyk7XG59XG5cbi5zYWlzaWVWaWN0b2lyZSAuc2Fpc2llU2NvcmUge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY1N1Y2NlczMpO1xufVxuXG4uc2Fpc2llRGVmYWl0ZSAuc2Fpc2llUmVzdWx0YXQge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UzKTtcbn1cblxuLnNhaXNpZURlZmFpdGUgLnNhaXNpZVNjb3JlIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNSb3VnZTMpO1xufVxuXG4uc2Fpc2llTnVsIC5zYWlzaWVSZXN1bHRhdCB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5zYWlzaWVOdWwgLnNhaXNpZVNjb3JlIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgSU5QVVQgUkVTVUxUQVRcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uc2Fpc2llSW5wdXRSZXN1bHRhdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycztcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi8qIFRvZ2dsZSAzIHBvc2l0aW9ucyAqL1xuLnNhaXNpZVRvZ2dsZVJlc3VsdGF0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyKTtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLnNhaXNpZVRvZ2dsZUJ0biB7XG4gICAgcGFkZGluZzogOHB4IDE4cHg7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzEpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycywgY29sb3IgMC4ycztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uc2Fpc2llVG9nZ2xlQnRuOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci1yaWdodDogdmFyKC0tYm9yZGVyKTtcbn1cblxuLnNhaXNpZVRvZ2dsZUJ0bjpob3Zlcjpub3QoLnNhaXNpZVRvZ2dsZUFjdGlmKSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xufVxuXG4uc2Fpc2llVG9nZ2xlQnRuLnNhaXNpZVRvZ2dsZUFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb3VsZXVyQ3RhLCB2YXIoLS1jQWNjZW50MykpO1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyQ3RhVGV4dGUsIHZhcigtLWNBY2NlbnR0KSk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4vKiBBbGVydGUgaW5jb2jDqXJlbmNlICovXG4uc2Fpc2llQWxlcnRlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlMyk7XG4gICAgcGFkZGluZy10b3A6IDRweDtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBJTlBVVCBSRVNVTFRBVCBQRVJTTyAocG9pbnRzIHBlcnNvbm5hbGlzw6lzKVxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi8qIOKUgOKUgCBQb2ludGFnZSA6IHVuIFZSQUkgdGFibGVhdSBjb21wYWN0IChyYW5nIC8gbm9tcyAvIGN1cnNldXIgZCfDqXRhdCkg4pSA4pSAXG4gICBGaWxldHMgZmlucywgcGFzIGRlIGNhcnRlcyBlbXBpbMOpZXMgOyBsYXJnZXVycyBmaXhlcyA9IGFsaWduZW1lbnQgcGFyZmFpdCBkZXMgY29sb25uZXMuXG4gICBMZSByYW5nIGVzdCBlbiByZXRyYWl0IHZpc3VlbCA6IGwnb3JkcmUgZGUgdGlyYWdlIG4nZXN0IHBhcyBsJ2luZm9ybWF0aW9uIGltcG9ydGFudGUuXG4gICBMZSBjdXJzZXVyIGVzdCBsZSB0b2dnbGUgU1RBTkRBUkQgKHRvZ2dsZVNjZW5lKiwgZmV1aWxsZSBfdG9nZ2xlU2NlbmUuY3NzIGR1IGJ1bmRsZVxuICAgw6ljcmFuKSA6IGluZGljYXRldXIgZ2xpc3NhbnQgZXQgdGFpbGxlcyBkZSBib3V0b24gZXhpc3RhbnRzLCBhdWN1biBkZXNpZ24gbm91dmVhdS4gKi9cbi5zYWlzaWVUYWJsZWF1Qm9pdGUgLnNhaXNpZUNoYW1wcyB7XG4gICAgZ2FwOiAwO1xuICAgIC8qIERlIGwnYWlyIGZyYW5jIGVudHJlIGxlcyB0ZXh0ZXMgZHUgaGF1dCAodGl0cmUsIGNvbnNpZ25lLCB2aXZpZXIpIGV0IGxhIGxpc3RlIDpcbiAgICAgICBhdSBtb2lucyB1bmUgaGF1dGV1ciBkZSBjYXJhY3TDqHJlIChkw6ljaXNpb24gZHUgY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMDEpLiAqL1xuICAgIG1hcmdpbi10b3A6IDEuNWVtO1xufVxuXG4vKiBMZSBjb21wdGV1ciB2aXZhbnQsIMOgIGPDtHTDqSBkdSBib3V0b24gOiBsJ8OpdGF0IGRlIGxhIHNhaXNpZSBlbiB1biBjaGlmZnJlXG4gICAow6ljYXJ0w6lzIGR1IHBvaW50YWdlLCBham91dMOpcyBkdSBzdG9jaykuIExhcmdldXIgZmlnw6llIHBhciBsZSBUUyAoYXUgbWF4aW11bVxuICAgcG9zc2libGUpICsgY2hpZmZyZXMgdGFidWxhaXJlcyA6IGxlIHBhc3NhZ2UgZGUgOSDDoCAxMCBuZSBkw6lwbGFjZSByaWVuLiAqL1xuLnNhaXNpZUNvbXB0ZXVyQm9pdGUge1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgIG1hcmdpbi1yaWdodDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG59XG5cbi8qIFJhbmfDqWVzIGRlIHRhYmxlYXUgZGVzIGJvw650ZXMgZW4gbW9kZSB0YWJsZWF1IChwb2ludGFnZSwgc3RvY2spIDogZmlsZXRzLCB6w6licmFnZSxcbiAgIGNvbXBhY2l0w6kuIExlIHPDqWxlY3RldXIgc2NvcGVkIGVzdCBwbHVzIHNww6ljaWZpcXVlIHF1ZSBsYSBjYXJ0ZSBkZSBzYWlzaWUsIHF1ZWxsZVxuICAgcXVlIHNvaXQgbGV1ciBwb3NpdGlvbiBkYW5zIGxhIGZldWlsbGUg4oCUIGxhIGxpZ25lIGRlIHRhYmxlYXUgZ2FnbmUgdG91am91cnMuICovXG4uc2Fpc2llVGFibGVhdUJvaXRlIC5zYWlzaWVDaGFtcHMgPiAuc2Fpc2llSW5wdXRQZXJzbyB7XG4gICAgLyogTWFyZ2UgZHJvaXRlIHBsdXMgYW1wbGUgOiBsYSBjb2xvbm5lIGRlIGdhdWNoZSByw6lzZXJ2ZSBkdSBsYXJnZSAoZ3JhbmRzXG4gICAgICAgbm9tYnJlcyksIGxhIGNvbG9ubmUgZGUgZHJvaXRlIG5lIGRvaXQgcGFzIHBhcmHDrnRyZSBjb2xsw6llIGF1IGJvcmQgZW4gZmFjZS4gKi9cbiAgICBwYWRkaW5nOiA0cHggMTZweCA0cHggOHB4O1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4uc2Fpc2llVGFibGVhdUJvaXRlIC5zYWlzaWVDaGFtcHMgPiAuc2Fpc2llSW5wdXRQZXJzbzpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbn1cblxuLyogVW5lIGxpZ25lIHN1ciBkZXV4IGVuIGzDqWdlciBncmlzIDogb24gbmUgc2UgdHJvbXBlIHBhcyBkZSBsaWduZSAoZMOpY2lzaW9uIGR1XG4gICBjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0wMSDigJQgbGUgc3VybGlnbmFnZSBhdSBzdXJ2b2wgYSDDqXTDqSBlc3NhecOpIHB1aXMgcmV0aXLDqSkuXG4gICBDb21wdMOpIHBhcm1pIGxlcyByYW5nw6llcyBzZXVsZXMgOiBsYSBsw6lnZW5kZSBkdSB0YWJsZWF1IG5lIGTDqWNhbGUgcGFzIGxlIHrDqWJyYWdlLiAqL1xuLnNhaXNpZVRhYmxlYXVCb2l0ZSAuc2Fpc2llQ2hhbXBzID4gLnNhaXNpZUlucHV0UGVyc286bnRoLWNoaWxkKGV2ZW4gb2YgLnNhaXNpZUlucHV0UGVyc28pIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi8qIENvbG9ubmVzIGR1IHBvaW50YWdlIDogcmFuZyAvIG5vbXMgLyBjdXJzZXVyLiAqL1xuLnNhaXNpZUlucHV0UGVyc28uc2Fpc2llSW5wdXRQb2ludGFnZSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDNlbSBtaW5tYXgoMCwgMWZyKSBtYXgtY29udGVudDtcbiAgICBnYXA6IDAgMTJweDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4vKiBUYWJsZWF1IGR1IHN0b2NrLCDDoCBsw6lnZW5kZSA6IGxvdCAvIHN0b2NrIC8gZGlzdHJpYnXDqXMgLyBjb21wdGV1ciBzdGFuZGFyZCBb4oiSXSBuIFsrXS5cbiAgIExlcyBjb2xvbm5lcyBzJ2FsaWduZW50IHN1ciB0b3V0ZSBsYSBoYXV0ZXVyIDogYydlc3QgbGUgY29udGVuZXVyIHF1aSBwb3J0ZSBsYVxuICAgZ3JpbGxlLCBjaGFxdWUgcmFuZ8OpZSAobMOpZ2VuZGUgY29tcHJpc2UpIHMneSBpbnNjcml0IGVuIHNvdXMtZ3JpbGxlLiAqL1xuLnNhaXNpZVRhYmxlYXVCb2l0ZSAuc2Fpc2llQ2hhbXBzOmhhcyg+IC5zYWlzaWVUYWJsZWF1RW50ZXRlKSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIHJlcGVhdCgzLCBtYXgtY29udGVudCk7XG4gICAgY29sdW1uLWdhcDogMTJweDtcbn1cblxuLnNhaXNpZVRhYmxlYXVCb2l0ZSAuc2Fpc2llQ2hhbXBzID4gLnNhaXNpZVRhYmxlYXVFbnRldGUsXG4uc2Fpc2llVGFibGVhdUJvaXRlIC5zYWlzaWVDaGFtcHMgPiAuc2Fpc2llSW5wdXRQZXJzby5zYWlzaWVJbnB1dE5vbWJyZSB7XG4gICAgZ3JpZC1jb2x1bW46IDEgLyAtMTtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogc3ViZ3JpZDtcbiAgICAvKiBMYSBjYXJ0ZSBkZSBiYXNlIHBvc2UgdW4gZ2FwIHF1aSwgc3VyIHVuZSBzb3VzLWdyaWxsZSwgw6ljcmFzZXJhaXQgbCfDqWNhcnQgaMOpcml0w6kuICovXG4gICAgZ2FwOiAwIDEycHg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLyogTGEgbMOpZ2VuZGUgOiBsZXMgbW90cyBkZXMgY29sb25uZXMsIHVuZSBmb2lzIHBvdXIgdG91dGVzLCBlbiByZXRyYWl0IHZpc3VlbC4gKi9cbi5zYWlzaWVUYWJsZWF1Qm9pdGUgLnNhaXNpZUNoYW1wcyA+IC5zYWlzaWVUYWJsZWF1RW50ZXRlIHtcbiAgICBwYWRkaW5nOiA0cHggMTZweCA0cHggOHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLnNhaXNpZVRhYmxlYXVFbnRldGUgPiBkaXYsXG4uc2Fpc2llVGFibGVhdUNlbGx1bGUge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xufVxuXG4uc2Fpc2llVGFibGVhdUVudGV0ZSA+IGRpdjpmaXJzdC1jaGlsZCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnNhaXNpZVRhYmxlYXVDZWxsdWxlIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogVGFibGVhdSA6IGxlcyB0ZXh0ZXMgcydhbGlnbmVudCDDoCBnYXVjaGUgKGxhIGNhcnRlIGRlIHNhaXNpZSwgZWxsZSwgY2VudHJlKS4gKi9cbi5zYWlzaWVUYWJsZWF1Qm9pdGUgLnNhaXNpZUpvdWV1ck5vbSxcbi5zYWlzaWVUYWJsZWF1Qm9pdGUgLnNhaXNpZVBlcnNvQ2FwdGlvbiB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLyogU2F1ZiBzb3VzIGxlIHRpdHJlIChjb25zaWduZSwgdml2aWVyKSA6IGNlbnRyw6lzLCBjb21tZSBzdXIgdG91dGVzIGxlcyBib8OudGVzLiAqL1xuLnNhaXNpZVRhYmxlYXVCb2l0ZSAuc2Fpc2llRm9ybXVsYWlyZSA+IC5zYWlzaWVQZXJzb0NhcHRpb24ge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnNhaXNpZVBvaW50YWdlUmFuZyB7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG5cbi8qIExlIHNldWwgw6ljYXJ0IHPDqW1hbnRpcXVlIDogwqsgw4ljYXJ0ZXIgwrsgc8OpbGVjdGlvbm7DqSBzZSBsaXQgZW4gcm91Z2UuICovXG4uc2Fpc2llUG9pbnRhZ2VFY2FydGUgLnRvZ2dsZVNjZW5lQnRuLnNlbGVjdGlvbm5lIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlMyk7XG59XG5cbi8qIExhIGxpZ25lIMOpY2FydMOpZSAoZMOpY2lzaW9uIGR1IGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTA0KSA6IGxlIG5vbSBzJ2VzdG9tcGUsIGV0IGMnZXN0XG4gICB0b3V0IOKAlCBpbCBSRVNURSBMSVNJQkxFLCBjJ2VzdCBxdWVscXUndW4gcXUnb24gcmV0aXJlLCBvbiBkb2l0IHZvaXIgcXVpLiBKYW1haXMgZGVcbiAgIHJhecOpIDogdHJlbnRlIGV0IHVuZSBsYW5ndWVzLCBhdXRhbnQgZGUgcG9saWNlcywgdW4gdHJhaXQgYmFycsOpIHRvbWJlIG4naW1wb3J0ZSBvw7lcbiAgIHN1ciBjZXJ0YWluZXMgw6ljcml0dXJlcy4gKi9cbi5zYWlzaWVQb2ludGFnZUxpZ25lRWNhcnRlZSAuc2Fpc2llSm91ZXVyTm9tIHtcbiAgICBvcGFjaXR5OiAuNTtcbn1cblxuLnNhaXNpZUlucHV0UGVyc28ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7IC8qIGFsaWduw6kgNiAtPiA4cHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5zYWlzaWVQZXJzb05vbXMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuXG4uc2Fpc2llUGVyc29Ob21zIC5zYWlzaWVKb3VldXJOb20ge1xuICAgIGZsZXg6IDE7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uc2Fpc2llUGVyc29DYXB0aW9uIHtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogTGlnbmUgw6AgMyBjb2xvbm5lcyA6IHNjb3JlL3BvaW50cyBzdXIgbGVzIGV4dMOpcmlldXJzLCBmbMOoY2hlcyAob3UgZXNwYWNlKSBhdSBjZW50cmUuICovXG4uc2Fpc2llUGVyc29MaWduZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xufVxuXG4uc2Fpc2llUGVyc29MaWduZSAuc2Fpc2llU2NvcmUge1xuICAgIGZsZXg6IDAgMCA2MHB4O1xufVxuXG4uc2Fpc2llUGVyc29MaWduZSAuc2Fpc2llVG9nZ2xlUmVzdWx0YXQsXG4uc2Fpc2llUGVyc29MaWduZSAuc2Fpc2llUGVyc29HYXAge1xuICAgIGZsZXg6IDE7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLyogRmzDqGNoZXMgZW4gbGVjdHVyZSBzZXVsZSA6IHJlZmzDqHRlbnQgbGVzIHBvaW50cywgbm9uIGNsaXF1YWJsZXMuICovXG4uc2Fpc2llVG9nZ2xlTGVjdHVyZVNldWxlIC5zYWlzaWVUb2dnbGVCdG4ge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5zYWlzaWVUb2dnbGVMZWN0dXJlU2V1bGUgLnNhaXNpZVRvZ2dsZUJ0bi5zYWlzaWVUb2dnbGVBY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY291bGV1ckN0YSwgdmFyKC0tY0FjY2VudDMpKTtcbiAgICBjb2xvcjogdmFyKC0tY291bGV1ckN0YVRleHRlLCB2YXIoLS1jQWNjZW50dCkpO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIFBPUFVQIElOTElORSAocG9zaXRpb25uZW1lbnQgc2V1bClcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uc2Fpc2llUG9wdXAge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiAxMDAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgcGFkZGluZzogNnB4IDhweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggdmFyKC0tY09tYnJlRm9ydGUpO1xufVxuXG4vKiBQb3B1cCBhbmNyw6llIChhdSBjbGljIHN1ciB1biDDqWzDqW1lbnQpIDogcGFubmVhdSBjb21wbGV0ICsgcGllZCBsaWVucy4gKi9cbi5zYWlzaWVQb3B1cEFuY3JlZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXgtd2lkdGg6IDM2MHB4O1xufVxuXG4uc2Fpc2llUG9wdXBBbmNyZWUgLnNhaXNpZUZvcm11bGFpcmUge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4uc2Fpc2llUG9wdXBBbmNyZWUgLnNhaXNpZUNoYW1wcyB7XG4gICAgbWF4LWhlaWdodDogNTB2aDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4vKiBQaWVkIGxpZW5zIChwb3B1cCBhdSBjbGljKSA6IHBldGl0cyBsaWVucyDCqyBBbm51bGVyIMK7IC8gwqsgVmFsaWRlciDCuywgcGFzIGRlIGdyb3MgYm91dG9uLiAqL1xuLnNhaXNpZUxpZW4ge1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIHBhZGRpbmc6IDJweCA2cHg7XG59XG5cbi5zYWlzaWVMaWVuQW5udWxlciB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5zYWlzaWVMaWVuVmFsaWRlciB7XG4gICAgY29sb3I6IHZhcigtLWNvdWxldXJDdGEsIHZhcigtLWNBY2NlbnQzKSk7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLyogwqsgVmFsaWRlciDCuyBncmlzw6kgdGFudCBxdWUgbGEgc2Fpc2llIG4nZXN0IHBhcyBjb21wbMOodGUgOiB2aXNpYmxlIG1haXMgcGFzIGNsaXF1YWJsZSAobcOqbWVcbiAgIGNvbmNlcHQgcXVlIGxhIGJhcnJlIGQnYWN0aW9ucywgZ3Jpc8OpIGphbWFpcyBtYXNxdcOpKS4gKi9cbi5zYWlzaWVMaWVuLnNhaXNpZUxpZW5EZXNhY3RpdmUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cbiIsIi8qXG4gKiBWYXJpYWJsZXMgQ1NTIHJlY3LDqcOpZXMgZW4gVHlwZVNjcmlwdCBhdSBydW50aW1lIDogbGUgSlMgbGVzIHBvc2UgcGFyIMOpbMOpbWVudCB2aWEgc2V0UHJvcGVydHlcbiAqICh2YWxldXIgPSBiYXNlIHggcmF0aW8gZCfDqWNoZWxsZSksIGRhbnMgRGltZW5zaW9ubmV1ciAvIFZ1ZUNvbXBvc2FudCAvIFRhYmxlYXUgLyBNYXRjaHMgLyBTb25kYWdlLlxuICogRMOpY2xhcsOpZXMgaWNpIGVuIGBpbml0aWFsYCAoPSBndWFyYW50ZWVkLWludmFsaWQgOiBhdWN1biBlZmZldCBzdXIgbGUgcmVuZHUsIGxlIHZhcigpIHNlIGNvbXBvcnRlXG4gKiBjb21tZSBzaSByaWVuIG4nw6l0YWl0IGTDqWNsYXLDqSkgdW5pcXVlbWVudCBwb3VyIHF1ZSBsJ0lERSBsZXMgcsOpc29sdmUgZXQgZ2FyZGUgbCdpbnNwZWN0aW9uXG4gKiDCqyB1bnJlc29sdmVkIGN1c3RvbSBwcm9wZXJ0eSDCuyBhY3RpdmUgY29udHJlIGxlcyB2cmFpcyB0eXBvcy5cbiAqL1xuOnJvb3Qge1xuICAgIC8qIHBhcnRhZ8OpZXMgKERpbWVuc2lvbm5ldXIsIFZ1ZUNvbXBvc2FudCkgKi9cbiAgICAtLWlsb3RQYWRkaW5nOiBpbml0aWFsOyAvKiBsJ2VzcGFjZSBkZXMgY2FydGVzIDogdW5lIHNldWxlIHZhbGV1ciwgcG9zw6llIHN1ciBsYSByYWNpbmUgKERpbWVuc2lvbm5ldXIuZXNwYWNlQ2FydGUpICovXG4gICAgLS1pbG90UmF5b246IGluaXRpYWw7XG4gICAgLS1pbG90UmF5b25JbnRlcm5lOiBpbml0aWFsO1xuICAgIC0tcG9saWNlMTogaW5pdGlhbDtcbiAgICAtLXBvbGljZTI6IGluaXRpYWw7XG4gICAgLS1wb2xpY2UzOiBpbml0aWFsO1xuXG4gICAgLyogdGFibGVhdSAvIGNsYXNzZW1lbnQgKFRhYmxlYXUudHMpICovXG4gICAgLS1sYXJnZXVyVGFibGVhdTogaW5pdGlhbDtcbiAgICAtLXBhZGRpbmdUYWJsZWF1VjogaW5pdGlhbDtcbiAgICAtLXBhZGRpbmdUYWJsZWF1SDogaW5pdGlhbDtcblxuICAgIC8qIG1hdGNocyAoTWF0Y2hzLnRzKSAqL1xuICAgIC0tbUdhcDogaW5pdGlhbDtcbiAgICAtLW1Ob206IGluaXRpYWw7XG4gICAgLS1tQ2VudHJlOiBpbml0aWFsO1xuICAgIC0tcGFkZGluZ0xpZ25lVjogaW5pdGlhbDtcbiAgICAtLXBhZGRpbmdMaWduZUg6IGluaXRpYWw7XG5cbiAgICAvKiBzb25kYWdlIChTb25kYWdlLnRzKSAqL1xuICAgIC0tcGN0OiBpbml0aWFsO1xuICAgIC0tc29uZFF1ZXN0aW9uTWI6IGluaXRpYWw7XG4gICAgLS1zb25kTGlnbmVHYXA6IGluaXRpYWw7XG4gICAgLS1zb25kQmFycmVIOiBpbml0aWFsO1xufVxuIiwiLyoqXG4gKiBLaXQgQ1NTIOKAlCBFZmZldHMgdmlzdWVscyAoY2FydGUpXG4gKlxuICogQXBwbGlxdWUgdmlhIGRhdGEtZWZmZXQgc3VyICNzYWxsZUVjcmFuLlxuICogQWpvdXRlciAudnVlQ2FydGUgc3VyIHRvdXQgYmxvYyBhIHN0eWxpc2VyLlxuICovXG5cbi8qIOKUgOKUgCBWYXJpYWJsZSBib3JkdXJlIGTDqXJpdsOpZSAodW5lIHNldWxlIHNvdXJjZSkg4pSA4pSAICovXG4jc2FsbGVFY3JhbiB7XG4gICAgLS1pbG90Qm9yZHVyZTogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpIDMwJSwgdHJhbnNwYXJlbnQpO1xufVxuXG4vKiDilIDilIAgQ2xhc3NlcyBwYXJ0YWfDqWVzIOKUgOKUgCAqL1xuXG4udnVlVGl0cmVDZW50cmUge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tcG9saWNlMSk7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZmRWNyYW4pO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpO1xufVxuXG4vKiBTY2VuZSBkJ2VudHJlZSBjb21tdW5lICovXG5Aa2V5ZnJhbWVzIHZ1ZUFwcGFyaXRpb24ge1xuICAgIGZyb20ge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC43NWVtKTtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgfVxufVxuXG4udnVlQW5pbWVyIHtcbiAgICBhbmltYXRpb246IHZ1ZUFwcGFyaXRpb24gMTUwbXMgZWFzZS1vdXQgZm9yd2FyZHM7XG59XG5cbi8qIENhcnRlIGRlIGJhc2UuIFNvbiBjYWRyZSBlc3QgbCdlc3BhY2UgZGVzIGNhcnRlcyBkZSB0b3V0IGwnw6ljcmFuIChEaW1lbnNpb25uZXVyLmVzcGFjZUNhcnRlKSA6XG4gICBsZSBtw6ptZSBzdXIgdG91dGVzIGxlcyBjYXJ0ZXMsIHF1aSBuZSBzdWl0IG5pIGxhIHBvbGljZSBuaSBsZSB6b29tLiAqL1xuLnZ1ZUNhcnRlIHtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1pbG90UmF5b24pO1xuICAgIHBhZGRpbmc6IHZhcigtLWlsb3RQYWRkaW5nKTtcbn1cblxuLyogTCfDrmxvdCBmYWl0IG1haW4gZCd1bmUgY2FydGUgKHVuIGJsb2MsIHBhcyB1biB0YWJsZWF1IGR1IGtpdCkgbGEgcmVtcGxpdCA6IGF1Y3VuIHZpZGUgbmVcbiAgIHMnYWpvdXRlIGF1IGNhZHJlIGQndW4gY8O0dMOpLiBMZXMgdGFibGVhdXggZHUga2l0LCBldXgsIG9udCBsYSBsYXJnZXVyIHF1ZSBsZSBraXQgY2FsY3VsZSwgZXQgbGFcbiAgIGNhcnRlIGxlcyBlbnZlbG9wcGUuICovXG4udnVlQ2FydGUgZGl2LnZ1ZVRhYmxlYXUge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgIGZsZXgtZ3JvdzogMTtcbn1cblxuLyogR2xhY2lzICovXG5bZGF0YS1lZmZldD1cIjFcIl0gLnZ1ZUNhcnRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1ckZvbmQpIDMwJSwgdHJhbnNwYXJlbnQpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMnB4KTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb3VsZXVyRm9uZCk7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMjBweCB2YXIoLS1jTm9pcik7XG59XG5cbi8qIFRyYW5zcGFyZW50ICovXG5bZGF0YS1lZmZldD1cIjJcIl0gLnZ1ZUNhcnRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1ckZvbmQpIDcwJSwgdHJhbnNwYXJlbnQpO1xufVxuXG4vKiBWb2lsZSAqL1xuW2RhdGEtZWZmZXQ9XCIzXCJdIC52dWVDYXJ0ZSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE2NWRlZyxcbiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvdWxldXJGb25kKSA5NSUsIHRyYW5zcGFyZW50KSxcbiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvdWxldXJGb25kKSA0MCUsIHRyYW5zcGFyZW50KSk7XG59XG5cbi8qIEVuY2FkcmUgKi9cbltkYXRhLWVmZmV0PVwiNFwiXSAudnVlQ2FydGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvdWxldXJGb25kKTtcbiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpO1xufVxuXG4vKiBPbWJyZSAqL1xuW2RhdGEtZWZmZXQ9XCI1XCJdIC52dWVDYXJ0ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY291bGV1ckZvbmQpO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDIwcHggdmFyKC0tY09tYnJlRm9ydGUpO1xufVxuXG4vKiBQb3B1cCA6IG9tYnJlIHBvcnRlZSBwb3VyIGRldGFjaGVyIGR1IGZvbmQgKi9cbi52dWVQb3B1cCB7XG4gICAgYm94LXNoYWRvdzogMCAwIDIwcHggMTBweCB2YXIoLS1jTm9pcik7Ym94LXNoYWRvdzogMCAwIDUwcHggNTBweCB2YXIoLS1jTm9pcik7XG59XG5cbi8qIElsb3RzIGludGVybmVzIDogYm9yZHVyZSBzdWJ0aWxlIGRhbnMgbGEgY2FydGUgKi9cbltkYXRhLWVmZmV0XSAudnVlQ2FydGUgLnZ1ZVRhYmxlYXUsXG5bZGF0YS1lZmZldF0gLnZ1ZUNhcnRlIC52dWVNYXRjaExpZ25lIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb3VsZXVyRm9uZCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0taWxvdFJheW9uSW50ZXJuZSk7XG4gICAgYm9yZGVyOiB2YXIoLS1pbG90Qm9yZHVyZSk7XG59XG5cbi8qIENhcnRlIMKrIGJhbmRlIMK7IDogbGEgY2FydGUgc2FucyBzb24gY2FkcmUsIHBvdXIgdW5lIGJvw650ZSB0cm9wIGJhc3NlIG/DuSBsZSBjYWRyZSBwcmVuZHJhaXQgcGx1c1xuICAgZGUgcGxhY2UgcXVlIGxlIGNvbnRlbnUgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTI2KS4gSWwgbmUgcmVzdGUgcXVlIGwnw65sb3QsIHF1aSBwcmVuZFxuICAgbGEgZm9ybWUgZGUgbGEgY2FydGUgZXQgZ2FyZGUgc2Egc2lsaG91ZXR0ZSBzZWxvbiBsJ2VmZmV0IOKAlCBsJ29tYnJlIGR1IGdsYWNpcyBldCBkZSBsJ29tYnLDqSwgbGVcbiAgIGxpc2Vyw6kgZGUgbCdlbmNhZHLDqSA7IGxlIHRyYW5zcGFyZW50IGV0IGxlIHZvaWxlIG4nb250IHF1ZSBsZXVyIGNhZHJlLCBxdWkgZGlzcGFyYcOudC4gQydlc3QgbGFcbiAgIHNjw6huZSBxdWkgbGEgY2hvaXNpdCAoYHZ1ZUNhcnRlIHZ1ZUJhbmRlYCksIGphbWFpcyB1biBjYWxjdWwuICovXG4udnVlQ2FydGUudnVlQmFuZGUsXG5bZGF0YS1lZmZldF0gLnZ1ZUNhcnRlLnZ1ZUJhbmRlIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG5bZGF0YS1lZmZldF0gLnZ1ZUNhcnRlLnZ1ZUJhbmRlIC52dWVUYWJsZWF1IHtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1pbG90UmF5b24pO1xufVxuXG5bZGF0YS1lZmZldD1cIjFcIl0gLnZ1ZUNhcnRlLnZ1ZUJhbmRlIC52dWVUYWJsZWF1IHtcbiAgICBib3gtc2hhZG93OiAwIDRweCAyMHB4IHZhcigtLWNOb2lyKTtcbn1cblxuW2RhdGEtZWZmZXQ9XCI0XCJdIC52dWVDYXJ0ZS52dWVCYW5kZSAudnVlVGFibGVhdSB7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY291bGV1clByaW1haXJlKTtcbn1cblxuW2RhdGEtZWZmZXQ9XCI1XCJdIC52dWVDYXJ0ZS52dWVCYW5kZSAudnVlVGFibGVhdSB7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMjBweCB2YXIoLS1jT21icmVGb3J0ZSk7XG59XG5cbi8qIENhcnRlIHNhbnMgb21icmUgOiBzZXVsZSBsJ29tYnJlIGRpc3BhcmHDrnQsIGxlIGZvbmQgZXQgbGUgY2FkcmUgZGUgbCdlZmZldCByZXN0ZW50LiBDJ2VzdCBsYVxuICAgc2PDqG5lIChvdSBsZSBraXQpIHF1aSBsYSBkZW1hbmRlLCBwb3VyIHVuIGFmZmljaGFnZSBkZSBiYXNlIHF1aSBuZSBkb2l0IHBhcyBkb21pbmVyXG4gICAoYHZ1ZUNhcnRlIHZ1ZVNhbnNPbWJyZWApLiAqL1xuW2RhdGEtZWZmZXRdIC52dWVDYXJ0ZS52dWVTYW5zT21icmUge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi8qIENhcnRlIMKrIHBhc3RpbGxlIMK7IDogbGUgZGVzc2luIGRlIGxhIGNhcnRlIMOgIGxhIHRhaWxsZSBkJ3VuZSBtZW50aW9uICh1biByYW5nIMOgIGPDtHTDqSBkJ3VuXG4gICByw6lzdWx0YXQpLiBTb24gY2FkcmUgc3VpdCBzb24gcHJvcHJlIHRleHRlLCBwYXMgbCdlc3BhY2UgZGUgbCfDqWNyYW4sIHF1aSBsYSByZW5kcmFpdCBwbHVzXG4gICBncm9zc2UgcXVlIGNlIHF1J2VsbGUgYWNjb21wYWduZS4gQydlc3QgbGUga2l0IHF1aSBsYSBkZW1hbmRlIChgdnVlQ2FydGUgdnVlUGFzdGlsbGVgKS4gKi9cbi52dWVDYXJ0ZS52dWVQYXN0aWxsZSB7XG4gICAgcGFkZGluZzogMC4zZW0gMC41ZW07XG59XG5cbi8qIEdhZ25hbnQgLyBQZXJkYW50IChnZW5lcmlxdWUpICovXG4udnVlR2FnbmFudCB7XG4gICAgY29sb3I6IHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG59XG5cbi52dWVQZXJkYW50IHtcbiAgICBmb250LXdlaWdodDogMjAwO1xuICAgIG9wYWNpdHk6IDAuNDtcbn1cblxuLyogUGFnaW5hdGlvbiAqL1xuLnZ1ZVBhZ2luYXRpb24ge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogTG90IGRpc3BsYXkgKi9cbi52dWVMb3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4udnVlTG90SW1hZ2VXcmFwIHtcbiAgICBmbGV4OiAxO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4udnVlTG90SW1hZ2Uge1xuICAgIG1heC13aWR0aDogbWluKDgwJSwgY2FsYygxMDB2dyAqIDEyIC8gNDgpKTtcbiAgICBtYXgtaGVpZ2h0OiBtaW4oOTAlLCBjYWxjKDEwMHZoICogOCAvIDI0KSk7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyogQmFkZ2UgcsOpc3VsdGF0IOKAlCBwYXJ0aWNpcGFudCBub21tw6kgb3UgbnVtw6lybyB0b21ib2xhICovXG5cbkBrZXlmcmFtZXMgdnVlQmFkZ2VSZXN1bHRhdFBvcCB7XG4gICAgMCUgICB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogc2NhbGUoMC4yKSByb3RhdGUoLTZkZWcpOyB9XG4gICAgNjAlICB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMS4xKSByb3RhdGUoMWRlZyk7IH1cbiAgICA4MCUgIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk2KTsgfVxuICAgIDEwMCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHNjYWxlKDEpIHJvdGF0ZSgwZGVnKTsgfVxufVxuXG5Aa2V5ZnJhbWVzIHZ1ZUJhZGdlUmVzdWx0YXRGbGFzaCB7XG4gICAgMCUgICB7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgICBpbnNldCAgNnB4ICA2cHggMThweCAxOHB4ICNGRkIzQzE4OCxcbiAgICAgICAgICAgIGluc2V0IC02cHggIDZweCAxOHB4IDE4cHggI0IzRDlGRjg4LFxuICAgICAgICAgICAgaW5zZXQgIDZweCAtNnB4IDE4cHggMThweCAjQjNGRkIzODgsXG4gICAgICAgICAgICBpbnNldCAtNnB4IC02cHggMThweCAxOHB4ICNGRkYzQjM4ODtcbiAgICB9XG4gICAgMTAwJSB7IGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDAgdHJhbnNwYXJlbnQ7IH1cbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXQudnVlQW5pbWVyIHtcbiAgICAvKiBMZSBwb3AgZ2FyZGUgYGZvcndhcmRzYCAoaWwgZmlnZSBsJ8OpY2hlbGxlIGV0IGwnb3BhY2l0w6kgZCdhcnJpdsOpZSksIGxlIGZsYXNoIE5PTiDigJQgZXRcbiAgICAgICBjJ2VzdCB2b2xvbnRhaXJlLiBMZSBmbGFzaCBwaWxvdGUgYGJveC1zaGFkb3dgIDsgYXZlYyBgZm9yd2FyZHNgLCBzYSBkZXJuacOocmUgaW1hZ2VcbiAgICAgICByZXN0YWl0IGZpZ8OpZSB0YW50IHF1ZSBgLnZ1ZUFuaW1lcmAgw6l0YWl0IHBvc8OpZSwgZXQgbGEgY2xhc3NlIHJlc3RlIHN1ciBsZSBkZXJuaWVyXG4gICAgICAgcsOpc3VsdGF0IHNvcnRpIChsZXMga2l0cyBuZSBsYSByZXRpcmVudCBxdSfDoCBsJ2Fycml2w6llIGR1IHN1aXZhbnQsIHBhcmZvaXMgamFtYWlzKS5cbiAgICAgICBMZSBmbGFzaCBuZSBkb2l0IGRvbmMgcmllbiBsYWlzc2VyIGRlcnJpw6hyZSBsdWkgOiBpbCByZW5kIGBib3gtc2hhZG93YCBhdSBiYWRnZSDDoCBsYVxuICAgICAgIGZpbiBkZXMgNzAwIG1zLCBsYSBzeW5jaHJvbmlzYXRpb24gZXN0IHBvcnTDqWUgcGFyIGwnYW5pbWF0aW9uIGV0IG5vbiBwYXIgbGVcbiAgICAgICBKYXZhU2NyaXB0LCBldCB1biBvdWJsaSBkZSByZXRyYWl0IGRlIGNsYXNzZSBuJ2EgcGx1cyBhdWN1biBlZmZldCB2aXNpYmxlLiAqL1xuICAgIGFuaW1hdGlvbjogdnVlQmFkZ2VSZXN1bHRhdFBvcCA1NTBtcyBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSkgZm9yd2FyZHMsXG4gICAgICAgICAgICAgICB2dWVCYWRnZVJlc3VsdGF0Rmxhc2ggNzAwbXMgZWFzZS1vdXQ7XG59XG5cbi52dWVCYWRnZVJlc3VsdGF0IHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTEpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLyogQWNjcm9jaGVzIGQnaGFiaWxsYWdlIChkb2NzL2FyY2hpdGVjdHVyZS9oYWJpbGxhZ2UubWQpIDogY2hhcXVlIGZhbGxiYWNrIGVzdCBsZVxuICAgICAgIGTDqWZhdXQgaGlzdG9yaXF1ZSA7IC0taGFiQ291bGV1clJlc3VsdGF0IGVzdCBwdWJsacOpZSBlbiBpbmxpbmUgcGFyIFZ1ZUtpdC4gKi9cbiAgICBwYWRkaW5nOiB2YXIoLS1oYWJQYWRkaW5nLCAwLjVlbSAxZW0pO1xuICAgIGJvcmRlcjogdmFyKC0taGFiQm9yZHVyZSwgMXB4IHNvbGlkIHRyYW5zcGFyZW50KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1oYWJGb3JtZSwgdmFyKC0taWxvdFJheW9uSW50ZXJuZSkpO1xuICAgIC8qIFBBUyBkJ29tYnJlIDogbGUgYmFkZ2UgcsOpc3VsdGF0IG4nZW5kb3NzZSBwYXMgLS1oYWJPbWJyZSAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0XG4gICAgICAgMjAyNi0wOS0wNCkuIEwnb21icmUgbmUgdmVuYWl0IHF1ZSBkJ3VuIGhhYmlsbGFnZSwgbGUgZmxhcCwgb8O5IGVsbGUgc2VydGlzc2FpdCBsZVxuICAgICAgIHBhbm5lYXUgOyBlbGxlIGNvw7t0YWl0IHBsdXMgcXUnZWxsZSBuZSByZW5kYWl0IOKAlCBsZSBmbGFzaCBkJ2FwcGFyaXRpb24gcGlsb3RlIGx1aVxuICAgICAgIGF1c3NpIGBib3gtc2hhZG93YCwgZXQgdG91dGUgb21icmUgZGUgZm9uZCBkZXZlbmFpdCB1bmUgdmFsZXVyIMOgIHJlc3RpdHVlciDDoCBsYSBmaW5cbiAgICAgICBkZSBsJ2FuaW1hdGlvbiwgZG9uYyB1bmUgc3luY2hyb25pc2F0aW9uIGRlIHBsdXMgw6AgdGVuaXIuIExlIGJhZGdlIGVzdCBwbGF0LCBwb3PDqSBzdXJcbiAgICAgICBsZSBmb25kIDogc2Egc2lsaG91ZXR0ZSB0aWVudCDDoCBsYSBib3JkdXJlLCDDoCBsYSBmb3JtZSBldCDDoCBsJ291dGxpbmUuICovXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWhhYlBvbGljZSwgaW5oZXJpdCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0taGFiQ291bGV1clJlc3VsdGF0LCB2YXIoLS1oYWJGb25kLCB2YXIoLS1jb3VsZXVyRm9uZCkpKTtcbiAgICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tY05vaXIpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xuICAgIC8qIFBBUyBkZSBgb3ZlcmZsb3c6IGhpZGRlbmAgOiB1biByw6lzdWx0YXQgYW1wdXTDqSBlc3QgcGlyZSBxdSd1biByw6lzdWx0YXQgcXVpIGTDqXBhc3NlXG4gICAgICAgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA4LTI4KS4gTGUgY2FsaWJyYWdlIGRlIHBvbGljZSBlc3QgbMOgIHBvdXIgcXVlIGxlIHRleHRlXG4gICAgICAgdGllbm5lIDsgcydpbCBzZSB0cm9tcGUgZGUgcXVlbHF1ZXMgcG91ciBjZW50LCBvbiB2ZXV0IGxlIHZvaXIgZMOpYm9yZGVyLCBwYXNcbiAgICAgICBkaXNwYXJhw650cmUuIExlIHRyYWl0IGV0IGxlIGxhYmVsIGRlIGwnYW5pbWF0aW9uIMKrIEFubnVsw6kgwrsgc29udCBwb3PDqXMgZW4gaW5zZXQ6IDAsXG4gICAgICAgaWxzIG4nb250IGphbWFpcyBldSBiZXNvaW4gZHUgY2xpcHBpbmcuICovXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1pbi1oZWlnaHQ6IDIuMmVtO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIC8qIEFuY3JlIGRlcyDDqXRhdHMgcG9zw6lzIERBTlMgbGUgYmFkZ2UgKHJhbmcsIHRhbXBvbiDigJQga2l0UGx1Z2luL0NMQVVERS5tZCwgwqsgS2l0cyBkJ2FmZmljaGFnZSDCuykuXG4gICAgICAgU2FucyBkw6ljYWxhZ2UsIGRvbmMgc2FucyBlZmZldCBzdXIgbGEgbWlzZSBlbiBwYWdlIDsgdW4ga2l0IHF1aSBwb3NpdGlvbm5lIHNlcyBiYWRnZXNcbiAgICAgICBlbiBhYnNvbHUgKEdhZ25hbnRLaXQpIGNvbnRpbnVlIGRlIGxlIGZhaXJlIGVuIGlubGluZSwgcXVpIHByaW1lLiAqL1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXRWaWRlIHtcbiAgICAvKiBGdXR1ciByw6lzdWx0YXQgOiBsJ2hhYmlsbGFnZSBuZSBzJ2FwcGxpcXVlIHF1J2F1IHRpcsOpLiBVbiBiYWRnZSB2aWRlIG5lIHBvcnRlIG5pIGZvbmQgbmlcbiAgICAgICBib3JkdXJlIGQnaGFiaWxsYWdlLCBzZXVsZSBsYSBmb3JtZSByZXN0ZSBwb3VyIGFubm9uY2VyIGxhIHNpbGhvdWV0dGUg4oCUIGV0IHNvbiBjb250b3VyIGVzdFxuICAgICAgIENFTFVJIGRlcyBiYWRnZXMgcGxlaW5zLCBwYXMgdW4gdHJhaXQgcMOibGUgOiB1bmUgcGxhY2Ugw6AgcHJlbmRyZSBzZSB2b2l0IGNvbW1lIHVuZSBwbGFjZVxuICAgICAgIHByaXNlIChkw6ljaXNpb24gUE8gMjAyNi0wOS0xMSwgcXVpIHJlbXBsYWNlIGxlIHRyYWl0IGRpc2NyZXQgZHUgMjAyNi0wOC0yNSkuIExhIGJvcmR1cmVcbiAgICAgICBnYXJkZSBzYSBsYXJnZXVyIGVuIHRyYW5zcGFyZW50IHBvdXIgcXVlIGxlIGJhZGdlIG5lIGNoYW5nZSBwYXMgZGUgdGFpbGxlIGVuIHNlXG4gICAgICAgcmVtcGxpc3NhbnQuIFJpZW4gw6AgYW5udWxlciBjw7R0w6kgb21icmUgOiBsZSBiYWRnZSByw6lzdWx0YXQgbidlbiBwb3J0ZSBwbHVzIGR1IHRvdXQuICovXG4gICAgYmFja2dyb3VuZDogIzAwMDAwMDA1O1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi8qIFBsYWNlIG91dmVydGUgOiBjZSBxdWkgdmllbnQgUEVVVCBhcnJpdmVyIGljaS4gTGUgYmFkZ2UgdmlkZSBzJ2FsbHVtZSwgc291cyB0b3V0IGhhYmlsbGFnZSDigJRcbiAgIGMnZXN0IHVuZSBpbmZvcm1hdGlvbiBkZSBqZXUsIHBhcyB1biBkw6ljb3IgOiBsYSBxdWVzdGlvbiDCqyBvw7kgcHVpcy1qZSBhbGxlciA/IMK7IHNlIGxpdCBzdXIgbGVzXG4gICBjYXJ0ZXMgKGTDqWNpc2lvbiBQTyAyMDI2LTA5LTEwLCByw6lwYXJ0aXRpb24gZW4gw6lxdWlwZXMpLiBEYW5zIGxhIGNvdWxldXIgZGUgbGEgY2FydGUgcXVhbmRcbiAgIGVsbGUgZW4gYSB1bmUgKGNlbGxlIGRlIGwnw6lxdWlwZSA6IGxhIHBsYWNlIGEgZMOpasOgIGxhIGNvdWxldXIgcXVlIGxlIG5vbSBwcmVuZHJhKSwgZW4gYmxhbmMgdW5pXG4gICBzaW5vbi4gUG9zw6kgcGFyIGxlIGtpdCDDoCBsaXN0ZSBzdXIgc2EgcHJlbWnDqHJlIHBsYWNlIGxpYnJlLCBvcHRpb24gYG91dmVydGAgZGUgYG1ldHRyZUFKb3VyYC4gKi9cbi52dWVCYWRnZVJlc3VsdGF0VmlkZS52dWVCYWRnZVJlc3VsdGF0T3V2ZXJ0IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1oYWJDb3VsZXVyUmVzdWx0YXQsIHZhcigtLWNCbGFuYykpO1xufVxuXG4udnVlQmFkZ2VSZXN1bHRhdE5vbSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgLyogU2FucyBlZmZldCDDoCBsYXJnZXVyIG5hdHVyZWxsZSA7IHVuIHRleHRlIGFqdXN0w6kgZGFucyBzYSBoYXV0ZXVyIChhdS1kZWzDoCBkdSBwbGFmb25kIGRlXG4gICAgICAgc2lnbmVzLCBraXRQbHVnaW4vQ0xBVURFLm1kLCDCqyBLaXRzIGQnYWZmaWNoYWdlIMK7KSBwcmVuZCB0b3V0ZSBsYSBsYXJnZXVyIGV0IGRvaXQgcmVzdGVyIGNlbnRyw6kuICovXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIC8qIE5pIGBtYXgtd2lkdGg6IDEwMCVgLCBuaSBgb3ZlcmZsb3c6IGhpZGRlbmAsIG5pIGB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc2AuXG4gICAgICAgTCdlbGxpcHNpcyBjb8O7dGFpdCBCRUFVQ09VUCBwbHVzIHF1ZSBsZSBkw6lib3JkZW1lbnQgcXUnZWxsZSBwcsOpdGVuZGFpdCBtYXNxdWVyIDpcbiAgICAgICBwb3VyIGNhY2hlciA1ICUgZGUgdHJvcC1wbGVpbiwgbGUgbmF2aWdhdGV1ciBkb2l0IHJldGlyZXIgYXNzZXogZGUgY2FyYWN0w6hyZXMgcG91clxuICAgICAgIGxvZ2VyIGxlIMKrIOKApiDCuyBsdWktbcOqbWUg4oCUIHN1ciB1biBudW3DqXJvIG1vbm9zcGFjw6kgZXNwYWPDqSAoMC4zZW0pLCBjZWxhIGZhaXNhaXRcbiAgICAgICDCqyBBRi0wODIgwrsg4oaSIMKrIEFGLTDigKYgwrssIHVuIHRpZXJzIGR1IHLDqXN1bHRhdCBwZXJkdS4gTGUgdGV4dGUgZ2FyZGUgZG9uYyBzYSBsYXJnZXVyXG4gICAgICAgbmF0dXJlbGxlIGV0IHJlc3RlIGNlbnRyw6kgcGFyIGxlIGZsZXggcGFyZW50IDogcydpbCBkw6lib3JkZSwgaWwgZMOpYm9yZGUgZGVzIGRldXhcbiAgICAgICBjw7R0w6lzLCBsaXNpYmxlbWVudCAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDgtMjgpLiAqL1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6IHZhcigtLWhhYkNvdWxldXJSZXN1bHRhdFRleHRlLCB2YXIoLS1oYWJUZXh0ZSwgdmFyKC0tY05vaXIpKSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbkBrZXlmcmFtZXMgdnVlQmFkZ2VSZXN1bHRhdEVjYXJ0ZXIge1xuICAgIDAlICAgeyBsZXR0ZXItc3BhY2luZzogMDsgdGV4dC1pbmRlbnQ6IDA7IH1cbiAgICAxMDAlIHsgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWhhYkludGVybGV0dHJhZ2VDaGlmZnJlcywgMC4yZW0pOyB0ZXh0LWluZGVudDogdmFyKC0taGFiSW50ZXJsZXR0cmFnZUNoaWZmcmVzLCAwLjJlbSk7IH1cbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXROb21DaGlmZnJlcyB7XG4gICAgLyogdGV4dC1pbmRlbnQgPSBsZXR0ZXItc3BhY2luZyA6IGwnZXNwYWNlbWVudCBzJ2FwcGxpcXVlIGF1c3NpIEFQUsOIUyBsZSBkZXJuaWVyXG4gICAgICAgY2hpZmZyZSBldCBkw6ljYWxlIGxlIGNlbnRyYWdlIHZlcnMgbGEgZ2F1Y2hlIDsgbCdpbmRlbnQgcmFqb3V0ZSBsJ8OpcXVpdmFsZW50XG4gICAgICAgZGV2YW50IHBvdXIgcsOpw6lxdWlsaWJyZXIgKG3Dqm1lIHBhcmFkZSBxdWUgbGVzIHZvbGV0cyBkdSBmbGFwKS5cbiAgICAgICB0ZXh0LWluZGVudCBldCBOT04gcGFkZGluZy1sZWZ0IDogdW4gaGFiaWxsYWdlIHBldXQgcG9zZXIgbGEgbcOqbWUgY29tcGVuc2F0aW9uIHN1clxuICAgICAgIGxlIGJhZGdlIChgLmhhYkZsYXAgLmhhYkVsZW1lbnQgeyB0ZXh0LWluZGVudDogMC4zZW0gfWApLCBldCBsZSBzcGFuIGVuIGjDqXJpdGUuIEF2ZWNcbiAgICAgICBkZXV4IHByb3ByacOpdMOpcyBkaWZmw6lyZW50ZXMgbGVzIGRldXggcydhZGRpdGlvbm5haWVudCDigJQgMC42ZW0gZGUgZMOpY2FsYWdlIHBvdXIgMC4zZW1cbiAgICAgICBkJ2VzcGFjZW1lbnQgZW4gdHJvcCwgbGUgdGV4dGUgcG91c3PDqSDDoCBkcm9pdGUgZXQgY291cMOpLiBBdmVjIGxhIG3Dqm1lIHByb3ByacOpdMOpLCBsYVxuICAgICAgIGTDqWNsYXJhdGlvbiBkdSBzcGFuIFJFTVBMQUNFIGxhIHZhbGV1ciBow6lyaXTDqWUgOiBsYSBjb21wZW5zYXRpb24gdmF1dCBsJ2VzcGFjZW1lbnQsIHVuZVxuICAgICAgIHNldWxlIGZvaXMsIGF2ZWMgb3Ugc2FucyBoYWJpbGxhZ2UuXG4gICAgICAgTCdlc3BhY2VtZW50IGx1aS1tw6ptZSBlc3QgdW4gYXhlIGR1IGNvbnRyYXQgZCdoYWJpbGxhZ2UgKC0taGFiSW50ZXJsZXR0cmFnZUNoaWZmcmVzLFxuICAgICAgIGRvY3MvYXJjaGl0ZWN0dXJlL2hhYmlsbGFnZS5tZCkgOiAwLjJlbSBzYW5zIGhhYmlsbGFnZSwgbGEgcm91ZSBldCBsYSByb3VsZXR0ZSBsZVxuICAgICAgIHJlc3NlcnJlbnQsIGxlIGZsYXAgbCdhbGlnbmUgc3VyIHNlcyB2b2xldHMuIETDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTA2IDpcbiAgICAgICBsZXMgY2hpZmZyZXMgcyfDqWNhcnRlbnQgcGFydG91dCwgY2hhcXVlIGhhYmlsbGFnZSByw6hnbGUgZGUgY29tYmllbi4gKi9cbiAgICBsZXR0ZXItc3BhY2luZzogdmFyKC0taGFiSW50ZXJsZXR0cmFnZUNoaWZmcmVzLCAwLjJlbSk7XG4gICAgdGV4dC1pbmRlbnQ6IHZhcigtLWhhYkludGVybGV0dHJhZ2VDaGlmZnJlcywgMC4yZW0pO1xufVxuXG4udnVlQmFkZ2VSZXN1bHRhdC52dWVBbmltZXIgLnZ1ZUJhZGdlUmVzdWx0YXROb21DaGlmZnJlcyB7XG4gICAgYW5pbWF0aW9uOiB2dWVCYWRnZVJlc3VsdGF0RWNhcnRlciA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSkgMTAwbXMgYm90aDtcbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXROdW1lcm8ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGZvbnQtc2l6ZTogMC43NWVtO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgY29sb3I6IHZhcigtLWhhYkNvdWxldXJSZXN1bHRhdFRleHRlLCB2YXIoLS1oYWJUZXh0ZSwgdmFyKC0tY05vaXIpKSk7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyog4pSA4pSAIMOJdGF0cyBkdSBiYWRnZSBwb3PDqXMgcGFyIGxlcyBraXRzIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xMCxcbiAgIGtpdFBsdWdpbi9DTEFVREUubWQsIMKrIEtpdHMgZCdhZmZpY2hhZ2UgwrspLiBMZSByYW5nIGV0IGxlIHRhbXBvbiBzb250IGRlcyDDqXRhdHMgZHUgYmFkZ2UsIGRhbnMgbGVcbiAgIHNvY2xlLCDDoCBjw7R0w6kgZGUgbHVpIDogcGx1cyBkZSBjb3BpZSBwYXIga2l0LiBQb3PDqXMgcGFyIFZ1ZUtpdC5wb3NlclJhbmdCYWRnZVJlc3VsdGF0IGV0XG4gICBWdWVLaXQudGFtcG9ubmVyQmFkZ2VSZXN1bHRhdC4gTGUgc29jbGUgcG9ydGUgbGUgY29tcG9ydGVtZW50IHBhciBkw6lmYXV0IDsgdW4ga2l0IHF1aSBlblxuICAgdmV1dCB1biBhdXRyZSBwb3NlIHNhIHByb3ByZSBjbGFzc2UgcGFyLWRlc3N1cy4g4pSA4pSAICovXG5cbi8qIFJhbmcgZHUgdGlyYWdlICgjTiksIGNvaW4gaGF1dC1nYXVjaGUgZHUgYmFkZ2UuIExhIG1vaXRpw6kgZGUgbGEgcG9saWNlIGR1IGJhZGdlLCBzYW5zIHBsYW5jaGVyXG4gICBlbiBwaXhlbHMg4oCUIGxlIHJhbmcgc3VpdCBsYSBwb2xpY2UsIGNvbW1lIGxlIG5vbSwgZXQgcmllbiBkJ2F1dHJlIOKAlCwgZXQgdW5lIHBhc3RpbGxlIHF1aSBzdWl0IGxhXG4gICBwb2xpY2UgYXVzc2kgKGTDqWNpc2lvbiBQTyAyMDI2LTA5LTExIOKAlCDDoCAyNSAlIGV0IDExIHB4IGRlIHBsYW5jaGVyLCBpbCBuZSBzZSBsaXNhaXQgcGFzKS4gKi9cbi52dWVCYWRnZVJlc3VsdGF0UmFuZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgZm9udC1zaXplOiA1MCU7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgdGV4dC1pbmRlbnQ6IDA7XG4gICAgcGFkZGluZzogMC4xNWVtIDAuMzVlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgMC40ZW07XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXIpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLnZ1ZUJhZGdlUmVzdWx0YXRSYW5nID4gc3BhbiB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG59XG5cbi8qIFRhbXBvbiAoYW5udWxhdGlvbikg4oCUIDggcyBhdSB0b3RhbCwgZHVyw6llIHJlcHJpc2UgcGFyIFZ1ZUtpdC50YW1wb25uZXJCYWRnZVJlc3VsdGF0LlxuICAgUFJJTkNJUEUgOiBsZSByw6lzdWx0YXQgcmVzdGUgMTAwICUgbGlzaWJsZSwgYXVjdW4gb3ZlcmxheSBuZSBsZSBjb3V2cmUuIFVuIHRyYWl0IG9ibGlxdWUgc2VcbiAgIGRlc3NpbmUgc3VyIGxlIGJhZGdlLCB1bmUgw6l0aXF1ZXR0ZSBwYXJhw650IGRhbnMgbGUgY29pbiwgbGUgYmFkZ2Ugc29ydCBlbiBnbGlzc2FudC5cbiAgIFRpbWVsaW5lIDogMCDihpIgMC4yIHMgZMOpbGFpIDsgMC4yIOKGkiAxIHMgbGUgdHJhaXQgc2UgZGVzc2luZSBkZSBnYXVjaGUgw6AgZHJvaXRlIDtcbiAgIDEg4oaSIDEuNCBzIGwnw6l0aXF1ZXR0ZSBwYXJhw650IChyZXNzb3J0KSA7IDEuNCDihpIgNi41IHMgdGVudWUgOyA2LjUg4oaSIDggcyBzb3J0aWUgZ2xpc3PDqWUgKyBmb25kdS5cbiAgIExlIHRleHRlIGRlIGwnw6l0aXF1ZXR0ZSB2aWVudCBkZSAtLXZ1ZUJhZGdlVGFtcG9uVGV4dGUgKHJlbmR1IHZpYSBgY29udGVudDpgKSA6IGF1dHJlIGNob3NlXG4gICBxdSfCqyBBbm51bMOpIMK7IGVzdCBwb3NzaWJsZS4gVHJhaXQgKGluc2V0OiAwKSBldCDDqXRpcXVldHRlICh0b3AvcmlnaHQpIHNvbnQgcG9zw6lzIERBTlMgbGVcbiAgIGJhZGdlIDogaWxzIG4nb250IGphbWFpcyBldSBiZXNvaW4gZCd1biBvdmVyZmxvdzogaGlkZGVuLCBxdWkgYXVyYWl0IHJlY291cMOpIGxlIHLDqXN1bHRhdC5cbiAgIFPDqWxlY3RldXIgw6AgdW5lIGNsYXNzZSwgY29tbWUgbGVzIGFuY2llbnMgLmdhS2l0QmFkZ2VBbm51bGUgLyAubGdLaXRCYWRnZUFubnVsZSA6IHVuIGJhZGdlXG4gICBxdWkgcG9ydGUgZW5jb3JlIC52dWVBbmltZXIgZ2FyZGUgbCdhbmltYXRpb24gZCdhcHBhcml0aW9uIChwbHVzIHNww6ljaWZpcXVlKSBldCBuZSBqb3VlIHBhc1xuICAgbGEgc29ydGllIOKAlCBjb21wb3J0ZW1lbnQgY29uc3RhbnQsIHNpZ25hbMOpIGF1IGNoZWYgZGUgcHJvamV0IMOgIGwnw6l0YXBlIDAuICovXG4udnVlQmFkZ2VSZXN1bHRhdFRhbXBvbiB7XG4gICAgYW5pbWF0aW9uOiB2dWVCYWRnZVJlc3VsdGF0VGFtcG9uU29ydGllIDEuNXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNDUsIDEpIDYuNXMgZm9yd2FyZHM7XG59XG4vKiBUcmFpdCBvYmxpcXVlIGQndW4gY29pbiDDoCBsJ2F1dHJlLCBxdWVsIHF1ZSBzb2l0IGxlIHJhdGlvIDogU1ZHIGlubGluZSDDqXRpcsOpIHBhclxuICAgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIiwgdHJhaXQgZ2FyZMOpIMOgIDRweCBwYXIgdmVjdG9yLWVmZmVjdD1cIm5vbi1zY2FsaW5nLXN0cm9rZVwiLFxuICAgwqsgZGVzc2luw6kgwrsgcGFyIHVuIGNsaXAtcGF0aCBxdWkgcydvdXZyZSBkZSBnYXVjaGUgw6AgZHJvaXRlLiAqL1xuLnZ1ZUJhZGdlUmVzdWx0YXRUYW1wb246OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lJyB2aWV3Qm94PScwIDAgMSAxJz48bGluZSB4MT0nMCcgeTE9JzEnIHgyPScxJyB5Mj0nMCcgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPSc0JyBzdHJva2Utb3BhY2l0eT0nMC41JyB2ZWN0b3ItZWZmZWN0PSdub24tc2NhbGluZy1zdHJva2UnLz48L3N2Zz5cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBjbGlwLXBhdGg6IGluc2V0KDAgMTAwJSAwIDApO1xuICAgIGFuaW1hdGlvbjogdnVlQmFkZ2VSZXN1bHRhdFRhbXBvblJheWVyIDAuOHMgY3ViaWMtYmV6aWVyKDAuNjUsIDAsIDAuMzUsIDEpIDAuMnMgZm9yd2FyZHM7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogNTtcbn1cbi52dWVCYWRnZVJlc3VsdGF0VGFtcG9uOjphZnRlciB7XG4gICAgY29udGVudDogdmFyKC0tdnVlQmFkZ2VUYW1wb25UZXh0ZSk7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNHB4O1xuICAgIHJpZ2h0OiA0cHg7XG4gICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgZm9udDogNzAwIG1heCgxMXB4LCAyNSUpIHZhcigtLWZmRWNyYW4pO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyKTtcbiAgICBwYWRkaW5nOiAycHggNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCB2YXIoLS1jT21icmUpO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCkgcm90YXRlKDhkZWcpO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcbiAgICBhbmltYXRpb246IHZ1ZUJhZGdlUmVzdWx0YXRUYW1wb25FdGlxdWV0dGUgMC41cyBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSkgMXMgZm9yd2FyZHM7XG4gICAgei1pbmRleDogNjtcbn1cbkBrZXlmcmFtZXMgdnVlQmFkZ2VSZXN1bHRhdFRhbXBvblJheWVyIHtcbiAgICB0byB7IGNsaXAtcGF0aDogaW5zZXQoMCAwIDAgMCk7IH1cbn1cbkBrZXlmcmFtZXMgdnVlQmFkZ2VSZXN1bHRhdFRhbXBvbkV0aXF1ZXR0ZSB7XG4gICAgMCUgICB7IHRyYW5zZm9ybTogc2NhbGUoMCkgICAgcm90YXRlKDhkZWcpOyAgb3BhY2l0eTogMDsgfVxuICAgIDYwJSAgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMTUpIHJvdGF0ZSgtM2RlZyk7IG9wYWNpdHk6IDE7IH1cbiAgICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKSAgICByb3RhdGUoMGRlZyk7ICBvcGFjaXR5OiAxOyB9XG59XG5Aa2V5ZnJhbWVzIHZ1ZUJhZGdlUmVzdWx0YXRUYW1wb25Tb3J0aWUge1xuICAgIDAlICAgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgICAgc2NhbGUoMSk7IH1cbiAgICAxMDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpIHNjYWxlKDAuOTUpOyBmaWx0ZXI6IGJsdXIoMXB4KTsgfVxufVxuXG4vKiBTw6lwYXJhdGV1cnMgZGlyZWN0aW9ubmVscyAqL1xuLnZ1ZVNlcGFyYXRldXJILFxuLnZ1ZVNlcGFyYXRldXJWIHtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1clNlY29uZGFpcmUpIDE1JSwgdHJhbnNwYXJlbnQpO1xufVxuXG4udnVlU2VwYXJhdGV1ckggeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxcHg7IH1cbi52dWVTZXBhcmF0ZXVyViB7IGhlaWdodDogMTAwJTsgd2lkdGg6IDFweDsgfVxuIiwiLyoqXG4gKiBLaXQgQ1NTIOKAlCBUYWJsZWF1IGdlbmVyaXF1ZSArIENsYXNzZW1lbnRcbiAqL1xuXG4udnVlVGFibGVhdVZ1ZSxcbi52dWVDbGFzc2VtZW50IHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBtYXJnaW46IDAgYXV0bztcbn1cblxuLnZ1ZVRhYmxlYXVCbG9jLFxuLnZ1ZUNsYXNzZW1lbnRCbG9jIHtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMCBhdXRvO1xufVxuXG4udnVlVGFibGVhdSB7XG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICB3aWR0aDogdmFyKC0tbGFyZ2V1clRhYmxlYXUsIGF1dG8pO1xuICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gICAgYm9yZGVyLXNwYWNpbmc6IDA7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBtYXJnaW46IDAgYXV0bztcbn1cblxuLyogTGFyZ2V1cnMgY29sb25uZXMgdGFibGVhdSB2aWEgQ1NTIHZhcnMgKHBvc2VlcyBwYXIgSlMpICovXG4udnVlVGFibGVhdSBjb2wge1xuICAgIHdpZHRoOiB2YXIoLS1sYXJnZXVyKTtcbn1cblxuLyogTGVzIHRleHRlcyBkdSB0YWJsZWF1IHByZW5uZW50IGxlcyBjb3VsZXVycyBkdSB0aMOobWUsIGphbWFpcyB1biBub2lyIGR1IHN5c3TDqG1lIDogbCfDrmxvdCBhIGxhXG4gICBjb3VsZXVyIGRlIGZvbmQgZGUgbCfDqXbDqW5lbWVudCwgc29tYnJlIHN1ciBkZXV4IGZvbmRzIGRlIGxhIGdhbGVyaWUuIE5vbSBlbiBwcmltYWlyZSwgdGV4dGVcbiAgIGNvdXJhbnQgZW4gc2Vjb25kYWlyZSwgY2UgcXVpIHMnZWZmYWNlIChlbi10w6p0ZXMsIGNhcGFjaXTDqXMsIHBhZ2UpIGVuIHNlY29uZGFpcmUgZXN0b21ww6kuICovXG5cbi8qIEVuLXRldGUgKi9cbi52dWVUYWJsZWF1IHRoZWFkIHRoIHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTIpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyU2Vjb25kYWlyZSkgNTAlLCB0cmFuc3BhcmVudCk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdUYWJsZWF1VikgdmFyKC0tcGFkZGluZ1RhYmxlYXVIKTtcbiAgICAvKiBGaWxldCBkw6lyaXbDqSBkdSB0aMOobWUsIGphbWFpcyBkZSBsYSBwYWxldHRlIHN5c3TDqG1lIDogbcOpbGFuZ2UgZHUgZm9uZCBkZSBjYXJ0ZSBldCBkdVxuICAgICAgIHRleHRlLCBpbCByZXN0ZSBkb25jIHZpc2libGUgcXVlIGxlIHRow6htZSBzb2l0IGNsYWlyIG91IHNvbWJyZS4gUmllbiDDoCBjb25maWd1cmVyLiAqL1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1clNlY29uZGFpcmUpIDI1JSwgdmFyKC0tY291bGV1ckZvbmQpKTtcbn1cblxuLyogQ2VsbHVsZXMgKi9cbi52dWVUYWJsZWF1IHRib2R5IHRkIHtcbiAgICBjb2xvcjogdmFyKC0tY291bGV1clNlY29uZGFpcmUpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nVGFibGVhdVYpIHZhcigtLXBhZGRpbmdUYWJsZWF1SCk7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyU2Vjb25kYWlyZSkgMTUlLCB2YXIoLS1jb3VsZXVyRm9uZCkpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi52dWVUYWJsZWF1IHRib2R5IHRyOmxhc3QtY2hpbGQgdGQge1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4vKiBDb2xvbm5lIHJhbmcgKi9cbi52dWVDb2xSYW5nIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi52dWVUYWJsZWF1IHRib2R5IHRkLnZ1ZUNvbFJhbmcge1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyU2Vjb25kYWlyZSk7XG59XG5cbi8qIENvbG9ubmUgbm9tICovXG4udnVlQ29sTm9tIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udnVlVGFibGVhdSB0aGVhZCB0aC52dWVDb2xOb20ge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi52dWVUYWJsZWF1IHRib2R5IHRkLnZ1ZUNvbE5vbSB7XG4gICAgY29sb3I6IHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLyogQ29sb25uZSBjYXBhY2l0w6kgKGNsdWIsIG5pdmVhdS4uLikg4oCUIGFmZmljaGFnZSBlbnJpY2hpIDogc2Vjb25kYWlyZSwgZ3JhaXNzZSBsaWdodCArIGl0YWxpcXVlXG4gICBwb3VyIHNlIGRpc3Rpbmd1ZXIgZHUgbm9tLiBUcm9ucXXDqWUgZW4gwqsg4oCmIMK7ICh0YWJsZS1sYXlvdXQ6IGZpeGVkIGltcG9zZSAtLWxhcmdldXIpLiAqL1xuLnZ1ZUNvbENhcGFjaXRlIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGZvbnQtd2VpZ2h0OiAxMDA7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnZ1ZVRhYmxlYXUgdGJvZHkgdGQudnVlQ29sQ2FwYWNpdGUge1xuICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1clNlY29uZGFpcmUpIDUwJSwgdHJhbnNwYXJlbnQpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi8qIENvbG9ubmUgc3VyYnJpbGxhbmNlICovXG4udnVlQ29sU3VyYnJpbGxhbmNlIHtcbiAgICBjb2xvcjogdmFyKC0tY291bGV1ckN0YSwgdmFyKC0tY0FjY2VudDMpKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xufVxuXG4vKiBBbGlnbmVtZW50cyDigJQgc2NvcMOpcyBzb3VzIC52dWVUYWJsZWF1IChzcMOpY2lmaWNpdMOpIDAsMiwwKSBwb3VyIFBSSU1FUiBzdXIgbGUgdGV4dC1hbGlnbjogY2VudGVyXG4gICBwYXIgZMOpZmF1dCBkZXMgY2VsbHVsZXMgZHUgY29ycHMgKC52dWVUYWJsZWF1IHRib2R5IHRkID0gMCwxLDIpLiBTYW5zIGNlIHNjb3BlLCB1bmUgY2xhc3NlXG4gICBkJ2FsaWduZW1lbnQgc2V1bGUgKDAsMSwwKSBuZSBiYXR0YWl0IHBhcyBsYSBiYXNlIOKGkiBsJ2FsaWduZW1lbnQgZMOpY2xhcsOpIChnYXVjaGUvZHJvaXRlKSDDqXRhaXRcbiAgIGlnbm9yw6kgZGFucyBsZSBjb3JwcyBldCB0b3V0IGZpbmlzc2FpdCBjZW50csOpLiAqL1xuLnZ1ZVRhYmxlYXUgLnZ1ZUNvbEdhdWNoZSB7IHRleHQtYWxpZ246IGxlZnQ7IH1cbi52dWVUYWJsZWF1IC52dWVDb2xDZW50cmUgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbi52dWVUYWJsZWF1IC52dWVDb2xEcm9pdGUgeyB0ZXh0LWFsaWduOiByaWdodDsgfVxuXG4vKiBUaXRyZSArIFBhZ2UgKHBhcnRhZ2UgY2xhc3NlbWVudCArIG1hdGNocykgKi9cbi52dWVUaXRyZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIC8qIEwnZXNwYWNlIGRlIGxhIGNhcnRlLCBjb21tZSBzb24gY2FkcmUgOiBpbCBuZSBzdWl0IHBhcyBsYSBwb2xpY2UuICovXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0taWxvdFBhZGRpbmcpO1xufVxuXG4udnVlVGl0cmVUZXh0ZSB7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZmRWNyYW4pO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tcG9saWNlMSk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAvKiBDb3VsZXVyIGR1IHRow6htZSwgamFtYWlzIHVuIG5vaXIgZHUgc3lzdMOobWUgOiBsZSB0aXRyZSBlc3Qgw6ljcml0IHN1ciBsYSBjYXJ0ZSwgcXVpIHByZW5kIGxhXG4gICAgICAgY291bGV1ciBkZSBmb25kIGRlIGwnw6l2w6luZW1lbnQg4oCUIHNvbWJyZSBzdXIgZGV1eCBmb25kcyBkZSBsYSBnYWxlcmllLiAqL1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpO1xufVxuXG4udnVlVGl0cmVQYWdlIHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTMpO1xuICAgIGZvbnQtd2VpZ2h0OiAyMDA7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1clNlY29uZGFpcmUpIDUwJSwgdHJhbnNwYXJlbnQpO1xufVxuXG4vKiBNdWx0aS1jb2xvbm5lcyAocGFydGFnZSBjbGFzc2VtZW50ICsgbWF0Y2hzKS4gTGVzIGNvbG9ubmVzIHNlcnJlbnQgbGV1cnMgw65sb3RzLCBzw6lwYXLDqWVzIHBhclxuICAgbCdlc3BhY2UgZGUgbGEgY2FydGUg4oCUIGxlIG3Dqm1lIHF1ZSBzb24gY2FkcmUgOiBsYSBjYXJ0ZSBsZXMgZW52ZWxvcHBlLCBhdWN1biB2aWRlIG5lIHMnYWpvdXRlXG4gICBlbnRyZSBkZXV4IMOubG90cyBuaSBhdSBib3JkLiBVbmUgY29sb25uZSBkZSBtb2lucyBzdXIgbGEgZGVybmnDqHJlIHBhZ2UgOiBwYXMgZGUgcGlzdGUgdmlkZS4gKi9cbi52dWVNdWx0aUNvbCB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cblxuLnZ1ZU11bHRpQ29sb25uZXMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICBncmlkLWF1dG8tY29sdW1uczogbWF4LWNvbnRlbnQ7XG4gICAgY29sdW1uLWdhcDogdmFyKC0taWxvdFBhZGRpbmcpO1xufVxuIiwiLyoqXG4gKiBLaXQgQ1NTIOKAlCBNYXRjaHMgKGdyaWxsZSlcbiAqL1xuXG4udnVlTWF0Y2hzIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnZ1ZU1hdGNoc0Jsb2Mge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLW1HYXApO1xuICAgIG1heC13aWR0aDogMTAwJTtcbn1cblxuLnZ1ZU1hdGNoQ29sb25uZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tbUdhcCk7XG59XG5cbi52dWVNYXRjaExpZ25lIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tbU5vbSwgMWZyKSB2YXIoLS1tQ2VudHJlKSB2YXIoLS1tTm9tLCAxZnIpO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0xpZ25lVikgdmFyKC0tcGFkZGluZ0xpZ25lSCk7XG4gICAgLyogRm9uZCBldCB0ZXh0ZXMgZHUgdGjDqG1lLCBqYW1haXMgbGEgcGFsZXR0ZSBzeXN0w6htZSA6IG3Dqm1lcyByw7RsZXMgcXVlIGxlIHRhYmxlYXUgKHRhYmxlYXUuY3NzKS4gKi9cbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb3VsZXVyRm9uZCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLyogTnVtw6lybyBkZSB0YWJsZS9lbXBsYWNlbWVudCA6IHBldGl0LCBlbiBoYXV0IMOgIGdhdWNoZSBkdSByZWN0YW5nbGUuICovXG4udnVlTWF0Y2hOdW1lcm8ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDJweDtcbiAgICBsZWZ0OiA1cHg7XG4gICAgZm9udC1zaXplOiB2YXIoLS1wb2xpY2UyKTtcbiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvdWxldXJTZWNvbmRhaXJlKSA0MCUsIHRyYW5zcGFyZW50KTtcbiAgICBsaW5lLWhlaWdodDogMTtcbn1cblxuLnZ1ZU1hdGNoTm9tRHJvaXRlIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnZ1ZU1hdGNoTm9tR2F1Y2hlIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4vKiBBZmZpY2hhZ2UgZW5yaWNoaSA6IGxlIG5vbSByZXN0ZSBzdXIgMSBsaWduZSwgbGVzIGNhcGFjaXTDqXMgZHUgam91ZXVyIHBhc3NlbnQgZW4gMmUgbGlnbmUsXG4gICBkdSBjw7R0w6kgZHUgam91ZXVyIChkcm9pdGUgcG91ciBqb3VldXIxLCBnYXVjaGUgcG91ciBqb3VldXIyKS4gQXBwbGlxdcOpIHNldWxlbWVudCBxdWFuZCBkZXNcbiAgIGNhcGFjaXTDqXMgc29udCBmb3VybmllcyDihpIgbGUgbW9kZSDCqyBzb2JyZSDCuyBnYXJkZSBsZSByZW5kdSBtb25vLWxpZ25lIGFjdHVlbCDDoCBsJ2lkZW50aXF1ZS4gKi9cbi52dWVNYXRjaE5vbURyb2l0ZS52dWVNYXRjaE5vbUVucmljaGksXG4udnVlTWF0Y2hOb21HYXVjaGUudnVlTWF0Y2hOb21FbnJpY2hpIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLnZ1ZU1hdGNoTm9tRHJvaXRlLnZ1ZU1hdGNoTm9tRW5yaWNoaSB7IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgfVxuLnZ1ZU1hdGNoTm9tR2F1Y2hlLnZ1ZU1hdGNoTm9tRW5yaWNoaSB7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyB9XG5cbi52dWVNYXRjaE5vbVRleHRlIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udnVlTWF0Y2hDYXBhY2l0ZXMge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBmb250LXdlaWdodDogMTAwO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTIpO1xuICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1clNlY29uZGFpcmUpIDUwJSwgdHJhbnNwYXJlbnQpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnZ1ZU1hdGNoU2NvcmUge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6IHZhcigtLWNvdWxldXJDdGEsIHZhcigtLWNBY2NlbnQzKSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udnVlTWF0Y2hTY29yZSBzdmcge1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi52dWVNYXRjaFZzIHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTIpO1xuICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1clNlY29uZGFpcmUpIDQwJSwgdHJhbnNwYXJlbnQpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogTGlnbmVzIGNsaXF1YWJsZXMgKi9cbi52dWVNYXRjaENsaXF1YWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IG91dGxpbmUgMC4xNXM7XG59XG5cbi52dWVNYXRjaENsaXF1YWJsZTpob3ZlciB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG4iLCIvKipcbiAqIEtpdCBDU1Mg4oCUIFNvbmRhZ2UgKGJhcnJlcyBkZSByw6lzdWx0YXRzKVxuICovXG5cbi52dWVTb25kYWdlVnVlIHtcbiAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDAgYXV0bztcbn1cblxuLnZ1ZVNvbmRhZ2VCbG9jIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cbi52dWVTb25kYWdlQmFycmVJbmZvIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgbWFyZ2luLWJvdHRvbTogMC4zZW07XG59XG5cbi52dWVTb25kYWdlVG90YWwge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tcG9saWNlMyk7XG4gICAgb3BhY2l0eTogMC41O1xufVxuXG4udnVlU29uZGFnZVByb2dyZXNzaW9uIHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTMpO1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLnZ1ZVNvbmRhZ2VCbG9jIC52dWVUaXRyZUNlbnRyZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc29uZFF1ZXN0aW9uTWIpO1xufVxuXG4udnVlU29uZGFnZVJlcG9uc2VzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1zb25kTGlnbmVHYXApO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvdWxldXJGb25kKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1pbG90UGFkZGluZyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0taWxvdFJheW9uSW50ZXJuZSk7XG4gICAgYm9yZGVyOiB2YXIoLS1pbG90Qm9yZHVyZSk7XG59XG5cbi52dWVTb25kYWdlTGlnbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDAuMmVtO1xufVxuXG4udnVlU29uZGFnZUVudGV0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xufVxuXG4udnVlU29uZGFnZVRleHRlIHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTIpO1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyU2Vjb25kYWlyZSk7XG59XG5cbi52dWVTb25kYWdlUGN0IHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTMpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6IHZhcigtLWNvdWxldXJTZWNvbmRhaXJlKTtcbiAgICBvcGFjaXR5OiAwLjc7XG59XG5cbi52dWVTb25kYWdlQmFycmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBoZWlnaHQ6IHZhcigtLXNvbmRCYXJyZUgpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvdWxldXJGb25kKTtcbiAgICBib3JkZXI6IHZhcigtLWlsb3RCb3JkdXJlKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNvbmRCYXJyZUgpIC8gMik7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnZ1ZVNvbmRhZ2VCYXJyZVZhbGV1ciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogdmFyKC0tcGN0LCAwJSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY291bGV1clNlY29uZGFpcmUpO1xuICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tc29uZEJhcnJlSCkgLyAyKTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjhzIGVhc2Utb3V0O1xufVxuXG4vKiBNZWlsbGV1cmUgcsOpcG9uc2UgKi9cbi52dWVTb25kYWdlTWVpbGxldXIgLnZ1ZVNvbmRhZ2VCYXJyZVZhbGV1ciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY291bGV1clByaW1haXJlKTtcbn1cblxuLnZ1ZVNvbmRhZ2VNZWlsbGV1ciAudnVlU29uZGFnZVRleHRlIHtcbiAgICBjb2xvcjogdmFyKC0tY291bGV1clByaW1haXJlKTtcbn1cblxuLnZ1ZVNvbmRhZ2VNZWlsbGV1ciAudnVlU29uZGFnZVBjdCB7XG4gICAgY29sb3I6IHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG4gICAgb3BhY2l0eTogMTtcbn1cbiIsIi8qIEhhYmlsbGFnZSDCqyBlZmZldWlsbGFnZSDCuyDigJQgY29udHJhdCA6IGRvY3MvYXJjaGl0ZWN0dXJlL2hhYmlsbGFnZS5tZCAqL1xuLmhhYlBsdWNrIHtcbiAgICAvKiBQaWx1bGUgOiB1bmUgdmFsZXVyIMOpbm9ybWUgZXN0IHBsYWZvbm7DqWUgw6AgNTAgJSBkZSBsYSBoYXV0ZXVyIGV0IGRvbm5lIGRlcyBib3V0c1xuICAgICAgIGVuIHZyYWkgZGVtaS1jZXJjbGUuIGA1MCVgIGRvbm5lcmFpdCBkZXMgY29pbnMgZWxsaXB0aXF1ZXMgKG92YWxlKSDigJQgaW50ZXJkaXQgaWNpLiAqL1xuICAgIC0taGFiRm9ybWU6IDk5OWVtO1xuICAgIC0taGFiRm9uZDogdmFyKC0tY0JsYW5jKTtcbiAgICAtLWhhYlRleHRlOiB2YXIoLS1jTm9pcik7XG4gICAgLS1oYWJQb2xpY2U6IHZhcigtLWZmQ2hpZmZyZXMpO1xuICAgIC0taGFiQXNzaWduZXJDb3VsZXVyczogbm9uO1xufVxuLyogUmFuZyA6IGxhIHBpbHVsZSBsYWlzc2Ugc29uIGNvaW4gdmlkZSwgYXVjdW5lIHBhc3RpbGxlIG4neSB0aWVudCBzYW5zIGTDqXBhc3NlciBkZSBsYSBjb3VyYmUuXG4gICBMZSBjaGlmZnJlIHNldWwsIHNhbnMgZm9uZCBuaSBkacOoc2UsIGNvbGzDqSBhdSBjb2luIOKAlCBpbCBzZSBwb3NlIGRvbmMgc3VyIGxlIGZvbmQgZGUgbGEgc2PDqG5lLFxuICAgZGFucyBsYSBjb3VsZXVyIGQnw6ljcml0dXJlIHLDqWdsw6llIGF2ZWMgY2UgZm9uZCAoY2VsbGUgZHUgdGl0cmUsIG3Dqm1lIHJlcGxpKS4gKi9cbi5oYWJQbHVjayAudnVlQmFkZ2VSZXN1bHRhdFJhbmcge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBjb2xvcjogdmFyKC0tY291bGV1clRleHRlU3VyRm9uZCwgdmFyKC0tY291bGV1clByaW1haXJlKSk7XG59XG4uaGFiUGx1Y2sgLnZ1ZUJhZGdlUmVzdWx0YXRSYW5nID4gc3BhbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbiIsIi8qIEhhYmlsbGFnZSDCqyByb3VlIGRlIGxhIGNoYW5jZSDCuyAoUm91ZUtpdCwgUm91ZUxvdEtpdCkg4oCUIGNvbnRyYXQgOiBkb2NzL2FyY2hpdGVjdHVyZS9oYWJpbGxhZ2UubWQgKi9cbi5oYWJSb3VlIHtcbiAgICAtLWhhYlRleHRlOiB2YXIoLS1jTm9pcik7XG4gICAgLyogTGVzIG51bcOpcm9zIHMnw6ljYXJ0ZW50IG1vaW5zIHF1ZSBzdXIgbGVzIGF1dHJlcyBoYWJpbGxhZ2VzIDogaWxzIHMnYWZmaWNoZW50IGF1IGNlbnRyZVxuICAgICAgIGRlIGxhIHJvdWUgY29tbWUgYXUgcsOpY2FwaXR1bGF0aWYsIHN1ciB1biBmb25kIGNvbG9yw6kgcXVpIG4nYSBwYXMgYmVzb2luIGRlIGNlIHNvdWZmbGUuICovXG4gICAgLS1oYWJJbnRlcmxldHRyYWdlQ2hpZmZyZXM6IDAuMWVtO1xuICAgIC0taGFiQXNzaWduZXJDb3VsZXVyczogb3VpO1xufVxuLyogTGEgY291bGV1ciBpbmRpdmlkdWVsbGUgZHUgcGFydGljaXBhbnQgZmFpdCBsZSBmb25kIGRlIHNvbiDDqWzDqW1lbnQuICovXG4uaGFiUm91ZSAuaGFiRWxlbWVudCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0taGFiQ291bGV1clJlc3VsdGF0LCB2YXIoLS1jb3VsZXVyRm9uZCkpO1xufVxuIiwiLyogSGFiaWxsYWdlIMKrIHNwbGl0LWZsYXAgwrsg4oCUIGNvbnRyYXQgOiBkb2NzL2FyY2hpdGVjdHVyZS9oYWJpbGxhZ2UubWQgKi9cbi5oYWJGbGFwIHtcbiAgICAtLWhhYkZvcm1lOiAwLjFlbTtcbiAgICAtLWhhYkZvbmQ6IHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG4gICAgLS1oYWJUZXh0ZTogdmFyKC0tY291bGV1ckZvbmQpO1xuICAgIC0taGFiUG9saWNlOiB2YXIoLS1mZkNoaWZmcmVzKTtcbiAgICAvKiBMZSBwYW5uZWF1IGZsYXAgZXN0IHNlcnRpIGRhbnMgdW4gY2FkcmUgYmxhbmMgw6lwYWlzLCBkw6l0YWNow6kgZHUgZm9uZCBwYXIgdW4gZmluXG4gICAgICAgbGlzZXLDqSBzb21icmUgZXQgdW5lIG9tYnJlIHBvcnTDqWUg4oCUIGMnZXN0IGxlIGNhZHJlIHF1aSBkZXNzaW5lIGxlIHBhbm5lYXUuICovXG4gICAgLS1oYWJCb3JkdXJlOiAwLjIyZW0gc29saWQgI0ZGRjk7XG4gICAgLS1oYWJPbWJyZTogMCAwIDAgMC4wNWVtIHZhcigtLWNPbWJyZSksIDAgMC4xMmVtIDAuNGVtIHZhcigtLWNPbWJyZUZvcnRlKTtcbiAgICAvKiBMZSBwYW5uZWF1IHLDqWVsIGVzdCBwbGF0IGV0IGFsbG9uZ8OpIDogcXVhc2kgcGFzIGRlIG1hcmdlIHZlcnRpY2FsZS4gKi9cbiAgICAtLWhhYlBhZGRpbmc6IDAuMjVlbSAwLjllbTtcbiAgICAvKiBKYW1haXMgZGUgY291bGV1ciBpbmRpdmlkdWVsbGUgOiB1biBwYW5uZWF1IGQnYcOpcm9wb3J0IGVzdCBtb25vY2hyb21lIOKAlCBmb25kIHByaW1haXJlLFxuICAgICAgIMOpY3JpdHVyZSBjbGFpcmUg4oCUIG3Dqm1lIHF1YW5kIGRlcyBjb3VsZXVycyBleGlzdGVudCBhdSByZWdpc3RyZSAoZmxhcENvdWxldXJzUGVyc28pLlxuICAgICAgIENlcyBjb3VsZXVycyByZXN0ZW50IGwnYWZmYWlyZSBkdSBmbGFwIGx1aS1tw6ptZSAoc2VzIHZvbGV0cyksIHBhcyBkZXMgc2PDqG5lcyBkJ2FmZmljaGFnZS4gKi9cbiAgICAtLWhhYkFzc2lnbmVyQ291bGV1cnM6IG5vbjtcbiAgICAvKiBVbiBudW3DqXJvIHMnw6ljYXJ0ZSBhdSByeXRobWUgZGVzIHZvbGV0cywgY29tbWUgdG91dCBjZSBxdWkgcGFzc2Ugc291cyBjZSBwYW5uZWF1LiAqL1xuICAgIC0taGFiSW50ZXJsZXR0cmFnZUNoaWZmcmVzOiAwLjNlbTtcbn1cbi8qIExlcyB2b2xldHMgZHUgZmxhcCBuJ2FmZmljaGVudCBxdWUgZGVzIGNhcGl0YWxlcywgYXUgcnl0aG1lIGVzcGFjw6kgZGVzIGNhc2VzLlxuICAgdGV4dC1pbmRlbnQgPSBsZXR0ZXItc3BhY2luZyA6IGwnZXNwYWNlbWVudCBzJ2FwcGxpcXVlIGF1c3NpIEFQUsOIUyBsZSBkZXJuaWVyIGNhcmFjdMOocmVcbiAgIGV0IGZhdXNzZXJhaXQgbGUgY2VudHJhZ2UgOyBsJ2luZGVudCByYWpvdXRlIGwnw6lxdWl2YWxlbnQgZGV2YW50IHBvdXIgcsOpw6lxdWlsaWJyZXIuICovXG4uaGFiRmxhcCAuaGFiRWxlbWVudCB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4zZW07XG4gICAgdGV4dC1pbmRlbnQ6IDAuM2VtO1xufVxuIiwiLyogSGFiaWxsYWdlIMKrIHJvdWxldHRlIMK7IOKAlCBjb250cmF0IDogZG9jcy9hcmNoaXRlY3R1cmUvaGFiaWxsYWdlLm1kICovXG4uaGFiUm91bGV0dGUge1xuICAgIC8qIDAgZXN0IHVuZSB2YWxldXIgaW1wb3PDqWUgOiBsZXMgYW5nbGVzIHZpZnMgc29udCBsJ2lkZW50aXTDqSBkZSBsYSByb3VsZXR0ZS4gKi9cbiAgICAtLWhhYkZvcm1lOiAwO1xuICAgIC0taGFiVGV4dGU6IHZhcigtLWNOb2lyKTtcbiAgICAtLWhhYkFzc2lnbmVyQ291bGV1cnM6IG91aTtcbiAgICAvKiBNw6ptZSByZXNzZXJyZW1lbnQgZGVzIG51bcOpcm9zIHF1ZSBsYSByb3VlIDogZm9uZCBjb2xvcsOpLCBwYXMgYmVzb2luIGRlIHNvdWZmbGUuICovXG4gICAgLS1oYWJJbnRlcmxldHRyYWdlQ2hpZmZyZXM6IDAuMWVtO1xufVxuLyogTGEgY291bGV1ciBpbmRpdmlkdWVsbGUgZHUgcGFydGljaXBhbnQgZmFpdCBsZSBmb25kIGRlIHNvbiDDqWzDqW1lbnQuICovXG4uaGFiUm91bGV0dGUgLmhhYkVsZW1lbnQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWhhYkNvdWxldXJSZXN1bHRhdCwgdmFyKC0tY291bGV1ckZvbmQpKTtcbn1cbiIsIi8qIEhhYmlsbGFnZSDCqyBzw6lsZWN0ZXVyIMK7IChDdXJzb3JLaXQpIOKAlCBjb250cmF0IDogZG9jcy9hcmNoaXRlY3R1cmUvaGFiaWxsYWdlLm1kICovXG4uaGFiU2NvcGUge1xuICAgIC8qIExlIG1pcm9pciBkZSBsYSBjYXNlIEFSUsOKVMOJRSBkdSBjdXJzZXVyIChmb25kIHByaW1haXJlLCDDqWNyaXR1cmUgY2xhaXJlKSDigJQgcGFzIGRlXG4gICAgICAgc29uIHJhaWwgYXUgcmVwb3MgOiB1biByw6ljYXAgbW9udHJlIGRlcyByw6lzdWx0YXRzIHNvcnRpcywgamFtYWlzIGRlcyBjYW5kaWRhdHMuICovXG4gICAgLyogUmF5b24gRklYRSwgY29tbWUgbGEgY2FzZSBkdSBraXQgKC5jdUtpdFNsb3QgeyBib3JkZXItcmFkaXVzOiA2cHggfSkgOiBlbGxlIG5lXG4gICAgICAgbCdhZ3JhbmRpdCBwYXMgYXZlYyBzYSB0YWlsbGUsIGxlIGJhZGdlIG5lIGRvaXQgcGFzIGwnYWdyYW5kaXIgYXZlYyBzYSBwb2xpY2UuICovXG4gICAgLS1oYWJGb3JtZTogNnB4O1xuICAgIC0taGFiRm9uZDogdmFyKC0tY291bGV1clByaW1haXJlKTtcbiAgICAtLWhhYlRleHRlOiB2YXIoLS1jb3VsZXVyRm9uZCk7XG4gICAgLS1oYWJQb2xpY2U6IHZhcigtLWZmQ2hpZmZyZXMpO1xuICAgIC0taGFiQXNzaWduZXJDb3VsZXVyczogbm9uO1xufVxuIiwiLyogSGFiaWxsYWdlIMKrIGJpbmdvIMK7IChDdXJzb3JCaW5nb0tpdCwgR3JpbGxlQmluZ29LaXQpIOKAlCBjb250cmF0IDogZG9jcy9hcmNoaXRlY3R1cmUvaGFiaWxsYWdlLm1kXG4gICBVbiBzZXVsIGhhYmlsbGFnZSBwb3VyIGxhIGZhbWlsbGUgYmluZ28gOyBsZXMgY291bGV1cnMgcGFyIGxldHRyZSByZXN0ZW50IGludGVybmVzIGF1eCBraXRzLiAqL1xuLmhhYkJpbmdvIHtcbiAgICAtLWhhYkZvcm1lOiAwLjVlbTtcbiAgICAtLWhhYkZvbmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgLS1oYWJUZXh0ZTogdmFyKC0tY05vaXIpO1xuICAgIC0taGFiQm9yZHVyZTogMC4xNWVtIHNvbGlkIHZhcigtLWNOb2lyKTtcbiAgICAtLWhhYlBvbGljZTogdmFyKC0tZmZDaGlmZnJlcyk7XG4gICAgLS1oYWJBc3NpZ25lckNvdWxldXJzOiBub247XG59XG4iLCIvKiBIYWJpbGxhZ2UgwqsgbWFjaGluZSDDoCBzb3VzIMK7IOKAlCBjb250cmF0IDogZG9jcy9hcmNoaXRlY3R1cmUvaGFiaWxsYWdlLm1kICovXG4uaGFiU2xvdCB7XG4gICAgLS1oYWJGb25kOiB2YXIoLS1jQmxhbmMpO1xuICAgIC8qIFRleHRlIG5vaXIsIGNvbW1lIGxlcyBhdXRyZXMgaGFiaWxsYWdlcyDDoCBmb25kIGJsYW5jIChwbHVjaywgYmluZ28pIDogbGFpc3PDqSDCqyBsaWJyZSDCuyxcbiAgICAgICB1biBraXQgZG9udCBsJ8OpY3JpdHVyZSBwYXIgZMOpZmF1dCBlc3QgY2xhaXJlIMOpY3JpdmFpdCBibGFuYyBzdXIgYmxhbmMgKGTDqWNpc2lvbiBjaGVmIGRlXG4gICAgICAgcHJvamV0IDIwMjYtMDktMTMpLiAqL1xuICAgIC0taGFiVGV4dGU6IHZhcigtLWNOb2lyKTtcbiAgICAtLWhhYkJvcmR1cmU6IDAuMWVtIHNvbGlkIHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG4gICAgLS1oYWJBc3NpZ25lckNvdWxldXJzOiBub247XG59XG4iLCIvKiBIYWJpbGxhZ2UgwqsgcG9wIMK7IOKAlCBjb250cmF0IDogZG9jcy9hcmNoaXRlY3R1cmUvaGFiaWxsYWdlLm1kICovXG4uaGFiUG9wIHtcbiAgICAtLWhhYkZvbmQ6IHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG4gICAgLS1oYWJUZXh0ZTogdmFyKC0tY291bGV1ckZvbmQpO1xuICAgIC8qIE5pIGNhZHJlLCBuaSBwb2xpY2UsIG5pIGZvcm1lIGltcG9zw6lzIDogY2Uga2l0IG4nYSBwYXMgZCdvYmpldCDDoCBmYWlyZSByZWNvbm5hw650cmUuXG4gICAgICAgU29uIGlkZW50aXTDqSBlc3QgbCdhcHBhcml0aW9uIGVsbGUtbcOqbWUsIHBhcyB1bmUgc2lsaG91ZXR0ZSDigJQgdW4gcsOpY2FwIHNvdXMgaGFiUG9wXG4gICAgICAgcmVwcmVuZCBkb25jIHNpbXBsZW1lbnQgbGVzIGNvdWxldXJzIGR1IHLDqXN1bHRhdCwgYXZlYyBsZXMgZm9ybWVzIGR1IHNvY2xlLiAqL1xuICAgIC0taGFiQXNzaWduZXJDb3VsZXVyczogbm9uO1xufVxuIiwiLyogSGFiaWxsYWdlIMKrIG5hcHBhZ2Ugwrsg4oCUIGNvbnRyYXQgOiBkb2NzL2FyY2hpdGVjdHVyZS9oYWJpbGxhZ2UubWQgKi9cbi5oYWJOYXBwYWdlIHtcbiAgICAtLWhhYkZvbmQ6IHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG4gICAgLS1oYWJUZXh0ZTogdmFyKC0tY291bGV1ckZvbmQpO1xuICAgIC8qIE5pIGNhZHJlLCBuaSBwb2xpY2UsIG5pIGZvcm1lIGltcG9zw6lzIDogY2Uga2l0IG4nYSBwYXMgZCdvYmpldCDDoCBmYWlyZSByZWNvbm5hw650cmUuXG4gICAgICAgU29uIGlkZW50aXTDqSBlc3QgbGEgY291bGV1ciBxdWkgc2UgcsOpcGFuZCwgcGFzIHVuZSBzaWxob3VldHRlIOKAlCB1biByw6ljYXAgc291c1xuICAgICAgIGhhYk5hcHBhZ2UgcmVwcmVuZCBkb25jIHNpbXBsZW1lbnQgbGVzIGNvdWxldXJzIGR1IHLDqXN1bHRhdCwgYXZlYyBsZXMgZm9ybWVzIGR1IHNvY2xlLlxuICAgICAgIE3Dqm1lIGNhcnRlIGQnaWRlbnRpdMOpIHF1ZSBoYWJQb3AsIGV0IGMnZXN0IHZvdWx1IChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0xMikgOiBsZXNcbiAgICAgICBkZXV4IHZpc3VlbHMgc2UgZGlzdGluZ3VlbnQgcGFyIGxhIGTDqWNvdXZlcnRlLCBwYXMgcGFyIGxlIHLDqXN1bHRhdCBkw6ljb3V2ZXJ0LiAqL1xuICAgIC0taGFiQXNzaWduZXJDb3VsZXVyczogbm9uO1xufVxuIiwiLyoqXG4gKiBDb250cm9sZXVyUGFnaW5hdGlvbiDigJQgU3R5bGVzIGR1IGJsb2MgaW5saW5lIOKXgCAxLzgg4pa2XG4gKiBVdGlsaXPDqSBwYXIgdG91cyBsZXMga2l0cyBxdWkgaW50w6hncmVudCBDb250cm9sZXVyUGFnaW5hdGlvbi5cbiAqL1xuXG4vKiBQb2xpY2UgRklYRSwgamFtYWlzIGNlbGxlIGR1IGtpdCAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTMpIDogbGEgcGFnaW5hdGlvbiBwYXJsZVxuICAgw6AgbCdvcmdhbmlzYXRldXIsIHBhcyDDoCBsYSBzYWxsZSDigJQgZWxsZSBuJ2EgcmllbiDDoCBncm9zc2lyIGF2ZWMgbGUgem9vbSwgZXQgbidhIHBhcyDDoCBzZVxuICAgbWV0dHJlIGVuIGF2YW50LiBNw6ptZSB0YWlsbGUgcXVlIGxhIHBhZ2luYXRpb24gZGUgbGEgYmFycmUgZHUgYmFzIChfc3R1ZGlvSW50ZWdyZWUuY3NzKS4gKi9cbi5wYWdCbG9jIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZ2FwOiAwLjVlbTtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgcGFkZGluZy10b3A6IDAuMmVtO1xufVxuXG4ucGFnQnRuIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgcGFkZGluZzogMCAwLjNlbTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbi5wYWdCdG46ZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5wYWdCdG46bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi5wYWdJbmZvIHtcbiAgICBvcGFjaXR5OiAwLjY7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/