{"id":144171,"date":"2026-07-27T14:21:52","date_gmt":"2026-07-27T13:21:52","guid":{"rendered":"https:\/\/bonza-retheme.blz.au\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/"},"modified":"2026-07-31T09:52:49","modified_gmt":"2026-07-31T08:52:49","slug":"30-daagse-tracker-voor-het-herstellen-van-de-darmflora","status":"publish","type":"page","link":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/","title":{"rendered":"30-daagse tracker voor het herstellen van de darmflora"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-30-day-gut-reset-tracker\">30-daagse tracker voor het herstellen van de darmflora<\/h2>\n\n<p class=\"wp-block-paragraph\">Werkt de verandering die je hebt doorgevoerd ook echt? Dertig dagen is lang genoeg om een reactie in de darmen van een hond te zien, en veel te lang om alles nauwkeurig in je hoofd bij te houden. Deze <strong>30-daagse darmreset-tracker<\/strong> maakt het resetprotocol uit <em>The Dog Owner&#8217;s Complete Gut Health Guide<\/em> tastbaar: noteer elke dag vier snelle indicatoren \u2014 ontlasting, energie, eetlust en of er een opflakkering was \u2014 en de tracker laat je zien of het aantal goede dagen van je hond toeneemt. Het kost je ongeveer twintig seconden per dag, en vanaf dag zeven zie je de eerste echte trend. Het is een leerzaam hulpmiddel om patronen te herkennen en te bepalen wat je vervolgens kunt doen, geen diagnose.    <\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<div class=\"bonza-grt\" id=\"bonzaGrt\" data-build=\"20260728-414d5b\">\n<style>\n.bonza-grt{\n  --cream:#f8ede3;\n  --paper:#ffffff;\n  --green:#2fa066;\n  --green-deep:#227a4d;\n  --tint:#eaf5ee;\n  --purple:#6e5d84;\n  --deep-purple:#574869;\n  --amber:#ffa825;\n  --amber-deep:#b06a00;\n  --caution-bg:#fff5e6;\n  --divider:#d4bfb2;\n  --field:#c3ad9b;\n  --ink:#382f2b;\n  --muted:#7a6d64;\n  --alert:#c25239;\n  \/* Bonza red, the primary CTA. Distinct from --alert, which stays reserved for\n     the vet gate and form errors. --cta-deep is the hover shade. *\/\n  --cta:#ff6256;\n  --cta-deep:#e6584d;\n  --alert-bg:#fbeeea;\n  --alert-bd:#eecabf;\n  --track:#e6d8ca;\n  background:var(--cream);\n  border:1px solid var(--divider);\n  border-radius:14px;\n  padding:28px 22px;\n  color:var(--ink);\n  font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n  font-size:15.5px;\n  line-height:1.5;\n  max-width:720px;\n  margin:0 auto;\n  box-sizing:border-box;\n}\n.bonza-grt *,.bonza-grt *:before,.bonza-grt *:after{box-sizing:border-box}\n.bonza-grt p{font-family:inherit}\n\n.bonza-grt h3.grt-eyebrow{\n  margin:0 0 10px !important;\n  padding:0 !important;\n  font-family:inherit !important;\n  font-size:19px !important;\n  font-weight:800 !important;\n  letter-spacing:.02em !important;\n  text-transform:none !important;\n  color:var(--purple) !important;\n  line-height:1.25 !important;\n}\n.bonza-grt .grt-lede{font-size:16px;font-weight:400;color:var(--muted);margin:0 0 20px}\n\n.bonza-grt button::before,\n.bonza-grt button:not(.grt-tab)::after{content:none !important;display:none !important}\n\/* Tabs swap between 500 and 800 on hover and selection. A hidden bold copy of the\n   label reserves the wider bold width, so the row does not jog sideways as the\n   weight changes. data-label on each tab feeds it. *\/\n.bonza-grt .grt-tab::after{\n  content:attr(data-label) !important;\n  display:block !important;\n  height:0 !important;\n  overflow:hidden !important;\n  visibility:hidden !important;\n  font-weight:800 !important;\n  white-space:nowrap !important;\n  pointer-events:none !important;\n}\n\n\/* Theme armour. The site theme styles bare <button> elements with its own display\n   font, uppercase transform, larger size and display:flex. Left unforced, that\n   reflows the grade tiles sideways, uppercases every label and inverts the tab\n   states. Everything a theme is likely to set is declared here and forced. *\/\n.bonza-grt button{\n  display:block !important;\n  font-family:inherit !important;\n  font-size:15px !important;\n  font-weight:700 !important;\n  line-height:1.35 !important;\n  letter-spacing:normal !important;\n  text-transform:none !important;\n  text-decoration:none !important;\n  white-space:normal !important;\n  background-image:none !important;\n  box-shadow:none !important;\n  text-shadow:none !important;\n  min-height:0 !important;\n  min-width:0 !important;\n  cursor:pointer;\n  border-radius:10px;\n  transition:background-color .12s ease,border-color .12s ease,color .12s ease;\n}\n.bonza-grt button > *{max-width:100%}\n.bonza-grt button:focus-visible{outline:2px solid var(--green-deep);outline-offset:2px}\n\n.bonza-grt input[type=\"text\"],\n.bonza-grt input[type=\"email\"],\n.bonza-grt input[type=\"number\"],\n.bonza-grt select{\n  background:var(--paper) !important;\n  background-color:var(--paper) !important;\n  border:1.5px solid var(--field) !important;\n  border-radius:10px !important;\n  color:var(--ink) !important;\n  font-family:inherit !important;\n  font-size:16px !important;\n  padding:11px 12px !important;\n  width:100%;\n  -webkit-appearance:none;\n  appearance:none;\n}\n.bonza-grt select{\n  background-image:url(\"data:image\/svg+xml;charset=utf-8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%237a6d64' d='M1 1l5 5 5-5'\/%3E%3C\/svg%3E\") !important;\n  background-repeat:no-repeat !important;\n  background-position:right 12px center !important;\n  padding-right:34px;\n}\n.bonza-grt input:focus,.bonza-grt select:focus{\n  border-color:var(--green) !important;\n  outline:none;\n  box-shadow:0 0 0 3px rgba(47,160,102,.15);\n}\n.bonza-grt label{font-size:14px;font-weight:700;display:block;margin:0 0 6px;color:var(--ink)}\n\n.bonza-grt .grt-view[hidden]{display:none !important}\n\n\/* --- daily log rows --- *\/\n\/* Deliberate exception to the suite pattern: the other Bonza tools give each step\n   its own card and numbered badge, which suits a one-shot assessment you complete\n   once. This tool is opened every day for thirty days, so the log state is a single\n   card of lightly divided rows - a quick check-in rather than a form. The richer\n   per-card treatment is kept for the progress state, where it belongs. *\/\n.bonza-grt .grt-logcard{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:18px;margin:0 0 20px}\n.bonza-grt .grt-q{padding:0 0 18px;margin:0 0 18px;border-bottom:1px solid var(--divider)}\n.bonza-grt .grt-q:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}\n.bonza-grt .grt-qlabel{font-size:17px !important;font-weight:800 !important;color:var(--green-deep) !important;margin:0 0 3px !important;line-height:1.3 !important}\n.bonza-grt .grt-qhint{font-size:14px !important;font-weight:500 !important;color:var(--muted) !important;margin:0 0 10px !important}\n\n\/* --- option buttons --- *\/\n.bonza-grt .grt-opt{\n  background:var(--paper);\n  border:1.5px solid var(--divider);\n  color:var(--ink);\n  font-size:15px !important;\n  font-weight:900 !important;\n  padding:11px 14px !important;\n  text-align:left;\n  width:100% !important;\n  display:block !important;\n}\n.bonza-grt .grt-opt:hover{border-color:var(--green);color:var(--green-deep)}\n.bonza-grt .grt-opt.is-sel,\n.bonza-grt .grt-opt.is-sel:hover,\n.bonza-grt .grt-opt.is-sel:focus,\n.bonza-grt .grt-opt.is-sel:active,\n.bonza-grt .grt-opt.is-sel:focus-visible{\n  background:var(--tint) !important;\n  background-color:var(--tint) !important;\n  border-color:var(--green) !important;\n  color:var(--green-deep) !important;\n}\n.bonza-grt .grt-opt:focus,.bonza-grt .grt-opt:active{\n  background:var(--paper);\n  background-color:var(--paper);\n}\n\n\/* --- primary \/ ghost --- *\/\n.bonza-grt .grt-btn{\n  background:var(--cta) !important;\n  background-color:var(--cta) !important;\n  border:1.5px solid var(--cta) !important;\n  color:var(--paper) !important;\n  font-size:16px !important;\n  font-weight:900 !important;\n  letter-spacing:.01em !important;\n  border-radius:12px !important;\n  min-height:52px !important;\n  padding:14px 20px !important;\n  width:100% !important;\n}\n.bonza-grt .grt-btn:hover,\n.bonza-grt .grt-btn:focus,\n.bonza-grt .grt-btn:active{\n  background:var(--cta-deep) !important;\n  background-color:var(--cta-deep) !important;\n  border-color:var(--cta-deep) !important;\n  color:var(--paper) !important;\n}\n.bonza-grt .grt-btn[disabled]{opacity:.45;cursor:not-allowed}\n.bonza-grt .grt-btn-ghost{\n  background:var(--paper);\n  border:1.5px solid var(--divider);\n  color:var(--ink);\n  font-size:13.5px !important;\n  font-weight:700 !important;\n  padding:9px 14px !important;\n  width:auto !important;\n  display:inline-block !important;\n}\n.bonza-grt .grt-btn-ghost:hover{border-color:var(--green);color:var(--green-deep)}\n\n\/* --- gate --- *\/\n.bonza-grt .grt-gate-card{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:22px 18px}\n.bonza-grt .grt-gate-card h4{font-size:17px;font-weight:800;margin:0 0 8px;color:var(--green-deep)}\n.bonza-grt .grt-gate-card p{font-size:15.5px;margin:0 0 16px;color:var(--ink)}\n.bonza-grt .grt-field{margin-bottom:14px}\n.bonza-grt .grt-consent{font-size:12.5px;line-height:1.5;color:var(--muted);margin:0 0 14px}\n.bonza-grt .grt-consent a{color:var(--green-deep);text-decoration:underline}\n.bonza-grt .grt-reassure{font-size:12.5px;color:var(--muted);text-align:center;margin:12px 0 0}\n.bonza-grt .grt-err{font-size:13.5px;font-weight:700;color:var(--alert);margin:0 0 12px}\n.bonza-grt .grt-err[hidden]{display:none !important}\n\n\/* --- tabs --- *\/\n\/* The theme paints a background on bare buttons, which previously landed on the\n   INACTIVE tab and read as if it were the selected one. Every background here is\n   forced transparent; the active tab is signalled three ways - green text, heavier\n   weight, and the underline sitting on the container's own bottom rule. *\/\n.bonza-grt .grt-tabs{display:flex;flex-wrap:wrap;margin:0 0 20px;border-bottom:2px solid var(--divider)}\n.bonza-grt .grt-tab,\n.bonza-grt .grt-tab:hover,\n.bonza-grt .grt-tab:focus,\n.bonza-grt .grt-tab:active{\n  background:transparent !important;\n  background-color:transparent !important;\n  background-image:none !important;\n  border:0 !important;\n  border-bottom:3px solid transparent !important;\n  border-radius:0 !important;\n  box-shadow:none !important;\n  font-size:15px !important;\n  font-weight:500 !important;\n  padding:10px 2px 11px !important;\n  margin:0 26px -2px 0 !important;\n  width:auto !important;\n  flex:0 0 auto;\n  white-space:nowrap !important;\n  color:var(--muted) !important;\n}\n.bonza-grt .grt-tab:hover,\n.bonza-grt .grt-tab:focus-visible{\n  color:var(--ink) !important;\n  font-weight:800 !important;\n  border-bottom-color:var(--divider) !important;\n}\n.bonza-grt .grt-tab.is-sel,\n.bonza-grt .grt-tab.is-sel:hover,\n.bonza-grt .grt-tab.is-sel:focus,\n.bonza-grt .grt-tab.is-sel:active,\n.bonza-grt .grt-tab.is-sel:focus-visible{\n  color:var(--green-deep) !important;\n  font-weight:800 !important;\n  border-bottom-color:var(--green) !important;\n  background:transparent !important;\n  background-color:transparent !important;\n}\n\/* Weight is the load-bearing signal here, so unselected sits at 500 and selected\n   at 800. An 800 vs 700 pair renders identically in families that ship only one\n   bold face, which is what made both tabs look the same weight at rest. *\/\n\n\/* --- log --- *\/\n.bonza-grt .grt-daybar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 20px;flex-wrap:wrap}\n.bonza-grt .grt-daymeta{font-size:13px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}\n.bonza-grt .grt-daybar select{width:auto !important;min-width:190px;font-size:14px !important;padding:8px 34px 8px 12px !important}\n.bonza-grt .grt-row3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}\n.bonza-grt .grt-row3 .grt-opt{text-align:center !important}\n.bonza-grt .grt-row2{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}\n.bonza-grt .grt-row2 .grt-opt{text-align:center !important}\n\n.bonza-grt .grt-grades{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}\n.bonza-grt .grt-grade{\n  display:block !important;\n  padding:8px !important;\n  text-align:center !important;\n  line-height:1.25 !important;\n  min-width:0;\n  overflow:hidden;\n}\n.bonza-grt .grt-grade img{\n  display:block !important;\n  width:100% !important;\n  height:auto !important;\n  border-radius:8px;\n  margin:0 0 6px !important;\n  background:var(--cream);\n}\n.bonza-grt .grt-grade .grt-gnum{\n  display:block !important;\n  width:100% !important;\n  font-size:17px !important;\n  font-weight:800 !important;\n  line-height:1.2 !important;\n}\n.bonza-grt .grt-grade .grt-glab{\n  display:block !important;\n  width:100% !important;\n  font-size:12.5px !important;\n  font-weight:700 !important;\n  line-height:1.3 !important;\n  color:var(--ink);\n  overflow-wrap:break-word;\n  hyphens:auto;\n}\n.bonza-grt .grt-grade.is-sel .grt-glab{color:var(--green-deep) !important}\n.bonza-grt .grt-i18n,\n.bonza-grt .grt-gdesc{display:none !important}\n.bonza-grt .grt-gradedesc{font-size:14px !important;font-weight:500 !important;color:var(--muted) !important;margin:10px 0 0;min-height:20px}\n\n.bonza-grt .grt-checks{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}\n.bonza-grt .grt-refrow{margin-top:8px}\n.bonza-grt .grt-check{font-size:14px !important;font-weight:900 !important;padding:10px 12px !important;text-align:left !important}\n.bonza-grt .grt-check.is-sel,\n.bonza-grt .grt-check.is-sel:hover,\n.bonza-grt .grt-check.is-sel:focus,\n.bonza-grt .grt-check.is-sel:active{\n  background:var(--caution-bg) !important;\n  background-color:var(--caution-bg) !important;\n  border-color:var(--amber) !important;\n  color:var(--amber-deep) !important;\n}\n.bonza-grt .grt-weight{display:flex;flex-wrap:wrap;gap:10px;align-items:center}\n.bonza-grt .grt-weight input{max-width:120px}\n.bonza-grt .grt-weight span{font-size:14px;color:var(--muted)}\n\n\/* --- progress --- *\/\n.bonza-grt .grt-hero{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:20px 18px;margin:0 0 20px}\n.bonza-grt .grt-hero-eyebrow{font-size:12px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 8px}\n.bonza-grt .grt-hero-num{font-size:56px;font-weight:800;line-height:1;color:var(--green-deep);margin:0}\n.bonza-grt .grt-hero-unit{font-size:26px;font-weight:800}\n.bonza-grt .grt-hero-lab{font-size:21px;font-weight:800;color:var(--ink);margin:6px 0 0;line-height:1.25}\n.bonza-grt .grt-hero-cmp{font-size:15.5px;margin:10px 0 0;color:var(--ink)}\n.bonza-grt .grt-delta{font-weight:800}\n.bonza-grt .grt-delta.up{color:var(--green-deep)}\n.bonza-grt .grt-delta.down{color:var(--alert)}\n.bonza-grt .grt-delta.flat{color:var(--muted)}\n.bonza-grt .grt-hero-note{font-size:12.5px;color:var(--muted);margin:10px 0 0}\n.bonza-grt .grt-toggle{display:inline-flex;flex-wrap:wrap;max-width:100%;border:1.5px solid var(--divider);border-radius:999px;overflow:hidden;margin:14px 0 0;background:var(--paper)}\n.bonza-grt .grt-toggle button{\n  border:none;border-radius:0;background:transparent;color:var(--muted);\n  font-size:13px !important;font-weight:700 !important;padding:8px 14px !important;\n  width:auto !important;display:inline-block !important;\n}\n.bonza-grt .grt-toggle button.is-sel,\n.bonza-grt .grt-toggle button.is-sel:hover,\n.bonza-grt .grt-toggle button.is-sel:focus,\n.bonza-grt .grt-toggle button.is-sel:active{\n  background:var(--tint) !important;\n  background-color:var(--tint) !important;\n  color:var(--green-deep) !important;\n}\n\n.bonza-grt .grt-ringwrap{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);display:flex;align-items:center;gap:18px;padding:18px;margin:0 0 20px}\n.bonza-grt .grt-ring{flex:0 0 92px;width:92px;height:92px}\n.bonza-grt .grt-ringtext .grt-rt1{font-size:17px;font-weight:800;color:var(--green-deep);margin:0}\n.bonza-grt .grt-ringtext .grt-rt2{font-size:14px;color:var(--muted);margin:4px 0 0}\n\n.bonza-grt .grt-upgrade{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);border-left:4px solid var(--purple);padding:18px;margin:0 0 20px;position:relative}\n.bonza-grt .grt-upgrade h5{font-size:17px;font-weight:800;margin:0 0 6px;color:var(--deep-purple)}\n.bonza-grt .grt-upgrade p{font-size:15.5px;margin:0;color:var(--ink);padding-right:18px}\n.bonza-grt .grt-upgrade .grt-dismiss{position:absolute;top:10px;right:10px;background:transparent !important;border:none !important;color:var(--muted) !important;font-size:18px !important;line-height:1 !important;padding:4px 8px !important;width:auto !important;font-weight:700 !important}\n\n.bonza-grt .grt-vet{\n  background:var(--alert-bg);\n  border:1px solid var(--alert-bd);\n  border-left:4px solid var(--alert);\n  border-radius:12px;padding:18px;margin:0 0 20px;\n}\n.bonza-grt .grt-vet h5{font-size:21px;font-weight:800;margin:0 0 6px;color:var(--alert);line-height:1.25}\n.bonza-grt .grt-vet p{font-size:15.5px;margin:0 0 8px;color:var(--ink)}\n.bonza-grt .grt-vet ul{margin:0;padding-left:20px;font-size:15.5px;color:var(--ink)}\n\n.bonza-grt .grt-card{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:18px;margin:0 0 20px}\n.bonza-grt .grt-card h5{font-size:17px;font-weight:800;margin:0 0 3px;color:var(--green-deep);line-height:1.3}\n.bonza-grt .grt-card .grt-cardhint{font-size:14px;font-weight:500;color:var(--muted);margin:0 0 12px}\n.bonza-grt .grt-chart{width:100%;height:auto;display:block;overflow:visible}\n.bonza-grt .grt-empty{font-size:14px;color:var(--muted);margin:0}\n\n.bonza-grt .grt-weeks{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}\n.bonza-grt .grt-week{background:var(--paper);border:1.5px solid var(--divider);border-radius:10px;padding:10px 8px;text-align:center}\n.bonza-grt .grt-week.is-now{border-color:var(--green);background:var(--tint)}\n.bonza-grt .grt-week .grt-wk{font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);display:block}\n.bonza-grt .grt-week .grt-wt{font-size:12px;font-weight:600;color:var(--muted);display:block;margin-top:3px;line-height:1.25}\n\n.bonza-grt .grt-foot{border-top:1px solid var(--divider);margin-top:22px;padding-top:16px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}\n.bonza-grt .grt-foot .grt-footnote{font-size:12.5px;color:var(--muted);margin:0;flex:1 1 100%}\n.bonza-grt .grt-disclaimer{font-size:12.5px;color:var(--muted);margin:16px 0 0;line-height:1.5}\n.bonza-grt .grt-warn{\n  background:var(--caution-bg);\n  border:1px solid var(--divider);\n  border-left:4px solid var(--amber);\n  border-radius:10px;padding:12px 14px;font-size:14px;margin:0 0 16px;color:var(--ink);\n}\n.bonza-grt .grt-toast{background:var(--tint);border:1px solid var(--green);border-radius:10px;padding:12px 14px;font-size:14px;font-weight:700;color:var(--green-deep);margin:0 0 16px}\n.bonza-grt .grt-toast[hidden]{display:none !important}\n\n\/* ---------------------------------------------------------------------------\n   SPECIFICITY ESCALATION - font-weight only.\n\n   Diagnosed on the live page: computed font-weight on .grt-tab resolved to 400\n   despite the tool declaring 500\/800 with !important. The theme sets font-weight\n   on buttons with !important at a specificity .bonza-grt button cannot beat, so\n   every weight in the tool was being overruled while font-size, colour and\n   background came through untouched. The giveaway was the tab's ::after (the\n   hidden bold label used for width reservation) rendering in Segoe UI Black\n   while the button itself rendered regular - the pseudo-element kept its weight\n   because the theme rule does not target it.\n\n   These selectors lead with the wrapper's ID, which outranks any class-based\n   rule no matter how many classes it chains. Weight is the only property\n   escalated; everything else was already winning.\n   --------------------------------------------------------------------------- *\/\n#bonzaGrt.bonza-grt .grt-tab{font-weight:500 !important}\n#bonzaGrt.bonza-grt .grt-tab:hover,\n#bonzaGrt.bonza-grt .grt-tab:focus-visible{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-tab.is-sel,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:hover,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:focus,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:active,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:focus-visible{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-tab::after{font-weight:800 !important}\n\n#bonzaGrt.bonza-grt .grt-opt,\n#bonzaGrt.bonza-grt .grt-opt:hover,\n#bonzaGrt.bonza-grt .grt-opt:focus,\n#bonzaGrt.bonza-grt .grt-opt:active,\n#bonzaGrt.bonza-grt .grt-opt.is-sel{font-weight:900 !important}\n#bonzaGrt.bonza-grt .grt-check,\n#bonzaGrt.bonza-grt .grt-check.is-sel{font-weight:900 !important}\n\n#bonzaGrt.bonza-grt .grt-btn,\n#bonzaGrt.bonza-grt .grt-btn:hover,\n#bonzaGrt.bonza-grt .grt-btn:focus,\n#bonzaGrt.bonza-grt .grt-btn:active{font-weight:900 !important}\n#bonzaGrt.bonza-grt .grt-btn-ghost{font-weight:700 !important}\n\n\/* Footer actions. The theme adds vertical margin to buttons, which knocked the\n   CSV button out of line with Start over. Zero the margins, and let the two\n   share a height so their top and bottom edges match exactly. *\/\n#bonzaGrt.bonza-grt .grt-foot{align-items:stretch !important}\n#bonzaGrt.bonza-grt .grt-foot .grt-btn-ghost{\n  margin:0 !important;\n  align-self:stretch !important;\n  display:inline-flex !important;\n  align-items:center !important;\n  justify-content:center !important;\n  line-height:1.25 !important;\n}\n\n#bonzaGrt.bonza-grt .grt-grade .grt-gnum{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-grade .grt-glab{font-weight:700 !important}\n\n#bonzaGrt.bonza-grt .grt-toggle button{font-weight:700 !important}\n#bonzaGrt.bonza-grt .grt-toggle button.is-sel{font-weight:800 !important}\n\n#bonzaGrt.bonza-grt .grt-eyebrow{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-qlabel{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-qhint{font-weight:500 !important}\n#bonzaGrt.bonza-grt .grt-hero-num,\n#bonzaGrt.bonza-grt .grt-hero-lab,\n#bonzaGrt.bonza-grt .grt-delta{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-card h5,\n#bonzaGrt.bonza-grt .grt-vet h5,\n#bonzaGrt.bonza-grt .grt-upgrade h5,\n#bonzaGrt.bonza-grt .grt-gate-card h4{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-daymeta,\n#bonzaGrt.bonza-grt .grt-week .grt-wk{font-weight:800 !important}\n\n@media (max-width:560px){\n  .bonza-grt{padding:20px 15px}\n  .bonza-grt .grt-logcard,.bonza-grt .grt-card,.bonza-grt .grt-hero,.bonza-grt .grt-ringwrap,.bonza-grt .grt-upgrade,.bonza-grt .grt-vet{padding:15px}\n  .bonza-grt .grt-grades{grid-template-columns:repeat(3,1fr)}\n  .bonza-grt .grt-checks{grid-template-columns:1fr}\n  .bonza-grt .grt-refrow .grt-opt{grid-column:1 \/ -1}\n  .bonza-grt .grt-weeks{grid-template-columns:repeat(2,1fr)}\n  .bonza-grt .grt-hero-num{font-size:46px}\n  .bonza-grt .grt-ringwrap{flex-direction:column;align-items:flex-start;gap:12px}\n  .bonza-grt .grt-daybar select{min-width:0;width:100% !important}\n  .bonza-grt .grt-toggle{width:100%;justify-content:center}\n}\n@media (prefers-reduced-motion:reduce){\n  .bonza-grt *{transition:none !important;animation:none !important}\n}\n<\/style>\n\n<h3 class=\"grt-eyebrow\">Bonza Health Tools: 30-daagse tracker voor het herstellen van de darmflora<\/h3>\n<p class=\"grt-lede\">De 30-daagse reset werkt omdat je kunt zien dat het effect heeft. Noteer elke dag vier snelle indicatoren \u2014 ontlasting, energie, eetlust en of er een opflakkering was \u2014 en kijk of het aantal goede dagen van je hond toeneemt. Dit is een hulpmiddel om inzicht te krijgen, geen diagnose.  <\/p>\n\n<div class=\"grt-warn\" id=\"grtStorageWarn\" hidden=\"\"><\/div>\n\n<section class=\"grt-view\" id=\"grtGate\">\n  <div class=\"grt-gate-card\">\n    <h4>Begin met het bijhouden van de 30-daagse darmreset van je hond<\/h4>\n    <p>Vul je e-mailadres in om je gratis tracker te openen. Je kunt dan dagelijks de vorderingen van je hond bijhouden en zien hoe de trend zich in de loop van 30 dagen ontwikkelt. <\/p>\n    <div class=\"grt-field\">\n      <label for=\"grtDogName\">De naam van je hond (optioneel)<\/label>\n      <input type=\"text\" id=\"grtDogName\" autocomplete=\"off\" placeholder=\"Paddy\"\/>\n    <\/div>\n    <div class=\"grt-field\">\n      <label for=\"grtEmail\">Je e-mailadres<\/label>\n      <input type=\"email\" id=\"grtEmail\" autocomplete=\"email\" inputmode=\"email\" placeholder=\"you@example.com\"\/>\n    <\/div>\n    <p class=\"grt-err\" id=\"grtGateErr\" hidden=\"\"><\/p>\n    <p class=\"grt-consent\">Door verder te gaan, ga je ermee akkoord e-mails van Bonza te ontvangen over je darmreset-tracker en gerelateerde tips voor de darmgezondheid van je hond. Je kunt je op elk moment uitschrijven. Wij behandelen je gegevens in overeenstemming met ons <a href=\"https:\/\/bonza-retheme.blz.au\/nl\/privacybeleid\/\" target=\"_blank\" rel=\"noopener\">privacybeleid<\/a>.  <\/p>\n    <button type=\"button\" class=\"grt-btn\" id=\"grtGateBtn\">Open mijn tracker<\/button>\n    <p class=\"grt-reassure\">Gratis te gebruiken, geen account nodig. Je trackinggegevens blijven op dit apparaat opgeslagen. <\/p>\n  <\/div>\n<\/section>\n\n<section class=\"grt-view\" id=\"grtApp\" hidden=\"\">\n\n  <div class=\"grt-i18n\" id=\"grtI18n\" aria-hidden=\"true\">\n    <span data-w=\"1\">Controleren en verwijderen<\/span>\n    <span data-w=\"2\">Ondersteuning invoeren<\/span>\n    <span data-w=\"3\">Observeer en pas aan<\/span>\n    <span data-w=\"4\">Vaststellen van uitgangssituatie<\/span>\n    <span data-t=\"grade\">Beoordelen<\/span>\n  <\/div>\n\n  <div class=\"grt-tabs\" role=\"tablist\">\n    <button type=\"button\" class=\"grt-tab is-sel\" id=\"grtTabLog\" role=\"tab\" aria-selected=\"true\" data-label=\"Log today\">Dagboek van vandaag<\/button>\n    <button type=\"button\" class=\"grt-tab\" id=\"grtTabProg\" role=\"tab\" aria-selected=\"false\" data-label=\"Progress\">Voortgang<\/button>\n  <\/div>\n\n  <div class=\"grt-view\" id=\"grtLog\">\n    <div class=\"grt-toast\" id=\"grtToast\" hidden=\"\"><\/div>\n\n    <div class=\"grt-daybar\">\n      <div>\n        <div class=\"grt-daymeta\" id=\"grtDayMeta\">Dag 1 van 30 \u00b7 Week 1<\/div>\n      <\/div>\n      <select id=\"grtDaySel\" aria-label=\"Which day are you logging?\"><\/select>\n    <\/div>\n\n    <div class=\"grt-logcard\">\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Ontlastingsscore<\/p>\n        <p class=\"grt-qhint\">Kies de optie die het beste past op de Bonza-schaal met 7 punten. De cijfers 2 en 3 vallen binnen het gezonde bereik. <\/p>\n        <div class=\"grt-grades\" id=\"grtGrades\">\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"1\"><span class=\"grt-gnum\">1<\/span><span class=\"grt-glab\">Harde, droge klontjes<\/span><span class=\"grt-gdesc\">Losse, droge ontlasting die met moeite wordt uitgescheiden. Obstipatie \u2014 meestal een kwestie van vezelinname of vochtinname. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"2\"><span class=\"grt-gnum\">2<\/span><span class=\"grt-glab\">Stevig, gesegmenteerd<\/span><span class=\"grt-gdesc\">Goed gevormd en in segmenten verdeeld, behoudt zijn vorm, laat geen resten achter. Dit is ideaal. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"3\"><span class=\"grt-gnum\">3<\/span><span class=\"grt-glab\">Vochtige, gevormde houtblok<\/span><span class=\"grt-gdesc\">Heeft de vorm van een blok en behoudt zijn vorm, is licht vochtig, laat een vaag spoor achter. Gezond. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"4\"><span class=\"grt-gnum\">4<\/span><span class=\"grt-glab\">Zacht, vormverlies<\/span><span class=\"grt-gdesc\">Nog steeds in de vorm van een blok, maar zacht en vochtig. Verliest zijn vorm als je het oppakt. Het is de moeite waard om in de gaten te houden.  <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"5\"><span class=\"grt-gnum\">5<\/span><span class=\"grt-glab\">Zeer zacht, gedeeltelijk gevormd<\/span><span class=\"grt-gdesc\">Ligt in een gedeeltelijk gevormde hoop in plaats van in een blok.<\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"6\"><span class=\"grt-gnum\">6<\/span><span class=\"grt-glab\">Vormloos, zacht pool<\/span><span class=\"grt-gdesc\">Geen duidelijke vorm, papachtig. Dit is diarree. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"7\"><span class=\"grt-gnum\">7<\/span><span class=\"grt-glab\">Waterig<\/span><span class=\"grt-gdesc\">Vloeibaar, geen vaste stukjes. Waterige diarree \u2014 let goed op de vochtbalans. <\/span><\/button>\n        <\/div>\n        <p class=\"grt-gradedesc\" id=\"grtGradeDesc\"><\/p>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Energieniveau<\/p>\n        <p class=\"grt-qhint\">In vergelijking met wat normaal is voor jouw hond.<\/p>\n        <div class=\"grt-row3\" id=\"grtEnergy\">\n          <button type=\"button\" class=\"grt-opt\" data-v=\"low\">Laag<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"normal\">Normaal<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"high\">Hoog<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Eetlust<\/p>\n        <p class=\"grt-qhint\">Hoe ze vandaag hebben gegeten.<\/p>\n        <div class=\"grt-row3\" id=\"grtAppetite\">\n          <button type=\"button\" class=\"grt-opt\" data-v=\"poor\">Slecht<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"normal\">Normaal<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"eager\">Enthousiast<\/button>\n        <\/div>\n        <div class=\"grt-row3 grt-refrow\">\n          <button type=\"button\" class=\"grt-opt grt-check\" id=\"grtRefused\">Een maaltijd geweigerd<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Een opflakkering vandaag?<\/p>\n        <p class=\"grt-qhint\">Een dag met braken, aandrang, persen, ongelukjes of duidelijk ongemak in de darmen.<\/p>\n        <div class=\"grt-row2\" id=\"grtFlare\">\n          <button type=\"button\" class=\"grt-opt\" data-v=\"no\">Geen opflakkering<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"yes\">Opflakkering vandaag<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Zit er iets ongewoons in de ontlasting?<\/p>\n        <p class=\"grt-qhint\">Vink alles aan wat je hebt gezien. Laat het veld leeg als niets van toepassing is. <\/p>\n        <div class=\"grt-checks\" id=\"grtFlags\">\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"black\">Zwart of teerachtig<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"blood\">Vers bloed of rode strepen<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"pale\">Bleek, grijs of kleikleurig<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"worms\">Zichtbare wormen of rijstachtige segmenten<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"mucus\">Een dikke slijm- of geleiachtige laag<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"foreign\">Iets wat ze niet hadden moeten eten<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Gewicht <span style=\"font-weight:600;color:var(--muted)\">(optioneel)<\/span><\/p>\n        <p class=\"grt-qhint\">E\u00e9n keer per week is ruim voldoende. Dezelfde weegschaal, hetzelfde tijdstip van de dag. <\/p>\n        <div class=\"grt-weight\">\n          <input type=\"number\" id=\"grtWeight\" step=\"0.1\" min=\"0\" max=\"120\" inputmode=\"decimal\" placeholder=\"0.0\"\/>\n          <span>kg<\/span>\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n    <button type=\"button\" class=\"grt-btn\" id=\"grtSave\">Bewaar deze dag<\/button>\n\n    <div class=\"grt-foot\">\n      <p class=\"grt-footnote\">Je logbestanden worden uitsluitend in deze browser op dit apparaat opgeslagen.<\/p>\n      <button type=\"button\" class=\"grt-btn-ghost\" id=\"grtExport\">Mijn gegevens downloaden (CSV)<\/button>\n      <button type=\"button\" class=\"grt-btn-ghost\" id=\"grtReset\">Opnieuw beginnen<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"grt-view\" id=\"grtProgress\" hidden=\"\">\n    <div id=\"grtVetSlot\"><\/div>\n    <div id=\"grtHeroSlot\"><\/div>\n    <div id=\"grtUpgradeSlot\"><\/div>\n    <div id=\"grtRingSlot\"><\/div>\n    <div id=\"grtWeeksSlot\" class=\"grt-card\"><\/div>\n    <div id=\"grtChartsSlot\"><\/div>\n    <p class=\"grt-disclaimer\">Deze tracker is bedoeld ter informatie. Hij registreert wat u waarneemt en toont de ontwikkeling in de loop van de tijd. Hij stelt geen diagnose en is geen vervanging voor advies van een dierenarts. Als uw hond zich niet goed voelt, als zijn toestand verslechtert of als u zich zorgen maakt, neem dan contact op met uw dierenarts.   <\/p>\n  <\/div>\n\n<\/section>\n<\/div>\n<script src=\"data:text\/javascript;base64,KGZ1bmN0aW9uKCl7CiAgInVzZSBzdHJpY3QiOwoKICB2YXIgQ0ZHID0gewogICAgbnM6ICJib256YV9ncnRfdjEiLAogICAgcmVzZXREYXlzOiAzMCwKICAgIHNjcm9sbE9mZnNldDogMTAwLAogICAgcHJpdmFjeVVybDogImh0dHBzOi8vd3d3LmJvbnphLmRvZy9wcml2YWN5LXBvbGljeS8iLAogICAgZ3JhZGVJbWFnZXM6IFsKICAgICAgImh0dHBzOi8vd3d3LmJvbnphLmRvZy93cC1jb250ZW50L3VwbG9hZHMvZG9nLXBvb3AtY2hhcnQtZ3JhZGUtMS1oYXJkLWRyeS1sdW1wcy1jb25zdGlwYXRpb24ud2VicCIsCiAgICAgICJodHRwczovL3d3dy5ib256YS5kb2cvd3AtY29udGVudC91cGxvYWRzL2RvZy1wb29wLWNoYXJ0LWdyYWRlLTItZmlybS1zZWdtZW50ZWQtaGVhbHRoeS1pZGVhbC53ZWJwIiwKICAgICAgImh0dHBzOi8vd3d3LmJvbnphLmRvZy93cC1jb250ZW50L3VwbG9hZHMvZG9nLXBvb3AtY2hhcnQtZ3JhZGUtMy1tb2lzdC1mb3JtZWQtbG9nLWhlYWx0aHkud2VicCIsCiAgICAgICJodHRwczovL3d3dy5ib256YS5kb2cvd3AtY29udGVudC91cGxvYWRzL2RvZy1wb29wLWNoYXJ0LWdyYWRlLTQtc29mdC1tb2lzdC1sb3NpbmctZm9ybS53ZWJwIiwKICAgICAgImh0dHBzOi8vd3d3LmJvbnphLmRvZy93cC1jb250ZW50L3VwbG9hZHMvZG9nLXBvb3AtY2hhcnQtZ3JhZGUtNS12ZXJ5LXNvZnQtcGFydGx5LWZvcm1lZC1waWxlLndlYnAiLAogICAgICAiaHR0cHM6Ly93d3cuYm9uemEuZG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy9kb2ctcG9vcC1jaGFydC1ncmFkZS02LWZvcm1sZXNzLXNvZnQtcGlsZS1kaWFycmhvZWEud2VicCIsCiAgICAgICJodHRwczovL3d3dy5ib256YS5kb2cvd3AtY29udGVudC91cGxvYWRzL2RvZy1wb29wLWNoYXJ0LWdyYWRlLTctd2F0ZXJ5LWRpYXJyaG9lYS53ZWJwIgogICAgXSwKICAgIHVwZ3JhZGVVcmw6ICIiLAoKICAgIC8qIEtsYXZpeW8gbGVhZCBjYXB0dXJlLiBGaWxsIGJvdGggSURzIGluIGFuZCB0aGUgZ2F0ZSBzdGFydHMgc3Vic2NyaWJpbmc7CiAgICAgICBsZWF2ZSBlaXRoZXIgYmxhbmsgYW5kIHRoZSB0cmFja2VyIHJ1bnMgZXhhY3RseSBhcyBiZWZvcmUsIGNhcHR1cmluZyBub3RoaW5nLgogICAgICAgY29tcGFueUlkIGlzIHRoZSA2LWNoYXJhY3RlciBwdWJsaWMgQVBJIGtleSAoc2l0ZSBJRCkgLSBpdCBpcyBkZXNpZ25lZCB0byBiZQogICAgICAgcHVibGljIGFuZCBzYWZlIHRvIHNoaXAgaW4gY2xpZW50LXNpZGUgY29kZS4gRG8gTk9UIHB1dCBhIHByaXZhdGUga2V5IGhlcmUuICovCiAgICBrbGF2aXlvOiB7CiAgICAgIGNvbXBhbnlJZDogIlhSUjlFRCIsCiAgICAgIGxpc3RJZDogIlRTdzdiVCIsCiAgICAgIHJldmlzaW9uOiAiMjAyNi0wNy0xNSIsCiAgICAgIHNvdXJjZTogIjMwLURheSBHdXQgUmVzZXQgVHJhY2tlciIsCiAgICAgIHNlbmREb2dOYW1lOiB0cnVlLAogICAgICBtYXhUcmllczogNQogICAgfQogIH07CgogIHZhciBQQUwgPSB7CiAgICBwYXBlcjoiI2ZmZmZmZiIsIGdyZWVuOiIjMmZhMDY2IiwgZ3JlZW5EZWVwOiIjMjI3YTRkIiwgdGludDoiI2VhZjVlZSIsCiAgICBhbWJlcjoiI2ZmYTgyNSIsIGFtYmVyRGVlcDoiI2IwNmEwMCIsIGRpdmlkZXI6IiNkNGJmYjIiLCBpbms6IiMzODJmMmIiLAogICAgbXV0ZWQ6IiM3YTZkNjQiLCB0cmFjazoiI2U2ZDhjYSIKICB9OwoKICB2YXIgR1JBREVTID0gWwogICAge246MSxsYWI6IkhhcmQsIGRyeSBsdW1wcyIsZGVzYzoiU2VwYXJhdGUgZHJ5IGx1bXBzLCBwYXNzZWQgd2l0aCBlZmZvcnQuIENvbnN0aXBhdGlvbiBcdTIwMTQgdXN1YWxseSBhIGZpYnJlIG9yIGh5ZHJhdGlvbiBpc3N1ZS4ifSwKICAgIHtuOjIsbGFiOiJGaXJtLCBzZWdtZW50ZWQiLGRlc2M6IldlbGwgZm9ybWVkIGFuZCBzZWdtZW50ZWQsIGhvbGRzIGl0cyBzaGFwZSwgbGVhdmVzIG5vdGhpbmcgYmVoaW5kLiBUaGlzIGlzIGlkZWFsLiJ9LAogICAge246MyxsYWI6Ik1vaXN0LCBmb3JtZWQgbG9nIixkZXNjOiJMb2cgc2hhcGVkIGFuZCBob2xkcyBmb3JtLCBzbGlnaHRseSBtb2lzdCwgbGVhdmVzIGEgZmFpbnQgbWFyay4gSGVhbHRoeS4ifSwKICAgIHtuOjQsbGFiOiJTb2Z0LCBsb3NpbmcgZm9ybSIsZGVzYzoiU3RpbGwgbG9nIHNoYXBlZCBidXQgc29mdCBhbmQgbW9pc3QuIExvc2VzIGl0cyBzaGFwZSB3aGVuIHBpY2tlZCB1cC4gV29ydGggd2F0Y2hpbmcuIn0sCiAgICB7bjo1LGxhYjoiVmVyeSBzb2Z0LCBwYXJ0bHkgZm9ybWVkIixkZXNjOiJTaXRzIGluIGEgcGFydGx5IGZvcm1lZCBwaWxlIHJhdGhlciB0aGFuIGEgbG9nLiJ9LAogICAge246NixsYWI6IkZvcm1sZXNzIHNvZnQgcGlsZSIsZGVzYzoiTm8gZGVmaW5lZCBzaGFwZSwgcG9ycmlkZ2UtbGlrZS4gVGhpcyBpcyBkaWFycmhvZWEuIn0sCiAgICB7bjo3LGxhYjoiV2F0ZXJ5IixkZXNjOiJMaXF1aWQsIG5vIHNvbGlkIHBpZWNlcy4gV2F0ZXJ5IGRpYXJyaG9lYSBcdTIwMTQgd2F0Y2ggaHlkcmF0aW9uIGNsb3NlbHkuIn0KICBdOwogIHZhciBIRUFMVEhZID0gWzIsM107CgogIHZhciBFTkVSR1kgICA9IFt7djoibG93IixsYWI6IkxvdyJ9LHt2OiJub3JtYWwiLGxhYjoiTm9ybWFsIn0se3Y6ImhpZ2giLGxhYjoiSGlnaCJ9XTsKICB2YXIgQVBQRVRJVEUgPSBbe3Y6InBvb3IiLGxhYjoiUG9vciJ9LHt2OiJub3JtYWwiLGxhYjoiTm9ybWFsIn0se3Y6ImVhZ2VyIixsYWI6IkVhZ2VyIn1dOwogIHZhciBGTEFSRSAgICA9IFt7djoibm8iLGxhYjoiTm8gZmxhcmUtdXAifSx7djoieWVzIixsYWI6IkZsYXJlLXVwIHRvZGF5In1dOwoKICB2YXIgRkxBR1MgPSBbCiAgICB7azoiYmxhY2siLCBsYWI6IkJsYWNrIG9yIHRhci1saWtlIn0sCiAgICB7azoiYmxvb2QiLCBsYWI6IkZyZXNoIGJsb29kIG9yIHJlZCBzdHJlYWtzIn0sCiAgICB7azoicGFsZSIsICBsYWI6IlBhbGUsIGdyZXkgb3IgY2xheS1jb2xvdXJlZCJ9LAogICAge2s6Indvcm1zIiwgbGFiOiJWaXNpYmxlIHdvcm1zIG9yIHJpY2UtbGlrZSBzZWdtZW50cyJ9LAogICAge2s6Im11Y3VzIiwgbGFiOiJIZWF2eSBtdWN1cyBvciBqZWxseSBjb2F0aW5nIn0sCiAgICB7azoiZm9yZWlnbiIsIGxhYjoiU29tZXRoaW5nIHRoZXkgc2hvdWxkbid0IGhhdmUgZWF0ZW4ifQogIF07CgogIHZhciBXRUVLUyA9IFsKICAgIHt0OiJBdWRpdCAmIHJlbW92ZSJ9LAogICAge3Q6IkludHJvZHVjZSBzdXBwb3J0In0sCiAgICB7dDoiT2JzZXJ2ZSAmIGFkanVzdCJ9LAogICAge3Q6IkVzdGFibGlzaCBiYXNlbGluZSJ9CiAgXTsKCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9uemFHcnQiKTsKICBpZighcm9vdCl7IHJldHVybjsgfQoKICB2YXIgc3RvcmFnZU9LID0gdHJ1ZTsKICB2YXIgbWVtID0gbnVsbDsKCiAgZnVuY3Rpb24gdGVzdFN0b3JhZ2UoKXsKICAgIHRyeXsKICAgICAgdmFyIHQgPSAiX19ncnRfdF9fIjsKICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHQsIjEiKTsKICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH1jYXRjaChlKXsgcmV0dXJuIGZhbHNlOyB9CiAgfQoKICBmdW5jdGlvbiBsb2FkKCl7CiAgICBpZighc3RvcmFnZU9LKXsgcmV0dXJuIG1lbTsgfQogICAgdHJ5ewogICAgICB2YXIgcmF3ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKENGRy5ucyk7CiAgICAgIGlmKCFyYXcpeyByZXR1cm4gbnVsbDsgfQogICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpOwogICAgfWNhdGNoKGUpeyByZXR1cm4gbnVsbDsgfQogIH0KCiAgZnVuY3Rpb24gc2F2ZSgpewogICAgaWYoIXN0b3JhZ2VPSyl7IG1lbSA9IHN0YXRlOyByZXR1cm47IH0KICAgIHRyeXsgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKENGRy5ucywgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTsgfQogICAgY2F0Y2goZSl7IHN0b3JhZ2VPSyA9IGZhbHNlOyBtZW0gPSBzdGF0ZTsgc2hvd1N0b3JhZ2VXYXJuKCk7IH0KICB9CgogIGZ1bmN0aW9uIHNob3dTdG9yYWdlV2FybigpewogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFN0b3JhZ2VXYXJuIik7CiAgICBpZighZWwpeyByZXR1cm47IH0KICAgIGVsLnRleHRDb250ZW50ID0gIlRoaXMgYnJvd3NlciBpcyBibG9ja2luZyBsb2NhbCBzdG9yYWdlLCBzbyB0b2RheSdzIGVudHJpZXMgd29uJ3QgYmUgcmVtZW1iZXJlZCBhZnRlciB5b3UgY2xvc2UgdGhlIHBhZ2UuIFByaXZhdGUvaW5jb2duaXRvIG1vZGUgaXMgdGhlIHVzdWFsIGNhdXNlLiBFdmVyeXRoaW5nIGVsc2Ugc3RpbGwgd29ya3MuIjsKICAgIGVsLmhpZGRlbiA9IGZhbHNlOwogIH0KCiAgdmFyIHN0YXRlID0gbnVsbDsKCiAgZnVuY3Rpb24gYmxhbmtTdGF0ZSgpewogICAgcmV0dXJuIHsgZW1haWw6IiIsIGRvZ05hbWU6IiIsIGNvbnNlbnRBdDoiIiwgc3RhcnREYXRlOiIiLCBlbnRyaWVzOnt9LCB3ZWlnaHRzOnt9LCBoZXJvTW9kZToiYmFzZWxpbmUiLCB1cGdyYWRlRGlzbWlzc2VkOmZhbHNlLCBzdWJzY3JpYmVkOmZhbHNlLCBzdWJzY3JpYmVUcmllczowIH07CiAgfQoKICBmdW5jdGlvbiBwYWQobil7IHJldHVybiBuPDEwID8gIjAiK24gOiAiIituOyB9CiAgZnVuY3Rpb24ga2V5T2YoZCl7IHJldHVybiBkLmdldEZ1bGxZZWFyKCkrIi0iK3BhZChkLmdldE1vbnRoKCkrMSkrIi0iK3BhZChkLmdldERhdGUoKSk7IH0KICBmdW5jdGlvbiBwYXJzZUtleShrKXsgdmFyIHAgPSBrLnNwbGl0KCItIik7IHJldHVybiBuZXcgRGF0ZShwYXJzZUludChwWzBdLDEwKSwgcGFyc2VJbnQocFsxXSwxMCktMSwgcGFyc2VJbnQocFsyXSwxMCkpOyB9CiAgZnVuY3Rpb24gdG9kYXlLZXkoKXsgcmV0dXJuIGtleU9mKG5ldyBEYXRlKCkpOyB9CiAgZnVuY3Rpb24gZGF5c0JldHdlZW4oYSxiKXsKICAgIHZhciBtcyA9IHBhcnNlS2V5KGIpLmdldFRpbWUoKSAtIHBhcnNlS2V5KGEpLmdldFRpbWUoKTsKICAgIHJldHVybiBNYXRoLnJvdW5kKG1zLzg2NDAwMDAwKTsKICB9CiAgZnVuY3Rpb24gZGF5TnVtYmVyKGspeyByZXR1cm4gZGF5c0JldHdlZW4oc3RhdGUuc3RhcnREYXRlLCBrKSArIDE7IH0KICBmdW5jdGlvbiB3ZWVrT2YoZG4peyB2YXIgdyA9IE1hdGguY2VpbChkbi83KTsgaWYodzwxKXt3PTE7fSBpZih3PjQpe3c9NDt9IHJldHVybiB3OyB9CiAgZnVuY3Rpb24gZm10U2hvcnQoayl7CiAgICB2YXIgZCA9IHBhcnNlS2V5KGspOwogICAgdmFyIGRheXMgPSBbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdOwogICAgdmFyIG1vbnMgPSBbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdOwogICAgcmV0dXJuIGRheXNbZC5nZXREYXkoKV0rIiAiK2QuZ2V0RGF0ZSgpKyIgIittb25zW2QuZ2V0TW9udGgoKV07CiAgfQogIGZ1bmN0aW9uIGVzYyhzKXsKICAgIHJldHVybiBTdHJpbmcocykucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iik7CiAgfQogIGZ1bmN0aW9uIGRvZ1Bvc3Nlc3NpdmUoKXsKICAgIGlmKHN0YXRlLmRvZ05hbWUpeyByZXR1cm4gZXNjKHN0YXRlLmRvZ05hbWUpKyIncyI7IH0KICAgIHJldHVybiAiWW91ciBkb2cncyI7CiAgfQogIGZ1bmN0aW9uIGRvZ05hbWUoKXsgcmV0dXJuIHN0YXRlLmRvZ05hbWUgPyBlc2Moc3RhdGUuZG9nTmFtZSkgOiAieW91ciBkb2ciOyB9CgogIGZ1bmN0aW9uIGxvZ2dlZEtleXMoKXsKICAgIHZhciBrcyA9IFtdOwogICAgZm9yKHZhciBrIGluIHN0YXRlLmVudHJpZXMpeyBpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUuZW50cmllcyxrKSl7IGtzLnB1c2goayk7IH0gfQogICAga3Muc29ydCgpOwogICAgcmV0dXJuIGtzOwogIH0KCiAgZnVuY3Rpb24gZ29vZERheXMoa2V5cyl7CiAgICB2YXIgZ29vZCA9IDAsIG4gPSAwOwogICAgZm9yKHZhciBpPTA7aTxrZXlzLmxlbmd0aDtpKyspewogICAgICB2YXIgZSA9IHN0YXRlLmVudHJpZXNba2V5c1tpXV07CiAgICAgIGlmKCFlIHx8IHR5cGVvZiBlLnN0b29sICE9PSAibnVtYmVyIil7IGNvbnRpbnVlOyB9CiAgICAgIG4rKzsKICAgICAgaWYoSEVBTFRIWS5pbmRleE9mKGUuc3Rvb2wpID4gLTEpeyBnb29kKys7IH0KICAgIH0KICAgIHJldHVybiB7IG46biwgZ29vZDpnb29kLCBwY3Q6IG4gPyBNYXRoLnJvdW5kKGdvb2QvbioxMDApIDogMCB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSBLbGF2aXlvIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24ga2xhdml5b1N1YnNjcmliZShlbWFpbCwgZG9nKXsKICAgIHZhciBLID0gQ0ZHLmtsYXZpeW87CiAgICBpZighSy5jb21wYW55SWQgfHwgIUsubGlzdElkKXsgcmV0dXJuOyB9CiAgICBpZighZW1haWwpeyByZXR1cm47IH0KICAgIGlmKHR5cGVvZiB3aW5kb3cuZmV0Y2ggIT09ICJmdW5jdGlvbiIpeyByZXR1cm47IH0KICAgIGlmKChzdGF0ZS5zdWJzY3JpYmVUcmllcyB8fCAwKSA+PSBLLm1heFRyaWVzKXsgcmV0dXJuOyB9CgogICAgc3RhdGUuc3Vic2NyaWJlVHJpZXMgPSAoc3RhdGUuc3Vic2NyaWJlVHJpZXMgfHwgMCkgKyAxOwogICAgc2F2ZSgpOwoKICAgIHZhciBwcm9wcyA9IHsgIlNpZ251cCBTb3VyY2UiOiBLLnNvdXJjZSB9OwogICAgaWYoSy5zZW5kRG9nTmFtZSAmJiBkb2cpeyBwcm9wc1siRG9nIE5hbWUiXSA9IGRvZzsgfQoKICAgIHZhciBwYXlsb2FkID0gewogICAgICBkYXRhOiB7CiAgICAgICAgdHlwZTogInN1YnNjcmlwdGlvbiIsCiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY3VzdG9tX3NvdXJjZTogSy5zb3VyY2UsCiAgICAgICAgICBwcm9maWxlOiB7CiAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICB0eXBlOiAicHJvZmlsZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgICAgZW1haWw6IGVtYWlsLAogICAgICAgICAgICAgICAgcHJvcGVydGllczogcHJvcHMsCiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zOiB7IGVtYWlsOiB7IG1hcmtldGluZzogeyBjb25zZW50OiAiU1VCU0NSSUJFRCIgfSB9IH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlbGF0aW9uc2hpcHM6IHsKICAgICAgICAgIGxpc3Q6IHsgZGF0YTogeyB0eXBlOiAibGlzdCIsIGlkOiBLLmxpc3RJZCB9IH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CgogICAgdHJ5ewogICAgICB3aW5kb3cuZmV0Y2goImh0dHBzOi8vYS5rbGF2aXlvLmNvbS9jbGllbnQvc3Vic2NyaXB0aW9ucy8\/Y29tcGFueV9pZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KEsuY29tcGFueUlkKSwgewogICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgIGhlYWRlcnM6IHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiwgInJldmlzaW9uIjogSy5yZXZpc2lvbiB9LAogICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLAogICAgICAgIGtlZXBhbGl2ZTogdHJ1ZQogICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgaWYocmVzICYmIChyZXMuc3RhdHVzID09PSAyMDIgfHwgcmVzLm9rKSl7CiAgICAgICAgICBzdGF0ZS5zdWJzY3JpYmVkID0gdHJ1ZTsKICAgICAgICAgIHNhdmUoKTsKICAgICAgICB9CiAgICAgIH0pWyJjYXRjaCJdKGZ1bmN0aW9uKCl7IC8qIG9mZmxpbmUgb3IgYmxvY2tlZCAtIHJldHJpZWQgb24gbmV4dCB2aXNpdCAqLyB9KTsKICAgIH1jYXRjaChlKXsgLyogbmV2ZXIgbGV0IGxlYWQgY2FwdHVyZSBicmVhayB0aGUgdG9vbCAqLyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tIGdhdGUgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiB2YWxpZEVtYWlsKHYpewogICAgcmV0dXJuIC9eW15cc0BdK0BbXlxzQF0rXC5bXlxzQF17Mix9JC8udGVzdCh2KTsKICB9CgogIGZ1bmN0aW9uIGluaXRHYXRlKCl7CiAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEdhdGVCdG4iKTsKICAgIHZhciBlcnIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R2F0ZUVyciIpOwogICAgdmFyIGVtICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRFbWFpbCIpOwogICAgdmFyIGRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnREb2dOYW1lIik7CiAgICBpZighYnRuIHx8ICFlbSl7IHJldHVybjsgfQoKICAgIGZ1bmN0aW9uIGdvKCl7CiAgICAgIHZhciB2ID0gKGVtLnZhbHVlfHwiIikudHJpbSgpOwogICAgICBpZighdmFsaWRFbWFpbCh2KSl7CiAgICAgICAgZXJyLnRleHRDb250ZW50ID0gIlRoYXQgZW1haWwgZG9lc24ndCBsb29rIHJpZ2h0LiBDaGVjayBpdCBhbmQgdHJ5IGFnYWluLiI7CiAgICAgICAgZXJyLmhpZGRlbiA9IGZhbHNlOwogICAgICAgIGVtLmZvY3VzKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVyci5oaWRkZW4gPSB0cnVlOwogICAgICBzdGF0ZSA9IGJsYW5rU3RhdGUoKTsKICAgICAgc3RhdGUuZW1haWwgPSB2OwogICAgICBzdGF0ZS5kb2dOYW1lID0gKGRuICYmIGRuLnZhbHVlID8gZG4udmFsdWUudHJpbSgpLnNsaWNlKDAsNDApIDogIiIpOwogICAgICBzdGF0ZS5jb25zZW50QXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7CiAgICAgIHN0YXRlLnN0YXJ0RGF0ZSA9IHRvZGF5S2V5KCk7CiAgICAgIHNhdmUoKTsKICAgICAgb3BlbkFwcCgpOwogICAgICBrbGF2aXlvU3Vic2NyaWJlKHN0YXRlLmVtYWlsLCBzdGF0ZS5kb2dOYW1lKTsKICAgIH0KCiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBnbyk7CiAgICBlbS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZnVuY3Rpb24oZXYpeyBpZihldi5rZXkgPT09ICJFbnRlciIpeyBnbygpOyB9IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSBsb2cgdmlldyAtLS0tLS0tLS0tICovCgogIHZhciBkcmFmdCA9IG51bGw7CgogIGZ1bmN0aW9uIG5ld0RyYWZ0KCl7CiAgICByZXR1cm4geyBzdG9vbDpudWxsLCBlbmVyZ3k6bnVsbCwgYXBwZXRpdGU6bnVsbCwgcmVmdXNlZDpmYWxzZSwgZmxhcmU6bnVsbCwgZmxhZ3M6W10sIHdlaWdodDoiIiB9OwogIH0KCiAgZnVuY3Rpb24gc2VsZWN0ZWREYXkoKXsKICAgIHZhciBzZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0RGF5U2VsIik7CiAgICByZXR1cm4gc2VsICYmIHNlbC52YWx1ZSA\/IHNlbC52YWx1ZSA6IHRvZGF5S2V5KCk7CiAgfQoKICBmdW5jdGlvbiBidWlsZERheVNlbGVjdCgpewogICAgdmFyIHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnREYXlTZWwiKTsKICAgIGlmKCFzZWwpeyByZXR1cm47IH0KICAgIHZhciB0ayA9IHRvZGF5S2V5KCk7CiAgICB2YXIgY3VyRG4gPSBkYXlOdW1iZXIodGspOwogICAgdmFyIG91dCA9IFtdOwogICAgdmFyIHN0YXJ0ID0gY3VyRG4gLSA2OwogICAgaWYoc3RhcnQgPCAxKXsgc3RhcnQgPSAxOyB9CiAgICBmb3IodmFyIGRuID0gY3VyRG47IGRuID49IHN0YXJ0OyBkbi0tKXsKICAgICAgdmFyIGQgPSBwYXJzZUtleShzdGF0ZS5zdGFydERhdGUpOwogICAgICBkLnNldERhdGUoZC5nZXREYXRlKCkgKyAoZG4tMSkpOwogICAgICB2YXIgayA9IGtleU9mKGQpOwogICAgICB2YXIgbGFiZWw7CiAgICAgIGlmKGsgPT09IHRrKXsgbGFiZWwgPSAiVG9kYXkiOyB9CiAgICAgIGVsc2UgaWYoZGF5c0JldHdlZW4oayx0aykgPT09IDEpeyBsYWJlbCA9ICJZZXN0ZXJkYXkiOyB9CiAgICAgIGVsc2UgeyBsYWJlbCA9IGZtdFNob3J0KGspOyB9CiAgICAgIGxhYmVsICs9ICIgIFx1MDBiNyAgRGF5ICIgKyBkbjsKICAgICAgaWYoc3RhdGUuZW50cmllc1trXSl7IGxhYmVsICs9ICIgIFx1MjcxMyI7IH0KICAgICAgb3V0LnB1c2goJzxvcHRpb24gdmFsdWU9IicraysnIj4nK2VzYyhsYWJlbCkrJzwvb3B0aW9uPicpOwogICAgfQogICAgc2VsLmlubmVySFRNTCA9IG91dC5qb2luKCIiKTsKICAgIHNlbC52YWx1ZSA9IHRrOwogIH0KCiAgZnVuY3Rpb24gb3B0QnV0dG9uKGNscywgbGFiZWwsIHN1Yil7CiAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYi50eXBlID0gImJ1dHRvbiI7CiAgICBiLmNsYXNzTmFtZSA9ICJncnQtb3B0ICIgKyBjbHM7CiAgICBiLmlubmVySFRNTCA9IHN1YiA\/ICgnPHNwYW4gY2xhc3M9ImdydC1nbnVtIj4nK2xhYmVsKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImdydC1nbGFiIj4nK2VzYyhzdWIpKyc8L3NwYW4+JykgOiBlc2MobGFiZWwpOwogICAgcmV0dXJuIGI7CiAgfQoKICBmdW5jdGlvbiBtYXJrR3JvdXAoY29udGFpbmVyLCB2YWx1ZSwgYXR0cil7CiAgICB2YXIga2lkcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24iKTsKICAgIGZvcih2YXIgaT0wO2k8a2lkcy5sZW5ndGg7aSsrKXsKICAgICAgdmFyIHYgPSBraWRzW2ldLmdldEF0dHJpYnV0ZShhdHRyKTsKICAgICAgaWYodmFsdWUgIT09IG51bGwgJiYgU3RyaW5nKHZhbHVlKSA9PT0gdil7IGtpZHNbaV0uY2xhc3NMaXN0LmFkZCgiaXMtc2VsIik7IH0KICAgICAgZWxzZSB7IGtpZHNbaV0uY2xhc3NMaXN0LnJlbW92ZSgiaXMtc2VsIik7IH0KICAgIH0KICB9CgogIC8qIC0tLS0tLS0tLS0gdHJhbnNsYXRhYmxlIG9wdGlvbiBsYWJlbHMgLS0tLS0tLS0tLQogICAgIEV2ZXJ5IG9wdGlvbiBsYWJlbCBpcyB3cml0dGVuIGludG8gdGhlIHBhZ2UgbWFya3VwIHNvIFdQTUwgY2FuIHRyYW5zbGF0ZQogICAgIGl0IG9uIHRoZSAvZGUvIC9lcy8gL2ZyLyAvbmwvIHZlcnNpb25zLiBUaGUgYXJyYXlzIGFib3ZlIGFyZSB0aGUgRW5nbGlzaAogICAgIGZhbGxiYWNrOiBpZiB0aGUgbWFya3VwIGlzIG1pc3Npbmcgb3IgaGFzIGJlZW4gc3RyaXBwZWQsIGVhY2ggYnVpbGRlcgogICAgIGNyZWF0ZXMgaXRzIGJ1dHRvbnMgZXhhY3RseSBhcyBpdCBkaWQgYmVmb3JlLiBUaGUga2V5IHZhbHVlcyAoZGF0YS1nLAogICAgIGRhdGEtdiwgZGF0YS1rKSBhcmUgcmUtYXNzZXJ0ZWQgZnJvbSB0aGUgYXJyYXlzIGFmdGVyIGFkb3B0aW9uLCBzbyB0aGUKICAgICB0b29sIGtlZXBzIHdvcmtpbmcgZXZlbiBpZiBhIHRyYW5zbGF0aW9uIGxheWVyIGFsdGVycyBhbiBhdHRyaWJ1dGUuICovCgogIHZhciBHUkFERV9XT1JEID0gIkdyYWRlIjsKCiAgZnVuY3Rpb24gbGFiZWxUZXh0KGVsKXsKICAgIHJldHVybiAoZWwgJiYgZWwudGV4dENvbnRlbnQpID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICIgIikudHJpbSgpIDogIiI7CiAgfQoKICBmdW5jdGlvbiBhZG9wdEkxOG4oKXsKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEkxOG4iKTsKICAgIGlmKCF3cmFwKXsgcmV0dXJuOyB9CiAgICB2YXIgd3MgPSB3cmFwLnF1ZXJ5U2VsZWN0b3JBbGwoInNwYW5bZGF0YS13XSIpOwogICAgZm9yKHZhciBpPTA7aTx3cy5sZW5ndGg7aSsrKXsKICAgICAgdmFyIG4gPSBwYXJzZUludCh3c1tpXS5nZXRBdHRyaWJ1dGUoImRhdGEtdyIpLCAxMCk7CiAgICAgIHZhciB0ID0gbGFiZWxUZXh0KHdzW2ldKTsKICAgICAgaWYodCAmJiBuID49IDEgJiYgbiA8PSBXRUVLUy5sZW5ndGgpeyBXRUVLU1tuLTFdLnQgPSB0OyB9CiAgICB9CiAgICB2YXIgZyA9IGxhYmVsVGV4dCh3cmFwLnF1ZXJ5U2VsZWN0b3IoJ3NwYW5bZGF0YS10PSJncmFkZSJdJykpOwogICAgaWYoZyl7IEdSQURFX1dPUkQgPSBnOyB9CiAgfQoKICBmdW5jdGlvbiBncmFkZURlc2NMaW5lKG4pewogICAgdmFyIGcgPSBHUkFERVNbbi0xXTsKICAgIHJldHVybiBnID8gKEdSQURFX1dPUkQgKyAiICIgKyBuICsgIiBcdTIwMTQgIiArIGcuZGVzYykgOiAiIjsKICB9CgogIGZ1bmN0aW9uIHdpcmVHcmFkZSh3cmFwLCBiLCBpZHgpewogICAgdmFyIG4gPSBwYXJzZUludChiLmdldEF0dHJpYnV0ZSgiZGF0YS1nIiksIDEwKTsKICAgIGlmKCEobiA+PSAxICYmIG4gPD0gR1JBREVTLmxlbmd0aCkpeyBuID0gaWR4ICsgMTsgfQogICAgdmFyIGcgPSBHUkFERVNbbi0xXTsKICAgIGlmKCFnKXsgcmV0dXJuOyB9CiAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS1nIiwgbik7CgogICAgdmFyIGxhYiA9IGxhYmVsVGV4dChiLnF1ZXJ5U2VsZWN0b3IoIi5ncnQtZ2xhYiIpKTsKICAgIHZhciBkZXNjID0gbGFiZWxUZXh0KGIucXVlcnlTZWxlY3RvcigiLmdydC1nZGVzYyIpKTsKICAgIGlmKGxhYil7IGcubGFiID0gbGFiOyB9CiAgICBpZihkZXNjKXsgZy5kZXNjID0gZGVzYzsgfQogICAgYi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCBHUkFERV9XT1JEICsgIiAiICsgbiArICIsICIgKyBnLmxhYik7CgogICAgdmFyIGltZyA9IENGRy5ncmFkZUltYWdlc1tuLTFdOwogICAgaWYoaW1nICYmICFiLnF1ZXJ5U2VsZWN0b3IoImltZyIpKXsKICAgICAgdmFyIGltID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICAgIGltLnNyYyA9IGltZzsKICAgICAgaW0uYWx0ID0gIiI7CiAgICAgIGltLnNldEF0dHJpYnV0ZSgibG9hZGluZyIsICJsYXp5Iik7CiAgICAgIGltLm9uZXJyb3IgPSBmdW5jdGlvbigpeyBpbS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOyB9OwogICAgICBpZihiLmZpcnN0Q2hpbGQpeyBiLmluc2VydEJlZm9yZShpbSwgYi5maXJzdENoaWxkKTsgfSBlbHNlIHsgYi5hcHBlbmRDaGlsZChpbSk7IH0KICAgIH0KCiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgZHJhZnQuc3Rvb2wgPSBuOwogICAgICBtYXJrR3JvdXAod3JhcCwgbiwgImRhdGEtZyIpOwogICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRHcmFkZURlc2MiKTsKICAgICAgaWYoZCl7IGQudGV4dENvbnRlbnQgPSBncmFkZURlc2NMaW5lKG4pOyB9CiAgICAgIGIuYmx1cigpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBidWlsZEdyYWRlcygpewogICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R3JhZGVzIik7CiAgICBpZighd3JhcCl7IHJldHVybjsgfQoKICAgIHZhciBleGlzdGluZyA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uW2RhdGEtZ10iKTsKICAgIGlmKGV4aXN0aW5nICYmIGV4aXN0aW5nLmxlbmd0aCl7CiAgICAgIGZvcih2YXIgaT0wO2k8ZXhpc3RpbmcubGVuZ3RoO2krKyl7IHdpcmVHcmFkZSh3cmFwLCBleGlzdGluZ1tpXSwgaSk7IH0KICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdyYXAuaW5uZXJIVE1MID0gIiI7CiAgICBmb3IodmFyIGo9MDtqPEdSQURFUy5sZW5ndGg7aisrKXsKICAgICAgKGZ1bmN0aW9uKGcsIGl4KXsKICAgICAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgIGIudHlwZSA9ICJidXR0b24iOwogICAgICAgIGIuY2xhc3NOYW1lID0gImdydC1vcHQgZ3J0LWdyYWRlIjsKICAgICAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS1nIiwgZy5uKTsKICAgICAgICB2YXIgaW1nID0gQ0ZHLmdyYWRlSW1hZ2VzW2cubi0xXTsKICAgICAgICB2YXIgaHRtbCA9ICIiOwogICAgICAgIGlmKGltZyl7CiAgICAgICAgICBodG1sICs9ICc8aW1nIHNyYz0iJytlc2MoaW1nKSsnIiBhbHQ9IiIgbG9hZGluZz0ibGF6eSIgb25lcnJvcj0idGhpcy5zdHlsZS5kaXNwbGF5PVwnbm9uZVwnIj4nOwogICAgICAgIH0KICAgICAgICBodG1sICs9ICc8c3BhbiBjbGFzcz0iZ3J0LWdudW0iPicrZy5uKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImdydC1nbGFiIj4nK2VzYyhnLmxhYikrJzwvc3Bhbj4nOwogICAgICAgIGIuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICB3cmFwLmFwcGVuZENoaWxkKGIpOwogICAgICAgIHdpcmVHcmFkZSh3cmFwLCBiLCBpeCk7CiAgICAgIH0pKEdSQURFU1tqXSwgaik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB3aXJlQ2hvaWNlKHdyYXAsIGIsIGxpc3QsIGZpZWxkLCBpZHgpewogICAgdmFyIHYgPSBiLmdldEF0dHJpYnV0ZSgiZGF0YS12Iik7CiAgICB2YXIgbyA9IG51bGw7CiAgICBmb3IodmFyIGk9MDtpPGxpc3QubGVuZ3RoO2krKyl7IGlmKGxpc3RbaV0udiA9PT0gdil7IG8gPSBsaXN0W2ldOyBicmVhazsgfSB9CiAgICBpZighbyl7IG8gPSBsaXN0W2lkeF07IH0KICAgIGlmKCFvKXsgcmV0dXJuOyB9CiAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS12Iiwgby52KTsKCiAgICB2YXIgdCA9IGxhYmVsVGV4dChiKTsKICAgIGlmKHQpeyBvLmxhYiA9IHQ7IH0KCiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgZHJhZnRbZmllbGRdID0gby52OwogICAgICBtYXJrR3JvdXAod3JhcCwgby52LCAiZGF0YS12Iik7CiAgICAgIGIuYmx1cigpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBidWlsZENob2ljZShpZCwgbGlzdCwgZmllbGQpewogICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICBpZighd3JhcCl7IHJldHVybjsgfQoKICAgIHZhciBleGlzdGluZyA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uW2RhdGEtdl0iKTsKICAgIGlmKGV4aXN0aW5nICYmIGV4aXN0aW5nLmxlbmd0aCl7CiAgICAgIGZvcih2YXIgaT0wO2k8ZXhpc3RpbmcubGVuZ3RoO2krKyl7IHdpcmVDaG9pY2Uod3JhcCwgZXhpc3RpbmdbaV0sIGxpc3QsIGZpZWxkLCBpKTsgfQogICAgICByZXR1cm47CiAgICB9CgogICAgd3JhcC5pbm5lckhUTUwgPSAiIjsKICAgIGZvcih2YXIgaj0wO2o8bGlzdC5sZW5ndGg7aisrKXsKICAgICAgKGZ1bmN0aW9uKG8sIGl4KXsKICAgICAgICB2YXIgYiA9IG9wdEJ1dHRvbigiIiwgby5sYWIpOwogICAgICAgIGIuc2V0QXR0cmlidXRlKCJkYXRhLXYiLCBvLnYpOwogICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYik7CiAgICAgICAgd2lyZUNob2ljZSh3cmFwLCBiLCBsaXN0LCBmaWVsZCwgaXgpOwogICAgICB9KShsaXN0W2pdLCBqKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHdpcmVGbGFnKHdyYXAsIGIsIGlkeCl7CiAgICB2YXIgayA9IGIuZ2V0QXR0cmlidXRlKCJkYXRhLWsiKTsKICAgIHZhciBmID0gbnVsbDsKICAgIGZvcih2YXIgaT0wO2k8RkxBR1MubGVuZ3RoO2krKyl7IGlmKEZMQUdTW2ldLmsgPT09IGspeyBmID0gRkxBR1NbaV07IGJyZWFrOyB9IH0KICAgIGlmKCFmKXsgZiA9IEZMQUdTW2lkeF07IH0KICAgIGlmKCFmKXsgcmV0dXJuOyB9CiAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS1rIiwgZi5rKTsKCiAgICB2YXIgdCA9IGxhYmVsVGV4dChiKTsKICAgIGlmKHQpeyBmLmxhYiA9IHQ7IH0KCiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgdmFyIGl4ID0gZHJhZnQuZmxhZ3MuaW5kZXhPZihmLmspOwogICAgICBpZihpeCA+IC0xKXsgZHJhZnQuZmxhZ3Muc3BsaWNlKGl4LDEpOyBiLmNsYXNzTGlzdC5yZW1vdmUoImlzLXNlbCIpOyB9CiAgICAgIGVsc2UgeyBkcmFmdC5mbGFncy5wdXNoKGYuayk7IGIuY2xhc3NMaXN0LmFkZCgiaXMtc2VsIik7IH0KICAgICAgYi5ibHVyKCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGJ1aWxkRmxhZ3MoKXsKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEZsYWdzIik7CiAgICBpZighd3JhcCl7IHJldHVybjsgfQoKICAgIHZhciBleGlzdGluZyA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uW2RhdGEta10iKTsKICAgIGlmKGV4aXN0aW5nICYmIGV4aXN0aW5nLmxlbmd0aCl7CiAgICAgIGZvcih2YXIgaT0wO2k8ZXhpc3RpbmcubGVuZ3RoO2krKyl7IHdpcmVGbGFnKHdyYXAsIGV4aXN0aW5nW2ldLCBpKTsgfQogICAgICByZXR1cm47CiAgICB9CgogICAgd3JhcC5pbm5lckhUTUwgPSAiIjsKICAgIGZvcih2YXIgaj0wO2o8RkxBR1MubGVuZ3RoO2orKyl7CiAgICAgIChmdW5jdGlvbihmLCBpeCl7CiAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgICAgICBiLnR5cGUgPSAiYnV0dG9uIjsKICAgICAgICBiLmNsYXNzTmFtZSA9ICJncnQtb3B0IGdydC1jaGVjayI7CiAgICAgICAgYi5zZXRBdHRyaWJ1dGUoImRhdGEtayIsIGYuayk7CiAgICAgICAgYi50ZXh0Q29udGVudCA9IGYubGFiOwogICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYik7CiAgICAgICAgd2lyZUZsYWcod3JhcCwgYiwgaXgpOwogICAgICB9KShGTEFHU1tqXSwgaik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBsb2FkRHJhZnRGb3Ioayl7CiAgICBkcmFmdCA9IG5ld0RyYWZ0KCk7CiAgICB2YXIgZSA9IHN0YXRlLmVudHJpZXNba107CiAgICBpZihlKXsKICAgICAgZHJhZnQuc3Rvb2wgPSAodHlwZW9mIGUuc3Rvb2wgPT09ICJudW1iZXIiKSA\/IGUuc3Rvb2wgOiBudWxsOwogICAgICBkcmFmdC5lbmVyZ3kgPSBlLmVuZXJneSB8fCBudWxsOwogICAgICBkcmFmdC5hcHBldGl0ZSA9IGUuYXBwZXRpdGUgfHwgbnVsbDsKICAgICAgZHJhZnQucmVmdXNlZCA9ICEhZS5yZWZ1c2VkOwogICAgICBkcmFmdC5mbGFyZSA9IGUuZmxhcmUgfHwgbnVsbDsKICAgICAgZHJhZnQuZmxhZ3MgPSAoZS5mbGFncyB8fCBbXSkuc2xpY2UoKTsKICAgIH0KICAgIGlmKHN0YXRlLndlaWdodHNba10gIT0gbnVsbCl7IGRyYWZ0LndlaWdodCA9IFN0cmluZyhzdGF0ZS53ZWlnaHRzW2tdKTsgfQoKICAgIG1hcmtHcm91cChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R3JhZGVzIiksIGRyYWZ0LnN0b29sLCAiZGF0YS1nIik7CiAgICBtYXJrR3JvdXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEVuZXJneSIpLCBkcmFmdC5lbmVyZ3ksICJkYXRhLXYiKTsKICAgIG1hcmtHcm91cChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0QXBwZXRpdGUiKSwgZHJhZnQuYXBwZXRpdGUsICJkYXRhLXYiKTsKICAgIG1hcmtHcm91cChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0RmxhcmUiKSwgZHJhZnQuZmxhcmUsICJkYXRhLXYiKTsKCiAgICB2YXIgZGVzYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRHcmFkZURlc2MiKTsKICAgIGlmKGRlc2MpewogICAgICBkZXNjLnRleHRDb250ZW50ID0gZHJhZnQuc3Rvb2wgPyBncmFkZURlc2NMaW5lKGRyYWZ0LnN0b29sKSA6ICIiOwogICAgfQoKICAgIHZhciByZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0UmVmdXNlZCIpOwogICAgaWYocmVmKXsgaWYoZHJhZnQucmVmdXNlZCl7IHJlZi5jbGFzc0xpc3QuYWRkKCJpcy1zZWwiKTsgfSBlbHNlIHsgcmVmLmNsYXNzTGlzdC5yZW1vdmUoImlzLXNlbCIpOyB9IH0KCiAgICB2YXIgZncgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0RmxhZ3MiKTsKICAgIGlmKGZ3KXsKICAgICAgdmFyIGtpZHMgPSBmdy5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24iKTsKICAgICAgZm9yKHZhciBpPTA7aTxraWRzLmxlbmd0aDtpKyspewogICAgICAgIHZhciBrayA9IGtpZHNbaV0uZ2V0QXR0cmlidXRlKCJkYXRhLWsiKTsKICAgICAgICBpZihkcmFmdC5mbGFncy5pbmRleE9mKGtrKSA+IC0xKXsga2lkc1tpXS5jbGFzc0xpc3QuYWRkKCJpcy1zZWwiKTsgfSBlbHNlIHsga2lkc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCJpcy1zZWwiKTsgfQogICAgICB9CiAgICB9CgogICAgdmFyIHcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0V2VpZ2h0Iik7CiAgICBpZih3KXsgdy52YWx1ZSA9IGRyYWZ0LndlaWdodDsgfQoKICAgIHZhciBtZXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydERheU1ldGEiKTsKICAgIGlmKG1ldGEpewogICAgICB2YXIgZG4gPSBkYXlOdW1iZXIoayk7CiAgICAgIGlmKGRuID4gQ0ZHLnJlc2V0RGF5cyl7CiAgICAgICAgbWV0YS50ZXh0Q29udGVudCA9ICJEYXkgIitkbisiIFx1MDBiNyByZXNldCBjb21wbGV0ZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWV0YS50ZXh0Q29udGVudCA9ICJEYXkgIitkbisiIG9mICIrQ0ZHLnJlc2V0RGF5cysiIFx1MDBiNyBXZWVrICIrd2Vla09mKGRuKSsiOiAiK1dFRUtTW3dlZWtPZihkbiktMV0udDsKICAgICAgfQogICAgfQoKICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0U2F2ZSIpOwogICAgaWYoYnRuKXsgYnRuLnRleHRDb250ZW50ID0gc3RhdGUuZW50cmllc1trXSA\/ICJVcGRhdGUgdGhpcyBkYXkiIDogIlNhdmUgdGhpcyBkYXkiOyB9CiAgfQoKICBmdW5jdGlvbiBzYXZlRGF5KCl7CiAgICB2YXIgayA9IHNlbGVjdGVkRGF5KCk7CiAgICB2YXIgdG9hc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0VG9hc3QiKTsKICAgIGlmKGRyYWZ0LnN0b29sID09PSBudWxsKXsKICAgICAgaWYodG9hc3QpewogICAgICAgIHRvYXN0LnRleHRDb250ZW50ID0gIlBpY2sgYSBzdG9vbCBzY29yZSBmaXJzdCBcdTIwMTQgaXQncyB0aGUgb25lIGZpZWxkIHRoZSB0cmVuZCBpcyBidWlsdCBvbi4iOwogICAgICAgIHRvYXN0LmhpZGRlbiA9IGZhbHNlOwogICAgICB9CiAgICAgIHZhciBnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEdyYWRlcyIpOwogICAgICBpZihnICYmIGcuc2Nyb2xsSW50b1ZpZXcpeyBnLnNjcm9sbEludG9WaWV3KHtibG9jazoiY2VudGVyIn0pOyB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKHRvYXN0KXsgdG9hc3QuaGlkZGVuID0gdHJ1ZTsgfQoKICAgIHN0YXRlLmVudHJpZXNba10gPSB7CiAgICAgIHN0b29sOiBkcmFmdC5zdG9vbCwKICAgICAgZW5lcmd5OiBkcmFmdC5lbmVyZ3ksCiAgICAgIGFwcGV0aXRlOiBkcmFmdC5hcHBldGl0ZSwKICAgICAgcmVmdXNlZDogISFkcmFmdC5yZWZ1c2VkLAogICAgICBmbGFyZTogZHJhZnQuZmxhcmUsCiAgICAgIGZsYWdzOiBkcmFmdC5mbGFncy5zbGljZSgpLAogICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpCiAgICB9OwoKICAgIHZhciB3RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0V2VpZ2h0Iik7CiAgICB2YXIgd3YgPSB3RWwgPyBwYXJzZUZsb2F0KHdFbC52YWx1ZSkgOiBOYU47CiAgICBpZighaXNOYU4od3YpICYmIHd2ID4gMCl7IHN0YXRlLndlaWdodHNba10gPSBNYXRoLnJvdW5kKHd2KjEwKS8xMDsgfQogICAgZWxzZSBpZihzdGF0ZS53ZWlnaHRzW2tdICE9IG51bGwgJiYgKCF3RWwgfHwgd0VsLnZhbHVlID09PSAiIikpeyBkZWxldGUgc3RhdGUud2VpZ2h0c1trXTsgfQoKICAgIHNhdmUoKTsKICAgIGJ1aWxkRGF5U2VsZWN0KCk7CiAgICB2YXIgc2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydERheVNlbCIpOwogICAgaWYoc2VsKXsgc2VsLnZhbHVlID0gazsgfQogICAgbG9hZERyYWZ0Rm9yKGspOwogICAgc2hvd1RhYigicHJvZyIpOwogICAgc2Nyb2xsVG9Ub29sKCk7CiAgfQoKICBmdW5jdGlvbiBzY3JvbGxUb1Rvb2woKXsKICAgIHRyeXsKICAgICAgaWYoIXJvb3QgfHwgdHlwZW9mIHJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAiZnVuY3Rpb24iKXsgcmV0dXJuOyB9CiAgICAgIHZhciB0b3AgPSAod2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgMCk7CiAgICAgIHZhciB5ID0gcm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0b3AgLSBDRkcuc2Nyb2xsT2Zmc2V0OwogICAgICBpZih5IDwgMCl7IHkgPSAwOyB9CiAgICAgIHZhciBzbW9vdGggPSB0cnVlOwogICAgICB0cnl7CiAgICAgICAgaWYod2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcyl7IHNtb290aCA9IGZhbHNlOyB9CiAgICAgIH1jYXRjaChlKXt9CiAgICAgIGlmKHNtb290aCl7CiAgICAgICAgdHJ5eyB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6eSwgYmVoYXZpb3I6InNtb290aCIgfSk7IHJldHVybjsgfWNhdGNoKGUpe30KICAgICAgfQogICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgeSk7CiAgICB9Y2F0Y2goZSl7fQogIH0KCiAgLyogLS0tLS0tLS0tLSB2ZXQgZ2F0ZSAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHZldENoZWNrKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgZm91bmQgPSBbXTsKICAgIHZhciByZWNlbnQgPSBrcy5zbGljZSgtMyk7CiAgICBmb3IodmFyIGk9MDtpPHJlY2VudC5sZW5ndGg7aSsrKXsKICAgICAgdmFyIGUgPSBzdGF0ZS5lbnRyaWVzW3JlY2VudFtpXV07CiAgICAgIGlmKCFlIHx8ICFlLmZsYWdzKXsgY29udGludWU7IH0KICAgICAgZm9yKHZhciBqPTA7ajxlLmZsYWdzLmxlbmd0aDtqKyspewogICAgICAgIGlmKGUuZmxhZ3Nbal0gPT09ICJmb3JlaWduIil7IGNvbnRpbnVlOyB9CiAgICAgICAgaWYoZm91bmQuaW5kZXhPZihlLmZsYWdzW2pdKSA9PT0gLTEpeyBmb3VuZC5wdXNoKGUuZmxhZ3Nbal0pOyB9CiAgICAgIH0KICAgIH0KICAgIHZhciBydW43ID0gMCwgcnVuNjcgPSAwLCBzdG9wNyA9IGZhbHNlLCBzdG9wNjcgPSBmYWxzZTsKICAgIGZvcih2YXIgbSA9IGtzLmxlbmd0aC0xOyBtID49IDA7IG0tLSl7CiAgICAgIHZhciBlbiA9IHN0YXRlLmVudHJpZXNba3NbbV1dOwogICAgICB2YXIgZyA9IGVuID8gZW4uc3Rvb2wgOiBudWxsOwogICAgICBpZighc3RvcDcpeyBpZihnID09PSA3KXsgcnVuNysrOyB9IGVsc2UgeyBzdG9wNyA9IHRydWU7IH0gfQogICAgICBpZighc3RvcDY3KXsgaWYoZyA9PT0gNiB8fCBnID09PSA3KXsgcnVuNjcrKzsgfSBlbHNlIHsgc3RvcDY3ID0gdHJ1ZTsgfSB9CiAgICAgIGlmKHN0b3A3ICYmIHN0b3A2Nyl7IGJyZWFrOyB9CiAgICB9CiAgICB2YXIgd2F0ZXJ5UnVuID0gcnVuNyA+PSAzOwogICAgdmFyIGxvb3NlUnVuID0gcnVuNjcgPj0gNTsKICAgIGlmKCFmb3VuZC5sZW5ndGggJiYgIXdhdGVyeVJ1biAmJiAhbG9vc2VSdW4peyByZXR1cm4gIiI7IH0KCiAgICB2YXIgaXRlbXMgPSBbXTsKICAgIGZvcih2YXIgZj0wOyBmPGZvdW5kLmxlbmd0aDsgZisrKXsKICAgICAgZm9yKHZhciBnMj0wOyBnMjxGTEFHUy5sZW5ndGg7IGcyKyspewogICAgICAgIGlmKEZMQUdTW2cyXS5rID09PSBmb3VuZFtmXSl7IGl0ZW1zLnB1c2goIjxsaT4iK2VzYyhGTEFHU1tnMl0ubGFiKSsiPC9saT4iKTsgfQogICAgICB9CiAgICB9CiAgICBpZih3YXRlcnlSdW4peyBpdGVtcy5wdXNoKCI8bGk+V2F0ZXJ5IHN0b29sIChncmFkZSA3KSB0aHJlZSBsb2dnZWQgZGF5cyBydW5uaW5nPC9saT4iKTsgfQogICAgZWxzZSBpZihsb29zZVJ1bil7IGl0ZW1zLnB1c2goIjxsaT5EaWFycmhvZWEgKGdyYWRlIDYgb3IgNykgZml2ZSBsb2dnZWQgZGF5cyBydW5uaW5nPC9saT4iKTsgfQoKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LXZldCI+JyArCiAgICAgICc8aDU+Qm9vayBhIHZldCBhcHBvaW50bWVudDwvaDU+JyArCiAgICAgICc8cD5Zb3VcdTIwMTl2ZSBsb2dnZWQgc29tZXRoaW5nIGluIHRoZSBsYXN0IGZldyBkYXlzIHRoYXQgbmVlZHMgYSBwcm9mZXNzaW9uYWwgbG9vayByYXRoZXIgdGhhbiBtb3JlIHRyYWNraW5nOjwvcD4nICsKICAgICAgJzx1bD4nK2l0ZW1zLmpvaW4oIiIpKyc8L3VsPicgKwogICAgICAnPHAgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+S2VlcCBsb2dnaW5nIGlmIGl0IGhlbHBzIHlvdSBkZXNjcmliZSB0aGUgcGF0dGVybiB0byB5b3VyIHZldCBcdTIwMTQgYnV0IGRvblx1MjAxOXQgd2FpdCBvbiB0aGUgMzAtZGF5IHRyZW5kIHRvIGRlY2lkZS4gQ2FsbCB0aGVtLjwvcD4nICsKICAgICAgJzwvZGl2Pic7CiAgfQoKICAvKiAtLS0tLS0tLS0tIGhlcm8gLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBwY3RCbG9jayhjdXIsIHByZXZQY3QsIHByZXZMYWJlbCwgY3VyTGFiZWwsIG5vdGUpewogICAgdmFyIGRlbHRhID0gY3VyLnBjdCAtIHByZXZQY3Q7CiAgICB2YXIgY2xzID0gZGVsdGEgPiAwID8gInVwIiA6IChkZWx0YSA8IDAgPyAiZG93biIgOiAiZmxhdCIpOwogICAgdmFyIGFycm93ID0gZGVsdGEgPiAwID8gIlx1MjViMiIgOiAoZGVsdGEgPCAwID8gIlx1MjViYyIgOiAiXHUyMDEzIik7CiAgICB2YXIgY21wID0gIiI7CiAgICBpZihwcmV2UGN0ICE9PSBudWxsKXsKICAgICAgY21wID0gJzxwIGNsYXNzPSJncnQtaGVyby1jbXAiPjxzcGFuIGNsYXNzPSJncnQtZGVsdGEgJytjbHMrJyI+JythcnJvdysiICIrTWF0aC5hYnMoZGVsdGEpKyIgcG9pbnRzPC9zcGFuPiB2cyAiK2VzYyhwcmV2TGFiZWwpKyIgKCIrcHJldlBjdCsiJSk8L3A+IjsKICAgIH0KICAgIHJldHVybiAnPHAgY2xhc3M9ImdydC1oZXJvLWV5ZWJyb3ciPicrZXNjKGN1ckxhYmVsKSsnPC9wPicgKwogICAgICAnPHAgY2xhc3M9ImdydC1oZXJvLW51bSI+JytjdXIucGN0Kyc8c3BhbiBjbGFzcz0iZ3J0LWhlcm8tdW5pdCI+JTwvc3Bhbj48L3A+JyArCiAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tbGFiIj5nb29kIGRheXMgZm9yICcrZG9nTmFtZSgpKyc8L3A+JyArCiAgICAgIGNtcCArCiAgICAgIChub3RlID8gJzxwIGNsYXNzPSJncnQtaGVyby1ub3RlIj4nK25vdGUrJzwvcD4nIDogIiIpOwogIH0KCiAgZnVuY3Rpb24gaGVyb0hUTUwoKXsKICAgIHZhciBrcyA9IGxvZ2dlZEtleXMoKTsKICAgIHZhciBuID0ga3MubGVuZ3RoOwoKICAgIGlmKG4gPCA3KXsKICAgICAgdmFyIGxlZnQgPSA3IC0gbjsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtaGVybyI+JyArCiAgICAgICAgJzxwIGNsYXNzPSJncnQtaGVyby1leWVicm93Ij5CdWlsZGluZyB5b3VyIGJhc2VsaW5lPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tbnVtIj4nK24rJzxzcGFuIGNsYXNzPSJncnQtaGVyby11bml0Ij4vNzwvc3Bhbj48L3A+JyArCiAgICAgICAgJzxwIGNsYXNzPSJncnQtaGVyby1sYWIiPmRheXMgbG9nZ2VkPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tY21wIj5LZWVwIGdvaW5nIFx1MjAxNCAnK2RvZ1Bvc3Nlc3NpdmUoKSsnIGZpcnN0IHRyZW5kIHVubG9ja3MgYWZ0ZXIgJytsZWZ0KycgbW9yZSAnKyhsZWZ0PT09MT8iZGF5IjoiZGF5cyIpKycuPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tbm90ZSI+V2VlayAxIGlzIHlvdXIgYmFzZWxpbmUuIEV2ZXJ5dGhpbmcgdGhhdCBmb2xsb3dzIGlzIG1lYXN1cmVkIGFnYWluc3QgaXQsIHNvIGxvZyBpdCBob25lc3RseSByYXRoZXIgdGhhbiBvcHRpbWlzdGljYWxseS48L3A+JyArCiAgICAgICAgJzwvZGl2Pic7CiAgICB9CgogICAgdmFyIGJvZHksIG5vdGUgPSAiIjsKICAgIGlmKHN0YXRlLmhlcm9Nb2RlID09PSAicm9sbGluZyIpewogICAgICB2YXIgcmVjZW50ID0ga3Muc2xpY2UoLTcpOwogICAgICB2YXIgcHJldiA9IGtzLnNsaWNlKC0xNCwgLTcpOwogICAgICB2YXIgckN1ciA9IGdvb2REYXlzKHJlY2VudCk7CiAgICAgIGlmKHByZXYubGVuZ3RoIDwgMyl7CiAgICAgICAgbm90ZSA9ICJZb3VyIHByZXZpb3VzIDctZGF5IHdpbmRvdyBmaWxscyBvdXQgYXMgeW91IGxvZyBtb3JlIGRheXMuIjsKICAgICAgICBib2R5ID0gcGN0QmxvY2sockN1ciwgbnVsbCwgIiIsICJMYXN0IDcgbG9nZ2VkIGRheXMiLCBub3RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgclByZXYgPSBnb29kRGF5cyhwcmV2KTsKICAgICAgICBpZihwcmV2Lmxlbmd0aCA8IDcpeyBub3RlID0gIkNvbXBhcmVkIGFnYWluc3QgdGhlICIrcHJldi5sZW5ndGgrIiBkYXlzIGJlZm9yZSB0aGF0LiI7IH0KICAgICAgICBib2R5ID0gcGN0QmxvY2sockN1ciwgclByZXYucGN0LCAidGhlIDcgZGF5cyBiZWZvcmUiLCAiTGFzdCA3IGxvZ2dlZCBkYXlzIiwgbm90ZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhciBiYXNlID0ga3Muc2xpY2UoMCw3KTsKICAgICAgdmFyIGxhdGVzdCA9IGtzLnNsaWNlKC03KTsKICAgICAgdmFyIGxDdXIgPSBnb29kRGF5cyhsYXRlc3QpOwogICAgICB2YXIgbEJhc2UgPSBnb29kRGF5cyhiYXNlKTsKICAgICAgaWYobiA8IDE0KXsKICAgICAgICBub3RlID0gIllvdXIgbGF0ZXN0IHdlZWsgc3RpbGwgb3ZlcmxhcHMgeW91ciBiYXNlbGluZSB3ZWVrLiBJdCBzZXBhcmF0ZXMgZnVsbHkgYXQgMTQgbG9nZ2VkIGRheXMuIjsKICAgICAgfQogICAgICBib2R5ID0gcGN0QmxvY2sobEN1ciwgbEJhc2UucGN0LCAieW91ciBmaXJzdCB3ZWVrIiwgIkxhdGVzdCB3ZWVrIiwgbm90ZSk7CiAgICB9CgogICAgdmFyIHQxID0gc3RhdGUuaGVyb01vZGUgPT09ICJiYXNlbGluZSIgPyAiIGlzLXNlbCIgOiAiIjsKICAgIHZhciB0MiA9IHN0YXRlLmhlcm9Nb2RlID09PSAicm9sbGluZyIgPyAiIGlzLXNlbCIgOiAiIjsKICAgIHZhciB0b2dnbGUgPSAnPGRpdiBjbGFzcz0iZ3J0LXRvZ2dsZSIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IkNvbXBhcmlzb24gYmFzaXMiPicgKwogICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJncnQtaG0nK3QxKyciIGRhdGEtbW9kZT0iYmFzZWxpbmUiPnZzIGZpcnN0IHdlZWs8L2J1dHRvbj4nICsKICAgICAgJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZ3J0LWhtJyt0MisnIiBkYXRhLW1vZGU9InJvbGxpbmciPnZzIHByZXZpb3VzIDcgZGF5czwvYnV0dG9uPicgKwogICAgICAnPC9kaXY+JzsKCiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImdydC1oZXJvIj4nICsgYm9keSArIHRvZ2dsZSArICc8L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gdXBncmFkZUhUTUwoKXsKICAgIGlmKHN0YXRlLnVwZ3JhZGVEaXNtaXNzZWQpeyByZXR1cm4gIiI7IH0KICAgIHZhciBrcyA9IGxvZ2dlZEtleXMoKTsKICAgIGlmKGtzLmxlbmd0aCA8IDMpeyByZXR1cm4gIiI7IH0KICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LXVwZ3JhZGUiPicgKwogICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJncnQtZGlzbWlzcyIgaWQ9ImdydFVwRGlzbWlzcyIgYXJpYS1sYWJlbD0iSGlkZSB0aGlzIj5cdTAwZDc8L2J1dHRvbj4nICsKICAgICAgJzxoNT5LZWVwIHRoaXMgaGlzdG9yeSBmb3IgZ29vZDwvaDU+JyArCiAgICAgICc8cD5UaGVzZSBsb2dzIGxpdmUgaW4gdGhpcyBicm93c2VyLCBvbiB0aGlzIGRldmljZS4gQ2xlYXIgeW91ciBicm93c2luZyBkYXRhIGFuZCB0aGV5XHUyMDE5cmUgZ29uZS4gQSBCb256YSBhY2NvdW50IHdpbGwga2VlcCAnK2RvZ1Bvc3Nlc3NpdmUoKSsnIGZ1bGwgaGlzdG9yeSBzYWZlLCBzeW5jIGl0IGFjcm9zcyB5b3VyIHBob25lIGFuZCBsYXB0b3AsIGFuZCBsZXQgeW91IGFzayBxdWVzdGlvbnMgb2YgeW91ciBvd24gZGF0YS4gV2VcdTIwMTlsbCBlbWFpbCB5b3UgdGhlIG1vbWVudCBpdFx1MjAxOXMgcmVhZHkuPC9wPicgKwogICAgICAnPC9kaXY+JzsKICB9CgogIGZ1bmN0aW9uIHJpbmdIVE1MKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgbG9nZ2VkID0ga3MubGVuZ3RoOwogICAgdmFyIGRuID0gZGF5TnVtYmVyKHRvZGF5S2V5KCkpOwogICAgdmFyIHBjdCA9IE1hdGgubWluKDEsIGxvZ2dlZCAvIENGRy5yZXNldERheXMpOwogICAgdmFyIHIgPSAzOCwgYyA9IDIgKiBNYXRoLlBJICogcjsKICAgIHZhciBkYXNoID0gKGMgKiBwY3QpLnRvRml4ZWQoMSkgKyAiICIgKyBjLnRvRml4ZWQoMSk7CiAgICB2YXIgbGluZTI7CiAgICBpZihkbiA+IENGRy5yZXNldERheXMpewogICAgICBsaW5lMiA9ICJZb3VyIDMwIGRheXMgYXJlIHVwLiBSZWFzc2VzcyBhZ2FpbnN0IFdlZWsgMSBcdTIwMTQgYW5kIGtlZXAgdGhlIGhhYml0cyB0aGF0IHdvcmtlZC4iOwogICAgfSBlbHNlIHsKICAgICAgbGluZTIgPSAiRGF5ICIrZG4rIiBvZiAiK0NGRy5yZXNldERheXMrIiBcdTAwYjcgV2VlayAiK3dlZWtPZihkbikrIjogIitXRUVLU1t3ZWVrT2YoZG4pLTFdLnQ7CiAgICB9CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImdydC1yaW5nd3JhcCI+JyArCiAgICAgICc8c3ZnIGNsYXNzPSJncnQtcmluZyIgdmlld0JveD0iMCAwIDkyIDkyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JyArCiAgICAgICc8Y2lyY2xlIGN4PSI0NiIgY3k9IjQ2IiByPSInK3IrJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIiK1BBTC50cmFjaysiIiBzdHJva2Utd2lkdGg9IjkiPjwvY2lyY2xlPicgKwogICAgICAnPGNpcmNsZSBjeD0iNDYiIGN5PSI0NiIgcj0iJytyKyciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIitQQUwuZ3JlZW4rIiIgc3Ryb2tlLXdpZHRoPSI5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1kYXNoYXJyYXk9IicrZGFzaCsnIiB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgNDYgNDYpIj48L2NpcmNsZT4nICsKICAgICAgJzx0ZXh0IHg9IjQ2IiB5PSI1MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9IjgwMCIgZmlsbD0iIitQQUwuZ3JlZW5EZWVwKyIiPicrbG9nZ2VkKyc8L3RleHQ+JyArCiAgICAgICc8dGV4dCB4PSI0NiIgeT0iNjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iIitQQUwubXV0ZWQrIiI+b2YgMzA8L3RleHQ+JyArCiAgICAgICc8L3N2Zz4nICsKICAgICAgJzxkaXYgY2xhc3M9ImdydC1yaW5ndGV4dCI+JyArCiAgICAgICc8cCBjbGFzcz0iZ3J0LXJ0MSI+Jytsb2dnZWQrJyAnKyhsb2dnZWQ9PT0xPyJkYXkiOiJkYXlzIikrJyBsb2dnZWQ8L3A+JyArCiAgICAgICc8cCBjbGFzcz0iZ3J0LXJ0MiI+Jytlc2MobGluZTIpKyc8L3A+JyArCiAgICAgICc8L2Rpdj48L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gd2Vla3NIVE1MKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgY291bnRzID0gWzAsMCwwLDBdLCBmbGFyZXMgPSBbMCwwLDAsMF0sIGdvb2QgPSBbMCwwLDAsMF07CiAgICBmb3IodmFyIGk9MDtpPGtzLmxlbmd0aDtpKyspewogICAgICB2YXIgZG4gPSBkYXlOdW1iZXIoa3NbaV0pOwogICAgICBpZihkbiA8IDEgfHwgZG4gPiBDRkcucmVzZXREYXlzKXsgY29udGludWU7IH0KICAgICAgdmFyIHcgPSB3ZWVrT2YoZG4pIC0gMTsKICAgICAgY291bnRzW3ddKys7CiAgICAgIHZhciBlID0gc3RhdGUuZW50cmllc1trc1tpXV07CiAgICAgIGlmKGUuZmxhcmUgPT09ICJ5ZXMiKXsgZmxhcmVzW3ddKys7IH0KICAgICAgaWYoSEVBTFRIWS5pbmRleE9mKGUuc3Rvb2wpID4gLTEpeyBnb29kW3ddKys7IH0KICAgIH0KICAgIHZhciBjdXJXID0gd2Vla09mKGRheU51bWJlcih0b2RheUtleSgpKSk7CiAgICB2YXIgb3V0ID0gJzxoNT5Zb3VyIGZvdXIgcmVzZXQgd2Vla3M8L2g1PjxwIGNsYXNzPSJncnQtY2FyZGhpbnQiPlN0cmFpZ2h0IGZyb20gdGhlIGVCb29rIHByb3RvY29sLiBXZWVrIDEgaXMgdGhlIGJhc2VsaW5lIGV2ZXJ5dGhpbmcgZWxzZSBpcyBtZWFzdXJlZCBhZ2FpbnN0LjwvcD48ZGl2IGNsYXNzPSJncnQtd2Vla3MiPic7CiAgICBmb3IodmFyIHcyPTA7IHcyPDQ7IHcyKyspewogICAgICB2YXIgaXNOb3cgPSAodzIrMSA9PT0gY3VyVyAmJiBkYXlOdW1iZXIodG9kYXlLZXkoKSkgPD0gQ0ZHLnJlc2V0RGF5cykgPyAiIGlzLW5vdyIgOiAiIjsKICAgICAgdmFyIGRldGFpbCA9IGNvdW50c1t3Ml0gPyAoY291bnRzW3cyXSsiLzcgbG9nZ2VkIFx1MDBiNyAiKyhjb3VudHNbdzJdID8gTWF0aC5yb3VuZChnb29kW3cyXS9jb3VudHNbdzJdKjEwMCkgOiAwKSsiJSBnb29kIikgOiAibm90IHN0YXJ0ZWQiOwogICAgICBvdXQgKz0gJzxkaXYgY2xhc3M9ImdydC13ZWVrJytpc05vdysnIj48c3BhbiBjbGFzcz0iZ3J0LXdrIj5XJysodzIrMSkrJzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3J0LXd0Ij4nK2VzYyhXRUVLU1t3Ml0udCkrJzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3J0LXd0Ij4nK2VzYyhkZXRhaWwpKyc8L3NwYW4+PC9kaXY+JzsKICAgIH0KICAgIG91dCArPSAiPC9kaXY+IjsKICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tIGNoYXJ0cyAtLS0tLS0tLS0tICovCgogIC8qIFRoZSB0cmVuZCBjaGFydHMgdXNlIGEgNjAwLXVuaXQgdmlld0JveCBzY2FsZWQgdG8gZml0IHRoZSBjYXJkLCBzbyBvbiBhIHBob25lCiAgICAgZXZlcnl0aGluZyBpbnNpZGUgc2hyaW5rcyB3aXRoIGl0IC0gYSAxMC11bml0IGF4aXMgbGFiZWwgbGFuZHMgYXQgYWJvdXQgNXB4IG9uCiAgICAgYSAzOTBweCBzY3JlZW4uIEZTQ0FMRSBpcyB0aGUgaW52ZXJzZSBvZiB0aGF0IGRpc3BsYXkgc2NhbGUsIGFwcGxpZWQgdG8gdGV4dCwKICAgICBkb3QgcmFkaWkgYW5kIGRhdGEtbGluZSB3ZWlnaHRzIHNvIHRoZXkgaG9sZCBhIGNvbnN0YW50IHBoeXNpY2FsIHNpemUuIFRoZSByaW5nCiAgICAgaXMgZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVkOiBpdCByZW5kZXJzIGF0IGEgZml4ZWQgOTJweCBhbmQgbmV2ZXIgc2NhbGVzLiAqLwogIHZhciBGU0NBTEUgPSAxOwoKICBmdW5jdGlvbiBmc3oobil7IHJldHVybiBNYXRoLnJvdW5kKG4gKiBGU0NBTEUgKiAxMCkgLyAxMDsgfQoKICBmdW5jdGlvbiBjaGFydFNjYWxlKCl7CiAgICB2YXIgdyA9IDA7CiAgICB0cnl7CiAgICAgIHZhciBzbG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydENoYXJ0c1Nsb3QiKTsKICAgICAgaWYoc2xvdCAmJiBzbG90LmNsaWVudFdpZHRoKXsgdyA9IHNsb3QuY2xpZW50V2lkdGggLSAzODsgfQogICAgICBlbHNlIGlmKHJvb3QgJiYgcm9vdC5jbGllbnRXaWR0aCl7IHcgPSByb290LmNsaWVudFdpZHRoIC0gNzQ7IH0KICAgIH1jYXRjaChlKXt9CiAgICBpZighdyB8fCB3IDwgMTQwKXsgcmV0dXJuIDE7IH0KICAgIHZhciBzYyA9IDYwMCAvIHc7CiAgICBpZihzYyA8IDEpeyBzYyA9IDE7IH0KICAgIGlmKHNjID4gMi40KXsgc2MgPSAyLjQ7IH0KICAgIHJldHVybiBzYzsKICB9CgoKICBmdW5jdGlvbiBzdG9vbENoYXJ0SFRNTCgpewogICAgdmFyIGtzID0gbG9nZ2VkS2V5cygpOwogICAgdmFyIHB0cyA9IFtdOwogICAgZm9yKHZhciBpPTA7aTxrcy5sZW5ndGg7aSsrKXsKICAgICAgdmFyIGRuID0gZGF5TnVtYmVyKGtzW2ldKTsKICAgICAgaWYoZG4gPCAxIHx8IGRuID4gQ0ZHLnJlc2V0RGF5cyl7IGNvbnRpbnVlOyB9CiAgICAgIHB0cy5wdXNoKHsgZDpkbiwgZzpzdGF0ZS5lbnRyaWVzW2tzW2ldXS5zdG9vbCB9KTsKICAgIH0KICAgIGlmKHB0cy5sZW5ndGggPCAyKXsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtY2FyZCI+PGg1PlN0b29sIHNjb3JlIG92ZXIgdGhlIHJlc2V0PC9oNT48cCBjbGFzcz0iZ3J0LWVtcHR5Ij5Ud28gbG9nZ2VkIGRheXMgYW5kIHRoaXMgY2hhcnQgYXBwZWFycy48L3A+PC9kaXY+JzsKICAgIH0KCiAgICB2YXIgVyA9IDYwMCwgSCA9IDIxMCwgcGFkTCA9IDMwLCBwYWRSID0gMTIsIHBhZFQgPSAxNCwgcGFkQiA9IDI2OwogICAgdmFyIHB3ID0gVyAtIHBhZEwgLSBwYWRSLCBwaCA9IEggLSBwYWRUIC0gcGFkQjsKICAgIGZ1bmN0aW9uIFgoZCl7IHJldHVybiBwYWRMICsgKGQtMSkvKENGRy5yZXNldERheXMtMSkgKiBwdzsgfQogICAgZnVuY3Rpb24gWShnKXsgcmV0dXJuIHBhZFQgKyAoZy0xKS82ICogcGg7IH0KCiAgICB2YXIgcyA9ICc8c3ZnIGNsYXNzPSJncnQtY2hhcnQiIHZpZXdCb3g9IjAgMCAnK1crJyAnK0grJyIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJTdG9vbCBzY29yZSBmb3IgZWFjaCBsb2dnZWQgZGF5IG9mIHRoZSAzMC1kYXkgcmVzZXQiPic7CiAgICBzICs9ICc8cmVjdCB4PSInK3BhZEwrJyIgeT0iJytZKDIpLnRvRml4ZWQoMSkrJyIgd2lkdGg9IicrcHcrJyIgaGVpZ2h0PSInKyhZKDMpLVkoMikpLnRvRml4ZWQoMSkrJyIgZmlsbD0iIitQQUwudGludCsiIj48L3JlY3Q+JzsKICAgIHMgKz0gJzx0ZXh0IHg9IicrKHBhZEwrNikrJyIgeT0iJysoWSgyKSsxMykudG9GaXhlZCgxKSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIiK1BBTC5ncmVlbisiIj5oZWFsdGh5IHJhbmdlPC90ZXh0Pic7CgogICAgZm9yKHZhciBnPTE7IGc8PTc7IGcrKyl7CiAgICAgIHMgKz0gJzxsaW5lIHgxPSInK3BhZEwrJyIgeTE9IicrWShnKS50b0ZpeGVkKDEpKyciIHgyPSInKyhXLXBhZFIpKyciIHkyPSInK1koZykudG9GaXhlZCgxKSsnIiBzdHJva2U9IiIrUEFMLnRyYWNrKyIiIHN0cm9rZS13aWR0aD0iMSI+PC9saW5lPic7CiAgICAgIHMgKz0gJzx0ZXh0IHg9IicrKHBhZEwtOCkrJyIgeT0iJysoWShnKSs0KS50b0ZpeGVkKDEpKyciIGZvbnQtc2l6ZT0iJytmc3ooMTApKyciIGZpbGw9IiIrUEFMLm11dGVkKyIiIHRleHQtYW5jaG9yPSJlbmQiPicrZysnPC90ZXh0Pic7CiAgICB9CiAgICBmb3IodmFyIHdrPTE7IHdrPD00OyB3aysrKXsKICAgICAgdmFyIHhkID0gWCh3ayo3ICsgMSk7CiAgICAgIGlmKHdrIDwgNCl7CiAgICAgICAgcyArPSAnPGxpbmUgeDE9IicreGQudG9GaXhlZCgxKSsnIiB5MT0iJytwYWRUKyciIHgyPSInK3hkLnRvRml4ZWQoMSkrJyIgeTI9IicrKHBhZFQrcGgpKyciIHN0cm9rZT0iIitQQUwuZGl2aWRlcisiIiBzdHJva2Utd2lkdGg9IjEiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyI+PC9saW5lPic7CiAgICAgIH0KICAgICAgcyArPSAnPHRleHQgeD0iJysoWCgod2stMSkqNysxKSs0KS50b0ZpeGVkKDEpKyciIHk9IicrKEgtOCkrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIitQQUwubXV0ZWQrIiI+Vycrd2srJzwvdGV4dD4nOwogICAgfQoKICAgIHZhciBkcGF0aCA9ICIiOwogICAgZm9yKHZhciBwPTA7cDxwdHMubGVuZ3RoO3ArKyl7CiAgICAgIGRwYXRoICs9IChwPT09MCA\/ICJNIiA6ICJMIikgKyBYKHB0c1twXS5kKS50b0ZpeGVkKDEpICsgIiAiICsgWShwdHNbcF0uZykudG9GaXhlZCgxKSArICIgIjsKICAgIH0KICAgIHMgKz0gJzxwYXRoIGQ9IicrZHBhdGgrJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIiK1BBTC5ncmVlbkRlZXArIiIgc3Ryb2tlLXdpZHRoPSInK2ZzeigyKSsnIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjwvcGF0aD4nOwogICAgZm9yKHZhciBxPTA7cTxwdHMubGVuZ3RoO3ErKyl7CiAgICAgIHZhciBoZWFsdGh5ID0gSEVBTFRIWS5pbmRleE9mKHB0c1txXS5nKSA+IC0xOwogICAgICBzICs9ICc8Y2lyY2xlIGN4PSInK1gocHRzW3FdLmQpLnRvRml4ZWQoMSkrJyIgY3k9IicrWShwdHNbcV0uZykudG9GaXhlZCgxKSsnIiByPSInK2Zzeig0KSsnIiBmaWxsPSInKyhoZWFsdGh5ID8gUEFMLmdyZWVuIDogUEFMLnBhcGVyKSsnIiBzdHJva2U9IicrUEFMLmdyZWVuRGVlcCsnIiBzdHJva2Utd2lkdGg9IicrZnN6KDIpKyciPjwvY2lyY2xlPic7CiAgICB9CiAgICBzICs9ICI8L3N2Zz4iOwoKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LWNhcmQiPjxoNT5TdG9vbCBzY29yZSBvdmVyIHRoZSByZXNldDwvaDU+PHAgY2xhc3M9ImdydC1jYXJkaGludCI+TG93ZXIgaXMgZmlybWVyLiBUaGUgZ3JlZW4gYmFuZCBpcyBncmFkZXMgMiB0byAzIFx1MjAxNCB3aGVyZSB5b3Ugd2FudCBtb3N0IGRheXMgdG8gbGFuZC48L3A+JytzKyc8L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gd2Vla0JhcnNIVE1MKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgY291bnRzID0gWzAsMCwwLDBdLCBnb29kID0gWzAsMCwwLDBdLCBmbGFyZXMgPSBbMCwwLDAsMF07CiAgICBmb3IodmFyIGk9MDtpPGtzLmxlbmd0aDtpKyspewogICAgICB2YXIgZG4gPSBkYXlOdW1iZXIoa3NbaV0pOwogICAgICBpZihkbiA8IDEgfHwgZG4gPiBDRkcucmVzZXREYXlzKXsgY29udGludWU7IH0KICAgICAgdmFyIHcgPSB3ZWVrT2YoZG4pLTE7CiAgICAgIGNvdW50c1t3XSsrOwogICAgICB2YXIgZSA9IHN0YXRlLmVudHJpZXNba3NbaV1dOwogICAgICBpZihIRUFMVEhZLmluZGV4T2YoZS5zdG9vbCkgPiAtMSl7IGdvb2Rbd10rKzsgfQogICAgICBpZihlLmZsYXJlID09PSAieWVzIil7IGZsYXJlc1t3XSsrOyB9CiAgICB9CiAgICB2YXIgYW55ID0gY291bnRzWzBdK2NvdW50c1sxXStjb3VudHNbMl0rY291bnRzWzNdOwogICAgaWYoIWFueSl7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LWNhcmQiPjxoNT5Hb29kIGRheXMgYW5kIGZsYXJlLXVwcyBieSB3ZWVrPC9oNT48cCBjbGFzcz0iZ3J0LWVtcHR5Ij5Mb2cgYSBmZXcgZGF5cyBhbmQgeW91ciB3ZWVrbHkgY29tcGFyaXNvbiBzdGFydHMgaGVyZS48L3A+PC9kaXY+JzsKICAgIH0KCiAgICB2YXIgVyA9IDYwMCwgSCA9IDIwMCwgcGFkVCA9IDE2LCBwYWRCID0gNDQsIHBhZEwgPSAzNCwgcGFkUiA9IDEyOwogICAgdmFyIHBoID0gSCAtIHBhZFQgLSBwYWRCLCBwdyA9IFcgLSBwYWRMIC0gcGFkUjsKICAgIHZhciBzbG90ID0gcHcvNDsKICAgIHZhciBzID0gJzxzdmcgY2xhc3M9ImdydC1jaGFydCIgdmlld0JveD0iMCAwICcrVysnICcrSCsnIiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IlBlcmNlbnRhZ2Ugb2YgZ29vZCBkYXlzIGluIGVhY2ggcmVzZXQgd2VlayI+JzsKICAgIHZhciBsZXZlbHMgPSBbMCwyNSw1MCw3NSwxMDBdOwogICAgZm9yKHZhciBsPTA7bDxsZXZlbHMubGVuZ3RoO2wrKyl7CiAgICAgIHZhciB5ID0gcGFkVCArIHBoIC0gKGxldmVsc1tsXS8xMDApKnBoOwogICAgICBzICs9ICc8bGluZSB4MT0iJytwYWRMKyciIHkxPSInK3kudG9GaXhlZCgxKSsnIiB4Mj0iJysoVy1wYWRSKSsnIiB5Mj0iJyt5LnRvRml4ZWQoMSkrJyIgc3Ryb2tlPSIiK1BBTC50cmFjaysiIiBzdHJva2Utd2lkdGg9IjEiPjwvbGluZT4nOwogICAgICBzICs9ICc8dGV4dCB4PSInKyhwYWRMLTgpKyciIHk9IicrKHkrNCkudG9GaXhlZCgxKSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmaWxsPSIiK1BBTC5tdXRlZCsiIiB0ZXh0LWFuY2hvcj0iZW5kIj4nK2xldmVsc1tsXSsnPC90ZXh0Pic7CiAgICB9CiAgICBmb3IodmFyIGI9MDtiPDQ7YisrKXsKICAgICAgdmFyIGN4ID0gcGFkTCArIHNsb3QqYiArIHNsb3QvMjsKICAgICAgdmFyIGJ3ID0gTWF0aC5taW4oNjQsIHNsb3QqMC41NSk7CiAgICAgIGlmKGNvdW50c1tiXSl7CiAgICAgICAgdmFyIHBjdCA9IE1hdGgucm91bmQoZ29vZFtiXS9jb3VudHNbYl0qMTAwKTsKICAgICAgICB2YXIgYmggPSAocGN0LzEwMCkqcGg7CiAgICAgICAgaWYoYmggPCAyKXsgYmggPSAyOyB9CiAgICAgICAgcyArPSAnPHJlY3QgeD0iJysoY3gtYncvMikudG9GaXhlZCgxKSsnIiB5PSInKyhwYWRUK3BoLWJoKS50b0ZpeGVkKDEpKyciIHdpZHRoPSInK2J3LnRvRml4ZWQoMSkrJyIgaGVpZ2h0PSInK2JoLnRvRml4ZWQoMSkrJyIgcng9IjQiIGZpbGw9IiIrUEFMLmdyZWVuKyIiPjwvcmVjdD4nOwogICAgICAgIHMgKz0gJzx0ZXh0IHg9IicrY3gudG9GaXhlZCgxKSsnIiB5PSInKyhwYWRUK3BoLWJoLTYpLnRvRml4ZWQoMSkrJyIgZm9udC1zaXplPSInK2ZzeigxMikrJyIgZm9udC13ZWlnaHQ9IjgwMCIgZmlsbD0iIitQQUwuZ3JlZW5EZWVwKyIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPicrcGN0KyclPC90ZXh0Pic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcyArPSAnPHRleHQgeD0iJytjeC50b0ZpeGVkKDEpKyciIHk9IicrKHBhZFQrcGgtOCkrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZmlsbD0iIitQQUwubXV0ZWQrIiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bm8gZGF0YTwvdGV4dD4nOwogICAgICB9CiAgICAgIHMgKz0gJzx0ZXh0IHg9IicrY3gudG9GaXhlZCgxKSsnIiB5PSInKyhwYWRUK3BoKzE4KSsnIiBmb250LXNpemU9IicrZnN6KDExKSsnIiBmb250LXdlaWdodD0iODAwIiBmaWxsPSIiK1BBTC5pbmsrIiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2VlayAnKyhiKzEpKyc8L3RleHQ+JzsKICAgICAgdmFyIGZsID0gZmxhcmVzW2JdID09PSAxID8gIjEgZmxhcmUtdXAiIDogKGZsYXJlc1tiXSsiIGZsYXJlLXVwcyIpOwogICAgICBzICs9ICc8dGV4dCB4PSInK2N4LnRvRml4ZWQoMSkrJyIgeT0iJysocGFkVCtwaCszMykrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZmlsbD0iJysoZmxhcmVzW2JdID8gUEFMLmFtYmVyRGVlcCA6IFBBTC5tdXRlZCkrJyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+JytmbCsnPC90ZXh0Pic7CiAgICB9CiAgICBzICs9ICc8bGluZSB4MT0iJytwYWRMKyciIHkxPSInKyhwYWRUK3BoKSsnIiB4Mj0iJysoVy1wYWRSKSsnIiB5Mj0iJysocGFkVCtwaCkrJyIgc3Ryb2tlPSIiK1BBTC5kaXZpZGVyKyIiIHN0cm9rZS13aWR0aD0iMSI+PC9saW5lPic7CiAgICBzICs9ICI8L3N2Zz4iOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtY2FyZCI+PGg1Pkdvb2QgZGF5cyBhbmQgZmxhcmUtdXBzIGJ5IHdlZWs8L2g1PjxwIGNsYXNzPSJncnQtY2FyZGhpbnQiPlBlcmNlbnRhZ2Ugb2YgdGhhdCB3ZWVrXHUyMDE5cyBsb2dnZWQgZGF5cyBsYW5kaW5nIGluIGdyYWRlcyAyIHRvIDMuPC9wPicrcysnPC9kaXY+JzsKICB9CgogIGZ1bmN0aW9uIHdlaWdodENoYXJ0SFRNTCgpewogICAgdmFyIGtzID0gW107CiAgICBmb3IodmFyIGsgaW4gc3RhdGUud2VpZ2h0cyl7IGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS53ZWlnaHRzLGspKXsga3MucHVzaChrKTsgfSB9CiAgICBrcy5zb3J0KCk7CiAgICBpZihrcy5sZW5ndGggPCAyKXsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtY2FyZCI+PGg1PldlaWdodDwvaDU+PHAgY2xhc3M9ImdydC1lbXB0eSI+TG9nIGEgd2VpZ2h0IG9uIHR3byBzZXBhcmF0ZSBkYXlzIHRvIHNlZSB0aGUgbGluZS4gV2Vla2x5IGlzIHBsZW50eS48L3A+PC9kaXY+JzsKICAgIH0KICAgIHZhciB2YWxzID0gW10sIG1pbiA9IEluZmluaXR5LCBtYXggPSAtSW5maW5pdHk7CiAgICBmb3IodmFyIGk9MDtpPGtzLmxlbmd0aDtpKyspewogICAgICB2YXIgdiA9IHN0YXRlLndlaWdodHNba3NbaV1dOwogICAgICB2YWxzLnB1c2goeyBkOiBkYXlOdW1iZXIoa3NbaV0pLCB2OiB2IH0pOwogICAgICBpZih2IDwgbWluKXsgbWluID0gdjsgfQogICAgICBpZih2ID4gbWF4KXsgbWF4ID0gdjsgfQogICAgfQogICAgdmFyIHNwYW4gPSBtYXggLSBtaW47CiAgICBpZihzcGFuIDwgMC40KXsgbWluIC09IDAuMjsgbWF4ICs9IDAuMjsgc3BhbiA9IG1heCAtIG1pbjsgfQogICAgZWxzZSB7IG1pbiAtPSBzcGFuKjAuMTU7IG1heCArPSBzcGFuKjAuMTU7IHNwYW4gPSBtYXggLSBtaW47IH0KCiAgICB2YXIgVyA9IDYwMCwgSCA9IDE4MCwgcGFkTCA9IDQwLCBwYWRSID0gMTIsIHBhZFQgPSAxNCwgcGFkQiA9IDI2OwogICAgdmFyIHB3ID0gVyAtIHBhZEwgLSBwYWRSLCBwaCA9IEggLSBwYWRUIC0gcGFkQjsKICAgIHZhciBsYXN0RGF5ID0gTWF0aC5tYXgoQ0ZHLnJlc2V0RGF5cywgdmFsc1t2YWxzLmxlbmd0aC0xXS5kKTsKICAgIGZ1bmN0aW9uIFgoZCl7IHJldHVybiBwYWRMICsgKGQtMSkvKGxhc3REYXktMSkgKiBwdzsgfQogICAgZnVuY3Rpb24gWSh2KXsgcmV0dXJuIHBhZFQgKyAoMSAtICh2LW1pbikvc3BhbikgKiBwaDsgfQoKICAgIHZhciBzID0gJzxzdmcgY2xhc3M9ImdydC1jaGFydCIgdmlld0JveD0iMCAwICcrVysnICcrSCsnIiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IldlaWdodCBvdmVyIHRoZSByZXNldCI+JzsKICAgIGZvcih2YXIgdD0wO3Q8Mzt0KyspewogICAgICB2YXIgdnYgPSBtaW4gKyBzcGFuKih0LzIpOwogICAgICB2YXIgeSA9IFkodnYpOwogICAgICBzICs9ICc8bGluZSB4MT0iJytwYWRMKyciIHkxPSInK3kudG9GaXhlZCgxKSsnIiB4Mj0iJysoVy1wYWRSKSsnIiB5Mj0iJyt5LnRvRml4ZWQoMSkrJyIgc3Ryb2tlPSIiK1BBTC50cmFjaysiIiBzdHJva2Utd2lkdGg9IjEiPjwvbGluZT4nOwogICAgICBzICs9ICc8dGV4dCB4PSInKyhwYWRMLTgpKyciIHk9IicrKHkrNCkudG9GaXhlZCgxKSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmaWxsPSIiK1BBTC5tdXRlZCsiIiB0ZXh0LWFuY2hvcj0iZW5kIj4nK3Z2LnRvRml4ZWQoMSkrJzwvdGV4dD4nOwogICAgfQogICAgdmFyIGRwID0gIiI7CiAgICBmb3IodmFyIHA9MDtwPHZhbHMubGVuZ3RoO3ArKyl7IGRwICs9IChwPT09MD8iTSI6IkwiKSArIFgodmFsc1twXS5kKS50b0ZpeGVkKDEpICsgIiAiICsgWSh2YWxzW3BdLnYpLnRvRml4ZWQoMSkgKyAiICI7IH0KICAgIHMgKz0gJzxwYXRoIGQ9IicrZHArJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIiK1BBTC5ncmVlbkRlZXArIiIgc3Ryb2tlLXdpZHRoPSInK2ZzeigyKSsnIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjwvcGF0aD4nOwogICAgZm9yKHZhciBxPTA7cTx2YWxzLmxlbmd0aDtxKyspewogICAgICBzICs9ICc8Y2lyY2xlIGN4PSInK1godmFsc1txXS5kKS50b0ZpeGVkKDEpKyciIGN5PSInK1kodmFsc1txXS52KS50b0ZpeGVkKDEpKyciIHI9IicrZnN6KDQpKyciIGZpbGw9IiIrUEFMLmdyZWVuRGVlcCsiIj48L2NpcmNsZT4nOwogICAgfQogICAgcyArPSAnPHRleHQgeD0iJytwYWRMKyciIHk9IicrKEgtNikrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZmlsbD0iIitQQUwubXV0ZWQrIiI+RGF5IDE8L3RleHQ+JzsKICAgIHMgKz0gJzx0ZXh0IHg9IicrKFctcGFkUikrJyIgeT0iJysoSC02KSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmaWxsPSIiK1BBTC5tdXRlZCsiIiB0ZXh0LWFuY2hvcj0iZW5kIj5EYXkgJytsYXN0RGF5Kyc8L3RleHQ+JzsKICAgIHMgKz0gIjwvc3ZnPiI7CiAgICB2YXIgY2hhbmdlID0gdmFsc1t2YWxzLmxlbmd0aC0xXS52IC0gdmFsc1swXS52OwogICAgdmFyIHdvcmQgPSBjaGFuZ2UgPiAwID8gInVwIiA6IChjaGFuZ2UgPCAwID8gImRvd24iIDogImxldmVsIik7CiAgICB2YXIgaGludCA9IGNoYW5nZSA9PT0gMCA\/ICJObyBjaGFuZ2Ugc28gZmFyLiIgOiAod29yZCsiICIrTWF0aC5hYnMoY2hhbmdlKS50b0ZpeGVkKDEpKyIga2cgc2luY2UgeW91ciBmaXJzdCBlbnRyeS4iKTsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LWNhcmQiPjxoNT5XZWlnaHQ8L2g1PjxwIGNsYXNzPSJncnQtY2FyZGhpbnQiPicrZXNjKGhpbnQpKycgV2VpZ2h0IGNoYW5nZSBkdXJpbmcgYSByZXNldCBpcyB3b3J0aCBkaXNjdXNzaW5nIHdpdGggeW91ciB2ZXQgaWYgaXQgd2Fzblx1MjAxOXQgdGhlIGdvYWwuPC9wPicrcysnPC9kaXY+JzsKICB9CgogIC8qIC0tLS0tLS0tLS0gcmVuZGVyICsgdGFicyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHNldEhUTUwoaWQsIGh0bWwpewogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgaWYoZWwpeyBlbC5pbm5lckhUTUwgPSBodG1sOyB9CiAgfQoKICBmdW5jdGlvbiByZW5kZXJQcm9ncmVzcygpewogICAgRlNDQUxFID0gY2hhcnRTY2FsZSgpOwogICAgc2V0SFRNTCgiZ3J0VmV0U2xvdCIsIHZldENoZWNrKCkpOwogICAgc2V0SFRNTCgiZ3J0SGVyb1Nsb3QiLCBoZXJvSFRNTCgpKTsKICAgIHNldEhUTUwoImdydFVwZ3JhZGVTbG90IiwgdXBncmFkZUhUTUwoKSk7CiAgICBzZXRIVE1MKCJncnRSaW5nU2xvdCIsIHJpbmdIVE1MKCkpOwogICAgc2V0SFRNTCgiZ3J0V2Vla3NTbG90Iiwgd2Vla3NIVE1MKCkpOwogICAgc2V0SFRNTCgiZ3J0Q2hhcnRzU2xvdCIsIHN0b29sQ2hhcnRIVE1MKCkgKyB3ZWVrQmFyc0hUTUwoKSArIHdlaWdodENoYXJ0SFRNTCgpKTsKCiAgICB2YXIgaG0gPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ncnQtaG0iKTsKICAgIGZvcih2YXIgaT0wO2k8aG0ubGVuZ3RoO2krKyl7CiAgICAgIChmdW5jdGlvbihidG4pewogICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCl7CiAgICAgICAgICBzdGF0ZS5oZXJvTW9kZSA9IGJ0bi5nZXRBdHRyaWJ1dGUoImRhdGEtbW9kZSIpOwogICAgICAgICAgc2F2ZSgpOwogICAgICAgICAgcmVuZGVyUHJvZ3Jlc3MoKTsKICAgICAgICB9KTsKICAgICAgfSkoaG1baV0pOwogICAgfQogICAgdmFyIGRpcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRVcERpc21pc3MiKTsKICAgIGlmKGRpcyl7CiAgICAgIGRpcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCl7CiAgICAgICAgc3RhdGUudXBncmFkZURpc21pc3NlZCA9IHRydWU7CiAgICAgICAgc2F2ZSgpOwogICAgICAgIHJlbmRlclByb2dyZXNzKCk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2hvd1RhYih3aGljaCl7CiAgICB2YXIgdGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0VGFiTG9nIik7CiAgICB2YXIgdHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0VGFiUHJvZyIpOwogICAgdmFyIHZsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydExvZyIpOwogICAgdmFyIHZwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFByb2dyZXNzIik7CiAgICBpZighdGwgfHwgIXRwIHx8ICF2bCB8fCAhdnApeyByZXR1cm47IH0KICAgIHZhciBpc0xvZyA9IHdoaWNoID09PSAibG9nIjsKICAgIHRsLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsIGlzTG9nKTsKICAgIHRwLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsICFpc0xvZyk7CiAgICB0bC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCBpc0xvZyA\/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgdHAuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwgaXNMb2cgPyAiZmFsc2UiIDogInRydWUiKTsKICAgIHZsLmhpZGRlbiA9ICFpc0xvZzsKICAgIHZwLmhpZGRlbiA9IGlzTG9nOwogICAgdGwuYmx1cigpOyB0cC5ibHVyKCk7CiAgICBpZighaXNMb2cpeyByZW5kZXJQcm9ncmVzcygpOyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tIGRhdGEgdG9vbHMgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBleHBvcnRDU1YoKXsKICAgIHZhciByb3dzID0gW1siZGF0ZSIsInJlc2V0X2RheSIsIndlZWsiLCJzdG9vbF9ncmFkZSIsImVuZXJneSIsImFwcGV0aXRlIiwicmVmdXNlZF9tZWFsIiwiZmxhcmVfdXAiLCJvYnNlcnZhdGlvbnMiLCJ3ZWlnaHRfa2ciXV07CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgc2VlbiA9IHt9OwogICAgZm9yKHZhciBpPTA7aTxrcy5sZW5ndGg7aSsrKXsgc2Vlbltrc1tpXV0gPSB0cnVlOyB9CiAgICBmb3IodmFyIHdrIGluIHN0YXRlLndlaWdodHMpeyBpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUud2VpZ2h0cyx3aykpeyBzZWVuW3drXSA9IHRydWU7IH0gfQogICAgdmFyIGFsbCA9IFtdOwogICAgZm9yKHZhciBzMiBpbiBzZWVuKXsgaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlZW4sczIpKXsgYWxsLnB1c2goczIpOyB9IH0KICAgIGFsbC5zb3J0KCk7CiAgICBmb3IodmFyIGo9MDtqPGFsbC5sZW5ndGg7aisrKXsKICAgICAgdmFyIGsgPSBhbGxbal07CiAgICAgIHZhciBlID0gc3RhdGUuZW50cmllc1trXSB8fCB7fTsKICAgICAgdmFyIGRuID0gZGF5TnVtYmVyKGspOwogICAgICByb3dzLnB1c2goWwogICAgICAgIGssIGRuLCB3ZWVrT2YoZG4pLAogICAgICAgICh0eXBlb2YgZS5zdG9vbCA9PT0gIm51bWJlciIgPyBlLnN0b29sIDogIiIpLAogICAgICAgIGUuZW5lcmd5IHx8ICIiLCBlLmFwcGV0aXRlIHx8ICIiLAogICAgICAgIChlLnJlZnVzZWQgPyAieWVzIiA6IChzdGF0ZS5lbnRyaWVzW2tdID8gIm5vIiA6ICIiKSksCiAgICAgICAgZS5mbGFyZSB8fCAiIiwKICAgICAgICAoZS5mbGFncyAmJiBlLmZsYWdzLmxlbmd0aCA\/IGUuZmxhZ3Muam9pbigiIHwgIikgOiAiIiksCiAgICAgICAgKHN0YXRlLndlaWdodHNba10gIT0gbnVsbCA\/IHN0YXRlLndlaWdodHNba10gOiAiIikKICAgICAgXSk7CiAgICB9CiAgICB2YXIgY3N2ID0gcm93cy5tYXAoZnVuY3Rpb24ocil7CiAgICAgIHJldHVybiByLm1hcChmdW5jdGlvbihjKXsKICAgICAgICB2YXIgdiA9IFN0cmluZyhjKTsKICAgICAgICByZXR1cm4gL1siLFxuXS8udGVzdCh2KSA\/ICciJyt2LnJlcGxhY2UoLyIvZywnIiInKSsnIicgOiB2OwogICAgICB9KS5qb2luKCIsIik7CiAgICB9KS5qb2luKCJcbiIpOwoKICAgIHRyeXsKICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbY3N2XSwge3R5cGU6InRleHQvY3N2O2NoYXJzZXQ9dXRmLTg7In0pOwogICAgICB2YXIgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgIGEuaHJlZiA9IHVybDsKICAgICAgYS5kb3dubG9hZCA9ICJib256YS1ndXQtcmVzZXQtIiArIChzdGF0ZS5kb2dOYW1lID8gc3RhdGUuZG9nTmFtZS5yZXBsYWNlKC9bXmEtejAtOV0vZ2ksIi0iKS50b0xvd2VyQ2FzZSgpKyItIiA6ICIiKSArIHRvZGF5S2V5KCkgKyAiLmNzdiI7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7CiAgICAgIGEuY2xpY2soKTsKICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7IH0sIDUwMCk7CiAgICB9Y2F0Y2goZXJyKXsKICAgICAgd2luZG93LnByb21wdCgiQ29weSB5b3VyIGRhdGE6IiwgY3N2KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHN0YXJ0T3ZlcigpewogICAgdmFyIG9rID0gd2luZG93LmNvbmZpcm0oIlRoaXMgY2xlYXJzIGV2ZXJ5IGxvZ2dlZCBkYXkgZnJvbSB0aGlzIGJyb3dzZXIgYW5kIGNhbm5vdCBiZSB1bmRvbmUuIERvd25sb2FkIHlvdXIgQ1NWIGZpcnN0IGlmIHlvdSB3YW50IHRvIGtlZXAgaXQuXG5cblN0YXJ0IG92ZXI\/Iik7CiAgICBpZighb2speyByZXR1cm47IH0KICAgIHRyeXsgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKENGRy5ucyk7IH1jYXRjaChlKXt9CiAgICBtZW0gPSBudWxsOwogICAgc3RhdGUgPSBudWxsOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEFwcCIpLmhpZGRlbiA9IHRydWU7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R2F0ZSIpLmhpZGRlbiA9IGZhbHNlOwogICAgdmFyIGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEVtYWlsIik7CiAgICBpZihlbSl7IGVtLnZhbHVlID0gIiI7IH0KICB9CgogIC8qIC0tLS0tLS0tLS0gYm9vdCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIG9wZW5BcHAoKXsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRHYXRlIikuaGlkZGVuID0gdHJ1ZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRBcHAiKS5oaWRkZW4gPSBmYWxzZTsKICAgIGlmKCFzdGF0ZS5zdGFydERhdGUpeyBzdGF0ZS5zdGFydERhdGUgPSB0b2RheUtleSgpOyBzYXZlKCk7IH0KICAgIGlmKGRheXNCZXR3ZWVuKHN0YXRlLnN0YXJ0RGF0ZSwgdG9kYXlLZXkoKSkgPCAwKXsgc3RhdGUuc3RhcnREYXRlID0gdG9kYXlLZXkoKTsgc2F2ZSgpOyB9CiAgICBidWlsZERheVNlbGVjdCgpOwogICAgbG9hZERyYWZ0Rm9yKHNlbGVjdGVkRGF5KCkpOwogICAgc2hvd1RhYigibG9nIik7CiAgfQoKICBmdW5jdGlvbiB3aXJlKCl7CiAgICBpbml0R2F0ZSgpOwogICAgYWRvcHRJMThuKCk7CiAgICBidWlsZEdyYWRlcygpOwogICAgYnVpbGRDaG9pY2UoImdydEVuZXJneSIsIEVORVJHWSwgImVuZXJneSIpOwogICAgYnVpbGRDaG9pY2UoImdydEFwcGV0aXRlIiwgQVBQRVRJVEUsICJhcHBldGl0ZSIpOwogICAgYnVpbGRDaG9pY2UoImdydEZsYXJlIiwgRkxBUkUsICJmbGFyZSIpOwogICAgYnVpbGRGbGFncygpOwoKICAgIHZhciByZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0UmVmdXNlZCIpOwogICAgaWYocmVmKXsKICAgICAgcmVmLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgICBkcmFmdC5yZWZ1c2VkID0gIWRyYWZ0LnJlZnVzZWQ7CiAgICAgICAgcmVmLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsIGRyYWZ0LnJlZnVzZWQpOwogICAgICAgIHJlZi5ibHVyKCk7CiAgICAgIH0pOwogICAgfQogICAgdmFyIHcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0V2VpZ2h0Iik7CiAgICBpZih3KXsgdy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGZ1bmN0aW9uKCl7IGRyYWZ0LndlaWdodCA9IHcudmFsdWU7IH0pOyB9CgogICAgdmFyIHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnREYXlTZWwiKTsKICAgIGlmKHNlbCl7IHNlbC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBmdW5jdGlvbigpeyBsb2FkRHJhZnRGb3Ioc2VsLnZhbHVlKTsgc2VsLmJsdXIoKTsgfSk7IH0KCiAgICB2YXIgc3YgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0U2F2ZSIpOwogICAgaWYoc3YpeyBzdi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHNhdmVEYXkpOyB9CgogICAgdmFyIHRsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFRhYkxvZyIpOwogICAgdmFyIHRwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFRhYlByb2ciKTsKICAgIGlmKHRsKXsgdGwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpeyBzaG93VGFiKCJsb2ciKTsgfSk7IH0KICAgIGlmKHRwKXsgdHAuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpeyBzaG93VGFiKCJwcm9nIik7IH0pOyB9CgogICAgdmFyIGV4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEV4cG9ydCIpOwogICAgaWYoZXgpeyBleC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGV4cG9ydENTVik7IH0KICAgIHZhciBycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRSZXNldCIpOwogICAgaWYocnMpeyBycy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHN0YXJ0T3Zlcik7IH0KCiAgICBkcmFmdCA9IG5ld0RyYWZ0KCk7CgogICAgdmFyIHJ6VGltZXIgPSBudWxsOwogICAgdHJ5ewogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgZnVuY3Rpb24oKXsKICAgICAgICBpZihyelRpbWVyKXsgY2xlYXJUaW1lb3V0KHJ6VGltZXIpOyB9CiAgICAgICAgcnpUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgIHRyeXsKICAgICAgICAgICAgdmFyIHZwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFByb2dyZXNzIik7CiAgICAgICAgICAgIGlmKHN0YXRlICYmIHZwICYmICF2cC5oaWRkZW4peyByZW5kZXJQcm9ncmVzcygpOyB9CiAgICAgICAgICB9Y2F0Y2goZSl7fQogICAgICAgIH0sIDI1MCk7CiAgICAgIH0pOwogICAgfWNhdGNoKGUpe30KCiAgICBzdG9yYWdlT0sgPSB0ZXN0U3RvcmFnZSgpOwogICAgaWYoIXN0b3JhZ2VPSyl7IHNob3dTdG9yYWdlV2FybigpOyB9CgogICAgdmFyIHNhdmVkID0gbG9hZCgpOwogICAgaWYoc2F2ZWQgJiYgc2F2ZWQuZW1haWwpewogICAgICBzdGF0ZSA9IHNhdmVkOwogICAgICBpZighc3RhdGUuZW50cmllcyl7IHN0YXRlLmVudHJpZXMgPSB7fTsgfQogICAgICBpZighc3RhdGUud2VpZ2h0cyl7IHN0YXRlLndlaWdodHMgPSB7fTsgfQogICAgICBpZighc3RhdGUuaGVyb01vZGUpeyBzdGF0ZS5oZXJvTW9kZSA9ICJiYXNlbGluZSI7IH0KICAgICAgb3BlbkFwcCgpOwogICAgICBpZighc3RhdGUuc3Vic2NyaWJlZCl7IGtsYXZpeW9TdWJzY3JpYmUoc3RhdGUuZW1haWwsIHN0YXRlLmRvZ05hbWUpOyB9CiAgICB9CiAgfQoKICBpZihkb2N1bWVudC5yZWFkeVN0YXRlID09PSAibG9hZGluZyIpewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIHdpcmUpOwogIH0gZWxzZSB7CiAgICB3aXJlKCk7CiAgfQoKfSkoKTs=\" data-no-optimize=\"1\" data-no-minify=\"1\" data-no-defer=\"1\" data-cfasync=\"false\"><\/script>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h3 class=\"wp-block-heading\" id=\"h-how-the-tracker-works\">Hoe de Tracker werkt<\/h3>\n\n<p class=\"wp-block-paragraph\">Elke dag noteer je vier dingen: een <strong>ontlastingsscore<\/strong> op dezelfde zevenpuntsschaal als bij de <a href=\"https:\/\/bonza-retheme.blz.au\/nl\/overzicht-van-hondenpoep\/\">Dog Poop Chart<\/a>, <strong>de energie<\/strong> van je hond, zijn <strong>eetlust<\/strong> en of er die dag sprake was van een <strong>opflakkering<\/strong> \u2014 braken, drang, persen, ongelukjes of duidelijk ongemak. Het gewicht is optioneel, en \u00e9\u00e9n keer per week is ruim voldoende. Dat is alles wat je dagelijks hoeft te doen, en het is bewust beperkt gehouden: een tracker die je daadwerkelijk afmaakt, is beter dan een gedetailleerde die je in week twee al opgeeft.  <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">De dertig dagen zijn ingedeeld in de vier weken van de reset \u2014 controleren en verwijderen, ondersteuning introduceren, observeren en bijsturen, een nieuwe uitgangswaarde vaststellen \u2014 zodat de tool aansluit bij het protocol in de handleiding. In week twee wordt ondersteuning toegevoegd, wat meestal neerkomt op een supplement dat alle drie de biotische niveaus bestrijkt: prebiotisch, probiotisch en postbiotisch, of dat nu <a href=\"https:\/\/bonza-retheme.blz.au\/nl\/supplement-traktaties-kauwt-honden\/\">de functionele supplementen van Bonza<\/a> zijn of een vergelijkbare complete formule. En als je een dag overslaat, kun je teruggaan en een van de afgelopen zeven dagen invullen, zodat je de draad niet kwijtraakt.  <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-what-the-good-days-number-means\">Wat het \u2018Good-Days\u2019-getal betekent<\/h3>\n\n<p class=\"wp-block-paragraph\">Het belangrijkste cijfer betreft <strong>de \u2018goede dagen\u2019<\/strong> van je hond: het percentage van de door jou geregistreerde dagen waarop de ontlasting van je hond binnen het gezonde bereik viel, namelijk graad 2 tot en met 3. Dit ene cijfer geeft antwoord op de vraag waar eigenaren echt om geven: werkt dit? <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">Je kunt het op twee manieren interpreteren. <strong>\u2018Ten opzichte van je eerste week\u2019<\/strong> vergelijkt je meest recente zeven dagen met de referentieweek die je aan het begin hebt geregistreerd; dit is de vergelijking waarop het protocol van de gids is gebaseerd. <strong>&#8216;Ten opzichte van je vorige zeven dagen&#8217;<\/strong> is een kortere, gevoeliger weergave, handig wanneer je net iets hebt veranderd en wilt weten of dit effect heeft gehad. Geen van beide opties verschijnt totdat je zeven dagen hebt geregistreerd, omdat er daarvoor nog niet genoeg gegevens zijn om van een trend te spreken \u2014 en een tracker die je in week \u00e9\u00e9n te veel lof toezwaait, is erger dan nutteloos. <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-why-week-one-matters-most\">Waarom week \u00e9\u00e9n het belangrijkst is<\/h3>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">Week \u00e9\u00e9n is je uitgangspunt. Alles wat de tracker je daarna laat zien, wordt hieraan afgemeten, dus noteer het eerlijk in plaats van optimistisch \u2014 inclusief de slechte dagen, vooral de slechte dagen. Gebruikers herinneren zich steevast niet goed hoe zwaar het begin was, en dat is precies waarom het opschrijven ervan beter is dan het uit het hoofd proberen te halen. Een slechte eerste week is geen mislukking. Het is juist wat je in staat stelt de verbetering te zien wanneer die zich voordoet. Week \u00e9\u00e9n is ook het moment waarop de gids je vraagt om het echte werk te doen: je eetpatroon onder de loep nemen, dingen schrappen die schadelijk zijn voor het microbioom, en noteren waar je staat op de twaalf indicatoren. Als je het nog niet hebt gelezen: de tracker is veel zinvoller in combinatie met <a href=\"https:\/\/bonza-retheme.blz.au\/nl\/144208-2\/\" data-type=\"link\" data-id=\"https:\/\/bonza-retheme.blz.au\/free-gut-health-guide\/\">The Dog Owner\u2019s Complete Gut Health Guide<\/a>      <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-when-it-is-time-to-call-the-vet\">Wanneer moet je de dierenarts bellen?<\/h3>\n\n<p class=\"wp-block-paragraph\">De tracker onderbreekt zichzelf als je iets registreert waarvoor je een professional nodig hebt in plaats van meer gegevens: <strong>zwarte of teerachtige ontlasting<\/strong>, <strong>vers bloed of rode strepen<\/strong>, <strong>bleke, grijze of kleikleurige ontlasting<\/strong>, <strong>zichtbare wormen<\/strong> of <strong>veel slijm<\/strong>. De tracker zal ook een aanhoudende reeks waterige ontlastingen signaleren, omdat uitdroging bij puppy\u2019s en bij kleine of oudere honden snel optreedt. Wanneer dat gebeurt, zet de tracker de trend opzij en adviseert hij je om je dierenarts te bellen, wat de juiste aanpak is.  <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">Buiten deze signalen om moet je je eigen oordeel en je kennis van je eigen hond gebruiken. Een tracker registreert wat je waarneemt; hij kan niemand onderzoeken. Als je hond zich niet lekker lijkt te voelen, of als er iets niet helemaal in orde is, maak dan een afspraak en neem je logboeken mee \u2014 een maand aan dagelijkse aantekeningen is echt nuttig voor een dierenarts, en je kunt alles rechtstreeks vanuit de tool als spreadsheet downloaden.  <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-frequently-asked-questions\">Veelgestelde vragen<\/h3>\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1785156667151\"><strong class=\"schema-faq-question\"><strong>Is het gratis?<\/strong><\/strong> <p class=\"schema-faq-answer\">Ja, en het blijft gratis. We vragen je eenmalig om je e-mailadres wanneer je de app opent, en daarna kun je er onbeperkt gebruik van maken \u2014 geen limieten, geen proefperiode, niets wordt achtergehouden. Via je e-mailadres sturen we je de gids over darmgezondheid toe en laten we je weten wanneer de accountgebaseerde versie beschikbaar komt.  <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156708442\"><strong class=\"schema-faq-question\"><strong>Hoeveel tijd kost het elke dag?<\/strong><\/strong> <p class=\"schema-faq-answer\">Ongeveer twintig seconden. Vier keer tikken, plus \u00e9\u00e9n keer per week je gewicht invoeren als je dat wilt bijhouden. Het is bewust kort gehouden, want een tracker heeft alleen zin als je de dertig dagen volmaakt.  <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156772064\"><strong class=\"schema-faq-question\"><strong>Wat is een \u201egoede dag\u201c?<\/strong><\/strong> <p class=\"schema-faq-answer\">Een dag waarop de ontlasting van je hond een 2 of een 3 scoorde op de zevenpuntsschaal \u2014 stevig en in stukjes, of een vochtige, gevormde rol. Die twee scores vallen binnen het gezonde bereik, en score 2 is het ideaal. <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156805344\"><strong class=\"schema-faq-question\"><strong>Ik heb een dag overgeslagen. Heb ik het nu verpest? <\/strong><\/strong> <p class=\"schema-faq-answer\">Nee. Je kunt teruggaan en een willekeurige dag van de afgelopen zeven dagen invullen; de percentages worden berekend op basis van de dagen die je hebt geregistreerd, en niet op basis van de kalender. Als je af en toe een dag overslaat, gaat er alleen wat nauwkeurigheid verloren, meer niet.  <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156830121\"><strong class=\"schema-faq-question\"><strong>Waar worden mijn gegevens opgeslagen?<\/strong><\/strong> <p class=\"schema-faq-answer\">In je browser, op het apparaat dat je gebruikt. Bonza ontvangt de loggegevens van je hond niet. Dat betekent ook dat je geschiedenis aan die ene browser is gekoppeld: als je je browsegegevens wist of van laptop naar telefoon overschakelt, volgt het je niet. Je kunt alles op elk moment als spreadsheet downloaden, en we werken aan een accountgebaseerde versie die je gegevens veilig bewaart en gesynchroniseerd houdt.   <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156870202\"><strong class=\"schema-faq-question\"><strong>Kan ik meer dan \u00e9\u00e9n hond volgen?<\/strong><\/strong> <p class=\"schema-faq-answer\">Niet in deze versie \u2014 hierin wordt de geschiedenis van \u00e9\u00e9n hond per browser bijgehouden. In de accountgebaseerde versie staan meerdere honden op de lijst. <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156892999\"><strong class=\"schema-faq-question\"><strong>Moet ik mijn hond wegen?<\/strong><\/strong> <p class=\"schema-faq-answer\">Nee, het gewicht is niet verplicht. Als je het toch wilt bijhouden, geeft \u00e9\u00e9n keer per week op dezelfde weegschaal en op ongeveer hetzelfde tijdstip van de dag veel meer informatie dan dagelijkse metingen, die vooral weergeven wat een hond heeft gegeten en gedronken, in plaats van een echte trend. <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156939494\"><strong class=\"schema-faq-question\"><strong>De cijfers worden steeds slechter. Wat moet ik doen? <\/strong><\/strong> <p class=\"schema-faq-answer\">Controleer eerst of er iets is veranderd \u2014 voeding, snacks, dagelijkse routine of een te snel ge\u00efntroduceerd supplement. Een paar onrustige dagen in de tweede week komen vaak voor terwijl het microbioom zich aanpast. Maar als de situatie steeds verder de verkeerde kant op gaat, of als een van de bovenstaande alarmsignalen zich voordoet, moet je dit met je dierenarts bespreken in plaats van het gewoon af te wachten.  <\/p> <\/div> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>30-daagse tracker voor het herstellen van de darmflora Werkt de verandering die je hebt doorgevoerd ook echt? Dertig dagen is lang genoeg om een reactie in de darmen van een hond te zien, en veel te lang om alles nauwkeurig in je hoofd bij te houden. Deze 30-daagse darmreset-tracker maakt het resetprotocol uit The Dog [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":144155,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","inline_featured_image":false,"footnotes":""},"class_list":["post-144171","page","type-page","status-publish","has-post-thumbnail","hentry"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>30-daagse darmreset-tracker | Houd de darmgezondheid van je hond dagelijks bij 30-daagse tracker voor het herstellen van de darmflora - Bonza<\/title>\n<meta name=\"description\" content=\"Gratis 30-daagse tracker voor de darmgezondheid van je hond: noteer dagelijks de ontlasting, het energieniveau, de eetlust en opflakkeringen, en kijk of het aantal goede dagen van je hond toeneemt. Informatief, geen diagnose.\" \/>\n<meta name=\"robots\" content=\"noindex, nofollow\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"30-daagse tracker voor het herstellen van de darmflora\" \/>\n<meta property=\"og:description\" content=\"Gratis 30-daagse tracker voor de darmgezondheid van je hond: noteer dagelijks de ontlasting, het energieniveau, de eetlust en opflakkeringen, en kijk of het aantal goede dagen van je hond toeneemt. Informatief, geen diagnose.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/\" \/>\n<meta property=\"og:site_name\" content=\"Bonza\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/bonzadogfoods\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-31T08:52:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1100\" \/>\n\t<meta property=\"og:image:height\" content=\"619\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"WebPage\",\"FAQPage\"],\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/\",\"name\":\"30-daagse darmreset-tracker | Houd de darmgezondheid van je hond dagelijks bij 30-daagse tracker voor het herstellen van de darmflora - Bonza\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\",\"datePublished\":\"2026-07-27T13:21:52+00:00\",\"dateModified\":\"2026-07-31T08:52:49+00:00\",\"description\":\"Gratis 30-daagse tracker voor de darmgezondheid van je hond: noteer dagelijks de ontlasting, het energieniveau, de eetlust en opflakkeringen, en kijk of het aantal goede dagen van je hond toeneemt. Informatief, geen diagnose.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#breadcrumb\"},\"mainEntity\":[{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156667151\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156708442\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156772064\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156805344\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156830121\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156870202\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156892999\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156939494\"}],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\",\"contentUrl\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\",\"width\":1100,\"height\":619,\"caption\":\"Hondenbezitter die de dagelijkse darmgezondheid van zijn hond bijhoudt in de Bonza-tracker voor een 30-daagse darmreset\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"30-daagse tracker voor het herstellen van de darmflora\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/#website\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/\",\"name\":\"Bonza\",\"description\":\"Add Years to Your Dog&#039;s Life and Life to Their Years\",\"publisher\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/#organization\",\"name\":\"Happea Chappea Limited\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png\",\"contentUrl\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png\",\"width\":512,\"height\":512,\"caption\":\"Happea Chappea Limited\"},\"image\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/bonzadogfoods\",\"https:\\\/\\\/www.instagram.com\\\/bonzadogfoods\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@bonzadogfoods\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/bonzadogfoods\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@bonzadogfoods\\\/\",\"https:\\\/\\\/www.feefo.com\\\/en-GB\\\/reviews\\\/bonza-dog\",\"https:\\\/\\\/find-and-update.company-information.service.gov.uk\\\/company\\\/10873244\"],\"description\":\"Bonza is a UK plant-based dog food and supplement brand built on a gut-first approach to canine nutrition: plant-based by consequence, not by trend. Its range comprises one complete food, Superfoods and Ancient Grains, and seven targeted Bioactive Bites supplements. Every Bonza product supports the canine gut microbiome through the Biotics Triad of prebiotics, probiotics and postbiotics, and the eight gut-organ axes that connect the gut to the skin, joints, immunity, behaviour, heart, metabolism, liver and longevity, favouring fibre diversity over fibre quantity. The range is formulated in-house by founder Glendon Lloyd, who holds a Diploma in Canine Nutrition and a Diploma in Dog Nutrigenomics, both with Distinction, alongside a board of canine veterinary nutritionists. One Gut. Whole Dog.\",\"email\":\"whistle@bonza.dog\",\"telephone\":\"01453709677\",\"legalName\":\"Happea Chappea Limited\",\"foundingDate\":\"2017-07-19\",\"vatID\":\"GB499631826\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1\",\"maxValue\":\"10\"},\"founder\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/#\\\/schema\\\/person\\\/b7a7255205fb41a6ac38fdbc8e19f5f3\"}},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156667151\",\"position\":1,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156667151\",\"name\":\"Is het gratis?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Ja, en het blijft gratis. We vragen je eenmalig om je e-mailadres wanneer je de app opent, en daarna kun je er onbeperkt gebruik van maken \u2014 geen limieten, geen proefperiode, niets wordt achtergehouden. Via je e-mailadres sturen we je de gids over darmgezondheid toe en laten we je weten wanneer de accountgebaseerde versie beschikbaar komt.  \",\"inLanguage\":\"nl-NL\"},\"inLanguage\":\"nl-NL\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156708442\",\"position\":2,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156708442\",\"name\":\"Hoeveel tijd kost het elke dag?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Ongeveer twintig seconden. Vier keer tikken, plus \u00e9\u00e9n keer per week je gewicht invoeren als je dat wilt bijhouden. Het is bewust kort gehouden, want een tracker heeft alleen zin als je de dertig dagen volmaakt.  \",\"inLanguage\":\"nl-NL\"},\"inLanguage\":\"nl-NL\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156772064\",\"position\":3,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156772064\",\"name\":\"Wat is een \u201egoede dag\u201c?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Een dag waarop de ontlasting van je hond een 2 of een 3 scoorde op de zevenpuntsschaal \u2014 stevig en in stukjes, of een vochtige, gevormde rol. Die twee scores vallen binnen het gezonde bereik, en score 2 is het ideaal. \",\"inLanguage\":\"nl-NL\"},\"inLanguage\":\"nl-NL\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156805344\",\"position\":4,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156805344\",\"name\":\"Ik heb een dag overgeslagen. Heb ik het nu verpest?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Nee. Je kunt teruggaan en een willekeurige dag van de afgelopen zeven dagen invullen; de percentages worden berekend op basis van de dagen die je hebt geregistreerd, en niet op basis van de kalender. Als je af en toe een dag overslaat, gaat er alleen wat nauwkeurigheid verloren, meer niet.  \",\"inLanguage\":\"nl-NL\"},\"inLanguage\":\"nl-NL\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156830121\",\"position\":5,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156830121\",\"name\":\"Waar worden mijn gegevens opgeslagen?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"In je browser, op het apparaat dat je gebruikt. Bonza ontvangt de loggegevens van je hond niet. Dat betekent ook dat je geschiedenis aan die ene browser is gekoppeld: als je je browsegegevens wist of van laptop naar telefoon overschakelt, volgt het je niet. Je kunt alles op elk moment als spreadsheet downloaden, en we werken aan een accountgebaseerde versie die je gegevens veilig bewaart en gesynchroniseerd houdt.   \",\"inLanguage\":\"nl-NL\"},\"inLanguage\":\"nl-NL\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156870202\",\"position\":6,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156870202\",\"name\":\"Kan ik meer dan \u00e9\u00e9n hond volgen?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Niet in deze versie \u2014 hierin wordt de geschiedenis van \u00e9\u00e9n hond per browser bijgehouden. In de accountgebaseerde versie staan meerdere honden op de lijst. \",\"inLanguage\":\"nl-NL\"},\"inLanguage\":\"nl-NL\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156892999\",\"position\":7,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156892999\",\"name\":\"Moet ik mijn hond wegen?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Nee, het gewicht is niet verplicht. Als je het toch wilt bijhouden, geeft \u00e9\u00e9n keer per week op dezelfde weegschaal en op ongeveer hetzelfde tijdstip van de dag veel meer informatie dan dagelijkse metingen, die vooral weergeven wat een hond heeft gegeten en gedronken, in plaats van een echte trend. \",\"inLanguage\":\"nl-NL\"},\"inLanguage\":\"nl-NL\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156939494\",\"position\":8,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/nl\\\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\\\/#faq-question-1785156939494\",\"name\":\"De cijfers worden steeds slechter. Wat moet ik doen?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Controleer eerst of er iets is veranderd \u2014 voeding, snacks, dagelijkse routine of een te snel ge\u00efntroduceerd supplement. Een paar onrustige dagen in de tweede week komen vaak voor terwijl het microbioom zich aanpast. Maar als de situatie steeds verder de verkeerde kant op gaat, of als een van de bovenstaande alarmsignalen zich voordoet, moet je dit met je dierenarts bespreken in plaats van het gewoon af te wachten.  \",\"inLanguage\":\"nl-NL\"},\"inLanguage\":\"nl-NL\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"30-daagse darmreset-tracker | Houd de darmgezondheid van je hond dagelijks bij 30-daagse tracker voor het herstellen van de darmflora - Bonza","description":"Gratis 30-daagse tracker voor de darmgezondheid van je hond: noteer dagelijks de ontlasting, het energieniveau, de eetlust en opflakkeringen, en kijk of het aantal goede dagen van je hond toeneemt. Informatief, geen diagnose.","robots":{"index":"noindex","follow":"nofollow"},"og_locale":"nl_NL","og_type":"article","og_title":"30-daagse tracker voor het herstellen van de darmflora","og_description":"Gratis 30-daagse tracker voor de darmgezondheid van je hond: noteer dagelijks de ontlasting, het energieniveau, de eetlust en opflakkeringen, en kijk of het aantal goede dagen van je hond toeneemt. Informatief, geen diagnose.","og_url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/","og_site_name":"Bonza","article_publisher":"https:\/\/www.facebook.com\/bonzadogfoods","article_modified_time":"2026-07-31T08:52:49+00:00","og_image":[{"width":1100,"height":619,"url":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"9 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["WebPage","FAQPage"],"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/","url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/","name":"30-daagse darmreset-tracker | Houd de darmgezondheid van je hond dagelijks bij 30-daagse tracker voor het herstellen van de darmflora - Bonza","isPartOf":{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#primaryimage"},"image":{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#primaryimage"},"thumbnailUrl":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","datePublished":"2026-07-27T13:21:52+00:00","dateModified":"2026-07-31T08:52:49+00:00","description":"Gratis 30-daagse tracker voor de darmgezondheid van je hond: noteer dagelijks de ontlasting, het energieniveau, de eetlust en opflakkeringen, en kijk of het aantal goede dagen van je hond toeneemt. Informatief, geen diagnose.","breadcrumb":{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#breadcrumb"},"mainEntity":[{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156667151"},{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156708442"},{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156772064"},{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156805344"},{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156830121"},{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156870202"},{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156892999"},{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156939494"}],"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#primaryimage","url":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","contentUrl":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","width":1100,"height":619,"caption":"Hondenbezitter die de dagelijkse darmgezondheid van zijn hond bijhoudt in de Bonza-tracker voor een 30-daagse darmreset"},{"@type":"BreadcrumbList","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bonza-retheme.blz.au\/nl\/"},{"@type":"ListItem","position":2,"name":"30-daagse tracker voor het herstellen van de darmflora"}]},{"@type":"WebSite","@id":"https:\/\/bonza-retheme.blz.au\/nl\/#website","url":"https:\/\/bonza-retheme.blz.au\/nl\/","name":"Bonza","description":"Add Years to Your Dog&#039;s Life and Life to Their Years","publisher":{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bonza-retheme.blz.au\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/bonza-retheme.blz.au\/nl\/#organization","name":"Happea Chappea Limited","url":"https:\/\/bonza-retheme.blz.au\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/bonza-retheme.blz.au\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png","contentUrl":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png","width":512,"height":512,"caption":"Happea Chappea Limited"},"image":{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/bonzadogfoods","https:\/\/www.instagram.com\/bonzadogfoods\/","https:\/\/www.tiktok.com\/@bonzadogfoods","https:\/\/www.linkedin.com\/company\/bonzadogfoods\/","https:\/\/www.youtube.com\/@bonzadogfoods\/","https:\/\/www.feefo.com\/en-GB\/reviews\/bonza-dog","https:\/\/find-and-update.company-information.service.gov.uk\/company\/10873244"],"description":"Bonza is a UK plant-based dog food and supplement brand built on a gut-first approach to canine nutrition: plant-based by consequence, not by trend. Its range comprises one complete food, Superfoods and Ancient Grains, and seven targeted Bioactive Bites supplements. Every Bonza product supports the canine gut microbiome through the Biotics Triad of prebiotics, probiotics and postbiotics, and the eight gut-organ axes that connect the gut to the skin, joints, immunity, behaviour, heart, metabolism, liver and longevity, favouring fibre diversity over fibre quantity. The range is formulated in-house by founder Glendon Lloyd, who holds a Diploma in Canine Nutrition and a Diploma in Dog Nutrigenomics, both with Distinction, alongside a board of canine veterinary nutritionists. One Gut. Whole Dog.","email":"whistle@bonza.dog","telephone":"01453709677","legalName":"Happea Chappea Limited","foundingDate":"2017-07-19","vatID":"GB499631826","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1","maxValue":"10"},"founder":{"@id":"https:\/\/bonza-retheme.blz.au\/nl\/#\/schema\/person\/b7a7255205fb41a6ac38fdbc8e19f5f3"}},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156667151","position":1,"url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156667151","name":"Is het gratis?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Ja, en het blijft gratis. We vragen je eenmalig om je e-mailadres wanneer je de app opent, en daarna kun je er onbeperkt gebruik van maken \u2014 geen limieten, geen proefperiode, niets wordt achtergehouden. Via je e-mailadres sturen we je de gids over darmgezondheid toe en laten we je weten wanneer de accountgebaseerde versie beschikbaar komt.  ","inLanguage":"nl-NL"},"inLanguage":"nl-NL"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156708442","position":2,"url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156708442","name":"Hoeveel tijd kost het elke dag?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Ongeveer twintig seconden. Vier keer tikken, plus \u00e9\u00e9n keer per week je gewicht invoeren als je dat wilt bijhouden. Het is bewust kort gehouden, want een tracker heeft alleen zin als je de dertig dagen volmaakt.  ","inLanguage":"nl-NL"},"inLanguage":"nl-NL"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156772064","position":3,"url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156772064","name":"Wat is een \u201egoede dag\u201c?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Een dag waarop de ontlasting van je hond een 2 of een 3 scoorde op de zevenpuntsschaal \u2014 stevig en in stukjes, of een vochtige, gevormde rol. Die twee scores vallen binnen het gezonde bereik, en score 2 is het ideaal. ","inLanguage":"nl-NL"},"inLanguage":"nl-NL"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156805344","position":4,"url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156805344","name":"Ik heb een dag overgeslagen. Heb ik het nu verpest?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Nee. Je kunt teruggaan en een willekeurige dag van de afgelopen zeven dagen invullen; de percentages worden berekend op basis van de dagen die je hebt geregistreerd, en niet op basis van de kalender. Als je af en toe een dag overslaat, gaat er alleen wat nauwkeurigheid verloren, meer niet.  ","inLanguage":"nl-NL"},"inLanguage":"nl-NL"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156830121","position":5,"url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156830121","name":"Waar worden mijn gegevens opgeslagen?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"In je browser, op het apparaat dat je gebruikt. Bonza ontvangt de loggegevens van je hond niet. Dat betekent ook dat je geschiedenis aan die ene browser is gekoppeld: als je je browsegegevens wist of van laptop naar telefoon overschakelt, volgt het je niet. Je kunt alles op elk moment als spreadsheet downloaden, en we werken aan een accountgebaseerde versie die je gegevens veilig bewaart en gesynchroniseerd houdt.   ","inLanguage":"nl-NL"},"inLanguage":"nl-NL"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156870202","position":6,"url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156870202","name":"Kan ik meer dan \u00e9\u00e9n hond volgen?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Niet in deze versie \u2014 hierin wordt de geschiedenis van \u00e9\u00e9n hond per browser bijgehouden. In de accountgebaseerde versie staan meerdere honden op de lijst. ","inLanguage":"nl-NL"},"inLanguage":"nl-NL"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156892999","position":7,"url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156892999","name":"Moet ik mijn hond wegen?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Nee, het gewicht is niet verplicht. Als je het toch wilt bijhouden, geeft \u00e9\u00e9n keer per week op dezelfde weegschaal en op ongeveer hetzelfde tijdstip van de dag veel meer informatie dan dagelijkse metingen, die vooral weergeven wat een hond heeft gegeten en gedronken, in plaats van een echte trend. ","inLanguage":"nl-NL"},"inLanguage":"nl-NL"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156939494","position":8,"url":"https:\/\/bonza-retheme.blz.au\/nl\/30-daagse-tracker-voor-het-herstellen-van-de-darmflora\/#faq-question-1785156939494","name":"De cijfers worden steeds slechter. Wat moet ik doen?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Controleer eerst of er iets is veranderd \u2014 voeding, snacks, dagelijkse routine of een te snel ge\u00efntroduceerd supplement. Een paar onrustige dagen in de tweede week komen vaak voor terwijl het microbioom zich aanpast. Maar als de situatie steeds verder de verkeerde kant op gaat, of als een van de bovenstaande alarmsignalen zich voordoet, moet je dit met je dierenarts bespreken in plaats van het gewoon af te wachten.  ","inLanguage":"nl-NL"},"inLanguage":"nl-NL"}]}},"featured_image_src":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker-600x400.webp","featured_image_src_square":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker-600x600.webp","_links":{"self":[{"href":"https:\/\/bonza-retheme.blz.au\/nl\/wp-json\/wp\/v2\/pages\/144171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bonza-retheme.blz.au\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bonza-retheme.blz.au\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bonza-retheme.blz.au\/nl\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/bonza-retheme.blz.au\/nl\/wp-json\/wp\/v2\/comments?post=144171"}],"version-history":[{"count":0,"href":"https:\/\/bonza-retheme.blz.au\/nl\/wp-json\/wp\/v2\/pages\/144171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bonza-retheme.blz.au\/nl\/wp-json\/wp\/v2\/media\/144155"}],"wp:attachment":[{"href":"https:\/\/bonza-retheme.blz.au\/nl\/wp-json\/wp\/v2\/media?parent=144171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}