{"id":3075,"date":"2026-09-17T18:33:14","date_gmt":"2026-09-17T21:33:14","guid":{"rendered":"https:\/\/rodolfobasilio.com\/?page_id=3075"},"modified":"2026-10-15T05:44:07","modified_gmt":"2026-10-15T08:44:07","slug":"consultoria","status":"publish","type":"page","link":"https:\/\/rodolfobasilio.com\/en\/consultoria\/","title":{"rendered":"Consultoria de neg\u00f3cios"},"content":{"rendered":"\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"><link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin><link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Albert+Sans:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&amp;family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;1,6..72,400&amp;display=swap\">\n<style>\n\/* rbx design system, built by design-system\/build.py from src\/ + pages\/consultoria\/ (inputs 1af64d85304f). Never edit this copy: edit the sources and rebuild. *\/\n\n.rb-assinatura svg { display: block; width: 100%; height: auto; overflow: visible; }\n.rb-ink { fill: currentColor; }\n.rb-acc { fill: var(--rb-accent, #85D6FF); }\n\n.rb-anel { position: relative; display: grid; justify-items: center; align-content: start; text-align: center; }\n.rb-anel-ring { grid-area: 1 \/ 1; width: 100%; max-width: 11rem; aspect-ratio: 1; overflow: visible; }\n.rb-anel-ring circle { fill: none; stroke-width: 16; }\n.rb-anel-track { stroke: currentColor; opacity: .08; }\n.rb-anel > [data-count], .rb-anel > .rb-anel-figure { grid-area: 1 \/ 1; align-self: center; font-variant-numeric: tabular-nums; }\n\n.rb-campo { position: relative; isolation: isolate; --rb-campo-track: rgba(239, 244, 255, .07); }\n.rb-campo > canvas { position: absolute; inset: 0; width: 100%; height: 100%; z-index: -1; pointer-events: none; }\n\n.rb-trama { overflow: hidden; display: grid; gap: .08em; line-height: 0; user-select: none; }\n.rb-trama-track { display: flex; width: max-content; gap: .5em; will-change: transform; }\n.rb-trama-track svg { height: 1em; width: auto; flex: none; overflow: visible; }\n.rb-trama .rb-ghost { opacity: .09; }\n@media (forced-colors: active), print { .rb-trama { display: none; } }\n\n.rb-regra s, .rb-regra del {\n  text-decoration: none; opacity: .55;\n  background: linear-gradient(currentColor, currentColor) 0 58% \/ 100% .08em no-repeat;\n}\n.rb-regra em {\n  font-style: italic;\n  background: linear-gradient(var(--rb-accent, #85D6FF), var(--rb-accent, #85D6FF)) 0 96% \/ 100% .1em no-repeat;\n}\n@media (forced-colors: active) {\n  .rb-regra s, .rb-regra del { text-decoration: line-through; }\n  .rb-regra em { text-decoration: underline; text-decoration-thickness: .08em; }\n}\n\n.rb-faixa { display: block; line-height: 0; overflow: hidden; }\n.rb-faixa svg { display: block; width: 100%; height: var(--rb-faixa-h, clamp(56px, 6vw, 112px)); }\n\n.rb-monograma { display: inline-block; line-height: 0; }\n.rb-monograma svg { display: block; height: 100%; width: auto; overflow: visible; }\n.rb-monograma circle { fill: none; }\n\n\n.rbx {\n    --navy: #151F38;  --navy-2: #263354;  --navy-3: #394971;  --slate: #8B98BB;\n  --mist: #D2DDFA;  --paper: #EFF4FF;   --blue: #04ABFF;    --light: #85D6FF;\n  --blue-ink: #006FA8;                   --navy-rgb: 21, 31, 56;\n  --paper-rgb: 239, 244, 255;\n\n    --a-track: .06;           --a-off: .1;              --a-rule: .14;            --a-rule-strong: .16;     --a-rule-field: .22;      --a-dial: .24;            --a-control: .26;         --a-note: .8;             --a-soft: .82;            --a-lead: .86;          \n    --settle: cubic-bezier(.2,.7,.1,1);       --out: cubic-bezier(.23, 1, .32, 1);    \n      --type-head: \"Albert Sans\", \"futura-pt\", \"Helvetica Neue\", Arial, sans-serif;\n  --type-body: \"Albert Sans\", \"futura-pt\", \"Helvetica Neue\", Arial, sans-serif;\n  --type-quote: Newsreader, Georgia, \"Times New Roman\", serif;\n  --w-head: 600;  --w-strong: 600;  --w-ui: 500;\n  --w-button: 600;                     --type-h3: var(--type-head);  --w-h3: var(--w-head);     --ls-display: -.035em;  --ls-head: -.025em;  --ls-sub: -.012em;\n  --ls-label: .14em;                   --step: .9em;                      \n    --fs-display: clamp(2.375rem,  2.375rem  + 26   * (100vw - 760px) \/ 680, 4rem);         --fs-h2:      clamp(1.75rem,   1.75rem   + 12   * (100vw - 760px) \/ 680, 2.5rem);       --fs-quote:   clamp(1.1875rem, 1.1875rem + 5    * (100vw - 760px) \/ 680, 1.5rem);       --fs-h3:      clamp(1.1875rem, 1.1875rem + 3    * (100vw - 760px) \/ 680, 1.375rem);     --fs-lead:    clamp(1.125rem,  1.125rem  + 2    * (100vw - 760px) \/ 680, 1.25rem);      --fs-h4:      clamp(1.0625rem, 1.0625rem + 2    * (100vw - 760px) \/ 680, 1.1875rem);    --fs-body:    clamp(1rem,      1rem      + 1    * (100vw - 760px) \/ 680, 1.0625rem);    --lh-lead: 1.5;                                                                         --fs-ui: 1rem;                                                     --fs-small: .9375rem;                                              --fs-caption: .8125rem;                                            --fs-label: .75rem;                                              \n    --gutter: clamp(20px, 3.2vw, 40px);\n  --space-section: clamp(48px, 5vw, 72px);     --space-head: clamp(24px, 2.8vw, 40px);       --wrap-max: 1200px;                  --col-gap: clamp(16px, 1.8vw, 28px);     --header-offset: 110px;            }\n\n\n.rbx, .rbx *, .rbx *::before, .rbx *::after { box-sizing: border-box; }\n.rbx { font: 400 var(--fs-body)\/1.6 var(--type-body); -webkit-font-smoothing: antialiased; }\n\n.rbx :where(h1, h2, h3, p, ol, ul, figure, blockquote, fieldset, dl, dd) { margin: 0; padding: 0; }\n.rbx :where(h1, h2, h3) { font-family: var(--type-head); font-weight: var(--w-head); color: inherit; line-height: 1.1; text-wrap: balance; overflow-wrap: anywhere; }\n.rbx :where(ol, ul) { list-style: none; }\n.rbx :where(img) { display: block; max-width: 100%; height: auto; }\n.rbx :where(button, input, textarea) { font: inherit; color: inherit; }\n.rbx :where(strong, b, summary, legend) { font-weight: var(--w-strong); }\n.rbx :where(figcaption) { font-style: normal; font-size: inherit; line-height: inherit; color: inherit; }\n.rbx :where(label) { line-height: inherit; }\n\n:is(.rbx, #rbx-lift) a { color: inherit; font: inherit; letter-spacing: inherit; }\n:is(.rbx, #rbx-lift) :where(p, li, dd, blockquote, figcaption) a:where(:not([class])) { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: .2em; }\n:is(.rbx, #rbx-lift) :where(h4, h5, h6) { margin: 0; font-family: var(--type-head); font-weight: var(--w-head); font-size: var(--fs-h4); line-height: 1.2; letter-spacing: normal; color: inherit; }\n.rbx [hidden] { display: none !important; }\n.rbx [id] { scroll-margin-top: var(--header-offset); }\n:is(.rbx, #rbx-lift) :where(button, [type=button], [type=submit]) { margin: 0; padding: 0; background: none; border: 0; border-radius: 0; color: inherit; font: inherit; letter-spacing: inherit; text-align: inherit; text-transform: none; white-space: normal; user-select: auto; transition: none; cursor: pointer; }\n:is(.rbx, #rbx-lift) :focus-visible { outline: 3px solid var(--focus); outline-offset: 4px; }\n\n@media print {\n  :is(.rbx, #rbx-lift) a[href]::after { content: none !important; }\n}\n\n\n.rbx-page { margin-inline: calc(50% - 50vw); overflow-x: clip; background: var(--paper); }\n\nhtml:has(.rbx-page) { overflow-x: clip; }\nhtml:has(.rbx-page) { scroll-padding-top: var(--header-offset, 110px); }\n\n\n.rbx, .rbx-paper, .rbx-sticky[data-over=\"navy\"] {\n  --ground: var(--paper);\n  --ink: var(--navy);  --ink-rgb: var(--navy-rgb);\n  --ink-soft: rgba(var(--navy-rgb), var(--a-soft));\n  --ink-quiet: #616A7E;                    --muted: var(--navy-3);                  --accent: var(--blue-ink);               --rule: rgba(var(--navy-rgb), var(--a-rule));\n  --rule-strong: rgba(var(--navy-rgb), var(--a-rule-strong));\n  --focus: var(--navy);\n  --btn-bg: var(--blue);  --btn-ink: var(--navy);  --btn-bg-hover: var(--light);\n}\n.rbx, .rbx-paper { color: var(--ink); }\n.rbx-paper { background: var(--ground); }\n\n.rbx-navy, .rbx-sticky {\n  --ground: var(--navy);\n  --ink: var(--paper);  --ink-rgb: var(--paper-rgb);\n  --ink-soft: rgba(var(--paper-rgb), var(--a-soft));\n  --ink-quiet: var(--slate);\n  --muted: var(--slate);                   --accent: var(--light);                  --rule: rgba(var(--paper-rgb), var(--a-rule));\n  --rule-strong: rgba(var(--paper-rgb), var(--a-rule-strong));\n  --focus: var(--light);\n  --btn-bg: var(--blue);  --btn-ink: var(--navy);  --btn-bg-hover: var(--light);\n}\n.rbx-navy { background: var(--ground); color: var(--ink); }\n\n.rbx-blue {\n  --ground: var(--blue);\n  --ink: var(--navy);  --ink-rgb: var(--navy-rgb);\n  --ink-soft: var(--navy);\n  --ink-quiet: var(--navy);\n  --muted: var(--navy);\n  --accent: var(--navy);\n  --rule: rgba(var(--navy-rgb), var(--a-rule-field));\n  --rule-strong: rgba(var(--navy-rgb), var(--a-rule-field));\n  --focus: var(--navy);\n  --btn-bg: var(--navy);  --btn-ink: var(--paper);  --btn-bg-hover: var(--navy-2);\n  background: var(--ground); color: var(--ink);\n}\n\n@media print {\n  :is(.rbx, #rbx-lift) .rbx-navy, :is(.rbx, #rbx-lift) .rbx-navy * { color: #151F38 !important; }\n}\n\n\n.rbx-wrap { width: min(100%, var(--wrap-max)); margin-inline: auto; padding-inline: var(--gutter); }\n.rbx-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--col-gap); }\n.rbx-section { padding-block: var(--space-section); }\n\n.rbx-section.rbx-ruled { position: relative; }\n.rbx-section.rbx-ruled::before { content: \"\"; position: absolute; top: 0; left: 0; right: 0; width: calc(min(100%, var(--wrap-max)) - 2 * var(--gutter)); margin-inline: auto; border-top: 1px solid var(--rule); pointer-events: none; }\n\n.rbx-head { align-items: end; margin-bottom: var(--space-head); }\n.rbx-head > div { grid-column: 1 \/ span 6; }\n.rbx-head .rbx-h2 { margin-top: 14px; }\n.rbx-head > p { grid-column: 7 \/ -1; }\n\n.rbx-section-note { margin-top: 18px; font-size: var(--fs-small); color: var(--muted); }\n\n@media (max-width: 1080px) {\n  .rbx-head > div, .rbx-head > p { grid-column: 1 \/ -1; }\n  .rbx-head > p { margin-top: 16px; }\n}\n\n\n.rbx .rbx-label { font-family: var(--type-body); font-size: var(--fs-label); font-weight: var(--w-ui); letter-spacing: var(--ls-label); text-transform: uppercase; color: var(--accent); }\n\n.rbx-h2 { font-size: var(--fs-h2); line-height: 1.05; letter-spacing: var(--ls-head); }\n.rbx-lead { font-size: var(--fs-lead); line-height: var(--lh-lead); }\n.rbx-muted { color: var(--muted); }\n\n.rbx-display { font-size: var(--fs-display); line-height: 1; letter-spacing: var(--ls-display); padding-bottom: .1em; }\n.rbx-display > .rbx-step { display: block; padding-inline-start: var(--step); }\n\n.rbx-inline, .rbx-voices.is-stage .rbx-voice figcaption { --sep: 28px; display: flex; flex-flow: row wrap; column-gap: var(--sep); overflow: hidden; }\n.rbx-inline > *, .rbx-voices.is-stage .rbx-voice figcaption > * { position: relative; }\n.rbx-inline > *::before, .rbx-voices.is-stage .rbx-voice figcaption > *::before { content: \"\u00b7\"; content: \"\u00b7\" \/ \"\"; position: absolute; top: 0; right: 100%; width: var(--sep); text-align: center; color: var(--muted); }\n\n\n:is(.rbx, #rbx-lift) .rbx-btn {\n  display: inline-flex; align-items: center; gap: 12px; min-height: 50px; padding: 0 22px;\n  background: var(--btn-bg); color: var(--btn-ink); border: 0; border-radius: 2px;\n  font-family: var(--type-body); font-size: var(--fs-ui); font-weight: var(--w-button); text-decoration: none; cursor: pointer;\n  transition: background-color .25s var(--settle);\n}\n:is(.rbx, #rbx-lift) .rbx-btn--full { display: block; width: 100%; padding: 13px 12px; text-align: center; line-height: 1.5; text-wrap: balance; }\n:is(.rbx, #rbx-lift) .rbx-btn--full .rbx-arrow { display: inline-block; margin-left: 8px; }\n:is(.rbx, #rbx-lift) .rbx-btn:hover { background: var(--btn-bg-hover); color: var(--btn-ink); }\n@media (forced-colors: active) {\n  :is(.rbx, #rbx-lift) .rbx-btn { border: 1px solid ButtonText; }\n}\n.rbx-btn .rbx-arrow { transition: transform .25s var(--settle); }\n.rbx-btn:hover .rbx-arrow { transform: translateX(4px); }\n\n:is(.rbx, #rbx-lift) .rbx-link { font-size: var(--fs-ui); font-weight: var(--w-ui); text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 5px; }\n:is(.rbx, #rbx-lift) .rbx-link:hover { text-decoration-color: var(--blue); }\n:is(.rbx, #rbx-lift) .rbx-link .rbx-arrow { display: inline-block; transition: transform .2s var(--out); }\n:is(.rbx, #rbx-lift) .rbx-link:hover .rbx-arrow { transform: translateX(4px); }\n\n\n.rbx-ring { width: 22px; height: 22px; flex: none; overflow: visible; }\n.rbx-ring circle { fill: none; stroke-width: 7; }\n.rbx-ring .t { stroke: currentColor; opacity: .18; }\n.rbx-ring .s { stroke: var(--blue); stroke-dasharray: 17 100; transform-origin: 15px 15px; transform: rotate(-90deg); transition: transform .3s var(--settle); }\n\n\n.rbx-hero { position: relative; isolation: isolate; padding-top: clamp(40px, 4.5vw, 64px); --rb-campo-track: rgba(var(--ink-rgb), var(--a-track)); }\n.rbx-hero::after { content: \"\"; position: absolute; inset: 0; z-index: -1; pointer-events: none;\n  background: linear-gradient(0deg, var(--navy) 8%, rgba(var(--navy-rgb), .82) 30%, rgba(var(--navy-rgb), 0) 52%),\n    linear-gradient(100deg, var(--navy) 0%, rgba(var(--navy-rgb), .9) 40%, rgba(var(--navy-rgb), .25) 74%, rgba(var(--navy-rgb), .1) 100%); }\n.rbx-hero-copy { grid-column: 1 \/ -1; }\n.rbx-hero .rbx-display { margin-top: 14px; --rb-accent: var(--blue); }   .rbx-hero-lead { grid-column: 1 \/ span 6; margin-top: clamp(18px, 2vw, 26px); color: rgba(var(--ink-rgb), var(--a-lead)); max-width: 32em; }\n.rbx-hero-actions { grid-column: 1 \/ -1; display: flex; flex-wrap: wrap; align-items: center; gap: 14px 28px; margin-top: 24px; }\n:is(.rbx, #rbx-lift) .rbx-hero-actions .rbx-link { font-weight: 400; color: var(--ink-soft); text-decoration-thickness: 1px; }\n.rbx-hero-note { grid-column: 1 \/ span 6; margin-top: 14px; font-size: var(--fs-caption); color: var(--muted); }\n\n.rbx-start { margin-top: clamp(36px, 4vw, 52px); padding-bottom: clamp(44px, 4.8vw, 64px); }\n.rbx-start-head { grid-column: 1 \/ span 6; }\n.rbx-start-q { margin-top: 10px; font-family: var(--type-head); font-size: var(--fs-h4); font-weight: var(--w-head); line-height: 1.2; letter-spacing: var(--ls-sub); }\n.rbx-start-hint { margin-top: 6px; font-size: var(--fs-caption); color: var(--muted); }\n.rbx-routes { grid-column: 7 \/ -1; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--col-gap); border-top: 1px solid var(--rule); }   .rbx-routes li { display: flex; border-bottom: 1px solid var(--rule); }   :is(.rbx, #rbx-lift) .rbx-routes a { flex: 1; display: flex; gap: 12px; align-items: flex-start; padding: 15px 14px 15px 0; text-decoration: none; font-size: var(--fs-ui); line-height: 1.4; color: var(--ink); transition: color .25s var(--settle); }\n:is(.rbx, #rbx-lift) .rbx-routes a:hover { color: var(--accent); }\n.rbx-routes a:hover .rbx-ring .s { transform: rotate(0deg); }\n.rbx-routes .rbx-go { margin-left: auto; color: var(--accent); transition: transform .25s var(--settle); }\n.rbx-routes a:hover .rbx-go { transform: translate(3px, 3px); }\n\n@media (max-width: 1080px) {\n  .rbx-hero-copy, .rbx-hero-lead, .rbx-hero-note { grid-column: 1 \/ -1; }\n  .rbx-start-head, .rbx-routes { grid-column: 1 \/ -1; }\n  .rbx-routes { margin-top: 22px; }\n}\n@media (max-width: 760px) {\n  .rbx-routes { grid-template-columns: 1fr; }\n  .rbx-hero::after { background: linear-gradient(180deg, rgba(var(--navy-rgb), .55) 0%, rgba(var(--navy-rgb), .92) 55%, var(--navy) 100%); }\n}\n@media print {\n  .rbx-hero canvas { display: none !important; }\n}\n\n\n.rbx-pains { border-top: 1.5px solid var(--ink); }\n.rbx-pain-head { margin: 0; font-size: var(--fs-body); }   .rbx-pain { border-bottom: 1px solid var(--rule); }\n:is(.rbx, #rbx-lift) .rbx-pain-btn { width: 100%; display: grid; grid-template-columns: 22px 1fr auto; column-gap: 14px; row-gap: 6px; align-items: baseline; padding: 18px 0; color: var(--ink); }\n.rbx-pain-btn .rbx-ring { grid-row: 1; align-self: center; }\n.rbx-pain-topic { grid-column: 2; }   .rbx-pain-q { grid-column: 2; font-family: var(--type-head); font-size: var(--fs-h3); font-weight: var(--w-head); line-height: 1.2; letter-spacing: var(--ls-sub); text-wrap: balance; transition: color .2s var(--out); }\n.rbx-pain-go { grid-column: 3; grid-row: 1 \/ span 2; align-self: center; font-size: 1.25rem; line-height: 1; color: var(--ink); opacity: 0; transform: translateX(-8px); transition: opacity .2s var(--out), transform .2s var(--out); }\n.rbx-pain-detail { padding: 0 0 28px 36px; }\n.rbx-pain-kicker { display: none; }\n.rbx-pain-desc { font-size: var(--fs-body); max-width: 36em; }\n.rbx-response { max-width: 36em; margin-top: 18px; display: flex; flex-direction: column; gap: 6px; align-items: flex-start; font-size: var(--fs-body); line-height: 1.6; }\n:is(.rbx, #rbx-lift) .rbx-response .rbx-link { margin-top: 10px; color: var(--ink); }\n\n.rbx-pains.is-live .is-on .rbx-ring .s { transform: rotate(0deg); }\n@media (min-width: 901px) {\n  .rbx-pains.is-live { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--col-gap); align-items: start; }     .rbx-pains.is-live .rbx-pain { display: contents; }\n  .rbx-pains.is-live .rbx-pain-head { grid-column: 1 \/ span 6; margin-right: var(--col-gap); }\n  :is(.rbx, #rbx-lift) .rbx-pains.is-live .rbx-pain-btn { border-bottom: 1px solid var(--rule); }\n    .rbx-pains.is-live .rbx-pain-q { color: var(--ink-quiet); }\n  .rbx-pains.is-live .is-on .rbx-pain-q { color: var(--ink); }\n  .rbx-pains.is-live .is-on .rbx-pain-go { opacity: 1; transform: none; }\n  .rbx-pains.is-live .rbx-pain-btn:hover .rbx-pain-q { color: var(--ink); }\n    .rbx-pains.is-live::before { content: \"\"; grid-column: 7 \/ -1; grid-row: 1 \/ span var(--pains-n, 5); align-self: start; position: sticky; top: var(--header-offset); height: var(--pane-h, 100%); background: var(--navy); border-radius: 0 0 2px 2px; }\n  .rbx-pains.is-live .rbx-pain-detail {\n    grid-column: 7 \/ -1; grid-row: 1 \/ span var(--pains-n, 5); align-self: start; position: sticky; top: var(--header-offset); z-index: 1;\n    display: flex; flex-direction: column; min-height: var(--pane-h, 0px);\n    padding: 24px clamp(28px, 3vw, 44px) clamp(28px, 3vw, 40px);\n        --ink: var(--paper); --accent: var(--light); --focus: var(--light);\n    --rule-strong: rgba(var(--paper-rgb), var(--a-rule-strong));\n    color: var(--ink);\n        opacity: 0; visibility: hidden; transform: translateY(6px); filter: blur(2px);\n    transition: opacity .12s var(--out), transform .12s var(--out), filter .12s var(--out), visibility 0s linear .12s;\n  }\n    .rbx-pains.is-live .is-on .rbx-pain-detail { opacity: 1; visibility: visible; transform: none; filter: none; transition: opacity .26s var(--out), transform .26s var(--out), filter .26s var(--out), visibility 0s; }\n  .rbx-pains.is-live .rbx-pain-kicker { display: block; margin-bottom: 14px; }\n  .rbx-pains.is-live .rbx-pain-detail .rbx-pain-desc { max-width: 34em; margin-bottom: 28px; }\n  .rbx-pains.is-live .rbx-pain-detail .rbx-response { margin-top: auto; padding-top: 22px; border-top: 1px solid var(--rule-strong); }\n  :is(.rbx, #rbx-lift) .rbx-pains.is-live .rbx-pain-detail .rbx-link { margin-top: 14px; text-decoration-color: var(--blue); }\n  :is(.rbx, #rbx-lift) .rbx-pains.is-live .rbx-pain-detail .rbx-link:hover { text-decoration-color: var(--light); }\n}\n@media (max-width: 900px) {\n  .rbx-pains.is-live .rbx-pain:not(.is-on) .rbx-pain-detail { display: none; }\n    .rbx-pains.is-live .rbx-pain-go { width: 14px; height: 14px; font-size: 0; opacity: 1; transform: none; transition: transform .3s var(--settle);\n    background: linear-gradient(var(--ink), var(--ink)) center \/ 100% 2px no-repeat, linear-gradient(var(--ink), var(--ink)) center \/ 2px 100% no-repeat; }\n  .rbx-pains.is-live .is-on .rbx-pain-go { transform: rotate(45deg); }\n}\n@media (prefers-reduced-motion: reduce) {\n  .rbx-pains.is-live .rbx-pain-detail, .rbx-pains.is-live .is-on .rbx-pain-detail { transform: none; filter: none; }\n}\n@media (forced-colors: active) {\n  .rbx-pains.is-live::before { border: 1px solid CanvasText; }\n  :is(.rbx, #rbx-lift) .rbx-pains.is-live .rbx-pain-go { forced-color-adjust: none; background: linear-gradient(CanvasText, CanvasText) center \/ 100% 2px no-repeat, linear-gradient(CanvasText, CanvasText) center \/ 2px 100% no-repeat; }\n}\n@media print {\n  .rbx-pains.is-live { display: block; }\n  .rbx-pains.is-live::before { display: none; }\n  .rbx-pains.is-live .rbx-pain { display: block; }\n  .rbx-pains.is-live .rbx-pain-detail, .rbx-pains.is-live .rbx-pain:not(.is-on) .rbx-pain-detail { display: block !important; position: static; opacity: 1; visibility: visible; transform: none; filter: none; min-height: 0; color: inherit; padding: 0 0 20px 36px; }\n  .rbx-pains.is-live .rbx-pain-kicker, .rbx-pain-go { display: none; }\n    :is(.rbx, #rbx-lift) .rbx-pains.is-live .rbx-pain-detail, :is(.rbx, #rbx-lift) .rbx-pains.is-live .rbx-pain-detail * { color: #151F38 !important; text-decoration-color: currentColor !important; }\n}\n\n\n.rbx-steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(24px, 3vw, 48px); }\n.rbx-steps li { display: grid; gap: 12px; align-content: start; }\n.rbx-steps .rb-anel { justify-items: start; font-family: var(--type-head); font-size: 1.3rem; font-weight: var(--w-head); }   .rbx-steps .rb-anel-ring { max-width: 64px; }\n.rbx-steps .rb-anel > .rb-anel-figure { justify-self: start; width: 64px; text-align: center; }   .rbx [data-rbx-lit=\"1\"] { --rb-anel-2: rgba(var(--ink-rgb), var(--a-off)); --rb-anel-3: rgba(var(--ink-rgb), var(--a-off)); }\n.rbx [data-rbx-lit=\"2\"] { --rb-anel-3: rgba(var(--ink-rgb), var(--a-off)); }\n.rbx-steps h3 { font-family: var(--type-h3); font-weight: var(--w-h3); font-size: var(--fs-h4); line-height: 1.2; letter-spacing: var(--ls-sub); }\n.rbx-steps p { font-size: var(--fs-body); color: rgba(var(--ink-rgb), var(--a-note)); }\n\n@media (max-width: 760px) {\n  .rbx-steps { grid-template-columns: 1fr; }\n}\n\n\n.rbx-facts { row-gap: 12px; margin-top: clamp(24px, 3vw, 36px); padding-top: 20px; border-top: 1px solid var(--rule); font-size: var(--fs-small); font-weight: 400; line-height: 1.6; color: var(--muted); }\n\n\n.rbx-about { align-items: start; row-gap: clamp(32px, 3.6vw, 48px); }\n.rbx-portrait { grid-column: 1 \/ span 5; }\n.rbx-portrait img { width: 100%; aspect-ratio: 4 \/ 5; object-fit: cover; border-radius: 2px; }\n.rbx-portrait figcaption { display: flex; justify-content: space-between; gap: 12px; margin-top: 10px; font-size: var(--fs-caption); color: var(--muted); }\n.rbx-portrait figcaption strong { color: var(--ink); }\n.rbx-about-copy { grid-column: 7 \/ -1; }\n.rbx-about-copy .rbx-h2 { margin-block: 14px 18px; }\n.rbx-about-copy > p + p { margin-top: 12px; }\n.rbx-about-copy > p { max-width: 36em; }\n.rbx-about-facts { margin-top: 22px; border-top: 1px solid var(--rule); font-size: var(--fs-small); line-height: 1.5; color: var(--muted); }\n.rbx-about-facts li { padding: 9px 0; border-bottom: 1px solid var(--rule); }\n:is(.rbx, #rbx-lift) .rbx-about-copy .rbx-link { display: inline-block; margin-top: 20px; }\n.rbx-stats { grid-column: 1 \/ -1; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); column-gap: var(--col-gap); margin: 0; border-top: 1.5px solid var(--ink); }\n.rbx-stats > div { display: flex; flex-direction: column-reverse; justify-content: flex-end; gap: 4px; padding-top: 18px; }\n.rbx-stats dd { margin: 0; font-family: var(--type-head); font-size: var(--fs-h2); font-weight: var(--w-head); line-height: 1; letter-spacing: var(--ls-head); font-variant-numeric: tabular-nums; color: var(--ink); }\n.rbx-stats dt { font-size: var(--fs-small); line-height: 1.4; color: var(--muted); }\n\n@media (max-width: 1080px) {\n  .rbx-portrait figcaption { flex-direction: column; gap: 2px; }\n  .rbx-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 22px; }\n}\n@media (max-width: 760px) {\n  .rbx-portrait { grid-column: 1 \/ span 8; }\n  .rbx-about-copy { grid-column: 1 \/ -1; }\n}\n\n\n.rbx-voices-track { --per: 3; display: grid; grid-template-columns: repeat(var(--per), minmax(0, 1fr)); gap: 40px var(--col-gap); margin: 0; padding: 0; list-style: none; }   .rbx-voice figure { height: 100%; display: flex; flex-direction: column; padding-top: 18px; border-top: 1.5px solid var(--ink); }\n.rbx-voice blockquote { font-family: var(--type-quote); font-size: var(--fs-h4); line-height: 1.42; font-weight: 400; color: var(--ink); text-wrap: pretty; }\n.rbx-voice figcaption { margin-top: auto; padding-top: 18px; display: flex; flex-direction: column; font-size: var(--fs-small); line-height: 1.4; }\n.rbx-voice figcaption strong { color: var(--ink); }\n.rbx-voice figcaption span { color: var(--muted); }\n\n.rbx-head > .rbx-voices-slot { grid-column: 7 \/ -1; align-self: end; margin-bottom: calc((var(--fs-h2) * 1.05 - var(--dial)) \/ 2); }   .rbx-voices-nav { display: flex; align-items: center; gap: 24px; }\n.rbx-voices-side { position: relative; }\n.rbx-voices-peek { position: absolute; top: calc(100% + 8px); left: 0; width: max-content; max-width: min(28rem, calc(100vw - 2 * var(--gutter) - var(--dial) - 16px)); font-size: var(--fs-caption); line-height: 1.4; color: var(--ink); }\n.rbx-voices { --dial: 6.5rem; }   .rbx-voices-dial { position: relative; flex: none; width: var(--dial); aspect-ratio: 1; touch-action: manipulation; }\n.rbx-voices-dial svg { width: 100%; height: 100%; overflow: visible; transform: rotate(-90deg); }\n.rbx-voices-dial circle { fill: none; }\n.rbx-voices-dial .track { stroke: rgba(var(--ink-rgb), var(--a-dial)); stroke-width: 1.5; }\n.rbx-voices-dial .lit, .rbx-voices-dial .ghost { stroke-width: 11; }\n.rbx-voices-dial .c-blue { stroke: var(--blue); }\n.rbx-voices-dial .c-ink { stroke: var(--ink); }      .rbx-voices-dial .c-light { stroke: var(--light); }\n.rbx-voices-dial .ghost { opacity: 0; transition: opacity .15s var(--out); }\n.rbx-voices-dial .ghost.is-peek { opacity: .32; }\n.rbx-voices-dial .hit { stroke: transparent; stroke-width: 22; pointer-events: stroke; cursor: pointer; }\n.rbx-voices-index { position: absolute; inset: 0; display: grid; place-content: center; justify-items: center; text-align: center; pointer-events: none; }\n.rbx-voices-num { display: grid; overflow: hidden; font-family: var(--type-head); font-size: 1.5rem; font-weight: var(--w-head); line-height: 1.1; letter-spacing: -.03em; font-variant-numeric: tabular-nums; transition: color .15s var(--out); }   .rbx-voices-num b { grid-area: 1 \/ 1; font-weight: inherit; }\n.rbx-voices-of { font-size: var(--fs-caption); line-height: 1.3; color: var(--muted); }\n\n.rbx-voices.is-stage .rbx-voices-track { display: grid; grid-auto-flow: row; grid-template-columns: minmax(0, 1fr); grid-auto-columns: auto; max-width: 52rem; overflow: visible; scroll-snap-type: none; padding: 0; touch-action: pan-y; }\n.rbx-voices.is-stage .rbx-voice { grid-area: 1 \/ 1; align-self: start; visibility: hidden; }\n.rbx-voices.is-stage .rbx-voice.is-on, .rbx-voices.is-stage .rbx-voice.is-leaving { visibility: visible; }\n.rbx-voices.is-stage .rbx-voice figure { border-top: 0; padding-top: 0; height: auto; }\n.rbx-voices.is-stage .rbx-voice blockquote { font-size: var(--fs-quote); line-height: 1.38; letter-spacing: -.006em; text-indent: -.42em; }\n.rbx-voices.is-stage .rbx-voice blockquote .w { display: inline-block; max-width: 100%; overflow-wrap: anywhere; text-indent: 0; }   .rbx-voices.is-stage .rbx-voice figcaption { margin-top: 0; padding-top: 20px; row-gap: 4px; align-items: baseline; font-size: var(--fs-ui); }\n\n.rbx-voices-ctrl { display: flex; gap: 10px; }\n:is(.rbx, #rbx-lift) .rbx-voices-btn { position: relative; width: 44px; height: 44px; display: grid; place-items: center; color: var(--ink); border: 1.5px solid rgba(var(--ink-rgb), var(--a-control)); border-radius: 50%; transition: border-color .2s var(--out), background-color .2s var(--out), color .2s var(--out), transform .16s var(--out); }\n:is(.rbx, #rbx-lift) .rbx-voices-btn:active { transform: scale(.95); }\n:is(.rbx, #rbx-lift) .rbx-voices-btn:focus-visible { outline: 3px solid var(--focus); outline-offset: 3px; }\n@media (hover: hover) and (pointer: fine) {\n  :is(.rbx, #rbx-lift) .rbx-voices-btn:hover { border-color: var(--ink); background: var(--ink); color: var(--ground); }\n}\n.rbx-voices-btn .ico { grid-area: 1 \/ 1; width: 14px; height: 14px; transition: opacity .16s var(--out), transform .16s var(--out), filter .16s var(--out); }\n.rbx-voices-btn .ico.is-off { opacity: 0; transform: scale(.6); filter: blur(2px); }\n.rbx-voices-clock { position: absolute; inset: -1.5px; width: calc(100% + 3px); height: calc(100% + 3px); transform: rotate(-90deg); overflow: visible; pointer-events: none; transition: opacity .2s var(--out); }\n.rbx-voices-clock circle { fill: none; stroke: var(--blue); stroke-width: 2.5; stroke-dasharray: 100; stroke-dashoffset: 100; }\n.rbx-voices.is-held .rbx-voices-clock { opacity: .4; }\n\n@media (max-width: 1080px) {\n  .rbx-voices-track { --per: 2; }\n  .rbx-head > .rbx-voices-slot { grid-column: 1 \/ -1; margin: 24px 0 0; }\n}\n@media (max-width: 760px) {\n  .rbx-voices-track { --per: 1; }\n  .rbx-voices.is-stage .rbx-voice figcaption { flex-direction: column; row-gap: 2px; }\n  .rbx-voices { --dial: 6rem; }\n  .rbx-voices-dial .lit, .rbx-voices-dial .ghost { stroke-width: 12; }\n  .rbx-voices-num { font-size: 1.375rem; }\n}\n@media (max-width: 400px) {\n    .rbx-voices-nav { gap: 16px; }\n  .rbx-voices { --dial: 5.5rem; }\n  .rbx-voices-ctrl { gap: 8px; }\n}\n@media print {\n  .rbx-voices.is-stage .rbx-voice { visibility: visible; grid-area: auto; }\n  .rbx-voices.is-stage .rbx-voices-track { grid-auto-flow: row; }\n  .rbx-voices-slot { display: none !important; }\n}\n\n\n.rbx-contact { row-gap: 32px; align-items: start; }\n.rbx-contact-copy { grid-column: 1 \/ span 5; }\n.rbx-contact-copy .rbx-h2 { margin-block: 14px 16px; }\n.rbx-contact-copy > p { color: var(--ink-soft); }\n.rbx-expect { margin-top: 24px; padding-top: 16px; border-top: 1px solid var(--rule); }\n.rbx-expect p { margin-top: 6px; color: var(--muted); font-size: var(--fs-small); }\n.rbx-form { grid-column: 7 \/ -1; padding: clamp(22px, 2.6vw, 36px); border-radius: 2px; --rule: var(--rule-strong); }\n.rbx-form fieldset { border: 0; }\n.rbx-form legend, .rbx-field > label { display: block; font-size: var(--fs-ui); line-height: 1.4; margin-bottom: 10px; font-weight: var(--w-strong); text-wrap: balance; }\n.rbx-optional { font-weight: 400; color: var(--muted); font-size: var(--fs-caption); margin-left: 6px; white-space: nowrap; }\n.rbx-choices { display: grid; border-top: 1px solid var(--rule); }\n.rbx-choice { display: flex; gap: 12px; align-items: center; padding: 11px 4px; border-bottom: 1px solid var(--rule); cursor: pointer; font-size: var(--fs-small); }\n.rbx-choice input { appearance: none; width: 18px; height: 18px; margin: 0; flex: none; border: 2px solid var(--ink); border-radius: 50%; display: grid; place-content: center; cursor: pointer; }\n.rbx-choice input::before { content: \"\"; width: 8px; height: 8px; border-radius: 50%; background: var(--accent);   transform: scale(0); transition: transform .2s var(--settle); }\n.rbx-choice input:checked::before { transform: scale(1); }\n.rbx-field { display: block; margin-top: 18px; }\n.rbx-hint { margin: -4px 0 10px; font-size: var(--fs-small); line-height: 1.45; color: var(--muted); text-wrap: pretty; }\n:is(.rbx, #rbx-lift) .rbx-field input, :is(.rbx, #rbx-lift) .rbx-field textarea { width: 100%; background: #fff; border: 1.5px solid var(--navy-3); border-radius: 2px; padding: 11px 14px; font-family: var(--type-body); font-size: var(--fs-ui); line-height: 1.4; transition: border-color .2s var(--settle); }\n.rbx-field input::placeholder, .rbx-field textarea::placeholder { color: var(--ink-quiet); opacity: 1; }   :is(.rbx, #rbx-lift) .rbx-field input:focus, :is(.rbx, #rbx-lift) .rbx-field textarea:focus { border-color: var(--ink); outline: 3px solid var(--focus); outline-offset: 2px; box-shadow: none; }\n.rbx-field textarea { resize: vertical; min-height: 96px; }\n:is(.rbx, #rbx-lift) .rbx-form .rbx-btn { margin-top: 24px; }\n.rbx-form-note { margin-top: 12px; font-size: var(--fs-caption); color: var(--muted); }\n:is(.rbx, #rbx-lift) .rbx-form-note a { color: var(--accent); text-decoration: underline; }\n.rbx-live { margin-top: 8px; font-size: var(--fs-caption); color: var(--muted); min-height: 1.4em; }\n\n@media (forced-colors: active) {\n  :is(.rbx, #rbx-lift) .rbx-choice input:checked::before { forced-color-adjust: none; background: CanvasText; }\n}\n@media (max-width: 1080px) {\n  .rbx-contact-copy, .rbx-form { grid-column: 1 \/ -1; }\n}\n\n\n.rbx-faq { align-items: start; }\n.rbx-faq-head { grid-column: 1 \/ span 6; position: sticky; top: var(--header-offset); }\n.rbx-faq-head .rbx-h2 { margin-top: 14px; }\n.rbx-faq-list { grid-column: 7 \/ -1; border-top: 1.5px solid var(--ink); }\n.rbx-faq details { border-bottom: 1px solid var(--rule); }\n.rbx-faq summary { display: flex; justify-content: space-between; gap: 20px; padding: 15px 0; cursor: pointer; list-style: none; font-size: var(--fs-body); line-height: 1.4; }\n.rbx-faq summary::-webkit-details-marker { display: none; }\n.rbx-faq summary::after { content: \"\"; flex: none; width: 14px; height: 14px; margin-top: 5px;\n  background: linear-gradient(var(--ink), var(--ink)) center \/ 100% 2px no-repeat, linear-gradient(var(--ink), var(--ink)) center \/ 2px 100% no-repeat;\n  transition: transform .3s var(--settle); }\n.rbx-faq details[open] summary::after { transform: rotate(45deg); }\n.rbx-faq details p { padding: 0 40px 20px 0; font-size: var(--fs-body); color: var(--muted); max-width: 42em; }\n\n@media (forced-colors: active) {\n  :is(.rbx, #rbx-lift) .rbx-faq summary::after { forced-color-adjust: none; background: linear-gradient(CanvasText, CanvasText) center \/ 100% 2px no-repeat, linear-gradient(CanvasText, CanvasText) center \/ 2px 100% no-repeat; }\n}\n@media (max-width: 1080px) {\n  .rbx-faq-head { position: static; grid-column: 1 \/ -1; margin-bottom: 28px; }\n  .rbx-faq-list { grid-column: 1 \/ -1; }\n}\n@media (max-width: 760px) {\n  .rbx-faq details p { padding-right: 0; }\n}\n\n\n.rbx-close { padding-top: clamp(28px, 3vw, 40px); }\n.rbx-close .rb-trama { font-size: calc(var(--fs-display) * .9);   color: var(--navy-2); --rb-accent: var(--navy-3); }\n.rbx-close-body { padding-block: clamp(32px, 4vw, 52px) clamp(28px, 3vw, 44px); align-items: end; row-gap: 24px; }\n.rbx-close-body > div { grid-column: 1 \/ span 6; min-width: 0; }\n.rbx-close-body p { margin-top: 16px; color: var(--ink-soft); max-width: 32em; }\n:is(.rbx, #rbx-lift) .rbx-close-body .rbx-btn { grid-column: 7 \/ -1; justify-self: end; }\n\n.rbx-foot { display: grid; grid-template-columns: auto 1fr auto auto; align-items: center; gap: 16px 32px; padding-block: 24px 36px; border-top: 1px solid var(--rule); font-size: var(--fs-small); color: var(--muted); }\n:is(.rbx, #rbx-lift) .rbx-foot-mark { display: block; color: var(--ink); line-height: 0; }\n.rbx-foot-sym { width: 34px; height: auto; display: block; }\n.rbx-foot-sym .acc { fill: var(--light); }\n.rbx-foot-sym .blu { fill: var(--blue); }   .rbx-foot-links { display: flex; flex-wrap: wrap; gap: 6px 24px; }\n:is(.rbx, #rbx-lift) .rbx-foot-links a { color: var(--muted); text-decoration: none; transition: color .2s var(--settle); }\n:is(.rbx, #rbx-lift) .rbx-foot-links a:hover { color: var(--ink); }\n.rbx-foot-social { display: flex; gap: 6px; margin: 0; padding: 0; list-style: none; }\n:is(.rbx, #rbx-lift) .rbx-foot-social a { width: 40px; height: 40px; display: grid; place-items: center; color: var(--muted); border-radius: 2px; transition: color .2s var(--settle), background-color .2s var(--settle); }\n:is(.rbx, #rbx-lift) .rbx-foot-social a:hover { color: var(--ink); background: var(--navy-2); }   .rbx-foot-social svg { width: 18px; height: 18px; }\n\n@media (max-width: 1080px) {\n  .rbx-foot { grid-template-columns: auto 1fr auto; grid-template-areas: \"mark . social\" \"links links links\" \"copy copy copy\"; }\n  :is(.rbx, #rbx-lift) .rbx-foot-mark { grid-area: mark; }\n  .rbx-foot-social { grid-area: social; justify-self: end; }\n  .rbx-foot-links { grid-area: links; }\n  .rbx-foot-copy { grid-area: copy; }\n  .rbx-close-body > div, :is(.rbx, #rbx-lift) .rbx-close-body .rbx-btn { grid-column: 1 \/ -1; justify-self: start; }\n}\n@media print {\n  .rb-trama, .rbx-foot-social { display: none !important; }\n}\n\n\n.rbx-sticky {\n  position: fixed; left: 22px; bottom: calc(22px + env(safe-area-inset-bottom, 0px)); z-index: 60;\n  display: flex; align-items: center; gap: 16px; min-height: 58px; max-width: calc(100vw - 118px);     padding: 6px 6px 6px 18px; border-radius: 2px;\n  --edge: var(--paper); background: var(--ground); color: var(--ink); box-shadow: 0 0 0 1.5px var(--edge);\n  font-size: var(--fs-small); line-height: 1.3;\n  transition: opacity .2s var(--settle), transform .2s var(--settle), visibility 0s, background-color .2s var(--settle), color .2s var(--settle), box-shadow .2s var(--settle);\n}\n.rbx-sticky[data-over=\"navy\"] { --edge: var(--navy); }   .rbx-sticky[data-over=\"blue\"] { --edge: var(--blue); }   .rbx-sticky.is-away { opacity: 0; transform: translateY(8px); visibility: hidden; transition: opacity .15s var(--settle), transform .15s var(--settle), visibility 0s linear .15s; }\n:is(.rbx, #rbx-lift) .rbx-sticky .rbx-btn { min-height: 46px; padding: 0 16px; font-size: var(--fs-small); }\n:is(.rbx, #rbx-lift) .rbx-sticky .rbx-btn:focus-visible { outline-offset: 2px; }   @media (prefers-reduced-motion: reduce) { .rbx-sticky, .rbx-sticky.is-away { transform: none; } }\n@media (forced-colors: active) { .rbx-sticky { border: 1px solid CanvasText; } }\nhtml:has(.rbx-page .rbx-sticky:not([hidden])) { scroll-padding-bottom: calc(96px + env(safe-area-inset-bottom, 0px)); }\n\n@media (max-width: 760px) {\n  .rbx-sticky > span { display: none; }\n  .rbx-sticky { padding: 6px; }\n}\n@media print {\n  .rbx-sticky { display: none !important; }\n}\n\n\n.rbx-js .rbx-rise { opacity: 0; transform: translateY(20px); transition: opacity .7s var(--settle), transform .7s var(--settle); }\n.rbx-js .rbx-rise.is-in { opacity: 1; transform: none; }\n@media (prefers-reduced-motion: reduce) { .rbx-js .rbx-rise { opacity: 1; transform: none; transition: none; } }\n@media print {\n  .rbx-js .rbx-rise { opacity: 1; transform: none; }\n}\n\n.elementor-location-footer .e-con:not(:has(.elementor-element-wa9f1b3)) { display: none; }\n.elementor-location-footer .e-con:has(.elementor-element-wa9f1b3) { padding: 0; min-height: 0; }\n@media print { #rb-wa-fab, .elementor-element-wa9f1b3 { display: none !important; } }\n\n<\/style>\n<main id=\"content\" tabindex=\"-1\">\n<div class=\"rbx rbx-page\" lang=\"pt-BR\">\n  <section class=\"rbx-hero rbx-navy\" data-rbx-sticky=\"hide\" data-rb-motion=\"campo\" data-cell=\"60\" aria-labelledby=\"rbx-title\">\n    <div class=\"rbx-wrap rbx-grid\">\n      <div class=\"rbx-hero-copy\">\n        <p class=\"rbx-label\">Consultoria de neg\u00f3cios<\/p>\n        <h1 id=\"rbx-title\" class=\"rbx-display\" data-rb-motion=\"regra\">Mais resultado. <span class=\"rbx-step\">Menos depend\u00eancia <em>de voc\u00ea.<\/em><\/span><\/h1>\n      <\/div>\n      <p class=\"rbx-hero-lead rbx-lead\">Lucro apertado, vendas inst\u00e1veis ou uma decis\u00e3o importante pela frente? Rodolfo Basilio ajuda voc\u00ea a entender o problema e definir o pr\u00f3ximo passo, com os n\u00fameros na mesa e aten\u00e7\u00e3o ao mercado onde voc\u00ea opera.<\/p>\n      <div class=\"rbx-hero-actions\">\n        <a class=\"rbx-btn\" href=\"#rbx-conversa\">Quero discutir meu caso <span class=\"rbx-arrow\" aria-hidden=\"true\">\u2192<\/span><\/a>\n        <a class=\"rbx-link\" href=\"#rbx-situacoes\">Veja como Rodolfo pode ajudar \u2193<\/a>\n      <\/div>\n      <p class=\"rbx-hero-note\">Uma decis\u00e3o pontual, um projeto ou acompanhamento. O seu caso define o trabalho.<\/p>\n    <\/div>\n\n    <nav class=\"rbx-wrap rbx-grid rbx-start\" aria-labelledby=\"rbx-start-title\">\n      <div class=\"rbx-start-head\">\n        <p class=\"rbx-label\">Seu ponto de partida<\/p>\n        <p class=\"rbx-start-q\" id=\"rbx-start-title\">O que precisa mudar agora?<\/p>\n        <p class=\"rbx-start-hint\">Escolha a situa\u00e7\u00e3o que mais se aproxima da sua.<\/p>\n      <\/div>\n      <ol class=\"rbx-routes\" role=\"list\">\n        <li><a href=\"#rbx-lucro\"><svg class=\"rbx-ring\" viewBox=\"0 0 30 30\" aria-hidden=\"true\"><circle class=\"t\" cx=\"15\" cy=\"15\" r=\"11\"\/><circle class=\"s\" cx=\"15\" cy=\"15\" r=\"11\" pathLength=\"100\"\/><\/svg><span>Quero melhorar o lucro e as vendas.<\/span><span class=\"rbx-go\" aria-hidden=\"true\">\u2198<\/span><\/a><\/li>\n        <li><a href=\"#rbx-operacao\"><svg class=\"rbx-ring\" viewBox=\"0 0 30 30\" aria-hidden=\"true\"><circle class=\"t\" cx=\"15\" cy=\"15\" r=\"11\"\/><circle class=\"s\" cx=\"15\" cy=\"15\" r=\"11\" pathLength=\"100\"\/><\/svg><span>Quero que a empresa dependa menos de mim.<\/span><span class=\"rbx-go\" aria-hidden=\"true\">\u2198<\/span><\/a><\/li>\n        <li><a href=\"#rbx-decisao\"><svg class=\"rbx-ring\" viewBox=\"0 0 30 30\" aria-hidden=\"true\"><circle class=\"t\" cx=\"15\" cy=\"15\" r=\"11\"\/><circle class=\"s\" cx=\"15\" cy=\"15\" r=\"11\" pathLength=\"100\"\/><\/svg><span>Preciso avaliar uma decis\u00e3o importante.<\/span><span class=\"rbx-go\" aria-hidden=\"true\">\u2198<\/span><\/a><\/li>\n        <li><a href=\"#rbx-urgencia\"><svg class=\"rbx-ring\" viewBox=\"0 0 30 30\" aria-hidden=\"true\"><circle class=\"t\" cx=\"15\" cy=\"15\" r=\"11\"\/><circle class=\"s\" cx=\"15\" cy=\"15\" r=\"11\" pathLength=\"100\"\/><\/svg><span>Tenho um problema urgente no neg\u00f3cio.<\/span><span class=\"rbx-go\" aria-hidden=\"true\">\u2198<\/span><\/a><\/li>\n      <\/ol>\n    <\/nav>\n  <\/section>\n\n  <section class=\"rbx-section\" id=\"rbx-situacoes\" aria-labelledby=\"rbx-situacoes-title\">\n    <div class=\"rbx-wrap\">\n      <div class=\"rbx-grid rbx-head\">\n        <div><p class=\"rbx-label\">O seu neg\u00f3cio, na pr\u00e1tica<\/p><h2 class=\"rbx-h2\" id=\"rbx-situacoes-title\">O que precisa mudar?<\/h2><\/div>\n        <p class=\"rbx-muted\">O trabalho come\u00e7a pelo que est\u00e1 limitando o seu resultado ou pela decis\u00e3o que voc\u00ea precisa tomar.<\/p>\n      <\/div>\n      <div class=\"rbx-pains\" data-rbx-pains>\n        <article class=\"rbx-pain\">\n          <h3 class=\"rbx-pain-head\" id=\"rbx-lucro\"><span class=\"rbx-pain-btn\"><svg class=\"rbx-ring\" viewBox=\"0 0 30 30\" aria-hidden=\"true\"><circle class=\"t\" cx=\"15\" cy=\"15\" r=\"11\"\/><circle class=\"s\" cx=\"15\" cy=\"15\" r=\"11\" pathLength=\"100\"\/><\/svg><span class=\"rbx-pain-topic rbx-label\">Lucro e caixa<\/span><span class=\"rbx-pain-q\">Trabalho muito, vendo, mas o dinheiro n\u00e3o sobra.<\/span><span class=\"rbx-pain-go\" aria-hidden=\"true\">\u2192<\/span><\/span><\/h3>\n          <div class=\"rbx-pain-detail\" id=\"rbx-lucro-detalhe\" role=\"region\" aria-labelledby=\"rbx-lucro\">\n            <p class=\"rbx-pain-kicker rbx-label\" aria-hidden=\"true\">Lucro e caixa<\/p>\n            <p class=\"rbx-pain-desc\">Faturar em outra moeda n\u00e3o garante que o neg\u00f3cio esteja remunerando voc\u00ea como deveria. Os pre\u00e7os precisam fazer sentido para o cliente e cobrir os sal\u00e1rios, o aluguel e os demais custos de onde a empresa opera.<\/p>\n            <div class=\"rbx-response\"><strong class=\"rbx-label\">O que podemos trabalhar<\/strong><p>Pre\u00e7os, custos, margens e recebimentos: entender onde o resultado se perde e definir o que mudar primeiro.<\/p><a class=\"rbx-link\" href=\"#rbx-conversa\" data-rbx-reason=\"resultado\">Quero melhorar meu resultado <span class=\"rbx-arrow\" aria-hidden=\"true\">\u2192<\/span><\/a><\/div>\n          <\/div>\n        <\/article>\n        <article class=\"rbx-pain\">\n          <h3 class=\"rbx-pain-head\" id=\"rbx-vendas\"><span class=\"rbx-pain-btn\"><svg class=\"rbx-ring\" viewBox=\"0 0 30 30\" aria-hidden=\"true\"><circle class=\"t\" cx=\"15\" cy=\"15\" r=\"11\"\/><circle class=\"s\" cx=\"15\" cy=\"15\" r=\"11\" pathLength=\"100\"\/><\/svg><span class=\"rbx-pain-topic rbx-label\">Clientes e vendas<\/span><span class=\"rbx-pain-q\">Preciso de clientes melhores e vendas mais consistentes.<\/span><span class=\"rbx-pain-go\" aria-hidden=\"true\">\u2192<\/span><\/span><\/h3>\n          <div class=\"rbx-pain-detail\" id=\"rbx-vendas-detalhe\" role=\"region\" aria-labelledby=\"rbx-vendas\">\n            <p class=\"rbx-pain-kicker rbx-label\" aria-hidden=\"true\">Clientes e vendas<\/p>\n            <p class=\"rbx-pain-desc\">Voc\u00ea sabe entregar. O desafio \u00e9 fazer os clientes certos reconhecerem esse valor: entender como escolhem fornecedores, o que gera confian\u00e7a e como as negocia\u00e7\u00f5es acontecem nesse mercado.<\/p>\n            <div class=\"rbx-response\"><strong class=\"rbx-label\">O que podemos trabalhar<\/strong><p>Oferta, pre\u00e7os, abordagem comercial, canais e parcerias para reduzir a depend\u00eancia de vendas ocasionais.<\/p><a class=\"rbx-link\" href=\"#rbx-conversa\" data-rbx-reason=\"resultado\">Quero discutir minhas vendas <span class=\"rbx-arrow\" aria-hidden=\"true\">\u2192<\/span><\/a><\/div>\n          <\/div>\n        <\/article>\n        <article class=\"rbx-pain\">\n          <h3 class=\"rbx-pain-head\" id=\"rbx-operacao\"><span class=\"rbx-pain-btn\"><svg class=\"rbx-ring\" viewBox=\"0 0 30 30\" aria-hidden=\"true\"><circle class=\"t\" cx=\"15\" cy=\"15\" r=\"11\"\/><circle class=\"s\" cx=\"15\" cy=\"15\" r=\"11\" pathLength=\"100\"\/><\/svg><span class=\"rbx-pain-topic rbx-label\">Equipe e opera\u00e7\u00e3o<\/span><span class=\"rbx-pain-q\">Se eu parar, a empresa para.<\/span><span class=\"rbx-pain-go\" aria-hidden=\"true\">\u2192<\/span><\/span><\/h3>\n          <div class=\"rbx-pain-detail\" id=\"rbx-operacao-detalhe\" role=\"region\" aria-labelledby=\"rbx-operacao\">\n            <p class=\"rbx-pain-kicker rbx-label\" aria-hidden=\"true\">Equipe e opera\u00e7\u00e3o<\/p>\n            <p class=\"rbx-pain-desc\">O telefone continua tocando quando voc\u00ea viaja, est\u00e1 em outro fuso ou tenta passar tempo com a fam\u00edlia. Contratar mais gente n\u00e3o resolve se todas as decis\u00f5es continuam voltando para voc\u00ea.<\/p>\n            <div class=\"rbx-response\"><strong class=\"rbx-label\">O que podemos trabalhar<\/strong><p>Responsabilidades e delega\u00e7\u00e3o, considerando o custo e as condi\u00e7\u00f5es de formar uma equipe onde o neg\u00f3cio funciona.<\/p><a class=\"rbx-link\" href=\"#rbx-conversa\" data-rbx-reason=\"operacao\">Quero organizar minha opera\u00e7\u00e3o <span class=\"rbx-arrow\" aria-hidden=\"true\">\u2192<\/span><\/a><\/div>\n          <\/div>\n        <\/article>\n        <article class=\"rbx-pain\">\n          <h3 class=\"rbx-pain-head\" id=\"rbx-decisao\"><span class=\"rbx-pain-btn\"><svg class=\"rbx-ring\" viewBox=\"0 0 30 30\" aria-hidden=\"true\"><circle class=\"t\" cx=\"15\" cy=\"15\" r=\"11\"\/><circle class=\"s\" cx=\"15\" cy=\"15\" r=\"11\" pathLength=\"100\"\/><\/svg><span class=\"rbx-pain-topic rbx-label\">Investimento e decis\u00f5es<\/span><span class=\"rbx-pain-q\">Tenho uma decis\u00e3o grande e preciso entender o risco.<\/span><span class=\"rbx-pain-go\" aria-hidden=\"true\">\u2192<\/span><\/span><\/h3>\n          <div class=\"rbx-pain-detail\" id=\"rbx-decisao-detalhe\" role=\"region\" aria-labelledby=\"rbx-decisao\">\n            <p class=\"rbx-pain-kicker rbx-label\" aria-hidden=\"true\">Investimento e decis\u00f5es<\/p>\n            <p class=\"rbx-pain-desc\">Abrir, comprar, expandir, trazer um s\u00f3cio ou vender exige olhar al\u00e9m da oportunidade no papel. Os custos, os contratos e a forma de fazer neg\u00f3cio naquele mercado podem mudar a conta.<\/p>\n            <div class=\"rbx-response\"><strong class=\"rbx-label\">O que podemos trabalhar<\/strong><p>Comparar caminhos, testar os n\u00fameros e avaliar as consequ\u00eancias antes de voc\u00ea comprometer o capital que construiu.<\/p><a class=\"rbx-link\" href=\"#rbx-conversa\" data-rbx-reason=\"decisao\">Quero avaliar minha decis\u00e3o <span class=\"rbx-arrow\" aria-hidden=\"true\">\u2192<\/span><\/a><\/div>\n          <\/div>\n        <\/article>\n        <article class=\"rbx-pain\">\n          <h3 class=\"rbx-pain-head\" id=\"rbx-urgencia\"><span class=\"rbx-pain-btn\"><svg class=\"rbx-ring\" viewBox=\"0 0 30 30\" aria-hidden=\"true\"><circle class=\"t\" cx=\"15\" cy=\"15\" r=\"11\"\/><circle class=\"s\" cx=\"15\" cy=\"15\" r=\"11\" pathLength=\"100\"\/><\/svg><span class=\"rbx-pain-topic rbx-label\">Situa\u00e7\u00f5es urgentes<\/span><span class=\"rbx-pain-q\">Meu neg\u00f3cio est\u00e1 em dificuldade e preciso agir agora.<\/span><span class=\"rbx-pain-go\" aria-hidden=\"true\">\u2192<\/span><\/span><\/h3>\n          <div class=\"rbx-pain-detail\" id=\"rbx-urgencia-detalhe\" role=\"region\" aria-labelledby=\"rbx-urgencia\">\n            <p class=\"rbx-pain-kicker rbx-label\" aria-hidden=\"true\">Situa\u00e7\u00f5es urgentes<\/p>\n            <p class=\"rbx-pain-desc\">As cobran\u00e7as chegam, os prazos apertam e as orienta\u00e7\u00f5es do contador, do banco e de outros profissionais precisam virar decis\u00f5es. Discutir o caso em portugu\u00eas, considerando as condi\u00e7\u00f5es de onde a empresa opera, ajuda a organizar o problema.<\/p>\n            <div class=\"rbx-response\"><strong class=\"rbx-label\">O que podemos trabalhar<\/strong><p>Avaliar o que \u00e9 vi\u00e1vel e o que precisa ser feito primeiro, junto aos especialistas necess\u00e1rios.<\/p><a class=\"rbx-link\" href=\"#rbx-conversa\" data-rbx-reason=\"urgencia\">Quero explicar minha situa\u00e7\u00e3o <span class=\"rbx-arrow\" aria-hidden=\"true\">\u2192<\/span><\/a><\/div>\n          <\/div>\n        <\/article>\n      <\/div>\n      <p class=\"rbx-section-note\">Voc\u00ea pode trazer mais de um desafio. A primeira conversa ajuda a identificar por onde come\u00e7ar.<\/p>\n    <\/div>\n  <\/section>\n\n  <section class=\"rbx-section rbx-navy\" id=\"rbx-metodo\" aria-labelledby=\"rbx-metodo-title\">\n    <div class=\"rbx-wrap\">\n      <div class=\"rbx-grid rbx-head\">\n        <div><p class=\"rbx-label\">Como funciona<\/p><h2 class=\"rbx-h2\" id=\"rbx-metodo-title\">Do problema aos pr\u00f3ximos passos.<\/h2><\/div>\n        <p class=\"rbx-muted\">O pa\u00eds, o momento da empresa e os recursos dispon\u00edveis fazem parte da an\u00e1lise.<\/p>\n      <\/div>\n      <ol class=\"rbx-steps\" role=\"list\">\n        <li class=\"rbx-rise\"><div data-rb-motion=\"anel\" data-rbx-lit=\"1\"><span class=\"rb-anel-figure\">1<\/span><\/div><h3>Entender o caso<\/h3><p>Voc\u00ea apresenta o neg\u00f3cio, o que precisa resolver e os prazos envolvidos. A conversa inicial serve para avaliar como Rodolfo pode ajudar.<\/p><\/li>\n        <li class=\"rbx-rise\"><div data-rb-motion=\"anel\" data-rbx-lit=\"2\"><span class=\"rb-anel-figure\">2<\/span><\/div><h3>Definir o trabalho<\/h3><p>Uma decis\u00e3o pontual, um projeto ou acompanhamento. Entregas, responsabilidades, dura\u00e7\u00e3o e investimento s\u00e3o definidos antes da contrata\u00e7\u00e3o.<\/p><\/li>\n        <li class=\"rbx-rise\"><div data-rb-motion=\"anel\"><span class=\"rb-anel-figure\">3<\/span><\/div><h3>Colocar as prioridades em pr\u00e1tica<\/h3><p>Conforme o trabalho contratado, Rodolfo ajuda a organizar as a\u00e7\u00f5es, apoiar decis\u00f5es e acompanhar os ajustes necess\u00e1rios.<\/p><\/li>\n      <\/ol>\n      <ul class=\"rbx-facts rbx-inline\" role=\"list\"><li>N\u00fameros do seu neg\u00f3cio<\/li><li>Contexto do seu mercado<\/li><li>Responsabilidades definidas<\/li><\/ul>\n    <\/div>\n  <\/section>\n\n  <section class=\"rbx-section\" id=\"rbx-rodolfo\" aria-labelledby=\"rbx-rodolfo-title\">\n    <div class=\"rbx-wrap rbx-grid rbx-about\">\n      <figure class=\"rbx-portrait rbx-rise\">\n        <img loading=\"lazy\" src=\"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2026\/03\/sobre-rodolfo.webp\" alt=\"Rodolfo Basilio, consultor de neg\u00f3cios\" width=\"800\" height=\"1000\" loading=\"lazy\" decoding=\"async\">\n        <figcaption><strong>Rodolfo Basilio<\/strong><span>Consultor de neg\u00f3cios<\/span><\/figcaption>\n      <\/figure>\n      <div class=\"rbx-about-copy\">\n        <p class=\"rbx-label\">Quem vai olhar para o seu neg\u00f3cio<\/p>\n        <h2 class=\"rbx-h2\" id=\"rbx-rodolfo-title\">20 empresas em 20 anos.<\/h2>\n        <p>Come\u00e7ou a empreender antes dos 20 anos e n\u00e3o parou. Construiu neg\u00f3cios em contabilidade, fintech, constru\u00e7\u00e3o, gastronomia, m\u00eddia e consultoria, em tr\u00eas continentes.<\/p>\n        <p>Por tr\u00e1s de marcas como Angra, Remitec, Garan, Vertice Services, Vertice Fintech e Rodolfo Basilio Consultoria. J\u00e1 construiu, escalou, vendeu e, quando n\u00e3o funcionou, fechou e seguiu em frente.<\/p>\n        <p>Hoje trabalha exclusivamente com empres\u00e1rios que querem crescer com m\u00e9todo. Tudo o que ensina vem da pr\u00f3pria experi\u00eancia operando no dia a dia, n\u00e3o de teoria.<\/p>\n        <ul class=\"rbx-about-facts\" role=\"list\">\n          <li>Presente em 8+ pa\u00edses: Reino Unido, Brasil, Portugal, EUA, Nova Zel\u00e2ndia, Hong Kong, Espanha<\/li>\n          <li>Fundou a maior consultoria cont\u00e1bil brasileira no Reino Unido<\/li>\n          <li>Experi\u00eancia operacional direta em cada neg\u00f3cio que fundou<\/li>\n          <li>J\u00e1 construiu, escalou, vendeu e encerrou empresas<\/li>\n          <li>Refer\u00eancia para empres\u00e1rios brasileiros fora do Brasil<\/li>\n        <\/ul>\n        <a class=\"rbx-link\" href=\"https:\/\/rodolfobasilio.com\/sobre\/\">Conhe\u00e7a a trajet\u00f3ria de Rodolfo \u2192<\/a>\n      <\/div>\n      <!-- 20 anos and 20 empresas fundadas are the heading; the row carries the rest of the record -->\n      <dl class=\"rbx-stats\">\n        <div><dt>Empresas analisadas<\/dt><dd>10k+<\/dd><\/div>\n        <div><dt>Empresas de sucesso<\/dt><dd>10<\/dd><\/div>\n        <div><dt>Empresas operando<\/dt><dd>4<\/dd><\/div>\n        <div><dt>Exits realizados<\/dt><dd>3<\/dd><\/div>\n      <\/dl>\n    <\/div>\n  <\/section>\n\n  <section class=\"rbx-section rbx-voices rbx-ruled\" data-rbx-sticky=\"avoid\" aria-labelledby=\"rbx-quotes-title\" aria-roledescription=\"carrossel\">\n    <div class=\"rbx-wrap\">\n      <div class=\"rbx-grid rbx-head rbx-voices-head\">\n        <div><p class=\"rbx-label\">Depoimentos<\/p><h2 class=\"rbx-h2\" id=\"rbx-quotes-title\">Quem j\u00e1 trabalhou com Rodolfo.<\/h2><\/div>\n        <div class=\"rbx-voices-slot\" data-rbx-voices-nav><\/div>\n      <\/div>\n      <ul class=\"rbx-voices-track\" role=\"list\" aria-label=\"Depoimentos de clientes\">\n          <li class=\"rbx-voice\" data-quote=\"t02\"><figure><blockquote>\u201cO Rodolfo \u00e9 um parceiro confi\u00e1vel que realmente se preocupa com o nosso sucesso. Os insights estrat\u00e9gicos nos ajudaram a tomar melhores decis\u00f5es e expandir a empresa com mais confian\u00e7a.\u201d<\/blockquote><figcaption><strong>Sergio Gomes Beato<\/strong><span>SGB Transport<\/span><\/figcaption><\/figure><\/li>\n          <li class=\"rbx-voice\" data-quote=\"t04\"><figure><blockquote>\u201cA vis\u00e3o estrat\u00e9gica do Rodolfo foi fundamental para o nosso sucesso. Ela nos ajudou a reestruturar as finan\u00e7as e a implementar solu\u00e7\u00f5es pr\u00e1ticas que aumentaram consideravelmente a nossa rentabilidade.\u201d<\/blockquote><figcaption><strong>Serghei Zagornean<\/strong><span>Lider Construction<\/span><\/figcaption><\/figure><\/li>\n          <li class=\"rbx-voice\" data-quote=\"t12\"><figure><blockquote>\u201cDesde que come\u00e7amos a trabalhar com o Rodolfo, nossa empresa experimentou um crescimento mais s\u00f3lido. Sentimos que estamos mais no controle do que antes. A equipe dele sempre traz estrat\u00e9gias financeiras que nos ajudam a aumentar nossa rentabilidade e a explorar novos segmentos.\u201d<\/blockquote><figcaption><strong>Alexandre Lemos Soares<\/strong><span>Velop4 Sports<\/span><\/figcaption><\/figure><\/li>\n          <li class=\"rbx-voice\" data-quote=\"t07\"><figure><blockquote>\u201cRecomendo o Rodolfo para quem busca um parceiro confi\u00e1vel e competente para transformar e expandir seu neg\u00f3cio.\u201d<\/blockquote><figcaption><strong>Fernando Gubert<\/strong><span>Pinotage Electrical Services<\/span><\/figcaption><\/figure><\/li>\n          <li class=\"rbx-voice\" data-quote=\"t08\"><figure><blockquote>\u201cTrabalhar com o Rodolfo foi um divisor de \u00e1guas para o nosso neg\u00f3cio. Os insights e estrat\u00e9gias da equipe dele nos ajudam sempre a otimizar opera\u00e7\u00f5es e melhorar nossa lucratividade. Altamente recomendado!\u201d<\/blockquote><figcaption><strong>Sharat Puta<\/strong><span>Fx Master<\/span><\/figcaption><\/figure><\/li>\n          <li class=\"rbx-voice\" data-quote=\"t06\"><figure><blockquote>\u201cO Rodolfo e a equipe dele s\u00e3o sempre muito profissionais e acess\u00edveis, com conselhos valiosos que transformaram nossa abordagem no crescimento da nossa empresa. Somos gratos pelo seu apoio.\u201d<\/blockquote><figcaption><strong>Adrian Mateas<\/strong><span>Same Day Dentist<\/span><\/figcaption><\/figure><\/li>\n          <li class=\"rbx-voice\" data-quote=\"t09\"><figure><blockquote>\u201cGra\u00e7as ao trabalho do Rodolfo e da equipe dele, conseguimos resolver quest\u00f5es muito importantes e alcan\u00e7ar nossos objetivos mais r\u00e1pido.\u201d<\/blockquote><figcaption><strong>Daniel Morelli<\/strong><span>Hoteleiro<\/span><\/figcaption><\/figure><\/li>\n          <li class=\"rbx-voice\" data-quote=\"t03\"><figure><blockquote>\u201cO Rodolfo e a equipe dele trouxeram uma nova perspectiva pra n\u00f3s e pra nossa empresa. Com certeza s\u00e3o todos muito experientes e fazem toda a diferen\u00e7a.\u201d<\/blockquote><figcaption><strong>Lucas Ferreira<\/strong><span>Mobras Group<\/span><\/figcaption><\/figure><\/li>\n          <li class=\"rbx-voice\" data-quote=\"t11\"><figure><blockquote>\u201cRecomendo o Rodolfo a qualquer empres\u00e1rio que queira melhorar seus resultados. A abordagem \u00e9 personalizada, eficiente e incompar\u00e1vel. A aten\u00e7\u00e3o e o profissionalismo dele fizeram toda a diferen\u00e7a na nossa trajet\u00f3ria de crescimento. Recomendo sem hesitar.\u201d<\/blockquote><figcaption><strong>Diego Pavao<\/strong><span>The Field Studio<\/span><\/figcaption><\/figure><\/li>\n      <\/ul>\n    <\/div>\n  <\/section>\n\n  <section class=\"rbx-section rbx-navy\" id=\"rbx-conversa\" data-rbx-sticky=\"hide\" aria-labelledby=\"rbx-conversa-title\">\n    <div class=\"rbx-wrap rbx-grid rbx-contact\">\n      <div class=\"rbx-contact-copy\">\n        <p class=\"rbx-label\">Vamos conversar<\/p>\n        <h2 class=\"rbx-h2\" id=\"rbx-conversa-title\">Qual \u00e9 o problema ou a decis\u00e3o que voc\u00ea precisa resolver?<\/h2>\n        <p>Conte o que est\u00e1 acontecendo, onde o neg\u00f3cio opera e se existe um prazo importante. Esse contexto ajuda a avaliar o pr\u00f3ximo passo.<\/p>\n        <div class=\"rbx-expect\"><strong>O que acontece depois?<\/strong><p>Voc\u00ea envia a mensagem pelo WhatsApp. A equipe avalia o caso com voc\u00ea e orienta os pr\u00f3ximos passos. O escopo e o investimento s\u00e3o definidos antes de qualquer contrata\u00e7\u00e3o.<\/p><\/div>\n        <div class=\"rbx-expect\"><strong>N\u00e3o precisa ter todos os n\u00fameros organizados.<\/strong><p>Comece explicando a situa\u00e7\u00e3o. As informa\u00e7\u00f5es necess\u00e1rias para analisar o neg\u00f3cio ser\u00e3o combinadas depois.<\/p><\/div>\n      <\/div>\n      <div class=\"rbx-form rbx-paper\" data-rbx-whatsapp>\n        <div id=\"rbx-message-fields\" data-rbx-whatsapp-fields hidden>\n          <fieldset><legend>O que mais pesa hoje?&nbsp;<span class=\"rbx-optional\">Opcional<\/span><\/legend>\n            <div class=\"rbx-choices\">\n              <label class=\"rbx-choice\"><input type=\"radio\" name=\"rbx-reason\" value=\"resultado\" data-rbx-line=\"Quero melhorar o lucro e as vendas.\"><span>Quero melhorar o lucro e as vendas.<\/span><\/label>\n              <label class=\"rbx-choice\"><input type=\"radio\" name=\"rbx-reason\" value=\"operacao\" data-rbx-line=\"Quero que a empresa dependa menos de mim.\"><span>Quero que a empresa dependa menos de mim.<\/span><\/label>\n              <label class=\"rbx-choice\"><input type=\"radio\" name=\"rbx-reason\" value=\"decisao\" data-rbx-line=\"Preciso avaliar uma decis\u00e3o ou investimento importante.\"><span>Preciso avaliar uma decis\u00e3o ou investimento.<\/span><\/label>\n              <label class=\"rbx-choice\"><input type=\"radio\" name=\"rbx-reason\" value=\"urgencia\" data-rbx-line=\"Tenho um problema urgente no neg\u00f3cio.\"><span>Tenho um problema urgente no neg\u00f3cio.<\/span><\/label>\n            <\/div>\n          <\/fieldset>\n          <div class=\"rbx-field\"><label for=\"rbx-country\">Em qual pa\u00eds o neg\u00f3cio opera?&nbsp;<span class=\"rbx-optional\">Opcional<\/span><\/label><p class=\"rbx-hint\" id=\"rbx-country-hint\">Ex.: Reino Unido, Portugal ou mais de um pa\u00eds<\/p><input id=\"rbx-country\" type=\"text\" data-rbx-prefix=\"Pa\u00eds do neg\u00f3cio: \" maxlength=\"100\" autocomplete=\"off\" aria-describedby=\"rbx-country-hint\"><\/div>\n          <div class=\"rbx-field\"><label for=\"rbx-context\">O que voc\u00ea precisa resolver?&nbsp;<span class=\"rbx-optional\">Opcional<\/span><\/label><p class=\"rbx-hint\" id=\"rbx-context-hint\">Conte a situa\u00e7\u00e3o e se existe um prazo importante.<\/p><textarea id=\"rbx-context\" data-rbx-prefix=\"Meu caso: \" maxlength=\"600\" rows=\"3\" aria-describedby=\"rbx-context-hint\"><\/textarea><\/div>\n        <\/div>\n        <a class=\"rbx-btn rbx-btn--full\" id=\"rbx-whatsapp\" data-rbx-whatsapp-link href=\"https:\/\/wa.me\/447462115601?text=Ol%C3%A1%2C%20Rodolfo.%20Vim%20pela%20p%C3%A1gina%20de%20consultoria%20e%20gostaria%20de%20discutir%20meu%20caso.\" target=\"_blank\" rel=\"noopener noreferrer\">Continuar no WhatsApp <span class=\"rbx-arrow\" aria-hidden=\"true\">\u2197<\/span><\/a>\n        <p class=\"rbx-form-note\">O WhatsApp abre em uma nova aba ou no aplicativo. Voc\u00ea pode revisar a mensagem antes de enviar. Evite incluir documentos ou dados financeiros confidenciais neste primeiro contato.<\/p>\n        <p class=\"rbx-form-note\"><a href=\"https:\/\/rodolfobasilio.com\/privacy-policy-2\/\">Pol\u00edtica de privacidade<\/a><\/p>\n        <p class=\"rbx-live\" id=\"rbx-message-state\" data-rbx-whatsapp-status role=\"status\" aria-live=\"polite\" data-rbx-say-chosen=\"Tema selecionado. Voc\u00ea pode acrescentar o contexto nos campos desta se\u00e7\u00e3o.\" data-rbx-say-send=\"Revise e envie a mensagem no WhatsApp para iniciar a conversa.\"><\/p>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"rbx-section\" id=\"rbx-duvidas\" aria-labelledby=\"rbx-duvidas-title\">\n    <div class=\"rbx-wrap rbx-grid rbx-faq\">\n      <div class=\"rbx-faq-head\"><p class=\"rbx-label\">D\u00favidas frequentes<\/p><h2 class=\"rbx-h2\" id=\"rbx-duvidas-title\">Antes de conversar.<\/h2><\/div>\n      <div class=\"rbx-faq-list\">\n        <details><summary>Rodolfo pode ajudar no meu tipo de neg\u00f3cio e no pa\u00eds onde opero?<\/summary><p>O primeiro passo \u00e9 entender a atividade, o pa\u00eds, o momento da empresa e o problema que voc\u00ea precisa resolver. A possibilidade de atendimento e a necessidade de outros especialistas s\u00e3o avaliadas a partir desse contexto. Isso vale para opera\u00e7\u00f5es conduzidas localmente ou \u00e0 dist\u00e2ncia.<\/p><\/details>\n        <details><summary>Posso procurar Rodolfo antes de abrir ou comprar uma empresa?<\/summary><p>Sim. A abertura, a compra ou a expans\u00e3o de um neg\u00f3cio pode ser o motivo do contato. O trabalho pode incluir an\u00e1lise de viabilidade, compara\u00e7\u00e3o de alternativas e avalia\u00e7\u00e3o dos recursos necess\u00e1rios, conforme o escopo contratado.<\/p><\/details>\n        <details><summary>Preciso contratar um acompanhamento longo?<\/summary><p>O formato depende do caso. Pode ser um projeto para uma decis\u00e3o espec\u00edfica ou um acompanhamento. Escopo, dura\u00e7\u00e3o, entregas e investimento s\u00e3o definidos na proposta antes da contrata\u00e7\u00e3o.<\/p><\/details>\n        <details><summary>Rodolfo tamb\u00e9m ajuda na execu\u00e7\u00e3o?<\/summary><p>A participa\u00e7\u00e3o na execu\u00e7\u00e3o depende das necessidades do caso e do trabalho contratado. A proposta define o que cabe a Rodolfo, \u00e0 equipe do cliente e aos demais profissionais envolvidos.<\/p><\/details>\n        <details><summary>Essa consultoria substitui meu contador ou advogado?<\/summary><p>N\u00e3o. O trabalho \u00e9 de estrat\u00e9gia e decis\u00f5es de neg\u00f3cio. Quando uma decis\u00e3o exige an\u00e1lise cont\u00e1bil, tribut\u00e1ria ou jur\u00eddica espec\u00edfica, o profissional habilitado no pa\u00eds deve participar.<\/p><\/details>\n        <details><summary>Quanto custa e o que acontece depois do primeiro contato?<\/summary><p>O investimento depende do problema, da complexidade e do escopo. No primeiro contato, voc\u00ea apresenta o caso para avaliar o atendimento e os pr\u00f3ximos passos. O valor do trabalho \u00e9 definido antes da contrata\u00e7\u00e3o.<\/p><\/details>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"rbx-close rbx-navy\" data-rbx-sticky=\"hide\" aria-labelledby=\"rbx-close-title\">\n    <div data-rb-motion=\"trama\" data-rows=\"3\"><\/div>\n    <div class=\"rbx-wrap\">\n      <div class=\"rbx-grid rbx-close-body\">\n        <div><h2 class=\"rbx-h2\" id=\"rbx-close-title\">Vamos olhar para o que precisa mudar.<\/h2><p>Comece pelo problema que mais pesa hoje ou pela decis\u00e3o que merece uma an\u00e1lise cuidadosa.<\/p><\/div>\n        <a class=\"rbx-btn\" href=\"#rbx-conversa\">Quero discutir meu caso <span class=\"rbx-arrow\" aria-hidden=\"true\">\u2192<\/span><\/a>\n      <\/div>\n      <footer class=\"rbx-foot\">\n        <a class=\"rbx-foot-mark\" href=\"https:\/\/rodolfobasilio.com\/\" aria-label=\"Rodolfo Basilio, p\u00e1gina inicial\"><svg class=\"rbx-foot-sym\" aria-hidden=\"true\" focusable=\"false\" width=\"155\" height=\"146\" viewBox=\"0 0 155 146\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"> <g clip-path=\"url(#rbx-sym-clip)\"> <path d=\"M18.72 57.46V61.29C18.23 61.62 17.75 61.95 17.27 62.29C9.13 68.06 3.14 76.21 0 85.42V57.46H18.72Z\" fill=\"currentColor\"\/> <path d=\"M57.8898 58.3599L52.1098 76.1499C49.5998 75.3299 46.9498 74.9099 44.2498 74.9099C43.9098 74.9099 43.5698 74.9199 43.2398 74.9299C42.9998 74.9399 42.7698 74.9499 42.5398 74.9699C42.2198 74.9899 41.8998 75.0199 41.5798 75.0499C41.1698 75.0899 40.7698 75.1399 40.3698 75.2099C39.9398 75.2699 39.5298 75.3399 39.1098 75.4299C38.6898 75.5099 38.2798 75.6099 37.8798 75.7199C37.8598 75.7199 37.8398 75.7299 37.8298 75.7299C37.4398 75.8299 37.0498 75.9399 36.6698 76.0599C35.8998 76.2999 35.1498 76.5699 34.4098 76.8799C34.3798 76.8999 34.3498 76.9099 34.3198 76.9199C33.9398 77.0799 33.5598 77.2499 33.1898 77.4399C32.8198 77.6099 32.4498 77.7999 32.0898 77.9999C31.3698 78.3899 30.6698 78.8199 29.9898 79.2799C29.3098 79.7299 28.6498 80.2299 28.0198 80.7599C27.5498 81.1499 27.0898 81.5499 26.6398 81.9799C26.4198 82.1899 26.1998 82.3999 25.9898 82.6199C25.7698 82.8399 25.5698 83.0699 25.3598 83.2999C25.0798 83.5999 24.8098 83.9099 24.5598 84.2199C24.2998 84.5299 24.0598 84.8399 23.8198 85.1599C23.8198 85.1799 23.7898 85.1999 23.7798 85.2199C23.5398 85.5399 23.3098 85.8599 23.0898 86.1899C22.8198 86.5699 22.5698 86.9699 22.3398 87.3699C22.1498 87.6699 21.9698 87.9899 21.8098 88.2999C21.6098 88.6599 21.4198 89.0199 21.2398 89.3999C21.2398 89.4099 21.2398 89.4199 21.2198 89.4399C21.0498 89.7999 20.8898 90.1599 20.7398 90.5199C20.7398 90.5199 20.7398 90.5199 20.7198 90.5399C20.5898 90.8599 20.4598 91.1899 20.3398 91.5199C20.1998 91.8699 20.0798 92.2199 19.9698 92.5799C19.8698 92.8599 19.7898 93.1399 19.7098 93.4199C19.6898 93.4799 19.6698 93.5399 19.6598 93.5999C19.5798 93.8699 19.5098 94.1499 19.4398 94.4199C19.2798 95.0799 19.1498 95.7399 19.0398 96.4199C19.0098 96.6299 18.9698 96.8399 18.9498 97.0599C18.9198 97.2399 18.8998 97.4199 18.8798 97.6099C18.8698 97.6699 18.8598 97.7299 18.8598 97.7899C18.8598 97.8499 18.8398 97.8999 18.8398 97.9599H0.0698242C0.839824 84.5899 7.68982 72.1499 18.7198 64.3299C19.5598 63.7299 20.4098 63.1699 21.2798 62.6499C21.6898 62.3899 22.0998 62.1499 22.5198 61.9199C22.5198 61.8999 22.5198 61.8999 22.5398 61.9099C22.8898 61.6999 23.2398 61.5099 23.5998 61.3199C24.0098 61.0899 24.4298 60.8799 24.8598 60.6799C25.1198 60.5399 25.3898 60.4099 25.6698 60.2899C25.9398 60.1599 26.2098 60.0299 26.4898 59.9199C26.5698 59.8699 26.6598 59.8299 26.7598 59.7999C27.1598 59.6199 27.5698 59.4499 27.9798 59.2899C29.8398 58.5399 31.7598 57.9299 33.7098 57.4599C34.0598 57.3699 34.4198 57.2899 34.7798 57.2099C34.9798 57.1599 35.1798 57.1199 35.3798 57.0799C35.7598 56.9999 36.1398 56.9299 36.5298 56.8699C36.6098 56.8499 36.6898 56.8299 36.7698 56.8199C37.2198 56.7399 37.6698 56.6699 38.1198 56.6199C38.1498 56.6099 38.1798 56.5999 38.2198 56.5999C38.6098 56.5399 39.0098 56.4899 39.4098 56.4499C39.8098 56.4099 40.2198 56.3699 40.6298 56.3399C40.7098 56.3299 40.7898 56.3199 40.8798 56.3199C41.1998 56.2899 41.5198 56.2699 41.8498 56.2599C42.1398 56.2399 42.4298 56.2299 42.7198 56.2199C43.2298 56.1999 43.7398 56.1899 44.2498 56.1899C48.9098 56.1899 53.4998 56.9199 57.8798 58.3599H57.8898Z\" class=\"blu\"\/> <path d=\"M29.99 79.2798C29.31 79.7398 28.65 80.2398 28.02 80.7598C28.65 80.2298 29.31 79.7298 29.99 79.2798Z\" class=\"blu\"\/> <path d=\"M32.0897 78C31.3697 78.4 30.6697 78.82 29.9897 79.28C30.6697 78.82 31.3697 78.39 32.0897 78Z\" class=\"blu\"\/> <path d=\"M36.6697 76.0601C35.8997 76.3001 35.1497 76.5801 34.4097 76.8801C35.1497 76.5701 35.8997 76.3001 36.6697 76.0601Z\" class=\"blu\"\/> <path d=\"M18.72 100.46V136.6C15.37 134.22 12.41 131.43 9.88 128.3C9.65 128.01 9.41 127.72 9.19 127.42C8.96 127.13 8.74 126.83 8.52 126.53C8.22 126.12 7.93 125.71 7.65 125.29C7.4 124.93 7.16 124.56 6.93 124.19C6.69 123.82 6.47 123.45 6.24 123.07C5.34 121.57 4.54 120.02 3.83 118.42C3.65 118.02 3.48 117.62 3.32 117.22C3.09 116.69 2.89 116.15 2.69 115.61C2.59 115.33 2.49 115.05 2.39 114.76C2.28 114.44 2.17 114.11 2.07 113.78C1.96 113.44 1.86 113.1 1.76 112.76C1.66 112.43 1.57 112.1 1.48 111.76C1.33 111.22 1.2 110.67 1.08 110.12C1 109.8 0.93 109.48 0.87 109.15C0.79 108.75 0.71 108.35 0.64 107.95C0.52 107.21 0.41 106.47 0.31 105.72C0.28 105.44 0.25 105.15 0.22 104.86C0.07 103.41 0 101.94 0 100.46H18.72Z\" class=\"acc\"\/> <path d=\"M19.1502 140.13V145.2H0.430176V115.97C3.57018 125.18 9.56018 133.33 17.7002 139.1L19.1502 140.13Z\" fill=\"currentColor\"\/> <path d=\"M119.94 143.88C93.2499 150.98 64.7699 128.42 65.5199 100.79H84.2399C83.6999 117.48 101.91 130.76 117.64 125.11L123.41 142.9C122.39 143.23 121.11 143.59 120.08 143.85C120.08 143.85 120.02 143.86 120 143.87L120.08 143.85\" class=\"acc\"\/> <path d=\"M125.61 60.0103C142.89 66.4403 154.43 81.9803 154.43 100.48C154.43 118.98 143.18 135.18 126.18 141.74L120.38 123.9C140.7 115.98 140.22 85.2903 119.89 77.8303\" fill=\"currentColor\"\/> <path d=\"M117.63 76.8702L123.41 59.0802C116.32 56.7602 108.55 56.2802 101.21 57.7502L101.11 57.8602C83.2298 60.9602 68.3199 76.7302 66.0499 94.7502L65.9799 94.8202C65.7999 96.0902 65.6698 97.4002 65.5898 98.6802H84.3598C85.5998 82.8502 102.67 71.6502 117.63 76.8702Z\" class=\"blu\"\/> <path d=\"M84.2298 139.73V145H65.5098V115.64C65.6198 115.96 65.7298 116.29 65.8598 116.63C67.0598 119.9 68.6298 123.04 70.5298 125.97L70.8898 126.51C70.9998 126.69 71.1398 126.9 71.2798 127.1C72.0398 128.18 72.7798 129.18 73.5598 130.13L73.7598 130.39C74.5898 131.37 75.4798 132.36 76.5298 133.44L76.8098 133.72C77.2698 134.18 77.7298 134.61 78.1298 134.98L78.2798 135.12C78.6898 135.48 79.1198 135.86 79.5398 136.21C80.6398 137.18 81.7598 138 82.7498 138.71L82.9798 138.88C83.3898 139.17 83.8098 139.45 84.2298 139.73Z\" fill=\"currentColor\"\/> <path d=\"M84.2298 0V62.41C83.9698 62.57 83.7098 62.74 83.4498 62.92L82.7898 63.38L82.6798 63.47C81.5698 64.28 80.5598 65.02 79.5998 65.87C79.1298 66.26 78.6698 66.67 78.1998 67.09L77.8898 67.38C77.5498 67.7 77.1898 68.03 76.8498 68.37L76.4598 68.76C75.5498 69.71 74.6398 70.7 73.7198 71.79L73.6398 71.89C72.8498 72.86 72.0698 73.89 71.2998 75C71.1698 75.18 71.0498 75.37 70.8998 75.59C68.8298 78.67 67.1398 82.01 65.8598 85.5L65.6798 86.02C65.6198 86.18 65.5598 86.34 65.5098 86.5V0H84.2298Z\" fill=\"currentColor\"\/> <\/g> <defs> <clipPath id=\"rbx-sym-clip\"> <rect width=\"154.43\" height=\"145.2\" fill=\"currentColor\"\/> <\/clipPath> <\/defs> <\/svg><\/a>\n        <p class=\"rbx-foot-copy\">\u00a9 2026 Rodolfo Basilio. Todos os direitos reservados.<\/p>\n        <nav class=\"rbx-foot-links\" aria-label=\"Informa\u00e7\u00f5es complementares\"><a href=\"https:\/\/rodolfobasilio.com\/recursos\/\">Artigos e an\u00e1lises<\/a><a href=\"https:\/\/rodolfobasilio.com\/sobre\/\">Sobre Rodolfo<\/a><a href=\"https:\/\/rodolfobasilio.com\/privacy-policy-2\/\">Privacidade<\/a><\/nav>\n        <ul class=\"rbx-foot-social\" role=\"list\" aria-label=\"Rodolfo nas redes\">\n          <li><a href=\"https:\/\/www.linkedin.com\/in\/rodolfo-basilio\/\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"LinkedIn\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM3 9h4v12H3zM9 9h3.8v1.7h.05c.53-1 1.83-2.05 3.77-2.05 4.03 0 4.78 2.65 4.78 6.1V21h-4v-5.4c0-1.3-.02-2.95-1.8-2.95-1.8 0-2.07 1.4-2.07 2.86V21H9z\"\/><\/svg><\/a><\/li>\n          <li><a href=\"https:\/\/www.instagram.com\/basilio.rodolfo\/\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Instagram\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\/><circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\/><circle cx=\"17.5\" cy=\"6.5\" r=\"1.3\"\/><\/svg><\/a><\/li>\n          <li><a href=\"https:\/\/www.youtube.com\/@RodolfoBasilioOficial\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"YouTube\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M23 7.2a3 3 0 0 0-2.1-2.1C19 4.6 12 4.6 12 4.6s-7 0-8.9.5A3 3 0 0 0 1 7.2 31 31 0 0 0 .5 12a31 31 0 0 0 .5 4.8 3 3 0 0 0 2.1 2.1c1.9.5 8.9.5 8.9.5s7 0 8.9-.5a3 3 0 0 0 2.1-2.1 31 31 0 0 0 .5-4.8 31 31 0 0 0-.5-4.8zM9.75 15.02V8.98L15.5 12z\"\/><\/svg><\/a><\/li>\n          <li><a href=\"https:\/\/www.facebook.com\/profile.php?id=61573793174292\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Facebook\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M14 8.5V6.8c0-.8.2-1.3 1.4-1.3H17V2.2A21 21 0 0 0 14.6 2C12.2 2 10.5 3.5 10.5 6.2v2.3H8v3.7h2.5V22h3.7v-9.8h2.9l.4-3.7z\"\/><\/svg><\/a><\/li>\n        <\/ul>\n      <\/footer>\n    <\/div>\n  <\/section>\n\n  <div class=\"rbx-sticky\" id=\"rbx-sticky\" hidden><span>O pr\u00f3ximo passo come\u00e7a pelo seu caso.<\/span><a class=\"rbx-btn\" href=\"#rbx-conversa\">Vamos conversar <span class=\"rbx-arrow\" aria-hidden=\"true\">\u2192<\/span><\/a><\/div>\n<\/div>\n<\/main>\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"Service\",\"@id\":\"https:\/\/rodolfobasilio.com\/consultoria\/#service\",\"url\":\"https:\/\/rodolfobasilio.com\/consultoria\/\",\"name\":\"Consultoria de neg\u00f3cios com Rodolfo Basilio\",\"description\":\"An\u00e1lise de lucro, vendas, opera\u00e7\u00e3o e decis\u00f5es de neg\u00f3cio. Projetos e acompanhamento definidos conforme o caso e o mercado onde a empresa opera.\",\"provider\":{\"@type\":\"Person\",\"@id\":\"https:\/\/rodolfobasilio.com\/sobre\/#rodolfo-basilio\",\"name\":\"Rodolfo Basilio\",\"url\":\"https:\/\/rodolfobasilio.com\/sobre\/\",\"jobTitle\":\"Consultor de neg\u00f3cios\"}}<\/script>\n\n<script data-no-optimize=\"1\" src=\"data:text\/javascript;base64,LyohIHJiLW1vdGlvbiAxLjIgOiBSb2RvbGZvIEJhc2lsaW8gbW90aW9uIGlkZW50aXR5CiAqCiAqIFNldmVuIG1vdGlvbnMsIGFsbCBidWlsdCBmcm9tIG9uZSBpZGVhIGluIHRoZSBicmFuZCBib29rOiB0aGUgc2VnbWVudGVkIGNpcmNsZQogKiB0aGF0IGZvcm1zIHRoZSBib3dscyBvZiB0aGUgInIiIGFuZCB0aGUgImIiICgic29saWRleiBlIGZ1bmRhbWVudG8iKS4KICogVGhpbmdzIGFycml2ZSBpbiBwYXJ0cywgdHVybiwgYW5kIGxvY2sgaW50byBwbGFjZS4gTm90aGluZyBmbG9hdHMsIGdsb3dzIG9yIGJvdW5jZXMuCiAqCiAqICAgYXNzaW5hdHVyYSAgdGhlIHN0YWNrZWQgc2lnbmF0dXJlIGFzc2VtYmxlcyBpdHNlbGYgKGxvZ28gcmV2ZWFsKQogKiAgIGFuZWwgICAgICAgIGEgMzAvNDAvMzAgc2VnbWVudGVkIHJpbmcgZHJhd3Mgd2hpbGUgYSBudW1iZXIgY291bnRzIChrZXkgZmlndXJlcykKICogICBjYW1wbyAgICAgICBhIGZpZWxkIG9mIHJpbmdzIHdob3NlIHNlZ21lbnRzIHR1cm4gdG8gZm9sbG93IHRoZSB2aXNpdG9yIChoZXJvIGdyb3VuZCkKICogICB0cmFtYSAgICAgICB0aGUgcm9kb2xmbyAvIGJhc2lsaW8gd29yZG1hcmsgcGF0dGVybiwgcm93cyBkcmlmdGluZyBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zCiAqICAgcmVncmEgICAgICAgZWRpdG9yaWFsIGhlYWRsaW5lOiBzdHJpa2UgdGhlIHJlamVjdGVkIGlkZWEsIHVuZGVybGluZSB0aGUgb25lIHRoYXQgc3RheXMKICogICBmYWl4YSAgICAgICB0aGUgaGFsZi1yaW5nIGJhbmQgZnJvbSB0aGUgc29jaWFsIHBvc3RzLCB0dXJuaW5nIGFzIGEgc2VjdGlvbiBlZGdlIHNjcm9sbHMgcGFzdAogKiAgIG1vbm9ncmFtYSAgIHIsIG8gYW5kIGIgbW9ycGggb24gb25lIHJpbmc6IG9uZSBzaG9ydCBjeWNsZSwgdGhlbiByZXN0ICh0aGUgc2l0ZSBoZWFkZXIgbG9nbykKICoKICogVXNhZ2U6IGFkZCBkYXRhLXJiLW1vdGlvbj0iPG5hbWU+IiB0byBhbiBlbGVtZW50IGFuZCBsb2FkIHRoaXMgZmlsZSAocGx1cyByYi1tb3Rpb24uY3NzKS4KICogRXZlcnkgZWxlbWVudCBpcyByZWFkYWJsZSBhbmQgY29ycmVjdCB3aXRob3V0IEphdmFTY3JpcHQ7IHRoZSBzY3JpcHQgb25seSBhZGRzIHRoZSBtb3ZlbWVudC4KICogcHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogZXZlcnkgbW90aW9uIHJlbmRlcnMgaXRzIGZpbmlzaGVkIHN0YXRlIGFuZCBzdG9wcy4KICogRW50cmFuY2VzIG5ldmVyIGhpZGUgd2hhdCB0aGUgdmlzaXRvciBoYXMgYWxyZWFkeSBzZWVuOiBhbnl0aGluZyBvbiBzY3JlZW4gd2hlbiB0aGUgc2NyaXB0IHN0YXJ0cyBpcwogKiBsZWZ0IGZpbmlzaGVkIChyZWdyYSBvbmx5IGRyYXdzIGl0cyBsaW5lcyksIGFuZCBhbnl0aGluZyBiZWxvdyB0aGUgZm9sZCBpcyBzZXQgdG8gaXRzIHN0YXJ0IHN0YXRlCiAqIHdoaWxlIGl0IGlzIHN0aWxsIG9mZiBzY3JlZW4sIHRoZW4gcGxheWVkIHdoZW4gaXQgYXJyaXZlcy4KICogTm90aGluZyBtb3ZlcyBvbiBpdHMgb3duIGZvciBtb3JlIHRoYW4gZml2ZSBzZWNvbmRzIChXQ0FHIDIuMi4yKTogY2FtcG8gd2FuZGVycyBvbmNlLCB0aGVuIGZvbGxvd3MKICogdGhlIHBvaW50ZXIgb25seTsgdHJhbWEgbW92ZXMgd2l0aCB0aGUgc2Nyb2xsIG9ubHk7IG1vbm9ncmFtYSBwbGF5cyBvbmUgc2hvcnQgY3ljbGUsIHRoZW4gcmVwbGF5cyBvbgogKiBob3ZlciBvciBmb2N1cy4gQWxsIHBlci1mcmFtZSBlYXNpbmcgaXMgdGltZS1iYXNlZCwgc28gNjAgSHogYW5kIDEyMCBIeiBzY3JlZW5zIGxvb2sgdGhlIHNhbWUuCiAqIEFQSTogd2luZG93LlJCTW90aW9uLmluaXQocm9vdCkgZm9yIGNvbnRlbnQgYWRkZWQgbGF0ZXI7IGVsZW1lbnQucmJNb3Rpb24ucGxheSgpIHJlcGxheXMuCiAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgdmFyIGRvYyA9IGRvY3VtZW50OwogIHZhciByZWR1Y2VkID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJyk7CiAgdmFyIFNFVFRMRSA9ICdjdWJpYy1iZXppZXIoLjIsLjcsLjEsMSknOyAgIC8vIHRoZSBvbmUgYnJhbmQgY3VydmU6IHF1aWNrIHN0YXJ0LCBsb25nIHNldHRsZQogIHZhciBTVkdOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7CiAgdmFyIEJMVUUgPSAnIzA0QUJGRic7ICAgICAgICAgICAgICAgICAgICAgLy8gcmIwMAogIHZhciBMSUdIVCA9ICcjODVENkZGJzsgICAgICAgICAgICAgICAgICAgIC8vIHJiMDEKCiAgLyogLS0tLS0tLS0tLSBzaGFyZWQgaGVscGVycyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHN2Zyh0YWcsIGF0dHJzLCBwYXJlbnQpIHsKICAgIHZhciBub2RlID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdOUywgdGFnKTsKICAgIGZvciAodmFyIGtleSBpbiBhdHRycykgbm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTsKICAgIGlmIChwYXJlbnQpIHBhcmVudC5hcHBlbmRDaGlsZChub2RlKTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgZnVuY3Rpb24gY2xhbXAodiwgbG8sIGhpKSB7IHJldHVybiB2IDwgbG8gPyBsbyA6IHYgPiBoaSA\/IGhpIDogdjsgfQoKICAvLyBSdW5zIGNiIG9uY2UsIHRoZSBmaXJzdCB0aW1lIGVsIGlzIGF0IGxlYXN0IGBzaGFyZWAgdmlzaWJsZS4KICBmdW5jdGlvbiBvbkZpcnN0VmlldyhlbCwgY2IsIHNoYXJlKSB7CiAgICBpZiAoISgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykpIHsgY2IoKTsgcmV0dXJuOyB9CiAgICB2YXIgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMpIHsKICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkgewogICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgeyBpby5kaXNjb25uZWN0KCk7IGNiKCk7IH0KICAgICAgfSk7CiAgICB9LCB7IHRocmVzaG9sZDogc2hhcmUgfHwgMC4zNSB9KTsKICAgIGlvLm9ic2VydmUoZWwpOwogIH0KCiAgLy8gS2VlcHMgYSBydW5uaW5nIGxvb3Agb25seSB3aGlsZSBlbCBpcyBvbiBzY3JlZW4gYW5kIHRoZSB0YWIgaXMgdmlzaWJsZS4KICBmdW5jdGlvbiB3aGlsZVZpc2libGUoZWwsIHN0YXJ0LCBzdG9wKSB7CiAgICB2YXIgb25TY3JlZW4gPSBmYWxzZTsKICAgIGZ1bmN0aW9uIHN5bmMoKSB7IGlmIChvblNjcmVlbiAmJiAhZG9jLmhpZGRlbikgc3RhcnQoKTsgZWxzZSBzdG9wKCk7IH0KICAgIGlmICgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykgewogICAgICBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMpIHsKICAgICAgICBvblNjcmVlbiA9IGVudHJpZXNbZW50cmllcy5sZW5ndGggLSAxXS5pc0ludGVyc2VjdGluZzsKICAgICAgICBzeW5jKCk7CiAgICAgIH0pLm9ic2VydmUoZWwpOwogICAgfSBlbHNlIHsgb25TY3JlZW4gPSB0cnVlOyB9CiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHN5bmMpOwogICAgc3luYygpOwogIH0KCiAgLy8gT24gc2NyZWVuIHJpZ2h0IG5vdzogdGhlIHZpc2l0b3IgbWF5IGFscmVhZHkgaGF2ZSBzZWVuIGl0IHBhaW50ZWQuCiAgZnVuY3Rpb24gaW5WaWV3Tm93KGVsKSB7CiAgICB2YXIgYm94ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICByZXR1cm4gYm94LndpZHRoID4gMCAmJiBib3gudG9wIDwgd2luZG93LmlubmVySGVpZ2h0ICYmIGJveC5ib3R0b20gPiAwOwogIH0KCiAgLy8gRnJhbWUtcmF0ZSBpbmRlcGVuZGVudCBzbW9vdGhpbmc6IHRoZSBzaGFyZSBvZiB0aGUgcmVtYWluaW5nIGRpc3RhbmNlIGNvdmVyZWQgaW4gZHQgbXMsCiAgLy8gZm9yIGEgcmF0ZSB0aGF0IHdhcyB0dW5lZCBwZXIgNjAgSHogZnJhbWUuCiAgZnVuY3Rpb24gZWFzZShyYXRlLCBkdCkgeyByZXR1cm4gMSAtIE1hdGgucG93KDEgLSByYXRlLCBkdCAvIDE2LjY2Nyk7IH0KCiAgLy8gT25lIGVudHJhbmNlLiBtYWtlKCkgYnVpbGRzIHRoZSBXZWIgQW5pbWF0aW9ucyAoaXQgbWF5IGFsc28gcmV0dXJuIHsgYW5pbXMsIHN0YXJ0IH0gd2hlbiBhCiAgLy8gSlMtZHJpdmVuIHBhcnQgbXVzdCBiZWdpbiB3aXRoIHRoZW0pLiBPbiBzY3JlZW4gYXQgaW5pdDogbm90aGluZyBpcyBoaWRkZW47IG9uU2NyZWVuKCkgbWF5IHJ1biBhCiAgLy8gcGFzcyB0aGF0IG5ldmVyIGhpZGVzIGNvbnRlbnQgKHJlZ3JhIGRyYXdzIGl0cyBsaW5lcykuIEJlbG93IHRoZSBmb2xkOiB0aGUgYW5pbWF0aW9ucyBhcmUgcGF1c2VkIGF0CiAgLy8gdGhlaXIgc3RhcnQgc3RhdGUgd2hpbGUgc3RpbGwgb2ZmIHNjcmVlbiwgYW5kIHBsYXllZCB0aGUgZmlyc3QgdGltZSB0aGUgZWxlbWVudCBpcyBgc2hhcmVgIHZpc2libGUuCiAgLy8gUHJpbnRpbmcgZmluaXNoZXMgdGhlbS4KICBmdW5jdGlvbiBlbnRyYW5jZShlbCwgbWFrZSwgc2hhcmUsIG9uU2NyZWVuKSB7CiAgICBpZiAocmVkdWNlZC5tYXRjaGVzKSByZXR1cm47CiAgICBpZiAoaW5WaWV3Tm93KGVsKSkgeyBpZiAob25TY3JlZW4pIG9uU2NyZWVuKCk7IHJldHVybjsgfQogICAgdmFyIGJ1aWx0ID0gbWFrZSgpOwogICAgdmFyIGFuaW1zID0gYnVpbHQuYW5pbXMgfHwgYnVpbHQ7CiAgICBhbmltcy5mb3JFYWNoKGZ1bmN0aW9uIChhKSB7IGEucGF1c2UoKTsgfSk7CiAgICBvbkZpcnN0VmlldyhlbCwgZnVuY3Rpb24gKCkgewogICAgICBhbmltcy5mb3JFYWNoKGZ1bmN0aW9uIChhKSB7IGEucGxheSgpOyB9KTsKICAgICAgaWYgKGJ1aWx0LnN0YXJ0KSBidWlsdC5zdGFydCgpOwogICAgfSwgc2hhcmUpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXByaW50JywgZnVuY3Rpb24gKCkgewogICAgICBhbmltcy5mb3JFYWNoKGZ1bmN0aW9uIChhKSB7IGEuZmluaXNoKCk7IH0pOwogICAgICBpZiAoYnVpbHQuZmluaXNoKSBidWlsdC5maW5pc2goKTsKICAgIH0pOwogIH0KCiAgLy8gQnVpbGRzIG9uZSB3b3JkIG9mIHRoZSBsb2dvIGFzIDxnPiBsZXR0ZXJzOyByZXR1cm5zIHsgZ3JvdXAsIGxldHRlcnMsIGFjY2VudHMsIHdpZHRoIH0uCiAgdmFyIFdPUkRTID0gewogICAgcm9kb2xmbzogeyBrZXlzOiBbJ3InLCAnbzEnLCAnZCcsICdvMicsICdsMScsICdmJywgJ28zJ10sIGR4OiAwLCBkeTogMCwgd2lkdGg6IDI2OCwgaGVpZ2h0OiA3NyB9LAogICAgYmFzaWxpbzogeyBrZXlzOiBbJ2InLCAnYScsICdzJywgJ2kxJywgJ2wyJywgJ2kyJywgJ280J10sIGR4OiAtMjI1LCBkeTogLTgwLCB3aWR0aDogMjM1LCBoZWlnaHQ6IDc1IH0KICB9OwogIGZ1bmN0aW9uIHdvcmQobmFtZSwgcGFyZW50LCBzaGlmdCkgewogICAgdmFyIHNwZWMgPSBXT1JEU1tuYW1lXTsKICAgIHZhciBnID0gc3ZnKCdnJywgeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoJyArIChzcGVjLmR4ICsgKHNoaWZ0ID8gc2hpZnRbMF0gOiAwKSkgKyAnICcgKyAoc3BlYy5keSArIChzaGlmdCA\/IHNoaWZ0WzFdIDogMCkpICsgJyknIH0sIHBhcmVudCk7CiAgICB2YXIgbGV0dGVycyA9IFtdLCBhY2NlbnRzID0gW107CiAgICBzcGVjLmtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgIHZhciBsZXR0ZXIgPSBzdmcoJ2cnLCB7ICdjbGFzcyc6ICdyYi1sZXR0ZXInIH0sIGcpOwogICAgICBHTFlQSFNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7CiAgICAgICAgdmFyIHBhdGggPSBzdmcoJ3BhdGgnLCB7IGQ6IHBhcnRbMF0sICdjbGFzcyc6IHBhcnRbMV0gPyAncmItYWNjJyA6ICdyYi1pbmsnIH0sIGxldHRlcik7CiAgICAgICAgaWYgKHBhcnRbMV0pIGFjY2VudHMucHVzaCh7IHBhdGg6IHBhdGgsIGtleToga2V5IH0pOwogICAgICB9KTsKICAgICAgbGV0dGVycy5wdXNoKGxldHRlcik7CiAgICB9KTsKICAgIHJldHVybiB7IGdyb3VwOiBnLCBsZXR0ZXJzOiBsZXR0ZXJzLCBhY2NlbnRzOiBhY2NlbnRzIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tIDEuIGFzc2luYXR1cmEgOiB0aGUgc2lnbmF0dXJlIGFzc2VtYmxlcyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIGFzc2luYXR1cmEoZWwpIHsKICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3JiLWFzc2luYXR1cmEnKTsKICAgIGVsLnRleHRDb250ZW50ID0gJyc7CiAgICB2YXIgcm9vdCA9IHN2Zygnc3ZnJywgeyB2aWV3Qm94OiAnLTQgLTQgNDY4IDE2MycsIHJvbGU6ICdpbWcnLCAnYXJpYS1sYWJlbCc6ICdSb2RvbGZvIEJhc2lsaW8nIH0sIGVsKTsKICAgIHZhciB0b3AgPSB3b3JkKCdyb2RvbGZvJywgcm9vdCk7CiAgICB2YXIgYm90dG9tID0gd29yZCgnYmFzaWxpbycsIHJvb3QsIFsyMjUsIDgwXSk7CiAgICAvLyBib3dsIGNlbnRyZXMgaW4gdGhlIHN0YWNrZWQgbG9nbywgdXNlZCB0byBzcGluIHRoZSBzZWdtZW50cyBpbnRvIHBsYWNlCiAgICB2YXIgY2VudHJlcyA9IHsgcjogJzIxLjRweCA1NC40cHgnLCBvMzogJzI0Ni42cHggNTQuNHB4JywgYjogJzI0Ni42cHggMTMyLjRweCcgfTsKICAgIHZhciBydW5uaW5nID0gW107CgogICAgZnVuY3Rpb24gcGxheSgpIHsKICAgICAgcnVubmluZy5mb3JFYWNoKGZ1bmN0aW9uIChhKSB7IGEuY2FuY2VsKCk7IH0pOwogICAgICBydW5uaW5nID0gW107CiAgICAgIGlmIChyZWR1Y2VkLm1hdGNoZXMpIHJldHVybiBydW5uaW5nOwogICAgICB0b3AubGV0dGVycy5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIsIGkpIHsKICAgICAgICBydW5uaW5nLnB1c2gobGV0dGVyLmFuaW1hdGUoCiAgICAgICAgICBbeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDQ2cHgpJywgb3BhY2l0eTogMCB9LCB7IHRyYW5zZm9ybTogJ25vbmUnLCBvcGFjaXR5OiAxIH1dLAogICAgICAgICAgeyBkdXJhdGlvbjogNzYwLCBkZWxheTogaSAqIDU1LCBlYXNpbmc6IFNFVFRMRSwgZmlsbDogJ2JhY2t3YXJkcycgfSkpOwogICAgICB9KTsKICAgICAgLy8gImJhc2lsaW8iIHN0ZXBzIGluIGZyb20gdGhlIGxlZnQ6IHRoZSBvZmZzZXQgb2YgdGhlIGxvY2t1cCwgcGVyZm9ybWVkCiAgICAgIGJvdHRvbS5sZXR0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGxldHRlciwgaSkgewogICAgICAgIHJ1bm5pbmcucHVzaChsZXR0ZXIuYW5pbWF0ZSgKICAgICAgICAgIFt7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTcycHgpJywgb3BhY2l0eTogMCB9LCB7IHRyYW5zZm9ybTogJ25vbmUnLCBvcGFjaXR5OiAxIH1dLAogICAgICAgICAgeyBkdXJhdGlvbjogODIwLCBkZWxheTogNDIwICsgaSAqIDU1LCBlYXNpbmc6IFNFVFRMRSwgZmlsbDogJ2JhY2t3YXJkcycgfSkpOwogICAgICB9KTsKICAgICAgdG9wLmFjY2VudHMuY29uY2F0KGJvdHRvbS5hY2NlbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChhY2NlbnQsIGkpIHsKICAgICAgICBhY2NlbnQucGF0aC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBjZW50cmVzW2FjY2VudC5rZXldOwogICAgICAgIHZhciB0dXJuID0gYWNjZW50LmtleSA9PT0gJ2InID8gMTgwIDogYWNjZW50LmtleSA9PT0gJ28zJyA\/IC0xODAgOiAtOTA7CiAgICAgICAgcnVubmluZy5wdXNoKGFjY2VudC5wYXRoLmFuaW1hdGUoCiAgICAgICAgICBbeyB0cmFuc2Zvcm06ICdyb3RhdGUoJyArIHR1cm4gKyAnZGVnKScsIG9wYWNpdHk6IDAsIGZpbGw6IEJMVUUgfSwKICAgICAgICAgICB7IHRyYW5zZm9ybTogJ25vbmUnLCBvcGFjaXR5OiAxLCBmaWxsOiBCTFVFLCBvZmZzZXQ6IDAuNyB9LAogICAgICAgICAgIHsgdHJhbnNmb3JtOiAnbm9uZScsIG9wYWNpdHk6IDEgfV0sCiAgICAgICAgICB7IGR1cmF0aW9uOiAxMTAwLCBkZWxheTogOTgwICsgaSAqIDE0MCwgZWFzaW5nOiBTRVRUTEUsIGZpbGw6ICdiYWNrd2FyZHMnIH0pKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBydW5uaW5nOwogICAgfQoKICAgIGVudHJhbmNlKGVsLCBwbGF5LCAwLjQpOwogICAgcmV0dXJuIHsgcGxheTogcGxheSB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSAyLiBhbmVsIDogc2VnbWVudGVkIHJpbmcgKyBjb3VudCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIGFuZWwoZWwpIHsKICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3JiLWFuZWwnKTsKICAgIHZhciB0YXJnZXQgPSBlbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1jb3VudF0nKTsKICAgIHZhciByaW5nID0gc3ZnKCdzdmcnLCB7IHZpZXdCb3g6ICcwIDAgMTAwIDEwMCcsICdhcmlhLWhpZGRlbic6ICd0cnVlJywgJ2NsYXNzJzogJ3JiLWFuZWwtcmluZycgfSk7CiAgICBlbC5pbnNlcnRCZWZvcmUocmluZywgZWwuZmlyc3RDaGlsZCk7CiAgICB2YXIgUiA9IDQwLCBDID0gMiAqIE1hdGguUEkgKiBSLCBHQVAgPSAxLjY7CiAgICBzdmcoJ2NpcmNsZScsIHsgY3g6IDUwLCBjeTogNTAsIHI6IFIsICdjbGFzcyc6ICdyYi1hbmVsLXRyYWNrJyB9LCByaW5nKTsKICAgIHZhciBzaGFyZXMgPSAoZWwuZGF0YXNldC5zZWdtZW50cyB8fCAnMzAsNDAsMzAnKS5zcGxpdCgnLCcpLm1hcChOdW1iZXIpOwogICAgdmFyIGNvbG91cnMgPSBbJ3ZhcigtLXJiLWFuZWwtMSwgJyArIEJMVUUgKyAnKScsICd2YXIoLS1yYi1hbmVsLTIsIGN1cnJlbnRDb2xvciknLCAndmFyKC0tcmItYW5lbC0zLCAnICsgTElHSFQgKyAnKSddOwogICAgdmFyIHRvdGFsID0gc2hhcmVzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSArIGI7IH0sIDApOwogICAgdmFyIHN0YXJ0ID0gLTkwLCBzZWdtZW50cyA9IFtdOwogICAgc2hhcmVzLmZvckVhY2goZnVuY3Rpb24gKHNoYXJlLCBpKSB7CiAgICAgIHZhciBsZW5ndGggPSBDICogc2hhcmUgLyB0b3RhbCAtIEdBUDsKICAgICAgdmFyIGFyYyA9IHN2ZygnY2lyY2xlJywgewogICAgICAgIGN4OiA1MCwgY3k6IDUwLCByOiBSLCAnY2xhc3MnOiAncmItYW5lbC1zZWcnLAogICAgICAgICdzdHJva2UtZGFzaGFycmF5JzogbGVuZ3RoICsgJyAnICsgQywKICAgICAgICB0cmFuc2Zvcm06ICdyb3RhdGUoJyArIHN0YXJ0ICsgJyA1MCA1MCknCiAgICAgIH0sIHJpbmcpOwogICAgICBhcmMuc3R5bGUuc3Ryb2tlID0gY29sb3Vyc1tpICUgY29sb3Vycy5sZW5ndGhdOyAvLyB2YXIoKSBvbmx5IHdvcmtzIGFzIGEgc3R5bGUsIG5vdCBhbiBhdHRyaWJ1dGUKICAgICAgc2VnbWVudHMucHVzaCh7IGFyYzogYXJjLCBsZW5ndGg6IGxlbmd0aCwgc2hhcmU6IHNoYXJlIC8gdG90YWwgfSk7CiAgICAgIHN0YXJ0ICs9IDM2MCAqIHNoYXJlIC8gdG90YWw7CiAgICB9KTsKCiAgICAvLyBvbmx5IHF1YW50aXRpZXMgY291bnQ6IGFuIGVsZW1lbnQgd2l0aG91dCBkYXRhLWNvdW50IChhbiBvcmRpbmFsLCBhIGxhYmVsKSBrZWVwcyBpdHMgdGV4dAogICAgdmFyIGZpbmFsVmFsdWUgPSB0YXJnZXQgPyBwYXJzZUZsb2F0KHRhcmdldC5kYXRhc2V0LmNvdW50KSA6IDA7CiAgICB2YXIgZGVjaW1hbHMgPSB0YXJnZXQgJiYgdGFyZ2V0LmRhdGFzZXQuY291bnQuaW5kZXhPZignLicpID4gLTEgPyAxIDogMDsKICAgIHZhciBmbXQ7CiAgICB0cnkgeyBmbXQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoZG9jLmRvY3VtZW50RWxlbWVudC5sYW5nIHx8ICdwdC1CUicsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBkZWNpbWFscywgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkZWNpbWFscyB9KTsgfQogICAgY2F0Y2ggKGVycikgeyBmbXQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywgeyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IGRlY2ltYWxzLCBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGRlY2ltYWxzIH0pOyB9CiAgICB2YXIgZmluYWxUZXh0ID0gdGFyZ2V0ID8gdGFyZ2V0LnRleHRDb250ZW50IDogJyc7CiAgICB2YXIgcnVubmluZyA9IFtdLCByYWYgPSAwOwoKICAgIHZhciBEVVJBVElPTiA9IDE1MDA7CiAgICAvLyB0aGUgZmlndXJlIGZvbGxvd3MgdGhlIHJpbmc6IGl0cyB2YWx1ZSBpcyB0aGUgc2hhcmUgb2YgdGhlIHJpbmcgZHJhd24gc28gZmFyLCBzbyB0aGV5IGVuZCB0b2dldGhlcgogICAgZnVuY3Rpb24gY291bnQoKSB7CiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47CiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CiAgICAgIChmdW5jdGlvbiB0aWNrKCkgewogICAgICAgIHZhciBkcmF3biA9IDA7CiAgICAgICAgcnVubmluZy5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgICAgICB2YXIgdCA9IGEuZWZmZWN0LmdldENvbXB1dGVkVGltaW5nKCk7CiAgICAgICAgICBkcmF3biArPSBzZWdtZW50c1tpXS5zaGFyZSAqICh0LnByb2dyZXNzID09IG51bGwgPyAodC5sb2NhbFRpbWUgPj0gdC5lbmRUaW1lID8gMSA6IDApIDogdC5wcm9ncmVzcyk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGRvbmUgPSBydW5uaW5nLmV2ZXJ5KGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLnBsYXlTdGF0ZSA9PT0gJ2ZpbmlzaGVkJzsgfSk7CiAgICAgICAgdGFyZ2V0LnRleHRDb250ZW50ID0gZG9uZSA\/IGZpbmFsVGV4dCA6IGZtdC5mb3JtYXQoZmluYWxWYWx1ZSAqIGRyYXduKTsKICAgICAgICBpZiAoIWRvbmUpIHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKICAgICAgfSkoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJ1aWxkKCkgewogICAgICBydW5uaW5nLmZvckVhY2goZnVuY3Rpb24gKGEpIHsgYS5jYW5jZWwoKTsgfSk7CiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CiAgICAgIHJ1bm5pbmcgPSBbXTsKICAgICAgdmFyIGRlbGF5ID0gMDsKICAgICAgc2VnbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2VnKSB7CiAgICAgICAgdmFyIHRpbWUgPSBEVVJBVElPTiAqIHNlZy5zaGFyZTsKICAgICAgICBydW5uaW5nLnB1c2goc2VnLmFyYy5hbmltYXRlKAogICAgICAgICAgW3sgc3Ryb2tlRGFzaG9mZnNldDogc2VnLmxlbmd0aCB9LCB7IHN0cm9rZURhc2hvZmZzZXQ6IDAgfV0sCiAgICAgICAgICB7IGR1cmF0aW9uOiB0aW1lLCBkZWxheTogZGVsYXksIGVhc2luZzogJ2N1YmljLWJlemllciguNDUsMCwuMiwxKScsIGZpbGw6ICdiYWNrd2FyZHMnIH0pKTsKICAgICAgICBkZWxheSArPSB0aW1lOwogICAgICB9KTsKICAgICAgaWYgKHRhcmdldCkgdGFyZ2V0LnRleHRDb250ZW50ID0gZm10LmZvcm1hdCgwKTsKICAgICAgcmV0dXJuIHsgYW5pbXM6IHJ1bm5pbmcsIHN0YXJ0OiBjb3VudCwgZmluaXNoOiBmdW5jdGlvbiAoKSB7IGlmICh0YXJnZXQpIHRhcmdldC50ZXh0Q29udGVudCA9IGZpbmFsVGV4dDsgfSB9OwogICAgfQogICAgZnVuY3Rpb24gcGxheSgpIHsKICAgICAgaWYgKHJlZHVjZWQubWF0Y2hlcykgcmV0dXJuOwogICAgICBidWlsZCgpOyBjb3VudCgpOwogICAgfQoKICAgIGVudHJhbmNlKGVsLCBidWlsZCwgMC41KTsKICAgIHJldHVybiB7IHBsYXk6IHBsYXkgfTsKICB9CgogIC8qIC0tLS0tLS0tLS0gMy4gY2FtcG8gOiB0aGUgcmluZyBmaWVsZCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIGNhbXBvKGVsKSB7CiAgICBlbC5jbGFzc0xpc3QuYWRkKCdyYi1jYW1wbycpOwogICAgdmFyIGNhbnZhcyA9IGRvYy5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgIGVsLmluc2VydEJlZm9yZShjYW52YXMsIGVsLmZpcnN0Q2hpbGQpOwogICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwogICAgdmFyIHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwgY2VsbCA9IDYwLCByaW5ncyA9IFtdLCByYWYgPSAwLCBwcmV2ID0gMDsKICAgIHZhciBjb2xvdXJzID0geyB0cmFjazogJycsIG5lYXI6ICcnLCBmYXI6ICcnIH07CiAgICB2YXIgYWltID0geyB4OiAwLCB5OiAwLCB0eDogMCwgdHk6IDAsIGlkbGVTaW5jZTogLTFlOSB9OwogICAgLy8gTW92ZW1lbnQgYnVkZ2V0IChXQ0FHIDIuMi4yKTogdGhlIGZpZWxkIHdhbmRlcnMgb24gaXRzIG93biBmb3IgYXQgbW9zdCBXQU5ERVIgbXMgYWZ0ZXIgaXQgaXMgZmlyc3QKICAgIC8vIHNlZW4sIHRoZW4gcmVzdHM7IGFmdGVyd2FyZHMgb25seSB0aGUgcG9pbnRlciBtb3ZlcyBpdCwgYW5kIGl0IHN0b3BzIG9uY2UgdGhlIHJpbmdzIGhhdmUgc2V0dGxlZC4KICAgIHZhciBXQU5ERVIgPSAzMDAwLCBjbG9jayA9IDAsIGFjdGl2ZVVudGlsID0gMCwgaW50cm9Eb25lID0gZmFsc2U7CgogICAgZnVuY3Rpb24gcmVhZENvbG91cnMoKSB7CiAgICAgIHZhciBsb29rID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7CiAgICAgIGNvbG91cnMudHJhY2sgPSBsb29rLmdldFByb3BlcnR5VmFsdWUoJy0tcmItY2FtcG8tdHJhY2snKS50cmltKCkgfHwgJ3JnYmEoMjM5LDI0NCwyNTUsLjA3KSc7CiAgICAgIGNvbG91cnMubmVhciA9IGxvb2suZ2V0UHJvcGVydHlWYWx1ZSgnLS1yYi1jYW1wby1uZWFyJykudHJpbSgpIHx8IEJMVUU7CiAgICAgIGNvbG91cnMuZmFyID0gbG9vay5nZXRQcm9wZXJ0eVZhbHVlKCctLXJiLWNhbXBvLWZhcicpLnRyaW0oKSB8fCBMSUdIVDsKICAgIH0KCiAgICBmdW5jdGlvbiBsYXlvdXQoKSB7CiAgICAgIHZhciBkcHIgPSBNYXRoLm1pbih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxLCAyKTsKICAgICAgd2lkdGggPSBlbC5jbGllbnRXaWR0aDsgaGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0OwogICAgICBjYW52YXMud2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogZHByKTsgY2FudmFzLmhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0ICogZHByKTsKICAgICAgY3R4LnNldFRyYW5zZm9ybShkcHIsIDAsIDAsIGRwciwgMCwgMCk7CiAgICAgIHZhciBtYXhDZWxsID0gcGFyc2VGbG9hdChlbC5kYXRhc2V0LmNlbGwpIHx8IDg2OyAgIC8vIGRhdGEtY2VsbD0iNjAiIG1ha2VzIGEgZmluZXIgZmllbGQKICAgICAgY2VsbCA9IGNsYW1wKHdpZHRoIC8gMTYsIE1hdGgubWluKDQ2LCBtYXhDZWxsKSwgbWF4Q2VsbCk7CiAgICAgIHJpbmdzID0gW107CiAgICAgIGZvciAodmFyIHkgPSBjZWxsIC8gMjsgeSA8IGhlaWdodCArIGNlbGw7IHkgKz0gY2VsbCkgewogICAgICAgIGZvciAodmFyIHggPSBjZWxsIC8gMjsgeCA8IHdpZHRoICsgY2VsbDsgeCArPSBjZWxsKSByaW5ncy5wdXNoKHsgeDogeCwgeTogeSwgYTogMCB9KTsKICAgICAgfQogICAgICBpZiAoIWFpbS54KSB7IGFpbS54ID0gYWltLnR4ID0gd2lkdGggKiAwLjcyOyBhaW0ueSA9IGFpbS50eSA9IGhlaWdodCAqIDAuNDsgfQogICAgICByZWFkQ29sb3VycygpOwogICAgICBkcmF3KDAsIHRydWUpOyAgIC8vIGEgbmV3IGdyaWQgc3RhcnRzIHNldHRsZWQ6IG5vIHNuYXAgdG8gYW5nbGUgMCwgYW5kIGEgY29ycmVjdCByZWR1Y2VkLW1vdGlvbiBmcmFtZQogICAgfQoKICAgIC8vIERyYXdzIG9uZSBmcmFtZTsgcmV0dXJucyB0aGUgbGFyZ2VzdCB0dXJuIHN0aWxsIHVuZGVyIHdheSAocmFkaWFucykuCiAgICBmdW5jdGlvbiBkcmF3KGR0LCBzbmFwKSB7CiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIHZhciByID0gY2VsbCAqIDAuMywgbHcgPSBjZWxsICogMC4xMywgcmVhY2ggPSBjZWxsICogNC41LCBtb3ZpbmcgPSAwOwogICAgICBjdHgubGluZVdpZHRoID0gbHc7CiAgICAgIGN0eC5saW5lQ2FwID0gJ2J1dHQnOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJpbmcgPSByaW5nc1tpXTsKICAgICAgICB2YXIgZHggPSBhaW0ueCAtIHJpbmcueCwgZHkgPSBhaW0ueSAtIHJpbmcueTsKICAgICAgICB2YXIgbmVhciA9IE1hdGguZXhwKC1NYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpIC8gcmVhY2gpOwogICAgICAgIHZhciBkcmlmdCA9IE1hdGguc2luKGNsb2NrICogMC4wMDA0NSArIChyaW5nLnggKyByaW5nLnkgKiAwLjYpICogMC4wMDYpICogTWF0aC5QSTsKICAgICAgICB2YXIgdGFyZ2V0ID0gTWF0aC5hdGFuMihkeSwgZHgpOwogICAgICAgIC8vIGVhc2UgZWFjaCBzZWdtZW50IHRvd2FyZCBpdHMgYWltLCB0YWtpbmcgdGhlIHNob3J0IHdheSByb3VuZAogICAgICAgIHZhciB3YW50ID0gbmVhciA+IDAuMTIgPyB0YXJnZXQgOiBkcmlmdDsKICAgICAgICB2YXIgZGlmZiA9IE1hdGguYXRhbjIoTWF0aC5zaW4od2FudCAtIHJpbmcuYSksIE1hdGguY29zKHdhbnQgLSByaW5nLmEpKTsKICAgICAgICBpZiAoc25hcCkgcmluZy5hID0gd2FudDsKICAgICAgICBlbHNlIHsgcmluZy5hICs9IGRpZmYgKiBlYXNlKDAuMDYgKyBuZWFyICogMC4xLCBkdCk7IGlmIChNYXRoLmFicyhkaWZmKSA+IG1vdmluZykgbW92aW5nID0gTWF0aC5hYnMoZGlmZik7IH0KICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvdXJzLnRyYWNrOwogICAgICAgIGN0eC5iZWdpblBhdGgoKTsgY3R4LmFyYyhyaW5nLngsIHJpbmcueSwgciwgMCwgTWF0aC5QSSAqIDIpOyBjdHguc3Ryb2tlKCk7CiAgICAgICAgdmFyIHNwYW4gPSBNYXRoLlBJICogKDAuMyArIG5lYXIgKiAwLjU1KTsKICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBuZWFyID4gMC40MiA\/IGNvbG91cnMubmVhciA6IGNvbG91cnMuZmFyOwogICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDAuMTggKyBuZWFyICogMC44MjsKICAgICAgICBjdHguYmVnaW5QYXRoKCk7IGN0eC5hcmMocmluZy54LCByaW5nLnksIHIsIHJpbmcuYSAtIHNwYW4gLyAyLCByaW5nLmEgKyBzcGFuIC8gMik7IGN0eC5zdHJva2UoKTsKICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxOwogICAgICB9CiAgICAgIHJldHVybiBtb3Zpbmc7CiAgICB9CgogICAgZnVuY3Rpb24gZnJhbWUobm93KSB7CiAgICAgIHZhciBkdCA9IHByZXYgPyBNYXRoLm1pbihub3cgLSBwcmV2LCA1MCkgOiAxNi42Njc7IHByZXYgPSBub3c7CiAgICAgIHZhciBhY3RpdmUgPSBub3cgPCBhY3RpdmVVbnRpbDsKICAgICAgaWYgKGFjdGl2ZSkgY2xvY2sgKz0gZHQ7ICAgLy8gdGhlIGRyaWZ0IG9ubHkgYWR2YW5jZXMgd2hpbGUgdGhlIGZpZWxkIGlzIGFsbG93ZWQgdG8gbW92ZSBieSBpdHNlbGYKICAgICAgLy8gbm8gcG9pbnRlciBmb3IgMi41IHMgZHVyaW5nIHRoZSBpbnRybyB3aW5kb3c6IHRoZSBhaW0gd2FuZGVycyBzbG93bHkgb24gaXRzIG93bgogICAgICBpZiAoYWN0aXZlICYmIG5vdyAtIGFpbS5pZGxlU2luY2UgPiAyNTAwKSB7CiAgICAgICAgYWltLnR4ID0gd2lkdGggKiAoMC42MiArIE1hdGguY29zKGNsb2NrICogMC4wMDAyMSArIDEuMikgKiAwLjI2KTsKICAgICAgICBhaW0udHkgPSBoZWlnaHQgKiAoMC40NSArIE1hdGguc2luKGNsb2NrICogMC4wMDAzMyArIDAuNCkgKiAwLjMpOwogICAgICB9CiAgICAgIHZhciBrID0gZWFzZSgwLjA3LCBkdCk7CiAgICAgIGFpbS54ICs9IChhaW0udHggLSBhaW0ueCkgKiBrOwogICAgICBhaW0ueSArPSAoYWltLnR5IC0gYWltLnkpICogazsKICAgICAgdmFyIG1vdmluZyA9IGRyYXcoZHQsIGZhbHNlKTsKICAgICAgdmFyIGFpbU1vdmluZyA9IE1hdGguYWJzKGFpbS50eCAtIGFpbS54KSArIE1hdGguYWJzKGFpbS50eSAtIGFpbS55KSA+IDAuNTsKICAgICAgaWYgKGFjdGl2ZSB8fCBhaW1Nb3ZpbmcgfHwgbW92aW5nID4gMC4wMDMpIHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7CiAgICAgIGVsc2UgeyByYWYgPSAwOyBwcmV2ID0gMDsgfSAgIC8vIHNldHRsZWQ6IHN0b3AgZHJhd2luZyB1bnRpbCB0aGUgcG9pbnRlciBtb3ZlcyBhZ2FpbgogICAgfQogICAgZnVuY3Rpb24gd2FrZSgpIHsgaWYgKCFyYWYgJiYgdmlzaWJsZSkgeyBwcmV2ID0gMDsgcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lKTsgfSB9CgogICAgdmFyIHZpc2libGUgPSBmYWxzZTsKICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgaWYgKHJlZHVjZWQubWF0Y2hlcykgcmV0dXJuOwogICAgICB2YXIgYm94ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGFpbS50eCA9IGUuY2xpZW50WCAtIGJveC5sZWZ0OyBhaW0udHkgPSBlLmNsaWVudFkgLSBib3gudG9wOwogICAgICBhaW0uaWRsZVNpbmNlID0gcGVyZm9ybWFuY2Uubm93KCk7CiAgICAgIHdha2UoKTsKICAgIH0sIHsgcGFzc2l2ZTogdHJ1ZSB9KTsKCiAgICBpZiAoJ1Jlc2l6ZU9ic2VydmVyJyBpbiB3aW5kb3cpIG5ldyBSZXNpemVPYnNlcnZlcihsYXlvdXQpLm9ic2VydmUoZWwpOwogICAgZWxzZSB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgbGF5b3V0KTsKICAgIGxheW91dCgpOwogICAgaWYgKHJlZHVjZWQubWF0Y2hlcykgcmV0dXJuIHsgcGxheTogZnVuY3Rpb24gKCkge30gfTsKICAgIHdoaWxlVmlzaWJsZShlbCwKICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgIHZpc2libGUgPSB0cnVlOwogICAgICAgIGlmICghaW50cm9Eb25lKSB7IGludHJvRG9uZSA9IHRydWU7IGFjdGl2ZVVudGlsID0gcGVyZm9ybWFuY2Uubm93KCkgKyBXQU5ERVI7IH0KICAgICAgICB3YWtlKCk7CiAgICAgIH0sCiAgICAgIGZ1bmN0aW9uICgpIHsgdmlzaWJsZSA9IGZhbHNlOyBjYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOyByYWYgPSAwOyB9KTsKICAgIHJldHVybiB7IHBsYXk6IGZ1bmN0aW9uICgpIHsgYWltLmlkbGVTaW5jZSA9IC0xZTk7IGFjdGl2ZVVudGlsID0gcGVyZm9ybWFuY2Uubm93KCkgKyBXQU5ERVI7IHdha2UoKTsgfSB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSA0LiB0cmFtYSA6IHRoZSB3b3JkbWFyayBwYXR0ZXJuIC0tLS0tLS0tLS0gKi8KCiAgdmFyIHNwcml0ZSA9IG51bGw7CiAgZnVuY3Rpb24gZW5zdXJlU3ByaXRlKCkgewogICAgaWYgKHNwcml0ZSkgcmV0dXJuOwogICAgc3ByaXRlID0gc3ZnKCdzdmcnLCB7ICdhcmlhLWhpZGRlbic6ICd0cnVlJywgc3R5bGU6ICdwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowO292ZXJmbG93OmhpZGRlbicgfSk7CiAgICBbJ3JvZG9sZm8nLCAnYmFzaWxpbyddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgdmFyIHN5bWJvbCA9IHN2Zygnc3ltYm9sJywgeyBpZDogJ3Jidy0nICsgbmFtZSwgdmlld0JveDogJzAgMCAnICsgV09SRFNbbmFtZV0ud2lkdGggKyAnICcgKyBXT1JEU1tuYW1lXS5oZWlnaHQgfSwgc3ByaXRlKTsKICAgICAgd29yZChuYW1lLCBzeW1ib2wpOwogICAgfSk7CiAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzcHJpdGUpOwogIH0KCiAgZnVuY3Rpb24gdHJhbWEoZWwpIHsKICAgIGVuc3VyZVNwcml0ZSgpOwogICAgZWwuY2xhc3NMaXN0LmFkZCgncmItdHJhbWEnKTsKICAgIGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOwogICAgZWwudGV4dENvbnRlbnQgPSAnJzsKICAgIHZhciByb3dDb3VudCA9IHBhcnNlSW50KGVsLmRhdGFzZXQucm93cyB8fCAnNCcsIDEwKTsKICAgIHZhciByb3dzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHsKICAgICAgdmFyIG5hbWUgPSBpICUgMiA\/ICdiYXNpbGlvJyA6ICdyb2RvbGZvJzsKICAgICAgdmFyIHJvdyA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgcm93LmNsYXNzTmFtZSA9ICdyYi10cmFtYS1yb3cnOwogICAgICB2YXIgdHJhY2sgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIHRyYWNrLmNsYXNzTmFtZSA9ICdyYi10cmFtYS10cmFjayc7CiAgICAgIC8vIHdvcmQsIGdob3N0LCB3b3JkLCBnaG9zdCAuLi4gdHdpY2Ugb3Zlciwgc28gdGhlIGxvb3AgaXMgc2VhbWxlc3MKICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCAxMjsgaysrKSB7CiAgICAgICAgdmFyIGNlbGwgPSBzdmcoJ3N2ZycsIHsgdmlld0JveDogJzAgMCAnICsgV09SRFNbbmFtZV0ud2lkdGggKyAnICcgKyBXT1JEU1tuYW1lXS5oZWlnaHQsICdjbGFzcyc6IGsgJSAyID8gJ3JiLWdob3N0JyA6ICcnIH0sIHRyYWNrKTsKICAgICAgICBzdmcoJ3VzZScsIHsgaHJlZjogJyNyYnctJyArIChrICUgMiA\/IChuYW1lID09PSAncm9kb2xmbycgPyAnYmFzaWxpbycgOiAncm9kb2xmbycpIDogbmFtZSkgfSwgY2VsbCk7CiAgICAgIH0KICAgICAgcm93LmFwcGVuZENoaWxkKHRyYWNrKTsKICAgICAgZWwuYXBwZW5kQ2hpbGQocm93KTsKICAgICAgLy8gImJhc2lsaW8iIHJvd3Mgc3RhcnQgdW5kZXIgdGhlIGZpbmFsICJvIiwgbGlrZSB0aGUgc3RhY2tlZCBsb2NrdXAKICAgICAgcm93cy5wdXNoKHsgdHJhY2s6IHRyYWNrLCBkaXI6IGkgJSAyID8gMSA6IC0xLCB4OiBpICUgMiA\/IC0wLjE2IDogMCwgc3BhbjogMCB9KTsKICAgIH0KCiAgICAvLyBNb3ZlcyB3aXRoIHRoZSBzY3JvbGwgb25seSAoV0NBRyAyLjIuMik6IHNjcm9sbGluZyBwdXNoZXMgdGhlIHJvd3MsIHRoZSBwdXNoIGRlY2F5cywgYW5kIHRoZSBsb29wCiAgICAvLyBzdG9wcyBvbmNlIHRoZXkgYXJlIHN0aWxsLiBwbGF5KCkgZ2l2ZXMgb25lIHB1c2ggKHRoZSBzaG93Y2FzZSdzIHJlcGxheSkuCiAgICB2YXIgc3BlZWQgPSAwLCBsYXN0U2Nyb2xsID0gd2luZG93LnNjcm9sbFksIHJhZiA9IDAsIHByZXYgPSAwLCB2aXNpYmxlID0gZmFsc2U7CiAgICBmdW5jdGlvbiByZW5kZXIoKSB7CiAgICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7CiAgICAgICAgdmFyIG9mZnNldCA9ICgocm93LnggJSAxKSArIDEpICUgMTsgICAvLyByb3cueCBpcyBtZWFzdXJlZCBpbiBsb29wIGxlbmd0aHMKICAgICAgICByb3cudHJhY2suc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZTNkKCcgKyAoLW9mZnNldCAqIHJvdy5zcGFuKSArICdweCwwLDApJzsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBtZWFzdXJlKCkgewogICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgeyByb3cuc3BhbiA9IHJvdy50cmFjay5zY3JvbGxXaWR0aCAvIDI7IH0pOwogICAgICByZW5kZXIoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGZyYW1lKG5vdykgewogICAgICB2YXIgZHQgPSBwcmV2ID8gTWF0aC5taW4obm93IC0gcHJldiwgNTApIDogMTYuNjY3OyBwcmV2ID0gbm93OwogICAgICB2YXIgc2Nyb2xsID0gd2luZG93LnNjcm9sbFk7CiAgICAgIHNwZWVkICs9IGNsYW1wKHNjcm9sbCAtIGxhc3RTY3JvbGwsIC00MDAsIDQwMCkgKiAwLjk7IGxhc3RTY3JvbGwgPSBzY3JvbGw7ICAgLy8gYSBqdW1wIChhbmNob3IgbGluaykgaXMgY2FwcGVkCiAgICAgIHNwZWVkICo9IDEgLSBlYXNlKDAuMSwgZHQpOwogICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgewogICAgICAgIGlmIChyb3cuc3Bhbikgcm93LnggKz0gcm93LmRpciAqIChNYXRoLmFicyhzcGVlZCkgKiAwLjA1ICogZHQgLyAxNi42NjcpIC8gcm93LnNwYW47CiAgICAgIH0pOwogICAgICByZW5kZXIoKTsKICAgICAgaWYgKE1hdGguYWJzKHNwZWVkKSA+IDAuMDUpIHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7CiAgICAgIGVsc2UgeyByYWYgPSAwOyBwcmV2ID0gMDsgc3BlZWQgPSAwOyB9CiAgICB9CiAgICBmdW5jdGlvbiB3YWtlKCkgeyBpZiAoIXJhZiAmJiB2aXNpYmxlKSB7IHByZXYgPSAwOyByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWUpOyB9IH0KICAgIGlmICgnUmVzaXplT2JzZXJ2ZXInIGluIHdpbmRvdykgbmV3IFJlc2l6ZU9ic2VydmVyKG1lYXN1cmUpLm9ic2VydmUoZWwpOwogICAgbWVhc3VyZSgpOwogICAgaWYgKHJlZHVjZWQubWF0Y2hlcykgcmV0dXJuIHsgcGxheTogZnVuY3Rpb24gKCkge30gfTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7IGlmICh2aXNpYmxlKSB3YWtlKCk7IGVsc2UgbGFzdFNjcm9sbCA9IHdpbmRvdy5zY3JvbGxZOyB9LCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICB3aGlsZVZpc2libGUoZWwsCiAgICAgIGZ1bmN0aW9uICgpIHsgdmlzaWJsZSA9IHRydWU7IGxhc3RTY3JvbGwgPSB3aW5kb3cuc2Nyb2xsWTsgfSwKICAgICAgZnVuY3Rpb24gKCkgeyB2aXNpYmxlID0gZmFsc2U7IGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7IHJhZiA9IDA7IHNwZWVkID0gMDsgfSk7CiAgICByZXR1cm4geyBwbGF5OiBmdW5jdGlvbiAoKSB7IHNwZWVkID0gOTAwOyB3YWtlKCk7IH0gfTsKICB9CgogIC8qIC0tLS0tLS0tLS0gNS4gcmVncmEgOiBzdHJpa2UgdGhlIGV4Y2VwdGlvbiwga2VlcCB0aGUgcnVsZSAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHJlZ3JhKGVsKSB7CiAgICBlbC5jbGFzc0xpc3QuYWRkKCdyYi1yZWdyYScpOwogICAgdmFyIHN0cmlrZXMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdzLCBkZWwnKTsKICAgIHZhciBrZWVwcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2VtJyk7CiAgICB2YXIgcnVubmluZyA9IFtdOwoKICAgIC8vIGxpbmVzOiBmYWxzZSBza2lwcyB0aGUgaGVhZGxpbmUncyBvd24gZW50cmFuY2UgKGl0IHdhcyBhbHJlYWR5IHBhaW50ZWQpLCBhbmQgb25seSBkcmF3cyB0aGUgc3RyaWtlCiAgICAvLyBhbmQgdGhlIHVuZGVybGluZSwgd2hpY2ggbmV2ZXIgaGlkZSB0aGUgd29yZHMuCiAgICBmdW5jdGlvbiBwbGF5KGxpbmVzKSB7CiAgICAgIHJ1bm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoYSkgeyBhLmNhbmNlbCgpOyB9KTsKICAgICAgcnVubmluZyA9IFtdOwogICAgICBpZiAocmVkdWNlZC5tYXRjaGVzKSByZXR1cm4gcnVubmluZzsKICAgICAgdmFyIGRlbGF5ID0gNjUwOwogICAgICBpZiAobGluZXMgPT09IGZhbHNlKSBkZWxheSA9IDE1MDsKICAgICAgZWxzZSBydW5uaW5nLnB1c2goZWwuYW5pbWF0ZSgKICAgICAgICBbeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC4zNWVtKScsIG9wYWNpdHk6IDAgfSwgeyB0cmFuc2Zvcm06ICdub25lJywgb3BhY2l0eTogMSB9XSwKICAgICAgICB7IGR1cmF0aW9uOiA3MDAsIGVhc2luZzogU0VUVExFLCBmaWxsOiAnYmFja3dhcmRzJyB9KSk7CiAgICAgIC8vIGxpbmUgd2VpZ2h0cyBtYXRjaCByYi1tb3Rpb24uY3NzICguMDhlbSBzdHJpa2UsIC4xZW0gdW5kZXJsaW5lKQogICAgICBzdHJpa2VzLmZvckVhY2goZnVuY3Rpb24gKHMpIHsKICAgICAgICBydW5uaW5nLnB1c2gocy5hbmltYXRlKAogICAgICAgICAgW3sgYmFja2dyb3VuZFNpemU6ICcwJSAuMDhlbScsIG9wYWNpdHk6IDEgfSwKICAgICAgICAgICB7IGJhY2tncm91bmRTaXplOiAnMTAwJSAuMDhlbScsIG9wYWNpdHk6IDEsIG9mZnNldDogMC43NSB9LAogICAgICAgICAgIHsgYmFja2dyb3VuZFNpemU6ICcxMDAlIC4wOGVtJywgb3BhY2l0eTogMC41NSB9XSwKICAgICAgICAgIHsgZHVyYXRpb246IDkwMCwgZGVsYXk6IGRlbGF5LCBlYXNpbmc6ICdjdWJpYy1iZXppZXIoLjYsMCwuMiwxKScsIGZpbGw6ICdiYWNrd2FyZHMnIH0pKTsKICAgICAgICBkZWxheSArPSA0NTA7CiAgICAgIH0pOwogICAgICBrZWVwcy5mb3JFYWNoKGZ1bmN0aW9uIChlbSkgewogICAgICAgIHJ1bm5pbmcucHVzaChlbS5hbmltYXRlKAogICAgICAgICAgW3sgYmFja2dyb3VuZFNpemU6ICcwJSAuMWVtJyB9LCB7IGJhY2tncm91bmRTaXplOiAnMTAwJSAuMWVtJyB9XSwKICAgICAgICAgIHsgZHVyYXRpb246IDcwMCwgZGVsYXk6IGRlbGF5ICsgMjUwLCBlYXNpbmc6IFNFVFRMRSwgZmlsbDogJ2JhY2t3YXJkcycgfSkpOwogICAgICAgIGRlbGF5ICs9IDMwMDsKICAgICAgfSk7CiAgICAgIHJldHVybiBydW5uaW5nOwogICAgfQoKICAgIGVudHJhbmNlKGVsLCBwbGF5LCAwLjYsIGZ1bmN0aW9uICgpIHsgcGxheShmYWxzZSk7IH0pOwogICAgcmV0dXJuIHsgcGxheTogcGxheSB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSA2LiBmYWl4YSA6IHRoZSByaW5nIGJhbmQgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBmYWl4YShlbCkgewogICAgZWwuY2xhc3NMaXN0LmFkZCgncmItZmFpeGEnKTsKICAgIGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOwogICAgZWwudGV4dENvbnRlbnQgPSAnJzsKICAgIHZhciBjb3VudCA9IHBhcnNlSW50KGVsLmRhdGFzZXQuY291bnQgfHwgJzknLCAxMCk7CiAgICB2YXIgYmFuZCA9IHN2Zygnc3ZnJywgeyB2aWV3Qm94OiAnMCAwICcgKyBjb3VudCAqIDEwMCArICcgNTAnLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiAneE1pZFlNYXggc2xpY2UnIH0sIGVsKTsKICAgIHZhciBSID0gMzQsIEMgPSAyICogTWF0aC5QSSAqIFIsIEdBUCA9IDIuNTsKICAgIHZhciBwYWxldHRlID0gW0JMVUUsIExJR0hULCAnY3VycmVudENvbG9yJ107CiAgICB2YXIgcmluZ3MgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICB2YXIgZyA9IHN2ZygnZycsIHt9LCBiYW5kKTsKICAgICAgdmFyIHNwaW4gPSBzdmcoJ2cnLCB7fSwgZyk7CiAgICAgIHZhciBzdGFydCA9IDA7CiAgICAgIFswLjMsIDAuNCwgMC4zXS5mb3JFYWNoKGZ1bmN0aW9uIChzaGFyZSwgaykgewogICAgICAgIHN2ZygnY2lyY2xlJywgewogICAgICAgICAgY3g6IDAsIGN5OiAwLCByOiBSLCBmaWxsOiAnbm9uZScsICdzdHJva2Utd2lkdGgnOiAxNywKICAgICAgICAgIHN0cm9rZTogcGFsZXR0ZVsoaSArIGspICUgM10sCiAgICAgICAgICAnc3Ryb2tlLWRhc2hhcnJheSc6IChDICogc2hhcmUgLSBHQVApICsgJyAnICsgQywKICAgICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSgnICsgc3RhcnQgKyAnKScKICAgICAgICB9LCBzcGluKTsKICAgICAgICBzdGFydCArPSAzNjAgKiBzaGFyZTsKICAgICAgfSk7CiAgICAgIHJpbmdzLnB1c2goeyBnOiBnLCBzcGluOiBzcGluLCB4OiBpICogMTAwICsgNTAsIGRpcjogaSAlIDIgPyAxIDogLTEgfSk7CiAgICB9CgogICAgLy8gcmlzZTogMCA9IHJpbmdzIHBhcmtlZCBiZWxvdyB0aGUgZWRnZSwgMSA9IGluIHBsYWNlLiBwcm9ncmVzczogc2Nyb2xsIHBvc2l0aW9uLCB0dXJucyB0aGUgcmluZ3MuCiAgICB2YXIgcmlzZSA9IDEsIHByb2dyZXNzID0gMCwgcmFmID0gMDsKICAgIGZ1bmN0aW9uIHBsYWNlKCkgewogICAgICByaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChyaW5nLCBpKSB7CiAgICAgICAgdmFyIGxpZnQgPSBjbGFtcChyaXNlICogMS44IC0gKGNvdW50ID4gMSA\/IGkgLyAoY291bnQgLSAxKSA6IDApICogMC44LCAwLCAxKTsgICAvLyBldmVyeSByaW5nIGxhbmRzLCBhbnkgY291bnQKICAgICAgICB2YXIgeSA9IDUwICsgTWF0aC5wb3coMSAtIGxpZnQsIDMpICogNjA7CiAgICAgICAgcmluZy5nLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgcmluZy54ICsgJyAnICsgeSArICcpJyk7CiAgICAgICAgcmluZy5zcGluLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgJ3JvdGF0ZSgnICsgKHJpbmcuZGlyICogcHJvZ3Jlc3MgKiAxNjAgKyBpICogMjMpICsgJyknKTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7CiAgICAgIHZhciBib3ggPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgcHJvZ3Jlc3MgPSBjbGFtcCgod2luZG93LmlubmVySGVpZ2h0IC0gYm94LnRvcCkgLyAod2luZG93LmlubmVySGVpZ2h0ICsgYm94LmhlaWdodCksIDAsIDEpOwogICAgICBwbGFjZSgpOwogICAgICByYWYgPSAwOwogICAgfQogICAgZnVuY3Rpb24gb25TY3JvbGwoKSB7IGlmICghcmFmKSByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlKTsgfQoKICAgIGZ1bmN0aW9uIHBsYXkoKSB7CiAgICAgIGlmIChyZWR1Y2VkLm1hdGNoZXMpIHJldHVybjsKICAgICAgdmFyIHQwID0gcGVyZm9ybWFuY2Uubm93KCk7CiAgICAgIChmdW5jdGlvbiBzdGVwKG5vdykgewogICAgICAgIHJpc2UgPSBjbGFtcCgobm93IC0gdDApIC8gMTQwMCwgMCwgMSk7CiAgICAgICAgcGxhY2UoKTsKICAgICAgICBpZiAocmlzZSA8IDEpIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTsKICAgICAgfSkodDApOwogICAgfQoKICAgIGlmICghcmVkdWNlZC5tYXRjaGVzKSB7CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pOwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25TY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTsKICAgICAgaWYgKCFpblZpZXdOb3coZWwpKSB7IHJpc2UgPSAwOyBvbkZpcnN0VmlldyhlbCwgcGxheSwgMC4yKTsgfQogICAgfQogICAgdXBkYXRlKCk7CiAgICByZXR1cm4geyBwbGF5OiBwbGF5IH07CiAgfQoKICAvKiAtLS0tLS0tLS0tIDcuIG1vbm9ncmFtYSA6IHIsIG8sIGIgb24gb25lIHJpbmcgKHRoZSBoZWFkZXIgbG9nbykgLS0tLS0tLS0tLSAqLwogIC8vIFJlYnVpbHQgZnJvbSB0aGUgc2l0ZSBoZWFkZXIgR0lGICgwMS1SLU8tQi1PLmdpZiwgNy40OCBzIGxvb3ApIHVzaW5nIHRoZSBsb2dvJ3Mgb3duIHByb3BvcnRpb25zLgogIC8vIFRoZSByLCBvIGFuZCBiIHNoYXJlIG9uZSByaW5nOyB0aGUgc3RlbXMgb2YgciBhbmQgYiBzaXQgb24gdGhlIHJpbmcncyBsZWZ0IHNpZGUuCiAgLy8gICByOiBzdGVtICsgdG9wIGFyYyAocmIwMCkuIEl0cyBsaWdodC1ibHVlIHBpZWNlIGlzIHRoZSByaW5nJ3MgbG93ZXItbGVmdCBxdWFydGVyIENMSVBQRUQgdG8KICAvLyAgICAgIHRoZSBzdGVtJ3Mgd2lkdGggKGFzIGluIHRoZSBsb2dvKTsgdGhlIHJpbmcgbmV2ZXIgY3VydmVzIG91dCBwYXN0IHRoZSBzdGVtLgogIC8vICAgbzogdGhlIHJpbmcgYWxvbmUuICAgYjogcmluZyArIHRhbGwgc3RlbSwgbG93ZXItbGVmdCBxdWFydGVyIHJiMDEsIHVwcGVyLWxlZnQgcmIwMC4KICAvLyBQYWludCBvcmRlcjogdGhlIHN0ZW0gZmlyc3QsIHRoZSByaW5nIHBpZWNlcyBvdmVyIGl0IChhcyBpbiB0aGUgR0lGOiB3aGVyZSB0aGUgcmluZyBjcm9zc2VzCiAgLy8gdGhlIHN0ZW0geW91IHNlZSB0aGUgcmluZydzIGNvbG91cjsgdGhlIHN0ZW0gc2hvd3Mgd2hpdGUgb25seSBvdXRzaWRlIHRoZSByaW5nKS4KCiAgdmFyIG1vbm9ncmFtYUNvdW50ID0gMDsKICBmdW5jdGlvbiBtb25vZ3JhbWEoZWwpIHsKICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3JiLW1vbm9ncmFtYScpOwogICAgZWwudGV4dENvbnRlbnQgPSAnJzsKICAgIHZhciBpZCA9ICdyYm1vbm8nICsgKCsrbW9ub2dyYW1hQ291bnQpOwogICAgdmFyIHJvb3QgPSBzdmcoJ3N2ZycsIHsgdmlld0JveDogJy0yMyAtNTAgNDYgNzMnLCByb2xlOiAnaW1nJywgJ2FyaWEtbGFiZWwnOiAnUm9kb2xmbyBCYXNpbGlvJyB9LCBlbCk7CiAgICB2YXIgUiA9IDE2LjksIFcgPSA5LjA1OyAgICAgICAgICAgICAgICAgICAgICAgLy8gcmluZyByYWRpdXMgYW5kIHRoaWNrbmVzcywgZnJvbSBMb2dvIDAxIFYwMS5zdmcKICAgIHZhciBjbGlwID0gc3ZnKCdjbGlwUGF0aCcsIHsgaWQ6IGlkIH0sIHN2ZygnZGVmcycsIHt9LCByb290KSk7CiAgICBzdmcoJ3JlY3QnLCB7IHg6IC0yMS40LCB5OiAwLCB3aWR0aDogVywgaGVpZ2h0OiAyMS42IH0sIGNsaXApOyAgIC8vIHRoZSBzdGVtJ3MgbG93ZXIgaGFsZgogICAgZnVuY3Rpb24gYXJjKHN0YXJ0LCBkYXNoKSB7CiAgICAgIHJldHVybiBzdmcoJ2NpcmNsZScsIHsgY3g6IDAsIGN5OiAwLCByOiBSLCAnc3Ryb2tlLXdpZHRoJzogVywgcGF0aExlbmd0aDogMTAwLAogICAgICAgICdzdHJva2UtZGFzaGFycmF5JzogZGFzaCwgdHJhbnNmb3JtOiAncm90YXRlKCcgKyBzdGFydCArICcpJyB9LCByb290KTsKICAgIH0KICAgIHZhciBzdGVtID0gc3ZnKCdyZWN0JywgeyB4OiAtMjEuNCwgeTogLTQ4LjQsIHdpZHRoOiBXLCBoZWlnaHQ6IDcwLCAnY2xhc3MnOiAncmItaW5rJyB9LCByb290KTsKICAgIHN0ZW0uc3R5bGUudHJhbnNmb3JtQm94ID0gJ2ZpbGwtYm94JzsKICAgIHN0ZW0uc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJzUwJSAxMDAlJzsKICAgIHZhciB1cHBlciA9IGFyYygxODAsICczNSAxMDAnKTsgICAgICAgICAgICAgICAvLyAxODDCsCB0byB+MzA1wrA6IHRoZSByJ3Mgc2hvdWxkZXIsIHRoZSBiJ3MgdXBwZXItbGVmdAogICAgdmFyIHN3ZWVwID0gYXJjKDMwNSwgJzAgMTAwJyk7ICAgICAgICAgICAgICAgIC8vIDMwNcKwIHJvdW5kIHRvIDE4MMKwOiBjbG9zZXMgdGhlIG8gKDY1LjI4JSkKICAgIHZhciBsb3dlckIgPSBhcmMoOTAsICcyNSAxMDAnKTsgICAgICAgICAgICAgICAvLyBsb3dlci1sZWZ0IHF1YXJ0ZXIsIHdob2xlOiB0aGUgYgogICAgLy8gdGhlIHNhbWUgcXVhcnRlciwgb25seSBpbnNpZGUgdGhlIHN0ZW06IHRoZSByLiBUaGUgY2xpcCBzaXRzIG9uIGFuIHVudHJhbnNmb3JtZWQgZ3JvdXAsCiAgICAvLyBiZWNhdXNlIG9uIHRoZSByb3RhdGVkIGNpcmNsZSBpdHNlbGYgdGhlIGNsaXAgcmVjdGFuZ2xlIHdvdWxkIHJvdGF0ZSB3aXRoIGl0LgogICAgdmFyIGNsaXBwZWQgPSBzdmcoJ2cnLCB7ICdjbGlwLXBhdGgnOiAndXJsKCMnICsgaWQgKyAnKScgfSwgcm9vdCk7CiAgICB2YXIgbG93ZXJSID0gc3ZnKCdjaXJjbGUnLCB7IGN4OiAwLCBjeTogMCwgcjogUiwgJ3N0cm9rZS13aWR0aCc6IFcsIHBhdGhMZW5ndGg6IDEwMCwKICAgICAgJ3N0cm9rZS1kYXNoYXJyYXknOiAnMjUgMTAwJywgdHJhbnNmb3JtOiAncm90YXRlKDkwKScgfSwgY2xpcHBlZCk7CiAgICBzd2VlcC5zdHlsZS5zdHJva2UgPSAnY3VycmVudENvbG9yJzsKCiAgICAvLyBjb2xvdXIgaG9va3M6IC0tcmItbW9uby11cHBlciAvIC0tcmItbW9uby1sb3dlciAob24gYSBibHVlIGZpZWxkIHVzZSBwYXBlciArIHJiMDEsIGFzIHRoZSBicmFuZCBib29rIGRvZXMpCiAgICB2YXIgbG9vayA9IGdldENvbXB1dGVkU3R5bGUoZWwpOwogICAgdmFyIGluayA9IGxvb2suY29sb3I7CiAgICB2YXIgdXAgPSBsb29rLmdldFByb3BlcnR5VmFsdWUoJy0tcmItbW9uby11cHBlcicpLnRyaW0oKSB8fCBCTFVFOwogICAgdmFyIGxvdyA9IGxvb2suZ2V0UHJvcGVydHlWYWx1ZSgnLS1yYi1tb25vLWxvd2VyJykudHJpbSgpIHx8IExJR0hUOwogICAgbG93ZXJCLnN0eWxlLnN0cm9rZSA9IGxvdzsgbG93ZXJSLnN0eWxlLnN0cm9rZSA9IGxvdzsKICAgIHZhciBTVEFURVMgPSB7CiAgICAgIHI6IHsgc3RlbTogJ3NjYWxlWSguNjA2KScsIHVwcGVyOiB1cCwgc3dlZXA6ICcwIDEwMCcsIGxvd2VyQjogMCwgbG93ZXJSOiAxIH0sCiAgICAgIG86IHsgc3RlbTogJ3NjYWxlWSgwKScsIHVwcGVyOiBpbmssIHN3ZWVwOiAnNjUuNiAxMDAnLCBsb3dlckI6IDAsIGxvd2VyUjogMCB9LCAgIC8vIHBpZWNlcyBvdmVybGFwIHNsaWdodGx5OiBubyBoYWlybGluZSBzZWFtcwogICAgICBiOiB7IHN0ZW06ICdzY2FsZVkoMSknLCB1cHBlcjogdXAsIHN3ZWVwOiAnNjUuNiAxMDAnLCBsb3dlckI6IDEsIGxvd2VyUjogMCB9CiAgICB9OwogICAgLy8gcmVzdGluZyBmcmFtZSAoYW5kIHRoZSByZWR1Y2VkLW1vdGlvbiBmcmFtZSk6IHRoZSByCiAgICBzdGVtLnN0eWxlLnRyYW5zZm9ybSA9IFNUQVRFUy5yLnN0ZW07CiAgICB1cHBlci5zdHlsZS5zdHJva2UgPSB1cDsKICAgIGxvd2VyQi5zdHlsZS5vcGFjaXR5ID0gMDsKCiAgICB2YXIgTE9PUCA9IDc0ODA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBsZW5ndGggYXMgdGhlIGhlYWRlciBHSUYKICAgIHZhciBJTlRSTyA9IDQ4MDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb25lIGF1dG9wbGF5IGN5Y2xlOiB1bmRlciBmaXZlIHNlY29uZHMgKFdDQUcgMi4yLjIpCiAgICB2YXIgTUFSS1MgPSBbWzAsICdyJ10sIFsyMTAwLCAnciddLCBbMjQ1MCwgJ28nXSwgWzM1MDAsICdvJ10sIFszODUwLCAnYiddLCBbNTkwMCwgJ2InXSwgWzYyNTAsICdvJ10sIFs3MDUwLCAnbyddLCBbNzQ4MCwgJ3InXV07CiAgICBmdW5jdGlvbiBmcmFtZXMocGljaykgewogICAgICByZXR1cm4gTUFSS1MubWFwKGZ1bmN0aW9uIChtYXJrLCBpKSB7CiAgICAgICAgdmFyIGZyYW1lID0gcGljayhTVEFURVNbbWFya1sxXV0pOwogICAgICAgIGZyYW1lLm9mZnNldCA9IG1hcmtbMF0gLyBMT09QOwogICAgICAgIGZyYW1lLmVhc2luZyA9IGkgJSAyID8gU0VUVExFIDogJ2xpbmVhcic7IC8vIG9kZCBtYXJrcyBzdGFydCBhIGNoYW5nZTsgZXZlbiBtYXJrcyBob2xkCiAgICAgICAgcmV0dXJuIGZyYW1lOwogICAgICB9KTsKICAgIH0KICAgIHZhciBydW5uaW5nID0gW107CgogICAgLy8gb25lIGN5Y2xlLCByIC0+IG8gLT4gYiAtPiBvIC0+IHIsIGVuZGluZyBhdCByZXN0IG9uIHRoZSByCiAgICBmdW5jdGlvbiBwbGF5KGR1cmF0aW9uKSB7CiAgICAgIHJ1bm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoYSkgeyBhLmNhbmNlbCgpOyB9KTsKICAgICAgcnVubmluZyA9IFtdOwogICAgICBpZiAocmVkdWNlZC5tYXRjaGVzKSByZXR1cm47CiAgICAgIHZhciB0aW1pbmcgPSB7IGR1cmF0aW9uOiBkdXJhdGlvbiB8fCBMT09QLCBpdGVyYXRpb25zOiAxIH07CiAgICAgIHJ1bm5pbmcucHVzaChzdGVtLmFuaW1hdGUoZnJhbWVzKGZ1bmN0aW9uIChzKSB7IHJldHVybiB7IHRyYW5zZm9ybTogcy5zdGVtIH07IH0pLCB0aW1pbmcpKTsKICAgICAgcnVubmluZy5wdXNoKHVwcGVyLmFuaW1hdGUoZnJhbWVzKGZ1bmN0aW9uIChzKSB7IHJldHVybiB7IHN0cm9rZTogcy51cHBlciB9OyB9KSwgdGltaW5nKSk7CiAgICAgIHJ1bm5pbmcucHVzaChzd2VlcC5hbmltYXRlKGZyYW1lcyhmdW5jdGlvbiAocykgeyByZXR1cm4geyBzdHJva2VEYXNoYXJyYXk6IHMuc3dlZXAgfTsgfSksIHRpbWluZykpOwogICAgICBydW5uaW5nLnB1c2gobG93ZXJCLmFuaW1hdGUoZnJhbWVzKGZ1bmN0aW9uIChzKSB7IHJldHVybiB7IG9wYWNpdHk6IHMubG93ZXJCIH07IH0pLCB0aW1pbmcpKTsKICAgICAgcnVubmluZy5wdXNoKGxvd2VyUi5hbmltYXRlKGZyYW1lcyhmdW5jdGlvbiAocykgeyByZXR1cm4geyBvcGFjaXR5OiBzLmxvd2VyUiB9OyB9KSwgdGltaW5nKSk7CiAgICB9CgogICAgaWYgKCFyZWR1Y2VkLm1hdGNoZXMpIHsKICAgICAgb25GaXJzdFZpZXcoZWwsIGZ1bmN0aW9uICgpIHsgcGxheShJTlRSTyk7IH0sIDAuNSk7CiAgICAgIC8vIHJlcGxheXMgYXJlIHRoZSB2aXNpdG9yJ3M6IGhvdmVyaW5nIG9yIGZvY3VzaW5nIHRoZSBtYXJrIChvciB0aGUgbGluayB0aGF0IGhvbGRzIGl0KQogICAgICB2YXIgaG9zdCA9IGVsLmNsb3Nlc3QoJ2EsIGJ1dHRvbicpIHx8IGVsOwogICAgICB2YXIgcmVwbGF5ID0gZnVuY3Rpb24gKCkgeyBpZiAoIXJ1bm5pbmcubGVuZ3RoIHx8IHJ1bm5pbmdbMF0ucGxheVN0YXRlID09PSAnZmluaXNoZWQnKSBwbGF5KCk7IH07CiAgICAgIGhvc3QuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgcmVwbGF5KTsKICAgICAgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHJlcGxheSk7CiAgICB9CiAgICByZXR1cm4geyBwbGF5OiBwbGF5IH07CiAgfQoKICAvKiBMb2dvIGdlb21ldHJ5LCBmcm9tIEJyYW5kIGlkZW50aXR5L2xvZ29zL1NWRy9Mb2dvIDAxIFYwMS5zdmcgKHN0YWNrZWQgbG9ja3VwLCA0NjAgeCAxNTUpLgogICAgIEVhY2ggbGV0dGVyIGlzIGEgbGlzdCBvZiBbcGF0aCwgaXNBY2NlbnRTZWdtZW50XS4gUm91bmRlZCB0byAyIGRlY2ltYWxzLiAqLwogIHZhciBHTFlQSFMgPSB7InIiOltbIk05LjA0IDMzLjYxVjM1LjQ2QzguODAgMzUuNjIgOC41NyAzNS43OCA4LjM0IDM1Ljk0QzQuNDEgMzguNzMgMS41MSA0Mi42NyAwIDQ3LjEyVjMzLjYxSDkuMDRaIiwwXSxbIk0yNy45NyAzNC4wNEwyNS4xNyA0Mi42NEMyMy45NiA0Mi4yNCAyMi42OCA0Mi4wNCAyMS4zOCA0Mi4wNEMyMS4yMSA0Mi4wNCAyMS4wNSA0Mi4wNSAyMC44OSA0Mi4wNUMyMC43NyA0Mi4wNiAyMC42NiA0Mi4wNiAyMC41NSA0Mi4wN0MyMC40MCA0Mi4wOCAyMC4yNCA0Mi4wOSAyMC4wOSA0Mi4xMUMxOS44OSA0Mi4xMyAxOS43MCA0Mi4xNSAxOS41MCA0Mi4xOUMxOS4yOSA0Mi4yMSAxOS4xMCA0Mi4yNSAxOC44OSA0Mi4yOUMxOC42OSA0Mi4zMyAxOC40OSA0Mi4zOCAxOC4zMCA0Mi40M0MxOC4yOSA0Mi40MyAxOC4yOCA0Mi40NCAxOC4yNyA0Mi40NEMxOC4wOSA0Mi40OSAxNy45MCA0Mi41NCAxNy43MSA0Mi42MEMxNy4zNCA0Mi43MSAxNi45OCA0Mi44NCAxNi42MiA0Mi45OUMxNi42MSA0My4wMCAxNi41OSA0My4wMSAxNi41OCA0My4wMUMxNi40MCA0My4wOSAxNi4yMSA0My4xNyAxNi4wMyA0My4yNkMxNS44NSA0My4zNSAxNS42OCA0My40NCAxNS41MCA0My41M0MxNS4xNSA0My43MiAxNC44IDQzLjkzIDE0LjQ5IDQ0LjE1QzE0LjE2IDQ0LjM3IDEzLjg0IDQ0LjYxIDEzLjUzIDQ0Ljg3QzEzLjMxIDQ1LjA2IDEzLjA5IDQ1LjI1IDEyLjg3IDQ1LjQ2QzEyLjc2IDQ1LjU2IDEyLjY2IDQ1LjY2IDEyLjU1IDQ1Ljc3QzEyLjQ1IDQ1Ljg3IDEyLjM1IDQ1Ljk4IDEyLjI1IDQ2LjA5QzEyLjExIDQ2LjI0IDExLjk4IDQ2LjM5IDExLjg2IDQ2LjU0QzExLjc0IDQ2LjY5IDExLjYyIDQ2Ljg0IDExLjUgNDYuOTlDMTEuNSA0Ny4wMCAxMS40OSA0Ny4wMSAxMS40OSA0Ny4wMkMxMS4zNyA0Ny4xOCAxMS4yNiA0Ny4zMyAxMS4xNSA0Ny40OUMxMS4wMiA0Ny42NyAxMC45MCA0Ny44NyAxMC43OSA0OC4wNkMxMC43MCA0OC4yMSAxMC42MSA0OC4zNiAxMC41MyA0OC41MUMxMC40NCA0OC42OCAxMC4zNSA0OC44NiAxMC4yNiA0OS4wNEMxMC4yNiA0OS4wNSAxMC4yNiA0OS4wNSAxMC4yNSA0OS4wNkMxMC4xNyA0OS4yNCAxMC4wOSA0OS40MSAxMC4wMiA0OS41OEMxMC4wMiA0OS41OCAxMC4wMiA0OS41OCAxMC4wMSA0OS41OUM5Ljk0IDQ5Ljc1IDkuODggNDkuOTEgOS44MiA1MC4wN0M5Ljc2IDUwLjI0IDkuNzAgNTAuNDAgOS42NCA1MC41OEM5LjYwIDUwLjcxIDkuNTYgNTAuODUgOS41MiA1MC45OEM5LjUxIDUxLjAxIDkuNTAgNTEuMDQgOS40OSA1MS4wN0M5LjQ2IDUxLjIwIDkuNDIgNTEuMzQgOS4zOSA1MS40N0M5LjMxIDUxLjc5IDkuMjUgNTIuMTEgOS4yMCA1Mi40M0M5LjE4IDUyLjU0IDkuMTYgNTIuNjQgOS4xNSA1Mi43NEM5LjE0IDUyLjgzIDkuMTMgNTIuOTIgOS4xMiA1My4wMUM5LjExIDUzLjA0IDkuMTEgNTMuMDcgOS4xMSA1My4xMEM5LjExIDUzLjEzIDkuMTAgNTMuMTUgOS4xMCA1My4xOEgwLjAzQzAuNDAgNDYuNzIgMy43MSA0MC43MSA5LjA0IDM2LjkzQzkuNDUgMzYuNjQgOS44NiAzNi4zNyAxMC4yOCAzNi4xMkMxMC40OCAzNS45OSAxMC42NyAzNS44NyAxMC44OCAzNS43NkMxMC44OCAzNS43NSAxMC44OCAzNS43NSAxMC44OSAzNS43NkMxMS4wNiAzNS42NiAxMS4yMiAzNS41NyAxMS40MCAzNS40N0MxMS42MCAzNS4zNiAxMS44MCAzNS4yNiAxMi4wMSAzNS4xNkMxMi4xMyAzNS4xMCAxMi4yNiAzNS4wMyAxMi40MCAzNC45OEMxMi41MyAzNC45MSAxMi42NiAzNC44NSAxMi44MCAzNC44MEMxMi44MyAzNC43NyAxMi44OCAzNC43NSAxMi45MyAzNC43NEMxMy4xMiAzNC42NSAxMy4zMiAzNC41NyAxMy41MiAzNC40OUMxNC40MSAzNC4xMyAxNS4zNCAzMy44NCAxNi4yOCAzMy42MUMxNi40NSAzMy41NyAxNi42MyAzMy41MyAxNi44MCAzMy40OUMxNi45MCAzMy40NiAxNi45OSAzMy40NCAxNy4wOSAzMy40M0MxNy4yNyAzMy4zOSAxNy40NiAzMy4zNSAxNy42NSAzMy4zMkMxNy42OSAzMy4zMSAxNy43MiAzMy4zMCAxNy43NiAzMy4zMEMxNy45OCAzMy4yNiAxOC4yMCAzMy4yMyAxOC40MSAzMy4yMEMxOC40MyAzMy4yMCAxOC40NCAzMy4xOSAxOC40NiAzMy4xOUMxOC42NSAzMy4xNiAxOC44NCAzMy4xNCAxOS4wNCAzMy4xMkMxOS4yMyAzMy4xMCAxOS40MyAzMy4wOCAxOS42MyAzMy4wN0MxOS42NyAzMy4wNiAxOS43IDMzLjA2IDE5Ljc1IDMzLjA2QzE5LjkwIDMzLjA0IDIwLjA2IDMzLjAzIDIwLjIyIDMzLjAzQzIwLjM2IDMzLjAyIDIwLjUwIDMzLjAxIDIwLjY0IDMzLjAxQzIwLjg4IDMzLjAwIDIxLjEzIDMzIDIxLjM4IDMzQzIzLjYzIDMzIDI1Ljg1IDMzLjM1IDI3Ljk2IDM0LjA0SDI3Ljk3WiIsMF0sWyJNOS4wNCA1NC4zOVY3MS44NUM3LjQyIDcwLjcwIDUuOTkgNjkuMzUgNC43NyA2Ny44NEM0LjY2IDY3LjcwIDQuNTQgNjcuNTYgNC40NCA2Ny40MUM0LjMyIDY3LjI3IDQuMjIgNjcuMTMgNC4xMSA2Ni45OEMzLjk3IDY2Ljc5IDMuODMgNjYuNTkgMy42OSA2Ni4zOEMzLjU3IDY2LjIxIDMuNDUgNjYuMDMgMy4zNCA2NS44NUMzLjIzIDY1LjY3IDMuMTIgNjUuNTAgMy4wMSA2NS4zMUMyLjU4IDY0LjU5IDIuMTkgNjMuODQgMS44NSA2My4wNkMxLjc2IDYyLjg3IDEuNjggNjIuNjggMS42MCA2Mi40OUMxLjQ5IDYyLjIzIDEuMzkgNjEuOTcgMS4yOSA2MS43MUMxLjI1IDYxLjU3IDEuMjAgNjEuNDQgMS4xNSA2MS4zMEMxLjEwIDYxLjE0IDEuMDQgNjAuOTggMS4wMCA2MC44MkMwLjk0IDYwLjY2IDAuODkgNjAuNDkgMC44NSA2MC4zM0MwLjgwIDYwLjE3IDAuNzUgNjAuMDEgMC43MSA1OS44NUMwLjY0IDU5LjU5IDAuNTcgNTkuMzIgMC41MiA1OS4wNUMwLjQ4IDU4LjkwIDAuNDQgNTguNzUgMC40MiA1OC41OUMwLjM4IDU4LjM5IDAuMzQgNTguMjAgMC4zMCA1OC4wMUMwLjI1IDU3LjY1IDAuMTkgNTcuMjkgMC4xNCA1Ni45M0MwLjEzIDU2Ljc5IDAuMTIgNTYuNjUgMC4xMCA1Ni41MUMwLjAzIDU1LjgxIDAgNTUuMTAgMCA1NC4zOUg5LjA0WiIsMV0sWyJNOS4yNSA3My41Vjc2LjAwSDAuMjBWNjEuODhDMS43MiA2Ni4zMyA0LjYxIDcwLjI3IDguNTUgNzMuMDZMOS4yNSA3My41WiIsMF1dLCJvMSI6W1siTTQ3LjgyIDc1Ljc5QzM1Ljk2IDc1Ljc5IDI2LjMwIDY2LjE5IDI2LjMwIDU0LjM5QzI2LjMwIDQyLjYwIDM1Ljk2IDMzIDQ3LjgyIDMzQzU5LjY5IDMzIDY5LjM1IDQyLjYwIDY5LjM1IDU0LjM5QzY5LjM1IDY2LjE5IDU5LjY5IDc1Ljc5IDQ3LjgyIDc1Ljc5Wk00Ny44MiA0Mi4wNUM0MC45NyA0Mi4wNSAzNS40MCA0Ny41OCAzNS40MCA1NC4zOUMzNS40MCA2MS4yMCA0MC45NyA2Ni43NCA0Ny44MiA2Ni43NEM1NC42NyA2Ni43NCA2MC4yNCA2MS4yMCA2MC4yNCA1NC4zOUM2MC4yNCA0Ny41OCA1NC42NyA0Mi4wNSA0Ny44MiA0Mi4wNVoiLDBdXSwiZCI6W1siTTExMC43NyAwSDEyMC44NVY3NC40OUgxMTAuNzdWNjkuOTlDMTA2LjM1IDc1LjEwIDEwMC45MSA3NS44MSA5Ny44MiA3NS44MUM4NC40NiA3NS44MSA3Ni44NSA2NC43NyA3Ni44NSA1Mi45MkM3Ni44NSAzOC45MyA4Ni41MSAzMC4zNCA5Ny45MiAzMC4zNEMxMDEuMTEgMzAuMzQgMTA2LjY1IDMxLjE3IDExMC43NiAzNi40N1YwSDExMC43N1pNODcuMTQgNTMuMTNDODcuMTQgNjAuNjAgOTEuODYgNjYuODIgOTkuMTYgNjYuODJDMTA1LjUzIDY2LjgyIDExMS4zOSA2Mi4yMiAxMTEuMzkgNTMuMjNDMTExLjM5IDQ0LjI0IDEwNS41MyAzOS4zMyA5OS4xNiAzOS4zM0M5MS44NiAzOS4zMyA4Ny4xNCA0NS40NiA4Ny4xNCA1My4xM1oiLDBdXSwibzIiOltbIk0xNTAuNDIgNzUuNzlDMTM4LjU2IDc1Ljc5IDEyOC45MCA2Ni4xOSAxMjguOTAgNTQuMzlDMTI4LjkwIDQyLjYwIDEzOC41NiAzMyAxNTAuNDIgMzNDMTYyLjI5IDMzIDE3MS45NSA0Mi42MCAxNzEuOTUgNTQuMzlDMTcxLjk1IDY2LjE5IDE2Mi4yOSA3NS43OSAxNTAuNDIgNzUuNzlaTTE1MC40MiA0Mi4wNUMxNDMuNTcgNDIuMDUgMTM4LjAwIDQ3LjU4IDEzOC4wMCA1NC4zOUMxMzguMDAgNjEuMjAgMTQzLjU3IDY2Ljc0IDE1MC40MiA2Ni43NEMxNTcuMjcgNjYuNzQgMTYyLjg0IDYxLjIwIDE2Mi44NCA1NC4zOUMxNjIuODQgNDcuNTggMTU3LjI3IDQyLjA1IDE1MC40MiA0Mi4wNVoiLDBdXSwibDEiOltbIk0xOTAuOTMgMlY3Ni40OUgxODAuODZWMkgxOTAuOTNaIiwwXV0sImYiOltbIk0yMTEuMTcgNDEuNzlWNzUuNjFIMjAxLjEwVjQxLjc5SDE5Ni43OVYzMi41OUgyMDEuMTBWMTcuNjdDMjAxLjEwIDExLjAzIDIwMi44NSA2Ljg0IDIwNS4zMSA0LjE4QzIwNy4xNiAyLjI0IDIxMC4zNSAwIDIxNS41OSAwQzIxNy43NSAwIDIxOS45MSAwLjMwIDIyMi4wNiAxLjIyVjExLjEzQzIyMC4wMSA5LjkwIDIxOC42NiA5LjYwIDIxNy4yMyA5LjYwQzIxNiA5LjYwIDIxNC4xNCA5LjgwIDIxMi44MSAxMS4yM0MyMTIuMjkgMTEuNzUgMjExLjE3IDEzLjI4IDIxMS4xNyAxNi4zNFYzMi41OEgyMjIuMDZWNDEuNzhIMjExLjE3TDIxMS4xNyA0MS43OVoiLDBdXSwibzMiOltbIk0yNTEuMzEgNzUuMDRDMjM4LjQxIDc4LjQ3IDIyNC42NCA2Ny41NyAyMjUuMDAgNTQuMjFIMjM0LjA1QzIzMy43OSA2Mi4yOCAyNDIuNjAgNjguNzAgMjUwLjIwIDY1Ljk3TDI1Mi45OSA3NC41N0MyNTIuNTAgNzQuNzMgMjUxLjg4IDc0LjkwIDI1MS4zOCA3NS4wM0MyNTEuMzggNzUuMDMgMjUxLjM1IDc1LjAzIDI1MS4zNCA3NS4wNEwyNTEuMzggNzUuMDMiLDFdLFsiTTI1NC4wNSAzNC40OUMyNjIuNDEgMzcuNjAgMjY3Ljk5IDQ1LjExIDI2Ny45OSA1NC4wNkMyNjcuOTkgNjMuMDAgMjYyLjU1IDcwLjgzIDI1NC4zMyA3NC4wMUwyNTEuNSA2NS4zOEMyNjEuMzUgNjEuNTUgMjYxLjEyIDQ2LjcxIDI1MS4yOSA0My4xMSIsMF0sWyJNMjUwLjIwIDQyLjY0TDI1Mi45OSAzNC4wNEMyNDkuNTYgMzIuOTIgMjQ1LjgxIDMyLjY5IDI0Mi4yNiAzMy40MEwyNDIuMjEgMzMuNDVDMjMzLjU2IDM0Ljk1IDIyNi4zNiA0Mi41OCAyMjUuMjYgNTEuMjlMMjI1LjIyIDUxLjMyQzIyNS4xNCA1MS45NCAyMjUuMDcgNTIuNTcgMjI1LjA0IDUzLjE5SDIzNC4xMUMyMzQuNzEgNDUuNTMgMjQyLjk2IDQwLjEyIDI1MC4yMCA0Mi42NFoiLDBdXSwiYiI6W1siTTI1MS4zMSAxNTMuNTZDMjM4LjQxIDE1Ni45OSAyMjQuNjQgMTQ2LjA4IDIyNS4wMCAxMzIuNzJIMjM0LjA1QzIzMy43OSAxNDAuNzkgMjQyLjYwIDE0Ny4yMSAyNTAuMjAgMTQ0LjQ4TDI1Mi45OSAxNTMuMDhDMjUyLjUwIDE1My4yNCAyNTEuODggMTUzLjQyIDI1MS4zOCAxNTMuNTRDMjUxLjM4IDE1My41NCAyNTEuMzUgMTUzLjU1IDI1MS4zNCAxNTMuNTVMMjUxLjM4IDE1My41NCIsMV0sWyJNMjU0LjA1IDExMy4wMUMyNjIuNDEgMTE2LjEyIDI2Ny45OSAxMjMuNjMgMjY3Ljk5IDEzMi41N0MyNjcuOTkgMTQxLjUyIDI2Mi41NSAxNDkuMzUgMjU0LjMzIDE1Mi41MkwyNTEuNSAxNDMuOTBDMjYxLjM1IDE0MC4wNyAyNjEuMTIgMTI1LjIzIDI1MS4yOSAxMjEuNjIiLDBdLFsiTTI1MC4yMCAxMjEuMTZMMjUyLjk5IDExMi41NkMyNDkuNTYgMTExLjQ0IDI0NS44MSAxMTEuMiAyNDIuMjYgMTExLjlMMjQyLjIxIDExMS45N0MyMzMuNTYgMTEzLjQ3IDIyNi4zNiAxMjEuMDkgMjI1LjI2IDEyOS44MEwyMjUuMjIgMTI5Ljg0QzIyNS4xNCAxMzAuNDUgMjI1LjA3IDEzMS4wIDIyNS4wNCAxMzEuNzBIMjM0LjExQzIzNC43MSAxMjQuMDUgMjQyLjk2IDExOC42NCAyNTAuMjAgMTIxLjE2WiIsMF0sWyJNMjM0LjA1IDE1MS41NVYxNTQuMTBIMjI1LjAwVjEzOS45MEMyMjUuMDUgMTQwLjA2IDIyNS4xMCAxNDAuMjIgMjI1LjE3IDE0MC4zOEMyMjUuNzUgMTQxLjk2IDIyNi41MSAxNDMuNDggMjI3LjQyIDE0NC45MEwyMjcuNjAgMTQ1LjE2QzIyNy42NSAxNDUuMjUgMjI3LjcyIDE0NS4zNSAyMjcuNzkgMTQ1LjQ0QzIyOC4xNSAxNDUuOTcgMjI4LjUxIDE0Ni40NSAyMjguODkgMTQ2LjkxTDIyOC45OSAxNDcuMEMyMjkuMzkgMTQ3LjUxIDIyOS44MiAxNDcuOTkgMjMwLjMgMTQ4LjUxTDIzMC40NiAxNDguNkMyMzAuNjggMTQ4Ljg3IDIzMC45IDE0OS4wIDIzMS4xMCAxNDkuMjVMMjMxLjE3IDE0OS4zMkMyMzEuMzcgMTQ5LjUwIDIzMS41OCAxNDkuNjggMjMxLjc4IDE0OS44NUMyMzIuMzEgMTUwLjMyIDIzMi44NSAxNTAuNzEgMjMzLjMzIDE1MS4wNkwyMzMuNDQgMTUxLjE0QzIzMy42NCAxNTEuMjggMjMzLjggMTUxLjQgMjM0LjA1IDE1MS41NVoiLDBdLFsiTTIzNC4wNSA4NFYxMTQuMTdDMjMzLjkyIDExNC4yNSAyMzMuODAgMTE0LjMzIDIzMy42NyAxMTQuNEwyMzMuMzUgMTE0LjY0TDIzMy4zMCAxMTQuNjhDMjMyLjc2IDExNS4wNyAyMzIuMjcgMTE1LjQzIDIzMS44MSAxMTUuODRDMjMxLjU4IDExNi4wMyAyMzEuMzYgMTE2LjIzIDIzMS4xMyAxMTYuNDNMMjMwLjk4IDExNi41N0MyMzAuODIgMTE2LjczIDIzMC42NCAxMTYuODkgMjMwLjQ4IDExNy4wNUwyMzAuMjkgMTE3LjI0QzIyOS44NSAxMTcuNzAgMjI5LjQxIDExOC4xOCAyMjguOTcgMTE4LjcwTDIyOC45MyAxMTguNzVDMjI4LjU1IDExOS4yMiAyMjguMTcgMTE5LjcyIDIyNy44MCAxMjAuMkMyMjcuNzMgMTIwLjM0IDIyNy42OCAxMjAuNDMgMjI3LjYwIDEyMC41NEMyMjYuNjAgMTIyLjAzIDIyNS43IDEyMy42IDIyNS4xNyAxMjUuMzNMMjI1LjA4IDEyNS41OEMyMjUuMDUgMTI1LjY2IDIyNS4wMiAxMjUuNzQgMjI1LjAwIDEyNS44Vjg0SDIzNC4wNVoiLDBdXSwiYSI6W1siTTMwNi4xIDExMC4xSDMxNi4yNVYxNTMuMTRIMzA2LjFWMTQ4LjY0QzMwMS43IDE1My43NSAyOTYuMzEgMTU0LjQ2IDI5My4yMiAxNTQuNDZDMjc5Ljg2IDE1NC40NiAyNzIuMiAxNDMuNCAyNzIuMiAxMzEuNUMyNzIuMiAxMTcuNTggMjgxLjkxIDEwOSAyOTMuMzIgMTA5QzI5Ni41MSAxMDkgMzAyLjA2IDEwOS44MiAzMDYuMTcgMTE1LjEyVjExMC4xSDMwNi4xWk0yODIuNTQgMTMxLjc4QzI4Mi41NCAxMzkuMiAyODcuMjcgMTQ1LjQ3IDI5NC41IDE0NS40N0MzMDAuOTQgMTQ1LjQ3IDMwNi43OSAxNDAuODcgMzA2Ljc5IDEzMS44OEMzMDYuNzkgMTIyLjg5IDMwMC45NCAxMTcuOTggMjk0LjUgMTE3Ljk4QzI4Ny4yNyAxMTcuOTggMjgyLjU0IDEyNC4xMSAyODIuNTQgMTMxLjc4WiIsMF1dLCJzIjpbWyJNMzQ0LjMwIDEyMS40N0MzNDMuMjcgMTE5LjgzIDM0MS4zMiAxMTcuNyAzMzguMSAxMTcuN0MzMzYuNzAgMTE3LjcgMzM1LjY3IDExOC4zMCAzMzUuMDUgMTE4LjkxQzMzNC41MyAxMTkuNDMgMzM0LjEyIDEyMC4yNCAzMzQuMTIgMTIxLjE2QzMzNC4xMiAxMjIuMjkgMzM0LjY0IDEyMy4wMCAzMzUuNTcgMTIzLjYxQzMzNi4xOCAxMjQuMDIgMzM2LjgwIDEyNC4yMyAzMzguOTYgMTI1LjM1TDM0NC4xMCAxMjcuOTBDMzQ2LjM2IDEyOS4wMiAzNDguNTIgMTMwLjE1IDM1MC4xNiAxMzEuODlDMzUyLjUyIDEzNC4yNCAzNTMuMzUgMTM2LjkwIDM1My4zNSAxMzkuODZDMzUzLjM1IDE0My43NCAzNTEuOSAxNDcuMTEgMzQ5LjUgMTQ5LjY3QzM0Ni4xNSAxNTMuMzUgMzQxLjk0IDE1NC40NyAzMzcuNDIgMTU0LjQ3QzMzNC42NCAxNTQuNDcgMzMxLjE1IDE1NC4wNiAzMjguMDcgMTUxLjcxQzMyNS42MCAxNDkuODcgMzIzLjU1IDE0Ni45MSAzMjIuNTIgMTQzLjg0TDMzMC43IDEzOS45NkMzMzEuMjYgMTQxLjMgMzMyLjE5IDE0My4yMyAzMzMuMTEgMTQ0LjA1QzMzMy43MiAxNDQuNjYgMzM1LjE2IDE0NS42OCAzMzcuNTMgMTQ1LjY4QzMzOS4wNyAxNDUuNjggMzQwLjcxIDE0NS4xNyAzNDEuNjQgMTQ0LjI1QzM0Mi40NiAxNDMuNDMgMzQzLjA4IDE0Mi4xMCAzNDMuMDggMTQwLjg3QzM0My4wOCAxMzkuNjQgMzQyLjY3IDEzOC42MiAzNDEuNzUgMTM3LjYwQzM0MC41MSAxMzYuMzggMzM5LjA4IDEzNS42NiAzMzcuNDMgMTM0Ljk1TDMzMy43MyAxMzMuMjJDMzMxLjc4IDEzMi4zMCAzMjkuNDIgMTMxLjE3IDMyNy43NyAxMjkuNUMzMjUuNTEgMTI3LjM5IDMyNC42OCAxMjUuMDQgMzI0LjY4IDEyMi4yOEMzMjQuNjggMTE4LjggMzI2LjAyIDExNS40MyAzMjguMjggMTEzLjA4QzMzMC4yMyAxMTEuMCAzMzMuNTEgMTA5IDMzOC44NiAxMDlDMzQxLjk1IDEwOSAzNDQuNDEgMTA5LjYxIDM0Ni44OCAxMTEuMjRDMzQ4LjMyIDExMi4xNiAzNTAuMjcgMTEzLjgwIDM1MS44MSAxMTYuNTZMMzQ0LjMxIDEyMS40NkwzNDQuMzAgMTIxLjQ3WiIsMF1dLCJpMSI6W1siTTM2My44MiA4N0MzNjcuNTMgODcgMzcwLjMwIDg5Ljc2IDM3MC4zMCA5My40M0MzNzAuMzAgOTcuMTAgMzY3LjUyIDk5Ljg3IDM2My44MiA5OS44N0MzNjAuMTMgOTkuODcgMzU3LjM1IDk3LjEwIDM1Ny4zNSA5My40M0MzNTcuMzUgODkuNzYgMzYwLjEzIDg3IDM2My44MiA4N1pNMzY4Ljg2IDExMS4yMlYxNTQuMjRIMzU4Ljc5VjExMS4yMkgzNjguODZaIiwwXV0sImwyIjpbWyJNMzg4LjA4IDgwVjE1NC40SDM3OC4wMFY4MEgzODguMDhaIiwwXV0sImkyIjpbWyJNNDAyLjI2IDg3QzQwNS45NiA4NyA0MDguNzMgODkuNzYgNDA4LjczIDkzLjQzQzQwOC43MyA5Ny4xMCA0MDUuOTUgOTkuODcgNDAyLjI2IDk5Ljg3QzM5OC41NiA5OS44NyAzOTUuNzggOTcuMTAgMzk1Ljc4IDkzLjQzQzM5NS43OCA4OS43NiAzOTguNTYgODcgNDAyLjI2IDg3Wk00MDcuMjkgMTExLjIyVjE1NC4yNEgzOTcuMjJWMTExLjIySDQwNy4yOVoiLDBdXSwibzQiOltbIk00MzcuNjMgMTUzLjc5QzQyNS43NiAxNTMuNzkgNDE2LjEwIDE0NC4xOSA0MTYuMTAgMTMyLjM5QzQxNi4xMCAxMjAuNjAgNDI1Ljc2IDExMSA0MzcuNjMgMTExQzQ0OS40OSAxMTEgNDU5LjE1IDEyMC42MCA0NTkuMTUgMTMyLjM5QzQ1OS4xNSAxNDQuMTkgNDQ5LjQ5IDE1My43OSA0MzcuNjMgMTUzLjc5Wk00MzcuNjMgMTIwLjA1QzQzMC43OCAxMjAuMDUgNDI1LjIxIDEyNS41OCA0MjUuMjEgMTMyLjM5QzQyNS4yMSAxMzkuMiA0MzAuNzggMTQ0Ljc0IDQzNy42MyAxNDQuNzRDNDQ0LjQ4IDE0NC43NCA0NTAuMDUgMTM5LjIgNDUwLjA1IDEzMi4zOUM0NTAuMDUgMTI1LjU4IDQ0NC40OCAxMjAuMDUgNDM3LjYzIDEyMC4wNVoiLDBdXX07CgogIC8qIC0tLS0tLS0tLS0gYm9vdCAtLS0tLS0tLS0tICovCgogIHZhciBNT1RJT05TID0geyBhc3NpbmF0dXJhOiBhc3NpbmF0dXJhLCBhbmVsOiBhbmVsLCBjYW1wbzogY2FtcG8sIHRyYW1hOiB0cmFtYSwgcmVncmE6IHJlZ3JhLCBmYWl4YTogZmFpeGEsIG1vbm9ncmFtYTogbW9ub2dyYW1hIH07CgogIGZ1bmN0aW9uIGluaXQocm9vdCkgewogICAgKHJvb3QgfHwgZG9jKS5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1yYi1tb3Rpb25dJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgdmFyIG1vdGlvbiA9IE1PVElPTlNbZWwuZGF0YXNldC5yYk1vdGlvbl07CiAgICAgIGlmICghbW90aW9uIHx8IGVsLnJiTW90aW9uKSByZXR1cm47CiAgICAgIHRyeSB7IGVsLnJiTW90aW9uID0gbW90aW9uKGVsKTsgfQogICAgICBjYXRjaCAoZXJyKSB7IGlmICh3aW5kb3cuY29uc29sZSkgY29uc29sZS53YXJuKCdyYi1tb3Rpb246ICcgKyBlbC5kYXRhc2V0LnJiTW90aW9uICsgJyBmYWlsZWQnLCBlcnIpOyB9CiAgICB9KTsKICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgncmItbW90aW9uLXJlYWR5Jyk7CiAgfQoKICB3aW5kb3cuUkJNb3Rpb24gPSB7IGluaXQ6IGluaXQsIG1vdGlvbnM6IE1PVElPTlMgfTsKICBpZiAoZG9jLnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7IGluaXQoKTsgfSk7CiAgZWxzZSBpbml0KCk7Cgp9KSgpOwo=\"><\/script>\n<script data-no-optimize=\"1\" src=\"data:text\/javascript;base64,LyohIHJieC13aGF0c2FwcCA6IHRoZSBjb250YWN0IGZvcm0gdGhhdCBjb21wb3NlcyBhIFdoYXRzQXBwIG1lc3NhZ2UgKHJieCBkZXNpZ24gc3lzdGVtKQogKiBTZWxmLWluaXRpYWxpc2luZyBhbmQgaW5kZXBlbmRlbnQ6IGl0IGxvb2tzIGZvciBpdHMgb3duIG1hcmt1cCwgYW5kIGEgbWlzc2luZyBvciBmYWlsaW5nIGZvcm0gbmV2ZXIgc3RvcHMKICogYW5vdGhlciBjb21wb25lbnQuIE5vdGhpbmcgaXMgc2VudCBmcm9tIHRoZSBwYWdlOiB0aGUgdmlzaXRvciByZXZpZXdzIGFuZCBzZW5kcyB0aGUgbWVzc2FnZSBpbiBXaGF0c0FwcC4KICoKICogTWFya3VwIGNvbnRyYWN0IChldmVyeXRoaW5nIHRoZSBzY3JpcHQgbmVlZHMgaXMgaW4gdGhlIG1hcmt1cCwgc28gYW55IHBhZ2UgY2FuIHJldXNlIGl0KToKICogICA8ZGl2IGNsYXNzPSJyYngtZm9ybSByYngtcGFwZXIiIGRhdGEtcmJ4LXdoYXRzYXBwPgogKiAgICAgPGRpdiBkYXRhLXJieC13aGF0c2FwcC1maWVsZHMgaGlkZGVuPiAgICAgICAgICAgICAgICAgICAgICAgICBzaG93biBvbmx5IHdoZW4gdGhlIHNjcmlwdCBydW5zCiAqICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0i4oCmIiB2YWx1ZT0idjEiIGRhdGEtcmJ4LWxpbmU9IkxpbmUgYWRkZWQgdG8gdGhlIG1lc3NhZ2Ugd2hlbiBjaG9zZW4uIj4g4oCmCiAqICAgICAgIDxpbnB1dCBpZD0i4oCmIiB0eXBlPSJ0ZXh0IiBkYXRhLXJieC1wcmVmaXg9IlBhw61zIGRvIG5lZ8OzY2lvOiAiPiAgIChhIHRleHQgZmllbGQ7IGl0cyB0cmltbWVkIHZhbHVlIGlzIGFkZGVkCiAqICAgICAgIDx0ZXh0YXJlYSBpZD0i4oCmIiBkYXRhLXJieC1wcmVmaXg9Ik1ldSBjYXNvOiAiPjwvdGV4dGFyZWE+ICAgICAgICAgICBhZnRlciBpdHMgcHJlZml4LCBpbiBkb2N1bWVudCBvcmRlcikKICogICAgIDwvZGl2PgogKiAgICAgPGEgY2xhc3M9InJieC1idG4gcmJ4LWJ0bi0tZnVsbCIgZGF0YS1yYngtd2hhdHNhcHAtbGluayBocmVmPSJodHRwczovL3dhLm1lLzxudW1iZXI+P3RleHQ9PG9wZW5pbmcgbGluZT4iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPuKApjwvYT4KICogICAgIDxwIGNsYXNzPSJyYngtbGl2ZSIgZGF0YS1yYngtd2hhdHNhcHAtc3RhdHVzIHJvbGU9InN0YXR1cyIgYXJpYS1saXZlPSJwb2xpdGUiCiAqICAgICAgICBkYXRhLXJieC1zYXktY2hvc2VuPSJTYWlkIHdoZW4gYSBwYWluIGxpbmsgcGlja3MgYSB0aGVtZS4iIGRhdGEtcmJ4LXNheS1zZW5kPSJTYWlkIHdoZW4gdGhlIHZpc2l0b3Igb3BlbnMgV2hhdHNBcHAuIj48L3A+CiAqICAgPC9kaXY+CiAqIFRoZSBsaW5rJ3Mgb3duIGhyZWYgaXMgdGhlIG5vLUpTIG1lc3NhZ2U6IGl0cyB0ZXh0PSBpcyB0aGUgb3BlbmluZyBsaW5lIGV2ZXJ5IG1lc3NhZ2Ugc3RhcnRzIHdpdGguCiAqIExpbmtzIGVsc2V3aGVyZSBvbiB0aGUgcGFnZSB3aXRoIGRhdGEtcmJ4LXJlYXNvbj0idjEiIGFuZCBocmVmPSIjPHRoZSBmb3JtJ3Mgc2VjdGlvbj4iIHBpY2sgdGhhdCByYWRpby4KICovCigoKSA9PiB7CiAgJ3VzZSBzdHJpY3QnOwogIGNvbnN0IGZvcm1zID0gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yYnggW2RhdGEtcmJ4LXdoYXRzYXBwXScpXTsKCiAgZm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4gewogICAgdHJ5IHsgaW5pdChmb3JtKTsgfSBjYXRjaCAoZXJyKSB7IGlmICh3aW5kb3cuY29uc29sZSkgY29uc29sZS53YXJuKCdyYngtd2hhdHNhcHA6IGZhaWxlZCcsIGVycik7IH0KICB9KTsKCiAgLy8gW2RhdGEtcmJ4LXJlYXNvbl0gbGlua3MgcGljayBhIHRoZW1lIGluIHRoZSBmb3JtIHRoZWlyIGhyZWYgcG9pbnRzIGF0IChvciB0aGUgcGFnZSdzIGZpcnN0IGZvcm0pCiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJieCBbZGF0YS1yYngtcmVhc29uXScpLmZvckVhY2goKGxpbmspID0+IHsKICAgIHRyeSB7CiAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0T2YobGluayk7CiAgICAgICAgY29uc3QgZm9ybSA9ICh0YXJnZXQgJiYgKHRhcmdldC5tYXRjaGVzKCdbZGF0YS1yYngtd2hhdHNhcHBdJykgPyB0YXJnZXQgOiB0YXJnZXQucXVlcnlTZWxlY3RvcignW2RhdGEtcmJ4LXdoYXRzYXBwXScpKSkgfHwgZm9ybXNbMF07CiAgICAgICAgaWYgKGZvcm0gJiYgZm9ybS5yYnhDaG9vc2UpIGZvcm0ucmJ4Q2hvb3NlKGxpbmsuZGF0YXNldC5yYnhSZWFzb24pOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycikgeyBpZiAod2luZG93LmNvbnNvbGUpIGNvbnNvbGUud2FybigncmJ4LXdoYXRzYXBwOiByZWFzb24gbGluayBmYWlsZWQnLCBlcnIpOyB9CiAgfSk7CgogIGZ1bmN0aW9uIHRhcmdldE9mKGxpbmspIHsKICAgIGNvbnN0IGhyZWYgPSBsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnOwogICAgaWYgKGhyZWYuY2hhckF0KDApICE9PSAnIycgfHwgaHJlZi5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDsKICAgIHRyeSB7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkZWNvZGVVUklDb21wb25lbnQoaHJlZi5zbGljZSgxKSkpOyB9IGNhdGNoIChlcnIpIHsgcmV0dXJuIG51bGw7IH0KICB9CgogIGZ1bmN0aW9uIGluaXQoZm9ybSkgewogICAgY29uc3QgZmllbGRzID0gZm9ybS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1yYngtd2hhdHNhcHAtZmllbGRzXScpOwogICAgY29uc3QgY29udGFjdExpbmsgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXJieC13aGF0c2FwcC1saW5rXScpOwogICAgY29uc3Qgc3RhdHVzID0gZm9ybS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1yYngtd2hhdHNhcHAtc3RhdHVzXScpOwogICAgaWYgKCFmaWVsZHMgfHwgIWNvbnRhY3RMaW5rIHx8ICFzdGF0dXMpIHJldHVybjsKICAgIGNvbnN0IHN0YXJ0ID0gbmV3IFVSTChjb250YWN0TGluay5ocmVmKTsKICAgIGNvbnN0IG9wZW5pbmcgPSBzdGFydC5zZWFyY2hQYXJhbXMuZ2V0KCd0ZXh0JykgfHwgJyc7CiAgICBjb25zdCBiYXNlID0gc3RhcnQub3JpZ2luICsgc3RhcnQucGF0aG5hbWU7CiAgICBjb25zdCBwYXJ0cyA9IFsuLi5maWVsZHMucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcmJ4LWxpbmVdLCBbZGF0YS1yYngtcHJlZml4XScpXTsKCiAgICBmdW5jdGlvbiB1cGRhdGVNZXNzYWdlKCkgewogICAgICBjb25zdCBsaW5lcyA9IFtvcGVuaW5nXTsKICAgICAgcGFydHMuZm9yRWFjaCgoZWwpID0+IHsKICAgICAgICBpZiAoZWwudHlwZSA9PT0gJ3JhZGlvJyB8fCBlbC50eXBlID09PSAnY2hlY2tib3gnKSB7IGlmIChlbC5jaGVja2VkKSBsaW5lcy5wdXNoKGVsLmRhdGFzZXQucmJ4TGluZSk7IHJldHVybjsgfQogICAgICAgIGNvbnN0IHZhbHVlID0gZWwudmFsdWUudHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSkgbGluZXMucHVzaCgoZWwuZGF0YXNldC5yYnhQcmVmaXggfHwgJycpICsgdmFsdWUpOwogICAgICB9KTsKICAgICAgY29udGFjdExpbmsuaHJlZiA9IGJhc2UgKyAnP3RleHQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChsaW5lcy5qb2luKCdcblxuJykpOwogICAgfQogICAgZmllbGRzLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdXBkYXRlTWVzc2FnZSk7CiAgICBmaWVsZHMuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlTWVzc2FnZSk7CiAgICBmb3JtLnJieENob29zZSA9ICh2YWx1ZSkgPT4gewogICAgICBjb25zdCByYWRpbyA9IFsuLi5maWVsZHMucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT0icmFkaW8iXScpXS5maW5kKChyKSA9PiByLnZhbHVlID09PSB2YWx1ZSk7CiAgICAgIGlmICghcmFkaW8pIHJldHVybjsKICAgICAgcmFkaW8uY2hlY2tlZCA9IHRydWU7CiAgICAgIHVwZGF0ZU1lc3NhZ2UoKTsKICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gc3RhdHVzLmRhdGFzZXQucmJ4U2F5Q2hvc2VuIHx8ICcnOwogICAgfTsKICAgIGNvbnRhY3RMaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgICB1cGRhdGVNZXNzYWdlKCk7CiAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9IHN0YXR1cy5kYXRhc2V0LnJieFNheVNlbmQgfHwgJyc7CiAgICB9KTsKICAgIGZpZWxkcy5oaWRkZW4gPSBmYWxzZTsKICB9Cn0pKCk7Cg==\"><\/script>\n<script data-no-optimize=\"1\" src=\"data:text\/javascript;base64,LyohIHJieC1kb2NrIDogdGhlIHN0aWNreSBjYWxsIHRvIGFjdGlvbiAocmJ4IGRlc2lnbiBzeXN0ZW0pCiAqIFNlbGYtaW5pdGlhbGlzaW5nIGFuZCBpbmRlcGVuZGVudC4gTWFya3VwOiBvbmUgPGRpdiBjbGFzcz0icmJ4LXN0aWNreSIgaGlkZGVuPiBpbnNpZGUgYSAucmJ4LXBhZ2Ugcm9vdDsKICogem9uZXMgYXJlIGRlY2xhcmVkIG9uIHNlY3Rpb25zIHdpdGggZGF0YS1yYngtc3RpY2t5PSJoaWRlIiBvciAiYXZvaWQiIChhbnkgLnJieCByb290IG9uIHRoZSBwYWdlKS4KICoKICogQXdheSB3aGlsZSBhbnkgW2RhdGEtcmJ4LXN0aWNreT0iaGlkZSJdIGVsZW1lbnQgaXMgb24gc2NyZWVuIG9yIHdpdGhpbiBhIHF1YXJ0ZXIgc2NyZWVuIGJlbG93IGl0IChpdCBob2xkcyBpdHMKICogb3duIHByaW1hcnkgYnV0dG9uIG9yIGlzIHRoZSBkb2NrJ3MgZGVzdGluYXRpb246IG9uZSBwcmltYXJ5IGFjdGlvbiBwZXIgc2NyZWVuLCBubyBicmllZiByZWFwcGVhcmFuY2UpLCBhbmQKICogd2hpbGUgaXQgd291bGQgY292ZXIgYSBbZGF0YS1yYngtc3RpY2t5PSJhdm9pZCJdIGVsZW1lbnQgKGNvbnRlbnQgYmVpbmcgcmVhZCkuIE5ldmVyIGF3YXkgd2hpbGUgaXQgaG9sZHMgZm9jdXMuCiAqIGRhdGEtb3ZlciBuYW1lcyB0aGUgZ3JvdW5kIHVuZGVyIHRoZSBkb2NrJ3MgY2VudHJlIChwYXBlciB8IG5hdnkgfCBibHVlKTsgdGhlIENTUyB0YWtlcyB0aGUgb3Bwb3NpdGUgZ3JvdW5kLgogKi8KKCgpID0+IHsKICAndXNlIHN0cmljdCc7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJieCAucmJ4LXN0aWNreScpLmZvckVhY2goKGRvY2spID0+IHsKICAgIHRyeSB7IGluaXQoZG9jayk7IH0gY2F0Y2ggKGVycikgeyBpZiAod2luZG93LmNvbnNvbGUpIGNvbnNvbGUud2FybigncmJ4LWRvY2s6IGZhaWxlZCcsIGVycik7IH0KICB9KTsKCiAgZnVuY3Rpb24gaW5pdChkb2NrKSB7CiAgICBjb25zdCBoaWRlcyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucmJ4IFtkYXRhLXJieC1zdGlja3k9ImhpZGUiXScpXTsKICAgIGNvbnN0IGF2b2lkcyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucmJ4IFtkYXRhLXJieC1zdGlja3k9ImF2b2lkIl0nKV07CiAgICAvLyBTZWN0aW9uIGdyb3VuZHMgb25seSAoZnVsbCB3aWR0aCk6IHRoZSBjaGVjayBiZWxvdyBpcyB2ZXJ0aWNhbCwgc28gYSBib3ggdGhhdCBkb2VzIG5vdCBzcGFuIHRoZSBwYWdlCiAgICAvLyAoLnJieC1wYXBlciwgdGhlIHBhaW5zIHBhbmVsKSBtdXN0IG5vdCBjb3VudC4gUGFwZXIgaXMgdGhlIGRlZmF1bHQ7IGRvY3VtZW50IG9yZGVyLCBzbyBhIGxhdGVyIG9uZSB3aW5zLgogICAgY29uc3QgZ3JvdW5kcyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucmJ4IC5yYngtbmF2eSwgLnJieCAucmJ4LWJsdWUnKV07CiAgICBjb25zdCBDTEVBUiA9IDE2OwogICAgbGV0IHF1ZXVlZCA9IGZhbHNlOwogICAgY29uc3QgcGxhY2VEb2NrID0gKCkgPT4gewogICAgICBxdWV1ZWQgPSBmYWxzZTsKICAgICAgY29uc3QgdmggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgIGNvbnN0IGJhciA9IGRvY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IG1pZCA9IGJhci50b3AgKyBiYXIuaGVpZ2h0IC8gMjsKICAgICAgbGV0IG92ZXIgPSAncGFwZXInOwogICAgICBmb3IgKGNvbnN0IGcgb2YgZ3JvdW5kcykgewogICAgICAgIGNvbnN0IHIgPSBnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGlmIChyLnRvcCA8PSBtaWQgJiYgci5ib3R0b20gPiBtaWQpIG92ZXIgPSBnLmNsYXNzTGlzdC5jb250YWlucygncmJ4LWJsdWUnKSA\/ICdibHVlJyA6ICduYXZ5JzsKICAgICAgfQogICAgICBjb25zdCBhd2F5ID0gIWRvY2suY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgJiYgKAogICAgICAgIGhpZGVzLnNvbWUoKGVsKSA9PiB7IGNvbnN0IHIgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgcmV0dXJuIHIudG9wIDwgdmggKiAxLjI1ICYmIHIuYm90dG9tID4gMDsgfSkgfHwKICAgICAgICBhdm9pZHMuc29tZSgoZWwpID0+IHsgY29uc3QgciA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyByZXR1cm4gci50b3AgPCBiYXIuYm90dG9tICsgQ0xFQVIgJiYgci5ib3R0b20gPiBiYXIudG9wIC0gQ0xFQVI7IH0pKTsKICAgICAgY29uc3Qgd2FzQXdheSA9IGRvY2suY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1hd2F5Jyk7CiAgICAgIGlmIChkb2NrLmRhdGFzZXQub3ZlciAhPT0gb3ZlcikgeyBkb2NrLmRhdGFzZXQub3ZlciA9IG92ZXI7IGlmICh3YXNBd2F5ICYmICFhd2F5KSB2b2lkIGRvY2sub2Zmc2V0V2lkdGg7IH0gICAvLyB0aGUgbmV3IGdyb3VuZCBhcHBsaWVzIGJlZm9yZSB0aGUgZW50cmFuY2UsIG5vdCBkdXJpbmcgaXQKICAgICAgZG9jay5jbGFzc0xpc3QudG9nZ2xlKCdpcy1hd2F5JywgYXdheSk7CiAgICB9OwogICAgY29uc3QgcXVldWVEb2NrID0gKCkgPT4geyBpZiAoIXF1ZXVlZCkgeyBxdWV1ZWQgPSB0cnVlOyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHBsYWNlRG9jayk7IH0gfTsKICAgIGRvY2suY2xhc3NMaXN0LmFkZCgnaXMtYXdheScpOwogICAgZG9jay5oaWRkZW4gPSBmYWxzZTsgICAvLyBtYXJrdXAgc2hpcHMgW2hpZGRlbl06IHdpdGhvdXQgSlMgdGhlIGRvY2sgbmV2ZXIgc2hvd3MKICAgIHBsYWNlRG9jaygpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHF1ZXVlRG9jaywgeyBwYXNzaXZlOiB0cnVlIH0pOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHF1ZXVlRG9jaywgeyBwYXNzaXZlOiB0cnVlIH0pOwogICAgZG9jay5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHF1ZXVlRG9jayk7CiAgICBpZiAoJ1Jlc2l6ZU9ic2VydmVyJyBpbiB3aW5kb3cpIG5ldyBSZXNpemVPYnNlcnZlcihxdWV1ZURvY2spLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7ICAgLy8gbGF5b3V0IG1vdmVzIHdpdGhvdXQgYSBzY3JvbGw6IEZBUSwgZm9udHMsIHRoZSB0aGVtZSBoZWFkZXIKICB9Cn0pKCk7Cg==\"><\/script>\n<script data-no-optimize=\"1\" src=\"data:text\/javascript;base64,LyohIHJieC1wYWlucyA6IHRoZSBwYWlucyBwaWNrZXIgKHJieCBkZXNpZ24gc3lzdGVtLCBwcmluY2lwbGUgMTI6IHByb2dyZXNzaXZlIGRpc2Nsb3N1cmUpCiAqIFNlbGYtaW5pdGlhbGlzaW5nIGFuZCBpbmRlcGVuZGVudDogZXZlcnkgW2RhdGEtcmJ4LXBhaW5zXSBpbnNpZGUgYSAucmJ4IHJvb3QgYmVjb21lcyBhIHBpY2tlciBvbiBpdHMgb3duLgogKiBEZXNrdG9wICg5MDFweCspIHNob3dzIG9uZSBkZXRhaWwgaW4gYSBuYXZ5IHBhbmVsIGJlc2lkZSB0aGUgbGlzdDsgcGhvbmVzIGdldCBhbiBhY2NvcmRpb24uCiAqIEFueSBsaW5rIG9uIHRoZSBwYWdlIHdob3NlIGhyZWYgaXMgIiM8YSBwYWluIGhlYWRpbmcncyBpZD4iICh0aGUgaGVybyByb3V0ZXMpIG9wZW5zIHRoYXQgcGFpbiwgYW5kIHNvIGRvZXMKICogdGhlIHBhZ2UncyBVUkwgaGFzaC4gV2l0aG91dCBKUyBlYWNoIHBhaW4gc3RheXMgYSBzdGF0aWMgaGVhZGluZyB3aXRoIGl0cyBkZXRhaWwgYmVsb3cgKGNzcy9jb21wb25lbnRzL3BhaW5zLmNzcykuCiAqLwooKCkgPT4gewogICd1c2Ugc3RyaWN0JzsKICBjb25zdCBkZXNrdG9wID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDkwMXB4KScpOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yYnggW2RhdGEtcmJ4LXBhaW5zXScpLmZvckVhY2goKHBhaW5zKSA9PiB7CiAgICB0cnkgeyBpbml0KHBhaW5zKTsgfSBjYXRjaCAoZXJyKSB7IGlmICh3aW5kb3cuY29uc29sZSkgY29uc29sZS53YXJuKCdyYngtcGFpbnM6IGZhaWxlZCcsIGVycik7IH0KICB9KTsKCiAgZnVuY3Rpb24gaW5pdChwYWlucykgewogICAgLyogT24gZGVza3RvcCBhIHJlc3RpbmcgcG9pbnRlciBzZWxlY3RzIChob3ZlciksIHdpdGggYSBzaG9ydCBpbnRlbnQgZGVsYXksIGFuZCBhIGxvbmdlciBvbmUgd2hpbGUgdGhlIHBvaW50ZXIKICAgICAgIGlzIHRyYXZlbGxpbmcgdG93YXJkcyB0aGUgcGFuZWwsIHNvIGEgZGlhZ29uYWwgbW92ZSBmcm9tIGEgcm93IHRvIHRoZSBwYW5lbCdzIGxpbmsgZG9lcyBub3Qgc3dpdGNoIHJvd3Mgb24KICAgICAgIHRoZSB3YXkuIEZvY3VzIGFuZCBjbGljayBzZWxlY3QgdG9vLiAqLwogICAgY29uc3QgaXRlbXMgPSBbLi4ucGFpbnMucXVlcnlTZWxlY3RvckFsbCgnLnJieC1wYWluJyldOwogICAgaWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybjsKICAgIC8vIFdpdGhvdXQgSlMgZWFjaCBwYWluIGlzIGEgc3RhdGljIGhlYWRpbmcgd2l0aCBpdHMgZGV0YWlsIGJlbG93IGl0LiBPbmx5IG5vdywgd2l0aCB0aGUgcGlja2VyIHJ1bm5pbmcsCiAgICAvLyBkb2VzIGVhY2ggaGVhZGluZyBiZWNvbWUgYSBidXR0b24gd2l0aCBhIHJlYWwgZXhwYW5kZWQgc3RhdGUuCiAgICBpdGVtcy5mb3JFYWNoKChpdCkgPT4gewogICAgICBjb25zdCBoZWFkID0gaXQucXVlcnlTZWxlY3RvcignLnJieC1wYWluLWJ0bicpOwogICAgICBjb25zdCBkZXRhaWwgPSBpdC5xdWVyeVNlbGVjdG9yKCcucmJ4LXBhaW4tZGV0YWlsJyk7CiAgICAgIGlmICghaGVhZCB8fCAhZGV0YWlsIHx8IGhlYWQudGFnTmFtZSA9PT0gJ0JVVFRPTicpIHJldHVybjsKICAgICAgY29uc3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgIGJ0bi50eXBlID0gJ2J1dHRvbic7CiAgICAgIGJ0bi5jbGFzc05hbWUgPSBoZWFkLmNsYXNzTmFtZTsKICAgICAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsIGRldGFpbC5pZCk7CiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTsKICAgICAgYnRuLmFwcGVuZCguLi5oZWFkLmNoaWxkTm9kZXMpOwogICAgICBoZWFkLnJlcGxhY2VXaXRoKGJ0bik7CiAgICB9KTsKICAgIGNvbnN0IGRldGFpbHMgPSBpdGVtcy5tYXAoKGl0KSA9PiBpdC5xdWVyeVNlbGVjdG9yKCcucmJ4LXBhaW4tZGV0YWlsJykpOwogICAgbGV0IGFjdGl2ZSA9IG51bGw7CiAgICBjb25zdCBzZWxlY3QgPSAoaXRlbSwgZm9jdXMpID0+IHsKICAgICAgaWYgKGl0ZW0gPT09IGFjdGl2ZSkgeyBpZiAoZm9jdXMpIGl0ZW0ucXVlcnlTZWxlY3RvcignLnJieC1wYWluLWJ0bicpLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTsgcmV0dXJuOyB9CiAgICAgIGFjdGl2ZSA9IGl0ZW07CiAgICAgIGl0ZW1zLmZvckVhY2goKGl0KSA9PiB7CiAgICAgICAgY29uc3Qgb24gPSBpdCA9PT0gaXRlbTsKICAgICAgICBpdC5jbGFzc0xpc3QudG9nZ2xlKCdpcy1vbicsIG9uKTsKICAgICAgICBpdC5xdWVyeVNlbGVjdG9yKCcucmJ4LXBhaW4tYnRuJykuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgU3RyaW5nKG9uKSk7CiAgICAgIH0pOwogICAgICBpZiAoZm9jdXMpIGl0ZW0ucXVlcnlTZWxlY3RvcignLnJieC1wYWluLWJ0bicpLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTsKICAgIH07CiAgICAvLyBwaG9uZXM6IGFuIGFjY29yZGlvbiwgc28gYSBzZWNvbmQgdGFwIGNsb3NlcyB0aGUgb3BlbiBpdGVtCiAgICBjb25zdCB0b2dnbGUgPSAoaXRlbSkgPT4gewogICAgICBpZiAoZGVza3RvcC5tYXRjaGVzIHx8IGl0ZW0gIT09IGFjdGl2ZSkgeyBzZWxlY3QoaXRlbSk7IHJldHVybjsgfQogICAgICBhY3RpdmUgPSBudWxsOwogICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLW9uJyk7CiAgICAgIGl0ZW0ucXVlcnlTZWxlY3RvcignLnJieC1wYWluLWJ0bicpLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpOwogICAgfTsKCiAgICAvLyBldmVyeSBkZXRhaWwgaXMgZ2l2ZW4gdGhlIGhlaWdodCBvZiB0aGUgbG9uZ2VzdCBvbmUsIHNvIHRoZSBwYW5lbCBuZXZlciBjaGFuZ2VzIHNpemUKICAgIGNvbnN0IG1lYXN1cmUgPSAoKSA9PiB7CiAgICAgIGlmICghZGVza3RvcC5tYXRjaGVzKSB7IHBhaW5zLnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXBhbmUtaCcpOyByZXR1cm47IH0KICAgICAgcGFpbnMuc3R5bGUuc2V0UHJvcGVydHkoJy0tcGFuZS1oJywgJzBweCcpOwogICAgICBjb25zdCBoID0gTWF0aC5tYXgoLi4uZGV0YWlscy5tYXAoKGQpID0+IGQub2Zmc2V0SGVpZ2h0KSk7CiAgICAgIHBhaW5zLnN0eWxlLnNldFByb3BlcnR5KCctLXBhbmUtaCcsIGggKyAncHgnKTsKICAgIH07CgogICAgY29uc3QgdHJhaWwgPSBbXTsKICAgIGNvbnN0IGFpbWluZ0F0UGFuZWwgPSAoKSA9PiB7CiAgICAgIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpOwogICAgICBjb25zdCByZWNlbnQgPSB0cmFpbC5maWx0ZXIoKHApID0+IG5vdyAtIHAudCA8IDkwKTsKICAgICAgaWYgKHJlY2VudC5sZW5ndGggPCAyKSByZXR1cm4gZmFsc2U7CiAgICAgIGNvbnN0IGZyb20gPSByZWNlbnRbMF0sIHRvID0gcmVjZW50W3JlY2VudC5sZW5ndGggLSAxXTsKICAgICAgY29uc3QgZHggPSB0by54IC0gZnJvbS54LCBkeSA9IHRvLnkgLSBmcm9tLnk7CiAgICAgIGlmIChkeCA8PSAyKSByZXR1cm4gZmFsc2U7CiAgICAgIGNvbnN0IHBhbmVsID0gKGFjdGl2ZSB8fCBpdGVtc1swXSkucXVlcnlTZWxlY3RvcignLnJieC1wYWluLWRldGFpbCcpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBpZiAocGFuZWwubGVmdCA8PSBmcm9tLngpIHJldHVybiBmYWxzZTsKICAgICAgY29uc3Qgc2xvcGUgPSBkeSAvIGR4OwogICAgICByZXR1cm4gc2xvcGUgPiAocGFuZWwudG9wIC0gZnJvbS55KSAvIChwYW5lbC5sZWZ0IC0gZnJvbS54KSAmJiBzbG9wZSA8IChwYW5lbC5ib3R0b20gLSBmcm9tLnkpIC8gKHBhbmVsLmxlZnQgLSBmcm9tLngpOwogICAgfTsKICAgIGxldCBpbnRlbnQgPSAwOwogICAgcGFpbnMuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCAoZSkgPT4gewogICAgICBpZiAoZS5wb2ludGVyVHlwZSAhPT0gJ21vdXNlJykgcmV0dXJuOwogICAgICB0cmFpbC5wdXNoKHsgeDogZS5jbGllbnRYLCB5OiBlLmNsaWVudFksIHQ6IHBlcmZvcm1hbmNlLm5vdygpIH0pOwogICAgICBpZiAodHJhaWwubGVuZ3RoID4gMTIpIHRyYWlsLnNoaWZ0KCk7CiAgICB9LCB7IHBhc3NpdmU6IHRydWUgfSk7CgogICAgaXRlbXMuZm9yRWFjaCgoaXQpID0+IHsKICAgICAgY29uc3QgYnRuID0gaXQucXVlcnlTZWxlY3RvcignLnJieC1wYWluLWJ0bicpOwogICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0b2dnbGUoaXQpKTsKICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4geyBpZiAoZGVza3RvcC5tYXRjaGVzKSBzZWxlY3QoaXQpOyB9KTsKICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJlbnRlcicsIChlKSA9PiB7CiAgICAgICAgaWYgKGUucG9pbnRlclR5cGUgIT09ICdtb3VzZScgfHwgIWRlc2t0b3AubWF0Y2hlcykgcmV0dXJuOwogICAgICAgIGNsZWFyVGltZW91dChpbnRlbnQpOwogICAgICAgIGludGVudCA9IHNldFRpbWVvdXQoKCkgPT4gc2VsZWN0KGl0KSwgYWltaW5nQXRQYW5lbCgpID8gMjgwIDogNjApOwogICAgICB9KTsKICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsICgpID0+IGNsZWFyVGltZW91dChpbnRlbnQpKTsKICAgIH0pOwogICAgcGFpbnMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7CiAgICAgIGlmICghZGVza3RvcC5tYXRjaGVzIHx8ICFbJ0Fycm93RG93bicsICdBcnJvd1VwJ10uaW5jbHVkZXMoZS5rZXkpIHx8ICFlLnRhcmdldC5jbG9zZXN0KCcucmJ4LXBhaW4tYnRuJykpIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBrID0gaXRlbXMuaW5kZXhPZihlLnRhcmdldC5jbG9zZXN0KCcucmJ4LXBhaW4nKSk7CiAgICAgIHNlbGVjdChpdGVtc1soayArIChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogaXRlbXMubGVuZ3RoIC0gMSkpICUgaXRlbXMubGVuZ3RoXSwgdHJ1ZSk7CiAgICB9KTsKICAgIC8vIGxpbmtzIHRvIGEgcGFpbidzIGhlYWRpbmcgKHRoZSBoZXJvIHJvdXRlcykgb3BlbiBpdAogICAgY29uc3QgYnlIYXNoID0gKGhhc2gpID0+IGl0ZW1zLmZpbmQoKGl0KSA9PiAnIycgKyBpdC5xdWVyeVNlbGVjdG9yKCcucmJ4LXBhaW4taGVhZCcpLmlkID09PSBoYXNoKTsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yYnggYVtocmVmXj0iIyJdJykuZm9yRWFjaCgobGluaykgPT4gewogICAgICBjb25zdCB0YXJnZXQgPSBieUhhc2gobGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7CiAgICAgIGlmICh0YXJnZXQpIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBzZWxlY3QodGFyZ2V0LCB0cnVlKSk7CiAgICB9KTsKCiAgICBwYWlucy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wYWlucy1uJywgaXRlbXMubGVuZ3RoKTsgICAvLyB0aGUgcGFuZWwgc3BhbnMgZXZlcnkgcm93LCBob3dldmVyIG1hbnkgcGFpbnMgdGhlcmUgYXJlCiAgICBwYWlucy5jbGFzc0xpc3QuYWRkKCdpcy1saXZlJyk7CiAgICBzZWxlY3QoYnlIYXNoKGxvY2F0aW9uLmhhc2gpIHx8IGl0ZW1zWzBdKTsKICAgIG1lYXN1cmUoKTsKICAgIC8vIGNyb3NzaW5nIGludG8gdGhlIGRlc2t0b3AgbGF5b3V0IChhIHRhYmxldCB0dXJuaW5nKSB3aXRoIHRoZSBhY2NvcmRpb24gY2xvc2VkIG11c3Qgbm90IGxlYXZlIGFuIGVtcHR5IHBhbmVsCiAgICBkZXNrdG9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsgaWYgKGRlc2t0b3AubWF0Y2hlcyAmJiAhYWN0aXZlKSBzZWxlY3QoaXRlbXNbMF0pOyBtZWFzdXJlKCk7IH0pOwogICAgaWYgKGRvY3VtZW50LmZvbnRzKSBkb2N1bWVudC5mb250cy5yZWFkeS50aGVuKG1lYXN1cmUpOwogICAgLy8gcmUtbWVhc3VyZSB3aGVuZXZlciB0aGUgd29yZHMgY2hhbmdlIHNpemUgKHdpZHRoLCB0ZXh0IHpvb20sIHVzZXIgdGV4dCBzcGFjaW5nKSwgbm90IG9ubHkgb24gcmVzaXplLgogICAgLy8gVGhlIG9ic2VydmVkIGJveGVzIGFyZSB0aGUgZGV0YWlscycgY29udGVudHMsIHdoaWNoIHRoZSBtZWFzdXJlZCBtaW4taGVpZ2h0IG5ldmVyIGNoYW5nZXMsIHNvIG5vIGxvb3AuCiAgICBpZiAoJ1Jlc2l6ZU9ic2VydmVyJyBpbiB3aW5kb3cpIHsKICAgICAgbGV0IHF1ZXVlZCA9IGZhbHNlOwogICAgICBjb25zdCBybyA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7IGlmICghcXVldWVkKSB7IHF1ZXVlZCA9IHRydWU7IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7IHF1ZXVlZCA9IGZhbHNlOyBtZWFzdXJlKCk7IH0pOyB9IH0pOwogICAgICBkZXRhaWxzLmZvckVhY2goKGQpID0+IFsuLi5kLmNoaWxkcmVuXS5mb3JFYWNoKChjaGlsZCkgPT4gcm8ub2JzZXJ2ZShjaGlsZCkpKTsKICAgIH0KICB9Cn0pKCk7Cg==\"><\/script>\n<script data-no-optimize=\"1\" src=\"data:text\/javascript;base64,LyohIHJieC12b2ljZXMgOiB0aGUgdGVzdGltb25pYWwgc3RhZ2UgKHJieCBkZXNpZ24gc3lzdGVtLCBwcmluY2lwbGUgMTApCiAqIFNlbGYtaW5pdGlhbGlzaW5nIGFuZCBpbmRlcGVuZGVudDogZXZlcnkgLnJieC12b2ljZXMgc2VjdGlvbiBpbnNpZGUgYSAucmJ4IHJvb3Qgd2l0aCB0d28gb3IgbW9yZSBxdW90ZXMgYmVjb21lcwogKiBhIHN0YWdlLiBUaGUgcmluZyBpcyB0aGUgbmF2aWdhdG9yOyBvbmUgcXVvdGUgYXQgYSB0aW1lOyB0aGUgcGF1c2UgYnV0dG9uJ3Mgb3V0bGluZSBpcyB0aGUgdGltZXIuCiAqIFJvdGF0aW9uIGhvbGRzIGZvciBrZXlib2FyZCBmb2N1cywgdGhlIHBhdXNlIGJ1dHRvbiwgb2ZmIHNjcmVlbiBhbmQgYSBoaWRkZW4gdGFiOyBuZXZlciBmb3IgdGhlIG1vdXNlLgogKiBRdW90ZSB0ZXh0IGlzIG5ldmVyIHBhcnNlZCBhcyBIVE1MOiB3b3JkcyBhcmUgd3JhcHBlZCB3aXRoIERPTSBjYWxscy4gVGhlIG9ubHkgaW5uZXJIVE1MIGJlbG93IGJ1aWxkcyB0aGUKICogY29tcG9uZW50J3Mgb3duIGZpeGVkIGljb25zIGFuZCBpbmRleCwgbmV2ZXIgY29udGVudC4KICovCigoKSA9PiB7CiAgJ3VzZSBzdHJpY3QnOwogIGNvbnN0IHJlZHVjZSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7CiAgY29uc3QgT1VUID0gJ2N1YmljLWJlemllciguMjMsIDEsIC4zMiwgMSknOyAgIC8vIC0tb3V0CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJieCAucmJ4LXZvaWNlcycpLmZvckVhY2goKHZvaWNlcykgPT4gewogICAgdHJ5IHsgaW5pdCh2b2ljZXMpOyB9IGNhdGNoIChlcnIpIHsgaWYgKHdpbmRvdy5jb25zb2xlKSBjb25zb2xlLndhcm4oJ3JieC12b2ljZXM6IGZhaWxlZCcsIGVycik7IH0KICB9KTsKCiAgZnVuY3Rpb24gaW5pdCh2b2ljZXMpIHsKICAgIGNvbnN0IHRyYWNrID0gdm9pY2VzLnF1ZXJ5U2VsZWN0b3IoJy5yYngtdm9pY2VzLXRyYWNrJyk7CiAgICBpZiAoIXRyYWNrIHx8IHRyYWNrLmNoaWxkcmVuLmxlbmd0aCA8IDIpIHJldHVybjsKICAgIGNvbnN0IGNhcmRzID0gWy4uLnRyYWNrLmNoaWxkcmVuXTsKICAgIGNvbnN0IG4gPSBjYXJkcy5sZW5ndGg7CiAgICAvLyBlYWNoIHF1b3RlIHN0YXlzIHVwIGZvciBpdHMgcmVhZGluZyB0aW1lOiAyIHMgcGx1cyBhYm91dCAzMjAgbXMgYSB3b3JkLCBiZXR3ZWVuIDcgYW5kIDE2IHMKICAgIGNvbnN0IGhvbGRGb3IgPSAoY2FyZCkgPT4gTWF0aC5taW4oMTYwMDAsIE1hdGgubWF4KDcwMDAsIDIwMDAgKyBjYXJkLnF1ZXJ5U2VsZWN0b3IoJ2Jsb2NrcXVvdGUnKS50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoL1xzKy8pLmxlbmd0aCAqIDMyMCkpOwogICAgY29uc3QgTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnOwogICAgY29uc3QgZWwgPSAodGFnLCBhdHRycywgcGFyZW50KSA9PiB7IGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsIHRhZyk7IGZvciAoY29uc3QgayBpbiBhdHRycykgZS5zZXRBdHRyaWJ1dGUoaywgYXR0cnNba10pOyBwYXJlbnQuYXBwZW5kKGUpOyByZXR1cm4gZTsgfTsKICAgIGNvbnN0IHBhZCA9IChrKSA9PiBTdHJpbmcoayArIDEpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICBjb25zdCBuYW1lcyA9IGNhcmRzLm1hcCgoYykgPT4gYy5xdWVyeVNlbGVjdG9yKCdmaWdjYXB0aW9uIHN0cm9uZycpLnRleHRDb250ZW50LnRyaW0oKSk7CgogICAgY29uc3QgZGlhbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBkaWFsLmNsYXNzTmFtZSA9ICdyYngtdm9pY2VzLWRpYWwnOwogICAgY29uc3Qgc3ZnID0gZWwoJ3N2ZycsIHsgdmlld0JveDogJzAgMCAxMDAgMTAwJywgJ2FyaWEtaGlkZGVuJzogJ3RydWUnIH0sIGRpYWwpOwogICAgY29uc3QgaW5kZXggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7IGluZGV4LmNsYXNzTmFtZSA9ICdyYngtdm9pY2VzLWluZGV4JzsKICAgIGluZGV4LmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz0icmJ4LXZvaWNlcy1udW0iPjxiPjAxPC9iPjwvc3Bhbj48c3BhbiBjbGFzcz0icmJ4LXZvaWNlcy1vZiI+ZGUgJyArIG4gKyAnPC9zcGFuPic7CiAgICBkaWFsLmFwcGVuZChpbmRleCk7CiAgICBjb25zdCBudW0gPSBpbmRleC5xdWVyeVNlbGVjdG9yKCcucmJ4LXZvaWNlcy1udW0nKTsKICAgIGNvbnN0IGN0cmwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgY3RybC5jbGFzc05hbWUgPSAncmJ4LXZvaWNlcy1jdHJsJzsKICAgIGNvbnN0IGljb24gPSAoZCwgZXh0cmEpID0+ICc8c3ZnIGNsYXNzPSJpY28nICsgKGV4dHJhIHx8ICcnKSArICciIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSInICsgZCArICciLz48L3N2Zz4nOwogICAgY29uc3QgYnV0dG9uID0gKGxhYmVsLCBodG1sKSA9PiB7IGNvbnN0IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgYi50eXBlID0gJ2J1dHRvbic7IGIuY2xhc3NOYW1lID0gJ3JieC12b2ljZXMtYnRuJzsgYi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBsYWJlbCk7IGIuaW5uZXJIVE1MID0gaHRtbDsgY3RybC5hcHBlbmQoYik7IHJldHVybiBiOyB9OwogICAgY29uc3QgcHJldiA9IGJ1dHRvbignRGVwb2ltZW50byBhbnRlcmlvcicsIGljb24oJ00xMCAzTDUgOGw1IDUnKSk7CiAgICBjb25zdCBwYXVzZSA9IGJ1dHRvbignUGF1c2FyIGRlcG9pbWVudG9zJywgaWNvbignTTUuNSAzdjEwTTEwLjUgM3YxMCcsICcgaXMtcGF1c2UnKSArIGljb24oJ001IDNsNyA1LTcgNXonLCAnIGlzLXBsYXkgaXMtb2ZmJykgKwogICAgICAnPHN2ZyBjbGFzcz0icmJ4LXZvaWNlcy1jbG9jayIgdmlld0JveD0iMCAwIDQ0IDQ0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PGNpcmNsZSBjeD0iMjIiIGN5PSIyMiIgcj0iMjEuMjUiIHBhdGhMZW5ndGg9IjEwMCIvPjwvc3ZnPicpOwogICAgY29uc3QgbmV4dCA9IGJ1dHRvbignUHLDs3hpbW8gZGVwb2ltZW50bycsIGljb24oJ002IDNsNSA1LTUgNScpKTsKICAgIGNvbnN0IGNsb2NrID0gcGF1c2UucXVlcnlTZWxlY3RvcignLnJieC12b2ljZXMtY2xvY2sgY2lyY2xlJyk7CiAgICAvLyB0aGUgbmF2aWdhdG9yIChyaW5nLCBidXR0b25zLCBhIGNhcHRpb24gZm9yIHRoZSBob3ZlciBwcmV2aWV3KSBzaXRzIGluIHRoZSBzZWN0aW9uIGhlYWQsIHdoZXJlIG90aGVyCiAgICAvLyBzZWN0aW9ucyBwdXQgdGhlaXIgaW50cm8gdGV4dDsgdGhlIHF1b3RlIHJ1bnMgYmVsb3cgb24gdGhlIHBhZ2UncyBsZWZ0IGVkZ2UsIGxpa2UgZXZlcnkgc2VjdGlvbidzIGNvbnRlbnQKICAgIGNvbnN0IHBlZWtMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOyBwZWVrTGluZS5jbGFzc05hbWUgPSAncmJ4LXZvaWNlcy1wZWVrJzsgcGVla0xpbmUuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICBsZXQgdW5wZWVrID0gMDsKICAgIHBlZWtMaW5lLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJlbnRlcicsICgpID0+IGNsZWFyVGltZW91dCh1bnBlZWspKTsKICAgIHBlZWtMaW5lLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsICgpID0+IHBlZWsoLTEpKTsKICAgIGNvbnN0IHNpZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgc2lkZS5jbGFzc05hbWUgPSAncmJ4LXZvaWNlcy1zaWRlJzsKICAgIHNpZGUuYXBwZW5kKGN0cmwsIHBlZWtMaW5lKTsKICAgIGNvbnN0IG5hdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBuYXYuY2xhc3NOYW1lID0gJ3JieC12b2ljZXMtbmF2JzsKICAgIG5hdi5hcHBlbmQoZGlhbCwgc2lkZSk7CiAgICBjb25zdCBzbG90ID0gdm9pY2VzLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXJieC12b2ljZXMtbmF2XScpOwogICAgaWYgKHNsb3QpIHNsb3QuYXBwZW5kKG5hdik7IGVsc2UgdHJhY2sucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmF2LCB0cmFjayk7CgogICAgLy8gdGhlIGxvZ28ncyBiIHJpbmcsIHJlYWQgY2xvY2t3aXNlIGZyb20gdHdlbHZlOiBibHVlIHRvIGFib3V0IDIwZGVnLCBpbmsgdG8gYWJvdXQgMTYwZGVnLCBsaWdodCBibHVlCiAgICAvLyB0byAyNzBkZWcsIGJsdWUgYWdhaW4gdG8gdHdlbHZlLiBFYWNoIHNlZ21lbnQgdGFrZXMgdGhlIGNvbG91ciB1bmRlciBpdHMgbWlkZGxlLgogICAgLy8gU2VnbWVudCAxIGlzIGNlbnRyZWQgb24gdHdlbHZlOyB3aXRoIDEwIHF1b3RlcyB0aGUgZ2FwcyBmYWxsIGV4YWN0bHkgb24gdGhlIGxvZ28gY3V0cyAoMyBibHVlLCA0IGluaywgMyBsaWdodCk7IHdpdGggOTogMy80LzIuCiAgICBjb25zdCBjb2xvdXJBdCA9IChkZWcpID0+IChkZWcgPj0gMjcwIHx8IGRlZyA8IDE5ID8gJ2MtYmx1ZScgOiBkZWcgPCAxNjEgPyAnYy1pbmsnIDogJ2MtbGlnaHQnKTsKICAgIGNvbnN0IFIgPSA0MiwgR0FQID0gMS42LCBTRUcgPSAxMDAgLyBuIC0gR0FQOwogICAgY29uc3QgYXQgPSAoaSkgPT4gJ3JvdGF0ZSgnICsgKChpIC0gMC41KSAqIDM2MCAvIG4gKyBHQVAgKiAxLjgpICsgJyA1MCA1MCknOyAgIC8vIHNlZ21lbnQgaSBjZW50cmVkIG9uIGl0cyBob3VyLCBzZWdtZW50IDEgb24gdHdlbHZlCiAgICBjb25zdCBsaXQgPSBbXSwgZ2hvc3RzID0gW107CiAgICBjYXJkcy5mb3JFYWNoKChjYXJkLCBpKSA9PiB7CiAgICAgIGNvbnN0IHJvdCA9IGF0KGkpOwogICAgICBjb25zdCBjID0gY29sb3VyQXQoaSAqIDM2MCAvIG4pOyAgIC8vIGxvZ28gY29sb3VyIGF0IHRoZSBzZWdtZW50J3MgY2VudHJlCiAgICAgIGVsKCdjaXJjbGUnLCB7IGN4OiA1MCwgY3k6IDUwLCByOiBSLCBwYXRoTGVuZ3RoOiAxMDAsIGNsYXNzOiAndHJhY2snLCAnc3Ryb2tlLWRhc2hhcnJheSc6IFNFRyArICcgMTAwJywgdHJhbnNmb3JtOiByb3QgfSwgc3ZnKTsKICAgICAgZ2hvc3RzLnB1c2goZWwoJ2NpcmNsZScsIHsgY3g6IDUwLCBjeTogNTAsIHI6IFIsIHBhdGhMZW5ndGg6IDEwMCwgY2xhc3M6ICdnaG9zdCAnICsgYywgJ3N0cm9rZS1kYXNoYXJyYXknOiBTRUcgKyAnIDEwMCcsIHRyYW5zZm9ybTogcm90IH0sIHN2ZykpOwogICAgICBsaXQucHVzaChlbCgnY2lyY2xlJywgeyBjeDogNTAsIGN5OiA1MCwgcjogUiwgcGF0aExlbmd0aDogMTAwLCBjbGFzczogJ2xpdCAnICsgYywgJ3N0cm9rZS1kYXNoYXJyYXknOiAnMCAxMDAnLCB0cmFuc2Zvcm06IHJvdCB9LCBzdmcpKTsKICAgIH0pOwogICAgLy8gaGl0IGFyZWFzIGxhc3QsIHNvIHRoZXkgc2l0IG9uIHRvcAogICAgY2FyZHMuZm9yRWFjaCgoY2FyZCwgaSkgPT4gewogICAgICBjb25zdCBoaXQgPSBlbCgnY2lyY2xlJywgeyBjeDogNTAsIGN5OiA1MCwgcjogUiwgcGF0aExlbmd0aDogMTAwLCBjbGFzczogJ2hpdCcsICdzdHJva2UtZGFzaGFycmF5JzogU0VHICsgJyAxMDAnLCB0cmFuc2Zvcm06IGF0KGkpIH0sIHN2Zyk7CiAgICAgIGhpdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGdvKGksIHRydWUpKTsKICAgICAgaGl0LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJlbnRlcicsIChlKSA9PiB7IGlmIChlLnBvaW50ZXJUeXBlID09PSAnbW91c2UnKSB7IGNsZWFyVGltZW91dCh1bnBlZWspOyBwZWVrKGkpOyB9IH0pOwogICAgICBoaXQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxlYXZlJywgKCkgPT4geyB1bnBlZWsgPSBzZXRUaW1lb3V0KCgpID0+IHBlZWsoLTEpLCAyNTApOyB9KTsKICAgIH0pOwoKICAgIC8vIGVhY2ggd29yZCBpbiBpdHMgb3duIHNwYW4gKGZvciB0aGUgcmVhZGluZy1vcmRlciByZXZlYWwpLCBidWlsdCBmcm9tIHRleHQgbm9kZXMgd2l0aCBET00gY2FsbHM6IGlubGluZQogICAgLy8gbWFya3VwIChlbSwgc3BhbiBsYW5nKSBpcyBrZXB0LCBhbmQgbm8gcXVvdGUgdGV4dCBpcyBldmVyIHBhcnNlZCBhcyBIVE1MCiAgICBjb25zdCBzcGxpdFdvcmRzID0gKG5vZGUpID0+IHsKICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7CiAgICAgIGNvbnN0IHRleHRzID0gW107CiAgICAgIHdoaWxlICh3YWxrZXIubmV4dE5vZGUoKSkgdGV4dHMucHVzaCh3YWxrZXIuY3VycmVudE5vZGUpOwogICAgICB0ZXh0cy5mb3JFYWNoKCh0KSA9PiB7CiAgICAgICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAgICB0LmRhdGEuc3BsaXQoLyhccyspLykuZm9yRWFjaCgodykgPT4gewogICAgICAgICAgaWYgKCF3KSByZXR1cm47CiAgICAgICAgICBpZiAoL15ccyskLy50ZXN0KHcpKSB7IGZyYWcuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHcpKTsgcmV0dXJuOyB9CiAgICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOyBzcGFuLmNsYXNzTmFtZSA9ICd3Jzsgc3Bhbi50ZXh0Q29udGVudCA9IHc7CiAgICAgICAgICBmcmFnLmFwcGVuZChzcGFuKTsKICAgICAgICB9KTsKICAgICAgICB0LnJlcGxhY2VXaXRoKGZyYWcpOwogICAgICB9KTsKICAgIH07CiAgICBjYXJkcy5mb3JFYWNoKChjYXJkLCBpKSA9PiB7CiAgICAgIHNwbGl0V29yZHMoY2FyZC5xdWVyeVNlbGVjdG9yKCdibG9ja3F1b3RlJykpOwogICAgICAvLyB0aGUgbGkgc3RheXMgYSBsaXN0IGl0ZW07IHRoZSBmaWd1cmUgaXMgdGhlIGNhcm91c2VsIHNsaWRlCiAgICAgIGNvbnN0IGZpZyA9IGNhcmQucXVlcnlTZWxlY3RvcignZmlndXJlJykgfHwgY2FyZDsKICAgICAgZmlnLnNldEF0dHJpYnV0ZSgncm9sZScsICdncm91cCcpOwogICAgICBmaWcuc2V0QXR0cmlidXRlKCdhcmlhLXJvbGVkZXNjcmlwdGlvbicsICdkZXBvaW1lbnRvJyk7CiAgICAgIGZpZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAoaSArIDEpICsgJyBkZSAnICsgbik7CiAgICB9KTsKCiAgICBsZXQgY3VycmVudCA9IC0xLCB0aW1lciA9IG51bGwsIHVzZXJQYXVzZWQgPSByZWR1Y2UsIGZvY3VzSW4gPSBmYWxzZSwgdmlzaWJsZSA9IGZhbHNlLCBwZWVraW5nID0gLTE7CiAgICBjb25zdCBydW5uaW5nID0gKCkgPT4gIXVzZXJQYXVzZWQgJiYgIWZvY3VzSW4gJiYgdmlzaWJsZSAmJiAhZG9jdW1lbnQuaGlkZGVuOwoKICAgIC8vIGEgc2VnbWVudCBpcyBlaXRoZXIgbGl0IChTRUcpIG9yIGRhcmsgKDApOyBjaGFuZ2VzIHJ1biBpbiBvcmRlciBhcm91bmQgdGhlIHJpbmcKICAgIGNvbnN0IHNlZ1N0YXRlID0gbmV3IEFycmF5KG4pLmZpbGwoMCk7CiAgICBmdW5jdGlvbiBzZXRTZWcoaywgb24sIGRlbGF5LCBkdXJhdGlvbikgewogICAgICBjb25zdCB0byA9IG9uID8gU0VHIDogMDsKICAgICAgaWYgKHNlZ1N0YXRlW2tdID09PSB0bykgcmV0dXJuOwogICAgICBzZWdTdGF0ZVtrXSA9IHRvOwogICAgICBjb25zdCBzID0gbGl0W2tdOwogICAgICBjb25zdCBmcm9tID0gZ2V0Q29tcHV0ZWRTdHlsZShzKS5zdHJva2VEYXNoYXJyYXkuc3BsaXQoL1sgLF0rLylbMF07CiAgICAgIHMuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goKGEpID0+IGEuY2FuY2VsKCkpOwogICAgICBzLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsIHRvICsgJyAxMDAnKTsKICAgICAgaWYgKHJlZHVjZSkgcmV0dXJuOwogICAgICBzLmFuaW1hdGUoW3sgc3Ryb2tlRGFzaGFycmF5OiBwYXJzZUZsb2F0KGZyb20pICsgJyAxMDAnIH0sIHsgc3Ryb2tlRGFzaGFycmF5OiB0byArICcgMTAwJyB9XSwgeyBkdXJhdGlvbiwgZGVsYXksIGVhc2luZzogT1VULCBmaWxsOiAnYmFja3dhcmRzJyB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHBhaW50UmluZyh0YXJnZXQsIGRpcikgewogICAgICBjb25zdCB0dXJuT24gPSBbXSwgdHVybk9mZiA9IFtdOwogICAgICBmb3IgKGxldCBrID0gMDsgayA8IG47IGsrKykgewogICAgICAgIGNvbnN0IHdhbnQgPSBrIDw9IHRhcmdldCA\/IFNFRyA6IDA7CiAgICAgICAgaWYgKHNlZ1N0YXRlW2tdICE9PSB3YW50KSAod2FudCA\/IHR1cm5PbiA6IHR1cm5PZmYpLnB1c2goayk7CiAgICAgIH0KICAgICAgLy8gbmV3IHNlZ21lbnRzIGRyYXcgb25lIGFmdGVyIGFub3RoZXIsIGNsb2Nrd2lzZTsgY2xlYXJlZCBvbmVzIHJldHJhY3QgYW50aWNsb2Nrd2lzZSwgZmFzdGVyCiAgICAgIHR1cm5Pbi5mb3JFYWNoKChrLCBqKSA9PiBzZXRTZWcoaywgdHJ1ZSwgaiAqIDQ1LCA0NjApKTsKICAgICAgdHVybk9mZi5yZXZlcnNlKCkuZm9yRWFjaCgoaywgaikgPT4gc2V0U2VnKGssIGZhbHNlLCBkaXIgPiAwICYmIHRhcmdldCA9PT0gMCA\/IDAgOiBqICogMjIsIDIwMCkpOwogICAgfQogICAgZnVuY3Rpb24gc2V0TnVtYmVyKGssIGRpcikgewogICAgICBjb25zdCBvbGQgPSBudW0ucXVlcnlTZWxlY3RvcignYjpsYXN0LWNoaWxkJyk7CiAgICAgIGlmIChvbGQudGV4dENvbnRlbnQgPT09IHBhZChrKSkgcmV0dXJuOwogICAgICBjb25zdCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYicpOyBiLnRleHRDb250ZW50ID0gcGFkKGspOwogICAgICBudW0uYXBwZW5kKGIpOwogICAgICBpZiAocmVkdWNlKSB7IG9sZC5yZW1vdmUoKTsgcmV0dXJuOyB9CiAgICAgIGNvbnN0IGQgPSBkaXIgPj0gMCA\/IDEgOiAtMTsKICAgICAgb2xkLmFuaW1hdGUoW3sgdHJhbnNmb3JtOiAnbm9uZScsIG9wYWNpdHk6IDEgfSwgeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKCcgKyAoLTU1ICogZCkgKyAnJSknLCBvcGFjaXR5OiAwIH1dLCB7IGR1cmF0aW9uOiAyMDAsIGVhc2luZzogT1VULCBmaWxsOiAnZm9yd2FyZHMnIH0pLm9uZmluaXNoID0gKCkgPT4gb2xkLnJlbW92ZSgpOwogICAgICBiLmFuaW1hdGUoW3sgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgnICsgKDU1ICogZCkgKyAnJSknLCBvcGFjaXR5OiAwIH0sIHsgdHJhbnNmb3JtOiAnbm9uZScsIG9wYWNpdHk6IDEgfV0sIHsgZHVyYXRpb246IDI4MCwgZWFzaW5nOiBPVVQgfSk7CiAgICB9CiAgICAvLyBob3ZlciBwcmV2aWV3IChXQ0FHIDEuNC4xMyk6IHRoZSBkaWFsIGtlZXBzIHNob3dpbmcgdGhlIGN1cnJlbnQgcXVvdGU7IHRoZSBjYXB0aW9uIG5hbWVzIHRoZSBzZWdtZW50LAogICAgLy8gc3RheXMgd2hpbGUgdGhlIHBvaW50ZXIgaXMgb24gaXQsIGFuZCBFc2NhcGUgZGlzbWlzc2VzIGl0CiAgICBmdW5jdGlvbiBwZWVrKGspIHsKICAgICAgcGVla2luZyA9IGs7CiAgICAgIGdob3N0cy5mb3JFYWNoKChnLCBqKSA9PiBnLmNsYXNzTGlzdC50b2dnbGUoJ2lzLXBlZWsnLCBqID09PSBrICYmIHNlZ1N0YXRlW2pdID09PSAwKSk7CiAgICAgIGNvbnN0IG9uID0gayA+PSAwICYmIGsgIT09IGN1cnJlbnQ7CiAgICAgIGRpYWwuY2xhc3NMaXN0LnRvZ2dsZSgnaXMtcGVla2luZycsIG9uKTsKICAgICAgcGVla0xpbmUudGV4dENvbnRlbnQgPSBvbiA\/ICdJciBwYXJhICcgKyBwYWQoaykgKyAnIMK3ICcgKyBuYW1lc1trXSA6ICcnOwogICAgfQoKICAgIGZ1bmN0aW9uIHN0YXJ0VGltZXIoKSB7CiAgICAgIGlmICh0aW1lcikgdGltZXIuY2FuY2VsKCk7CiAgICAgIHRpbWVyID0gbnVsbDsKICAgICAgaWYgKHJlZHVjZSkgcmV0dXJuOwogICAgICB0aW1lciA9IGNsb2NrLmFuaW1hdGUoW3sgc3Ryb2tlRGFzaG9mZnNldDogMTAwIH0sIHsgc3Ryb2tlRGFzaG9mZnNldDogMCB9XSwgeyBkdXJhdGlvbjogaG9sZEZvcihjYXJkc1tjdXJyZW50XSksIGVhc2luZzogJ2xpbmVhcicsIGZpbGw6ICdmb3J3YXJkcycgfSk7CiAgICAgIHRpbWVyLm9uZmluaXNoID0gKCkgPT4gZ28oY3VycmVudCArIDEpOwogICAgICBzeW5jKCk7CiAgICB9CiAgICBmdW5jdGlvbiBzeW5jKCkgewogICAgICB2b2ljZXMuY2xhc3NMaXN0LnRvZ2dsZSgnaXMtaGVsZCcsICFydW5uaW5nKCkpOwogICAgICB0cmFjay5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsIHJ1bm5pbmcoKSA\/ICdvZmYnIDogJ3BvbGl0ZScpOwogICAgICBpZiAoIXRpbWVyKSByZXR1cm47CiAgICAgIGlmIChydW5uaW5nKCkpIHRpbWVyLnBsYXkoKTsgZWxzZSB0aW1lci5wYXVzZSgpOwogICAgfQogICAgZnVuY3Rpb24gZ28oaSwgYnlVc2VyKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9ICgoaSAlIG4pICsgbikgJSBuOwogICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50KSByZXR1cm47CiAgICAgIGNvbnN0IGRpciA9IGN1cnJlbnQgPCAwID8gMSA6IE1hdGguc2lnbihpIC0gY3VycmVudCkgfHwgMTsKICAgICAgY29uc3Qgb2xkID0gY2FyZHNbY3VycmVudF07CiAgICAgIGN1cnJlbnQgPSB0YXJnZXQ7CiAgICAgIGNvbnN0IGNhcmQgPSBjYXJkc1tjdXJyZW50XTsKICAgICAgaWYgKG9sZCkgewogICAgICAgIG9sZC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1vbicpOyBvbGQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICAgICAgaWYgKCFyZWR1Y2UpIHsKICAgICAgICAgIG9sZC5jbGFzc0xpc3QuYWRkKCdpcy1sZWF2aW5nJyk7ICAgLy8gc3RheXMgdmlzaWJsZSB3aGlsZSBpdCBjbGVhcnMKICAgICAgICAgIG9sZC5nZXRBbmltYXRpb25zKHsgc3VidHJlZTogdHJ1ZSB9KS5mb3JFYWNoKChhKSA9PiBhLmNhbmNlbCgpKTsKICAgICAgICAgIG9sZC5hbmltYXRlKFt7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ25vbmUnLCBmaWx0ZXI6ICdibHVyKDApJyB9LCB7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoJyArICgtMTYgKiBkaXIpICsgJ3B4KScsIGZpbHRlcjogJ2JsdXIoM3B4KScgfV0sIHsgZHVyYXRpb246IDE4MCwgZWFzaW5nOiBPVVQsIGZpbGw6ICdmb3J3YXJkcycgfSkKICAgICAgICAgICAgLm9uZmluaXNoID0gKGUpID0+IHsgb2xkLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWxlYXZpbmcnKTsgZS50YXJnZXQuY2FuY2VsKCk7IH07CiAgICAgICAgfQogICAgICB9CiAgICAgIGNhcmQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtbGVhdmluZycpOwogICAgICBjYXJkLmdldEFuaW1hdGlvbnMoeyBzdWJ0cmVlOiB0cnVlIH0pLmZvckVhY2goKGEpID0+IGEuY2FuY2VsKCkpOwogICAgICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2lzLW9uJyk7IGNhcmQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpOwogICAgICBjYXJkcy5mb3JFYWNoKChjLCBrKSA9PiB7IGlmIChrICE9PSBjdXJyZW50KSBjLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOyB9KTsKICAgICAgcGFpbnRSaW5nKGN1cnJlbnQsIGRpcik7CiAgICAgIHNldE51bWJlcihjdXJyZW50LCBkaXIpOwogICAgICBpZiAocGVla2luZyA+PSAwKSBwZWVrKHBlZWtpbmcpOwogICAgICBpZiAoIXJlZHVjZSAmJiBieVVzZXIgIT09ICdpbml0JykgewogICAgICAgIC8vIHRoZSBuZXcgcXVvdGUgYXJyaXZlcyBmcm9tIHRoZSBzaWRlIGl0IHdhcyBhc2tlZCBmb3IsIHRoZW4gdGhlIHdvcmRzIHNldHRsZSBpbiByZWFkaW5nIG9yZGVyCiAgICAgICAgY2FyZC5hbmltYXRlKFt7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoJyArICgyMCAqIGRpcikgKyAncHgpJyB9LCB7IHRyYW5zZm9ybTogJ25vbmUnIH1dLCB7IGR1cmF0aW9uOiA1NjAsIGVhc2luZzogT1VUIH0pOwogICAgICAgIGNvbnN0IHdvcmRzID0gY2FyZC5xdWVyeVNlbGVjdG9yQWxsKCcudycpOwogICAgICAgIGNvbnN0IHN0ZXAgPSBNYXRoLm1pbigxMiwgNDIwIC8gd29yZHMubGVuZ3RoKTsKICAgICAgICB3b3Jkcy5mb3JFYWNoKCh3LCBrKSA9PiB3LmFuaW1hdGUoW3sgb3BhY2l0eTogMCwgZmlsdGVyOiAnYmx1cig0cHgpJywgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSguMmVtKScgfSwgeyBvcGFjaXR5OiAxLCBmaWx0ZXI6ICdibHVyKDApJywgdHJhbnNmb3JtOiAnbm9uZScgfV0sIHsgZHVyYXRpb246IDQyMCwgZGVsYXk6IDYwICsgayAqIHN0ZXAsIGVhc2luZzogT1VULCBmaWxsOiAnYmFja3dhcmRzJyB9KSk7CiAgICAgICAgY2FyZC5xdWVyeVNlbGVjdG9yKCdmaWdjYXB0aW9uJykuYW5pbWF0ZShbeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDRweCknIH0sIHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnbm9uZScgfV0sIHsgZHVyYXRpb246IDMyMCwgZGVsYXk6IDMyMCwgZWFzaW5nOiBPVVQsIGZpbGw6ICdiYWNrd2FyZHMnIH0pOwogICAgICB9CiAgICAgIHN0YXJ0VGltZXIoKTsKICAgIH0KICAgIHByZXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBnbyhjdXJyZW50IC0gMSwgdHJ1ZSkpOwogICAgbmV4dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGdvKGN1cnJlbnQgKyAxLCB0cnVlKSk7CiAgICBwYXVzZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgICAgdXNlclBhdXNlZCA9ICF1c2VyUGF1c2VkOwogICAgICBwYXVzZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB1c2VyUGF1c2VkID8gJ0NvbnRpbnVhciBkZXBvaW1lbnRvcycgOiAnUGF1c2FyIGRlcG9pbWVudG9zJyk7CiAgICAgIHBhdXNlLnF1ZXJ5U2VsZWN0b3IoJy5pcy1wYXVzZScpLmNsYXNzTGlzdC50b2dnbGUoJ2lzLW9mZicsIHVzZXJQYXVzZWQpOwogICAgICBwYXVzZS5xdWVyeVNlbGVjdG9yKCcuaXMtcGxheScpLmNsYXNzTGlzdC50b2dnbGUoJ2lzLW9mZicsICF1c2VyUGF1c2VkKTsKICAgICAgaWYgKCF1c2VyUGF1c2VkICYmIHRpbWVyICYmIHRpbWVyLnBsYXlTdGF0ZSA9PT0gJ2ZpbmlzaGVkJykgc3RhcnRUaW1lcigpOwogICAgICBzeW5jKCk7CiAgICB9KTsKICAgIGlmIChyZWR1Y2UpIHBhdXNlLmhpZGRlbiA9IHRydWU7CgogICAgLy8gUm90YXRpb24gaG9sZHMgZm9yIGtleWJvYXJkIGZvY3VzIGluc2lkZSB0aGUgc2VjdGlvbiAoV0NBRyAyLjIuMiksIHRoZSBwYXVzZSBidXR0b24sIG9mZiBzY3JlZW4gYW5kIGEKICAgIC8vIGhpZGRlbiB0YWIuIE5vdCBmb3IgdGhlIG1vdXNlOiBhIHBvaW50ZXIgcmVzdGluZyBvdmVyIGEgZnVsbC13aWR0aCBzZWN0aW9uLCBvciB0aGUgZm9jdXMgYSBjbGljayBsZWF2ZXMKICAgIC8vIG9uIGEgYnV0dG9uLCB3b3VsZCBzdG9wIGl0IGZvciBnb29kLiBFYWNoIHF1b3RlJ3MgcmVhZGluZyB0aW1lIGRvZXMgdGhlIHJlc3QuCiAgICB2b2ljZXMuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIChlKSA9PiB7IGZvY3VzSW4gPSBlLnRhcmdldC5tYXRjaGVzKCc6Zm9jdXMtdmlzaWJsZScpOyBzeW5jKCk7IH0pOwogICAgdm9pY2VzLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgKGUpID0+IHsgaWYgKCF2b2ljZXMuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSkgeyBmb2N1c0luID0gZmFsc2U7IHN5bmMoKTsgfSB9KTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4geyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnICYmIHBlZWtpbmcgPj0gMCkgcGVlaygtMSk7IH0pOyAgIC8vIGRpc21pc3MgdGhlIHByZXZpZXcgZnJvbSBhbnl3aGVyZQogICAgdm9pY2VzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4gewogICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd1JpZ2h0JykgeyBlLnByZXZlbnREZWZhdWx0KCk7IGdvKGN1cnJlbnQgKyAxLCB0cnVlKTsgfQogICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0xlZnQnKSB7IGUucHJldmVudERlZmF1bHQoKTsgZ28oY3VycmVudCAtIDEsIHRydWUpOyB9CiAgICB9KTsKICAgIC8vIHBob25lczogYSBob3Jpem9udGFsIHN3aXBlIG9uIHRoZSBxdW90ZSBtb3ZlcyBvbmUgc3RlcDsgYSBxdWljayBmbGljayBpcyBlbm91Z2gKICAgIGxldCBzd2lwZSA9IG51bGw7CiAgICB0cmFjay5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIChlKSA9PiB7IGlmIChlLnBvaW50ZXJUeXBlICE9PSAnbW91c2UnKSBzd2lwZSA9IHsgeDogZS5jbGllbnRYLCB5OiBlLmNsaWVudFksIHQ6IHBlcmZvcm1hbmNlLm5vdygpIH07IH0pOwogICAgdHJhY2suYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKGUpID0+IHsKICAgICAgaWYgKCFzd2lwZSkgcmV0dXJuOwogICAgICBjb25zdCBkeCA9IGUuY2xpZW50WCAtIHN3aXBlLngsIGR5ID0gZS5jbGllbnRZIC0gc3dpcGUueSwgdiA9IE1hdGguYWJzKGR4KSAvIChwZXJmb3JtYW5jZS5ub3coKSAtIHN3aXBlLnQpOwogICAgICBzd2lwZSA9IG51bGw7CiAgICAgIGlmIChNYXRoLmFicyhkeCkgPiBNYXRoLmFicyhkeSkgKiAxLjQgJiYgKE1hdGguYWJzKGR4KSA+IDQ4IHx8IHYgPiAwLjExKSkgZ28oY3VycmVudCArIChkeCA8IDAgPyAxIDogLTEpLCB0cnVlKTsKICAgIH0pOwogICAgdHJhY2suYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsICgpID0+IHsgc3dpcGUgPSBudWxsOyB9KTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBzeW5jKTsKICAgIGlmICgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykgewogICAgICBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHsgdmlzaWJsZSA9IGVudHJpZXNbZW50cmllcy5sZW5ndGggLSAxXS5pc0ludGVyc2VjdGluZzsgc3luYygpOyB9LCB7IHRocmVzaG9sZDogMC4zNSB9KS5vYnNlcnZlKHZvaWNlcyk7CiAgICB9IGVsc2UgeyB2aXNpYmxlID0gdHJ1ZTsgfQogICAgdHJhY2sucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpOwogICAgdm9pY2VzLmNsYXNzTGlzdC5hZGQoJ2lzLXN0YWdlJyk7CiAgICBnbygwLCAnaW5pdCcpOwogIH0KfSkoKTsK\"><\/script>\n<script data-no-optimize=\"1\" src=\"data:text\/javascript;base64,LyohIHJieC1yaXNlIDogZW50cmFuY2VzIChyYnggZGVzaWduIHN5c3RlbSkKICogU2VsZi1pbml0aWFsaXNpbmcgYW5kIGluZGVwZW5kZW50LiBCbG9ja3Mgd2l0aCBjbGFzcz0icmJ4LXJpc2UiIGluc2lkZSBhbnkgLnJieCByb290IHJpc2UgaW50byBwbGFjZSB3aGVuIHRoZXkKICogZmlyc3Qgc2Nyb2xsIGludG8gdmlldy4gQW55dGhpbmcgb24gc2NyZWVuIHdoZW4gdGhlIHNjcmlwdCBydW5zIHdhcyBhbHJlYWR5IHBhaW50ZWQ6IGl0IHN0YXlzIGFzIGl0IGlzOyBvbmx5CiAqIHdoYXQgaXMgc3RpbGwgYmVsb3cgdGhlIGZvbGQgcmlzZXMuIFJlZHVjZWQgbW90aW9uIG9yIG5vIEludGVyc2VjdGlvbk9ic2VydmVyOiBub3RoaW5nIGNoYW5nZXMuCiAqLwooKCkgPT4gewogICd1c2Ugc3RyaWN0JzsKICB0cnkgewogICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXMgfHwgISgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykpIHJldHVybjsKICAgIGNvbnN0IHJvb3RzID0gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yYngnKV07CiAgICBjb25zdCBhbGwgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJieCAucmJ4LXJpc2UnKV07CiAgICBpZiAoIXJvb3RzLmxlbmd0aCkgcmV0dXJuOwogICAgLy8gbWVhc3VyZWQgYmVmb3JlIHRoZSBoaWRkZW4gc3RhcnQgc3RhdGUgYXBwbGllcywgc28gdGhlIGxheW91dCBpcyB0aGUgb25lIHRoZSB2aXNpdG9yIHNlZXMKICAgIGNvbnN0IHJpc2VycyA9IGFsbC5maWx0ZXIoKGVsKSA9PiB7CiAgICAgIGNvbnN0IGJveCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICByZXR1cm4gIShib3gudG9wIDwgd2luZG93LmlubmVySGVpZ2h0ICYmIGJveC5ib3R0b20gPiAwKTsKICAgIH0pOwogICAgcm9vdHMuZm9yRWFjaCgocm9vdCkgPT4gcm9vdC5jbGFzc0xpc3QuYWRkKCdyYngtanMnKSk7CiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4gewogICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7CiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7IGVudHJ5LnRhcmdldC5jbGFzc0xpc3QuYWRkKCdpcy1pbicpOyBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KTsgfQogICAgICB9KTsKICAgIH0sIHsgdGhyZXNob2xkOiAwLjEyLCByb290TWFyZ2luOiAnMHB4IDBweCAtNiUgMHB4JyB9KTsKICAgIGFsbC5mb3JFYWNoKChlbCkgPT4gewogICAgICBpZiAocmlzZXJzLmluY2x1ZGVzKGVsKSkgb2JzZXJ2ZXIub2JzZXJ2ZShlbCk7IGVsc2UgZWwuY2xhc3NMaXN0LmFkZCgnaXMtaW4nKTsKICAgIH0pOwogIH0gY2F0Y2ggKGVycikgeyBpZiAod2luZG93LmNvbnNvbGUpIGNvbnNvbGUud2FybigncmJ4LXJpc2U6IGZhaWxlZCcsIGVycik7IH0KfSkoKTsK\"><\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Consultoria de neg\u00f3cios Mais resultado. Menos depend\u00eancia de voc\u00ea. Lucro apertado, vendas inst\u00e1veis ou uma decis\u00e3o importante pela frente? Rodolfo Basilio ajuda voc\u00ea a entender o problema e definir o pr\u00f3ximo passo, com os n\u00fameros na mesa e aten\u00e7\u00e3o ao mercado onde voc\u00ea opera. Quero discutir meu caso \u2192 Veja como Rodolfo pode ajudar \u2193 Uma decis\u00e3o pontual, um projeto ou acompanhamento. O seu caso define o trabalho. Seu ponto de partida O que precisa mudar agora? Escolha a situa\u00e7\u00e3o que mais se aproxima da sua. Quero melhorar o lucro e as vendas.\u2198 Quero que a empresa dependa menos de mim.\u2198 Preciso avaliar uma decis\u00e3o importante.\u2198 Tenho um problema urgente no neg\u00f3cio.\u2198 O seu neg\u00f3cio, na pr\u00e1tica O que precisa mudar? O trabalho come\u00e7a pelo que est\u00e1 limitando o seu resultado ou pela decis\u00e3o que voc\u00ea precisa tomar. Lucro e caixaTrabalho muito, vendo, mas o dinheiro n\u00e3o sobra.\u2192 Lucro e caixa Faturar em outra moeda n\u00e3o garante que o neg\u00f3cio esteja remunerando voc\u00ea como deveria. Os pre\u00e7os precisam fazer sentido para o cliente e cobrir os sal\u00e1rios, o aluguel e os demais custos de onde a empresa opera. O que podemos trabalhar Pre\u00e7os, custos, margens e recebimentos: entender onde o resultado se perde e definir o que mudar primeiro. Quero melhorar meu resultado \u2192 Clientes e vendasPreciso de clientes melhores e vendas mais consistentes.\u2192 Clientes e vendas Voc\u00ea sabe entregar. O desafio \u00e9 fazer os clientes certos reconhecerem esse valor: entender como escolhem fornecedores, o que gera confian\u00e7a e como as negocia\u00e7\u00f5es acontecem nesse mercado. O que podemos trabalhar Oferta, pre\u00e7os, abordagem comercial, canais e parcerias para reduzir a depend\u00eancia de vendas ocasionais. Quero discutir minhas vendas \u2192 Equipe e opera\u00e7\u00e3oSe eu parar, a empresa para.\u2192 Equipe e opera\u00e7\u00e3o O telefone continua tocando quando voc\u00ea viaja, est\u00e1 em outro fuso ou tenta passar tempo com a fam\u00edlia. Contratar mais gente n\u00e3o resolve se todas as decis\u00f5es continuam voltando para voc\u00ea. O que podemos trabalhar Responsabilidades e delega\u00e7\u00e3o, considerando o custo e as condi\u00e7\u00f5es de formar uma equipe onde o neg\u00f3cio funciona. Quero organizar minha opera\u00e7\u00e3o \u2192 Investimento e decis\u00f5esTenho uma decis\u00e3o grande e preciso entender o risco.\u2192 Investimento e decis\u00f5es Abrir, comprar, expandir, trazer um s\u00f3cio ou vender exige olhar al\u00e9m da oportunidade no papel. Os custos, os contratos e a forma de fazer neg\u00f3cio naquele mercado podem mudar a conta. O que podemos trabalhar Comparar caminhos, testar os n\u00fameros e avaliar as consequ\u00eancias antes de voc\u00ea comprometer o capital que construiu. Quero avaliar minha decis\u00e3o \u2192 Situa\u00e7\u00f5es urgentesMeu neg\u00f3cio est\u00e1 em dificuldade e preciso agir agora.\u2192 Situa\u00e7\u00f5es urgentes As cobran\u00e7as chegam, os prazos apertam e as orienta\u00e7\u00f5es do contador, do banco e de outros profissionais precisam virar decis\u00f5es. Discutir o caso em portugu\u00eas, considerando as condi\u00e7\u00f5es de onde a empresa opera, ajuda a organizar o problema. O que podemos trabalhar Avaliar o que \u00e9 vi\u00e1vel e o que precisa ser feito primeiro, junto aos especialistas necess\u00e1rios. Quero explicar minha situa\u00e7\u00e3o \u2192 Voc\u00ea pode trazer mais de um desafio. A primeira conversa ajuda a identificar por onde come\u00e7ar. Como funciona Do problema aos pr\u00f3ximos passos. O pa\u00eds, o momento da empresa e os recursos dispon\u00edveis fazem parte da an\u00e1lise. 1 Entender o caso Voc\u00ea apresenta o neg\u00f3cio, o que precisa resolver e os prazos envolvidos. A conversa inicial serve para avaliar como Rodolfo pode ajudar. 2 Definir o trabalho Uma decis\u00e3o pontual, um projeto ou acompanhamento. Entregas, responsabilidades, dura\u00e7\u00e3o e investimento s\u00e3o definidos antes da contrata\u00e7\u00e3o. 3 Colocar as prioridades em pr\u00e1tica Conforme o trabalho contratado, Rodolfo ajuda a organizar as a\u00e7\u00f5es, apoiar decis\u00f5es e acompanhar os ajustes necess\u00e1rios. N\u00fameros do seu neg\u00f3cio Contexto do seu mercado Responsabilidades definidas Rodolfo BasilioConsultor de neg\u00f3cios Quem vai olhar para o seu neg\u00f3cio 20 empresas em 20 anos. Come\u00e7ou a empreender antes dos 20 anos e n\u00e3o parou. Construiu neg\u00f3cios em contabilidade, fintech, constru\u00e7\u00e3o, gastronomia, m\u00eddia e consultoria, em tr\u00eas continentes. Por tr\u00e1s de marcas como Angra, Remitec, Garan, Vertice Services, Vertice Fintech e Rodolfo Basilio Consultoria. J\u00e1 construiu, escalou, vendeu e, quando n\u00e3o funcionou, fechou e seguiu em frente. Hoje trabalha exclusivamente com empres\u00e1rios que querem crescer com m\u00e9todo. Tudo o que ensina vem da pr\u00f3pria experi\u00eancia operando no dia a dia, n\u00e3o de teoria. Presente em 8+ pa\u00edses: Reino Unido, Brasil, Portugal, EUA, Nova Zel\u00e2ndia, Hong Kong, Espanha Fundou a maior consultoria cont\u00e1bil brasileira no Reino Unido Experi\u00eancia operacional direta em cada neg\u00f3cio que fundou J\u00e1 construiu, escalou, vendeu e encerrou empresas Refer\u00eancia para empres\u00e1rios brasileiros fora do Brasil Conhe\u00e7a a trajet\u00f3ria de Rodolfo \u2192 Empresas analisadas 10k+ Empresas de sucesso 10 Empresas operando 4 Exits realizados 3 Depoimentos Quem j\u00e1 trabalhou com Rodolfo. \u201cO Rodolfo \u00e9 um parceiro confi\u00e1vel que realmente se preocupa com o nosso sucesso. Os insights estrat\u00e9gicos nos ajudaram a tomar melhores decis\u00f5es e expandir a empresa com mais confian\u00e7a.\u201dSergio Gomes BeatoSGB Transport \u201cA vis\u00e3o estrat\u00e9gica do Rodolfo foi fundamental para o nosso sucesso. Ela nos ajudou a reestruturar as finan\u00e7as e a implementar solu\u00e7\u00f5es pr\u00e1ticas que aumentaram consideravelmente a nossa rentabilidade.\u201dSerghei ZagorneanLider Construction \u201cDesde que come\u00e7amos a trabalhar com o Rodolfo, nossa empresa experimentou um crescimento mais s\u00f3lido. Sentimos que estamos mais no controle do que antes. A equipe dele sempre traz estrat\u00e9gias financeiras que nos ajudam a aumentar nossa rentabilidade e a explorar novos segmentos.\u201dAlexandre Lemos SoaresVelop4 Sports \u201cRecomendo o Rodolfo para quem busca um parceiro confi\u00e1vel e competente para transformar e expandir seu neg\u00f3cio.\u201dFernando GubertPinotage Electrical Services \u201cTrabalhar com o Rodolfo foi um divisor de \u00e1guas para o nosso neg\u00f3cio. Os insights e estrat\u00e9gias da equipe dele nos ajudam sempre a otimizar opera\u00e7\u00f5es e melhorar nossa lucratividade. Altamente recomendado!\u201dSharat PutaFx Master \u201cO Rodolfo e a equipe dele s\u00e3o sempre muito profissionais e acess\u00edveis, com conselhos valiosos que transformaram nossa abordagem no crescimento da nossa empresa. Somos gratos pelo seu apoio.\u201dAdrian MateasSame Day Dentist \u201cGra\u00e7as ao trabalho do Rodolfo e da equipe dele, conseguimos resolver quest\u00f5es muito importantes e alcan\u00e7ar nossos objetivos mais r\u00e1pido.\u201dDaniel MorelliHoteleiro \u201cO Rodolfo e a equipe dele trouxeram uma nova<\/p>","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-3075","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Consultoria de neg\u00f3cios | Rodolfo Basilio<\/title>\n<meta name=\"description\" content=\"Lucro apertado, vendas inst\u00e1veis ou uma decis\u00e3o importante? Rodolfo Basilio ajuda a analisar seu neg\u00f3cio e definir o pr\u00f3ximo passo. Converse sobre seu caso.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rodolfobasilio.com\/en\/consultoria\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Consultoria de neg\u00f3cios | Rodolfo Basilio\" \/>\n<meta property=\"og:description\" content=\"Lucro apertado, vendas inst\u00e1veis ou uma decis\u00e3o importante? Rodolfo Basilio ajuda a analisar seu neg\u00f3cio e definir o pr\u00f3ximo passo. Converse sobre seu caso.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rodolfobasilio.com\/en\/consultoria\/\" \/>\n<meta property=\"og:site_name\" content=\"Rodolfo Basilio\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-15T08:44:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2026\/03\/sobre-rodolfo.webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/consultoria\\\/\",\"url\":\"https:\\\/\\\/rodolfobasilio.com\\\/consultoria\\\/\",\"name\":\"Consultoria de neg\u00f3cios | Rodolfo Basilio\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/consultoria\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/consultoria\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rodolfobasilio.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/sobre-rodolfo.webp\",\"datePublished\":\"2026-09-17T21:33:14+00:00\",\"dateModified\":\"2026-10-15T08:44:07+00:00\",\"description\":\"Lucro apertado, vendas inst\u00e1veis ou uma decis\u00e3o importante? Rodolfo Basilio ajuda a analisar seu neg\u00f3cio e definir o pr\u00f3ximo passo. Converse sobre seu caso.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/consultoria\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rodolfobasilio.com\\\/consultoria\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/consultoria\\\/#primaryimage\",\"url\":\"https:\\\/\\\/rodolfobasilio.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/sobre-rodolfo.webp\",\"contentUrl\":\"https:\\\/\\\/rodolfobasilio.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/sobre-rodolfo.webp\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/consultoria\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/rodolfobasilio.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Consultoria de neg\u00f3cios\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/#website\",\"url\":\"https:\\\/\\\/rodolfobasilio.com\\\/\",\"name\":\"Rodolfo Basilio\",\"description\":\"Consultoria Empresarial e Financeira\",\"publisher\":{\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/#\\\/schema\\\/person\\\/5bd0a41175af44c72e1143a143f68ec9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rodolfobasilio.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/#\\\/schema\\\/person\\\/5bd0a41175af44c72e1143a143f68ec9\",\"name\":\"administrador\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/rb-Logo.svg\",\"url\":\"https:\\\/\\\/rodolfobasilio.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/rb-Logo.svg\",\"contentUrl\":\"https:\\\/\\\/rodolfobasilio.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/rb-Logo.svg\",\"width\":49,\"height\":45,\"caption\":\"administrador\"},\"logo\":{\"@id\":\"https:\\\/\\\/rodolfobasilio.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/rb-Logo.svg\"},\"sameAs\":[\"http:\\\/\\\/50v.cb3.mytemp.website\",\"https:\\\/\\\/www.instagram.com\\\/basilio.rodolfo\\\/\",\"https:\\\/\\\/uk.linkedin.com\\\/in\\\/rodolfo-basilio?trk=people-guest_people_search-card\",\"https:\\\/\\\/www.youtube.com\\\/@RodolfoBasilioOficial\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Consultoria de neg\u00f3cios | Rodolfo Basilio","description":"Lucro apertado, vendas inst\u00e1veis ou uma decis\u00e3o importante? Rodolfo Basilio ajuda a analisar seu neg\u00f3cio e definir o pr\u00f3ximo passo. Converse sobre seu caso.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rodolfobasilio.com\/en\/consultoria\/","og_locale":"en_GB","og_type":"article","og_title":"Consultoria de neg\u00f3cios | Rodolfo Basilio","og_description":"Lucro apertado, vendas inst\u00e1veis ou uma decis\u00e3o importante? Rodolfo Basilio ajuda a analisar seu neg\u00f3cio e definir o pr\u00f3ximo passo. Converse sobre seu caso.","og_url":"https:\/\/rodolfobasilio.com\/en\/consultoria\/","og_site_name":"Rodolfo Basilio","article_modified_time":"2026-10-15T08:44:07+00:00","og_image":[{"url":"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2026\/03\/sobre-rodolfo.webp","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/rodolfobasilio.com\/consultoria\/","url":"https:\/\/rodolfobasilio.com\/consultoria\/","name":"Consultoria de neg\u00f3cios | Rodolfo Basilio","isPartOf":{"@id":"https:\/\/rodolfobasilio.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rodolfobasilio.com\/consultoria\/#primaryimage"},"image":{"@id":"https:\/\/rodolfobasilio.com\/consultoria\/#primaryimage"},"thumbnailUrl":"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2026\/03\/sobre-rodolfo.webp","datePublished":"2026-09-17T21:33:14+00:00","dateModified":"2026-10-15T08:44:07+00:00","description":"Lucro apertado, vendas inst\u00e1veis ou uma decis\u00e3o importante? Rodolfo Basilio ajuda a analisar seu neg\u00f3cio e definir o pr\u00f3ximo passo. Converse sobre seu caso.","breadcrumb":{"@id":"https:\/\/rodolfobasilio.com\/consultoria\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rodolfobasilio.com\/consultoria\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/rodolfobasilio.com\/consultoria\/#primaryimage","url":"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2026\/03\/sobre-rodolfo.webp","contentUrl":"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2026\/03\/sobre-rodolfo.webp"},{"@type":"BreadcrumbList","@id":"https:\/\/rodolfobasilio.com\/consultoria\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/rodolfobasilio.com\/"},{"@type":"ListItem","position":2,"name":"Consultoria de neg\u00f3cios"}]},{"@type":"WebSite","@id":"https:\/\/rodolfobasilio.com\/#website","url":"https:\/\/rodolfobasilio.com\/","name":"Rodolfo Basilio","description":"Business and Financial Consultancy","publisher":{"@id":"https:\/\/rodolfobasilio.com\/#\/schema\/person\/5bd0a41175af44c72e1143a143f68ec9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rodolfobasilio.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/rodolfobasilio.com\/#\/schema\/person\/5bd0a41175af44c72e1143a143f68ec9","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2025\/03\/rb-Logo.svg","url":"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2025\/03\/rb-Logo.svg","contentUrl":"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2025\/03\/rb-Logo.svg","width":49,"height":45,"caption":"administrador"},"logo":{"@id":"https:\/\/rodolfobasilio.com\/wp-content\/uploads\/2025\/03\/rb-Logo.svg"},"sameAs":["http:\/\/50v.cb3.mytemp.website","https:\/\/www.instagram.com\/basilio.rodolfo\/","https:\/\/uk.linkedin.com\/in\/rodolfo-basilio?trk=people-guest_people_search-card","https:\/\/www.youtube.com\/@RodolfoBasilioOficial"]}]}},"_links":{"self":[{"href":"https:\/\/rodolfobasilio.com\/en\/wp-json\/wp\/v2\/pages\/3075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rodolfobasilio.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/rodolfobasilio.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/rodolfobasilio.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/rodolfobasilio.com\/en\/wp-json\/wp\/v2\/comments?post=3075"}],"version-history":[{"count":4,"href":"https:\/\/rodolfobasilio.com\/en\/wp-json\/wp\/v2\/pages\/3075\/revisions"}],"predecessor-version":[{"id":3118,"href":"https:\/\/rodolfobasilio.com\/en\/wp-json\/wp\/v2\/pages\/3075\/revisions\/3118"}],"wp:attachment":[{"href":"https:\/\/rodolfobasilio.com\/en\/wp-json\/wp\/v2\/media?parent=3075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}