{"id":392562,"date":"2026-08-03T14:35:16","date_gmt":"2026-08-03T17:35:16","guid":{"rendered":"https:\/\/mkt.estrategia.com\/med\/ato-final-enamed\/acessar\/"},"modified":"2026-08-17T18:11:05","modified_gmt":"2026-08-17T21:11:05","slug":"acessar","status":"publish","type":"page","link":"https:\/\/mkt.estrategia.com\/med\/ato-final-enamed\/acessar\/","title":{"rendered":"Acessar \u00b7 Ato Final ENAMED"},"content":{"rendered":"\n<style id=\"lp-divi-reset\">#main-header,#main-footer,#footer-info,#et-secondary-nav,header.et-l,.et_pb_section_0_tb_header,#wpadminbar,#top-header,#et-top-navigation,#et-secondary-menu,#footer-widgets,#footer-bottom,#et-main-area > footer,.mobile_nav,.mobile_menu_bar,#et_mobile_nav_menu,#et-info,.main_title,.post-meta,.et_post_meta_wrapper,.nav_container,.et_search_outer{display:none !important}html,body{margin:0 !important;padding:0 !important;overflow-x:hidden !important;overflow-y:auto !important;scroll-behavior:auto !important;-webkit-overflow-scrolling:touch !important;height:auto !important;background:#030a09 !important}.et_smooth_scroll_disabled #page-container,.et_smooth_scroll_disabled,#page-container,#et-main-area,#et-boc{overflow:visible !important;height:auto !important}#page-container{background:#030a09 !important}#page-container,#et-main-area,#primary-content,#main-content,#main-content > .container,#content-area,#left-area,article.type-page,.entry-content,.et_pb_section,.et_pb_row,.et_pb_column,.et_pb_text,.et_pb_text_inner,.et_pb_module{width:100% !important;max-width:none !important;margin:0 !important;padding:0 !important;float:none !important;background:transparent !important;box-shadow:none !important}#content-area.clearfix,#main-content > .container.clearfix{display:block !important}.entry-content > p:empty{display:none !important}.entry-content > p{margin:0 !important;padding:0 !important}.entry-content > br{display:none !important}#page-container .container::before,#page-container .container::after,.entry-content .container::before,.entry-content .container::after,#left-area .container::before,#left-area .container::after,article.type-page .container::before,article.type-page .container::after{display:none !important;content:none !important;background:transparent !important;width:0 !important;height:0 !important}<\/style>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@400;600;700;800&#038;family=Figtree:wght@400;500;600;700;800&#038;display=swap\" rel=\"stylesheet\">\n<style id=\"af-css\">:root{--bg:#0A1220;--bg-2:#0E1930;--bg-3:#131F3A;--ink:#F4F0E6;--ink-dim:#B8C0D0;--ink-mute:#7C8698;--amber:#F2B04A;--amber-strong:#E89A1F;--amber-soft:rgba(242,176,74,.12);--green:#4CC38A;--red:#E5675C;--blue:#2F7FC0;--line:rgba(244,240,230,.09);--card:#101B33;--card-2:#0C1526;--radius:16px;--radius-sm:10px;--shadow:0 18px 50px rgba(2,6,16,.55);--font:'Poppins',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:var(--font);background:var(--bg);color:var(--ink);line-height:1.6;overflow-x:hidden;-webkit-font-smoothing:antialiased}img{max-width:100%;display:block}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}input,select,textarea{font-family:inherit;font-size:16px}::selection{background:var(--amber);color:#0A1220}.stage-bg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-2;background:radial-gradient(1200px 600px at 78% -10%,rgba(242,176,74,.10),transparent 60%),radial-gradient(900px 500px at 12% 8%,rgba(47,127,192,.10),transparent 55%),radial-gradient(1000px 800px at 50% 115%,rgba(242,176,74,.06),transparent 60%),var(--bg)}.stage-bg::after{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;opacity:.35;background-image:linear-gradient(rgba(244,240,230,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(244,240,230,.025) 1px,transparent 1px);background-size:56px 56px;mask-image:radial-gradient(ellipse 90% 70% at 50% 0%,#000 30%,transparent 75%)}h1,h2,h3{line-height:1.15;font-weight:800;letter-spacing:-.02em}.kicker{font-size:11px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--amber);display:flex;align-items:center;gap:10px}.kicker.center{justify-content:center}.wrap{width:min(1120px,92%);margin:0 auto}.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;font-weight:700;font-size:15px;padding:16px 30px;border-radius:999px;transition:transform .18s ease,box-shadow .18s ease,background .18s ease;white-space:nowrap}.btn-amber{background:linear-gradient(180deg,var(--amber),var(--amber-strong));color:#20150A;box-shadow:0 10px 30px rgba(242,176,74,.28)}.btn-amber:hover{transform:translateY(-2px);box-shadow:0 16px 40px rgba(242,176,74,.4)}.btn-ghost{border:1px solid var(--line);color:var(--ink-dim)}.btn-ghost:hover{border-color:var(--amber);color:var(--amber)}.btn-sm{padding:10px 20px;font-size:13.5px}.btn[disabled]{opacity:.45;cursor:not-allowed;transform:none!important}.card{background:linear-gradient(180deg,var(--card),var(--card-2));border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.pill{display:inline-flex;align-items:center;gap:8px;padding:7px 16px;border-radius:999px;border:1px solid var(--line);background:rgba(16,27,51,.7);font-size:12.5px;font-weight:600;color:var(--ink-dim)}.pill .dot{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 10px var(--green);animation:pulse 2s infinite}@keyframes pulse{50%{opacity:.4}}.topbar{position:sticky;top:0;z-index:50;backdrop-filter:blur(14px);background:rgba(10,18,32,.82);border-bottom:1px solid var(--line)}.topbar .wrap{display:flex;align-items:center;justify-content:space-between;padding:14px 0}.brand{display:flex;flex-direction:column;align-items:flex-start;gap:7px}.brand-logo{height:30px;width:auto;display:block}.brand b{font-size:15px;letter-spacing:.01em}.brand small{display:block;font-size:9.5px;letter-spacing:.26em;color:var(--amber);font-weight:700;text-transform:uppercase}.hero{position:relative;padding:84px 0 70px;text-align:center}.hero::before{content:\"\";position:absolute;left:50%;top:-40px;transform:translateX(-50%);width:640px;height:520px;background:radial-gradient(closest-side,rgba(242,176,74,.16),transparent);pointer-events:none;filter:blur(4px)}.hero .pill{margin-bottom:26px}.hero h1{font-size:clamp(34px,5.4vw,60px);max-width:900px;margin:0 auto 8px}.hero h1 .glow{color:var(--amber);text-shadow:0 0 42px rgba(242,176,74,.45)}.hero .sub{font-size:clamp(16px,2vw,19px);color:var(--ink-dim);max-width:680px;margin:18px auto 34px}.hero-ctas{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-bottom:44px}.prova-switch{display:inline-flex;background:var(--card-2);border:1px solid var(--line);border-radius:999px;padding:5px;gap:4px;margin-bottom:30px}.prova-switch button{padding:10px 26px;border-radius:999px;font-weight:700;font-size:14px;color:var(--ink-mute);transition:.2s}.prova-switch button.on{background:var(--amber);color:#20150A}.count{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}.count .unit{min-width:86px;padding:16px 10px;border-radius:var(--radius-sm);background:linear-gradient(180deg,var(--card),var(--card-2));border:1px solid var(--line)}.count .n{font-size:34px;font-weight:800;color:var(--amber);font-variant-numeric:tabular-nums;line-height:1}.count .l{font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin-top:8px}.count-label{margin-top:14px;font-size:13px;color:var(--ink-mute)}.bancas{border-block:1px solid var(--line);padding:18px 0;background:rgba(12,21,38,.5)}.bancas .wrap{display:flex;gap:34px;justify-content:center;flex-wrap:wrap;font-size:13px;font-weight:700;letter-spacing:.1em;color:var(--ink-mute);text-transform:uppercase}.ato{padding:96px 0;position:relative}.ato-head{max-width:720px;margin-bottom:52px}.ato-head.center{margin-inline:auto;text-align:center}.ato-num{font-size:88px;font-weight:800;color:transparent;-webkit-text-stroke:1.5px rgba(242,176,74,.28);line-height:1;position:absolute;top:64px;right:4%;user-select:none;pointer-events:none}.ato h2{font-size:clamp(26px,3.6vw,40px);margin-top:16px}.ato h2 em{font-style:normal;color:var(--amber)}.ato .lead{color:var(--ink-dim);margin-top:14px;font-size:16.5px}.eventos{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.evento{padding:26px 22px;border-radius:var(--radius);border:1px solid var(--line);background:linear-gradient(180deg,var(--card),var(--card-2));transition:.25s;position:relative;overflow:hidden}.evento:hover{transform:translateY(-4px);border-color:rgba(242,176,74,.4)}.evento .ic{width:44px;height:44px;border-radius:12px;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;margin-bottom:16px}.evento h3{font-size:16.5px;margin-bottom:8px}.evento p{font-size:13.5px;color:var(--ink-dim)}.evento .tagpts{position:absolute;top:16px;right:16px;font-size:10.5px;font-weight:800;color:var(--amber);letter-spacing:.08em}.score-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px;margin-top:10px}.score-card{padding:30px 26px;border-radius:var(--radius);border:1px solid var(--line);background:linear-gradient(180deg,var(--card),var(--card-2));position:relative;overflow:hidden}.score-card::after{content:\"\";position:absolute;top:auto;right:0;bottom:0;left:0;height:3px;background:linear-gradient(90deg,var(--amber),transparent)}.score-card .big{font-size:44px;font-weight:800;color:var(--amber);line-height:1}.score-card .big small{font-size:16px;color:var(--ink-mute);font-weight:600}.score-card h3{font-size:17px;margin:10px 0 8px}.score-card p{font-size:13.5px;color:var(--ink-dim)}.mec-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px;margin-top:34px}.mec{display:flex;gap:14px;align-items:flex-start;padding:18px;border-radius:var(--radius-sm);background:rgba(16,27,51,.5);border:1px solid var(--line);font-size:13.5px;color:var(--ink-dim)}.mec svg{flex:none;color:var(--amber);margin-top:2px}.mec b{color:var(--ink)}.premios{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-top:34px}.premio{text-align:center;padding:28px 20px;border-radius:var(--radius);border:1px solid rgba(242,176,74,.25);background:linear-gradient(180deg,rgba(242,176,74,.08),transparent 70%),linear-gradient(180deg,var(--card),var(--card-2))}.premio .pos{font-size:11px;font-weight:800;letter-spacing:.2em;color:var(--amber);text-transform:uppercase}.premio .what{font-size:21px;font-weight:800;margin-top:8px}.premio-note{margin-top:14px;font-size:12px;color:var(--ink-mute);text-align:center}.cal-tabs{display:flex;gap:8px;margin-bottom:26px;flex-wrap:wrap}.cal-tabs button{padding:11px 26px;border-radius:999px;border:1px solid var(--line);font-weight:700;font-size:14px;color:var(--ink-mute);transition:.2s}.cal-tabs button.on{background:var(--amber);border-color:var(--amber);color:#20150A}.semana-label{font-size:12px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin:30px 0 12px}.aula-row{display:flex;align-items:center;gap:18px;padding:15px 20px;border-radius:var(--radius-sm);border:1px solid var(--line);background:rgba(16,27,51,.45);margin-bottom:8px;transition:.2s}.aula-row:hover{border-color:rgba(242,176,74,.35);background:rgba(16,27,51,.8)}.aula-row .data{flex:none;width:64px;text-align:center;font-weight:800;color:var(--amber);font-size:15px;line-height:1.2}.aula-row .data small{display:block;font-size:10px;letter-spacing:.14em;color:var(--ink-mute);font-weight:700}.aula-row .titulo{flex:1;font-weight:600;font-size:14.5px}.aula-row .hora{flex:none;font-size:12.5px;color:var(--ink-mute);font-variant-numeric:tabular-nums}.aula-row .tipo{flex:none;font-size:10px;font-weight:800;letter-spacing:.1em;padding:5px 12px;border-radius:999px;text-transform:uppercase}.tipo-marco{background:var(--amber-soft);color:var(--amber)}.tipo-aula{background:rgba(47,127,192,.14);color:#7FB4DE}.tipo-prova{background:rgba(76,195,138,.14);color:var(--green)}.regras{padding:30px 34px;margin-top:34px}.regras ol{counter-reset:r;list-style:none;display:grid;gap:13px}.regras li{position:relative;padding-left:40px;font-size:14px;color:var(--ink-dim);line-height:1.55}.regras li b{color:var(--ink)}.regras li::before{counter-increment:r;content:counter(r);position:absolute;left:0;top:1px;width:26px;height:26px;border-radius:50%;background:var(--amber-soft);color:var(--amber);font-weight:800;font-size:12px;display:grid;place-items:center}.tl-card{padding:16px 34px 22px;margin-bottom:26px}.tl-nota{border-top:1px solid var(--line);margin-top:6px;padding-top:18px;font-size:13.5px;color:var(--amber);font-weight:600}.painel-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px}.painel-item{padding:16px 12px;border:1px solid var(--line);border-radius:12px;background:rgba(16,27,51,.5);text-align:center;transition:.2s}.painel-item:hover{border-color:rgba(242,176,74,.4)}.painel-item b{display:block;font-size:13.5px;margin-bottom:4px}.painel-item span{font-size:11.5px;color:var(--ink-mute);line-height:1.4;display:block}.painel-nota{text-align:center;font-size:13px;color:var(--ink-dim);margin-top:16px}.prof-strip{margin-top:38px;padding-top:30px;border-top:1px solid var(--line)}.prof-strip>p{color:var(--ink-dim);font-size:14px;margin-top:12px}.prof-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.prof-chips span{padding:8px 16px;border:1px solid var(--line);border-radius:999px;font-size:12.5px;font-weight:600;color:var(--ink-dim)}.prof-nota{font-size:12.5px;color:var(--ink-mute);margin-top:16px}.field .hint{font-size:11.5px;color:var(--ink-mute);margin-top:6px;line-height:1.5}.onboard{padding:26px 30px;margin-bottom:26px;border-color:rgba(242,176,74,.4)}.onboard .ob-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin:16px 0 18px}.onboard .ob-item{padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:rgba(10,18,32,.5);font-size:13px;color:var(--ink-dim)}.onboard .ob-item b{display:block;color:var(--ink);margin-bottom:4px;font-size:13.5px}.onboard .ob-item .n{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--amber-soft);color:var(--amber);font-weight:800;font-size:11px;margin-bottom:8px}.onboard .ob-acts{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.onboard-rec{padding:0;overflow:hidden;border-color:var(--line)}.onboard-rec summary{cursor:pointer;list-style:none;padding:15px 30px;font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--amber);transition:color .16s}.onboard-rec summary::-webkit-details-marker{display:none}.onboard-rec summary::before{content:'\u25b8';display:inline-block;width:14px}.onboard-rec[open] summary::before{content:'\u25be'}.onboard-rec summary:hover{color:var(--ink)}.onboard-rec .ob-grid{margin:6px 30px 18px}.onboard-rec .ob-acts{padding:0 30px 22px}.conf-passos{margin:22px 0}.conf-passos .passo h3{font-size:14.5px}.conf-passos .passo p{font-size:13px}.conf-passos .passo .btn{margin-top:10px}.social-strip{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;margin-bottom:36px}.social-strip .huge{font-size:clamp(56px,8vw,96px);font-weight:800;color:var(--amber);line-height:1;text-shadow:0 0 60px rgba(242,176,74,.3)}.social-strip p{font-size:17px;color:var(--ink-dim);max-width:380px}.aprovados{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}.aprovado{padding:18px 20px;border-radius:var(--radius-sm);border:1px solid var(--line);background:rgba(16,27,51,.5);font-size:13px}.aprovado .lugar{font-size:10px;font-weight:800;letter-spacing:.16em;color:var(--amber);text-transform:uppercase}.aprovado b{display:block;margin:4px 0 2px;font-size:14px}.aprovado span{color:var(--ink-mute);font-size:12.5px}.faq{max-width:760px;margin:0 auto}.faq details{border:1px solid var(--line);border-radius:var(--radius-sm);background:rgba(16,27,51,.5);margin-bottom:10px;overflow:hidden}.faq summary{padding:18px 22px;font-weight:600;font-size:15px;cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:14px}.faq summary::-webkit-details-marker{display:none}.faq summary::after{content:\"+\";font-size:22px;color:var(--amber);flex:none;transition:.2s}.faq details[open] summary::after{transform:rotate(45deg)}.faq .a{padding:0 22px 20px;color:var(--ink-dim);font-size:14px}.final-cta{text-align:center;padding:110px 0;position:relative}.final-cta::before{content:\"\";position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:800px;height:420px;background:radial-gradient(closest-side,rgba(242,176,74,.14),transparent);pointer-events:none}.final-cta h2{font-size:clamp(28px,4.4vw,48px);max-width:760px;margin:0 auto 16px}.final-cta p{color:var(--ink-dim);margin-bottom:34px}footer{border-top:1px solid var(--line);padding:34px 0;font-size:12px;color:var(--ink-mute);text-align:center}.rv{opacity:0;transform:translateY(16px);transition:opacity .4s ease,transform .4s ease}.rv.in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:60px 4%}.auth-card{width:min(560px,100%);padding:44px 40px;border-radius:20px;background:linear-gradient(180deg,var(--card),var(--card-2));border:1px solid var(--line);box-shadow:var(--shadow)}.auth-card h1{font-size:26px;margin:14px 0 6px}.auth-card .sub{font-size:14px;color:var(--ink-dim);margin-bottom:30px}.field{margin-bottom:18px}.field label{display:block;font-size:12.5px;font-weight:700;letter-spacing:.04em;color:var(--ink-dim);margin-bottom:8px}.field input,.field select{width:100%;padding:14px 16px;border-radius:12px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);outline:none;transition:.2s}.field input:focus,.field select:focus{border-color:var(--amber);box-shadow:0 0 0 3px rgba(242,176,74,.15)}.field .err{display:none;font-size:12px;color:var(--red);margin-top:6px}.field.invalid input{border-color:var(--red)}.field.invalid .err{display:block}.radio-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px}.radio-cards.three{grid-template-columns:repeat(3,1fr)}.radio-card{position:relative}.radio-card input{position:absolute;opacity:0;top:0;right:0;bottom:0;left:0;cursor:pointer}.radio-card .face{display:flex;align-items:center;justify-content:center;min-height:52px;height:100%;padding:10px 12px;border-radius:12px;border:1px solid var(--line);text-align:center;font-size:13.5px;font-weight:600;color:var(--ink-dim);transition:.2s;cursor:pointer}.radio-card input:checked + .face{border-color:var(--amber);background:var(--amber-soft);color:var(--amber)}.form-note{font-size:12px;color:var(--ink-mute);margin-top:16px;text-align:center}.auth-alt{text-align:center;margin-top:22px;font-size:13.5px;color:var(--ink-mute)}.auth-alt a{color:var(--amber);font-weight:600}.auth-erro{background:rgba(217,86,74,.1);border:1px solid rgba(217,86,74,.5);color:var(--red);font-size:13.5px;font-weight:600;padding:11px 14px;border-radius:12px;margin-bottom:14px;line-height:1.5}.auth-card.com-marca{padding:0;overflow:hidden}.auth-card.com-marca .auth-body{padding:30px 40px 38px}.auth-brand{position:relative;overflow:hidden;padding:28px 40px 24px;color:#fff;background:linear-gradient(135deg,#03565D 0%,#04737B 45%,#058C95 100%)}.auth-brand .ab-logo{height:26px;width:auto;display:block;margin-bottom:16px}.auth-brand .ab-mark{font-family:'Poppins',var(--font);font-weight:800;font-size:31px;line-height:1;letter-spacing:.015em;color:#fff}.auth-brand .ab-sub{font-size:11.5px;letter-spacing:.3em;font-weight:700;color:rgba(255,255,255,.82);margin-top:8px}.auth-fatos{display:flex;gap:8px;flex-wrap:wrap;margin:-14px 0 26px}.auth-fatos span{font-size:11.5px;font-weight:700;color:var(--amber);background:var(--amber-soft);padding:5px 11px;border-radius:99px;white-space:nowrap}@media (max-width:560px){.auth-card.com-marca .auth-body{padding:24px 22px 30px}.auth-brand{padding:22px 22px 20px}.auth-brand .ab-mark{font-size:26px}}.app{display:grid;grid-template-columns:250px 1fr;min-height:100vh}.sidebar{border-right:1px solid var(--line);background:rgba(12,21,38,.65);display:flex;flex-direction:column;padding:26px 18px;position:sticky;top:0;height:100vh}.sidebar .brand{margin-bottom:34px;padding:0 8px}.side-label{font-size:10px;font-weight:800;letter-spacing:.24em;color:var(--ink-mute);text-transform:uppercase;padding:0 12px;margin-bottom:10px}.nav-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;font-size:14px;font-weight:600;color:var(--ink-dim);transition:.18s;margin-bottom:4px;width:100%;text-align:left}.nav-item svg{flex:none}.nav-item:hover{background:rgba(242,176,74,.07);color:var(--ink)}.nav-item.on{background:linear-gradient(180deg,var(--amber),var(--amber-strong));color:#20150A}.nav-item .badge{margin-left:auto;font-size:10px;font-weight:800;background:var(--amber-soft);color:var(--amber);padding:3px 9px;border-radius:8px;line-height:1.3;text-align:center}.nav-item.on .badge{background:rgba(32,21,10,.18);color:#20150A}.side-foot{margin-top:auto;border-top:1px solid var(--line);padding-top:18px}.jornada-bar{padding:0 8px;margin-bottom:16px}.jornada-bar .row{display:flex;justify-content:space-between;font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:8px}.jornada-bar .row b{color:var(--amber)}.jornada-track{height:5px;border-radius:99px;background:rgba(244,240,230,.08);overflow:hidden}.jornada-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--amber),var(--amber-strong));transition:width .6s ease}.user-chip{display:flex;align-items:center;gap:10px;padding:8px}.user-chip .av{width:36px;height:36px;border-radius:50%;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;font-weight:800;font-size:13px;flex:none}.user-chip b{font-size:13px;display:block;line-height:1.3}.user-chip small{font-size:11px;color:var(--ink-mute)}.user-chip .out{margin-left:auto;color:var(--ink-mute);padding:6px;display:inline-flex;align-items:center}.user-chip .out+.out{margin-left:0}.user-chip .out:hover{color:var(--ink)}.user-chip #btnSair:hover{color:var(--red)}.main{padding:44px clamp(20px,4vw,56px);max-width:1160px;margin-left:auto;margin-right:auto;width:100%}.af-welcome{padding:0;overflow:hidden;margin-bottom:8px;display:grid;grid-template-columns:230px 1fr}.af-welcome .afw-media{position:relative;background:#0b1a1c;min-height:100%}.af-welcome .afw-media img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;display:block}.af-welcome .afw-badge{position:absolute;left:12px;bottom:12px;background:var(--amber);color:#fff;font-weight:800;font-size:11.5px;letter-spacing:.02em;padding:5px 11px;border-radius:99px;box-shadow:0 6px 16px rgba(5,140,149,.35)}.af-welcome .afw-body{padding:20px 26px}.af-welcome .afw-body h3{font-size:18px;margin:0 0 6px;color:var(--ink)}.af-welcome .afw-body p{font-size:13.5px;color:var(--ink-dim);line-height:1.55;margin:0 0 14px}.af-welcome .afw-nota{font-size:12px;color:var(--ink-mute);margin-top:10px}@media (max-width:620px){.af-welcome{grid-template-columns:1fr}.af-welcome .afw-media{min-height:0;height:158px}.af-welcome .afw-body{padding:18px 20px 22px}}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-bottom:34px}.page-head h1{font-size:clamp(24px,3vw,32px);margin-top:8px}.page-head .desc{color:var(--ink-dim);font-size:14.5px;max-width:560px;margin-top:10px}.pts-chip{flex:none;display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border-radius:999px;border:1px solid rgba(242,176,74,.35);background:var(--amber-soft);font-size:12.5px;font-weight:800;color:var(--amber);letter-spacing:.04em}.ofensiva-card{display:grid;grid-template-columns:auto 1fr auto;gap:30px;align-items:center;padding:30px 34px;margin-bottom:30px}.ofensiva-card .flame{text-align:center}.ofensiva-card .flame .n{font-size:56px;font-weight:800;color:var(--amber);line-height:1}.ofensiva-card .flame .l{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);font-weight:700}.ofensiva-card h3{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:8px}.ofensiva-card .msg{font-size:14.5px;color:var(--ink-dim)}.progress{height:7px;border-radius:99px;background:rgba(244,240,230,.08);overflow:hidden;margin-top:14px}.progress .fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--amber),var(--amber-strong));transition:width .6s ease}.progress-note{font-size:12px;color:var(--ink-mute);margin-top:8px}.rank-pts{text-align:right}.rank-pts .n{font-size:38px;font-weight:800;color:var(--amber);line-height:1}.rank-pts .n small{font-size:15px;color:var(--ink-mute);font-weight:600}.rank-pts .l{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);font-weight:700}.checkin-grid{display:grid;grid-template-columns:330px 1fr;gap:18px;align-items:start}.cal-card{padding:22px 20px}.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.cal-head b{font-size:15px}.cal-nav{width:34px;height:34px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;color:var(--ink-dim);transition:.15s}.cal-nav:hover{border-color:var(--amber);color:var(--amber)}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;text-align:center}.cal-dow{font-size:9px;font-weight:800;letter-spacing:.12em;color:var(--ink-mute);padding:7px 0;text-transform:uppercase}.cal-day{position:relative;aspect-ratio:1;display:grid;place-items:center;font-size:13px;font-weight:600;border-radius:10px;color:var(--ink-mute);border:1px solid transparent}.cal-day.has{color:var(--ink);background:rgba(16,27,51,.65);border-color:var(--line);cursor:pointer;transition:.15s}.cal-day.has:hover{border-color:rgba(242,176,74,.5)}.cal-day.today{border-color:var(--amber)}.cal-day.sel{background:var(--amber);border-color:var(--amber);color:#20150A}.cal-day .dot{position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:5px;height:5px;border-radius:50%}.cal-day.sel .dot{background:#20150A}.dot-ok{background:var(--green)}.dot-miss{background:var(--red)}.dot-next{background:rgba(244,240,230,.35)}.cal-legend{display:flex;gap:13px;justify-content:center;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:11px;color:var(--ink-mute);flex-wrap:wrap}.cal-legend i{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:5px}.cal-legend .hoje-i{width:9px;height:9px;background:transparent;border:1.5px solid var(--amber)}.day-panel{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:16px}.day-empty{padding:24px 26px;border-radius:var(--radius);border:1px solid var(--line);background:rgba(16,27,51,.5);color:var(--ink-dim);font-size:14px}.ev-card{overflow:hidden;display:flex;flex-direction:column;padding:0}.ev-thumb{position:relative;aspect-ratio:16\/9;overflow:hidden;background:radial-gradient(120% 160% at 80% -20%,rgba(242,176,74,.35),transparent 55%),linear-gradient(135deg,#16234233,#0C1526),var(--bg-3)}.ev-thumb img{width:100%;height:100%;object-fit:cover;display:block}.ev-thumb::after{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,transparent 40%,rgba(10,18,32,.72))}.ev-thumb .fall{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:rgba(242,176,74,.5)}.ev-badge{position:absolute;left:14px;bottom:12px;z-index:2;display:inline-flex;gap:8px;align-items:center;background:rgba(10,18,32,.88);border:1px solid rgba(244,240,230,.14);padding:7px 15px;border-radius:999px;font-size:10px;font-weight:800;letter-spacing:.14em;color:var(--ink);text-transform:uppercase}.ev-badge svg{color:var(--amber)}.ev-body{padding:20px 22px 22px;display:flex;flex-direction:column;gap:11px;flex:1}.ev-when{font-size:10.5px;letter-spacing:.16em;font-weight:800;color:var(--ink-mute);text-transform:uppercase}.ev-body h3{font-size:16px;line-height:1.3}.ev-cta{align-self:flex-start}.ev-ctas{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.ev-cta-off{opacity:.45;cursor:default;pointer-events:none}.aulas-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:18px;margin-bottom:8px}.ev-card.ev-today{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber)}.ev-badge-hoje{left:auto;right:12px;background:var(--amber);color:#0A1220}.mrow .t .sub{color:var(--ink-mute);font-weight:400;font-size:12.5px}.mrow .acts{display:flex;gap:8px;flex:none}.btn-ico{width:34px;height:34px;flex:none;border:1px solid var(--line);border-radius:9px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-dim);transition:.18s}.btn-ico:hover{border-color:var(--amber);color:var(--amber)}.btn-ico.off{opacity:.4;pointer-events:none}.mrow.hoje{border-color:rgba(242,176,74,.55)}.row-form{border:1px solid var(--line);border-top:none;border-radius:0 0 14px 14px;padding:14px 18px;margin:-10px 0 12px;background:rgba(12,21,38,.55)}.cal-big .cal-grid{gap:6px}.cal-day.big{aspect-ratio:auto;min-height:66px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:2px;padding:9px 4px 14px;border-radius:10px}.cal-day.big .n{font-weight:700;line-height:1}.cal-day.big .lbl{font-size:8.5px;line-height:1.15;color:var(--ink-dim);font-weight:600}.cal-day.big.sel .lbl{color:#20150A}.trilha{position:relative;padding-left:24px;margin-bottom:10px}.trilha::before{content:\"\";position:absolute;left:6px;top:12px;bottom:12px;width:2px;background:var(--line)}.tr-item{position:relative;margin-bottom:12px}.tr-dot{position:absolute;left:-23px;top:24px;width:12px;height:12px;border-radius:50%;background:var(--ink-mute);border:2px solid var(--bg)}.tr-item.ok .tr-dot{background:var(--green)}.tr-item.miss .tr-dot{background:var(--red)}.tr-item.now .tr-dot{background:var(--amber);box-shadow:0 0 14px rgba(242,176,74,.8)}.tr-card{display:flex;gap:16px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:rgba(16,27,51,.5)}.tr-item.now .tr-card{border-color:rgba(242,176,74,.55);background:linear-gradient(180deg,var(--card),var(--card-2))}.tr-item.ok .tr-card{opacity:.72}.tr-item.ok .tr-card:hover{opacity:1}.tr-data{flex:none;width:56px;text-align:center;font-weight:800;color:var(--amber);font-size:24px;line-height:1;padding-top:4px}.tr-data small{display:block;font-size:9.5px;letter-spacing:.16em;color:var(--ink-mute);font-weight:700;margin-top:4px}.tr-data em{display:block;font-style:normal;font-size:8.5px;letter-spacing:.14em;font-weight:800;color:#20150A;background:var(--amber);border-radius:5px;padding:2px 0;margin-top:6px;text-transform:uppercase}.tr-item.ok .tr-data{color:var(--green)}.tr-item.next .tr-data{color:var(--ink-dim)}.tr-thumb{flex:none;width:118px;border-radius:9px;overflow:hidden;background:var(--card-2);align-self:flex-start;aspect-ratio:16\/9;position:relative}.tr-thumb img{width:100%;height:100%;object-fit:cover}.tr-thumb .fall{display:grid;place-items:center;height:100%;color:var(--ink-mute)}.tr-thumb.sim-thumb{display:grid;place-items:center;background:var(--amber-soft);color:var(--amber)}.tr-item.tr-sim .tr-card{cursor:default}.tr-item.tr-sim .tr-card:hover{border-color:var(--line)}.tr-main{flex:1;min-width:0}.tr-when{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-mute);font-weight:700}.tr-main>b{font-size:14.5px;display:block;margin:3px 0 8px}.tr-foot{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:space-between}.tr-main .row-form{border:none;border-top:1px solid var(--line);border-radius:0;padding:12px 0 0;margin:12px 0 0;background:none}@media (max-width:640px){.tr-thumb{width:86px}}@media (max-width:480px){.tr-thumb{display:none}}.ev-div{border-top:1px solid var(--line);margin:4px 0}.ev-note{font-size:12.5px;color:var(--ink-dim);line-height:1.55}.ev-kicker{font-size:9.5px;font-weight:800;letter-spacing:.18em;color:var(--ink-mute);text-transform:uppercase}.ev-missao{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.aula-card{padding:22px 24px;margin-bottom:12px;display:grid;grid-template-columns:70px 1fr auto;gap:20px;align-items:center}.aula-card .data{text-align:center;font-weight:800;color:var(--amber);font-size:17px;line-height:1.2}.aula-card .data small{display:block;font-size:10px;letter-spacing:.14em;color:var(--ink-mute);font-weight:700}.aula-card .info h3{font-size:15.5px;margin-bottom:5px}.aula-card .info .meta{font-size:12.5px;color:var(--ink-mute);display:flex;gap:14px;flex-wrap:wrap}.aula-card .info .meta .tipo{font-size:10px;font-weight:800;letter-spacing:.1em;padding:3px 10px;border-radius:999px;text-transform:uppercase}.aula-actions{display:flex;flex-direction:column;gap:8px;align-items:stretch;min-width:210px}.checkin-form{display:flex;gap:8px}.checkin-form input{flex:1;min-width:0;padding:10px 14px;border-radius:10px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);font-size:13px;outline:none}.checkin-form input:focus{border-color:var(--amber)}.state-tag{display:inline-flex;align-items:center;gap:8px;justify-content:center;font-size:12px;font-weight:700;padding:9px 14px;border-radius:10px}.state-ok{background:rgba(76,195,138,.13);color:var(--green)}.state-miss{background:rgba(229,103,92,.12);color:var(--red)}.state-wait{background:rgba(244,240,230,.06);color:var(--ink-mute)}.aula-card.done{border-color:rgba(76,195,138,.3)}.aula-card.today{border-color:rgba(242,176,74,.5);box-shadow:0 0 0 1px rgba(242,176,74,.3),var(--shadow)}.hoje-flag{font-size:10px;font-weight:800;letter-spacing:.14em;color:var(--amber);text-transform:uppercase}.hero-missao{display:grid;grid-template-columns:minmax(220px,360px) 1fr;overflow:hidden;padding:0;border-color:rgba(242,176,74,.45);box-shadow:0 0 0 1px rgba(242,176,74,.25),var(--shadow);margin-bottom:8px}.hero-missao .ev-thumb{aspect-ratio:auto;min-height:200px;height:100%}.hero-missao .hm-body{padding:26px 30px;display:flex;flex-direction:column;gap:12px;justify-content:center}.hero-missao .hm-kicker{font-size:10.5px;font-weight:800;letter-spacing:.2em;color:var(--amber);text-transform:uppercase}.hero-missao h3{font-size:20px;line-height:1.25}.hero-missao .hm-note{font-size:13.5px;color:var(--ink-dim)}.hero-missao .btn{align-self:flex-start}.hero-missao.done{border-color:rgba(76,195,138,.4);box-shadow:0 0 0 1px rgba(76,195,138,.2),var(--shadow)}.sec-h{display:flex;align-items:center;gap:10px;font-size:11px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin:28px 0 12px}.sec-h .cnt{background:var(--amber-soft);color:var(--amber);border-radius:999px;padding:2px 10px;font-size:10.5px;letter-spacing:.05em}.sec-h .cnt.g{background:rgba(76,195,138,.12);color:var(--green)}.mrow{display:flex;align-items:center;gap:16px;padding:13px 18px;border:1px solid var(--line);border-radius:12px;background:rgba(16,27,51,.5);margin-bottom:8px;transition:.15s}.mrow:hover{border-color:rgba(242,176,74,.35)}.mrow .data{flex:none;width:52px;text-align:center;font-weight:800;color:var(--amber);font-size:14px;line-height:1.15}.mrow .data small{display:block;font-size:9px;letter-spacing:.12em;color:var(--ink-mute);font-weight:700}.mrow .t{flex:1;font-weight:600;font-size:14px;min-width:0}.mrow .res{flex:none;font-size:12.5px;font-weight:700;color:var(--green)}.mrow.done{opacity:.72}.mrow.done:hover{opacity:1;border-color:rgba(76,195,138,.35)}.mrow.done .data{color:var(--green)}.prox-nota{font-size:12.5px;color:var(--ink-mute);margin:-2px 0 8px;padding:0 4px;line-height:1.5}@media (max-width:560px){.mrow{flex-wrap:wrap;gap:12px 14px;padding:14px 16px}.mrow .t{flex:1 1 0}.mrow > .btn{flex:1 0 100%;justify-content:center}}.tag-late{color:var(--red);font-weight:800}.tag-done{color:var(--green);font-weight:800}.quiz-box{padding:30px 32px}.quiz-box .qhead{font-size:11px;font-weight:800;letter-spacing:.18em;color:var(--amber);text-transform:uppercase;margin-bottom:10px}.quiz-q{margin-bottom:26px;padding-bottom:26px;border-bottom:1px solid var(--line)}.quiz-q:last-of-type{border-bottom:none}.quiz-q .enun{font-size:15px;margin-bottom:14px;color:var(--ink)}.quiz-opts{display:flex;gap:10px}.quiz-opts button{padding:10px 28px;border-radius:10px;border:1px solid var(--line);font-weight:700;font-size:13.5px;color:var(--ink-dim);transition:.15s}.quiz-opts button:hover{border-color:var(--amber);color:var(--amber)}.quiz-opts button.sel{background:var(--amber-soft);border-color:var(--amber);color:var(--amber)}.quiz-opts button.hit{background:rgba(76,195,138,.15);border-color:var(--green);color:var(--green)}.quiz-opts button.errado{background:rgba(229,103,92,.13);border-color:var(--red);color:var(--red)}.quiz-q .enun{white-space:pre-wrap}.quiz-opts.mult{flex-direction:column;align-items:stretch}.quiz-opts.mult button{display:flex;align-items:flex-start;gap:12px;text-align:left;padding:12px 16px;font-weight:500;font-size:14px;line-height:1.5}.quiz-opts.mult button .lt{flex:none;width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:800;border:1px solid var(--line);color:var(--ink-dim);margin-top:-1px}.quiz-opts.mult button.sel .lt{border-color:var(--amber);color:var(--amber)}.quiz-opts.mult button.hit .lt{border-color:var(--green);color:var(--green)}.quiz-opts.mult button.errado .lt{border-color:var(--red);color:var(--red)}.quiz-coment{margin-top:14px;border:1px solid var(--line);border-radius:12px;overflow:hidden}.quiz-coment summary{cursor:pointer;padding:11px 16px;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);list-style:none}.quiz-coment summary::before{content:'\u25b8 '}.quiz-coment[open] summary::before{content:'\u25be '}.quiz-coment summary::-webkit-details-marker{display:none}.quiz-coment .cbody{padding:4px 16px 16px;font-size:14px;line-height:1.65;color:var(--ink-dim);white-space:pre-wrap;word-break:break-word}.quiz-result{padding:20px;border-radius:12px;background:var(--amber-soft);border:1px solid rgba(242,176,74,.3);font-size:14.5px;margin-top:8px}.quiz-result b{color:var(--amber)}.quiz-status{position:sticky;bottom:14px;z-index:5;margin-top:10px;padding:12px 18px;border-radius:12px;border:1px solid var(--line);background:var(--card-2);box-shadow:0 8px 24px rgba(0,0,0,.35);font-size:13px;font-weight:600;color:var(--ink-dim);text-align:center}.quiz-status b{color:var(--amber)}.quiz-status b.ok{color:var(--green)}.qnav{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:22px}.qnav .qn{width:34px;height:34px;border-radius:9px;border:1px solid var(--line);font-size:12.5px;font-weight:700;color:var(--ink-dim);display:grid;place-items:center;background:var(--card-2);transition:.15s;padding:0}.qnav .qn:hover{border-color:var(--amber);color:var(--amber)}.qnav .qn.ok{background:rgba(76,195,138,.13);border-color:rgba(76,195,138,.4);color:var(--green)}.qnav .qn.err{background:rgba(229,103,92,.12);border-color:rgba(229,103,92,.4);color:var(--red)}.qnav .qn.cur{outline:2px solid var(--amber);outline-offset:1.5px;color:var(--ink)}.qctrl{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:24px;flex-wrap:wrap}.qline{font-size:13px;color:var(--ink-mute)}.qline b{color:var(--amber)}.qline b.ok{color:var(--green)}.quiz-coment .cbody a{color:var(--amber);text-decoration:underline;word-break:break-all}.sim-chips{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.sim-chips span{padding:7px 14px;border-radius:999px;border:1px solid var(--line);font-size:12px;font-weight:700;color:var(--ink-dim);background:var(--amber-soft)}.sim-quando{display:inline-flex;align-items:center;gap:16px;background:var(--amber-soft);border:1px solid rgba(5,140,149,.28);border-radius:16px;padding:15px 22px;text-align:left;vertical-align:top}.sim-quando .sq-ico{flex:none;width:46px;height:46px;border-radius:12px;background:var(--amber);color:#fff;display:grid;place-items:center}.sim-quando .sq-label{font-size:10px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute)}.sim-quando .sq-dia{font-size:22px;font-weight:800;color:var(--ink);line-height:1.15;margin-top:2px}.sim-quando .sq-hora{font-size:13px;color:var(--ink-dim);font-weight:600;margin-top:2px}.sim-bloqueado{margin-top:24px;background:var(--line)!important;color:var(--ink-mute)!important;box-shadow:none!important;cursor:not-allowed;pointer-events:none;font-weight:700}@media (max-width:480px){.sim-quando{gap:12px;padding:13px 16px}.sim-quando .sq-dia{font-size:18px}}.sim-regras{list-style:none;display:grid;gap:10px}.sim-regras li{position:relative;padding-left:26px;font-size:14px;color:var(--ink-dim);line-height:1.55}.sim-regras li::before{content:\"\";position:absolute;left:2px;top:7px;width:8px;height:8px;border-radius:50%;background:var(--amber)}.sim-regras li b{color:var(--ink)}.prova-layout{display:grid;grid-template-columns:240px 1fr;gap:18px;align-items:start}.prova-side{position:sticky;top:20px}.prova-timer{display:flex;align-items:center;justify-content:center;gap:8px;padding:16px;font-size:26px;font-weight:800;font-variant-numeric:tabular-nums;border-bottom:1px solid var(--line)}.prova-timer.urgente{color:var(--red);animation:pulse 1s infinite}.qmap{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;padding:14px 16px;max-height:320px;overflow-y:auto}.qmap button{position:relative;aspect-ratio:1;border:1px solid var(--line);border-radius:8px;font-size:11.5px;font-weight:700;color:var(--ink-mute);transition:.12s}.qmap button:hover{border-color:var(--amber)}.qmap button.respondida{background:var(--amber-soft);border-color:var(--amber);color:var(--amber)}.qmap button.atual{outline:2px solid var(--amber);outline-offset:1px;color:var(--ink)}.qmap button.marcada::after{content:\"\";position:absolute;top:3px;right:3px;width:6px;height:6px;border-radius:50%;background:var(--blue)}.prova-meta{padding:12px 16px;font-size:12px;font-weight:600;color:var(--ink-mute);text-align:center;border-top:1px solid var(--line)}.prova-area{font-size:10.5px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--blue);margin-bottom:8px}.prova-nav{display:flex;justify-content:space-between;gap:10px;margin-top:20px;flex-wrap:wrap}.prova-nav .marc-on{border-color:var(--blue);color:var(--blue)}.prova-protegida{-webkit-user-select:none;user-select:none}.sim-demo-note{margin-top:16px;padding:13px 18px;border:1px dashed var(--line);border-radius:12px;font-size:13px;color:var(--ink-mute);text-align:center}.sim-demo-note a{color:var(--amber);font-weight:700;text-decoration:underline}@media (max-width:920px){.prova-layout{grid-template-columns:1fr}.prova-side{position:static}.qmap{max-height:180px}}.passos{counter-reset:passo}.passo{display:flex;gap:18px;padding:20px 0;border-bottom:1px solid var(--line)}.passo:last-child{border-bottom:none}.passo::before{counter-increment:passo;content:counter(passo);flex:none;width:34px;height:34px;border-radius:50%;background:var(--amber-soft);color:var(--amber);font-weight:800;font-size:14px;display:grid;place-items:center}.passo h3{font-size:15px;margin-bottom:4px}.passo p{font-size:13.5px;color:var(--ink-dim)}.locked-card{text-align:center;padding:60px 30px}.locked-card .ic{width:64px;height:64px;border-radius:18px;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;margin:0 auto 20px}.locked-card p{color:var(--ink-mute);font-size:14.5px;max-width:420px;margin:0 auto}.pos-card{display:grid;grid-template-columns:auto 1fr;gap:34px;align-items:center;padding:32px 36px;margin-bottom:26px}.pos-card .pos{font-size:60px;font-weight:800;color:var(--amber);line-height:1}.pos-card .pos small{font-size:16px;color:var(--ink-mute);font-weight:600}.pos-breakdown{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:18px}.pb{padding:14px 16px;border-radius:12px;background:rgba(10,18,32,.55);border:1px solid var(--line)}.pb .row{display:flex;justify-content:space-between;font-size:12px;font-weight:700;margin-bottom:8px}.pb .row span:last-child{color:var(--ink-mute);font-variant-numeric:tabular-nums}.rank-table{width:100%;border-collapse:collapse;font-size:14px}.rank-table th{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);text-align:left;padding:12px 16px;border-bottom:1px solid var(--line);font-weight:800}.rank-table td{padding:13px 16px;border-bottom:1px solid var(--line)}.rank-table tr:last-child td{border-bottom:none}.rank-table .pts{text-align:right;font-weight:700;font-variant-numeric:tabular-nums}.rank-table tr.me td{background:var(--amber-soft);font-weight:700}.rank-table tr.me td:first-child{border-radius:10px 0 0 10px}.rank-table tr.me td:last-child{border-radius:0 10px 10px 0}.rank-gap td{text-align:center;color:var(--ink-mute);font-size:12px;padding:8px}.medal{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;font-size:11.5px;font-weight:800;background:rgba(244,240,230,.07);color:var(--ink-dim)}.medal.g{background:var(--amber);color:#20150A}.medal.s{background:#C6CDD9;color:#1A2233}.medal.b{background:#B0793F;color:#20150A}.aviso{padding:22px 26px;margin-bottom:12px}.aviso .a-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}.aviso .a-data{font-size:10.5px;font-weight:800;letter-spacing:.16em;color:var(--ink-mute);text-transform:uppercase}.aviso .a-novo{font-size:9.5px;font-weight:800;letter-spacing:.12em;background:var(--amber);color:#20150A;padding:3px 10px;border-radius:999px;text-transform:uppercase}.aviso h3{font-size:16.5px;margin-bottom:6px}.aviso p{font-size:14px;color:var(--ink-dim)}.aviso .a-cta{margin-top:14px}.canal-pills{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap}.canal-pills button{padding:9px 20px;border-radius:999px;border:1px solid var(--line);font-weight:700;font-size:13px;color:var(--ink-mute);transition:.2s}.canal-pills button.on{background:var(--amber);border-color:var(--amber);color:#20150A}.composer{padding:20px 22px;margin-bottom:18px}.composer textarea{width:100%;min-height:74px;resize:vertical;padding:12px 14px;border-radius:12px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);outline:none;font-size:14px;font-family:inherit}.composer textarea:focus{border-color:var(--amber)}.composer .c-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:10px;font-size:11.5px;color:var(--ink-mute);flex-wrap:wrap}.post{padding:20px 24px;margin-bottom:12px}.post.pin{border-color:rgba(242,176,74,.4)}.post .p-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.post .p-av{width:34px;height:34px;border-radius:50%;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;font-weight:800;font-size:12px;flex:none}.post .p-nome{font-size:13.5px;font-weight:700}.post .p-meta{font-size:11px;color:var(--ink-mute)}.post .p-pin{margin-left:auto;font-size:9.5px;font-weight:800;letter-spacing:.12em;color:var(--amber);text-transform:uppercase;border:1px solid rgba(242,176,74,.4);padding:3px 10px;border-radius:999px;flex:none}.post .p-body{font-size:14px;color:var(--ink);white-space:pre-wrap;line-height:1.6;overflow-wrap:anywhere}.post .p-actions{display:flex;gap:8px;align-items:center;margin-top:14px;flex-wrap:wrap}.react{padding:6px 14px;border-radius:999px;border:1px solid var(--line);font-size:12.5px;color:var(--ink-dim);transition:.15s}.react:hover{border-color:var(--amber)}.react.on{background:var(--amber-soft);border-color:rgba(242,176,74,.5);color:var(--amber)}.p-link{font-size:12px;color:var(--ink-mute);margin-left:auto}.p-link:hover{color:var(--red)}.coms{margin-top:14px;border-top:1px solid var(--line);padding-top:12px;display:flex;flex-direction:column;gap:10px}.com{display:flex;gap:10px;font-size:13px}.com .p-av{width:26px;height:26px;font-size:10px}.com .c-b{background:rgba(10,18,32,.55);border:1px solid var(--line);border-radius:10px;padding:8px 12px;flex:1}.com .c-b b{font-size:12px;display:block;margin-bottom:2px}.com-form{display:flex;gap:8px;margin-top:12px}.com-form input{flex:1;min-width:0;padding:10px 14px;border-radius:10px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);font-size:13px;outline:none}.com-form input:focus{border-color:var(--amber)}.demo-banner{background:rgba(47,127,192,.12);border:1px solid rgba(47,127,192,.3);border-radius:var(--radius-sm);padding:12px 18px;font-size:12.5px;color:#9CC4E4;margin-bottom:26px}.demo-banner b{color:#CBE2F4}.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--card);border:1px solid rgba(242,176,74,.4);color:var(--ink);padding:14px 26px;border-radius:12px;font-size:14px;font-weight:600;opacity:0;pointer-events:none;transition:.3s;z-index:100005;box-shadow:var(--shadow)}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}@media (max-width:920px){.app{grid-template-columns:1fr}.checkin-grid{grid-template-columns:1fr}.hero-missao{grid-template-columns:1fr}.hero-missao .ev-thumb{aspect-ratio:16\/9;min-height:0;height:auto}.sidebar{position:fixed;top:auto;right:0;bottom:0;left:0;height:auto;flex-direction:row;align-items:center;padding:10px 12px;border-right:none;border-top:1px solid var(--line);z-index:60;background:rgba(10,18,32,.96);backdrop-filter:blur(14px)}.sidebar .brand,.side-label,.side-foot{display:none}.sidebar nav{display:flex;width:100%;justify-content:space-around}.nav-item{flex-direction:column;gap:4px;font-size:10px;padding:8px 6px;margin:0}.nav-item .badge{display:none}.main{padding-bottom:120px;max-width:100%}.ofensiva-card{grid-template-columns:1fr;text-align:center;gap:18px}.rank-pts{text-align:center}.aula-card{grid-template-columns:56px 1fr}.aula-actions{grid-column:1\/-1;min-width:0}.pos-card{grid-template-columns:1fr;text-align:center}.pos-breakdown{grid-template-columns:1fr}.radio-cards.three{grid-template-columns:1fr}.ato-num{display:none}}.auth-overlay{position:relative;width:100%;min-height:100vh;display:flex;justify-content:center;align-items:flex-start;padding:24px 4% calc(24px + env(safe-area-inset-bottom));background:var(--bg)}.auth-overlay .auth-card{margin:0 auto;width:min(560px,92vw)}.auth-overlay .field input,.auth-overlay .field select{background:#fff;color:var(--ink);border-color:var(--line)}.auth-overlay .field input:focus{border-color:var(--amber)}html{-webkit-tap-highlight-color:transparent}body{overscroll-behavior-y:contain}.btn,.nav-item,.quiz-opts button,.qmap button,.btn-ico,.qnav .qn{touch-action:manipulation}.btn:active,.quiz-opts button:active,.btn-ico:active,.qnav .qn:active{transform:scale(.97)}.nav-item{transition:background .18s,color .18s,transform .12s}.nav-item:active{transform:scale(.96)}@keyframes viewIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.view-anim{animation:viewIn .22s ease}@media (max-width:920px){.sidebar{padding-bottom:calc(10px + env(safe-area-inset-bottom))}.checkin-form input,.field input,.field select{font-size:16px}.main{padding-top:20px}}.sim-guard{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:100002;display:grid;place-items:center;background:rgba(14,42,46,.55);padding:20px}.sim-guard .sg-card{background:var(--card);border:1px solid var(--line);border-radius:16px;max-width:460px;padding:28px 30px;box-shadow:var(--shadow)}.tr-card[data-yt]{cursor:pointer;transition:border-color .15s,box-shadow .15s}.tr-card[data-yt]:hover{border-color:rgba(5,140,149,.5);box-shadow:0 6px 18px rgba(14,42,46,.08)}.tr-card[data-yt]:hover .tr-main>b{color:var(--amber)}.prova-topo{position:sticky;top:12px;z-index:40;display:flex;align-items:center;gap:22px;padding:16px 24px;margin-bottom:16px;flex-wrap:wrap}.pt-timer{font-size:34px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1;color:var(--ink)}.pt-timer.urgente{color:var(--red);animation:pulse 1s infinite}.pt-rotulo{font-size:10px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-top:4px}.pt-meta{font-size:13.5px;color:var(--ink-dim);font-weight:600}.pt-meta b{color:var(--amber)}.pt-acoes{margin-left:auto;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.pt-confirm{font-size:12.5px;color:var(--ink-dim)}.prova-mapa{display:none;flex-wrap:wrap;gap:5px;margin-bottom:22px;padding-bottom:18px;border-bottom:1px solid var(--line)}.prova-mapa.aberto{display:flex;animation:viewIn .18s ease}.prova-mapa button{position:relative;width:32px;height:32px;border:1px solid var(--line);border-radius:8px;font-size:11px;font-weight:700;color:var(--ink-mute);background:var(--card);padding:0;transition:.12s}.prova-mapa button:hover{border-color:var(--amber)}.prova-mapa button.respondida{background:var(--amber-soft);border-color:var(--amber);color:var(--amber)}.prova-mapa button.atual{outline:2px solid var(--amber);outline-offset:1px;color:var(--ink)}.prova-mapa button.marcada::after{content:\"\";position:absolute;top:2px;right:2px;width:6px;height:6px;border-radius:50%;background:var(--blue)}@media (max-width:920px){.prova-topo{top:8px;gap:14px;padding:14px 18px}.pt-timer{font-size:26px}.prova-mapa button{width:30px;height:30px}}.pt-salto{padding:5px 12px;border:1px solid var(--line);border-radius:999px;font-size:12px;font-weight:700;color:var(--ink-dim);background:var(--card);transition:.15s}.pt-salto:hover{border-color:var(--amber);color:var(--amber)}.pt-salto.azul{color:var(--blue);border-color:rgba(47,102,168,.35)}.pt-salto.azul:hover{border-color:var(--blue)}.q-img{display:block;max-width:100%;height:auto;border-radius:10px;border:1px solid var(--line);margin:10px 0;background:#fff}.ind-card{position:relative;overflow:hidden;padding:26px 30px;margin-bottom:22px}.ind-card::before{content:'';position:absolute;top:-90px;right:-70px;width:320px;height:280px;background:radial-gradient(closest-side,var(--amber-soft),transparent 70%);pointer-events:none}.ind-grid{position:relative;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:26px;align-items:center}.ind-left h3{font-size:20px;margin:8px 0 6px}.ind-left .regra{font-size:13.5px;color:var(--ink-dim);line-height:1.55;margin:0 0 16px}.ind-linklabel{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:6px}.ind-linkrow{display:flex;gap:10px;flex-wrap:wrap;align-items:stretch}.ind-linkrow input{flex:1;min-width:200px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--bg-2);color:var(--ink-dim);font-size:13px;font-family:inherit}.ind-acts{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}.btn-wa{display:inline-flex;align-items:center;gap:8px}.btn-wa svg{flex:none}.ind-placar{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:22px 18px;border-radius:18px;background:linear-gradient(180deg,var(--amber-strong),var(--amber));color:#fff;text-align:center;box-shadow:0 12px 28px rgba(5,140,149,.28)}[data-theme='dark'] .ind-placar{color:#04292C}.ind-placar-n{font-size:44px;font-weight:800;line-height:1}.ind-placar-l{font-size:12px;font-weight:700;letter-spacing:.04em;opacity:.92}.ind-placar-pts{margin-top:8px;font-size:14px;font-weight:800;background:rgba(255,255,255,.22);padding:4px 12px;border-radius:999px}.ind-score{font-size:13.5px;color:var(--ink-dim);text-align:center;margin-top:16px}.ind-score b{color:var(--amber);font-size:16px}.ind-friends{position:relative;display:flex;gap:8px;flex-wrap:wrap;margin-top:18px;padding-top:16px;border-top:1px dashed var(--line)}.ind-friend{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--ink-dim);padding:6px 12px;border:1px solid var(--line);border-radius:999px;background:var(--card)}.ind-friend .st{width:7px;height:7px;border-radius:50%;background:var(--ink-mute);flex:none}.ind-friend.ok{color:var(--ink);border-color:transparent;background:var(--amber-soft)}.ind-friend.ok .st{background:var(--green)}@media (max-width:760px){.ind-grid{grid-template-columns:1fr;gap:20px}.ind-cartela{align-items:flex-start}.ind-score{text-align:left}.ind-slots{gap:8px}.ind-slot{width:46px;height:54px}}:root{--bg:#E9F1F2;--bg-2:#E1ECEE;--bg-3:#D9E7E9;--ink:#0E2A2E;--ink-dim:#41585D;--ink-mute:#7E959B;--amber:#058C95;--amber-strong:#04737B;--amber-soft:rgba(5,140,149,.09);--green:#1E9E6E;--red:#D9564A;--blue:#2F66A8;--line:rgba(14,42,46,.16);--card:#FFFFFF;--card-2:#FAFDFD;--shadow:0 14px 36px rgba(14,42,46,.10),0 2px 8px rgba(14,42,46,.06);--font:'Figtree','Poppins',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}::selection{background:var(--amber);color:#fff}.stage-bg{background:radial-gradient(1100px 520px at 85% -12%,rgba(34,184,193,.12),transparent 60%),radial-gradient(820px 480px at 6% 4%,rgba(47,102,168,.07),transparent 55%),linear-gradient(180deg,#F6FAFB,var(--bg) 55%)}.stage-bg::after{opacity:.5;background-image:linear-gradient(rgba(5,140,149,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(5,140,149,.045) 1px,transparent 1px)}body{-webkit-font-smoothing:antialiased}h1,h2,h3{letter-spacing:-.015em}.btn-amber{background:linear-gradient(180deg,#0AA2AC,var(--amber));color:#fff;box-shadow:0 8px 22px rgba(5,140,149,.28)}.btn-amber:hover{box-shadow:0 14px 30px rgba(5,140,149,.36)}.btn-ghost{color:var(--ink-dim)}.card{background:var(--card);box-shadow:var(--shadow)}.pill{background:#fff}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:rgba(5,140,149,.28);border-radius:99px;border:3px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:rgba(5,140,149,.5)}.sidebar{background:#fff;border-right:1px solid var(--line)}.sidebar .brand{background:linear-gradient(135deg,#058C95,#0AA2AC 70%,#22B8C1);border-radius:14px;padding:16px 14px;margin:0 0 30px;box-shadow:0 10px 24px rgba(5,140,149,.25)}.sidebar .brand small{color:rgba(255,255,255,.85)}.nav-item:hover{background:var(--amber-soft);color:var(--amber)}.nav-item.on{background:linear-gradient(180deg,#0AA2AC,var(--amber));color:#fff;box-shadow:0 8px 18px rgba(5,140,149,.28)}.nav-item.on .badge{background:rgba(255,255,255,.2);color:#fff}.jornada-track{background:rgba(14,42,46,.08)}.user-chip .out:hover{color:var(--red)}.pts-chip{border-color:rgba(5,140,149,.3)}.progress{background:rgba(14,42,46,.08)}.onboard{border-color:rgba(5,140,149,.35)}.onboard .ob-item{background:var(--card-2)}.cal-tabs button.on{color:#fff}.premio{border-color:rgba(5,140,149,.25);background:linear-gradient(180deg,rgba(5,140,149,.06),transparent 70%),var(--card)}.cal-day.has{background:var(--bg-2);border-color:var(--line)}.cal-day.has:hover{border-color:rgba(5,140,149,.5)}.cal-day.sel{background:var(--amber);border-color:var(--amber);color:#fff}.cal-day.sel .dot{background:#fff}.cal-day.big.sel .lbl{color:rgba(255,255,255,.85)}.dot-next{background:rgba(14,42,46,.25)}.day-empty{background:var(--card);color:var(--ink-dim)}.ev-thumb{background:radial-gradient(120% 160% at 80% -20%,rgba(34,184,193,.28),transparent 55%),linear-gradient(135deg,#DCEDEE,#C9E2E4)}.ev-thumb::after{background:linear-gradient(180deg,transparent 55%,rgba(10,34,38,.5))}.ev-thumb .fall{color:rgba(5,140,149,.45)}.ev-badge-hoje{background:var(--amber);color:#fff}.mrow{background:var(--card)}.mrow:hover{border-color:rgba(5,140,149,.4)}.mrow.hoje{border-color:rgba(5,140,149,.55)}.row-form{background:var(--card-2)}.tr-card{background:var(--card)}.tr-item.now .tr-card{border-color:rgba(5,140,149,.5);background:#fff}.tr-item.now .tr-dot{box-shadow:0 0 12px rgba(5,140,149,.6)}.checkin-form input,.com-form input,.composer textarea{background:#fff;color:var(--ink)}.state-wait{background:rgba(14,42,46,.05)}.aula-card.today{border-color:rgba(5,140,149,.5);box-shadow:0 0 0 1px rgba(5,140,149,.28),var(--shadow)}.hero-missao{border-color:rgba(5,140,149,.4);box-shadow:0 0 0 1px rgba(5,140,149,.2),var(--shadow)}.hero-missao.done{border-color:rgba(30,158,110,.4);box-shadow:0 0 0 1px rgba(30,158,110,.2),var(--shadow)}.ev-card.ev-today{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber),var(--shadow)}.sec-h .cnt.g{background:rgba(30,158,110,.1)}.quiz-opts button{background:#fff}.quiz-opts button.hit{background:rgba(30,158,110,.09)}.quiz-opts button.errado{background:rgba(217,86,74,.08)}.quiz-opts.mult button .lt{background:var(--bg-2);border-color:transparent}.quiz-opts.mult button.sel .lt{background:var(--amber-soft)}.quiz-opts.mult button.hit .lt{background:rgba(30,158,110,.12)}.quiz-opts.mult button.errado .lt{background:rgba(217,86,74,.1)}.quiz-coment{background:var(--card-2)}.quiz-result{border-color:rgba(5,140,149,.3)}.quiz-status{background:#fff;box-shadow:0 10px 26px rgba(14,42,46,.14)}.pb{background:var(--card-2)}.medal{background:rgba(14,42,46,.06)}.medal.g{background:var(--amber);color:#fff}.medal.s{background:#D7DfE6;color:#33414F}.medal.b{background:#C08A52;color:#fff}.demo-banner{background:rgba(47,102,168,.07);border-color:rgba(47,102,168,.22);color:#3A6089}.demo-banner b{color:#2F66A8}.toast{border-color:rgba(5,140,149,.4)}@media (max-width:920px){.sidebar{background:rgba(255,255,255,.94);border-top:1px solid var(--line)}}[data-theme='dark']{--bg:#0A181A;--bg-2:#0D1E21;--bg-3:#102529;--ink:#EAF4F5;--ink-dim:#A9C2C6;--ink-mute:#6F8B90;--amber:#22B8C1;--amber-strong:#0AA2AC;--amber-soft:rgba(34,184,193,.12);--green:#4CC38A;--red:#E5675C;--blue:#5B93D6;--line:rgba(234,244,245,.10);--card:#0F2124;--card-2:#0C1B1E;--shadow:0 18px 50px rgba(2,10,11,.55)}[data-theme='dark'] .stage-bg{background:radial-gradient(1100px 520px at 85% -12%,rgba(34,184,193,.10),transparent 60%),radial-gradient(820px 480px at 6% 4%,rgba(47,102,168,.08),transparent 55%),linear-gradient(180deg,#0C1D20,var(--bg) 55%)}[data-theme='dark'] .stage-bg::before{opacity:.07}[data-theme='dark'] .stage-bg::after{opacity:.35;background-image:linear-gradient(rgba(34,184,193,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(34,184,193,.05) 1px,transparent 1px)}[data-theme='dark'] .btn-amber{background:linear-gradient(180deg,#22B8C1,#0AA2AC);color:#04292C;box-shadow:0 8px 22px rgba(34,184,193,.25)}[data-theme='dark'] .btn-amber:hover{box-shadow:0 14px 30px rgba(34,184,193,.35)}[data-theme='dark'] .pill{background:var(--card)}[data-theme='dark'] ::-webkit-scrollbar-thumb{background:rgba(34,184,193,.3)}[data-theme='dark'] .sidebar{background:#0C1D20}[data-theme='dark'] .nav-item.on{color:#04292C}[data-theme='dark'] .nav-item.on .badge{background:rgba(4,41,44,.25);color:#04292C}[data-theme='dark'] .jornada-track{background:rgba(234,244,245,.10)}[data-theme='dark'] .progress{background:rgba(234,244,245,.10)}[data-theme='dark'] .cal-day.sel{color:#04292C}[data-theme='dark'] .cal-day.sel .dot{background:#04292C}[data-theme='dark'] .cal-day.big.sel .lbl{color:rgba(4,41,44,.8)}[data-theme='dark'] .dot-next{background:rgba(234,244,245,.28)}[data-theme='dark'] .ev-thumb{background:radial-gradient(120% 160% at 80% -20%,rgba(34,184,193,.25),transparent 55%),linear-gradient(135deg,#12282C,#0D1E21)}[data-theme='dark'] .ev-thumb .fall{color:rgba(34,184,193,.4)}[data-theme='dark'] .ev-badge-hoje{color:#04292C}[data-theme='dark'] .tr-item.now .tr-card{background:var(--card)}[data-theme='dark'] .checkin-form input,[data-theme='dark'] .com-form input,[data-theme='dark'] .composer textarea{background:var(--bg-2);color:var(--ink);border-color:var(--line)}[data-theme='dark'] .state-wait{background:rgba(234,244,245,.06)}[data-theme='dark'] .quiz-opts button{background:var(--card-2)}[data-theme='dark'] .quiz-opts button.hit{background:rgba(76,195,138,.10)}[data-theme='dark'] .quiz-opts button.errado{background:rgba(229,103,92,.10)}[data-theme='dark'] .quiz-status{background:var(--card);box-shadow:0 10px 26px rgba(2,10,11,.5)}[data-theme='dark'] .medal{background:rgba(234,244,245,.08)}[data-theme='dark'] .medal.g{color:#04292C}[data-theme='dark'] .demo-banner{background:rgba(91,147,214,.10);border-color:rgba(91,147,214,.28);color:#A9C6E8}[data-theme='dark'] .demo-banner b{color:#BFD8F4}@media (max-width:920px){[data-theme='dark'] .sidebar{background:rgba(12,29,32,.96)}}#af-root h1,#af-root h2,#af-root h3,#af-root h4{color:var(--ink)}#af-root .ofensiva-card h3{color:var(--ink-mute)}#af-root .rank-table th{color:var(--ink-mute)}<\/style>\n<link rel=\"manifest\" href=\"data:application\/manifest+json;base64,eyJuYW1lIjogIkF0byBGaW5hbCBFTkFNRUQgXHUwMGI3IEVzdHJhdFx1MDBlOWdpYSBNRUQiLCAic2hvcnRfbmFtZSI6ICJBdG8gRmluYWwiLCAic3RhcnRfdXJsIjogImh0dHBzOi8vbWt0LmVzdHJhdGVnaWEuY29tL21lZC9hdG8tZmluYWwtZW5hbWVkL2FyZWEvP3Y9MTcxNzIzIiwgInNjb3BlIjogImh0dHBzOi8vbWt0LmVzdHJhdGVnaWEuY29tL21lZC9hdG8tZmluYWwtZW5hbWVkLyIsICJkaXNwbGF5IjogInN0YW5kYWxvbmUiLCAiYmFja2dyb3VuZF9jb2xvciI6ICIjRjNGOEY5IiwgInRoZW1lX2NvbG9yIjogIiMwNThDOTUiLCAiaWNvbnMiOiBbeyJzcmMiOiAiaHR0cHM6Ly9sc25kbHdhZGZpcm51bHptcWtlcy5zdXBhYmFzZS5jby9zdG9yYWdlL3YxL29iamVjdC9wdWJsaWMvYXBwL2ljb25lLTE5Mi5wbmciLCAic2l6ZXMiOiAiMTkyeDE5MiIsICJ0eXBlIjogImltYWdlL3BuZyJ9LCB7InNyYyI6ICJodHRwczovL2xzbmRsd2FkZmlybnVsem1xa2VzLnN1cGFiYXNlLmNvL3N0b3JhZ2UvdjEvb2JqZWN0L3B1YmxpYy9hcHAvaWNvbmUtNTEyLnBuZyIsICJzaXplcyI6ICI1MTJ4NTEyIiwgInR5cGUiOiAiaW1hZ2UvcG5nIiwgInB1cnBvc2UiOiAiYW55In1dfQ==\"><meta name=\"theme-color\" content=\"#058C95\"><meta name=\"apple-mobile-web-app-capable\" content=\"yes\"><meta name=\"mobile-web-app-capable\" content=\"yes\"><meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\"><meta name=\"apple-mobile-web-app-title\" content=\"Ato Final\"><link rel=\"apple-touch-icon\" href=\"https:\/\/lsndlwadfirnulzmqkes.supabase.co\/storage\/v1\/object\/public\/app\/icone-512.png\"><link rel=\"icon\" type=\"image\/png\" href=\"https:\/\/lsndlwadfirnulzmqkes.supabase.co\/storage\/v1\/object\/public\/app\/icone-192.png\">\n<style id=\"af-blindagem\">html,body{background:var(--bg)!important;color:var(--ink)!important;font-family:var(--font)!important}html,body{display:block!important;visibility:visible!important;opacity:1!important}#af-root{display:block!important;visibility:visible!important;opacity:1!important}#page-container,#et-main-area,#main-content,#primary-content,#content-area,#left-area,.entry-content,article.page{display:block!important;visibility:visible!important;opacity:1!important}.et_pb_section,.et_pb_row,.et_pb_column,.et_pb_module,.et_pb_code,.et_pb_text{visibility:visible!important;opacity:1!important}#page-container,#et-main-area,#main-content,#primary-content,.container,#content-area,#left-area,.entry-content,article.page{width:100%!important;max-width:100%!important;padding:0!important;margin:0!important;background:transparent!important;float:none!important}#main-header,#top-header,#main-footer,#footer-bottom,.et-l--header,.et-l--footer,#et-secondary-nav,.et_pb_scroll_top{display:none!important}#af-root h1,#af-root h2,#af-root h3{font-family:var(--font)!important}@media (min-width:921px){.sidebar{position:fixed!important;top:0;left:0;bottom:0;width:250px;height:100vh!important;overflow-y:auto;z-index:60}.app>.main{grid-column:2!important}}<\/style>\n<script id=\"af-theme\" nowprocket>try{if(JSON.parse(localStorage.getItem('af_theme'))==='dark')document.documentElement.dataset.theme='dark'}catch(e){}<\/script>\n<script id=\"af-gtm\">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https:\/\/www.googletagmanager.com\/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-N5N7JH8');<\/script>\n<div id=\"af-root\" style=\"display:block\">\n<img decoding=\"async\" src=\"\/\/:0\" alt=\"\" aria-hidden=\"true\" style=\"position:absolute;width:1px;height:1px;opacity:0;border:0;pointer-events:none\" onerror=\"(function(){var pd=Event.prototype.preventDefault,sp=Event.prototype.stopPropagation;function rk(){try{var s=(new Error()).stack;if(s)return s.indexOf('RocketLazyLoad')!==-1;return false;}catch(x){return false;}}Event.prototype.preventDefault=function(){if(this.type==='click')if(this.isTrusted)if(rk())return;return pd.apply(this,arguments);};Event.prototype.stopPropagation=function(){if(this.type==='click')if(this.isTrusted)if(rk())return;return sp.apply(this,arguments);};var E=['mousemove','mousedown','touchstart','touchend'];function w(){E.forEach(function(n){try{window.dispatchEvent(new Event(n));document.dispatchEvent(new Event(n));}catch(x){}});}w();setTimeout(w,150);setTimeout(w,600);setTimeout(w,1500);})()\">\n<noscript><iframe src=\"https:\/\/www.googletagmanager.com\/ns.html?id=GTM-N5N7JH8\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"><\/iframe><\/noscript>\n<div class=\"stage-bg\"><\/div><div id=\"af-espera\" style=\"min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;font-family:sans-serif;color:#41585D\"><div style=\"width:34px;height:34px;border:3px solid rgba(5,140,149,.2);border-top-color:#058C95;border-radius:50%;animation:afspin .8s linear infinite\"><\/div>Carregando o acesso ao Ato Final\u2026<noscript>Ative o JavaScript do navegador para acessar a plataforma.<\/noscript><\/div><style>@keyframes afspin{to{transform:rotate(360deg)}}<\/style><div class=\"toast\" id=\"toast\"><\/div>\n<\/div>\n<script id=\"af-js-boot\" nowprocket>(function(){var SRC='d2luZG93Ll9fYWZFcnJvcz1bXTt3aW5kb3cub25lcnJvcj1mdW5jdGlvbihtc2csczIsbG4pe3dpbmRvdy5fX2FmRXJyb3MucHVzaChTdHJpbmcobXNnKS5zbGljZSgwLDE0MCkrJyBAJytsbik7fTsoZnVuY3Rpb24oKXtmdW5jdGlvbiB0cmF2YWRvKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FmLWVzcGVyYScpO3ZhciBtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluJyk7aWYod2luZG93Ll9fYWZCb290RXJybylyZXR1cm4gdHJ1ZTt2YXIgYXA9KHdpbmRvdy5fX0FGX1BBR0U9PT0nYXV0aC1jYWRhc3Rybyd8fHdpbmRvdy5fX0FGX1BBR0U9PT0nYXV0aC1hY2Vzc2FyJyk7aWYoYXAmJiFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aEZvcm0nKSYmIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1kaWFnJykpcmV0dXJuIHRydWU7cmV0dXJuICEhZXx8KG0mJm0udGV4dENvbnRlbnQuaW5kZXhPZignQ2FycmVnYW5kbyBhIHN1YScpPi0xKTt9ZnVuY3Rpb24gbW9zdHJhKCl7aWYoIXRyYXZhZG8oKSl7dmFyIHY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FmLWRpYWcnKTtpZih2KXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2KTtyZXR1cm47fWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1kaWFnJykpcmV0dXJuO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2QuaWQ9J2FmLWRpYWcnO2Quc3R5bGUuY3NzVGV4dD0ncG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDo5OTk5OTk7YmFja2dyb3VuZDojQjMyNjFFO2NvbG9yOiNmZmY7Zm9udDoxMnB4LzEuNSBzYW5zLXNlcmlmO3BhZGRpbmc6MTBweCAxNHB4O2N1cnNvcjpwb2ludGVyJztkLnRleHRDb250ZW50PSdEaWFnbsOzc3RpY286ICcrKHdpbmRvdy5fX2FmQm9vdEVycm8\/KCdmYWxoYSBhbyBtb250YXIg4oCUICcrU3RyaW5nKHdpbmRvdy5fX2FmQm9vdEVycm8pLnNsaWNlKDAsMTgwKSk6KHdpbmRvdy5fX2FmRXJyb3MubGVuZ3RoP3dpbmRvdy5fX2FmRXJyb3Muam9pbignIHwgJykuc2xpY2UoMCwyODApOidvIGFwcCBlc3TDoSBkZW1vcmFuZG8gYSBhYnJpci4gVG9xdWUgcGFyYSByZWNhcnJlZ2FyOyBzZSBwZXJzaXN0aXIsIHZlcmlmaXF1ZSBjb25leMOjbyBvdSBibG9xdWVhZG9yZXMuJykpO2Qub25jbGljaz1mdW5jdGlvbigpe2xvY2F0aW9uLnJlbG9hZCgpO307ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTt2YXIgaXY9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtpZighdHJhdmFkbygpKXtjbGVhckludGVydmFsKGl2KTt2YXIgdj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWYtZGlhZycpO2lmKHYpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHYpO319LDEwMDApO31zZXRUaW1lb3V0KG1vc3RyYSw3MDAwKTt9KSgpO3dpbmRvdy5fX0FGX1VSTFM9eyJscCI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLWVuYW1lZC8\/dj0xNzE3MjMiLCAiY2FkYXN0cm8iOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1lbmFtZWQvY2FkYXN0cm8vP3Y9MTcxNzIzIiwgImFjZXNzYXIiOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1lbmFtZWQvYWNlc3Nhci8\/dj0xNzE3MjMiLCAiYXJlYSI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLWVuYW1lZC9hcmVhLz92PTE3MTcyMyIsICJwYWluZWwiOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1lbmFtZWQvcGFpbmVsLz92PTE3MTcyMyJ9O3dpbmRvdy5fX0FGX1BBR0U9J2F1dGgtYWNlc3Nhcic7d2luZG93Ll9fQUZfUFJPVkE9J2VuYW1lZCc7d2luZG93Ll9fQUZfU1VQQV9VUkw9J2h0dHBzOi8vbHNuZGx3YWRmaXJudWx6bXFrZXMuc3VwYWJhc2UuY28nO3dpbmRvdy5fX0FGX0FOT049ImV5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpwYzNNaU9pSnpkWEJoWW1GelpTSXNJbkpsWmlJNklteHpibVJzZDJGa1ptbHliblZzZW0xeGEyVnpJaXdpY205c1pTSTZJbUZ1YjI0aUxDSnBZWFFpT2pFM09EVTNOelF6TWpBc0ltVjRjQ0k2TWpFd01UTTFNRE15TUgwLkNRVXRBYkh1b1hpTWlEZXMtN3pKaE5keEZGQVRKQ3RIWm9lN3hPbm54VGciO3dpbmRvdy5fX0FGX0xPR089J2RhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1Jxd29BQUJYUlVKUVZsQTRXQW9BQUFBVUFBQUFWd0lBbkFBQVFVeFFTTE1lQUFBQjhJYjkvem9sL3Y4OUp1bEdTbkRCSU96QTdyVzdGV1B0ZHRmdE5iYzc3SGJ0N2xYRTdpN0VSa2tiUkJHVW1KNTVYSmg1UFY3UFY4ejdEVnlLaUFrQVlYM3JEL3QxMS9Xc2ZKM0pXSnliZW1iTlYxMmpYS0RDcDdKSy80VVhjd3hJdHhhbDc1L1J3cnRDaDEvUE5Sa21aUHp1NHV4NjZvb2E0ZE12NjFIUVYxdTZ1RlhFQ1AzcXZnMEZMem5RVlZ2UnduMWtNb3F6ZUZPRGloV045aGhSdE05bitsZWNjSnY2Rk1Wc085cTRva1RFT2hPSy9Pa1lkWVdJeGhkUS9Mby9mQ3BBZEV0SEtkcTJobFo0R0p5REVqMFVXY0ZoMkd1VTdJbW9DZzBEWDZPRWoxYXV3UERoYzVUMFRyOEtDN1h2b2NRWGFNdWJ0TjdlV2xrSU9vWlNOM3dzbm9CR29xL3ZVYWFncmRPSUhCOGdVNXJXdngrNmV1WFE3KzFjSktlZWo5Si8xVjQwUXdzS0M4UmQrS1JCbWNLSXZNSUM3c0wzZThQa0tYeGxJVHA4dnpsR2Fna2xNb0NYd3NReUNrWC9ybkZaUXV4REpKK3JBYkljZVFLSnQrS2xWZjAreXVJL1NySFlSRmRZbHVDK0Zjbm5vMEdXUGJZaCtXS1lsTlRMVVI0TE81ZUJUVGFTTHNlQ1BBOHgwbkNPbExxK2x3azg3bHZtMWVBSlVxL1dBbm5XN0VHZTEvMmw0MzBNNWRJOG9hekxlejlTcjljR21RNTl4Q2Uvbm5SR21HUURVMExMdUw2MlVHN1dCYm1PeWVWVDBrb3lBV2RSUG0zVHk3WmE1Q0R4VGtPUTdhclArQlExazh3RWc0emd6ZUQvVVZRYU5iZEdyWEJ5YW8yYVc2TVNXY0J4Sk41ckF2THRjNW5QNDBqSkpCVmI1TVAwcXRmL0pxb1pCL2R6SjY0T2RHNytLeEwzY3gvOFJpa3F4UTgyd3NObUlPZS84Tm1oa1V5TjVna3oxNTdOZkcrVGxyWHc0ZEdsMDNzMThKZWxJdW1wOXlIMWFZUnpDOHRDNm02VnFEcmxJM2RhSzVEMXVFeGFZU2VRdGtkRTgxRi9IODRva1VaSmV0THZ3K05EWFVHc1BBd1A3OTRUL25KdDZlMG1aWVU3dVhUU1RsR0ZYa0x1akxZZzh5UGVVMHh6bEJKejZCTGUvb3VkYVFaeEdkSjNmZG11c2haRXpTT3Jka0FsNFFQVlpRR3FlY2lkOVNISXZYTHNTNjQzMzdpQVhLckRlOHhMMFl1bDlNWS9QY1BWSUhvZTZhSGdEUDh2NkZ2TTliZ1RPTUdtRzU0YXJGYkQwODF0RkNDcmxYcHZ5Uk9CTFhOWlozK1FKSit3TXBLUW8vbDVEbCtuZGdXbnFLN1dkZGl3THRYVUlKKytQVnI1QTRDNjRaL3BBcFdjbWh5cEFBRC9sbTFjeThROGEzSlhnZi9KRlYxT0dZcVNGM1QxQjRDb3o2NmIyZVdzNit3RkFFRTlGdDU0WDdTallWblkvL29lY3d2UVhuZnRteG9BRURqOFdBa1QyOE9mNnFnQVhKditmbHVQOWs5SHFTbzRlQyt6SVBmanhjMjFBSjVkdDcvbFpibzhOUUlBZ2tja3ZrWHU0cS9VRlJxMDgyeElmcnVybHhlQXB2bUtISkx1K0ZCL0FHWE5iMitaa2F5YlVxRmhyQjc1Nms2TkRnSlExdnZyTVVkSlloOHZBSmMycTU0ajcxZnRLakJFcHlGRHk4MnZvZ0FnNXZzMFJDemUyODBOd0tmZmYrK1E1VW0vaWd0L0lPUDBYMm9wQUtKbTMwdnM1Z29RT09xTUFkbWFSenNubCtDYXJmc01IaktvUjlQcXZpb2hGTHRvWVdMemkvdHd3SkNCclNOZG1hbjlxalhxMUgvSWtNRjkyOWVyNGlsY2NCcHBCNGpZSmFSbTY5NkRod3p1MVNMYVR5a3lUV0JjeTk2RGh3enUyYlNhdC95b2ZLSWFkT3czZU1qZ2ZoM3FSM29wMkVSbHNrSjg4WnNuQUlSNEFFRFZNeFprZnRMVDZTZ2krdnlXZEQrdnhHU3hXb3p2WDl6WSttVnJmeDZ1MFhHeGptc2RKVDF2RnhOTGpLdXE0bktMaVNYR0JYTDQ5MTUrUGJmVVlyVVVQMDZNWnFHSjZ2WDk3aHZQQ3ZSbXE5VmlLczNQT3I5eVRKeUdoVjljck9PWU5vOUpoMnZGVXVOQzJhbXJEdmp6Y0dwZWljbGl0WmlLWGladm1WYmZWVFMrYldmdHZaTmJiTEpZTGNiM3p5NnZIaFd0NGxCR3hzVnl4N2p6OEl5bHh2bXhVMFYwbmIzOTJwTzNPclBWYWpIcjNqNit0RzVTWFJjR282enNVTmNlT0tlaWdPOWFPQm0zVHF2U2pjaTM2TWJ2emJXVXVvOWU1WExxU1phOFhHcmVtUUN1eGxtdmNybGZmK3JBZSt3bEEzSWIydkpTMUppMDU3RVJlZHRlN0J6b3gyOWNYaTVubnBta3p5Vy8rWWRWeUxEdGo4M0k5L1hCa1pWRVVXUEc1V0xrYVgyMnFZZUhBOCtrMTduY2oxdnc2UHdzbDVnM2psWGs2RzBaZXVTZnQvK2pJRDZLTlVqVlg5cVpiS2JnWEE3VmRsTHArWjIzTEJUOHdxa28yKzByUnJZRlc1c1RHaFdpR085WDRtcFppdFE1ZG8yU3pFZ3RiY05EMVh6NUV4c3lOcDRmNHNwbk9vcnlYellmekxodFJxYVdxeDk1Q0ZibHgyeGtxa3RzcHdBQXI2dEkxTGZqMGN1TTFPbE1GQTNtWlZpUnNlWDZXQythMXlWS3dXUnZaY0JjUFdXbnlwRi9DdVgxS0U5bDBHOUd5bnFGRXduODdTMnl6NXZ0elZVZ2lydVVZdEpzQU9pYmhYUStjY3Z6VVVqOTVobzhQaEhIYWhZK1UrOGplK1B1T3NKb2g5MUI1dmx6dkFDOHJsQjB2RXlrVDFoRS9aMkRRcHIzMXlOVnpxRE1Cd0J3MlVXNTZPbW82blBLendBQUhrbVVFNjdPbzFvU0NtcmRGaTRUZy9OUUFMZUptU2gwU2l0WmFITElnb0ttOXhNaVpLa09CYlN1QzVTU0p1RWVDcDNXZ3hLZFF6RDF0b01wbEdRL1IzR3ZDTHIyZGpDRGN0WGJhVlE3aTBJZkNwZUZkaTlSZ0xBMVJoUStvN1gwVktPZm9kQnZKeXFaeFI1SGdUZjVlRXJHZjE0cENwL1RoMUQ5QmNFOHlNSG5sQnUram1KekNZWnVEcjZuWEpGS3VFSWx1SUpQUUNJS3Y4TlBlak5EcnFJQU1jZFJsTGVqcGVZeXR3U0ZMeHJQcXM0MUZOcjJoOTlsaVVUc1FWRm14WE9GUENUZ1ZsY0FDRGhET2VmdTZJTW5CUHhYQXdBaFZ5aUh0TklvUHJocnQ5RGJHL0pRL0l3aWZONVFlbk4rUWdGQ3pxRklON2xLeS9VM0U0cnhUUzgyMVM2aDhNWGpMa3JEWnorSzlMQVBoL3RwaW5GUlhLV0dXNnlValVwSDNsY291ajlqS2pYZVk2T3NBR21JMGRxRFI4czNJc2p1cVpEZW5tZENlTXl6OExJYVNrcE5ObjZsZlNTbG1tdEN2bFpEaWM3RUQxUGpXUGp2UnpGbXZwQ0dkbzZlbDlWWVdtcTA4VE9QNTRDRkZNU2NCNitSL0RrNFZxeWhJTDVJelVmeVJOa3lkcWRwTmlQZmQ0OHVucnY5MGtTNjJ4b2NTc3RnRXdMYzUxa29KYmMzemtqbzJyWmR6ekYvbkhqREE1UGNwVFNxQk9rdkU3OGIycVZ0Kzk3ajU1MHQ0SUZiWGZrcGYwSFJpd2swc3cwVS9mMXRjNFoxYTlldSs4aGZEdVh5d012K0hQMk1KTDRGVFRsZ3VJWEVONit1azZqN2ltWk5udFVzMU5NaklMcmZ5dWRjbCtvQ1I1RW9VbGt4cFlESFBBdEg5cUlPZ1VyZ2RHLzA1d3RhVVR1dVQ4V3hsaFQvQk1sUHZxK2xCVTdQNWt0ZTAvU0QrWFV1WUdJcXluOVRxTFBKQUdqbUdqaGVyTzRlb2dKTzE5cmZaOU9NQTBEdElDaEZnRVB1QUJEbEF3QVJxUUxzMWpwUXk5NDBKTCtiR1FTY2l0cXJkUTZTcWdKbnRXMkpCeHdudmlTVkhqOUFQYmpFUnlqVHk1dkhFaE9QM2NveDZ0c1N3UDBmaTkzekgyc0EzMFpKSkp6SDFmUGdBYzVqeGFRWGlRZW9TZE1vM2dlUm5GZ1A2SXJXNTBoNE1ZQ1A3MG5rLzJ6UE43MWIxSzNkNk1PUC9qcFhLRG5Rek5iYnZaNVhXd2s4YTI2elVIQ1RPdG9CZkc1alpoZ0VBRTFTbG5zQndGeDJwVDNCWGxOVEtYUEtqU1RMRENCckpyeEJ4SzBod0szUWNMdnRKV1ZIcVRSVU5RanpZbFcvYUQ5WGpjWTFJTGJuekdnS3VQOWpRZXUraHNBd2NCdnBoaitIVXNPcHJwSk8ydVdxSWFzb2s4MmtqWUhBTytJQXlUeVN6Mmd6cjd0ZlJtdUEyN1BGNGp5cGdXYTJIdkZFYXdYdzkxcGlvNlJYSGVRbytES3pmUjRBOFhmUXVzd0xJRHlGMlJaWEI3NDlGVExuZVpHVUdrWURHRnBnWGVJTFRGVzdTVm5od0ppRmZuMWRCVEIzbjEvd2d6Y3dqVWltRk1SelVFTnBPMVhBT09JZVVwTXFBY01QTGxQd3VDZk45enp5ZlBkSEJQQlVORDlza3hobzVoUXVEQVNtL2ljb3BYMy9Vam1BTG04WVpUWUFhSHdIRWExTHZRRDZGREpLclFrT2E0MEhtUXRPSmUxWDg0RlBmbkFIdG1xSnZKcm9Ba0o2dDlFQTR6Rm1nblU0Z3pCeGZJM1U3THJBdEdNQnBhZ3RyWStleDVPQlN1RHZ2OUFzTVhCdDZ3Nk1lNVlTOEtmelFZNWdhZ21UTi8wQXF0MUVlOXR2S2xCOG9XZnlzaHM0SHZxMTNFVStKZTFTOFZLclFFNWU5QWFKaHFjUjhDZUpoTnlpMkw0Q3RxcDFGUHlUcE5xQTlLZWRnS25iZkt2RUJQUzdSdG43cGgySDZ0TjNESElTQU9CTGRQeThCb0JtUmpHRHAzMkJjNFZ6dWVIUGk3MDBTa2FBVk5WN0tlc1Ywa2d3VTFJakdFSG5Vc28xUDBwa0ZxMTRLREQyMlNkWHNJcVNZdm1SQTVTRFVubGQ2d0FBOEN2SDIvb0FvQnFSd2V0Q2ErQU12anRON2tJZmtZelRaVzJaV2pLd2dISlFLd25WRnFUK0Rhd3IzYVlVTnFFTU5OR1dxRmhCdlNkeU5ZUHkxSHJabHdPZ3h1SmMwcE9mSzROOTUzZU9qdnVBZmMxVnIwbVpjNE9CdTVkK2xQaXNndHYwTkorckpIejNaNHhDdHJKaVFMcS9VazY2U2lJaWc2THJ3a3k1bFlJVEtQOGdPU3NhMkg4blY1TW9CYWJTTGdSUTF2LysvQ3U5RGEyNkZ5ZStpZ0hIcXQ4Y3ZHd0pqbFh4UDEvS005alFXdnI4NkdmVmdLaGNpME5GbHp0MTZEQ2hFOEpJNmwwMHhDY3JlMVZXeTlOZklIS0Z4dDNMeHk4Z0tDUTBOSGdoNWFLbkpMcm9LUm5oek9CbjBtS0MyMG5hN3lCZ3pGTVpVV2pjdlh4OEE0SkNRa01yZlVNcE5lSWFKUUVBdkdwMkhqbGhlSWRvZHlBR0hFRkU0elNnZXRmdU9tckNzUGJWM1lBYzk5dzZRSFJwUVNEeUdYd1FEWTkyZnRXaGlvdnNGTGNWamNxL1pvZVJzeFp2VER4ejZkck5PNm1QMHRMVDhpblhmU1R4TlZKUCtidXoxczRnSFhQbGlzZ2t2VzBpaEdxekhDaDlZOXFQK0diaCtnT25MMTFMdnBQNktDMDk3UlhGWU1TY2VqUzJEYk1SMTd1UkdIK0x4bTZpU3c4VFc5TUNYdmE2ektSZkJzUjV5c3I5WUhFRXRmOW1lOG9yblEzWjMvU1h4RnBTM2hubXA5Sklkd081NGd0SjV6eUZnSEUycVFXMCttenpqWnhTRzdJM0dSSC9GZzdHR0c5R2dlQlZVckc0cGV5NTdHQmliODQ5KzB0YkwvbjRUeU1DLzU3TDdwYWcwQ21TY0R0SkV1dnphbHk5VEtTRklHaXpkNUx5N2pqL1poRUtiVFlpUHE4am5NdXYzVUg0V1lodjY4c2VOSG5HeXI3bzFQaGd1WmdQZ29kK2NsV1BJcFNHMzAwSnZLM1A5WkdOTkVXWXlDY1NDaGgzdGdSRmFJZkxWWUtCVmlsY2JCYmlxemo1ZzFGRkFpQmFrMGU3eThNY29WeUczN1NoS0tVUm1pYUIwclpjSHlQVjNGY1kveFRKcVB0Y3NLQW9IUlIyRkU2RTZtV0krT1FESjZDYytrNElST09XS0ZtWUxWRDR2M29VcVRRaW4wckEySjNyRzVLaHF6RGVWNlFTT0s4WVJlb0FUd1ZJcitkN1JMeGJ5UW1BWW5DYUlJaVg2OGxlN0drVXJUU2lua3ZBMUl0ckJxMnpRRmNsRXZFZml0YVI3UWVGMUNLdUl5SmU5bklHQUhFcjN3aUMxNk5sTHZJOHlsdEV0aFI2YzMxT012VVdKdkNPTklJVFVXejR0b2ZFWEZhaS9WRVg1d0NxcG9zeUxBTGdmejZ5NXJrZG1acExDM0tlWnFjL2ZKajZ6Q2Exb1B1U0drZkNDY0pVZnlFSjdWSmthdEVWNWp6TlRuLzRNUFd4aFFIZWpaWFdWSU9EelVvbkFRQWZERitUa205aFpaMG1hMVBOdk16UFRpMzVyRis3QnRGUlZjSkNRZ0pIbUtUbWRVVUN0ajVjQTgyaytjSzBMNVhFSUIwdnk4dHpLNzhjK0dHam1LcFZLb2VFVk9yeW5nVWVDcFpTenp4MHVBQ2NCNEFpb01IZ0gvYy9MR2FCS2NFeUZwbUtQSit2SFZUZEhjZzlKYWY1ai9SaXZ6ajNOT0ZxV1VTNjRDM0kxeWlGd012SU0yL2JpRmhQSURjcVpJTHJ2S1hUUEJNZHozWXFEalZoclQvZGtXSG1aZXdyWTE4Z3ZXQmhiU1h3bFI3TUl4MzNWSXRUd1ZYMUtlbDlheUhjamtwaWhKbFcvRys4R3ZqR003SXU5cFJLb3p2bzJEYmErZGlycWd6N3I0Z0gvaTFmbnFkcEQ3b3BnSDlmNlkyMVVkTENRT1NlNTBtNFhDbEFxMElwcUhjZytla1FOZkJ2K3A0TldwWjRTNlBKYmVRMDluUk9BT0RhNVNTUEpLMXMxWHBGeW1rRExFZFlKUmYvbGxMYVFXeXdpSmJYbkoxbVBVb2hQSjFVMkJkWWR0WXpRdHVHWUNsMGVvamNoZkZPQ3lCb0x5M0ZYNENua2RMcVl5SXRBS1p6VUVTN0dQbGNwdUNmb2h0c0ptR2lON1BlUlpKb1VVVGFxbVl5SGxraEhvNFRuV3JVU3lRK3ErckVvRkVlNldFSVRiV1Q5Q3BPV2xPUmF1ck5STDFMb05BMDBsRVhOdkFMS1RXQ25hY3JtOGdzbXZWSEZhUG9XeWlKUVJiU2VHQzZXQUM4MTBzaHJvRGZTNUNhNHUvTTNFK1JNc0pveXEyazR0YlMrcFpVMUp4SlZMWkFJYW1rTzRHTW1oVlFjQzR6cjFWcklwZ28xOUN3OUFzMWs4aGpLSTBwU0RWMloxSXBSUWdzL0xtU21Kb2ZSL3BoRnlmaFByTTdDOVVPMHFOUUd2eEx3cW5TK3BWVTJwYkpkSnRBbGU2Ujhoc3djdGxEeW0zTHlIT1JGUyszWVFGZFNtaW8rOVdYUWVQektKSFBTT1lCVElZYUJVRTgxMVV0bHVBNXVjaHpCWWd2TFVnS1hndXNUN293Y0R0QnVoM0E0MC9hUHEya2ZpRGhaQlpWNzZOQVB0ZEorRGtqNkY1Q3dadTFtVlJhWlVIRWw1TmNHSGdlNFlIV1F5MlZQQUttUDBHcGZFekM3MWdFWFVTQjhQMmFCZ294ZUEyN2lyeG5TQ0J2NXVRcElwdzZ5cGZrdThLSytHd0F2OFo1cENNdVBHYlJDanRJYWpydHBDOC96NDBvbE1zUlduSW9JOWRkSkx6Um5FRzl3K2pRc0R5TUgvVFg4VUI4czdxdEQ1YzZhdElsQzBwbXFKVjBNNHlmZGdFS2hwaXpxSkZhS1ArRUUwYmtiUmtrQWJIbTFLQUViMEg3Z3BsZVBBTDNJM2srOEJ4akkrR1YyZ1MzUnU1aTYyc2lXWDdWOHZGZmFoRk1zWW1HSy8wSlFYVVVYTkFzbDRUUFB2Ymw0VE1sRzduUHQrRG50b01YWXRHbCtlTTZ0V3paZnNqczNkbFdaQ21hVnNVa1hPbkJ4L01Yb3hnUTh6YjNDaEJBSGZ2RkZTTXlmTmRFdGw1U3d2ZWhZOHYrWmtwSzNCNGttd2J5NmFTbllkcnM1dUdCZ2FGeEhUODdmQ2xJYkRWelNXaVlIMHJTdGoxaVE4SGdKeDdXMDJQcWhnUldDcS9mKzZlYnk0QTZ4MFpDODVuUlZWUWNtc2pScDgxSWZUNU95d2NhUHVWbnJ5OHVLclVnYTlGVWZrU3pySXNpcVpyc3RxQTRFUFhKdjNjS1ViSHdxRGwyeDNOa214bmhCS0tPSURGdlRjOHE3aXBRYUFLYS9wU0Y5SHRoZkdKeWVDQyt6N3gzNzFHdUR2RmVKYkc1SGFFaEprK3Y3YU5XZ05MRnYvYW8zUVhJbThrSUt3M1IrdnJSM2Z1WitTYkUxU1RmQXpSRVM4Yk91YU42ZGVzMzRhZDlXUmJrYWZoUnhRY21HcGdJS3hyVlJocmkvWmtOL0RRS1VHcDlZeE0yNXlGdkFSQ3g5TUdPcjN2VUNuWlhPMUw1UmJZWU9lOTBqaFZabi9XUXY1cm5rRzdJT3IxcjNhYUR0d3FSN3l6ZzYzV0JGL0d1NkdDY2hRZmlxMnYvYlZpMzQzQktuaFVaTW1tUXo0ZEtnOWhiUE94dEpvTVpXUmFQQWQ3YWVUYVpndDQ2SG9odmtnOXNYTGM5S1RuSGpBeUZzVGZrcFo3WnQzN3h2TjgvZ0pybm54VFpVTWpWSUh2MWJxQTRyNGJ5Z2o5a0pQQUNMLzRsMlFKNW54Y0pORS9ueDFyL3BaSWYrR3dRZ2JWUUVoNzdlZkhYcDlsRXhHM3VCTEd2VWVBdjVLL0RLM0c4N2d6OFc3K1REK2p4VHFnbC93Z0UzNGdGMmo0VWgyNldHbGdHYkxBSmxyUk1FdEE4UjZpdFg2RVVCa0RsZElFTTNlUVArcjhVUTlFRVlPaXlVMGFVY3kzQ25BNzVXYWhxNldLQitFdGlLSml1QnJZK2Yra0V1bGh0dGpSZ2lrNllsS3JqcFlBVHdQZUdRQytpblFCMGZTamMyOGxLRnREc3BYeUErd0tyRU1sMTRGZWg0Qk96V0tES09vTmdqL29wZ0xWbVRMWWdoMnZBdDZUU3R1SlJ6elVJOGFnNVRKTEVMSEE3TGRCRkwyY0FkUk90QXQzcEJZd25sY29IZVB4Y3d1NWNYUkNCeDFyUmdPdVkrOElZZDlZQ0lldHVMV1ZXOEdjbDRGSGNRanlnL2J5QVhVb0xrTWl2NEhKRW9KWGdGTURuMHpRaFhpMm9DcXpWbnhiSUI2Z0czMlpVc2pJY3hBQ1YxbG5FQWhENXkyTjJscXNmdVlPd3JuME9sVEFwM3Q5QkNRQS9rQXJqUlFTS2JwY1pHYmRGZzFUK0FlMUJnU2FJWlRSS01DK2FBbEIxN20wakcydm13bmdsc0ZkME8yOW1jUytRcTVXZU5GY2dnSWp2MDIzOGRDZjZhZ0VBZnFmY0RXQURIdE16bUt4aUFoQTlPMW5QNU4zeE1ZRWd2RWVYZFZsbUhxYU1WUjNkd1A1UDBxdWFQSHJiU0oveUFnais2cDZWbi9IU0NIY0FnQ2tVRk05aTBPd1hwckNwV0ZxdUVmL2FlY0UwZ09BK2k2KzlNZE9zaGZjMmpZb0NnUU5HSnVhWWFhYVhoMGRvdUtvdlcwTmMxMU13Z01ncFNTOU1GSDNhMmg1ZTRMRC91aldjNjc3M1pBUlFmZGFsQWh0Tmw3R3hKU09Bd0I0THIrZGJTT2JjTXorMDlBQnhLcU1HelR2K0tLOVlaOUNYNUtlZitLZC9GUVU0WGs1NkdzV2ozcW8xeExVZEdBQlVIclAzaVpGaXpONDYwQjhjdGx1N2hudTFlQmFDNXFBd3R3UEZJcGUrOVFiT1hMWHZ6UFdiS1RmT0hWajc3ZkFtUVVvUW9VdmNvTy9XSjExSVRybDU5ZmpPeFYvMWpYVUZLYnRFOS85dTA5R3JOMjllT2J6Mm02N2hTaEM1VCtPeGYyNDdkams1SmZuU29TMS9UZXNRb1FJaGZSc00vWDVEMHNYa2xPU0xCOWZPN2wvVEEwVHRHbHFyVmNldW5kdldDM01Eb3VZLzBwMUFIcUxVVk8wMWE5M2hLemR2WGoyNllVNnZTRFV3RmM5Zm9EMGl6SHFGYzNHb2R2Zng4L1AxMElDb0ZWcFBYejgvYjFjVnlLTEN4ZHZQejFzTFVsVzZldnY2K1hwcEZTQktoZGJMMTgvWFN3TXk2WHVkZE1KVmZQWUtGMjgvUDI4WEJUQVh6eS9nZWxLWWlWQ3VHcE5EV3F1UWh2RGltUW5lVndUSmIxQyswczlFbWduT2JTd0VQeERrZ25mNXlpS2tHbnM3TjFOdnFQcGNrRCtnWExYeUE5S0xhT2YydmhrMExCQkMzN1Y4SVg2RVdxQnBWdElKZCtmMnJDcjBNQXB4TDZSY0llaVUvaGR2UWFvOVFQSjM0Tnl1KzhKa0ZISTVsQ2VxL2thMDdvd1d3R01qa3QrM2NuSzcxUENYRU1hKzVRcERpaEVSN3llNHNITC8yMEk3N2VYa2ZnTE5maUVlaEpVbjFFbERoN290VFpSTUl0ZVprV3liQXM3Tk1oaUM3Z214R01vUmZROGdkOTZ5WnE2OEFzZmRRWjUzd3B4Y1hoMW9WQ0JBU2FkeUJNWDNOZ0xpMjZSUG1nUnBPYlRCcmI2OVlVYWUxay9BeVYzeGdaRldBUzc2bGlQMEtrUytoZmVTVnY0OGQ5YmNuMWNtUFNoQy9xY0RuTjBTZ01VbzRGZFFmbGo5RG9yNzlZZmc1Q3dKNEgxSmdHZXg1UWZlMjFEYzVpL0IyVDJyQVEzeUJWaXRMRC9vVmlLeVpXNU9iNjhHcGlMN29nK2gvTkJyOWp0UnJmVUZaMmViREpxOUFoeDBFNWRDeWFuZ28rUjJwRkF5VkRoUUtJbUtNZ2hROUU4VmoybUpMemk5RjNFUS9aeWRjVENJZStqT2JRNjNiNDZuamQrNXplSDJkVFhzbEovczNNWjd4NklBdTFiYnRtOXp2SDNMOHA4bWZCanBVcllBRUxPaFZDU3ZQbk1GNTdkREF4TnQ3TTc2aXV3djVQNmJGSmlDbkxvV0RuWWl3MmNSZGg4aHo5THN4RTlxbEMyQVM3OXpGaEZZanJVR3VSZUZhVEM0SmlKejAwY2c4ajhJdDRJbzNYUmM3NXM3Mk1ZaTI4RUlLdy83N044aXl4UUEvTWVjMVFsa1RaN29DLzhMM0FxR3h2bnN6dnBKUjkrTHNoUWxoWGluajZKTUFjQ24rNnBIZW5idlRvNFBCaWNvaWprQXZ5SnpRd0pJQjFjb3VDcW5TZzBMSml2TEZnQVVsYnY5a0pUMjNzckw4T3o0dHkwOXdTbUs0V2tzVkg3QUxzbFRTby9DdVFhYldObk1WR3RHT01saU5wdXRGSHcvdkt6QjNxVnlzNkZ6bHU4N2UrM093L1JIZDYrZDNiVndldGZxYnVBc3hiQkFBUk90ek41MUFvblk3TXdKSEtxTmlJZzJGbGNHOXV0UDdPSkdLZmk0Yi84QlF6K2VkK29OQjJiWEs0TndyUGJ3Q1FnT0RRbjBjVmVCVXhWQmJnUHd1NERNVjZtbDh1SWxJdUltbGFQcWorMGU2QmpzQVlhT2NxcURRL2Y0Zi9JYzRTWnRXWVhURnNFaUJRdzFNc3V1Q1ZLNXZzZnVTWFZINDZ5SVdMeXdtTUZlTmJQY0dFY0EwQzdGMGJzMjVTelA2b0RQYVdSdCtRd2tjMm1pQ1JHdDR4eG85eUVpSm4ra2t3ZzBldVFBNTVlei9BZ3cwc1Rzc0s5MHJ0UkpSMFRjcDdXcmsydjNaMmM5Z3owZ0NoaHBjSERkcjF6bFZqZ0VYMFBXT2MxQk90ZjhOdGpsMUxiN0RCR3g5TU1PTEc1Tm0wS2NGTVhPOTZLRDEzWEtVd3dmQVh4alkyWDVDcVRra1dCR1JQd1VBRHlPMjkzdzZjU0NidTdERG41ellPaFduckxORGVvOFJ0Wjd2Q1RsOVVHbTNURjNnS1p2N2Y2QXprS1poQmh0czdNT0wwZkpxQTB1bTVCMWFoeEl5a2U1MmU1dFk0RHZFQkdMMjBNWENRMDAyK0dZOGhQOWFJRGhPbGFGL1VCaU1NS0NpRGdYZkMvYlhmV1QxRkNyblcxMCtja0tGNGhPUmNibVdRckpWYzIydStEUnZ0anVKeERPMWxlQUw5SGVNcmpjNUZ3WWVHeEQxcXZkUVhLcXJYWkZiZjVBUkh6ZmlsSDZnbm5jOC8rdXpVNjUyVUZ4Ni9LU3pIaUFMODJzRGdXQjlHQ1VGUkZ4WFlyZEJXOUdlNVhBbjBtTmJBZVpWY3BKM3ZRQjZQNEdHVitwRG5KUS9ZbGRxZG51VzJDbEZvWGlUM1M0VzFNK1Vqd09vTTREWkh5dkljaUNlcnVkdzhKbWt2cm9uUVB6Q0NnWEtmNU1DZUdua2ZIREZpQVBNTmJLZGRwVFF2NWY1NlBEaTRIbElxL0hLU0Z3TnpKKzFCcmtJdm9aMXd5UWhGTGxHaFQvNlVVTE9penVEK1VoNmIwQS9EWWk0L3N0UURZMHV6ank0NWs5MmJpZXV1a0xOVUczYi8zNkxidFAzSHVMM0grcHkwTk9Od1R3WDQrTXI4ZURmTUI0bTZOajdzejRIdFVTR0c3MGhmSVAvYkpRZ09BdHlQaDRETWhKN0hOSFg0QklEZ2xnV09JUDVSL3BvN1FBTlE0aVc4dUdNSkFWN1Y0SGVmVWw5M0NzQzVSNzZEZkhBVURyRzhpMjZIdFBrQmVZYUxNNzVPcklZRmNrbkkyWE9mV25hbEFleVNkNXFDdUF5NFFYeURZelFRa3krRHRhclZhODRpanV1YzFxdFV3RGg1MUxyVmFycmREUlZyVHl4eVM3NFdZcjBWeWFlK1BmWWVGUVBrbkxtaDBLQUZYLzFTTlQyNkg2SUl2MWh5VWtKQXp0ckhHZzdUSTBJV0ZRc0tQUXdRa0pDVU1IQnRvcFdneEw0RCtzclJJQUloT29BOXJIK1NtZ3ZKS1MvV3MwQUxpUHZJOXM4Ny8xZzRxVkhNVTM1dFFBQUhYYmZRWmthanY3b1FJcVdCcE14VGtwTzc5cEd3QUFybTAyRkNEYmwzTUNvY0xsc040dFl3SlVBQUJody9ZWEl0dlNiWTJnd3FacnRRSExVODNJMW55bXJ5dFV4S3hjdlg3bjhmT09QVFVoWSt1TmNYNVFNVFAxUmI0ZTJadXZUZ3FDaXBwbUZGQjNhbFFnVk53MHNudTFwWWNYVk9Sa3BiditiVDAxVk94a1lucTBvbnNBVlBqa1ozaTRabEM0QWlxQTBtejVGLy91R2FhQWlxRmN0b0tVZFJNYWVFUEZVUk9pcmVUeDZjVmo0Z01VVUtIMDdmMmRzM3RGZTBMRlV3QldVRGdnYmdJQUFMQTJBSjBCS2xnQ25RQStNUktIUXFJaERPZmlBQkFCZ2xwYnVGMGhmUHdEOEFQMEEvZ0NmMmxZSGdEK0FmZ0IrZ0g4SS9ldnZoS0FCUkJVUEZkVy94MlRMSGFjWGhXUGNzREl4Q2YvVlFhMWFCVlkwS01Rbi8wM24wTi9mcUVYME9SS1BMcEMyRFdyZ3BPZlo2NEFmOW50SUZDRjRmanlvN2ZmaU1HcDBjZmNydzNiRW5hWmVpc2F3Q3BmMi9salFCUWdDN2tCWVkxWnY0emtOYVlTWGJBSHdGKzZwVW1JZE5XTFN3WTJuY3dITzVCcm93U3c2YjEwOVBIMzlyVWovUys3TW9yMno5eXZrMFBNUW56Tk9xWWdSKzMzRGp1cGFGZzRYajdxVHJxY3h0VzRpQysrcUs3ZnBNV3RwdnJrSTRiNy8vc2VCcERHNmlvbkVSbGhSdllwZ1A1Tm81bllqSXdMclF6NklJR091NFZra3hDUU9ZaTRDUHpkZ3BSYm1RWExhSjZmRVBGMTY4K3Fnb2o3ZVNmd2ZzZDVhTEt1NHl0SWdENDAxQU9aVk01SlhmTG9nckhzbUpmSUl0VEZTZ1FSS2xNV1h3aWVsQ2ZqVldvcjFjOFFXb1R4UXpTaEpVK0VPYzltbXc5SWZ5VnB1d2kxY09QdVdCa1loTFhQd2FlTEsrR09TWW1DTnlQZDlEMjlMSEw2SkxXSGhaVEZwWTUrRUNBa3RZZVBIdk9YQ0Q4Ky9RK1lhckhQd2dRRWxyRHdzcGkwc2MvQ0JBU1dzTzVnQVA3L1BaLy8rNGYvLzdoSC8vL2Iva3lFYS9SN2ZRTDAvL1oyTVQ4bEFYOGxpZnlZUitTa0Q4aytwK1RhZi8wY0I1aE1YK1NmYy9KVDUrU2RlZmswNS9KY2Y1TkxQeVdNL0plbjVKMEQrVGRmNU5TUHliNS9KcXArVFFGK1ROZS9KcjUrVGlINU5NZnlaV3gvSldEOG1WSmY4bTQveVpxWDVPVXMyNXpoV2ZrdW44bVlZL0pscFROdWEzbi82MmliK1RLam45NW4vNWkvbVA4MWVaWS84Y0gvOGRrWGhmL2xhTFg4Sk1BQUFBQllUVkFnWEFjQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURjdU1pMWpNREF3SURjNUxqVTJObVZpWXpVc0lESXdNakl2TURVdk1Ea3RNRGM2TWpJNk1qa2dJQ0FnSUNBZ0lDSStJRHh5WkdZNlVrUkdJSGh0Ykc1ek9uSmtaajBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOHdNaTh5TWkxeVpHWXRjM2x1ZEdGNExXNXpJeUkrSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUlIaHRiRzV6T25odGNEMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMeUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wUlhaMFBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWRmRtVnVkQ01pSUhodGJHNXpPbVJqUFNKb2RIUndPaTh2Y0hWeWJDNXZjbWN2WkdNdlpXeGxiV1Z1ZEhNdk1TNHhMeUlnZUcxc2JuTTZjR2h2ZEc5emFHOXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNCb2IzUnZjMmh2Y0M4eExqQXZJaUI0YlhBNlEzSmxZWFJ2Y2xSdmIydzlJa0ZrYjJKbElGQm9iM1J2YzJodmNDQXlNUzR5SUNoWGFXNWtiM2R6S1NJZ2VHMXdPa055WldGMFpVUmhkR1U5SWpJd01qQXRNRGN0TURGVU1URTZNVGM2TWpVdE1ETTZNREFpSUhodGNEcE5aWFJoWkdGMFlVUmhkR1U5SWpJd01qSXRNRGd0TWpWVU1UTTZOVGs2TVRndE1ETTZNREFpSUhodGNEcE5iMlJwWm5sRVlYUmxQU0l5TURJeUxUQTRMVEkxVkRFek9qVTVPakU0TFRBek9qQXdJaUI0YlhCTlRUcEpibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPbUV3WWprME1XVmtMVE00TkRRdE5ESTBNQzA1TmpkaExURTBaakF4WlRabE5HWTRNU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpWVdSdlltVTZaRzlqYVdRNmNHaHZkRzl6YUc5d09tUm1NVFUyT0RVeUxXWTBZelF0TlRFMFlTMDRORFUxTFdJNE9EUXpaamxtTWpBNVlTSWdlRzF3VFUwNlQzSnBaMmx1WVd4RWIyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qaGhOREprWmpFMExUWm1aREV0TmpNME1TMDVNVEl4TFRFMlpEVTROVGxtTlRBelppSWdaR002Wm05eWJXRjBQU0pwYldGblpTOXdibWNpSUhCb2IzUnZjMmh2Y0RwRGIyeHZjazF2WkdVOUlqTWlQaUE4ZUcxd1RVMDZTR2x6ZEc5eWVUNGdQSEprWmpwVFpYRStJRHh5WkdZNmJHa2djM1JGZG5RNllXTjBhVzl1UFNKamNtVmhkR1ZrSWlCemRFVjJkRHBwYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2poaE5ESmtaakUwTFRabVpERXROak0wTVMwNU1USXhMVEUyWkRVNE5UbG1OVEF6WmlJZ2MzUkZkblE2ZDJobGJqMGlNakF5TUMwd055MHdNVlF4TVRveE56b3lOUzB3TXpvd01DSWdjM1JGZG5RNmMyOW1kSGRoY21WQloyVnVkRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJREl4TGpJZ0tGZHBibVJ2ZDNNcElpOCtJRHh5WkdZNmJHa2djM1JGZG5RNllXTjBhVzl1UFNKellYWmxaQ0lnYzNSRmRuUTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBrTURrNVlXUTJZeTFoTWpZd0xUaGxORE10WWpSa055MHlOek16TlRreU9UTXhZVFlpSUhOMFJYWjBPbmRvWlc0OUlqSXdNakF0TURjdE1ERlVNVEU2TVRjNk1qVXRNRE02TURBaUlITjBSWFowT25OdlpuUjNZWEpsUVdkbGJuUTlJa0ZrYjJKbElGQm9iM1J2YzJodmNDQXlNUzR5SUNoWGFXNWtiM2R6S1NJZ2MzUkZkblE2WTJoaGJtZGxaRDBpTHlJdlBpQThjbVJtT214cElITjBSWFowT21GamRHbHZiajBpYzJGMlpXUWlJSE4wUlhaME9tbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZZVEJpT1RReFpXUXRNemcwTkMwME1qUXdMVGsyTjJFdE1UUm1NREZsTm1VMFpqZ3hJaUJ6ZEVWMmREcDNhR1Z1UFNJeU1ESXlMVEE0TFRJMVZERXpPalU1T2pFNExUQXpPakF3SWlCemRFVjJkRHB6YjJaMGQyRnlaVUZuWlc1MFBTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ01qTXVOQ0FvVjJsdVpHOTNjeWtpSUhOMFJYWjBPbU5vWVc1blpXUTlJaThpTHo0Z1BDOXlaR1k2VTJWeFBpQThMM2h0Y0UxTk9raHBjM1J2Y25rK0lEeHdhRzkwYjNOb2IzQTZSRzlqZFcxbGJuUkJibU5sYzNSdmNuTStJRHh5WkdZNlFtRm5QaUE4Y21SbU9teHBQbUZrYjJKbE9tUnZZMmxrT25Cb2IzUnZjMmh2Y0RveFpUZzJZbVl5Tmkwell6azJMV1JoTkRrdE9HRTFPUzFoT0RVeFpqWXpNR1ZpT0dJOEwzSmtaanBzYVQ0Z1BISmtaanBzYVQ1NGJYQXVaR2xrT21NNE16Z3hNamxpTFRVNVl6SXRZMkkwT1MxaE9ESmpMV0UwWVdWa1ltTmxOMlpoTXp3dmNtUm1PbXhwUGlBOEwzSmtaanBDWVdjK0lEd3ZjR2h2ZEc5emFHOXdPa1J2WTNWdFpXNTBRVzVqWlhOMGIzSnpQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZz09JzsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEEgTElHQSBNRUQgwrcgQVRPIEZJTkFMIDIwMjYgwrcgcHJvdMOzdGlwbyBmcm9udC1lbmQKICAgRGFkb3MgZGVtbyBlbSBsb2NhbFN0b3JhZ2UgKHByZWZpeG8gYWZfKS4gVG9kbyBhY2Vzc28gYSBkYWRvcwogICBwYXNzYSBwZWxvIG9iamV0byBgc3RvcmVgOiBhIGZhc2UgMiB0cm9jYSBlc3NhcyBmdW7Dp8O1ZXMgcG9yCiAgIGNoYW1hZGFzIFN1cGFiYXNlIHNlbSBtZXhlciBubyByZXN0byBkbyBhcHAgKHBhZHLDo28gRGVzYWZpbyAyMSkuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBwb2x5ZmlsbCBkZSBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0IChpT1M8MTAvQ2hyb21lPDU3KTogdXNhZG8gbm8gY291bnRkb3duCiAgIGRhIExQIGUgbm8gY3JvbsO0bWV0cm8gZG8gc2ltdWxhZG87IHNlbSBlbGUsIFR5cGVFcnJvciBlbSBhcGFyZWxobyBhbnRpZ28KICAgdHJhdmF2YSBvIHRpY2suIEF1ZGl0b3JpYSAxMS8wOC4gKi8KaWYgKCFTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KSB7CiAgU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCA9IGZ1bmN0aW9uKGxlbiwgcGFkKXsKICAgIHZhciBzID0gU3RyaW5nKHRoaXMpOyBwYWQgPSBwYWQgPT09IHVuZGVmaW5lZCA\/ICcgJyA6IFN0cmluZyhwYWQpOwogICAgaWYgKHMubGVuZ3RoID49IGxlbiB8fCAhcGFkKSByZXR1cm4gczsKICAgIHZhciBmaWxsID0gJyc7IHdoaWxlIChmaWxsLmxlbmd0aCA8IGxlbiAtIHMubGVuZ3RoKSBmaWxsICs9IHBhZDsKICAgIHJldHVybiBmaWxsLnNsaWNlKDAsIGxlbiAtIHMubGVuZ3RoKSArIHM7CiAgfTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLSBqb3JuYWRhcyAtLS0tLS0tLS0tLS0tLS0tICovCi8vIENhbGVuZMOhcmlvIEVOQU1FRDogb2ZpY2lhbCwgZXh0cmHDrWRvIGRhcyBww6FnaW5hcyBkbyBXUAovLyAoYXRvLWZpbmFsLXJlc2lkZW5jaWEtbWVkaWNhLTIwMjYgKyBvYnNlcnZhdG9yaW8tZW5hbWVkKSBlbSAyOS8wNy8yMDI2LgovLyBDYWxlbmTDoXJpbyBSZXZhbGlkYSAyMDI2LjI6IFBST1ZJU8OTUklPLCBlc3BlbGhhIGEgZXN0cnV0dXJhIGRhIGVkacOnw6NvCi8vIDIwMjYuMS4gQXR1YWxpemFyIHF1YW5kbyBvIElORVAgY29uZmlybWFyIGFzIGRhdGFzLgp2YXIgSk9STkFEQVMgPSB7CiAgZW5hbWVkOiB7CiAgICBub21lOiAnRU5BTUVEIDIwMjYnLAogICAgbGlnYTogJ0F0byBGaW5hbCDCtyBFTkFNRUQnLAogICAgaW5pY2lvOiAnMjAyNi0wOC0yNicsICAgLy8gYSBqb3JuYWRhIGNvbWXDp2EgbmEgQXVsYSBJbmF1Z3VyYWwgKDI2LzA4LCAxOWgpOyBvIDHCuiBjaGVjay1pbiBzZWd1ZSBuYSBQcmVtb25pw6fDo28gKDMwLzA4KQogICAgcHJvdmE6ICcyMDI2LTA5LTEzJywKICAgIHByb3Zpc29yaW86IGZhbHNlLAogICAgcGFydGljaXBhbnRlczogMTQ4MiwKICAgIC8vIFTDrXR1bG9zIGUgbGlua3Mgb2ZpY2lhaXMgZG8gZS1tYWlsIGRhIGNvb3JkZW5hw6fDo28gKDI5LzA3LzIwMjYpCiAgICAvLyBlbjAwIChzZW1hbmEgMCA9IEFiZXJ0dXJhKTogU0VNIHBhbGF2cmEtY2hhdmUgZSBTRU0gcXVlc3TDtWVzIOKAlCBuw6NvIGVudHJhCiAgICAvLyBuYSByw6lndWEgZGUgcG9udG9zIChwcmVzZW7Dp2Egc2VndWUgMTMgYXVsYXMgw5cgNDApLiBPIGxpbmsgZG8gWW91VHViZQogICAgLy8gw6kgUExBQ0VIT0xERVIgKHJlcGV0aWRvIGRhIFByZW1vbmnDp8OjbykgYXTDqSBhIGxpdmUgb2ZpY2lhbCBzZXIgY3JpYWRhLgogICAgZXZlbnRvczogWwogICAgICB7IGlkOidlbjAwJywgZGF0YTonMjAyNi0wOC0yNicsIGhvcmE6JzE5OjAwJywgdGl0dWxvOidBdWxhIEluYXVndXJhbCDCtyBUdWRvIHNvYnJlIG8gQXRvIEZpbmFsIEVOQU1FRCAyMDI2JywgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYTowLCBxdWl6OmZhbHNlLCB5dDonaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g\/dj15SmlrWVFKLUk0SSZsaXN0PVBMYjJJRW90S2NZSVUmaW5kZXg9MTYnIH0sCiAgICAgIHsgaWQ6J2VuMDEnLCBkYXRhOicyMDI2LTA4LTMwJywgaG9yYTonMDg6MDAgw6BzIDE2OjAwJywgdGl0dWxvOidQcmVtb25pw6fDo28gRU5BTUVEIDIwMjYnLCAgICAgICAgICAgICAgICAgICAgICAgICAgdGlwbzonbWFyY28nLCBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9GV1dlbmJINkk5bycgfSwKICAgICAgeyBpZDonZW4wMicsIGRhdGE6JzIwMjYtMDgtMzEnLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBHaW5lY29sb2dpYScsICAgICAgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvbjhyMlcyMG54bGMnIH0sCiAgICAgIHsgaWQ6J2VuMDMnLCBkYXRhOicyMDI2LTA5LTAxJywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgUGVkaWF0cmlhIFBhcnRlIEknLCAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1gyN1lQVmpWcDY0JyB9LAogICAgICB7IGlkOidlbjA0JywgZGF0YTonMjAyNi0wOS0wMicsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENpcnVyZ2lhIFBhcnRlIEknLCAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9kTUl0Y3lwYWV5RScgfSwKICAgICAgeyBpZDonZW4wNScsIGRhdGE6JzIwMjYtMDktMDMnLCBob3JhOicxOTowMCDDoHMgMjM6MDAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDbMOtbmljYSBNw6lkaWNhIFBhcnRlIEknLCAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9GMVZRMGlvaE02aycgfSwKICAgICAgeyBpZDonZW4wNicsIGRhdGE6JzIwMjYtMDktMDQnLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBNZWRpY2luYSBQcmV2ZW50aXZhIFBhcnRlIEknLCAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvVnAtekJIVmJ2R0UnIH0sCiAgICAgIHsgaWQ6J2VuMDcnLCBkYXRhOicyMDI2LTA5LTA2JywgaG9yYTonMTQ6MDAgw6BzIDE5OjAwJywgdGl0dWxvOidTaW11bGFkbyBGSU5BTCBFTkFNRUQgMjAyNicsICAgICAgICAgICAgICAgICAgICAgIHRpcG86J21hcmNvJywgc2VtYW5hOjIsIHF1aXo6ZmFsc2UsIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvWWUzaVFqeW50ZEUnIH0sCiAgICAgIHsgaWQ6J2VuMDgnLCBkYXRhOicyMDI2LTA5LTA3JywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgT2JzdGV0csOtY2lhJywgICAgICAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9ucU1IbXZESHZMOCcgfSwKICAgICAgeyBpZDonZW4wOScsIGRhdGE6JzIwMjYtMDktMDgnLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBQZWRpYXRyaWEgUGFydGUgSUknLCAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvMzJpeU1Za0pLLUEnIH0sCiAgICAgIHsgaWQ6J2VuMTAnLCBkYXRhOicyMDI2LTA5LTA5JywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgQ2lydXJnaWEgUGFydGUgSUknLCAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL3U5TWdOSlp1Tkc4JyB9LAogICAgICB7IGlkOidlbjExJywgZGF0YTonMjAyNi0wOS0xMCcsIGhvcmE6JzE5OjAwIMOgcyAyMzowMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENsw61uaWNhIE3DqWRpY2EgUGFydGUgSUknLCAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL2VaOHpVcHNCRWJRJyB9LAogICAgICB7IGlkOidlbjEyJywgZGF0YTonMjAyNi0wOS0xMScsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IE1lZGljaW5hIFByZXZlbnRpdmEgUGFydGUgSUknLCAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS91aUMzT2dBUTQxRScgfSwKICAgICAgeyBpZDonZW4xMycsIGRhdGE6JzIwMjYtMDktMTInLCBob3JhOicwODowMCDDoHMgMTY6MDAnLCB0aXR1bG86J1Jldmlzw6NvIGRlIFbDqXNwZXJhIEVOQU1FRCAyMDI2IMK3IGFvIHZpdm8nLCAgICAgICAgdGlwbzonbWFyY28nLCBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9XeGEyanJCTF9ZYycgfSwKICAgICAgeyBpZDonZW4xNCcsIGRhdGE6JzIwMjYtMDktMTMnLCBob3JhOidhIHBhcnRpciBkYXMgMTY6MDAnLCB0aXR1bG86J0dhYmFyaXRvIEVOQU1FRCAyMDI2JywgICAgICAgICAgICAgICAgICAgICAgICB0aXBvOidwcm92YScsIHNlbWFuYToyLCBxdWl6OmZhbHNlLCB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL196SVZVQlE4VEo4JyB9CiAgICBdLAogICAgc2ltdWxhZG9JZDogJ2VuMDcnCiAgfSwKICByZXZhbGlkYTogewogICAgbm9tZTogJ1JldmFsaWRhIElORVAgMjAyNi4yJywKICAgIGxpZ2E6ICdBdG8gRmluYWwgwrcgUmV2YWxpZGEnLAogICAgaW5pY2lvOiAnMjAyNi0wOC0yNicsCiAgICBwcm92YTogJzIwMjYtMDktMTMnLAogICAgcHJvdmlzb3JpbzogZmFsc2UsCiAgICBwYXJ0aWNpcGFudGVzOiA3NDMsCiAgICAvLyBDYWxlbmTDoXJpbyBvZmljaWFsIChJZ29yLCAxMi8wOCkuIFJvZGEgbmEgTUVTTUEgamFuZWxhIGRvIEVOQU1FRCAoMjYvMDjigJMxMy8wOSksCiAgICAvLyBIb3JhIGRhIFZlcmRhZGUgw6BzIDEyaC4gUmV2aXPDo28gZGUgVsOpc3BlcmEgKHJ2MTMpIGUgR2FiYXJpdG8gKHJ2MTQpIHPDo28KICAgIC8vIENPTVBBUlRJTEhBRE9TIEVOQU1FRCtSZXZhbGlkYS4g4pqg77iPIHl0IGRhIEFiZXJ0dXJhIChydjAwLCAyNi8wOCAyMGgpIFBFTkRFTlRFLgogICAgZXZlbnRvczogWwogICAgICB7IGlkOidydjAwJywgZGF0YTonMjAyNi0wOC0yNicsIGhvcmE6JzIwOjAwJywgdGl0dWxvOidBdWxhIEluYXVndXJhbCDCtyBUdWRvIHNvYnJlIG8gQXRvIEZpbmFsIFJldmFsaWRhIElORVAgMjAyNi4yJywgdGlwbzonYXVsYScsIHNlbWFuYTowLCBxdWl6OmZhbHNlLCB5dDonJyB9LAogICAgICB7IGlkOidydjAxJywgZGF0YTonMjAyNi0wOC0zMCcsIGhvcmE6JzA4OjAwIMOgcyAxNjowMCcsIHRpdHVsbzonUHJlbW9uacOnw6NvIFJldmFsaWRhIElORVAgMjAyNi4yJywgICAgICAgICAgICAgICAgICB0aXBvOidtYXJjbycsIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL0w1aGRGT3BvbHFnJyB9LAogICAgICB7IGlkOidydjAyJywgZGF0YTonMjAyNi0wOC0zMScsIGhvcmE6JzEyOjAwIMOgcyAxNDozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IEdpbmVjb2xvZ2lhJywgICAgICAgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvM3RjV1JZQWdJOXMnIH0sCiAgICAgIHsgaWQ6J3J2MDMnLCBkYXRhOicyMDI2LTA5LTAxJywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgUGVkaWF0cmlhIFBhcnRlIEknLCAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9ocHliaE9ma2g4SScgfSwKICAgICAgeyBpZDoncnYwNCcsIGRhdGE6JzIwMjYtMDktMDInLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDaXJ1cmdpYSBQYXJ0ZSBJJywgICAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL0dRVEhjOU9vdkNVJyB9LAogICAgICB7IGlkOidydjA1JywgZGF0YTonMjAyNi0wOS0wMycsIGhvcmE6JzEyOjAwIMOgcyAxNjowMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENsw61uaWNhIE3DqWRpY2EgUGFydGUgSScsICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9DNG1YRkZnU01sSScgfSwKICAgICAgeyBpZDoncnYwNicsIGRhdGE6JzIwMjYtMDktMDQnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBNZWRpY2luYSBQcmV2ZW50aXZhIFBhcnRlIEknLCAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1VxZ3liOUNoS2N3JyB9LAogICAgICB7IGlkOidydjA3JywgZGF0YTonMjAyNi0wOS0wNicsIGhvcmE6JzE0OjAwIMOgcyAxOTowMCcsIHRpdHVsbzonU2ltdWxhZG8gRmluYWwgUmV2YWxpZGEgSU5FUCAyMDI2LjInLCAgICAgICAgICAgICAgdGlwbzonbWFyY28nLCBzZW1hbmE6MiwgcXVpejpmYWxzZSwgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9jX0dxbmE5WEh5TScgfSwKICAgICAgeyBpZDoncnYwOCcsIGRhdGE6JzIwMjYtMDktMDcnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBPYnN0ZXRyw61jaWEnLCAgICAgICAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9fS0JBQkZVRlJOWScgfSwKICAgICAgeyBpZDoncnYwOScsIGRhdGE6JzIwMjYtMDktMDgnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBQZWRpYXRyaWEgUGFydGUgSUknLCAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlLzktcXJJX295dlBjJyB9LAogICAgICB7IGlkOidydjEwJywgZGF0YTonMjAyNi0wOS0wOScsIGhvcmE6JzEyOjAwIMOgcyAxNDozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENpcnVyZ2lhIFBhcnRlIElJJywgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvNzdFSHUtaU9iTGMnIH0sCiAgICAgIHsgaWQ6J3J2MTEnLCBkYXRhOicyMDI2LTA5LTEwJywgaG9yYTonMTI6MDAgw6BzIDE2OjAwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgQ2zDrW5pY2EgTcOpZGljYSBQYXJ0ZSBJSScsICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL0U2ZVNyTGcxbEkwJyB9LAogICAgICB7IGlkOidydjEyJywgZGF0YTonMjAyNi0wOS0xMScsIGhvcmE6JzEyOjAwIMOgcyAxNDozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IE1lZGljaW5hIFByZXZlbnRpdmEgUGFydGUgSUknLCAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvZ2IwdHpkTk1mWTAnIH0sCiAgICAgIHsgaWQ6J3J2MTMnLCBkYXRhOicyMDI2LTA5LTEyJywgaG9yYTonMDg6MDAgw6BzIDE2OjAwJywgdGl0dWxvOidSZXZpc8OjbyBkZSBWw6lzcGVyYSBFTkFNRUQgZSBSZXZhbGlkYSBJTkVQIMK3IGFvIHZpdm8nLCB0aXBvOidtYXJjbycsIHNlbWFuYToyLCBxdWl6OnRydWUsIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvVXJxWnRZRU1teEEnIH0sCiAgICAgIHsgaWQ6J3J2MTQnLCBkYXRhOicyMDI2LTA5LTEzJywgaG9yYTonYSBwYXJ0aXIgZGFzIDE2OjAwJywgdGl0dWxvOidHYWJhcml0byBFTkFNRUQgZSBSZXZhbGlkYSBJTkVQIDIwMjYuMicsICAgICAgIHRpcG86J3Byb3ZhJywgc2VtYW5hOjIsIHF1aXo6ZmFsc2UsIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvb0ljbGNfbXp6MVknIH0KICAgIF0sCiAgICBzaW11bGFkb0lkOiAncnYwNycKICB9Cn07CgovKiBBIEpPUk5BREEgKGVzdHVkbykgdmFsZSAyLjAwMCBwdHMuIEluZGljYcOnw6NvIHZpcm91IELDlE5VUyBTRU0gVEVUTyBlbSBjaW1hCiAgIGRpc3NvICgxMS8wOCkg4oCUIG7Do28gaMOhIG1haXMgdW0gInRvdGFsIiBmaXhvLiAqLwp2YXIgUE9OVE9TID0geyBwcmVzZW5jYTogNTIwLCBtaXNzb2VzOiA3ODAsIHNpbXVsYWRvOiA3MDAsIGpvcm5hZGE6IDIwMDAgfTsKLyogw6F0b21vcyBFWEFUT1MgZGEgcsOpZ3VhIChkZWNpc8OjbyAwNC8wOCk6IHNlbSBwb250byBxdWVicmFkbyBlbSBsdWdhciBuZW5odW0gKi8KdmFyIFBUX0FVTEEgPSA0MCwgUFRfQVVMQV9SRVRSTyA9IDMwOyAgICAgICAgICAgICAgICAgIC8vIDc1JSBleGF0byBubyByZXRyb2F0aXZvCnZhciBQVF9ESUEgPSA2NSwgUFRfRElBX1BJU08gPSAyNiwgUFRfRElBX0FDRVJUT1MgPSAzOTsgLy8gcGlzbyA0MCUgZXhhdG8KdmFyIFBUX1NJTV9BQ0VSVE8gPSA3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW11bGFkbzogNyBwb3IgYWNlcnRvCi8qIGluZGljYcOnw7VlcyAocmV2aXPDo28gMTEvMDgsIGRlY2lzw6NvIGRvIElnb3IpOiAyMCBwdHMgcG9yIGFtaWdvIHF1ZSBzZSBJTlNDUkVWRQogICBwZWxvIHNldSBsaW5rIOKAlCBBVVRPTcOBVElDTyBubyBjYWRhc3RybyAobsOjbyBleGlnZSBtYWlzIHBhcnRpY2lwYXIpIGUgU0VNIFRFVE8KICAgKCJxdWFudG8gbWFpcyBpbmRpY2FyLCBtZWxob3IiKS4gQsO0bnVzIGVtIGNpbWEgZG9zIDIuMDAwLiBOw4NPIGVudHJhIG5vCiAgIGRlc2VtcGF0ZS4gKi8KdmFyIFBUX0lORCA9IDIwOwp2YXIgREVNT19LRVlXT1JEID0gJyc7IC8vIHByb2R1w6fDo286IG7Do28gZXhpc3RlIGNoYXZlIGRlbW87IHZhbGlkYcOnw6NvIMOpIG5vIHNlcnZpZG9yCi8qIHJlc3Bvc3RhcyBwYXJjaWFpcyBkZSB1bSBldmVudG8gKHByb2R1w6fDo286IGNvbnRhZGFzIGRvIENBQ0hFIGRvIHNlcnZpZG9yKSAqLwpmdW5jdGlvbiBuUmVzcG9zdGFzRXZlbnRvKGV2SWQpewogIHZhciBxcyA9IENBQ0hFLnF1ZXN0b2VzW2V2SWRdIHx8IFtdOwogIHZhciBuID0gMDsKICBxcy5mb3JFYWNoKGZ1bmN0aW9uKHEpeyBpZiAoQ0FDSEUucmVzcG9zdGFzW3EuaWRdKSBuKys7IH0pOwogIHJldHVybiBuOwp9Ci8qIEV2ZW50b3MgY29tIGNoZWNrLWluIChwcmVzZW7Dp2EpOiB0b2RvcyBNRU5PUyBhIEFiZXJ0dXJhIChzZW1hbmEgMCkgZSBvCiAgIFNpbXVsYWRvLiBEZXJpdmFkbyBkYSBqb3JuYWRhIGF0aXZhIHByYSBmdW5jaW9uYXIgZW0gcXVhbHF1ZXIgdmVydGljYWwKICAgKEVOQU1FRCB1c2EgZW4qLCBSZXZhbGlkYSB1c2EgcnYqKS4gKi8KZnVuY3Rpb24gZXZlbnRvc0NvbUNoYXZlKHByb3ZhKXsKICB2YXIgaiA9IEpPUk5BREFTW3Byb3ZhXSB8fCBKT1JOQURBUy5lbmFtZWQ7CiAgdmFyIG91dCA9IFtdOwogIGouZXZlbnRvcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyBpZiAoZS5zZW1hbmEgIT09IDAgJiYgZS5pZCAhPT0gai5zaW11bGFkb0lkKSBvdXQucHVzaChlLmlkKTsgfSk7CiAgcmV0dXJuIG91dDsKfQp2YXIgVEVNX0NIQVZFID0gZXZlbnRvc0NvbUNoYXZlKCh3aW5kb3cuX19BRl9QUk9WQSA9PT0gJ3JldmFsaWRhJykgPyAncmV2YWxpZGEnIDogJ2VuYW1lZCcpOwoKLyogUHJlZml4byBkZSBsb2NhbFN0b3JhZ2UvY29va2llIHBvciB2ZXJ0aWNhbDogRU5BTUVEIGUgUmV2YWxpZGEgbW9yYW0gbm8gTUVTTU8KICAgZG9tw61uaW8gKG1rdC5lc3RyYXRlZ2lhLmNvbSksIG9uZGUgbyBsb2NhbFN0b3JhZ2Ugw6kgQ09NUEFSVElMSEFETy4gU2VtIGlzc28sIGEKICAgc2Vzc8OjbyBkZSB1bSBhbHVubyBkbyBFTkFNRUQgdmF6YXJpYSAoY29tIGRhZG9zIHF1ZWJyYWRvcykgcHJhIMOhcmVhIGRvIFJldmFsaWRhLgogICBFTkFNRUQgbWFudMOpbSBvIHByZWZpeG8gaGlzdMOzcmljbyAnYWZfJyAobsOjbyBkZXNsb2dhIG5pbmd1w6ltIGrDoSBsb2dhZG8pOwogICBSZXZhbGlkYSB1c2EgJ2FmX3J2XycuICovCnZhciBMU1AgPSAod2luZG93Ll9fQUZfUFJPVkEgPT09ICdyZXZhbGlkYScpID8gJ2FmX3J2XycgOiAnYWZfJzsKCi8qIE1PRE8gREUgVkFMSURBw4fDg08gZGEgY29vcmRlbmHDp8OjbyDigJQgREVTTElHQVIgTk8gTEFOw4dBTUVOVE8gKGZhbHNlKS4KICAgQ29tIHRydWU6IGhvamUgPSAzMC8wOCAoZGlhIGRhIGVzdHJlaWEpLCBxdWVzdMO1ZXMgZGUgVE9ET1Mgb3MgZGlhcwogICBsaWJlcmFkYXMsIFNpbXVsYWRvIGFiZXJ0byBwYXJhIHByZWVuY2hlciBlIGdhYmFyaXRvIGxpYmVyYWRvIGFww7NzIG8KICAgZW52aW8sIGNvbSBib3TDo28gZGUgcmVmYXplci4gVW0gYmFubmVyIGF2aXNhIHF1ZSDDqSBhbWJpZW50ZSBkZSB0ZXN0ZS4gKi8KdmFyIE1PRE9fVkFMSURBQ0FPID0gZmFsc2U7ICAvLyBMQU7Dh0FNRU5UTyAxMC8wODogYmxvcXVlaW9zIHJlYWlzIHByb3MgYWx1bm9zCgovKiBWSVPDg08gRE8gQ09PUkRFTkFET1IgKGxhbsOnYW1lbnRvIDEwLzA4KTogQ1BGcyBkZXN0YSBsaXN0YSBlbnhlcmdhbSBhCiAgIHBsYXRhZm9ybWEgY29tcGxldGEgYW50ZXMgZGEgZXN0cmVpYSAodHJpbGhhLCBxdWVzdMO1ZXMsIHNpbXVsYWRvKSBzZW0KICAgYWJyaXIgbmFkYSBwcm9zIGFsdW5vcy4gU8OzIFZJU1VBTElaQcOHw4NPOiBvIHNlcnZpZG9yIG1hbnTDqW0gYXMgcmVncmFzCiAgIHJlYWlzIGUgcmVjdXNhIGHDp8O1ZXMgZm9yYSBkZSBob3JhLiAqLwp2YXIgQ1BGU19DT09SRCA9IFsnMDM3MjcwMjgxMzAnXTsKZnVuY3Rpb24gbW9kb1ByZXZpZXcoKXsKICBpZiAoTU9ET19WQUxJREFDQU8pIHJldHVybiB0cnVlOwogIHRyeSB7IHJldHVybiAhIShDQUNIRS51c2VyICYmIENQRlNfQ09PUkQuaW5kZXhPZihDQUNIRS51c2VyLmNwZikgPiAtMSk7IH0gY2F0Y2goZSl7IHJldHVybiBmYWxzZTsgfQp9CgovKiBBdGFsaG9zIGRlIG9wZXJhw6fDo28gKD9ob2plLCA\/c2ltZHVyLCA\/c2ltcmVzZXQgZSBvIGF0YWxobyBkZSBkZW1vIGRvIFNpbXVsYWRvKQogICBzw7MgZnVuY2lvbmFtIGVtIG5hdmVnYWRvciBxdWUgasOhIHBhc3NvdSBwZWxvIGdhdGUgZG8gYWRtaW4gKGFmX2FkbWluX29rKS4gKi8KZnVuY3Rpb24gaXNPcGVyYWNhbygpeyB0cnkgeyByZXR1cm4gISFsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMU1ArJ2FkbWluX29rJyk7IH0gY2F0Y2goZSl7IHJldHVybiBmYWxzZTsgfSB9CgovKiBRdWl6emVzIGRlbW86IDUgcXVlc3TDtWVzIENlcnRvL0VycmFkbyBwb3IgYXVsYSAocGFkcsOjbyBkbyBDSikuCiAgIENvbnRlw7pkbyBpbHVzdHJhdGl2bywgbyB0aW1lIGRlIHByb2Zlc3NvcmVzIHN1YnN0aXR1aSBuYSBmYXNlIDIuICovCnZhciBRVUlaX0JBTksgPSB7CiAgZW4wMjogWwogICAgeyBxOidObyByYXN0cmVhbWVudG8gZG8gY8OibmNlciBkZSBjb2xvIHV0ZXJpbm8sIGEgY2l0b2xvZ2lhIG9uY8OzdGljYSBkZXZlIHNlciBpbmljaWFkYSBhb3MgMjUgYW5vcyBlbSBtdWxoZXJlcyBxdWUgasOhIHRpdmVyYW0gYXRpdmlkYWRlIHNleHVhbC4nLCByOidDJyB9LAogICAgeyBxOidBIGNhbmRpZMOtYXNlIHZ1bHZvdmFnaW5hbCBkZSByZXBldGnDp8OjbyDDqSB0cmF0YWRhIGNvbSBtZXRyb25pZGF6b2wgb3JhbCBlbSBkb3NlIMO6bmljYS4nLCByOidFJyB9LAogICAgeyBxOidOYSBkb2Vuw6dhIGluZmxhbWF0w7NyaWEgcMOpbHZpY2EsIG8gdHJhdGFtZW50byBhbWJ1bGF0b3JpYWwgw6kgYWNlaXTDoXZlbCBlbSBxdWFkcm9zIGxldmVzLCBzZW0gc2luYWlzIGRlIGFic2Nlc3NvLicsIHI6J0MnIH0sCiAgICB7IHE6J08gYW50aWNvbmNlcGNpb25hbCBjb21iaW5hZG8gw6kgbyBtw6l0b2RvIGRlIGVzY29saGEgZW0gbXVsaGVyZXMgY29tIGVueGFxdWVjYSBjb20gYXVyYS4nLCByOidFJyB9LAogICAgeyBxOidBIHPDrW5kcm9tZSBkb3Mgb3bDoXJpb3MgcG9saWPDrXN0aWNvcyBleGlnZSwgcGVsbyBjcml0w6lyaW8gZGUgUm90dGVyZGFtLCBhIHByZXNlbsOnYSBzaW11bHTDom5lYSBkb3MgdHLDqnMgY3JpdMOpcmlvcyBkaWFnbsOzc3RpY29zLicsIHI6J0UnIH0KICBdLAogIGVuMDU6IFsKICAgIHsgcTonTmEgY2V0b2FjaWRvc2UgZGlhYsOpdGljYSwgYSBpbnN1bGluYSBzw7MgZGV2ZSBzZXIgaW5pY2lhZGEgYXDDs3MgY29ycmXDp8OjbyBkZSBwb3TDoXNzaW8gc8OpcmljbyBhYmFpeG8gZGUgMywzIG1FcS9MLicsIHI6J0MnIH0sCiAgICB7IHE6J0EgcG5ldW1vbmlhIGFkcXVpcmlkYSBuYSBjb211bmlkYWRlIGNvbSBDVVJCLTY1IGlndWFsIGEgemVybyBleGlnZSBpbnRlcm5hw6fDo28gaG9zcGl0YWxhci4nLCByOidFJyB9LAogICAgeyBxOidObyBpbmZhcnRvIGFndWRvIGRvIG1pb2PDoXJkaW8gY29tIHN1cHJhIGRlIFNULCBvIHRlbXBvIHBvcnRhLWJhbMOjbyBpZGVhbCDDqSBkZSBhdMOpIDkwIG1pbnV0b3MuJywgcjonQycgfSwKICAgIHsgcTonQSBkb2Vuw6dhIHJlbmFsIGNyw7RuaWNhIMOpIGRlZmluaWRhIHBvciBhbHRlcmHDp8O1ZXMgZXN0cnV0dXJhaXMgb3UgZnVuY2lvbmFpcyBtYW50aWRhcyBwb3IgbWFpcyBkZSAzIG1lc2VzLicsIHI6J0MnIH0sCiAgICB7IHE6J08gdHJhdGFtZW50byBkZSBwcmltZWlyYSBsaW5oYSBkYSBoaXBlcnRlbnPDo28gZW0gbmVncm9zIG7Do28gZGlhYsOpdGljb3MgcHJpb3JpemEgaW5pYmlkb3JlcyBkYSBFQ0EuJywgcjonRScgfQogIF0KfTsKZnVuY3Rpb24gcXVpekRvRXZlbnRvKGV2KXsKICB2YXIgYWRtID0gbnVsbDsgLy8gcHJvZHXDp8OjbzogcXVlc3TDtWVzIHbDqm0gU8OTIGRvIGJhbmNvCiAgcmV0dXJuIChDQUNIRS5xdWVzdG9lc1tldi5pZF0gfHwgW10pOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tIFNpbXVsYWRvIEZpbmFsIElOLVBMQVRGT1JNIC0tLS0tLS0tLS0tLS0tLS0KICAgTW9kZWxvIHJlcGxpY2FkbyBkbyBTaW11bGFkbyBFTkFNRUQgUkVBTCBkYSBwbGF0YWZvcm1hIGRvIE1FRAogICAocXVlc3Rpb25zX2RiLnNlbGxhYmxlX3N0dWRlbnRfZXhhbXMgbm8gQXRoZW5hOiAxMDAgcXVlc3TDtWVzIGRlCiAgIDQgYWx0ZXJuYXRpdmFzIEHigJNELCA1aCBkZSBwcm92YSwgamFuZWxhIGNvbSBpbsOtY2lvL2ZpbSBlIGdhYmFyaXRvCiAgIGxpYmVyYWRvIHPDsyBubyBlbmNlcnJhbWVudG8pICsgcmVncmFzIGRhIHBsYXRhZm9ybWEgZG8gQXRvIEZpbmFsCiAgIChyZXBvIGFyZWEtcGFydGljaXBhbnRlLWVuYW1lZCk6IGxvYmJ5IGNvbSBkZWNsYXJhw6fDo28gZGUgZmFpci1wbGF5LAogICBjcm9uw7RtZXRybyBzZW0gcGF1c2EsIG5hdmVnYWRvciBkZSBxdWVzdMO1ZXMsIG1hcmNhciBwYXJhIHJldmlzYXIsCiAgIGF1dG9zYXZlLCB0ZW50YXRpdmEgw7puaWNhLCBhbnRpLWPDs3BpYSwgZ2FiYXJpdG8gY29tZW50YWRvIHJldGlkbwogICBhdMOpIG8gZmltIGRhIGphbmVsYS4gUXVlc3TDtWVzIERFTU9OU1RSQVRJVkFTIGF0w6kgb3MgcHJvZmVzc29yZXMKICAgZW50cmVnYXJlbSAoYSBhYmEgU0lNVUxBRE8gZGEgcGxhbmlsaGEgYWluZGEgdGVtIG8gY29udGXDumRvIGRvIENKKS4gKi8KdmFyIFNJTV9DRkcgPSB7CiAgZW5hbWVkOiAgIHsgcXVlc3RvZXM6MTAwLCBkdXJhY2FvTWluOjMwMCwgaG9yYUFicmU6JzE0OjAwJywgaG9yYUZlY2hhOicxOTowMCcgfSwKICByZXZhbGlkYTogeyBxdWVzdG9lczoxMDAsIGR1cmFjYW9NaW46MzAwLCBob3JhQWJyZTonMTQ6MDAnLCBob3JhRmVjaGE6JzE5OjAwJyB9Cn07CnZhciBTSU1fQVJFQVMgPSBbJ0Nsw61uaWNhIE3DqWRpY2EnLCdDaXJ1cmdpYScsJ1BlZGlhdHJpYScsJ0dpbmVjb2xvZ2lhIGUgT2JzdGV0csOtY2lhJywnTWVkaWNpbmEgUHJldmVudGl2YSddOwpmdW5jdGlvbiBzaW11bGFkb1F1ZXN0b2VzKHByb3ZhKXsKICAvLyAyMCBxdWVzdMO1ZXMgcG9yIGdyYW5kZSDDoXJlYSAoZGlzdHJpYnVpw6fDo28gb2ZpY2lhbCBkbyBFTkFNRUQpCiAgdmFyIGNmZyA9IFNJTV9DRkdbcHJvdmFdIHx8IFNJTV9DRkcuZW5hbWVkOwogIHZhciBsZXRyYXMgPSBbJ0EnLCdCJywnQycsJ0QnXTsKICB2YXIgb3V0ID0gW107CiAgZm9yICh2YXIgaT0wO2k8Y2ZnLnF1ZXN0b2VzO2krKyl7CiAgICB2YXIgYXJlYSA9IFNJTV9BUkVBU1tNYXRoLmZsb29yKGkgLyAoY2ZnLnF1ZXN0b2VzIC8gU0lNX0FSRUFTLmxlbmd0aCkpXSB8fCBTSU1fQVJFQVNbMF07CiAgICBvdXQucHVzaCh7CiAgICAgIGFyZWE6IGFyZWEsCiAgICAgIHE6ICdRdWVzdMOjbyBkZW1vbnN0cmF0aXZhICcrKGkrMSkrJyDCtyAnK2FyZWErJy4gTm8gcHJvamV0byBmaW5hbCwgZW50cmEgYXF1aSB1bSBjYXNvIGNsw61uaWNvIGNvbXBsZXRvIG5vIHBhZHLDo28gSU5FUC9FTkFNRUQgZWxhYm9yYWRvIHBlbG9zIHByb2Zlc3NvcmVzOiBhcHJlc2VudGHDp8OjbyBkbyBwYWNpZW50ZSwgZGFkb3MgZGUgZXhhbWUgZSBhIHBlcmd1bnRhLicsCiAgICAgIGFsdHM6IGxldHJhcy5tYXAoZnVuY3Rpb24obCl7IHJldHVybiB7IGw6bCwgdDonQWx0ZXJuYXRpdmEgZGVtb25zdHJhdGl2YSAnK2wrJyBkYSBxdWVzdMOjbyAnKyhpKzEpKycuJyB9OyB9KSwKICAgICAgcjogbGV0cmFzW2kgJSA0XSwKICAgICAgYzogJ0NvbWVudMOhcmlvIGRlbW9uc3RyYXRpdm8gZG8gcHJvZmVzc29yIHBhcmEgYSBxdWVzdMOjbyAnKyhpKzEpKycgKCcrYXJlYSsnKTogZnVuZGFtZW50YcOnw6NvIGRhIGFsdGVybmF0aXZhIGNvcnJldGEgZSBwb3IgcXVlIGFzIGRlbWFpcyBlc3TDo28gZXJyYWRhcy4nCiAgICB9KTsKICB9CiAgcmV0dXJuIG91dDsKfQoKLyogUmFua2luZyBkZW1vIHBvciBwcm92YSAqLwp2YXIgUkFOS19ERU1PID0gewogIGVuYW1lZDogWydNaWNoYWVsIEYuJywnUGF0csOtY2lhIEcuJywnSm\/Do28gUC4nLCdnYWJyaWVsYSBmLicsJ1ZpY3TDs3JpYSBMLicsJ0Jyw6F1bGlvIFMuJywnSnVsaWFuYSBGLicsJ0NyaXN0aWFuIFIuJywnQ2FtaWxseSBNLicsJ0x1YW5hIFIuJywnUmVuYXRvIEEuJywnQmlhbmNhIFQuJywnRmVsaXBlIE4uJywnQWxpbmUgQy4nLCdEaWVnbyBNLiddLAogIHJldmFsaWRhOiBbJ1llc2VuaWEgUi4nLCdDYXJsb3MgVi4nLCdNYXLDrWEgUC4nLCdKb25hdGhhbiBPLicsJ0RhbmllbGEgUS4nLCdMdWlzIEYuJywnQW5kcmVhIE0uJywnUGVkcm8gSC4nLCdSb3NhIEUuJywnTWlndWVsIEEuJywnQ2FtaWxhIEQuJywnSm9zw6kgTC4nLCdQYW9sYSBTLicsJ0l2w6FuIEcuJywnS2FyZW4gQi4nXQp9OwoKLyogU2xpZGVzIGRhcyBhdWxhczogY29sZSBvIGxpbmsgZG8gRHJpdmUgZGUgY2FkYSBhdWxhIHF1YW5kbyBvIHRpbWUgZW52aWFyLgogICBDaGF2ZSA9IGlkIGRvIGV2ZW50byAoSk9STkFEQVMgYWNpbWEpLiBBdWxhIHNlbSBsaW5rIG1vc3RyYSAiU2xpZGVzIGVtIGJyZXZlIi4gKi8KdmFyIFNMSURFUyA9IHsKICBlbjAwOicnLCBlbjAxOicnLCBlbjAyOicnLCBlbjAzOicnLCBlbjA0OicnLCBlbjA1OicnLCBlbjA2OicnLCBlbjA3OicnLAogIGVuMDg6JycsIGVuMDk6JycsIGVuMTA6JycsIGVuMTE6JycsIGVuMTI6JycsIGVuMTM6JycsIGVuMTQ6JycsCiAgcnYwMTonJywgcnYwMjonJywgcnYwMzonJywgcnYwNDonJywgcnYwNTonJywgcnYwNjonJywgcnYwNzonJywKICBydjA4OicnLCBydjA5OicnLCBydjEwOicnLCBydjExOicnLCBydjEyOicnLCBydjEzOicnLCBydjE0OicnCn07CgovKiBBVUxBIElOQVVHVVJBTCBubyBZb3VUdWJlOiAiQWJlcnR1cmEgQXRvIEZpbmFsIEVOQU1FRCAyMDI2IiAobGluayBvZmljaWFsIGRvCiAgIElnb3IsIDExLzA4KS4gU3Vic3RpdHVpdSBhIHBsYXlsaXN0IGdlbsOpcmljYSBuYSBzZcOnw6NvICJQcsOzeGltYSB0cmFuc21pc3PDo28iCiAgIGRvIEluw61jaW86IG1hbmRhciBvIGFsdW5vIHBybyB2w61kZW8gZGEgZXN0cmVpYSBkZWl4YSBlbGUgYSB1bSB0b3F1ZSBkbwogICAiRGVmaW5pciBsZW1icmV0ZSIgTkFUSVZPIGRvIFlvdVR1YmUsIHF1ZSDDqSBvIHF1ZSBhIGdlbnRlIHF1ZXIgKGEgcGxheWxpc3QKICAgZXhpZ2lhIGNhw6dhciBhIGF1bGEgY2VydGEgYW50ZXMpLiBNZXNtbyBsaW5rIG5vIGNhbXBvIHl0IGRvIGVuMDAuICovCnZhciBZVF9BQkVSVFVSQSA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PXlKaWtZUUotSTRJJmxpc3Q9UExiMklFb3RLY1lJVSZpbmRleD0xNic7CgovKiBWw61kZW8gZGUgYm9hcy12aW5kYXMgKCJjb21lY2UgcG9yIGFxdWkiKSBkbyBJbsOtY2lvIOKAlCBlbWJlZCBQT1IgUFJPVkEuCiAgIFZhemlvID0gbyBjYXJkIE7Dg08gYXBhcmVjZSAobGlnYSBzb3ppbmhvIHF1YW5kbyBhIHByb3ZhIGdhbmhhIHVtIGVtYmVkKS4KICAgRU5BTUVEOiB2w61kZW8gb2ZpY2lhbCBubyBQYW5kYSBWaWRlbyAoSWdvciwgMTMvMDgpLiBSZXZhbGlkYTogYWluZGEgc2VtIHbDrWRlby4gKi8KdmFyIFZJREVPX0JWX1BPUl9QUk9WQSA9IHsKICBlbmFtZWQ6ICdodHRwczovL3BsYXllci12ei03MjhjZGE4MC0yZWYudHYucGFuZGF2aWRlby5jb20uYnIvZW1iZWQvP3Y9NzNjMDZiMTEtNGRkMC00MmRiLWIxYzQtZmU0YThiM2M3N2UzJywKICByZXZhbGlkYTogJycKfTsKCi8qIFBSw4pNSU9TIHJldGlyYWRvcyBURU1QT1JBUklBTUVOVEUgKHBlZGlkbyBkbyBJZ29yLCAxMS8wOCkgZW5xdWFudG8gYSByZWdyYSBkZQogICBpbmRpY2HDp8OjbyDDlyByYW5raW5nIMOpIGFjZXJ0YWRhLiBSZWxpZ2FyID0gdHJ1ZSAodm9sdGEgbyBjYXJkIE5vdGVib29rL1RhYmxldC8KICAgS2l0ICsgbyBzb3J0ZWlvIGRlIEtpdHMgbm8gcm9kYXDDqSBkYXMgZmFpeGFzKS4gKi8KdmFyIE1PU1RSQVJfUFJFTUlPUyA9IGZhbHNlOwoKLyogQlEgTUVEIGRlIFBvcnRhcyBBYmVydGFzIChCUSBncsOhdGlzIGVtIGFnb3N0by8yNik6IGNhcmQgcHLDqS1qb3JuYWRhIG5vIEluw61jaW8gKi8KdmFyIEJRTUVEX1VSTCA9ICdodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYnEtbWVkLXBvcnRhcy1hYmVydGFzLz91dG1fc291cmNlPWF0b2ZpbmFsJnV0bV9tZWRpdW09YXJlYS1kby1hbHVubyZ1dG1fY2FtcGFpZ249YnFtZWQtcG9ydGFzLWFiZXJ0YXMnOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFBST0RVw4fDg08gwrcgY2FtYWRhIGRlIGRhZG9zIFN1cGFiYXNlIChhdG8tZmluYWwtZW5hbWVkKQogICBPIGZyb250IHJvZGEgbm8gV1AgY29tIGEgQU5PTiBLRVk7IHNlZ3JlZG9zIGUgdmFsaWRhw6fDo28gdml2ZW0KICAgbmFzIFJQQ3MgU0VDVVJJVFkgREVGSU5FUiAoZGIvMDAwMSArIGRiLzAwMDIpLiBBIHNlc3PDo28gw6kgbyBDUEYKICAgZW0gbG9jYWxTdG9yYWdlIChhZl9jcGYsIHBhZHLDo28gQm9sw6NvKTsgbyBib290IGhpZHJhdGEgbyBDQUNIRQogICB2aWEgZXN0YWRvX3BhcnRpY2lwYW50ZSBlIG9zIHJlbmRlcnMgY29udGludWFtIFPDjU5DUk9OT1MuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKCi8qIFJlc2dhdGUgZGUgY2xpcXVlIChwcm9kdcOnw6NvKTogc2UgYWxndW0gc2NyaXB0IGRvIHRlbWEgKGRlbGF5LUpTIGRvIFdQCiAgIFJvY2tldCBldGMuKSBlbmdvbGlyIG8gY2xpcXVlIG51bSBsaW5rIGludGVybm8sIG5hdmVnYW1vcyBtZXNtbyBhc3NpbS4KICAgU2UgYSBuYXZlZ2HDp8OjbyBwYWRyw6NvIGFjb250ZWNlciwgYSBww6FnaW5hIGRlc2NhcnJlZ2EgZSBvIHRpbWVyIG1vcnJlLiAqLwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpewogIGlmIChlLmJ1dHRvbiAhPT0gMCB8fCBlLm1ldGFLZXkgfHwgZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5hbHRLZXkpIHJldHVybjsKICB2YXIgYSA9IGUudGFyZ2V0ICYmIGUudGFyZ2V0LmNsb3Nlc3QgPyBlLnRhcmdldC5jbG9zZXN0KCdhW2hyZWZdJykgOiBudWxsOwogIGlmICghYSB8fCBhLnRhcmdldCA9PT0gJ19ibGFuaycpIHJldHVybjsKICB2YXIgaHJlZiA9IGEuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJyc7CiAgaWYgKCFocmVmIHx8IGhyZWYuY2hhckF0KDApID09PSAnIycgfHwgL15qYXZhc2NyaXB0Oi9pLnRlc3QoaHJlZikpIHJldHVybjsKICB0cnkgeyBpZiAoYS5vcmlnaW4gJiYgYS5vcmlnaW4gIT09IGxvY2F0aW9uLm9yaWdpbikgcmV0dXJuOyB9IGNhdGNoKHgpe30KICB2YXIgZGVzdGlubyA9IGEuaHJlZjsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGxvY2F0aW9uLmhyZWYgPSBkZXN0aW5vOyB9LCAzNTApOwp9LCB0cnVlKTsKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKXsKICBpZiAoIWUuaXNUcnVzdGVkKSByZXR1cm47CiAgdmFyIGIgPSBlLnRhcmdldCAmJiBlLnRhcmdldC5jbG9zZXN0ID8gZS50YXJnZXQuY2xvc2VzdCgnYnV0dG9uW3R5cGU9InN1Ym1pdCJdJykgOiBudWxsOwogIGlmICghYiB8fCAhYi5mb3JtIHx8IGIuZGlzYWJsZWQpIHJldHVybjsKICB2YXIgZiA9IGIuZm9ybSwgdDAgPSBEYXRlLm5vdygpOwogIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgIC8vIG8gc3VibWl0IHJlYWwgREVTVEUgY2xpcXVlIHJvZG91PyAoY29tcGFyYXIgY29tIG8gaW5zdGFudGUgZG8gY2xpcXVlOwogICAgLy8gYSB2ZXJzw6NvIGFudGlnYSBjb21wYXJhdmEgY29tICJhZ29yYSIgZSByZS1kaXNwYXJhdmEgVE9ETyBzdWJtaXQg4oCUIFJQQwogICAgLy8gZHVwbGEgZW0gY2FkYSBsb2dpbi9jYWRhc3RybywgbWFzY2FyYWRhIHBlbGEgaWRlbXBvdMOqbmNpYSBkbyBzZXJ2aWRvcikKICAgIGlmICgoZi5fX3VsdGltb1N1Ym1pdCB8fCAwKSA+PSB0MCkgcmV0dXJuOwogICAgaWYgKCFmLmlzQ29ubmVjdGVkKSByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmx1eG8gasOhIGNvbmNsdWl1IGUgcmVtb3ZldSBvIGZvcm0KICAgIGlmIChmLmNoZWNrVmFsaWRpdHkgJiYgIWYuY2hlY2tWYWxpZGl0eSgpKSByZXR1cm47ICAgICAgIC8vIGNhbXBvIGZhbHRhbmRvOiBvIGJhbMOjbyBkbyBuYXZlZ2Fkb3IgZ3VpYQogICAgZi5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnc3VibWl0JywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pKTsKICB9LCA0MDApOwp9LCB0cnVlKTsKCgovKiAtLS0tLS0tLS0tIGxlbWJyZXRlcyBkZSBhdWxhICguaWNzOiBHb29nbGUvQXBwbGUvT3V0bG9vaykgLS0tLS0tLS0tLSAqLwp2YXIgSUNPX1NJTk8gPSAnPHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTggOGE2IDYgMCAxMC0xMiAwYzAgNy0zIDktMyA5aDE4cy0zLTItMy05Ii8+PHBhdGggZD0iTTEzLjcgMjFhMiAyIDAgMDEtMy40IDAiLz48L3N2Zz4nOwp2YXIgSUNPX1dBID0gJzxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAyYTEwIDEwIDAgMDAtOC42IDE1LjFMMiAyMmw1LTEuM0ExMCAxMCAwIDEwMTIgMnptMCAxOC4yYy0xLjUgMC0zLS40LTQuMy0xLjJsLS4zLS4yLTMgLjguOC0yLjktLjItLjNBOC4yIDguMiAwIDExMTIgMjAuMnptNC42LTYuMWMtLjMtLjEtMS41LS43LTEuNy0uOC0uMi0uMS0uNC0uMS0uNi4xLS4yLjMtLjcuOC0uOCAxLS4xLjItLjMuMi0uNS4xYTYuNyA2LjcgMCAwMS0zLjMtMi45Yy0uMy0uNCAwLS41LjEtLjdsLjQtLjVjLjEtLjIuMS0uMyAwLS41bC0uOC0xLjljLS4yLS41LS40LS40LS42LS40aC0uNWMtLjIgMC0uNS4xLS43LjMtLjkuOS0xLjEgMi4yLS4yIDMuN2ExMSAxMSAwIDAwNC4zIDRjLjYuMyAxLjUuNyAyLjQuNi44LS4xIDEuNi0uNiAxLjktMS4yLjItLjUuMi0xIC4xLTEuMS0uMS0uMi0uMy0uMi0uNS0uM3oiLz48L3N2Zz4nOwoKLyogLS0tLS0tLS0tLSBhcHAgaW5zdGFsw6F2ZWwgKFBXQSkgLS0tLS0tLS0tLQogICBDYXJkIGRlIGluc3RhbGHDp8OjbyByZW1vdmlkbyBkbyBJbsOtY2lvIGEgcGVkaWRvIGRvIElnb3IgKDA2LzA4KS4gTyBtYW5pZmVzdAogICBzZWd1ZSBuYXMgcMOhZ2luYXMgKGluc3RhbMOhdmVsIHBlbG8gbWVudSBkbyBuYXZlZ2Fkb3IpOyBvIGxpc3RlbmVyIGFiYWl4bwogICBjb250aW51YSBzdXByaW1pbmRvIG8gYmFubmVyIGF1dG9tw6F0aWNvIGRlIGluc3RhbGHDp8OjbyBkbyBDaHJvbWUuICovCndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmVpbnN0YWxscHJvbXB0JywgZnVuY3Rpb24oZSl7IGUucHJldmVudERlZmF1bHQoKTsgfSk7CgoKLyogLS0tLS0tLS0tLSBndWFyZGEgZG8gU2ltdWxhZG86IGF2aXNvIGFvIHNhaXIgZGEgcHJvdmEgLS0tLS0tLS0tLSAqLwp2YXIgcHJvdmFBdGl2YSA9IGZhbHNlOwpmdW5jdGlvbiBwcm92YUJlZm9yZVVubG9hZChlKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyBlLnJldHVyblZhbHVlID0gJyc7IH0KZnVuY3Rpb24gbGlnYXJHdWFyZGFQcm92YSgpewogIHByb3ZhQXRpdmEgPSB0cnVlOwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBwcm92YUJlZm9yZVVubG9hZCk7Cn0KZnVuY3Rpb24gZGVzbGlnYXJHdWFyZGFQcm92YSgpewogIHByb3ZhQXRpdmEgPSBmYWxzZTsKICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgcHJvdmFCZWZvcmVVbmxvYWQpOwp9CmZ1bmN0aW9uIGd1YXJkYVByb3ZhTW9kYWwocHJvc3NlZ3Vpcil7CiAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgZWwuY2xhc3NOYW1lID0gJ3NpbS1ndWFyZCc7CiAgZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9InNnLWNhcmQiPicrCiAgICAnPGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4Ij5TaW11bGFkbyBlbSBhbmRhbWVudG88L2Rpdj4nKwogICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1pbmstZGltKTttYXJnaW4tYm90dG9tOjhweCI+Vm9jw6ogZXN0w6Egbm8gbWVpbyBkbyBTaW11bGFkbyBGaW5hbC4gU2Ugc2FpciBkZXN0YSB0ZWxhLCA8YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+byBjcm9uw7RtZXRybyBjb250aW51YSBjb3JyZW5kbzwvYj4gZSBhIHByb3ZhIHNlZ3VlIHZhbGVuZG86IGFzIHJlc3Bvc3RhcyBkYWRhcyBhdMOpIGFxdWkgZmljYW0gc2FsdmFzIG5hIHN1YSBjb250YS48L3A+JysKICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO21hcmdpbi1ib3R0b206MThweCI+U2FpYSBhcGVuYXMgc2UgZm9yIG5lY2Vzc8OhcmlvLiBQYXJhIGVudmlhciBhIHByb3ZhLCB1c2UgbyBib3TDo28gRmluYWxpemFyIHNpbXVsYWRvLjwvcD4nKwogICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTBweDtmbGV4LXdyYXA6d3JhcCI+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgaWQ9InNnRmljYXIiPkNvbnRpbnVhciBhIHByb3ZhPC9idXR0b24+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9InNnU2FpciI+U2FpciBtZXNtbyBhc3NpbTwvYnV0dG9uPjwvZGl2PjwvZGl2Pic7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7CiAgZWwucXVlcnlTZWxlY3RvcignI3NnRmljYXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGVsLnJlbW92ZSgpOyB9KTsKICBlbC5xdWVyeVNlbGVjdG9yKCcjc2dTYWlyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgZWwucmVtb3ZlKCk7IGRlc2xpZ2FyR3VhcmRhUHJvdmEoKTsgcHJvc3NlZ3VpcigpOwogIH0pOwp9CgovKiBVUkxzIGRhIGVzdHJ1dHVyYSBkZSBww6FnaW5hcyBubyBXUCAocGFkcsOjbyBCb2zDo286IGEgVVJMIG11ZGEgYW8gbmF2ZWdhcikgKi8KdmFyIEFGX1VSTFMgPSB3aW5kb3cuX19BRl9VUkxTIHx8IHsgbHA6Jy4vJywgY2FkYXN0cm86JyNjYWRhc3RybycsIGFjZXNzYXI6JyMnLCBhcmVhOicjJyB9OwoKLyogVkVSVElDQUwgKG11bHRpLW5pY2hvKTogbyBwdWJsaWNhZG9yIGluamV0YSBfX0FGX1BST1ZBIHBvciBkZXBsb3kuIEVOQU1FRCBlCiAgIFJldmFsaWRhIHJvZGFtIG8gTUVTTU8gYnVuZGxlLCBjYWRhIHVtIG5hIHN1YSBVUkwgZSBubyBzZXUgU3VwYWJhc2UuIFNlbQogICBpbmplw6fDo28gKGFycXVpdm8gbG9jYWwpLCBjYWkgbm8gRU5BTUVELiAqLwp2YXIgQUZfUFJPVkEgPSAod2luZG93Ll9fQUZfUFJPVkEgPT09ICdyZXZhbGlkYScpID8gJ3JldmFsaWRhJyA6ICdlbmFtZWQnOwovKiBNYXJjYSBwb3IgcHJvdmE6IHPDsyBvIHLDs3R1bG8gY3VydG8gdXNhZG8gbmFzIGZyYXNlcyBkZSBVSSAodMOtdHVsb3MgZSBkYXRhcwogICBkYXMgYXVsYXMgasOhIHbDqm0gcHJvbnRvcyBkZSBKT1JOQURBU1twcm92YV0pLiAqLwp2YXIgQlJBTkQgPSB7CiAgZW5hbWVkOiAgIHsgY3VydGE6J0VOQU1FRCcsICAgc3ViOidFTkFNRUQgwrcgMjAyNicsICAgICAgICAgIHRhZzonQXRvIEZpbmFsIMK3IEVOQU1FRCAyMDI2JywgICAgICAgICAgICAgIGluYXVnOidQcmVtb25pw6fDo28gRU5BTUVEIDIwMjYnIH0sCiAgcmV2YWxpZGE6IHsgY3VydGE6J1JldmFsaWRhJywgc3ViOidSZXZhbGlkYSDCtyBJTkVQIDIwMjYuMicsIHRhZzonQXRvIEZpbmFsIMK3IFJldmFsaWRhIElORVAgMjAyNi4yJywgICAgICBpbmF1ZzonUHJlbW9uacOnw6NvIFJldmFsaWRhIElORVAgMjAyNi4yJyB9Cn07CnZhciBBRl9CUkFORCA9IEJSQU5EW0FGX1BST1ZBXSB8fCBCUkFORC5lbmFtZWQ7CgovKiBJbmRpY2HDp8OjbzogY2FwdHVyYSA\/cmVmPSBlbSBRVUFMUVVFUiBww6FnaW5hIGUgZ3VhcmRhIGF0w6kgbyBjYWRhc3RybyAqLwp0cnkgewogIHZhciBfbXJlZiA9IGxvY2F0aW9uLnNlYXJjaC5tYXRjaCgvWz8mXXJlZj0oW2EtejAtOV17NiwxNn0pL2kpOwogIGlmIChfbXJlZikgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFNQKydyZWYnLCBfbXJlZlsxXS50b0xvd2VyQ2FzZSgpKTsKfSBjYXRjaChlKXt9Ci8qIFN1cGFiYXNlIHBvciBkZXBsb3k6IG8gcHVibGljYWRvciBpbmpldGEgX19BRl9TVVBBX1VSTC9fX0FGX0FOT04gY29uZm9ybWUgbwogICB2ZXJ0aWNhbCAoRU5BTUVEIGUgUmV2YWxpZGEgdMOqbSBQUk9KRVRPUyBTRVBBUkFET1MpLiBGYWxsYmFjayA9IEVOQU1FRCwgcHJvCiAgIGFycXVpdm8gbG9jYWwgYWJyaXIgc2VtIGNvbmZpZy4gKi8KdmFyIFNVUEFfVVJMID0gd2luZG93Ll9fQUZfU1VQQV9VUkwgfHwgJ2h0dHBzOi8vbHNuZGx3YWRmaXJudWx6bXFrZXMuc3VwYWJhc2UuY28nOwp2YXIgU1VQQV9BTk9OID0gd2luZG93Ll9fQUZfQU5PTiB8fCAnZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKemRYQmhZbUZ6WlNJc0luSmxaaUk2SW14emJtUnNkMkZrWm1seWJuVnNlbTF4YTJWeklpd2ljbTlzWlNJNkltRnViMjRpTENKcFlYUWlPakUzT0RVM056UXpNakFzSW1WNGNDSTZNakV3TVRNMU1ETXlNSDAuQ1FVdEFiSHVvWGlNaURlcy03ekpoTmR4RkZBVEpDdEhab2U3eE9ubnhUZyc7CgovKiA9PT0gQ1JNOiBlc3BlbGhvIGRhIGluc2NyaWNhbyBwcm8gU0ZNQyB2aWEgVmVyc28gKGFkbWluLWFqYXgpLiBOYW8gYmxvcXVlaWEgbyBmbHV4byBkbyBhbHVuby4KICAgZG9uZSgpIG5hdmVnYSBuYSBob3JhIChsb2NhdGlvbi5ocmVmKSAtPiBvIFBPU1QgdGVtIHF1ZSBzYWlyIFNJTkNST05PIGNvbSBrZWVwYWxpdmU7CiAgIHBvciBpc3NvIGEgZ2VvIHJlc29sdmUgbm8gYm9vdCAocGFkcmFvIGRvIGZvcm0gY2xhc3NpY28pLCBuYW8gbm8gc3VibWl0LiA9PT0gKi8KdmFyIF9fYWZTZm1jVmVyc28gPSAzOwp2YXIgX19hZlNmbWNHZW8gPSB7IGNpdHk6ICcnLCByZWdpb246ICcnIH07CnRyeSB7CiAgZmV0Y2goJ2h0dHBzOi8vZXh0cmVtZS1pcC1sb29rdXAuY29tL2pzb24vP2tleT1rcmZHSHpyNzA1VVRoTW9qeDNhUCcpCiAgICAudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgLnRoZW4oZnVuY3Rpb24oZCl7CiAgICAgIF9fYWZTZm1jR2VvLmNpdHkgPSAoZCAmJiBkLmNpdHkpID8gZC5jaXR5IDogJyc7CiAgICAgIF9fYWZTZm1jR2VvLnJlZ2lvbiA9IChkICYmIGQucmVnaW9uKSA\/IGQucmVnaW9uIDogJyc7CiAgICB9KQogICAgLmNhdGNoKGZ1bmN0aW9uKCl7fSk7Cn0gY2F0Y2goZSl7fQpmdW5jdGlvbiBhZlNmbWNVdG0oKXsKICB2YXIgb3V0ID0geyB1dG1fc291cmNlOicnLCB1dG1fbWVkaXVtOicnLCB1dG1fY2FtcGFpZ246JycsIHV0bV90ZXJtOicnLCB1dG1fY29udGVudDonJyB9OwogIHZhciBrcyA9IE9iamVjdC5rZXlzKG91dCk7CiAgdmFyIGFueSA9IGZhbHNlOwogIHRyeSB7CiAgICB2YXIgcXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAga3MuZm9yRWFjaChmdW5jdGlvbihrKXsgdmFyIHYgPSBxcy5nZXQoayk7IGlmICh2KSB7IG91dFtrXSA9IHY7IGFueSA9IHRydWU7IH0gfSk7CiAgfSBjYXRjaChlKXt9CiAgaWYgKGFueSkgcmV0dXJuIG91dDsKICB2YXIgcmF3ID0gbnVsbDsKICB0cnkgewogICAgdmFyIHJvdyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKS5maW5kKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5pbmRleE9mKCdlc3RyYXRlZ2lhX3V0bT0nKSA9PT0gMDsgfSk7CiAgICBpZiAocm93KSByYXcgPSBkZWNvZGVVUklDb21wb25lbnQocm93LnN1YnN0cmluZyhyb3cuaW5kZXhPZignPScpICsgMSkpOwogIH0gY2F0Y2goZSl7fQogIGlmICghcmF3KSB7IHRyeSB7IHJhdyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXN0cmF0ZWdpYV91dG0nKTsgfSBjYXRjaChlKXt9IH0KICBpZiAocmF3KSB7CiAgICB0cnkgewogICAgICB2YXIgcCA9IEpTT04ucGFyc2UocmF3KTsKICAgICAgaWYgKHAgJiYgcC50cyAmJiBwLnYgJiYgKERhdGUubm93KCkgLSBwLnRzKSA8PSA0OCozNmU1KSB7CiAgICAgICAga3MuZm9yRWFjaChmdW5jdGlvbihrKXsgaWYgKHAudltrXSkgb3V0W2tdID0gcC52W2tdOyB9KTsKICAgICAgfQogICAgfSBjYXRjaChlKXt9CiAgfQogIHJldHVybiBvdXQ7Cn0KZnVuY3Rpb24gYWZTZm1jRW52aWFyKCl7CiAgdmFyIGcgPSBmdW5jdGlvbihpZCl7IHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgcmV0dXJuIChlbCAmJiBlbC52YWx1ZSkgPyBlbC52YWx1ZSA6ICcnOyB9OwogIHZhciB1dG0gPSBhZlNmbWNVdG0oKTsKICB2YXIgYXJlYSA9ICcnOwogIHRyeSB7IGFyZWEgPSAod2luZG93Ll9fQUZfVVJMUyAmJiB3aW5kb3cuX19BRl9VUkxTLmFyZWEpID8gd2luZG93Ll9fQUZfVVJMUy5hcmVhLnNwbGl0KCc\/JylbMF0gOiAnJzsgfSBjYXRjaChlKXt9CiAgdmFyIGYgPSB7CiAgICBOb21lX0NvbXBsZXRvOiBnKCdmTm9tZScpLAogICAgRW1haWw6IGcoJ2ZFbWFpbCcpLAogICAgVGVsZWZvbmU6IGcoJ2ZXaGF0cycpLAogICAgQW5vX2RlX0Zvcm1hdHVyYTogZygnZk1vbWVudG8nKSwKICAgIFBhZ2luYV9PcmlnZW06IHdpbmRvdy5sb2NhdGlvbi5ocmVmLAogICAgdXRtX3NvdXJjZTogdXRtLnV0bV9zb3VyY2UsIHV0bV9tZWRpdW06IHV0bS51dG1fbWVkaXVtLCB1dG1fY2FtcGFpZ246IHV0bS51dG1fY2FtcGFpZ24sCiAgICB1dG1fdGVybTogdXRtLnV0bV90ZXJtLCB1dG1fY29udGVudDogdXRtLnV0bV9jb250ZW50LAogICAgY2hhdmVfZGU6ICcwMV9FTUVEX0xFQURTX1RPVEFJUycsCiAgICBtaWQ6ICc1MTUwMDkwMTgnLAogICAgQ29yaW5nYV8wMjogYXJlYSwKICAgIEludGVyZXNzZV9Db25jdXJzbzogJ2VtZWQnLAogICAgd2VsY29tZTogJ29mZicsCiAgICBJbnRlcmVzc2VfQXJlYTogJ0VNRURfQXJlYScsCiAgICBDb3JpbmdhXzAxOiAnbGFuZGluZy1wYWdlJywKICAgIE1vZG9fZGVfZW50cmFkYTogJ2xhbmRpbmctcGFnZScsCiAgICBJbnRlcmVzc2VfRXZlbnRvOiAod2luZG93Ll9fQUZfUFJPVkEgPT09ICdyZXZhbGlkYScpID8gJ0F0byBGaW5hbCBSZXZhbGlkYSBJTkVQIDIwMjYuMicgOiAnQXRvIEZpbmFsIEVOQU1FRCAyMDI2JywKICAgIGRldl96YXBwOiAnb2ZmJywKICAgIENpZGFkZV9kZV9PcmlnZW1fZG9fSVA6ICcnLAogICAgRXN0YWRvX2RlX09yaWdlbV9kb19JUDogJycKICB9OwogIGlmICghZi5FbWFpbCkgcmV0dXJuOwogIGYuQ2lkYWRlX2RlX09yaWdlbV9kb19JUCA9IF9fYWZTZm1jR2VvLmNpdHk7CiAgZi5Fc3RhZG9fZGVfT3JpZ2VtX2RvX0lQID0gX19hZlNmbWNHZW8ucmVnaW9uOwogIHZhciBsZWFkID0gT2JqZWN0LmtleXMoZikubWFwKGZ1bmN0aW9uKGspeyByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGspICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZba10pOyB9KS5qb2luKCcmJyk7CiAgdmFyIGNvcnBvID0gJ2FjdGlvbj1hamF4X3N1Ym1pdF9mb3JtX25ldyZsZWFkPScgKyBlbmNvZGVVUklDb21wb25lbnQobGVhZCk7CiAgZmV0Y2goJ2h0dHBzOi8vbWt0LmVzdHJhdGVnaWEuY29tL21lZC93cC1hZG1pbi9hZG1pbi1hamF4LnBocCcsIHsKICAgIG1ldGhvZDogJ1BPU1QnLAogICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCcgfSwKICAgIGJvZHk6IGNvcnBvLAogICAga2VlcGFsaXZlOiB0cnVlCiAgfSkuY2F0Y2goZnVuY3Rpb24oKXt9KTsKfQovKiBFdmVudG8gZGUgY29udmVyc2FvIHBybyBHVE0gKEdUTS1ONU43Skg4KTogYSBiYXRlcmlhIGRlIExlYWQgKE1ldGEgUGl4ZWwsIEdBNAogICBnZW5lcmF0ZV9sZWFkLCBCaW5nKSBkaXNwYXJhIG5vIGV2ZW50byBjdXN0b21pemFkbyAnZm9ybV9zdWJtaXQnIGVtIHF1YWxxdWVyIHBhZ2luYQogICBkbyBta3QuIFJlcGxpY2EgZG8gcHVzaEZvcm1TdWJtaXRUb0RhdGFMYXllciBkbyBmb3JtIGNsYXNzaWNvICsgdXNlckRhdGEuKiAoY2FkZWlhCiAgIHByaW1hcmlhIGRvIGFkdmFuY2VkIG1hdGNoaW5nKSArIGlucHV0cyBvY3VsdG9zICNlbWFpbC8jZmlyc3RfbmFtZS8jcGhvbmUgKGNhZGVpYSBkZQogICBmYWxsYmFjayBkb3MgbWFjcm9zKS4gZG9uZSgpIG5hdmVnYSBuYSBob3JhLCBlbnRhbyBzZWd1cmFtb3MgYSBuYXZlZ2FjYW8gbm8KICAgZXZlbnRDYWxsYmFjayBjb20gdGV0byBkZSA5MDBtcyBwcm9zIHBpeGVscyBzYWlyZW0uICovCmZ1bmN0aW9uIGFmR3RtTGVhZChjYil7CiAgdmFyIGZpbSA9IGZhbHNlOwogIHZhciBnbyA9IGZ1bmN0aW9uKCl7IGlmIChmaW0pIHJldHVybjsgZmltID0gdHJ1ZTsgdHJ5IHsgY2IoKTsgfSBjYXRjaChlKXt9IH07CiAgdHJ5IHsKICAgIHZhciBnID0gZnVuY3Rpb24oaWQpeyB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7IHJldHVybiAoZWwgJiYgZWwudmFsdWUpID8gZWwudmFsdWUgOiAnJzsgfTsKICAgIHZhciBub21lID0gZygnZk5vbWUnKSwgZW1haWwgPSBnKCdmRW1haWwnKSwgdGVsID0gZygnZldoYXRzJyk7CiAgICB2YXIgcGFydGVzID0gbm9tZS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgdmFyIHByaW1laXJvID0gcGFydGVzLmxlbmd0aCA\/IHBhcnRlc1swXS50b0xvd2VyQ2FzZSgpIDogJyc7CiAgICB2YXIgdWx0aW1vID0gcGFydGVzLmxlbmd0aCA+IDEgPyBwYXJ0ZXNbcGFydGVzLmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCkgOiAnJzsKICAgIHZhciBtayA9IGZ1bmN0aW9uKGlkLCB2YWwpewogICAgICBpZiAoIXZhbCkgcmV0dXJuOwogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICAgIGlmICghZWwpIHsgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOyBlbC50eXBlID0gJ2hpZGRlbic7IGVsLmlkID0gaWQ7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpOyB9CiAgICAgIGVsLnZhbHVlID0gdmFsOwogICAgfTsKICAgIG1rKCdmaXJzdF9uYW1lJywgbm9tZSk7IG1rKCdlbWFpbCcsIGVtYWlsKTsgbWsoJ3Bob25lJywgdGVsKTsKICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdOwogICAgd2luZG93LmRhdGFMYXllci5wdXNoKHsKICAgICAgZXZlbnQ6ICdmb3JtX3N1Ym1pdCcsCiAgICAgIGV2ZW50TW9kZWw6IHsKICAgICAgICBmb3JtX2lkOiAnZm9ybXNfbGF5b3V0JywKICAgICAgICBmb3JtX25hbWU6IG51bGwsCiAgICAgICAgZm9ybV9kZXN0aW5hdGlvbjogd2luZG93LmxvY2F0aW9uLmhyZWYsCiAgICAgICAgZm9ybV9sZW5ndGg6IDUsCiAgICAgICAgZm9ybV9zdWJtaXRfdGV4dDogJ0luc2NyZXZlciBlIGVudHJhcicsCiAgICAgICAgZW1haWw6IGVtYWlsCiAgICAgIH0sCiAgICAgIHVzZXJEYXRhOiB7IGVtYWlsOiBlbWFpbC50b0xvd2VyQ2FzZSgpLCBmaXJzdE5hbWU6IHByaW1laXJvLCBsYXN0TmFtZTogdWx0aW1vLCBwaG9uZTogdGVsIH0sCiAgICAgIGVtYWlsOiBlbWFpbCwKICAgICAgZXZlbnRDYWxsYmFjazogZ28sCiAgICAgIGV2ZW50VGltZW91dDogNzAwCiAgICB9KTsKICB9IGNhdGNoKGUpeyBnbygpOyB9CiAgc2V0VGltZW91dChnbywgOTAwKTsKfQpmdW5jdGlvbiBzYlJwYyhmbiwgYm9keSl7CiAgcmV0dXJuIGZldGNoKFNVUEFfVVJMICsgJy9yZXN0L3YxL3JwYy8nICsgZm4sIHsKICAgIG1ldGhvZDogJ1BPU1QnLAogICAgaGVhZGVyczogeyAnYXBpa2V5JzogU1VQQV9BTk9OLCAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIFNVUEFfQU5PTiwgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSB8fCB7fSkKICB9KS50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pOwp9CmZ1bmN0aW9uIHNiU2VsZWN0KHBhdGgpewogIHJldHVybiBmZXRjaChTVVBBX1VSTCArICcvcmVzdC92MS8nICsgcGF0aCwgewogICAgaGVhZGVyczogeyAnYXBpa2V5JzogU1VQQV9BTk9OLCAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIFNVUEFfQU5PTiB9CiAgfSkudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpOyB9KTsKfQoKLyogY2FjaGUgaGlkcmF0YWRvIG5vIGJvb3Q7IG9zIHJlbmRlcnMgbGVlbSBkYXF1aSBkZSBmb3JtYSBzw61uY3JvbmEgKi8KdmFyIENBQ0hFID0gewogIHVzZXI6IG51bGwsICAgICAgICAgIC8vIHtub21lLCBlbWFpbCwgcHJvdmEsIGNwZn0KICBjaGVja2luczoge30sICAgICAgICAvLyBldklkIC0+IHthb192aXZvLCB0c30KICByZXNwb3N0YXM6IHt9LCAgICAgICAvLyBxdWVzdGFvX2lkIC0+IHtldmVudG9faWQsIGxldHJhLCBhY2VydG91LCBjb3JyZXRhLCBjb21lbnRhcmlvfQogIHF1ZXN0b2VzOiB7fSwgICAgICAgIC8vIGV2SWQgLT4gW3tpZCwgb3JkZW0sIGFyZWEsIHEsIGFsdHN9XQogIHNpbVJlczogbnVsbCwgICAgICAgIC8vIHthY2VydG9zLCB0b3RhbCwgcmVzcG9zdGFzfQogIHNpbVByb2c6IG51bGwsICAgICAgIC8vIHtpbmljaWFkb19lbSwgcmVzcG9zdGFzLCBtYXJjYWRhc30KICByYW5raW5nOiBudWxsCn07Ci8qIFNlc3PDo28gUkVTSUxJRU5URTogbyBTYWZhcmkgZG8gaVBob25lIChtb2RvIHByaXZhZG8gLyBibG9xdWVpbyBkZSBjb29raWVzKQogICBwb2RlIHJlY3VzYXIgbyBsb2NhbFN0b3JhZ2UuIFNlbSBmYWxsYmFjaywgYSBzZXNzw6NvIG1vcnJlIG5hIHRyb2NhIGRlCiAgIHDDoWdpbmEgZSBvIGFsdW5vIGZpY2EgcHJlc28gbm8gbGHDp28gYWNlc3NhciDihpIgw6FyZWEg4oaSIGFjZXNzYXIuICovCnZhciBfc2Vzc2FvTWVtID0gbnVsbDsKZnVuY3Rpb24gX2Nvb2tpZUdldChuKXsKICB2YXIgbSA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKF58OyApJyArIG4gKyAnPShbXjtdKiknKTsKICByZXR1cm4gbSA\/IGRlY29kZVVSSUNvbXBvbmVudChtWzJdKSA6IG51bGw7Cn0KZnVuY3Rpb24gX2Nvb2tpZVNldChuLCB2LCBkaWFzKXsKICB0cnkgewogICAgZG9jdW1lbnQuY29va2llID0gbiArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2KSArICc7cGF0aD0vbWVkL2F0by1maW5hbC1lbmFtZWQvO21heC1hZ2U9JyArCiAgICAgIChkaWFzID8gZGlhcyAqIDg2NDAwIDogMCkgKyAnO1NhbWVTaXRlPUxheCcgKyAobG9jYXRpb24ucHJvdG9jb2wgPT09ICdodHRwczonID8gJztTZWN1cmUnIDogJycpOwogIH0gY2F0Y2goZSl7fQp9CmZ1bmN0aW9uIHNlc3Nhb1NldChjcGYpewogIF9zZXNzYW9NZW0gPSBjcGY7CiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFNQKydjcGYnLCBjcGYpOyB9IGNhdGNoKGUpe30KICBfY29va2llU2V0KExTUCsnY3BmJywgY3BmLCAzMCk7Cn0KZnVuY3Rpb24gc2Vzc2FvTGltcGEoKXsKICBfc2Vzc2FvTWVtID0gbnVsbDsKICB0cnkgeyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMU1ArJ2NwZicpOyB9IGNhdGNoKGUpe30KICBfY29va2llU2V0KExTUCsnY3BmJywgJycsIDApOwp9CmZ1bmN0aW9uIGNwZlNhbHZvKCl7CiAgdmFyIHYgPSBudWxsOwogIHRyeSB7IHYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMU1ArJ2NwZicpOyB9IGNhdGNoKGUpe30KICBpZiAoIXYpIHYgPSBfY29va2llR2V0KExTUCsnY3BmJyk7CiAgaWYgKCF2KSB2ID0gX3Nlc3Nhb01lbTsKICBpZiAodikgeyBfc2Vzc2FvTWVtID0gdjsgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFNQKydjcGYnLCB2KTsgfSBjYXRjaChlKXt9IH0KICByZXR1cm4gdjsKfQpmdW5jdGlvbiBhcm1hemVuYW1lbnRvT2soKXsKICB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnX190JywgJzEnKTsgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ19fdCcpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaChlKXsgcmV0dXJuIGZhbHNlOyB9Cn0KCmZ1bmN0aW9uIGhpZHJhdGFyKCl7CiAgdmFyIGNwZiA9IGNwZlNhbHZvKCk7CiAgaWYgKCFjcGYpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpOwogIHJldHVybiBQcm9taXNlLmFsbChbCiAgICBzYlJwYygnZXN0YWRvX3BhcnRpY2lwYW50ZScsIHsgcF9jcGY6IGNwZiB9KSwKICAgIHNiU2VsZWN0KCdxdWl6X3F1ZXN0b2VzP3NlbGVjdD1pZCxldmVudG9faWQsb3JkZW0sYXJlYSxlbnVuY2lhZG8sYWx0ZXJuYXRpdmFzJm9yZGVyPW9yZGVtJykKICBdKS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICB2YXIgZXN0ID0gcmVzWzBdLCBxcyA9IHJlc1sxXTsKICAgIGlmICghZXN0IHx8IGVzdC5zdGF0dXMgIT09ICdvaycpIHJldHVybiBmYWxzZTsKICAgIENBQ0hFLnVzZXIgPSB7IG5vbWU6IGVzdC5ub21lLCBlbWFpbDogZXN0LmVtYWlsLCBwcm92YTogZXN0LnByb3ZhLCBjcGY6IGNwZiB9OwogICAgQ0FDSEUucmVmQ29kZSA9IGVzdC5yZWZfY29kZSB8fCAnJzsKICAgIENBQ0hFLmluZGljYWNvZXMgPSBlc3QuaW5kaWNhY29lcyB8fCB7IHZhbGlkYXM6IDAsIHBlbmRlbnRlczogMCwgbGlzdGE6IFtdIH07CiAgICBDQUNIRS5jaGVja2lucyA9IHt9OwogICAgT2JqZWN0LmtleXMoZXN0LmNoZWNraW5zIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uKGV2KXsKICAgICAgQ0FDSEUuY2hlY2tpbnNbZXZdID0geyBhb1Zpdm86IGVzdC5jaGVja2luc1tldl0uYW9fdml2bywgdHM6IGVzdC5jaGVja2luc1tldl0udHMgKiAxMDAwIH07CiAgICB9KTsKICAgIENBQ0hFLnJlc3Bvc3RhcyA9IHt9OwogICAgKGVzdC5yZXNwb3N0YXMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24ocil7IENBQ0hFLnJlc3Bvc3Rhc1tyLnF1ZXN0YW9faWRdID0gcjsgfSk7CiAgICBDQUNIRS5zaW1SZXMgPSBlc3Quc2ltdWxhZG9fcmVzdWx0IHx8IG51bGw7CiAgICBDQUNIRS5zaW1Qcm9nID0gZXN0LnNpbXVsYWRvX3Byb2dyZXNzIHx8IG51bGw7CiAgICBDQUNIRS5xdWVzdG9lcyA9IHt9OwogICAgKEFycmF5LmlzQXJyYXkocXMpID8gcXMgOiBbXSkuZm9yRWFjaChmdW5jdGlvbihyb3cpewogICAgICAoQ0FDSEUucXVlc3RvZXNbcm93LmV2ZW50b19pZF0gPSBDQUNIRS5xdWVzdG9lc1tyb3cuZXZlbnRvX2lkXSB8fCBbXSkucHVzaCh7CiAgICAgICAgaWQ6IHJvdy5pZCwgb3JkZW06IHJvdy5vcmRlbSwgYXJlYTogcm93LmFyZWEsIHE6IHJvdy5lbnVuY2lhZG8sIGFsdHM6IHJvdy5hbHRlcm5hdGl2YXMKICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiB0cnVlOwogIH0pOwp9CgovKiBzdG9yZTogTUVTTUEgaW50ZXJmYWNlIHPDrW5jcm9uYSBkbyBwcm90w7N0aXBvLCBzZXJ2aWRhIHBlbG8gQ0FDSEUgKi8KdmFyIHN0b3JlID0gewogIF9rOiBmdW5jdGlvbihrKXsgcmV0dXJuIExTUCArIGs7IH0sCiAgZ2V0OiBmdW5jdGlvbihrLCBmYil7IHRyeSB7IHZhciB2ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fayhrKSk7IHJldHVybiB2ID8gSlNPTi5wYXJzZSh2KSA6IChmYj09PXVuZGVmaW5lZD8gbnVsbDogZmIpOyB9IGNhdGNoKGUpeyByZXR1cm4gKGZiPT09dW5kZWZpbmVkPyBudWxsOiBmYik7IH0gfSwKICBzZXQ6IGZ1bmN0aW9uKGssIHYpeyB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9rKGspLCBKU09OLnN0cmluZ2lmeSh2KSk7IH0gY2F0Y2goZSl7fSB9LAoKICBzZXNzaW9uOiBmdW5jdGlvbigpeyByZXR1cm4gY3BmU2Fsdm8oKTsgfSwKICBsb2dvdXQ6IGZ1bmN0aW9uKCl7IHNlc3Nhb0xpbXBhKCk7IH0sCiAgbWU6IGZ1bmN0aW9uKCl7IHJldHVybiBDQUNIRS51c2VyOyB9LAoKICBjaGVja2luczogZnVuY3Rpb24oKXsgcmV0dXJuIENBQ0hFLmNoZWNraW5zOyB9LAoKICAvLyBtaXNzw6NvICJjdW1wcmlkYSIgPSBUT0RBUyBhcyBxdWVzdMO1ZXMgZG8gZGlhIHJlc3BvbmRpZGFzIG5vIHNlcnZpZG9yCiAgbWlzc29lczogZnVuY3Rpb24oKXsKICAgIHZhciBvdXQgPSB7fTsKICAgIE9iamVjdC5rZXlzKENBQ0hFLnF1ZXN0b2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGV2KXsKICAgICAgdmFyIHFzID0gQ0FDSEUucXVlc3RvZXNbZXZdOwogICAgICBpZiAoIXFzLmxlbmd0aCkgcmV0dXJuOwogICAgICB2YXIgcmVzcCA9IHFzLmZpbHRlcihmdW5jdGlvbihxKXsgcmV0dXJuIENBQ0hFLnJlc3Bvc3Rhc1txLmlkXTsgfSk7CiAgICAgIGlmIChyZXNwLmxlbmd0aCA9PT0gcXMubGVuZ3RoKSB7CiAgICAgICAgb3V0W2V2XSA9IHsKICAgICAgICAgIGFjZXJ0b3M6IHJlc3AuZmlsdGVyKGZ1bmN0aW9uKHEpeyByZXR1cm4gQ0FDSEUucmVzcG9zdGFzW3EuaWRdLmFjZXJ0b3U7IH0pLmxlbmd0aCwKICAgICAgICAgIHRvdGFsOiBxcy5sZW5ndGgsCiAgICAgICAgICB0czogMAogICAgICAgIH07CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIG91dDsKICB9LAoKICAvLyBub3RhICUgZG8gU2ltdWxhZG8gRmluYWwgKHJlc3VsdGFkbyBkbyBzZXJ2aWRvcikKICBzaW11bGFkbzogZnVuY3Rpb24oKXsKICAgIGlmICghQ0FDSEUuc2ltUmVzIHx8ICFDQUNIRS5zaW1SZXMudG90YWwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHsgbm90YTogTWF0aC5yb3VuZCgxMDAgKiBDQUNIRS5zaW1SZXMuYWNlcnRvcyAvIENBQ0hFLnNpbVJlcy50b3RhbCkgfTsKICB9Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tIHV0aWxpZGFkZXMgLS0tLS0tLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiAkKHMsIGVsKXsgcmV0dXJuIChlbHx8ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3Iocyk7IH0KZnVuY3Rpb24gJCQocywgZWwpeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGVsfHxkb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChzKSk7IH0KLyogZXNjIGVzY2FwYSBUQU1Cw4lNIGFzcGFzICgiICcpOiBhIHZhcmlhbnRlIGFudGlnYSB0ZXh0Q29udGVudC0+aW5uZXJIVE1MIHPDswogICBlc2NhcGF2YSAmIDwgPiwgZW50w6NvIFVSTC9ub21lIGludGVycG9sYWRvIGRlbnRybyBkZSB1bSBhdHJpYnV0byAoc3JjPSIuLiIsCiAgIGhyZWY9Ii4uIikgcG9kaWEgcXVlYnJhciBvIGF0cmlidXRvIGUgcGxhbnRhciBvbi4uLj0gKFhTUyB2aWEgbWlkaWFIVE1MIGUgdmlhCiAgIGxldHJhIGRlIGFsdGVybmF0aXZhKS4gQXVkaXRvcmlhIDExLzA4LiAqLwpmdW5jdGlvbiBlc2Mocyl7IHJldHVybiBTdHJpbmcocz09bnVsbD8nJzpzKS5yZXBsYWNlKC9bJjw+IiddL2csIGZ1bmN0aW9uKGMpewogIHJldHVybiB7JyYnOicmYW1wOycsJzwnOicmbHQ7JywnPic6JyZndDsnLCciJzonJnF1b3Q7JywiJyI6JyYjMzk7J31bY107IH0pOyB9CmZ1bmN0aW9uIHRvYXN0KG1zZyl7IHZhciB0PSQoJyN0b2FzdCcpOyBpZighdCkgcmV0dXJuOyB0LnRleHRDb250ZW50PW1zZzsgdC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7IGNsZWFyVGltZW91dCh0b2FzdC5fdCk7IHRvYXN0Ll90PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgdC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7IH0sIDMyMDApOyB9CmZ1bmN0aW9uIGRhdGFCUihpc28peyB2YXIgcD1pc28uc3BsaXQoJy0nKTsgcmV0dXJuIHBbMl0rJy8nK3BbMV07IH0KdmFyIE1FU0VTID0gWydKQU4nLCdGRVYnLCdNQVInLCdBQlInLCdNQUknLCdKVU4nLCdKVUwnLCdBR08nLCdTRVQnLCdPVVQnLCdOT1YnLCdERVonXTsKdmFyIE1FU0VTX0ZVTEwgPSBbJ0phbmVpcm8nLCdGZXZlcmVpcm8nLCdNYXLDp28nLCdBYnJpbCcsJ01haW8nLCdKdW5obycsJ0p1bGhvJywnQWdvc3RvJywnU2V0ZW1icm8nLCdPdXR1YnJvJywnTm92ZW1icm8nLCdEZXplbWJybyddOwovKiBhY2VpdGEgL2xpdmUvSUQsIHlvdXR1LmJlL0lELCAvZW1iZWQvSUQgRSB3YXRjaD92PUlEIChhIEF1bGEgSW5hdWd1cmFsIHZlaW8KICAgbm8gZm9ybWF0byB3YXRjaD92PSwgcXVlIGNhw61hIGVtICJ3YXRjaCIgZSBxdWVicmF2YSBhIHRodW1iKSAqLwpmdW5jdGlvbiB5dFRodW1iKHVybCl7CiAgaWYgKCF1cmwpIHJldHVybiBudWxsOwogIHZhciBtID0gdXJsLm1hdGNoKC9bPyZddj0oW1x3LV17Nix9KS8pIHx8IHVybC5tYXRjaCgvXC8oPzpsaXZlfGVtYmVkKVwvKFtcdy1dezYsfSkvKSB8fCB1cmwubWF0Y2goL3lvdXR1XC5iZVwvKFtcdy1dezYsfSkvKTsKICB2YXIgaWQgPSBtID8gbVsxXSA6IHVybC5zcGxpdCgnLycpLnBvcCgpLnNwbGl0KCc\/JylbMF07CiAgcmV0dXJuICdodHRwczovL2kueXRpbWcuY29tL3ZpLycraWQrJy9ocWRlZmF1bHQuanBnJzsKfQpmdW5jdGlvbiBkaWFNZXMoaXNvKXsgdmFyIHA9aXNvLnNwbGl0KCctJyk7IHJldHVybiB7IGQ6cFsyXSwgbTpNRVNFU1twYXJzZUludChwWzFdLDEwKS0xXSB9OyB9CmZ1bmN0aW9uIGRpYXMoYSwgYil7IHJldHVybiBNYXRoLnJvdW5kKChuZXcgRGF0ZShiKydUMTI6MDA6MDAnKSAtIG5ldyBEYXRlKGErJ1QxMjowMDowMCcpKSAvIDg2NDAwMDAwKTsgfQoKLyogRGF0YSBzaW11bGFkYSBkbyBwcm90w7N0aXBvOiBmb3JhIGRhIGphbmVsYSBkYSBqb3JuYWRhLCBvIHBhaW5lbCB1c2EgdW1hCiAgIGRhdGEgZGVtbyBubyBtZWlvIGRhIDLCqiBzZW1hbmEgcGFyYSBkYXIgdmlkYSDDoCBkZW1vbnN0cmHDp8Ojby4KICAgU29icmVzY3JldmEgY29tID9ob2plPUFBQUEtTU0tREQgbmEgVVJMLiAqLwpmdW5jdGlvbiBob2plSVNPKGpvcm5hZGEpewogIC8vIFBST0RVw4fDg086IHNlbXByZSBhIGRhdGEgcmVhbCBlbSBCUlQgKG8gc2Vydmlkb3IgcmV2YWxpZGEgdG9kYXMgYXMgZGF0YXMpCiAgdmFyIGlzbyA9IG5ldyBEYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdzdicsIHsgdGltZVpvbmU6ICdBbWVyaWNhL1Nhb19QYXVsbycgfSk7CiAgcmV0dXJuIHsgaXNvOiBpc28sIHNpbXVsYWRhOiBmYWxzZSB9Owp9CgovKiAtLS0tLS0tLS0tLS0tLS0tIHBvbnR1YcOnw6NvIC0tLS0tLS0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gY2FsY1BvbnRvcyh1c2VyKXsKICB2YXIgaiA9IEpPUk5BREFTW3VzZXIucHJvdmFdOwogIHZhciBob2plID0gaG9qZUlTTyhqKS5pc287CiAgdmFyIGNoZWNrcyA9IHN0b3JlLmNoZWNraW5zKHVzZXIuZW1haWwpOwogIHZhciBtaXNzID0gc3RvcmUubWlzc29lcyh1c2VyLmVtYWlsKTsKICB2YXIgc2ltID0gc3RvcmUuc2ltdWxhZG8odXNlci5lbWFpbCk7CgogIHZhciBldlBhc3NhZG9zID0gai5ldmVudG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUuZGF0YSA8PSBob2plOyB9KTsKICB2YXIgbkNoZWNrcyA9IE9iamVjdC5rZXlzKGNoZWNrcykubGVuZ3RoOwogIHZhciBwdHNQcmVzID0gMDsKICBqLmV2ZW50b3MuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgIHZhciBjID0gY2hlY2tzW2UuaWRdOwogICAgaWYgKCFjKSByZXR1cm47CiAgICBwdHNQcmVzICs9ICgodHlwZW9mIGMgPT09ICdvYmplY3QnICYmIGMuYW9WaXZvID09PSBmYWxzZSkgPyBQVF9BVUxBX1JFVFJPIDogUFRfQVVMQSk7CiAgfSk7CgogIHZhciBxdWl6emVzID0gai5ldmVudG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUucXVpejsgfSk7CiAgdmFyIHB0c01pc3MgPSAwLCBuTWlzcyA9IDA7CiAgcXVpenplcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyB2YXIgbSA9IG1pc3NbZS5pZF07IGlmIChtKXsgbk1pc3MrKzsgcHRzTWlzcyArPSBQVF9ESUFfUElTTyArIE1hdGgucm91bmQoUFRfRElBX0FDRVJUT1MgKiBtLmFjZXJ0b3MgLyBtLnRvdGFsKTsgfSB9KTsKCiAgdmFyIHB0c1NpbSA9IENBQ0hFLnNpbVJlcyA\/IFBUX1NJTV9BQ0VSVE8gKiBDQUNIRS5zaW1SZXMuYWNlcnRvcyA6IDA7CiAgdmFyIHB0c0luZCA9IFBUX0lORCAqICgoQ0FDSEUuaW5kaWNhY29lcyAmJiBDQUNIRS5pbmRpY2Fjb2VzLnZhbGlkYXMpIHx8IDApOyAgLy8gc2VtIHRldG8KCiAgLy8gb2ZlbnNpdmE6IGRpYXMtZXZlbnRvIGNvbnNlY3V0aXZvcyBjb20gY2hlY2staW4sIGNvbnRhbmRvIGRlIHRyw6FzIHByYQogIC8vIGZyZW50ZSDigJQgc8OzIHNvYnJlIGV2ZW50b3MgQ09NIGNoYXZlIChlbjAwIEluYXVndXJhbCBlIGVuMDcgU2ltdWxhZG8gbsOjbwogIC8vIHTDqm0gY2hlY2staW4gZSBuw6NvIHBvZGVtIHF1ZWJyYXIgYSBzZXF1w6puY2lhKQogIHZhciBzZXEgPSAwOwogIHZhciBldlN0cmVhayA9IGV2UGFzc2Fkb3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gVEVNX0NIQVZFLmluZGV4T2YoZS5pZCkgPiAtMTsgfSk7CiAgZm9yICh2YXIgaSA9IGV2U3RyZWFrLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICBpZiAoY2hlY2tzW2V2U3RyZWFrW2ldLmlkXSkgc2VxKys7IGVsc2UgYnJlYWs7CiAgfQoKICByZXR1cm4gewogICAgcHJlc2VuY2E6IHB0c1ByZXMsIG1pc3NvZXM6IHB0c01pc3MsIHNpbXVsYWRvOiBwdHNTaW0sIGluZGljYWNhbzogcHRzSW5kLAogICAgdG90YWw6IHB0c1ByZXMgKyBwdHNNaXNzICsgcHRzU2ltICsgcHRzSW5kLAogICAgbkNoZWNrczogbkNoZWNrcywgbkV2ZW50b3M6IFRFTV9DSEFWRS5sZW5ndGgsIG5FdlBhc3NhZG9zOiBldlBhc3NhZG9zLmxlbmd0aCwKICAgIG5NaXNzOiBuTWlzcywgblF1aXp6ZXM6IHF1aXp6ZXMubGVuZ3RoLCBvZmVuc2l2YTogc2VxLCBzaW06IHNpbQogIH07Cn0KZnVuY3Rpb24gZm10UHRzKG4peyByZXR1cm4gU3RyaW5nKE1hdGgucm91bmQobikpOyB9CgovKiBUZXh0byDihpIgSFRNTCBkYXMgcXVlc3TDtWVzL2NvbWVudMOhcmlvczogZXNjYXBhLCB0cmFuc2Zvcm1hIFVSTCBkZSBJTUFHRU0KICAgKHdlYnAvcG5nL2pwZy9naWYg4oCUIGV4LjogbcOtZGlhIGRvIFdQIGNvbSBhcyBpbWFnZW5zIGRhcyBxdWVzdMO1ZXMpIGVtIDxpbWc+CiAgIHJlc3BvbnNpdmEgZSBkZW1haXMgVVJMcyBlbSBsaW5rIGNsaWPDoXZlbC4gKi8KZnVuY3Rpb24gbWlkaWFIVE1MKHR4dCl7CiAgaWYgKCF0eHQpIHJldHVybiAnJzsKICByZXR1cm4gZXNjKHR4dCkucmVwbGFjZSgvaHR0cHM\/OlwvXC9bXlxzPF0rL2csIGZ1bmN0aW9uKHUpewogICAgdmFyIGZpbSA9ICcnOwogICAgdmFyIG0gPSB1Lm1hdGNoKC9bKS4sOzpdKyQvKTsKICAgIGlmIChtKXsgZmltID0gbVswXTsgdSA9IHUuc2xpY2UoMCwgdS5sZW5ndGggLSBmaW0ubGVuZ3RoKTsgfQogICAgaWYgKC9cLih3ZWJwfHBuZ3xqcGU\/Z3xnaWYpKFw\/W15cc10qKT8kL2kudGVzdCh1KSkKICAgICAgcmV0dXJuICc8aW1nIGNsYXNzPSJxLWltZyIgc3JjPSInK3UrJyIgYWx0PSJJbWFnZW0gZGEgcXVlc3TDo28iIGxvYWRpbmc9ImxhenkiPicrZmltOwogICAgcmV0dXJuICc8YSBocmVmPSInK3UrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicrdSsnPC9hPicrZmltOwogIH0pOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgTEFORElORwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gaW5pdExhbmRpbmcoKXsKICAvLyByZXZlYWwgb24gc2Nyb2xsIOKAlCBDT00gZ3VhcmRhOiBJbnRlcnNlY3Rpb25PYnNlcnZlciBzw7MgZXhpc3RlIGEgcGFydGlyIGRlCiAgLy8gaU9TIDEyLjIvQ2hyb21lIDUxOyBzZW0gYSBndWFyZGEsIGVtIGFwYXJlbGhvIG1haXMgYW50aWdvIGEgMcKqIGxpbmhhIGFxdWkKICAvLyBsYW7Dp2F2YSBlIGEgTFAgaW50ZWlyYSBmaWNhdmEgZW0gYnJhbmNvICgzOCBzZcOnw7VlcyAucnYgcHJlc2FzIGVtIG9wYWNpdHk6MCkKICAvLyBzZW0gbmVtIG8gZGlhZ27Ds3N0aWNvLiBBZ29yYSBvIGZhbGxiYWNrIHNpbXBsZXNtZW50ZSByZXZlbGEgdHVkby4KICBpZiAodHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nKSB7CiAgICB2YXIgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZXMpewogICAgICBlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyBpZiAoZS5pc0ludGVyc2VjdGluZyl7IGUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2luJyk7IGlvLnVub2JzZXJ2ZShlLnRhcmdldCk7IH0gfSk7CiAgICB9LCB7IHRocmVzaG9sZDogMC4wMSwgcm9vdE1hcmdpbjogJzBweCAwcHggMjUlIDBweCcgfSk7CiAgICAkJCgnLnJ2JykuZm9yRWFjaChmdW5jdGlvbihlbCwgaSl7IGVsLnN0eWxlLnRyYW5zaXRpb25EZWxheSA9IChpJTYpKjYwKydtcyc7IGlvLm9ic2VydmUoZWwpOyB9KTsKICB9IGVsc2UgewogICAgJCQoJy5ydicpLmZvckVhY2goZnVuY3Rpb24oZWwpeyBlbC5jbGFzc0xpc3QuYWRkKCdpbicpOyB9KTsKICB9CgogIC8vIGRlZmF1bHQgZG8gdG9nZ2xlIHNlZ3VlIG8gdmVydGljYWwgcHVibGljYWRvIChMUCBkbyBSZXZhbGlkYSBhYnJlIG5vIFJldmFsaWRhKQogIHZhciBwcm92YVNlbCA9IEFGX1BST1ZBOwoKICAvLyBjb3VudGRvd246IG1pcmEgYSBQUsOTWElNQSB0cmFuc21pc3PDo28gZnV0dXJhIChhIEF1bGEgSW5hdWd1cmFsIGFudGVjZWRlIGEKICAvLyBqb3JuYWRhKSwgY29tIGEgaG9yYSBkZSBpbsOtY2lvIGV4dHJhw61kYSBkbyBjYW1wbyBob3JhIGRlIGNhZGEgZXZlbnRvCiAgZnVuY3Rpb24gcHJveGltb0V2ZW50byhqKXsKICAgIHZhciBhZ29yYSA9IG5ldyBEYXRlKCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGouZXZlbnRvcy5sZW5ndGg7IGkrKyl7CiAgICAgIHZhciBlID0gai5ldmVudG9zW2ldOwogICAgICB2YXIgbSA9IChlLmhvcmEgfHwgJycpLm1hdGNoKC8oXGR7MSwyfSk6KFxkezJ9KS8pOwogICAgICB2YXIgYWx2byA9IG5ldyBEYXRlKGUuZGF0YSArICdUJyArICgnMCcrKG0\/bVsxXTonMDgnKSkuc2xpY2UoLTIpICsgJzonICsgKG0\/bVsyXTonMDAnKSArICc6MDAtMDM6MDAnKTsKICAgICAgaWYgKGFsdm8gPiBhZ29yYSkgcmV0dXJuIHsgZXY6IGUsIGFsdm86IGFsdm8gfTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBmdW5jdGlvbiB0aWNrKCl7CiAgICB2YXIgaiA9IEpPUk5BREFTW3Byb3ZhU2VsXTsKICAgIHZhciBweCA9IHByb3hpbW9FdmVudG8oaik7CiAgICB2YXIgYWx2byA9IHB4ID8gcHguYWx2byA6IG5ldyBEYXRlKGouaW5pY2lvICsgJ1QwODowMDowMC0wMzowMCcpOwogICAgdmFyIGRpZmYgPSBNYXRoLm1heCgwLCBhbHZvIC0gbmV3IERhdGUoKSk7CiAgICB2YXIgZCA9IE1hdGguZmxvb3IoZGlmZi84NjQwMDAwMCksIGggPSBNYXRoLmZsb29yKGRpZmYvMzYwMDAwMCklMjQsCiAgICAgICAgbSA9IE1hdGguZmxvb3IoZGlmZi82MDAwMCklNjAsIHMgPSBNYXRoLmZsb29yKGRpZmYvMTAwMCklNjA7CiAgICAkKCcjY2QtZCcpLnRleHRDb250ZW50ID0gU3RyaW5nKGQpLnBhZFN0YXJ0KDIsJzAnKTsKICAgICQoJyNjZC1oJykudGV4dENvbnRlbnQgPSBTdHJpbmcoaCkucGFkU3RhcnQoMiwnMCcpOwogICAgJCgnI2NkLW0nKS50ZXh0Q29udGVudCA9IFN0cmluZyhtKS5wYWRTdGFydCgyLCcwJyk7CiAgICAkKCcjY2QtcycpLnRleHRDb250ZW50ID0gU3RyaW5nKHMpLnBhZFN0YXJ0KDIsJzAnKTsKICAgICQoJyNjb3VudExhYmVsJykudGV4dENvbnRlbnQgPSAncGFyYSBhIHByw7N4aW1hIHRyYW5zbWlzc8OjbzogJyArCiAgICAgIChweCA\/IHB4LmV2LnRpdHVsbyA6IGouZXZlbnRvc1swXS50aXR1bG8pOwogIH0KICBzZXRJbnRlcnZhbCh0aWNrLCAxMDAwKTsgdGljaygpOwoKICAkJCgnI3Byb3ZhU3dpdGNoIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgJCQoJyNwcm92YVN3aXRjaCBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB4LmNsYXNzTGlzdC5yZW1vdmUoJ29uJyk7IH0pOwogICAgICBiLmNsYXNzTGlzdC5hZGQoJ29uJyk7IHByb3ZhU2VsID0gYi5kYXRhc2V0LnByb3ZhOyB0aWNrKCk7CiAgICAgIHZhciBjYWxCdG4gPSAkKCcuY2FsLXRhYnMgYnV0dG9uW2RhdGEtY2FsPSInK3Byb3ZhU2VsKyciXScpOyBpZiAoY2FsQnRuKSBjYWxCdG4uY2xpY2soKTsKICAgIH0pOwogIH0pOwoKICAvLyBjYWxlbmTDoXJpbwogIGZ1bmN0aW9uIHJlbmRlckNhbChwcm92YSl7CiAgICB2YXIgaiA9IEpPUk5BREFTW3Byb3ZhXTsKICAgIHZhciBodG1sID0gJyc7CiAgICBpZiAoai5wcm92aXNvcmlvKSBodG1sICs9ICc8ZGl2IGNsYXNzPSJkZW1vLWJhbm5lciI+PGI+RGF0YXMgcHJvdmlzw7NyaWFzLjwvYj4gQSBwcm9ncmFtYcOnw6NvIG9maWNpYWwgZG8gUmV2YWxpZGEgSU5FUCAyMDI2LjIgc2Vyw6EgY29uZmlybWFkYSBhcMOzcyBhIHB1YmxpY2HDp8OjbyBkbyBlZGl0YWwuIEEgZXN0cnV0dXJhIGFiYWl4byBlc3BlbGhhIGEgZWRpw6fDo28gMjAyNi4xLjwvZGl2Pic7CiAgICBbMCwxLDJdLmZvckVhY2goZnVuY3Rpb24oc2VtKXsKICAgICAgdmFyIGV2cyA9IGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLnNlbWFuYSA9PT0gc2VtOyB9KTsKICAgICAgaWYgKCFldnMubGVuZ3RoKSByZXR1cm47CiAgICAgIHZhciByb3R1bG8gPSBzZW09PT0wID8gJ0FiZXJ0dXJhJyA6IChzZW09PT0xPycxwqogc2VtYW5hJzonMsKqIHNlbWFuYScpOwogICAgICB2YXIgZmFpeGEgPSBldnNbMF0uZGF0YSA9PT0gZXZzW2V2cy5sZW5ndGgtMV0uZGF0YQogICAgICAgID8gZGF0YUJSKGV2c1swXS5kYXRhKQogICAgICAgIDogZGF0YUJSKGV2c1swXS5kYXRhKSsnIGEgJytkYXRhQlIoZXZzW2V2cy5sZW5ndGgtMV0uZGF0YSk7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InNlbWFuYS1sYWJlbCI+Jytyb3R1bG8rJyDCtyAnK2ZhaXhhKyc8L2Rpdj4nOwogICAgICBldnMuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgICAgICB2YXIgZG0gPSBkaWFNZXMoZS5kYXRhKTsKICAgICAgICB2YXIgdGlwb0NscyA9IGUudGlwbz09PSdtYXJjbycgPyAndGlwby1tYXJjbycgOiBlLnRpcG89PT0ncHJvdmEnID8gJ3RpcG8tcHJvdmEnIDogJ3RpcG8tYXVsYSc7CiAgICAgICAgdmFyIHRpcG9UeHQgPSBlLnRpcG89PT0nbWFyY28nID8gJ01hcmNvJyA6IGUudGlwbz09PSdwcm92YScgPyAnRGlhIGRhIHByb3ZhJyA6ICdBdWxhJzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJhdWxhLXJvdyBydiBpbiI+PGRpdiBjbGFzcz0iZGF0YSI+JytkbS5kKyc8c21hbGw+JytkbS5tKyc8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0idGl0dWxvIj4nK2VzYyhlLnRpdHVsbykrJzwvZGl2PicrCiAgICAgICAgICAnPGEgY2xhc3M9ImhvcmEiIGhyZWY9IicrQUZfVVJMUy5jYWRhc3RybysnIiB0aXRsZT0iSW5zY3JldmEtc2UgZ3JhdHVpdGFtZW50ZSBwYXJhIGFzc2lzdGlyIiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpO2ZvbnQtd2VpZ2h0OjYwMCI+UXVlcm8gYXNzaXN0aXI8L2E+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJob3JhIj4nK2VzYyhlLmhvcmEpKyc8L2Rpdj4nKwogICAgICAgICAgJzxzcGFuIGNsYXNzPSJ0aXBvICcrdGlwb0NscysnIj4nK3RpcG9UeHQrJzwvc3Bhbj48L2Rpdj4nOwogICAgICB9KTsKICAgIH0pOwogICAgJCgnI2NhbEJvZHknKS5pbm5lckhUTUwgPSBodG1sOwogIH0KICAkJCgnLmNhbC10YWJzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgJCQoJy5jYWwtdGFicyBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB4LmNsYXNzTGlzdC5yZW1vdmUoJ29uJyk7IH0pOwogICAgICBiLmNsYXNzTGlzdC5hZGQoJ29uJyk7IHJlbmRlckNhbChiLmRhdGFzZXQuY2FsKTsKICAgIH0pOwogIH0pOwogIC8vIHNpbmNyb25pemEgdG9nZ2xlIGRlIHByb3ZhICsgY2FsZW5kw6FyaW8gY29tIG8gdmVydGljYWwgcHVibGljYWRvCiAgJCQoJyNwcm92YVN3aXRjaCBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB4LmNsYXNzTGlzdC50b2dnbGUoJ29uJywgeC5kYXRhc2V0LnByb3ZhID09PSBwcm92YVNlbCk7IH0pOwogICQkKCcuY2FsLXRhYnMgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbih4KXsgeC5jbGFzc0xpc3QudG9nZ2xlKCdvbicsIHguZGF0YXNldC5jYWwgPT09IHByb3ZhU2VsKTsgfSk7CiAgcmVuZGVyQ2FsKHByb3ZhU2VsKTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENBREFTVFJPIC8gQUNFU1NBUgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gbWFza1doYXRzKGlucHV0KXsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCl7CiAgICB2YXIgdiA9IGlucHV0LnZhbHVlLnJlcGxhY2UoL1xEL2csJycpLnNsaWNlKDAsMTEpOwogICAgaWYgKHYubGVuZ3RoID4gNikgaW5wdXQudmFsdWUgPSAnKCcrdi5zbGljZSgwLDIpKycpICcrdi5zbGljZSgyLDcpKyctJyt2LnNsaWNlKDcpOwogICAgZWxzZSBpZiAodi5sZW5ndGggPiAyKSBpbnB1dC52YWx1ZSA9ICcoJyt2LnNsaWNlKDAsMikrJykgJyt2LnNsaWNlKDIpOwogICAgZWxzZSBpbnB1dC52YWx1ZSA9IHY7CiAgfSk7Cn0KZnVuY3Rpb24gbWFza0NwZihpbnB1dCl7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpewogICAgdmFyIHYgPSBpbnB1dC52YWx1ZS5yZXBsYWNlKC9cRC9nLCcnKS5zbGljZSgwLDExKTsKICAgIHZhciBvdXQgPSB2OwogICAgaWYgKHYubGVuZ3RoID4gOSkgb3V0ID0gdi5zbGljZSgwLDMpKycuJyt2LnNsaWNlKDMsNikrJy4nK3Yuc2xpY2UoNiw5KSsnLScrdi5zbGljZSg5KTsKICAgIGVsc2UgaWYgKHYubGVuZ3RoID4gNikgb3V0ID0gdi5zbGljZSgwLDMpKycuJyt2LnNsaWNlKDMsNikrJy4nK3Yuc2xpY2UoNik7CiAgICBlbHNlIGlmICh2Lmxlbmd0aCA+IDMpIG91dCA9IHYuc2xpY2UoMCwzKSsnLicrdi5zbGljZSgzKTsKICAgIGlucHV0LnZhbHVlID0gb3V0OwogIH0pOwp9CmZ1bmN0aW9uIGNwZlZhbGlkbyhjKXsKICBjID0gYy5yZXBsYWNlKC9cRC9nLCcnKTsKICBpZiAoYy5sZW5ndGggIT09IDExKSByZXR1cm4gZmFsc2U7CiAgaWYgKC9eKFxkKVwxezEwfSQvLnRlc3QoYykpIHJldHVybiBmYWxzZTsKICBmb3IgKHZhciB0ID0gOTsgdCA8IDExOyB0KyspIHsKICAgIHZhciBkID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdDsgaSsrKSBkICs9IHBhcnNlSW50KGMuY2hhckF0KGkpLDEwKSAqICgodCsxKSAtIGkpOwogICAgZCA9ICgoMTAqZCkgJSAxMSkgJSAxMDsKICAgIGlmIChkICE9PSBwYXJzZUludChjLmNoYXJBdCh0KSwxMCkpIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gc2V0SW52YWxpZChmLCBvbil7IHZhciBlbCA9ICQoJ1tkYXRhLWY9IicrZisnIl0nKTsgaWYgKGVsKSBlbC5jbGFzc0xpc3QudG9nZ2xlKCdpbnZhbGlkJywgISFvbik7IH0KCi8qIGluaXRDYWRhc3Ryby9pbml0QWNlc3Nhci9pbml0Q29uZmlybWFjYW8gUkVNT1ZJRE9TIG5hIGF1ZGl0b3JpYSBkZSAxMS8wODoKICAgZXJhbSBvIHByb3TDs3RpcG8gZW0gbG9jYWxTdG9yYWdlIChzdG9yZS5hZGRVc2VyL2ZpbmRVc2VyQnlDcGYvbG9naW4pLCBww6FnaW5hcwogICBjYWRhc3Ryby5odG1sL2FjZXNzYXIuaHRtbC9jb25maXJtYWNhby5odG1sIHF1ZSBOw4NPIHPDo28gcHVibGljYWRhcyDigJQgcHJvZHXDp8OjbwogICB1c2EgcmVuZGVyQXV0aCAoYXV0aC1jYWRhc3Ryby9hdXRoLWFjZXNzYXIpIGNvbnRyYSBvIFN1cGFiYXNlLiBGaWNhdmFtIG5vCiAgIGJ1bmRsZSBkZSB0b2RvIGFsdW5vIHNlbSBudW5jYSByb2Rhci4gKi8KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICDDgVJFQSBERSBNRU1CUk9TCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAtLS0tLS0tLS0tIEFVVEggZGUgcHJvZHXDp8OjbyAodW1hIHDDoWdpbmEgc8OzOiBhY2Vzc2FyICsgY2FkYXN0cm8pIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gY3BmRFYoYyl7CiAgdmFyIGQgPSAoY3x8JycpLnJlcGxhY2UoL1xEL2csJycpOwogIGlmIChkLmxlbmd0aCAhPT0gMTEgfHwgL14oXGQpXDF7MTB9JC8udGVzdChkKSkgcmV0dXJuIGZhbHNlOwogIHZhciBzPTAsaTsgZm9yKGk9MDtpPDk7aSsrKSBzKz0oK2RbaV0pKigxMC1pKTsgdmFyIHYxPShzKjEwKSUxMTsgaWYodjE9PT0xMCl2MT0wOwogIHM9MDsgZm9yKGk9MDtpPDEwO2krKykgcys9KCtkW2ldKSooMTEtaSk7IHZhciB2Mj0ocyoxMCklMTE7IGlmKHYyPT09MTApdjI9MDsKICByZXR1cm4gdjE9PT0rZFs5XSAmJiB2Mj09PStkWzEwXTsKfQovKiBNb21lbnRvIG5hIGdyYWR1YcOnw6NvICgxMS8wOCk6IE1FU01BIHBlcmd1bnRhIGUgTUVTTUFTIG9ww6fDtWVzIGRhIHBlc3F1aXNhCiAgIEJRIE1FRCBGUkVFIG5vIFR5cGVmb3JtIChyTlBRQmZyZywgY2FtcG8gcTJfc3RhZ2UpIOKAlCBvIGRhZG8gZG8gY2FkYXN0cm8KICAgY3J1emEgMToxIGNvbSBvIGRhIHBlc3F1aXNhLiBHcmF2YWRvIGVtIHBhcnRpY2lwYW50ZXMubW9tZW50byAocF9tb21lbnRvKS4gKi8KLyogTyBww7pibGljbyBkZSBjYWRhIHByb3ZhIMOpIERJRkVSRU5URSwgZW50w6NvIGFzIG9ww6fDtWVzIG11ZGFtIHBvciB2ZXJ0aWNhbAogICAoZXNwZWxobyBkbyBzcGxpdCBSZXNpZMOqbmNpYSDDlyBSZXZhbGlkYSBkbyBmb3JtKTogRU5BTUVEIHVzYSBxMl9zdGFnZSAoYW5vIGRlCiAgIGdyYWR1YcOnw6NvKTsgUmV2YWxpZGEgdXNhIHFyX3N0YWdlIChncmFkdWHDp8OjbyBubyBleHRlcmlvciAvIHJldmFsaWRhw6fDo28pLiAqLwp2YXIgTU9NRU5UT1NfUE9SX1BST1ZBID0gewogIGVuYW1lZDogWwogICAgJ0VzdG91IG5vIDHCuiBvdSBubyAywrogYW5vIGRhIGdyYWR1YcOnw6NvJywKICAgICdFc3RvdSBubyAzwrogb3Ugbm8gNMK6IGFubyBkYSBncmFkdWHDp8OjbycsCiAgICAnRXN0b3Ugbm8gNcK6IGFubyBkYSBncmFkdWHDp8OjbycsCiAgICAnRXN0b3Ugbm8gNsK6IGFubyBkYSBncmFkdWHDp8OjbycsCiAgICAnU291IG3DqWRpY28gZm9ybWFkbycKICBdLAogIHJldmFsaWRhOiBbCiAgICAnQWluZGEgZXN0b3UgbmEgZ3JhZHVhw6fDo28gZGUgTWVkaWNpbmEgbm8gZXh0ZXJpb3InLAogICAgJ1NvdSBmb3JtYWRvIG5vIGV4dGVyaW9yLCBtYXMgYWluZGEgbsOjbyByZXZhbGlkZWkgbWV1IGRpcGxvbWEnLAogICAgJ0rDoSByZXZhbGlkZWkgbWV1IGRpcGxvbWEnCiAgXQp9Owp2YXIgTU9NRU5UT1NfR1JBRCA9IE1PTUVOVE9TX1BPUl9QUk9WQVtBRl9QUk9WQV0gfHwgTU9NRU5UT1NfUE9SX1BST1ZBLmVuYW1lZDsKCmZ1bmN0aW9uIHJlbmRlckF1dGgobW9kbyl7CiAgbW9kbyA9IG1vZG8gfHwgJ2FjZXNzYXInOwogIHZhciBlc3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWYtZXNwZXJhJyk7CiAgaWYgKGVzcCkgZXNwLnJlbW92ZSgpOwogIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoVmlldycpIHx8IChmdW5jdGlvbigpewogICAgdmFyIGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgZC5pZCA9ICdhdXRoVmlldyc7IGQuY2xhc3NOYW1lID0gJ2F1dGgtb3ZlcmxheSc7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpOyByZXR1cm4gZDsKICB9KSgpOwogIHZhciBhY2Vzc2FyID0gbW9kbyA9PT0gJ2FjZXNzYXInOwogIC8vIGxvZ28gZW1idXRpZG8gcGVsbyBwdWJsaWNhZG9yIChfX0FGX0xPR08pOyBubyBhcnF1aXZvIGxvY2FsIGEgcGFzdGEgZGUKICAvLyBhc3NldHMgZmljYSB1bSBuw612ZWwgYWNpbWE7IHNlIG5hZGEgcmVzb2x2ZXIsIG8gb25lcnJvciB0aXJhIG8gPGltZz4KICB2YXIgbG9nbyA9IHdpbmRvdy5fX0FGX0xPR08gfHwgJy4uL2Fzc2V0cy9sb2dvLWVzdHJhdGVnaWEtbWVkLWJyYW5jby53ZWJwJzsKICBlbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iYXV0aC1jYXJkIGNvbS1tYXJjYSI+JysKICAgICc8ZGl2IGNsYXNzPSJhdXRoLWJyYW5kIj4nKwogICAgJzxpbWcgY2xhc3M9ImFiLWxvZ28iIHNyYz0iJytsb2dvKyciIGFsdD0iRXN0cmF0w6lnaWEgTUVEIiBvbmVycm9yPSJ0aGlzLnJlbW92ZSgpIj4nKwogICAgJzxkaXYgY2xhc3M9ImFiLW1hcmsiPkFUTyBGSU5BTDwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iYWItc3ViIj4nK0FGX0JSQU5ELnN1YisnPC9kaXY+JysKICAgICc8L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9ImF1dGgtYm9keSI+JysKICAgICc8aDE+JysoYWNlc3NhciA\/ICdBY2Vzc2FyIG1pbmhhIMOhcmVhJyA6ICdJbnNjcmnDp8OjbyBncmF0dWl0YScpKyc8L2gxPicrCiAgICAnPHAgY2xhc3M9InN1YiI+JysoYWNlc3NhcgogICAgICA\/ICdEaWdpdGUgbyBDUEYgdXNhZG8gbmEgaW5zY3Jpw6fDo28gcGFyYSBlbnRyYXIgbm8gc2V1IHBhaW5lbC4nCiAgICAgIDogJ0NyaWUgYSBzdWEgY29udGEgZSBlbnRyZSBuYSBkaXNwdXRhIGRvIEF0byBGaW5hbCBydW1vIGFvICcrQUZfQlJBTkQuY3VydGErJy4nKSsnPC9wPicrCiAgICAoYWNlc3NhciA\/ICcnIDoKICAgICAgJzxkaXYgY2xhc3M9ImF1dGgtZmF0b3MiPjxzcGFuPkF1bGFzIGFvIHZpdm88L3NwYW4+PHNwYW4+UXVlc3TDtWVzIGNvbWVudGFkYXM8L3NwYW4+PHNwYW4+U2ltdWxhZG8gRmluYWw8L3NwYW4+PHNwYW4+MTAwJSBncmF0dWl0bzwvc3Bhbj48L2Rpdj4nKSsKICAgICc8Zm9ybSBpZD0iYXV0aEZvcm0iPicrCiAgICAoYWNlc3NhciA\/ICcnIDoKICAgICAgJzxkaXYgY2xhc3M9ImZpZWxkIj48bGFiZWw+Tm9tZSBjb21wbGV0bzwvbGFiZWw+PGlucHV0IGlkPSJmTm9tZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJuYW1lIiByZXF1aXJlZD48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD5FLW1haWw8L2xhYmVsPjxpbnB1dCBpZD0iZkVtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJlbWFpbCIgcmVxdWlyZWQ+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImZpZWxkIj48bGFiZWw+V2hhdHNBcHAgKGNvbSBEREQpPC9sYWJlbD48aW5wdXQgaWQ9ImZXaGF0cyIgdHlwZT0idGVsIiBhdXRvY29tcGxldGU9InRlbCIgcGxhY2Vob2xkZXI9IigxMSkgOTk5OTktOTk5OSI+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImZpZWxkIj48bGFiZWw+UXVhbCBhIHN1YSBzaXR1YcOnw6NvIGF0dWFsPzwvbGFiZWw+JysKICAgICAgJzxzZWxlY3QgaWQ9ImZNb21lbnRvIiByZXF1aXJlZD4nKwogICAgICAnPG9wdGlvbiB2YWx1ZT0iIiBkaXNhYmxlZCBzZWxlY3RlZD5TZWxlY2lvbmUgbyBzZXUgbW9tZW50bzwvb3B0aW9uPicrCiAgICAgIE1PTUVOVE9TX0dSQUQubWFwKGZ1bmN0aW9uKG0peyByZXR1cm4gJzxvcHRpb24gdmFsdWU9IicrZXNjKG0pKyciPicrZXNjKG0pKyc8L29wdGlvbj4nOyB9KS5qb2luKCcnKSsKICAgICAgJzwvc2VsZWN0PjwvZGl2PicpKwogICAgJzxkaXYgY2xhc3M9ImZpZWxkIj48bGFiZWw+Q1BGPC9sYWJlbD48aW5wdXQgaWQ9ImZDcGYiIHR5cGU9InRleHQiIGlucHV0bW9kZT0ibnVtZXJpYyIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSIwMDAuMDAwLjAwMC0wMCIgcmVxdWlyZWQ+JysKICAgICc8ZGl2IGNsYXNzPSJoaW50Ij5Vc2Ftb3MgbyBDUEYgc8OzIHByYSBpZGVudGlmaWNhciBhIHN1YSBjb250YSBuYSBkaXNwdXRhIGUgdmFsaWRhciBhIHByZW1pYcOnw6NvLiBFbGUgbsOjbyBhcGFyZWNlIHByYSBuaW5ndcOpbS48L2Rpdj48L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9ImF1dGgtZXJybyIgaWQ9ImF1dGhFcnJvIiByb2xlPSJhbGVydCIgaGlkZGVuPjwvZGl2PicrCiAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciIgdHlwZT0ic3VibWl0IiBzdHlsZT0id2lkdGg6MTAwJSIgaWQ9ImF1dGhCdG4iPicrKGFjZXNzYXIgPyAnRW50cmFyJyA6ICdJbnNjcmV2ZXIgZSBlbnRyYXInKSsnPC9idXR0b24+JysKICAgICc8L2Zvcm0+JysKICAgICc8ZGl2IGNsYXNzPSJhdXRoLWFsdCI+JysoYWNlc3NhcgogICAgICA\/ICdBaW5kYSBuw6NvIHRlbSBjb250YT8gPGEgaHJlZj0iJysod2luZG93Ll9fQUZfVVJMUyA\/IEFGX1VSTFMuY2FkYXN0cm8gOiAnIycpKyciIGlkPSJhdXRoVHJvY2EiPkluc2NyZXZhLXNlIGdyw6F0aXM8L2E+JwogICAgICA6ICdKw6EgZmV6IHN1YSBpbnNjcmnDp8Ojbz8gPGEgaHJlZj0iJysod2luZG93Ll9fQUZfVVJMUyA\/IEFGX1VSTFMuYWNlc3NhciA6ICcjJykrJyIgaWQ9ImF1dGhUcm9jYSI+QWNlc3NhciBjb20gbWV1IENQRjwvYT4nKSsnPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgdmFyIGZjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZDcGYnKTsKICBmYy5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCl7CiAgICB2YXIgZCA9IGZjLnZhbHVlLnJlcGxhY2UoL1xEL2csJycpLnNsaWNlKDAsMTEpOwogICAgZmMudmFsdWUgPSBkLnJlcGxhY2UoLyhcZHszfSkoXGQpLywnJDEuJDInKS5yZXBsYWNlKC8oXGR7M30pXC4oXGR7M30pKFxkKS8sJyQxLiQyLiQzJykucmVwbGFjZSgvXC4oXGR7M30pKFxkezEsMn0pJC8sJy4kMS0kMicpOwogIH0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoVHJvY2EnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2KXsKICAgIC8vIGNvbSBww6FnaW5hcyByZWFpcyAocGFkcsOjbyBCb2zDo28pLCBhIHRyb2NhIE5BVkVHQTsgc2VtIGVsYXMsIGFsdGVybmEgYSB2aWV3CiAgICB2YXIgYWx2byA9IGFjZXNzYXIgPyBBRl9VUkxTLmNhZGFzdHJvIDogQUZfVVJMUy5hY2Vzc2FyOwogICAgaWYgKHdpbmRvdy5fX0FGX1VSTFMgJiYgYWx2byAmJiBhbHZvLmNoYXJBdCgwKSAhPT0gJyMnKSByZXR1cm47IC8vIGRlaXhhIG8gPGE+IG5hdmVnYXIKICAgIGV2LnByZXZlbnREZWZhdWx0KCk7IHJlbmRlckF1dGgoYWNlc3NhciA\/ICdjYWRhc3RybycgOiAnYWNlc3NhcicpOwogIH0pOwogIC8qIHJhZGFyIGRvIHN1Ym1pdDogbyBiZWFjb24gZGUgY2FyZ2EgbsOjbyBlbnhlcmdhIG8gcXVlIGFjb250ZWNlIGVudHJlIG8KICAgICB0b3F1ZSBlbSAiRW50cmFyIiBlIGEgY2hlZ2FkYSBuYSDDoXJlYSDigJQgY2FkYSBldGFwYSByZXBvcnRhIGEgZmFzZSwKICAgICBpbmNsdXNpdmUgbyBwcsOzcHJpbyB0b3F1ZSAoZGlzdGluZ3VlICJ0b3F1ZSBuw6NvIHJlZ2lzdHJvdSIgZGUKICAgICAiaGFuZGxlciByb2RvdSBlIHBhcm91IGVtIFgiKSAqLwogIHZhciBkaWFnID0gZnVuY3Rpb24oZil7IHRyeSB7IGlmICh3aW5kb3cuX19hZkVudmlhKSB3aW5kb3cuX19hZkVudmlhKGYpOyB9IGNhdGNoKGUpe30gfTsKICB2YXIgcXVlbSA9IGFjZXNzYXIgPyAnbG9naW4nIDogJ2NhZGFzdHJvJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aEJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgZGlhZyhxdWVtICsgJ19ib3RhbycpOyB9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aEZvcm0nKS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbihldil7CiAgICBldi5wcmV2ZW50RGVmYXVsdCgpOwogICAgZXYudGFyZ2V0Ll9fdWx0aW1vU3VibWl0ID0gRGF0ZS5ub3coKTsKICAgIGlmIChldi50YXJnZXQuY2hlY2tWYWxpZGl0eSAmJiAhZXYudGFyZ2V0LmNoZWNrVmFsaWRpdHkoKSkgewogICAgICBpZiAoZXYudGFyZ2V0LnJlcG9ydFZhbGlkaXR5KSBldi50YXJnZXQucmVwb3J0VmFsaWRpdHkoKTsKICAgICAgZGlhZyhxdWVtICsgJ19mb3JtX2ludmFsaWRvJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aEJ0bicpOwogICAgaWYgKCFidG4pIHJldHVybjsgIC8vIG92ZXJsYXkgasOhIHJlbW92aWRhOiBvIGZsdXhvIGRlc3RlIGNsaXF1ZSBqw6EgY29uY2x1aXUKICAgIC8vIGVycm8gSU5MSU5FIG5vIGNhcnTDo28gKG7Do28gc8OzIHRvYXN0KTogbyB0b2FzdCB2aXZlIG5vIHJvZGFww6ksIG9uZGUgbwogICAgLy8gYmFubmVyIGRlIGNvb2tpZXMgZG8gV1Agc2Ugc29icmVww7VlIG5vIGNlbHVsYXIg4oCUIG8gYWx1bm8gbsOjbyB2aWEgbyBtb3Rpdm8KICAgIC8vIGRhIHJlY3VzYSBlIGFjaGF2YSBxdWUgbyBib3TDo28gbsOjbyBmZXogbmFkYS4gQXVkaXRvcmlhIDExLzA4LgogICAgdmFyIGVycm9Cb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aEVycm8nKTsKICAgIHZhciBtb3N0cmFFcnJvID0gZnVuY3Rpb24obXNnKXsgaWYgKGVycm9Cb3gpeyBlcnJvQm94LnRleHRDb250ZW50ID0gbXNnOyBlcnJvQm94LmhpZGRlbiA9IGZhbHNlOyB9IHRvYXN0KG1zZyk7IH07CiAgICBpZiAoZXJyb0JveCkgZXJyb0JveC5oaWRkZW4gPSB0cnVlOwogICAgdmFyIGNwZiA9IGZjLnZhbHVlLnJlcGxhY2UoL1xEL2csJycpOwogICAgaWYgKCFjcGZEVihjcGYpKSB7IG1vc3RyYUVycm8oJ0NQRiBpbnbDoWxpZG8uIENvbmZpcmEgb3MgbsO6bWVyb3MuJyk7IGRpYWcocXVlbSArICdfZHZfaW52YWxpZG8nKTsgcmV0dXJuOyB9CiAgICBidG4uZGlzYWJsZWQgPSB0cnVlOyBidG4udGV4dENvbnRlbnQgPSAnVW0gaW5zdGFudGXigKYnOwogICAgZGlhZyhxdWVtICsgJ19zdWJtaXQnKTsKICAgIHZhciBkb25lID0gZnVuY3Rpb24oKXsgZGlhZyhxdWVtICsgJ19vaycpOyBzZXNzYW9TZXQoY3BmKTsKICAgICAgaWYgKHdpbmRvdy5fX0FGX1BBR0UgPT09ICdhcmVhJykgeyBlbC5yZW1vdmUoKTsgaW5pdEFyZWEoKTsgfQogICAgICBlbHNlIHsgbG9jYXRpb24uaHJlZiA9IEFGX1VSTFMuYXJlYSArIChBRl9VUkxTLmFyZWEuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgJ2U9MSc7IH0gfTsKICAgIHZhciBmYWxoYSA9IGZ1bmN0aW9uKG1zZyl7IGRpYWcocXVlbSArICdfcmVjdXNhOicgKyBTdHJpbmcobXNnKS5zbGljZSgwLDYwKSk7IGJ0bi5kaXNhYmxlZCA9IGZhbHNlOwogICAgICBidG4udGV4dENvbnRlbnQgPSBhY2Vzc2FyID8gJ0VudHJhcicgOiAnSW5zY3JldmVyIGUgZW50cmFyJzsgbW9zdHJhRXJybyhtc2cpOyB9OwogICAgLyogcmVkZSBtw7N2ZWwgcG9kZSBkZWl4YXIgbyBmZXRjaCBwZW5kdXJhZG8gc2VtIHJlamVpdGFyOiBzZW0gdGV0bywgbyBib3TDo28KICAgICAgIGZpY2EgcHJlc28gZW0gIlVtIGluc3RhbnRl4oCmIiBlIG8gYWx1bm8gcmVjYXJyZWdhIGEgcMOhZ2luYSAqLwogICAgdmFyIGNvbVRldG8gPSBmdW5jdGlvbihwKXsgcmV0dXJuIFByb21pc2UucmFjZShbcCwgbmV3IFByb21pc2UoZnVuY3Rpb24oXywgcmVqKXsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyByZWoobmV3IEVycm9yKCd0aW1lb3V0XzEycycpKTsgfSwgMTIwMDApOyB9KV0pOyB9OwogICAgaWYgKGFjZXNzYXIpIHsKICAgICAgY29tVGV0byhzYlJwYygnbG9naW5fY3BmJywgeyBwX2NwZjogY3BmIH0pKS50aGVuKGZ1bmN0aW9uKHIpewogICAgICAgIGlmIChyLnN0YXR1cyA9PT0gJ29rJykgZG9uZSgpOwogICAgICAgIGVsc2UgZmFsaGEoJ0NQRiBuw6NvIGVuY29udHJhZG8uIEZhw6dhIGEgc3VhIGluc2NyacOnw6NvIGdyYXR1aXRhLicpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpeyBkaWFnKCdsb2dpbl9lcnJvOicgKyBTdHJpbmcoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKS5zbGljZSgwLDgwKSk7CiAgICAgICAgZmFsaGEoJ1NlbSBjb25leMOjby4gVGVudGUgbm92YW1lbnRlLicpOyB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbVRldG8oc2JScGMoJ2NhZGFzdHJhcicsIHsKICAgICAgICBwX25vbWU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmTm9tZScpLnZhbHVlLAogICAgICAgIHBfZW1haWw6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmRW1haWwnKS52YWx1ZSwKICAgICAgICBwX3doYXRzOiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZXaGF0cycpLnZhbHVlIHx8IG51bGwpLAogICAgICAgIHBfY3BmOiBjcGYsIHBfcHJvdmE6IEFGX1BST1ZBLAogICAgICAgIHBfbW9tZW50bzogKGZ1bmN0aW9uKCl7IHZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZNb21lbnRvJyk7IHJldHVybiAocyAmJiBzLnZhbHVlKSB8fCBudWxsOyB9KSgpLAogICAgICAgIHBfcmVmOiAoZnVuY3Rpb24oKXsgdHJ5IHsgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKExTUCsncmVmJykgfHwgbnVsbDsgfSBjYXRjaChlKXsgcmV0dXJuIG51bGw7IH0gfSkoKQogICAgICB9KSkudGhlbihmdW5jdGlvbihyKXsKICAgICAgICBpZiAoci5zdGF0dXMgPT09ICdvaycgfHwgci5zdGF0dXMgPT09ICdqYV9jYWRhc3RyYWRvJykgewogICAgICAgICAgdHJ5IHsgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTFNQKydyZWYnKTsgfSBjYXRjaChlKXt9CiAgICAgICAgICB0cnkgeyBhZlNmbWNFbnZpYXIoKTsgfSBjYXRjaChlKXt9CiAgICAgICAgICBhZkd0bUxlYWQoZG9uZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHIuc3RhdHVzID09PSAnY3BmX2ludmFsaWRvJykgZmFsaGEoJ0NQRiBpbnbDoWxpZG8uIENvbmZpcmEgb3MgbsO6bWVyb3MuJyk7CiAgICAgICAgZWxzZSBmYWxoYSgnTsOjbyBmb2kgcG9zc8OtdmVsIGNvbmNsdWlyLiBDb25maXJhIG9zIGRhZG9zLicpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpeyBkaWFnKCdjYWRhc3Ryb19lcnJvOicgKyBTdHJpbmcoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKS5zbGljZSgwLDgwKSk7CiAgICAgICAgZmFsaGEoJ1NlbSBjb25leMOjby4gVGVudGUgbm92YW1lbnRlLicpOyB9KTsKICAgIH0KICB9KTsKfQoKZnVuY3Rpb24gaW5pdEFyZWEoKXsKICB2YXIgZGlhZ0EgPSBmdW5jdGlvbihmKXsgdHJ5IHsgaWYgKHdpbmRvdy5fX2FmRW52aWEpIHdpbmRvdy5fX2FmRW52aWEoZik7IH0gY2F0Y2goZSl7fSB9OwogIGlmICghY3BmU2Fsdm8oKSkgewogICAgLy8gdmVpbyBkbyBsb2dpbiBlIGEgc2Vzc8OjbyBuw6NvIHNvYnJldml2ZXU6IG5hdmVnYWRvciBibG9xdWVhbmRvIGFybWF6ZW5hbWVudG8KICAgIGlmICgvWz8mXWU9MS8udGVzdChsb2NhdGlvbi5zZWFyY2gpKSB7CiAgICAgIGRpYWdBKCdhcmVhX2FudGlfbGFjbycpOwogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJhdXRoLW92ZXJsYXkiPjxkaXYgY2xhc3M9ImF1dGgtY2FyZCI+JysKICAgICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4Ij4nK0FGX0JSQU5ELnRhZysnPC9kaXY+JysKICAgICAgICAnPGgxPkF0aXZlIG9zIGRhZG9zIGRvIHNpdGU8L2gxPicrCiAgICAgICAgJzxwIGNsYXNzPSJzdWIiPlNldSBhY2Vzc28gZm9pIGNvbmZpcm1hZG8sIG1hcyBlc3RlIG5hdmVnYWRvciBlc3TDoSBpbXBlZGluZG8gbyBzaXRlIGRlIGd1YXJkYXIgYSBzdWEgc2Vzc8OjbywgZW50w6NvIG7Do28gY29uc2VndWltb3MgbWFudGVyIHZvY8OqIGNvbmVjdGFkby48L3A+JysKICAgICAgICAnPHAgY2xhc3M9InN1YiI+PGI+Tm8gaVBob25lOjwvYj4gc2FpYSBkYSBOYXZlZ2HDp8OjbyBQcml2YWRhIG91IHbDoSBlbSBBanVzdGVzIOKGkiBTYWZhcmkgZSBkZXNhdGl2ZSAiQmxvcXVlYXIgdG9kb3Mgb3MgY29va2llcyIuIDxiPk5vIEFuZHJvaWQ6PC9iPiBwZXJtaXRhIGNvb2tpZXMgcGFyYSBlc3RlIHNpdGUuPC9wPicrCiAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBocmVmPSInK0FGX1VSTFMuYWNlc3NhcisnIiBzdHlsZT0id2lkdGg6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIj5UZW50YXIgbm92YW1lbnRlPC9hPjwvZGl2PjwvZGl2Pic7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGRpYWdBKCdhcmVhX3NlbV9zZXNzYW8nKTsKICAgIGlmICh3aW5kb3cuX19BRl9VUkxTKSB7IGxvY2F0aW9uLmhyZWYgPSBBRl9VUkxTLmFjZXNzYXI7IHJldHVybjsgfQogICAgcmVuZGVyQXV0aChsb2NhdGlvbi5oYXNoID09PSAnI2NhZGFzdHJvJyA\/ICdjYWRhc3RybycgOiAnYWNlc3NhcicpOwogICAgcmV0dXJuOwogIH0KICB2YXIgbWFpbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4nKTsKICBpZiAobWFpbkVsKSBtYWluRWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luLXRvcDo0MHB4Ij5DYXJyZWdhbmRvIGEgc3VhIMOhcmVh4oCmPC9kaXY+JzsKICBoaWRyYXRhcigpLnRoZW4oZnVuY3Rpb24ob2spewogICAgaWYgKCFvaykgeyBkaWFnQSgnYXJlYV9oaWRyYXRhcl9mYWxob3UnKTsgc3RvcmUubG9nb3V0KCk7IHJlbmRlckF1dGgoJ2FjZXNzYXInKTsgcmV0dXJuOyB9CiAgICBkaWFnQSgnYXJlYV9vaycpOwogICAgaW5pY2lhckFwcCgpOwogIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7CiAgICBkaWFnQSgnYXJlYV9zZW1fY29uZXhhbzonICsgU3RyaW5nKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycikuc2xpY2UoMCw4MCkpOwogICAgaWYgKG1haW5FbCkgbWFpbkVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWluay1kaW0pO21hcmdpbi10b3A6NDBweCI+U2VtIGNvbmV4w6NvLiBSZWNhcnJlZ3VlIGEgcMOhZ2luYS48L2Rpdj4nOwogIH0pOwp9CgpmdW5jdGlvbiBpbmljaWFyQXBwKCl7CiAgdmFyIHVzZXIgPSBzdG9yZS5tZSgpOwogIGlmICghdXNlcikgeyByZW5kZXJBdXRoKCdhY2Vzc2FyJyk7IHJldHVybjsgfQogIHZhciBqID0gSk9STkFEQVNbdXNlci5wcm92YV07CiAgdmFyIGhvamUgPSBob2plSVNPKGopOwogIC8vIEEgZGF0YSBlcmEgY29uZ2VsYWRhIG5vIGxvYWQgZSBudW5jYSByZWF2YWxpYWRhOiBjb21vIG8gYXBwIMOpIGluc3RhbMOhdmVsCiAgLy8gKFBXQSBzdGFuZGFsb25lKSBlIG8gaU9TIG1hbnTDqW0gYSBhYmEgdml2YSBwb3IgZGlhcywgcXVlbSBhYnJpc3NlIG5hIHbDqXNwZXJhCiAgLy8gZSB2b2x0YXNzZSBubyBkaWEgZGEgYXVsYSBOw4NPIHZpYSBvIGNoZWNrLWluIGxpYmVyYXIgbmVtIGEgam9ybmFkYSB2aXJhciBlbQogIC8vIDI2LzA4LiBHdWFyZGEgYSBkYXRhIGNhcnJlZ2FkYTsgc2UgbyBkaWEgQlJUIG11ZGFyIChyZXRvbWFkYSBkZSBhYmEvUFdBKSwKICAvLyByZWNhcnJlZ2Eg4oCUIHJlaWRyYXRhIHR1ZG8gY29tIGEgZGF0YSBjZXJ0YS4gQXVkaXRvcmlhIDExLzA4LgogIHZhciBkaWFDYXJyZWdhZG8gPSBob2plLmlzbzsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgZnVuY3Rpb24oKXsKICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgIT09ICd2aXNpYmxlJykgcmV0dXJuOwogICAgaWYgKGhvamVJU08oaikuaXNvICE9PSBkaWFDYXJyZWdhZG8pIGxvY2F0aW9uLnJlbG9hZCgpOwogIH0pOwoKICAvLyBzaGVsbAogICQoJyNicmFuZExpZ2EnKS50ZXh0Q29udGVudCA9IGoubGlnYTsKICAkKCcjdU5vbWUnKS50ZXh0Q29udGVudCA9IHVzZXIubm9tZS5zcGxpdCgnICcpWzBdICsgJyAnICsgKHVzZXIubm9tZS5zcGxpdCgnICcpWzFdfHwnJykuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyAnLic7CiAgJCgnI3VQcm92YScpLnRleHRDb250ZW50ID0gai5ub21lOwogICQoJyN1QXYnKS50ZXh0Q29udGVudCA9IHVzZXIubm9tZS5zcGxpdCgnICcpLnNsaWNlKDAsMikubWFwKGZ1bmN0aW9uKHApeyByZXR1cm4gcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTsgfSkuam9pbignJyk7CiAgdmFyIHNpbURNID0gZGlhTWVzKGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5pZCA9PT0gai5zaW11bGFkb0lkOyB9KS5kYXRhKTsKICAkKCcjYmFkZ2VTaW0nKS5pbm5lckhUTUwgPSBzaW1ETS5kICsgJzxicj4nICsgc2ltRE0ubTsKICAkKCcjYnRuU2FpcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgc3RvcmUubG9nb3V0KCk7IGxvY2F0aW9uLmhyZWYgPSB3aW5kb3cuX19BRl9VUkxTID8gQUZfVVJMUy5scCA6IGxvY2F0aW9uLmhyZWY7IH0pOwoKICAvLyBhdGFsaG8gcHJvIFBhaW5lbCBkZSBvcGVyYcOnw6NvOiBlbmdyZW5hZ2VtIHJldmVsYWRhIFPDkyBwYXJhIG9zIENQRnMgZGUKICAvLyBjb29yZGVuYcOnw6NvIChwYWRyw6NvIGRhIGVuZ3JlbmFnZW0gZG8gQm9sw6NvIGRhIENvcnVqYSkuIE8gcGFpbmVsIHRlbSBjaGF2ZQogIC8vIHByw7NwcmlhIG5vIHNlcnZpZG9yOyBpc3RvIMOpIHPDsyBvIGNhbWluaG8gYXTDqSBlbGUsIG7Do28gdW1hIHBlcm1pc3PDo28uCiAgdmFyIGJ0blBhaW5lbCA9ICQoJyNidG5QYWluZWwnKTsKICBpZiAoYnRuUGFpbmVsICYmIENQRlNfQ09PUkQuaW5kZXhPZih1c2VyLmNwZikgPiAtMSkgewogICAgYnRuUGFpbmVsLmhyZWYgPSAod2luZG93Ll9fQUZfVVJMUyAmJiBBRl9VUkxTLnBhaW5lbCkgfHwgJy4uL3BhaW5lbC8nOwogICAgYnRuUGFpbmVsLmhpZGRlbiA9IGZhbHNlOwogIH0KCiAgLy8gbW9kbyBjbGFyby9lc2N1cm8gKHBlcnNpc3RpZG8gZW0gYWZfdGhlbWU7IGFwbGljYWRvIG5vIDxoZWFkPiBzZW0gZmxhc2gpCiAgdmFyIElDT19TT0wgPSAnPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI0LjIiLz48cGF0aCBkPSJNMTIgMnYyLjZNMTIgMTkuNFYyMk0yIDEyaDIuNk0xOS40IDEySDIyTTQuOSA0LjlsMS45IDEuOU0xNy4yIDE3LjJsMS45IDEuOU00LjkgMTkuMWwxLjktMS45TTE3LjIgNi44bDEuOS0xLjkiLz48L3N2Zz4nOwogIHZhciBJQ09fTFVBID0gJzxzdmcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTIwLjQgMTQuMkE4LjYgOC42IDAgMSAxIDkuOCAzLjZhNyA3IDAgMSAwIDEwLjYgMTAuNnoiLz48L3N2Zz4nOwogIHZhciBidG5UZW1hID0gJCgnI2J0blRlbWEnKTsKICBmdW5jdGlvbiBwaW50YVRlbWEoKXsgaWYgKGJ0blRlbWEpIGJ0blRlbWEuaW5uZXJIVE1MID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWUgPT09ICdkYXJrJyA\/IElDT19TT0wgOiBJQ09fTFVBOyB9CiAgaWYgKGJ0blRlbWEpIGJ0blRlbWEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgdmFyIGVzY3VybyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kYXRhc2V0LnRoZW1lID09PSAnZGFyayc7CiAgICBpZiAoZXNjdXJvKSB7IGRlbGV0ZSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC50aGVtZTsgc3RvcmUuc2V0KCd0aGVtZScsICdjbGFybycpOyB9CiAgICBlbHNlIHsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWUgPSAnZGFyayc7IHN0b3JlLnNldCgndGhlbWUnLCAnZGFyaycpOyB9CiAgICBwaW50YVRlbWEoKTsKICB9KTsKICBwaW50YVRlbWEoKTsKCiAgdmFyIHRvdGFsRGlhcyA9IGRpYXMoai5pbmljaW8sIGoucHJvdmEpICsgMTsKICB2YXIgZGlhQXR1YWwgPSBNYXRoLm1pbih0b3RhbERpYXMsIE1hdGgubWF4KDEsIGRpYXMoai5pbmljaW8sIGhvamUuaXNvKSArIDEpKTsKICBpZiAoaG9qZS5pc28gPCBqLmluaWNpbykgewogICAgJCgnI2RpYUpvcm5hZGEnKS50ZXh0Q29udGVudCA9ICdDb21lw6dhIGVtICcgKyBkYXRhQlIoai5pbmljaW8pOwogICAgJCgnI2pvcm5hZGFGaWxsJykuc3R5bGUud2lkdGggPSAnMCUnOwogIH0gZWxzZSB7CiAgICAkKCcjZGlhSm9ybmFkYScpLnRleHRDb250ZW50ID0gJ0RpYSAnICsgZGlhQXR1YWwgKyAnIGRlICcgKyB0b3RhbERpYXM7CiAgICAkKCcjam9ybmFkYUZpbGwnKS5zdHlsZS53aWR0aCA9IE1hdGgucm91bmQoZGlhQXR1YWwvdG90YWxEaWFzKjEwMCkgKyAnJSc7CiAgfQoKICBmdW5jdGlvbiBkZW1vQmFubmVyKCl7CiAgICB2YXIgbXNncyA9IFtdOwogICAgaWYgKE1PRE9fVkFMSURBQ0FPKSBtc2dzLnB1c2goJzxiPkFtYmllbnRlIGRlIHRlc3RlOjwvYj4gdHVkbyBsaWJlcmFkbyBhbnRlcyBkYSBlc3RyZWlhOyByZWdpc3Ryb3Mgc2Vyw6NvIHplcmFkb3Mgbm8gbGFuw6dhbWVudG8uJyk7CiAgICBlbHNlIGlmIChtb2RvUHJldmlldygpKSBtc2dzLnB1c2goJzxiPlZpc8OjbyBkbyBjb29yZGVuYWRvcjo8L2I+IHZvY8OqIHbDqiBvIGNvbnRlw7pkbyBhbnRlcyBkYSBlc3RyZWlhOyBhcyBhw6fDtWVzIHNlZ3VlbSBhcyByZWdyYXMgcmVhaXMgZG9zIGFsdW5vcy4nKTsKICAgIGVsc2UgaWYgKGhvamUuc2ltdWxhZGEpIG1zZ3MucHVzaCgnPGI+VmlzdWFsaXphw6fDo28gZGEgb3BlcmHDp8Ojbzo8L2I+IGRhdGEgc2ltdWxhZGEgJyArIGRhdGFCUihob2plLmlzbykpOwogICAgLy8gKHByw6ktam9ybmFkYSBzZW0gYmFubmVyOiBvIGNoaXAgIkZhbHRhbSBOIGRpYXMiLCBhIHNpZGViYXIgZSBvCiAgICAvLyAiSG9qZSBuYSBqb3JuYWRhIiBqw6EgY29tdW5pY2FtIGEgZGF0YTsgYmFubmVyIHJlcGV0aWEgM3ggYSBtZXNtYSBpbmZvKQogICAgaWYgKGoucHJvdmlzb3JpbykgbXNncy5wdXNoKCdEYXRhcyBkbyBSZXZhbGlkYSAyMDI2LjIgPGI+cHJvdmlzw7NyaWFzPC9iPiBhdMOpIG8gZWRpdGFsIGRvIElORVAnKTsKICAgIGlmICghbXNncy5sZW5ndGgpIHJldHVybiAnJzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZGVtby1iYW5uZXIiPicgKyBtc2dzLmpvaW4oJyDCtyAnKSArICcuPC9kaXY+JzsKICB9CgogIGZ1bmN0aW9uIHBhZ2VIZWFkKGtpY2tlciwgdGl0dWxvLCBkZXNjLCBjaGlwKXsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0icGFnZS1oZWFkIj48ZGl2PjxzcGFuIGNsYXNzPSJraWNrZXIiPicra2lja2VyKyc8L3NwYW4+PGgxPicrdGl0dWxvKyc8L2gxPicrCiAgICAgICc8cCBjbGFzcz0iZGVzYyI+JytkZXNjKyc8L3A+PC9kaXY+PHNwYW4gY2xhc3M9InB0cy1jaGlwIj4nK2NoaXArJzwvc3Bhbj48L2Rpdj4nOwogIH0KCiAgLyogLS0tLS0tLS0tLSBBVUxBUyAodG9kYXMgYXMgdHJhbnNtaXNzw7VlcyArIGNoZWNrLWluIGVtYnV0aWRvKSAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gZXZlbnRvc0RvRGlhKGlzbyl7IHJldHVybiBqLmV2ZW50b3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5kYXRhID09PSBpc287IH0pOyB9CgogIHZhciBJQ09fUExBWSA9ICc8c3ZnIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik03IDRsMTMgOC0xMyA4eiIvPjwvc3ZnPic7CiAgdmFyIElDT19ETCA9ICc8c3ZnIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTEyIDN2MTIiLz48cGF0aCBkPSJNNiAxMWw2IDYgNi02Ii8+PHBhdGggZD0iTTQgMjFoMTYiLz48L3N2Zz4nOwoKICB2YXIgSUNPX1BST1ZBID0gJzxzdmcgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cmVjdCB4PSI1IiB5PSIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTgiIHJ4PSIyIi8+PHBhdGggZD0iTTkuNSAzdjIuNGg1VjMiLz48cGF0aCBkPSJNOC41IDExbDEuNiAxLjZMMTMuNSA5Ii8+PHBhdGggZD0iTTguNSAxNmg3Ii8+PC9zdmc+JzsKCiAgZnVuY3Rpb24gdHJpbGhhSXRlbShlKXsKICAgIHZhciBjaGVja3MgPSBzdG9yZS5jaGVja2lucyh1c2VyLmVtYWlsKTsKICAgIHZhciBxcyA9IHN0b3JlLm1pc3NvZXModXNlci5lbWFpbCk7CiAgICB2YXIgZG9uZSA9ICEhY2hlY2tzW2UuaWRdOwogICAgdmFyIGZ1dHVyYSA9IGUuZGF0YSA+IGhvamUuaXNvOwogICAgdmFyIGlzSG9qZSA9IGUuZGF0YSA9PT0gaG9qZS5pc287CiAgICB2YXIgZG0gPSBkaWFNZXMoZS5kYXRhKTsKICAgIHZhciBtID0gcXNbZS5pZF07CgogICAgLy8gTyBTSU1VTEFETyBGSU5BTCBuw6NvIMOpIHZpZGVvYXVsYSAocGVkaWRvIGRvIElnb3IsIDEyLzA4KTogcmVuZGVyaXphIGNvbW8KICAgIC8vIFBST1ZBIOKAlCDDrWNvbmUgZGUgZ2FiYXJpdG8gKHNlbSB0aHVtYiBkbyBZb3VUdWJlLCBzZW0gcGxheS9zbGlkZXMpLCBhcG9udGEKICAgIC8vIHByYSBhYmEgZG8gU2ltdWxhZG8gbmEgcGxhdGFmb3JtYSwgbsOjbyBwcm8gWW91VHViZS4KICAgIGlmIChlLmlkID09PSBqLnNpbXVsYWRvSWQpIHsKICAgICAgdmFyIGNsc1MgPSBmdXR1cmEgPyAnbmV4dCcgOiBpc0hvamUgPyAnbm93JyA6ICdtaXNzJzsKICAgICAgdmFyIGhvcmFTID0gU3RyaW5nKGUuaG9yYSB8fCAnJyk7CiAgICAgIHZhciBjdGFTID0gKGZ1dHVyYSAmJiAhbW9kb1ByZXZpZXcoKSkKICAgICAgICA\/ICc8c3BhbiBjbGFzcz0icmVzIiBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpIj5BYnJlIGVtICcrZGF0YUJSKGUuZGF0YSkrJywgw6BzICcrZXNjKGhvcmFTLnNwbGl0KCcgJylbMF0pKyc8L3NwYW4+JwogICAgICAgIDogJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBkYXRhLWdvdG89InNpbXVsYWRvIj5JciBwYXJhIG8gU2ltdWxhZG88L2J1dHRvbj4nOwogICAgICByZXR1cm4gJzxkaXYgY2xhc3M9InRyLWl0ZW0gdHItc2ltICcrY2xzUysnIj48c3BhbiBjbGFzcz0idHItZG90Ij48L3NwYW4+PGRpdiBjbGFzcz0idHItY2FyZCI+JysKICAgICAgICAnPGRpdiBjbGFzcz0idHItZGF0YSI+JytkbS5kKyc8c21hbGw+JytkbS5tKyc8L3NtYWxsPicrKGlzSG9qZT8nPGVtPkhvamU8L2VtPic6JycpKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci10aHVtYiBzaW0tdGh1bWIiPicrSUNPX1BST1ZBKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci1tYWluIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci13aGVuIj5TaW11bGFkbyBGaW5hbCDCtyAnK2VzYyhlLmhvcmEpKyc8L2Rpdj4nKwogICAgICAgICc8Yj4nK2VzYyhlLnRpdHVsbykrJzwvYj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci1mb290Ij48c3BhbiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcCI+JysKICAgICAgICBjdGFTKyc8c3BhbiBjbGFzcz0ic3RhdGUtdGFnIj5Qcm92YSDDum5pY2EgwrcgMTAwIHF1ZXN0w7VlcyBuYSBwbGF0YWZvcm1hPC9zcGFuPjwvc3Bhbj48L2Rpdj4nKwogICAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgfQoKICAgIHZhciB0aXBvTGFiZWwgPSBlLnRpcG89PT0ncHJvdmEnID8gJ0RpYSBkYSBwcm92YScgOiBlLnRpcG89PT0nbWFyY28nID8gJ0V2ZW50bycgOiAnQXVsYSc7CiAgICB2YXIgdGh1bWIgPSBlLnl0CiAgICAgID8gJzxpbWcgc3JjPSInK3l0VGh1bWIoZS55dCkrJyIgYWx0PSIiIGxvYWRpbmc9ImxhenkiIG9uZXJyb3I9InRoaXMucmVtb3ZlKCkiPicKICAgICAgOiAnPGRpdiBjbGFzcz0iZmFsbCI+PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42IiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxjaXJjbGUgY3g9IjkiIGN5PSIxMCIgcj0iMi4yIi8+PGNpcmNsZSBjeD0iMTUiIGN5PSIxMCIgcj0iMi4yIi8+PHBhdGggZD0iTTQgMjBjMC02IDItMTMgOC0xM3M4IDcgOCAxMyIvPjxwYXRoIGQ9Ik05IDRsMyAyIDMtMiIvPjwvc3ZnPjwvZGl2Pic7CgogICAgdmFyIGFjdHMgPSAnPHNwYW4gY2xhc3M9ImFjdHMiPicrCiAgICAgIChmdXR1cmEKICAgICAgICA\/ICc8YSBjbGFzcz0iYnRuLWljbyIgaHJlZj0iJysoZS55dCB8fCAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGVzdHJhdGVnaWFtZWQnKSsnIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciIgdGl0bGU9IkRlZmluaXIgbGVtYnJldGUgbm8gWW91VHViZSIgYXJpYS1sYWJlbD0iRGVmaW5pciBsZW1icmV0ZSBubyBZb3VUdWJlIj4nK0lDT19TSU5PKyc8L2E+JwogICAgICAgIDogJzxhIGNsYXNzPSJidG4taWNvIiBocmVmPSInKyhlLnl0IHx8ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9AZXN0cmF0ZWdpYW1lZCcpKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiB0aXRsZT0iQXNzaXN0aXIgw6AgYXVsYSIgYXJpYS1sYWJlbD0iQXNzaXN0aXIgw6AgYXVsYSI+JytJQ09fUExBWSsnPC9hPicpKwogICAgICAoU0xJREVTW2UuaWRdCiAgICAgICAgPyAnPGEgY2xhc3M9ImJ0bi1pY28iIGhyZWY9IicrU0xJREVTW2UuaWRdKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiB0aXRsZT0iQmFpeGFyIHNsaWRlcyIgYXJpYS1sYWJlbD0iQmFpeGFyIHNsaWRlcyI+JytJQ09fREwrJzwvYT4nCiAgICAgICAgOiAnPHNwYW4gY2xhc3M9ImJ0bi1pY28gb2ZmIiB0aXRsZT0iU2xpZGVzIGVtIGJyZXZlIj4nK0lDT19ETCsnPC9zcGFuPicpKyc8L3NwYW4+JzsKCiAgICB2YXIgdGVtQ2hhdmUgPSBURU1fQ0hBVkUuaW5kZXhPZihlLmlkKSA+IC0xOwogICAgdmFyIGNoaXAgPSBkb25lCiAgICAgID8gJzxzcGFuIGNsYXNzPSJyZXMiPlByZXNlbnRlPC9zcGFuPicKICAgICAgOiBmdXR1cmEKICAgICAgICA\/IChtb2RvUHJldmlldygpICYmIHRlbUNoYXZlCiAgICAgICAgICAgID8gJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBkYXRhLWV4cGFuZD0iJytlLmlkKyciPkZhemVyIGNoZWNrLWluPC9idXR0b24+JwogICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz0icmVzIiBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpIj5BZ2VuZGFkYTwvc3Bhbj4nKQogICAgICAgIDogKGlzSG9qZSB8fCAhdGVtQ2hhdmUgPyAnJyA6ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1leHBhbmQ9IicrZS5pZCsnIj5SZWN1cGVyYXI8L2J1dHRvbj4nKTsKCiAgICB2YXIgcXVlc3RvZXMgPSAnJzsKICAgIGlmIChlLnF1aXogJiYgKCFmdXR1cmEgfHwgbW9kb1ByZXZpZXcoKSkpIHsKICAgICAgdmFyIG5Qcm9nUSA9IG5SZXNwb3N0YXNFdmVudG8oZS5pZCk7CiAgICAgIHF1ZXN0b2VzID0gbQogICAgICAgID8gJzxzcGFuIGNsYXNzPSJyZXMiIHN0eWxlPSJmb250LXNpemU6MTJweCI+UXVlc3TDtWVzICcrbS5hY2VydG9zKycvJyttLnRvdGFsKyc8L3NwYW4+JwogICAgICAgIDogKHF1aXpEb0V2ZW50byhlKS5sZW5ndGgKICAgICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGRhdGEtcXVpej0iJytlLmlkKyciPicrKG5Qcm9nUSA\/ICdDb250aW51YXIgcXVlc3TDtWVzICgnK25Qcm9nUSsnLycrcXVpekRvRXZlbnRvKGUpLmxlbmd0aCsnKScgOiAnUXVlc3TDtWVzIGRvIGRpYSDCtyBhdMOpICcrUFRfRElBKycgcHRzJykrJzwvYnV0dG9uPicKICAgICAgICAgICAgOiAnPHNwYW4gY2xhc3M9InN0YXRlLXRhZyBzdGF0ZS13YWl0Ij5RdWVzdMO1ZXMgZW0gcHJlcGFyYcOnw6NvPC9zcGFuPicpOwogICAgfQoKICAgIHZhciBmb3JtID0gKCFkb25lICYmICghZnV0dXJhIHx8IG1vZG9QcmV2aWV3KCkpICYmIFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTEpCiAgICAgID8gJzxkaXYgY2xhc3M9InJvdy1mb3JtIiBpZD0icmYtJytlLmlkKyciIHN0eWxlPSJkaXNwbGF5OicrKGlzSG9qZT8nJzonbm9uZScpKyciPicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImV2LWtpY2tlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij5QYWxhdnJhLWNoYXZlIGRhIGF1bGEgwrcgcmV2ZWxhZGEgZHVyYW50ZSBhIHRyYW5zbWlzc8OjbyDCtyAnKyhpc0hvamUgPyAndmFsZSAnK1BUX0FVTEErJyBwdHMnIDogJ3JldHJvYXRpdm8gwrcgdmFsZSAnK1BUX0FVTEFfUkVUUk8rJyBwdHMnKSsnPC9kaXY+JysKICAgICAgICAnPGZvcm0gY2xhc3M9ImNoZWNraW4tZm9ybSIgZGF0YS1ldj0iJytlLmlkKyciPicrCiAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iRGlnaXRlIGEgcGFsYXZyYS1jaGF2ZSIgYXJpYS1sYWJlbD0iUGFsYXZyYS1jaGF2ZSBkYSBhdWxhIiBhdXRvY29tcGxldGU9Im9mZiI+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIHR5cGU9InN1Ym1pdCI+JysoaXNIb2plPydDaGVjay1pbic6J0NvbmZpcm1hciBwcmVzZW7Dp2EgKHJldHJvYXRpdmEpJykrJzwvYnV0dG9uPjwvZm9ybT48L2Rpdj4nCiAgICAgIDogJyc7CgogICAgdmFyIGNscyA9IGRvbmUgPyAnb2snIDogZnV0dXJhID8gJ25leHQnIDogaXNIb2plID8gJ25vdycgOiAnbWlzcyc7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9InRyLWl0ZW0gJytjbHMrJyI+PHNwYW4gY2xhc3M9InRyLWRvdCI+PC9zcGFuPjxkaXYgY2xhc3M9InRyLWNhcmQiJysoZS55dCA\/ICcgZGF0YS15dD0iJytlLnl0KyciIHRpdGxlPSJBYnJpciBlc3RhIGF1bGEgbm8gWW91VHViZSInIDogJycpKyc+JysKICAgICAgJzxkaXYgY2xhc3M9InRyLWRhdGEiPicrZG0uZCsnPHNtYWxsPicrZG0ubSsnPC9zbWFsbD4nKyhpc0hvamU\/JzxlbT5Ib2plPC9lbT4nOicnKSsnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InRyLXRodW1iIj4nK3RodW1iKyc8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0idHItbWFpbiI+JysKICAgICAgJzxkaXYgY2xhc3M9InRyLXdoZW4iPicrdGlwb0xhYmVsKycgwrcgJytlc2MoZS5ob3JhKSsnPC9kaXY+JysKICAgICAgJzxiPicrZXNjKGUudGl0dWxvKSsnPC9iPicrCiAgICAgICc8ZGl2IGNsYXNzPSJ0ci1mb290Ij48c3BhbiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcCI+JytjaGlwK3F1ZXN0b2VzKyc8L3NwYW4+JythY3RzKyc8L2Rpdj4nK2Zvcm0rCiAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gd2lyZUF1bGFzKCl7CiAgICAvLyBjYXJkIGludGVpcm8gY2xpY8OhdmVsOiB0w610dWxvLCB0aHVtYiBvdSDDoXJlYSBsaXZyZSBhYnJlbSBhIGF1bGEgbm8KICAgIC8vIFlvdVR1YmU7IGNvbnRyb2xlcyBpbnRlcm5vcyAoY2hlY2staW4sIHF1ZXN0w7Vlcywgw61jb25lcykgZmljYW0gaW50YWN0b3MKICAgICQkKCcudHItY2FyZFtkYXRhLXl0XScpLmZvckVhY2goZnVuY3Rpb24oY2FyZCl7CiAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldil7CiAgICAgICAgaWYgKGV2LnRhcmdldC5jbG9zZXN0KCdhLGJ1dHRvbixpbnB1dCxmb3JtLC5yb3ctZm9ybSxkZXRhaWxzJykpIHJldHVybjsKICAgICAgICB3aW5kb3cub3BlbihjYXJkLmRhdGFzZXQueXQsICdfYmxhbmsnLCAnbm9vcGVuZXInKTsKICAgICAgfSk7CiAgICB9KTsKICAgICQkKCcuY2hlY2tpbi1mb3JtJykuZm9yRWFjaChmdW5jdGlvbihmKXsKICAgICAgZi5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbihldil7CiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgICAgICAvLyBjYXJpbWJhIHByYSBxdWUgbyByZXNnYXRlIGFudGktUm9ja2V0IGdsb2JhbCAoZG9jdW1lbnQgY2xpY2spIG7Do28KICAgICAgICAvLyByZS1kaXNwYXJlIGVzdGUgc3VibWl0IGVtIDQwMG1zIOKGkiByZWdpc3RyYXJfY2hlY2tpbiBkb2JyYWRvICsgdG9hc3QKICAgICAgICAvLyAidm9jw6ogasOhIGNvbmZpcm1vdSBwcmVzZW7Dp2EiLiBNZXNtYSBibGluZGFnZW0gZG8gZm9ybSBkZSBhdXRoLgogICAgICAgIGV2LnRhcmdldC5fX3VsdGltb1N1Ym1pdCA9IERhdGUubm93KCk7CiAgICAgICAgdmFyIHZhbCA9IGYucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZS50cmltKCk7CiAgICAgICAgdmFyIGJ0biA9IGYucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7CiAgICAgICAgaWYgKGJ0bi5kaXNhYmxlZCkgcmV0dXJuOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgLy8gUFJPRFXDh8ODTzogYSBwYWxhdnJhLWNoYXZlIMOpIHZhbGlkYWRhIE5PIFNFUlZJRE9SIChzZWdyZWRvIG5vIGJhbmNvKTsKICAgICAgICAvLyBvIHNlcnZpZG9yIHRhbWLDqW0gZGVjaWRlIHNlIG8gY2hlY2staW4gw6kgYW8gdml2byBvdSByZXRyb2F0aXZvCiAgICAgICAgc2JScGMoJ3JlZ2lzdHJhcl9jaGVja2luJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYsIHBfZXZlbnRvOiBmLmRhdGFzZXQuZXYsIHBfcGFsYXZyYTogdmFsIH0pCiAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09ICdvaycpIHsKICAgICAgICAgICAgICBDQUNIRS5jaGVja2luc1tmLmRhdGFzZXQuZXZdID0geyBhb1Zpdm86IHJlcy5hb192aXZvLCB0czogRGF0ZS5ub3coKSB9OwogICAgICAgICAgICAgIHZhciBnYW5obyA9IHJlcy5hb192aXZvID8gUFRfQVVMQSA6IFBUX0FVTEFfUkVUUk87CiAgICAgICAgICAgICAgdG9hc3QoJ1ByZXNlbsOnYSBjb25maXJtYWRhIMK3ICsnK2ZtdFB0cyhnYW5obykrJyBwdHMnKyhyZXMuYW9fdml2byA\/ICcnIDogJyAocmV0cm9hdGl2byDCtyA3NSUpJykrJy4gT2ZlbnNpdmEgYXRpdmEhJyk7CiAgICAgICAgICAgICAgdmFyIHkgPSB3aW5kb3cuc2Nyb2xsWTsKICAgICAgICAgICAgICByZW5kZXJBdWxhcygpOwogICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB5KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuc3RhdHVzID09PSAnamFfZmVpdG8nKSB7CiAgICAgICAgICAgICAgdG9hc3QoJ1ZvY8OqIGrDoSBjb25maXJtb3UgcHJlc2Vuw6dhIG5lc3RhIGF1bGEuJyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLnN0YXR1cyA9PT0gJ2V2ZW50b19mdXR1cm8nKSB7CiAgICAgICAgICAgICAgdG9hc3QoJ08gY2hlY2staW4gYWJyZSBubyBkaWEgZGEgYXVsYS4nKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0b2FzdCgnUGFsYXZyYS1jaGF2ZSBpbmNvcnJldGEuIEVsYSDDqSByZXZlbGFkYSBkdXJhbnRlIGEgdHJhbnNtaXNzw6NvLicpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyB0b2FzdCgnU2VtIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0pOwogICAgICB9KTsKICAgIH0pOwogICAgJCQoJ1tkYXRhLWV4cGFuZF0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICB2YXIgZiA9ICQoJyNyZi0nICsgYi5kYXRhc2V0LmV4cGFuZCk7CiAgICAgICAgaWYgKCFmKSByZXR1cm47CiAgICAgICAgdmFyIGFicmlyID0gZi5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZSc7CiAgICAgICAgJCQoJy5yb3ctZm9ybScpLmZvckVhY2goZnVuY3Rpb24oeCl7IGlmICh4LmlkICE9PSAncmYtJyArIGIuZGF0YXNldC5leHBhbmQpIHguc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSk7CiAgICAgICAgZi5zdHlsZS5kaXNwbGF5ID0gYWJyaXIgPyAnJyA6ICdub25lJzsKICAgICAgICBpZiAoYWJyaXIpIGYucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpOwogICAgICB9KTsKICAgIH0pOwogICAgJCQoJ1tkYXRhLXF1aXpdJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHJlbmRlclF1aXooYi5kYXRhc2V0LnF1aXopOyB9KTsKICAgIH0pOwogICAgJCQoJ1tkYXRhLWdvdG9dJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGdvKGIuZGF0YXNldC5nb3RvKTsgfSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckF1bGFzKCl7CiAgICB2YXIgcCA9IGNhbGNQb250b3ModXNlcik7CiAgICB2YXIgY2hlY2tzID0gc3RvcmUuY2hlY2tpbnModXNlci5lbWFpbCk7CiAgICB2YXIgZXZIb2plID0gZXZlbnRvc0RvRGlhKGhvamUuaXNvKTsKICAgIHZhciBwcmltZWlyYUNvbUNoYXZlID0gai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBURU1fQ0hBVkUuaW5kZXhPZihlLmlkKSA+IC0xOyB9KSB8fCBqLmV2ZW50b3NbMF07CiAgICB2YXIgbXNnT2ZlbnNpdmEgPSBldkhvamUubGVuZ3RoCiAgICAgID8gJ0hvamUgdGVtICcgKyAoZXZIb2plLmxlbmd0aD4xPydhdWxhcyc6J2F1bGEnKSArICc6ICcgKyBldkhvamUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiAnPGI+Jytlc2MoZS50aXR1bG8pKyc8L2I+Jzt9KS5qb2luKCcgZSAnKSArICcuICcgKwogICAgICAgIChldkhvamUuc29tZShmdW5jdGlvbihlKXsgcmV0dXJuIFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7IH0pCiAgICAgICAgICA\/ICdGYcOnYSBvIGNoZWNrLWluIGNvbSBhIHBhbGF2cmEtY2hhdmUgcmV2ZWxhZGEgYW8gdml2by4nCiAgICAgICAgICA6ICdBcHJvdmVpdGUgYSB0cmFuc21pc3PDo28gYW8gdml2byBubyBZb3VUdWJlLicpCiAgICAgIDogaG9qZS5pc28gPCBqLmluaWNpbwogICAgICAgID8gJ1N1YSBwcmltZWlyYSBwcmVzZW7Dp2E6ICcrZXNjKHByaW1laXJhQ29tQ2hhdmUudGl0dWxvKSsnICgnK2RhdGFCUihwcmltZWlyYUNvbUNoYXZlLmRhdGEpKycpLicKICAgICAgICA6ICdOw6NvIGjDoSBhdWxhIGhvamUuIFJlY3VwZXJlIHByZXNlbsOnYXMgcGVuZGVudGVzIG5hIHRyaWxoYSBhYmFpeG8uJzsKCiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdTdWEgam9ybmFkYSBkZSBhdWxhcycsICdBdWxhcycsCiAgICAgICdBc3Npc3RhLCBiYWl4ZSBvcyBzbGlkZXMgZSBjb25maXJtZSBwcmVzZW7Dp2EgY29tIGEgcGFsYXZyYS1jaGF2ZSByZXZlbGFkYSBhbyB2aXZvLicsCiAgICAgICc1MjAgcHRzIGVtIGpvZ28nKTsKICAgIGh0bWwgKz0gZGVtb0Jhbm5lcigpOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBvZmVuc2l2YS1jYXJkIj4nKwogICAgICAnPGRpdiBjbGFzcz0iZmxhbWUiPjxkaXYgY2xhc3M9Im4iPicrcC5vZmVuc2l2YSsnPC9kaXY+PGRpdiBjbGFzcz0ibCI+YXVsYXMgc2VndWlkYXM8L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdj48aDM+U3VhIG9mZW5zaXZhPC9oMz48ZGl2IGNsYXNzPSJtc2ciPicrbXNnT2ZlbnNpdmErJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+PGRpdiBjbGFzcz0iZmlsbCIgc3R5bGU9IndpZHRoOicrKHAubkNoZWNrcy9wLm5FdmVudG9zKjEwMCkrJyUiPjwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm9ncmVzcy1ub3RlIj4nK3AubkNoZWNrcysnIGRlICcrcC5uRXZlbnRvcysnIHByZXNlbsOnYXMgYXTDqSBhcXVpPC9kaXY+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InJhbmstcHRzIj48ZGl2IGNsYXNzPSJuIj4nK2ZtdFB0cyhwLnByZXNlbmNhKSsnIDxzbWFsbD4vICcrUE9OVE9TLnByZXNlbmNhKycgcHRzPC9zbWFsbD48L2Rpdj48ZGl2IGNsYXNzPSJsIj5QcmVzZW7Dp2EgbmEgY2xhc3NpZmljYcOnw6NvPC9kaXY+JysKICAgICAgJzwvZGl2PicrCiAgICAgICc8L2Rpdj4nOwoKICAgIFswLDEsMl0uZm9yRWFjaChmdW5jdGlvbihzZW0pewogICAgICB2YXIgZXZzID0gai5ldmVudG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUuc2VtYW5hID09PSBzZW07IH0pOwogICAgICBpZiAoIWV2cy5sZW5ndGgpIHJldHVybjsKICAgICAgLy8gcHJlc2Vuw6dhcyBjb250YWRhcyBzw7Mgc29icmUgZXZlbnRvcyBDT00gY2hhdmUgKGEgQWJlcnR1cmEgZSBvIGRpYSBkbwogICAgICAvLyBTaW11bGFkbyBuw6NvIHTDqm0gY2hlY2staW4gZSBuw6NvIGVudHJhbSBubyBkZW5vbWluYWRvcikKICAgICAgdmFyIGNvbUNoYXZlID0gZXZzLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7IH0pOwogICAgICB2YXIgZmVpdGFzID0gY29tQ2hhdmUuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gY2hlY2tzW2UuaWRdOyB9KS5sZW5ndGg7CiAgICAgIHZhciByb3R1bG8gPSBzZW09PT0wID8gJ0FiZXJ0dXJhJyA6ICdTZW1hbmEgJytzZW07CiAgICAgIHZhciBmYWl4YSA9IGV2c1swXS5kYXRhID09PSBldnNbZXZzLmxlbmd0aC0xXS5kYXRhCiAgICAgICAgPyBkYXRhQlIoZXZzWzBdLmRhdGEpCiAgICAgICAgOiBkYXRhQlIoZXZzWzBdLmRhdGEpKycgYSAnK2RhdGFCUihldnNbZXZzLmxlbmd0aC0xXS5kYXRhKTsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic2VjLWgiPicrcm90dWxvKycgwrcgJytmYWl4YSsKICAgICAgICAoY29tQ2hhdmUubGVuZ3RoID8gJyA8c3BhbiBjbGFzcz0iY250JysoZmVpdGFzPT09Y29tQ2hhdmUubGVuZ3RoPycgZyc6JycpKyciPicrZmVpdGFzKycvJytjb21DaGF2ZS5sZW5ndGgrJyBwcmVzZW7Dp2FzPC9zcGFuPicgOiAnJykrJzwvZGl2Pic7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InRyaWxoYSI+JytldnMubWFwKHRyaWxoYUl0ZW0pLmpvaW4oJycpKyc8L2Rpdj4nOwogICAgfSk7CgogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgd2lyZUF1bGFzKCk7CiAgfQoKICAvKiAtLS0tLS0tLS0tIElOw41DSU8gKGNvbWVjZSBwb3IgYXF1aSkgLS0tLS0tLS0tLSAqLwogIC8vIEEgT1JERU0gRE8gSU7DjUNJTyBNVURBIENPTSBBIEZBU0UgKGRlY2lzw6NvIGRvIElnb3IsIDEwLzA4KS4gQW50ZXMgZGEKICAvLyBlc3RyZWlhIG8gYWx1bm8gbsOjbyB0ZW0gbyBxdWUgZmF6ZXIgaG9qZTogbyB0b3BvIG1vc3RyYSBvIHF1ZSBlbGUgUE9ERQogIC8vIGZhemVyIGFnb3JhIChwcsOzeGltYSB0cmFuc21pc3PDo28sIGluZGljYXIgYW1pZ29zKSBlIGFzIHJlZ3Jhcy9CUSBNRUQKICAvLyBkZXNjZW0uIEEgcGFydGlyIGRlIDI2LzA4IG8gZGlhIGRlIGhvamUgZSBhIHBvbnR1YcOnw6NvIHNvYmVtLCBlIG8gIkNvbW8KICAvLyB2YWkgZnVuY2lvbmFyIiByZWNvbGhlIG51bSA8ZGV0YWlscz4uIEEgdHJvY2Egw6kgYXV0b23DoXRpY2EgcGVsYSBkYXRhLgogIGZ1bmN0aW9uIHJlbmRlckluaWNpbygpewogICAgdmFyIHAgPSBjYWxjUG9udG9zKHVzZXIpOwogICAgdmFyIGV2SG9qZSA9IGV2ZW50b3NEb0RpYShob2plLmlzbyk7CiAgICB2YXIgcXMgPSBzdG9yZS5taXNzb2VzKHVzZXIuZW1haWwpOwogICAgdmFyIGNoZWNrcyA9IHN0b3JlLmNoZWNraW5zKHVzZXIuZW1haWwpOwogICAgdmFyIGF0cmFzYWRhcyA9IGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLnF1aXogJiYgZS5kYXRhIDwgaG9qZS5pc28gJiYgIXFzW2UuaWRdOyB9KS5sZW5ndGg7CiAgICB2YXIgcHJlRXN0cmVpYSA9IGhvamUuaXNvIDwgai5pbmljaW87CgogICAgdmFyIGh0bWwgPSBwYWdlSGVhZCgnQ29tZWNlIHBvciBhcXVpJywgJ0JlbS12aW5kbywgJytlc2ModXNlci5ub21lLnNwbGl0KCcgJylbMF0pKycuJywKICAgICAgJ0FxdWkgY29tZcOnYSBhIHN1YSBqb3JuYWRhIGRlIHJldGEgZmluYWwgcnVtbyBhbyAnK0FGX0JSQU5ELmN1cnRhKycuJywKICAgICAgKHByZUVzdHJlaWEgPyAnRmFsdGFtICcrZGlhcyhob2plLmlzbywgai5pbmljaW8pKycgZGlhcycgOiAnRGlhICcrZGlhQXR1YWwrJyBkZSAnK3RvdGFsRGlhcykpOwoKICAgIGh0bWwgKz0gZGVtb0Jhbm5lcigpOwoKICAgIC8qIC0tLSBCTE9DT1M6IG1vbnRhZG9zIGFxdWksIG9yZGVuYWRvcyBwb3IgZmFzZSBubyBmaW0gZGEgZnVuw6fDo28gLS0tICovCgogICAgLy8gVsOtZGVvIGRlIGJvYXMtdmluZGFzIChob2plIGRlc2xpZ2FkbyBwZWxhIGZsYWc7IHZvbHRhIGNvbW8gaXRlbSAyIG5hCiAgICAvLyBwcsOpLWVzdHJlaWEgcXVhbmRvIG8gSWdvciBncmF2YXIpLiBtYXgtd2lkdGggc2VndXJhIGEgYWx0dXJhIGRvIHBsYXllcgogICAgLy8gMTY6OSBwcm8gYWx1bm8gZW54ZXJnYXIgcXVlIGjDoSBjb250ZcO6ZG8gYWJhaXhvIGRhIGRvYnJhIChwZWRpZG8gMDgvMDgpLgogICAgdmFyIHZpZGVvQlYgPSBWSURFT19CVl9QT1JfUFJPVkFbQUZfUFJPVkFdIHx8ICcnOwogICAgdmFyIGJWaWRlbyA9IHZpZGVvQlYKICAgICAgPyAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6MDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLWJvdHRvbToyMnB4O21heC13aWR0aDo3MDBweCI+JysKICAgICAgICAnPGRpdiBzdHlsZT0icGFkZGluZzoxOHB4IDI0cHggMTRweCI+JysKICAgICAgICAnPGgzIHN0eWxlPSJtYXJnaW46MCAwIDJweCI+Q29tZWNlIHBvciBhcXVpPC9oMz4nKwogICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1pbmstZGltKTttYXJnaW46MCI+QSBqb3JuYWRhLCBvcyBwb250b3MgZSBvcyBwcsOqbWlvcyBlbSBwb3Vjb3MgbWludXRvcy48L3A+PC9kaXY+JysKICAgICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy10b3A6NTYuMjUlO2JhY2tncm91bmQ6IzAwMCI+JysKICAgICAgICAnPGlmcmFtZSBzcmM9IicrdmlkZW9CVisnIiB0aXRsZT0iVsOtZGVvIGRlIGJvYXMtdmluZGFzIGRvIEF0byBGaW5hbCIgJysKICAgICAgICAnc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjowIiAnKwogICAgICAgICdhbGxvdz0iYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmU7IGZ1bGxzY3JlZW4iICcrCiAgICAgICAgJ2FsbG93ZnVsbHNjcmVlbiBsb2FkaW5nPSJsYXp5Ij48L2lmcmFtZT4nKwogICAgICAgICc8L2Rpdj48L2Rpdj4nCiAgICAgIDogJyc7CgogICAgLy8gQ29tbyB2YWkgZnVuY2lvbmFyOiBBQkVSVE8gYW50ZXMgZGEgZXN0cmVpYSAow6kgb3JpZW50YcOnw6NvIG5vdmEpLAogICAgLy8gUkVDT0xISURPIGR1cmFudGUgYSBqb3JuYWRhICh2aXJhIGNvbnN1bHRhLCBuw6NvIG9jdXBhIGEgZG9icmEpCiAgICB2YXIgcGFzc29zID0gJzxkaXYgY2xhc3M9Im9iLWdyaWQiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJvYi1pdGVtIj48c3BhbiBjbGFzcz0ibiI+MTwvc3Bhbj48Yj5Bc3Npc3RhIGUgZmHDp2EgbyBjaGVjay1pbjwvYj5BIHBhbGF2cmEtY2hhdmUgcmV2ZWxhZGEgYW8gdml2byBjb25maXJtYSBzdWEgcHJlc2Vuw6dhOiA0MCBwdHMgYW8gdml2bywgMzAgcmV0cm9hdGl2YS48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0ib2ItaXRlbSI+PHNwYW4gY2xhc3M9Im4iPjI8L3NwYW4+PGI+UmVzb2x2YSBhcyBxdWVzdMO1ZXMgZG8gZGlhPC9iPlVtIGJsb2NvIHBvciBhdWxhLCBjb3JyZcOnw6NvIG5hIGhvcmE6IGF0w6kgNjUgcHRzIHBvciBkaWEuPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9Im9iLWl0ZW0iPjxzcGFuIGNsYXNzPSJuIj4zPC9zcGFuPjxiPkZlY2hlIGNvbSBvIFNpbXVsYWRvIEZpbmFsPC9iPlByb3ZhIMO6bmljYTogNyBwdHMgcG9yIGFjZXJ0bywgYXTDqSA3MDAuIE8gdG9wIDEwIGxldmEgb3MgcHLDqm1pb3MuPC9kaXY+JysKICAgICAgJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJvYi1hY3RzIj4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGRhdGEtZ290bz0iYXVsYXMiPklyIHBhcmEgYXMgYXVsYXM8L2J1dHRvbj4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGRhdGEtZ290bz0icXVlc3RvZXMiPlJlc29sdmVyIHF1ZXN0w7VlczwvYnV0dG9uPicrCiAgICAgICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0taW5rLW11dGUpIj5BcyByZWdyYXMgY29tcGxldGFzIGZpY2FtIG5vIGdydXBvIG9maWNpYWwgZG8gV2hhdHNBcHAuPC9zcGFuPjwvZGl2Pic7CiAgICB2YXIgYkNvbW8gPSBwcmVFc3RyZWlhCiAgICAgID8gJzxkaXYgY2xhc3M9ImNhcmQgb25ib2FyZCI+PGRpdiBjbGFzcz0ia2lja2VyIj5Db21vIHZhaSBmdW5jaW9uYXIsIGVtIDMgcGFzc29zPC9kaXY+JytwYXNzb3MrJzwvZGl2PicKICAgICAgOiAnPGRldGFpbHMgY2xhc3M9ImNhcmQgb25ib2FyZCBvbmJvYXJkLXJlYyI+PHN1bW1hcnk+UmVsZW1icmFyIGNvbW8gZnVuY2lvbmE8L3N1bW1hcnk+JytwYXNzb3MrJzwvZGV0YWlscz4nOwoKICAgIC8vIEJRIE1FRCBGUkVFOiBzw7MgRU5RVUFOVE8gYSBqb3JuYWRhIG7Do28gY29tZcOnYSAocGVkaWRvIGRvIElnb3IsIDEwLzA4KS4KICAgIC8vIEZpY2EgcG9yIMOaTFRJTU86IMOpIHBvbnRlIHByYSBmb3JhIGRhIHBsYXRhZm9ybWEuCiAgICB2YXIgYkJxID0gcHJlRXN0cmVpYQogICAgICA\/ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzoyNHB4IDI4cHg7bWFyZ2luLWJvdHRvbToyMnB4O2Rpc3BsYXk6ZmxleDtnYXA6MThweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4iPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZsZXg6MTttaW4td2lkdGg6MjQwcHgiPjxkaXYgY2xhc3M9ImtpY2tlciI+RW5xdWFudG8gYSBqb3JuYWRhIG7Do28gY29tZcOnYTwvZGl2PicrCiAgICAgICAgJzxoMyBzdHlsZT0ibWFyZ2luOjZweCAwIDRweCI+QlFNRUQgZGUgUG9ydGFzIEFiZXJ0YXM6IHRyZWluZSBkZSBncmHDp2E8L2gzPicrCiAgICAgICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTMuNXB4O2NvbG9yOnZhcigtLWluay1kaW0pO21hcmdpbjowIj5CYW5jbyBkZSBRdWVzdMO1ZXMgbGliZXJhZG8gZW0gYWdvc3RvLiBUcmVpbmUgbm8gcGFkcsOjbyBkYSBzdWEgcHJvdmEgYXTDqSBhIGVzdHJlaWEuPC9wPjwvZGl2PicrCiAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBocmVmPSInK0JRTUVEX1VSTCsnIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+QWNlc3NhciBvIEJRTUVEIGdyw6F0aXM8L2E+PC9kaXY+JwogICAgICA6ICcnOwoKICAgIC8vIEluZGlxdWUgZSBnYW5oZSBwb250b3M6IFNFTSBURVRPIChyZXZpc8OjbyAxMS8wOCkg4oCUIHBsYWNhciBxdWUgc8OzIGNyZXNjZS4KICAgIC8vIFZhbGUgYXV0b23DoXRpY28gcXVhbmRvIG8gYW1pZ28gc2UgaW5zY3JldmUgcGVsbyBsaW5rOyBuw6NvIGjDoSBtYWlzIHZhZ2EKICAgIC8vIG5lbSBwZW5kZW50ZS4gUXVhbnRvIG1haXMgaW5kaWNhciwgbWFpcyBwb250b3MuCiAgICB2YXIgaW5kaWNhID0gQ0FDSEUuaW5kaWNhY29lcyB8fCB7IHZhbGlkYXM6IDAsIHBlbmRlbnRlczogMCwgbGlzdGE6IFtdIH07CiAgICB2YXIgbGlua0luZCA9IEFGX1VSTFMuY2FkYXN0cm8gKyAoQUZfVVJMUy5jYWRhc3Ryby5pbmRleE9mKCc\/JykgPiAtMSA\/ICcmJyA6ICc\/JykgKyAncmVmPScgKyAoQ0FDSEUucmVmQ29kZSB8fCAnJyk7CiAgICB2YXIgbXNnWmFwID0gJ0VzdG91IG5hIHJldGEgZmluYWwgZG8gJytBRl9CUkFORC5jdXJ0YSsnIGNvbSBvIEF0byBGaW5hbCBkbyBFc3RyYXTDqWdpYSBNRUQ6IGF1bGFzIGFvIHZpdm8sIHF1ZXN0w7VlcyBjb21lbnRhZGFzIGUgU2ltdWxhZG8sIHR1ZG8gZ3JhdHVpdG8uIEluc2NyZXZhLXNlIHBlbG8gbWV1IGxpbms6ICcgKyBsaW5rSW5kOwogICAgdmFyIG5JbmQgPSBpbmRpY2EudmFsaWRhcyB8fCAwOwogICAgdmFyIHB0c0luZEF0dWFsID0gUFRfSU5EICogbkluZDsKICAgIHZhciBzY29yZVR4dCA9IG5JbmQKICAgICAgPyAnPGI+KycrcHRzSW5kQXR1YWwrJyBwdHM8L2I+IGrDoSBzb21hZG9zIMK3ICcrbkluZCsnIGFtaWdvJysobkluZD4xPydzIGluc2NyaXRvcyc6JyBpbnNjcml0bycpKycgcGVsbyBzZXUgbGluaycKICAgICAgOiAnQ29tcGFydGlsaGUgc2V1IGxpbms6IGNhZGEgYW1pZ28gcXVlIHNlIGluc2NyZXZlciB2YWxlICsnK1BUX0lORCsnIHB0cywgc2VtIGxpbWl0ZS4nOwogICAgdmFyIGFtaWdvcyA9IChpbmRpY2EubGlzdGEgfHwgW10pLm1hcChmdW5jdGlvbihhKXsKICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz0iaW5kLWZyaWVuZCBvayI+PHNwYW4gY2xhc3M9InN0Ij48L3NwYW4+Jytlc2MoYS5ub21lKSsnPC9zcGFuPic7CiAgICB9KS5qb2luKCcnKTsKICAgIHZhciBiSW5kID0gJzxkaXYgY2xhc3M9InNlYy1oIj5JbmRpcXVlIGUgZ2FuaGUgcG9udG9zPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImNhcmQgaW5kLWNhcmQiPjxkaXYgY2xhc3M9ImluZC1ncmlkIj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLWxlZnQiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiPlByb2dyYW1hIGRlIGluZGljYcOnw6NvIMK3IHNlbSBsaW1pdGU8L2Rpdj4nKwogICAgICAnPGgzPkNhZGEgYW1pZ28gcXVlIHNlIGluc2NyZXZlIHZhbGUgJytQVF9JTkQrJyBwdHM8L2gzPicrCiAgICAgICc8cCBjbGFzcz0icmVncmEiPkNvbnRhIGF1dG9tw6F0aWNvIGFzc2ltIHF1ZSBvIGFtaWdvIHNlIGluc2NyZXZlIHBlbG8gc2V1IGxpbmsuIE7Do28gaMOhIHRldG86IHF1YW50byBtYWlzIGluZGljYXIsIG1haXMgcG9udG9zLjwvcD4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLWxpbmtsYWJlbCI+U2V1IGxpbmsgcGVzc29hbDwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtbGlua3JvdyI+JysKICAgICAgJzxpbnB1dCBpZD0iaW5kTGluayIgcmVhZG9ubHkgdmFsdWU9IicrZXNjKGxpbmtJbmQpKyciIGFyaWEtbGFiZWw9IlNldSBsaW5rIGRlIGluZGljYcOnw6NvIj4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGlkPSJpbmRDb3BpYXIiPkNvcGlhciBsaW5rPC9idXR0b24+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1hY3RzIj4nKwogICAgICAnPGEgY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIGJ0bi13YSIgaHJlZj0iaHR0cHM6Ly93YS5tZS8\/dGV4dD0nK2VuY29kZVVSSUNvbXBvbmVudChtc2daYXApKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj4nK0lDT19XQSsnIENvbnZpZGFyIHBlbG8gV2hhdHNBcHA8L2E+PC9kaXY+JysKICAgICAgJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtcGxhY2FyIj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLXBsYWNhci1uIj4nK25JbmQrJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtcGxhY2FyLWwiPicrKG5JbmQ9PT0xPydhbWlnbyBpbnNjcml0byc6J2FtaWdvcyBpbnNjcml0b3MnKSsnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1wbGFjYXItcHRzIj4rJytwdHNJbmRBdHVhbCsnIHB0czwvZGl2PicrCiAgICAgICc8L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLXNjb3JlIj4nK3Njb3JlVHh0Kyc8L2Rpdj4nKwogICAgICAoYW1pZ29zID8gJzxkaXYgY2xhc3M9ImluZC1mcmllbmRzIj4nK2FtaWdvcysnPC9kaXY+JyA6ICcnKSsKICAgICAgJzwvZGl2Pic7CgogICAgLy8gY2FyZCAiVXNlIGNvbW8gYXBsaWNhdGl2byIgcmVtb3ZpZG8gZG8gSW7DrWNpbyBhIHBlZGlkbyBkbyBJZ29yICgwNi8wOCk7CiAgICAvLyBvIG1hbmlmZXN0IFBXQSBjb250aW51YSBuYXMgcMOhZ2luYXMgKGluc3RhbMOhdmVsIHBlbG8gbWVudSBkbyBuYXZlZ2Fkb3IpCiAgICB2YXIgYkhvamUgPSAnJzsKICAgIGlmIChldkhvamUubGVuZ3RoKSB7CiAgICAgIGJIb2plICs9ICc8ZGl2IGNsYXNzPSJzZWMtaCI+SG9qZSBuYSBqb3JuYWRhPC9kaXY+JzsKICAgICAgZXZIb2plLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgdmFyIGRvbmUgPSAhIWNoZWNrc1tlLmlkXTsKICAgICAgICB2YXIgdGVtQ2ggPSBURU1fQ0hBVkUuaW5kZXhPZihlLmlkKSA+IC0xOwogICAgICAgIHZhciBkbSA9IGRpYU1lcyhlLmRhdGEpOwogICAgICAgIGJIb2plICs9ICc8ZGl2IGNsYXNzPSJtcm93JysoZG9uZT8nIGRvbmUnOicnKSsnIj48ZGl2IGNsYXNzPSJkYXRhIj4nK2RtLmQrJzxzbWFsbD4nK2RtLm0rJzwvc21hbGw+PC9kaXY+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJ0Ij4nK2VzYyhlLnRpdHVsbykrJzxicj48c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0taW5rLWRpbSk7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxM3B4Ij4nK2VzYyhlLmhvcmEpKyhkb25lPycgwrcgcHJlc2Vuw6dhIGNvbmZpcm1hZGEnOnRlbUNoPycgwrcgcGFsYXZyYS1jaGF2ZSByZXZlbGFkYSBhbyB2aXZvIMK3IHZhbGUgJytQVF9BVUxBKycgcHRzJzonIMK3IHRyYW5zbWlzc8OjbyBhbyB2aXZvIG5vIFlvdVR1YmUnKSsnPC9zcGFuPjwvZGl2PicrCiAgICAgICAgICAodGVtQ2gKICAgICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuICcrKGRvbmU\/J2J0bi1naG9zdCc6J2J0bi1hbWJlcicpKycgYnRuLXNtIiBkYXRhLWdvdG89ImF1bGFzIj4nKyhkb25lPydWZXIgYXVsYSc6J0ZhemVyIGNoZWNrLWluJykrJzwvYnV0dG9uPicKICAgICAgICAgICAgOiAnPGEgY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBocmVmPSInKyhlLnl0fHwnaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGVzdHJhdGVnaWFtZWQnKSsnIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+QXNzaXN0aXIgYW8gdml2bzwvYT4nKSsnPC9kaXY+JzsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKHByZUVzdHJlaWEpIHsKICAgICAgLy8gcHLDqS1lc3RyZWlhIChhdMOpIGEgQXVsYSBJbmF1Z3VyYWwpOiBDQVJUw4NPIERFIEJPQVMtVklOREFTIGNvbSBhIHRodW1iIGRvCiAgICAgIC8vIGV2ZW50byArIGEgbWVuc2FnZW0gZGUgcmVjZXDDp8OjbyAocGVkaWRvIGRvIGNvb3JkZW5hZG9yLCAxMi8wOCkgKyBvIENUQQogICAgICAvLyBkbyBsZW1icmV0ZSBOQVRJVk8gZG8gWW91VHViZS4gQSBkYXRhIGFwYXJlY2UgU8OTIGFxdWkgKG8gY2FiZcOnYWxobyBuw6NvCiAgICAgIC8vIHJlcGV0ZSwgbyBjaGlwIG1vc3RyYSBhIGNvbnRhZ2VtKSBwcmEgbsOjbyBtYXJ0ZWxhciAzeC4KICAgICAgLy8gU8OTIGFwYXJlY2UgcXVhbmRvIGEgQXVsYSBJbmF1Z3VyYWwgSsOBIHRlbSBsaW5rIGRvIFlvdVR1YmUgKHByb3gueXQpLiBTZW0KICAgICAgLy8gbGluayAoZXguOiBSZXZhbGlkYSBlbnF1YW50byBhIGxpdmUgbsOjbyBleGlzdGUg4oCUIHBlZGlkbyBkbyBJZ29yIDEyLzA4KSwgbwogICAgICAvLyBjYXJkIGZpY2EgZGUgZm9yYTogbmFkYSBkZSB0aHVtYiB2YXppYSBuZW0gIkRlZmluaXIgbGVtYnJldGUiIHByYSBsdWdhcgogICAgICAvLyBuZW5odW0uIFZvbHRhIHNvemluaG8gcXVhbmRvIG8geW91dHViZV91cmwgZG8gZXZlbnRvIGZvciBwcmVlbmNoaWRvLgogICAgICB2YXIgcHJveCA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5kYXRhID49IGhvamUuaXNvOyB9KSB8fCBqLmV2ZW50b3NbMF07CiAgICAgIGlmIChwcm94ICYmIHByb3gueXQpIHsKICAgICAgICB2YXIgcHJveFl0ID0gcHJveC55dDsKICAgICAgICB2YXIgcHJveFRodW1iID0geXRUaHVtYihwcm94WXQpOwogICAgICAgIHZhciBwcm94VGl0dWxvID0gcHJveC50aXR1bG8uc3BsaXQoJyDCtyAnKVswXTsKICAgICAgICBiSG9qZSArPSAnPGRpdiBjbGFzcz0ic2VjLWgiPlN1YSBqb3JuYWRhIGNvbWXDp2EgYXF1aTwvZGl2PicrCiAgICAgICAgICAnPGFydGljbGUgY2xhc3M9ImNhcmQgYWYtd2VsY29tZSI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhZnctbWVkaWEiPicrCiAgICAgICAgICAocHJveFRodW1iID8gJzxpbWcgc3JjPSInK3Byb3hUaHVtYisnIiBhbHQ9IicrZXNjKHByb3hUaXR1bG8pKyciIGxvYWRpbmc9ImxhenkiIG9uZXJyb3I9InRoaXMuc3R5bGUuZGlzcGxheT1cJ25vbmVcJyI+JyA6ICcnKSsKICAgICAgICAgICc8c3BhbiBjbGFzcz0iYWZ3LWJhZGdlIj4nK2RhdGFCUihwcm94LmRhdGEpKycgwrcgJytlc2MocHJveC5ob3JhKSsnPC9zcGFuPjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0iYWZ3LWJvZHkiPicrCiAgICAgICAgICAnPGgzPlF1ZSBib20gdGVyIHZvY8OqIG5vIEF0byBGaW5hbCE8L2gzPicrCiAgICAgICAgICAnPHA+UGFyYWLDqW5zIHBvciBhY2Vzc2FyIGEgc3VhIMOhcmVhLiBBIHJldGEgZmluYWwgcnVtbyBhbyAnK0FGX0JSQU5ELmN1cnRhKycgY29tZcOnYSBuYSA8Yj4nK2VzYyhwcm94VGl0dWxvKSsnPC9iPiwgZGlhIDxiPicrZGF0YUJSKHByb3guZGF0YSkrJywgw6BzICcrZXNjKHByb3guaG9yYSkrJzwvYj4sIGFvIHZpdm8gbm8gWW91VHViZS4gQXRpdmUgbyBsZW1icmV0ZSBwYXJhIG7Do28gcGVyZGVyIGEgZXN0cmVpYS48L3A+JysKICAgICAgICAgICc8YSBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGhyZWY9IicrcHJveFl0KyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj4nK0lDT19TSU5PKycgRGVmaW5pciBsZW1icmV0ZSBubyBZb3VUdWJlPC9hPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0iYWZ3LW5vdGEiPk8gWW91VHViZSB0ZSBhdmlzYSBuYSBob3JhIGVtIHF1ZSBhIHRyYW5zbWlzc8OjbyBlbnRyYXIgQU8gVklWTy48L2Rpdj4nKwogICAgICAgICAgJzwvZGl2PjwvYXJ0aWNsZT4nOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBiSG9qZSArPSAnPGRpdiBjbGFzcz0ic2VjLWgiPkhvamUgbmEgam9ybmFkYTwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImRheS1lbXB0eSI+U2VtIHRyYW5zbWlzc8OjbyBob2plLiBSZWN1cGVyZSBxdWVzdMO1ZXMgYXRyYXNhZGFzIG91IHJldmVqYSBhcyBncmF2YcOnw7Vlcy48L2Rpdj4nOwogICAgfQoKICAgIGlmIChhdHJhc2FkYXMpIHsKICAgICAgYkhvamUgKz0gJzxkaXYgY2xhc3M9Im1yb3ciPjxkaXYgY2xhc3M9ImRhdGEiPicrYXRyYXNhZGFzKyc8c21hbGw+JysoYXRyYXNhZGFzPT09MT8nZGlhJzonZGlhcycpKyc8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InQiPkF0w6kgPGIgc3R5bGU9ImNvbG9yOnZhcigtLWFtYmVyKSI+JysoYXRyYXNhZGFzICogUFRfRElBKSsnIHB0czwvYj4gZXNwZXJhbmRvIHBvciB2b2PDqi4gUXVlc3TDtWVzIGF0cmFzYWRhcyB2YWxlbSBpZ3VhbCBhdMOpIG8gZW5jZXJyYW1lbnRvIGRvIEdhYmFyaXRvLjwvZGl2PicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBkYXRhLWdvdG89InF1ZXN0b2VzIj5SZWN1cGVyYXIgcG9udG9zPC9idXR0b24+PC9kaXY+JzsKICAgIH0KCiAgICAvLyBQb250dWHDp8Ojbzogc29tZSBuYSBwcsOpLWVzdHJlaWEgZW5xdWFudG8gbyBwbGFjYXIgw6kgemVybyAoY2FyZCBkZSB6ZXJvcwogICAgLy8gbsOjbyBpbmZvcm1hIG5hZGEpOyByZWFwYXJlY2UgYXNzaW0gcXVlIGEgMcKqIGluZGljYcOnw6NvIHZpcmEgcG9udG9zCiAgICB2YXIgYlB0cyA9IChwcmVFc3RyZWlhICYmICFwLnRvdGFsKQogICAgICA\/ICcnCiAgICAgIDogJzxkaXYgY2xhc3M9InNlYy1oIj5TdWEgcG9udHVhw6fDo288L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzoyNnB4IDMwcHgiPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTozOHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjp2YXIoLS1hbWJlcikiPicrZm10UHRzKHAudG90YWwpKycgPHNtYWxsIHN0eWxlPSJmb250LXNpemU6MTVweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7Zm9udC13ZWlnaHQ6NjAwIj5wdHM8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO21hcmdpbi10b3A6MnB4Ij5qb3JuYWRhIGF0w6kgJytmbXRQdHMoUE9OVE9TLmpvcm5hZGEpKycgcHRzICsgaW5kaWNhw6fDtWVzIChzZW0gdGV0byk8L2Rpdj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjI2cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDoxNHB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnZhcigtLWluay1kaW0pIj4nKwogICAgICAgICc8c3Bhbj48YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+UHJlc2Vuw6dhPC9iPiAnK2ZtdFB0cyhwLnByZXNlbmNhKSsnIC8gJytQT05UT1MucHJlc2VuY2ErJzwvc3Bhbj4nKwogICAgICAgICc8c3Bhbj48YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+UXVlc3TDtWVzPC9iPiAnK2ZtdFB0cyhwLm1pc3NvZXMpKycgLyAnK1BPTlRPUy5taXNzb2VzKyc8L3NwYW4+JysKICAgICAgICAnPHNwYW4+PGIgc3R5bGU9ImNvbG9yOnZhcigtLWluaykiPlNpbXVsYWRvIEZpbmFsPC9iPiAnK2ZtdFB0cyhwLnNpbXVsYWRvKSsnIC8gJytQT05UT1Muc2ltdWxhZG8rJzwvc3Bhbj4nKwogICAgICAgICc8c3Bhbj48YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+SW5kaWNhw6fDtWVzPC9iPiArJytmbXRQdHMocC5pbmRpY2FjYW8pKycgPHNtYWxsIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPmLDtG51czwvc21hbGw+PC9zcGFuPjwvZGl2PicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLWdvdG89InJhbmtpbmciIHN0eWxlPSJtYXJnaW4tdG9wOjE4cHgiPlZlciBtaW5oYSBwb3Npw6fDo28gbmEgY2xhc3NpZmljYcOnw6NvPC9idXR0b24+PC9kaXY+JzsKCiAgICAvLyBPUkRFTSBQT1IgRkFTRQogICAgaHRtbCArPSBwcmVFc3RyZWlhCiAgICAgIC8vIGFudGVzIGRlIDI2LzA4OiBvIFbDjURFTyBkZSBib2FzLXZpbmRhcyBwcmltZWlybyAocGVkaWRvIGRvIElnb3IgMTMvMDgg4oCUCiAgICAgIC8vIHF1YW5kbyBleGlzdGU7IG5vIFJldmFsaWRhIGJWaWRlbyDDqSAnJyBlIHNvbWUpLCBkZXBvaXMgIkNvbW8gdmFpCiAgICAgIC8vIGZ1bmNpb25hciIsIG8gY2FyZCBkYSBBdWxhIEluYXVndXJhbCBlIGEgcG9udGUgZXh0ZXJuYSBwb3Igw7psdGltbwogICAgICA\/IGJWaWRlbyArIGJDb21vICsgYkhvamUgKyBiSW5kICsgYlB0cyArIGJCcQogICAgICAvLyBkdXJhbnRlIGEgam9ybmFkYTogaG9qZSDihpIgcGxhY2FyIOKGkiBpbmRpY2HDp8O1ZXMg4oaSIHJlZ3JhcyByZWNvbGhpZGFzCiAgICAgIDogYkhvamUgKyBiUHRzICsgYkluZCArIGJWaWRlbyArIGJDb21vOwoKICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICQkKCdbZGF0YS1nb3RvXScpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBnbyhiLmRhdGFzZXQuZ290byk7IH0pOwogICAgfSk7CiAgICB2YXIgYmMgPSAkKCcjaW5kQ29waWFyJyk7CiAgICBpZiAoYmMpIGJjLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgdmFyIGlucCA9ICQoJyNpbmRMaW5rJyk7CiAgICAgIHRyeSB7IGlucC5zZWxlY3QoKTsgaW5wLnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OSk7IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2goZSl7fQogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaW5wLnZhbHVlKS5jYXRjaChmdW5jdGlvbigpe30pOwogICAgICBiYy50ZXh0Q29udGVudCA9ICdDb3BpYWRvIOKckyc7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgYmMudGV4dENvbnRlbnQgPSAnQ29waWFyIGxpbmsnOyB9LCAxODAwKTsKICAgICAgdG9hc3QoJ0xpbmsgY29waWFkby4gQ29tcGFydGlsaGUgY29tIG9zIGFtaWdvcyEnKTsKICAgIH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSBRVUVTVMOVRVMgKGjDrWJyaWRvOiBoZXJvIGRlIGhvamUgKyBsaXN0YXMgY29tcGFjdGFzKSAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gcmVuZGVyUXVlc3RvZXMoKXsKICAgIHZhciBwID0gY2FsY1BvbnRvcyh1c2VyKTsKICAgIHZhciBtaXNzID0gc3RvcmUubWlzc29lcyh1c2VyLmVtYWlsKTsKICAgIHZhciBsaWJlcmFkYXMgPSBqLmV2ZW50b3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5xdWl6ICYmIChtb2RvUHJldmlldygpIHx8IGUuZGF0YSA8PSBob2plLmlzbyk7IH0pOwogICAgdmFyIGRlSG9qZSA9IGxpYmVyYWRhcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLmRhdGEgPT09IGhvamUuaXNvOyB9KTsKICAgIHZhciBhdHJhc2FkYXMgPSBsaWJlcmFkYXMuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gKG1vZG9QcmV2aWV3KCkgPyBlLmRhdGEgIT09IGhvamUuaXNvIDogZS5kYXRhIDwgaG9qZS5pc28pICYmICFtaXNzW2UuaWRdOyB9KQogICAgICAuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYS5kYXRhIDwgYi5kYXRhID8gMSA6IC0xOyB9KTsKICAgIHZhciBjdW1wcmlkYXMgPSBsaWJlcmFkYXMuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gbWlzc1tlLmlkXSAmJiBlLmRhdGEgIT09IGhvamUuaXNvOyB9KQogICAgICAuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYS5kYXRhIDwgYi5kYXRhID8gMSA6IC0xOyB9KTsKICAgIHZhciBwdHNQb3JNaXNzYW8gPSBQVF9ESUE7CiAgICB2YXIgZmFsdGFtID0gcC5uUXVpenplcyAtIHAubk1pc3M7CgogICAgdmFyIGh0bWwgPSBwYWdlSGVhZCgnUmVzb2x2YSBlIHBvbnR1ZScsICdRdWVzdMO1ZXMnLAogICAgICAnVW0gYmxvY28gcG9yIGF1bGEsIG5vIHBhZHLDo28gZGEgc3VhIHByb3ZhOiBjb3JyZcOnw6NvIGltZWRpYXRhIGUgZ2FiYXJpdG8gY29tZW50YWRvLicsCiAgICAgIGZtdFB0cyhwLm1pc3NvZXMpICsgJyAvICcgKyBQT05UT1MubWlzc29lcyArICcgcHRzJyk7CiAgICBodG1sICs9IGRlbW9CYW5uZXIoKTsKCiAgICAvLyBCTE9RVUVJTyBhdMOpIG8gZGlhIGRhIDHCqiBhdWxhIGNvbSBxdWVzdMO1ZXMgKHBlZGlkbyBkbyBJZ29yLCAxMi8wOCkg4oCUIG1lc21hCiAgICAvLyBsaW5ndWFnZW0gZG8gU2ltdWxhZG86IGJsb2NvIGRlIERBVEEgZGVzdGFjYWRvICsgbWVuc2FnZW0sIHNlbSBhIGxpc3RhLgogICAgdmFyIHByaW1laXJvUXVpeiA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5xdWl6OyB9KTsKICAgIGlmIChwcmltZWlyb1F1aXogJiYgIW1vZG9QcmV2aWV3KCkgJiYgaG9qZS5pc28gPCBwcmltZWlyb1F1aXouZGF0YSkgewogICAgICB2YXIgcHEgPSBwcmltZWlyb1F1aXouZGF0YS5zcGxpdCgnLScpOwogICAgICB2YXIgcURhdGFFeHRlbnNvID0gcGFyc2VJbnQocHFbMl0sMTApICsgJyBkZSAnICsgTUVTRVNfRlVMTFtwYXJzZUludChwcVsxXSwxMCktMV07CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNpbS1xdWFuZG8iPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLWljbyI+JytJQ09fUFJPVkErJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLXR4dCI+PGRpdiBjbGFzcz0ic3EtbGFiZWwiPlF1YW5kbyBhYnJlbTwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLWRpYSI+JytxRGF0YUV4dGVuc28rJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLWhvcmEiPm5vIGRpYSBkZSBjYWRhIGF1bGEsIHVtYSBub3ZhIHJvZGFkYTwvZGl2PjwvZGl2PjwvZGl2PicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiPkFzIHF1ZXN0w7VlcyBhYnJlbSBubyBkaWEgZGUgY2FkYSBhdWxhLCBubyBwYWRyw6NvIGRhIHN1YSBwcm92YSwgY29tIGNvcnJlw6fDo28gbmEgaG9yYSwgZSB2YWxlbSBhdMOpICcrUFRfRElBKycgcHRzIHBvciBkaWEuIEF0w6kgbMOhLCBnYXJhbnRhIGEgc3VhIHByZXNlbsOnYSBuYXMgdHJhbnNtaXNzw7VlcyBlIHNvbWUgcG9udG9zIG5hIHN1YSBjbGFzc2lmaWNhw6fDo28uPC9wPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgc2ltLWJsb3F1ZWFkbyIgdHlwZT0iYnV0dG9uIiBkaXNhYmxlZCBhcmlhLWRpc2FibGVkPSJ0cnVlIj4nK0lDT19MT0NLKycgQWJyZW0gZW0gJytkYXRhQlIocHJpbWVpcm9RdWl6LmRhdGEpKyc8L2J1dHRvbj4nKwogICAgICAgICc8L2Rpdj4nOwogICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzoyNnB4IDMwcHg7bWFyZ2luLWJvdHRvbToyNnB4Ij4nKwogICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4Ij5GYXRpYSBkZSBxdWVzdMO1ZXM8L2Rpdj4nKwogICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjM4cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnZhcigtLWFtYmVyKSI+JytmbXRQdHMocC5taXNzb2VzKSsnIDxzbWFsbCBzdHlsZT0iZm9udC1zaXplOjE1cHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO2ZvbnQtd2VpZ2h0OjYwMCI+LyAnK1BPTlRPUy5taXNzb2VzKycgcHRzIMK3ICcrcC5uTWlzcysnIGRlICcrcC5uUXVpenplcysnIHJlc29sdmlkYXM8L3NtYWxsPjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+PGRpdiBjbGFzcz0iZmlsbCIgc3R5bGU9IndpZHRoOicrKHAubk1pc3MvcC5uUXVpenplcyoxMDApKyclIj48L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0icHJvZ3Jlc3Mtbm90ZSI+JysoZmFsdGFtID4gMAogICAgICAgID8gJ0ZhbHRhbSA8YiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpIj4nK2ZhbHRhbSsnICcrKGZhbHRhbT09PTE\/J2RpYSc6J2RpYXMnKSsnPC9iPiBkZSBxdWVzdMO1ZXMuJwogICAgICAgIDogJ1RvZGFzIGFzIHF1ZXN0w7VlcyByZXNvbHZpZGFzLiBBZ29yYSBkZWZlbmRhIG5vIFNpbXVsYWRvLicpKyc8L2Rpdj48L2Rpdj4nOwoKICAgIHZhciBwbGF5ID0gJzxzdmcgd2lkdGg9IjExIiBoZWlnaHQ9IjExIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+PHBhdGggZD0iTTcgNGwxMyA4LTEzIDh6Ii8+PC9zdmc+JzsKCiAgICBmdW5jdGlvbiBtcm93KGUpewogICAgICB2YXIgZG0gPSBkaWFNZXMoZS5kYXRhKTsKICAgICAgdmFyIG0gPSBtaXNzW2UuaWRdOwogICAgICB2YXIgblByb2cgPSBuUmVzcG9zdGFzRXZlbnRvKGUuaWQpOwogICAgICB2YXIgYWNhbyA9IG0KICAgICAgICA\/ICc8c3BhbiBjbGFzcz0icmVzIj4nK20uYWNlcnRvcysnLycrbS50b3RhbCsnIMK3ICsgJysoUFRfRElBX1BJU08gKyBNYXRoLnJvdW5kKFBUX0RJQV9BQ0VSVE9TKm0uYWNlcnRvcy9tLnRvdGFsKSkrJyBwdHM8L3NwYW4+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1xdWl6PSInK2UuaWQrJyI+UmV2ZXI8L2J1dHRvbj4nCiAgICAgICAgOiAnPHNwYW4gY2xhc3M9InJlcyIgc3R5bGU9ImNvbG9yOnZhcigtLWFtYmVyKSI+YXTDqSAnK2ZtdFB0cyhwdHNQb3JNaXNzYW8pKycgcHRzPC9zcGFuPicrCiAgICAgICAgICAocXVpekRvRXZlbnRvKGUpLmxlbmd0aAogICAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1xdWl6PSInK2UuaWQrJyI+JysoblByb2c\/ICdDb250aW51YXIgKCcrblByb2crJyBkZSAnK3F1aXpEb0V2ZW50byhlKS5sZW5ndGgrJyknIDogKG1vZG9QcmV2aWV3KCkgPyAnUmVzb2x2ZXInIDogJ1Jlc29sdmVyIChhdHJhc2FkYXMpJykpKyc8L2J1dHRvbj4nCiAgICAgICAgICAgIDogJzxzcGFuIGNsYXNzPSJyZXMiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPkVtIHByZXBhcmHDp8Ojbzwvc3Bhbj4nKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJtcm93JysobT8nIGRvbmUnOicnKSsnIj48ZGl2IGNsYXNzPSJkYXRhIj4nK2RtLmQrJzxzbWFsbD4nK2RtLm0rJzwvc21hbGw+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0idCI+Jytlc2MoZS50aXR1bG8pKyc8L2Rpdj4nK2FjYW8rJzwvZGl2Pic7CiAgICB9CgogICAgLy8gMSkgTWlzc8OjbyBkZSBob2plOiBjYXJkIGhlcm8KICAgIGlmICghbGliZXJhZGFzLmxlbmd0aCkgewogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIGxvY2tlZC1jYXJkIj48cD5BcyBxdWVzdMO1ZXMgYWJyZW0ganVudG8gY29tIGEgcHJpbWVpcmEgYXVsYSBkYSBqb3JuYWRhLjwvcD48L2Rpdj4nOwogICAgfSBlbHNlIGlmIChkZUhvamUubGVuZ3RoKSB7CiAgICAgIGRlSG9qZS5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgICAgIHZhciBtID0gbWlzc1tlLmlkXTsKICAgICAgICB2YXIgcElzbyA9IGUuZGF0YS5zcGxpdCgnLScpOwogICAgICAgIHZhciBkYXRhTGFiZWwgPSBwYXJzZUludChwSXNvWzJdLDEwKSsnIGRlICcrTUVTRVNfRlVMTFtwYXJzZUludChwSXNvWzFdLDEwKS0xXTsKICAgICAgICB2YXIgdGh1bWIgPSBlLnl0CiAgICAgICAgICA\/ICc8aW1nIHNyYz0iJyt5dFRodW1iKGUueXQpKyciIGFsdD0iIiBsb2FkaW5nPSJsYXp5IiBvbmVycm9yPSJ0aGlzLnJlbW92ZSgpIj4nCiAgICAgICAgICA6ICc8ZGl2IGNsYXNzPSJmYWxsIj48c3ZnIHdpZHRoPSI0NCIgaGVpZ2h0PSI0NCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PGNpcmNsZSBjeD0iOSIgY3k9IjEwIiByPSIyLjIiLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjEwIiByPSIyLjIiLz48cGF0aCBkPSJNNCAyMGMwLTYgMi0xMyA4LTEzczggNyA4IDEzIi8+PHBhdGggZD0iTTkgNGwzIDIgMy0yIi8+PC9zdmc+PC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8YXJ0aWNsZSBjbGFzcz0iY2FyZCBoZXJvLW1pc3NhbycrKG0\/JyBkb25lJzonJykrJyI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJldi10aHVtYiI+Jyt0aHVtYisnPHNwYW4gY2xhc3M9ImV2LWJhZGdlIj4nK3BsYXkrJyBRdWVzdMO1ZXMgZGUgaG9qZTwvc3Bhbj48L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImhtLWJvZHkiPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0iaG0ta2lja2VyIj4nKyhtPydRdWVzdMO1ZXMgZGUgaG9qZSByZXNvbHZpZGFzJzonUXVlc3TDtWVzIGRlIGhvamUnKSsnIMK3ICcrZGF0YUxhYmVsKyc8L2Rpdj4nKwogICAgICAgICAgJzxoMz4nK2VzYyhlLnRpdHVsbykrJzwvaDM+JysKICAgICAgICAgIChtCiAgICAgICAgICAgID8gJzxwIGNsYXNzPSJobS1ub3RlIj5Wb2PDqiBmZXogPGIgc3R5bGU9ImNvbG9yOnZhcigtLWdyZWVuKSI+JyttLmFjZXJ0b3MrJyBkZSAnK20udG90YWwrJzwvYj4gZSBzb21vdSA8YiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4nKyhQVF9ESUFfUElTTyArIE1hdGgucm91bmQoUFRfRElBX0FDRVJUT1MqbS5hY2VydG9zL20udG90YWwpKSsnIHB0czwvYj4uIFZvbHRlIGFtYW5ow6MgcGFyYSBhcyBwcsOzeGltYXMuPC9wPicrCiAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLXF1aXo9IicrZS5pZCsnIj5SZXZlciBnYWJhcml0bzwvYnV0dG9uPicKICAgICAgICAgICAgOiAoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciBucSA9IHF1aXpEb0V2ZW50byhlKS5sZW5ndGg7CiAgICAgICAgICAgICAgICB2YXIgblByb2cgPSBuUmVzcG9zdGFzRXZlbnRvKGUuaWQpOwogICAgICAgICAgICAgICAgcmV0dXJuICc8cCBjbGFzcz0iaG0tbm90ZSI+JytucSsnIHF1ZXN0w7VlcyBubyBwYWRyw6NvIGRhIHN1YSBwcm92YSwgY29ycmXDp8OjbyBpbWVkaWF0YSBxdWVzdMOjbyBhIHF1ZXN0w6NvLiBDb25jbHVpciBvIGRpYSBnYXJhbnRlIDxiIHN0eWxlPSJjb2xvcjp2YXIoLS1hbWJlcikiPicrZm10UHRzKDAuNCpwdHNQb3JNaXNzYW8pKycgcHRzPC9iPiBlIG9zIGFjZXJ0b3MgY29tcGxldGFtIGF0w6kgPGIgc3R5bGU9ImNvbG9yOnZhcigtLWFtYmVyKSI+JytmbXRQdHMocHRzUG9yTWlzc2FvKSsnPC9iPi48L3A+JysKICAgICAgICAgICAgICAgICAgKG5xCiAgICAgICAgICAgICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciIgZGF0YS1xdWl6PSInK2UuaWQrJyI+JysoblByb2c\/ICdDb250aW51YXIgZGUgb25kZSBwYXJvdSAoJytuUHJvZysnIGRlICcrbnErJyknIDogJ1Jlc29sdmVyIGFzIHF1ZXN0w7VlcyBkZSBob2plJykrJzwvYnV0dG9uPicKICAgICAgICAgICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz0ic3RhdGUtdGFnIHN0YXRlLXdhaXQiPlF1ZXN0w7VlcyBkZXN0ZSBkaWEgZW0gcHJlcGFyYcOnw6NvPC9zcGFuPicpOwogICAgICAgICAgICAgIH0pKCkpKwogICAgICAgICAgJzwvZGl2PjwvYXJ0aWNsZT4nOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImRheS1lbXB0eSI+SG9qZSBuw6NvIHRlbSBxdWVzdMO1ZXMgbm92YXMuICcrKGF0cmFzYWRhcy5sZW5ndGg\/J0Fwcm92ZWl0ZSBwYXJhIHJlY3VwZXJhciBhcyBwZW5kZW50ZXMgYWJhaXhvLic6J0JvbSBkZXNjYW5zbywgYSBqb3JuYWRhIGNvbnRpbnVhIGFtYW5ow6MuJykrJzwvZGl2Pic7CiAgICB9CgogICAgLy8gMikgQXRyYXNhZGFzOiBsaXN0YSBkZSByZWN1cGVyYcOnw6NvCiAgICBpZiAoYXRyYXNhZGFzLmxlbmd0aCkgewogICAgICBodG1sICs9IG1vZG9QcmV2aWV3KCkKICAgICAgICA\/ICc8ZGl2IGNsYXNzPSJzZWMtaCI+VG9kb3Mgb3MgZGlhcyBsaWJlcmFkb3MgPHNwYW4gY2xhc3M9ImNudCI+JythdHJhc2FkYXMubGVuZ3RoKycgcGFyYSB2YWxpZGFyPC9zcGFuPjwvZGl2PicKICAgICAgICA6ICc8ZGl2IGNsYXNzPSJzZWMtaCI+UmVjdXBlcmUgcG9udG9zIDxzcGFuIGNsYXNzPSJjbnQiPicrYXRyYXNhZGFzLmxlbmd0aCsnIHBlbmRlbnRlJysoYXRyYXNhZGFzLmxlbmd0aD4xPydzJzonJykrJzwvc3Bhbj48L2Rpdj4nOwogICAgICBhdHJhc2FkYXMuZm9yRWFjaChmdW5jdGlvbihlKXsgaHRtbCArPSBtcm93KGUpOyB9KTsKICAgIH0KCiAgICAvLyAzKSBDdW1wcmlkYXM6IGhpc3TDs3JpY28gZGlzY3JldG8KICAgIGlmIChjdW1wcmlkYXMubGVuZ3RoKSB7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InNlYy1oIj5DdW1wcmlkYXMgPHNwYW4gY2xhc3M9ImNudCBnIj4nK2N1bXByaWRhcy5sZW5ndGgrJzwvc3Bhbj48L2Rpdj4nOwogICAgICBjdW1wcmlkYXMuZm9yRWFjaChmdW5jdGlvbihlKXsgaHRtbCArPSBtcm93KGUpOyB9KTsKICAgIH0KCiAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICAkJCgnW2RhdGEtcXVpel0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcmVuZGVyUXVpeihiLmRhdGFzZXQucXVpeik7IH0pOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJRdWl6KGV2SWQpewogICAgdmFyIGUgPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbih4KXsgcmV0dXJuIHguaWQgPT09IGV2SWQ7IH0pOwogICAgdmFyIHFzID0gcXVpekRvRXZlbnRvKGUpOwogICAgaWYgKCFxcy5sZW5ndGgpIHsKICAgICAgLy8gZGlhIGFpbmRhIHNlbSBxdWVzdMO1ZXMgY2FycmVnYWRhczogZXN0YWRvIGluZm9ybWF0aXZvLCBudW5jYSB0ZWxhIG1vcnRhCiAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9InBhZ2UtaGVhZCI+PGRpdj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blZvbHRhciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+Vm9sdGFyIMOgcyBxdWVzdMO1ZXM8L2J1dHRvbj4nKwogICAgICAgICc8c3BhbiBjbGFzcz0ia2lja2VyIj5RdWVzdMO1ZXMgZG8gZGlhPC9zcGFuPjxoMSBzdHlsZT0iZm9udC1zaXplOjIycHgiPicrZXNjKGUudGl0dWxvKSsnPC9oMT48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIGxvY2tlZC1jYXJkIj48aDMgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij5RdWVzdMO1ZXMgZW0gcHJlcGFyYcOnw6NvPC9oMz4nKwogICAgICAgICc8cD5BcyBxdWVzdMO1ZXMgZGVzdGUgZGlhIGVzdMOjbyBzZW5kbyBmaW5hbGl6YWRhcyBwZWxvcyBwcm9mZXNzb3JlcyBlIGFwYXJlY2VtIGFxdWkgYW50ZXMgZGEgYXVsYS4gRW5xdWFudG8gaXNzbywgcmVzb2x2YSBvcyBkaWFzIGrDoSBsaWJlcmFkb3MuPC9wPjwvZGl2Pic7CiAgICAgICQoJyNidG5Wb2x0YXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbmRlclF1ZXN0b2VzKTsKICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBQUk9EVcOHw4NPOiBvIHByb2dyZXNzbyDDqSBvIGNvbmp1bnRvIGRlIHJlc3Bvc3RhcyBKw4EgR1JBVkFEQVMgbm8gc2Vydmlkb3IKICAgIC8vIChDQUNIRS5yZXNwb3N0YXMsIHBvciBxdWVzdGFvX2lkKSDigJQgdmFsZSBlbSBxdWFscXVlciBhcGFyZWxoby4gTyBnYWJhcml0bwogICAgLy8gZSBvIGNvbWVudMOhcmlvIHPDsyBleGlzdGVtIG5vIGNsaWVudGUgREVQT0lTIGRlIHJlc3BvbmRlciAoc2VncmVkbyBubyBiYW5jbykuCiAgICBmdW5jdGlvbiByZXNwKGkpeyByZXR1cm4gcXNbaV0gPyBDQUNIRS5yZXNwb3N0YXNbcXNbaV0uaWRdIDogdW5kZWZpbmVkOyB9CiAgICBmdW5jdGlvbiBuUmVzcCgpeyB2YXIgbiA9IDA7IHFzLmZvckVhY2goZnVuY3Rpb24oXywgaSl7IGlmIChyZXNwKGkpKSBuKys7IH0pOyByZXR1cm4gbjsgfQogICAgZnVuY3Rpb24gYWNlcnRvcygpeyB2YXIgbiA9IDA7IHFzLmZvckVhY2goZnVuY3Rpb24oXywgaSl7IHZhciByID0gcmVzcChpKTsgaWYgKHIgJiYgci5hY2VydG91KSBuKys7IH0pOyByZXR1cm4gbjsgfQogICAgZnVuY3Rpb24gY29tcGxldG8oKXsgcmV0dXJuIHFzLmxlbmd0aCA+IDAgJiYgblJlc3AoKSA+PSBxcy5sZW5ndGg7IH0KICAgIGZ1bmN0aW9uIGxldHJhTGFiZWwocSwgdil7IHJldHVybiBxLmFsdHMgPyB2IDogKHYgPT09ICdDJyA\/ICdDZXJ0bycgOiAnRXJyYWRvJyk7IH0KCiAgICB2YXIgYXR1YWwgPSAwOwogICAgd2hpbGUgKGF0dWFsIDwgcXMubGVuZ3RoICYmIHJlc3AoYXR1YWwpKSBhdHVhbCsrOwogICAgaWYgKGF0dWFsID49IHFzLmxlbmd0aCkgYXR1YWwgPSAwOwoKICAgIGZ1bmN0aW9uIGNvbWVudGFyaW9IVE1MKGkpewogICAgICB2YXIgcSA9IHFzW2ldLCByID0gcmVzcChpKTsKICAgICAgaWYgKCFyIHx8ICFyLmNvbWVudGFyaW8pIHJldHVybiAnJzsKICAgICAgcmV0dXJuICc8ZGV0YWlscyBjbGFzcz0icXVpei1jb21lbnQiPjxzdW1tYXJ5PkdhYmFyaXRvOiAnK2xldHJhTGFiZWwocSwgci5jb3JyZXRhKSsnIMK3IFZlciBjb21lbnTDoXJpbzwvc3VtbWFyeT4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJjYm9keSI+JyttaWRpYUhUTUwoci5jb21lbnRhcmlvKSsnPC9kaXY+PC9kZXRhaWxzPic7CiAgICB9CgogICAgZnVuY3Rpb24gbmF2SFRNTCgpewogICAgICByZXR1cm4gJzxkaXYgY2xhc3M9InFuYXYiPicrcXMubWFwKGZ1bmN0aW9uKHEsIGkpewogICAgICAgIHZhciBjbHMgPSAncW4nICsgKGkgPT09IGF0dWFsID8gJyBjdXInIDogJycpOwogICAgICAgIHZhciByID0gcmVzcChpKTsKICAgICAgICBpZiAocikgY2xzICs9IHIuYWNlcnRvdSA\/ICcgb2snIDogJyBlcnInOwogICAgICAgIHJldHVybiAnPGJ1dHRvbiBjbGFzcz0iJytjbHMrJyIgZGF0YS1ucT0iJytpKyciIGFyaWEtbGFiZWw9IklyIHBhcmEgYSBxdWVzdMOjbyAnKyhpKzEpKyciPicrKGkrMSkrJzwvYnV0dG9uPic7CiAgICAgIH0pLmpvaW4oJycpKyc8L2Rpdj4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlc3Vtb0hUTUwoKXsKICAgICAgdmFyIGFjID0gYWNlcnRvcygpLCB0b3QgPSBxcy5sZW5ndGg7CiAgICAgIHZhciBwdHMgPSBQVF9ESUFfUElTTyArIE1hdGgucm91bmQoUFRfRElBX0FDRVJUT1MgKiBhYyAvIHRvdCk7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icXVpei1yZXN1bHQiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjIwcHgiPlJlc29sdmlkbzogPGI+JythYysnIGRlICcrdG90Kyc8L2I+IMK3IDxiPicrZm10UHRzKHB0cykrJyBwdHM8L2I+IG5hIGNsYXNzaWZpY2HDp8Ojby4gJysKICAgICAgICAnTm8gbWFwYTogdmVyZGUgw6kgbyBnYWJhcml0bywgdmVybWVsaG8gw6kgb25kZSB2b2PDqiBlcnJvdS48L2Rpdj4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHF1ZXN0YW9IVE1MKGkpewogICAgICB2YXIgcSA9IHFzW2ldLCByID0gcmVzcChpKTsKICAgICAgdmFyIGJ0biA9IGZ1bmN0aW9uKHYsIHJvdHVsbywgbHQpewogICAgICAgIHZhciBjbHMgPSAnJzsKICAgICAgICBpZiAocikgewogICAgICAgICAgaWYgKHYgPT09IHIuY29ycmV0YSkgY2xzID0gJyBjbGFzcz0iaGl0Iic7CiAgICAgICAgICBlbHNlIGlmICh2ID09PSByLmxldHJhKSBjbHMgPSAnIGNsYXNzPSJlcnJhZG8iJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiInK2NscysnIGRhdGEtdj0iJyt2KyciJysociA\/ICcgZGlzYWJsZWQnIDogJycpKyc+JysKICAgICAgICAgIChsdCA\/ICc8YiBjbGFzcz0ibHQiPicrbHQrJzwvYj48c3Bhbj4nK2VzYyhyb3R1bG8pKyc8L3NwYW4+JyA6IHJvdHVsbykrJzwvYnV0dG9uPic7CiAgICAgIH07CiAgICAgIHZhciBvcHRzID0gcS5hbHRzCiAgICAgICAgPyBxLmFsdHMubWFwKGZ1bmN0aW9uKGEpeyByZXR1cm4gYnRuKGEubCwgYS50LCBhLmwpOyB9KS5qb2luKCcnKQogICAgICAgIDogYnRuKCdDJywgJ0NlcnRvJykgKyBidG4oJ0UnLCAnRXJyYWRvJyk7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icXVpei1xIiBkYXRhLXE9IicraSsnIj48ZGl2IGNsYXNzPSJxaGVhZCI+UXVlc3TDo28gJysoaSsxKSsnIGRlICcrcXMubGVuZ3RoKyc8L2Rpdj4nKwogICAgICAgICc8cCBjbGFzcz0iZW51biI+JyttaWRpYUhUTUwocS5xKSsnPC9wPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InF1aXotb3B0cycrKHEuYWx0cyA\/ICcgbXVsdCcgOiAnJykrJyI+JytvcHRzKyc8L2Rpdj4nKwogICAgICAgIGNvbWVudGFyaW9IVE1MKGkpKwogICAgICAgICc8L2Rpdj4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHByb3hJbmRpY2UoKXsKICAgICAgaWYgKCFjb21wbGV0bygpKSB7CiAgICAgICAgZm9yICh2YXIgayA9IDE7IGsgPD0gcXMubGVuZ3RoOyBrKyspIHsKICAgICAgICAgIHZhciBpMiA9IChhdHVhbCArIGspICUgcXMubGVuZ3RoOwogICAgICAgICAgaWYgKCFyZXNwKGkyKSkgcmV0dXJuIGkyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgcmV0dXJuIGF0dWFsICsgMSA8IHFzLmxlbmd0aCA\/IGF0dWFsICsgMSA6IC0xOwogICAgfQoKICAgIGZ1bmN0aW9uIGN0cmxIVE1MKCl7CiAgICAgIHZhciBwcm94ID0gcHJveEluZGljZSgpOwogICAgICB2YXIgYWMgPSBhY2VydG9zKCk7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icWN0cmwiPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0icUFudCInKyhhdHVhbCA9PT0gMCA\/ICcgZGlzYWJsZWQnIDogJycpKyc+QW50ZXJpb3I8L2J1dHRvbj4nKwogICAgICAgICc8c3BhbiBjbGFzcz0icWxpbmUiPjxiPicrblJlc3AoKSsnPC9iPiBkZSAnK3FzLmxlbmd0aCsnIHJlc3BvbmRpZGFzIMK3IDxiIGNsYXNzPSJvayI+JythYysnPC9iPiAnKyhhYyA9PT0gMSA\/ICdhY2VydG8nIDogJ2FjZXJ0b3MnKSsnPC9zcGFuPicrCiAgICAgICAgKHByb3ggPj0gMAogICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuICcrKHJlc3AoYXR1YWwpID8gJ2J0bi1hbWJlcicgOiAnYnRuLWdob3N0JykrJyBidG4tc20iIGlkPSJxUHJveCI+UHLDs3hpbWEgcXVlc3TDo288L2J1dHRvbj4nCiAgICAgICAgICA6ICc8c3BhbiBzdHlsZT0id2lkdGg6ODhweCI+PC9zcGFuPicpKwogICAgICAgICc8L2Rpdj4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbmRlcigpewogICAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJwYWdlLWhlYWQiPjxkaXY+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5Wb2x0YXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPlZvbHRhciDDoHMgcXVlc3TDtWVzPC9idXR0b24+JysKICAgICAgICAnPHNwYW4gY2xhc3M9ImtpY2tlciI+UXVlc3TDtWVzIGRvIGRpYTwvc3Bhbj48aDEgc3R5bGU9ImZvbnQtc2l6ZToyMnB4Ij4nK2VzYyhlLnRpdHVsbykrJzwvaDE+JysKICAgICAgICAnPHAgY2xhc3M9ImRlc2MiPlVtYSBxdWVzdMOjbyBwb3IgdmV6LCBjb20gY29ycmXDp8OjbyBpbWVkaWF0YTogYW8gbWFyY2FyLCBhIGFsdGVybmF0aXZhIHRyYXZhIGUgbyBnYWJhcml0byBhcGFyZWNlIGNvbSBvIGNvbWVudMOhcmlvIGRvIHByb2Zlc3Nvci4gVXNlIG8gbWFwYSBwYXJhIG5hdmVnYXI7IHBvZGUgc2FpciBlIHZvbHRhciwgbyBwcm9ncmVzc28gZmljYSBzYWx2byBuYSBzdWEgY29udGEuPC9wPjwvZGl2PjwvZGl2Pic7CiAgICAgIGlmIChjb21wbGV0bygpKSBodG1sICs9IHJlc3Vtb0hUTUwoKTsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBxdWl6LWJveCI+JytuYXZIVE1MKCkrcXVlc3Rhb0hUTUwoYXR1YWwpK2N0cmxIVE1MKCkrJzwvZGl2Pic7CiAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOwoKICAgICAgJCgnI2J0blZvbHRhcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyUXVlc3RvZXMpOwogICAgICAkJCgnLnFuYXYgLnFuJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgYXR1YWwgPSArYi5kYXRhc2V0Lm5xOyByZW5kZXIoKTsgfSk7CiAgICAgIH0pOwogICAgICB2YXIgYW50ID0gJCgnI3FBbnQnKTsKICAgICAgaWYgKGFudCkgYW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgaWYgKGF0dWFsID4gMCkgeyBhdHVhbC0tOyByZW5kZXIoKTsgfSB9KTsKICAgICAgdmFyIHB4ID0gJCgnI3FQcm94Jyk7CiAgICAgIGlmIChweCkgcHguYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHZhciBwMiA9IHByb3hJbmRpY2UoKTsKICAgICAgICBpZiAocDIgPj0gMCkgeyBhdHVhbCA9IHAyOyByZW5kZXIoKTsgfQogICAgICB9KTsKICAgICAgaWYgKCFyZXNwKGF0dWFsKSkgewogICAgICAgICQkKCcucXVpei1vcHRzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIGkgPSBhdHVhbCwgcSA9IHFzW2ldOwogICAgICAgICAgICAkJCgnLnF1aXotb3B0cyBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB4LmRpc2FibGVkID0gdHJ1ZTsgfSk7CiAgICAgICAgICAgIHNiUnBjKCdyZXNwb25kZXJfcXVlc3RhbycsIHsgcF9jcGY6IENBQ0hFLnVzZXIuY3BmLCBwX3F1ZXN0YW86IHEuaWQsIHBfbGV0cmE6IGIuZGF0YXNldC52IH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocnIpewogICAgICAgICAgICAgICAgaWYgKHJyLnN0YXR1cyA9PT0gJ29rJykgewogICAgICAgICAgICAgICAgICBDQUNIRS5yZXNwb3N0YXNbcS5pZF0gPSB7IGV2ZW50b19pZDogZXZJZCwgbGV0cmE6IGIuZGF0YXNldC52LAogICAgICAgICAgICAgICAgICAgIGFjZXJ0b3U6IHJyLmFjZXJ0b3UsIGNvcnJldGE6IHJyLmNvcnJldGEsIGNvbWVudGFyaW86IHJyLmNvbWVudGFyaW8gfTsKICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRvKCkpIHRvYXN0KCdRdWVzdMO1ZXMgZG8gZGlhIGNvbmNsdcOtZGFzOiAnK2FjZXJ0b3MoKSsnLycrcXMubGVuZ3RoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocnIuc3RhdHVzID09PSAnamFfcmVzcG9uZGlkYScpIHsKICAgICAgICAgICAgICAgICAgdG9hc3QoJ0VzdGEgcXVlc3TDo28gasOhIGZvaSByZXNwb25kaWRhIGVtIG91dHJvIGFjZXNzby4gQXR1YWxpemFuZG\/igKYnKTsKICAgICAgICAgICAgICAgICAgaGlkcmF0YXIoKS50aGVuKHJlbmRlcik7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocnIuc3RhdHVzID09PSAnZXZlbnRvX2Z1dHVybycpIHsKICAgICAgICAgICAgICAgICAgdG9hc3QoJ0FzIHF1ZXN0w7VlcyBkZXN0ZSBkaWEgYWJyZW0gbmEgZGF0YSBkYSBhdWxhLicpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgdG9hc3QoJ07Do28gZm9pIHBvc3PDrXZlbCByZWdpc3RyYXIuIFRlbnRlIG5vdmFtZW50ZS4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlbmRlcigpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IHRvYXN0KCdTZW0gY29uZXjDo28uIEEgcmVzcG9zdGEgbsOjbyBmb2kgcmVnaXN0cmFkYS4nKTsgcmVuZGVyKCk7IH0pOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KCiAgICByZW5kZXIoKTsKICB9CgogIC8qIC0tLS0tLS0tLS0gU0lNVUxBRE8gRklOQUwgwrcgUFJPRFXDh8ODTyAocHJvdmEgw7puaWNhLCBzZXJ2aWRvciBtYW5kYSkgLS0tLS0tLS0tLSAqLwogIC8vIEVzcGVsaG8gdmlzdWFsIGRhIGphbmVsYSBvZmljaWFsIChvIHNlcnZpZG9yIFJFVkFMSURBIHR1ZG8gZW0gc2ltdWxhZG9fY29uZmlnKQogIHZhciBTSU1fSkFORUxBID0geyBkYXRhOiAnMjAyNi0wOS0wNicsIGFicmU6ICcxNDowMCcsIGZlY2hhOiAnMTk6MDAnLCBkdXJhY2FvTWluOiAzMDAgfTsKICBmdW5jdGlvbiBzaW1BZ29yYUJSVCgpeyByZXR1cm4gbmV3IERhdGUobmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IHRpbWVab25lOiAnQW1lcmljYS9TYW9fUGF1bG8nIH0pKTsgfQogIGZ1bmN0aW9uIHNpbUFicmVUcygpeyByZXR1cm4gbmV3IERhdGUoU0lNX0pBTkVMQS5kYXRhICsgJ1QnICsgU0lNX0pBTkVMQS5hYnJlICsgJzowMC0wMzowMCcpLmdldFRpbWUoKTsgfQogIGZ1bmN0aW9uIHNpbUZlY2hhVHMoKXsgcmV0dXJuIG5ldyBEYXRlKFNJTV9KQU5FTEEuZGF0YSArICdUJyArIFNJTV9KQU5FTEEuZmVjaGEgKyAnOjAwLTAzOjAwJykuZ2V0VGltZSgpOyB9CiAgZnVuY3Rpb24gc2ltR2FiYXJpdG9MaWJlcmFkbygpeyByZXR1cm4gbW9kb1ByZXZpZXcoKSB8fCBEYXRlLm5vdygpID4gc2ltRmVjaGFUcygpOyB9CiAgdmFyIElDT19MT0NLID0gJzxzdmcgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIuMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHlsZT0idmVydGljYWwtYWxpZ246LTJweCI+PHJlY3QgeD0iNSIgeT0iMTEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjIiLz48cGF0aCBkPSJNOCAxMVY3YTQgNCAwIDAxOCAwdjQiLz48L3N2Zz4nOwoKICBmdW5jdGlvbiByZW5kZXJTaW11bGFkbygpewogICAgdmFyIHAgPSBjYWxjUG9udG9zKHVzZXIpOwogICAgdmFyIGNmZyA9IFNJTV9DRkdbdXNlci5wcm92YV0gfHwgU0lNX0NGRy5lbmFtZWQ7CiAgICB2YXIgZXZTaW0gPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbihlKXsgcmV0dXJuIGUuaWQgPT09IGouc2ltdWxhZG9JZDsgfSk7CiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdTaW11bGFkbyBGaW5hbCDCtyAnICsgZGF0YUJSKGV2U2ltLmRhdGEpLCAnU2ltdWxhZG8gRmluYWwnLAogICAgICAnUHJvdmEgw7puaWNhIG5hIHBsYXRhZm9ybWE6IDcgcHRzIHBvciBhY2VydG8sIGF0w6kgNzAwLiBHYWJhcml0byBjb21lbnRhZG8gYXDDs3MgbyBlbmNlcnJhbWVudG8uJywKICAgICAgJzcwMCBwdHMgZW0gam9nbycpOwoKICAgIHZhciBjaGlwcyA9ICc8ZGl2IGNsYXNzPSJzaW0tY2hpcHMiPicrCiAgICAgICc8c3Bhbj4nK2NmZy5xdWVzdG9lcysnIHF1ZXN0w7Vlczwvc3Bhbj4nKwogICAgICAnPHNwYW4+NCBhbHRlcm5hdGl2YXM8L3NwYW4+JysKICAgICAgJzxzcGFuPnF1ZXN0w7VlcyBpbsOpZGl0YXM8L3NwYW4+JysKICAgICAgJzxzcGFuPnByb2Zlc3NvcmVzIGVzcGVjaWFsaXN0YXM8L3NwYW4+PC9kaXY+JzsKCiAgICBpZiAoQ0FDSEUuc2ltUmVzKSB7CiAgICAgIHZhciByZXMgPSBDQUNIRS5zaW1SZXM7CiAgICAgIGlmIChzaW1HYWJhcml0b0xpYmVyYWRvKCkpIHsKICAgICAgICB2YXIgbm90YSA9IE1hdGgucm91bmQoMTAwICogcmVzLmFjZXJ0b3MgLyBNYXRoLm1heCgxLCByZXMudG90YWwpKTsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyIj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImtpY2tlciBjZW50ZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPlNpbXVsYWRvIGNvbmNsdcOtZG88L2Rpdj4nKwogICAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo1NHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjp2YXIoLS1hbWJlcikiPicrbm90YSsnJTwvZGl2PicrCiAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLWluay1kaW0pO21hcmdpbjo4cHggMCA0cHgiPicrcmVzLmFjZXJ0b3MrJyBkZSAnK3Jlcy50b3RhbCsnIHF1ZXN0w7VlcyDCtyBhY2VydG9zIG5vIFNpbXVsYWRvIEZpbmFsPC9wPicrCiAgICAgICAgICAnPHAgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1ncmVlbikiPisgJytmbXRQdHMocC5zaW11bGFkbykrJyBwdHMgbmEgY2xhc3NpZmljYcOnw6NvPC9wPicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciIgaWQ9ImJ0bkdhYmFyaXRvIiBzdHlsZT0ibWFyZ2luLXRvcDoyMHB4Ij5WZXIgZ2FiYXJpdG8gY29tZW50YWRvPC9idXR0b24+JysKICAgICAgICAgICc8L2Rpdj4nOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHJlc3VsdGFkbyBSRVRJRE8gYXTDqSBvIGVuY2VycmFtZW50bzogc8OzIGEgY29uZmlybWHDp8OjbyBkbyBwcmVlbmNoaW1lbnRvCiAgICAgICAgdmFyIHByZWVuY2hpZGFzID0gT2JqZWN0LmtleXMocmVzLnJlc3Bvc3RhcyB8fCB7fSkubGVuZ3RoOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIGNlbnRlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+UHJvdmEgZW52aWFkYTwvZGl2PicrCiAgICAgICAgICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjZweCI+U2V1IFNpbXVsYWRvIEZpbmFsIGZvaSByZWdpc3RyYWRvLjwvcD4nKwogICAgICAgICAgJzxwIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstZGltKSI+Vm9jw6ogcHJlZW5jaGV1IDxiPicrcHJlZW5jaGlkYXMrJyBkZSAnK3Jlcy50b3RhbCsnPC9iPiBxdWVzdMO1ZXMuPC9wPicrCiAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKTtmb250LXNpemU6MTNweDttYXJnaW4tdG9wOjE2cHgiPk8gcmVzdWx0YWRvLCBvcyBwb250b3MgZSBvIGdhYmFyaXRvIGNvbWVudGFkbyBzZXLDo28gbGliZXJhZG9zIHBhcmEgdG9kb3Mgw6BzICcrU0lNX0pBTkVMQS5mZWNoYSsnLCBhcMOzcyBvIGVuY2VycmFtZW50byBkYSBwcm92YS48L3A+JysKICAgICAgICAgICc8L2Rpdj4nOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBKQU5FTEEgcG9yIERBVEEgKyBIT1JBIHJlYWlzIChCUlQpOiBvIGJvdMOjbyBzw7MgZGVzdHJhdmEgZW0gMDYvMDkgw6BzIDE0aAogICAgICAvLyAocGVkaWRvIGRvIElnb3IgMTIvMDgpOyBvIHNlcnZpZG9yIHJldmFsaWRhIGRlIHF1YWxxdWVyIGplaXRvLgogICAgICB2YXIgYWdvcmEgPSBEYXRlLm5vdygpLCBhYnJlVHMgPSBzaW1BYnJlVHMoKSwgZmVjaGFUcyA9IHNpbUZlY2hhVHMoKTsKICAgICAgdmFyIHByb2cgPSBDQUNIRS5zaW1Qcm9nOwogICAgICB2YXIgYWJlcnRvID0gbW9kb1ByZXZpZXcoKSB8fCAoYWdvcmEgPj0gYWJyZVRzICYmIGFnb3JhIDw9IGZlY2hhVHMpOwogICAgICB2YXIgcElzbyA9IGV2U2ltLmRhdGEuc3BsaXQoJy0nKTsKICAgICAgdmFyIGRhdGFFeHRlbnNvID0gcGFyc2VJbnQocElzb1syXSwxMCkgKyAnIGRlICcgKyBNRVNFU19GVUxMW3BhcnNlSW50KHBJc29bMV0sMTApLTFdOwogICAgICAvLyBibG9jbyBkZSBEQVRBL0hPUkEgYmVtIGNsYXJhIGUgZGVzdGFjYWRhCiAgICAgIHZhciBxdWFuZG8gPSAnPGRpdiBjbGFzcz0ic2ltLXF1YW5kbyI+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtaWNvIj4nK0lDT19QUk9WQSsnPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtdHh0Ij48ZGl2IGNsYXNzPSJzcS1sYWJlbCI+UXVhbmRvIGFjb250ZWNlPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtZGlhIj4nK2RhdGFFeHRlbnNvKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJzcS1ob3JhIj5kYXMgJytTSU1fSkFORUxBLmFicmUrJyDDoHMgJytTSU1fSkFORUxBLmZlY2hhKycgwrcgaG9yw6FyaW8gZGUgQnJhc8OtbGlhPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgICAgIGlmICghbW9kb1ByZXZpZXcoKSAmJiBhZ29yYSA+IGZlY2hhVHMpIHsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIGxvY2tlZC1jYXJkIj4nK3F1YW5kbysKICAgICAgICAgICc8aDMgc3R5bGU9Im1hcmdpbjoyMnB4IDAgOHB4Ij5PIHByYXpvIGRvIFNpbXVsYWRvIEZpbmFsIGVuY2Vycm91PC9oMz4nKwogICAgICAgICAgJzxwPkEgcHJvdmEgZmljb3UgZGlzcG9uw612ZWwgZW0gJytkYXRhQlIoZXZTaW0uZGF0YSkrJywgZGFzICcrU0lNX0pBTkVMQS5hYnJlKycgw6BzICcrU0lNX0pBTkVMQS5mZWNoYSsnLCBlIG7Do28gYWNlaXRhIGVudmlvIHJldHJvYXRpdm8uIEEgZGlzcHV0YSBjb250aW51YTogcHJlc2Vuw6dhIGUgcXVlc3TDtWVzIHNlZ3VlbSB2YWxlbmRvIHBvbnRvcy48L3A+PC9kaXY+JzsKICAgICAgfSBlbHNlIGlmICghYWJlcnRvKSB7CiAgICAgICAgLy8gQUlOREEgTsODTyBBQlJJVSAoYW50ZXMgZG8gZGlhIE9VIG5vIGRpYSBhbnRlcyBkYXMgMTRoKSDihpIgYm90w6NvIEJMT1FVRUFETwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPicrcXVhbmRvKwogICAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiPk8gU2ltdWxhZG8gYWNvbnRlY2UgYXF1aSBuYSBwbGF0YWZvcm1hLCBubyBleGF0byBtb2RlbG8gZGEgcHJvdmEgb2ZpY2lhbC4gQXTDqSBsw6EsIGdhcmFudGEgYSBzdWEgcHJlc2Vuw6dhIG5hcyBhdWxhcyBlIHJlc29sdmEgYXMgcXVlc3TDtWVzLCBnYXJhbnRpbmRvIG1haXMgcG9udG9zIG5hIHN1YSBjbGFzc2lmaWNhw6fDo28uPC9wPicrCiAgICAgICAgICAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXIiPicrY2hpcHMrJzwvZGl2PicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBzaW0tYmxvcXVlYWRvIiB0eXBlPSJidXR0b24iIGRpc2FibGVkIGFyaWEtZGlzYWJsZWQ9InRydWUiPicrSUNPX0xPQ0srJyBBYnJlIGVtICcrZGF0YUJSKGV2U2ltLmRhdGEpKycsIMOgcyAnK1NJTV9KQU5FTEEuYWJyZSsnPC9idXR0b24+JysKICAgICAgICAgICc8L2Rpdj4nOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEFCRVJUTyDihpIgYm90w6NvIGF0aXZvCiAgICAgICAgaHRtbCArPSAnPGFydGljbGUgY2xhc3M9ImNhcmQgaGVyby1taXNzYW8iIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIj48ZGl2IGNsYXNzPSJobS1ib2R5IiBzdHlsZT0icGFkZGluZzozMHB4IDM0cHgiPicrCiAgICAgICAgICBxdWFuZG8rCiAgICAgICAgICAnPGgzIHN0eWxlPSJtYXJnaW4tdG9wOjE4cHgiPicrZXNjKGV2U2ltLnRpdHVsbykrJzwvaDM+JysKICAgICAgICAgIGNoaXBzKwogICAgICAgICAgJzxwIGNsYXNzPSJobS1ub3RlIj4nKyhwcm9nCiAgICAgICAgICAgID8gJ1NldSBjcm9uw7RtZXRybyBlc3TDoSByb2RhbmRvIG5vIHNlcnZpZG9yIGUgYXMgcmVzcG9zdGFzIGVzdMOjbyBzYWx2YXMuIENvbnRpbnVlIGRlIG9uZGUgcGFyb3UuJwogICAgICAgICAgICA6ICdQcm92YSDDum5pY2Egbm8gbW9kZWxvIG9maWNpYWw6ICcrY2ZnLnF1ZXN0b2VzKycgcXVlc3TDtWVzLCAnK2NmZy5kdXJhY2FvTWluKycgbWludXRvcyBjb3JyaWRvcywgZW5jZXJyYW1lbnRvIMOgcyAnK1NJTV9KQU5FTEEuZmVjaGErJyBwYXJhIHRvZG9zLiBSZXNlcnZlIG8gdGVtcG8gYW50ZXMgZGUgaW5pY2lhci4nKSsnPC9wPicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciIgaWQ9ImJ0blByb3ZhIj4nKyhwcm9nID8gJ0NvbnRpbnVhciBzaW11bGFkbycgOiAnSXIgcGFyYSBvIHNpbXVsYWRvJykrJzwvYnV0dG9uPicrCiAgICAgICAgICAnPC9kaXY+PC9hcnRpY2xlPic7CiAgICAgIH0KICAgIH0KICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgIHZhciBicCA9ICQoJyNidG5Qcm92YScpOyBpZiAoYnApIGJwLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyU2ltdWxhZG9FeGFtKTsKICAgIHZhciBiZyA9ICQoJyNidG5HYWJhcml0bycpOyBpZiAoYmcpIGJnLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyU2ltdWxhZG9HYWJhcml0byk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTaW11bGFkb0V4YW0oKXsKICAgIHZhciBjZmcgPSBTSU1fQ0ZHW3VzZXIucHJvdmFdIHx8IFNJTV9DRkcuZW5hbWVkOwogICAgdmFyIGV2U2ltID0gai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBlLmlkID09PSBqLnNpbXVsYWRvSWQ7IH0pOwoKICAgIC8vIOKUgOKUgCBMT0JCWSAoZmFpci1wbGF5KSDilIDilIAKICAgIGlmICghQ0FDSEUuc2ltUHJvZykgewogICAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJwYWdlLWhlYWQiPjxkaXY+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5Wb2x0YXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPlZvbHRhcjwvYnV0dG9uPicrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJraWNrZXIiPlNpbXVsYWRvIEZpbmFsPC9zcGFuPjxoMSBzdHlsZT0iZm9udC1zaXplOjIycHgiPicrZXNjKGV2U2ltLnRpdHVsbykrJzwvaDE+PC9kaXY+PC9kaXY+JzsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6MzBweCAzNHB4Ij4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPkFudGVzIGRlIGNvbWXDp2FyPC9kaXY+JysKICAgICAgICAnPHVsIGNsYXNzPSJzaW0tcmVncmFzIj4nKwogICAgICAgICc8bGk+PGI+JytjZmcucXVlc3RvZXMrJyBxdWVzdMO1ZXM8L2I+IGRlIG3Dumx0aXBsYSBlc2NvbGhhIChBIGEgRCksICcrU0lNX0FSRUFTLmxlbmd0aCsnIGdyYW5kZXMgw6FyZWFzPC9saT4nKwogICAgICAgICc8bGk+PGI+JytjZmcuZHVyYWNhb01pbisnIG1pbnV0b3M8L2I+IGRlIHByb3ZhLCBzZW0gcGF1c2FyIG8gY3JvbsO0bWV0cm88L2xpPicrCiAgICAgICAgJzxsaT5BIHByb3ZhIGVuY2VycmEgw6BzIDxiPicrU0lNX0pBTkVMQS5mZWNoYSsnPC9iPiBwYXJhIHRvZG9zOiBxdWVtIGNvbWXDp2EgbWFpcyB0YXJkZSB0ZW0gbWVub3MgdGVtcG88L2xpPicrCiAgICAgICAgJzxsaT48Yj5UZW50YXRpdmEgw7puaWNhPC9iPiwgY29tIHJlc3Bvc3RhcyBzYWx2YXMgYXV0b21hdGljYW1lbnRlIG5hIHN1YSBjb250YTwvbGk+JysKICAgICAgICAnPGxpPkFvIHRlcm1pbmFyLCB2b2PDqiB2w6ogc2V1cyBhY2VydG9zOyBvIDxiPmdhYmFyaXRvIGNvbWVudGFkbzwvYj4gw6kgbGliZXJhZG8gcGFyYSB0b2RvcyBhcMOzcyBvIGVuY2VycmFtZW50bzwvbGk+JysKICAgICAgICAnPC91bD4nKwogICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO2xpbmUtaGVpZ2h0OjEuNjttYXJnaW46MTZweCAwIDRweCI+QW8gaW5pY2lhciwgdm9jw6ogZGVjbGFyYSBxdWUgZmFyw6EgYSBwcm92YSA8Yj5zZW0gYXV4w61saW8gZXh0ZXJubzwvYj4gKHBlc3NvYXMsIG1hdGVyaWFpcyBvdSBpbnRlbGlnw6puY2lhIGFydGlmaWNpYWwpLiBPcyByZWdpc3Ryb3MgZGUgaW7DrWNpbywgZW52aW8gZSByZXNwb3N0YXMgc8OjbyBhdWRpdGFkb3MgcGVsYSBvcmdhbml6YcOnw6NvLCBlIGEgY29uc3RhdGHDp8OjbyBkZSBmcmF1ZGUgbGV2YSDDoCBkZXNjbGFzc2lmaWNhw6fDo28gZG8gQXRvIEZpbmFsLjwvcD4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBpZD0iYnRuSW5pY2lhciIgc3R5bGU9Im1hcmdpbi10b3A6MTRweCI+TGkgZSBjb25jb3JkbyDCtyBJbmljaWFyIHNpbXVsYWRvPC9idXR0b24+PC9kaXY+JzsKICAgICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgICAkKCcjYnRuVm9sdGFyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJTaW11bGFkbyk7CiAgICAgICQoJyNidG5JbmljaWFyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHZhciBiID0gJCgnI2J0bkluaWNpYXInKTsgYi5kaXNhYmxlZCA9IHRydWU7IGIudGV4dENvbnRlbnQgPSAnSW5pY2lhbmRv4oCmJzsKICAgICAgICBzYlJwYygnc2ltdWxhZG9faW5pY2lhcicsIHsgcF9jcGY6IENBQ0hFLnVzZXIuY3BmIH0pLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgICBpZiAoci5zdGF0dXMgPT09ICdvaycpIHsKICAgICAgICAgICAgQ0FDSEUuc2ltUHJvZyA9IHsgaW5pY2lhZG9fZW06IHIuaW5pY2lhZG9fZW0sIHJlc3Bvc3Rhczoge30sIG1hcmNhZGFzOiBbXSwKICAgICAgICAgICAgICBmZWNoYV90czogRGF0ZS5wYXJzZShyLmZlY2hhX3RzKSwgZHVyYWNhb19taW46IHIuZHVyYWNhb19taW4sCiAgICAgICAgICAgICAgc2tldzogRGF0ZS5wYXJzZShyLmFnb3JhKSAtIERhdGUubm93KCkgfTsKICAgICAgICAgICAgLy8gYXMgcXVlc3TDtWVzIGRvIHNpbXVsYWRvIHPDsyBmaWNhbSB2aXPDrXZlaXMgY29tIGEgamFuZWxhIGFiZXJ0YQogICAgICAgICAgICBzYlNlbGVjdCgncXVpel9xdWVzdG9lcz9zZWxlY3Q9aWQsZXZlbnRvX2lkLG9yZGVtLGFyZWEsZW51bmNpYWRvLGFsdGVybmF0aXZhcyZldmVudG9faWQ9ZXEuJytldlNpbS5pZCsnJm9yZGVyPW9yZGVtJykKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihxcyl7CiAgICAgICAgICAgICAgICBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gPSAoQXJyYXkuaXNBcnJheShxcykgPyBxcyA6IFtdKS5tYXAoZnVuY3Rpb24ocm93KXsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IHJvdy5pZCwgb3JkZW06IHJvdy5vcmRlbSwgYXJlYTogcm93LmFyZWEsIHE6IHJvdy5lbnVuY2lhZG8sIGFsdHM6IHJvdy5hbHRlcm5hdGl2YXMgfTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmVuZGVyU2ltdWxhZG9FeGFtKCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHIuc3RhdHVzID09PSAnbmFvX2FiZXJ0bycpIHsgYi5kaXNhYmxlZCA9IGZhbHNlOyBiLnRleHRDb250ZW50ID0gJ0xpIGUgY29uY29yZG8gwrcgSW5pY2lhciBzaW11bGFkbyc7IHRvYXN0KCdBIHByb3ZhIGFicmUgw6BzICcrU0lNX0pBTkVMQS5hYnJlKycuJyk7IH0KICAgICAgICAgIGVsc2UgaWYgKHIuc3RhdHVzID09PSAnZW5jZXJyYWRvJykgeyB0b2FzdCgnQSBqYW5lbGEgZGEgcHJvdmEgasOhIGVuY2Vycm91LicpOyByZW5kZXJTaW11bGFkbygpOyB9CiAgICAgICAgICBlbHNlIGlmIChyLnN0YXR1cyA9PT0gJ2phX3Jlc3BvbmRpZG8nKSB7IGhpZHJhdGFyKCkudGhlbihyZW5kZXJTaW11bGFkbyk7IH0KICAgICAgICAgIGVsc2UgeyBiLmRpc2FibGVkID0gZmFsc2U7IGIudGV4dENvbnRlbnQgPSAnTGkgZSBjb25jb3JkbyDCtyBJbmljaWFyIHNpbXVsYWRvJzsgdG9hc3QoJ07Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0KICAgICAgICB9KS5jYXRjaChmdW5jdGlvbigpeyBiLmRpc2FibGVkID0gZmFsc2U7IGIudGV4dENvbnRlbnQgPSAnTGkgZSBjb25jb3JkbyDCtyBJbmljaWFyIHNpbXVsYWRvJzsgdG9hc3QoJ1NlbSBjb25leMOjby4gVGVudGUgbm92YW1lbnRlLicpOyB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyDilIDilIAgUFJPVkEgKGxheW91dDogY3JvbsO0bWV0cm8gZW0gZGVzdGFxdWUgbm8gdG9wbyArIG1hcGEgaG9yaXpvbnRhbCArIHF1ZXN0w6NvIGVtIHRlbGEgY2hlaWEpIOKUgOKUgAogICAgdmFyIHByb2cgPSBDQUNIRS5zaW1Qcm9nOwogICAgcHJvZy5yZXNwb3N0YXMgPSBwcm9nLnJlc3Bvc3RhcyB8fCB7fTsKICAgIHByb2cubWFyY2FkYXMgPSBwcm9nLm1hcmNhZGFzIHx8IFtdOwogICAgdmFyIHFzID0gQ0FDSEUucXVlc3RvZXNbZXZTaW0uaWRdIHx8IFtdOwogICAgaWYgKCFxcy5sZW5ndGgpIHsKICAgICAgc2JTZWxlY3QoJ3F1aXpfcXVlc3RvZXM\/c2VsZWN0PWlkLGV2ZW50b19pZCxvcmRlbSxhcmVhLGVudW5jaWFkbyxhbHRlcm5hdGl2YXMmZXZlbnRvX2lkPWVxLicrZXZTaW0uaWQrJyZvcmRlcj1vcmRlbScpCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocm93cyl7CiAgICAgICAgICBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gPSAoQXJyYXkuaXNBcnJheShyb3dzKSA\/IHJvd3MgOiBbXSkubWFwKGZ1bmN0aW9uKHJvdyl7CiAgICAgICAgICAgIHJldHVybiB7IGlkOiByb3cuaWQsIG9yZGVtOiByb3cub3JkZW0sIGFyZWE6IHJvdy5hcmVhLCBxOiByb3cuZW51bmNpYWRvLCBhbHRzOiByb3cuYWx0ZXJuYXRpdmFzIH07CiAgICAgICAgICB9KTsKICAgICAgICAgIHJlbmRlclNpbXVsYWRvRXhhbSgpOwogICAgICAgIH0pOwogICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWluay1kaW0pIj5DYXJyZWdhbmRvIGEgcHJvdmHigKY8L2Rpdj4nOwogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgYXR1YWwgPSAwOwogICAgdmFyIHNrZXcgPSBwcm9nLnNrZXcgfHwgMDsKICAgIHZhciBpbmlUcyA9IERhdGUucGFyc2UocHJvZy5pbmljaWFkb19lbSk7CiAgICB2YXIgZmVjaGFUcyA9IHByb2cuZmVjaGFfdHMgfHwgc2ltRmVjaGFUcygpOwogICAgdmFyIGR1ck1pbiA9IHByb2cuZHVyYWNhb19taW4gfHwgY2ZnLmR1cmFjYW9NaW47CiAgICB2YXIgZmltID0gTWF0aC5taW4oaW5pVHMgKyBkdXJNaW4gKiA2MDAwMCwgZmVjaGFUcyAtIDYwMDAwKSAtIHNrZXc7CgogICAgdmFyIGh0bWwyID0gJzxkaXYgaWQ9InByb3ZhQm94Ij4nKwogICAgICAnPGRpdiBjbGFzcz0iY2FyZCBwcm92YS10b3BvIj4nKwogICAgICAnPGRpdj48ZGl2IGNsYXNzPSJwdC10aW1lciIgaWQ9InNpbVRpbWVyIj4tLTotLTwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwdC1yb3R1bG8iPlRlbXBvIHJlc3RhbnRlPC9kaXY+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InB0LW1ldGEiIGlkPSJzaW1NZXRhIj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0icHQtYWNvZXMiPjxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0iYnRuTWFwYSI+TWFwYSBkZSBxdWVzdMO1ZXM8L2J1dHRvbj48c3BhbiBpZD0ic2ltQWNvZXMiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcCI+PC9zcGFuPjwvZGl2PicrCiAgICAgICc8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iY2FyZCBxdWl6LWJveCIgc3R5bGU9InBhZGRpbmc6MjRweCAyOHB4Ij4nKwogICAgICAnPGRpdiBjbGFzcz0icHJvdmEtbWFwYSIgaWQ9InFtYXAiPicrcXMubWFwKGZ1bmN0aW9uKF8sIGkpeyByZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWk9IicraSsnIj4nKyhpKzEpKyc8L2J1dHRvbj4nOyB9KS5qb2luKCcnKSsnPC9kaXY+JysKICAgICAgJzxkaXYgaWQ9InFBcmVhIj48L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sMjsKCiAgICBsaWdhckd1YXJkYVByb3ZhKCk7CiAgICB2YXIgYm94ID0gJCgnI3Byb3ZhQm94Jyk7CiAgICBib3guY2xhc3NMaXN0LmFkZCgncHJvdmEtcHJvdGVnaWRhJyk7CiAgICBbJ2NvcHknLCdjdXQnLCdjb250ZXh0bWVudSddLmZvckVhY2goZnVuY3Rpb24oZXZOYW1lKXsKICAgICAgYm94LmFkZEV2ZW50TGlzdGVuZXIoZXZOYW1lLCBmdW5jdGlvbihlKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9KTsKICAgIH0pOwoKICAgIGZ1bmN0aW9uIG1hcGFBYmVydG8oKXsgcmV0dXJuICQoJyNxbWFwJykuY2xhc3NMaXN0LmNvbnRhaW5zKCdhYmVydG8nKTsgfQogICAgZnVuY3Rpb24gYWx0ZXJuYU1hcGEoZm9yY2FyKXsKICAgICAgdmFyIG0gPSAkKCcjcW1hcCcpOwogICAgICB2YXIgYWJyaXIgPSBmb3JjYXIgPT09IHRydWUgPyB0cnVlIDogZm9yY2FyID09PSBmYWxzZSA\/IGZhbHNlIDogIW1hcGFBYmVydG8oKTsKICAgICAgbS5jbGFzc0xpc3QudG9nZ2xlKCdhYmVydG8nLCBhYnJpcik7CiAgICAgICQoJyNidG5NYXBhJykuY2xhc3NMaXN0LnRvZ2dsZSgnbWFyYy1vbicsIGFicmlyKTsKICAgIH0KICAgICQoJyNidG5NYXBhJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBhbHRlcm5hTWFwYSgpOyB9KTsKCiAgICB2YXIgc2FsdmFyVCA9IG51bGw7CiAgICBmdW5jdGlvbiBzYWx2YXJSZW1vdG8oKXsKICAgICAgY2xlYXJUaW1lb3V0KHNhbHZhclQpOwogICAgICBzYWx2YXJUID0gc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgIHNiUnBjKCdzaW11bGFkb19zYWx2YXInLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiwKICAgICAgICAgIHBfcmVzcG9zdGFzOiBwcm9nLnJlc3Bvc3RhcywgcF9tYXJjYWRhczogcHJvZy5tYXJjYWRhcyB9KS5jYXRjaChmdW5jdGlvbigpe30pOwogICAgICB9LCA4MDApOwogICAgfQogICAgZnVuY3Rpb24gcmVzcG9uZGlkYXMoKXsgcmV0dXJuIE9iamVjdC5rZXlzKHByb2cucmVzcG9zdGFzKS5sZW5ndGg7IH0KICAgIGZ1bmN0aW9uIG1hcmNhZGEoaSl7IHJldHVybiBwcm9nLm1hcmNhZGFzLmluZGV4T2YocXNbaV0uaWQpID4gLTE7IH0KCiAgICAvLyBzYWx0YSBwcmEgcHLDs3hpbWEgcXVlc3TDo28gZG8gdGlwbyAoZW0gYnJhbmNvIC8gbWFyY2FkYSksIGNpcmN1bGFyIGEgcGFydGlyIGRhIGF0dWFsCiAgICBmdW5jdGlvbiBzYWx0YVBhcmEodGlwbyl7CiAgICAgIGZvciAodmFyIGsgPSAxOyBrIDw9IHFzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgdmFyIGkyID0gKGF0dWFsICsgaykgJSBxcy5sZW5ndGg7CiAgICAgICAgaWYgKHRpcG8gPT09ICdicmFuY28nICYmIHByb2cucmVzcG9zdGFzW3FzW2kyXS5pZF0gPT09IHVuZGVmaW5lZCkgcmV0dXJuIG1vc3RyYVF1ZXN0YW8oaTIpOwogICAgICAgIGlmICh0aXBvID09PSAnbWFyY2FkYScgJiYgbWFyY2FkYShpMikpIHJldHVybiBtb3N0cmFRdWVzdGFvKGkyKTsKICAgICAgfQogICAgICB0b2FzdCh0aXBvID09PSAnYnJhbmNvJyA\/ICdOZW5odW1hIHF1ZXN0w6NvIGVtIGJyYW5jby4nIDogJ05lbmh1bWEgcXVlc3TDo28gbWFyY2FkYS4nKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwaW50YU1hcGEoKXsKICAgICAgJCQoJyNxbWFwIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgICAgdmFyIGkgPSArYi5kYXRhc2V0Lmk7CiAgICAgICAgYi5jbGFzc05hbWUgPSAocHJvZy5yZXNwb3N0YXNbcXNbaV0uaWRdICE9PSB1bmRlZmluZWQgPyAncmVzcG9uZGlkYScgOiAnJykgKwogICAgICAgICAgKGkgPT09IGF0dWFsID8gJyBhdHVhbCcgOiAnJykgKyAobWFyY2FkYShpKSA\/ICcgbWFyY2FkYScgOiAnJyk7CiAgICAgIH0pOwogICAgICB2YXIgZW1CcmFuY28gPSBxcy5sZW5ndGggLSByZXNwb25kaWRhcygpOwogICAgICAkKCcjc2ltTWV0YScpLmlubmVySFRNTCA9ICc8Yj4nK3Jlc3BvbmRpZGFzKCkrJzwvYj4gZGUgJytxcy5sZW5ndGgrCiAgICAgICAgKGVtQnJhbmNvID8gJyDCtyA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InB0LXNhbHRvIiBpZD0ic2FsdG9CcmFuY28iIHRpdGxlPSJJciBwYXJhIGEgcHLDs3hpbWEgZW0gYnJhbmNvIj4nK2VtQnJhbmNvKycgZW0gYnJhbmNvPC9idXR0b24+JyA6ICcgwrcgdHVkbyByZXNwb25kaWRvJykrCiAgICAgICAgKHByb2cubWFyY2FkYXMubGVuZ3RoID8gJyA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InB0LXNhbHRvIGF6dWwiIGlkPSJzYWx0b01hcmNhZGEiIHRpdGxlPSJJciBwYXJhIGEgcHLDs3hpbWEgbWFyY2FkYSI+Jytwcm9nLm1hcmNhZGFzLmxlbmd0aCsnIG1hcmNhZGEnKyhwcm9nLm1hcmNhZGFzLmxlbmd0aD4xPydzJzonJykrJzwvYnV0dG9uPicgOiAnJyk7CiAgICAgIHZhciBzYiA9ICQoJyNzYWx0b0JyYW5jbycpOyBpZiAoc2IpIHNiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgc2FsdGFQYXJhKCdicmFuY28nKTsgfSk7CiAgICAgIHZhciBzbSA9ICQoJyNzYWx0b01hcmNhZGEnKTsgaWYgKHNtKSBzbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHNhbHRhUGFyYSgnbWFyY2FkYScpOyB9KTsKICAgIH0KCiAgICB2YXIgZmluYWxpemFuZG8gPSBmYWxzZTsKICAgIGZ1bmN0aW9uIGZpbmFsaXphcigpewogICAgICBpZiAoZmluYWxpemFuZG8pIHJldHVybjsKICAgICAgZmluYWxpemFuZG8gPSB0cnVlOwogICAgICBjbGVhckludGVydmFsKHRpbWVyKTsKICAgICAgY2xlYXJUaW1lb3V0KHNhbHZhclQpOwogICAgICBzYlJwYygnc2ltdWxhZG9fc2FsdmFyJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYsIHBfcmVzcG9zdGFzOiBwcm9nLnJlc3Bvc3RhcywgcF9tYXJjYWRhczogcHJvZy5tYXJjYWRhcyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uKCl7IHJldHVybiBzYlJwYygnc2ltdWxhZG9fZmluYWxpemFyJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYgfSk7IH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgICBpZiAoci5zdGF0dXMgPT09ICdvaycgfHwgci5zdGF0dXMgPT09ICdqYV9yZXNwb25kaWRvJykgewogICAgICAgICAgICBkZXNsaWdhckd1YXJkYVByb3ZhKCk7CiAgICAgICAgICAgIHRvYXN0KHIuc3RhdHVzICE9PSAnb2snID8gJ1NpbXVsYWRvIGrDoSByZWdpc3RyYWRvLicKICAgICAgICAgICAgICA6IChyLmdhYmFyaXRvX2xpYmVyYWRvID8gJ1NpbXVsYWRvIGVudmlhZG86ICcrci5hY2VydG9zKycvJytyLnRvdGFsKycgYWNlcnRvcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdQcm92YSBlbnZpYWRhISBSZXN1bHRhZG8gZSBnYWJhcml0byBzYWVtIMOgcyAnK1NJTV9KQU5FTEEuZmVjaGErJy4nKSk7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbG9jYXRpb24ucmVsb2FkKCk7IH0sIDkwMCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGZpbmFsaXphbmRvID0gZmFsc2U7CiAgICAgICAgICB0b2FzdCgnTsOjbyBmb2kgcG9zc8OtdmVsIGVudmlhciAoJytyLnN0YXR1cysnKS4gVGVudGUgZGUgbm92by4nKTsKICAgICAgICAgIHBpbnRhQWNvZXMoZmFsc2UpOwogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IGZpbmFsaXphbmRvID0gZmFsc2U7IHRvYXN0KCdTZW0gY29uZXjDo28uIFRlbnRlIGVudmlhciBkZSBub3ZvLicpOyBwaW50YUFjb2VzKGZhbHNlKTsgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gcGludGFBY29lcyhjb25maXJtYW5kbyl7CiAgICAgIHZhciBlbCA9ICQoJyNzaW1BY29lcycpOwogICAgICBpZiAoY29uZmlybWFuZG8pIHsKICAgICAgICBhbHRlcm5hTWFwYSh0cnVlKTsgIC8vIHJldmlzw6NvOiBtYXBhIMOpIGluZGlzcGVuc8OhdmVsIGFxdWkKICAgICAgICB2YXIgZW1CcmFuY28gPSBxcy5sZW5ndGggLSByZXNwb25kaWRhcygpOwogICAgICAgIGVsLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz0icHQtY29uZmlybSI+JysKICAgICAgICAgIChlbUJyYW5jbyA+IDAgPyAnPGI+JytlbUJyYW5jbysnIGVtIGJyYW5jbzwvYj4uIEZpbmFsaXphcj8nIDogJ1R1ZG8gcmVzcG9uZGlkby4gRmluYWxpemFyPycpKyc8L3NwYW4+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgaWQ9ImJ0bkZpbVNpbSI+U2ltLCBmaW5hbGl6YXI8L2J1dHRvbj4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0iYnRuQ29udGludWEiPkNvbnRpbnVhcjwvYnV0dG9uPic7CiAgICAgICAgJCgnI2J0bkZpbVNpbScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZmluYWxpemFyKTsKICAgICAgICAkKCcjYnRuQ29udGludWEnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHBpbnRhQWNvZXMoZmFsc2UpOyB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbC5pbm5lckhUTUwgPSAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5QZWRpckZpbSI+RmluYWxpemFyIHNpbXVsYWRvPC9idXR0b24+JzsKICAgICAgICAkKCcjYnRuUGVkaXJGaW0nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHBpbnRhQWNvZXModHJ1ZSk7IH0pOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gbW9zdHJhUXVlc3RhbyhpKXsKICAgICAgYXR1YWwgPSBpOwogICAgICB2YXIgcSA9IHFzW2ldOwogICAgICB2YXIgbSA9IG1hcmNhZGEoaSk7CiAgICAgICQoJyNxQXJlYScpLmlubmVySFRNTCA9CiAgICAgICAgKHEuYXJlYSA\/ICc8ZGl2IGNsYXNzPSJwcm92YS1hcmVhIj4nK2VzYyhxLmFyZWEpKyc8L2Rpdj4nIDogJycpKwogICAgICAgICc8ZGl2IGNsYXNzPSJxaGVhZCIgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjgwMDtsZXR0ZXItc3BhY2luZzouMThlbTtjb2xvcjp2YXIoLS1hbWJlcik7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO21hcmdpbi1ib3R0b206MTBweCI+UXVlc3TDo28gJysoaSsxKSsnIGRlICcrcXMubGVuZ3RoKyc8L2Rpdj4nKwogICAgICAgICc8cCBjbGFzcz0iZW51biIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0b206MTRweDt3aGl0ZS1zcGFjZTpwcmUtd3JhcCI+JyttaWRpYUhUTUwocS5xKSsnPC9wPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InF1aXotb3B0cyBtdWx0Ij4nK3EuYWx0cy5tYXAoZnVuY3Rpb24oYSl7CiAgICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXY9IicrYS5sKyciIGNsYXNzPSInKyhwcm9nLnJlc3Bvc3Rhc1txLmlkXSA9PT0gYS5sID8gJ3NlbCcgOiAnJykrJyI+PGIgY2xhc3M9Imx0Ij4nK2EubCsnPC9iPjxzcGFuPicrZXNjKGEudCkrJzwvc3Bhbj48L2J1dHRvbj4nOwogICAgICAgIH0pLmpvaW4oJycpKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwcm92YS1uYXYiPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0icUFudCIgJysoaSA9PT0gMCA\/ICdkaXNhYmxlZCcgOiAnJykrJz5BbnRlcmlvcjwvYnV0dG9uPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtICcrKG0gPyAnbWFyYy1vbicgOiAnJykrJyIgaWQ9InFNYXJjYSI+JysobSA\/ICdNYXJjYWRhIHBhcmEgcmV2aXNhcicgOiAnTWFyY2FyIHBhcmEgcmV2aXNhcicpKyc8L2J1dHRvbj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9InFQcm94IiAnKyhpID09PSBxcy5sZW5ndGgtMSA\/ICdkaXNhYmxlZCcgOiAnJykrJz5QcsOzeGltYTwvYnV0dG9uPicrCiAgICAgICAgJzwvZGl2Pic7CiAgICAgICQkKCcjcUFyZWEgLnF1aXotb3B0cyBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgcHJvZy5yZXNwb3N0YXNbcS5pZF0gPSBiLmRhdGFzZXQudjsKICAgICAgICAgIHNhbHZhclJlbW90bygpOwogICAgICAgICAgJCQoJyNxQXJlYSAucXVpei1vcHRzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oeCl7IHguY2xhc3NMaXN0LnRvZ2dsZSgnc2VsJywgeCA9PT0gYik7IH0pOwogICAgICAgICAgcGludGFNYXBhKCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICAkKCcjcUFudCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgaWYgKGF0dWFsID4gMCkgbW9zdHJhUXVlc3RhbyhhdHVhbC0xKTsgfSk7CiAgICAgICQoJyNxUHJveCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgaWYgKGF0dWFsIDwgcXMubGVuZ3RoLTEpIG1vc3RyYVF1ZXN0YW8oYXR1YWwrMSk7IH0pOwogICAgICAkKCcjcU1hcmNhJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHZhciBpeCA9IHByb2cubWFyY2FkYXMuaW5kZXhPZihxLmlkKTsKICAgICAgICBpZiAoaXggPiAtMSkgcHJvZy5tYXJjYWRhcy5zcGxpY2UoaXgsIDEpOyBlbHNlIHByb2cubWFyY2FkYXMucHVzaChxLmlkKTsKICAgICAgICBzYWx2YXJSZW1vdG8oKTsgbW9zdHJhUXVlc3RhbyhpKTsKICAgICAgfSk7CiAgICAgIHBpbnRhTWFwYSgpOwogICAgfQoKICAgIHZhciB0aW1lciA9IHNldEludGVydmFsKHRpY2ssIDEwMDApOwogICAgZnVuY3Rpb24gdGljaygpewogICAgICB2YXIgZWwgPSAkKCcjc2ltVGltZXInKTsKICAgICAgaWYgKCFlbCkgeyBjbGVhckludGVydmFsKHRpbWVyKTsgcmV0dXJuOyB9CiAgICAgIHZhciBzID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoZmltIC0gRGF0ZS5ub3coKSkgLyAxMDAwKSk7CiAgICAgIHZhciBoID0gTWF0aC5mbG9vcihzLzM2MDApLCBtMiA9IE1hdGguZmxvb3IoKHMlMzYwMCkvNjApLCBzZWcgPSBzJTYwOwogICAgICBlbC50ZXh0Q29udGVudCA9IChoPjAgPyBTdHJpbmcoaCkucGFkU3RhcnQoMiwnMCcpKyc6JyA6ICcnKSArIFN0cmluZyhtMikucGFkU3RhcnQoMiwnMCcpKyc6JytTdHJpbmcoc2VnKS5wYWRTdGFydCgyLCcwJyk7CiAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ3VyZ2VudGUnLCBzIDw9IDYwKTsKICAgICAgaWYgKHMgPD0gMCkgZmluYWxpemFyKCk7CiAgICB9CgogICAgcGludGFBY29lcyhmYWxzZSk7CiAgICBtb3N0cmFRdWVzdGFvKDApOwogICAgdGljaygpOwogICAgJCQoJyNxbWFwIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBtb3N0cmFRdWVzdGFvKCtiLmRhdGFzZXQuaSk7IH0pOwogICAgfSk7CiAgfQoKICAvLyBHYWJhcml0byBjb21lbnRhZG8gZG8gc2ltdWxhZG86IG8gc2Vydmlkb3IgU8OTIGVudHJlZ2EgYXDDs3MgbyBlbmNlcnJhbWVudG8KICBmdW5jdGlvbiByZW5kZXJTaW11bGFkb0dhYmFyaXRvKCl7CiAgICB2YXIgZXZTaW0gPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbihlKXsgcmV0dXJuIGUuaWQgPT09IGouc2ltdWxhZG9JZDsgfSk7CiAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWluay1kaW0pIj5DYXJyZWdhbmRvIG8gZ2FiYXJpdG\/igKY8L2Rpdj4nOwogICAgc2JScGMoJ3NpbXVsYWRvX2dhYmFyaXRvJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYgfSkudGhlbihmdW5jdGlvbihnKXsKICAgICAgaWYgKGcuc3RhdHVzICE9PSAnb2snKSB7IHRvYXN0KCdPIGdhYmFyaXRvIMOpIGxpYmVyYWRvIGFww7NzIG8gZW5jZXJyYW1lbnRvLicpOyByZW5kZXJTaW11bGFkbygpOyByZXR1cm47IH0KICAgICAgdmFyIHFzID0gQ0FDSEUucXVlc3RvZXNbZXZTaW0uaWRdIHx8IFtdOwogICAgICB2YXIgcmVzID0gQ0FDSEUuc2ltUmVzIHx8IHsgcmVzcG9zdGFzOiB7fSB9OwogICAgICB2YXIgcG9ySWQgPSB7fTsKICAgICAgKGcuaXRlbnMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24oaXQpeyBwb3JJZFtpdC5xdWVzdGFvX2lkXSA9IGl0OyB9KTsKICAgICAgZnVuY3Rpb24gcGludGEoKXsKICAgICAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJwYWdlLWhlYWQiPjxkaXY+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blZvbHRhciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+Vm9sdGFyIGFvIFNpbXVsYWRvPC9idXR0b24+JysKICAgICAgICAgICc8c3BhbiBjbGFzcz0ia2lja2VyIj5HYWJhcml0byBjb21lbnRhZG88L3NwYW4+PGgxIHN0eWxlPSJmb250LXNpemU6MjJweCI+Jytlc2MoZXZTaW0udGl0dWxvKSsnPC9oMT4nKwogICAgICAgICAgKENBQ0hFLnNpbVJlcyA\/ICc8cCBjbGFzcz0iZGVzYyI+Vm9jw6ogZmV6IDxiPicrQ0FDSEUuc2ltUmVzLmFjZXJ0b3MrJyBkZSAnK0NBQ0hFLnNpbVJlcy50b3RhbCsnPC9iPi4gTyBnYWJhcml0byBlc3TDoSBlbSB2ZXJkZTsgb25kZSB2b2PDqiBlcnJvdSwgYSBzdWEgbWFyY2HDp8OjbyBhcGFyZWNlIGVtIHZlcm1lbGhvLjwvcD4nIDogJycpKwogICAgICAgICAgJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBxdWl6LWJveCI+JzsKICAgICAgICBxcy5mb3JFYWNoKGZ1bmN0aW9uKHEsIGkpewogICAgICAgICAgdmFyIGl0ID0gcG9ySWRbcS5pZF0gfHwge307CiAgICAgICAgICB2YXIgbWluaGEgPSAocmVzLnJlc3Bvc3RhcyB8fCB7fSlbcS5pZF07CiAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJxdWl6LXEiPicrKHEuYXJlYSA\/ICc8ZGl2IGNsYXNzPSJwcm92YS1hcmVhIj4nK2VzYyhxLmFyZWEpKyc8L2Rpdj4nIDogJycpKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0icWhlYWQiPlF1ZXN0w6NvICcrKGkrMSkrJyBkZSAnK3FzLmxlbmd0aCsnPC9kaXY+JysKICAgICAgICAgICAgJzxwIGNsYXNzPSJlbnVuIj4nK21pZGlhSFRNTChxLnEpKyc8L3A+JysKICAgICAgICAgICAgJzxkaXYgY2xhc3M9InF1aXotb3B0cyBtdWx0Ij4nK3EuYWx0cy5tYXAoZnVuY3Rpb24oYSl7CiAgICAgICAgICAgICAgdmFyIGNscyA9IGEubCA9PT0gaXQuY29ycmV0YSA\/ICdoaXQnIDogKG1pbmhhID09PSBhLmwgPyAnZXJyYWRvJyA6ICcnKTsKICAgICAgICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBkaXNhYmxlZCBjbGFzcz0iJytjbHMrJyI+PGIgY2xhc3M9Imx0Ij4nK2EubCsnPC9iPjxzcGFuPicrZXNjKGEudCkrJzwvc3Bhbj48L2J1dHRvbj4nOwogICAgICAgICAgICB9KS5qb2luKCcnKSsnPC9kaXY+JysKICAgICAgICAgICAgKGl0LmNvbWVudGFyaW8gPyAnPGRldGFpbHMgY2xhc3M9InF1aXotY29tZW50Ij48c3VtbWFyeT5WZXIgY29tZW50w6FyaW88L3N1bW1hcnk+PGRpdiBjbGFzcz0iY2JvZHkiPicrbWlkaWFIVE1MKGl0LmNvbWVudGFyaW8pKyc8L2Rpdj48L2RldGFpbHM+JyA6ICcnKSsKICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgfSk7CiAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgJCgnI2J0blZvbHRhcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyU2ltdWxhZG8pOwogICAgICB9CiAgICAgIGlmICghcXMubGVuZ3RoKSB7CiAgICAgICAgc2JTZWxlY3QoJ3F1aXpfcXVlc3RvZXM\/c2VsZWN0PWlkLGV2ZW50b19pZCxvcmRlbSxhcmVhLGVudW5jaWFkbyxhbHRlcm5hdGl2YXMmZXZlbnRvX2lkPWVxLicrZXZTaW0uaWQrJyZvcmRlcj1vcmRlbScpCiAgICAgICAgICAudGhlbihmdW5jdGlvbihyb3dzKXsKICAgICAgICAgICAgQ0FDSEUucXVlc3RvZXNbZXZTaW0uaWRdID0gcXMgPSAoQXJyYXkuaXNBcnJheShyb3dzKSA\/IHJvd3MgOiBbXSkubWFwKGZ1bmN0aW9uKHJvdyl7CiAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IHJvdy5pZCwgb3JkZW06IHJvdy5vcmRlbSwgYXJlYTogcm93LmFyZWEsIHE6IHJvdy5lbnVuY2lhZG8sIGFsdHM6IHJvdy5hbHRlcm5hdGl2YXMgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHBpbnRhKCk7CiAgICAgICAgICB9KTsKICAgICAgfSBlbHNlIHBpbnRhKCk7CiAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0gUkFOS0lORyAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gcmVuZGVyUmFua2luZygpewogICAgdmFyIHAgPSBjYWxjUG9udG9zKHVzZXIpOwogICAgdmFyIGh0bWwgPSBwYWdlSGVhZCgnQ2xhc3NpZmljYcOnw6NvIGdlcmFsIMK3ICcgKyBqLmxpZ2EsICdTdWEgcG9zacOnw6NvIG5hIGNsYXNzaWZpY2HDp8OjbycsCiAgICAgICdTdWEgUE9TScOHw4NPIMOpIGEgc3VhIHBvbnR1YcOnw6NvIHRvdGFsOiBqb3JuYWRhIGRlIGVzdHVkbyAoYXTDqSAyLjAwMDogcHJlc2Vuw6dhLCBxdWVzdMO1ZXMgZSBTaW11bGFkbykgKyBpbmRpY2HDp8O1ZXMgKHNlbSB0ZXRvKSwgdHVkbyBzb21hZG8uIEVtcGF0ZT8gTWFpb3Igbm90YSBubyBTaW11bGFkbywgZGVwb2lzIGFjZXJ0b3MgbmFzIHF1ZXN0w7VlcyBlIGNoZWNrLWluIG1haXMgY2Vkby4nLAogICAgICAnQ2xhc3NpZmljYcOnw6NvIGFvIHZpdm8nKTsKICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSkiIGlkPSJya0xvYWQiPkNhcnJlZ2FuZG8gbyByYW5raW5n4oCmPC9kaXY+JzsKICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKCiAgICAvLyBQUk9EVcOHw4NPOiBwb3Npw6fDo28gZSBwbGFjYXIgdsOqbSBkbyBzZXJ2aWRvciAocmFua2luZ19nZXJhbCksIGNvbSBhCiAgICAvLyBjYXNjYXRhIGRlIGRlc2VtcGF0ZSBlIG5vbWVzIGFicmV2aWFkb3Mgc2VtIFBJSQogICAgc2JScGMoJ3JhbmtpbmdfZ2VyYWwnLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiB9KS50aGVuKGZ1bmN0aW9uKHIpewogICAgICBpZiAoIXIgfHwgci5zdGF0dXMgIT09ICdvaycpIHsgJCgnI3JrTG9hZCcpLnRleHRDb250ZW50ID0gJ07Do28gZm9pIHBvc3PDrXZlbCBjYXJyZWdhciBvIHJhbmtpbmcgYWdvcmEuJzsgcmV0dXJuOyB9CiAgICAgIHZhciBwcmVUZW1wb3JhZGEgPSBob2plLmlzbyA8IGouaW5pY2lvOwogICAgICB2YXIgbXAgPSByLm1ldXNfcG9udG9zIHx8IHsgcHJlczogMCwgcXVlc3Q6IDAsIHNpbTogMCwgaW5kOiAwLCBlc3R1ZG86IDAsIHRvdGFsOiAwIH07CiAgICAgIHZhciBlc3R1ZG8gPSAobXAuZXN0dWRvICE9IG51bGwpID8gbXAuZXN0dWRvIDogKG1wLnByZXMgKyBtcC5xdWVzdCArIG1wLnNpbSk7CiAgICAgIHZhciB0b3RhbCA9IChtcC50b3RhbCAhPSBudWxsKSA\/IG1wLnRvdGFsIDogKGVzdHVkbyArIChtcC5pbmQgfHwgMCkpOwogICAgICAvLyBhIFBPU0nDh8ODTyBubyByYW5raW5nIMOpIGRlY2lkaWRhIHBlbGEgcG9udHVhw6fDo28gVE9UQUw6IGpvcm5hZGEgZGUgZXN0dWRvCiAgICAgIC8vIChhdMOpIDIuMDAwKSArIGluZGljYcOnw7VlcyAoc2VtIHRldG8pLiBEZWNpc8OjbyBkbyBJZ29yIDExLzA4LgogICAgICB2YXIgb3V0ID0gJzxkaXYgY2xhc3M9ImNhcmQgcG9zLWNhcmQiPjxkaXY+PGRpdiBjbGFzcz0icG9zIj4nKyhwcmVUZW1wb3JhZGEgPyAnwrcnIDogci5taW5oYV9wb3MrJ8K6JykrJyA8c21hbGw+ZGUgJysoci50b3RhbF9wYXJ0aWNpcGFudGVzfHwxKS50b0xvY2FsZVN0cmluZygncHQtQlInKSsnPC9zbWFsbD48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2PjxkaXYgY2xhc3M9ImtpY2tlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij5Wb2PDqiDCtyBwYXJjaWFsIGRlIGFnb3JhPC9kaXY+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6ODAwIj4nK2ZtdFB0cyh0b3RhbCkrJyBwdHMgPHNtYWxsIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7Zm9udC13ZWlnaHQ6NjAwIj5kZWNpZGUgYSBzdWEgcG9zacOnw6NvPC9zbWFsbD48L2Rpdj4nKwogICAgICAgICgobXAuaW5kfHwwKSA\/ICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWluay1tdXRlKTttYXJnaW4tdG9wOjJweCI+am9ybmFkYSAnK2ZtdFB0cyhlc3R1ZG8pKycgKyAnK2ZtdFB0cyhtcC5pbmQpKycgZGUgaW5kaWNhw6fDtWVzPC9kaXY+JyA6ICcnKSsKICAgICAgICAnPGRpdiBjbGFzcz0icG9zLWJyZWFrZG93biI+JysKICAgICAgICAnPGRpdiBjbGFzcz0icGIiPjxkaXYgY2xhc3M9InJvdyI+PHNwYW4+UHJlc2Vuw6dhPC9zcGFuPjxzcGFuPicrZm10UHRzKG1wLnByZXMpKycgLyAnK1BPTlRPUy5wcmVzZW5jYSsnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysobXAucHJlcy9QT05UT1MucHJlc2VuY2EqMTAwKSsnJSI+PC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0icGIiPjxkaXYgY2xhc3M9InJvdyI+PHNwYW4+UXVlc3TDtWVzPC9zcGFuPjxzcGFuPicrZm10UHRzKG1wLnF1ZXN0KSsnIC8gJytQT05UT1MubWlzc29lcysnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysobXAucXVlc3QvUE9OVE9TLm1pc3NvZXMqMTAwKSsnJSI+PC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0icGIiPjxkaXYgY2xhc3M9InJvdyI+PHNwYW4+U2ltdWxhZG8gRmluYWw8L3NwYW4+PHNwYW4+JytmbXRQdHMobXAuc2ltKSsnIC8gJytQT05UT1Muc2ltdWxhZG8rJzwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJwcm9ncmVzcyI+PGRpdiBjbGFzcz0iZmlsbCIgc3R5bGU9IndpZHRoOicrKG1wLnNpbS9QT05UT1Muc2ltdWxhZG8qMTAwKSsnJSI+PC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0icGIiPjxkaXYgY2xhc3M9InJvdyI+PHNwYW4+SW5kaWNhw6fDtWVzPC9zcGFuPjxzcGFuPisnK2ZtdFB0cyhtcC5pbmR8fDApKycgPHNtYWxsIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPmNvbnRhIG5hIGNsYXNzaWZpY2HDp8Ojbzwvc21hbGw+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JytNYXRoLm1pbigxMDAsKG1wLmluZHx8MCkvMjAwKjEwMCkrJyUiPjwvZGl2PjwvZGl2PjwvZGl2PicrCiAgICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2Pic7CgogICAgICAvLyBwcmVtaWHDp8O1ZXMgKyBmYWl4YXMgZGUgY29ucXVpc3RhIChwcsOqbWlvcyByZXRpcmFkb3MgdGVtcG9yYXJpYW1lbnRlKQogICAgICBvdXQgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjI2cHggMzBweDttYXJnaW4tYm90dG9tOjIycHgiPic7CiAgICAgIGlmIChNT1NUUkFSX1BSRU1JT1MpIHsKICAgICAgICBvdXQgKz0gJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7Z2FwOjhweDttYXJnaW4tYm90dG9tOjE0cHgiPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIj5QcmVtaWHDp8O1ZXM8L2Rpdj48c21hbGwgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKTtmb250LXNpemU6MTJweCI+cHJvdmlzw7NyaW8gwrcgY29uZmlybWHDp8OjbyBhdMOpIG8gU2ltdWxhZG8gRmluYWw8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0icHJlbWlvcyIgc3R5bGU9Im1hcmdpbi10b3A6MCI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJwcmVtaW8iPjxkaXYgY2xhc3M9InBvcyI+McK6IGx1Z2FyPC9kaXY+PGRpdiBjbGFzcz0id2hhdCI+Tm90ZWJvb2s8L2Rpdj48L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9InByZW1pbyI+PGRpdiBjbGFzcz0icG9zIj4ywrogbHVnYXI8L2Rpdj48ZGl2IGNsYXNzPSJ3aGF0Ij5UYWJsZXQ8L2Rpdj48L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9InByZW1pbyI+PGRpdiBjbGFzcz0icG9zIj4zwrogYSAxMMK6PC9kaXY+PGRpdiBjbGFzcz0id2hhdCI+S2l0IENvcnVqYSBNRUQ8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgICB9IGVsc2UgewogICAgICAgIG91dCArPSAnPGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPlByZW1pYcOnw6NvPC9kaXY+JysKICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luOjAiPkEgcHJlbWlhw6fDo28gZG8gQXRvIEZpbmFsIHNlcsOhIGRpdnVsZ2FkYSBlbSBicmV2ZSBubyBncnVwbyBvZmljaWFsLiAnKwogICAgICAgICAgJ1NpZ2EgYWN1bXVsYW5kbyBwb250b3MgbmEgam9ybmFkYTogcXVhbmRvIGFzIHJlZ3JhcyBzYcOtcmVtLCBzdWEgcG9zacOnw6NvIGrDoSBjb250YS48L3A+JzsKICAgICAgfQogICAgICAvLyBub3RhIGRlIGZhaXhhcyByZW1vdmlkYSBhIHBlZGlkbyBkbyBJZ29yICgxMi8wOCkKICAgICAgb3V0ICs9ICc8L2Rpdj4nOwoKICAgICAgb3V0ICs9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzoyMHB4IDhweCA4cHgiPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDIycHggOHB4Ij4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiPkNsYXNzaWZpY2HDp8OjbyBnZXJhbDwvZGl2PjxzbWFsbCBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpO2ZvbnQtc2l6ZToxMnB4Ij50b3AgMTAgKyBzdWEgdml6aW5oYW7Dp2E8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgJzx0YWJsZSBjbGFzcz0icmFuay10YWJsZSI+PHRoZWFkPjx0cj48dGggc3R5bGU9IndpZHRoOjYwcHgiPiM8L3RoPjx0aD5QYXJ0aWNpcGFudGU8L3RoPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+UG9udG9zPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgICAgIHZhciBhbnQgPSAwOwogICAgICAoci5ib2FyZCB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihyb3cpewogICAgICAgIGlmIChhbnQgJiYgcm93LnBvcyA+IGFudCArIDEpIHsKICAgICAgICAgIG91dCArPSAnPHRyIGNsYXNzPSJyYW5rLWdhcCI+PHRkIGNvbHNwYW49IjMiPsK3IMK3IMK3ICcrKHJvdy5wb3MgLSBhbnQgLSAxKS50b0xvY2FsZVN0cmluZygncHQtQlInKSsnIHBhcnRpY2lwYW50ZScrKHJvdy5wb3MtYW50LTE+MT8ncyc6JycpKycgwrcgwrcgwrc8L3RkPjwvdHI+JzsKICAgICAgICB9CiAgICAgICAgYW50ID0gcm93LnBvczsKICAgICAgICB2YXIgbWVkYWwgPSByb3cucG9zPT09MT8nPHNwYW4gY2xhc3M9Im1lZGFsIGciPjE8L3NwYW4+Jzpyb3cucG9zPT09Mj8nPHNwYW4gY2xhc3M9Im1lZGFsIHMiPjI8L3NwYW4+Jzpyb3cucG9zPT09Mz8nPHNwYW4gY2xhc3M9Im1lZGFsIGIiPjM8L3NwYW4+JzonPHNwYW4gY2xhc3M9Im1lZGFsIj4nK3Jvdy5wb3MrJzwvc3Bhbj4nOwogICAgICAgIG91dCArPSAnPHRyJysocm93Lm1lPycgY2xhc3M9Im1lIic6JycpKyc+PHRkPicrbWVkYWwrJzwvdGQ+PHRkPicrZXNjKHJvdy5ub21lKSsocm93Lm1lPycgwrcgdm9jw6onOicnKSsnPC90ZD48dGQgY2xhc3M9InB0cyI+JytmbXRQdHMocm93LnB0cykrJzwvdGQ+PC90cj4nOwogICAgICB9KTsKICAgICAgb3V0ICs9ICc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsKICAgICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBwYWdlSGVhZCgnQ2xhc3NpZmljYcOnw6NvIGdlcmFsIMK3ICcgKyBqLmxpZ2EsICdTdWEgcG9zacOnw6NvIG5hIGNsYXNzaWZpY2HDp8OjbycsCiAgICAgICAgJ1N1YSBQT1NJw4fDg08gw6kgYSBzdWEgcG9udHVhw6fDo28gdG90YWw6IGpvcm5hZGEgZGUgZXN0dWRvIChhdMOpIDIuMDAwOiBwcmVzZW7Dp2EsIHF1ZXN0w7VlcyBlIFNpbXVsYWRvKSArIGluZGljYcOnw7VlcyAoc2VtIHRldG8pLCB0dWRvIHNvbWFkby4gRW1wYXRlPyBNYWlvciBub3RhIG5vIFNpbXVsYWRvLCBkZXBvaXMgYWNlcnRvcyBuYXMgcXVlc3TDtWVzIGUgY2hlY2staW4gbWFpcyBjZWRvLicsCiAgICAgICAgKHIudG90YWxfcGFydGljaXBhbnRlc3x8MSkudG9Mb2NhbGVTdHJpbmcoJ3B0LUJSJykgKyAnIHBhcnRpY2lwYW50ZXMnKSArIG91dDsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCl7IHZhciBlbCA9ICQoJyNya0xvYWQnKTsgaWYgKGVsKSBlbC50ZXh0Q29udGVudCA9ICdTZW0gY29uZXjDo28gY29tIG8gcmFua2luZy4nOyB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0gcm90ZWFkb3IgZGUgYWJhcyAtLS0tLS0tLS0tICovCiAgdmFyIFRBQlMgPSB7IGluaWNpbzpyZW5kZXJJbmljaW8sIGF1bGFzOnJlbmRlckF1bGFzLCBxdWVzdG9lczpyZW5kZXJRdWVzdG9lcywgc2ltdWxhZG86cmVuZGVyU2ltdWxhZG8sIHJhbmtpbmc6cmVuZGVyUmFua2luZyB9OwogIHZhciBUQUJfQUxJQVMgPSB7IGNoZWNraW46J2F1bGFzJywgbWlzc29lczoncXVlc3RvZXMnIH07CiAgZnVuY3Rpb24gZ28odGFiKXsKICAgIGlmIChUQUJfQUxJQVNbdGFiXSkgdGFiID0gVEFCX0FMSUFTW3RhYl07CiAgICBpZiAoIVRBQlNbdGFiXSkgdGFiID0gJ2luaWNpbyc7CiAgICBpZiAocHJvdmFBdGl2YSkgeyBndWFyZGFQcm92YU1vZGFsKGZ1bmN0aW9uKCl7IGdvKHRhYik7IH0pOyByZXR1cm47IH0KICAgICQkKCcubmF2LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpeyBiLmNsYXNzTGlzdC50b2dnbGUoJ29uJywgYi5kYXRhc2V0LnRhYiA9PT0gdGFiKTsgfSk7CiAgICBUQUJTW3RhYl0oKTsKICAgIC8vIHRyYW5zacOnw6NvIGRlIHRlbGEgKHNlbnNhw6fDo28gZGUgYXBwOiBjYWRhIGFiYSBlbnRyYSBhbmltYWRhKQogICAgdmFyIG1FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluJyk7CiAgICBpZiAobUVsKSB7IG1FbC5jbGFzc0xpc3QucmVtb3ZlKCd2aWV3LWFuaW0nKTsgdm9pZCBtRWwub2Zmc2V0V2lkdGg7IG1FbC5jbGFzc0xpc3QuYWRkKCd2aWV3LWFuaW0nKTsgfQogICAgaWYgKGxvY2F0aW9uLmhhc2ggIT09ICcjJyt0YWIpIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCAnIycrdGFiKTsKICAgIHdpbmRvdy5zY3JvbGxUbygwLDApOwogIH0KICAkJCgnLm5hdi1pdGVtJykuZm9yRWFjaChmdW5jdGlvbihiKXsgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGdvKGIuZGF0YXNldC50YWIpOyB9KTsgfSk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCBmdW5jdGlvbigpeyBnbyhsb2NhdGlvbi5oYXNoLnNsaWNlKDEpKTsgfSk7CiAgZ28obG9jYXRpb24uaGFzaC5zbGljZSgxKSB8fCAnaW5pY2lvJyk7Cn0KCi8qIFBhaW5lbCBhZG1pbjogw6kgYnVuZGxlIFBSw5NQUklPIChhZG1pbi5qcy9hZG1pbi5odG1sL2FkbWluLmNzcykgY29tIGdhdGUKICAgc2VydmVyLXNpZGUuIE8gcHJvdMOzdGlwbyBpbml0QWRtaW4gKGNoYXZlIGZpeGEgbm8gY8OzZGlnbyArIGZsYWcgZW0KICAgbG9jYWxTdG9yYWdlLCBaRVJPIHZhbGlkYcOnw6NvIG5vIHNlcnZpZG9yKSBmb2kgUkVNT1ZJRE8gbmEgYXVkaXRvcmlhIGRlCiAgIDExLzA4OiBudW5jYSByb2RhdmEgZW0gcHJvZHXDp8OjbyAoYSBww6FnaW5hIC9wYWluZWwvIGNhcnJlZ2EgYWRtaW4uanMsIG7Do28KICAgZXN0ZSBhcHAuanMpIGUgZW1iYXJjYXZhIHVtYSBjaGF2ZSBmYWxzYSBubyBidW5kbGUgcMO6YmxpY28gZGUgdG9kbyBhbHVuby4gKi8KCi8qIC0tLS0tLS0tLS0tLS0tLS0gYm9vdCAtLS0tLS0tLS0tLS0tLS0tICovCihmdW5jdGlvbigpewogIHZhciBwYWdlID0gd2luZG93Ll9fQUZfUEFHRTsKICB0cnkgewogICAgaWYgKHBhZ2UgPT09ICdsYW5kaW5nJykgaW5pdExhbmRpbmcoKTsKICAgIGVsc2UgaWYgKHBhZ2UgPT09ICdhdXRoLWNhZGFzdHJvJykgcmVuZGVyQXV0aCgnY2FkYXN0cm8nKTsKICAgIGVsc2UgaWYgKHBhZ2UgPT09ICdhdXRoLWFjZXNzYXInKSByZW5kZXJBdXRoKCdhY2Vzc2FyJyk7CiAgICBlbHNlIGlmIChwYWdlID09PSAnYXJlYScpIGluaXRBcmVhKCk7CiAgfSBjYXRjaCAoZSkgewogICAgLy8gc2UgYSBtb250YWdlbSBxdWVicmFyIChleC46IHPDsyBlbSBjZXJ0byBTYWZhcmkpLCBOw4NPIGRlaXhhIHRlbGEgYnJhbmNhCiAgICAvLyBtdWRhOiBwdWJsaWNhIGEgY2F1c2EgbmEgdGVsYSAobyBhbHVubyBjb25zZWd1ZSBtYW5kYXIgcHJpbnQpIGUgc2luYWxpemEKICAgIC8vIHBybyB3YXRjaGRvZyBkbyBwdWJsaWNhZG9yLiBBdWRpdG9yaWEgMTEvMDguCiAgICB3aW5kb3cuX19hZkJvb3RFcnJvID0gKGUgJiYgKGUubWVzc2FnZSB8fCBlLm5hbWUpKSB8fCBTdHJpbmcoZSk7CiAgICB0cnkgewogICAgICB2YXIgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4nKSB8fCBkb2N1bWVudC5ib2R5OwogICAgICB2YXIgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBkLnN0eWxlLmNzc1RleHQgPSAncGFkZGluZzoyNHB4O21hcmdpbjoxNnB4O2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjRDk1NjRBO2ZvbnQ6MTRweC8xLjYgLWFwcGxlLXN5c3RlbSxzYW5zLXNlcmlmO2NvbG9yOiMwRTJBMkU7bWF4LXdpZHRoOjUyMHB4JzsKICAgICAgZC5pbm5lckhUTUwgPSAnPGIgc3R5bGU9ImNvbG9yOiNCMzI2MUUiPk7Do28gY29uc2VndWkgYWJyaXIgZXN0YSB0ZWxhIG5vIHNldSBuYXZlZ2Fkb3IuPC9iPjxicj4nICsKICAgICAgICAnQXR1YWxpemUgYSBww6FnaW5hLiBTZSBjb250aW51YXIsIHRpcmUgdW0gcHJpbnQgZGVzdGEgbWVuc2FnZW0gZSBlbnZpZSBhbyBzdXBvcnRlLjxicj4nICsKICAgICAgICAnPHNtYWxsIHN0eWxlPSJjb2xvcjojN0U5NTlCIj5EZXRhbGhlIHTDqWNuaWNvICgnICsgcGFnZSArICcpOiAnICsgZXNjKHdpbmRvdy5fX2FmQm9vdEVycm8pLnNsaWNlKDAsMTYwKSArICc8L3NtYWxsPic7CiAgICAgIHZhciBlc3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWYtZXNwZXJhJyk7IGlmIChlc3ApIGVzcC5yZW1vdmUoKTsKICAgICAgYm94LmFwcGVuZENoaWxkKGQpOwogICAgfSBjYXRjaCAoZTIpIHt9CiAgICBpZiAod2luZG93Ll9fYWZFbnZpYSkgeyB0cnkgeyB3aW5kb3cuX19hZkVudmlhKCdib290X2Vycm86JyArIFN0cmluZyh3aW5kb3cuX19hZkJvb3RFcnJvKS5zbGljZSgwLDgwKSk7IH0gY2F0Y2goZTMpe30gfQogIH0KfSkoKTsK';function inject(){var bin=atob(SRC),code;try{code=new TextDecoder('utf-8').decode(Uint8Array.from(bin,function(c){return c.charCodeAt(0);}));}catch(e){try{code=decodeURIComponent(escape(bin));}catch(e2){code=bin;}}var s=document.createElement('script');s.id='af-js';s.text=code;document.body.appendChild(s);}function boot(){if(document.body){try{inject();}catch(e){window.__afBootErro=(e&&(e.message||e.name))||String(e);var alvo=document.getElementById('main')||document.body;var esp=document.getElementById('af-espera');if(esp)esp.remove();if(alvo){var d=document.createElement('div');d.style.cssText='padding:24px;margin:16px;border-radius:12px;background:#fff;border:1px solid #D9564A;font:14px\/1.6 -apple-system,sans-serif;color:#0E2A2E;max-width:520px';d.textContent='N\u00e3o foi poss\u00edvel abrir no seu navegador. Atualize a p\u00e1gina; se continuar, tire um print e envie ao suporte. ('+String(window.__afBootErro).slice(0,120)+')';alvo.appendChild(d);}}}else{setTimeout(boot,20);}}boot();})();<\/script>\n\n<script>\n(function () {\n  \"use strict\";\n  if (window.__estrategiaUtmV3) return;\n  window.__estrategiaUtmV3 = 1;\n  const UTM_PARAMS = [\n    \"utm_source\",\n    \"utm_medium\",\n    \"utm_campaign\",\n    \"utm_content\",\n    \"utm_term\",\n  ];\n  const CLID_PARAMS = [\"ttclid\", \"fbclid\", \"gclid\"];\n  const OWNED_HOSTS = [\n    \"estrategia.com\",\n    \"estrategiaconcursos.com.br\",\n    \"estrategiamed.com.br\",\n    \"estrategiamilitares.com.br\",\n    \"estrategiavestibulares.com.br\",\n    \"estrategiacarreirajuridica.com.br\",\n    \"estrategiaoab.com.br\",\n    \"estrategiamedicina.com.br\",\n  ];\n  const STORAGE_KEY = \"estrategia_utm\";\n  const COOKIE_NAME = \"estrategia_utm\";\n  const COOKIE_HOURS = 48;   \/\/ janela de atribuicao do cookie\n  function rootCookieDomain() {\n    const host = window.location.hostname;\n    const match = OWNED_HOSTS.find(\n      (d) => host === d || host.endsWith(\".\" + d)\n    );\n    return match ? \".\" + match : null;\n  }\n  function writeStore(obj) {\n    const json = JSON.stringify({ ts: Date.now(), v: obj });\n    try {\n      window.localStorage.setItem(STORAGE_KEY, json);\n    } catch (e) {\n      \/* modo privado \/ storage bloqueado *\/\n    }\n    const domain = rootCookieDomain();\n    if (!domain) return;\n    const expires = new Date(\n      Date.now() + COOKIE_HOURS * 36e5\n    ).toUTCString();\n    document.cookie =\n      COOKIE_NAME +\n      \"=\" +\n      encodeURIComponent(json) +\n      \"; expires=\" + expires +\n      \"; path=\/; domain=\" + domain +\n      \"; SameSite=Lax; Secure\";\n  }\n  function unwrap(json) {\n    let payload;\n    try {\n      payload = JSON.parse(json);\n    } catch (e) {\n      return null;\n    }\n    if (!payload || typeof payload !== \"object\") return null;\n    if (!payload.ts || !payload.v) return null;\n    if (Date.now() - payload.ts > COOKIE_HOURS * 36e5) return null;\n    return payload.v;\n  }\n  function readStore() {\n    const cookie = document.cookie\n      .split(\"; \")\n      .find((row) => row.indexOf(COOKIE_NAME + \"=\") === 0);\n    if (cookie) {\n      const v = unwrap(\n        decodeURIComponent(cookie.slice(COOKIE_NAME.length + 1))\n      );\n      if (v) return v;\n    }\n    try {\n      const raw = window.localStorage.getItem(STORAGE_KEY);\n      if (raw) return unwrap(raw);\n    } catch (e) {\n      \/* storage bloqueado *\/\n    }\n    return null;\n  }\n  function collectFromUrl() {\n    const urlParams = new URLSearchParams(window.location.search);\n    const found = {};\n    UTM_PARAMS.concat(CLID_PARAMS).forEach((param) => {\n      const value = urlParams.get(param);\n      if (value) found[param] = value;\n    });\n    return Object.keys(found).length ? found : null;\n  }\n  function resolveAttribution() {\n    const fromUrl = collectFromUrl();\n    if (fromUrl) {\n      writeStore(fromUrl);\n      return fromUrl;\n    }\n    return readStore();\n  }\n  const ATTRIBUTION = resolveAttribution();\n  function isOwnedUrl(url) {\n    try {\n      const host = new URL(url, window.location.origin).hostname;\n      return OWNED_HOSTS.some((d) => host === d || host.endsWith(\".\" + d));\n    } catch (e) {\n      return false;\n    }\n  }\n  function appendParamsToHref(href, params) {\n    try {\n      const url = new URL(href, window.location.origin);\n      Object.keys(params).forEach((key) => {\n        if (!url.searchParams.has(key)) {\n          url.searchParams.set(key, params[key]);\n        }\n      });\n      return url.toString();\n    } catch (e) {\n      return href;\n    }\n  }\n  function eachMatch(root, selector, fn) {\n    if (root.nodeType === 1) {\n      if (root.matches) {\n        if (root.matches(selector)) fn(root);\n      }\n    }\n    root.querySelectorAll(selector).forEach(fn);\n  }\n  function decorateLink(el) {\n    const href = el.getAttribute(\"href\");\n    if (!href || href.charAt(0) === \"#\") return;\n    if (!isOwnedUrl(href)) return;\n    let target;\n    try {\n      target = new URL(href, window.location.origin);\n    } catch (e) {\n      return;\n    }\n    if (target.hostname === window.location.hostname) return;\n    el.setAttribute(\"href\", appendParamsToHref(href, ATTRIBUTION));\n  }\n  function propagateToLinks(root) {\n    root = root || document;\n    if (!ATTRIBUTION) return;\n    eachMatch(root, \"a[href]\", decorateLink);\n  }\n  function injectIntoForms(root) {\n    root = root || document;\n    if (!ATTRIBUTION) return;\n    eachMatch(root, \"form\", function (form) {\n      if (form.dataset.utmInjected === \"1\") return;\n      Object.keys(ATTRIBUTION).forEach((param) => {\n        let input = form.querySelector('input[name=\"' + param + '\"]');\n        if (!input) {\n          input = document.createElement(\"input\");\n          input.type = \"hidden\";\n          input.name = param;\n          form.appendChild(input);\n        }\n        input.value = ATTRIBUTION[param];\n      });\n      form.dataset.utmInjected = \"1\";\n    });\n  }\n  function observeDom() {\n    if (!document.body) return;\n    const observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        mutation.addedNodes.forEach((node) => {\n          if (node.nodeType !== 1) return;\n          propagateToLinks(node);\n          injectIntoForms(node);\n        });\n      });\n    });\n    observer.observe(document.body, { childList: true, subtree: true });\n  }\n  function init() {\n    propagateToLinks();\n    injectIntoForms();\n    observeDom();\n  }\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Carregando o acesso ao Ato Final\u2026Ative o JavaScript do navegador para acessar a plataforma.<\/p>\n","protected":false},"author":78,"featured_media":0,"parent":392559,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-392562","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/comments?post=392562"}],"version-history":[{"count":94,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392562\/revisions"}],"predecessor-version":[{"id":393570,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392562\/revisions\/393570"}],"up":[{"embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392559"}],"wp:attachment":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/media?parent=392562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/categories?post=392562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/tags?post=392562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}