https://senzubeans.github.io/ogdoge/

ID da verificação
c680c982-224e-4db2-8ab0-d987a94fd2e1Concluído
URL enviado:
https://senzubeans.github.io/ogdoge/
Relatório concluído:

Variáveis JavaScript · 8 encontrada(s)

NomeTipo
onbeforetoggleobject
documentPictureInPictureobject
onscrollendobject
tailwindobject
/template.htmlstring
Reactobject
ReactDOMobject
Babelobject

Mensagens de registro do console · 5 encontrada(s)

TipoCategoriaLog
warningother
Texto
Error with Permissions-Policy header: Origin trial controlled feature not enabled: 'interest-cohort'.
warningother
URL
https://cdn.tailwindcss.com/
Texto
cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation
infoother
URL
https://unpkg.com/react-dom@18/umd/react-dom.development.js
Texto
%cDownload the React DevTools for a better development experience: https://reactjs.org/link/react-devtools font-weight:bold
warningother
URL
https://unpkg.com/@babel/standalone/babel.min.js
Texto
You are using the in-browser Babel transformer. Be sure to precompile your scripts for production - https://babeljs.io/docs/setup/
errornetwork
URL
https://senzubeans.github.io/favicon.ico
Texto
Failed to load resource: the server responded with a status of 404 ()

HTML

<!DOCTYPE html><html lang="en"><head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>D.O.G.E</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <link rel="stylesheet" href="./styles.css">
    <script>
      tailwind.config = {
        content: ["./**/*.{html,js}"],
        theme: {
          extend: {},
        },
        plugins: [],
      }
    </script>
  <style>*, ::before, ::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/* ! tailwindcss v3.4.15 | MIT License | https://tailwindcss.com */*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}::after,::before{--tw-content:''}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.left-0{left:0px}.right-0{right:0px}.top-0{top:0px}.mx-auto{margin-left:auto;margin-right:auto}.mt-16{margin-top:4rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.flex{display:flex}.min-h-screen{min-height:100vh}.w-11\/12{width:91.666667%}.w-full{width:100%}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.space-x-1 > :not([hidden]) ~ :not([hidden]){--tw-space-x-reverse:0;margin-right:calc(0.25rem * var(--tw-space-x-reverse));margin-left:calc(0.25rem * calc(1 - var(--tw-space-x-reverse)))}.rounded{border-radius:0.25rem}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.p-4{padding:1rem}.p-8{padding:2rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:0.5rem;padding-bottom:0.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.text-center{text-align:center}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:0.875rem;line-height:1.25rem}.font-bold{font-weight:700}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}@media (min-width: 768px){.md\:w-3\/4{width:75%}.md\:text-base{font-size:1rem;line-height:1.5rem}}</style><script type="module">function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var {
  useState
} = React;

// Game constants and components
var PHASES = {
  TITLE: "title",
  STORY: "story",
  ENDING: "ending"
};

// Icons components
var TrendingUp = () => /*#__PURE__*/React.createElement("svg", {
  xmlns: "http://www.w3.org/2000/svg",
  width: "16",
  height: "16",
  viewBox: "0 0 24 24",
  fill: "none",
  stroke: "currentColor",
  strokeWidth: "2"
}, /*#__PURE__*/React.createElement("polyline", {
  points: "23 6 13.5 15.5 8.5 10.5 1 18"
}), /*#__PURE__*/React.createElement("polyline", {
  points: "17 6 23 6 23 12"
}));
var Users = () => /*#__PURE__*/React.createElement("svg", {
  xmlns: "http://www.w3.org/2000/svg",
  width: "16",
  height: "16",
  viewBox: "0 0 24 24",
  fill: "none",
  stroke: "currentColor",
  strokeWidth: "2"
}, /*#__PURE__*/React.createElement("path", {
  d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"
}), /*#__PURE__*/React.createElement("circle", {
  cx: "9",
  cy: "7",
  r: "4"
}), /*#__PURE__*/React.createElement("path", {
  d: "M23 21v-2a4 4 0 0 0-3-3.87"
}), /*#__PURE__*/React.createElement("path", {
  d: "M16 3.13a4 4 0 0 1 0 7.75"
}));
var Brain = () => /*#__PURE__*/React.createElement("svg", {
  xmlns: "http://www.w3.org/2000/svg",
  width: "16",
  height: "16",
  viewBox: "0 0 24 24",
  fill: "none",
  stroke: "currentColor",
  strokeWidth: "2"
}, /*#__PURE__*/React.createElement("path", {
  d: "M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08A2.5 2.5 0 0 0 12 19.5a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 12 4.5"
}), /*#__PURE__*/React.createElement("path", {
  d: "M12 15v-2"
}), /*#__PURE__*/React.createElement("path", {
  d: "M12 11v-2"
}));
var Star = () => /*#__PURE__*/React.createElement("svg", {
  xmlns: "http://www.w3.org/2000/svg",
  width: "16",
  height: "16",
  viewBox: "0 0 24 24",
  fill: "none",
  stroke: "currentColor",
  strokeWidth: "2"
}, /*#__PURE__*/React.createElement("polygon", {
  points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"
}));
// Game data
var G = {
  scenes: {
    // Introduction Scene
    intro: {
      text: "Welcome to the Department of Government Efficiency (D.O.G.E). Your mission: optimize governance while balancing Elon's innovation and Trump's vision for 'winning'. Where do you start?",
      choices: [{
        text: "Analyze inefficiencies 🔍",
        next: "analyze",
        fx: {
          efficiency: 5
        }
      }, {
        text: "Host a public forum 🗣️",
        next: "public_forum",
        fx: {
          influence: 5
        }
      }, {
        text: "Unleash the Meme Army 🐸",
        next: "meme_army",
        fx: {
          memes: 10
        }
      }, {
        text: "Explore secret archives 📂",
        next: "secret_archives",
        fx: {
          innovation: 5
        }
      }]
    },
    // Path: Analyze Inefficiencies
    analyze: {
      text: "Your analysis reveals outdated systems and redundant processes. What do you do next?",
      choices: [{
        text: "Automate processes with AI 🤖",
        next: "ai_automation",
        fx: {
          efficiency: 10
        }
      }, {
        text: "Form a task force 🚨",
        next: "task_force",
        fx: {
          influence: 5,
          efficiency: 5
        }
      }, {
        text: "Blame it on bureaucracy 🗂️",
        next: "bureaucracy_blame",
        fx: {
          memes: 5
        }
      }]
    },
    ai_automation: {
      text: "AI implementation improves efficiency, but it creates resistance among employees. What's your next step?",
      choices: [{
        text: "Draft ethical AI guidelines 📜",
        next: "ethical_ai",
        fx: {
          influence: 10
        }
      }, {
        text: "Expand AI into other departments 🚀",
        next: "expand_ai",
        fx: {
          efficiency: 20
        }
      }, {
        text: "Create a public AI awareness campaign 📣",
        next: "ai_awareness",
        fx: {
          innovation: 10,
          influence: 5
        }
      }]
    },
    ethical_ai: {
      text: "Your ethical AI guidelines gain global recognition. What's next?",
      choices: [{
        text: "Collaborate with international AI regulators 🌍",
        next: "global_ai",
        fx: {
          influence: 15,
          innovation: 10
        }
      }, {
        text: "Launch an AI innovation hub 🏢",
        next: "ai_hub",
        fx: {
          innovation: 15,
          efficiency: 10
        }
      }]
    },
    global_ai: {
      text: "Your collaboration shapes international AI standards, securing long-term global efficiency.",
      choices: [],
      ending: "AI Diplomat: You redefined the future of ethical AI globally."
    },
    ai_hub: {
      text: "The innovation hub becomes a global leader in cutting-edge AI development.",
      choices: [],
      ending: "Tech Visionary: Your leadership inspired global AI advancements."
    },
    expand_ai: {
      text: "Expanding AI boosts efficiency but sparks debates about automation's impact on jobs. What's next?",
      choices: [{
        text: "Introduce re-skilling programs for workers 👩‍🏫",
        next: "reskill_workers",
        fx: {
          influence: 10,
          efficiency: 5
        }
      }, {
        text: "Focus on AI-human collaboration 🤝",
        next: "ai_collaboration",
        fx: {
          innovation: 10
        }
      }]
    },
    reskill_workers: {
      text: "Re-skilling programs successfully integrate employees into new roles.",
      choices: [],
      ending: "Workforce Advocate: You ensured progress without leaving anyone behind."
    },
    ai_collaboration: {
      text: "AI-human collaboration models become a benchmark for innovative governance.",
      choices: [],
      ending: "Collaboration Architect: You harmonized technology and humanity."
    },
    ai_awareness: {
      text: "Your public awareness campaign gains widespread support. What do you focus on next?",
      choices: [{
        text: "Highlight AI's role in environmental conservation 🌱",
        next: "ai_environment",
        fx: {
          innovation: 10
        }
      }, {
        text: "Showcase AI's potential in healthcare 🏥",
        next: "ai_healthcare",
        fx: {
          innovation: 15
        }
      }]
    },
    ai_environment: {
      text: "AI-powered environmental solutions transform resource management globally.",
      choices: [],
      ending: "Eco-Tech Leader: You pioneered AI-driven sustainability."
    },
    ai_healthcare: {
      text: "AI revolutionizes healthcare, saving countless lives.",
      choices: [],
      ending: "Health Innovator: You transformed public health with AI."
    },
    // Task Force Path
    task_force: {
      text: "The task force uncovers widespread inefficiencies. What's your next step?",
      choices: [{
        text: "Streamline resource allocation 📊",
        next: "streamline_resources",
        fx: {
          efficiency: 15
        }
      }, {
        text: "Collaborate with other government agencies 🤝",
        next: "collaborate_agencies",
        fx: {
          influence: 10,
          efficiency: 5
        }
      }, {
        text: "Seek public input on inefficiencies 📣",
        next: "public_input",
        fx: {
          influence: 15
        }
      }]
    },
    streamline_resources: {
      text: "Streamlining resource allocation improves efficiency across departments. What do you focus on next?",
      choices: [{
        text: "Integrate data-driven decision-making 📊",
        next: "data_driven",
        fx: {
          efficiency: 20,
          innovation: 10
        }
      }, {
        text: "Establish inter-departmental task forces 🚧",
        next: "inter_department",
        fx: {
          influence: 15
        }
      }]
    },
    data_driven: {
      text: "Data-driven decision-making transforms government operations.",
      choices: [],
      ending: "Data Strategist: You brought precision to public administration."
    },
    inter_department: {
      text: "Collaboration between departments breaks silos and enhances productivity.",
      choices: [],
      ending: "Unity Pioneer: You united departments for seamless governance."
    },
    collaborate_agencies: {
      text: "Inter-agency collaboration creates new opportunities. What do you prioritize?",
      choices: [{
        text: "Build a unified government portal 🌐",
        next: "government_portal",
        fx: {
          innovation: 15
        }
      }, {
        text: "Standardize processes across agencies 📋",
        next: "process_standardization",
        fx: {
          efficiency: 15
        }
      }]
    },
    government_portal: {
      text: "The unified portal provides citizens easy access to government services.",
      choices: [],
      ending: "Digital Pioneer: You made governance accessible for all."
    },
    process_standardization: {
      text: "Standardized processes streamline operations nationwide.",
      choices: [],
      ending: "Process Champion: Your reforms set a gold standard."
    },
    public_input: {
      text: "Public input reveals hidden inefficiencies and inspires innovative solutions. What's next?",
      choices: [{
        text: "Crowdsource solutions for critical issues 💡",
        next: "crowdsource_solutions",
        fx: {
          influence: 10,
          innovation: 10
        }
      }, {
        text: "Hold public forums for real-time feedback 📣",
        next: "real_time_feedback",
        fx: {
          influence: 15
        }
      }]
    },
    crowdsource_solutions: {
      text: "Crowdsourced solutions bring fresh ideas to governance.",
      choices: [],
      ending: "Crowdsourcing Pioneer: You empowered citizens to solve problems."
    },
    real_time_feedback: {
      text: "Real-time feedback drives continuous improvement in government services.",
      choices: [],
      ending: "Feedback Leader: You fostered transparency and adaptability."
    },
    // Bureaucracy Blame Path
    bureaucracy_blame: {
      text: "Your humorous blame campaign gains public attention, making governance issues relatable. What's next?",
      choices: [{
        text: "Create a satirical bureaucracy task force 🎭",
        next: "satirical_task_force",
        fx: {
          memes: 15
        }
      }, {
        text: "Engage meme creators to amplify the message 🐸",
        next: "meme_creators",
        fx: {
          memes: 10,
          influence: 5
        }
      }, {
        text: "Turn the campaign into a public documentary 🎥",
        next: "public_documentary",
        fx: {
          influence: 15
        }
      }]
    },
    satirical_task_force: {
      text: "The satirical task force highlights absurd inefficiencies and inspires action.",
      choices: [],
      ending: "Humor Activist: You turned laughter into a catalyst for change."
    },
    meme_creators: {
      text: "Meme creators turn the campaign into a viral sensation, driving reform.",
      choices: [],
      ending: "Meme Mobilizer: You redefined activism with creativity."
    },
    public_documentary: {
      text: "The documentary educates citizens and ignites a wave of grassroots reform movements.",
      choices: [],
      ending: "Grassroots Hero: You empowered citizens to drive change."
    },
    // Public Forum Path
    public_forum: {
      text: "The public eagerly shares ideas to improve governance. What's next?",
      choices: [{
        text: "Form citizen advisory boards 👥",
        next: "advisory_boards",
        fx: {
          influence: 10
        }
      }, {
        text: "Launch transparency dashboards 📊",
        next: "transparency_dashboards",
        fx: {
          innovation: 10
        }
      }, {
        text: "Create meme-based reforms 🐸",
        next: "meme_reforms",
        fx: {
          memes: 10
        }
      }]
    },
    advisory_boards: {
      text: "Citizen advisory boards are formed, providing new ideas and perspectives. What do you do next?",
      choices: [{
        text: "Adopt citizen-driven policies 📜",
        next: "citizen_policies",
        fx: {
          efficiency: 15
        }
      }, {
        text: "Expand advisory boards nationwide 🌍",
        next: "national_boards",
        fx: {
          influence: 15
        }
      }, {
        text: "Host a yearly advisory summit 🏛️",
        next: "advisory_summit",
        fx: {
          innovation: 10,
          influence: 10
        }
      }]
    },
    citizen_policies: {
      text: "Citizen-driven policies transform public trust and government efficiency. What's next?",
      choices: [{
        text: "Create local-level advisory boards 🏡",
        next: "local_boards",
        fx: {
          influence: 10
        }
      }, {
        text: "Integrate policies with technology apps 📱",
        next: "policy_apps",
        fx: {
          innovation: 15
        }
      }]
    },
    local_boards: {
      text: "Local advisory boards foster a sense of community and engagement in governance.",
      choices: [],
      ending: "Community Builder: You brought governance closer to the people."
    },
    policy_apps: {
      text: "Technology apps make citizen policies accessible and actionable.",
      choices: [],
      ending: "Policy Innovator: You combined technology and governance seamlessly."
    },
    national_boards: {
      text: "Nationwide boards inspire public participation on an unprecedented scale.",
      choices: [],
      ending: "Visionary Leader: Your outreach united citizens across the country."
    },
    advisory_summit: {
      text: "The annual summit becomes a hub for innovation and collaboration. What's next?",
      choices: [{
        text: "Partner with international advisory groups 🤝",
        next: "global_partnership",
        fx: {
          influence: 15,
          innovation: 10
        }
      }, {
        text: "Use summit ideas to craft new legislation 📜",
        next: "summit_legislation",
        fx: {
          efficiency: 10
        }
      }]
    },
    global_partnership: {
      text: "Partnerships with global advisory groups spark international reforms.",
      choices: [],
      ending: "Global Reformer: You inspired collaboration beyond borders."
    },
    summit_legislation: {
      text: "New legislation based on summit ideas revolutionizes governance.",
      choices: [],
      ending: "Lawmaker Visionary: You turned ideas into impactful laws."
    },
    // Transparency Dashboards Path
    transparency_dashboards: {
      text: "Transparency dashboards provide real-time access to government data. What's next?",
      choices: [{
        text: "Integrate dashboards with public apps 📱",
        next: "dashboard_apps",
        fx: {
          innovation: 15
        }
      }, {
        text: "Promote dashboards globally 🌍",
        next: "global_dashboards",
        fx: {
          influence: 15
        }
      }, {
        text: "Use dashboards to crowdsource problem-solving 💡",
        next: "crowdsource_dashboards",
        fx: {
          innovation: 10,
          influence: 10
        }
      }]
    },
    dashboard_apps: {
      text: "Apps make dashboards accessible to citizens, empowering them to hold the government accountable.",
      choices: [{
        text: "Develop AI features for the dashboards 🤖",
        next: "ai_dashboards",
        fx: {
          innovation: 15
        }
      }, {
        text: "Focus on rural areas for app adoption 🌾",
        next: "rural_apps",
        fx: {
          influence: 10
        }
      }]
    },
    ai_dashboards: {
      text: "AI-enhanced dashboards predict inefficiencies and provide actionable insights.",
      choices: [],
      ending: "Tech Pioneer: You brought predictive analytics to governance."
    },
    rural_apps: {
      text: "Rural communities adopt apps, fostering inclusive governance.",
      choices: [],
      ending: "Rural Innovator: You made governance accessible to all."
    },
    global_dashboards: {
      text: "Transparency dashboards inspire global reforms in accountability.",
      choices: [],
      ending: "Global Advocate: Your efforts redefined transparency worldwide."
    },
    crowdsource_dashboards: {
      text: "Crowdsourcing through dashboards accelerates problem-solving. What's next?",
      choices: [{
        text: "Expand crowdsourcing to global issues 🌍",
        next: "global_crowdsourcing",
        fx: {
          innovation: 15,
          influence: 10
        }
      }, {
        text: "Use crowdsourcing to innovate public services 🚀",
        next: "public_innovation",
        fx: {
          innovation: 15
        }
      }]
    },
    global_crowdsourcing: {
      text: "Global crowdsourcing addresses critical issues like climate change and poverty.",
      choices: [],
      ending: "Global Problem Solver: You turned governance into a collaborative force."
    },
    public_innovation: {
      text: "Innovations in public services transform government efficiency and citizen satisfaction.",
      choices: [],
      ending: "Service Innovator: You revolutionized public services through collaboration."
    },
    // Meme-Based Reforms Path
    meme_reforms: {
      text: "Your meme-based reforms gain massive traction and public approval. What's next?",
      choices: [{
        text: "Launch a public meme competition 🎉",
        next: "public_meme_competition",
        fx: {
          memes: 15
        }
      }, {
        text: "Develop meme-based educational campaigns 📚",
        next: "educational_memes",
        fx: {
          innovation: 10,
          memes: 5
        }
      }, {
        text: "Create a government meme department 🏢",
        next: "meme_department",
        fx: {
          memes: 15
        }
      }]
    },
    public_meme_competition: {
      text: "The meme competition inspires creativity and civic awareness. What do you do next?",
      choices: [{
        text: "Publish winning memes in a national anthology 📖",
        next: "meme_anthology",
        fx: {
          memes: 10
        }
      }, {
        text: "Use winning memes in public service campaigns 📣",
        next: "service_campaigns",
        fx: {
          influence: 10,
          memes: 10
        }
      }]
    },
    meme_anthology: {
      text: "The anthology becomes a bestseller, highlighting the power of humor.",
      choices: [],
      ending: "Cultural Icon: Your anthology brought humor to the masses."
    },
    service_campaigns: {
      text: "Public service campaigns powered by memes drive engagement and awareness.",
      choices: [],
      ending: "Campaign Mastermind: You used memes to transform civic engagement."
    },
    educational_memes: {
      text: "Educational campaigns using memes improve public understanding of complex policies. What's next?",
      choices: [{
        text: "Introduce meme-based civic courses 📖",
        next: "civic_courses",
        fx: {
          innovation: 10,
          influence: 10
        }
      }, {
        text: "Develop a meme-powered voting initiative 🗳️",
        next: "meme_voting",
        fx: {
          influence: 15
        }
      }]
    },
    civic_courses: {
      text: "Civic courses make education engaging and accessible to all.",
      choices: [],
      ending: "Civic Meme Innovator: You brought humor to civic education."
    },
    meme_voting: {
      text: "Meme-powered voting drives record turnout and strengthens democracy.",
      choices: [],
      ending: "Democracy Defender: You revolutionized elections with creativity."
    },
    meme_department: {
      text: "The meme department becomes a cultural hub for humor-driven reforms.",
      choices: [],
      ending: "Meme Minister: You institutionalized the power of memes in governance."
    },
    // Meme Army Path
    meme_army: {
      text: "Your meme campaign gains massive traction, captivating audiences worldwide. What's next?",
      choices: [{
        text: "Collaborate with influencers 🌟",
        next: "influencer_collab",
        fx: {
          influence: 10,
          memes: 10
        }
      }, {
        text: "Create a Meme DAO 📜",
        next: "create_meme_dao",
        fx: {
          innovation: 10,
          memes: 15
        }
      }, {
        text: "Host a meme competition 🎉",
        next: "meme_competition",
        fx: {
          influence: 5,
          memes: 10
        }
      }]
    },
    influencer_collab: {
      text: "Influencers amplify your message, making your memes a cultural phenomenon. What's next?",
      choices: [{
        text: "Turn memes into merchandise 🛍️",
        next: "meme_merch",
        fx: {
          influence: 10,
          memes: 10
        }
      }, {
        text: "Use memes to educate citizens 📚",
        next: "educational_memes",
        fx: {
          innovation: 10,
          memes: 5
        }
      }, {
        text: "Create meme-powered charity campaigns 💝",
        next: "meme_charity",
        fx: {
          influence: 15,
          memes: 10
        }
      }]
    },
    meme_merch: {
      text: "Merchandise profits fund public projects and spread the meme movement even further. What do you do next?",
      choices: [{
        text: "Invest profits into meme-based schools 🎓",
        next: "meme_schools",
        fx: {
          innovation: 15
        }
      }, {
        text: "Use profits to fund infrastructure upgrades 🏗️",
        next: "meme_infrastructure",
        fx: {
          efficiency: 15
        }
      }]
    },
    meme_schools: {
      text: "Meme-based schools teach humor and critical thinking to the next generation.",
      choices: [],
      ending: "Meme Mentor: You shaped a future where humor and knowledge go hand in hand."
    },
    meme_infrastructure: {
      text: "Infrastructure upgrades funded by memes lead to better roads, faster internet, and happier citizens.",
      choices: [],
      ending: "Infrastructure Icon: You turned memes into a force for physical progress."
    },
    meme_charity: {
      text: "Charity campaigns powered by memes raise unprecedented funds. What's your next step?",
      choices: [{
        text: "Build global charity networks 🌍",
        next: "global_charity",
        fx: {
          influence: 20,
          innovation: 10
        }
      }, {
        text: "Develop tech to gamify charity campaigns 🎮",
        next: "gamify_charity",
        fx: {
          innovation: 15
        }
      }]
    },
    global_charity: {
      text: "Your charity networks improve lives worldwide, building bridges across nations.",
      choices: [],
      ending: "Global Humanitarian: You turned memes into a tool for global good."
    },
    gamify_charity: {
      text: "Gamification of charity campaigns makes giving back fun and engaging.",
      choices: [],
      ending: "Charity Game Changer: You revolutionized philanthropy with innovation."
    },
    // Meme DAO Path
    create_meme_dao: {
      text: "The Meme DAO gains massive support, enabling crowdfunding for reform projects. What's next?",
      choices: [{
        text: "Expand the DAO globally 🌍",
        next: "global_dao",
        fx: {
          influence: 20,
          innovation: 10
        }
      }, {
        text: "Use DAO funds for transparency dashboards 📊",
        next: "dashboard_funding",
        fx: {
          efficiency: 15
        }
      }, {
        text: "Partner DAO with tech companies 🤝",
        next: "tech_partnership",
        fx: {
          innovation: 20
        }
      }]
    },
    global_dao: {
      text: "The global DAO inspires international citizen-led reforms.",
      choices: [],
      ending: "Citizen Diplomat: You created a global movement for change."
    },
    dashboard_funding: {
      text: "DAO funds improve transparency and public accountability.",
      choices: [],
      ending: "Transparency Titan: Your DAO transformed public trust."
    },
    tech_partnership: {
      text: "Partnerships with tech companies revolutionize DAO efficiency.",
      choices: [],
      ending: "Tech Reformer: You pioneered citizen-tech collaboration."
    },
    // Host a Meme Competition
    meme_competition: {
      text: "The competition engages the public and sparks creativity. What's next?",
      choices: [{
        text: "Publish winning memes in a national anthology 📖",
        next: "meme_anthology",
        fx: {
          memes: 10
        }
      }, {
        text: "Use winning memes in public service campaigns 📣",
        next: "service_campaigns",
        fx: {
          influence: 10,
          memes: 10
        }
      }, {
        text: "Turn winning memes into NFTs 🖼️",
        next: "nft_memes",
        fx: {
          innovation: 10,
          memes: 10
        }
      }]
    },
    nft_memes: {
      text: "The NFT collection generates significant revenue for government projects.",
      choices: [],
      ending: "Digital Innovator: You blended art, technology, and reform."
    },
    // Path: Explore Secret Archives
    secret_archives: {
      text: "You uncover classified documents revealing inefficiencies and hidden agendas. What’s your next move?",
      choices: [{
        text: "Expose the truth 🕵️‍♂️",
        next: "expose_truth",
        fx: {
          influence: 15,
          memes: 10
        }
      }, {
        text: "Use secrets for leverage 💼",
        next: "leverage_secrets",
        fx: {
          efficiency: 10,
          influence: 10
        }
      }, {
        text: "Destroy the archives 🔥",
        next: "destroy_archives",
        fx: {
          memes: 5
        }
      }]
    },
    // Option 1: Expose the Truth
    expose_truth: {
      text: "The truth shocks the nation, sparking protests and demands for change. What’s your next move?",
      choices: [{
        text: "Rally citizens for reforms 🗣️",
        next: "citizen_rally",
        fx: {
          influence: 15
        }
      }, {
        text: "Work with investigative journalists 📰",
        next: "journalist_collab",
        fx: {
          influence: 10,
          innovation: 5
        }
      }, {
        text: "Push for emergency government hearings 🏛️",
        next: "gov_hearings",
        fx: {
          influence: 20
        }
      }]
    },
    citizen_rally: {
      text: "Massive citizen rallies lead to legislative reforms and greater transparency. What’s your next step?",
      choices: [{
        text: "Create permanent citizen reform groups 🌟",
        next: "reform_groups",
        fx: {
          influence: 10,
          efficiency: 10
        }
      }, {
        text: "Push for direct democracy initiatives 🗳️",
        next: "direct_democracy",
        fx: {
          innovation: 10
        }
      }]
    },
    reform_groups: {
      text: "Citizen reform groups sustain momentum for change across the nation.",
      choices: [],
      ending: "People’s Advocate: You empowered the public to take control of governance."
    },
    direct_democracy: {
      text: "Direct democracy initiatives give citizens a more active role in government decisions.",
      choices: [],
      ending: "Democracy Architect: You redefined governance by giving power to the people."
    },
    journalist_collab: {
      text: "Investigative reports reveal deeper issues, accelerating systemic reforms. What’s next?",
      choices: [{
        text: "Focus on judicial reforms ⚖️",
        next: "judicial_reforms",
        fx: {
          efficiency: 10
        }
      }, {
        text: "Develop whistleblower protection laws 🛡️",
        next: "whistleblower_laws",
        fx: {
          influence: 15
        }
      }]
    },
    judicial_reforms: {
      text: "Judicial reforms enhance accountability and fairness in governance.",
      choices: [],
      ending: "Justice Champion: Your reforms restored trust in the system."
    },
    whistleblower_laws: {
      text: "Whistleblower protections encourage more revelations, leading to continued improvements.",
      choices: [],
      ending: "Guardian of Truth: Your policies ensured transparency for the future."
    },
    gov_hearings: {
      text: "Emergency hearings uncover corruption, resulting in high-profile resignations. What’s your next move?",
      choices: [{
        text: "Appoint new ethical leaders 🌟",
        next: "ethical_leaders",
        fx: {
          influence: 15
        }
      }, {
        text: "Pass anti-corruption legislation 📜",
        next: "anti_corruption",
        fx: {
          efficiency: 15
        }
      }]
    },
    ethical_leaders: {
      text: "New leaders bring a fresh perspective and earn public trust.",
      choices: [],
      ending: "Leadership Revitalizer: You redefined leadership in governance."
    },
    anti_corruption: {
      text: "Anti-corruption laws create a cleaner, more efficient government.",
      choices: [],
      ending: "Corruption Fighter: Your efforts rooted out systemic inefficiencies."
    },
    // Option 2: Use Secrets for Leverage
    leverage_secrets: {
      text: "Strategic use of secrets ensures quick policy changes in your favor. What’s next?",
      choices: [{
        text: "Secure funding for reforms 💰",
        next: "funding_reforms",
        fx: {
          efficiency: 15,
          influence: 10
        }
      }, {
        text: "Forge alliances with key figures 🤝",
        next: "key_alliances",
        fx: {
          influence: 10
        }
      }, {
        text: "Launch covert reform projects 🛠️",
        next: "covert_projects",
        fx: {
          efficiency: 10
        }
      }]
    },
    funding_reforms: {
      text: "Secured funding accelerates efficiency and innovation across departments. What’s next?",
      choices: [{
        text: "Establish oversight committees 📋",
        next: "oversight_committees",
        fx: {
          influence: 10
        }
      }, {
        text: "Modernize government infrastructure 🏗️",
        next: "modern_infra",
        fx: {
          efficiency: 15
        }
      }]
    },
    oversight_committees: {
      text: "Oversight committees ensure reforms are implemented effectively.",
      choices: [],
      ending: "Accountability Advocate: Your vigilance ensured long-term success."
    },
    modern_infra: {
      text: "Modern infrastructure streamlines operations and improves efficiency.",
      choices: [],
      ending: "Efficiency Champion: Your efforts brought governance into the modern era."
    },
    key_alliances: {
      text: "Key alliances with influential figures advance your reform agenda.",
      choices: [],
      ending: "Power Broker: You built alliances to drive meaningful change."
    },
    covert_projects: {
      text: "Covert projects address inefficiencies without attracting public backlash.",
      choices: [],
      ending: "Stealth Reformer: You achieved success behind the scenes."
    },
    // Option 3: Destroy the Archives
    destroy_archives: {
      text: "You destroy the archives, ensuring no one can misuse the sensitive information. What’s your next step?",
      choices: [{
        text: "Work quietly on reforms 🛠️",
        next: "quiet_reforms",
        fx: {
          efficiency: 10
        }
      }, {
        text: "Focus on restoring public trust 🤝",
        next: "restore_trust",
        fx: {
          influence: 10
        }
      }, {
        text: "Create a citizen watchdog group 👀",
        next: "watchdog_group",
        fx: {
          influence: 15
        }
      }]
    },
    quiet_reforms: {
      text: "Quiet but effective reforms eliminate inefficiencies without public uproar.",
      choices: [{
        text: "Increase automation in departments 🤖",
        next: "automation_reforms",
        fx: {
          efficiency: 15
        }
      }, {
        text: "Focus on rural areas for reform outreach 🌾",
        next: "rural_reforms",
        fx: {
          influence: 10
        }
      }]
    },
    automation_reforms: {
      text: "Automation reforms reduce bureaucracy and improve efficiency.",
      choices: [],
      ending: "Automation Advocate: You streamlined governance through technology."
    },
    rural_reforms: {
      text: "Reforms bring modern governance to rural communities, empowering citizens.",
      choices: [],
      ending: "Rural Champion: You brought inclusive governance to underserved areas."
    },
    restore_trust: {
      text: "Restoring trust brings renewed hope and support for the government. What’s your next focus?",
      choices: [{
        text: "Engage citizens in policy-making 📜",
        next: "citizen_engagement",
        fx: {
          influence: 10
        }
      }, {
        text: "Strengthen media transparency 📰",
        next: "media_transparency",
        fx: {
          influence: 15
        }
      }]
    },
    citizen_engagement: {
      text: "Citizens become active participants in policy-making, enhancing trust.",
      choices: [],
      ending: "Trust Builder: You empowered citizens to shape their government."
    },
    media_transparency: {
      text: "Transparent media fosters accountability and public awareness.",
      choices: [],
      ending: "Media Ally: You ensured the free flow of truthful information."
    },
    watchdog_group: {
      text: "The watchdog group monitors government actions, ensuring accountability.",
      choices: [],
      ending: "Sentinel of Integrity: Your efforts created a culture of vigilance."
    }
  }
};

