  @charset "UTF-8";
/* index.scss → index.css  ·  served at /code/2027/index.css
   Clean shell (no Bootstrap, no au- prefix). Load order: tokens →
   base → layout/card → components. Recompile after any edit:
   npx sass index.scss index.css --no-source-map
   NOTE: the CMS only rebuilds index.css when THIS file is saved — editing a
   partial under css/ alone does not trigger it. Re-save this file after any
   partial edit. */
/* ════════════════════════════════════════════════════════════
   au-tokens.css  ·  AU Design System custom properties
   The single source of truth for all design tokens.
   Every other partial references these via var().
   If your master already defines :root, omit this file.
   ════════════════════════════════════════════════════════════ */
:root {
	/* ─── COLOR: Primary ─── */
	--au-navy: #003366;
	--au-navy-deep: #001a33;
	--au-navy-mid: #002a48; /* between deep and navy; matches theme-color */
	--au-navy-light: #004080;
	--au-gold: #C6952B;
	--au-gold-light: #E8B84B;
	--au-gold-pale: #FDF5E6;
	/* ─── COLOR: Neutral ─── */
	--au-cream: #FAF8F5;
	--au-stone: #ECEAE4; /* warm light-gray band, a step deeper than cream */
	--au-white: #FFFFFF;
	--au-warm-gray: #6B6560;
	--au-gray-200: #E8E4DF;
	--au-gray-300: #D1CBC4;
	--au-gray-400: #B5AFA8;
	--au-text: #2A2522;
	/* ─── COLOR: Semantic ─── */
	--au-success: #2D7D46;
	--au-warning: #C6952B;
	--au-error: #B83232;
	--au-info: #2868A6;
	/* ─── TYPOGRAPHY ─── */
	--font-display: "IBM Plex Serif", Georgia, "Times New Roman", serif;
	--font-body: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, sans-serif;
	--font-mono: "IBM Plex Mono", "Courier New", monospace;
	/* ─── TYPE SCALE (Major Third — 1.25) ─── */
	--text-xs: 0.75rem; /* 12px */
	--text-sm: 0.875rem; /* 14px */
	--text-base: 1rem; /* 16px */
	--text-md: 1.125rem; /* 18px */
	--text-lg: 1.25rem; /* 20px */
	--text-xl: 1.563rem; /* 25px */
	--text-2xl: 1.953rem; /* ~31px */
	--text-3xl: 2.441rem; /* ~39px */
	--text-4xl: 3.052rem; /* ~49px */
	/* ─── SPACING (8px base) ─── */
	--space-1: 0.25rem; /* 4px */
	--space-2: 0.5rem; /* 8px */
	--space-3: 0.75rem; /* 12px */
	--space-4: 1rem; /* 16px */
	--space-5: 1.5rem; /* 24px */
	--space-6: 2rem; /* 32px */
	--space-8: 3rem; /* 48px */
	--space-10: 4rem; /* 64px */
	--space-12: 5rem; /* 80px */
	--space-16: 6.25rem; /* 100px */
	/* ─── LAYOUT ─── */
	--max-width: 1200px;
	--max-width-narrow: 900px;
	--max-width-text: 700px;
	--gutter: 2.5rem;
	--header-height: 6.75rem; /* approx sticky header height; sticky offsets reference it */
	/* ─── BORDERS & RADII ─── */
	--radius-sm: 4px;
	--radius-md: 8px;
	--radius-lg: 12px;
	--radius-full: 9999px;
	/* ─── SHADOWS ─── */
	--shadow-sm: 0 1px 4px rgba(0,0,0,0.06);
	--shadow-md: 0 4px 16px rgba(0,0,0,0.08);
	--shadow-lg: 0 8px 32px rgba(0,0,0,0.10);
	--shadow-xl: 0 16px 48px rgba(0,0,0,0.14);
	/* ─── TRANSITIONS ─── */
	--ease-out: cubic-bezier(0.25, 0.46, 0.45, 0.94);
	--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
	--duration-fast: 150ms;
	--duration-base: 300ms;
	--duration-slow: 500ms;
}

/* ════════════════════════════════════════════════════════════
   fonts.css  ·  self-hosted IBM Plex  (woff2 in /code/2027/fonts/)
   Family names match the --font-* tokens. Only the weights/styles the
   system actually uses are declared (Sans 400/600/700 + italic, Serif
   400/600 + italic, Mono 400). font-display: swap to avoid FOIT.
   ════════════════════════════════════════════════════════════ */
@font-face {
	font-family: "IBM Plex Sans";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-400.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Sans";
	font-style: italic;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-400-italic.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Sans";
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-600.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Sans";
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-700.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Serif";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-serif-400.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Serif";
	font-style: italic;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-serif-400-italic.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Serif";
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-serif-600.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Mono";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-mono-400.woff2") format("woff2");
}
/* ════════════════════════════════════════════════════════════
   base.css  ·  reset + bare-element typography
   Depends on: tokens.css
   GLOBAL (clean shell — no Bootstrap to coexist with, so no .au
   scope). On-brand defaults for raw HTML so CKEditor content reads
   correctly with no extra classes. Component classes layer on top.
   ════════════════════════════════════════════════════════════ */
*, *::before, *::after {
	box-sizing: border-box;
}

* {
	margin: 0;
}

html {
	-webkit-text-size-adjust: 100%;
	scroll-behavior: smooth;
}

img, picture, svg, video {
	display: block;
	max-width: 100%;
	height: auto;
}

input, button, textarea, select {
	font: inherit;
	color: inherit;
}

body {
	font-family: var(--font-body);
	font-size: var(--text-base);
	line-height: 1.6;
	color: var(--au-text);
	background: var(--au-white);
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	/* sticky footer: the page is a full-viewport-tall column so that on short
	   pages the footers (dept pre-footer + global site footer) settle at the
	   bottom of the screen instead of floating mid-viewport. The <main> content
	   grows to absorb the slack; header/footers keep their natural height.
	   Works with the sticky header (sticky positioning is unaffected by the
	   column flex context). */
	display: flex;
	flex-direction: column;
	min-height: 100vh;
	min-height: 100dvh; /* progressive: exclude mobile browser chrome where supported */
}

/* the content area is the only flex child that grows; everything else
   (header, dept-footer, site-footer, 0-height scripts) keeps its size. */
body > main {
	flex: 1 0 auto;
}

h1, h2, h3, h4, h5, h6 {
	font-family: var(--font-display);
	color: var(--au-navy);
	line-height: 1.2;
	font-weight: 400;
	text-wrap: balance;
}

/* one weight across all levels — hierarchy comes from size (+ the serif/navy
   vs sans/gray contrast against body), not weight. Keeping every heading at the
   light display weight avoids a smaller heading (h4) reading as bolder than a
   larger one (h3). Components that want a heavier label (.card-title,
   .footer-col h3, .mega-col h4) set their own font-weight. */
h1 {
	font-size: var(--text-4xl);
}

h2 {
	font-size: var(--text-3xl);
}

h3 {
	font-size: var(--text-2xl);
}

h4 {
	font-size: var(--text-xl);
}

h5 {
	font-size: var(--text-lg);
}

h6 {
	font-size: var(--text-base);
	letter-spacing: 0.5px;
}

p {
	line-height: 1.7;
}

p + p {
	margin-top: var(--space-4);
}

a {
	color: var(--band-link, var(--au-navy-light));
	text-decoration: underline;
	text-underline-offset: 2px;
	text-decoration-thickness: 1px;
	transition: color var(--duration-fast) var(--ease-out);
}

/* buttons manage their own hover colors — exclude them so the link-hover gold
   doesn't wash out .btn labels (esp. .btn-primary on its gold background). */
a:not(.btn):hover {
	color: var(--band-link-hover, var(--au-gold));
}

strong, b {
	font-weight: 700;
}

em, i {
	font-style: italic;
}

small {
	font-size: var(--text-sm);
}

ul, ol {
	padding-left: var(--space-5);
	line-height: 1.7;
}

li + li {
	margin-top: var(--space-2);
}

blockquote {
	border-left: 3px solid var(--au-gold);
	padding-left: var(--space-5);
	margin: var(--space-6) 0;
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-navy);
	font-style: italic;
}

hr {
	border: 0;
	border-top: 1px solid var(--au-gray-200);
	margin: var(--space-8) 0;
}

code, kbd, samp {
	font-family: var(--font-mono);
	font-size: 0.9em;
	background: var(--au-cream);
	padding: 0.15em 0.4em;
	border-radius: var(--radius-sm);
}

pre {
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.88);
	padding: var(--space-4) var(--space-5);
	border-radius: var(--radius-md);
	overflow-x: auto;
	font-family: var(--font-mono);
	font-size: var(--text-sm);
	line-height: 1.6;
	margin: var(--space-5) 0;
}

pre code {
	background: none;
	padding: 0;
	border-radius: 0;
	font-size: inherit;
	color: inherit;
}

/* visually-hidden (screen-reader only) */
.sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* ─── icon link list ───
   A tidy, self-columning list of icon + link rows for rich-text bodies
   (accordion panels, page content). Authors add class="link-list" to a <ul>;
   each <li> holds a FontAwesome <i> + an <a>. The icon takes the band accent
   (gold on dark / light bands); the link colour comes from the surrounding
   context (e.g. gold inside a dark-band accordion). Collapses to one column
   on narrow widths. Items without an icon still align cleanly. */
.link-list {
	list-style: none;
	margin: var(--space-4) 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
	gap: var(--space-3) var(--space-6);
}

.link-list li {
	margin: 0;
	display: flex;
	align-items: baseline;
	gap: var(--space-3);
}

.link-list li > i {
	flex: none;
	width: 1.15em;
	text-align: center;
	color: var(--band-accent, var(--au-gold));
}

/* ════════════════════════════════════════════════════════════
   layout.css  ·  section bands + the flexible grid
   Depends on: tokens.css

   .section   full-bleed band (vertical rhythm + bg variant)
   .section-inner   centered max-width column
   .grid      flex-wrap; any number of children flow and fill —
              the renderers never compute a column count.
   ════════════════════════════════════════════════════════════ */
/* ─── SECTION ─── */
.section {
	padding: var(--space-12) var(--gutter);
}

/* Same-color bands abut: collapse the doubled seam to a single, continuous
   gap (not zero — content must not collide). Both sides trim to --space-6,
   so a same-color seam reads as one band with ~64px between its content. */
.section--flush-top {
	padding-top: var(--space-6);
}

.section--flush-bottom {
	padding-bottom: var(--space-6);
}

.section-inner {
	max-width: var(--max-width);
	margin-inline: auto;
}

.section-head {
	margin-bottom: var(--space-4);
}

.section-label {
	font-size: var(--text-xs);
	letter-spacing: 3px;
	text-transform: uppercase;
	color: var(--band-eyebrow, var(--au-gold));
	font-weight: 600;
	margin-bottom: var(--space-3);
}

.section-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 3.5vw, var(--text-3xl));
	color: var(--band-heading, var(--au-navy));
	line-height: 1.2;
}

.section-desc {
	font-size: var(--text-md);
	color: var(--band-body, var(--au-warm-gray));
	max-width: var(--max-width-text);
	line-height: 1.7;
	margin-top: var(--space-4);
}

/* ─── BACKGROUND BANDS ───────────────────────────────────────────
   The CMS background_color field supplies the modifier name → the author
   picks from this palette. Light bands set only a background; DARK bands
   also publish a set of `--band-*` CONTEXT TOKENS that components read
   (headings, body, cards, hairlines, /code/2027/…). That's the whole point: a
   component styles a dark band once, through the tokens, so adding a new
   band is a single definition here — not an edit in every component.

   Palette:
     light  →  (white default) · cream · stone(gray) · gold
     dark   →  navy(deep) · navy-mid · navy-bright
   Legacy .ct values are aliased onto the nearest new band (delete the
   alias selectors once the .ct dropdowns are trimmed to the names above). */
/* light bands */
.section--cream,
.section--ecru-white {
	background: var(--au-cream);
}

.section--stone,
.section--gray,
.section--seashell-gray,
.section--cararra-gray,
.section--cararra-gray-textured {
	background: var(--au-stone);
}

.section--gold {
	background: var(--au-gold-pale);
}

/* dark bands — background + the shared context tokens */
.section--navy {
	background: var(--au-navy-deep);
}

.section--navy-mid {
	background: var(--au-navy-mid);
}

.section--navy-bright {
	background: var(--au-navy);
}

.section--nile-blue {
	background: var(--au-navy-deep);
}

/* chathams-blue was the LIGHTER legacy blue (#143E6E) — keep it lighter (maps to
   --au-navy #003366) rather than collapsing it into the darkest band. */
.section--chathams-blue {
	background: var(--au-navy);
}

.section--fiord-blue,
.section--fiord-blue-textured {
	background: var(--au-navy-deep);
}

.section--navy,
.section--navy-mid,
.section--navy-bright,
.section--nile-blue,
.section--chathams-blue,
.section--fiord-blue,
.section--fiord-blue-textured {
	color: rgba(255, 255, 255, 0.85);
	--band-heading: var(--au-white);
	--band-body: rgba(255, 255, 255, 0.66);
	--band-eyebrow: var(--au-gold-light);
	--band-accent: var(--au-gold-light);
	/* hover/expanded surface (accordion header): a subtle translucent-white lift.
	   (A gold wash muddied against the blue band.) */
	--band-link: var(--au-gold-light);
	--band-link-hover: var(--au-white);
	--band-raised: rgba(255, 255, 255, 0.09);
	--band-hairline: rgba(255, 255, 255, 0.12);
	--band-quote: rgba(255, 255, 255, 0.82);
	--band-card-bg: rgba(255, 255, 255, 0.04);
	--band-card-border: rgba(255, 255, 255, 0.1);
	--band-card-border-w: 0;
	--band-card-shadow: 0 2px 6px rgba(0, 0, 0, 0.25), 0 14px 32px rgba(0, 0, 0, 0.28);
	--band-card-shadow-hover: 0 6px 16px rgba(0, 0, 0, 0.3), 0 22px 48px rgba(0, 0, 0, 0.36);
	--band-icon-bg: rgba(255, 255, 255, 0.08);
	--band-icon-fg: var(--au-gold-light);
}

/* ─── GRID — flexible flex (unknown item counts) ─── */
.grid {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-5);
}

.grid > * {
	flex: 1 1 280px;
}

/* compact variant — a tighter flex min so cards pack closer and 3-up holds
   across a sidebar content column, resizing smoothly (the default 280px only
   fits two). Works as a section-level token (Custom Class "compact") or
   directly on the grid (class="grid grid--compact"). */
.grid--compact > * {
	flex: 1 1 200px;
}

.compact .grid > * {
	flex: 1 1 200px;
}

/* ─── SPLIT — asymmetric two-column feature rows ─────────────────
   For image-on-one-side / text-on-the-other rows the flex grid can't do,
   because it sizes every child equally. A SECTION token (typed in the section's
   Custom Class field) swaps the grid to a fixed two-track layout with a wide +
   narrow split:
     split-2-3   → 2fr 3fr   (left narrower, right wider)
     split-3-2   → 3fr 2fr   (left wider,   right narrower)
   Which side is the image is just the ORDER of the two cards — put the image
   card first for image-left, second for image-right; pick the token that makes
   the image the size you want. Rows are vertically centered so a short text
   block sits centered against a taller image. Built for TWO cards; a third
   would wrap to a new row. Collapses to a single stacked column on narrow
   screens. The token also lands as a class on the section (via custom_class). */
.split-2-3 .grid,
.split-3-2 .grid {
	display: grid;
	gap: var(--space-8);
	align-items: center;
}

.split-2-3 .grid {
	grid-template-columns: 2fr 3fr;
}

.split-3-2 .grid {
	grid-template-columns: 3fr 2fr;
}

/* an image-only card defaults to align-self:start (top-pinned); in a split we
   want it centered in the row like everything else */
.split-2-3 .card--media,
.split-3-2 .card--media {
	align-self: center;
}

/* pin both columns to the top instead of centering — combine with the split
   token when the text is longer than the image (e.g. split-3-2 split-top) */
.split-top .grid {
	align-items: start;
}

.split-top .card--media {
	align-self: start;
}

@media (max-width: 760px) {
	.split-2-3 .grid,
	.split-3-2 .grid {
		grid-template-columns: 1fr;
	}
	.split-2-3 .card--media,
	.split-3-2 .card--media {
		max-width: 400px;
		width: 100%;
		margin-inline: auto;
	}
}
/* ─── TEXT SIZE — section-level overrides ─────────────────────
   Drop into a section's Custom Class field to bump the text in
   that row above the card-text default (14px).
     standard  → 16px body text (comfortable reading for full-width prose)
     lead      → 20px body, 31px titles, 1.7 line-height (intro/welcome) */
.standard .card-text {
	font-size: var(--text-base);
	line-height: 1.7;
}

.lead .card-title {
	font-size: var(--text-2xl);
	line-height: 1.2;
	margin-bottom: var(--space-3);
}

.lead .card-text {
	font-size: var(--text-lg);
	line-height: 1.7;
}

.lead .card-text :is(h1, h2, h3) {
	font-size: var(--text-xl);
}

.lead .card-text :is(h4, h5, h6) {
	font-size: var(--text-md);
}

.page-main p.lead {
	font-size: var(--text-lg);
	line-height: 1.7;
}

/* ════════════════════════════════════════════════════════════
   card.css  ·  the card  (image / eyebrow / title / text / cta)
   Depends on: tokens.css
   The single card primitive used by columns, bios, feeds, etc.
   ════════════════════════════════════════════════════════════ */
.card {
	display: flex;
	flex-direction: column;
	background: var(--au-white);
	/* border + shadow come from the band's context tokens: on a dark band the
	   border width collapses to 0 (reclaims the 1px strip that leaked the white
	   card bg around the image) and the shadow deepens. Light bands fall back to
	   the hairline + soft shadow. */
	border: var(--band-card-border-w, 1px) solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	box-shadow: var(--band-card-shadow, var(--shadow-sm));
	overflow: hidden;
	transition: box-shadow var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out);
	/* White-surface cards reset band link tokens; plain cards (transparent,
	   band-colored) inherit the section's tokens instead — see below. */
}

.card:hover {
	box-shadow: var(--band-card-shadow-hover, var(--shadow-md));
	border-color: var(--band-card-border, var(--au-gray-300));
	transform: translateY(-2px);
}

.card:not(.card--plain) {
	--band-link: var(--au-navy-light);
	--band-link-hover: var(--au-gold);
}

.card-img-link {
	display: block;
	cursor: pointer;
}

.card-img {
	width: 100%;
	aspect-ratio: 16/9;
	overflow: hidden;
	-o-object-fit: cover;
	   object-fit: cover;
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	/* a linked image is a button, not text — stop Safari showing the text-select
	   I-beam (and dragging) when the image has words baked into it. */
	-webkit-user-select: none;
	-moz-user-select: none;
	     user-select: none;
	-webkit-user-drag: none;
}

/* icon lead — icon-led cards (services / features) in place of a photo */
.card-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 3.25rem;
	height: 3.25rem;
	border-radius: var(--radius-md);
	background: var(--au-gold-pale);
	color: var(--au-gold);
	font-size: var(--text-xl);
}

.card-body {
	display: flex;
	flex-direction: column;
	gap: var(--space-3);
	padding: var(--space-6);
	flex: 1;
}

.card-eyebrow {
	font-size: var(--text-xs);
	letter-spacing: 1px;
	text-transform: uppercase;
	color: var(--au-gold);
	font-weight: 600;
	font-style: italic;
}

.card-title {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-navy);
	font-weight: 600;
	line-height: 1.25;
}

.card-title a {
	color: inherit;
	text-decoration: none;
}

.card-title a:hover {
	color: var(--au-navy-light);
}

.card-text {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.7;
}

/* Authored rich text — the CKEditor `content` field lands whole inside
   .card-text, and base.css resets every margin to 0. Without rhythm here an
   authored <h3> sits flush against the paragraph above it and the block reads
   as one lump (.page-main re-establishes the same rhythm for page content;
   these are the card-scale equivalents — tighter, because a card is a much
   narrower measure).

   Heading SIZE matters too: base.css gives h3 --text-2xl, which is larger than
   the card's own .card-title (--text-lg), so an authored heading was
   out-shouting the title it sits under. Stepped down so the hierarchy reads
   card-title > authored heading > body.

   First child sits flush to the top — .card-body's flex gap already spaces it
   from the title above. */
.card-text > :first-child {
	margin-top: 0;
}

.card-text :is(p, ul, ol, table, blockquote, figure) {
	margin-top: var(--space-3);
}

.card-text :is(h1, h2, h3, h4, h5, h6) {
	margin-top: var(--space-5);
	font-family: var(--font-display);
	font-weight: 600;
	line-height: 1.25;
	color: var(--au-navy);
}

/* Heading scale for authored card text. base.css sizes headings for a full
   page (h3 is --text-2xl / 31px), which inside a card out-shouts the
   .card-title above it. Rescaled to sit between the card title (--text-lg /
   20px) and the body copy (--text-sm / 14px) — but each level still steps, so
   choosing h2 vs h3 vs h4 continues to mean something. h5/h6 run out of room
   on size alone in a 14–20px band, so they separate by weight and letterform
   instead, the same trick base.css uses for h6. */
.card-text h1 {
	font-size: var(--text-lg);
}

.card-text h2 {
	font-size: var(--text-md);
}

.card-text h3 {
	font-size: var(--text-base);
}

.card-text h4 {
	font-size: var(--text-sm);
	font-weight: 700;
}

.card-text h5 {
	font-size: var(--text-sm);
}

.card-text h6 {
	font-size: var(--text-xs);
	text-transform: uppercase;
	letter-spacing: 0.5px;
}

/* a heading belongs with the text under it — keep that gap tighter */
.card-text :is(h1, h2, h3, h4, h5, h6) + :is(p, ul, ol) {
	margin-top: var(--space-2);
}

.card-cta {
	margin-top: auto;
	align-self: flex-start;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
	text-decoration: none;
}

.card-cta:hover {
	color: var(--au-gold);
}

/* linked card — the whole card is the click target (a "stretched link"), so you
   don't have to hit the link text exactly. The card's link stretches to cover
   it; the pointer cursor follows. (Text selection inside is traded for the full
   click area — expected for a card-as-a-link.) */
.card--linked {
	position: relative;
}

.card--linked :is(.card-img-link, .card-title a, .card-cta)::after {
	content: "";
	position: absolute;
	inset: 0;
}

/* media-only card (image, no body): show the image at its natural ratio with all
   four corners rounded, and don't stretch to a taller sibling (which would leave
   an un-rounded strip of card below the image). */
.card--media {
	align-self: start;
}

/* no placeholder gradient here — image-only cards are usually transparent logos
   or graphics, and the navy fill would show through and box them in. Let the
   card/band behind show instead. (Photo cards keep the gradient as a loading/
   fallback backdrop.) */
.card--media .card-img {
	aspect-ratio: auto;
	height: auto;
	background: none;
}

/* portrait section token (Custom Class "portrait") — for rows of people: the
   default 16:9 crop slices a headshot through the face, so crop to 4:5 and
   anchor to the top to keep heads in frame. Also works on a single card. */
.portrait .card-img,
.card--portrait .card-img {
	aspect-ratio: 4/5;
	-o-object-position: top;
	   object-position: top;
}

/* plain variant — no fill (e.g. on a colored band). overflow:visible because the
   card has no fill/border to clip, the image rounds itself, and the rounded-corner
   clip was cutting descenders (the "g") off a caption sitting flush to the bottom. */
.card--plain {
	background: transparent;
	box-shadow: none;
	border: 0;
	overflow: visible;
}

.card--plain:hover {
	transform: none;
	box-shadow: none;
	border: 0;
}

/* on a plain card (no fill / no outline) the image is a standalone tile — round
   ALL four corners (the card's clip only rounds the top, since the body sits
   below), and pull the caption flush-left under it with tight top padding. */
.card--plain .card-img {
	border-radius: var(--radius-lg);
}

.card--plain .card-body {
	padding: var(--space-3) 0 0;
}

/* plain cards sit directly on the band, so their text follows the band tokens */
.card--plain .card-title {
	color: var(--band-heading, var(--au-navy));
}

.card--plain .card-text {
	color: var(--band-body, var(--au-warm-gray));
}

/* headings authored inside the rich-text content follow the band too — otherwise
   an <h2> in a plain card stays navy and disappears on a dark band. */
.card--plain .card-text :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* ════════════════════════════════════════════════════════════
   feature.css  ·  full-bleed feature blocks — page hero + cover band
   Depends on: tokens.css, layout.css (.section / .section-inner)
   ════════════════════════════════════════════════════════════ */
/* ─── HERO — page-top banner (image or background video) ─── */
.hero {
	position: relative;
	/* was 70vh — grew unbounded on tall desktops. Cap it: a sensible floor, a
	   modest viewport-relative preference, and a ceiling so big screens don't get
	   a huge band of empty image. Content still expands it if it needs to. */
	min-height: clamp(320px, 46vh, 460px);
	display: flex;
	align-items: flex-end;
	background: var(--au-navy-deep) center/cover no-repeat;
	color: var(--au-white);
	overflow: hidden;
}

.hero::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(transparent 20%, rgba(0, 26, 51, 0.75) 70%, rgba(0, 26, 51, 0.9));
}

.hero-inner {
	position: relative;
	z-index: 2;
	width: 100%;
	max-width: var(--max-width);
	margin-inline: auto;
	padding: var(--space-12) var(--gutter);
}

.hero-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-3xl), 6vw, var(--text-4xl));
	color: var(--au-white);
	line-height: 1.1;
	max-width: 18ch;
	text-shadow: 0 2px 12px rgba(0, 20, 40, 0.6);
}

.hero-caption {
	margin-top: var(--space-5);
	max-width: var(--max-width-text);
	font-size: var(--text-md);
	color: rgba(255, 255, 255, 0.8);
	line-height: 1.7;
}

.hero-contact {
	margin-top: var(--space-4);
	font-size: var(--text-sm);
	color: rgba(255, 255, 255, 0.7);
}

.hero-contact a {
	color: var(--au-gold-light);
}

/* ─── HERO ABOVE — shorter banner for interior pages with sidebar below ─── */
.hero--above {
	min-height: clamp(200px, 30vh, 340px);
}

.hero--above .hero-title {
	font-size: clamp(var(--text-2xl), 5vw, var(--text-3xl));
}

/* ─── HERO SPLIT — text left, photo card right, solid navy ─── */
.hero--split {
	background-image: none !important;
	min-height: auto;
}

.hero--split::after {
	display: none;
}

.hero--split .hero-inner {
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: center;
	gap: var(--space-10);
}

.hero--split .hero-title {
	text-shadow: none;
}

.hero--split .hero-media img {
	width: 100%;
	aspect-ratio: 4/3;
	-o-object-fit: cover;
	   object-fit: cover;
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-lg);
}

@media (max-width: 760px) {
	.hero--split .hero-inner {
		grid-template-columns: 1fr;
		gap: var(--space-6);
	}
	.hero--split .hero-media {
		order: -1;
	}
	.hero--split .hero-media img {
		aspect-ratio: 16/9;
	}
}
/* ─── COVER — full-bleed photo/video band with a content panel ─── */
.section--cover {
	position: relative;
	display: flex;
	align-items: center;
	min-height: 60vh;
	padding-block: var(--space-12);
	background: var(--au-navy) center/cover no-repeat;
	color: var(--au-white);
	overflow: hidden;
}

.section--cover::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(90deg, rgba(0, 26, 51, 0.8), rgba(0, 26, 51, 0.2));
}

/* No content panel → no overlay; let the photo show unobscured. */
.section--cover:not(:has(.cover-panel))::after {
	display: none;
}

/* width:100% stops the flex band from collapsing .section-inner down to the
   panel's width (which is what centres it) — instead it fills the content column
   (max-width, centred), giving the panel room to shift left/right within it and
   aligning those edges with the rest of the page. */
.section--cover > .section-inner {
	position: relative;
	z-index: 2;
	width: 100%;
}

.cover-panel {
	max-width: 540px;
	margin-inline: auto;
}

.cover-panel :is(h1, h2, h3, h4, h5, h6) {
	color: var(--au-white);
}

/* content links on the cover's dark ground — light gold, no default underline
   (the navy + underline default is unreadable on the image). This is the happy
   default, so authors don't need to hand-color every link. */
.cover-panel a {
	color: var(--au-gold-light);
	text-decoration: none;
}

.cover-panel a:hover {
	text-decoration: underline;
}

.cover-panel .card-cta {
	display: inline-block;
	margin-top: var(--space-4);
}

/* ── Feature-link pattern: <a><strong>Heading</strong><em>Sub-CTA</em></a>
   Works in both the hero caption (.hero-caption) and the cover panel (.cover-panel).
   Styled to match the homepage feature link: dark navy box, serif headline, white sub-line.
   Authors use Bold + Italic in CKEditor and wrap both in a link. */
.hero-caption a:has(> strong),
.cover-panel a:has(> strong) {
	display: inline-block;
	background: rgba(0, 26, 51, 0.82);
	border-left: 3px solid var(--au-gold);
	padding: var(--space-4) var(--space-6);
	color: var(--au-white);
	text-decoration: none;
}

.hero-caption a:has(> strong) > strong,
.cover-panel a:has(> strong) > strong {
	display: block;
	font-family: var(--font-serif);
	font-size: var(--text-xl);
	font-weight: 700;
	line-height: 1.2;
	color: var(--au-white);
}

.hero-caption a:has(> strong) > span,
.hero-caption a:has(> strong) > em,
.cover-panel a:has(> strong) > span,
.cover-panel a:has(> strong) > em {
	display: block;
	margin-top: var(--space-1);
	font-size: var(--text-md);
	font-style: normal;
	color: var(--au-white);
}

.hero-caption a:has(> strong):hover,
.cover-panel a:has(> strong):hover {
	text-decoration: none;
}

.hero-caption a:has(> strong):hover > strong,
.cover-panel a:has(> strong):hover > strong {
	color: var(--au-gold-light);
}

.hero-caption a:has(> strong):hover > span,
.hero-caption a:has(> strong):hover > em,
.cover-panel a:has(> strong):hover > span,
.cover-panel a:has(> strong):hover > em {
	text-decoration: underline;
}

/* CKEditor inserts a <br> between the <strong> and <em>; suppress it since
   both are already display:block. */
.hero-caption a:has(> strong) > br,
.cover-panel a:has(> strong) > br {
	display: none;
}

/* ─── cover overlay alignment ───
   The panel is CENTERED by default. Drop a token into the section's Custom Class
   to shift it to the page's content-column edge; the gradient's dark side follows
   so the overlay text stays legible over it:
     cover-left   → panel on the LEFT  (gradient already darkens the left)
     cover-right  → panel on the RIGHT (gradient flips to darken the right)
   Panel width, vertical centering and text-alignment are unchanged — only the
   horizontal placement (and, for the right, the gradient direction) switch. */
.section--cover.cover-left .cover-panel {
	margin-inline: 0 auto;
}

.section--cover.cover-right .cover-panel {
	margin-inline: auto 0;
}

.section--cover.cover-right::after {
	background: linear-gradient(270deg, rgba(0, 26, 51, 0.8), rgba(0, 26, 51, 0.2));
}

/* ─── cover gradient backgrounds ─────────────────────────────
   Drop a gradient token into Custom Class to give the cover a rich
   background without needing a photo. If the author ALSO uploads a
   photo, the inline background-image overrides the CSS gradient
   naturally — no !important, no renderer change.
     cover-navy    → deep diagonal navy sweep (brand default)
     cover-ocean   → navy-to-teal, cooler and more dynamic
     cover-forest  → deep green
     cover-gold    → navy-to-gold, warm and inviting
     cover-earth   → navy-to-brown, grounded
     cover-sunset  → navy-to-orange, bold and energetic
   The scrim overlay is suppressed for gradient covers — the gradient
   itself provides enough contrast for white text. */
.section--cover.cover-navy,
.section--cover.cover-ocean,
.section--cover.cover-forest,
.section--cover.cover-gold,
.section--cover.cover-earth,
.section--cover.cover-sunset {
	background-color: var(--au-navy-deep);
}

.section--cover.cover-navy::after,
.section--cover.cover-ocean::after,
.section--cover.cover-forest::after,
.section--cover.cover-gold::after,
.section--cover.cover-earth::after,
.section--cover.cover-sunset::after {
	background: none;
}

.section--cover.cover-navy {
	background-image: linear-gradient(135deg, #001a33 0%, #003366 50%, #004a6e 100%);
}

.section--cover.cover-ocean {
	background-image: linear-gradient(135deg, #001a33 0%, #0a3d62 40%, #1e5f74 100%);
}

.section--cover.cover-forest {
	background-image: linear-gradient(135deg, #0a1f15 0%, #1b4332 50%, #2d6a4f 100%);
}

.section--cover.cover-gold {
	background-image: linear-gradient(135deg, #001a33 0%, #003366 40%, #C6952B 100%);
}

.section--cover.cover-earth {
	background-image: linear-gradient(135deg, #001a33 0%, #4a3728 50%, #8B4513 100%);
}

.section--cover.cover-sunset {
	background-image: linear-gradient(135deg, #001a33 0%, #003366 35%, #c45e1a 100%);
}

/* ─── COVER HERO SPLIT — angled hero with floating links card ────
   Token: "cover-hero-split" in the section's Custom Class field.
   Turns a photo_wide cover into a full-bleed hero with a diagonal-
   edged navy text panel on the left (badge overflows into the photo)
   and a floating rounded navy links card on the right. The background
   image fills the entire section; the diagonal is a clipped ::before
   on .cover-text so content (especially the badge) can overflow it.
   Stacks on mobile with the text overlaying the photo. */
/* --- section overrides --- */
.cover-hero-split.section--cover {
	padding: 0;
	min-height: auto;
	align-items: stretch;
}

.cover-hero-split.section--cover::after {
	display: none;
}

.cover-hero-split > .section-inner {
	max-width: none;
	padding: 0;
}

/* --- grid --- */
.cover-hero-split .cover-panel {
	max-width: none;
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: stretch;
	min-height: 420px;
}

/* --- left panel: angled light background via ::before --- */
.cover-hero-split .cover-text {
	position: relative;
	padding: var(--space-10) 16% var(--space-10) clamp(var(--space-8), 5vw, var(--space-16));
	display: flex;
	flex-direction: column;
	justify-content: center;
	color: var(--au-navy-deep);
	z-index: 2;
}

.cover-hero-split .cover-text::before {
	content: "";
	position: absolute;
	inset: 0;
	background: var(--au-cream);
	clip-path: polygon(0 0, 100% 0, 82% 100%, 0 100%);
	z-index: -1;
}

/* --- right panel: floating card --- */
.cover-hero-split .cover-links {
	align-self: center;
	justify-self: end;
	background: rgba(0, 20, 46, 0.92);
	border-radius: 6px;
	padding: var(--space-8) var(--space-6);
	max-width: 380px;
	margin: var(--space-6) clamp(var(--space-6), 3vw, var(--space-12));
	color: var(--au-white);
	z-index: 2;
}

/* --- eyebrow --- */
.cover-hero-split .cover-hero-eyebrow {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--au-navy);
	margin-bottom: var(--space-5);
}

.cover-hero-split .cover-hero-eyebrow::before {
	content: "";
	display: block;
	width: 48px;
	height: 3px;
	background: var(--au-gold);
	margin-bottom: var(--space-3);
}

/* --- heading + badge row --- */
.cover-hero-split .cover-hero-heading {
	display: flex;
	align-items: center;
	gap: var(--space-5);
}

.cover-hero-split .cover-hero-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 3.5vw, 3.5rem);
	color: var(--au-navy-deep);
	line-height: 1.1;
	margin: 0;
}

.cover-hero-split .cover-hero-subtitle {
	font-size: var(--text-xs);
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--au-navy);
	margin-top: var(--space-2);
}

.cover-hero-split .cover-hero-badge {
	width: clamp(100px, 12vw, 170px);
	height: auto;
	flex-shrink: 0;
}

/* --- tagline --- */
.cover-hero-split .cover-hero-tagline {
	font-family: var(--font-serif);
	font-size: var(--text-lg);
	font-style: italic;
	color: var(--au-warm-gray);
	line-height: 1.6;
	margin-top: var(--space-5);
}

/* --- links card content --- */
.cover-hero-split .cover-links h2 {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-white);
	margin-bottom: var(--space-5);
	padding-bottom: var(--space-3);
	border-bottom: 2px solid var(--au-gold);
}

.cover-hero-split .cover-hero-nav {
	list-style: none;
	padding: 0;
	margin: 0;
}

.cover-hero-split .cover-hero-nav li + li {
	border-top: 1px solid rgba(255, 255, 255, 0.12);
}

.cover-hero-split .cover-hero-nav a {
	display: flex;
	align-items: center;
	padding: var(--space-3) var(--space-2);
	color: var(--au-white);
	text-decoration: none;
	font-size: var(--text-sm);
	transition: background 0.2s;
}

.cover-hero-split .cover-hero-nav a:hover {
	background: rgba(255, 255, 255, 0.06);
	text-decoration: none;
}

.cover-hero-split .cover-hero-nav a::before {
	content: "";
	width: 7px;
	height: 7px;
	border-right: 2px solid var(--au-gold);
	border-top: 2px solid var(--au-gold);
	transform: rotate(45deg);
	flex-shrink: 0;
	margin-right: var(--space-3);
}

/* --- tablet --- */
@media (max-width: 980px) {
	.cover-hero-split .cover-panel {
		min-height: 360px;
	}
	.cover-hero-split .cover-text {
		padding-right: 20%;
	}
	.cover-hero-split .cover-text::before {
		clip-path: polygon(0 0, 100% 0, 85% 100%, 0 100%);
	}
	.cover-hero-split .cover-links {
		max-width: 320px;
		padding: var(--space-6) var(--space-5);
	}
	.cover-hero-split .cover-hero-badge {
		width: clamp(80px, 10vw, 120px);
	}
}
/* --- mobile: text over photo, angled reveal, links below --- */
@media (max-width: 760px) {
	.cover-hero-split .cover-panel {
		grid-template-columns: 1fr;
		min-height: auto;
	}
	.cover-hero-split .cover-text {
		padding: var(--space-8) var(--gutter) var(--space-16) var(--gutter);
	}
	.cover-hero-split .cover-text::before {
		background: rgba(255, 253, 247, 0.94);
		clip-path: polygon(0 0, 100% 0, 100% 82%, 0 100%);
	}
	.cover-hero-split .cover-links {
		max-width: none;
		margin: 0;
		margin-top: var(--space-10);
		border-radius: 0;
		justify-self: stretch;
		align-self: stretch;
		padding: var(--space-8) var(--gutter);
	}
	.cover-hero-split .cover-hero-heading {
		gap: var(--space-4);
	}
	.cover-hero-split .cover-hero-badge {
		width: 90px;
	}
}
/* shared full-bleed background video (hero + cover) */
.feature-video {
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
}

.feature-video iframe {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 177.78vh;
	min-width: 100%;
	height: 56.25vw;
	min-height: 100%;
	border: 0;
}

/* ─── optional hero extras (var-gated in components/hero.tt) ───
   Used by the department template: a gold eyebrow above the title and a
   CTA pair below the lead. Absent on pages that don't set them, so the
   main-site hero is unchanged. */
.hero-eye {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--au-gold);
	font-weight: 600;
	margin-bottom: var(--space-3);
}

.hero-ctas {
	display: flex;
	gap: var(--space-4);
	flex-wrap: wrap;
	margin-top: var(--space-8);
}

/* Ghost button on the hero's dark ground — the demo's refined treatment:
   quiet by default (translucent border, dimmed text), and on hover it lifts
   with a faint fill and a full gold outline. Scoped to .hero-ctas so it
   overrides the light-ground base .btn-ghost (gold text) without touching it
   elsewhere. */
.hero-ctas .btn-ghost {
	background: transparent;
	color: rgba(255, 255, 255, 0.75);
	border-color: rgba(255, 255, 255, 0.3);
}

.hero-ctas .btn-ghost:hover {
	background: rgba(255, 255, 255, 0.08);
	border-color: var(--au-gold);
	color: var(--au-white);
}

/* ════════════════════════════════════════════════════════════
   page.css  ·  interior page layout — side nav + content
   Depends on: tokens.css (and chrome.css for .nav-tree styling)
   Used by department content pages: a sticky side-nav column beside
   the main CKEditor body. Stacks to one column on narrow screens.
   ════════════════════════════════════════════════════════════ */
.page-layout {
	max-width: var(--max-width);
	margin-inline: auto;
	padding: var(--space-10) var(--gutter);
	display: grid;
	grid-template-columns: 240px minmax(0, 1fr);
	gap: var(--space-10);
	align-items: start;
}

/* Sticky under the header, but capped to the viewport so a tall menu scrolls
   inside itself instead of hiding its lower items below the fold (a sticky box
   doesn't scroll on its own — without this cap you'd have to scroll the whole
   page to reach the bottom links). */
.page-sidebar {
	position: sticky;
	top: calc(var(--header-height) + var(--space-3));
	max-height: calc(100vh - var(--header-height) - var(--space-6));
	overflow-y: auto;
	overscroll-behavior: contain;
	/* hidden until hover so a tall nav doesn't show a scrollbar on load */
	scrollbar-width: none; /* Firefox */
	scrollbar-color: var(--au-gray-300) transparent;
}

.page-sidebar:hover {
	scrollbar-width: thin;
}

.page-sidebar::-webkit-scrollbar {
	width: 0;
}

.page-sidebar:hover::-webkit-scrollbar {
	width: 6px;
}

.page-sidebar::-webkit-scrollbar-track {
	background: transparent;
}

.page-sidebar::-webkit-scrollbar-thumb {
	background: var(--au-gray-300);
	border-radius: 3px;
}

.page-sidebar::-webkit-scrollbar-thumb:hover {
	background: var(--au-gray-400);
}

/* optional "« Parent unit" link above the dept name (sidebar_backlink hook) */
.sidebar-back {
	display: block;
	padding: 0 var(--space-3) var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	text-decoration: none;
}

.sidebar-back:hover,
.sidebar-back:focus-visible {
	color: var(--au-navy);
	text-decoration: underline;
}

/* optional button row under the hero on full-width pages (au_main.wrap page_links hook) */
.page-links {
	padding: var(--space-6) var(--gutter) 0;
}

.page-links-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2) var(--space-3);
}

.page-dept {
	font-family: var(--font-display);
	font-size: var(--text-md);
	color: var(--au-navy);
	font-weight: 600;
	line-height: 1.3;
	padding: 0 var(--space-3) var(--space-4);
	margin-bottom: var(--space-3);
	border-bottom: 1px solid var(--au-gray-200);
}

/* ─── page content rhythm (the column holds raw CKEditor body) ─── */
.page-main {
	min-width: 0;
}

/* page title — a short gold accent rule marks it as the page header */
.page-main h1 {
	font-size: var(--text-4xl);
	line-height: 1.1;
	position: relative;
	padding-bottom: var(--space-4);
	margin-bottom: var(--space-5);
}

.page-main h1::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	width: 2.5rem;
	height: 3px;
	background: var(--au-gold);
	border-radius: 2px;
}

/* content headings — stepped down one level from the display scale so they
   read as inline section dividers, not banner-sized titles */
.page-main h2 {
	font-size: var(--text-2xl);
	margin-top: var(--space-10);
}

.page-main h3 {
	font-size: var(--text-xl);
	margin-top: var(--space-8);
}

.page-main h4 {
	font-size: var(--text-lg);
	margin-top: var(--space-6);
}

.page-main h5, .page-main h6 {
	margin-top: var(--space-6);
}

.page-main p, .page-main ul, .page-main ol, .page-main table, .page-main blockquote, .page-main figure, .page-main pre {
	margin-top: var(--space-4);
}

/* Two separate concerns, don't conflate them:
   · the GRID is a self-contained block, so it takes its top gap from the rule
     above like an accordion or a callout does — that is what separates it from
     the paragraph/image/title before it;
   · a grid CELL starts its own column, so whatever leads a cell must sit flush
     at its top. Without this an <h2> drags its 64px page-section margin into
     the cell and drops the heading far below the top of its column.
   Getting only the second half right is what made the headings collide with the
   image above them on a contact page with text_position "above". */
.page-main .grid > * > :first-child {
	margin-top: 0;
}

/* the lead line right under the title reads as a subtitle — keep it close */
.page-main h1 + h2 {
	margin-top: var(--space-5);
	color: var(--au-navy-light);
}

/* a heading targeted by an in-page anchor (e.g. an "on this page" jump-nav)
   clears the sticky header when scrolled to, instead of hiding under it. */
.page-main :is(h1, h2, h3, h4, h5, h6)[id] {
	scroll-margin-top: calc(var(--header-height) + var(--space-4));
}

/* self-contained blocks that sit in the body copy but aren't in the base rhythm
   list — give them the same top gap after a heading/paragraph. */
.page-main .accordion, .page-main .callout, .page-main .cta-callout, .page-main .table-wrap, .page-main .grid, .page-main .video {
	margin-top: var(--space-5);
}

/* first element in the column never adds a top gap (title or feature image) */
.page-main > :first-child, .page-feature + * {
	margin-top: 0;
}

/* self-contained components (cards) manage their own internal spacing via
   .card-body's gap — exempt their children from the page-content rhythm so a
   .card-title (h2) or .card-text (p) doesn't inherit the big section margins */
.page-main .card-body > * {
	margin-top: 0;
}

.page-main .sidenote > :first-child {
	margin-top: 0;
}

/* page feature image (the `pageimage` field) — sits above the content */
.page-feature {
	width: 100%;
	height: auto;
	border-radius: var(--radius-lg);
	margin-bottom: var(--space-8);
}

/* inline carousel in page body — shorter than the base 3/2 default */
.page-main > .carousel {
	aspect-ratio: 16/9;
	margin-bottom: var(--space-8);
}

.page-feature-wrap {
	position: relative;
	border-radius: var(--radius-lg);
	overflow: hidden;
	margin-bottom: var(--space-8);
}

.page-feature-wrap .page-feature {
	margin-bottom: 0;
	border-radius: 0;
}

.page-feature-caption {
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
	padding: var(--space-4) var(--space-5);
	background: linear-gradient(transparent, rgba(0, 31, 63, 0.85));
	color: var(--au-white);
	display: flex;
	align-items: baseline;
	gap: var(--space-3);
	flex-wrap: wrap;
}

.page-feature-caption strong {
	font-family: var(--font-display);
	font-size: var(--text-md);
	font-weight: 600;
}

.page-feature-caption span {
	font-size: var(--text-sm);
	opacity: 0.85;
}

[data-dialog-open].page-feature-wrap {
	cursor: pointer;
}

[data-dialog-open].page-feature-wrap:hover .page-feature-caption {
	background: linear-gradient(transparent, rgba(0, 31, 63, 0.95));
}

/* page-feature-top — carousel or hero image above the sidebar grid,
   constrained to the content max-width (not full-bleed). */
.page-feature-top {
	max-width: var(--max-width);
	margin-inline: auto;
	padding: var(--space-6) var(--gutter) 0;
}

.page-feature-top .carousel-feature {
	border-radius: var(--radius-lg);
	aspect-ratio: 16/9;
}

.page-feature-top .carousel-feature .carousel-slide img {
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.page-feature-banner {
	width: 100%;
	display: block;
	border-radius: var(--radius-lg);
	-o-object-fit: cover;
	   object-fit: cover;
	aspect-ratio: 16/9;
}

/* ─── content-advanced: sections inside the content column ───
   When content_advanced.dt renders sections in .page-main the full-bleed
   section bands live inside the content column — backgrounds span the
   column width, .section-inner handles inner padding. Vertical padding is
   tightened from the full-width --space-12 (80px) to --space-8 (40px) so
   the bands don't overwhelm the narrower column. */
.page-main > .carousel {
	margin-bottom: var(--space-6);
}

.page-main > .section {
	padding-block: var(--space-8);
	padding-inline: 0;
}

.page-main > .section .section-inner {
	max-width: none;
}

.page-main > .section--flush-top {
	padding-top: var(--space-4);
}

.page-main > .section--flush-bottom {
	padding-bottom: var(--space-4);
}

.page-main > .section:first-child,
.page-main > .carousel + .section,
.page-main > .page-feature + .section,
.page-main > h1 + .section {
	padding-top: 0;
}

.page-main > .section:last-child {
	padding-bottom: var(--space-6);
}

/* ─── breadcrumb-dropdown nav (solo layout; chrome/crumbs.tt · js/crumbs.js) ─── */
.crumbs {
	margin-bottom: var(--space-8);
}

.crumbs-list {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	list-style: none;
	margin: 0;
	padding: 0;
	font-size: var(--text-sm);
}

.crumb {
	position: relative;
}

.crumb + .crumb::before {
	content: "›";
	color: var(--au-gray-400);
	margin: 0 var(--space-2);
}

.crumb-link {
	background: none;
	border: 0;
	cursor: pointer;
	font: inherit;
	color: var(--au-navy-light);
	padding: 0;
	text-decoration: none;
}

.crumb-link:hover {
	color: var(--au-gold);
}

.crumb-link[aria-expanded=true] {
	color: var(--au-navy);
	font-weight: 600;
}

.crumb.is-current > .crumb-link, .crumb-static {
	color: var(--au-warm-gray);
}

.crumb-x {
	display: none;
	margin-left: var(--space-2);
	color: var(--au-gray-400);
	font-weight: 400;
}

.crumb-link[aria-expanded=true] .crumb-x {
	display: inline;
}

/* the dropdown */
.crumb-menu {
	position: absolute;
	top: 100%;
	left: 0;
	min-width: 220px;
	list-style: none;
	margin: var(--space-2) 0 0;
	padding: var(--space-2);
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-top: 3px solid var(--au-gold);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-lg);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-6px);
	transition: opacity var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), visibility var(--duration-base);
	z-index: 50;
}

.crumb.open > .crumb-menu {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}

.crumb-menu li {
	margin: 0;
}

.crumb-menu li + li {
	margin-top: 0;
}

.crumb-menu a {
	display: block;
	padding: var(--space-2) var(--space-3);
	color: var(--au-text);
	text-decoration: none;
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
	white-space: nowrap;
}

.crumb-menu a:hover {
	background: var(--au-cream);
	color: var(--au-navy);
}

.crumb-menu a.is-onpath {
	color: var(--au-navy);
	font-weight: 600;
}

.crumb-menu a[aria-current=page] {
	color: var(--au-navy);
	font-weight: 600;
	background: var(--au-gold-pale);
}

.crumb-menu .crumb-self {
	margin-bottom: var(--space-1);
	padding-bottom: var(--space-1);
	border-bottom: 1px solid var(--au-gray-200);
}

/* no-sidebar variant (sidenav == "off") — breadcrumb sits at the top, so it
   needs less headroom than the sidebar layout */
.page-layout--solo {
	grid-template-columns: minmax(0, 1fr);
	max-width: var(--max-width-narrow);
	padding-top: var(--space-5);
}

/* sidebar calls-to-action (academics-default) */
.sidebar-cta {
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	margin-top: var(--space-6);
}

.sidebar-cta .btn {
	width: 100%;
	justify-content: flex-start;
	padding: var(--space-2) var(--space-3);
	font-size: var(--text-xs);
	letter-spacing: 1px;
	border: 0;
	background: var(--au-gray-100);
	color: var(--au-navy);
}

.sidebar-cta .btn:hover {
	background: var(--au-gray-200);
	color: var(--au-navy);
	transform: none;
	box-shadow: none;
}

.sidebar-cta .btn i {
	width: 1.25rem;
	text-align: center;
	color: var(--au-gray-400);
	font-size: var(--text-sm);
}

.sidebar-cta .btn-primary {
	background: var(--au-gold-pale);
	color: var(--au-navy);
}

.sidebar-cta .btn-primary:hover {
	background: var(--au-gold-light);
	color: var(--au-navy);
	box-shadow: none;
}

.sidebar-cta .btn-primary i {
	color: var(--au-gold);
}

.sidebar-cta .btn-primary:hover i {
	color: var(--au-navy);
}

/* ─── mobile section-nav disclosure ───
   Desktop: the toggle is hidden and the tree shows as a normal sticky column.
   Mobile: the whole menu collapses behind the toggle so content leads. */
.sidebar-toggle {
	display: none;
}

@media (max-width: 820px) {
	.page-layout {
		grid-template-columns: 1fr;
		gap: var(--space-6);
		padding-block: var(--space-8);
	}
	.page-sidebar {
		position: static;
		max-height: none;
		overflow: visible;
	}
	.sidebar-toggle {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: var(--space-3);
		width: 100%;
		padding: var(--space-3) var(--space-4);
		background: var(--au-cream);
		border: 1px solid var(--au-gray-200);
		border-radius: var(--radius-md);
		font-size: var(--text-base);
		font-weight: 600;
		color: var(--au-navy);
		cursor: pointer;
	}
	.sidebar-caret {
		width: 9px;
		height: 9px;
		flex-shrink: 0;
		border-right: 2px solid currentColor;
		border-bottom: 2px solid currentColor;
		transform: rotate(45deg);
		transition: transform var(--duration-base) var(--ease-out);
	}
	.sidebar-toggle[aria-expanded=true] .sidebar-caret {
		transform: rotate(-135deg);
	}
	.sidebar-nav {
		display: none;
		margin-top: var(--space-3);
	}
	.page-sidebar.open .sidebar-nav {
		display: block;
	}
	.page-sidebar.open .page-dept {
		display: none;
	} /* dept name already in the toggle */
}
/* ─── A-Z directory (services/index.html) ─── */
.az-bar {
	display: flex;
	justify-content: center;
	flex-wrap: wrap;
	border-bottom: 1px solid var(--au-gray-200);
	margin-bottom: var(--space-5);
}

.az-bar .tab-btn {
	padding: var(--space-2) var(--space-3);
	min-width: 2em;
	text-align: center;
}

.az-bar .tab-btn.active {
	background: transparent;
}

.az-list {
	-moz-columns: 2;
	     columns: 2;
	-moz-column-gap: var(--space-8);
	     column-gap: var(--space-8);
	list-style: none;
	padding: 0;
	margin: 0;
}

.az-list li {
	-moz-column-break-inside: avoid;
	     break-inside: avoid;
	padding: var(--space-1) 0;
}

.az-list a {
	color: var(--au-navy);
	text-decoration: none;
}

.az-list a:hover {
	text-decoration: underline;
}

.az-sub {
	padding-left: var(--space-5);
}

.az-suggest {
	margin-top: var(--space-8);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	text-align: center;
}

@media (max-width: 600px) {
	.az-list {
		-moz-columns: 1;
		     columns: 1;
	}
}
/* ════════════════════════════════════════════════════════════
   chrome.css  ·  site footer + subpage nav tree
   (the header lives in header.css / chrome/header.tt)
   Depends on: tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── FOOTER ─── */
.site-footer {
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.75);
	padding: var(--space-12) var(--gutter) var(--space-6);
}

.site-footer a {
	color: rgba(255, 255, 255, 0.75);
	text-decoration: none;
}

.site-footer a:hover {
	color: var(--au-gold-light);
}

.site-footer-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: grid;
	grid-template-columns: 1.6fr 1fr 1fr 1fr;
	gap: var(--space-8);
}

.footer-brand img {
	width: 160px;
	margin-bottom: var(--space-4);
}

.footer-tagline {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-white);
	line-height: 1.3;
}

.footer-meta {
	margin-top: var(--space-4);
	font-size: var(--text-sm);
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
}

.footer-col h3 {
	font-size: var(--text-xs);
	letter-spacing: 2px;
	text-transform: uppercase;
	color: var(--au-gold-light);
	margin-bottom: var(--space-3);
	font-weight: 600;
}

.footer-col ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	font-size: var(--text-sm);
}

.site-footer-bottom {
	max-width: var(--max-width);
	margin: var(--space-8) auto 0;
	padding-top: var(--space-5);
	border-top: 1px solid rgba(255, 255, 255, 0.12);
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4);
	align-items: center;
	justify-content: space-between;
	font-size: var(--text-sm);
}

.footer-legal {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4);
	align-items: center;
}

.footer-social {
	display: flex;
	gap: var(--space-4);
}

.footer-social a {
	display: inline-flex;
	color: rgba(255, 255, 255, 0.75);
}

.footer-social svg {
	width: 22px;
	height: 22px;
	fill: currentColor;
}

@media (max-width: 920px) {
	.site-footer-inner {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 560px) {
	.site-footer-inner {
		grid-template-columns: 1fr;
	}
}
/* ─── DEPARTMENT PRE-FOOTER BAND (chrome/dept_footer.tt) ─── */
.dept-footer {
	background: var(--au-cream);
	border-top: 1px solid var(--au-gray-200);
	padding: var(--space-8) var(--gutter);
}

.dept-footer-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-6) var(--space-10);
}

.dept-footer-logo img {
	max-height: 56px;
	width: auto;
}

.dept-footer-block {
	display: flex;
	align-items: center;
	gap: var(--space-5);
}

.dept-social {
	display: flex;
	align-items: center;
	gap: var(--space-4);
	list-style: none;
	margin: 0;
	padding: 0;
}

/* reset the global `li + li { margin-top }` reading-rhythm rule (base.css) — it
   leaks in and pushes every icon but the first down 8px, so with the centered
   flex line the first icon rides high. */
.dept-social li {
	margin: 0;
}

.dept-social a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.5em;
	height: 1.5em;
	line-height: 1;
	color: var(--au-navy);
	font-size: var(--text-xl);
	text-decoration: none;
	transition: color var(--duration-base);
}

.dept-social i {
	line-height: 1;
}

/* Flickr has no FontAwesome badge glyph (only bare dots), so draw the matching
   navy tile ourselves: a small square chip with the dots knocked out in cream,
   sized to sit alongside the square-badge glyphs of the other networks. */
.dept-social .fa-flickr {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 0.82em;
	height: 0.82em;
	background: var(--au-navy);
	color: var(--au-cream);
	border-radius: 0.14em;
}

.dept-social .fa-flickr::before {
	font-size: 0.62em;
	line-height: 1;
}

.dept-social a:hover .fa-flickr {
	background: var(--au-gold);
}

.dept-social a:hover {
	color: var(--au-gold);
}

.dept-contact {
	list-style: none;
	margin: 0;
	padding: 0;
	font-size: var(--text-sm);
	color: var(--au-text);
	display: flex;
	flex-direction: column;
	gap: var(--space-1);
}

.dept-contact a {
	color: var(--au-navy-light);
	text-decoration: none;
}

.dept-contact a:hover {
	color: var(--au-gold);
}

.dept-label {
	font-weight: 600;
	font-size: var(--text-base);
	color: var(--au-navy);
	margin-bottom: var(--space-2);
}

.dept-address {
	font-size: var(--text-sm);
	color: var(--au-text);
	line-height: 1.5;
}

.dept-address strong {
	font-size: var(--text-base);
	color: var(--au-navy);
}

@media (max-width: 700px) {
	.dept-footer-inner {
		flex-direction: column;
		align-items: flex-start;
		gap: var(--space-5);
	}
}
/* ─── SUBPAGE NAV TREE (chrome/nav.tt) — collapsible accordion ─── */
.nav-tree {
	list-style: none;
	margin: 0;
	padding: 0;
}

.nav-tree li {
	position: relative;
}

.nav-tree li + li {
	margin-top: 0;
} /* neutralize base.css li+li inside the tree */
.nav-tree a {
	display: block;
	padding: var(--space-1) var(--space-3);
	line-height: 1.35;
	color: var(--au-text);
	text-decoration: none;
	border-left: 2px solid transparent;
	font-size: var(--text-sm);
}

.nav-tree a:hover {
	color: var(--au-navy);
	border-left-color: var(--au-gray-300);
}

.nav-tree .nav-tree {
	padding-left: var(--space-4);
}

/* active trail parent (a branch on the path) = paler gold bar; scoped to
   .has-children so a spuriously-active leaf (e.g. site-root "Home") stays plain */
.nav-tree .is-active.has-children > .nav-tree-row > a {
	border-left-color: var(--au-gold-light);
}

/* current page = full gold bar + bold (after the trail rule so it wins) */
.nav-tree .is-current > a,
.nav-tree .is-current > .nav-tree-row > a {
	color: var(--au-navy);
	font-weight: 600;
	border-left-color: var(--au-gold);
}

/* branch row: link + collapse toggle */
.nav-tree-row {
	display: flex;
	align-items: center;
}

.nav-tree-row > a {
	flex: 1;
}

.nav-tree-toggle {
	flex-shrink: 0;
	width: 36px;
	align-self: stretch;
	display: flex;
	align-items: center;
	justify-content: center;
	background: none;
	border: 0;
	cursor: pointer;
	color: var(--au-warm-gray);
}

.nav-tree-toggle::before {
	content: "";
	width: 7px;
	height: 7px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	transition: transform var(--duration-base) var(--ease-out);
}

.nav-tree-toggle:hover {
	color: var(--au-navy);
}

.nav-tree li.is-open > .nav-tree-row .nav-tree-toggle::before {
	transform: rotate(-135deg);
}

/* collapse children unless the branch is open (active trail is pre-opened) */
.nav-tree li.has-children > .nav-tree {
	display: none;
}

.nav-tree li.has-children.is-open > .nav-tree {
	display: block;
}

/* mobile: comfortable, finger-friendly rows (desktop stays tight) */
@media (max-width: 820px) {
	.nav-tree a {
		padding-block: var(--space-3);
		line-height: 1.4;
	}
}
/* ─── section-nav · a department's sibling sub-sites (chrome/section_nav.tt) ───
   A slim full-width bar under the main header. Leads with the department NAME
   (the site identity — links home, styled as a title, not a tab), then the
   sub-sites (ITS: Client Services / AV / Network / /code/2027/…). Current sub-site marked
   with a gold tab-underline; the strip scrolls horizontally if it overflows.
   Alignment: the gutter lives on the full-bleed bar (like .section), and the
   inner is a pure max-width column, so the bar's content shares ONE left edge
   with the header and the page content (header.css applies the same model). */
.section-nav {
	background: var(--au-white);
	border-bottom: 1px solid var(--au-gray-200);
	box-shadow: var(--shadow-sm);
	padding-inline: var(--gutter);
}

.section-nav-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	align-items: stretch;
	gap: var(--space-8);
}

/* site identity — the department name; links home; reads as a title. A hairline
   divides it from the sub-site tabs. */
.section-nav-title {
	display: flex;
	align-items: center;
	flex: none; /* don't shrink — the tab strip absorbs overflow */
	font-family: var(--font-display);
	font-weight: 600;
	font-size: var(--text-md);
	color: var(--au-navy);
	text-decoration: none;
	white-space: nowrap;
	padding-right: var(--space-8);
	margin-right: var(--space-2);
	border-right: 1px solid var(--au-gray-200);
}

.section-nav-title:hover {
	color: var(--au-gold);
}

.section-nav-links {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	gap: var(--space-6);
	/* min-width:0 keeps the strip shrinkable so js/section-nav.js can detect
	   overflow (scrollWidth > clientWidth) and move tabs to More; overflow stays
	   visible so a tab's pages dropdown can escape the bar. (overflow-x:auto would
	   force overflow-y to auto and clip the dropdown.) */
	min-width: 0;
	overflow: visible;
}

/* margin-top:0 undoes the global base.css `li + li { margin-top }`, which was
   dropping every tab after the first below the top (the first looked raised). */
.section-nav-links li {
	flex: none;
	margin-top: 0;
}

.section-nav-links a {
	display: block;
	padding: var(--space-4) 0;
	font-size: var(--text-sm);
	color: var(--au-navy-light);
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 2px solid transparent;
	transition: color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out);
}

.section-nav-links a:hover {
	color: var(--au-gold);
}

.section-nav-links a.is-current {
	color: var(--au-navy);
	font-weight: 600;
	border-bottom-color: var(--au-gold);
}

/* highlighted tab (e.g. Donate) — gold text, semibold; no fill so it doesn't
   compete with the Give/Visit/Apply buttons in the utility bar */
.section-nav-links a.is-highlight {
	color: var(--au-gold);
	font-weight: 600;
}

.section-nav-links a.is-highlight:hover {
	color: var(--au-gold-dark, var(--au-gold));
}

/* the toggle is hidden in strip mode; JS reveals it when collapsed */
.section-nav-toggle {
	display: none;
}

/* ── collapsed mode — the tab strip becomes a dropdown, in TWO stages ──
   js/section-nav.js collapses as width tightens, so it never clips and never
   jumps straight to a full-width sheet:
     .is-collapsed            → SIDE-BY-SIDE: the title stays left, a compact
                                dropdown pill sits to its right. Kicks in as soon
                                as the full tab strip would overflow — keeps wide
                                views looking intentional.
     .is-collapsed.is-stacked → STACKED: the title becomes a small gold eyebrow
                                with a full-width pill beneath it. Only when even
                                title + pill can't sit side-by-side (narrow/phone).
   The open list is an anchored floating menu (under the pill in side-by-side,
   full-width in stacked). Content-aware, not a guessed breakpoint. Without JS
   the strip just scrolls — the dropdown needs JS to open anyway. */
.section-nav.is-collapsed {
	background: transparent;
	border-bottom: 0;
	box-shadow: none;
}

.section-nav.is-collapsed .section-nav-inner {
	position: relative; /* anchor for the floating list */
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-3);
	padding-block: var(--space-3);
}

/* no inline tabs follow the title now, so drop its divider */
.section-nav.is-collapsed .section-nav-title {
	border-right: 0;
	padding-right: 0;
	margin-right: 0;
}

/* the dropdown pill — current page + caret */
.section-nav.is-collapsed .section-nav-toggle {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-4);
	min-width: 11rem;
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	font-family: inherit;
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--au-navy);
	cursor: pointer;
}

/* side-by-side (default): pill hugs the right end of the title's row */
.section-nav.is-collapsed:not(.is-stacked) .section-nav-toggle {
	margin-left: auto;
}

/* stacked: title → eyebrow, pill → full width beneath it */
.section-nav.is-collapsed.is-stacked .section-nav-inner {
	flex-direction: column;
	align-items: stretch;
	gap: var(--space-2);
}

.section-nav.is-collapsed.is-stacked .section-nav-title {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--au-gold);
	white-space: normal;
}

.section-nav.is-collapsed.is-stacked .section-nav-toggle {
	width: 100%;
}

.section-nav-caret {
	width: 9px;
	height: 9px;
	flex-shrink: 0;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	transition: transform var(--duration-base) var(--ease-out);
}

.section-nav-toggle[aria-expanded=true] .section-nav-caret {
	transform: rotate(-135deg);
}

/* the sibling list — a floating menu below the bar, anchored to the inner */
.section-nav.is-collapsed .section-nav-links {
	display: none;
	position: absolute;
	top: 100%;
	z-index: 50;
	flex-direction: column;
	gap: 0;
	overflow: hidden;
	margin-top: var(--space-1);
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-md);
	max-height: 70vh;
	overflow-y: auto;
}

/* side-by-side: compact menu under the right-hand pill */
.section-nav.is-collapsed:not(.is-stacked) .section-nav-links {
	right: 0;
	width: -moz-max-content;
	width: max-content;
	max-width: 100%;
	min-width: 14rem;
}

/* stacked: full-width menu */
.section-nav.is-collapsed.is-stacked .section-nav-links {
	left: 0;
	right: 0;
}

.section-nav.is-collapsed.open .section-nav-links {
	display: flex;
}

.section-nav.is-collapsed .section-nav-links li {
	flex: none;
	margin-top: 0;
	border-bottom: 1px solid var(--au-gray-100);
}

.section-nav.is-collapsed .section-nav-links li:last-child {
	border-bottom: 0;
}

.section-nav.is-collapsed .section-nav-links a {
	padding: var(--space-3) var(--space-4);
	white-space: normal;
	border-bottom: 0; /* the tab-underline is a desktop treatment */
}

/* current row: gold left accent + pale wash instead of the tab underline */
.section-nav.is-collapsed .section-nav-links a.is-current {
	border-bottom: 0;
	background: var(--au-gold-pale);
	box-shadow: inset 3px 0 0 var(--au-gold);
}

/* ── priority+ overflow — a "More ▾" at the end of the strip ──
   When the strip almost fits, js/section-nav.js keeps the tabs that fit inline
   and tucks the rest under this button (rather than collapsing the whole thing
   to a pill). So wide views stay a real tab row. JS hides overflow tabs
   (li.is-hidden) and clones them into the menu; it toggles `hidden` on the
   whole control when nothing overflows, and hides it entirely once the nav
   collapses to the pill. */
.section-nav-links li.is-hidden {
	display: none;
}

.section-nav-more {
	position: relative;
	flex: none;
	display: flex;
	align-items: center;
}

.section-nav-more[hidden] {
	display: none;
}

.section-nav.is-collapsed .section-nav-more {
	display: none;
}

.section-nav-more-btn {
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
	padding: var(--space-4) 0;
	margin-left: var(--space-6);
	font-family: inherit;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
	background: none;
	border: 0;
	border-bottom: 2px solid transparent;
	white-space: nowrap;
	cursor: pointer;
}

.section-nav-more-btn:hover {
	color: var(--au-gold);
}

.section-nav-more-btn[aria-expanded=true] .section-nav-caret {
	transform: rotate(-135deg);
}

.section-nav-more-menu {
	display: none;
	position: absolute;
	top: 100%;
	right: 0;
	z-index: 50;
	margin: 0;
	padding: 0;
	list-style: none;
	min-width: 14rem;
	max-width: 80vw;
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-md);
	overflow: hidden;
	max-height: 70vh;
	overflow-y: auto;
}

.section-nav-more.is-open .section-nav-more-menu {
	display: block;
}

.section-nav-more-menu li {
	margin-top: 0;
	border-bottom: 1px solid var(--au-gray-100);
}

.section-nav-more-menu li:last-child {
	border-bottom: 0;
}

.section-nav-more-menu a {
	display: block;
	padding: var(--space-3) var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-navy-light);
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 0;
}

.section-nav-more-menu a:hover {
	color: var(--au-gold);
	background: var(--au-cream);
}

.section-nav-more-menu a.is-current {
	color: var(--au-navy);
	font-weight: 600;
	background: var(--au-gold-pale);
	box-shadow: inset 3px 0 0 var(--au-gold);
}

/* ── sub-site dropdowns · one level of a sub-site's pages per tab ──
   A tab with child pages gets a caret button; clicking it opens a menu of that
   sub-site's pages, so subpages are reachable from the bar (the section-nav only
   appears on pages that have no sidebar). js/section-nav.js toggles .is-open on
   the .section-nav-item. In the STRIP the menu is an absolute dropdown; in the
   collapsed pill and the More menu it drops inline as an indented accordion. */
.section-nav-item {
	position: relative;
	display: flex;
	align-items: center;
}

.section-nav-sub-toggle {
	display: inline-flex;
	align-items: center;
	align-self: stretch;
	padding: 0 var(--space-2);
	background: none;
	border: 0;
	cursor: pointer;
	color: var(--au-navy-light);
}

.section-nav-sub-toggle:hover {
	color: var(--au-gold);
}

.section-nav-sub-toggle .section-nav-caret {
	width: 6px;
	height: 6px;
}

.section-nav-sub-toggle[aria-expanded=true] .section-nav-caret {
	transform: rotate(-135deg);
}

/* the pages menu — a floating dropdown in the strip */
.section-nav-menu {
	display: none;
	position: absolute;
	top: 100%;
	left: 0;
	z-index: 50;
	margin: 0;
	padding: 0;
	list-style: none;
	min-width: 13rem;
	max-width: 22rem;
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-md);
	overflow: hidden;
	max-height: 70vh;
	overflow-y: auto;
}

.section-nav-item.is-open > .section-nav-menu {
	display: block;
}

/* desktop strip: also reveal a tab's pages on hover / keyboard focus, so the
   tab's own click stays free to navigate to its home page (the caret click
   remains the touch fallback). Scoped to the strip — the collapsed pill and the
   More menu keep their click accordion. */
.section-nav:not(.is-collapsed) .section-nav-links > .section-nav-item:focus-within > .section-nav-menu {
	display: block;
}

@media (hover: hover) {
	.section-nav:not(.is-collapsed) .section-nav-links > .section-nav-item:hover > .section-nav-menu {
		display: block;
	}
}
.section-nav-menu li {
	margin: 0;
	flex: none;
	border-bottom: 1px solid var(--au-gray-100);
}

.section-nav-menu li:last-child {
	border-bottom: 0;
}

.section-nav-menu a {
	display: block;
	padding: var(--space-3) var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-navy-light);
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 0;
}

.section-nav-menu a:hover {
	color: var(--au-gold);
	background: var(--au-cream);
}

.section-nav-menu a.is-current {
	color: var(--au-navy);
	font-weight: 600;
	background: var(--au-gold-pale);
	box-shadow: inset 3px 0 0 var(--au-gold);
}

/* nested (accordion) form — in the collapsed pill and inside the More menu the
   pages menu drops inline below its tab instead of floating. */
.section-nav.is-collapsed .section-nav-item,
.section-nav-more-menu .section-nav-item {
	flex-wrap: wrap;
}

/* link takes the row (min-width:0 so it can shrink), caret sits inline beside it
   (not stretched — stretch was dropping it onto its own line), menu wraps below */
.section-nav.is-collapsed .section-nav-item > a,
.section-nav-more-menu .section-nav-item > a {
	flex: 1;
	min-width: 0;
}

.section-nav.is-collapsed .section-nav-item > .section-nav-sub-toggle,
.section-nav-more-menu .section-nav-item > .section-nav-sub-toggle {
	flex: none;
	align-self: center;
}

.section-nav.is-collapsed .section-nav-menu,
.section-nav-more-menu .section-nav-menu {
	position: static;
	flex: 0 0 100%;
	min-width: 0;
	max-width: none;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	background: transparent;
	margin: 0;
	max-height: none;
}

.section-nav.is-collapsed .section-nav-menu a,
.section-nav-more-menu .section-nav-menu a {
	padding-left: var(--space-8);
}

/* ─── CMS edit shortcut (shell.wrap) ───
   Rendered only for a signed-in user with modify permission on the page. A small
   translucent gold pill pinned to the top-centre that brightens on hover and
   links to the CMS editor. `margin-bottom: -1lh` cancels its own height so it
   floats over the header instead of pushing content down. Admin affordance —
   never shown to normal visitors. */
.cms-edit-bar {
	position: sticky;
	top: 0;
	z-index: 1000;
	display: block;
	width: -moz-max-content;
	width: max-content;
	max-width: 100%;
	margin: 0 auto -1lh var(--gutter); /* left-aligned (right margin auto) */
	padding: 0 var(--space-4);
	background: var(--au-gold);
	color: var(--au-navy-deep);
	font-size: var(--text-sm);
	font-weight: 600;
	line-height: 2;
	text-decoration: none;
	white-space: nowrap;
	border-radius: 0 0 var(--radius-md) var(--radius-md);
	box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25);
	opacity: 0.5;
	transition: opacity var(--duration-base) var(--ease-out);
}

/* `a.` prefix beats base.css `a:not(.btn):hover` so the label stays navy (readable
   on the gold), not gold-on-gold */
a.cms-edit-bar:hover,
a.cms-edit-bar:focus-visible {
	opacity: 1;
	color: var(--au-navy-deep);
}

/* ════════════════════════════════════════════════════════════
   header.css  ·  site header — utility bar + full-width mega-menu
   Depends on: tokens.css · buttons/forms come from their own partials.
   Behaviour : js/header.js (self-inits on [data-header]).
   Markup    : templates/chrome/header.tt.

   Responsive stages:
     ≥980  all six section links in the bar
     ≤980  Research + About fold into the "Menu" panel (overflow only)
     ≤768  core sections fold in too; Menu is the whole nav (columns
           stack; section titles become collapsible)
     ≤600  utility bar hides; Give/Apply ride in the bar beside Menu
   ════════════════════════════════════════════════════════════ */
/* header-scoped resets. :where() holds specificity at 0-0-1 (like a bare
   element selector) so component rules such as .nav-link — which set their own
   color/background — always win over these instead of being overridden. */
:where(.au-header) a {
	text-decoration: none;
	color: inherit;
}

:where(.au-header) button {
	background: none;
	border: 0;
	cursor: pointer;
	color: inherit;
	font-family: inherit;
	line-height: inherit;
}

/* base.css styles bare lists globally (`li + li` top-margin, `ul` padding-left);
   the header's lists use flex + gap, so neutralize that here. */
.au-header ul {
	margin: 0;
	padding: 0;
}

.au-header li + li {
	margin-top: 0;
}

/* the whole header sticks — sticky on `.main-nav` alone can't work because its
   parent `.au-header` is only header-tall, so it has no room to stick within */
.au-header {
	position: sticky;
	top: 0;
	z-index: 100;
}

/* ─── UTILITY BAR (audience + give/apply + search) ─── */
.util-nav {
	position: relative;
	z-index: 100;
	background: var(--au-navy-deep);
	border-bottom: 1px solid rgba(255, 255, 255, 0.06);
}

/* content container: max-width with a gutter floor, in ONE property so the bar
   itself stays padding-free (the mega dropdown is absolutely positioned inside
   .main-nav and must stay full-bleed). Puts header content on the same left
   edge as .section content — see css/chrome.css .section-nav. */
.util-inner {
	width: min(100% - 2 * var(--gutter), var(--max-width));
	margin-inline: auto;
	display: flex;
	justify-content: flex-end;
	align-items: center;
	gap: var(--space-1);
}

.util-inner a {
	font-size: var(--text-xs);
	color: rgba(255, 255, 255, 0.55);
	padding: var(--space-2) var(--space-3);
	letter-spacing: 0.3px;
	transition: color 0.15s;
	white-space: nowrap;
}

.util-inner a:hover {
	color: var(--au-white);
}

.util-inner .util-accent {
	color: var(--au-gold-light);
	font-weight: 600;
} /* Give, Visit */
.util-inner .util-accent:hover {
	color: var(--au-gold);
}

.util-inner .util-cta {
	color: var(--au-navy-deep);
	font-weight: 700;
	background: var(--au-gold);
	border-radius: var(--radius-full);
	padding: var(--space-1) var(--space-4);
	margin-left: var(--space-1);
	transition: background var(--duration-base) var(--ease-out);
} /* Apply — primary */
.util-inner .util-cta:hover {
	color: var(--au-navy-deep);
	background: var(--au-gold-light);
}

/* ─── MAIN BAR (logo + section nav) ─── */
.main-nav {
	position: relative;
	z-index: 100;
	background: var(--au-navy);
	box-shadow: 0 2px 20px rgba(0, 0, 0, 0.15);
}

.main-inner {
	width: min(100% - 2 * var(--gutter), var(--max-width));
	margin-inline: auto;
	display: flex;
	align-items: center;
	gap: var(--space-6);
}

.nav-logo {
	display: flex;
	align-items: center;
	padding-block: var(--space-3);
	margin-right: auto;
	flex-shrink: 0;
	-webkit-user-select: none;
	-moz-user-select: none;
	     user-select: none;
}

.nav-logo img {
	display: block;
	height: 40px;
	width: auto;
	-webkit-user-drag: none;
} /* Safari: don't let the logo image be selected/dragged */
.main-links {
	display: flex;
	list-style: none;
}

.nav-item {
	position: static;
}

.nav-link {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: var(--text-sm);
	color: rgba(255, 255, 255, 0.78);
	padding: var(--space-5) var(--space-4);
	border-bottom: 3px solid transparent;
	transition: all var(--duration-base);
	white-space: nowrap;
}

.nav-link:hover, .nav-link[aria-expanded=true] {
	color: var(--au-white);
	border-bottom-color: var(--au-gold);
	background: rgba(255, 255, 255, 0.05);
}

.nav-link .caret {
	width: 8px;
	height: 8px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	margin-top: -3px;
	transition: transform var(--duration-base);
}

.nav-link[aria-expanded=true] .caret {
	transform: rotate(-135deg);
	margin-top: 2px;
}

/* ─── FULL-WIDTH MEGA PANEL ─── */
.mega {
	position: absolute;
	left: 0;
	right: 0;
	top: 100%;
	background: var(--au-white);
	border-top: 3px solid var(--au-gold);
	box-shadow: var(--shadow-lg);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-8px);
	transition: opacity var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), visibility var(--duration-base);
	z-index: 90;
}

.mega.open {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}

.mega-inner {
	width: min(100% - 2 * var(--gutter), var(--max-width));
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-6);
	padding-block: var(--space-8);
}

.mega-col {
	flex: 1 1 190px;
	min-width: 170px;
}

.mega-col h4 {
	font-family: var(--font-body);
	font-size: var(--text-xs);
	letter-spacing: 1.5px;
	text-transform: uppercase;
	color: var(--au-gold);
	font-weight: 600;
	margin-bottom: var(--space-4);
	padding-bottom: var(--space-2);
	border-bottom: 1px solid var(--au-gray-200);
}

.mega-col h4 a {
	color: var(--au-navy);
}

.mega-col ul {
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
}

.mega-col a {
	font-size: var(--text-sm);
	color: var(--au-text);
	transition: color 0.15s;
}

.mega-col a:hover {
	color: var(--au-gold);
}

.mega-cta {
	margin-top: var(--space-4);
	display: inline-block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
}

.mega-cta:hover {
	color: var(--au-gold);
}

.mega-feature {
	flex: 1 1 260px;
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	border-radius: var(--radius-lg);
	padding: var(--space-6);
	color: var(--au-white);
	align-self: stretch;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
}

.mega-feature .fk {
	font-size: var(--text-xs);
	letter-spacing: 2px;
	text-transform: uppercase;
	color: var(--au-gold-light);
	font-weight: 600;
	margin-bottom: var(--space-2);
}

.mega-feature h3 {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	margin-bottom: var(--space-3);
	line-height: 1.25;
}

.mega-feature a {
	color: var(--au-gold-light);
	font-weight: 600;
	font-size: var(--text-sm);
}

/* scrim behind an open panel */
.nav-scrim {
	position: fixed;
	inset: 0;
	background: rgba(0, 26, 51, 0.45);
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--duration-base), visibility var(--duration-base);
	z-index: 80;
}

body.mega-open .nav-scrim {
	opacity: 1;
	visibility: visible;
}

/* focus the open menu: recede the other bar items, keep the active one lit */
body.mega-open .nav-link {
	opacity: 0.45;
}

body.mega-open .nav-link[aria-expanded=true] {
	opacity: 1;
}

/* ─── SEARCH (icon in the bar → full-width panel) ─── */
.search-item {
	display: flex;
} /* stretch the button to full bar height so the icon centers */
.nav-search-btn {
	padding-inline: var(--space-4);
}

.nav-search-btn svg {
	width: 18px;
	height: 18px;
}

.mega-search-inner {
	flex-direction: column;
	align-items: stretch;
	padding-block: var(--space-8);
}

.site-search {
	width: 100%;
	max-width: 760px;
	margin-inline: auto;
}

.search-label {
	display: block;
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-navy);
	margin-bottom: var(--space-5);
}

.search-field {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	padding: var(--space-1) var(--space-2) var(--space-1) var(--space-5);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-full);
	transition: border-color var(--duration-base) var(--ease-out);
}

.search-field:focus-within {
	border-color: var(--au-gold);
}

.search-field > svg {
	width: 22px;
	height: 22px;
	color: var(--au-gray-400);
	flex-shrink: 0;
}

.search-field input {
	flex: 1;
	min-width: 0;
	border: 0;
	outline: 0;
	background: none;
	color: var(--au-text);
	font-size: var(--text-md);
	padding: var(--space-3) 0;
}

.search-go {
	flex-shrink: 0;
	background: var(--au-navy);
	color: var(--au-white);
	border-radius: var(--radius-full);
	padding: var(--space-3) var(--space-6);
	font-size: var(--text-sm);
	font-weight: 600;
	transition: all var(--duration-base) var(--ease-out);
}

.search-go:hover {
	background: var(--au-gold);
	color: var(--au-navy-deep);
}

.search-hint {
	margin-top: var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-gray-400);
}

.search-hint a {
	color: var(--au-navy-light);
	font-weight: 600;
}

.search-hint a:hover {
	color: var(--au-gold);
}

/* ─── "MENU" TRIGGER (overflow) + compact Give/Apply ─── */
.menu-item {
	display: none;
}

.nav-menu-btn {
	gap: var(--space-2);
}

.nav-menu-btn .ham {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 4px;
	width: 20px;
	height: 1.6em;
}

.nav-menu-btn .ham span {
	height: 2px;
	background: currentColor;
	border-radius: 2px;
	transition: transform var(--duration-base) var(--ease-out), opacity var(--duration-base);
}

.nav-menu-btn[aria-expanded=true] .ham span:nth-child(1) {
	transform: translateY(6px) rotate(45deg);
}

.nav-menu-btn[aria-expanded=true] .ham span:nth-child(2) {
	opacity: 0;
}

.nav-menu-btn[aria-expanded=true] .ham span:nth-child(3) {
	transform: translateY(-6px) rotate(-45deg);
}

.mega-col-info {
	margin-left: auto;
	background: var(--au-cream);
	border-radius: var(--radius-md);
	padding: var(--space-5);
}

.mega-col-info h4 {
	color: var(--au-navy);
}

.menu-actions {
	display: flex;
	gap: var(--space-2);
	margin-top: var(--space-4);
}

.menu-actions .nc-btn {
	flex: 1;
	text-align: center;
	padding: var(--space-3);
	border: 2px solid transparent;
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
	font-weight: 600;
	transition: all var(--duration-base) var(--ease-out);
}

.menu-actions .nc-give, .menu-actions .nc-visit {
	background: transparent;
	color: var(--au-navy);
	border-color: var(--au-navy);
}

.menu-actions .nc-give:hover, .menu-actions .nc-visit:hover {
	background: var(--au-navy);
	color: var(--au-white);
	transform: translateY(-2px);
	box-shadow: var(--shadow-md);
}

.menu-actions .nc-apply {
	background: var(--au-gold);
	color: var(--au-white);
	border-color: var(--au-gold);
}

.menu-actions .nc-apply:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-white);
	transform: translateY(-2px);
	box-shadow: 0 6px 20px rgba(198, 149, 43, 0.3);
}

/* Menu panel = overflow only: hide columns for sections still in the bar */
#mega-menu .mcol-core, #mega-menu .mcol-info {
	display: none;
}

.nav-compact {
	display: none;
	align-items: center;
	gap: var(--space-2);
}

.nav-compact .nc-btn {
	font-size: var(--text-sm);
	font-weight: 600;
	padding: var(--space-2) var(--space-4);
	border: 2px solid transparent;
	border-radius: var(--radius-sm);
	white-space: nowrap;
	transition: all var(--duration-base) var(--ease-out);
}

.nav-compact .nc-give, .nav-compact .nc-visit {
	color: var(--au-gold-light);
	border-color: rgba(255, 255, 255, 0.35);
}

.nav-compact .nc-give:hover, .nav-compact .nc-visit:hover {
	background: rgba(255, 255, 255, 0.1);
	border-color: var(--au-gold-light);
	color: var(--au-white);
	transform: translateY(-2px);
}

.nav-compact .nc-apply {
	background: var(--au-gold);
	color: var(--au-white);
}

.nav-compact .nc-apply:hover {
	background: var(--au-gold-light);
	transform: translateY(-2px);
	box-shadow: 0 6px 20px rgba(198, 149, 43, 0.3);
}

@media (max-width: 1200px) {
	.nav-link {
		padding-inline: var(--space-3);
	}
	.main-inner {
		gap: var(--space-5);
	}
}
@media (max-width: 980px) {
	.util-inner a {
		padding-inline: var(--space-2);
	}
	.nav-link {
		padding-inline: var(--space-2);
	}
	.nav-item.secondary {
		display: none;
	}
	.menu-item {
		display: block;
	}
}
@media (max-width: 768px) {
	.nav-item:not(.menu-item):not(.search-item) {
		display: none;
	}
	.mega {
		max-height: calc(100vh - 130px);
		overflow: auto;
	}
	.search-label {
		font-size: var(--text-lg);
	}
	.mega-inner {
		flex-direction: column;
		gap: var(--space-2);
	}
	.mega-col {
		flex: none;
	}
	.mega-col-info {
		margin-left: 0;
	}
	.mega-feature {
		display: none;
	}
	#mega-menu .mcol-core {
		display: block;
	}
	/* collapsible section titles in the mobile Menu */
	#mega-menu .mega-col:not(.mcol-info) {
		border-bottom: 1px solid var(--au-gray-200);
		padding-bottom: var(--space-3);
	}
	#mega-menu .mega-col:not(.mcol-info) > h4 {
		display: flex;
		justify-content: space-between;
		align-items: center;
		cursor: pointer;
		margin-bottom: 0;
		border-bottom: 0;
		padding-bottom: 0;
	}
	#mega-menu .mega-col:not(.mcol-info) > h4 a {
		pointer-events: none;
		color: inherit;
	}
	#mega-menu .mega-col:not(.mcol-info) > h4::after {
		content: "";
		width: 8px;
		height: 8px;
		border-right: 2px solid currentColor;
		border-bottom: 2px solid currentColor;
		transform: rotate(45deg);
		transition: transform var(--duration-base);
	}
	#mega-menu .mega-col:not(.mcol-info).open > h4::after {
		transform: rotate(-135deg);
	}
	#mega-menu .mega-col:not(.mcol-info) > ul {
		display: none;
		padding-top: var(--space-3);
	}
	#mega-menu .mega-col:not(.mcol-info).open > ul {
		display: block;
	}
}
@media (max-width: 600px) {
	.util-nav {
		display: none;
	}
	.nav-compact {
		display: flex;
	}
	#mega-menu .mcol-info {
		display: block;
	}
	/* reclaim room: tighter side padding + gaps on the compact bar */
	.main-inner {
		gap: var(--space-3);
		padding-inline: var(--space-4);
	}
	.nav-search-btn {
		padding-inline: var(--space-3);
	}
	.nav-logo img {
		height: 34px;
	}
}
@media (max-width: 480px) {
	/* three CTAs won't fit with the logo + search + Menu — shed from the left */
	.nav-compact .nc-give {
		display: none;
	}
}
@media (max-width: 400px) {
	/* only Apply remains on the bar; Give/Visit stay in the Menu panel */
	.nav-compact .nc-visit {
		display: none;
	}
	.main-inner {
		gap: var(--space-2);
	}
}
/* ════════════════════════════════════════════════════════════
   au-buttons.css  ·  Button & CTA styles
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
.btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--space-2);
	font-family: var(--font-body);
	font-weight: 700;
	font-size: var(--text-sm);
	letter-spacing: 1.5px;
	text-transform: uppercase;
	text-decoration: none;
	padding: var(--space-4) var(--space-6);
	border-radius: var(--radius-sm);
	border: 2px solid transparent;
	cursor: pointer;
	transition: all var(--duration-base) var(--ease-out);
}

.btn:hover {
	transform: translateY(-1px);
}

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

/* Primary — Gold */
.btn-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

/* lighten the gold on hover while KEEPING the navy label — navy on the lighter
   gold reads with more contrast, not less (the old wash-out was the gold text,
   now fixed via a:not(.btn):hover in base.css). */
.btn-primary:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
	box-shadow: 0 4px 16px rgba(198, 149, 43, 0.35);
}

/* Secondary — Navy */
.btn-secondary {
	background: var(--au-navy);
	color: var(--au-white);
	border-color: var(--au-navy);
}

.btn-secondary:hover {
	background: var(--au-navy-deep);
	box-shadow: 0 4px 16px rgba(0, 51, 102, 0.3);
}

/* Outline */
.btn-outline {
	background: transparent;
	color: var(--au-navy);
	border-color: var(--au-navy);
}

.btn-outline:hover {
	background: var(--au-navy);
	color: var(--au-white);
}

/* Ghost */
.btn-ghost {
	background: transparent;
	color: var(--au-gold);
	border-color: transparent;
}

.btn-ghost:hover {
	background: var(--au-gold-pale);
}

/* Sizes */
.btn-sm {
	padding: var(--space-2) var(--space-4);
	font-size: var(--text-xs);
}

.btn-lg {
	padding: var(--space-5) var(--space-8);
	font-size: var(--text-base);
}

/* ════════════════════════════════════════════════════════════
   au-forms.css  ·  Form controls
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* Labels */
.label {
	display: block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-1);
}

.label-required::after {
	content: " *";
	color: var(--au-error);
}

.helper {
	font-size: var(--text-xs);
	color: var(--au-gray-400);
	margin-top: var(--space-1);
}

.error-msg {
	font-size: var(--text-xs);
	color: var(--au-error);
	margin-top: var(--space-1);
	font-weight: 500;
}

/* Text Input */
.input {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	outline: none;
	transition: border-color var(--duration-base);
}

.input::-moz-placeholder {
	color: var(--au-gray-400);
}

.input::placeholder {
	color: var(--au-gray-400);
}

.input:focus {
	border-color: var(--au-gold);
}

.input-error {
	border-color: var(--au-error) !important;
}

/* Dark variant */
.input-dark {
	background: rgba(255, 255, 255, 0.06);
	border-color: rgba(255, 255, 255, 0.15);
	color: var(--au-white);
}

.input-dark:focus {
	border-color: var(--au-gold);
}

/* Select */
.select {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-8) var(--space-3) var(--space-4);
	outline: none;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	background-image: url("data:image/svg+xml,...chevron...");
	background-repeat: no-repeat;
	background-position: right 16px center;
	cursor: pointer;
}

.select:focus {
	border-color: var(--au-gold);
}

/* Textarea */
.textarea {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	resize: vertical;
	min-height: 100px;
}

.textarea:focus {
	border-color: var(--au-gold);
}

/* Checkbox & Radio */
.check-group {
	display: flex;
	flex-direction: column;
	gap: var(--space-3);
}

.check-label {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	cursor: pointer;
	font-size: var(--text-base);
}

.checkbox, .radio {
	width: 20px;
	height: 20px;
	accent-color: var(--au-gold);
}

.radio {
	accent-color: var(--au-navy);
}

/* Toggle Switch */
.toggle {
	position: relative;
	width: 48px;
	height: 26px;
}

.toggle input {
	opacity: 0;
	width: 0;
	height: 0;
	position: absolute;
}

.toggle-track {
	position: absolute;
	inset: 0;
	background: var(--au-gray-300);
	border-radius: var(--radius-full);
	transition: background var(--duration-base);
}

.toggle-track::after {
	content: "";
	position: absolute;
	width: 20px;
	height: 20px;
	background: var(--au-white);
	border-radius: 50%;
	top: 3px;
	left: 3px;
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
	transition: transform var(--duration-base) var(--ease-out);
}

.toggle input:checked + .toggle-track {
	background: var(--au-navy);
}

.toggle input:checked + .toggle-track::after {
	transform: translateX(22px);
}

/* Range Slider */
.range {
	width: 100%;
	height: 6px;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	background: var(--au-gray-200);
	border-radius: var(--radius-full);
}

.range::-webkit-slider-thumb {
	-webkit-appearance: none;
	        appearance: none;
	width: 22px;
	height: 22px;
	background: var(--au-navy);
	border-radius: 50%;
	border: 3px solid var(--au-white);
	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
}

/* File Upload */
.file-upload {
	border: 2px dashed var(--au-gray-300);
	border-radius: var(--radius-md);
	padding: var(--space-6) var(--space-5);
	text-align: center;
	cursor: pointer;
	transition: all var(--duration-base);
}

.file-upload:hover {
	border-color: var(--au-gold);
	background: var(--au-gold-pale);
}

/* Layout helpers */
.form-group {
	margin-bottom: var(--space-5);
}

.form-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-4);
}

@media (max-width: 600px) {
	.form-row {
		grid-template-columns: 1fr;
	}
}
/* multi-column checkbox/radio list for long option sets (e.g. 16 project types).
   Boxes align to the first line so wrapping labels stay tidy. */
.check-group--cols {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--space-3) var(--space-6);
}

.check-group--cols .check-label {
	align-items: flex-start;
}

.check-group--cols .checkbox, .check-group--cols .radio {
	flex-shrink: 0;
	margin-top: 2px;
}

@media (max-width: 560px) {
	.check-group--cols {
		grid-template-columns: 1fr;
	}
}
/* form scaffold — constrain width, reset the fieldset chrome, style the legend */
.form {
	max-width: 680px;
}

.form fieldset {
	border: 0;
	margin: 0;
	padding: 0;
}

.form legend {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-navy);
	line-height: 1.2;
	margin-bottom: var(--space-6);
}

/* ─── Legacy CMS forms (.auform) ───
   The sitewide form macros (templates/forms/*) emit bare elements with
   class="auform" on the <form> and class="generic_element" wrappers.
   The form template also injects the legacy /css/forms.css AFTER index.css,
   so we scope under .page-main to win by specificity. */
.page-main .auform {
	max-width: 680px;
}

.page-main .auform .generic_element {
	margin-bottom: var(--space-3);
	clear: none;
}

.page-main .auform .help_message {
	min-height: 0;
}

.page-main .auform label {
	display: block;
	float: none;
	width: auto;
	text-align: left;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-1);
	margin-right: 0;
}

.page-main .auform input[type=text],
.page-main .auform input[type=email],
.page-main .auform input[type=tel],
.page-main .auform input[type=url],
.page-main .auform input[type=search],
.page-main .auform input[type=number] {
	width: 100%;
	float: none;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	outline: none;
	transition: border-color var(--duration-base);
}

.page-main .auform input[type=text]:focus,
.page-main .auform input[type=email]:focus,
.page-main .auform input[type=tel]:focus {
	border-color: var(--au-gold);
	background: var(--au-white);
}

.page-main .auform textarea {
	width: 100%;
	float: none;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	resize: vertical;
	min-height: 100px;
	outline: none;
}

.page-main .auform textarea:focus {
	border-color: var(--au-gold);
	background: var(--au-white);
}

.page-main .auform select {
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-2) var(--space-3);
	outline: none;
}

.page-main .auform select:focus {
	border-color: var(--au-gold);
}

.page-main .auform input[type=submit] {
	-webkit-appearance: none;
	-moz-appearance: none;
	     appearance: none;
	font-family: var(--font-display);
	font-size: var(--text-sm);
	font-weight: 600;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--au-navy);
	background-color: var(--au-gold);
	background-image: none;
	border: 0;
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-6);
	margin: var(--space-5) 0 0;
	cursor: pointer;
	transition: background-color var(--duration-base), transform var(--duration-base);
}

.page-main .auform input[type=submit]:hover {
	background-color: var(--au-gold-light);
	transform: translateY(-1px);
}

/* phone macro: three small inputs in a row */
.page-main .auform .phone {
	display: flex;
	align-items: center;
	gap: var(--space-2);
	flex-wrap: wrap;
}

.page-main .auform .phone label {
	width: 100%;
	float: none;
}

.page-main .auform .phone select {
	flex: 0 0 auto;
}

.page-main .auform .phone input.fluid {
	width: auto;
	flex: 1;
	min-width: 60px;
}

.page-main .auform .phone span {
	color: var(--au-gray-400);
}

/* ════════════════════════════════════════════════════════════
   au-tables.css  ·  Data tables
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* Band-aware: cell text, borders and stripes read the section's --band-* context
   tokens (set on dark bands in layout.css), so a table dropped on a dark band —
   e.g. inside a dark accordion — adapts instead of rendering dark-on-dark. Falls
   back to the light-table look off a band. */
.table-wrap {
	overflow-x: auto;
	border-radius: var(--radius-lg);
	border: 2px solid var(--band-card-border, var(--au-gray-200));
}

.table {
	width: 100%;
	border-collapse: collapse;
	font-size: var(--text-sm);
}

/* inside a wrap, the wrap owns the outer spacing and the table sits flush to the
   rounded border. Without this, the page-content rhythm's top margin on <table>
   opens a blank strip between the border and the header row (the wrap is its own
   block-formatting context, so the margin can't collapse away). */
.table-wrap > .table {
	margin: 0;
}

.table thead {
	background: var(--au-navy);
}

.table th {
	color: var(--au-white);
	font-weight: 600;
	font-size: var(--text-xs);
	letter-spacing: 1px;
	text-transform: uppercase;
	text-align: left;
	padding: var(--space-3) var(--space-4);
}

.table td,
.table tbody th {
	padding: var(--space-3) var(--space-4);
	border-bottom: 1px solid var(--band-card-border, var(--au-gray-200));
	color: var(--band-body, var(--au-text));
}

.table tbody th {
	font-weight: 700;
	background: var(--band-card-bg, var(--au-cream));
	vertical-align: top;
}

/* Striped rows */
.table-striped tbody tr:nth-child(even) td {
	background: var(--band-card-bg, rgba(0, 51, 102, 0.02));
}

/* Grouped rows — band alternate row GROUPS, not alternate rows.
   Use one <tbody> per group (that is what tbody is for) and give the table
   .table--grouped: alternate groups get a tinted band and a heavier rule
   above it. This is the variant for tables whose first column is a rowspan
   category label — row-level .table-striped would stripe straight across those
   groups and fight them. Replaces the legacy flat-grey `background-color` fills
   that CKEditor/Word pastes used for the same purpose. */
.table--grouped tbody:nth-of-type(odd) td {
	background: var(--band-card-bg, var(--au-cream));
}

.table--grouped tbody + tbody td {
	border-top: 2px solid var(--band-card-border, var(--au-gray-200));
}

/* Row hover — last so it wins over both banding variants (equal specificity).
   Opt out with .table--nohover. Row highlighting misreads on tables that use
   rowspan: hovering a row cannot light up the spanning category/contact cells
   (those belong to the group's FIRST <tr>), so the highlight comes out ragged
   and half-applied. The :not() keeps the banding intact — it simply never arms
   the hover — rather than trying to repaint the cell back to its band colour. */
.table:not(.table--nohover) tbody tr:hover td {
	background: var(--band-raised, var(--au-gold-pale));
}

/* Compact variant */
.table-compact th,
.table-compact td {
	padding: var(--space-2) var(--space-3);
	font-size: var(--text-xs);
}

/* ─── Responsive: table → cards on mobile ─── */
@media (max-width: 600px) {
	.table-responsive thead {
		display: none;
	}
	.table-responsive tbody tr {
		display: block;
		margin-bottom: var(--space-3);
		border: 1px solid var(--band-card-border, var(--au-gray-200));
		border-radius: var(--radius-md);
	}
	.table-responsive tbody td {
		display: flex;
		justify-content: space-between;
		padding: var(--space-2) var(--space-3);
	}
	/* Label from data-label attribute */
	.table-responsive tbody td::before {
		content: attr(data-label);
		font-weight: 600;
		font-size: var(--text-xs);
		text-transform: uppercase;
		color: var(--band-heading, var(--au-navy));
	}
}
/* ════════════════════════════════════════════════════════════
   au-feedback.css  ·  Callouts & progress
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── Callouts / alerts ─── */
.callout {
	padding: var(--space-4) var(--space-5);
	border-radius: var(--radius-md);
	font-size: var(--text-sm);
	display: flex;
	align-items: flex-start;
	gap: var(--space-3);
	line-height: 1.6;
}

/* [hidden] alone can't hide a display:flex box — make the attribute win */
.callout[hidden] {
	display: none;
}

.callout-info {
	background: #EBF3FA;
	color: var(--au-info);
	border-left: 3px solid var(--au-info);
}

.callout-warning {
	background: var(--au-gold-pale);
	color: #8A6A1E;
	border-left: 3px solid var(--au-gold);
}

.callout-success {
	background: #EBF5EE;
	color: var(--au-success);
	border-left: 3px solid var(--au-success);
}

.callout-error {
	background: #FBECEC;
	color: var(--au-error);
	border-left: 3px solid var(--au-error);
}

/* ─── CTA callout — a set-apart panel: a message beside an action button.
   The clean replacement for the old <table> "excerpt + button" pattern; wraps
   to stacked (text over button) on narrow widths. Text is a <div>, not <p>, so
   it doesn't inherit the .page-main paragraph rhythm. ─── */
.cta-callout {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-4) var(--space-6);
	margin: var(--space-8) 0;
	padding: var(--space-6) var(--space-8);
	background: var(--au-gold-pale);
	border-left: 4px solid var(--au-gold);
	border-radius: var(--radius-md);
}

.cta-callout-text {
	flex: 1 1 320px;
	font-size: var(--text-md);
	color: var(--au-navy);
	line-height: 1.6;
}

.cta-callout .btn {
	flex-shrink: 0;
}

/* ─── sidenote — a boxed aside that floats beside the body on wide screens
   (e.g. "how to submit a request"); the surrounding text wraps around it.
   Unfloats to a full-width block on narrow screens. ─── */
.sidenote {
	float: right;
	width: 300px;
	max-width: 42%;
	margin: var(--space-1) 0 var(--space-5) var(--space-8);
	padding: var(--space-5) var(--space-6);
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-top: 3px solid var(--au-gold);
	border-radius: var(--radius-md);
	font-size: var(--text-sm);
	line-height: 1.6;
}

.sidenote-title {
	font-family: var(--font-display);
	font-size: var(--text-md);
	font-weight: 600;
	color: var(--au-navy);
	line-height: 1.25;
}

@media (max-width: 640px) {
	.sidenote {
		float: none;
		width: auto;
		max-width: none;
		margin-left: 0;
	}
}
/* ─── Progress bar ─── */
.progress-wrap {
	background: var(--au-gray-200);
	border-radius: var(--radius-lg);
	height: 36px;
	overflow: hidden;
	box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.06);
}

.progress-fill {
	height: 100%;
	border-radius: var(--radius-lg);
	background: linear-gradient(90deg, var(--au-navy) 0%, var(--au-navy-light) 100%);
	display: flex;
	align-items: center;
	justify-content: flex-end;
	padding-right: var(--space-4);
	transition: width 2s var(--ease-out);
	position: relative;
}

/* Gold accent edge */
.progress-fill::after {
	content: "";
	position: absolute;
	right: 0;
	top: 0;
	bottom: 0;
	width: 50px;
	background: linear-gradient(90deg, transparent, rgba(198, 149, 43, 0.5));
	border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
}

.progress-label {
	color: var(--au-white);
	font-weight: 700;
	font-size: var(--text-sm);
	position: relative;
	z-index: 2;
}

/* ════════════════════════════════════════════════════════════
   steps.css  ·  numbered step-by-step (how-to guides)
   Depends on: tokens.css
   An ordered list of procedure steps — a gold number badge per step,
   joined by a vertical connector line, with the instruction and an
   (optionally framed) screenshot indented in the step column.

   Authoring (CKEditor-safe — no icons, no manual "Step N", no numbers):
     <ol class="steps">
       <li>
         <p>Do the thing.</p>                     (lead instruction)
         <figure><img src="/code/2027/…" alt="/code/2027/…"></figure>  (optional screenshot)
       </li>
       /code/2027/…
     </ol>
   The numbers and connector line are generated with CSS counters +
   ::before/::after, so the markup stays a clean ordered list. The number
   badge IS the step label, so no "Step 1" text is needed.
   ════════════════════════════════════════════════════════════ */
.steps {
	list-style: none;
	counter-reset: step;
	margin: var(--space-8) 0;
	padding: 0;
}

.steps > li {
	counter-increment: step;
	position: relative;
	margin: 0; /* cancel the global `li + li` gap */
	padding-left: 4rem; /* the badge column */
	padding-bottom: var(--space-10); /* room for the connector to the next step */
}

.steps > li:last-child {
	padding-bottom: 0;
}

/* the number badge */
.steps > li::before {
	content: counter(step);
	position: absolute;
	left: 0;
	top: 0;
	width: 2.5rem;
	height: 2.5rem;
	border-radius: 50%;
	background: var(--au-gold);
	color: var(--au-navy-deep);
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--font-display);
	font-weight: 600;
	font-size: var(--text-lg);
	z-index: 1; /* sit above the connector line */
}

/* the connector line linking a step to the next (not after the last step) */
.steps > li:not(:last-child)::after {
	content: "";
	position: absolute;
	left: 1.25rem; /* centred under the 2.5rem badge */
	top: 3rem; /* just below the badge */
	bottom: 0;
	width: 2px;
	background: var(--au-gray-200);
	transform: translateX(-1px);
}

.steps > li > :first-child {
	margin-top: 0;
}

/* the lead instruction — slightly larger, and nudged down ~0.4rem so its first
   line sits vertically centered against the number badge (the number does the
   "Step N" labelling, so no eyebrow is needed). */
.steps > li > p:first-child {
	font-size: var(--text-md);
	line-height: 1.6;
	margin: 0.4rem 0 0;
}

/* any following text in a step */
.steps p {
	margin: var(--space-2) 0 0;
	line-height: 1.6;
}

/* framed screenshot: hairline border, rounded corners, soft lift; capped so a
   large capture doesn't fill the whole column. Left edge lines up with the text. */
.steps figure {
	margin: var(--space-4) 0 0;
}

.steps figure img {
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-sm);
	max-width: 440px;
	width: 100%;
}

.steps figcaption {
	margin-top: var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
}

/* tighten the badge column on small screens */
@media (max-width: 560px) {
	.steps > li {
		padding-left: 3.25rem;
	}
	.steps > li::before {
		width: 2.1rem;
		height: 2.1rem;
		font-size: var(--text-md);
	}
	.steps > li:not(:last-child)::after {
		left: 1.05rem;
		top: 2.5rem;
	}
}
/* ════════════════════════════════════════════════════════════
   au-disclosure.css  ·  Accordion & tabbed panels
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── Accordion ─── */
/* Band-aware: reads the section's --band-* context tokens (set on dark bands in
   layout.css) so the accordion adapts automatically — light triggers + dark text
   on light bands, translucent triggers + light text on dark bands — with no
   variant class to remember. Falls back to the light look off a band. */
.accordion {
	border: 2px solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	overflow: hidden;
}

.accordion-item {
	border-bottom: 1px solid var(--band-card-border, var(--au-gray-200));
	/* when deep-linked (js/accordion.js opens the panel and scrolls here), clear
	   the sticky header so the question isn't hidden underneath it. */
	scroll-margin-top: calc(var(--header-height) + var(--space-3));
}

.accordion-item:last-child {
	border-bottom: none;
}

.accordion-item > :is(h1, h2, h3, h4, h5, h6) {
	margin: 0;
	font-size: inherit;
}

.accordion-trigger {
	width: 100%;
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: var(--space-4) var(--space-5);
	background: var(--band-card-bg, var(--au-white));
	border: none;
	cursor: pointer;
	font-family: var(--font-body);
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--band-heading, var(--au-navy));
	text-align: left;
	transition: background var(--duration-fast);
}

.accordion-trigger:hover,
.accordion-trigger[aria-expanded=true] {
	background: var(--band-raised, var(--au-gold-pale));
}

/* a CMS-authored title is sometimes wrapped in a heading (e.g. <h3>). The global
   base.css `h1..h6 { color: navy }` would then paint it dark — invisible on a
   dark band. Tie any heading inside the trigger to the trigger's own band-aware
   colour, and strip the heading's page margins so it sits in the button. */
.accordion-trigger :is(h1, h2, h3, h4, h5, h6) {
	color: inherit;
	margin: 0;
}

.accordion-trigger a {
	color: inherit;
	text-decoration: none;
	pointer-events: none;
}

/* Secondary text on a trigger — a qualifier that belongs with the title rather
   than inside the panel (e.g. "2025-2026 Verification Forms · for classes
   between August 2025 & July 2026"). Legacy Bootstrap panels put this in a
   <span> beside the toggle inside .panel-heading; it has nowhere else to go
   once the heading becomes a button. Lighter and lower-contrast than the
   title, and it wraps rather than squeezing the icon. */
.accordion-note {
	display: block;
	margin-top: var(--space-1);
	font-weight: 400;
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-gray-600));
}

/* the title + note stack on the left; the icon stays pinned right */
.accordion-trigger > :not(.accordion-icon) {
	flex: 1 1 auto;
}

.accordion-trigger .accordion-icon {
	flex: 0 0 auto;
}

/* Plus/minus icon via pseudo-elements */
.accordion-icon {
	width: 20px;
	height: 20px;
	position: relative;
}

.accordion-icon::before,
.accordion-icon::after {
	content: "";
	position: absolute;
	background: var(--band-accent, var(--au-navy));
	border-radius: 2px;
	transition: transform var(--duration-base) var(--ease-out);
}

.accordion-icon::before {
	width: 14px;
	height: 2px;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

.accordion-icon::after {
	width: 2px;
	height: 14px;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

/* Rotate vertical bar to form minus */
.accordion-trigger[aria-expanded=true] .accordion-icon::after {
	transform: translate(-50%, -50%) rotate(90deg);
	opacity: 0;
}

/* Auto-icon: triggers without an explicit .accordion-icon span get +/− via
   ::after (common in content converted from Bootstrap panels). */
.accordion-trigger:not(:has(.accordion-icon))::after {
	content: "";
	flex: 0 0 20px;
	width: 20px;
	height: 20px;
	margin-left: var(--space-3);
	background: linear-gradient(var(--band-accent, var(--au-navy)), var(--band-accent, var(--au-navy))) 50%/14px 2px no-repeat, linear-gradient(var(--band-accent, var(--au-navy)), var(--band-accent, var(--au-navy))) 50%/2px 14px no-repeat;
	transition: var(--duration-base) var(--ease-out);
}

.accordion-trigger[aria-expanded=true]:not(:has(.accordion-icon))::after {
	background: linear-gradient(var(--band-accent, var(--au-navy)), var(--band-accent, var(--au-navy))) 50%/14px 2px no-repeat;
}

/* Anchor remnants from Bootstrap collapse toggles: strip link styling so the
   trigger text looks like normal text, not a hyperlink. */
.accordion-trigger a {
	color: inherit;
	text-decoration: none;
}

/* Flag/icon images inside triggers: override base.css block display,
   size to text, and vertically center with the label. */
.accordion-trigger img {
	display: inline;
	height: 1.2em;
	width: auto;
	vertical-align: middle;
	margin-right: var(--space-2);
}

.accordion-panel {
	max-height: 0;
	overflow: hidden;
	transition: max-height var(--duration-slow) var(--ease-out);
}

/* the open height is set inline by js/accordion.js from the panel's real content
   (no fixed cap here — a hardcoded max-height clipped long panels and hid the
   body's bottom padding). */
.accordion-body {
	padding: var(--space-4) var(--space-5) var(--space-6);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
}

/* links inside the panel follow the band: normal link blue on light, gold on a
   dark band (where navy-blue would vanish). Hover stays gold on both. */
.accordion-body a {
	color: var(--band-accent, var(--au-navy-light));
}

/* headings authored in the rich-text panel follow the band heading colour too,
   so an <h3>/<strong> block stays legible on a dark band. */
.accordion-body :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* Fallback: panels whose content sits in a plain <div> (no .accordion-body class)
   still get body padding and typography. Common in Bootstrap-converted panels. */
.accordion-panel > div:not([class]) {
	padding: var(--space-4) var(--space-5) var(--space-6);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
}

.accordion-panel > div:not([class]) a {
	color: var(--band-accent, var(--au-navy-light));
}

.accordion-panel > div:not([class]) :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* ─── Tabbed panels ─── */
/* Boxed Tabs */
.tabs {
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
	overflow: hidden;
}

.tab-list {
	display: flex;
	background: var(--au-cream);
	border-bottom: 2px solid var(--au-gray-200);
	overflow-x: auto;
}

.tab-btn {
	font-family: var(--font-body);
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-warm-gray);
	background: transparent;
	border: none;
	padding: var(--space-4) var(--space-5);
	cursor: pointer;
	white-space: nowrap;
	position: relative;
}

.tab-btn:hover {
	color: var(--au-navy);
}

.tab-btn.active {
	color: var(--au-navy);
	background: var(--au-white);
}

/* Gold underline on active tab */
.tab-btn.active::after {
	content: "";
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
	height: 3px;
	background: var(--au-gold);
}

.tab-panel {
	display: none;
	padding: var(--space-5);
}

.tab-panel.active {
	display: block;
}

/* ─── Pill-Style Filter Tabs ─── */
.tab-list-pills {
	display: flex;
	gap: var(--space-2);
	flex-wrap: wrap;
	margin-bottom: var(--space-5);
}

.tab-pill {
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--au-warm-gray);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-sm);
	padding: var(--space-2) var(--space-4);
	cursor: pointer;
}

.tab-pill:hover {
	border-color: var(--au-navy);
	color: var(--au-navy);
}

.tab-pill.active {
	background: var(--au-navy);
	border-color: var(--au-navy);
	color: var(--au-white);
}

/* dialog.css · native <dialog> modal
   Trigger: [data-dialog-open="<id>"] opens <dialog id="<id>">
   JS: js/dialog.js (self-inits via init.js) */
.dialog {
	border: 0;
	border-radius: var(--radius-md);
	padding: 0;
	margin: auto;
	max-width: min(640px, 100vw - var(--space-8));
	max-height: calc(100vh - var(--space-10));
	width: 100%;
	box-shadow: var(--shadow-lg);
	overflow: hidden;
}

.dialog[open] {
	display: flex;
	flex-direction: column;
}

.dialog::backdrop {
	background: rgba(0, 31, 63, 0.55);
	backdrop-filter: blur(2px);
	-webkit-backdrop-filter: blur(2px);
}

.dialog-header {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-4);
	border-bottom: 1px solid var(--au-gray-200);
}

.dialog .dialog-title {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--au-navy);
	margin: 0;
	line-height: 1.3;
}

.dialog-close {
	flex-shrink: 0;
	background: none;
	border: 0;
	cursor: pointer;
	font-size: 1.25rem;
	line-height: 1;
	color: var(--au-gray-400);
	padding: 0;
	transition: color var(--duration-base);
}

.dialog-close:focus {
	outline: none;
}

.dialog-close:focus-visible {
	outline: 2px solid var(--au-gold);
	outline-offset: 2px;
	border-radius: var(--radius-sm);
}

.dialog-close:hover {
	color: var(--au-navy);
}

.dialog-body {
	padding: var(--space-4) var(--space-5);
	overflow-y: auto;
	overscroll-behavior: contain;
	font-size: var(--text-base);
	line-height: 1.6;
	color: var(--au-text);
}

.dialog-body > :first-child {
	margin-top: 0;
}

.dialog-body p + p {
	margin-top: var(--space-4);
}

.dialog-body img {
	max-width: 100%;
	height: auto;
	border-radius: var(--radius-md);
	margin-top: var(--space-4);
}

.dialog-img {
	width: 100%;
	aspect-ratio: 16/9;
	-o-object-fit: cover;
	   object-fit: cover;
	display: block;
}

@media (max-width: 600px) {
	.dialog[open] {
		max-width: 100vw;
		max-height: 100vh;
		border-radius: 0;
		margin: 0;
	}
	.dialog-header {
		padding: var(--space-2) var(--space-3);
	}
	.dialog-body {
		padding: var(--space-4);
	}
}
/* clickable triggers */
[data-dialog-open] {
	cursor: pointer;
}

.card[data-dialog-open]:hover {
	box-shadow: var(--shadow-md);
	transition: box-shadow var(--duration-base);
}

/* ════════════════════════════════════════════════════════════
   au-media.css  ·  Carousel, gallery & video
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── Carousel ─── */
.carousel {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-lg);
	aspect-ratio: 3/2;
}

.carousel-track {
	display: flex;
	height: 100%;
	transition: transform 0.5s var(--ease-out);
}

.carousel-slide {
	flex: 0 0 100%;
	height: 100%;
	position: relative;
}

.carousel-slide img {
	width: 100%;
	height: 100%;
	display: block;
	-o-object-fit: cover;
	   object-fit: cover;
}

/* Size variants override the default aspect ratio */
.carousel-compact {
	aspect-ratio: unset;
}

.carousel-compact .carousel-slide img {
	height: 320px;
}

.carousel-hero {
	aspect-ratio: unset;
	border-radius: 0;
}

.carousel-hero .carousel-slide img {
	height: 480px;
}

/* ── Peek variant ──
   Film-strip carousel: all images scaled to the same height, each slide
   is as wide as its image's natural proportions. Clicking centers the next
   image; narrower images show more of the neighboring slides on each side.
   The .carousel--peek has overflow:visible; .carousel-peek-wrap clips it. */
.carousel-peek-wrap {
	overflow: hidden;
}

.carousel--peek {
	overflow: visible;
	max-width: 850px;
	margin: 0 auto;
	aspect-ratio: 2/1; /* panoramic; overrides 3/2 from .carousel */
}

.carousel--peek .carousel-slide {
	flex: 0 0 auto; /* natural width per image, not 100% */
	height: 100%;
}

.carousel--peek .carousel-slide img {
	height: 100%;
	width: auto;
	display: block;
	-o-object-fit: initial;
	   object-fit: initial;
}

/* Caption overlay */
.carousel-caption {
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
	padding: var(--space-8) var(--space-6) var(--space-5);
	background: linear-gradient(transparent, rgba(0, 0, 0, 0.7));
	color: var(--au-white);
}

/* Prev/Next buttons */
.carousel-btn {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.9);
	border: none;
	cursor: pointer;
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
	z-index: 2;
	font-size: 18px;
	color: var(--au-navy);
}

.carousel-prev {
	left: var(--space-3);
}

.carousel-next {
	right: var(--space-3);
}

/* Dot indicators */
.carousel-dots {
	position: absolute;
	bottom: var(--space-3);
	left: 50%;
	transform: translateX(-50%);
	display: flex;
	gap: 8px;
	z-index: 2;
}

.carousel-dot {
	width: 10px;
	height: 10px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.5);
	border: none;
	cursor: pointer;
}

.carousel-dot.active {
	background: var(--au-white);
	transform: scale(1.2);
}

/* ─── Photo gallery + lightbox ─── */
.gallery {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
	gap: var(--space-3);
}

.gallery-item {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-md);
	cursor: pointer;
	aspect-ratio: 4/3;
}

.gallery-item img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
	transition: transform var(--duration-base);
}

.gallery-item:hover img {
	transform: scale(1.05);
}

/* Gallery orientation variants — add the modifier to the .gallery element in CKEditor source:
   .gallery--portrait  → tall/phone shots (headshots, portraits)
   .gallery--square    → square thumbnails
   .gallery--natural   → each image shows at its own natural proportions (masonry columns) */
.gallery--portrait .gallery-item {
	aspect-ratio: 3/4;
}

.gallery--square .gallery-item {
	aspect-ratio: 1;
}

.gallery--natural {
	display: block;
	-moz-columns: 3;
	     columns: 3;
	-moz-column-gap: var(--space-3);
	     column-gap: var(--space-3);
}

.gallery--natural .gallery-item {
	aspect-ratio: unset;
	-moz-column-break-inside: avoid;
	     break-inside: avoid;
	margin-bottom: var(--space-3);
}

.gallery--natural .gallery-item img {
	width: 100%;
	height: auto;
	-o-object-fit: unset;
	   object-fit: unset;
}

@media (max-width: 600px) {
	.gallery--natural {
		-moz-columns: 2;
		     columns: 2;
	}
}
/* Lightbox overlay */
.lightbox {
	position: fixed;
	inset: 0;
	background: rgba(0, 10, 20, 0.92);
	z-index: 1100;
	display: flex;
	align-items: center;
	justify-content: center;
	opacity: 0;
	visibility: hidden;
	transition: all var(--duration-base);
}

.lightbox.open {
	opacity: 1;
	visibility: visible;
}

.lightbox-img {
	max-width: 90vw;
	max-height: 85vh;
	-o-object-fit: contain;
	   object-fit: contain;
	border-radius: var(--radius-md);
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}

.lightbox-close,
.lightbox-nav {
	position: absolute;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.1);
	border: none;
	color: var(--au-white);
	cursor: pointer;
	width: 44px;
	height: 44px;
	display: flex;
	align-items: center;
	justify-content: center;
}

.lightbox-close {
	top: var(--space-5);
	right: var(--space-5);
}

.lightbox-prev {
	top: 50%;
	left: var(--space-5);
}

.lightbox-next {
	top: 50%;
	right: var(--space-5);
}

/* ─── Video embeds ─── */
.video {
	position: relative;
	border-radius: var(--radius-lg);
	overflow: hidden;
	background: #000;
	align-self: start;
	aspect-ratio: 16/9;
}

.video iframe,
.video video {
	display: block;
	width: 100%;
	height: 100%;
	border: none;
}

/* 16:9 responsive wrapper */
.video-responsive {
	position: relative;
	aspect-ratio: 16/9;
}

.video-responsive iframe,
.video-responsive video {
	display: block;
	width: 100%;
	height: 100%;
	border: none;
}

/* Poster thumbnail + play button */
.video-poster {
	position: relative;
	cursor: pointer;
}

.video-poster img {
	width: 100%;
	display: block;
	aspect-ratio: 16/9;
	-o-object-fit: cover;
	   object-fit: cover;
}

.video-play {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 72px;
	height: 72px;
	border-radius: 50%;
	background: rgba(0, 51, 102, 0.85);
	border: 3px solid rgba(255, 255, 255, 0.3);
	display: flex;
	align-items: center;
	justify-content: center;
}

/* CSS triangle play icon */
.video-play::after {
	content: "";
	border-style: solid;
	border-width: 12px 0 12px 22px;
	border-color: transparent transparent transparent var(--au-white);
	margin-left: 4px;
}

.video-poster:hover .video-play {
	background: var(--au-navy);
	border-color: var(--au-gold);
	transform: translate(-50%, -50%) scale(1.1);
}

.video-caption {
	padding: var(--space-3) var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	background: var(--au-cream);
}

/* ════════════════════════════════════════════════════════════
   team.css  ·  staff / "meet the team" grid  (deptstaffindex.dt)
   Depends on: tokens.css
   A responsive grid of people — portrait photo, name, role, contact.
   Photos lead (they get the space); the old Photo/Name/Contact table is gone.
   ════════════════════════════════════════════════════════════ */
.team {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
	gap: var(--space-10) var(--space-6);
}

.team-photo {
	display: block;
	overflow: hidden;
	border-radius: var(--radius-md);
	background: var(--au-gray-200);
}

.team-photo img {
	width: 100%;
	aspect-ratio: 3/4;
	-o-object-fit: cover;
	object-fit: cover;
	transition: transform var(--duration-base) var(--ease-out);
}

.team-photo:hover img {
	transform: scale(1.04);
}

.team-name {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	line-height: 1.2;
	margin-top: var(--space-4);
}

.team-name a {
	color: var(--au-navy);
	text-decoration: none;
}

.team-name a:hover {
	color: var(--au-gold);
}

.team-role {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.4;
	margin-top: var(--space-1);
}

.team-contact {
	list-style: none;
	margin: var(--space-3) 0 0;
	padding: 0;
	font-size: var(--text-sm);
	color: var(--au-text);
	display: flex;
	flex-direction: column;
	gap: var(--space-1);
}

.team-contact a {
	color: var(--au-navy-light);
	text-decoration: none;
}

.team-contact a:hover {
	color: var(--au-gold);
}

.team-contact .team-appt {
	font-weight: 600;
}

/* ════════════════════════════════════════════════════════════
   individual staff profile  (deptstaffitem.dt) — renders inside .page-main.
   FOUR selectable layouts, chosen per section (index CT) or per person
   (item CT): .staff--feature · .staff--card · .staff--centered · .staff--split.
   Shared pieces first, then per-layout blocks.
   ════════════════════════════════════════════════════════════ */
/* ─── shared: portrait, name, role, facts, links, contact chips, body ─── */
.staff-portrait img {
	display: block;
	width: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
	background: var(--au-gray-200);
}

.page-main h1.staff-name {
	margin: 0;
	padding-bottom: 0;
	font-size: var(--text-3xl);
	line-height: 1.05;
	letter-spacing: -0.01em;
	color: var(--au-navy);
}

.page-main h1.staff-name::after {
	display: none;
} /* no page-header gold rule here */
.page-main .staff-role {
	margin: var(--space-2) 0 0;
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	font-size: var(--text-lg);
	line-height: 1.35;
	color: var(--au-navy-light);
}

.page-main .staff-facts {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	font-size: var(--text-base);
}

.staff-facts li {
	display: flex;
	gap: var(--space-4);
}

.staff-facts li > span:last-child {
	min-width: 0;
	overflow-wrap: break-word;
}

.staff-facts .fact-label {
	flex: 0 0 4.5rem;
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--au-warm-gray);
	padding-top: 0.25em;
}

.staff-facts a {
	color: var(--au-navy-light);
	text-decoration: none;
}

.staff-facts a:hover {
	color: var(--au-gold);
}

.page-main .staff-links {
	list-style: none;
	margin: var(--space-4) 0 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	font-size: var(--text-sm);
}

.staff-links a {
	color: var(--au-navy-light);
	text-decoration: none;
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
}

.staff-links a:hover {
	color: var(--au-gold);
}

.staff-links i {
	color: var(--au-gold);
	font-size: 0.85em;
	width: 1em;
	text-align: center;
}

/* contact chips/pills (feature + centered) */
.staff-contact {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-3);
}

.staff-contact a {
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
	font-size: var(--text-sm);
	text-decoration: none;
	padding: var(--space-2) var(--space-4);
	border-radius: var(--radius-full);
	transition: background var(--duration-fast) var(--ease-out);
}

.staff-contact svg {
	width: 15px;
	height: 15px;
	fill: none;
	stroke-width: 1.8;
	flex-shrink: 0;
}

/* appointment button (card + split reuse .btn) */
.staff-appt {
	margin-top: var(--space-6);
}

/* shared prose body — gold Plex-Mono eyebrows on the section headings */
.staff-body {
	margin-top: var(--space-10);
	overflow-wrap: break-word;
}

.page-main .staff-body h2 {
	font-family: var(--font-mono);
	font-weight: 600;
	font-size: var(--text-xs);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--au-gold);
	margin-top: var(--space-8);
	margin-bottom: var(--space-3);
}

.page-main .staff-body > h2:first-child {
	margin-top: 0;
}

.staff-body p {
	line-height: 1.72;
}

/* ─── A · Editorial Feature — navy hero band, gold-framed portrait ─── */
.staff--feature .staff-hero {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-lg);
	padding: var(--space-8);
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-deep));
	color: #fff;
}

.staff--feature .staff-hero::before {
	content: "";
	position: absolute;
	right: -80px;
	top: -80px;
	width: 260px;
	height: 260px;
	border-radius: 50%;
	background: radial-gradient(circle, rgba(232, 184, 75, 0.14), transparent 68%);
}

.staff--feature .staff-hero-inner {
	position: relative;
	display: grid;
	grid-template-columns: 180px 1fr;
	gap: var(--space-8);
	align-items: center;
}

.staff--feature .staff-portrait {
	width: 180px;
}

.staff--feature .staff-portrait img {
	aspect-ratio: 4/5;
	border-radius: var(--radius-md);
	border: 3px solid rgba(232, 184, 75, 0.85);
	box-shadow: 0 14px 34px rgba(0, 0, 0, 0.4);
}

.page-main .staff--feature h1.staff-name {
	color: #fff;
	font-size: var(--text-4xl);
	line-height: 1.02;
}

.staff--feature .staff-role {
	color: #e7ddc9;
}

.staff--feature .staff-contact {
	margin-top: var(--space-5);
}

.staff--feature .staff-contact a {
	color: #fff;
	background: rgba(255, 255, 255, 0.09);
	border: 1px solid rgba(255, 255, 255, 0.16);
}

.staff--feature .staff-contact a:hover {
	background: rgba(255, 255, 255, 0.16);
}

.staff--feature .staff-contact svg {
	stroke: var(--au-gold-light);
}

.staff--feature .staff-contact a.is-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
	font-weight: 600;
}

.staff--feature .staff-contact a.is-primary svg {
	stroke: var(--au-navy-deep);
}

.staff--feature .staff-links {
	margin-top: var(--space-6);
}

.staff--feature .staff-body {
	max-width: 70ch;
}

@media (max-width: 560px) {
	.staff--feature .staff-hero-inner {
		grid-template-columns: 1fr;
		justify-items: start;
	}
}
/* ─── B · Contact Card Rail — sticky cream card + scrolling bio ─── */
.staff--card .staff-cols {
	display: grid;
	grid-template-columns: 280px 1fr;
	gap: var(--space-8);
	align-items: start;
	min-width: 0;
}

.staff--card .staff-card {
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-top: 3px solid var(--au-gold);
	border-radius: var(--radius-lg);
	padding: var(--space-5);
	box-shadow: var(--shadow-md);
	position: sticky;
	top: calc(var(--header-height) + var(--space-3));
}

.staff--card .staff-portrait img {
	aspect-ratio: 4/5;
	border-radius: var(--radius-md);
	margin-bottom: var(--space-4);
}

.page-main .staff--card h1.staff-name {
	font-size: var(--text-2xl);
}

.staff--card .staff-role {
	font-size: var(--text-md);
}

.staff--card .staff-facts {
	border-top: 1px solid var(--au-gray-200);
	margin-top: var(--space-4);
	padding-top: var(--space-4);
	font-size: var(--text-sm);
}

.staff--card .fact-label {
	flex: 0 0 3.5rem;
}

.staff--card .staff-appt {
	display: flex;
	width: 100%;
	margin-top: var(--space-4);
}

.staff--card .staff-body {
	margin-top: 0;
	min-width: 0;
}

@media (max-width: 720px) {
	.staff--card .staff-cols {
		grid-template-columns: 1fr;
	}
	.staff--card .staff-card {
		position: static;
	}
}
/* ─── C · Centered Portrait — symmetrical, gold corner + flourish ─── */
.staff--centered {
	max-width: 760px;
	margin-inline: auto;
	text-align: center;
}

.staff--centered .staff-portrait {
	position: relative;
	width: 210px;
	margin: 0 auto var(--space-5);
}

.staff--centered .staff-portrait img {
	aspect-ratio: 4/5;
	border-radius: var(--radius-lg);
}

.staff--centered .staff-portrait::after {
	content: "";
	position: absolute;
	right: -12px;
	bottom: -12px;
	width: 64px;
	height: 64px;
	border-right: 3px solid var(--au-gold);
	border-bottom: 3px solid var(--au-gold);
	border-radius: 0 0 var(--radius-lg) 0;
}

.staff--centered .staff-rule {
	width: 44px;
	height: 3px;
	margin: var(--space-4) auto;
	background: var(--au-gold);
	border-radius: 2px;
}

.staff--centered .staff-role {
	color: var(--au-warm-gray);
}

.staff--centered .staff-contact {
	justify-content: center;
	margin-top: var(--space-5);
}

.staff--centered .staff-contact a {
	color: var(--au-navy);
	background: var(--au-gold-pale);
	border: 1px solid #f0e2c4;
}

.staff--centered .staff-contact a:hover {
	background: #fbeecf;
}

.staff--centered .staff-contact svg {
	stroke: var(--au-gold);
}

.staff--centered .staff-contact a.is-primary {
	background: var(--au-navy);
	color: #fff;
	border-color: var(--au-navy);
}

.staff--centered .staff-contact a.is-primary svg {
	stroke: var(--au-gold-light);
}

.staff--centered .staff-body {
	max-width: 62ch;
	margin: var(--space-8) auto 0;
	padding-top: var(--space-8);
	border-top: 1px solid var(--au-gray-200);
	text-align: left;
}

/* ─── D · Split Feature — full-height portrait + cream panel ─── */
.staff--split .staff-top {
	display: grid;
	grid-template-columns: 42% 1fr;
	border-radius: var(--radius-lg);
	overflow: hidden;
}

.staff--split .staff-portrait {
	height: 100%;
}

.staff--split .staff-portrait img {
	height: 100%;
	min-height: 360px;
	border-radius: 0;
}

.staff--split .staff-panel {
	background: var(--au-cream);
	padding: var(--space-8);
	display: flex;
	flex-direction: column;
	justify-content: center;
}

.page-main .staff--split h1.staff-name {
	font-size: var(--text-3xl);
}

.staff--split .staff-role {
	color: var(--au-navy-light);
}

.staff--split .staff-facts {
	margin-top: var(--space-5);
}

.staff--split .staff-appt {
	align-self: start;
}

.staff--split .staff-body {
	max-width: 74ch;
}

@media (max-width: 640px) {
	.staff--split .staff-top {
		grid-template-columns: 1fr;
	}
	.staff--split .staff-portrait img {
		min-height: 300px;
	}
}
/* ════════════════════════════════════════════════════════════
   bio directory — portrait grid  (components/bio.tt)
   Photo-forward people cards: a portrait headshot on top, then name +
   blurb. Auto-fills across the section and reflows down (/code/2027/…→3→2→1) as the
   viewport narrows — no breakpoints needed. Reads as a faculty directory,
   distinct from the columns card grid and the Meet-the-Team portrait grid.
   ════════════════════════════════════════════════════════════ */
/* standalone rich-text intro above the directory (the section's "text" area).
   Band-aware so it reads on dark bands; a readable measure for plain copy. */
.bio-intro {
	max-width: var(--max-width-text);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
	margin-bottom: var(--space-10);
}

.bio-intro > :first-child {
	margin-top: 0;
}

.bio-intro :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

.bio-intro a {
	color: var(--band-accent, var(--au-navy-light));
}

.bio-intro p + p {
	margin-top: var(--space-4);
}

.bio-directory {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
	gap: var(--space-8) var(--space-6);
}

.bio-entry {
	display: flex;
	flex-direction: column;
}

.bio-photo img {
	display: block;
	width: 100%;
	aspect-ratio: 4/5;
	-o-object-fit: cover;
	   object-fit: cover;
	border-radius: var(--radius-md);
	background: var(--au-gray-200);
}

.bio-name {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--band-heading, var(--au-navy));
	line-height: 1.2;
	margin-top: var(--space-4);
}

.bio-blurb {
	margin-top: var(--space-2);
	color: var(--band-body, var(--au-warm-gray));
	font-size: var(--text-sm);
	line-height: 1.6;
	overflow-wrap: break-word;
}

.bio-blurb p + p {
	margin-top: var(--space-2);
}

/* single-person bio — horizontal card instead of the portrait-grid column */
.bio-entry:only-child {
	grid-column: 1/-1;
	background: var(--au-cream);
	border-radius: var(--radius-lg);
	padding: var(--space-6);
	max-width: 640px;
}

.bio-entry:only-child .bio-photo img {
	aspect-ratio: 3/4;
}

@media (min-width: 601px) {
	.bio-entry:only-child {
		flex-direction: row;
		gap: var(--space-6);
	}
	.bio-entry:only-child .bio-photo {
		flex: 0 0 200px;
	}
	.bio-entry:only-child .bio-detail {
		min-width: 0;
	}
	.bio-entry:only-child .bio-name {
		margin-top: 0;
	}
}
@media (max-width: 600px) {
	.bio-entry:only-child .bio-photo {
		max-width: 200px;
	}
}
/* decorative image-only rows span the whole grid width */
.bio-figure {
	grid-column: 1/-1;
}

.bio-figure img {
	width: 100%;
	border-radius: var(--radius-lg);
}

/* ════════════════════════════════════════════════════════════
   dept.css  ·  department section-page template (dept_main.wrap)
   Depends on: tokens.css, layout.css (.section bands)

   A department variant of the homepage-advanced display: a sticky dark
   navy rail (department identity + section jump-nav + CTAs) beside the
   normal page.dt section stack. Same sections, same content types —
   only the surround differs.

   ONE rail, two states (the demo's separate sidebar + icon-strip are
   merged so there's a single set of markup to maintain):
     ≥1080   full rail, labels visible
     <1080   collapses to a slim dot strip; the toggle opens it as an
             overlay panel over a backdrop
   ════════════════════════════════════════════════════════════ */
:root {
	--dept-rail-w: 250px; /* expanded rail */
	--dept-strip-w: 60px; /* collapsed dot strip */
}

/* ─── LAYOUT ─── */
.dept-layout {
	display: flex;
	align-items: flex-start;
}

.dept-main {
	flex: 1;
	min-width: 0;
}

/* Sections inside the dept column keep the band system but sit in a
   narrower measure, so the inner max-width rarely binds — pull the
   horizontal padding in a little so content isn't crowded to the rail. */
.dept-main .section {
	padding-inline: var(--space-8);
}

.dept-main .section-inner {
	max-width: 1000px;
	margin-inline: 0;
}

/* ─── RAIL ─── */
.dept-rail {
	width: var(--dept-rail-w);
	flex-shrink: 0;
	position: sticky;
	top: var(--header-height);
	height: calc(100vh - var(--header-height));
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.85);
	border-right: 1px solid rgba(255, 255, 255, 0.07);
	display: flex;
	flex-direction: column;
	overflow: hidden;
	z-index: 60;
	transition: width var(--duration-base) var(--ease-out);
}

.dept-rail-scroll {
	flex: 1;
	overflow-y: auto;
	overscroll-behavior: contain;
	padding: var(--space-6) 0 var(--space-4);
	scrollbar-width: thin;
	scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
}

.dept-rail-scroll::-webkit-scrollbar {
	width: 6px;
}

.dept-rail-scroll::-webkit-scrollbar-thumb {
	background: rgba(255, 255, 255, 0.2);
	border-radius: 3px;
}

/* department identity */
.dept-id {
	padding: 0 var(--space-5) var(--space-5);
}

.dept-id-eye {
	display: block;
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--au-gold-light);
	margin-bottom: var(--space-1);
}

.dept-id-name {
	display: block;
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	line-height: 1.25;
	color: var(--au-white);
}

/* jump-nav */
.dept-nav-title {
	padding: 0 var(--space-5) var(--space-3);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.45);
}

.dept-link {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-5);
	font-size: var(--text-sm);
	line-height: 1.35;
	color: rgba(255, 255, 255, 0.72);
	text-decoration: none;
	border-left: 2px solid transparent;
	transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
}

.dept-link:hover {
	background: rgba(255, 255, 255, 0.06);
	color: var(--au-white);
}

.dept-link.is-current {
	color: var(--au-white);
	font-weight: 600;
	border-left-color: var(--au-gold);
	background: rgba(255, 255, 255, 0.05);
}

/* wayfinding dot — the demo used six hues; kept on-palette here, with the
   active state (gold, filled) carrying the signal instead of colour count */
.dept-dot {
	flex-shrink: 0;
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.28);
	transition: background var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out);
}

.dept-link.is-current .dept-dot {
	background: var(--au-gold);
	transform: scale(1.25);
}

.dept-link-label {
	min-width: 0;
}

/* rail footer — CTAs + dept mark */
.dept-rail-bottom {
	flex-shrink: 0;
	padding: var(--space-4) var(--space-5) var(--space-5);
	border-top: 1px solid rgba(255, 255, 255, 0.08);
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
}

.dept-cta {
	display: block;
	text-align: center;
	padding: var(--space-3) var(--space-4);
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
	font-weight: 600;
	text-decoration: none;
	border: 2px solid transparent;
	transition: all var(--duration-base) var(--ease-out);
}

.dept-cta-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

.dept-cta-primary:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
}

.dept-cta-ghost {
	color: var(--au-gold-light);
	border-color: rgba(255, 255, 255, 0.3);
}

.dept-cta-ghost:hover {
	background: rgba(255, 255, 255, 0.08);
	border-color: var(--au-gold-light);
	color: var(--au-white);
}

/* institutional lockup at the foot of the rail */
.dept-mark {
	margin-top: var(--space-4);
	opacity: 0.75;
}

.dept-mark img {
	height: 26px;
	width: auto;
}

.dept-mark a:hover {
	opacity: 1;
}

/* toggle — hidden on desktop, becomes the strip control below 1080 */
.dept-rail-toggle {
	display: none;
	align-items: center;
	gap: var(--space-3);
	width: 100%;
	padding: var(--space-4) var(--space-5);
	background: none;
	border: 0;
	border-bottom: 1px solid rgba(255, 255, 255, 0.08);
	color: var(--au-white);
	cursor: pointer;
	text-align: left;
}

.dept-ham {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 4px;
	width: 18px;
	flex-shrink: 0;
}

.dept-ham span {
	height: 2px;
	background: currentColor;
	border-radius: 2px;
	transition: transform var(--duration-base) var(--ease-out), opacity var(--duration-base);
}

.dept-rail-toggle[aria-expanded=true] .dept-ham span:nth-child(1) {
	transform: translateY(6px) rotate(45deg);
}

.dept-rail-toggle[aria-expanded=true] .dept-ham span:nth-child(2) {
	opacity: 0;
}

.dept-rail-toggle[aria-expanded=true] .dept-ham span:nth-child(3) {
	transform: translateY(-6px) rotate(-45deg);
}

.dept-toggle-label {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.14em;
	text-transform: uppercase;
}

.dept-backdrop {
	display: none;
	position: fixed;
	inset: 0;
	background: rgba(0, 26, 51, 0.45);
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--duration-base), visibility var(--duration-base);
	z-index: 55;
}

body.dept-rail-open .dept-backdrop {
	opacity: 1;
	visibility: visible;
}

/* ─── COLLAPSED STRIP (<1080) ─── */
@media (max-width: 1080px) {
	.dept-rail {
		width: var(--dept-strip-w);
	}
	.dept-rail-toggle {
		display: flex;
	}
	.dept-backdrop {
		display: block;
	}
	/* strip state: dots only */
	.dept-rail .dept-id,
	.dept-rail .dept-nav-title,
	.dept-rail .dept-rail-bottom,
	.dept-rail .dept-link-label,
	.dept-rail .dept-toggle-label {
		display: none;
	}
	.dept-link {
		justify-content: center;
		padding-inline: 0;
	}
	/* expanded overlay */
	.dept-rail.is-open {
		width: var(--dept-rail-w);
		box-shadow: 0 12px 40px rgba(0, 0, 0, 0.35);
	}
	.dept-rail.is-open .dept-id,
	.dept-rail.is-open .dept-nav-title,
	.dept-rail.is-open .dept-rail-bottom,
	.dept-rail.is-open .dept-link-label,
	.dept-rail.is-open .dept-toggle-label {
		display: block;
	}
	.dept-rail.is-open .dept-rail-bottom {
		display: flex;
	}
	.dept-rail.is-open .dept-link {
		justify-content: flex-start;
		padding-inline: var(--space-5);
	}
	.dept-main .section {
		padding-inline: var(--space-6);
	}
}
/* below the strip's usefulness: rail goes horizontal-free, content leads */
/* Very narrow: the rail STAYS a vertical side strip — it never becomes a
   full-width bar across the top (that's how the demo's icon strip behaves,
   and it keeps the page nav reachable without scrolling back up). Only the
   strip width and the content gutters tighten. */
@media (max-width: 700px) {
	:root {
		--dept-strip-w: 48px;
	}
	.dept-main .section {
		padding-inline: var(--space-5);
	}
	.dept-stats, .dept-enroll {
		padding-inline: var(--space-5);
	}
	/* the expanded overlay leaves a sliver of content + backdrop visible */
	.dept-rail.is-open {
		width: min(var(--dept-rail-w), 78vw);
	}
	.dept-link {
		padding-block: var(--space-3);
	} /* finger-friendly dots */
}
/* ════════════════════════════════════════════════════════════
   stats band  (components/stats.tt · content type `stats`)
   ════════════════════════════════════════════════════════════ */
.stats-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
	gap: var(--space-6);
}

.stat {
	text-align: center;
}

.stat-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 3rem;
	height: 3rem;
	margin-bottom: var(--space-3);
	border-radius: var(--radius-full);
	background: var(--band-icon-bg, var(--au-gold-pale));
	color: var(--band-icon-fg, var(--au-gold));
	font-size: var(--text-lg);
}

.stat-num {
	font-family: var(--font-display);
	font-size: var(--text-3xl);
	font-weight: 600;
	line-height: 1;
	color: var(--band-heading, var(--au-navy));
}

.stat-label {
	margin-top: var(--space-2);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.4;
}

/* on a dark band */
/* ════════════════════════════════════════════════════════════
   CTA bar  (components/cta-bar.tt · content type `cta_bar`)
   A slim full-width band: a message beside an action button.
   ════════════════════════════════════════════════════════════ */
.cta-bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-4) var(--space-8);
}

.cta-bar-text {
	flex: 1 1 320px;
	font-family: var(--font-display);
	font-size: var(--text-xl);
	line-height: 1.3;
	color: var(--band-heading, var(--au-navy));
}

.cta-bar .btn {
	flex-shrink: 0;
}

/* ════════════════════════════════════════════════════════════
   TOP CHROME BANDS (dept_main.wrap) — compact strips between the
   hero and the rail, matching the department demo. These are NOT
   .section bands: the demo's are slim (a navy stats strip and a gold
   enrolment bar), where a full .section's 80px rhythm reads far too
   heavy directly under the hero.

   They re-skin the shared .stat* / cta pieces rather than duplicating
   markup, so components/stats.tt keeps its roomier in-flow treatment.
   ════════════════════════════════════════════════════════════ */
/* stats strip — navy, light-on-dark, hairline dividers between cells */
.dept-stats {
	background: var(--au-navy);
	padding: var(--space-5) var(--gutter);
}

.dept-stats-inner {
	max-width: var(--max-width);
	margin-inline: auto;
}

.dept-stats .stats-grid {
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 0;
}

.dept-stats .stat {
	padding: var(--space-3) var(--space-5);
	position: relative;
}

.dept-stats .stat + .stat::before {
	content: "";
	position: absolute;
	left: 0;
	top: 18%;
	bottom: 18%;
	width: 1px;
	background: rgba(255, 255, 255, 0.14);
}

/* bare gold glyph — no pale circle chip at this size */
.dept-stats .stat-icon {
	width: auto;
	height: auto;
	margin: 0 auto var(--space-2);
	background: none;
	border-radius: 0;
	color: var(--au-gold);
	font-size: var(--text-lg);
}

.dept-stats .stat-num {
	font-size: var(--text-lg);
	color: var(--au-white);
	margin-bottom: var(--space-1);
}

.dept-stats .stat-label {
	font-size: var(--text-xs);
	color: rgba(255, 255, 255, 0.5);
	line-height: 1.5;
	margin-top: 0;
}

@media (max-width: 760px) {
	.dept-stats .stats-grid {
		grid-template-columns: 1fr;
	}
	.dept-stats .stat + .stat::before {
		left: 18%;
		right: 18%;
		top: 0;
		bottom: auto;
		width: auto;
		height: 1px;
	}
}
/* enrolment bar — slim gold strip, serif message + dark button */
.dept-enroll {
	background: var(--au-gold);
	padding: var(--space-3) var(--gutter);
}

.dept-enroll-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-3) var(--space-5);
}

.dept-enroll-text {
	font-family: var(--font-display);
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--au-navy-deep);
	line-height: 1.35;
}

.dept-enroll-text small {
	display: block;
	font-family: var(--font-body);
	font-weight: 400;
	font-size: var(--text-xs);
	color: rgba(0, 26, 51, 0.72);
	margin-top: 2px;
}

.dept-enroll .btn {
	flex-shrink: 0;
}

/* ════════════════════════════════════════════════════════════
   variants.css  ·  section style variants
   Depends on: tokens.css, layout.css (.section bands + --band-* tokens)

   Alternate looks for existing content types, selected by a `col-<name>`
   token in a section's custom_class and dispatched by the content type's
   renderer (see components/columns.tt → components/columns/*.tt). One
   content type + one CMS form drives many displays; this file holds their
   markup styling. Add a variant: a components/columns/<name>.tt renderer,
   an entry in columns.tt's variant_map, and a block here.

   Band adaptation is via the --band-* CONTEXT TOKENS layout.css sets on dark
   bands — there are NO per-band selector lists here. The rule of thumb:
     · content sitting on a WHITE card (programs) keeps light-mode colours;
       only the card chrome (border width, shadow) reads the band tokens.
     · content directly on the band, or on a translucent card (careers,
       intro, quote, profile) reads the band tokens for its text too.
   ════════════════════════════════════════════════════════════ */
/* ─── col-programs · program cards (white card; only chrome tracks the band) ───
   Two modes from one renderer: a PHOTO card (badge over image + whole-card
   link) when a photo is uploaded, and a flat TEXT card (gold top rule) when
   it isn't. auto-fit so N items fill the row rather than leaving empty tracks. */
.programs-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: var(--space-6);
}

.program-card {
	display: flex;
	flex-direction: column;
	background: var(--au-white);
	border: var(--band-card-border-w, 1px) solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	overflow: hidden;
	box-shadow: var(--band-card-shadow, none);
	text-decoration: none;
	transition: box-shadow var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out);
}

.program-card:hover {
	box-shadow: var(--band-card-shadow-hover, var(--shadow-md));
	transform: translateY(-2px);
}

/* text card: gold top rule + padded body (media card pads .program-body instead) */
.program-card:not(.program-card--media) {
	border-top: 3px solid var(--au-gold);
	padding: var(--space-6);
}

/* photo header */
.program-img {
	position: relative;
	aspect-ratio: 4/3;
	background: var(--au-gray-200);
}

.program-img img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
	display: block;
}

.program-overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(0, 26, 51, 0.4), transparent 45%);
}

.program-badge {
	position: absolute;
	left: var(--space-4);
	bottom: var(--space-4);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--au-gold-light);
	background: rgba(0, 26, 51, 0.82);
	padding: var(--space-1) var(--space-3);
	border-radius: var(--radius-full);
}

.program-body {
	display: flex;
	flex-direction: column;
	flex: 1;
	padding: var(--space-6);
}

.program-kicker {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--au-gold);
	margin-bottom: var(--space-2);
}

.program-name {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	font-weight: 600;
	color: var(--au-navy);
	line-height: 1.2;
}

.program-name a {
	color: inherit;
	text-decoration: none;
}

.program-name a:hover {
	color: var(--au-navy-light);
}

.program-card--media:hover .program-name {
	color: var(--au-navy-light);
}

.program-desc {
	margin-top: var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.6;
	flex: 1;
}

.program-link {
	margin-top: var(--space-4);
	align-self: flex-start;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
	text-decoration: none;
}

.program-link:hover {
	color: var(--au-gold);
}

/* optional section-header CTA button (leading header card's link) */
.section-head-cta {
	margin-top: var(--space-6);
}

/* media-card CTA — gold mono cue with a nudging chevron */
.program-cta {
	margin-top: var(--space-4);
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--au-gold);
}

.program-cta svg {
	width: 13px;
	height: 13px;
	fill: none;
	stroke: currentColor;
	stroke-width: 2.5;
	transition: transform var(--duration-base) var(--ease-out);
}

.program-card--media:hover .program-cta svg {
	transform: translateX(3px);
}

/* ─── col-quote · impact pull-quote (on the band) ─── */
.impact-quote {
	max-width: 760px;
	margin-inline: auto;
	text-align: center;
}

.impact-quote blockquote {
	border: 0;
	margin: 0;
	padding: 0;
	font-family: var(--font-display);
	font-style: italic;
	font-size: clamp(var(--text-xl), 3.5vw, var(--text-3xl));
	line-height: 1.35;
	color: var(--band-heading, var(--au-navy));
}

.impact-quote blockquote p {
	margin: 0;
}

.impact-quote blockquote p + p {
	margin-top: var(--space-3);
}

.impact-quote blockquote::before {
	content: "“";
	display: block;
	font-size: 3rem;
	line-height: 0.6;
	color: var(--au-gold);
	margin-bottom: var(--space-3);
}

.impact-quote figcaption {
	margin-top: var(--space-5);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
}

.impact-cite-name {
	font-weight: 700;
	color: var(--band-heading, var(--au-navy));
}

.impact-cite-role {
	display: block;
	font-size: var(--text-xs);
	color: var(--band-body, var(--au-warm-gray));
	margin-top: 2px;
}

/* ─── col-intro · split copy + image collage (on the band) ─── */
.intro-split {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-10);
	align-items: center;
}

.intro-split > .intro-copy:only-child {
	grid-column: 1/-1;
} /* no images → copy spans full width */
.intro-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 3.2vw, var(--text-3xl));
	line-height: 1.15;
	color: var(--band-accent, var(--au-navy));
	font-weight: 400;
}

/* muted white eyebrow so the gold headline leads (overrides the band's gold) */
.intro-copy .section-label {
	margin-bottom: var(--space-3);
	color: rgba(255, 255, 255, 0.7);
}

.intro-body {
	margin-top: var(--space-4);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.8;
}

.intro-body p + p {
	margin-top: var(--space-4);
}

.intro-ctas {
	margin-top: var(--space-6);
	display: flex;
	gap: var(--space-4);
	flex-wrap: wrap;
}

/* ghost button on the (dark) intro band: translucent outline, gold on hover */
.intro-ctas .btn-ghost {
	background: transparent;
	color: rgba(255, 255, 255, 0.82);
	border-color: rgba(255, 255, 255, 0.32);
}

.intro-ctas .btn-ghost:hover {
	background: rgba(255, 255, 255, 0.06);
	border-color: var(--au-gold);
	color: var(--au-white);
}

.intro-media {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-3);
}

.intro-img {
	margin: 0;
	border-radius: var(--radius-md);
	overflow: hidden;
	aspect-ratio: 4/3;
	background: var(--au-gray-200);
}

.intro-img img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.intro-img-wide {
	grid-column: span 2;
	aspect-ratio: 16/7;
}

@media (max-width: 820px) {
	.intro-split {
		grid-template-columns: 1fr;
		gap: var(--space-6);
	}
}
/* ─── col-careers · salary cards (translucent on dark → text tracks the band) ─── */
.career-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: var(--space-5);
}

/* each card is a 2-row subgrid (head / body) sharing the grid's row tracks, so
   the title row sizes to the tallest title in the row — titles collapse to one
   line together when none wrap, and align when one does. The row GAP between
   head and body is the grid's own gap (space-5). */
.career-card {
	display: grid;
	grid-template-rows: subgrid;
	grid-row: span 2;
	background: var(--band-card-bg, var(--au-white));
	border: 1px solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	padding: var(--space-6);
}

.career-deg {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--band-eyebrow, var(--au-gold));
	margin-bottom: var(--space-2);
}

.career-title {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	font-weight: 600;
	color: var(--band-heading, var(--au-navy));
	line-height: 1.2;
}

/* One text area holds salary + source + blurb; the editor marks them up and the
   card styles them to the mockup:
     <strong> (its own line)  → the salary figure: big gold display number
     <em>      (its own line) → the source line: uppercase caps + a hairline under it
     plain paragraph(s)       → the description
   The big-salary treatment is scoped to the FIRST line, so an inline bold inside
   the description stays normal. */
.career-desc {
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
}

.career-desc p {
	margin: 0;
}

.career-desc p + p {
	margin-top: var(--space-3);
}

.career-desc p:first-child strong, .career-desc p:first-child b {
	display: block;
	font-family: var(--font-display);
	font-weight: 400;
	font-size: var(--text-2xl);
	line-height: 1.1;
	color: var(--band-accent, var(--au-gold));
}

.career-desc em, .career-desc i {
	font-style: normal;
	font-size: var(--text-xs);
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--band-body, var(--au-warm-gray));
}

.career-desc p:has(em), .career-desc p:has(i) {
	border-bottom: 1px solid var(--band-hairline, var(--au-gray-200));
	padding-bottom: var(--space-4);
	margin-bottom: var(--space-4);
}

/* ─── col-media · overlay cards, hover-reveal (self-contained; band-agnostic) ─── */
.col-media .section-head {
	margin-bottom: var(--space-8);
} /* tighter head→cards gap than the 64px default */
.media-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: var(--space-5);
}

.media-card {
	position: relative;
	display: block;
	overflow: hidden;
	border-radius: var(--radius-lg);
	aspect-ratio: 4/3;
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	text-decoration: none;
}

.media-card img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.media-overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(0, 26, 51, 0.9) 0%, rgba(0, 26, 51, 0.1) 60%);
}

.media-content {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	padding: var(--space-5);
}

.media-eye {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--au-gold-light);
	margin-bottom: 2px;
}

.media-name {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--au-white);
}

.media-desc {
	margin-top: var(--space-1);
	font-size: var(--text-sm);
	color: rgba(255, 255, 255, 0.72);
	line-height: 1.55;
	max-height: 0;
	opacity: 0;
	overflow: hidden;
	transition: max-height var(--duration-slow) var(--ease-out), opacity var(--duration-base) var(--ease-out);
}

.media-card:hover .media-desc, .media-card:focus-visible .media-desc {
	max-height: 8rem;
	opacity: 1;
}

@media (hover: none) {
	.media-desc {
		max-height: 8rem;
		opacity: 1;
	}
}
/* ─── col-profile · featured person split (on the band) ─── */
.profile-split {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-10);
	align-items: center;
}

.col-profile.flip .profile-media {
	order: 2;
} /* image to the right */
.profile-media {
	border-radius: var(--radius-lg);
	overflow: hidden;
	aspect-ratio: 4/5;
	background: var(--au-gray-200);
}

.profile-media img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.profile-copy .section-label {
	margin-bottom: var(--space-3);
}

.profile-name {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 4vw, var(--text-3xl));
	font-weight: 600;
	line-height: 1.15;
	color: var(--band-heading, var(--au-navy));
}

.profile-cred {
	margin-top: var(--space-1);
	font-size: var(--text-sm);
	letter-spacing: 0.04em;
	color: var(--band-body, var(--au-warm-gray));
}

.profile-bio {
	margin-top: var(--space-4);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.8;
}

.profile-bio p + p {
	margin-top: var(--space-4);
}

/* credential sub-line — an italic first line in the bio content (careers-style
   markup): renders small, light and upright, hugging the name. */
.profile-bio:has(> p:first-child em) {
	margin-top: var(--space-2);
}

.profile-bio > p:first-child em {
	font-style: normal;
	font-size: var(--text-sm);
	letter-spacing: 0.04em;
	color: var(--band-body, var(--au-warm-gray));
}

.profile-bio blockquote {
	color: var(--band-quote, var(--au-navy));
}

@media (max-width: 820px) {
	.profile-split {
		grid-template-columns: 1fr;
		gap: var(--space-6);
	}
	.col-profile.flip .profile-media {
		order: 0;
	}
}
/* ════════════════════════════════════════════════════════════
   programs.css  ·  program explorer (search + filters + show-all)
   Depends on: tokens.css, layout.css (--band-* tokens), variants.css
   (.programs-grid / .program-card — the cards are the col-programs cards)
   Markup: components/programs_explorer.tt · behaviour: js/programs.js
   Reads the band tokens, so it works on white, cream or navy bands.
   ════════════════════════════════════════════════════════════ */
.programs-tools {
	display: flex;
	flex-direction: column;
	gap: var(--space-4);
	margin-bottom: var(--space-5);
}

/* search — icon inside the field */
.programs-search {
	position: relative;
	max-width: 560px;
}

.programs-search svg {
	position: absolute;
	left: var(--space-4);
	top: 50%;
	width: 18px;
	height: 18px;
	transform: translateY(-50%);
	fill: none;
	stroke: var(--au-warm-gray);
	stroke-width: 2.5;
	stroke-linecap: round;
	pointer-events: none;
}

.programs-search .input {
	padding-left: calc(var(--space-4) + 28px);
	border-color: var(--band-hairline, var(--au-gray-200));
}

.programs-search .input:focus {
	border-color: var(--au-gold);
}

/* filter chips + area-of-study select share one look */
.programs-filters {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2);
}

.programs-chip,
.programs-field {
	font-family: var(--font-body);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--band-heading, var(--au-navy));
	background: transparent;
	border: 2px solid var(--band-hairline, var(--au-gray-300));
	border-radius: var(--radius-full);
	padding: var(--space-2) var(--space-4);
	cursor: pointer;
	transition: border-color var(--duration-fast), background var(--duration-fast), color var(--duration-fast);
}

.programs-chip:hover,
.programs-field:hover {
	border-color: var(--band-accent, var(--au-navy));
}

.programs-chip[aria-pressed=true],
.programs-field.is-active {
	background: var(--au-gold);
	border-color: var(--au-gold);
	color: var(--au-navy-deep);
}

.programs-chip:focus-visible,
.programs-field:focus-visible {
	outline: 2px solid var(--au-gold-light);
	outline-offset: 2px;
}

.programs-field {
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	padding-right: calc(var(--space-4) + 16px);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23C6952B' stroke-width='3'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right var(--space-3) center;
	background-size: 12px;
}

.programs-field option {
	color: var(--au-text);
	background: var(--au-white);
	text-transform: none;
}

.programs-status {
	min-height: 1.5em;
	margin-bottom: var(--space-4);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--band-body, var(--au-warm-gray));
}

/* the sheet's images are wide banners — a wider crop than col-programs' 4:3 */
.programs-explorer .program-img {
	aspect-ratio: 16/9;
	overflow: hidden;
}

/* out of flow so a portrait photo (the grad pages' tall_image) can't stretch the frame */
.programs-explorer .program-img img {
	position: absolute;
	inset: 0;
}

/* portrait sources: a centred 16:9 slice lands on chests — favour the upper
   part of the frame, where the faces are */
.programs-explorer .program-img--tall img {
	-o-object-position: 50% 22%;
	   object-position: 50% 22%;
}

.programs-explorer .program-badge {
	max-width: calc(100% - 2 * var(--space-4));
}

.programs-explorer .program-card[hidden] {
	display: none;
}

.program-tags {
	list-style: none;
	margin: var(--space-3) 0 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2);
}

.program-tag {
	font-size: var(--text-xs);
	font-weight: 600;
	color: var(--au-navy);
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-full);
	padding: 2px var(--space-3);
}

.program-tag--accel {
	color: var(--au-navy-deep);
	background: var(--au-gold-pale);
	border-color: rgba(198, 149, 43, 0.35);
}

.programs-explorer .program-body {
	padding: var(--space-5);
}

.programs-explorer .program-cta {
	margin-top: auto;
	padding-top: var(--space-4);
}

.programs-empty {
	padding: var(--space-6) 0;
	text-align: center;
	color: var(--band-body, var(--au-warm-gray));
}

.programs-empty a {
	color: var(--band-link, var(--au-navy-light));
}

.programs-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--space-4);
	margin-top: var(--space-8);
}

/* outline button that reads on a dark band too */
.programs-explorer .programs-all-link {
	color: var(--band-heading, var(--au-navy));
	border-color: currentColor;
}

.programs-explorer .programs-all-link:hover {
	background: var(--au-navy);
	border-color: var(--au-navy);
	color: var(--au-white);
}

.programs-explorer[class*=section--navy] .programs-all-link:hover {
	background: var(--au-white);
	border-color: var(--au-white);
	color: var(--au-navy-deep);
}

@media (max-width: 600px) {
	/* chips scroll sideways instead of stacking four rows deep */
	.programs-filters {
		flex-wrap: nowrap;
		overflow-x: auto;
		padding: 2px 0;
		scrollbar-width: none;
	}
	.programs-filters::-webkit-scrollbar {
		display: none;
	}
	.programs-chip, .programs-field {
		flex: 0 0 auto;
	}
}
/* audio.css · custom audio player styled to the AU design system
   Markup: [data-audio] wrapping an <audio> element
   JS: js/audio.js builds the UI and self-inits via init.js */
.audio-player {
	background: var(--au-navy);
	border-radius: var(--radius-lg);
	color: var(--au-white);
	max-width: 540px;
	margin: var(--space-5) auto;
	box-shadow: var(--shadow-md);
	padding: var(--space-3) var(--space-4);
}

.audio-player-controls {
	display: flex;
	align-items: center;
	gap: var(--space-3);
}

.audio-player-btn {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border-radius: var(--radius-full);
	border: 2px solid var(--au-gold);
	background: transparent;
	color: var(--au-gold);
	cursor: pointer;
	transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
	padding: 0;
}

.audio-player-btn:hover,
.audio-player-btn:focus-visible {
	background: var(--au-gold);
	color: var(--au-navy);
	outline: none;
}

.audio-player-btn svg {
	width: 18px;
	height: 18px;
	fill: currentColor;
}

.audio-player-track {
	flex: 1 1 auto;
	min-width: 0;
}

.audio-player-title {
	font-family: var(--font-display);
	font-size: 10px;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.45);
	text-align: center;
	padding-bottom: 4px;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}

.audio-player-bar {
	position: relative;
	height: 6px;
	background: rgba(255, 255, 255, 0.2);
	border-radius: var(--radius-full);
	cursor: pointer;
	overflow: hidden;
}

.audio-player-bar:hover {
	height: 8px;
}

.audio-player-fill {
	position: absolute;
	top: 0;
	left: 0;
	height: 100%;
	width: 0%;
	background: var(--au-gold);
	border-radius: var(--radius-full);
	transition: width 80ms linear;
	pointer-events: none;
}

.audio-player-time {
	display: flex;
	justify-content: space-between;
	font-family: var(--font-mono);
	font-size: 11px;
	color: rgba(255, 255, 255, 0.5);
	-webkit-user-select: none;
	   -moz-user-select: none;
	        user-select: none;
	padding-top: 3px;
	line-height: 1;
}

.audio-player-vol {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
}

.audio-player-vol button {
	background: none;
	border: none;
	color: rgba(255, 255, 255, 0.7);
	cursor: pointer;
	padding: 0;
	display: flex;
}

.audio-player-vol button:hover {
	color: var(--au-gold-light);
}

.audio-player-vol svg {
	width: 18px;
	height: 18px;
	fill: currentColor;
}

@media (max-width: 380px) {
	.audio-player {
		padding: var(--space-2) var(--space-3);
	}
	.audio-player-controls {
		gap: var(--space-2);
	}
	.audio-player-btn {
		width: 36px;
		height: 36px;
	}
	.audio-player-vol {
		display: none;
	}
}
/* ════════════════════════════════════════════════════════════
   compat.css  ·  legacy content patterns in authored section bodies
   Depends on: tokens.css
   Covers the CTA bar, Bootstrap grid columns in card bodies, and
   legacy font references. These patterns appear in homepage-advanced
   bodies that can't be safely round-tripped through cms_edit.
   ════════════════════════════════════════════════════════════ */
/* ── Bootstrap grid → flex ──
   Authored card bodies using .row + .col-* get a simple flex layout.
   Covers the Welcome intro (8/4 text+image split) and any similar
   legacy two- or three-column body. */
.card-text > .row,
.card-text > div > .row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-6);
}

.card-text [class*=col-md-8],
.card-text [class*=col-md-7] {
	flex: 2 1 400px;
	min-width: 0;
}

.card-text [class*=col-md-4],
.card-text [class*=col-md-5] {
	flex: 1 1 240px;
	min-width: 0;
}

.card-text [class*=col-md-6] {
	flex: 1 1 300px;
	min-width: 0;
}

.card-text [class*=col-md-12] {
	flex: 1 1 100%;
}

/* 4-across grid (CTA bar): card-text with col-lg-3 children */
.card-text:has(> [class*=col-lg-3]) {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4);
	align-items: stretch;
}

.card-text > [class*=col-lg-3] {
	flex: 1 1 200px;
	min-width: 0;
	display: flex;
}

/* ── CTA widget ──
   4-across icon+label action blocks on homepages. Legacy markup uses
   .cta + .cta-* with IconSweets-Deluxe icons; restyled for 2027 with
   FA7 icon substitution. Uses !important to win over /css/cta.css,
   which cta-row.tt loads as a <link> after index.css. */
.cta {
	position: relative;
	display: flex !important;
	align-items: center !important;
	justify-content: flex-start !important;
	gap: var(--space-4);
	padding: var(--space-4) var(--space-5) !important;
	background: var(--au-white) !important;
	border-left: 4px solid var(--au-gold) !important;
	border-radius: var(--radius-sm);
	color: var(--au-navy) !important;
	cursor: pointer;
	transition: background var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-out);
}

.cta:hover {
	background: var(--au-cream) !important;
	transform: translateY(-2px);
	box-shadow: var(--shadow-sm);
}

/* cta-row.tt wraps everything in ONE <a>; admissions markup uses separate <a>s.
   Handle both: a direct-child <a> that wraps .icon + .cta-title is the content
   wrapper, not a stretched-link anchor — make it flex and strip underline.
   cta-row-buttons.tt adds class="btn btn-gray" to the same <a>; neutralize
   that button styling so the card look wins. */
.cta > a {
	display: flex !important;
	align-items: center;
	gap: var(--space-3);
	text-decoration: none !important;
	color: inherit !important;
	width: 100%;
}

/* admissions markup: separate <a> inside .cta-title → keep pointer-events normal */
.cta > a:only-child {
	flex: 1;
}

/* cta-row-buttons.tt adds .btn.btn-gray to the anchor — strip it back to plain */
.cta > a.btn {
	border: none !important;
	border-radius: 0 !important;
	padding: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
	font-size: inherit !important;
	font-weight: inherit !important;
	letter-spacing: inherit !important;
	text-transform: none !important;
	justify-content: flex-start !important;
}

.cta > a.btn:hover {
	background: transparent !important;
	box-shadow: none !important;
	transform: none !important;
	color: inherit !important;
}

/* icon replacement: IconSweets-Deluxe → FA7 Pro */
.cta .icon {
	display: flex !important;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	float: none !important;
	margin: 0 !important;
}

.cta .icon span {
	display: inline-flex;
	width: 1.5em;
	height: 1.5em;
	align-items: center;
	justify-content: center;
	font-size: var(--text-xl);
	color: transparent !important;
	overflow: hidden;
}

.cta .icon span::before {
	font-family: "Font Awesome 7 Pro";
	font-weight: 900;
	font-size: var(--text-xl);
	line-height: 1;
	color: var(--au-gold) !important;
	-moz-osx-font-smoothing: grayscale;
	-webkit-font-smoothing: antialiased;
}

.cta .icon .icon-safari::before {
	content: "\f14e";
}

.cta .icon .icon-globe2::before {
	content: "\f0ac";
}

.cta .icon .icon-airplane::before {
	content: "\f072";
}

.cta .icon .icon-write::before {
	content: "\f044";
}

.cta .icon .icon-info::before {
	content: "\f05a";
}

.cta .icon .icon-calendar-day::before {
	content: "\f783";
}

.cta .icon a {
	display: contents;
}

/* label — strip cta.css colored backgrounds */
.cta .cta-title {
	font-family: var(--font-display);
	font-weight: 600;
	font-size: var(--text-md);
	line-height: 1.3;
	float: none !important;
	margin-left: 0 !important;
	text-transform: none !important;
	color: var(--au-navy) !important;
}

/* admissions markup has <a> inside .cta-title; cta-row.tt has it outside */
.cta .cta-title a {
	color: var(--au-navy);
	text-decoration: none;
}

.cta .cta-title a:hover {
	color: var(--au-navy-light);
}

.cta .title {
	display: inline !important;
	background: transparent !important;
	color: inherit !important;
	padding: 0 !important;
	margin: 0 !important;
	line-height: 1.3 !important;
	font-weight: 600;
}

/* ── .btn inside .grid: keep natural size, don't stretch as a grid cell ──
   Authored content sometimes wraps sibling buttons in a <div class="grid">.
   .grid > * normally gets flex:1 1 280px (card width), which stretches each
   button to a full row. Override so they size to their own content and can
   sit side-by-side. */
.card-text .grid > .btn,
.card-body .grid > .btn {
	flex: 1 1 0 !important;
	width: 0 !important;
	min-width: 0 !important;
	align-self: flex-start;
}

/* ── pull-left: neutralize in flex contexts ── */
.cta .pull-left,
.card-text .pull-left {
	float: none;
}

/* ── Legacy cta-row.tt: section.columns + Bootstrap container/row ──
   The shared cta-row.tt emits <section class="columns background_color_*">
   with a Bootstrap .container > .row > .col-sm-N grid. Give the band
   the right padding/background and make the row flex. */
section.columns {
	padding: var(--space-12) var(--gutter);
}

section.columns[class*=background_color_cararra-gray],
section.columns[class*=background_color_seashell-gray],
section.columns[class*=background_color_stone] {
	background: var(--au-stone);
}

section.columns[class*=background_color_ecru-white],
section.columns[class*=background_color_cream] {
	background: var(--au-cream);
}

section.columns[class*=background_color_nile-blue],
section.columns[class*=background_color_fiord-blue],
section.columns[class*=background_color_chathams-blue] {
	background: var(--au-navy-deep);
}

section.columns .container {
	max-width: var(--max-width);
	margin-inline: auto;
}

section.columns .container > .row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-6);
	justify-content: center;
}

section.columns .container > .row > [class*=col-] {
	flex: 1 1 200px;
	min-width: 0;
}

/* ── Inline disclosure embed (replaces Bootstrap modals for iframes) ── */
.transfer-embed {
	max-height: 0;
	overflow: hidden;
	transition: max-height 0.4s ease;
}

.transfer-embed.is-open {
	max-height: 500px;
}

/* ── Bootstrap .modal → 2027 overlay ──
   Legacy pages use .modal divs with data-toggle/data-dismiss.
   modal.js adds/removes .is-open; CSS controls visibility. */
.modal {
	display: none;
	position: fixed;
	inset: 0;
	z-index: 2000;
	overflow-y: auto;
	overscroll-behavior: contain;
	background: rgba(0, 31, 63, 0.6);
	backdrop-filter: blur(2px);
	-webkit-backdrop-filter: blur(2px);
	padding: var(--space-8) var(--gutter);
}

.modal.is-open {
	display: flex;
	align-items: flex-start;
	justify-content: center;
}

.modal-dialog {
	background: var(--au-white);
	border-radius: var(--radius-lg);
	max-width: 720px;
	width: 100%;
	margin: auto;
	box-shadow: var(--shadow-xl);
	overflow: hidden;
}

.modal-content {
	padding: var(--space-6) !important;
}

/* header: manually-authored photo + name div (legacy profiles page markup) —
   only applies when the first child is NOT the auto-injected header */
.modal-content > div:first-child:not(.modal-auto-header) {
	display: flex;
	gap: var(--space-5);
	align-items: flex-start;
	margin-bottom: var(--space-5);
}

.modal-content > div:first-child:not(.modal-auto-header) > div:first-child img {
	width: 100px;
	height: 100px;
	-o-object-fit: cover;
	   object-fit: cover;
	border-radius: 50%;
	display: block;
}

.modal-content > div:first-child:not(.modal-auto-header) > div:last-child {
	display: flex;
	flex-direction: column;
	justify-content: center;
}

.modal-content > div:first-child:not(.modal-auto-header) > div:last-child h2 {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-navy);
	margin: 0 0 var(--space-2);
	font-weight: 600;
}

.modal-content > div:first-child:not(.modal-auto-header) > div:last-child p {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	margin: 0;
	line-height: 1.5;
}

/* .card-subtitle — a plain muted line under the card title (program, year, role).
   No gold/uppercase treatment; pulled into the modal header as the subtitle. */
.card-subtitle {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	margin: 0;
	line-height: 1.4;
}

/* auto-header injected by modal.js — photo circle + name + subtitle row */
.modal-auto-header {
	display: flex;
	gap: var(--space-5);
	align-items: flex-start;
	padding-bottom: var(--space-5);
	margin-bottom: var(--space-5);
	border-bottom: 1px solid var(--au-gray-200);
}

.modal-auto-photo {
	width: 100px;
	height: 100px;
	border-radius: 50%;
	-o-object-fit: cover;
	   object-fit: cover;
	-o-object-position: top;
	   object-position: top;
	flex-shrink: 0;
	display: block;
}

.modal-auto-text {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: var(--space-1);
}

.modal-auto-name {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	font-weight: 600;
	color: var(--au-navy);
	margin: 0;
	line-height: 1.2;
}

.modal-auto-subtitle {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	margin: 0;
	font-style: italic;
	line-height: 1.4;
}

/* strip &nbsp; spacer divs used as horizontal rules */
.modal-content [style*=border-top] {
	border: none !important;
	border-top: 1px solid var(--au-gray-200) !important;
	margin: var(--space-5) 0 !important;
	height: 0 !important;
}

/* story body */
.modal-body {
	font-size: var(--text-sm);
	line-height: 1.75;
	color: var(--au-text);
}

.modal-body p {
	margin-top: var(--space-3);
}

.modal-body p:first-child {
	margin-top: 0;
}

/* h3 section headings get a divider line above them automatically —
   no need for manual <hr> or border-top divs in the modal markup */
.modal-body h3 {
	font-family: var(--font-display);
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--au-navy);
	margin: var(--space-6) 0 var(--space-2);
	padding-top: var(--space-6);
	border-top: 1px solid var(--au-gray-200);
}

/* first h3 in the body — no divider above it whether the h3 is a direct child
   or wrapped in a plain div (the original markup wrapped each section in <div>) */
.modal-body h3:first-child,
.modal-body > div:first-child > h3:first-child {
	margin-top: 0;
	padding-top: 0;
	border-top: none;
}

/* standard close row — .modal-footer (preferred) or legacy [align="right"] */
.modal-footer {
	display: flex;
	justify-content: flex-end;
	padding-top: var(--space-5);
	margin-top: var(--space-5);
	border-top: 1px solid var(--au-gray-200);
}

.modal-content [align=right] {
	margin-top: var(--space-5);
	text-align: right;
}

[data-dismiss=modal] {
	cursor: pointer;
}

/* X close button — injected by modal.js into .modal-content top-right */
.modal-content {
	position: relative;
}

.modal-close-x {
	position: absolute;
	top: var(--space-4);
	right: var(--space-4);
	background: none;
	border: none;
	color: var(--au-warm-gray);
	cursor: pointer;
	font-size: var(--text-lg);
	padding: var(--space-2);
	line-height: 1;
	z-index: 1;
}

.modal-close-x:hover {
	color: var(--au-navy);
}

/* ── Profile portrait + button grid ──
   .feature-inner wraps alternating portrait rows and button rows in authored
   profile pages. layout.css uses literal 280px, so override flex directly.
   150px fits 3 per row at 500px wide sidebar content (3×150 + 2×24gap = 498px).
   Selector covers both portrait grids and adjacent button-row grids. */
.page-main .feature-inner .grid > div {
	flex: 1 1 150px !important;
	min-width: 0;
}

.page-main .grid:has(> div > img) > div {
	flex: 1 1 150px !important;
}

.page-main .grid > div:has(> img) {
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
	overflow: hidden;
	display: flex;
	flex-direction: column;
}

.page-main .grid > div:has(> img) > img {
	width: 100%;
	aspect-ratio: 1/1;
	-o-object-fit: cover;
	   object-fit: cover;
	-o-object-position: top;
	   object-position: top;
}

.page-main .grid > div:has(> img) > h2 {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-navy);
	font-weight: 600;
	margin: 0;
	padding: var(--space-4) var(--space-4) var(--space-1);
}

.page-main .grid > div:has(> img) > p.description {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.5;
	margin: 0;
	padding: 0 var(--space-4) var(--space-4);
}

/* profile "read story" button rows: full-width buttons, text wraps */
.page-main .grid > div > p > button.btn-lg {
	width: 100%;
	justify-content: center;
	white-space: normal;
	text-align: center;
	line-height: 1.3;
	min-height: 3.5rem;
}

@media (max-width: 600px) {
	.modal {
		padding: var(--space-4) var(--space-3);
	}
	.modal-content {
		padding: var(--space-5) !important;
	}
	.modal-content > div:first-child {
		flex-direction: column;
	}
	.modal-content > div:first-child > div:first-child img {
		width: 80px;
		height: 80px;
	}
}
/* ── Bootstrap form classes → 2027 styles ──
   Forms authored with Bootstrap .form-group / .form-control / .checkbox.
   Maps to the same visual result as forms.css .input/.select/.label. */
.form-group {
	margin-bottom: var(--space-5);
}

.form-group > label {
	display: block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-2);
}

.form-control {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	outline: none;
	transition: border-color var(--duration-base);
	box-sizing: border-box;
}

.form-control:focus {
	border-color: var(--au-gold);
}

select.form-control {
	cursor: pointer;
}

textarea.form-control {
	resize: vertical;
	min-height: 120px;
}

/* Bootstrap .checkbox: div.checkbox > label > input[type=checkbox] + text.
   forms.css treats .checkbox as a 20×20px custom input, but Bootstrap uses it
   as a wrapper DIV. Override size on div.checkbox so the label can be full height. */
div.checkbox {
	width: auto !important;
	height: auto !important;
	margin: var(--space-2) 0;
}

div.checkbox label {
	display: flex !important;
	align-items: flex-start;
	gap: var(--space-3);
	font-weight: 400;
	cursor: pointer;
	padding-left: 0 !important;
}

.checkbox input[type=checkbox] {
	position: static !important;
	margin: 2px 0 0 !important;
	flex-shrink: 0;
	width: 1rem;
	height: 1rem;
	accent-color: var(--au-gold);
	cursor: pointer;
}

/* scrollable checkbox container */
.programs-wrapper {
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-4);
	max-height: 280px;
	overflow-y: auto;
}

.programs-wrapper strong {
	display: block;
	font-size: var(--text-xs);
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--au-navy);
	margin: var(--space-3) 0 var(--space-2);
}

.programs-wrapper strong:first-child {
	margin-top: 0;
}

.programs-wrapper hr {
	border: none;
	border-top: 1px solid var(--au-gray-200);
	margin: var(--space-3) 0;
}

/* helper text + required asterisk */
.text-danger {
	color: var(--au-error);
}

.text-muted {
	color: var(--au-warm-gray);
	font-size: var(--text-xs);
	font-weight: 400;
}

/* ── CKEditor text-align:center on <p> containing an img ──
   CKEditor centers images by setting text-align:center on the wrapping <p>.
   base.css makes img display:block, which ignores text-align — translate to
   margin:auto so the author's intent is honored. */
p[style*="text-align: center"] > img,
p[style*="text-align:center"] > img {
	margin-inline: auto;
}

/* ── Legacy font references ──
   AkkuratLight was the old site's body font, not loaded in 2027. Override
   to the design-system stack so the text doesn't fall to a random serif. */
[style*=AkkuratLight],
[style*=Akkurat] {
	font-family: var(--font-body) !important;
}

/* ── Bootstrap responsive embed (.embed-responsive) ──
   Legacy content wraps YouTube/Vimeo iframes in this; Bootstrap's CSS
   isn't loaded on the 2027 chain so the iframe collapses. */
.embed-responsive {
	position: relative;
	display: block;
	width: 100%;
	padding: 0;
	overflow: hidden;
}

.embed-responsive::before {
	content: "";
	display: block;
}

.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

.embed-responsive-16by9::before {
	padding-top: 56.25%;
}

.embed-responsive-4by3::before {
	padding-top: 75%;
}

.embed-responsive-1by1::before {
	padding-top: 100%;
}

/* ── img-responsive (Bootstrap) ── */
.card-text .img-responsive {
	max-width: 100%;
	height: auto !important;
}

/* ── responsive ── */
@media (max-width: 760px) {
	.card-text > .row,
	.card-text > div > .row {
		gap: var(--space-4);
	}
	.card-text:has(> [class*=col-lg-3]) {
		gap: var(--space-3);
	}
	.card-text > [class*=col-lg-3] {
		flex-basis: calc(50% - var(--space-3));
	}
	section.columns .container > .row {
		gap: var(--space-3);
	}
	section.columns .container > .row > [class*=col-] {
		flex-basis: calc(50% - var(--space-3));
	}
}
@media (max-width: 480px) {
	.card-text > [class*=col-lg-3] {
		flex-basis: 100%;
	}
	section.columns .container > .row > [class*=col-] {
		flex-basis: 100%;
	}
}
/*# sourceMappingURL=data:application/json;base64,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Q3BCOztBQUVBO0NBQ0MsZ0JBQWdCO0FBQ2pCOztBQUVBO0NBQ0MsaUJBQWlCO0FBQ2xCOztBQUVBLHFDQUFxQztBQUNyQztDQUNDLGVBQWU7Q0FDZix1QkFBdUI7QUFDeEI7O0FBRUEscUJBQXFCO0FBQ3JCO0NBQ0M7O0VBRUMsbUJBQW1CO0NBQ3BCO0NBQ0E7RUFDQyxtQkFBbUI7Q0FDcEI7Q0FDQTtFQUNDLHNDQUFzQztDQUN2QztDQUNBO0VBQ0MsbUJBQW1CO0NBQ3BCO0NBQ0E7RUFDQyxzQ0FBc0M7Q0FDdkM7QUFDRDtBQUNBO0NBQ0M7RUFDQyxnQkFBZ0I7Q0FDakI7Q0FDQTtFQUNDLGdCQUFnQjtDQUNqQjtBQUNEIiwiZmlsZSI6ImluZGV4LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qIGluZGV4LnNjc3Mg4oaSIGluZGV4LmNzcyAgwrcgIHNlcnZlZCBhdCAvY29kZS8yMDI3L2luZGV4LmNzc1xuICAgQ2xlYW4gc2hlbGwgKG5vIEJvb3RzdHJhcCwgbm8gYXUtIHByZWZpeCkuIExvYWQgb3JkZXI6IHRva2VucyDihpJcbiAgIGJhc2Ug4oaSIGxheW91dC9jYXJkIOKGkiBjb21wb25lbnRzLiBSZWNvbXBpbGUgYWZ0ZXIgYW55IGVkaXQ6XG4gICBucHggc2FzcyBpbmRleC5zY3NzIGluZGV4LmNzcyAtLW5vLXNvdXJjZS1tYXBcbiAgIE5PVEU6IHRoZSBDTVMgb25seSByZWJ1aWxkcyBpbmRleC5jc3Mgd2hlbiBUSElTIGZpbGUgaXMgc2F2ZWQg4oCUIGVkaXRpbmcgYVxuICAgcGFydGlhbCB1bmRlciBjc3MvIGFsb25lIGRvZXMgbm90IHRyaWdnZXIgaXQuIFJlLXNhdmUgdGhpcyBmaWxlIGFmdGVyIGFueVxuICAgcGFydGlhbCBlZGl0LiAqL1xuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBhdS10b2tlbnMuY3NzICDCtyAgQVUgRGVzaWduIFN5c3RlbSBjdXN0b20gcHJvcGVydGllc1xuICAgVGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGFsbCBkZXNpZ24gdG9rZW5zLlxuICAgRXZlcnkgb3RoZXIgcGFydGlhbCByZWZlcmVuY2VzIHRoZXNlIHZpYSB2YXIoKS5cbiAgIElmIHlvdXIgbWFzdGVyIGFscmVhZHkgZGVmaW5lcyA6cm9vdCwgb21pdCB0aGlzIGZpbGUuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbjpyb290IHtcblx0Lyog4pSA4pSA4pSAIENPTE9SOiBQcmltYXJ5IOKUgOKUgOKUgCAqL1xuXHQtLWF1LW5hdnk6ICMwMDMzNjY7XG5cdC0tYXUtbmF2eS1kZWVwOiAjMDAxYTMzO1xuXHQtLWF1LW5hdnktbWlkOiAjMDAyYTQ4OyAvKiBiZXR3ZWVuIGRlZXAgYW5kIG5hdnk7IG1hdGNoZXMgdGhlbWUtY29sb3IgKi9cblx0LS1hdS1uYXZ5LWxpZ2h0OiAjMDA0MDgwO1xuXHQtLWF1LWdvbGQ6ICNDNjk1MkI7XG5cdC0tYXUtZ29sZC1saWdodDogI0U4Qjg0Qjtcblx0LS1hdS1nb2xkLXBhbGU6ICNGREY1RTY7XG5cdC8qIOKUgOKUgOKUgCBDT0xPUjogTmV1dHJhbCDilIDilIDilIAgKi9cblx0LS1hdS1jcmVhbTogI0ZBRjhGNTtcblx0LS1hdS1zdG9uZTogI0VDRUFFNDsgLyogd2FybSBsaWdodC1ncmF5IGJhbmQsIGEgc3RlcCBkZWVwZXIgdGhhbiBjcmVhbSAqL1xuXHQtLWF1LXdoaXRlOiAjRkZGRkZGO1xuXHQtLWF1LXdhcm0tZ3JheTogIzZCNjU2MDtcblx0LS1hdS1ncmF5LTIwMDogI0U4RTRERjtcblx0LS1hdS1ncmF5LTMwMDogI0QxQ0JDNDtcblx0LS1hdS1ncmF5LTQwMDogI0I1QUZBODtcblx0LS1hdS10ZXh0OiAjMkEyNTIyO1xuXHQvKiDilIDilIDilIAgQ09MT1I6IFNlbWFudGljIOKUgOKUgOKUgCAqL1xuXHQtLWF1LXN1Y2Nlc3M6ICMyRDdENDY7XG5cdC0tYXUtd2FybmluZzogI0M2OTUyQjtcblx0LS1hdS1lcnJvcjogI0I4MzIzMjtcblx0LS1hdS1pbmZvOiAjMjg2OEE2O1xuXHQvKiDilIDilIDilIAgVFlQT0dSQVBIWSDilIDilIDilIAgKi9cblx0LS1mb250LWRpc3BsYXk6IFwiSUJNIFBsZXggU2VyaWZcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiwgc2VyaWY7XG5cdC0tZm9udC1ib2R5OiBcIklCTSBQbGV4IFNhbnNcIiwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmO1xuXHQtLWZvbnQtbW9ubzogXCJJQk0gUGxleCBNb25vXCIsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuXHQvKiDilIDilIDilIAgVFlQRSBTQ0FMRSAoTWFqb3IgVGhpcmQg4oCUIDEuMjUpIOKUgOKUgOKUgCAqL1xuXHQtLXRleHQteHM6IDAuNzVyZW07IC8qIDEycHggKi9cblx0LS10ZXh0LXNtOiAwLjg3NXJlbTsgLyogMTRweCAqL1xuXHQtLXRleHQtYmFzZTogMXJlbTsgLyogMTZweCAqL1xuXHQtLXRleHQtbWQ6IDEuMTI1cmVtOyAvKiAxOHB4ICovXG5cdC0tdGV4dC1sZzogMS4yNXJlbTsgLyogMjBweCAqL1xuXHQtLXRleHQteGw6IDEuNTYzcmVtOyAvKiAyNXB4ICovXG5cdC0tdGV4dC0yeGw6IDEuOTUzcmVtOyAvKiB+MzFweCAqL1xuXHQtLXRleHQtM3hsOiAyLjQ0MXJlbTsgLyogfjM5cHggKi9cblx0LS10ZXh0LTR4bDogMy4wNTJyZW07IC8qIH40OXB4ICovXG5cdC8qIOKUgOKUgOKUgCBTUEFDSU5HICg4cHggYmFzZSkg4pSA4pSA4pSAICovXG5cdC0tc3BhY2UtMTogMC4yNXJlbTsgLyogNHB4ICovXG5cdC0tc3BhY2UtMjogMC41cmVtOyAvKiA4cHggKi9cblx0LS1zcGFjZS0zOiAwLjc1cmVtOyAvKiAxMnB4ICovXG5cdC0tc3BhY2UtNDogMXJlbTsgLyogMTZweCAqL1xuXHQtLXNwYWNlLTU6IDEuNXJlbTsgLyogMjRweCAqL1xuXHQtLXNwYWNlLTY6IDJyZW07IC8qIDMycHggKi9cblx0LS1zcGFjZS04OiAzcmVtOyAvKiA0OHB4ICovXG5cdC0tc3BhY2UtMTA6IDRyZW07IC8qIDY0cHggKi9cblx0LS1zcGFjZS0xMjogNXJlbTsgLyogODBweCAqL1xuXHQtLXNwYWNlLTE2OiA2LjI1cmVtOyAvKiAxMDBweCAqL1xuXHQvKiDilIDilIDilIAgTEFZT1VUIOKUgOKUgOKUgCAqL1xuXHQtLW1heC13aWR0aDogMTIwMHB4O1xuXHQtLW1heC13aWR0aC1uYXJyb3c6IDkwMHB4O1xuXHQtLW1heC13aWR0aC10ZXh0OiA3MDBweDtcblx0LS1ndXR0ZXI6IDIuNXJlbTtcblx0LS1oZWFkZXItaGVpZ2h0OiA2Ljc1cmVtOyAvKiBhcHByb3ggc3RpY2t5IGhlYWRlciBoZWlnaHQ7IHN0aWNreSBvZmZzZXRzIHJlZmVyZW5jZSBpdCAqL1xuXHQvKiDilIDilIDilIAgQk9SREVSUyAmIFJBRElJIOKUgOKUgOKUgCAqL1xuXHQtLXJhZGl1cy1zbTogNHB4O1xuXHQtLXJhZGl1cy1tZDogOHB4O1xuXHQtLXJhZGl1cy1sZzogMTJweDtcblx0LS1yYWRpdXMtZnVsbDogOTk5OXB4O1xuXHQvKiDilIDilIDilIAgU0hBRE9XUyDilIDilIDilIAgKi9cblx0LS1zaGFkb3ctc206IDAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDYpO1xuXHQtLXNoYWRvdy1tZDogMCA0cHggMTZweCByZ2JhKDAsMCwwLDAuMDgpO1xuXHQtLXNoYWRvdy1sZzogMCA4cHggMzJweCByZ2JhKDAsMCwwLDAuMTApO1xuXHQtLXNoYWRvdy14bDogMCAxNnB4IDQ4cHggcmdiYSgwLDAsMCwwLjE0KTtcblx0Lyog4pSA4pSA4pSAIFRSQU5TSVRJT05TIOKUgOKUgOKUgCAqL1xuXHQtLWVhc2Utb3V0OiBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG5cdC0tZWFzZS1zcHJpbmc6IGN1YmljLWJlemllcigwLjM0LCAxLjU2LCAwLjY0LCAxKTtcblx0LS1kdXJhdGlvbi1mYXN0OiAxNTBtcztcblx0LS1kdXJhdGlvbi1iYXNlOiAzMDBtcztcblx0LS1kdXJhdGlvbi1zbG93OiA1MDBtcztcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBmb250cy5jc3MgIMK3ICBzZWxmLWhvc3RlZCBJQk0gUGxleCAgKHdvZmYyIGluIC9jb2RlLzIwMjcvZm9udHMvKVxuICAgRmFtaWx5IG5hbWVzIG1hdGNoIHRoZSAtLWZvbnQtKiB0b2tlbnMuIE9ubHkgdGhlIHdlaWdodHMvc3R5bGVzIHRoZVxuICAgc3lzdGVtIGFjdHVhbGx5IHVzZXMgYXJlIGRlY2xhcmVkIChTYW5zIDQwMC82MDAvNzAwICsgaXRhbGljLCBTZXJpZlxuICAgNDAwLzYwMCArIGl0YWxpYywgTW9ubyA0MDApLiBmb250LWRpc3BsYXk6IHN3YXAgdG8gYXZvaWQgRk9JVC5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuQGZvbnQtZmFjZSB7XG5cdGZvbnQtZmFtaWx5OiBcIklCTSBQbGV4IFNhbnNcIjtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRmb250LWRpc3BsYXk6IHN3YXA7XG5cdHNyYzogdXJsKFwiL2NvZGUvMjAyNy9mb250cy9pYm0tcGxleC1zYW5zLTQwMC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKTtcbn1cbkBmb250LWZhY2Uge1xuXHRmb250LWZhbWlseTogXCJJQk0gUGxleCBTYW5zXCI7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1kaXNwbGF5OiBzd2FwO1xuXHRzcmM6IHVybChcIi9jb2RlLzIwMjcvZm9udHMvaWJtLXBsZXgtc2Fucy00MDAtaXRhbGljLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpO1xufVxuQGZvbnQtZmFjZSB7XG5cdGZvbnQtZmFtaWx5OiBcIklCTSBQbGV4IFNhbnNcIjtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRmb250LWRpc3BsYXk6IHN3YXA7XG5cdHNyYzogdXJsKFwiL2NvZGUvMjAyNy9mb250cy9pYm0tcGxleC1zYW5zLTYwMC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKTtcbn1cbkBmb250LWZhY2Uge1xuXHRmb250LWZhbWlseTogXCJJQk0gUGxleCBTYW5zXCI7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0Zm9udC1kaXNwbGF5OiBzd2FwO1xuXHRzcmM6IHVybChcIi9jb2RlLzIwMjcvZm9udHMvaWJtLXBsZXgtc2Fucy03MDAud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG59XG5AZm9udC1mYWNlIHtcblx0Zm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2VyaWZcIjtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRmb250LWRpc3BsYXk6IHN3YXA7XG5cdHNyYzogdXJsKFwiL2NvZGUvMjAyNy9mb250cy9pYm0tcGxleC1zZXJpZi00MDAud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG59XG5AZm9udC1mYWNlIHtcblx0Zm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2VyaWZcIjtcblx0Zm9udC1zdHlsZTogaXRhbGljO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRmb250LWRpc3BsYXk6IHN3YXA7XG5cdHNyYzogdXJsKFwiL2NvZGUvMjAyNy9mb250cy9pYm0tcGxleC1zZXJpZi00MDAtaXRhbGljLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpO1xufVxuQGZvbnQtZmFjZSB7XG5cdGZvbnQtZmFtaWx5OiBcIklCTSBQbGV4IFNlcmlmXCI7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1kaXNwbGF5OiBzd2FwO1xuXHRzcmM6IHVybChcIi9jb2RlLzIwMjcvZm9udHMvaWJtLXBsZXgtc2VyaWYtNjAwLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpO1xufVxuQGZvbnQtZmFjZSB7XG5cdGZvbnQtZmFtaWx5OiBcIklCTSBQbGV4IE1vbm9cIjtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRmb250LWRpc3BsYXk6IHN3YXA7XG5cdHNyYzogdXJsKFwiL2NvZGUvMjAyNy9mb250cy9pYm0tcGxleC1tb25vLTQwMC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKTtcbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYmFzZS5jc3MgIMK3ICByZXNldCArIGJhcmUtZWxlbWVudCB0eXBvZ3JhcGh5XG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzXG4gICBHTE9CQUwgKGNsZWFuIHNoZWxsIOKAlCBubyBCb290c3RyYXAgdG8gY29leGlzdCB3aXRoLCBzbyBubyAuYXVcbiAgIHNjb3BlKS4gT24tYnJhbmQgZGVmYXVsdHMgZm9yIHJhdyBIVE1MIHNvIENLRWRpdG9yIGNvbnRlbnQgcmVhZHNcbiAgIGNvcnJlY3RseSB3aXRoIG5vIGV4dHJhIGNsYXNzZXMuIENvbXBvbmVudCBjbGFzc2VzIGxheWVyIG9uIHRvcC5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuKiwgKjo6YmVmb3JlLCAqOjphZnRlciB7XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbioge1xuXHRtYXJnaW46IDA7XG59XG5cbmh0bWwge1xuXHQtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG5cdHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xufVxuXG5pbWcsIHBpY3R1cmUsIHN2ZywgdmlkZW8ge1xuXHRkaXNwbGF5OiBibG9jaztcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IGF1dG87XG59XG5cbmlucHV0LCBidXR0b24sIHRleHRhcmVhLCBzZWxlY3Qge1xuXHRmb250OiBpbmhlcml0O1xuXHRjb2xvcjogaW5oZXJpdDtcbn1cblxuYm9keSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHQtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcblx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblx0Lyogc3RpY2t5IGZvb3RlcjogdGhlIHBhZ2UgaXMgYSBmdWxsLXZpZXdwb3J0LXRhbGwgY29sdW1uIHNvIHRoYXQgb24gc2hvcnRcblx0ICAgcGFnZXMgdGhlIGZvb3RlcnMgKGRlcHQgcHJlLWZvb3RlciArIGdsb2JhbCBzaXRlIGZvb3Rlcikgc2V0dGxlIGF0IHRoZVxuXHQgICBib3R0b20gb2YgdGhlIHNjcmVlbiBpbnN0ZWFkIG9mIGZsb2F0aW5nIG1pZC12aWV3cG9ydC4gVGhlIDxtYWluPiBjb250ZW50XG5cdCAgIGdyb3dzIHRvIGFic29yYiB0aGUgc2xhY2s7IGhlYWRlci9mb290ZXJzIGtlZXAgdGhlaXIgbmF0dXJhbCBoZWlnaHQuXG5cdCAgIFdvcmtzIHdpdGggdGhlIHN0aWNreSBoZWFkZXIgKHN0aWNreSBwb3NpdGlvbmluZyBpcyB1bmFmZmVjdGVkIGJ5IHRoZVxuXHQgICBjb2x1bW4gZmxleCBjb250ZXh0KS4gKi9cblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0bWluLWhlaWdodDogMTAwdmg7XG5cdG1pbi1oZWlnaHQ6IDEwMGR2aDsgLyogcHJvZ3Jlc3NpdmU6IGV4Y2x1ZGUgbW9iaWxlIGJyb3dzZXIgY2hyb21lIHdoZXJlIHN1cHBvcnRlZCAqL1xufVxuXG4vKiB0aGUgY29udGVudCBhcmVhIGlzIHRoZSBvbmx5IGZsZXggY2hpbGQgdGhhdCBncm93czsgZXZlcnl0aGluZyBlbHNlXG4gICAoaGVhZGVyLCBkZXB0LWZvb3Rlciwgc2l0ZS1mb290ZXIsIDAtaGVpZ2h0IHNjcmlwdHMpIGtlZXBzIGl0cyBzaXplLiAqL1xuYm9keSA+IG1haW4ge1xuXHRmbGV4OiAxIDAgYXV0bztcbn1cblxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdHRleHQtd3JhcDogYmFsYW5jZTtcbn1cblxuLyogb25lIHdlaWdodCBhY3Jvc3MgYWxsIGxldmVscyDigJQgaGllcmFyY2h5IGNvbWVzIGZyb20gc2l6ZSAoKyB0aGUgc2VyaWYvbmF2eVxuICAgdnMgc2Fucy9ncmF5IGNvbnRyYXN0IGFnYWluc3QgYm9keSksIG5vdCB3ZWlnaHQuIEtlZXBpbmcgZXZlcnkgaGVhZGluZyBhdCB0aGVcbiAgIGxpZ2h0IGRpc3BsYXkgd2VpZ2h0IGF2b2lkcyBhIHNtYWxsZXIgaGVhZGluZyAoaDQpIHJlYWRpbmcgYXMgYm9sZGVyIHRoYW4gYVxuICAgbGFyZ2VyIG9uZSAoaDMpLiBDb21wb25lbnRzIHRoYXQgd2FudCBhIGhlYXZpZXIgbGFiZWwgKC5jYXJkLXRpdGxlLFxuICAgLmZvb3Rlci1jb2wgaDMsIC5tZWdhLWNvbCBoNCkgc2V0IHRoZWlyIG93biBmb250LXdlaWdodC4gKi9cbmgxIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTR4bCk7XG59XG5cbmgyIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTN4bCk7XG59XG5cbmgzIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTJ4bCk7XG59XG5cbmg0IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcbn1cblxuaDUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xufVxuXG5oNiB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xufVxuXG5wIHtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxucCArIHAge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuYSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWxpbmssIHZhcigtLWF1LW5hdnktbGlnaHQpKTtcblx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdHRleHQtdW5kZXJsaW5lLW9mZnNldDogMnB4O1xuXHR0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOiAxcHg7XG5cdHRyYW5zaXRpb246IGNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLyogYnV0dG9ucyBtYW5hZ2UgdGhlaXIgb3duIGhvdmVyIGNvbG9ycyDigJQgZXhjbHVkZSB0aGVtIHNvIHRoZSBsaW5rLWhvdmVyIGdvbGRcbiAgIGRvZXNuJ3Qgd2FzaCBvdXQgLmJ0biBsYWJlbHMgKGVzcC4gLmJ0bi1wcmltYXJ5IG9uIGl0cyBnb2xkIGJhY2tncm91bmQpLiAqL1xuYTpub3QoLmJ0bik6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1saW5rLWhvdmVyLCB2YXIoLS1hdS1nb2xkKSk7XG59XG5cbnN0cm9uZywgYiB7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbmVtLCBpIHtcblx0Zm9udC1zdHlsZTogaXRhbGljO1xufVxuXG5zbWFsbCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbnVsLCBvbCB7XG5cdHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2UtNSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbmxpICsgbGkge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuYmxvY2txdW90ZSB7XG5cdGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2UtNSk7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNikgMDtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC1zdHlsZTogaXRhbGljO1xufVxuXG5ociB7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS04KSAwO1xufVxuXG5jb2RlLCBrYmQsIHNhbXAge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiAwLjllbTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRwYWRkaW5nOiAwLjE1ZW0gMC40ZW07XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG59XG5cbnByZSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODgpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0b3ZlcmZsb3cteDogYXV0bztcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNSkgMDtcbn1cblxucHJlIGNvZGUge1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRwYWRkaW5nOiAwO1xuXHRib3JkZXItcmFkaXVzOiAwO1xuXHRmb250LXNpemU6IGluaGVyaXQ7XG5cdGNvbG9yOiBpbmhlcml0O1xufVxuXG4vKiB2aXN1YWxseS1oaWRkZW4gKHNjcmVlbi1yZWFkZXIgb25seSkgKi9cbi5zci1vbmx5IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR3aWR0aDogMXB4O1xuXHRoZWlnaHQ6IDFweDtcblx0cGFkZGluZzogMDtcblx0bWFyZ2luOiAtMXB4O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRib3JkZXI6IDA7XG59XG5cbi8qIOKUgOKUgOKUgCBpY29uIGxpbmsgbGlzdCDilIDilIDilIBcbiAgIEEgdGlkeSwgc2VsZi1jb2x1bW5pbmcgbGlzdCBvZiBpY29uICsgbGluayByb3dzIGZvciByaWNoLXRleHQgYm9kaWVzXG4gICAoYWNjb3JkaW9uIHBhbmVscywgcGFnZSBjb250ZW50KS4gQXV0aG9ycyBhZGQgY2xhc3M9XCJsaW5rLWxpc3RcIiB0byBhIDx1bD47XG4gICBlYWNoIDxsaT4gaG9sZHMgYSBGb250QXdlc29tZSA8aT4gKyBhbiA8YT4uIFRoZSBpY29uIHRha2VzIHRoZSBiYW5kIGFjY2VudFxuICAgKGdvbGQgb24gZGFyayAvIGxpZ2h0IGJhbmRzKTsgdGhlIGxpbmsgY29sb3VyIGNvbWVzIGZyb20gdGhlIHN1cnJvdW5kaW5nXG4gICBjb250ZXh0IChlLmcuIGdvbGQgaW5zaWRlIGEgZGFyay1iYW5kIGFjY29yZGlvbikuIENvbGxhcHNlcyB0byBvbmUgY29sdW1uXG4gICBvbiBuYXJyb3cgd2lkdGhzLiBJdGVtcyB3aXRob3V0IGFuIGljb24gc3RpbGwgYWxpZ24gY2xlYW5seS4gKi9cbi5saW5rLWxpc3Qge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTQpIDA7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDI2MHB4LCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS02KTtcbn1cblxuLmxpbmstbGlzdCBsaSB7XG5cdG1hcmdpbjogMDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4ubGluay1saXN0IGxpID4gaSB7XG5cdGZsZXg6IG5vbmU7XG5cdHdpZHRoOiAxLjE1ZW07XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0Y29sb3I6IHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1nb2xkKSk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgbGF5b3V0LmNzcyAgwrcgIHNlY3Rpb24gYmFuZHMgKyB0aGUgZmxleGlibGUgZ3JpZFxuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzc1xuXG4gICAuc2VjdGlvbiAgIGZ1bGwtYmxlZWQgYmFuZCAodmVydGljYWwgcmh5dGhtICsgYmcgdmFyaWFudClcbiAgIC5zZWN0aW9uLWlubmVyICAgY2VudGVyZWQgbWF4LXdpZHRoIGNvbHVtblxuICAgLmdyaWQgICAgICBmbGV4LXdyYXA7IGFueSBudW1iZXIgb2YgY2hpbGRyZW4gZmxvdyBhbmQgZmlsbCDigJRcbiAgICAgICAgICAgICAgdGhlIHJlbmRlcmVycyBuZXZlciBjb21wdXRlIGEgY29sdW1uIGNvdW50LlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiDilIDilIDilIAgU0VDVElPTiDilIDilIDilIAgKi9cbi5zZWN0aW9uIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMTIpIHZhcigtLWd1dHRlcik7XG59XG5cbi8qIFNhbWUtY29sb3IgYmFuZHMgYWJ1dDogY29sbGFwc2UgdGhlIGRvdWJsZWQgc2VhbSB0byBhIHNpbmdsZSwgY29udGludW91c1xuICAgZ2FwIChub3QgemVybyDigJQgY29udGVudCBtdXN0IG5vdCBjb2xsaWRlKS4gQm90aCBzaWRlcyB0cmltIHRvIC0tc3BhY2UtNixcbiAgIHNvIGEgc2FtZS1jb2xvciBzZWFtIHJlYWRzIGFzIG9uZSBiYW5kIHdpdGggfjY0cHggYmV0d2VlbiBpdHMgY29udGVudC4gKi9cbi5zZWN0aW9uLS1mbHVzaC10b3Age1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5zZWN0aW9uLS1mbHVzaC1ib3R0b20ge1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5zZWN0aW9uLWlubmVyIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG4uc2VjdGlvbi1oZWFkIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5zZWN0aW9uLWxhYmVsIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDNweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWJhbmQtZXllYnJvdywgdmFyKC0tYXUtZ29sZCkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLnNlY3Rpb24tdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiBjbGFtcCh2YXIoLS10ZXh0LTJ4bCksIDMuNXZ3LCB2YXIoLS10ZXh0LTN4bCkpO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG59XG5cbi5zZWN0aW9uLWRlc2Mge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgtdGV4dCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4vKiDilIDilIDilIAgQkFDS0dST1VORCBCQU5EUyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgIFRoZSBDTVMgYmFja2dyb3VuZF9jb2xvciBmaWVsZCBzdXBwbGllcyB0aGUgbW9kaWZpZXIgbmFtZSDihpIgdGhlIGF1dGhvclxuICAgcGlja3MgZnJvbSB0aGlzIHBhbGV0dGUuIExpZ2h0IGJhbmRzIHNldCBvbmx5IGEgYmFja2dyb3VuZDsgREFSSyBiYW5kc1xuICAgYWxzbyBwdWJsaXNoIGEgc2V0IG9mIGAtLWJhbmQtKmAgQ09OVEVYVCBUT0tFTlMgdGhhdCBjb21wb25lbnRzIHJlYWRcbiAgIChoZWFkaW5ncywgYm9keSwgY2FyZHMsIGhhaXJsaW5lcywg4oCmKS4gVGhhdCdzIHRoZSB3aG9sZSBwb2ludDogYVxuICAgY29tcG9uZW50IHN0eWxlcyBhIGRhcmsgYmFuZCBvbmNlLCB0aHJvdWdoIHRoZSB0b2tlbnMsIHNvIGFkZGluZyBhIG5ld1xuICAgYmFuZCBpcyBhIHNpbmdsZSBkZWZpbml0aW9uIGhlcmUg4oCUIG5vdCBhbiBlZGl0IGluIGV2ZXJ5IGNvbXBvbmVudC5cblxuICAgUGFsZXR0ZTpcbiAgICAgbGlnaHQgIOKGkiAgKHdoaXRlIGRlZmF1bHQpIMK3IGNyZWFtIMK3IHN0b25lKGdyYXkpIMK3IGdvbGRcbiAgICAgZGFyayAgIOKGkiAgbmF2eShkZWVwKSDCtyBuYXZ5LW1pZCDCtyBuYXZ5LWJyaWdodFxuICAgTGVnYWN5IC5jdCB2YWx1ZXMgYXJlIGFsaWFzZWQgb250byB0aGUgbmVhcmVzdCBuZXcgYmFuZCAoZGVsZXRlIHRoZVxuICAgYWxpYXMgc2VsZWN0b3JzIG9uY2UgdGhlIC5jdCBkcm9wZG93bnMgYXJlIHRyaW1tZWQgdG8gdGhlIG5hbWVzIGFib3ZlKS4gKi9cbi8qIGxpZ2h0IGJhbmRzICovXG4uc2VjdGlvbi0tY3JlYW0sXG4uc2VjdGlvbi0tZWNydS13aGl0ZSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcbn1cblxuLnNlY3Rpb24tLXN0b25lLFxuLnNlY3Rpb24tLWdyYXksXG4uc2VjdGlvbi0tc2Vhc2hlbGwtZ3JheSxcbi5zZWN0aW9uLS1jYXJhcnJhLWdyYXksXG4uc2VjdGlvbi0tY2FyYXJyYS1ncmF5LXRleHR1cmVkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtc3RvbmUpO1xufVxuXG4uc2VjdGlvbi0tZ29sZCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG59XG5cbi8qIGRhcmsgYmFuZHMg4oCUIGJhY2tncm91bmQgKyB0aGUgc2hhcmVkIGNvbnRleHQgdG9rZW5zICovXG4uc2VjdGlvbi0tbmF2eSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5zZWN0aW9uLS1uYXZ5LW1pZCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktbWlkKTtcbn1cblxuLnNlY3Rpb24tLW5hdnktYnJpZ2h0IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5zZWN0aW9uLS1uaWxlLWJsdWUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4vKiBjaGF0aGFtcy1ibHVlIHdhcyB0aGUgTElHSFRFUiBsZWdhY3kgYmx1ZSAoIzE0M0U2RSkg4oCUIGtlZXAgaXQgbGlnaHRlciAobWFwcyB0b1xuICAgLS1hdS1uYXZ5ICMwMDMzNjYpIHJhdGhlciB0aGFuIGNvbGxhcHNpbmcgaXQgaW50byB0aGUgZGFya2VzdCBiYW5kLiAqL1xuLnNlY3Rpb24tLWNoYXRoYW1zLWJsdWUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnNlY3Rpb24tLWZpb3JkLWJsdWUsXG4uc2VjdGlvbi0tZmlvcmQtYmx1ZS10ZXh0dXJlZCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5zZWN0aW9uLS1uYXZ5LFxuLnNlY3Rpb24tLW5hdnktbWlkLFxuLnNlY3Rpb24tLW5hdnktYnJpZ2h0LFxuLnNlY3Rpb24tLW5pbGUtYmx1ZSxcbi5zZWN0aW9uLS1jaGF0aGFtcy1ibHVlLFxuLnNlY3Rpb24tLWZpb3JkLWJsdWUsXG4uc2VjdGlvbi0tZmlvcmQtYmx1ZS10ZXh0dXJlZCB7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xuXHQtLWJhbmQtaGVhZGluZzogdmFyKC0tYXUtd2hpdGUpO1xuXHQtLWJhbmQtYm9keTogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY2KTtcblx0LS1iYW5kLWV5ZWJyb3c6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHQtLWJhbmQtYWNjZW50OiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0LyogaG92ZXIvZXhwYW5kZWQgc3VyZmFjZSAoYWNjb3JkaW9uIGhlYWRlcik6IGEgc3VidGxlIHRyYW5zbHVjZW50LXdoaXRlIGxpZnQuXG5cdCAgIChBIGdvbGQgd2FzaCBtdWRkaWVkIGFnYWluc3QgdGhlIGJsdWUgYmFuZC4pICovXG5cdC0tYmFuZC1saW5rOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0LS1iYW5kLWxpbmstaG92ZXI6IHZhcigtLWF1LXdoaXRlKTtcblx0LS1iYW5kLXJhaXNlZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA5KTtcblx0LS1iYW5kLWhhaXJsaW5lOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpO1xuXHQtLWJhbmQtcXVvdGU6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Mik7XG5cdC0tYmFuZC1jYXJkLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpO1xuXHQtLWJhbmQtY2FyZC1ib3JkZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcblx0LS1iYW5kLWNhcmQtYm9yZGVyLXc6IDA7XG5cdC0tYmFuZC1jYXJkLXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yNSksIDAgMTRweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7XG5cdC0tYmFuZC1jYXJkLXNoYWRvdy1ob3ZlcjogMCA2cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgMjJweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC4zNik7XG5cdC0tYmFuZC1pY29uLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpO1xuXHQtLWJhbmQtaWNvbi1mZzogdmFyKC0tYXUtZ29sZC1saWdodCk7XG59XG5cbi8qIOKUgOKUgOKUgCBHUklEIOKAlCBmbGV4aWJsZSBmbGV4ICh1bmtub3duIGl0ZW0gY291bnRzKSDilIDilIDilIAgKi9cbi5ncmlkIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uZ3JpZCA+ICoge1xuXHRmbGV4OiAxIDEgMjgwcHg7XG59XG5cbi8qIGNvbXBhY3QgdmFyaWFudCDigJQgYSB0aWdodGVyIGZsZXggbWluIHNvIGNhcmRzIHBhY2sgY2xvc2VyIGFuZCAzLXVwIGhvbGRzXG4gICBhY3Jvc3MgYSBzaWRlYmFyIGNvbnRlbnQgY29sdW1uLCByZXNpemluZyBzbW9vdGhseSAodGhlIGRlZmF1bHQgMjgwcHggb25seVxuICAgZml0cyB0d28pLiBXb3JrcyBhcyBhIHNlY3Rpb24tbGV2ZWwgdG9rZW4gKEN1c3RvbSBDbGFzcyBcImNvbXBhY3RcIikgb3JcbiAgIGRpcmVjdGx5IG9uIHRoZSBncmlkIChjbGFzcz1cImdyaWQgZ3JpZC0tY29tcGFjdFwiKS4gKi9cbi5ncmlkLS1jb21wYWN0ID4gKiB7XG5cdGZsZXg6IDEgMSAyMDBweDtcbn1cblxuLmNvbXBhY3QgLmdyaWQgPiAqIHtcblx0ZmxleDogMSAxIDIwMHB4O1xufVxuXG4vKiDilIDilIDilIAgU1BMSVQg4oCUIGFzeW1tZXRyaWMgdHdvLWNvbHVtbiBmZWF0dXJlIHJvd3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICBGb3IgaW1hZ2Utb24tb25lLXNpZGUgLyB0ZXh0LW9uLXRoZS1vdGhlciByb3dzIHRoZSBmbGV4IGdyaWQgY2FuJ3QgZG8sXG4gICBiZWNhdXNlIGl0IHNpemVzIGV2ZXJ5IGNoaWxkIGVxdWFsbHkuIEEgU0VDVElPTiB0b2tlbiAodHlwZWQgaW4gdGhlIHNlY3Rpb24nc1xuICAgQ3VzdG9tIENsYXNzIGZpZWxkKSBzd2FwcyB0aGUgZ3JpZCB0byBhIGZpeGVkIHR3by10cmFjayBsYXlvdXQgd2l0aCBhIHdpZGUgK1xuICAgbmFycm93IHNwbGl0OlxuICAgICBzcGxpdC0yLTMgICDihpIgMmZyIDNmciAgIChsZWZ0IG5hcnJvd2VyLCByaWdodCB3aWRlcilcbiAgICAgc3BsaXQtMy0yICAg4oaSIDNmciAyZnIgICAobGVmdCB3aWRlciwgICByaWdodCBuYXJyb3dlcilcbiAgIFdoaWNoIHNpZGUgaXMgdGhlIGltYWdlIGlzIGp1c3QgdGhlIE9SREVSIG9mIHRoZSB0d28gY2FyZHMg4oCUIHB1dCB0aGUgaW1hZ2VcbiAgIGNhcmQgZmlyc3QgZm9yIGltYWdlLWxlZnQsIHNlY29uZCBmb3IgaW1hZ2UtcmlnaHQ7IHBpY2sgdGhlIHRva2VuIHRoYXQgbWFrZXNcbiAgIHRoZSBpbWFnZSB0aGUgc2l6ZSB5b3Ugd2FudC4gUm93cyBhcmUgdmVydGljYWxseSBjZW50ZXJlZCBzbyBhIHNob3J0IHRleHRcbiAgIGJsb2NrIHNpdHMgY2VudGVyZWQgYWdhaW5zdCBhIHRhbGxlciBpbWFnZS4gQnVpbHQgZm9yIFRXTyBjYXJkczsgYSB0aGlyZFxuICAgd291bGQgd3JhcCB0byBhIG5ldyByb3cuIENvbGxhcHNlcyB0byBhIHNpbmdsZSBzdGFja2VkIGNvbHVtbiBvbiBuYXJyb3dcbiAgIHNjcmVlbnMuIFRoZSB0b2tlbiBhbHNvIGxhbmRzIGFzIGEgY2xhc3Mgb24gdGhlIHNlY3Rpb24gKHZpYSBjdXN0b21fY2xhc3MpLiAqL1xuLnNwbGl0LTItMyAuZ3JpZCxcbi5zcGxpdC0zLTIgLmdyaWQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc3BsaXQtMi0zIC5ncmlkIHtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyZnIgM2ZyO1xufVxuXG4uc3BsaXQtMy0yIC5ncmlkIHtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAzZnIgMmZyO1xufVxuXG4vKiBhbiBpbWFnZS1vbmx5IGNhcmQgZGVmYXVsdHMgdG8gYWxpZ24tc2VsZjpzdGFydCAodG9wLXBpbm5lZCk7IGluIGEgc3BsaXQgd2VcbiAgIHdhbnQgaXQgY2VudGVyZWQgaW4gdGhlIHJvdyBsaWtlIGV2ZXJ5dGhpbmcgZWxzZSAqL1xuLnNwbGl0LTItMyAuY2FyZC0tbWVkaWEsXG4uc3BsaXQtMy0yIC5jYXJkLS1tZWRpYSB7XG5cdGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLyogcGluIGJvdGggY29sdW1ucyB0byB0aGUgdG9wIGluc3RlYWQgb2YgY2VudGVyaW5nIOKAlCBjb21iaW5lIHdpdGggdGhlIHNwbGl0XG4gICB0b2tlbiB3aGVuIHRoZSB0ZXh0IGlzIGxvbmdlciB0aGFuIHRoZSBpbWFnZSAoZS5nLiBzcGxpdC0zLTIgc3BsaXQtdG9wKSAqL1xuLnNwbGl0LXRvcCAuZ3JpZCB7XG5cdGFsaWduLWl0ZW1zOiBzdGFydDtcbn1cblxuLnNwbGl0LXRvcCAuY2FyZC0tbWVkaWEge1xuXHRhbGlnbi1zZWxmOiBzdGFydDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2MHB4KSB7XG5cdC5zcGxpdC0yLTMgLmdyaWQsXG5cdC5zcGxpdC0zLTIgLmdyaWQge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHR9XG5cdC5zcGxpdC0yLTMgLmNhcmQtLW1lZGlhLFxuXHQuc3BsaXQtMy0yIC5jYXJkLS1tZWRpYSB7XG5cdFx0bWF4LXdpZHRoOiA0MDBweDtcblx0XHR3aWR0aDogMTAwJTtcblx0XHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHR9XG59XG4vKiDilIDilIDilIAgVEVYVCBTSVpFIOKAlCBzZWN0aW9uLWxldmVsIG92ZXJyaWRlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgIERyb3AgaW50byBhIHNlY3Rpb24ncyBDdXN0b20gQ2xhc3MgZmllbGQgdG8gYnVtcCB0aGUgdGV4dCBpblxuICAgdGhhdCByb3cgYWJvdmUgdGhlIGNhcmQtdGV4dCBkZWZhdWx0ICgxNHB4KS5cbiAgICAgc3RhbmRhcmQgIOKGkiAxNnB4IGJvZHkgdGV4dCAoY29tZm9ydGFibGUgcmVhZGluZyBmb3IgZnVsbC13aWR0aCBwcm9zZSlcbiAgICAgbGVhZCAgICAgIOKGkiAyMHB4IGJvZHksIDMxcHggdGl0bGVzLCAxLjcgbGluZS1oZWlnaHQgKGludHJvL3dlbGNvbWUpICovXG4uc3RhbmRhcmQgLmNhcmQtdGV4dCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxuLmxlYWQgLmNhcmQtdGl0bGUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtMnhsKTtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5sZWFkIC5jYXJkLXRleHQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG4ubGVhZCAuY2FyZC10ZXh0IDppcyhoMSwgaDIsIGgzKSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG59XG5cbi5sZWFkIC5jYXJkLXRleHQgOmlzKGg0LCBoNSwgaDYpIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcbn1cblxuLnBhZ2UtbWFpbiBwLmxlYWQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGNhcmQuY3NzICDCtyAgdGhlIGNhcmQgIChpbWFnZSAvIGV5ZWJyb3cgLyB0aXRsZSAvIHRleHQgLyBjdGEpXG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzXG4gICBUaGUgc2luZ2xlIGNhcmQgcHJpbWl0aXZlIHVzZWQgYnkgY29sdW1ucywgYmlvcywgZmVlZHMsIGV0Yy5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLmNhcmQge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdC8qIGJvcmRlciArIHNoYWRvdyBjb21lIGZyb20gdGhlIGJhbmQncyBjb250ZXh0IHRva2Vuczogb24gYSBkYXJrIGJhbmQgdGhlXG5cdCAgIGJvcmRlciB3aWR0aCBjb2xsYXBzZXMgdG8gMCAocmVjbGFpbXMgdGhlIDFweCBzdHJpcCB0aGF0IGxlYWtlZCB0aGUgd2hpdGVcblx0ICAgY2FyZCBiZyBhcm91bmQgdGhlIGltYWdlKSBhbmQgdGhlIHNoYWRvdyBkZWVwZW5zLiBMaWdodCBiYW5kcyBmYWxsIGJhY2sgdG9cblx0ICAgdGhlIGhhaXJsaW5lICsgc29mdCBzaGFkb3cuICovXG5cdGJvcmRlcjogdmFyKC0tYmFuZC1jYXJkLWJvcmRlci13LCAxcHgpIHNvbGlkIHZhcigtLWJhbmQtY2FyZC1ib3JkZXIsIHZhcigtLWF1LWdyYXktMjAwKSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdGJveC1zaGFkb3c6IHZhcigtLWJhbmQtY2FyZC1zaGFkb3csIHZhcigtLXNoYWRvdy1zbSkpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHR0cmFuc2l0aW9uOiBib3gtc2hhZG93IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcblx0LyogV2hpdGUtc3VyZmFjZSBjYXJkcyByZXNldCBiYW5kIGxpbmsgdG9rZW5zOyBwbGFpbiBjYXJkcyAodHJhbnNwYXJlbnQsXG5cdCAgIGJhbmQtY29sb3JlZCkgaW5oZXJpdCB0aGUgc2VjdGlvbidzIHRva2VucyBpbnN0ZWFkIOKAlCBzZWUgYmVsb3cuICovXG59XG5cbi5jYXJkOmhvdmVyIHtcblx0Ym94LXNoYWRvdzogdmFyKC0tYmFuZC1jYXJkLXNoYWRvdy1ob3ZlciwgdmFyKC0tc2hhZG93LW1kKSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0zMDApKTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG4uY2FyZDpub3QoLmNhcmQtLXBsYWluKSB7XG5cdC0tYmFuZC1saW5rOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0LS1iYW5kLWxpbmstaG92ZXI6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uY2FyZC1pbWctbGluayB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jYXJkLWltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1hdS1uYXZ5KSwgdmFyKC0tYXUtbmF2eS1saWdodCkpO1xuXHQvKiBhIGxpbmtlZCBpbWFnZSBpcyBhIGJ1dHRvbiwgbm90IHRleHQg4oCUIHN0b3AgU2FmYXJpIHNob3dpbmcgdGhlIHRleHQtc2VsZWN0XG5cdCAgIEktYmVhbSAoYW5kIGRyYWdnaW5nKSB3aGVuIHRoZSBpbWFnZSBoYXMgd29yZHMgYmFrZWQgaW50byBpdC4gKi9cblx0LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcblx0dXNlci1zZWxlY3Q6IG5vbmU7XG5cdC13ZWJraXQtdXNlci1kcmFnOiBub25lO1xufVxuXG4vKiBpY29uIGxlYWQg4oCUIGljb24tbGVkIGNhcmRzIChzZXJ2aWNlcyAvIGZlYXR1cmVzKSBpbiBwbGFjZSBvZiBhIHBob3RvICovXG4uY2FyZC1pY29uIHtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHR3aWR0aDogMy4yNXJlbTtcblx0aGVpZ2h0OiAzLjI1cmVtO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG59XG5cbi5jYXJkLWJvZHkge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcblx0ZmxleDogMTtcbn1cblxuLmNhcmQtZXllYnJvdyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAxcHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1zdHlsZTogaXRhbGljO1xufVxuXG4uY2FyZC10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjI1O1xufVxuXG4uY2FyZC10aXRsZSBhIHtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmNhcmQtdGl0bGUgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLmNhcmQtdGV4dCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG4vKiBBdXRob3JlZCByaWNoIHRleHQg4oCUIHRoZSBDS0VkaXRvciBgY29udGVudGAgZmllbGQgbGFuZHMgd2hvbGUgaW5zaWRlXG4gICAuY2FyZC10ZXh0LCBhbmQgYmFzZS5jc3MgcmVzZXRzIGV2ZXJ5IG1hcmdpbiB0byAwLiBXaXRob3V0IHJoeXRobSBoZXJlIGFuXG4gICBhdXRob3JlZCA8aDM+IHNpdHMgZmx1c2ggYWdhaW5zdCB0aGUgcGFyYWdyYXBoIGFib3ZlIGl0IGFuZCB0aGUgYmxvY2sgcmVhZHNcbiAgIGFzIG9uZSBsdW1wICgucGFnZS1tYWluIHJlLWVzdGFibGlzaGVzIHRoZSBzYW1lIHJoeXRobSBmb3IgcGFnZSBjb250ZW50O1xuICAgdGhlc2UgYXJlIHRoZSBjYXJkLXNjYWxlIGVxdWl2YWxlbnRzIOKAlCB0aWdodGVyLCBiZWNhdXNlIGEgY2FyZCBpcyBhIG11Y2hcbiAgIG5hcnJvd2VyIG1lYXN1cmUpLlxuXG4gICBIZWFkaW5nIFNJWkUgbWF0dGVycyB0b286IGJhc2UuY3NzIGdpdmVzIGgzIC0tdGV4dC0yeGwsIHdoaWNoIGlzIGxhcmdlciB0aGFuXG4gICB0aGUgY2FyZCdzIG93biAuY2FyZC10aXRsZSAoLS10ZXh0LWxnKSwgc28gYW4gYXV0aG9yZWQgaGVhZGluZyB3YXNcbiAgIG91dC1zaG91dGluZyB0aGUgdGl0bGUgaXQgc2l0cyB1bmRlci4gU3RlcHBlZCBkb3duIHNvIHRoZSBoaWVyYXJjaHkgcmVhZHNcbiAgIGNhcmQtdGl0bGUgPiBhdXRob3JlZCBoZWFkaW5nID4gYm9keS5cblxuICAgRmlyc3QgY2hpbGQgc2l0cyBmbHVzaCB0byB0aGUgdG9wIOKAlCAuY2FyZC1ib2R5J3MgZmxleCBnYXAgYWxyZWFkeSBzcGFjZXMgaXRcbiAgIGZyb20gdGhlIHRpdGxlIGFib3ZlLiAqL1xuLmNhcmQtdGV4dCA+IDpmaXJzdC1jaGlsZCB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi5jYXJkLXRleHQgOmlzKHAsIHVsLCBvbCwgdGFibGUsIGJsb2NrcXVvdGUsIGZpZ3VyZSkge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmNhcmQtdGV4dCA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNikge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjI1O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi8qIEhlYWRpbmcgc2NhbGUgZm9yIGF1dGhvcmVkIGNhcmQgdGV4dC4gYmFzZS5jc3Mgc2l6ZXMgaGVhZGluZ3MgZm9yIGEgZnVsbFxuICAgcGFnZSAoaDMgaXMgLS10ZXh0LTJ4bCAvIDMxcHgpLCB3aGljaCBpbnNpZGUgYSBjYXJkIG91dC1zaG91dHMgdGhlXG4gICAuY2FyZC10aXRsZSBhYm92ZSBpdC4gUmVzY2FsZWQgdG8gc2l0IGJldHdlZW4gdGhlIGNhcmQgdGl0bGUgKC0tdGV4dC1sZyAvXG4gICAyMHB4KSBhbmQgdGhlIGJvZHkgY29weSAoLS10ZXh0LXNtIC8gMTRweCkg4oCUIGJ1dCBlYWNoIGxldmVsIHN0aWxsIHN0ZXBzLCBzb1xuICAgY2hvb3NpbmcgaDIgdnMgaDMgdnMgaDQgY29udGludWVzIHRvIG1lYW4gc29tZXRoaW5nLiBoNS9oNiBydW4gb3V0IG9mIHJvb21cbiAgIG9uIHNpemUgYWxvbmUgaW4gYSAxNOKAkzIwcHggYmFuZCwgc28gdGhleSBzZXBhcmF0ZSBieSB3ZWlnaHQgYW5kIGxldHRlcmZvcm1cbiAgIGluc3RlYWQsIHRoZSBzYW1lIHRyaWNrIGJhc2UuY3NzIHVzZXMgZm9yIGg2LiAqL1xuLmNhcmQtdGV4dCBoMSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG59XG5cbi5jYXJkLXRleHQgaDIge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xufVxuXG4uY2FyZC10ZXh0IGgzIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xufVxuXG4uY2FyZC10ZXh0IGg0IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLmNhcmQtdGV4dCBoNSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbi5jYXJkLXRleHQgaDYge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRsZXR0ZXItc3BhY2luZzogMC41cHg7XG59XG5cbi8qIGEgaGVhZGluZyBiZWxvbmdzIHdpdGggdGhlIHRleHQgdW5kZXIgaXQg4oCUIGtlZXAgdGhhdCBnYXAgdGlnaHRlciAqL1xuLmNhcmQtdGV4dCA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNikgKyA6aXMocCwgdWwsIG9sKSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uY2FyZC1jdGEge1xuXHRtYXJnaW4tdG9wOiBhdXRvO1xuXHRhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmNhcmQtY3RhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBsaW5rZWQgY2FyZCDigJQgdGhlIHdob2xlIGNhcmQgaXMgdGhlIGNsaWNrIHRhcmdldCAoYSBcInN0cmV0Y2hlZCBsaW5rXCIpLCBzbyB5b3VcbiAgIGRvbid0IGhhdmUgdG8gaGl0IHRoZSBsaW5rIHRleHQgZXhhY3RseS4gVGhlIGNhcmQncyBsaW5rIHN0cmV0Y2hlcyB0byBjb3ZlclxuICAgaXQ7IHRoZSBwb2ludGVyIGN1cnNvciBmb2xsb3dzLiAoVGV4dCBzZWxlY3Rpb24gaW5zaWRlIGlzIHRyYWRlZCBmb3IgdGhlIGZ1bGxcbiAgIGNsaWNrIGFyZWEg4oCUIGV4cGVjdGVkIGZvciBhIGNhcmQtYXMtYS1saW5rLikgKi9cbi5jYXJkLS1saW5rZWQge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5jYXJkLS1saW5rZWQgOmlzKC5jYXJkLWltZy1saW5rLCAuY2FyZC10aXRsZSBhLCAuY2FyZC1jdGEpOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0aW5zZXQ6IDA7XG59XG5cbi8qIG1lZGlhLW9ubHkgY2FyZCAoaW1hZ2UsIG5vIGJvZHkpOiBzaG93IHRoZSBpbWFnZSBhdCBpdHMgbmF0dXJhbCByYXRpbyB3aXRoIGFsbFxuICAgZm91ciBjb3JuZXJzIHJvdW5kZWQsIGFuZCBkb24ndCBzdHJldGNoIHRvIGEgdGFsbGVyIHNpYmxpbmcgKHdoaWNoIHdvdWxkIGxlYXZlXG4gICBhbiB1bi1yb3VuZGVkIHN0cmlwIG9mIGNhcmQgYmVsb3cgdGhlIGltYWdlKS4gKi9cbi5jYXJkLS1tZWRpYSB7XG5cdGFsaWduLXNlbGY6IHN0YXJ0O1xufVxuXG4vKiBubyBwbGFjZWhvbGRlciBncmFkaWVudCBoZXJlIOKAlCBpbWFnZS1vbmx5IGNhcmRzIGFyZSB1c3VhbGx5IHRyYW5zcGFyZW50IGxvZ29zXG4gICBvciBncmFwaGljcywgYW5kIHRoZSBuYXZ5IGZpbGwgd291bGQgc2hvdyB0aHJvdWdoIGFuZCBib3ggdGhlbSBpbi4gTGV0IHRoZVxuICAgY2FyZC9iYW5kIGJlaGluZCBzaG93IGluc3RlYWQuIChQaG90byBjYXJkcyBrZWVwIHRoZSBncmFkaWVudCBhcyBhIGxvYWRpbmcvXG4gICBmYWxsYmFjayBiYWNrZHJvcC4pICovXG4uY2FyZC0tbWVkaWEgLmNhcmQtaW1nIHtcblx0YXNwZWN0LXJhdGlvOiBhdXRvO1xuXHRoZWlnaHQ6IGF1dG87XG5cdGJhY2tncm91bmQ6IG5vbmU7XG59XG5cbi8qIHBvcnRyYWl0IHNlY3Rpb24gdG9rZW4gKEN1c3RvbSBDbGFzcyBcInBvcnRyYWl0XCIpIOKAlCBmb3Igcm93cyBvZiBwZW9wbGU6IHRoZVxuICAgZGVmYXVsdCAxNjo5IGNyb3Agc2xpY2VzIGEgaGVhZHNob3QgdGhyb3VnaCB0aGUgZmFjZSwgc28gY3JvcCB0byA0OjUgYW5kXG4gICBhbmNob3IgdG8gdGhlIHRvcCB0byBrZWVwIGhlYWRzIGluIGZyYW1lLiBBbHNvIHdvcmtzIG9uIGEgc2luZ2xlIGNhcmQuICovXG4ucG9ydHJhaXQgLmNhcmQtaW1nLFxuLmNhcmQtLXBvcnRyYWl0IC5jYXJkLWltZyB7XG5cdGFzcGVjdC1yYXRpbzogNC81O1xuXHRvYmplY3QtcG9zaXRpb246IHRvcDtcbn1cblxuLyogcGxhaW4gdmFyaWFudCDigJQgbm8gZmlsbCAoZS5nLiBvbiBhIGNvbG9yZWQgYmFuZCkuIG92ZXJmbG93OnZpc2libGUgYmVjYXVzZSB0aGVcbiAgIGNhcmQgaGFzIG5vIGZpbGwvYm9yZGVyIHRvIGNsaXAsIHRoZSBpbWFnZSByb3VuZHMgaXRzZWxmLCBhbmQgdGhlIHJvdW5kZWQtY29ybmVyXG4gICBjbGlwIHdhcyBjdXR0aW5nIGRlc2NlbmRlcnMgKHRoZSBcImdcIikgb2ZmIGEgY2FwdGlvbiBzaXR0aW5nIGZsdXNoIHRvIHRoZSBib3R0b20uICovXG4uY2FyZC0tcGxhaW4ge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Ym94LXNoYWRvdzogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLmNhcmQtLXBsYWluOmhvdmVyIHtcblx0dHJhbnNmb3JtOiBub25lO1xuXHRib3gtc2hhZG93OiBub25lO1xuXHRib3JkZXI6IDA7XG59XG5cbi8qIG9uIGEgcGxhaW4gY2FyZCAobm8gZmlsbCAvIG5vIG91dGxpbmUpIHRoZSBpbWFnZSBpcyBhIHN0YW5kYWxvbmUgdGlsZSDigJQgcm91bmRcbiAgIEFMTCBmb3VyIGNvcm5lcnMgKHRoZSBjYXJkJ3MgY2xpcCBvbmx5IHJvdW5kcyB0aGUgdG9wLCBzaW5jZSB0aGUgYm9keSBzaXRzXG4gICBiZWxvdyksIGFuZCBwdWxsIHRoZSBjYXB0aW9uIGZsdXNoLWxlZnQgdW5kZXIgaXQgd2l0aCB0aWdodCB0b3AgcGFkZGluZy4gKi9cbi5jYXJkLS1wbGFpbiAuY2FyZC1pbWcge1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xufVxuXG4uY2FyZC0tcGxhaW4gLmNhcmQtYm9keSB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIDAgMDtcbn1cblxuLyogcGxhaW4gY2FyZHMgc2l0IGRpcmVjdGx5IG9uIHRoZSBiYW5kLCBzbyB0aGVpciB0ZXh0IGZvbGxvd3MgdGhlIGJhbmQgdG9rZW5zICovXG4uY2FyZC0tcGxhaW4gLmNhcmQtdGl0bGUge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi5jYXJkLS1wbGFpbiAuY2FyZC10ZXh0IHtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG59XG5cbi8qIGhlYWRpbmdzIGF1dGhvcmVkIGluc2lkZSB0aGUgcmljaC10ZXh0IGNvbnRlbnQgZm9sbG93IHRoZSBiYW5kIHRvbyDigJQgb3RoZXJ3aXNlXG4gICBhbiA8aDI+IGluIGEgcGxhaW4gY2FyZCBzdGF5cyBuYXZ5IGFuZCBkaXNhcHBlYXJzIG9uIGEgZGFyayBiYW5kLiAqL1xuLmNhcmQtLXBsYWluIC5jYXJkLXRleHQgOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGZlYXR1cmUuY3NzICDCtyAgZnVsbC1ibGVlZCBmZWF0dXJlIGJsb2NrcyDigJQgcGFnZSBoZXJvICsgY292ZXIgYmFuZFxuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzcywgbGF5b3V0LmNzcyAoLnNlY3Rpb24gLyAuc2VjdGlvbi1pbm5lcilcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyog4pSA4pSA4pSAIEhFUk8g4oCUIHBhZ2UtdG9wIGJhbm5lciAoaW1hZ2Ugb3IgYmFja2dyb3VuZCB2aWRlbykg4pSA4pSA4pSAICovXG4uaGVybyB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0Lyogd2FzIDcwdmgg4oCUIGdyZXcgdW5ib3VuZGVkIG9uIHRhbGwgZGVza3RvcHMuIENhcCBpdDogYSBzZW5zaWJsZSBmbG9vciwgYVxuXHQgICBtb2Rlc3Qgdmlld3BvcnQtcmVsYXRpdmUgcHJlZmVyZW5jZSwgYW5kIGEgY2VpbGluZyBzbyBiaWcgc2NyZWVucyBkb24ndCBnZXRcblx0ICAgYSBodWdlIGJhbmQgb2YgZW1wdHkgaW1hZ2UuIENvbnRlbnQgc3RpbGwgZXhwYW5kcyBpdCBpZiBpdCBuZWVkcyB0by4gKi9cblx0bWluLWhlaWdodDogY2xhbXAoMzIwcHgsIDQ2dmgsIDQ2MHB4KTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LWRlZXApIGNlbnRlci9jb3ZlciBuby1yZXBlYXQ7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5oZXJvOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0aW5zZXQ6IDA7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCAyMCUsIHJnYmEoMCwgMjYsIDUxLCAwLjc1KSA3MCUsIHJnYmEoMCwgMjYsIDUxLCAwLjkpKTtcbn1cblxuLmhlcm8taW5uZXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHotaW5kZXg6IDI7XG5cdHdpZHRoOiAxMDAlO1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEyKSB2YXIoLS1ndXR0ZXIpO1xufVxuXG4uaGVyby10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IGNsYW1wKHZhcigtLXRleHQtM3hsKSwgNnZ3LCB2YXIoLS10ZXh0LTR4bCkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRtYXgtd2lkdGg6IDE4Y2g7XG5cdHRleHQtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMjAsIDQwLCAwLjYpO1xufVxuXG4uaGVyby1jYXB0aW9uIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoLXRleHQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG4uaGVyby1jb250YWN0IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG59XG5cbi5oZXJvLWNvbnRhY3QgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLyog4pSA4pSA4pSAIEhFUk8gQUJPVkUg4oCUIHNob3J0ZXIgYmFubmVyIGZvciBpbnRlcmlvciBwYWdlcyB3aXRoIHNpZGViYXIgYmVsb3cg4pSA4pSA4pSAICovXG4uaGVyby0tYWJvdmUge1xuXHRtaW4taGVpZ2h0OiBjbGFtcCgyMDBweCwgMzB2aCwgMzQwcHgpO1xufVxuXG4uaGVyby0tYWJvdmUgLmhlcm8tdGl0bGUge1xuXHRmb250LXNpemU6IGNsYW1wKHZhcigtLXRleHQtMnhsKSwgNXZ3LCB2YXIoLS10ZXh0LTN4bCkpO1xufVxuXG4vKiDilIDilIDilIAgSEVSTyBTUExJVCDigJQgdGV4dCBsZWZ0LCBwaG90byBjYXJkIHJpZ2h0LCBzb2xpZCBuYXZ5IOKUgOKUgOKUgCAqL1xuLmhlcm8tLXNwbGl0IHtcblx0YmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuXHRtaW4taGVpZ2h0OiBhdXRvO1xufVxuXG4uaGVyby0tc3BsaXQ6OmFmdGVyIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLmhlcm8tLXNwbGl0IC5oZXJvLWlubmVyIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEwKTtcbn1cblxuLmhlcm8tLXNwbGl0IC5oZXJvLXRpdGxlIHtcblx0dGV4dC1zaGFkb3c6IG5vbmU7XG59XG5cbi5oZXJvLS1zcGxpdCAuaGVyby1tZWRpYSBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0YXNwZWN0LXJhdGlvOiA0LzM7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbGcpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzYwcHgpIHtcblx0Lmhlcm8tLXNwbGl0IC5oZXJvLWlubmVyIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTYpO1xuXHR9XG5cdC5oZXJvLS1zcGxpdCAuaGVyby1tZWRpYSB7XG5cdFx0b3JkZXI6IC0xO1xuXHR9XG5cdC5oZXJvLS1zcGxpdCAuaGVyby1tZWRpYSBpbWcge1xuXHRcdGFzcGVjdC1yYXRpbzogMTYvOTtcblx0fVxufVxuLyog4pSA4pSA4pSAIENPVkVSIOKAlCBmdWxsLWJsZWVkIHBob3RvL3ZpZGVvIGJhbmQgd2l0aCBhIGNvbnRlbnQgcGFuZWwg4pSA4pSA4pSAICovXG4uc2VjdGlvbi0tY292ZXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdG1pbi1oZWlnaHQ6IDYwdmg7XG5cdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTEyKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSkgY2VudGVyL2NvdmVyIG5vLXJlcGVhdDtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnNlY3Rpb24tLWNvdmVyOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0aW5zZXQ6IDA7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgwLCAyNiwgNTEsIDAuOCksIHJnYmEoMCwgMjYsIDUxLCAwLjIpKTtcbn1cblxuLyogTm8gY29udGVudCBwYW5lbCDihpIgbm8gb3ZlcmxheTsgbGV0IHRoZSBwaG90byBzaG93IHVub2JzY3VyZWQuICovXG4uc2VjdGlvbi0tY292ZXI6bm90KDpoYXMoLmNvdmVyLXBhbmVsKSk6OmFmdGVyIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLyogd2lkdGg6MTAwJSBzdG9wcyB0aGUgZmxleCBiYW5kIGZyb20gY29sbGFwc2luZyAuc2VjdGlvbi1pbm5lciBkb3duIHRvIHRoZVxuICAgcGFuZWwncyB3aWR0aCAod2hpY2ggaXMgd2hhdCBjZW50cmVzIGl0KSDigJQgaW5zdGVhZCBpdCBmaWxscyB0aGUgY29udGVudCBjb2x1bW5cbiAgIChtYXgtd2lkdGgsIGNlbnRyZWQpLCBnaXZpbmcgdGhlIHBhbmVsIHJvb20gdG8gc2hpZnQgbGVmdC9yaWdodCB3aXRoaW4gaXQgYW5kXG4gICBhbGlnbmluZyB0aG9zZSBlZGdlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBwYWdlLiAqL1xuLnNlY3Rpb24tLWNvdmVyID4gLnNlY3Rpb24taW5uZXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHotaW5kZXg6IDI7XG5cdHdpZHRoOiAxMDAlO1xufVxuXG4uY292ZXItcGFuZWwge1xuXHRtYXgtd2lkdGg6IDU0MHB4O1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG4uY292ZXItcGFuZWwgOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpIHtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogY29udGVudCBsaW5rcyBvbiB0aGUgY292ZXIncyBkYXJrIGdyb3VuZCDigJQgbGlnaHQgZ29sZCwgbm8gZGVmYXVsdCB1bmRlcmxpbmVcbiAgICh0aGUgbmF2eSArIHVuZGVybGluZSBkZWZhdWx0IGlzIHVucmVhZGFibGUgb24gdGhlIGltYWdlKS4gVGhpcyBpcyB0aGUgaGFwcHlcbiAgIGRlZmF1bHQsIHNvIGF1dGhvcnMgZG9uJ3QgbmVlZCB0byBoYW5kLWNvbG9yIGV2ZXJ5IGxpbmsuICovXG4uY292ZXItcGFuZWwgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uY292ZXItcGFuZWwgYTpob3ZlciB7XG5cdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uY292ZXItcGFuZWwgLmNhcmQtY3RhIHtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyog4pSA4pSAIEZlYXR1cmUtbGluayBwYXR0ZXJuOiA8YT48c3Ryb25nPkhlYWRpbmc8L3N0cm9uZz48ZW0+U3ViLUNUQTwvZW0+PC9hPlxuICAgV29ya3MgaW4gYm90aCB0aGUgaGVybyBjYXB0aW9uICguaGVyby1jYXB0aW9uKSBhbmQgdGhlIGNvdmVyIHBhbmVsICguY292ZXItcGFuZWwpLlxuICAgU3R5bGVkIHRvIG1hdGNoIHRoZSBob21lcGFnZSBmZWF0dXJlIGxpbms6IGRhcmsgbmF2eSBib3gsIHNlcmlmIGhlYWRsaW5lLCB3aGl0ZSBzdWItbGluZS5cbiAgIEF1dGhvcnMgdXNlIEJvbGQgKyBJdGFsaWMgaW4gQ0tFZGl0b3IgYW5kIHdyYXAgYm90aCBpbiBhIGxpbmsuICovXG4uaGVyby1jYXB0aW9uIGE6aGFzKD4gc3Ryb25nKSxcbi5jb3Zlci1wYW5lbCBhOmhhcyg+IHN0cm9uZykge1xuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMjYsIDUxLCAwLjgyKTtcblx0Ym9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZykgPiBzdHJvbmcsXG4uY292ZXItcGFuZWwgYTpoYXMoPiBzdHJvbmcpID4gc3Ryb25nIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNlcmlmKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZykgPiBzcGFuLFxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZykgPiBlbSxcbi5jb3Zlci1wYW5lbCBhOmhhcyg+IHN0cm9uZykgPiBzcGFuLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKSA+IGVtIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5oZXJvLWNhcHRpb24gYTpoYXMoPiBzdHJvbmcpOmhvdmVyLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKTpob3ZlciB7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZyk6aG92ZXIgPiBzdHJvbmcsXG4uY292ZXItcGFuZWwgYTpoYXMoPiBzdHJvbmcpOmhvdmVyID4gc3Ryb25nIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4uaGVyby1jYXB0aW9uIGE6aGFzKD4gc3Ryb25nKTpob3ZlciA+IHNwYW4sXG4uaGVyby1jYXB0aW9uIGE6aGFzKD4gc3Ryb25nKTpob3ZlciA+IGVtLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKTpob3ZlciA+IHNwYW4sXG4uY292ZXItcGFuZWwgYTpoYXMoPiBzdHJvbmcpOmhvdmVyID4gZW0ge1xuXHR0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogQ0tFZGl0b3IgaW5zZXJ0cyBhIDxicj4gYmV0d2VlbiB0aGUgPHN0cm9uZz4gYW5kIDxlbT47IHN1cHByZXNzIGl0IHNpbmNlXG4gICBib3RoIGFyZSBhbHJlYWR5IGRpc3BsYXk6YmxvY2suICovXG4uaGVyby1jYXB0aW9uIGE6aGFzKD4gc3Ryb25nKSA+IGJyLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKSA+IGJyIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLyog4pSA4pSA4pSAIGNvdmVyIG92ZXJsYXkgYWxpZ25tZW50IOKUgOKUgOKUgFxuICAgVGhlIHBhbmVsIGlzIENFTlRFUkVEIGJ5IGRlZmF1bHQuIERyb3AgYSB0b2tlbiBpbnRvIHRoZSBzZWN0aW9uJ3MgQ3VzdG9tIENsYXNzXG4gICB0byBzaGlmdCBpdCB0byB0aGUgcGFnZSdzIGNvbnRlbnQtY29sdW1uIGVkZ2U7IHRoZSBncmFkaWVudCdzIGRhcmsgc2lkZSBmb2xsb3dzXG4gICBzbyB0aGUgb3ZlcmxheSB0ZXh0IHN0YXlzIGxlZ2libGUgb3ZlciBpdDpcbiAgICAgY292ZXItbGVmdCAgIOKGkiBwYW5lbCBvbiB0aGUgTEVGVCAgKGdyYWRpZW50IGFscmVhZHkgZGFya2VucyB0aGUgbGVmdClcbiAgICAgY292ZXItcmlnaHQgIOKGkiBwYW5lbCBvbiB0aGUgUklHSFQgKGdyYWRpZW50IGZsaXBzIHRvIGRhcmtlbiB0aGUgcmlnaHQpXG4gICBQYW5lbCB3aWR0aCwgdmVydGljYWwgY2VudGVyaW5nIGFuZCB0ZXh0LWFsaWdubWVudCBhcmUgdW5jaGFuZ2VkIOKAlCBvbmx5IHRoZVxuICAgaG9yaXpvbnRhbCBwbGFjZW1lbnQgKGFuZCwgZm9yIHRoZSByaWdodCwgdGhlIGdyYWRpZW50IGRpcmVjdGlvbikgc3dpdGNoLiAqL1xuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWxlZnQgLmNvdmVyLXBhbmVsIHtcblx0bWFyZ2luLWlubGluZTogMCBhdXRvO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItcmlnaHQgLmNvdmVyLXBhbmVsIHtcblx0bWFyZ2luLWlubGluZTogYXV0byAwO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItcmlnaHQ6OmFmdGVyIHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDI3MGRlZywgcmdiYSgwLCAyNiwgNTEsIDAuOCksIHJnYmEoMCwgMjYsIDUxLCAwLjIpKTtcbn1cblxuLyog4pSA4pSA4pSAIGNvdmVyIGdyYWRpZW50IGJhY2tncm91bmRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgRHJvcCBhIGdyYWRpZW50IHRva2VuIGludG8gQ3VzdG9tIENsYXNzIHRvIGdpdmUgdGhlIGNvdmVyIGEgcmljaFxuICAgYmFja2dyb3VuZCB3aXRob3V0IG5lZWRpbmcgYSBwaG90by4gSWYgdGhlIGF1dGhvciBBTFNPIHVwbG9hZHMgYVxuICAgcGhvdG8sIHRoZSBpbmxpbmUgYmFja2dyb3VuZC1pbWFnZSBvdmVycmlkZXMgdGhlIENTUyBncmFkaWVudFxuICAgbmF0dXJhbGx5IOKAlCBubyAhaW1wb3J0YW50LCBubyByZW5kZXJlciBjaGFuZ2UuXG4gICAgIGNvdmVyLW5hdnkgICAg4oaSIGRlZXAgZGlhZ29uYWwgbmF2eSBzd2VlcCAoYnJhbmQgZGVmYXVsdClcbiAgICAgY292ZXItb2NlYW4gICDihpIgbmF2eS10by10ZWFsLCBjb29sZXIgYW5kIG1vcmUgZHluYW1pY1xuICAgICBjb3Zlci1mb3Jlc3QgIOKGkiBkZWVwIGdyZWVuXG4gICAgIGNvdmVyLWdvbGQgICAg4oaSIG5hdnktdG8tZ29sZCwgd2FybSBhbmQgaW52aXRpbmdcbiAgICAgY292ZXItZWFydGggICDihpIgbmF2eS10by1icm93biwgZ3JvdW5kZWRcbiAgICAgY292ZXItc3Vuc2V0ICDihpIgbmF2eS10by1vcmFuZ2UsIGJvbGQgYW5kIGVuZXJnZXRpY1xuICAgVGhlIHNjcmltIG92ZXJsYXkgaXMgc3VwcHJlc3NlZCBmb3IgZ3JhZGllbnQgY292ZXJzIOKAlCB0aGUgZ3JhZGllbnRcbiAgIGl0c2VsZiBwcm92aWRlcyBlbm91Z2ggY29udHJhc3QgZm9yIHdoaXRlIHRleHQuICovXG4uc2VjdGlvbi0tY292ZXIuY292ZXItbmF2eSxcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1vY2Vhbixcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1mb3Jlc3QsXG4uc2VjdGlvbi0tY292ZXIuY292ZXItZ29sZCxcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1lYXJ0aCxcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1zdW5zZXQge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItbmF2eTo6YWZ0ZXIsXG4uc2VjdGlvbi0tY292ZXIuY292ZXItb2NlYW46OmFmdGVyLFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWZvcmVzdDo6YWZ0ZXIsXG4uc2VjdGlvbi0tY292ZXIuY292ZXItZ29sZDo6YWZ0ZXIsXG4uc2VjdGlvbi0tY292ZXIuY292ZXItZWFydGg6OmFmdGVyLFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLXN1bnNldDo6YWZ0ZXIge1xuXHRiYWNrZ3JvdW5kOiBub25lO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItbmF2eSB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDFhMzMgMCUsICMwMDMzNjYgNTAlLCAjMDA0YTZlIDEwMCUpO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItb2NlYW4ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDAxYTMzIDAlLCAjMGEzZDYyIDQwJSwgIzFlNWY3NCAxMDAlKTtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWZvcmVzdCB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwYTFmMTUgMCUsICMxYjQzMzIgNTAlLCAjMmQ2YTRmIDEwMCUpO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItZ29sZCB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDFhMzMgMCUsICMwMDMzNjYgNDAlLCAjQzY5NTJCIDEwMCUpO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItZWFydGgge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDAxYTMzIDAlLCAjNGEzNzI4IDUwJSwgIzhCNDUxMyAxMDAlKTtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLXN1bnNldCB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDFhMzMgMCUsICMwMDMzNjYgMzUlLCAjYzQ1ZTFhIDEwMCUpO1xufVxuXG4vKiDilIDilIDilIAgQ09WRVIgSEVSTyBTUExJVCDigJQgYW5nbGVkIGhlcm8gd2l0aCBmbG9hdGluZyBsaW5rcyBjYXJkIOKUgOKUgOKUgOKUgFxuICAgVG9rZW46IFwiY292ZXItaGVyby1zcGxpdFwiIGluIHRoZSBzZWN0aW9uJ3MgQ3VzdG9tIENsYXNzIGZpZWxkLlxuICAgVHVybnMgYSBwaG90b193aWRlIGNvdmVyIGludG8gYSBmdWxsLWJsZWVkIGhlcm8gd2l0aCBhIGRpYWdvbmFsLVxuICAgZWRnZWQgbmF2eSB0ZXh0IHBhbmVsIG9uIHRoZSBsZWZ0IChiYWRnZSBvdmVyZmxvd3MgaW50byB0aGUgcGhvdG8pXG4gICBhbmQgYSBmbG9hdGluZyByb3VuZGVkIG5hdnkgbGlua3MgY2FyZCBvbiB0aGUgcmlnaHQuIFRoZSBiYWNrZ3JvdW5kXG4gICBpbWFnZSBmaWxscyB0aGUgZW50aXJlIHNlY3Rpb247IHRoZSBkaWFnb25hbCBpcyBhIGNsaXBwZWQgOjpiZWZvcmVcbiAgIG9uIC5jb3Zlci10ZXh0IHNvIGNvbnRlbnQgKGVzcGVjaWFsbHkgdGhlIGJhZGdlKSBjYW4gb3ZlcmZsb3cgaXQuXG4gICBTdGFja3Mgb24gbW9iaWxlIHdpdGggdGhlIHRleHQgb3ZlcmxheWluZyB0aGUgcGhvdG8uICovXG4vKiAtLS0gc2VjdGlvbiBvdmVycmlkZXMgLS0tICovXG4uY292ZXItaGVyby1zcGxpdC5zZWN0aW9uLS1jb3ZlciB7XG5cdHBhZGRpbmc6IDA7XG5cdG1pbi1oZWlnaHQ6IGF1dG87XG5cdGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuXG4uY292ZXItaGVyby1zcGxpdC5zZWN0aW9uLS1jb3Zlcjo6YWZ0ZXIge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCA+IC5zZWN0aW9uLWlubmVyIHtcblx0bWF4LXdpZHRoOiBub25lO1xuXHRwYWRkaW5nOiAwO1xufVxuXG4vKiAtLS0gZ3JpZCAtLS0gKi9cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1wYW5lbCB7XG5cdG1heC13aWR0aDogbm9uZTtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRhbGlnbi1pdGVtczogc3RyZXRjaDtcblx0bWluLWhlaWdodDogNDIwcHg7XG59XG5cbi8qIC0tLSBsZWZ0IHBhbmVsOiBhbmdsZWQgbGlnaHQgYmFja2dyb3VuZCB2aWEgOjpiZWZvcmUgLS0tICovXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItdGV4dCB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMTApIDE2JSB2YXIoLS1zcGFjZS0xMCkgY2xhbXAodmFyKC0tc3BhY2UtOCksIDV2dywgdmFyKC0tc3BhY2UtMTYpKTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHR6LWluZGV4OiAyO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItdGV4dDo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcIjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAxMDAlIDAsIDgyJSAxMDAlLCAwIDEwMCUpO1xuXHR6LWluZGV4OiAtMTtcbn1cblxuLyogLS0tIHJpZ2h0IHBhbmVsOiBmbG9hdGluZyBjYXJkIC0tLSAqL1xuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWxpbmtzIHtcblx0YWxpZ24tc2VsZjogY2VudGVyO1xuXHRqdXN0aWZ5LXNlbGY6IGVuZDtcblx0YmFja2dyb3VuZDogcmdiYSgwLCAyMCwgNDYsIDAuOTIpO1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpIHZhcigtLXNwYWNlLTYpO1xuXHRtYXgtd2lkdGg6IDM4MHB4O1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTYpIGNsYW1wKHZhcigtLXNwYWNlLTYpLCAzdncsIHZhcigtLXNwYWNlLTEyKSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHotaW5kZXg6IDI7XG59XG5cbi8qIC0tLSBleWVicm93IC0tLSAqL1xuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tZXllYnJvdyB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4yZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLWV5ZWJyb3c6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogNDhweDtcblx0aGVpZ2h0OiAzcHg7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLyogLS0tIGhlYWRpbmcgKyBiYWRnZSByb3cgLS0tICovXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1oZWFkaW5nIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiBjbGFtcCh2YXIoLS10ZXh0LTJ4bCksIDMuNXZ3LCAzLjVyZW0pO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0bWFyZ2luOiAwO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1zdWJ0aXRsZSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjE4ZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLWJhZGdlIHtcblx0d2lkdGg6IGNsYW1wKDEwMHB4LCAxMnZ3LCAxNzBweCk7XG5cdGhlaWdodDogYXV0bztcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIC0tLSB0YWdsaW5lIC0tLSAqL1xuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tdGFnbGluZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNlcmlmKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC1zdHlsZTogaXRhbGljO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bGluZS1oZWlnaHQ6IDEuNjtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi8qIC0tLSBsaW5rcyBjYXJkIGNvbnRlbnQgLS0tICovXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItbGlua3MgaDIge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1uYXYge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRwYWRkaW5nOiAwO1xuXHRtYXJnaW46IDA7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLW5hdiBsaSArIGxpIHtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLW5hdiBhIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtMik7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1uYXYgYTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tbmF2IGE6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHdpZHRoOiA3cHg7XG5cdGhlaWdodDogN3B4O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHR0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4vKiAtLS0gdGFibGV0IC0tLSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDk4MHB4KSB7XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1wYW5lbCB7XG5cdFx0bWluLWhlaWdodDogMzYwcHg7XG5cdH1cblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLXRleHQge1xuXHRcdHBhZGRpbmctcmlnaHQ6IDIwJTtcblx0fVxuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItdGV4dDo6YmVmb3JlIHtcblx0XHRjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAxMDAlIDAsIDg1JSAxMDAlLCAwIDEwMCUpO1xuXHR9XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1saW5rcyB7XG5cdFx0bWF4LXdpZHRoOiAzMjBweDtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS01KTtcblx0fVxuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1iYWRnZSB7XG5cdFx0d2lkdGg6IGNsYW1wKDgwcHgsIDEwdncsIDEyMHB4KTtcblx0fVxufVxuLyogLS0tIG1vYmlsZTogdGV4dCBvdmVyIHBob3RvLCBhbmdsZWQgcmV2ZWFsLCBsaW5rcyBiZWxvdyAtLS0gKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjBweCkge1xuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItcGFuZWwge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHRcdG1pbi1oZWlnaHQ6IGF1dG87XG5cdH1cblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLXRleHQge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpIHZhcigtLWd1dHRlcikgdmFyKC0tc3BhY2UtMTYpIHZhcigtLWd1dHRlcik7XG5cdH1cblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLXRleHQ6OmJlZm9yZSB7XG5cdFx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1MywgMjQ3LCAwLjk0KTtcblx0XHRjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAxMDAlIDAsIDEwMCUgODIlLCAwIDEwMCUpO1xuXHR9XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1saW5rcyB7XG5cdFx0bWF4LXdpZHRoOiBub25lO1xuXHRcdG1hcmdpbjogMDtcblx0XHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0xMCk7XG5cdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRqdXN0aWZ5LXNlbGY6IHN0cmV0Y2g7XG5cdFx0YWxpZ24tc2VsZjogc3RyZXRjaDtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS04KSB2YXIoLS1ndXR0ZXIpO1xuXHR9XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLWhlYWRpbmcge1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdH1cblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tYmFkZ2Uge1xuXHRcdHdpZHRoOiA5MHB4O1xuXHR9XG59XG4vKiBzaGFyZWQgZnVsbC1ibGVlZCBiYWNrZ3JvdW5kIHZpZGVvIChoZXJvICsgY292ZXIpICovXG4uZmVhdHVyZS12aWRlbyB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0aW5zZXQ6IDA7XG5cdHotaW5kZXg6IDA7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uZmVhdHVyZS12aWRlbyBpZnJhbWUge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogNTAlO1xuXHRsZWZ0OiA1MCU7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXHR3aWR0aDogMTc3Ljc4dmg7XG5cdG1pbi13aWR0aDogMTAwJTtcblx0aGVpZ2h0OiA1Ni4yNXZ3O1xuXHRtaW4taGVpZ2h0OiAxMDAlO1xuXHRib3JkZXI6IDA7XG59XG5cbi8qIOKUgOKUgOKUgCBvcHRpb25hbCBoZXJvIGV4dHJhcyAodmFyLWdhdGVkIGluIGNvbXBvbmVudHMvaGVyby50dCkg4pSA4pSA4pSAXG4gICBVc2VkIGJ5IHRoZSBkZXBhcnRtZW50IHRlbXBsYXRlOiBhIGdvbGQgZXllYnJvdyBhYm92ZSB0aGUgdGl0bGUgYW5kIGFcbiAgIENUQSBwYWlyIGJlbG93IHRoZSBsZWFkLiBBYnNlbnQgb24gcGFnZXMgdGhhdCBkb24ndCBzZXQgdGhlbSwgc28gdGhlXG4gICBtYWluLXNpdGUgaGVybyBpcyB1bmNoYW5nZWQuICovXG4uaGVyby1leWUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMjJlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmhlcm8tY3RhcyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi8qIEdob3N0IGJ1dHRvbiBvbiB0aGUgaGVybydzIGRhcmsgZ3JvdW5kIOKAlCB0aGUgZGVtbydzIHJlZmluZWQgdHJlYXRtZW50OlxuICAgcXVpZXQgYnkgZGVmYXVsdCAodHJhbnNsdWNlbnQgYm9yZGVyLCBkaW1tZWQgdGV4dCksIGFuZCBvbiBob3ZlciBpdCBsaWZ0c1xuICAgd2l0aCBhIGZhaW50IGZpbGwgYW5kIGEgZnVsbCBnb2xkIG91dGxpbmUuIFNjb3BlZCB0byAuaGVyby1jdGFzIHNvIGl0XG4gICBvdmVycmlkZXMgdGhlIGxpZ2h0LWdyb3VuZCBiYXNlIC5idG4tZ2hvc3QgKGdvbGQgdGV4dCkgd2l0aG91dCB0b3VjaGluZyBpdFxuICAgZWxzZXdoZXJlLiAqL1xuLmhlcm8tY3RhcyAuYnRuLWdob3N0IHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xuXHRib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTtcbn1cblxuLmhlcm8tY3RhcyAuYnRuLWdob3N0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBwYWdlLmNzcyAgwrcgIGludGVyaW9yIHBhZ2UgbGF5b3V0IOKAlCBzaWRlIG5hdiArIGNvbnRlbnRcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3MgKGFuZCBjaHJvbWUuY3NzIGZvciAubmF2LXRyZWUgc3R5bGluZylcbiAgIFVzZWQgYnkgZGVwYXJ0bWVudCBjb250ZW50IHBhZ2VzOiBhIHN0aWNreSBzaWRlLW5hdiBjb2x1bW4gYmVzaWRlXG4gICB0aGUgbWFpbiBDS0VkaXRvciBib2R5LiBTdGFja3MgdG8gb25lIGNvbHVtbiBvbiBuYXJyb3cgc2NyZWVucy5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLnBhZ2UtbGF5b3V0IHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMCkgdmFyKC0tZ3V0dGVyKTtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyNDBweCBtaW5tYXgoMCwgMWZyKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS0xMCk7XG5cdGFsaWduLWl0ZW1zOiBzdGFydDtcbn1cblxuLyogU3RpY2t5IHVuZGVyIHRoZSBoZWFkZXIsIGJ1dCBjYXBwZWQgdG8gdGhlIHZpZXdwb3J0IHNvIGEgdGFsbCBtZW51IHNjcm9sbHNcbiAgIGluc2lkZSBpdHNlbGYgaW5zdGVhZCBvZiBoaWRpbmcgaXRzIGxvd2VyIGl0ZW1zIGJlbG93IHRoZSBmb2xkIChhIHN0aWNreSBib3hcbiAgIGRvZXNuJ3Qgc2Nyb2xsIG9uIGl0cyBvd24g4oCUIHdpdGhvdXQgdGhpcyBjYXAgeW91J2QgaGF2ZSB0byBzY3JvbGwgdGhlIHdob2xlXG4gICBwYWdlIHRvIHJlYWNoIHRoZSBib3R0b20gbGlua3MpLiAqL1xuLnBhZ2Utc2lkZWJhciB7XG5cdHBvc2l0aW9uOiBzdGlja3k7XG5cdHRvcDogY2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLXNwYWNlLTMpKTtcblx0bWF4LWhlaWdodDogY2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1oZWlnaHQpIC0gdmFyKC0tc3BhY2UtNikpO1xuXHRvdmVyZmxvdy15OiBhdXRvO1xuXHRvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluO1xuXHQvKiBoaWRkZW4gdW50aWwgaG92ZXIgc28gYSB0YWxsIG5hdiBkb2Vzbid0IHNob3cgYSBzY3JvbGxiYXIgb24gbG9hZCAqL1xuXHRzY3JvbGxiYXItd2lkdGg6IG5vbmU7IC8qIEZpcmVmb3ggKi9cblx0c2Nyb2xsYmFyLWNvbG9yOiB2YXIoLS1hdS1ncmF5LTMwMCkgdHJhbnNwYXJlbnQ7XG59XG5cbi5wYWdlLXNpZGViYXI6aG92ZXIge1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG59XG5cbi5wYWdlLXNpZGViYXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcblx0d2lkdGg6IDA7XG59XG5cbi5wYWdlLXNpZGViYXI6aG92ZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcblx0d2lkdGg6IDZweDtcbn1cblxuLnBhZ2Utc2lkZWJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLnBhZ2Utc2lkZWJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTMwMCk7XG5cdGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLnBhZ2Utc2lkZWJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTQwMCk7XG59XG5cbi8qIG9wdGlvbmFsIFwiwqsgUGFyZW50IHVuaXRcIiBsaW5rIGFib3ZlIHRoZSBkZXB0IG5hbWUgKHNpZGViYXJfYmFja2xpbmsgaG9vaykgKi9cbi5zaWRlYmFyLWJhY2sge1xuXHRkaXNwbGF5OiBibG9jaztcblx0cGFkZGluZzogMCB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnNpZGViYXItYmFjazpob3Zlcixcbi5zaWRlYmFyLWJhY2s6Zm9jdXMtdmlzaWJsZSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIG9wdGlvbmFsIGJ1dHRvbiByb3cgdW5kZXIgdGhlIGhlcm8gb24gZnVsbC13aWR0aCBwYWdlcyAoYXVfbWFpbi53cmFwIHBhZ2VfbGlua3MgaG9vaykgKi9cbi5wYWdlLWxpbmtzIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tZ3V0dGVyKSAwO1xufVxuXG4ucGFnZS1saW5rcy1pbm5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xufVxuXG4ucGFnZS1kZXB0IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDEuMztcblx0cGFkZGluZzogMCB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi8qIOKUgOKUgOKUgCBwYWdlIGNvbnRlbnQgcmh5dGhtICh0aGUgY29sdW1uIGhvbGRzIHJhdyBDS0VkaXRvciBib2R5KSDilIDilIDilIAgKi9cbi5wYWdlLW1haW4ge1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi8qIHBhZ2UgdGl0bGUg4oCUIGEgc2hvcnQgZ29sZCBhY2NlbnQgcnVsZSBtYXJrcyBpdCBhcyB0aGUgcGFnZSBoZWFkZXIgKi9cbi5wYWdlLW1haW4gaDEge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtNHhsKTtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG4ucGFnZS1tYWluIGgxOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bGVmdDogMDtcblx0Ym90dG9tOiAwO1xuXHR3aWR0aDogMi41cmVtO1xuXHRoZWlnaHQ6IDNweDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IDJweDtcbn1cblxuLyogY29udGVudCBoZWFkaW5ncyDigJQgc3RlcHBlZCBkb3duIG9uZSBsZXZlbCBmcm9tIHRoZSBkaXNwbGF5IHNjYWxlIHNvIHRoZXlcbiAgIHJlYWQgYXMgaW5saW5lIHNlY3Rpb24gZGl2aWRlcnMsIG5vdCBiYW5uZXItc2l6ZWQgdGl0bGVzICovXG4ucGFnZS1tYWluIGgyIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTJ4bCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEwKTtcbn1cblxuLnBhZ2UtbWFpbiBoMyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4ucGFnZS1tYWluIGg0IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5wYWdlLW1haW4gaDUsIC5wYWdlLW1haW4gaDYge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnBhZ2UtbWFpbiBwLCAucGFnZS1tYWluIHVsLCAucGFnZS1tYWluIG9sLCAucGFnZS1tYWluIHRhYmxlLCAucGFnZS1tYWluIGJsb2NrcXVvdGUsIC5wYWdlLW1haW4gZmlndXJlLCAucGFnZS1tYWluIHByZSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4vKiBUd28gc2VwYXJhdGUgY29uY2VybnMsIGRvbid0IGNvbmZsYXRlIHRoZW06XG4gICDCtyB0aGUgR1JJRCBpcyBhIHNlbGYtY29udGFpbmVkIGJsb2NrLCBzbyBpdCB0YWtlcyBpdHMgdG9wIGdhcCBmcm9tIHRoZSBydWxlXG4gICAgIGFib3ZlIGxpa2UgYW4gYWNjb3JkaW9uIG9yIGEgY2FsbG91dCBkb2VzIOKAlCB0aGF0IGlzIHdoYXQgc2VwYXJhdGVzIGl0IGZyb21cbiAgICAgdGhlIHBhcmFncmFwaC9pbWFnZS90aXRsZSBiZWZvcmUgaXQ7XG4gICDCtyBhIGdyaWQgQ0VMTCBzdGFydHMgaXRzIG93biBjb2x1bW4sIHNvIHdoYXRldmVyIGxlYWRzIGEgY2VsbCBtdXN0IHNpdCBmbHVzaFxuICAgICBhdCBpdHMgdG9wLiBXaXRob3V0IHRoaXMgYW4gPGgyPiBkcmFncyBpdHMgNjRweCBwYWdlLXNlY3Rpb24gbWFyZ2luIGludG9cbiAgICAgdGhlIGNlbGwgYW5kIGRyb3BzIHRoZSBoZWFkaW5nIGZhciBiZWxvdyB0aGUgdG9wIG9mIGl0cyBjb2x1bW4uXG4gICBHZXR0aW5nIG9ubHkgdGhlIHNlY29uZCBoYWxmIHJpZ2h0IGlzIHdoYXQgbWFkZSB0aGUgaGVhZGluZ3MgY29sbGlkZSB3aXRoIHRoZVxuICAgaW1hZ2UgYWJvdmUgdGhlbSBvbiBhIGNvbnRhY3QgcGFnZSB3aXRoIHRleHRfcG9zaXRpb24gXCJhYm92ZVwiLiAqL1xuLnBhZ2UtbWFpbiAuZ3JpZCA+ICogPiA6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4vKiB0aGUgbGVhZCBsaW5lIHJpZ2h0IHVuZGVyIHRoZSB0aXRsZSByZWFkcyBhcyBhIHN1YnRpdGxlIOKAlCBrZWVwIGl0IGNsb3NlICovXG4ucGFnZS1tYWluIGgxICsgaDIge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4vKiBhIGhlYWRpbmcgdGFyZ2V0ZWQgYnkgYW4gaW4tcGFnZSBhbmNob3IgKGUuZy4gYW4gXCJvbiB0aGlzIHBhZ2VcIiBqdW1wLW5hdilcbiAgIGNsZWFycyB0aGUgc3RpY2t5IGhlYWRlciB3aGVuIHNjcm9sbGVkIHRvLCBpbnN0ZWFkIG9mIGhpZGluZyB1bmRlciBpdC4gKi9cbi5wYWdlLW1haW4gOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpW2lkXSB7XG5cdHNjcm9sbC1tYXJnaW4tdG9wOiBjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tc3BhY2UtNCkpO1xufVxuXG4vKiBzZWxmLWNvbnRhaW5lZCBibG9ja3MgdGhhdCBzaXQgaW4gdGhlIGJvZHkgY29weSBidXQgYXJlbid0IGluIHRoZSBiYXNlIHJoeXRobVxuICAgbGlzdCDigJQgZ2l2ZSB0aGVtIHRoZSBzYW1lIHRvcCBnYXAgYWZ0ZXIgYSBoZWFkaW5nL3BhcmFncmFwaC4gKi9cbi5wYWdlLW1haW4gLmFjY29yZGlvbiwgLnBhZ2UtbWFpbiAuY2FsbG91dCwgLnBhZ2UtbWFpbiAuY3RhLWNhbGxvdXQsIC5wYWdlLW1haW4gLnRhYmxlLXdyYXAsIC5wYWdlLW1haW4gLmdyaWQsIC5wYWdlLW1haW4gLnZpZGVvIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi8qIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGNvbHVtbiBuZXZlciBhZGRzIGEgdG9wIGdhcCAodGl0bGUgb3IgZmVhdHVyZSBpbWFnZSkgKi9cbi5wYWdlLW1haW4gPiA6Zmlyc3QtY2hpbGQsIC5wYWdlLWZlYXR1cmUgKyAqIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLyogc2VsZi1jb250YWluZWQgY29tcG9uZW50cyAoY2FyZHMpIG1hbmFnZSB0aGVpciBvd24gaW50ZXJuYWwgc3BhY2luZyB2aWFcbiAgIC5jYXJkLWJvZHkncyBnYXAg4oCUIGV4ZW1wdCB0aGVpciBjaGlsZHJlbiBmcm9tIHRoZSBwYWdlLWNvbnRlbnQgcmh5dGhtIHNvIGFcbiAgIC5jYXJkLXRpdGxlIChoMikgb3IgLmNhcmQtdGV4dCAocCkgZG9lc24ndCBpbmhlcml0IHRoZSBiaWcgc2VjdGlvbiBtYXJnaW5zICovXG4ucGFnZS1tYWluIC5jYXJkLWJvZHkgPiAqIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLnBhZ2UtbWFpbiAuc2lkZW5vdGUgPiA6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4vKiBwYWdlIGZlYXR1cmUgaW1hZ2UgKHRoZSBgcGFnZWltYWdlYCBmaWVsZCkg4oCUIHNpdHMgYWJvdmUgdGhlIGNvbnRlbnQgKi9cbi5wYWdlLWZlYXR1cmUge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiBhdXRvO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLyogaW5saW5lIGNhcm91c2VsIGluIHBhZ2UgYm9keSDigJQgc2hvcnRlciB0aGFuIHRoZSBiYXNlIDMvMiBkZWZhdWx0ICovXG4ucGFnZS1tYWluID4gLmNhcm91c2VsIHtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLnBhZ2UtZmVhdHVyZS13cmFwIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLnBhZ2UtZmVhdHVyZS13cmFwIC5wYWdlLWZlYXR1cmUge1xuXHRtYXJnaW4tYm90dG9tOiAwO1xuXHRib3JkZXItcmFkaXVzOiAwO1xufVxuXG4ucGFnZS1mZWF0dXJlLWNhcHRpb24ge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGJvdHRvbTogMDtcblx0bGVmdDogMDtcblx0cmlnaHQ6IDA7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHJnYmEoMCwgMzEsIDYzLCAwLjg1KSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0ZmxleC13cmFwOiB3cmFwO1xufVxuXG4ucGFnZS1mZWF0dXJlLWNhcHRpb24gc3Ryb25nIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5wYWdlLWZlYXR1cmUtY2FwdGlvbiBzcGFuIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0b3BhY2l0eTogMC44NTtcbn1cblxuW2RhdGEtZGlhbG9nLW9wZW5dLnBhZ2UtZmVhdHVyZS13cmFwIHtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG5bZGF0YS1kaWFsb2ctb3Blbl0ucGFnZS1mZWF0dXJlLXdyYXA6aG92ZXIgLnBhZ2UtZmVhdHVyZS1jYXB0aW9uIHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCByZ2JhKDAsIDMxLCA2MywgMC45NSkpO1xufVxuXG4vKiBwYWdlLWZlYXR1cmUtdG9wIOKAlCBjYXJvdXNlbCBvciBoZXJvIGltYWdlIGFib3ZlIHRoZSBzaWRlYmFyIGdyaWQsXG4gICBjb25zdHJhaW5lZCB0byB0aGUgY29udGVudCBtYXgtd2lkdGggKG5vdCBmdWxsLWJsZWVkKS4gKi9cbi5wYWdlLWZlYXR1cmUtdG9wIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1ndXR0ZXIpIDA7XG59XG5cbi5wYWdlLWZlYXR1cmUtdG9wIC5jYXJvdXNlbC1mZWF0dXJlIHtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xufVxuXG4ucGFnZS1mZWF0dXJlLXRvcCAuY2Fyb3VzZWwtZmVhdHVyZSAuY2Fyb3VzZWwtc2xpZGUgaW1nIHtcblx0aGVpZ2h0OiAxMDAlO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcbn1cblxuLnBhZ2UtZmVhdHVyZS1iYW5uZXIge1xuXHR3aWR0aDogMTAwJTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzk7XG59XG5cbi8qIOKUgOKUgOKUgCBjb250ZW50LWFkdmFuY2VkOiBzZWN0aW9ucyBpbnNpZGUgdGhlIGNvbnRlbnQgY29sdW1uIOKUgOKUgOKUgFxuICAgV2hlbiBjb250ZW50X2FkdmFuY2VkLmR0IHJlbmRlcnMgc2VjdGlvbnMgaW4gLnBhZ2UtbWFpbiB0aGUgZnVsbC1ibGVlZFxuICAgc2VjdGlvbiBiYW5kcyBsaXZlIGluc2lkZSB0aGUgY29udGVudCBjb2x1bW4g4oCUIGJhY2tncm91bmRzIHNwYW4gdGhlXG4gICBjb2x1bW4gd2lkdGgsIC5zZWN0aW9uLWlubmVyIGhhbmRsZXMgaW5uZXIgcGFkZGluZy4gVmVydGljYWwgcGFkZGluZyBpc1xuICAgdGlnaHRlbmVkIGZyb20gdGhlIGZ1bGwtd2lkdGggLS1zcGFjZS0xMiAoODBweCkgdG8gLS1zcGFjZS04ICg0MHB4KSBzb1xuICAgdGhlIGJhbmRzIGRvbid0IG92ZXJ3aGVsbSB0aGUgbmFycm93ZXIgY29sdW1uLiAqL1xuLnBhZ2UtbWFpbiA+IC5jYXJvdXNlbCB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTYpO1xufVxuXG4ucGFnZS1tYWluID4gLnNlY3Rpb24ge1xuXHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS04KTtcblx0cGFkZGluZy1pbmxpbmU6IDA7XG59XG5cbi5wYWdlLW1haW4gPiAuc2VjdGlvbiAuc2VjdGlvbi1pbm5lciB7XG5cdG1heC13aWR0aDogbm9uZTtcbn1cblxuLnBhZ2UtbWFpbiA+IC5zZWN0aW9uLS1mbHVzaC10b3Age1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5wYWdlLW1haW4gPiAuc2VjdGlvbi0tZmx1c2gtYm90dG9tIHtcblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xufVxuXG4ucGFnZS1tYWluID4gLnNlY3Rpb246Zmlyc3QtY2hpbGQsXG4ucGFnZS1tYWluID4gLmNhcm91c2VsICsgLnNlY3Rpb24sXG4ucGFnZS1tYWluID4gLnBhZ2UtZmVhdHVyZSArIC5zZWN0aW9uLFxuLnBhZ2UtbWFpbiA+IGgxICsgLnNlY3Rpb24ge1xuXHRwYWRkaW5nLXRvcDogMDtcbn1cblxuLnBhZ2UtbWFpbiA+IC5zZWN0aW9uOmxhc3QtY2hpbGQge1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtNik7XG59XG5cbi8qIOKUgOKUgOKUgCBicmVhZGNydW1iLWRyb3Bkb3duIG5hdiAoc29sbyBsYXlvdXQ7IGNocm9tZS9jcnVtYnMudHQgwrcganMvY3J1bWJzLmpzKSDilIDilIDilIAgKi9cbi5jcnVtYnMge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLmNydW1icy1saXN0IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogYmFzZWxpbmU7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLmNydW1iIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uY3J1bWIgKyAuY3J1bWI6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi4oC6XCI7XG5cdGNvbG9yOiB2YXIoLS1hdS1ncmF5LTQwMCk7XG5cdG1hcmdpbjogMCB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmNydW1iLWxpbmsge1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Zm9udDogaW5oZXJpdDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHRwYWRkaW5nOiAwO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5jcnVtYi1saW5rOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uY3J1bWItbGlua1thcmlhLWV4cGFuZGVkPXRydWVdIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4uY3J1bWIuaXMtY3VycmVudCA+IC5jcnVtYi1saW5rLCAuY3J1bWItc3RhdGljIHtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG59XG5cbi5jcnVtYi14IHtcblx0ZGlzcGxheTogbm9uZTtcblx0bWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNlLTIpO1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xuXHRmb250LXdlaWdodDogNDAwO1xufVxuXG4uY3J1bWItbGlua1thcmlhLWV4cGFuZGVkPXRydWVdIC5jcnVtYi14IHtcblx0ZGlzcGxheTogaW5saW5lO1xufVxuXG4vKiB0aGUgZHJvcGRvd24gKi9cbi5jcnVtYi1tZW51IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDEwMCU7XG5cdGxlZnQ6IDA7XG5cdG1pbi13aWR0aDogMjIwcHg7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtMikgMCAwO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcblx0b3BhY2l0eTogMDtcblx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCk7XG5cdHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCB2aXNpYmlsaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpO1xuXHR6LWluZGV4OiA1MDtcbn1cblxuLmNydW1iLm9wZW4gPiAuY3J1bWItbWVudSB7XG5cdG9wYWNpdHk6IDE7XG5cdHZpc2liaWxpdHk6IHZpc2libGU7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLmNydW1iLW1lbnUgbGkge1xuXHRtYXJnaW46IDA7XG59XG5cbi5jcnVtYi1tZW51IGxpICsgbGkge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4uY3J1bWItbWVudSBhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmNydW1iLW1lbnUgYTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uY3J1bWItbWVudSBhLmlzLW9ucGF0aCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLmNydW1iLW1lbnUgYVthcmlhLWN1cnJlbnQ9cGFnZV0ge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG59XG5cbi5jcnVtYi1tZW51IC5jcnVtYi1zZWxmIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS0xKTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLyogbm8tc2lkZWJhciB2YXJpYW50IChzaWRlbmF2ID09IFwib2ZmXCIpIOKAlCBicmVhZGNydW1iIHNpdHMgYXQgdGhlIHRvcCwgc28gaXRcbiAgIG5lZWRzIGxlc3MgaGVhZHJvb20gdGhhbiB0aGUgc2lkZWJhciBsYXlvdXQgKi9cbi5wYWdlLWxheW91dC0tc29sbyB7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoLW5hcnJvdyk7XG5cdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLyogc2lkZWJhciBjYWxscy10by1hY3Rpb24gKGFjYWRlbWljcy1kZWZhdWx0KSAqL1xuLnNpZGViYXItY3RhIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5zaWRlYmFyLWN0YSAuYnRuIHtcblx0d2lkdGg6IDEwMCU7XG5cdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAxcHg7XG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0xMDApO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5zaWRlYmFyLWN0YSAuYnRuOmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdHRyYW5zZm9ybTogbm9uZTtcblx0Ym94LXNoYWRvdzogbm9uZTtcbn1cblxuLnNpZGViYXItY3RhIC5idG4gaSB7XG5cdHdpZHRoOiAxLjI1cmVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGNvbG9yOiB2YXIoLS1hdS1ncmF5LTQwMCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbi5zaWRlYmFyLWN0YSAuYnRuLXByaW1hcnkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5zaWRlYmFyLWN0YSAuYnRuLXByaW1hcnk6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRib3gtc2hhZG93OiBub25lO1xufVxuXG4uc2lkZWJhci1jdGEgLmJ0bi1wcmltYXJ5IGkge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zaWRlYmFyLWN0YSAuYnRuLXByaW1hcnk6aG92ZXIgaSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLyog4pSA4pSA4pSAIG1vYmlsZSBzZWN0aW9uLW5hdiBkaXNjbG9zdXJlIOKUgOKUgOKUgFxuICAgRGVza3RvcDogdGhlIHRvZ2dsZSBpcyBoaWRkZW4gYW5kIHRoZSB0cmVlIHNob3dzIGFzIGEgbm9ybWFsIHN0aWNreSBjb2x1bW4uXG4gICBNb2JpbGU6IHRoZSB3aG9sZSBtZW51IGNvbGxhcHNlcyBiZWhpbmQgdGhlIHRvZ2dsZSBzbyBjb250ZW50IGxlYWRzLiAqL1xuLnNpZGViYXItdG9nZ2xlIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDgyMHB4KSB7XG5cdC5wYWdlLWxheW91dCB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0XHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS04KTtcblx0fVxuXHQucGFnZS1zaWRlYmFyIHtcblx0XHRwb3NpdGlvbjogc3RhdGljO1xuXHRcdG1heC1oZWlnaHQ6IG5vbmU7XG5cdFx0b3ZlcmZsb3c6IHZpc2libGU7XG5cdH1cblx0LnNpZGViYXItdG9nZ2xlIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdFx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRcdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdH1cblx0LnNpZGViYXItY2FyZXQge1xuXHRcdHdpZHRoOiA5cHg7XG5cdFx0aGVpZ2h0OiA5cHg7XG5cdFx0ZmxleC1zaHJpbms6IDA7XG5cdFx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHRcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdFx0dHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuXHRcdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG5cdH1cblx0LnNpZGViYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLnNpZGViYXItY2FyZXQge1xuXHRcdHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpO1xuXHR9XG5cdC5zaWRlYmFyLW5hdiB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0XHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQucGFnZS1zaWRlYmFyLm9wZW4gLnNpZGViYXItbmF2IHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQucGFnZS1zaWRlYmFyLm9wZW4gLnBhZ2UtZGVwdCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fSAvKiBkZXB0IG5hbWUgYWxyZWFkeSBpbiB0aGUgdG9nZ2xlICovXG59XG4vKiDilIDilIDilIAgQS1aIGRpcmVjdG9yeSAoc2VydmljZXMvaW5kZXguaHRtbCkg4pSA4pSA4pSAICovXG4uYXotYmFyIHtcblx0ZGlzcGxheTogZmxleDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5hei1iYXIgLnRhYi1idG4ge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0bWluLXdpZHRoOiAyZW07XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmF6LWJhciAudGFiLWJ0bi5hY3RpdmUge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLmF6LWxpc3Qge1xuXHRjb2x1bW5zOiAyO1xuXHRjb2x1bW4tZ2FwOiB2YXIoLS1zcGFjZS04KTtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0cGFkZGluZzogMDtcblx0bWFyZ2luOiAwO1xufVxuXG4uYXotbGlzdCBsaSB7XG5cdGJyZWFrLWluc2lkZTogYXZvaWQ7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIDA7XG59XG5cbi5hei1saXN0IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmF6LWxpc3QgYTpob3ZlciB7XG5cdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uYXotc3ViIHtcblx0cGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmF6LXN1Z2dlc3Qge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS04KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC5hei1saXN0IHtcblx0XHRjb2x1bW5zOiAxO1xuXHR9XG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGNocm9tZS5jc3MgIMK3ICBzaXRlIGZvb3RlciArIHN1YnBhZ2UgbmF2IHRyZWVcbiAgICh0aGUgaGVhZGVyIGxpdmVzIGluIGhlYWRlci5jc3MgLyBjaHJvbWUvaGVhZGVyLnR0KVxuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiDilIDilIDilIAgRk9PVEVSIOKUgOKUgOKUgCAqL1xuLnNpdGUtZm9vdGVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEyKSB2YXIoLS1ndXR0ZXIpIHZhcigtLXNwYWNlLTYpO1xufVxuXG4uc2l0ZS1mb290ZXIgYSB7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5zaXRlLWZvb3RlciBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4uc2l0ZS1mb290ZXItaW5uZXIge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMS42ZnIgMWZyIDFmciAxZnI7XG5cdGdhcDogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5mb290ZXItYnJhbmQgaW1nIHtcblx0d2lkdGg6IDE2MHB4O1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLmZvb3Rlci10YWdsaW5lIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjM7XG59XG5cbi5mb290ZXItbWV0YSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uZm9vdGVyLWNvbCBoMyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAycHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5mb290ZXItY29sIHVsIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4uc2l0ZS1mb290ZXItYm90dG9tIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTgpIGF1dG8gMDtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTUpO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbi5mb290ZXItbGVnYWwge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5mb290ZXItc29jaWFsIHtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLmZvb3Rlci1zb2NpYWwgYSB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTtcbn1cblxuLmZvb3Rlci1zb2NpYWwgc3ZnIHtcblx0d2lkdGg6IDIycHg7XG5cdGhlaWdodDogMjJweDtcblx0ZmlsbDogY3VycmVudENvbG9yO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTIwcHgpIHtcblx0LnNpdGUtZm9vdGVyLWlubmVyIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG5cdH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkge1xuXHQuc2l0ZS1mb290ZXItaW5uZXIge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHR9XG59XG4vKiDilIDilIDilIAgREVQQVJUTUVOVCBQUkUtRk9PVEVSIEJBTkQgKGNocm9tZS9kZXB0X2Zvb3Rlci50dCkg4pSA4pSA4pSAICovXG4uZGVwdC1mb290ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpIHZhcigtLWd1dHRlcik7XG59XG5cbi5kZXB0LWZvb3Rlci1pbm5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtMTApO1xufVxuXG4uZGVwdC1mb290ZXItbG9nbyBpbWcge1xuXHRtYXgtaGVpZ2h0OiA1NnB4O1xuXHR3aWR0aDogYXV0bztcbn1cblxuLmRlcHQtZm9vdGVyLWJsb2NrIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmRlcHQtc29jaWFsIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xufVxuXG4vKiByZXNldCB0aGUgZ2xvYmFsIGBsaSArIGxpIHsgbWFyZ2luLXRvcCB9YCByZWFkaW5nLXJoeXRobSBydWxlIChiYXNlLmNzcykg4oCUIGl0XG4gICBsZWFrcyBpbiBhbmQgcHVzaGVzIGV2ZXJ5IGljb24gYnV0IHRoZSBmaXJzdCBkb3duIDhweCwgc28gd2l0aCB0aGUgY2VudGVyZWRcbiAgIGZsZXggbGluZSB0aGUgZmlyc3QgaWNvbiByaWRlcyBoaWdoLiAqL1xuLmRlcHQtc29jaWFsIGxpIHtcblx0bWFyZ2luOiAwO1xufVxuXG4uZGVwdC1zb2NpYWwgYSB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0d2lkdGg6IDEuNWVtO1xuXHRoZWlnaHQ6IDEuNWVtO1xuXHRsaW5lLWhlaWdodDogMTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHRyYW5zaXRpb246IGNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4uZGVwdC1zb2NpYWwgaSB7XG5cdGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4vKiBGbGlja3IgaGFzIG5vIEZvbnRBd2Vzb21lIGJhZGdlIGdseXBoIChvbmx5IGJhcmUgZG90cyksIHNvIGRyYXcgdGhlIG1hdGNoaW5nXG4gICBuYXZ5IHRpbGUgb3Vyc2VsdmVzOiBhIHNtYWxsIHNxdWFyZSBjaGlwIHdpdGggdGhlIGRvdHMga25vY2tlZCBvdXQgaW4gY3JlYW0sXG4gICBzaXplZCB0byBzaXQgYWxvbmdzaWRlIHRoZSBzcXVhcmUtYmFkZ2UgZ2x5cGhzIG9mIHRoZSBvdGhlciBuZXR3b3Jrcy4gKi9cbi5kZXB0LXNvY2lhbCAuZmEtZmxpY2tyIHtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHR3aWR0aDogMC44MmVtO1xuXHRoZWlnaHQ6IDAuODJlbTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGJvcmRlci1yYWRpdXM6IDAuMTRlbTtcbn1cblxuLmRlcHQtc29jaWFsIC5mYS1mbGlja3I6OmJlZm9yZSB7XG5cdGZvbnQtc2l6ZTogMC42MmVtO1xuXHRsaW5lLWhlaWdodDogMTtcbn1cblxuLmRlcHQtc29jaWFsIGE6aG92ZXIgLmZhLWZsaWNrciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uZGVwdC1zb2NpYWwgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLmRlcHQtY29udGFjdCB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEpO1xufVxuXG4uZGVwdC1jb250YWN0IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmRlcHQtY29udGFjdCBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uZGVwdC1sYWJlbCB7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmRlcHQtYWRkcmVzcyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0bGluZS1oZWlnaHQ6IDEuNTtcbn1cblxuLmRlcHQtYWRkcmVzcyBzdHJvbmcge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7XG5cdC5kZXB0LWZvb3Rlci1pbm5lciB7XG5cdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0XHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTUpO1xuXHR9XG59XG4vKiDilIDilIDilIAgU1VCUEFHRSBOQVYgVFJFRSAoY2hyb21lL25hdi50dCkg4oCUIGNvbGxhcHNpYmxlIGFjY29yZGlvbiDilIDilIDilIAgKi9cbi5uYXYtdHJlZSB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcbn1cblxuLm5hdi10cmVlIGxpIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ubmF2LXRyZWUgbGkgKyBsaSB7XG5cdG1hcmdpbi10b3A6IDA7XG59IC8qIG5ldXRyYWxpemUgYmFzZS5jc3MgbGkrbGkgaW5zaWRlIHRoZSB0cmVlICovXG4ubmF2LXRyZWUgYSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xKSB2YXIoLS1zcGFjZS0zKTtcblx0bGluZS1oZWlnaHQ6IDEuMzU7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4ubmF2LXRyZWUgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWF1LWdyYXktMzAwKTtcbn1cblxuLm5hdi10cmVlIC5uYXYtdHJlZSB7XG5cdHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi8qIGFjdGl2ZSB0cmFpbCBwYXJlbnQgKGEgYnJhbmNoIG9uIHRoZSBwYXRoKSA9IHBhbGVyIGdvbGQgYmFyOyBzY29wZWQgdG9cbiAgIC5oYXMtY2hpbGRyZW4gc28gYSBzcHVyaW91c2x5LWFjdGl2ZSBsZWFmIChlLmcuIHNpdGUtcm9vdCBcIkhvbWVcIikgc3RheXMgcGxhaW4gKi9cbi5uYXYtdHJlZSAuaXMtYWN0aXZlLmhhcy1jaGlsZHJlbiA+IC5uYXYtdHJlZS1yb3cgPiBhIHtcblx0Ym9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4vKiBjdXJyZW50IHBhZ2UgPSBmdWxsIGdvbGQgYmFyICsgYm9sZCAoYWZ0ZXIgdGhlIHRyYWlsIHJ1bGUgc28gaXQgd2lucykgKi9cbi5uYXYtdHJlZSAuaXMtY3VycmVudCA+IGEsXG4ubmF2LXRyZWUgLmlzLWN1cnJlbnQgPiAubmF2LXRyZWUtcm93ID4gYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Ym9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBicmFuY2ggcm93OiBsaW5rICsgY29sbGFwc2UgdG9nZ2xlICovXG4ubmF2LXRyZWUtcm93IHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLm5hdi10cmVlLXJvdyA+IGEge1xuXHRmbGV4OiAxO1xufVxuXG4ubmF2LXRyZWUtdG9nZ2xlIHtcblx0ZmxleC1zaHJpbms6IDA7XG5cdHdpZHRoOiAzNnB4O1xuXHRhbGlnbi1zZWxmOiBzdHJldGNoO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xufVxuXG4ubmF2LXRyZWUtdG9nZ2xlOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlwiO1xuXHR3aWR0aDogN3B4O1xuXHRoZWlnaHQ6IDdweDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHR0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5uYXYtdHJlZS10b2dnbGU6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5uYXYtdHJlZSBsaS5pcy1vcGVuID4gLm5hdi10cmVlLXJvdyAubmF2LXRyZWUtdG9nZ2xlOjpiZWZvcmUge1xuXHR0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcbn1cblxuLyogY29sbGFwc2UgY2hpbGRyZW4gdW5sZXNzIHRoZSBicmFuY2ggaXMgb3BlbiAoYWN0aXZlIHRyYWlsIGlzIHByZS1vcGVuZWQpICovXG4ubmF2LXRyZWUgbGkuaGFzLWNoaWxkcmVuID4gLm5hdi10cmVlIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLm5hdi10cmVlIGxpLmhhcy1jaGlsZHJlbi5pcy1vcGVuID4gLm5hdi10cmVlIHtcblx0ZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIG1vYmlsZTogY29tZm9ydGFibGUsIGZpbmdlci1mcmllbmRseSByb3dzIChkZXNrdG9wIHN0YXlzIHRpZ2h0KSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDgyMHB4KSB7XG5cdC5uYXYtdHJlZSBhIHtcblx0XHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS0zKTtcblx0XHRsaW5lLWhlaWdodDogMS40O1xuXHR9XG59XG4vKiDilIDilIDilIAgc2VjdGlvbi1uYXYgwrcgYSBkZXBhcnRtZW50J3Mgc2libGluZyBzdWItc2l0ZXMgKGNocm9tZS9zZWN0aW9uX25hdi50dCkg4pSA4pSA4pSAXG4gICBBIHNsaW0gZnVsbC13aWR0aCBiYXIgdW5kZXIgdGhlIG1haW4gaGVhZGVyLiBMZWFkcyB3aXRoIHRoZSBkZXBhcnRtZW50IE5BTUVcbiAgICh0aGUgc2l0ZSBpZGVudGl0eSDigJQgbGlua3MgaG9tZSwgc3R5bGVkIGFzIGEgdGl0bGUsIG5vdCBhIHRhYiksIHRoZW4gdGhlXG4gICBzdWItc2l0ZXMgKElUUzogQ2xpZW50IFNlcnZpY2VzIC8gQVYgLyBOZXR3b3JrIC8g4oCmKS4gQ3VycmVudCBzdWItc2l0ZSBtYXJrZWRcbiAgIHdpdGggYSBnb2xkIHRhYi11bmRlcmxpbmU7IHRoZSBzdHJpcCBzY3JvbGxzIGhvcml6b250YWxseSBpZiBpdCBvdmVyZmxvd3MuXG4gICBBbGlnbm1lbnQ6IHRoZSBndXR0ZXIgbGl2ZXMgb24gdGhlIGZ1bGwtYmxlZWQgYmFyIChsaWtlIC5zZWN0aW9uKSwgYW5kIHRoZVxuICAgaW5uZXIgaXMgYSBwdXJlIG1heC13aWR0aCBjb2x1bW4sIHNvIHRoZSBiYXIncyBjb250ZW50IHNoYXJlcyBPTkUgbGVmdCBlZGdlXG4gICB3aXRoIHRoZSBoZWFkZXIgYW5kIHRoZSBwYWdlIGNvbnRlbnQgKGhlYWRlci5jc3MgYXBwbGllcyB0aGUgc2FtZSBtb2RlbCkuICovXG4uc2VjdGlvbi1uYXYge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSk7XG5cdHBhZGRpbmctaW5saW5lOiB2YXIoLS1ndXR0ZXIpO1xufVxuXG4uc2VjdGlvbi1uYXYtaW5uZXIge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4vKiBzaXRlIGlkZW50aXR5IOKAlCB0aGUgZGVwYXJ0bWVudCBuYW1lOyBsaW5rcyBob21lOyByZWFkcyBhcyBhIHRpdGxlLiBBIGhhaXJsaW5lXG4gICBkaXZpZGVzIGl0IGZyb20gdGhlIHN1Yi1zaXRlIHRhYnMuICovXG4uc2VjdGlvbi1uYXYtdGl0bGUge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRmbGV4OiBub25lOyAvKiBkb24ndCBzaHJpbmsg4oCUIHRoZSB0YWIgc3RyaXAgYWJzb3JicyBvdmVyZmxvdyAqL1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdHBhZGRpbmctcmlnaHQ6IHZhcigtLXNwYWNlLTgpO1xuXHRtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNlLTIpO1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5zZWN0aW9uLW5hdi10aXRsZTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnNlY3Rpb24tbmF2LWxpbmtzIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRnYXA6IHZhcigtLXNwYWNlLTYpO1xuXHQvKiBtaW4td2lkdGg6MCBrZWVwcyB0aGUgc3RyaXAgc2hyaW5rYWJsZSBzbyBqcy9zZWN0aW9uLW5hdi5qcyBjYW4gZGV0ZWN0XG5cdCAgIG92ZXJmbG93IChzY3JvbGxXaWR0aCA+IGNsaWVudFdpZHRoKSBhbmQgbW92ZSB0YWJzIHRvIE1vcmU7IG92ZXJmbG93IHN0YXlzXG5cdCAgIHZpc2libGUgc28gYSB0YWIncyBwYWdlcyBkcm9wZG93biBjYW4gZXNjYXBlIHRoZSBiYXIuIChvdmVyZmxvdy14OmF1dG8gd291bGRcblx0ICAgZm9yY2Ugb3ZlcmZsb3cteSB0byBhdXRvIGFuZCBjbGlwIHRoZSBkcm9wZG93bi4pICovXG5cdG1pbi13aWR0aDogMDtcblx0b3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi8qIG1hcmdpbi10b3A6MCB1bmRvZXMgdGhlIGdsb2JhbCBiYXNlLmNzcyBgbGkgKyBsaSB7IG1hcmdpbi10b3AgfWAsIHdoaWNoIHdhc1xuICAgZHJvcHBpbmcgZXZlcnkgdGFiIGFmdGVyIHRoZSBmaXJzdCBiZWxvdyB0aGUgdG9wICh0aGUgZmlyc3QgbG9va2VkIHJhaXNlZCkuICovXG4uc2VjdGlvbi1uYXYtbGlua3MgbGkge1xuXHRmbGV4OiBub25lO1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4uc2VjdGlvbi1uYXYtbGlua3MgYSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHR0cmFuc2l0aW9uOiBjb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCksIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5zZWN0aW9uLW5hdi1saW5rcyBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uc2VjdGlvbi1uYXYtbGlua3MgYS5pcy1jdXJyZW50IHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogaGlnaGxpZ2h0ZWQgdGFiIChlLmcuIERvbmF0ZSkg4oCUIGdvbGQgdGV4dCwgc2VtaWJvbGQ7IG5vIGZpbGwgc28gaXQgZG9lc24ndFxuICAgY29tcGV0ZSB3aXRoIHRoZSBHaXZlL1Zpc2l0L0FwcGx5IGJ1dHRvbnMgaW4gdGhlIHV0aWxpdHkgYmFyICovXG4uc2VjdGlvbi1uYXYtbGlua3MgYS5pcy1oaWdobGlnaHQge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5zZWN0aW9uLW5hdi1saW5rcyBhLmlzLWhpZ2hsaWdodDpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWRhcmssIHZhcigtLWF1LWdvbGQpKTtcbn1cblxuLyogdGhlIHRvZ2dsZSBpcyBoaWRkZW4gaW4gc3RyaXAgbW9kZTsgSlMgcmV2ZWFscyBpdCB3aGVuIGNvbGxhcHNlZCAqL1xuLnNlY3Rpb24tbmF2LXRvZ2dsZSB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIOKUgOKUgCBjb2xsYXBzZWQgbW9kZSDigJQgdGhlIHRhYiBzdHJpcCBiZWNvbWVzIGEgZHJvcGRvd24sIGluIFRXTyBzdGFnZXMg4pSA4pSAXG4gICBqcy9zZWN0aW9uLW5hdi5qcyBjb2xsYXBzZXMgYXMgd2lkdGggdGlnaHRlbnMsIHNvIGl0IG5ldmVyIGNsaXBzIGFuZCBuZXZlclxuICAganVtcHMgc3RyYWlnaHQgdG8gYSBmdWxsLXdpZHRoIHNoZWV0OlxuICAgICAuaXMtY29sbGFwc2VkICAgICAgICAgICAg4oaSIFNJREUtQlktU0lERTogdGhlIHRpdGxlIHN0YXlzIGxlZnQsIGEgY29tcGFjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93biBwaWxsIHNpdHMgdG8gaXRzIHJpZ2h0LiBLaWNrcyBpbiBhcyBzb29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBmdWxsIHRhYiBzdHJpcCB3b3VsZCBvdmVyZmxvdyDigJQga2VlcHMgd2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3cyBsb29raW5nIGludGVudGlvbmFsLlxuICAgICAuaXMtY29sbGFwc2VkLmlzLXN0YWNrZWQg4oaSIFNUQUNLRUQ6IHRoZSB0aXRsZSBiZWNvbWVzIGEgc21hbGwgZ29sZCBleWVicm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBmdWxsLXdpZHRoIHBpbGwgYmVuZWF0aCBpdC4gT25seSB3aGVuIGV2ZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgKyBwaWxsIGNhbid0IHNpdCBzaWRlLWJ5LXNpZGUgKG5hcnJvdy9waG9uZSkuXG4gICBUaGUgb3BlbiBsaXN0IGlzIGFuIGFuY2hvcmVkIGZsb2F0aW5nIG1lbnUgKHVuZGVyIHRoZSBwaWxsIGluIHNpZGUtYnktc2lkZSxcbiAgIGZ1bGwtd2lkdGggaW4gc3RhY2tlZCkuIENvbnRlbnQtYXdhcmUsIG5vdCBhIGd1ZXNzZWQgYnJlYWtwb2ludC4gV2l0aG91dCBKU1xuICAgdGhlIHN0cmlwIGp1c3Qgc2Nyb2xscyDigJQgdGhlIGRyb3Bkb3duIG5lZWRzIEpTIHRvIG9wZW4gYW55d2F5LiAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRib3JkZXItYm90dG9tOiAwO1xuXHRib3gtc2hhZG93OiBub25lO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1pbm5lciB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogYW5jaG9yIGZvciB0aGUgZmxvYXRpbmcgbGlzdCAqL1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4vKiBubyBpbmxpbmUgdGFicyBmb2xsb3cgdGhlIHRpdGxlIG5vdywgc28gZHJvcCBpdHMgZGl2aWRlciAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtdGl0bGUge1xuXHRib3JkZXItcmlnaHQ6IDA7XG5cdHBhZGRpbmctcmlnaHQ6IDA7XG5cdG1hcmdpbi1yaWdodDogMDtcbn1cblxuLyogdGhlIGRyb3Bkb3duIHBpbGwg4oCUIGN1cnJlbnQgcGFnZSArIGNhcmV0ICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi10b2dnbGUge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTQpO1xuXHRtaW4td2lkdGg6IDExcmVtO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi8qIHNpZGUtYnktc2lkZSAoZGVmYXVsdCk6IHBpbGwgaHVncyB0aGUgcmlnaHQgZW5kIG9mIHRoZSB0aXRsZSdzIHJvdyAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZDpub3QoLmlzLXN0YWNrZWQpIC5zZWN0aW9uLW5hdi10b2dnbGUge1xuXHRtYXJnaW4tbGVmdDogYXV0bztcbn1cblxuLyogc3RhY2tlZDogdGl0bGUg4oaSIGV5ZWJyb3csIHBpbGwg4oaSIGZ1bGwgd2lkdGggYmVuZWF0aCBpdCAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZC5pcy1zdGFja2VkIC5zZWN0aW9uLW5hdi1pbm5lciB7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkLmlzLXN0YWNrZWQgLnNlY3Rpb24tbmF2LXRpdGxlIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZC5pcy1zdGFja2VkIC5zZWN0aW9uLW5hdi10b2dnbGUge1xuXHR3aWR0aDogMTAwJTtcbn1cblxuLnNlY3Rpb24tbmF2LWNhcmV0IHtcblx0d2lkdGg6IDlweDtcblx0aGVpZ2h0OiA5cHg7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLnNlY3Rpb24tbmF2LXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdIC5zZWN0aW9uLW5hdi1jYXJldCB7XG5cdHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpO1xufVxuXG4vKiB0aGUgc2libGluZyBsaXN0IOKAlCBhIGZsb2F0aW5nIG1lbnUgYmVsb3cgdGhlIGJhciwgYW5jaG9yZWQgdG8gdGhlIGlubmVyICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1saW5rcyB7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAxMDAlO1xuXHR6LWluZGV4OiA1MDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiAwO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0xKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG5cdG1heC1oZWlnaHQ6IDcwdmg7XG5cdG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi8qIHNpZGUtYnktc2lkZTogY29tcGFjdCBtZW51IHVuZGVyIHRoZSByaWdodC1oYW5kIHBpbGwgKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQ6bm90KC5pcy1zdGFja2VkKSAuc2VjdGlvbi1uYXYtbGlua3Mge1xuXHRyaWdodDogMDtcblx0d2lkdGg6IG1heC1jb250ZW50O1xuXHRtYXgtd2lkdGg6IDEwMCU7XG5cdG1pbi13aWR0aDogMTRyZW07XG59XG5cbi8qIHN0YWNrZWQ6IGZ1bGwtd2lkdGggbWVudSAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZC5pcy1zdGFja2VkIC5zZWN0aW9uLW5hdi1saW5rcyB7XG5cdGxlZnQ6IDA7XG5cdHJpZ2h0OiAwO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkLm9wZW4gLnNlY3Rpb24tbmF2LWxpbmtzIHtcblx0ZGlzcGxheTogZmxleDtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtbGlua3MgbGkge1xuXHRmbGV4OiBub25lO1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0xMDApO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1saW5rcyBsaTpsYXN0LWNoaWxkIHtcblx0Ym9yZGVyLWJvdHRvbTogMDtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtbGlua3MgYSB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHR3aGl0ZS1zcGFjZTogbm9ybWFsO1xuXHRib3JkZXItYm90dG9tOiAwOyAvKiB0aGUgdGFiLXVuZGVybGluZSBpcyBhIGRlc2t0b3AgdHJlYXRtZW50ICovXG59XG5cbi8qIGN1cnJlbnQgcm93OiBnb2xkIGxlZnQgYWNjZW50ICsgcGFsZSB3YXNoIGluc3RlYWQgb2YgdGhlIHRhYiB1bmRlcmxpbmUgKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LWxpbmtzIGEuaXMtY3VycmVudCB7XG5cdGJvcmRlci1ib3R0b206IDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGJveC1zaGFkb3c6IGluc2V0IDNweCAwIDAgdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIOKUgOKUgCBwcmlvcml0eSsgb3ZlcmZsb3cg4oCUIGEgXCJNb3JlIOKWvlwiIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmlwIOKUgOKUgFxuICAgV2hlbiB0aGUgc3RyaXAgYWxtb3N0IGZpdHMsIGpzL3NlY3Rpb24tbmF2LmpzIGtlZXBzIHRoZSB0YWJzIHRoYXQgZml0IGlubGluZVxuICAgYW5kIHR1Y2tzIHRoZSByZXN0IHVuZGVyIHRoaXMgYnV0dG9uIChyYXRoZXIgdGhhbiBjb2xsYXBzaW5nIHRoZSB3aG9sZSB0aGluZ1xuICAgdG8gYSBwaWxsKS4gU28gd2lkZSB2aWV3cyBzdGF5IGEgcmVhbCB0YWIgcm93LiBKUyBoaWRlcyBvdmVyZmxvdyB0YWJzXG4gICAobGkuaXMtaGlkZGVuKSBhbmQgY2xvbmVzIHRoZW0gaW50byB0aGUgbWVudTsgaXQgdG9nZ2xlcyBgaGlkZGVuYCBvbiB0aGVcbiAgIHdob2xlIGNvbnRyb2wgd2hlbiBub3RoaW5nIG92ZXJmbG93cywgYW5kIGhpZGVzIGl0IGVudGlyZWx5IG9uY2UgdGhlIG5hdlxuICAgY29sbGFwc2VzIHRvIHRoZSBwaWxsLiAqL1xuLnNlY3Rpb24tbmF2LWxpbmtzIGxpLmlzLWhpZGRlbiB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRmbGV4OiBub25lO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZVtoaWRkZW5dIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtbW9yZSB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLWJ0biB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSAwO1xuXHRtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2UtNik7XG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLWJ0bjpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUtYnRuW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLnNlY3Rpb24tbmF2LWNhcmV0IHtcblx0dHJhbnNmb3JtOiByb3RhdGUoLTEzNWRlZyk7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUge1xuXHRkaXNwbGF5OiBub25lO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogMTAwJTtcblx0cmlnaHQ6IDA7XG5cdHotaW5kZXg6IDUwO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1pbi13aWR0aDogMTRyZW07XG5cdG1heC13aWR0aDogODB2dztcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdG1heC1oZWlnaHQ6IDcwdmg7XG5cdG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLmlzLW9wZW4gLnNlY3Rpb24tbmF2LW1vcmUtbWVudSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IGxpIHtcblx0bWFyZ2luLXRvcDogMDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMTAwKTtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSBsaTpsYXN0LWNoaWxkIHtcblx0Ym9yZGVyLWJvdHRvbTogMDtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSBhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0Ym9yZGVyLWJvdHRvbTogMDtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgYS5pcy1jdXJyZW50IHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xuXHRib3gtc2hhZG93OiBpbnNldCAzcHggMCAwIHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiDilIDilIAgc3ViLXNpdGUgZHJvcGRvd25zIMK3IG9uZSBsZXZlbCBvZiBhIHN1Yi1zaXRlJ3MgcGFnZXMgcGVyIHRhYiDilIDilIBcbiAgIEEgdGFiIHdpdGggY2hpbGQgcGFnZXMgZ2V0cyBhIGNhcmV0IGJ1dHRvbjsgY2xpY2tpbmcgaXQgb3BlbnMgYSBtZW51IG9mIHRoYXRcbiAgIHN1Yi1zaXRlJ3MgcGFnZXMsIHNvIHN1YnBhZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB0aGUgYmFyICh0aGUgc2VjdGlvbi1uYXYgb25seVxuICAgYXBwZWFycyBvbiBwYWdlcyB0aGF0IGhhdmUgbm8gc2lkZWJhcikuIGpzL3NlY3Rpb24tbmF2LmpzIHRvZ2dsZXMgLmlzLW9wZW4gb25cbiAgIHRoZSAuc2VjdGlvbi1uYXYtaXRlbS4gSW4gdGhlIFNUUklQIHRoZSBtZW51IGlzIGFuIGFic29sdXRlIGRyb3Bkb3duOyBpbiB0aGVcbiAgIGNvbGxhcHNlZCBwaWxsIGFuZCB0aGUgTW9yZSBtZW51IGl0IGRyb3BzIGlubGluZSBhcyBhbiBpbmRlbnRlZCBhY2NvcmRpb24uICovXG4uc2VjdGlvbi1uYXYtaXRlbSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnNlY3Rpb24tbmF2LXN1Yi10b2dnbGUge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0YWxpZ24tc2VsZjogc3RyZXRjaDtcblx0cGFkZGluZzogMCB2YXIoLS1zcGFjZS0yKTtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLnNlY3Rpb24tbmF2LXN1Yi10b2dnbGU6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zZWN0aW9uLW5hdi1zdWItdG9nZ2xlIC5zZWN0aW9uLW5hdi1jYXJldCB7XG5cdHdpZHRoOiA2cHg7XG5cdGhlaWdodDogNnB4O1xufVxuXG4uc2VjdGlvbi1uYXYtc3ViLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdIC5zZWN0aW9uLW5hdi1jYXJldCB7XG5cdHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpO1xufVxuXG4vKiB0aGUgcGFnZXMgbWVudSDigJQgYSBmbG9hdGluZyBkcm9wZG93biBpbiB0aGUgc3RyaXAgKi9cbi5zZWN0aW9uLW5hdi1tZW51IHtcblx0ZGlzcGxheTogbm9uZTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDEwMCU7XG5cdGxlZnQ6IDA7XG5cdHotaW5kZXg6IDUwO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1pbi13aWR0aDogMTNyZW07XG5cdG1heC13aWR0aDogMjJyZW07XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRtYXgtaGVpZ2h0OiA3MHZoO1xuXHRvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uc2VjdGlvbi1uYXYtaXRlbS5pcy1vcGVuID4gLnNlY3Rpb24tbmF2LW1lbnUge1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuLyogZGVza3RvcCBzdHJpcDogYWxzbyByZXZlYWwgYSB0YWIncyBwYWdlcyBvbiBob3ZlciAvIGtleWJvYXJkIGZvY3VzLCBzbyB0aGVcbiAgIHRhYidzIG93biBjbGljayBzdGF5cyBmcmVlIHRvIG5hdmlnYXRlIHRvIGl0cyBob21lIHBhZ2UgKHRoZSBjYXJldCBjbGlja1xuICAgcmVtYWlucyB0aGUgdG91Y2ggZmFsbGJhY2spLiBTY29wZWQgdG8gdGhlIHN0cmlwIOKAlCB0aGUgY29sbGFwc2VkIHBpbGwgYW5kIHRoZVxuICAgTW9yZSBtZW51IGtlZXAgdGhlaXIgY2xpY2sgYWNjb3JkaW9uLiAqL1xuLnNlY3Rpb24tbmF2Om5vdCguaXMtY29sbGFwc2VkKSAuc2VjdGlvbi1uYXYtbGlua3MgPiAuc2VjdGlvbi1uYXYtaXRlbTpmb2N1cy13aXRoaW4gPiAuc2VjdGlvbi1uYXYtbWVudSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG5AbWVkaWEgKGhvdmVyOiBob3Zlcikge1xuXHQuc2VjdGlvbi1uYXY6bm90KC5pcy1jb2xsYXBzZWQpIC5zZWN0aW9uLW5hdi1saW5rcyA+IC5zZWN0aW9uLW5hdi1pdGVtOmhvdmVyID4gLnNlY3Rpb24tbmF2LW1lbnUge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG59XG4uc2VjdGlvbi1uYXYtbWVudSBsaSB7XG5cdG1hcmdpbjogMDtcblx0ZmxleDogbm9uZTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMTAwKTtcbn1cblxuLnNlY3Rpb24tbmF2LW1lbnUgbGk6bGFzdC1jaGlsZCB7XG5cdGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5zZWN0aW9uLW5hdi1tZW51IGEge1xuXHRkaXNwbGF5OiBibG9jaztcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRib3JkZXItYm90dG9tOiAwO1xufVxuXG4uc2VjdGlvbi1uYXYtbWVudSBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG59XG5cbi5zZWN0aW9uLW5hdi1tZW51IGEuaXMtY3VycmVudCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Ym94LXNoYWRvdzogaW5zZXQgM3B4IDAgMCB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogbmVzdGVkIChhY2NvcmRpb24pIGZvcm0g4oCUIGluIHRoZSBjb2xsYXBzZWQgcGlsbCBhbmQgaW5zaWRlIHRoZSBNb3JlIG1lbnUgdGhlXG4gICBwYWdlcyBtZW51IGRyb3BzIGlubGluZSBiZWxvdyBpdHMgdGFiIGluc3RlYWQgb2YgZmxvYXRpbmcuICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1pdGVtLFxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSAuc2VjdGlvbi1uYXYtaXRlbSB7XG5cdGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLyogbGluayB0YWtlcyB0aGUgcm93IChtaW4td2lkdGg6MCBzbyBpdCBjYW4gc2hyaW5rKSwgY2FyZXQgc2l0cyBpbmxpbmUgYmVzaWRlIGl0XG4gICAobm90IHN0cmV0Y2hlZCDigJQgc3RyZXRjaCB3YXMgZHJvcHBpbmcgaXQgb250byBpdHMgb3duIGxpbmUpLCBtZW51IHdyYXBzIGJlbG93ICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1pdGVtID4gYSxcbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgLnNlY3Rpb24tbmF2LWl0ZW0gPiBhIHtcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1pdGVtID4gLnNlY3Rpb24tbmF2LXN1Yi10b2dnbGUsXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IC5zZWN0aW9uLW5hdi1pdGVtID4gLnNlY3Rpb24tbmF2LXN1Yi10b2dnbGUge1xuXHRmbGV4OiBub25lO1xuXHRhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LW1lbnUsXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IC5zZWN0aW9uLW5hdi1tZW51IHtcblx0cG9zaXRpb246IHN0YXRpYztcblx0ZmxleDogMCAwIDEwMCU7XG5cdG1pbi13aWR0aDogMDtcblx0bWF4LXdpZHRoOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci1yYWRpdXM6IDA7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRtYXJnaW46IDA7XG5cdG1heC1oZWlnaHQ6IG5vbmU7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LW1lbnUgYSxcbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgLnNlY3Rpb24tbmF2LW1lbnUgYSB7XG5cdHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi8qIOKUgOKUgOKUgCBDTVMgZWRpdCBzaG9ydGN1dCAoc2hlbGwud3JhcCkg4pSA4pSA4pSAXG4gICBSZW5kZXJlZCBvbmx5IGZvciBhIHNpZ25lZC1pbiB1c2VyIHdpdGggbW9kaWZ5IHBlcm1pc3Npb24gb24gdGhlIHBhZ2UuIEEgc21hbGxcbiAgIHRyYW5zbHVjZW50IGdvbGQgcGlsbCBwaW5uZWQgdG8gdGhlIHRvcC1jZW50cmUgdGhhdCBicmlnaHRlbnMgb24gaG92ZXIgYW5kXG4gICBsaW5rcyB0byB0aGUgQ01TIGVkaXRvci4gYG1hcmdpbi1ib3R0b206IC0xbGhgIGNhbmNlbHMgaXRzIG93biBoZWlnaHQgc28gaXRcbiAgIGZsb2F0cyBvdmVyIHRoZSBoZWFkZXIgaW5zdGVhZCBvZiBwdXNoaW5nIGNvbnRlbnQgZG93bi4gQWRtaW4gYWZmb3JkYW5jZSDigJRcbiAgIG5ldmVyIHNob3duIHRvIG5vcm1hbCB2aXNpdG9ycy4gKi9cbi5jbXMtZWRpdC1iYXIge1xuXHRwb3NpdGlvbjogc3RpY2t5O1xuXHR0b3A6IDA7XG5cdHotaW5kZXg6IDEwMDA7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogbWF4LWNvbnRlbnQ7XG5cdG1heC13aWR0aDogMTAwJTtcblx0bWFyZ2luOiAwIGF1dG8gLTFsaCB2YXIoLS1ndXR0ZXIpOyAvKiBsZWZ0LWFsaWduZWQgKHJpZ2h0IG1hcmdpbiBhdXRvKSAqL1xuXHRwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxpbmUtaGVpZ2h0OiAyO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1yYWRpdXMtbWQpIHZhcigtLXJhZGl1cy1tZCk7XG5cdGJveC1zaGFkb3c6IDAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcblx0b3BhY2l0eTogMC41O1xuXHR0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLyogYGEuYCBwcmVmaXggYmVhdHMgYmFzZS5jc3MgYGE6bm90KC5idG4pOmhvdmVyYCBzbyB0aGUgbGFiZWwgc3RheXMgbmF2eSAocmVhZGFibGVcbiAgIG9uIHRoZSBnb2xkKSwgbm90IGdvbGQtb24tZ29sZCAqL1xuYS5jbXMtZWRpdC1iYXI6aG92ZXIsXG5hLmNtcy1lZGl0LWJhcjpmb2N1cy12aXNpYmxlIHtcblx0b3BhY2l0eTogMTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgaGVhZGVyLmNzcyAgwrcgIHNpdGUgaGVhZGVyIOKAlCB1dGlsaXR5IGJhciArIGZ1bGwtd2lkdGggbWVnYS1tZW51XG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzIMK3IGJ1dHRvbnMvZm9ybXMgY29tZSBmcm9tIHRoZWlyIG93biBwYXJ0aWFscy5cbiAgIEJlaGF2aW91ciA6IGpzL2hlYWRlci5qcyAoc2VsZi1pbml0cyBvbiBbZGF0YS1oZWFkZXJdKS5cbiAgIE1hcmt1cCAgICA6IHRlbXBsYXRlcy9jaHJvbWUvaGVhZGVyLnR0LlxuXG4gICBSZXNwb25zaXZlIHN0YWdlczpcbiAgICAg4omlOTgwICBhbGwgc2l4IHNlY3Rpb24gbGlua3MgaW4gdGhlIGJhclxuICAgICDiiaQ5ODAgIFJlc2VhcmNoICsgQWJvdXQgZm9sZCBpbnRvIHRoZSBcIk1lbnVcIiBwYW5lbCAob3ZlcmZsb3cgb25seSlcbiAgICAg4omkNzY4ICBjb3JlIHNlY3Rpb25zIGZvbGQgaW4gdG9vOyBNZW51IGlzIHRoZSB3aG9sZSBuYXYgKGNvbHVtbnNcbiAgICAgICAgICAgc3RhY2s7IHNlY3Rpb24gdGl0bGVzIGJlY29tZSBjb2xsYXBzaWJsZSlcbiAgICAg4omkNjAwICB1dGlsaXR5IGJhciBoaWRlczsgR2l2ZS9BcHBseSByaWRlIGluIHRoZSBiYXIgYmVzaWRlIE1lbnVcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyogaGVhZGVyLXNjb3BlZCByZXNldHMuIDp3aGVyZSgpIGhvbGRzIHNwZWNpZmljaXR5IGF0IDAtMC0xIChsaWtlIGEgYmFyZVxuICAgZWxlbWVudCBzZWxlY3Rvcikgc28gY29tcG9uZW50IHJ1bGVzIHN1Y2ggYXMgLm5hdi1saW5rIOKAlCB3aGljaCBzZXQgdGhlaXIgb3duXG4gICBjb2xvci9iYWNrZ3JvdW5kIOKAlCBhbHdheXMgd2luIG92ZXIgdGhlc2UgaW5zdGVhZCBvZiBiZWluZyBvdmVycmlkZGVuLiAqL1xuOndoZXJlKC5hdS1oZWFkZXIpIGEge1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdGNvbG9yOiBpbmhlcml0O1xufVxuXG46d2hlcmUoLmF1LWhlYWRlcikgYnV0dG9uIHtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHRmb250LWZhbWlseTogaW5oZXJpdDtcblx0bGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cbi8qIGJhc2UuY3NzIHN0eWxlcyBiYXJlIGxpc3RzIGdsb2JhbGx5IChgbGkgKyBsaWAgdG9wLW1hcmdpbiwgYHVsYCBwYWRkaW5nLWxlZnQpO1xuICAgdGhlIGhlYWRlcidzIGxpc3RzIHVzZSBmbGV4ICsgZ2FwLCBzbyBuZXV0cmFsaXplIHRoYXQgaGVyZS4gKi9cbi5hdS1oZWFkZXIgdWwge1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi5hdS1oZWFkZXIgbGkgKyBsaSB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi8qIHRoZSB3aG9sZSBoZWFkZXIgc3RpY2tzIOKAlCBzdGlja3kgb24gYC5tYWluLW5hdmAgYWxvbmUgY2FuJ3Qgd29yayBiZWNhdXNlIGl0c1xuICAgcGFyZW50IGAuYXUtaGVhZGVyYCBpcyBvbmx5IGhlYWRlci10YWxsLCBzbyBpdCBoYXMgbm8gcm9vbSB0byBzdGljayB3aXRoaW4gKi9cbi5hdS1oZWFkZXIge1xuXHRwb3NpdGlvbjogc3RpY2t5O1xuXHR0b3A6IDA7XG5cdHotaW5kZXg6IDEwMDtcbn1cblxuLyog4pSA4pSA4pSAIFVUSUxJVFkgQkFSIChhdWRpZW5jZSArIGdpdmUvYXBwbHkgKyBzZWFyY2gpIOKUgOKUgOKUgCAqL1xuLnV0aWwtbmF2IHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR6LWluZGV4OiAxMDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpO1xufVxuXG4vKiBjb250ZW50IGNvbnRhaW5lcjogbWF4LXdpZHRoIHdpdGggYSBndXR0ZXIgZmxvb3IsIGluIE9ORSBwcm9wZXJ0eSBzbyB0aGUgYmFyXG4gICBpdHNlbGYgc3RheXMgcGFkZGluZy1mcmVlICh0aGUgbWVnYSBkcm9wZG93biBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgaW5zaWRlXG4gICAubWFpbi1uYXYgYW5kIG11c3Qgc3RheSBmdWxsLWJsZWVkKS4gUHV0cyBoZWFkZXIgY29udGVudCBvbiB0aGUgc2FtZSBsZWZ0XG4gICBlZGdlIGFzIC5zZWN0aW9uIGNvbnRlbnQg4oCUIHNlZSBjc3MvY2hyb21lLmNzcyAuc2VjdGlvbi1uYXYuICovXG4udXRpbC1pbm5lciB7XG5cdHdpZHRoOiBtaW4oMTAwJSAtIDIgKiB2YXIoLS1ndXR0ZXIpLCB2YXIoLS1tYXgtd2lkdGgpKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0xKTtcbn1cblxuLnV0aWwtaW5uZXIgYSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTUpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuM3B4O1xuXHR0cmFuc2l0aW9uOiBjb2xvciAwLjE1cztcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnV0aWwtaW5uZXIgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi51dGlsLWlubmVyIC51dGlsLWFjY2VudCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn0gLyogR2l2ZSwgVmlzaXQgKi9cbi51dGlsLWlubmVyIC51dGlsLWFjY2VudDpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnV0aWwtaW5uZXIgLnV0aWwtY3RhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTQpO1xuXHRtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2UtMSk7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufSAvKiBBcHBseSDigJQgcHJpbWFyeSAqL1xuLnV0aWwtaW5uZXIgLnV0aWwtY3RhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4vKiDilIDilIDilIAgTUFJTiBCQVIgKGxvZ28gKyBzZWN0aW9uIG5hdikg4pSA4pSA4pSAICovXG4ubWFpbi1uYXYge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHotaW5kZXg6IDEwMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGJveC1zaGFkb3c6IDAgMnB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLm1haW4taW5uZXIge1xuXHR3aWR0aDogbWluKDEwMCUgLSAyICogdmFyKC0tZ3V0dGVyKSwgdmFyKC0tbWF4LXdpZHRoKSk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5uYXYtbG9nbyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTMpO1xuXHRtYXJnaW4tcmlnaHQ6IGF1dG87XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHQtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuXHR1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLm5hdi1sb2dvIGltZyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRoZWlnaHQ6IDQwcHg7XG5cdHdpZHRoOiBhdXRvO1xuXHQtd2Via2l0LXVzZXItZHJhZzogbm9uZTtcbn0gLyogU2FmYXJpOiBkb24ndCBsZXQgdGhlIGxvZ28gaW1hZ2UgYmUgc2VsZWN0ZWQvZHJhZ2dlZCAqL1xuLm1haW4tbGlua3Mge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRsaXN0LXN0eWxlOiBub25lO1xufVxuXG4ubmF2LWl0ZW0ge1xuXHRwb3NpdGlvbjogc3RhdGljO1xufVxuXG4ubmF2LWxpbmsge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA2cHg7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzgpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS00KTtcblx0Ym9yZGVyLWJvdHRvbTogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHR0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5uYXYtbGluazpob3ZlciwgLm5hdi1saW5rW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0ge1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTtcbn1cblxuLm5hdi1saW5rIC5jYXJldCB7XG5cdHdpZHRoOiA4cHg7XG5cdGhlaWdodDogOHB4O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcblx0bWFyZ2luLXRvcDogLTNweDtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4ubmF2LWxpbmtbYXJpYS1leHBhbmRlZD10cnVlXSAuY2FyZXQge1xuXHR0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcblx0bWFyZ2luLXRvcDogMnB4O1xufVxuXG4vKiDilIDilIDilIAgRlVMTC1XSURUSCBNRUdBIFBBTkVMIOKUgOKUgOKUgCAqL1xuLm1lZ2Ege1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IDA7XG5cdHJpZ2h0OiAwO1xuXHR0b3A6IDEwMCU7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbGcpO1xuXHRvcGFjaXR5OiAwO1xuXHR2aXNpYmlsaXR5OiBoaWRkZW47XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KTtcblx0dHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCksIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCksIHZpc2liaWxpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG5cdHotaW5kZXg6IDkwO1xufVxuXG4ubWVnYS5vcGVuIHtcblx0b3BhY2l0eTogMTtcblx0dmlzaWJpbGl0eTogdmlzaWJsZTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuXG4ubWVnYS1pbm5lciB7XG5cdHdpZHRoOiBtaW4oMTAwJSAtIDIgKiB2YXIoLS1ndXR0ZXIpLCB2YXIoLS1tYXgtd2lkdGgpKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTYpO1xuXHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLm1lZ2EtY29sIHtcblx0ZmxleDogMSAxIDE5MHB4O1xuXHRtaW4td2lkdGg6IDE3MHB4O1xufVxuXG4ubWVnYS1jb2wgaDQge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5tZWdhLWNvbCBoNCBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4ubWVnYS1jb2wgdWwge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ubWVnYS1jb2wgYSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0dHJhbnNpdGlvbjogY29sb3IgMC4xNXM7XG59XG5cbi5tZWdhLWNvbCBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4ubWVnYS1jdGEge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG59XG5cbi5tZWdhLWN0YTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLm1lZ2EtZmVhdHVyZSB7XG5cdGZsZXg6IDEgMSAyNjBweDtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYXUtbmF2eSksIHZhcigtLWF1LW5hdnktbGlnaHQpKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNik7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGFsaWduLXNlbGY6IHN0cmV0Y2g7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG59XG5cbi5tZWdhLWZlYXR1cmUgLmZrIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDJweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLm1lZ2EtZmVhdHVyZSBoMyB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcblx0bGluZS1oZWlnaHQ6IDEuMjU7XG59XG5cbi5tZWdhLWZlYXR1cmUgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLyogc2NyaW0gYmVoaW5kIGFuIG9wZW4gcGFuZWwgKi9cbi5uYXYtc2NyaW0ge1xuXHRwb3NpdGlvbjogZml4ZWQ7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDI2LCA1MSwgMC40NSk7XG5cdG9wYWNpdHk6IDA7XG5cdHZpc2liaWxpdHk6IGhpZGRlbjtcblx0dHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKSwgdmlzaWJpbGl0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcblx0ei1pbmRleDogODA7XG59XG5cbmJvZHkubWVnYS1vcGVuIC5uYXYtc2NyaW0ge1xuXHRvcGFjaXR5OiAxO1xuXHR2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuXG4vKiBmb2N1cyB0aGUgb3BlbiBtZW51OiByZWNlZGUgdGhlIG90aGVyIGJhciBpdGVtcywga2VlcCB0aGUgYWN0aXZlIG9uZSBsaXQgKi9cbmJvZHkubWVnYS1vcGVuIC5uYXYtbGluayB7XG5cdG9wYWNpdHk6IDAuNDU7XG59XG5cbmJvZHkubWVnYS1vcGVuIC5uYXYtbGlua1thcmlhLWV4cGFuZGVkPXRydWVdIHtcblx0b3BhY2l0eTogMTtcbn1cblxuLyog4pSA4pSA4pSAIFNFQVJDSCAoaWNvbiBpbiB0aGUgYmFyIOKGkiBmdWxsLXdpZHRoIHBhbmVsKSDilIDilIDilIAgKi9cbi5zZWFyY2gtaXRlbSB7XG5cdGRpc3BsYXk6IGZsZXg7XG59IC8qIHN0cmV0Y2ggdGhlIGJ1dHRvbiB0byBmdWxsIGJhciBoZWlnaHQgc28gdGhlIGljb24gY2VudGVycyAqL1xuLm5hdi1zZWFyY2gtYnRuIHtcblx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4ubmF2LXNlYXJjaC1idG4gc3ZnIHtcblx0d2lkdGg6IDE4cHg7XG5cdGhlaWdodDogMThweDtcbn1cblxuLm1lZ2Etc2VhcmNoLWlubmVyIHtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4uc2l0ZS1zZWFyY2gge1xuXHR3aWR0aDogMTAwJTtcblx0bWF4LXdpZHRoOiA3NjBweDtcblx0bWFyZ2luLWlubGluZTogYXV0bztcbn1cblxuLnNlYXJjaC1sYWJlbCB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnNlYXJjaC1maWVsZCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTUpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0dHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLnNlYXJjaC1maWVsZDpmb2N1cy13aXRoaW4ge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uc2VhcmNoLWZpZWxkID4gc3ZnIHtcblx0d2lkdGg6IDIycHg7XG5cdGhlaWdodDogMjJweDtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi5zZWFyY2gtZmllbGQgaW5wdXQge1xuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogMDtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSAwO1xufVxuXG4uc2VhcmNoLWdvIHtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTYpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHR0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uc2VhcmNoLWdvOmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4uc2VhcmNoLWhpbnQge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcbn1cblxuLnNlYXJjaC1oaW50IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5zZWFyY2gtaGludCBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiDilIDilIDilIAgXCJNRU5VXCIgVFJJR0dFUiAob3ZlcmZsb3cpICsgY29tcGFjdCBHaXZlL0FwcGx5IOKUgOKUgOKUgCAqL1xuLm1lbnUtaXRlbSB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5uYXYtbWVudS1idG4ge1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ubmF2LW1lbnUtYnRuIC5oYW0ge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Z2FwOiA0cHg7XG5cdHdpZHRoOiAyMHB4O1xuXHRoZWlnaHQ6IDEuNmVtO1xufVxuXG4ubmF2LW1lbnUtYnRuIC5oYW0gc3BhbiB7XG5cdGhlaWdodDogMnB4O1xuXHRiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG5cdGJvcmRlci1yYWRpdXM6IDJweDtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLm5hdi1tZW51LWJ0blthcmlhLWV4cGFuZGVkPXRydWVdIC5oYW0gc3BhbjpudGgtY2hpbGQoMSkge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNnB4KSByb3RhdGUoNDVkZWcpO1xufVxuXG4ubmF2LW1lbnUtYnRuW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLmhhbSBzcGFuOm50aC1jaGlsZCgyKSB7XG5cdG9wYWNpdHk6IDA7XG59XG5cbi5uYXYtbWVudS1idG5bYXJpYS1leHBhbmRlZD10cnVlXSAuaGFtIHNwYW46bnRoLWNoaWxkKDMpIHtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpIHJvdGF0ZSgtNDVkZWcpO1xufVxuXG4ubWVnYS1jb2wtaW5mbyB7XG5cdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4ubWVnYS1jb2wtaW5mbyBoNCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLm1lbnUtYWN0aW9ucyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4ubWVudS1hY3Rpb25zIC5uYy1idG4ge1xuXHRmbGV4OiAxO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0dHJhbnNpdGlvbjogYWxsIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLm1lbnUtYWN0aW9ucyAubmMtZ2l2ZSwgLm1lbnUtYWN0aW9ucyAubmMtdmlzaXQge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4ubWVudS1hY3Rpb25zIC5uYy1naXZlOmhvdmVyLCAubWVudS1hY3Rpb25zIC5uYy12aXNpdDpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG59XG5cbi5tZW51LWFjdGlvbnMgLm5jLWFwcGx5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5tZW51LWFjdGlvbnMgLm5jLWFwcGx5OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcblx0Ym94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDE5OCwgMTQ5LCA0MywgMC4zKTtcbn1cblxuLyogTWVudSBwYW5lbCA9IG92ZXJmbG93IG9ubHk6IGhpZGUgY29sdW1ucyBmb3Igc2VjdGlvbnMgc3RpbGwgaW4gdGhlIGJhciAqL1xuI21lZ2EtbWVudSAubWNvbC1jb3JlLCAjbWVnYS1tZW51IC5tY29sLWluZm8ge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4ubmF2LWNvbXBhY3Qge1xuXHRkaXNwbGF5OiBub25lO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ubmF2LWNvbXBhY3QgLm5jLWJ0biB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTQpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0dHJhbnNpdGlvbjogYWxsIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLm5hdi1jb21wYWN0IC5uYy1naXZlLCAubmF2LWNvbXBhY3QgLm5jLXZpc2l0IHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7XG59XG5cbi5uYXYtY29tcGFjdCAubmMtZ2l2ZTpob3ZlciwgLm5hdi1jb21wYWN0IC5uYy12aXNpdDpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG4ubmF2LWNvbXBhY3QgLm5jLWFwcGx5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5uYXYtY29tcGFjdCAubmMtYXBwbHk6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuXHRib3gtc2hhZG93OiAwIDZweCAyMHB4IHJnYmEoMTk4LCAxNDksIDQzLCAwLjMpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTIwMHB4KSB7XG5cdC5uYXYtbGluayB7XG5cdFx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdC5tYWluLWlubmVyIHtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTUpO1xuXHR9XG59XG5AbWVkaWEgKG1heC13aWR0aDogOTgwcHgpIHtcblx0LnV0aWwtaW5uZXIgYSB7XG5cdFx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTIpO1xuXHR9XG5cdC5uYXYtbGluayB7XG5cdFx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTIpO1xuXHR9XG5cdC5uYXYtaXRlbS5zZWNvbmRhcnkge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblx0Lm1lbnUtaXRlbSB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuXHQubmF2LWl0ZW06bm90KC5tZW51LWl0ZW0pOm5vdCguc2VhcmNoLWl0ZW0pIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cdC5tZWdhIHtcblx0XHRtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTMwcHgpO1xuXHRcdG92ZXJmbG93OiBhdXRvO1xuXHR9XG5cdC5zZWFyY2gtbGFiZWwge1xuXHRcdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdH1cblx0Lm1lZ2EtaW5uZXIge1xuXHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0fVxuXHQubWVnYS1jb2wge1xuXHRcdGZsZXg6IG5vbmU7XG5cdH1cblx0Lm1lZ2EtY29sLWluZm8ge1xuXHRcdG1hcmdpbi1sZWZ0OiAwO1xuXHR9XG5cdC5tZWdhLWZlYXR1cmUge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblx0I21lZ2EtbWVudSAubWNvbC1jb3JlIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQvKiBjb2xsYXBzaWJsZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbW9iaWxlIE1lbnUgKi9cblx0I21lZ2EtbWVudSAubWVnYS1jb2w6bm90KC5tY29sLWluZm8pIHtcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRcdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQjbWVnYS1tZW51IC5tZWdhLWNvbDpub3QoLm1jb2wtaW5mbykgPiBoNCB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdHBhZGRpbmctYm90dG9tOiAwO1xuXHR9XG5cdCNtZWdhLW1lbnUgLm1lZ2EtY29sOm5vdCgubWNvbC1pbmZvKSA+IGg0IGEge1xuXHRcdHBvaW50ZXItZXZlbnRzOiBub25lO1xuXHRcdGNvbG9yOiBpbmhlcml0O1xuXHR9XG5cdCNtZWdhLW1lbnUgLm1lZ2EtY29sOm5vdCgubWNvbC1pbmZvKSA+IGg0OjphZnRlciB7XG5cdFx0Y29udGVudDogXCJcIjtcblx0XHR3aWR0aDogOHB4O1xuXHRcdGhlaWdodDogOHB4O1xuXHRcdGJvcmRlci1yaWdodDogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcblx0XHRib3JkZXItYm90dG9tOiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHRcdHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcblx0XHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSk7XG5cdH1cblx0I21lZ2EtbWVudSAubWVnYS1jb2w6bm90KC5tY29sLWluZm8pLm9wZW4gPiBoNDo6YWZ0ZXIge1xuXHRcdHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpO1xuXHR9XG5cdCNtZWdhLW1lbnUgLm1lZ2EtY29sOm5vdCgubWNvbC1pbmZvKSA+IHVsIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHRcdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQjbWVnYS1tZW51IC5tZWdhLWNvbDpub3QoLm1jb2wtaW5mbykub3BlbiA+IHVsIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC51dGlsLW5hdiB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXHQubmF2LWNvbXBhY3Qge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdH1cblx0I21lZ2EtbWVudSAubWNvbC1pbmZvIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQvKiByZWNsYWltIHJvb206IHRpZ2h0ZXIgc2lkZSBwYWRkaW5nICsgZ2FwcyBvbiB0aGUgY29tcGFjdCBiYXIgKi9cblx0Lm1haW4taW5uZXIge1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdFx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTQpO1xuXHR9XG5cdC5uYXYtc2VhcmNoLWJ0biB7XG5cdFx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdC5uYXYtbG9nbyBpbWcge1xuXHRcdGhlaWdodDogMzRweDtcblx0fVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG5cdC8qIHRocmVlIENUQXMgd29uJ3QgZml0IHdpdGggdGhlIGxvZ28gKyBzZWFyY2ggKyBNZW51IOKAlCBzaGVkIGZyb20gdGhlIGxlZnQgKi9cblx0Lm5hdi1jb21wYWN0IC5uYy1naXZlIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNDAwcHgpIHtcblx0Lyogb25seSBBcHBseSByZW1haW5zIG9uIHRoZSBiYXI7IEdpdmUvVmlzaXQgc3RheSBpbiB0aGUgTWVudSBwYW5lbCAqL1xuXHQubmF2LWNvbXBhY3QgLm5jLXZpc2l0IHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cdC5tYWluLWlubmVyIHtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHR9XG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGF1LWJ1dHRvbnMuY3NzICDCtyAgQnV0dG9uICYgQ1RBIHN0eWxlc1xuICAgRGVwZW5kcyBvbjogYXUtdG9rZW5zLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4uYnRuIHtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0bGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuXHRib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uYnRuOmhvdmVyIHtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xufVxuXG4uYnRuOmFjdGl2ZSB7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLyogUHJpbWFyeSDigJQgR29sZCAqL1xuLmJ0bi1wcmltYXJ5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBsaWdodGVuIHRoZSBnb2xkIG9uIGhvdmVyIHdoaWxlIEtFRVBJTkcgdGhlIG5hdnkgbGFiZWwg4oCUIG5hdnkgb24gdGhlIGxpZ2h0ZXJcbiAgIGdvbGQgcmVhZHMgd2l0aCBtb3JlIGNvbnRyYXN0LCBub3QgbGVzcyAodGhlIG9sZCB3YXNoLW91dCB3YXMgdGhlIGdvbGQgdGV4dCxcbiAgIG5vdyBmaXhlZCB2aWEgYTpub3QoLmJ0bik6aG92ZXIgaW4gYmFzZS5jc3MpLiAqL1xuLmJ0bi1wcmltYXJ5OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMTk4LCAxNDksIDQzLCAwLjM1KTtcbn1cblxuLyogU2Vjb25kYXJ5IOKAlCBOYXZ5ICovXG4uYnRuLXNlY29uZGFyeSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uYnRuLXNlY29uZGFyeTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgwLCA1MSwgMTAyLCAwLjMpO1xufVxuXG4vKiBPdXRsaW5lICovXG4uYnRuLW91dGxpbmUge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uYnRuLW91dGxpbmU6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogR2hvc3QgKi9cbi5idG4tZ2hvc3Qge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uYnRuLWdob3N0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcbn1cblxuLyogU2l6ZXMgKi9cbi5idG4tc20ge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcbn1cblxuLmJ0bi1sZyB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTgpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYXUtZm9ybXMuY3NzICDCtyAgRm9ybSBjb250cm9sc1xuICAgRGVwZW5kcyBvbjogYXUtdG9rZW5zLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiBMYWJlbHMgKi9cbi5sYWJlbCB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEpO1xufVxuXG4ubGFiZWwtcmVxdWlyZWQ6OmFmdGVyIHtcblx0Y29udGVudDogXCIgKlwiO1xuXHRjb2xvcjogdmFyKC0tYXUtZXJyb3IpO1xufVxuXG4uaGVscGVyIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMSk7XG59XG5cbi5lcnJvci1tc2cge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRjb2xvcjogdmFyKC0tYXUtZXJyb3IpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0xKTtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLyogVGV4dCBJbnB1dCAqL1xuLmlucHV0IHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRvdXRsaW5lOiBub25lO1xuXHR0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5pbnB1dDo6cGxhY2Vob2xkZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xufVxuXG4uaW5wdXQ6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uaW5wdXQtZXJyb3Ige1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWVycm9yKSAhaW1wb3J0YW50O1xufVxuXG4vKiBEYXJrIHZhcmlhbnQgKi9cbi5pbnB1dC1kYXJrIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4uaW5wdXQtZGFyazpmb2N1cyB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIFNlbGVjdCAqL1xuLnNlbGVjdCB7XG5cdHdpZHRoOiAxMDAlO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS04KSB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0b3V0bGluZTogbm9uZTtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLC4uLmNoZXZyb24uLi5cIik7XG5cdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IDE2cHggY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5zZWxlY3Q6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBUZXh0YXJlYSAqL1xuLnRleHRhcmVhIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdHJlc2l6ZTogdmVydGljYWw7XG5cdG1pbi1oZWlnaHQ6IDEwMHB4O1xufVxuXG4udGV4dGFyZWE6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBDaGVja2JveCAmIFJhZGlvICovXG4uY2hlY2stZ3JvdXAge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uY2hlY2stbGFiZWwge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcbn1cblxuLmNoZWNrYm94LCAucmFkaW8ge1xuXHR3aWR0aDogMjBweDtcblx0aGVpZ2h0OiAyMHB4O1xuXHRhY2NlbnQtY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4ucmFkaW8ge1xuXHRhY2NlbnQtY29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4vKiBUb2dnbGUgU3dpdGNoICovXG4udG9nZ2xlIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR3aWR0aDogNDhweDtcblx0aGVpZ2h0OiAyNnB4O1xufVxuXG4udG9nZ2xlIGlucHV0IHtcblx0b3BhY2l0eTogMDtcblx0d2lkdGg6IDA7XG5cdGhlaWdodDogMDtcblx0cG9zaXRpb246IGFic29sdXRlO1xufVxuXG4udG9nZ2xlLXRyYWNrIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0zMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi50b2dnbGUtdHJhY2s6OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR3aWR0aDogMjBweDtcblx0aGVpZ2h0OiAyMHB4O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0dG9wOiAzcHg7XG5cdGxlZnQ6IDNweDtcblx0Ym94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi50b2dnbGUgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGUtdHJhY2sge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnRvZ2dsZSBpbnB1dDpjaGVja2VkICsgLnRvZ2dsZS10cmFjazo6YWZ0ZXIge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjJweCk7XG59XG5cbi8qIFJhbmdlIFNsaWRlciAqL1xuLnJhbmdlIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogNnB4O1xuXHRhcHBlYXJhbmNlOiBub25lO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbn1cblxuLnJhbmdlOjotd2Via2l0LXNsaWRlci10aHVtYiB7XG5cdGFwcGVhcmFuY2U6IG5vbmU7XG5cdHdpZHRoOiAyMnB4O1xuXHRoZWlnaHQ6IDIycHg7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGJvcmRlcjogM3B4IHNvbGlkIHZhcigtLWF1LXdoaXRlKTtcblx0Ym94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cblxuLyogRmlsZSBVcGxvYWQgKi9cbi5maWxlLXVwbG9hZCB7XG5cdGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1hdS1ncmF5LTMwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTUpO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dHJhbnNpdGlvbjogYWxsIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4uZmlsZS11cGxvYWQ6aG92ZXIge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xufVxuXG4vKiBMYXlvdXQgaGVscGVycyAqL1xuLmZvcm0tZ3JvdXAge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmZvcm0tcm93IHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcblx0LmZvcm0tcm93IHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxufVxuLyogbXVsdGktY29sdW1uIGNoZWNrYm94L3JhZGlvIGxpc3QgZm9yIGxvbmcgb3B0aW9uIHNldHMgKGUuZy4gMTYgcHJvamVjdCB0eXBlcykuXG4gICBCb3hlcyBhbGlnbiB0byB0aGUgZmlyc3QgbGluZSBzbyB3cmFwcGluZyBsYWJlbHMgc3RheSB0aWR5LiAqL1xuLmNoZWNrLWdyb3VwLS1jb2xzIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTYpO1xufVxuXG4uY2hlY2stZ3JvdXAtLWNvbHMgLmNoZWNrLWxhYmVsIHtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5cbi5jaGVjay1ncm91cC0tY29scyAuY2hlY2tib3gsIC5jaGVjay1ncm91cC0tY29scyAucmFkaW8ge1xuXHRmbGV4LXNocmluazogMDtcblx0bWFyZ2luLXRvcDogMnB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHtcblx0LmNoZWNrLWdyb3VwLS1jb2xzIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxufVxuLyogZm9ybSBzY2FmZm9sZCDigJQgY29uc3RyYWluIHdpZHRoLCByZXNldCB0aGUgZmllbGRzZXQgY2hyb21lLCBzdHlsZSB0aGUgbGVnZW5kICovXG4uZm9ybSB7XG5cdG1heC13aWR0aDogNjgwcHg7XG59XG5cbi5mb3JtIGZpZWxkc2V0IHtcblx0Ym9yZGVyOiAwO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi5mb3JtIGxlZ2VuZCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTYpO1xufVxuXG4vKiDilIDilIDilIAgTGVnYWN5IENNUyBmb3JtcyAoLmF1Zm9ybSkg4pSA4pSA4pSAXG4gICBUaGUgc2l0ZXdpZGUgZm9ybSBtYWNyb3MgKHRlbXBsYXRlcy9mb3Jtcy8qKSBlbWl0IGJhcmUgZWxlbWVudHMgd2l0aFxuICAgY2xhc3M9XCJhdWZvcm1cIiBvbiB0aGUgPGZvcm0+IGFuZCBjbGFzcz1cImdlbmVyaWNfZWxlbWVudFwiIHdyYXBwZXJzLlxuICAgVGhlIGZvcm0gdGVtcGxhdGUgYWxzbyBpbmplY3RzIHRoZSBsZWdhY3kgL2Nzcy9mb3Jtcy5jc3MgQUZURVIgaW5kZXguY3NzLFxuICAgc28gd2Ugc2NvcGUgdW5kZXIgLnBhZ2UtbWFpbiB0byB3aW4gYnkgc3BlY2lmaWNpdHkuICovXG4ucGFnZS1tYWluIC5hdWZvcm0ge1xuXHRtYXgtd2lkdGg6IDY4MHB4O1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLmdlbmVyaWNfZWxlbWVudCB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRjbGVhcjogbm9uZTtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIC5oZWxwX21lc3NhZ2Uge1xuXHRtaW4taGVpZ2h0OiAwO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gbGFiZWwge1xuXHRkaXNwbGF5OiBibG9jaztcblx0ZmxvYXQ6IG5vbmU7XG5cdHdpZHRoOiBhdXRvO1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEpO1xuXHRtYXJnaW4tcmlnaHQ6IDA7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPXRleHRdLFxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9ZW1haWxdLFxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9dGVsXSxcbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPXVybF0sXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT1zZWFyY2hdLFxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9bnVtYmVyXSB7XG5cdHdpZHRoOiAxMDAlO1xuXHRmbG9hdDogbm9uZTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdG91dGxpbmU6IG5vbmU7XG5cdHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT1lbWFpbF06Zm9jdXMsXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT10ZWxdOmZvY3VzIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gdGV4dGFyZWEge1xuXHR3aWR0aDogMTAwJTtcblx0ZmxvYXQ6IG5vbmU7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRyZXNpemU6IHZlcnRpY2FsO1xuXHRtaW4taGVpZ2h0OiAxMDBweDtcblx0b3V0bGluZTogbm9uZTtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIHRleHRhcmVhOmZvY3VzIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gc2VsZWN0IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG5cdG91dGxpbmU6IG5vbmU7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSBzZWxlY3Q6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT1zdWJtaXRdIHtcblx0LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuXHRhcHBlYXJhbmNlOiBub25lO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTYpO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTUpIDAgMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPXN1Ym1pdF06aG92ZXIge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xufVxuXG4vKiBwaG9uZSBtYWNybzogdGhyZWUgc21hbGwgaW5wdXRzIGluIGEgcm93ICovXG4ucGFnZS1tYWluIC5hdWZvcm0gLnBob25lIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0ZmxleC13cmFwOiB3cmFwO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLnBob25lIGxhYmVsIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZsb2F0OiBub25lO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLnBob25lIHNlbGVjdCB7XG5cdGZsZXg6IDAgMCBhdXRvO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLnBob25lIGlucHV0LmZsdWlkIHtcblx0d2lkdGg6IGF1dG87XG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogNjBweDtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIC5waG9uZSBzcGFuIHtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBhdS10YWJsZXMuY3NzICDCtyAgRGF0YSB0YWJsZXNcbiAgIERlcGVuZHMgb246IGF1LXRva2Vucy5jc3NcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyogQmFuZC1hd2FyZTogY2VsbCB0ZXh0LCBib3JkZXJzIGFuZCBzdHJpcGVzIHJlYWQgdGhlIHNlY3Rpb24ncyAtLWJhbmQtKiBjb250ZXh0XG4gICB0b2tlbnMgKHNldCBvbiBkYXJrIGJhbmRzIGluIGxheW91dC5jc3MpLCBzbyBhIHRhYmxlIGRyb3BwZWQgb24gYSBkYXJrIGJhbmQg4oCUXG4gICBlLmcuIGluc2lkZSBhIGRhcmsgYWNjb3JkaW9uIOKAlCBhZGFwdHMgaW5zdGVhZCBvZiByZW5kZXJpbmcgZGFyay1vbi1kYXJrLiBGYWxsc1xuICAgYmFjayB0byB0aGUgbGlnaHQtdGFibGUgbG9vayBvZmYgYSBiYW5kLiAqL1xuLnRhYmxlLXdyYXAge1xuXHRvdmVyZmxvdy14OiBhdXRvO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xufVxuXG4udGFibGUge1xuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLyogaW5zaWRlIGEgd3JhcCwgdGhlIHdyYXAgb3ducyB0aGUgb3V0ZXIgc3BhY2luZyBhbmQgdGhlIHRhYmxlIHNpdHMgZmx1c2ggdG8gdGhlXG4gICByb3VuZGVkIGJvcmRlci4gV2l0aG91dCB0aGlzLCB0aGUgcGFnZS1jb250ZW50IHJoeXRobSdzIHRvcCBtYXJnaW4gb24gPHRhYmxlPlxuICAgb3BlbnMgYSBibGFuayBzdHJpcCBiZXR3ZWVuIHRoZSBib3JkZXIgYW5kIHRoZSBoZWFkZXIgcm93ICh0aGUgd3JhcCBpcyBpdHMgb3duXG4gICBibG9jay1mb3JtYXR0aW5nIGNvbnRleHQsIHNvIHRoZSBtYXJnaW4gY2FuJ3QgY29sbGFwc2UgYXdheSkuICovXG4udGFibGUtd3JhcCA+IC50YWJsZSB7XG5cdG1hcmdpbjogMDtcbn1cblxuLnRhYmxlIHRoZWFkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi50YWJsZSB0aCB7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAxcHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xufVxuXG4udGFibGUgdGQsXG4udGFibGUgdGJvZHkgdGgge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJhbmQtY2FyZC1ib3JkZXIsIHZhcigtLWF1LWdyYXktMjAwKSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXRleHQpKTtcbn1cblxuLnRhYmxlIHRib2R5IHRoIHtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1jYXJkLWJnLCB2YXIoLS1hdS1jcmVhbSkpO1xuXHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4vKiBTdHJpcGVkIHJvd3MgKi9cbi50YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1jaGlsZChldmVuKSB0ZCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtY2FyZC1iZywgcmdiYSgwLCA1MSwgMTAyLCAwLjAyKSk7XG59XG5cbi8qIEdyb3VwZWQgcm93cyDigJQgYmFuZCBhbHRlcm5hdGUgcm93IEdST1VQUywgbm90IGFsdGVybmF0ZSByb3dzLlxuICAgVXNlIG9uZSA8dGJvZHk+IHBlciBncm91cCAodGhhdCBpcyB3aGF0IHRib2R5IGlzIGZvcikgYW5kIGdpdmUgdGhlIHRhYmxlXG4gICAudGFibGUtLWdyb3VwZWQ6IGFsdGVybmF0ZSBncm91cHMgZ2V0IGEgdGludGVkIGJhbmQgYW5kIGEgaGVhdmllciBydWxlXG4gICBhYm92ZSBpdC4gVGhpcyBpcyB0aGUgdmFyaWFudCBmb3IgdGFibGVzIHdob3NlIGZpcnN0IGNvbHVtbiBpcyBhIHJvd3NwYW5cbiAgIGNhdGVnb3J5IGxhYmVsIOKAlCByb3ctbGV2ZWwgLnRhYmxlLXN0cmlwZWQgd291bGQgc3RyaXBlIHN0cmFpZ2h0IGFjcm9zcyB0aG9zZVxuICAgZ3JvdXBzIGFuZCBmaWdodCB0aGVtLiBSZXBsYWNlcyB0aGUgbGVnYWN5IGZsYXQtZ3JleSBgYmFja2dyb3VuZC1jb2xvcmAgZmlsbHNcbiAgIHRoYXQgQ0tFZGl0b3IvV29yZCBwYXN0ZXMgdXNlZCBmb3IgdGhlIHNhbWUgcHVycG9zZS4gKi9cbi50YWJsZS0tZ3JvdXBlZCB0Ym9keTpudGgtb2YtdHlwZShvZGQpIHRkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1jYXJkLWJnLCB2YXIoLS1hdS1jcmVhbSkpO1xufVxuXG4udGFibGUtLWdyb3VwZWQgdGJvZHkgKyB0Ym9keSB0ZCB7XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xufVxuXG4vKiBSb3cgaG92ZXIg4oCUIGxhc3Qgc28gaXQgd2lucyBvdmVyIGJvdGggYmFuZGluZyB2YXJpYW50cyAoZXF1YWwgc3BlY2lmaWNpdHkpLlxuICAgT3B0IG91dCB3aXRoIC50YWJsZS0tbm9ob3Zlci4gUm93IGhpZ2hsaWdodGluZyBtaXNyZWFkcyBvbiB0YWJsZXMgdGhhdCB1c2VcbiAgIHJvd3NwYW46IGhvdmVyaW5nIGEgcm93IGNhbm5vdCBsaWdodCB1cCB0aGUgc3Bhbm5pbmcgY2F0ZWdvcnkvY29udGFjdCBjZWxsc1xuICAgKHRob3NlIGJlbG9uZyB0byB0aGUgZ3JvdXAncyBGSVJTVCA8dHI+KSwgc28gdGhlIGhpZ2hsaWdodCBjb21lcyBvdXQgcmFnZ2VkXG4gICBhbmQgaGFsZi1hcHBsaWVkLiBUaGUgOm5vdCgpIGtlZXBzIHRoZSBiYW5kaW5nIGludGFjdCDigJQgaXQgc2ltcGx5IG5ldmVyIGFybXNcbiAgIHRoZSBob3ZlciDigJQgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIHJlcGFpbnQgdGhlIGNlbGwgYmFjayB0byBpdHMgYmFuZCBjb2xvdXIuICovXG4udGFibGU6bm90KC50YWJsZS0tbm9ob3ZlcikgdGJvZHkgdHI6aG92ZXIgdGQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1iYW5kLXJhaXNlZCwgdmFyKC0tYXUtZ29sZC1wYWxlKSk7XG59XG5cbi8qIENvbXBhY3QgdmFyaWFudCAqL1xuLnRhYmxlLWNvbXBhY3QgdGgsXG4udGFibGUtY29tcGFjdCB0ZCB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xufVxuXG4vKiDilIDilIDilIAgUmVzcG9uc2l2ZTogdGFibGUg4oaSIGNhcmRzIG9uIG1vYmlsZSDilIDilIDilIAgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHQudGFibGUtcmVzcG9uc2l2ZSB0aGVhZCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXHQudGFibGUtcmVzcG9uc2l2ZSB0Ym9keSB0ciB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0yMDApKTtcblx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHR9XG5cdC50YWJsZS1yZXNwb25zaXZlIHRib2R5IHRkIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQvKiBMYWJlbCBmcm9tIGRhdGEtbGFiZWwgYXR0cmlidXRlICovXG5cdC50YWJsZS1yZXNwb25zaXZlIHRib2R5IHRkOjpiZWZvcmUge1xuXHRcdGNvbnRlbnQ6IGF0dHIoZGF0YS1sYWJlbCk7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRcdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdFx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHR9XG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGF1LWZlZWRiYWNrLmNzcyAgwrcgIENhbGxvdXRzICYgcHJvZ3Jlc3NcbiAgIERlcGVuZHMgb246IGF1LXRva2Vucy5jc3NcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyog4pSA4pSA4pSAIENhbGxvdXRzIC8gYWxlcnRzIOKUgOKUgOKUgCAqL1xuLmNhbGxvdXQge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG59XG5cbi8qIFtoaWRkZW5dIGFsb25lIGNhbid0IGhpZGUgYSBkaXNwbGF5OmZsZXggYm94IOKAlCBtYWtlIHRoZSBhdHRyaWJ1dGUgd2luICovXG4uY2FsbG91dFtoaWRkZW5dIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLmNhbGxvdXQtaW5mbyB7XG5cdGJhY2tncm91bmQ6ICNFQkYzRkE7XG5cdGNvbG9yOiB2YXIoLS1hdS1pbmZvKTtcblx0Ym9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS1hdS1pbmZvKTtcbn1cblxuLmNhbGxvdXQtd2FybmluZyB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGNvbG9yOiAjOEE2QTFFO1xuXHRib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xufVxuXG4uY2FsbG91dC1zdWNjZXNzIHtcblx0YmFja2dyb3VuZDogI0VCRjVFRTtcblx0Y29sb3I6IHZhcigtLWF1LXN1Y2Nlc3MpO1xuXHRib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWF1LXN1Y2Nlc3MpO1xufVxuXG4uY2FsbG91dC1lcnJvciB7XG5cdGJhY2tncm91bmQ6ICNGQkVDRUM7XG5cdGNvbG9yOiB2YXIoLS1hdS1lcnJvcik7XG5cdGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tYXUtZXJyb3IpO1xufVxuXG4vKiDilIDilIDilIAgQ1RBIGNhbGxvdXQg4oCUIGEgc2V0LWFwYXJ0IHBhbmVsOiBhIG1lc3NhZ2UgYmVzaWRlIGFuIGFjdGlvbiBidXR0b24uXG4gICBUaGUgY2xlYW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBvbGQgPHRhYmxlPiBcImV4Y2VycHQgKyBidXR0b25cIiBwYXR0ZXJuOyB3cmFwc1xuICAgdG8gc3RhY2tlZCAodGV4dCBvdmVyIGJ1dHRvbikgb24gbmFycm93IHdpZHRocy4gVGV4dCBpcyBhIDxkaXY+LCBub3QgPHA+LCBzb1xuICAgaXQgZG9lc24ndCBpbmhlcml0IHRoZSAucGFnZS1tYWluIHBhcmFncmFwaCByaHl0aG0uIOKUgOKUgOKUgCAqL1xuLmN0YS1jYWxsb3V0IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtOCkgMDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtOCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG59XG5cbi5jdGEtY2FsbG91dC10ZXh0IHtcblx0ZmxleDogMSAxIDMyMHB4O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG59XG5cbi5jdGEtY2FsbG91dCAuYnRuIHtcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIOKUgOKUgOKUgCBzaWRlbm90ZSDigJQgYSBib3hlZCBhc2lkZSB0aGF0IGZsb2F0cyBiZXNpZGUgdGhlIGJvZHkgb24gd2lkZSBzY3JlZW5zXG4gICAoZS5nLiBcImhvdyB0byBzdWJtaXQgYSByZXF1ZXN0XCIpOyB0aGUgc3Vycm91bmRpbmcgdGV4dCB3cmFwcyBhcm91bmQgaXQuXG4gICBVbmZsb2F0cyB0byBhIGZ1bGwtd2lkdGggYmxvY2sgb24gbmFycm93IHNjcmVlbnMuIOKUgOKUgOKUgCAqL1xuLnNpZGVub3RlIHtcblx0ZmxvYXQ6IHJpZ2h0O1xuXHR3aWR0aDogMzAwcHg7XG5cdG1heC13aWR0aDogNDIlO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTEpIDAgdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtOCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTYpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsaW5lLWhlaWdodDogMS42O1xufVxuXG4uc2lkZW5vdGUtdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRsaW5lLWhlaWdodDogMS4yNTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7XG5cdC5zaWRlbm90ZSB7XG5cdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0d2lkdGg6IGF1dG87XG5cdFx0bWF4LXdpZHRoOiBub25lO1xuXHRcdG1hcmdpbi1sZWZ0OiAwO1xuXHR9XG59XG4vKiDilIDilIDilIAgUHJvZ3Jlc3MgYmFyIOKUgOKUgOKUgCAqL1xuLnByb2dyZXNzLXdyYXAge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdGhlaWdodDogMzZweDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Ym94LXNoYWRvdzogaW5zZXQgMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7XG59XG5cbi5wcm9ncmVzcy1maWxsIHtcblx0aGVpZ2h0OiAxMDAlO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWF1LW5hdnkpIDAlLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSAxMDAlKTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcblx0cGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2UtNCk7XG5cdHRyYW5zaXRpb246IHdpZHRoIDJzIHZhcigtLWVhc2Utb3V0KTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4vKiBHb2xkIGFjY2VudCBlZGdlICovXG4ucHJvZ3Jlc3MtZmlsbDo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHJpZ2h0OiAwO1xuXHR0b3A6IDA7XG5cdGJvdHRvbTogMDtcblx0d2lkdGg6IDUwcHg7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjUpKTtcblx0Ym9yZGVyLXJhZGl1czogMCB2YXIoLS1yYWRpdXMtbGcpIHZhcigtLXJhZGl1cy1sZykgMDtcbn1cblxuLnByb2dyZXNzLWxhYmVsIHtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR6LWluZGV4OiAyO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIHN0ZXBzLmNzcyAgwrcgIG51bWJlcmVkIHN0ZXAtYnktc3RlcCAoaG93LXRvIGd1aWRlcylcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3NcbiAgIEFuIG9yZGVyZWQgbGlzdCBvZiBwcm9jZWR1cmUgc3RlcHMg4oCUIGEgZ29sZCBudW1iZXIgYmFkZ2UgcGVyIHN0ZXAsXG4gICBqb2luZWQgYnkgYSB2ZXJ0aWNhbCBjb25uZWN0b3IgbGluZSwgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gYW5kIGFuXG4gICAob3B0aW9uYWxseSBmcmFtZWQpIHNjcmVlbnNob3QgaW5kZW50ZWQgaW4gdGhlIHN0ZXAgY29sdW1uLlxuXG4gICBBdXRob3JpbmcgKENLRWRpdG9yLXNhZmUg4oCUIG5vIGljb25zLCBubyBtYW51YWwgXCJTdGVwIE5cIiwgbm8gbnVtYmVycyk6XG4gICAgIDxvbCBjbGFzcz1cInN0ZXBzXCI+XG4gICAgICAgPGxpPlxuICAgICAgICAgPHA+RG8gdGhlIHRoaW5nLjwvcD4gICAgICAgICAgICAgICAgICAgICAobGVhZCBpbnN0cnVjdGlvbilcbiAgICAgICAgIDxmaWd1cmU+PGltZyBzcmM9XCLigKZcIiBhbHQ9XCLigKZcIj48L2ZpZ3VyZT4gIChvcHRpb25hbCBzY3JlZW5zaG90KVxuICAgICAgIDwvbGk+XG4gICAgICAg4oCmXG4gICAgIDwvb2w+XG4gICBUaGUgbnVtYmVycyBhbmQgY29ubmVjdG9yIGxpbmUgYXJlIGdlbmVyYXRlZCB3aXRoIENTUyBjb3VudGVycyArXG4gICA6OmJlZm9yZS86OmFmdGVyLCBzbyB0aGUgbWFya3VwIHN0YXlzIGEgY2xlYW4gb3JkZXJlZCBsaXN0LiBUaGUgbnVtYmVyXG4gICBiYWRnZSBJUyB0aGUgc3RlcCBsYWJlbCwgc28gbm8gXCJTdGVwIDFcIiB0ZXh0IGlzIG5lZWRlZC5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLnN0ZXBzIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0Y291bnRlci1yZXNldDogc3RlcDtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS04KSAwO1xuXHRwYWRkaW5nOiAwO1xufVxuXG4uc3RlcHMgPiBsaSB7XG5cdGNvdW50ZXItaW5jcmVtZW50OiBzdGVwO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1hcmdpbjogMDsgLyogY2FuY2VsIHRoZSBnbG9iYWwgYGxpICsgbGlgIGdhcCAqL1xuXHRwYWRkaW5nLWxlZnQ6IDRyZW07IC8qIHRoZSBiYWRnZSBjb2x1bW4gKi9cblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTEwKTsgLyogcm9vbSBmb3IgdGhlIGNvbm5lY3RvciB0byB0aGUgbmV4dCBzdGVwICovXG59XG5cbi5zdGVwcyA+IGxpOmxhc3QtY2hpbGQge1xuXHRwYWRkaW5nLWJvdHRvbTogMDtcbn1cblxuLyogdGhlIG51bWJlciBiYWRnZSAqL1xuLnN0ZXBzID4gbGk6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IGNvdW50ZXIoc3RlcCk7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bGVmdDogMDtcblx0dG9wOiAwO1xuXHR3aWR0aDogMi41cmVtO1xuXHRoZWlnaHQ6IDIuNXJlbTtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0ei1pbmRleDogMTsgLyogc2l0IGFib3ZlIHRoZSBjb25uZWN0b3IgbGluZSAqL1xufVxuXG4vKiB0aGUgY29ubmVjdG9yIGxpbmUgbGlua2luZyBhIHN0ZXAgdG8gdGhlIG5leHQgKG5vdCBhZnRlciB0aGUgbGFzdCBzdGVwKSAqL1xuLnN0ZXBzID4gbGk6bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IDEuMjVyZW07IC8qIGNlbnRyZWQgdW5kZXIgdGhlIDIuNXJlbSBiYWRnZSAqL1xuXHR0b3A6IDNyZW07IC8qIGp1c3QgYmVsb3cgdGhlIGJhZGdlICovXG5cdGJvdHRvbTogMDtcblx0d2lkdGg6IDJweDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0yMDApO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTFweCk7XG59XG5cbi5zdGVwcyA+IGxpID4gOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLyogdGhlIGxlYWQgaW5zdHJ1Y3Rpb24g4oCUIHNsaWdodGx5IGxhcmdlciwgYW5kIG51ZGdlZCBkb3duIH4wLjRyZW0gc28gaXRzIGZpcnN0XG4gICBsaW5lIHNpdHMgdmVydGljYWxseSBjZW50ZXJlZCBhZ2FpbnN0IHRoZSBudW1iZXIgYmFkZ2UgKHRoZSBudW1iZXIgZG9lcyB0aGVcbiAgIFwiU3RlcCBOXCIgbGFiZWxsaW5nLCBzbyBubyBleWVicm93IGlzIG5lZWRlZCkuICovXG4uc3RlcHMgPiBsaSA+IHA6Zmlyc3QtY2hpbGQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRsaW5lLWhlaWdodDogMS42O1xuXHRtYXJnaW46IDAuNHJlbSAwIDA7XG59XG5cbi8qIGFueSBmb2xsb3dpbmcgdGV4dCBpbiBhIHN0ZXAgKi9cbi5zdGVwcyBwIHtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0yKSAwIDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG59XG5cbi8qIGZyYW1lZCBzY3JlZW5zaG90OiBoYWlybGluZSBib3JkZXIsIHJvdW5kZWQgY29ybmVycywgc29mdCBsaWZ0OyBjYXBwZWQgc28gYVxuICAgbGFyZ2UgY2FwdHVyZSBkb2Vzbid0IGZpbGwgdGhlIHdob2xlIGNvbHVtbi4gTGVmdCBlZGdlIGxpbmVzIHVwIHdpdGggdGhlIHRleHQuICovXG4uc3RlcHMgZmlndXJlIHtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS00KSAwIDA7XG59XG5cbi5zdGVwcyBmaWd1cmUgaW1nIHtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc20pO1xuXHRtYXgtd2lkdGg6IDQ0MHB4O1xuXHR3aWR0aDogMTAwJTtcbn1cblxuLnN0ZXBzIGZpZ2NhcHRpb24ge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG59XG5cbi8qIHRpZ2h0ZW4gdGhlIGJhZGdlIGNvbHVtbiBvbiBzbWFsbCBzY3JlZW5zICovXG5AbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHtcblx0LnN0ZXBzID4gbGkge1xuXHRcdHBhZGRpbmctbGVmdDogMy4yNXJlbTtcblx0fVxuXHQuc3RlcHMgPiBsaTo6YmVmb3JlIHtcblx0XHR3aWR0aDogMi4xcmVtO1xuXHRcdGhlaWdodDogMi4xcmVtO1xuXHRcdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdH1cblx0LnN0ZXBzID4gbGk6bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIge1xuXHRcdGxlZnQ6IDEuMDVyZW07XG5cdFx0dG9wOiAyLjVyZW07XG5cdH1cbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYXUtZGlzY2xvc3VyZS5jc3MgIMK3ICBBY2NvcmRpb24gJiB0YWJiZWQgcGFuZWxzXG4gICBEZXBlbmRzIG9uOiBhdS10b2tlbnMuY3NzXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIOKUgOKUgOKUgCBBY2NvcmRpb24g4pSA4pSA4pSAICovXG4vKiBCYW5kLWF3YXJlOiByZWFkcyB0aGUgc2VjdGlvbidzIC0tYmFuZC0qIGNvbnRleHQgdG9rZW5zIChzZXQgb24gZGFyayBiYW5kcyBpblxuICAgbGF5b3V0LmNzcykgc28gdGhlIGFjY29yZGlvbiBhZGFwdHMgYXV0b21hdGljYWxseSDigJQgbGlnaHQgdHJpZ2dlcnMgKyBkYXJrIHRleHRcbiAgIG9uIGxpZ2h0IGJhbmRzLCB0cmFuc2x1Y2VudCB0cmlnZ2VycyArIGxpZ2h0IHRleHQgb24gZGFyayBiYW5kcyDigJQgd2l0aCBub1xuICAgdmFyaWFudCBjbGFzcyB0byByZW1lbWJlci4gRmFsbHMgYmFjayB0byB0aGUgbGlnaHQgbG9vayBvZmYgYSBiYW5kLiAqL1xuLmFjY29yZGlvbiB7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJhbmQtY2FyZC1ib3JkZXIsIHZhcigtLWF1LWdyYXktMjAwKSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5hY2NvcmRpb24taXRlbSB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xuXHQvKiB3aGVuIGRlZXAtbGlua2VkIChqcy9hY2NvcmRpb24uanMgb3BlbnMgdGhlIHBhbmVsIGFuZCBzY3JvbGxzIGhlcmUpLCBjbGVhclxuXHQgICB0aGUgc3RpY2t5IGhlYWRlciBzbyB0aGUgcXVlc3Rpb24gaXNuJ3QgaGlkZGVuIHVuZGVybmVhdGggaXQuICovXG5cdHNjcm9sbC1tYXJnaW4tdG9wOiBjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tc3BhY2UtMykpO1xufVxuXG4uYWNjb3JkaW9uLWl0ZW06bGFzdC1jaGlsZCB7XG5cdGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi5hY2NvcmRpb24taXRlbSA+IDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdG1hcmdpbjogMDtcblx0Zm9udC1zaXplOiBpbmhlcml0O1xufVxuXG4uYWNjb3JkaW9uLXRyaWdnZXIge1xuXHR3aWR0aDogMTAwJTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1jYXJkLWJnLCB2YXIoLS1hdS13aGl0ZSkpO1xuXHRib3JkZXI6IG5vbmU7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWZhc3QpO1xufVxuXG4uYWNjb3JkaW9uLXRyaWdnZXI6aG92ZXIsXG4uYWNjb3JkaW9uLXRyaWdnZXJbYXJpYS1leHBhbmRlZD10cnVlXSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtcmFpc2VkLCB2YXIoLS1hdS1nb2xkLXBhbGUpKTtcbn1cblxuLyogYSBDTVMtYXV0aG9yZWQgdGl0bGUgaXMgc29tZXRpbWVzIHdyYXBwZWQgaW4gYSBoZWFkaW5nIChlLmcuIDxoMz4pLiBUaGUgZ2xvYmFsXG4gICBiYXNlLmNzcyBgaDEuLmg2IHsgY29sb3I6IG5hdnkgfWAgd291bGQgdGhlbiBwYWludCBpdCBkYXJrIOKAlCBpbnZpc2libGUgb24gYVxuICAgZGFyayBiYW5kLiBUaWUgYW55IGhlYWRpbmcgaW5zaWRlIHRoZSB0cmlnZ2VyIHRvIHRoZSB0cmlnZ2VyJ3Mgb3duIGJhbmQtYXdhcmVcbiAgIGNvbG91ciwgYW5kIHN0cmlwIHRoZSBoZWFkaW5nJ3MgcGFnZSBtYXJnaW5zIHNvIGl0IHNpdHMgaW4gdGhlIGJ1dHRvbi4gKi9cbi5hY2NvcmRpb24tdHJpZ2dlciA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNikge1xuXHRjb2xvcjogaW5oZXJpdDtcblx0bWFyZ2luOiAwO1xufVxuXG4uYWNjb3JkaW9uLXRyaWdnZXIgYSB7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiBTZWNvbmRhcnkgdGV4dCBvbiBhIHRyaWdnZXIg4oCUIGEgcXVhbGlmaWVyIHRoYXQgYmVsb25ncyB3aXRoIHRoZSB0aXRsZSByYXRoZXJcbiAgIHRoYW4gaW5zaWRlIHRoZSBwYW5lbCAoZS5nLiBcIjIwMjUtMjAyNiBWZXJpZmljYXRpb24gRm9ybXMgwrcgZm9yIGNsYXNzZXNcbiAgIGJldHdlZW4gQXVndXN0IDIwMjUgJiBKdWx5IDIwMjZcIikuIExlZ2FjeSBCb290c3RyYXAgcGFuZWxzIHB1dCB0aGlzIGluIGFcbiAgIDxzcGFuPiBiZXNpZGUgdGhlIHRvZ2dsZSBpbnNpZGUgLnBhbmVsLWhlYWRpbmc7IGl0IGhhcyBub3doZXJlIGVsc2UgdG8gZ29cbiAgIG9uY2UgdGhlIGhlYWRpbmcgYmVjb21lcyBhIGJ1dHRvbi4gTGlnaHRlciBhbmQgbG93ZXItY29udHJhc3QgdGhhbiB0aGVcbiAgIHRpdGxlLCBhbmQgaXQgd3JhcHMgcmF0aGVyIHRoYW4gc3F1ZWV6aW5nIHRoZSBpY29uLiAqL1xuLmFjY29yZGlvbi1ub3RlIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS1ncmF5LTYwMCkpO1xufVxuXG4vKiB0aGUgdGl0bGUgKyBub3RlIHN0YWNrIG9uIHRoZSBsZWZ0OyB0aGUgaWNvbiBzdGF5cyBwaW5uZWQgcmlnaHQgKi9cbi5hY2NvcmRpb24tdHJpZ2dlciA+IDpub3QoLmFjY29yZGlvbi1pY29uKSB7XG5cdGZsZXg6IDEgMSBhdXRvO1xufVxuXG4uYWNjb3JkaW9uLXRyaWdnZXIgLmFjY29yZGlvbi1pY29uIHtcblx0ZmxleDogMCAwIGF1dG87XG59XG5cbi8qIFBsdXMvbWludXMgaWNvbiB2aWEgcHNldWRvLWVsZW1lbnRzICovXG4uYWNjb3JkaW9uLWljb24ge1xuXHR3aWR0aDogMjBweDtcblx0aGVpZ2h0OiAyMHB4O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5hY2NvcmRpb24taWNvbjo6YmVmb3JlLFxuLmFjY29yZGlvbi1pY29uOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LW5hdnkpKTtcblx0Ym9yZGVyLXJhZGl1czogMnB4O1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uYWNjb3JkaW9uLWljb246OmJlZm9yZSB7XG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDJweDtcblx0dG9wOiA1MCU7XG5cdGxlZnQ6IDUwJTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi5hY2NvcmRpb24taWNvbjo6YWZ0ZXIge1xuXHR3aWR0aDogMnB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdHRvcDogNTAlO1xuXHRsZWZ0OiA1MCU7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vKiBSb3RhdGUgdmVydGljYWwgYmFyIHRvIGZvcm0gbWludXMgKi9cbi5hY2NvcmRpb24tdHJpZ2dlclthcmlhLWV4cGFuZGVkPXRydWVdIC5hY2NvcmRpb24taWNvbjo6YWZ0ZXIge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoOTBkZWcpO1xuXHRvcGFjaXR5OiAwO1xufVxuXG4vKiBBdXRvLWljb246IHRyaWdnZXJzIHdpdGhvdXQgYW4gZXhwbGljaXQgLmFjY29yZGlvbi1pY29uIHNwYW4gZ2V0ICsv4oiSIHZpYVxuICAgOjphZnRlciAoY29tbW9uIGluIGNvbnRlbnQgY29udmVydGVkIGZyb20gQm9vdHN0cmFwIHBhbmVscykuICovXG4uYWNjb3JkaW9uLXRyaWdnZXI6bm90KDpoYXMoLmFjY29yZGlvbi1pY29uKSk6OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0ZmxleDogMCAwIDIwcHg7XG5cdHdpZHRoOiAyMHB4O1xuXHRoZWlnaHQ6IDIwcHg7XG5cdG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjZS0zKTtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSksIHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSkpIDUwJS8xNHB4IDJweCBuby1yZXBlYXQsIGxpbmVhci1ncmFkaWVudCh2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpLCB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpKSA1MCUvMnB4IDE0cHggbm8tcmVwZWF0O1xuXHR0cmFuc2l0aW9uOiB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5hY2NvcmRpb24tdHJpZ2dlclthcmlhLWV4cGFuZGVkPXRydWVdOm5vdCg6aGFzKC5hY2NvcmRpb24taWNvbikpOjphZnRlciB7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpLCB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpKSA1MCUvMTRweCAycHggbm8tcmVwZWF0O1xufVxuXG4vKiBBbmNob3IgcmVtbmFudHMgZnJvbSBCb290c3RyYXAgY29sbGFwc2UgdG9nZ2xlczogc3RyaXAgbGluayBzdHlsaW5nIHNvIHRoZVxuICAgdHJpZ2dlciB0ZXh0IGxvb2tzIGxpa2Ugbm9ybWFsIHRleHQsIG5vdCBhIGh5cGVybGluay4gKi9cbi5hY2NvcmRpb24tdHJpZ2dlciBhIHtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLyogRmxhZy9pY29uIGltYWdlcyBpbnNpZGUgdHJpZ2dlcnM6IG92ZXJyaWRlIGJhc2UuY3NzIGJsb2NrIGRpc3BsYXksXG4gICBzaXplIHRvIHRleHQsIGFuZCB2ZXJ0aWNhbGx5IGNlbnRlciB3aXRoIHRoZSBsYWJlbC4gKi9cbi5hY2NvcmRpb24tdHJpZ2dlciBpbWcge1xuXHRkaXNwbGF5OiBpbmxpbmU7XG5cdGhlaWdodDogMS4yZW07XG5cdHdpZHRoOiBhdXRvO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uYWNjb3JkaW9uLXBhbmVsIHtcblx0bWF4LWhlaWdodDogMDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0dHJhbnNpdGlvbjogbWF4LWhlaWdodCB2YXIoLS1kdXJhdGlvbi1zbG93KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi8qIHRoZSBvcGVuIGhlaWdodCBpcyBzZXQgaW5saW5lIGJ5IGpzL2FjY29yZGlvbi5qcyBmcm9tIHRoZSBwYW5lbCdzIHJlYWwgY29udGVudFxuICAgKG5vIGZpeGVkIGNhcCBoZXJlIOKAlCBhIGhhcmRjb2RlZCBtYXgtaGVpZ2h0IGNsaXBwZWQgbG9uZyBwYW5lbHMgYW5kIGhpZCB0aGVcbiAgIGJvZHkncyBib3R0b20gcGFkZGluZykuICovXG4uYWNjb3JkaW9uLWJvZHkge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS02KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbi8qIGxpbmtzIGluc2lkZSB0aGUgcGFuZWwgZm9sbG93IHRoZSBiYW5kOiBub3JtYWwgbGluayBibHVlIG9uIGxpZ2h0LCBnb2xkIG9uIGFcbiAgIGRhcmsgYmFuZCAod2hlcmUgbmF2eS1ibHVlIHdvdWxkIHZhbmlzaCkuIEhvdmVyIHN0YXlzIGdvbGQgb24gYm90aC4gKi9cbi5hY2NvcmRpb24tYm9keSBhIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG59XG5cbi8qIGhlYWRpbmdzIGF1dGhvcmVkIGluIHRoZSByaWNoLXRleHQgcGFuZWwgZm9sbG93IHRoZSBiYW5kIGhlYWRpbmcgY29sb3VyIHRvbyxcbiAgIHNvIGFuIDxoMz4vPHN0cm9uZz4gYmxvY2sgc3RheXMgbGVnaWJsZSBvbiBhIGRhcmsgYmFuZC4gKi9cbi5hY2NvcmRpb24tYm9keSA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNikge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi8qIEZhbGxiYWNrOiBwYW5lbHMgd2hvc2UgY29udGVudCBzaXRzIGluIGEgcGxhaW4gPGRpdj4gKG5vIC5hY2NvcmRpb24tYm9keSBjbGFzcylcbiAgIHN0aWxsIGdldCBib2R5IHBhZGRpbmcgYW5kIHR5cG9ncmFwaHkuIENvbW1vbiBpbiBCb290c3RyYXAtY29udmVydGVkIHBhbmVscy4gKi9cbi5hY2NvcmRpb24tcGFuZWwgPiBkaXY6bm90KFtjbGFzc10pIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtNik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG4uYWNjb3JkaW9uLXBhbmVsID4gZGl2Om5vdChbY2xhc3NdKSBhIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG59XG5cbi5hY2NvcmRpb24tcGFuZWwgPiBkaXY6bm90KFtjbGFzc10pIDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLyog4pSA4pSA4pSAIFRhYmJlZCBwYW5lbHMg4pSA4pSA4pSAICovXG4vKiBCb3hlZCBUYWJzICovXG4udGFicyB7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnRhYi1saXN0IHtcblx0ZGlzcGxheTogZmxleDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRvdmVyZmxvdy14OiBhdXRvO1xufVxuXG4udGFiLWJ0biB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGJvcmRlcjogbm9uZTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udGFiLWJ0bjpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnRhYi1idG4uYWN0aXZlIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi8qIEdvbGQgdW5kZXJsaW5lIG9uIGFjdGl2ZSB0YWIgKi9cbi50YWItYnRuLmFjdGl2ZTo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGJvdHRvbTogMDtcblx0bGVmdDogMDtcblx0cmlnaHQ6IDA7XG5cdGhlaWdodDogM3B4O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnRhYi1wYW5lbCB7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4udGFiLXBhbmVsLmFjdGl2ZSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiDilIDilIDilIAgUGlsbC1TdHlsZSBGaWx0ZXIgVGFicyDilIDilIDilIAgKi9cbi50YWItbGlzdC1waWxscyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi50YWItcGlsbCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjVweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS00KTtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4udGFiLXBpbGw6aG92ZXIge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi50YWItcGlsbC5hY3RpdmUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogZGlhbG9nLmNzcyDCtyBuYXRpdmUgPGRpYWxvZz4gbW9kYWxcbiAgIFRyaWdnZXI6IFtkYXRhLWRpYWxvZy1vcGVuPVwiPGlkPlwiXSBvcGVucyA8ZGlhbG9nIGlkPVwiPGlkPlwiPlxuICAgSlM6IGpzL2RpYWxvZy5qcyAoc2VsZi1pbml0cyB2aWEgaW5pdC5qcykgKi9cbi5kaWFsb2cge1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogYXV0bztcblx0bWF4LXdpZHRoOiBtaW4oNjQwcHgsIDEwMHZ3IC0gdmFyKC0tc3BhY2UtOCkpO1xuXHRtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gdmFyKC0tc3BhY2UtMTApKTtcblx0d2lkdGg6IDEwMCU7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaWFsb2dbb3Blbl0ge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4uZGlhbG9nOjpiYWNrZHJvcCB7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMzEsIDYzLCAwLjU1KTtcblx0YmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7XG5cdC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7XG59XG5cbi5kaWFsb2ctaGVhZGVyIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTQpO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4uZGlhbG9nIC5kaWFsb2ctdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW46IDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjM7XG59XG5cbi5kaWFsb2ctY2xvc2Uge1xuXHRmbGV4LXNocmluazogMDtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGZvbnQtc2l6ZTogMS4yNXJlbTtcblx0bGluZS1oZWlnaHQ6IDE7XG5cdGNvbG9yOiB2YXIoLS1hdS1ncmF5LTQwMCk7XG5cdHBhZGRpbmc6IDA7XG5cdHRyYW5zaXRpb246IGNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4uZGlhbG9nLWNsb3NlOmZvY3VzIHtcblx0b3V0bGluZTogbm9uZTtcbn1cblxuLmRpYWxvZy1jbG9zZTpmb2N1cy12aXNpYmxlIHtcblx0b3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRvdXRsaW5lLW9mZnNldDogMnB4O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xufVxuXG4uZGlhbG9nLWNsb3NlOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uZGlhbG9nLWJvZHkge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0b3ZlcmZsb3cteTogYXV0bztcblx0b3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRsaW5lLWhlaWdodDogMS42O1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG59XG5cbi5kaWFsb2ctYm9keSA+IDpmaXJzdC1jaGlsZCB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi5kaWFsb2ctYm9keSBwICsgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uZGlhbG9nLWJvZHkgaW1nIHtcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IGF1dG87XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uZGlhbG9nLWltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzk7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC5kaWFsb2dbb3Blbl0ge1xuXHRcdG1heC13aWR0aDogMTAwdnc7XG5cdFx0bWF4LWhlaWdodDogMTAwdmg7XG5cdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRtYXJnaW46IDA7XG5cdH1cblx0LmRpYWxvZy1oZWFkZXIge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdC5kaWFsb2ctYm9keSB7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCk7XG5cdH1cbn1cbi8qIGNsaWNrYWJsZSB0cmlnZ2VycyAqL1xuW2RhdGEtZGlhbG9nLW9wZW5dIHtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY2FyZFtkYXRhLWRpYWxvZy1vcGVuXTpob3ZlciB7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG5cdHRyYW5zaXRpb246IGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYXUtbWVkaWEuY3NzICDCtyAgQ2Fyb3VzZWwsIGdhbGxlcnkgJiB2aWRlb1xuICAgRGVwZW5kcyBvbjogYXUtdG9rZW5zLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiDilIDilIDilIAgQ2Fyb3VzZWwg4pSA4pSA4pSAICovXG4uY2Fyb3VzZWwge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdGFzcGVjdC1yYXRpbzogMy8yO1xufVxuXG4uY2Fyb3VzZWwtdHJhY2sge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRoZWlnaHQ6IDEwMCU7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLmNhcm91c2VsLXNsaWRlIHtcblx0ZmxleDogMCAwIDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uY2Fyb3VzZWwtc2xpZGUgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xufVxuXG4vKiBTaXplIHZhcmlhbnRzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGFzcGVjdCByYXRpbyAqL1xuLmNhcm91c2VsLWNvbXBhY3Qge1xuXHRhc3BlY3QtcmF0aW86IHVuc2V0O1xufVxuXG4uY2Fyb3VzZWwtY29tcGFjdCAuY2Fyb3VzZWwtc2xpZGUgaW1nIHtcblx0aGVpZ2h0OiAzMjBweDtcbn1cblxuLmNhcm91c2VsLWhlcm8ge1xuXHRhc3BlY3QtcmF0aW86IHVuc2V0O1xuXHRib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uY2Fyb3VzZWwtaGVybyAuY2Fyb3VzZWwtc2xpZGUgaW1nIHtcblx0aGVpZ2h0OiA0ODBweDtcbn1cblxuLyog4pSA4pSAIFBlZWsgdmFyaWFudCDilIDilIBcbiAgIEZpbG0tc3RyaXAgY2Fyb3VzZWw6IGFsbCBpbWFnZXMgc2NhbGVkIHRvIHRoZSBzYW1lIGhlaWdodCwgZWFjaCBzbGlkZVxuICAgaXMgYXMgd2lkZSBhcyBpdHMgaW1hZ2UncyBuYXR1cmFsIHByb3BvcnRpb25zLiBDbGlja2luZyBjZW50ZXJzIHRoZSBuZXh0XG4gICBpbWFnZTsgbmFycm93ZXIgaW1hZ2VzIHNob3cgbW9yZSBvZiB0aGUgbmVpZ2hib3Jpbmcgc2xpZGVzIG9uIGVhY2ggc2lkZS5cbiAgIFRoZSAuY2Fyb3VzZWwtLXBlZWsgaGFzIG92ZXJmbG93OnZpc2libGU7IC5jYXJvdXNlbC1wZWVrLXdyYXAgY2xpcHMgaXQuICovXG4uY2Fyb3VzZWwtcGVlay13cmFwIHtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmNhcm91c2VsLS1wZWVrIHtcblx0b3ZlcmZsb3c6IHZpc2libGU7XG5cdG1heC13aWR0aDogODUwcHg7XG5cdG1hcmdpbjogMCBhdXRvO1xuXHRhc3BlY3QtcmF0aW86IDIvMTsgLyogcGFub3JhbWljOyBvdmVycmlkZXMgMy8yIGZyb20gLmNhcm91c2VsICovXG59XG5cbi5jYXJvdXNlbC0tcGVlayAuY2Fyb3VzZWwtc2xpZGUge1xuXHRmbGV4OiAwIDAgYXV0bzsgLyogbmF0dXJhbCB3aWR0aCBwZXIgaW1hZ2UsIG5vdCAxMDAlICovXG5cdGhlaWdodDogMTAwJTtcbn1cblxuLmNhcm91c2VsLS1wZWVrIC5jYXJvdXNlbC1zbGlkZSBpbWcge1xuXHRoZWlnaHQ6IDEwMCU7XG5cdHdpZHRoOiBhdXRvO1xuXHRkaXNwbGF5OiBibG9jaztcblx0b2JqZWN0LWZpdDogaW5pdGlhbDtcbn1cblxuLyogQ2FwdGlvbiBvdmVybGF5ICovXG4uY2Fyb3VzZWwtY2FwdGlvbiB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0Ym90dG9tOiAwO1xuXHRsZWZ0OiAwO1xuXHRyaWdodDogMDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtOCkgdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtNSk7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCwgcmdiYSgwLCAwLCAwLCAwLjcpKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogUHJldi9OZXh0IGJ1dHRvbnMgKi9cbi5jYXJvdXNlbC1idG4ge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogNTAlO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG5cdHdpZHRoOiA0MHB4O1xuXHRoZWlnaHQ6IDQwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuXHRib3JkZXI6IG5vbmU7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Ym94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG5cdHotaW5kZXg6IDI7XG5cdGZvbnQtc2l6ZTogMThweDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uY2Fyb3VzZWwtcHJldiB7XG5cdGxlZnQ6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uY2Fyb3VzZWwtbmV4dCB7XG5cdHJpZ2h0OiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLyogRG90IGluZGljYXRvcnMgKi9cbi5jYXJvdXNlbC1kb3RzIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRsZWZ0OiA1MCU7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiA4cHg7XG5cdHotaW5kZXg6IDI7XG59XG5cbi5jYXJvdXNlbC1kb3Qge1xuXHR3aWR0aDogMTBweDtcblx0aGVpZ2h0OiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcblx0Ym9yZGVyOiBub25lO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jYXJvdXNlbC1kb3QuYWN0aXZlIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHR0cmFuc2Zvcm06IHNjYWxlKDEuMik7XG59XG5cbi8qIOKUgOKUgOKUgCBQaG90byBnYWxsZXJ5ICsgbGlnaHRib3gg4pSA4pSA4pSAICovXG4uZ2FsbGVyeSB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmdhbGxlcnktaXRlbSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRhc3BlY3QtcmF0aW86IDQvMztcbn1cblxuLmdhbGxlcnktaXRlbSBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4uZ2FsbGVyeS1pdGVtOmhvdmVyIGltZyB7XG5cdHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG59XG5cbi8qIEdhbGxlcnkgb3JpZW50YXRpb24gdmFyaWFudHMg4oCUIGFkZCB0aGUgbW9kaWZpZXIgdG8gdGhlIC5nYWxsZXJ5IGVsZW1lbnQgaW4gQ0tFZGl0b3Igc291cmNlOlxuICAgLmdhbGxlcnktLXBvcnRyYWl0ICDihpIgdGFsbC9waG9uZSBzaG90cyAoaGVhZHNob3RzLCBwb3J0cmFpdHMpXG4gICAuZ2FsbGVyeS0tc3F1YXJlICAgIOKGkiBzcXVhcmUgdGh1bWJuYWlsc1xuICAgLmdhbGxlcnktLW5hdHVyYWwgICDihpIgZWFjaCBpbWFnZSBzaG93cyBhdCBpdHMgb3duIG5hdHVyYWwgcHJvcG9ydGlvbnMgKG1hc29ucnkgY29sdW1ucykgKi9cbi5nYWxsZXJ5LS1wb3J0cmFpdCAuZ2FsbGVyeS1pdGVtIHtcblx0YXNwZWN0LXJhdGlvOiAzLzQ7XG59XG5cbi5nYWxsZXJ5LS1zcXVhcmUgLmdhbGxlcnktaXRlbSB7XG5cdGFzcGVjdC1yYXRpbzogMTtcbn1cblxuLmdhbGxlcnktLW5hdHVyYWwge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Y29sdW1uczogMztcblx0Y29sdW1uLWdhcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5nYWxsZXJ5LS1uYXR1cmFsIC5nYWxsZXJ5LWl0ZW0ge1xuXHRhc3BlY3QtcmF0aW86IHVuc2V0O1xuXHRicmVhay1pbnNpZGU6IGF2b2lkO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmdhbGxlcnktLW5hdHVyYWwgLmdhbGxlcnktaXRlbSBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiBhdXRvO1xuXHRvYmplY3QtZml0OiB1bnNldDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC5nYWxsZXJ5LS1uYXR1cmFsIHtcblx0XHRjb2x1bW5zOiAyO1xuXHR9XG59XG4vKiBMaWdodGJveCBvdmVybGF5ICovXG4ubGlnaHRib3gge1xuXHRwb3NpdGlvbjogZml4ZWQ7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDEwLCAyMCwgMC45Mik7XG5cdHotaW5kZXg6IDExMDA7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRvcGFjaXR5OiAwO1xuXHR2aXNpYmlsaXR5OiBoaWRkZW47XG5cdHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLmxpZ2h0Ym94Lm9wZW4ge1xuXHRvcGFjaXR5OiAxO1xuXHR2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuXG4ubGlnaHRib3gtaW1nIHtcblx0bWF4LXdpZHRoOiA5MHZ3O1xuXHRtYXgtaGVpZ2h0OiA4NXZoO1xuXHRvYmplY3QtZml0OiBjb250YWluO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRib3gtc2hhZG93OiAwIDIwcHggNjBweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG5cbi5saWdodGJveC1jbG9zZSxcbi5saWdodGJveC1uYXYge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuXHRib3JkZXI6IG5vbmU7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0d2lkdGg6IDQ0cHg7XG5cdGhlaWdodDogNDRweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5saWdodGJveC1jbG9zZSB7XG5cdHRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdHJpZ2h0OiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmxpZ2h0Ym94LXByZXYge1xuXHR0b3A6IDUwJTtcblx0bGVmdDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5saWdodGJveC1uZXh0IHtcblx0dG9wOiA1MCU7XG5cdHJpZ2h0OiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLyog4pSA4pSA4pSAIFZpZGVvIGVtYmVkcyDilIDilIDilIAgKi9cbi52aWRlbyB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0YmFja2dyb3VuZDogIzAwMDtcblx0YWxpZ24tc2VsZjogc3RhcnQ7XG5cdGFzcGVjdC1yYXRpbzogMTYvOTtcbn1cblxuLnZpZGVvIGlmcmFtZSxcbi52aWRlbyB2aWRlbyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRib3JkZXI6IG5vbmU7XG59XG5cbi8qIDE2OjkgcmVzcG9uc2l2ZSB3cmFwcGVyICovXG4udmlkZW8tcmVzcG9uc2l2ZSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xufVxuXG4udmlkZW8tcmVzcG9uc2l2ZSBpZnJhbWUsXG4udmlkZW8tcmVzcG9uc2l2ZSB2aWRlbyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRib3JkZXI6IG5vbmU7XG59XG5cbi8qIFBvc3RlciB0aHVtYm5haWwgKyBwbGF5IGJ1dHRvbiAqL1xuLnZpZGVvLXBvc3RlciB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4udmlkZW8tcG9zdGVyIGltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRkaXNwbGF5OiBibG9jaztcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcbn1cblxuLnZpZGVvLXBsYXkge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogNTAlO1xuXHRsZWZ0OiA1MCU7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXHR3aWR0aDogNzJweDtcblx0aGVpZ2h0OiA3MnB4O1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgNTEsIDEwMiwgMC44NSk7XG5cdGJvcmRlcjogM3B4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi8qIENTUyB0cmlhbmdsZSBwbGF5IGljb24gKi9cbi52aWRlby1wbGF5OjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdGJvcmRlci13aWR0aDogMTJweCAwIDEycHggMjJweDtcblx0Ym9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB2YXIoLS1hdS13aGl0ZSk7XG5cdG1hcmdpbi1sZWZ0OiA0cHg7XG59XG5cbi52aWRlby1wb3N0ZXI6aG92ZXIgLnZpZGVvLXBsYXkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMS4xKTtcbn1cblxuLnZpZGVvLWNhcHRpb24ge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICB0ZWFtLmNzcyAgwrcgIHN0YWZmIC8gXCJtZWV0IHRoZSB0ZWFtXCIgZ3JpZCAgKGRlcHRzdGFmZmluZGV4LmR0KVxuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzc1xuICAgQSByZXNwb25zaXZlIGdyaWQgb2YgcGVvcGxlIOKAlCBwb3J0cmFpdCBwaG90bywgbmFtZSwgcm9sZSwgY29udGFjdC5cbiAgIFBob3RvcyBsZWFkICh0aGV5IGdldCB0aGUgc3BhY2UpOyB0aGUgb2xkIFBob3RvL05hbWUvQ29udGFjdCB0YWJsZSBpcyBnb25lLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4udGVhbSB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS0xMCkgdmFyKC0tc3BhY2UtNik7XG59XG5cbi50ZWFtLXBob3RvIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLnRlYW0tcGhvdG8gaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGFzcGVjdC1yYXRpbzogMy80O1xuXHQtby1vYmplY3QtZml0OiBjb3Zlcjtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi50ZWFtLXBob3RvOmhvdmVyIGltZyB7XG5cdHRyYW5zZm9ybTogc2NhbGUoMS4wNCk7XG59XG5cbi50ZWFtLW5hbWUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi50ZWFtLW5hbWUgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4udGVhbS1uYW1lIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi50ZWFtLXJvbGUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bGluZS1oZWlnaHQ6IDEuNDtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMSk7XG59XG5cbi50ZWFtLWNvbnRhY3Qge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTMpIDAgMDtcblx0cGFkZGluZzogMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEpO1xufVxuXG4udGVhbS1jb250YWN0IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnRlYW0tY29udGFjdCBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4udGVhbS1jb250YWN0IC50ZWFtLWFwcHQge1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGluZGl2aWR1YWwgc3RhZmYgcHJvZmlsZSAgKGRlcHRzdGFmZml0ZW0uZHQpIOKAlCByZW5kZXJzIGluc2lkZSAucGFnZS1tYWluLlxuICAgRk9VUiBzZWxlY3RhYmxlIGxheW91dHMsIGNob3NlbiBwZXIgc2VjdGlvbiAoaW5kZXggQ1QpIG9yIHBlciBwZXJzb25cbiAgIChpdGVtIENUKTogLnN0YWZmLS1mZWF0dXJlIMK3IC5zdGFmZi0tY2FyZCDCtyAuc3RhZmYtLWNlbnRlcmVkIMK3IC5zdGFmZi0tc3BsaXQuXG4gICBTaGFyZWQgcGllY2VzIGZpcnN0LCB0aGVuIHBlci1sYXlvdXQgYmxvY2tzLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiDilIDilIDilIAgc2hhcmVkOiBwb3J0cmFpdCwgbmFtZSwgcm9sZSwgZmFjdHMsIGxpbmtzLCBjb250YWN0IGNoaXBzLCBib2R5IOKUgOKUgOKUgCAqL1xuLnN0YWZmLXBvcnRyYWl0IGltZyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLnBhZ2UtbWFpbiBoMS5zdGFmZi1uYW1lIHtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nLWJvdHRvbTogMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTN4bCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjA1O1xuXHRsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4ucGFnZS1tYWluIGgxLnN0YWZmLW5hbWU6OmFmdGVyIHtcblx0ZGlzcGxheTogbm9uZTtcbn0gLyogbm8gcGFnZS1oZWFkZXIgZ29sZCBydWxlIGhlcmUgKi9cbi5wYWdlLW1haW4gLnN0YWZmLXJvbGUge1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTIpIDAgMDtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0bGluZS1oZWlnaHQ6IDEuMzU7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLnBhZ2UtbWFpbiAuc3RhZmYtZmFjdHMge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcbn1cblxuLnN0YWZmLWZhY3RzIGxpIHtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLnN0YWZmLWZhY3RzIGxpID4gc3BhbjpsYXN0LWNoaWxkIHtcblx0bWluLXdpZHRoOiAwO1xuXHRvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xufVxuXG4uc3RhZmYtZmFjdHMgLmZhY3QtbGFiZWwge1xuXHRmbGV4OiAwIDAgNC41cmVtO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdHBhZGRpbmctdG9wOiAwLjI1ZW07XG59XG5cbi5zdGFmZi1mYWN0cyBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5zdGFmZi1mYWN0cyBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4ucGFnZS1tYWluIC5zdGFmZi1saW5rcyB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgMCAwO1xuXHRwYWRkaW5nOiAwO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4uc3RhZmYtbGlua3MgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLnN0YWZmLWxpbmtzIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zdGFmZi1saW5rcyBpIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRmb250LXNpemU6IDAuODVlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiBjb250YWN0IGNoaXBzL3BpbGxzIChmZWF0dXJlICsgY2VudGVyZWQpICovXG4uc3RhZmYtY29udGFjdCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLnN0YWZmLWNvbnRhY3QgYSB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTQpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uc3RhZmYtY29udGFjdCBzdmcge1xuXHR3aWR0aDogMTVweDtcblx0aGVpZ2h0OiAxNXB4O1xuXHRmaWxsOiBub25lO1xuXHRzdHJva2Utd2lkdGg6IDEuODtcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIGFwcG9pbnRtZW50IGJ1dHRvbiAoY2FyZCArIHNwbGl0IHJldXNlIC5idG4pICovXG4uc3RhZmYtYXBwdCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4vKiBzaGFyZWQgcHJvc2UgYm9keSDigJQgZ29sZCBQbGV4LU1vbm8gZXllYnJvd3Mgb24gdGhlIHNlY3Rpb24gaGVhZGluZ3MgKi9cbi5zdGFmZi1ib2R5IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMTApO1xuXHRvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xufVxuXG4ucGFnZS1tYWluIC5zdGFmZi1ib2R5IGgyIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjE2ZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtOCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xufVxuXG4ucGFnZS1tYWluIC5zdGFmZi1ib2R5ID4gaDI6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4uc3RhZmYtYm9keSBwIHtcblx0bGluZS1oZWlnaHQ6IDEuNzI7XG59XG5cbi8qIOKUgOKUgOKUgCBBIMK3IEVkaXRvcmlhbCBGZWF0dXJlIOKAlCBuYXZ5IGhlcm8gYmFuZCwgZ29sZC1mcmFtZWQgcG9ydHJhaXQg4pSA4pSA4pSAICovXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWhlcm8ge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1hdS1uYXZ5KSwgdmFyKC0tYXUtbmF2eS1kZWVwKSk7XG5cdGNvbG9yOiAjZmZmO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWhlcm86OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0cmlnaHQ6IC04MHB4O1xuXHR0b3A6IC04MHB4O1xuXHR3aWR0aDogMjYwcHg7XG5cdGhlaWdodDogMjYwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0YmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuMTQpLCB0cmFuc3BhcmVudCA2OCUpO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWhlcm8taW5uZXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTgwcHggMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLXBvcnRyYWl0IHtcblx0d2lkdGg6IDE4MHB4O1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLXBvcnRyYWl0IGltZyB7XG5cdGFzcGVjdC1yYXRpbzogNC81O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRib3JkZXI6IDNweCBzb2xpZCByZ2JhKDIzMiwgMTg0LCA3NSwgMC44NSk7XG5cdGJveC1zaGFkb3c6IDAgMTRweCAzNHB4IHJnYmEoMCwgMCwgMCwgMC40KTtcbn1cblxuLnBhZ2UtbWFpbiAuc3RhZmYtLWZlYXR1cmUgaDEuc3RhZmYtbmFtZSB7XG5cdGNvbG9yOiAjZmZmO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtNHhsKTtcblx0bGluZS1oZWlnaHQ6IDEuMDI7XG59XG5cbi5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtcm9sZSB7XG5cdGNvbG9yOiAjZTdkZGM5O1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWNvbnRhY3Qge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IGEge1xuXHRjb2xvcjogI2ZmZjtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA5KTtcblx0Ym9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IGE6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWNvbnRhY3Qgc3ZnIHtcblx0c3Ryb2tlOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IGEuaXMtcHJpbWFyeSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IGEuaXMtcHJpbWFyeSBzdmcge1xuXHRzdHJva2U6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtbGlua3Mge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1ib2R5IHtcblx0bWF4LXdpZHRoOiA3MGNoO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHtcblx0LnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1oZXJvLWlubmVyIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0XHRqdXN0aWZ5LWl0ZW1zOiBzdGFydDtcblx0fVxufVxuLyog4pSA4pSA4pSAIEIgwrcgQ29udGFjdCBDYXJkIFJhaWwg4oCUIHN0aWNreSBjcmVhbSBjYXJkICsgc2Nyb2xsaW5nIGJpbyDilIDilIDilIAgKi9cbi5zdGFmZi0tY2FyZCAuc3RhZmYtY29scyB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMjgwcHggMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpO1xuXHRhbGlnbi1pdGVtczogc3RhcnQ7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1jYXJkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG5cdHBvc2l0aW9uOiBzdGlja3k7XG5cdHRvcDogY2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLXNwYWNlLTMpKTtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1wb3J0cmFpdCBpbWcge1xuXHRhc3BlY3QtcmF0aW86IDQvNTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5wYWdlLW1haW4gLnN0YWZmLS1jYXJkIGgxLnN0YWZmLW5hbWUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtMnhsKTtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1yb2xlIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1mYWN0cyB7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbi5zdGFmZi0tY2FyZCAuZmFjdC1sYWJlbCB7XG5cdGZsZXg6IDAgMCAzLjVyZW07XG59XG5cbi5zdGFmZi0tY2FyZCAuc3RhZmYtYXBwdCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdHdpZHRoOiAxMDAlO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1ib2R5IHtcblx0bWFyZ2luLXRvcDogMDtcblx0bWluLXdpZHRoOiAwO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzIwcHgpIHtcblx0LnN0YWZmLS1jYXJkIC5zdGFmZi1jb2xzIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxuXHQuc3RhZmYtLWNhcmQgLnN0YWZmLWNhcmQge1xuXHRcdHBvc2l0aW9uOiBzdGF0aWM7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBDIMK3IENlbnRlcmVkIFBvcnRyYWl0IOKAlCBzeW1tZXRyaWNhbCwgZ29sZCBjb3JuZXIgKyBmbG91cmlzaCDilIDilIDilIAgKi9cbi5zdGFmZi0tY2VudGVyZWQge1xuXHRtYXgtd2lkdGg6IDc2MHB4O1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLXBvcnRyYWl0IHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR3aWR0aDogMjEwcHg7XG5cdG1hcmdpbjogMCBhdXRvIHZhcigtLXNwYWNlLTUpO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1wb3J0cmFpdCBpbWcge1xuXHRhc3BlY3QtcmF0aW86IDQvNTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbn1cblxuLnN0YWZmLS1jZW50ZXJlZCAuc3RhZmYtcG9ydHJhaXQ6OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRyaWdodDogLTEycHg7XG5cdGJvdHRvbTogLTEycHg7XG5cdHdpZHRoOiA2NHB4O1xuXHRoZWlnaHQ6IDY0cHg7XG5cdGJvcmRlci1yaWdodDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItYm90dG9tOiAzcHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1yYWRpdXMtbGcpIDA7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLXJ1bGUge1xuXHR3aWR0aDogNDRweDtcblx0aGVpZ2h0OiAzcHg7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgYXV0bztcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IDJweDtcbn1cblxuLnN0YWZmLS1jZW50ZXJlZCAuc3RhZmYtcm9sZSB7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1jb250YWN0IHtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1jb250YWN0IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNmMGUyYzQ7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLWNvbnRhY3QgYTpob3ZlciB7XG5cdGJhY2tncm91bmQ6ICNmYmVlY2Y7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLWNvbnRhY3Qgc3ZnIHtcblx0c3Ryb2tlOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnN0YWZmLS1jZW50ZXJlZCAuc3RhZmYtY29udGFjdCBhLmlzLXByaW1hcnkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6ICNmZmY7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLWNvbnRhY3QgYS5pcy1wcmltYXJ5IHN2ZyB7XG5cdHN0cm9rZTogdmFyKC0tYXUtZ29sZC1saWdodCk7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLWJvZHkge1xuXHRtYXgtd2lkdGg6IDYyY2g7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtOCkgYXV0byAwO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtOCk7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi8qIOKUgOKUgOKUgCBEIMK3IFNwbGl0IEZlYXR1cmUg4oCUIGZ1bGwtaGVpZ2h0IHBvcnRyYWl0ICsgY3JlYW0gcGFuZWwg4pSA4pSA4pSAICovXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi10b3Age1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQyJSAxZnI7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5zdGFmZi0tc3BsaXQgLnN0YWZmLXBvcnRyYWl0IHtcblx0aGVpZ2h0OiAxMDAlO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1wb3J0cmFpdCBpbWcge1xuXHRoZWlnaHQ6IDEwMCU7XG5cdG1pbi1oZWlnaHQ6IDM2MHB4O1xuXHRib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1wYW5lbCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtOCk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ucGFnZS1tYWluIC5zdGFmZi0tc3BsaXQgaDEuc3RhZmYtbmFtZSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0zeGwpO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1yb2xlIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1mYWN0cyB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1hcHB0IHtcblx0YWxpZ24tc2VsZjogc3RhcnQ7XG59XG5cbi5zdGFmZi0tc3BsaXQgLnN0YWZmLWJvZHkge1xuXHRtYXgtd2lkdGg6IDc0Y2g7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2NDBweCkge1xuXHQuc3RhZmYtLXNwbGl0IC5zdGFmZi10b3Age1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHR9XG5cdC5zdGFmZi0tc3BsaXQgLnN0YWZmLXBvcnRyYWl0IGltZyB7XG5cdFx0bWluLWhlaWdodDogMzAwcHg7XG5cdH1cbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYmlvIGRpcmVjdG9yeSDigJQgcG9ydHJhaXQgZ3JpZCAgKGNvbXBvbmVudHMvYmlvLnR0KVxuICAgUGhvdG8tZm9yd2FyZCBwZW9wbGUgY2FyZHM6IGEgcG9ydHJhaXQgaGVhZHNob3Qgb24gdG9wLCB0aGVuIG5hbWUgK1xuICAgYmx1cmIuIEF1dG8tZmlsbHMgYWNyb3NzIHRoZSBzZWN0aW9uIGFuZCByZWZsb3dzIGRvd24gKOKApuKGkjPihpIy4oaSMSkgYXMgdGhlXG4gICB2aWV3cG9ydCBuYXJyb3dzIOKAlCBubyBicmVha3BvaW50cyBuZWVkZWQuIFJlYWRzIGFzIGEgZmFjdWx0eSBkaXJlY3RvcnksXG4gICBkaXN0aW5jdCBmcm9tIHRoZSBjb2x1bW5zIGNhcmQgZ3JpZCBhbmQgdGhlIE1lZXQtdGhlLVRlYW0gcG9ydHJhaXQgZ3JpZC5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyogc3RhbmRhbG9uZSByaWNoLXRleHQgaW50cm8gYWJvdmUgdGhlIGRpcmVjdG9yeSAodGhlIHNlY3Rpb24ncyBcInRleHRcIiBhcmVhKS5cbiAgIEJhbmQtYXdhcmUgc28gaXQgcmVhZHMgb24gZGFyayBiYW5kczsgYSByZWFkYWJsZSBtZWFzdXJlIGZvciBwbGFpbiBjb3B5LiAqL1xuLmJpby1pbnRybyB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoLXRleHQpO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bGluZS1oZWlnaHQ6IDEuNztcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMTApO1xufVxuXG4uYmlvLWludHJvID4gOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLmJpby1pbnRybyA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNikge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi5iaW8taW50cm8gYSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eS1saWdodCkpO1xufVxuXG4uYmlvLWludHJvIHAgKyBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5iaW8tZGlyZWN0b3J5IHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTkwcHgsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpIHZhcigtLXNwYWNlLTYpO1xufVxuXG4uYmlvLWVudHJ5IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLmJpby1waG90byBpbWcge1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IDEwMCU7XG5cdGFzcGVjdC1yYXRpbzogNC81O1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4uYmlvLW5hbWUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLmJpby1ibHVyYiB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0bGluZS1oZWlnaHQ6IDEuNjtcblx0b3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbn1cblxuLmJpby1ibHVyYiBwICsgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4vKiBzaW5nbGUtcGVyc29uIGJpbyDigJQgaG9yaXpvbnRhbCBjYXJkIGluc3RlYWQgb2YgdGhlIHBvcnRyYWl0LWdyaWQgY29sdW1uICovXG4uYmlvLWVudHJ5Om9ubHktY2hpbGQge1xuXHRncmlkLWNvbHVtbjogMS8tMTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcblx0bWF4LXdpZHRoOiA2NDBweDtcbn1cblxuLmJpby1lbnRyeTpvbmx5LWNoaWxkIC5iaW8tcGhvdG8gaW1nIHtcblx0YXNwZWN0LXJhdGlvOiAzLzQ7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2MDFweCkge1xuXHQuYmlvLWVudHJ5Om9ubHktY2hpbGQge1xuXHRcdGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0fVxuXHQuYmlvLWVudHJ5Om9ubHktY2hpbGQgLmJpby1waG90byB7XG5cdFx0ZmxleDogMCAwIDIwMHB4O1xuXHR9XG5cdC5iaW8tZW50cnk6b25seS1jaGlsZCAuYmlvLWRldGFpbCB7XG5cdFx0bWluLXdpZHRoOiAwO1xuXHR9XG5cdC5iaW8tZW50cnk6b25seS1jaGlsZCAuYmlvLW5hbWUge1xuXHRcdG1hcmdpbi10b3A6IDA7XG5cdH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHQuYmlvLWVudHJ5Om9ubHktY2hpbGQgLmJpby1waG90byB7XG5cdFx0bWF4LXdpZHRoOiAyMDBweDtcblx0fVxufVxuLyogZGVjb3JhdGl2ZSBpbWFnZS1vbmx5IHJvd3Mgc3BhbiB0aGUgd2hvbGUgZ3JpZCB3aWR0aCAqL1xuLmJpby1maWd1cmUge1xuXHRncmlkLWNvbHVtbjogMS8tMTtcbn1cblxuLmJpby1maWd1cmUgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgZGVwdC5jc3MgIMK3ICBkZXBhcnRtZW50IHNlY3Rpb24tcGFnZSB0ZW1wbGF0ZSAoZGVwdF9tYWluLndyYXApXG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzLCBsYXlvdXQuY3NzICguc2VjdGlvbiBiYW5kcylcblxuICAgQSBkZXBhcnRtZW50IHZhcmlhbnQgb2YgdGhlIGhvbWVwYWdlLWFkdmFuY2VkIGRpc3BsYXk6IGEgc3RpY2t5IGRhcmtcbiAgIG5hdnkgcmFpbCAoZGVwYXJ0bWVudCBpZGVudGl0eSArIHNlY3Rpb24ganVtcC1uYXYgKyBDVEFzKSBiZXNpZGUgdGhlXG4gICBub3JtYWwgcGFnZS5kdCBzZWN0aW9uIHN0YWNrLiBTYW1lIHNlY3Rpb25zLCBzYW1lIGNvbnRlbnQgdHlwZXMg4oCUXG4gICBvbmx5IHRoZSBzdXJyb3VuZCBkaWZmZXJzLlxuXG4gICBPTkUgcmFpbCwgdHdvIHN0YXRlcyAodGhlIGRlbW8ncyBzZXBhcmF0ZSBzaWRlYmFyICsgaWNvbi1zdHJpcCBhcmVcbiAgIG1lcmdlZCBzbyB0aGVyZSdzIGEgc2luZ2xlIHNldCBvZiBtYXJrdXAgdG8gbWFpbnRhaW4pOlxuICAgICDiiaUxMDgwICAgZnVsbCByYWlsLCBsYWJlbHMgdmlzaWJsZVxuICAgICA8MTA4MCAgIGNvbGxhcHNlcyB0byBhIHNsaW0gZG90IHN0cmlwOyB0aGUgdG9nZ2xlIG9wZW5zIGl0IGFzIGFuXG4gICAgICAgICAgICAgb3ZlcmxheSBwYW5lbCBvdmVyIGEgYmFja2Ryb3BcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuOnJvb3Qge1xuXHQtLWRlcHQtcmFpbC13OiAyNTBweDsgLyogZXhwYW5kZWQgcmFpbCAqL1xuXHQtLWRlcHQtc3RyaXAtdzogNjBweDsgLyogY29sbGFwc2VkIGRvdCBzdHJpcCAqL1xufVxuXG4vKiDilIDilIDilIAgTEFZT1VUIOKUgOKUgOKUgCAqL1xuLmRlcHQtbGF5b3V0IHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5cbi5kZXB0LW1haW4ge1xuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi8qIFNlY3Rpb25zIGluc2lkZSB0aGUgZGVwdCBjb2x1bW4ga2VlcCB0aGUgYmFuZCBzeXN0ZW0gYnV0IHNpdCBpbiBhXG4gICBuYXJyb3dlciBtZWFzdXJlLCBzbyB0aGUgaW5uZXIgbWF4LXdpZHRoIHJhcmVseSBiaW5kcyDigJQgcHVsbCB0aGVcbiAgIGhvcml6b250YWwgcGFkZGluZyBpbiBhIGxpdHRsZSBzbyBjb250ZW50IGlzbid0IGNyb3dkZWQgdG8gdGhlIHJhaWwuICovXG4uZGVwdC1tYWluIC5zZWN0aW9uIHtcblx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4uZGVwdC1tYWluIC5zZWN0aW9uLWlubmVyIHtcblx0bWF4LXdpZHRoOiAxMDAwcHg7XG5cdG1hcmdpbi1pbmxpbmU6IDA7XG59XG5cbi8qIOKUgOKUgOKUgCBSQUlMIOKUgOKUgOKUgCAqL1xuLmRlcHQtcmFpbCB7XG5cdHdpZHRoOiB2YXIoLS1kZXB0LXJhaWwtdyk7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRwb3NpdGlvbjogc3RpY2t5O1xuXHR0b3A6IHZhcigtLWhlYWRlci1oZWlnaHQpO1xuXHRoZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDcpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHR6LWluZGV4OiA2MDtcblx0dHJhbnNpdGlvbjogd2lkdGggdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uZGVwdC1yYWlsLXNjcm9sbCB7XG5cdGZsZXg6IDE7XG5cdG92ZXJmbG93LXk6IGF1dG87XG5cdG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIDAgdmFyKC0tc3BhY2UtNCk7XG5cdHNjcm9sbGJhci13aWR0aDogdGhpbjtcblx0c2Nyb2xsYmFyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikgdHJhbnNwYXJlbnQ7XG59XG5cbi5kZXB0LXJhaWwtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7XG5cdHdpZHRoOiA2cHg7XG59XG5cbi5kZXB0LXJhaWwtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcblx0Ym9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4vKiBkZXBhcnRtZW50IGlkZW50aXR5ICovXG4uZGVwdC1pZCB7XG5cdHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5kZXB0LWlkLWV5ZSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMTZlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0xKTtcbn1cblxuLmRlcHQtaWQtbmFtZSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDEuMjU7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi8qIGp1bXAtbmF2ICovXG4uZGVwdC1uYXYtdGl0bGUge1xuXHRwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTMpO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XG59XG5cbi5kZXB0LWxpbmsge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS01KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0bGluZS1oZWlnaHQ6IDEuMzU7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5kZXB0LWxpbms6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4uZGVwdC1saW5rLmlzLWN1cnJlbnQge1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG59XG5cbi8qIHdheWZpbmRpbmcgZG90IOKAlCB0aGUgZGVtbyB1c2VkIHNpeCBodWVzOyBrZXB0IG9uLXBhbGV0dGUgaGVyZSwgd2l0aCB0aGVcbiAgIGFjdGl2ZSBzdGF0ZSAoZ29sZCwgZmlsbGVkKSBjYXJyeWluZyB0aGUgc2lnbmFsIGluc3RlYWQgb2YgY29sb3VyIGNvdW50ICovXG4uZGVwdC1kb3Qge1xuXHRmbGV4LXNocmluazogMDtcblx0d2lkdGg6IDlweDtcblx0aGVpZ2h0OiA5cHg7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI4KTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCksIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5kZXB0LWxpbmsuaXMtY3VycmVudCAuZGVwdC1kb3Qge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0dHJhbnNmb3JtOiBzY2FsZSgxLjI1KTtcbn1cblxuLmRlcHQtbGluay1sYWJlbCB7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLyogcmFpbCBmb290ZXIg4oCUIENUQXMgKyBkZXB0IG1hcmsgKi9cbi5kZXB0LXJhaWwtYm90dG9tIHtcblx0ZmxleC1zaHJpbms6IDA7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTUpO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmRlcHQtY3RhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Ym9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5kZXB0LWN0YS1wcmltYXJ5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uZGVwdC1jdGEtcHJpbWFyeTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLmRlcHQtY3RhLWdob3N0IHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTtcbn1cblxuLmRlcHQtY3RhLWdob3N0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogaW5zdGl0dXRpb25hbCBsb2NrdXAgYXQgdGhlIGZvb3Qgb2YgdGhlIHJhaWwgKi9cbi5kZXB0LW1hcmsge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0b3BhY2l0eTogMC43NTtcbn1cblxuLmRlcHQtbWFyayBpbWcge1xuXHRoZWlnaHQ6IDI2cHg7XG5cdHdpZHRoOiBhdXRvO1xufVxuXG4uZGVwdC1tYXJrIGE6aG92ZXIge1xuXHRvcGFjaXR5OiAxO1xufVxuXG4vKiB0b2dnbGUg4oCUIGhpZGRlbiBvbiBkZXNrdG9wLCBiZWNvbWVzIHRoZSBzdHJpcCBjb250cm9sIGJlbG93IDEwODAgKi9cbi5kZXB0LXJhaWwtdG9nZ2xlIHtcblx0ZGlzcGxheTogbm9uZTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0d2lkdGg6IDEwMCU7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5kZXB0LWhhbSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRnYXA6IDRweDtcblx0d2lkdGg6IDE4cHg7XG5cdGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uZGVwdC1oYW0gc3BhbiB7XG5cdGhlaWdodDogMnB4O1xuXHRiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG5cdGJvcmRlci1yYWRpdXM6IDJweDtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLmRlcHQtcmFpbC10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSAuZGVwdC1oYW0gc3BhbjpudGgtY2hpbGQoMSkge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNnB4KSByb3RhdGUoNDVkZWcpO1xufVxuXG4uZGVwdC1yYWlsLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdIC5kZXB0LWhhbSBzcGFuOm50aC1jaGlsZCgyKSB7XG5cdG9wYWNpdHk6IDA7XG59XG5cbi5kZXB0LXJhaWwtdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLmRlcHQtaGFtIHNwYW46bnRoLWNoaWxkKDMpIHtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpIHJvdGF0ZSgtNDVkZWcpO1xufVxuXG4uZGVwdC10b2dnbGUtbGFiZWwge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLmRlcHQtYmFja2Ryb3Age1xuXHRkaXNwbGF5OiBub25lO1xuXHRwb3NpdGlvbjogZml4ZWQ7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDI2LCA1MSwgMC40NSk7XG5cdG9wYWNpdHk6IDA7XG5cdHZpc2liaWxpdHk6IGhpZGRlbjtcblx0dHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKSwgdmlzaWJpbGl0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcblx0ei1pbmRleDogNTU7XG59XG5cbmJvZHkuZGVwdC1yYWlsLW9wZW4gLmRlcHQtYmFja2Ryb3Age1xuXHRvcGFjaXR5OiAxO1xuXHR2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuXG4vKiDilIDilIDilIAgQ09MTEFQU0VEIFNUUklQICg8MTA4MCkg4pSA4pSA4pSAICovXG5AbWVkaWEgKG1heC13aWR0aDogMTA4MHB4KSB7XG5cdC5kZXB0LXJhaWwge1xuXHRcdHdpZHRoOiB2YXIoLS1kZXB0LXN0cmlwLXcpO1xuXHR9XG5cdC5kZXB0LXJhaWwtdG9nZ2xlIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHR9XG5cdC5kZXB0LWJhY2tkcm9wIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQvKiBzdHJpcCBzdGF0ZTogZG90cyBvbmx5ICovXG5cdC5kZXB0LXJhaWwgLmRlcHQtaWQsXG5cdC5kZXB0LXJhaWwgLmRlcHQtbmF2LXRpdGxlLFxuXHQuZGVwdC1yYWlsIC5kZXB0LXJhaWwtYm90dG9tLFxuXHQuZGVwdC1yYWlsIC5kZXB0LWxpbmstbGFiZWwsXG5cdC5kZXB0LXJhaWwgLmRlcHQtdG9nZ2xlLWxhYmVsIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cdC5kZXB0LWxpbmsge1xuXHRcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRcdHBhZGRpbmctaW5saW5lOiAwO1xuXHR9XG5cdC8qIGV4cGFuZGVkIG92ZXJsYXkgKi9cblx0LmRlcHQtcmFpbC5pcy1vcGVuIHtcblx0XHR3aWR0aDogdmFyKC0tZGVwdC1yYWlsLXcpO1xuXHRcdGJveC1zaGFkb3c6IDAgMTJweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7XG5cdH1cblx0LmRlcHQtcmFpbC5pcy1vcGVuIC5kZXB0LWlkLFxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtbmF2LXRpdGxlLFxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtcmFpbC1ib3R0b20sXG5cdC5kZXB0LXJhaWwuaXMtb3BlbiAuZGVwdC1saW5rLWxhYmVsLFxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtdG9nZ2xlLWxhYmVsIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtcmFpbC1ib3R0b20ge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdH1cblx0LmRlcHQtcmFpbC5pcy1vcGVuIC5kZXB0LWxpbmsge1xuXHRcdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtNSk7XG5cdH1cblx0LmRlcHQtbWFpbiAuc2VjdGlvbiB7XG5cdFx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTYpO1xuXHR9XG59XG4vKiBiZWxvdyB0aGUgc3RyaXAncyB1c2VmdWxuZXNzOiByYWlsIGdvZXMgaG9yaXpvbnRhbC1mcmVlLCBjb250ZW50IGxlYWRzICovXG4vKiBWZXJ5IG5hcnJvdzogdGhlIHJhaWwgU1RBWVMgYSB2ZXJ0aWNhbCBzaWRlIHN0cmlwIOKAlCBpdCBuZXZlciBiZWNvbWVzIGFcbiAgIGZ1bGwtd2lkdGggYmFyIGFjcm9zcyB0aGUgdG9wICh0aGF0J3MgaG93IHRoZSBkZW1vJ3MgaWNvbiBzdHJpcCBiZWhhdmVzLFxuICAgYW5kIGl0IGtlZXBzIHRoZSBwYWdlIG5hdiByZWFjaGFibGUgd2l0aG91dCBzY3JvbGxpbmcgYmFjayB1cCkuIE9ubHkgdGhlXG4gICBzdHJpcCB3aWR0aCBhbmQgdGhlIGNvbnRlbnQgZ3V0dGVycyB0aWdodGVuLiAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7XG5cdDpyb290IHtcblx0XHQtLWRlcHQtc3RyaXAtdzogNDhweDtcblx0fVxuXHQuZGVwdC1tYWluIC5zZWN0aW9uIHtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtNSk7XG5cdH1cblx0LmRlcHQtc3RhdHMsIC5kZXB0LWVucm9sbCB7XG5cdFx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTUpO1xuXHR9XG5cdC8qIHRoZSBleHBhbmRlZCBvdmVybGF5IGxlYXZlcyBhIHNsaXZlciBvZiBjb250ZW50ICsgYmFja2Ryb3AgdmlzaWJsZSAqL1xuXHQuZGVwdC1yYWlsLmlzLW9wZW4ge1xuXHRcdHdpZHRoOiBtaW4odmFyKC0tZGVwdC1yYWlsLXcpLCA3OHZ3KTtcblx0fVxuXHQuZGVwdC1saW5rIHtcblx0XHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS0zKTtcblx0fSAvKiBmaW5nZXItZnJpZW5kbHkgZG90cyAqL1xufVxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBzdGF0cyBiYW5kICAoY29tcG9uZW50cy9zdGF0cy50dCDCtyBjb250ZW50IHR5cGUgYHN0YXRzYClcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLnN0YXRzLWdyaWQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE4MHB4LCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnN0YXQge1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zdGF0LWljb24ge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdHdpZHRoOiAzcmVtO1xuXHRoZWlnaHQ6IDNyZW07XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtaWNvbi1iZywgdmFyKC0tYXUtZ29sZC1wYWxlKSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWljb24tZmcsIHZhcigtLWF1LWdvbGQpKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcbn1cblxuLnN0YXQtbnVtIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0zeGwpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsaW5lLWhlaWdodDogMTtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4uc3RhdC1sYWJlbCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyogb24gYSBkYXJrIGJhbmQgKi9cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgQ1RBIGJhciAgKGNvbXBvbmVudHMvY3RhLWJhci50dCDCtyBjb250ZW50IHR5cGUgYGN0YV9iYXJgKVxuICAgQSBzbGltIGZ1bGwtd2lkdGggYmFuZDogYSBtZXNzYWdlIGJlc2lkZSBhbiBhY3Rpb24gYnV0dG9uLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4uY3RhLWJhciB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTgpO1xufVxuXG4uY3RhLWJhci10ZXh0IHtcblx0ZmxleDogMSAxIDMyMHB4O1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0bGluZS1oZWlnaHQ6IDEuMztcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4uY3RhLWJhciAuYnRuIHtcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgVE9QIENIUk9NRSBCQU5EUyAoZGVwdF9tYWluLndyYXApIOKAlCBjb21wYWN0IHN0cmlwcyBiZXR3ZWVuIHRoZVxuICAgaGVybyBhbmQgdGhlIHJhaWwsIG1hdGNoaW5nIHRoZSBkZXBhcnRtZW50IGRlbW8uIFRoZXNlIGFyZSBOT1RcbiAgIC5zZWN0aW9uIGJhbmRzOiB0aGUgZGVtbydzIGFyZSBzbGltIChhIG5hdnkgc3RhdHMgc3RyaXAgYW5kIGEgZ29sZFxuICAgZW5yb2xtZW50IGJhciksIHdoZXJlIGEgZnVsbCAuc2VjdGlvbidzIDgwcHggcmh5dGhtIHJlYWRzIGZhciB0b29cbiAgIGhlYXZ5IGRpcmVjdGx5IHVuZGVyIHRoZSBoZXJvLlxuXG4gICBUaGV5IHJlLXNraW4gdGhlIHNoYXJlZCAuc3RhdCogLyBjdGEgcGllY2VzIHJhdGhlciB0aGFuIGR1cGxpY2F0aW5nXG4gICBtYXJrdXAsIHNvIGNvbXBvbmVudHMvc3RhdHMudHQga2VlcHMgaXRzIHJvb21pZXIgaW4tZmxvdyB0cmVhdG1lbnQuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIHN0YXRzIHN0cmlwIOKAlCBuYXZ5LCBsaWdodC1vbi1kYXJrLCBoYWlybGluZSBkaXZpZGVycyBiZXR3ZWVuIGNlbGxzICovXG4uZGVwdC1zdGF0cyB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1ndXR0ZXIpO1xufVxuXG4uZGVwdC1zdGF0cy1pbm5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcbn1cblxuLmRlcHQtc3RhdHMgLnN0YXRzLWdyaWQge1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7XG5cdGdhcDogMDtcbn1cblxuLmRlcHQtc3RhdHMgLnN0YXQge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS01KTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGVwdC1zdGF0cyAuc3RhdCArIC5zdGF0OjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IDA7XG5cdHRvcDogMTglO1xuXHRib3R0b206IDE4JTtcblx0d2lkdGg6IDFweDtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTtcbn1cblxuLyogYmFyZSBnb2xkIGdseXBoIOKAlCBubyBwYWxlIGNpcmNsZSBjaGlwIGF0IHRoaXMgc2l6ZSAqL1xuLmRlcHQtc3RhdHMgLnN0YXQtaWNvbiB7XG5cdHdpZHRoOiBhdXRvO1xuXHRoZWlnaHQ6IGF1dG87XG5cdG1hcmdpbjogMCBhdXRvIHZhcigtLXNwYWNlLTIpO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXItcmFkaXVzOiAwO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG59XG5cbi5kZXB0LXN0YXRzIC5zdGF0LW51bSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEpO1xufVxuXG4uZGVwdC1zdGF0cyAuc3RhdC1sYWJlbCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjU7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjBweCkge1xuXHQuZGVwdC1zdGF0cyAuc3RhdHMtZ3JpZCB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdH1cblx0LmRlcHQtc3RhdHMgLnN0YXQgKyAuc3RhdDo6YmVmb3JlIHtcblx0XHRsZWZ0OiAxOCU7XG5cdFx0cmlnaHQ6IDE4JTtcblx0XHR0b3A6IDA7XG5cdFx0Ym90dG9tOiBhdXRvO1xuXHRcdHdpZHRoOiBhdXRvO1xuXHRcdGhlaWdodDogMXB4O1xuXHR9XG59XG4vKiBlbnJvbG1lbnQgYmFyIOKAlCBzbGltIGdvbGQgc3RyaXAsIHNlcmlmIG1lc3NhZ2UgKyBkYXJrIGJ1dHRvbiAqL1xuLmRlcHQtZW5yb2xsIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLWd1dHRlcik7XG59XG5cbi5kZXB0LWVucm9sbC1pbm5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5kZXB0LWVucm9sbC10ZXh0IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjM1O1xufVxuXG4uZGVwdC1lbnJvbGwtdGV4dCBzbWFsbCB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Y29sb3I6IHJnYmEoMCwgMjYsIDUxLCAwLjcyKTtcblx0bWFyZ2luLXRvcDogMnB4O1xufVxuXG4uZGVwdC1lbnJvbGwgLmJ0biB7XG5cdGZsZXgtc2hyaW5rOiAwO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIHZhcmlhbnRzLmNzcyAgwrcgIHNlY3Rpb24gc3R5bGUgdmFyaWFudHNcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3MsIGxheW91dC5jc3MgKC5zZWN0aW9uIGJhbmRzICsgLS1iYW5kLSogdG9rZW5zKVxuXG4gICBBbHRlcm5hdGUgbG9va3MgZm9yIGV4aXN0aW5nIGNvbnRlbnQgdHlwZXMsIHNlbGVjdGVkIGJ5IGEgYGNvbC08bmFtZT5gXG4gICB0b2tlbiBpbiBhIHNlY3Rpb24ncyBjdXN0b21fY2xhc3MgYW5kIGRpc3BhdGNoZWQgYnkgdGhlIGNvbnRlbnQgdHlwZSdzXG4gICByZW5kZXJlciAoc2VlIGNvbXBvbmVudHMvY29sdW1ucy50dCDihpIgY29tcG9uZW50cy9jb2x1bW5zLyoudHQpLiBPbmVcbiAgIGNvbnRlbnQgdHlwZSArIG9uZSBDTVMgZm9ybSBkcml2ZXMgbWFueSBkaXNwbGF5czsgdGhpcyBmaWxlIGhvbGRzIHRoZWlyXG4gICBtYXJrdXAgc3R5bGluZy4gQWRkIGEgdmFyaWFudDogYSBjb21wb25lbnRzL2NvbHVtbnMvPG5hbWU+LnR0IHJlbmRlcmVyLFxuICAgYW4gZW50cnkgaW4gY29sdW1ucy50dCdzIHZhcmlhbnRfbWFwLCBhbmQgYSBibG9jayBoZXJlLlxuXG4gICBCYW5kIGFkYXB0YXRpb24gaXMgdmlhIHRoZSAtLWJhbmQtKiBDT05URVhUIFRPS0VOUyBsYXlvdXQuY3NzIHNldHMgb24gZGFya1xuICAgYmFuZHMg4oCUIHRoZXJlIGFyZSBOTyBwZXItYmFuZCBzZWxlY3RvciBsaXN0cyBoZXJlLiBUaGUgcnVsZSBvZiB0aHVtYjpcbiAgICAgwrcgY29udGVudCBzaXR0aW5nIG9uIGEgV0hJVEUgY2FyZCAocHJvZ3JhbXMpIGtlZXBzIGxpZ2h0LW1vZGUgY29sb3VycztcbiAgICAgICBvbmx5IHRoZSBjYXJkIGNocm9tZSAoYm9yZGVyIHdpZHRoLCBzaGFkb3cpIHJlYWRzIHRoZSBiYW5kIHRva2Vucy5cbiAgICAgwrcgY29udGVudCBkaXJlY3RseSBvbiB0aGUgYmFuZCwgb3Igb24gYSB0cmFuc2x1Y2VudCBjYXJkIChjYXJlZXJzLFxuICAgICAgIGludHJvLCBxdW90ZSwgcHJvZmlsZSkgcmVhZHMgdGhlIGJhbmQgdG9rZW5zIGZvciBpdHMgdGV4dCB0b28uXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIOKUgOKUgOKUgCBjb2wtcHJvZ3JhbXMgwrcgcHJvZ3JhbSBjYXJkcyAod2hpdGUgY2FyZDsgb25seSBjaHJvbWUgdHJhY2tzIHRoZSBiYW5kKSDilIDilIDilIBcbiAgIFR3byBtb2RlcyBmcm9tIG9uZSByZW5kZXJlcjogYSBQSE9UTyBjYXJkIChiYWRnZSBvdmVyIGltYWdlICsgd2hvbGUtY2FyZFxuICAgbGluaykgd2hlbiBhIHBob3RvIGlzIHVwbG9hZGVkLCBhbmQgYSBmbGF0IFRFWFQgY2FyZCAoZ29sZCB0b3AgcnVsZSkgd2hlblxuICAgaXQgaXNuJ3QuIGF1dG8tZml0IHNvIE4gaXRlbXMgZmlsbCB0aGUgcm93IHJhdGhlciB0aGFuIGxlYXZpbmcgZW1wdHkgdHJhY2tzLiAqL1xuLnByb2dyYW1zLWdyaWQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI2MHB4LCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnByb2dyYW0tY2FyZCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLXcsIDFweCkgc29saWQgdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0yMDApKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Ym94LXNoYWRvdzogdmFyKC0tYmFuZC1jYXJkLXNoYWRvdywgbm9uZSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0dHJhbnNpdGlvbjogYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCksIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5wcm9ncmFtLWNhcmQ6aG92ZXIge1xuXHRib3gtc2hhZG93OiB2YXIoLS1iYW5kLWNhcmQtc2hhZG93LWhvdmVyLCB2YXIoLS1zaGFkb3ctbWQpKTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG4vKiB0ZXh0IGNhcmQ6IGdvbGQgdG9wIHJ1bGUgKyBwYWRkZWQgYm9keSAobWVkaWEgY2FyZCBwYWRzIC5wcm9ncmFtLWJvZHkgaW5zdGVhZCkgKi9cbi5wcm9ncmFtLWNhcmQ6bm90KC5wcm9ncmFtLWNhcmQtLW1lZGlhKSB7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNik7XG59XG5cbi8qIHBob3RvIGhlYWRlciAqL1xuLnByb2dyYW0taW1nIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRhc3BlY3QtcmF0aW86IDQvMztcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4ucHJvZ3JhbS1pbWcgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ucHJvZ3JhbS1vdmVybGF5IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLCAyNiwgNTEsIDAuNCksIHRyYW5zcGFyZW50IDQ1JSk7XG59XG5cbi5wcm9ncmFtLWJhZGdlIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRsZWZ0OiB2YXIoLS1zcGFjZS00KTtcblx0Ym90dG9tOiB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjFlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDI2LCA1MSwgMC44Mik7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTMpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG59XG5cbi5wcm9ncmFtLWJvZHkge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRmbGV4OiAxO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnByb2dyYW0ta2lja2VyIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjFlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLnByb2dyYW0tbmFtZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG59XG5cbi5wcm9ncmFtLW5hbWUgYSB7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5wcm9ncmFtLW5hbWUgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLnByb2dyYW0tY2FyZC0tbWVkaWE6aG92ZXIgLnByb2dyYW0tbmFtZSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLnByb2dyYW0tZGVzYyB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bGluZS1oZWlnaHQ6IDEuNjtcblx0ZmxleDogMTtcbn1cblxuLnByb2dyYW0tbGluayB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnByb2dyYW0tbGluazpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogb3B0aW9uYWwgc2VjdGlvbi1oZWFkZXIgQ1RBIGJ1dHRvbiAobGVhZGluZyBoZWFkZXIgY2FyZCdzIGxpbmspICovXG4uc2VjdGlvbi1oZWFkLWN0YSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4vKiBtZWRpYS1jYXJkIENUQSDigJQgZ29sZCBtb25vIGN1ZSB3aXRoIGEgbnVkZ2luZyBjaGV2cm9uICovXG4ucHJvZ3JhbS1jdGEge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5wcm9ncmFtLWN0YSBzdmcge1xuXHR3aWR0aDogMTNweDtcblx0aGVpZ2h0OiAxM3B4O1xuXHRmaWxsOiBub25lO1xuXHRzdHJva2U6IGN1cnJlbnRDb2xvcjtcblx0c3Ryb2tlLXdpZHRoOiAyLjU7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5wcm9ncmFtLWNhcmQtLW1lZGlhOmhvdmVyIC5wcm9ncmFtLWN0YSBzdmcge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoM3B4KTtcbn1cblxuLyog4pSA4pSA4pSAIGNvbC1xdW90ZSDCtyBpbXBhY3QgcHVsbC1xdW90ZSAob24gdGhlIGJhbmQpIOKUgOKUgOKUgCAqL1xuLmltcGFjdC1xdW90ZSB7XG5cdG1heC13aWR0aDogNzYwcHg7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmltcGFjdC1xdW90ZSBibG9ja3F1b3RlIHtcblx0Ym9yZGVyOiAwO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdGZvbnQtc2l6ZTogY2xhbXAodmFyKC0tdGV4dC14bCksIDMuNXZ3LCB2YXIoLS10ZXh0LTN4bCkpO1xuXHRsaW5lLWhlaWdodDogMS4zNTtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4uaW1wYWN0LXF1b3RlIGJsb2NrcXVvdGUgcCB7XG5cdG1hcmdpbjogMDtcbn1cblxuLmltcGFjdC1xdW90ZSBibG9ja3F1b3RlIHAgKyBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5pbXBhY3QtcXVvdGUgYmxvY2txdW90ZTo6YmVmb3JlIHtcblx0Y29udGVudDogXCLigJxcIjtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtc2l6ZTogM3JlbTtcblx0bGluZS1oZWlnaHQ6IDAuNjtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmltcGFjdC1xdW90ZSBmaWdjYXB0aW9uIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xufVxuXG4uaW1wYWN0LWNpdGUtbmFtZSB7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLmltcGFjdC1jaXRlLXJvbGUge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdG1hcmdpbi10b3A6IDJweDtcbn1cblxuLyog4pSA4pSA4pSAIGNvbC1pbnRybyDCtyBzcGxpdCBjb3B5ICsgaW1hZ2UgY29sbGFnZSAob24gdGhlIGJhbmQpIOKUgOKUgOKUgCAqL1xuLmludHJvLXNwbGl0IHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEwKTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmludHJvLXNwbGl0ID4gLmludHJvLWNvcHk6b25seS1jaGlsZCB7XG5cdGdyaWQtY29sdW1uOiAxLy0xO1xufSAvKiBubyBpbWFnZXMg4oaSIGNvcHkgc3BhbnMgZnVsbCB3aWR0aCAqL1xuLmludHJvLXRpdGxlIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogY2xhbXAodmFyKC0tdGV4dC0yeGwpLCAzLjJ2dywgdmFyKC0tdGV4dC0zeGwpKTtcblx0bGluZS1oZWlnaHQ6IDEuMTU7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpO1xuXHRmb250LXdlaWdodDogNDAwO1xufVxuXG4vKiBtdXRlZCB3aGl0ZSBleWVicm93IHNvIHRoZSBnb2xkIGhlYWRsaW5lIGxlYWRzIChvdmVycmlkZXMgdGhlIGJhbmQncyBnb2xkKSAqL1xuLmludHJvLWNvcHkgLnNlY3Rpb24tbGFiZWwge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbn1cblxuLmludHJvLWJvZHkge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjg7XG59XG5cbi5pbnRyby1ib2R5IHAgKyBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5pbnRyby1jdGFzIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLyogZ2hvc3QgYnV0dG9uIG9uIHRoZSAoZGFyaykgaW50cm8gYmFuZDogdHJhbnNsdWNlbnQgb3V0bGluZSwgZ29sZCBvbiBob3ZlciAqL1xuLmludHJvLWN0YXMgLmJ0bi1naG9zdCB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzIpO1xufVxuXG4uaW50cm8tY3RhcyAuYnRuLWdob3N0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLmludHJvLW1lZGlhIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uaW50cm8taW1nIHtcblx0bWFyZ2luOiAwO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRhc3BlY3QtcmF0aW86IDQvMztcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4uaW50cm8taW1nIGltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xufVxuXG4uaW50cm8taW1nLXdpZGUge1xuXHRncmlkLWNvbHVtbjogc3BhbiAyO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzc7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA4MjBweCkge1xuXHQuaW50cm8tc3BsaXQge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBjb2wtY2FyZWVycyDCtyBzYWxhcnkgY2FyZHMgKHRyYW5zbHVjZW50IG9uIGRhcmsg4oaSIHRleHQgdHJhY2tzIHRoZSBiYW5kKSDilIDilIDilIAgKi9cbi5jYXJlZXItZ3JpZCB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjYwcHgsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4vKiBlYWNoIGNhcmQgaXMgYSAyLXJvdyBzdWJncmlkIChoZWFkIC8gYm9keSkgc2hhcmluZyB0aGUgZ3JpZCdzIHJvdyB0cmFja3MsIHNvXG4gICB0aGUgdGl0bGUgcm93IHNpemVzIHRvIHRoZSB0YWxsZXN0IHRpdGxlIGluIHRoZSByb3cg4oCUIHRpdGxlcyBjb2xsYXBzZSB0byBvbmVcbiAgIGxpbmUgdG9nZXRoZXIgd2hlbiBub25lIHdyYXAsIGFuZCBhbGlnbiB3aGVuIG9uZSBkb2VzLiBUaGUgcm93IEdBUCBiZXR3ZWVuXG4gICBoZWFkIGFuZCBib2R5IGlzIHRoZSBncmlkJ3Mgb3duIGdhcCAoc3BhY2UtNSkuICovXG4uY2FyZWVyLWNhcmQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLXJvd3M6IHN1YmdyaWQ7XG5cdGdyaWQtcm93OiBzcGFuIDI7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtY2FyZC1iZywgdmFyKC0tYXUtd2hpdGUpKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0yMDApKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5jYXJlZXItZGVnIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWV5ZWJyb3csIHZhcigtLWF1LWdvbGQpKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5jYXJlZXItdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHRsaW5lLWhlaWdodDogMS4yO1xufVxuXG4vKiBPbmUgdGV4dCBhcmVhIGhvbGRzIHNhbGFyeSArIHNvdXJjZSArIGJsdXJiOyB0aGUgZWRpdG9yIG1hcmtzIHRoZW0gdXAgYW5kIHRoZVxuICAgY2FyZCBzdHlsZXMgdGhlbSB0byB0aGUgbW9ja3VwOlxuICAgICA8c3Ryb25nPiAoaXRzIG93biBsaW5lKSAg4oaSIHRoZSBzYWxhcnkgZmlndXJlOiBiaWcgZ29sZCBkaXNwbGF5IG51bWJlclxuICAgICA8ZW0+ICAgICAgKGl0cyBvd24gbGluZSkg4oaSIHRoZSBzb3VyY2UgbGluZTogdXBwZXJjYXNlIGNhcHMgKyBhIGhhaXJsaW5lIHVuZGVyIGl0XG4gICAgIHBsYWluIHBhcmFncmFwaChzKSAgICAgICDihpIgdGhlIGRlc2NyaXB0aW9uXG4gICBUaGUgYmlnLXNhbGFyeSB0cmVhdG1lbnQgaXMgc2NvcGVkIHRvIHRoZSBGSVJTVCBsaW5lLCBzbyBhbiBpbmxpbmUgYm9sZCBpbnNpZGVcbiAgIHRoZSBkZXNjcmlwdGlvbiBzdGF5cyBub3JtYWwuICovXG4uY2FyZWVyLWRlc2Mge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxuLmNhcmVlci1kZXNjIHAge1xuXHRtYXJnaW46IDA7XG59XG5cbi5jYXJlZXItZGVzYyBwICsgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uY2FyZWVyLWRlc2MgcDpmaXJzdC1jaGlsZCBzdHJvbmcsIC5jYXJlZXItZGVzYyBwOmZpcnN0LWNoaWxkIGIge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0yeGwpO1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LWdvbGQpKTtcbn1cblxuLmNhcmVlci1kZXNjIGVtLCAuY2FyZWVyLWRlc2MgaSB7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG59XG5cbi5jYXJlZXItZGVzYyBwOmhhcyhlbSksIC5jYXJlZXItZGVzYyBwOmhhcyhpKSB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1iYW5kLWhhaXJsaW5lLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xufVxuXG4vKiDilIDilIDilIAgY29sLW1lZGlhIMK3IG92ZXJsYXkgY2FyZHMsIGhvdmVyLXJldmVhbCAoc2VsZi1jb250YWluZWQ7IGJhbmQtYWdub3N0aWMpIOKUgOKUgOKUgCAqL1xuLmNvbC1tZWRpYSAuc2VjdGlvbi1oZWFkIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtOCk7XG59IC8qIHRpZ2h0ZXIgaGVhZOKGkmNhcmRzIGdhcCB0aGFuIHRoZSA2NHB4IGRlZmF1bHQgKi9cbi5tZWRpYS1ncmlkIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMjBweCwgMWZyKSk7XG5cdGdhcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5tZWRpYS1jYXJkIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRkaXNwbGF5OiBibG9jaztcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0YXNwZWN0LXJhdGlvOiA0LzM7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWF1LW5hdnkpLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLm1lZGlhLWNhcmQgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi5tZWRpYS1vdmVybGF5IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLCAyNiwgNTEsIDAuOSkgMCUsIHJnYmEoMCwgMjYsIDUxLCAwLjEpIDYwJSk7XG59XG5cbi5tZWRpYS1jb250ZW50IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRsZWZ0OiAwO1xuXHRyaWdodDogMDtcblx0Ym90dG9tOiAwO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLm1lZGlhLWV5ZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4xZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0bWFyZ2luLWJvdHRvbTogMnB4O1xufVxuXG4ubWVkaWEtbmFtZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4ubWVkaWEtZGVzYyB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTtcblx0bGluZS1oZWlnaHQ6IDEuNTU7XG5cdG1heC1oZWlnaHQ6IDA7XG5cdG9wYWNpdHk6IDA7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHRyYW5zaXRpb246IG1heC1oZWlnaHQgdmFyKC0tZHVyYXRpb24tc2xvdykgdmFyKC0tZWFzZS1vdXQpLCBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLm1lZGlhLWNhcmQ6aG92ZXIgLm1lZGlhLWRlc2MsIC5tZWRpYS1jYXJkOmZvY3VzLXZpc2libGUgLm1lZGlhLWRlc2Mge1xuXHRtYXgtaGVpZ2h0OiA4cmVtO1xuXHRvcGFjaXR5OiAxO1xufVxuXG5AbWVkaWEgKGhvdmVyOiBub25lKSB7XG5cdC5tZWRpYS1kZXNjIHtcblx0XHRtYXgtaGVpZ2h0OiA4cmVtO1xuXHRcdG9wYWNpdHk6IDE7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBjb2wtcHJvZmlsZSDCtyBmZWF0dXJlZCBwZXJzb24gc3BsaXQgKG9uIHRoZSBiYW5kKSDilIDilIDilIAgKi9cbi5wcm9maWxlLXNwbGl0IHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEwKTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmNvbC1wcm9maWxlLmZsaXAgLnByb2ZpbGUtbWVkaWEge1xuXHRvcmRlcjogMjtcbn0gLyogaW1hZ2UgdG8gdGhlIHJpZ2h0ICovXG4ucHJvZmlsZS1tZWRpYSB7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGFzcGVjdC1yYXRpbzogNC81O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5wcm9maWxlLW1lZGlhIGltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xufVxuXG4ucHJvZmlsZS1jb3B5IC5zZWN0aW9uLWxhYmVsIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5wcm9maWxlLW5hbWUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiBjbGFtcCh2YXIoLS10ZXh0LTJ4bCksIDR2dywgdmFyKC0tdGV4dC0zeGwpKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDEuMTU7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLnByb2ZpbGUtY3JlZCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcbn1cblxuLnByb2ZpbGUtYmlvIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xuXHRsaW5lLWhlaWdodDogMS44O1xufVxuXG4ucHJvZmlsZS1iaW8gcCArIHAge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyogY3JlZGVudGlhbCBzdWItbGluZSDigJQgYW4gaXRhbGljIGZpcnN0IGxpbmUgaW4gdGhlIGJpbyBjb250ZW50IChjYXJlZXJzLXN0eWxlXG4gICBtYXJrdXApOiByZW5kZXJzIHNtYWxsLCBsaWdodCBhbmQgdXByaWdodCwgaHVnZ2luZyB0aGUgbmFtZS4gKi9cbi5wcm9maWxlLWJpbzpoYXMoPiBwOmZpcnN0LWNoaWxkIGVtKSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ucHJvZmlsZS1iaW8gPiBwOmZpcnN0LWNoaWxkIGVtIHtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcbn1cblxuLnByb2ZpbGUtYmlvIGJsb2NrcXVvdGUge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1xdW90ZSwgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogODIwcHgpIHtcblx0LnByb2ZpbGUtc3BsaXQge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdH1cblx0LmNvbC1wcm9maWxlLmZsaXAgLnByb2ZpbGUtbWVkaWEge1xuXHRcdG9yZGVyOiAwO1xuXHR9XG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIHByb2dyYW1zLmNzcyAgwrcgIHByb2dyYW0gZXhwbG9yZXIgKHNlYXJjaCArIGZpbHRlcnMgKyBzaG93LWFsbClcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3MsIGxheW91dC5jc3MgKC0tYmFuZC0qIHRva2VucyksIHZhcmlhbnRzLmNzc1xuICAgKC5wcm9ncmFtcy1ncmlkIC8gLnByb2dyYW0tY2FyZCDigJQgdGhlIGNhcmRzIGFyZSB0aGUgY29sLXByb2dyYW1zIGNhcmRzKVxuICAgTWFya3VwOiBjb21wb25lbnRzL3Byb2dyYW1zX2V4cGxvcmVyLnR0IMK3IGJlaGF2aW91cjoganMvcHJvZ3JhbXMuanNcbiAgIFJlYWRzIHRoZSBiYW5kIHRva2Vucywgc28gaXQgd29ya3Mgb24gd2hpdGUsIGNyZWFtIG9yIG5hdnkgYmFuZHMuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi5wcm9ncmFtcy10b29scyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG4vKiBzZWFyY2gg4oCUIGljb24gaW5zaWRlIHRoZSBmaWVsZCAqL1xuLnByb2dyYW1zLXNlYXJjaCB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0bWF4LXdpZHRoOiA1NjBweDtcbn1cblxuLnByb2dyYW1zLXNlYXJjaCBzdmcge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IHZhcigtLXNwYWNlLTQpO1xuXHR0b3A6IDUwJTtcblx0d2lkdGg6IDE4cHg7XG5cdGhlaWdodDogMThweDtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuXHRmaWxsOiBub25lO1xuXHRzdHJva2U6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdHN0cm9rZS13aWR0aDogMi41O1xuXHRzdHJva2UtbGluZWNhcDogcm91bmQ7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4ucHJvZ3JhbXMtc2VhcmNoIC5pbnB1dCB7XG5cdHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1zcGFjZS00KSArIDI4cHgpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWJhbmQtaGFpcmxpbmUsIHZhcigtLWF1LWdyYXktMjAwKSk7XG59XG5cbi5wcm9ncmFtcy1zZWFyY2ggLmlucHV0OmZvY3VzIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogZmlsdGVyIGNoaXBzICsgYXJlYS1vZi1zdHVkeSBzZWxlY3Qgc2hhcmUgb25lIGxvb2sgKi9cbi5wcm9ncmFtcy1maWx0ZXJzIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ucHJvZ3JhbXMtY2hpcCxcbi5wcm9ncmFtcy1maWVsZCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsZXR0ZXItc3BhY2luZzogMC41cHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJhbmQtaGFpcmxpbmUsIHZhcigtLWF1LWdyYXktMzAwKSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtNCk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpLCBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWZhc3QpLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KTtcbn1cblxuLnByb2dyYW1zLWNoaXA6aG92ZXIsXG4ucHJvZ3JhbXMtZmllbGQ6aG92ZXIge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi5wcm9ncmFtcy1jaGlwW2FyaWEtcHJlc3NlZD10cnVlXSxcbi5wcm9ncmFtcy1maWVsZC5pcy1hY3RpdmUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5wcm9ncmFtcy1jaGlwOmZvY3VzLXZpc2libGUsXG4ucHJvZ3JhbXMtZmllbGQ6Zm9jdXMtdmlzaWJsZSB7XG5cdG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0b3V0bGluZS1vZmZzZXQ6IDJweDtcbn1cblxuLnByb2dyYW1zLWZpZWxkIHtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0cGFkZGluZy1yaWdodDogY2FsYyh2YXIoLS1zcGFjZS00KSArIDE2cHgpO1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyM0M2OTUyQicgc3Ryb2tlLXdpZHRoPSczJyUzRSUzQ3BvbHlsaW5lIHBvaW50cz0nNiA5IDEyIDE1IDE4IDknLyUzRSUzQy9zdmclM0VcIik7XG5cdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IHZhcigtLXNwYWNlLTMpIGNlbnRlcjtcblx0YmFja2dyb3VuZC1zaXplOiAxMnB4O1xufVxuXG4ucHJvZ3JhbXMtZmllbGQgb3B0aW9uIHtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4ucHJvZ3JhbXMtc3RhdHVzIHtcblx0bWluLWhlaWdodDogMS41ZW07XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG59XG5cbi8qIHRoZSBzaGVldCdzIGltYWdlcyBhcmUgd2lkZSBiYW5uZXJzIOKAlCBhIHdpZGVyIGNyb3AgdGhhbiBjb2wtcHJvZ3JhbXMnIDQ6MyAqL1xuLnByb2dyYW1zLWV4cGxvcmVyIC5wcm9ncmFtLWltZyB7XG5cdGFzcGVjdC1yYXRpbzogMTYvOTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLyogb3V0IG9mIGZsb3cgc28gYSBwb3J0cmFpdCBwaG90byAodGhlIGdyYWQgcGFnZXMnIHRhbGxfaW1hZ2UpIGNhbid0IHN0cmV0Y2ggdGhlIGZyYW1lICovXG4ucHJvZ3JhbXMtZXhwbG9yZXIgLnByb2dyYW0taW1nIGltZyB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0aW5zZXQ6IDA7XG59XG5cbi8qIHBvcnRyYWl0IHNvdXJjZXM6IGEgY2VudHJlZCAxNjo5IHNsaWNlIGxhbmRzIG9uIGNoZXN0cyDigJQgZmF2b3VyIHRoZSB1cHBlclxuICAgcGFydCBvZiB0aGUgZnJhbWUsIHdoZXJlIHRoZSBmYWNlcyBhcmUgKi9cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1pbWctLXRhbGwgaW1nIHtcblx0b2JqZWN0LXBvc2l0aW9uOiA1MCUgMjIlO1xufVxuXG4ucHJvZ3JhbXMtZXhwbG9yZXIgLnByb2dyYW0tYmFkZ2Uge1xuXHRtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDIgKiB2YXIoLS1zcGFjZS00KSk7XG59XG5cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1jYXJkW2hpZGRlbl0ge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4ucHJvZ3JhbS10YWdzIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0zKSAwIDA7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLnByb2dyYW0tdGFnIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHRwYWRkaW5nOiAycHggdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5wcm9ncmFtLXRhZy0tYWNjZWwge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDE5OCwgMTQ5LCA0MywgMC4zNSk7XG59XG5cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1ib2R5IHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1jdGEge1xuXHRtYXJnaW4tdG9wOiBhdXRvO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5wcm9ncmFtcy1lbXB0eSB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIDA7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG59XG5cbi5wcm9ncmFtcy1lbXB0eSBhIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtbGluaywgdmFyKC0tYXUtbmF2eS1saWdodCkpO1xufVxuXG4ucHJvZ3JhbXMtYWN0aW9ucyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4vKiBvdXRsaW5lIGJ1dHRvbiB0aGF0IHJlYWRzIG9uIGEgZGFyayBiYW5kIHRvbyAqL1xuLnByb2dyYW1zLWV4cGxvcmVyIC5wcm9ncmFtcy1hbGwtbGluayB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcblx0Ym9yZGVyLWNvbG9yOiBjdXJyZW50Q29sb3I7XG59XG5cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbXMtYWxsLWxpbms6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLnByb2dyYW1zLWV4cGxvcmVyW2NsYXNzKj1zZWN0aW9uLS1uYXZ5XSAucHJvZ3JhbXMtYWxsLWxpbms6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC8qIGNoaXBzIHNjcm9sbCBzaWRld2F5cyBpbnN0ZWFkIG9mIHN0YWNraW5nIGZvdXIgcm93cyBkZWVwICovXG5cdC5wcm9ncmFtcy1maWx0ZXJzIHtcblx0XHRmbGV4LXdyYXA6IG5vd3JhcDtcblx0XHRvdmVyZmxvdy14OiBhdXRvO1xuXHRcdHBhZGRpbmc6IDJweCAwO1xuXHRcdHNjcm9sbGJhci13aWR0aDogbm9uZTtcblx0fVxuXHQucHJvZ3JhbXMtZmlsdGVyczo6LXdlYmtpdC1zY3JvbGxiYXIge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblx0LnByb2dyYW1zLWNoaXAsIC5wcm9ncmFtcy1maWVsZCB7XG5cdFx0ZmxleDogMCAwIGF1dG87XG5cdH1cbn1cbi8qIGF1ZGlvLmNzcyDCtyBjdXN0b20gYXVkaW8gcGxheWVyIHN0eWxlZCB0byB0aGUgQVUgZGVzaWduIHN5c3RlbVxuICAgTWFya3VwOiBbZGF0YS1hdWRpb10gd3JhcHBpbmcgYW4gPGF1ZGlvPiBlbGVtZW50XG4gICBKUzoganMvYXVkaW8uanMgYnVpbGRzIHRoZSBVSSBhbmQgc2VsZi1pbml0cyB2aWEgaW5pdC5qcyAqL1xuLmF1ZGlvLXBsYXllciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRtYXgtd2lkdGg6IDU0MHB4O1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTUpIGF1dG87XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xufVxuXG4uYXVkaW8tcGxheWVyLWNvbnRyb2xzIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmF1ZGlvLXBsYXllci1idG4ge1xuXHRmbGV4OiAwIDAgYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdHdpZHRoOiA0NHB4O1xuXHRoZWlnaHQ6IDQ0cHg7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCksIGNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KTtcblx0cGFkZGluZzogMDtcbn1cblxuLmF1ZGlvLXBsYXllci1idG46aG92ZXIsXG4uYXVkaW8tcGxheWVyLWJ0bjpmb2N1cy12aXNpYmxlIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0b3V0bGluZTogbm9uZTtcbn1cblxuLmF1ZGlvLXBsYXllci1idG4gc3ZnIHtcblx0d2lkdGg6IDE4cHg7XG5cdGhlaWdodDogMThweDtcblx0ZmlsbDogY3VycmVudENvbG9yO1xufVxuXG4uYXVkaW8tcGxheWVyLXRyYWNrIHtcblx0ZmxleDogMSAxIGF1dG87XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLmF1ZGlvLXBsYXllci10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IDEwcHg7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjA2ZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdHBhZGRpbmctYm90dG9tOiA0cHg7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4uYXVkaW8tcGxheWVyLWJhciB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0aGVpZ2h0OiA2cHg7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5hdWRpby1wbGF5ZXItYmFyOmhvdmVyIHtcblx0aGVpZ2h0OiA4cHg7XG59XG5cbi5hdWRpby1wbGF5ZXItZmlsbCB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAwO1xuXHRsZWZ0OiAwO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdHdpZHRoOiAwJTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0dHJhbnNpdGlvbjogd2lkdGggODBtcyBsaW5lYXI7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uYXVkaW8tcGxheWVyLXRpbWUge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IDExcHg7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG5cdHVzZXItc2VsZWN0OiBub25lO1xuXHRwYWRkaW5nLXRvcDogM3B4O1xuXHRsaW5lLWhlaWdodDogMTtcbn1cblxuLmF1ZGlvLXBsYXllci12b2wge1xuXHRmbGV4OiAwIDAgYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmF1ZGlvLXBsYXllci12b2wgYnV0dG9uIHtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Ym9yZGVyOiBub25lO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGZsZXg7XG59XG5cbi5hdWRpby1wbGF5ZXItdm9sIGJ1dHRvbjpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLmF1ZGlvLXBsYXllci12b2wgc3ZnIHtcblx0d2lkdGg6IDE4cHg7XG5cdGhlaWdodDogMThweDtcblx0ZmlsbDogY3VycmVudENvbG9yO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMzgwcHgpIHtcblx0LmF1ZGlvLXBsYXllciB7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG5cdH1cblx0LmF1ZGlvLXBsYXllci1jb250cm9scyB7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0fVxuXHQuYXVkaW8tcGxheWVyLWJ0biB7XG5cdFx0d2lkdGg6IDM2cHg7XG5cdFx0aGVpZ2h0OiAzNnB4O1xuXHR9XG5cdC5hdWRpby1wbGF5ZXItdm9sIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGNvbXBhdC5jc3MgIMK3ICBsZWdhY3kgY29udGVudCBwYXR0ZXJucyBpbiBhdXRob3JlZCBzZWN0aW9uIGJvZGllc1xuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzc1xuICAgQ292ZXJzIHRoZSBDVEEgYmFyLCBCb290c3RyYXAgZ3JpZCBjb2x1bW5zIGluIGNhcmQgYm9kaWVzLCBhbmRcbiAgIGxlZ2FjeSBmb250IHJlZmVyZW5jZXMuIFRoZXNlIHBhdHRlcm5zIGFwcGVhciBpbiBob21lcGFnZS1hZHZhbmNlZFxuICAgYm9kaWVzIHRoYXQgY2FuJ3QgYmUgc2FmZWx5IHJvdW5kLXRyaXBwZWQgdGhyb3VnaCBjbXNfZWRpdC5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyog4pSA4pSAIEJvb3RzdHJhcCBncmlkIOKGkiBmbGV4IOKUgOKUgFxuICAgQXV0aG9yZWQgY2FyZCBib2RpZXMgdXNpbmcgLnJvdyArIC5jb2wtKiBnZXQgYSBzaW1wbGUgZmxleCBsYXlvdXQuXG4gICBDb3ZlcnMgdGhlIFdlbGNvbWUgaW50cm8gKDgvNCB0ZXh0K2ltYWdlIHNwbGl0KSBhbmQgYW55IHNpbWlsYXJcbiAgIGxlZ2FjeSB0d28tIG9yIHRocmVlLWNvbHVtbiBib2R5LiAqL1xuLmNhcmQtdGV4dCA+IC5yb3csXG4uY2FyZC10ZXh0ID4gZGl2ID4gLnJvdyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLmNhcmQtdGV4dCBbY2xhc3MqPWNvbC1tZC04XSxcbi5jYXJkLXRleHQgW2NsYXNzKj1jb2wtbWQtN10ge1xuXHRmbGV4OiAyIDEgNDAwcHg7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLmNhcmQtdGV4dCBbY2xhc3MqPWNvbC1tZC00XSxcbi5jYXJkLXRleHQgW2NsYXNzKj1jb2wtbWQtNV0ge1xuXHRmbGV4OiAxIDEgMjQwcHg7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLmNhcmQtdGV4dCBbY2xhc3MqPWNvbC1tZC02XSB7XG5cdGZsZXg6IDEgMSAzMDBweDtcblx0bWluLXdpZHRoOiAwO1xufVxuXG4uY2FyZC10ZXh0IFtjbGFzcyo9Y29sLW1kLTEyXSB7XG5cdGZsZXg6IDEgMSAxMDAlO1xufVxuXG4vKiA0LWFjcm9zcyBncmlkIChDVEEgYmFyKTogY2FyZC10ZXh0IHdpdGggY29sLWxnLTMgY2hpbGRyZW4gKi9cbi5jYXJkLXRleHQ6aGFzKD4gW2NsYXNzKj1jb2wtbGctM10pIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xuXHRhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cblxuLmNhcmQtdGV4dCA+IFtjbGFzcyo9Y29sLWxnLTNdIHtcblx0ZmxleDogMSAxIDIwMHB4O1xuXHRtaW4td2lkdGg6IDA7XG5cdGRpc3BsYXk6IGZsZXg7XG59XG5cbi8qIOKUgOKUgCBDVEEgd2lkZ2V0IOKUgOKUgFxuICAgNC1hY3Jvc3MgaWNvbitsYWJlbCBhY3Rpb24gYmxvY2tzIG9uIGhvbWVwYWdlcy4gTGVnYWN5IG1hcmt1cCB1c2VzXG4gICAuY3RhICsgLmN0YS0qIHdpdGggSWNvblN3ZWV0cy1EZWx1eGUgaWNvbnM7IHJlc3R5bGVkIGZvciAyMDI3IHdpdGhcbiAgIEZBNyBpY29uIHN1YnN0aXR1dGlvbi4gVXNlcyAhaW1wb3J0YW50IHRvIHdpbiBvdmVyIC9jc3MvY3RhLmNzcyxcbiAgIHdoaWNoIGN0YS1yb3cudHQgbG9hZHMgYXMgYSA8bGluaz4gYWZ0ZXIgaW5kZXguY3NzLiAqL1xuLmN0YSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuXHRhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XG5cdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KSAhaW1wb3J0YW50O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSkgIWltcG9ydGFudDtcblx0Ym9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1hdS1nb2xkKSAhaW1wb3J0YW50O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSkgIWltcG9ydGFudDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5jdGE6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSkgIWltcG9ydGFudDtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc20pO1xufVxuXG4vKiBjdGEtcm93LnR0IHdyYXBzIGV2ZXJ5dGhpbmcgaW4gT05FIDxhPjsgYWRtaXNzaW9ucyBtYXJrdXAgdXNlcyBzZXBhcmF0ZSA8YT5zLlxuICAgSGFuZGxlIGJvdGg6IGEgZGlyZWN0LWNoaWxkIDxhPiB0aGF0IHdyYXBzIC5pY29uICsgLmN0YS10aXRsZSBpcyB0aGUgY29udGVudFxuICAgd3JhcHBlciwgbm90IGEgc3RyZXRjaGVkLWxpbmsgYW5jaG9yIOKAlCBtYWtlIGl0IGZsZXggYW5kIHN0cmlwIHVuZGVybGluZS5cbiAgIGN0YS1yb3ctYnV0dG9ucy50dCBhZGRzIGNsYXNzPVwiYnRuIGJ0bi1ncmF5XCIgdG8gdGhlIHNhbWUgPGE+OyBuZXV0cmFsaXplXG4gICB0aGF0IGJ1dHRvbiBzdHlsaW5nIHNvIHRoZSBjYXJkIGxvb2sgd2lucy4gKi9cbi5jdGEgPiBhIHtcblx0ZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcblx0Y29sb3I6IGluaGVyaXQgIWltcG9ydGFudDtcblx0d2lkdGg6IDEwMCU7XG59XG5cbi8qIGFkbWlzc2lvbnMgbWFya3VwOiBzZXBhcmF0ZSA8YT4gaW5zaWRlIC5jdGEtdGl0bGUg4oaSIGtlZXAgcG9pbnRlci1ldmVudHMgbm9ybWFsICovXG4uY3RhID4gYTpvbmx5LWNoaWxkIHtcblx0ZmxleDogMTtcbn1cblxuLyogY3RhLXJvdy1idXR0b25zLnR0IGFkZHMgLmJ0bi5idG4tZ3JheSB0byB0aGUgYW5jaG9yIOKAlCBzdHJpcCBpdCBiYWNrIHRvIHBsYWluICovXG4uY3RhID4gYS5idG4ge1xuXHRib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuXHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcblx0Zm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG5cdGZvbnQtd2VpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG5cdGxldHRlci1zcGFjaW5nOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG5cdHRleHQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xufVxuXG4uY3RhID4gYS5idG46aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG5cdHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50O1xufVxuXG4vKiBpY29uIHJlcGxhY2VtZW50OiBJY29uU3dlZXRzLURlbHV4ZSDihpIgRkE3IFBybyAqL1xuLmN0YSAuaWNvbiB7XG5cdGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRmbG9hdDogbm9uZSAhaW1wb3J0YW50O1xuXHRtYXJnaW46IDAgIWltcG9ydGFudDtcbn1cblxuLmN0YSAuaWNvbiBzcGFuIHtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdHdpZHRoOiAxLjVlbTtcblx0aGVpZ2h0OiAxLjVlbTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uY3RhIC5pY29uIHNwYW46OmJlZm9yZSB7XG5cdGZvbnQtZmFtaWx5OiBcIkZvbnQgQXdlc29tZSA3IFByb1wiO1xuXHRmb250LXdlaWdodDogOTAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRsaW5lLWhlaWdodDogMTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpICFpbXBvcnRhbnQ7XG5cdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xufVxuXG4uY3RhIC5pY29uIC5pY29uLXNhZmFyaTo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcXGYxNGVcIjtcbn1cblxuLmN0YSAuaWNvbiAuaWNvbi1nbG9iZTI6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXFxmMGFjXCI7XG59XG5cbi5jdGEgLmljb24gLmljb24tYWlycGxhbmU6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXFxmMDcyXCI7XG59XG5cbi5jdGEgLmljb24gLmljb24td3JpdGU6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXFxmMDQ0XCI7XG59XG5cbi5jdGEgLmljb24gLmljb24taW5mbzo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcXGYwNWFcIjtcbn1cblxuLmN0YSAuaWNvbiAuaWNvbi1jYWxlbmRhci1kYXk6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXFxmNzgzXCI7XG59XG5cbi5jdGEgLmljb24gYSB7XG5cdGRpc3BsYXk6IGNvbnRlbnRzO1xufVxuXG4vKiBsYWJlbCDigJQgc3RyaXAgY3RhLmNzcyBjb2xvcmVkIGJhY2tncm91bmRzICovXG4uY3RhIC5jdGEtdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0bGluZS1oZWlnaHQ6IDEuMztcblx0ZmxvYXQ6IG5vbmUgIWltcG9ydGFudDtcblx0bWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcblx0dGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpICFpbXBvcnRhbnQ7XG59XG5cbi8qIGFkbWlzc2lvbnMgbWFya3VwIGhhcyA8YT4gaW5zaWRlIC5jdGEtdGl0bGU7IGN0YS1yb3cudHQgaGFzIGl0IG91dHNpZGUgKi9cbi5jdGEgLmN0YS10aXRsZSBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5jdGEgLmN0YS10aXRsZSBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4uY3RhIC50aXRsZSB7XG5cdGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuXHRjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50O1xuXHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogMCAhaW1wb3J0YW50O1xuXHRsaW5lLWhlaWdodDogMS4zICFpbXBvcnRhbnQ7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi8qIOKUgOKUgCAuYnRuIGluc2lkZSAuZ3JpZDoga2VlcCBuYXR1cmFsIHNpemUsIGRvbid0IHN0cmV0Y2ggYXMgYSBncmlkIGNlbGwg4pSA4pSAXG4gICBBdXRob3JlZCBjb250ZW50IHNvbWV0aW1lcyB3cmFwcyBzaWJsaW5nIGJ1dHRvbnMgaW4gYSA8ZGl2IGNsYXNzPVwiZ3JpZFwiPi5cbiAgIC5ncmlkID4gKiBub3JtYWxseSBnZXRzIGZsZXg6MSAxIDI4MHB4IChjYXJkIHdpZHRoKSwgd2hpY2ggc3RyZXRjaGVzIGVhY2hcbiAgIGJ1dHRvbiB0byBhIGZ1bGwgcm93LiBPdmVycmlkZSBzbyB0aGV5IHNpemUgdG8gdGhlaXIgb3duIGNvbnRlbnQgYW5kIGNhblxuICAgc2l0IHNpZGUtYnktc2lkZS4gKi9cbi5jYXJkLXRleHQgLmdyaWQgPiAuYnRuLFxuLmNhcmQtYm9keSAuZ3JpZCA+IC5idG4ge1xuXHRmbGV4OiAxIDEgMCAhaW1wb3J0YW50O1xuXHR3aWR0aDogMCAhaW1wb3J0YW50O1xuXHRtaW4td2lkdGg6IDAgIWltcG9ydGFudDtcblx0YWxpZ24tc2VsZjogZmxleC1zdGFydDtcbn1cblxuLyog4pSA4pSAIHB1bGwtbGVmdDogbmV1dHJhbGl6ZSBpbiBmbGV4IGNvbnRleHRzIOKUgOKUgCAqL1xuLmN0YSAucHVsbC1sZWZ0LFxuLmNhcmQtdGV4dCAucHVsbC1sZWZ0IHtcblx0ZmxvYXQ6IG5vbmU7XG59XG5cbi8qIOKUgOKUgCBMZWdhY3kgY3RhLXJvdy50dDogc2VjdGlvbi5jb2x1bW5zICsgQm9vdHN0cmFwIGNvbnRhaW5lci9yb3cg4pSA4pSAXG4gICBUaGUgc2hhcmVkIGN0YS1yb3cudHQgZW1pdHMgPHNlY3Rpb24gY2xhc3M9XCJjb2x1bW5zIGJhY2tncm91bmRfY29sb3JfKlwiPlxuICAgd2l0aCBhIEJvb3RzdHJhcCAuY29udGFpbmVyID4gLnJvdyA+IC5jb2wtc20tTiBncmlkLiBHaXZlIHRoZSBiYW5kXG4gICB0aGUgcmlnaHQgcGFkZGluZy9iYWNrZ3JvdW5kIGFuZCBtYWtlIHRoZSByb3cgZmxleC4gKi9cbnNlY3Rpb24uY29sdW1ucyB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEyKSB2YXIoLS1ndXR0ZXIpO1xufVxuXG5zZWN0aW9uLmNvbHVtbnNbY2xhc3MqPWJhY2tncm91bmRfY29sb3JfY2FyYXJyYS1ncmF5XSxcbnNlY3Rpb24uY29sdW1uc1tjbGFzcyo9YmFja2dyb3VuZF9jb2xvcl9zZWFzaGVsbC1ncmF5XSxcbnNlY3Rpb24uY29sdW1uc1tjbGFzcyo9YmFja2dyb3VuZF9jb2xvcl9zdG9uZV0ge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1zdG9uZSk7XG59XG5cbnNlY3Rpb24uY29sdW1uc1tjbGFzcyo9YmFja2dyb3VuZF9jb2xvcl9lY3J1LXdoaXRlXSxcbnNlY3Rpb24uY29sdW1uc1tjbGFzcyo9YmFja2dyb3VuZF9jb2xvcl9jcmVhbV0ge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG59XG5cbnNlY3Rpb24uY29sdW1uc1tjbGFzcyo9YmFja2dyb3VuZF9jb2xvcl9uaWxlLWJsdWVdLFxuc2VjdGlvbi5jb2x1bW5zW2NsYXNzKj1iYWNrZ3JvdW5kX2NvbG9yX2Zpb3JkLWJsdWVdLFxuc2VjdGlvbi5jb2x1bW5zW2NsYXNzKj1iYWNrZ3JvdW5kX2NvbG9yX2NoYXRoYW1zLWJsdWVdIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuc2VjdGlvbi5jb2x1bW5zIC5jb250YWluZXIge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG59XG5cbnNlY3Rpb24uY29sdW1ucyAuY29udGFpbmVyID4gLnJvdyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbnNlY3Rpb24uY29sdW1ucyAuY29udGFpbmVyID4gLnJvdyA+IFtjbGFzcyo9Y29sLV0ge1xuXHRmbGV4OiAxIDEgMjAwcHg7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLyog4pSA4pSAIElubGluZSBkaXNjbG9zdXJlIGVtYmVkIChyZXBsYWNlcyBCb290c3RyYXAgbW9kYWxzIGZvciBpZnJhbWVzKSDilIDilIAgKi9cbi50cmFuc2Zlci1lbWJlZCB7XG5cdG1heC1oZWlnaHQ6IDA7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC40cyBlYXNlO1xufVxuXG4udHJhbnNmZXItZW1iZWQuaXMtb3BlbiB7XG5cdG1heC1oZWlnaHQ6IDUwMHB4O1xufVxuXG4vKiDilIDilIAgQm9vdHN0cmFwIC5tb2RhbCDihpIgMjAyNyBvdmVybGF5IOKUgOKUgFxuICAgTGVnYWN5IHBhZ2VzIHVzZSAubW9kYWwgZGl2cyB3aXRoIGRhdGEtdG9nZ2xlL2RhdGEtZGlzbWlzcy5cbiAgIG1vZGFsLmpzIGFkZHMvcmVtb3ZlcyAuaXMtb3BlbjsgQ1NTIGNvbnRyb2xzIHZpc2liaWxpdHkuICovXG4ubW9kYWwge1xuXHRkaXNwbGF5OiBub25lO1xuXHRwb3NpdGlvbjogZml4ZWQ7XG5cdGluc2V0OiAwO1xuXHR6LWluZGV4OiAyMDAwO1xuXHRvdmVyZmxvdy15OiBhdXRvO1xuXHRvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDMxLCA2MywgMC42KTtcblx0YmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7XG5cdC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpIHZhcigtLWd1dHRlcik7XG59XG5cbi5tb2RhbC5pcy1vcGVuIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ubW9kYWwtZGlhbG9nIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRtYXgtd2lkdGg6IDcyMHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWFyZ2luOiBhdXRvO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cteGwpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ubW9kYWwtY29udGVudCB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpICFpbXBvcnRhbnQ7XG59XG5cbi8qIGhlYWRlcjogbWFudWFsbHktYXV0aG9yZWQgcGhvdG8gKyBuYW1lIGRpdiAobGVnYWN5IHByb2ZpbGVzIHBhZ2UgbWFya3VwKSDigJRcbiAgIG9ubHkgYXBwbGllcyB3aGVuIHRoZSBmaXJzdCBjaGlsZCBpcyBOT1QgdGhlIGF1dG8taW5qZWN0ZWQgaGVhZGVyICovXG4ubW9kYWwtY29udGVudCA+IGRpdjpmaXJzdC1jaGlsZDpub3QoLm1vZGFsLWF1dG8taGVhZGVyKSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtNSk7XG5cdGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLm1vZGFsLWNvbnRlbnQgPiBkaXY6Zmlyc3QtY2hpbGQ6bm90KC5tb2RhbC1hdXRvLWhlYWRlcikgPiBkaXY6Zmlyc3QtY2hpbGQgaW1nIHtcblx0d2lkdGg6IDEwMHB4O1xuXHRoZWlnaHQ6IDEwMHB4O1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuLm1vZGFsLWNvbnRlbnQgPiBkaXY6Zmlyc3QtY2hpbGQ6bm90KC5tb2RhbC1hdXRvLWhlYWRlcikgPiBkaXY6bGFzdC1jaGlsZCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ubW9kYWwtY29udGVudCA+IGRpdjpmaXJzdC1jaGlsZDpub3QoLm1vZGFsLWF1dG8taGVhZGVyKSA+IGRpdjpsYXN0LWNoaWxkIGgyIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bWFyZ2luOiAwIDAgdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5tb2RhbC1jb250ZW50ID4gZGl2OmZpcnN0LWNoaWxkOm5vdCgubW9kYWwtYXV0by1oZWFkZXIpID4gZGl2Omxhc3QtY2hpbGQgcCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRtYXJnaW46IDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi8qIC5jYXJkLXN1YnRpdGxlIOKAlCBhIHBsYWluIG11dGVkIGxpbmUgdW5kZXIgdGhlIGNhcmQgdGl0bGUgKHByb2dyYW0sIHllYXIsIHJvbGUpLlxuICAgTm8gZ29sZC91cHBlcmNhc2UgdHJlYXRtZW50OyBwdWxsZWQgaW50byB0aGUgbW9kYWwgaGVhZGVyIGFzIHRoZSBzdWJ0aXRsZS4gKi9cbi5jYXJkLXN1YnRpdGxlIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdG1hcmdpbjogMDtcblx0bGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyogYXV0by1oZWFkZXIgaW5qZWN0ZWQgYnkgbW9kYWwuanMg4oCUIHBob3RvIGNpcmNsZSArIG5hbWUgKyBzdWJ0aXRsZSByb3cgKi9cbi5tb2RhbC1hdXRvLWhlYWRlciB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtNSk7XG5cdGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4ubW9kYWwtYXV0by1waG90byB7XG5cdHdpZHRoOiAxMDBweDtcblx0aGVpZ2h0OiAxMDBweDtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0b2JqZWN0LXBvc2l0aW9uOiB0b3A7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuLm1vZGFsLWF1dG8tdGV4dCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEpO1xufVxuXG4ubW9kYWwtYXV0by1uYW1lIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bWFyZ2luOiAwO1xuXHRsaW5lLWhlaWdodDogMS4yO1xufVxuXG4ubW9kYWwtYXV0by1zdWJ0aXRsZSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRtYXJnaW46IDA7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0bGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyogc3RyaXAgJm5ic3A7IHNwYWNlciBkaXZzIHVzZWQgYXMgaG9yaXpvbnRhbCBydWxlcyAqL1xuLm1vZGFsLWNvbnRlbnQgW3N0eWxlKj1ib3JkZXItdG9wXSB7XG5cdGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNSkgMCAhaW1wb3J0YW50O1xuXHRoZWlnaHQ6IDAgIWltcG9ydGFudDtcbn1cblxuLyogc3RvcnkgYm9keSAqL1xuLm1vZGFsLWJvZHkge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsaW5lLWhlaWdodDogMS43NTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xufVxuXG4ubW9kYWwtYm9keSBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5tb2RhbC1ib2R5IHA6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4vKiBoMyBzZWN0aW9uIGhlYWRpbmdzIGdldCBhIGRpdmlkZXIgbGluZSBhYm92ZSB0aGVtIGF1dG9tYXRpY2FsbHkg4oCUXG4gICBubyBuZWVkIGZvciBtYW51YWwgPGhyPiBvciBib3JkZXItdG9wIGRpdnMgaW4gdGhlIG1vZGFsIG1hcmt1cCAqL1xuLm1vZGFsLWJvZHkgaDMge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNikgMCB2YXIoLS1zcGFjZS0yKTtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTYpO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4vKiBmaXJzdCBoMyBpbiB0aGUgYm9keSDigJQgbm8gZGl2aWRlciBhYm92ZSBpdCB3aGV0aGVyIHRoZSBoMyBpcyBhIGRpcmVjdCBjaGlsZFxuICAgb3Igd3JhcHBlZCBpbiBhIHBsYWluIGRpdiAodGhlIG9yaWdpbmFsIG1hcmt1cCB3cmFwcGVkIGVhY2ggc2VjdGlvbiBpbiA8ZGl2PikgKi9cbi5tb2RhbC1ib2R5IGgzOmZpcnN0LWNoaWxkLFxuLm1vZGFsLWJvZHkgPiBkaXY6Zmlyc3QtY2hpbGQgPiBoMzpmaXJzdC1jaGlsZCB7XG5cdG1hcmdpbi10b3A6IDA7XG5cdHBhZGRpbmctdG9wOiAwO1xuXHRib3JkZXItdG9wOiBub25lO1xufVxuXG4vKiBzdGFuZGFyZCBjbG9zZSByb3cg4oCUIC5tb2RhbC1mb290ZXIgKHByZWZlcnJlZCkgb3IgbGVnYWN5IFthbGlnbj1cInJpZ2h0XCJdICovXG4ubW9kYWwtZm9vdGVyIHtcblx0ZGlzcGxheTogZmxleDtcblx0anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTUpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLm1vZGFsLWNvbnRlbnQgW2FsaWduPXJpZ2h0XSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xuXHR0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuW2RhdGEtZGlzbWlzcz1tb2RhbF0ge1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi8qIFggY2xvc2UgYnV0dG9uIOKAlCBpbmplY3RlZCBieSBtb2RhbC5qcyBpbnRvIC5tb2RhbC1jb250ZW50IHRvcC1yaWdodCAqL1xuLm1vZGFsLWNvbnRlbnQge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5tb2RhbC1jbG9zZS14IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRyaWdodDogdmFyKC0tc3BhY2UtNCk7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGJvcmRlcjogbm9uZTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMik7XG5cdGxpbmUtaGVpZ2h0OiAxO1xuXHR6LWluZGV4OiAxO1xufVxuXG4ubW9kYWwtY2xvc2UteDpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLyog4pSA4pSAIFByb2ZpbGUgcG9ydHJhaXQgKyBidXR0b24gZ3JpZCDilIDilIBcbiAgIC5mZWF0dXJlLWlubmVyIHdyYXBzIGFsdGVybmF0aW5nIHBvcnRyYWl0IHJvd3MgYW5kIGJ1dHRvbiByb3dzIGluIGF1dGhvcmVkXG4gICBwcm9maWxlIHBhZ2VzLiBsYXlvdXQuY3NzIHVzZXMgbGl0ZXJhbCAyODBweCwgc28gb3ZlcnJpZGUgZmxleCBkaXJlY3RseS5cbiAgIDE1MHB4IGZpdHMgMyBwZXIgcm93IGF0IDUwMHB4IHdpZGUgc2lkZWJhciBjb250ZW50ICgzw5cxNTAgKyAyw5cyNGdhcCA9IDQ5OHB4KS5cbiAgIFNlbGVjdG9yIGNvdmVycyBib3RoIHBvcnRyYWl0IGdyaWRzIGFuZCBhZGphY2VudCBidXR0b24tcm93IGdyaWRzLiAqL1xuLnBhZ2UtbWFpbiAuZmVhdHVyZS1pbm5lciAuZ3JpZCA+IGRpdiB7XG5cdGZsZXg6IDEgMSAxNTBweCAhaW1wb3J0YW50O1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi5wYWdlLW1haW4gLmdyaWQ6aGFzKD4gZGl2ID4gaW1nKSA+IGRpdiB7XG5cdGZsZXg6IDEgMSAxNTBweCAhaW1wb3J0YW50O1xufVxuXG4ucGFnZS1tYWluIC5ncmlkID4gZGl2Omhhcyg+IGltZykge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLnBhZ2UtbWFpbiAuZ3JpZCA+IGRpdjpoYXMoPiBpbWcpID4gaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGFzcGVjdC1yYXRpbzogMS8xO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0b2JqZWN0LXBvc2l0aW9uOiB0b3A7XG59XG5cbi5wYWdlLW1haW4gLmdyaWQgPiBkaXY6aGFzKD4gaW1nKSA+IGgyIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS0xKTtcbn1cblxuLnBhZ2UtbWFpbiAuZ3JpZCA+IGRpdjpoYXMoPiBpbWcpID4gcC5kZXNjcmlwdGlvbiB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRsaW5lLWhlaWdodDogMS41O1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNCk7XG59XG5cbi8qIHByb2ZpbGUgXCJyZWFkIHN0b3J5XCIgYnV0dG9uIHJvd3M6IGZ1bGwtd2lkdGggYnV0dG9ucywgdGV4dCB3cmFwcyAqL1xuLnBhZ2UtbWFpbiAuZ3JpZCA+IGRpdiA+IHAgPiBidXR0b24uYnRuLWxnIHtcblx0d2lkdGg6IDEwMCU7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHR3aGl0ZS1zcGFjZTogbm9ybWFsO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGxpbmUtaGVpZ2h0OiAxLjM7XG5cdG1pbi1oZWlnaHQ6IDMuNXJlbTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC5tb2RhbCB7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtMyk7XG5cdH1cblx0Lm1vZGFsLWNvbnRlbnQge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpICFpbXBvcnRhbnQ7XG5cdH1cblx0Lm1vZGFsLWNvbnRlbnQgPiBkaXY6Zmlyc3QtY2hpbGQge1xuXHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdH1cblx0Lm1vZGFsLWNvbnRlbnQgPiBkaXY6Zmlyc3QtY2hpbGQgPiBkaXY6Zmlyc3QtY2hpbGQgaW1nIHtcblx0XHR3aWR0aDogODBweDtcblx0XHRoZWlnaHQ6IDgwcHg7XG5cdH1cbn1cbi8qIOKUgOKUgCBCb290c3RyYXAgZm9ybSBjbGFzc2VzIOKGkiAyMDI3IHN0eWxlcyDilIDilIBcbiAgIEZvcm1zIGF1dGhvcmVkIHdpdGggQm9vdHN0cmFwIC5mb3JtLWdyb3VwIC8gLmZvcm0tY29udHJvbCAvIC5jaGVja2JveC5cbiAgIE1hcHMgdG8gdGhlIHNhbWUgdmlzdWFsIHJlc3VsdCBhcyBmb3Jtcy5jc3MgLmlucHV0Ly5zZWxlY3QvLmxhYmVsLiAqL1xuLmZvcm0tZ3JvdXAge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmZvcm0tZ3JvdXAgPiBsYWJlbCB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uZm9ybS1jb250cm9sIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRvdXRsaW5lOiBub25lO1xuXHR0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG5zZWxlY3QuZm9ybS1jb250cm9sIHtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG50ZXh0YXJlYS5mb3JtLWNvbnRyb2wge1xuXHRyZXNpemU6IHZlcnRpY2FsO1xuXHRtaW4taGVpZ2h0OiAxMjBweDtcbn1cblxuLyogQm9vdHN0cmFwIC5jaGVja2JveDogZGl2LmNoZWNrYm94ID4gbGFiZWwgPiBpbnB1dFt0eXBlPWNoZWNrYm94XSArIHRleHQuXG4gICBmb3Jtcy5jc3MgdHJlYXRzIC5jaGVja2JveCBhcyBhIDIww5cyMHB4IGN1c3RvbSBpbnB1dCwgYnV0IEJvb3RzdHJhcCB1c2VzIGl0XG4gICBhcyBhIHdyYXBwZXIgRElWLiBPdmVycmlkZSBzaXplIG9uIGRpdi5jaGVja2JveCBzbyB0aGUgbGFiZWwgY2FuIGJlIGZ1bGwgaGVpZ2h0LiAqL1xuZGl2LmNoZWNrYm94IHtcblx0d2lkdGg6IGF1dG8gIWltcG9ydGFudDtcblx0aGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtMikgMDtcbn1cblxuZGl2LmNoZWNrYm94IGxhYmVsIHtcblx0ZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuXHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcbn1cblxuLmNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcblx0cG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50O1xuXHRtYXJnaW46IDJweCAwIDAgIWltcG9ydGFudDtcblx0ZmxleC1zaHJpbms6IDA7XG5cdHdpZHRoOiAxcmVtO1xuXHRoZWlnaHQ6IDFyZW07XG5cdGFjY2VudC1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLyogc2Nyb2xsYWJsZSBjaGVja2JveCBjb250YWluZXIgKi9cbi5wcm9ncmFtcy13cmFwcGVyIHtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcblx0bWF4LWhlaWdodDogMjgwcHg7XG5cdG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi5wcm9ncmFtcy13cmFwcGVyIHN0cm9uZyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRsZXR0ZXItc3BhY2luZzogMC41cHg7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0zKSAwIHZhcigtLXNwYWNlLTIpO1xufVxuXG4ucHJvZ3JhbXMtd3JhcHBlciBzdHJvbmc6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4ucHJvZ3JhbXMtd3JhcHBlciBociB7XG5cdGJvcmRlcjogbm9uZTtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0zKSAwO1xufVxuXG4vKiBoZWxwZXIgdGV4dCArIHJlcXVpcmVkIGFzdGVyaXNrICovXG4udGV4dC1kYW5nZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZXJyb3IpO1xufVxuXG4udGV4dC1tdXRlZCB7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRmb250LXdlaWdodDogNDAwO1xufVxuXG4vKiDilIDilIAgQ0tFZGl0b3IgdGV4dC1hbGlnbjpjZW50ZXIgb24gPHA+IGNvbnRhaW5pbmcgYW4gaW1nIOKUgOKUgFxuICAgQ0tFZGl0b3IgY2VudGVycyBpbWFnZXMgYnkgc2V0dGluZyB0ZXh0LWFsaWduOmNlbnRlciBvbiB0aGUgd3JhcHBpbmcgPHA+LlxuICAgYmFzZS5jc3MgbWFrZXMgaW1nIGRpc3BsYXk6YmxvY2ssIHdoaWNoIGlnbm9yZXMgdGV4dC1hbGlnbiDigJQgdHJhbnNsYXRlIHRvXG4gICBtYXJnaW46YXV0byBzbyB0aGUgYXV0aG9yJ3MgaW50ZW50IGlzIGhvbm9yZWQuICovXG5wW3N0eWxlKj1cInRleHQtYWxpZ246IGNlbnRlclwiXSA+IGltZyxcbnBbc3R5bGUqPVwidGV4dC1hbGlnbjpjZW50ZXJcIl0gPiBpbWcge1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG4vKiDilIDilIAgTGVnYWN5IGZvbnQgcmVmZXJlbmNlcyDilIDilIBcbiAgIEFra3VyYXRMaWdodCB3YXMgdGhlIG9sZCBzaXRlJ3MgYm9keSBmb250LCBub3QgbG9hZGVkIGluIDIwMjcuIE92ZXJyaWRlXG4gICB0byB0aGUgZGVzaWduLXN5c3RlbSBzdGFjayBzbyB0aGUgdGV4dCBkb2Vzbid0IGZhbGwgdG8gYSByYW5kb20gc2VyaWYuICovXG5bc3R5bGUqPUFra3VyYXRMaWdodF0sXG5bc3R5bGUqPUFra3VyYXRdIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSkgIWltcG9ydGFudDtcbn1cblxuLyog4pSA4pSAIEJvb3RzdHJhcCByZXNwb25zaXZlIGVtYmVkICguZW1iZWQtcmVzcG9uc2l2ZSkg4pSA4pSAXG4gICBMZWdhY3kgY29udGVudCB3cmFwcyBZb3VUdWJlL1ZpbWVvIGlmcmFtZXMgaW4gdGhpczsgQm9vdHN0cmFwJ3MgQ1NTXG4gICBpc24ndCBsb2FkZWQgb24gdGhlIDIwMjcgY2hhaW4gc28gdGhlIGlmcmFtZSBjb2xsYXBzZXMuICovXG4uZW1iZWQtcmVzcG9uc2l2ZSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiAxMDAlO1xuXHRwYWRkaW5nOiAwO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZW1iZWQtcmVzcG9uc2l2ZTo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcIjtcblx0ZGlzcGxheTogYmxvY2s7XG59XG5cbi5lbWJlZC1yZXNwb25zaXZlIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sXG4uZW1iZWQtcmVzcG9uc2l2ZSBpZnJhbWUsXG4uZW1iZWQtcmVzcG9uc2l2ZSBlbWJlZCxcbi5lbWJlZC1yZXNwb25zaXZlIG9iamVjdCxcbi5lbWJlZC1yZXNwb25zaXZlIHZpZGVvIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdGxlZnQ6IDA7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdGJvcmRlcjogMDtcbn1cblxuLmVtYmVkLXJlc3BvbnNpdmUtMTZieTk6OmJlZm9yZSB7XG5cdHBhZGRpbmctdG9wOiA1Ni4yNSU7XG59XG5cbi5lbWJlZC1yZXNwb25zaXZlLTRieTM6OmJlZm9yZSB7XG5cdHBhZGRpbmctdG9wOiA3NSU7XG59XG5cbi5lbWJlZC1yZXNwb25zaXZlLTFieTE6OmJlZm9yZSB7XG5cdHBhZGRpbmctdG9wOiAxMDAlO1xufVxuXG4vKiDilIDilIAgaW1nLXJlc3BvbnNpdmUgKEJvb3RzdHJhcCkg4pSA4pSAICovXG4uY2FyZC10ZXh0IC5pbWctcmVzcG9uc2l2ZSB7XG5cdG1heC13aWR0aDogMTAwJTtcblx0aGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG59XG5cbi8qIOKUgOKUgCByZXNwb25zaXZlIOKUgOKUgCAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDc2MHB4KSB7XG5cdC5jYXJkLXRleHQgPiAucm93LFxuXHQuY2FyZC10ZXh0ID4gZGl2ID4gLnJvdyB7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0fVxuXHQuY2FyZC10ZXh0Omhhcyg+IFtjbGFzcyo9Y29sLWxnLTNdKSB7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQuY2FyZC10ZXh0ID4gW2NsYXNzKj1jb2wtbGctM10ge1xuXHRcdGZsZXgtYmFzaXM6IGNhbGMoNTAlIC0gdmFyKC0tc3BhY2UtMykpO1xuXHR9XG5cdHNlY3Rpb24uY29sdW1ucyAuY29udGFpbmVyID4gLnJvdyB7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHRzZWN0aW9uLmNvbHVtbnMgLmNvbnRhaW5lciA+IC5yb3cgPiBbY2xhc3MqPWNvbC1dIHtcblx0XHRmbGV4LWJhc2lzOiBjYWxjKDUwJSAtIHZhcigtLXNwYWNlLTMpKTtcblx0fVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG5cdC5jYXJkLXRleHQgPiBbY2xhc3MqPWNvbC1sZy0zXSB7XG5cdFx0ZmxleC1iYXNpczogMTAwJTtcblx0fVxuXHRzZWN0aW9uLmNvbHVtbnMgLmNvbnRhaW5lciA+IC5yb3cgPiBbY2xhc3MqPWNvbC1dIHtcblx0XHRmbGV4LWJhc2lzOiAxMDAlO1xuXHR9XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmNzc3gubWFwICovIl19 */