{"id":13364,"date":"2026-11-05T00:53:01","date_gmt":"2026-11-05T00:53:01","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=13364"},"modified":"2026-11-12T04:42:02","modified_gmt":"2026-11-12T04:42:02","slug":"rasenflaeche-rechner","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/de\/rasenflaeche-rechner\/","title":{"rendered":"Rasenfl\u00e4chen-Rechner"},"content":{"rendered":"\n<style>#lawn-tool{max-width:960px;margin:24px auto;color:#243746}#lawn-tool *{box-sizing:border-box}#lawn-tool .fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:18px}#lawn-tool label{display:block;font-weight:600}#lawn-tool input,#lawn-tool textarea{display:block;width:100%;padding:12px;border:1px solid #9aacb5;border-radius:8px;margin-top:6px;font:inherit}#lawn-tool button{padding:12px 20px;margin:18px 10px 10px 0;border:2px solid #1ecad3;border-radius:8px;background:#1ecad3;color:#1a202c;cursor:pointer;font:inherit}#lawn-tool button[type=reset],#lawn-tool #copy-area{background:white}#lawn-tool button:focus-visible,#lawn-tool input:focus-visible,#lawn-tool textarea:focus-visible{outline:3px solid #9486f7;outline-offset:3px;color:#1a202c}#lawn-tool button:active{color:#1a202c}#lawn-tool .result{background:#edf7f8;border-left:4px solid #1ecad3;padding:18px;margin:16px 0;overflow-wrap:anywhere}#lawn-tool svg{width:100%;height:300px;border:1px solid #b8cbd2}#lawn-tool a{color:#08778b}<\/style><div id=\"lawn-tool\" lang=\"de\"><p>Berechnen Sie unregelm\u00e4\u00dfige Rasenfl\u00e4chen aus gemessenen Koordinaten und ziehen Sie Aussparungen ab.<\/p><p>Zeichnen Sie gemessene Eckpunkte im Raster von 20 \u00d7 20 Metern. F\u00fcgen Sie jede Grenze hinzu und berechnen Sie dann. Entfernen Sie zuerst das Beispiel mit \u201eAlle Grenzen l\u00f6schen\u201c.<\/p><svg id=\"draw-grid\" viewBox=\"0 0 20 20\" role=\"img\" aria-label=\"Messraster: 20 \u00d7 20 Meter\"><defs><pattern id=\"metre-grid\" width=\"1\" height=\"1\" patternUnits=\"userSpaceOnUse\"><path d=\"M 1 0 L 0 0 0 1\" fill=\"none\" stroke=\"#c5ddd9\" stroke-width=\".03\"\/><\/pattern><\/defs><rect width=\"20\" height=\"20\" fill=\"url(#metre-grid)\"\/><\/svg><button type=\"button\" id=\"add-lawn\">Rasengrenze hinzuf\u00fcgen<\/button><button type=\"button\" id=\"add-hole\">Aussparung hinzuf\u00fcgen<\/button><button type=\"button\" id=\"undo-point\">Eckpunkt r\u00fcckg\u00e4ngig<\/button><button type=\"button\" id=\"clear-boundaries\">Alle Grenzen l\u00f6schen<\/button><form data-mode=\"area\"><div class=\"fields\"><label>Gemessene Grenzkoordinaten (Meter)<textarea name=\"coordinates\" rows=\"12\" required>0,0\n10,0\n10,10\n0,10\n\n&#8211;\n1,1\n3,1\n3,3\n1,3<\/textarea><small>Verwenden Sie einen Dezimalpunkt und trennen Sie x und y mit einem Komma (Beispiel: 1.5,2.5).<\/small><\/label><\/div><button type=\"submit\">Berechnen<\/button><button type=\"reset\">Zur\u00fccksetzen<\/button><\/form><div class=\"result\" role=\"status\" aria-live=\"polite\">Geben Sie Ihre Messwerte ein und starten Sie die Berechnung.<\/div><svg id=\"area-diagram\" role=\"img\" aria-label=\"Darstellung der eingegebenen Grundst\u00fccksgrenzen\"><\/svg><button id=\"copy-area\" type=\"button\" disabled>Fl\u00e4che in m\u00b2 kopieren<\/button><h2>So funktioniert der Rechner<\/h2><p>Tragen Sie die Grenzkoordinaten in Metern im oder gegen den Uhrzeigersinn ein. Jede Zeile enth\u00e4lt x,y; Leerzeilen trennen die Polygone. Beginnen Sie Aussparungen mit einer eigenen Zeile mit Minuszeichen. Alle Koordinaten m\u00fcssen dasselbe Bezugssystem verwenden. Die Berechnung verwendet die Gau\u00dfsche Fl\u00e4chenformel. Teilfl\u00e4chen d\u00fcrfen sich nicht \u00fcberlappen; Aussparungen m\u00fcssen vollst\u00e4ndig innerhalb der Rasenfl\u00e4che liegen und d\u00fcrfen nur einmal abgezogen werden. Einzelne sich kreuzende Grenzen werden abgewiesen; \u00dcberschneidungen und die Lage verschiedener Polygone werden nicht automatisch gepr\u00fcft. Die Zeichnung zeigt Ihre Messungen, keine Satellitenkarte. Kopieren Sie die Nettofl\u00e4che in m\u00b2 f\u00fcr weitere Rechner.<\/p><h2>Einheiten und Eingaben<\/h2><p>Ersetzen Sie die Beispielwerte durch Messwerte. 1 ft = 0,3048 m; 1 sq ft = 0,09290304 m\u00b2; 1 Zoll = 25,4 mm; 1 US-Gallone = 3,785411784 Liter. Verwenden Sie f\u00fcr alle Preise dieselbe W\u00e4hrung. Bei einem Preis von null wird kein optionales Budget angezeigt.<\/p><h2>Passende Rasenratgeber<\/h2><ul><li><a href=\"https:\/\/aiper.com\/blogs\/de\/rasen-topdressing-profi-methode-fuer-gesunden-boden\/\">Rasen-Topdressing: Die Profi-Methode f\u00fcr gesunden Boden<\/a><\/li><li><a href=\"https:\/\/aiper.com\/blogs\/de\/rasen-uebersaeen-anleitung\/\">Rasen richtig \u00fcbers\u00e4en: Eine Schritt-f\u00fcr-Schritt-Anleitung<\/a><\/li><\/ul><h2>Weitere Rasenrechner<\/h2><p><a href=\"https:\/\/aiper.com\/blogs\/de\/rollrasen-rechner\/\">rollrasen-rechner<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/de\/rasenbewaesserung-laufzeit-rechner\/\">rasenbew\u00e4sserungs- und laufzeitrechner<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/de\/bewaesserungszonen-rechner\/\">bew\u00e4sserungszonen-rechner<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/de\/rasenmaehen-kostenrechner\/\">kostenrechner f\u00fcrs rasenm\u00e4hen<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/de\/rasenmaehen-zeitrechner\/\">zeitrechner f\u00fcrs rasenm\u00e4hen<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/de\/rasenkalk-rechner\/\">rasenkalk-rechner<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/de\/tropfbewaesserung-rechner\/\">tropfbew\u00e4sserungs-rechner<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/de\/rasensamen-rechner\/\">Grassamen-Rechner<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/de\/rasenduenger-rechner\/\">Rasend\u00fcnger-Rechner<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/de\/werkzeuge\/\">Werkzeuge<\/a><\/p><\/div><script>\/* SI units internally; no external services or weather assumptions. *\/\nfunction calculateLawn(mode,v){\n const n=k=>{if(v[k]===undefined||String(v[k]).trim()==='')throw Error(\"Geben Sie alle erforderlichen Messwerte ein.\");let x=Number(v[k]);if(!Number.isFinite(x)||x<0)throw Error(\"Verwenden Sie endliche, nicht negative Messwerte.\");return x;};\n const p=k=>{let x=n(k);if(x<=0)throw Error(\"Dieser Messwert muss gr\u00f6\u00dfer als null sein.\");return x;};\n const percent=k=>{let x=n(k);if(x>=100)throw Error(\"Der Prozentsatz muss unter 100 liegen.\");return x\/100;};\n let o;\n if(mode==='sod'){\n  let a=p('area'),w=n('waste');if(w>100)throw Error(\"Der Verschnitt muss zwischen 0 und 100 % liegen.\");\n  let q=a*(1+w\/100);o={required:q,pieces:Math.ceil(q\/p('piece')-1e-10),pallets:Math.ceil(q\/p('pallet')-1e-10)};\n  if(n('price')>0)o.budget=q*n('price');\n }else if(mode==='watering'){\n  let depth=Math.max(0,n('target')-n('rain')),minutes=depth\/p('rate')*60,water=p('area')*depth;\n  o={depth,minutes,litres:water};if(n('price')>0)o.budget=water\/1000*n('price');\n }else if(mode==='zone'){\n  let heads=p('heads');if(!Number.isInteger(heads))throw Error(\"Die Regnerzahl muss ganzzahlig sein.\");\n  let capacity=Math.floor(p('flow')*(1-percent('reserve'))\/p('nozzle'));\n  if(p('pressure')<p('required'))throw Error(\"Der Betriebsdruck liegt unter der D\u00fcsenanforderung.\");\n  if(capacity<1)throw Error(\"Der Durchfluss reicht mit dieser Reserve nicht f\u00fcr eine D\u00fcse.\");\n  o={capacity,zones:Math.ceil(heads\/capacity)};\n }else if(mode==='area'){\n  let polygons=JSON.parse(v.polygons);if(!Array.isArray(polygons)||!polygons.length)throw Error(\"Geben Sie gemessene Polygone ein.\");\n  let total=0;\n  for(let poly of polygons){\n   let pts=poly.points;if(!Array.isArray(pts)||pts.length<3)throw Error(\"Jedes Polygon ben\u00f6tigt mindestens drei Eckpunkte.\");\n   for(let pt of pts)if(!Array.isArray(pt)||pt.length!==2||!pt.every(x=>typeof x==='number'&&Number.isFinite(x)))throw Error(\"Jeder Eckpunkt ben\u00f6tigt zwei endliche Koordinaten.\");\n   \/\/ Reject crossings, touching edges, repeated vertices and degenerate edges.\n   let cross=(a,b,c)=>(b[0]-a[0])*(c[1]-a[1])-(b[1]-a[1])*(c[0]-a[0]);\n   let on=(a,b,c)=>Math.abs(cross(a,b,c))<1e-9&&c[0]>=Math.min(a[0],b[0])-1e-9&&c[0]<=Math.max(a[0],b[0])+1e-9&&c[1]>=Math.min(a[1],b[1])-1e-9&&c[1]<=Math.max(a[1],b[1])+1e-9;\n   for(let i=0;i<pts.length;i++)for(let j=i+1;j<pts.length;j++){\n    if(pts[i][0]===pts[j][0]&&pts[i][1]===pts[j][1])throw Error(\"Wiederholen Sie keine Eckpunkte.\");\n    if(j===i+1||i===0&&j===pts.length-1)continue;\n    let a=pts[i],b=pts[(i+1)%pts.length],c=pts[j],d=pts[(j+1)%pts.length];\n    if(cross(a,b,c)*cross(a,b,d)<0&&cross(c,d,a)*cross(c,d,b)<0||on(a,b,c)||on(a,b,d)||on(c,d,a)||on(c,d,b))throw Error(\"Polygonkanten d\u00fcrfen sich nicht kreuzen oder ber\u00fchren.\");\n   }\n   let a=Math.abs(pts.reduce((s,p,i)=>s+p[0]*pts[(i+1)%pts.length][1]-pts[(i+1)%pts.length][0]*p[1],0))\/2;\n   if(a<=0)throw Error(\"Die Polygonfl\u00e4che muss positiv sein.\");\n   if(poly.exclude!==undefined&&typeof poly.exclude!=='boolean')throw Error(\"Die Aussparung muss wahr oder falsch sein.\");\n   total+=poly.exclude?-a:a;\n  }\n  if(total<=0)throw Error(\"Die Nettofl\u00e4che muss positiv sein.\");o={area:total,sqft:total\/0.09290304};\n }else if(mode==='mowing-cost'){\n  let area=p('area'),frequency=p('frequency'),weeks=p('weeks');\n  if(frequency>7||weeks>52.1775)throw Error(\"Verwenden Sie h\u00f6chstens 7 Besuche pro Woche und 52,1775 Wochen pro Jahr.\");\n  let obstacle=n('obstacle');if(obstacle>100)throw Error(\"Der Zuschlag muss zwischen 0 und 100 % liegen.\");\n  let visit=Math.max(n('minimum'),n('base')+area\/100*n('rate')+n('edging'))*(1+obstacle\/100),visits=Math.ceil(frequency*weeks-1e-10);\n  o={visits};if(visit>0)Object.assign(o,{visit,month:visit*frequency*52.1775\/12,season:visit*visits});\n }else if(mode==='mowing-time'){\n  let area=p('area'),width=p('width')\/100,speed=p('speed')*1000,overlap=percent('overlap'),eff=p('efficiency')\/100;\n  if(eff>1)throw Error(\"Die Effizienz darf h\u00f6chstens 100 % betragen.\");\n  let productivity=width*(1-overlap)*speed*eff,minutes=area\/productivity*60;\n  o={effective:width*(1-overlap)*100,productivity,minutes,total:minutes+n('extra')};\n }else if(mode==='lime'){\n  let area=p('area'),rate=n('lab'),reference=p('reference'),product=p('product');\n  if(reference>200||product>200)throw Error(\"Neutralisationswerte m\u00fcssen Prozentwerte bis h\u00f6chstens 200 sein.\");\n  let adjusted=rate*reference\/product,total=area\/100*adjusted;\n  o={adjusted,total,bags:Math.ceil(total\/p('bag')-1e-10)};\n  let cap=n('cap');if(cap>0){let passes=Math.max(1,Math.ceil(adjusted\/cap-1e-10));o.passes=total>0?passes:0;o.perpass=total>0?total\/passes:0;}\n }else if(mode==='drip'){\n  let length=p('length'),spacing=p('spacing'),lines=p('lines');\n  if(!Number.isInteger(lines))throw Error(\"Die Leitungszahl muss ganzzahlig sein.\");\n  \/\/ Assumes the first emitter is one spacing from the inlet, not at x=0.\n  let emitters=Math.floor(length\/spacing+1e-10);if(emitters<1)throw Error(\"Jede Leitung muss mindestens einen Tropfer enthalten.\");\n  let flow=emitters*p('emitter'),capacity=p('supply')*60*(1-percent('reserve')),linesPerZone=Math.floor(capacity\/flow);\n  if(linesPerZone<1)throw Error(\"Der Durchfluss reicht nicht f\u00fcr eine vollst\u00e4ndige Tropfleitung.\");\n  let minutes=n('litres')\/p('emitter')*60,zones=Math.ceil(lines\/linesPerZone);\n  o={emitters,totalemitters:emitters*lines,flow:flow*lines\/60,linesperzone:linesPerZone,zones,minutes,totalminutes:minutes*zones,water:emitters*lines*n('litres')};\n }else throw Error(\"Unbekannter Rechner.\");\n if(Object.values(o).some(x=>!Number.isFinite(x)))throw Error(\"Die Messwerte \u00fcberschreiten den unterst\u00fctzten Bereich.\");\n return o;\n}\nif(typeof module!=='undefined')module.exports=calculateLawn;\n\n(()=>{const root=document.getElementById('lawn-tool'),form=root.querySelector('form'),result=root.querySelector('.result'),labels={\"area\": \"Gemessene Nettofl\u00e4che (m\u00b2)\", \"sqft\": \"Gemessene Nettofl\u00e4che (sq ft)\"};let last=null;\nfunction polygons(text){return text.trim().split(\/\\n\\s*\\n\/).map(block=>{let rows=block.trim().split(\/\\n\/),exclude=\/^[-\u2013\u2014]$\/.test(rows[0].trim());if(exclude)rows.shift();return {exclude,points:rows.map(row=>{let parts=row.trim().split(\/\\s*,\\s*\/);if(parts.length!==2||parts.some(p=>!p.trim()))throw Error(\"Verwenden Sie pro Zeile eine x,y-Koordinate.\");return parts.map(Number);})};});}\nform.addEventListener('submit',e=>{e.preventDefault();last=null;try{let v=Object.fromEntries(new FormData(form));let polys;if(form.dataset.mode==='area'){polys=polygons(v.coordinates);v.polygons=JSON.stringify(polys);}let out=calculateLawn(form.dataset.mode,v);result.replaceChildren();for(let [key,value]of Object.entries(out)){let p=document.createElement('p');p.textContent=labels[key]+': '+value.toLocaleString(\"de\",{maximumFractionDigits:3});result.append(p);}if(polys){let svg=root.querySelector('#area-diagram'),all=polys.flatMap(p=>p.points),xs=all.map(p=>p[0]),ys=all.map(p=>p[1]),minx=Math.min(...xs),miny=Math.min(...ys),w=Math.max(...xs)-minx,h=Math.max(...ys)-miny;svg.replaceChildren();svg.setAttribute('viewBox',[minx-1,miny-1,w+2,h+2].join(' '));for(let poly of polys){let shape=document.createElementNS('http:\/\/www.w3.org\/2000\/svg','polygon');shape.setAttribute('points',poly.points.map(p=>p.join(',')).join(' '));shape.setAttribute('fill',poly.exclude?'#fff':'#b4e8c1');shape.setAttribute('stroke','#147e91');shape.setAttribute('stroke-width',Math.max(w,h)\/200);svg.append(shape);}last=out.area;root.querySelector('#copy-area').disabled=false;}}\ncatch(err){result.textContent=err.message;if(root.querySelector('#copy-area'))root.querySelector('#copy-area').disabled=true;}});\nform.addEventListener('reset',()=>{last=null;result.textContent=\"Geben Sie Ihre Messwerte ein und starten Sie die Berechnung.\";let svg=root.querySelector('#area-diagram');if(svg)svg.replaceChildren();let b=root.querySelector('#copy-area');if(b)b.disabled=true;});\nlet copy=root.querySelector('#copy-area');if(copy)copy.addEventListener('click',async()=>{if(last===null)return;try{await navigator.clipboard.writeText(String(last));result.append(document.createTextNode(\" Fl\u00e4che in m\u00b2 kopiert.\"));}catch(e){result.append(document.createTextNode(\" Fl\u00e4che manuell kopieren: \"+last+' m\u00b2.'));}});\n})();\n(()=>{let r=document.getElementById('lawn-tool');r.querySelector('form').addEventListener('input',()=>{r.querySelector('.result').textContent=\"Geben Sie Ihre Messwerte ein und starten Sie die Berechnung.\";let b=r.querySelector('#copy-area');if(b)b.disabled=true;let s=r.querySelector('#area-diagram');if(s)s.replaceChildren();});})();(()=>{let root=document.getElementById('lawn-tool'),svg=root.querySelector('#draw-grid');if(!svg)return;let pts=[],text=root.querySelector('[name=coordinates]'),out=root.querySelector('.result');function draw(){svg.querySelectorAll('.vertex,.edge').forEach(x=>x.remove());let line=document.createElementNS(svg.namespaceURI,'polyline');line.setAttribute('class','edge');line.setAttribute('points',pts.map(p=>p.join(',')).join(' '));line.setAttribute('stroke','#176d78');line.setAttribute('stroke-width','.12');line.setAttribute('fill','none');svg.append(line);for(let p of pts){let x=document.createElementNS(svg.namespaceURI,'circle');x.setAttribute('class','vertex');x.setAttribute('cx',p[0]);x.setAttribute('cy',p[1]);x.setAttribute('r','.2');x.setAttribute('fill','#176d78');svg.append(x);}}\nsvg.addEventListener('click',e=>{let p=svg.createSVGPoint();p.x=e.clientX;p.y=e.clientY;p=p.matrixTransform(svg.getScreenCTM().inverse());if(p.x<0||p.x>20||p.y<0||p.y>20)return;pts.push([Math.round(p.x*100)\/100,Math.round(p.y*100)\/100]);draw();});\nfunction append(exclude){if(pts.length<3){out.textContent=[\"Zeichnen Sie gemessene Eckpunkte im Raster von 20 \u00d7 20 Metern. F\u00fcgen Sie jede Grenze hinzu und berechnen Sie dann. Entfernen Sie zuerst das Beispiel mit \u201eAlle Grenzen l\u00f6schen\u201c.\", \"Rasengrenze hinzuf\u00fcgen\", \"Aussparung hinzuf\u00fcgen\", \"Eckpunkt r\u00fcckg\u00e4ngig\", \"Alle Grenzen l\u00f6schen\", \"Mindestens drei Eckpunkte sind erforderlich.\", \"Messraster: 20 \u00d7 20 Meter\"][5];return;}let block=(exclude?'-\\n':'')+pts.map(p=>p.join(',')).join('\\n');text.value=(text.value.trim()?text.value.trim()+'\\n\\n':'')+block;pts=[];draw();root.querySelector('form').requestSubmit();}\nroot.querySelector('#add-lawn').onclick=()=>append(false);root.querySelector('#add-hole').onclick=()=>append(true);root.querySelector('#undo-point').onclick=()=>{pts.pop();draw();};root.querySelector('#clear-boundaries').onclick=()=>{pts=[];text.value='';draw();root.querySelector('#area-diagram').replaceChildren();root.querySelector('#copy-area').disabled=true;out.textContent=\"Geben Sie Ihre Messwerte ein und starten Sie die Berechnung.\";};root.querySelector('form').addEventListener('reset',()=>{pts=[];draw();});})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Berechnen Sie unregelm\u00e4\u00dfige Rasenfl\u00e4chen aus gemessenen Koordinaten und ziehen Sie Aussparungen ab. Zeichnen Sie gemessene Eckpunkte im Raster von 20 \u00d7 20 Metern. F\u00fcgen Sie jede Grenze hinzu und berechnen Sie dann. Entfernen Sie zuerst das Beispiel mit \u201eAlle Grenzen l\u00f6schen\u201c. Rasengrenze hinzuf\u00fcgenAussparung hinzuf\u00fcgenEckpunkt r\u00fcckg\u00e4ngigAlle Grenzen l\u00f6schen Gemessene Grenzkoordinaten (Meter)0,0 10,0 10,10 0,10 &#8211; 1,1 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"aiper_reading_time":2,"aiper_last_reviewed":"","aiper_reviewer":0,"aiper_related_ids":[],"aiper_layout":"","footnotes":""},"class_list":["post-13364","page","type-page","status-publish","hentry"],"lang":"de","translations":{"de":13364,"es":13366,"fr":13365,"en":13363},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/comments?post=13364"}],"version-history":[{"count":3,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13364\/revisions"}],"predecessor-version":[{"id":13483,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13364\/revisions\/13483"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=13364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}