// Initial game state
var initialState = {
  phase: PHASES.TITLE,
  scene: "intro",
  stats: {
    efficiency: 0,
    influence: 0,
    innovation: 0,
    memes: 0
  },
  path: [],
  ending: null
};
// Footer Component
function Footer() {
  return /*#__PURE__*/React.createElement("footer", {
    className: "bg-gray-900 text-white py-4 mt-4 text-center w-full"
  }, /*#__PURE__*/React.createElement("p", null, "Made with ", /*#__PURE__*/React.createElement("span", {
    className: "text-red-500"
  }, "\u2764"), " by the OG D.O.G.E. Community"), /*#__PURE__*/React.createElement("p", null, "OG Doge CA: A5WzrfzWa4kjgEjSXCbnsn1xy5Aanuq3TCZJL1dhpump"));
}

// Main App Component
function App() {
  var [state, setState] = React.useState(initialState);
  var handleChoice = choice => {
    var nextScene = G.scenes[choice.next];
    if (!nextScene) return;
    var newStats = _objectSpread({}, state.stats);
    Object.keys(choice.fx || {}).forEach(key => {
      newStats[key] += choice.fx[key];
    });
    var isEnding = !nextScene.choices || nextScene.choices.length === 0;
    setState(prev => _objectSpread(_objectSpread({}, prev), {}, {
      scene: choice.next,
      stats: newStats,
      path: [...prev.path, choice.next],
      phase: isEnding ? PHASES.ENDING : PHASES.STORY,
      ending: isEnding ? nextScene.ending : null
    }));
  };
  var resetGame = () => setState(initialState);
  return /*#__PURE__*/React.createElement("div", {
    className: "bg-gradient-custom min-h-screen flex flex-col justify-between"
  }, /*#__PURE__*/React.createElement("div", {
    className: "fixed top-0 left-0 right-0 bg-gray-900 text-white p-4 shadow-md flex justify-around text-sm md:text-base"
  }, /*#__PURE__*/React.createElement("div", {
    className: "flex items-center space-x-1"
  }, /*#__PURE__*/React.createElement(TrendingUp, null), " ", /*#__PURE__*/React.createElement("span", null, "Efficiency: ", state.stats.efficiency)), /*#__PURE__*/React.createElement("div", {
    className: "flex items-center space-x-1"
  }, /*#__PURE__*/React.createElement(Users, null), " ", /*#__PURE__*/React.createElement("span", null, "Influence: ", state.stats.influence)), /*#__PURE__*/React.createElement("div", {
    className: "flex items-center space-x-1"
  }, /*#__PURE__*/React.createElement(Brain, null), " ", /*#__PURE__*/React.createElement("span", null, "Innovation: ", state.stats.innovation)), /*#__PURE__*/React.createElement("div", {
    className: "flex items-center space-x-1"
  }, /*#__PURE__*/React.createElement(Star, null), " ", /*#__PURE__*/React.createElement("span", null, "Memes: ", state.stats.memes))), /*#__PURE__*/React.createElement("div", {
    className: "p-8 bg-gray-800 rounded shadow-lg text-center w-11/12 md:w-3/4 mt-16 mx-auto"
  }, state.phase === PHASES.TITLE ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", {
    className: "text-4xl font-bold"
  }, "D.O.G.E"), /*#__PURE__*/React.createElement("p", {
    className: "mt-4 text-lg"
  }, "Department Of Government Efficiency"), /*#__PURE__*/React.createElement("button", {
    className: "mt-6 px-6 py-2 bg-blue-500 text-white rounded",
    onClick: () => setState(_objectSpread(_objectSpread({}, state), {}, {
      phase: PHASES.STORY
    }))
  }, "Start")) : state.phase === PHASES.ENDING ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h1", {
    className: "text-3xl font-bold"
  }, "Ending"), /*#__PURE__*/React.createElement("p", {
    className: "mt-4"
  }, G.scenes[state.scene].text), /*#__PURE__*/React.createElement("p", {
    className: "mt-4 text-lg font-semibold"
  }, state.ending), /*#__PURE__*/React.createElement("button", {
    className: "mt-6 px-6 py-2 bg-green-500 text-white rounded",
    onClick: resetGame
  }, "Replay")) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {
    className: "text-lg mb-6"
  }, G.scenes[state.scene].text), G.scenes[state.scene].choices.map((choice, i) => /*#__PURE__*/React.createElement("button", {
    key: i,
    className: "block w-full px-4 py-2 bg-gray-700 hover:bg-gray-600 text-left text-white rounded mb-2 transition-colors",
    onClick: () => handleChoice(choice)
  }, choice.text)))), /*#__PURE__*/React.createElement(Footer, null));
}

