Code Block
Publish code people can use: syntax colors for 13 language options, one-click copy and download of the complete original, line numbers, highlighted, added and removed lines, and a collapsible preview in light, dark or automatic themes. Paste your code in the props panel; the component prepares it for Etch by itself.
Paste it on the Etch canvas with Ctrl+V or ⌘V, then click Save.
{"type":"block","gutenbergBlock":{"blockName":"etch/component","attrs":{"ref":325,"attributes":{}},"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n","\n"]},"timestamp":"2026-10-13T17:27:58.626Z","styles":{"aferan3":{"type":"class","selector":".ed-code-block","collection":"default","css":"/* Styling guide: delete the comment marks around one line to set that token for every code block. */\n /* An uncommented line also wins over the same token on a parent element. For one section only, leave it commented and set the token on a parent class. */\n /* Text size normally follows the Text size prop. Padding accepts normal CSS shorthand (one to four values). */\n\n /* Container and code */\n /* --ed-code-block-bg: light-dark(var(--bg-ultra-light, #fff), #101828); */\n /* --ed-code-block-color: light-dark(var(--text-dark, #1d2939), #f2f4f7); */\n /* --ed-code-block-border-width: var(--border-size, 1px); */\n /* --ed-code-block-border-color: light-dark(var(--border-color-dark, #d0d5dd), #475467); */\n /* --ed-code-block-divider-color: light-dark(var(--border-color-dark, #e4e7ec), #344054); */\n /* --ed-code-block-radius: var(--radius, .75rem); */\n /* --ed-code-block-padding: var(--space-s, 1rem); */\n /* --ed-code-block-shadow: 0 .25rem 1rem rgb(0 0 0 / .06); */\n /* --ed-code-block-font: ui-monospace, SFMono-Regular, Consolas, monospace; */\n /* --ed-code-block-text-size: var(--text-m, 1rem); */\n /* --ed-code-block-line-height: var(--text-line-height, 1.5); */\n\n /* Toolbar, title, badge, caption and converter */\n /* --ed-code-block-ui-font: var(--text-font-family, system-ui, sans-serif); */\n /* --ed-code-block-ui-size: var(--text-s, .875rem); */\n /* --ed-code-block-toolbar-bg: light-dark(var(--bg-light, #f2f4f7), #1d2939); */\n /* --ed-code-block-toolbar-color: var(--ed-code-block-color, light-dark(var(--text-dark, #1d2939), #f2f4f7)); */\n /* --ed-code-block-toolbar-padding: var(--space-xs, .75rem) var(--space-s, 1rem); */\n /* --ed-code-block-gap: var(--space-xs, .5rem); */\n /* --ed-code-block-title-color: currentColor; */\n /* --ed-code-block-title-size: 1em; */\n /* --ed-code-block-title-weight: 700; */\n /* --ed-code-block-muted: light-dark(var(--text-dark, #475467), #b4bdcd); */\n /* --ed-code-block-badge-bg: var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #fff), #101828)); */\n /* --ed-code-block-badge-color: var(--ed-code-block-muted, light-dark(var(--text-dark, #475467), #b4bdcd)); */\n /* --ed-code-block-caption-color: var(--ed-code-block-muted, light-dark(var(--text-dark, #475467), #b4bdcd)); */\n /* --ed-code-block-caption-size: var(--text-s, .875rem); */\n /* --ed-code-block-converter-bg: var(--ed-code-block-toolbar-bg, light-dark(var(--bg-light, #f2f4f7), #1d2939)); */\n\n /* Buttons, icons and focus (Copy, Download, Wrap, Expand) */\n /* --ed-code-block-button-padding: calc(var(--space-xs, 1rem) / 2) var(--space-xs, .75rem); */\n /* --ed-code-block-button-radius: var(--radius, .375rem); */\n /* --ed-code-block-button-bg: var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #fff), #101828)); */\n /* --ed-code-block-button-color: var(--ed-code-block-color, light-dark(var(--text-dark, #1d2939), #f2f4f7)); */\n /* --ed-code-block-button-hover-bg: color-mix(in srgb, currentColor 10%, var(--ed-code-block-button-bg, var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #fff), #101828)))); */\n /* --ed-code-block-button-hover-border: currentColor; */\n /* --ed-code-block-icon-size: 1.25em; */\n /* --ed-code-block-focus-width: 3px; */\n /* --ed-code-block-focus-color: var(--focus-color, light-dark(#175cd3, #fdb022)); */\n\n /* Motion, scrolling, selection and the collapsed fade (0 turns the fade off) */\n /* --ed-code-block-transition: var(--transition, .22s ease); */\n /* --ed-code-block-scrollbar-width: thin; */\n /* --ed-code-block-scrollbar-thumb: light-dark(var(--text-dark-muted, #667085), #98a2b3); */\n /* --ed-code-block-scrollbar-track: transparent; */\n /* --ed-code-block-selection-bg: Highlight; */\n /* --ed-code-block-selection-color: HighlightText; */\n /* --ed-code-block-fade-size: 2.5rem; */\n\n /* Line annotations (dedicated presentation colors) */\n /* --ed-code-block-line-number-color: light-dark(#475467, #b4bdcd); */\n /* --ed-code-block-line-number-gap: var(--space-xs, .75rem); */\n /* --ed-code-block-highlight-bg: light-dark(#f0f4ff, #1b2940); */\n /* --ed-code-block-highlight-border: light-dark(#175cd3, #84caff); */\n /* --ed-code-block-added-bg: light-dark(#ecfdf3, #0c2a1c); */\n /* --ed-code-block-added-color: light-dark(#067647, #75e0a7); */\n /* --ed-code-block-removed-bg: light-dark(#fef3f2, #3a1414); */\n /* --ed-code-block-removed-color: light-dark(#b42318, #fda29b); */\n\n /* Syntax colors (no ACSS syntax palette is assumed) */\n /* --ed-code-block-syntax-keyword: light-dark(#6941c6, #d6bbfb); */\n /* --ed-code-block-syntax-string: light-dark(#05603a, #6ce9a6); */\n /* --ed-code-block-syntax-number: light-dark(#93370d, #fec84b); */\n /* --ed-code-block-syntax-tag: light-dark(#b42318, #fda29b); */\n /* --ed-code-block-syntax-function: light-dark(#175cd3, #84caff); */\n /* --ed-code-block-syntax-comment: light-dark(#475467, #98a2b3); */\n /* --ed-code-block-syntax-meta: light-dark(#344054, #d0d5dd); */\n /* Full token table, usage and theme examples: component README, Styling. */\n\n /* ACSS color assignments may already use light-dark(). Resolve their light\n roles once. The dark preset uses the palette paired with our syntax colors,\n avoiding double inversion on adaptive ACSS sites. Public tokens override\n either scheme, including inherited light-dark() values. */\n box-sizing: border-box;\n margin: 0;\n font-family: var(--ed-code-block-ui-font, var(--text-font-family, system-ui, sans-serif));\n box-shadow: var(--ed-code-block-shadow, 0 .25rem 1rem rgb(0 0 0 / .06));\n color-scheme: light dark;\n min-inline-size: 0;\n max-inline-size: 100%;\n border: var(--ed-code-block-border-width, var(--border-size, 1px)) solid var(--ed-code-block-border-color, light-dark(var(--border-color-dark, #d0d5dd), #475467));\n border-radius: var(--ed-code-block-radius, var(--radius, .75rem));\n background: var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #ffffff), #101828));\n color: var(--ed-code-block-color, light-dark(var(--text-dark, #1d2939), #f2f4f7));\n font-size: var(--ed-code-block-ui-size, var(--text-s, .875rem));\n\n &[data-ed-code-block-theme=\"light\"] { color-scheme: light; }\n &[data-ed-code-block-theme=\"dark\"] { color-scheme: dark; }\n /* Site: inherit the page's color-scheme (ACSS Website Scheme, a light/dark switch on html, .scheme--dark wrappers). */\n &[data-ed-code-block-theme=\"site\"] { color-scheme: inherit; }\n /* Builder only: no 35 px placeholder for empty status, caption, title or file name (Etch empty elements). */\n & .ed-code-block__status,\n & .ed-code-block__prepare-status,\n & .ed-code-block__caption,\n & .ed-code-block__title,\n & .ed-code-block__file-name { --empty-element-size: 0; }\n & .ed-code-block__toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--ed-code-block-gap, var(--space-xs, .5rem));\n padding: var(--ed-code-block-toolbar-padding, var(--space-xs, .75rem) var(--space-s, 1rem));\n background: var(--ed-code-block-toolbar-bg, light-dark(var(--bg-light, #f2f4f7), #1d2939));\n color: var(--ed-code-block-toolbar-color, var(--ed-code-block-color, light-dark(var(--text-dark, #1d2939), #f2f4f7)));\n border-start-start-radius: inherit;\n border-start-end-radius: inherit;\n border-block-end: 1px solid var(--ed-code-block-divider-color, light-dark(var(--border-color-dark, #e4e7ec), #344054));\n }\n /* A toolbar with nothing visible (no title, file name, badge or button) takes no space. */\n & .ed-code-block__toolbar:not(:has(.ed-code-block__title:not([hidden], :empty), .ed-code-block__file-name:not([hidden], :empty), .ed-code-block__language:not([hidden]), .ed-code-block__button:not([hidden]))) { display: none; }\n & .ed-code-block__title {\n color: var(--ed-code-block-title-color, currentColor);\n font-size: var(--ed-code-block-title-size, 1em);\n font-weight: var(--ed-code-block-title-weight, 700);\n }\n & .ed-code-block__title:empty,\n & .ed-code-block__file-name:empty,\n & .ed-code-block__caption:empty { display: none; }\n & .ed-code-block__title,\n & .ed-code-block__file-name,\n & .ed-code-block__language { min-inline-size: 0; overflow-wrap: anywhere; }\n & .ed-code-block__file-name { font-family: var(--ed-code-block-font, ui-monospace, SFMono-Regular, Consolas, monospace); }\n & .ed-code-block__file-name { color: var(--ed-code-block-muted, light-dark(var(--text-dark, #475467), #b4bdcd)); }\n & .ed-code-block__language {\n padding: .25em .65em;\n border-radius: var(--ed-code-block-button-radius, var(--radius, .375rem));\n background: var(--ed-code-block-badge-bg, var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #fff), #101828)));\n color: var(--ed-code-block-badge-color, var(--ed-code-block-muted, light-dark(var(--text-dark, #475467), #b4bdcd)));\n font-family: var(--ed-code-block-font, ui-monospace, SFMono-Regular, Consolas, monospace);\n font-size: .85em;\n font-weight: 600;\n }\n & .ed-code-block__controls { display: flex; flex-wrap: wrap; min-inline-size: 0; margin-inline-start: auto; gap: var(--ed-code-block-gap, var(--space-xs, .5rem)); }\n & .ed-code-block__button {\n appearance: none;\n cursor: pointer;\n display: inline-grid;\n place-items: center;\n font: inherit;\n line-height: 1.4;\n text-align: center;\n text-transform: none;\n letter-spacing: normal;\n white-space: normal;\n overflow-wrap: anywhere;\n min-block-size: 2.75rem;\n max-inline-size: 100%;\n padding: var(--ed-code-block-button-padding, calc(var(--space-xs, 1rem) / 2) var(--space-xs, .75rem));\n border: 1px solid var(--ed-code-block-border-color, light-dark(var(--border-color-dark, #d0d5dd), #475467));\n border-radius: var(--ed-code-block-button-radius, var(--radius, .375rem));\n background: var(--ed-code-block-button-bg, var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #ffffff), #101828)));\n color: var(--ed-code-block-button-color, var(--ed-code-block-color, light-dark(var(--text-dark, #1d2939), #f2f4f7)));\n }\n & .ed-code-block__button {\n transition: background-color var(--ed-code-block-transition, var(--transition, .22s ease)),\n border-color var(--ed-code-block-transition, var(--transition, .22s ease)),\n color var(--ed-code-block-transition, var(--transition, .22s ease)),\n transform var(--ed-code-block-transition, var(--transition, .22s ease));\n }\n /* Label and copy confirmation share one cell, so the button keeps its size. The label stays the accessible name. */\n & .ed-code-block__button > * { grid-area: 1 / 1; }\n & .ed-code-block__button[data-ed-code-block-feedback] > .ed-code-block__button-label { opacity: 0; }\n & .ed-code-block__icon {\n display: none;\n inline-size: var(--ed-code-block-icon-size, 1.25em);\n block-size: var(--ed-code-block-icon-size, 1.25em);\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n & .ed-code-block__button:hover,\n & .ed-code-block__button[data-wrapped=\"true\"] {\n background: var(--ed-code-block-button-hover-bg, color-mix(in srgb, currentColor 10%, var(--ed-code-block-button-bg, var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #fff), #101828)))));\n border-color: var(--ed-code-block-button-hover-border, currentColor);\n }\n & .ed-code-block__button[data-wrapped=\"true\"] { box-shadow: inset 0 -2px currentColor; }\n & .ed-code-block__button:active { transform: translateY(1px); }\n & .ed-code-block__button:disabled { cursor: default; opacity: .6; }\n & .ed-code-block__button:focus-visible,\n & .ed-code-block__prepare textarea:focus-visible,\n & .ed-code-block__source:focus-visible,\n & .ed-code-block__view:focus-visible {\n outline: var(--ed-code-block-focus-width, 3px) solid var(--ed-code-block-focus-color, var(--focus-color, light-dark(#175cd3, #fdb022)));\n outline-offset: 2px;\n }\n /* Icons toolbar: title over file name, then badge and square icon buttons in one row. */\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__toolbar {\n container: ed-code-block-toolbar / inline-size;\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto auto;\n row-gap: 0;\n }\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__title,\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__file-name { grid-column: 1; }\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__title:has(+ .ed-code-block__file-name:is([hidden], :empty)),\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__title:is([hidden], :empty) + .ed-code-block__file-name { grid-row: 1 / span 2; }\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__language { grid-column: 2; grid-row: 1 / span 2; }\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__controls { grid-column: 3; grid-row: 1 / span 2; justify-content: end; gap: 2px; }\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__button {\n position: relative;\n min-inline-size: 2.5rem;\n min-block-size: 2.5rem;\n padding: 0;\n }\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__icon { display: block; }\n /* Its label is the accessible name; it shows as a tooltip on hover and keyboard focus (Escape hides it). */\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__button-label,\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__button-feedback {\n position: absolute;\n z-index: 2;\n inset-block-start: 100%;\n inset-inline-end: 0;\n box-sizing: border-box;\n inline-size: 1px;\n block-size: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-radius: var(--ed-code-block-button-radius, var(--radius, .375rem));\n background: var(--ed-code-block-color, light-dark(var(--text-dark, #1d2939), #f2f4f7));\n background-clip: padding-box;\n color: var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #ffffff), #101828));\n font-size: var(--ed-code-block-ui-size, var(--text-s, .875rem));\n font-weight: 500;\n line-height: 1.4;\n text-align: start;\n }\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__button[data-ed-code-block-tip=\"start\"] > :is(.ed-code-block__button-label, .ed-code-block__button-feedback) { inset-inline: 0 auto; }\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__button:focus-visible:not([data-ed-code-block-tip-dismissed], [data-ed-code-block-feedback]) > .ed-code-block__button-label,\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__button[data-ed-code-block-feedback]:not([data-ed-code-block-tip-dismissed]) > .ed-code-block__button-feedback {\n inline-size: max-content;\n max-inline-size: min(16rem, 80vw);\n block-size: auto;\n overflow: visible;\n clip-path: none;\n white-space: normal;\n /* The transparent top border bridges the gap, so the pointer can move onto the label. */\n border-block-start: .375rem solid transparent;\n padding: .3em .65em;\n }\n /* Touch browsers keep :hover on the last tapped button; only a hovering pointer shows the label. */\n @media (hover: hover) {\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__button:hover:not([data-ed-code-block-tip-dismissed], [data-ed-code-block-feedback]) > .ed-code-block__button-label {\n inline-size: max-content;\n max-inline-size: min(16rem, 80vw);\n block-size: auto;\n overflow: visible;\n clip-path: none;\n white-space: normal;\n border-block-start: .375rem solid transparent;\n padding: .3em .65em;\n }\n }\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__button[data-ed-code-block-feedback] > .ed-code-block__button-label { opacity: 1; }\n @container ed-code-block-toolbar (inline-size < 21em) {\n &[data-ed-code-block-toolbar-style=\"icons\"] .ed-code-block__toolbar > * { grid-column: 1 / -1; grid-row: auto; justify-self: start; }\n }\n & .ed-code-block__source,\n & .ed-code-block__view {\n box-sizing: border-box;\n margin: 0;\n min-inline-size: 0;\n max-inline-size: 100%;\n overflow: auto;\n padding: var(--ed-code-block-padding, var(--space-s, 1rem));\n color: inherit;\n background: transparent;\n border: 0;\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n tab-size: 4;\n text-align: start;\n direction: ltr;\n font-family: var(--ed-code-block-font, ui-monospace, SFMono-Regular, Consolas, monospace);\n font-size: var(--ed-code-block-text-size, var(--text-m, 1rem));\n line-height: var(--ed-code-block-line-height, var(--text-line-height, 1.5));\n }\n /* The runtime sets the collapsed and expanded heights through a private custom property. */\n & .ed-code-block__view { max-height: var(--_ed-code-block-max-height, none); transition: max-height var(--ed-code-block-transition, var(--transition, .22s ease)); }\n & .ed-code-block__source,\n & .ed-code-block__view,\n & .ed-code-block__prepare textarea {\n scrollbar-gutter: stable;\n scrollbar-width: var(--ed-code-block-scrollbar-width, thin);\n scrollbar-color: var(--ed-code-block-scrollbar-thumb, light-dark(var(--text-dark-muted, #667085), #98a2b3)) var(--ed-code-block-scrollbar-track, transparent);\n }\n & :is(.ed-code-block__source, .ed-code-block__view, .ed-code-block__prepare textarea)::-webkit-scrollbar { width: 10px; height: 10px; }\n & :is(.ed-code-block__source, .ed-code-block__view, .ed-code-block__prepare textarea)::-webkit-scrollbar-track,\n & :is(.ed-code-block__source, .ed-code-block__view, .ed-code-block__prepare textarea)::-webkit-scrollbar-corner { background: var(--ed-code-block-scrollbar-track, transparent); }\n & :is(.ed-code-block__source, .ed-code-block__view, .ed-code-block__prepare textarea)::-webkit-scrollbar-thumb {\n border: 3px solid transparent;\n border-radius: 100vw;\n background: var(--ed-code-block-scrollbar-thumb, light-dark(var(--text-dark-muted, #667085), #98a2b3));\n background-clip: padding-box;\n }\n & :is(.ed-code-block__source, .ed-code-block__view) ::selection {\n background-color: var(--ed-code-block-selection-bg, Highlight);\n color: var(--ed-code-block-selection-color, HighlightText);\n }\n & .ed-code-block__view[data-size=\"small\"] { font-size: var(--ed-code-block-text-size, var(--text-s, .875rem)); }\n & .ed-code-block__view[data-size=\"large\"] { font-size: var(--ed-code-block-text-size, var(--text-l, 1.25rem)); }\n & .ed-code-block__source > code,\n & .ed-code-block__view > code {\n display: block;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n white-space: pre;\n overflow-wrap: normal;\n word-break: normal;\n text-shadow: none;\n tab-size: inherit;\n }\n & .ed-code-block__view[data-wrap=\"true\"] > code { white-space: pre-wrap; overflow-wrap: anywhere; }\n /* \"There is more\": a decorative fade over the bottom of a collapsed preview, clear of the scrollbars. */\n & .ed-code-block__fade {\n position: relative;\n z-index: 1;\n direction: ltr;\n block-size: 0;\n border-radius: inherit;\n pointer-events: none;\n }\n & .ed-code-block__fade::before {\n content: \"\";\n position: absolute;\n inset-inline: 0 var(--_ed-code-block-scrollbar-inline, 0px);\n inset-block-end: var(--_ed-code-block-scrollbar-block, 0px);\n block-size: var(--ed-code-block-fade-size, 2.5rem);\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n background: linear-gradient(to bottom, transparent, var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #ffffff), #101828)));\n pointer-events: none;\n }\n /* Keep the real newline text between inline rows. A grid of rows can omit\n empty logical lines when browsers serialize a native text selection. */\n & .ed-code-block__view > code[data-annotated=\"true\"] {\n display: block;\n inline-size: max-content;\n min-inline-size: 100%;\n white-space: pre;\n }\n & .ed-code-block__line {\n --_ed-code-block-gutter: 0px;\n box-sizing: border-box;\n position: relative;\n display: inline-block;\n inline-size: 100%;\n min-inline-size: 0;\n min-block-size: 1lh;\n vertical-align: top;\n border-inline-start: 3px solid transparent;\n padding-inline-start: calc(.5ch + var(--_ed-code-block-gutter));\n }\n & [data-line-numbers=\"true\"] > .ed-code-block__line {\n --_ed-code-block-gutter: calc(var(--_ed-code-block-line-number-width, 1ch) + var(--ed-code-block-line-number-gap, var(--space-xs, .75rem)));\n }\n /* Added/removed lines reserve a +/− column after the numbers. */\n & [data-ed-code-block-diff=\"true\"] > .ed-code-block__line { padding-inline-start: calc(2.5ch + var(--_ed-code-block-gutter)); }\n & .ed-code-block__line-number {\n position: absolute;\n inset-inline-start: .5ch;\n inset-block-start: 0;\n inline-size: var(--_ed-code-block-line-number-width, 1ch);\n color: var(--ed-code-block-line-number-color, light-dark(#475467, #b4bdcd));\n text-align: end;\n user-select: none;\n -webkit-user-select: none;\n }\n & .ed-code-block__line-number::before { content: attr(data-line-number); }\n & .ed-code-block__line-marker {\n position: absolute;\n inset-inline-start: calc(.5ch + var(--_ed-code-block-gutter));\n inset-block-start: 0;\n inline-size: 1ch;\n font-weight: 700;\n user-select: none;\n -webkit-user-select: none;\n }\n & [data-ed-code-block-change=\"added\"] > .ed-code-block__line-marker::before { content: \"+\"; }\n & [data-ed-code-block-change=\"removed\"] > .ed-code-block__line-marker::before { content: \"−\"; }\n & .ed-code-block__line-content { min-inline-size: 0; white-space: pre; overflow-wrap: normal; }\n & .ed-code-block__view[data-wrap=\"true\"] > code[data-annotated=\"true\"] { inline-size: auto; }\n & .ed-code-block__view[data-wrap=\"true\"] .ed-code-block__line-content { white-space: pre-wrap; overflow-wrap: anywhere; }\n & .ed-code-block__line[data-highlighted=\"true\"] {\n background: var(--ed-code-block-highlight-bg, light-dark(#f0f4ff, #1b2940));\n border-inline-start-color: var(--ed-code-block-highlight-border, light-dark(#175cd3, #84caff));\n }\n & .ed-code-block__line[data-ed-code-block-change=\"added\"] {\n background: var(--ed-code-block-added-bg, light-dark(#ecfdf3, #0c2a1c));\n border-inline-start-color: var(--ed-code-block-added-color, light-dark(#067647, #75e0a7));\n }\n & .ed-code-block__line[data-ed-code-block-change=\"removed\"] {\n background: var(--ed-code-block-removed-bg, light-dark(#fef3f2, #3a1414));\n border-inline-start-color: var(--ed-code-block-removed-color, light-dark(#b42318, #fda29b));\n }\n & [data-ed-code-block-change=\"added\"] > .ed-code-block__line-marker { color: var(--ed-code-block-added-color, light-dark(#067647, #75e0a7)); }\n & [data-ed-code-block-change=\"removed\"] > .ed-code-block__line-marker { color: var(--ed-code-block-removed-color, light-dark(#b42318, #fda29b)); }\n & .ed-code-block__annotations:not([data-unavailable=\"true\"]) {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n & .ed-code-block__annotations[data-unavailable=\"true\"],\n & .ed-code-block__status {\n display: block;\n padding: var(--ed-code-block-padding, var(--space-s, 1rem));\n padding-block: 0;\n overflow-wrap: anywhere;\n }\n & .ed-code-block__annotations[data-unavailable=\"true\"],\n & .ed-code-block__status:not(:empty) { padding-block: .5em; }\n /* A copy confirmation is shown on the button; the status keeps it for screen readers only. */\n & .ed-code-block__status[data-ed-code-block-status=\"success\"] {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n & .ed-code-block__caption {\n display: block;\n padding: var(--ed-code-block-padding, var(--space-s, 1rem));\n padding-block: .6em;\n border-block-start: 1px solid var(--ed-code-block-divider-color, light-dark(var(--border-color-dark, #e4e7ec), #344054));\n color: var(--ed-code-block-caption-color, var(--ed-code-block-muted, light-dark(var(--text-dark, #475467), #b4bdcd)));\n font-size: var(--ed-code-block-caption-size, var(--text-s, .875rem));\n line-height: var(--text-line-height, 1.5);\n overflow-wrap: anywhere;\n }\n & .ed-code-block__prepare {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: var(--ed-code-block-gap, var(--space-xs, .5rem));\n min-inline-size: 0;\n margin: 0;\n padding: var(--ed-code-block-padding, var(--space-s, 1rem));\n border: 0;\n border-block-end: 1px solid var(--ed-code-block-divider-color, light-dark(var(--border-color-dark, #e4e7ec), #344054));\n border-radius: inherit;\n background: var(--ed-code-block-converter-bg, var(--ed-code-block-toolbar-bg, light-dark(var(--bg-light, #f2f4f7), #1d2939)));\n color: inherit;\n }\n & .ed-code-block__prepare legend { float: inline-start; max-inline-size: 100%; padding: 0; font-weight: 700; overflow-wrap: anywhere; }\n & .ed-code-block__prepare-help { color: var(--ed-code-block-muted, light-dark(var(--text-dark, #475467), #b4bdcd)); line-height: var(--text-line-height, 1.5); max-inline-size: 80ch; }\n & .ed-code-block__prepare p { margin: 0; overflow-wrap: anywhere; }\n & .ed-code-block__prepare-label { display: grid; grid-template-columns: minmax(0, 1fr); gap: .5em; min-inline-size: 0; overflow-wrap: anywhere; }\n & .ed-code-block__prepare textarea {\n box-sizing: border-box;\n inline-size: 100%;\n min-inline-size: 0;\n max-inline-size: 100%;\n padding: var(--ed-code-block-button-padding, calc(var(--space-xs, 1rem) / 2) var(--space-xs, .75rem));\n border: 1px solid var(--ed-code-block-border-color, light-dark(var(--border-color-dark, #d0d5dd), #475467));\n border-radius: var(--ed-code-block-button-radius, var(--radius, .375rem));\n color: inherit;\n background: var(--ed-code-block-bg, light-dark(var(--bg-ultra-light, #ffffff), #101828));\n font: inherit;\n font-family: var(--ed-code-block-font, ui-monospace, SFMono-Regular, Consolas, monospace);\n line-height: var(--ed-code-block-line-height, var(--text-line-height, 1.5));\n text-align: start;\n direction: ltr;\n tab-size: 4;\n resize: vertical;\n }\n & .ed-code-block__prepare-copy { justify-self: start; }\n & .ed-code-block__hl-keyword,\n & .ed-code-block__hl-selector-tag,\n & .ed-code-block__hl-literal,\n & .ed-code-block__hl-type { color: var(--ed-code-block-syntax-keyword, light-dark(#6941c6, #d6bbfb)); }\n & .ed-code-block__hl-string,\n & .ed-code-block__hl-regexp,\n & .ed-code-block__hl-addition,\n & .ed-code-block__hl-code { color: var(--ed-code-block-syntax-string, light-dark(#05603a, #6ce9a6)); }\n & .ed-code-block__hl-comment,\n & .ed-code-block__hl-quote { color: var(--ed-code-block-syntax-comment, light-dark(#475467, #98a2b3)); }\n & .ed-code-block__hl-number,\n & .ed-code-block__hl-symbol,\n & .ed-code-block__hl-bullet { color: var(--ed-code-block-syntax-number, light-dark(#93370d, #fec84b)); }\n & .ed-code-block__hl-title,\n & .ed-code-block__hl-section,\n & .ed-code-block__hl-link,\n & [class~=\"ed-code-block__hl-built_in\"] { color: var(--ed-code-block-syntax-function, light-dark(#175cd3, #84caff)); }\n & .ed-code-block__hl-name,\n & .ed-code-block__hl-attr,\n & .ed-code-block__hl-attribute,\n & .ed-code-block__hl-selector-class,\n & .ed-code-block__hl-selector-id,\n & .ed-code-block__hl-selector-pseudo,\n & .ed-code-block__hl-variable,\n & [class~=\"ed-code-block__hl-template-variable\"],\n & .ed-code-block__hl-deletion { color: var(--ed-code-block-syntax-tag, light-dark(#b42318, #fda29b)); }\n & .ed-code-block__hl-meta { color: var(--ed-code-block-syntax-meta, light-dark(#344054, #d0d5dd)); }\n & .ed-code-block__hl-section,\n & .ed-code-block__hl-strong { font-weight: bold; }\n & .ed-code-block__hl-emphasis { font-style: italic; }\n & .ed-code-block__hl-link { text-decoration: underline; }\n @media (prefers-reduced-motion: reduce) {\n & .ed-code-block__button,\n & .ed-code-block__view { transition: none; }\n & .ed-code-block__button:active { transform: none; }\n }\n @media (forced-colors: active) {\n box-shadow: none;\n & .ed-code-block__source,\n & .ed-code-block__view,\n & .ed-code-block__prepare textarea { scrollbar-color: auto; scrollbar-width: auto; }\n & :is(.ed-code-block__source, .ed-code-block__view, .ed-code-block__prepare textarea)::-webkit-scrollbar-thumb { background-color: CanvasText; }\n & :is(.ed-code-block__source, .ed-code-block__view, .ed-code-block__prepare textarea)::-webkit-scrollbar-track,\n & :is(.ed-code-block__source, .ed-code-block__view, .ed-code-block__prepare textarea)::-webkit-scrollbar-corner { background-color: Canvas; }\n & .ed-code-block__view span { color: CanvasText; }\n /* A transparent edge would be forced visible; unmarked rows blend into Canvas. */\n & .ed-code-block__line { border-inline-start-color: Canvas; }\n & .ed-code-block__line[data-highlighted=\"true\"] { background: Canvas; border-inline-start-color: Highlight; }\n /* Added and removed lines keep their +/− marker; the edge uses system colors. */\n & .ed-code-block__line[data-ed-code-block-change] { background: Canvas; border-inline-start-color: CanvasText; }\n & [data-ed-code-block-change] > .ed-code-block__line-marker { color: CanvasText; }\n & .ed-code-block__button { background: ButtonFace; color: ButtonText; border-color: ButtonText; }\n &[data-ed-code-block-toolbar-style=\"icons\"] :is(.ed-code-block__button-label, .ed-code-block__button-feedback) { background: Canvas; color: CanvasText; outline: 1px solid CanvasText; }\n & .ed-code-block__fade { display: none; }\n }\n /* Print the whole code, wrapped, without controls; keep numbers and line marks legible. */\n @media print {\n box-shadow: none;\n &, &[data-ed-code-block-theme] { color-scheme: light; }\n & .ed-code-block__view,\n & .ed-code-block__source { max-height: none; overflow: visible; }\n & .ed-code-block__view > code,\n & .ed-code-block__source > code,\n & .ed-code-block__line-content { white-space: pre-wrap; overflow-wrap: anywhere; }\n & .ed-code-block__view > code[data-annotated=\"true\"] { inline-size: auto; }\n & .ed-code-block__controls,\n & .ed-code-block__prepare,\n & .ed-code-block__status,\n & .ed-code-block__fade { display: none; }\n & .ed-code-block__toolbar:not(:has(.ed-code-block__title:not([hidden], :empty), .ed-code-block__file-name:not([hidden], :empty), .ed-code-block__language:not([hidden]))) { display: none; }\n & .ed-code-block__line { break-inside: avoid; -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n }\n & [hidden] { display: none; }","readonly":false},"2zgou7m":{"type":"class","selector":".ed-code-block__prepare","collection":"default","css":"","readonly":false},"j927dto":{"type":"class","selector":".ed-code-block__prepare-help","collection":"default","css":"","readonly":false},"qlyt5ei":{"type":"class","selector":".ed-code-block__prepare-label","collection":"default","css":"","readonly":false},"ad3a7zk":{"type":"class","selector":".ed-code-block__prepare-input","collection":"default","css":"","readonly":false},"8e8h078":{"type":"class","selector":".ed-code-block__prepare-output","collection":"default","css":"","readonly":false},"nlb360x":{"type":"class","selector":".ed-code-block__button","collection":"default","css":"","readonly":false},"0f1bn6m":{"type":"class","selector":".ed-code-block__prepare-copy","collection":"default","css":"","readonly":false},"s858stf":{"type":"class","selector":".ed-code-block__prepare-status","collection":"default","css":"","readonly":false},"dtvwrya":{"type":"class","selector":".ed-code-block__toolbar","collection":"default","css":"","readonly":false},"ylw4l65":{"type":"class","selector":".ed-code-block__title","collection":"default","css":"","readonly":false},"m59ailc":{"type":"class","selector":".ed-code-block__file-name","collection":"default","css":"","readonly":false},"r3ps61i":{"type":"class","selector":".ed-code-block__language","collection":"default","css":"","readonly":false},"xixyids":{"type":"class","selector":".ed-code-block__controls","collection":"default","css":"","readonly":false},"uxqrcax":{"type":"class","selector":".ed-code-block__copy","collection":"default","css":"","readonly":false},"hor788t":{"type":"class","selector":".ed-code-block__download","collection":"default","css":"","readonly":false},"w0yvqk9":{"type":"class","selector":".ed-code-block__wrap","collection":"default","css":"","readonly":false},"1dya0d1":{"type":"class","selector":".ed-code-block__expand","collection":"default","css":"","readonly":false},"82859c5":{"type":"class","selector":".ed-code-block__source","collection":"default","css":"","readonly":false},"6i12mxf":{"type":"class","selector":".ed-code-block__labels","collection":"default","css":"","readonly":false},"l4b5meg":{"type":"class","selector":".ed-code-block__status","collection":"default","css":"","readonly":false},"u2q7siu":{"type":"class","selector":".ed-code-block__caption","collection":"default","css":"","readonly":false}},"components":{"325":{"id":325,"legacyId":"","name":"ED Code Block","key":"EdCodeBlock","blocks":[{"blockName":"etch/element","attrs":{"metadata":{"name":"Ed Code Block"},"script":{"code":"LyohIEVEIENvZGUgQmxvY2sgMS4wLjAtYmV0YS4yCkNvcHlyaWdodCAyMDI2IFRvbSBDaG1pZWwsIGh0dHBzOi8vZXRjaGRldmVsb3Blci5jb20KU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEZTTC0xLjEtTUlUIChodHRwczovL2V0Y2hkZXZlbG9wZXIuY29tL2xpY2Vuc2UvKQoKSGlnaGxpZ2h0LmpzIDExLjEyLjAKQlNEIDMtQ2xhdXNlIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAwNiwgSXZhbiBTYWdhbGFldi4KQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCiogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCgoqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCgoqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQpGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTApEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgpTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgpDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLApPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQpPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKKi8KInVzZSBzdHJpY3QiOygoKT0+e3ZhciB4bj1PYmplY3QuY3JlYXRlO3ZhciBmdD1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIFNuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dmFyIGtuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO3ZhciB3bj1PYmplY3QuZ2V0UHJvdG90eXBlT2YsQW49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgVG49KGUsdCk9PigpPT57dHJ5e3JldHVybiB0fHxlKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHN9Y2F0Y2gobil7dGhyb3cgdD0wLG59fTt2YXIgT249KGUsdCxuLHIpPT57aWYodCYmdHlwZW9mIHQ9PSJvYmplY3QifHx0eXBlb2YgdD09ImZ1bmN0aW9uIilmb3IobGV0IHMgb2Yga24odCkpIUFuLmNhbGwoZSxzKSYmcyE9PW4mJmZ0KGUscyx7Z2V0OigpPT50W3NdLGVudW1lcmFibGU6IShyPVNuKHQscykpfHxyLmVudW1lcmFibGV9KTtyZXR1cm4gZX07dmFyIE1uPShlLHQsbik9PihuPWUhPW51bGw/eG4od24oZSkpOnt9LE9uKHR8fCFlfHwhZS5fX2VzTW9kdWxlP2Z0KG4sImRlZmF1bHQiLHt2YWx1ZTplLGVudW1lcmFibGU6ITB9KTpuLGUpKTt2YXIgQnQ9VG4oKGNpLER0KT0+e2Z1bmN0aW9uIHh0KGUpe3JldHVybiBlIGluc3RhbmNlb2YgTWFwP2UuY2xlYXI9ZS5kZWxldGU9ZS5zZXQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1hcCBpcyByZWFkLW9ubHkiKX06ZSBpbnN0YW5jZW9mIFNldCYmKGUuYWRkPWUuY2xlYXI9ZS5kZWxldGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInNldCBpcyByZWFkLW9ubHkiKX0pLE9iamVjdC5mcmVlemUoZSksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuZm9yRWFjaCh0PT57bGV0IG49ZVt0XSxyPXR5cGVvZiBuOyhyPT09Im9iamVjdCJ8fHI9PT0iZnVuY3Rpb24iKSYmIU9iamVjdC5pc0Zyb3plbihuKSYmeHQobil9KSxlfXZhciBQZT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0LmRhdGE9PT12b2lkIDAmJih0LmRhdGE9e30pLHRoaXMuZGF0YT10LmRhdGEsdGhpcy5pc01hdGNoSWdub3JlZD0hMX1pZ25vcmVNYXRjaCgpe3RoaXMuaXNNYXRjaElnbm9yZWQ9ITB9fTtmdW5jdGlvbiBTdChlKXtyZXR1cm4gZS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjeDI3OyIpfWZ1bmN0aW9uIGRlKGUsLi4udCl7bGV0IG49T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihyKXtmb3IobGV0IHMgaW4gciluW3NdPXJbc119KSxufXZhciBVbj0iPC9zcGFuPiIsaHQ9ZT0+ISFlLnNjb3BlLHpuPShlLHtwcmVmaXg6dH0pPT57aWYoZS5zdGFydHNXaXRoKCJsYW5ndWFnZToiKSlyZXR1cm4gZS5yZXBsYWNlKCJsYW5ndWFnZToiLCJsYW5ndWFnZS0iKTtpZihlLmluY2x1ZGVzKCIuIikpe2xldCBuPWUuc3BsaXQoIi4iKTtyZXR1cm5bYCR7dH0ke24uc2hpZnQoKX1gLC4uLm4ubWFwKChyLHMpPT5gJHtyfSR7Il8iLnJlcGVhdChzKzEpfWApXS5qb2luKCIgIil9cmV0dXJuYCR7dH0ke2V9YH0sWGU9Y2xhc3N7Y29uc3RydWN0b3IodCxuKXt0aGlzLmJ1ZmZlcj0iIix0aGlzLmNsYXNzUHJlZml4PW4uY2xhc3NQcmVmaXgsdC53YWxrKHRoaXMpfWFkZFRleHQodCl7dGhpcy5idWZmZXIrPVN0KHQpfW9wZW5Ob2RlKHQpe2lmKCFodCh0KSlyZXR1cm47bGV0IG49em4odC5zY29wZSx7cHJlZml4OnRoaXMuY2xhc3NQcmVmaXh9KTt0aGlzLnNwYW4obil9Y2xvc2VOb2RlKHQpe2h0KHQpJiYodGhpcy5idWZmZXIrPVVuKX12YWx1ZSgpe3JldHVybiB0aGlzLmJ1ZmZlcn1zcGFuKHQpe3RoaXMuYnVmZmVyKz1gPHNwYW4gY2xhc3M9IiR7dH0iPmB9fSxfdD0oZT17fSk9PntsZXQgdD17Y2hpbGRyZW46W119O3JldHVybiBPYmplY3QuYXNzaWduKHQsZSksdH0sWWU9Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe3RoaXMucm9vdE5vZGU9X3QoKSx0aGlzLnN0YWNrPVt0aGlzLnJvb3ROb2RlXX1nZXQgdG9wKCl7cmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV19Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5yb290Tm9kZX1hZGQodCl7dGhpcy50b3AuY2hpbGRyZW4ucHVzaCh0KX1vcGVuTm9kZSh0KXtsZXQgbj1fdCh7c2NvcGU6dH0pO3RoaXMuYWRkKG4pLHRoaXMuc3RhY2sucHVzaChuKX1jbG9zZU5vZGUoKXtpZih0aGlzLnN0YWNrLmxlbmd0aD4xKXJldHVybiB0aGlzLnN0YWNrLnBvcCgpfWNsb3NlQWxsTm9kZXMoKXtmb3IoO3RoaXMuY2xvc2VOb2RlKCk7KTt9dG9KU09OKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucm9vdE5vZGUsbnVsbCw0KX13YWxrKHQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLl93YWxrKHQsdGhpcy5yb290Tm9kZSl9c3RhdGljIF93YWxrKHQsbil7cmV0dXJuIHR5cGVvZiBuPT0ic3RyaW5nIj90LmFkZFRleHQobik6bi5jaGlsZHJlbiYmKHQub3Blbk5vZGUobiksbi5jaGlsZHJlbi5mb3JFYWNoKHI9PnRoaXMuX3dhbGsodCxyKSksdC5jbG9zZU5vZGUobikpLHR9c3RhdGljIF9jb2xsYXBzZSh0KXt0eXBlb2YgdCE9InN0cmluZyImJnQuY2hpbGRyZW4mJih0LmNoaWxkcmVuLmV2ZXJ5KG49PnR5cGVvZiBuPT0ic3RyaW5nIik/dC5jaGlsZHJlbj1bdC5jaGlsZHJlbi5qb2luKCIiKV06dC5jaGlsZHJlbi5mb3JFYWNoKG49PntlLl9jb2xsYXBzZShuKX0pKX19LFZlPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLm9wdGlvbnM9dH1hZGRUZXh0KHQpe3QhPT0iIiYmdGhpcy5hZGQodCl9c3RhcnRTY29wZSh0KXt0aGlzLm9wZW5Ob2RlKHQpfWVuZFNjb3BlKCl7dGhpcy5jbG9zZU5vZGUoKX1fX2FkZFN1Ymxhbmd1YWdlKHQsbil7bGV0IHI9dC5yb290O24mJihyLnNjb3BlPWBsYW5ndWFnZToke259YCksdGhpcy5hZGQocil9dG9IVE1MKCl7cmV0dXJuIG5ldyBYZSh0aGlzLHRoaXMub3B0aW9ucykudmFsdWUoKX1maW5hbGl6ZSgpe3JldHVybiB0aGlzLmNsb3NlQWxsTm9kZXMoKSwhMH19O2Z1bmN0aW9uIFRlKGUpe3JldHVybiBlP3R5cGVvZiBlPT0ic3RyaW5nIj9lOmUuc291cmNlOm51bGx9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuIG1lKCIoPz0iLGUsIikiKX1mdW5jdGlvbiBQbihlKXtyZXR1cm4gbWUoIig/OiIsZSwiKSoiKX1mdW5jdGlvbiBIbihlKXtyZXR1cm4gbWUoIig/OiIsZSwiKT8iKX1mdW5jdGlvbiBtZSguLi5lKXtyZXR1cm4gZS5tYXAobj0+VGUobikpLmpvaW4oIiIpfWZ1bmN0aW9uICRuKGUpe2xldCB0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdC5jb25zdHJ1Y3Rvcj09PU9iamVjdD8oZS5zcGxpY2UoZS5sZW5ndGgtMSwxKSx0KTp7fX1mdW5jdGlvbiAkZSguLi5lKXtyZXR1cm4iKCIrKCRuKGUpLmNhcHR1cmU/IiI6Ij86IikrZS5tYXAocj0+VGUocikpLmpvaW4oInwiKSsiKSJ9ZnVuY3Rpb24gd3QoZSl7cmV0dXJuIG5ldyBSZWdFeHAoZS50b1N0cmluZygpKyJ8IikuZXhlYygiIikubGVuZ3RoLTF9ZnVuY3Rpb24gR24oZSx0KXtsZXQgbj1lJiZlLmV4ZWModCk7cmV0dXJuIG4mJm4uaW5kZXg9PT0wfXZhciBGbj1uZXcgUmVnRXhwKCRlKC9cWyg/OlteXFxcXV18XFwuKSpcXS8sL1woXD88KD8hWz0hXSlbXj5dKz4vLC9cKFw/J1teJ10rJy8sL1woXD8/LywvXFwoWzEtOV1bMC05XSopLywvXFwuLykpO2Z1bmN0aW9uIEplKGUse2pvaW5XaXRoOnR9KXtsZXQgbj0wO3JldHVybiBlLm1hcChyPT57bis9MTtsZXQgcz1uLGc9VGUociksbz0iIjtmb3IoO2cubGVuZ3RoPjA7KXtsZXQgaT1Gbi5leGVjKGcpO2lmKCFpKXtvKz1nO2JyZWFrfW8rPWcuc3Vic3RyaW5nKDAsaS5pbmRleCksZz1nLnN1YnN0cmluZyhpLmluZGV4K2lbMF0ubGVuZ3RoKSxpWzBdWzBdPT09IlxcIiYmaVsxXT9vKz0iXFwiK1N0cmluZyhOdW1iZXIoaVsxXSkrcyk6KG8rPWlbMF0sKGlbMF09PT0iKCJ8fC9eXChcP1s8J10vLnRlc3QoaVswXSkpJiZuKyspfXJldHVybiBvfSkubWFwKHI9PmAoJHtyfSlgKS5qb2luKHQpfXZhciBLbj0vXGJcQi8sQXQ9IlthLXpBLVpdXFx3KiIsZXQ9IlthLXpBLVpfXVxcdyoiLFR0PSJcXGJcXGQrKFxcLlxcZCspPyIsT3Q9IigtPykoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiLE10PSJcXGIoMGJbMDFdKykiLFpuPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHwtfC09fC89fC98Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcP3xcXFt8XFx7fFxcKHxcXF58XFxePXxcXHx8XFx8PXxcXHxcXHx8fiIsam49KGU9e30pPT57bGV0IHQ9L14jIVsgXSpcLy87cmV0dXJuIGUuYmluYXJ5JiYoZS5iZWdpbj1tZSh0LC8uKlxiLyxlLmJpbmFyeSwvXGIuKi8pKSxkZSh7c2NvcGU6Im1ldGEiLGJlZ2luOnQsZW5kOi8kLyxyZWxldmFuY2U6MCwib246YmVnaW4iOihuLHIpPT57bi5pbmRleCE9PTAmJnIuaWdub3JlTWF0Y2goKX19LGUpfSxPZT17YmVnaW46IlxcXFxbXFxzXFxTXSIscmVsZXZhbmNlOjB9LFduPXtzY29wZToic3RyaW5nIixiZWdpbjoiJyIsZW5kOiInIixpbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOltPZV19LHFuPXtzY29wZToic3RyaW5nIixiZWdpbjonIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOltPZV19LFhuPXtiZWdpbjovXGIoYXxhbnx0aGV8YXJlfEknbXxpc24ndHxkb24ndHxkb2Vzbid0fHdvbid0fGJ1dHxqdXN0fHNob3VsZHxwcmV0dHl8c2ltcGx5fGVub3VnaHxnb25uYXxnb2luZ3x3dGZ8c298c3VjaHx3aWxsfHlvdXx5b3VyfHRoZXl8bGlrZXxtb3JlKVxiL30sR2U9ZnVuY3Rpb24oZSx0LG49e30pe2xldCByPWRlKHtzY29wZToiY29tbWVudCIsYmVnaW46ZSxlbmQ6dCxjb250YWluczpbXX0sbik7ci5jb250YWlucy5wdXNoKHtzY29wZToiZG9jdGFnIixiZWdpbjoiWyBdKig/PShUT0RPfEZJWE1FfE5PVEV8QlVHfE9QVElNSVpFfEhBQ0t8WFhYKTopIixlbmQ6LyhUT0RPfEZJWE1FfE5PVEV8QlVHfE9QVElNSVpFfEhBQ0t8WFhYKTovLGV4Y2x1ZGVCZWdpbjohMCxyZWxldmFuY2U6MH0pO2xldCBzPSRlKCJJIiwiYSIsImlzIiwic28iLCJ1cyIsInRvIiwiYXQiLCJpZiIsImluIiwiaXQiLCJvbiIsL1tBLVphLXpdK1snXShkfHZlfHJlfGxsfHR8c3xuKS8sL1tBLVphLXpdK1stXVthLXpdKy8sL1tBLVphLXpdW2Etel17Mix9Lyk7cmV0dXJuIHIuY29udGFpbnMucHVzaCh7YmVnaW46bWUoL1sgXSsvLCIoIixzLC9bLl0/WzpdPyhbLl1bIF18WyBdKS8sIil7M30iKX0pLHJ9LFluPUdlKCIvLyIsIiQiKSxWbj1HZSgiL1xcKiIsIlxcKi8iKSxRbj1HZSgiIyIsIiQiKSxKbj17c2NvcGU6Im51bWJlciIsYmVnaW46VHQscmVsZXZhbmNlOjB9LGVyPXtzY29wZToibnVtYmVyIixiZWdpbjpPdCxyZWxldmFuY2U6MH0sdHI9e3Njb3BlOiJudW1iZXIiLGJlZ2luOk10LHJlbGV2YW5jZTowfSxucj17c2NvcGU6InJlZ2V4cCIsYmVnaW46L1wvKD89W14vXG5dKlwvKS8sZW5kOi9cL1tnaW11eV0qLyxjb250YWluczpbT2Use2JlZ2luOi9cWy8sZW5kOi9cXS8scmVsZXZhbmNlOjAsY29udGFpbnM6W09lXX1dfSxycj17c2NvcGU6InRpdGxlIixiZWdpbjpBdCxyZWxldmFuY2U6MH0saXI9e3Njb3BlOiJ0aXRsZSIsYmVnaW46ZXQscmVsZXZhbmNlOjB9LG9yPXtiZWdpbjoiXFwuXFxzKiIrZXQscmVsZXZhbmNlOjB9LGFyPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKGUseyJvbjpiZWdpbiI6KHQsbik9PntuLmRhdGEuX2JlZ2luTWF0Y2g9dFsxXX0sIm9uOmVuZCI6KHQsbik9PntuLmRhdGEuX2JlZ2luTWF0Y2ghPT10WzFdJiZuLmlnbm9yZU1hdGNoKCl9fSl9LHplPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFQT1NfU1RSSU5HX01PREU6V24sQkFDS1NMQVNIX0VTQ0FQRTpPZSxCSU5BUllfTlVNQkVSX01PREU6dHIsQklOQVJZX05VTUJFUl9SRTpNdCxDT01NRU5UOkdlLENfQkxPQ0tfQ09NTUVOVF9NT0RFOlZuLENfTElORV9DT01NRU5UX01PREU6WW4sQ19OVU1CRVJfTU9ERTplcixDX05VTUJFUl9SRTpPdCxFTkRfU0FNRV9BU19CRUdJTjphcixIQVNIX0NPTU1FTlRfTU9ERTpRbixJREVOVF9SRTpBdCxNQVRDSF9OT1RISU5HX1JFOktuLE1FVEhPRF9HVUFSRDpvcixOVU1CRVJfTU9ERTpKbixOVU1CRVJfUkU6VHQsUEhSQVNBTF9XT1JEU19NT0RFOlhuLFFVT1RFX1NUUklOR19NT0RFOnFuLFJFR0VYUF9NT0RFOm5yLFJFX1NUQVJURVJTX1JFOlpuLFNIRUJBTkc6am4sVElUTEVfTU9ERTpycixVTkRFUlNDT1JFX0lERU5UX1JFOmV0LFVOREVSU0NPUkVfVElUTEVfTU9ERTppcn0pO2Z1bmN0aW9uIHNyKGUsdCl7ZS5pbnB1dFtlLmluZGV4LTFdPT09Ii4iJiZ0Lmlnbm9yZU1hdGNoKCl9ZnVuY3Rpb24gY3IoZSx0KXtlLmNsYXNzTmFtZSE9PXZvaWQgMCYmKGUuc2NvcGU9ZS5jbGFzc05hbWUsZGVsZXRlIGUuY2xhc3NOYW1lKX1mdW5jdGlvbiBscihlLHQpe3QmJmUuYmVnaW5LZXl3b3JkcyYmKGUuYmVnaW49IlxcYigiK2UuYmVnaW5LZXl3b3Jkcy5zcGxpdCgiICIpLmpvaW4oInwiKSsiKSg/IVxcLikoPz1cXGJ8XFxzKSIsZS5fX2JlZm9yZUJlZ2luPXNyLGUua2V5d29yZHM9ZS5rZXl3b3Jkc3x8ZS5iZWdpbktleXdvcmRzLGRlbGV0ZSBlLmJlZ2luS2V5d29yZHMsZS5yZWxldmFuY2U9PT12b2lkIDAmJihlLnJlbGV2YW5jZT0wKSl9ZnVuY3Rpb24gZHIoZSx0KXtBcnJheS5pc0FycmF5KGUuaWxsZWdhbCkmJihlLmlsbGVnYWw9JGUoLi4uZS5pbGxlZ2FsKSl9ZnVuY3Rpb24gdXIoZSx0KXtpZihlLm1hdGNoKXtpZihlLmJlZ2lufHxlLmVuZCl0aHJvdyBuZXcgRXJyb3IoImJlZ2luICYgZW5kIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggbWF0Y2giKTtlLmJlZ2luPWUubWF0Y2gsZGVsZXRlIGUubWF0Y2h9fWZ1bmN0aW9uIGdyKGUsdCl7ZS5yZWxldmFuY2U9PT12b2lkIDAmJihlLnJlbGV2YW5jZT0xKX12YXIgcHI9KGUsdCk9PntpZighZS5iZWZvcmVNYXRjaClyZXR1cm47aWYoZS5zdGFydHMpdGhyb3cgbmV3IEVycm9yKCJiZWZvcmVNYXRjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIHN0YXJ0cyIpO2xldCBuPU9iamVjdC5hc3NpZ24oe30sZSk7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57ZGVsZXRlIGVbcl19KSxlLmtleXdvcmRzPW4ua2V5d29yZHMsZS5iZWdpbj1tZShuLmJlZm9yZU1hdGNoLGt0KG4uYmVnaW4pKSxlLnN0YXJ0cz17cmVsZXZhbmNlOjAsY29udGFpbnM6W09iamVjdC5hc3NpZ24obix7ZW5kc1BhcmVudDohMH0pXX0sZS5yZWxldmFuY2U9MCxkZWxldGUgbi5iZWZvcmVNYXRjaH0sZnI9WyJvZiIsImFuZCIsImZvciIsImluIiwibm90Iiwib3IiLCJpZiIsInRoZW4iLCJwYXJlbnQiLCJsaXN0IiwidmFsdWUiXSxicj0ia2V5d29yZCI7ZnVuY3Rpb24gUnQoZSx0LG49YnIpe2xldCByPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9zKG4sZS5zcGxpdCgiICIpKTpBcnJheS5pc0FycmF5KGUpP3MobixlKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe09iamVjdC5hc3NpZ24ocixSdChlW2ddLHQsZykpfSkscjtmdW5jdGlvbiBzKGcsbyl7dCYmKG89by5tYXAoaT0+aS50b0xvd2VyQ2FzZSgpKSksby5mb3JFYWNoKGZ1bmN0aW9uKGkpe2xldCBjPWkuc3BsaXQoInwiKTtyW2NbMF1dPVtnLG1yKGNbMF0sY1sxXSldfSl9fWZ1bmN0aW9uIG1yKGUsdCl7cmV0dXJuIHQ/TnVtYmVyKHQpOmhyKGUpPzA6MX1mdW5jdGlvbiBocihlKXtyZXR1cm4gZnIuaW5jbHVkZXMoZS50b0xvd2VyQ2FzZSgpKX12YXIgRXQ9e30sYmU9ZT0+e2NvbnNvbGUuZXJyb3IoZSl9LHl0PShlLC4uLnQpPT57Y29uc29sZS5sb2coYFdBUk46ICR7ZX1gLC4uLnQpfSxOZT0oZSx0KT0+e0V0W2Ake2V9LyR7dH1gXXx8KGNvbnNvbGUubG9nKGBEZXByZWNhdGVkIGFzIG9mICR7ZX0uICR7dH1gKSxFdFtgJHtlfS8ke3R9YF09ITApfSxIZT1uZXcgRXJyb3I7ZnVuY3Rpb24gSXQoZSx0LHtrZXk6bn0pe2xldCByPTAscz1lW25dLGc9e30sbz17fTtmb3IobGV0IGk9MTtpPD10Lmxlbmd0aDtpKyspb1tpK3JdPXNbaV0sZ1tpK3JdPSEwLHIrPXd0KHRbaS0xXSk7ZVtuXT1vLGVbbl0uX2VtaXQ9ZyxlW25dLl9tdWx0aT0hMH1mdW5jdGlvbiBfcihlKXtpZihBcnJheS5pc0FycmF5KGUuYmVnaW4pKXtpZihlLnNraXB8fGUuZXhjbHVkZUJlZ2lufHxlLnJldHVybkJlZ2luKXRocm93IGJlKCJza2lwLCBleGNsdWRlQmVnaW4sIHJldHVybkJlZ2luIG5vdCBjb21wYXRpYmxlIHdpdGggYmVnaW5TY29wZToge30iKSxIZTtpZih0eXBlb2YgZS5iZWdpblNjb3BlIT0ib2JqZWN0Inx8ZS5iZWdpblNjb3BlPT09bnVsbCl0aHJvdyBiZSgiYmVnaW5TY29wZSBtdXN0IGJlIG9iamVjdCIpLEhlO0l0KGUsZS5iZWdpbix7a2V5OiJiZWdpblNjb3BlIn0pLGUuYmVnaW49SmUoZS5iZWdpbix7am9pbldpdGg6IiJ9KX19ZnVuY3Rpb24gRXIoZSl7aWYoQXJyYXkuaXNBcnJheShlLmVuZCkpe2lmKGUuc2tpcHx8ZS5leGNsdWRlRW5kfHxlLnJldHVybkVuZCl0aHJvdyBiZSgic2tpcCwgZXhjbHVkZUVuZCwgcmV0dXJuRW5kIG5vdCBjb21wYXRpYmxlIHdpdGggZW5kU2NvcGU6IHt9IiksSGU7aWYodHlwZW9mIGUuZW5kU2NvcGUhPSJvYmplY3QifHxlLmVuZFNjb3BlPT09bnVsbCl0aHJvdyBiZSgiZW5kU2NvcGUgbXVzdCBiZSBvYmplY3QiKSxIZTtJdChlLGUuZW5kLHtrZXk6ImVuZFNjb3BlIn0pLGUuZW5kPUplKGUuZW5kLHtqb2luV2l0aDoiIn0pfX1mdW5jdGlvbiB5cihlKXtlLnNjb3BlJiZ0eXBlb2YgZS5zY29wZT09Im9iamVjdCImJmUuc2NvcGUhPT1udWxsJiYoZS5iZWdpblNjb3BlPWUuc2NvcGUsZGVsZXRlIGUuc2NvcGUpfWZ1bmN0aW9uIHZyKGUpe3lyKGUpLHR5cGVvZiBlLmJlZ2luU2NvcGU9PSJzdHJpbmciJiYoZS5iZWdpblNjb3BlPXtfd3JhcDplLmJlZ2luU2NvcGV9KSx0eXBlb2YgZS5lbmRTY29wZT09InN0cmluZyImJihlLmVuZFNjb3BlPXtfd3JhcDplLmVuZFNjb3BlfSksX3IoZSksRXIoZSl9ZnVuY3Rpb24gTnIoZSl7ZnVuY3Rpb24gdChvLGkpe3JldHVybiBuZXcgUmVnRXhwKFRlKG8pLCJtIisoZS5jYXNlX2luc2Vuc2l0aXZlPyJpIjoiIikrKGUudW5pY29kZVJlZ2V4PyJ1IjoiIikrKGk/ImciOiIiKSl9Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubWF0Y2hJbmRleGVzPXt9LHRoaXMucmVnZXhlcz1bXSx0aGlzLm1hdGNoQXQ9MSx0aGlzLnBvc2l0aW9uPTB9YWRkUnVsZShpLGMpe2MucG9zaXRpb249dGhpcy5wb3NpdGlvbisrLHRoaXMubWF0Y2hJbmRleGVzW3RoaXMubWF0Y2hBdF09Yyx0aGlzLnJlZ2V4ZXMucHVzaChbYyxpXSksdGhpcy5tYXRjaEF0Kz13dChpKSsxfWNvbXBpbGUoKXt0aGlzLnJlZ2V4ZXMubGVuZ3RoPT09MCYmKHRoaXMuZXhlYz0oKT0+bnVsbCk7bGV0IGk9dGhpcy5yZWdleGVzLm1hcChjPT5jWzFdKTt0aGlzLm1hdGNoZXJSZT10KEplKGkse2pvaW5XaXRoOiJ8In0pLCEwKSx0aGlzLmxhc3RJbmRleD0wfWV4ZWMoaSl7dGhpcy5tYXRjaGVyUmUubGFzdEluZGV4PXRoaXMubGFzdEluZGV4O2xldCBjPXRoaXMubWF0Y2hlclJlLmV4ZWMoaSk7aWYoIWMpcmV0dXJuIG51bGw7bGV0IHU9Yy5maW5kSW5kZXgoKEMsSSk9Pkk+MCYmQyE9PXZvaWQgMCksdz10aGlzLm1hdGNoSW5kZXhlc1t1XTtyZXR1cm4gYy5zcGxpY2UoMCx1KSxPYmplY3QuYXNzaWduKGMsdyl9fWNsYXNzIHJ7Y29uc3RydWN0b3IoKXt0aGlzLnJ1bGVzPVtdLHRoaXMubXVsdGlSZWdleGVzPVtdLHRoaXMuY291bnQ9MCx0aGlzLmxhc3RJbmRleD0wLHRoaXMucmVnZXhJbmRleD0wfWdldE1hdGNoZXIoaSl7aWYodGhpcy5tdWx0aVJlZ2V4ZXNbaV0pcmV0dXJuIHRoaXMubXVsdGlSZWdleGVzW2ldO2xldCBjPW5ldyBuO3JldHVybiB0aGlzLnJ1bGVzLnNsaWNlKGkpLmZvckVhY2goKFt1LHddKT0+Yy5hZGRSdWxlKHUsdykpLGMuY29tcGlsZSgpLHRoaXMubXVsdGlSZWdleGVzW2ldPWMsY31yZXN1bWluZ1NjYW5BdFNhbWVQb3NpdGlvbigpe3JldHVybiB0aGlzLnJlZ2V4SW5kZXghPT0wfWNvbnNpZGVyQWxsKCl7dGhpcy5yZWdleEluZGV4PTB9YWRkUnVsZShpLGMpe3RoaXMucnVsZXMucHVzaChbaSxjXSksYy50eXBlPT09ImJlZ2luIiYmdGhpcy5jb3VudCsrfWV4ZWMoaSl7bGV0IGM9dGhpcy5nZXRNYXRjaGVyKHRoaXMucmVnZXhJbmRleCk7Yy5sYXN0SW5kZXg9dGhpcy5sYXN0SW5kZXg7bGV0IHU9Yy5leGVjKGkpO2lmKHRoaXMucmVzdW1pbmdTY2FuQXRTYW1lUG9zaXRpb24oKSYmISh1JiZ1LmluZGV4PT09dGhpcy5sYXN0SW5kZXgpKXtsZXQgdz10aGlzLmdldE1hdGNoZXIoMCk7dy5sYXN0SW5kZXg9dGhpcy5sYXN0SW5kZXgrMSx1PXcuZXhlYyhpKX1yZXR1cm4gdSYmKHRoaXMucmVnZXhJbmRleCs9dS5wb3NpdGlvbisxLHRoaXMucmVnZXhJbmRleD09PXRoaXMuY291bnQmJnRoaXMuY29uc2lkZXJBbGwoKSksdX19ZnVuY3Rpb24gcyhvKXtsZXQgaT1uZXcgcjtyZXR1cm4gby5jb250YWlucy5mb3JFYWNoKGM9PmkuYWRkUnVsZShjLmJlZ2luLHtydWxlOmMsdHlwZToiYmVnaW4ifSkpLG8udGVybWluYXRvckVuZCYmaS5hZGRSdWxlKG8udGVybWluYXRvckVuZCx7dHlwZToiZW5kIn0pLG8uaWxsZWdhbCYmaS5hZGRSdWxlKG8uaWxsZWdhbCx7dHlwZToiaWxsZWdhbCJ9KSxpfWZ1bmN0aW9uIGcobyxpKXtsZXQgYz1vO2lmKG8uaXNDb21waWxlZClyZXR1cm4gYztbY3IsdXIsdnIscHJdLmZvckVhY2godz0+dyhvLGkpKSxlLmNvbXBpbGVyRXh0ZW5zaW9ucy5mb3JFYWNoKHc9PncobyxpKSksby5fX2JlZm9yZUJlZ2luPW51bGwsW2xyLGRyLGdyXS5mb3JFYWNoKHc9PncobyxpKSksby5pc0NvbXBpbGVkPSEwO2xldCB1PW51bGw7cmV0dXJuIHR5cGVvZiBvLmtleXdvcmRzPT0ib2JqZWN0IiYmby5rZXl3b3Jkcy4kcGF0dGVybiYmKG8ua2V5d29yZHM9T2JqZWN0LmFzc2lnbih7fSxvLmtleXdvcmRzKSx1PW8ua2V5d29yZHMuJHBhdHRlcm4sZGVsZXRlIG8ua2V5d29yZHMuJHBhdHRlcm4pLHU9dXx8L1x3Ky8sby5rZXl3b3JkcyYmKG8ua2V5d29yZHM9UnQoby5rZXl3b3JkcyxlLmNhc2VfaW5zZW5zaXRpdmUpKSxjLmtleXdvcmRQYXR0ZXJuUmU9dCh1LCEwKSxpJiYoby5iZWdpbnx8KG8uYmVnaW49L1xCfFxiLyksYy5iZWdpblJlPXQoYy5iZWdpbiksIW8uZW5kJiYhby5lbmRzV2l0aFBhcmVudCYmKG8uZW5kPS9cQnxcYi8pLG8uZW5kJiYoYy5lbmRSZT10KGMuZW5kKSksYy50ZXJtaW5hdG9yRW5kPVRlKGMuZW5kKXx8IiIsby5lbmRzV2l0aFBhcmVudCYmaS50ZXJtaW5hdG9yRW5kJiYoYy50ZXJtaW5hdG9yRW5kKz0oby5lbmQ/InwiOiIiKStpLnRlcm1pbmF0b3JFbmQpKSxvLmlsbGVnYWwmJihjLmlsbGVnYWxSZT10KG8uaWxsZWdhbCkpLG8uY29udGFpbnN8fChvLmNvbnRhaW5zPVtdKSxvLmNvbnRhaW5zPVtdLmNvbmNhdCguLi5vLmNvbnRhaW5zLm1hcChmdW5jdGlvbih3KXtyZXR1cm4geHIodz09PSJzZWxmIj9vOncpfSkpLG8uY29udGFpbnMuZm9yRWFjaChmdW5jdGlvbih3KXtnKHcsYyl9KSxvLnN0YXJ0cyYmZyhvLnN0YXJ0cyxpKSxjLm1hdGNoZXI9cyhjKSxjfWlmKGUuY29tcGlsZXJFeHRlbnNpb25zfHwoZS5jb21waWxlckV4dGVuc2lvbnM9W10pLGUuY29udGFpbnMmJmUuY29udGFpbnMuaW5jbHVkZXMoInNlbGYiKSl0aHJvdyBuZXcgRXJyb3IoIkVSUjogY29udGFpbnMgYHNlbGZgIGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGxhbmd1YWdlLiAgU2VlIGRvY3VtZW50YXRpb24uIik7cmV0dXJuIGUuY2xhc3NOYW1lQWxpYXNlcz1kZShlLmNsYXNzTmFtZUFsaWFzZXN8fHt9KSxnKGUpfWZ1bmN0aW9uIEN0KGUpe3JldHVybiBlP2UuZW5kc1dpdGhQYXJlbnR8fEN0KGUuc3RhcnRzKTohMX1mdW5jdGlvbiB4cihlKXtyZXR1cm4gZS52YXJpYW50cyYmIWUuY2FjaGVkVmFyaWFudHMmJihlLmNhY2hlZFZhcmlhbnRzPWUudmFyaWFudHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBkZShlLHt2YXJpYW50czpudWxsfSx0KX0pKSxlLmNhY2hlZFZhcmlhbnRzP2UuY2FjaGVkVmFyaWFudHM6Q3QoZSk/ZGUoZSx7c3RhcnRzOmUuc3RhcnRzP2RlKGUuc3RhcnRzKTpudWxsfSk6T2JqZWN0LmlzRnJvemVuKGUpP2RlKGUpOmV9dmFyIFNyPSIxMS4xMi4wIixRZT1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIodCksdGhpcy5uYW1lPSJIVE1MSW5qZWN0aW9uRXJyb3IiLHRoaXMuaHRtbD1ufX0scWU9U3QsdnQ9ZGUsTnQ9U3ltYm9sKCJub21hdGNoIiksa3I9NyxMdD1mdW5jdGlvbihlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPVtdLHM9ITAsZz0iQ291bGQgbm90IGZpbmQgdGhlIGxhbmd1YWdlICd7fScsIGRpZCB5b3UgZm9yZ2V0IHRvIGxvYWQvaW5jbHVkZSBhIGxhbmd1YWdlIG1vZHVsZT8iLG89e2Rpc2FibGVBdXRvZGV0ZWN0OiEwLG5hbWU6IlBsYWluIHRleHQiLGNvbnRhaW5zOltdfSxpPXtpZ25vcmVVbmVzY2FwZWRIVE1MOiExLHRocm93VW5lc2NhcGVkSFRNTDohMSxub0hpZ2hsaWdodFJlOi9eKG5vLT9oaWdobGlnaHQpJC9pLGxhbmd1YWdlRGV0ZWN0UmU6L1xibGFuZyg/OnVhZ2UpPy0oW1x3LV0rKVxiL2ksY2xhc3NQcmVmaXg6ImhsanMtIixjc3NTZWxlY3RvcjoicHJlIGNvZGUiLGxhbmd1YWdlczpudWxsLF9fZW1pdHRlcjpWZX07ZnVuY3Rpb24gYyhhKXtyZXR1cm4gaS5ub0hpZ2hsaWdodFJlLnRlc3QoYSl9ZnVuY3Rpb24gdShhKXtsZXQgXz1hLmNsYXNzTmFtZSsiICI7Xys9YS5wYXJlbnROb2RlP2EucGFyZW50Tm9kZS5jbGFzc05hbWU6IiI7bGV0IGI9aS5sYW5ndWFnZURldGVjdFJlLmV4ZWMoXyk7aWYoYil7bGV0IGg9QShiWzFdKTtyZXR1cm4gaHx8KHl0KGcucmVwbGFjZSgie30iLGJbMV0pKSx5dCgiRmFsbGluZyBiYWNrIHRvIG5vLWhpZ2hsaWdodCBtb2RlIGZvciB0aGlzIGJsb2NrLiIsYSkpLGg/YlsxXToibm8taGlnaGxpZ2h0In1yZXR1cm4gXy5zcGxpdCgvXHMrLykuZmluZChoPT5jKGgpfHxBKGgpKX1mdW5jdGlvbiB3KGEsXyxiKXtsZXQgaD0iIixCPSIiO3R5cGVvZiBfPT0ib2JqZWN0Ij8oaD1hLGI9Xy5pZ25vcmVJbGxlZ2FscyxCPV8ubGFuZ3VhZ2UpOihOZSgiMTAuNy4wIiwiaGlnaGxpZ2h0KGxhbmcsIGNvZGUsIC4uLmFyZ3MpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIiksTmUoIjEwLjcuMCIsYFBsZWFzZSB1c2UgaGlnaGxpZ2h0KGNvZGUsIG9wdGlvbnMpIGluc3RlYWQuCmh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzIyNzdgKSxCPWEsaD1fKSxiPT09dm9pZCAwJiYoYj0hMCk7bGV0IFU9e2NvZGU6aCxsYW5ndWFnZTpCfTt4KCJiZWZvcmU6aGlnaGxpZ2h0IixVKTtsZXQgRj1VLnJlc3VsdD9VLnJlc3VsdDpDKFUubGFuZ3VhZ2UsVS5jb2RlLGIpO3JldHVybiBGLmNvZGU9VS5jb2RlLHgoImFmdGVyOmhpZ2hsaWdodCIsRiksRn1mdW5jdGlvbiBDKGEsXyxiLGgpe2xldCBCPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gVShmLE4pe3JldHVybiBmLmtleXdvcmRzW05dfWZ1bmN0aW9uIEYoKXtpZighTy5rZXl3b3Jkcyl7WC5hZGRUZXh0KFApO3JldHVybn1sZXQgZj0wO08ua2V5d29yZFBhdHRlcm5SZS5sYXN0SW5kZXg9MDtsZXQgTj1PLmtleXdvcmRQYXR0ZXJuUmUuZXhlYyhQKSxSPSIiO2Zvcig7Tjspe1IrPVAuc3Vic3RyaW5nKGYsTi5pbmRleCk7bGV0ICQ9bmUuY2FzZV9pbnNlbnNpdGl2ZT9OWzBdLnRvTG93ZXJDYXNlKCk6TlswXSxXPVUoTywkKTtpZihXKXtsZXRbYWUsS2VdPVc7aWYoWC5hZGRUZXh0KFIpLFI9IiIsQlskXT0oQlskXXx8MCkrMSxCWyRdPD1rciYmKGNlKz1LZSksYWUuc3RhcnRzV2l0aCgiXyIpKVIrPU5bMF07ZWxzZXtsZXQgSWU9bmUuY2xhc3NOYW1lQWxpYXNlc1thZV18fGFlO1EoTlswXSxJZSl9fWVsc2UgUis9TlswXTtmPU8ua2V5d29yZFBhdHRlcm5SZS5sYXN0SW5kZXgsTj1PLmtleXdvcmRQYXR0ZXJuUmUuZXhlYyhQKX1SKz1QLnN1YnN0cmluZyhmKSxYLmFkZFRleHQoUil9ZnVuY3Rpb24gcSgpe2lmKFA9PT0iIilyZXR1cm47bGV0IGY9bnVsbDtpZih0eXBlb2YgTy5zdWJMYW5ndWFnZT09InN0cmluZyIpe2lmKCF0W08uc3ViTGFuZ3VhZ2VdKXtYLmFkZFRleHQoUCk7cmV0dXJufWY9QyhPLnN1Ykxhbmd1YWdlLFAsITAsaltPLnN1Ykxhbmd1YWdlXSksaltPLnN1Ykxhbmd1YWdlXT1mLl90b3B9ZWxzZSBmPU0oUCxPLnN1Ykxhbmd1YWdlLmxlbmd0aD9PLnN1Ykxhbmd1YWdlOm51bGwpO08ucmVsZXZhbmNlPjAmJihjZSs9Zi5yZWxldmFuY2UpLFguX19hZGRTdWJsYW5ndWFnZShmLl9lbWl0dGVyLGYubGFuZ3VhZ2UpfWZ1bmN0aW9uIFYoKXtPLnN1Ykxhbmd1YWdlIT1udWxsP3EoKTpGKCksUD0iIn1mdW5jdGlvbiBRKGYsTil7ZiE9PSIiJiYoWC5zdGFydFNjb3BlKE4pLFguYWRkVGV4dChmKSxYLmVuZFNjb3BlKCkpfWZ1bmN0aW9uIGdlKGYsTil7bGV0IFI9MSwkPU4ubGVuZ3RoLTE7Zm9yKDtSPD0kOyl7aWYoIWYuX2VtaXRbUl0pe1IrKztjb250aW51ZX1sZXQgVz1uZS5jbGFzc05hbWVBbGlhc2VzW2ZbUl1dfHxmW1JdLGFlPU5bUl07Vz9RKGFlLFcpOihQPWFlLEYoKSxQPSIiKSxSKyt9fWZ1bmN0aW9uIHNlKGYsTil7cmV0dXJuIGYuc2NvcGUmJnR5cGVvZiBmLnNjb3BlPT0ic3RyaW5nIiYmWC5vcGVuTm9kZShuZS5jbGFzc05hbWVBbGlhc2VzW2Yuc2NvcGVdfHxmLnNjb3BlKSxmLmJlZ2luU2NvcGUmJihmLmJlZ2luU2NvcGUuX3dyYXA/KFEoUCxuZS5jbGFzc05hbWVBbGlhc2VzW2YuYmVnaW5TY29wZS5fd3JhcF18fGYuYmVnaW5TY29wZS5fd3JhcCksUD0iIik6Zi5iZWdpblNjb3BlLl9tdWx0aSYmKGdlKGYuYmVnaW5TY29wZSxOKSxQPSIiKSksTz1PYmplY3QuY3JlYXRlKGYse3BhcmVudDp7dmFsdWU6T319KSxPfWZ1bmN0aW9uIGhlKGYsTixSKXtsZXQgJD1HbihmLmVuZFJlLFIpO2lmKCQpe2lmKGZbIm9uOmVuZCJdKXtsZXQgVz1uZXcgUGUoZik7Zlsib246ZW5kIl0oTixXKSxXLmlzTWF0Y2hJZ25vcmVkJiYoJD0hMSl9aWYoJCl7Zm9yKDtmLmVuZHNQYXJlbnQmJmYucGFyZW50OylmPWYucGFyZW50O3JldHVybiBmfX1pZihmLmVuZHNXaXRoUGFyZW50KXJldHVybiBoZShmLnBhcmVudCxOLFIpfWZ1bmN0aW9uIE1lKGYpe3JldHVybiBPLm1hdGNoZXIucmVnZXhJbmRleD09PTA/KFArPWZbMF0sMSk6KHllPSEwLDApfWZ1bmN0aW9uIGtlKGYpe2xldCBOPWZbMF0sUj1mLnJ1bGUsJD1uZXcgUGUoUiksVz1bUi5fX2JlZm9yZUJlZ2luLFJbIm9uOmJlZ2luIl1dO2ZvcihsZXQgYWUgb2YgVylpZihhZSYmKGFlKGYsJCksJC5pc01hdGNoSWdub3JlZCkpcmV0dXJuIE1lKE4pO3JldHVybiBSLnNraXA/UCs9TjooUi5leGNsdWRlQmVnaW4mJihQKz1OKSxWKCksIVIucmV0dXJuQmVnaW4mJiFSLmV4Y2x1ZGVCZWdpbiYmKFA9TikpLHNlKFIsZiksUi5yZXR1cm5CZWdpbj8wOk4ubGVuZ3RofWZ1bmN0aW9uIFJlKGYpe2xldCBOPWZbMF0sUj1fLnN1YnN0cmluZyhmLmluZGV4KSwkPWhlKE8sZixSKTtpZighJClyZXR1cm4gTnQ7bGV0IFc9TztPLmVuZFNjb3BlJiZPLmVuZFNjb3BlLl93cmFwPyhWKCksUShOLE8uZW5kU2NvcGUuX3dyYXApKTpPLmVuZFNjb3BlJiZPLmVuZFNjb3BlLl9tdWx0aT8oVigpLGdlKE8uZW5kU2NvcGUsZikpOlcuc2tpcD9QKz1OOihXLnJldHVybkVuZHx8Vy5leGNsdWRlRW5kfHwoUCs9TiksVigpLFcuZXhjbHVkZUVuZCYmKFA9TikpO2RvIE8uc2NvcGUmJlguY2xvc2VOb2RlKCksIU8uc2tpcCYmIU8uc3ViTGFuZ3VhZ2UmJihjZSs9Ty5yZWxldmFuY2UpLE89Ty5wYXJlbnQ7d2hpbGUoTyE9PSQucGFyZW50KTtyZXR1cm4gJC5zdGFydHMmJnNlKCQuc3RhcnRzLGYpLFcucmV0dXJuRW5kPzA6Ti5sZW5ndGh9ZnVuY3Rpb24gX2UoKXtsZXQgZj1bXTtmb3IobGV0IE49TztOIT09bmU7Tj1OLnBhcmVudClOLnNjb3BlJiZmLnVuc2hpZnQoTi5zY29wZSk7Zi5mb3JFYWNoKE49Plgub3Blbk5vZGUoTikpfWxldCBvZT17fTtmdW5jdGlvbiBwZShmLE4pe2xldCBSPU4mJk5bMF07aWYoUCs9ZixSPT1udWxsKXJldHVybiBWKCksMDtpZihvZS50eXBlPT09ImJlZ2luIiYmTi50eXBlPT09ImVuZCImJm9lLmluZGV4PT09Ti5pbmRleCYmUj09PSIiKXtpZihQKz1fLnNsaWNlKE4uaW5kZXgsTi5pbmRleCsxKSwhcyl7bGV0ICQ9bmV3IEVycm9yKGAwIHdpZHRoIG1hdGNoIHJlZ2V4ICgke2F9KWApO3Rocm93ICQubGFuZ3VhZ2VOYW1lPWEsJC5iYWRSdWxlPW9lLnJ1bGUsJH1yZXR1cm4gMX1pZihvZT1OLE4udHlwZT09PSJiZWdpbiIpcmV0dXJuIGtlKE4pO2lmKE4udHlwZT09PSJpbGxlZ2FsIiYmIWIpe2xldCAkPW5ldyBFcnJvcignSWxsZWdhbCBsZXhlbWUgIicrUisnIiBmb3IgbW9kZSAiJysoTy5zY29wZXx8Ijx1bm5hbWVkPiIpKyciJyk7dGhyb3cgJC5tb2RlPU8sJH1lbHNlIGlmKE4udHlwZT09PSJlbmQiKXtsZXQgJD1SZShOKTtpZigkIT09TnQpcmV0dXJuICR9aWYoTi50eXBlPT09ImlsbGVnYWwiJiZSPT09IiIpcmV0dXJuIE4uaW5kZXg9PT1fLmxlbmd0aHx8KFArPWAKYCksMTtpZih3ZT4xZTUmJndlPk4uaW5kZXgqMyl0aHJvdyBuZXcgRXJyb3IoInBvdGVudGlhbCBpbmZpbml0ZSBsb29wLCB3YXkgbW9yZSBpdGVyYXRpb25zIHRoYW4gbWF0Y2hlcyIpO3JldHVybiBQKz1SLFIubGVuZ3RofWxldCBuZT1BKGEpO2lmKCFuZSl0aHJvdyBiZShnLnJlcGxhY2UoInt9IixhKSksbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJythKyciJyk7bGV0IEVlPU5yKG5lKSxsZT0iIixPPWh8fEVlLGo9e30sWD1uZXcgaS5fX2VtaXR0ZXIoaSk7X2UoKTtsZXQgUD0iIixjZT0wLHJlPTAsd2U9MCx5ZT0hMTt0cnl7aWYobmUuX19lbWl0VG9rZW5zKW5lLl9fZW1pdFRva2VucyhfLFgpO2Vsc2V7Zm9yKE8ubWF0Y2hlci5jb25zaWRlckFsbCgpOzspe3dlKysseWU/eWU9ITE6Ty5tYXRjaGVyLmNvbnNpZGVyQWxsKCksTy5tYXRjaGVyLmxhc3RJbmRleD1yZTtsZXQgZj1PLm1hdGNoZXIuZXhlYyhfKTtpZighZilicmVhaztsZXQgTj1fLnN1YnN0cmluZyhyZSxmLmluZGV4KSxSPXBlKE4sZik7cmU9Zi5pbmRleCtSfXBlKF8uc3Vic3RyaW5nKHJlKSl9cmV0dXJuIFguZmluYWxpemUoKSxsZT1YLnRvSFRNTCgpLHtsYW5ndWFnZTphLHZhbHVlOmxlLHJlbGV2YW5jZTpjZSxpbGxlZ2FsOiExLF9lbWl0dGVyOlgsX3RvcDpPfX1jYXRjaChmKXtpZihmLm1lc3NhZ2UmJmYubWVzc2FnZS5pbmNsdWRlcygiSWxsZWdhbCIpKXJldHVybntsYW5ndWFnZTphLHZhbHVlOnFlKF8pLGlsbGVnYWw6ITAscmVsZXZhbmNlOjAsX2lsbGVnYWxCeTp7bWVzc2FnZTpmLm1lc3NhZ2UsaW5kZXg6cmUsY29udGV4dDpfLnNsaWNlKHJlLTEwMCxyZSsxMDApLG1vZGU6Zi5tb2RlLHJlc3VsdFNvRmFyOmxlfSxfZW1pdHRlcjpYfTtpZihzKXJldHVybntsYW5ndWFnZTphLHZhbHVlOnFlKF8pLGlsbGVnYWw6ITEscmVsZXZhbmNlOjAsZXJyb3JSYWlzZWQ6ZixfZW1pdHRlcjpYLF90b3A6T307dGhyb3cgZn19ZnVuY3Rpb24gSShhKXtsZXQgXz17dmFsdWU6cWUoYSksaWxsZWdhbDohMSxyZWxldmFuY2U6MCxfdG9wOm8sX2VtaXR0ZXI6bmV3IGkuX19lbWl0dGVyKGkpfTtyZXR1cm4gXy5fZW1pdHRlci5hZGRUZXh0KGEpLF99ZnVuY3Rpb24gTShhLF8pe189X3x8aS5sYW5ndWFnZXN8fE9iamVjdC5rZXlzKHQpO2xldCBiPUkoYSksaD1fLmZpbHRlcihBKS5maWx0ZXIoSikubWFwKFY9PkMoVixhLCExKSk7aC51bnNoaWZ0KGIpO2xldCBCPWguc29ydCgoVixRKT0+e2lmKFYucmVsZXZhbmNlIT09US5yZWxldmFuY2UpcmV0dXJuIFEucmVsZXZhbmNlLVYucmVsZXZhbmNlO2lmKFYubGFuZ3VhZ2UmJlEubGFuZ3VhZ2Upe2lmKEEoVi5sYW5ndWFnZSkuc3VwZXJzZXRPZj09PVEubGFuZ3VhZ2UpcmV0dXJuIDE7aWYoQShRLmxhbmd1YWdlKS5zdXBlcnNldE9mPT09Vi5sYW5ndWFnZSlyZXR1cm4tMX1yZXR1cm4gMH0pLFtVLEZdPUIscT1VO3JldHVybiBxLnNlY29uZEJlc3Q9RixxfWZ1bmN0aW9uIEcoYSxfLGIpe2xldCBoPV8mJm5bX118fGI7YS5jbGFzc0xpc3QuYWRkKCJobGpzIiksYS5jbGFzc0xpc3QuYWRkKGBsYW5ndWFnZS0ke2h9YCl9ZnVuY3Rpb24gTChhKXtsZXQgXz1udWxsLGI9dShhKTtpZihjKGIpKXJldHVybjtpZih4KCJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudCIse2VsOmEsbGFuZ3VhZ2U6Yn0pLGEuZGF0YXNldC5oaWdobGlnaHRlZCl7Y29uc29sZS5sb2coIkVsZW1lbnQgcHJldmlvdXNseSBoaWdobGlnaHRlZC4gVG8gaGlnaGxpZ2h0IGFnYWluLCBmaXJzdCB1bnNldCBgZGF0YXNldC5oaWdobGlnaHRlZGAuIixhKTtyZXR1cm59aWYoYS5jaGlsZHJlbi5sZW5ndGg+MCYmKGkuaWdub3JlVW5lc2NhcGVkSFRNTHx8KGNvbnNvbGUud2FybigiT25lIG9mIHlvdXIgY29kZSBibG9ja3MgaW5jbHVkZXMgdW5lc2NhcGVkIEhUTUwuIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBzZXJpb3VzIHNlY3VyaXR5IHJpc2suIiksY29uc29sZS53YXJuKCJodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL3dpa2kvc2VjdXJpdHkiKSxjb25zb2xlLndhcm4oIlRoZSBlbGVtZW50IHdpdGggdW5lc2NhcGVkIEhUTUw6IiksY29uc29sZS53YXJuKGEpKSxpLnRocm93VW5lc2NhcGVkSFRNTCkpdGhyb3cgbmV3IFFlKCJPbmUgb2YgeW91ciBjb2RlIGJsb2NrcyBpbmNsdWRlcyB1bmVzY2FwZWQgSFRNTC4iLGEuaW5uZXJIVE1MKTtfPWE7bGV0IGg9Xy50ZXh0Q29udGVudCxCPWI/dyhoLHtsYW5ndWFnZTpiLGlnbm9yZUlsbGVnYWxzOiEwfSk6TShoKTthLmlubmVySFRNTD1CLnZhbHVlLGEuZGF0YXNldC5oaWdobGlnaHRlZD0ieWVzIixHKGEsYixCLmxhbmd1YWdlKSxhLnJlc3VsdD17bGFuZ3VhZ2U6Qi5sYW5ndWFnZSxyZTpCLnJlbGV2YW5jZSxyZWxldmFuY2U6Qi5yZWxldmFuY2V9LEIuc2Vjb25kQmVzdCYmKGEuc2Vjb25kQmVzdD17bGFuZ3VhZ2U6Qi5zZWNvbmRCZXN0Lmxhbmd1YWdlLHJlbGV2YW5jZTpCLnNlY29uZEJlc3QucmVsZXZhbmNlfSkseCgiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudCIse2VsOmEscmVzdWx0OkIsdGV4dDpofSl9ZnVuY3Rpb24gcChhKXtpPXZ0KGksYSl9bGV0IFM9KCk9PnttKCksTmUoIjEwLjYuMCIsImluaXRIaWdobGlnaHRpbmcoKSBkZXByZWNhdGVkLiAgVXNlIGhpZ2hsaWdodEFsbCgpIG5vdy4iKX07ZnVuY3Rpb24gaygpe20oKSxOZSgiMTAuNi4wIiwiaW5pdEhpZ2hsaWdodGluZ09uTG9hZCgpIGRlcHJlY2F0ZWQuICBVc2UgaGlnaGxpZ2h0QWxsKCkgbm93LiIpfWxldCB5PSExO2Z1bmN0aW9uIG0oKXtmdW5jdGlvbiBhKCl7bSgpfWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpe3l8fHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixhLCExKSx5PSEwO3JldHVybn1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGkuY3NzU2VsZWN0b3IpLmZvckVhY2goTCl9ZnVuY3Rpb24gbChhLF8pe2xldCBiPW51bGw7dHJ5e2I9XyhlKX1jYXRjaChoKXtpZihiZSgiTGFuZ3VhZ2UgZGVmaW5pdGlvbiBmb3IgJ3t9JyBjb3VsZCBub3QgYmUgcmVnaXN0ZXJlZC4iLnJlcGxhY2UoInt9IixhKSkscyliZShoKTtlbHNlIHRocm93IGg7Yj1vfWIubmFtZXx8KGIubmFtZT1hKSx0W2FdPWIsYi5yYXdEZWZpbml0aW9uPV8uYmluZChudWxsLGUpLGIuYWxpYXNlcyYmeihiLmFsaWFzZXMse2xhbmd1YWdlTmFtZTphfSl9ZnVuY3Rpb24gRShhKXtkZWxldGUgdFthXTtmb3IobGV0IF8gb2YgT2JqZWN0LmtleXMobikpbltfXT09PWEmJmRlbGV0ZSBuW19dfWZ1bmN0aW9uIFQoKXtyZXR1cm4gT2JqZWN0LmtleXModCl9ZnVuY3Rpb24gQShhKXtyZXR1cm4gYT0oYXx8IiIpLnRvTG93ZXJDYXNlKCksdFthXXx8dFtuW2FdXX1mdW5jdGlvbiB6KGEse2xhbmd1YWdlTmFtZTpffSl7dHlwZW9mIGE9PSJzdHJpbmciJiYoYT1bYV0pLGEuZm9yRWFjaChiPT57bltiLnRvTG93ZXJDYXNlKCldPV99KX1mdW5jdGlvbiBKKGEpe2xldCBfPUEoYSk7cmV0dXJuIF8mJiFfLmRpc2FibGVBdXRvZGV0ZWN0fWZ1bmN0aW9uIHRlKGEpe2FbImJlZm9yZTpoaWdobGlnaHRCbG9jayJdJiYhYVsiYmVmb3JlOmhpZ2hsaWdodEVsZW1lbnQiXSYmKGFbImJlZm9yZTpoaWdobGlnaHRFbGVtZW50Il09Xz0+e2FbImJlZm9yZTpoaWdobGlnaHRCbG9jayJdKE9iamVjdC5hc3NpZ24oe2Jsb2NrOl8uZWx9LF8pKX0pLGFbImFmdGVyOmhpZ2hsaWdodEJsb2NrIl0mJiFhWyJhZnRlcjpoaWdobGlnaHRFbGVtZW50Il0mJihhWyJhZnRlcjpoaWdobGlnaHRFbGVtZW50Il09Xz0+e2FbImFmdGVyOmhpZ2hsaWdodEJsb2NrIl0oT2JqZWN0LmFzc2lnbih7YmxvY2s6Xy5lbH0sXykpfSl9ZnVuY3Rpb24gZWUoYSl7dGUoYSksci5wdXNoKGEpfWZ1bmN0aW9uIEsoYSl7bGV0IF89ci5pbmRleE9mKGEpO18hPT0tMSYmci5zcGxpY2UoXywxKX1mdW5jdGlvbiB4KGEsXyl7bGV0IGI9YTtyLmZvckVhY2goZnVuY3Rpb24oaCl7aFtiXSYmaFtiXShfKX0pfWZ1bmN0aW9uIEgoYSl7cmV0dXJuIE5lKCIxMC43LjAiLCJoaWdobGlnaHRCbG9jayB3aWxsIGJlIHJlbW92ZWQgZW50aXJlbHkgaW4gdjEyLjAiKSxOZSgiMTAuNy4wIiwiUGxlYXNlIHVzZSBoaWdobGlnaHRFbGVtZW50IG5vdy4iKSxMKGEpfU9iamVjdC5hc3NpZ24oZSx7aGlnaGxpZ2h0OncsaGlnaGxpZ2h0QXV0bzpNLGhpZ2hsaWdodEFsbDptLGhpZ2hsaWdodEVsZW1lbnQ6TCxoaWdobGlnaHRCbG9jazpILGNvbmZpZ3VyZTpwLGluaXRIaWdobGlnaHRpbmc6Uyxpbml0SGlnaGxpZ2h0aW5nT25Mb2FkOmsscmVnaXN0ZXJMYW5ndWFnZTpsLHVucmVnaXN0ZXJMYW5ndWFnZTpFLGxpc3RMYW5ndWFnZXM6VCxnZXRMYW5ndWFnZTpBLHJlZ2lzdGVyQWxpYXNlczp6LGF1dG9EZXRlY3Rpb246Sixpbmhlcml0OnZ0LGFkZFBsdWdpbjplZSxyZW1vdmVQbHVnaW46S30pLGUuZGVidWdNb2RlPWZ1bmN0aW9uKCl7cz0hMX0sZS5zYWZlTW9kZT1mdW5jdGlvbigpe3M9ITB9LGUudmVyc2lvblN0cmluZz1TcixlLnJlZ2V4PXtjb25jYXQ6bWUsbG9va2FoZWFkOmt0LGVpdGhlcjokZSxvcHRpb25hbDpIbixhbnlOdW1iZXJPZlRpbWVzOlBufTtmb3IobGV0IGEgaW4gemUpdHlwZW9mIHplW2FdPT0ib2JqZWN0IiYmeHQoemVbYV0pO3JldHVybiBPYmplY3QuYXNzaWduKGUsemUpLGV9LHhlPUx0KHt9KTt4ZS5uZXdJbnN0YW5jZT0oKT0+THQoe30pO0R0LmV4cG9ydHM9eGU7eGUuSGlnaGxpZ2h0SlM9eGU7eGUuZGVmYXVsdD14ZX0pO3ZhciBqZT1PYmplY3QuZnJlZXplKHtwbGFpbnRleHQ6IlBsYWluIHRleHQiLGh0bWw6IkhUTUwiLGNzczoiQ1NTIixzY3NzOiJTQ1NTIixqYXZhc2NyaXB0OiJKYXZhU2NyaXB0Iix0eXBlc2NyaXB0OiJUeXBlU2NyaXB0IixwaHA6IlBIUCIsanNvbjoiSlNPTiIseWFtbDoiWUFNTCIsc3FsOiJTUUwiLGJhc2g6IkJhc2giLG1hcmtkb3duOiJNYXJrZG93biIsZGlmZjoiRGlmZiJ9KSxXZT1PYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKGplKSksQWU9T2JqZWN0LmZyZWV6ZSh7bGFuZ3VhZ2U6InBsYWludGV4dCIsdGhlbWU6ImF1dG8iLHNob3dMYW5ndWFnZTohMCxzaG93Q29weTohMCxjb2xsYXBzaWJsZTohMCxpbml0aWFsU3RhdGU6ImNvbGxhcHNlZCIsY29sbGFwc2VkTGluZXM6IjEyIix3cmFwTGluZXM6ITEsc2hvd1dyYXBUb2dnbGU6ITAsdGFiU2l6ZToiNCIsdGV4dFNpemU6Im5vcm1hbCIsc2hvd0NvbnZlcnRlcjohMSxzaG93TGluZU51bWJlcnM6ITEsaGlnaGxpZ2h0TGluZXM6IiIsc2hvd0Rvd25sb2FkOiExLHRvb2xiYXJTdHlsZToidGV4dCIsc3RhcnRMaW5lOiIxIixhZGRlZExpbmVzOiIiLHJlbW92ZWRMaW5lczoiIn0pLEJlPU9iamVjdC5mcmVlemUoe2NvcHk6IkNvcHkgY29kZSIsY29weVN1Y2Nlc3M6IkNvcGllZC4iLGNvcHlFcnJvcjoiQ29kZSBzZWxlY3RlZC4gQ29weSBpdCB3aXRoIEN0cmwrQywgQ29tbWFuZCtDIG9yIHlvdXIgZGV2aWNlJ3MgQ29weSBjb21tYW5kLiIsZXhwYW5kOiJFeHBhbmQgY29kZSIsY29sbGFwc2U6IkNvbGxhcHNlIGNvZGUiLHdyYXBPbjoiRW5hYmxlIGxpbmUgd3JhcHBpbmciLHdyYXBPZmY6IkRpc2FibGUgbGluZSB3cmFwcGluZyIscmVnaW9uOiJDb2RlIHNhbXBsZSIsZG93bmxvYWQ6IkRvd25sb2FkIGNvZGUiLGRvd25sb2FkRXJyb3I6IkRvd25sb2FkIGZhaWxlZC4gQ29weSB0aGUgY29kZSBpbnN0ZWFkLiIscGxhaW5UZXh0OiJQbGFpbiB0ZXh0IixoaWdobGlnaHRlZExpbmVzOiJIaWdobGlnaHRlZCBsaW5lcyIsYW5ub3RhdGlvbnNVbmF2YWlsYWJsZToiTGluZSBhbm5vdGF0aW9ucyBhcmUgdW5hdmFpbGFibGUgZm9yIG1vcmUgdGhhbiA1LDAwMCBsaW5lcy4gVGhlIGNvbXBsZXRlIGNvZGUgaXMgc3RpbGwgYXZhaWxhYmxlLiIsYWRkZWRMaW5lczoiQWRkZWQgbGluZXMiLHJlbW92ZWRMaW5lczoiUmVtb3ZlZCBsaW5lcyIscHJlcGFyZVRpdGxlOiJQcmVwYXJlIGNvZGUgZm9yIEV0Y2giLHByZXBhcmVIZWxwOiJUaGUgYnVpbGRlciBwcmVwYXJlcyBwYXN0ZWQgY29kZSBhdXRvbWF0aWNhbGx5LiBVc2UgdGhpcyBjb252ZXJ0ZXIgb25seSB3aGVuIGl0IGRpZCBub3Q6IHBhc3RlIHRoZSBvcmlnaW5hbCBjb2RlIGJlbG93LCBjb3B5IHRoZSBwcmVwYXJlZCByZXN1bHQgaW50byBDb2RlLCB0aGVuIHR1cm4gb2ZmIE1hbnVhbCBjb252ZXJ0ZXIgYW5kIHNhdmUuIEFsd2F5cyBwYXN0ZSB0aGUgb3JpZ2luYWwsIG5vdCBhIHByZXZpb3VzbHkgcHJlcGFyZWQgcmVzdWx0LiIscHJlcGFyZVNvdXJjZToiMS4gT3JpZ2luYWwgY29kZSIscHJlcGFyZU91dHB1dDoiMi4gUHJlcGFyZWQgY29kZSBmb3IgdGhlIENvZGUgZmllbGQiLHByZXBhcmVDb3B5OiJDb3B5IHByZXBhcmVkIGNvZGUiLHByZXBhcmVTdWNjZXNzOiJDb3BpZWQuIFBhc3RlIGludG8gdGhlIENvZGUgZmllbGQgaW4gRXRjaC4iLHByZXBhcmVFcnJvcjoiUmVzdWx0IHNlbGVjdGVkLiBQcmVzcyBDdHJsK0Mgb3IgQ29tbWFuZCtDIHRvIGNvcHkgaXQgbWFudWFsbHkuIn0pO2Z1bmN0aW9uIGJ0KGUsdCxuKXtsZXQgcj1TdHJpbmcoZT8/IiIpLnRyaW0oKXx8U3RyaW5nKHQ/PyIiKS50cmltKCkscz1TdHJpbmcobj8/IiIpLnRyaW0oKSxnPXMmJnMhPT1CZS5yZWdpb24/czpyPyJjb2RlIHNhbXBsZSI6QmUucmVnaW9uO3JldHVybiByP3IrIiwgIitnOmd9dmFyIFVlPWU9PiJkYXRhLWVkLWNvZGUtYmxvY2stIitlLnJlcGxhY2UoL1tBLVpdL2csdD0+Ii0iK3QudG9Mb3dlckNhc2UoKSk7ZnVuY3Rpb24gUm4oZSx0KXtyZXR1cm4gZT09PSEwfHxlPT09InRydWUiPyEwOmU9PT0hMXx8ZT09PSJmYWxzZSI/ITE6dH1mdW5jdGlvbiBJbihlKXtpZih0eXBlb2YgZSE9InN0cmluZyJ8fCEvXlswLTldKyQvLnRlc3QoZSkpcmV0dXJuIDEyO2xldCB0PU51bWJlcihlKTtyZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIodCkmJnQ+PTEmJnQ8PTEwMD90OjEyfWZ1bmN0aW9uIENuKGUpe2lmKHR5cGVvZiBlIT0ic3RyaW5nInx8IS9eKD86XGQrKD86XC5cZCspP3xcLlxkKykkLy50ZXN0KGUudHJpbSgpKSlyZXR1cm4iNCI7bGV0IHQ9TnVtYmVyKGUpO3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ8PTI1Nj9TdHJpbmcodCk6IjQifXZhciBMbj0xZTY7ZnVuY3Rpb24gRG4oZSl7aWYodHlwZW9mIGUhPSJzdHJpbmcifHwhL15ccypcZCtccyokLy50ZXN0KGUpKXJldHVybiAxO2xldCB0PU51bWJlcihlKTtyZXR1cm4gdD49MSYmdDw9TG4/dDoxfXZhciBCbj1bImhpZ2hsaWdodExpbmVzIiwiYWRkZWRMaW5lcyIsInJlbW92ZWRMaW5lcyJdO2Z1bmN0aW9uIG10KGU9e30pe2xldCB0PXt9LG49e2xhbmd1YWdlOldlLHRoZW1lOlsiYXV0byIsImxpZ2h0IiwiZGFyayIsInNpdGUiXSxpbml0aWFsU3RhdGU6WyJjb2xsYXBzZWQiLCJleHBhbmRlZCJdLHRleHRTaXplOlsic21hbGwiLCJub3JtYWwiLCJsYXJnZSJdLHRvb2xiYXJTdHlsZTpbInRleHQiLCJpY29ucyJdfTtmb3IobGV0W3Isc11vZiBPYmplY3QuZW50cmllcyhBZSkpdFtyXT10eXBlb2Ygcz09ImJvb2xlYW4iP1JuKGVbcl0scyk6cj09PSJjb2xsYXBzZWRMaW5lcyI/SW4oZVtyXSk6cj09PSJ0YWJTaXplIj9DbihlW3JdKTpyPT09InN0YXJ0TGluZSI/RG4oZVtyXSk6Qm4uaW5jbHVkZXMocik/dHlwZW9mIGVbcl09PSJzdHJpbmciP2Vbcl06czp0eXBlb2YgZVtyXT09InN0cmluZyImJm5bcl0uaW5jbHVkZXMoZVtyXSk/ZVtyXTpzO3JldHVybiB0fXZhciBVdD1NbihCdCgpLDEpO3ZhciB6dD1VdC5kZWZhdWx0O2Z1bmN0aW9uIFB0KGUpe2xldCB0PWUucmVnZXgsbj10LmNvbmNhdCgvW1xwe0x9X10vdSx0Lm9wdGlvbmFsKC9bXHB7TH0wLTlfLi1dKjovdSksL1tccHtMfTAtOV8uLV0qL3UpLHI9L1tccHtMfTAtOS5fOi1dKy91LHM9e2NsYXNzTmFtZToic3ltYm9sIixiZWdpbjovJlthLXpdKzt8JiNbMC05XSs7fCYjeFthLWYwLTldKzsvfSxnPXtiZWdpbjovXHMvLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjovIz9bYS16X11bYS16MS05Xy1dKy8saWxsZWdhbDovXG4vfV19LG89ZS5pbmhlcml0KGcse2JlZ2luOi9cKC8sZW5kOi9cKS99KSxpPWUuaW5oZXJpdChlLkFQT1NfU1RSSU5HX01PREUse2NsYXNzTmFtZToic3RyaW5nIn0pLGM9ZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToic3RyaW5nIn0pLHU9e2VuZHNXaXRoUGFyZW50OiEwLGlsbGVnYWw6LzwvLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyIixiZWdpbjpyLHJlbGV2YW5jZTowfSx7YmVnaW46Lz1ccyovLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzdHJpbmciLGVuZHNQYXJlbnQ6ITAsdmFyaWFudHM6W3tiZWdpbjovIi8sZW5kOi8iLyxjb250YWluczpbc119LHtiZWdpbjovJy8sZW5kOi8nLyxjb250YWluczpbc119LHtiZWdpbjovW15ccyInPTw+YF0rL31dfV19XX07cmV0dXJue25hbWU6IkhUTUwsIFhNTCIsYWxpYXNlczpbImh0bWwiLCJ4aHRtbCIsInJzcyIsImF0b20iLCJ4amIiLCJ4c2QiLCJ4c2wiLCJwbGlzdCIsIndzZiIsInN2ZyJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsdW5pY29kZVJlZ2V4OiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovPCFbYS16XS8sZW5kOi8+LyxyZWxldmFuY2U6MTAsY29udGFpbnM6W2csYyxpLG8se2JlZ2luOi9cWy8sZW5kOi9cXS8sY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi88IVthLXpdLyxlbmQ6Lz4vLGNvbnRhaW5zOltnLG8sYyxpXX1dfV19LGUuQ09NTUVOVCgvPCEtLS8sLy0tPi8se3JlbGV2YW5jZToxMH0pLHtiZWdpbjovPCFcW0NEQVRBXFsvLGVuZDovXF1cXT4vLHJlbGV2YW5jZToxMH0scyx7Y2xhc3NOYW1lOiJtZXRhIixlbmQ6L1w/Pi8sdmFyaWFudHM6W3tiZWdpbjovPFw/eG1sLyxyZWxldmFuY2U6MTAsY29udGFpbnM6W2NdfSx7YmVnaW46LzxcP1thLXpdW2EtejAtOV0rL31dfSx7Y2xhc3NOYW1lOiJ0YWciLGJlZ2luOi88c3R5bGUoPz1cc3w+KS8sZW5kOi8+LyxrZXl3b3Jkczp7bmFtZToic3R5bGUifSxjb250YWluczpbdV0sc3RhcnRzOntlbmQ6LzxcL3N0eWxlPi8scmV0dXJuRW5kOiEwLHN1Ykxhbmd1YWdlOiJjc3MifX0se2NsYXNzTmFtZToidGFnIixiZWdpbjovPHNjcmlwdCg/PVxzfD4pLyxlbmQ6Lz4vLGtleXdvcmRzOntuYW1lOiJzY3JpcHQifSxjb250YWluczpbdV0sc3RhcnRzOntlbmQ6LzxcL3NjcmlwdD4vLHJldHVybkVuZDohMCxzdWJMYW5ndWFnZToiamF2YXNjcmlwdCJ9fSx7Y2xhc3NOYW1lOiJ0YWciLGJlZ2luOi88Pnw8XC8+L30se2NsYXNzTmFtZToidGFnIixiZWdpbjp0LmNvbmNhdCgvPC8sdC5sb29rYWhlYWQodC5jb25jYXQobix0LmVpdGhlcigvXC8+LywvPi8sL1xzLykpKSksZW5kOi9cLz8+Lyxjb250YWluczpbe2NsYXNzTmFtZToibmFtZSIsYmVnaW46bixyZWxldmFuY2U6MCxzdGFydHM6dX1dfSx7Y2xhc3NOYW1lOiJ0YWciLGJlZ2luOnQuY29uY2F0KC88XC8vLHQubG9va2FoZWFkKHQuY29uY2F0KG4sLz4vKSkpLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJuYW1lIixiZWdpbjpuLHJlbGV2YW5jZTowfSx7YmVnaW46Lz4vLHJlbGV2YW5jZTowLGVuZHNQYXJlbnQ6ITB9XX1dfX12YXIgd3I9ZT0+KHtJTVBPUlRBTlQ6e3Njb3BlOiJtZXRhIixiZWdpbjoiIWltcG9ydGFudCJ9LEJMT0NLX0NPTU1FTlQ6ZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxIRVhDT0xPUjp7c2NvcGU6Im51bWJlciIsYmVnaW46LyMoKFswLTlhLWZBLUZdezMsNH0pfCgoWzAtOWEtZkEtRl17Mn0pezMsNH0pKVxiL30sVU5JQ09ERV9SQU5HRTp7c2NvcGU6Im51bWJlciIsYmVnaW46L1xiW1V1XVwrWzAtOUEtRmEtZl1bMC05QS1GYS1mP117MCw1fSgtWzAtOUEtRmEtZl1bMC05QS1GYS1mXXswLDV9KT8vfSxGVU5DVElPTl9ESVNQQVRDSDp7Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46L1tcdy1dKyg/PVwoKS99LEFUVFJJQlVURV9TRUxFQ1RPUl9NT0RFOntzY29wZToic2VsZWN0b3ItYXR0ciIsYmVnaW46L1xbLyxlbmQ6L1xdLyxpbGxlZ2FsOiIkIixjb250YWluczpbZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREVdfSxDU1NfTlVNQkVSX01PREU6e3Njb3BlOiJudW1iZXIiLGJlZ2luOmUuTlVNQkVSX1JFKyIoJXxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjfHB4fGRlZ3xncmFkfHJhZHx0dXJufHN8bXN8SHp8a0h6fGRwaXxkcGNtfGRwcHgpPyIscmVsZXZhbmNlOjB9LENTU19WQVJJQUJMRTp7Y2xhc3NOYW1lOiJhdHRyIixiZWdpbjovLS1bQS1aYS16X11bQS1aYS16MC05Xy1dKi99fSksQXI9WyJhIiwiYWJiciIsImFkZHJlc3MiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJibG9ja3F1b3RlIiwiYm9keSIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjaXRlIiwiY29kZSIsImRkIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpdiIsImRsIiwiZHQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkZXIiLCJoZ3JvdXAiLCJodG1sIiwiaSIsImlmcmFtZSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXJrIiwibWVudSIsIm5hdiIsIm9iamVjdCIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJwIiwicGljdHVyZSIsInEiLCJxdW90ZSIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic291cmNlIiwic3BhbiIsInN0cm9uZyIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInVsIiwidmFyIiwidmlkZW8iXSxUcj1bImRlZnMiLCJnIiwibWFya2VyIiwibWFzayIsInBhdHRlcm4iLCJzdmciLCJzd2l0Y2giLCJzeW1ib2wiLCJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVGbG9vZCIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1vcnBob2xvZ3kiLCJmZU9mZnNldCIsImZlU3BlY3VsYXJMaWdodGluZyIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSIsImxpbmVhckdyYWRpZW50IiwicmFkaWFsR3JhZGllbnQiLCJzdG9wIiwiY2lyY2xlIiwiZWxsaXBzZSIsImltYWdlIiwibGluZSIsInBhdGgiLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyZWN0IiwidGV4dCIsInVzZSIsInRleHRQYXRoIiwidHNwYW4iLCJmb3JlaWduT2JqZWN0IiwiY2xpcFBhdGgiXSxPcj1bLi4uQXIsLi4uVHJdLE1yPVsiYW55LWhvdmVyIiwiYW55LXBvaW50ZXIiLCJhc3BlY3QtcmF0aW8iLCJjb2xvciIsImNvbG9yLWdhbXV0IiwiY29sb3ItaW5kZXgiLCJkZXZpY2UtYXNwZWN0LXJhdGlvIiwiZGV2aWNlLWhlaWdodCIsImRldmljZS13aWR0aCIsImRpc3BsYXktbW9kZSIsImZvcmNlZC1jb2xvcnMiLCJncmlkIiwiaGVpZ2h0IiwiaG92ZXIiLCJpbnZlcnRlZC1jb2xvcnMiLCJtb25vY2hyb21lIiwib3JpZW50YXRpb24iLCJvdmVyZmxvdy1ibG9jayIsIm92ZXJmbG93LWlubGluZSIsInBvaW50ZXIiLCJwcmVmZXJzLWNvbG9yLXNjaGVtZSIsInByZWZlcnMtY29udHJhc3QiLCJwcmVmZXJzLXJlZHVjZWQtbW90aW9uIiwicHJlZmVycy1yZWR1Y2VkLXRyYW5zcGFyZW5jeSIsInJlc29sdXRpb24iLCJzY2FuIiwic2NyaXB0aW5nIiwidXBkYXRlIiwid2lkdGgiLCJtaW4td2lkdGgiLCJtYXgtd2lkdGgiLCJtaW4taGVpZ2h0IiwibWF4LWhlaWdodCJdLnNvcnQoKS5yZXZlcnNlKCksUnI9WyJhY3RpdmUiLCJhbnktbGluayIsImJsYW5rIiwiY2hlY2tlZCIsImN1cnJlbnQiLCJkZWZhdWx0IiwiZGVmaW5lZCIsImRpciIsImRpc2FibGVkIiwiZHJvcCIsImVtcHR5IiwiZW5hYmxlZCIsImZpcnN0IiwiZmlyc3QtY2hpbGQiLCJmaXJzdC1vZi10eXBlIiwiZnVsbHNjcmVlbiIsImZ1dHVyZSIsImZvY3VzIiwiZm9jdXMtdmlzaWJsZSIsImZvY3VzLXdpdGhpbiIsImhhcyIsImhvc3QiLCJob3N0LWNvbnRleHQiLCJob3ZlciIsImluZGV0ZXJtaW5hdGUiLCJpbi1yYW5nZSIsImludmFsaWQiLCJpcyIsImxhbmciLCJsYXN0LWNoaWxkIiwibGFzdC1vZi10eXBlIiwibGVmdCIsImxpbmsiLCJsb2NhbC1saW5rIiwibm90IiwibnRoLWNoaWxkIiwibnRoLWNvbCIsIm50aC1sYXN0LWNoaWxkIiwibnRoLWxhc3QtY29sIiwibnRoLWxhc3Qtb2YtdHlwZSIsIm50aC1vZi10eXBlIiwib25seS1jaGlsZCIsIm9ubHktb2YtdHlwZSIsIm9wdGlvbmFsIiwib3V0LW9mLXJhbmdlIiwicGFzdCIsInBsYWNlaG9sZGVyLXNob3duIiwicmVhZC1vbmx5IiwicmVhZC13cml0ZSIsInJlcXVpcmVkIiwicmlnaHQiLCJyb290Iiwic2NvcGUiLCJ0YXJnZXQiLCJ0YXJnZXQtd2l0aGluIiwidXNlci1pbnZhbGlkIiwidmFsaWQiLCJ2aXNpdGVkIiwid2hlcmUiXS5zb3J0KCkucmV2ZXJzZSgpLElyPVsiYWZ0ZXIiLCJiYWNrZHJvcCIsImJlZm9yZSIsImN1ZSIsImN1ZS1yZWdpb24iLCJmaXJzdC1sZXR0ZXIiLCJmaXJzdC1saW5lIiwiZ3JhbW1hci1lcnJvciIsIm1hcmtlciIsInBhcnQiLCJwbGFjZWhvbGRlciIsInNlbGVjdGlvbiIsInNsb3R0ZWQiLCJzcGVsbGluZy1lcnJvciJdLnNvcnQoKS5yZXZlcnNlKCksQ3I9WyJhY2NlbnQtY29sb3IiLCJhbGlnbi1jb250ZW50IiwiYWxpZ24taXRlbXMiLCJhbGlnbi1zZWxmIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYWxsIiwiYW5jaG9yLW5hbWUiLCJhbmltYXRpb24iLCJhbmltYXRpb24tY29tcG9zaXRpb24iLCJhbmltYXRpb24tZGVsYXkiLCJhbmltYXRpb24tZGlyZWN0aW9uIiwiYW5pbWF0aW9uLWR1cmF0aW9uIiwiYW5pbWF0aW9uLWZpbGwtbW9kZSIsImFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiLCJhbmltYXRpb24tbmFtZSIsImFuaW1hdGlvbi1wbGF5LXN0YXRlIiwiYW5pbWF0aW9uLXJhbmdlIiwiYW5pbWF0aW9uLXJhbmdlLWVuZCIsImFuaW1hdGlvbi1yYW5nZS1zdGFydCIsImFuaW1hdGlvbi10aW1lbGluZSIsImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJhcHBlYXJhbmNlIiwiYXNwZWN0LXJhdGlvIiwiYmFja2Ryb3AtZmlsdGVyIiwiYmFja2ZhY2UtdmlzaWJpbGl0eSIsImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiLCJiYWNrZ3JvdW5kLWJsZW5kLW1vZGUiLCJiYWNrZ3JvdW5kLWNsaXAiLCJiYWNrZ3JvdW5kLWNvbG9yIiwiYmFja2dyb3VuZC1pbWFnZSIsImJhY2tncm91bmQtb3JpZ2luIiwiYmFja2dyb3VuZC1wb3NpdGlvbiIsImJhY2tncm91bmQtcG9zaXRpb24teCIsImJhY2tncm91bmQtcG9zaXRpb24teSIsImJhY2tncm91bmQtcmVwZWF0IiwiYmFja2dyb3VuZC1zaXplIiwiYmFzZWxpbmUtc2hpZnQiLCJibG9jay1zaXplIiwiYm9yZGVyIiwiYm9yZGVyLWJsb2NrIiwiYm9yZGVyLWJsb2NrLWNvbG9yIiwiYm9yZGVyLWJsb2NrLWVuZCIsImJvcmRlci1ibG9jay1lbmQtY29sb3IiLCJib3JkZXItYmxvY2stZW5kLXN0eWxlIiwiYm9yZGVyLWJsb2NrLWVuZC13aWR0aCIsImJvcmRlci1ibG9jay1zdGFydCIsImJvcmRlci1ibG9jay1zdGFydC1jb2xvciIsImJvcmRlci1ibG9jay1zdGFydC1zdHlsZSIsImJvcmRlci1ibG9jay1zdGFydC13aWR0aCIsImJvcmRlci1ibG9jay1zdHlsZSIsImJvcmRlci1ibG9jay13aWR0aCIsImJvcmRlci1ib3R0b20iLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLWJvdHRvbS1zdHlsZSIsImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItY29sbGFwc2UiLCJib3JkZXItY29sb3IiLCJib3JkZXItZW5kLWVuZC1yYWRpdXMiLCJib3JkZXItZW5kLXN0YXJ0LXJhZGl1cyIsImJvcmRlci1pbWFnZSIsImJvcmRlci1pbWFnZS1vdXRzZXQiLCJib3JkZXItaW1hZ2UtcmVwZWF0IiwiYm9yZGVyLWltYWdlLXNsaWNlIiwiYm9yZGVyLWltYWdlLXNvdXJjZSIsImJvcmRlci1pbWFnZS13aWR0aCIsImJvcmRlci1pbmxpbmUiLCJib3JkZXItaW5saW5lLWNvbG9yIiwiYm9yZGVyLWlubGluZS1lbmQiLCJib3JkZXItaW5saW5lLWVuZC1jb2xvciIsImJvcmRlci1pbmxpbmUtZW5kLXN0eWxlIiwiYm9yZGVyLWlubGluZS1lbmQtd2lkdGgiLCJib3JkZXItaW5saW5lLXN0YXJ0IiwiYm9yZGVyLWlubGluZS1zdGFydC1jb2xvciIsImJvcmRlci1pbmxpbmUtc3RhcnQtc3R5bGUiLCJib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoIiwiYm9yZGVyLWlubGluZS1zdHlsZSIsImJvcmRlci1pbmxpbmUtd2lkdGgiLCJib3JkZXItbGVmdCIsImJvcmRlci1sZWZ0LWNvbG9yIiwiYm9yZGVyLWxlZnQtc3R5bGUiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yYWRpdXMiLCJib3JkZXItcmlnaHQiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItcmlnaHQtc3R5bGUiLCJib3JkZXItcmlnaHQtd2lkdGgiLCJib3JkZXItc3BhY2luZyIsImJvcmRlci1zdGFydC1lbmQtcmFkaXVzIiwiYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cyIsImJvcmRlci1zdHlsZSIsImJvcmRlci10b3AiLCJib3JkZXItdG9wLWNvbG9yIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1zdHlsZSIsImJvcmRlci10b3Atd2lkdGgiLCJib3JkZXItd2lkdGgiLCJib3R0b20iLCJib3gtYWxpZ24iLCJib3gtZGVjb3JhdGlvbi1icmVhayIsImJveC1kaXJlY3Rpb24iLCJib3gtZmxleCIsImJveC1mbGV4LWdyb3VwIiwiYm94LWxpbmVzIiwiYm94LW9yZGluYWwtZ3JvdXAiLCJib3gtb3JpZW50IiwiYm94LXBhY2siLCJib3gtc2hhZG93IiwiYm94LXNpemluZyIsImJyZWFrLWFmdGVyIiwiYnJlYWstYmVmb3JlIiwiYnJlYWstaW5zaWRlIiwiY2FwdGlvbi1zaWRlIiwiY2FyZXQtY29sb3IiLCJjbGVhciIsImNsaXAiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY29sb3Itc2NoZW1lIiwiY29sdW1uLWNvdW50IiwiY29sdW1uLWZpbGwiLCJjb2x1bW4tZ2FwIiwiY29sdW1uLXJ1bGUiLCJjb2x1bW4tcnVsZS1jb2xvciIsImNvbHVtbi1ydWxlLXN0eWxlIiwiY29sdW1uLXJ1bGUtd2lkdGgiLCJjb2x1bW4tc3BhbiIsImNvbHVtbi13aWR0aCIsImNvbHVtbnMiLCJjb250YWluIiwiY29udGFpbi1pbnRyaW5zaWMtYmxvY2stc2l6ZSIsImNvbnRhaW4taW50cmluc2ljLWhlaWdodCIsImNvbnRhaW4taW50cmluc2ljLWlubGluZS1zaXplIiwiY29udGFpbi1pbnRyaW5zaWMtc2l6ZSIsImNvbnRhaW4taW50cmluc2ljLXdpZHRoIiwiY29udGFpbmVyIiwiY29udGFpbmVyLW5hbWUiLCJjb250YWluZXItdHlwZSIsImNvbnRlbnQiLCJjb250ZW50LXZpc2liaWxpdHkiLCJjb3JuZXItYm90dG9tLWxlZnQtc2hhcGUiLCJjb3JuZXItYm90dG9tLXJpZ2h0LXNoYXBlIiwiY29ybmVyLXNoYXBlIiwiY29ybmVyLXRvcC1sZWZ0LXNoYXBlIiwiY29ybmVyLXRvcC1yaWdodC1zaGFwZSIsImNvdW50ZXItaW5jcmVtZW50IiwiY291bnRlci1yZXNldCIsImNvdW50ZXItc2V0IiwiY3VlIiwiY3VlLWFmdGVyIiwiY3VlLWJlZm9yZSIsImN1cnNvciIsImN4IiwiY3kiLCJkaXJlY3Rpb24iLCJkaXNwbGF5IiwiZG9taW5hbnQtYmFzZWxpbmUiLCJlbXB0eS1jZWxscyIsImVuYWJsZS1iYWNrZ3JvdW5kIiwiZmllbGQtc2l6aW5nIiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZsZXgiLCJmbGV4LWJhc2lzIiwiZmxleC1kaXJlY3Rpb24iLCJmbGV4LWZsb3ciLCJmbGV4LWdyb3ciLCJmbGV4LXNocmluayIsImZsZXgtd3JhcCIsImZsb2F0IiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZmxvdyIsImZvbnQiLCJmb250LWRpc3BsYXkiLCJmb250LWZhbWlseSIsImZvbnQtZmVhdHVyZS1zZXR0aW5ncyIsImZvbnQta2VybmluZyIsImZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGUiLCJmb250LW9wdGljYWwtc2l6aW5nIiwiZm9udC1wYWxldHRlIiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc21vb3RoIiwiZm9udC1zbW9vdGhpbmciLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC1zeW50aGVzaXMiLCJmb250LXN5bnRoZXNpcy1wb3NpdGlvbiIsImZvbnQtc3ludGhlc2lzLXNtYWxsLWNhcHMiLCJmb250LXN5bnRoZXNpcy1zdHlsZSIsImZvbnQtc3ludGhlc2lzLXdlaWdodCIsImZvbnQtdmFyaWFudCIsImZvbnQtdmFyaWFudC1hbHRlcm5hdGVzIiwiZm9udC12YXJpYW50LWNhcHMiLCJmb250LXZhcmlhbnQtZWFzdC1hc2lhbiIsImZvbnQtdmFyaWFudC1lbW9qaSIsImZvbnQtdmFyaWFudC1saWdhdHVyZXMiLCJmb250LXZhcmlhbnQtbnVtZXJpYyIsImZvbnQtdmFyaWFudC1wb3NpdGlvbiIsImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzIiwiZm9udC13ZWlnaHQiLCJmb3JjZWQtY29sb3ItYWRqdXN0IiwiZ2FwIiwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiZ3JpZCIsImdyaWQtYXJlYSIsImdyaWQtYXV0by1jb2x1bW5zIiwiZ3JpZC1hdXRvLWZsb3ciLCJncmlkLWF1dG8tcm93cyIsImdyaWQtY29sdW1uIiwiZ3JpZC1jb2x1bW4tZW5kIiwiZ3JpZC1jb2x1bW4tc3RhcnQiLCJncmlkLWdhcCIsImdyaWQtcm93IiwiZ3JpZC1yb3ctZW5kIiwiZ3JpZC1yb3ctc3RhcnQiLCJncmlkLXRlbXBsYXRlIiwiZ3JpZC10ZW1wbGF0ZS1hcmVhcyIsImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsImdyaWQtdGVtcGxhdGUtcm93cyIsImhhbmdpbmctcHVuY3R1YXRpb24iLCJoZWlnaHQiLCJoeXBoZW5hdGUtY2hhcmFjdGVyIiwiaHlwaGVuYXRlLWxpbWl0LWNoYXJzIiwiaHlwaGVucyIsImljb24iLCJpbWFnZS1vcmllbnRhdGlvbiIsImltYWdlLXJlbmRlcmluZyIsImltYWdlLXJlc29sdXRpb24iLCJpbWUtbW9kZSIsImluaXRpYWwtbGV0dGVyIiwiaW5pdGlhbC1sZXR0ZXItYWxpZ24iLCJpbmxpbmUtc2l6ZSIsImluc2V0IiwiaW5zZXQtYXJlYSIsImluc2V0LWJsb2NrIiwiaW5zZXQtYmxvY2stZW5kIiwiaW5zZXQtYmxvY2stc3RhcnQiLCJpbnNldC1pbmxpbmUiLCJpbnNldC1pbmxpbmUtZW5kIiwiaW5zZXQtaW5saW5lLXN0YXJ0IiwiaXNvbGF0aW9uIiwianVzdGlmeS1jb250ZW50IiwianVzdGlmeS1pdGVtcyIsImp1c3RpZnktc2VsZiIsImtlcm5pbmciLCJsZWZ0IiwibGV0dGVyLXNwYWNpbmciLCJsaWdodGluZy1jb2xvciIsImxpbmUtYnJlYWsiLCJsaW5lLWhlaWdodCIsImxpbmUtaGVpZ2h0LXN0ZXAiLCJsaXN0LXN0eWxlIiwibGlzdC1zdHlsZS1pbWFnZSIsImxpc3Qtc3R5bGUtcG9zaXRpb24iLCJsaXN0LXN0eWxlLXR5cGUiLCJtYXJnaW4iLCJtYXJnaW4tYmxvY2siLCJtYXJnaW4tYmxvY2stZW5kIiwibWFyZ2luLWJsb2NrLXN0YXJ0IiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1pbmxpbmUiLCJtYXJnaW4taW5saW5lLWVuZCIsIm1hcmdpbi1pbmxpbmUtc3RhcnQiLCJtYXJnaW4tbGVmdCIsIm1hcmdpbi1yaWdodCIsIm1hcmdpbi10b3AiLCJtYXJnaW4tdHJpbSIsIm1hcmtlciIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya3MiLCJtYXNrIiwibWFzay1ib3JkZXIiLCJtYXNrLWJvcmRlci1tb2RlIiwibWFzay1ib3JkZXItb3V0c2V0IiwibWFzay1ib3JkZXItcmVwZWF0IiwibWFzay1ib3JkZXItc2xpY2UiLCJtYXNrLWJvcmRlci1zb3VyY2UiLCJtYXNrLWJvcmRlci13aWR0aCIsIm1hc2stY2xpcCIsIm1hc2stY29tcG9zaXRlIiwibWFzay1pbWFnZSIsIm1hc2stbW9kZSIsIm1hc2stb3JpZ2luIiwibWFzay1wb3NpdGlvbiIsIm1hc2stcmVwZWF0IiwibWFzay1zaXplIiwibWFzay10eXBlIiwibWFzb25yeS1hdXRvLWZsb3ciLCJtYXRoLWRlcHRoIiwibWF0aC1zaGlmdCIsIm1hdGgtc3R5bGUiLCJtYXgtYmxvY2stc2l6ZSIsIm1heC1oZWlnaHQiLCJtYXgtaW5saW5lLXNpemUiLCJtYXgtd2lkdGgiLCJtaW4tYmxvY2stc2l6ZSIsIm1pbi1oZWlnaHQiLCJtaW4taW5saW5lLXNpemUiLCJtaW4td2lkdGgiLCJtaXgtYmxlbmQtbW9kZSIsIm5hdi1kb3duIiwibmF2LWluZGV4IiwibmF2LWxlZnQiLCJuYXYtcmlnaHQiLCJuYXYtdXAiLCJub25lIiwibm9ybWFsIiwib2JqZWN0LWZpdCIsIm9iamVjdC1wb3NpdGlvbiIsIm9mZnNldCIsIm9mZnNldC1hbmNob3IiLCJvZmZzZXQtZGlzdGFuY2UiLCJvZmZzZXQtcGF0aCIsIm9mZnNldC1wb3NpdGlvbiIsIm9mZnNldC1yb3RhdGUiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcnBoYW5zIiwib3V0bGluZSIsIm91dGxpbmUtY29sb3IiLCJvdXRsaW5lLW9mZnNldCIsIm91dGxpbmUtc3R5bGUiLCJvdXRsaW5lLXdpZHRoIiwib3ZlcmZsb3ciLCJvdmVyZmxvdy1hbmNob3IiLCJvdmVyZmxvdy1ibG9jayIsIm92ZXJmbG93LWNsaXAtbWFyZ2luIiwib3ZlcmZsb3ctaW5saW5lIiwib3ZlcmZsb3ctd3JhcCIsIm92ZXJmbG93LXgiLCJvdmVyZmxvdy15Iiwib3ZlcmxheSIsIm92ZXJzY3JvbGwtYmVoYXZpb3IiLCJvdmVyc2Nyb2xsLWJlaGF2aW9yLWJsb2NrIiwib3ZlcnNjcm9sbC1iZWhhdmlvci1pbmxpbmUiLCJvdmVyc2Nyb2xsLWJlaGF2aW9yLXgiLCJvdmVyc2Nyb2xsLWJlaGF2aW9yLXkiLCJwYWRkaW5nIiwicGFkZGluZy1ibG9jayIsInBhZGRpbmctYmxvY2stZW5kIiwicGFkZGluZy1ibG9jay1zdGFydCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1pbmxpbmUiLCJwYWRkaW5nLWlubGluZS1lbmQiLCJwYWRkaW5nLWlubGluZS1zdGFydCIsInBhZGRpbmctbGVmdCIsInBhZGRpbmctcmlnaHQiLCJwYWRkaW5nLXRvcCIsInBhZ2UiLCJwYWdlLWJyZWFrLWFmdGVyIiwicGFnZS1icmVhay1iZWZvcmUiLCJwYWdlLWJyZWFrLWluc2lkZSIsInBhaW50LW9yZGVyIiwicGF1c2UiLCJwYXVzZS1hZnRlciIsInBhdXNlLWJlZm9yZSIsInBlcnNwZWN0aXZlIiwicGVyc3BlY3RpdmUtb3JpZ2luIiwicGxhY2UtY29udGVudCIsInBsYWNlLWl0ZW1zIiwicGxhY2Utc2VsZiIsInBvaW50ZXItZXZlbnRzIiwicG9zaXRpb24iLCJwb3NpdGlvbi1hbmNob3IiLCJwb3NpdGlvbi12aXNpYmlsaXR5IiwicHJpbnQtY29sb3ItYWRqdXN0IiwicXVvdGVzIiwiciIsInJlc2l6ZSIsInJlc3QiLCJyZXN0LWFmdGVyIiwicmVzdC1iZWZvcmUiLCJyaWdodCIsInJvdGF0ZSIsInJvdy1nYXAiLCJydWJ5LWFsaWduIiwicnVieS1wb3NpdGlvbiIsInNjYWxlIiwic2Nyb2xsLWJlaGF2aW9yIiwic2Nyb2xsLW1hcmdpbiIsInNjcm9sbC1tYXJnaW4tYmxvY2siLCJzY3JvbGwtbWFyZ2luLWJsb2NrLWVuZCIsInNjcm9sbC1tYXJnaW4tYmxvY2stc3RhcnQiLCJzY3JvbGwtbWFyZ2luLWJvdHRvbSIsInNjcm9sbC1tYXJnaW4taW5saW5lIiwic2Nyb2xsLW1hcmdpbi1pbmxpbmUtZW5kIiwic2Nyb2xsLW1hcmdpbi1pbmxpbmUtc3RhcnQiLCJzY3JvbGwtbWFyZ2luLWxlZnQiLCJzY3JvbGwtbWFyZ2luLXJpZ2h0Iiwic2Nyb2xsLW1hcmdpbi10b3AiLCJzY3JvbGwtcGFkZGluZyIsInNjcm9sbC1wYWRkaW5nLWJsb2NrIiwic2Nyb2xsLXBhZGRpbmctYmxvY2stZW5kIiwic2Nyb2xsLXBhZGRpbmctYmxvY2stc3RhcnQiLCJzY3JvbGwtcGFkZGluZy1ib3R0b20iLCJzY3JvbGwtcGFkZGluZy1pbmxpbmUiLCJzY3JvbGwtcGFkZGluZy1pbmxpbmUtZW5kIiwic2Nyb2xsLXBhZGRpbmctaW5saW5lLXN0YXJ0Iiwic2Nyb2xsLXBhZGRpbmctbGVmdCIsInNjcm9sbC1wYWRkaW5nLXJpZ2h0Iiwic2Nyb2xsLXBhZGRpbmctdG9wIiwic2Nyb2xsLXNuYXAtYWxpZ24iLCJzY3JvbGwtc25hcC1zdG9wIiwic2Nyb2xsLXNuYXAtdHlwZSIsInNjcm9sbC10aW1lbGluZSIsInNjcm9sbC10aW1lbGluZS1heGlzIiwic2Nyb2xsLXRpbWVsaW5lLW5hbWUiLCJzY3JvbGxiYXItY29sb3IiLCJzY3JvbGxiYXItZ3V0dGVyIiwic2Nyb2xsYmFyLXdpZHRoIiwic2hhcGUtaW1hZ2UtdGhyZXNob2xkIiwic2hhcGUtbWFyZ2luIiwic2hhcGUtb3V0c2lkZSIsInNoYXBlLXJlbmRlcmluZyIsInNwZWFrIiwic3BlYWstYXMiLCJzcmMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlLXdpZHRoIiwidGFiLXNpemUiLCJ0YWJsZS1sYXlvdXQiLCJ0ZXh0LWFsaWduIiwidGV4dC1hbGlnbi1hbGwiLCJ0ZXh0LWFsaWduLWxhc3QiLCJ0ZXh0LWFuY2hvciIsInRleHQtY29tYmluZS11cHJpZ2h0IiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIiwidGV4dC1kZWNvcmF0aW9uLWxpbmUiLCJ0ZXh0LWRlY29yYXRpb24tc2tpcCIsInRleHQtZGVjb3JhdGlvbi1za2lwLWluayIsInRleHQtZGVjb3JhdGlvbi1zdHlsZSIsInRleHQtZGVjb3JhdGlvbi10aGlja25lc3MiLCJ0ZXh0LWVtcGhhc2lzIiwidGV4dC1lbXBoYXNpcy1jb2xvciIsInRleHQtZW1waGFzaXMtcG9zaXRpb24iLCJ0ZXh0LWVtcGhhc2lzLXN0eWxlIiwidGV4dC1pbmRlbnQiLCJ0ZXh0LWp1c3RpZnkiLCJ0ZXh0LW9yaWVudGF0aW9uIiwidGV4dC1vdmVyZmxvdyIsInRleHQtcmVuZGVyaW5nIiwidGV4dC1zaGFkb3ciLCJ0ZXh0LXNpemUtYWRqdXN0IiwidGV4dC10cmFuc2Zvcm0iLCJ0ZXh0LXVuZGVybGluZS1vZmZzZXQiLCJ0ZXh0LXVuZGVybGluZS1wb3NpdGlvbiIsInRleHQtd3JhcCIsInRleHQtd3JhcC1tb2RlIiwidGV4dC13cmFwLXN0eWxlIiwidGltZWxpbmUtc2NvcGUiLCJ0b3AiLCJ0b3VjaC1hY3Rpb24iLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tYm94IiwidHJhbnNmb3JtLW9yaWdpbiIsInRyYW5zZm9ybS1zdHlsZSIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9uLWJlaGF2aW9yIiwidHJhbnNpdGlvbi1kZWxheSIsInRyYW5zaXRpb24tZHVyYXRpb24iLCJ0cmFuc2l0aW9uLXByb3BlcnR5IiwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLCJ0cmFuc2xhdGUiLCJ1bmljb2RlLWJpZGkiLCJ1bmljb2RlLXJhbmdlIiwidXNlci1tb2RpZnkiLCJ1c2VyLXNlbGVjdCIsInZlY3Rvci1lZmZlY3QiLCJ2ZXJ0aWNhbC1hbGlnbiIsInZpZXctdGltZWxpbmUiLCJ2aWV3LXRpbWVsaW5lLWF4aXMiLCJ2aWV3LXRpbWVsaW5lLWluc2V0Iiwidmlldy10aW1lbGluZS1uYW1lIiwidmlldy10cmFuc2l0aW9uLW5hbWUiLCJ2aXNpYmlsaXR5Iiwidm9pY2UtYmFsYW5jZSIsInZvaWNlLWR1cmF0aW9uIiwidm9pY2UtZmFtaWx5Iiwidm9pY2UtcGl0Y2giLCJ2b2ljZS1yYW5nZSIsInZvaWNlLXJhdGUiLCJ2b2ljZS1zdHJlc3MiLCJ2b2ljZS12b2x1bWUiLCJ3aGl0ZS1zcGFjZSIsIndoaXRlLXNwYWNlLWNvbGxhcHNlIiwid2lkb3dzIiwid2lkdGgiLCJ3aWxsLWNoYW5nZSIsIndvcmQtYnJlYWsiLCJ3b3JkLXNwYWNpbmciLCJ3b3JkLXdyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4IiwieSIsInotaW5kZXgiLCJ6b29tIl0uc29ydCgpLnJldmVyc2UoKTtmdW5jdGlvbiBIdChlKXtsZXQgdD1lLnJlZ2V4LG49d3IoZSkscj17YmVnaW46Ly0od2Via2l0fG1venxtc3xvKS0oPz1bYS16XSkvfSxzPSJhbmQgb3Igbm90IG9ubHkiLGc9L0AtP1x3W1x3XSooLVx3KykqLyxvPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiIsaT1bZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREVdO3JldHVybntuYW1lOiJDU1MiLGNhc2VfaW5zZW5zaXRpdmU6ITAsaWxsZWdhbDovWz18J1wkXS8sa2V5d29yZHM6e2tleWZyYW1lUG9zaXRpb246ImZyb20gdG8ifSxjbGFzc05hbWVBbGlhc2VzOntrZXlmcmFtZVBvc2l0aW9uOiJzZWxlY3Rvci10YWcifSxjb250YWluczpbbi5CTE9DS19DT01NRU5ULHIsbi5DU1NfTlVNQkVSX01PREUse2NsYXNzTmFtZToic2VsZWN0b3ItaWQiLGJlZ2luOi8jW0EtWmEtejAtOV8tXSsvLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzZWxlY3Rvci1jbGFzcyIsYmVnaW46IlxcLiIrbyxyZWxldmFuY2U6MH0sbi5BVFRSSUJVVEVfU0VMRUNUT1JfTU9ERSx7Y2xhc3NOYW1lOiJzZWxlY3Rvci1wc2V1ZG8iLHZhcmlhbnRzOlt7YmVnaW46IjooIitSci5qb2luKCJ8IikrIikifSx7YmVnaW46IjooOik/KCIrSXIuam9pbigifCIpKyIpIn1dfSxuLkNTU19WQVJJQUJMRSx7Y2xhc3NOYW1lOiJhdHRyaWJ1dGUiLGJlZ2luOiJcXGIoIitDci5qb2luKCJ8IikrIilcXGIifSx7YmVnaW46LzovLGVuZDovWzt9e10vLGNvbnRhaW5zOltuLkJMT0NLX0NPTU1FTlQsbi5IRVhDT0xPUixuLklNUE9SVEFOVCxuLkNTU19OVU1CRVJfTU9ERSxuLlVOSUNPREVfUkFOR0UsLi4uaSx7YmVnaW46Lyh1cmx8ZGF0YS11cmkpXCgvLGVuZDovXCkvLHJlbGV2YW5jZTowLGtleXdvcmRzOntidWlsdF9pbjoidXJsIGRhdGEtdXJpIn0sY29udGFpbnM6Wy4uLmkse2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovW14pXS8sZW5kc1dpdGhQYXJlbnQ6ITAsZXhjbHVkZUVuZDohMH1dfSxuLkZVTkNUSU9OX0RJU1BBVENIXX0se2JlZ2luOnQubG9va2FoZWFkKC9ALyksZW5kOiJbeztdIixyZWxldmFuY2U6MCxpbGxlZ2FsOi86Lyxjb250YWluczpbe2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46Z30se2JlZ2luOi9ccy8sZW5kc1dpdGhQYXJlbnQ6ITAsZXhjbHVkZUVuZDohMCxyZWxldmFuY2U6MCxrZXl3b3Jkczp7JHBhdHRlcm46L1thLXotXSsvLGtleXdvcmQ6cyxhdHRyaWJ1dGU6TXIuam9pbigiICIpfSxjb250YWluczpbe2JlZ2luOi9bYS16LV0rKD89OikvLGNsYXNzTmFtZToiYXR0cmlidXRlIn0sLi4uaSxuLkNTU19OVU1CRVJfTU9ERV19XX0se2NsYXNzTmFtZToic2VsZWN0b3ItdGFnIixiZWdpbjoiXFxiKCIrT3Iuam9pbigifCIpKyIpXFxiIn1dfX12YXIgJHQ9IltBLVphLXokX11bMC05QS1aYS16JF9dKiIsTHI9WyJhcyIsImluIiwib2YiLCJpZiIsImZvciIsIndoaWxlIiwiZmluYWxseSIsInZhciIsIm5ldyIsImZ1bmN0aW9uIiwiZG8iLCJyZXR1cm4iLCJ2b2lkIiwiZWxzZSIsImJyZWFrIiwiY2F0Y2giLCJpbnN0YW5jZW9mIiwid2l0aCIsInRocm93IiwiY2FzZSIsImRlZmF1bHQiLCJ0cnkiLCJzd2l0Y2giLCJjb250aW51ZSIsInR5cGVvZiIsImRlbGV0ZSIsImxldCIsInlpZWxkIiwiY29uc3QiLCJjbGFzcyIsImRlYnVnZ2VyIiwiYXN5bmMiLCJhd2FpdCIsInN0YXRpYyIsImltcG9ydCIsImZyb20iLCJleHBvcnQiLCJleHRlbmRzIiwidXNpbmciXSxEcj1bInRydWUiLCJmYWxzZSIsIm51bGwiLCJ1bmRlZmluZWQiLCJOYU4iLCJJbmZpbml0eSJdLEd0PVsiT2JqZWN0IiwiRnVuY3Rpb24iLCJCb29sZWFuIiwiU3ltYm9sIiwiTWF0aCIsIkRhdGUiLCJOdW1iZXIiLCJCaWdJbnQiLCJTdHJpbmciLCJSZWdFeHAiLCJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkludDhBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkJpZ0ludDY0QXJyYXkiLCJCaWdVaW50NjRBcnJheSIsIlNldCIsIk1hcCIsIldlYWtTZXQiLCJXZWFrTWFwIiwiQXJyYXlCdWZmZXIiLCJTaGFyZWRBcnJheUJ1ZmZlciIsIkF0b21pY3MiLCJEYXRhVmlldyIsIkpTT04iLCJQcm9taXNlIiwiR2VuZXJhdG9yIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJBc3luY0Z1bmN0aW9uIiwiUmVmbGVjdCIsIlByb3h5IiwiSW50bCIsIldlYkFzc2VtYmx5Il0sRnQ9WyJFcnJvciIsIkV2YWxFcnJvciIsIkludGVybmFsRXJyb3IiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIl0sS3Q9WyJzZXRJbnRlcnZhbCIsInNldFRpbWVvdXQiLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0IiwicmVxdWlyZSIsImV4cG9ydHMiLCJldmFsIiwiaXNGaW5pdGUiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJwYXJzZUludCIsImRlY29kZVVSSSIsImRlY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsInVuZXNjYXBlIl0sQnI9WyJhcmd1bWVudHMiLCJ0aGlzIiwic3VwZXIiLCJjb25zb2xlIiwid2luZG93IiwiZG9jdW1lbnQiLCJsb2NhbFN0b3JhZ2UiLCJzZXNzaW9uU3RvcmFnZSIsIm1vZHVsZSIsInNlbGYiLCJnbG9iYWwiXSxVcj1bXS5jb25jYXQoS3QsR3QsRnQpO2Z1bmN0aW9uIFp0KGUpe2xldCB0PWUucmVnZXgsbj0oYix7YWZ0ZXI6aH0pPT57bGV0IEI9IjwvIitiWzBdLnNsaWNlKDEpO3JldHVybiBiLmlucHV0LmluZGV4T2YoQixoKSE9PS0xfSxyPSR0LHM9e2JlZ2luOiI8PiIsZW5kOiI8Lz4ifSxnPS88W0EtWmEtejAtOVxcLl86LV0rXHMqXC8+LyxvPXtiZWdpbjovPFtBLVphLXowLTlcXC5fOi1dKy8sZW5kOi9cL1tBLVphLXowLTlcXC5fOi1dKz58XC8+Lyxpc1RydWx5T3BlbmluZ1RhZzooYixoKT0+e2xldCBCPWJbMF0ubGVuZ3RoK2IuaW5kZXgsVT1iLmlucHV0W0JdO2lmKFU9PT0iPCJ8fFU9PT0iLCIpe2guaWdub3JlTWF0Y2goKTtyZXR1cm59VT09PSI+IiYmKG4oYix7YWZ0ZXI6Qn0pfHxoLmlnbm9yZU1hdGNoKCkpO2xldCBGLHE9Yi5pbnB1dC5zdWJzdHJpbmcoQik7aWYoRj1xLm1hdGNoKC9eXHMqPS8pKXtoLmlnbm9yZU1hdGNoKCk7cmV0dXJufWlmKChGPXEubWF0Y2goL15ccytleHRlbmRzXHMrLykpJiZGLmluZGV4PT09MCl7aC5pZ25vcmVNYXRjaCgpO3JldHVybn19fSxpPXskcGF0dGVybjokdCxrZXl3b3JkOkxyLGxpdGVyYWw6RHIsYnVpbHRfaW46VXIsInZhcmlhYmxlLmxhbmd1YWdlIjpCcn0sYz0iWzAtOV0oXz9bMC05XSkqIix1PWBcXC4oJHtjfSlgLHc9IjB8WzEtOV0oXz9bMC05XSkqfDBbMC03XSpbODldWzAtOV0qIixDPXtjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3tiZWdpbjpgKFxcYigke3d9KSgoJHt1fSl8XFwuKT98KCR7dX0pKVtlRV1bKy1dPygke2N9KVxcYmB9LHtiZWdpbjpgXFxiKCR7d30pXFxiKCgke3V9KVxcYnxcXC4pP3woJHt1fSlcXGJgfSx7YmVnaW46IlxcYigwfFsxLTldKF8/WzAtOV0pKiluXFxiIn0se2JlZ2luOiJcXGIwW3hYXVswLTlhLWZBLUZdKF8/WzAtOWEtZkEtRl0pKm4/XFxiIn0se2JlZ2luOiJcXGIwW2JCXVswLTFdKF8/WzAtMV0pKm4/XFxiIn0se2JlZ2luOiJcXGIwW29PXVswLTddKF8/WzAtN10pKm4/XFxiIn0se2JlZ2luOiJcXGIwWzAtN10rbj9cXGIifV0scmVsZXZhbmNlOjB9LEk9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJcXCRcXHsiLGVuZDoiXFx9IixrZXl3b3JkczppLGNvbnRhaW5zOltdfSxNPXtiZWdpbjoiLj9odG1sYCIsZW5kOiIiLHN0YXJ0czp7ZW5kOiJgIixyZXR1cm5FbmQ6ITEsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxJXSxzdWJMYW5ndWFnZToieG1sIn19LEc9e2JlZ2luOiIuP2Nzc2AiLGVuZDoiIixzdGFydHM6e2VuZDoiYCIscmV0dXJuRW5kOiExLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsSV0sc3ViTGFuZ3VhZ2U6ImNzcyJ9fSxMPXtiZWdpbjoiLj9ncWxgIixlbmQ6IiIsc3RhcnRzOntlbmQ6ImAiLHJldHVybkVuZDohMSxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLEldLHN1Ykxhbmd1YWdlOiJncmFwaHFsIn19LHA9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiYCIsZW5kOiJgIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLEldfSxrPXtjbGFzc05hbWU6ImNvbW1lbnQiLHZhcmlhbnRzOltlLkNPTU1FTlQoL1wvXCpcKig/IVwvKS8sIlxcKi8iLHtyZWxldmFuY2U6MCxjb250YWluczpbe2JlZ2luOiIoPz1AW0EtWmEtel0rKSIscmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImRvY3RhZyIsYmVnaW46IkBbQS1aYS16XSsifSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFx7IixlbmQ6IlxcfSIsZXhjbHVkZUVuZDohMCxleGNsdWRlQmVnaW46ITAscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjpyKyIoPz1cXHMqKC0pfCQpIixlbmRzUGFyZW50OiEwLHJlbGV2YW5jZTowfSx7YmVnaW46Lyg/PVteXG5dKVxzLyxyZWxldmFuY2U6MH1dfV19KSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQ19MSU5FX0NPTU1FTlRfTU9ERV19LHk9W2UuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLE0sRyxMLHAse21hdGNoOi9cJFxkKy99LENdO0kuY29udGFpbnM9eS5jb25jYXQoe2JlZ2luOi9cey8sZW5kOi9cfS8sa2V5d29yZHM6aSxjb250YWluczpbInNlbGYiXS5jb25jYXQoeSl9KTtsZXQgbT1bXS5jb25jYXQoayxJLmNvbnRhaW5zKSxsPW0uY29uY2F0KFt7YmVnaW46LyhccyopXCgvLGVuZDovXCkvLGtleXdvcmRzOmksY29udGFpbnM6WyJzZWxmIl0uY29uY2F0KG0pfV0pLEU9e2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjovKFxzKilcKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6aSxjb250YWluczpsfSxUPXt2YXJpYW50czpbe21hdGNoOlsvY2xhc3MvLC9ccysvLHIsL1xzKy8sL2V4dGVuZHMvLC9ccysvLHQuY29uY2F0KHIsIigiLHQuY29uY2F0KC9cLi8sciksIikqIildLHNjb3BlOnsxOiJrZXl3b3JkIiwzOiJ0aXRsZS5jbGFzcyIsNToia2V5d29yZCIsNzoidGl0bGUuY2xhc3MuaW5oZXJpdGVkIn19LHttYXRjaDpbL2NsYXNzLywvXHMrLyxyXSxzY29wZTp7MToia2V5d29yZCIsMzoidGl0bGUuY2xhc3MifX1dfSxBPXtyZWxldmFuY2U6MCxtYXRjaDp0LmVpdGhlcigvXGJKU09OLywvXGJbQS1aXVthLXpdKyhbQS1aXVthLXpdKnxcZCkqLywvXGJbQS1aXXsyLH0oW0EtWl1bYS16XSt8XGQpKyhbQS1aXVthLXpdKikqLywvXGJbQS1aXXsyLH1bYS16XSsoW0EtWl1bYS16XSt8XGQpKihbQS1aXVthLXpdKikqLyksY2xhc3NOYW1lOiJ0aXRsZS5jbGFzcyIsa2V5d29yZHM6e186Wy4uLkd0LC4uLkZ0XX19LHo9e2xhYmVsOiJ1c2Vfc3RyaWN0IixjbGFzc05hbWU6Im1ldGEiLHJlbGV2YW5jZToxMCxiZWdpbjovXlxzKlsnIl11c2UgKHN0cmljdHxhc20pWyciXS99LEo9e3ZhcmlhbnRzOlt7bWF0Y2g6Wy9mdW5jdGlvbi8sL1xzKy8sciwvKD89XHMqXCgpL119LHttYXRjaDpbL2Z1bmN0aW9uLywvXHMqKD89XCgpL119XSxjbGFzc05hbWU6ezE6ImtleXdvcmQiLDM6InRpdGxlLmZ1bmN0aW9uIn0sbGFiZWw6ImZ1bmMuZGVmIixjb250YWluczpbRV0saWxsZWdhbDovJS99LHRlPXtyZWxldmFuY2U6MCxtYXRjaDovXGJbQS1aXVtBLVpfMC05XStcYi8sY2xhc3NOYW1lOiJ2YXJpYWJsZS5jb25zdGFudCJ9O2Z1bmN0aW9uIGVlKGIpe3JldHVybiB0LmNvbmNhdCgiKD8hIixiLmpvaW4oInwiKSwiKSIpfWxldCBLPXttYXRjaDp0LmNvbmNhdCgvXGIvLGVlKFsuLi5LdCwic3VwZXIiLCJpbXBvcnQiLCJhd2FpdCJdLm1hcChiPT5gJHtifVxccypcXChgKSkscix0Lmxvb2thaGVhZCgvXHMqXCgvKSksY2xhc3NOYW1lOiJ0aXRsZS5mdW5jdGlvbiIscmVsZXZhbmNlOjB9LHg9e2JlZ2luOnQuY29uY2F0KC9cLi8sdC5sb29rYWhlYWQodC5jb25jYXQociwvKD8hWzAtOUEtWmEteiRfKF0pLykpKSxlbmQ6cixleGNsdWRlQmVnaW46ITAsa2V5d29yZHM6InByb3RvdHlwZSIsY2xhc3NOYW1lOiJwcm9wZXJ0eSIscmVsZXZhbmNlOjB9LEg9e21hdGNoOlsvZ2V0fHNldC8sL1xzKy8sciwvKD89XCgpL10sY2xhc3NOYW1lOnsxOiJrZXl3b3JkIiwzOiJ0aXRsZS5mdW5jdGlvbiJ9LGNvbnRhaW5zOlt7YmVnaW46L1woXCkvfSxFXX0sYT0iKFxcKFteKCldKihcXChbXigpXSooXFwoW14oKV0qXFwpW14oKV0qKSpcXClbXigpXSopKlxcKXwiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiKVxccyo9PiIsXz17bWF0Y2g6Wy9jb25zdHx2YXJ8bGV0LywvXHMrLyxyLC9ccyovLC89XHMqLywvKGFzeW5jXHMqKT8vLHQubG9va2FoZWFkKGEpXSxrZXl3b3JkczoiYXN5bmMiLGNsYXNzTmFtZTp7MToia2V5d29yZCIsMzoidGl0bGUuZnVuY3Rpb24ifSxjb250YWluczpbRV19O3JldHVybntuYW1lOiJKYXZhU2NyaXB0IixhbGlhc2VzOlsianMiLCJqc3giLCJtanMiLCJjanMiXSxrZXl3b3JkczppLGV4cG9ydHM6e1BBUkFNU19DT05UQUlOUzpsLENMQVNTX1JFRkVSRU5DRTpBfSxpbGxlZ2FsOi8jKD8hWyRfQS1aYS16XSkvLGNvbnRhaW5zOltlLlNIRUJBTkcoe2xhYmVsOiJzaGViYW5nIixiaW5hcnk6Im5vZGUiLHJlbGV2YW5jZTo1fSkseixlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxNLEcsTCxwLGsse21hdGNoOi9cJFxkKy99LEMsQSx7c2NvcGU6ImF0dHIiLG1hdGNoOnIrdC5sb29rYWhlYWQoIjoiKSxyZWxldmFuY2U6MH0sXyx7YmVnaW46IigiK2UuUkVfU1RBUlRFUlNfUkUrInxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxiKVxccyoiLGtleXdvcmRzOiJyZXR1cm4gdGhyb3cgY2FzZSIscmVsZXZhbmNlOjAsY29udGFpbnM6W2ssZS5SRUdFWFBfTU9ERSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46YSxyZXR1cm5CZWdpbjohMCxlbmQ6Ilxccyo9PiIsY29udGFpbnM6W3tjbGFzc05hbWU6InBhcmFtcyIsdmFyaWFudHM6W3tiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkUscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6bnVsbCxiZWdpbjovXChccypcKS8sc2tpcDohMH0se2JlZ2luOi8oXHMqKVwoLyxlbmQ6L1wpLyxleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxrZXl3b3JkczppLGNvbnRhaW5zOmx9XX1dfSx7YmVnaW46LywvLHJlbGV2YW5jZTowfSx7bWF0Y2g6L1xzKy8scmVsZXZhbmNlOjB9LHt2YXJpYW50czpbe2JlZ2luOnMuYmVnaW4sZW5kOnMuZW5kfSx7bWF0Y2g6Z30se2JlZ2luOm8uYmVnaW4sIm9uOmJlZ2luIjpvLmlzVHJ1bHlPcGVuaW5nVGFnLGVuZDpvLmVuZH1dLHN1Ykxhbmd1YWdlOiJ4bWwiLGNvbnRhaW5zOlt7YmVnaW46by5iZWdpbixlbmQ6by5lbmQsc2tpcDohMCxjb250YWluczpbInNlbGYiXX1dfV19LEose2JlZ2luS2V5d29yZHM6IndoaWxlIGlmIHN3aXRjaCBjYXRjaCBmb3IifSx7YmVnaW46IlxcYig/IWZ1bmN0aW9uKSIrZS5VTkRFUlNDT1JFX0lERU5UX1JFKyJcXChbXigpXSooXFwoW14oKV0qKFxcKFteKCldKlxcKVteKCldKikqXFwpW14oKV0qKSpcXClcXHMqXFx7IixyZXR1cm5CZWdpbjohMCxsYWJlbDoiZnVuYy5kZWYiLGNvbnRhaW5zOltFLGUuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOnIsY2xhc3NOYW1lOiJ0aXRsZS5mdW5jdGlvbiJ9KV19LHttYXRjaDovXC5cLlwuLyxyZWxldmFuY2U6MH0seCx7bWF0Y2g6IlxcJCIrcixyZWxldmFuY2U6MH0se21hdGNoOlsvXGJjb25zdHJ1Y3Rvcig/PVxzKlwoKS9dLGNsYXNzTmFtZTp7MToidGl0bGUuZnVuY3Rpb24ifSxjb250YWluczpbRV19LEssdGUsVCxILHttYXRjaDovXCRbKC5dL31dfX1mdW5jdGlvbiBqdChlKXtsZXQgdD1lLnJlZ2V4LG49Lyg/IVtBLVphLXowLTldKSg/IVskXSkvLHI9dC5jb25jYXQoL1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSovLG4pLHM9dC5jb25jYXQoLyhcXD9bQS1aXVthLXowLTlfXHg3Zi1ceGZmXSt8XFw/W0EtWl0rKD89W0EtWl1bYS16MC05X1x4N2YtXHhmZl0pKXsxLH0vLG4pLGc9dC5jb25jYXQoL1tBLVpdKy8sbiksbz17c2NvcGU6InZhcmlhYmxlIixtYXRjaDoiXFwkKyIrcn0saT17c2NvcGU6Im1ldGEiLHZhcmlhbnRzOlt7YmVnaW46LzxcP3BocC8scmVsZXZhbmNlOjEwfSx7YmVnaW46LzxcPz0vfSx7YmVnaW46LzxcPy8scmVsZXZhbmNlOi4xfSx7YmVnaW46L1w/Pi99XX0sYz17c2NvcGU6InN1YnN0Iix2YXJpYW50czpbe2JlZ2luOi9cJFx3Ky99LHtiZWdpbjovXHtcJC8sZW5kOi9cfS99XX0sdT1lLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtpbGxlZ2FsOm51bGx9KSx3PWUuaW5oZXJpdChlLlFVT1RFX1NUUklOR19NT0RFLHtpbGxlZ2FsOm51bGwsY29udGFpbnM6ZS5RVU9URV9TVFJJTkdfTU9ERS5jb250YWlucy5jb25jYXQoYyl9KSxDPXtiZWdpbjovPDw8WyBcdF0qKD86KFx3Kyl8IihcdyspIilcbi8sZW5kOi9bIFx0XSooXHcrKVxiLyxjb250YWluczplLlFVT1RFX1NUUklOR19NT0RFLmNvbnRhaW5zLmNvbmNhdChjKSwib246YmVnaW4iOih4LEgpPT57SC5kYXRhLl9iZWdpbk1hdGNoPXhbMV18fHhbMl19LCJvbjplbmQiOih4LEgpPT57SC5kYXRhLl9iZWdpbk1hdGNoIT09eFsxXSYmSC5pZ25vcmVNYXRjaCgpfX0sST1lLkVORF9TQU1FX0FTX0JFR0lOKHtiZWdpbjovPDw8WyBcdF0qJyhcdyspJ1xuLyxlbmQ6L1sgXHRdKihcdyspXGIvfSksTT1gWyAJCl1gLEc9e3Njb3BlOiJzdHJpbmciLHZhcmlhbnRzOlt3LHUsQyxJXX0sTD17c2NvcGU6Im51bWJlciIsdmFyaWFudHM6W3tiZWdpbjoiXFxiMFtiQl1bMDFdKyg/Ol9bMDFdKykqXFxiIn0se2JlZ2luOiJcXGIwW29PXVswLTddKyg/Ol9bMC03XSspKlxcYiJ9LHtiZWdpbjoiXFxiMFt4WF1bXFxkYS1mQS1GXSsoPzpfW1xcZGEtZkEtRl0rKSpcXGIifSx7YmVnaW46Iig/OlxcYlxcZCsoPzpfXFxkKykqKFxcLig/OlxcZCsoPzpfXFxkKykqKSk/fFxcQlxcLlxcZCspKD86W2VFXVsrLV0/XFxkKyk/In1dLHJlbGV2YW5jZTowfSxwPVsiZmFsc2UiLCJudWxsIiwidHJ1ZSJdLFM9WyJfX0NMQVNTX18iLCJfX0RJUl9fIiwiX19GSUxFX18iLCJfX0ZVTkNUSU9OX18iLCJfX0NPTVBJTEVSX0hBTFRfT0ZGU0VUX18iLCJfX0xJTkVfXyIsIl9fTUVUSE9EX18iLCJfX05BTUVTUEFDRV9fIiwiX19UUkFJVF9fIiwiZGllIiwiZWNobyIsImV4aXQiLCJpbmNsdWRlIiwiaW5jbHVkZV9vbmNlIiwicHJpbnQiLCJyZXF1aXJlIiwicmVxdWlyZV9vbmNlIiwiYXJyYXkiLCJhYnN0cmFjdCIsImFuZCIsImFzIiwiYmluYXJ5IiwiYm9vbCIsImJvb2xlYW4iLCJicmVhayIsImNhbGxhYmxlIiwiY2FzZSIsImNhdGNoIiwiY2xhc3MiLCJjbG9uZSIsImNvbnN0IiwiY29udGludWUiLCJkZWNsYXJlIiwiZGVmYXVsdCIsImRvIiwiZG91YmxlIiwiZWxzZSIsImVsc2VpZiIsImVtcHR5IiwiZW5kZGVjbGFyZSIsImVuZGZvciIsImVuZGZvcmVhY2giLCJlbmRpZiIsImVuZHN3aXRjaCIsImVuZHdoaWxlIiwiZW51bSIsImV2YWwiLCJleHRlbmRzIiwiZmluYWwiLCJmaW5hbGx5IiwiZmxvYXQiLCJmb3IiLCJmb3JlYWNoIiwiZnJvbSIsImdsb2JhbCIsImdvdG8iLCJpZiIsImltcGxlbWVudHMiLCJpbnN0YW5jZW9mIiwiaW5zdGVhZG9mIiwiaW50IiwiaW50ZWdlciIsImludGVyZmFjZSIsImlzc2V0IiwiaXRlcmFibGUiLCJsaXN0IiwibWF0Y2h8MCIsIm1peGVkIiwibmV3IiwibmV2ZXIiLCJvYmplY3QiLCJvciIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLCJwdWJsaWMiLCJyZWFkb25seSIsInJlYWwiLCJyZXR1cm4iLCJzdHJpbmciLCJzd2l0Y2giLCJ0aHJvdyIsInRyYWl0IiwidHJ5IiwidW5zZXQiLCJ1c2UiLCJ2YXIiLCJ2b2lkIiwid2hpbGUiLCJ4b3IiLCJ5aWVsZCJdLGs9WyJFcnJvcnwwIiwiQXBwZW5kSXRlcmF0b3IiLCJBcmd1bWVudENvdW50RXJyb3IiLCJBcml0aG1ldGljRXJyb3IiLCJBcnJheUl0ZXJhdG9yIiwiQXJyYXlPYmplY3QiLCJBc3NlcnRpb25FcnJvciIsIkJhZEZ1bmN0aW9uQ2FsbEV4Y2VwdGlvbiIsIkJhZE1ldGhvZENhbGxFeGNlcHRpb24iLCJDYWNoaW5nSXRlcmF0b3IiLCJDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIiwiQ29tcGlsZUVycm9yIiwiQ291bnRhYmxlIiwiRGlyZWN0b3J5SXRlcmF0b3IiLCJEaXZpc2lvbkJ5WmVyb0Vycm9yIiwiRG9tYWluRXhjZXB0aW9uIiwiRW1wdHlJdGVyYXRvciIsIkVycm9yRXhjZXB0aW9uIiwiRXhjZXB0aW9uIiwiRmlsZXN5c3RlbUl0ZXJhdG9yIiwiRmlsdGVySXRlcmF0b3IiLCJHbG9iSXRlcmF0b3IiLCJJbmZpbml0ZUl0ZXJhdG9yIiwiSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIiwiSXRlcmF0b3JJdGVyYXRvciIsIkxlbmd0aEV4Y2VwdGlvbiIsIkxpbWl0SXRlcmF0b3IiLCJMb2dpY0V4Y2VwdGlvbiIsIk11bHRpcGxlSXRlcmF0b3IiLCJOb1Jld2luZEl0ZXJhdG9yIiwiT3V0T2ZCb3VuZHNFeGNlcHRpb24iLCJPdXRPZlJhbmdlRXhjZXB0aW9uIiwiT3V0ZXJJdGVyYXRvciIsIk92ZXJmbG93RXhjZXB0aW9uIiwiUGFyZW50SXRlcmF0b3IiLCJQYXJzZUVycm9yIiwiUmFuZ2VFeGNlcHRpb24iLCJSZWN1cnNpdmVBcnJheUl0ZXJhdG9yIiwiUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yIiwiUmVjdXJzaXZlQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvciIsIlJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yIiwiUmVjdXJzaXZlRmlsdGVySXRlcmF0b3IiLCJSZWN1cnNpdmVJdGVyYXRvciIsIlJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IiLCJSZWN1cnNpdmVSZWdleEl0ZXJhdG9yIiwiUmVjdXJzaXZlVHJlZUl0ZXJhdG9yIiwiUmVnZXhJdGVyYXRvciIsIlJ1bnRpbWVFeGNlcHRpb24iLCJTZWVrYWJsZUl0ZXJhdG9yIiwiU3BsRG91Ymx5TGlua2VkTGlzdCIsIlNwbEZpbGVJbmZvIiwiU3BsRmlsZU9iamVjdCIsIlNwbEZpeGVkQXJyYXkiLCJTcGxIZWFwIiwiU3BsTWF4SGVhcCIsIlNwbE1pbkhlYXAiLCJTcGxPYmplY3RTdG9yYWdlIiwiU3BsT2JzZXJ2ZXIiLCJTcGxQcmlvcml0eVF1ZXVlIiwiU3BsUXVldWUiLCJTcGxTdGFjayIsIlNwbFN1YmplY3QiLCJTcGxUZW1wRmlsZU9iamVjdCIsIlR5cGVFcnJvciIsIlVuZGVyZmxvd0V4Y2VwdGlvbiIsIlVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiIsIlVuaGFuZGxlZE1hdGNoRXJyb3IiLCJBcnJheUFjY2VzcyIsIkJhY2tlZEVudW0iLCJDbG9zdXJlIiwiRmliZXIiLCJHZW5lcmF0b3IiLCJJdGVyYXRvciIsIkl0ZXJhdG9yQWdncmVnYXRlIiwiU2VyaWFsaXphYmxlIiwiU3RyaW5nYWJsZSIsIlRocm93YWJsZSIsIlRyYXZlcnNhYmxlIiwiVW5pdEVudW0iLCJXZWFrUmVmZXJlbmNlIiwiV2Vha01hcCIsIkRpcmVjdG9yeSIsIl9fUEhQX0luY29tcGxldGVfQ2xhc3MiLCJwYXJlbnQiLCJwaHBfdXNlcl9maWx0ZXIiLCJzZWxmIiwic3RhdGljIiwic3RkQ2xhc3MiXSxtPXtrZXl3b3JkOlMsbGl0ZXJhbDooeD0+e2xldCBIPVtdO3JldHVybiB4LmZvckVhY2goYT0+e0gucHVzaChhKSxhLnRvTG93ZXJDYXNlKCk9PT1hP0gucHVzaChhLnRvVXBwZXJDYXNlKCkpOkgucHVzaChhLnRvTG93ZXJDYXNlKCkpfSksSH0pKHApLGJ1aWx0X2luOmt9LGw9eD0+eC5tYXAoSD0+SC5yZXBsYWNlKC9cfFxkKyQvLCIiKSksRT17dmFyaWFudHM6W3ttYXRjaDpbL25ldy8sdC5jb25jYXQoTSwiKyIpLHQuY29uY2F0KCIoPyEiLGwoaykuam9pbigiXFxifCIpLCJcXGIpIiksc10sc2NvcGU6ezE6ImtleXdvcmQiLDQ6InRpdGxlLmNsYXNzIn19XX0sVD10LmNvbmNhdChyLCJcXGIoPyFcXCgpIiksQT17dmFyaWFudHM6W3ttYXRjaDpbdC5jb25jYXQoLzo6Lyx0Lmxvb2thaGVhZCgvKD8hY2xhc3NcYikvKSksVF0sc2NvcGU6ezI6InZhcmlhYmxlLmNvbnN0YW50In19LHttYXRjaDpbLzo6LywvY2xhc3MvXSxzY29wZTp7MjoidmFyaWFibGUubGFuZ3VhZ2UifX0se21hdGNoOltzLHQuY29uY2F0KC86Oi8sdC5sb29rYWhlYWQoLyg/IWNsYXNzXGIpLykpLFRdLHNjb3BlOnsxOiJ0aXRsZS5jbGFzcyIsMzoidmFyaWFibGUuY29uc3RhbnQifX0se21hdGNoOltzLHQuY29uY2F0KCI6OiIsdC5sb29rYWhlYWQoLyg/IWNsYXNzXGIpLykpXSxzY29wZTp7MToidGl0bGUuY2xhc3MifX0se21hdGNoOltzLC86Oi8sL2NsYXNzL10sc2NvcGU6ezE6InRpdGxlLmNsYXNzIiwzOiJ2YXJpYWJsZS5sYW5ndWFnZSJ9fV19LHo9e3Njb3BlOiJhdHRyIixtYXRjaDp0LmNvbmNhdChyLHQubG9va2FoZWFkKCI6IiksdC5sb29rYWhlYWQoLyg/ITo6KS8pKX0sSj17cmVsZXZhbmNlOjAsYmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3JkczptLGNvbnRhaW5zOlt6LG8sQSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkhBU0hfQ09NTUVOVF9NT0RFLEcsTCxFXX0sdGU9e3JlbGV2YW5jZTowLG1hdGNoOlsvXGIvLHQuY29uY2F0KCIoPyFmblxcYnxmdW5jdGlvblxcYnwiLGwoUykuam9pbigiXFxifCIpLCJ8IixsKGspLmpvaW4oIlxcYnwiKSwiXFxiKSIpLHIsdC5jb25jYXQoTSwiKiIpLHQubG9va2FoZWFkKC8oPz1cKCkvKV0sc2NvcGU6ezM6InRpdGxlLmZ1bmN0aW9uLmludm9rZSJ9LGNvbnRhaW5zOltKXX07Si5jb250YWlucy5wdXNoKHRlKTtsZXQgZWU9W3osQSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkhBU0hfQ09NTUVOVF9NT0RFLEcsTCxFXSxLPXtiZWdpbjp0LmNvbmNhdCgvI1xbXHMqXFw/Lyx0LmVpdGhlcihzLGcpKSxiZWdpblNjb3BlOiJtZXRhIixlbmQ6L10vLGVuZFNjb3BlOiJtZXRhIixrZXl3b3Jkczp7bGl0ZXJhbDpwLGtleXdvcmQ6WyJuZXciLCJhcnJheSJdfSxjb250YWluczpbe2JlZ2luOi9cWy8sZW5kOi9dLyxrZXl3b3Jkczp7bGl0ZXJhbDpwLGtleXdvcmQ6WyJuZXciLCJhcnJheSJdfSxjb250YWluczpbInNlbGYiLC4uLmVlXX0sLi4uZWUse3Njb3BlOiJtZXRhIix2YXJpYW50czpbe21hdGNoOnN9LHttYXRjaDpnfV19XX07cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITEsa2V5d29yZHM6bSxjb250YWluczpbSyxlLkhBU0hfQ09NTUVOVF9NT0RFLGUuQ09NTUVOVCgiLy8iLCIkIiksZS5DT01NRU5UKCIvXFwqIiwiXFwqLyIse2NvbnRhaW5zOlt7c2NvcGU6ImRvY3RhZyIsbWF0Y2g6IkBbQS1aYS16XSsifV19KSx7bWF0Y2g6L19faGFsdF9jb21waWxlclwoXCk7LyxrZXl3b3JkczoiX19oYWx0X2NvbXBpbGVyIixzdGFydHM6e3Njb3BlOiJjb21tZW50IixlbmQ6ZS5NQVRDSF9OT1RISU5HX1JFLGNvbnRhaW5zOlt7bWF0Y2g6L1w/Pi8sc2NvcGU6Im1ldGEiLGVuZHNQYXJlbnQ6ITB9XX19LGkse3Njb3BlOiJ2YXJpYWJsZS5sYW5ndWFnZSIsbWF0Y2g6L1wkdGhpc1xiL30sbyx0ZSxBLHttYXRjaDpbL2NvbnN0LywvXHMvLHJdLHNjb3BlOnsxOiJrZXl3b3JkIiwzOiJ2YXJpYWJsZS5jb25zdGFudCJ9fSxFLHtzY29wZToiZnVuY3Rpb24iLHJlbGV2YW5jZTowLGJlZ2luS2V5d29yZHM6ImZuIGZ1bmN0aW9uIixlbmQ6L1s7e10vLGV4Y2x1ZGVFbmQ6ITAsaWxsZWdhbDoiWyQlXFxbXSIsY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJ1c2UifSxlLlVOREVSU0NPUkVfVElUTEVfTU9ERSx7YmVnaW46Ij0+IixlbmRzUGFyZW50OiEwfSx7c2NvcGU6InBhcmFtcyIsYmVnaW46IlxcKCIsZW5kOiJcXCkiLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLGtleXdvcmRzOm0sY29udGFpbnM6WyJzZWxmIixLLG8sQSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkhBU0hfQ09NTUVOVF9NT0RFLEcsTF19XX0se3Njb3BlOiJjbGFzcyIsdmFyaWFudHM6W3tiZWdpbktleXdvcmRzOiJlbnVtIixpbGxlZ2FsOi9bKCQiXS99LHtiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UgdHJhaXQiLGlsbGVnYWw6L1s6KCQiXS99XSxyZWxldmFuY2U6MCxlbmQ6L1x7LyxleGNsdWRlRW5kOiEwLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7YmVnaW5LZXl3b3JkczoibmFtZXNwYWNlIixyZWxldmFuY2U6MCxlbmQ6IjsiLGlsbGVnYWw6L1suJ10vLGNvbnRhaW5zOltlLmluaGVyaXQoZS5VTkRFUlNDT1JFX1RJVExFX01PREUse3Njb3BlOiJ0aXRsZS5jbGFzcyJ9KV19LHtiZWdpbktleXdvcmRzOiJ1c2UiLHJlbGV2YW5jZTowLGVuZDoiOyIsY29udGFpbnM6W3ttYXRjaDovXGIoYXN8Y29uc3R8ZnVuY3Rpb24pXGIvLHNjb3BlOiJrZXl3b3JkIn0sZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSxHLExdfX12YXIgenI9IihbLStdPykoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPyl8TmFOfFstK10/SW5maW5pdHkiLFByPXtzY29wZToibnVtYmVyIixtYXRjaDp6cixyZWxldmFuY2U6MH07ZnVuY3Rpb24gV3QoZSl7bGV0IHQ9e2NsYXNzTmFtZToiYXR0ciIsYmVnaW46LygoIihcXC58W15cXCJcclxuXSkqIil8KCcoXFwufFteXFwnXHJcbl0pKicpKSg/PVxzKjopLyxyZWxldmFuY2U6MS4wMX0sbj17bWF0Y2g6L1t7fVtcXSw6XS8sY2xhc3NOYW1lOiJwdW5jdHVhdGlvbiIscmVsZXZhbmNlOjB9LHI9WyJ0cnVlIiwiZmFsc2UiLCJudWxsIl0scz17c2NvcGU6ImxpdGVyYWwiLGJlZ2luS2V5d29yZHM6ci5qb2luKCIgIil9O3JldHVybntuYW1lOiJKU09OIixhbGlhc2VzOlsianNvbmMiLCJqc29uNSJdLGtleXdvcmRzOntsaXRlcmFsOnJ9LGNvbnRhaW5zOlt0LG4sZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUscyxQcixlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV0saWxsZWdhbDoiXFxTIn19ZnVuY3Rpb24gcXQoZSl7bGV0IHQ9ZS5yZWdleCxuPXt9LHI9e2JlZ2luOi9cJFx7LyxlbmQ6L1x9Lyxjb250YWluczpbInNlbGYiLHtiZWdpbjovOi0vLGNvbnRhaW5zOltuXX1dfTtPYmplY3QuYXNzaWduKG4se2NsYXNzTmFtZToidmFyaWFibGUiLHZhcmlhbnRzOlt7YmVnaW46dC5jb25jYXQoL1wkW1x3XGQjQF1bXHdcZF9dKi8sIig/IVtcXHdcXGRdKSg/IVskXSkiKX0scl19KTtsZXQgcz17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46L1wkXCgvLGVuZDovXCkvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSxnPWUuaW5oZXJpdChlLkNPTU1FTlQoKSx7bWF0Y2g6Wy8oXnxccykvLC8jLiokL10sc2NvcGU6ezI6ImNvbW1lbnQifX0pLG89e2JlZ2luOi88PC0/XHMqKD89XHcrKS8sc3RhcnRzOntjb250YWluczpbZS5FTkRfU0FNRV9BU19CRUdJTih7YmVnaW46LyhcdyspLyxlbmQ6LyhcdyspLyxjbGFzc05hbWU6InN0cmluZyJ9KV19fSxpPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LyIvLGVuZDovIi8sY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxuLHNdfTtzLmNvbnRhaW5zLnB1c2goaSk7bGV0IGM9e21hdGNoOi9cXCIvfSx1PXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LycvLGVuZDovJy99LHc9e21hdGNoOi9cXCcvfSxDPXtiZWdpbjovXCQ/XChcKC8sZW5kOi9cKVwpLyxjb250YWluczpbe2JlZ2luOi9cZCsjWzAtOWEtZl0rLyxjbGFzc05hbWU6Im51bWJlciJ9LGUuTlVNQkVSX01PREUsbl19LEk9WyJmaXNoIiwiYmFzaCIsInpzaCIsInNoIiwiY3NoIiwia3NoIiwidGNzaCIsImRhc2giLCJzY3NoIl0sTT1lLlNIRUJBTkcoe2JpbmFyeTpgKCR7SS5qb2luKCJ8Iil9KWAscmVsZXZhbmNlOjEwfSksRz17Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46L1x3W1x3XGRfXSpccypcKFxzKlwpXHMqXHsvLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjovXHdbXHdcZF9dKi99KV0scmVsZXZhbmNlOjB9LEw9WyJpZiIsInRoZW4iLCJlbHNlIiwiZWxpZiIsImZpIiwidGltZSIsImZvciIsIndoaWxlIiwidW50aWwiLCJpbiIsImRvIiwiZG9uZSIsImNhc2UiLCJlc2FjIiwiY29wcm9jIiwiZnVuY3Rpb24iLCJzZWxlY3QiXSxwPVsidHJ1ZSIsImZhbHNlIl0sUz17bWF0Y2g6LyhcL1thLXouXy1dKykrL30saz1bImJyZWFrIiwiY2QiLCJjb250aW51ZSIsImV2YWwiLCJleGVjIiwiZXhpdCIsImV4cG9ydCIsImdldG9wdHMiLCJoYXNoIiwicHdkIiwicmVhZG9ubHkiLCJyZXR1cm4iLCJzaGlmdCIsInRlc3QiLCJ0aW1lcyIsInRyYXAiLCJ1bWFzayIsInVuc2V0Il0seT1bImFsaWFzIiwiYmluZCIsImJ1aWx0aW4iLCJjYWxsZXIiLCJjb21tYW5kIiwiZGVjbGFyZSIsImVjaG8iLCJlbmFibGUiLCJoZWxwIiwibGV0IiwibG9jYWwiLCJsb2dvdXQiLCJtYXBmaWxlIiwicHJpbnRmIiwicmVhZCIsInJlYWRhcnJheSIsInNvdXJjZSIsInN1ZG8iLCJ0eXBlIiwidHlwZXNldCIsInVsaW1pdCIsInVuYWxpYXMiXSxtPVsiYXV0b2xvYWQiLCJiZyIsImJpbmRrZXkiLCJieWUiLCJjYXAiLCJjaGRpciIsImNsb25lIiwiY29tcGFyZ3VtZW50cyIsImNvbXBjYWxsIiwiY29tcGN0bCIsImNvbXBkZXNjcmliZSIsImNvbXBmaWxlcyIsImNvbXBncm91cHMiLCJjb21wcXVvdGUiLCJjb21wdGFncyIsImNvbXB0cnkiLCJjb21wdmFsdWVzIiwiZGlycyIsImRpc2FibGUiLCJkaXNvd24iLCJlY2hvdGMiLCJlY2hvdGkiLCJlbXVsYXRlIiwiZmMiLCJmZyIsImZsb2F0IiwiZnVuY3Rpb25zIiwiZ2V0Y2FwIiwiZ2V0bG4iLCJoaXN0b3J5IiwiaW50ZWdlciIsImpvYnMiLCJraWxsIiwibGltaXQiLCJsb2ciLCJub2dsb2IiLCJwb3BkIiwicHJpbnQiLCJwdXNoZCIsInB1c2hsbiIsInJlaGFzaCIsInNjaGVkIiwic2V0Y2FwIiwic2V0b3B0Iiwic3RhdCIsInN1c3BlbmQiLCJ0dHljdGwiLCJ1bmZ1bmN0aW9uIiwidW5oYXNoIiwidW5saW1pdCIsInVuc2V0b3B0IiwidmFyZWQiLCJ3YWl0Iiwid2hlbmNlIiwid2hlcmUiLCJ3aGljaCIsInpjb21waWxlIiwiemZvcm1hdCIsInpmdHAiLCJ6bGUiLCJ6bW9kbG9hZCIsInpwYXJzZW9wdHMiLCJ6cHJvZiIsInpwdHkiLCJ6cmVnZXhwYXJzZSIsInpzb2NrZXQiLCJ6c3R5bGUiLCJ6dGNwIl0sbD1bImNoY29uIiwiY2hncnAiLCJjaG93biIsImNobW9kIiwiY3AiLCJkZCIsImRmIiwiZGlyIiwiZGlyY29sb3JzIiwibG4iLCJscyIsIm1rZGlyIiwibWtmaWZvIiwibWtub2QiLCJta3RlbXAiLCJtdiIsInJlYWxwYXRoIiwicm0iLCJybWRpciIsInNocmVkIiwic3luYyIsInRvdWNoIiwidHJ1bmNhdGUiLCJ2ZGlyIiwiYjJzdW0iLCJiYXNlMzIiLCJiYXNlNjQiLCJjYXQiLCJja3N1bSIsImNvbW0iLCJjc3BsaXQiLCJjdXQiLCJleHBhbmQiLCJmbXQiLCJmb2xkIiwiaGVhZCIsImpvaW4iLCJtZDVzdW0iLCJubCIsIm51bWZtdCIsIm9kIiwicGFzdGUiLCJwdHgiLCJwciIsInNoYTFzdW0iLCJzaGEyMjRzdW0iLCJzaGEyNTZzdW0iLCJzaGEzODRzdW0iLCJzaGE1MTJzdW0iLCJzaHVmIiwic29ydCIsInNwbGl0Iiwic3VtIiwidGFjIiwidGFpbCIsInRyIiwidHNvcnQiLCJ1bmV4cGFuZCIsInVuaXEiLCJ3YyIsImFyY2giLCJiYXNlbmFtZSIsImNocm9vdCIsImRhdGUiLCJkaXJuYW1lIiwiZHUiLCJlY2hvIiwiZW52IiwiZXhwciIsImZhY3RvciIsImdyb3VwcyIsImhvc3RpZCIsImlkIiwibGluayIsImxvZ25hbWUiLCJuaWNlIiwibm9odXAiLCJucHJvYyIsInBhdGhjaGsiLCJwaW5reSIsInByaW50ZW52IiwicHJpbnRmIiwicHdkIiwicmVhZGxpbmsiLCJydW5jb24iLCJzZXEiLCJzbGVlcCIsInN0YXQiLCJzdGRidWYiLCJzdHR5IiwidGVlIiwidGVzdCIsInRpbWVvdXQiLCJ0dHkiLCJ1bmFtZSIsInVubGluayIsInVwdGltZSIsInVzZXJzIiwid2hvIiwid2hvYW1pIiwieWVzIl07cmV0dXJue25hbWU6IkJhc2giLGFsaWFzZXM6WyJzaCIsInpzaCJdLGtleXdvcmRzOnskcGF0dGVybjovXGJbYS16XVthLXowLTkuXy1dK1xiLyxrZXl3b3JkOkwsbGl0ZXJhbDpwLGJ1aWx0X2luOlsuLi5rLC4uLnksInNldCIsInNob3B0IiwuLi5tLC4uLmxdfSxjb250YWluczpbTSxlLlNIRUJBTkcoKSxHLEMsZyxvLFMsaSxjLHUsdyxuXX19dmFyIEZlPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiLFh0PVsiYXMiLCJpbiIsIm9mIiwiaWYiLCJmb3IiLCJ3aGlsZSIsImZpbmFsbHkiLCJ2YXIiLCJuZXciLCJmdW5jdGlvbiIsImRvIiwicmV0dXJuIiwidm9pZCIsImVsc2UiLCJicmVhayIsImNhdGNoIiwiaW5zdGFuY2VvZiIsIndpdGgiLCJ0aHJvdyIsImNhc2UiLCJkZWZhdWx0IiwidHJ5Iiwic3dpdGNoIiwiY29udGludWUiLCJ0eXBlb2YiLCJkZWxldGUiLCJsZXQiLCJ5aWVsZCIsImNvbnN0IiwiY2xhc3MiLCJkZWJ1Z2dlciIsImFzeW5jIiwiYXdhaXQiLCJzdGF0aWMiLCJpbXBvcnQiLCJmcm9tIiwiZXhwb3J0IiwiZXh0ZW5kcyIsInVzaW5nIl0sWXQ9WyJ0cnVlIiwiZmFsc2UiLCJudWxsIiwidW5kZWZpbmVkIiwiTmFOIiwiSW5maW5pdHkiXSxWdD1bIk9iamVjdCIsIkZ1bmN0aW9uIiwiQm9vbGVhbiIsIlN5bWJvbCIsIk1hdGgiLCJEYXRlIiwiTnVtYmVyIiwiQmlnSW50IiwiU3RyaW5nIiwiUmVnRXhwIiwiQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiLCJTZXQiLCJNYXAiLCJXZWFrU2V0IiwiV2Vha01hcCIsIkFycmF5QnVmZmVyIiwiU2hhcmVkQXJyYXlCdWZmZXIiLCJBdG9taWNzIiwiRGF0YVZpZXciLCJKU09OIiwiUHJvbWlzZSIsIkdlbmVyYXRvciIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiQXN5bmNGdW5jdGlvbiIsIlJlZmxlY3QiLCJQcm94eSIsIkludGwiLCJXZWJBc3NlbWJseSJdLFF0PVsiRXJyb3IiLCJFdmFsRXJyb3IiLCJJbnRlcm5hbEVycm9yIiwiUmFuZ2VFcnJvciIsIlJlZmVyZW5jZUVycm9yIiwiU3ludGF4RXJyb3IiLCJUeXBlRXJyb3IiLCJVUklFcnJvciJdLEp0PVsic2V0SW50ZXJ2YWwiLCJzZXRUaW1lb3V0IiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsInJlcXVpcmUiLCJleHBvcnRzIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJkZWNvZGVVUkkiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlbmNvZGVVUkkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJ1bmVzY2FwZSJdLGVuPVsiYXJndW1lbnRzIiwidGhpcyIsInN1cGVyIiwiY29uc29sZSIsIndpbmRvdyIsImRvY3VtZW50IiwibG9jYWxTdG9yYWdlIiwic2Vzc2lvblN0b3JhZ2UiLCJtb2R1bGUiLCJzZWxmIiwiZ2xvYmFsIl0sdG49W10uY29uY2F0KEp0LFZ0LFF0KTtmdW5jdGlvbiBIcihlKXtsZXQgdD1lLnJlZ2V4LG49KGIse2FmdGVyOmh9KT0+e2xldCBCPSI8LyIrYlswXS5zbGljZSgxKTtyZXR1cm4gYi5pbnB1dC5pbmRleE9mKEIsaCkhPT0tMX0scj1GZSxzPXtiZWdpbjoiPD4iLGVuZDoiPC8+In0sZz0vPFtBLVphLXowLTlcXC5fOi1dK1xzKlwvPi8sbz17YmVnaW46LzxbQS1aYS16MC05XFwuXzotXSsvLGVuZDovXC9bQS1aYS16MC05XFwuXzotXSs+fFwvPi8saXNUcnVseU9wZW5pbmdUYWc6KGIsaCk9PntsZXQgQj1iWzBdLmxlbmd0aCtiLmluZGV4LFU9Yi5pbnB1dFtCXTtpZihVPT09IjwifHxVPT09IiwiKXtoLmlnbm9yZU1hdGNoKCk7cmV0dXJufVU9PT0iPiImJihuKGIse2FmdGVyOkJ9KXx8aC5pZ25vcmVNYXRjaCgpKTtsZXQgRixxPWIuaW5wdXQuc3Vic3RyaW5nKEIpO2lmKEY9cS5tYXRjaCgvXlxzKj0vKSl7aC5pZ25vcmVNYXRjaCgpO3JldHVybn1pZigoRj1xLm1hdGNoKC9eXHMrZXh0ZW5kc1xzKy8pKSYmRi5pbmRleD09PTApe2guaWdub3JlTWF0Y2goKTtyZXR1cm59fX0saT17JHBhdHRlcm46RmUsa2V5d29yZDpYdCxsaXRlcmFsOll0LGJ1aWx0X2luOnRuLCJ2YXJpYWJsZS5sYW5ndWFnZSI6ZW59LGM9IlswLTldKF8/WzAtOV0pKiIsdT1gXFwuKCR7Y30pYCx3PSIwfFsxLTldKF8/WzAtOV0pKnwwWzAtN10qWzg5XVswLTldKiIsQz17Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46YChcXGIoJHt3fSkoKCR7dX0pfFxcLik/fCgke3V9KSlbZUVdWystXT8oJHtjfSlcXGJgfSx7YmVnaW46YFxcYigke3d9KVxcYigoJHt1fSlcXGJ8XFwuKT98KCR7dX0pXFxiYH0se2JlZ2luOiJcXGIoMHxbMS05XShfP1swLTldKSopblxcYiJ9LHtiZWdpbjoiXFxiMFt4WF1bMC05YS1mQS1GXShfP1swLTlhLWZBLUZdKSpuP1xcYiJ9LHtiZWdpbjoiXFxiMFtiQl1bMC0xXShfP1swLTFdKSpuP1xcYiJ9LHtiZWdpbjoiXFxiMFtvT11bMC03XShfP1swLTddKSpuP1xcYiJ9LHtiZWdpbjoiXFxiMFswLTddK24/XFxiIn1dLHJlbGV2YW5jZTowfSxJPXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjoiXFwkXFx7IixlbmQ6IlxcfSIsa2V5d29yZHM6aSxjb250YWluczpbXX0sTT17YmVnaW46Ii4/aHRtbGAiLGVuZDoiIixzdGFydHM6e2VuZDoiYCIscmV0dXJuRW5kOiExLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsSV0sc3ViTGFuZ3VhZ2U6InhtbCJ9fSxHPXtiZWdpbjoiLj9jc3NgIixlbmQ6IiIsc3RhcnRzOntlbmQ6ImAiLHJldHVybkVuZDohMSxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLEldLHN1Ykxhbmd1YWdlOiJjc3MifX0sTD17YmVnaW46Ii4/Z3FsYCIsZW5kOiIiLHN0YXJ0czp7ZW5kOiJgIixyZXR1cm5FbmQ6ITEsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxJXSxzdWJMYW5ndWFnZToiZ3JhcGhxbCJ9fSxwPXtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46ImAiLGVuZDoiYCIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxJXX0saz17Y2xhc3NOYW1lOiJjb21tZW50Iix2YXJpYW50czpbZS5DT01NRU5UKC9cL1wqXCooPyFcLykvLCJcXCovIix7cmVsZXZhbmNlOjAsY29udGFpbnM6W3tiZWdpbjoiKD89QFtBLVphLXpdKykiLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJkb2N0YWciLGJlZ2luOiJAW0EtWmEtel0rIn0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxceyIsZW5kOiJcXH0iLGV4Y2x1ZGVFbmQ6ITAsZXhjbHVkZUJlZ2luOiEwLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46cisiKD89XFxzKigtKXwkKSIsZW5kc1BhcmVudDohMCxyZWxldmFuY2U6MH0se2JlZ2luOi8oPz1bXlxuXSlccy8scmVsZXZhbmNlOjB9XX1dfSksZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkNfTElORV9DT01NRU5UX01PREVdfSx5PVtlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxNLEcsTCxwLHttYXRjaDovXCRcZCsvfSxDXTtJLmNvbnRhaW5zPXkuY29uY2F0KHtiZWdpbjovXHsvLGVuZDovXH0vLGtleXdvcmRzOmksY29udGFpbnM6WyJzZWxmIl0uY29uY2F0KHkpfSk7bGV0IG09W10uY29uY2F0KGssSS5jb250YWlucyksbD1tLmNvbmNhdChbe2JlZ2luOi8oXHMqKVwoLyxlbmQ6L1wpLyxrZXl3b3JkczppLGNvbnRhaW5zOlsic2VsZiJdLmNvbmNhdChtKX1dKSxFPXtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46LyhccyopXCgvLGVuZDovXCkvLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLGtleXdvcmRzOmksY29udGFpbnM6bH0sVD17dmFyaWFudHM6W3ttYXRjaDpbL2NsYXNzLywvXHMrLyxyLC9ccysvLC9leHRlbmRzLywvXHMrLyx0LmNvbmNhdChyLCIoIix0LmNvbmNhdCgvXC4vLHIpLCIpKiIpXSxzY29wZTp7MToia2V5d29yZCIsMzoidGl0bGUuY2xhc3MiLDU6ImtleXdvcmQiLDc6InRpdGxlLmNsYXNzLmluaGVyaXRlZCJ9fSx7bWF0Y2g6Wy9jbGFzcy8sL1xzKy8scl0sc2NvcGU6ezE6ImtleXdvcmQiLDM6InRpdGxlLmNsYXNzIn19XX0sQT17cmVsZXZhbmNlOjAsbWF0Y2g6dC5laXRoZXIoL1xiSlNPTi8sL1xiW0EtWl1bYS16XSsoW0EtWl1bYS16XSp8XGQpKi8sL1xiW0EtWl17Mix9KFtBLVpdW2Etel0rfFxkKSsoW0EtWl1bYS16XSopKi8sL1xiW0EtWl17Mix9W2Etel0rKFtBLVpdW2Etel0rfFxkKSooW0EtWl1bYS16XSopKi8pLGNsYXNzTmFtZToidGl0bGUuY2xhc3MiLGtleXdvcmRzOntfOlsuLi5WdCwuLi5RdF19fSx6PXtsYWJlbDoidXNlX3N0cmljdCIsY2xhc3NOYW1lOiJtZXRhIixyZWxldmFuY2U6MTAsYmVnaW46L15ccypbJyJddXNlIChzdHJpY3R8YXNtKVsnIl0vfSxKPXt2YXJpYW50czpbe21hdGNoOlsvZnVuY3Rpb24vLC9ccysvLHIsLyg/PVxzKlwoKS9dfSx7bWF0Y2g6Wy9mdW5jdGlvbi8sL1xzKig/PVwoKS9dfV0sY2xhc3NOYW1lOnsxOiJrZXl3b3JkIiwzOiJ0aXRsZS5mdW5jdGlvbiJ9LGxhYmVsOiJmdW5jLmRlZiIsY29udGFpbnM6W0VdLGlsbGVnYWw6LyUvfSx0ZT17cmVsZXZhbmNlOjAsbWF0Y2g6L1xiW0EtWl1bQS1aXzAtOV0rXGIvLGNsYXNzTmFtZToidmFyaWFibGUuY29uc3RhbnQifTtmdW5jdGlvbiBlZShiKXtyZXR1cm4gdC5jb25jYXQoIig/ISIsYi5qb2luKCJ8IiksIikiKX1sZXQgSz17bWF0Y2g6dC5jb25jYXQoL1xiLyxlZShbLi4uSnQsInN1cGVyIiwiaW1wb3J0IiwiYXdhaXQiXS5tYXAoYj0+YCR7Yn1cXHMqXFwoYCkpLHIsdC5sb29rYWhlYWQoL1xzKlwoLykpLGNsYXNzTmFtZToidGl0bGUuZnVuY3Rpb24iLHJlbGV2YW5jZTowfSx4PXtiZWdpbjp0LmNvbmNhdCgvXC4vLHQubG9va2FoZWFkKHQuY29uY2F0KHIsLyg/IVswLTlBLVphLXokXyhdKS8pKSksZW5kOnIsZXhjbHVkZUJlZ2luOiEwLGtleXdvcmRzOiJwcm90b3R5cGUiLGNsYXNzTmFtZToicHJvcGVydHkiLHJlbGV2YW5jZTowfSxIPXttYXRjaDpbL2dldHxzZXQvLC9ccysvLHIsLyg/PVwoKS9dLGNsYXNzTmFtZTp7MToia2V5d29yZCIsMzoidGl0bGUuZnVuY3Rpb24ifSxjb250YWluczpbe2JlZ2luOi9cKFwpL30sRV19LGE9IihcXChbXigpXSooXFwoW14oKV0qKFxcKFteKCldKlxcKVteKCldKikqXFwpW14oKV0qKSpcXCl8IitlLlVOREVSU0NPUkVfSURFTlRfUkUrIilcXHMqPT4iLF89e21hdGNoOlsvY29uc3R8dmFyfGxldC8sL1xzKy8sciwvXHMqLywvPVxzKi8sLyhhc3luY1xzKik/Lyx0Lmxvb2thaGVhZChhKV0sa2V5d29yZHM6ImFzeW5jIixjbGFzc05hbWU6ezE6ImtleXdvcmQiLDM6InRpdGxlLmZ1bmN0aW9uIn0sY29udGFpbnM6W0VdfTtyZXR1cm57bmFtZToiSmF2YVNjcmlwdCIsYWxpYXNlczpbImpzIiwianN4IiwibWpzIiwiY2pzIl0sa2V5d29yZHM6aSxleHBvcnRzOntQQVJBTVNfQ09OVEFJTlM6bCxDTEFTU19SRUZFUkVOQ0U6QX0saWxsZWdhbDovIyg/IVskX0EtWmEtel0pLyxjb250YWluczpbZS5TSEVCQU5HKHtsYWJlbDoic2hlYmFuZyIsYmluYXJ5OiJub2RlIixyZWxldmFuY2U6NX0pLHosZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsTSxHLEwscCxrLHttYXRjaDovXCRcZCsvfSxDLEEse3Njb3BlOiJhdHRyIixtYXRjaDpyK3QubG9va2FoZWFkKCI6IikscmVsZXZhbmNlOjB9LF8se2JlZ2luOiIoIitlLlJFX1NUQVJURVJTX1JFKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIixrZXl3b3JkczoicmV0dXJuIHRocm93IGNhc2UiLHJlbGV2YW5jZTowLGNvbnRhaW5zOltrLGUuUkVHRVhQX01PREUse2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOmEscmV0dXJuQmVnaW46ITAsZW5kOiJcXHMqPT4iLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJwYXJhbXMiLHZhcmlhbnRzOlt7YmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOm51bGwsYmVnaW46L1woXHMqXCkvLHNraXA6ITB9LHtiZWdpbjovKFxzKilcKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6aSxjb250YWluczpsfV19XX0se2JlZ2luOi8sLyxyZWxldmFuY2U6MH0se21hdGNoOi9ccysvLHJlbGV2YW5jZTowfSx7dmFyaWFudHM6W3tiZWdpbjpzLmJlZ2luLGVuZDpzLmVuZH0se21hdGNoOmd9LHtiZWdpbjpvLmJlZ2luLCJvbjpiZWdpbiI6by5pc1RydWx5T3BlbmluZ1RhZyxlbmQ6by5lbmR9XSxzdWJMYW5ndWFnZToieG1sIixjb250YWluczpbe2JlZ2luOm8uYmVnaW4sZW5kOm8uZW5kLHNraXA6ITAsY29udGFpbnM6WyJzZWxmIl19XX1dfSxKLHtiZWdpbktleXdvcmRzOiJ3aGlsZSBpZiBzd2l0Y2ggY2F0Y2ggZm9yIn0se2JlZ2luOiJcXGIoPyFmdW5jdGlvbikiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFwoW14oKV0qKFxcKFteKCldKihcXChbXigpXSpcXClbXigpXSopKlxcKVteKCldKikqXFwpXFxzKlxceyIscmV0dXJuQmVnaW46ITAsbGFiZWw6ImZ1bmMuZGVmIixjb250YWluczpbRSxlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjpyLGNsYXNzTmFtZToidGl0bGUuZnVuY3Rpb24ifSldfSx7bWF0Y2g6L1wuXC5cLi8scmVsZXZhbmNlOjB9LHgse21hdGNoOiJcXCQiK3IscmVsZXZhbmNlOjB9LHttYXRjaDpbL1xiY29uc3RydWN0b3IoPz1ccypcKCkvXSxjbGFzc05hbWU6ezE6InRpdGxlLmZ1bmN0aW9uIn0sY29udGFpbnM6W0VdfSxLLHRlLFQsSCx7bWF0Y2g6L1wkWyguXS99XX19ZnVuY3Rpb24gbm4oZSl7bGV0IHQ9ZS5yZWdleCxuPUhyKGUpLHI9RmUscz1bImFueSIsInZvaWQiLCJudW1iZXIiLCJib29sZWFuIiwic3RyaW5nIiwib2JqZWN0IiwibmV2ZXIiLCJzeW1ib2wiLCJiaWdpbnQiLCJ1bmtub3duIl0sZz17YmVnaW46Wy9uYW1lc3BhY2UvLC9ccysvLGUuSURFTlRfUkVdLGJlZ2luU2NvcGU6ezE6ImtleXdvcmQiLDM6InRpdGxlLmNsYXNzIn19LG89e2JlZ2luS2V5d29yZHM6ImludGVyZmFjZSIsZW5kOi9cey8sZXhjbHVkZUVuZDohMCxrZXl3b3Jkczp7a2V5d29yZDoiaW50ZXJmYWNlIGV4dGVuZHMiLGJ1aWx0X2luOnN9LGNvbnRhaW5zOltuLmV4cG9ydHMuQ0xBU1NfUkVGRVJFTkNFXX0saT17Y2xhc3NOYW1lOiJtZXRhIixyZWxldmFuY2U6MTAsYmVnaW46L15ccypbJyJddXNlIHN0cmljdFsnIl0vfSxjPVsidHlwZSIsImludGVyZmFjZSIsInB1YmxpYyIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLCJpbXBsZW1lbnRzIiwiZGVjbGFyZSIsImFic3RyYWN0IiwicmVhZG9ubHkiLCJlbnVtIiwib3ZlcnJpZGUiLCJzYXRpc2ZpZXMiXSx1PXskcGF0dGVybjpGZSxrZXl3b3JkOlh0LmNvbmNhdChjKSxsaXRlcmFsOll0LGJ1aWx0X2luOnRuLmNvbmNhdChzKSwidmFyaWFibGUubGFuZ3VhZ2UiOmVufSx3PXtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJAIityfSxDPShMLHAsUyk9PntsZXQgaz1MLmNvbnRhaW5zLmZpbmRJbmRleCh5PT55LmxhYmVsPT09cCk7aWYoaz09PS0xKXRocm93IG5ldyBFcnJvcigiY2FuIG5vdCBmaW5kIG1vZGUgdG8gcmVwbGFjZSIpO0wuY29udGFpbnMuc3BsaWNlKGssMSxTKX07T2JqZWN0LmFzc2lnbihuLmtleXdvcmRzLHUpLG4uZXhwb3J0cy5QQVJBTVNfQ09OVEFJTlMucHVzaCh3KTtsZXQgST1uLmNvbnRhaW5zLmZpbmQoTD0+TC5zY29wZT09PSJhdHRyIiksTT1PYmplY3QuYXNzaWduKHt9LEkse21hdGNoOnQuY29uY2F0KHIsdC5sb29rYWhlYWQoL1xzKlw/Oi8pKX0pO24uZXhwb3J0cy5QQVJBTVNfQ09OVEFJTlMucHVzaChbbi5leHBvcnRzLkNMQVNTX1JFRkVSRU5DRSxJLE1dKSxuLmNvbnRhaW5zPW4uY29udGFpbnMuY29uY2F0KFt3LGcsbyxNXSksQyhuLCJzaGViYW5nIixlLlNIRUJBTkcoKSksQyhuLCJ1c2Vfc3RyaWN0IixpKTtsZXQgRz1uLmNvbnRhaW5zLmZpbmQoTD0+TC5sYWJlbD09PSJmdW5jLmRlZiIpO3JldHVybiBHLnJlbGV2YW5jZT0wLE9iamVjdC5hc3NpZ24obix7bmFtZToiVHlwZVNjcmlwdCIsYWxpYXNlczpbInRzIiwidHN4IiwibXRzIiwiY3RzIl19KSxufWZ1bmN0aW9uIHJuKGUpe2xldCB0PWUucmVnZXgsbj0vW19BLVphLXpdW18wLTlBLVphLXpdKi87cmV0dXJue25hbWU6IkdyYXBoUUwiLGFsaWFzZXM6WyJncWwiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGRpc2FibGVBdXRvZGV0ZWN0OiExLGtleXdvcmRzOntrZXl3b3JkOlsicXVlcnkiLCJtdXRhdGlvbiIsInN1YnNjcmlwdGlvbiIsInR5cGUiLCJpbnB1dCIsInNjaGVtYSIsImRpcmVjdGl2ZSIsImludGVyZmFjZSIsInVuaW9uIiwic2NhbGFyIiwiZnJhZ21lbnQiLCJlbnVtIiwib24iXSxsaXRlcmFsOlsidHJ1ZSIsImZhbHNlIiwibnVsbCJdfSxjb250YWluczpbZS5IQVNIX0NPTU1FTlRfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuTlVNQkVSX01PREUse3Njb3BlOiJwdW5jdHVhdGlvbiIsbWF0Y2g6L1suXXszfS8scmVsZXZhbmNlOjB9LHtzY29wZToicHVuY3R1YXRpb24iLGJlZ2luOi9bXCFcKFwpXDpcPVxbXF1ce1x8XH1dezF9LyxyZWxldmFuY2U6MH0se3Njb3BlOiJ2YXJpYWJsZSIsYmVnaW46L1wkLyxlbmQ6L1xXLyxleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTowfSx7c2NvcGU6Im1ldGEiLG1hdGNoOi9AXHcrLyxleGNsdWRlRW5kOiEwfSx7c2NvcGU6InN5bWJvbCIsYmVnaW46dC5jb25jYXQobix0Lmxvb2thaGVhZCgvXHMqOi8pKSxyZWxldmFuY2U6MH1dLGlsbGVnYWw6Wy9bOzwnXS8sL0JFR0lOL119fXZhciAkcj1lPT4oe0lNUE9SVEFOVDp7c2NvcGU6Im1ldGEiLGJlZ2luOiIhaW1wb3J0YW50In0sQkxPQ0tfQ09NTUVOVDplLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLEhFWENPTE9SOntzY29wZToibnVtYmVyIixiZWdpbjovIygoWzAtOWEtZkEtRl17Myw0fSl8KChbMC05YS1mQS1GXXsyfSl7Myw0fSkpXGIvfSxVTklDT0RFX1JBTkdFOntzY29wZToibnVtYmVyIixiZWdpbjovXGJbVXVdXCtbMC05QS1GYS1mXVswLTlBLUZhLWY/XXswLDV9KC1bMC05QS1GYS1mXVswLTlBLUZhLWZdezAsNX0pPy99LEZVTkNUSU9OX0RJU1BBVENIOntjbGFzc05hbWU6ImJ1aWx0X2luIixiZWdpbjovW1x3LV0rKD89XCgpL30sQVRUUklCVVRFX1NFTEVDVE9SX01PREU6e3Njb3BlOiJzZWxlY3Rvci1hdHRyIixiZWdpbjovXFsvLGVuZDovXF0vLGlsbGVnYWw6IiQiLGNvbnRhaW5zOltlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERV19LENTU19OVU1CRVJfTU9ERTp7c2NvcGU6Im51bWJlciIsYmVnaW46ZS5OVU1CRVJfUkUrIiglfGVtfGV4fGNofHJlbXx2d3x2aHx2bWlufHZtYXh8Y218bW18aW58cHR8cGN8cHh8ZGVnfGdyYWR8cmFkfHR1cm58c3xtc3xIenxrSHp8ZHBpfGRwY218ZHBweCk/IixyZWxldmFuY2U6MH0sQ1NTX1ZBUklBQkxFOntjbGFzc05hbWU6ImF0dHIiLGJlZ2luOi8tLVtBLVphLXpfXVtBLVphLXowLTlfLV0qL319KSxHcj1bImEiLCJhYmJyIiwiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNpdGUiLCJjb2RlIiwiZGQiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhncm91cCIsImh0bWwiLCJpIiwiaWZyYW1lIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcmsiLCJtZW51IiwibmF2Iiwib2JqZWN0Iiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsInAiLCJwaWN0dXJlIiwicSIsInF1b3RlIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzb3VyY2UiLCJzcGFuIiwic3Ryb25nIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidWwiLCJ2YXIiLCJ2aWRlbyJdLEZyPVsiZGVmcyIsImciLCJtYXJrZXIiLCJtYXNrIiwicGF0dGVybiIsInN2ZyIsInN3aXRjaCIsInN5bWJvbCIsImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZUZsb29kIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVUaWxlIiwiZmVUdXJidWxlbmNlIiwibGluZWFyR3JhZGllbnQiLCJyYWRpYWxHcmFkaWVudCIsInN0b3AiLCJjaXJjbGUiLCJlbGxpcHNlIiwiaW1hZ2UiLCJsaW5lIiwicGF0aCIsInBvbHlnb24iLCJwb2x5bGluZSIsInJlY3QiLCJ0ZXh0IiwidXNlIiwidGV4dFBhdGgiLCJ0c3BhbiIsImZvcmVpZ25PYmplY3QiLCJjbGlwUGF0aCJdLEtyPVsuLi5HciwuLi5Gcl0sWnI9WyJhbnktaG92ZXIiLCJhbnktcG9pbnRlciIsImFzcGVjdC1yYXRpbyIsImNvbG9yIiwiY29sb3ItZ2FtdXQiLCJjb2xvci1pbmRleCIsImRldmljZS1hc3BlY3QtcmF0aW8iLCJkZXZpY2UtaGVpZ2h0IiwiZGV2aWNlLXdpZHRoIiwiZGlzcGxheS1tb2RlIiwiZm9yY2VkLWNvbG9ycyIsImdyaWQiLCJoZWlnaHQiLCJob3ZlciIsImludmVydGVkLWNvbG9ycyIsIm1vbm9jaHJvbWUiLCJvcmllbnRhdGlvbiIsIm92ZXJmbG93LWJsb2NrIiwib3ZlcmZsb3ctaW5saW5lIiwicG9pbnRlciIsInByZWZlcnMtY29sb3Itc2NoZW1lIiwicHJlZmVycy1jb250cmFzdCIsInByZWZlcnMtcmVkdWNlZC1tb3Rpb24iLCJwcmVmZXJzLXJlZHVjZWQtdHJhbnNwYXJlbmN5IiwicmVzb2x1dGlvbiIsInNjYW4iLCJzY3JpcHRpbmciLCJ1cGRhdGUiLCJ3aWR0aCIsIm1pbi13aWR0aCIsIm1heC13aWR0aCIsIm1pbi1oZWlnaHQiLCJtYXgtaGVpZ2h0Il0uc29ydCgpLnJldmVyc2UoKSxqcj1bImFjdGl2ZSIsImFueS1saW5rIiwiYmxhbmsiLCJjaGVja2VkIiwiY3VycmVudCIsImRlZmF1bHQiLCJkZWZpbmVkIiwiZGlyIiwiZGlzYWJsZWQiLCJkcm9wIiwiZW1wdHkiLCJlbmFibGVkIiwiZmlyc3QiLCJmaXJzdC1jaGlsZCIsImZpcnN0LW9mLXR5cGUiLCJmdWxsc2NyZWVuIiwiZnV0dXJlIiwiZm9jdXMiLCJmb2N1cy12aXNpYmxlIiwiZm9jdXMtd2l0aGluIiwiaGFzIiwiaG9zdCIsImhvc3QtY29udGV4dCIsImhvdmVyIiwiaW5kZXRlcm1pbmF0ZSIsImluLXJhbmdlIiwiaW52YWxpZCIsImlzIiwibGFuZyIsImxhc3QtY2hpbGQiLCJsYXN0LW9mLXR5cGUiLCJsZWZ0IiwibGluayIsImxvY2FsLWxpbmsiLCJub3QiLCJudGgtY2hpbGQiLCJudGgtY29sIiwibnRoLWxhc3QtY2hpbGQiLCJudGgtbGFzdC1jb2wiLCJudGgtbGFzdC1vZi10eXBlIiwibnRoLW9mLXR5cGUiLCJvbmx5LWNoaWxkIiwib25seS1vZi10eXBlIiwib3B0aW9uYWwiLCJvdXQtb2YtcmFuZ2UiLCJwYXN0IiwicGxhY2Vob2xkZXItc2hvd24iLCJyZWFkLW9ubHkiLCJyZWFkLXdyaXRlIiwicmVxdWlyZWQiLCJyaWdodCIsInJvb3QiLCJzY29wZSIsInRhcmdldCIsInRhcmdldC13aXRoaW4iLCJ1c2VyLWludmFsaWQiLCJ2YWxpZCIsInZpc2l0ZWQiLCJ3aGVyZSJdLnNvcnQoKS5yZXZlcnNlKCksV3I9WyJhZnRlciIsImJhY2tkcm9wIiwiYmVmb3JlIiwiY3VlIiwiY3VlLXJlZ2lvbiIsImZpcnN0LWxldHRlciIsImZpcnN0LWxpbmUiLCJncmFtbWFyLWVycm9yIiwibWFya2VyIiwicGFydCIsInBsYWNlaG9sZGVyIiwic2VsZWN0aW9uIiwic2xvdHRlZCIsInNwZWxsaW5nLWVycm9yIl0uc29ydCgpLnJldmVyc2UoKSxxcj1bImFjY2VudC1jb2xvciIsImFsaWduLWNvbnRlbnQiLCJhbGlnbi1pdGVtcyIsImFsaWduLXNlbGYiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhbGwiLCJhbmNob3ItbmFtZSIsImFuaW1hdGlvbiIsImFuaW1hdGlvbi1jb21wb3NpdGlvbiIsImFuaW1hdGlvbi1kZWxheSIsImFuaW1hdGlvbi1kaXJlY3Rpb24iLCJhbmltYXRpb24tZHVyYXRpb24iLCJhbmltYXRpb24tZmlsbC1tb2RlIiwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCIsImFuaW1hdGlvbi1uYW1lIiwiYW5pbWF0aW9uLXBsYXktc3RhdGUiLCJhbmltYXRpb24tcmFuZ2UiLCJhbmltYXRpb24tcmFuZ2UtZW5kIiwiYW5pbWF0aW9uLXJhbmdlLXN0YXJ0IiwiYW5pbWF0aW9uLXRpbWVsaW5lIiwiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImFwcGVhcmFuY2UiLCJhc3BlY3QtcmF0aW8iLCJiYWNrZHJvcC1maWx0ZXIiLCJiYWNrZmFjZS12aXNpYmlsaXR5IiwiYmFja2dyb3VuZCIsImJhY2tncm91bmQtYXR0YWNobWVudCIsImJhY2tncm91bmQtYmxlbmQtbW9kZSIsImJhY2tncm91bmQtY2xpcCIsImJhY2tncm91bmQtY29sb3IiLCJiYWNrZ3JvdW5kLWltYWdlIiwiYmFja2dyb3VuZC1vcmlnaW4iLCJiYWNrZ3JvdW5kLXBvc2l0aW9uIiwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwiYmFja2dyb3VuZC1wb3NpdGlvbi15IiwiYmFja2dyb3VuZC1yZXBlYXQiLCJiYWNrZ3JvdW5kLXNpemUiLCJiYXNlbGluZS1zaGlmdCIsImJsb2NrLXNpemUiLCJib3JkZXIiLCJib3JkZXItYmxvY2siLCJib3JkZXItYmxvY2stY29sb3IiLCJib3JkZXItYmxvY2stZW5kIiwiYm9yZGVyLWJsb2NrLWVuZC1jb2xvciIsImJvcmRlci1ibG9jay1lbmQtc3R5bGUiLCJib3JkZXItYmxvY2stZW5kLXdpZHRoIiwiYm9yZGVyLWJsb2NrLXN0YXJ0IiwiYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yIiwiYm9yZGVyLWJsb2NrLXN0YXJ0LXN0eWxlIiwiYm9yZGVyLWJsb2NrLXN0YXJ0LXdpZHRoIiwiYm9yZGVyLWJsb2NrLXN0eWxlIiwiYm9yZGVyLWJsb2NrLXdpZHRoIiwiYm9yZGVyLWJvdHRvbSIsImJvcmRlci1ib3R0b20tY29sb3IiLCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIiwiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLCJib3JkZXItYm90dG9tLXN0eWxlIiwiYm9yZGVyLWJvdHRvbS13aWR0aCIsImJvcmRlci1jb2xsYXBzZSIsImJvcmRlci1jb2xvciIsImJvcmRlci1lbmQtZW5kLXJhZGl1cyIsImJvcmRlci1lbmQtc3RhcnQtcmFkaXVzIiwiYm9yZGVyLWltYWdlIiwiYm9yZGVyLWltYWdlLW91dHNldCIsImJvcmRlci1pbWFnZS1yZXBlYXQiLCJib3JkZXItaW1hZ2Utc2xpY2UiLCJib3JkZXItaW1hZ2Utc291cmNlIiwiYm9yZGVyLWltYWdlLXdpZHRoIiwiYm9yZGVyLWlubGluZSIsImJvcmRlci1pbmxpbmUtY29sb3IiLCJib3JkZXItaW5saW5lLWVuZCIsImJvcmRlci1pbmxpbmUtZW5kLWNvbG9yIiwiYm9yZGVyLWlubGluZS1lbmQtc3R5bGUiLCJib3JkZXItaW5saW5lLWVuZC13aWR0aCIsImJvcmRlci1pbmxpbmUtc3RhcnQiLCJib3JkZXItaW5saW5lLXN0YXJ0LWNvbG9yIiwiYm9yZGVyLWlubGluZS1zdGFydC1zdHlsZSIsImJvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGgiLCJib3JkZXItaW5saW5lLXN0eWxlIiwiYm9yZGVyLWlubGluZS13aWR0aCIsImJvcmRlci1sZWZ0IiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItbGVmdC1zdHlsZSIsImJvcmRlci1sZWZ0LXdpZHRoIiwiYm9yZGVyLXJhZGl1cyIsImJvcmRlci1yaWdodCIsImJvcmRlci1yaWdodC1jb2xvciIsImJvcmRlci1yaWdodC1zdHlsZSIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci1zcGFjaW5nIiwiYm9yZGVyLXN0YXJ0LWVuZC1yYWRpdXMiLCJib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzIiwiYm9yZGVyLXN0eWxlIiwiYm9yZGVyLXRvcCIsImJvcmRlci10b3AtY29sb3IiLCJib3JkZXItdG9wLWxlZnQtcmFkaXVzIiwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCJib3JkZXItdG9wLXN0eWxlIiwiYm9yZGVyLXRvcC13aWR0aCIsImJvcmRlci13aWR0aCIsImJvdHRvbSIsImJveC1hbGlnbiIsImJveC1kZWNvcmF0aW9uLWJyZWFrIiwiYm94LWRpcmVjdGlvbiIsImJveC1mbGV4IiwiYm94LWZsZXgtZ3JvdXAiLCJib3gtbGluZXMiLCJib3gtb3JkaW5hbC1ncm91cCIsImJveC1vcmllbnQiLCJib3gtcGFjayIsImJveC1zaGFkb3ciLCJib3gtc2l6aW5nIiwiYnJlYWstYWZ0ZXIiLCJicmVhay1iZWZvcmUiLCJicmVhay1pbnNpZGUiLCJjYXB0aW9uLXNpZGUiLCJjYXJldC1jb2xvciIsImNsZWFyIiwiY2xpcCIsImNsaXAtcGF0aCIsImNsaXAtcnVsZSIsImNvbG9yIiwiY29sb3ItaW50ZXJwb2xhdGlvbiIsImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsImNvbG9yLXByb2ZpbGUiLCJjb2xvci1yZW5kZXJpbmciLCJjb2xvci1zY2hlbWUiLCJjb2x1bW4tY291bnQiLCJjb2x1bW4tZmlsbCIsImNvbHVtbi1nYXAiLCJjb2x1bW4tcnVsZSIsImNvbHVtbi1ydWxlLWNvbG9yIiwiY29sdW1uLXJ1bGUtc3R5bGUiLCJjb2x1bW4tcnVsZS13aWR0aCIsImNvbHVtbi1zcGFuIiwiY29sdW1uLXdpZHRoIiwiY29sdW1ucyIsImNvbnRhaW4iLCJjb250YWluLWludHJpbnNpYy1ibG9jay1zaXplIiwiY29udGFpbi1pbnRyaW5zaWMtaGVpZ2h0IiwiY29udGFpbi1pbnRyaW5zaWMtaW5saW5lLXNpemUiLCJjb250YWluLWludHJpbnNpYy1zaXplIiwiY29udGFpbi1pbnRyaW5zaWMtd2lkdGgiLCJjb250YWluZXIiLCJjb250YWluZXItbmFtZSIsImNvbnRhaW5lci10eXBlIiwiY29udGVudCIsImNvbnRlbnQtdmlzaWJpbGl0eSIsImNvcm5lci1ib3R0b20tbGVmdC1zaGFwZSIsImNvcm5lci1ib3R0b20tcmlnaHQtc2hhcGUiLCJjb3JuZXItc2hhcGUiLCJjb3JuZXItdG9wLWxlZnQtc2hhcGUiLCJjb3JuZXItdG9wLXJpZ2h0LXNoYXBlIiwiY291bnRlci1pbmNyZW1lbnQiLCJjb3VudGVyLXJlc2V0IiwiY291bnRlci1zZXQiLCJjdWUiLCJjdWUtYWZ0ZXIiLCJjdWUtYmVmb3JlIiwiY3Vyc29yIiwiY3giLCJjeSIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkb21pbmFudC1iYXNlbGluZSIsImVtcHR5LWNlbGxzIiwiZW5hYmxlLWJhY2tncm91bmQiLCJmaWVsZC1zaXppbmciLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmxleCIsImZsZXgtYmFzaXMiLCJmbGV4LWRpcmVjdGlvbiIsImZsZXgtZmxvdyIsImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIiwiZmxleC13cmFwIiwiZmxvYXQiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmbG93IiwiZm9udCIsImZvbnQtZGlzcGxheSIsImZvbnQtZmFtaWx5IiwiZm9udC1mZWF0dXJlLXNldHRpbmdzIiwiZm9udC1rZXJuaW5nIiwiZm9udC1sYW5ndWFnZS1vdmVycmlkZSIsImZvbnQtb3B0aWNhbC1zaXppbmciLCJmb250LXBhbGV0dGUiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zbW9vdGgiLCJmb250LXNtb290aGluZyIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXN5bnRoZXNpcyIsImZvbnQtc3ludGhlc2lzLXBvc2l0aW9uIiwiZm9udC1zeW50aGVzaXMtc21hbGwtY2FwcyIsImZvbnQtc3ludGhlc2lzLXN0eWxlIiwiZm9udC1zeW50aGVzaXMtd2VpZ2h0IiwiZm9udC12YXJpYW50IiwiZm9udC12YXJpYW50LWFsdGVybmF0ZXMiLCJmb250LXZhcmlhbnQtY2FwcyIsImZvbnQtdmFyaWFudC1lYXN0LWFzaWFuIiwiZm9udC12YXJpYW50LWVtb2ppIiwiZm9udC12YXJpYW50LWxpZ2F0dXJlcyIsImZvbnQtdmFyaWFudC1udW1lcmljIiwiZm9udC12YXJpYW50LXBvc2l0aW9uIiwiZm9udC12YXJpYXRpb24tc2V0dGluZ3MiLCJmb250LXdlaWdodCIsImZvcmNlZC1jb2xvci1hZGp1c3QiLCJnYXAiLCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwiLCJncmlkIiwiZ3JpZC1hcmVhIiwiZ3JpZC1hdXRvLWNvbHVtbnMiLCJncmlkLWF1dG8tZmxvdyIsImdyaWQtYXV0by1yb3dzIiwiZ3JpZC1jb2x1bW4iLCJncmlkLWNvbHVtbi1lbmQiLCJncmlkLWNvbHVtbi1zdGFydCIsImdyaWQtZ2FwIiwiZ3JpZC1yb3ciLCJncmlkLXJvdy1lbmQiLCJncmlkLXJvdy1zdGFydCIsImdyaWQtdGVtcGxhdGUiLCJncmlkLXRlbXBsYXRlLWFyZWFzIiwiZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIiwiZ3JpZC10ZW1wbGF0ZS1yb3dzIiwiaGFuZ2luZy1wdW5jdHVhdGlvbiIsImhlaWdodCIsImh5cGhlbmF0ZS1jaGFyYWN0ZXIiLCJoeXBoZW5hdGUtbGltaXQtY2hhcnMiLCJoeXBoZW5zIiwiaWNvbiIsImltYWdlLW9yaWVudGF0aW9uIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW1hZ2UtcmVzb2x1dGlvbiIsImltZS1tb2RlIiwiaW5pdGlhbC1sZXR0ZXIiLCJpbml0aWFsLWxldHRlci1hbGlnbiIsImlubGluZS1zaXplIiwiaW5zZXQiLCJpbnNldC1hcmVhIiwiaW5zZXQtYmxvY2siLCJpbnNldC1ibG9jay1lbmQiLCJpbnNldC1ibG9jay1zdGFydCIsImluc2V0LWlubGluZSIsImluc2V0LWlubGluZS1lbmQiLCJpbnNldC1pbmxpbmUtc3RhcnQiLCJpc29sYXRpb24iLCJqdXN0aWZ5LWNvbnRlbnQiLCJqdXN0aWZ5LWl0ZW1zIiwianVzdGlmeS1zZWxmIiwia2VybmluZyIsImxlZnQiLCJsZXR0ZXItc3BhY2luZyIsImxpZ2h0aW5nLWNvbG9yIiwibGluZS1icmVhayIsImxpbmUtaGVpZ2h0IiwibGluZS1oZWlnaHQtc3RlcCIsImxpc3Qtc3R5bGUiLCJsaXN0LXN0eWxlLWltYWdlIiwibGlzdC1zdHlsZS1wb3NpdGlvbiIsImxpc3Qtc3R5bGUtdHlwZSIsIm1hcmdpbiIsIm1hcmdpbi1ibG9jayIsIm1hcmdpbi1ibG9jay1lbmQiLCJtYXJnaW4tYmxvY2stc3RhcnQiLCJtYXJnaW4tYm90dG9tIiwibWFyZ2luLWlubGluZSIsIm1hcmdpbi1pbmxpbmUtZW5kIiwibWFyZ2luLWlubGluZS1zdGFydCIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1hcmdpbi10cmltIiwibWFya2VyIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrcyIsIm1hc2siLCJtYXNrLWJvcmRlciIsIm1hc2stYm9yZGVyLW1vZGUiLCJtYXNrLWJvcmRlci1vdXRzZXQiLCJtYXNrLWJvcmRlci1yZXBlYXQiLCJtYXNrLWJvcmRlci1zbGljZSIsIm1hc2stYm9yZGVyLXNvdXJjZSIsIm1hc2stYm9yZGVyLXdpZHRoIiwibWFzay1jbGlwIiwibWFzay1jb21wb3NpdGUiLCJtYXNrLWltYWdlIiwibWFzay1tb2RlIiwibWFzay1vcmlnaW4iLCJtYXNrLXBvc2l0aW9uIiwibWFzay1yZXBlYXQiLCJtYXNrLXNpemUiLCJtYXNrLXR5cGUiLCJtYXNvbnJ5LWF1dG8tZmxvdyIsIm1hdGgtZGVwdGgiLCJtYXRoLXNoaWZ0IiwibWF0aC1zdHlsZSIsIm1heC1ibG9jay1zaXplIiwibWF4LWhlaWdodCIsIm1heC1pbmxpbmUtc2l6ZSIsIm1heC13aWR0aCIsIm1pbi1ibG9jay1zaXplIiwibWluLWhlaWdodCIsIm1pbi1pbmxpbmUtc2l6ZSIsIm1pbi13aWR0aCIsIm1peC1ibGVuZC1tb2RlIiwibmF2LWRvd24iLCJuYXYtaW5kZXgiLCJuYXYtbGVmdCIsIm5hdi1yaWdodCIsIm5hdi11cCIsIm5vbmUiLCJub3JtYWwiLCJvYmplY3QtZml0Iiwib2JqZWN0LXBvc2l0aW9uIiwib2Zmc2V0Iiwib2Zmc2V0LWFuY2hvciIsIm9mZnNldC1kaXN0YW5jZSIsIm9mZnNldC1wYXRoIiwib2Zmc2V0LXBvc2l0aW9uIiwib2Zmc2V0LXJvdGF0ZSIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJvdXRsaW5lIiwib3V0bGluZS1jb2xvciIsIm91dGxpbmUtb2Zmc2V0Iiwib3V0bGluZS1zdHlsZSIsIm91dGxpbmUtd2lkdGgiLCJvdmVyZmxvdyIsIm92ZXJmbG93LWFuY2hvciIsIm92ZXJmbG93LWJsb2NrIiwib3ZlcmZsb3ctY2xpcC1tYXJnaW4iLCJvdmVyZmxvdy1pbmxpbmUiLCJvdmVyZmxvdy13cmFwIiwib3ZlcmZsb3cteCIsIm92ZXJmbG93LXkiLCJvdmVybGF5Iiwib3ZlcnNjcm9sbC1iZWhhdmlvciIsIm92ZXJzY3JvbGwtYmVoYXZpb3ItYmxvY2siLCJvdmVyc2Nyb2xsLWJlaGF2aW9yLWlubGluZSIsIm92ZXJzY3JvbGwtYmVoYXZpb3IteCIsIm92ZXJzY3JvbGwtYmVoYXZpb3IteSIsInBhZGRpbmciLCJwYWRkaW5nLWJsb2NrIiwicGFkZGluZy1ibG9jay1lbmQiLCJwYWRkaW5nLWJsb2NrLXN0YXJ0IiwicGFkZGluZy1ib3R0b20iLCJwYWRkaW5nLWlubGluZSIsInBhZGRpbmctaW5saW5lLWVuZCIsInBhZGRpbmctaW5saW5lLXN0YXJ0IiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGFnZSIsInBhZ2UtYnJlYWstYWZ0ZXIiLCJwYWdlLWJyZWFrLWJlZm9yZSIsInBhZ2UtYnJlYWstaW5zaWRlIiwicGFpbnQtb3JkZXIiLCJwYXVzZSIsInBhdXNlLWFmdGVyIiwicGF1c2UtYmVmb3JlIiwicGVyc3BlY3RpdmUiLCJwZXJzcGVjdGl2ZS1vcmlnaW4iLCJwbGFjZS1jb250ZW50IiwicGxhY2UtaXRlbXMiLCJwbGFjZS1zZWxmIiwicG9pbnRlci1ldmVudHMiLCJwb3NpdGlvbiIsInBvc2l0aW9uLWFuY2hvciIsInBvc2l0aW9uLXZpc2liaWxpdHkiLCJwcmludC1jb2xvci1hZGp1c3QiLCJxdW90ZXMiLCJyIiwicmVzaXplIiwicmVzdCIsInJlc3QtYWZ0ZXIiLCJyZXN0LWJlZm9yZSIsInJpZ2h0Iiwicm90YXRlIiwicm93LWdhcCIsInJ1YnktYWxpZ24iLCJydWJ5LXBvc2l0aW9uIiwic2NhbGUiLCJzY3JvbGwtYmVoYXZpb3IiLCJzY3JvbGwtbWFyZ2luIiwic2Nyb2xsLW1hcmdpbi1ibG9jayIsInNjcm9sbC1tYXJnaW4tYmxvY2stZW5kIiwic2Nyb2xsLW1hcmdpbi1ibG9jay1zdGFydCIsInNjcm9sbC1tYXJnaW4tYm90dG9tIiwic2Nyb2xsLW1hcmdpbi1pbmxpbmUiLCJzY3JvbGwtbWFyZ2luLWlubGluZS1lbmQiLCJzY3JvbGwtbWFyZ2luLWlubGluZS1zdGFydCIsInNjcm9sbC1tYXJnaW4tbGVmdCIsInNjcm9sbC1tYXJnaW4tcmlnaHQiLCJzY3JvbGwtbWFyZ2luLXRvcCIsInNjcm9sbC1wYWRkaW5nIiwic2Nyb2xsLXBhZGRpbmctYmxvY2siLCJzY3JvbGwtcGFkZGluZy1ibG9jay1lbmQiLCJzY3JvbGwtcGFkZGluZy1ibG9jay1zdGFydCIsInNjcm9sbC1wYWRkaW5nLWJvdHRvbSIsInNjcm9sbC1wYWRkaW5nLWlubGluZSIsInNjcm9sbC1wYWRkaW5nLWlubGluZS1lbmQiLCJzY3JvbGwtcGFkZGluZy1pbmxpbmUtc3RhcnQiLCJzY3JvbGwtcGFkZGluZy1sZWZ0Iiwic2Nyb2xsLXBhZGRpbmctcmlnaHQiLCJzY3JvbGwtcGFkZGluZy10b3AiLCJzY3JvbGwtc25hcC1hbGlnbiIsInNjcm9sbC1zbmFwLXN0b3AiLCJzY3JvbGwtc25hcC10eXBlIiwic2Nyb2xsLXRpbWVsaW5lIiwic2Nyb2xsLXRpbWVsaW5lLWF4aXMiLCJzY3JvbGwtdGltZWxpbmUtbmFtZSIsInNjcm9sbGJhci1jb2xvciIsInNjcm9sbGJhci1ndXR0ZXIiLCJzY3JvbGxiYXItd2lkdGgiLCJzaGFwZS1pbWFnZS10aHJlc2hvbGQiLCJzaGFwZS1tYXJnaW4iLCJzaGFwZS1vdXRzaWRlIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlYWsiLCJzcGVhay1hcyIsInNyYyIsInN0b3AtY29sb3IiLCJzdG9wLW9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtbGluZWNhcCIsInN0cm9rZS1saW5lam9pbiIsInN0cm9rZS1taXRlcmxpbWl0Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2Utd2lkdGgiLCJ0YWItc2l6ZSIsInRhYmxlLWxheW91dCIsInRleHQtYWxpZ24iLCJ0ZXh0LWFsaWduLWFsbCIsInRleHQtYWxpZ24tbGFzdCIsInRleHQtYW5jaG9yIiwidGV4dC1jb21iaW5lLXVwcmlnaHQiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiLCJ0ZXh0LWRlY29yYXRpb24tbGluZSIsInRleHQtZGVjb3JhdGlvbi1za2lwIiwidGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rIiwidGV4dC1kZWNvcmF0aW9uLXN0eWxlIiwidGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcyIsInRleHQtZW1waGFzaXMiLCJ0ZXh0LWVtcGhhc2lzLWNvbG9yIiwidGV4dC1lbXBoYXNpcy1wb3NpdGlvbiIsInRleHQtZW1waGFzaXMtc3R5bGUiLCJ0ZXh0LWluZGVudCIsInRleHQtanVzdGlmeSIsInRleHQtb3JpZW50YXRpb24iLCJ0ZXh0LW92ZXJmbG93IiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0LXNoYWRvdyIsInRleHQtc2l6ZS1hZGp1c3QiLCJ0ZXh0LXRyYW5zZm9ybSIsInRleHQtdW5kZXJsaW5lLW9mZnNldCIsInRleHQtdW5kZXJsaW5lLXBvc2l0aW9uIiwidGV4dC13cmFwIiwidGV4dC13cmFwLW1vZGUiLCJ0ZXh0LXdyYXAtc3R5bGUiLCJ0aW1lbGluZS1zY29wZSIsInRvcCIsInRvdWNoLWFjdGlvbiIsInRyYW5zZm9ybSIsInRyYW5zZm9ybS1ib3giLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidHJhbnNmb3JtLXN0eWxlIiwidHJhbnNpdGlvbiIsInRyYW5zaXRpb24tYmVoYXZpb3IiLCJ0cmFuc2l0aW9uLWRlbGF5IiwidHJhbnNpdGlvbi1kdXJhdGlvbiIsInRyYW5zaXRpb24tcHJvcGVydHkiLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsInRyYW5zbGF0ZSIsInVuaWNvZGUtYmlkaSIsInVuaWNvZGUtcmFuZ2UiLCJ1c2VyLW1vZGlmeSIsInVzZXItc2VsZWN0IiwidmVjdG9yLWVmZmVjdCIsInZlcnRpY2FsLWFsaWduIiwidmlldy10aW1lbGluZSIsInZpZXctdGltZWxpbmUtYXhpcyIsInZpZXctdGltZWxpbmUtaW5zZXQiLCJ2aWV3LXRpbWVsaW5lLW5hbWUiLCJ2aWV3LXRyYW5zaXRpb24tbmFtZSIsInZpc2liaWxpdHkiLCJ2b2ljZS1iYWxhbmNlIiwidm9pY2UtZHVyYXRpb24iLCJ2b2ljZS1mYW1pbHkiLCJ2b2ljZS1waXRjaCIsInZvaWNlLXJhbmdlIiwidm9pY2UtcmF0ZSIsInZvaWNlLXN0cmVzcyIsInZvaWNlLXZvbHVtZSIsIndoaXRlLXNwYWNlIiwid2hpdGUtc3BhY2UtY29sbGFwc2UiLCJ3aWRvd3MiLCJ3aWR0aCIsIndpbGwtY2hhbmdlIiwid29yZC1icmVhayIsIndvcmQtc3BhY2luZyIsIndvcmQtd3JhcCIsIndyaXRpbmctbW9kZSIsIngiLCJ5Iiwiei1pbmRleCIsInpvb20iXS5zb3J0KCkucmV2ZXJzZSgpO2Z1bmN0aW9uIG9uKGUpe2xldCB0PSRyKGUpLG49V3Iscj1qcixzPSJAW2Etei1dKyIsZz0iYW5kIG9yIG5vdCBvbmx5IixpPXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiKFxcJCIrIlthLXpBLVotXVthLXpBLVowLTlfLV0qIisiKVxcYiIscmVsZXZhbmNlOjB9O3JldHVybntuYW1lOiJTQ1NTIixjYXNlX2luc2Vuc2l0aXZlOiEwLGlsbGVnYWw6Ils9L3wnXSIsY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHQuQ1NTX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6InNlbGVjdG9yLWlkIixiZWdpbjoiI1tBLVphLXowLTlfLV0rIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic2VsZWN0b3ItY2xhc3MiLGJlZ2luOiJcXC5bQS1aYS16MC05Xy1dKyIscmVsZXZhbmNlOjB9LHQuQVRUUklCVVRFX1NFTEVDVE9SX01PREUse2NsYXNzTmFtZToic2VsZWN0b3ItdGFnIixiZWdpbjoiXFxiKCIrS3Iuam9pbigifCIpKyIpXFxiIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic2VsZWN0b3ItcHNldWRvIixiZWdpbjoiOigiK3Iuam9pbigifCIpKyIpIn0se2NsYXNzTmFtZToic2VsZWN0b3ItcHNldWRvIixiZWdpbjoiOig6KT8oIituLmpvaW4oInwiKSsiKSJ9LGkse2JlZ2luOi9cKC8sZW5kOi9cKS8sY29udGFpbnM6W3QuQ1NTX05VTUJFUl9NT0RFXX0sdC5DU1NfVkFSSUFCTEUse2NsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjoiXFxiKCIrcXIuam9pbigifCIpKyIpXFxiIn0se2JlZ2luOiJcXGIod2hpdGVzcGFjZXx3YWl0fHctcmVzaXplfHZpc2libGV8dmVydGljYWwtdGV4dHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x1cHBlcmNhc2V8dXBwZXItcm9tYW58dXBwZXItYWxwaGF8dW5kZXJsaW5lfHRyYW5zcGFyZW50fHRvcHx0aGlufHRoaWNrfHRleHR8dGV4dC10b3B8dGV4dC1ib3R0b218dGItcmx8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLWZvb3Rlci1ncm91cHxzdy1yZXNpemV8c3VwZXJ8c3RyaWN0fHN0YXRpY3xzcXVhcmV8c29saWR8c21hbGwtY2Fwc3xzZXBhcmF0ZXxzZS1yZXNpemV8c2Nyb2xsfHMtcmVzaXplfHJ0bHxyb3ctcmVzaXplfHJpZGdlfHJpZ2h0fHJlcGVhdHxyZXBlYXQteXxyZXBlYXQteHxyZWxhdGl2ZXxwcm9ncmVzc3xwb2ludGVyfG92ZXJsaW5lfG91dHNpZGV8b3V0c2V0fG9ibGlxdWV8bm93cmFwfG5vdC1hbGxvd2VkfG5vcm1hbHxub25lfG53LXJlc2l6ZXxuby1yZXBlYXR8bm8tZHJvcHxuZXdzcGFwZXJ8bmUtcmVzaXplfG4tcmVzaXplfG1vdmV8bWlkZGxlfG1lZGl1bXxsdHJ8bHItdGJ8bG93ZXJjYXNlfGxvd2VyLXJvbWFufGxvd2VyLWFscGhhfGxvb3NlfGxpc3QtaXRlbXxsaW5lfGxpbmUtdGhyb3VnaHxsaW5lLWVkZ2V8bGlnaHRlcnxsZWZ0fGtlZXAtYWxsfGp1c3RpZnl8aXRhbGljfGludGVyLXdvcmR8aW50ZXItaWRlb2dyYXBofGluc2lkZXxpbnNldHxpbmxpbmV8aW5saW5lLWJsb2NrfGluaGVyaXR8aW5hY3RpdmV8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtYWxwaGF8aG9yaXpvbnRhbHxoaWRkZW58aGVscHxoYW5kfGdyb292ZXxmaXhlZHxlbGxpcHNpc3xlLXJlc2l6ZXxkb3VibGV8ZG90dGVkfGRpc3RyaWJ1dGV8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLWFsbC1saW5lc3xkaXNjfGRpc2FibGVkfGRlZmF1bHR8ZGVjaW1hbHxkYXNoZWR8Y3Jvc3NoYWlyfGNvbGxhcHNlfGNvbC1yZXNpemV8Y2lyY2xlfGNoYXJ8Y2VudGVyfGNhcGl0YWxpemV8YnJlYWstd29yZHxicmVhay1hbGx8Ym90dG9tfGJvdGh8Ym9sZGVyfGJvbGR8YmxvY2t8YmlkaS1vdmVycmlkZXxiZWxvd3xiYXNlbGluZXxhdXRvfGFsd2F5c3xhbGwtc2Nyb2xsfGFic29sdXRlfHRhYmxlfHRhYmxlLWNlbGwpXFxiIn0se2JlZ2luOi86LyxlbmQ6L1s7fXtdLyxyZWxldmFuY2U6MCxjb250YWluczpbdC5CTE9DS19DT01NRU5ULGksdC5IRVhDT0xPUix0LkNTU19OVU1CRVJfTU9ERSx0LlVOSUNPREVfUkFOR0UsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsdC5JTVBPUlRBTlQsdC5GVU5DVElPTl9ESVNQQVRDSF19LHtiZWdpbjoiQChwYWdlfGZvbnQtZmFjZSkiLGtleXdvcmRzOnskcGF0dGVybjpzLGtleXdvcmQ6IkBwYWdlIEBmb250LWZhY2UifX0se2JlZ2luOiJAIixlbmQ6Ilt7O10iLHJldHVybkJlZ2luOiEwLGtleXdvcmRzOnskcGF0dGVybjovW2Etei1dKy8sa2V5d29yZDpnLGF0dHJpYnV0ZTpaci5qb2luKCIgIil9LGNvbnRhaW5zOlt7YmVnaW46cyxjbGFzc05hbWU6ImtleXdvcmQifSx7YmVnaW46L1thLXotXSsoPz06KS8sY2xhc3NOYW1lOiJhdHRyaWJ1dGUifSxpLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLHQuSEVYQ09MT1IsdC5DU1NfTlVNQkVSX01PREVdfSx0LkZVTkNUSU9OX0RJU1BBVENIXX19ZnVuY3Rpb24gYW4oZSl7bGV0IHQ9ZS5yZWdleCxuPWUuQ09NTUVOVCgiLS0iLCIkIikscj17c2NvcGU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjovJy8sZW5kOi8nLyxjb250YWluczpbe21hdGNoOi8nJy99XX1dfSxzPXtiZWdpbjovIi8sZW5kOi8iLyxjb250YWluczpbe21hdGNoOi8iIi99XX0sZz1bInRydWUiLCJmYWxzZSIsInVua25vd24iXSxvPVsiZG91YmxlIHByZWNpc2lvbiIsImxhcmdlIG9iamVjdCIsIndpdGggdGltZXpvbmUiLCJ3aXRob3V0IHRpbWV6b25lIl0saT1bImJpZ2ludCIsImJpbmFyeSIsImJsb2IiLCJib29sZWFuIiwiY2hhciIsImNoYXJhY3RlciIsImNsb2IiLCJkYXRlIiwiZGVjIiwiZGVjZmxvYXQiLCJkZWNpbWFsIiwiZmxvYXQiLCJpbnQiLCJpbnRlZ2VyIiwiaW50ZXJ2YWwiLCJuY2hhciIsIm5jbG9iIiwibmF0aW9uYWwiLCJudW1lcmljIiwicmVhbCIsInJvdyIsInNtYWxsaW50IiwidGltZSIsInRpbWVzdGFtcCIsInZhcmNoYXIiLCJ2YXJ5aW5nIiwidmFyYmluYXJ5Il0sYz1bImFkZCIsImFzYyIsImNvbGxhdGlvbiIsImRlc2MiLCJmaW5hbCIsImZpcnN0IiwibGFzdCIsInZpZXciXSx1PVsiYWJzIiwiYWNvcyIsImFsbCIsImFsbG9jYXRlIiwiYWx0ZXIiLCJhbmQiLCJhbnkiLCJhcmUiLCJhcnJheSIsImFycmF5X2FnZyIsImFycmF5X21heF9jYXJkaW5hbGl0eSIsImFzIiwiYXNlbnNpdGl2ZSIsImFzaW4iLCJhc3ltbWV0cmljIiwiYXQiLCJhdGFuIiwiYXRvbWljIiwiYXV0aG9yaXphdGlvbiIsImF2ZyIsImJlZ2luIiwiYmVnaW5fZnJhbWUiLCJiZWdpbl9wYXJ0aXRpb24iLCJiZXR3ZWVuIiwiYmlnaW50IiwiYmluYXJ5IiwiYmxvYiIsImJvb2xlYW4iLCJib3RoIiwiYnkiLCJjYWxsIiwiY2FsbGVkIiwiY2FyZGluYWxpdHkiLCJjYXNjYWRlZCIsImNhc2UiLCJjYXN0IiwiY2VpbCIsImNlaWxpbmciLCJjaGFyIiwiY2hhcl9sZW5ndGgiLCJjaGFyYWN0ZXIiLCJjaGFyYWN0ZXJfbGVuZ3RoIiwiY2hlY2siLCJjbGFzc2lmaWVyIiwiY2xvYiIsImNsb3NlIiwiY29hbGVzY2UiLCJjb2xsYXRlIiwiY29sbGVjdCIsImNvbHVtbiIsImNvbW1pdCIsImNvbmRpdGlvbiIsImNvbm5lY3QiLCJjb25zdHJhaW50IiwiY29udGFpbnMiLCJjb252ZXJ0IiwiY29weSIsImNvcnIiLCJjb3JyZXNwb25kaW5nIiwiY29zIiwiY29zaCIsImNvdW50IiwiY292YXJfcG9wIiwiY292YXJfc2FtcCIsImNyZWF0ZSIsImNyb3NzIiwiY3ViZSIsImN1bWVfZGlzdCIsImN1cnJlbnQiLCJjdXJyZW50X2NhdGFsb2ciLCJjdXJyZW50X2RhdGUiLCJjdXJyZW50X2RlZmF1bHRfdHJhbnNmb3JtX2dyb3VwIiwiY3VycmVudF9wYXRoIiwiY3VycmVudF9yb2xlIiwiY3VycmVudF9yb3ciLCJjdXJyZW50X3NjaGVtYSIsImN1cnJlbnRfdGltZSIsImN1cnJlbnRfdGltZXN0YW1wIiwiY3VycmVudF9wYXRoIiwiY3VycmVudF9yb2xlIiwiY3VycmVudF90cmFuc2Zvcm1fZ3JvdXBfZm9yX3R5cGUiLCJjdXJyZW50X3VzZXIiLCJjdXJzb3IiLCJjeWNsZSIsImRhdGUiLCJkYXkiLCJkZWFsbG9jYXRlIiwiZGVjIiwiZGVjaW1hbCIsImRlY2Zsb2F0IiwiZGVjbGFyZSIsImRlZmF1bHQiLCJkZWZpbmUiLCJkZWxldGUiLCJkZW5zZV9yYW5rIiwiZGVyZWYiLCJkZXNjcmliZSIsImRldGVybWluaXN0aWMiLCJkaXNjb25uZWN0IiwiZGlzdGluY3QiLCJkb3VibGUiLCJkcm9wIiwiZHluYW1pYyIsImVhY2giLCJlbGVtZW50IiwiZWxzZSIsImVtcHR5IiwiZW5kIiwiZW5kX2ZyYW1lIiwiZW5kX3BhcnRpdGlvbiIsImVuZC1leGVjIiwiZXF1YWxzIiwiZXNjYXBlIiwiZXZlcnkiLCJleGNlcHQiLCJleGVjIiwiZXhlY3V0ZSIsImV4aXN0cyIsImV4cCIsImV4dGVybmFsIiwiZXh0cmFjdCIsImZhbHNlIiwiZmV0Y2giLCJmaWx0ZXIiLCJmaXJzdF92YWx1ZSIsImZsb2F0IiwiZmxvb3IiLCJmb3IiLCJmb3JlaWduIiwiZnJhbWVfcm93IiwiZnJlZSIsImZyb20iLCJmdWxsIiwiZnVuY3Rpb24iLCJmdXNpb24iLCJnZXQiLCJnbG9iYWwiLCJncmFudCIsImdyb3VwIiwiZ3JvdXBpbmciLCJncm91cHMiLCJoYXZpbmciLCJob2xkIiwiaG91ciIsImlkZW50aXR5IiwiaW4iLCJpbmRpY2F0b3IiLCJpbml0aWFsIiwiaW5uZXIiLCJpbm91dCIsImluc2Vuc2l0aXZlIiwiaW5zZXJ0IiwiaW50IiwiaW50ZWdlciIsImludGVyc2VjdCIsImludGVyc2VjdGlvbiIsImludGVydmFsIiwiaW50byIsImlzIiwiam9pbiIsImpzb25fYXJyYXkiLCJqc29uX2FycmF5YWdnIiwianNvbl9leGlzdHMiLCJqc29uX29iamVjdCIsImpzb25fb2JqZWN0YWdnIiwianNvbl9xdWVyeSIsImpzb25fdGFibGUiLCJqc29uX3RhYmxlX3ByaW1pdGl2ZSIsImpzb25fdmFsdWUiLCJsYWciLCJsYW5ndWFnZSIsImxhcmdlIiwibGFzdF92YWx1ZSIsImxhdGVyYWwiLCJsZWFkIiwibGVhZGluZyIsImxlZnQiLCJsaWtlIiwibGlrZV9yZWdleCIsImxpc3RhZ2ciLCJsbiIsImxvY2FsIiwibG9jYWx0aW1lIiwibG9jYWx0aW1lc3RhbXAiLCJsb2ciLCJsb2cxMCIsImxvd2VyIiwibWF0Y2giLCJtYXRjaF9udW1iZXIiLCJtYXRjaF9yZWNvZ25pemUiLCJtYXRjaGVzIiwibWF4IiwibWVtYmVyIiwibWVyZ2UiLCJtZXRob2QiLCJtaW4iLCJtaW51dGUiLCJtb2QiLCJtb2RpZmllcyIsIm1vZHVsZSIsIm1vbnRoIiwibXVsdGlzZXQiLCJuYXRpb25hbCIsIm5hdHVyYWwiLCJuY2hhciIsIm5jbG9iIiwibmV3Iiwibm8iLCJub25lIiwibm9ybWFsaXplIiwibm90IiwibnRoX3ZhbHVlIiwibnRpbGUiLCJudWxsIiwibnVsbGlmIiwibnVtZXJpYyIsIm9jdGV0X2xlbmd0aCIsIm9jY3VycmVuY2VzX3JlZ2V4Iiwib2YiLCJvZmZzZXQiLCJvbGQiLCJvbWl0Iiwib24iLCJvbmUiLCJvbmx5Iiwib3BlbiIsIm9yIiwib3JkZXIiLCJvdXQiLCJvdXRlciIsIm92ZXIiLCJvdmVybGFwcyIsIm92ZXJsYXkiLCJwYXJhbWV0ZXIiLCJwYXJ0aXRpb24iLCJwYXR0ZXJuIiwicGVyIiwicGVyY2VudCIsInBlcmNlbnRfcmFuayIsInBlcmNlbnRpbGVfY29udCIsInBlcmNlbnRpbGVfZGlzYyIsInBlcmlvZCIsInBvcnRpb24iLCJwb3NpdGlvbiIsInBvc2l0aW9uX3JlZ2V4IiwicG93ZXIiLCJwcmVjZWRlcyIsInByZWNpc2lvbiIsInByZXBhcmUiLCJwcmltYXJ5IiwicHJvY2VkdXJlIiwicHRmIiwicmFuZ2UiLCJyYW5rIiwicmVhZHMiLCJyZWFsIiwicmVjdXJzaXZlIiwicmVmIiwicmVmZXJlbmNlcyIsInJlZmVyZW5jaW5nIiwicmVncl9hdmd4IiwicmVncl9hdmd5IiwicmVncl9jb3VudCIsInJlZ3JfaW50ZXJjZXB0IiwicmVncl9yMiIsInJlZ3Jfc2xvcGUiLCJyZWdyX3N4eCIsInJlZ3Jfc3h5IiwicmVncl9zeXkiLCJyZWxlYXNlIiwicmVzdWx0IiwicmV0dXJuIiwicmV0dXJucyIsInJldm9rZSIsInJpZ2h0Iiwicm9sbGJhY2siLCJyb2xsdXAiLCJyb3ciLCJyb3dfbnVtYmVyIiwicm93cyIsInJ1bm5pbmciLCJzYXZlcG9pbnQiLCJzY29wZSIsInNjcm9sbCIsInNlYXJjaCIsInNlY29uZCIsInNlZWsiLCJzZWxlY3QiLCJzZW5zaXRpdmUiLCJzZXNzaW9uX3VzZXIiLCJzZXQiLCJzaG93Iiwic2ltaWxhciIsInNpbiIsInNpbmgiLCJza2lwIiwic21hbGxpbnQiLCJzb21lIiwic3BlY2lmaWMiLCJzcGVjaWZpY3R5cGUiLCJzcWwiLCJzcWxleGNlcHRpb24iLCJzcWxzdGF0ZSIsInNxbHdhcm5pbmciLCJzcXJ0Iiwic3RhcnQiLCJzdGF0aWMiLCJzdGRkZXZfcG9wIiwic3RkZGV2X3NhbXAiLCJzdWJtdWx0aXNldCIsInN1YnNldCIsInN1YnN0cmluZyIsInN1YnN0cmluZ19yZWdleCIsInN1Y2NlZWRzIiwic3VtIiwic3ltbWV0cmljIiwic3lzdGVtIiwic3lzdGVtX3RpbWUiLCJzeXN0ZW1fdXNlciIsInRhYmxlIiwidGFibGVzYW1wbGUiLCJ0YW4iLCJ0YW5oIiwidGhlbiIsInRpbWUiLCJ0aW1lc3RhbXAiLCJ0aW1lem9uZV9ob3VyIiwidGltZXpvbmVfbWludXRlIiwidG8iLCJ0cmFpbGluZyIsInRyYW5zbGF0ZSIsInRyYW5zbGF0ZV9yZWdleCIsInRyYW5zbGF0aW9uIiwidHJlYXQiLCJ0cmlnZ2VyIiwidHJpbSIsInRyaW1fYXJyYXkiLCJ0cnVlIiwidHJ1bmNhdGUiLCJ1ZXNjYXBlIiwidW5pb24iLCJ1bmlxdWUiLCJ1bmtub3duIiwidW5uZXN0IiwidXBkYXRlIiwidXBwZXIiLCJ1c2VyIiwidXNpbmciLCJ2YWx1ZSIsInZhbHVlcyIsInZhbHVlX29mIiwidmFyX3BvcCIsInZhcl9zYW1wIiwidmFyYmluYXJ5IiwidmFyY2hhciIsInZhcnlpbmciLCJ2ZXJzaW9uaW5nIiwid2hlbiIsIndoZW5ldmVyIiwid2hlcmUiLCJ3aWR0aF9idWNrZXQiLCJ3aW5kb3ciLCJ3aXRoIiwid2l0aGluIiwid2l0aG91dCIsInllYXIiXSx3PVsiYWJzIiwiYWNvcyIsImFycmF5X2FnZyIsImFzaW4iLCJhdGFuIiwiYXZnIiwiY2FzdCIsImNlaWwiLCJjZWlsaW5nIiwiY29hbGVzY2UiLCJjb3JyIiwiY29zIiwiY29zaCIsImNvdW50IiwiY292YXJfcG9wIiwiY292YXJfc2FtcCIsImN1bWVfZGlzdCIsImRlbnNlX3JhbmsiLCJkZXJlZiIsImVsZW1lbnQiLCJleHAiLCJleHRyYWN0IiwiZmlyc3RfdmFsdWUiLCJmbG9vciIsImpzb25fYXJyYXkiLCJqc29uX2FycmF5YWdnIiwianNvbl9leGlzdHMiLCJqc29uX29iamVjdCIsImpzb25fb2JqZWN0YWdnIiwianNvbl9xdWVyeSIsImpzb25fdGFibGUiLCJqc29uX3RhYmxlX3ByaW1pdGl2ZSIsImpzb25fdmFsdWUiLCJsYWciLCJsYXN0X3ZhbHVlIiwibGVhZCIsImxpc3RhZ2ciLCJsbiIsImxvZyIsImxvZzEwIiwibG93ZXIiLCJtYXgiLCJtaW4iLCJtb2QiLCJudGhfdmFsdWUiLCJudGlsZSIsIm51bGxpZiIsInBlcmNlbnRfcmFuayIsInBlcmNlbnRpbGVfY29udCIsInBlcmNlbnRpbGVfZGlzYyIsInBvc2l0aW9uIiwicG9zaXRpb25fcmVnZXgiLCJwb3dlciIsInJhbmsiLCJyZWdyX2F2Z3giLCJyZWdyX2F2Z3kiLCJyZWdyX2NvdW50IiwicmVncl9pbnRlcmNlcHQiLCJyZWdyX3IyIiwicmVncl9zbG9wZSIsInJlZ3Jfc3h4IiwicmVncl9zeHkiLCJyZWdyX3N5eSIsInJvd19udW1iZXIiLCJzaW4iLCJzaW5oIiwic3FydCIsInN0ZGRldl9wb3AiLCJzdGRkZXZfc2FtcCIsInN1YnN0cmluZyIsInN1YnN0cmluZ19yZWdleCIsInN1bSIsInRhbiIsInRhbmgiLCJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVfcmVnZXgiLCJ0cmVhdCIsInRyaW0iLCJ0cmltX2FycmF5IiwidW5uZXN0IiwidXBwZXIiLCJ2YWx1ZV9vZiIsInZhcl9wb3AiLCJ2YXJfc2FtcCIsIndpZHRoX2J1Y2tldCJdLEM9WyJjdXJyZW50X2NhdGFsb2ciLCJjdXJyZW50X2RhdGUiLCJjdXJyZW50X2RlZmF1bHRfdHJhbnNmb3JtX2dyb3VwIiwiY3VycmVudF9wYXRoIiwiY3VycmVudF9yb2xlIiwiY3VycmVudF9zY2hlbWEiLCJjdXJyZW50X3RyYW5zZm9ybV9ncm91cF9mb3JfdHlwZSIsImN1cnJlbnRfdXNlciIsInNlc3Npb25fdXNlciIsInN5c3RlbV90aW1lIiwic3lzdGVtX3VzZXIiLCJjdXJyZW50X3RpbWUiLCJsb2NhbHRpbWUiLCJjdXJyZW50X3RpbWVzdGFtcCIsImxvY2FsdGltZXN0YW1wIl0sST1bImNyZWF0ZSB0YWJsZSIsImluc2VydCBpbnRvIiwicHJpbWFyeSBrZXkiLCJmb3JlaWduIGtleSIsIm5vdCBudWxsIiwiYWx0ZXIgdGFibGUiLCJhZGQgY29uc3RyYWludCIsImdyb3VwaW5nIHNldHMiLCJvbiBvdmVyZmxvdyIsImNoYXJhY3RlciBzZXQiLCJyZXNwZWN0IG51bGxzIiwiaWdub3JlIG51bGxzIiwibnVsbHMgZmlyc3QiLCJudWxscyBsYXN0IiwiZGVwdGggZmlyc3QiLCJicmVhZHRoIGZpcnN0Il0sTT13LEc9Wy4uLnUsLi4uY10uZmlsdGVyKGw9PiF3LmluY2x1ZGVzKGwpKSxMPXtzY29wZToidmFyaWFibGUiLG1hdGNoOi9AW2EtejAtOV1bYS16MC05X10qL30scD17c2NvcGU6Im9wZXJhdG9yIixtYXRjaDovWy0rKi89JV5+XXwmJj98XHxcfD98IT0/fDwoPzo9Pj98PHw+KT98Pls+PV0/LyxyZWxldmFuY2U6MH0sUz17bWF0Y2g6dC5jb25jYXQoL1xiLyx0LmVpdGhlciguLi5NKSwvXHMqXCgvKSxyZWxldmFuY2U6MCxrZXl3b3Jkczp7YnVpbHRfaW46TX19O2Z1bmN0aW9uIGsobCl7cmV0dXJuIHQuY29uY2F0KC9cYi8sdC5laXRoZXIoLi4ubC5tYXAoRT0+RS5yZXBsYWNlKC9ccysvLCJcXHMrIikpKSwvXGIvKX1sZXQgeT17c2NvcGU6ImtleXdvcmQiLG1hdGNoOmsoSSkscmVsZXZhbmNlOjB9O2Z1bmN0aW9uIG0obCx7ZXhjZXB0aW9uczpFLHdoZW46VH09e30pe2xldCBBPVQ7cmV0dXJuIEU9RXx8W10sbC5tYXAoej0+ei5tYXRjaCgvXHxcZCskLyl8fEUuaW5jbHVkZXMoeik/ejpBKHopP2Ake3p9fDBgOnopfXJldHVybntuYW1lOiJTUUwiLGNhc2VfaW5zZW5zaXRpdmU6ITAsaWxsZWdhbDovW3t9XXw8XC8vLGtleXdvcmRzOnskcGF0dGVybjovXGJbXHdcLl0rLyxrZXl3b3JkOm0oRyx7d2hlbjpsPT5sLmxlbmd0aDwzfSksbGl0ZXJhbDpnLHR5cGU6aSxidWlsdF9pbjpDfSxjb250YWluczpbe3Njb3BlOiJ0eXBlIixtYXRjaDprKG8pfSx5LFMsTCxyLHMsZS5DX05VTUJFUl9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsbixwXX19ZnVuY3Rpb24gc24oZSl7bGV0IHQ9InRydWUgZmFsc2UgeWVzIG5vIG51bGwiLG49IltcXHcjOy8/OkAmPSskLC5+KicoKVtcXF1dKyIscj17Y2xhc3NOYW1lOiJhdHRyIix2YXJpYW50czpbe2JlZ2luOi9bXHcqQF1bXHcqQCA6KClcLi8tXSo6KD89WyBcdF18JCkvfSx7YmVnaW46LyJbXHcqQF1bXHcqQCA6KClcLi8tXSoiOig/PVsgXHRdfCQpL30se2JlZ2luOi8nW1x3KkBdW1x3KkAgOigpXC4vLV0qJzooPz1bIFx0XXwkKS99XX0scz17Y2xhc3NOYW1lOiJ0ZW1wbGF0ZS12YXJpYWJsZSIsdmFyaWFudHM6W3tiZWdpbjovXHtcey8sZW5kOi9cfVx9L30se2JlZ2luOi8lXHsvLGVuZDovXH0vfV19LGc9e2NsYXNzTmFtZToic3RyaW5nIixyZWxldmFuY2U6MCxiZWdpbjovJy8sZW5kOi8nLyxjb250YWluczpbe21hdGNoOi8nJy8sc2NvcGU6ImNoYXIuZXNjYXBlIixyZWxldmFuY2U6MH1dfSxvPXtjbGFzc05hbWU6InN0cmluZyIscmVsZXZhbmNlOjAsdmFyaWFudHM6W3tiZWdpbjovIi8sZW5kOi8iL30se2JlZ2luOi9cUysvfV0sY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxzXX0saT1lLmluaGVyaXQobyx7dmFyaWFudHM6W3tiZWdpbjovJy8sZW5kOi8nLyxjb250YWluczpbe2JlZ2luOi8nJy8scmVsZXZhbmNlOjB9XX0se2JlZ2luOi8iLyxlbmQ6LyIvfSx7YmVnaW46L1teXHMse31bXF1dKy99XX0pLEk9e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxiIisiWzAtOV17NH0oLVswLTldWzAtOV0pezAsMn0iKyIoW1R0IFxcdF1bMC05XVswLTldPyg6WzAtOV1bMC05XSl7Mn0pPyIrIihcXC5bMC05XSopPyIrIihbIFxcdF0pKihafFstK11bMC05XVswLTldPyg6WzAtOV1bMC05XSk/KT8iKyJcXGIifSxNPXtlbmQ6IiwiLGVuZHNXaXRoUGFyZW50OiEwLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6dCxyZWxldmFuY2U6MH0sRz17YmVnaW46L1x7LyxlbmQ6L1x9Lyxjb250YWluczpbTV0saWxsZWdhbDoiXFxuIixyZWxldmFuY2U6MH0sTD17YmVnaW46IlxcWyIsZW5kOiJcXF0iLGNvbnRhaW5zOltNXSxpbGxlZ2FsOiJcXG4iLHJlbGV2YW5jZTowfSxwPVtyLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeLS0tXFxzKiQiLHJlbGV2YW5jZToxMH0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiW1xcfD5dKFsxLTldP1srLV0pP1sgXSpcXG4oICspW14gXVteXFxuXSpcXG4oXFwyW15cXG5dK1xcbj8pKiJ9LHtiZWdpbjoiPCVbJT0tXT8iLGVuZDoiWyUtXT8lPiIsc3ViTGFuZ3VhZ2U6InJ1YnkiLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiIVxcdyshIitufSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiITwiK24rIj4ifSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiISIrbn0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46IiEhIitufSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiJiIrZS5VTkRFUlNDT1JFX0lERU5UX1JFKyIkIn0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IlxcKiIrZS5VTkRFUlNDT1JFX0lERU5UX1JFKyIkIn0se2NsYXNzTmFtZToiYnVsbGV0IixiZWdpbjoiLSg/PVsgXXwkKSIscmVsZXZhbmNlOjB9LGUuSEFTSF9DT01NRU5UX01PREUse2JlZ2luS2V5d29yZHM6dCxrZXl3b3Jkczp7bGl0ZXJhbDp0fX0sSSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOmUuQ19OVU1CRVJfUkUrIlxcYiIscmVsZXZhbmNlOjB9LEcsTCxnLG9dLFM9Wy4uLnBdO3JldHVybiBTLnBvcCgpLFMucHVzaChpKSxNLmNvbnRhaW5zPVMse25hbWU6IllBTUwiLGNhc2VfaW5zZW5zaXRpdmU6ITAsYWxpYXNlczpbInltbCJdLGNvbnRhaW5zOnB9fWZ1bmN0aW9uIGNuKGUpe2xldCB0PWUucmVnZXgsbj17YmVnaW46LzxcLz9bQS1aYS16X10vLGVuZDoiPiIsc3ViTGFuZ3VhZ2U6InhtbCIscmVsZXZhbmNlOjB9LHI9e21hdGNoOi9eIHswLDN9KFstKl9dKVsgXHRdKig/OlwxWyBcdF0qKXsyLH0kL30scz17Y2xhc3NOYW1lOiJjb2RlIix2YXJpYW50czpbe2JlZ2luOiIoYHszLH0pW15gXSgufFxcbikqP1xcMWAqWyBdKiJ9LHtiZWdpbjoiKH57Myx9KVtefl0oLnxcXG4pKj9cXDF+KlsgXSoifSx7YmVnaW46ImBgYCIsZW5kOiJgYGArWyBdKiQifSx7YmVnaW46In5+fiIsZW5kOiJ+fn4rWyBdKiQifSx7YmVnaW46ImAuKz9gIn0se2JlZ2luOiIoPz1eKCB7NH18XFx0KSkiLGNvbnRhaW5zOlt7YmVnaW46Il4oIHs0fXxcXHQpIixlbmQ6IihcXG4pJCJ9XSxyZWxldmFuY2U6MH1dfSxnPXtjbGFzc05hbWU6ImJ1bGxldCIsYmVnaW46Il5bIAldKihbKistXXwoXFxkK1xcLikpKD89XFxzKykiLGVuZDoiXFxzKyIsZXhjbHVkZUVuZDohMH0sbz17YmVnaW46L15cW1teXG5dK1xdOi8scmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3tjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46L1xbLyxlbmQ6L1xdLyxleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMH0se2NsYXNzTmFtZToibGluayIsYmVnaW46LzpccyovLGVuZDovJC8sZXhjbHVkZUJlZ2luOiEwfV19LGk9L1tBLVphLXpdW0EtWmEtejAtOSsuLV0qLyxjPXt2YXJpYW50czpbe2JlZ2luOi9cWy4rP1xdXFsuKj9cXS8scmVsZXZhbmNlOjB9LHtiZWdpbjovXFsuKz9cXVwoKChkYXRhfGphdmFzY3JpcHR8bWFpbHRvKTp8KD86aHR0cHxmdHApcz86XC9cLykuKj9cKS8scmVsZXZhbmNlOjJ9LHtiZWdpbjp0LmNvbmNhdCgvXFsuKz9cXVwoLyxpLC86XC9cLy4qP1wpLykscmVsZXZhbmNlOjJ9LHtiZWdpbjovXFsuKz9cXVwoWy4vPyYjXS4qP1wpLyxyZWxldmFuY2U6MX0se2JlZ2luOi9cWy4qP1xdXCguKj9cKS8scmVsZXZhbmNlOjB9XSxyZXR1cm5CZWdpbjohMCxjb250YWluczpbe21hdGNoOi9cWyg/PVxdKS99LHtjbGFzc05hbWU6InN0cmluZyIscmVsZXZhbmNlOjAsYmVnaW46IlxcWyIsZW5kOiJcXF0iLGV4Y2x1ZGVCZWdpbjohMCxyZXR1cm5FbmQ6ITB9LHtjbGFzc05hbWU6ImxpbmsiLHJlbGV2YW5jZTowLGJlZ2luOiJcXF1cXCgiLGVuZDoiXFwpIixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMH0se2NsYXNzTmFtZToic3ltYm9sIixyZWxldmFuY2U6MCxiZWdpbjoiXFxdXFxbIixlbmQ6IlxcXSIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9XX0sdT17Y2xhc3NOYW1lOiJzdHJvbmciLGNvbnRhaW5zOltdLHZhcmlhbnRzOlt7YmVnaW46L197Mn0oPyFccykvLGVuZDovX3syfS99LHtiZWdpbjovXCp7Mn0oPyFccykvLGVuZDovXCp7Mn0vfV19LHc9e2NsYXNzTmFtZToiZW1waGFzaXMiLGNvbnRhaW5zOltdLHZhcmlhbnRzOlt7YmVnaW46L1wqKD8hWypcc10pLyxlbmQ6L1wqL30se2JlZ2luOi9fKD8hW19cc10pLyxlbmQ6L18vLHJlbGV2YW5jZTowfV19LEM9ZS5pbmhlcml0KHUse2NvbnRhaW5zOltdfSksST1lLmluaGVyaXQodyx7Y29udGFpbnM6W119KTt1LmNvbnRhaW5zLnB1c2goSSksdy5jb250YWlucy5wdXNoKEMpO2xldCBNPVtuLGNdO3JldHVyblt1LHcsQyxJXS5mb3JFYWNoKFM9PntTLmNvbnRhaW5zPVMuY29udGFpbnMuY29uY2F0KE0pfSksTT1NLmNvbmNhdCh1LHcpLHtuYW1lOiJNYXJrZG93biIsYWxpYXNlczpbIm1kIiwibWtkb3duIiwibWtkIl0sY29udGFpbnM6W3tjbGFzc05hbWU6InNlY3Rpb24iLHZhcmlhbnRzOlt7YmVnaW46Il4jezEsNn0iLGVuZDoiJCIsY29udGFpbnM6TX0se2JlZ2luOiIoPz1eLis/XFxuWz0tXXsyLH0kKSIsY29udGFpbnM6W3tiZWdpbjoiXls9LV0qJCJ9LHtiZWdpbjoiXiIsZW5kOiJcXG4iLGNvbnRhaW5zOk19XX1dfSxuLGcscix1LHcse2NsYXNzTmFtZToicXVvdGUiLGJlZ2luOiJePlxccysiLGNvbnRhaW5zOk0sZW5kOiIkIn0scyxjLG8se3Njb3BlOiJsaXRlcmFsIixtYXRjaDovJihbYS16QS1aMC05XSt8I1swLTldezEsN318I1tYeF1bMC05YS1mQS1GXXsxLDZ9KTsvfV19fWZ1bmN0aW9uIGxuKGUpe2xldCB0PWUucmVnZXg7cmV0dXJue25hbWU6IkRpZmYiLGFsaWFzZXM6WyJwYXRjaCJdLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixyZWxldmFuY2U6MTAsbWF0Y2g6dC5laXRoZXIoL15AQCArLVxkKyxcZCsgK1wrXGQrLFxkKyArQEAvLC9eQEAgKy1cZCsgK1wrXGQrLFxkKyArQEAvLC9eQEAgKy1cZCssXGQrICtcK1xkKyArQEAvLC9eQEAgKy1cZCsgK1wrXGQrICtAQC8sL15cKlwqXCogK1xkKyxcZCsgK1wqXCpcKlwqJC8sL14tLS0gK1xkKyxcZCsgKy0tLS0kLyl9LHtjbGFzc05hbWU6ImNvbW1lbnQiLHZhcmlhbnRzOlt7YmVnaW46dC5laXRoZXIoL0luZGV4OiAvLC9eaW5kZXgvLC89ezMsfS8sL14tezN9LywvXlwqezN9IC8sL15cK3szfS8sL15kaWZmIC0tZ2l0LyksZW5kOi8kL30se21hdGNoOi9eXCp7MTV9JC99XX0se2NsYXNzTmFtZToiYWRkaXRpb24iLGJlZ2luOi9eXCsvLGVuZDovJC99LHtjbGFzc05hbWU6ImRlbGV0aW9uIixiZWdpbjovXi0vLGVuZDovJC99LHtjbGFzc05hbWU6ImFkZGl0aW9uIixiZWdpbjovXiEvLGVuZDovJC99XX19dmFyIFhyPTJlNCxZcj0yNWU0LG50PTNlNCx0dD0vKD86Wy0rXT8oPzowW3hYXVthLWZBLUYwLTldK3woPzpcZCtcLj9cZCp8XC5cZCspKD86W2VFXVstK10/XGQrKT8pfFtBLVphLXpfJF1bXHckXSopL3k7ZnVuY3Rpb24gVnIoZSl7bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoOyl7bGV0IHI9ZVtuXTtpZihyPT09IiAifHxyPT09IgkifHxyPT09YApgfHxyPT09IlxyIil7bisrO2NvbnRpbnVlfWlmKCsrdD5udClyZXR1cm4hMTtpZihyPT09JyInfHxyPT09IiciKWZvcihuKys7bjxlLmxlbmd0aDspe2xldCBzPWVbbisrXTtpZihzPT09IlxcIil7aWYoKyt0Pm50KXJldHVybiExO24rK31lbHNlIGlmKHM9PT1yfHxzPT09YApgfHxzPT09IlxyIilicmVha31lbHNlIGlmKHI9PT0iLyImJmVbbisxXT09PSIvIilmb3Iobis9MjtuPGUubGVuZ3RoJiZlW25dIT09YApgJiZlW25dIT09IlxyIjspbisrO2Vsc2UgaWYocj09PSIvIiYmZVtuKzFdPT09IioiKXtmb3Iobis9MjtuPGUubGVuZ3RoJiYhKGVbbl09PT0iKiImJmVbbisxXT09PSIvIik7KW4rKztuKz0yfWVsc2UgdHQubGFzdEluZGV4PW4sbj10dC5leGVjKGUpP3R0Lmxhc3RJbmRleDpuKzF9cmV0dXJuITB9ZnVuY3Rpb24gZG4oKXtsZXQgZT16dC5uZXdJbnN0YW5jZSgpO2UuY29uZmlndXJlKHtjbGFzc1ByZWZpeDoiZWQtY29kZS1ibG9ja19faGwtIn0pO2ZvcihsZXRbdCxuXW9mIE9iamVjdC5lbnRyaWVzKHt4bWw6UHQsY3NzOkh0LHNjc3M6b24samF2YXNjcmlwdDpadCxwaHA6anQsanNvbjpXdCx5YW1sOnNuLHNxbDphbixiYXNoOnF0LHR5cGVzY3JpcHQ6bm4sbWFya2Rvd246Y24sZGlmZjpsbixncmFwaHFsOnJufSkpZS5yZWdpc3Rlckxhbmd1YWdlKHQsbik7cmV0dXJuIGV9ZnVuY3Rpb24gdW4oZSx0LG4pe2lmKGUubGVuZ3RoPih0PT09Impzb24iP1lyOlhyKXx8dD09PSJwbGFpbnRleHQifHwhV2UuaW5jbHVkZXModCl8fHQ9PT0ianNvbiImJiFWcihlKSlyZXR1cm4gbnVsbDt0cnl7bGV0IHI9bi5oaWdobGlnaHQoZSx7bGFuZ3VhZ2U6dD09PSJodG1sIj8ieG1sIjp0LGlnbm9yZUlsbGVnYWxzOiEwfSkudmFsdWUscz0wO2ZvcihsZXQgZz1yLmluZGV4T2YoIjxzcGFuIik7ZyE9PS0xO2c9ci5pbmRleE9mKCI8c3BhbiIsZys1KSlpZigrK3M+bnQpcmV0dXJuIG51bGw7cmV0dXJuIHJ9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHJ0KGUpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDb2RlIG11c3QgYmUgYSBzdHJpbmcuIik7cmV0dXJuIGUucmVwbGFjZSgvW3t9XS9nLHQ9PiJ7IitKU09OLnN0cmluZ2lmeSh0KSsifSIpfXZhciBpdD0vXHsiW3t9XSJcfS9nLFFyPS9eXHMqXHtccypbQS1aYS16XyRdW1x3JF0qKD86XC5bXHckLV0rKD86XChbXnt9XSpcKSk/fFxbW15cXXt9XSpcXSkrXHMqXH1ccyokLyxvdD1lPT50eXBlb2YgZT09InN0cmluZyImJlFyLnRlc3QoZSksYXQ9ZT0+dHlwZW9mIGU9PSJzdHJpbmciJiYvW3t9XS8udGVzdChlLnJlcGxhY2UoaXQsIiIpKSYmIW90KGUpO2Z1bmN0aW9uIGduKGUpe2xldCB0PVtdLG49MDtmb3IobGV0IHIgb2YgZS5tYXRjaEFsbChpdCkpdC5wdXNoKFtlLnNsaWNlKG4sci5pbmRleCksITFdLFtyWzBdLCEwXSksbj1yLmluZGV4K3JbMF0ubGVuZ3RoO3JldHVybiB0LnB1c2goW2Uuc2xpY2UobiksITFdKSx0fXZhciBwbj1lPT5nbihlKS5tYXAoKFt0LG5dKT0+bj90OnJ0KHQpKS5qb2luKCIiKTtmdW5jdGlvbiBzdChlLHQpe2xldCBuPTAscj0wO2ZvcihsZXRbcyxnXW9mIGduKGUpKXtsZXQgbz1NYXRoLm1pbihzLmxlbmd0aCxNYXRoLm1heCgwLHQtbikpO2lmKHIrPWc/bzpvKzQqKHMuc2xpY2UoMCxvKS5tYXRjaCgvW3t9XS9nKT8ubGVuZ3RoPz8wKSxuKz1zLmxlbmd0aCxuPj10KWJyZWFrfXJldHVybiByfXZhciBmbj1lPT5lLnJlcGxhY2UoaXQsdD0+dFsyXSk7ZnVuY3Rpb24gYm4oZSl7aWYoIWUuaW5jbHVkZXMoInsiKSlyZXR1cm4gZTtsZXQgdD0iIjtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyllW25dPT09IlxcIiYmbisxPGUubGVuZ3RoP3QrPWVbKytuXTplLnN0YXJ0c1dpdGgoJ3sieyJ9JyxuKXx8ZS5zdGFydHNXaXRoKCd7In0ifScsbik/KHQrPWVbbisyXSxuKz00KTp0Kz1lW25dO3JldHVybiB0fWZ1bmN0aW9uIGN0KGUsdCxuPTEpe2xldCByPVtdLHM9bit0LTE7Zm9yKGxldCBvIG9mIFN0cmluZyhlKS5zcGxpdCgiLCIpKXtsZXQgaT0vXihcZCspKD86XHMqLVxzKihcZCspKT8kLy5leGVjKG8udHJpbSgpKTtpZighaSljb250aW51ZTtsZXQgYz1OdW1iZXIoaVsxXSksdT1OdW1iZXIoaVsyXT8/aVsxXSk7IU51bWJlci5pc1NhZmVJbnRlZ2VyKGMpfHwhTnVtYmVyLmlzU2FmZUludGVnZXIodSl8fGM8bnx8dTxjfHx1PnN8fHIucHVzaChbYyx1XSl9ci5zb3J0KChvLGkpPT5vWzBdLWlbMF18fG9bMV0taVsxXSk7bGV0IGc9W107Zm9yKGxldCBvIG9mIHIpe2xldCBpPWdbZy5sZW5ndGgtMV07aSYmb1swXTw9aVsxXSsxP2lbMV09TWF0aC5tYXgoaVsxXSxvWzFdKTpnLnB1c2gobyl9cmV0dXJuIGd9ZnVuY3Rpb24gSnIoZSx0KXtsZXQgbj1bXTtmb3IobGV0W3Isc11vZiBlKXtmb3IobGV0W2csb11vZiB0KWlmKCEobzxyfHxnPnMpJiYoZz5yJiZuLnB1c2goW3IsZy0xXSkscj1vKzEscj5zKSlicmVhaztyPD1zJiZuLnB1c2goW3Isc10pfXJldHVybiBufWZ1bmN0aW9uIG1uKGUsdCx7c2hvd0xpbmVOdW1iZXJzOm49ITEsc3RhcnRMaW5lOnI9MSxoaWdobGlnaHRMaW5lczpzPSIiLGFkZGVkTGluZXM6Zz0iIixyZW1vdmVkTGluZXM6bz0iIn09e30pe2UucmVtb3ZlQXR0cmlidXRlKCJkYXRhLWFubm90YXRlZCIpLGUucmVtb3ZlQXR0cmlidXRlKCJkYXRhLWxpbmUtbnVtYmVycyIpLGUucmVtb3ZlQXR0cmlidXRlKCJkYXRhLWVkLWNvZGUtYmxvY2stZGlmZiIpLGUuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tX2VkLWNvZGUtYmxvY2stbGluZS1udW1iZXItd2lkdGgiKTtsZXQgaT0xO2ZvcihsZXQgbD0wO2w8dC5sZW5ndGg7bCsrKXQuY2hhckNvZGVBdChsKT09PTEwJiZpKys7bGV0IGM9Y3QobyxpLHIpLHU9e3VuYXZhaWxhYmxlOiExLGxpbmVDb3VudDppLGhpZ2hsaWdodGVkOmN0KHMsaSxyKSxhZGRlZDpKcihjdChnLGksciksYykscmVtb3ZlZDpjfSx3PXUuYWRkZWQubGVuZ3RoPjB8fHUucmVtb3ZlZC5sZW5ndGg+MDtpZighbiYmIXUuaGlnaGxpZ2h0ZWQubGVuZ3RoJiYhdylyZXR1cm4gdTtpZihpPjVlMylyZXR1cm57dW5hdmFpbGFibGU6ITAsbGluZUNvdW50OmksaGlnaGxpZ2h0ZWQ6W10sYWRkZWQ6W10scmVtb3ZlZDpbXX07bGV0IEM9ZS5vd25lckRvY3VtZW50LEk9Qy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksTT17aGlnaGxpZ2h0ZWQ6MCxhZGRlZDowLHJlbW92ZWQ6MH0sRz0obCxFKT0+e2xldCBUPXVbbF07Zm9yKDtUW01bbF1dJiZUW01bbF1dWzFdPEU7KU1bbF0rKztyZXR1cm4gVFtNW2xdXT8uWzBdPD1FfSxMPTAscCxTO2Z1bmN0aW9uIGsoKXtMJiZJLmFwcGVuZChDLmNyZWF0ZVRleHROb2RlKGAKYCkpO2xldCBsPXIrTCsrLEU9Qy5jcmVhdGVFbGVtZW50KCJzcGFuIik7RS5jbGFzc05hbWU9ImVkLWNvZGUtYmxvY2tfX2xpbmUiLEUuZGF0YXNldC5saW5lTnVtYmVyPVN0cmluZyhsKSxHKCJoaWdobGlnaHRlZCIsbCkmJihFLmRhdGFzZXQuaGlnaGxpZ2h0ZWQ9InRydWUiKTtsZXQgVD1HKCJyZW1vdmVkIixsKT8icmVtb3ZlZCI6RygiYWRkZWQiLGwpPyJhZGRlZCI6IiI7VCYmRS5zZXRBdHRyaWJ1dGUoImRhdGEtZWQtY29kZS1ibG9jay1jaGFuZ2UiLFQpO2xldCBBPUMuY3JlYXRlRWxlbWVudCgic3BhbiIpO2lmKEEuY2xhc3NOYW1lPSJlZC1jb2RlLWJsb2NrX19saW5lLW51bWJlciIsQS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLEEuZGF0YXNldC5saW5lTnVtYmVyPVN0cmluZyhsKSxBLmhpZGRlbj0hbixFLmFwcGVuZChBKSx3KXtsZXQgej1DLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt6LmNsYXNzTmFtZT0iZWQtY29kZS1ibG9ja19fbGluZS1tYXJrZXIiLHouc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxFLmFwcGVuZCh6KX1wPUMuY3JlYXRlRWxlbWVudCgic3BhbiIpLHAuY2xhc3NOYW1lPSJlZC1jb2RlLWJsb2NrX19saW5lLWNvbnRlbnQiLEUuYXBwZW5kKHApLEkuYXBwZW5kKEUpLFM9bmV3IE1hcChbW2UscF1dKX1mdW5jdGlvbiB5KGwpe2lmKFMuaGFzKGwpKXJldHVybiBTLmdldChsKTtsZXQgRT15KGwucGFyZW50Tm9kZSksVD1sLmNsb25lTm9kZSghMSk7cmV0dXJuIEUuYXBwZW5kKFQpLFMuc2V0KGwsVCksVH1rKCk7bGV0IG09Qy5jcmVhdGVUcmVlV2Fsa2VyKGUsNCk7Zm9yKGxldCBsO2w9bS5uZXh0Tm9kZSgpOyl7bGV0IEU9bC50ZXh0Q29udGVudC5zcGxpdChgCmApO2ZvcihsZXQgVD0wO1Q8RS5sZW5ndGg7VCsrKVQmJmsoKSxFW1RdJiZ5KGwucGFyZW50Tm9kZSkuYXBwZW5kKEMuY3JlYXRlVGV4dE5vZGUoRVtUXSkpfXJldHVybiBlLnJlcGxhY2VDaGlsZHJlbihJKSxlLmRhdGFzZXQuYW5ub3RhdGVkPSJ0cnVlIixlLmRhdGFzZXQubGluZU51bWJlcnM9U3RyaW5nKG4pLHcmJmUuc2V0QXR0cmlidXRlKCJkYXRhLWVkLWNvZGUtYmxvY2stZGlmZiIsInRydWUiKSxlLnN0eWxlLnNldFByb3BlcnR5KCItLV9lZC1jb2RlLWJsb2NrLWxpbmUtbnVtYmVyLXdpZHRoIixTdHJpbmcocitpLTEpLmxlbmd0aCsiY2giKSx1fXZhciBlaT1PYmplY3QuZnJlZXplKHtwbGFpbnRleHQ6InR4dCIsaHRtbDoiaHRtbCIsY3NzOiJjc3MiLHNjc3M6InNjc3MiLGphdmFzY3JpcHQ6ImpzIix0eXBlc2NyaXB0OiJ0cyIscGhwOiJwaHAiLGpzb246Impzb24iLHlhbWw6InlhbWwiLHNxbDoic3FsIixiYXNoOiJzaCIsbWFya2Rvd246Im1kIixkaWZmOiJkaWZmIn0pO2Z1bmN0aW9uIGhuKGUsdCl7bGV0IG49ImNvZGUuIisoZWlbdF0/PyJ0eHQiKSxyPVN0cmluZyhlPz8iIikuc3BsaXQoL1tcXC9dLykucG9wKCkucmVwbGFjZSgvWzw+OiJ8PypcdTAwMDAtXHUwMDFmXHUwMDdmXHUyMDBlXHUyMDBmXHUyMDJhLVx1MjAyZVx1MjA2Ni1cdTIwNjldL2csIi0iKS5yZXBsYWNlKC9eXHMrfFsuXHNdKyQvZywiIik7aWYoIXIpcmV0dXJuIG47L14oPzpjb258cHJufGF1eHxudWx8Y29tWzEtOV18bHB0WzEtOV0pKD86XC58JCkvaS50ZXN0KHIpJiYocj0iY29kZS0iK3IpO2xldCBzPW5ldyBUZXh0RW5jb2RlcixnPTAsbz0iIjtmb3IobGV0IGkgb2Ygcil7bGV0IGM9cy5lbmNvZGUoaSkubGVuZ3RoO2lmKGcrYz4xODApYnJlYWs7bys9aSxnKz1jfXJldHVybiByPW8ucmVwbGFjZSgvWy5cc10rJC9nLCIiKSxyfHxufXZhciB0aT1bImZpbmQiLCJnZXRKc29uIiwic2V0QXR0cmlidXRlIl0sbmk9L15ccypce1xzKig/OltBLVphLXpfJF1bXHckXSooPzpcLltcdyQtXSooPzpcKFtee31dKlwpPyk/fFxbW15cXXt9XSpcXT8pKik/XHMqJC87ZnVuY3Rpb24gcmkoZSl7dHJ5e2lmKCFlfHwhZS5mcmFtZUVsZW1lbnR8fGUucGFyZW50PT09ZXx8IWUucGFyZW50KXJldHVybiBudWxsO2xldCB0PWUucGFyZW50LmV0Y2g7cmV0dXJuIXR8fHR5cGVvZiB0LmNvbXBvbmVudHM/LmdldEpzb24hPSJmdW5jdGlvbiJ8fCF0aS5ldmVyeShuPT50eXBlb2YgdC5ibG9ja3M/LltuXT09ImZ1bmN0aW9uIik/bnVsbDp0fWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBfbihlKXtsZXQgdD1yaShlKTtpZighdClyZXR1cm4gbnVsbDtsZXQgbj1uZXcgTWFwLHI9bmV3IE1hcCxzPTAsZz1udWxsLG89ITEsaT0hMSxjPSgpPT57dHJ5e3JldHVybiBlLnBhcmVudC5kb2N1bWVudH1jYXRjaHtyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIHUoKXtsZXQgeT1uZXcgTWFwO3JldHVybiBtPT57aWYoIXkuaGFzKG0pKXtsZXQgbD0hMTt0cnl7bGV0IEU9dC5jb21wb25lbnRzLmdldEpzb24obSk7bD1TdHJpbmcoRT8uYmxvY2tzPy5bMF0/LmF0dHJpYnV0ZXM/LmNsYXNzPz8iIikuc3BsaXQoL1xzKy8pLmluY2x1ZGVzKCJlZC1jb2RlLWJsb2NrIikmJiEhRS5wcm9wZXJ0aWVzPy5zb21lKEE9PkEua2V5PT09ImNvZGUiKX1jYXRjaHt9eS5zZXQobSxsKX1yZXR1cm4geS5nZXQobSl9fWZ1bmN0aW9uIHcoKXtsZXQgeT11KCksbT1bXTtmb3IobGV0IGwgb2YgdC5ibG9ja3MuZmluZCh7dHlwZToiZXRjaC9jb21wb25lbnQifSkpe2xldCBFPXQuYmxvY2tzLmdldEpzb24obCk7RSYmeShFLmNvbXBvbmVudElkKSYmbS5wdXNoKHtpZDpsLGNvZGU6RS5hdHRyaWJ1dGVzPy5jb2RlfSl9cmV0dXJuIG19ZnVuY3Rpb24gQygpe2xldCB5PWMoKT8uYWN0aXZlRWxlbWVudDtpZigheXx8eS5sb2NhbE5hbWUhPT0idGV4dGFyZWEiJiZ5LmxvY2FsTmFtZSE9PSJpbnB1dCJ8fHkuY2xvc2VzdD8uKCJbZGF0YS1ldGNoLXByb3BlcnR5LWtleV0iKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWV0Y2gtcHJvcGVydHkta2V5IikhPT0iY29kZSIpcmV0dXJuIG51bGw7bGV0IG09dHlwZW9mIHQuYmxvY2tzLmdldFNlbGVjdGVkSWQ9PSJmdW5jdGlvbiI/dC5ibG9ja3MuZ2V0U2VsZWN0ZWRJZCgpOm51bGw7cmV0dXJuIG0/e2lkOm0sZWxlbWVudDp5fTpudWxsfWZ1bmN0aW9uIEkoeSxtLGwsRSxULEEpe2xldCB6PSgpPT5pfHx5LnZhbHVlIT09bD8hMTooeS5zZXRTZWxlY3Rpb25SYW5nZShzdChtLEUpLHN0KG0sVCkpLHkuc2Nyb2xsVG9wPUEsITApO3ooKXx8ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/LigoKT0+e3RyeXt6KCl9Y2F0Y2h7fX0pfWZ1bmN0aW9uIE0oKXtwKCl9ZnVuY3Rpb24gRygpe298fChjKCk/LmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0IixNLCEwKSxvPSEwKX1mdW5jdGlvbiBMKCl7aWYocz0wLCFpKXRyeXtsZXQgeT1DKCksbT0hMTtmb3IobGV0e2lkOmwsY29kZTpFfW9mIHcoKSl7aWYodHlwZW9mIEUhPSJzdHJpbmciKXtuLmRlbGV0ZShsKSxyLmRlbGV0ZShsKTtjb250aW51ZX1pZighYXQoRSkpe24uc2V0KGwsRSksci5kZWxldGUobCk7Y29udGludWV9aWYoci5nZXQobCk9PT1FKWNvbnRpbnVlO2xldCBUPXBuKEUpO2lmKG4uZ2V0KGwpPT09VCl7ci5zZXQobCxFKSxuLnNldChsLEUpO2NvbnRpbnVlfWxldCBBPXk/LmlkPT09bCYmeS5lbGVtZW50LnZhbHVlPT09RT95LmVsZW1lbnQ6bnVsbDtpZihBJiZuaS50ZXN0KEUpKXttPSEwO2NvbnRpbnVlfWxldCB6PUE/W0Euc2VsZWN0aW9uU3RhcnQsQS5zZWxlY3Rpb25FbmQsQS5zY3JvbGxUb3BdOm51bGw7dC5ibG9ja3Muc2V0QXR0cmlidXRlKGwsImNvZGUiLFQpLG4uc2V0KGwsVCksci5kZWxldGUobCkseiYmSShBLEUsVCwuLi56KX1tJiZHKCl9Y2F0Y2h7fX1mdW5jdGlvbiBwKCl7aXx8c3x8KHM9ZS5zZXRUaW1lb3V0KEwsMTAwKSl9ZnVuY3Rpb24gUyh5KXt0cnl7aWYoIWcpe2c9W107Zm9yKGxldHtjb2RlOmx9b2YgdygpKXR5cGVvZiBsPT0ic3RyaW5nIiYmIW90KGwpJiYhYXQobCkmJmcucHVzaChbYm4obCksZm4obCldKTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57Zz1udWxsfSl9bGV0IG09Zy5maWx0ZXIoKFtsXSk9Pmw9PT15KS5tYXAoKFssbF0pPT5sKTtyZXR1cm4gbS5sZW5ndGgmJm0uZXZlcnkobD0+bD09PW1bMF0pP21bMF06eX1jYXRjaHtyZXR1cm4geX19ZnVuY3Rpb24gayh5KXt0cnl7eS50YXJnZXQ/LmNsb3Nlc3Q/LignW2RhdGEtZXRjaC1wcm9wZXJ0eS1rZXk9ImNvZGUiXScpJiZwKCl9Y2F0Y2h7fX10cnl7YygpPy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsaywhMCl9Y2F0Y2h7fXJldHVybntzY2hlZHVsZTpwLHJlc29sdmU6UyxkaXNwb3NlKCl7aT0hMCxzJiZlLmNsZWFyVGltZW91dChzKTt0cnl7YygpPy5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnB1dCIsaywhMCksbyYmYygpPy5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsTSwhMCl9Y2F0Y2h7fX19fXZhciB1ZT0iLmVkLWNvZGUtYmxvY2siLFNlPVN5bWJvbC5mb3IoImV0Y2hkZXZlbG9wZXIuY29kZS1ibG9jay4wLjEuMCIpLEVuPSIxLjAuMC1iZXRhLjIiLHluPSJbZGF0YS1lZC1jb2RlLWJsb2NrLWxhYmVsXSwgLmVkLWNvZGUtYmxvY2tfX3RpdGxlLCAuZWQtY29kZS1ibG9ja19fZmlsZS1uYW1lLCAuZWQtY29kZS1ibG9ja19fbGFuZ3VhZ2UsIC5lZC1jb2RlLWJsb2NrX19jYXB0aW9uIixsdD1bIi5lZC1jb2RlLWJsb2NrX19zdGF0dXMiLCIuZWQtY29kZS1ibG9ja19fcHJlcGFyZSIsIi5lZC1jb2RlLWJsb2NrX19wcmVwYXJlLWlucHV0IiwiLmVkLWNvZGUtYmxvY2tfX3ByZXBhcmUtb3V0cHV0IiwiLmVkLWNvZGUtYmxvY2tfX3ByZXBhcmUtY29weSIsIi5lZC1jb2RlLWJsb2NrX19wcmVwYXJlLXN0YXR1cyIsIi5lZC1jb2RlLWJsb2NrX19wcmVwYXJlLWhlbHAiLCIuZWQtY29kZS1ibG9ja19fZG93bmxvYWQiXSxpaT0yZTMsb2k9e2NvcHk6WyJNOSA5aDlhMSAxIDAgMCAxIDEgMXY5YTEgMSAwIDAgMS0xIDFIOWExIDEgMCAwIDEtMS0xdi05YTEgMSAwIDAgMSAxLTF6IiwiTTUgMTVINC41QTEuNSAxLjUgMCAwIDEgMyAxMy41di05QTEuNSAxLjUgMCAwIDEgNC41IDNoOUExLjUgMS41IDAgMCAxIDE1IDQuNVY1Il0sZG9uZTpbIk01IDEyLjVsNC41IDQuNUwxOSA3LjUiXSxkb3dubG9hZDpbIk0xMiA0djExIiwiTTcuNSAxMC41TDEyIDE1bDQuNS00LjUiLCJNNSAxOS41aDE0Il0sd3JhcDpbIk00IDZoMTYiLCJNNCAxMmgxMi41YTMuNSAzLjUgMCAwIDEgMCA3SDEzIiwiTTE1IDE3bC0yIDIgMiAyIiwiTTQgMThoNSJdLGV4cGFuZDpbIk04IDlsNC00IDQgNCIsIk04IDE1bDQgNCA0LTQiXSxjb2xsYXBzZTpbIk04IDVsNCA0IDQtNCIsIk04IDE5bDQtNCA0IDQiXX07ZnVuY3Rpb24gdm4oZT13aW5kb3csdD1kbil7aWYoZVtTZV0/LnZlcnNpb249PT1FbilyZXR1cm4gZVtTZV0uc2NhbihlLmRvY3VtZW50KSxlW1NlXTtlW1NlXT8uZGlzcG9zZSgpO2xldCBuPWUuZG9jdW1lbnQscj1uZXcgTWFwLHM7dHJ5e3M9dCgpfWNhdGNoe31sZXQgZz1fbihlKSxvPTAsaT0hMSxjPShwLFMpPT5bLi4ucC5xdWVyeVNlbGVjdG9yQWxsKFMpXS5maWx0ZXIoaz0+ay5jbG9zZXN0KHVlKT09PXApLHU9KHAsUyk9PntwJiZwLnRleHRDb250ZW50IT09UyYmKHAudGV4dENvbnRlbnQ9Uyl9O2Z1bmN0aW9uIHcocCl7bGV0IFM9bi5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7Zm9yKGxldFtrLHldb2YgT2JqZWN0LmVudHJpZXMoe2NsYXNzOiJlZC1jb2RlLWJsb2NrX19pY29uIix2aWV3Qm94OiIwIDAgMjQgMjQiLCJhcmlhLWhpZGRlbiI6InRydWUiLGZvY3VzYWJsZToiZmFsc2UifSkpUy5zZXRBdHRyaWJ1dGUoayx5KTtmb3IobGV0IGsgb2Ygb2lbcF0pe2xldCB5PW4uY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt5LnNldEF0dHJpYnV0ZSgiZCIsayksUy5hcHBlbmQoeSl9cmV0dXJuIFN9ZnVuY3Rpb24gQyhwLFMpe2lmKHIuaGFzKHApfHwhcC5pc0Nvbm5lY3RlZClyZXR1cm47bGV0IGs9YyhwLCIuZWQtY29kZS1ibG9ja19fc291cmNlIilbMF0seT1rPy5xdWVyeVNlbGVjdG9yKCJjb2RlIiksbT1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoe2NvcHk6Ii5lZC1jb2RlLWJsb2NrX19jb3B5Iix3cmFwOiIuZWQtY29kZS1ibG9ja19fd3JhcCIsZXhwYW5kOiIuZWQtY29kZS1ibG9ja19fZXhwYW5kIn0pLm1hcCgoW2Qsdl0pPT5bZCxjKHAsdilbMF1dKSksW2wsRSxULEEseixKLHRlLGVlXT1sdC5tYXAoZD0+YyhwLGQpWzBdKTtpZigheXx8IWx8fE9iamVjdC52YWx1ZXMobSkuc29tZShkPT4hZCkpcmV0dXJuO2MocCwiLmVkLWNvZGUtYmxvY2tfX3ZpZXcsIC5lZC1jb2RlLWJsb2NrX19hbm5vdGF0aW9ucywgLmVkLWNvZGUtYmxvY2tfX2ZhZGUiKS5mb3JFYWNoKGQ9PmQucmVtb3ZlKCkpO2xldCBLPW5ldyBlLkFib3J0Q29udHJvbGxlcix4PW4uY3JlYXRlRWxlbWVudCgicHJlIik7eC5jbGFzc05hbWU9ImVkLWNvZGUtYmxvY2tfX3ZpZXciLHgudGFiSW5kZXg9MCx4LnNldEF0dHJpYnV0ZSgicm9sZSIsImdyb3VwIik7ZG8geC5pZD0iZWQtY29kZS1ibG9jay1wYW5lbC0iKyArK287d2hpbGUobi5nZXRFbGVtZW50QnlJZCh4LmlkKSk7bGV0IEg9bi5jcmVhdGVFbGVtZW50KCJjb2RlIiksYT1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuY2xhc3NOYW1lPSJlZC1jb2RlLWJsb2NrX19mYWRlIixhLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksYS5oaWRkZW49ITA7bGV0IF89bi5jcmVhdGVFbGVtZW50KCJzcGFuIik7Xy5jbGFzc05hbWU9ImVkLWNvZGUtYmxvY2tfX2Fubm90YXRpb25zIixfLmlkPXguaWQrIi1hbm5vdGF0aW9ucyIsXy5oaWRkZW49ITAseC5hcHBlbmQoSCksay5hZnRlcih4LGEsXyk7bGV0IGI9IiIsaCxCLFUsRixxPSExLFY9ITEsUT0wLGdlPTAsc2U9MCxoZSxNZSxrZSxSZSxfZT1bXSxvZT17dW5hdmFpbGFibGU6ITEsaGlnaGxpZ2h0ZWQ6W10sYWRkZWQ6W10scmVtb3ZlZDpbXX0scGU9MCxuZT0hMSxFZSxsZT1uZXcgTWFwLE89bmV3IE1hcCxqPWQ9PkJbZF0sWD0oKT0+T2JqZWN0LmtleXMoQWUpLm1hcChkPT5wLmdldEF0dHJpYnV0ZShVZShkKSkpLmpvaW4oIlwwIik7ZnVuY3Rpb24gUChkLHYpe2xldCBEPU8uZ2V0KGQpO2lmKCFEfHxELmxhYmVsLnBhcmVudE5vZGUhPT1kfHxELmZlZWRiYWNrLnBhcmVudE5vZGUhPT1kKXtsZXQgaWU9bi5jcmVhdGVFbGVtZW50KCJzcGFuIik7aWUuY2xhc3NOYW1lPSJlZC1jb2RlLWJsb2NrX19idXR0b24tbGFiZWwiO2xldCBZPW4uY3JlYXRlRWxlbWVudCgic3BhbiIpO1kuY2xhc3NOYW1lPSJlZC1jb2RlLWJsb2NrX19idXR0b24tZmVlZGJhY2siLFkuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxEPXtsYWJlbDppZSxmZWVkYmFjazpZLGljb246IiJ9LGQucmVwbGFjZUNoaWxkcmVuKGllLFkpLE8uc2V0KGQsRCl9cmV0dXJuIEQuaWNvbiE9PXYmJihkLnF1ZXJ5U2VsZWN0b3IoIjpzY29wZSA+IC5lZC1jb2RlLWJsb2NrX19pY29uIik/LnJlbW92ZSgpLGQucHJlcGVuZCh3KHYpKSxELmljb249diksRH1mdW5jdGlvbiBjZShkLHYsRCl7ZCYmdShQKGQsdikubGFiZWwsRCl9ZnVuY3Rpb24gcmUoKXtzZSYmZS5jbGVhclRpbWVvdXQoc2UpLHNlPTAsbS5jb3B5Lmhhc0F0dHJpYnV0ZSgiZGF0YS1lZC1jb2RlLWJsb2NrLWZlZWRiYWNrIikmJihtLmNvcHkucmVtb3ZlQXR0cmlidXRlKCJkYXRhLWVkLWNvZGUtYmxvY2stZmVlZGJhY2siKSx1KFAobS5jb3B5LCJjb3B5IikuZmVlZGJhY2ssIiIpLFAobS5jb3B5LCJjb3B5IikpLGwuZ2V0QXR0cmlidXRlKCJkYXRhLWVkLWNvZGUtYmxvY2stc3RhdHVzIik9PT0ic3VjY2VzcyImJnUobCwiIiksbC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtZWQtY29kZS1ibG9jay1zdGF0dXMiKX1mdW5jdGlvbiB3ZSgpe3JlKCksdShQKG0uY29weSwiZG9uZSIpLmZlZWRiYWNrLGooImNvcHlTdWNjZXNzIikpLG0uY29weS5zZXRBdHRyaWJ1dGUoImRhdGEtZWQtY29kZS1ibG9jay1mZWVkYmFjayIsIiIpLGwuc2V0QXR0cmlidXRlKCJkYXRhLWVkLWNvZGUtYmxvY2stc3RhdHVzIiwic3VjY2VzcyIpLHUobCxqKCJjb3B5U3VjY2VzcyIpKSxzZT1lLnNldFRpbWVvdXQoKCk9PntzZT0wLCFxJiYobS5jb3B5LnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1lZC1jb2RlLWJsb2NrLWZlZWRiYWNrIiksdShQKG0uY29weSwiY29weSIpLmZlZWRiYWNrLCIiKSxsLmdldEF0dHJpYnV0ZSgiZGF0YS1lZC1jb2RlLWJsb2NrLXN0YXR1cyIpPT09InN1Y2Nlc3MiJiZ1KGwsIiIpLGwucmVtb3ZlQXR0cmlidXRlKCJkYXRhLWVkLWNvZGUtYmxvY2stc3RhdHVzIikpfSxpaSl9ZnVuY3Rpb24geWUoKXtsZXQgZD1ILmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9ZS5nZXRDb21wdXRlZFN0eWxlKHgpO3JldHVybltkLndpZHRoLGQuaGVpZ2h0LHguY2xpZW50V2lkdGgsdi5wYWRkaW5nVG9wLHYucGFkZGluZ0JvdHRvbSx2LnBhZGRpbmdMZWZ0LHYucGFkZGluZ1JpZ2h0LHYubGluZUhlaWdodF0uam9pbigifCIpfWxldCBmPSExO2Z1bmN0aW9uIE4oKXtsZXQgZD1mJiZ4LnNjcm9sbFRvcCt4LmNsaWVudEhlaWdodDx4LnNjcm9sbEhlaWdodC0xO2EuaGlkZGVuPSFkLGQmJihhLnN0eWxlLnNldFByb3BlcnR5KCItLV9lZC1jb2RlLWJsb2NrLXNjcm9sbGJhci1pbmxpbmUiLE1hdGgubWF4KDAseC5vZmZzZXRXaWR0aC14LmNsaWVudFdpZHRoKSsicHgiKSxhLnN0eWxlLnNldFByb3BlcnR5KCItLV9lZC1jb2RlLWJsb2NrLXNjcm9sbGJhci1ibG9jayIsTWF0aC5tYXgoMCx4Lm9mZnNldEhlaWdodC14LmNsaWVudEhlaWdodCkrInB4IikpfWZ1bmN0aW9uIFIoKXtpZihRJiZlLmNhbmNlbEFuaW1hdGlvbkZyYW1lKFEpLFE9MCxxKXJldHVybjtsZXQgZD1lLmdldENvbXB1dGVkU3R5bGUoSCksdj1OdW1iZXIucGFyc2VGbG9hdChkLmxpbmVIZWlnaHQpfHxOdW1iZXIucGFyc2VGbG9hdChkLmZvbnRTaXplKSoxLjUsRD1oLmNvbGxhcHNlZExpbmVzKnYsaWU9SC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsWT1pZT5EKzEsdmU9ZS5nZXRDb21wdXRlZFN0eWxlKHgpLFo9RCsoTnVtYmVyLnBhcnNlRmxvYXQodmUucGFkZGluZ1RvcCl8fDApKyhOdW1iZXIucGFyc2VGbG9hdCh2ZS5wYWRkaW5nQm90dG9tKXx8MCksZmU9TWF0aC5tYXgoMCx4Lm9mZnNldEhlaWdodC14LmNsaWVudEhlaWdodCksRGU9TWF0aC5jZWlsKGllK1otRCtmZSkscHQ9aC5jb2xsYXBzaWJsZSYmWT8oVT9EZTpaKSsicHgiOiJub25lIjt4LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tX2VkLWNvZGUtYmxvY2stbWF4LWhlaWdodCIpIT09cHQmJnguc3R5bGUuc2V0UHJvcGVydHkoIi0tX2VkLWNvZGUtYmxvY2stbWF4LWhlaWdodCIscHQpLG0uZXhwYW5kLmhpZGRlbj0haC5jb2xsYXBzaWJsZXx8IVksbS5leHBhbmQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcoIWguY29sbGFwc2libGV8fFV8fCFZKSksY2UobS5leHBhbmQsVT8iY29sbGFwc2UiOiJleHBhbmQiLGooVT8iY29sbGFwc2UiOiJleHBhbmQiKSksZj1oLmNvbGxhcHNpYmxlJiZZJiYhVSxOKCksUmU9eWUoKX1mdW5jdGlvbiAkKCl7IVEmJiFxJiYoUT1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShSKSl9ZnVuY3Rpb24gVygpe3guZGF0YXNldC53cmFwPVN0cmluZyhGKSxtLndyYXAucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSxtLndyYXAuZGF0YXNldC53cmFwcGVkPVN0cmluZyhGKSxjZShtLndyYXAsIndyYXAiLGooRj8id3JhcE9mZiI6IndyYXBPbiIpKSxSKCl9bGV0IGFlPWQ9PmQuc2xpY2UoMCwyMCkubWFwKChbdixEXSk9PnY9PT1EP1N0cmluZyh2KTp2KyJcdTIwMTMiK0QpLmpvaW4oIiwgIikrKGQubGVuZ3RoPjIwPyIsIFx1MjAyNiI6IiIpO2Z1bmN0aW9uIEtlKCl7bGV0IGQ9b2UudW5hdmFpbGFibGU/aigiYW5ub3RhdGlvbnNVbmF2YWlsYWJsZSIpOltbImhpZ2hsaWdodGVkTGluZXMiLG9lLmhpZ2hsaWdodGVkXSxbImFkZGVkTGluZXMiLG9lLmFkZGVkXSxbInJlbW92ZWRMaW5lcyIsb2UucmVtb3ZlZF1dLmZpbHRlcigoWyx2XSk9PnYubGVuZ3RoKS5tYXAoKFt2LERdKT0+aih2KSsiOiAiK2FlKEQpKS5qb2luKCIuICIpO3UoXyxkKSxfLmhpZGRlbj0hZCxfLmRhdGFzZXQudW5hdmFpbGFibGU9U3RyaW5nKG9lLnVuYXZhaWxhYmxlKSxkP3guc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixfLmlkKTp4LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfWxldCBJZT1kPT5jKHAsZClbMF0/LnRleHRDb250ZW50Pz8iIjtmdW5jdGlvbiBDZSgpe2lmKHEpcmV0dXJuO2g9bXQoT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKEFlKS5tYXAoWj0+W1oscC5nZXRBdHRyaWJ1dGUoVWUoWikpXSkpKSxCPU9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhCZSkubWFwKChbWixmZV0pPT57bGV0IERlPWMocCwnW2RhdGEtZWQtY29kZS1ibG9jay1sYWJlbD0iJytaKyciXScpWzBdPy50ZXh0Q29udGVudDtyZXR1cm5bWixEZT8udHJpbSgpP0RlOmZlXX0pKTtsZXQgZD15LnRleHRDb250ZW50O2I9Zz9nLnJlc29sdmUoZCk6ZCxnPy5zY2hlZHVsZSgpO2xldCB2PVgoKSxEPWIhPT1oZXx8diE9PWtlLGllPVtoLmxhbmd1YWdlLGguc2hvd0xpbmVOdW1iZXJzLGguc3RhcnRMaW5lLGguaGlnaGxpZ2h0TGluZXMsaC5hZGRlZExpbmVzLGgucmVtb3ZlZExpbmVzXS5qb2luKCJcMCIpO2lmKGIhPT1oZXx8aWUhPT1NZSl7SC50ZXh0Q29udGVudD1iO2xldCBaPXVuKGIsaC5sYW5ndWFnZSxzKTtpZihaIT09bnVsbCl0cnl7SC5pbm5lckhUTUw9Wn1jYXRjaHtILnRleHRDb250ZW50PWJ9b2U9bW4oSCxiLGgpLE1lPWllfUQmJihnZSsrLHJlKCksdShsLCIiKSxVPWguaW5pdGlhbFN0YXRlPT09ImV4cGFuZGVkIixGPWgud3JhcExpbmVzKTtsZXQgWT1TPy5zb3VyY2U9PT1iJiZTLmNvbmZpZ3VyYXRpb249PT12P1M6dm9pZCAwO1kmJihVPVkuZXhwYW5kZWQsRj1ZLndyYXBwZWQpLFM9dm9pZCAwLGhlPWIsa2U9dix4LmRhdGFzZXQudGhlbWU9aC50aGVtZSx4LmRhdGFzZXQuc2l6ZT1oLnRleHRTaXplLHguc3R5bGUudGFiU2l6ZT1oLnRhYlNpemUseC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGJ0KEllKCIuZWQtY29kZS1ibG9ja19fdGl0bGUiKSxJZSgiLmVkLWNvZGUtYmxvY2tfX2ZpbGUtbmFtZSIpLGooInJlZ2lvbiIpKSksS2UoKSxjZShtLmNvcHksbS5jb3B5Lmhhc0F0dHJpYnV0ZSgiZGF0YS1lZC1jb2RlLWJsb2NrLWZlZWRiYWNrIik/ImRvbmUiOiJjb3B5IixqKCJjb3B5IikpLG0uY29weS5oaWRkZW49IWguc2hvd0NvcHksbS53cmFwLmhpZGRlbj0haC5zaG93V3JhcFRvZ2dsZSxtLmV4cGFuZC5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLHguaWQpLGVlJiYoY2UoZWUsImRvd25sb2FkIixqKCJkb3dubG9hZCIpKSxlZS5oaWRkZW49IWguc2hvd0Rvd25sb2FkKTtmb3IobGV0IFogb2ZbIi5lZC1jb2RlLWJsb2NrX190aXRsZSIsIi5lZC1jb2RlLWJsb2NrX19maWxlLW5hbWUiLCIuZWQtY29kZS1ibG9ja19fY2FwdGlvbiJdKXtsZXQgZmU9YyhwLFopWzBdO2ZlJiYoZmUuaGlkZGVuPSFmZS50ZXh0Q29udGVudC50cmltKCkpfWxldCB2ZT1jKHAsIi5lZC1jb2RlLWJsb2NrX19sYW5ndWFnZSIpWzBdO2lmKHZlJiYodSh2ZSxoLmxhbmd1YWdlPT09InBsYWludGV4dCI/aigicGxhaW5UZXh0Iik6amVbaC5sYW5ndWFnZV0pLHZlLmhpZGRlbj0haC5zaG93TGFuZ3VhZ2UpLGsuaGlkZGVuPSEwLEUpe0UuaGlkZGVuPSFoLnNob3dDb252ZXJ0ZXIsVCYmKFQuc3R5bGUudGFiU2l6ZT1oLnRhYlNpemUpLEEmJihBLnN0eWxlLnRhYlNpemU9aC50YWJTaXplKTtsZXQgWj1FLnF1ZXJ5U2VsZWN0b3JBbGwoIi5lZC1jb2RlLWJsb2NrX19wcmVwYXJlLWxhYmVsID4gc3BhbiIpO3UoRS5xdWVyeVNlbGVjdG9yKCJsZWdlbmQiKSxqKCJwcmVwYXJlVGl0bGUiKSksdSh0ZSxqKCJwcmVwYXJlSGVscCIpKSx1KFpbMF0saigicHJlcGFyZVNvdXJjZSIpKSx1KFpbMV0saigicHJlcGFyZU91dHB1dCIpKSx1KHosaigicHJlcGFyZUNvcHkiKSl9aWYoVygpLFkpe3guc2Nyb2xsVG9wPVkuc2Nyb2xsVG9wLHguc2Nyb2xsTGVmdD1ZLnNjcm9sbExlZnQsTigpO2xldCBaPXt2aWV3OngsLi4ubSxkb3dubG9hZDplZSxwcmVwYXJlSW5wdXQ6VCxwcmVwYXJlT3V0cHV0OkEscHJlcGFyZUNvcHk6en1bWS5mb2N1c2VkXTtaJiYhWi5oaWRkZW4mJiFaLmNsb3Nlc3QoIltoaWRkZW5dIikmJihaLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksWS5zZWxlY3Rpb24mJnR5cGVvZiBaLnNldFNlbGVjdGlvblJhbmdlPT0iZnVuY3Rpb24iJiZaLnNldFNlbGVjdGlvblJhbmdlKC4uLlkuc2VsZWN0aW9uKSl9fXAuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZD0+e2QudGFyZ2V0LmNsb3Nlc3QodWUpPT09cCYmKEVlPWQudGFyZ2V0KX0se3NpZ25hbDpLLnNpZ25hbH0pLHAuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLGQ9PntkLnJlbGF0ZWRUYXJnZXQmJiFwLmNvbnRhaW5zKGQucmVsYXRlZFRhcmdldCkmJihFZT12b2lkIDApfSx7c2lnbmFsOksuc2lnbmFsfSk7bGV0IGR0PWQ9PmQ/LmNsb3Nlc3Q/LigiLmVkLWNvZGUtYmxvY2tfX2J1dHRvbiIpO2Z1bmN0aW9uIHV0KGQpe2xldCB2PWR0KGQudGFyZ2V0KTtpZighdnx8di5jbG9zZXN0KHVlKSE9PXApcmV0dXJuO2xldCBEPXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaWU9cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2LnNldEF0dHJpYnV0ZSgiZGF0YS1lZC1jb2RlLWJsb2NrLXRpcCIsRC5sZWZ0K0Qud2lkdGgvMjxpZS5sZWZ0K2llLndpZHRoLzI/InN0YXJ0IjoiZW5kIiksdi5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtZWQtY29kZS1ibG9jay10aXAtZGlzbWlzc2VkIil9aWYocC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyb3ZlciIsdXQse3NpZ25hbDpLLnNpZ25hbH0pLHAuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdXQse3NpZ25hbDpLLnNpZ25hbH0pLHAuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZD0+e2xldCB2PWR0KGQudGFyZ2V0KTtkLmtleT09PSJFc2NhcGUiJiZ2JiZ2LmNsb3Nlc3QodWUpPT09cCYmIXYuaGFzQXR0cmlidXRlKCJkYXRhLWVkLWNvZGUtYmxvY2stdGlwLWRpc21pc3NlZCIpJiZ2LnNldEF0dHJpYnV0ZSgiZGF0YS1lZC1jb2RlLWJsb2NrLXRpcC1kaXNtaXNzZWQiLCIiKX0se3NpZ25hbDpLLnNpZ25hbH0pLHguYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixOLHtwYXNzaXZlOiEwLHNpZ25hbDpLLnNpZ25hbH0pLFQmJkEmJnomJkope3RlJiYodGUuaWQ9eC5pZCsiLXByZXBhcmUtaGVscCIsVC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLHRlLmlkKSxBLnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsdGUuaWQpKSxTPy5wcmVwYXJhdGlvblNvdXJjZSE9PXZvaWQgMCYmKFQudmFsdWU9Uy5wcmVwYXJhdGlvblNvdXJjZSk7bGV0IGQ9KCk9PntwZSsrLEEudmFsdWU9cnQoVC52YWx1ZSksdShKLCIiKX07VC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZCx7c2lnbmFsOksuc2lnbmFsfSksei5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsYXN5bmMoKT0+e2lmKG5lKXJldHVybjtuZT0hMCx1KEosIiIpO2xldCB2PXBlO3RyeXtpZighZS5pc1NlY3VyZUNvbnRleHR8fCFlLm5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dCl0aHJvdyBuZXcgRXJyb3IoIkNsaXBib2FyZCB1bmF2YWlsYWJsZSIpO2F3YWl0IGUubmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoQS52YWx1ZSksIXEmJnY9PT1wZSYmdShKLGooInByZXBhcmVTdWNjZXNzIikpfWNhdGNoeyFxJiZ2PT09cGUmJihBLmZvY3VzKCksQS5zZWxlY3QoKSx1KEosaigicHJlcGFyZUVycm9yIikpKX1maW5hbGx5e25lPSExfX0se3NpZ25hbDpLLnNpZ25hbH0pLGQoKX1tLmNvcHkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFzeW5jKCk9PntpZihWKXJldHVybjtWPSEwLHJlKCksdShsLCIiKTtsZXQgZD1nZTt0cnl7aWYoIWUuaXNTZWN1cmVDb250ZXh0fHwhZS5uYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQpdGhyb3cgbmV3IEVycm9yKCJDbGlwYm9hcmQgdW5hdmFpbGFibGUiKTthd2FpdCBlLm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGIpLCFxJiZkPT09Z2UmJndlKCl9Y2F0Y2h7aWYoIXEmJmQ9PT1nZSl7VT0hMCxXKCkseC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pO2xldCB2PWUuZ2V0U2VsZWN0aW9uKCksRD1uLmNyZWF0ZVJhbmdlKCk7RC5zZWxlY3ROb2RlQ29udGVudHMoSCksdj8ucmVtb3ZlQWxsUmFuZ2VzKCksdj8uYWRkUmFuZ2UoRCksdShsLGooImNvcHlFcnJvciIpKX19ZmluYWxseXtWPSExfX0se3NpZ25hbDpLLnNpZ25hbH0pLHguYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsZD0+e2xldCB2PWUuZ2V0U2VsZWN0aW9uKCk7aWYoIWQuY2xpcGJvYXJkRGF0YXx8dj8ucmFuZ2VDb3VudCE9PTEpcmV0dXJuO2xldCBEPXYuZ2V0UmFuZ2VBdCgwKTtpZighKCFILmNvbnRhaW5zKEQuc3RhcnRDb250YWluZXIpfHwhSC5jb250YWlucyhELmVuZENvbnRhaW5lcil8fEQudG9TdHJpbmcoKSE9PUgudGV4dENvbnRlbnQpKXRyeXtkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsYiksZC5wcmV2ZW50RGVmYXVsdCgpfWNhdGNoe319LHtzaWduYWw6Sy5zaWduYWx9KSxlZT8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57cmUoKSx1KGwsIiIpO2xldCBkLHY7dHJ5e2Q9ZS5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBlLkJsb2IoW2JdLHt0eXBlOiJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgifSkpLHY9bi5jcmVhdGVFbGVtZW50KCJhIiksdi5ocmVmPWQsdi5kb3dubG9hZD1obihjKHAsIi5lZC1jb2RlLWJsb2NrX19maWxlLW5hbWUiKVswXT8udGV4dENvbnRlbnQ/PyIiLGgubGFuZ3VhZ2UpLHYuaGlkZGVuPSEwLHAuYXBwZW5kKHYpLHYuY2xpY2soKTtsZXQgRD1lLnNldFRpbWVvdXQoKCk9PntlLlVSTC5yZXZva2VPYmplY3RVUkwoZCksbGUuZGVsZXRlKGQpfSwxZTMpO2xlLnNldChkLEQpfWNhdGNoe2QmJmUuVVJMLnJldm9rZU9iamVjdFVSTChkKSx1KGwsaigiZG93bmxvYWRFcnJvciIpKX1maW5hbGx5e3Y/LnJlbW92ZSgpfX0se3NpZ25hbDpLLnNpZ25hbH0pLG0ud3JhcC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntGPSFGLFcoKX0se3NpZ25hbDpLLnNpZ25hbH0pLG0uZXhwYW5kLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e1U9IVUsVygpfSx7c2lnbmFsOksuc2lnbmFsfSk7bGV0IExlPW5ldyBlLk11dGF0aW9uT2JzZXJ2ZXIoKCk9PkNlKCkpO2Z1bmN0aW9uIGd0KCl7TGUuZGlzY29ubmVjdCgpLF9lPWMocCx5biksTGUub2JzZXJ2ZShwLHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpPYmplY3Qua2V5cyhBZSkubWFwKFVlKX0pO2ZvcihsZXQgZCBvZlt5LC4uLl9lLmZpbHRlcih2PT4hdi5tYXRjaGVzKCIuZWQtY29kZS1ibG9ja19fbGFuZ3VhZ2UiKSldKUxlLm9ic2VydmUoZCx7Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pfWxldCBaZT1uZXcgZS5SZXNpemVPYnNlcnZlcigoKT0+e04oKSx5ZSgpIT09UmUmJiQoKX0pO1plLm9ic2VydmUoSCksWmUub2JzZXJ2ZSh4KTtsZXQgTm49e3NvdXJjZVByZTprLHNvdXJjZUNvZGU6eSxjb250cm9sczptLHZpZXc6eCxyZWZyZXNoOkNlLGJpbmRpbmdzOmx0Lm1hcChkPT5jKHAsZClbMF0pLHJlZnJlc2hNZXRhZGF0YSgpe2xldCBkPWMocCx5bik7KGQubGVuZ3RoIT09X2UubGVuZ3RofHxkLnNvbWUoKHYsRCk9PnYhPT1fZVtEXSkpJiYoZ3QoKSxDZSgpKX0sc25hcHNob3QoKXtsZXQgZD1uLmFjdGl2ZUVsZW1lbnQhPT1uLmJvZHk/bi5hY3RpdmVFbGVtZW50OkVlPy5pc0Nvbm5lY3RlZD09PSExP0VlOnZvaWQgMDtyZXR1cm57c291cmNlOmIsZXhwYW5kZWQ6VSx3cmFwcGVkOkYsY29uZmlndXJhdGlvbjprZSxzY3JvbGxUb3A6eC5zY3JvbGxUb3Asc2Nyb2xsTGVmdDp4LnNjcm9sbExlZnQsZm9jdXNlZDpPYmplY3QuZW50cmllcyh7dmlldzp4LC4uLm0sZG93bmxvYWQ6ZWUscHJlcGFyZUlucHV0OlQscHJlcGFyZU91dHB1dDpBLHByZXBhcmVDb3B5Onp9KS5maW5kKChbLHZdKT0+diYmdj09PWQpPy5bMF0sc2VsZWN0aW9uOmQmJnR5cGVvZiBkLnNlbGVjdGlvblN0YXJ0PT0ibnVtYmVyIj9bZC5zZWxlY3Rpb25TdGFydCxkLnNlbGVjdGlvbkVuZF06dm9pZCAwLHByZXBhcmF0aW9uU291cmNlOlQ/LnZhbHVlfX0sZGlzcG9zZSgpe3E9ITAsSy5hYm9ydCgpLExlLmRpc2Nvbm5lY3QoKSxaZS5kaXNjb25uZWN0KCksZS5jYW5jZWxBbmltYXRpb25GcmFtZShRKSxzZSYmZS5jbGVhclRpbWVvdXQoc2UpO2ZvcihsZXRbZCx2XW9mIGxlKWUuY2xlYXJUaW1lb3V0KHYpLGUuVVJMLnJldm9rZU9iamVjdFVSTChkKTtsZS5jbGVhcigpLHgucmVtb3ZlKCksYS5yZW1vdmUoKSxfLnJlbW92ZSgpLGsuaGlkZGVuPSExO2ZvcihsZXQgZCBvZlsuLi5PYmplY3QudmFsdWVzKG0pLGVlXSlkJiYoZC5oaWRkZW49ITAsZC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtZWQtY29kZS1ibG9jay1mZWVkYmFjayIpKTtsLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1lZC1jb2RlLWJsb2NrLXN0YXR1cyIpLHUobCwiIiksRSYmKEUuaGlkZGVuPSEwKSx1KEosIiIpLHIuZGVsZXRlKHApfX07ci5zZXQocCxObiksZ3QoKSxDZSgpfWZ1bmN0aW9uIEkocCl7aXx8KHAubm9kZVR5cGU9PT0xJiZwLm1hdGNoZXModWUpJiZDKHApLHAucXVlcnlTZWxlY3RvckFsbD8uKHVlKS5mb3JFYWNoKFM9PkMoUykpKX1sZXQgTT1uZXcgZS5NdXRhdGlvbk9ic2VydmVyKHA9Pntmb3IobGV0W1Msa11vZiByKWlmKCFTLmlzQ29ubmVjdGVkKWsuZGlzcG9zZSgpO2Vsc2UgaWYoIVMuY29udGFpbnMoay5zb3VyY2VQcmUpfHwhUy5jb250YWlucyhrLnNvdXJjZUNvZGUpfHwhUy5jb250YWlucyhrLnZpZXcpfHxPYmplY3QudmFsdWVzKGsuY29udHJvbHMpLnNvbWUoeT0+IVMuY29udGFpbnMoeSkpfHxsdC5zb21lKCh5LG0pPT5jKFMseSlbMF0hPT1rLmJpbmRpbmdzW21dKSl7bGV0IHk9ay5zbmFwc2hvdCgpO2suZGlzcG9zZSgpLEMoUyx5KX1lbHNlIGsucmVmcmVzaE1ldGFkYXRhKCk7Zm9yKGxldCBTIG9mIHApZm9yKGxldCBrIG9mIFMuYWRkZWROb2Rlcyl7aWYoay5ub2RlVHlwZSE9PTEpY29udGludWU7bGV0IHk9ay5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KHVlKTt5JiYhci5oYXMoeSkmJkMoeSksISh5JiZyLmhhcyh5KSYmIWsubWF0Y2hlcyh1ZSkpJiZJKGspfX0pLEc9e3ZlcnNpb246RW4sc2NhbjpJLGdldCBpbnN0YW5jZUNvdW50KCl7cmV0dXJuIHIuc2l6ZX0sZGlzcG9zZSgpe2k9ITAsTS5kaXNjb25uZWN0KCksZz8uZGlzcG9zZSgpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsTCk7Zm9yKGxldCBwIG9mWy4uLnIudmFsdWVzKCldKXAuZGlzcG9zZSgpO2RlbGV0ZSBlW1NlXX19O2Z1bmN0aW9uIEwoKXtpfHwoSShuKSxNLm9ic2VydmUobi5kb2N1bWVudEVsZW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSkpfXJldHVybiBlW1NlXT1HLG4ucmVhZHlTdGF0ZT09PSJsb2FkaW5nIj9uLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEwse29uY2U6ITB9KTpMKCksR312bigpO30pKCk7Cg==","id":"bl8w13x"},"tag":"figure","attributes":{"class":"ed-code-block","data-ed-code-block-language":"{props.language.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-theme":"{props.theme.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-show-language":"{props.showLanguage.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-show-copy":"{props.showCopy.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-collapsible":"{props.collapsible.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-initial-state":"{props.initialState.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-collapsed-lines":"{props.collapsedLines.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-wrap-lines":"{props.wrapLines.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-show-wrap-toggle":"{props.showWrapToggle.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-tab-size":"{props.tabSize.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-text-size":"{props.textSize.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-show-converter":"{props.showConverter.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-show-line-numbers":"{props.showLineNumbers.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-highlight-lines":"{props.highlightLines.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-show-download":"{props.showDownload.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-toolbar-style":"{props.toolbarStyle.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-start-line":"{props.startLine.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-added-lines":"{props.addedLines.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","data-ed-code-block-removed-lines":"{props.removedLines.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}"},"styles":["aferan3"]},"innerBlocks":[{"blockName":"etch/element","attrs":{"metadata":{"name":"Prepare"},"tag":"fieldset","attributes":{"class":"ed-code-block__prepare","hidden":""},"styles":["2zgou7m"]},"innerBlocks":[{"blockName":"etch/element","attrs":{"tag":"legend","attributes":{}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareTitle.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Prepare Help"},"tag":"p","attributes":{"class":"ed-code-block__prepare-help"},"styles":["j927dto"]},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareHelp.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Prepare Label"},"tag":"label","attributes":{"class":"ed-code-block__prepare-label"},"styles":["qlyt5ei"]},"innerBlocks":[{"blockName":"etch/element","attrs":{"tag":"span","attributes":{}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareSource.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Prepare Input"},"tag":"textarea","attributes":{"class":"ed-code-block__prepare-input","rows":"8","spellcheck":"false","autocapitalize":"off","autocomplete":"off"},"styles":["ad3a7zk"]},"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n","\n"]}],"innerHTML":"\n\n\n\n","innerContent":["\n",null,"\n\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Prepare Label"},"tag":"label","attributes":{"class":"ed-code-block__prepare-label"},"styles":["qlyt5ei"]},"innerBlocks":[{"blockName":"etch/element","attrs":{"tag":"span","attributes":{}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareOutput.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Prepare Output"},"tag":"textarea","attributes":{"class":"ed-code-block__prepare-output","rows":"8","spellcheck":"false","autocapitalize":"off","autocomplete":"off","readonly":""},"styles":["8e8h078"]},"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n","\n"]}],"innerHTML":"\n\n\n\n","innerContent":["\n",null,"\n\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Button"},"tag":"button","attributes":{"class":"ed-code-block__button ed-code-block__prepare-copy","type":"button"},"styles":["nlb360x","0f1bn6m"]},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareCopy.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Prepare Status"},"tag":"p","attributes":{"class":"ed-code-block__prepare-status","role":"status","aria-live":"polite","aria-atomic":"true"},"styles":["s858stf"]},"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n","\n"]}],"innerHTML":"\n\n\n\n\n\n\n\n\n\n\n\n","innerContent":["\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Toolbar"},"tag":"div","attributes":{"class":"ed-code-block__toolbar"},"styles":["dtvwrya"]},"innerBlocks":[{"blockName":"etch/element","attrs":{"metadata":{"name":"Title"},"tag":"span","attributes":{"class":"ed-code-block__title"},"styles":["ylw4l65"]},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.title.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"File Name"},"tag":"span","attributes":{"class":"ed-code-block__file-name"},"styles":["m59ailc"]},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.fileName.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Language"},"tag":"span","attributes":{"class":"ed-code-block__language","hidden":""},"styles":["r3ps61i"]},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.language.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Controls"},"tag":"div","attributes":{"class":"ed-code-block__controls"},"styles":["xixyids"]},"innerBlocks":[{"blockName":"etch/element","attrs":{"metadata":{"name":"Button"},"tag":"button","attributes":{"class":"ed-code-block__button ed-code-block__copy","type":"button","hidden":""},"styles":["nlb360x","uxqrcax"]},"innerBlocks":[{"blockName":"etch/text","attrs":{"metadata":{"name":"Text"},"content":"Copy code"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"ED Code Block download"},"tag":"button","attributes":{"class":"ed-code-block__button ed-code-block__download","type":"button","hidden":""},"styles":["nlb360x","hor788t"]},"innerBlocks":[{"blockName":"etch/text","attrs":{"metadata":{"name":"Text"},"content":"Download code"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Button"},"tag":"button","attributes":{"class":"ed-code-block__button ed-code-block__wrap","type":"button","hidden":""},"styles":["nlb360x","w0yvqk9"]},"innerBlocks":[{"blockName":"etch/text","attrs":{"metadata":{"name":"Text"},"content":"Enable line wrapping"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Button"},"tag":"button","attributes":{"class":"ed-code-block__button ed-code-block__expand","type":"button","hidden":""},"styles":["nlb360x","1dya0d1"]},"innerBlocks":[{"blockName":"etch/text","attrs":{"metadata":{"name":"Text"},"content":"Expand code"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]}],"innerHTML":"\n\n\n\n\n\n\n\n","innerContent":["\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n"]}],"innerHTML":"\n\n\n\n\n\n\n\n","innerContent":["\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Source"},"tag":"pre","attributes":{"class":"ed-code-block__source","tabindex":"0","role":"group","aria-label":"{props.title.toString().trim().equal('', props.fileName.toString().trim(), props.title.toString().trim())}{props.title.toString().trim().equal('', props.fileName.toString().trim().equal('', '', ', '), ', ')}{props.labels.region.toString().trim().equal('Code sample', '', props.labels.region.toString().trim())}{props.labels.region.toString().trim().equal('Code sample', props.title.toString().trim().equal('', props.fileName.toString().trim().equal('', 'Code sample', 'code sample'), 'code sample'), props.labels.region.toString().trim().equal('', props.title.toString().trim().equal('', props.fileName.toString().trim().equal('', 'Code sample', 'code sample'), 'code sample'), ''))}"},"styles":["82859c5"]},"innerBlocks":[{"blockName":"etch/element","attrs":{"tag":"code","attributes":{}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.code.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Labels"},"tag":"div","attributes":{"class":"ed-code-block__labels","hidden":""},"styles":["6i12mxf"]},"innerBlocks":[{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"copy"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.copy.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"copySuccess"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.copySuccess.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"copyError"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.copyError.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"expand"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.expand.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"collapse"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.collapse.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"wrapOn"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.wrapOn.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"wrapOff"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.wrapOff.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"region"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.region.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"download"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.download.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"downloadError"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.downloadError.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"plainText"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.plainText.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"highlightedLines"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.highlightedLines.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"annotationsUnavailable"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.annotationsUnavailable.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"addedLines"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.addedLines.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"removedLines"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.removedLines.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"prepareTitle"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareTitle.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"prepareHelp"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareHelp.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"prepareSource"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareSource.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"prepareOutput"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareOutput.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"prepareCopy"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareCopy.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"prepareSuccess"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareSuccess.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]},{"blockName":"etch/element","attrs":{"tag":"span","attributes":{"data-ed-code-block-label":"prepareError"}},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.labels.prepareError.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]}],"innerHTML":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","innerContent":["\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Status"},"tag":"div","attributes":{"class":"ed-code-block__status","role":"status","aria-live":"polite","aria-atomic":"true"},"styles":["l4b5meg"]},"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n","\n"]},{"blockName":"etch/element","attrs":{"metadata":{"name":"Caption"},"tag":"figcaption","attributes":{"class":"ed-code-block__caption"},"styles":["u2q7siu"]},"innerBlocks":[{"blockName":"etch/raw-html","attrs":{"content":"{props.caption.toString().htmlEncode().replaceAll('[', '[').replaceAll(']', ']').replaceAll('{', '{').replaceAll('}', '}')}","unsafe":"false"},"innerBlocks":[],"innerHTML":"","innerContent":[]}],"innerHTML":"\n\n","innerContent":["\n",null,"\n"]}],"innerHTML":"\n\n\n\n\n\n\n\n\n\n\n\n","innerContent":["\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n"]}],"properties":[{"name":"Code","key":"code","description":"Paste code; the builder prepares it automatically. Braces are stored as literal-brace expressions so Etch shows them as typed. A dynamic binding works only as the whole value. Choose the matching Language for syntax colors.","type":{"primitive":"string"},"default":""},{"name":"Language","key":"language","description":"Syntax colors for this language; unknown values show plain text.","type":{"primitive":"string","specialized":"select"},"default":"plaintext","selectOptionsString":"Plain text : plaintext\nHTML : html\nCSS : css\nSCSS : scss\nJavaScript : javascript\nTypeScript : typescript\nPHP : php\nJSON : json\nYAML : yaml\nSQL : sql\nBash : bash\nMarkdown : markdown\nDiff : diff"},{"name":"Title","key":"title","description":"Optional visible title. It also names the code area for screen readers. Empty hides it.","type":{"primitive":"string"},"default":""},{"name":"File name","key":"fileName","description":"Optional visible file name and download name; downloads sanitize it to a safe basename. Blank uses code plus a language extension. Names the code area when Title is empty.","type":{"primitive":"string"},"default":""},{"name":"Caption","key":"caption","description":"Optional caption below the code, as the figure caption. Empty hides it.","type":{"primitive":"string"},"default":""},{"name":"Show language","key":"showLanguage","description":"Show the language badge.","type":{"primitive":"boolean"},"default":true},{"name":"Theme","key":"theme","description":"Auto follows the visitor's system setting. Site follows the page's color scheme, for example an ACSS light/dark switch. Light and Dark are fixed.","type":{"primitive":"string","specialized":"select"},"default":"auto","selectOptionsString":"Auto : auto\nLight : light\nDark : dark\nSite : site"},{"name":"Toolbar style","key":"toolbarStyle","description":"Text shows labelled buttons. Icons shows compact icon buttons; their label appears on hover and keyboard focus.","type":{"primitive":"string","specialized":"select"},"default":"text","selectOptionsString":"Text : text\nIcons : icons"},{"name":"Show copy","key":"showCopy","description":"Offer a button that copies the complete original code.","type":{"primitive":"boolean"},"default":true},{"name":"Show download","key":"showDownload","description":"Offer a local download of the complete original code; uses File name or a language-based fallback.","type":{"primitive":"boolean"},"default":false},{"name":"Show line numbers","key":"showLineNumbers","description":"Number the lines, starting at First line number. Wrapped lines keep one number. Numbers are never copied or downloaded. Annotations stop above 5,000 lines.","type":{"primitive":"boolean"},"default":false},{"name":"First line number","key":"startLine","description":"Number of the first line: a whole number from 1 to 1,000,000; invalid values use 1. Highlight, Added and Removed lines use these numbers.","type":{"primitive":"string"},"default":"1"},{"name":"Highlight lines","key":"highlightLines","description":"Emphasize line numbers or ranges, e.g. 2,4-6, as displayed. Invalid entries are ignored.","type":{"primitive":"string"},"default":""},{"name":"Added lines","key":"addedLines","description":"Mark added lines with + and a color, e.g. 3-4. Same syntax as Highlight lines; works in every language.","type":{"primitive":"string"},"default":""},{"name":"Removed lines","key":"removedLines","description":"Mark removed lines with − and a color, e.g. 2. Same syntax as Highlight lines; a line in both lists counts as removed.","type":{"primitive":"string"},"default":""},{"name":"Collapsible","key":"collapsible","description":"Limit the preview height when the code is longer than Collapsed lines.","type":{"primitive":"boolean"},"default":true},{"name":"Initial state","key":"initialState","description":"Initial disclosure state; reapplied on configuration changes.","type":{"primitive":"string","specialized":"select"},"default":"collapsed","selectOptionsString":"Collapsed : collapsed\nExpanded : expanded"},{"name":"Collapsed lines","key":"collapsedLines","description":"Preview height in lines: a whole number from 1 to 100; invalid values use 12. Counts visual lines when wrapping.","type":{"primitive":"string"},"default":"12"},{"name":"Wrap lines","key":"wrapLines","description":"Initial wrapping; source and clipboard contents are unchanged.","type":{"primitive":"boolean"},"default":false},{"name":"Show wrap toggle","key":"showWrapToggle","description":"Allow readers to change wrapping.","type":{"primitive":"boolean"},"default":true},{"name":"Tab size","key":"tabSize","description":"Tab width in spaces: a decimal from 0 through 256, for example 2, 4, 8, 40 or 2.5. Invalid or out-of-range values use 4. Changes display only, never source indentation.","type":{"primitive":"string"},"default":"4"},{"name":"Text size","key":"textSize","description":"Code text size: ACSS text-s, text-m or text-l.","type":{"primitive":"string","specialized":"select"},"default":"normal","selectOptionsString":"Normal : normal\nSmall : small\nLarge : large"},{"name":"Manual converter","key":"showConverter","description":"Fallback when the builder could not prepare code, for example in an older Etch: shows a converter on the frontend preview. Paste the original there, copy the result into Code, then turn this off.","type":{"primitive":"boolean"},"default":false},{"name":"Interface labels","key":"labels","description":"Button texts, status messages and screen-reader names; empty values use the English defaults.","type":{"primitive":"object","specialized":"group"},"properties":[{"name":"Copy","key":"copy","description":"Copy button text and accessible name.","type":{"primitive":"string"},"default":"Copy code"},{"name":"Copied","key":"copySuccess","description":"Shown on the Copy button for 2 seconds and announced once after copying.","type":{"primitive":"string"},"default":"Copied."},{"name":"Copy failed","key":"copyError","description":"Status when copying fails; the complete code is selected and focused for manual copying.","type":{"primitive":"string"},"default":"Code selected. Copy it with Ctrl+C, Command+C or your device's Copy command."},{"name":"Download","key":"download","description":"Download button text and accessible name.","type":{"primitive":"string"},"default":"Download code"},{"name":"Download error","key":"downloadError","description":"Status when the download fails.","type":{"primitive":"string"},"default":"Download failed. Copy the code instead."},{"name":"Expand","key":"expand","description":"Expand button text and accessible name.","type":{"primitive":"string"},"default":"Expand code"},{"name":"Collapse","key":"collapse","description":"Collapse button text and accessible name.","type":{"primitive":"string"},"default":"Collapse code"},{"name":"Wrap on","key":"wrapOn","description":"Wrap button text while lines are not wrapped.","type":{"primitive":"string"},"default":"Enable line wrapping"},{"name":"Wrap off","key":"wrapOff","description":"Wrap button text while lines are wrapped.","type":{"primitive":"string"},"default":"Disable line wrapping"},{"name":"Code name","key":"region","description":"Screen-reader name of the code area, added after the title or file name (default: code sample).","type":{"primitive":"string"},"default":"Code sample"},{"name":"Plain text","key":"plainText","description":"Language badge text for plain text.","type":{"primitive":"string"},"default":"Plain text"},{"name":"Highlighted","key":"highlightedLines","description":"Screen-reader prefix before the list of highlighted lines.","type":{"primitive":"string"},"default":"Highlighted lines"},{"name":"Added","key":"addedLines","description":"Screen-reader prefix before the list of added lines.","type":{"primitive":"string"},"default":"Added lines"},{"name":"Removed","key":"removedLines","description":"Screen-reader prefix before the list of removed lines.","type":{"primitive":"string"},"default":"Removed lines"},{"name":"Too many lines","key":"annotationsUnavailable","description":"Shown when the code has more than 5,000 lines and line annotations are skipped.","type":{"primitive":"string"},"default":"Line annotations are unavailable for more than 5,000 lines. The complete code is still available."},{"name":"Converter","key":"prepareTitle","description":"Manual converter heading.","type":{"primitive":"string"},"default":"Prepare code for Etch"},{"name":"Converter help","key":"prepareHelp","description":"Manual converter instructions.","type":{"primitive":"string"},"default":"The builder prepares pasted code automatically. Use this converter only when it did not: paste the original code below, copy the prepared result into Code, then turn off Manual converter and save. Always paste the original, not a previously prepared result."},{"name":"Original","key":"prepareSource","description":"Label of the original-code field.","type":{"primitive":"string"},"default":"1. Original code"},{"name":"Result","key":"prepareOutput","description":"Label of the prepared-result field.","type":{"primitive":"string"},"default":"2. Prepared code for the Code field"},{"name":"Copy result","key":"prepareCopy","description":"Text of the copy-result button.","type":{"primitive":"string"},"default":"Copy prepared code"},{"name":"Result copied","key":"prepareSuccess","description":"Status after the result was copied.","type":{"primitive":"string"},"default":"Copied. Paste into the Code field in Etch."},{"name":"Result error","key":"prepareError","description":"Status when copying the result fails; the result is selected for manual copying.","type":{"primitive":"string"},"default":"Result selected. Press Ctrl+C or Command+C to copy it manually."}]}],"description":"ED Code Block 1.0.0-beta.2 — syntax highlighting, line numbers, copy and download"}},"version":2.1}Stay up to date. Etch won’t update a pasted component for you. Subscribe and get one email when a new version is out.
21 code blocks in real layouts
Copy, download, expand and wrap the code, hover the icon buttons, or press Tab to reach every control. Switch to Mobile for a phone width.
What it does
One pasted component and no setup. Highlight.js is bundled, so there is no plugin, no CDN and no request to another server: the CSS and the script travel with it.
Paste and done
Paste code into the props panel and choose the language. Etch would read braces as dynamic data, so the component prepares them by itself, and the page, Copy and Download show your original. Every edit shows in the canvas at once.
13 languages, bundled
HTML, CSS, SCSS, JavaScript, TypeScript, PHP, JSON, YAML, SQL, Bash, Markdown and Diff, plus plain text, colored by Highlight.js. Nothing loads from a CDN.
Copy and download the original
Copy always takes the complete code, even from a collapsed preview, and confirms on the button. Download saves it as a file named after File name, made in the browser.
Line numbers and marks
Numbers from any first line, highlighted lines, and added or removed lines with + and − marks. Numbers and marks are never copied, and color is never the only cue.
Long code, short page
A collapsed preview of any height with a fade and an Expand button. Readers can wrap long lines; copying and downloading stay unchanged.
Themes, toolbars, captions
Auto follows the visitor’s system, Site follows your page’s color scheme, Light and Dark are fixed. Labelled buttons or compact icons, plus an optional title, file name and caption.
Accessible by default
A named figure with a focusable code area, native buttons, one polite message after copying, and line marks described for screen readers. Tested with NVDA, VoiceOver and TalkBack.
57 styling variables
Colors, spacing, fonts, the toolbar, buttons, line marks and every syntax color, set on any parent class. ACSS 4 tokens with plain fallbacks, so it works without Automatic.css too.
Add it in four steps
No plugin and no build step. The component brings its own CSS and script with Highlight.js bundled, and loads nothing from a CDN. It works with or without Automatic.css 4.
Shows without its styles? It was pasted but not saved, and pasting again won’t repair it. Delete ED Code Block from your components, paste it again and click Save.
- Copy the componentUse Copy component at the top of this page, or download the .json file.
- Paste it on the Etch canvasSelect where it should go, press Ctrl+V or ⌘V, then click Save. Etch adds the component to your list right away but stores its CSS only when you save.
- Paste your codeSelect the block, paste your code into Code and choose its Language. About 0.1 s later the braces are prepared for Etch; leave the field as it is.
- Name it and saveAdd a Title or File name so readers and screen readers know what the code is, turn on what you need, such as Show line numbers or Show download, and save.
45 settings in the Etch props panel
In the order of the Etch props panel, where each setting has help text too. Only Code needs filling in: everything else has a working default, and the 22 interface labels fall back to English while they are empty.
Before you publish code
Things that are easy to miss when code goes onto a real site.
- Leave the prepared braces alone. After you paste, Code shows each brace as a short Etch expression. That is what keeps your code intact: the page, Copy and Download show the original.
- Code that contains Etch expressions needs the Manual converter. Documentation about Etch itself, with literal-brace expressions in the original, and code that is exactly one binding-like expression are not prepared automatically. Convert them once with the Manual converter.
- Etch’s console message is expected. For the moment a raw brace sits in Code, about 0.1 s, Etch logs “Error formatting HTML” in the builder console. The message comes from Etch, not from the component.
- Long code stays complete. Syntax colors stop above 20,000 characters, or 250,000 for JSON, and line numbers and marks above 5,000 lines. The code is still shown, copied and downloaded in full.
- Without JavaScript, readers still get the code. It is in the page’s HTML and shows in full, without colors and buttons.
- Printing shows everything. A printed page shows the whole code on a light background, wraps long lines and leaves out the buttons. Line numbers and marks stay.
- Cloudflare can hide email addresses in code. Its Email Address Obfuscation rewrites addresses in the HTML, such as the one in an rsync or git command. Its script restores them, so the page and Copy stay correct, but readers without JavaScript see an “email protected” placeholder. Turn it off if your code shows addresses.
- Not tested yet: VoiceOver on iOS. It was checked in Chrome, Firefox, Safari and Microsoft Edge, with NVDA, VoiceOver on macOS, TalkBack on an Android emulator and Safari in the iOS Simulator. TalkBack doesn’t read the instruction shown when copying is blocked; the code is still selected.
Free to use. Not for resale.
Licensed under FSL-1.1-MIT, the Functional Source License with an MIT future license. Each version becomes MIT-licensed two years after its release.
- Use it on unlimited personal, client and commercial websites
- Modify and adapt it however you like
- Use it in paid design and development work for your clients
- Sell it, or a modified version, as a component: in a library, bundle, template kit, plugin or marketplace listing
- Offer it in another commercial product or service that competes with it
Keep the copyright and license notices in the code, and link to this page instead of re-hosting the download, so everyone gets fixes and updates. Read the full license
Third-party code
This component bundles the open-source library below. It keeps its own license, and FSL-1.1-MIT does not apply to it. Its full license notice is included in the component’s script; keep it when you use or change the component.
- Highlight.js11.12.0
How to update
Etch has no update button for pasted components. Pasting a newer version over an installed one changes nothing: Etch keeps the component and the CSS it already has. To update, reinstall in five steps.
- Note what you setWrite down the settings of each code block and keep a copy of its code. Copy any CSS you changed in the component’s own styles.
- Delete the componentIn Etch, delete ED Code Block from your components. Every code block disappears from every page that used it.
- Delete its stylesIn the Style Manager, search for ed-code-block and delete the 22 styles listed below.
- Paste the new versionCopy or download the new JSON from this page, paste it on the canvas and click Save. Etch creates the component and its CSS fresh.
- Put your code blocks backInsert a code block wherever one was, paste its code, re-enter its settings and save. Reload any other open builder tab.
Styles to delete in step 3
.ed-code-block.ed-code-block__prepare.ed-code-block__prepare-help.ed-code-block__prepare-label.ed-code-block__prepare-input.ed-code-block__prepare-output.ed-code-block__button.ed-code-block__prepare-copy.ed-code-block__prepare-status.ed-code-block__toolbar.ed-code-block__title.ed-code-block__file-name.ed-code-block__language.ed-code-block__controls.ed-code-block__copy.ed-code-block__download.ed-code-block__wrap.ed-code-block__expand.ed-code-block__source.ed-code-block__labels.ed-code-block__status.ed-code-block__caption
Trade-offs
- Placements are not kept. Etch doesn’t link old code blocks to the new component, so you insert each one again with its code and settings.
- Edits inside the component’s CSS are replaced. Keep overrides on a parent class with the
--ed-code-block-*variables; those survive an update. - Skipping a step leaves a mix. Without step 2, Etch keeps the old component. Without step 3, the new version runs on the old CSS.
Coming from 1.0.0-beta.1? Follow the five steps above. Settings, classes and styling variables are unchanged, so you can re-enter your settings as they were. Subscribe and you’ll get one email when the next version is out.
What changed
Versions follow semantic versioning. When an update changes how existing options behave, its entry says so.
1.0.0-beta.2Latest
- FixedAfter Expand and then Collapse, the fade at the bottom of a collapsed preview now comes back as soon as the height animation ends. Before, it stayed hidden until the reader scrolled the code.
- ChangedThe default message when the browser blocks copying is now “Code selected. Copy it with Ctrl+C, Command+C or your device’s Copy command.” The old one named only keyboard shortcuts, which a phone doesn’t have. A text you entered yourself is kept.
- FixedOn phones and tablets, a tap on an icon button no longer leaves its label tooltip open. Tooltips show on mouse hover and keyboard focus, as before.
- ChangedThe script and the CSS of
.ed-code-blockchanged, so update the component and its styles together (see How to update). Props, classes and the 57 styling variables are the same. - TestedTalkBack on Android, Safari on iPhone and iPad in the iOS Simulator, and Chrome, Firefox, Microsoft Edge and WebKit on the desktop. TalkBack doesn’t read the instruction shown when copying is blocked; the code is still selected and the message stays visible. It stays a beta until it’s checked with VoiceOver on a real iPhone.
1.0.0-beta.1
- ReleasedFirst public version. It stays a beta until iOS, Android and Microsoft Edge are tested.
Tell me what this component needs
A bug, a missing option, or anything that made the component awkward to use in a real build — it all belongs here. The versions above are the ones it was tested on; if yours differ, say so.