{"id":620,"date":"2026-10-18T08:09:53","date_gmt":"2026-10-18T06:09:53","guid":{"rendered":"https:\/\/wispero.pl\/kalkulator-paneli\/"},"modified":"2026-10-18T09:35:15","modified_gmt":"2026-10-18T07:35:15","slug":"kalkulator-paneli","status":"publish","type":"page","link":"https:\/\/wispero.pl\/en\/kalkulator-paneli\/","title":{"rendered":"Wall panel designer"},"content":{"rendered":"\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Syne:wght@700;800&#038;family=Manrope:wght@400;500;600;700&#038;display=swap\">\n<style>\n\/* Layout: wall drawing is the work surface (sticky on desktop, top on phones); tool tabs beside\/below; order bar always in reach. Tokens follow wispero.pl \"Gotowe wzory\". *\/\n.wk,.wk-bar{\n--navy:#0A2C61; --ink:#0F1E36; --muted:#55627A; --wood:#B8733A;\n--paper:#F6F2EC; --card:#FFFFFF; --line:rgba(10,44,97,.14);\n--stage:#E4DED3; --warn:#B4412F; --ok:#2E7D4F;\n--display:\"Syne\",\"Arial Black\",sans-serif; --body:\"Manrope\",system-ui,sans-serif;\n}\n.wk{max-width:1200px;margin:0 auto 90px;color:var(--ink);font-family:var(--body);font-size:15px;line-height:1.5}\n.wk *{box-sizing:border-box}\n.wk [hidden],.wk-bar[hidden]{display:none!important}\n.wk button{font-family:var(--body)}\n.wk-head{max-width:760px;margin:0 0 18px}\n.wk-eyebrow{font:700 12px\/1 var(--body);letter-spacing:.14em;text-transform:uppercase;color:var(--wood);margin:0 0 10px}\n.wk h1{font:800 clamp(26px,3.6vw,40px)\/1.08 var(--display);color:var(--navy);margin:0 0 10px;text-wrap:balance}\n.wk-head p{font-size:16px;color:var(--muted);margin:0}\n.wk-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:20px;align-items:start}\n@media(max-width:900px){.wk-grid{grid-template-columns:minmax(0,1fr)}}\n.wk-stagewrap{position:sticky;top:12px;min-width:0}\n@media(max-width:900px){.wk-stagewrap{position:static}}\n.wk-stage{background:var(--stage);border-radius:18px;padding:10px;position:relative}\n.wk-mode{display:flex;gap:4px;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:4px;margin:0 0 10px;width:max-content;max-width:100%}\n.wk-mb{appearance:none;border:0;background:none;border-radius:999px;padding:8px 14px;font:700 13px var(--body);color:var(--muted);cursor:pointer}\n.wk-mb[aria-pressed=\"true\"]{background:var(--navy);color:var(--card)}\n.wk-mb:focus-visible{outline:2px solid var(--wood);outline-offset:2px}\n#wk-cv{display:block;max-width:100%;max-height:70vh;width:auto;height:auto;margin:0 auto;touch-action:none;border-radius:10px}\n.wk-empty{display:grid;gap:12px;justify-items:start;padding:28px 18px;min-height:260px;align-content:center}\n.wk-empty b{font:800 22px\/1.15 var(--display);color:var(--navy)}\n.wk-empty span{color:var(--muted);max-width:52ch}\n.wk-empty label{display:inline-block}\n.wk-vh{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;pointer-events:none}\n#wk-photo{position:relative}\n.wk-filebtn{position:relative;overflow:hidden;display:inline-block}\n.wk-fileov{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;font-size:200px;z-index:2}\n.wk-phint{font-size:13px;color:var(--muted);margin:8px 4px 0}\n.wk-b[aria-pressed=\"true\"]{background:var(--navy);color:var(--card);border-color:var(--navy)}\n.wk-stage svg{display:block;width:100%;height:auto;max-height:68vh;touch-action:none;user-select:none;-webkit-user-select:none}\n.wk-cmp{display:flex;align-items:center;gap:10px;margin:10px 4px 0;font-size:13px;color:var(--muted)}\n.wk-cmp input{flex:1}\n.wk-tools{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 0;min-height:38px;align-items:center}\n.wk-tools .wk-note{font-size:13px;color:var(--muted)}\n.wk-b{appearance:none;border:1px solid var(--line);background:var(--card);color:var(--navy);font:600 13px var(--body);padding:7px 12px;border-radius:999px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}\n.wk-b:hover,.wk-b:focus-visible{border-color:var(--wood);outline:none}\n.wk-b.wk-del{color:var(--warn)}\n.wk-b[disabled]{opacity:.45;cursor:default}\n.wk-panel{background:var(--card);border:1px solid var(--line);border-radius:18px;min-width:0}\n.wk-tabs{display:flex;overflow-x:auto;border-bottom:1px solid var(--line);scrollbar-width:none}\n.wk-tabs::-webkit-scrollbar{display:none}\n.wk-tab{appearance:none;border:0;background:none;padding:14px 14px 12px;font:700 13px var(--body);color:var(--muted);cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent}\n.wk-tab[aria-selected=\"true\"]{color:var(--navy);border-bottom-color:var(--wood)}\n.wk-tab:focus-visible{outline:2px solid var(--wood);outline-offset:-2px}\n.wk-pane{padding:18px 20px 22px;display:grid;gap:18px}\n.wk-sec{display:grid;gap:10px}\n.wk-lbl{font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:0}\n.wk-hint{font-size:13px;color:var(--muted);margin:0}\n.wk-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}\n.wk-row3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}\n.wk-f{display:grid;gap:4px;font-size:13px;color:var(--muted)}\n.wk-in{position:relative;display:block}\n.wk-in input,.wk-sel{width:100%;font:700 16px var(--body);color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:9px 34px 9px 11px;font-variant-numeric:tabular-nums}\n.wk-sel{padding-right:11px;font-weight:600;font-size:14px}\n.wk-in span{position:absolute;right:11px;top:50%;transform:translateY(-50%);font-size:12px;color:var(--muted);pointer-events:none}\n.wk-in input:focus-visible,.wk-sel:focus-visible{outline:2px solid var(--wood);outline-offset:1px}\n.wk-chips{display:flex;flex-wrap:wrap;gap:6px}\n.wk-pats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}\n@media(max-width:420px){.wk-pats{grid-template-columns:repeat(2,minmax(0,1fr))}}\n.wk-pat{appearance:none;border:1px solid var(--line);background:var(--paper);border-radius:12px;padding:8px;cursor:pointer;display:grid;gap:4px;text-align:left;color:var(--ink);font:700 12.5px\/1.2 var(--body)}\n.wk-pat svg{width:100%;height:auto;aspect-ratio:4\/3;display:block;border-radius:6px}\n.wk-pat small{font-weight:500;color:var(--muted);font-size:11.5px}\n.wk-pat:hover,.wk-pat:focus-visible{border-color:var(--wood);outline:none}\n.wk-lay{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}\n.wk-opt{appearance:none;border:1px solid var(--line);background:var(--paper);border-radius:10px;padding:8px 6px;cursor:pointer;display:grid;gap:4px;color:var(--ink);font:600 12px\/1.2 var(--body);text-align:center}\n.wk-opt svg{width:100%;height:26px;display:block}\n.wk-opt[aria-pressed=\"true\"]{border-color:var(--navy);box-shadow:inset 0 0 0 1px var(--navy);background:var(--card)}\n.wk-sw{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:6px}\n.wk-swb{appearance:none;aspect-ratio:1;border-radius:50%;border:1px solid rgba(0,0,0,.18);cursor:pointer;padding:0}\n.wk-swb[aria-pressed=\"true\"]{outline:2px solid var(--wood);outline-offset:2px}\n.wk-swb:focus-visible{outline:2px solid var(--navy);outline-offset:2px}\n.wk-colrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:var(--muted)}\n.wk-colrow input[type=color]{width:44px;height:32px;border:1px solid var(--line);border-radius:8px;background:none;padding:2px;cursor:pointer}\n.wk-sel-info{border:1px dashed var(--wood);border-radius:12px;padding:10px 12px;font-size:13px}\n.wk-tbl-wrap{overflow-x:auto;max-height:340px;border:1px solid var(--line);border-radius:12px}\n.wk-tbl{border-collapse:collapse;width:100%;font-size:13px;font-variant-numeric:tabular-nums}\n.wk-tbl th,.wk-tbl td{padding:7px 10px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap}\n.wk-tbl th:nth-child(2),.wk-tbl td:nth-child(2){text-align:left}\n.wk-tbl th{position:sticky;top:0;background:var(--card);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}\n.wk-stat{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}\n.wk-stat div{background:var(--paper);border-radius:12px;padding:10px 12px}\n.wk-stat dt{font-size:12px;color:var(--muted)}\n.wk-stat dd{margin:2px 0 0;font-weight:700;font-size:16px;font-variant-numeric:tabular-nums}\n@media(max-width:420px){.wk-stat{grid-template-columns:minmax(0,1fr)}}\n.wk-items{list-style:none;margin:0;padding:0;display:grid;gap:8px}\n.wk-items li{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:12px}\n.wk-items svg{width:30px;height:30px}\n.wk-items b{display:block}.wk-items small{color:var(--muted)}\n.wk-q{font-variant-numeric:tabular-nums;font-weight:700;text-align:right;white-space:nowrap}\n.wk-up{padding:10px 12px;border-radius:12px;border:1px dashed var(--wood);font-size:14px}\n.wk-warn{padding:10px 12px;border-radius:12px;background:color-mix(in srgb,var(--warn) 12%,transparent);color:var(--ink);font-size:13.5px}\n.wk-price{font-variant-numeric:tabular-nums}\n.wk-price s{color:var(--muted);margin-right:6px}\n.wk-price b{font:800 28px var(--display);color:var(--navy)}\n.wk-price small{display:block;color:var(--muted);font-size:13px}\n.wk-btn{appearance:none;border:0;border-radius:999px;background:var(--navy);color:var(--card);font:700 15px var(--body);padding:13px 24px;cursor:pointer}\n.wk-btn:hover,.wk-btn:focus-visible{background:var(--wood);outline:none}\n.wk-btn[disabled]{opacity:.55;cursor:default}\n.wk-btn2{appearance:none;border:1px solid var(--navy);border-radius:999px;background:transparent;color:var(--navy);font:700 14px var(--body);padding:11px 20px;cursor:pointer}\n.wk-btn2:hover,.wk-btn2:focus-visible{border-color:var(--wood);color:var(--wood);outline:none}\n.wk-sample{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;background:var(--paper);border-radius:14px;padding:14px}\n.wk-sample b{display:block}.wk-sample span{font-size:13px;color:var(--muted)}\n.wk-actions{display:flex;flex-wrap:wrap;gap:8px}\n.wk-msg{font-size:13px;color:var(--muted);margin:0}\n.wk-msg.ok{color:var(--ok)}\n.wk-copy{font-size:13px;background:var(--paper);border-radius:10px;padding:8px 10px;word-break:break-all;user-select:all}\n.wk-bar{font-family:var(--body);position:fixed;left:0;right:0;bottom:0;z-index:20;background:var(--card);border-top:1px solid var(--line);padding:10px max(16px,env(safe-area-inset-right,0px)) calc(10px + env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}\n.wk-bar .in{max-width:1200px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px}\n.wk-bar .t{font-variant-numeric:tabular-nums;font-size:14px;color:var(--muted)}\n.wk-bar .t b{font:800 20px var(--display);color:var(--navy);margin-right:8px}\n.wk-print{display:none}\n@media print{\nbody *{visibility:hidden}\n.wk-print,.wk-print *{visibility:visible}\n.wk-print{display:block;position:absolute;left:0;top:0;width:100%;background:#fff;color:#000}\n.wk-bar{display:none!important}\n.wk-print svg{width:100%;height:auto;max-height:55vh}\n.wk-print table{border-collapse:collapse;width:100%;font:12px\/1.4 Arial,sans-serif}\n.wk-print th,.wk-print td{border:1px solid #999;padding:4px 6px;text-align:right}\n.wk-print h2{font:700 18px Arial,sans-serif;margin:0 0 8px}\n}\n@media (prefers-reduced-motion:no-preference){.wk-tab,.wk-b,.wk-btn{transition:color .15s,background .15s,border-color .15s}}\n<\/style>\n<div class=\"wk\" id=\"wk\" data-no-translation>\n<header class=\"wk-head\">\n<p class=\"wk-eyebrow\">Panele \u015bcienne 3D \u00b7 projektant<\/p>\n<p>Wpisz wymiary \u015bciany, wybierz gotowy wz\u00f3r albo u\u0142\u00f3\u017c w\u0142asny. Przesuwaj panele palcem, obracaj dwoma palcami, zmieniaj kolory. Na ko\u0144cu dostaniesz plan monta\u017cu i list\u0119 zakup\u00f3w.<\/p>\n<\/header>\n<div class=\"wk-grid\">\n<div class=\"wk-stagewrap\">\n<div class=\"wk-mode\" role=\"group\" aria-label=\"Widok\"><button type=\"button\" class=\"wk-mb\" data-m=\"draw\" aria-pressed=\"true\">Rysunek<\/button><button type=\"button\" class=\"wk-mb\" data-m=\"photo\" aria-pressed=\"false\">Na zdj\u0119ciu mojej \u015bciany<\/button><\/div>\n<div class=\"wk-stage\" id=\"wk-stage\"><div id=\"wk-svg\"><\/div><div id=\"wk-photo\" hidden><canvas id=\"wk-cv\" hidden><\/canvas><div class=\"wk-empty\" id=\"wk-empty\"><b>Zobacz panele na swojej \u015bcianie<\/b><span>Zr\u00f3b zdj\u0119cie \u015bciany mo\u017cliwie na wprost, przy dobrym \u015bwietle, tak \u017ceby by\u0142o wida\u0107 jej rogi. Zdj\u0119cie zostaje na Twoim urz\u0105dzeniu, nigdzie go nie wysy\u0142amy.<\/span><div class=\"wk-actions\"><span class=\"wk-btn wk-filebtn\">Zr\u00f3b zdj\u0119cie<input type=\"file\" id=\"wk-cam\" class=\"wk-fileov\" accept=\"image\/*\" capture=\"environment\" aria-label=\"Zr\u00f3b zdj\u0119cie\"><\/span><span class=\"wk-btn2 wk-filebtn\">Wybierz z galerii<input type=\"file\" id=\"wk-file\" class=\"wk-fileov\" accept=\"image\/*\" aria-label=\"Wybierz z galerii\"><\/span><\/div><\/div><\/div><\/div>\n<p class=\"wk-phint\" id=\"wk-phint\" hidden><\/p>\n<label class=\"wk-cmp\" id=\"wk-cmpbox\" hidden for=\"wk-cmpv\"><span>Przed<\/span><input id=\"wk-cmpv\" type=\"range\" min=\"0\" max=\"100\" value=\"50\"><span>Po<\/span><\/label>\n<div class=\"wk-tools\" id=\"wk-tools\"><\/div>\n<\/div>\n<div class=\"wk-panel\">\n<div class=\"wk-tabs\" role=\"tablist\" id=\"wk-tabs\">\n<button class=\"wk-tab\" role=\"tab\" data-t=\"sciana\" id=\"tab-sciana\">\u015aciana<\/button>\n<button class=\"wk-tab\" role=\"tab\" data-t=\"wzor\" id=\"tab-wzor\">Wz\u00f3r<\/button>\n<button class=\"wk-tab\" role=\"tab\" data-t=\"kolory\" id=\"tab-kolory\">Kolory<\/button>\n<button class=\"wk-tab\" role=\"tab\" data-t=\"plan\" id=\"tab-plan\">Plan i farba<\/button>\n<button class=\"wk-tab\" role=\"tab\" data-t=\"zamow\" id=\"tab-zamow\">Zam\u00f3wienie<\/button>\n<\/div>\n<!-- \u015aCIANA -->\n<div class=\"wk-pane\" role=\"tabpanel\" data-p=\"sciana\">\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Wymiary \u015bciany<\/p>\n<div class=\"wk-row\">\n<label class=\"wk-f\" for=\"wk-W\">Szeroko\u015b\u0107<span class=\"wk-in\"><input id=\"wk-W\" type=\"number\" inputmode=\"numeric\" min=\"50\" max=\"1200\" step=\"1\"><span>cm<\/span><\/span><\/label>\n<label class=\"wk-f\" for=\"wk-H\">Wysoko\u015b\u0107<span class=\"wk-in\"><input id=\"wk-H\" type=\"number\" inputmode=\"numeric\" min=\"50\" max=\"500\" step=\"1\"><span>cm<\/span><\/span><\/label>\n<\/div>\n<p class=\"wk-hint\">Zmierz ca\u0142\u0105 \u015bcian\u0119 od pod\u0142ogi do sufitu. Wzory ustawi\u0105 si\u0119 na \u015brodku.<\/p>\n<\/div>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Przeszkody na \u015bcianie<\/p>\n<p class=\"wk-hint\">Dodaj gniazdka, w\u0142\u0105czniki, okno albo telewizor. Gdy ta zak\u0142adka jest otwarta, przeszkody przesuwasz palcem na rysunku. Generator wzoru pominie panele, kt\u00f3re na nie nachodz\u0105.<\/p>\n<div class=\"wk-chips\" id=\"wk-obsadd\"><\/div>\n<div id=\"wk-obsedit\"><\/div>\n<\/div>\n<\/div>\n<!-- WZ\u00d3R -->\n<div class=\"wk-pane\" role=\"tabpanel\" data-p=\"wzor\" hidden>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Gotowe wzory Wispero<\/p>\n<p class=\"wk-hint\">Wczytaj wz\u00f3r i przer\u00f3b go po swojemu: przesu\u0144, obr\u00f3\u0107, dodaj albo usu\u0144 panele.<\/p>\n<div class=\"wk-pats\" id=\"wk-pats\"><\/div>\n<\/div>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">W\u0142asny uk\u0142ad z siatki<\/p>\n<div class=\"wk-lay\" id=\"wk-lay\"><\/div>\n<div class=\"wk-row\">\n<label class=\"wk-f\" for=\"wk-aw\">Szeroko\u015b\u0107 uk\u0142adu<span class=\"wk-in\"><input id=\"wk-aw\" type=\"number\" inputmode=\"numeric\" min=\"10\" max=\"1200\"><span>cm<\/span><\/span><\/label>\n<label class=\"wk-f\" for=\"wk-ah\">Wysoko\u015b\u0107 uk\u0142adu<span class=\"wk-in\"><input id=\"wk-ah\" type=\"number\" inputmode=\"numeric\" min=\"10\" max=\"500\"><span>cm<\/span><\/span><\/label>\n<\/div>\n<div class=\"wk-row3\">\n<label class=\"wk-f\" for=\"wk-gx\">Odst\u0119p poziomo<span class=\"wk-in\"><input id=\"wk-gx\" type=\"number\" inputmode=\"decimal\" min=\"0\" max=\"80\" step=\"0.5\"><span>cm<\/span><\/span><\/label>\n<label class=\"wk-f\" for=\"wk-gy\">Odst\u0119p pionowo<span class=\"wk-in\"><input id=\"wk-gy\" type=\"number\" inputmode=\"decimal\" min=\"0\" max=\"80\" step=\"0.5\"><span>cm<\/span><\/span><\/label>\n<label class=\"wk-f\" for=\"wk-bot\">Od pod\u0142ogi<span class=\"wk-in\"><input id=\"wk-bot\" type=\"number\" inputmode=\"numeric\" min=\"0\" max=\"400\"><span>cm<\/span><\/span><\/label>\n<\/div>\n<div class=\"wk-actions\"><button class=\"wk-btn2\" type=\"button\" id=\"wk-gen\">U\u0142\u00f3\u017c panele<\/button><\/div>\n<p class=\"wk-msg\" id=\"wk-genmsg\"><\/p>\n<\/div>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Dodaj pojedynczy panel<\/p>\n<div class=\"wk-chips\">\n<button class=\"wk-b\" type=\"button\" data-add=\"L\">+ Listwa 50 \u00d7 3<\/button>\n<button class=\"wk-b\" type=\"button\" data-add=\"O\">+ Owal 50 \u00d7 15<\/button>\n<button class=\"wk-b\" type=\"button\" data-add=\"C\">+ P\u00f3\u0142kole \u00d8 30<\/button>\n<\/div>\n<p class=\"wk-hint\">Nowy panel pojawi si\u0119 na \u015brodku \u015bciany. Dotknij panelu, aby go zaznaczy\u0107, przeci\u0105gnij, aby przesun\u0105\u0107, obr\u00f3\u0107 dwoma palcami albo przyciskami pod rysunkiem.<\/p>\n<\/div>\n<\/div>\n<!-- KOLORY -->\n<div class=\"wk-pane\" role=\"tabpanel\" data-p=\"kolory\" hidden>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Kolor \u015bciany<\/p>\n<div class=\"wk-sw\" id=\"wk-swwall\"><\/div>\n<div class=\"wk-colrow\"><input type=\"color\" id=\"wk-wallc\" aria-label=\"W\u0142asny kolor \u015bciany\"><span>W\u0142asny kolor (np. z wzornika farby)<\/span><\/div>\n<\/div>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Kolor paneli<\/p>\n<div class=\"wk-chips\">\n<button class=\"wk-b\" type=\"button\" id=\"wk-same\">Jak \u015bciana<\/button>\n<button class=\"wk-b\" type=\"button\" id=\"wk-raw\">Surowe, przed malowaniem<\/button>\n<\/div>\n<div class=\"wk-sw\" id=\"wk-swpan\"><\/div>\n<div class=\"wk-colrow\"><input type=\"color\" id=\"wk-panc\" aria-label=\"W\u0142asny kolor paneli\"><span>W\u0142asny kolor wszystkich paneli<\/span><\/div>\n<p class=\"wk-hint\">Panele w kolorze \u015bciany daj\u0105 eleganck\u0105 faktur\u0119. Inny kolor to mocny akcent.<\/p>\n<\/div>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Kolor jednego panelu<\/p>\n<div id=\"wk-onecol\"><\/div>\n<\/div>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Przed i po<\/p>\n<label class=\"wk-colrow\" for=\"wk-cmpon\"><input type=\"checkbox\" id=\"wk-cmpon\"> Poka\u017c suwak por\u00f3wnania pod rysunkiem<\/label>\n<\/div>\n<\/div>\n<!-- PLAN I FARBA -->\n<div class=\"wk-pane\" role=\"tabpanel\" data-p=\"plan\" hidden>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Plan monta\u017cu<\/p>\n<p class=\"wk-hint\">Ka\u017cdy panel ma numer na rysunku. Zaznacz o\u0142\u00f3wkiem \u015brodek panelu wed\u0142ug tabeli i przy\u0142\u00f3\u017c panel \u015brodkiem. U\u017cyj poziomicy albo lasera.<\/p>\n<label class=\"wk-colrow\" for=\"wk-nums\"><input type=\"checkbox\" id=\"wk-nums\"> Poka\u017c numery na rysunku<\/label>\n<div class=\"wk-tbl-wrap\"><table class=\"wk-tbl\"><thead><tr><th>Nr<\/th><th>Panel<\/th><th>Od lewej<\/th><th>Od pod\u0142ogi<\/th><th>Obr\u00f3t<\/th><\/tr><\/thead><tbody id=\"wk-tbody\"><\/tbody><\/table><\/div>\n<p class=\"wk-hint\">Wymiary do \u015brodka panelu, w centymetrach. Obr\u00f3t zgodnie z ruchem wskaz\u00f3wek zegara.<\/p>\n<div class=\"wk-actions\"><button class=\"wk-btn2\" type=\"button\" id=\"wk-print\">Drukuj plan monta\u017cu<\/button><\/div>\n<p class=\"wk-msg\" id=\"wk-printmsg\"><\/p>\n<\/div>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Ile farby kupi\u0107<\/p>\n<div class=\"wk-row\">\n<label class=\"wk-f\" for=\"wk-yield\">Wydajno\u015b\u0107 farby<span class=\"wk-in\"><input id=\"wk-yield\" type=\"number\" inputmode=\"decimal\" min=\"4\" max=\"20\" step=\"0.5\" value=\"10\"><span>m\u00b2\/l<\/span><\/span><\/label>\n<label class=\"wk-f\" for=\"wk-coats\">Liczba warstw<span class=\"wk-in\"><input id=\"wk-coats\" type=\"number\" inputmode=\"numeric\" min=\"1\" max=\"4\" step=\"1\" value=\"2\"><span>\u00d7<\/span><\/span><\/label>\n<\/div>\n<dl class=\"wk-stat\" id=\"wk-paint\"><\/dl>\n<p class=\"wk-hint\">Wydajno\u015b\u0107 znajdziesz na puszce. Liczymy ca\u0142\u0105 \u015bcian\u0119 bez okien i drzwi oraz panele razem z kraw\u0119dziami.<\/p>\n<\/div>\n<\/div>\n<!-- ZAM\u00d3WIENIE -->\n<div class=\"wk-pane\" role=\"tabpanel\" data-p=\"zamow\" hidden>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Lista zakup\u00f3w<\/p>\n<ul class=\"wk-items\" id=\"wk-items\"><\/ul>\n<div id=\"wk-up\"><\/div>\n<div id=\"wk-coll\"><\/div>\n<div class=\"wk-price\" id=\"wk-price\"><\/div>\n<div class=\"wk-actions\"><button class=\"wk-btn\" type=\"button\" id=\"wk-cart\">Dodaj wszystko do koszyka<\/button><\/div>\n<p class=\"wk-msg\" id=\"wk-cartmsg\" hidden><\/p>\n<\/div>\n<div class=\"wk-sample\">\n<div><b>Nie wiesz, kt\u00f3ry kszta\u0142t wybra\u0107?<\/b><span>Zestaw pr\u00f3bny paneli za 29 z\u0142 z dostaw\u0105 do Paczkomatu. Pomaluj i przy\u0142\u00f3\u017c do \u015bciany.<\/span><\/div>\n<button class=\"wk-btn2\" type=\"button\" id=\"wk-sampleb\">Dodaj zestaw<\/button>\n<\/div>\n<div class=\"wk-sec\">\n<p class=\"wk-lbl\">Zapisz i udost\u0119pnij projekt<\/p>\n<div class=\"wk-actions\">\n<button class=\"wk-b\" type=\"button\" id=\"wk-share\">Udost\u0119pnij link<\/button>\n<button class=\"wk-b\" type=\"button\" id=\"wk-png\">Zapisz obraz<\/button>\n<button class=\"wk-b\" type=\"button\" id=\"wk-mail\">Wy\u015blij projekt do Wispero<\/button>\n<\/div>\n<p class=\"wk-msg\" id=\"wk-sharemsg\" hidden><\/p>\n<div class=\"wk-copy\" id=\"wk-linkbox\" hidden><\/div>\n<p class=\"wk-hint\">Projekt zapisuje si\u0119 te\u017c sam na tym urz\u0105dzeniu. Pytania o w\u0142asny wz\u00f3r, napis albo logo: sklep@wispero.pl<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"wk-print\" id=\"wk-printarea\"><\/div>\n<\/div>\n<div class=\"wk-bar\" id=\"wk-bar\" data-no-translation><div class=\"in\"><span class=\"t\" id=\"wk-bart\"><\/span><button class=\"wk-btn\" type=\"button\" id=\"wk-barbtn\">Zam\u00f3wienie<\/button><\/div><\/div>\n<script>(function(){var s=decodeURIComponent(escape(atob(\"CihmdW5jdGlvbigpewondXNlIHN0cmljdCc7CnZhciAkPWZ1bmN0aW9uKGlkKXtyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpfTsKdmFyIFA9ewpMOntpZDo0OTQsbmFtZTonTGlzdHdhIDUwIMOXIDMgY20nLHNob3J0OidMaXN0d2EnLHByaWNlOjYuOTAsdzozLGg6NTAsYXJlYToyMDN9LApPOntpZDo0OTIsbmFtZTonT3dhbCA1MCDDlyAxNSBjbScsc2hvcnQ6J093YWwnLHByaWNlOjE4LjkwLHc6MTUsaDo1MCxhcmVhOjc2MH0sCkM6e2lkOjQ5MyxuYW1lOidQw7PFgmtvbGUgw5ggMzAgY20nLHNob3J0OidQw7PFgmtvbGUnLHByaWNlOjE0LjkwLHc6MzAsaDoxNSxhcmVhOjM5Mn0KfTsKdmFyIFNBTVBMRV9JRD01NTAsIFJBV19DT0w9JyNDOUFFODgnOwp2YXIgV0FMTFM9W1snQmllbCcsJyNGNEYyRUMnXSxbJ1rFgmFtYW5hIGJpZWwnLCcjRUNFNkRBJ10sWydLb8WbxIcgc8WCb25pb3dhJywnI0U2RENDOCddLFsnUGlhc2tvd3kgYmXFvCcsJyNENkMzQTInXSxbJ0dyZWlnZScsJyNCQ0IyQTInXSxbJ1N6YcWCd2lhJywnI0E3QjI5OCddLFsnT2xpd2thJywnIzdEODM1RiddLFsnQnV0ZWxrb3dhIHppZWxlxYQnLCcjMkY0QTNBJ10sWydCxYLEmWtpdCBtZ8WCeScsJyNBOEJCQzUnXSxbJ0dyYW5hdCcsJyMyNTMzNDknXSxbJ0dyYWZpdCcsJyM0QTRDNTEnXSxbJ1RlcmFrb3RhJywnI0I1Njk0RCddLFsnUHVkcm93eSByw7PFvCcsJyNEOEIzQTknXSxbJ011c3p0YXJkYScsJyNDNzlBM0MnXSxbJ0N6ZWtvbGFkYScsJyM1QjQwMzMnXSxbJ0N6ZXLFhCcsJyMyMzIzMjMnXV07CnZhciBPQlM9ewpnbjp7bjonR25pYXpka28nLHc6OCxoOjgseTozMH0sCndsOntuOidXxYLEhWN6bmlrJyx3OjgsaDo4LHk6MTA1fSwKdHY6e246J1RlbGV3aXpvcicsdzoxMjMsaDo3MSx5Ojk1fSwKb2s6e246J09rbm8nLHc6MTIwLGg6MTQwLHk6OTAsb3BlbjoxfSwKZHI6e246J0RyendpJyx3OjkwLGg6MjA1LHk6MCxvcGVuOjF9LAppbjp7bjonSW5uYScsdzo0MCxoOjQwLHk6MTAwfQp9OwovKiBHb3Rvd2Ugd3pvcnkgeiB3aXNwZXJvLnBsL2dvdG93ZS13em9yeSAod3Nww7PFgnJ6xJlkbmUgamFrIG5hIHN0cm9uaWUpICovCnZhciBSQVc9Wwp7aWQ6J2xhbWVsZScsbjonTGFtZWxlJyx3aDonxZpjaWFuYSBUViwgcHJ6ZWRwb2vDs2onLFc6MTM1LGZ1bGw6MSxnOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz0wO2M8MTI7YysrKWZvcih2YXIgcj0wO3I8NDtyKyspYS5wdXNoKFsncicsYyoxMiwxMi41K3IqNjAsMyw1MF0pfX0sCntpZDonZHVldCcsbjonRHVldCcsd2g6J1duxJlrYSwgcHJ6eSBiaXVya3UnLFc6MTAyLGZ1bGw6MSxnOmZ1bmN0aW9uKGEpe1tbMCwnciddLFsxNSwncyddLFs0MiwnciddLFs1NywnciddLFs3MiwncyddLFs5OSwnciddXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2Zvcih2YXIgcj0wO3I8NDtyKyspYS5wdXNoKGNbMV09PT0ncic\/WydyJyxjWzBdLDEyLjUrcio2MCwzLDUwXTpbJ3MnLGNbMF0sMTIuNStyKjYwLDE1LDUwXSl9KX19LAp7aWQ6J3Nsb25jZScsbjonV3NjaMOzZCBzxYJvxYRjYScsd2g6J05hZCDFgsOzxbxraWVtLCBuYWQga2FuYXDEhScsVzoxNDQsZzpmdW5jdGlvbihhKXtbWzExOSwxMTAsOTBdLFsxMTgsMTE5LjgsNzhdLFsxMTQuOSwxMjkuMSw2Nl0sWzExMCwxMzcuNiw1NF0sWzEwMy40LDE0NC45LDQyXSxbOTUuNSwxNTAuNywzMF0sWzg2LjUsMTU0LjcsMThdLFs3Ni45LDE1Ni43LDZdLFs2Ny4xLDE1Ni43LC02XSxbNTcuNSwxNTQuNywtMThdLFs0OC41LDE1MC43LC0zMF0sWzQwLjYsMTQ0LjksLTQyXSxbMzQsMTM3LjYsLTU0XSxbMjkuMSwxMjkuMSwtNjZdLFsyNiwxMTkuOCwtNzhdLFsyNSwxMTAsLTkwXV0uZm9yRWFjaChmdW5jdGlvbihzKXthLnB1c2goWydSJyxzWzBdLHNbMV0sc1syXV0pfSk7YS5wdXNoKFsnZCcsNTcsMTEwLDBdKX19LAp7aWQ6J2x1c2tpJyxuOifFgXVza2knLHdoOidOYWQgxYLDs8W8a2llbSwgbmFkIGthbmFwxIUnLFc6MTUyLjUsZzpmdW5jdGlvbihhKXtmb3IodmFyIHI9MDtyPDY7cisrKWZvcih2YXIgYz0wO2M8NDtjKyspYS5wdXNoKFsnZCcsYyozNSsociUyPzE3LjU6MCksODUrcioyMCwwXSl9fSwKe2lkOidqYXBhbmRpJyxuOidKYXBhbmRpJyx3aDonWmEgVFYsIHphIGthbmFwxIUnLFc6MjA2LGc6ZnVuY3Rpb24oYSl7Zm9yKHZhciByPTA7cjwxMjtyKyspZm9yKHZhciBjPTA7Yzw0O2MrKylhLnB1c2goWydyJyxjKjUyLDEwMCtyKjgsNTAsM10pfX0sCntpZDoncGxlY2lvbmthJyxuOidQbGVjaW9ua2EnLHdoOidTeXBpYWxuaWEsIHNhbG9uJyxXOjEwNSxmdWxsOjEsZzpmdW5jdGlvbihhKXtmb3IodmFyIHI9MDtyPDQ7cisrKWZvcih2YXIgYz0wO2M8MjtjKyspe3ZhciB4MD1jKjU1LHkwPTIwK3IqNTUsdj0ocitjKSUyPT09MDtmb3IodmFyIGs9MDtrPDM7aysrKWEucHVzaCh2P1sncycseDArayoxNy41LHkwLDE1LDUwXTpbJ3MnLHgwLHkwK2sqMTcuNSw1MCwxNV0pfX19LAp7aWQ6J21vemFpa2EnLG46J01vemFpa2Egb3dhbGknLHdoOidaYSDFgsOzxbxraWVtIGx1YiBrYW5hcMSFJyxXOjE5MCxmdWxsOjEsZzpmdW5jdGlvbihhKXtmb3IodmFyIGM9MDtjPDg7YysrKWZvcih2YXIgcj0wO3I8MztyKyspYS5wdXNoKFsncycsYyoyNSwoYyUyPzU3LjU6MjcuNSkrcio2MCwxNSw1MF0pfX0sCntpZDoncm96ZXRhJyxuOidSb3pldGEnLHdoOidOYWQga29tb2TEhSwgdyBob2x1JyxXOjgwLGc6ZnVuY3Rpb24oYSl7Zm9yKHZhciBrPTA7azw4O2srKylhLnB1c2goWydDJyw0MCwxNjAsNDAsayo0NV0pfX0sCntpZDoncHVscycsbjonUHVscycsd2g6J05hZCBrYW5hcMSFLCB3IGJpdXJ6ZScsVzoxNTMsZzpmdW5jdGlvbihhKXtbMTMwLDE0MS41LDE1MS4yLDE1Ny43LDE2MCwxNTcuNywxNTEuMiwxNDEuNSwxMzAsMTE4LjUsMTA4LjgsMTAyLjMsMTAwLDEwMi4zLDEwOC44LDExOC41XS5mb3JFYWNoKGZ1bmN0aW9uKHksaSl7YS5wdXNoKFsncicsaSoxMCx5LDMsNTBdKX0pfX0KXTsKdmFyIExBWVM9Wwp7azonbHYnLG46J0xpc3R3eSBwaW9ub3dvJyxneDo5LGd5OjEwfSx7azonbGgnLG46J0xpc3R3eSBwb3ppb21vJyxneDoyLGd5OjV9LHtrOidvdicsbjonT3dhbGUgcGlvbm93bycsZ3g6MTAsZ3k6MTB9LAp7azonb2gnLG46J093YWxlIHBvemlvbW8nLGd4OjUsZ3k6OH0se2s6J3NjJyxuOifFgXVza2knLGd4OjUsZ3k6NX0se2s6J2R1JyxuOidEdWV0JyxneDoxMixneToxMH0KXTsKLyogLS0tLS0tLS0tLSBzdGF0ZSAtLS0tLS0tLS0tICovCnZhciBTPXtXOjMwMCxIOjI1NSx3YWxsOicjRUNFNkRBJyxwYzonc2FtZScscGFuZWxzOltdLG9iczpbXSxzZWw6W10sc2VsT2JzOi0xLHRhYjond3pvcicsbnVtczpmYWxzZSxjbXA6ZmFsc2UsY21wdjo1MCwKZ2VuOntsYXk6J2x2JyxhdzoxNjAsYWg6MjMwLGd4OjksZ3k6MTAsYm90OjEyLjV9LHlpZWxkOjEwLGNvYXRzOjJ9Owp2YXIgaGlzdD1bXTsKZnVuY3Rpb24gc25hcCgpe2hpc3QucHVzaChKU09OLnN0cmluZ2lmeSh7cGFuZWxzOlMucGFuZWxzLG9iczpTLm9icyxXOlMuVyxIOlMuSH0pKTtpZihoaXN0Lmxlbmd0aD40MCloaXN0LnNoaWZ0KCk7dXBkVG9vbHMoKX0KZnVuY3Rpb24gdW5kbygpe2lmKCFoaXN0Lmxlbmd0aClyZXR1cm47dmFyIG89SlNPTi5wYXJzZShoaXN0LnBvcCgpKTtTLnBhbmVscz1vLnBhbmVscztTLm9icz1vLm9icztTLlc9by5XO1MuSD1vLkg7Uy5zZWw9W107Uy5zZWxPYnM9LTE7c3luY0lucHV0cygpO3JlbmRlcigpfQovKiAtLS0tLS0tLS0tIGhlbHBlcnMgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiByMSh2KXtyZXR1cm4gTWF0aC5yb3VuZCh2KjEwKS8xMH0KZnVuY3Rpb24gY20odil7cmV0dXJuIEVOP3IxKHYpLnRvU3RyaW5nKCk6cjEodikudG9TdHJpbmcoKS5yZXBsYWNlKCcuJywnLCcpfQpmdW5jdGlvbiB6bCh2KXtyZXR1cm4gdi50b0ZpeGVkKDIpLnJlcGxhY2UoJy4nLCcsJykucmVwbGFjZSgvXEIoPz0oXGR7M30pKyg\/IVxkKSkvZywnICcpKycgesWCJ30KZnVuY3Rpb24gZXNjKHMpe3JldHVybiBTdHJpbmcocykucmVwbGFjZSgvWyY8PiJdL2csZnVuY3Rpb24oYyl7cmV0dXJuIHsnJic6JyZhbXA7JywnPCc6JyZsdDsnLCc+JzonJmd0OycsJyInOicmcXVvdDsnfVtjXX0pfQpmdW5jdGlvbiBudW0oaWQsbWluLG1heCxkZWYpe3ZhciB2PXBhcnNlRmxvYXQoU3RyaW5nKCQoaWQpLnZhbHVlKS5yZXBsYWNlKCcsJywnLicpKTtpZihpc05hTih2KSlyZXR1cm4gZGVmO3JldHVybiBNYXRoLm1pbihtYXgsTWF0aC5tYXgobWluLHYpKX0KZnVuY3Rpb24gbm9ybUEoYSl7YT1hJTM2MDtpZihhPjE4MClhLT0zNjA7aWYoYTw9LTE4MClhKz0zNjA7cmV0dXJuIE1hdGgucm91bmQoYSoxMCkvMTB9CmZ1bmN0aW9uIHBhbmVsQ29sb3IocCl7cmV0dXJuIHAuY3x8KFMucGM9PT0nc2FtZSc\/Uy53YWxsOlMucGM9PT0ncmF3Jz9SQVdfQ09MOlMucGMpfQpmdW5jdGlvbiBzaGFkZShoZXgsZil7dmFyIG49cGFyc2VJbnQoaGV4LnNsaWNlKDEpLDE2KSxyPW4+PjE2LGc9bj4+OCYyNTUsYj1uJjI1NTtyPU1hdGgucm91bmQoTWF0aC5taW4oMjU1LE1hdGgubWF4KDAscipmKSkpO2c9TWF0aC5yb3VuZChNYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxnKmYpKSk7Yj1NYXRoLnJvdW5kKE1hdGgubWluKDI1NSxNYXRoLm1heCgwLGIqZikpKTtyZXR1cm4gJyMnKygoMTw8MjQpKyhyPDwxNikrKGc8PDgpK2IpLnRvU3RyaW5nKDE2KS5zbGljZSgxKX0KZnVuY3Rpb24gbHVtKGhleCl7dmFyIG49cGFyc2VJbnQoaGV4LnNsaWNlKDEpLDE2KTtyZXR1cm4gKDAuMjk5KihuPj4xNikrMC41ODcqKG4+PjgmMjU1KSswLjExNCoobiYyNTUpKS8yNTV9Ci8qIGNvbnZlcnQgc2l0ZSBwYXR0ZXJuIHNoYXBlcyAtPiBwYW5lbHMge3QseCx5LHJ9ICh4LHkgPSBjZW50cmUgaW4gY20sIHkgZnJvbSBmbG9vcikgKi8KZnVuY3Rpb24gZnJvbVJhdyhzaCxveCl7CnZhciBvdXQ9W107CnNoLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGs9c1swXTsKaWYoaz09PSdyJyl7aWYoc1szXTxzWzRdKW91dC5wdXNoKHt0OidMJyx4Om94K3NbMV0rMS41LHk6c1syXSsyNSxyOjB9KTtlbHNlIG91dC5wdXNoKHt0OidMJyx4Om94K3NbMV0rMjUseTpzWzJdKzEuNSxyOjkwfSl9CmVsc2UgaWYoaz09PSdzJyl7aWYoc1szXTxzWzRdKW91dC5wdXNoKHt0OidPJyx4Om94K3NbMV0rNy41LHk6c1syXSsyNSxyOjB9KTtlbHNlIG91dC5wdXNoKHt0OidPJyx4Om94K3NbMV0rMjUseTpzWzJdKzcuNSxyOjkwfSl9CmVsc2UgaWYoaz09PSdkJyl7b3V0LnB1c2goc1szXT97dDonQycseDpveCtzWzFdKzE1LHk6c1syXS03LjUscjoxODB9Ont0OidDJyx4Om94K3NbMV0rMTUseTpzWzJdKzcuNSxyOjB9KX0KZWxzZSBpZihrPT09J1InKXtvdXQucHVzaCh7dDonTCcseDpveCtzWzFdLHk6c1syXSxyOm5vcm1BKHNbM10pfSl9CmVsc2UgaWYoaz09PSdDJyl7dmFyIGQ9c1szXS03LjUsYT1zWzRdKk1hdGguUEkvMTgwO291dC5wdXNoKHt0OidDJyx4Om94K3NbMV0rZCpNYXRoLnNpbihhKSx5OnNbMl0rZCpNYXRoLmNvcyhhKSxyOm5vcm1BKDE4MCtzWzRdKX0pfQp9KTsKcmV0dXJuIG91dDsKfQpmdW5jdGlvbiBwYXRQYW5lbHMocCxXLEgpe3ZhciBhPVtdO3AuZyhhKTt2YXIgcHM9ZnJvbVJhdyhhLChXLXAuVykvMik7aWYocC5mdWxsKXt2YXIgZHk9KEgtMjU1KS8yO3BzLmZvckVhY2goZnVuY3Rpb24ocSl7cS55Kz1keX0pfXJldHVybiBwc30KLyogZ2VvbWV0cnkgaW4gc2NyZWVuIHNwYWNlICh5IGRvd24pICovCmZ1bmN0aW9uIGNvcm5lcnMocCl7dmFyIGQ9UFtwLnRdLGh3PWQudy8yLGhoPWQuaC8yLGE9cC5yKk1hdGguUEkvMTgwLGM9TWF0aC5jb3MoYSkscz1NYXRoLnNpbihhKSxzeD1wLngsc3k9Uy5ILXAueTsKcmV0dXJuIFtbLWh3LC1oaF0sW2h3LC1oaF0sW2h3LGhoXSxbLWh3LGhoXV0ubWFwKGZ1bmN0aW9uKHEpe3JldHVybiBbc3grcVswXSpjLXFbMV0qcyxzeStxWzBdKnMrcVsxXSpjXX0pfQpmdW5jdGlvbiBvYnNQb2x5KG8sbSl7dmFyIHg9by54LW0seT1TLkgtby55LW8uaC1tLHc9by53KzIqbSxoPW8uaCsyKm07cmV0dXJuIFtbeCx5XSxbeCt3LHldLFt4K3cseStoXSxbeCx5K2hdXX0KZnVuY3Rpb24gc2F0KEEsQil7dmFyIHBvbHlzPVtBLEJdO2Zvcih2YXIgaT0wO2k8MjtpKyspe3ZhciBwPXBvbHlzW2ldO2Zvcih2YXIgaj0wO2o8cC5sZW5ndGg7aisrKXt2YXIgcT1wWyhqKzEpJXAubGVuZ3RoXSxueD1xWzFdLXBbal1bMV0sbnk9cFtqXVswXS1xWzBdLGExPTFlOSxhMj0tMWU5LGIxPTFlOSxiMj0tMWU5OwpBLmZvckVhY2goZnVuY3Rpb24odil7dmFyIGQ9dlswXSpueCt2WzFdKm55O2ExPU1hdGgubWluKGExLGQpO2EyPU1hdGgubWF4KGEyLGQpfSk7Qi5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBkPXZbMF0qbngrdlsxXSpueTtiMT1NYXRoLm1pbihiMSxkKTtiMj1NYXRoLm1heChiMixkKX0pO2lmKGEyPD1iMXx8YjI8PWExKXJldHVybiBmYWxzZX19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIGhpdHMocCl7dmFyIGM9Y29ybmVycyhwKTtmb3IodmFyIGk9MDtpPFMub2JzLmxlbmd0aDtpKyspaWYoc2F0KGMsb2JzUG9seShTLm9ic1tpXSwyKSkpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBvdXRzaWRlKHApe3JldHVybiBjb3JuZXJzKHApLnNvbWUoZnVuY3Rpb24odil7cmV0dXJuIHZbMF08LS41fHx2WzBdPlMuVysuNXx8dlsxXTwtLjV8fHZbMV0+Uy5IKy41fSl9Ci8qIC0tLS0tLS0tLS0gc2hhcGVzIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gc2hhcGVEKHQpe2lmKHQ9PT0nTCcpcmV0dXJuICdNLTEuNSAtMjVoM3Y1MGgtM3onO2lmKHQ9PT0nTycpcmV0dXJuICdNLTcuNSAtMTcuNWE3LjUgNy41IDAgMCAxIDE1IDB2MzVhNy41IDcuNSAwIDAgMSAtMTUgMHonO3JldHVybiAnTS0xNSA3LjVBMTUgMTUgMCAwIDEgMTUgNy41Wid9Ci8qIC0tLS0tLS0tLS0gZHJhd2luZyAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIHN2Z1N0cmluZyhvcHQpewpvcHQ9b3B0fHx7fTt2YXIgVz1TLlcsSD1TLkgsbT0xNCx2Yj1bLW0sLW0sVyttKjIrMTAsSCttKjIrOF0sbz1bXTsKdmFyIHdjPVMud2FsbCxkYXJrPWx1bSh3Yyk8LjQ1OwpvLnB1c2goJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSInK3ZiLmpvaW4oJyAnKSsnIiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IsWaY2lhbmEgJytjbShXKSsnIG5hICcrY20oSCkrJyBjbSB6IHBhbmVsYW1pIj4nKTsKby5wdXNoKCc8ZGVmcz48ZmlsdGVyIGlkPSJ3a3JlbCIgeD0iLTMwJSIgeT0iLTMwJSIgd2lkdGg9IjE2MCUiIGhlaWdodD0iMTYwJSI+PGZlRHJvcFNoYWRvdyBkeD0iMC4zNSIgZHk9IjAuNTUiIHN0ZERldmlhdGlvbj0iMC41IiBmbG9vZC1jb2xvcj0iIzAwMCIgZmxvb2Qtb3BhY2l0eT0iJysoZGFyaz8uNTU6LjMyKSsnIi8+PC9maWx0ZXI+Jyk7Cm8ucHVzaCgnPGxpbmVhckdyYWRpZW50IGlkPSJ3a2xpZ2h0IiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9Ii4xMCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAwMCIgc3RvcC1vcGFjaXR5PSIuMDYiLz48L2xpbmVhckdyYWRpZW50PicpOwpvLnB1c2goJzxwYXR0ZXJuIGlkPSJ3a2hhdGNoIiB3aWR0aD0iNCIgaGVpZ2h0PSI0IiBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBwYXR0ZXJuVHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cmVjdCB3aWR0aD0iNCIgaGVpZ2h0PSI0IiBmaWxsPSIjOUFBM0IwIiBmaWxsLW9wYWNpdHk9Ii4yNSIvPjxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI0IiBzdHJva2U9IiM2Qjc2ODUiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLW9wYWNpdHk9Ii41Ii8+PC9wYXR0ZXJuPicpOwpvLnB1c2goJzxjbGlwUGF0aCBpZD0id2tjbGlwIj48cmVjdCB4PSIwIiB5PSItMjAiIHdpZHRoPSInKyhTLmNtcCYmIW9wdC5wbGFpbj9XKlMuY21wdi8xMDA6Vys0MCkrJyIgaGVpZ2h0PSInKyhIKzQwKSsnIi8+PC9jbGlwUGF0aD48L2RlZnM+Jyk7Cm8ucHVzaCgnPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IicrVysnIiBoZWlnaHQ9IicrSCsnIiBmaWxsPSInK3djKyciLz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iJytXKyciIGhlaWdodD0iJytIKyciIGZpbGw9InVybCgjd2tsaWdodCkiLz4nKTsKby5wdXNoKCc8cmVjdCB4PSItNCIgeT0iJytIKyciIHdpZHRoPSInKyhXKzgpKyciIGhlaWdodD0iNSIgZmlsbD0iJytzaGFkZSh3YywuODIpKyciLz48bGluZSB4MT0iLTYiIHgyPSInKyhXKzYpKyciIHkxPSInKyhIKzUpKyciIHkyPSInKyhIKzUpKyciIHN0cm9rZT0iIzhCN0U2QSIgc3Ryb2tlLXdpZHRoPSIuOCIvPicpOwpTLm9icy5mb3JFYWNoKGZ1bmN0aW9uKG9iLGkpe3ZhciBkPU9CU1tvYi5rXSx5PUgtb2IueS1vYi5oLHNlbD1pPT09Uy5zZWxPYnMmJlMudGFiPT09J3NjaWFuYSc7CnZhciBmaWxsPW9iLms9PT0nb2snPycjQ0ZFMEVBJzpvYi5rPT09J2RyJz9zaGFkZSh3YywuOSk6b2Iuaz09PSd0dic\/JyMxRTIyMjgnOid1cmwoI3draGF0Y2gpJzsKby5wdXNoKCc8ZyBjbGFzcz0id2stb2IiIGRhdGEtbz0iJytpKyciIHN0eWxlPSJjdXJzb3I6JysoUy50YWI9PT0nc2NpYW5hJz8nbW92ZSc6J2RlZmF1bHQnKSsnIj48cmVjdCB4PSInK29iLngrJyIgeT0iJyt5KyciIHdpZHRoPSInK29iLncrJyIgaGVpZ2h0PSInK29iLmgrJyIgZmlsbD0iJytmaWxsKyciIHN0cm9rZT0iJysoc2VsPycjQjg3MzNBJzonIzZCNzY4NScpKyciIHN0cm9rZS13aWR0aD0iJysoc2VsPzEuMjouNikrJyIgJysoc2VsPydzdHJva2UtZGFzaGFycmF5PSIzIDIiJzonJykrJy8+Jyk7CmlmKG9iLnc+PTIwJiZvYi5oPj0xMClvLnB1c2goJzx0ZXh0IHg9IicrKG9iLngrb2Iudy8yKSsnIiB5PSInKyh5K29iLmgvMisyKSsnIiBmb250LXNpemU9IicrTWF0aC5taW4oNixvYi53LzYpKyciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IicrKG9iLms9PT0ndHYnPycjRDlERUU2JzonIzNDNDU1MicpKyciIGZvbnQtZmFtaWx5PSJNYW5yb3BlLEFyaWFsLHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSI3MDAiPicrZXNjKGQubikrJzwvdGV4dD4nKTsKby5wdXNoKCc8L2c+Jyl9KTsKby5wdXNoKCc8ZyBjbGlwLXBhdGg9InVybCgjd2tjbGlwKSI+Jyk7ClMucGFuZWxzLmZvckVhY2goZnVuY3Rpb24ocCxpKXt2YXIgY29sPXBhbmVsQ29sb3IocCksc2VsPSFvcHQucGxhaW4mJlMuc2VsLmluZGV4T2YoaSk+PTAsYmFkPSFvcHQucGxhaW4mJihoaXRzKHApfHxvdXRzaWRlKHApKTsKby5wdXNoKCc8ZyBjbGFzcz0id2stcG4iIGRhdGEtaT0iJytpKyciIHRyYW5zZm9ybT0idHJhbnNsYXRlKCcrcjEocC54KSsnICcrcjEoSC1wLnkpKycpIHJvdGF0ZSgnK3AucisnKSIgc3R5bGU9ImN1cnNvcjonKyhTLnRhYj09PSdzY2lhbmEnPydkZWZhdWx0JzonZ3JhYicpKyciPjxwYXRoIGQ9Iicrc2hhcGVEKHAudCkrJyIgZmlsbD0iJytjb2wrJyIgZmlsdGVyPSJ1cmwoI3drcmVsKSIgc3Ryb2tlPSInK3NoYWRlKGNvbCwuOCkrJyIgc3Ryb2tlLXdpZHRoPSIuMjUiLz4nKTsKaWYoc2VsfHxiYWQpby5wdXNoKCc8cGF0aCBkPSInK3NoYXBlRChwLnQpKyciIGZpbGw9Im5vbmUiIHN0cm9rZT0iJysoYmFkPycjQzAzOTJCJzonI0I4NzMzQScpKyciIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLWRhc2hhcnJheT0iJysoYmFkPydub25lJzonMiAxLjInKSsnIiB2ZWN0b3ItZWZmZWN0PSJub24tc2NhbGluZy1zdHJva2UiLz4nKTsKby5wdXNoKCc8L2c+Jyl9KTsKby5wdXNoKCc8L2c+Jyk7CmlmKFMubnVtc3x8b3B0Lm51bXMpe1MucGFuZWxzLmZvckVhY2goZnVuY3Rpb24ocCxpKXt2YXIgeD1yMShwLngpLHk9cjEoSC1wLnkpO28ucHVzaCgnPGNpcmNsZSBjeD0iJyt4KyciIGN5PSInK3krJyIgcj0iMy40IiBmaWxsPSIjMEEyQzYxIiBmaWxsLW9wYWNpdHk9Ii44NSIvPjx0ZXh0IHg9IicreCsnIiB5PSInKyh5KzEuNCkrJyIgZm9udC1zaXplPSIzLjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNmZmYiIGZvbnQtZmFtaWx5PSJBcmlhbCxzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iNzAwIj4nKyhpKzEpKyc8L3RleHQ+Jyl9KX0KaWYoUy5jbXAmJiFvcHQucGxhaW4pe3ZhciBjeD1XKlMuY21wdi8xMDA7by5wdXNoKCc8bGluZSB4MT0iJytjeCsnIiB4Mj0iJytjeCsnIiB5MT0iLTQiIHkyPSInKyhIKzQpKyciIHN0cm9rZT0iI0I4NzMzQSIgc3Ryb2tlLXdpZHRoPSIxIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz4nKX0KdmFyIHliPUgrMTI7by5wdXNoKCc8ZyBzdHJva2U9IiNCODczM0EiIHN0cm9rZS13aWR0aD0iLjYiPjxsaW5lIHgxPSIwIiB4Mj0iJytXKyciIHkxPSInK3liKyciIHkyPSInK3liKyciLz48bGluZSB4MT0iMCIgeDI9IjAiIHkxPSInKyh5Yi0zKSsnIiB5Mj0iJysoeWIrMykrJyIvPjxsaW5lIHgxPSInK1crJyIgeDI9IicrVysnIiB5MT0iJysoeWItMykrJyIgeTI9IicrKHliKzMpKyciLz48L2c+Jyk7Cm8ucHVzaCgnPHRleHQgeD0iJytXLzIrJyIgeT0iJysoeWIrNykrJyIgZm9udC1zaXplPSI2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjQjg3MzNBIiBmb250LWZhbWlseT0iTWFucm9wZSxBcmlhbCxzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iNzAwIj4nK2NtKFcpKycgY208L3RleHQ+Jyk7CnZhciB4cj1XKzY7by5wdXNoKCc8ZyBzdHJva2U9IiNCODczM0EiIHN0cm9rZS13aWR0aD0iLjYiPjxsaW5lIHgxPSInK3hyKyciIHgyPSInK3hyKyciIHkxPSIwIiB5Mj0iJytIKyciLz48bGluZSB4MT0iJysoeHItMykrJyIgeDI9IicrKHhyKzMpKyciIHkxPSIwIiB5Mj0iMCIvPjxsaW5lIHgxPSInKyh4ci0zKSsnIiB4Mj0iJysoeHIrMykrJyIgeTE9IicrSCsnIiB5Mj0iJytIKyciLz48L2c+Jyk7Cm8ucHVzaCgnPHRleHQgeD0iJysoeHIrMykrJyIgeT0iJysoSC8yKSsnIiBmb250LXNpemU9IjYiIGZpbGw9IiNCODczM0EiIGZvbnQtZmFtaWx5PSJNYW5yb3BlLEFyaWFsLHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSI3MDAiIHRyYW5zZm9ybT0icm90YXRlKDkwICcrKHhyKzMpKycgJysoSC8yKSsnKSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+JytjbShIKSsnIGNtPC90ZXh0PicpOwppZihkcmFnJiZkcmFnLmtpbmQ9PT0nYm94Jyl7by5wdXNoKCc8cmVjdCB4PSInK01hdGgubWluKGRyYWcueDAsZHJhZy54MSkrJyIgeT0iJytNYXRoLm1pbihkcmFnLnkwLGRyYWcueTEpKyciIHdpZHRoPSInK01hdGguYWJzKGRyYWcueDEtZHJhZy54MCkrJyIgaGVpZ2h0PSInK01hdGguYWJzKGRyYWcueTEtZHJhZy55MCkrJyIgZmlsbD0icmdiYSgxODQsMTE1LDU4LC4xMikiIHN0cm9rZT0iI0I4NzMzQSIgc3Ryb2tlLXdpZHRoPSIxIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiIHZlY3Rvci1lZmZlY3Q9Im5vbi1zY2FsaW5nLXN0cm9rZSIvPicpfQpvLnB1c2goJzwvc3ZnPicpO3JldHVybiBvLmpvaW4oJycpOwp9CmZ1bmN0aW9uIG1pbmlTdmcocHMsVyxIKXt2YXIgbz1bJzxzdmcgdmlld0JveD0iMCAwICcrVysnICcrSCsnIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHJlY3Qgd2lkdGg9IicrVysnIiBoZWlnaHQ9IicrSCsnIiBmaWxsPSIjRUNFNkRBIi8+J107CnBzLmZvckVhY2goZnVuY3Rpb24ocCl7by5wdXNoKCc8cGF0aCBkPSInK3NoYXBlRChwLnQpKyciIHRyYW5zZm9ybT0idHJhbnNsYXRlKCcrcjEocC54KSsnICcrcjEoSC1wLnkpKycpIHJvdGF0ZSgnK3AucisnKSIgZmlsbD0iI0ZCRjlGNSIgc3Ryb2tlPSIjQjlBRTlCIiBzdHJva2Utd2lkdGg9IjEiLz4nKX0pO3JldHVybiBvLmpvaW4oJycpKyc8L3N2Zz4nfQpmdW5jdGlvbiBwaWVjZUljb24odCl7cmV0dXJuICc8c3ZnIHZpZXdCb3g9Ii0yNyAtMjcgNTQgNTQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSInK3NoYXBlRCh0KSsnIiBmaWxsPSIjRkJGOUY1IiBzdHJva2U9IiNCOUFFOUIiIHN0cm9rZS13aWR0aD0iMSIvPjwvc3ZnPid9Ci8qIC0tLS0tLS0tLS0gY291bnRzICYgcHJpY2UgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBjb3VudHMoKXt2YXIgYz17TDowLE86MCxDOjB9O1MucGFuZWxzLmZvckVhY2goZnVuY3Rpb24ocCl7Y1twLnRdKyt9KTtyZXR1cm4gY30KZnVuY3Rpb24gZGlzYyhxKXtyZXR1cm4gcT49NDg\/LjEyOnE+PTI0Py4wODowfQpmdW5jdGlvbiBwYWNrcyhuKXt2YXIgcD1NYXRoLmZsb29yKG4vOCkscj1uJTgsYT1bXTtpZihwKWEucHVzaChwKycgb3Bhay4nKTtpZihyKWEucHVzaChyKycgc3p0LicpO3JldHVybiBhLmpvaW4oJyArICcpfQpmdW5jdGlvbiB0b3RhbHMoKXt2YXIgYz1jb3VudHMoKSxxPWMuTCtjLk8rYy5DLGJhc2U9Yy5MKlAuTC5wcmljZStjLk8qUC5PLnByaWNlK2MuQypQLkMucHJpY2UsZD1kaXNjKHEpO3JldHVybiB7YzpjLHE6cSxiYXNlOmJhc2UsZDpkLHRvdDpiYXNlKigxLWQpfX0KLyogLS0tLS0tLS0tLSByZW5kZXIgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiByZW5kZXIoKXsKJCgnd2stc3ZnJykuaW5uZXJIVE1MPXN2Z1N0cmluZygpO2RyYXdQaG90bygpOwp2YXIgdD10b3RhbHMoKTsKJCgnd2stYmFydCcpLmlubmVySFRNTD10LnE\/JzxiPicremwodC50b3QpKyc8L2I+Jyt0LnErJyBzenQuJysodC5kPycgwrcgcmFiYXQg4oiSJyt0LmQqMTAwKyclJzonJyk6J0RvZGFqIHBhbmVsZSBkbyDFm2NpYW55JzsKdXBkVG9vbHMoKTtyZW5kZXJPcmRlcih0KTtyZW5kZXJQbGFuKCk7cmVuZGVyT25lQ29sKCk7cmVuZGVyT2JzRWRpdCgpO3JlbmRlclN3YXRjaGVzKCk7c2F2ZSgpOwp9CmZ1bmN0aW9uIE1CKCl7cmV0dXJuICc8YnV0dG9uIGNsYXNzPSJ3ay1iIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtdWx0aSIgYXJpYS1wcmVzc2VkPSInKyEhUy5tdWx0aSsnIj5aYXpuYWN6IGtpbGthPC9idXR0b24+J30KZnVuY3Rpb24gdXBkVG9vbHMoKXsKdmFyIG49Uy5zZWwubGVuZ3RoLG89W107Cm8ucHVzaCgnPGJ1dHRvbiBjbGFzcz0id2stYiIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idW5kbyIgJysoaGlzdC5sZW5ndGg\/Jyc6J2Rpc2FibGVkJykrJz7ihrYgQ29mbmlqPC9idXR0b24+Jyk7CmlmKE1PREU9PT0ncGhvdG8nKXtpZighUEguaW1nKXskKCd3ay10b29scycpLmlubmVySFRNTD1vLmpvaW4oJycpOyQoJ3drLWNtcGJveCcpLmhpZGRlbj0hUy5jbXA7cGhvdG9IaW50KCcnKTtyZXR1cm59Cm8ucHVzaCgnPGJ1dHRvbiBjbGFzcz0id2stYiIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icGgtY29ybmVycyIgYXJpYS1wcmVzc2VkPSInKyhQSC50b29sPT09J2Nvcm5lcnMnKSsnIj5Vc3RhdyBuYXJvxbxuaWtpPC9idXR0b24+PGJ1dHRvbiBjbGFzcz0id2stYiIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icGgtZWRpdCIgYXJpYS1wcmVzc2VkPSInKyhQSC50b29sPT09J2VkaXQnKSsnIj5FZHl0dWogcGFuZWxlPC9idXR0b24+PGJ1dHRvbiBjbGFzcz0id2stYiIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icGgtcGljayIgYXJpYS1wcmVzc2VkPSInKyhQSC50b29sPT09J3BpY2snKSsnIj5Qb2JpZXJ6IGtvbG9yIMWbY2lhbnk8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJ3ay1iIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJwaC1yZWNvbG9yIiBhcmlhLXByZXNzZWQ9IicrUEgucmVjb2xvcisnIj5QcnplbWFsdWogxZtjaWFuxJk8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJ3ay1iIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJwaC1uZXciPlptaWXFhCB6ZGrEmWNpZTwvYnV0dG9uPicpOwpwaG90b0hpbnQoUEgudG9vbD09PSdjb3JuZXJzJz8nUHJ6ZWNpxIVnbmlqIDQga3JvcGtpIGRvIHJvZ8OzdyDFm2NpYW55OiAxIGxld3kgZ8Ozcm55LCAyIHByYXd5IGfDs3JueSwgMyBwcmF3eSBkb2xueSwgNCBsZXd5IGRvbG55LiBXeW1pYXJ5IMWbY2lhbnkgKCcrY20oUy5XKSsnIMOXICcrY20oUy5IKSsnIGNtKSB1c3Rhd2lzeiB3IHpha8WCYWRjZSDigJ7FmmNpYW5h4oCdLiBKZcWbbGkgcm9nw7N3IG5pZSB3aWRhxIcsIHptaWVyeiB3aWRvY3pueSBmcmFnbWVudCDFm2NpYW55IGkgd3Bpc3ogamVnbyB3eW1pYXJ5Lic6UEgudG9vbD09PSdwaWNrJz8nRG90a25paiDFm2NpYW55IG5hIHpkasSZY2l1IHcgamFzbnltIG1pZWpzY3UgYmV6IGNpZW5pYS4nOidQcnplc3V3YWogcGFuZWxlIHBhbGNlbSBuYSB6ZGrEmWNpdSwgb2JyYWNhaiBkd29tYSBwYWxjYW1pLiBLb2xvcnkgem1pZW5pc3ogdyB6YWvFgmFkY2Ug4oCeS29sb3J54oCdLiBNZWJsZSBuYSB6ZGrEmWNpdSBuaWUgemFzxYJhbmlhasSFIHBhbmVsaSwgdG8gcG9kZ2zEhWQgdcWCb8W8ZW5pYS4nKTsKaWYoUEgudG9vbCE9PSdlZGl0Jyl7JCgnd2stdG9vbHMnKS5pbm5lckhUTUw9by5qb2luKCcnKTskKCd3ay1jbXBib3gnKS5oaWRkZW49IVMuY21wO3JldHVybn19CmVsc2UgcGhvdG9IaW50KCcnKTsKaWYoUy50YWI9PT0nc2NpYW5hJyl7by5wdXNoKCc8c3BhbiBjbGFzcz0id2stbm90ZSI+UHJ6ZWNpxIVnbmlqIHByemVzemtvZMSZIG5hIHJ5c3Vua3UsIGFieSBqxIUgcHJ6ZXN1bsSFxIcuPC9zcGFuPicpfQplbHNlIGlmKG4pewpvLnB1c2goJzxidXR0b24gY2xhc3M9IndrLWIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InJsIj7in7IgMTXCsDwvYnV0dG9uPjxidXR0b24gY2xhc3M9IndrLWIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InJyIj7in7MgMTXCsDwvYnV0dG9uPjxidXR0b24gY2xhc3M9IndrLWIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InI5MCI+OTDCsDwvYnV0dG9uPicpOwpvLnB1c2goJzxidXR0b24gY2xhc3M9IndrLWIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImR1cCI+RHVwbGlrdWo8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJ3ay1iIHdrLWRlbCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZGVsIj5Vc3XFhDwvYnV0dG9uPjxidXR0b24gY2xhc3M9IndrLWIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im5vbmUiPk9kem5hY3o8L2J1dHRvbj4nKTtvLnB1c2goTUIoKSk7aWYobj4xKW8ucHVzaCgnPGJ1dHRvbiBjbGFzcz0id2stYiIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYWwtcm93Ij5XIGplZG55bSByesSZZHppZTwvYnV0dG9uPjxidXR0b24gY2xhc3M9IndrLWIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFsLWNvbCI+VyBqZWRuZWoga29sdW1uaWU8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJ3ay1iIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhbC1nYXAiPlLDs3duZSBvZHN0xJlweTwvYnV0dG9uPicpOwpvLnB1c2goJzxzcGFuIGNsYXNzPSJ3ay1ub3RlIj4nKyhuPT09MT8nWmF6bmFjem9ueSAxIHBhbmVsJzonWmF6bmFjem9uZSAnK24rJyBwYW5lbGknKSsnPC9zcGFuPicpOwp9IGVsc2UgewpvLnB1c2goJzxidXR0b24gY2xhc3M9IndrLWIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFsbCIgJysoUy5wYW5lbHMubGVuZ3RoPycnOidkaXNhYmxlZCcpKyc+WmF6bmFjeiB3c3p5c3RraWU8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJ3ay1iIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJjZW50ZXIiICcrKFMucGFuZWxzLmxlbmd0aD8nJzonZGlzYWJsZWQnKSsnPld5xZtyb2RrdWo8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJ3ay1iIHdrLWRlbCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iY2xlYXIiICcrKFMucGFuZWxzLmxlbmd0aD8nJzonZGlzYWJsZWQnKSsnPld5Y3p5xZvEhzwvYnV0dG9uPicpOwpvLnB1c2goTUIoKSk7by5wdXNoKCc8c3BhbiBjbGFzcz0id2stbm90ZSI+JysoUy5tdWx0aT8nRG90eWthaiBwYW5lbGksIMW8ZWJ5IGRvZGHEhyBqZSBkbyB6YXpuYWN6ZW5pYSBhbGJvIGplIG9kem5hY3p5xIcuIE5hIHJ5c3Vua3UgbW\/FvGVzeiB0ZcW8IHphem5hY3p5xIcga2lsa2EgcGFuZWxpIHJhbWvEhSwgcHJ6ZWNpxIVnYWrEhWMgcG8gcHVzdHltIG1pZWpzY3UuJzonRG90a25paiBwYW5lbHUsIGFieSBnbyBlZHl0b3dhxIcuJykrJzwvc3Bhbj4nKTsKfQokKCd3ay10b29scycpLmlubmVySFRNTD1vLmpvaW4oJycpOwokKCd3ay1jbXBib3gnKS5oaWRkZW49IVMuY21wOwp9CmZ1bmN0aW9uIHJlbmRlck9yZGVyKHQpewp2YXIgbGk9Jyc7WydMJywnTycsJ0MnXS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBuPXQuY1trXTtpZighbilyZXR1cm47bGkrPSc8bGk+JytwaWVjZUljb24oaykrJzxzcGFuPjxiPicrUFtrXS5uYW1lKyc8L2I+PHNtYWxsPicremwoUFtrXS5wcmljZSkrJyAvIHN6dC4gwrcgb3Bha293YW5pZSA4IHN6dC48L3NtYWxsPjwvc3Bhbj48c3BhbiBjbGFzcz0id2stcSI+JytuKycgc3p0Ljxicj48c21hbGw+JytwYWNrcyhuKSsnPC9zbWFsbD48L3NwYW4+PC9saT4nfSk7CiQoJ3drLWl0ZW1zJykuaW5uZXJIVE1MPWxpfHwnPGxpIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIj48c3BhbiBjbGFzcz0id2staGludCI+QnJhayBwYW5lbGkuIFdjenl0YWogd3rDs3IgdyB6YWvFgmFkY2Ug4oCeV3rDs3LigJ0gYWxibyBkb2RhaiBwYW5lbGUuPC9zcGFuPjwvbGk+JzsKdmFyIHVwPScnO2lmKHQucSYmdC5kPC4xMil7dmFyIG5leHQ9dC5kPzQ4OjI0LG5lZWQ9bmV4dC10LnE7aWYobmVlZDw9OCl1cD0nPGRpdiBjbGFzcz0id2stdXAiPkRvZGFqIGplc3pjemUgJytuZWVkKycgc3p0LiwgYSByYWJhdCB3enJvxZtuaWUgZG8gJysobmV4dD09PTI0Pzg6MTIpKyclLiBNb8W8ZXN6IGRvxYJvxbx5xIcgcGFuZWxlIG5hIGJyemVnYWNoIGFsYm8gem9zdGF3acSHIG5hIHphcGFzLjwvZGl2Pid9CiQoJ3drLXVwJykuaW5uZXJIVE1MPXVwOwp2YXIgYmFkPVMucGFuZWxzLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gaGl0cyhwKX0pLmxlbmd0aCxvdXQ9Uy5wYW5lbHMuZmlsdGVyKG91dHNpZGUpLmxlbmd0aCx3PScnOwppZihiYWQpdys9JzxkaXYgY2xhc3M9IndrLXdhcm4iPicrYmFkKycgJysoYmFkPT09MT8ncGFuZWwgbmFjaG9kemknOidwYW5lbGUgbmFjaG9kesSFJykrJyBuYSBwcnplc3prb2TEmSAoY3plcndvbmEgcmFta2EpLiBQcnplc3XFhCBqZSBhbGJvIHVzdcWELjwvZGl2Pic7CmlmKG91dCl3Kz0nPGRpdiBjbGFzcz0id2std2FybiI+JytvdXQrJyAnKyhvdXQ9PT0xPydwYW5lbCB3eXN0YWplJzoncGFuZWxlIHd5c3RhasSFJykrJyBwb3phIMWbY2lhbsSZLjwvZGl2Pic7CiQoJ3drLWNvbGwnKS5pbm5lckhUTUw9dzsKJCgnd2stcHJpY2UnKS5pbm5lckhUTUw9dC5xPyh0LmQ\/JzxzPicremwodC5iYXNlKSsnPC9zPjxiPicremwodC50b3QpKyc8L2I+PHNtYWxsPnogcmFiYXRlbSDiiJInK3QuZCoxMDArJyUgbmFsaWN6YW55bSB3IGtvc3p5a3U8L3NtYWxsPic6JzxiPicremwodC5iYXNlKSsnPC9iPjxzbWFsbD5vZCAyNCBzenQuIHJhYmF0IOKIkjglLCBvZCA0OCBzenQuIOKIkjEyJTwvc21hbGw+Jyk6Jyc7CiQoJ3drLWNhcnQnKS5kaXNhYmxlZD0hdC5xOwp9CmZ1bmN0aW9uIHJlbmRlclBsYW4oKXsKdmFyIHJvd3M9Jyc7Uy5wYW5lbHMuZm9yRWFjaChmdW5jdGlvbihwLGkpe3Jvd3MrPSc8dHI+PHRkPicrKGkrMSkrJzwvdGQ+PHRkPicrUFtwLnRdLnNob3J0Kyc8L3RkPjx0ZD4nK2NtKHAueCkrJzwvdGQ+PHRkPicrY20ocC55KSsnPC90ZD48dGQ+JysocC5yP2NtKHAucikrJ8KwJzon4oCUJykrJzwvdGQ+PC90cj4nfSk7CiQoJ3drLXRib2R5JykuaW5uZXJIVE1MPXJvd3N8fCc8dHI+PHRkIGNvbHNwYW49IjUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPkJyYWsgcGFuZWxpPC90ZD48L3RyPic7CnZhciB0PXRvdGFscygpLHdhbGxBPVMuVypTLkgvMWU0O1Mub2JzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoT0JTW28ua10ub3Blbil3YWxsQS09by53Km8uaC8xZTR9KTt3YWxsQT1NYXRoLm1heCgwLHdhbGxBKTsKdmFyIHBhPXQuYy5MKlAuTC5hcmVhLzFlNCt0LmMuTypQLk8uYXJlYS8xZTQrdC5jLkMqUC5DLmFyZWEvMWU0LHk9bnVtKCd3ay15aWVsZCcsNCwyMCwxMCksaz1udW0oJ3drLWNvYXRzJywxLDQsMiksbGl0PSh3YWxsQStwYSkqay95OwokKCd3ay1wYWludCcpLmlubmVySFRNTD0nPGRpdj48ZHQ+xZpjaWFuYTwvZHQ+PGRkPicrY20od2FsbEEpKycgbcKyPC9kZD48L2Rpdj48ZGl2PjxkdD5QYW5lbGUgeiBrcmF3xJlkemlhbWk8L2R0PjxkZD4nK2NtKHBhKSsnIG3CsjwvZGQ+PC9kaXY+PGRpdj48ZHQ+RmFyYmEgxYLEhWN6bmllPC9kdD48ZGQ+b2suICcrY20oTWF0aC5jZWlsKGxpdCoxMCkvMTApKycgbDwvZGQ+PC9kaXY+JzsKfQpmdW5jdGlvbiByZW5kZXJPbmVDb2woKXsKdmFyIG49Uy5zZWwubGVuZ3RoOwppZighbil7JCgnd2stb25lY29sJykuaW5uZXJIVE1MPSc8cCBjbGFzcz0id2staGludCI+RG90a25paiBwYW5lbHUgbmEgcnlzdW5rdSwgYWJ5IG5hZGHEhyBtdSBpbm55IGtvbG9yIG5pxbwgcmVzemNpZS48L3A+JztyZXR1cm59CnZhciBoPSc8ZGl2IGNsYXNzPSJ3ay1zZWwtaW5mbyI+Jysobj09PTE\/J1phem5hY3pvbnkgcGFuZWw6ICcrUFtTLnBhbmVsc1tTLnNlbFswXV0udF0uc2hvcnQ6J1phem5hY3pvbmUgcGFuZWxlOiAnK24pKyc8L2Rpdj48ZGl2IGNsYXNzPSJ3ay1zdyI+JzsKV0FMTFMuZm9yRWFjaChmdW5jdGlvbih3KXtoKz0nPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ3ay1zd2IiIGRhdGEtb25lPSInK3dbMV0rJyIgdGl0bGU9Iicrd1swXSsnIiBhcmlhLWxhYmVsPSInK3dbMF0rJyIgc3R5bGU9ImJhY2tncm91bmQ6Jyt3WzFdKyciPjwvYnV0dG9uPid9KTsKaCs9JzwvZGl2PjxkaXYgY2xhc3M9IndrLWNvbHJvdyI+PGlucHV0IHR5cGU9ImNvbG9yIiBpZD0id2stb25lYyIgYXJpYS1sYWJlbD0iV8WCYXNueSBrb2xvciBwYW5lbHUiIHZhbHVlPSInK3BhbmVsQ29sb3IoUy5wYW5lbHNbUy5zZWxbMF1dKSsnIj48YnV0dG9uIGNsYXNzPSJ3ay1iIiB0eXBlPSJidXR0b24iIGRhdGEtb25lPSJyZXNldCI+UHJ6eXdyw7PEhyB3c3DDs2xueSBrb2xvcjwvYnV0dG9uPjwvZGl2Pic7CiQoJ3drLW9uZWNvbCcpLmlubmVySFRNTD1oOwp9CmZ1bmN0aW9uIHJlbmRlclN3YXRjaGVzKCl7CiQoJ3drLXN3d2FsbCcpLmlubmVySFRNTD1XQUxMUy5tYXAoZnVuY3Rpb24odyl7cmV0dXJuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IndrLXN3YiIgZGF0YS13YWxsPSInK3dbMV0rJyIgdGl0bGU9Iicrd1swXSsnIiBhcmlhLWxhYmVsPSInK3dbMF0rJyIgYXJpYS1wcmVzc2VkPSInKyhTLndhbGw9PT13WzFdKSsnIiBzdHlsZT0iYmFja2dyb3VuZDonK3dbMV0rJyI+PC9idXR0b24+J30pLmpvaW4oJycpOwokKCd3ay1zd3BhbicpLmlubmVySFRNTD1XQUxMUy5tYXAoZnVuY3Rpb24odyl7cmV0dXJuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IndrLXN3YiIgZGF0YS1wYW49Iicrd1sxXSsnIiB0aXRsZT0iJyt3WzBdKyciIGFyaWEtbGFiZWw9Iicrd1swXSsnIiBhcmlhLXByZXNzZWQ9IicrKFMucGM9PT13WzFdKSsnIiBzdHlsZT0iYmFja2dyb3VuZDonK3dbMV0rJyI+PC9idXR0b24+J30pLmpvaW4oJycpOwokKCd3ay13YWxsYycpLnZhbHVlPVMud2FsbDskKCd3ay1wYW5jJykudmFsdWU9Uy5wYz09PSdzYW1lJz9TLndhbGw6Uy5wYz09PSdyYXcnP1JBV19DT0w6Uy5wYzsKJCgnd2stc2FtZScpLnN0eWxlLmJvcmRlckNvbG9yPVMucGM9PT0nc2FtZSc\/J3ZhcigtLXdvb2QpJzonJzskKCd3ay1yYXcnKS5zdHlsZS5ib3JkZXJDb2xvcj1TLnBjPT09J3Jhdyc\/J3ZhcigtLXdvb2QpJzonJzsKfQpmdW5jdGlvbiByZW5kZXJPYnNFZGl0KCl7CnZhciBpPVMuc2VsT2JzOwppZihpPDB8fCFTLm9ic1tpXSl7JCgnd2stb2JzZWRpdCcpLmlubmVySFRNTD1TLm9icy5sZW5ndGg\/JzxwIGNsYXNzPSJ3ay1oaW50Ij5Eb3RrbmlqIHByemVzemtvZHkgbmEgcnlzdW5rdSwgYWJ5IHptaWVuacSHIGplaiB3eW1pYXJ5LjwvcD4nOicnO3JldHVybn0KdmFyIG89Uy5vYnNbaV07CiQoJ3drLW9ic2VkaXQnKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9IndrLXNlbC1pbmZvIiBzdHlsZT0iZGlzcGxheTpncmlkO2dhcDoxMHB4Ij48Yj4nK09CU1tvLmtdLm4rJzwvYj48ZGl2IGNsYXNzPSJ3ay1yb3ciPjxsYWJlbCBjbGFzcz0id2stZiIgZm9yPSJ3ay1vdyI+U3plcm9rb8WbxIc8c3BhbiBjbGFzcz0id2staW4iPjxpbnB1dCBpZD0id2stb3ciIGRhdGEtb2Y9InciIHR5cGU9Im51bWJlciIgbWluPSIyIiBtYXg9IicrUy5XKyciIHZhbHVlPSInK3IxKG8udykrJyI+PHNwYW4+Y208L3NwYW4+PC9zcGFuPjwvbGFiZWw+PGxhYmVsIGNsYXNzPSJ3ay1mIiBmb3I9IndrLW9oIj5XeXNva2\/Fm8SHPHNwYW4gY2xhc3M9IndrLWluIj48aW5wdXQgaWQ9IndrLW9oIiBkYXRhLW9mPSJoIiB0eXBlPSJudW1iZXIiIG1pbj0iMiIgbWF4PSInK1MuSCsnIiB2YWx1ZT0iJytyMShvLmgpKyciPjxzcGFuPmNtPC9zcGFuPjwvc3Bhbj48L2xhYmVsPjwvZGl2PjxkaXYgY2xhc3M9IndrLXJvdyI+PGxhYmVsIGNsYXNzPSJ3ay1mIiBmb3I9IndrLW94Ij5PZCBsZXdlajxzcGFuIGNsYXNzPSJ3ay1pbiI+PGlucHV0IGlkPSJ3ay1veCIgZGF0YS1vZj0ieCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iJytTLlcrJyIgdmFsdWU9IicrcjEoby54KSsnIj48c3Bhbj5jbTwvc3Bhbj48L3NwYW4+PC9sYWJlbD48bGFiZWwgY2xhc3M9IndrLWYiIGZvcj0id2stb3kiPk9kIHBvZMWCb2dpPHNwYW4gY2xhc3M9IndrLWluIj48aW5wdXQgaWQ9IndrLW95IiBkYXRhLW9mPSJ5IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSInK1MuSCsnIiB2YWx1ZT0iJytyMShvLnkpKyciPjxzcGFuPmNtPC9zcGFuPjwvc3Bhbj48L2xhYmVsPjwvZGl2PjxkaXYgY2xhc3M9IndrLWFjdGlvbnMiPjxidXR0b24gY2xhc3M9IndrLWIiIHR5cGU9ImJ1dHRvbiIgaWQ9IndrLW9ic2ZpeCI+VXN1xYQgcGFuZWxlIG5hIHByemVzemtvZHppZTwvYnV0dG9uPjxidXR0b24gY2xhc3M9IndrLWIgd2stZGVsIiB0eXBlPSJidXR0b24iIGlkPSJ3ay1vYnNkZWwiPlVzdcWEIHByemVzemtvZMSZPC9idXR0b24+PC9kaXY+PC9kaXY+JzsKfQovKiAtLS0tLS0tLS0tIGdlbmVyYXRvciAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIGdlbmVyYXRlKCl7CnZhciBXPVMuVyxIPVMuSCxhdz1udW0oJ3drLWF3JywxMCxXLDE2MCksYWg9bnVtKCd3ay1haCcsMTAsSCwyMzApLGd4PW51bSgnd2stZ3gnLDAsODAsOSksZ3k9bnVtKCd3ay1neScsMCw4MCwxMCksYm90PW51bSgnd2stYm90JywwLEgsMTIuNSksaz1TLmdlbi5sYXk7CnZhciBveD0oVy1hdykvMixvdXQ9W107CmZ1bmN0aW9uIGdyaWQocHcscGgsdCxyKXt2YXIgbj1NYXRoLmZsb29yKChhdytneCkvKHB3K2d4KSksbT1NYXRoLmZsb29yKChhaCtneSkvKHBoK2d5KSk7aWYobjwxfHxtPDEpcmV0dXJuO3ZhciBidz1uKnB3KyhuLTEpKmd4LHgwPW94Kyhhdy1idykvMjsKZm9yKHZhciBhPTA7YTxtO2ErKylmb3IodmFyIGI9MDtiPG47YisrKW91dC5wdXNoKHt0OnQseDp4MCtiKihwdytneCkrcHcvMix5OmJvdCthKihwaCtneSkrcGgvMixyOnJ9KX0KaWYoaz09PSdsdicpZ3JpZCgzLDUwLCdMJywwKTtpZihrPT09J2xoJylncmlkKDUwLDMsJ0wnLDkwKTtpZihrPT09J292JylncmlkKDE1LDUwLCdPJywwKTtpZihrPT09J29oJylncmlkKDUwLDE1LCdPJyw5MCk7CmlmKGs9PT0nc2MnKXt2YXIgc3Q9MzArZ3gsbT1NYXRoLmZsb29yKChhaCtneSkvKDE1K2d5KSksbj1NYXRoLmZsb29yKChhdytneCkvc3QpO2lmKG4+PTEmJm0+PTEpe3ZhciBzaD1zdC8yLG4yPU1hdGguZmxvb3IoKGF3LXNoK2d4KS9zdCksYnc9biozMCsobi0xKSpneCx4MD1veCsoYXctYncpLzI7CmZvcih2YXIgYT0wO2E8bTthKyspe3ZhciBvZmY9YSUyP3NoOjAsY249YSUyP24yOm47Zm9yKHZhciBiPTA7YjxjbjtiKyspb3V0LnB1c2goe3Q6J0MnLHg6eDArb2ZmK2Iqc3QrMTUseTpib3QrYSooMTUrZ3kpKzcuNSxyOjB9KX19fQppZihrPT09J2R1Jyl7dmFyIHNlcT1bJ0wnLCdPJywnTCddLGNvbHM9W10seD0wLGk9MDt3aGlsZSh0cnVlKXt2YXIgdD1zZXFbaSUzXSx3PXQ9PT0nTCc\/MzoxNSxzdDI9Y29scy5sZW5ndGg\/eCtneDowO2lmKHN0Mit3PmF3KWJyZWFrO2NvbHMucHVzaChbdCxzdDIsd10pO3g9c3QyK3c7aSsrfQp2YXIgbTI9TWF0aC5mbG9vcigoYWgrZ3kpLyg1MCtneSkpLHgxPW94Kyhhdy14KS8yO2NvbHMuZm9yRWFjaChmdW5jdGlvbihjKXtmb3IodmFyIGE9MDthPG0yO2ErKylvdXQucHVzaCh7dDpjWzBdLHg6eDErY1sxXStjWzJdLzIseTpib3QrYSooNTArZ3kpKzI1LHI6MH0pfSl9CnZhciBiZWZvcmU9b3V0Lmxlbmd0aDtvdXQ9b3V0LmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gIWhpdHMocCkmJiFvdXRzaWRlKHApfSk7dmFyIHNraXBwZWQ9YmVmb3JlLW91dC5sZW5ndGg7ClMucGFuZWxzPW91dDtTLnNlbD1bXTsKJCgnd2stZ2VubXNnJykudGV4dENvbnRlbnQ9b3V0Lmxlbmd0aD8oJ1XFgm\/FvG9ubyAnK291dC5sZW5ndGgrJyBzenQuJysoc2tpcHBlZD8nIFBvbWluacSZdG8gJytza2lwcGVkKycgKHByemVzemtvZHkgbHViIGJyemVnIMWbY2lhbnkpLic6JycpKTonWmEgbWHFgm8gbWllanNjYSBuYSB0ZW4gdWvFgmFkLiBad2nEmWtzeiB3eW1pYXJ5IGFsYm8gem1uaWVqc3ogb2RzdMSZcHkuJzsKfQovKiAtLS0tLS0tLS0tIGludGVyYWN0aW9uIG9uIHRoZSBkcmF3aW5nIC0tLS0tLS0tLS0gKi8KdmFyIGRyYWc9bnVsbCxwdHJzPXt9OwpmdW5jdGlvbiBzdmdQdChlKXt2YXIgc3ZnPSQoJ3drLXN2ZycpLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO3ZhciBwdD1zdmcuY3JlYXRlU1ZHUG9pbnQoKTtwdC54PWUuY2xpZW50WDtwdC55PWUuY2xpZW50WTtyZXR1cm4gcHQubWF0cml4VHJhbnNmb3JtKHN2Zy5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpfQpmdW5jdGlvbiBnZXRQdChlKXtyZXR1cm4gTU9ERT09PSdwaG90byc\/cGhvdG9QdChlKTpzdmdQdChlKX0KZnVuY3Rpb24gaGl0UGFuZWwoZSxwdCl7aWYoTU9ERSE9PSdwaG90bycpe3ZhciBnPWUudGFyZ2V0LmNsb3Nlc3QoJy53ay1wbicpO3JldHVybiBnPytnLmRhdGFzZXQuaTotMX1mb3IodmFyIGk9Uy5wYW5lbHMubGVuZ3RoLTE7aT49MDtpLS0paWYocGlwKFtwdC54LHB0LnldLGNvcm5lcnMoUy5wYW5lbHNbaV0pKSlyZXR1cm4gaTtyZXR1cm4gLTF9CmZ1bmN0aW9uIGhpdE9icyhlLHB0KXtpZihNT0RFIT09J3Bob3RvJyl7dmFyIGc9ZS50YXJnZXQuY2xvc2VzdCgnLndrLW9iJyk7cmV0dXJuIGc\/K2cuZGF0YXNldC5vOi0xfWZvcih2YXIgaT1TLm9icy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIG89Uy5vYnNbaV0seT1TLkgtby55LW8uaDtpZihwdC54Pj1vLngmJnB0Lng8PW8ueCtvLncmJnB0Lnk+PXkmJnB0Lnk8PXkrby5oKXJldHVybiBpfXJldHVybiAtMX0KZnVuY3Rpb24gY2VudHJvaWQoaWRzKXt2YXIgeD0wLHk9MDtpZHMuZm9yRWFjaChmdW5jdGlvbihpKXt4Kz1TLnBhbmVsc1tpXS54O3krPVMucGFuZWxzW2ldLnl9KTtyZXR1cm4ge3g6eC9pZHMubGVuZ3RoLHk6eS9pZHMubGVuZ3RofX0KdmFyIFNURz0kKCd3ay1zdGFnZScpOwpmdW5jdGlvbiBjYXAoZSl7dHJ5e1NURy5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCl9Y2F0Y2goZXIpe319ClNURy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsZnVuY3Rpb24oZSl7CmlmKE1PREU9PT0ncGhvdG8nKXtpZighUEguaW1nfHxlLnRhcmdldC5pZCE9PSd3ay1jdicpcmV0dXJuOwppZihQSC50b29sPT09J2Nvcm5lcnMnKXt2YXIgYz1jdlB0KGUpLGJlc3Q9LTEsYmQ9MWU5O1BILnEuZm9yRWFjaChmdW5jdGlvbihxLGspe3ZhciBkPU1hdGguaHlwb3QocVswXS1jWzBdLHFbMV0tY1sxXSk7aWYoZDxiZCl7YmQ9ZDtiZXN0PWt9fSk7aWYoYmQ8TWF0aC5tYXgoNDQsUEgudy8xNikpe2RyYWc9e2tpbmQ6J2Nvcm5lcicsazpiZXN0LG9mZjpbUEgucVtiZXN0XVswXS1jWzBdLFBILnFbYmVzdF1bMV0tY1sxXV19O2NhcChlKX1yZXR1cm59CmlmKFBILnRvb2w9PT0ncGljaycpe3BpY2tDb2xvcihjdlB0KGUpKTtyZXR1cm59fQplbHNlIGlmKCFlLnRhcmdldC5jbG9zZXN0KCcjd2stc3ZnJykpcmV0dXJuOwp2YXIgcHQ9Z2V0UHQoZSk7cHRyc1tlLnBvaW50ZXJJZF09e3g6cHQueCx5OnB0Lnl9Owp2YXIgaWRzPU9iamVjdC5rZXlzKHB0cnMpOwppZihpZHMubGVuZ3RoPT09MiYmZHJhZyYmZHJhZy5raW5kPT09J3BuJyl7dmFyIGE9cHRyc1tpZHNbMF1dLGI9cHRyc1tpZHNbMV1dO2RyYWcudHdpc3Q9e2EwOk1hdGguYXRhbjIoYi55LWEueSxiLngtYS54KSxiYXNlOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZHJhZy5pZHMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBTLnBhbmVsc1tpXX0pKSksYzpjZW50cm9pZChkcmFnLmlkcyl9O3JldHVybn0KdmFyIG9pPVMudGFiPT09J3NjaWFuYSc\/aGl0T2JzKGUscHQpOi0xLGdpPVMudGFiIT09J3NjaWFuYSc\/aGl0UGFuZWwoZSxwdCk6LTE7CmlmKG9pPj0wKXtzbmFwKCk7Uy5zZWxPYnM9b2k7ZHJhZz17a2luZDonb2InLGk6b2ksc3g6cHQueCxzeTpwdC55LG94OlMub2JzW29pXS54LG95OlMub2JzW29pXS55fTtyZW5kZXIoKTtjYXAoZSk7cmV0dXJufQppZihnaT49MCl7dmFyIEFEPVMubXVsdGl8fGUuc2hpZnRLZXl8fGUuY3RybEtleXx8ZS5tZXRhS2V5LFdTPVMuc2VsLmluZGV4T2YoZ2kpPj0wLFRHPUFEJiZXUz9naTotMTtpZihBRCl7aWYoIVdTKVMuc2VsPVMuc2VsLmNvbmNhdChbZ2ldKX1lbHNlIGlmKCFXUylTLnNlbD1bZ2ldO3NuYXAoKTsKZHJhZz17a2luZDoncG4nLGlkczpTLnNlbC5zbGljZSgpLHN4OnB0Lngsc3k6cHQueSxiYXNlOlMuc2VsLm1hcChmdW5jdGlvbihqKXtyZXR1cm4ge3g6Uy5wYW5lbHNbal0ueCx5OlMucGFuZWxzW2pdLnl9fSksbW92ZWQ6ZmFsc2UsdG9nZ2xlOlRHfTtyZW5kZXIoKTtjYXAoZSk7cmV0dXJufQppZihTLnRhYj09PSdzY2lhbmEnKXtTLnNlbE9icz0tMTtyZW5kZXIoKTtyZXR1cm59CmlmKChTLm11bHRpfHxlLnNoaWZ0S2V5KSYmTU9ERSE9PSdwaG90bycpe2RyYWc9e2tpbmQ6J2JveCcseDA6cHQueCx5MDpwdC55LHgxOnB0LngseTE6cHQueX07Y2FwKGUpO3JldHVybn0KaWYoUy5zZWwubGVuZ3RoKXtTLnNlbD1bXTtyZW5kZXIoKX0KfSk7ClNURy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsZnVuY3Rpb24oZSl7CmlmKGRyYWcmJmRyYWcua2luZD09PSdjb3JuZXInKXt2YXIgYz1jdlB0KGUpO1BILnFbZHJhZy5rXT1bTWF0aC5tYXgoMCxNYXRoLm1pbihQSC53LGNbMF0rZHJhZy5vZmZbMF0pKSxNYXRoLm1heCgwLE1hdGgubWluKFBILmgsY1sxXStkcmFnLm9mZlsxXSkpXTtQSC5Ca2V5PScnO3F1aWNrKCk7cmV0dXJufQppZighcHRyc1tlLnBvaW50ZXJJZF18fCFkcmFnKXJldHVybjt2YXIgcHQ9Z2V0UHQoZSk7cHRyc1tlLnBvaW50ZXJJZF09e3g6cHQueCx5OnB0Lnl9OwppZihkcmFnLmtpbmQ9PT0nYm94Jyl7ZHJhZy54MT1wdC54O2RyYWcueTE9cHQueTtxdWljaygpO3JldHVybn0KaWYoZHJhZy5raW5kPT09J29iJyl7dmFyIG89Uy5vYnNbZHJhZy5pXTtvLng9TWF0aC5yb3VuZChNYXRoLm1pbihTLlctby53LE1hdGgubWF4KDAsZHJhZy5veCtwdC54LWRyYWcuc3gpKSk7by55PU1hdGgucm91bmQoTWF0aC5taW4oUy5ILW8uaCxNYXRoLm1heCgwLGRyYWcub3ktKHB0LnktZHJhZy5zeSkpKSk7cXVpY2soKTtyZXR1cm59CnZhciBpZHM9T2JqZWN0LmtleXMocHRycyk7CmlmKGRyYWcudHdpc3QmJmlkcy5sZW5ndGg+PTIpe3ZhciBhPXB0cnNbaWRzWzBdXSxiPXB0cnNbaWRzWzFdXSxkYT0oTWF0aC5hdGFuMihiLnktYS55LGIueC1hLngpLWRyYWcudHdpc3QuYTApKjE4MC9NYXRoLlBJOwp2YXIgdG90PU1hdGgucm91bmQoZGEpO3ZhciBzbmFwcGVkPU1hdGgucm91bmQodG90LzE1KSoxNTtpZihNYXRoLmFicyhzbmFwcGVkLXRvdCk8PTMpdG90PXNuYXBwZWQ7CnZhciByYWQ9dG90Kk1hdGguUEkvMTgwLGM9ZHJhZy50d2lzdC5jOwpkcmFnLmlkcy5mb3JFYWNoKGZ1bmN0aW9uKGlkLGspe3ZhciBiMD1kcmFnLnR3aXN0LmJhc2Vba10sZHg9YjAueC1jLngsZHk9YjAueS1jLnk7CmlmKGRyYWcuaWRzLmxlbmd0aD4xKXtTLnBhbmVsc1tpZF0ueD1jLngrZHgqTWF0aC5jb3MocmFkKStkeSpNYXRoLnNpbihyYWQpO1MucGFuZWxzW2lkXS55PWMueS1keCpNYXRoLnNpbihyYWQpK2R5Kk1hdGguY29zKHJhZCl9ClMucGFuZWxzW2lkXS5yPW5vcm1BKGIwLnIrdG90KX0pO3F1aWNrKCk7cmV0dXJufQp2YXIgZHg9cHQueC1kcmFnLnN4LGR5PXB0LnktZHJhZy5zeTtpZihNYXRoLmFicyhkeCkrTWF0aC5hYnMoZHkpPi42KWRyYWcubW92ZWQ9dHJ1ZTsKZHJhZy5pZHMuZm9yRWFjaChmdW5jdGlvbihpZCxrKXtTLnBhbmVsc1tpZF0ueD1NYXRoLnJvdW5kKChkcmFnLmJhc2Vba10ueCtkeCkqMikvMjtTLnBhbmVsc1tpZF0ueT1NYXRoLnJvdW5kKChkcmFnLmJhc2Vba10ueS1keSkqMikvMn0pO3F1aWNrKCk7Cn0pOwpmdW5jdGlvbiBlbmRQdHIoZSl7aWYoZHJhZyYmZHJhZy5raW5kPT09J2Nvcm5lcicpe2RyYWc9bnVsbDtyZW5kZXIoKTtyZXR1cm59CmRlbGV0ZSBwdHJzW2UucG9pbnRlcklkXTtpZighT2JqZWN0LmtleXMocHRycykubGVuZ3RoJiZkcmFnKXtpZihkcmFnLmtpbmQ9PT0nYm94Jyl7dmFyIGJ4MD1NYXRoLm1pbihkcmFnLngwLGRyYWcueDEpLGJ4MT1NYXRoLm1heChkcmFnLngwLGRyYWcueDEpLGJ5MD1NYXRoLm1pbihkcmFnLnkwLGRyYWcueTEpLGJ5MT1NYXRoLm1heChkcmFnLnkwLGRyYWcueTEpO1MucGFuZWxzLmZvckVhY2goZnVuY3Rpb24ocCxpKXt2YXIgc3g9cC54LHN5PVMuSC1wLnk7aWYoc3g+PWJ4MCYmc3g8PWJ4MSYmc3k+PWJ5MCYmc3k8PWJ5MSYmUy5zZWwuaW5kZXhPZihpKTwwKVMuc2VsLnB1c2goaSl9KX1pZihkcmFnLmtpbmQ9PT0ncG4nJiYhZHJhZy5tb3ZlZCYmIWRyYWcudHdpc3Qpe2hpc3QucG9wKCk7aWYoZHJhZy50b2dnbGU+PTApe3ZhciB0Zz1kcmFnLnRvZ2dsZTtTLnNlbD1TLnNlbC5maWx0ZXIoZnVuY3Rpb24oail7cmV0dXJuIGohPT10Z30pfX1kcmFnPW51bGw7cmVuZGVyKCl9ZWxzZSBpZihkcmFnJiZkcmFnLnR3aXN0JiZPYmplY3Qua2V5cyhwdHJzKS5sZW5ndGg8Mil7ZHJhZy50d2lzdD1udWxsO3ZhciBwdD1wdHJzW09iamVjdC5rZXlzKHB0cnMpWzBdXTtpZihwdCl7ZHJhZy5zeD1wdC54O2RyYWcuc3k9cHQueTtkcmFnLmJhc2U9ZHJhZy5pZHMubWFwKGZ1bmN0aW9uKGope3JldHVybiB7eDpTLnBhbmVsc1tqXS54LHk6Uy5wYW5lbHNbal0ueX19KX19fQpTVEcuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJyxlbmRQdHIpO1NURy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJyxlbmRQdHIpOwp2YXIgcXQ9MDtmdW5jdGlvbiBxdWljaygpe2lmKHF0KXJldHVybjtxdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtxdD0wOyQoJ3drLXN2ZycpLmlubmVySFRNTD1zdmdTdHJpbmcoKTtkcmF3UGhvdG8oKTtpZihkcmFnJiZkcmFnLmtpbmQ9PT0nb2InKXJlbmRlck9ic0VkaXQoKX0pfQovKiAtLS0tLS0tLS0tIHRvb2xiYXIgYWN0aW9ucyAtLS0tLS0tLS0tICovCiQoJ3drLXRvb2xzJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciBiPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFjdF0nKTtpZighYilyZXR1cm47dmFyIGE9Yi5kYXRhc2V0LmFjdDsKaWYoYS5pbmRleE9mKCdwaC0nKT09PTApe2lmKGE9PT0ncGgtbmV3Jyl7UEguaW1nPW51bGw7UEguQj1udWxsO1Muc2VsPVtdO3NldE1vZGUoJ3Bob3RvJyk7cmV0dXJufWlmKGE9PT0ncGgtcmVjb2xvcicpe1BILnJlY29sb3I9IVBILnJlY29sb3I7UEguQmtleT0nJ31lbHNle1BILnRvb2w9YS5zbGljZSgzKTtpZihQSC50b29sIT09J2VkaXQnKVMuc2VsPVtdfXJldHVybiByZW5kZXIoKX0KaWYoYT09PSd1bmRvJylyZXR1cm4gdW5kbygpOwppZihhPT09J2FsbCcpe1Muc2VsPVMucGFuZWxzLm1hcChmdW5jdGlvbihfLGkpe3JldHVybiBpfSk7cmV0dXJuIHJlbmRlcigpfQppZihhPT09J211bHRpJyl7Uy5tdWx0aT0hUy5tdWx0aTtyZXR1cm4gcmVuZGVyKCl9CmlmKGE9PT0nbm9uZScpe1Muc2VsPVtdO3JldHVybiByZW5kZXIoKX0Kc25hcCgpOwppZihhPT09J2NsZWFyJyl7Uy5wYW5lbHM9W107Uy5zZWw9W119CmlmKGE9PT0nY2VudGVyJyl7dmFyIG1ueD0xZTksbXh4PS0xZTk7Uy5wYW5lbHMuZm9yRWFjaChmdW5jdGlvbihwKXtjb3JuZXJzKHApLmZvckVhY2goZnVuY3Rpb24odil7bW54PU1hdGgubWluKG1ueCx2WzBdKTtteHg9TWF0aC5tYXgobXh4LHZbMF0pfSl9KTt2YXIgZD1TLlcvMi0obW54K214eCkvMjtTLnBhbmVscy5mb3JFYWNoKGZ1bmN0aW9uKHApe3AueD1yMShwLngrZCl9KX0KaWYoYT09PSdybCd8fGE9PT0ncnInfHxhPT09J3I5MCcpe3ZhciBkZWc9YT09PSdybCc\/LTE1OmE9PT0ncnInPzE1OjkwLGM9Y2VudHJvaWQoUy5zZWwpLHJhZD1kZWcqTWF0aC5QSS8xODA7ClMuc2VsLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHA9Uy5wYW5lbHNbaV07aWYoUy5zZWwubGVuZ3RoPjEpe3ZhciBkeD1wLngtYy54LGR5PXAueS1jLnk7cC54PXIxKGMueCtkeCpNYXRoLmNvcyhyYWQpK2R5Kk1hdGguc2luKHJhZCkpO3AueT1yMShjLnktZHgqTWF0aC5zaW4ocmFkKStkeSpNYXRoLmNvcyhyYWQpKX1wLnI9bm9ybUEocC5yK2RlZyl9KX0KaWYoYT09PSdkdXAnKXt2YXIgYWRkPVtdO1Muc2VsLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHA9Uy5wYW5lbHNbaV07YWRkLnB1c2goe3Q6cC50LHg6cC54KyhTLnNlbC5sZW5ndGg+MT8wOjgpLHk6cC55LShTLnNlbC5sZW5ndGg+MT8yMDo4KSxyOnAucixjOnAuY30pfSk7dmFyIHN0PVMucGFuZWxzLmxlbmd0aDtTLnBhbmVscz1TLnBhbmVscy5jb25jYXQoYWRkKTtTLnNlbD1hZGQubWFwKGZ1bmN0aW9uKF8sayl7cmV0dXJuIHN0K2t9KX0KaWYoYT09PSdhbC1yb3cnfHxhPT09J2FsLWNvbCcpe3ZhciBjYz1jZW50cm9pZChTLnNlbCk7Uy5zZWwuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcD1TLnBhbmVsc1tpXTtpZihhPT09J2FsLXJvdycpcC55PXIxKGNjLnkpO2Vsc2UgcC54PXIxKGNjLngpfSl9CmlmKGE9PT0nYWwtZ2FwJyl7dmFyIGJiPVMuc2VsLm1hcChmdW5jdGlvbihpKXt2YXIgeDA9MWU5LHgxPS0xZTkseTA9MWU5LHkxPS0xZTk7Y29ybmVycyhTLnBhbmVsc1tpXSkuZm9yRWFjaChmdW5jdGlvbih2KXt4MD1NYXRoLm1pbih4MCx2WzBdKTt4MT1NYXRoLm1heCh4MSx2WzBdKTt5MD1NYXRoLm1pbih5MCx2WzFdKTt5MT1NYXRoLm1heCh5MSx2WzFdKX0pO3JldHVybiB7aTppLHgwOngwLHgxOngxLHkwOnkwLHkxOnkxfX0pO3ZhciBjeD1iYi5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuIHEueDArcS54MX0pLGN5PWJiLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gcS55MCtxLnkxfSksaHo9KE1hdGgubWF4LmFwcGx5KDAsY3gpLU1hdGgubWluLmFwcGx5KDAsY3gpKT49KE1hdGgubWF4LmFwcGx5KDAsY3kpLU1hdGgubWluLmFwcGx5KDAsY3kpKSxrMD1oej8neDAnOid5MCcsazE9aHo\/J3gxJzoneTEnO2JiLnNvcnQoZnVuY3Rpb24odSx2KXtyZXR1cm4gKHVbazBdK3VbazFdKS0odltrMF0rdltrMV0pfSk7dmFyIHRvdD1iYltiYi5sZW5ndGgtMV1bazFdLWJiWzBdW2swXSxzdW09MDtiYi5mb3JFYWNoKGZ1bmN0aW9uKHEpe3N1bSs9cVtrMV0tcVtrMF19KTt2YXIgZ3A9KHRvdC1zdW0pLyhiYi5sZW5ndGgtMSksY3VyPWJiWzBdW2swXTtiYi5mb3JFYWNoKGZ1bmN0aW9uKHEpe3ZhciBkPWN1ci1xW2swXSxwPVMucGFuZWxzW3EuaV07aWYoaHopcC54PXIxKHAueCtkKTtlbHNlIHAueT1yMShwLnktZCk7Y3VyKz1xW2sxXS1xW2swXStncH0pfQppZihhPT09J2RlbCcpe1MucGFuZWxzPVMucGFuZWxzLmZpbHRlcihmdW5jdGlvbihfLGkpe3JldHVybiBTLnNlbC5pbmRleE9mKGkpPDB9KTtTLnNlbD1bXX0KcmVuZGVyKCk7Cn0pOwovKiAtLS0tLS0tLS0tIHRhYnMgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBzZXRUYWIodCl7Uy50YWI9dDtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud2stdGFiJykuZm9yRWFjaChmdW5jdGlvbihiKXtiLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsYi5kYXRhc2V0LnQ9PT10KX0pO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy53ay1wYW5lJykuZm9yRWFjaChmdW5jdGlvbihwKXtwLmhpZGRlbj1wLmRhdGFzZXQucCE9PXR9KTtpZih0PT09J3NjaWFuYScpUy5zZWw9W107ZWxzZSBTLnNlbE9icz0tMTtyZW5kZXIoKX0KJCgnd2stdGFicycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihlKXt2YXIgYj1lLnRhcmdldC5jbG9zZXN0KCcud2stdGFiJyk7aWYoYilzZXRUYWIoYi5kYXRhc2V0LnQpfSk7CiQoJ3drLWJhcmJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe3NldFRhYignemFtb3cnKTskKCd3ay10YWJzJykuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOidzbW9vdGgnLGJsb2NrOidzdGFydCd9KX0pOwovKiAtLS0tLS0tLS0tIHdhbGwgJiBvYnN0YWNsZXMgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBzeW5jSW5wdXRzKCl7JCgnd2stVycpLnZhbHVlPVMuVzskKCd3ay1IJykudmFsdWU9Uy5IOyQoJ3drLWF3JykudmFsdWU9Uy5nZW4uYXc7JCgnd2stYWgnKS52YWx1ZT1TLmdlbi5haDskKCd3ay1neCcpLnZhbHVlPVMuZ2VuLmd4OyQoJ3drLWd5JykudmFsdWU9Uy5nZW4uZ3k7JCgnd2stYm90JykudmFsdWU9Uy5nZW4uYm90OyQoJ3drLW51bXMnKS5jaGVja2VkPVMubnVtczskKCd3ay1jbXBvbicpLmNoZWNrZWQ9Uy5jbXA7JCgnd2steWllbGQnKS52YWx1ZT1TLnlpZWxkOyQoJ3drLWNvYXRzJykudmFsdWU9Uy5jb2F0czsKZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndrLW9wdCcpLmZvckVhY2goZnVuY3Rpb24oeCl7eC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcseC5kYXRhc2V0Lms9PT1TLmdlbi5sYXkpfSl9CmZ1bmN0aW9uIHdhbGxDaGFuZ2UoKXt2YXIgVz1udW0oJ3drLVcnLDUwLDEyMDAsUy5XKSxIPW51bSgnd2stSCcsNTAsNTAwLFMuSCk7aWYoVz09PVMuVyYmSD09PVMuSClyZXR1cm47dmFyIGR4PShXLVMuVykvMixkeT0oSC1TLkgpLzI7ClMucGFuZWxzLmZvckVhY2goZnVuY3Rpb24ocCl7cC54Kz1keDtpZihIIT09Uy5IKXAueSs9ZHkqKHAueT5TLkgqMC4zNT8xOjApfSk7Uy5vYnMuZm9yRWFjaChmdW5jdGlvbihvKXtvLng9TWF0aC5tYXgoMCxNYXRoLm1pbihXLW8udyxvLngrZHgpKX0pO1MuVz1XO1MuSD1IOwppZihTLmdlbi5hdz5XKXtTLmdlbi5hdz1XOyQoJ3drLWF3JykudmFsdWU9V31yZW5kZXIoKX0KJCgnd2stVycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZnVuY3Rpb24oKXtzbmFwKCk7d2FsbENoYW5nZSgpfSk7JCgnd2stSCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZnVuY3Rpb24oKXtzbmFwKCk7d2FsbENoYW5nZSgpfSk7CiQoJ3drLW9ic2FkZCcpLmlubmVySFRNTD1PYmplY3Qua2V5cyhPQlMpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gJzxidXR0b24gY2xhc3M9IndrLWIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1vYj0iJytrKyciPisgJytPQlNba10ubisnPC9idXR0b24+J30pLmpvaW4oJycpOwokKCd3ay1vYnNhZGQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7dmFyIGI9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtb2JdJyk7aWYoIWIpcmV0dXJuO3NuYXAoKTt2YXIgZD1PQlNbYi5kYXRhc2V0Lm9iXSx3PU1hdGgubWluKGQudyxTLlcpLGg9TWF0aC5taW4oZC5oLFMuSCk7ClMub2JzLnB1c2goe2s6Yi5kYXRhc2V0Lm9iLHg6TWF0aC5yb3VuZCgoUy5XLXcpLzIpLHk6TWF0aC5taW4oZC55LFMuSC1oKSx3OncsaDpofSk7Uy5zZWxPYnM9Uy5vYnMubGVuZ3RoLTE7cmVuZGVyKCl9KTsKJCgnd2stb2JzZWRpdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZnVuY3Rpb24oZSl7dmFyIGY9ZS50YXJnZXQuZGF0YXNldC5vZjtpZighZilyZXR1cm47c25hcCgpO3ZhciBvPVMub2JzW1Muc2VsT2JzXTtvW2ZdPU1hdGgubWF4KDAscGFyc2VGbG9hdChlLnRhcmdldC52YWx1ZSl8fDApO28udz1NYXRoLm1pbihvLncsUy5XKTtvLmg9TWF0aC5taW4oby5oLFMuSCk7by54PU1hdGgubWluKG8ueCxTLlctby53KTtvLnk9TWF0aC5taW4oby55LFMuSC1vLmgpO3JlbmRlcigpfSk7CiQoJ3drLW9ic2VkaXQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQuaWQ9PT0nd2stb2JzZGVsJyl7c25hcCgpO1Mub2JzLnNwbGljZShTLnNlbE9icywxKTtTLnNlbE9icz0tMTtyZW5kZXIoKX0KaWYoZS50YXJnZXQuaWQ9PT0nd2stb2JzZml4Jyl7c25hcCgpO1MucGFuZWxzPVMucGFuZWxzLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gIWhpdHMocCl9KTtyZW5kZXIoKX19KTsKLyogLS0tLS0tLS0tLSBwYXR0ZXJucyAmIGdlbmVyYXRvciBVSSAtLS0tLS0tLS0tICovCiQoJ3drLXBhdHMnKS5pbm5lckhUTUw9UkFXLm1hcChmdW5jdGlvbihwLGkpe3JldHVybiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ3ay1wYXQiIGRhdGEtcGF0PSInK2krJyI+JyttaW5pU3ZnKHBhdFBhbmVscyhwLDMwMCwyNTUpLDMwMCwyNTUpKyc8c3Bhbj4nK3AubisnPC9zcGFuPjxzbWFsbD4nK3Aud2grJzwvc21hbGw+PC9idXR0b24+J30pLmpvaW4oJycpOwokKCd3ay1wYXRzJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciBiPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXBhdF0nKTtpZighYilyZXR1cm47c25hcCgpO3ZhciBwPVJBV1srYi5kYXRhc2V0LnBhdF07Uy5wYW5lbHM9cGF0UGFuZWxzKHAsUy5XLFMuSCk7Uy5zZWw9W107cmVuZGVyKCk7VFJLKCdwcm9qZWt0YW50X3d6b3InLHt3em9yOnAubn0pOwokKCd3ay1nZW5tc2cnKS50ZXh0Q29udGVudD0nV2N6eXRhbm8gd3rDs3Ig4oCeJytwLm4rJ+KAnS4gTW\/FvGVzeiBnbyB0ZXJheiB6bWllbmlhxIcgbmEgcnlzdW5rdS4nfSk7CmZ1bmN0aW9uIGxheUljb24oayl7dmFyIG89Jzxzdmcgdmlld0JveD0iMCAwIDEyMCAyNiIgYXJpYS1oaWRkZW49InRydWUiPicsYz0nZmlsbD0iI0ZCRjlGNSIgc3Ryb2tlPSIjQjlBRTlCIiBzdHJva2Utd2lkdGg9Ii44Iic7CmlmKGs9PT0nbHYnKWZvcih2YXIgaT0wO2k8MTA7aSsrKW8rPSc8cmVjdCAnK2MrJyB4PSInKyg2K2kqMTEpKyciIHk9IjEiIHdpZHRoPSIzIiBoZWlnaHQ9IjI0Ii8+JzsKaWYoaz09PSdsaCcpZm9yKHZhciByPTA7cjw0O3IrKylmb3IodmFyIGo9MDtqPDM7aisrKW8rPSc8cmVjdCAnK2MrJyB4PSInKyg0K2oqMzgpKyciIHk9IicrKDIrcio2LjUpKyciIHdpZHRoPSIzNiIgaGVpZ2h0PSIyLjUiLz4nOwppZihrPT09J292Jylmb3IodmFyIGkyPTA7aTI8NztpMisrKW8rPSc8cmVjdCAnK2MrJyB4PSInKyg1K2kyKjE2KSsnIiB5PSIxIiB3aWR0aD0iOCIgaGVpZ2h0PSIyNCIgcng9IjQiLz4nOwppZihrPT09J29oJylmb3IodmFyIHIyPTA7cjI8MjtyMisrKWZvcih2YXIgajI9MDtqMjwzO2oyKyspbys9JzxyZWN0ICcrYysnIHg9IicrKDQrajIqMzgpKyciIHk9IicrKDMrcjIqMTEpKyciIHdpZHRoPSIzNSIgaGVpZ2h0PSI4IiByeD0iNCIvPic7CmlmKGs9PT0nc2MnKWZvcih2YXIgcjM9MDtyMzwzO3IzKyspZm9yKHZhciBqMz0wO2ozPDY7ajMrKyl7dmFyIHg9NCtqMyoxOSsocjMlMj85OjApO2lmKHg+MTA0KWNvbnRpbnVlO28rPSc8cGF0aCAnK2MrJyBkPSJNJyt4KycgJysoOStyMyo4KSsnIGE3IDcgMCAwIDEgMTQgMCBaIi8+J30KaWYoaz09PSdkdScpe3ZhciB4Mj02LHNxPVsnTCcsJ08nLCdMJ107Zm9yKHZhciBpMz0wO2kzPDk7aTMrKyl7dmFyIHQ9c3FbaTMlM107bys9dD09PSdMJz8nPHJlY3QgJytjKycgeD0iJyt4MisnIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIyNCIvPic6JzxyZWN0ICcrYysnIHg9IicreDIrJyIgeT0iMSIgd2lkdGg9IjgiIGhlaWdodD0iMjQiIHJ4PSI0Ii8+Jzt4Mis9KHQ9PT0nTCc\/Mzo4KSs4fX0KcmV0dXJuIG8rJzwvc3ZnPid9CiQoJ3drLWxheScpLmlubmVySFRNTD1MQVlTLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0id2stb3B0IiBkYXRhLWs9IicrbC5rKyciIGFyaWEtcHJlc3NlZD0iZmFsc2UiPicrbGF5SWNvbihsLmspKyc8c3Bhbj4nK2wubisnPC9zcGFuPjwvYnV0dG9uPid9KS5qb2luKCcnKTsKJCgnd2stbGF5JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciBiPWUudGFyZ2V0LmNsb3Nlc3QoJy53ay1vcHQnKTtpZighYilyZXR1cm47dmFyIGw9TEFZUy5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaz09PWIuZGF0YXNldC5rfSlbMF07Uy5nZW4ubGF5PWwuaztTLmdlbi5neD1sLmd4O1MuZ2VuLmd5PWwuZ3k7c3luY0lucHV0cygpfSk7Clsnd2stYXcnLCd3ay1haCcsJ3drLWd4Jywnd2stZ3knLCd3ay1ib3QnXS5mb3JFYWNoKGZ1bmN0aW9uKGlkKXskKGlkKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLGZ1bmN0aW9uKCl7Uy5nZW49e2xheTpTLmdlbi5sYXksYXc6bnVtKCd3ay1hdycsMTAsMTIwMCwxNjApLGFoOm51bSgnd2stYWgnLDEwLDUwMCwyMzApLGd4Om51bSgnd2stZ3gnLDAsODAsOSksZ3k6bnVtKCd3ay1neScsMCw4MCwxMCksYm90Om51bSgnd2stYm90JywwLDUwMCwxMi41KX07c2F2ZSgpfSl9KTsKJCgnd2stZ2VuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7c25hcCgpO2dlbmVyYXRlKCk7cmVuZGVyKCl9KTsKZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtYWRkXScpLmZvckVhY2goZnVuY3Rpb24oYil7Yi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXtzbmFwKCk7dmFyIHQ9Yi5kYXRhc2V0LmFkZDtTLnBhbmVscy5wdXNoKHt0OnQseDpTLlcvMix5OlMuSCowLjU1LHI6MH0pO1Muc2VsPVtTLnBhbmVscy5sZW5ndGgtMV07cmVuZGVyKCl9KX0pOwovKiAtLS0tLS0tLS0tIGNvbG91cnMgLS0tLS0tLS0tLSAqLwokKCd3ay1zd3dhbGwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7dmFyIGI9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtd2FsbF0nKTtpZighYilyZXR1cm47Uy53YWxsPWIuZGF0YXNldC53YWxsO3JlbmRlcigpfSk7CiQoJ3drLXdhbGxjJykuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLGZ1bmN0aW9uKCl7Uy53YWxsPXRoaXMudmFsdWU7JCgnd2stc3ZnJykuaW5uZXJIVE1MPXN2Z1N0cmluZygpfSk7JCgnd2std2FsbGMnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLHJlbmRlcik7CiQoJ3drLXN3cGFuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciBiPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXBhbl0nKTtpZighYilyZXR1cm47Uy5wYz1iLmRhdGFzZXQucGFuO3JlbmRlcigpfSk7CiQoJ3drLXBhbmMnKS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsZnVuY3Rpb24oKXtTLnBjPXRoaXMudmFsdWU7JCgnd2stc3ZnJykuaW5uZXJIVE1MPXN2Z1N0cmluZygpfSk7JCgnd2stcGFuYycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScscmVuZGVyKTsKJCgnd2stc2FtZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe1MucGM9J3NhbWUnO3JlbmRlcigpfSk7JCgnd2stcmF3JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7Uy5wYz0ncmF3JztyZW5kZXIoKX0pOwokKCd3ay1vbmVjb2wnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7dmFyIGI9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtb25lXScpO2lmKCFiKXJldHVybjtzbmFwKCk7dmFyIHY9Yi5kYXRhc2V0Lm9uZTtTLnNlbC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKHY9PT0ncmVzZXQnKWRlbGV0ZSBTLnBhbmVsc1tpXS5jO2Vsc2UgUy5wYW5lbHNbaV0uYz12fSk7cmVuZGVyKCl9KTsKJCgnd2stb25lY29sJykuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0LmlkIT09J3drLW9uZWMnKXJldHVybjtTLnNlbC5mb3JFYWNoKGZ1bmN0aW9uKGkpe1MucGFuZWxzW2ldLmM9ZS50YXJnZXQudmFsdWV9KTskKCd3ay1zdmcnKS5pbm5lckhUTUw9c3ZnU3RyaW5nKCl9KTsKJCgnd2stb25lY29sJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxmdW5jdGlvbihlKXtpZihlLnRhcmdldC5pZD09PSd3ay1vbmVjJylyZW5kZXIoKX0pOwokKCd3ay1jbXBvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZnVuY3Rpb24oKXtTLmNtcD10aGlzLmNoZWNrZWQ7cmVuZGVyKCl9KTsKJCgnd2stY21wdicpLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxmdW5jdGlvbigpe1MuY21wdj0rdGhpcy52YWx1ZTskKCd3ay1zdmcnKS5pbm5lckhUTUw9c3ZnU3RyaW5nKCl9KTsKJCgnd2stbnVtcycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZnVuY3Rpb24oKXtTLm51bXM9dGhpcy5jaGVja2VkO3JlbmRlcigpfSk7Clsnd2steWllbGQnLCd3ay1jb2F0cyddLmZvckVhY2goZnVuY3Rpb24oaWQpeyQoaWQpLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxmdW5jdGlvbigpe1MueWllbGQ9bnVtKCd3ay15aWVsZCcsNCwyMCwxMCk7Uy5jb2F0cz1udW0oJ3drLWNvYXRzJywxLDQsMik7cmVuZGVyUGxhbigpO3NhdmUoKX0pfSk7Ci8qIC0tLS0tLS0tLS0gc2l0ZSBhY3Rpb25zIChjYXJ0LCBwcmludCwgc2hhcmUpIC0tLS0tLS0tLS0gKi8KdmFyIE9OU0lURT0vKF58XC4pd2lzcGVyb1wucGwkLy50ZXN0KGxvY2F0aW9uLmhvc3RuYW1lKTsKZnVuY3Rpb24gVFJLKG4scCl7dHJ5e2lmKE9OU0lURSYmdHlwZW9mIGd0YWc9PT0nZnVuY3Rpb24nKWd0YWcoJ2V2ZW50JyxuLHB8fHt9KX1jYXRjaChlKXt9fQpmdW5jdGlvbiBtc2coaWQsdCxvayl7dmFyIG09JChpZCk7bS50ZXh0Q29udGVudD10O20uaGlkZGVuPWZhbHNlO20uY2xhc3NOYW1lPSd3ay1tc2cnKyhvaz8nIG9rJzonJyl9CmFzeW5jIGZ1bmN0aW9uIGFkZFRvQ2FydChpdGVtcyl7Zm9yKHZhciBpPTA7aTxpdGVtcy5sZW5ndGg7aSsrKXt2YXIgZmQ9bmV3IEZvcm1EYXRhKCk7ZmQuYXBwZW5kKCdwcm9kdWN0X2lkJyxpdGVtc1tpXVswXSk7ZmQuYXBwZW5kKCdxdWFudGl0eScsaXRlbXNbaV1bMV0pO3ZhciByPWF3YWl0IGZldGNoKCcvP3djLWFqYXg9YWRkX3RvX2NhcnQnLHttZXRob2Q6J1BPU1QnLGJvZHk6ZmQsY3JlZGVudGlhbHM6J3NhbWUtb3JpZ2luJ30pO3ZhciBqPWF3YWl0IHIuanNvbigpO2lmKGouZXJyb3IpdGhyb3cgMH19CiQoJ3drLWNhcnQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsYXN5bmMgZnVuY3Rpb24oKXt2YXIgdD10b3RhbHMoKSxpdGVtcz1bXTtbJ0wnLCdPJywnQyddLmZvckVhY2goZnVuY3Rpb24oayl7aWYodC5jW2tdKWl0ZW1zLnB1c2goW1Bba10uaWQsdC5jW2tdXSl9KTsKaWYoIU9OU0lURSlyZXR1cm4gbXNnKCd3ay1jYXJ0bXNnJywnVG8gamVzdCBwb2RnbMSFZC4gTmEgd2lzcGVyby5wbCB0ZW4gcHJ6eWNpc2sgZG9kYSB3c3p5c3RraWUgcGFuZWxlIGRvIGtvc3p5a2EuJyk7CnZhciBiPXRoaXMsbGJsPWIudGV4dENvbnRlbnQ7Yi5kaXNhYmxlZD10cnVlO2IudGV4dENvbnRlbnQ9J0RvZGFqxJnigKYnOwp0cnl7YXdhaXQgYWRkVG9DYXJ0KGl0ZW1zKTt0cnl7dmFyIGVjPWVuY29kZSgpO2lmKGVjLmxlbmd0aDwzODAwKWRvY3VtZW50LmNvb2tpZT0nd2tfZGVzaWduPScrZWMrJztwYXRoPS87bWF4LWFnZT02MDQ4MDA7U2FtZVNpdGU9TGF4J31jYXRjaChlcil7fVRSSygncHJvamVrdGFudF9kb19rb3N6eWthJyx7c3p0Oml0ZW1zLnJlZHVjZShmdW5jdGlvbihzLHgpe3JldHVybiBzK3hbMV19LDApLGplenlrOkVOPydlbic6J3BsJ30pO2F3YWl0IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe3NldFRpbWVvdXQociwzMDApfSk7bG9jYXRpb24uaHJlZj1FTj8nL2VuL2tvc3p5ay8nOicva29zenlrLyd9Y2F0Y2goZSl7Yi5kaXNhYmxlZD1mYWxzZTtiLnRleHRDb250ZW50PWxibDttc2coJ3drLWNhcnRtc2cnLCdOaWUgdWRhxYJvIHNpxJkgZG9kYcSHIHBhbmVsaSBkbyBrb3N6eWthLiBTcHLDs2J1aiBwb25vd25pZSBhbGJvIG5hcGlzejogc2tsZXBAd2lzcGVyby5wbCcpfX0pOwokKCd3ay1zYW1wbGViJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGFzeW5jIGZ1bmN0aW9uKCl7VFJLKCdwcm9qZWt0YW50X3plc3Rhd19wcm9ibnknKTtpZighT05TSVRFKXJldHVybiBtc2coJ3drLWNhcnRtc2cnLCdUbyBqZXN0IHBvZGdsxIVkLiBOYSB3aXNwZXJvLnBsIHByenljaXNrIGRvZGEgemVzdGF3IHByw7NibnkgZG8ga29zenlrYS4nKTsKdHJ5e2F3YWl0IGFkZFRvQ2FydChbW1NBTVBMRV9JRCwxXV0pO2xvY2F0aW9uLmhyZWY9RU4\/Jy9lbi9rb3N6eWsvJzonL2tvc3p5ay8nfWNhdGNoKGUpe21zZygnd2stY2FydG1zZycsJ05pZSB1ZGHFgm8gc2nEmSBkb2RhxIcgemVzdGF3dS4gTmFwaXN6OiBza2xlcEB3aXNwZXJvLnBsJyl9fSk7CiQoJ3drLXByaW50JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7VFJLKCdwcm9qZWt0YW50X2RydWt1aicpOwp2YXIgcm93cz1TLnBhbmVscy5tYXAoZnVuY3Rpb24ocCxpKXtyZXR1cm4gJzx0cj48dGQ+JysoaSsxKSsnPC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+JytQW3AudF0uc2hvcnQrJzwvdGQ+PHRkPicrY20ocC54KSsnPC90ZD48dGQ+JytjbShwLnkpKyc8L3RkPjx0ZD4nKyhwLnI\/Y20ocC5yKSsnwrAnOifigJQnKSsnPC90ZD48L3RyPid9KS5qb2luKCcnKTsKdmFyIHQ9dG90YWxzKCksbGlzdD1bJ0wnLCdPJywnQyddLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gdC5jW2tdfSkubWFwKGZ1bmN0aW9uKGspe3JldHVybiBQW2tdLm5hbWUrJzogJyt0LmNba10rJyBzenQuJ30pLmpvaW4oJyDCtyAnKTsKJCgnd2stcHJpbnRhcmVhJykuaW5uZXJIVE1MPSc8aDI+UGxhbiBtb250YcW8dSBwYW5lbGkgV2lzcGVybyDCtyDFm2NpYW5hICcrY20oUy5XKSsnIMOXICcrY20oUy5IKSsnIGNtPC9oMj48cCBzdHlsZT0iZm9udDoxMnB4IEFyaWFsIj4nK2xpc3QrJy4gV3ltaWFyeSBkbyDFm3JvZGthIHBhbmVsdTogb2QgbGV3ZWoga3Jhd8SZZHppIMWbY2lhbnkgaSBvZCBwb2TFgm9naS48L3A+JytzdmdTdHJpbmcoe251bXM6dHJ1ZSxwbGFpbjp0cnVlfSkrJzx0YWJsZT48dGhlYWQ+PHRyPjx0aD5OcjwvdGg+PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPlBhbmVsPC90aD48dGg+T2QgbGV3ZWogKGNtKTwvdGg+PHRoPk9kIHBvZMWCb2dpIChjbSk8L3RoPjx0aD5PYnLDs3Q8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+Jytyb3dzKyc8L3Rib2R5PjwvdGFibGU+JzsKdHJ5e3dpbmRvdy5wcmludCgpfWNhdGNoKGUpe30KaWYoIU9OU0lURSltc2coJ3drLXByaW50bXNnJywnVyBwb2RnbMSFZHppZSBkcnVrb3dhbmllIGplc3Qgd3nFgsSFY3pvbmUuIE5hIHdpc3Blcm8ucGwgb3R3b3J6eSBzacSZIG9rbm8gZHJ1a293YW5pYSB6IHJ5c3Vua2llbSBpIHRhYmVsxIUuJyk7Cn0pOwpmdW5jdGlvbiBlbmNvZGUoKXt2YXIgbz17VzpTLlcsSDpTLkgsdzpTLndhbGwscDpTLnBjLGE6Uy5wYW5lbHMubWFwKGZ1bmN0aW9uKHApe3ZhciByPVtwLnQscjEocC54KSxyMShwLnkpLHAucl07aWYocC5jKXIucHVzaChwLmMpO3JldHVybiByfSksbzpTLm9icy5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIFt4LmsseC54LHgueSx4LncseC5oXX0pfTsKcmV0dXJuIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KG8pKSkpLnJlcGxhY2UoL1wrL2csJy0nKS5yZXBsYWNlKC9cLy9nLCdfJykucmVwbGFjZSgvPSskLywnJyl9CmZ1bmN0aW9uIGRlY29kZShzKXt0cnl7dmFyIG89SlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGF0b2Iocy5yZXBsYWNlKC8tL2csJysnKS5yZXBsYWNlKC9fL2csJy8nKSkpKSk7Uy5XPW8uVztTLkg9by5IO1Mud2FsbD1vLnc7Uy5wYz1vLnA7Uy5wYW5lbHM9by5hLm1hcChmdW5jdGlvbihyKXt2YXIgcD17dDpyWzBdLHg6clsxXSx5OnJbMl0scjpyWzNdfTtpZihyWzRdKXAuYz1yWzRdO3JldHVybiBwfSk7Uy5vYnM9KG8ub3x8W10pLm1hcChmdW5jdGlvbihyKXtyZXR1cm4ge2s6clswXSx4OnJbMV0seTpyWzJdLHc6clszXSxoOnJbNF19fSk7cmV0dXJuIHRydWV9Y2F0Y2goZSl7cmV0dXJuIGZhbHNlfX0KZnVuY3Rpb24gbGluaygpe3JldHVybiAoT05TSVRFP2xvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZTooRU4\/J2h0dHBzOi8vd2lzcGVyby5wbC9lbi9rYWxrdWxhdG9yLXBhbmVsaS8nOidodHRwczovL3dpc3Blcm8ucGwva2Fsa3VsYXRvci1wYW5lbGkvJykpKycjcD0nK2VuY29kZSgpfQokKCd3ay1zaGFyZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxhc3luYyBmdW5jdGlvbigpe3ZhciB1PWxpbmsoKTtUUksoJ3Byb2pla3RhbnRfdWRvc3RlcG5paicpOwppZihuYXZpZ2F0b3Iuc2hhcmUpe3RyeXthd2FpdCBuYXZpZ2F0b3Iuc2hhcmUoe3RpdGxlOkVOPydNeSBXaXNwZXJvIHdhbGwgZGVzaWduJzonTcOzaiBwcm9qZWt0IMWbY2lhbnkgV2lzcGVybycsdXJsOnV9KTtyZXR1cm59Y2F0Y2goZSl7fX0KdHJ5e2F3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHUpO21zZygnd2stc2hhcmVtc2cnLCdMaW5rIHNrb3Bpb3dhbnkuIFdrbGVqIGdvIHcgd2lhZG9tb8WbY2kuJyx0cnVlKX1jYXRjaChlKXttc2coJ3drLXNoYXJlbXNnJywnU2tvcGl1aiBsaW5rIHBvbmnFvGVqOicpfQokKCd3ay1saW5rYm94JykudGV4dENvbnRlbnQ9dTskKCd3ay1saW5rYm94JykuaGlkZGVuPWZhbHNlfSk7CmZ1bmN0aW9uIHNoYXJlQmxvYihibCl7KGFzeW5jIGZ1bmN0aW9uKCl7dmFyIGY9bmV3IEZpbGUoW2JsXSwncHJvamVrdC1zY2lhbnktd2lzcGVyby5wbmcnLHt0eXBlOidpbWFnZS9wbmcnfSk7CmlmKG5hdmlnYXRvci5jYW5TaGFyZSYmbmF2aWdhdG9yLmNhblNoYXJlKHtmaWxlczpbZl19KSl7dHJ5e2F3YWl0IG5hdmlnYXRvci5zaGFyZSh7ZmlsZXM6W2ZdLHRpdGxlOkVOPydXaXNwZXJvIHdhbGwgZGVzaWduJzonUHJvamVrdCDFm2NpYW55IFdpc3Blcm8nfSk7cmV0dXJufWNhdGNoKGUpe319CmlmKCFPTlNJVEUpcmV0dXJuIG1zZygnd2stc2hhcmVtc2cnLCdXIHBvZGdsxIVkemllIHphcGlzeXdhbmllIHBsaWvDs3cgamVzdCB3ecWCxIVjem9uZS4gTmEgd2lzcGVyby5wbCBvYnJheiB6YXBpc3plIHNpxJkgbmEgdXJ6xIVkemVuaXUuJyk7CnZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTthLmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChibCk7YS5kb3dubG9hZD0ncHJvamVrdC1zY2lhbnktd2lzcGVyby5wbmcnO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7YS5jbGljaygpO2EucmVtb3ZlKCk7bXNnKCd3ay1zaGFyZW1zZycsJ09icmF6IHphcGlzYW55LicsdHJ1ZSl9KSgpfQokKCd3ay1wbmcnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXtUUksoJ3Byb2pla3RhbnRfemFwaXN6X29icmF6Jyk7aWYoTU9ERT09PSdwaG90bycmJlBILmltZyl7dmFyIHQwPVBILnRvb2wsczA9Uy5zZWw7UEgudG9vbD0nZWRpdCc7Uy5zZWw9W107ZHJhd1Bob3RvKHtjbGVhbjp0cnVlfSk7JCgnd2stY3YnKS50b0Jsb2IoZnVuY3Rpb24oYmwpe3NoYXJlQmxvYihibCk7UEgudG9vbD10MDtTLnNlbD1zMDtkcmF3UGhvdG8oKX0sJ2ltYWdlL3BuZycpO3JldHVybn0KdmFyIHN2Zz1zdmdTdHJpbmcoe3BsYWluOnRydWV9KSxpbWc9bmV3IEltYWdlKCksdmI9c3ZnLm1hdGNoKC92aWV3Qm94PSIoW14iXSspIi8pWzFdLnNwbGl0KCcgJykubWFwKE51bWJlciksc2M9MTYwMC92YlsyXTsKaW1nLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO2Mud2lkdGg9MTYwMDtjLmhlaWdodD1NYXRoLnJvdW5kKHZiWzNdKnNjKTt2YXIgeD1jLmdldENvbnRleHQoJzJkJyk7eC5maWxsU3R5bGU9JyNGNkYyRUMnO3guZmlsbFJlY3QoMCwwLGMud2lkdGgsYy5oZWlnaHQpO3guZHJhd0ltYWdlKGltZywwLDAsYy53aWR0aCxjLmhlaWdodCk7CmMudG9CbG9iKGFzeW5jIGZ1bmN0aW9uKGJsKXt2YXIgZj1uZXcgRmlsZShbYmxdLCdwcm9qZWt0LXNjaWFueS13aXNwZXJvLnBuZycse3R5cGU6J2ltYWdlL3BuZyd9KTsKaWYobmF2aWdhdG9yLmNhblNoYXJlJiZuYXZpZ2F0b3IuY2FuU2hhcmUoe2ZpbGVzOltmXX0pKXt0cnl7YXdhaXQgbmF2aWdhdG9yLnNoYXJlKHtmaWxlczpbZl0sdGl0bGU6RU4\/J1dpc3Blcm8gd2FsbCBkZXNpZ24nOidQcm9qZWt0IMWbY2lhbnkgV2lzcGVybyd9KTtyZXR1cm59Y2F0Y2goZSl7fX0KaWYoIU9OU0lURSlyZXR1cm4gbXNnKCd3ay1zaGFyZW1zZycsJ1cgcG9kZ2zEhWR6aWUgemFwaXN5d2FuaWUgcGxpa8OzdyBqZXN0IHd5xYLEhWN6b25lLiBOYSB3aXNwZXJvLnBsIG9icmF6IHphcGlzemUgc2nEmSBuYSB1cnrEhWR6ZW5pdS4nKTsKdmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2EuaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKGJsKTthLmRvd25sb2FkPSdwcm9qZWt0LXNjaWFueS13aXNwZXJvLnBuZyc7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTthLmNsaWNrKCk7YS5yZW1vdmUoKTttc2coJ3drLXNoYXJlbXNnJywnT2JyYXogemFwaXNhbnkuJyx0cnVlKX0sJ2ltYWdlL3BuZycpfTsKaW1nLnNyYz0nZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJytlbmNvZGVVUklDb21wb25lbnQoc3ZnKX0pOwokKCd3ay1tYWlsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7VFJLKCdwcm9qZWt0YW50X3d5c2xpal9kb193aXNwZXJvJyk7dmFyIHQ9dG90YWxzKCksbGlzdD1bJ0wnLCdPJywnQyddLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gdC5jW2tdfSkubWFwKGZ1bmN0aW9uKGspe3JldHVybiAnLSAnKyhFTj9UWChQW2tdLm5hbWUpOlBba10ubmFtZSkrJzogJyt0LmNba10rKEVOPycgcGNzJzonIHN6dC4nKX0pLmpvaW4oJ1xuJyk7CnZhciBib2R5PUVOPydIZWxsbyxcblxuaGVyZSBpcyBteSB3YWxsIGRlc2lnbiAoJytjbShTLlcpKycgw5cgJytjbShTLkgpKycgY20pOlxuJytsaW5rKCkrJ1xuXG4nK2xpc3QrJ1xuXG5NeSBxdWVzdGlvbjpcbic6J0R6aWXFhCBkb2JyeSxcblxucHJ6ZXN5xYJhbSBtw7NqIHByb2pla3QgxZtjaWFueSAoJytjbShTLlcpKycgw5cgJytjbShTLkgpKycgY20pOlxuJytsaW5rKCkrJ1xuXG4nK2xpc3QrJ1xuXG5Nb2plIHB5dGFuaWU6XG4nOwokKCd3ay1saW5rYm94JykudGV4dENvbnRlbnQ9J3NrbGVwQHdpc3Blcm8ucGwnOyQoJ3drLWxpbmtib3gnKS5oaWRkZW49ZmFsc2U7bXNnKCd3ay1zaGFyZW1zZycsJ090d2llcmFtIHBvY3p0xJkuIEplxZtsaSBzacSZIG5pZSBvdHdvcnp5LCBuYXBpc3ogbmEgYWRyZXMgcG9uacW8ZWogaSB3a2xlaiBsaW5rIGRvIHByb2pla3R1LicsdHJ1ZSk7CmxvY2F0aW9uLmhyZWY9J21haWx0bzpza2xlcEB3aXNwZXJvLnBsP3N1YmplY3Q9JytlbmNvZGVVUklDb21wb25lbnQoRU4\/J1dhbGwgcGFuZWwgZGVzaWduJzonUHJvamVrdCDFm2NpYW55IHogcGFuZWxhbWknKSsnJmJvZHk9JytlbmNvZGVVUklDb21wb25lbnQoYm9keSl9KTsKLyogLS0tLS0tLS0tLSBFbmdsaXNoIHZlcnNpb24gKHdpc3Blcm8ucGwvZW4vKSAtLS0tLS0tLS0tICovCnZhciBFTj0vXlwvZW4oXC98JCkvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpfHxsb2NhdGlvbi5oYXNoPT09JyNlbic7CnZhciBEPXsKJ1BhbmVsZSDFm2NpZW5uZSAzRCDCtyBwcm9qZWt0YW50JzonM0Qgd2FsbCBwYW5lbHMgwrcgZGVzaWduZXInLCdaYXByb2pla3R1aiBzd29qxIUgxZtjaWFuxJkgeiBwYW5lbGFtaSc6J0Rlc2lnbiB5b3VyIHdhbGwgd2l0aCBwYW5lbHMnLAonV3Bpc3ogd3ltaWFyeSDFm2NpYW55LCB3eWJpZXJ6IGdvdG93eSB3esOzciBhbGJvIHXFgsOzxbwgd8WCYXNueS4gUHJ6ZXN1d2FqIHBhbmVsZSBwYWxjZW0sIG9icmFjYWogZHdvbWEgcGFsY2FtaSwgem1pZW5pYWoga29sb3J5LiBOYSBrb8WEY3UgZG9zdGFuaWVzeiBwbGFuIG1vbnRhxbx1IGkgbGlzdMSZIHpha3Vww7N3Lic6J0VudGVyIHlvdXIgd2FsbCBzaXplLCBwaWNrIGEgcmVhZHktbWFkZSBwYXR0ZXJuIG9yIGNyZWF0ZSB5b3VyIG93bi4gTW92ZSBwYW5lbHMgd2l0aCB5b3VyIGZpbmdlciwgcm90YXRlIHRoZW0gd2l0aCB0d28gZmluZ2VycyBhbmQgY2hhbmdlIGNvbG91cnMuIEF0IHRoZSBlbmQgeW91IGdldCBhbiBpbnN0YWxsYXRpb24gcGxhbiBhbmQgYSBzaG9wcGluZyBsaXN0LicsCidXaWRvayc6J1ZpZXcnLCdSeXN1bmVrJzonRHJhd2luZycsJ05hIHpkasSZY2l1IG1vamVqIMWbY2lhbnknOidPbiBhIHBob3RvIG9mIG15IHdhbGwnLCdab2JhY3ogcGFuZWxlIG5hIHN3b2plaiDFm2NpYW5pZSc6J1NlZSB0aGUgcGFuZWxzIG9uIHlvdXIgd2FsbCcsCidacsOzYiB6ZGrEmWNpZSDFm2NpYW55IG1vxbxsaXdpZSBuYSB3cHJvc3QsIHByenkgZG9icnltIMWbd2lldGxlLCB0YWsgxbxlYnkgYnnFgm8gd2lkYcSHIGplaiByb2dpLiBaZGrEmWNpZSB6b3N0YWplIG5hIFR3b2ltIHVyesSFZHplbml1LCBuaWdkemllIGdvIG5pZSB3eXN5xYJhbXkuJzonVGFrZSBhIHBob3RvIG9mIHRoZSB3YWxsIGFzIHN0cmFpZ2h0LW9uIGFzIHlvdSBjYW4sIGluIGdvb2QgbGlnaHQsIHdpdGggaXRzIGNvcm5lcnMgdmlzaWJsZS4gVGhlIHBob3RvIHN0YXlzIG9uIHlvdXIgZGV2aWNlOyB3ZSBuZXZlciB1cGxvYWQgaXQuJywKJ1pyw7NiIHpkasSZY2llJzonVGFrZSBhIHBob3RvJywnV3liaWVyeiB6IGdhbGVyaWknOidDaG9vc2UgZnJvbSBnYWxsZXJ5JywnUHJ6ZWQnOidCZWZvcmUnLCdQbyc6J0FmdGVyJywKJ8WaY2lhbmEnOidXYWxsJywnV3rDs3InOidQYXR0ZXJuJywnS29sb3J5JzonQ29sb3VycycsJ1BsYW4gaSBmYXJiYSc6J1BsYW4gJiBwYWludCcsJ1phbcOzd2llbmllJzonT3JkZXInLAonV3ltaWFyeSDFm2NpYW55JzonV2FsbCBzaXplJywnU3plcm9rb8WbxIcnOidXaWR0aCcsJ1d5c29rb8WbxIcnOidIZWlnaHQnLCdabWllcnogY2HFgsSFIMWbY2lhbsSZIG9kIHBvZMWCb2dpIGRvIHN1Zml0dS4gV3pvcnkgdXN0YXdpxIUgc2nEmSBuYSDFm3JvZGt1Lic6J01lYXN1cmUgdGhlIHdob2xlIHdhbGwgZnJvbSBmbG9vciB0byBjZWlsaW5nLiBQYXR0ZXJucyB3aWxsIGJlIGNlbnRyZWQuJywKJ1ByemVzemtvZHkgbmEgxZtjaWFuaWUnOidPYnN0YWNsZXMgb24gdGhlIHdhbGwnLCdEb2RhaiBnbmlhemRrYSwgd8WCxIVjem5pa2ksIG9rbm8gYWxibyB0ZWxld2l6b3IuIEdkeSB0YSB6YWvFgmFka2EgamVzdCBvdHdhcnRhLCBwcnplc3prb2R5IHByemVzdXdhc3ogcGFsY2VtIG5hIHJ5c3Vua3UuIEdlbmVyYXRvciB3em9ydSBwb21pbmllIHBhbmVsZSwga3TDs3JlIG5hIG5pZSBuYWNob2R6xIUuJzonQWRkIHNvY2tldHMsIHN3aXRjaGVzLCBhIHdpbmRvdyBvciBhIFRWLiBXaGlsZSB0aGlzIHRhYiBpcyBvcGVuIHlvdSBjYW4gbW92ZSBvYnN0YWNsZXMgd2l0aCB5b3VyIGZpbmdlciBvbiB0aGUgZHJhd2luZy4gVGhlIGxheW91dCBnZW5lcmF0b3Igc2tpcHMgcGFuZWxzIHRoYXQgd291bGQgb3ZlcmxhcCB0aGVtLicsCidHb3Rvd2Ugd3pvcnkgV2lzcGVybyc6J1dpc3Blcm8gcmVhZHktbWFkZSBwYXR0ZXJucycsJ1djenl0YWogd3rDs3IgaSBwcnplcsOzYiBnbyBwbyBzd29qZW11OiBwcnplc3XFhCwgb2Jyw7PEhywgZG9kYWogYWxibyB1c3XFhCBwYW5lbGUuJzonTG9hZCBhIHBhdHRlcm4gYW5kIG1ha2UgaXQgeW91ciBvd246IG1vdmUsIHJvdGF0ZSwgYWRkIG9yIHJlbW92ZSBwYW5lbHMuJywKJ1fFgmFzbnkgdWvFgmFkIHogc2lhdGtpJzonWW91ciBvd24gZ3JpZCBsYXlvdXQnLCdTemVyb2tvxZvEhyB1a8WCYWR1JzonTGF5b3V0IHdpZHRoJywnV3lzb2tvxZvEhyB1a8WCYWR1JzonTGF5b3V0IGhlaWdodCcsJ09kc3TEmXAgcG96aW9tbyc6J0hvcml6b250YWwgZ2FwJywnT2RzdMSZcCBwaW9ub3dvJzonVmVydGljYWwgZ2FwJywnT2QgcG9kxYJvZ2knOidGcm9tIGZsb29yJywnVcWCw7PFvCBwYW5lbGUnOidQbGFjZSBwYW5lbHMnLAonRG9kYWogcG9qZWR5bmN6eSBwYW5lbCc6J0FkZCBhIHNpbmdsZSBwYW5lbCcsJysgTGlzdHdhIDUwIMOXIDMnOicrIFNsYXQgNTAgw5cgMycsJysgT3dhbCA1MCDDlyAxNSc6JysgT3ZhbCA1MCDDlyAxNScsJysgUMOzxYJrb2xlIMOYIDMwJzonKyBIYWxmLWNpcmNsZSDDmCAzMCcsCidOb3d5IHBhbmVsIHBvamF3aSBzacSZIG5hIMWbcm9ka3UgxZtjaWFueS4gRG90a25paiBwYW5lbHUsIGFieSBnbyB6YXpuYWN6ecSHLCBwcnplY2nEhWduaWosIGFieSBwcnplc3VuxIXEhywgb2Jyw7PEhyBkd29tYSBwYWxjYW1pIGFsYm8gcHJ6eWNpc2thbWkgcG9kIHJ5c3Vua2llbS4nOidBIG5ldyBwYW5lbCBhcHBlYXJzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHdhbGwuIFRhcCBhIHBhbmVsIHRvIHNlbGVjdCBpdCwgZHJhZyB0byBtb3ZlIGl0LCByb3RhdGUgaXQgd2l0aCB0d28gZmluZ2VycyBvciB3aXRoIHRoZSBidXR0b25zIGJlbG93IHRoZSBkcmF3aW5nLicsCidLb2xvciDFm2NpYW55JzonV2FsbCBjb2xvdXInLCdXxYJhc255IGtvbG9yIMWbY2lhbnknOidDdXN0b20gd2FsbCBjb2xvdXInLCdXxYJhc255IGtvbG9yIChucC4geiB3em9ybmlrYSBmYXJieSknOidDdXN0b20gY29sb3VyIChlLmcuIGZyb20gYSBwYWludCBjaGFydCknLCdLb2xvciBwYW5lbGknOidQYW5lbCBjb2xvdXInLCdKYWsgxZtjaWFuYSc6J1NhbWUgYXMgd2FsbCcsJ1N1cm93ZSwgcHJ6ZWQgbWFsb3dhbmllbSc6J1JhdywgYmVmb3JlIHBhaW50aW5nJywnV8WCYXNueSBrb2xvciBwYW5lbGknOidDdXN0b20gcGFuZWwgY29sb3VyJywnV8WCYXNueSBrb2xvciB3c3p5c3RraWNoIHBhbmVsaSc6J0N1c3RvbSBjb2xvdXIgZm9yIGFsbCBwYW5lbHMnLAonUGFuZWxlIHcga29sb3J6ZSDFm2NpYW55IGRhasSFIGVsZWdhbmNrxIUgZmFrdHVyxJkuIElubnkga29sb3IgdG8gbW9jbnkgYWtjZW50Lic6J1BhbmVscyBpbiB0aGUgd2FsbCBjb2xvdXIgY3JlYXRlIGFuIGVsZWdhbnQgdGV4dHVyZS4gQSBkaWZmZXJlbnQgY29sb3VyIG1ha2VzIGEgYm9sZCBhY2NlbnQuJywKJ0tvbG9yIGplZG5lZ28gcGFuZWx1JzonQ29sb3VyIG9mIGEgc2luZ2xlIHBhbmVsJywnUHJ6ZWQgaSBwbyc6J0JlZm9yZSBhbmQgYWZ0ZXInLCdQb2thxbwgc3V3YWsgcG9yw7N3bmFuaWEgcG9kIHJ5c3Vua2llbSc6J1Nob3cgYSBjb21wYXJpc29uIHNsaWRlciBiZWxvdyB0aGUgZHJhd2luZycsCidQbGFuIG1vbnRhxbx1JzonSW5zdGFsbGF0aW9uIHBsYW4nLCdLYcW8ZHkgcGFuZWwgbWEgbnVtZXIgbmEgcnlzdW5rdS4gWmF6bmFjeiBvxYLDs3draWVtIMWbcm9kZWsgcGFuZWx1IHdlZMWCdWcgdGFiZWxpIGkgcHJ6ecWCw7PFvCBwYW5lbCDFm3JvZGtpZW0uIFXFvHlqIHBvemlvbWljeSBhbGJvIGxhc2VyYS4nOidFYWNoIHBhbmVsIGhhcyBhIG51bWJlciBvbiB0aGUgZHJhd2luZy4gTWFyayB0aGUgcGFuZWwgY2VudHJlIHdpdGggYSBwZW5jaWwgdXNpbmcgdGhlIHRhYmxlIGFuZCBwbGFjZSB0aGUgcGFuZWwgYnkgaXRzIGNlbnRyZS4gVXNlIGEgc3Bpcml0IGxldmVsIG9yIGEgbGFzZXIuJywKJ1Bva2HFvCBudW1lcnkgbmEgcnlzdW5rdSc6J1Nob3cgbnVtYmVycyBvbiB0aGUgZHJhd2luZycsJ05yJzonTm8uJywnUGFuZWwnOidQYW5lbCcsJ09kIGxld2VqJzonRnJvbSBsZWZ0JywnT2Jyw7N0JzonUm90YXRpb24nLAonV3ltaWFyeSBkbyDFm3JvZGthIHBhbmVsdSwgdyBjZW50eW1ldHJhY2guIE9icsOzdCB6Z29kbmllIHogcnVjaGVtIHdza2F6w7N3ZWsgemVnYXJhLic6J01lYXN1cmVtZW50cyB0byB0aGUgcGFuZWwgY2VudHJlLCBpbiBjZW50aW1ldHJlcy4gUm90YXRpb24gaXMgY2xvY2t3aXNlLicsCidEcnVrdWogcGxhbiBtb250YcW8dSc6J1ByaW50IGluc3RhbGxhdGlvbiBwbGFuJywnSWxlIGZhcmJ5IGt1cGnEhyc6J0hvdyBtdWNoIHBhaW50IHRvIGJ1eScsJ1d5ZGFqbm\/Fm8SHIGZhcmJ5JzonUGFpbnQgY292ZXJhZ2UnLCdMaWN6YmEgd2Fyc3R3JzonTnVtYmVyIG9mIGNvYXRzJywKJ1d5ZGFqbm\/Fm8SHIHpuYWpkemllc3ogbmEgcHVzemNlLiBMaWN6eW15IGNhxYLEhSDFm2NpYW7EmSBiZXogb2tpZW4gaSBkcnp3aSBvcmF6IHBhbmVsZSByYXplbSB6IGtyYXfEmWR6aWFtaS4nOidZb3Ugd2lsbCBmaW5kIHRoZSBjb3ZlcmFnZSBvbiB0aGUgdGluLiBXZSBjb3VudCB0aGUgd2hvbGUgd2FsbCB3aXRob3V0IHdpbmRvd3MgYW5kIGRvb3JzLCBwbHVzIHRoZSBwYW5lbHMgaW5jbHVkaW5nIHRoZWlyIGVkZ2VzLicsCidMaXN0YSB6YWt1cMOzdyc6J1Nob3BwaW5nIGxpc3QnLCdEb2RhaiB3c3p5c3RrbyBkbyBrb3N6eWthJzonQWRkIGV2ZXJ5dGhpbmcgdG8gY2FydCcsJ05pZSB3aWVzeiwga3TDs3J5IGtzenRhxYJ0IHd5YnJhxIc\/JzonTm90IHN1cmUgd2hpY2ggc2hhcGUgdG8gY2hvb3NlPycsCidaZXN0YXcgcHLDs2JueSBwYW5lbGkgemEgMjkgesWCIHogZG9zdGF3xIUgZG8gUGFjemtvbWF0dS4gUG9tYWx1aiBpIHByennFgsOzxbwgZG8gxZtjaWFueS4nOidQYW5lbCBzYW1wbGUgc2V0IGZvciAyOSBQTE4gd2l0aCBwYXJjZWwgbG9ja2VyIGRlbGl2ZXJ5LiBQYWludCBpdCBhbmQgaG9sZCBpdCBhZ2FpbnN0IHlvdXIgd2FsbC4nLAonRG9kYWogemVzdGF3JzonQWRkIHNhbXBsZSBzZXQnLCdaYXBpc3ogaSB1ZG9zdMSZcG5paiBwcm9qZWt0JzonU2F2ZSBhbmQgc2hhcmUgeW91ciBkZXNpZ24nLCdVZG9zdMSZcG5paiBsaW5rJzonU2hhcmUgbGluaycsJ1phcGlzeiBvYnJheic6J1NhdmUgaW1hZ2UnLCdXecWbbGlqIHByb2pla3QgZG8gV2lzcGVybyc6J1NlbmQgZGVzaWduIHRvIFdpc3Blcm8nLAonUHJvamVrdCB6YXBpc3VqZSBzacSZIHRlxbwgc2FtIG5hIHR5bSB1cnrEhWR6ZW5pdS4gUHl0YW5pYSBvIHfFgmFzbnkgd3rDs3IsIG5hcGlzIGFsYm8gbG9nbzogc2tsZXBAd2lzcGVyby5wbCc6J1lvdXIgZGVzaWduIGlzIGFsc28gc2F2ZWQgYXV0b21hdGljYWxseSBvbiB0aGlzIGRldmljZS4gUXVlc3Rpb25zIGFib3V0IGEgY3VzdG9tIHBhdHRlcm4sIHRleHQgb3IgbG9nbzogc2tsZXBAd2lzcGVyby5wbCcsCidEb2RhaiBwYW5lbGUgZG8gxZtjaWFueSc6J0FkZCBwYW5lbHMgdG8gdGhlIHdhbGwnLCfihrYgQ29mbmlqJzon4oa2IFVuZG8nLCdVc3RhdyBuYXJvxbxuaWtpJzonU2V0IGNvcm5lcnMnLCdFZHl0dWogcGFuZWxlJzonRWRpdCBwYW5lbHMnLCdQb2JpZXJ6IGtvbG9yIMWbY2lhbnknOidQaWNrIHdhbGwgY29sb3VyJywnUHJ6ZW1hbHVqIMWbY2lhbsSZJzonUmVwYWludCB3YWxsJywnWm1pZcWEIHpkasSZY2llJzonQ2hhbmdlIHBob3RvJywKJ1ByemVjacSFZ25paiBwcnplc3prb2TEmSBuYSByeXN1bmt1LCBhYnkgasSFIHByemVzdW7EhcSHLic6J0RyYWcgYW4gb2JzdGFjbGUgb24gdGhlIGRyYXdpbmcgdG8gbW92ZSBpdC4nLCdEdXBsaWt1aic6J0R1cGxpY2F0ZScsJ1VzdcWEJzonRGVsZXRlJywnT2R6bmFjeic6J0Rlc2VsZWN0JywnWmF6bmFjem9ueSAxIHBhbmVsJzonMSBwYW5lbCBzZWxlY3RlZCcsCidaYXpuYWN6IHdzenlzdGtpZSc6J1NlbGVjdCBhbGwnLCdXecWbcm9ka3VqJzonQ2VudHJlJywnV3ljennFm8SHJzonQ2xlYXInLCdEb3RrbmlqIHBhbmVsdSwgYWJ5IGdvIGVkeXRvd2HEhy4nOidUYXAgYSBwYW5lbCB0byBlZGl0IGl0LicsCidCcmFrIHBhbmVsaS4gV2N6eXRhaiB3esOzciB3IHpha8WCYWRjZSDigJ5XesOzcuKAnSBhbGJvIGRvZGFqIHBhbmVsZS4nOidObyBwYW5lbHMgeWV0LiBMb2FkIGEgcGF0dGVybiBpbiB0aGUg4oCcUGF0dGVybuKAnSB0YWIgb3IgYWRkIHBhbmVscy4nLCdCcmFrIHBhbmVsaSc6J05vIHBhbmVscycsCidQYW5lbGUgeiBrcmF3xJlkemlhbWknOidQYW5lbHMgaW5jbC4gZWRnZXMnLCdGYXJiYSDFgsSFY3puaWUnOidUb3RhbCBwYWludCcsCidEb3RrbmlqIHBhbmVsdSBuYSByeXN1bmt1LCBhYnkgbmFkYcSHIG11IGlubnkga29sb3IgbmnFvCByZXN6Y2llLic6J1RhcCBhIHBhbmVsIG9uIHRoZSBkcmF3aW5nIHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgY29sb3VyIGZyb20gdGhlIHJlc3QuJywnUHJ6eXdyw7PEhyB3c3DDs2xueSBrb2xvcic6J1Jlc3RvcmUgc2hhcmVkIGNvbG91cicsJ1fFgmFzbnkga29sb3IgcGFuZWx1JzonQ3VzdG9tIHBhbmVsIGNvbG91cicsCidEb3RrbmlqIHByemVzemtvZHkgbmEgcnlzdW5rdSwgYWJ5IHptaWVuacSHIGplaiB3eW1pYXJ5Lic6J1RhcCBhbiBvYnN0YWNsZSBvbiB0aGUgZHJhd2luZyB0byBjaGFuZ2UgaXRzIHNpemUuJywnVXN1xYQgcGFuZWxlIG5hIHByemVzemtvZHppZSc6J1JlbW92ZSBwYW5lbHMgb24gdGhlIG9ic3RhY2xlJywnVXN1xYQgcHJ6ZXN6a29kxJknOidSZW1vdmUgb2JzdGFjbGUnLAonWmEgbWHFgm8gbWllanNjYSBuYSB0ZW4gdWvFgmFkLiBad2nEmWtzeiB3eW1pYXJ5IGFsYm8gem1uaWVqc3ogb2RzdMSZcHkuJzonTm90IGVub3VnaCBzcGFjZSBmb3IgdGhpcyBsYXlvdXQuIEluY3JlYXNlIHRoZSBzaXplIG9yIHJlZHVjZSB0aGUgZ2Fwcy4nLAonVG8gamVzdCBwb2RnbMSFZC4gTmEgd2lzcGVyby5wbCB0ZW4gcHJ6eWNpc2sgZG9kYSB3c3p5c3RraWUgcGFuZWxlIGRvIGtvc3p5a2EuJzonVGhpcyBpcyBhIHByZXZpZXcuIE9uIHdpc3Blcm8ucGwgdGhpcyBidXR0b24gYWRkcyBhbGwgcGFuZWxzIHRvIHRoZSBjYXJ0LicsCidUbyBqZXN0IHBvZGdsxIVkLiBOYSB3aXNwZXJvLnBsIHByenljaXNrIGRvZGEgemVzdGF3IHByw7NibnkgZG8ga29zenlrYS4nOidUaGlzIGlzIGEgcHJldmlldy4gT24gd2lzcGVyby5wbCB0aGlzIGJ1dHRvbiBhZGRzIHRoZSBzYW1wbGUgc2V0IHRvIHRoZSBjYXJ0LicsCidEb2RhasSZ4oCmJzonQWRkaW5n4oCmJywnTmllIHVkYcWCbyBzacSZIGRvZGHEhyBwYW5lbGkgZG8ga29zenlrYS4gU3Byw7NidWogcG9ub3duaWUgYWxibyBuYXBpc3o6IHNrbGVwQHdpc3Blcm8ucGwnOidDb3VsZCBub3QgYWRkIHRoZSBwYW5lbHMgdG8gdGhlIGNhcnQuIFRyeSBhZ2FpbiBvciBlbWFpbDogc2tsZXBAd2lzcGVyby5wbCcsCidOaWUgdWRhxYJvIHNpxJkgZG9kYcSHIHplc3Rhd3UuIE5hcGlzejogc2tsZXBAd2lzcGVyby5wbCc6J0NvdWxkIG5vdCBhZGQgdGhlIHNhbXBsZSBzZXQuIEVtYWlsOiBza2xlcEB3aXNwZXJvLnBsJywKJ1cgcG9kZ2zEhWR6aWUgZHJ1a293YW5pZSBqZXN0IHd5xYLEhWN6b25lLiBOYSB3aXNwZXJvLnBsIG90d29yenkgc2nEmSBva25vIGRydWtvd2FuaWEgeiByeXN1bmtpZW0gaSB0YWJlbMSFLic6J1ByaW50aW5nIGlzIG9mZiBpbiB0aGlzIHByZXZpZXcuIE9uIHdpc3Blcm8ucGwgYSBwcmludCB3aW5kb3cgb3BlbnMgd2l0aCB0aGUgZHJhd2luZyBhbmQgdGhlIHRhYmxlLicsCidMaW5rIHNrb3Bpb3dhbnkuIFdrbGVqIGdvIHcgd2lhZG9tb8WbY2kuJzonTGluayBjb3BpZWQuIFBhc3RlIGl0IGludG8gYSBtZXNzYWdlLicsJ1Nrb3BpdWogbGluayBwb25pxbxlajonOidDb3B5IHRoZSBsaW5rIGJlbG93OicsJ09icmF6IHphcGlzYW55Lic6J0ltYWdlIHNhdmVkLicsCidXIHBvZGdsxIVkemllIHphcGlzeXdhbmllIHBsaWvDs3cgamVzdCB3ecWCxIVjem9uZS4gTmEgd2lzcGVyby5wbCBvYnJheiB6YXBpc3plIHNpxJkgbmEgdXJ6xIVkemVuaXUuJzonU2F2aW5nIGZpbGVzIGlzIG9mZiBpbiB0aGlzIHByZXZpZXcuIE9uIHdpc3Blcm8ucGwgdGhlIGltYWdlIGlzIHNhdmVkIHRvIHlvdXIgZGV2aWNlLicsCidPdHdpZXJhbSBwb2N6dMSZLiBKZcWbbGkgc2nEmSBuaWUgb3R3b3J6eSwgbmFwaXN6IG5hIGFkcmVzIHBvbmnFvGVqIGkgd2tsZWogbGluayBkbyBwcm9qZWt0dS4nOidPcGVuaW5nIHlvdXIgZW1haWwgYXBwLiBJZiBpdCBkb2VzIG5vdCBvcGVuLCB3cml0ZSB0byB0aGUgYWRkcmVzcyBiZWxvdyBhbmQgcGFzdGUgdGhlIGxpbmsgdG8geW91ciBkZXNpZ24uJywKJ05pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgemRqxJljaWEuIFNwcsOzYnVqIGlubmVnbyBwbGlrdSAoSlBHIGx1YiBQTkcpLic6J0NvdWxkIG5vdCBvcGVuIHRoZSBwaG90by4gVHJ5IGFub3RoZXIgZmlsZSAoSlBHIG9yIFBORykuJywKJ0RvdGtuaWogxZtjaWFueSBuYSB6ZGrEmWNpdSB3IGphc255bSBtaWVqc2N1IGJleiBjaWVuaWEuJzonVGFwIHRoZSB3YWxsIGluIHRoZSBwaG90byBhdCBhIGJyaWdodCBzcG90IHdpdGhvdXQgc2hhZG93LicsCidQcnplc3V3YWogcGFuZWxlIHBhbGNlbSBuYSB6ZGrEmWNpdSwgb2JyYWNhaiBkd29tYSBwYWxjYW1pLiBLb2xvcnkgem1pZW5pc3ogdyB6YWvFgmFkY2Ug4oCeS29sb3J54oCdLiBNZWJsZSBuYSB6ZGrEmWNpdSBuaWUgemFzxYJhbmlhasSFIHBhbmVsaSwgdG8gcG9kZ2zEhWQgdcWCb8W8ZW5pYS4nOidNb3ZlIHBhbmVscyB3aXRoIHlvdXIgZmluZ2VyIG9uIHRoZSBwaG90byBhbmQgcm90YXRlIHRoZW0gd2l0aCB0d28gZmluZ2Vycy4gQ2hhbmdlIGNvbG91cnMgaW4gdGhlIOKAnENvbG91cnPigJ0gdGFiLiBGdXJuaXR1cmUgaW4gdGhlIHBob3RvIGRvZXMgbm90IGNvdmVyIHRoZSBwYW5lbHM7IHRoaXMgaXMgYSBsYXlvdXQgcHJldmlldy4nLAonT2QgbGV3ZWogKGNtKSc6J0Zyb20gbGVmdCAoY20pJywnT2QgcG9kxYJvZ2kgKGNtKSc6J0Zyb20gZmxvb3IgKGNtKScsJ29kIDI0IHN6dC4gcmFiYXQg4oiSOCUsIG9kIDQ4IHN6dC4g4oiSMTIlJzonZnJvbSAyNCBwY3Mg4oiSOCUgZGlzY291bnQsIGZyb20gNDggcGNzIOKIkjEyJScsCidMaXN0d2EgNTAgw5cgMyBjbSc6J1NsYXQgNTAgw5cgMyBjbScsJ0xpc3R3YSc6J1NsYXQnLCdPd2FsIDUwIMOXIDE1IGNtJzonT3ZhbCA1MCDDlyAxNSBjbScsJ093YWwnOidPdmFsJywnUMOzxYJrb2xlIMOYIDMwIGNtJzonSGFsZi1jaXJjbGUgw5ggMzAgY20nLCdQw7PFgmtvbGUnOidIYWxmLWNpcmNsZScsCidHbmlhemRrbyc6J1NvY2tldCcsJ1fFgsSFY3puaWsnOidTd2l0Y2gnLCdUZWxld2l6b3InOidUVicsJ09rbm8nOidXaW5kb3cnLCdEcnp3aSc6J0Rvb3InLCdJbm5hJzonT3RoZXInLAonTGlzdHd5IHBpb25vd28nOidWZXJ0aWNhbCBzbGF0cycsJ0xpc3R3eSBwb3ppb21vJzonSG9yaXpvbnRhbCBzbGF0cycsJ093YWxlIHBpb25vd28nOidWZXJ0aWNhbCBvdmFscycsJ093YWxlIHBvemlvbW8nOidIb3Jpem9udGFsIG92YWxzJywnxYF1c2tpJzonU2NhbGVzJywnRHVldCc6J0R1ZXQnLAonTGFtZWxlJzonU2xhdHMnLCdXc2Now7NkIHPFgm\/FhGNhJzonU3VucmlzZScsJ1BsZWNpb25rYSc6J1dlYXZlJywnTW96YWlrYSBvd2FsaSc6J092YWwgbW9zYWljJywnUm96ZXRhJzonUm9zZXR0ZScsJ1B1bHMnOidQdWxzZScsJ0phcGFuZGknOidKYXBhbmRpJywKJ8WaY2lhbmEgVFYsIHByemVkcG9rw7NqJzonVFYgd2FsbCwgaGFsbHdheScsJ1duxJlrYSwgcHJ6eSBiaXVya3UnOidBbGNvdmUsIGJ5IGEgZGVzaycsJ05hZCDFgsOzxbxraWVtLCBuYWQga2FuYXDEhSc6J0Fib3ZlIGEgYmVkIG9yIHNvZmEnLCdaYSBUViwgemEga2FuYXDEhSc6J0JlaGluZCBhIFRWIG9yIHNvZmEnLCdTeXBpYWxuaWEsIHNhbG9uJzonQmVkcm9vbSwgbGl2aW5nIHJvb20nLCdaYSDFgsOzxbxraWVtIGx1YiBrYW5hcMSFJzonQmVoaW5kIGEgYmVkIG9yIHNvZmEnLCdOYWQga29tb2TEhSwgdyBob2x1JzonQWJvdmUgYSBjaGVzdCBvZiBkcmF3ZXJzLCBpbiBhIGhhbGx3YXknLCdOYWQga2FuYXDEhSwgdyBiaXVyemUnOidBYm92ZSBhIHNvZmEsIGluIGFuIG9mZmljZScsCidOYSDFvHl3byAoQVIpJzonTGl2ZSAoQVIpJywnUG9kZ2zEhWQgQVInOidBUiBwcmV2aWV3JywnWm9iYWN6IHBhbmVsZSBuYSDFvHl3byBuYSBzd29qZWogxZtjaWFuaWUnOidTZWUgdGhlIHBhbmVscyBsaXZlIG9uIHlvdXIgd2FsbCcsJ1phbWtuaWonOidDbG9zZScsJ05hanBpZXJ3IGRvZGFqIHBhbmVsZSBkbyDFm2NpYW55Lic6J0FkZCBwYW5lbHMgdG8gdGhlIHdhbGwgZmlyc3QuJywnUHJ6eWdvdG93dWrEmSBtb2RlbCAzROKApic6J1ByZXBhcmluZyB0aGUgM0QgbW9kZWzigKYnLCdVcnVjaG9tIEFSIG5hIMWbY2lhbmllJzonU3RhcnQgQVIgb24gdGhlIHdhbGwnLCdNb2RlbCAzRCB1a8WCYWR1IHBhbmVsaSc6JzNEIG1vZGVsIG9mIHRoZSBwYW5lbCBsYXlvdXQnLCdLb3BpdWogbGluayBkbyBwcm9qZWt0dSc6J0NvcHkgZGVzaWduIGxpbmsnLAonTmEgdGVsZWZvbmllIGRvdGtuaWog4oCeVXJ1Y2hvbSBBUiBuYSDFm2NpYW5pZeKAnSwgc2tpZXJ1aiBhcGFyYXQgbmEgxZtjaWFuxJkgaSBwb3dvbGkgcG9ydXN6YWogdGVsZWZvbmVtLCBhxbwgxZtjaWFuYSB6b3N0YW5pZSB3eWtyeXRhLiBEb3RrbmlqIMWbY2lhbnksIMW8ZWJ5IHByennFgm\/FvHnEhyBwYW5lbGUuIFBhbmVsZSBtYWrEhSBwcmF3ZHppd3kgcm96bWlhciwgbW\/FvGVzeiBqZSBwcnplc3V3YcSHIHBhbGNlbSBwbyDFm2NpYW5pZS4nOidPbiB5b3VyIHBob25lIHRhcCDigJxTdGFydCBBUiBvbiB0aGUgd2FsbOKAnSwgcG9pbnQgdGhlIGNhbWVyYSBhdCB0aGUgd2FsbCBhbmQgbW92ZSB0aGUgcGhvbmUgc2xvd2x5IHVudGlsIHRoZSB3YWxsIGlzIGRldGVjdGVkLiBUYXAgdGhlIHdhbGwgdG8gcGxhY2UgdGhlIHBhbmVscy4gVGhlIHBhbmVscyBhcmUgc2hvd24gYXQgcmVhbCBzaXplIGFuZCB5b3UgY2FuIHNsaWRlIHRoZW0gYWxvbmcgdGhlIHdhbGwgd2l0aCB5b3VyIGZpbmdlci4nLAonR8WCYWRrxIUsIGplZG5vbGl0xIUgxZtjaWFuxJkgdGVsZWZvbiB3eWtyeXdhIHRydWRuaWVqLiBQb21hZ2EgZG9icmUgxZt3aWF0xYJvIGkgZ25pYXpka28sIG9icmF6IGFsYm8ga3Jhd8SZZMW6IMWbY2lhbnkgdyBrYWRyemUuJzonQSBzbW9vdGgsIHBsYWluIHdhbGwgaXMgaGFyZGVyIGZvciB0aGUgcGhvbmUgdG8gZGV0ZWN0LiBHb29kIGxpZ2h0IGhlbHBzLCBhcyBkb2VzIGhhdmluZyBhIHNvY2tldCwgYSBwaWN0dXJlIG9yIHRoZSB3YWxsIGVkZ2UgaW4gdmlldy4nLAonVG8gdXJ6xIVkemVuaWUgbmllIG9ic8WCdWd1amUgQVIgdyBwcnplZ2zEhWRhcmNlLiBNb8W8ZXN6IG9iZWpyemXEhyBtb2RlbCAzRCBhbGJvIHpvYmFjennEhyBwYW5lbGUgbmEgemRqxJljaXUgc3dvamVqIMWbY2lhbnksIHRvIGR6aWHFgmEgbmEga2HFvGR5bSB0ZWxlZm9uaWUuIEFSIGR6aWHFgmEgbmEgaVBob25pZSBpIG5hIHRlbGVmb25hY2ggeiBBbmRyb2lkZW0gb2JzxYJ1Z3VqxIVjeWNoIEFSQ29yZSAocHJ6ZWdsxIVkYXJrYSBDaHJvbWUpLiBQcm9qZWt0IG90d29yenlzeiBuYSBpbm55bSB0ZWxlZm9uaWUsIHd5c3nFgmFqxIVjIHNvYmllIGxpbmsuJzonVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBBUiBpbiB0aGUgYnJvd3Nlci4gWW91IGNhbiB2aWV3IHRoZSAzRCBtb2RlbCBvciBzZWUgdGhlIHBhbmVscyBvbiBhIHBob3RvIG9mIHlvdXIgd2FsbCwgd2hpY2ggd29ya3Mgb24gYW55IHBob25lLiBBUiB3b3JrcyBvbiBpUGhvbmVzIGFuZCBvbiBBbmRyb2lkIHBob25lcyB0aGF0IHN1cHBvcnQgQVJDb3JlIChDaHJvbWUgYnJvd3NlcikuIFNlbmQgeW91cnNlbGYgdGhlIGxpbmsgdG8gb3BlbiB0aGUgZGVzaWduIG9uIGFub3RoZXIgcGhvbmUuJywnWm9iYWN6IG5hIHpkasSZY2l1IMWbY2lhbnknOidTZWUgaXQgb24gYSB3YWxsIHBob3RvJywKJ05pZSB1ZGHFgm8gc2nEmSB3Y3p5dGHEhyBwb2RnbMSFZHUgM0QuIFNwcmF3ZMW6IHBvxYLEhWN6ZW5pZSB6IGludGVybmV0ZW0gaSBzcHLDs2J1aiBwb25vd25pZS4nOidDb3VsZCBub3QgbG9hZCB0aGUgM0QgcHJldmlldy4gQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uJywKJ1phem5hY3oga2lsa2EnOidTZWxlY3Qgc2V2ZXJhbCcsJ1cgamVkbnltIHJ6xJlkemllJzonSW4gb25lIHJvdycsJ1cgamVkbmVqIGtvbHVtbmllJzonSW4gb25lIGNvbHVtbicsJ1LDs3duZSBvZHN0xJlweSc6J0V2ZW4gc3BhY2luZycsJ0RvdHlrYWogcGFuZWxpLCDFvGVieSBkb2RhxIcgamUgZG8gemF6bmFjemVuaWEgYWxibyBqZSBvZHpuYWN6ecSHLiBOYSByeXN1bmt1IG1vxbxlc3ogdGXFvCB6YXpuYWN6ecSHIGtpbGthIHBhbmVsaSByYW1rxIUsIHByemVjacSFZ2FqxIVjIHBvIHB1c3R5bSBtaWVqc2N1Lic6J1RhcCBwYW5lbHMgdG8gYWRkIHRoZW0gdG8gdGhlIHNlbGVjdGlvbiBvciBkZXNlbGVjdCB0aGVtLiBPbiB0aGUgZHJhd2luZyB5b3UgY2FuIGFsc28gc2VsZWN0IHNldmVyYWwgcGFuZWxzIHdpdGggYSBib3ggYnkgZHJhZ2dpbmcgYWNyb3NzIGFuIGVtcHR5IGFyZWEuJywKJ0JpZWwnOidXaGl0ZScsJ1rFgmFtYW5hIGJpZWwnOidPZmYtd2hpdGUnLCdLb8WbxIcgc8WCb25pb3dhJzonSXZvcnknLCdQaWFza293eSBiZcW8JzonU2FuZCBiZWlnZScsJ0dyZWlnZSc6J0dyZWlnZScsJ1N6YcWCd2lhJzonU2FnZScsJ09saXdrYSc6J09saXZlJywnQnV0ZWxrb3dhIHppZWxlxYQnOidCb3R0bGUgZ3JlZW4nLCdCxYLEmWtpdCBtZ8WCeSc6J01pc3QgYmx1ZScsJ0dyYW5hdCc6J05hdnknLCdHcmFmaXQnOidHcmFwaGl0ZScsJ1RlcmFrb3RhJzonVGVycmFjb3R0YScsJ1B1ZHJvd3kgcsOzxbwnOidQb3dkZXIgcGluaycsJ011c3p0YXJkYSc6J011c3RhcmQnLCdDemVrb2xhZGEnOidDaG9jb2xhdGUnLCdDemVyxYQnOidCbGFjaycKfTsKdmFyIFJYPVsKWy9eWmF6bmFjem9uZSAoXGQrKSBwYW5lbGkkLyxmdW5jdGlvbihtKXtyZXR1cm4gbVsxXSsnIHBhbmVscyBzZWxlY3RlZCd9XSwKWy9eWmF6bmFjem9ueSBwYW5lbDogKC4rKSQvLGZ1bmN0aW9uKG0pe3JldHVybiAnU2VsZWN0ZWQgcGFuZWw6ICcrVFgobVsxXSl9XSwKWy9eWmF6bmFjem9uZSBwYW5lbGU6IChcZCspJC8sZnVuY3Rpb24obSl7cmV0dXJuICdTZWxlY3RlZCBwYW5lbHM6ICcrbVsxXX1dLApbL15Eb2RhaiBqZXN6Y3plIChcZCspIHN6dFwuLCBhIHJhYmF0IHd6cm\/Fm25pZSBkbyAoXGQrKSVcLi4qJC8sZnVuY3Rpb24obSl7cmV0dXJuICdBZGQgJyttWzFdKycgbW9yZSBwY3MgYW5kIHlvdXIgZGlzY291bnQgZ29lcyB1cCB0byAnK21bMl0rJyUuIFlvdSBjYW4gYWRkIHBhbmVscyBhdCB0aGUgZWRnZXMgb3Iga2VlcCB0aGVtIGFzIHNwYXJlcy4nfV0sClsvXihcZCspIHBhbmVsIG5hY2hvZHppIG5hIHByemVzemtvZMSZLiokLyxmdW5jdGlvbihtKXtyZXR1cm4gbVsxXSsnIHBhbmVsIG92ZXJsYXBzIGFuIG9ic3RhY2xlIChyZWQgb3V0bGluZSkuIE1vdmUgb3IgZGVsZXRlIGl0Lid9XSwKWy9eKFxkKykgcGFuZWxlIG5hY2hvZHrEhSBuYSBwcnplc3prb2TEmS4qJC8sZnVuY3Rpb24obSl7cmV0dXJuIG1bMV0rJyBwYW5lbHMgb3ZlcmxhcCBhbiBvYnN0YWNsZSAocmVkIG91dGxpbmUpLiBNb3ZlIG9yIGRlbGV0ZSB0aGVtLid9XSwKWy9eKFxkKykgcGFuZWwgd3lzdGFqZSBwb3phIMWbY2lhbsSZXC4kLyxmdW5jdGlvbihtKXtyZXR1cm4gbVsxXSsnIHBhbmVsIHN0aWNrcyBvdXQgYmV5b25kIHRoZSB3YWxsLid9XSwKWy9eKFxkKykgcGFuZWxlIHd5c3RhasSFIHBvemEgxZtjaWFuxJlcLiQvLGZ1bmN0aW9uKG0pe3JldHVybiBtWzFdKycgcGFuZWxzIHN0aWNrIG91dCBiZXlvbmQgdGhlIHdhbGwuJ31dLApbL156IHJhYmF0ZW0g4oiSKFxkKyklIG5hbGljemFueW0gdyBrb3N6eWt1JC8sZnVuY3Rpb24obSl7cmV0dXJuICd3aXRoIGEg4oiSJyttWzFdKyclIGRpc2NvdW50IGFwcGxpZWQgaW4gdGhlIGNhcnQnfV0sClsvXiguKykgXC8gc3p0XC4gwrcgb3Bha293YW5pZSA4IHN6dFwuJC8sZnVuY3Rpb24obSl7cmV0dXJuIHRvayhtWzFdKSsnIC8gcGMgwrcgcGFjayBvZiA4J31dLApbL15va1wuICguKykgbCQvLGZ1bmN0aW9uKG0pe3JldHVybiAnYXBwcm94LiAnK3RvayhtWzFdKSsnIGwnfV0sClsvXlXFgm\/FvG9ubyAoXGQrKSBzenRcLig\/OiBQb21pbmnEmXRvIChcZCspIC4qKT8kLyxmdW5jdGlvbihtKXtyZXR1cm4gJ1BsYWNlZCAnK21bMV0rJyBwY3MuJysobVsyXT8nIFNraXBwZWQgJyttWzJdKycgKG9ic3RhY2xlcyBvciB3YWxsIGVkZ2UpLic6JycpfV0sClsvXldjenl0YW5vIHd6w7NyIOKAniguKynigJ1cLi4qJC8sZnVuY3Rpb24obSl7cmV0dXJuICdMb2FkZWQgdGhlIOKAnCcrVFgobVsxXSkrJ+KAnSBwYXR0ZXJuLiBZb3UgY2FuIG5vdyBlZGl0IGl0IG9uIHRoZSBkcmF3aW5nLid9XSwKWy9eUHJ6ZWNpxIVnbmlqIDQga3JvcGtpIGRvIHJvZ8OzdyDFm2NpYW55LipcKCguKykgw5cgKC4rKSBjbVwpLiokLyxmdW5jdGlvbihtKXtyZXR1cm4gJ0RyYWcgdGhlIDQgZG90cyB0byB0aGUgd2FsbCBjb3JuZXJzOiAxIHRvcCBsZWZ0LCAyIHRvcCByaWdodCwgMyBib3R0b20gcmlnaHQsIDQgYm90dG9tIGxlZnQuIFNldCB0aGUgd2FsbCBzaXplICgnK3RvayhtWzFdKSsnIMOXICcrdG9rKG1bMl0pKycgY20pIGluIHRoZSDigJxXYWxs4oCdIHRhYi4gSWYgdGhlIGNvcm5lcnMgYXJlIG5vdCB2aXNpYmxlLCBtZWFzdXJlIGEgdmlzaWJsZSBzZWN0aW9uIG9mIHRoZSB3YWxsIGFuZCBlbnRlciBpdHMgc2l6ZS4nfV0sClsvXlBvYnJhbnkga29sb3IgxZtjaWFueTogKCNcdyspXC4uKiQvLGZ1bmN0aW9uKG0pe3JldHVybiAnUGlja2VkIHdhbGwgY29sb3VyOiAnK21bMV0rJy4gSXQgaXMgbm93IHVzZWQgb24gdGhlIGRyYXdpbmcgYW5kIGluIHRoZSDigJxDb2xvdXJz4oCdIHRhYi4gQSBjb2xvdXIgdGFrZW4gZnJvbSBhIHBob3RvIGlzIGFwcHJveGltYXRlIGJlY2F1c2UgdGhlIHBob25lIGFkanVzdHMgYnJpZ2h0bmVzcyBhbmQgd2hpdGUgYmFsYW5jZS4nfV0sClsvXlBsYW4gbW9udGHFvHUgcGFuZWxpIFdpc3Blcm8gwrcgxZtjaWFuYSAoLispIMOXICguKykgY20kLyxmdW5jdGlvbihtKXtyZXR1cm4gJ1dpc3Blcm8gcGFuZWwgaW5zdGFsbGF0aW9uIHBsYW4gwrcgd2FsbCAnK3RvayhtWzFdKSsnIMOXICcrdG9rKG1bMl0pKycgY20nfV0sClsvXiguKilcLiBXeW1pYXJ5IGRvIMWbcm9ka2EgcGFuZWx1OiBvZCBsZXdlaiBrcmF3xJlkemkgxZtjaWFueSBpIG9kIHBvZMWCb2dpXC4kLyxmdW5jdGlvbihtKXtyZXR1cm4gdG9rKG1bMV0pKycuIE1lYXN1cmVtZW50cyB0byB0aGUgcGFuZWwgY2VudHJlOiBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHdhbGwgYW5kIGZyb20gdGhlIGZsb29yLid9XSwKWy9exZpjaWFuYSAoLispIG5hICguKykgY20geiBwYW5lbGFtaSQvLGZ1bmN0aW9uKG0pe3JldHVybiAnV2FsbCAnK3RvayhtWzFdKSsnIGJ5ICcrdG9rKG1bMl0pKycgY20gd2l0aCBwYW5lbHMnfV0sClsvXld5bWlhciB3em9ydTogKC4rKSDDlyAoLispIGNtJC8sZnVuY3Rpb24obSl7cmV0dXJuICdQYXR0ZXJuIHNpemU6ICcrdG9rKG1bMV0pKycgw5cgJyt0b2sobVsyXSkrJyBjbSd9XSwKWy9eXCsgKC4rKSQvLGZ1bmN0aW9uKG0pe3JldHVybiAnKyAnK1RYKG1bMV0pfV0KXTsKZnVuY3Rpb24gdG9rKHQpe1snTGlzdHdhIDUwIMOXIDMgY20nLCdPd2FsIDUwIMOXIDE1IGNtJywnUMOzxYJrb2xlIMOYIDMwIGNtJ10uZm9yRWFjaChmdW5jdGlvbihuKXt0PXQuc3BsaXQobikuam9pbihEW25dKX0pOwpyZXR1cm4gdC5yZXBsYWNlKC8oXGQrKSBvcGFrXC4vZyxmdW5jdGlvbih4LG4pe3JldHVybiBuKyhuPT09JzEnPycgcGFjayc6JyBwYWNrcycpfSkucmVwbGFjZSgvKFxkKykgc3p0XC4vZywnJDEgcGNzJykucmVwbGFjZSgvIMK3IHJhYmF0IOKIki9nLCcgwrcgZGlzY291bnQg4oiSJykucmVwbGFjZSgvKFxkKSB6xYIvZywnJDEgUExOJykucmVwbGFjZSgvKFxkKSwoXGQpL2csJyQxLiQyJyl9CmZ1bmN0aW9uIFRYKHQpe2lmKERbdF0pcmV0dXJuIERbdF07Zm9yKHZhciBpPTA7aTxSWC5sZW5ndGg7aSsrKXt2YXIgbT10Lm1hdGNoKFJYW2ldWzBdKTtpZihtKXJldHVybiBSWFtpXVsxXShtKX1yZXR1cm4gdG9rKHQpfQpmdW5jdGlvbiB0ck5vZGUobil7dmFyIHY9bi5ub2RlVmFsdWUsdD12LnRyaW0oKTtpZighdHx8IS9bQS1aYS16xITEhsSYxYHFg8OTxZrFucW7xIXEh8SZxYLFhMOzxZvFusW8XXx6xYIvLnRlc3QodCkpcmV0dXJuO3ZhciByPVRYKHQpO2lmKHIhPT10KW4ubm9kZVZhbHVlPXYucmVwbGFjZSh0LHIpfQpmdW5jdGlvbiB0ckF0dHIoZWwpe1snYXJpYS1sYWJlbCcsJ3RpdGxlJ10uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgdj1lbC5nZXRBdHRyaWJ1dGUmJmVsLmdldEF0dHJpYnV0ZShhKTtpZih2KXt2YXIgcj1UWCh2KTtpZihyIT09dillbC5zZXRBdHRyaWJ1dGUoYSxyKX19KX0KZnVuY3Rpb24gdHJUcmVlKHJvb3Qpe3ZhciB3PWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocm9vdCxOb2RlRmlsdGVyLlNIT1dfVEVYVCxudWxsKSxuO3doaWxlKChuPXcubmV4dE5vZGUoKSkpdHJOb2RlKG4pO2lmKHJvb3QucXVlcnlTZWxlY3RvckFsbCl7dHJBdHRyKHJvb3QpO3Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2FyaWEtbGFiZWxdLFt0aXRsZV0nKS5mb3JFYWNoKHRyQXR0cil9fQppZihFTil7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS13ay1lbicsJzEnKTsKWyQoJ3drJyksJCgnd2stYmFyJyldLmZvckVhY2goZnVuY3Rpb24ocil7dHJUcmVlKHIpO25ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG1zKXttcy5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKG0udHlwZT09PSdjaGFyYWN0ZXJEYXRhJyl0ck5vZGUobS50YXJnZXQpO2Vsc2UgaWYobS50eXBlPT09J2F0dHJpYnV0ZXMnKXRyQXR0cihtLnRhcmdldCk7ZWxzZSBtLmFkZGVkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLm5vZGVUeXBlPT09Mz90ck5vZGUoYSk6dHJUcmVlKGEpfSl9KX0pLm9ic2VydmUocix7c3VidHJlZTp0cnVlLGNoaWxkTGlzdDp0cnVlLGNoYXJhY3RlckRhdGE6dHJ1ZSxhdHRyaWJ1dGVzOnRydWUsYXR0cmlidXRlRmlsdGVyOlsnYXJpYS1sYWJlbCcsJ3RpdGxlJ119KX0pfQovKiAtLS0tLS0tLS0tIHpkasSZY2llIMWbY2lhbnkgKGV0YXAgMikgLS0tLS0tLS0tLSAqLwp2YXIgTU9ERT0nZHJhdycsUEg9e2ltZzpudWxsLHc6MCxoOjAscTpudWxsLHRvb2w6J2Nvcm5lcnMnLHJlY29sb3I6ZmFsc2UsQjpudWxsLEJrZXk6JycsTHc6Ljh9OwpmdW5jdGlvbiBwaG90b0hpbnQodCl7dmFyIGg9JCgnd2stcGhpbnQnKTtoLnRleHRDb250ZW50PXQ7aC5oaWRkZW49IXR9CmZ1bmN0aW9uIGhvbW9nKHNyYyxkc3Qpe3ZhciBBPVtdLGI9W107Zm9yKHZhciBpPTA7aTw0O2krKyl7dmFyIHg9c3JjW2ldWzBdLHk9c3JjW2ldWzFdLHU9ZHN0W2ldWzBdLHY9ZHN0W2ldWzFdO0EucHVzaChbeCx5LDEsMCwwLDAsLXUqeCwtdSp5XSk7Yi5wdXNoKHUpO0EucHVzaChbMCwwLDAseCx5LDEsLXYqeCwtdip5XSk7Yi5wdXNoKHYpfQpmb3IodmFyIGM9MDtjPDg7YysrKXt2YXIgbXg9Yztmb3IodmFyIHI9YysxO3I8ODtyKyspaWYoTWF0aC5hYnMoQVtyXVtjXSk+TWF0aC5hYnMoQVtteF1bY10pKW14PXI7dmFyIHQ9QVtjXTtBW2NdPUFbbXhdO0FbbXhdPXQ7dmFyIHRiPWJbY107YltjXT1iW214XTtiW214XT10YjsKZm9yKHZhciByMj0wO3IyPDg7cjIrKyl7aWYocjI9PT1jKWNvbnRpbnVlO3ZhciBmPUFbcjJdW2NdL0FbY11bY107Zm9yKHZhciBrPWM7azw4O2srKylBW3IyXVtrXS09ZipBW2NdW2tdO2JbcjJdLT1mKmJbY119fQp2YXIgaD1iLm1hcChmdW5jdGlvbih2LGkpe3JldHVybiB2L0FbaV1baV19KTtyZXR1cm4gW2hbMF0saFsxXSxoWzJdLGhbM10saFs0XSxoWzVdLGhbNl0saFs3XSwxXX0KZnVuY3Rpb24gaHAoSCx4LHkpe3ZhciB3PUhbNl0qeCtIWzddKnkrSFs4XTtyZXR1cm4gWyhIWzBdKngrSFsxXSp5K0hbMl0pL3csKEhbM10qeCtIWzRdKnkrSFs1XSkvd119CmZ1bmN0aW9uIGhpbnYobSl7dmFyIGE9bVswXSxiPW1bMV0sYz1tWzJdLGQ9bVszXSxlPW1bNF0sZj1tWzVdLGc9bVs2XSxoPW1bN10saT1tWzhdLEE9ZSppLWYqaCxCPS0oZCppLWYqZyksQz1kKmgtZSpnLGRldD1hKkErYipCK2MqQzsKcmV0dXJuIFtBL2RldCwtKGIqaS1jKmgpL2RldCwoYipmLWMqZSkvZGV0LEIvZGV0LChhKmktYypnKS9kZXQsLShhKmYtYypkKS9kZXQsQy9kZXQsLShhKmgtYipnKS9kZXQsKGEqZS1iKmQpL2RldF19CmZ1bmN0aW9uIEhtKCl7cmV0dXJuIGhvbW9nKFtbMCwwXSxbUy5XLDBdLFtTLlcsUy5IXSxbMCxTLkhdXSxQSC5xKX0KZnVuY3Rpb24gb3V0bGluZShwKXt2YXIgcHRzPVtdOwppZihwLnQ9PT0nTCcpcHRzPVtbLTEuNSwtMjVdLFsxLjUsLTI1XSxbMS41LDI1XSxbLTEuNSwyNV1dOwplbHNlIGlmKHAudD09PSdPJyl7Zm9yKHZhciBpPTA7aTw9MTA7aSsrKXt2YXIgYT1NYXRoLlBJK2kqTWF0aC5QSS8xMDtwdHMucHVzaChbNy41Kk1hdGguY29zKGEpLC0xNy41KzcuNSpNYXRoLnNpbihhKV0pfWZvcih2YXIgaj0wO2o8PTEwO2orKyl7dmFyIGI9aipNYXRoLlBJLzEwO3B0cy5wdXNoKFs3LjUqTWF0aC5jb3MoYiksMTcuNSs3LjUqTWF0aC5zaW4oYildKX19CmVsc2V7Zm9yKHZhciBrPTA7azw9MTY7aysrKXt2YXIgYz1NYXRoLlBJK2sqTWF0aC5QSS8xNjtwdHMucHVzaChbMTUqTWF0aC5jb3MoYyksNy41KzE1Kk1hdGguc2luKGMpXSl9fQp2YXIgcj1wLnIqTWF0aC5QSS8xODAsY289TWF0aC5jb3Mociksc2k9TWF0aC5zaW4ociksc3g9cC54LHN5PVMuSC1wLnk7CnJldHVybiBwdHMubWFwKGZ1bmN0aW9uKHEpe3JldHVybiBbc3grcVswXSpjby1xWzFdKnNpLHN5K3FbMF0qc2krcVsxXSpjb119KX0KZnVuY3Rpb24gcG9seTJkKHB0cyl7dmFyIHA9bmV3IFBhdGgyRCgpO3B0cy5mb3JFYWNoKGZ1bmN0aW9uKHYsaSl7aT9wLmxpbmVUbyh2WzBdLHZbMV0pOnAubW92ZVRvKHZbMF0sdlsxXSl9KTtwLmNsb3NlUGF0aCgpO3JldHVybiBwfQpmdW5jdGlvbiBoZXhSZ2IoaCl7dmFyIG49cGFyc2VJbnQoaC5zbGljZSgxKSwxNik7cmV0dXJuIFtuPj4xNixuPj44JjI1NSxuJjI1NV19CmZ1bmN0aW9uIExyZ2IoYyl7cmV0dXJuICgwLjIxMjYqY1swXSswLjcxNTIqY1sxXSswLjA3MjIqY1syXSkvMjU1fQpmdW5jdGlvbiBhcHBseUNvbG9yKHgsY29sLEx3LHBhdGgpe3ZhciB0PUxyZ2IoaGV4UmdiKGNvbCkpO3guZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSdjb2xvcic7eC5maWxsU3R5bGU9Y29sO3guZmlsbChwYXRoKTsKaWYodDxMdyl7dmFyIGc9TWF0aC5yb3VuZCgyNTUqTWF0aC5tYXgoLjA0LHQvTHcpKTt4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0nbXVsdGlwbHknO3guZmlsbFN0eWxlPSdyZ2IoJytnKycsJytnKycsJytnKycpJzt4LmZpbGwocGF0aCl9CmVsc2UgaWYodD5MdysuMDEpe3ZhciBzMj1NYXRoLnJvdW5kKDI1NSpNYXRoLm1pbigxLCh0LUx3KS9NYXRoLm1heCguMDUsMS1MdykpKTt4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0nc2NyZWVuJzt4LmZpbGxTdHlsZT0ncmdiKCcrczIrJywnK3MyKycsJytzMisnKSc7eC5maWxsKHBhdGgpfQp4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0nc291cmNlLW92ZXInfQpmdW5jdGlvbiB3YWxsTHVtKEgpe3ZhciBjPVBILmltZy5nZXRDb250ZXh0KCcyZCcpLHY9W107Zm9yKHZhciBpPTE7aTwxMDtpKyspZm9yKHZhciBqPTE7ajwxMDtqKyspe3ZhciBxPWhwKEgsUy5XKmkvMTAsUy5IKmovMTApLHg9TWF0aC5yb3VuZChxWzBdKSx5PU1hdGgucm91bmQocVsxXSk7aWYoeDwwfHx5PDB8fHg+PVBILnd8fHk+PVBILmgpY29udGludWU7dmFyIGQ9Yy5nZXRJbWFnZURhdGEoeCx5LDEsMSkuZGF0YTt2LnB1c2goTHJnYihbZFswXSxkWzFdLGRbMl1dKSl9CmlmKCF2Lmxlbmd0aClyZXR1cm4gLjg7di5zb3J0KCk7cmV0dXJuIHZbTWF0aC5mbG9vcih2Lmxlbmd0aCouNildfQpmdW5jdGlvbiBiYXNlQ2FudmFzKEgscXVhZCl7dmFyIGtleT1TLndhbGwrJ3wnK1BILnJlY29sb3IrJ3wnK1BILnEuam9pbignLCcpKyd8JytTLlcrJ3gnK1MuSDtpZihQSC5CJiZQSC5Ca2V5PT09a2V5KXJldHVybiBQSC5COwp2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtCLndpZHRoPVBILnc7Qi5oZWlnaHQ9UEguaDt2YXIgeD1CLmdldENvbnRleHQoJzJkJyk7eC5kcmF3SW1hZ2UoUEguaW1nLDAsMCk7CnZhciBsdz13YWxsTHVtKEgpO2lmKFBILnJlY29sb3Ipe3guc2F2ZSgpO3guY2xpcChxdWFkKTthcHBseUNvbG9yKHgsUy53YWxsLGx3LHF1YWQpO3gucmVzdG9yZSgpO1BILkx3PUxyZ2IoaGV4UmdiKFMud2FsbCkpfWVsc2UgUEguTHc9bHc7ClBILkI9QjtQSC5Ca2V5PWtleTtyZXR1cm4gQn0KZnVuY3Rpb24gZHJhd1Bob3RvKG9wdCl7aWYoTU9ERSE9PSdwaG90byd8fCFQSC5pbWcpcmV0dXJuO29wdD1vcHR8fHt9O3ZhciBjdj0kKCd3ay1jdicpO2lmKGN2LndpZHRoIT09UEgud3x8Y3YuaGVpZ2h0IT09UEguaCl7Y3Yud2lkdGg9UEgudztjdi5oZWlnaHQ9UEguaH0KdmFyIHg9Y3YuZ2V0Q29udGV4dCgnMmQnKSxIPUhtKCkscXVhZD1wb2x5MmQoUEgucSksQj1iYXNlQ2FudmFzKEgscXVhZCk7eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249J3NvdXJjZS1vdmVyJzt4LmRyYXdJbWFnZShCLDAsMCk7CnZhciBhMD1ocChILFMuVy8yLFMuSC8yKSxhMT1ocChILFMuVy8yKzEwLFMuSC8yKSxweGNtPU1hdGgubWF4KC4yLE1hdGguaHlwb3QoYTFbMF0tYTBbMF0sYTFbMV0tYTBbMV0pLzEwKTsKaWYoIW9wdC5jbGVhbilTLm9icy5mb3JFYWNoKGZ1bmN0aW9uKG8saSl7dmFyIHk9Uy5ILW8ueS1vLmgscGE9cG9seTJkKFtbby54LHldLFtvLngrby53LHldLFtvLngrby53LHkrby5oXSxbby54LHkrby5oXV0ubWFwKGZ1bmN0aW9uKHYpe3JldHVybiBocChILHZbMF0sdlsxXSl9KSk7Cnguc2F2ZSgpO3guZmlsbFN0eWxlPSdyZ2JhKDIwLDMwLDQ1LC4xNCknO3guZmlsbChwYSk7eC5zZXRMaW5lRGFzaChbOCw2XSk7eC5saW5lV2lkdGg9TWF0aC5tYXgoMixweGNtKi41KTt4LnN0cm9rZVN0eWxlPShpPT09Uy5zZWxPYnMmJlMudGFiPT09J3NjaWFuYScpPycjRjBBMzVFJzoncmdiYSgyNTUsMjU1LDI1NSwuOTUpJzt4LnN0cm9rZShwYSk7eC5yZXN0b3JlKCl9KTsKdmFyIHBhdD14LmNyZWF0ZVBhdHRlcm4oQiwnbm8tcmVwZWF0JyksY2xpcFc9Uy5jbXA\/UEgudypTLmNtcHYvMTAwOlBILnc7Cnguc2F2ZSgpO3guYmVnaW5QYXRoKCk7eC5yZWN0KDAsMCxjbGlwVyxQSC5oKTt4LmNsaXAoKTsKUy5wYW5lbHMuZm9yRWFjaChmdW5jdGlvbihwLGkpe3ZhciBwYT1wb2x5MmQob3V0bGluZShwKS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIGhwKEgsdlswXSx2WzFdKX0pKTsKeC5zYXZlKCk7eC5zaGFkb3dDb2xvcj0ncmdiYSgwLDAsMCwuNDApJzt4LnNoYWRvd0JsdXI9TWF0aC5tYXgoMixweGNtKjEuMSk7eC5zaGFkb3dPZmZzZXRYPXB4Y20qLjQ7eC5zaGFkb3dPZmZzZXRZPXB4Y20qLjY7eC5maWxsU3R5bGU9cGF0O3guZmlsbChwYSk7eC5yZXN0b3JlKCk7CnZhciBjb2w9cC5jfHwoUy5wYz09PSdzYW1lJz9udWxsOlMucGM9PT0ncmF3Jz9SQVdfQ09MOlMucGMpOwppZihjb2wpe3guc2F2ZSgpO3guY2xpcChwYSk7YXBwbHlDb2xvcih4LGNvbCxQSC5MdyxwYSk7eC5yZXN0b3JlKCl9CnZhciBsdz1NYXRoLm1heCgxLHB4Y20qLjgpOwp4LnNhdmUoKTt4LmNsaXAocGEpO3gubGluZVdpZHRoPWx3O3guc3Ryb2tlU3R5bGU9J3JnYmEoMjU1LDI1NSwyNTUsLjQ1KSc7eC50cmFuc2xhdGUocHhjbSouMyxweGNtKi40KTt4LnN0cm9rZShwYSk7eC5yZXN0b3JlKCk7Cnguc2F2ZSgpO3guY2xpcChwYSk7eC5saW5lV2lkdGg9bHc7eC5zdHJva2VTdHlsZT0ncmdiYSgwLDAsMCwuMjIpJzt4LnRyYW5zbGF0ZSgtcHhjbSouMywtcHhjbSouNCk7eC5zdHJva2UocGEpO3gucmVzdG9yZSgpOwppZighb3B0LmNsZWFuJiYoUy5zZWwuaW5kZXhPZihpKT49MHx8aGl0cyhwKXx8b3V0c2lkZShwKSkpe3guc2F2ZSgpO3gubGluZVdpZHRoPU1hdGgubWF4KDIscHhjbSouNDUpO3guc3Ryb2tlU3R5bGU9KGhpdHMocCl8fG91dHNpZGUocCkpPycjRTA0NDJFJzonI0YwQTM1RSc7eC5zZXRMaW5lRGFzaChbOCw1XSk7eC5zdHJva2UocGEpO3gucmVzdG9yZSgpfQp9KTsKeC5yZXN0b3JlKCk7CmlmKFMuY21wJiYhb3B0LmNsZWFuKXt4LnNhdmUoKTt4LnN0cm9rZVN0eWxlPScjRjBBMzVFJzt4LmxpbmVXaWR0aD1NYXRoLm1heCgyLFBILncvNDAwKTt4LnNldExpbmVEYXNoKFsxMiw4XSk7eC5iZWdpblBhdGgoKTt4Lm1vdmVUbyhjbGlwVywwKTt4LmxpbmVUbyhjbGlwVyxQSC5oKTt4LnN0cm9rZSgpO3gucmVzdG9yZSgpfQppZihQSC50b29sPT09J2Nvcm5lcnMnJiYhb3B0LmNsZWFuKXt4LnNhdmUoKTt4LnN0cm9rZVN0eWxlPScjRjBBMzVFJzt4LmxpbmVXaWR0aD1NYXRoLm1heCgyLFBILncvNDUwKTt4LnNldExpbmVEYXNoKFsxNCw5XSk7eC5zdHJva2UocXVhZCk7eC5zZXRMaW5lRGFzaChbXSk7dmFyIFI9TWF0aC5tYXgoMTQsUEgudy81NSk7ClBILnEuZm9yRWFjaChmdW5jdGlvbihjLGspe3guYmVnaW5QYXRoKCk7eC5hcmMoY1swXSxjWzFdLFIsMCw3KTt4LmZpbGxTdHlsZT0ncmdiYSgxMCw0NCw5NywuOCknO3guZmlsbCgpO3gubGluZVdpZHRoPU1hdGgubWF4KDIsUi82KTt4LnN0cm9rZVN0eWxlPScjZmZmJzt4LnN0cm9rZSgpO3guZmlsbFN0eWxlPScjZmZmJzt4LmZvbnQ9JzcwMCAnK01hdGgucm91bmQoUioxLjA1KSsncHggTWFucm9wZSxBcmlhbCxzYW5zLXNlcmlmJzt4LnRleHRBbGlnbj0nY2VudGVyJzt4LnRleHRCYXNlbGluZT0nbWlkZGxlJzt4LmZpbGxUZXh0KFN0cmluZyhrKzEpLGNbMF0sY1sxXSsxKX0pO3gucmVzdG9yZSgpfQp9CmZ1bmN0aW9uIGN2UHQoZSl7dmFyIGN2PSQoJ3drLWN2Jykscj1jdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gWyhlLmNsaWVudFgtci5sZWZ0KSpQSC53L3Iud2lkdGgsKGUuY2xpZW50WS1yLnRvcCkqUEguaC9yLmhlaWdodF19CmZ1bmN0aW9uIHBob3RvUHQoZSl7dmFyIGM9Y3ZQdChlKSxxPWhwKGhpbnYoSG0oKSksY1swXSxjWzFdKTtyZXR1cm4ge3g6cVswXSx5OnFbMV19fQpmdW5jdGlvbiBwaXAocHQscG9seSl7dmFyIGlucz1mYWxzZTtmb3IodmFyIGk9MCxqPXBvbHkubGVuZ3RoLTE7aTxwb2x5Lmxlbmd0aDtqPWkrKyl7dmFyIGE9cG9seVtpXSxiPXBvbHlbal07aWYoKChhWzFdPnB0WzFdKSE9PShiWzFdPnB0WzFdKSkmJihwdFswXTwoYlswXS1hWzBdKSoocHRbMV0tYVsxXSkvKGJbMV0tYVsxXSkrYVswXSkpaW5zPSFpbnN9cmV0dXJuIGluc30KZnVuY3Rpb24gcGlja0NvbG9yKGMpe3ZhciB4PVBILmltZy5nZXRDb250ZXh0KCcyZCcpLHI9NCx4MD1NYXRoLm1heCgwLE1hdGgucm91bmQoY1swXSktcikseTA9TWF0aC5tYXgoMCxNYXRoLnJvdW5kKGNbMV0pLXIpLGQ9eC5nZXRJbWFnZURhdGEoeDAseTAsMipyKzEsMipyKzEpLmRhdGEsczM9WzAsMCwwXSxuPTA7CmZvcih2YXIgaT0wO2k8ZC5sZW5ndGg7aSs9NCl7czNbMF0rPWRbaV07czNbMV0rPWRbaSsxXTtzM1syXSs9ZFtpKzJdO24rK30KUy53YWxsPScjJytzMy5tYXAoZnVuY3Rpb24odil7cmV0dXJuICgnMCcrTWF0aC5yb3VuZCh2L24pLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkuam9pbignJyk7UEgudG9vbD0nZWRpdCc7UEguQmtleT0nJztyZW5kZXIoKTsKcGhvdG9IaW50KCdQb2JyYW55IGtvbG9yIMWbY2lhbnk6ICcrUy53YWxsLnRvVXBwZXJDYXNlKCkrJy4gVGVuIGtvbG9yIGplc3QgdGVyYXogbmEgcnlzdW5rdSBpIHcgemFrxYJhZGNlIOKAnktvbG9yeeKAnS4gS29sb3IgemUgemRqxJljaWEgamVzdCBwcnp5YmxpxbxvbnksIGJvIHRlbGVmb24gc2FtIHptaWVuaWEgamFzbm\/Fm8SHIGkgYmFyd8SZLicpfQpmdW5jdGlvbiBzZXRNb2RlKG0pe01PREU9bTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud2stbWInKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2Iuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLGIuZGF0YXNldC5tPT09bSl9KTskKCd3ay1zdmcnKS5oaWRkZW49bSE9PSdkcmF3JzskKCd3ay1waG90bycpLmhpZGRlbj1tIT09J3Bob3RvJzskKCd3ay1lbXB0eScpLmhpZGRlbj0hIVBILmltZzskKCd3ay1jdicpLmhpZGRlbj0hUEguaW1nO3JlbmRlcigpfQpmdW5jdGlvbiBsb2FkUGhvdG8oZil7aWYoIWYpcmV0dXJuO3ZhciB1cmw9VVJMLmNyZWF0ZU9iamVjdFVSTChmKSxpbT1uZXcgSW1hZ2UoKTsKaW0ub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHNjPU1hdGgubWluKDEsMTYwMC9NYXRoLm1heChpbS5uYXR1cmFsV2lkdGgsaW0ubmF0dXJhbEhlaWdodCkpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7Yy53aWR0aD1NYXRoLnJvdW5kKGltLm5hdHVyYWxXaWR0aCpzYyk7Yy5oZWlnaHQ9TWF0aC5yb3VuZChpbS5uYXR1cmFsSGVpZ2h0KnNjKTtjLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltLDAsMCxjLndpZHRoLGMuaGVpZ2h0KTtVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7ClBILmltZz1jO1BILnc9Yy53aWR0aDtQSC5oPWMuaGVpZ2h0O3ZhciBhc3A9Uy5XL1MuSCxxdz1QSC53Ki43LHFoPXF3L2FzcDtpZihxaD5QSC5oKi43KXtxaD1QSC5oKi43O3F3PXFoKmFzcH12YXIgeDA9KFBILnctcXcpLzIseTA9KFBILmgtcWgpLzI7ClBILnE9W1t4MCx5MF0sW3gwK3F3LHkwXSxbeDArcXcseTArcWhdLFt4MCx5MCtxaF1dO1BILnRvb2w9J2Nvcm5lcnMnO1BILkJrZXk9Jyc7Uy5zZWw9W107c2V0TW9kZSgncGhvdG8nKTtUUksoJ3Byb2pla3RhbnRfemRqZWNpZV93Z3JhbmUnKX07CmltLm9uZXJyb3I9ZnVuY3Rpb24oKXtwaG90b0hpbnQoJ05pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgemRqxJljaWEuIFNwcsOzYnVqIGlubmVnbyBwbGlrdSAoSlBHIGx1YiBQTkcpLicpfTtpbS5zcmM9dXJsfQpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud2stbWInKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7c2V0TW9kZShiLmRhdGFzZXQubSk7aWYoYi5kYXRhc2V0Lm09PT0ncGhvdG8nKVRSSygncHJvamVrdGFudF90cnliX3pkamVjaWUnKX0pfSk7CiQoJ3drLWNhbScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZnVuY3Rpb24oKXtsb2FkUGhvdG8odGhpcy5maWxlc1swXSk7dGhpcy52YWx1ZT0nJ30pOwokKCd3ay1maWxlJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxmdW5jdGlvbigpe2xvYWRQaG90byh0aGlzLmZpbGVzWzBdKTt0aGlzLnZhbHVlPScnfSk7Ci8qIC0tLS0tLS0tLS0gcGVyc2lzdGVuY2UgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBzYXZlKCl7dHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKCd3ay1kZXNpZ25lcicsSlNPTi5zdHJpbmdpZnkoe3M6ZW5jb2RlKCksZ2VuOlMuZ2VuLG51bXM6Uy5udW1zLHlpZWxkOlMueWllbGQsY29hdHM6Uy5jb2F0c30pKX1jYXRjaChlKXt9fQp2YXIgbG9hZGVkPWZhbHNlLGg9bG9jYXRpb24uaGFzaC5tYXRjaCgvcD0oW0EtWmEtejAtOV8tXSspLyk7CmlmKGgpbG9hZGVkPWRlY29kZShoWzFdKTsKc2V0VGltZW91dChmdW5jdGlvbigpe1RSSygncHJvamVrdGFudF9vdHdhcmNpZScse2plenlrOkVOPydlbic6J3BsJyx6X2xpbmt1Omg\/MTowfSl9LDApOwppZighbG9hZGVkKXt0cnl7dmFyIHN0PUpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3drLWRlc2lnbmVyJyl8fCdudWxsJyk7aWYoc3Qpe2xvYWRlZD1kZWNvZGUoc3Qucyk7aWYoc3QuZ2VuKVMuZ2VuPXN0LmdlbjtTLnlpZWxkPXN0LnlpZWxkfHwxMDtTLmNvYXRzPXN0LmNvYXRzfHwyfX1jYXRjaChlKXt9fQppZighbG9hZGVkKXtTLnBhbmVscz1wYXRQYW5lbHMoUkFXWzBdLFMuVyxTLkgpfQpzeW5jSW5wdXRzKCk7c2V0VGFiKCd3em9yJyk7Cn0pKCk7Cg==\")));(new Function(s))();})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Panele \u015bcienne 3D \u00b7 projektant Wpisz wymiary \u015bciany, wybierz gotowy wz\u00f3r albo u\u0142\u00f3\u017c w\u0142asny. Przesuwaj panele palcem, obracaj dwoma palcami, zmieniaj kolory. Na ko\u0144cu dostaniesz plan monta\u017cu i list\u0119 zakup\u00f3w. RysunekNa zdj\u0119ciu mojej \u015bciany Zobacz panele na swojej \u015bcianieZr\u00f3b zdj\u0119cie \u015bciany mo\u017cliwie na wprost, przy dobrym \u015bwietle, tak \u017ceby by\u0142o wida\u0107 jej rogi. Zdj\u0119cie zostaje [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-620","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wispero.pl\/en\/wp-json\/wp\/v2\/pages\/620","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wispero.pl\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wispero.pl\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wispero.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wispero.pl\/en\/wp-json\/wp\/v2\/comments?post=620"}],"version-history":[{"count":9,"href":"https:\/\/wispero.pl\/en\/wp-json\/wp\/v2\/pages\/620\/revisions"}],"predecessor-version":[{"id":630,"href":"https:\/\/wispero.pl\/en\/wp-json\/wp\/v2\/pages\/620\/revisions\/630"}],"wp:attachment":[{"href":"https:\/\/wispero.pl\/en\/wp-json\/wp\/v2\/media?parent=620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}