// Mount the app
var root = ReactDOM.createRoot(document.getElementById('root'));
root.render(/*#__PURE__*/React.createElement(App, null));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsIlJlYWN0IiwiUEhBU0VTIiwiVElUTEUiLCJTVE9SWSIsIkVORElORyIsIlRyZW5kaW5nVXAiLCJjcmVhdGVFbGVtZW50IiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJwb2ludHMiLCJVc2VycyIsImQiLCJjeCIsImN5IiwiciIsIkJyYWluIiwiU3RhciIsIkciLCJzY2VuZXMiLCJpbnRybyIsInRleHQiLCJjaG9pY2VzIiwibmV4dCIsImZ4IiwiZWZmaWNpZW5jeSIsImluZmx1ZW5jZSIsIm1lbWVzIiwiaW5ub3ZhdGlvbiIsImFuYWx5emUiLCJhaV9hdXRvbWF0aW9uIiwiZXRoaWNhbF9haSIsImdsb2JhbF9haSIsImVuZGluZyIsImFpX2h1YiIsImV4cGFuZF9haSIsInJlc2tpbGxfd29ya2VycyIsImFpX2NvbGxhYm9yYXRpb24iLCJhaV9hd2FyZW5lc3MiLCJhaV9lbnZpcm9ubWVudCIsImFpX2hlYWx0aGNhcmUiLCJ0YXNrX2ZvcmNlIiwic3RyZWFtbGluZV9yZXNvdXJjZXMiLCJkYXRhX2RyaXZlbiIsImludGVyX2RlcGFydG1lbnQiLCJjb2xsYWJvcmF0ZV9hZ2VuY2llcyIsImdvdmVybm1lbnRfcG9ydGFsIiwicHJvY2Vzc19zdGFuZGFyZGl6YXRpb24iLCJwdWJsaWNfaW5wdXQiLCJjcm93ZHNvdXJjZV9zb2x1dGlvbnMiLCJyZWFsX3RpbWVfZmVlZGJhY2siLCJidXJlYXVjcmFjeV9ibGFtZSIsInNhdGlyaWNhbF90YXNrX2ZvcmNlIiwibWVtZV9jcmVhdG9ycyIsInB1YmxpY19kb2N1bWVudGFyeSIsInB1YmxpY19mb3J1bSIsImFkdmlzb3J5X2JvYXJkcyIsImNpdGl6ZW5fcG9saWNpZXMiLCJsb2NhbF9ib2FyZHMiLCJwb2xpY3lfYXBwcyIsIm5hdGlvbmFsX2JvYXJkcyIsImFkdmlzb3J5X3N1bW1pdCIsImdsb2JhbF9wYXJ0bmVyc2hpcCIsInN1bW1pdF9sZWdpc2xhdGlvbiIsInRyYW5zcGFyZW5jeV9kYXNoYm9hcmRzIiwiZGFzaGJvYXJkX2FwcHMiLCJhaV9kYXNoYm9hcmRzIiwicnVyYWxfYXBwcyIsImdsb2JhbF9kYXNoYm9hcmRzIiwiY3Jvd2Rzb3VyY2VfZGFzaGJvYXJkcyIsImdsb2JhbF9jcm93ZHNvdXJjaW5nIiwicHVibGljX2lubm92YXRpb24iLCJtZW1lX3JlZm9ybXMiLCJwdWJsaWNfbWVtZV9jb21wZXRpdGlvbiIsIm1lbWVfYW50aG9sb2d5Iiwic2VydmljZV9jYW1wYWlnbnMiLCJlZHVjYXRpb25hbF9tZW1lcyIsImNpdmljX2NvdXJzZXMiLCJtZW1lX3ZvdGluZyIsIm1lbWVfZGVwYXJ0bWVudCIsIm1lbWVfYXJteSIsImluZmx1ZW5jZXJfY29sbGFiIiwibWVtZV9tZXJjaCIsIm1lbWVfc2Nob29scyIsIm1lbWVfaW5mcmFzdHJ1Y3R1cmUiLCJtZW1lX2NoYXJpdHkiLCJnbG9iYWxfY2hhcml0eSIsImdhbWlmeV9jaGFyaXR5IiwiY3JlYXRlX21lbWVfZGFvIiwiZ2xvYmFsX2RhbyIsImRhc2hib2FyZF9mdW5kaW5nIiwidGVjaF9wYXJ0bmVyc2hpcCIsIm1lbWVfY29tcGV0aXRpb24iLCJuZnRfbWVtZXMiLCJzZWNyZXRfYXJjaGl2ZXMiLCJleHBvc2VfdHJ1dGgiLCJjaXRpemVuX3JhbGx5IiwicmVmb3JtX2dyb3VwcyIsImRpcmVjdF9kZW1vY3JhY3kiLCJqb3VybmFsaXN0X2NvbGxhYiIsImp1ZGljaWFsX3JlZm9ybXMiLCJ3aGlzdGxlYmxvd2VyX2xhd3MiLCJnb3ZfaGVhcmluZ3MiLCJldGhpY2FsX2xlYWRlcnMiLCJhbnRpX2NvcnJ1cHRpb24iLCJsZXZlcmFnZV9zZWNyZXRzIiwiZnVuZGluZ19yZWZvcm1zIiwib3ZlcnNpZ2h0X2NvbW1pdHRlZXMiLCJtb2Rlcm5faW5mcmEiLCJrZXlfYWxsaWFuY2VzIiwiY292ZXJ0X3Byb2plY3RzIiwiZGVzdHJveV9hcmNoaXZlcyIsInF1aWV0X3JlZm9ybXMiLCJhdXRvbWF0aW9uX3JlZm9ybXMiLCJydXJhbF9yZWZvcm1zIiwicmVzdG9yZV90cnVzdCIsImNpdGl6ZW5fZW5nYWdlbWVudCIsIm1lZGlhX3RyYW5zcGFyZW5jeSIsIndhdGNoZG9nX2dyb3VwIiwiaW5pdGlhbFN0YXRlIiwicGhhc2UiLCJzY2VuZSIsInN0YXRzIiwicGF0aCIsIkZvb3RlciIsImNsYXNzTmFtZSIsIkFwcCIsInN0YXRlIiwic2V0U3RhdGUiLCJoYW5kbGVDaG9pY2UiLCJjaG9pY2UiLCJuZXh0U2NlbmUiLCJuZXdTdGF0cyIsIl9vYmplY3RTcHJlYWQiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImlzRW5kaW5nIiwibGVuZ3RoIiwicHJldiIsInJlc2V0R2FtZSIsIkZyYWdtZW50Iiwib25DbGljayIsIm1hcCIsImkiLCJyb290IiwiUmVhY3RET00iLCJjcmVhdGVSb290IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbmRlciJdLCJzb3VyY2VzIjpbIklubGluZSBCYWJlbCBzY3JpcHQiXSwic291cmNlc0NvbnRlbnQiOlsiXG4gICAgICBjb25zdCB7IHVzZVN0YXRlIH0gPSBSZWFjdDtcbiAgICAgIFxuICAgICAgLy8gR2FtZSBjb25zdGFudHMgYW5kIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IFBIQVNFUyA9IHtcbiAgICAgICAgVElUTEU6IFwidGl0bGVcIixcbiAgICAgICAgU1RPUlk6IFwic3RvcnlcIixcbiAgICAgICAgRU5ESU5HOiBcImVuZGluZ1wiLFxuICAgICAgfTtcblxuICAgICAgLy8gSWNvbnMgY29tcG9uZW50c1xuICAgICAgY29uc3QgVHJlbmRpbmdVcCA9ICgpID0+IChcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9XCIyXCI+XG4gICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjIzIDYgMTMuNSAxNS41IDguNSAxMC41IDEgMThcIi8+XG4gICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjE3IDYgMjMgNiAyMyAxMlwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApO1xuXG4gICAgICBjb25zdCBVc2VycyA9ICgpID0+IChcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9XCIyXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk0xNyAyMXYtMmE0IDQgMCAwIDAtNC00SDVhNCA0IDAgMCAwLTQgNHYyXCIvPlxuICAgICAgICAgIDxjaXJjbGUgY3g9XCI5XCIgY3k9XCI3XCIgcj1cIjRcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk0yMyAyMXYtMmE0IDQgMCAwIDAtMy0zLjg3XCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTYgMy4xM2E0IDQgMCAwIDEgMCA3Ljc1XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IEJyYWluID0gKCkgPT4gKFxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD1cIjJcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTEyIDQuNWEyLjUgMi41IDAgMCAwLTQuOTYtLjQ2IDIuNSAyLjUgMCAwIDAtMS45OCAzIDIuNSAyLjUgMCAwIDAtMS4zMiA0LjI0IDMgMyAwIDAgMCAuMzQgNS41OCAyLjUgMi41IDAgMCAwIDIuOTYgMy4wOEEyLjUgMi41IDAgMCAwIDEyIDE5LjVhMi41IDIuNSAwIDAgMCA0Ljk2LjQ0IDIuNSAyLjUgMCAwIDAgMi45Ni0zLjA4IDMgMyAwIDAgMCAuMzQtNS41OCAyLjUgMi41IDAgMCAwLTEuMzItNC4yNCAyLjUgMi41IDAgMCAwLTEuOTgtM0EyLjUgMi41IDAgMCAwIDEyIDQuNVwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTEyIDE1di0yXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMTF2LTJcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgKTtcblxuICAgICAgY29uc3QgU3RhciA9ICgpID0+IChcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9XCIyXCI+XG4gICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMTIgMiAxNS4wOSA4LjI2IDIyIDkuMjcgMTcgMTQuMTQgMTguMTggMjEuMDIgMTIgMTcuNzcgNS44MiAyMS4wMiA3IDE0LjE0IDIgOS4yNyA4LjkxIDguMjYgMTIgMlwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApO1xuLy8gR2FtZSBkYXRhXG4gICAgICBjb25zdCBHID0ge1xuICAgICAgICBzY2VuZXM6IHtcbiAgICAvLyBJbnRyb2R1Y3Rpb24gU2NlbmVcbiAgICAgICAgICBpbnRybzoge1xuICAgICAgICAgICAgdGV4dDogXCJXZWxjb21lIHRvIHRoZSBEZXBhcnRtZW50IG9mIEdvdmVybm1lbnQgRWZmaWNpZW5jeSAoRC5PLkcuRSkuIFlvdXIgbWlzc2lvbjogb3B0aW1pemUgZ292ZXJuYW5jZSB3aGlsZSBiYWxhbmNpbmcgRWxvbidzIGlubm92YXRpb24gYW5kIFRydW1wJ3MgdmlzaW9uIGZvciAnd2lubmluZycuIFdoZXJlIGRvIHlvdSBzdGFydD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiQW5hbHl6ZSBpbmVmZmljaWVuY2llcyDwn5SNXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJhbmFseXplXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgZWZmaWNpZW5jeTogNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJIb3N0IGEgcHVibGljIGZvcnVtIPCfl6PvuI9cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcInB1YmxpY19mb3J1bVwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJVbmxlYXNoIHRoZSBNZW1lIEFybXkg8J+QuFwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwibWVtZV9hcm15XCIsXG4gICAgICAgICAgICAgICAgZng6IHsgbWVtZXM6IDEwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkV4cGxvcmUgc2VjcmV0IGFyY2hpdmVzIPCfk4JcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcInNlY3JldF9hcmNoaXZlc1wiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBQYXRoOiBBbmFseXplIEluZWZmaWNpZW5jaWVzXG4gICAgICAgICAgYW5hbHl6ZToge1xuICAgICAgICAgICAgdGV4dDogXCJZb3VyIGFuYWx5c2lzIHJldmVhbHMgb3V0ZGF0ZWQgc3lzdGVtcyBhbmQgcmVkdW5kYW50IHByb2Nlc3Nlcy4gV2hhdCBkbyB5b3UgZG8gbmV4dD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiQXV0b21hdGUgcHJvY2Vzc2VzIHdpdGggQUkg8J+kllwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiYWlfYXV0b21hdGlvblwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGVmZmljaWVuY3k6IDEwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkZvcm0gYSB0YXNrIGZvcmNlIPCfmqhcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcInRhc2tfZm9yY2VcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDUsIGVmZmljaWVuY3k6IDUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiQmxhbWUgaXQgb24gYnVyZWF1Y3JhY3kg8J+Xgu+4j1wiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiYnVyZWF1Y3JhY3lfYmxhbWVcIixcbiAgICAgICAgICAgICAgICBmeDogeyBtZW1lczogNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFpX2F1dG9tYXRpb246IHtcbiAgICAgICAgICAgIHRleHQ6IFwiQUkgaW1wbGVtZW50YXRpb24gaW1wcm92ZXMgZWZmaWNpZW5jeSwgYnV0IGl0IGNyZWF0ZXMgcmVzaXN0YW5jZSBhbW9uZyBlbXBsb3llZXMuIFdoYXQncyB5b3VyIG5leHQgc3RlcD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiRHJhZnQgZXRoaWNhbCBBSSBndWlkZWxpbmVzIPCfk5xcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcImV0aGljYWxfYWlcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDEwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkV4cGFuZCBBSSBpbnRvIG90aGVyIGRlcGFydG1lbnRzIPCfmoBcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcImV4cGFuZF9haVwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGVmZmljaWVuY3k6IDIwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkNyZWF0ZSBhIHB1YmxpYyBBSSBhd2FyZW5lc3MgY2FtcGFpZ24g8J+To1wiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiYWlfYXdhcmVuZXNzXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5ub3ZhdGlvbjogMTAsIGluZmx1ZW5jZTogNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV0aGljYWxfYWk6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiWW91ciBldGhpY2FsIEFJIGd1aWRlbGluZXMgZ2FpbiBnbG9iYWwgcmVjb2duaXRpb24uIFdoYXQncyBuZXh0P1wiLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJDb2xsYWJvcmF0ZSB3aXRoIGludGVybmF0aW9uYWwgQUkgcmVndWxhdG9ycyDwn4yNXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJnbG9iYWxfYWlcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDE1LCBpbm5vdmF0aW9uOiAxMCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJMYXVuY2ggYW4gQUkgaW5ub3ZhdGlvbiBodWIg8J+PolwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiYWlfaHViXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5ub3ZhdGlvbjogMTUsIGVmZmljaWVuY3k6IDEwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2xvYmFsX2FpOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIllvdXIgY29sbGFib3JhdGlvbiBzaGFwZXMgaW50ZXJuYXRpb25hbCBBSSBzdGFuZGFyZHMsIHNlY3VyaW5nIGxvbmctdGVybSBnbG9iYWwgZWZmaWNpZW5jeS5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIkFJIERpcGxvbWF0OiBZb3UgcmVkZWZpbmVkIHRoZSBmdXR1cmUgb2YgZXRoaWNhbCBBSSBnbG9iYWxseS5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFpX2h1Yjoge1xuICAgICAgICAgICAgdGV4dDogXCJUaGUgaW5ub3ZhdGlvbiBodWIgYmVjb21lcyBhIGdsb2JhbCBsZWFkZXIgaW4gY3V0dGluZy1lZGdlIEFJIGRldmVsb3BtZW50LlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiVGVjaCBWaXNpb25hcnk6IFlvdXIgbGVhZGVyc2hpcCBpbnNwaXJlZCBnbG9iYWwgQUkgYWR2YW5jZW1lbnRzLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhwYW5kX2FpOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIkV4cGFuZGluZyBBSSBib29zdHMgZWZmaWNpZW5jeSBidXQgc3BhcmtzIGRlYmF0ZXMgYWJvdXQgYXV0b21hdGlvbidzIGltcGFjdCBvbiBqb2JzLiBXaGF0J3MgbmV4dD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiSW50cm9kdWNlIHJlLXNraWxsaW5nIHByb2dyYW1zIGZvciB3b3JrZXJzIPCfkanigI3wn4+rXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJyZXNraWxsX3dvcmtlcnNcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDEwLCBlZmZpY2llbmN5OiA1IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkZvY3VzIG9uIEFJLWh1bWFuIGNvbGxhYm9yYXRpb24g8J+knVwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiYWlfY29sbGFib3JhdGlvblwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDEwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVza2lsbF93b3JrZXJzOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlJlLXNraWxsaW5nIHByb2dyYW1zIHN1Y2Nlc3NmdWxseSBpbnRlZ3JhdGUgZW1wbG95ZWVzIGludG8gbmV3IHJvbGVzLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiV29ya2ZvcmNlIEFkdm9jYXRlOiBZb3UgZW5zdXJlZCBwcm9ncmVzcyB3aXRob3V0IGxlYXZpbmcgYW55b25lIGJlaGluZC5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFpX2NvbGxhYm9yYXRpb246IHtcbiAgICAgICAgICAgIHRleHQ6IFwiQUktaHVtYW4gY29sbGFib3JhdGlvbiBtb2RlbHMgYmVjb21lIGEgYmVuY2htYXJrIGZvciBpbm5vdmF0aXZlIGdvdmVybmFuY2UuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJDb2xsYWJvcmF0aW9uIEFyY2hpdGVjdDogWW91IGhhcm1vbml6ZWQgdGVjaG5vbG9neSBhbmQgaHVtYW5pdHkuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhaV9hd2FyZW5lc3M6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiWW91ciBwdWJsaWMgYXdhcmVuZXNzIGNhbXBhaWduIGdhaW5zIHdpZGVzcHJlYWQgc3VwcG9ydC4gV2hhdCBkbyB5b3UgZm9jdXMgb24gbmV4dD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiSGlnaGxpZ2h0IEFJJ3Mgcm9sZSBpbiBlbnZpcm9ubWVudGFsIGNvbnNlcnZhdGlvbiDwn4yxXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJhaV9lbnZpcm9ubWVudFwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDEwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlNob3djYXNlIEFJJ3MgcG90ZW50aWFsIGluIGhlYWx0aGNhcmUg8J+PpVwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiYWlfaGVhbHRoY2FyZVwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDE1IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWlfZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiQUktcG93ZXJlZCBlbnZpcm9ubWVudGFsIHNvbHV0aW9ucyB0cmFuc2Zvcm0gcmVzb3VyY2UgbWFuYWdlbWVudCBnbG9iYWxseS5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIkVjby1UZWNoIExlYWRlcjogWW91IHBpb25lZXJlZCBBSS1kcml2ZW4gc3VzdGFpbmFiaWxpdHkuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhaV9oZWFsdGhjYXJlOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIkFJIHJldm9sdXRpb25pemVzIGhlYWx0aGNhcmUsIHNhdmluZyBjb3VudGxlc3MgbGl2ZXMuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJIZWFsdGggSW5ub3ZhdG9yOiBZb3UgdHJhbnNmb3JtZWQgcHVibGljIGhlYWx0aCB3aXRoIEFJLlwiLFxuICAgICAgICAgIH0sXG4vLyBUYXNrIEZvcmNlIFBhdGhcbiAgICAgICAgICB0YXNrX2ZvcmNlOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRoZSB0YXNrIGZvcmNlIHVuY292ZXJzIHdpZGVzcHJlYWQgaW5lZmZpY2llbmNpZXMuIFdoYXQncyB5b3VyIG5leHQgc3RlcD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiU3RyZWFtbGluZSByZXNvdXJjZSBhbGxvY2F0aW9uIPCfk4pcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcInN0cmVhbWxpbmVfcmVzb3VyY2VzXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgZWZmaWNpZW5jeTogMTUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiQ29sbGFib3JhdGUgd2l0aCBvdGhlciBnb3Zlcm5tZW50IGFnZW5jaWVzIPCfpJ1cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcImNvbGxhYm9yYXRlX2FnZW5jaWVzXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxMCwgZWZmaWNpZW5jeTogNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJTZWVrIHB1YmxpYyBpbnB1dCBvbiBpbmVmZmljaWVuY2llcyDwn5OjXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJwdWJsaWNfaW5wdXRcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDE1IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RyZWFtbGluZV9yZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiU3RyZWFtbGluaW5nIHJlc291cmNlIGFsbG9jYXRpb24gaW1wcm92ZXMgZWZmaWNpZW5jeSBhY3Jvc3MgZGVwYXJ0bWVudHMuIFdoYXQgZG8geW91IGZvY3VzIG9uIG5leHQ/XCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkludGVncmF0ZSBkYXRhLWRyaXZlbiBkZWNpc2lvbi1tYWtpbmcg8J+TilwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiZGF0YV9kcml2ZW5cIixcbiAgICAgICAgICAgICAgICBmeDogeyBlZmZpY2llbmN5OiAyMCwgaW5ub3ZhdGlvbjogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiRXN0YWJsaXNoIGludGVyLWRlcGFydG1lbnRhbCB0YXNrIGZvcmNlcyDwn5qnXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJpbnRlcl9kZXBhcnRtZW50XCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRhdGFfZHJpdmVuOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIkRhdGEtZHJpdmVuIGRlY2lzaW9uLW1ha2luZyB0cmFuc2Zvcm1zIGdvdmVybm1lbnQgb3BlcmF0aW9ucy5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIkRhdGEgU3RyYXRlZ2lzdDogWW91IGJyb3VnaHQgcHJlY2lzaW9uIHRvIHB1YmxpYyBhZG1pbmlzdHJhdGlvbi5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGludGVyX2RlcGFydG1lbnQ6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiQ29sbGFib3JhdGlvbiBiZXR3ZWVuIGRlcGFydG1lbnRzIGJyZWFrcyBzaWxvcyBhbmQgZW5oYW5jZXMgcHJvZHVjdGl2aXR5LlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiVW5pdHkgUGlvbmVlcjogWW91IHVuaXRlZCBkZXBhcnRtZW50cyBmb3Igc2VhbWxlc3MgZ292ZXJuYW5jZS5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhYm9yYXRlX2FnZW5jaWVzOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIkludGVyLWFnZW5jeSBjb2xsYWJvcmF0aW9uIGNyZWF0ZXMgbmV3IG9wcG9ydHVuaXRpZXMuIFdoYXQgZG8geW91IHByaW9yaXRpemU/XCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkJ1aWxkIGEgdW5pZmllZCBnb3Zlcm5tZW50IHBvcnRhbCDwn4yQXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJnb3Zlcm5tZW50X3BvcnRhbFwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDE1IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlN0YW5kYXJkaXplIHByb2Nlc3NlcyBhY3Jvc3MgYWdlbmNpZXMg8J+Ti1wiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwicHJvY2Vzc19zdGFuZGFyZGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICBmeDogeyBlZmZpY2llbmN5OiAxNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdvdmVybm1lbnRfcG9ydGFsOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRoZSB1bmlmaWVkIHBvcnRhbCBwcm92aWRlcyBjaXRpemVucyBlYXN5IGFjY2VzcyB0byBnb3Zlcm5tZW50IHNlcnZpY2VzLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiRGlnaXRhbCBQaW9uZWVyOiBZb3UgbWFkZSBnb3Zlcm5hbmNlIGFjY2Vzc2libGUgZm9yIGFsbC5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb2Nlc3Nfc3RhbmRhcmRpemF0aW9uOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlN0YW5kYXJkaXplZCBwcm9jZXNzZXMgc3RyZWFtbGluZSBvcGVyYXRpb25zIG5hdGlvbndpZGUuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJQcm9jZXNzIENoYW1waW9uOiBZb3VyIHJlZm9ybXMgc2V0IGEgZ29sZCBzdGFuZGFyZC5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHB1YmxpY19pbnB1dDoge1xuICAgICAgICAgICAgdGV4dDogXCJQdWJsaWMgaW5wdXQgcmV2ZWFscyBoaWRkZW4gaW5lZmZpY2llbmNpZXMgYW5kIGluc3BpcmVzIGlubm92YXRpdmUgc29sdXRpb25zLiBXaGF0J3MgbmV4dD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiQ3Jvd2Rzb3VyY2Ugc29sdXRpb25zIGZvciBjcml0aWNhbCBpc3N1ZXMg8J+SoVwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiY3Jvd2Rzb3VyY2Vfc29sdXRpb25zXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxMCwgaW5ub3ZhdGlvbjogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiSG9sZCBwdWJsaWMgZm9ydW1zIGZvciByZWFsLXRpbWUgZmVlZGJhY2sg8J+To1wiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwicmVhbF90aW1lX2ZlZWRiYWNrXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNyb3dkc291cmNlX3NvbHV0aW9uczoge1xuICAgICAgICAgICAgdGV4dDogXCJDcm93ZHNvdXJjZWQgc29sdXRpb25zIGJyaW5nIGZyZXNoIGlkZWFzIHRvIGdvdmVybmFuY2UuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJDcm93ZHNvdXJjaW5nIFBpb25lZXI6IFlvdSBlbXBvd2VyZWQgY2l0aXplbnMgdG8gc29sdmUgcHJvYmxlbXMuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWFsX3RpbWVfZmVlZGJhY2s6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiUmVhbC10aW1lIGZlZWRiYWNrIGRyaXZlcyBjb250aW51b3VzIGltcHJvdmVtZW50IGluIGdvdmVybm1lbnQgc2VydmljZXMuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJGZWVkYmFjayBMZWFkZXI6IFlvdSBmb3N0ZXJlZCB0cmFuc3BhcmVuY3kgYW5kIGFkYXB0YWJpbGl0eS5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIEJ1cmVhdWNyYWN5IEJsYW1lIFBhdGhcbiAgICAgICAgICBidXJlYXVjcmFjeV9ibGFtZToge1xuICAgICAgICAgICAgdGV4dDogXCJZb3VyIGh1bW9yb3VzIGJsYW1lIGNhbXBhaWduIGdhaW5zIHB1YmxpYyBhdHRlbnRpb24sIG1ha2luZyBnb3Zlcm5hbmNlIGlzc3VlcyByZWxhdGFibGUuIFdoYXQncyBuZXh0P1wiLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJDcmVhdGUgYSBzYXRpcmljYWwgYnVyZWF1Y3JhY3kgdGFzayBmb3JjZSDwn46tXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJzYXRpcmljYWxfdGFza19mb3JjZVwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IG1lbWVzOiAxNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJFbmdhZ2UgbWVtZSBjcmVhdG9ycyB0byBhbXBsaWZ5IHRoZSBtZXNzYWdlIPCfkLhcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcIm1lbWVfY3JlYXRvcnNcIixcbiAgICAgICAgICAgICAgICBmeDogeyBtZW1lczogMTAsIGluZmx1ZW5jZTogNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJUdXJuIHRoZSBjYW1wYWlnbiBpbnRvIGEgcHVibGljIGRvY3VtZW50YXJ5IPCfjqVcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcInB1YmxpY19kb2N1bWVudGFyeVwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogMTUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzYXRpcmljYWxfdGFza19mb3JjZToge1xuICAgICAgICAgICAgdGV4dDogXCJUaGUgc2F0aXJpY2FsIHRhc2sgZm9yY2UgaGlnaGxpZ2h0cyBhYnN1cmQgaW5lZmZpY2llbmNpZXMgYW5kIGluc3BpcmVzIGFjdGlvbi5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIkh1bW9yIEFjdGl2aXN0OiBZb3UgdHVybmVkIGxhdWdodGVyIGludG8gYSBjYXRhbHlzdCBmb3IgY2hhbmdlLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtZV9jcmVhdG9yczoge1xuICAgICAgICAgICAgdGV4dDogXCJNZW1lIGNyZWF0b3JzIHR1cm4gdGhlIGNhbXBhaWduIGludG8gYSB2aXJhbCBzZW5zYXRpb24sIGRyaXZpbmcgcmVmb3JtLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiTWVtZSBNb2JpbGl6ZXI6IFlvdSByZWRlZmluZWQgYWN0aXZpc20gd2l0aCBjcmVhdGl2aXR5LlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHVibGljX2RvY3VtZW50YXJ5OiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRoZSBkb2N1bWVudGFyeSBlZHVjYXRlcyBjaXRpemVucyBhbmQgaWduaXRlcyBhIHdhdmUgb2YgZ3Jhc3Nyb290cyByZWZvcm0gbW92ZW1lbnRzLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiR3Jhc3Nyb290cyBIZXJvOiBZb3UgZW1wb3dlcmVkIGNpdGl6ZW5zIHRvIGRyaXZlIGNoYW5nZS5cIixcbiAgICAgICAgICB9LFxuLy8gUHVibGljIEZvcnVtIFBhdGhcbiAgICAgICAgICBwdWJsaWNfZm9ydW06IHtcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlIHB1YmxpYyBlYWdlcmx5IHNoYXJlcyBpZGVhcyB0byBpbXByb3ZlIGdvdmVybmFuY2UuIFdoYXQncyBuZXh0P1wiLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJGb3JtIGNpdGl6ZW4gYWR2aXNvcnkgYm9hcmRzIPCfkaVcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcImFkdmlzb3J5X2JvYXJkc1wiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiTGF1bmNoIHRyYW5zcGFyZW5jeSBkYXNoYm9hcmRzIPCfk4pcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcInRyYW5zcGFyZW5jeV9kYXNoYm9hcmRzXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5ub3ZhdGlvbjogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiQ3JlYXRlIG1lbWUtYmFzZWQgcmVmb3JtcyDwn5C4XCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJtZW1lX3JlZm9ybXNcIixcbiAgICAgICAgICAgICAgICBmeDogeyBtZW1lczogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhZHZpc29yeV9ib2FyZHM6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiQ2l0aXplbiBhZHZpc29yeSBib2FyZHMgYXJlIGZvcm1lZCwgcHJvdmlkaW5nIG5ldyBpZGVhcyBhbmQgcGVyc3BlY3RpdmVzLiBXaGF0IGRvIHlvdSBkbyBuZXh0P1wiLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJBZG9wdCBjaXRpemVuLWRyaXZlbiBwb2xpY2llcyDwn5OcXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJjaXRpemVuX3BvbGljaWVzXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgZWZmaWNpZW5jeTogMTUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiRXhwYW5kIGFkdmlzb3J5IGJvYXJkcyBuYXRpb253aWRlIPCfjI1cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcIm5hdGlvbmFsX2JvYXJkc1wiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogMTUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiSG9zdCBhIHllYXJseSBhZHZpc29yeSBzdW1taXQg8J+Pm++4j1wiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiYWR2aXNvcnlfc3VtbWl0XCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5ub3ZhdGlvbjogMTAsIGluZmx1ZW5jZTogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaXRpemVuX3BvbGljaWVzOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIkNpdGl6ZW4tZHJpdmVuIHBvbGljaWVzIHRyYW5zZm9ybSBwdWJsaWMgdHJ1c3QgYW5kIGdvdmVybm1lbnQgZWZmaWNpZW5jeS4gV2hhdCdzIG5leHQ/XCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkNyZWF0ZSBsb2NhbC1sZXZlbCBhZHZpc29yeSBib2FyZHMg8J+PoVwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwibG9jYWxfYm9hcmRzXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxMCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJJbnRlZ3JhdGUgcG9saWNpZXMgd2l0aCB0ZWNobm9sb2d5IGFwcHMg8J+TsVwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwicG9saWN5X2FwcHNcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbm5vdmF0aW9uOiAxNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxvY2FsX2JvYXJkczoge1xuICAgICAgICAgICAgdGV4dDogXCJMb2NhbCBhZHZpc29yeSBib2FyZHMgZm9zdGVyIGEgc2Vuc2Ugb2YgY29tbXVuaXR5IGFuZCBlbmdhZ2VtZW50IGluIGdvdmVybmFuY2UuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJDb21tdW5pdHkgQnVpbGRlcjogWW91IGJyb3VnaHQgZ292ZXJuYW5jZSBjbG9zZXIgdG8gdGhlIHBlb3BsZS5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBvbGljeV9hcHBzOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRlY2hub2xvZ3kgYXBwcyBtYWtlIGNpdGl6ZW4gcG9saWNpZXMgYWNjZXNzaWJsZSBhbmQgYWN0aW9uYWJsZS5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIlBvbGljeSBJbm5vdmF0b3I6IFlvdSBjb21iaW5lZCB0ZWNobm9sb2d5IGFuZCBnb3Zlcm5hbmNlIHNlYW1sZXNzbHkuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYXRpb25hbF9ib2FyZHM6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiTmF0aW9ud2lkZSBib2FyZHMgaW5zcGlyZSBwdWJsaWMgcGFydGljaXBhdGlvbiBvbiBhbiB1bnByZWNlZGVudGVkIHNjYWxlLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiVmlzaW9uYXJ5IExlYWRlcjogWW91ciBvdXRyZWFjaCB1bml0ZWQgY2l0aXplbnMgYWNyb3NzIHRoZSBjb3VudHJ5LlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWR2aXNvcnlfc3VtbWl0OiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRoZSBhbm51YWwgc3VtbWl0IGJlY29tZXMgYSBodWIgZm9yIGlubm92YXRpb24gYW5kIGNvbGxhYm9yYXRpb24uIFdoYXQncyBuZXh0P1wiLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJQYXJ0bmVyIHdpdGggaW50ZXJuYXRpb25hbCBhZHZpc29yeSBncm91cHMg8J+knVwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiZ2xvYmFsX3BhcnRuZXJzaGlwXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxNSwgaW5ub3ZhdGlvbjogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiVXNlIHN1bW1pdCBpZGVhcyB0byBjcmFmdCBuZXcgbGVnaXNsYXRpb24g8J+TnFwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwic3VtbWl0X2xlZ2lzbGF0aW9uXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgZWZmaWNpZW5jeTogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnbG9iYWxfcGFydG5lcnNoaXA6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiUGFydG5lcnNoaXBzIHdpdGggZ2xvYmFsIGFkdmlzb3J5IGdyb3VwcyBzcGFyayBpbnRlcm5hdGlvbmFsIHJlZm9ybXMuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJHbG9iYWwgUmVmb3JtZXI6IFlvdSBpbnNwaXJlZCBjb2xsYWJvcmF0aW9uIGJleW9uZCBib3JkZXJzLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3VtbWl0X2xlZ2lzbGF0aW9uOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIk5ldyBsZWdpc2xhdGlvbiBiYXNlZCBvbiBzdW1taXQgaWRlYXMgcmV2b2x1dGlvbml6ZXMgZ292ZXJuYW5jZS5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIkxhd21ha2VyIFZpc2lvbmFyeTogWW91IHR1cm5lZCBpZGVhcyBpbnRvIGltcGFjdGZ1bCBsYXdzLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gVHJhbnNwYXJlbmN5IERhc2hib2FyZHMgUGF0aFxuICAgICAgICAgIHRyYW5zcGFyZW5jeV9kYXNoYm9hcmRzOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRyYW5zcGFyZW5jeSBkYXNoYm9hcmRzIHByb3ZpZGUgcmVhbC10aW1lIGFjY2VzcyB0byBnb3Zlcm5tZW50IGRhdGEuIFdoYXQncyBuZXh0P1wiLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJJbnRlZ3JhdGUgZGFzaGJvYXJkcyB3aXRoIHB1YmxpYyBhcHBzIPCfk7FcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcImRhc2hib2FyZF9hcHBzXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5ub3ZhdGlvbjogMTUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiUHJvbW90ZSBkYXNoYm9hcmRzIGdsb2JhbGx5IPCfjI1cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcImdsb2JhbF9kYXNoYm9hcmRzXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJVc2UgZGFzaGJvYXJkcyB0byBjcm93ZHNvdXJjZSBwcm9ibGVtLXNvbHZpbmcg8J+SoVwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiY3Jvd2Rzb3VyY2VfZGFzaGJvYXJkc1wiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDEwLCBpbmZsdWVuY2U6IDEwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGFzaGJvYXJkX2FwcHM6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiQXBwcyBtYWtlIGRhc2hib2FyZHMgYWNjZXNzaWJsZSB0byBjaXRpemVucywgZW1wb3dlcmluZyB0aGVtIHRvIGhvbGQgdGhlIGdvdmVybm1lbnQgYWNjb3VudGFibGUuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkRldmVsb3AgQUkgZmVhdHVyZXMgZm9yIHRoZSBkYXNoYm9hcmRzIPCfpJZcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcImFpX2Rhc2hib2FyZHNcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbm5vdmF0aW9uOiAxNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJGb2N1cyBvbiBydXJhbCBhcmVhcyBmb3IgYXBwIGFkb3B0aW9uIPCfjL5cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcInJ1cmFsX2FwcHNcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDEwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWlfZGFzaGJvYXJkczoge1xuICAgICAgICAgICAgdGV4dDogXCJBSS1lbmhhbmNlZCBkYXNoYm9hcmRzIHByZWRpY3QgaW5lZmZpY2llbmNpZXMgYW5kIHByb3ZpZGUgYWN0aW9uYWJsZSBpbnNpZ2h0cy5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIlRlY2ggUGlvbmVlcjogWW91IGJyb3VnaHQgcHJlZGljdGl2ZSBhbmFseXRpY3MgdG8gZ292ZXJuYW5jZS5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJ1cmFsX2FwcHM6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiUnVyYWwgY29tbXVuaXRpZXMgYWRvcHQgYXBwcywgZm9zdGVyaW5nIGluY2x1c2l2ZSBnb3Zlcm5hbmNlLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiUnVyYWwgSW5ub3ZhdG9yOiBZb3UgbWFkZSBnb3Zlcm5hbmNlIGFjY2Vzc2libGUgdG8gYWxsLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2xvYmFsX2Rhc2hib2FyZHM6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiVHJhbnNwYXJlbmN5IGRhc2hib2FyZHMgaW5zcGlyZSBnbG9iYWwgcmVmb3JtcyBpbiBhY2NvdW50YWJpbGl0eS5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIkdsb2JhbCBBZHZvY2F0ZTogWW91ciBlZmZvcnRzIHJlZGVmaW5lZCB0cmFuc3BhcmVuY3kgd29ybGR3aWRlLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY3Jvd2Rzb3VyY2VfZGFzaGJvYXJkczoge1xuICAgICAgICAgICAgdGV4dDogXCJDcm93ZHNvdXJjaW5nIHRocm91Z2ggZGFzaGJvYXJkcyBhY2NlbGVyYXRlcyBwcm9ibGVtLXNvbHZpbmcuIFdoYXQncyBuZXh0P1wiLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJFeHBhbmQgY3Jvd2Rzb3VyY2luZyB0byBnbG9iYWwgaXNzdWVzIPCfjI1cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcImdsb2JhbF9jcm93ZHNvdXJjaW5nXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5ub3ZhdGlvbjogMTUsIGluZmx1ZW5jZTogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiVXNlIGNyb3dkc291cmNpbmcgdG8gaW5ub3ZhdGUgcHVibGljIHNlcnZpY2VzIPCfmoBcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcInB1YmxpY19pbm5vdmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5ub3ZhdGlvbjogMTUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnbG9iYWxfY3Jvd2Rzb3VyY2luZzoge1xuICAgICAgICAgICAgdGV4dDogXCJHbG9iYWwgY3Jvd2Rzb3VyY2luZyBhZGRyZXNzZXMgY3JpdGljYWwgaXNzdWVzIGxpa2UgY2xpbWF0ZSBjaGFuZ2UgYW5kIHBvdmVydHkuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJHbG9iYWwgUHJvYmxlbSBTb2x2ZXI6IFlvdSB0dXJuZWQgZ292ZXJuYW5jZSBpbnRvIGEgY29sbGFib3JhdGl2ZSBmb3JjZS5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHB1YmxpY19pbm5vdmF0aW9uOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIklubm92YXRpb25zIGluIHB1YmxpYyBzZXJ2aWNlcyB0cmFuc2Zvcm0gZ292ZXJubWVudCBlZmZpY2llbmN5IGFuZCBjaXRpemVuIHNhdGlzZmFjdGlvbi5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIlNlcnZpY2UgSW5ub3ZhdG9yOiBZb3UgcmV2b2x1dGlvbml6ZWQgcHVibGljIHNlcnZpY2VzIHRocm91Z2ggY29sbGFib3JhdGlvbi5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIE1lbWUtQmFzZWQgUmVmb3JtcyBQYXRoXG4gICAgICAgICAgbWVtZV9yZWZvcm1zOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIllvdXIgbWVtZS1iYXNlZCByZWZvcm1zIGdhaW4gbWFzc2l2ZSB0cmFjdGlvbiBhbmQgcHVibGljIGFwcHJvdmFsLiBXaGF0J3MgbmV4dD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiTGF1bmNoIGEgcHVibGljIG1lbWUgY29tcGV0aXRpb24g8J+OiVwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwicHVibGljX21lbWVfY29tcGV0aXRpb25cIixcbiAgICAgICAgICAgICAgICBmeDogeyBtZW1lczogMTUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiRGV2ZWxvcCBtZW1lLWJhc2VkIGVkdWNhdGlvbmFsIGNhbXBhaWducyDwn5OaXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJlZHVjYXRpb25hbF9tZW1lc1wiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDEwLCBtZW1lczogNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJDcmVhdGUgYSBnb3Zlcm5tZW50IG1lbWUgZGVwYXJ0bWVudCDwn4+iXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJtZW1lX2RlcGFydG1lbnRcIixcbiAgICAgICAgICAgICAgICBmeDogeyBtZW1lczogMTUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwdWJsaWNfbWVtZV9jb21wZXRpdGlvbjoge1xuICAgICAgICAgICAgdGV4dDogXCJUaGUgbWVtZSBjb21wZXRpdGlvbiBpbnNwaXJlcyBjcmVhdGl2aXR5IGFuZCBjaXZpYyBhd2FyZW5lc3MuIFdoYXQgZG8geW91IGRvIG5leHQ/XCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlB1Ymxpc2ggd2lubmluZyBtZW1lcyBpbiBhIG5hdGlvbmFsIGFudGhvbG9neSDwn5OWXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJtZW1lX2FudGhvbG9neVwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IG1lbWVzOiAxMCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJVc2Ugd2lubmluZyBtZW1lcyBpbiBwdWJsaWMgc2VydmljZSBjYW1wYWlnbnMg8J+To1wiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwic2VydmljZV9jYW1wYWlnbnNcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDEwLCBtZW1lczogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1lX2FudGhvbG9neToge1xuICAgICAgICAgICAgdGV4dDogXCJUaGUgYW50aG9sb2d5IGJlY29tZXMgYSBiZXN0c2VsbGVyLCBoaWdobGlnaHRpbmcgdGhlIHBvd2VyIG9mIGh1bW9yLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiQ3VsdHVyYWwgSWNvbjogWW91ciBhbnRob2xvZ3kgYnJvdWdodCBodW1vciB0byB0aGUgbWFzc2VzLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VydmljZV9jYW1wYWlnbnM6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiUHVibGljIHNlcnZpY2UgY2FtcGFpZ25zIHBvd2VyZWQgYnkgbWVtZXMgZHJpdmUgZW5nYWdlbWVudCBhbmQgYXdhcmVuZXNzLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiQ2FtcGFpZ24gTWFzdGVybWluZDogWW91IHVzZWQgbWVtZXMgdG8gdHJhbnNmb3JtIGNpdmljIGVuZ2FnZW1lbnQuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlZHVjYXRpb25hbF9tZW1lczoge1xuICAgICAgICAgICAgdGV4dDogXCJFZHVjYXRpb25hbCBjYW1wYWlnbnMgdXNpbmcgbWVtZXMgaW1wcm92ZSBwdWJsaWMgdW5kZXJzdGFuZGluZyBvZiBjb21wbGV4IHBvbGljaWVzLiBXaGF0J3MgbmV4dD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiSW50cm9kdWNlIG1lbWUtYmFzZWQgY2l2aWMgY291cnNlcyDwn5OWXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJjaXZpY19jb3Vyc2VzXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5ub3ZhdGlvbjogMTAsIGluZmx1ZW5jZTogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiRGV2ZWxvcCBhIG1lbWUtcG93ZXJlZCB2b3RpbmcgaW5pdGlhdGl2ZSDwn5ez77iPXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJtZW1lX3ZvdGluZ1wiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogMTUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaXZpY19jb3Vyc2VzOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIkNpdmljIGNvdXJzZXMgbWFrZSBlZHVjYXRpb24gZW5nYWdpbmcgYW5kIGFjY2Vzc2libGUgdG8gYWxsLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiQ2l2aWMgTWVtZSBJbm5vdmF0b3I6IFlvdSBicm91Z2h0IGh1bW9yIHRvIGNpdmljIGVkdWNhdGlvbi5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbWVfdm90aW5nOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIk1lbWUtcG93ZXJlZCB2b3RpbmcgZHJpdmVzIHJlY29yZCB0dXJub3V0IGFuZCBzdHJlbmd0aGVucyBkZW1vY3JhY3kuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJEZW1vY3JhY3kgRGVmZW5kZXI6IFlvdSByZXZvbHV0aW9uaXplZCBlbGVjdGlvbnMgd2l0aCBjcmVhdGl2aXR5LlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtZV9kZXBhcnRtZW50OiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRoZSBtZW1lIGRlcGFydG1lbnQgYmVjb21lcyBhIGN1bHR1cmFsIGh1YiBmb3IgaHVtb3ItZHJpdmVuIHJlZm9ybXMuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJNZW1lIE1pbmlzdGVyOiBZb3UgaW5zdGl0dXRpb25hbGl6ZWQgdGhlIHBvd2VyIG9mIG1lbWVzIGluIGdvdmVybmFuY2UuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBNZW1lIEFybXkgUGF0aFxuICAgICAgICAgIG1lbWVfYXJteToge1xuICAgICAgICAgICAgdGV4dDogXCJZb3VyIG1lbWUgY2FtcGFpZ24gZ2FpbnMgbWFzc2l2ZSB0cmFjdGlvbiwgY2FwdGl2YXRpbmcgYXVkaWVuY2VzIHdvcmxkd2lkZS4gV2hhdCdzIG5leHQ/XCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkNvbGxhYm9yYXRlIHdpdGggaW5mbHVlbmNlcnMg8J+Mn1wiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiaW5mbHVlbmNlcl9jb2xsYWJcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDEwLCBtZW1lczogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiQ3JlYXRlIGEgTWVtZSBEQU8g8J+TnFwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiY3JlYXRlX21lbWVfZGFvXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5ub3ZhdGlvbjogMTAsIG1lbWVzOiAxNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJIb3N0IGEgbWVtZSBjb21wZXRpdGlvbiDwn46JXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJtZW1lX2NvbXBldGl0aW9uXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiA1LCBtZW1lczogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmZsdWVuY2VyX2NvbGxhYjoge1xuICAgICAgICAgICAgdGV4dDogXCJJbmZsdWVuY2VycyBhbXBsaWZ5IHlvdXIgbWVzc2FnZSwgbWFraW5nIHlvdXIgbWVtZXMgYSBjdWx0dXJhbCBwaGVub21lbm9uLiBXaGF0J3MgbmV4dD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiVHVybiBtZW1lcyBpbnRvIG1lcmNoYW5kaXNlIPCfm43vuI9cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcIm1lbWVfbWVyY2hcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDEwLCBtZW1lczogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiVXNlIG1lbWVzIHRvIGVkdWNhdGUgY2l0aXplbnMg8J+TmlwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiZWR1Y2F0aW9uYWxfbWVtZXNcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbm5vdmF0aW9uOiAxMCwgbWVtZXM6IDUgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiQ3JlYXRlIG1lbWUtcG93ZXJlZCBjaGFyaXR5IGNhbXBhaWducyDwn5KdXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJtZW1lX2NoYXJpdHlcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDE1LCBtZW1lczogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1lX21lcmNoOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIk1lcmNoYW5kaXNlIHByb2ZpdHMgZnVuZCBwdWJsaWMgcHJvamVjdHMgYW5kIHNwcmVhZCB0aGUgbWVtZSBtb3ZlbWVudCBldmVuIGZ1cnRoZXIuIFdoYXQgZG8geW91IGRvIG5leHQ/XCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkludmVzdCBwcm9maXRzIGludG8gbWVtZS1iYXNlZCBzY2hvb2xzIPCfjpNcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcIm1lbWVfc2Nob29sc1wiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDE1IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlVzZSBwcm9maXRzIHRvIGZ1bmQgaW5mcmFzdHJ1Y3R1cmUgdXBncmFkZXMg8J+Pl++4j1wiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwibWVtZV9pbmZyYXN0cnVjdHVyZVwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGVmZmljaWVuY3k6IDE1IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtZV9zY2hvb2xzOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIk1lbWUtYmFzZWQgc2Nob29scyB0ZWFjaCBodW1vciBhbmQgY3JpdGljYWwgdGhpbmtpbmcgdG8gdGhlIG5leHQgZ2VuZXJhdGlvbi5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIk1lbWUgTWVudG9yOiBZb3Ugc2hhcGVkIGEgZnV0dXJlIHdoZXJlIGh1bW9yIGFuZCBrbm93bGVkZ2UgZ28gaGFuZCBpbiBoYW5kLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtZV9pbmZyYXN0cnVjdHVyZToge1xuICAgICAgICAgICAgdGV4dDogXCJJbmZyYXN0cnVjdHVyZSB1cGdyYWRlcyBmdW5kZWQgYnkgbWVtZXMgbGVhZCB0byBiZXR0ZXIgcm9hZHMsIGZhc3RlciBpbnRlcm5ldCwgYW5kIGhhcHBpZXIgY2l0aXplbnMuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJJbmZyYXN0cnVjdHVyZSBJY29uOiBZb3UgdHVybmVkIG1lbWVzIGludG8gYSBmb3JjZSBmb3IgcGh5c2ljYWwgcHJvZ3Jlc3MuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1lX2NoYXJpdHk6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiQ2hhcml0eSBjYW1wYWlnbnMgcG93ZXJlZCBieSBtZW1lcyByYWlzZSB1bnByZWNlZGVudGVkIGZ1bmRzLiBXaGF0J3MgeW91ciBuZXh0IHN0ZXA/XCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkJ1aWxkIGdsb2JhbCBjaGFyaXR5IG5ldHdvcmtzIPCfjI1cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcImdsb2JhbF9jaGFyaXR5XCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAyMCwgaW5ub3ZhdGlvbjogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiRGV2ZWxvcCB0ZWNoIHRvIGdhbWlmeSBjaGFyaXR5IGNhbXBhaWducyDwn46uXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJnYW1pZnlfY2hhcml0eVwiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDE1IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2xvYmFsX2NoYXJpdHk6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiWW91ciBjaGFyaXR5IG5ldHdvcmtzIGltcHJvdmUgbGl2ZXMgd29ybGR3aWRlLCBidWlsZGluZyBicmlkZ2VzIGFjcm9zcyBuYXRpb25zLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiR2xvYmFsIEh1bWFuaXRhcmlhbjogWW91IHR1cm5lZCBtZW1lcyBpbnRvIGEgdG9vbCBmb3IgZ2xvYmFsIGdvb2QuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnYW1pZnlfY2hhcml0eToge1xuICAgICAgICAgICAgdGV4dDogXCJHYW1pZmljYXRpb24gb2YgY2hhcml0eSBjYW1wYWlnbnMgbWFrZXMgZ2l2aW5nIGJhY2sgZnVuIGFuZCBlbmdhZ2luZy5cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgICAgZW5kaW5nOiBcIkNoYXJpdHkgR2FtZSBDaGFuZ2VyOiBZb3UgcmV2b2x1dGlvbml6ZWQgcGhpbGFudGhyb3B5IHdpdGggaW5ub3ZhdGlvbi5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIE1lbWUgREFPIFBhdGhcbiAgICAgICAgICBjcmVhdGVfbWVtZV9kYW86IHtcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlIE1lbWUgREFPIGdhaW5zIG1hc3NpdmUgc3VwcG9ydCwgZW5hYmxpbmcgY3Jvd2RmdW5kaW5nIGZvciByZWZvcm0gcHJvamVjdHMuIFdoYXQncyBuZXh0P1wiLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJFeHBhbmQgdGhlIERBTyBnbG9iYWxseSDwn4yNXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJnbG9iYWxfZGFvXCIsXG4gICAgICAgICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAyMCwgaW5ub3ZhdGlvbjogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiVXNlIERBTyBmdW5kcyBmb3IgdHJhbnNwYXJlbmN5IGRhc2hib2FyZHMg8J+TilwiLFxuICAgICAgICAgICAgICAgIG5leHQ6IFwiZGFzaGJvYXJkX2Z1bmRpbmdcIixcbiAgICAgICAgICAgICAgICBmeDogeyBlZmZpY2llbmN5OiAxNSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJQYXJ0bmVyIERBTyB3aXRoIHRlY2ggY29tcGFuaWVzIPCfpJ1cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcInRlY2hfcGFydG5lcnNoaXBcIixcbiAgICAgICAgICAgICAgICBmeDogeyBpbm5vdmF0aW9uOiAyMCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdsb2JhbF9kYW86IHtcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlIGdsb2JhbCBEQU8gaW5zcGlyZXMgaW50ZXJuYXRpb25hbCBjaXRpemVuLWxlZCByZWZvcm1zLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiQ2l0aXplbiBEaXBsb21hdDogWW91IGNyZWF0ZWQgYSBnbG9iYWwgbW92ZW1lbnQgZm9yIGNoYW5nZS5cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRhc2hib2FyZF9mdW5kaW5nOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIkRBTyBmdW5kcyBpbXByb3ZlIHRyYW5zcGFyZW5jeSBhbmQgcHVibGljIGFjY291bnRhYmlsaXR5LlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiVHJhbnNwYXJlbmN5IFRpdGFuOiBZb3VyIERBTyB0cmFuc2Zvcm1lZCBwdWJsaWMgdHJ1c3QuXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0ZWNoX3BhcnRuZXJzaGlwOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlBhcnRuZXJzaGlwcyB3aXRoIHRlY2ggY29tcGFuaWVzIHJldm9sdXRpb25pemUgREFPIGVmZmljaWVuY3kuXCIsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXSxcbiAgICAgICAgICAgIGVuZGluZzogXCJUZWNoIFJlZm9ybWVyOiBZb3UgcGlvbmVlcmVkIGNpdGl6ZW4tdGVjaCBjb2xsYWJvcmF0aW9uLlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gSG9zdCBhIE1lbWUgQ29tcGV0aXRpb25cbiAgICAgICAgICBtZW1lX2NvbXBldGl0aW9uOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRoZSBjb21wZXRpdGlvbiBlbmdhZ2VzIHRoZSBwdWJsaWMgYW5kIHNwYXJrcyBjcmVhdGl2aXR5LiBXaGF0J3MgbmV4dD9cIixcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiUHVibGlzaCB3aW5uaW5nIG1lbWVzIGluIGEgbmF0aW9uYWwgYW50aG9sb2d5IPCfk5ZcIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcIm1lbWVfYW50aG9sb2d5XCIsXG4gICAgICAgICAgICAgICAgZng6IHsgbWVtZXM6IDEwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlVzZSB3aW5uaW5nIG1lbWVzIGluIHB1YmxpYyBzZXJ2aWNlIGNhbXBhaWducyDwn5OjXCIsXG4gICAgICAgICAgICAgICAgbmV4dDogXCJzZXJ2aWNlX2NhbXBhaWduc1wiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogMTAsIG1lbWVzOiAxMCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJUdXJuIHdpbm5pbmcgbWVtZXMgaW50byBORlRzIPCflrzvuI9cIixcbiAgICAgICAgICAgICAgICBuZXh0OiBcIm5mdF9tZW1lc1wiLFxuICAgICAgICAgICAgICAgIGZ4OiB7IGlubm92YXRpb246IDEwLCBtZW1lczogMTAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZnRfbWVtZXM6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlIE5GVCBjb2xsZWN0aW9uIGdlbmVyYXRlcyBzaWduaWZpY2FudCByZXZlbnVlIGZvciBnb3Zlcm5tZW50IHByb2plY3RzLlwiLFxuICAgICAgICAgICAgY2hvaWNlczogW10sXG4gICAgICAgICAgICBlbmRpbmc6IFwiRGlnaXRhbCBJbm5vdmF0b3I6IFlvdSBibGVuZGVkIGFydCwgdGVjaG5vbG9neSwgYW5kIHJlZm9ybS5cIixcbiAgICAgICAgICB9LFxuLy8gUGF0aDogRXhwbG9yZSBTZWNyZXQgQXJjaGl2ZXNcbiAgICBzZWNyZXRfYXJjaGl2ZXM6IHtcbiAgICAgIHRleHQ6IFwiWW91IHVuY292ZXIgY2xhc3NpZmllZCBkb2N1bWVudHMgcmV2ZWFsaW5nIGluZWZmaWNpZW5jaWVzIGFuZCBoaWRkZW4gYWdlbmRhcy4gV2hhdOKAmXMgeW91ciBuZXh0IG1vdmU/XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIkV4cG9zZSB0aGUgdHJ1dGgg8J+Vte+4j+KAjeKZgu+4j1wiLFxuICAgICAgICAgIG5leHQ6IFwiZXhwb3NlX3RydXRoXCIsXG4gICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxNSwgbWVtZXM6IDEwIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIlVzZSBzZWNyZXRzIGZvciBsZXZlcmFnZSDwn5K8XCIsXG4gICAgICAgICAgbmV4dDogXCJsZXZlcmFnZV9zZWNyZXRzXCIsXG4gICAgICAgICAgZng6IHsgZWZmaWNpZW5jeTogMTAsIGluZmx1ZW5jZTogMTAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IFwiRGVzdHJveSB0aGUgYXJjaGl2ZXMg8J+UpVwiLFxuICAgICAgICAgIG5leHQ6IFwiZGVzdHJveV9hcmNoaXZlc1wiLFxuICAgICAgICAgIGZ4OiB7IG1lbWVzOiA1IH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG5cbiAgICAvLyBPcHRpb24gMTogRXhwb3NlIHRoZSBUcnV0aFxuICAgIGV4cG9zZV90cnV0aDoge1xuICAgICAgdGV4dDogXCJUaGUgdHJ1dGggc2hvY2tzIHRoZSBuYXRpb24sIHNwYXJraW5nIHByb3Rlc3RzIGFuZCBkZW1hbmRzIGZvciBjaGFuZ2UuIFdoYXTigJlzIHlvdXIgbmV4dCBtb3ZlP1wiLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogXCJSYWxseSBjaXRpemVucyBmb3IgcmVmb3JtcyDwn5ej77iPXCIsXG4gICAgICAgICAgbmV4dDogXCJjaXRpemVuX3JhbGx5XCIsXG4gICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxNSB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogXCJXb3JrIHdpdGggaW52ZXN0aWdhdGl2ZSBqb3VybmFsaXN0cyDwn5OwXCIsXG4gICAgICAgICAgbmV4dDogXCJqb3VybmFsaXN0X2NvbGxhYlwiLFxuICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogMTAsIGlubm92YXRpb246IDUgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IFwiUHVzaCBmb3IgZW1lcmdlbmN5IGdvdmVybm1lbnQgaGVhcmluZ3Mg8J+Pm++4j1wiLFxuICAgICAgICAgIG5leHQ6IFwiZ292X2hlYXJpbmdzXCIsXG4gICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAyMCB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGNpdGl6ZW5fcmFsbHk6IHtcbiAgICAgIHRleHQ6IFwiTWFzc2l2ZSBjaXRpemVuIHJhbGxpZXMgbGVhZCB0byBsZWdpc2xhdGl2ZSByZWZvcm1zIGFuZCBncmVhdGVyIHRyYW5zcGFyZW5jeS4gV2hhdOKAmXMgeW91ciBuZXh0IHN0ZXA/XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIkNyZWF0ZSBwZXJtYW5lbnQgY2l0aXplbiByZWZvcm0gZ3JvdXBzIPCfjJ9cIixcbiAgICAgICAgICBuZXh0OiBcInJlZm9ybV9ncm91cHNcIixcbiAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDEwLCBlZmZpY2llbmN5OiAxMCB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogXCJQdXNoIGZvciBkaXJlY3QgZGVtb2NyYWN5IGluaXRpYXRpdmVzIPCfl7PvuI9cIixcbiAgICAgICAgICBuZXh0OiBcImRpcmVjdF9kZW1vY3JhY3lcIixcbiAgICAgICAgICBmeDogeyBpbm5vdmF0aW9uOiAxMCB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHJlZm9ybV9ncm91cHM6IHtcbiAgICAgIHRleHQ6IFwiQ2l0aXplbiByZWZvcm0gZ3JvdXBzIHN1c3RhaW4gbW9tZW50dW0gZm9yIGNoYW5nZSBhY3Jvc3MgdGhlIG5hdGlvbi5cIixcbiAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgZW5kaW5nOlxuICAgICAgICBcIlBlb3BsZeKAmXMgQWR2b2NhdGU6IFlvdSBlbXBvd2VyZWQgdGhlIHB1YmxpYyB0byB0YWtlIGNvbnRyb2wgb2YgZ292ZXJuYW5jZS5cIixcbiAgICB9LFxuICAgIGRpcmVjdF9kZW1vY3JhY3k6IHtcbiAgICAgIHRleHQ6IFwiRGlyZWN0IGRlbW9jcmFjeSBpbml0aWF0aXZlcyBnaXZlIGNpdGl6ZW5zIGEgbW9yZSBhY3RpdmUgcm9sZSBpbiBnb3Zlcm5tZW50IGRlY2lzaW9ucy5cIixcbiAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgZW5kaW5nOlxuICAgICAgICBcIkRlbW9jcmFjeSBBcmNoaXRlY3Q6IFlvdSByZWRlZmluZWQgZ292ZXJuYW5jZSBieSBnaXZpbmcgcG93ZXIgdG8gdGhlIHBlb3BsZS5cIixcbiAgICB9LFxuICAgIGpvdXJuYWxpc3RfY29sbGFiOiB7XG4gICAgICB0ZXh0OiBcIkludmVzdGlnYXRpdmUgcmVwb3J0cyByZXZlYWwgZGVlcGVyIGlzc3VlcywgYWNjZWxlcmF0aW5nIHN5c3RlbWljIHJlZm9ybXMuIFdoYXTigJlzIG5leHQ/XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIkZvY3VzIG9uIGp1ZGljaWFsIHJlZm9ybXMg4pqW77iPXCIsXG4gICAgICAgICAgbmV4dDogXCJqdWRpY2lhbF9yZWZvcm1zXCIsXG4gICAgICAgICAgZng6IHsgZWZmaWNpZW5jeTogMTAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IFwiRGV2ZWxvcCB3aGlzdGxlYmxvd2VyIHByb3RlY3Rpb24gbGF3cyDwn5uh77iPXCIsXG4gICAgICAgICAgbmV4dDogXCJ3aGlzdGxlYmxvd2VyX2xhd3NcIixcbiAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDE1IH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAganVkaWNpYWxfcmVmb3Jtczoge1xuICAgICAgdGV4dDogXCJKdWRpY2lhbCByZWZvcm1zIGVuaGFuY2UgYWNjb3VudGFiaWxpdHkgYW5kIGZhaXJuZXNzIGluIGdvdmVybmFuY2UuXCIsXG4gICAgICBjaG9pY2VzOiBbXSxcbiAgICAgIGVuZGluZzogXCJKdXN0aWNlIENoYW1waW9uOiBZb3VyIHJlZm9ybXMgcmVzdG9yZWQgdHJ1c3QgaW4gdGhlIHN5c3RlbS5cIixcbiAgICB9LFxuICAgIHdoaXN0bGVibG93ZXJfbGF3czoge1xuICAgICAgdGV4dDogXCJXaGlzdGxlYmxvd2VyIHByb3RlY3Rpb25zIGVuY291cmFnZSBtb3JlIHJldmVsYXRpb25zLCBsZWFkaW5nIHRvIGNvbnRpbnVlZCBpbXByb3ZlbWVudHMuXCIsXG4gICAgICBjaG9pY2VzOiBbXSxcbiAgICAgIGVuZGluZzpcbiAgICAgICAgXCJHdWFyZGlhbiBvZiBUcnV0aDogWW91ciBwb2xpY2llcyBlbnN1cmVkIHRyYW5zcGFyZW5jeSBmb3IgdGhlIGZ1dHVyZS5cIixcbiAgICB9LFxuICAgIGdvdl9oZWFyaW5nczoge1xuICAgICAgdGV4dDogXCJFbWVyZ2VuY3kgaGVhcmluZ3MgdW5jb3ZlciBjb3JydXB0aW9uLCByZXN1bHRpbmcgaW4gaGlnaC1wcm9maWxlIHJlc2lnbmF0aW9ucy4gV2hhdOKAmXMgeW91ciBuZXh0IG1vdmU/XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIkFwcG9pbnQgbmV3IGV0aGljYWwgbGVhZGVycyDwn4yfXCIsXG4gICAgICAgICAgbmV4dDogXCJldGhpY2FsX2xlYWRlcnNcIixcbiAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDE1IH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIlBhc3MgYW50aS1jb3JydXB0aW9uIGxlZ2lzbGF0aW9uIPCfk5xcIixcbiAgICAgICAgICBuZXh0OiBcImFudGlfY29ycnVwdGlvblwiLFxuICAgICAgICAgIGZ4OiB7IGVmZmljaWVuY3k6IDE1IH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZXRoaWNhbF9sZWFkZXJzOiB7XG4gICAgICB0ZXh0OiBcIk5ldyBsZWFkZXJzIGJyaW5nIGEgZnJlc2ggcGVyc3BlY3RpdmUgYW5kIGVhcm4gcHVibGljIHRydXN0LlwiLFxuICAgICAgY2hvaWNlczogW10sXG4gICAgICBlbmRpbmc6IFwiTGVhZGVyc2hpcCBSZXZpdGFsaXplcjogWW91IHJlZGVmaW5lZCBsZWFkZXJzaGlwIGluIGdvdmVybmFuY2UuXCIsXG4gICAgfSxcbiAgICBhbnRpX2NvcnJ1cHRpb246IHtcbiAgICAgIHRleHQ6IFwiQW50aS1jb3JydXB0aW9uIGxhd3MgY3JlYXRlIGEgY2xlYW5lciwgbW9yZSBlZmZpY2llbnQgZ292ZXJubWVudC5cIixcbiAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgZW5kaW5nOlxuICAgICAgICBcIkNvcnJ1cHRpb24gRmlnaHRlcjogWW91ciBlZmZvcnRzIHJvb3RlZCBvdXQgc3lzdGVtaWMgaW5lZmZpY2llbmNpZXMuXCIsXG4gICAgfSxcblxuICAgIC8vIE9wdGlvbiAyOiBVc2UgU2VjcmV0cyBmb3IgTGV2ZXJhZ2VcbiAgICBsZXZlcmFnZV9zZWNyZXRzOiB7XG4gICAgICB0ZXh0OiBcIlN0cmF0ZWdpYyB1c2Ugb2Ygc2VjcmV0cyBlbnN1cmVzIHF1aWNrIHBvbGljeSBjaGFuZ2VzIGluIHlvdXIgZmF2b3IuIFdoYXTigJlzIG5leHQ/XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIlNlY3VyZSBmdW5kaW5nIGZvciByZWZvcm1zIPCfkrBcIixcbiAgICAgICAgICBuZXh0OiBcImZ1bmRpbmdfcmVmb3Jtc1wiLFxuICAgICAgICAgIGZ4OiB7IGVmZmljaWVuY3k6IDE1LCBpbmZsdWVuY2U6IDEwIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIkZvcmdlIGFsbGlhbmNlcyB3aXRoIGtleSBmaWd1cmVzIPCfpJ1cIixcbiAgICAgICAgICBuZXh0OiBcImtleV9hbGxpYW5jZXNcIixcbiAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDEwIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIkxhdW5jaCBjb3ZlcnQgcmVmb3JtIHByb2plY3RzIPCfm6DvuI9cIixcbiAgICAgICAgICBuZXh0OiBcImNvdmVydF9wcm9qZWN0c1wiLFxuICAgICAgICAgIGZ4OiB7IGVmZmljaWVuY3k6IDEwIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZnVuZGluZ19yZWZvcm1zOiB7XG4gICAgICB0ZXh0OiBcIlNlY3VyZWQgZnVuZGluZyBhY2NlbGVyYXRlcyBlZmZpY2llbmN5IGFuZCBpbm5vdmF0aW9uIGFjcm9zcyBkZXBhcnRtZW50cy4gV2hhdOKAmXMgbmV4dD9cIixcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IFwiRXN0YWJsaXNoIG92ZXJzaWdodCBjb21taXR0ZWVzIPCfk4tcIixcbiAgICAgICAgICBuZXh0OiBcIm92ZXJzaWdodF9jb21taXR0ZWVzXCIsXG4gICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxMCB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogXCJNb2Rlcm5pemUgZ292ZXJubWVudCBpbmZyYXN0cnVjdHVyZSDwn4+X77iPXCIsXG4gICAgICAgICAgbmV4dDogXCJtb2Rlcm5faW5mcmFcIixcbiAgICAgICAgICBmeDogeyBlZmZpY2llbmN5OiAxNSB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIG92ZXJzaWdodF9jb21taXR0ZWVzOiB7XG4gICAgICB0ZXh0OiBcIk92ZXJzaWdodCBjb21taXR0ZWVzIGVuc3VyZSByZWZvcm1zIGFyZSBpbXBsZW1lbnRlZCBlZmZlY3RpdmVseS5cIixcbiAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgZW5kaW5nOlxuICAgICAgICBcIkFjY291bnRhYmlsaXR5IEFkdm9jYXRlOiBZb3VyIHZpZ2lsYW5jZSBlbnN1cmVkIGxvbmctdGVybSBzdWNjZXNzLlwiLFxuICAgIH0sXG4gICAgbW9kZXJuX2luZnJhOiB7XG4gICAgICB0ZXh0OiBcIk1vZGVybiBpbmZyYXN0cnVjdHVyZSBzdHJlYW1saW5lcyBvcGVyYXRpb25zIGFuZCBpbXByb3ZlcyBlZmZpY2llbmN5LlwiLFxuICAgICAgY2hvaWNlczogW10sXG4gICAgICBlbmRpbmc6XG4gICAgICAgIFwiRWZmaWNpZW5jeSBDaGFtcGlvbjogWW91ciBlZmZvcnRzIGJyb3VnaHQgZ292ZXJuYW5jZSBpbnRvIHRoZSBtb2Rlcm4gZXJhLlwiLFxuICAgIH0sXG4gICAga2V5X2FsbGlhbmNlczoge1xuICAgICAgdGV4dDogXCJLZXkgYWxsaWFuY2VzIHdpdGggaW5mbHVlbnRpYWwgZmlndXJlcyBhZHZhbmNlIHlvdXIgcmVmb3JtIGFnZW5kYS5cIixcbiAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgZW5kaW5nOiBcIlBvd2VyIEJyb2tlcjogWW91IGJ1aWx0IGFsbGlhbmNlcyB0byBkcml2ZSBtZWFuaW5nZnVsIGNoYW5nZS5cIixcbiAgICB9LFxuICAgIGNvdmVydF9wcm9qZWN0czoge1xuICAgICAgdGV4dDogXCJDb3ZlcnQgcHJvamVjdHMgYWRkcmVzcyBpbmVmZmljaWVuY2llcyB3aXRob3V0IGF0dHJhY3RpbmcgcHVibGljIGJhY2tsYXNoLlwiLFxuICAgICAgY2hvaWNlczogW10sXG4gICAgICBlbmRpbmc6IFwiU3RlYWx0aCBSZWZvcm1lcjogWW91IGFjaGlldmVkIHN1Y2Nlc3MgYmVoaW5kIHRoZSBzY2VuZXMuXCIsXG4gICAgfSxcblxuICAgIC8vIE9wdGlvbiAzOiBEZXN0cm95IHRoZSBBcmNoaXZlc1xuICAgIGRlc3Ryb3lfYXJjaGl2ZXM6IHtcbiAgICAgIHRleHQ6IFwiWW91IGRlc3Ryb3kgdGhlIGFyY2hpdmVzLCBlbnN1cmluZyBubyBvbmUgY2FuIG1pc3VzZSB0aGUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiBXaGF04oCZcyB5b3VyIG5leHQgc3RlcD9cIixcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IFwiV29yayBxdWlldGx5IG9uIHJlZm9ybXMg8J+boO+4j1wiLFxuICAgICAgICAgIG5leHQ6IFwicXVpZXRfcmVmb3Jtc1wiLFxuICAgICAgICAgIGZ4OiB7IGVmZmljaWVuY3k6IDEwIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIkZvY3VzIG9uIHJlc3RvcmluZyBwdWJsaWMgdHJ1c3Qg8J+knVwiLFxuICAgICAgICAgIG5leHQ6IFwicmVzdG9yZV90cnVzdFwiLFxuICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogMTAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IFwiQ3JlYXRlIGEgY2l0aXplbiB3YXRjaGRvZyBncm91cCDwn5GAXCIsXG4gICAgICAgICAgbmV4dDogXCJ3YXRjaGRvZ19ncm91cFwiLFxuICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogMTUgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBxdWlldF9yZWZvcm1zOiB7XG4gICAgICB0ZXh0OiBcIlF1aWV0IGJ1dCBlZmZlY3RpdmUgcmVmb3JtcyBlbGltaW5hdGUgaW5lZmZpY2llbmNpZXMgd2l0aG91dCBwdWJsaWMgdXByb2FyLlwiLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogXCJJbmNyZWFzZSBhdXRvbWF0aW9uIGluIGRlcGFydG1lbnRzIPCfpJZcIixcbiAgICAgICAgICBuZXh0OiBcImF1dG9tYXRpb25fcmVmb3Jtc1wiLFxuICAgICAgICAgIGZ4OiB7IGVmZmljaWVuY3k6IDE1IH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBcIkZvY3VzIG9uIHJ1cmFsIGFyZWFzIGZvciByZWZvcm0gb3V0cmVhY2gg8J+MvlwiLFxuICAgICAgICAgIG5leHQ6IFwicnVyYWxfcmVmb3Jtc1wiLFxuICAgICAgICAgIGZ4OiB7IGluZmx1ZW5jZTogMTAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBhdXRvbWF0aW9uX3JlZm9ybXM6IHtcbiAgICAgIHRleHQ6IFwiQXV0b21hdGlvbiByZWZvcm1zIHJlZHVjZSBidXJlYXVjcmFjeSBhbmQgaW1wcm92ZSBlZmZpY2llbmN5LlwiLFxuICAgICAgY2hvaWNlczogW10sXG4gICAgICBlbmRpbmc6XG4gICAgICAgIFwiQXV0b21hdGlvbiBBZHZvY2F0ZTogWW91IHN0cmVhbWxpbmVkIGdvdmVybmFuY2UgdGhyb3VnaCB0ZWNobm9sb2d5LlwiLFxuICAgIH0sXG4gICAgcnVyYWxfcmVmb3Jtczoge1xuICAgICAgdGV4dDogXCJSZWZvcm1zIGJyaW5nIG1vZGVybiBnb3Zlcm5hbmNlIHRvIHJ1cmFsIGNvbW11bml0aWVzLCBlbXBvd2VyaW5nIGNpdGl6ZW5zLlwiLFxuICAgICAgY2hvaWNlczogW10sXG4gICAgICBlbmRpbmc6XG4gICAgICAgIFwiUnVyYWwgQ2hhbXBpb246IFlvdSBicm91Z2h0IGluY2x1c2l2ZSBnb3Zlcm5hbmNlIHRvIHVuZGVyc2VydmVkIGFyZWFzLlwiLFxuICAgIH0sXG4gICAgcmVzdG9yZV90cnVzdDoge1xuICAgICAgdGV4dDogXCJSZXN0b3JpbmcgdHJ1c3QgYnJpbmdzIHJlbmV3ZWQgaG9wZSBhbmQgc3VwcG9ydCBmb3IgdGhlIGdvdmVybm1lbnQuIFdoYXTigJlzIHlvdXIgbmV4dCBmb2N1cz9cIixcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IFwiRW5nYWdlIGNpdGl6ZW5zIGluIHBvbGljeS1tYWtpbmcg8J+TnFwiLFxuICAgICAgICAgIG5leHQ6IFwiY2l0aXplbl9lbmdhZ2VtZW50XCIsXG4gICAgICAgICAgZng6IHsgaW5mbHVlbmNlOiAxMCB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogXCJTdHJlbmd0aGVuIG1lZGlhIHRyYW5zcGFyZW5jeSDwn5OwXCIsXG4gICAgICAgICAgbmV4dDogXCJtZWRpYV90cmFuc3BhcmVuY3lcIixcbiAgICAgICAgICBmeDogeyBpbmZsdWVuY2U6IDE1IH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgY2l0aXplbl9lbmdhZ2VtZW50OiB7XG4gICAgICB0ZXh0OiBcIkNpdGl6ZW5zIGJlY29tZSBhY3RpdmUgcGFydGljaXBhbnRzIGluIHBvbGljeS1tYWtpbmcsIGVuaGFuY2luZyB0cnVzdC5cIixcbiAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgZW5kaW5nOlxuICAgICAgICBcIlRydXN0IEJ1aWxkZXI6IFlvdSBlbXBvd2VyZWQgY2l0aXplbnMgdG8gc2hhcGUgdGhlaXIgZ292ZXJubWVudC5cIixcbiAgICB9LFxuICAgIG1lZGlhX3RyYW5zcGFyZW5jeToge1xuICAgICAgdGV4dDogXCJUcmFuc3BhcmVudCBtZWRpYSBmb3N0ZXJzIGFjY291bnRhYmlsaXR5IGFuZCBwdWJsaWMgYXdhcmVuZXNzLlwiLFxuICAgICAgY2hvaWNlczogW10sXG4gICAgICBlbmRpbmc6IFwiTWVkaWEgQWxseTogWW91IGVuc3VyZWQgdGhlIGZyZWUgZmxvdyBvZiB0cnV0aGZ1bCBpbmZvcm1hdGlvbi5cIixcbiAgICB9LFxuICAgIHdhdGNoZG9nX2dyb3VwOiB7XG4gICAgICB0ZXh0OiBcIlRoZSB3YXRjaGRvZyBncm91cCBtb25pdG9ycyBnb3Zlcm5tZW50IGFjdGlvbnMsIGVuc3VyaW5nIGFjY291bnRhYmlsaXR5LlwiLFxuICAgICAgY2hvaWNlczogW10sXG4gICAgICBlbmRpbmc6XG4gICAgICAgIFwiU2VudGluZWwgb2YgSW50ZWdyaXR5OiBZb3VyIGVmZm9ydHMgY3JlYXRlZCBhIGN1bHR1cmUgb2YgdmlnaWxhbmNlLlwiLFxuICAgIH0sXG4gIH0sXG59O1xuXG4gICAgICAvLyBJbml0aWFsIGdhbWUgc3RhdGVcbiAgICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgICAgcGhhc2U6IFBIQVNFUy5USVRMRSxcbiAgICAgICAgc2NlbmU6IFwiaW50cm9cIixcbiAgICAgICAgc3RhdHM6IHsgZWZmaWNpZW5jeTogMCwgaW5mbHVlbmNlOiAwLCBpbm5vdmF0aW9uOiAwLCBtZW1lczogMCB9LFxuICAgICAgICBwYXRoOiBbXSxcbiAgICAgICAgZW5kaW5nOiBudWxsLFxuICAgICAgfTtcbi8vIEZvb3RlciBDb21wb25lbnRcbiAgICAgIGZ1bmN0aW9uIEZvb3RlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Zm9vdGVyIGNsYXNzTmFtZT1cImJnLWdyYXktOTAwIHRleHQtd2hpdGUgcHktNCBtdC00IHRleHQtY2VudGVyIHctZnVsbFwiPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIE1hZGUgd2l0aCA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDBcIj7inaQ8L3NwYW4+IGJ5IHRoZSBPRyBELk8uRy5FLlxuICAgICAgICAgICAgICBDb21tdW5pdHlcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwPk9HIERvZ2UgQ0E6IEE1V3pyZnpXYTRramdFalNYQ2Juc24xeHk1QWFudXEzVENaSkwxZGhwdW1wPC9wPlxuICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWluIEFwcCBDb21wb25lbnRcbiAgICAgIGZ1bmN0aW9uIEFwcCgpIHtcbiAgICAgICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZUNob2ljZSA9IChjaG9pY2UpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0U2NlbmUgPSBHLnNjZW5lc1tjaG9pY2UubmV4dF07XG4gICAgICAgICAgaWYgKCFuZXh0U2NlbmUpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IG5ld1N0YXRzID0geyAuLi5zdGF0ZS5zdGF0cyB9O1xuICAgICAgICAgIE9iamVjdC5rZXlzKGNob2ljZS5meCB8fCB7fSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBuZXdTdGF0c1trZXldICs9IGNob2ljZS5meFtrZXldO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgaXNFbmRpbmcgPSAhbmV4dFNjZW5lLmNob2ljZXMgfHwgbmV4dFNjZW5lLmNob2ljZXMubGVuZ3RoID09PSAwO1xuXG4gICAgICAgICAgc2V0U3RhdGUoKHByZXYpID0+ICh7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgc2NlbmU6IGNob2ljZS5uZXh0LFxuICAgICAgICAgICAgc3RhdHM6IG5ld1N0YXRzLFxuICAgICAgICAgICAgcGF0aDogWy4uLnByZXYucGF0aCwgY2hvaWNlLm5leHRdLFxuICAgICAgICAgICAgcGhhc2U6IGlzRW5kaW5nID8gUEhBU0VTLkVORElORyA6IFBIQVNFUy5TVE9SWSxcbiAgICAgICAgICAgIGVuZGluZzogaXNFbmRpbmcgPyBuZXh0U2NlbmUuZW5kaW5nIDogbnVsbCxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzZXRHYW1lID0gKCkgPT4gc2V0U3RhdGUoaW5pdGlhbFN0YXRlKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctZ3JhZGllbnQtY3VzdG9tIG1pbi1oLXNjcmVlbiBmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgey8qIFN0YXRzIEJhciAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZml4ZWQgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgYmctZ3JheS05MDAgdGV4dC13aGl0ZSBwLTQgc2hhZG93LW1kIGZsZXgganVzdGlmeS1hcm91bmQgdGV4dC1zbSBtZDp0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIj5cbiAgICAgICAgICAgICAgICA8VHJlbmRpbmdVcCAvPiA8c3Bhbj5FZmZpY2llbmN5OiB7c3RhdGUuc3RhdHMuZWZmaWNpZW5jeX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMVwiPlxuICAgICAgICAgICAgICAgIDxVc2VycyAvPiA8c3Bhbj5JbmZsdWVuY2U6IHtzdGF0ZS5zdGF0cy5pbmZsdWVuY2V9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIj5cbiAgICAgICAgICAgICAgICA8QnJhaW4gLz4gPHNwYW4+SW5ub3ZhdGlvbjoge3N0YXRlLnN0YXRzLmlubm92YXRpb259PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIj5cbiAgICAgICAgICAgICAgICA8U3RhciAvPiA8c3Bhbj5NZW1lczoge3N0YXRlLnN0YXRzLm1lbWVzfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEdhbWUgQ29udGVudCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC04IGJnLWdyYXktODAwIHJvdW5kZWQgc2hhZG93LWxnIHRleHQtY2VudGVyIHctMTEvMTIgbWQ6dy0zLzQgbXQtMTYgbXgtYXV0b1wiPlxuICAgICAgICAgICAgICB7c3RhdGUucGhhc2UgPT09IFBIQVNFUy5USVRMRSA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtNHhsIGZvbnQtYm9sZFwiPkQuTy5HLkU8L2gxPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtNCB0ZXh0LWxnXCI+RGVwYXJ0bWVudCBPZiBHb3Zlcm5tZW50IEVmZmljaWVuY3k8L3A+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTYgcHgtNiBweS0yIGJnLWJsdWUtNTAwIHRleHQtd2hpdGUgcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFN0YXRlKHsgLi4uc3RhdGUsIHBoYXNlOiBQSEFTRVMuU1RPUlkgfSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFN0YXJ0XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IHN0YXRlLnBoYXNlID09PSBQSEFTRVMuRU5ESU5HID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0zeGwgZm9udC1ib2xkXCI+RW5kaW5nPC9oMT5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTRcIj57Ry5zY2VuZXNbc3RhdGUuc2NlbmVdLnRleHR9PC9wPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtNCB0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIj57c3RhdGUuZW5kaW5nfTwvcD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtNiBweC02IHB5LTIgYmctZ3JlZW4tNTAwIHRleHQtd2hpdGUgcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3Jlc2V0R2FtZX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgUmVwbGF5XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1sZyBtYi02XCI+e0cuc2NlbmVzW3N0YXRlLnNjZW5lXS50ZXh0fTwvcD5cbiAgICAgICAgICAgICAgICAgIHtHLnNjZW5lc1tzdGF0ZS5zY2VuZV0uY2hvaWNlcy5tYXAoKGNob2ljZSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJsb2NrIHctZnVsbCBweC00IHB5LTIgYmctZ3JheS03MDAgaG92ZXI6YmctZ3JheS02MDAgdGV4dC1sZWZ0IHRleHQtd2hpdGUgcm91bmRlZCBtYi0yIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDaG9pY2UoY2hvaWNlKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtjaG9pY2UudGV4dH1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogRm9vdGVyICovfVxuICAgICAgICAgICAgPEZvb3RlciAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBNb3VudCB0aGUgYXBwXG4gICAgICBjb25zdCByb290ID0gUmVhY3RET00uY3JlYXRlUm9vdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpKTtcbiAgICAgIHJvb3QucmVuZGVyKDxBcHAgLz4pO1xuICAgICJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDTSxJQUFNO0VBQUVBO0FBQVMsQ0FBQyxHQUFHQyxLQUFLOztBQUUxQjtBQUNBLElBQU1DLE1BQU0sR0FBRztFQUNiQyxLQUFLLEVBQUUsT0FBTztFQUNkQyxLQUFLLEVBQUUsT0FBTztFQUNkQyxNQUFNLEVBQUU7QUFDVixDQUFDOztBQUVEO0FBQ0EsSUFBTUMsVUFBVSxHQUFHQSxDQUFBLGtCQUNqQkwsS0FBQSxDQUFBTSxhQUFBO0VBQUtDLEtBQUssRUFBQyw0QkFBNEI7RUFBQ0MsS0FBSyxFQUFDLElBQUk7RUFBQ0MsTUFBTSxFQUFDLElBQUk7RUFBQ0MsT0FBTyxFQUFDLFdBQVc7RUFBQ0MsSUFBSSxFQUFDLE1BQU07RUFBQ0MsTUFBTSxFQUFDLGNBQWM7RUFBQ0MsV0FBVyxFQUFDO0FBQUcsZ0JBQ2xJ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</script></head>
  <body>
    <div id="root"><div class="bg-gradient-custom min-h-screen flex flex-col justify-between"><div class="fixed top-0 left-0 right-0 bg-gray-900 text-white p-4 shadow-md flex justify-around text-sm md:text-base"><div class="flex items-center space-x-1"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline><polyline points="17 6 23 6 23 12"></polyline></svg> <span>Efficiency: 0</span></div><div class="flex items-center space-x-1"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg> <span>Influence: 0</span></div><div class="flex items-center space-x-1"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08A2.5 2.5 0 0 0 12 19.5a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 12 4.5"></path><path d="M12 15v-2"></path><path d="M12 11v-2"></path></svg> <span>Innovation: 0</span></div><div class="flex items-center space-x-1"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg> <span>Memes: 0</span></div></div><div class="p-8 bg-gray-800 rounded shadow-lg text-center w-11/12 md:w-3/4 mt-16 mx-auto"><h1 class="text-4xl font-bold">D.O.G.E</h1><p class="mt-4 text-lg">Department Of Government Efficiency</p><button class="mt-6 px-6 py-2 bg-blue-500 text-white rounded">Start</button></div><footer class="bg-gray-900 text-white py-4 mt-4 text-center w-full"><p>Made with <span class="text-red-500">❤</span> by the OG D.O.G.E. Community</p><p>OG Doge CA: A5WzrfzWa4kjgEjSXCbnsn1xy5Aanuq3TCZJL1dhpump</p></footer></div></div>
    
    <!-- Development version of React for better error messages -->
    <script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin=""></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin=""></script>
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
    
    <!-- Your app scripts -->
    <script type="text/babel" data-type="module">
      const { useState } = React;
      
      // Game constants and components
      const PHASES = {
        TITLE: "title",
        STORY: "story",
        ENDING: "ending",
      };

      // Icons components
      const TrendingUp = () => (
        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
          <polyline points="23 6 13.5 15.5 8.5 10.5 1 18"/>
          <polyline points="17 6 23 6 23 12"/>
        </svg>
      );

      const Users = () => (
        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
          <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/>
          <circle cx="9" cy="7" r="4"/>
          <path d="M23 21v-2a4 4 0 0 0-3-3.87"/>
          <path d="M16 3.13a4 4 0 0 1 0 7.75"/>
        </svg>
      );

      const Brain = () => (
        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
          <path d="M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08A2.5 2.5 0 0 0 12 19.5a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 12 4.5"/>
          <path d="M12 15v-2"/>
          <path d="M12 11v-2"/>
        </svg>
      );

      const Star = () => (
        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
          <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/>
        </svg>
      );
// Game data
      const G = {
        scenes: {
    // Introduction Scene
          intro: {
            text: "Welcome to the Department of Government Efficiency (D.O.G.E). Your mission: optimize governance while balancing Elon's innovation and Trump's vision for 'winning'. Where do you start?",
            choices: [
              {
                text: "Analyze inefficiencies 🔍",
                next: "analyze",
                fx: { efficiency: 5 },
              },
              {
                text: "Host a public forum 🗣️",
                next: "public_forum",
                fx: { influence: 5 },
              },
              {
                text: "Unleash the Meme Army 🐸",
                next: "meme_army",
                fx: { memes: 10 },
              },
              {
                text: "Explore secret archives 📂",
                next: "secret_archives",
                fx: { innovation: 5 },
              },
            ],
          },
          // Path: Analyze Inefficiencies
          analyze: {
            text: "Your analysis reveals outdated systems and redundant processes. What do you do next?",
            choices: [
              {
                text: "Automate processes with AI 🤖",
                next: "ai_automation",
                fx: { efficiency: 10 },
              },
              {
                text: "Form a task force 🚨",
                next: "task_force",
                fx: { influence: 5, efficiency: 5 },
              },
              {
                text: "Blame it on bureaucracy 🗂️",
                next: "bureaucracy_blame",
                fx: { memes: 5 },
              },
            ],
          },
          ai_automation: {
            text: "AI implementation improves efficiency, but it creates resistance among employees. What's your next step?",
            choices: [
              {
                text: "Draft ethical AI guidelines 📜",
                next: "ethical_ai",
                fx: { influence: 10 },
              },
              {
                text: "Expand AI into other departments 🚀",
                next: "expand_ai",
                fx: { efficiency: 20 },
              },
              {
                text: "Create a public AI awareness campaign 📣",
                next: "ai_awareness",
                fx: { innovation: 10, influence: 5 },
              },
            ],
          },
          ethical_ai: {
            text: "Your ethical AI guidelines gain global recognition. What's next?",
            choices: [
              {
                text: "Collaborate with international AI regulators 🌍",
                next: "global_ai",
                fx: { influence: 15, innovation: 10 },
              },
              {
                text: "Launch an AI innovation hub 🏢",
                next: "ai_hub",
                fx: { innovation: 15, efficiency: 10 },
              },
            ],
          },
          global_ai: {
            text: "Your collaboration shapes international AI standards, securing long-term global efficiency.",
            choices: [],
            ending: "AI Diplomat: You redefined the future of ethical AI globally.",
          },
          ai_hub: {
            text: "The innovation hub becomes a global leader in cutting-edge AI development.",
            choices: [],
            ending: "Tech Visionary: Your leadership inspired global AI advancements.",
          },
          expand_ai: {
            text: "Expanding AI boosts efficiency but sparks debates about automation's impact on jobs. What's next?",
            choices: [
              {
                text: "Introduce re-skilling programs for workers 👩‍🏫",
                next: "reskill_workers",
                fx: { influence: 10, efficiency: 5 },
              },
              {
                text: "Focus on AI-human collaboration 🤝",
                next: "ai_collaboration",
                fx: { innovation: 10 },
              },
            ],
          },
          reskill_workers: {
            text: "Re-skilling programs successfully integrate employees into new roles.",
            choices: [],
            ending: "Workforce Advocate: You ensured progress without leaving anyone behind.",
          },
          ai_collaboration: {
            text: "AI-human collaboration models become a benchmark for innovative governance.",
            choices: [],
            ending: "Collaboration Architect: You harmonized technology and humanity.",
          },
          ai_awareness: {
            text: "Your public awareness campaign gains widespread support. What do you focus on next?",
            choices: [
              {
                text: "Highlight AI's role in environmental conservation 🌱",
                next: "ai_environment",
                fx: { innovation: 10 },
              },
              {
                text: "Showcase AI's potential in healthcare 🏥",
                next: "ai_healthcare",
                fx: { innovation: 15 },
              },
            ],
          },
          ai_environment: {
            text: "AI-powered environmental solutions transform resource management globally.",
            choices: [],
            ending: "Eco-Tech Leader: You pioneered AI-driven sustainability.",
          },
          ai_healthcare: {
            text: "AI revolutionizes healthcare, saving countless lives.",
            choices: [],
            ending: "Health Innovator: You transformed public health with AI.",
          },
// Task Force Path
          task_force: {
            text: "The task force uncovers widespread inefficiencies. What's your next step?",
            choices: [
              {
                text: "Streamline resource allocation 📊",
                next: "streamline_resources",
                fx: { efficiency: 15 },
              },
              {
                text: "Collaborate with other government agencies 🤝",
                next: "collaborate_agencies",
                fx: { influence: 10, efficiency: 5 },
              },
              {
                text: "Seek public input on inefficiencies 📣",
                next: "public_input",
                fx: { influence: 15 },
              },
            ],
          },
          streamline_resources: {
            text: "Streamlining resource allocation improves efficiency across departments. What do you focus on next?",
            choices: [
              {
                text: "Integrate data-driven decision-making 📊",
                next: "data_driven",
                fx: { efficiency: 20, innovation: 10 },
              },
              {
                text: "Establish inter-departmental task forces 🚧",
                next: "inter_department",
                fx: { influence: 15 },
              },
            ],
          },
          data_driven: {
            text: "Data-driven decision-making transforms government operations.",
            choices: [],
            ending: "Data Strategist: You brought precision to public administration.",
          },
          inter_department: {
            text: "Collaboration between departments breaks silos and enhances productivity.",
            choices: [],
            ending: "Unity Pioneer: You united departments for seamless governance.",
          },
          collaborate_agencies: {
            text: "Inter-agency collaboration creates new opportunities. What do you prioritize?",
            choices: [
              {
                text: "Build a unified government portal 🌐",
                next: "government_portal",
                fx: { innovation: 15 },
              },
              {
                text: "Standardize processes across agencies 📋",
                next: "process_standardization",
                fx: { efficiency: 15 },
              },
            ],
          },
          government_portal: {
            text: "The unified portal provides citizens easy access to government services.",
            choices: [],
            ending: "Digital Pioneer: You made governance accessible for all.",
          },
          process_standardization: {
            text: "Standardized processes streamline operations nationwide.",
            choices: [],
            ending: "Process Champion: Your reforms set a gold standard.",
          },
          public_input: {
            text: "Public input reveals hidden inefficiencies and inspires innovative solutions. What's next?",
            choices: [
              {
                text: "Crowdsource solutions for critical issues 💡",
                next: "crowdsource_solutions",
                fx: { influence: 10, innovation: 10 },
              },
              {
                text: "Hold public forums for real-time feedback 📣",
                next: "real_time_feedback",
                fx: { influence: 15 },
              },
            ],
          },
          crowdsource_solutions: {
            text: "Crowdsourced solutions bring fresh ideas to governance.",
            choices: [],
            ending: "Crowdsourcing Pioneer: You empowered citizens to solve problems.",
          },
          real_time_feedback: {
            text: "Real-time feedback drives continuous improvement in government services.",
            choices: [],
            ending: "Feedback Leader: You fostered transparency and adaptability.",
          },
          // Bureaucracy Blame Path
          bureaucracy_blame: {
            text: "Your humorous blame campaign gains public attention, making governance issues relatable. What's next?",
            choices: [
              {
                text: "Create a satirical bureaucracy task force 🎭",
                next: "satirical_task_force",
                fx: { memes: 15 },
              },
              {
                text: "Engage meme creators to amplify the message 🐸",
                next: "meme_creators",
                fx: { memes: 10, influence: 5 },
              },
              {
                text: "Turn the campaign into a public documentary 🎥",
                next: "public_documentary",
                fx: { influence: 15 },
              },
            ],
          },
          satirical_task_force: {
            text: "The satirical task force highlights absurd inefficiencies and inspires action.",
            choices: [],
            ending: "Humor Activist: You turned laughter into a catalyst for change.",
          },
          meme_creators: {
            text: "Meme creators turn the campaign into a viral sensation, driving reform.",
            choices: [],
            ending: "Meme Mobilizer: You redefined activism with creativity.",
          },
          public_documentary: {
            text: "The documentary educates citizens and ignites a wave of grassroots reform movements.",
            choices: [],
            ending: "Grassroots Hero: You empowered citizens to drive change.",
          },
// Public Forum Path
          public_forum: {
            text: "The public eagerly shares ideas to improve governance. What's next?",
            choices: [
              {
                text: "Form citizen advisory boards 👥",
                next: "advisory_boards",
                fx: { influence: 10 },
              },
              {
                text: "Launch transparency dashboards 📊",
                next: "transparency_dashboards",
                fx: { innovation: 10 },
              },
              {
                text: "Create meme-based reforms 🐸",
                next: "meme_reforms",
                fx: { memes: 10 },
              },
            ],
          },
          advisory_boards: {
            text: "Citizen advisory boards are formed, providing new ideas and perspectives. What do you do next?",
            choices: [
              {
                text: "Adopt citizen-driven policies 📜",
                next: "citizen_policies",
                fx: { efficiency: 15 },
              },
              {
                text: "Expand advisory boards nationwide 🌍",
                next: "national_boards",
                fx: { influence: 15 },
              },
              {
                text: "Host a yearly advisory summit 🏛️",
                next: "advisory_summit",
                fx: { innovation: 10, influence: 10 },
              },
            ],
          },
          citizen_policies: {
            text: "Citizen-driven policies transform public trust and government efficiency. What's next?",
            choices: [
              {
                text: "Create local-level advisory boards 🏡",
                next: "local_boards",
                fx: { influence: 10 },
              },
              {
                text: "Integrate policies with technology apps 📱",
                next: "policy_apps",
                fx: { innovation: 15 },
              },
            ],
          },
          local_boards: {
            text: "Local advisory boards foster a sense of community and engagement in governance.",
            choices: [],
            ending: "Community Builder: You brought governance closer to the people.",
          },
          policy_apps: {
            text: "Technology apps make citizen policies accessible and actionable.",
            choices: [],
            ending: "Policy Innovator: You combined technology and governance seamlessly.",
          },
          national_boards: {
            text: "Nationwide boards inspire public participation on an unprecedented scale.",
            choices: [],
            ending: "Visionary Leader: Your outreach united citizens across the country.",
          },
          advisory_summit: {
            text: "The annual summit becomes a hub for innovation and collaboration. What's next?",
            choices: [
              {
                text: "Partner with international advisory groups 🤝",
                next: "global_partnership",
                fx: { influence: 15, innovation: 10 },
              },
              {
                text: "Use summit ideas to craft new legislation 📜",
                next: "summit_legislation",
                fx: { efficiency: 10 },
              },
            ],
          },
          global_partnership: {
            text: "Partnerships with global advisory groups spark international reforms.",
            choices: [],
            ending: "Global Reformer: You inspired collaboration beyond borders.",
          },
          summit_legislation: {
            text: "New legislation based on summit ideas revolutionizes governance.",
            choices: [],
            ending: "Lawmaker Visionary: You turned ideas into impactful laws.",
          },
          // Transparency Dashboards Path
          transparency_dashboards: {
            text: "Transparency dashboards provide real-time access to government data. What's next?",
            choices: [
              {
                text: "Integrate dashboards with public apps 📱",
                next: "dashboard_apps",
                fx: { innovation: 15 },
              },
              {
                text: "Promote dashboards globally 🌍",
                next: "global_dashboards",
                fx: { influence: 15 },
              },
              {
                text: "Use dashboards to crowdsource problem-solving 💡",
                next: "crowdsource_dashboards",
                fx: { innovation: 10, influence: 10 },
              },
            ],
          },
          dashboard_apps: {
            text: "Apps make dashboards accessible to citizens, empowering them to hold the government accountable.",
            choices: [
              {
                text: "Develop AI features for the dashboards 🤖",
                next: "ai_dashboards",
                fx: { innovation: 15 },
              },
              {
                text: "Focus on rural areas for app adoption 🌾",
                next: "rural_apps",
                fx: { influence: 10 },
              },
            ],
          },
          ai_dashboards: {
            text: "AI-enhanced dashboards predict inefficiencies and provide actionable insights.",
            choices: [],
            ending: "Tech Pioneer: You brought predictive analytics to governance.",
          },
          rural_apps: {
            text: "Rural communities adopt apps, fostering inclusive governance.",
            choices: [],
            ending: "Rural Innovator: You made governance accessible to all.",
          },
          global_dashboards: {
            text: "Transparency dashboards inspire global reforms in accountability.",
            choices: [],
            ending: "Global Advocate: Your efforts redefined transparency worldwide.",
          },
          crowdsource_dashboards: {
            text: "Crowdsourcing through dashboards accelerates problem-solving. What's next?",
            choices: [
              {
                text: "Expand crowdsourcing to global issues 🌍",
                next: "global_crowdsourcing",
                fx: { innovation: 15, influence: 10 },
              },
              {
                text: "Use crowdsourcing to innovate public services 🚀",
                next: "public_innovation",
                fx: { innovation: 15 },
              },
            ],
          },
          global_crowdsourcing: {
            text: "Global crowdsourcing addresses critical issues like climate change and poverty.",
            choices: [],
            ending: "Global Problem Solver: You turned governance into a collaborative force.",
          },
          public_innovation: {
            text: "Innovations in public services transform government efficiency and citizen satisfaction.",
            choices: [],
            ending: "Service Innovator: You revolutionized public services through collaboration.",
          },
          // Meme-Based Reforms Path
          meme_reforms: {
            text: "Your meme-based reforms gain massive traction and public approval. What's next?",
            choices: [
              {
                text: "Launch a public meme competition 🎉",
                next: "public_meme_competition",
                fx: { memes: 15 },
              },
              {
                text: "Develop meme-based educational campaigns 📚",
                next: "educational_memes",
                fx: { innovation: 10, memes: 5 },
              },
              {
                text: "Create a government meme department 🏢",
                next: "meme_department",
                fx: { memes: 15 },
              },
            ],
          },
          public_meme_competition: {
            text: "The meme competition inspires creativity and civic awareness. What do you do next?",
            choices: [
              {
                text: "Publish winning memes in a national anthology 📖",
                next: "meme_anthology",
                fx: { memes: 10 },
              },
              {
                text: "Use winning memes in public service campaigns 📣",
                next: "service_campaigns",
                fx: { influence: 10, memes: 10 },
              },
            ],
          },
          meme_anthology: {
            text: "The anthology becomes a bestseller, highlighting the power of humor.",
            choices: [],
            ending: "Cultural Icon: Your anthology brought humor to the masses.",
          },
          service_campaigns: {
            text: "Public service campaigns powered by memes drive engagement and awareness.",
            choices: [],
            ending: "Campaign Mastermind: You used memes to transform civic engagement.",
          },
          educational_memes: {
            text: "Educational campaigns using memes improve public understanding of complex policies. What's next?",
            choices: [
              {
                text: "Introduce meme-based civic courses 📖",
                next: "civic_courses",
                fx: { innovation: 10, influence: 10 },
              },
              {
                text: "Develop a meme-powered voting initiative 🗳️",
                next: "meme_voting",
                fx: { influence: 15 },
              },
            ],
          },
          civic_courses: {
            text: "Civic courses make education engaging and accessible to all.",
            choices: [],
            ending: "Civic Meme Innovator: You brought humor to civic education.",
          },
          meme_voting: {
            text: "Meme-powered voting drives record turnout and strengthens democracy.",
            choices: [],
            ending: "Democracy Defender: You revolutionized elections with creativity.",
          },
          meme_department: {
            text: "The meme department becomes a cultural hub for humor-driven reforms.",
            choices: [],
            ending: "Meme Minister: You institutionalized the power of memes in governance.",
          },
          // Meme Army Path
          meme_army: {
            text: "Your meme campaign gains massive traction, captivating audiences worldwide. What's next?",
            choices: [
              {
                text: "Collaborate with influencers 🌟",
                next: "influencer_collab",
                fx: { influence: 10, memes: 10 },
              },
              {
                text: "Create a Meme DAO 📜",
                next: "create_meme_dao",
                fx: { innovation: 10, memes: 15 },
              },
              {
                text: "Host a meme competition 🎉",
                next: "meme_competition",
                fx: { influence: 5, memes: 10 },
              },
            ],
          },
          influencer_collab: {
            text: "Influencers amplify your message, making your memes a cultural phenomenon. What's next?",
            choices: [
              {
                text: "Turn memes into merchandise 🛍️",
                next: "meme_merch",
                fx: { influence: 10, memes: 10 },
              },
              {
                text: "Use memes to educate citizens 📚",
                next: "educational_memes",
                fx: { innovation: 10, memes: 5 },
              },
              {
                text: "Create meme-powered charity campaigns 💝",
                next: "meme_charity",
                fx: { influence: 15, memes: 10 },
              },
            ],
          },
          meme_merch: {
            text: "Merchandise profits fund public projects and spread the meme movement even further. What do you do next?",
            choices: [
              {
                text: "Invest profits into meme-based schools 🎓",
                next: "meme_schools",
                fx: { innovation: 15 },
              },
              {
                text: "Use profits to fund infrastructure upgrades 🏗️",
                next: "meme_infrastructure",
                fx: { efficiency: 15 },
              },
            ],
          },
          meme_schools: {
            text: "Meme-based schools teach humor and critical thinking to the next generation.",
            choices: [],
            ending: "Meme Mentor: You shaped a future where humor and knowledge go hand in hand.",
          },
          meme_infrastructure: {
            text: "Infrastructure upgrades funded by memes lead to better roads, faster internet, and happier citizens.",
            choices: [],
            ending: "Infrastructure Icon: You turned memes into a force for physical progress.",
          },
          meme_charity: {
            text: "Charity campaigns powered by memes raise unprecedented funds. What's your next step?",
            choices: [
              {
                text: "Build global charity networks 🌍",
                next: "global_charity",
                fx: { influence: 20, innovation: 10 },
              },
              {
                text: "Develop tech to gamify charity campaigns 🎮",
                next: "gamify_charity",
                fx: { innovation: 15 },
              },
            ],
          },
          global_charity: {
            text: "Your charity networks improve lives worldwide, building bridges across nations.",
            choices: [],
            ending: "Global Humanitarian: You turned memes into a tool for global good.",
          },
          gamify_charity: {
            text: "Gamification of charity campaigns makes giving back fun and engaging.",
            choices: [],
            ending: "Charity Game Changer: You revolutionized philanthropy with innovation.",
          },
          // Meme DAO Path
          create_meme_dao: {
            text: "The Meme DAO gains massive support, enabling crowdfunding for reform projects. What's next?",
            choices: [
              {
                text: "Expand the DAO globally 🌍",
                next: "global_dao",
                fx: { influence: 20, innovation: 10 },
              },
              {
                text: "Use DAO funds for transparency dashboards 📊",
                next: "dashboard_funding",
                fx: { efficiency: 15 },
              },
              {
                text: "Partner DAO with tech companies 🤝",
                next: "tech_partnership",
                fx: { innovation: 20 },
              },
            ],
          },
          global_dao: {
            text: "The global DAO inspires international citizen-led reforms.",
            choices: [],
            ending: "Citizen Diplomat: You created a global movement for change.",
          },
          dashboard_funding: {
            text: "DAO funds improve transparency and public accountability.",
            choices: [],
            ending: "Transparency Titan: Your DAO transformed public trust.",
          },
          tech_partnership: {
            text: "Partnerships with tech companies revolutionize DAO efficiency.",
            choices: [],
            ending: "Tech Reformer: You pioneered citizen-tech collaboration.",
          },
          // Host a Meme Competition
          meme_competition: {
            text: "The competition engages the public and sparks creativity. What's next?",
            choices: [
              {
                text: "Publish winning memes in a national anthology 📖",
                next: "meme_anthology",
                fx: { memes: 10 },
              },
              {
                text: "Use winning memes in public service campaigns 📣",
                next: "service_campaigns",
                fx: { influence: 10, memes: 10 },
              },
              {
                text: "Turn winning memes into NFTs 🖼️",
                next: "nft_memes",
                fx: { innovation: 10, memes: 10 },
              },
            ],
          },
          nft_memes: {
            text: "The NFT collection generates significant revenue for government projects.",
            choices: [],
            ending: "Digital Innovator: You blended art, technology, and reform.",
          },
// Path: Explore Secret Archives
    secret_archives: {
      text: "You uncover classified documents revealing inefficiencies and hidden agendas. What’s your next move?",
      choices: [
        {
          text: "Expose the truth 🕵️‍♂️",
          next: "expose_truth",
          fx: { influence: 15, memes: 10 },
        },
        {
          text: "Use secrets for leverage 💼",
          next: "leverage_secrets",
          fx: { efficiency: 10, influence: 10 },
        },
        {
          text: "Destroy the archives 🔥",
          next: "destroy_archives",
          fx: { memes: 5 },
        },
      ],
    },

    // Option 1: Expose the Truth
    expose_truth: {
      text: "The truth shocks the nation, sparking protests and demands for change. What’s your next move?",
      choices: [
        {
          text: "Rally citizens for reforms 🗣️",
          next: "citizen_rally",
          fx: { influence: 15 },
        },
        {
          text: "Work with investigative journalists 📰",
          next: "journalist_collab",
          fx: { influence: 10, innovation: 5 },
        },
        {
          text: "Push for emergency government hearings 🏛️",
          next: "gov_hearings",
          fx: { influence: 20 },
        },
      ],
    },
    citizen_rally: {
      text: "Massive citizen rallies lead to legislative reforms and greater transparency. What’s your next step?",
      choices: [
        {
          text: "Create permanent citizen reform groups 🌟",
          next: "reform_groups",
          fx: { influence: 10, efficiency: 10 },
        },
        {
          text: "Push for direct democracy initiatives 🗳️",
          next: "direct_democracy",
          fx: { innovation: 10 },
        },
      ],
    },
    reform_groups: {
      text: "Citizen reform groups sustain momentum for change across the nation.",
      choices: [],
      ending:
        "People’s Advocate: You empowered the public to take control of governance.",
    },
    direct_democracy: {
      text: "Direct democracy initiatives give citizens a more active role in government decisions.",
      choices: [],
      ending:
        "Democracy Architect: You redefined governance by giving power to the people.",
    },
    journalist_collab: {
      text: "Investigative reports reveal deeper issues, accelerating systemic reforms. What’s next?",
      choices: [
        {
          text: "Focus on judicial reforms ⚖️",
          next: "judicial_reforms",
          fx: { efficiency: 10 },
        },
        {
          text: "Develop whistleblower protection laws 🛡️",
          next: "whistleblower_laws",
          fx: { influence: 15 },
        },
      ],
    },
    judicial_reforms: {
      text: "Judicial reforms enhance accountability and fairness in governance.",
      choices: [],
      ending: "Justice Champion: Your reforms restored trust in the system.",
    },
    whistleblower_laws: {
      text: "Whistleblower protections encourage more revelations, leading to continued improvements.",
      choices: [],
      ending:
        "Guardian of Truth: Your policies ensured transparency for the future.",
    },
    gov_hearings: {
      text: "Emergency hearings uncover corruption, resulting in high-profile resignations. What’s your next move?",
      choices: [
        {
          text: "Appoint new ethical leaders 🌟",
          next: "ethical_leaders",
          fx: { influence: 15 },
        },
        {
          text: "Pass anti-corruption legislation 📜",
          next: "anti_corruption",
          fx: { efficiency: 15 },
        },
      ],
    },
    ethical_leaders: {
      text: "New leaders bring a fresh perspective and earn public trust.",
      choices: [],
      ending: "Leadership Revitalizer: You redefined leadership in governance.",
    },
    anti_corruption: {
      text: "Anti-corruption laws create a cleaner, more efficient government.",
      choices: [],
      ending:
        "Corruption Fighter: Your efforts rooted out systemic inefficiencies.",
    },

    // Option 2: Use Secrets for Leverage
    leverage_secrets: {
      text: "Strategic use of secrets ensures quick policy changes in your favor. What’s next?",
      choices: [
        {
          text: "Secure funding for reforms 💰",
          next: "funding_reforms",
          fx: { efficiency: 15, influence: 10 },
        },
        {
          text: "Forge alliances with key figures 🤝",
          next: "key_alliances",
          fx: { influence: 10 },
        },
        {
          text: "Launch covert reform projects 🛠️",
          next: "covert_projects",
          fx: { efficiency: 10 },
        },
      ],
    },
    funding_reforms: {
      text: "Secured funding accelerates efficiency and innovation across departments. What’s next?",
      choices: [
        {
          text: "Establish oversight committees 📋",
          next: "oversight_committees",
          fx: { influence: 10 },
        },
        {
          text: "Modernize government infrastructure 🏗️",
          next: "modern_infra",
          fx: { efficiency: 15 },
        },
      ],
    },
    oversight_committees: {
      text: "Oversight committees ensure reforms are implemented effectively.",
      choices: [],
      ending:
        "Accountability Advocate: Your vigilance ensured long-term success.",
    },
    modern_infra: {
      text: "Modern infrastructure streamlines operations and improves efficiency.",
      choices: [],
      ending:
        "Efficiency Champion: Your efforts brought governance into the modern era.",
    },
    key_alliances: {
      text: "Key alliances with influential figures advance your reform agenda.",
      choices: [],
      ending: "Power Broker: You built alliances to drive meaningful change.",
    },
    covert_projects: {
      text: "Covert projects address inefficiencies without attracting public backlash.",
      choices: [],
      ending: "Stealth Reformer: You achieved success behind the scenes.",
    },

    // Option 3: Destroy the Archives
    destroy_archives: {
      text: "You destroy the archives, ensuring no one can misuse the sensitive information. What’s your next step?",
      choices: [
        {
          text: "Work quietly on reforms 🛠️",
          next: "quiet_reforms",
          fx: { efficiency: 10 },
        },
        {
          text: "Focus on restoring public trust 🤝",
          next: "restore_trust",
          fx: { influence: 10 },
        },
        {
          text: "Create a citizen watchdog group 👀",
          next: "watchdog_group",
          fx: { influence: 15 },
        },
      ],
    },
    quiet_reforms: {
      text: "Quiet but effective reforms eliminate inefficiencies without public uproar.",
      choices: [
        {
          text: "Increase automation in departments 🤖",
          next: "automation_reforms",
          fx: { efficiency: 15 },
        },
        {
          text: "Focus on rural areas for reform outreach 🌾",
          next: "rural_reforms",
          fx: { influence: 10 },
        },
      ],
    },
    automation_reforms: {
      text: "Automation reforms reduce bureaucracy and improve efficiency.",
      choices: [],
      ending:
        "Automation Advocate: You streamlined governance through technology.",
    },
    rural_reforms: {
      text: "Reforms bring modern governance to rural communities, empowering citizens.",
      choices: [],
      ending:
        "Rural Champion: You brought inclusive governance to underserved areas.",
    },
    restore_trust: {
      text: "Restoring trust brings renewed hope and support for the government. What’s your next focus?",
      choices: [
        {
          text: "Engage citizens in policy-making 📜",
          next: "citizen_engagement",
          fx: { influence: 10 },
        },
        {
          text: "Strengthen media transparency 📰",
          next: "media_transparency",
          fx: { influence: 15 },
        },
      ],
    },
    citizen_engagement: {
      text: "Citizens become active participants in policy-making, enhancing trust.",
      choices: [],
      ending:
        "Trust Builder: You empowered citizens to shape their government.",
    },
    media_transparency: {
      text: "Transparent media fosters accountability and public awareness.",
      choices: [],
      ending: "Media Ally: You ensured the free flow of truthful information.",
    },
    watchdog_group: {
      text: "The watchdog group monitors government actions, ensuring accountability.",
      choices: [],
      ending:
        "Sentinel of Integrity: Your efforts created a culture of vigilance.",
    },
  },
};

      // Initial game state
      const initialState = {
        phase: PHASES.TITLE,
        scene: "intro",
        stats: { efficiency: 0, influence: 0, innovation: 0, memes: 0 },
        path: [],
        ending: null,
      };
// Footer Component
      function Footer() {
        return (
          <footer className="bg-gray-900 text-white py-4 mt-4 text-center w-full">
            <p>
              Made with <span className="text-red-500">❤</span> by the OG D.O.G.E.
              Community
            </p>
            <p>OG Doge CA: A5WzrfzWa4kjgEjSXCbnsn1xy5Aanuq3TCZJL1dhpump</p>
          </footer>
        );
      }

      // Main App Component
      function App() {
        const [state, setState] = React.useState(initialState);

        const handleChoice = (choice) => {
          const nextScene = G.scenes[choice.next];
          if (!nextScene) return;

          const newStats = { ...state.stats };
          Object.keys(choice.fx || {}).forEach((key) => {
            newStats[key] += choice.fx[key];
          });

          const isEnding = !nextScene.choices || nextScene.choices.length === 0;

          setState((prev) => ({
            ...prev,
            scene: choice.next,
            stats: newStats,
            path: [...prev.path, choice.next],
            phase: isEnding ? PHASES.ENDING : PHASES.STORY,
            ending: isEnding ? nextScene.ending : null,
          }));
        };

        const resetGame = () => setState(initialState);

        return (
          <div className="bg-gradient-custom min-h-screen flex flex-col justify-between">
            {/* Stats Bar */}
            <div className="fixed top-0 left-0 right-0 bg-gray-900 text-white p-4 shadow-md flex justify-around text-sm md:text-base">
              <div className="flex items-center space-x-1">
                <TrendingUp /> <span>Efficiency: {state.stats.efficiency}</span>
              </div>
              <div className="flex items-center space-x-1">
                <Users /> <span>Influence: {state.stats.influence}</span>
              </div>
              <div className="flex items-center space-x-1">
                <Brain /> <span>Innovation: {state.stats.innovation}</span>
              </div>
              <div className="flex items-center space-x-1">
                <Star /> <span>Memes: {state.stats.memes}</span>
              </div>
            </div>

            {/* Game Content */}
            <div className="p-8 bg-gray-800 rounded shadow-lg text-center w-11/12 md:w-3/4 mt-16 mx-auto">
              {state.phase === PHASES.TITLE ? (
                <>
                  <h1 className="text-4xl font-bold">D.O.G.E</h1>
                  <p className="mt-4 text-lg">Department Of Government Efficiency</p>
                  <button
                    className="mt-6 px-6 py-2 bg-blue-500 text-white rounded"
                    onClick={() => setState({ ...state, phase: PHASES.STORY })}
                  >
                    Start
                  </button>
                </>
              ) : state.phase === PHASES.ENDING ? (
                <>
                  <h1 className="text-3xl font-bold">Ending</h1>
                  <p className="mt-4">{G.scenes[state.scene].text}</p>
                  <p className="mt-4 text-lg font-semibold">{state.ending}</p>
                  <button
                    className="mt-6 px-6 py-2 bg-green-500 text-white rounded"
                    onClick={resetGame}
                  >
                    Replay
                  </button>
                </>
              ) : (
                <>
                  <p className="text-lg mb-6">{G.scenes[state.scene].text}</p>
                  {G.scenes[state.scene].choices.map((choice, i) => (
                    <button
                      key={i}
                      className="block w-full px-4 py-2 bg-gray-700 hover:bg-gray-600 text-left text-white rounded mb-2 transition-colors"
                      onClick={() => handleChoice(choice)}
                    >
                      {choice.text}
                    </button>
                  ))}
                </>
              )}
            </div>

            {/* Footer */}
            <Footer />
          </div>
        );
      }

      // Mount the app
      const root = ReactDOM.createRoot(document.getElementById('root'));
      root.render(<App />);
    </script>
  

</body></html>